From molli123@fuckner.net  Tue Jul 10 13:10:08 2007
Return-Path: <molli123@fuckner.net>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id F283616A473
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 10 Jul 2007 13:10:08 +0000 (UTC)
	(envelope-from molli123@fuckner.net)
Received: from dedihh.fuckner.net (dedihh.fuckner.net [81.209.183.161])
	by mx1.freebsd.org (Postfix) with ESMTP id B4C7413C46C
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 10 Jul 2007 13:10:08 +0000 (UTC)
	(envelope-from molli123@fuckner.net)
Received: from localhost (localhost [127.0.0.1])
	by dedihh.fuckner.net (Postfix) with ESMTP id 6D16C61CD1
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 10 Jul 2007 15:10:07 +0200 (CEST)
Received: from dedihh.fuckner.net ([127.0.0.1])
	by localhost (dedihh.fuckner.net [127.0.0.1]) (amavisd-new, port 10024)
	with SMTP id TJ74QE38lY5D for <FreeBSD-gnats-submit@freebsd.org>;
	Tue, 10 Jul 2007 15:10:02 +0200 (CEST)
Received: by dedihh.fuckner.net (Postfix, from userid 1003)
	id 7513061CC9; Tue, 10 Jul 2007 15:10:02 +0200 (CEST)
Message-Id: <20070710131002.7513061CC9@dedihh.fuckner.net>
Date: Tue, 10 Jul 2007 15:10:02 +0200 (CEST)
From: Michael Fuckner <michael@fuckner.net>
Reply-To: Michael Fuckner <michael@fuckner.net>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: Update SATA-IDs for ICH9
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         114473
>Category:       kern
>Synopsis:       [sata] [patch] Update SATA-IDs for ICH9
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    simon
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jul 10 13:20:02 GMT 2007
>Closed-Date:    Mon Nov 05 11:57:06 UTC 2007
>Last-Modified:  Mon Nov 05 11:57:06 UTC 2007
>Originator:     Michael Fuckner
>Release:        FreeBSD 7.0-CURRENT amd64
>Organization:
>Environment:
System: FreeBSD g33.rebootking.de 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Tue Jul 10 13:40:52 CEST 2007 root@g33.rebootking.de:/usr/obj/usr/src/sys/G33 amd64


        
>Description:
Kernel doesn't recognize Intels ICH9 Southbridge (aka I82801I) right now, fails to mount local filesystems

>How-To-Repeat:
boot kernel on a new motherboard with ICH9

>Fix:
Apply this patch:

--- dev/ata/ata-pci.h.orig      2007-07-08 08:19:06.000000000 +0200
+++ dev/ata/ata-pci.h   2007-07-08 09:44:28.000000000 +0200
@@ -167,6 +167,10 @@
 #define ATA_I82801HB_S2         0x28258086
 #define ATA_I82801HBM_S1        0x28298086
 #define ATA_I82801HBM_S2        0x282a8086
+#define ATA_I82801IB_S1         0x29208086
+#define ATA_I82801IB_AH6        0x29228086
+#define ATA_I82801IB_AH4        0x29238086
+#define ATA_I82801IB_S2         0x29268086
 #define ATA_I31244              0x32008086
 
 #define ATA_ITE_ID              0x1283
--- dev/ata/ata-chipset.c.orig  2007-07-09 16:57:50.000000000 +0200
+++ dev/ata/ata-chipset.c       2007-07-09 16:58:31.000000000 +0200
@@ -1710,6 +1710,10 @@
      { ATA_I82801HB_AH6, 0, AHCI, 0x00, ATA_SA300, "ICH8" },
      { ATA_I82801HBM_S1, 0, AHCI, 0x00, ATA_SA300, "ICH8M" },
      { ATA_I82801HBM_S2, 0, AHCI, 0x00, ATA_SA300, "ICH8M" },
+     { ATA_I82801IB_S1,  0, AHCI, 0x00, ATA_SA300, "ICH9" },
+     { ATA_I82801IB_S2,  0, AHCI, 0x00, ATA_SA300, "ICH9" },
+     { ATA_I82801IB_AH4, 0, AHCI, 0x00, ATA_SA300, "ICH9" },
+     { ATA_I82801IB_AH6, 0, AHCI, 0x00, ATA_SA300, "ICH9" },
      { ATA_I31244,       0,    0, 0x00, ATA_SA150, "31244" },
      { 0, 0, 0, 0, 0, 0}};
     char buffer[64]; 


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->sos 
Responsible-Changed-By: rodrigc 
Responsible-Changed-When: Wed Jul 11 01:55:01 UTC 2007 
Responsible-Changed-Why:  
Over to maintainer. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=114473 

Adding to audit trail from misfiled PR kern/115529:
 
Date: Tue, 14 Aug 2007 22:37:12 +0300
From: Andriy Podanenko <podarok@ua.fm>

 --1421935635-678854362-1187120232=:26064
 Content-Type: TEXT/PLAIN; CHARSET=iso-8859-5
 Content-Transfer-Encoding: QUOTED-PRINTABLE
 
 More complex patch with a large array of ICH9 modifications
 
 this patch give some functionality for
 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D115481
 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D115479
 
 *************************************
 my dmesg after it on Asus P5K SE
 *************************************
 
 Copyright (c) 1992-2007 The FreeBSD Project.
 Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
 =09The Regents of the University of California. All rights reserved.
 FreeBSD is a registered trademark of The FreeBSD Foundation.
 FreeBSD 6.2-RELEASE-p7 #3: Tue Aug 14 18:35:55 UTC 2007
     root@podarok.voliacable.com:/usr/obj/usr/src/sys/GENERIC
 can't re-use a leaf (mddebug)!
 module_register: module g_md already exists!
 Module g_md failed to register: 17
 module_register: module pci/hptmv already exists!
 Module pci/hptmv failed to register: 17
 module_register: module g_bsd already exists!
 Module g_bsd failed to register: 17
 module_register: module g_mbrext already exists!
 Module g_mbrext failed to register: 17
 module_register: module g_mbr already exists!
 Module g_mbr failed to register: 17
 Timecounter "i8254" frequency 1193182 Hz quality 0
 CPU: Intel(R) Core(TM)2 Duo CPU     E6550  @ 2.33GHz (2336.08-MHz K8-class =
 CPU)
   Origin =3D "GenuineIntel"  Id =3D 0x6fb  Stepping =3D 11
   Features=3D0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PG=
 E,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
   Features2=3D0xe3fd<SSE3,RSVD2,MON,DS_CPL,VMX,<b6>,EST,TM2,<b9>,CX16,<b14>=
 ,<b15>>
   AMD Features=3D0x20100800<SYSCALL,NX,LM>
   AMD Features2=3D0x1<LAHF>
   Cores per package: 2
 real memory  =3D 2146959360 (2047 MB)
 avail memory =3D 2060800000 (1965 MB)
 ACPI APIC Table: <A_M_I_ OEMAPIC >
 ioapic0 <Version 2.0> irqs 0-23 on motherboard
 kbd1 at kbdmux0
 ichwd module loaded
 ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
 acpi0: <NEC > on motherboard
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi_bus_number: can't get _ADR
 acpi0: Power Button (fixed)
 Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
 cpu0: <ACPI CPU> on acpi0
 est0: <Enhanced SpeedStep Frequency Control> on cpu0
 p4tcc0: <CPU Frequency Thermal Control> on cpu0
 pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
 pci0: <ACPI PCI bus> on pcib0
 pcib1: <ACPI PCI-PCI bridge> irq 16 at device 1.0 on pci0
 pci1: <ACPI PCI bus> on pcib1
 pci1: <display, VGA> at device 0.0 (no driver attached)
 uhci0: <UHCI (generic) USB controller> port 0xc800-0xc81f irq 16 at device =
 26.0 on pci0
 uhci0: [GIANT-LOCKED]
 usb0: <UHCI (generic) USB controller> on uhci0
 usb0: USB revision 1.0
 uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub0: 2 ports with 2 removable, self powered
 uhci1: <UHCI (generic) USB controller> port 0xc880-0xc89f irq 21 at device =
 26.1 on pci0
 uhci1: [GIANT-LOCKED]
 usb1: <UHCI (generic) USB controller> on uhci1
 usb1: USB revision 1.0
 uhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub1: 2 ports with 2 removable, self powered
 uhci2: <UHCI (generic) USB controller> port 0xcc00-0xcc1f irq 18 at device =
 26.2 on pci0
 uhci2: [GIANT-LOCKED]
 usb2: <UHCI (generic) USB controller> on uhci2
 usb2: USB revision 1.0
 uhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub2: 2 ports with 2 removable, self powered
 ehci0: <EHCI (generic) USB 2.0 controller> mem 0xfbfffc00-0xfbffffff irq 18=
  at device 26.7 on pci0
 ehci0: [GIANT-LOCKED]
 usb3: EHCI version 1.0
 usb3: companion controllers, 2 ports each: usb0 usb1 usb2
 usb3: <EHCI (generic) USB 2.0 controller> on ehci0
 usb3: USB revision 2.0
 uhub3: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
 uhub3: 6 ports with 6 removable, self powered
 pcm0: <Intel (Unknown) High Definition Audio Controller> mem 0xfbff8000-0xf=
 bffbfff irq 22 at device 27.0 on pci0
 pcib2: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0
 pci3: <ACPI PCI bus> on pcib2
 pcib3: <ACPI PCI-PCI bridge> irq 17 at device 28.4 on pci0
 pci2: <ACPI PCI bus> on pcib3
 atapci0: <GENERIC ATA controller> port 0xdc00-0xdc07,0xd880-0xd883,0xd800-0=
 xd807,0xd480-0xd483,0xd400-0xd40f mem 0xfeaffc00-0xfeafffff irq 16 at devic=
 e 0.0 on pci2
 ata2: <ATA channel 0> on atapci0
 ata3: <ATA channel 1> on atapci0
 uhci3: <UHCI (generic) USB controller> port 0xc080-0xc09f irq 23 at device =
 29.0 on pci0
 uhci3: [GIANT-LOCKED]
 usb4: <UHCI (generic) USB controller> on uhci3
 usb4: USB revision 1.0
 uhub4: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub4: 2 ports with 2 removable, self powered
 uhci4: <UHCI (generic) USB controller> port 0xc400-0xc41f irq 19 at device =
 29.1 on pci0
 uhci4: [GIANT-LOCKED]
 usb5: <UHCI (generic) USB controller> on uhci4
 usb5: USB revision 1.0
 uhub5: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub5: 2 ports with 2 removable, self powered
 uhci5: <UHCI (generic) USB controller> port 0xc480-0xc49f irq 18 at device =
 29.2 on pci0
 uhci5: [GIANT-LOCKED]
 usb6: <UHCI (generic) USB controller> on uhci5
 usb6: USB revision 1.0
 uhub6: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
 uhub6: 2 ports with 2 removable, self powered
 ehci1: <EHCI (generic) USB 2.0 controller> mem 0xfbfff800-0xfbfffbff irq 23=
  at device 29.7 on pci0
 ehci1: [GIANT-LOCKED]
 usb7: EHCI version 1.0
 usb7: companion controllers, 2 ports each: usb4 usb5 usb6
 usb7: <EHCI (generic) USB 2.0 controller> on ehci1
 usb7: USB revision 2.0
 uhub7: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
 uhub7: 6 ports with 6 removable, self powered
 umass0: Generic Mass Storage Device, rev 2.00/1.27, addr 2
 pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
 pci4: <ACPI PCI bus> on pcib4
 dc0: <Accton EN2242 MiniPCI 10/100BaseTX> port 0xe800-0xe8ff mem 0xfebffc00=
 -0xfebfffff irq 16 at device 0.0 on pci4
 miibus0: <MII bus> on dc0
 ukphy0: <Generic IEEE 802.3u media interface> on miibus0
 ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
 dc0: Ethernet address: 00:c0:49:b3:8a:81
 isab0: <PCI-ISA bridge> at device 31.0 on pci0
 isa0: <ISA bus> on isab0
 atapci1: <Intel ICH9 SATA300 controller> port 0xb000-0xb007,0xac00-0xac03,0=
 xa880-0xa887,0xa800-0xa803,0xa480-0xa48f,0xa400-0xa40f irq 22 at device 31.=
 2 on pci0
 ata4: <ATA channel 0> on atapci1
 ata5: <ATA channel 1> on atapci1
 ichsmb0: <SMBus controller> port 0x400-0x41f mem 0xfbfff400-0xfbfff4ff irq =
 18 at device 31.3 on pci0
 ichsmb0: [GIANT-LOCKED]
 smbus0: <System Management Bus> on ichsmb0
 smb0: <SMBus generic I/O> on smbus0
 atapci2: <Intel ICH9 SATA300 controller> port 0xc000-0xc007,0xbc00-0xbc03,0=
 xb880-0xb887,0xb800-0xb803,0xb480-0xb48f,0xb400-0xb40f irq 22 at device 31.=
 5 on pci0
 ata6: <ATA channel 0> on atapci2
 ata7: <ATA channel 1> on atapci2
 acpi_button0: <Power Button> on acpi0
 speaker0: <PC speaker> port 0x61 on acpi0
 fdc0: <floppy drive controller (FDE)> port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on=
  acpi0
 fdc0: [FAST]
 atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
 atkbd0: <AT Keyboard> irq 1 on atkbdc0
 kbd0 at atkbd0
 atkbd0: [GIANT-LOCKED]
 ppc0: cannot reserve I/O port range
 sc0: <System console> at flags 0x100 on isa0
 sc0: VGA <16 virtual consoles, flags=3D0x300>
 sio0: configured irq 4 not in bitmap of probed irqs 0
 sio0: port may not be enabled
 sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
 sio0: type 8250 or not responding
 sio1: configured irq 3 not in bitmap of probed irqs 0
 sio1: port may not be enabled
 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
 Timecounter "TSC" frequency 2336080971 Hz quality 800
 Timecounters tick every 1.000 msec
 The GEOM class BSD is already loaded.
 The GEOM class MBREXT is already loaded.
 The GEOM class MBR is already loaded.
 The GEOM class MD is already loaded.
 ad8: 114473MB <Seagate ST3120813AS 2AAA> at ata4-master SATA150
 ad10: 190782MB <Seagate ST3200820AS 3.AAD> at ata5-master SATA150
 ad12: 114473MB <Seagate ST3120813AS 2AAA> at ata6-master SATA150
 ad14: 152627MB <Seagate ST3160815AS 3.AAD> at ata7-master SATA150
 pcm0: <HDA Codec: Realtek ALC883>
 pcm0: <HDA Driver Revision: 20061013_0032>
 da0 at umass-sim0 bus 0 target 0 lun 0
 da0: <Generic USB SD Reader 1.00> Removable Direct Access SCSI-0 device=20
 da0: 40.000MB/s transfers
 da0: Attempt to query device size failed: NOT READY, Medium not present
 da1 at umass-sim0 bus 0 target 0 lun 1
 da1: <Generic USB CF Reader 1.01> Removable Direct Access SCSI-0 device=20
 da1: 40.000MB/s transfers
 da1: Attempt to query device size failed: NOT READY, Medium not present
 da2 at umass-sim0 bus 0 target 0 lun 2
 da2: <Generic USB SM Reader 1.02> Removable Direct Access SCSI-0 device=20
 da2: 40.000MB/s transfers
 da2: Attempt to query device size failed: NOT READY, Medium not present
 da3 at umass-sim0 bus 0 target 0 lun 3
 da3: <Generic USB MS Reader 1.03> Removable Direct Access SCSI-0 device=20
 da3: 40.000MB/s transfers
 da3: Attempt to query device size failed: NOT READY, Medium not present
 
 -- =E0=D5=DA=DB=D0=DC=D0 --------------------------------------------------=
 ---------
 http://FREEhost.com.ua - =DF=DE=DA=E3=DF=D0=EF =E5=DE=E1=E2=D8=DD=D3 +10 =
 =E3.=D5. =DA=DE=DD=E2=D5=DA=E1=E2=D0 =DD=D0 Begun =D2 =DF=DE=D4=D0=E0=DE=DA=
 !
 --1421935635-678854362-1187120232=:26064
 Content-Type: APPLICATION/OCTET-STREAM; name="ata-chipset.c"
 Content-Transfer-Encoding: BASE64
 Content-Disposition: attachment; filename="ata-chipset.c"
 
 LyotCiAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDYgU/hyZW4gU2NobWlk
 dCA8c29zQEZyZWVCU0Qub3JnPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
 KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
 YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBh
 cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
 aXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
 b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAq
 ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
 b2xsb3dpbmcgZGlzY2xhaW1lciwKICogICAgd2l0aG91dCBtb2RpZmljYXRp
 b24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUu
 CiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
 cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
 bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoK
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
 QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5U
 SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
 RUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
 U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgog
 KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
 QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUws
 IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
 TkcsIEJVVAogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
 U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERB
 VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
 RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZ
 LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
 T1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
 SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiBUSElTIFNP
 RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
 IFNVQ0ggREFNQUdFLgogKi8KCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KX19G
 QlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLWNoaXBzZXQu
 Yyx2IDEuMTI2LjIuMTUgMjAwNi8xMC8wOSAxNjowMTozNSBzb3MgRXhwICQi
 KTsKCiNpbmNsdWRlICJvcHRfYXRhLmgiCiNpbmNsdWRlIDxzeXMvcGFyYW0u
 aD4KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgojaW5jbHVkZSA8c3lzL2tlcm5l
 bC5oPgojaW5jbHVkZSA8c3lzL2F0YS5oPgojaW5jbHVkZSA8c3lzL2J1cy5o
 PgojaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgojaW5jbHVkZSA8c3lzL21hbGxv
 Yy5oPgojaW5jbHVkZSA8c3lzL2xvY2suaD4KI2luY2x1ZGUgPHN5cy9tdXRl
 eC5oPgojaW5jbHVkZSA8c3lzL3NlbWEuaD4KI2luY2x1ZGUgPHN5cy90YXNr
 cXVldWUuaD4KI2luY2x1ZGUgPHZtL3VtYS5oPgojaW5jbHVkZSA8bWFjaGlu
 ZS9zdGRhcmcuaD4KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KI2lu
 Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CiNpbmNsdWRlIDxzeXMvcm1hbi5oPgoj
 aW5jbHVkZSA8ZGV2L3BjaS9wY2l2YXIuaD4KI2luY2x1ZGUgPGRldi9wY2kv
 cGNpcmVnLmg+CiNpbmNsdWRlIDxkZXYvYXRhL2F0YS1hbGwuaD4KI2luY2x1
 ZGUgPGRldi9hdGEvYXRhLXBjaS5oPgojaW5jbHVkZSA8YXRhX2lmLmg+Cgov
 KiBsb2NhbCBwcm90b3R5cGVzICovCi8qIGF0YS1jaGlwc2V0LmMgKi8Kc3Rh
 dGljIGludCBhdGFfZ2VuZXJpY19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgdm9pZCBhdGFfZ2VuZXJpY19pbnRyKHZvaWQgKmRhdGEpOwpzdGF0
 aWMgdm9pZCBhdGFfZ2VuZXJpY19zZXRtb2RlKGRldmljZV90IGRldiwgaW50
 IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlfZW5hYmxlKHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0aWMgdm9pZCBhdGFfc2F0YV9waHlf
 ZXZlbnQodm9pZCAqY29udGV4dCwgaW50IGR1bW15KTsKc3RhdGljIGludCBh
 dGFfc2F0YV9jb25uZWN0KHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpOwpzdGF0
 aWMgdm9pZCBhdGFfc2F0YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1v
 ZGUpOwpzdGF0aWMgaW50IGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRl
 dik7CnN0YXRpYyBpbnQgYXRhX2FoY2lfYWxsb2NhdGUoZGV2aWNlX3QgZGV2
 KTsKc3RhdGljIGludCBhdGFfYWhjaV9zdGF0dXMoZGV2aWNlX3QgZGV2KTsK
 c3RhdGljIGludCBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg
 YXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0YV9haGNpX2Vu
 ZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpz
 dGF0aWMgdm9pZCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgdm9pZCBhdGFfYWhjaV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1h
 X3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwpzdGF0
 aWMgdm9pZCBhdGFfYWhjaV9kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp
 YyBpbnQgYXRhX2FoY2lfc2V0dXBfZmlzKHVfaW50OF90ICpmaXMsIHN0cnVj
 dCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2FjYXJk
 X3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWNhcmRf
 ODUwX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyB2
 b2lkIGF0YV9hY2FyZF84Nlhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBt
 b2RlKTsKc3RhdGljIGludCBhdGFfYWxpX2NoaXBpbml0KGRldmljZV90IGRl
 dik7CnN0YXRpYyBpbnQgYXRhX2FsaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 OwpzdGF0aWMgaW50IGF0YV9hbGlfc2F0YV9hbGxvY2F0ZShkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYWxpX3Jlc2V0KGRldmljZV90IGRldik7
 CnN0YXRpYyB2b2lkIGF0YV9hbGlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGlu
 dCBtb2RlKTsKc3RhdGljIGludCBhdGFfYW1kX2NoaXBpbml0KGRldmljZV90
 IGRldik7CnN0YXRpYyBpbnQgYXRhX2F0aV9jaGlwaW5pdChkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfYXRpX3NldG1vZGUoZGV2aWNlX3QgZGV2
 LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX2N5cml4X2NoaXBpbml0KGRl
 dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXJpeF9zZXRtb2RlKGRl
 dmljZV90IGRldiwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9jeXByZXNz
 X2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jeXBy
 ZXNzX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBp
 bnQgYXRhX2hpZ2hwb2ludF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgaW50IGF0YV9oaWdocG9pbnRfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KTsK
 c3RhdGljIHZvaWQgYXRhX2hpZ2hwb2ludF9zZXRtb2RlKGRldmljZV90IGRl
 diwgaW50IG1vZGUpOwpzdGF0aWMgaW50IGF0YV9oaWdocG9pbnRfY2hlY2tf
 ODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRh
 X2ludGVsX2NoaXBpbml0KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRh
 X2ludGVsX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0
 YV9pbnRlbF9yZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFf
 aW50ZWxfb2xkX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0
 YXRpYyB2b2lkIGF0YV9pbnRlbF9uZXdfc2V0bW9kZShkZXZpY2VfdCBkZXYs
 IGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRfYWxsb2Nh
 dGUoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfaW50ZWxfMzEyNDRf
 c3RhdHVzKGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2ludGVsXzMx
 MjQ0X2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3Rh
 dGljIHZvaWQgYXRhX2ludGVsXzMxMjQ0X3Jlc2V0KGRldmljZV90IGRldik7
 CnN0YXRpYyBpbnQgYXRhX2l0ZV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgdm9pZCBhdGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQg
 bW9kZSk7CnN0YXRpYyBpbnQgYXRhX2ptaWNyb25fY2hpcGluaXQoZGV2aWNl
 X3QgZGV2KTsKc3RhdGljIGludCBhdGFfam1pY3Jvbl9hbGxvY2F0ZShkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9yZXNldChkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfam1pY3Jvbl9kbWFpbml0KGRl
 dmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9qbWljcm9uX3NldG1vZGUo
 ZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX21hcnZl
 bGxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbWFy
 dmVsbF9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t
 YXJ2ZWxsX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9t
 YXJ2ZWxsX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAq
 cmVxdWVzdCk7CnN0YXRpYyBpbnQgYXRhX21hcnZlbGxfZW5kX3RyYW5zYWN0
 aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CnN0YXRpYyB2b2lk
 IGF0YV9tYXJ2ZWxsX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk
 IGF0YV9tYXJ2ZWxsX2RtYXNldHByZCh2b2lkICp4c2MsIGJ1c19kbWFfc2Vn
 bWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcik7CnN0YXRpYyB2
 b2lkIGF0YV9tYXJ2ZWxsX2RtYWluaXQoZGV2aWNlX3QgZGV2KTsKc3RhdGlj
 IGludCBhdGFfbmF0aW9uYWxfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKc3Rh
 dGljIHZvaWQgYXRhX25hdGlvbmFsX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBp
 bnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX252aWRpYV9jaGlwaW5pdChkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9udmlkaWFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfbnZpZGlhX3N0YXR1cyhkZXZp
 Y2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfbnZpZGlhX3Jlc2V0KGRldmlj
 ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfY2hpcGluaXQoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9hbGxvY2F0ZShk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX3N0YXR1cyhk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9wcm9taXNlX2RtYXN0YXJ0
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfZG1hc3Rv
 cChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9kbWFy
 ZXNldChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9k
 bWFpbml0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9wcm9taXNl
 X3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQg
 YXRhX3Byb21pc2VfdHgyX2FsbG9jYXRlKGRldmljZV90IGRldik7CnN0YXRp
 YyBpbnQgYXRhX3Byb21pc2VfdHgyX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwpz
 dGF0aWMgaW50IGF0YV9wcm9taXNlX21pb19hbGxvY2F0ZShkZXZpY2VfdCBk
 ZXYpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9taW9faW50cih2b2lkICpk
 YXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9taW9fc3RhdHVzKGRldmlj
 ZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3Byb21pc2VfbWlvX2NvbW1hbmQo
 c3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKc3RhdGljIHZvaWQgYXRh
 X3Byb21pc2VfbWlvX3Jlc2V0KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lk
 IGF0YV9wcm9taXNlX21pb19kbWFpbml0KGRldmljZV90IGRldik7CnN0YXRp
 YyB2b2lkIGF0YV9wcm9taXNlX21pb19zZXRtb2RlKGRldmljZV90IGRldiwg
 aW50IG1vZGUpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9zeDRfaW50cih2
 b2lkICpkYXRhKTsKc3RhdGljIGludCBhdGFfcHJvbWlzZV9zeDRfY29tbWFu
 ZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgaW50IGF0
 YV9wcm9taXNlX2Fwa3QodV9pbnQ4X3QgKmJ5dGVwLCBzdHJ1Y3QgYXRhX3Jl
 cXVlc3QgKnJlcXVlc3QpOwpzdGF0aWMgdm9pZCBhdGFfcHJvbWlzZV9xdWV1
 ZV9ocGt0KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIsIHVfaW50
 MzJfdCBocGt0KTsKc3RhdGljIHZvaWQgYXRhX3Byb21pc2VfbmV4dF9ocGt0
 KHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIpOwpzdGF0aWMgaW50
 IGF0YV9zZXJ2ZXJ3b3Jrc19jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwpzdGF0
 aWMgaW50IGF0YV9zZXJ2ZXJ3b3Jrc19hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 OwpzdGF0aWMgdm9pZCBhdGFfc2VydmVyd29ya3Nfc2V0bW9kZShkZXZpY2Vf
 dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2NoaXBpbml0
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX2NtZF9hbGxvY2F0ZShk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9jbWRfc3RhdHVzKGRldmlj
 ZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV9jbWRfc2V0bW9kZShkZXZpY2Vf
 dCBkZXYsIGludCBtb2RlKTsKc3RhdGljIGludCBhdGFfc2lpX2FsbG9jYXRl
 KGRldmljZV90IGRldik7CnN0YXRpYyBpbnQgYXRhX3NpaV9zdGF0dXMoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3NpaV9yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lpX3NldG1vZGUoZGV2aWNlX3Qg
 ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3Npc19jaGlwaW5pdChk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9zaXNfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3Npc19yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfc2lzX3NldG1vZGUoZGV2aWNlX3Qg
 ZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBpbnQgYXRhX3ZpYV9jaGlwaW5pdChk
 ZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV92aWFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KTsKc3RhdGljIHZvaWQgYXRhX3ZpYV9yZXNldChkZXZpY2Vf
 dCBkZXYpOwpzdGF0aWMgdm9pZCBhdGFfdmlhX3NvdXRoYnJpZGdlX2ZpeHVw
 KGRldmljZV90IGRldik7CnN0YXRpYyB2b2lkIGF0YV92aWFfZmFtaWx5X3Nl
 dG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CnN0YXRpYyBzdHJ1Y3Qg
 YXRhX2NoaXBfaWQgKmF0YV9tYXRjaF9jaGlwKGRldmljZV90IGRldiwgc3Ry
 dWN0IGF0YV9jaGlwX2lkICppbmRleCk7CnN0YXRpYyBzdHJ1Y3QgYXRhX2No
 aXBfaWQgKmF0YV9maW5kX2NoaXAoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXRh
 X2NoaXBfaWQgKmluZGV4LCBpbnQgc2xvdCk7CnN0YXRpYyBpbnQgYXRhX3Nl
 dHVwX2ludGVycnVwdChkZXZpY2VfdCBkZXYpOwpzdGF0aWMgaW50IGF0YV9z
 ZXJpYWxpemUoZGV2aWNlX3QgZGV2LCBpbnQgZmxhZ3MpOwpzdGF0aWMgdm9p
 ZCBhdGFfcHJpbnRfY2FibGUoZGV2aWNlX3QgZGV2LCB1X2ludDhfdCAqd2hv
 KTsKc3RhdGljIGludCBhdGFfYXRhcGkoZGV2aWNlX3QgZGV2KTsKc3RhdGlj
 IGludCBhdGFfY2hlY2tfODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7
 CnN0YXRpYyBpbnQgYXRhX21vZGUyaWR4KGludCBtb2RlKTsKCgovKgogKiBn
 ZW5lcmljIEFUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KaW50CmF0YV9nZW5l
 cmljX2lkZW50KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lf
 Y29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAg
 ICBkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiR0VORVJJQyBBVEEgY29udHJvbGxl
 ciIpOwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfZ2VuZXJpY19jaGlwaW5p
 dDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9nZW5lcmljX2No
 aXBpbml0KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAgICBp
 ZiAoYXRhX3NldHVwX2ludGVycnVwdChkZXYpKQoJcmV0dXJuIEVOWElPOwog
 ICAgY3Rsci0+c2V0bW9kZSA9IGF0YV9nZW5lcmljX3NldG1vZGU7CiAgICBy
 ZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfaW50cih2b2lk
 ICpkYXRhKQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy
 ID0gZGF0YTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2g7CiAgICBpbnQg
 dW5pdDsKCiAgICBmb3IgKHVuaXQgPSAwOyB1bml0IDwgY3Rsci0+Y2hhbm5l
 bHM7IHVuaXQrKykgewoJaWYgKChjaCA9IGN0bHItPmludGVycnVwdFt1bml0
 XS5hcmd1bWVudCkpCgkgICAgY3Rsci0+aW50ZXJydXB0W3VuaXRdLmZ1bmN0
 aW9uKGNoKTsKICAgIH0KfQoKc3RhdGljIHZvaWQKYXRhX2dlbmVyaWNfc2V0
 bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBzdHJ1Y3QgYXRh
 X2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg
 IG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUsIEFUQV9VRE1BMik7
 CiAgICBtb2RlID0gYXRhX2NoZWNrXzgwcGluKGRldiwgbW9kZSk7CiAgICBp
 ZiAoIWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFf
 U0ZfU0VUWEZFUiwgMCwgbW9kZSkpCglhdGFkZXYtPm1vZGUgPSBtb2RlOwp9
 CgoKLyoKICogU0FUQSBzdXBwb3J0IGZ1bmN0aW9ucwogKi8Kc3RhdGljIHZv
 aWQKYXRhX3NhdGFfcGh5X2VuYWJsZShzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 KQp7CiAgICBpbnQgbG9vcCwgcmV0cnk7CgogICAgaWYgKChBVEFfSURYX0lO
 TChjaCwgQVRBX1NDT05UUk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gQVRB
 X1NDX0RFVF9JRExFKSB7CglhdGFfc2F0YV9jb25uZWN0KGNoKTsKCXJldHVy
 bjsKICAgIH0KCiAgICBmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCAxMDsgcmV0
 cnkrKykgewoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKyspIHsK
 CSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1NDX0RF
 VF9SRVNFVCk7CgkgICAgYXRhX3VkZWxheSgxMDApOwoJICAgIGlmICgoQVRB
 X0lEWF9JTkwoY2gsIEFUQV9TQ09OVFJPTCkgJgoJCSBBVEFfU0NfREVUX01B
 U0spID09IEFUQV9TQ19ERVRfUkVTRVQpCgkJYnJlYWs7Cgl9CglhdGFfdWRl
 bGF5KDUwMDApOwoJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwOyBsb29wKysp
 IHsKCSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9TQ09OVFJPTCwgQVRBX1ND
 X0RFVF9JRExFIHwKCQkJCQkgICBBVEFfU0NfSVBNX0RJU19QQVJUSUFMIHwK
 CQkJCQkgICBBVEFfU0NfSVBNX0RJU19TTFVNQkVSKTsKCSAgICBhdGFfdWRl
 bGF5KDEwMCk7CgkgICAgaWYgKChBVEFfSURYX0lOTChjaCwgQVRBX1NDT05U
 Uk9MKSAmIEFUQV9TQ19ERVRfTUFTSykgPT0gMCkgewoJCWF0YV9zYXRhX2Nv
 bm5lY3QoY2gpOwoJCXJldHVybjsKCSAgICB9Cgl9CiAgICB9Cn0KCnN0YXRp
 YyB2b2lkCmF0YV9zYXRhX3BoeV9ldmVudCh2b2lkICpjb250ZXh0LCBpbnQg
 ZHVtbXkpCnsKICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cCA9IChz
 dHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAqKWNvbnRleHQ7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyh0cC0+ZGV2KTsK
 ICAgIGRldmljZV90ICpjaGlsZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7
 CgogICAgbXR4X2xvY2soJkdpYW50KTsgICAvKiBuZXdidXMgc3Vja2FnZSBp
 dCBuZWVkcyBHaWFudCAqLwogICAgaWYgKHRwLT5hY3Rpb24gPT0gQVRBX0Nf
 QVRUQUNIKSB7CglpZiAoYm9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50
 Zih0cC0+ZGV2LCAiQ09OTkVDVEVEXG4iKTsKCWF0YV9zYXRhX2Nvbm5lY3Qo
 Y2gpOwoJYXRhX2lkZW50aWZ5KHRwLT5kZXYpOwogICAgfQogICAgaWYgKHRw
 LT5hY3Rpb24gPT0gQVRBX0NfREVUQUNIKSB7CglpZiAoIWRldmljZV9nZXRf
 Y2hpbGRyZW4odHAtPmRldiwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgewoJ
 ICAgIGZvciAoaSA9IDA7IGkgPCBuY2hpbGRyZW47IGkrKykKCQlpZiAoY2hp
 bGRyZW5baV0pCgkJICAgIGRldmljZV9kZWxldGVfY2hpbGQodHAtPmRldiwg
 Y2hpbGRyZW5baV0pOwoJICAgIGZyZWUoY2hpbGRyZW4sIE1fVEVNUCk7Cgl9
 ICAgIAoJbXR4X2xvY2soJmNoLT5zdGF0ZV9tdHgpOwoJY2gtPnN0YXRlID0g
 QVRBX0lETEU7CgltdHhfdW5sb2NrKCZjaC0+c3RhdGVfbXR4KTsKCWlmIChi
 b290dmVyYm9zZSkKCSAgICBkZXZpY2VfcHJpbnRmKHRwLT5kZXYsICJESVND
 T05ORUNURURcbiIpOwogICAgfQogICAgbXR4X3VubG9jaygmR2lhbnQpOyAv
 KiBzdWNrYWdlIGNvZGUgZGVhbHQgd2l0aCwgcmVsZWFzZSBHaWFudCAqLwog
 ICAgZnJlZSh0cCwgTV9BVEEpOwp9CgpzdGF0aWMgaW50CmF0YV9zYXRhX2Nv
 bm5lY3Qoc3RydWN0IGF0YV9jaGFubmVsICpjaCkKewogICAgdV9pbnQzMl90
 IHN0YXR1czsKICAgIGludCB0aW1lb3V0OwoKICAgIC8qIHdhaXQgdXAgdG8g
 MSBzZWNvbmQgZm9yICJjb25uZWN0IHdlbGwiICovCiAgICBmb3IgKHRpbWVv
 dXQgPSAwOyB0aW1lb3V0IDwgMTAwIDsgdGltZW91dCsrKSB7CglzdGF0dXMg
 PSBBVEFfSURYX0lOTChjaCwgQVRBX1NTVEFUVVMpOwoJaWYgKChzdGF0dXMg
 JiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4x
 IHx8CgkgICAgKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFU
 QV9TU19DT05XRUxMX0dFTjIpCgkgICAgYnJlYWs7CglhdGFfdWRlbGF5KDEw
 MDAwKTsKICAgIH0KICAgIGlmICh0aW1lb3V0ID49IDEwMCkgewoJaWYgKGJv
 b3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg
 Y29ubmVjdCBzdGF0dXM9JTA4eFxuIiwgc3RhdHVzKTsKCXJldHVybiAwOwog
 ICAgfQoKICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KICAg
 IEFUQV9JRFhfT1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gs
 IEFUQV9TRVJST1IpKTsKCiAgICAvKiBmaW5kIG91dCB3aGF0IHR5cGUgZGV2
 aWNlIHdlIGdvdCBwb2xsIGZvciBzcGVjJ2QgMzEgc2Vjb25kcyAqLwogICAg
 LyogWFhYIFNPUyAxMCBzZWNzIGZvciBub3cgYXMgSSBoYXZlIGxpdHRsZSBw
 YXRpZW5jZSAqLwogICAgY2gtPmRldmljZXMgPSAwOwogICAgZm9yICh0aW1l
 b3V0ID0gMDsgdGltZW91dCA8IDEwMDA7IHRpbWVvdXQrKykgewoJaWYgKEFU
 QV9JRFhfSU5CKGNoLCBBVEFfU1RBVFVTKSAmIEFUQV9TX0JVU1kpIAoJICAg
 IERFTEFZKDEwMDAwKTsKCWVsc2UKCSAgICBicmVhazsKICAgIH0KICAgIGlm
 IChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoY2gtPmRldiwgIlNBVEEg
 Y29ubmVjdCByZWFkeSB0aW1lPSVkbXNcbiIsIHRpbWVvdXQgKiAxMCk7CiAg
 ICBpZiAodGltZW91dCA8IDEwMDApIHsKCWlmICgoQVRBX0lEWF9JTkIoY2gs
 IEFUQV9DWUxfTFNCKSA9PSBBVEFQSV9NQUdJQ19MU0IpICYmCgkgICAgKEFU
 QV9JRFhfSU5CKGNoLCBBVEFfQ1lMX01TQikgPT0gQVRBUElfTUFHSUNfTVNC
 KSkKCSAgICBjaC0+ZGV2aWNlcyA9IEFUQV9BVEFQSV9NQVNURVI7CgllbHNl
 IAoJICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQV9NQVNURVI7CiAgICB9CiAg
 ICBpZiAoYm9vdHZlcmJvc2UpCglkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJz
 YXRhX2Nvbm5lY3QgZGV2aWNlcz0weCViXG4iLAoJCSAgICAgIGNoLT5kZXZp
 Y2VzLCAiXDIwXDNBVEFQSV9NQVNURVJcMUFUQV9NQVNURVIiKTsKICAgIHJl
 dHVybiAxOwp9CgpzdGF0aWMgdm9pZAphdGFfc2F0YV9zZXRtb2RlKGRldmlj
 ZV90IGRldiwgaW50IG1vZGUpCnsKICAgIHN0cnVjdCBhdGFfZGV2aWNlICph
 dGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyoKICAgICAq
 IGlmIHdlIGRldGVjdCB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgYSByZWFsIFNB
 VEEgZGV2aWNlIHdlIGxpbWl0IAogICAgICogdGhlIHRyYW5zZmVyIG1vZGUg
 dG8gVURNQTUvQVRBMTAwLgogICAgICogdGhpcyB3b3JrcyBhcm91bmQgdGhl
 IHByb2JsZW1zIHNvbWUgZGV2aWNlcyBoYXMgd2l0aCB0aGUgCiAgICAgKiBN
 YXJ2ZWxsIDg4U1g4MDMwIFNBVEEtPlBBVEEgY29udmVydGVycyBhbmQgVURN
 QTYvQVRBMTMzLgogICAgICovCiAgICBpZiAoYXRhZGV2LT5wYXJhbS5zYXRh
 Y2FwYWJpbGl0aWVzICE9IDB4MDAwMCAmJgoJYXRhZGV2LT5wYXJhbS5zYXRh
 Y2FwYWJpbGl0aWVzICE9IDB4ZmZmZikgewoJc3RydWN0IGF0YV9jaGFubmVs
 ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2
 KSk7CgoJLyogb24gc29tZSBkcml2ZXMgd2UgbmVlZCB0byBzZXQgdGhlIHRy
 YW5zZmVyIG1vZGUgKi8KCWF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZF
 QVRVUkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwKCQkgICAgICAgYXRhX2xpbWl0
 X21vZGUoZGV2LCBtb2RlLCBBVEFfVURNQTYpKTsKCgkvKiBxdWVyeSBTQVRB
 IFNUQVRVUyBmb3IgdGhlIHNwZWVkICovCiAgICAgICAgaWYgKGNoLT5yX2lv
 W0FUQV9TU1RBVFVTXS5yZXMgJiYgCgkgICAoKEFUQV9JRFhfSU5MKGNoLCBB
 VEFfU1NUQVRVUykgJiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PQoJICAgIEFU
 QV9TU19DT05XRUxMX0dFTjIpKQoJICAgIGF0YWRldi0+bW9kZSA9IEFUQV9T
 QTMwMDsKCWVsc2UgCgkgICAgYXRhZGV2LT5tb2RlID0gQVRBX1NBMTUwOwog
 ICAgfQogICAgZWxzZSB7Cgltb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBt
 b2RlLCBBVEFfVURNQTUpOwoJaWYgKCFhdGFfY29udHJvbGNtZChkZXYsIEFU
 QV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUpKQoJICAg
 IGF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBBSENJIHYx
 LjAgY29tcGxpYW50IFNBVEEgY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwog
 Ki8Kc3RydWN0IGF0YV9haGNpX2RtYV9wcmQgewogICAgdV9pbnQ2NF90ICAg
 ICAgICAgICAgICAgICAgIGRiYTsKICAgIHVfaW50MzJfdCAgICAgICAgICAg
 ICAgICAgICByZXNlcnZlZDsKICAgIHVfaW50MzJfdCAgICAgICAgICAgICAg
 ICAgICBkYmM7ICAgICAgICAgICAgLyogMCBiYXNlZCAqLwojZGVmaW5lIEFU
 QV9BSENJX1BSRF9NQVNLICAgICAgIDB4MDAzZmZmZmYgICAgICAvKiBtYXgg
 NE1CICovCiNkZWZpbmUgQVRBX0FIQ0lfUFJEX0lQQyAgICAgICAgKDE8PDMx
 KQp9IF9fcGFja2VkOwoKc3RydWN0IGF0YV9haGNpX2NtZF90YWIgewogICAg
 dV9pbnQ4X3QgICAgICAgICAgICAgICAgICAgIGNmaXNbNjRdOwogICAgdV9p
 bnQ4X3QgICAgICAgICAgICAgICAgICAgIGFjbWRbMzJdOwogICAgdV9pbnQ4
 X3QgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzMyXTsKICAgIHN0cnVj
 dCBhdGFfYWhjaV9kbWFfcHJkICAgICBwcmRfdGFiWzE2XTsKfSBfX3BhY2tl
 ZDsKCnN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCB7CiAgICB1X2ludDE2X3Qg
 ICAgICAgICAgICAgICAgICAgY21kX2ZsYWdzOwogICAgdV9pbnQxNl90ICAg
 ICAgICAgICAgICAgICAgIHByZF9sZW5ndGg7ICAgICAvKiBQUkQgZW50cmll
 cyAqLwogICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgIGJ5dGVjb3Vu
 dDsKICAgIHVfaW50NjRfdCAgICAgICAgICAgICAgICAgICBjbWRfdGFibGVf
 cGh5czsgLyogMTI4Ynl0ZSBhbGlnbmVkICovCn0gX19wYWNrZWQ7CgoKc3Rh
 dGljIGludAphdGFfYWhjaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAg
 IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7CiAgICB1X2ludDMyX3QgdmVyc2lvbjsKCiAgICAvKiBy
 ZXNldCBBSENJIGNvbnRyb2xsZXIgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfR0hDLAoJICAgICBBVEFfSU5MKGN0bHItPnJfcmVz
 MiwgQVRBX0FIQ0lfR0hDKSB8IEFUQV9BSENJX0dIQ19IUik7CiAgICBERUxB
 WSgxMDAwMDAwKTsKICAgIGlmIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB
 X0FIQ0lfR0hDKSAmIEFUQV9BSENJX0dIQ19IUikgewoJYnVzX3JlbGVhc2Vf
 cmVzb3VyY2UoZGV2LCBjdGxyLT5yX3R5cGUyLCBjdGxyLT5yX3JpZDIsIGN0
 bHItPnJfcmVzMik7CglkZXZpY2VfcHJpbnRmKGRldiwgIkFIQ0kgY29udHJv
 bGxlciByZXNldCBmYWlsdXJlXG4iKTsKCXJldHVybiBFTlhJTzsKICAgIH0K
 CiAgICAvKiBlbmFibGUgQUhDSSBtb2RlICovCiAgICBBVEFfT1VUTChjdGxy
 LT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxyLT5y
 X3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfQUUpOwoKICAg
 IC8qIGdldCB0aGUgbnVtYmVyIG9mIEhXIGNoYW5uZWxzICovCiAgICBjdGxy
 LT5jaGFubmVscyA9IChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lf
 Q0FQKSAmIEFUQV9BSENJX05QTUFTSykrMTsKCiAgICAvKiBjbGVhciBpbnRl
 cnJ1cHRzICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ
 X0lTLCBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfSVMpKTsKCiAg
 ICAvKiBlbmFibGUgQUhDSSBpbnRlcnJ1cHRzICovCiAgICBBVEFfT1VUTChj
 dGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQywKCSAgICAgQVRBX0lOTChjdGxy
 LT5yX3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfSUUpOwoK
 ICAgIGN0bHItPnJlc2V0ID0gYXRhX2FoY2lfcmVzZXQ7CiAgICBjdGxyLT5k
 bWFpbml0ID0gYXRhX2FoY2lfZG1haW5pdDsKICAgIGN0bHItPmFsbG9jYXRl
 ID0gYXRhX2FoY2lfYWxsb2NhdGU7CiAgICBjdGxyLT5zZXRtb2RlID0gYXRh
 X3NhdGFfc2V0bW9kZTsKCiAgICAvKiBlbmFibGUgUENJIGludGVycnVwdCAq
 LwogICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwKCQkg
 ICAgIHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgMikgJiB+
 MHgwNDAwLCAyKTsKCiAgICAvKiBhbm5vdW5jZSB3ZSBzdXBwb3J0IHRoZSBI
 VyAqLwogICAgdmVyc2lvbiA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFf
 QUhDSV9WUyk7CiAgICBkZXZpY2VfcHJpbnRmKGRldiwKCQkgICJBSENJIFZl
 cnNpb24gJXgleC4leCV4IGNvbnRyb2xsZXIgd2l0aCAlZCBwb3J0cyBkZXRl
 Y3RlZFxuIiwKCQkgICh2ZXJzaW9uID4+IDI0KSAmIDB4ZmYsICh2ZXJzaW9u
 ID4+IDE2KSAmIDB4ZmYsCgkJICAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZl
 cnNpb24gJiAweGZmLCBjdGxyLT5jaGFubmVscyk7CiAgICByZXR1cm4gMDsK
 fQoKc3RhdGljIGludAphdGFfYWhjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry
 dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 ICAgIGludCBvZmZzZXQgPSAoY2gtPnVuaXQgPDwgNyk7CgogICAgLyogc2V0
 dXAgbGVnYWN5IGNydWZ0IHdlIG5lZWQgKi8KICAgIGNoLT5yX2lvW0FUQV9D
 WUxfTFNCXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFf
 Q1lMX0xTQl0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TSUcgKyAxICsgb2Zmc2V0
 OwogICAgY2gtPnJfaW9bQVRBX0NZTF9NU0JdLnJlcyA9IGN0bHItPnJfcmVz
 MjsKICAgIGNoLT5yX2lvW0FUQV9DWUxfTVNCXS5vZmZzZXQgPSBBVEFfQUhD
 SV9QX1NJRyArIDMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT
 XS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVT
 XS5vZmZzZXQgPSBBVEFfQUhDSV9QX1RGRCArIG9mZnNldDsKICAgIGNoLT5y
 X2lvW0FUQV9BTFRTVEFUXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+
 cl9pb1tBVEFfQUxUU1RBVF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9URkQgKyBv
 ZmZzZXQ7CgogICAgLyogc2V0IHRoZSBTQVRBIHJlc291cmNlcyAqLwogICAg
 Y2gtPnJfaW9bQVRBX1NTVEFUVVNdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAg
 IGNoLT5yX2lvW0FUQV9TU1RBVFVTXS5vZmZzZXQgPSBBVEFfQUhDSV9QX1NT
 VFMgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBj
 dGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQg
 PSBBVEFfQUhDSV9QX1NFUlIgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFf
 U0NPTlRST0xdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FU
 QV9TQ09OVFJPTF0ub2Zmc2V0ID0gQVRBX0FIQ0lfUF9TQ1RMICsgb2Zmc2V0
 OwogICAgY2gtPnJfaW9bQVRBX1NBQ1RJVkVdLnJlcyA9IGN0bHItPnJfcmVz
 MjsKICAgIGNoLT5yX2lvW0FUQV9TQUNUSVZFXS5vZmZzZXQgPSBBVEFfQUhD
 SV9QX1NBQ1QgKyBvZmZzZXQ7CgogICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9h
 aGNpX3N0YXR1czsKICAgIGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0
 YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uOwogICAgY2gtPmh3LmVuZF90cmFu
 c2FjdGlvbiA9IGF0YV9haGNpX2VuZF90cmFuc2FjdGlvbjsKICAgIGNoLT5o
 dy5jb21tYW5kID0gTlVMTDsgICAgICAvKiBub3QgdXNlZCBoZXJlICovCgog
 ICAgLyogc2V0dXAgdGhlIHdvcmsgYXJlYXMgKi8KICAgIEFUQV9PVVRMKGN0
 bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEIgKyBvZmZzZXQsCgkgICAgIGNo
 LT5kbWEtPndvcmtfYnVzICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUKTsKICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0
 LCAweDAwMDAwMDAwKTsKCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFU
 QV9BSENJX1BfRkIgKyBvZmZzZXQsCgkgICAgIGNoLT5kbWEtPndvcmtfYnVz
 ICsgQVRBX0FIQ0lfRkJfT0ZGU0VUKTsKICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfUF9GQlUgKyBvZmZzZXQsIDB4MDAwMDAwMDApOwoK
 ICAgIC8qIGVuYWJsZSB3YW50ZWQgcG9ydCBpbnRlcnJ1cHRzICovCiAgICBB
 VEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSUUgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0lYX0NQRCB8IEFUQV9BSENJX1BfSVhfVEZF
 IHwgQVRBX0FIQ0lfUF9JWF9IQkYgfAoJICAgICAgQVRBX0FIQ0lfUF9JWF9I
 QkQgfCBBVEFfQUhDSV9QX0lYX0lGIHwgQVRBX0FIQ0lfUF9JWF9PRiB8Cgkg
 ICAgICBBVEFfQUhDSV9QX0lYX1BSQyB8IEFUQV9BSENJX1BfSVhfUEMgfCBB
 VEFfQUhDSV9QX0lYX0RQIHwKCSAgICAgIEFUQV9BSENJX1BfSVhfVUYgfCBB
 VEFfQUhDSV9QX0lYX1NEQiB8IEFUQV9BSENJX1BfSVhfRFMgfAoJICAgICAg
 QVRBX0FIQ0lfUF9JWF9QUyB8IEFUQV9BSENJX1BfSVhfREhSKSk7CgogICAg
 Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN
 RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf
 UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKICAgIHJldHVybiAw
 Owp9CgpzdGF0aWMgaW50CmF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3Ry
 dWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 ICAgIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICp0cDsKICAgIHVfaW50MzJf
 dCBhY3Rpb24sIGlzdGF0dXMsIHNzdGF0dXMsIGVycm9yLCBpc3N1ZWQ7CiAg
 ICBpbnQgb2Zmc2V0ID0gKGNoLT51bml0IDw8IDcpOwogICAgaW50IHRhZyA9
 IDA7CgogICAgYWN0aW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9B
 SENJX0lTKTsKICAgIGlmIChhY3Rpb24gJiAoMSA8PCBjaC0+dW5pdCkpIHsK
 CWlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9J
 UyArIG9mZnNldCk7Cglpc3N1ZWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwg
 QVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7Cglzc3RhdHVzID0gQVRBX0lOTChj
 dGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU1NUUyArIG9mZnNldCk7CgllcnJv
 ciA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1NFUlIgKyBv
 ZmZzZXQpOwoKCS8qIGNsZWFyIGludGVycnVwdChzKSAqLwoJQVRBX09VVEwo
 Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgYWN0aW9uKTsKCUFUQV9PVVRM
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwgaXN0YXR1
 cyk7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfU0VSUiAr
 IG9mZnNldCwgZXJyb3IpOwoKCS8qIGRvIHdlIGhhdmUgY29sZCBjb25uZWN0
 IHN1cnByaXNlICovCglpZiAoaXN0YXR1cyAmIEFUQV9BSENJX1BfSVhfQ1BE
 KSB7CgkgICAgcHJpbnRmKCJhdGFfYWhjaV9zdGF0dXMgc3RhdHVzPSUwOHgg
 c3N0YXR1cz0lMDh4IGVycm9yPSUwOHhcbiIsCgkJICAgaXN0YXR1cywgc3N0
 YXR1cywgZXJyb3IpOwoJfQoKCS8qIGNoZWNrIGZvciBhbmQgaGFuZGxlIGNv
 bm5lY3QgZXZlbnRzICovCglpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lY
 X1BDKSAmJgoJICAgICh0cCA9IChzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAq
 KQoJCSAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayks
 CgkJCSBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAo
 Ym9vdHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiQ09OTkVD
 VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19BVFRB
 Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0
 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz
 a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK
 CX0KCgkvKiBjaGVjayBmb3IgYW5kIGhhbmRsZSBkaXNjb25uZWN0IGV2ZW50
 cyAqLwoJZWxzZSBpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lYX1BSQykg
 JiYgCgkgICAgISgoc3N0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09
 IEFUQV9TU19DT05XRUxMX0dFTjEgfHwKCSAgICAgIChzc3RhdHVzICYgQVRB
 X1NTX0NPTldFTExfTUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMikgJiYK
 CSAgICAodHAgPSAoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgKikKCQkgIG1h
 bGxvYyhzaXplb2Yoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2spLAoJCSAgICAg
 ICBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCSAgICBpZiAoYm9v
 dHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVD
 VCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19ERVRB
 Q0g7CgkgICAgdHAtPmRldiA9IGNoLT5kZXY7CgkgICAgVEFTS19JTklUKCZ0
 cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7CgkgICAgdGFz
 a3F1ZXVlX2VucXVldWUodGFza3F1ZXVlX3RocmVhZCwgJnRwLT50YXNrKTsK
 CX0KCgkvKiBkbyB3ZSBoYXZlIGFueSBkZXZpY2UgYWN0aW9uID8gKi8KCWlm
 ICghKGlzc3VlZCAmICgxIDw8IHRhZykpKQoJICAgIHJldHVybiAxOwogICAg
 fQogICAgcmV0dXJuIDA7Cn0KCi8qIG11c3QgYmUgY2FsbGVkIHdpdGggQVRB
 IGNoYW5uZWwgbG9ja2VkIGFuZCBzdGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMg
 aW50CmF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVx
 dWVzdCAqcmVxdWVzdCkKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3Qt
 PmRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CiAg
 ICBzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAqY3RwOwogICAgc3RydWN0IGF0
 YV9haGNpX2NtZF9saXN0ICpjbHA7CiAgICBpbnQgdGFnID0gMCwgZW50cmll
 cyA9IDA7CiAgICBpbnQgZmlzX3NpemU7CgogICAgLyogZ2V0IGEgcGllY2Ug
 b2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAgICBjdHAg
 PSAoc3RydWN0IGF0YV9haGNpX2NtZF90YWIgKikKCSAgKGNoLT5kbWEtPndv
 cmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKyAoQVRBX0FIQ0lfQ1RfU0laRSAq
 IHRhZykpOwoKICAgIC8qIHNldHVwIHRoZSBGSVMgZm9yIHRoaXMgcmVxdWVz
 dCAqLyAvKiBYWFggU09TIEFUQVBJIG1pc3Npbmcgc3RpbGwgKi8KICAgIGlm
 ICghKGZpc19zaXplID0gYXRhX2FoY2lfc2V0dXBfZmlzKCZjdHAtPmNmaXNb
 MF0sIHJlcXVlc3QpKSkgewoJZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYs
 ICJzZXR0aW5nIHVwIFNBVEEgRklTIGZhaWxlZFxuIik7CglyZXF1ZXN0LT5y
 ZXN1bHQgPSBFSU87CglyZXR1cm4gQVRBX09QX0ZJTklTSEVEOwogICAgfQoK
 ICAgIC8qIGlmIHJlcXVlc3QgbW92ZXMgZGF0YSBzZXR1cCBhbmQgbG9hZCBT
 RyBsaXN0ICovCiAgICBpZiAocmVxdWVzdC0+ZmxhZ3MgJiAoQVRBX1JfUkVB
 RCB8IEFUQV9SX1dSSVRFKSkgewoJaWYgKGNoLT5kbWEtPmxvYWQoY2gtPmRl
 diwgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+Ynl0ZWNvdW50LAoJCQkgIHJl
 cXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCwKCQkJICBjdHAtPnByZF90YWIs
 ICZlbnRyaWVzKSkgewoJICAgIGRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2
 LCAic2V0dGluZyB1cCBETUEgZmFpbGVkXG4iKTsKCSAgICByZXF1ZXN0LT5y
 ZXN1bHQgPSBFSU87CgkgICAgcmV0dXJuIEFUQV9PUF9GSU5JU0hFRDsKCX0K
 ICAgIH0KCiAgICAvKiBzZXR1cCB0aGUgY29tbWFuZCBsaXN0IGVudHJ5ICov
 CiAgICBjbHAgPSAoc3RydWN0IGF0YV9haGNpX2NtZF9saXN0ICopCgkgIChj
 aC0+ZG1hLT53b3JrICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUICsgKEFUQV9BSENJ
 X0NMX1NJWkUgKiB0YWcpKTsKCiAgICBjbHAtPnByZF9sZW5ndGggPSBlbnRy
 aWVzOwogICAgY2xwLT5jbWRfZmxhZ3MgPSAocmVxdWVzdC0+ZmxhZ3MgJiBB
 VEFfUl9XUklURSA/ICgxPDw2KSA6IDApIHwKCQkgICAgIChyZXF1ZXN0LT5m
 bGFncyAmIEFUQV9SX0FUQVBJID8gKDE8PDUpIDogMCkgfAoJCSAgICAgKGZp
 c19zaXplIC8gc2l6ZW9mKHVfaW50MzJfdCkpOwogICAgY2xwLT5ieXRlY291
 bnQgPSAwOwogICAgY2xwLT5jbWRfdGFibGVfcGh5cyA9IGh0b2xlNjQoY2gt
 PmRtYS0+d29ya19idXMgKyBBVEFfQUhDSV9DVF9PRkZTRVQgKwoJCQkJICAo
 QVRBX0FIQ0lfQ1RfU0laRSAqIHRhZykpOwoKICAgIC8qIGNsZWFyIGV2ZW50
 dWFsIEFDVElWRSBiaXQgKi8KICAgIEFUQV9JRFhfT1VUTChjaCwgQVRBX1NB
 Q1RJVkUsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0FDVElWRSkgJiAoMSA8PCB0
 YWcpKTsKCiAgICAvKiBpc3N1ZSB0aGUgY29tbWFuZCAqLwogICAgQVRBX09V
 VEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NJICsgKGNoLT51bml0IDw8
 IDcpLCAoMSA8PCB0YWcpKTsKCiAgICAvKiBzdGFydCB0aGUgdGltZW91dCAq
 LwogICAgY2FsbG91dF9yZXNldCgmcmVxdWVzdC0+Y2FsbG91dCwgcmVxdWVz
 dC0+dGltZW91dCAqIGh6LAoJCSAgKHRpbWVvdXRfdCopYXRhX3RpbWVvdXQs
 IHJlcXVlc3QpOwogICAgcmV0dXJuIEFUQV9PUF9DT05USU5VRVM7Cn0KCi8q
 IG11c3QgYmUgY2FsbGVkIHdpdGggQVRBIGNoYW5uZWwgbG9ja2VkIGFuZCBz
 dGF0ZV9tdHggaGVsZCAqLwpzdGF0aWMgaW50CmF0YV9haGNpX2VuZF90cmFu
 c2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCnsKICAgIHN0
 cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHI9ZGV2aWNlX2dldF9zb2Z0
 YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpKTsKICAgIHN0cnVjdCBhdGFf
 Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFy
 ZW50KHJlcXVlc3QtPmRldikpOwogICAgc3RydWN0IGF0YV9haGNpX2NtZF9s
 aXN0ICpjbHA7CiAgICB1X2ludDMyX3QgdGZfZGF0YTsKICAgIGludCB0YWcg
 PSAwOwoKICAgIC8qIGtpbGwgdGhlIHRpbWVvdXQgKi8KICAgIGNhbGxvdXRf
 c3RvcCgmcmVxdWVzdC0+Y2FsbG91dCk7CgogICAgLyogZ2V0IHN0YXR1cyAq
 LwogICAgdGZfZGF0YSA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD
 SV9QX1RGRCArIChjaC0+dW5pdCA8PCA3KSk7CiAgICByZXF1ZXN0LT5zdGF0
 dXMgPSB0Zl9kYXRhOwoKICAgIC8qIGlmIGVycm9yIHN0YXR1cyBnZXQgZGV0
 YWlscyAqLwogICAgaWYgKHJlcXVlc3QtPnN0YXR1cyAmIEFUQV9TX0VSUk9S
 KSAgCglyZXF1ZXN0LT5lcnJvciA9IHRmX2RhdGEgPj4gODsKCiAgICAvKiBy
 ZWNvcmQgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBtb3ZlZCAqLwogICAg
 Y2xwID0gKHN0cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCAqKQoJICAoY2gtPmRt
 YS0+d29yayArIEFUQV9BSENJX0NMX09GRlNFVCArIChBVEFfQUhDSV9DTF9T
 SVpFICogdGFnKSk7CiAgICByZXF1ZXN0LT5kb25lY291bnQgPSBjbHAtPmJ5
 dGVjb3VudDsKCiAgICAvKiByZWxlYXNlIFNHIGxpc3QgZXRjICovCiAgICBj
 aC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CgogICAgcmV0dXJuIEFUQV9PUF9G
 SU5JU0hFRDsKfQoKc3RhdGljIHZvaWQKYXRhX2FoY2lfcmVzZXQoZGV2aWNl
 X3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK
 ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CiAgICB1X2ludDMyX3QgY21kOwogICAgaW50IHRpbWVvdXQsIG9m
 ZnNldCA9IChjaC0+dW5pdCA8PCA3KTsKCiAgICAvKiBraWxsIG9mZiBhbGwg
 YWN0aXZpdHkgb24gdGhpcyBjaGFubmVsICovCiAgICBjbWQgPSBBVEFfSU5M
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwogICAg
 QVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNl
 dCwKCSAgICAgY21kICYgfihBVEFfQUhDSV9QX0NNRF9GUkUgfCBBVEFfQUhD
 SV9QX0NNRF9TVCkpOwoKICAgIC8qIFhYWCBTT1MgdGhpcyBpcyBub3QgZW50
 aXJlbHkgd3JvbmcgKi8KICAgIHRpbWVvdXQgPSAwOwogICAgZG8gewoJREVM
 QVkoMTAwMCk7CglpZiAodGltZW91dCsrID4gNTAwKQoJICAgIGRldmljZV9w
 cmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdpbmUgZmFpbGVkXG4iKTsK
 CSAgICBicmVhazsKCX0KICAgIHdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVz
 MiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpICYgQVRBX0FIQ0lfUF9DTURf
 Q1IpOwoKICAgIC8qIGlzc3VlIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBz
 dXBwb3J0ZWQgKi8gCiAgICBpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFU
 QV9BSENJX0NBUCkgJiBBVEFfQUhDSV9DQVBfQ0xPKSB7CgljbWQgPSBBVEFf
 SU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpOwoJ
 Y21kIHw9IEFUQV9BSENJX1BfQ01EX0NMTzsKCUFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQsIGNtZCk7Cgl0aW1lb3V0
 ID0gMDsKCWRvIHsKCSAgICBERUxBWSgxMDAwKTsKCSAgICBpZiAodGltZW91
 dCsrID4gNTAwKQoJCWRldmljZV9wcmludGYoZGV2LCAiZXhlY3V0aW5nIENM
 TyBmYWlsZWRcbiIpOwoJCWJyZWFrOwoJICAgIH0KCXdoaWxlIChBVEFfSU5M
 KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQrb2Zmc2V0KSZBVEFfQUhD
 SV9QX0NNRF9DTE8pOwogICAgfQoKICAgIC8qIHNwaW4gdXAgZGV2aWNlICov
 CiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsg
 b2Zmc2V0LCBBVEFfQUhDSV9QX0NNRF9TVUQpOwoKICAgIGF0YV9zYXRhX3Bo
 eV9lbmFibGUoY2gpOwoKICAgIC8qIGNsZWFyIGFueSBpbnRlcnJ1cHRzIHBl
 bmRpbmcgb24gdGhpcyBjaGFubmVsICovCiAgICBBVEFfT1VUTChjdGxyLT5y
 X3JlczIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQsCgkgICAgIEFUQV9JTkwo
 Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CgogICAg
 Lyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQs
 CgkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhDSV9QX0NN
 RF9GUkUgfAoJICAgICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf
 UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKfQoKc3RhdGljIHZv
 aWQKYXRhX2FoY2lfZG1hc2V0cHJkKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdt
 ZW50X3QgKnNlZ3MsIGludCBuc2VncywgaW50IGVycm9yKQp7ICAgIAogICAg
 c3RydWN0IGF0YV9kbWFzZXRwcmRfYXJncyAqYXJncyA9IHhzYzsKICAgIHN0
 cnVjdCBhdGFfYWhjaV9kbWFfcHJkICpwcmQgPSBhcmdzLT5kbWF0YWI7CiAg
 ICBpbnQgaTsKCiAgICBpZiAoIShhcmdzLT5lcnJvciA9IGVycm9yKSkgewoJ
 Zm9yIChpID0gMDsgaSA8IG5zZWdzOyBpKyspIHsKCSAgICBwcmRbaV0uZGJh
 ID0gaHRvbGU2NChzZWdzW2ldLmRzX2FkZHIpOwoJICAgIHByZFtpXS5kYmMg
 PSBodG9sZTMyKChzZWdzW2ldLmRzX2xlbiAtIDEpICYgQVRBX0FIQ0lfUFJE
 X01BU0spOwoJfQogICAgfQogICAgYXJncy0+bnNlZ3MgPSBuc2VnczsKfQoK
 c3RhdGljIHZvaWQKYXRhX2FoY2lfZG1haW5pdChkZXZpY2VfdCBkZXYpCnsK
 ICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CgogICAgYXRhX2RtYWluaXQoZGV2KTsKICAgIGlmIChjaC0+ZG1h
 KSB7CgkvKiBub3RlIHN0YXJ0IGFuZCBzdG9wIGFyZSBub3QgdXNlZCBoZXJl
 ICovCgljaC0+ZG1hLT5zZXRwcmQgPSBhdGFfYWhjaV9kbWFzZXRwcmQ7Cglj
 aC0+ZG1hLT5tYXhfaW9zaXplID0gODE5MiAqIERFVl9CU0laRTsKICAgIH0K
 fQoKc3RhdGljIGludAphdGFfYWhjaV9zZXR1cF9maXModV9pbnQ4X3QgKmZp
 cywgc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQp7CiAgICBzdHJ1Y3Qg
 YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0
 LT5kZXYpOwogICAgaW50IGlkeCA9IDA7CgogICAgLyogWFhYIFNPUyBhZGQg
 QVRBUEkgY29tbWFuZHMgc3VwcG9ydCBsYXRlciAqLwogICAgYXRhX21vZGlm
 eV9pZl80OGJpdChyZXF1ZXN0KTsKCiAgICBmaXNbaWR4KytdID0gMHgyNzsg
 IC8qIGhvc3QgdG8gZGV2aWNlICovCiAgICBmaXNbaWR4KytdID0gMHg4MDsg
 IC8qIGNvbW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KICAgIGZp
 c1tpZHgrK10gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5kOwogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmU7CgogICAgZmlzW2lkeCsr
 XSA9IHJlcXVlc3QtPnUuYXRhLmxiYTsKICAgIGZpc1tpZHgrK10gPSByZXF1
 ZXN0LT51LmF0YS5sYmEgPj4gODsKICAgIGZpc1tpZHgrK10gPSByZXF1ZXN0
 LT51LmF0YS5sYmEgPj4gMTY7CiAgICBmaXNbaWR4XSA9IEFUQV9EX0xCQSB8
 IGF0YWRldi0+dW5pdDsKICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0Rf
 NDhCSVRfQUNUSVZFKQoJaWR4Kys7CiAgICBlbHNlCglmaXNbaWR4KytdIHw9
 IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMjQgJiAweDBmKTsKCiAgICBmaXNb
 aWR4KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDI0OwogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAzMjsgCiAgICBmaXNbaWR4
 KytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDQwOyAKICAgIGZpc1tpZHgr
 K10gPSByZXF1ZXN0LT51LmF0YS5mZWF0dXJlID4+IDg7CgogICAgZmlzW2lk
 eCsrXSA9IHJlcXVlc3QtPnUuYXRhLmNvdW50OwogICAgZmlzW2lkeCsrXSA9
 IHJlcXVlc3QtPnUuYXRhLmNvdW50ID4+IDg7CiAgICBmaXNbaWR4KytdID0g
 MHgwMDsKICAgIGZpc1tpZHgrK10gPSBBVEFfQV80QklUOwoKICAgIGZpc1tp
 ZHgrK10gPSAweDAwOwogICAgZmlzW2lkeCsrXSA9IDB4MDA7CiAgICBmaXNb
 aWR4KytdID0gMHgwMDsKICAgIGZpc1tpZHgrK10gPSAweDAwOwogICAgcmV0
 dXJuIGlkeDsKfQoKCi8qCiAqIEFjYXJkIGNoaXBzZXQgc3VwcG9ydCBmdW5j
 dGlvbnMKICovCmludAphdGFfYWNhcmRfaWRlbnQoZGV2aWNlX3QgZGV2KQp7
 CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNl
 X2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lkICppZHg7
 CiAgICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0KICAgIHt7
 IEFUQV9BVFA4NTBSLCAwLCBBVFBPTEQsIDB4MDAsIEFUQV9VRE1BMiwgIkFU
 UDg1MCIgfSwKICAgICB7IEFUQV9BVFA4NjBBLCAwLCAwLCAgICAgIDB4MDAs
 IEFUQV9VRE1BNCwgIkFUUDg2MEEiIH0sCiAgICAgeyBBVEFfQVRQODYwUiwg
 MCwgMCwgICAgICAweDAwLCBBVEFfVURNQTQsICJBVFA4NjBSIiB9LAogICAg
 IHsgQVRBX0FUUDg2NUEsIDAsIDAsICAgICAgMHgwMCwgQVRBX1VETUE2LCAi
 QVRQODY1QSIgfSwKICAgICB7IEFUQV9BVFA4NjVSLCAwLCAwLCAgICAgIDB4
 MDAsIEFUQV9VRE1BNiwgIkFUUDg2NVIiIH0sCiAgICAgeyAwLCAwLCAwLCAw
 LCAwLCAwfX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlk
 eCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87
 CgogICAgc3ByaW50ZihidWZmZXIsICJBY2FyZCAlcyAlcyBjb250cm9sbGVy
 IiwKCSAgICBpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEp
 KTsKICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVmZmVyKTsKICAg
 IGN0bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9h
 Y2FyZF9jaGlwaW5pdDsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0
 YV9hY2FyZF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVy
 biBFTlhJTzsKCiAgICBjdGxyLT5hbGxvY2F0ZSA9IGF0YV9hY2FyZF9hbGxv
 Y2F0ZTsKICAgIGlmIChjdGxyLT5jaGlwLT5jZmcxID09IEFUUE9MRCkgewoJ
 Y3Rsci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84NTBfc2V0bW9kZTsKCWN0bHIt
 PmxvY2tpbmcgPSBhdGFfc2VyaWFsaXplOwogICAgfQogICAgZWxzZQoJY3Rs
 ci0+c2V0bW9kZSA9IGF0YV9hY2FyZF84Nlhfc2V0bW9kZTsKICAgIHJldHVy
 biAwOwp9CgpzdGF0aWMgaW50CmF0YV9hY2FyZF9hbGxvY2F0ZShkZXZpY2Vf
 dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldik7CgogICAgLyogc2V0dXAgdGhlIHVzdWFsIHJlZ2lz
 dGVyIG5vcm1hbCBwY2kgc3R5bGUgKi8KICAgIGlmIChhdGFfcGNpX2FsbG9j
 YXRlKGRldikpCglyZXR1cm4gRU5YSU87CgogICAgY2gtPmh3LnN0YXR1cyA9
 IGF0YV9hY2FyZF9zdGF0dXM7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu
 dAphdGFfYWNhcmRfc3RhdHVzKGRldmljZV90IGRldikKewogICAgc3RydWN0
 IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5u
 ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGlmIChjdGxy
 LT5jaGlwLT5jZmcxID09IEFUUE9MRCAmJgoJQVRBX0xPQ0tJTkcoY2gtPmRl
 diwgQVRBX0xGX1dISUNIKSAhPSBjaC0+dW5pdCkKCSAgICByZXR1cm4gMDsK
 ICAgIGlmIChjaC0+ZG1hICYmIChjaC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFf
 QUNUSVZFKSkgewoJaW50IGJtc3RhdCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFf
 Qk1TVEFUX1BPUlQpICYgQVRBX0JNU1RBVF9NQVNLOwoKCWlmICgoYm1zdGF0
 ICYgKEFUQV9CTVNUQVRfQUNUSVZFIHwgQVRBX0JNU1RBVF9JTlRFUlJVUFQp
 KSAhPQoJICAgIEFUQV9CTVNUQVRfSU5URVJSVVBUKQoJICAgIHJldHVybiAw
 OwoJQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIGJtc3RhdCAm
 IH5BVEFfQk1TVEFUX0VSUk9SKTsKCURFTEFZKDEpOwoJQVRBX0lEWF9PVVRC
 KGNoLCBBVEFfQk1DTURfUE9SVCwKCQkgICAgIEFUQV9JRFhfSU5CKGNoLCBB
 VEFfQk1DTURfUE9SVCkgJiB+QVRBX0JNQ01EX1NUQVJUX1NUT1ApOwoJREVM
 QVkoMSk7CiAgICB9CiAgICBpZiAoQVRBX0lEWF9JTkIoY2gsIEFUQV9BTFRT
 VEFUKSAmIEFUQV9TX0JVU1kpIHsKCURFTEFZKDEwMCk7CglpZiAoQVRBX0lE
 WF9JTkIoY2gsIEFUQV9BTFRTVEFUKSAmIEFUQV9TX0JVU1kpCgkgICAgcmV0
 dXJuIDA7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3RhdGljIHZvaWQKYXRh
 X2FjYXJkXzg1MF9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCnsK
 ICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAg
 c3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf
 c29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0g
 ZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAg
 IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFf
 REVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9kZSA9
 IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwKCQkJICBhdGFfYXRhcGkoZGV2
 KSA/IEFUQV9QSU9fTUFYIDogY3Rsci0+Y2hpcC0+bWF4X2RtYSk7CgogICAg
 LyogWFhYIFNPUyBtaXNzaW5nIFdETUEwKzEgKyBQSU8gbW9kZXMgKi8KICAg
 IGlmIChtb2RlID49IEFUQV9XRE1BMikgewoJZXJyb3IgPSBhdGFfY29udHJv
 bGNtZChkZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAs
 IG1vZGUpOwoJaWYgKGJvb3R2ZXJib3NlKQoJICAgIGRldmljZV9wcmludGYo
 ZGV2LCAiJXNzZXR0aW5nICVzIG9uICVzIGNoaXBcbiIsCgkJCSAgKGVycm9y
 KSA/ICJGQUlMVVJFICIgOiAiIiwKCQkJICBhdGFfbW9kZTJzdHIobW9kZSks
 IGN0bHItPmNoaXAtPnRleHQpOwoJaWYgKCFlcnJvcikgewoJICAgIHVfaW50
 OF90IHJlZzU0ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NTQsIDEp
 OwoJICAgIAoJICAgIHJlZzU0ICY9IH4oMHgwMyA8PCAoZGV2bm8gPDwgMSkp
 OwoJICAgIGlmIChtb2RlID49IEFUQV9VRE1BMCkKCQlyZWc1NCB8PSAoKCht
 b2RlICYgQVRBX01PREVfTUFTSykgKyAxKSA8PCAoZGV2bm8gPDwgMSkpOwoJ
 ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1NCwgcmVnNTQsIDEp
 OwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwgMHhhNiwg
 MSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQwICsgKGRl
 dm5vIDw8IDEpLCAweDAzMDEsIDIpOwoJICAgIGF0YWRldi0+bW9kZSA9IG1v
 ZGU7CgkgICAgcmV0dXJuOwoJfQogICAgfQogICAgLyogd2UgY291bGQgc2V0
 IFBJTyBtb2RlIHRpbWluZ3MsIGJ1dCB3ZSBhc3N1bWUgdGhlIEJJT1MgZGlk
 IHRoYXQgKi8KfQoKc3RhdGljIHZvaWQKYXRhX2FjYXJkXzg2WF9zZXRtb2Rl
 KGRldmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJl
 bnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVudCk7CiAg
 ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfZGV2aWNl
 ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgZGV2
 bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVWKGF0YWRldi0+dW5pdCk7
 CiAgICBpbnQgZXJyb3I7CgoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShk
 ZXYsIG1vZGUsCgkJCSAgYXRhX2F0YXBpKGRldikgPyBBVEFfUElPX01BWCA6
 IGN0bHItPmNoaXAtPm1heF9kbWEpOwoKICAgIG1vZGUgPSBhdGFfY2hlY2tf
 ODBwaW4oZGV2LCBtb2RlKTsKCiAgICAvKiBYWFggU09TIG1pc3NpbmcgV0RN
 QTArMSArIFBJTyBtb2RlcyAqLwogICAgaWYgKG1vZGUgPj0gQVRBX1dETUEy
 KSB7CgllcnJvciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRV
 UkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwgbW9kZSk7CglpZiAoYm9vdHZlcmJv
 c2UpCgkgICAgZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24g
 JXMgY2hpcFxuIiwKCQkJICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAoJ
 CQkgIGF0YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7Cglp
 ZiAoIWVycm9yKSB7CgkgICAgdV9pbnQxNl90IHJlZzQ0ID0gcGNpX3JlYWRf
 Y29uZmlnKGdwYXJlbnQsIDB4NDQsIDIpOwoJICAgIAoJICAgIHJlZzQ0ICY9
 IH4oMHgwMDBmIDw8IChkZXZubyA8PCAyKSk7CgkgICAgaWYgKG1vZGUgPj0g
 QVRBX1VETUEwKQoJCXJlZzQ0IHw9ICgoKG1vZGUgJiBBVEFfTU9ERV9NQVNL
 KSArIDEpIDw8IChkZXZubyA8PCAyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZp
 ZyhncGFyZW50LCAweDQ0LCByZWc0NCwgMik7CgkgICAgcGNpX3dyaXRlX2Nv
 bmZpZyhncGFyZW50LCAweDRhLCAweGE2LCAxKTsKCSAgICBwY2lfd3JpdGVf
 Y29uZmlnKGdwYXJlbnQsIDB4NDAgKyBkZXZubywgMHgzMSwgMSk7CgkgICAg
 YXRhZGV2LT5tb2RlID0gbW9kZTsKCSAgICByZXR1cm47Cgl9CiAgICB9CiAg
 ICAvKiB3ZSBjb3VsZCBzZXQgUElPIG1vZGUgdGltaW5ncywgYnV0IHdlIGFz
 c3VtZSB0aGUgQklPUyBkaWQgdGhhdCAqLwp9CgoKLyoKICogQWNlciBMYWJz
 IEluYyAoQUxJKSBjaGlwc2V0IHN1cHBvcnQgZnVuY3Rpb25zCiAqLwppbnQK
 YXRhX2FsaV9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf
 cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
 CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAgIHN0YXRpYyBzdHJ1
 Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRBX0FMSV81Mjg5LCAw
 eDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4OSIgfSwKICAgICB7
 IEFUQV9BTElfNTI4OCwgMHgwMCwgNCwgQUxJU0FUQSwgQVRBX1NBMzAwLCAi
 TTUyODgiIH0sCiAgICAgeyBBVEFfQUxJXzUyODcsIDB4MDAsIDQsIEFMSVNB
 VEEsIEFUQV9TQTE1MCwgIk01Mjg3IiB9LAogICAgIHsgQVRBX0FMSV81Mjgx
 LCAweDAwLCAyLCBBTElTQVRBLCBBVEFfU0ExNTAsICJNNTI4MSIgfSwKICAg
 ICB7IEFUQV9BTElfNTIyOSwgMHhjNSwgMCwgQUxJTkVXLCAgQVRBX1VETUE2
 LCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4YzQsIDAsIEFM
 SU5FVywgIEFUQV9VRE1BNSwgIk01MjI5IiB9LAogICAgIHsgQVRBX0FMSV81
 MjI5LCAweGMyLCAwLCBBTElORVcsICBBVEFfVURNQTQsICJNNTIyOSIgfSwK
 ICAgICB7IEFUQV9BTElfNTIyOSwgMHgyMCwgMCwgQUxJT0xELCAgQVRBX1VE
 TUEyLCAiTTUyMjkiIH0sCiAgICAgeyBBVEFfQUxJXzUyMjksIDB4MDAsIDAs
 IEFMSU9MRCwgIEFUQV9XRE1BMiwgIk01MjI5IiB9LAogICAgIHsgMCwgMCwg
 MCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRdOyAKCiAgICBpZiAo
 IShpZHggPSBhdGFfbWF0Y2hfY2hpcChkZXYsIGlkcykpKQoJcmV0dXJuIEVO
 WElPOwoKICAgIHNwcmludGYoYnVmZmVyLCAiQWNlckxhYnMgJXMgJXMgY29u
 dHJvbGxlciIsCgkgICAgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5t
 YXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZl
 cik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQg
 PSBhdGFfYWxpX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp
 bnQKYXRhX2FsaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVj
 dCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj
 KGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJl
 dHVybiBFTlhJTzsKCiAgICBzd2l0Y2ggKGN0bHItPmNoaXAtPmNmZzIpIHsK
 ICAgIGNhc2UgQUxJU0FUQToKCWN0bHItPmNoYW5uZWxzID0gY3Rsci0+Y2hp
 cC0+Y2ZnMTsKCWN0bHItPmFsbG9jYXRlID0gYXRhX2FsaV9zYXRhX2FsbG9j
 YXRlOwoJY3Rsci0+c2V0bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CgoJLyog
 aWYgd2UgaGF2ZSBhIG1lbW9yeSByZXNvdXJjZSB3ZSBjYW4gbGlrZWx5IGRv
 IEFIQ0kgKi8KCWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsKCWN0
 bHItPnJfcmlkMiA9IFBDSVJfQkFSKDUpOwoJaWYgKChjdGxyLT5yX3JlczIg
 PSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBlMiwK
 CQkJCQkJICAgJmN0bHItPnJfcmlkMiwgUkZfQUNUSVZFKSkpCgkgICAgcmV0
 dXJuIGF0YV9haGNpX2NoaXBpbml0KGRldik7CgoJLyogZW5hYmxlIFBDSSBp
 bnRlcnJ1cHQgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1B
 TkQsCgkJCSBwY2lfcmVhZF9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsIDIp
 ICYgfjB4MDQwMCwgMik7CglicmVhazsKCiAgICBjYXNlIEFMSU5FVzoKCS8q
 IHVzZSBkZXZpY2UgaW50ZXJydXB0IGFzIGJ5dGUgY291bnQgZW5kICovCglw
 Y2lfd3JpdGVfY29uZmlnKGRldiwgMHg0YSwgcGNpX3JlYWRfY29uZmlnKGRl
 diwgMHg0YSwgMSkgfCAweDIwLCAxKTsKCgkvKiBlbmFibGUgY2FibGUgZGV0
 ZWN0aW9uIGFuZCBVRE1BIHN1cHBvcnQgb24gbmV3ZXIgY2hpcHMgKi8KCXBj
 aV93cml0ZV9jb25maWcoZGV2LCAweDRiLCBwY2lfcmVhZF9jb25maWcoZGV2
 LCAweDRiLCAxKSB8IDB4MDksIDEpOwoKCS8qIGVuYWJsZSBBVEFQSSBVRE1B
 IG1vZGUgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDUzLCBwY2lfcmVh
 ZF9jb25maWcoZGV2LCAweDUzLCAxKSB8IDB4MDEsIDEpOwoKCS8qIG9ubHkg
 Y2hpcHMgd2l0aCByZXZpc2lvbiA+IDB4YzQgY2FuIGRvIDQ4Yml0IERNQSAq
 LwoJaWYgKGN0bHItPmNoaXAtPmNoaXByZXYgPD0gMHhjNCkKCSAgICBkZXZp
 Y2VfcHJpbnRmKGRldiwKCQkJICAidXNpbmcgUElPIHRyYW5zZmVycyBhYm92
 ZSAxMzdHQiBhcyB3b3JrYXJvdW5kIGZvciAiCgkJCSAgIjQ4Yml0IERNQSBh
 Y2Nlc3MgYnVnLCBleHBlY3QgcmVkdWNlZCBwZXJmb3JtYW5jZVxuIik7Cglj
 dGxyLT5hbGxvY2F0ZSA9IGF0YV9hbGlfYWxsb2NhdGU7CgljdGxyLT5yZXNl
 dCA9IGF0YV9hbGlfcmVzZXQ7CgljdGxyLT5zZXRtb2RlID0gYXRhX2FsaV9z
 ZXRtb2RlOwoJYnJlYWs7CgogICAgY2FzZSBBTElPTEQ6CgkvKiBkZWFjdGl2
 YXRlIHRoZSBBVEFQSSBGSUZPIGFuZCBlbmFibGUgQVRBUEkgVURNQSAqLwoJ
 cGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTMsIHBjaV9yZWFkX2NvbmZpZyhk
 ZXYsIDB4NTMsIDEpIHwgMHgwMywgMSk7CgljdGxyLT5zZXRtb2RlID0gYXRh
 X2FsaV9zZXRtb2RlOwoJYnJlYWs7CiAgICB9CiAgICByZXR1cm4gMDsKfQoK
 c3RhdGljIGludAphdGFfYWxpX2FsbG9jYXRlKGRldmljZV90IGRldikKewog
 ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg
 IC8qIHNldHVwIHRoZSB1c3VhbCByZWdpc3RlciBub3JtYWwgcGNpIHN0eWxl
 ICovCiAgICBpZiAoYXRhX3BjaV9hbGxvY2F0ZShkZXYpKQoJcmV0dXJuIEVO
 WElPOwoKICAgIC8qIG9sZGVyIGNoaXBzIGNhbid0IGRvIDQ4Yml0IERNQSB0
 cmFuc2ZlcnMgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jaGlwcmV2IDw9IDB4
 YzQpCgljaC0+ZmxhZ3MgfD0gQVRBX05PXzQ4QklUX0RNQTsKCiAgICByZXR1
 cm4gMDsKfQoKc3RhdGljIGludAphdGFfYWxpX3NhdGFfYWxsb2NhdGUoZGV2
 aWNlX3QgZGV2KQp7CiAgICBkZXZpY2VfdCBwYXJlbnQgPSBkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq
 Y3RsciA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKICAgIHN0cnVjdCBh
 dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBz
 dHJ1Y3QgcmVzb3VyY2UgKmlvID0gTlVMTCwgKmN0bGlvID0gTlVMTDsKICAg
 IGludCB1bml0MDEgPSAoY2gtPnVuaXQgJiAxKSwgdW5pdDEwID0gKGNoLT51
 bml0ICYgMik7CiAgICBpbnQgaSwgcmlkOwoJCQogICAgcmlkID0gUENJUl9C
 QVIoMCkgKyAodW5pdDAxID8gOCA6IDApOwogICAgaW8gPSBidXNfYWxsb2Nf
 cmVzb3VyY2VfYW55KHBhcmVudCwgU1lTX1JFU19JT1BPUlQsICZyaWQsIFJG
 X0FDVElWRSk7CiAgICBpZiAoIWlvKQoJcmV0dXJuIEVOWElPOwoKICAgIHJp
 ZCA9IFBDSVJfQkFSKDEpICsgKHVuaXQwMSA/IDggOiAwKTsKICAgIGN0bGlv
 ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShwYXJlbnQsIFNZU19SRVNfSU9Q
 T1JULCAmcmlkLCBSRl9BQ1RJVkUpOwogICAgaWYgKCFjdGxpbykgewoJYnVz
 X3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lPUE9SVCwgQVRBX0lP
 QUREUl9SSUQsIGlvKTsKCXJldHVybiBFTlhJTzsKICAgIH0KCQkKICAgIGZv
 ciAoaSA9IEFUQV9EQVRBOyBpIDw9IEFUQV9DT01NQU5EOyBpICsrKSB7Cglj
 aC0+cl9pb1tpXS5yZXMgPSBpbzsKCWNoLT5yX2lvW2ldLm9mZnNldCA9IGkg
 KyAodW5pdDEwID8gOCA6IDApOwogICAgfQogICAgY2gtPnJfaW9bQVRBX0NP
 TlRST0xdLnJlcyA9IGN0bGlvOwogICAgY2gtPnJfaW9bQVRBX0NPTlRST0xd
 Lm9mZnNldCA9IDIgKyAodW5pdDEwID8gNCA6IDApOwogICAgY2gtPnJfaW9b
 QVRBX0lEWF9BRERSXS5yZXMgPSBpbzsKICAgIGF0YV9kZWZhdWx0X3JlZ2lz
 dGVycyhkZXYpOwogICAgaWYgKGN0bHItPnJfcmVzMSkgewoJZm9yIChpID0g
 QVRBX0JNQ01EX1BPUlQ7IGkgPD0gQVRBX0JNRFRQX1BPUlQ7IGkrKykgewoJ
 ICAgIGNoLT5yX2lvW2ldLnJlcyA9IGN0bHItPnJfcmVzMTsKCSAgICBjaC0+
 cl9pb1tpXS5vZmZzZXQgPSAoaSAtIEFUQV9CTUNNRF9QT1JUKSsoY2gtPnVu
 aXQgKiBBVEFfQk1JT1NJWkUpOwoJfQogICAgfQogICAgY2gtPmZsYWdzIHw9
 IEFUQV9OT19TTEFWRTsKCiAgICAvKiBYWFggU09TIFBIWSBoYW5kbGluZyBh
 d2t3YXJkIGluIEFMSSBjaGlwIG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAgICBh
 dGFfcGNpX2h3KGRldik7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQK
 YXRhX2FsaV9yZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFf
 cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmlj
 ZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpj
 aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGRldmljZV90ICpjaGls
 ZHJlbjsKICAgIGludCBuY2hpbGRyZW4sIGk7CgogICAgYXRhX2dlbmVyaWNf
 cmVzZXQoZGV2KTsKCiAgICAvKgogICAgICogd29ya2Fyb3VuZCBmb3IgZGF0
 YWNvcnJ1cHRpb24gYnVnIGZvdW5kIG9uIGF0IGxlYXN0IFNVTiBCbGFkZS0x
 MDAKICAgICAqIGZpbmQgdGhlIElTQSBmdW5jdGlvbiBvbiB0aGUgc291dGhi
 cmlkZ2UgYW5kIGRpc2FibGUgdGhlbiBlbmFibGUKICAgICAqIHRoZSBBVEEg
 Y2hhbm5lbCB0cmlzdGF0ZSBidWZmZXIKICAgICAqLwogICAgaWYgKGN0bHIt
 PmNoaXAtPmNoaXByZXYgPT0gMHhjMyB8fCBjdGxyLT5jaGlwLT5jaGlwcmV2
 ID09IDB4YzIpIHsKCWlmICghZGV2aWNlX2dldF9jaGlsZHJlbihHUkFORFBB
 UkVOVChkZXYpLCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CgkgICAgZm9y
 IChpID0gMDsgaSA8IG5jaGlsZHJlbjsgaSsrKSB7CgkJaWYgKHBjaV9nZXRf
 ZGV2aWQoY2hpbGRyZW5baV0pID09IEFUQV9BTElfMTUzMykgewoJCSAgICBw
 Y2lfd3JpdGVfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAg
 cGNpX3JlYWRfY29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSAmCgkJCQkg
 ICAgIH4oMHgwNCA8PCBjaC0+dW5pdCksIDEpOwoJCSAgICBwY2lfd3JpdGVf
 Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAKCQkJCSAgICAgcGNpX3JlYWRf
 Y29uZmlnKGNoaWxkcmVuW2ldLCAweDU4LCAxKSB8CgkJCQkgICAgICgweDA0
 IDw8IGNoLT51bml0KSwgMSk7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9Cgkg
 ICAgZnJlZShjaGlsZHJlbiwgTV9URU1QKTsKCX0KICAgIH0KfQoKc3RhdGlj
 IHZvaWQKYXRhX2FsaV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUp
 CnsKICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwog
 ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
 ZXRfc29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsK
 ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKGRldik7CiAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBB
 VEFfREVWKGF0YWRldi0+dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9k
 ZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4
 X2RtYSk7CgogICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBBTElORVcpIHsK
 CWlmIChtb2RlID4gQVRBX1VETUEyICYmCgkgICAgcGNpX3JlYWRfY29uZmln
 KGdwYXJlbnQsIDB4NGEsIDEpICYgKDEgPDwgY2gtPnVuaXQpKSB7CgkgICAg
 YXRhX3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsKCSAgICBtb2Rl
 ID0gQVRBX1VETUEyOwoJfQogICAgfQogICAgZWxzZQoJbW9kZSA9IGF0YV9j
 aGVja184MHBpbihkZXYsIG1vZGUpOwoKICAgIGlmIChjdGxyLT5jaGlwLT5j
 ZmcyICYgQUxJT0xEKSB7CgkvKiBkb2Vzbid0IHN1cHBvcnQgQVRBUEkgRE1B
 IG9uIHdyaXRlICovCgljaC0+ZmxhZ3MgfD0gQVRBX0FUQVBJX0RNQV9STzsK
 CWlmIChjaC0+ZGV2aWNlcyAmIEFUQV9BVEFQSV9NQVNURVIgJiYgY2gtPmRl
 dmljZXMgJiBBVEFfQVRBUElfU0xBVkUpIHsKCSAgICAvKiBkb2Vzbid0IHN1
 cHBvcnQgQVRBUEkgRE1BIG9uIHR3byBBVEFQSSBkZXZpY2VzICovCgkgICAg
 ZGV2aWNlX3ByaW50ZihkZXYsICJ0d28gYXRhcGkgZGV2aWNlcyBvbiB0aGlz
 IGNoYW5uZWwsIG5vIERNQVxuIik7CgkgICAgbW9kZSA9IGF0YV9saW1pdF9t
 b2RlKGRldiwgbW9kZSwgQVRBX1BJT19NQVgpOwoJfQogICAgfQoKICAgIGVy
 cm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFU
 QV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKCiAgICBpZiAoYm9vdHZlcmJvc2Up
 CglkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlw
 XG4iLAoJCSAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsIAoJCSAgIGF0
 YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7CiAgICBpZiAo
 IWVycm9yKSB7CglpZiAobW9kZSA+PSBBVEFfVURNQTApIHsKCSAgICB1X2lu
 dDhfdCB1ZG1hW10gPSB7MHgwYywgMHgwYiwgMHgwYSwgMHgwOSwgMHgwOCwg
 MHgwZiwgMHgwZH07CgkgICAgdV9pbnQzMl90IHdvcmQ1NCA9IHBjaV9yZWFk
 X2NvbmZpZyhncGFyZW50LCAweDU0LCA0KTsKCgkgICAgd29yZDU0ICY9IH4o
 MHgwMDBmMDAwZiA8PCAoZGV2bm8gPDwgMikpOwoJICAgIHdvcmQ1NCB8PSAo
 KCh1ZG1hW21vZGUmQVRBX01PREVfTUFTS108PDE2KXwweDA1KTw8KGRldm5v
 PDwyKSk7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDU0LCB3
 b3JkNTQsIDQpOwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1
 OCArIChjaC0+dW5pdCA8PCAyKSwKCQkJICAgICAweDAwMzEwMDAxLCA0KTsK
 CX0KCWVsc2UgewoJICAgIHVfaW50MzJfdCBwaW90aW1pbmdzW10gPQoJCXsg
 MHgwMDZkMDAwMywgMHgwMDU4MDAwMiwgMHgwMDQ0MDAwMSwgMHgwMDMzMDAw
 MSwKCQkgIDB4MDAzMTAwMDEsIDB4MDA0NDAwMDEsIDB4MDAzMzAwMDEsIDB4
 MDAzMTAwMDF9OwoKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4
 NTQsIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDU0LCA0KSAmCgkJCQkJ
 ICAgIH4oMHgwMDA4MDAwZiA8PCAoZGV2bm8gPDwgMikpLCA0KTsKCSAgICBw
 Y2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTggKyAoY2gtPnVuaXQgPDwg
 MiksCgkJCSAgICAgcGlvdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldLCA0
 KTsKCX0KCWF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBB
 bWVyaWNhbiBNaWNybyBEZXZpY2VzIChBTUQpIGNoaXBzZXQgc3VwcG9ydCBm
 dW5jdGlvbnMKICovCmludAphdGFfYW1kX2lkZW50KGRldmljZV90IGRldikK
 ewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFfY2hpcF9pZCAqaWR4
 OwogICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9CiAgICB7
 eyBBVEFfQU1ENzU2LCAgMHgwMCwgQU1ETlZJRElBLCAweDAwLCAgICAgICAg
 ICAgIEFUQV9VRE1BNCwgIjc1NiIgfSwKICAgICB7IEFUQV9BTUQ3NjYsICAw
 eDAwLCBBTUROVklESUEsIEFNRENBQkxFfEFNREJVRywgQVRBX1VETUE1LCAi
 NzY2IiB9LAogICAgIHsgQVRBX0FNRDc2OCwgIDB4MDAsIEFNRE5WSURJQSwg
 QU1EQ0FCTEUsICAgICAgICBBVEFfVURNQTUsICI3NjgiIH0sCiAgICAgeyBB
 VEFfQU1EODExMSwgMHgwMCwgQU1ETlZJRElBLCBBTURDQUJMRSwgICAgICAg
 IEFUQV9VRE1BNiwgIjgxMTEiIH0sCiAgICAgeyAwLCAwLCAwLCAwLCAwLCAw
 fX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAgIGlmICghKGlkeCA9IGF0
 YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87CgogICAg
 c3ByaW50ZihidWZmZXIsICJBTUQgJXMgJXMgY29udHJvbGxlciIsCgkgICAg
 aWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5tYXhfZG1hKSk7CiAgICBk
 ZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZlcik7CiAgICBjdGxyLT5j
 aGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfYW1kX2NoaXBp
 bml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2FtZF9jaGlw
 aW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy
 b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYg
 KGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAg
 ICAvKiBkaXNhYmxlL3NldCBwcmVmZXRjaCwgcG9zdHdyaXRlICovCiAgICBp
 ZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIEFNREJVRykKCXBjaV93cml0ZV9jb25m
 aWcoZGV2LCAweDQxLCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDQxLCAxKSAm
 IDB4MGYsIDEpOwogICAgZWxzZQoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4
 NDEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEsIDEpIHwgMHhmMCwgMSk7
 CgogICAgY3Rsci0+c2V0bW9kZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7
 CiAgICByZXR1cm4gMDsKfQoKCi8qCiAqIEFUSSBjaGlwc2V0IHN1cHBvcnQg
 ZnVuY3Rpb25zCiAqLwppbnQKYXRhX2F0aV9pZGVudChkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlk
 eDsKICAgIHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAg
 e3sgQVRBX0FUSV9JWFAyMDAsICAgIDB4MDAsIDAsICAgICAgICAwLCBBVEFf
 VURNQTUsICJJWFAyMDAiIH0sCiAgICAgeyBBVEFfQVRJX0lYUDMwMCwgICAg
 MHgwMCwgMCwgICAgICAgIDAsIEFUQV9VRE1BNiwgIklYUDMwMCIgfSwKICAg
 ICB7IEFUQV9BVElfSVhQNDAwLCAgICAweDAwLCAwLCAgICAgICAgMCwgQVRB
 X1VETUE2LCAiSVhQNDAwIiB9LAogICAgIHsgQVRBX0FUSV9JWFAzMDBfUzEs
 IDB4MDAsIFNJSU1FTUlPLCAwLCBBVEFfU0ExNTAsICJJWFAzMDAiIH0sCiAg
 ICAgeyBBVEFfQVRJX0lYUDQwMF9TMSwgMHgwMCwgU0lJTUVNSU8sIDAsIEFU
 QV9TQTE1MCwgIklYUDQwMCIgfSwKICAgICB7IEFUQV9BVElfSVhQNDAwX1My
 LCAweDAwLCBTSUlNRU1JTywgMCwgQVRBX1NBMTUwLCAiSVhQNDAwIiB9LAog
 ICAgIHsgMCwgMCwgMCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRd
 OwoKICAgIGlmICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkp
 CglyZXR1cm4gRU5YSU87CgogICAgc3ByaW50ZihidWZmZXIsICJBVEkgJXMg
 JXMgY29udHJvbGxlciIsCgkgICAgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIo
 aWR4LT5tYXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYs
 IGJ1ZmZlcik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwoKICAgIC8qIHRoZSBB
 VEkgU0FUQSBjb250cm9sbGVyIGlzIGFjdHVhbGx5IGEgU2lJIDMxMTIgY29u
 dHJvbGxlciovCiAgICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMSAmIFNJSU1FTUlP
 KQoJY3Rsci0+Y2hpcGluaXQgPSBhdGFfc2lpX2NoaXBpbml0OwogICAgZWxz
 ZQoJY3Rsci0+Y2hpcGluaXQgPSBhdGFfYXRpX2NoaXBpbml0OwogICAgcmV0
 dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2F0aV9jaGlwaW5pdChkZXZpY2Vf
 dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIg
 PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9p
 bnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAgICBjdGxyLT5zZXRt
 b2RlID0gYXRhX2F0aV9zZXRtb2RlOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRp
 YyB2b2lkCmF0YV9hdGlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2Rl
 KQp7CiAgICBkZXZpY2VfdCBncGFyZW50ID0gR1JBTkRQQVJFTlQoZGV2KTsK
 ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGdwYXJlbnQpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpj
 aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7
 CiAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXYpOwogICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsg
 QVRBX0RFVihhdGFkZXYtPnVuaXQpOwogICAgaW50IG9mZnNldCA9IChkZXZu
 byBeIDB4MDEpIDw8IDM7CiAgICBpbnQgZXJyb3I7CiAgICB1X2ludDhfdCBw
 aW90aW1pbmdzW10gPSB7IDB4NWQsIDB4NDcsIDB4MzQsIDB4MjIsIDB4MjAs
 IDB4MzQsIDB4MjIsIDB4MjAsCgkJCSAgICAgIDB4MjAsIDB4MjAsIDB4MjAs
 IDB4MjAsIDB4MjAsIDB4MjAgfTsKICAgIHVfaW50OF90IGRtYXRpbWluZ3Nb
 XSA9IHsgMHg3NywgMHgyMSwgMHgyMCB9OwoKICAgIG1vZGUgPSBhdGFfbGlt
 aXRfbW9kZShkZXYsIG1vZGUsIGN0bHItPmNoaXAtPm1heF9kbWEpOwoKICAg
 IG1vZGUgPSBhdGFfY2hlY2tfODBwaW4oZGV2LCBtb2RlKTsKCiAgICBlcnJv
 ciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFf
 U0ZfU0VUWEZFUiwgMCwgbW9kZSk7CgogICAgaWYgKGJvb3R2ZXJib3NlKQoJ
 ZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24gJXMgY2hpcFxu
 IiwKCQkgICAgICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAoJCSAgICAg
 IGF0YV9tb2RlMnN0cihtb2RlKSwgY3Rsci0+Y2hpcC0+dGV4dCk7CiAgICBp
 ZiAoIWVycm9yKSB7CglpZiAobW9kZSA+PSBBVEFfVURNQTApIHsKCSAgICBw
 Y2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTYsIAoJCQkgICAgIChwY2lf
 cmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NiwgMikgJgoJCQkgICAgICB+KDB4
 ZiA8PCAoZGV2bm8gPDwgMikpKSB8CgkJCSAgICAgKChtb2RlICYgQVRBX01P
 REVfTUFTSykgPDwgKGRldm5vIDw8IDIpKSwgMik7CgkgICAgcGNpX3dyaXRl
 X2NvbmZpZyhncGFyZW50LCAweDU0LAoJCQkgICAgIHBjaV9yZWFkX2NvbmZp
 ZyhncGFyZW50LCAweDU0LCAxKSB8CgkJCSAgICAgKDB4MDEgPDwgZGV2bm8p
 LCAxKTsKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDQsIAoJ
 CQkgICAgIChwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0NCwgNCkgJgoJ
 CQkgICAgICB+KDB4ZmYgPDwgb2Zmc2V0KSkgfAoJCQkgICAgIChkbWF0aW1p
 bmdzWzJdIDw8IG9mZnNldCksIDQpOwoJfQoJZWxzZSBpZiAobW9kZSA+PSBB
 VEFfV0RNQTApIHsKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4
 NTQsCgkJCSAgICAgcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NTQsIDEp
 ICYKCQkJICAgICAgfigweDAxIDw8IGRldm5vKSwgMSk7CgkgICAgcGNpX3dy
 aXRlX2NvbmZpZyhncGFyZW50LCAweDQ0LCAKCQkJICAgICAocGNpX3JlYWRf
 Y29uZmlnKGdwYXJlbnQsIDB4NDQsIDQpICYKCQkJICAgICAgfigweGZmIDw8
 IG9mZnNldCkpIHwKCQkJICAgICAoZG1hdGltaW5nc1ttb2RlICYgQVRBX01P
 REVfTUFTS10gPDwgb2Zmc2V0KSwgNCk7Cgl9CgllbHNlCgkgICAgcGNpX3dy
 aXRlX2NvbmZpZyhncGFyZW50LCAweDU0LAoJCQkgICAgIHBjaV9yZWFkX2Nv
 bmZpZyhncGFyZW50LCAweDU0LCAxKSAmCgkJCSAgICAgfigweDAxIDw8IGRl
 dm5vKSwgMSk7CgoJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDRhLAoJ
 CQkgKHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDRhLCAyKSAmCgkJCSAg
 figweGYgPDwgKGRldm5vIDw8IDIpKSkgfAoJCQkgKCgobW9kZSAtIEFUQV9Q
 SU8wKSAmIEFUQV9NT0RFX01BU0spIDw8IChkZXZubzw8MikpLDIpOwoJcGNp
 X3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQwLCAKCQkJIChwY2lfcmVhZF9j
 b25maWcoZ3BhcmVudCwgMHg0MCwgNCkgJgoJCQkgIH4oMHhmZiA8PCBvZmZz
 ZXQpKSB8CgkJCSAocGlvdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldIDw8
 IG9mZnNldCksIDQpOwoJYXRhZGV2LT5tb2RlID0gbW9kZTsKICAgIH0KfQoK
 LyoKICogQ3lyaXggY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KaW50
 CmF0YV9jeXJpeF9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dik7CgogICAgaWYgKHBjaV9nZXRfZGV2aWQoZGV2KSA9PSBBVEFfQ1lSSVhf
 NTUzMCkgewoJZGV2aWNlX3NldF9kZXNjKGRldiwgIkN5cml4IDU1MzAgQVRB
 MzMgY29udHJvbGxlciIpOwoJY3Rsci0+Y2hpcGluaXQgPSBhdGFfY3lyaXhf
 Y2hpcGluaXQ7CglyZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBFTlhJTzsK
 fQoKc3RhdGljIGludAphdGFfY3lyaXhfY2hpcGluaXQoZGV2aWNlX3QgZGV2
 KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2
 aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGlmIChhdGFfc2V0dXBfaW50ZXJy
 dXB0KGRldikpCglyZXR1cm4gRU5YSU87CgogICAgaWYgKGN0bHItPnJfcmVz
 MSkKCWN0bHItPnNldG1vZGUgPSBhdGFfY3lyaXhfc2V0bW9kZTsKICAgIGVs
 c2UKCWN0bHItPnNldG1vZGUgPSBhdGFfZ2VuZXJpY19zZXRtb2RlOwogICAg
 cmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkCmF0YV9jeXJpeF9zZXRtb2RlKGRl
 dmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIHN0cnVjdCBhdGFfY2hhbm5l
 bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRl
 dikpOwogICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2KTsKICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAx
 KSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKICAgIHVfaW50MzJfdCBwaW90
 aW1pbmdbXSA9IAoJeyAweDAwMDA5MTcyLCAweDAwMDEyMTcxLCAweDAwMDIw
 MDgwLCAweDAwMDMyMDEwLCAweDAwMDQwMDEwIH07CiAgICB1X2ludDMyX3Qg
 ZG1hdGltaW5nW10gPSB7IDB4MDAwNzc3NzEsIDB4MDAwMTIxMjEsIDB4MDAw
 MDIwMjAgfTsKICAgIHVfaW50MzJfdCB1ZG1hdGltaW5nW10gPSB7IDB4MDA5
 MjEyNTAsIDB4MDA5MTExNDAsIDB4MDA5MTEwMzAgfTsKICAgIGludCBlcnJv
 cjsKCiAgICBjaC0+ZG1hLT5hbGlnbm1lbnQgPSAxNjsKICAgIGNoLT5kbWEt
 Pm1heF9pb3NpemUgPSAxMjYgKiBERVZfQlNJWkU7CgogICAgbW9kZSA9IGF0
 YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgQVRBX1VETUEyKTsKCiAgICBlcnJv
 ciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFf
 U0ZfU0VUWEZFUiwgMCwgbW9kZSk7CgogICAgaWYgKGJvb3R2ZXJib3NlKQoJ
 ZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24gQ3lyaXggY2hp
 cFxuIiwKCQkgICAgICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLCBhdGFf
 bW9kZTJzdHIobW9kZSkpOwogICAgaWYgKCFlcnJvcikgewoJaWYgKG1vZGUg
 Pj0gQVRBX1VETUEwKSB7CgkgICAgQVRBX09VVEwoY2gtPnJfaW9bQVRBX0JN
 Q01EX1BPUlRdLnJlcywKCQkgICAgIDB4MjQgKyAoZGV2bm8gPDwgMyksIHVk
 bWF0aW1pbmdbbW9kZSAmIEFUQV9NT0RFX01BU0tdKTsKCX0KCWVsc2UgaWYg
 KG1vZGUgPj0gQVRBX1dETUEwKSB7CgkgICAgQVRBX09VVEwoY2gtPnJfaW9b
 QVRBX0JNQ01EX1BPUlRdLnJlcywKCQkgICAgIDB4MjQgKyAoZGV2bm8gPDwg
 MyksIGRtYXRpbWluZ1ttb2RlICYgQVRBX01PREVfTUFTS10pOwoJfQoJZWxz
 ZSB7CgkgICAgQVRBX09VVEwoY2gtPnJfaW9bQVRBX0JNQ01EX1BPUlRdLnJl
 cywKCQkgICAgIDB4MjAgKyAoZGV2bm8gPDwgMyksIHBpb3RpbWluZ1ttb2Rl
 ICYgQVRBX01PREVfTUFTS10pOwoJfQoJYXRhZGV2LT5tb2RlID0gbW9kZTsK
 ICAgIH0KfQoKCi8qCiAqIEN5cHJlc3MgY2hpcHNldCBzdXBwb3J0IGZ1bmN0
 aW9ucwogKi8KaW50CmF0YV9jeXByZXNzX2lkZW50KGRldmljZV90IGRldikK
 ewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsKCiAgICAvKgogICAgICogdGhlIEN5cHJlc3Mg
 Y2hpcCBpcyBhIG1lc3MsIGl0IGNvbnRhaW5zIHR3byBBVEEgZnVuY3Rpb25z
 LCBidXQKICAgICAqIGJvdGggY2hhbm5lbHMgYXJlIHZpc2libGUgb24gdGhl
 IGZpcnN0IG9uZS4KICAgICAqIHNpbXBseSBpZ25vcmUgdGhlIHNlY29uZCBm
 dW5jdGlvbiBmb3Igbm93LCBhcyB0aGUgcmlnaHQKICAgICAqIHNvbHV0aW9u
 IChpZ25vcmluZyB0aGUgc2Vjb25kIGNoYW5uZWwgb24gdGhlIGZpcnN0IGZ1
 bmN0aW9uKQogICAgICogZG9lc24ndCB3b3JrIHdpdGggdGhlIGNyYXBweSBB
 VEEgaW50ZXJydXB0IHNldHVwIG9uIHRoZSBhbHBoYS4KICAgICAqLwogICAg
 aWYgKHBjaV9nZXRfZGV2aWQoZGV2KSA9PSBBVEFfQ1lQUkVTU184MkM2OTMg
 JiYKCXBjaV9nZXRfZnVuY3Rpb24oZGV2KSA9PSAxICYmCglwY2lfZ2V0X3N1
 YmNsYXNzKGRldikgPT0gUENJU19TVE9SQUdFX0lERSkgewoJZGV2aWNlX3Nl
 dF9kZXNjKGRldiwgIkN5cHJlc3MgODJDNjkzIEFUQSBjb250cm9sbGVyIik7
 CgljdGxyLT5jaGlwaW5pdCA9IGF0YV9jeXByZXNzX2NoaXBpbml0OwoJcmV0
 dXJuIDA7CiAgICB9CiAgICByZXR1cm4gRU5YSU87Cn0KCnN0YXRpYyBpbnQK
 YXRhX2N5cHJlc3NfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1
 Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0
 YyhkZXYpOwoKICAgIGlmIChhdGFfc2V0dXBfaW50ZXJydXB0KGRldikpCgly
 ZXR1cm4gRU5YSU87CgogICAgY3Rsci0+c2V0bW9kZSA9IGF0YV9jeXByZXNz
 X3NldG1vZGU7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX2N5
 cHJlc3Nfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBk
 ZXZpY2VfdCBncGFyZW50ID0gR1JBTkRQQVJFTlQoZGV2KTsKICAgIHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9n
 ZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRl
 diA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGludCBlcnJvcjsKCiAg
 ICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBBVEFfV0RNQTIp
 OwoKICAgIC8qIFhYWCBTT1MgbWlzc2luZyBXRE1BMCsxICsgUElPIG1vZGVz
 ICovCiAgICBpZiAobW9kZSA9PSBBVEFfV0RNQTIpIHsgCgllcnJvciA9IGF0
 YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBBVEFfU0ZfU0VU
 WEZFUiwgMCwgbW9kZSk7CglpZiAoYm9vdHZlcmJvc2UpCgkgICAgZGV2aWNl
 X3ByaW50ZihkZXYsICIlc3NldHRpbmcgV0RNQTIgb24gQ3lwcmVzcyBjaGlw
 XG4iLAoJCQkgIGVycm9yID8gIkZBSUxVUkUgIiA6ICIiKTsKCWlmICghZXJy
 b3IpIHsKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIGNoLT51bml0
 ID8gMHg0ZSA6IDB4NGMsIDB4MjAyMCwgMik7CgkgICAgYXRhZGV2LT5tb2Rl
 ID0gbW9kZTsKCSAgICByZXR1cm47Cgl9CiAgICB9CiAgICAvKiB3ZSBjb3Vs
 ZCBzZXQgUElPIG1vZGUgdGltaW5ncywgYnV0IHdlIGFzc3VtZSB0aGUgQklP
 UyBkaWQgdGhhdCAqLwp9CgoKLyoKICogSGlnaFBvaW50IGNoaXBzZXQgc3Vw
 cG9ydCBmdW5jdGlvbnMKICovCmludAphdGFfaGlnaHBvaW50X2lkZW50KGRl
 dmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq
 Y3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFf
 Y2hpcF9pZCAqaWR4OwogICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBp
 ZHNbXSA9CiAgICB7eyBBVEFfSFBUMzc0LCAweDA3LCBIUFQzNzQsIDB4MDAs
 ICAgQVRBX1VETUE2LCAiSFBUMzc0IiB9LAogICAgIHsgQVRBX0hQVDM3Miwg
 MHgwMiwgSFBUMzcyLCAweDAwLCAgIEFUQV9VRE1BNiwgIkhQVDM3Mk4iIH0s
 CiAgICAgeyBBVEFfSFBUMzcyLCAweDAxLCBIUFQzNzIsIDB4MDAsICAgQVRB
 X1VETUE2LCAiSFBUMzcyIiB9LAogICAgIHsgQVRBX0hQVDM3MSwgMHgwMSwg
 SFBUMzcyLCAweDAwLCAgIEFUQV9VRE1BNiwgIkhQVDM3MSIgfSwKICAgICB7
 IEFUQV9IUFQzNjYsIDB4MDUsIEhQVDM3MiwgMHgwMCwgICBBVEFfVURNQTYs
 ICJIUFQzNzIiIH0sCiAgICAgeyBBVEFfSFBUMzY2LCAweDAzLCBIUFQzNzAs
 IDB4MDAsICAgQVRBX1VETUE1LCAiSFBUMzcwIiB9LAogICAgIHsgQVRBX0hQ
 VDM2NiwgMHgwMiwgSFBUMzY2LCAweDAwLCAgIEFUQV9VRE1BNCwgIkhQVDM2
 OCIgfSwKICAgICB7IEFUQV9IUFQzNjYsIDB4MDAsIEhQVDM2NiwgSFBUT0xE
 LCBBVEFfVURNQTQsICJIUFQzNjYiIH0sCiAgICAgeyBBVEFfSFBUMzAyLCAw
 eDAxLCBIUFQzNzIsIDB4MDAsICAgQVRBX1VETUE2LCAiSFBUMzAyIiB9LAog
 ICAgIHsgMCwgMCwgMCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRd
 OwoKICAgIGlmICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkp
 CglyZXR1cm4gRU5YSU87CgogICAgc3RyY3B5KGJ1ZmZlciwgIkhpZ2hQb2lu
 dCAiKTsKICAgIHN0cmNhdChidWZmZXIsIGlkeC0+dGV4dCk7CiAgICBpZiAo
 aWR4LT5jZmcxID09IEhQVDM3NCkgewoJaWYgKHBjaV9nZXRfZnVuY3Rpb24o
 ZGV2KSA9PSAwKQoJICAgIHN0cmNhdChidWZmZXIsICIgKGNoYW5uZWwgMCsx
 KSIpOwoJaWYgKHBjaV9nZXRfZnVuY3Rpb24oZGV2KSA9PSAxKQoJICAgIHN0
 cmNhdChidWZmZXIsICIgKGNoYW5uZWwgMiszKSIpOwogICAgfQogICAgc3By
 aW50ZihidWZmZXIsICIlcyAlcyBjb250cm9sbGVyIiwgYnVmZmVyLCBhdGFf
 bW9kZTJzdHIoaWR4LT5tYXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2Nf
 Y29weShkZXYsIGJ1ZmZlcik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAg
 Y3Rsci0+Y2hpcGluaXQgPSBhdGFfaGlnaHBvaW50X2NoaXBpbml0OwogICAg
 cmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2hpZ2hwb2ludF9jaGlwaW5p
 dChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xs
 ZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYgKGF0
 YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAgICBp
 ZiAoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBIUFRPTEQpIHsKCS8qIGRpc2FibGUg
 aW50ZXJydXB0IHByZWRpY3Rpb24gKi8KCXBjaV93cml0ZV9jb25maWcoZGV2
 LCAweDUxLCAocGNpX3JlYWRfY29uZmlnKGRldiwgMHg1MSwgMSkgJiB+MHg4
 MCksIDEpOwogICAgfQogICAgZWxzZSB7CgkvKiBkaXNhYmxlIGludGVycnVw
 dCBwcmVkaWN0aW9uICovCglwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1MSwg
 KHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NTEsIDEpICYgfjB4MDMpLCAxKTsK
 CXBjaV93cml0ZV9jb25maWcoZGV2LCAweDU1LCAocGNpX3JlYWRfY29uZmln
 KGRldiwgMHg1NSwgMSkgJiB+MHgwMyksIDEpOwoKCS8qIGVuYWJsZSBpbnRl
 cnJ1cHRzICovCglwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1YSwgKHBjaV9y
 ZWFkX2NvbmZpZyhkZXYsIDB4NWEsIDEpICYgfjB4MTApLCAxKTsKCgkvKiBz
 ZXQgY2xvY2tzIGV0YyAqLwoJaWYgKGN0bHItPmNoaXAtPmNmZzEgPCBIUFQz
 NzIpCgkgICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NWIsIDB4MjIsIDEp
 OwoJZWxzZQoJICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDViLAoJCQkg
 ICAgIChwY2lfcmVhZF9jb25maWcoZGV2LCAweDViLCAxKSAmIDB4MDEpIHwg
 MHgyMCwgMSk7CiAgICB9CiAgICBjdGxyLT5hbGxvY2F0ZSA9IGF0YV9oaWdo
 cG9pbnRfYWxsb2NhdGU7CiAgICBjdGxyLT5zZXRtb2RlID0gYXRhX2hpZ2hw
 b2ludF9zZXRtb2RlOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRh
 X2hpZ2hwb2ludF9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Cgog
 ICAgLyogc2V0dXAgdGhlIHVzdWFsIHJlZ2lzdGVyIG5vcm1hbCBwY2kgc3R5
 bGUgKi8KICAgIGlmIChhdGFfcGNpX2FsbG9jYXRlKGRldikpCglyZXR1cm4g
 RU5YSU87CgogICAgY2gtPmZsYWdzIHw9IEFUQV9BTFdBWVNfRE1BU1RBVDsK
 ICAgIHJldHVybiAwOwp9CgpzdGF0aWMgdm9pZAphdGFfaGlnaHBvaW50X3Nl
 dG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKewogICAgZGV2aWNlX3Qg
 Z3BhcmVudCA9IEdSQU5EUEFSRU5UKGRldik7CiAgICBzdHJ1Y3QgYXRhX3Bj
 aV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50
 KTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9k
 ZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGlu
 dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51
 bml0KTsKICAgIGludCBlcnJvcjsKICAgIHVfaW50MzJfdCB0aW1pbmdzMzNb
 XVs0XSA9IHsKICAgIC8qICAgIEhQVDM2NiAgICAgIEhQVDM3MCAgICAgIEhQ
 VDM3MiAgICAgIEhQVDM3NCAgICAgICAgICAgICAgIG1vZGUgKi8KCXsgMHg0
 MGQwYTdhYSwgMHgwNjkxNGU1NywgMHgwZDAyOWQ1ZSwgMHgwYWMxZjQ4YSB9
 LCAgICAgLyogUElPIDAgKi8KCXsgMHg0MGQwYTdhMywgMHgwNjkxNGU0Mywg
 MHgwZDAyOWQyNiwgMHgwYWMxZjQ2NSB9LCAgICAgLyogUElPIDEgKi8KCXsg
 MHg0MGQwYTc1MywgMHgwNjUxNGUzMywgMHgwYzgyOWNhNiwgMHgwYTgxZjQ1
 NCB9LCAgICAgLyogUElPIDIgKi8KCXsgMHg0MGM4YTc0MiwgMHgwNjUxNGUy
 MiwgMHgwYzgyOWM4NCwgMHgwYTgxZjQ0MyB9LCAgICAgLyogUElPIDMgKi8K
 CXsgMHg0MGM4YTczMSwgMHgwNjUxNGUyMSwgMHgwYzgyOWM2MiwgMHgwYTgx
 ZjQ0MiB9LCAgICAgLyogUElPIDQgKi8KCXsgMHgyMGM4YTc5NywgMHgyNjUx
 NGU5NywgMHgyYzgyOTIyZSwgMHgyMjgwODJlYSB9LCAgICAgLyogTVdETUEg
 MCAqLwoJeyAweDIwYzhhNzMyLCAweDI2NTE0ZTMzLCAweDJjODI5MjY2LCAw
 eDIyODA4MjU0IH0sICAgICAvKiBNV0RNQSAxICovCgl7IDB4MjBjOGE3MzEs
 IDB4MjY1MTRlMjEsIDB4MmM4MjkyNjIsIDB4MjI4MDgyNDIgfSwgICAgIC8q
 IE1XRE1BIDIgKi8KCXsgMHgxMGM4YTczMSwgMHgxNjUxNGUzMSwgMHgxYzgy
 OWM2MiwgMHgxMjE4ODJlYSB9LCAgICAgLyogVURNQSAwICovCgl7IDB4MTBj
 YmE3MzEsIDB4MTY0ZDRlMzEsIDB4MWM5YTljNjIsIDB4MTIxNDgyNTQgfSwg
 ICAgIC8qIFVETUEgMSAqLwoJeyAweDEwY2FhNzMxLCAweDE2NDk0ZTMxLCAw
 eDFjOTI5YzYyLCAweDEyMGM4MjQyIH0sICAgICAvKiBVRE1BIDIgKi8KCXsg
 MHgxMGNmYTczMSwgMHgxNjZkNGUzMSwgMHgxYzhlOWM2MiwgMHgxMjhjODI0
 MiB9LCAgICAgLyogVURNQSAzICovCgl7IDB4MTBjOWE3MzEsIDB4MTY0NTRl
 MzEsIDB4MWM4YTljNjIsIDB4MTJhYzgyNDIgfSwgICAgIC8qIFVETUEgNCAq
 LwoJeyAwLCAgICAgICAgICAweDE2NDU0ZTMxLCAweDFjOGE5YzYyLCAweDEy
 ODQ4MjQyIH0sICAgICAvKiBVRE1BIDUgKi8KCXsgMCwgICAgICAgICAgMCwg
 ICAgICAgICAgMHgxYzg2OWM2MiwgMHgxMjgwODI0MiB9ICAgICAgLyogVURN
 QSA2ICovCiAgICB9OwoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYs
 IG1vZGUsIGN0bHItPmNoaXAtPm1heF9kbWEpOwoKICAgIGlmIChjdGxyLT5j
 aGlwLT5jZmcxID09IEhQVDM2NiAmJiBhdGFfYXRhcGkoZGV2KSkKCW1vZGUg
 PSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUsIEFUQV9QSU9fTUFYKTsKCiAg
 ICBtb2RlID0gYXRhX2hpZ2hwb2ludF9jaGVja184MHBpbihkZXYsIG1vZGUp
 OwoKICAgIC8qCiAgICAgKiBtb3N0IGlmIG5vdCBhbGwgSFBUIGNoaXBzIGNh
 bnQgcmVhbGx5IGhhbmRsZSB0aGF0IHRoZSBkZXZpY2UgaXMKICAgICAqIHJ1
 bm5pbmcgYXQgQVRBX1VETUE2L0FUQTEzMyBzcGVlZCwgc28gd2UgY2hlYXQg
 YXQgc2V0IHRoZSBkZXZpY2UgdG8KICAgICAqIGEgbWF4IG9mIEFUQV9VRE1B
 NS9BVEExMDAgdG8gZ3VhcmQgYWdhaW5zdCBzdWJvcHRpbWFsIHBlcmZvcm1h
 bmNlCiAgICAgKi8KICAgIGVycm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBB
 VEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLAoJCQkgICBhdGFf
 bGltaXRfbW9kZShkZXYsIG1vZGUsIEFUQV9VRE1BNSkpOwogICAgaWYgKGJv
 b3R2ZXJib3NlKQoJZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMg
 b24gSGlnaFBvaW50IGNoaXBcbiIsCgkJICAgICAgKGVycm9yKSA/ICJGQUlM
 VVJFICIgOiAiIiwgYXRhX21vZGUyc3RyKG1vZGUpKTsKICAgIGlmICghZXJy
 b3IpCglwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDAgKyAoZGV2bm8g
 PDwgMiksCgkJCSB0aW1pbmdzMzNbYXRhX21vZGUyaWR4KG1vZGUpXVtjdGxy
 LT5jaGlwLT5jZmcxXSwgNCk7CiAgICBhdGFkZXYtPm1vZGUgPSBtb2RlOwp9
 CgpzdGF0aWMgaW50CmF0YV9oaWdocG9pbnRfY2hlY2tfODBwaW4oZGV2aWNl
 X3QgZGV2LCBpbnQgbW9kZSkKewogICAgZGV2aWNlX3QgZ3BhcmVudCA9IEdS
 QU5EUEFSRU5UKGRldik7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy
 ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAgIHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9n
 ZXRfcGFyZW50KGRldikpOwogICAgdV9pbnQ4X3QgcmVnLCB2YWwsIHJlczsK
 CiAgICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMSA9PSBIUFQzNzQgJiYgcGNpX2dl
 dF9mdW5jdGlvbihncGFyZW50KSA9PSAxKSB7CglyZWcgPSBjaC0+dW5pdCA/
 IDB4NTcgOiAweDUzOwoJdmFsID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQs
 IHJlZywgMSk7CglwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIHJlZywgdmFs
 IHwgMHg4MCwgMSk7CiAgICB9CiAgICBlbHNlIHsKCXJlZyA9IDB4NWI7Cgl2
 YWwgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgcmVnLCAxKTsKCXBjaV93
 cml0ZV9jb25maWcoZ3BhcmVudCwgcmVnLCB2YWwgJiAweGZlLCAxKTsKICAg
 IH0KICAgIHJlcyA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDVhLCAx
 KSAmIChjaC0+dW5pdCA/IDB4MToweDIpOwogICAgcGNpX3dyaXRlX2NvbmZp
 ZyhncGFyZW50LCByZWcsIHZhbCwgMSk7CgogICAgaWYgKG1vZGUgPiBBVEFf
 VURNQTIgJiYgcmVzKSB7CglhdGFfcHJpbnRfY2FibGUoZGV2LCAiY29udHJv
 bGxlciIpOwoJbW9kZSA9IEFUQV9VRE1BMjsKICAgIH0KICAgIHJldHVybiBt
 b2RlOwp9CgoKLyoKICogSW50ZWwgY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9u
 cwogKi8KaW50CmF0YV9pbnRlbF9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAg
 IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAg
 IHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRB
 X0k4MjM3MUZCLCAgICAgMCwgICAgMCwgMHgwMCwgQVRBX1dETUEyLCAiUElJ
 WCIgfSwKICAgICB7IEFUQV9JODIzNzFTQiwgICAgIDAsICAgIDAsIDB4MDAs
 IEFUQV9XRE1BMiwgIlBJSVgzIiB9LAogICAgIHsgQVRBX0k4MjM3MUFCLCAg
 ICAgMCwgICAgMCwgMHgwMCwgQVRBX1VETUEyLCAiUElJWDQiIH0sCiAgICAg
 eyBBVEFfSTgyNDQzTVgsICAgICAwLCAgICAwLCAweDAwLCBBVEFfVURNQTIs
 ICJQSUlYNCIgfSwKICAgICB7IEFUQV9JODI0NTFOWCwgICAgIDAsICAgIDAs
 IDB4MDAsIEFUQV9VRE1BMiwgIlBJSVg0IiB9LAogICAgIHsgQVRBX0k4Mjgw
 MUFCLCAgICAgMCwgICAgMCwgMHgwMCwgQVRBX1VETUEyLCAiSUNIMCIgfSwK
 ICAgICB7IEFUQV9JODI4MDFBQSwgICAgIDAsICAgIDAsIDB4MDAsIEFUQV9V
 RE1BNCwgIklDSCIgfSwKICAgICB7IEFUQV9JODIzNzJGQiwgICAgIDAsICAg
 IDAsIDB4MDAsIEFUQV9VRE1BNCwgIklDSCIgfSwKICAgICB7IEFUQV9JODI4
 MDFCQSwgICAgIDAsICAgIDAsIDB4MDAsIEFUQV9VRE1BNSwgIklDSDIiIH0s
 CiAgICAgeyBBVEFfSTgyODAxQkFfMSwgICAwLCAgICAwLCAweDAwLCBBVEFf
 VURNQTUsICJJQ0gyIiB9LAogICAgIHsgQVRBX0k4MjgwMUNBLCAgICAgMCwg
 ICAgMCwgMHgwMCwgQVRBX1VETUE1LCAiSUNIMyIgfSwKICAgICB7IEFUQV9J
 ODI4MDFDQV8xLCAgIDAsICAgIDAsIDB4MDAsIEFUQV9VRE1BNSwgIklDSDMi
 IH0sCiAgICAgeyBBVEFfSTgyODAxREIsICAgICAwLCAgICAwLCAweDAwLCBB
 VEFfVURNQTUsICJJQ0g0IiB9LAogICAgIHsgQVRBX0k4MjgwMURCXzEsICAg
 MCwgICAgMCwgMHgwMCwgQVRBX1VETUE1LCAiSUNINCIgfSwKICAgICB7IEFU
 QV9JODI4MDFFQiwgICAgIDAsICAgIDAsIDB4MDAsIEFUQV9VRE1BNSwgIklD
 SDUiIH0sCiAgICAgeyBBVEFfSTgyODAxRUJfUzEsICAwLCAgICAwLCAweDAw
 LCBBVEFfU0ExNTAsICJJQ0g1IiB9LAogICAgIHsgQVRBX0k4MjgwMUVCX1Ix
 LCAgMCwgICAgMCwgMHgwMCwgQVRBX1NBMTUwLCAiSUNINSIgfSwKICAgICB7
 IEFUQV9JNjMwMEVTQiwgICAgIDAsICAgIDAsIDB4MDAsIEFUQV9VRE1BNSwg
 IjYzMDBFU0IiIH0sCiAgICAgeyBBVEFfSTYzMDBFU0JfUzEsICAwLCAgICAw
 LCAweDAwLCBBVEFfU0ExNTAsICI2MzAwRVNCIiB9LAogICAgIHsgQVRBX0k2
 MzAwRVNCX1IxLCAgMCwgICAgMCwgMHgwMCwgQVRBX1NBMTUwLCAiNjMwMEVT
 QiIgfSwKICAgICB7IEFUQV9JODI4MDFGQiwgICAgIDAsICAgIDAsIDB4MDAs
 IEFUQV9VRE1BNSwgIklDSDYiIH0sCiAgICAgeyBBVEFfSTgyODAxRkJfUzEs
 ICAwLCBBSENJLCAweDAwLCBBVEFfU0ExNTAsICJJQ0g2IiB9LAogICAgIHsg
 QVRBX0k4MjgwMUZCX1IxLCAgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMTUwLCAi
 SUNINiIgfSwKICAgICB7IEFUQV9JODI4MDFGQk0sICAgIDAsIEFIQ0ksIDB4
 MDAsIEFUQV9TQTE1MCwgIklDSDZNIiB9LAogICAgIHsgQVRBX0k4MjgwMUdC
 LCAgICAgMCwgICAgMCwgMHgwMCwgQVRBX1VETUE1LCAiSUNINyIgfSwKICAg
 ICB7IEFUQV9JODI4MDFHQl9TMSwgIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMw
 MCwgIklDSDciIH0sCiAgICAgeyBBVEFfSTgyODAxR0JfUjEsICAwLCBBSENJ
 LCAweDAwLCBBVEFfU0EzMDAsICJJQ0g3IiB9LAogICAgIHsgQVRBX0k4Mjgw
 MUdCX0FILCAgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNINyIgfSwK
 ICAgICB7IEFUQV9JODI4MDFHQk1fUzEsIDAsIEFIQ0ksIDB4MDAsIEFUQV9T
 QTMwMCwgIklDSDdNIiB9LAogICAgIHsgQVRBX0k4MjgwMUdCTV9SMSwgMCwg
 QUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIN00iIH0sCiAgICAgeyBBVEFf
 STgyODAxR0JNX0FILCAwLCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g3
 TSIgfSwKICAgICB7IEFUQV9JNjNYWEVTQjIsICAgIDAsICAgIDAsIDB4MDAs
 IEFUQV9VRE1BNSwgIjYzWFhFU0IyIiB9LAogICAgIHsgQVRBX0k2M1hYRVNC
 Ml9TMSwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiNjNYWEVTQjIiIH0s
 CiAgICAgeyBBVEFfSTYzWFhFU0IyX1MyLCAwLCBBSENJLCAweDAwLCBBVEFf
 U0EzMDAsICI2M1hYRVNCMiIgfSwKICAgICB7IEFUQV9JNjNYWEVTQjJfUjEs
 IDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIjYzWFhFU0IyIiB9LAogICAg
 IHsgQVRBX0k2M1hYRVNCMl9SMiwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAw
 LCAiNjNYWEVTQjIiIH0sCiAgICAgeyBBVEFfSTgyODAxSEJfUzEsICAwLCBB
 SENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g4IiB9LAogICAgIHsgQVRBX0k4
 MjgwMUhCX1MyLCAgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOCIg
 fSwKICAgICB7IEFUQV9JODI4MDFIQl9SMSwgIDAsIEFIQ0ksIDB4MDAsIEFU
 QV9TQTMwMCwgIklDSDgiIH0sCiAgICAgeyBBVEFfSTgyODAxSEJfQUg0LCAw
 LCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g4IiB9LAogICAgIHsgQVRB
 X0k4MjgwMUhCX0FINiwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNI
 OCIgfSwKICAgICB7IEFUQV9JODI4MDFIQk1fUzEsIDAsIEFIQ0ksIDB4MDAs
 IEFUQV9TQTMwMCwgIklDSDhNIiB9LAogICAgIHsgQVRBX0k4MjgwMUhCTV9T
 MiwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOE0iIH0sCgp7IEFU
 QV9JODI4MDFJUk9IXzQsIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklD
 SDlSL0RPL0RIIiB9LAp7IEFUQV9JODI4MDFJQl8yQSwgMCwgQUhDSSwgMHgw
 MCwgQVRBX1NBMzAwLCAiSUNIOSIgfSwKeyBBVEFfSTgyODAxSVJPSF82LCAw
 LCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g5Ui9ETy9ESCIgfSwKeyBB
 VEFfSTgyODAxSUJfNCwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNI
 OSIgfSwKeyBBVEFfSTgyODAxSVJPLCAwLCBBSENJLCAweDAwLCBBVEFfU0Ez
 MDAsICJJQ0g5Ui9ETyIgfSwKeyBBVEFfSTgyODAxSUJfMkIsIDAsIEFIQ0ks
 IDB4MDAsIEFUQV9TQTMwMCwgIklDSDkiIH0sCnsgQVRBX0k4MjgwMUlCTV8y
 QSwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOU0iIH0sCnsgQVRB
 X0k4MjgwMUlCTV9BSCwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNI
 OU0iIH0sCnsgQVRBX0k4MjgwMUlSTV9SLCAwLCBBSENJLCAweDAwLCBBVEFf
 U0EzMDAsICJJQ0g5TVIiIH0sCnsgQVRBX0k4MjgwMUlCTV8yQiwgMCwgQUhD
 SSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOU0iIH0sCnsgQVRBX0k4MjgwMUlC
 TV8xLCAwLCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g5TSIgfSwKCi8q
 CgkgeyBBVEFfSTgyODAxSUJfUzEsIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMw
 MCwgIklDSDkiIH0sCiAJeyBBVEFfSTgyODAxSUJfUzIsIDAsIEFIQ0ksIDB4
 MDAsIEFUQV9TQTMwMCwgIklDSDkiIH0sCgl7IEFUQV9JODI4MDFJQl9TMywg
 MCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOSIgfSwKIAl7IEFUQV9J
 ODI4MDFJQl9BSDQsIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklDSDki
 IH0sCiAJeyBBVEFfSTgyODAxSUJfQUg2LCAwLCBBSENJLCAweDAwLCBBVEFf
 U0EzMDAsICJJQ0g5IiB9LAoqLwogICAgIHsgQVRBX0kzMTI0NCwgICAgICAg
 MCwgICAgMCwgMHgwMCwgQVRBX1NBMTUwLCAiMzEyNDQiIH0sCiAgICAgeyAw
 LCAwLCAwLCAwLCAwLCAwfX07CiAgICBjaGFyIGJ1ZmZlcls2NF07IAoKICAg
 IGlmICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1
 cm4gRU5YSU87CgogICAgc3ByaW50ZihidWZmZXIsICJJbnRlbCAlcyAlcyBj
 b250cm9sbGVyIiwKCSAgICBpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgt
 Pm1heF9kbWEpKTsKICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVm
 ZmVyKTsKICAgIGN0bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5p
 dCA9IGF0YV9pbnRlbF9jaGlwaW5pdDsKICAgIHJldHVybiAwOwp9CgpzdGF0
 aWMgaW50CmF0YV9pbnRlbF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAg
 IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2
 KSkKCXJldHVybiBFTlhJTzsKCiAgICAvKiBnb29kIG9sZCBQSUlYIG5lZWRz
 IHNwZWNpYWwgdHJlYXRtZW50IChub3QgaW1wbGVtZW50ZWQpICovCiAgICBp
 ZiAoY3Rsci0+Y2hpcC0+Y2hpcGlkID09IEFUQV9JODIzNzFGQikgewoJY3Rs
 ci0+c2V0bW9kZSA9IGF0YV9pbnRlbF9vbGRfc2V0bW9kZTsKICAgIH0KCiAg
 ICAvKiB0aGUgaW50ZWwgMzEyNDQgbmVlZHMgc3BlY2lhbCBjYXJlIGlmIGlu
 IERQQSBtb2RlICovCiAgICBlbHNlIGlmIChjdGxyLT5jaGlwLT5jaGlwaWQg
 PT0gQVRBX0kzMTI0NCkgewoJaWYgKHBjaV9nZXRfc3ViY2xhc3MoZGV2KSAh
 PSBQQ0lTX1NUT1JBR0VfSURFKSB7CgkgICAgY3Rsci0+cl90eXBlMiA9IFNZ
 U19SRVNfTUVNT1JZOwoJICAgIGN0bHItPnJfcmlkMiA9IFBDSVJfQkFSKDAp
 OwoJICAgIGlmICghKGN0bHItPnJfcmVzMiA9IGJ1c19hbGxvY19yZXNvdXJj
 ZV9hbnkoZGV2LCBjdGxyLT5yX3R5cGUyLAoJCQkJCQkJJmN0bHItPnJfcmlk
 MiwKCQkJCQkJCVJGX0FDVElWRSkpKQoJCXJldHVybiBFTlhJTzsKCSAgICBj
 dGxyLT5jaGFubmVscyA9IDQ7CgkgICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFf
 aW50ZWxfMzEyNDRfYWxsb2NhdGU7CgkgICAgY3Rsci0+cmVzZXQgPSBhdGFf
 aW50ZWxfMzEyNDRfcmVzZXQ7Cgl9CgljdGxyLT5zZXRtb2RlID0gYXRhX3Nh
 dGFfc2V0bW9kZTsKICAgIH0KCiAgICAvKiBub24gU0FUQSBpbnRlbCBjaGlw
 cyBnb2VzIGhlcmUgKi8KICAgIGVsc2UgaWYgKGN0bHItPmNoaXAtPm1heF9k
 bWEgPCBBVEFfU0ExNTApIHsKCWN0bHItPmFsbG9jYXRlID0gYXRhX2ludGVs
 X2FsbG9jYXRlOwoJY3Rsci0+c2V0bW9kZSA9IGF0YV9pbnRlbF9uZXdfc2V0
 bW9kZTsKICAgIH0KCiAgICAvKiBTQVRBIHBhcnRzIGNhbiBiZSBlaXRoZXIg
 Y29tcGF0IG9yIEFIQ0kgKi8KICAgIGVsc2UgewoJLyogZm9yY2UgYWxsIHBv
 cnRzIGFjdGl2ZSAidGhlIGxlZ2FjeSB3YXkiICovCglwY2lfd3JpdGVfY29u
 ZmlnKGRldiwgMHg5MiwgcGNpX3JlYWRfY29uZmlnKGRldiwgMHg5MiwgMikg
 fCAweDBmLDIpOwoKCWN0bHItPmFsbG9jYXRlID0gYXRhX2ludGVsX2FsbG9j
 YXRlOwoJY3Rsci0+cmVzZXQgPSBhdGFfaW50ZWxfcmVzZXQ7CgoJLyogCgkg
 KiBpZiB3ZSBoYXZlIEFIQ0kgY2FwYWJpbGl0eSBhbmQgQkFSKDUpIGFzIGEg
 bWVtb3J5IHJlc291cmNlCgkgKiBhbmQgQUhDSSBvciBSQUlEIG1vZGUgZW5h
 YmxlZCBpbiBCSU9TIHdlIGdvIGZvciBBSENJIG1vZGUKCSAqLyAKCWlmICgo
 Y3Rsci0+Y2hpcC0+Y2ZnMSA9PSBBSENJKSAmJgoJICAgIChwY2lfcmVhZF9j
 b25maWcoZGV2LCAweDkwLCAxKSAmIDB4YzApKSB7CgkgICAgY3Rsci0+cl90
 eXBlMiA9IFNZU19SRVNfTUVNT1JZOwoJICAgIGN0bHItPnJfcmlkMiA9IFBD
 SVJfQkFSKDUpOwoJICAgIGlmICgoY3Rsci0+cl9yZXMyID0gYnVzX2FsbG9j
 X3Jlc291cmNlX2FueShkZXYsIGN0bHItPnJfdHlwZTIsCgkJCQkJCSAgICAg
 ICAmY3Rsci0+cl9yaWQyLAoJCQkJCQkgICAgICAgUkZfQUNUSVZFKSkpCgkJ
 cmV0dXJuIGF0YV9haGNpX2NoaXBpbml0KGRldik7Cgl9CgljdGxyLT5zZXRt
 b2RlID0gYXRhX3NhdGFfc2V0bW9kZTsKCgkvKiBlbmFibGUgUENJIGludGVy
 cnVwdCAqLwoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwK
 CQkJIHBjaV9yZWFkX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwgMikgJiB+
 MHgwNDAwLCAyKTsKICAgIH0KICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50
 CmF0YV9pbnRlbF9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Cgog
 ICAgLyogc2V0dXAgdGhlIHVzdWFsIHJlZ2lzdGVyIG5vcm1hbCBwY2kgc3R5
 bGUgKi8KICAgIGlmIChhdGFfcGNpX2FsbG9jYXRlKGRldikpCglyZXR1cm4g
 RU5YSU87CgogICAgY2gtPmZsYWdzIHw9IEFUQV9BTFdBWVNfRE1BU1RBVDsK
 ICAgIHJldHVybiAwOwp9CgpzdGF0aWMgdm9pZAphdGFfaW50ZWxfcmVzZXQo
 ZGV2aWNlX3QgZGV2KQp7CiAgICBkZXZpY2VfdCBwYXJlbnQgPSBkZXZpY2Vf
 Z2V0X3BhcmVudChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKICAgIHN0cnVj
 dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAg
 ICBpbnQgbWFzaywgdGltZW91dDsKCiAgICAvKiBJQ0g2ICYgSUNINyBpbiBj
 b21wYXQgbW9kZSBoYXMgNCBTQVRBIHBvcnRzIGFzIG1hc3Rlci9zbGF2ZSBv
 biAyIGNoJ3MgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jZmcxKSB7CgltYXNr
 ID0gKDB4MDAwNSA8PCBjaC0+dW5pdCk7CiAgICB9CiAgICBlbHNlIHsKCS8q
 IElDSDUgaW4gY29tcGF0IG1vZGUgaGFzIFNBVEEgcG9ydHMgYXMgbWFzdGVy
 L3NsYXZlIG9uIDEgY2hhbm5lbCAqLwoJaWYgKHBjaV9yZWFkX2NvbmZpZyhw
 YXJlbnQsIDB4OTAsIDEpICYgMHgwNCkKCSAgICBtYXNrID0gMHgwMDAzOwoJ
 ZWxzZSB7CgkgICAgbWFzayA9ICgweDAwMDEgPDwgY2gtPnVuaXQpOwoJICAg
 IC8qIFhYWCBTT1Mgc2hvdWxkIGJlIGluIGludGVsX2FsbG9jYXRlIGlmIHdl
 IGdyb3cgaXQgKi8KCSAgICBjaC0+ZmxhZ3MgfD0gQVRBX05PX1NMQVZFOwoJ
 fQogICAgfQogICAgcGNpX3dyaXRlX2NvbmZpZyhwYXJlbnQsIDB4OTIsIHBj
 aV9yZWFkX2NvbmZpZyhwYXJlbnQsIDB4OTIsIDIpICYgfm1hc2ssIDIpOwog
 ICAgREVMQVkoMTApOwogICAgcGNpX3dyaXRlX2NvbmZpZyhwYXJlbnQsIDB4
 OTIsIHBjaV9yZWFkX2NvbmZpZyhwYXJlbnQsIDB4OTIsIDIpIHwgbWFzaywg
 Mik7CgogICAgLyogd2FpdCB1cCB0byAxIHNlYyBmb3IgImNvbm5lY3Qgd2Vs
 bCIgKi8KICAgIGZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDAgOyB0
 aW1lb3V0KyspIHsKCWlmICgoKHBjaV9yZWFkX2NvbmZpZyhwYXJlbnQsIDB4
 OTIsIDIpICYgKG1hc2sgPDwgNCkpID09IChtYXNrIDw8IDQpKSAmJgoJICAg
 IChBVEFfSURYX0lOQihjaCwgQVRBX1NUQVRVUykgIT0gMHhmZikpCgkgICAg
 YnJlYWs7CglhdGFfdWRlbGF5KDEwMDAwKTsKICAgIH0KICAgIGF0YV9nZW5l
 cmljX3Jlc2V0KGRldik7Cn0KCnN0YXRpYyB2b2lkCmF0YV9pbnRlbF9vbGRf
 c2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICAvKiBOT1Qg
 WUVUICovCn0KCnN0YXRpYyB2b2lkCmF0YV9pbnRlbF9uZXdfc2V0bW9kZShk
 ZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBkZXZpY2VfdCBncGFyZW50
 ID0gR1JBTkRQQVJFTlQoZGV2KTsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy
 b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAg
 c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2
 aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2RldmljZSAq
 YXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgaW50IGRldm5v
 ID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOwog
 ICAgdV9pbnQzMl90IHJlZzQwID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQs
 IDB4NDAsIDQpOwogICAgdV9pbnQ4X3QgcmVnNDQgPSBwY2lfcmVhZF9jb25m
 aWcoZ3BhcmVudCwgMHg0NCwgMSk7CiAgICB1X2ludDhfdCByZWc0OCA9IHBj
 aV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDQ4LCAxKTsKICAgIHVfaW50MTZf
 dCByZWc0YSA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDRhLCAyKTsK
 ICAgIHVfaW50MTZfdCByZWc1NCA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50
 LCAweDU0LCAyKTsKICAgIHVfaW50MzJfdCBtYXNrNDAgPSAwLCBuZXc0MCA9
 IDA7CiAgICB1X2ludDhfdCBtYXNrNDQgPSAwLCBuZXc0NCA9IDA7CiAgICBp
 bnQgZXJyb3I7CiAgICB1X2ludDhfdCB0aW1pbmdzW10gPSB7IDB4MDAsIDB4
 MDAsIDB4MTAsIDB4MjEsIDB4MjMsIDB4MTAsIDB4MjEsIDB4MjMsCgkJCSAg
 IDB4MjMsIDB4MjMsIDB4MjMsIDB4MjMsIDB4MjMsIDB4MjMgfTsKCiAgICBt
 b2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlwLT5t
 YXhfZG1hKTsKCiAgICBpZiAoIG1vZGUgPiBBVEFfVURNQTIgJiYgIShyZWc1
 NCAmICgweDEwIDw8IGRldm5vKSkpIHsKCWF0YV9wcmludF9jYWJsZShkZXYs
 ICJjb250cm9sbGVyIik7Cgltb2RlID0gQVRBX1VETUEyOwogICAgfQoKICAg
 IGVycm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBBVEFfU0VURkVBVFVSRVMs
 IEFUQV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKCiAgICBpZiAoYm9vdHZlcmJv
 c2UpCglkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBj
 aGlwXG4iLAoJCSAgICAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsCgkJ
 ICAgICAgYXRhX21vZGUyc3RyKG1vZGUpLCBjdGxyLT5jaGlwLT50ZXh0KTsK
 ICAgIGlmIChlcnJvcikKCXJldHVybjsKCiAgICBpZiAobW9kZSA+PSBBVEFf
 VURNQTApIHsKCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0OCwgcmVn
 NDggfCAoMHgwMDAxIDw8IGRldm5vKSwgMik7CglwY2lfd3JpdGVfY29uZmln
 KGdwYXJlbnQsIDB4NGEsCgkJCSAocmVnNGEgJiB+KDB4MyA8PCAoZGV2bm8g
 PDwgMikpKSB8CgkJCSAoKDB4MDEgKyAhKG1vZGUgJiAweDAxKSkgPDwgKGRl
 dm5vIDw8IDIpKSwgMik7CiAgICB9CiAgICBlbHNlIHsKCXBjaV93cml0ZV9j
 b25maWcoZ3BhcmVudCwgMHg0OCwgcmVnNDggJiB+KDB4MDAwMSA8PCBkZXZu
 byksIDIpOwoJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDRhLCAocmVn
 NGEgJiB+KDB4MyA8PCAoZGV2bm8gPDwgMikpKSwgMik7CiAgICB9CiAgICBy
 ZWc1NCB8PSAweDA0MDA7CiAgICBpZiAobW9kZSA+PSBBVEFfVURNQTIpCglw
 Y2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0IHwgKDB4MSA8
 PCBkZXZubyksIDIpOwogICAgZWxzZQoJcGNpX3dyaXRlX2NvbmZpZyhncGFy
 ZW50LCAweDU0LCByZWc1NCAmIH4oMHgxIDw8IGRldm5vKSwgMik7CgogICAg
 aWYgKG1vZGUgPj0gQVRBX1VETUE1KQoJcGNpX3dyaXRlX2NvbmZpZyhncGFy
 ZW50LCAweDU0LCByZWc1NCB8ICgweDEwMDAgPDwgZGV2bm8pLCAyKTsKICAg
 IGVsc2UgCglwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0
 ICYgfigweDEwMDAgPDwgZGV2bm8pLCAyKTsKCiAgICByZWc0MCAmPSB+MHgw
 MGZmMDBmZjsKICAgIHJlZzQwIHw9IDB4NDA3NzQwNzc7CgogICAgaWYgKGF0
 YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSB7CgltYXNrNDAgPSAweDMzMDA7
 CgluZXc0MCA9IHRpbWluZ3NbYXRhX21vZGUyaWR4KG1vZGUpXSA8PCA4Owog
 ICAgfQogICAgZWxzZSB7CgltYXNrNDQgPSAweDBmOwoJbmV3NDQgPSAoKHRp
 bWluZ3NbYXRhX21vZGUyaWR4KG1vZGUpXSAmIDB4MzApID4+IDIpIHwKCQko
 dGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldICYgMHgwMyk7CiAgICB9CiAg
 ICBpZiAoY2gtPnVuaXQpIHsKCW1hc2s0MCA8PD0gMTY7CgluZXc0MCA8PD0g
 MTY7CgltYXNrNDQgPDw9IDQ7CgluZXc0NCA8PD0gNDsKICAgIH0KICAgIHBj
 aV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0MCwgKHJlZzQwICYgfm1hc2s0
 MCkgfCBuZXc0MCwgNCk7CiAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQs
 IDB4NDQsIChyZWc0NCAmIH5tYXNrNDQpIHwgbmV3NDQsIDEpOwoKICAgIGF0
 YWRldi0+bW9kZSA9IG1vZGU7Cn0KCnN0YXRpYyBpbnQKYXRhX2ludGVsXzMx
 MjQ0X2FsbG9jYXRlKGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9w
 Y2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNl
 X2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgaW50IGk7CiAgICBpbnQg
 Y2hfb2Zmc2V0OwoKICAgIGNoX29mZnNldCA9IDB4MjAwICsgY2gtPnVuaXQg
 KiAweDIwMDsKCiAgICBmb3IgKGkgPSBBVEFfREFUQTsgaSA8IEFUQV9NQVhf
 UkVTOyBpKyspCgljaC0+cl9pb1tpXS5yZXMgPSBjdGxyLT5yX3JlczI7Cgog
 ICAgLyogc2V0dXAgQVRBIHJlZ2lzdGVycyAqLwogICAgY2gtPnJfaW9bQVRB
 X0RBVEFdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MDA7CiAgICBjaC0+cl9p
 b1tBVEFfRkVBVFVSRV0ub2Zmc2V0ID0gY2hfb2Zmc2V0ICsgMHgwNjsKICAg
 IGNoLT5yX2lvW0FUQV9DT1VOVF0ub2Zmc2V0ID0gY2hfb2Zmc2V0ICsgMHgw
 ODsKICAgIGNoLT5yX2lvW0FUQV9TRUNUT1JdLm9mZnNldCA9IGNoX29mZnNl
 dCArIDB4MGM7CiAgICBjaC0+cl9pb1tBVEFfQ1lMX0xTQl0ub2Zmc2V0ID0g
 Y2hfb2Zmc2V0ICsgMHgxMDsKICAgIGNoLT5yX2lvW0FUQV9DWUxfTVNCXS5v
 ZmZzZXQgPSBjaF9vZmZzZXQgKyAweDE0OwogICAgY2gtPnJfaW9bQVRBX0RS
 SVZFXS5vZmZzZXQgPSBjaF9vZmZzZXQgKyAweDE4OwogICAgY2gtPnJfaW9b
 QVRBX0NPTU1BTkRdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MWQ7CiAgICBj
 aC0+cl9pb1tBVEFfRVJST1JdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MDQ7
 CiAgICBjaC0+cl9pb1tBVEFfU1RBVFVTXS5vZmZzZXQgPSBjaF9vZmZzZXQg
 KyAweDFjOwogICAgY2gtPnJfaW9bQVRBX0FMVFNUQVRdLm9mZnNldCA9IGNo
 X29mZnNldCArIDB4Mjg7CiAgICBjaC0+cl9pb1tBVEFfQ09OVFJPTF0ub2Zm
 c2V0ID0gY2hfb2Zmc2V0ICsgMHgyOTsKCiAgICAvKiBzZXR1cCBETUEgcmVn
 aXN0ZXJzICovCiAgICBjaC0+cl9pb1tBVEFfU1NUQVRVU10ub2Zmc2V0ID0g
 Y2hfb2Zmc2V0ICsgMHgxMDA7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5v
 ZmZzZXQgPSBjaF9vZmZzZXQgKyAweDEwNDsKICAgIGNoLT5yX2lvW0FUQV9T
 Q09OVFJPTF0ub2Zmc2V0ID0gY2hfb2Zmc2V0ICsgMHgxMDg7CgogICAgLyog
 c2V0dXAgU0FUQSByZWdpc3RlcnMgKi8KICAgIGNoLT5yX2lvW0FUQV9CTUNN
 RF9QT1JUXS5vZmZzZXQgPSBjaF9vZmZzZXQgKyAweDcwOwogICAgY2gtPnJf
 aW9bQVRBX0JNU1RBVF9QT1JUXS5vZmZzZXQgPSBjaF9vZmZzZXQgKyAweDcy
 OwogICAgY2gtPnJfaW9bQVRBX0JNRFRQX1BPUlRdLm9mZnNldCA9IGNoX29m
 ZnNldCArIDB4NzQ7CgogICAgY2gtPmZsYWdzIHw9IEFUQV9OT19TTEFWRTsK
 ICAgIGF0YV9wY2lfaHcoZGV2KTsKICAgIGNoLT5ody5zdGF0dXMgPSBhdGFf
 aW50ZWxfMzEyNDRfc3RhdHVzOwogICAgY2gtPmh3LmNvbW1hbmQgPSBhdGFf
 aW50ZWxfMzEyNDRfY29tbWFuZDsKCiAgICAvKiBlbmFibGUgUEhZIHN0YXRl
 IGNoYW5nZSBpbnRlcnJ1cHQgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz
 MiwgMHg0LAoJICAgICBBVEFfSU5MKGN0bHItPnJfcmVzMiwgMHgwNCkgfCAo
 MHgwMSA8PCAoY2gtPnVuaXQgPDwgMykpKTsKICAgIHJldHVybiAwOwp9Cgpz
 dGF0aWMgaW50CmF0YV9pbnRlbF8zMTI0NF9zdGF0dXMoZGV2aWNlX3QgZGV2
 KQp7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXYpOwogICAgdV9pbnQzMl90IHN0YXR1cyA9IEFUQV9JRFhfSU5M
 KGNoLCBBVEFfU1NUQVRVUyk7CiAgICB1X2ludDMyX3QgZXJyb3IgPSBBVEFf
 SURYX0lOTChjaCwgQVRBX1NFUlJPUik7CiAgICBzdHJ1Y3QgYXRhX2Nvbm5l
 Y3RfdGFzayAqdHA7CgogICAgLyogY2hlY2sgZm9yIFBIWSByZWxhdGVkIGlu
 dGVycnVwdHMgb24gU0FUQSBjYXBhYmxlIEhXICovCiAgICBpZiAoZXJyb3Ip
 IHsKCS8qIGNsZWFyIGVycm9yIGJpdHMvaW50ZXJydXB0ICovCglBVEFfSURY
 X09VVEwoY2gsIEFUQV9TRVJST1IsIGVycm9yKTsKCgkvKiBpZiB3ZSBoYXZl
 IGEgY29ubmVjdGlvbiBldmVudCBkZWFsIHdpdGggaXQgKi8KCWlmICgoZXJy
 b3IgJiBBVEFfU0VfUEhZX0NIQU5HRUQpICYmCgkgICAgKHRwID0gKHN0cnVj
 dCBhdGFfY29ubmVjdF90YXNrICopCgkJICBtYWxsb2Moc2l6ZW9mKHN0cnVj
 dCBhdGFfY29ubmVjdF90YXNrKSwKCQkJIE1fQVRBLCBNX05PV0FJVCB8IE1f
 WkVSTykpKSB7CgoJICAgIGlmICgoc3RhdHVzICYgQVRBX1NTX0NPTldFTExf
 TUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMSkgewoJCWlmIChib290dmVy
 Ym9zZSkKCQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiQ09OTkVDVCBy
 ZXF1ZXN0ZWRcbiIpOwoJCXRwLT5hY3Rpb24gPSBBVEFfQ19BVFRBQ0g7Cgkg
 ICAgfQoJICAgIGVsc2UgewoJCWlmIChib290dmVyYm9zZSkKCQkgICAgZGV2
 aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRcbiIp
 OwoJCXRwLT5hY3Rpb24gPSBBVEFfQ19ERVRBQ0g7CgkgICAgfQoJICAgIHRw
 LT5kZXYgPSBjaC0+ZGV2OwoJICAgIFRBU0tfSU5JVCgmdHAtPnRhc2ssIDAs
 IGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwoJICAgIHRhc2txdWV1ZV9lbnF1
 ZXVlKHRhc2txdWV1ZV90aHJlYWQsICZ0cC0+dGFzayk7Cgl9CiAgICB9Cgog
 ICAgLyogYW55IGRyaXZlIGFjdGlvbiB0byB0YWtlIGNhcmUgb2YgPyAqLwog
 ICAgcmV0dXJuIGF0YV9wY2lfc3RhdHVzKGRldik7Cn0KCnN0YXRpYyBpbnQK
 YXRhX2ludGVsXzMxMjQ0X2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1ZXN0ICpy
 ZXF1ZXN0KQp7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNl
 X2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsK
 ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKHJlcXVlc3QtPmRldik7CiAgICB1X2ludDY0X3QgbGJhOwoKICAgIGlm
 ICghKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpKQoJICAg
 IHJldHVybiAoYXRhX2dlbmVyaWNfY29tbWFuZChyZXF1ZXN0KSk7CgogICAg
 bGJhID0gcmVxdWVzdC0+dS5hdGEubGJhOwogICAgQVRBX0lEWF9PVVRCKGNo
 LCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8IGF0YWRldi0+
 dW5pdCk7CiAgICAvKiBlbmFibGUgaW50ZXJydXB0ICovCiAgICBBVEFfSURY
 X09VVEIoY2gsIEFUQV9DT05UUk9MLCBBVEFfQV80QklUKTsKICAgIEFUQV9J
 RFhfT1VUVyhjaCwgQVRBX0ZFQVRVUkUsIHJlcXVlc3QtPnUuYXRhLmZlYXR1
 cmUpOwogICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfQ09VTlQsIHJlcXVlc3Qt
 PnUuYXRhLmNvdW50KTsKICAgIEFUQV9JRFhfT1VUVyhjaCwgQVRBX1NFQ1RP
 UiwgKChsYmEgPj4gMTYpICYgMHhmZjAwKSB8IChsYmEgJiAweDAwZmYpKTsK
 ICAgIEFUQV9JRFhfT1VUVyhjaCwgQVRBX0NZTF9MU0IsICgobGJhID4+IDI0
 KSAmIDB4ZmYwMCkgfAoJCQkJICAoKGxiYSA+PiA4KSAmIDB4MDBmZikpOwog
 ICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfQ1lMX01TQiwgKChsYmEgPj4gMzIp
 ICYgMHhmZjAwKSB8IAoJCQkJICAoKGxiYSA+PiAxNikgJiAweDAwZmYpKTsK
 CiAgICAvKiBpc3N1ZSBjb21tYW5kIHRvIGNvbnRyb2xsZXIgKi8KICAgIEFU
 QV9JRFhfT1VUQihjaCwgQVRBX0NPTU1BTkQsIHJlcXVlc3QtPnUuYXRhLmNv
 bW1hbmQpOwoKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgdm9pZAphdGFfaW50
 ZWxfMzEyNDRfcmVzZXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRh
 X2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGF0
 YV9zYXRhX3BoeV9lbmFibGUoY2gpOwp9CgoKLyoKICogSW50ZWdyYXRlZCBU
 ZWNobm9sb2d5IEV4cHJlc3MgSW5jLiAoSVRFKSBjaGlwc2V0IHN1cHBvcnQg
 ZnVuY3Rpb25zCiAqLwppbnQKYXRhX2l0ZV9pZGVudChkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlk
 eDsKICAgIHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAg
 e3sgQVRBX0lUODIxMkYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwg
 IklUODIxMkYiIH0sCiAgICAgeyBBVEFfSVQ4MjExRiwgMHgwMCwgMHgwMCwg
 MHgwMCwgQVRBX1VETUE2LCAiSVQ4MjExRiIgfSwKICAgICB7IDAsIDAsIDAs
 IDAsIDAsIDB9fTsKICAgIGNoYXIgYnVmZmVyWzY0XTsgCgogICAgaWYgKCEo
 aWR4ID0gYXRhX21hdGNoX2NoaXAoZGV2LCBpZHMpKSkKCXJldHVybiBFTlhJ
 TzsKCiAgICBzcHJpbnRmKGJ1ZmZlciwgIklURSAlcyAlcyBjb250cm9sbGVy
 IiwKCSAgICBpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEp
 KTsKICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVmZmVyKTsKICAg
 IGN0bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9p
 dGVfY2hpcGluaXQ7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludAphdGFf
 aXRlX2NoaXBpbml0KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9w
 Y2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 CiAgICBpZiAoYXRhX3NldHVwX2ludGVycnVwdChkZXYpKQoJcmV0dXJuIEVO
 WElPOwoKICAgIGN0bHItPnNldG1vZGUgPSBhdGFfaXRlX3NldG1vZGU7Cgog
 ICAgLyogc2V0IFBDSSBtb2RlIGFuZCA2Nk1oeiByZWZlcmVuY2UgY2xvY2sg
 Ki8KICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDUwLCBwY2lfcmVhZF9j
 b25maWcoZGV2LCAweDUwLCAxKSAmIH4weDgzLCAxKTsKCiAgICAvKiBzZXQg
 ZGVmYXVsdCBhY3RpdmUgJiByZWNvdmVyIHRpbWluZ3MgKi8KICAgIHBjaV93
 cml0ZV9jb25maWcoZGV2LCAweDU0LCAweDMxLCAxKTsKICAgIHBjaV93cml0
 ZV9jb25maWcoZGV2LCAweDU2LCAweDMxLCAxKTsKICAgIHJldHVybiAwOwp9
 CiAKc3RhdGljIHZvaWQKYXRhX2l0ZV9zZXRtb2RlKGRldmljZV90IGRldiwg
 aW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVO
 VChkZXYpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwog
 ICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFk
 ZXYtPnVuaXQpOwogICAgaW50IGVycm9yOwoKICAgIC8qIGNvcnJlY3QgdGhl
 IG1vZGUgZm9yIHdoYXQgdGhlIEhXIHN1cHBvcnRzICovCiAgICBtb2RlID0g
 YXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBBVEFfVURNQTYpOwoKICAgIC8q
 IGNoZWNrIHRoZSBDQkxJRCBiaXRzIGZvciA4MCBjb25kdWN0b3IgY2FibGUg
 ZGV0ZWN0aW9uICovCiAgICBpZiAobW9kZSA+IEFUQV9VRE1BMiAmJiAocGNp
 X3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDAsIDIpICYKCQkJICAgICAoY2gt
 PnVuaXQgPyAoMTw8MykgOiAoMTw8MikpKSkgewoJYXRhX3ByaW50X2NhYmxl
 KGRldiwgImNvbnRyb2xsZXIiKTsKCW1vZGUgPSBBVEFfVURNQTI7CiAgICB9
 CgogICAgLyogc2V0IHRoZSB3YW50ZWQgbW9kZSBvbiB0aGUgZGV2aWNlICov
 CiAgICBlcnJvciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRV
 UkVTLCBBVEFfU0ZfU0VUWEZFUiwgMCwgbW9kZSk7CgogICAgaWYgKGJvb3R2
 ZXJib3NlKQoJZGV2aWNlX3ByaW50ZihkZXYsICIlcyBzZXR0aW5nICVzIG9u
 IElURTgyMTJGIGNoaXBcbiIsCgkJICAgICAgKGVycm9yKSA/ICJmYWlsZWQi
 IDogInN1Y2Nlc3MiLCBhdGFfbW9kZTJzdHIobW9kZSkpOwoKICAgIC8qIGlm
 IHRoZSBkZXZpY2UgYWNjZXB0ZWQgdGhlIG1vZGUgY2hhbmdlLCBzZXR1cCB0
 aGUgSFcgYWNjb3JkaW5nbHkgKi8KICAgIGlmICghZXJyb3IpIHsKCWlmICht
 b2RlID49IEFUQV9VRE1BMCkgewoJICAgIHVfaW50OF90IHVkbWF0aW1pbmdb
 XSA9CgkJeyAweDQ0LCAweDQyLCAweDMxLCAweDIxLCAweDExLCAweGEyLCAw
 eDkxIH07CgoJICAgIC8qIGVuYWJsZSBVRE1BIG1vZGUgKi8KCSAgICBwY2lf
 d3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTAsCgkJCSAgICAgcGNpX3JlYWRf
 Y29uZmlnKGdwYXJlbnQsIDB4NTAsIDEpICYKCQkJICAgICB+KDEgPDwgKGRl
 dm5vICsgMykpLCAxKTsKCgkgICAgLyogc2V0IFVETUEgdGltaW5nICovCgkg
 ICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LAoJCQkgICAgIDB4NTYgKyAo
 Y2gtPnVuaXQgPDwgMikgKyBBVEFfREVWKGF0YWRldi0+dW5pdCksCgkJCSAg
 ICAgdWRtYXRpbWluZ1ttb2RlICYgQVRBX01PREVfTUFTS10sIDEpOwoJfQoJ
 ZWxzZSB7CgkgICAgdV9pbnQ4X3QgY2h0aW1pbmdbXSA9CgkJeyAweGFhLCAw
 eGEzLCAweGExLCAweDMzLCAweDMxLCAweDg4LCAweDMyLCAweDMxIH07CgoJ
 ICAgIC8qIGRpc2FibGUgVURNQSBtb2RlICovCgkgICAgcGNpX3dyaXRlX2Nv
 bmZpZyhncGFyZW50LCAweDUwLAoJCQkgICAgIHBjaV9yZWFkX2NvbmZpZyhn
 cGFyZW50LCAweDUwLCAxKSB8CgkJCSAgICAgKDEgPDwgKGRldm5vICsgMykp
 LCAxKTsKCgkgICAgLyogc2V0IGFjdGl2ZSBhbmQgcmVjb3ZlciB0aW1pbmcg
 KHNoYXJlZCBiZXR3ZWVuIG1hc3RlciAmIHNsYXZlKSAqLwoJICAgIGlmIChw
 Y2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NCArIChjaC0+dW5pdCA8PCAy
 KSwgMSkgPAoJCWNodGltaW5nW2F0YV9tb2RlMmlkeChtb2RlKV0pCgkJcGNp
 X3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDU0ICsgKGNoLT51bml0IDw8IDIp
 LAoJCQkJIGNodGltaW5nW2F0YV9tb2RlMmlkeChtb2RlKV0sIDEpOwoJfQoJ
 YXRhZGV2LT5tb2RlID0gbW9kZTsKICAgIH0KfQoKCi8qCiAqIEpNaWNyb24g
 Y2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KaW50CmF0YV9qbWljcm9u
 X2lkZW50KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0
 cnVjdCBhdGFfY2hpcF9pZCAqaWR4OwogICAgc3RhdGljIHN0cnVjdCBhdGFf
 Y2hpcF9pZCBpZHNbXSA9CiAgICB7eyBBVEFfSk1CMzYwLCAwLCAxLCAwLCBB
 VEFfU0EzMDAsICJKTUIzNjAiIH0sCiAgICAgeyBBVEFfSk1CMzYxLCAwLCAx
 LCAxLCBBVEFfU0EzMDAsICJKTUIzNjEiIH0sCiAgICAgeyBBVEFfSk1CMzYz
 LCAwLCAyLCAxLCBBVEFfU0EzMDAsICJKTUIzNjMiIH0sCiAgICAgeyBBVEFf
 Sk1CMzY1LCAwLCAxLCAyLCBBVEFfU0EzMDAsICJKTUIzNjUiIH0sCiAgICAg
 eyBBVEFfSk1CMzY2LCAwLCAyLCAyLCBBVEFfU0EzMDAsICJKTUIzNjYiIH0s
 CiAgICAgeyAwLCAwLCAwLCAwLCAwLCAwfX07CiAgICBjaGFyIGJ1ZmZlcls2
 NF07CgogICAgaWYgKCEoaWR4ID0gYXRhX21hdGNoX2NoaXAoZGV2LCBpZHMp
 KSkKICAgICAgICByZXR1cm4gRU5YSU87CgogICAgaWYgKChwY2lfcmVhZF9j
 b25maWcoZGV2LCAweGRmLCAxKSAmIDB4NDApICYmCgkocGNpX2dldF9mdW5j
 dGlvbihkZXYpID09IChwY2lfcmVhZF9jb25maWcoZGV2LCAweDQwLCAxKSAm
 IDB4MDIgPj4gMSkpKQoJc3ByaW50ZihidWZmZXIsICJKTWljcm9uICVzICVz
 IGNvbnRyb2xsZXIiLAoJCWlkeC0+dGV4dCwgYXRhX21vZGUyc3RyKEFUQV9V
 RE1BNikpOwogICAgZWxzZQoJc3ByaW50ZihidWZmZXIsICJKTWljcm9uICVz
 ICVzIGNvbnRyb2xsZXIiLAoJCWlkeC0+dGV4dCwgYXRhX21vZGUyc3RyKGlk
 eC0+bWF4X2RtYSkpOwogICAgZGV2aWNlX3NldF9kZXNjX2NvcHkoZGV2LCBi
 dWZmZXIpOwogICAgY3Rsci0+Y2hpcCA9IGlkeDsKICAgIGN0bHItPmNoaXBp
 bml0ID0gYXRhX2ptaWNyb25fY2hpcGluaXQ7CiAgICByZXR1cm4gMDsKfQoK
 c3RhdGljIGludAphdGFfam1pY3Jvbl9jaGlwaW5pdChkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgZXJyb3I7CgogICAgaWYgKGF0
 YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAgICAv
 KiBkbyB3ZSBoYXZlIG11bHRpcGxlIFBDSSBmdW5jdGlvbnMgPyAqLwogICAg
 aWYgKHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4ZGYsIDEpICYgMHg0MCkgewoJ
 LyogaWYgd2UgaGF2ZSBhIG1lbW9yeSBCQVIoNSkgd2UgYXJlIG9uIHRoZSBB
 SENJIHBhcnQgKi8KCWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsK
 CWN0bHItPnJfcmlkMiA9IFBDSVJfQkFSKDUpOwoJaWYgKChjdGxyLT5yX3Jl
 czIgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBl
 MiwKCQkJCQkJICAgICZjdGxyLT5yX3JpZDIsIFJGX0FDVElWRSkpKQoJICAg
 IHJldHVybiBhdGFfYWhjaV9jaGlwaW5pdChkZXYpOwoKCS8qIG90aGVyd2lz
 ZSB3ZSBhcmUgb24gdGhlIFBBVEEgcGFydCAqLwoJY3Rsci0+YWxsb2NhdGUg
 PSBhdGFfcGNpX2FsbG9jYXRlOwoJY3Rsci0+cmVzZXQgPSBhdGFfZ2VuZXJp
 Y19yZXNldDsKCWN0bHItPmRtYWluaXQgPSBhdGFfcGNpX2RtYWluaXQ7Cglj
 dGxyLT5zZXRtb2RlID0gYXRhX2ptaWNyb25fc2V0bW9kZTsKCWN0bHItPmNo
 YW5uZWxzID0gY3Rsci0+Y2hpcC0+Y2ZnMjsKICAgIH0KICAgIGVsc2UgewoJ
 Lyogc2V0IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiB0byBhIGNvbWJpbmVk
 IHNldHVwIHdlIHN1cHBvcnQgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCAw
 eDQwLCAweDgwYzBhMTMxLCA0KTsKCXBjaV93cml0ZV9jb25maWcoZGV2LCAw
 eDgwLCAweDAxMjAwMDAwLCA0KTsKCgljdGxyLT5yX3R5cGUyID0gU1lTX1JF
 U19NRU1PUlk7CgljdGxyLT5yX3JpZDIgPSBQQ0lSX0JBUig1KTsKCWlmICgo
 Y3Rsci0+cl9yZXMyID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIGN0
 bHItPnJfdHlwZTIsCgkJCQkJCSAgICAmY3Rsci0+cl9yaWQyLCBSRl9BQ1RJ
 VkUpKSl7CgkgICAgaWYgKChlcnJvciA9IGF0YV9haGNpX2NoaXBpbml0KGRl
 dikpKQoJCXJldHVybiBlcnJvcjsKCX0KCgljdGxyLT5hbGxvY2F0ZSA9IGF0
 YV9qbWljcm9uX2FsbG9jYXRlOwoJY3Rsci0+cmVzZXQgPSBhdGFfam1pY3Jv
 bl9yZXNldDsKCWN0bHItPmRtYWluaXQgPSBhdGFfam1pY3Jvbl9kbWFpbml0
 OwoJY3Rsci0+c2V0bW9kZSA9IGF0YV9qbWljcm9uX3NldG1vZGU7CgoJLyog
 c2V0IHRoZSBudW1iZXIgb2YgSFcgY2hhbm5lbHMgKi8gCgljdGxyLT5jaGFu
 bmVscyA9IGN0bHItPmNoaXAtPmNmZzEgKyBjdGxyLT5jaGlwLT5jZmcyOwog
 ICAgfQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2ptaWNyb25f
 YWxsb2NhdGUoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9j
 b250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk
 ZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgZXJyb3I7CgogICAgaWYg
 KGNoLT51bml0ID49IGN0bHItPmNoaXAtPmNmZzEpIHsKCWNoLT51bml0IC09
 IGN0bHItPmNoaXAtPmNmZzE7CgllcnJvciA9IGF0YV9wY2lfYWxsb2NhdGUo
 ZGV2KTsKCWNoLT51bml0ICs9IGN0bHItPmNoaXAtPmNmZzE7CiAgICB9CiAg
 ICBlbHNlCgllcnJvciA9IGF0YV9haGNpX2FsbG9jYXRlKGRldik7CiAgICBy
 ZXR1cm4gZXJyb3I7Cn0KCnN0YXRpYyB2b2lkCmF0YV9qbWljcm9uX3Jlc2V0
 KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQo
 ZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dl
 dF9zb2Z0YyhkZXYpOwoKICAgIGlmIChjaC0+dW5pdCA+PSBjdGxyLT5jaGlw
 LT5jZmcxKQoJYXRhX2dlbmVyaWNfcmVzZXQoZGV2KTsKICAgIGVsc2UKCWF0
 YV9haGNpX3Jlc2V0KGRldik7Cn0KCnN0YXRpYyB2b2lkCmF0YV9qbWljcm9u
 X2RtYWluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9j
 b250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk
 ZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYgKGNoLT51bml0ID49IGN0
 bHItPmNoaXAtPmNmZzEpCglhdGFfcGNpX2RtYWluaXQoZGV2KTsKICAgIGVs
 c2UKCWF0YV9haGNpX2RtYWluaXQoZGV2KTsKfQoKc3RhdGljIHZvaWQKYXRh
 X2ptaWNyb25fc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAg
 ICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dl
 dF9zb2Z0YyhHUkFORFBBUkVOVChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hh
 bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50
 KGRldikpOwoKICAgIGlmIChwY2lfcmVhZF9jb25maWcoZGV2LCAweGRmLCAx
 KSAmIDB4NDAgfHwgY2gtPnVuaXQgPj0gY3Rsci0+Y2hpcC0+Y2ZnMSkgewoJ
 c3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2KTsKCgkvKiBjaGVjayBmb3IgODBwaW4gY2FibGUgcHJlc2VudCAqLwoJ
 aWYgKHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDAsIDEpICYgMHgwOCkKCSAg
 ICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBBVEFfVURNQTIp
 OwoJZWxzZQoJICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUs
 IEFUQV9VRE1BNik7CgoJaWYgKCFhdGFfY29udHJvbGNtZChkZXYsIEFUQV9T
 RVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUpKQoJICAgIGF0
 YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9CiAgICBlbHNlCglhdGFfc2F0YV9z
 ZXRtb2RlKGRldiwgbW9kZSk7Cn0KCgovKgogKiBNYXJ2ZWxsIGNoaXBzZXQg
 c3VwcG9ydCBmdW5jdGlvbnMKICovCiNkZWZpbmUgQVRBX01WX0hPU1RfQkFT
 RShjaCkgXAoJKChjaC0+dW5pdCAmIDMpICogMHgwMTAwKSArIChjaC0+dW5p
 dCA+IDMgPyAweDMwMDAwIDogMHgyMDAwMCkKI2RlZmluZSBBVEFfTVZfRURN
 QV9CQVNFKGNoKSBcCgkoKGNoLT51bml0ICYgMykgKiAweDIwMDApICsgKGNo
 LT51bml0ID4gMyA/IDB4MzAwMDAgOiAweDIwMDAwKQoKc3RydWN0IGF0YV9t
 YXJ2ZWxsX3Jlc3BvbnNlIHsKICAgIHVfaW50MTZfdCAgIHRhZzsKICAgIHVf
 aW50OF90ICAgIGVkbWFfc3RhdHVzOwogICAgdV9pbnQ4X3QgICAgZGV2X3N0
 YXR1czsKICAgIHVfaW50MzJfdCAgIHRpbWVzdGFtcDsKfTsKCnN0cnVjdCBh
 dGFfbWFydmVsbF9kbWFfcHJkZW50cnkgewogICAgdV9pbnQzMl90IGFkZHJs
 bzsKICAgIHVfaW50MzJfdCBjb3VudDsKICAgIHVfaW50MzJfdCBhZGRyaGk7
 CiAgICB1X2ludDMyX3QgcmVzZXJ2ZWQ7Cn07ICAKCmludAphdGFfbWFydmVs
 bF9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2Nv
 bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBz
 dHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAgIHN0YXRpYyBzdHJ1Y3QgYXRh
 X2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRBX004OFNYNTA0MCwgMCwgNCwg
 TVY1WFhYLCBBVEFfU0ExNTAsICI4OFNYNTA0MCIgfSwKICAgICB7IEFUQV9N
 ODhTWDUwNDEsIDAsIDQsIE1WNVhYWCwgQVRBX1NBMTUwLCAiODhTWDUwNDEi
 IH0sCiAgICAgeyBBVEFfTTg4U1g1MDgwLCAwLCA4LCBNVjVYWFgsIEFUQV9T
 QTE1MCwgIjg4U1g1MDgwIiB9LAogICAgIHsgQVRBX004OFNYNTA4MSwgMCwg
 OCwgTVY1WFhYLCBBVEFfU0ExNTAsICI4OFNYNTA4MSIgfSwKICAgICB7IEFU
 QV9NODhTWDYwNDEsIDAsIDQsIE1WNlhYWCwgQVRBX1NBMzAwLCAiODhTWDYw
 NDEiIH0sCiAgICAgeyBBVEFfTTg4U1g2MDgxLCAwLCA4LCBNVjZYWFgsIEFU
 QV9TQTMwMCwgIjg4U1g2MDgxIiB9LAogICAgIHsgMCwgMCwgMCwgMCwgMCwg
 MH19OwogICAgY2hhciBidWZmZXJbNjRdOwoKICAgIGlmICghKGlkeCA9IGF0
 YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4gRU5YSU87CgogICAg
 c3ByaW50ZihidWZmZXIsICJNYXJ2ZWxsICVzICVzIGNvbnRyb2xsZXIiLAoJ
 ICAgIGlkeC0+dGV4dCwgYXRhX21vZGUyc3RyKGlkeC0+bWF4X2RtYSkpOwog
 ICAgZGV2aWNlX3NldF9kZXNjX2NvcHkoZGV2LCBidWZmZXIpOwogICAgY3Rs
 ci0+Y2hpcCA9IGlkeDsKICAgIGN0bHItPmNoaXBpbml0ID0gYXRhX21hcnZl
 bGxfY2hpcGluaXQ7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludAphdGFf
 bWFydmVsbF9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVy
 biBFTlhJTzsKCiAgICBjdGxyLT5yX3R5cGUxID0gU1lTX1JFU19NRU1PUlk7
 CiAgICBjdGxyLT5yX3JpZDEgPSBQQ0lSX0JBUigwKTsKICAgIGlmICghKGN0
 bHItPnJfcmVzMSA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBjdGxy
 LT5yX3R5cGUxLAoJCQkJCQkmY3Rsci0+cl9yaWQxLCBSRl9BQ1RJVkUpKSkK
 CXJldHVybiBFTlhJTzsKCiAgICAvKiBtYXNrIGFsbCBob3N0IGNvbnRyb2xs
 ZXIgaW50ZXJydXB0cyAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAw
 eDAxZDY0LCAweDAwMDAwMDAwKTsKCiAgICAvKiBtYXNrIGFsbCBQQ0kgaW50
 ZXJydXB0cyAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAxZDVj
 LCAweDAwMDAwMDAwKTsKCiAgICBjdGxyLT5hbGxvY2F0ZSA9IGF0YV9tYXJ2
 ZWxsX2FsbG9jYXRlOwogICAgY3Rsci0+cmVzZXQgPSBhdGFfbWFydmVsbF9y
 ZXNldDsKICAgIGN0bHItPmRtYWluaXQgPSBhdGFfbWFydmVsbF9kbWFpbml0
 OwogICAgY3Rsci0+c2V0bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CiAgICBj
 dGxyLT5jaGFubmVscyA9IGN0bHItPmNoaXAtPmNmZzE7CgogICAgLyogY2xl
 YXIgaG9zdCBjb250cm9sbGVyIGludGVycnVwdHMgKi8KICAgIEFUQV9PVVRM
 KGN0bHItPnJfcmVzMSwgMHgyMDAxNCwgMHgwMDAwMDAwMCk7CiAgICBpZiAo
 Y3Rsci0+Y2hpcC0+Y2ZnMSA+IDQpCglBVEFfT1VUTChjdGxyLT5yX3JlczEs
 IDB4MzAwMTQsIDB4MDAwMDAwMDApOwoKICAgIC8qIGNsZWFyIFBDSSBpbnRl
 cnJ1cHRzICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczEsIDB4MDFkNTgs
 IDB4MDAwMDAwMDApOwoKICAgIC8qIHVubWFzayBQQ0kgaW50ZXJydXB0cyB3
 ZSB3YW50ICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3JlczEsIDB4MDFkNWMs
 IDB4MDA3ZmZmZmYpOwoKICAgIC8qIHVubWFzayBob3N0IGNvbnRyb2xsZXIg
 aW50ZXJydXB0cyB3ZSB3YW50ICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3Jl
 czEsIDB4MDFkNjQsIDB4MDAwMDAwZmYvKkhDMCovIHwgMHgwMDAxZmUwMC8q
 SEMxKi8gfAoJICAgICAvKigxPDwxOSkgfCAoMTw8MjApIHwgKDE8PDIxKSB8
 Ki8oMTw8MjIpIHwgKDE8PDI0KSB8ICgweDdmIDw8IDI1KSk7CgogICAgLyog
 ZW5hYmxlIFBDSSBpbnRlcnJ1cHQgKi8KICAgIHBjaV93cml0ZV9jb25maWco
 ZGV2LCBQQ0lSX0NPTU1BTkQsCgkJICAgICBwY2lfcmVhZF9jb25maWcoZGV2
 LCBQQ0lSX0NPTU1BTkQsIDIpICYgfjB4MDQwMCwgMik7CiAgICByZXR1cm4g
 MDsKfQoKc3RhdGljIGludAphdGFfbWFydmVsbF9hbGxvY2F0ZShkZXZpY2Vf
 dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIg
 PSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwog
 ICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2KTsKICAgIGJ1c19hZGRyX3Qgd29yayA9IGNoLT5kbWEtPndvcmtfYnVz
 OwogICAgaW50IGk7CgogICAgLyogY2xlYXIgd29yayBhcmVhICovCiAgICBi
 emVybyhjaC0+ZG1hLT53b3JrLCAxMDI0KzI1Nik7CgogICAgLyogc2V0IGxl
 Z2FjeSBBVEEgcmVzb3VyY2VzICovCiAgICBmb3IgKGkgPSBBVEFfREFUQTsg
 aSA8PSBBVEFfQ09NTUFORDsgaSsrKSB7CgljaC0+cl9pb1tpXS5yZXMgPSBj
 dGxyLT5yX3JlczE7CgljaC0+cl9pb1tpXS5vZmZzZXQgPSAweDAyMTAwICsg
 KGkgPDwgMikgKyBBVEFfTVZfRURNQV9CQVNFKGNoKTsKICAgIH0KICAgIGNo
 LT5yX2lvW0FUQV9DT05UUk9MXS5yZXMgPSBjdGxyLT5yX3JlczE7CiAgICBj
 aC0+cl9pb1tBVEFfQ09OVFJPTF0ub2Zmc2V0ID0gMHgwMjEyMCArIEFUQV9N
 Vl9FRE1BX0JBU0UoY2gpOwogICAgY2gtPnJfaW9bQVRBX0lEWF9BRERSXS5y
 ZXMgPSBjdGxyLT5yX3JlczE7CiAgICBhdGFfZGVmYXVsdF9yZWdpc3RlcnMo
 ZGV2KTsKCiAgICAvKiBzZXQgU0FUQSByZXNvdXJjZXMgKi8KICAgIHN3aXRj
 aCAoY3Rsci0+Y2hpcC0+Y2ZnMikgewogICAgY2FzZSBNVjVYWFg6CgljaC0+
 cl9pb1tBVEFfU1NUQVRVU10ucmVzID0gY3Rsci0+cl9yZXMxOwoJY2gtPnJf
 aW9bQVRBX1NTVEFUVVNdLm9mZnNldCA9ICAweDAwMTAwICsgQVRBX01WX0hP
 U1RfQkFTRShjaCk7CgljaC0+cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBjdGxy
 LT5yX3JlczE7CgljaC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQgPSAweDAw
 MTA0ICsgQVRBX01WX0hPU1RfQkFTRShjaCk7CgljaC0+cl9pb1tBVEFfU0NP
 TlRST0xdLnJlcyA9IGN0bHItPnJfcmVzMTsKCWNoLT5yX2lvW0FUQV9TQ09O
 VFJPTF0ub2Zmc2V0ID0gMHgwMDEwOCArIEFUQV9NVl9IT1NUX0JBU0UoY2gp
 OwoJYnJlYWs7CiAgICBjYXNlIE1WNlhYWDoKCWNoLT5yX2lvW0FUQV9TU1RB
 VFVTXS5yZXMgPSBjdGxyLT5yX3JlczE7CgljaC0+cl9pb1tBVEFfU1NUQVRV
 U10ub2Zmc2V0ID0gIDB4MDIzMDAgKyBBVEFfTVZfRURNQV9CQVNFKGNoKTsK
 CWNoLT5yX2lvW0FUQV9TRVJST1JdLnJlcyA9IGN0bHItPnJfcmVzMTsKCWNo
 LT5yX2lvW0FUQV9TRVJST1JdLm9mZnNldCA9IDB4MDIzMDQgKyBBVEFfTVZf
 RURNQV9CQVNFKGNoKTsKCWNoLT5yX2lvW0FUQV9TQ09OVFJPTF0ucmVzID0g
 Y3Rsci0+cl9yZXMxOwoJY2gtPnJfaW9bQVRBX1NDT05UUk9MXS5vZmZzZXQg
 PSAweDAyMzA4ICsgQVRBX01WX0VETUFfQkFTRShjaCk7CgljaC0+cl9pb1tB
 VEFfU0FDVElWRV0ucmVzID0gY3Rsci0+cl9yZXMxOwoJY2gtPnJfaW9bQVRB
 X1NBQ1RJVkVdLm9mZnNldCA9IDB4MDIzNTAgKyBBVEFfTVZfRURNQV9CQVNF
 KGNoKTsKCWJyZWFrOwogICAgfQoKICAgIGNoLT5mbGFncyB8PSBBVEFfTk9f
 U0xBVkU7CiAgICBjaC0+ZmxhZ3MgfD0gQVRBX1VTRV8xNkJJVDsgLyogWFhY
 IFNPUyBuZWVkZWQgPyAqLwogICAgYXRhX2dlbmVyaWNfaHcoZGV2KTsKICAg
 IGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0YV9tYXJ2ZWxsX2JlZ2lu
 X3RyYW5zYWN0aW9uOwogICAgY2gtPmh3LmVuZF90cmFuc2FjdGlvbiA9IGF0
 YV9tYXJ2ZWxsX2VuZF90cmFuc2FjdGlvbjsKICAgIGNoLT5ody5zdGF0dXMg
 PSBhdGFfbWFydmVsbF9zdGF0dXM7CgogICAgLyogZGlzYWJsZSB0aGUgRURN
 QSBtYWNoaW5lcnkgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMSwgMHgw
 MjAyOCArIEFUQV9NVl9FRE1BX0JBU0UoY2gpLCAweDAwMDAwMDAyKTsKICAg
 IERFTEFZKDEwMDAwMCk7ICAgICAgIC8qIFNPUyBzaG91bGQgcG9sbCBmb3Ig
 ZGlzYWJsZWQgKi8KCiAgICAvKiBzZXQgY29uZmlndXJhdGlvbiB0byBub24t
 cXVldWVkIDEyOGIgcmVhZCB0cmFuc2ZlcnMgc3RvcCBvbiBlcnJvciAqLwog
 ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDAwICsgQVRBX01WX0VE
 TUFfQkFTRShjaCksICgxPDwxMSkgfCAoMTw8MTMpKTsKCiAgICAvKiByZXF1
 ZXN0IHF1ZXVlIGJhc2UgaGlnaCAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9y
 ZXMxLCAweDAyMDEwICsgQVRBX01WX0VETUFfQkFTRShjaCksICh3b3JrID4+
 IDE2KSA+PiAxNik7CgogICAgLyogcmVxdWVzdCBxdWV1ZSBpbiBwdHIgKi8K
 ICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMSwgMHgwMjAxNCArIEFUQV9NVl9F
 RE1BX0JBU0UoY2gpLCB3b3JrICYgMHhmZmZmZmZmZik7CgogICAgLyogcmVx
 dWVzdCBxdWV1ZSBvdXQgcHRyICovCiAgICBBVEFfT1VUTChjdGxyLT5yX3Jl
 czEsIDB4MDIwMTggKyBBVEFfTVZfRURNQV9CQVNFKGNoKSwgMHgwKTsKCiAg
 ICAvKiByZXNwb25zZSBxdWV1ZSBiYXNlIGhpZ2ggKi8KICAgIHdvcmsgKz0g
 MTAyNDsKICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMSwgMHgwMjAxYyArIEFU
 QV9NVl9FRE1BX0JBU0UoY2gpLCAod29yayA+PiAxNikgPj4gMTYpOwoKICAg
 IC8qIHJlc3BvbnNlIHF1ZXVlIGluIHB0ciAqLwogICAgQVRBX09VVEwoY3Rs
 ci0+cl9yZXMxLCAweDAyMDIwICsgQVRBX01WX0VETUFfQkFTRShjaCksIDB4
 MCk7CgogICAgLyogcmVzcG9uc2UgcXVldWUgb3V0IHB0ciAqLwogICAgQVRB
 X09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDI0ICsgQVRBX01WX0VETUFfQkFT
 RShjaCksIHdvcmsgJiAweGZmZmZmZmZmKTsKCiAgICAvKiBjbGVhciBTQVRB
 IGVycm9yIHJlZ2lzdGVyICovCiAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9T
 RVJST1IsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0VSUk9SKSk7CgogICAgLyog
 Y2xlYXIgYW55IG91dHN0YW5kaW5nIGVycm9yIGludGVycnVwdHMgKi8KICAg
 IEFUQV9PVVRMKGN0bHItPnJfcmVzMSwgMHgwMjAwOCArIEFUQV9NVl9FRE1B
 X0JBU0UoY2gpLCAweDApOwoKICAgIC8qIHVubWFzayBhbGwgZXJyb3IgaW50
 ZXJydXB0cyAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDBj
 ICsgQVRBX01WX0VETUFfQkFTRShjaCksIH4weDApOwogICAgCiAgICAvKiBl
 bmFibGUgRURNQSBtYWNoaW5lcnkgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMSwgMHgwMjAyOCArIEFUQV9NVl9FRE1BX0JBU0UoY2gpLCAweDAwMDAw
 MDAxKTsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9tYXJ2ZWxs
 X3N0YXR1cyhkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2Nv
 bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRf
 cGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRl
 dmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHVfaW50MzJfdCBjYXVzZSA9IEFU
 QV9JTkwoY3Rsci0+cl9yZXMxLCAweDAxZDYwKTsKICAgIGludCBzaGlmdCA9
 IChjaC0+dW5pdCA8PCAxKSArIChjaC0+dW5pdCA+IDMpOwoKICAgIC8qIGRv
 IHdlIGhhdmUgYW55IGVycm9ycyBmbGFnZ2VkID8gKi8KICAgIGlmIChjYXVz
 ZSAmICgxIDw8IHNoaWZ0KSkgewoJc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sg
 KnRwOwoJdV9pbnQzMl90IGVycm9yID0gCgkgICAgQVRBX0lOTChjdGxyLT5y
 X3JlczEsIDB4MDIwMDggKyBBVEFfTVZfRURNQV9CQVNFKGNoKSk7CgoJLyog
 Y2hlY2sgZm9yIGFuZCBoYW5kbGUgZGlzY29ubmVjdCBldmVudHMgKi8KCWlm
 ICgoZXJyb3IgJiAweDAwMDAwMDA4KSAmJgoJICAgICh0cCA9IChzdHJ1Y3Qg
 YXRhX2Nvbm5lY3RfdGFzayAqKQoJCSAgbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
 YXRhX2Nvbm5lY3RfdGFzayksCgkJCSBNX0FUQSwgTV9OT1dBSVQgfCBNX1pF
 Uk8pKSkgewoKCSAgICBpZiAoYm9vdHZlcmJvc2UpCgkJZGV2aWNlX3ByaW50
 ZihjaC0+ZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRcbiIpOwoJICAgIHRw
 LT5hY3Rpb24gPSBBVEFfQ19ERVRBQ0g7CgkgICAgdHAtPmRldiA9IGNoLT5k
 ZXY7CgkgICAgVEFTS19JTklUKCZ0cC0+dGFzaywgMCwgYXRhX3NhdGFfcGh5
 X2V2ZW50LCB0cCk7CgkgICAgdGFza3F1ZXVlX2VucXVldWUodGFza3F1ZXVl
 X3RocmVhZCwgJnRwLT50YXNrKTsKCX0KCgkvKiBjaGVjayBmb3IgYW5kIGhh
 bmRsZSBjb25uZWN0IGV2ZW50cyAqLwoJaWYgKChlcnJvciAmIDB4MDAwMDAw
 MTApICYmCgkgICAgKHRwID0gKHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICop
 CgkJICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFfY29ubmVjdF90YXNrKSwK
 CQkJIE1fQVRBLCBNX05PV0FJVCB8IE1fWkVSTykpKSB7CgoJICAgIGlmIChi
 b290dmVyYm9zZSkKCQlkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJDT05ORUNU
 IHJlcXVlc3RlZFxuIik7CgkgICAgdHAtPmFjdGlvbiA9IEFUQV9DX0FUVEFD
 SDsKCSAgICB0cC0+ZGV2ID0gY2gtPmRldjsKCSAgICBUQVNLX0lOSVQoJnRw
 LT50YXNrLCAwLCBhdGFfc2F0YV9waHlfZXZlbnQsIHRwKTsKCSAgICB0YXNr
 cXVldWVfZW5xdWV1ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwoJ
 fQoKCS8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KCUFUQV9JRFhf
 T1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gsIEFUQV9TRVJS
 T1IpKTsKCgkvKiBjbGVhciBhbnkgb3V0c3RhbmRpbmcgZXJyb3IgaW50ZXJy
 dXB0cyAqLwoJQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDA4ICsgQVRB
 X01WX0VETUFfQkFTRShjaCksIDB4MCk7CiAgICB9CgogICAgLyogZG8gd2Ug
 aGF2ZSBhbnkgZGV2aWNlIGFjdGlvbiA/ICovCiAgICByZXR1cm4gKGNhdXNl
 ICYgKDIgPDwgc2hpZnQpKTsKfQoKLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBB
 VEEgY2hhbm5lbCBsb2NrZWQgYW5kIHN0YXRlX210eCBoZWxkICovCnN0YXRp
 YyBpbnQKYXRhX21hcnZlbGxfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0
 YV9yZXF1ZXN0ICpyZXF1ZXN0KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250
 cm9sbGVyICpjdGxyPWRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQocmVx
 dWVzdC0+ZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2
 aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYp
 KTsKICAgIHVfaW50MzJfdCByZXFfaW47CiAgICB1X2ludDhfdCAqYnl0ZXA7
 CiAgICB1X2ludDE2X3QgKndvcmRwOwogICAgdV9pbnQzMl90ICpxdWFkcDsK
 ICAgIGludCBpLCB0YWcgPSAweDA3OwogICAgaW50IGR1bW15LCBlcnJvciwg
 c2xvdDsKCiAgICAvKiBvbmx5IERNQSBSL1cgZ29lcyB0aHJvdWdoIHRoZSBF
 TURBIG1hY2hpbmUgKi8KICAgIGlmIChyZXF1ZXN0LT51LmF0YS5jb21tYW5k
 ICE9IEFUQV9SRUFEX0RNQSAmJgoJcmVxdWVzdC0+dS5hdGEuY29tbWFuZCAh
 PSBBVEFfV1JJVEVfRE1BKSB7CgoJLyogZGlzYWJsZSB0aGUgRURNQSBtYWNo
 aW5lcnkgKi8KCWlmIChBVEFfSU5MKGN0bHItPnJfcmVzMSwgMHgwMjAyOCAr
 IEFUQV9NVl9FRE1BX0JBU0UoY2gpKSAmIDB4MDAwMDAwMDEpCgkgICAgQVRB
 X09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDI4ICsgQVRBX01WX0VETUFfQkFT
 RShjaCksIDB4MDAwMDAwMDIpOwoJcmV0dXJuIGF0YV9iZWdpbl90cmFuc2Fj
 dGlvbihyZXF1ZXN0KTsKICAgIH0KCiAgICAvKiBjaGVjayBmb3IgNDggYml0
 IGFjY2VzcyBhbmQgY29udmVydCBpZiBuZWVkZWQgKi8KICAgIGF0YV9tb2Rp
 ZnlfaWZfNDhiaXQocmVxdWVzdCk7CgogICAgLyogY2hlY2sgc2FuaXR5LCBz
 ZXR1cCBTRyBsaXN0IGFuZCBETUEgZW5naW5lICovCiAgICBpZiAoKGVycm9y
 ID0gY2gtPmRtYS0+bG9hZChjaC0+ZGV2LCByZXF1ZXN0LT5kYXRhLCByZXF1
 ZXN0LT5ieXRlY291bnQsCgkJCSAgICAgICByZXF1ZXN0LT5mbGFncyAmIEFU
 QV9SX1JFQUQsIGNoLT5kbWEtPnNnLAoJCQkgICAgICAgJmR1bW15KSkpIHsK
 CWRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2LCAic2V0dGluZyB1cCBETUEg
 ZmFpbGVkXG4iKTsKCXJlcXVlc3QtPnJlc3VsdCA9IGVycm9yOwoJcmV0dXJu
 IEFUQV9PUF9GSU5JU0hFRDsKICAgIH0KCiAgICAvKiBnZXQgbmV4dCBmcmVl
 IHJlcXVlc3QgcXVldWUgc2xvdCAqLwogICAgcmVxX2luID0gQVRBX0lOTChj
 dGxyLT5yX3JlczEsIDB4MDIwMTQgKyBBVEFfTVZfRURNQV9CQVNFKGNoKSk7
 CiAgICBzbG90ID0gKCgocmVxX2luICYgfjB4ZmZmZmZjMDApID4+IDUpICsg
 MCkgJiAweDFmOwogICAgYnl0ZXAgPSAodV9pbnQ4X3QgKikoY2gtPmRtYS0+
 d29yayk7CiAgICBieXRlcCArPSAoc2xvdCA8PCA1KTsKICAgIHdvcmRwID0g
 KHVfaW50MTZfdCAqKWJ5dGVwOwogICAgcXVhZHAgPSAodV9pbnQzMl90ICop
 Ynl0ZXA7CgogICAgLyogZmlsbCBpbiB0aGlzIHJlcXVlc3QgKi8KICAgIHF1
 YWRwWzBdID0gKGxvbmcpY2gtPmRtYS0+c2dfYnVzICYgMHhmZmZmZmZmZjsK
 ICAgIHF1YWRwWzFdID0gKGNoLT5kbWEtPnNnX2J1cyAmIDB4ZmZmZmZmZmYw
 MDAwMDAwMHVsbCkgPj4gMzI7CiAgICB3b3JkcFs0XSA9IChyZXF1ZXN0LT5m
 bGFncyAmIEFUQV9SX1JFQUQgPyAweDAxIDogMHgwMCkgfCAodGFnPDwxKTsK
 CiAgICBpID0gMTA7CiAgICBieXRlcFtpKytdID0gKHJlcXVlc3QtPnUuYXRh
 LmNvdW50ID4+IDgpICYgMHhmZjsKICAgIGJ5dGVwW2krK10gPSAweDEwIHwg
 QVRBX0NPVU5UOwogICAgYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmNv
 dW50ICYgMHhmZjsKICAgIGJ5dGVwW2krK10gPSAweDEwIHwgQVRBX0NPVU5U
 OwoKICAgIGJ5dGVwW2krK10gPSAocmVxdWVzdC0+dS5hdGEubGJhID4+IDI0
 KSAmIDB4ZmY7CiAgICBieXRlcFtpKytdID0gMHgxMCB8IEFUQV9TRUNUT1I7
 CiAgICBieXRlcFtpKytdID0gcmVxdWVzdC0+dS5hdGEubGJhICYgMHhmZjsK
 ICAgIGJ5dGVwW2krK10gPSAweDEwIHwgQVRBX1NFQ1RPUjsKCiAgICBieXRl
 cFtpKytdID0gKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAzMikgJiAweGZmOwog
 ICAgYnl0ZXBbaSsrXSA9IDB4MTAgfCBBVEFfQ1lMX0xTQjsKICAgIGJ5dGVw
 W2krK10gPSAocmVxdWVzdC0+dS5hdGEubGJhID4+IDgpICYgMHhmZjsKICAg
 IGJ5dGVwW2krK10gPSAweDEwIHwgQVRBX0NZTF9MU0I7CgogICAgYnl0ZXBb
 aSsrXSA9IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gNDApICYgMHhmZjsKICAg
 IGJ5dGVwW2krK10gPSAweDEwIHwgQVRBX0NZTF9NU0I7CiAgICBieXRlcFtp
 KytdID0gKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAxNikgJiAweGZmOwogICAg
 Ynl0ZXBbaSsrXSA9IDB4MTAgfCBBVEFfQ1lMX01TQjsKCiAgICBieXRlcFtp
 KytdID0gQVRBX0RfTEJBIHwgQVRBX0RfSUJNIHwgKChyZXF1ZXN0LT51LmF0
 YS5sYmEgPj4gMjQpICYgMHhmKTsKICAgIGJ5dGVwW2krK10gPSAweDEwIHwg
 QVRBX0RSSVZFOwoKICAgIGJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5j
 b21tYW5kOwogICAgYnl0ZXBbaSsrXSA9IDB4OTAgfCBBVEFfQ09NTUFORDsK
 CiAgICAvKiBlbmFibGUgRURNQSBtYWNoaW5lcnkgaWYgbmVlZGVkICovCiAg
 ICBpZiAoIShBVEFfSU5MKGN0bHItPnJfcmVzMSwgMHgwMjAyOCArIEFUQV9N
 Vl9FRE1BX0JBU0UoY2gpKSAmIDB4MDAwMDAwMDEpKSB7CglBVEFfT1VUTChj
 dGxyLT5yX3JlczEsIDB4MDIwMjggKyBBVEFfTVZfRURNQV9CQVNFKGNoKSwg
 MHgwMDAwMDAwMSk7Cgl3aGlsZSAoIShBVEFfSU5MKGN0bHItPnJfcmVzMSwK
 CQkJIDB4MDIwMjggKyBBVEFfTVZfRURNQV9CQVNFKGNoKSkgJiAweDAwMDAw
 MDAxKSkKCSAgICBERUxBWSgxMCk7CiAgICB9CgogICAgLyogdGVsbCBFRE1B
 IGl0IGhhcyBhIG5ldyByZXF1ZXN0ICovCiAgICBzbG90ID0gKCgocmVxX2lu
 ICYgfjB4ZmZmZmZjMDApID4+IDUpICsgMSkgJiAweDFmOwogICAgcmVxX2lu
 ICY9IDB4ZmZmZmZjMDA7CiAgICByZXFfaW4gKz0gKHNsb3QgPDwgNSk7CiAg
 ICBBVEFfT1VUTChjdGxyLT5yX3JlczEsIDB4MDIwMTQgKyBBVEFfTVZfRURN
 QV9CQVNFKGNoKSwgcmVxX2luKTsKICAgCiAgICByZXR1cm4gQVRBX09QX0NP
 TlRJTlVFUzsKfQoKLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBBVEEgY2hhbm5l
 bCBsb2NrZWQgYW5kIHN0YXRlX210eCBoZWxkICovCnN0YXRpYyBpbnQKYXRh
 X21hcnZlbGxfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAq
 cmVxdWVzdCkKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rs
 cj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikp
 OwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29m
 dGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CiAgICBpbnQg
 b2Zmc2V0ID0gKGNoLT51bml0ID4gMyA/IDB4MzAwMTQgOiAweDIwMDE0KTsK
 ICAgIHVfaW50MzJfdCBpY3IgPSBBVEFfSU5MKGN0bHItPnJfcmVzMSwgb2Zm
 c2V0KTsKICAgIGludCByZXM7CgogICAgLyogRURNQSBpbnRlcnJ1cHQgKi8K
 ICAgIGlmICgoaWNyICYgKDB4MDAwMSA8PCAoY2gtPnVuaXQgJiAzKSkpKSB7
 CglzdHJ1Y3QgYXRhX21hcnZlbGxfcmVzcG9uc2UgKnJlc3BvbnNlOwoJdV9p
 bnQzMl90IHJzcF9pbiwgcnNwX291dDsKCWludCBzbG90OwoKCS8qIHVubG9h
 ZCBTRyBsaXN0ICovCgljaC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CgoJLyog
 c3RvcCB0aW1lb3V0ICovCgljYWxsb3V0X3N0b3AoJnJlcXVlc3QtPmNhbGxv
 dXQpOwoKCS8qIGdldCByZXNwb25zZSBwdHIncyAqLwoJcnNwX2luID0gQVRB
 X0lOTChjdGxyLT5yX3JlczEsIDB4MDIwMjAgKyBBVEFfTVZfRURNQV9CQVNF
 KGNoKSk7Cglyc3Bfb3V0ID0gQVRBX0lOTChjdGxyLT5yX3JlczEsIDB4MDIw
 MjQgKyBBVEFfTVZfRURNQV9CQVNFKGNoKSk7CglzbG90ID0gKCgocnNwX2lu
 ICYgfjB4ZmZmZmZmMDApID4+IDMpKSAmIDB4MWY7Cglyc3Bfb3V0ICY9IDB4
 ZmZmZmZmMDA7Cglyc3Bfb3V0ICs9IChzbG90IDw8IDMpOwoJcmVzcG9uc2Ug
 PSAoc3RydWN0IGF0YV9tYXJ2ZWxsX3Jlc3BvbnNlICopCgkJICAgKGNoLT5k
 bWEtPndvcmsgKyAxMDI0ICsgKHNsb3QgPDwgMykpOwoKCS8qIHJlY29yZCBz
 dGF0dXMgZm9yIHRoaXMgcmVxdWVzdCAqLwoJcmVxdWVzdC0+c3RhdHVzID0g
 cmVzcG9uc2UtPmRldl9zdGF0dXM7CglyZXF1ZXN0LT5lcnJvciA9IDA7IAoK
 CS8qIGFjayByZXNwb25zZSAqLwoJQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAw
 eDAyMDI0ICsgQVRBX01WX0VETUFfQkFTRShjaCksIHJzcF9vdXQpOwoKCS8q
 IHVwZGF0ZSBwcm9ncmVzcyAqLwoJaWYgKCEocmVxdWVzdC0+c3RhdHVzICYg
 QVRBX1NfRVJST1IpICYmCgkgICAgIShyZXF1ZXN0LT5mbGFncyAmIEFUQV9S
 X1RJTUVPVVQpKQoJICAgIHJlcXVlc3QtPmRvbmVjb3VudCA9IHJlcXVlc3Qt
 PmJ5dGVjb3VudDsKCXJlcyA9IEFUQV9PUF9GSU5JU0hFRDsKICAgIH0KCiAg
 ICAvKiBsZWdhY3kgQVRBIGludGVycnVwdCAqLwogICAgZWxzZSB7CglyZXMg
 PSBhdGFfZW5kX3RyYW5zYWN0aW9uKHJlcXVlc3QpOwogICAgfQoKICAgIC8q
 IGFjayBpbnRlcnJ1cHQgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMSwg
 b2Zmc2V0LCB+KGljciAmICgweDAxMDEgPDwgKGNoLT51bml0ICYgMykpKSk7
 CiAgICByZXR1cm4gcmVzOwp9CgpzdGF0aWMgdm9pZAphdGFfbWFydmVsbF9y
 ZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy
 b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFy
 ZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsKCiAgICAvKiBkaXNhYmxlIHRoZSBFRE1BIG1h
 Y2hpbmVyeSAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDI4
 ICsgQVRBX01WX0VETUFfQkFTRShjaCksIDB4MDAwMDAwMDIpOwogICAgd2hp
 bGUgKChBVEFfSU5MKGN0bHItPnJfcmVzMSwgMHgwMjAyOCArIEFUQV9NVl9F
 RE1BX0JBU0UoY2gpKSAmIDB4MDAwMDAwMDEpKQoJREVMQVkoMTApOwoKICAg
 IC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KICAgIEFUQV9JRFhf
 T1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gsIEFUQV9TRVJS
 T1IpKTsKCiAgICAvKiBjbGVhciBhbnkgb3V0c3RhbmRpbmcgZXJyb3IgaW50
 ZXJydXB0cyAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMxLCAweDAyMDA4
 ICsgQVRBX01WX0VETUFfQkFTRShjaCksIDB4MCk7CgogICAgLyogdW5tYXNr
 IGFsbCBlcnJvciBpbnRlcnJ1cHRzICovCiAgICBBVEFfT1VUTChjdGxyLT5y
 X3JlczEsIDB4MDIwMGMgKyBBVEFfTVZfRURNQV9CQVNFKGNoKSwgfjB4MCk7
 CgogICAgLyogZW5hYmxlIGNoYW5uZWwgYW5kIHRlc3QgZm9yIGRldmljZXMg
 Ki8KICAgIGF0YV9zYXRhX3BoeV9lbmFibGUoY2gpOwoKICAgIC8qIGVuYWJs
 ZSBFRE1BIG1hY2hpbmVyeSAqLwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMx
 LCAweDAyMDI4ICsgQVRBX01WX0VETUFfQkFTRShjaCksIDB4MDAwMDAwMDEp
 Owp9CgpzdGF0aWMgdm9pZAphdGFfbWFydmVsbF9kbWFzZXRwcmQodm9pZCAq
 eHNjLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQg
 ZXJyb3IpCnsKICAgIHN0cnVjdCBhdGFfZG1hc2V0cHJkX2FyZ3MgKmFyZ3Mg
 PSB4c2M7CiAgICBzdHJ1Y3QgYXRhX21hcnZlbGxfZG1hX3ByZGVudHJ5ICpw
 cmQgPSBhcmdzLT5kbWF0YWI7CiAgICBpbnQgaTsKCiAgICBpZiAoKGFyZ3Mt
 PmVycm9yID0gZXJyb3IpKQoJcmV0dXJuOwoKICAgIGZvciAoaSA9IDA7IGkg
 PCBuc2VnczsgaSsrKSB7CglwcmRbaV0uYWRkcmxvID0gaHRvbGUzMihzZWdz
 W2ldLmRzX2FkZHIpOwoJcHJkW2ldLmFkZHJoaSA9IDA7CglwcmRbaV0uY291
 bnQgPSBodG9sZTMyKHNlZ3NbaV0uZHNfbGVuKTsKICAgIH0KICAgIHByZFtp
 IC0gMV0uY291bnQgfD0gaHRvbGUzMihBVEFfRE1BX0VPVCk7Cn0KCnN0YXRp
 YyB2b2lkCmF0YV9tYXJ2ZWxsX2RtYWluaXQoZGV2aWNlX3QgZGV2KQp7CiAg
 ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXYpOwoKICAgIGF0YV9kbWFpbml0KGRldik7CiAgICBpZiAoY2gtPmRtYSkg
 ewoJLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVyZSAq
 LwoJY2gtPmRtYS0+c2V0cHJkID0gYXRhX21hcnZlbGxfZG1hc2V0cHJkOwog
 ICAgfQp9CgoKLyoKICogTmF0aW9uYWwgY2hpcHNldCBzdXBwb3J0IGZ1bmN0
 aW9ucwogKi8KaW50CmF0YV9uYXRpb25hbF9pZGVudChkZXZpY2VfdCBkZXYp
 CnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyogdGhpcyBjaGlwIGlzIGEgY2xv
 bmUgb2YgdGhlIEN5cml4IGNoaXAsIGJ1Z3MgYW5kIGFsbCAqLwogICAgaWYg
 KHBjaV9nZXRfZGV2aWQoZGV2KSA9PSBBVEFfU0MxMTAwKSB7CglkZXZpY2Vf
 c2V0X2Rlc2MoZGV2LCAiTmF0aW9uYWwgR2VvZGUgU0MxMTAwIEFUQTMzIGNv
 bnRyb2xsZXIiKTsKCWN0bHItPmNoaXBpbml0ID0gYXRhX25hdGlvbmFsX2No
 aXBpbml0OwoJcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gRU5YSU87Cn0K
 ICAgIApzdGF0aWMgaW50CmF0YV9uYXRpb25hbF9jaGlwaW5pdChkZXZpY2Vf
 dCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIg
 PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICAKICAgIGlmIChhdGFfc2V0
 dXBfaW50ZXJydXB0KGRldikpCglyZXR1cm4gRU5YSU87CgkJICAgIAogICAg
 Y3Rsci0+c2V0bW9kZSA9IGF0YV9uYXRpb25hbF9zZXRtb2RlOwogICAgcmV0
 dXJuIDA7Cn0KCnN0YXRpYyB2b2lkCmF0YV9uYXRpb25hbF9zZXRtb2RlKGRl
 dmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJlbnQg
 PSBHUkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpj
 aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7
 CiAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXYpOwogICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsg
 QVRBX0RFVihhdGFkZXYtPnVuaXQpOwogICAgdV9pbnQzMl90IHBpb3RpbWlu
 Z1tdID0KCXsgMHg5MTcyZDEzMiwgMHgyMTcxNzEyMSwgMHgwMDgwMzAyMCwg
 MHgyMDEwMjAxMCwgMHgwMDEwMDAxMCwKCSAgMHgwMDgwMzAyMCwgMHgyMDEw
 MjAxMCwgMHgwMDEwMDAxMCwKCSAgMHgwMDEwMDAxMCwgMHgwMDEwMDAxMCwg
 MHgwMDEwMDAxMCB9OwogICAgdV9pbnQzMl90IGRtYXRpbWluZ1tdID0geyAw
 eDgwMDc3NzcxLCAweDgwMDEyMTIxLCAweDgwMDAyMDIwIH07CiAgICB1X2lu
 dDMyX3QgdWRtYXRpbWluZ1tdID0geyAweDgwOTIxMjUwLCAweDgwOTExMTQw
 LCAweDgwOTExMDMwIH07CiAgICBpbnQgZXJyb3I7CgogICAgY2gtPmRtYS0+
 YWxpZ25tZW50ID0gMTY7CiAgICBjaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2
 ICogREVWX0JTSVpFOwoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYs
 IG1vZGUsIEFUQV9VRE1BMik7CgogICAgZXJyb3IgPSBhdGFfY29udHJvbGNt
 ZChkZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1v
 ZGUpOwoKICAgIGlmIChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoZGV2
 LCAiJXMgc2V0dGluZyAlcyBvbiBOYXRpb25hbCBjaGlwXG4iLAoJCSAgICAg
 IChlcnJvcikgPyAiZmFpbGVkIiA6ICJzdWNjZXNzIiwgYXRhX21vZGUyc3Ry
 KG1vZGUpKTsKICAgIGlmICghZXJyb3IpIHsKCWlmIChtb2RlID49IEFUQV9V
 RE1BMCkgewoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0NCAr
 IChkZXZubyA8PCAzKSwKCQkJICAgICB1ZG1hdGltaW5nW21vZGUgJiBBVEFf
 TU9ERV9NQVNLXSwgNCk7Cgl9CgllbHNlIGlmIChtb2RlID49IEFUQV9XRE1B
 MCkgewoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0NCArIChk
 ZXZubyA8PCAzKSwKCQkJICAgICBkbWF0aW1pbmdbbW9kZSAmIEFUQV9NT0RF
 X01BU0tdLCA0KTsKCX0KCWVsc2UgewoJICAgIHBjaV93cml0ZV9jb25maWco
 Z3BhcmVudCwgMHg0NCArIChkZXZubyA8PCAzKSwKCQkJICAgICBwY2lfcmVh
 ZF9jb25maWcoZ3BhcmVudCwgMHg0NCArIChkZXZubyA8PCAzKSwgNCkgfAoJ
 CQkgICAgIDB4ODAwMDAwMDAsIDQpOwoJfQoJcGNpX3dyaXRlX2NvbmZpZyhn
 cGFyZW50LCAweDQwICsgKGRldm5vIDw8IDMpLAoJCQkgcGlvdGltaW5nW2F0
 YV9tb2RlMmlkeChtb2RlKV0sIDQpOwoJYXRhZGV2LT5tb2RlID0gbW9kZTsK
 ICAgIH0KfQoKCi8qCiAqIG5WaWRpYSBjaGlwc2V0IHN1cHBvcnQgZnVuY3Rp
 b25zCiAqLwppbnQKYXRhX252aWRpYV9pZGVudChkZXZpY2VfdCBkZXYpCnsK
 ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldik7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsK
 ICAgIHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sg
 QVRBX05GT1JDRTEsICAgICAgICAgMCwgQU1ETlZJRElBLCBOVklESUEsICBB
 VEFfVURNQTUsICJuRm9yY2UiIH0sCiAgICAgeyBBVEFfTkZPUkNFMiwgICAg
 ICAgICAwLCBBTUROVklESUEsIE5WSURJQSwgIEFUQV9VRE1BNiwgIm5Gb3Jj
 ZTIiIH0sCiAgICAgeyBBVEFfTkZPUkNFMl9QUk8sICAgICAwLCBBTUROVklE
 SUEsIE5WSURJQSwgIEFUQV9VRE1BNiwgIm5Gb3JjZTIgUHJvIiB9LAogICAg
 IHsgQVRBX05GT1JDRTJfUFJPX1MxLCAgMCwgMCwgICAgICAgICAwLCAgICAg
 ICBBVEFfU0ExNTAsICJuRm9yY2UyIFBybyIgfSwKICAgICB7IEFUQV9ORk9S
 Q0UzLCAgICAgICAgIDAsIEFNRE5WSURJQSwgTlZJRElBLCAgQVRBX1VETUE2
 LCAibkZvcmNlMyIgfSwKICAgICB7IEFUQV9ORk9SQ0UzX1BSTywgICAgIDAs
 IEFNRE5WSURJQSwgTlZJRElBLCAgQVRBX1VETUE2LCAibkZvcmNlMyBQcm8i
 IH0sCiAgICAgeyBBVEFfTkZPUkNFM19QUk9fUzEsICAwLCAwLCAgICAgICAg
 IDAsICAgICAgIEFUQV9TQTE1MCwgIm5Gb3JjZTMgUHJvIiB9LAogICAgIHsg
 QVRBX05GT1JDRTNfUFJPX1MyLCAgMCwgMCwgICAgICAgICAwLCAgICAgICBB
 VEFfU0ExNTAsICJuRm9yY2UzIFBybyIgfSwKICAgICB7IEFUQV9ORk9SQ0Vf
 TUNQMDQsICAgIDAsIEFNRE5WSURJQSwgTlZJRElBLCAgQVRBX1VETUE2LCAi
 bkZvcmNlIE1DUCIgfSwKICAgICB7IEFUQV9ORk9SQ0VfTUNQMDRfUzEsIDAs
 IDAsICAgICAgICAgTlY0LCAgICAgQVRBX1NBMTUwLCAibkZvcmNlIE1DUCIg
 fSwKICAgICB7IEFUQV9ORk9SQ0VfTUNQMDRfUzIsIDAsIDAsICAgICAgICAg
 TlY0LCAgICAgQVRBX1NBMTUwLCAibkZvcmNlIE1DUCIgfSwKICAgICB7IEFU
 QV9ORk9SQ0VfQ0s4MDQsICAgIDAsIEFNRE5WSURJQSwgTlZJRElBLCAgQVRB
 X1VETUE2LCAibkZvcmNlIENLODA0IiB9LAogICAgIHsgQVRBX05GT1JDRV9D
 SzgwNF9TMSwgMCwgMCwgICAgICAgICBOVjQsICAgICBBVEFfU0EzMDAsICJu
 Rm9yY2UgQ0s4MDQiIH0sCiAgICAgeyBBVEFfTkZPUkNFX0NLODA0X1MyLCAw
 LCAwLCAgICAgICAgIE5WNCwgICAgIEFUQV9TQTMwMCwgIm5Gb3JjZSBDSzgw
 NCIgfSwKICAgICB7IEFUQV9ORk9SQ0VfTUNQNTEsICAgIDAsIEFNRE5WSURJ
 QSwgTlZJRElBLCAgQVRBX1VETUE2LCAibkZvcmNlIE1DUDUxIiB9LAogICAg
 IHsgQVRBX05GT1JDRV9NQ1A1MV9TMSwgMCwgMCwgICAgICAgICBOVjR8TlZR
 LCBBVEFfU0EzMDAsICJuRm9yY2UgTUNQNTEiIH0sCiAgICAgeyBBVEFfTkZP
 UkNFX01DUDUxX1MyLCAwLCAwLCAgICAgICAgIE5WNHxOVlEsIEFUQV9TQTMw
 MCwgIm5Gb3JjZSBNQ1A1MSIgfSwKICAgICB7IEFUQV9ORk9SQ0VfTUNQNTUs
 ICAgIDAsIEFNRE5WSURJQSwgTlZJRElBLCAgQVRBX1VETUE2LCAibkZvcmNl
 IE1DUDU1IiB9LAogICAgIHsgQVRBX05GT1JDRV9NQ1A1NV9TMSwgMCwgMCwg
 ICAgICAgICBOVjR8TlZRLCBBVEFfU0EzMDAsICJuRm9yY2UgTUNQNTUiIH0s
 CiAgICAgeyBBVEFfTkZPUkNFX01DUDU1X1MyLCAwLCAwLCAgICAgICAgIE5W
 NHxOVlEsIEFUQV9TQTMwMCwgIm5Gb3JjZSBNQ1A1NSIgfSwKICAgICB7IDAs
 IDAsIDAsIDAsIDAsIDB9fSA7CiAgICBjaGFyIGJ1ZmZlcls2NF0gOwoKICAg
 IGlmICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1
 cm4gRU5YSU87CgogICAgc3ByaW50ZihidWZmZXIsICJuVmlkaWEgJXMgJXMg
 Y29udHJvbGxlciIsCgkgICAgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4
 LT5tYXhfZG1hKSk7CiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1
 ZmZlcik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGlu
 aXQgPSBhdGFfbnZpZGlhX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0
 YXRpYyBpbnQKYXRhX252aWRpYV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsK
 ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQo
 ZGV2KSkKCXJldHVybiBFTlhJTzsKCiAgICBpZiAoY3Rsci0+Y2hpcC0+bWF4
 X2RtYSA+PSBBVEFfU0ExNTApIHsKCWlmIChwY2lfcmVhZF9jb25maWcoZGV2
 LCBQQ0lSX0JBUig1KSwgMSkgJiAxKQoJICAgIGN0bHItPnJfdHlwZTIgPSBT
 WVNfUkVTX0lPUE9SVDsKCWVsc2UKCSAgICBjdGxyLT5yX3R5cGUyID0gU1lT
 X1JFU19NRU1PUlk7CgljdGxyLT5yX3JpZDIgPSBQQ0lSX0JBUig1KTsKCWlm
 ICgoY3Rsci0+cl9yZXMyID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYs
 IGN0bHItPnJfdHlwZTIsCgkJCQkJCSAgICZjdGxyLT5yX3JpZDIsIFJGX0FD
 VElWRSkpKSB7CgkgICAgaW50IG9mZnNldCA9IGN0bHItPmNoaXAtPmNmZzIg
 JiBOVjQgPyAweDA0NDAgOiAweDAwMTA7CgoJICAgIGN0bHItPmFsbG9jYXRl
 ID0gYXRhX252aWRpYV9hbGxvY2F0ZTsKCSAgICBjdGxyLT5yZXNldCA9IGF0
 YV9udmlkaWFfcmVzZXQ7CgoJICAgIC8qIGVuYWJsZSBjb250cm9sIGFjY2Vz
 cyAqLwoJICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDUwLCBwY2lfcmVh
 ZF9jb25maWcoZGV2LCAweDUwLCAxKSB8IDB4MDQsMSk7CgoJICAgIGlmIChj
 dGxyLT5jaGlwLT5jZmcyICYgTlZRKSB7CgkJLyogY2xlYXIgaW50ZXJydXB0
 IHN0YXR1cyAqLwoJCUFUQV9PVVRMKGN0bHItPnJfcmVzMiwgb2Zmc2V0LCAw
 eDAwZmYwMGZmKTsKCgkJLyogZW5hYmxlIGRldmljZSBhbmQgUEhZIHN0YXRl
 IGNoYW5nZSBpbnRlcnJ1cHRzICovCgkJQVRBX09VVEwoY3Rsci0+cl9yZXMy
 LCBvZmZzZXQgKyA0LCAweDAwMGQwMDBkKTsKCgkJLyogZGlzYWJsZSBOQ1Eg
 c3VwcG9ydCAqLwoJCUFUQV9PVVRMKGN0bHItPnJfcmVzMiwgMHgwNDAwLAoJ
 CQkgQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4MDQwMCkgJiAweGZmZmZmZmY5
 KTsKCSAgICB9IAoJICAgIGVsc2UgewoJCS8qIGNsZWFyIGludGVycnVwdCBz
 dGF0dXMgKi8KCQlBVEFfT1VUQihjdGxyLT5yX3JlczIsIG9mZnNldCwgMHhm
 Zik7CgoJCS8qIGVuYWJsZSBkZXZpY2UgYW5kIFBIWSBzdGF0ZSBjaGFuZ2Ug
 aW50ZXJydXB0cyAqLwoJCUFUQV9PVVRCKGN0bHItPnJfcmVzMiwgb2Zmc2V0
 ICsgMSwgMHhkZCk7CgkgICAgfQoKCSAgICAvKiBlbmFibGUgUENJIGludGVy
 cnVwdCAqLwoJICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1B
 TkQsCgkJCSAgICAgcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01NQU5E
 LCAyKSAmIH4weDA0MDAsMik7CgoJfQoJY3Rsci0+c2V0bW9kZSA9IGF0YV9z
 YXRhX3NldG1vZGU7CiAgICB9CiAgICBlbHNlIHsKCS8qIGRpc2FibGUgcHJl
 ZmV0Y2gsIHBvc3R3cml0ZSAqLwoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4
 NTEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NTEsIDEpICYgMHgwZiwgMSk7
 CgljdGxyLT5zZXRtb2RlID0gYXRhX3ZpYV9mYW1pbHlfc2V0bW9kZTsKICAg
 IH0KICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9udmlkaWFfYWxs
 b2NhdGUoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250
 cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3Bh
 cmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyogc2V0dXAgdGhlIHVzdWFsIHJl
 Z2lzdGVyIG5vcm1hbCBwY2kgc3R5bGUgKi8KICAgIGlmIChhdGFfcGNpX2Fs
 bG9jYXRlKGRldikpCglyZXR1cm4gRU5YSU87CgogICAgY2gtPnJfaW9bQVRB
 X1NTVEFUVVNdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FU
 QV9TU1RBVFVTXS5vZmZzZXQgPSAoY2gtPnVuaXQgPDwgNik7CiAgICBjaC0+
 cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+
 cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQgPSAweDA0ICsgKGNoLT51bml0IDw8
 IDYpOwogICAgY2gtPnJfaW9bQVRBX1NDT05UUk9MXS5yZXMgPSBjdGxyLT5y
 X3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU0NPTlRST0xdLm9mZnNldCA9IDB4
 MDggKyAoY2gtPnVuaXQgPDwgNik7CgogICAgY2gtPmh3LnN0YXR1cyA9IGF0
 YV9udmlkaWFfc3RhdHVzOwogICAgY2gtPmZsYWdzIHw9IEFUQV9OT19TTEFW
 RTsKCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludCAKYXRhX252aWRpYV9z
 dGF0dXMoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250
 cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3Bh
 cmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp
 Y2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgb2Zmc2V0ID0gY3Rsci0+Y2hp
 cC0+Y2ZnMiAmIE5WNCA/IDB4MDQ0MCA6IDB4MDAxMDsKICAgIHN0cnVjdCBh
 dGFfY29ubmVjdF90YXNrICp0cDsKICAgIGludCBzaGlmdCA9IGNoLT51bml0
 IDw8IChjdGxyLT5jaGlwLT5jZmcyICYgTlZRID8gNCA6IDIpOwogICAgdV9p
 bnQzMl90IHN0YXR1czsKCiAgICAvKiBnZXQgYW5kIGNsZWFyIGludGVycnVw
 dCBzdGF0dXMgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYgTlZRKSB7
 CglzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgb2Zmc2V0KTsKCUFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgb2Zmc2V0LCAoMHgwZiA8PCBzaGlmdCkg
 fCAweDAwZjAwMGYwKTsKICAgIH0KICAgIGVsc2UgewoJc3RhdHVzID0gQVRB
 X0lOQihjdGxyLT5yX3JlczIsIG9mZnNldCk7CglBVEFfT1VUQihjdGxyLT5y
 X3JlczIsIG9mZnNldCwgKDB4MGYgPDwgc2hpZnQpKTsKICAgIH0KCiAgICAv
 KiBjaGVjayBmb3IgYW5kIGhhbmRsZSBjb25uZWN0IGV2ZW50cyAqLwogICAg
 aWYgKCgoc3RhdHVzICYgKDB4MGMgPDwgc2hpZnQpKSA9PSAoMHgwNCA8PCBz
 aGlmdCkpICYmCgkodHAgPSAoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgKikK
 CSAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sp
 LAoJCSAgICAgTV9BVEEsIE1fTk9XQUlUIHwgTV9aRVJPKSkpIHsKCglpZiAo
 Ym9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiQ09O
 TkVDVCByZXF1ZXN0ZWRcbiIpOwoJdHAtPmFjdGlvbiA9IEFUQV9DX0FUVEFD
 SDsKCXRwLT5kZXYgPSBjaC0+ZGV2OwoJVEFTS19JTklUKCZ0cC0+dGFzaywg
 MCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7Cgl0YXNrcXVldWVfZW5xdWV1
 ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwogICAgfQoKICAgIC8q
 IGNoZWNrIGZvciBhbmQgaGFuZGxlIGRpc2Nvbm5lY3QgZXZlbnRzICovCiAg
 ICBpZiAoKHN0YXR1cyAmICgweDA4IDw8IHNoaWZ0KSkgJiYKCSEoKHN0YXR1
 cyAmICgweDA0IDw8IHNoaWZ0KSAmJiBBVEFfSURYX0lOTChjaCwgQVRBX1NT
 VEFUVVMpKSkgJiYKCSh0cCA9IChzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAq
 KQoJICAgICAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFz
 ayksCgkJICAgTV9BVEEsIE1fTk9XQUlUIHwgTV9aRVJPKSkpIHsKCglpZiAo
 Ym9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElT
 Q09OTkVDVCByZXF1ZXN0ZWRcbiIpOwoJdHAtPmFjdGlvbiA9IEFUQV9DX0RF
 VEFDSDsKCXRwLT5kZXYgPSBjaC0+ZGV2OwoJVEFTS19JTklUKCZ0cC0+dGFz
 aywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7Cgl0YXNrcXVldWVfZW5x
 dWV1ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwogICAgfQoKICAg
 IC8qIGRvIHdlIGhhdmUgYW55IGRldmljZSBhY3Rpb24gPyAqLwogICAgcmV0
 dXJuIChzdGF0dXMgJiAoMHgwMSA8PCBzaGlmdCkpOwp9CgpzdGF0aWMgdm9p
 ZAphdGFfbnZpZGlhX3Jlc2V0KGRldmljZV90IGRldikKewogICAgc3RydWN0
 IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAg
 ICBhdGFfc2F0YV9waHlfZW5hYmxlKGNoKTsKfQoKCi8qCiAqIFByb21pc2Ug
 Y2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucwogKi8KI2RlZmluZSBBVEFfUERD
 X0FQS1RfT0ZGU0VUICAgICAweDAwMDAwMDEwIAojZGVmaW5lIEFUQV9QRENf
 SFBLVF9PRkZTRVQgICAgIDB4MDAwMDAwNDAKI2RlZmluZSBBVEFfUERDX0FT
 R19PRkZTRVQgICAgICAweDAwMDAwMDgwCiNkZWZpbmUgQVRBX1BEQ19MU0df
 T0ZGU0VUICAgICAgMHgwMDAwMDBjMAojZGVmaW5lIEFUQV9QRENfSFNHX09G
 RlNFVCAgICAgIDB4MDAwMDAxMDAKI2RlZmluZSBBVEFfUERDX0NITl9PRkZT
 RVQgICAgICAweDAwMDAwNDAwCiNkZWZpbmUgQVRBX1BEQ19CVUZfQkFTRSAg
 ICAgICAgMHgwMDQwMDAwMAojZGVmaW5lIEFUQV9QRENfQlVGX09GRlNFVCAg
 ICAgIDB4MDAxMDAwMDAKI2RlZmluZSBBVEFfUERDX01BWF9IUEtUICAgICAg
 ICA4CiNkZWZpbmUgQVRBX1BEQ19XUklURV9SRUcgICAgICAgMHgwMAojZGVm
 aW5lIEFUQV9QRENfV1JJVEVfQ1RMICAgICAgIDB4MGUKI2RlZmluZSBBVEFf
 UERDX1dSSVRFX0VORCAgICAgICAweDA4CiNkZWZpbmUgQVRBX1BEQ19XQUlU
 X05CVVNZICAgICAgMHgxMAojZGVmaW5lIEFUQV9QRENfV0FJVF9SRUFEWSAg
 ICAgIDB4MTgKI2RlZmluZSBBVEFfUERDXzFCICAgICAgICAgICAgICAweDIw
 CiNkZWZpbmUgQVRBX1BEQ18yQiAgICAgICAgICAgICAgMHg0MAoKc3RydWN0
 IGhvc3RfcGFja2V0IHsKdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgICAg
 ICBhZGRyOwogICAgVEFJTFFfRU5UUlkoaG9zdF9wYWNrZXQpICAgIGNoYWlu
 Owp9OwoKc3RydWN0IGF0YV9wcm9taXNlX3N4NCB7CiAgICBzdHJ1Y3QgbXR4
 ICAgICAgICAgICAgICAgICAgbXR4OwogICAgVEFJTFFfSEVBRCgsIGhvc3Rf
 cGFja2V0KSAgIHF1ZXVlOwogICAgaW50ICAgICAgICAgICAgICAgICAgICAg
 ICAgIGJ1c3k7Cn07CgppbnQKYXRhX3Byb21pc2VfaWRlbnQoZGV2aWNlX3Qg
 ZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0g
 ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lk
 ICppZHg7CiAgICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0K
 ICAgIHt7IEFUQV9QREMyMDI0NiwgIDAsIFBST0xELCAweDAwLCAgICBBVEFf
 VURNQTIsICJQREMyMDI0NiIgfSwKICAgICB7IEFUQV9QREMyMDI2MiwgIDAs
 IFBSTkVXLCAweDAwLCAgICBBVEFfVURNQTQsICJQREMyMDI2MiIgfSwKICAg
 ICB7IEFUQV9QREMyMDI2MywgIDAsIFBSTkVXLCAweDAwLCAgICBBVEFfVURN
 QTQsICJQREMyMDI2MyIgfSwKICAgICB7IEFUQV9QREMyMDI2NSwgIDAsIFBS
 TkVXLCAweDAwLCAgICBBVEFfVURNQTUsICJQREMyMDI2NSIgfSwKICAgICB7
 IEFUQV9QREMyMDI2NywgIDAsIFBSTkVXLCAweDAwLCAgICBBVEFfVURNQTUs
 ICJQREMyMDI2NyIgfSwKICAgICB7IEFUQV9QREMyMDI2OCwgIDAsIFBSVFgs
 ICBQUlRYNCwgICBBVEFfVURNQTUsICJQREMyMDI2OCIgfSwKICAgICB7IEFU
 QV9QREMyMDI2OSwgIDAsIFBSVFgsICAweDAwLCAgICBBVEFfVURNQTYsICJQ
 REMyMDI2OSIgfSwKICAgICB7IEFUQV9QREMyMDI3MCwgIDAsIFBSVFgsICBQ
 UlRYNCwgICBBVEFfVURNQTUsICJQREMyMDI3MCIgfSwKICAgICB7IEFUQV9Q
 REMyMDI3MSwgIDAsIFBSVFgsICAweDAwLCAgICBBVEFfVURNQTYsICJQREMy
 MDI3MSIgfSwKICAgICB7IEFUQV9QREMyMDI3NSwgIDAsIFBSVFgsICAweDAw
 LCAgICBBVEFfVURNQTYsICJQREMyMDI3NSIgfSwKICAgICB7IEFUQV9QREMy
 MDI3NiwgIDAsIFBSVFgsICBQUlNYNkssICBBVEFfVURNQTYsICJQREMyMDI3
 NiIgfSwKICAgICB7IEFUQV9QREMyMDI3NywgIDAsIFBSVFgsICAweDAwLCAg
 ICBBVEFfVURNQTYsICJQREMyMDI3NyIgfSwKICAgICB7IEFUQV9QREMyMDMx
 OCwgIDAsIFBSTUlPLCBQUlNBVEEsICBBVEFfU0ExNTAsICJQREMyMDMxOCIg
 fSwKICAgICB7IEFUQV9QREMyMDMxOSwgIDAsIFBSTUlPLCBQUlNBVEEsICBB
 VEFfU0ExNTAsICJQREMyMDMxOSIgfSwKICAgICB7IEFUQV9QREMyMDM3MSwg
 IDAsIFBSTUlPLCBQUkNNQk8sICBBVEFfU0ExNTAsICJQREMyMDM3MSIgfSwK
 ICAgICB7IEFUQV9QREMyMDM3NSwgIDAsIFBSTUlPLCBQUkNNQk8sICBBVEFf
 U0ExNTAsICJQREMyMDM3NSIgfSwKICAgICB7IEFUQV9QREMyMDM3NiwgIDAs
 IFBSTUlPLCBQUkNNQk8sICBBVEFfU0ExNTAsICJQREMyMDM3NiIgfSwKICAg
 ICB7IEFUQV9QREMyMDM3NywgIDAsIFBSTUlPLCBQUkNNQk8sICBBVEFfU0Ex
 NTAsICJQREMyMDM3NyIgfSwKICAgICB7IEFUQV9QREMyMDM3OCwgIDAsIFBS
 TUlPLCBQUkNNQk8sICBBVEFfU0ExNTAsICJQREMyMDM3OCIgfSwKICAgICB7
 IEFUQV9QREMyMDM3OSwgIDAsIFBSTUlPLCBQUkNNQk8sICBBVEFfU0ExNTAs
 ICJQREMyMDM3OSIgfSwKICAgICB7IEFUQV9QREMyMDU3MSwgIDAsIFBSTUlP
 LCBQUkNNQk8yLCBBVEFfU0ExNTAsICJQREMyMDU3MSIgfSwKICAgICB7IEFU
 QV9QREMyMDU3NSwgIDAsIFBSTUlPLCBQUkNNQk8yLCBBVEFfU0ExNTAsICJQ
 REMyMDU3NSIgfSwKICAgICB7IEFUQV9QREMyMDU3OSwgIDAsIFBSTUlPLCBQ
 UkNNQk8yLCBBVEFfU0ExNTAsICJQREMyMDU3OSIgfSwKICAgICB7IEFUQV9Q
 REMyMDc3MSwgIDAsIFBSTUlPLCBQUkNNQk8yLCBBVEFfU0EzMDAsICJQREMy
 MDc3MSIgfSwKICAgICB7IEFUQV9QREM0MDc3NSwgIDAsIFBSTUlPLCBQUkNN
 Qk8yLCBBVEFfU0EzMDAsICJQREM0MDc3NSIgfSwKICAgICB7IEFUQV9QREMy
 MDYxNywgIDAsIFBSTUlPLCBQUlBBVEEsICBBVEFfVURNQTYsICJQREMyMDYx
 NyIgfSwKICAgICB7IEFUQV9QREMyMDYxOCwgIDAsIFBSTUlPLCBQUlBBVEEs
 ICBBVEFfVURNQTYsICJQREMyMDYxOCIgfSwKICAgICB7IEFUQV9QREMyMDYx
 OSwgIDAsIFBSTUlPLCBQUlBBVEEsICBBVEFfVURNQTYsICJQREMyMDYxOSIg
 fSwKICAgICB7IEFUQV9QREMyMDYyMCwgIDAsIFBSTUlPLCBQUlBBVEEsICBB
 VEFfVURNQTYsICJQREMyMDYyMCIgfSwKICAgICB7IEFUQV9QREMyMDYyMSwg
 IDAsIFBSTUlPLCBQUlNYNFgsICBBVEFfVURNQTUsICJQREMyMDYyMSIgfSwK
 ICAgICB7IEFUQV9QREMyMDYyMiwgIDAsIFBSTUlPLCBQUlNYNFgsICBBVEFf
 U0ExNTAsICJQREMyMDYyMiIgfSwKICAgICB7IEFUQV9QREM0MDUxOCwgIDAs
 IFBSTUlPLCBQUlNBVEEyLCBBVEFfU0ExNTAsICJQREM0MDUxOCIgfSwKICAg
 ICB7IEFUQV9QREM0MDUxOSwgIDAsIFBSTUlPLCBQUlNBVEEyLCBBVEFfU0Ex
 NTAsICJQREM0MDUxOSIgfSwKICAgICB7IEFUQV9QREM0MDcxOCwgIDAsIFBS
 TUlPLCBQUlNBVEEyLCBBVEFfU0EzMDAsICJQREM0MDcxOCIgfSwKICAgICB7
 IEFUQV9QREM0MDcxOSwgIDAsIFBSTUlPLCBQUlNBVEEyLCBBVEFfU0EzMDAs
 ICJQREM0MDcxOSIgfSwKICAgICB7IEFUQV9QREM0MDc3OSwgIDAsIFBSTUlP
 LCBQUlNBVEEyLCBBVEFfU0EzMDAsICJQREM0MDc3OSIgfSwKICAgICB7IDAs
 IDAsIDAsIDAsIDAsIDB9fTsKICAgIGNoYXIgYnVmZmVyWzY0XTsKICAgIHVp
 bnRwdHJfdCBkZXZpZCA9IDA7CgogICAgaWYgKCEoaWR4ID0gYXRhX21hdGNo
 X2NoaXAoZGV2LCBpZHMpKSkKCXJldHVybiBFTlhJTzsKCiAgICAvKiBpZiB3
 ZSBhcmUgb24gYSBTdXBlclRyYWsgU1g2MDAwIGRvbnQgYXR0YWNoICovCiAg
 ICBpZiAoKGlkeC0+Y2ZnMiAmIFBSU1g2SykgJiYgcGNpX2dldF9jbGFzcyhH
 UkFORFBBUkVOVChkZXYpKT09UENJQ19CUklER0UgJiYKCSFCVVNfUkVBRF9J
 VkFSKGRldmljZV9nZXRfcGFyZW50KEdSQU5EUEFSRU5UKGRldikpLAoJCSAg
 ICAgICBHUkFORFBBUkVOVChkZXYpLCBQQ0lfSVZBUl9ERVZJRCwgJmRldmlk
 KSAmJgoJZGV2aWQgPT0gQVRBX0k5NjBSTSkgCglyZXR1cm4gRU5YSU87Cgog
 ICAgc3RyY3B5KGJ1ZmZlciwgIlByb21pc2UgIik7CiAgICBzdHJjYXQoYnVm
 ZmVyLCBpZHgtPnRleHQpOwoKICAgIC8qIGlmIHdlIGFyZSBvbiBhIEZhc3RU
 cmFrIFRYNCwgYWRqdXN0IHRoZSBpbnRlcnJ1cHQgcmVzb3VyY2UgKi8KICAg
 IGlmICgoaWR4LT5jZmcyICYgUFJUWDQpICYmIHBjaV9nZXRfY2xhc3MoR1JB
 TkRQQVJFTlQoZGV2KSk9PVBDSUNfQlJJREdFICYmCgkhQlVTX1JFQURfSVZB
 UihkZXZpY2VfZ2V0X3BhcmVudChHUkFORFBBUkVOVChkZXYpKSwKCQkgICAg
 ICAgR1JBTkRQQVJFTlQoZGV2KSwgUENJX0lWQVJfREVWSUQsICZkZXZpZCkg
 JiYKCSgoZGV2aWQgPT0gQVRBX0RFQ18yMTE1MCkgfHwgKGRldmlkID09IEFU
 QV9ERUNfMjExNTBfMSkpKSB7CglzdGF0aWMgbG9uZyBzdGFydCA9IDAsIGVu
 ZCA9IDA7CgoJaWYgKHBjaV9nZXRfc2xvdChkZXYpID09IDEpIHsKCSAgICBi
 dXNfZ2V0X3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsIDAsICZzdGFydCwg
 JmVuZCk7CgkgICAgc3RyY2F0KGJ1ZmZlciwgIiAoY2hhbm5lbCAwKzEpIik7
 Cgl9CgllbHNlIGlmIChwY2lfZ2V0X3Nsb3QoZGV2KSA9PSAyICYmIHN0YXJ0
 ICYmIGVuZCkgewoJICAgIGJ1c19zZXRfcmVzb3VyY2UoZGV2LCBTWVNfUkVT
 X0lSUSwgMCwgc3RhcnQsIGVuZCk7CgkgICAgc3RyY2F0KGJ1ZmZlciwgIiAo
 Y2hhbm5lbCAyKzMpIik7Cgl9CgllbHNlIHsKCSAgICBzdGFydCA9IGVuZCA9
 IDA7Cgl9CiAgICB9CiAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzICVzIGNvbnRy
 b2xsZXIiLCBidWZmZXIsIGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEpKTsK
 ICAgIGRldmljZV9zZXRfZGVzY19jb3B5KGRldiwgYnVmZmVyKTsKICAgIGN0
 bHItPmNoaXAgPSBpZHg7CiAgICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9wcm9t
 aXNlX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRh
 X3Byb21pc2VfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3Qg
 YXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXYpOwogICAgaW50IGZha2VfcmVnLCBzdGF0X3JlZzsKCiAgICBpZiAoYXRh
 X3NldHVwX2ludGVycnVwdChkZXYpKQoJcmV0dXJuIEVOWElPOwoKICAgIHN3
 aXRjaCAgKGN0bHItPmNoaXAtPmNmZzEpIHsKICAgIGNhc2UgUFJORVc6Cgkv
 KiBzZXR1cCBjbG9ja3MgKi8KCUFUQV9PVVRCKGN0bHItPnJfcmVzMSwgMHgx
 MSwgQVRBX0lOQihjdGxyLT5yX3JlczEsIDB4MTEpIHwgMHgwYSk7CgoJY3Rs
 ci0+ZG1haW5pdCA9IGF0YV9wcm9taXNlX2RtYWluaXQ7CgkvKiBGQUxMVEhS
 T1VHSCAqLwoKICAgIGNhc2UgUFJPTEQ6CgkvKiBlbmFibGUgYnVyc3QgbW9k
 ZSAqLwoJQVRBX09VVEIoY3Rsci0+cl9yZXMxLCAweDFmLCBBVEFfSU5CKGN0
 bHItPnJfcmVzMSwgMHgxZikgfCAweDAxKTsKCWN0bHItPmFsbG9jYXRlID0g
 YXRhX3Byb21pc2VfYWxsb2NhdGU7CgljdGxyLT5zZXRtb2RlID0gYXRhX3By
 b21pc2Vfc2V0bW9kZTsKCXJldHVybiAwOwoKICAgIGNhc2UgUFJUWDoKCWN0
 bHItPmFsbG9jYXRlID0gYXRhX3Byb21pc2VfdHgyX2FsbG9jYXRlOwoJY3Rs
 ci0+c2V0bW9kZSA9IGF0YV9wcm9taXNlX3NldG1vZGU7CglyZXR1cm4gMDsK
 CiAgICBjYXNlIFBSTUlPOgoJY3Rsci0+cl90eXBlMSA9IFNZU19SRVNfTUVN
 T1JZOwoJY3Rsci0+cl9yaWQxID0gUENJUl9CQVIoNCk7CglpZiAoIShjdGxy
 LT5yX3JlczEgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+
 cl90eXBlMSwKCQkJCQkJICAgICZjdGxyLT5yX3JpZDEsIFJGX0FDVElWRSkp
 KQoJICAgIGdvdG8gZmFpbG5mcmVlOwoKCWN0bHItPnJfdHlwZTIgPSBTWVNf
 UkVTX01FTU9SWTsKCWN0bHItPnJfcmlkMiA9IFBDSVJfQkFSKDMpOwoJaWYg
 KCEoY3Rsci0+cl9yZXMyID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYs
 IGN0bHItPnJfdHlwZTIsCgkJCQkJCSAgICAmY3Rsci0+cl9yaWQyLCBSRl9B
 Q1RJVkUpKSkKCSAgICBnb3RvIGZhaWxuZnJlZTsKCglpZiAoY3Rsci0+Y2hp
 cC0+Y2ZnMiA9PSBQUlNYNFgpIHsKCSAgICBzdHJ1Y3QgYXRhX3Byb21pc2Vf
 c3g0ICpocGt0OwoJICAgIHVfaW50MzJfdCBkaW1tID0gQVRBX0lOTChjdGxy
 LT5yX3JlczIsIDB4MDAwYzAwODApOwoKCSAgICBpZiAoYnVzX3RlYXJkb3du
 X2ludHIoZGV2LCBjdGxyLT5yX2lycSwgY3Rsci0+aGFuZGxlKSB8fAoJCWJ1
 c19zZXR1cF9pbnRyKGRldiwgY3Rsci0+cl9pcnEsIEFUQV9JTlRSX0ZMQUdT
 LAoJCQkgICAgICAgYXRhX3Byb21pc2Vfc3g0X2ludHIsIGN0bHIsICZjdGxy
 LT5oYW5kbGUpKSB7CgkJZGV2aWNlX3ByaW50ZihkZXYsICJ1bmFibGUgdG8g
 c2V0dXAgaW50ZXJydXB0XG4iKTsKCQlnb3RvIGZhaWxuZnJlZTsKCSAgICB9
 CgoJICAgIC8qIHByaW50IGluZm8gYWJvdXQgY2FjaGUgbWVtb3J5ICovCgkg
 ICAgZGV2aWNlX3ByaW50ZihkZXYsICJESU1NIHNpemUgJWRNQiBAIDB4JTA4
 eCVzXG4iLAoJCQkgICgoKGRpbW0gPj4gMTYpICYgMHhmZiktKChkaW1tID4+
 IDI0KSAmIDB4ZmYpKzEpIDw8IDQsCgkJCSAgKChkaW1tID4+IDI0KSAmIDB4
 ZmYpLAoJCQkgIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCAweDAwMGMwMDg4KSAm
 ICgxPDwxNikgPwoJCQkgICIgRUNDIGVuYWJsZWQiIDogIiIgKTsKCgkgICAg
 LyogYWRqdXN0IGNhY2hlIG1lbW9yeSBwYXJhbWV0ZXJzICovCgkgICAgQVRB
 X09VVEwoY3Rsci0+cl9yZXMyLCAweDAwMGMwMDBjLCAKCQkgICAgIChBVEFf
 SU5MKGN0bHItPnJfcmVzMiwgMHgwMDBjMDAwYykgJiAweGZmZmYwMDAwKSk7
 CgoJICAgIC8qIHNldHVwIGhvc3QgcGFja2V0IGNvbnRyb2xzICovCgkgICAg
 aHBrdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGF0YV9wcm9taXNlX3N4NCks
 CgkJCSAgTV9URU1QLCBNX05PV0FJVCB8IE1fWkVSTyk7CgkgICAgbXR4X2lu
 aXQoJmhwa3QtPm10eCwgIkFUQSBwcm9taXNlIEhQS1QgbG9jayIsIE5VTEws
 IE1UWF9ERUYpOwoJICAgIFRBSUxRX0lOSVQoJmhwa3QtPnF1ZXVlKTsKCSAg
 ICBocGt0LT5idXN5ID0gMDsKCSAgICBkZXZpY2Vfc2V0X2l2YXJzKGRldiwg
 aHBrdCk7CgkgICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFfcHJvbWlzZV9taW9f
 YWxsb2NhdGU7CgkgICAgY3Rsci0+cmVzZXQgPSBhdGFfcHJvbWlzZV9taW9f
 cmVzZXQ7CgkgICAgY3Rsci0+ZG1haW5pdCA9IGF0YV9wcm9taXNlX21pb19k
 bWFpbml0OwoJICAgIGN0bHItPnNldG1vZGUgPSBhdGFfcHJvbWlzZV9zZXRt
 b2RlOwoJICAgIGN0bHItPmNoYW5uZWxzID0gNDsKCSAgICByZXR1cm4gMDsK
 CX0KCgkvKiBtaW8gdHlwZSBjb250cm9sbGVycyBuZWVkIGFuIGludGVycnVw
 dCBpbnRlcmNlcHQgKi8KCWlmIChidXNfdGVhcmRvd25faW50cihkZXYsIGN0
 bHItPnJfaXJxLCBjdGxyLT5oYW5kbGUpIHx8CgkJYnVzX3NldHVwX2ludHIo
 ZGV2LCBjdGxyLT5yX2lycSwgQVRBX0lOVFJfRkxBR1MsCgkJCSAgICAgICBh
 dGFfcHJvbWlzZV9taW9faW50ciwgY3RsciwgJmN0bHItPmhhbmRsZSkpIHsK
 CQlkZXZpY2VfcHJpbnRmKGRldiwgInVuYWJsZSB0byBzZXR1cCBpbnRlcnJ1
 cHRcbiIpOwoJCWdvdG8gZmFpbG5mcmVlOwoJfQoKCXN3aXRjaCAoY3Rsci0+
 Y2hpcC0+Y2ZnMikgewoJY2FzZSBQUlBBVEE6CgkgICAgY3Rsci0+Y2hhbm5l
 bHMgPSAoKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCAweDQ4KSAmIDB4MDEpID4g
 MCkgKwoJCQkgICAgICgoQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4NDgpICYg
 MHgwMikgPiAwKSArIDI7CgkgICAgZ290byBzYXRhMTUwOwoJY2FzZSBQUkNN
 Qk86CgkgICAgY3Rsci0+Y2hhbm5lbHMgPSAzOwoJICAgIGdvdG8gc2F0YTE1
 MDsKCWNhc2UgUFJTQVRBOgoJICAgIGN0bHItPmNoYW5uZWxzID0gNDsKc2F0
 YTE1MDoKCSAgICBmYWtlX3JlZyA9IDB4NjA7CgkgICAgc3RhdF9yZWcgPSAw
 eDZjOwoJICAgIGJyZWFrOwoKCWNhc2UgUFJDTUJPMjogCgkgICAgY3Rsci0+
 Y2hhbm5lbHMgPSAzOwoJICAgIGdvdG8gc2F0YWlpOwoJY2FzZSBQUlNBVEEy
 OgoJZGVmYXVsdDoKCSAgICBjdGxyLT5jaGFubmVscyA9IDQ7CnNhdGFpaToK
 CSAgICBmYWtlX3JlZyA9IDB4NTQ7CgkgICAgc3RhdF9yZWcgPSAweDYwOwoJ
 ICAgIGJyZWFrOwoJfQoKCS8qIHByaW1lIGZha2UgaW50ZXJydXB0IHJlZ2lz
 dGVyICovCglBVEFfT1VUTChjdGxyLT5yX3JlczIsIGZha2VfcmVnLCAweGZm
 ZmZmZmZmKTsKCgkvKiBjbGVhciBTQVRBIHN0YXR1cyAqLwoJQVRBX09VVEwo
 Y3Rsci0+cl9yZXMyLCBzdGF0X3JlZywgMHgwMDAwMDBmZik7CgoJY3Rsci0+
 YWxsb2NhdGUgPSBhdGFfcHJvbWlzZV9taW9fYWxsb2NhdGU7CgljdGxyLT5y
 ZXNldCA9IGF0YV9wcm9taXNlX21pb19yZXNldDsKCWN0bHItPmRtYWluaXQg
 PSBhdGFfcHJvbWlzZV9taW9fZG1haW5pdDsKCWN0bHItPnNldG1vZGUgPSBh
 dGFfcHJvbWlzZV9taW9fc2V0bW9kZTsKCglyZXR1cm4gMDsKICAgIH0KCmZh
 aWxuZnJlZToKICAgIGlmIChjdGxyLT5yX3JlczIpCglidXNfcmVsZWFzZV9y
 ZXNvdXJjZShkZXYsIGN0bHItPnJfdHlwZTIsIGN0bHItPnJfcmlkMiwgY3Rs
 ci0+cl9yZXMyKTsKICAgIGlmIChjdGxyLT5yX3JlczEpCglidXNfcmVsZWFz
 ZV9yZXNvdXJjZShkZXYsIGN0bHItPnJfdHlwZTEsIGN0bHItPnJfcmlkMSwg
 Y3Rsci0+cl9yZXMxKTsKICAgIHJldHVybiBFTlhJTzsKfQoKc3RhdGljIGlu
 dAphdGFfcHJvbWlzZV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCnsKICAgIHN0
 cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7
 CgogICAgaWYgKGF0YV9wY2lfYWxsb2NhdGUoZGV2KSkKCXJldHVybiBFTlhJ
 TzsKCiAgICBjaC0+aHcuc3RhdHVzID0gYXRhX3Byb21pc2Vfc3RhdHVzOwog
 ICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX3Byb21pc2Vfc3RhdHVz
 KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQo
 ZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dl
 dF9zb2Z0YyhkZXYpOwoKICAgIGlmIChBVEFfSU5MKGN0bHItPnJfcmVzMSwg
 MHgxYykgJiAoY2gtPnVuaXQgPyAweDAwMDA0MDAwIDogMHgwMDAwMDQwMCkp
 IHsKCXJldHVybiBhdGFfcGNpX3N0YXR1cyhkZXYpOwogICAgfQogICAgcmV0
 dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX3Byb21pc2VfZG1hc3RhcnQoZGV2
 aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpj
 dGxyID0gZGV2aWNlX2dldF9zb2Z0YyhHUkFORFBBUkVOVChkZXYpKTsKICAg
 IHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9kZXZpY2Ug
 KmF0YWRldiAgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgaWYgKGF0
 YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpIHsKCUFUQV9PVVRC
 KGN0bHItPnJfcmVzMSwgMHgxMSwKCQkgQVRBX0lOQihjdGxyLT5yX3JlczEs
 IDB4MTEpIHwgKGNoLT51bml0ID8gMHgwOCA6IDB4MDIpKTsKCUFUQV9PVVRM
 KGN0bHItPnJfcmVzMSwgY2gtPnVuaXQgPyAweDI0IDogMHgyMCwKCQkgKChj
 aC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFfUkVBRCkgPyAweDA1MDAwMDAwIDog
 MHgwNjAwMDAwMCkgfAoJCSAoY2gtPmRtYS0+Y3VyX2lvc2l6ZSA+PiAxKSk7
 CiAgICB9CiAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTVNUQVRfUE9SVCwg
 KEFUQV9JRFhfSU5CKGNoLCBBVEFfQk1TVEFUX1BPUlQpIHwKCQkgKEFUQV9C
 TVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUikpKTsKICAgIEFU
 QV9JRFhfT1VUTChjaCwgQVRBX0JNRFRQX1BPUlQsIGNoLT5kbWEtPnNnX2J1
 cyk7CiAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNNRF9QT1JULAoJCSAo
 KGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9SRUFEKSA/IEFUQV9CTUNNRF9X
 UklURV9SRUFEIDogMCkgfAoJCSBBVEFfQk1DTURfU1RBUlRfU1RPUCk7CiAg
 ICBjaC0+ZmxhZ3MgfD0gQVRBX0RNQV9BQ1RJVkU7CiAgICByZXR1cm4gMDsK
 fQoKc3RhdGljIGludAphdGFfcHJvbWlzZV9kbWFzdG9wKGRldmljZV90IGRl
 dikKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRl
 dmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYg
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgaW50IGVycm9yOwoKICAg
 IGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CglB
 VEFfT1VUQihjdGxyLT5yX3JlczEsIDB4MTEsCgkJIEFUQV9JTkIoY3Rsci0+
 cl9yZXMxLCAweDExKSAmIH4oY2gtPnVuaXQgPyAweDA4IDogMHgwMikpOwoJ
 QVRBX09VVEwoY3Rsci0+cl9yZXMxLCBjaC0+dW5pdCA/IDB4MjQgOiAweDIw
 LCAwKTsKICAgIH0KICAgIGVycm9yID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9C
 TVNUQVRfUE9SVCk7CiAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNNRF9Q
 T1JULAoJCSBBVEFfSURYX0lOQihjaCwgQVRBX0JNQ01EX1BPUlQpICYgfkFU
 QV9CTUNNRF9TVEFSVF9TVE9QKTsKICAgIEFUQV9JRFhfT1VUQihjaCwgQVRB
 X0JNU1RBVF9QT1JULCBBVEFfQk1TVEFUX0lOVEVSUlVQVCB8IEFUQV9CTVNU
 QVRfRVJST1IpOyAKICAgIGNoLT5mbGFncyAmPSB+QVRBX0RNQV9BQ1RJVkU7
 CiAgICByZXR1cm4gZXJyb3I7Cn0KCnN0YXRpYyB2b2lkCmF0YV9wcm9taXNl
 X2RtYXJlc2V0KGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9jaGFu
 bmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAgICBBVEFfSURY
 X09VVEIoY2gsIEFUQV9CTUNNRF9QT1JULAoJCSBBVEFfSURYX0lOQihjaCwg
 QVRBX0JNQ01EX1BPUlQpICYgfkFUQV9CTUNNRF9TVEFSVF9TVE9QKTsKICAg
 IEFUQV9JRFhfT1VUQihjaCwgQVRBX0JNU1RBVF9QT1JULCBBVEFfQk1TVEFU
 X0lOVEVSUlVQVCB8IEFUQV9CTVNUQVRfRVJST1IpOyAKICAgIGNoLT5mbGFn
 cyAmPSB+QVRBX0RNQV9BQ1RJVkU7Cn0KCnN0YXRpYyB2b2lkCmF0YV9wcm9t
 aXNlX2RtYWluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX2No
 YW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGF0YV9k
 bWFpbml0KGRldik7CiAgICBpZiAoY2gtPmRtYSkgewoJY2gtPmRtYS0+c3Rh
 cnQgPSBhdGFfcHJvbWlzZV9kbWFzdGFydDsKCWNoLT5kbWEtPnN0b3AgPSBh
 dGFfcHJvbWlzZV9kbWFzdG9wOwoJY2gtPmRtYS0+cmVzZXQgPSBhdGFfcHJv
 bWlzZV9kbWFyZXNldDsKICAgIH0KfQoKc3RhdGljIHZvaWQKYXRhX3Byb21p
 c2Vfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBkZXZp
 Y2VfdCBncGFyZW50ID0gR1JBTkRQQVJFTlQoZGV2KTsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdw
 YXJlbnQpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwog
 ICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFk
 ZXYtPnVuaXQpOwogICAgaW50IGVycm9yOwogICAgdV9pbnQzMl90IHRpbWlu
 Z3NbXVsyXSA9IHsKICAgIC8qICAgIFBST0xEICAgICAgIFBSTkVXICAgICAg
 ICAgICAgICAgIG1vZGUgKi8KCXsgMHgwMDRmZjMyOSwgMHgwMDRmZmYyZiB9
 LCAgICAgLyogUElPIDAgKi8KCXsgMHgwMDRmZWMyNSwgMHgwMDRmZjgyYSB9
 LCAgICAgLyogUElPIDEgKi8KCXsgMHgwMDRmZTgyMywgMHgwMDRmZjAyNiB9
 LCAgICAgLyogUElPIDIgKi8KCXsgMHgwMDRmZTYyMiwgMHgwMDRmZWMyNCB9
 LCAgICAgLyogUElPIDMgKi8KCXsgMHgwMDRmZTQyMSwgMHgwMDRmZTgyMiB9
 LCAgICAgLyogUElPIDQgKi8KCXsgMHgwMDQ1NjdmMywgMHgwMDRhY2VmNiB9
 LCAgICAgLyogTVdETUEgMCAqLwoJeyAweDAwNDQ2N2YzLCAweDAwNDhjZWY2
 IH0sICAgICAvKiBNV0RNQSAxICovCgl7IDB4MDA0MzY3ZjMsIDB4MDA0NmNl
 ZjYgfSwgICAgIC8qIE1XRE1BIDIgKi8KCXsgMHgwMDQzNjdmMywgMHgwMDQ2
 Y2VmNiB9LCAgICAgLyogVURNQSAwICovCgl7IDB4MDA0MjQ3ZjMsIDB4MDA0
 NDhlZjYgfSwgICAgIC8qIFVETUEgMSAqLwoJeyAweDAwNDEyN2YzLCAweDAw
 NDM2ZWY2IH0sICAgICAvKiBVRE1BIDIgKi8KCXsgMCwgICAgICAgICAgMHgw
 MDQyNGVmNiB9LCAgICAgLyogVURNQSAzICovCgl7IDAsICAgICAgICAgIDB4
 MDA0MTI3ZjMgfSwgICAgIC8qIFVETUEgNCAqLwoJeyAwLCAgICAgICAgICAw
 eDAwNDEyN2YzIH0gICAgICAvKiBVRE1BIDUgKi8KICAgIH07CgogICAgbW9k
 ZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4
 X2RtYSk7CgogICAgc3dpdGNoIChjdGxyLT5jaGlwLT5jZmcxKSB7CiAgICBj
 YXNlIFBST0xEOgogICAgY2FzZSBQUk5FVzoKCWlmIChtb2RlID4gQVRBX1VE
 TUEyICYmIChwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1MCwgMikgJgoJ
 CQkJIChjaC0+dW5pdCA/IDEgPDwgMTEgOiAxIDw8IDEwKSkpIHsKCSAgICBh
 dGFfcHJpbnRfY2FibGUoZGV2LCAiY29udHJvbGxlciIpOwoJICAgIG1vZGUg
 PSBBVEFfVURNQTI7Cgl9CglpZiAoYXRhX2F0YXBpKGRldikgJiYgbW9kZSA+
 IEFUQV9QSU9fTUFYKQoJICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYs
 IG1vZGUsIEFUQV9QSU9fTUFYKTsKCWJyZWFrOwoKICAgIGNhc2UgUFJUWDoK
 CUFUQV9JRFhfT1VUQihjaCwgQVRBX0JNREVWU1BFQ18wLCAweDBiKTsKCWlm
 IChtb2RlID4gQVRBX1VETUEyICYmCgkgICAgQVRBX0lEWF9JTkIoY2gsIEFU
 QV9CTURFVlNQRUNfMSkgJiAweDA0KSB7CgkgICAgYXRhX3ByaW50X2NhYmxl
 KGRldiwgImNvbnRyb2xsZXIiKTsKCSAgICBtb2RlID0gQVRBX1VETUEyOwoJ
 fQoJYnJlYWs7CiAgIAogICAgY2FzZSBQUk1JTzoKCWlmIChtb2RlID4gQVRB
 X1VETUEyICYmCgkgICAgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLAoJCSAgICAg
 KGN0bHItPmNoaXAtPmNmZzIgJiBQUlNYNFggPyAweDAwMGMwMjYwIDogMHgw
 MjYwKSArCgkJICAgICAoY2gtPnVuaXQgPDwgNykpICYgMHgwMTAwMDAwMCkp
 IHsKCSAgICBhdGFfcHJpbnRfY2FibGUoZGV2LCAiY29udHJvbGxlciIpOwoJ
 ICAgIG1vZGUgPSBBVEFfVURNQTI7Cgl9CglicmVhazsKICAgIH0KCiAgICBl
 cnJvciA9IGF0YV9jb250cm9sY21kKGRldiwgQVRBX1NFVEZFQVRVUkVTLCBB
 VEFfU0ZfU0VUWEZFUiwgMCwgbW9kZSk7CgogICAgaWYgKGJvb3R2ZXJib3Nl
 KQoJZGV2aWNlX3ByaW50ZihkZXYsICIlc3NldHRpbmcgJXMgb24gJXMgY2hp
 cFxuIiwKCQkgICAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsCgkJICAg
 ICBhdGFfbW9kZTJzdHIobW9kZSksIGN0bHItPmNoaXAtPnRleHQpOwogICAg
 aWYgKCFlcnJvcikgewoJaWYgKGN0bHItPmNoaXAtPmNmZzEgPCBQUlRYKQoJ
 ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg2MCArIChkZXZubyA8
 PCAyKSwKCQkJICAgICB0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV1bY3Rs
 ci0+Y2hpcC0+Y2ZnMV0sIDQpOwoJYXRhZGV2LT5tb2RlID0gbW9kZTsKICAg
 IH0KICAgIHJldHVybjsKfQoKc3RhdGljIGludAphdGFfcHJvbWlzZV90eDJf
 YWxsb2NhdGUoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX2NoYW5u
 ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGlmIChhdGFf
 cGNpX2FsbG9jYXRlKGRldikpCglyZXR1cm4gRU5YSU87CgogICAgY2gtPmh3
 LnN0YXR1cyA9IGF0YV9wcm9taXNlX3R4Ml9zdGF0dXM7CiAgICByZXR1cm4g
 MDsKfQoKc3RhdGljIGludAphdGFfcHJvbWlzZV90eDJfc3RhdHVzKGRldmlj
 ZV90IGRldikKewogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmlj
 ZV9nZXRfc29mdGMoZGV2KTsKCiAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9C
 TURFVlNQRUNfMCwgMHgwYik7CiAgICBpZiAoQVRBX0lEWF9JTkIoY2gsIEFU
 QV9CTURFVlNQRUNfMSkgJiAweDIwKSB7CglyZXR1cm4gYXRhX3BjaV9zdGF0
 dXMoZGV2KTsKICAgIH0KICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0
 YV9wcm9taXNlX21pb19hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCnsKICAgIHN0
 cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9j
 aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGludCBv
 ZmZzZXQgPSAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIFBSU1g0WCkgPyAweDAwMGMw
 MDAwIDogMDsKICAgIGludCBpOwogCiAgICBmb3IgKGkgPSBBVEFfREFUQTsg
 aSA8PSBBVEFfQ09NTUFORDsgaSsrKSB7CgljaC0+cl9pb1tpXS5yZXMgPSBj
 dGxyLT5yX3JlczI7CgljaC0+cl9pb1tpXS5vZmZzZXQgPSBvZmZzZXQgKyAw
 eDAyMDAgKyAoaSA8PCAyKSArIChjaC0+dW5pdCA8PCA3KTsgCiAgICB9CiAg
 ICBjaC0+cl9pb1tBVEFfQ09OVFJPTF0ucmVzID0gY3Rsci0+cl9yZXMyOwog
 ICAgY2gtPnJfaW9bQVRBX0NPTlRST0xdLm9mZnNldCA9IG9mZnNldCArIDB4
 MDIzOCArIChjaC0+dW5pdCA8PCA3KTsKICAgIGNoLT5yX2lvW0FUQV9JRFhf
 QUREUl0ucmVzID0gY3Rsci0+cl9yZXMyOwogICAgYXRhX2RlZmF1bHRfcmVn
 aXN0ZXJzKGRldik7CiAgICBpZiAoKGN0bHItPmNoaXAtPmNmZzIgJiAoUFJT
 QVRBIHwgUFJTQVRBMikpIHx8CgkoKGN0bHItPmNoaXAtPmNmZzIgJiAoUFJD
 TUJPIHwgUFJDTUJPMikpICYmIGNoLT51bml0IDwgMikpIHsKCWNoLT5yX2lv
 W0FUQV9TU1RBVFVTXS5yZXMgPSBjdGxyLT5yX3JlczI7CgljaC0+cl9pb1tB
 VEFfU1NUQVRVU10ub2Zmc2V0ID0gMHg0MDAgKyAoY2gtPnVuaXQgPDwgOCk7
 CgljaC0+cl9pb1tBVEFfU0VSUk9SXS5yZXMgPSBjdGxyLT5yX3JlczI7Cglj
 aC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQgPSAweDQwNCArIChjaC0+dW5p
 dCA8PCA4KTsKCWNoLT5yX2lvW0FUQV9TQ09OVFJPTF0ucmVzID0gY3Rsci0+
 cl9yZXMyOwoJY2gtPnJfaW9bQVRBX1NDT05UUk9MXS5vZmZzZXQgPSAweDQw
 OCArIChjaC0+dW5pdCA8PCA4KTsKCWNoLT5mbGFncyB8PSBBVEFfTk9fU0xB
 VkU7CiAgICB9CiAgICBjaC0+ZmxhZ3MgfD0gQVRBX1VTRV8xNkJJVDsKCiAg
 ICBhdGFfZ2VuZXJpY19odyhkZXYpOwogICAgaWYgKGN0bHItPmNoaXAtPmNm
 ZzIgJiBQUlNYNFgpIHsKCWNoLT5ody5jb21tYW5kID0gYXRhX3Byb21pc2Vf
 c3g0X2NvbW1hbmQ7CiAgICB9CiAgICBlbHNlIHsKCWNoLT5ody5jb21tYW5k
 ID0gYXRhX3Byb21pc2VfbWlvX2NvbW1hbmQ7CgljaC0+aHcuc3RhdHVzID0g
 YXRhX3Byb21pc2VfbWlvX3N0YXR1czsKICAgICB9CiAgICByZXR1cm4gMDsK
 fQoKc3RhdGljIHZvaWQKYXRhX3Byb21pc2VfbWlvX2ludHIodm9pZCAqZGF0
 YSkKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRh
 dGE7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoOwogICAgdV9pbnQzMl90
 IHZlY3RvcjsKICAgIGludCB1bml0LCBmYWtlX3JlZzsKCiAgICBzd2l0Y2gg
 KGN0bHItPmNoaXAtPmNmZzIpIHsKICAgIGNhc2UgUFJQQVRBOgogICAgY2Fz
 ZSBQUkNNQk86CiAgICBjYXNlIFBSU0FUQToKCWZha2VfcmVnID0gMHg2MDsK
 CWJyZWFrOwogICAgY2FzZSBQUkNNQk8yOiAKICAgIGNhc2UgUFJTQVRBMjoK
 ICAgIGRlZmF1bHQ6CglmYWtlX3JlZyA9IDB4NTQ7CglicmVhazsKICAgIH0K
 CiAgICAvKgogICAgICogc2luY2UgcmVhZGluZyBpbnRlcnJ1cHQgc3RhdHVz
 IHJlZ2lzdGVyIG9uIGVhcmx5ICJtaW8iIGNoaXBzCiAgICAgKiBjbGVhcnMg
 dGhlIHN0YXR1cyBiaXRzIHdlIGNhbm5vdCByZWFkIGl0IGZvciBlYWNoIGNo
 YW5uZWwgbGF0ZXIgb24KICAgICAqIGluIHRoZSBnZW5lcmljIGludGVycnVw
 dCByb3V0aW5lLgogICAgICogc3RvcmUgdGhlIGJpdHMgaW4gYW4gdW51c2Vk
 IHJlZ2lzdGVyIGluIHRoZSBjaGlwIHNvIHdlIGNhbiByZWFkCiAgICAgKiBp
 dCBmcm9tIHRoZXJlIHNhZmVseSB0byBnZXQgYXJvdW5kIHRoaXMgImZlYXR1
 cmUiLgogICAgICovCiAgICB2ZWN0b3IgPSBBVEFfSU5MKGN0bHItPnJfcmVz
 MiwgMHgwNDApOwogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDA0MCwg
 dmVjdG9yKTsKICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgZmFrZV9yZWcs
 IHZlY3Rvcik7CgogICAgZm9yICh1bml0ID0gMDsgdW5pdCA8IGN0bHItPmNo
 YW5uZWxzOyB1bml0KyspIHsKCWlmICgoY2ggPSBjdGxyLT5pbnRlcnJ1cHRb
 dW5pdF0uYXJndW1lbnQpKQoJICAgIGN0bHItPmludGVycnVwdFt1bml0XS5m
 dW5jdGlvbihjaCk7CiAgICB9CgogICAgQVRBX09VVEwoY3Rsci0+cl9yZXMy
 LCBmYWtlX3JlZywgMHhmZmZmZmZmZik7Cn0KCnN0YXRpYyBpbnQKYXRhX3By
 b21pc2VfbWlvX3N0YXR1cyhkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVs
 ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFf
 Y29ubmVjdF90YXNrICp0cDsKICAgIHVfaW50MzJfdCBmYWtlX3JlZywgc3Rh
 dF9yZWcsIHZlY3Rvciwgc3RhdHVzOwoKICAgIHN3aXRjaCAoY3Rsci0+Y2hp
 cC0+Y2ZnMikgewogICAgY2FzZSBQUlBBVEE6CiAgICBjYXNlIFBSQ01CTzoK
 ICAgIGNhc2UgUFJTQVRBOgoJZmFrZV9yZWcgPSAweDYwOwoJc3RhdF9yZWcg
 PSAweDZjOwoJYnJlYWs7CiAgICBjYXNlIFBSQ01CTzI6IAogICAgY2FzZSBQ
 UlNBVEEyOgogICAgZGVmYXVsdDoKCWZha2VfcmVnID0gMHg1NDsKCXN0YXRf
 cmVnID0gMHg2MDsKCWJyZWFrOwogICAgfQoKICAgIC8qIHJlYWQgYW5kIGFj
 a25vd2xlZGdlIGludGVycnVwdCAqLwogICAgdmVjdG9yID0gQVRBX0lOTChj
 dGxyLT5yX3JlczIsIGZha2VfcmVnKTsKCiAgICAvKiByZWFkIGFuZCBjbGVh
 ciBpbnRlcmZhY2Ugc3RhdHVzICovCiAgICBzdGF0dXMgPSBBVEFfSU5MKGN0
 bHItPnJfcmVzMiwgc3RhdF9yZWcpOwogICAgQVRBX09VVEwoY3Rsci0+cl9y
 ZXMyLCBzdGF0X3JlZywgc3RhdHVzICYgKDB4MDAwMDAwMTEgPDwgY2gtPnVu
 aXQpKTsKCiAgICAvKiBjaGVjayBmb3IgYW5kIGhhbmRsZSBkaXNjb25uZWN0
 IGV2ZW50cyAqLwogICAgaWYgKChzdGF0dXMgJiAoMHgwMDAwMDAwMSA8PCBj
 aC0+dW5pdCkpICYmCgkodHAgPSAoc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sg
 KikKCSAgICAgIG1hbGxvYyhzaXplb2Yoc3RydWN0IGF0YV9jb25uZWN0X3Rh
 c2spLAoJCSAgICAgTV9BVEEsIE1fTk9XQUlUIHwgTV9aRVJPKSkpIHsKCglp
 ZiAoYm9vdHZlcmJvc2UpCgkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAi
 RElTQ09OTkVDVCByZXF1ZXN0ZWRcbiIpOwoJdHAtPmFjdGlvbiA9IEFUQV9D
 X0RFVEFDSDsKCXRwLT5kZXYgPSBjaC0+ZGV2OwoJVEFTS19JTklUKCZ0cC0+
 dGFzaywgMCwgYXRhX3NhdGFfcGh5X2V2ZW50LCB0cCk7Cgl0YXNrcXVldWVf
 ZW5xdWV1ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwogICAgfQoK
 ICAgIC8qIGNoZWNrIGZvciBhbmQgaGFuZGxlIGNvbm5lY3QgZXZlbnRzICov
 CiAgICBpZiAoKHN0YXR1cyAmICgweDAwMDAwMDEwIDw8IGNoLT51bml0KSkg
 JiYKCSh0cCA9IChzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayAqKQoJICAgICAg
 bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayksCgkJICAg
 ICBNX0FUQSwgTV9OT1dBSVQgfCBNX1pFUk8pKSkgewoKCWlmIChib290dmVy
 Ym9zZSkKCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJDT05ORUNUIHJl
 cXVlc3RlZFxuIik7Cgl0cC0+YWN0aW9uID0gQVRBX0NfQVRUQUNIOwoJdHAt
 PmRldiA9IGNoLT5kZXY7CglUQVNLX0lOSVQoJnRwLT50YXNrLCAwLCBhdGFf
 c2F0YV9waHlfZXZlbnQsIHRwKTsKCXRhc2txdWV1ZV9lbnF1ZXVlKHRhc2tx
 dWV1ZV90aHJlYWQsICZ0cC0+dGFzayk7CiAgICB9CgogICAgLyogZG8gd2Ug
 aGF2ZSBhbnkgZGV2aWNlIGFjdGlvbiA/ICovCiAgICByZXR1cm4gKHZlY3Rv
 ciAmICgxIDw8IChjaC0+dW5pdCArIDEpKSk7Cn0KCnN0YXRpYyBpbnQKYXRh
 X3Byb21pc2VfbWlvX2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1
 ZXN0KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyPWRl
 dmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQocmVxdWVzdC0+ZGV2KSk7CiAg
 ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsKICAgIHVfaW50MzJf
 dCAqd29yZHAgPSAodV9pbnQzMl90ICopY2gtPmRtYS0+d29yazsKCiAgICBB
 VEFfT1VUTChjdGxyLT5yX3JlczIsIChjaC0+dW5pdCArIDEpIDw8IDIsIDB4
 MDAwMDAwMDEpOwoKICAgIC8qIFhYWCBTT1MgYWRkIEFUQVBJIGNvbW1hbmRz
 IHN1cHBvcnQgbGF0ZXIgKi8KICAgIHN3aXRjaCAocmVxdWVzdC0+dS5hdGEu
 Y29tbWFuZCkgewogICAgZGVmYXVsdDoKCXJldHVybiBhdGFfZ2VuZXJpY19j
 b21tYW5kKHJlcXVlc3QpOwoKICAgIGNhc2UgQVRBX1JFQURfRE1BOgogICAg
 Y2FzZSBBVEFfUkVBRF9ETUE0ODoKCXdvcmRwWzBdID0gaHRvbGUzMigweDA0
 IHwgKChjaC0+dW5pdCArIDEpIDw8IDE2KSB8ICgweDAwIDw8IDI0KSk7Cgli
 cmVhazsKCiAgICBjYXNlIEFUQV9XUklURV9ETUE6CiAgICBjYXNlIEFUQV9X
 UklURV9ETUE0ODoKCXdvcmRwWzBdID0gaHRvbGUzMigweDAwIHwgKChjaC0+
 dW5pdCArIDEpIDw8IDE2KSB8ICgweDAwIDw8IDI0KSk7CglicmVhazsKICAg
 IH0KICAgIHdvcmRwWzFdID0gaHRvbGUzMihjaC0+ZG1hLT5zZ19idXMpOwog
 ICAgd29yZHBbMl0gPSAwOwogICAgYXRhX3Byb21pc2VfYXBrdCgodV9pbnQ4
 X3QqKXdvcmRwLCByZXF1ZXN0KTsKCiAgICBBVEFfT1VUTChjdGxyLT5yX3Jl
 czIsIDB4MDI0MCArIChjaC0+dW5pdCA8PCA3KSwgY2gtPmRtYS0+d29ya19i
 dXMpOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkCmF0YV9wcm9taXNl
 X21pb19yZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNp
 X2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9n
 ZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9
 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFfcHJvbWlz
 ZV9zeDQgKmhwa3RwOwoKICAgIHN3aXRjaCAoY3Rsci0+Y2hpcC0+Y2ZnMikg
 ewogICAgY2FzZSBQUlNYNFg6CgoJLyogc29mdHJlc2V0IGNoYW5uZWwgQVRB
 IG1vZHVsZSAqLwoJaHBrdHAgPSBkZXZpY2VfZ2V0X2l2YXJzKGN0bHItPmRl
 dik7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4YzAyNjAgKyAoY2gtPnVu
 aXQgPDwgNyksIGNoLT51bml0ICsgMSk7CglhdGFfdWRlbGF5KDEwMDApOwoJ
 QVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweGMwMjYwICsgKGNoLT51bml0IDw8
 IDcpLAoJCSAoQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4YzAyNjAgKyAoY2gt
 PnVuaXQgPDwgNykpICYKCQkgIH4weDAwMDAzZjlmKSB8IChjaC0+dW5pdCAr
 IDEpKTsKCgkvKiBzb2Z0cmVzZXQgSE9TVCBtb2R1bGUgKi8gLyogWFhYIFNP
 UyB3aGF0IGFib3V0IG90aGVyIG91dHN0YW5kaW5ncyAqLwoJbXR4X2xvY2so
 Jmhwa3RwLT5tdHgpOwoJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweGMwMTJj
 LAoJCSAoQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4YzAxMmMpICYgfjB4MDAw
 MDBmOWYpIHwgKDEgPDwgMTEpKTsKCURFTEFZKDEwKTsKCUFUQV9PVVRMKGN0
 bHItPnJfcmVzMiwgMHhjMDEyYywKCQkgKEFUQV9JTkwoY3Rsci0+cl9yZXMy
 LCAweGMwMTJjKSAmIH4weDAwMDAwZjlmKSk7CglocGt0cC0+YnVzeSA9IDA7
 CgltdHhfdW5sb2NrKCZocGt0cC0+bXR4KTsKCWF0YV9nZW5lcmljX3Jlc2V0
 KGRldik7CglicmVhazsKCiAgICBjYXNlIFBSUEFUQToKICAgIGNhc2UgUFJD
 TUJPOgogICAgY2FzZSBQUlNBVEE6CglpZiAoKGN0bHItPmNoaXAtPmNmZzIg
 PT0gUFJTQVRBKSB8fAoJICAgICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUkNN
 Qk8pICYmIChjaC0+dW5pdCA8IDIpKSkgewoKCSAgICAvKiBtYXNrIHBsdWcv
 dW5wbHVnIGludHIgKi8KCSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4
 MDZjLCAoMHgwMDExMDAwMCA8PCBjaC0+dW5pdCkpOwoJfQoKCS8qIHNvZnRy
 ZXNldCBjaGFubmVscyBBVEEgbW9kdWxlICovCglBVEFfT1VUTChjdGxyLT5y
 X3JlczIsIDB4MDI2MCArIChjaC0+dW5pdCA8PCA3KSwgKDEgPDwgMTEpKTsK
 CWF0YV91ZGVsYXkoMTAwMDApOwoJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAw
 eDAyNjAgKyAoY2gtPnVuaXQgPDwgNyksCgkJIChBVEFfSU5MKGN0bHItPnJf
 cmVzMiwgMHgwMjYwICsgKGNoLT51bml0IDw8IDcpKSAmCgkJICB+MHgwMDAw
 M2Y5ZikgfCAoY2gtPnVuaXQgKyAxKSk7CgoJaWYgKChjdGxyLT5jaGlwLT5j
 ZmcyID09IFBSU0FUQSkgfHwKCSAgICAoKGN0bHItPmNoaXAtPmNmZzIgPT0g
 UFJDTUJPKSAmJiAoY2gtPnVuaXQgPCAyKSkpIHsKCgkgICAgYXRhX3NhdGFf
 cGh5X2VuYWJsZShjaCk7CgoJICAgIC8qIHJlc2V0IGFuZCBlbmFibGUgcGx1
 Zy91bnBsdWcgaW50ciAqLwoJICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwg
 MHgwNmMsICgweDAwMDAwMDExIDw8IGNoLT51bml0KSk7Cgl9CgllbHNlCgkg
 ICAgYXRhX2dlbmVyaWNfcmVzZXQoZGV2KTsKCWJyZWFrOwoKICAgIGNhc2Ug
 UFJDTUJPMjoKICAgIGNhc2UgUFJTQVRBMjoKCWlmICgoY3Rsci0+Y2hpcC0+
 Y2ZnMiA9PSBQUlNBVEEyKSB8fAoJICAgICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9
 PSBQUkNNQk8yKSAmJiAoY2gtPnVuaXQgPCAyKSkpIHsKCSAgICAvKiBzZXQg
 cG9ydG11bHRpcGxpZXIgcG9ydCAqLwoJICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgMHg0ZTggKyAoY2gtPnVuaXQgPDwgOCksIDB4MGYpOwoKCSAgICAv
 KiBtYXNrIHBsdWcvdW5wbHVnIGludHIgKi8KCSAgICBBVEFfT1VUTChjdGxy
 LT5yX3JlczIsIDB4MDYwLCAoMHgwMDExMDAwMCA8PCBjaC0+dW5pdCkpOwoJ
 fQoKCS8qIHNvZnRyZXNldCBjaGFubmVscyBBVEEgbW9kdWxlICovCglBVEFf
 T1VUTChjdGxyLT5yX3JlczIsIDB4MDI2MCArIChjaC0+dW5pdCA8PCA3KSwg
 KDEgPDwgMTEpKTsKCWF0YV91ZGVsYXkoMTAwMDApOwoJQVRBX09VVEwoY3Rs
 ci0+cl9yZXMyLCAweDAyNjAgKyAoY2gtPnVuaXQgPDwgNyksCgkJIChBVEFf
 SU5MKGN0bHItPnJfcmVzMiwgMHgwMjYwICsgKGNoLT51bml0IDw8IDcpKSAm
 CgkJICB+MHgwMDAwM2Y5ZikgfCAoY2gtPnVuaXQgKyAxKSk7CgoJaWYgKChj
 dGxyLT5jaGlwLT5jZmcyID09IFBSU0FUQTIpIHx8CgkgICAgKChjdGxyLT5j
 aGlwLT5jZmcyID09IFBSQ01CTzIpICYmIChjaC0+dW5pdCA8IDIpKSkgewoK
 CSAgICAvKiBzZXQgUEhZIG1vZGUgdG8gImltcHJvdmVkIiAqLwoJICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgMHg0MTQgKyAoY2gtPnVuaXQgPDwgOCks
 CgkJICAgICAoQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4NDE0ICsgKGNoLT51
 bml0IDw8IDgpKSAmCgkJICAgICB+MHgwMDAwMDAwMykgfCAweDAwMDAwMDAx
 KTsKCgkgICAgYXRhX3NhdGFfcGh5X2VuYWJsZShjaCk7CgoJICAgIC8qIHJl
 c2V0IGFuZCBlbmFibGUgcGx1Zy91bnBsdWcgaW50ciAqLwoJICAgIEFUQV9P
 VVRMKGN0bHItPnJfcmVzMiwgMHgwNjAsICgweDAwMDAwMDExIDw8IGNoLT51
 bml0KSk7CgoJICAgIC8qIHNldCBwb3J0bXVsdGlwbGllciBwb3J0ICovCgkg
 ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDRlOCArIChjaC0+dW5pdCA8
 PCA4KSwgMHgwMCk7Cgl9CgllbHNlCgkgICAgYXRhX2dlbmVyaWNfcmVzZXQo
 ZGV2KTsKCWJyZWFrOwoKICAgIH0KfQoKc3RhdGljIHZvaWQKYXRhX3Byb21p
 c2VfbWlvX2RtYWluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICAvKiBub3RlIHN0
 YXJ0IGFuZCBzdG9wIGFyZSBub3QgdXNlZCBoZXJlICovCiAgICBhdGFfZG1h
 aW5pdChkZXYpOwp9CgpzdGF0aWMgdm9pZAphdGFfcHJvbWlzZV9taW9fc2V0
 bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBkZXZpY2VfdCBn
 cGFyZW50ID0gR1JBTkRQQVJFTlQoZGV2KTsKICAgIHN0cnVjdCBhdGFfcGNp
 X2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQp
 OwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29m
 dGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CgogICAgaWYgKCAoY3Rsci0+
 Y2hpcC0+Y2ZnMiA9PSBQUlNBVEEpIHx8CgkoKGN0bHItPmNoaXAtPmNmZzIg
 PT0gUFJDTUJPKSAmJiAoY2gtPnVuaXQgPCAyKSkgfHwKCShjdGxyLT5jaGlw
 LT5jZmcyID09IFBSU0FUQTIpIHx8CgkoKGN0bHItPmNoaXAtPmNmZzIgPT0g
 UFJDTUJPMikgJiYgKGNoLT51bml0IDwgMikpKQoJYXRhX3NhdGFfc2V0bW9k
 ZShkZXYsIG1vZGUpOwogICAgZWxzZQoJYXRhX3Byb21pc2Vfc2V0bW9kZShk
 ZXYsIG1vZGUpOwp9CgpzdGF0aWMgdm9pZAphdGFfcHJvbWlzZV9zeDRfaW50
 cih2b2lkICpkYXRhKQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy
 ICpjdGxyID0gZGF0YTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2g7CiAg
 ICB1X2ludDMyX3QgdmVjdG9yID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4
 MDAwYzA0ODApOwogICAgaW50IHVuaXQ7CgogICAgZm9yICh1bml0ID0gMDsg
 dW5pdCA8IGN0bHItPmNoYW5uZWxzOyB1bml0KyspIHsKCWlmICh2ZWN0b3Ig
 JiAoMSA8PCAodW5pdCArIDEpKSkKCSAgICBpZiAoKGNoID0gY3Rsci0+aW50
 ZXJydXB0W3VuaXRdLmFyZ3VtZW50KSkKCQljdGxyLT5pbnRlcnJ1cHRbdW5p
 dF0uZnVuY3Rpb24oY2gpOwoJaWYgKHZlY3RvciAmICgxIDw8ICh1bml0ICsg
 NSkpKQoJICAgIGlmICgoY2ggPSBjdGxyLT5pbnRlcnJ1cHRbdW5pdF0uYXJn
 dW1lbnQpKQoJCWF0YV9wcm9taXNlX3F1ZXVlX2hwa3QoY3RsciwKCQkJCSAg
 ICAgICBodG9sZTMyKChjaC0+dW5pdCAqIEFUQV9QRENfQ0hOX09GRlNFVCkg
 KwoJCQkJCSAgICAgICBBVEFfUERDX0hQS1RfT0ZGU0VUKSk7CglpZiAodmVj
 dG9yICYgKDEgPDwgKHVuaXQgKyA5KSkpIHsKCSAgICBhdGFfcHJvbWlzZV9u
 ZXh0X2hwa3QoY3Rscik7CgkgICAgaWYgKChjaCA9IGN0bHItPmludGVycnVw
 dFt1bml0XS5hcmd1bWVudCkpCgkJY3Rsci0+aW50ZXJydXB0W3VuaXRdLmZ1
 bmN0aW9uKGNoKTsKCX0KCWlmICh2ZWN0b3IgJiAoMSA8PCAodW5pdCArIDEz
 KSkpIHsKCSAgICBhdGFfcHJvbWlzZV9uZXh0X2hwa3QoY3Rscik7CgkgICAg
 aWYgKChjaCA9IGN0bHItPmludGVycnVwdFt1bml0XS5hcmd1bWVudCkpCgkJ
 QVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDAwMGMwMjQwICsgKGNoLT51bml0
 IDw8IDcpLAoJCQkgaHRvbGUzMigoY2gtPnVuaXQgKiBBVEFfUERDX0NITl9P
 RkZTRVQpICsKCQkJIEFUQV9QRENfQVBLVF9PRkZTRVQpKTsKCX0KICAgIH0K
 fQoKc3RhdGljIGludAphdGFfcHJvbWlzZV9zeDRfY29tbWFuZChzdHJ1Y3Qg
 YXRhX3JlcXVlc3QgKnJlcXVlc3QpCnsKICAgIGRldmljZV90IGdwYXJlbnQg
 PSBHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpOwogICAgc3RydWN0IGF0YV9w
 Y2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVu
 dCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsKICAgIHN0
 cnVjdCBhdGFfZG1hX3ByZGVudHJ5ICpwcmQgPSBjaC0+ZG1hLT5zZzsKICAg
 IGNhZGRyX3Qgd2luZG93ID0gcm1hbl9nZXRfdmlydHVhbChjdGxyLT5yX3Jl
 czEpOwogICAgdV9pbnQzMl90ICp3b3JkcDsKICAgIGludCBpLCBpZHgsIGxl
 bmd0aCA9IDA7CgogICAgLyogWFhYIFNPUyBhZGQgQVRBUEkgY29tbWFuZHMg
 c3VwcG9ydCBsYXRlciAqLwogICAgc3dpdGNoIChyZXF1ZXN0LT51LmF0YS5j
 b21tYW5kKSB7ICAgIAoKICAgIGRlZmF1bHQ6CglyZXR1cm4gLTE7CgogICAg
 Y2FzZSBBVEFfQVRBX0lERU5USUZZOgogICAgY2FzZSBBVEFfUkVBRDoKICAg
 IGNhc2UgQVRBX1JFQUQ0ODoKICAgIGNhc2UgQVRBX1JFQURfTVVMOgogICAg
 Y2FzZSBBVEFfUkVBRF9NVUw0ODoKICAgIGNhc2UgQVRBX1dSSVRFOgogICAg
 Y2FzZSBBVEFfV1JJVEU0ODoKICAgIGNhc2UgQVRBX1dSSVRFX01VTDoKICAg
 IGNhc2UgQVRBX1dSSVRFX01VTDQ4OgoJQVRBX09VVEwoY3Rsci0+cl9yZXMy
 LCAweDAwMGMwNDAwICsgKChjaC0+dW5pdCArIDEpIDw8IDIpLCAweDAwMDAw
 MDAxKTsKCXJldHVybiBhdGFfZ2VuZXJpY19jb21tYW5kKHJlcXVlc3QpOwoK
 ICAgIGNhc2UgQVRBX1NFVEZFQVRVUkVTOgogICAgY2FzZSBBVEFfRkxVU0hD
 QUNIRToKICAgIGNhc2UgQVRBX0ZMVVNIQ0FDSEU0ODoKICAgIGNhc2UgQVRB
 X1NMRUVQOgogICAgY2FzZSBBVEFfU0VUX01VTFRJOgoJd29yZHAgPSAodV9p
 bnQzMl90ICopCgkgICAgKHdpbmRvdyArIChjaC0+dW5pdCAqIEFUQV9QRENf
 Q0hOX09GRlNFVCkgKyBBVEFfUERDX0FQS1RfT0ZGU0VUKTsKCXdvcmRwWzBd
 ID0gaHRvbGUzMigweDA4IHwgKChjaC0+dW5pdCArIDEpPDwxNikgfCAoMHgw
 MCA8PCAyNCkpOwoJd29yZHBbMV0gPSAwOwoJd29yZHBbMl0gPSAwOwoJYXRh
 X3Byb21pc2VfYXBrdCgodV9pbnQ4X3QgKil3b3JkcCwgcmVxdWVzdCk7CglB
 VEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDAwYzA0ODQsIDB4MDAwMDAwMDEp
 OwoJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDAwMGMwNDAwICsgKChjaC0+
 dW5pdCArIDEpIDw8IDIpLCAweDAwMDAwMDAxKTsKCUFUQV9PVVRMKGN0bHIt
 PnJfcmVzMiwgMHgwMDBjMDI0MCArIChjaC0+dW5pdCA8PCA3KSwKCQkgaHRv
 bGUzMigoY2gtPnVuaXQgKiBBVEFfUERDX0NITl9PRkZTRVQpK0FUQV9QRENf
 QVBLVF9PRkZTRVQpKTsKCXJldHVybiAwOwoKICAgIGNhc2UgQVRBX1JFQURf
 RE1BOgogICAgY2FzZSBBVEFfUkVBRF9ETUE0ODoKICAgIGNhc2UgQVRBX1dS
 SVRFX0RNQToKICAgIGNhc2UgQVRBX1dSSVRFX0RNQTQ4OgoJd29yZHAgPSAo
 dV9pbnQzMl90ICopCgkgICAgKHdpbmRvdyArIChjaC0+dW5pdCAqIEFUQV9Q
 RENfQ0hOX09GRlNFVCkgKyBBVEFfUERDX0hTR19PRkZTRVQpOwoJaSA9IGlk
 eCA9IDA7CglkbyB7CgkgICAgd29yZHBbaWR4KytdID0gcHJkW2ldLmFkZHI7
 CgkgICAgd29yZHBbaWR4KytdID0gcHJkW2ldLmNvdW50OwoJICAgIGxlbmd0
 aCArPSAocHJkW2ldLmNvdW50ICYgfkFUQV9ETUFfRU9UKTsKCX0gd2hpbGUg
 KCEocHJkW2krK10uY291bnQgJiBBVEFfRE1BX0VPVCkpOwoKCXdvcmRwID0g
 KHVfaW50MzJfdCAqKQoJICAgICh3aW5kb3cgKyAoY2gtPnVuaXQgKiBBVEFf
 UERDX0NITl9PRkZTRVQpICsgQVRBX1BEQ19MU0dfT0ZGU0VUKTsKCXdvcmRw
 WzBdID0gaHRvbGUzMigoY2gtPnVuaXQgKiBBVEFfUERDX0JVRl9PRkZTRVQp
 ICsgQVRBX1BEQ19CVUZfQkFTRSk7Cgl3b3JkcFsxXSA9IGh0b2xlMzIocmVx
 dWVzdC0+Ynl0ZWNvdW50IHwgQVRBX0RNQV9FT1QpOwoKCXdvcmRwID0gKHVf
 aW50MzJfdCAqKQoJICAgICh3aW5kb3cgKyAoY2gtPnVuaXQgKiBBVEFfUERD
 X0NITl9PRkZTRVQpICsgQVRBX1BEQ19BU0dfT0ZGU0VUKTsKCXdvcmRwWzBd
 ID0gaHRvbGUzMigoY2gtPnVuaXQgKiBBVEFfUERDX0JVRl9PRkZTRVQpICsg
 QVRBX1BEQ19CVUZfQkFTRSk7Cgl3b3JkcFsxXSA9IGh0b2xlMzIocmVxdWVz
 dC0+Ynl0ZWNvdW50IHwgQVRBX0RNQV9FT1QpOwoKCXdvcmRwID0gKHVfaW50
 MzJfdCAqKQoJICAgICh3aW5kb3cgKyAoY2gtPnVuaXQgKiBBVEFfUERDX0NI
 Tl9PRkZTRVQpICsgQVRBX1BEQ19IUEtUX09GRlNFVCk7CglpZiAocmVxdWVz
 dC0+ZmxhZ3MgJiBBVEFfUl9SRUFEKQoJICAgIHdvcmRwWzBdID0gaHRvbGUz
 MigweDE0IHwgKChjaC0+dW5pdCs5KTw8MTYpIHwgKChjaC0+dW5pdCs1KTw8
 MjQpKTsKCWlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1dSSVRFKQoJICAg
 IHdvcmRwWzBdID0gaHRvbGUzMigweDAwIHwgKChjaC0+dW5pdCsxMyk8PDE2
 KSB8ICgweDAwPDwyNCkpOwoJd29yZHBbMV0gPSBodG9sZTMyKChjaC0+dW5p
 dCAqIEFUQV9QRENfQ0hOX09GRlNFVCkrQVRBX1BEQ19IU0dfT0ZGU0VUKTsK
 CXdvcmRwWzJdID0gaHRvbGUzMigoY2gtPnVuaXQgKiBBVEFfUERDX0NITl9P
 RkZTRVQpK0FUQV9QRENfTFNHX09GRlNFVCk7Cgl3b3JkcFszXSA9IDA7CgoJ
 d29yZHAgPSAodV9pbnQzMl90ICopCgkgICAgKHdpbmRvdyArIChjaC0+dW5p
 dCAqIEFUQV9QRENfQ0hOX09GRlNFVCkgKyBBVEFfUERDX0FQS1RfT0ZGU0VU
 KTsKCWlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpCgkgICAgd29y
 ZHBbMF0gPSBodG9sZTMyKDB4MDQgfCAoKGNoLT51bml0KzUpPDwxNikgfCAo
 MHgwMDw8MjQpKTsKCWlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1dSSVRF
 KQoJICAgIHdvcmRwWzBdID0gaHRvbGUzMigweDEwIHwgKChjaC0+dW5pdCsx
 KTw8MTYpIHwgKChjaC0+dW5pdCsxMyk8PDI0KSk7Cgl3b3JkcFsxXSA9IGh0
 b2xlMzIoKGNoLT51bml0ICogQVRBX1BEQ19DSE5fT0ZGU0VUKStBVEFfUERD
 X0FTR19PRkZTRVQpOwoJd29yZHBbMl0gPSAwOwoJYXRhX3Byb21pc2VfYXBr
 dCgodV9pbnQ4X3QgKil3b3JkcCwgcmVxdWVzdCk7CglBVEFfT1VUTChjdGxy
 LT5yX3JlczIsIDB4MDAwYzA0ODQsIDB4MDAwMDAwMDEpOwoKCWlmIChyZXF1
 ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpIHsKCSAgICBBVEFfT1VUTChjdGxy
 LT5yX3JlczIsIDB4MDAwYzA0MDAgKyAoKGNoLT51bml0KzUpPDwyKSwgMHgw
 MDAwMDAwMSk7CgkgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDAwMGMw
 NDAwICsgKChjaC0+dW5pdCs5KTw8MiksIDB4MDAwMDAwMDEpOwoJICAgIEFU
 QV9PVVRMKGN0bHItPnJfcmVzMiwgMHgwMDBjMDI0MCArIChjaC0+dW5pdCA8
 PCA3KSwKCQlodG9sZTMyKChjaC0+dW5pdCAqIEFUQV9QRENfQ0hOX09GRlNF
 VCkgKyBBVEFfUERDX0FQS1RfT0ZGU0VUKSk7Cgl9CglpZiAocmVxdWVzdC0+
 ZmxhZ3MgJiBBVEFfUl9XUklURSkgewoJICAgIEFUQV9PVVRMKGN0bHItPnJf
 cmVzMiwgMHgwMDBjMDQwMCArICgoY2gtPnVuaXQrMSk8PDIpLCAweDAwMDAw
 MDAxKTsKCSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDAwYzA0MDAg
 KyAoKGNoLT51bml0KzEzKTw8MiksIDB4MDAwMDAwMDEpOwoJICAgIGF0YV9w
 cm9taXNlX3F1ZXVlX2hwa3QoY3RsciwKCQlodG9sZTMyKChjaC0+dW5pdCAq
 IEFUQV9QRENfQ0hOX09GRlNFVCkgKyBBVEFfUERDX0hQS1RfT0ZGU0VUKSk7
 Cgl9CglyZXR1cm4gMDsKICAgIH0KfQoKc3RhdGljIGludAphdGFfcHJvbWlz
 ZV9hcGt0KHVfaW50OF90ICpieXRlcCwgc3RydWN0IGF0YV9yZXF1ZXN0ICpy
 ZXF1ZXN0KQp7IAogICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRl
 dmljZV9nZXRfc29mdGMocmVxdWVzdC0+ZGV2KTsKICAgIGludCBpID0gMTI7
 CgogICAgYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRF
 X1JFRyB8IEFUQV9QRENfV0FJVF9OQlVTWXxBVEFfRFJJVkU7CiAgICBieXRl
 cFtpKytdID0gQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgYXRhZGV2LT51bml0
 OwogICAgYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRF
 X0NUTDsKICAgIGJ5dGVwW2krK10gPSBBVEFfQV80QklUOwoKICAgIGlmIChh
 dGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CglieXRlcFtp
 KytdID0gQVRBX1BEQ18yQiB8IEFUQV9QRENfV1JJVEVfUkVHIHwgQVRBX0ZF
 QVRVUkU7CglieXRlcFtpKytdID0gcmVxdWVzdC0+dS5hdGEuZmVhdHVyZSA+
 PiA4OwoJYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmU7Cgli
 eXRlcFtpKytdID0gQVRBX1BEQ18yQiB8IEFUQV9QRENfV1JJVEVfUkVHIHwg
 QVRBX0NPVU5UOwoJYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmNvdW50
 ID4+IDg7CglieXRlcFtpKytdID0gcmVxdWVzdC0+dS5hdGEuY291bnQ7Cgli
 eXRlcFtpKytdID0gQVRBX1BEQ18yQiB8IEFUQV9QRENfV1JJVEVfUkVHIHwg
 QVRBX1NFQ1RPUjsKCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5sYmEg
 Pj4gMjQ7CglieXRlcFtpKytdID0gcmVxdWVzdC0+dS5hdGEubGJhOwoJYnl0
 ZXBbaSsrXSA9IEFUQV9QRENfMkIgfCBBVEFfUERDX1dSSVRFX1JFRyB8IEFU
 QV9DWUxfTFNCOwoJYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+
 PiAzMjsKCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5sYmEgPj4gODsK
 CWJ5dGVwW2krK10gPSBBVEFfUERDXzJCIHwgQVRBX1BEQ19XUklURV9SRUcg
 fCBBVEFfQ1lMX01TQjsKCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5s
 YmEgPj4gNDA7CglieXRlcFtpKytdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+
 IDE2OwoJYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRF
 X1JFRyB8IEFUQV9EUklWRTsKCWJ5dGVwW2krK10gPSBBVEFfRF9MQkEgfCBh
 dGFkZXYtPnVuaXQ7CiAgICB9CiAgICBlbHNlIHsKCWJ5dGVwW2krK10gPSBB
 VEFfUERDXzFCIHwgQVRBX1BEQ19XUklURV9SRUcgfCBBVEFfRkVBVFVSRTsK
 CWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5mZWF0dXJlOwoJYnl0ZXBb
 aSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRFX1JFRyB8IEFUQV9D
 T1VOVDsKCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5jb3VudDsKCWJ5
 dGVwW2krK10gPSBBVEFfUERDXzFCIHwgQVRBX1BEQ19XUklURV9SRUcgfCBB
 VEFfU0VDVE9SOwoJYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmxiYTsK
 CWJ5dGVwW2krK10gPSBBVEFfUERDXzFCIHwgQVRBX1BEQ19XUklURV9SRUcg
 fCBBVEFfQ1lMX0xTQjsKCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5s
 YmEgPj4gODsKCWJ5dGVwW2krK10gPSBBVEFfUERDXzFCIHwgQVRBX1BEQ19X
 UklURV9SRUcgfCBBVEFfQ1lMX01TQjsKCWJ5dGVwW2krK10gPSByZXF1ZXN0
 LT51LmF0YS5sYmEgPj4gMTY7CglieXRlcFtpKytdID0gQVRBX1BEQ18xQiB8
 IEFUQV9QRENfV1JJVEVfUkVHIHwgQVRBX0RSSVZFOwoJYnl0ZXBbaSsrXSA9
 IChhdGFkZXYtPmZsYWdzICYgQVRBX0RfVVNFX0NIUyA/IDAgOiBBVEFfRF9M
 QkEpIHwKCQkgICBBVEFfRF9JQk0gfCBhdGFkZXYtPnVuaXQgfCAoKHJlcXVl
 c3QtPnUuYXRhLmxiYSA+PiAyNCkmMHhmKTsKICAgIH0KICAgIGJ5dGVwW2kr
 K10gPSBBVEFfUERDXzFCIHwgQVRBX1BEQ19XUklURV9FTkQgfCBBVEFfQ09N
 TUFORDsKICAgIGJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5k
 OwogICAgcmV0dXJuIGk7Cn0KCnN0YXRpYyB2b2lkCmF0YV9wcm9taXNlX3F1
 ZXVlX2hwa3Qoc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciwgdV9p
 bnQzMl90IGhwa3QpCnsKICAgIHN0cnVjdCBhdGFfcHJvbWlzZV9zeDQgKmhw
 a3RwID0gZGV2aWNlX2dldF9pdmFycyhjdGxyLT5kZXYpOwoKICAgIG10eF9s
 b2NrKCZocGt0cC0+bXR4KTsKICAgIGlmIChocGt0cC0+YnVzeSkgewoJc3Ry
 dWN0IGhvc3RfcGFja2V0ICpocCA9IAoJICAgIG1hbGxvYyhzaXplb2Yoc3Ry
 dWN0IGhvc3RfcGFja2V0KSwgTV9URU1QLCBNX05PV0FJVCB8IE1fWkVSTyk7
 CglocC0+YWRkciA9IGhwa3Q7CglUQUlMUV9JTlNFUlRfVEFJTCgmaHBrdHAt
 PnF1ZXVlLCBocCwgY2hhaW4pOwogICAgfQogICAgZWxzZSB7CglocGt0cC0+
 YnVzeSA9IDE7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDAwYzAxMDAs
 IGhwa3QpOwogICAgfQogICAgbXR4X3VubG9jaygmaHBrdHAtPm10eCk7Cn0K
 CnN0YXRpYyB2b2lkCmF0YV9wcm9taXNlX25leHRfaHBrdChzdHJ1Y3QgYXRh
 X3BjaV9jb250cm9sbGVyICpjdGxyKQp7CiAgICBzdHJ1Y3QgYXRhX3Byb21p
 c2Vfc3g0ICpocGt0cCA9IGRldmljZV9nZXRfaXZhcnMoY3Rsci0+ZGV2KTsK
 ICAgIHN0cnVjdCBob3N0X3BhY2tldCAqaHA7CgogICAgbXR4X2xvY2soJmhw
 a3RwLT5tdHgpOwogICAgaWYgKChocCA9IFRBSUxRX0ZJUlNUKCZocGt0cC0+
 cXVldWUpKSkgewoJVEFJTFFfUkVNT1ZFKCZocGt0cC0+cXVldWUsIGhwLCBj
 aGFpbik7CglBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDAwYzAxMDAsIGhw
 LT5hZGRyKTsKCWZyZWUoaHAsIE1fVEVNUCk7CiAgICB9CiAgICBlbHNlCglo
 cGt0cC0+YnVzeSA9IDA7CiAgICBtdHhfdW5sb2NrKCZocGt0cC0+bXR4KTsK
 fQoKCi8qCiAqIFNlcnZlcldvcmtzIGNoaXBzZXQgc3VwcG9ydCBmdW5jdGlv
 bnMKICovCmludAphdGFfc2VydmVyd29ya3NfaWRlbnQoZGV2aWNlX3QgZGV2
 KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2
 aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lkICpp
 ZHg7CiAgICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0KICAg
 IHt7IEFUQV9ST1NCNCwgICAgIDB4MDAsIFNXS1MzMywgIDAsIEFUQV9VRE1B
 MiwgIlJPU0I0IiB9LAogICAgIHsgQVRBX0NTQjUsICAgICAgMHg5MiwgU1dL
 UzEwMCwgMCwgQVRBX1VETUE1LCAiQ1NCNSIgfSwKICAgICB7IEFUQV9DU0I1
 LCAgICAgIDB4MDAsIFNXS1M2NiwgIDAsIEFUQV9VRE1BNCwgIkNTQjUiIH0s
 CiAgICAgeyBBVEFfQ1NCNiwgICAgICAweDAwLCBTV0tTMTAwLCAwLCBBVEFf
 VURNQTUsICJDU0I2IiB9LAogICAgIHsgQVRBX0NTQjZfMSwgICAgMHgwMCwg
 U1dLUzY2LCAgMCwgQVRBX1VETUE0LCAiQ1NCNiIgfSwKICAgICB7IEFUQV9I
 VDEwMDAsICAgIDB4MDAsIFNXS1MxMDAsIDAsIEFUQV9VRE1BNSwgIkhUMTAw
 MCIgfSwKICAgICB7IEFUQV9IVDEwMDBfUzEsIDB4MDAsIFNXS1MxMDAsIDQs
 IEFUQV9TQTE1MCwgIkhUMTAwMCIgfSwKICAgICB7IEFUQV9IVDEwMDBfUzIs
 IDB4MDAsIFNXS1NNSU8sIDQsIEFUQV9TQTE1MCwgIkhUMTAwMCIgfSwKICAg
 ICB7IEFUQV9LMiwgICAgICAgIDB4MDAsIFNXS1NNSU8sIDQsIEFUQV9TQTE1
 MCwgIksyIiB9LAogICAgIHsgQVRBX0ZST0RPNCwgICAgMHgwMCwgU1dLU01J
 TywgNCwgQVRBX1NBMTUwLCAiRnJvZG80IiB9LAogICAgIHsgQVRBX0ZST0RP
 OCwgICAgMHgwMCwgU1dLU01JTywgOCwgQVRBX1NBMTUwLCAiRnJvZG84IiB9
 LAogICAgIHsgMCwgMCwgMCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJb
 NjRdOwoKICAgIGlmICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRz
 KSkpCglyZXR1cm4gRU5YSU87CgogICAgc3ByaW50ZihidWZmZXIsICJTZXJ2
 ZXJXb3JrcyAlcyAlcyBjb250cm9sbGVyIiwKCSAgICBpZHgtPnRleHQsIGF0
 YV9tb2RlMnN0cihpZHgtPm1heF9kbWEpKTsKICAgIGRldmljZV9zZXRfZGVz
 Y19jb3B5KGRldiwgYnVmZmVyKTsKICAgIGN0bHItPmNoaXAgPSBpZHg7CiAg
 ICBjdGxyLT5jaGlwaW5pdCA9IGF0YV9zZXJ2ZXJ3b3Jrc19jaGlwaW5pdDsK
 ICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CmF0YV9zZXJ2ZXJ3b3Jrc19j
 aGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2Nv
 bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAg
 aWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsK
 CiAgICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMSA9PSBTV0tTTUlPKSB7CgljdGxy
 LT5yX3R5cGUyID0gU1lTX1JFU19NRU1PUlk7CgljdGxyLT5yX3JpZDIgPSBQ
 Q0lSX0JBUig1KTsKCWlmICghKGN0bHItPnJfcmVzMiA9IGJ1c19hbGxvY19y
 ZXNvdXJjZV9hbnkoZGV2LCBjdGxyLT5yX3R5cGUyLAoJCQkJCQkgICAgJmN0
 bHItPnJfcmlkMiwgUkZfQUNUSVZFKSkpCgkgICAgcmV0dXJuIEVOWElPOwoK
 CWN0bHItPmNoYW5uZWxzID0gY3Rsci0+Y2hpcC0+Y2ZnMjsKCWN0bHItPmFs
 bG9jYXRlID0gYXRhX3NlcnZlcndvcmtzX2FsbG9jYXRlOwoJY3Rsci0+c2V0
 bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CglyZXR1cm4gMDsKICAgIH0KICAg
 IGVsc2UgaWYgKGN0bHItPmNoaXAtPmNmZzEgPT0gU1dLUzMzKSB7CglkZXZp
 Y2VfdCAqY2hpbGRyZW47CglpbnQgbmNoaWxkcmVuLCBpOwoKCS8qIGxvY2F0
 ZSB0aGUgSVNBIHBhcnQgaW4gdGhlIHNvdXRoYnJpZGdlIGFuZCBlbmFibGUg
 VURNQTMzICovCglpZiAoIWRldmljZV9nZXRfY2hpbGRyZW4oZGV2aWNlX2dl
 dF9wYXJlbnQoZGV2KSwgJmNoaWxkcmVuLCZuY2hpbGRyZW4pKXsKCSAgICBm
 b3IgKGkgPSAwOyBpIDwgbmNoaWxkcmVuOyBpKyspIHsKCQlpZiAocGNpX2dl
 dF9kZXZpZChjaGlsZHJlbltpXSkgPT0gQVRBX1JPU0I0X0lTQSkgewoJCSAg
 ICBwY2lfd3JpdGVfY29uZmlnKGNoaWxkcmVuW2ldLCAweDY0LAoJCQkJICAg
 ICAocGNpX3JlYWRfY29uZmlnKGNoaWxkcmVuW2ldLCAweDY0LCA0KSAmCgkJ
 CQkgICAgICB+MHgwMDAwMjAwMCkgfCAweDAwMDA0MDAwLCA0KTsKCQkgICAg
 YnJlYWs7CgkJfQoJICAgIH0KCSAgICBmcmVlKGNoaWxkcmVuLCBNX1RFTVAp
 OwoJfQogICAgfQogICAgZWxzZSB7CglwY2lfd3JpdGVfY29uZmlnKGRldiwg
 MHg1YSwKCQkJIChwY2lfcmVhZF9jb25maWcoZGV2LCAweDVhLCAxKSAmIH4w
 eDQwKSB8CgkJCSAoY3Rsci0+Y2hpcC0+Y2ZnMSA9PSBTV0tTMTAwKSA/IDB4
 MDMgOiAweDAyLCAxKTsKICAgIH0KICAgIGN0bHItPnNldG1vZGUgPSBhdGFf
 c2VydmVyd29ya3Nfc2V0bW9kZTsKICAgIHJldHVybiAwOwp9CgpzdGF0aWMg
 aW50CmF0YV9zZXJ2ZXJ3b3Jrc19hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCnsK
 ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0
 IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAg
 IGludCBjaF9vZmZzZXQ7CiAgICBpbnQgaTsKCiAgICBjaF9vZmZzZXQgPSBj
 aC0+dW5pdCAqIDB4MTAwOwoKICAgIGZvciAoaSA9IEFUQV9EQVRBOyBpIDwg
 QVRBX01BWF9SRVM7IGkrKykKCWNoLT5yX2lvW2ldLnJlcyA9IGN0bHItPnJf
 cmVzMjsKCiAgICAvKiBzZXR1cCBBVEEgcmVnaXN0ZXJzICovCiAgICBjaC0+
 cl9pb1tBVEFfREFUQV0ub2Zmc2V0ID0gY2hfb2Zmc2V0ICsgMHgwMDsKICAg
 IGNoLT5yX2lvW0FUQV9GRUFUVVJFXS5vZmZzZXQgPSBjaF9vZmZzZXQgKyAw
 eDA0OwogICAgY2gtPnJfaW9bQVRBX0NPVU5UXS5vZmZzZXQgPSBjaF9vZmZz
 ZXQgKyAweDA4OwogICAgY2gtPnJfaW9bQVRBX1NFQ1RPUl0ub2Zmc2V0ID0g
 Y2hfb2Zmc2V0ICsgMHgwYzsKICAgIGNoLT5yX2lvW0FUQV9DWUxfTFNCXS5v
 ZmZzZXQgPSBjaF9vZmZzZXQgKyAweDEwOwogICAgY2gtPnJfaW9bQVRBX0NZ
 TF9NU0JdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MTQ7CiAgICBjaC0+cl9p
 b1tBVEFfRFJJVkVdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MTg7CiAgICBj
 aC0+cl9pb1tBVEFfQ09NTUFORF0ub2Zmc2V0ID0gY2hfb2Zmc2V0ICsgMHgx
 YzsKICAgIGNoLT5yX2lvW0FUQV9DT05UUk9MXS5vZmZzZXQgPSBjaF9vZmZz
 ZXQgKyAweDIwOwogICAgYXRhX2RlZmF1bHRfcmVnaXN0ZXJzKGRldik7Cgog
 ICAgLyogc2V0dXAgRE1BIHJlZ2lzdGVycyAqLwogICAgY2gtPnJfaW9bQVRB
 X0JNQ01EX1BPUlRdLm9mZnNldCA9IGNoX29mZnNldCArIDB4MzA7CiAgICBj
 aC0+cl9pb1tBVEFfQk1TVEFUX1BPUlRdLm9mZnNldCA9IGNoX29mZnNldCAr
 IDB4MzI7CiAgICBjaC0+cl9pb1tBVEFfQk1EVFBfUE9SVF0ub2Zmc2V0ID0g
 Y2hfb2Zmc2V0ICsgMHgzNDsKCiAgICAvKiBzZXR1cCBTQVRBIHJlZ2lzdGVy
 cyAqLwogICAgY2gtPnJfaW9bQVRBX1NTVEFUVVNdLm9mZnNldCA9IGNoX29m
 ZnNldCArIDB4NDA7CiAgICBjaC0+cl9pb1tBVEFfU0VSUk9SXS5vZmZzZXQg
 PSBjaF9vZmZzZXQgKyAweDQ0OwogICAgY2gtPnJfaW9bQVRBX1NDT05UUk9M
 XS5vZmZzZXQgPSBjaF9vZmZzZXQgKyAweDQ4OwoKICAgIGNoLT5mbGFncyB8
 PSBBVEFfTk9fU0xBVkU7CiAgICBhdGFfcGNpX2h3KGRldik7CiAgICByZXR1
 cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX3NlcnZlcndvcmtzX3NldG1vZGUo
 ZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKewogICAgZGV2aWNlX3QgZ3BhcmVu
 dCA9IEdSQU5EUEFSRU5UKGRldik7CiAgICBzdHJ1Y3QgYXRhX3BjaV9jb250
 cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAg
 IHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
 dmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9kZXZpY2Ug
 KmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGludCBkZXZu
 byA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsK
 ICAgIGludCBvZmZzZXQgPSAoZGV2bm8gXiAweDAxKSA8PCAzOwogICAgaW50
 IGVycm9yOwogICAgdV9pbnQ4X3QgcGlvdGltaW5nc1tdID0geyAweDVkLCAw
 eDQ3LCAweDM0LCAweDIyLCAweDIwLCAweDM0LCAweDIyLCAweDIwLAoJCQkg
 ICAgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwIH07CiAg
 ICB1X2ludDhfdCBkbWF0aW1pbmdzW10gPSB7IDB4NzcsIDB4MjEsIDB4MjAg
 fTsKCiAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxy
 LT5jaGlwLT5tYXhfZG1hKTsKCiAgICBtb2RlID0gYXRhX2NoZWNrXzgwcGlu
 KGRldiwgbW9kZSk7CgogICAgZXJyb3IgPSBhdGFfY29udHJvbGNtZChkZXYs
 IEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUpOwoK
 ICAgIGlmIChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoZGV2LCAiJXNz
 ZXR0aW5nICVzIG9uICVzIGNoaXBcbiIsCgkJICAgICAgKGVycm9yKSA/ICJG
 QUlMVVJFICIgOiAiIiwKCQkgICAgICBhdGFfbW9kZTJzdHIobW9kZSksIGN0
 bHItPmNoaXAtPnRleHQpOwogICAgaWYgKCFlcnJvcikgewoJaWYgKG1vZGUg
 Pj0gQVRBX1VETUEwKSB7CgkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50
 LCAweDU2LCAKCQkJICAgICAocGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4
 NTYsIDIpICYKCQkJICAgICAgfigweGYgPDwgKGRldm5vIDw8IDIpKSkgfAoJ
 CQkgICAgICgobW9kZSAmIEFUQV9NT0RFX01BU0spIDw8IChkZXZubyA8PCAy
 KSksIDIpOwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1NCwK
 CQkJICAgICBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NCwgMSkgfAoJ
 CQkgICAgICgweDAxIDw8IGRldm5vKSwgMSk7CgkgICAgcGNpX3dyaXRlX2Nv
 bmZpZyhncGFyZW50LCAweDQ0LCAKCQkJICAgICAocGNpX3JlYWRfY29uZmln
 KGdwYXJlbnQsIDB4NDQsIDQpICYKCQkJICAgICAgfigweGZmIDw8IG9mZnNl
 dCkpIHwKCQkJICAgICAoZG1hdGltaW5nc1syXSA8PCBvZmZzZXQpLCA0KTsK
 CX0KCWVsc2UgaWYgKG1vZGUgPj0gQVRBX1dETUEwKSB7CgkgICAgcGNpX3dy
 aXRlX2NvbmZpZyhncGFyZW50LCAweDU0LAoJCQkgICAgIHBjaV9yZWFkX2Nv
 bmZpZyhncGFyZW50LCAweDU0LCAxKSAmCgkJCSAgICAgIH4oMHgwMSA8PCBk
 ZXZubyksIDEpOwoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0
 NCwgCgkJCSAgICAgKHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDQ0LCA0
 KSAmCgkJCSAgICAgIH4oMHhmZiA8PCBvZmZzZXQpKSB8CgkJCSAgICAgKGRt
 YXRpbWluZ3NbbW9kZSAmIEFUQV9NT0RFX01BU0tdIDw8IG9mZnNldCksIDQp
 OwoJfQoJZWxzZQoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg1
 NCwKCQkJICAgICBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NCwgMSkg
 JgoJCQkgICAgIH4oMHgwMSA8PCBkZXZubyksIDEpOwoKCXBjaV93cml0ZV9j
 b25maWcoZ3BhcmVudCwgMHg0MCwgCgkJCSAocGNpX3JlYWRfY29uZmlnKGdw
 YXJlbnQsIDB4NDAsIDQpICYKCQkJICB+KDB4ZmYgPDwgb2Zmc2V0KSkgfAoJ
 CQkgKHBpb3RpbWluZ3NbYXRhX21vZGUyaWR4KG1vZGUpXSA8PCBvZmZzZXQp
 LCA0KTsKCWF0YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKgogKiBT
 aWxpY29uIEltYWdlIEluYy4gKFNpSSkgKGZvcm1lciBDTUQpIGNoaXBzZXQg
 c3VwcG9ydCBmdW5jdGlvbnMKICovCmludAphdGFfc2lpX2lkZW50KGRldmlj
 ZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rs
 ciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgIHN0cnVjdCBhdGFfY2hp
 cF9pZCAqaWR4OwogICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNb
 XSA9CiAgICB7eyBBVEFfU0lJMzExNCwgICAweDAwLCBTSUlNRU1JTywgU0lJ
 NENILCAgICBBVEFfU0ExNTAsICJTaUkgMzExNCIgfSwKICAgICB7IEFUQV9T
 SUkzNTEyLCAgIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1
 MCwgIlNpSSAzNTEyIiB9LAogICAgIHsgQVRBX1NJSTMxMTIsICAgMHgwMiwg
 U0lJTUVNSU8sIDAsICAgICAgICAgQVRBX1NBMTUwLCAiU2lJIDMxMTIiIH0s
 CiAgICAgeyBBVEFfU0lJMzExMl8xLCAweDAyLCBTSUlNRU1JTywgMCwgICAg
 ICAgICBBVEFfU0ExNTAsICJTaUkgMzExMiIgfSwKICAgICB7IEFUQV9TSUkz
 NTEyLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwg
 IlNpSSAzNTEyIiB9LAogICAgIHsgQVRBX1NJSTMxMTIsICAgMHgwMCwgU0lJ
 TUVNSU8sIFNJSUJVRywgICAgQVRBX1NBMTUwLCAiU2lJIDMxMTIiIH0sCiAg
 ICAgeyBBVEFfU0lJMzExMl8xLCAweDAwLCBTSUlNRU1JTywgU0lJQlVHLCAg
 ICBBVEFfU0ExNTAsICJTaUkgMzExMiIgfSwKICAgICB7IEFUQV9TSUkwNjgw
 LCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlTRVRDTEssIEFUQV9VRE1BNiwgIlNp
 SSAwNjgwIiB9LAogICAgIHsgQVRBX0NNRDY0OSwgICAgMHgwMCwgMCwgICAg
 ICAgIFNJSUlOVFIsICAgQVRBX1VETUE1LCAiQ01EIDY0OSIgfSwKICAgICB7
 IEFUQV9DTUQ2NDgsICAgIDB4MDAsIDAsICAgICAgICBTSUlJTlRSLCAgIEFU
 QV9VRE1BNCwgIkNNRCA2NDgiIH0sCiAgICAgeyBBVEFfQ01ENjQ2LCAgICAw
 eDA3LCAwLCAgICAgICAgMCwgICAgICAgICBBVEFfVURNQTIsICJDTUQgNjQ2
 VTIiIH0sCiAgICAgeyBBVEFfQ01ENjQ2LCAgICAweDAwLCAwLCAgICAgICAg
 MCwgICAgICAgICBBVEFfV0RNQTIsICJDTUQgNjQ2IiB9LAogICAgIHsgMCwg
 MCwgMCwgMCwgMCwgMH19OwogICAgY2hhciBidWZmZXJbNjRdOwoKICAgIGlm
 ICghKGlkeCA9IGF0YV9tYXRjaF9jaGlwKGRldiwgaWRzKSkpCglyZXR1cm4g
 RU5YSU87CgogICAgc3ByaW50ZihidWZmZXIsICIlcyAlcyBjb250cm9sbGVy
 IiwgaWR4LT50ZXh0LCBhdGFfbW9kZTJzdHIoaWR4LT5tYXhfZG1hKSk7CiAg
 ICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1ZmZlcik7CiAgICBjdGxy
 LT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfc2lpX2No
 aXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX3NpaV9j
 aGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2Nv
 bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAg
 aWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKCXJldHVybiBFTlhJTzsK
 CiAgICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMSA9PSBTSUlNRU1JTykgewoJY3Rs
 ci0+cl90eXBlMiA9IFNZU19SRVNfTUVNT1JZOwoJY3Rsci0+cl9yaWQyID0g
 UENJUl9CQVIoNSk7CglpZiAoIShjdGxyLT5yX3JlczIgPSBidXNfYWxsb2Nf
 cmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBlMiwKCQkJCQkJICAgICZj
 dGxyLT5yX3JpZDIsIFJGX0FDVElWRSkpKQoJICAgIHJldHVybiBFTlhJTzsK
 CglpZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIFNJSVNFVENMSykgewoJICAgIGlm
 ICgocGNpX3JlYWRfY29uZmlnKGRldiwgMHg4YSwgMSkgJiAweDMwKSAhPSAw
 eDEwKQoJCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDhhLCAKCQkJCSAocGNp
 X3JlYWRfY29uZmlnKGRldiwgMHg4YSwgMSkgJiAweGNmKXwweDEwLDEpOwoJ
 ICAgIGlmICgocGNpX3JlYWRfY29uZmlnKGRldiwgMHg4YSwgMSkgJiAweDMw
 KSAhPSAweDEwKQoJCWRldmljZV9wcmludGYoZGV2LCAiJXMgY291bGQgbm90
 IHNldCBBVEExMzMgY2xvY2tcbiIsCgkJCSAgICAgIGN0bHItPmNoaXAtPnRl
 eHQpOwoJfQoKCS8qIGlmIHdlIGhhdmUgNCBjaGFubmVscyBlbmFibGUgdGhl
 IHNlY29uZCBzZXQgKi8KCWlmIChjdGxyLT5jaGlwLT5jZmcyICYgU0lJNENI
 KSB7CgkgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDAyMDAsIDB4MDAw
 MDAwMDIpOwoJICAgIGN0bHItPmNoYW5uZWxzID0gNDsKCX0KCgkvKiBlbmFi
 bGUgUENJIGludGVycnVwdCBhcyBCSU9TIG1pZ2h0IG5vdCAqLwoJcGNpX3dy
 aXRlX2NvbmZpZyhkZXYsIDB4OGEsIChwY2lfcmVhZF9jb25maWcoZGV2LCAw
 eDhhLCAxKSAmIDB4M2YpLCAxKTsKCgkvKiBkb250IGJsb2NrIGludGVycnVw
 dHMgZnJvbSBhbnkgY2hhbm5lbCAqLwoJcGNpX3dyaXRlX2NvbmZpZyhkZXYs
 IDB4NDgsCgkJCSAocGNpX3JlYWRfY29uZmlnKGRldiwgMHg0OCwgNCkgJiB+
 MHgwM2MwMDAwMCksIDQpOwoKCWN0bHItPmFsbG9jYXRlID0gYXRhX3NpaV9h
 bGxvY2F0ZTsKCWlmIChjdGxyLT5jaGlwLT5tYXhfZG1hID49IEFUQV9TQTE1
 MCkgewoJICAgIGN0bHItPnJlc2V0ID0gYXRhX3NpaV9yZXNldDsKCSAgICBj
 dGxyLT5zZXRtb2RlID0gYXRhX3NhdGFfc2V0bW9kZTsKCX0KCWVsc2UKCSAg
 ICBjdGxyLT5zZXRtb2RlID0gYXRhX3NpaV9zZXRtb2RlOwogICAgfQogICAg
 ZWxzZSB7CglpZiAoKHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NTEsIDEpICYg
 MHgwOCkgIT0gMHgwOCkgewoJICAgIGRldmljZV9wcmludGYoZGV2LCAiSFcg
 aGFzIHNlY29uZGFyeSBjaGFubmVsIGRpc2FibGVkXG4iKTsKCSAgICBjdGxy
 LT5jaGFubmVscyA9IDE7Cgl9ICAgIAoKCS8qIGVuYWJsZSBpbnRlcnJ1cHQg
 YXMgQklPUyBtaWdodCBub3QgKi8KCXBjaV93cml0ZV9jb25maWcoZGV2LCAw
 eDcxLCAweDAxLCAxKTsKCgljdGxyLT5hbGxvY2F0ZSA9IGF0YV9jbWRfYWxs
 b2NhdGU7CgljdGxyLT5zZXRtb2RlID0gYXRhX2NtZF9zZXRtb2RlOwogICAg
 fQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2NtZF9hbGxvY2F0
 ZShkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xs
 ZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50
 KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2KTsKCiAgICAvKiBzZXR1cCB0aGUgdXN1YWwgcmVnaXN0
 ZXIgbm9ybWFsIHBjaSBzdHlsZSAqLwogICAgaWYgKGF0YV9wY2lfYWxsb2Nh
 dGUoZGV2KSkKCXJldHVybiBFTlhJTzsKCiAgICBpZiAoY3Rsci0+Y2hpcC0+
 Y2ZnMiAmIFNJSUlOVFIpCgljaC0+aHcuc3RhdHVzID0gYXRhX2NtZF9zdGF0
 dXM7CgogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX2NtZF9zdGF0
 dXMoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo
 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgdV9pbnQ4X3QgcmVnNzE7
 CgogICAgaWYgKCgocmVnNzEgPSBwY2lfcmVhZF9jb25maWcoZGV2aWNlX2dl
 dF9wYXJlbnQoY2gtPmRldiksIDB4NzEsIDEpKSAmCgkgKGNoLT51bml0ID8g
 MHgwOCA6IDB4MDQpKSkgewoJcGNpX3dyaXRlX2NvbmZpZyhkZXZpY2VfZ2V0
 X3BhcmVudChjaC0+ZGV2KSwgMHg3MSwKCQkJIHJlZzcxICYgfihjaC0+dW5p
 dCA/IDB4MDQgOiAweDA4KSwgMSk7CglyZXR1cm4gYXRhX3BjaV9zdGF0dXMo
 ZGV2KTsKICAgIH0KICAgIHJldHVybiAwOwp9CgpzdGF0aWMgdm9pZAphdGFf
 Y21kX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKewogICAgZGV2
 aWNlX3QgZ3BhcmVudCA9IEdSQU5EUEFSRU5UKGRldik7CiAgICBzdHJ1Y3Qg
 YXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0Yyhn
 cGFyZW50KTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf
 Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgc3RydWN0
 IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
 ICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRh
 ZGV2LT51bml0KTsKICAgIGludCBlcnJvcjsKCiAgICBtb2RlID0gYXRhX2xp
 bWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlwLT5tYXhfZG1hKTsKCiAg
 ICBtb2RlID0gYXRhX2NoZWNrXzgwcGluKGRldiwgbW9kZSk7CgogICAgZXJy
 b3IgPSBhdGFfY29udHJvbGNtZChkZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRB
 X1NGX1NFVFhGRVIsIDAsIG1vZGUpOwoKICAgIGlmIChib290dmVyYm9zZSkK
 CWRldmljZV9wcmludGYoZGV2LCAiJXNzZXR0aW5nICVzIG9uICVzIGNoaXBc
 biIsCgkJICAgICAgKGVycm9yKSA/ICJGQUlMVVJFICIgOiAiIiwKCQkgICAg
 ICBhdGFfbW9kZTJzdHIobW9kZSksIGN0bHItPmNoaXAtPnRleHQpOwogICAg
 aWYgKCFlcnJvcikgewoJaW50IHRyZWcgPSAweDU0ICsgKChkZXZubyA8IDMp
 ID8gKGRldm5vIDw8IDEpIDogNyk7CglpbnQgdXJlZyA9IGNoLT51bml0ID8g
 MHg3YiA6IDB4NzM7CgoJaWYgKG1vZGUgPj0gQVRBX1VETUEwKSB7ICAgICAg
 ICAKCSAgICBpbnQgdWRtYXRpbWluZ3NbXVsyXSA9IHsgeyAweDMxLCAgMHhj
 MiB9LCB7IDB4MjEsICAweDgyIH0sCgkJCQkgICAgIHsgMHgxMSwgIDB4NDIg
 fSwgeyAweDI1LCAgMHg4YSB9LAoJCQkJICAgICB7IDB4MTUsICAweDRhIH0s
 IHsgMHgwNSwgIDB4MGEgfSB9OwoKCSAgICB1X2ludDhfdCB1bW9kZSA9IHBj
 aV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAxKTsKCgkgICAgdW1vZGUg
 Jj0gfihhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RFUiA/IDB4MzUgOiAweGNh
 KTsKCSAgICB1bW9kZSB8PSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01PREVf
 TUFTS11bQVRBX0RFVihhdGFkZXYtPnVuaXQpXTsKCSAgICBwY2lfd3JpdGVf
 Y29uZmlnKGdwYXJlbnQsIHVyZWcsIHVtb2RlLCAxKTsKCX0KCWVsc2UgaWYg
 KG1vZGUgPj0gQVRBX1dETUEwKSB7IAoJICAgIGludCBkbWF0aW1pbmdzW10g
 PSB7IDB4ODcsIDB4MzIsIDB4M2YgfTsKCgkgICAgcGNpX3dyaXRlX2NvbmZp
 ZyhncGFyZW50LCB0cmVnLCBkbWF0aW1pbmdzW21vZGUgJiBBVEFfTU9ERV9N
 QVNLXSwxKTsKCSAgICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIHVyZWcs
 IAoJCQkgICAgIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAxKSAm
 CgkJCSAgICAgfihhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RFUiA/IDB4MzUg
 OiAweGNhKSwgMSk7Cgl9CgllbHNlIHsKCSAgIGludCBwaW90aW1pbmdzW10g
 PSB7IDB4YTksIDB4NTcsIDB4NDQsIDB4MzIsIDB4M2YgfTsKCSAgICBwY2lf
 d3JpdGVfY29uZmlnKGdwYXJlbnQsIHRyZWcsCgkJCSAgICAgcGlvdGltaW5n
 c1sobW9kZSAmIEFUQV9NT0RFX01BU0spIC0gQVRBX1BJTzBdLCAxKTsKCSAg
 ICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIHVyZWcsIAoJCQkgICAgIHBj
 aV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAxKSAmCgkJCSAgICAgfihh
 dGFkZXYtPnVuaXQgPT0gQVRBX01BU1RFUiA/IDB4MzUgOiAweGNhKSwgMSk7
 Cgl9CglhdGFkZXYtPm1vZGUgPSBtb2RlOwogICAgfQp9CgpzdGF0aWMgaW50
 CmF0YV9zaWlfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3Qg
 YXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5l
 bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBpbnQgdW5pdDAx
 ID0gKGNoLT51bml0ICYgMSksIHVuaXQxMCA9IChjaC0+dW5pdCAmIDIpOwog
 ICAgaW50IGk7CgogICAgZm9yIChpID0gQVRBX0RBVEE7IGkgPD0gQVRBX0NP
 TU1BTkQ7IGkrKykgewoJY2gtPnJfaW9baV0ucmVzID0gY3Rsci0+cl9yZXMy
 OwoJY2gtPnJfaW9baV0ub2Zmc2V0ID0gMHg4MCArIGkgKyAodW5pdDAxIDw8
 IDYpICsgKHVuaXQxMCA8PCA4KTsKICAgIH0KICAgIGNoLT5yX2lvW0FUQV9D
 T05UUk9MXS5yZXMgPSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFf
 Q09OVFJPTF0ub2Zmc2V0ID0gMHg4YSArICh1bml0MDEgPDwgNikgKyAodW5p
 dDEwIDw8IDgpOwogICAgY2gtPnJfaW9bQVRBX0lEWF9BRERSXS5yZXMgPSBj
 dGxyLT5yX3JlczI7CiAgICBhdGFfZGVmYXVsdF9yZWdpc3RlcnMoZGV2KTsK
 CiAgICBjaC0+cl9pb1tBVEFfQk1DTURfUE9SVF0ucmVzID0gY3Rsci0+cl9y
 ZXMyOwogICAgY2gtPnJfaW9bQVRBX0JNQ01EX1BPUlRdLm9mZnNldCA9IDB4
 MDAgKyAodW5pdDAxIDw8IDMpICsgKHVuaXQxMCA8PCA4KTsKICAgIGNoLT5y
 X2lvW0FUQV9CTVNUQVRfUE9SVF0ucmVzID0gY3Rsci0+cl9yZXMyOwogICAg
 Y2gtPnJfaW9bQVRBX0JNU1RBVF9QT1JUXS5vZmZzZXQgPSAweDAyICsgKHVu
 aXQwMSA8PCAzKSArICh1bml0MTAgPDwgOCk7CiAgICBjaC0+cl9pb1tBVEFf
 Qk1EVFBfUE9SVF0ucmVzID0gY3Rsci0+cl9yZXMyOwogICAgY2gtPnJfaW9b
 QVRBX0JNRFRQX1BPUlRdLm9mZnNldCA9IDB4MDQgKyAodW5pdDAxIDw8IDMp
 ICsgKHVuaXQxMCA8PCA4KTsKICAgIGNoLT5yX2lvW0FUQV9CTURFVlNQRUNf
 MF0ucmVzID0gY3Rsci0+cl9yZXMyOwogICAgY2gtPnJfaW9bQVRBX0JNREVW
 U1BFQ18wXS5vZmZzZXQgPSAweGExICsgKHVuaXQwMSA8PCA2KSArICh1bml0
 MTAgPDwgOCk7CgogICAgaWYgKGN0bHItPmNoaXAtPm1heF9kbWEgPj0gQVRB
 X1NBMTUwKSB7CgljaC0+cl9pb1tBVEFfU1NUQVRVU10ucmVzID0gY3Rsci0+
 cl9yZXMyOwoJY2gtPnJfaW9bQVRBX1NTVEFUVVNdLm9mZnNldCA9IDB4MTA0
 ICsgKHVuaXQwMSA8PCA3KSArICh1bml0MTAgPDwgOCk7CgljaC0+cl9pb1tB
 VEFfU0VSUk9SXS5yZXMgPSBjdGxyLT5yX3JlczI7CgljaC0+cl9pb1tBVEFf
 U0VSUk9SXS5vZmZzZXQgPSAweDEwOCArICh1bml0MDEgPDwgNykgKyAodW5p
 dDEwIDw8IDgpOwoJY2gtPnJfaW9bQVRBX1NDT05UUk9MXS5yZXMgPSBjdGxy
 LT5yX3JlczI7CgljaC0+cl9pb1tBVEFfU0NPTlRST0xdLm9mZnNldCA9IDB4
 MTAwICsgKHVuaXQwMSA8PCA3KSArICh1bml0MTAgPDwgOCk7CgljaC0+Zmxh
 Z3MgfD0gQVRBX05PX1NMQVZFOwoKCS8qIGVuYWJsZSBQSFkgc3RhdGUgY2hh
 bmdlIGludGVycnVwdCAqLwoJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDE0
 OCArICh1bml0MDEgPDwgNykgKyAodW5pdDEwIDw8IDgpLCgxIDw8IDE2KSk7
 CiAgICB9CgogICAgaWYgKChjdGxyLT5jaGlwLT5jZmcyICYgU0lJQlVHKSAm
 JiBjaC0+ZG1hKSB7CgkvKiB3b3JrIGFyb3VuZCBlcnJhdGEgaW4gZWFybHkg
 Y2hpcHMgKi8KCWNoLT5kbWEtPmJvdW5kYXJ5ID0gMTYgKiBERVZfQlNJWkU7
 CgljaC0+ZG1hLT5zZWdzaXplID0gMTUgKiBERVZfQlNJWkU7CiAgICB9Cgog
 ICAgYXRhX3BjaV9odyhkZXYpOwogICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9z
 aWlfc3RhdHVzOwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKYXRhX3Np
 aV9zdGF0dXMoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX3BjaV9j
 b250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0
 X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk
 ZXZpY2VfZ2V0X3NvZnRjKGRldik7CgogICAgLyogY2hlY2sgZm9yIFBIWSBy
 ZWxhdGVkIGludGVycnVwdHMgb24gU0FUQSBjYXBhYmxlIEhXICovCiAgICBp
 ZiAoY3Rsci0+Y2hpcC0+bWF4X2RtYSA+PSBBVEFfU0ExNTApIHsKCXVfaW50
 MzJfdCBzdGF0dXMgPSBBVEFfSURYX0lOTChjaCwgQVRBX1NTVEFUVVMpOwoJ
 dV9pbnQzMl90IGVycm9yID0gQVRBX0lEWF9JTkwoY2gsIEFUQV9TRVJST1Ip
 OwoJc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgKnRwOwoKCWlmIChlcnJvcikg
 ewoJICAgIC8qIGNsZWFyIGVycm9yIGJpdHMvaW50ZXJydXB0ICovCgkgICAg
 QVRBX0lEWF9PVVRMKGNoLCBBVEFfU0VSUk9SLCBlcnJvcik7CgoJICAgIC8q
 IGlmIHdlIGhhdmUgYSBjb25uZWN0aW9uIGV2ZW50IGRlYWwgd2l0aCBpdCAq
 LwoJICAgIGlmICgoZXJyb3IgJiBBVEFfU0VfUEhZX0NIQU5HRUQpICYmCgkJ
 KHRwID0gKHN0cnVjdCBhdGFfY29ubmVjdF90YXNrICopCgkJICAgICAgbWFs
 bG9jKHNpemVvZihzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayksCgkJCSAgICAg
 TV9BVEEsIE1fTk9XQUlUIHwgTV9aRVJPKSkpIHsKCgkJaWYgKChzdGF0dXMg
 JiBBVEFfU1NfQ09OV0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4x
 KSB7CgkJICAgIGlmIChib290dmVyYm9zZSkKCQkJZGV2aWNlX3ByaW50Zihj
 aC0+ZGV2LCAiQ09OTkVDVCByZXF1ZXN0ZWRcbiIpOwoJCSAgICB0cC0+YWN0
 aW9uID0gQVRBX0NfQVRUQUNIOwoJCX0KCQllbHNlIHsKCQkgICAgaWYgKGJv
 b3R2ZXJib3NlKQoJCQlkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJESVNDT05O
 RUNUIHJlcXVlc3RlZFxuIik7CgkJICAgIHRwLT5hY3Rpb24gPSBBVEFfQ19E
 RVRBQ0g7CgkJfQoJCXRwLT5kZXYgPSBjaC0+ZGV2OwoJCVRBU0tfSU5JVCgm
 dHAtPnRhc2ssIDAsIGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwoJCXRhc2tx
 dWV1ZV9lbnF1ZXVlKHRhc2txdWV1ZV90aHJlYWQsICZ0cC0+dGFzayk7Cgkg
 ICAgfQoJfQogICAgfQoKICAgIC8qIGFueSBkcml2ZSBhY3Rpb24gdG8gdGFr
 ZSBjYXJlIG9mID8gKi8KICAgIGlmIChBVEFfSURYX0lOQihjaCwgQVRBX0JN
 REVWU1BFQ18wKSAmIDB4MDgpCglyZXR1cm4gYXRhX3BjaV9zdGF0dXMoZGV2
 KTsKICAgIGVsc2UgCglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQKYXRhX3Np
 aV9yZXNldChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNpX2Nv
 bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRf
 cGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRl
 dmljZV9nZXRfc29mdGMoZGV2KTsKICAgIGludCBvZmZzZXQgPSAoKGNoLT51
 bml0ICYgMSkgPDwgNykgKyAoKGNoLT51bml0ICYgMikgPDwgOCk7CgogICAg
 LyogZGlzYWJsZSBQSFkgc3RhdGUgY2hhbmdlIGludGVycnVwdCAqLwogICAg
 QVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDE0OCArIG9mZnNldCwgfigxIDw8
 IDE2KSk7CgogICAgLyogcmVzZXQgY29udHJvbGxlciBwYXJ0IGZvciB0aGlz
 IGNoYW5uZWwgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgMHg0OCwK
 CSAgICAgQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4NDgpIHwgKDB4YzAgPj4g
 Y2gtPnVuaXQpKTsKICAgIERFTEFZKDEwMDApOwogICAgQVRBX09VVEwoY3Rs
 ci0+cl9yZXMyLCAweDQ4LAoJICAgICBBVEFfSU5MKGN0bHItPnJfcmVzMiwg
 MHg0OCkgJiB+KDB4YzAgPj4gY2gtPnVuaXQpKTsKCiAgICBhdGFfc2F0YV9w
 aHlfZW5hYmxlKGNoKTsKCiAgICAvKiBlbmFibGUgUEhZIHN0YXRlIGNoYW5n
 ZSBpbnRlcnJ1cHQgKi8KICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgMHgx
 NDggKyBvZmZzZXQsICgxIDw8IDE2KSk7Cn0KCnN0YXRpYyB2b2lkCmF0YV9z
 aWlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQp7CiAgICBkZXZp
 Y2VfdCBncGFyZW50ID0gR1JBTkRQQVJFTlQoZGV2KTsKICAgIHN0cnVjdCBh
 dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdw
 YXJlbnQpOwogICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwog
 ICAgaW50IHJlZ28gPSAoY2gtPnVuaXQgPDwgNCkgKyAoQVRBX0RFVihhdGFk
 ZXYtPnVuaXQpIDw8IDEpOwogICAgaW50IG1yZWcgPSBjaC0+dW5pdCA/IDB4
 ODQgOiAweDgwOwogICAgaW50IG1hc2sgPSAweDAzIDw8IChBVEFfREVWKGF0
 YWRldi0+dW5pdCkgPDwgMik7CiAgICBpbnQgbXZhbCA9IHBjaV9yZWFkX2Nv
 bmZpZyhncGFyZW50LCBtcmVnLCAxKSAmIH5tYXNrOwogICAgaW50IGVycm9y
 OwoKICAgIG1vZGUgPSBhdGFfbGltaXRfbW9kZShkZXYsIG1vZGUsIGN0bHIt
 PmNoaXAtPm1heF9kbWEpOwoKICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYg
 U0lJU0VUQ0xLKSB7CglpZiAobW9kZSA+IEFUQV9VRE1BMiAmJiAocGNpX3Jl
 YWRfY29uZmlnKGdwYXJlbnQsIDB4NzksIDEpICYKCQkJCSAoY2gtPnVuaXQg
 PyAweDAyIDogMHgwMSkpKSB7CgkgICAgYXRhX3ByaW50X2NhYmxlKGRldiwg
 ImNvbnRyb2xsZXIiKTsKCSAgICBtb2RlID0gQVRBX1VETUEyOwoJfQogICAg
 fQogICAgZWxzZQoJbW9kZSA9IGF0YV9jaGVja184MHBpbihkZXYsIG1vZGUp
 OwoKICAgIGVycm9yID0gYXRhX2NvbnRyb2xjbWQoZGV2LCBBVEFfU0VURkVB
 VFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKCiAgICBpZiAoYm9v
 dHZlcmJvc2UpCglkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBv
 biAlcyBjaGlwXG4iLAoJCSAgICAgIChlcnJvcikgPyAiRkFJTFVSRSAiIDog
 IiIsCgkJICAgICAgYXRhX21vZGUyc3RyKG1vZGUpLCBjdGxyLT5jaGlwLT50
 ZXh0KTsKICAgIGlmIChlcnJvcikKCXJldHVybjsKCiAgICBpZiAobW9kZSA+
 PSBBVEFfVURNQTApIHsKCXVfaW50OF90IHVkbWF0aW1pbmdzW10gPSB7IDB4
 ZiwgMHhiLCAweDcsIDB4NSwgMHgzLCAweDIsIDB4MSB9OwoJdV9pbnQ4X3Qg
 dXJlZyA9IDB4YWMgKyByZWdvOwoKCXBjaV93cml0ZV9jb25maWcoZ3BhcmVu
 dCwgbXJlZywKCQkJIG12YWwgfCAoMHgwMyA8PCAoQVRBX0RFVihhdGFkZXYt
 PnVuaXQpIDw8IDIpKSwgMSk7CglwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQs
 IHVyZWcsIAoJCQkgKHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAx
 KSAmIH4weDNmKSB8CgkJCSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01PREVf
 TUFTS10sIDEpOwoKICAgIH0KICAgIGVsc2UgaWYgKG1vZGUgPj0gQVRBX1dE
 TUEwKSB7Cgl1X2ludDhfdCBkcmVnID0gMHhhOCArIHJlZ287Cgl1X2ludDE2
 X3QgZG1hdGltaW5nc1tdID0geyAweDIyMDgsIDB4MTBjMiwgMHgxMGMxIH07
 CgoJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCBtcmVnLAoJCQkgbXZhbCB8
 ICgweDAyIDw8IChBVEFfREVWKGF0YWRldi0+dW5pdCkgPDwgMikpLCAxKTsK
 CXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgZHJlZywgZG1hdGltaW5nc1tt
 b2RlICYgQVRBX01PREVfTUFTS10sIDIpOwoKICAgIH0KICAgIGVsc2UgewoJ
 dV9pbnQ4X3QgcHJlZyA9IDB4YTQgKyByZWdvOwoJdV9pbnQxNl90IHBpb3Rp
 bWluZ3NbXSA9IHsgMHgzMjhhLCAweDIyODMsIDB4MTEwNCwgMHgxMGMzLCAw
 eDEwYzEgfTsKCglwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIG1yZWcsCgkJ
 CSBtdmFsIHwgKDB4MDEgPDwgKEFUQV9ERVYoYXRhZGV2LT51bml0KSA8PCAy
 KSksIDEpOwoJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCBwcmVnLCBwaW90
 aW1pbmdzW21vZGUgJiBBVEFfTU9ERV9NQVNLXSwgMik7CiAgICB9CiAgICBh
 dGFkZXYtPm1vZGUgPSBtb2RlOwp9CgoKLyoKICogU2lsaWNvbiBJbnRlZ3Jh
 dGVkIFN5c3RlbXMgQ29ycC4gKFNpUykgY2hpcHNldCBzdXBwb3J0IGZ1bmN0
 aW9ucwogKi8KaW50CmF0YV9zaXNfaWRlbnQoZGV2aWNlX3QgZGV2KQp7CiAg
 ICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dl
 dF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0YV9jaGlwX2lkICppZHg7CiAg
 ICBzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkIGlkc1tdID0KICAgIHt7IEFU
 QV9TSVMxODIsICAweDAwLCBTSVNTQVRBLCAgIDAsIEFUQV9TQTE1MCwgIjE4
 MiIgfSwgLyogc291dGggKi8KICAgICB7IEFUQV9TSVMxODEsICAweDAwLCBT
 SVNTQVRBLCAgIDAsIEFUQV9TQTE1MCwgIjE4MSIgfSwgLyogc291dGggKi8K
 ICAgICB7IEFUQV9TSVMxODAsICAweDAwLCBTSVNTQVRBLCAgIDAsIEFUQV9T
 QTE1MCwgIjE4MCIgfSwgLyogc291dGggKi8KICAgICB7IEFUQV9TSVM5NjUs
 ICAweDAwLCBTSVMxMzNORVcsIDAsIEFUQV9VRE1BNiwgIjk2NSIgfSwgLyog
 c291dGggKi8KICAgICB7IEFUQV9TSVM5NjQsICAweDAwLCBTSVMxMzNORVcs
 IDAsIEFUQV9VRE1BNiwgIjk2NCIgfSwgLyogc291dGggKi8KICAgICB7IEFU
 QV9TSVM5NjMsICAweDAwLCBTSVMxMzNORVcsIDAsIEFUQV9VRE1BNiwgIjk2
 MyIgfSwgLyogc291dGggKi8KICAgICB7IEFUQV9TSVM5NjIsICAweDAwLCBT
 SVMxMzNORVcsIDAsIEFUQV9VRE1BNiwgIjk2MiIgfSwgLyogc291dGggKi8K
 CiAgICAgeyBBVEFfU0lTNzQ1LCAgMHgwMCwgU0lTMTAwTkVXLCAwLCBBVEFf
 VURNQTUsICI3NDUiIH0sIC8qIDFjaGlwICovCiAgICAgeyBBVEFfU0lTNzM1
 LCAgMHgwMCwgU0lTMTAwTkVXLCAwLCBBVEFfVURNQTUsICI3MzUiIH0sIC8q
 IDFjaGlwICovCiAgICAgeyBBVEFfU0lTNzMzLCAgMHgwMCwgU0lTMTAwTkVX
 LCAwLCBBVEFfVURNQTUsICI3MzMiIH0sIC8qIDFjaGlwICovCiAgICAgeyBB
 VEFfU0lTNzMwLCAgMHgwMCwgU0lTMTAwT0xELCAwLCBBVEFfVURNQTUsICI3
 MzAiIH0sIC8qIDFjaGlwICovCgogICAgIHsgQVRBX1NJUzYzNSwgIDB4MDAs
 IFNJUzEwME5FVywgMCwgQVRBX1VETUE1LCAiNjM1IiB9LCAvKiAxY2hpcCAq
 LwogICAgIHsgQVRBX1NJUzYzMywgIDB4MDAsIFNJUzEwME5FVywgMCwgQVRB
 X1VETUE1LCAiNjMzIiB9LCAvKiB1bmtub3duICovCiAgICAgeyBBVEFfU0lT
 NjMwLCAgMHgzMCwgU0lTMTAwT0xELCAwLCBBVEFfVURNQTUsICI2MzBTIn0s
 IC8qIDFjaGlwICovCiAgICAgeyBBVEFfU0lTNjMwLCAgMHgwMCwgU0lTNjYs
 ICAgICAwLCBBVEFfVURNQTQsICI2MzAiIH0sIC8qIDFjaGlwICovCiAgICAg
 eyBBVEFfU0lTNjIwLCAgMHgwMCwgU0lTNjYsICAgICAwLCBBVEFfVURNQTQs
 ICI2MjAiIH0sIC8qIDFjaGlwICovCgogICAgIHsgQVRBX1NJUzU1MCwgIDB4
 MDAsIFNJUzY2LCAgICAgMCwgQVRBX1VETUE1LCAiNTUwIiB9LAogICAgIHsg
 QVRBX1NJUzU0MCwgIDB4MDAsIFNJUzY2LCAgICAgMCwgQVRBX1VETUE0LCAi
 NTQwIiB9LAogICAgIHsgQVRBX1NJUzUzMCwgIDB4MDAsIFNJUzY2LCAgICAg
 MCwgQVRBX1VETUE0LCAiNTMwIiB9LAoKICAgICB7IEFUQV9TSVM1NTEzLCAw
 eGMyLCBTSVMzMywgICAgIDEsIEFUQV9VRE1BMiwgIjU1MTMiIH0sCiAgICAg
 eyBBVEFfU0lTNTUxMywgMHgwMCwgU0lTMzMsICAgICAxLCBBVEFfV0RNQTIs
 ICI1NTEzIiB9LAogICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9fTsKICAgIGNo
 YXIgYnVmZmVyWzY0XTsKICAgIGludCBmb3VuZCA9IDA7CgogICAgaWYgKCEo
 aWR4ID0gYXRhX2ZpbmRfY2hpcChkZXYsIGlkcywgLXBjaV9nZXRfc2xvdChk
 ZXYpKSkpIAoJcmV0dXJuIEVOWElPOwoKICAgIGlmIChpZHgtPmNmZzIgJiYg
 IWZvdW5kKSB7Cgl1X2ludDhfdCByZWc1NyA9IHBjaV9yZWFkX2NvbmZpZyhk
 ZXYsIDB4NTcsIDEpOwoKCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDU3LCAo
 cmVnNTcgJiAweDdmKSwgMSk7CglpZiAocGNpX3JlYWRfY29uZmlnKGRldiwg
 UENJUl9ERVZWRU5ET1IsIDQpID09IEFUQV9TSVM1NTE4KSB7CgkgICAgZm91
 bmQgPSAxOwoJICAgIGlkeC0+Y2ZnMSA9IFNJUzEzM05FVzsKCSAgICBpZHgt
 Pm1heF9kbWEgPSBBVEFfVURNQTY7CgkgICAgc3ByaW50ZihidWZmZXIsICJT
 aVMgOTYyLzk2MyAlcyBjb250cm9sbGVyIiwKCQkgICAgYXRhX21vZGUyc3Ry
 KGlkeC0+bWF4X2RtYSkpOwoJfQoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4
 NTcsIHJlZzU3LCAxKTsKICAgIH0KICAgIGlmIChpZHgtPmNmZzIgJiYgIWZv
 dW5kKSB7Cgl1X2ludDhfdCByZWc0YSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYs
 IDB4NGEsIDEpOwoKCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDRhLCAocmVn
 NGEgfCAweDEwKSwgMSk7CglpZiAocGNpX3JlYWRfY29uZmlnKGRldiwgUENJ
 Ul9ERVZWRU5ET1IsIDQpID09IEFUQV9TSVM1NTE3KSB7CgkgICAgc3RydWN0
 IGF0YV9jaGlwX2lkIGlkW10gPQoJCXt7IEFUQV9TSVNTT1VUSCwgMHgxMCwg
 MCwgMCwgMCwgIiIgfSwgeyAwLCAwLCAwLCAwLCAwLCAwIH19OwoKCSAgICBm
 b3VuZCA9IDE7CgkgICAgaWYgKGF0YV9maW5kX2NoaXAoZGV2LCBpZCwgcGNp
 X2dldF9zbG90KGRldikpKSB7CgkJaWR4LT5jZmcxID0gU0lTMTMzT0xEOwoJ
 CWlkeC0+bWF4X2RtYSA9IEFUQV9VRE1BNjsKCSAgICB9CgkgICAgZWxzZSB7
 CgkJaWR4LT5jZmcxID0gU0lTMTAwTkVXOwoJCWlkeC0+bWF4X2RtYSA9IEFU
 QV9VRE1BNTsKCSAgICB9CgkgICAgc3ByaW50ZihidWZmZXIsICJTaVMgOTYx
 ICVzIGNvbnRyb2xsZXIiLGF0YV9tb2RlMnN0cihpZHgtPm1heF9kbWEpKTsK
 CX0KCXBjaV93cml0ZV9jb25maWcoZGV2LCAweDRhLCByZWc0YSwgMSk7CiAg
 ICB9CiAgICBpZiAoIWZvdW5kKQoJc3ByaW50ZihidWZmZXIsIlNpUyAlcyAl
 cyBjb250cm9sbGVyIiwKCQlpZHgtPnRleHQsIGF0YV9tb2RlMnN0cihpZHgt
 Pm1heF9kbWEpKTsKCiAgICBkZXZpY2Vfc2V0X2Rlc2NfY29weShkZXYsIGJ1
 ZmZlcik7CiAgICBjdGxyLT5jaGlwID0gaWR4OwogICAgY3Rsci0+Y2hpcGlu
 aXQgPSBhdGFfc2lzX2NoaXBpbml0OwogICAgcmV0dXJuIDA7Cn0KCnN0YXRp
 YyBpbnQKYXRhX3Npc19jaGlwaW5pdChkZXZpY2VfdCBkZXYpCnsKICAgIHN0
 cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3Nv
 ZnRjKGRldik7CgogICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkK
 CXJldHVybiBFTlhJTzsKICAgIAogICAgc3dpdGNoIChjdGxyLT5jaGlwLT5j
 ZmcxKSB7CiAgICBjYXNlIFNJUzMzOgoJYnJlYWs7CiAgICBjYXNlIFNJUzY2
 OgogICAgY2FzZSBTSVMxMDBPTEQ6CglwY2lfd3JpdGVfY29uZmlnKGRldiwg
 MHg1MiwgcGNpX3JlYWRfY29uZmlnKGRldiwgMHg1MiwgMSkgJiB+MHgwNCwg
 MSk7CglicmVhazsKICAgIGNhc2UgU0lTMTAwTkVXOgogICAgY2FzZSBTSVMx
 MzNPTEQ6CglwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg0OSwgcGNpX3JlYWRf
 Y29uZmlnKGRldiwgMHg0OSwgMSkgJiB+MHgwMSwgMSk7CglicmVhazsKICAg
 IGNhc2UgU0lTMTMzTkVXOgoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTAs
 IHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NTAsIDIpIHwgMHgwMDA4LCAyKTsK
 CXBjaV93cml0ZV9jb25maWcoZGV2LCAweDUyLCBwY2lfcmVhZF9jb25maWco
 ZGV2LCAweDUyLCAyKSB8IDB4MDAwOCwgMik7CglicmVhazsKICAgIGNhc2Ug
 U0lTU0FUQToKCWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX0lPUE9SVDsKCWN0
 bHItPnJfcmlkMiA9IFBDSVJfQkFSKDUpOwoJaWYgKChjdGxyLT5yX3JlczIg
 PSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgY3Rsci0+cl90eXBlMiwK
 CQkJCQkJICAgJmN0bHItPnJfcmlkMiwgUkZfQUNUSVZFKSkpIHsKCSAgICBj
 dGxyLT5hbGxvY2F0ZSA9IGF0YV9zaXNfYWxsb2NhdGU7CgkgICAgY3Rsci0+
 cmVzZXQgPSBhdGFfc2lzX3Jlc2V0OwoKCSAgICAvKiBlbmFibGUgUENJIGlu
 dGVycnVwdCAqLwoJICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NP
 TU1BTkQsCgkJCSAgICAgcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01N
 QU5ELCAyKSAmIH4weDA0MDAsMik7Cgl9CgljdGxyLT5zZXRtb2RlID0gYXRh
 X3NhdGFfc2V0bW9kZTsKCXJldHVybiAwOwogICAgZGVmYXVsdDoKCXJldHVy
 biBFTlhJTzsKICAgIH0KICAgIGN0bHItPnNldG1vZGUgPSBhdGFfc2lzX3Nl
 dG1vZGU7CiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGludAphdGFfc2lzX2Fs
 bG9jYXRlKGRldmljZV90IGRldikKewogICAgc3RydWN0IGF0YV9wY2lfY29u
 dHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9w
 YXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2
 aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgaW50IG9mZnNldCA9IGNoLT51bml0
 IDw8ICgoY3Rsci0+Y2hpcC0+Y2hpcGlkID09IEFUQV9TSVMxODIpID8gNSA6
 IDYpOwoKICAgIC8qIHNldHVwIHRoZSB1c3VhbCByZWdpc3RlciBub3JtYWwg
 cGNpIHN0eWxlICovCiAgICBpZiAoYXRhX3BjaV9hbGxvY2F0ZShkZXYpKQoJ
 cmV0dXJuIEVOWElPOwoKICAgIGNoLT5yX2lvW0FUQV9TU1RBVFVTXS5yZXMg
 PSBjdGxyLT5yX3JlczI7CiAgICBjaC0+cl9pb1tBVEFfU1NUQVRVU10ub2Zm
 c2V0ID0gMHgwMCArIG9mZnNldDsKICAgIGNoLT5yX2lvW0FUQV9TRVJST1Jd
 LnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FUQV9TRVJST1Jd
 Lm9mZnNldCA9IDB4MDQgKyBvZmZzZXQ7CiAgICBjaC0+cl9pb1tBVEFfU0NP
 TlRST0xdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FUQV9T
 Q09OVFJPTF0ub2Zmc2V0ID0gMHgwOCArIG9mZnNldDsKICAgIGNoLT5mbGFn
 cyB8PSBBVEFfTk9fU0xBVkU7CgogICAgLyogWFhYIFNPUyBQSFkgaG90cGx1
 ZyBoYW5kbGluZyBtaXNzaW5nIGluIFNpUyBjaGlwID8/ICovCiAgICAvKiBY
 WFggU09TIHVua25vd24gaG93IHRvIGVuYWJsZSBQSFkgc3RhdGUgY2hhbmdl
 IGludGVycnVwdCAqLwogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkCmF0
 YV9zaXNfcmVzZXQoZGV2aWNlX3QgZGV2KQp7CiAgICBzdHJ1Y3QgYXRhX2No
 YW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAgIGF0YV9z
 YXRhX3BoeV9lbmFibGUoY2gpOwp9CgoKc3RhdGljIHZvaWQKYXRhX3Npc19z
 ZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90
 IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9w
 Y2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVu
 dCk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFf
 ZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICBp
 bnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVWKGF0YWRldi0+
 dW5pdCk7CiAgICBpbnQgZXJyb3I7CgogICAgbW9kZSA9IGF0YV9saW1pdF9t
 b2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4X2RtYSk7CgogICAgaWYg
 KGN0bHItPmNoaXAtPmNmZzEgPT0gU0lTMTMzTkVXKSB7CglpZiAobW9kZSA+
 IEFUQV9VRE1BMiAmJgoJICAgIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCBj
 aC0+dW5pdCA/IDB4NTIgOiAweDUwLDIpICYgMHg4MDAwKSB7CgkgICAgYXRh
 X3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsKCSAgICBtb2RlID0g
 QVRBX1VETUEyOwoJfQogICAgfQogICAgZWxzZSB7CglpZiAobW9kZSA+IEFU
 QV9VRE1BMiAmJgoJICAgIHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDQ4
 LCAxKSYoY2gtPnVuaXQgPyAweDIwIDogMHgxMCkpIHsKCSAgICBhdGFfcHJp
 bnRfY2FibGUoZGV2LCAiY29udHJvbGxlciIpOwoJICAgIG1vZGUgPSBBVEFf
 VURNQTI7Cgl9CiAgICB9CgogICAgZXJyb3IgPSBhdGFfY29udHJvbGNtZChk
 ZXYsIEFUQV9TRVRGRUFUVVJFUywgQVRBX1NGX1NFVFhGRVIsIDAsIG1vZGUp
 OwoKICAgIGlmIChib290dmVyYm9zZSkKCWRldmljZV9wcmludGYoZGV2LCAi
 JXNzZXR0aW5nICVzIG9uICVzIGNoaXBcbiIsCgkJICAgICAgKGVycm9yKSA/
 ICJGQUlMVVJFICIgOiAiIiwKCQkgICAgICBhdGFfbW9kZTJzdHIobW9kZSks
 IGN0bHItPmNoaXAtPnRleHQpOwogICAgaWYgKCFlcnJvcikgewoJc3dpdGNo
 IChjdGxyLT5jaGlwLT5jZmcxKSB7CgljYXNlIFNJUzEzM05FVzogewoJICAg
 IHVfaW50MzJfdCB0aW1pbmdzW10gPSAKCQl7IDB4MjgyNjkwMDgsIDB4MGMy
 NjYwMDgsIDB4MDQyNjMwMDgsIDB4MGMwYTMwMDgsIDB4MDUwOTMwMDgsCgkJ
 ICAweDIyMTk2MDA4LCAweDBjMGEzMDA4LCAweDA1MDkzMDA4LCAweDA1MDkz
 OWZjLCAweDA1MDkzNmFjLAoJCSAgMHgwNTA5MzQ3YywgMHgwNTA5MzI1Yywg
 MHgwNTA5MzIzYywgMHgwNTA5MzIyYywgMHgwNTA5MzIxY307CgkgICAgdV9p
 bnQzMl90IHJlZzsKCgkgICAgcmVnID0gKHBjaV9yZWFkX2NvbmZpZyhncGFy
 ZW50LCAweDU3LCAxKSYweDQwPzB4NzA6MHg0MCkrKGRldm5vPDwyKTsKCSAg
 ICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIHJlZywgdGltaW5nc1thdGFf
 bW9kZTJpZHgobW9kZSldLCA0KTsKCSAgICBicmVhazsKCSAgICB9CgljYXNl
 IFNJUzEzM09MRDogewoJICAgIHVfaW50MTZfdCB0aW1pbmdzW10gPQoJICAg
 ICB7IDB4MDBjYiwgMHgwMDY3LCAweDAwNDQsIDB4MDAzMywgMHgwMDMxLCAw
 eDAwNDQsIDB4MDAzMywgMHgwMDMxLAoJICAgICAgIDB4OGYzMSwgMHg4YTMx
 LCAweDg3MzEsIDB4ODUzMSwgMHg4MzMxLCAweDgyMzEsIDB4ODEzMSB9OwoJ
 CSAgCgkgICAgdV9pbnQxNl90IHJlZyA9IDB4NDAgKyAoZGV2bm8gPDwgMSk7
 CgoJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgcmVnLCB0aW1pbmdz
 W2F0YV9tb2RlMmlkeChtb2RlKV0sIDIpOwoJICAgIGJyZWFrOwoJICAgIH0K
 CWNhc2UgU0lTMTAwTkVXOiB7CgkgICAgdV9pbnQxNl90IHRpbWluZ3NbXSA9
 CgkJeyAweDAwY2IsIDB4MDA2NywgMHgwMDQ0LCAweDAwMzMsIDB4MDAzMSwg
 MHgwMDQ0LCAweDAwMzMsCgkJICAweDAwMzEsIDB4OGIzMSwgMHg4NzMxLCAw
 eDg1MzEsIDB4ODQzMSwgMHg4MjMxLCAweDgxMzEgfTsKCSAgICB1X2ludDE2
 X3QgcmVnID0gMHg0MCArIChkZXZubyA8PCAxKTsKCgkgICAgcGNpX3dyaXRl
 X2NvbmZpZyhncGFyZW50LCByZWcsIHRpbWluZ3NbYXRhX21vZGUyaWR4KG1v
 ZGUpXSwgMik7CgkgICAgYnJlYWs7CgkgICAgfQoJY2FzZSBTSVMxMDBPTEQ6
 CgljYXNlIFNJUzY2OgoJY2FzZSBTSVMzMzogewoJICAgIHVfaW50MTZfdCB0
 aW1pbmdzW10gPQoJCXsgMHgwYzBiLCAweDA2MDcsIDB4MDQwNCwgMHgwMzAz
 LCAweDAzMDEsIDB4MDQwNCwgMHgwMzAzLAoJCSAgMHgwMzAxLCAweGYzMDEs
 IDB4ZDMwMSwgMHhiMzAxLCAweGEzMDEsIDB4OTMwMSwgMHg4MzAxIH07Cgkg
 ICAgdV9pbnQxNl90IHJlZyA9IDB4NDAgKyAoZGV2bm8gPDwgMSk7CgoJICAg
 IHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgcmVnLCB0aW1pbmdzW2F0YV9t
 b2RlMmlkeChtb2RlKV0sIDIpOwoJICAgIGJyZWFrOwoJICAgIH0KCX0KCWF0
 YWRldi0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKiBWSUEgVGVjaG5vbG9n
 aWVzIEluYy4gY2hpcHNldCBzdXBwb3J0IGZ1bmN0aW9ucyAqLwppbnQKYXRh
 X3ZpYV9pZGVudChkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBhdGFfcGNp
 X2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAg
 ICBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmlkeDsKICAgIHN0YXRpYyBzdHJ1Y3Qg
 YXRhX2NoaXBfaWQgaWRzW10gPQogICAge3sgQVRBX1ZJQTgyQzU4NiwgMHgw
 MiwgVklBMzMsICAweDAwLCAgICBBVEFfVURNQTIsICI4MkM1ODZCIiB9LAog
 ICAgIHsgQVRBX1ZJQTgyQzU4NiwgMHgwMCwgVklBMzMsICAweDAwLCAgICBB
 VEFfV0RNQTIsICI4MkM1ODYiIH0sCiAgICAgeyBBVEFfVklBODJDNTk2LCAw
 eDEyLCBWSUE2NiwgIFZJQUNMSywgIEFUQV9VRE1BNCwgIjgyQzU5NkIiIH0s
 CiAgICAgeyBBVEFfVklBODJDNTk2LCAweDAwLCBWSUEzMywgIDB4MDAsICAg
 IEFUQV9VRE1BMiwgIjgyQzU5NiIgfSwKICAgICB7IEFUQV9WSUE4MkM2ODYs
 IDB4NDAsIFZJQTEwMCwgVklBQlVHLCAgQVRBX1VETUE1LCAiODJDNjg2QiJ9
 LAogICAgIHsgQVRBX1ZJQTgyQzY4NiwgMHgxMCwgVklBNjYsICBWSUFDTEss
 ICBBVEFfVURNQTQsICI4MkM2ODZBIiB9LAogICAgIHsgQVRBX1ZJQTgyQzY4
 NiwgMHgwMCwgVklBMzMsICAweDAwLCAgICBBVEFfVURNQTIsICI4MkM2ODYi
 IH0sCiAgICAgeyBBVEFfVklBODIzMSwgICAweDAwLCBWSUExMDAsIFZJQUJV
 RywgIEFUQV9VRE1BNSwgIjgyMzEiIH0sCiAgICAgeyBBVEFfVklBODIzMywg
 ICAweDAwLCBWSUExMDAsIDB4MDAsICAgIEFUQV9VRE1BNSwgIjgyMzMiIH0s
 CiAgICAgeyBBVEFfVklBODIzM0MsICAweDAwLCBWSUExMDAsIDB4MDAsICAg
 IEFUQV9VRE1BNSwgIjgyMzNDIiB9LAogICAgIHsgQVRBX1ZJQTgyMzNBLCAg
 MHgwMCwgVklBMTMzLCAweDAwLCAgICBBVEFfVURNQTYsICI4MjMzQSIgfSwK
 ICAgICB7IEFUQV9WSUE4MjM1LCAgIDB4MDAsIFZJQTEzMywgMHgwMCwgICAg
 QVRBX1VETUE2LCAiODIzNSIgfSwKICAgICB7IEFUQV9WSUE4MjM3LCAgIDB4
 MDAsIFZJQTEzMywgMHgwMCwgICAgQVRBX1VETUE2LCAiODIzNyIgfSwKICAg
 ICB7IEFUQV9WSUE4MjM3QSwgIDB4MDAsIFZJQTEzMywgMHgwMCwgICAgQVRB
 X1VETUE2LCAiODIzN0EiIH0sCiAgICAgeyBBVEFfVklBODI1MSwgICAweDAw
 LCBWSUExMzMsIDB4MDAsICAgIEFUQV9VRE1BNiwgIjgyNTEiIH0sCiAgICAg
 eyAwLCAwLCAwLCAwLCAwLCAwIH19OwogICAgc3RhdGljIHN0cnVjdCBhdGFf
 Y2hpcF9pZCBuZXdfaWRzW10gPQogICAge3sgQVRBX1ZJQTY0MTAsICAgMHgw
 MCwgMCwgICAgICAweDAwLCAgICBBVEFfVURNQTYsICI2NDEwIiB9LAogICAg
 IHsgQVRBX1ZJQTY0MjAsICAgMHgwMCwgNywgICAgICAweDAwLCAgICBBVEFf
 U0ExNTAsICI2NDIwIiB9LAogICAgIHsgQVRBX1ZJQTY0MjEsICAgMHgwMCwg
 NiwgICAgICBWSUFCQVIsICBBVEFfU0ExNTAsICI2NDIxIiB9LAogICAgIHsg
 QVRBX1ZJQTgyMzdBLCAgMHgwMCwgMCwgICAgICAweDAwLCAgICBBVEFfU0Ex
 NTAsICI4MjM3QSIgfSwKICAgICB7IEFUQV9WSUE4MjUxLCAgIDB4MDAsIDAs
 ICAgICAgVklBQUhDSSwgQVRBX1NBMzAwLCAiODI1MSIgfSwKICAgICB7IDAs
 IDAsIDAsIDAsIDAsIDAgfX07CiAgICBjaGFyIGJ1ZmZlcls2NF07CgogICAg
 aWYgKHBjaV9nZXRfZGV2aWQoZGV2KSA9PSBBVEFfVklBODJDNTcxKSB7Cglp
 ZiAoIShpZHggPSBhdGFfZmluZF9jaGlwKGRldiwgaWRzLCAtOTkpKSkgCgkg
 ICAgcmV0dXJuIEVOWElPOwogICAgfQogICAgZWxzZSB7CglpZiAoIShpZHgg
 PSBhdGFfbWF0Y2hfY2hpcChkZXYsIG5ld19pZHMpKSkgCgkgICAgcmV0dXJu
 IEVOWElPOwogICAgfQoKICAgIHNwcmludGYoYnVmZmVyLCAiVklBICVzICVz
 IGNvbnRyb2xsZXIiLAoJICAgIGlkeC0+dGV4dCwgYXRhX21vZGUyc3RyKGlk
 eC0+bWF4X2RtYSkpOwogICAgZGV2aWNlX3NldF9kZXNjX2NvcHkoZGV2LCBi
 dWZmZXIpOwogICAgY3Rsci0+Y2hpcCA9IGlkeDsKICAgIGN0bHItPmNoaXBp
 bml0ID0gYXRhX3ZpYV9jaGlwaW5pdDsKICAgIHJldHVybiAwOwp9CgpzdGF0
 aWMgaW50CmF0YV92aWFfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQp7CiAgICBz
 dHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9z
 b2Z0YyhkZXYpOwoKICAgIGlmIChhdGFfc2V0dXBfaW50ZXJydXB0KGRldikp
 CglyZXR1cm4gRU5YSU87CiAgICAKICAgIGlmIChjdGxyLT5jaGlwLT5tYXhf
 ZG1hID49IEFUQV9TQTE1MCkgewoJaWYgKGN0bHItPmNoaXAtPmNmZzIgPT0g
 VklBQUhDSSkgewoJICAgIGN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9S
 WTsKCSAgICBjdGxyLT5yX3JpZDIgPSBQQ0lSX0JBUig1KTsKCSAgICBpZiAo
 KGN0bHItPnJfcmVzMiA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBj
 dGxyLT5yX3R5cGUyLAoJCQkJCQkgICAgICAgJmN0bHItPnJfcmlkMiwKCQkJ
 CQkJICAgICAgIFJGX0FDVElWRSkpKSB7CgkJIHJldHVybiBhdGFfYWhjaV9j
 aGlwaW5pdChkZXYpOwoJICAgIH0gCgl9CgljdGxyLT5yX3R5cGUyID0gU1lT
 X1JFU19JT1BPUlQ7CgljdGxyLT5yX3JpZDIgPSBQQ0lSX0JBUig1KTsKCWlm
 ICgoY3Rsci0+cl9yZXMyID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYs
 IGN0bHItPnJfdHlwZTIsCgkJCQkJCSAgICZjdGxyLT5yX3JpZDIsIFJGX0FD
 VElWRSkpKSB7CgkgICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFfdmlhX2FsbG9j
 YXRlOwoJICAgIGN0bHItPnJlc2V0ID0gYXRhX3ZpYV9yZXNldDsKCgkgICAg
 LyogZW5hYmxlIFBDSSBpbnRlcnJ1cHQgKi8KCSAgICBwY2lfd3JpdGVfY29u
 ZmlnKGRldiwgUENJUl9DT01NQU5ELAoJCQkgICAgIHBjaV9yZWFkX2NvbmZp
 ZyhkZXYsIFBDSVJfQ09NTUFORCwgMikgJiB+MHgwNDAwLDIpOwoJfQoJY3Rs
 ci0+c2V0bW9kZSA9IGF0YV9zYXRhX3NldG1vZGU7CglyZXR1cm4gMDsKICAg
 IH0KCiAgICAvKiBwcmVwYXJlIGZvciBBVEEtNjYgb24gdGhlIDgyQzY4NmEg
 YW5kIDgyQzU5NmIgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYgVklB
 Q0xLKQoJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTAsIDB4MDMwYjAzMGIs
 IDQpOyAgICAgICAKCiAgICAvKiB0aGUgc291dGhicmlkZ2UgbWlnaHQgbmVl
 ZCB0aGUgZGF0YSBjb3JydXB0aW9uIGZpeCAqLwogICAgaWYgKGN0bHItPmNo
 aXAtPmNmZzIgJiBWSUFCVUcpCglhdGFfdmlhX3NvdXRoYnJpZGdlX2ZpeHVw
 KGRldik7CgogICAgLyogc2V0IGZpZm8gY29uZmlndXJhdGlvbiBoYWxmJ24n
 aGFsZiAqLwogICAgcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDMsIAoJCSAg
 ICAgKHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDMsIDEpICYgMHg5MCkgfCAw
 eDJhLCAxKTsKCiAgICAvKiBzZXQgc3RhdHVzIHJlZ2lzdGVyIHJlYWQgcmV0
 cnkgKi8KICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDQ0LCBwY2lfcmVh
 ZF9jb25maWcoZGV2LCAweDQ0LCAxKSB8IDB4MDgsIDEpOwoKICAgIC8qIHNl
 dCBETUEgcmVhZCAmIGVuZC1vZi1zZWN0b3IgZmlmbyBmbHVzaCAqLwogICAg
 cGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDYsIAoJCSAgICAgKHBjaV9yZWFk
 X2NvbmZpZyhkZXYsIDB4NDYsIDEpICYgMHgwYykgfCAweGYwLCAxKTsKCiAg
 ICAvKiBzZXQgc2VjdG9yIHNpemUgKi8KICAgIHBjaV93cml0ZV9jb25maWco
 ZGV2LCAweDYwLCBERVZfQlNJWkUsIDIpOwogICAgcGNpX3dyaXRlX2NvbmZp
 ZyhkZXYsIDB4NjgsIERFVl9CU0laRSwgMik7CgogICAgY3Rsci0+c2V0bW9k
 ZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7CiAgICByZXR1cm4gMDsKfQoK
 c3RhdGljIGludAphdGFfdmlhX2FsbG9jYXRlKGRldmljZV90IGRldikKewog
 ICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n
 ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3Qg
 YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwoKICAg
 IC8qIG5ld2VyIFNBVEEgY2hpcHMgaGFzIHJlc291cmNlcyBpbiBvbmUgQkFS
 IGZvciBlYWNoIGNoYW5uZWwgKi8KICAgIGlmIChjdGxyLT5jaGlwLT5jZmcy
 ICYgVklBQkFSKSB7CglzdHJ1Y3QgcmVzb3VyY2UgKnJfaW87CglpbnQgaSwg
 cmlkOwoJCQoJcmlkID0gUENJUl9CQVIoY2gtPnVuaXQpOwoJaWYgKCEocl9p
 byA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2aWNlX2dldF9wYXJlbnQo
 ZGV2KSwKCQkJCQkgICAgU1lTX1JFU19JT1BPUlQsCgkJCQkJICAgICZyaWQs
 IFJGX0FDVElWRSkpKQoJICAgIHJldHVybiBFTlhJTzsKCglmb3IgKGkgPSBB
 VEFfREFUQTsgaSA8PSBBVEFfQ09NTUFORDsgaSArKykgewoJICAgIGNoLT5y
 X2lvW2ldLnJlcyA9IHJfaW87CgkgICAgY2gtPnJfaW9baV0ub2Zmc2V0ID0g
 aTsKCX0KCWNoLT5yX2lvW0FUQV9DT05UUk9MXS5yZXMgPSByX2lvOwoJY2gt
 PnJfaW9bQVRBX0NPTlRST0xdLm9mZnNldCA9IDIgKyBBVEFfSU9TSVpFOwoJ
 Y2gtPnJfaW9bQVRBX0lEWF9BRERSXS5yZXMgPSByX2lvOwoJYXRhX2RlZmF1
 bHRfcmVnaXN0ZXJzKGRldik7Cglmb3IgKGkgPSBBVEFfQk1DTURfUE9SVDsg
 aSA8PSBBVEFfQk1EVFBfUE9SVDsgaSsrKSB7CgkgICAgY2gtPnJfaW9baV0u
 cmVzID0gY3Rsci0+cl9yZXMxOwoJICAgIGNoLT5yX2lvW2ldLm9mZnNldCA9
 IChpIC0gQVRBX0JNQ01EX1BPUlQpKyhjaC0+dW5pdCAqIEFUQV9CTUlPU0la
 RSk7Cgl9CglhdGFfcGNpX2h3KGRldik7CiAgICB9CiAgICBlbHNlIHsKCS8q
 IHNldHVwIHRoZSB1c3VhbCByZWdpc3RlciBub3JtYWwgcGNpIHN0eWxlICov
 CglpZiAoYXRhX3BjaV9hbGxvY2F0ZShkZXYpKQoJICAgIHJldHVybiBFTlhJ
 TzsKICAgIH0KCiAgICBjaC0+cl9pb1tBVEFfU1NUQVRVU10ucmVzID0gY3Rs
 ci0+cl9yZXMyOwogICAgY2gtPnJfaW9bQVRBX1NTVEFUVVNdLm9mZnNldCA9
 IChjaC0+dW5pdCA8PCBjdGxyLT5jaGlwLT5jZmcxKTsKICAgIGNoLT5yX2lv
 W0FUQV9TRVJST1JdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lv
 W0FUQV9TRVJST1JdLm9mZnNldCA9IDB4MDQgKyAoY2gtPnVuaXQgPDwgY3Rs
 ci0+Y2hpcC0+Y2ZnMSk7CiAgICBjaC0+cl9pb1tBVEFfU0NPTlRST0xdLnJl
 cyA9IGN0bHItPnJfcmVzMjsKICAgIGNoLT5yX2lvW0FUQV9TQ09OVFJPTF0u
 b2Zmc2V0ID0gMHgwOCArIChjaC0+dW5pdCA8PCBjdGxyLT5jaGlwLT5jZmcx
 KTsKICAgIGNoLT5mbGFncyB8PSBBVEFfTk9fU0xBVkU7CgogICAgLyogWFhY
 IFNPUyBQSFkgaG90cGx1ZyBoYW5kbGluZyBtaXNzaW5nIGluIFZJQSBjaGlw
 ID8/ICovCiAgICAvKiBYWFggU09TIHVua25vd24gaG93IHRvIGVuYWJsZSBQ
 SFkgc3RhdGUgY2hhbmdlIGludGVycnVwdCAqLwogICAgcmV0dXJuIDA7Cn0K
 CnN0YXRpYyB2b2lkCmF0YV92aWFfcmVzZXQoZGV2aWNlX3QgZGV2KQp7CiAg
 ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk
 ZXYpOwoKICAgIGF0YV9zYXRhX3BoeV9lbmFibGUoY2gpOwp9CgpzdGF0aWMg
 dm9pZAphdGFfdmlhX3NvdXRoYnJpZGdlX2ZpeHVwKGRldmljZV90IGRldikK
 ewogICAgZGV2aWNlX3QgKmNoaWxkcmVuOwogICAgaW50IG5jaGlsZHJlbiwg
 aTsKCiAgICBpZiAoZGV2aWNlX2dldF9jaGlsZHJlbihkZXZpY2VfZ2V0X3Bh
 cmVudChkZXYpLCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKQoJcmV0dXJuOwoK
 ICAgIGZvciAoaSA9IDA7IGkgPCBuY2hpbGRyZW47IGkrKykgewoJaWYgKHBj
 aV9nZXRfZGV2aWQoY2hpbGRyZW5baV0pID09IEFUQV9WSUE4MzYzIHx8Cgkg
 ICAgcGNpX2dldF9kZXZpZChjaGlsZHJlbltpXSkgPT0gQVRBX1ZJQTgzNzEg
 fHwKCSAgICBwY2lfZ2V0X2RldmlkKGNoaWxkcmVuW2ldKSA9PSBBVEFfVklB
 ODY2MiB8fAoJICAgIHBjaV9nZXRfZGV2aWQoY2hpbGRyZW5baV0pID09IEFU
 QV9WSUE4MzYxKSB7CgkgICAgdV9pbnQ4X3QgcmVnNzYgPSBwY2lfcmVhZF9j
 b25maWcoY2hpbGRyZW5baV0sIDB4NzYsIDEpOwoKCSAgICBpZiAoKHJlZzc2
 ICYgMHhmMCkgIT0gMHhkMCkgewoJCWRldmljZV9wcmludGYoZGV2LAoJCSJD
 b3JyZWN0aW5nIFZJQSBjb25maWcgZm9yIHNvdXRoYnJpZGdlIGRhdGEgY29y
 cnVwdGlvbiBidWdcbiIpOwoJCXBjaV93cml0ZV9jb25maWcoY2hpbGRyZW5b
 aV0sIDB4NzUsIDB4ODAsIDEpOwoJCXBjaV93cml0ZV9jb25maWcoY2hpbGRy
 ZW5baV0sIDB4NzYsIChyZWc3NiAmIDB4MGYpIHwgMHhkMCwgMSk7CgkgICAg
 fQoJICAgIGJyZWFrOwoJfQogICAgfQogICAgZnJlZShjaGlsZHJlbiwgTV9U
 RU1QKTsKfQoKCi8qIGNvbW1vbiBjb2RlIGZvciBWSUEsIEFNRCAmIG5WaWRp
 YSAqLwpzdGF0aWMgdm9pZAphdGFfdmlhX2ZhbWlseV9zZXRtb2RlKGRldmlj
 ZV90IGRldiwgaW50IG1vZGUpCnsKICAgIGRldmljZV90IGdwYXJlbnQgPSBH
 UkFORFBBUkVOVChkZXYpOwogICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxl
 ciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZ3BhcmVudCk7CiAgICBzdHJ1
 Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2Vf
 Z2V0X3BhcmVudChkZXYpKTsKICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFk
 ZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAgICB1X2ludDhfdCB0aW1p
 bmdzW10gPSB7IDB4YTgsIDB4NjUsIDB4NDIsIDB4MjIsIDB4MjAsIDB4NDIs
 IDB4MjIsIDB4MjAsCgkJCSAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4
 MjAsIDB4MjAgfTsKICAgIGludCBtb2Rlc1tdWzddID0gewoJeyAweGMyLCAw
 eGMxLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sICAgLyogVklB
 IEFUQTMzICovCgl7IDB4ZWUsIDB4ZWMsIDB4ZWEsIDB4ZTksIDB4ZTgsIDB4
 MDAsIDB4MDAgfSwgICAvKiBWSUEgQVRBNjYgKi8KCXsgMHhmNywgMHhmNiwg
 MHhmNCwgMHhmMiwgMHhmMSwgMHhmMCwgMHgwMCB9LCAgIC8qIFZJQSBBVEEx
 MDAgKi8KCXsgMHhmNywgMHhmNywgMHhmNiwgMHhmNCwgMHhmMiwgMHhmMSwg
 MHhmMCB9LCAgIC8qIFZJQSBBVEExMzMgKi8KCXsgMHhjMiwgMHhjMSwgMHhj
 MCwgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNyB9fTsgIC8qIEFNRC9uVklESUEg
 Ki8KICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYo
 YXRhZGV2LT51bml0KTsKICAgIGludCByZWcgPSAweDUzIC0gZGV2bm87CiAg
 ICBpbnQgZXJyb3I7CgogICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwg
 bW9kZSwgY3Rsci0+Y2hpcC0+bWF4X2RtYSk7CgogICAgaWYgKGN0bHItPmNo
 aXAtPmNmZzIgJiBBTURDQUJMRSkgewoJaWYgKG1vZGUgPiBBVEFfVURNQTIg
 JiYKCSAgICAhKHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDQyLCAxKSAm
 ICgxIDw8IGRldm5vKSkpIHsKCSAgICBhdGFfcHJpbnRfY2FibGUoZGV2LCAi
 Y29udHJvbGxlciIpOwoJICAgIG1vZGUgPSBBVEFfVURNQTI7Cgl9CiAgICB9
 CiAgICBlbHNlIAoJbW9kZSA9IGF0YV9jaGVja184MHBpbihkZXYsIG1vZGUp
 OwoKICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYgTlZJRElBKQoJcmVnICs9
 IDB4MTA7CgogICAgaWYgKGN0bHItPmNoaXAtPmNmZzEgIT0gVklBMTMzKQoJ
 cGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCByZWcgLSAweDA4LCB0aW1pbmdz
 W2F0YV9tb2RlMmlkeChtb2RlKV0sIDEpOwoKICAgIGVycm9yID0gYXRhX2Nv
 bnRyb2xjbWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVS
 LCAwLCBtb2RlKTsKCiAgICBpZiAoYm9vdHZlcmJvc2UpCglkZXZpY2VfcHJp
 bnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlwXG4iLAoJCSAgICAg
 IChlcnJvcikgPyAiRkFJTFVSRSAiIDogIiIsIGF0YV9tb2RlMnN0cihtb2Rl
 KSwKCQkgICAgICBjdGxyLT5jaGlwLT50ZXh0KTsKICAgIGlmICghZXJyb3Ip
 IHsKCWlmIChtb2RlID49IEFUQV9VRE1BMCkKCSAgICBwY2lfd3JpdGVfY29u
 ZmlnKGdwYXJlbnQsIHJlZywKCQkJICAgICBtb2Rlc1tjdGxyLT5jaGlwLT5j
 ZmcxXVttb2RlICYgQVRBX01PREVfTUFTS10sIDEpOwoJZWxzZQoJICAgIHBj
 aV93cml0ZV9jb25maWcoZ3BhcmVudCwgcmVnLCAweDhiLCAxKTsKCWF0YWRl
 di0+bW9kZSA9IG1vZGU7CiAgICB9Cn0KCgovKiBtaXNjIGZ1bmN0aW9ucyAq
 LwpzdGF0aWMgc3RydWN0IGF0YV9jaGlwX2lkICoKYXRhX21hdGNoX2NoaXAo
 ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXRhX2NoaXBfaWQgKmluZGV4KQp7CiAg
 ICB3aGlsZSAoaW5kZXgtPmNoaXBpZCAhPSAwKSB7CglpZiAocGNpX2dldF9k
 ZXZpZChkZXYpID09IGluZGV4LT5jaGlwaWQgJiYKCSAgICBwY2lfZ2V0X3Jl
 dmlkKGRldikgPj0gaW5kZXgtPmNoaXByZXYpCgkgICAgcmV0dXJuIGluZGV4
 OwoJaW5kZXgrKzsKICAgIH0KICAgIHJldHVybiBOVUxMOwp9CgpzdGF0aWMg
 c3RydWN0IGF0YV9jaGlwX2lkICoKYXRhX2ZpbmRfY2hpcChkZXZpY2VfdCBk
 ZXYsIHN0cnVjdCBhdGFfY2hpcF9pZCAqaW5kZXgsIGludCBzbG90KQp7CiAg
 ICBkZXZpY2VfdCAqY2hpbGRyZW47CiAgICBpbnQgbmNoaWxkcmVuLCBpOwoK
 ICAgIGlmIChkZXZpY2VfZ2V0X2NoaWxkcmVuKGRldmljZV9nZXRfcGFyZW50
 KGRldiksICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpCglyZXR1cm4gMDsKCiAg
 ICB3aGlsZSAoaW5kZXgtPmNoaXBpZCAhPSAwKSB7Cglmb3IgKGkgPSAwOyBp
 IDwgbmNoaWxkcmVuOyBpKyspIHsKCSAgICBpZiAoKChzbG90ID49IDAgJiYg
 cGNpX2dldF9zbG90KGNoaWxkcmVuW2ldKSA9PSBzbG90KSB8fCAKCQkgKHNs
 b3QgPCAwICYmIHBjaV9nZXRfc2xvdChjaGlsZHJlbltpXSkgPD0gLXNsb3Qp
 KSAmJgoJCXBjaV9nZXRfZGV2aWQoY2hpbGRyZW5baV0pID09IGluZGV4LT5j
 aGlwaWQgJiYKCQlwY2lfZ2V0X3JldmlkKGNoaWxkcmVuW2ldKSA+PSBpbmRl
 eC0+Y2hpcHJldikgewoJCWZyZWUoY2hpbGRyZW4sIE1fVEVNUCk7CgkJcmV0
 dXJuIGluZGV4OwoJICAgIH0KCX0KCWluZGV4Kys7CiAgICB9CiAgICBmcmVl
 KGNoaWxkcmVuLCBNX1RFTVApOwogICAgcmV0dXJuIE5VTEw7Cn0KCnN0YXRp
 YyBpbnQKYXRhX3NldHVwX2ludGVycnVwdChkZXZpY2VfdCBkZXYpCnsKICAg
 IHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0
 X3NvZnRjKGRldik7CiAgICBpbnQgcmlkID0gQVRBX0lSUV9SSUQ7CgogICAg
 aWYgKCFhdGFfbGVnYWN5KGRldikpIHsKCWlmICghKGN0bHItPnJfaXJxID0g
 YnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlk
 LAoJCQkJCQkgICBSRl9TSEFSRUFCTEUgfCBSRl9BQ1RJVkUpKSkgewoJICAg
 IGRldmljZV9wcmludGYoZGV2LCAidW5hYmxlIHRvIG1hcCBpbnRlcnJ1cHRc
 biIpOwoJICAgIHJldHVybiBFTlhJTzsKCX0KCWlmICgoYnVzX3NldHVwX2lu
 dHIoZGV2LCBjdGxyLT5yX2lycSwgQVRBX0lOVFJfRkxBR1MsCgkJCSAgICBh
 dGFfZ2VuZXJpY19pbnRyLCBjdGxyLCAmY3Rsci0+aGFuZGxlKSkpIHsKCSAg
 ICBkZXZpY2VfcHJpbnRmKGRldiwgInVuYWJsZSB0byBzZXR1cCBpbnRlcnJ1
 cHRcbiIpOwoJICAgIHJldHVybiBFTlhJTzsKCX0KICAgIH0KICAgIHJldHVy
 biAwOwp9CgpzdHJ1Y3QgYXRhX3NlcmlhbGl6ZSB7CiAgICBzdHJ1Y3QgbXR4
 ICBsb2NrZWRfbXR4OwogICAgaW50ICAgICAgICAgbG9ja2VkX2NoOwogICAg
 aW50ICAgICAgICAgcmVzdGFydF9jaDsKfTsKCnN0YXRpYyBpbnQKYXRhX3Nl
 cmlhbGl6ZShkZXZpY2VfdCBkZXYsIGludCBmbGFncykKewogICAgc3RydWN0
 IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMo
 ZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICBzdHJ1Y3QgYXRhX2NoYW5u
 ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgc3RydWN0IGF0
 YV9zZXJpYWxpemUgKnNlcmlhbDsKICAgIHN0YXRpYyBpbnQgaW5pdGVkID0g
 MDsKICAgIGludCByZXM7CgogICAgaWYgKCFpbml0ZWQpIHsKCXNlcmlhbCA9
 IG1hbGxvYyhzaXplb2Yoc3RydWN0IGF0YV9zZXJpYWxpemUpLAoJCQkgICAg
 ICBNX1RFTVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsKCW10eF9pbml0KCZzZXJp
 YWwtPmxvY2tlZF9tdHgsICJBVEEgc2VyaWFsaXplIGxvY2siLCBOVUxMLCBN
 VFhfREVGKTsgCglzZXJpYWwtPmxvY2tlZF9jaCA9IC0xOwoJc2VyaWFsLT5y
 ZXN0YXJ0X2NoID0gLTE7CglkZXZpY2Vfc2V0X2l2YXJzKGN0bHItPmRldiwg
 c2VyaWFsKTsKCWluaXRlZCA9IDE7CiAgICB9CiAgICBlbHNlCglzZXJpYWwg
 PSBkZXZpY2VfZ2V0X2l2YXJzKGN0bHItPmRldik7CgogICAgbXR4X2xvY2so
 JnNlcmlhbC0+bG9ja2VkX210eCk7CiAgICBzd2l0Y2ggKGZsYWdzKSB7CiAg
 ICBjYXNlIEFUQV9MRl9MT0NLOgoJaWYgKHNlcmlhbC0+bG9ja2VkX2NoID09
 IC0xKQoJICAgIHNlcmlhbC0+bG9ja2VkX2NoID0gY2gtPnVuaXQ7CglpZiAo
 c2VyaWFsLT5sb2NrZWRfY2ggIT0gY2gtPnVuaXQpCgkgICAgc2VyaWFsLT5y
 ZXN0YXJ0X2NoID0gY2gtPnVuaXQ7CglicmVhazsKCiAgICBjYXNlIEFUQV9M
 Rl9VTkxPQ0s6CglpZiAoc2VyaWFsLT5sb2NrZWRfY2ggPT0gY2gtPnVuaXQp
 IHsKCSAgICBzZXJpYWwtPmxvY2tlZF9jaCA9IC0xOwoJICAgIGlmIChzZXJp
 YWwtPnJlc3RhcnRfY2ggIT0gLTEpIHsKCQlpZiAoKGNoID0gY3Rsci0+aW50
 ZXJydXB0W3NlcmlhbC0+cmVzdGFydF9jaF0uYXJndW1lbnQpKSB7CgkJICAg
 IHNlcmlhbC0+cmVzdGFydF9jaCA9IC0xOwoJCSAgICBtdHhfdW5sb2NrKCZz
 ZXJpYWwtPmxvY2tlZF9tdHgpOwoJCSAgICBhdGFfc3RhcnQoY2gtPmRldik7
 CgkJICAgIHJldHVybiAtMTsKCQl9CgkgICAgfQoJfQoJYnJlYWs7CgogICAg
 Y2FzZSBBVEFfTEZfV0hJQ0g6CglicmVhazsKICAgIH0KICAgIHJlcyA9IHNl
 cmlhbC0+bG9ja2VkX2NoOwogICAgbXR4X3VubG9jaygmc2VyaWFsLT5sb2Nr
 ZWRfbXR4KTsKICAgIHJldHVybiByZXM7Cn0KCnN0YXRpYyB2b2lkCmF0YV9w
 cmludF9jYWJsZShkZXZpY2VfdCBkZXYsIHVfaW50OF90ICp3aG8pCnsKICAg
 IGRldmljZV9wcmludGYoZGV2LAoJCSAgIkRNQSBsaW1pdGVkIHRvIFVETUEz
 MywgJXMgZm91bmQgbm9uLUFUQTY2IGNhYmxlXG4iLCB3aG8pOwp9CgpzdGF0
 aWMgaW50CmF0YV9hdGFwaShkZXZpY2VfdCBkZXYpCnsKICAgIHN0cnVjdCBh
 dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRf
 cGFyZW50KGRldikpOwogICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9
 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKCiAgICByZXR1cm4gKChhdGFkZXYt
 PnVuaXQgPT0gQVRBX01BU1RFUiAmJiBjaC0+ZGV2aWNlcyAmIEFUQV9BVEFQ
 SV9NQVNURVIpIHx8CgkgICAgKGF0YWRldi0+dW5pdCA9PSBBVEFfU0xBVkUg
 JiYgY2gtPmRldmljZXMgJiBBVEFfQVRBUElfU0xBVkUpKTsKfQoKc3RhdGlj
 IGludAphdGFfY2hlY2tfODBwaW4oZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkK
 ewogICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRf
 c29mdGMoZGV2KTsKCiAgICBpZiAobW9kZSA+IEFUQV9VRE1BMiAmJiAhKGF0
 YWRldi0+cGFyYW0uaHdyZXMgJiBBVEFfQ0FCTEVfSUQpKSB7CglhdGFfcHJp
 bnRfY2FibGUoZGV2LCAiZGV2aWNlIik7Cgltb2RlID0gQVRBX1VETUEyOwog
 ICAgfQogICAgcmV0dXJuIG1vZGU7Cn0KCnN0YXRpYyBpbnQKYXRhX21vZGUy
 aWR4KGludCBtb2RlKQp7CiAgICBpZiAoKG1vZGUgJiBBVEFfRE1BX01BU0sp
 ID09IEFUQV9VRE1BMCkKCSByZXR1cm4gKG1vZGUgJiBBVEFfTU9ERV9NQVNL
 KSArIDg7CiAgICBpZiAoKG1vZGUgJiBBVEFfRE1BX01BU0spID09IEFUQV9X
 RE1BMCkKCSByZXR1cm4gKG1vZGUgJiBBVEFfTU9ERV9NQVNLKSArIDU7CiAg
 ICByZXR1cm4gKG1vZGUgJiBBVEFfTU9ERV9NQVNLKSAtIEFUQV9QSU8wOwp9
 Cg==
 
 --1421935635-678854362-1187120232=:26064
 Content-Type: APPLICATION/OCTET-STREAM; name="ata-pci.h"
 Content-Transfer-Encoding: BASE64
 Content-Disposition: attachment; filename="ata-pci.h"
 
 LyotCiAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDYgU/hyZW4gU2NobWlk
 dCA8c29zQEZyZWVCU0Qub3JnPgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
 KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
 YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBh
 cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
 aXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
 b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAq
 ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
 b2xsb3dpbmcgZGlzY2xhaW1lciwKICogICAgd2l0aG91dCBtb2RpZmljYXRp
 b24sIGltbWVkaWF0ZWx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUu
 CiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
 cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
 bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoK
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
 QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5U
 SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
 RUQgV0FSUkFOVElFUwogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
 U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgog
 KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
 QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUws
 IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
 TkcsIEJVVAogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
 U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERB
 VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
 RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZ
 LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
 T1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
 SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiBUSElTIFNP
 RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
 IFNVQ0ggREFNQUdFLgogKgogKiAkRnJlZUJTRDogc3JjL3N5cy9kZXYvYXRh
 L2F0YS1wY2kuaCx2IDEuNDkuMi4xMCAyMDA2LzA5LzMwIDE0OjUxOjQ5IHNv
 cyBFeHAgJAogKi8KCi8qIHN0cnVjdHVyZSBob2xkaW5nIGNoaXBzZXQgY29u
 ZmlnIGluZm8gKi8Kc3RydWN0IGF0YV9jaGlwX2lkIHsKICAgIHVfaW50MzJf
 dCAgICAgICAgICAgY2hpcGlkOwogICAgdV9pbnQ4X3QgICAgICAgICAgICBj
 aGlwcmV2OwogICAgaW50ICAgICAgICAgICAgICAgICBjZmcxOwogICAgaW50
 ICAgICAgICAgICAgICAgICBjZmcyOwogICAgdV9pbnQ4X3QgICAgICAgICAg
 ICBtYXhfZG1hOwogICAgY2hhciAgICAgICAgICAgICAgICAqdGV4dDsKfTsK
 Ci8qIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgUENJIEFUQSBjb250cm9sbGVy
 ICovCnN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgewogICAgZGV2aWNlX3Qg
 ICAgICAgICAgICBkZXY7CiAgICBpbnQgICAgICAgICAgICAgICAgIHJfdHlw
 ZTE7CiAgICBpbnQgICAgICAgICAgICAgICAgIHJfcmlkMTsKICAgIHN0cnVj
 dCByZXNvdXJjZSAgICAgKnJfcmVzMTsKICAgIGludCAgICAgICAgICAgICAg
 ICAgcl90eXBlMjsKICAgIGludCAgICAgICAgICAgICAgICAgcl9yaWQyOwog
 ICAgc3RydWN0IHJlc291cmNlICAgICAqcl9yZXMyOwogICAgc3RydWN0IHJl
 c291cmNlICAgICAqcl9pcnE7CiAgICB2b2lkICAgICAgICAgICAgICAgICpo
 YW5kbGU7CiAgICBzdHJ1Y3QgYXRhX2NoaXBfaWQgICpjaGlwOwogICAgaW50
 ICAgICAgICAgICAgICAgICBjaGFubmVsczsKICAgIGludCAgICAgICAgICAg
 ICAgICAgKCpjaGlwaW5pdCkoZGV2aWNlX3QpOwogICAgaW50ICAgICAgICAg
 ICAgICAgICAoKmFsbG9jYXRlKShkZXZpY2VfdCk7CiAgICBpbnQgICAgICAg
 ICAgICAgICAgICgqbG9ja2luZykoZGV2aWNlX3QsIGludCk7CiAgICB2b2lk
 ICAgICAgICAgICAgICAgICgqcmVzZXQpKGRldmljZV90KTsKICAgIHZvaWQg
 ICAgICAgICAgICAgICAgKCpkbWFpbml0KShkZXZpY2VfdCk7CiAgICB2b2lk
 ICAgICAgICAgICAgICAgICgqc2V0bW9kZSkoZGV2aWNlX3QsIGludCk7CiAg
 ICBzdHJ1Y3QgewogICAgdm9pZCAgICAgICAgICAgICAgICAoKmZ1bmN0aW9u
 KSh2b2lkICopOwogICAgdm9pZCAgICAgICAgICAgICAgICAqYXJndW1lbnQ7
 CiAgICB9IGludGVycnVwdFs4XTsgICAgIC8qIFhYWCBTT1MgbWF4IGNoIyBm
 b3Igbm93ICovCn07CgovKiBzdHJ1Y3R1cmUgZm9yIFNBVEEgY29ubmVjdGlv
 biB1cGRhdGUgaG90cGx1Zy9ob3Rzd2FwIHN1cHBvcnQgKi8Kc3RydWN0IGF0
 YV9jb25uZWN0X3Rhc2sgewogICAgc3RydWN0IHRhc2sgdGFzazsKICAgIGRl
 dmljZV90ICAgIGRldjsgIAogICAgaW50ICAgICAgICAgYWN0aW9uOwojZGVm
 aW5lIEFUQV9DX0FUVEFDSCAgICAxCiNkZWZpbmUgQVRBX0NfREVUQUNIICAg
 IDIKfTsKCi8qIGRlZmluZXMgZm9yIGtub3duIGNoaXBzZXQgUENJIGlkJ3Mg
 Ki8KI2RlZmluZSBBVEFfQUNBUkRfSUQgICAgICAgICAgICAweDExOTEKI2Rl
 ZmluZSBBVEFfQVRQODUwICAgICAgICAgICAgICAweDAwMDIxMTkxCiNkZWZp
 bmUgQVRBX0FUUDg1MEEgICAgICAgICAgICAgMHgwMDA0MTE5MQojZGVmaW5l
 IEFUQV9BVFA4NTBSICAgICAgICAgICAgIDB4MDAwNTExOTEKI2RlZmluZSBB
 VEFfQVRQODYwQSAgICAgICAgICAgICAweDAwMDYxMTkxCiNkZWZpbmUgQVRB
 X0FUUDg2MFIgICAgICAgICAgICAgMHgwMDA3MTE5MQojZGVmaW5lIEFUQV9B
 VFA4NjVBICAgICAgICAgICAgIDB4MDAwODExOTEKI2RlZmluZSBBVEFfQVRQ
 ODY1UiAgICAgICAgICAgICAweDAwMDkxMTkxCgojZGVmaW5lIEFUQV9BTURf
 SUQgICAgICAgICAgICAgIDB4MTAyMgojZGVmaW5lIEFUQV9BTUQ3NTUgICAg
 ICAgICAgICAgIDB4NzQwMTEwMjIKI2RlZmluZSBBVEFfQU1ENzU2ICAgICAg
 ICAgICAgICAweDc0MDkxMDIyCiNkZWZpbmUgQVRBX0FNRDc2NiAgICAgICAg
 ICAgICAgMHg3NDExMTAyMgojZGVmaW5lIEFUQV9BTUQ3NjggICAgICAgICAg
 ICAgIDB4NzQ0MTEwMjIKI2RlZmluZSBBVEFfQU1EODExMSAgICAgICAgICAg
 ICAweDc0NjkxMDIyCgojZGVmaW5lIEFUQV9BQ0VSX0xBQlNfSUQgICAgICAg
 IDB4MTBiOQojZGVmaW5lIEFUQV9BTElfMTUzMyAgICAgICAgICAgIDB4MTUz
 MzEwYjkKI2RlZmluZSBBVEFfQUxJXzUyMjkgICAgICAgICAgICAweDUyMjkx
 MGI5CiNkZWZpbmUgQVRBX0FMSV81MjgxICAgICAgICAgICAgMHg1MjgxMTBi
 OQojZGVmaW5lIEFUQV9BTElfNTI4NyAgICAgICAgICAgIDB4NTI4NzEwYjkK
 I2RlZmluZSBBVEFfQUxJXzUyODggICAgICAgICAgICAweDUyODgxMGI5CiNk
 ZWZpbmUgQVRBX0FMSV81Mjg5ICAgICAgICAgICAgMHg1Mjg5MTBiOQoKI2Rl
 ZmluZSBBVEFfQVRJX0lEICAgICAgICAgICAgICAweDEwMDIKI2RlZmluZSBB
 VEFfQVRJX0lYUDIwMCAgICAgICAgICAweDQzNDkxMDAyCiNkZWZpbmUgQVRB
 X0FUSV9JWFAzMDAgICAgICAgICAgMHg0MzY5MTAwMgojZGVmaW5lIEFUQV9B
 VElfSVhQNDAwICAgICAgICAgIDB4NDM3NjEwMDIKI2RlZmluZSBBVEFfQVRJ
 X0lYUDMwMF9TMSAgICAgICAweDQzNmUxMDAyCiNkZWZpbmUgQVRBX0FUSV9J
 WFA0MDBfUzEgICAgICAgMHg0Mzc5MTAwMgojZGVmaW5lIEFUQV9BVElfSVhQ
 NDAwX1MyICAgICAgIDB4NDM3YTEwMDIKCiNkZWZpbmUgQVRBX0NFTkFURUtf
 SUQgICAgICAgICAgMHgxNmNhCiNkZWZpbmUgQVRBX0NFTkFURUtfUk9DS0VU
 ICAgICAgMHgwMDAxMTZjYQoKI2RlZmluZSBBVEFfQ1lSSVhfSUQgICAgICAg
 ICAgICAweDEwNzgKI2RlZmluZSBBVEFfQ1lSSVhfNTUzMCAgICAgICAgICAw
 eDAxMDIxMDc4CgojZGVmaW5lIEFUQV9DWVBSRVNTX0lEICAgICAgICAgIDB4
 MTA4MAojZGVmaW5lIEFUQV9DWVBSRVNTXzgyQzY5MyAgICAgIDB4YzY5MzEw
 ODAKCiNkZWZpbmUgQVRBX0RFQ18yMTE1MCAgICAgICAgICAgMHgwMDIyMTAx
 MQojZGVmaW5lIEFUQV9ERUNfMjExNTBfMSAgICAgICAgIDB4MDAyMzEwMTEK
 CiNkZWZpbmUgQVRBX0hJR0hQT0lOVF9JRCAgICAgICAgMHgxMTAzCiNkZWZp
 bmUgQVRBX0hQVDM2NiAgICAgICAgICAgICAgMHgwMDA0MTEwMwojZGVmaW5l
 IEFUQV9IUFQzNzIgICAgICAgICAgICAgIDB4MDAwNTExMDMKI2RlZmluZSBB
 VEFfSFBUMzAyICAgICAgICAgICAgICAweDAwMDYxMTAzCiNkZWZpbmUgQVRB
 X0hQVDM3MSAgICAgICAgICAgICAgMHgwMDA3MTEwMwojZGVmaW5lIEFUQV9I
 UFQzNzQgICAgICAgICAgICAgIDB4MDAwODExMDMKCiNkZWZpbmUgQVRBX0lO
 VEVMX0lEICAgICAgICAgICAgMHg4MDg2CiNkZWZpbmUgQVRBX0k5NjBSTSAg
 ICAgICAgICAgICAgMHgwOTYyODA4NgojZGVmaW5lIEFUQV9JODIzNzFGQiAg
 ICAgICAgICAgIDB4MTIzMDgwODYKI2RlZmluZSBBVEFfSTgyMzcxU0IgICAg
 ICAgICAgICAweDcwMTA4MDg2CiNkZWZpbmUgQVRBX0k4MjM3MUFCICAgICAg
 ICAgICAgMHg3MTExODA4NgojZGVmaW5lIEFUQV9JODI0NDNNWCAgICAgICAg
 ICAgIDB4NzE5OTgwODYKI2RlZmluZSBBVEFfSTgyNDUxTlggICAgICAgICAg
 ICAweDg0Y2E4MDg2CiNkZWZpbmUgQVRBX0k4MjM3MkZCICAgICAgICAgICAg
 MHg3NjAxODA4NgojZGVmaW5lIEFUQV9JODI4MDFBQiAgICAgICAgICAgIDB4
 MjQyMTgwODYKI2RlZmluZSBBVEFfSTgyODAxQUEgICAgICAgICAgICAweDI0
 MTE4MDg2CiNkZWZpbmUgQVRBX0k4MjgwMUJBICAgICAgICAgICAgMHgyNDRh
 ODA4NgojZGVmaW5lIEFUQV9JODI4MDFCQV8xICAgICAgICAgIDB4MjQ0Yjgw
 ODYKI2RlZmluZSBBVEFfSTgyODAxQ0EgICAgICAgICAgICAweDI0OGE4MDg2
 CiNkZWZpbmUgQVRBX0k4MjgwMUNBXzEgICAgICAgICAgMHgyNDhiODA4Ngoj
 ZGVmaW5lIEFUQV9JODI4MDFEQiAgICAgICAgICAgIDB4MjRjYjgwODYKI2Rl
 ZmluZSBBVEFfSTgyODAxREJfMSAgICAgICAgICAweDI0Y2E4MDg2CiNkZWZp
 bmUgQVRBX0k4MjgwMUVCICAgICAgICAgICAgMHgyNGRiODA4NgojZGVmaW5l
 IEFUQV9JODI4MDFFQl9TMSAgICAgICAgIDB4MjRkMTgwODYKI2RlZmluZSBB
 VEFfSTgyODAxRUJfUjEgICAgICAgICAweDI0ZGY4MDg2CiNkZWZpbmUgQVRB
 X0k2MzAwRVNCICAgICAgICAgICAgMHgyNWEyODA4NgojZGVmaW5lIEFUQV9J
 NjMwMEVTQl9TMSAgICAgICAgIDB4MjVhMzgwODYKI2RlZmluZSBBVEFfSTYz
 MDBFU0JfUjEgICAgICAgICAweDI1YjA4MDg2CiNkZWZpbmUgQVRBX0k2M1hY
 RVNCMiAgICAgICAgICAgMHgyNjllODA4NgojZGVmaW5lIEFUQV9JNjNYWEVT
 QjJfUzEgICAgICAgIDB4MjY4MDgwODYKI2RlZmluZSBBVEFfSTYzWFhFU0Iy
 X1MyICAgICAgICAweDI2ODE4MDg2CiNkZWZpbmUgQVRBX0k2M1hYRVNCMl9S
 MSAgICAgICAgMHgyNjgyODA4NgojZGVmaW5lIEFUQV9JNjNYWEVTQjJfUjIg
 ICAgICAgIDB4MjY4MzgwODYKI2RlZmluZSBBVEFfSTgyODAxRkIgICAgICAg
 ICAgICAweDI2NmY4MDg2CiNkZWZpbmUgQVRBX0k4MjgwMUZCX1MxICAgICAg
 ICAgMHgyNjUxODA4NgojZGVmaW5lIEFUQV9JODI4MDFGQl9SMSAgICAgICAg
 IDB4MjY1MjgwODYKI2RlZmluZSBBVEFfSTgyODAxRkJNICAgICAgICAgICAw
 eDI2NTM4MDg2CiNkZWZpbmUgQVRBX0k4MjgwMUdCICAgICAgICAgICAgMHgy
 N2RmODA4NgojZGVmaW5lIEFUQV9JODI4MDFHQl9TMSAgICAgICAgIDB4Mjdj
 MDgwODYKI2RlZmluZSBBVEFfSTgyODAxR0JfQUggICAgICAgICAweDI3YzE4
 MDg2CiNkZWZpbmUgQVRBX0k4MjgwMUdCX1IxICAgICAgICAgMHgyN2MzODA4
 NgojZGVmaW5lIEFUQV9JODI4MDFHQk1fUzEgICAgICAgIDB4MjdjNDgwODYK
 I2RlZmluZSBBVEFfSTgyODAxR0JNX0FIICAgICAgICAweDI3YzU4MDg2CiNk
 ZWZpbmUgQVRBX0k4MjgwMUdCTV9SMSAgICAgICAgMHgyN2M2ODA4NgojZGVm
 aW5lIEFUQV9JODI4MDFIQl9TMSAgICAgICAgIDB4MjgyMDgwODYKI2RlZmlu
 ZSBBVEFfSTgyODAxSEJfQUg2ICAgICAgICAweDI4MjE4MDg2CiNkZWZpbmUg
 QVRBX0k4MjgwMUhCX1IxICAgICAgICAgMHgyODIyODA4NgojZGVmaW5lIEFU
 QV9JODI4MDFIQl9BSDQgICAgICAgIDB4MjgyNDgwODYKI2RlZmluZSBBVEFf
 STgyODAxSEJfUzIgICAgICAgICAweDI4MjU4MDg2CiNkZWZpbmUgQVRBX0k4
 MjgwMUhCTV9TMSAgICAgICAgMHgyODI5ODA4NgojZGVmaW5lIEFUQV9JODI4
 MDFIQk1fUzIgICAgICAgIDB4MjgyYTgwODYKCiNkZWZpbmUgQVRBX0k4Mjgw
 MUlST0hfNCAweDI5MjA4MDg2IC8vIElDSDlSL0RPL0RICiNkZWZpbmUgQVRB
 X0k4MjgwMUlCXzJBIDB4MjkyMTgwODYgLy8gSUNIOQojZGVmaW5lIEFUQV9J
 ODI4MDFJUk9IXzYgMHgyOTIyODA4NiAvLyBJQ0g5Ui9ETy9ESAojZGVmaW5l
 IEFUQV9JODI4MDFJQl80IDB4MjkyMzgwODYgLy8gSUNIOQojZGVmaW5lIEFU
 QV9JODI4MDFJUk8gMHgyOTI1ODA4NiAvLyBJQ0g5Ui9ETwojZGVmaW5lIEFU
 QV9JODI4MDFJQl8yQiAweDI5MjY4MDg2IC8vIElDSDkKI2RlZmluZSBBVEFf
 STgyODAxSUJNXzJBIDB4MjkyODgwODYgLy8gSUNIOU0KI2RlZmluZSBBVEFf
 STgyODAxSUJNX0FIIDB4MjkyOTgwODYgLy8gSUNIOU0KI2RlZmluZSBBVEFf
 STgyODAxSVJNX1IgMHgyOTJjODA4NiAvLyBJQ0g5TVIKI2RlZmluZSBBVEFf
 STgyODAxSUJNXzJCIDB4MjkyZDgwODYgLy8gSUNIOU0KI2RlZmluZSBBVEFf
 STgyODAxSUJNXzEgMHgyOTJlODA4NiAvLyBJQ0g5TQoKLyoKI2RlZmluZSBB
 VEFfSTgyODAxSUJfUzEgMHgyOTIwODA4NgojZGVmaW5lIEFUQV9JODI4MDFJ
 Ql9BSDYgMHgyOTIyODA4NgojZGVmaW5lIEFUQV9JODI4MDFJQl9BSDQgMHgy
 OTIzODA4NgojZGVmaW5lIEFUQV9JODI4MDFJQl9TMiAweDI5MjY4MDg2CiNk
 ZWZpbmUgQVRBX0k4MjgwMUlCX1MzIDB4MjkyMTgwODYKKi8KCiNkZWZpbmUg
 QVRBX0kzMTI0NCAgICAgICAgICAgICAgMHgzMjAwODA4NgoKI2RlZmluZSBB
 VEFfSVRFX0lEICAgICAgICAgICAgICAweDEyODMKI2RlZmluZSBBVEFfSVQ4
 MjExRiAgICAgICAgICAgICAweDgyMTExMjgzCiNkZWZpbmUgQVRBX0lUODIx
 MkYgICAgICAgICAgICAgMHg4MjEyMTI4MwoKI2RlZmluZSBBVEFfSk1JQ1JP
 Tl9JRCAgICAgICAgICAweDE5N2IKI2RlZmluZSBBVEFfSk1CMzYwICAgICAg
 ICAgICAgICAweDIzNjAxOTdiCiNkZWZpbmUgQVRBX0pNQjM2MSAgICAgICAg
 ICAgICAgMHgyMzYxMTk3YgojZGVmaW5lIEFUQV9KTUIzNjMgICAgICAgICAg
 ICAgIDB4MjM2MzE5N2IKI2RlZmluZSBBVEFfSk1CMzY1ICAgICAgICAgICAg
 ICAweDIzNjUxOTdiCiNkZWZpbmUgQVRBX0pNQjM2NiAgICAgICAgICAgICAg
 MHgyMzY2MTk3YgoKI2RlZmluZSBBVEFfTUFSVkVMTF9JRCAgICAgICAgICAw
 eDExYWIKI2RlZmluZSBBVEFfTTg4U1g1MDQwICAgICAgICAgICAweDUwNDAx
 MWFiCiNkZWZpbmUgQVRBX004OFNYNTA0MSAgICAgICAgICAgMHg1MDQxMTFh
 YgojZGVmaW5lIEFUQV9NODhTWDUwODAgICAgICAgICAgIDB4NTA4MDExYWIK
 I2RlZmluZSBBVEFfTTg4U1g1MDgxICAgICAgICAgICAweDUwODExMWFiCiNk
 ZWZpbmUgQVRBX004OFNYNjA0MSAgICAgICAgICAgMHg2MDQxMTFhYgojZGVm
 aW5lIEFUQV9NODhTWDYwODEgICAgICAgICAgIDB4NjA4MTExYWIKCiNkZWZp
 bmUgQVRBX01JQ1JPTl9JRCAgICAgICAgICAgMHgxMDQyCiNkZWZpbmUgQVRB
 X01JQ1JPTl9SWjEwMDAgICAgICAgMHgxMDAwMTA0MgojZGVmaW5lIEFUQV9N
 SUNST05fUloxMDAxICAgICAgIDB4MTAwMTEwNDIKCiNkZWZpbmUgQVRBX05B
 VElPTkFMX0lEICAgICAgICAgMHgxMDBiCiNkZWZpbmUgQVRBX1NDMTEwMCAg
 ICAgICAgICAgICAgMHgwNTAyMTAwYgoKI2RlZmluZSBBVEFfTlZJRElBX0lE
 ICAgICAgICAgICAweDEwZGUKI2RlZmluZSBBVEFfTkZPUkNFMSAgICAgICAg
 ICAgICAweDAxYmMxMGRlCiNkZWZpbmUgQVRBX05GT1JDRTIgICAgICAgICAg
 ICAgMHgwMDY1MTBkZQojZGVmaW5lIEFUQV9ORk9SQ0UyX1BSTyAgICAgICAg
 IDB4MDA4NTEwZGUKI2RlZmluZSBBVEFfTkZPUkNFMl9QUk9fUzEgICAgICAw
 eDAwOGUxMGRlCiNkZWZpbmUgQVRBX05GT1JDRTMgICAgICAgICAgICAgMHgw
 MGQ1MTBkZQojZGVmaW5lIEFUQV9ORk9SQ0UzX1BSTyAgICAgICAgIDB4MDBl
 NTEwZGUKI2RlZmluZSBBVEFfTkZPUkNFM19QUk9fUzEgICAgICAweDAwZTMx
 MGRlCiNkZWZpbmUgQVRBX05GT1JDRTNfUFJPX1MyICAgICAgMHgwMGVlMTBk
 ZQojZGVmaW5lIEFUQV9ORk9SQ0VfTUNQMDQgICAgICAgIDB4MDAzNTEwZGUK
 I2RlZmluZSBBVEFfTkZPUkNFX01DUDA0X1MxICAgICAweDAwMzYxMGRlCiNk
 ZWZpbmUgQVRBX05GT1JDRV9NQ1AwNF9TMiAgICAgMHgwMDNlMTBkZQojZGVm
 aW5lIEFUQV9ORk9SQ0VfQ0s4MDQgICAgICAgIDB4MDA1MzEwZGUKI2RlZmlu
 ZSBBVEFfTkZPUkNFX0NLODA0X1MxICAgICAweDAwNTQxMGRlCiNkZWZpbmUg
 QVRBX05GT1JDRV9DSzgwNF9TMiAgICAgMHgwMDU1MTBkZQojZGVmaW5lIEFU
 QV9ORk9SQ0VfTUNQNTEgICAgICAgIDB4MDI2NTEwZGUKI2RlZmluZSBBVEFf
 TkZPUkNFX01DUDUxX1MxICAgICAweDAyNjYxMGRlCiNkZWZpbmUgQVRBX05G
 T1JDRV9NQ1A1MV9TMiAgICAgMHgwMjY3MTBkZQojZGVmaW5lIEFUQV9ORk9S
 Q0VfTUNQNTUgICAgICAgIDB4MDM2ZTEwZGUKI2RlZmluZSBBVEFfTkZPUkNF
 X01DUDU1X1MxICAgICAweDAzN2UxMGRlCiNkZWZpbmUgQVRBX05GT1JDRV9N
 Q1A1NV9TMiAgICAgMHgwMzdmMTBkZQoKI2RlZmluZSBBVEFfUFJPTUlTRV9J
 RCAgICAgICAgICAweDEwNWEKI2RlZmluZSBBVEFfUERDMjAyNDYgICAgICAg
 ICAgICAweDRkMzMxMDVhCiNkZWZpbmUgQVRBX1BEQzIwMjYyICAgICAgICAg
 ICAgMHg0ZDM4MTA1YQojZGVmaW5lIEFUQV9QREMyMDI2MyAgICAgICAgICAg
 IDB4MGQzODEwNWEKI2RlZmluZSBBVEFfUERDMjAyNjUgICAgICAgICAgICAw
 eDBkMzAxMDVhCiNkZWZpbmUgQVRBX1BEQzIwMjY3ICAgICAgICAgICAgMHg0
 ZDMwMTA1YQojZGVmaW5lIEFUQV9QREMyMDI2OCAgICAgICAgICAgIDB4NGQ2
 ODEwNWEKI2RlZmluZSBBVEFfUERDMjAyNjkgICAgICAgICAgICAweDRkNjkx
 MDVhCiNkZWZpbmUgQVRBX1BEQzIwMjcwICAgICAgICAgICAgMHg2MjY4MTA1
 YQojZGVmaW5lIEFUQV9QREMyMDI3MSAgICAgICAgICAgIDB4NjI2OTEwNWEK
 I2RlZmluZSBBVEFfUERDMjAyNzUgICAgICAgICAgICAweDEyNzUxMDVhCiNk
 ZWZpbmUgQVRBX1BEQzIwMjc2ICAgICAgICAgICAgMHg1Mjc1MTA1YQojZGVm
 aW5lIEFUQV9QREMyMDI3NyAgICAgICAgICAgIDB4NzI3NTEwNWEKI2RlZmlu
 ZSBBVEFfUERDMjAzMTggICAgICAgICAgICAweDMzMTgxMDVhCiNkZWZpbmUg
 QVRBX1BEQzIwMzE5ICAgICAgICAgICAgMHgzMzE5MTA1YQojZGVmaW5lIEFU
 QV9QREMyMDM3MSAgICAgICAgICAgIDB4MzM3MTEwNWEKI2RlZmluZSBBVEFf
 UERDMjAzNzUgICAgICAgICAgICAweDMzNzUxMDVhCiNkZWZpbmUgQVRBX1BE
 QzIwMzc2ICAgICAgICAgICAgMHgzMzc2MTA1YQojZGVmaW5lIEFUQV9QREMy
 MDM3NyAgICAgICAgICAgIDB4MzM3NzEwNWEKI2RlZmluZSBBVEFfUERDMjAz
 NzggICAgICAgICAgICAweDMzNzMxMDVhCiNkZWZpbmUgQVRBX1BEQzIwMzc5
 ICAgICAgICAgICAgMHgzMzcyMTA1YQojZGVmaW5lIEFUQV9QREMyMDU3MSAg
 ICAgICAgICAgIDB4MzU3MTEwNWEKI2RlZmluZSBBVEFfUERDMjA1NzUgICAg
 ICAgICAgICAweDNkNzUxMDVhCiNkZWZpbmUgQVRBX1BEQzIwNTc5ICAgICAg
 ICAgICAgMHgzNTc0MTA1YQojZGVmaW5lIEFUQV9QREMyMDc3MSAgICAgICAg
 ICAgIDB4MzU3MDEwNWEKI2RlZmluZSBBVEFfUERDNDA1MTggICAgICAgICAg
 ICAweDNkMTgxMDVhCiNkZWZpbmUgQVRBX1BEQzQwNTE5ICAgICAgICAgICAg
 MHgzNTE5MTA1YQojZGVmaW5lIEFUQV9QREM0MDcxOCAgICAgICAgICAgIDB4
 M2QxNzEwNWEKI2RlZmluZSBBVEFfUERDNDA3MTkgICAgICAgICAgICAweDM1
 MTUxMDVhCiNkZWZpbmUgQVRBX1BEQzQwNzc1ICAgICAgICAgICAgMHgzZDcz
 MTA1YQojZGVmaW5lIEFUQV9QREM0MDc3OSAgICAgICAgICAgIDB4MzU3NzEw
 NWEKI2RlZmluZSBBVEFfUERDMjA2MTcgICAgICAgICAgICAweDY2MTcxMDVh
 CiNkZWZpbmUgQVRBX1BEQzIwNjE4ICAgICAgICAgICAgMHg2NjI2MTA1YQoj
 ZGVmaW5lIEFUQV9QREMyMDYxOSAgICAgICAgICAgIDB4NjYyOTEwNWEKI2Rl
 ZmluZSBBVEFfUERDMjA2MjAgICAgICAgICAgICAweDY2MjAxMDVhCiNkZWZp
 bmUgQVRBX1BEQzIwNjIxICAgICAgICAgICAgMHg2NjIxMTA1YQojZGVmaW5l
 IEFUQV9QREMyMDYyMiAgICAgICAgICAgIDB4NjYyMjEwNWEKI2RlZmluZSBB
 VEFfUERDMjA2MjQgICAgICAgICAgICAweDY2MjQxMDVhCiNkZWZpbmUgQVRB
 X1BEQzgxNTE4ICAgICAgICAgICAgMHg4MDAyMTA1YQoKI2RlZmluZSBBVEFf
 U0VSVkVSV09SS1NfSUQgICAgICAweDExNjYKI2RlZmluZSBBVEFfUk9TQjRf
 SVNBICAgICAgICAgICAweDAyMDAxMTY2CiNkZWZpbmUgQVRBX1JPU0I0ICAg
 ICAgICAgICAgICAgMHgwMjExMTE2NgojZGVmaW5lIEFUQV9DU0I1ICAgICAg
 ICAgICAgICAgIDB4MDIxMjExNjYKI2RlZmluZSBBVEFfQ1NCNiAgICAgICAg
 ICAgICAgICAweDAyMTMxMTY2CiNkZWZpbmUgQVRBX0NTQjZfMSAgICAgICAg
 ICAgICAgMHgwMjE3MTE2NgojZGVmaW5lIEFUQV9IVDEwMDAgICAgICAgICAg
 ICAgIDB4MDIxNDExNjYKI2RlZmluZSBBVEFfSFQxMDAwX1MxICAgICAgICAg
 ICAweDAyNGIxMTY2CiNkZWZpbmUgQVRBX0hUMTAwMF9TMiAgICAgICAgICAg
 MHgwMjRhMTE2NgojZGVmaW5lIEFUQV9LMgkJCTB4MDI0MDExNjYKI2RlZmlu
 ZSBBVEFfRlJPRE80CQkweDAyNDExMTY2CiNkZWZpbmUgQVRBX0ZST0RPOAkJ
 MHgwMjQyMTE2NgoKI2RlZmluZSBBVEFfU0lMSUNPTl9JTUFHRV9JRCAgICAw
 eDEwOTUKI2RlZmluZSBBVEFfU0lJMzExNCAgICAgICAgICAgICAweDMxMTQx
 MDk1CiNkZWZpbmUgQVRBX1NJSTM1MTIgICAgICAgICAgICAgMHgzNTEyMTA5
 NQojZGVmaW5lIEFUQV9TSUkzMTEyICAgICAgICAgICAgIDB4MzExMjEwOTUK
 I2RlZmluZSBBVEFfU0lJMzExMl8xICAgICAgICAgICAweDAyNDAxMDk1CiNk
 ZWZpbmUgQVRBX1NJSTA2ODAgICAgICAgICAgICAgMHgwNjgwMTA5NQojZGVm
 aW5lIEFUQV9DTUQ2NDYgICAgICAgICAgICAgIDB4MDY0NjEwOTUKI2RlZmlu
 ZSBBVEFfQ01ENjQ4ICAgICAgICAgICAgICAweDA2NDgxMDk1CiNkZWZpbmUg
 QVRBX0NNRDY0OSAgICAgICAgICAgICAgMHgwNjQ5MTA5NQoKI2RlZmluZSBB
 VEFfU0lTX0lEICAgICAgICAgICAgICAweDEwMzkKI2RlZmluZSBBVEFfU0lT
 U09VVEggICAgICAgICAgICAweDAwMDgxMDM5CiNkZWZpbmUgQVRBX1NJUzU1
 MTEgICAgICAgICAgICAgMHg1NTExMTAzOQojZGVmaW5lIEFUQV9TSVM1NTEz
 ICAgICAgICAgICAgIDB4NTUxMzEwMzkKI2RlZmluZSBBVEFfU0lTNTUxNyAg
 ICAgICAgICAgICAweDU1MTcxMDM5CiNkZWZpbmUgQVRBX1NJUzU1MTggICAg
 ICAgICAgICAgMHg1NTE4MTAzOQojZGVmaW5lIEFUQV9TSVM1NTcxICAgICAg
 ICAgICAgIDB4NTU3MTEwMzkKI2RlZmluZSBBVEFfU0lTNTU5MSAgICAgICAg
 ICAgICAweDU1OTExMDM5CiNkZWZpbmUgQVRBX1NJUzU1OTYgICAgICAgICAg
 ICAgMHg1NTk2MTAzOQojZGVmaW5lIEFUQV9TSVM1NTk3ICAgICAgICAgICAg
 IDB4NTU5NzEwMzkKI2RlZmluZSBBVEFfU0lTNTU5OCAgICAgICAgICAgICAw
 eDU1OTgxMDM5CiNkZWZpbmUgQVRBX1NJUzU2MDAgICAgICAgICAgICAgMHg1
 NjAwMTAzOQojZGVmaW5lIEFUQV9TSVM1MzAgICAgICAgICAgICAgIDB4MDUz
 MDEwMzkKI2RlZmluZSBBVEFfU0lTNTQwICAgICAgICAgICAgICAweDA1NDAx
 MDM5CiNkZWZpbmUgQVRBX1NJUzU1MCAgICAgICAgICAgICAgMHgwNTUwMTAz
 OQojZGVmaW5lIEFUQV9TSVM2MjAgICAgICAgICAgICAgIDB4MDYyMDEwMzkK
 I2RlZmluZSBBVEFfU0lTNjMwICAgICAgICAgICAgICAweDA2MzAxMDM5CiNk
 ZWZpbmUgQVRBX1NJUzYzNSAgICAgICAgICAgICAgMHgwNjM1MTAzOQojZGVm
 aW5lIEFUQV9TSVM2MzMgICAgICAgICAgICAgIDB4MDYzMzEwMzkKI2RlZmlu
 ZSBBVEFfU0lTNjQwICAgICAgICAgICAgICAweDA2NDAxMDM5CiNkZWZpbmUg
 QVRBX1NJUzY0NSAgICAgICAgICAgICAgMHgwNjQ1MTAzOQojZGVmaW5lIEFU
 QV9TSVM2NDYgICAgICAgICAgICAgIDB4MDY0NjEwMzkKI2RlZmluZSBBVEFf
 U0lTNjQ4ICAgICAgICAgICAgICAweDA2NDgxMDM5CiNkZWZpbmUgQVRBX1NJ
 UzY1MCAgICAgICAgICAgICAgMHgwNjUwMTAzOQojZGVmaW5lIEFUQV9TSVM2
 NTEgICAgICAgICAgICAgIDB4MDY1MTEwMzkKI2RlZmluZSBBVEFfU0lTNjUy
 ICAgICAgICAgICAgICAweDA2NTIxMDM5CiNkZWZpbmUgQVRBX1NJUzY1NSAg
 ICAgICAgICAgICAgMHgwNjU1MTAzOQojZGVmaW5lIEFUQV9TSVM2NTggICAg
 ICAgICAgICAgIDB4MDY1ODEwMzkKI2RlZmluZSBBVEFfU0lTNjYxICAgICAg
 ICAgICAgICAweDA2NjExMDM5CiNkZWZpbmUgQVRBX1NJUzczMCAgICAgICAg
 ICAgICAgMHgwNzMwMTAzOQojZGVmaW5lIEFUQV9TSVM3MzMgICAgICAgICAg
 ICAgIDB4MDczMzEwMzkKI2RlZmluZSBBVEFfU0lTNzM1ICAgICAgICAgICAg
 ICAweDA3MzUxMDM5CiNkZWZpbmUgQVRBX1NJUzc0MCAgICAgICAgICAgICAg
 MHgwNzQwMTAzOQojZGVmaW5lIEFUQV9TSVM3NDUgICAgICAgICAgICAgIDB4
 MDc0NTEwMzkKI2RlZmluZSBBVEFfU0lTNzQ2ICAgICAgICAgICAgICAweDA3
 NDYxMDM5CiNkZWZpbmUgQVRBX1NJUzc0OCAgICAgICAgICAgICAgMHgwNzQ4
 MTAzOQojZGVmaW5lIEFUQV9TSVM3NTAgICAgICAgICAgICAgIDB4MDc1MDEw
 MzkKI2RlZmluZSBBVEFfU0lTNzUxICAgICAgICAgICAgICAweDA3NTExMDM5
 CiNkZWZpbmUgQVRBX1NJUzc1MiAgICAgICAgICAgICAgMHgwNzUyMTAzOQoj
 ZGVmaW5lIEFUQV9TSVM3NTUgICAgICAgICAgICAgIDB4MDc1NTEwMzkKI2Rl
 ZmluZSBBVEFfU0lTOTYxICAgICAgICAgICAgICAweDA5NjExMDM5CiNkZWZp
 bmUgQVRBX1NJUzk2MiAgICAgICAgICAgICAgMHgwOTYyMTAzOQojZGVmaW5l
 IEFUQV9TSVM5NjMgICAgICAgICAgICAgIDB4MDk2MzEwMzkKI2RlZmluZSBB
 VEFfU0lTOTY0ICAgICAgICAgICAgICAweDA5NjQxMDM5CiNkZWZpbmUgQVRB
 X1NJUzk2NSAgICAgICAgICAgICAgMHgwOTY1MTAzOQojZGVmaW5lIEFUQV9T
 SVMxODAgICAgICAgICAgICAgIDB4MDE4MDEwMzkKI2RlZmluZSBBVEFfU0lT
 MTgxICAgICAgICAgICAgICAweDAxODExMDM5CiNkZWZpbmUgQVRBX1NJUzE4
 MiAgICAgICAgICAgICAgMHgwMTgyMTAzOQoKI2RlZmluZSBBVEFfVklBX0lE
 ICAgICAgICAgICAgICAweDExMDYKI2RlZmluZSBBVEFfVklBODJDNTcxICAg
 ICAgICAgICAweDA1NzExMTA2CiNkZWZpbmUgQVRBX1ZJQTgyQzU4NiAgICAg
 ICAgICAgMHgwNTg2MTEwNgojZGVmaW5lIEFUQV9WSUE4MkM1OTYgICAgICAg
 ICAgIDB4MDU5NjExMDYKI2RlZmluZSBBVEFfVklBODJDNjg2ICAgICAgICAg
 ICAweDA2ODYxMTA2CiNkZWZpbmUgQVRBX1ZJQTgyMzEgICAgICAgICAgICAg
 MHg4MjMxMTEwNgojZGVmaW5lIEFUQV9WSUE4MjMzICAgICAgICAgICAgIDB4
 MzA3NDExMDYKI2RlZmluZSBBVEFfVklBODIzM0EgICAgICAgICAgICAweDMx
 NDcxMTA2CiNkZWZpbmUgQVRBX1ZJQTgyMzNDICAgICAgICAgICAgMHgzMTA5
 MTEwNgojZGVmaW5lIEFUQV9WSUE4MjM1ICAgICAgICAgICAgIDB4MzE3NzEx
 MDYKI2RlZmluZSBBVEFfVklBODIzNyAgICAgICAgICAgICAweDMyMjcxMTA2
 CiNkZWZpbmUgQVRBX1ZJQTgyMzdBICAgICAgICAgICAgMHgwNTkxMTEwNgoj
 ZGVmaW5lIEFUQV9WSUE4MjUxICAgICAgICAgICAgIDB4MzM0OTExMDYKI2Rl
 ZmluZSBBVEFfVklBODM2MSAgICAgICAgICAgICAweDMxMTIxMTA2CiNkZWZp
 bmUgQVRBX1ZJQTgzNjMgICAgICAgICAgICAgMHgwMzA1MTEwNgojZGVmaW5l
 IEFUQV9WSUE4MzcxICAgICAgICAgICAgIDB4MDM5MTExMDYKI2RlZmluZSBB
 VEFfVklBODY2MiAgICAgICAgICAgICAweDMxMDIxMTA2CiNkZWZpbmUgQVRB
 X1ZJQTY0MTAgICAgICAgICAgICAgMHgzMTY0MTEwNgojZGVmaW5lIEFUQV9W
 SUE2NDIwICAgICAgICAgICAgIDB4MzE0OTExMDYKI2RlZmluZSBBVEFfVklB
 NjQyMSAgICAgICAgICAgICAweDMyNDkxMTA2CgovKiBjaGlwc2V0IHNldHVw
 IHJlbGF0ZWQgZGVmaW5lcyAqLwojZGVmaW5lIEFIQ0kgICAgICAgICAgICAx
 CiNkZWZpbmUgQVRQT0xEICAgICAgICAgIDEKCiNkZWZpbmUgQUxJT0xEICAg
 ICAgICAgIDB4MDEKI2RlZmluZSBBTElORVcgICAgICAgICAgMHgwMgojZGVm
 aW5lIEFMSVNBVEEgICAgICAgICAweDA0CgojZGVmaW5lIEhQVDM2NiAgICAg
 ICAgICAwCiNkZWZpbmUgSFBUMzcwICAgICAgICAgIDEKI2RlZmluZSBIUFQz
 NzIgICAgICAgICAgMgojZGVmaW5lIEhQVDM3NCAgICAgICAgICAzCiNkZWZp
 bmUgSFBUT0xEICAgICAgICAgIDB4MDEKCiNkZWZpbmUgTVY1WFhYICAgICAg
 ICAgIDUKI2RlZmluZSBNVjZYWFggICAgICAgICAgNgoKI2RlZmluZSBQUk9M
 RCAgICAgICAgICAgMAojZGVmaW5lIFBSTkVXICAgICAgICAgICAxCiNkZWZp
 bmUgUFJUWCAgICAgICAgICAgIDIKI2RlZmluZSBQUk1JTyAgICAgICAgICAg
 MwojZGVmaW5lIFBSVFg0ICAgICAgICAgICAweDAxCiNkZWZpbmUgUFJTWDRY
 ICAgICAgICAgIDB4MDIKI2RlZmluZSBQUlNYNksgICAgICAgICAgMHgwNAoj
 ZGVmaW5lIFBSUEFUQSAgICAgICAgICAweDA4CiNkZWZpbmUgUFJDTUJPICAg
 ICAgICAgIDB4MTAKI2RlZmluZSBQUkNNQk8yICAgICAgICAgMHgyMAojZGVm
 aW5lIFBSU0FUQSAgICAgICAgICAweDQwCiNkZWZpbmUgUFJTQVRBMiAgICAg
 ICAgIDB4ODAKCiNkZWZpbmUgU1dLUzMzICAgICAgICAgIDAKI2RlZmluZSBT
 V0tTNjYgICAgICAgICAgMQojZGVmaW5lIFNXS1MxMDAgICAgICAgICAyCiNk
 ZWZpbmUgU1dLU01JTyAgICAgICAgIDMKCiNkZWZpbmUgU0lJTUVNSU8gICAg
 ICAgIDEKI2RlZmluZSBTSUlJTlRSICAgICAgICAgMHgwMQojZGVmaW5lIFNJ
 SVNFVENMSyAgICAgICAweDAyCiNkZWZpbmUgU0lJQlVHICAgICAgICAgIDB4
 MDQKI2RlZmluZSBTSUk0Q0ggICAgICAgICAgMHgwOAoKI2RlZmluZSBTSVNf
 U09VVEggICAgICAgMQojZGVmaW5lIFNJU1NBVEEgICAgICAgICAyCiNkZWZp
 bmUgU0lTMTMzTkVXICAgICAgIDMKI2RlZmluZSBTSVMxMzNPTEQgICAgICAg
 NAojZGVmaW5lIFNJUzEwME5FVyAgICAgICA1CiNkZWZpbmUgU0lTMTAwT0xE
 ICAgICAgIDYKI2RlZmluZSBTSVM2NiAgICAgICAgICAgNwojZGVmaW5lIFNJ
 UzMzICAgICAgICAgICA4CgojZGVmaW5lIFZJQTMzICAgICAgICAgICAwCiNk
 ZWZpbmUgVklBNjYgICAgICAgICAgIDEKI2RlZmluZSBWSUExMDAgICAgICAg
 ICAgMgojZGVmaW5lIFZJQTEzMyAgICAgICAgICAzCiNkZWZpbmUgQU1ETlZJ
 RElBICAgICAgIDQKCiNkZWZpbmUgQU1EQ0FCTEUgICAgICAgIDB4MDAwMQoj
 ZGVmaW5lIEFNREJVRyAgICAgICAgICAweDAwMDIKI2RlZmluZSBOVklESUEg
 ICAgICAgICAgMHgwMDA0CiNkZWZpbmUgTlY0ICAgICAgICAgICAgIDB4MDAx
 MAojZGVmaW5lIE5WUSAgICAgICAgICAgICAweDAwMjAKI2RlZmluZSBWSUFD
 TEsgICAgICAgICAgMHgwMTAwCiNkZWZpbmUgVklBQlVHICAgICAgICAgIDB4
 MDIwMAojZGVmaW5lIFZJQUJBUiAgICAgICAgICAweDA0MDAKI2RlZmluZSBW
 SUFBSENJICAgICAgICAgMHgwODAwCgoKLyogZ2xvYmFsIHByb3RvdHlwZXMg
 YXRhLXBjaS5jICovCmludCBhdGFfcGNpX3Byb2JlKGRldmljZV90IGRldik7
 CmludCBhdGFfcGNpX2F0dGFjaChkZXZpY2VfdCBkZXYpOwppbnQgYXRhX3Bj
 aV9kZXRhY2goZGV2aWNlX3QgZGV2KTsKc3RydWN0IHJlc291cmNlICogYXRh
 X3BjaV9hbGxvY19yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNo
 aWxkLCBpbnQgdHlwZSwgaW50ICpyaWQsIHVfbG9uZyBzdGFydCwgdV9sb25n
 IGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncyk7CmludCBhdGFfcGNp
 X3JlbGVhc2VfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGls
 ZCwgaW50IHR5cGUsIGludCByaWQsIHN0cnVjdCByZXNvdXJjZSAqcik7Cmlu
 dCBhdGFfcGNpX3NldHVwX2ludHIoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj
 aGlsZCwgc3RydWN0IHJlc291cmNlICppcnEsIGludCBmbGFncywgZHJpdmVy
 X2ludHJfdCAqZnVuY3Rpb24sIHZvaWQgKmFyZ3VtZW50LCB2b2lkICoqY29v
 a2llcCk7CiBpbnQgYXRhX3BjaV90ZWFyZG93bl9pbnRyKGRldmljZV90IGRl
 diwgZGV2aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqaXJxLCB2b2lk
 ICpjb29raWUpOwppbnQgYXRhX3BjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp
 Owp2b2lkIGF0YV9wY2lfaHcoZGV2aWNlX3QgZGV2KTsKaW50IGF0YV9wY2lf
 c3RhdHVzKGRldmljZV90IGRldik7CnZvaWQgYXRhX3BjaV9kbWFpbml0KGRl
 dmljZV90KTsKCgovKiBnbG9iYWwgcHJvdG90eXBlcyBhdGEtY2hpcHNldC5j
 ICovCmludCBhdGFfZ2VuZXJpY19pZGVudChkZXZpY2VfdCk7CmludCBhdGFf
 YWNhcmRfaWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX2FsaV9pZGVudChkZXZp
 Y2VfdCk7CmludCBhdGFfYW1kX2lkZW50KGRldmljZV90KTsKaW50IGF0YV9h
 dGlfaWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX2N5cml4X2lkZW50KGRldmlj
 ZV90KTsKaW50IGF0YV9jeXByZXNzX2lkZW50KGRldmljZV90KTsKaW50IGF0
 YV9oaWdocG9pbnRfaWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX2ludGVsX2lk
 ZW50KGRldmljZV90KTsKaW50IGF0YV9pdGVfaWRlbnQoZGV2aWNlX3QpOwpp
 bnQgYXRhX2ptaWNyb25faWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX21hcnZl
 bGxfaWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX25hdGlvbmFsX2lkZW50KGRl
 dmljZV90KTsKaW50IGF0YV9udmlkaWFfaWRlbnQoZGV2aWNlX3QpOwppbnQg
 YXRhX3Byb21pc2VfaWRlbnQoZGV2aWNlX3QpOwppbnQgYXRhX3NlcnZlcndv
 cmtzX2lkZW50KGRldmljZV90KTsKaW50IGF0YV9zaWlfaWRlbnQoZGV2aWNl
 X3QpOwppbnQgYXRhX3Npc19pZGVudChkZXZpY2VfdCk7CmludCBhdGFfdmlh
 X2lkZW50KGRldmljZV90KTsKaW50IGF0YV9sZWdhY3koZGV2aWNlX3QpOwoK
 LyogZ2xvYmFsIHByb3RvdHlwZXMgYXRhLWRtYS5jICovCnZvaWQgYXRhX2Rt
 YWluaXQoZGV2aWNlX3QpOwo=
 
 --1421935635-678854362-1187120232=:26064--
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/114473: commit references a PR
Date: Mon, 10 Sep 2007 19:16:47 +0000 (UTC)

 simon       2007-09-10 19:16:40 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/dev/ata          ata-chipset.c ata-pci.h 
   Log:
   Add PCI IDs for Intel ICH9.
   
   PR:             kern/114473
   Submitted by:   Michael Fuckner <michael@fuckner.net>
   MFC after:      2 weeks
   OK'ed by:       sos
   Approved by:    re (bmah)
   
   Revision  Changes    Path
   1.199     +4 -0      src/sys/dev/ata/ata-chipset.c
   1.78      +4 -0      src/sys/dev/ata/ata-pci.h
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: simon 
State-Changed-When: Mon Sep 10 19:29:39 UTC 2007 
State-Changed-Why:  
Patch commtted to HEAD, thanks for the submission! 

I plan to MFC in about two weeks (and when I had a chance 
to do at least minimal testing on 6-STABLE). 

Note that I don't know what the "patch" from Andriy Podanenko 
does, so I haven't looked at that.  It should probably be filed 
as a seperate PR with description of what it does... 


Responsible-Changed-From-To: sos->simon 
Responsible-Changed-By: simon 
Responsible-Changed-When: Mon Sep 10 19:29:39 UTC 2007 
Responsible-Changed-Why:  
I commmitted the patch, so grab the PR as another MFC reminder. 

I doubt sos minds less work... :-) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=114473 
State-Changed-From-To: patched->closed 
State-Changed-By: simon 
State-Changed-When: Mon Nov 5 11:55:28 UTC 2007 
State-Changed-Why:  
MFC'ed to RELENG_6. 

If the other patch in this PR is still relevant it should be submitted 
as a seperate PR with description of the patch (and actually be in 
patch/diff format). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=114473 
>Unformatted:
