From owner-acpi-jp@jp.FreeBSD.org Thu Sep 18 23:11:49 2003
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id h8IEBn707330;
	Thu, 18 Sep 2003 23:11:49 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from st68.arena.ne.jp (st68.arena.ne.jp [203.138.213.2])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with SMTP/inet id h8IEBnJ07325
	for <acpi-jp@jp.FreeBSD.org>; Thu, 18 Sep 2003 23:11:49 +0900 (JST)
	(envelope-from aizu@navi.org)
Received: (qmail 22260 invoked by SAV 20030917.25); 18 Sep 2003 23:11:48 +0900
Received: from unknown (HELO localhost) (220.108.97.104)
  by st68.arena.ne.jp with SMTP; 18 Sep 2003 23:11:48 +0900
From: Hiroyuki Aizu <aizu@navi.org>
To: Nate Lawson <nate@root.org>
Cc: acpi-jp@jp.FreeBSD.org
Message-Id: <20030918231149.7e57383b.aizu@navi.org>
In-Reply-To: <20030916161328.Q10247@root.org>
References: <1061343265.951.17.camel@scorpio.eco.imp.mx>
	<20030910225648.3228b607.aizu@navi.org>
	<20030913140215.A2632@root.org>
	<20030914225148.2e1a21f7.aizu@navi.org>
	<20030916161328.Q10247@root.org>
Organization: navi.org
X-Mailer: Sylpheed version 0.9.4 (GTK+ 1.2.10; i386-portbld-freebsd5.1)
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="Multipart_Thu__18_Sep_2003_23:11:49_+0900_08d2dc00"
Reply-To: acpi-jp@jp.FreeBSD.org
Precedence: list
Date: Thu, 18 Sep 2003 23:11:49 +0900
X-Sequence: acpi-jp 2677
Subject: [acpi-jp 2677] Re: TOSHIBA HCI driver on ACPI.
Sender: owner-acpi-jp@jp.FreeBSD.org
X-Originator: aizu@navi.org
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+030902

This is a multi-part message in MIME format.

--Multipart_Thu__18_Sep_2003_23:11:49_+0900_08d2dc00
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hi.

I revised acpi_toshiba.c again. And the code size reduced to half.


On Tue, 16 Sep 2003 16:15:58 -0700 (PDT)
Nate Lawson <nate@root.org> wrote:

> On Sun, 14 Sep 2003, Hiroyuki Aizu wrote:
> > Hi.
> >
> > I wrote revised version.
> 
> One thing I noticed is that you can reduce the code size a lot by
> generalizing calls like get/set_hci_cpu_speed.  You can do the arg setup
> in a function like:
> 
>   call_hci_fn(HCI_SET, HCI_REG_FAN, state << 7, NULL/*output arg*/);
> 
> That function could even be merged into call_hci().
> 
> -Nate
> 
> > On Sat, 13 Sep 2003 14:11:38 -0700
> > Nate Lawson <nate@root.org> wrote:
> >
> > > Thank you for posting this.  Although I don't have a Toshiba laptop, I am
> > > willing to import this after some small fixes and testing.
> 
> 
> 



--Multipart_Thu__18_Sep_2003_23:11:49_+0900_08d2dc00
Content-Type: application/octet-stream;
 name="acpi_toshiba.c"
Content-Disposition: attachment;
 filename="acpi_toshiba.c"
Content-Transfer-Encoding: base64

LyotCiAqIENvcHlyaWdodCAoYykgMjAwMyBIaXJveXVraSBBaXp1IDxhaXp1QG5hdmkub3JnPgog
KgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
KgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQog
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwog
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQog
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKgogKi8KI2luY2x1ZGUgIm9wdF9hY3Bp
LmgiCiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KI2luY2x1
ZGUgPHN5cy9idXMuaD4KI2luY2x1ZGUgPHN5cy9wb3dlci5oPgoKI2luY2x1ZGUgImFjcGkuaCIK
I2luY2x1ZGUgPGRldi9hY3BpY2EvYWNwaXZhci5oPgoKI2RlZmluZSBfQ09NUE9ORU5UICAgICAg
QUNQSV9UT1NISUJBCkFDUElfTU9EVUxFX05BTUUoIlRPU0hJQkEiKQoKLyogVG9zaGliYSBIQ0kg
aW50ZXJmYWNlIGRlZmluaXRpb25zCiAqCiAqIEhDSSBpcyBUb3NoaWJhJ3MgIkhhcmR3YXJlIENv
bnRyb2wgSW50ZXJmYWNlIiB3aGljaCBpcyBzdXBwb3NlZCB0bwogKiBiZSB1bmlmb3JtIGFjcm9z
cyBhbGwgdGhlaXIgbW9kZWxzLiAgSWRlYWxseSB3ZSB3b3VsZCBqdXN0IGNhbGwKICogZGVkaWNh
dGVkIEFDUEkgbWV0aG9kcyBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgcHJpbWl0aXZlIGludGVyZmFj
ZS4KICogSG93ZXZlciB0aGUgQUNQSSBtZXRob2RzIHNlZW0gdG8gYmUgaW5jb21wbGV0ZSBpbiBz
b21lIGFyZWFzIChmb3IKICogZXhhbXBsZSB0aGV5IGFsbG93IHNldHRpbmcsIGJ1dCBub3QgcmVh
ZGluZywgdGhlIExDRCBicmlnaHRuZXNzIHZhbHVlKSwKICogc28gdGhpcyBpcyBzdGlsbCB1c2Vm
dWwuCiAqLwoKI2RlZmluZSBNRVRIT0RfSENJCQkiR0hDSSIKI2RlZmluZSBNRVRIT0RfSENJX0VO
QUJMRQkiRU5BQiIKCiNkZWZpbmUgSENJX1dPUkRTCQkJNgoKLyogb3BlcmF0aW9ucyAqLwojZGVm
aW5lIEhDSV9TRVQJCQkJMHhGRjAwCiNkZWZpbmUgSENJX0dFVAkJCQkweEZFMDAKCi8qIHJldHVy
biBjb2RlcyAqLwojZGVmaW5lIEhDSV9TVUNDRVNTCQkJMHgwMDAwCiNkZWZpbmUgSENJX0ZBSUxV
UkUJCQkweDEwMDAKI2RlZmluZSBIQ0lfTk9UX1NVUFBPUlRFRAkJMHg4MDAwCiNkZWZpbmUgSENJ
X0VNUFRZCQkJMHg4QzAwCgovKiByZWdpc3RlcnMgKi8KI2RlZmluZSBIQ0lfUkVHX0xDRF9CQUNL
TElHSFQJCTB4MDAwMgojZGVmaW5lIEhDSV9SRUdfRkFOCQkJMHgwMDA0CiNkZWZpbmUgSENJX1JF
R19TWVNURU1fRVZFTlQJCTB4MDAxNgojZGVmaW5lIEhDSV9SRUdfVklERU9fT1VUUFVUCQkweDAw
MUMKI2RlZmluZSBIQ0lfUkVHX0hPVEtFWV9FVkVOVAkJMHgwMDFFCiNkZWZpbmUgSENJX1JFR19M
Q0RfQlJJR0hUTkVTUwkJMHgwMDJBCiNkZWZpbmUgSENJX1JFR19DUFVfU1BFRUQJCTB4MDAzMgoK
LyogZmllbGQgZGVmaW5pdGlvbnMgKi8KI2RlZmluZSBIQ0lfRkFOX1NISUZUCQkJNwojZGVmaW5l
IEhDSV9MQ0RfQlJJR0hUTkVTU19CSVRTCQkzCiNkZWZpbmUgSENJX0xDRF9CUklHSFRORVNTX1NI
SUZUCSgxNi1IQ0lfTENEX0JSSUdIVE5FU1NfQklUUykKI2RlZmluZSBIQ0lfTENEX0JSSUdIVE5F
U1NfTEVWRUxTCSgxIDw8IEhDSV9MQ0RfQlJJR0hUTkVTU19CSVRTKQojZGVmaW5lIEhDSV9WSURF
T19PVVRQVVRfRVhUUkFfRkxBRwkweDAxMDAKI2RlZmluZSBIQ0lfVklERU9fT1VUUFVUX0xDRAkJ
MHgxCiNkZWZpbmUgSENJX1ZJREVPX09VVFBVVF9DUlQJCTB4MgojZGVmaW5lIEhDSV9WSURFT19P
VVRQVVRfVFYJCTB4NAojZGVmaW5lIEhDSV9DUFVfU1BFRURfQklUUwkJMwojZGVmaW5lIEhDSV9D
UFVfU1BFRURfU0hJRlQJCSgxNiAtIEhDSV9DUFVfU1BFRURfQklUUykKI2RlZmluZSBIQ0lfQ1BV
X1NQRUVEX0xFVkVMUwkJKDEgPDwgSENJX0NQVV9TUEVFRF9CSVRTKQoKc3RydWN0IGhjaV9yZWdz
IHsKICAgIFVJTlQzMiByZWdbSENJX1dPUkRTXTsKI2RlZmluZSBIQ0lfUkVHX0FYIDAKI2RlZmlu
ZSBIQ0lfUkVHX0JYIDEKI2RlZmluZSBIQ0lfUkVHX0NYIDIKI2RlZmluZSBIQ0lfUkVHX0RYIDMK
I2RlZmluZSBIQ0lfUkVHX1NJIDQKI2RlZmluZSBIQ0lfUkVHX0RJIDUKfTsKCnN0cnVjdCBhY3Bp
X3Rvc2hpYmFfc29mdGMgewogICAgZGV2aWNlX3QJCWRldjsKICAgIEFDUElfSEFORExFCQloYW5k
bGU7CiAgICBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0CXRvc2hpYmFfc3lzY3RsX2N0eDsKICAgIHN0
cnVjdCBzeXNjdGxfb2lkCQkqdG9zaGliYV9zeXNjdGxfdHJlZTsKICAgIHN0cnVjdCBzeXNjdGxf
Y3R4X2xpc3QJZm5rZXlfc3lzY3RsX2N0eDsKICAgIHN0cnVjdCBzeXNjdGxfb2lkCQkqZm5rZXlf
c3lzY3RsX3RyZWU7Cn07CgpzdGF0aWMgaW50IGFjcGlfdG9zaGliYV9wcm9iZShkZXZpY2VfdCk7
CnN0YXRpYyBpbnQgYWNwaV90b3NoaWJhX2F0dGFjaChkZXZpY2VfdCk7CgpzdGF0aWMgaW50IGFj
cGlfdG9zaGliYV9zeXNjdGwoU1lTQ1RMX0hBTkRMRVJfQVJHUyk7CgpzdGF0aWMgQUNQSV9TVEFU
VVMgYWNwaV90b3NoaWJhX2ZuX2V4dGVuc2lvbl9lbmFibGUoZGV2aWNlX3QsIEFDUElfSEFORExF
KTsKc3RhdGljIEFDUElfU1RBVFVTIGdldF9oY2lfZm5fa2V5KEFDUElfSEFORExFLCBVSU5UMzIg
Kik7CgpzdGF0aWMgQUNQSV9TVEFUVVMgY2FsbF9oY2koQUNQSV9IQU5ETEUsIFVJTlQzMiwgVUlO
VDMyLCBVSU5UMzIsIFVJTlQzMiAqKTsKc3RhdGljIEFDUElfU1RBVFVTIGhjaV9yYXcoQUNQSV9I
QU5ETEUsIHN0cnVjdCBoY2lfcmVncyAqLCBzdHJ1Y3QgaGNpX3JlZ3MgKik7CgpzdGF0aWMgdm9p
ZCBwb3dlcl9wcm9maWxlX25leHQoZGV2aWNlX3QsIEFDUElfSEFORExFKTsKc3RhdGljIHZvaWQg
Zm5fc2xlZXBfYnV0dG9uKGRldmljZV90LCBBQ1BJX0hBTkRMRSk7CgpzdGF0aWMgdm9pZCBzeXN0
ZW1fZXZlbnQoZGV2aWNlX3QsIEFDUElfSEFORExFKTsKCnN0YXRpYyB2b2lkIGFjcGlfdG9zaGli
YV9ub3RpZnlfaGFuZGxlcihBQ1BJX0hBTkRMRSwgVUlOVDMyLCB2b2lkICopOwpzdGF0aWMgdm9p
ZCBhY3BpX3Rvc2hpYmFfYnV0dG9uX25vdGlmeV9wcmVzc2VkX2Zvcl9zbGVlcCh2b2lkICopOwpz
dGF0aWMgdm9pZCBhY3BpX3Rvc2hpYmFfYnV0dG9uX3ByZXNzZWRfZm9yX3Bvd2VyX3Byb2ZpbGUo
dm9pZCAqKTsKCiNkZWZpbmUgRk5fTk9ORQkJMHgwMDAwCiNkZWZpbmUgRk5fRjFfUFJFU1MJMHgw
MTNCCiNkZWZpbmUgRk5fRjFfUkVMRUFTRQkweDAxQkIKI2RlZmluZSBGTl9GMl9QUkVTUwkweDAx
M0MKI2RlZmluZSBGTl9GMl9SRUxFQVNFCTB4MDFCQwojZGVmaW5lIEZOX0YzX1BSRVNTCTB4MDEz
RAojZGVmaW5lIEZOX0YzX1JFTEVBU0UJMHgwMUJECiNkZWZpbmUgRk5fRjRfUFJFU1MJMHgwMTNF
CiNkZWZpbmUgRk5fRjRfUkVMRUFTRQkweDAxQkUKI2RlZmluZSBGTl9GNV9QUkVTUwkweDAxM0YK
I2RlZmluZSBGTl9GNV9SRUxFQVNFCTB4MDFCRgojZGVmaW5lIEZOX0Y2X1BSRVNTCTB4MDE0MAoj
ZGVmaW5lIEZOX0Y2X1JFTEVBU0UJMHgwMUMwCiNkZWZpbmUgRk5fRjdfUFJFU1MJMHgwMTQxCiNk
ZWZpbmUgRk5fRjdfUkVMRUFTRQkweDAxQzEKI2RlZmluZSBGTl9GOF9QUkVTUwkweDAxNDIKI2Rl
ZmluZSBGTl9GOF9SRUxFQVNFCTB4MDFDMgojZGVmaW5lIEZOX0Y5X1BSRVNTCTB4MDE0MwojZGVm
aW5lIEZOX0Y5X1JFTEVBU0UJMHgwMUMzCgojZGVmaW5lIEZOX0JTX1BSRVNTCTB4MDEwRQojZGVm
aW5lIEZOX0JTX1JFTEVBU0UJMHgwMThFCiNkZWZpbmUgRk5fRVNDX1BSRVNTCTB4MDEwMQojZGVm
aW5lIEZOX0VTQ19SRUxFQVNFCTB4MDE4MQojZGVmaW5lIEZOX0tOSl9QUkVTUwkweDAxMjkKI2Rl
ZmluZSBGTl9LTkpfUkVMRUFTRQkweDAxQTkKCgp0eXBlZGVmIHZvaWQgKCpmbl9mdW5jKSAoZGV2
aWNlX3QgZGV2LCBBQ1BJX0hBTkRMRSk7CgpzdHJ1Y3QgZXh0ZW5zaW9uX2Z1bmMgewogICAgVUlO
VDMyIHJlZzsKICAgIC8qIHN5c2N0bCAqLwogICAgY2hhciAqc3lzY3RsX2xhYmVsOwogICAgaW50
IG1pbjsKICAgIGludCBtYXg7CiAgICBVSU5UMzIgcm90YXRlOwogICAgVUlOVDMyIHNoaWZ0Owog
ICAgVUlOVDMyIG1hc2s7CiAgICAvKiBGbis/IGtleSAqLwogICAgVUlOVDMyIGtleWNvZGU7CiAg
ICBjaGFyICpmbmtleV9sYWJlbDsKICAgIGludCAgICBzdGVwOwogICAgZm5fZnVuYyBmdW5jOwp9
OwoKc3RhdGljIHN0cnVjdCBleHRlbnNpb25fZnVuYyB0YWJsZVtdID0gewogICAgeyBIQ0lfUkVH
X0ZBTiwgImZvcmNlX2ZhbiIsCiAgICAgIDAsIDEsIDEsIEhDSV9GQU5fU0hJRlQsIDB4MCwKICAg
ICAgRk5fRVNDX1JFTEVBU0UsICJmb3JjZV9mYW4iLCAxLCBOVUxMIH0sCiAgICB7IEhDSV9SRUdf
TENEX0JSSUdIVE5FU1MsICJsY2RfYnJpZ2h0bmVzc19sZXZlbCIsCiAgICAgIDAsIDcsIDAsIEhD
SV9MQ0RfQlJJR0hUTkVTU19TSElGVCwgMHgwLAogICAgICBGTl9GN19SRUxFQVNFLCAibGNkX2Jy
aWdodG5lc3NfdXAiLCAxLCBOVUxMIH0sCiAgICB7IEhDSV9SRUdfTENEX0JSSUdIVE5FU1MsIE5V
TEwsCiAgICAgIDAsIDcsIDAsIEhDSV9MQ0RfQlJJR0hUTkVTU19TSElGVCwgMHgwLAogICAgICBG
Tl9GNl9SRUxFQVNFLCAibGNkX2JyaWdodG5lc3NfZG93biIsIC0xLCBOVUxMIH0sCiAgICB7IEhD
SV9SRUdfVklERU9fT1VUUFVULCAidmlkZW9fb3V0cHV0IiwKICAgICAgMSwgNywgMCwgMCwgSENJ
X1ZJREVPX09VVFBVVF9FWFRSQV9GTEFHLAogICAgICBGTl9GNV9SRUxFQVNFLCAidmlkZW9fb3V0
cHV0IiwgMSwgTlVMTCB9LAogICAgeyBIQ0lfUkVHX0xDRF9CQUNLTElHSFQsICJsY2RfYmFja2xp
Z2h0IiwKICAgICAgMCwgMSwgMSwgMCwgMHgwLAogICAgICBGTl9GOF9SRUxFQVNFLCAibGNkX2Jh
Y2tsaWdodCIsIDEsIE5VTEwgfSwKICAgIHsgSENJX1JFR19DUFVfU1BFRUQsICJjcHVfc3BlZWQi
LAogICAgICAwLCA3LCAwLCBIQ0lfQ1BVX1NQRUVEX1NISUZULCAweDAsCiAgICAgIEZOX05PTkUs
ICJjcHVfc3BlZWRfdXAiLCAtMSwgTlVMTCB9LAogICAgeyBIQ0lfUkVHX0NQVV9TUEVFRCwgTlVM
TCwKICAgICAgMCwgNywgMCwgSENJX0NQVV9TUEVFRF9TSElGVCwgMHgwLAogICAgICBGTl9OT05F
LCAiY3B1X3NwZWVkX2Rvd24iLCAxLCBOVUxMIH0sCiAgICB7IDAsIE5VTEwsCiAgICAgIDAsIDAs
IDEsIDAsIDB4MCwKICAgICAgRk5fRjJfUkVMRUFTRSwgInBvd2VyX3Byb2ZpbGUiLCAwLCBwb3dl
cl9wcm9maWxlX25leHQgfSwKICAgIHsgMCwgTlVMTCwKICAgICAgMCwgMCwgMSwgMCwgMHgwLAog
ICAgICBGTl9GM19SRUxFQVNFLCAic2xlZXBfYnV0dG9uIiwgMCwgZm5fc2xlZXBfYnV0dG9uIH0s
Cn07CgpzdGF0aWMgdm9pZCBnZW5lcmljX25leHQoQUNQSV9IQU5ETEUsIHN0cnVjdCBleHRlbnNp
b25fZnVuYyAqKTsKCgojZGVmaW5lIEZOX1RBQkxFX01BWAkoc2l6ZW9mKHRhYmxlKS9zaXplb2Yo
c3RydWN0IGV4dGVuc2lvbl9mdW5jKSkKCiNkZWZpbmUgRk5fRVhUX0RJU0FCTEUJMAojZGVmaW5l
IEZOX0VYVF9FTkFCTEUJMQpzdGF0aWMgaW50IGVuYWJsZV9mbl9leHQgPSBGTl9FWFRfRU5BQkxF
OwpUVU5BQkxFX0lOVCgiaHcuYWNwaS50b3NoaWJhLmVuYWJsZV9mbl9leHRlbnNpb24iLCAmZW5h
YmxlX2ZuX2V4dCk7CgoKLyoKICogRGV2aWNlIFZBTEQKICogSElEICAgICAgTW9kZWwKICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBUT1M2MjAwICBMaWJyZXR0byBM
IFNlcmllcwogKiAgICAgICAgICBEeW5hYm9vayBTYXRlbGxpdGUgMjQ1NQogKiAgICAgICAgICBE
eW5hYm9vayBTUyAzNTAwCiAqIFRPUzYyMDcgIER5bmFib29rIFNTMjExMCBTZXJpZXMKICovCnN0
YXRpYyBpbnQKYWNwaV90b3NoaWJhX3Byb2JlKGRldmljZV90IGRldikKewogICAgaWYgKCFhY3Bp
X2Rpc2FibGVkKCJ0b3NoaWJhIikpIHsKICAgICAgICBpZiAoYWNwaV9nZXRfdHlwZShkZXYpID09
IEFDUElfVFlQRV9ERVZJQ0UpIHsKICAgICAgICAgICAgaWYgKGFjcGlfTWF0Y2hIaWQoZGV2LCAi
VE9TNjIwMCIpIHx8CiAgICAgICAgICAgICAgICBhY3BpX01hdGNoSGlkKGRldiwgIlRPUzYyMDci
KSkgewogICAgICAgICAgICAgICAgICAgIGRldmljZV9zZXRfZGVzYyhkZXYsICJUb3NoaWJhIE5v
dGVib29rIEV4dHJhIEhDSSBkcml2ZXIiKTsKICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4oRU5YSU8pOwp9CgpzdGF0aWMg
aW50CmFjcGlfdG9zaGliYV9hdHRhY2goZGV2aWNlX3QgZGV2KQp7CiAgICBpbnQgaTsKICAgIFVJ
TlQzMiB2YWw7CiAgICBzdHJ1Y3QgYWNwaV9zb2Z0YwkJKmFjcGlfc2M7CiAgICBzdHJ1Y3QgYWNw
aV90b3NoaWJhX3NvZnRjCSpzYzsKCiAgICBpZiAoZGV2aWNlX2dldF91bml0KGRldikgIT0gMCkK
ICAgICAgICByZXR1cm4oRU5YSU8pOwoKICAgIGlmICgoc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dikpID09IE5VTEwpCiAgICAgICAgcmV0dXJuKEVOWElPKTsKCiAgICBzYy0+ZGV2ID0gZGV2Owog
ICAgc2MtPmhhbmRsZSA9IGFjcGlfZ2V0X2hhbmRsZShkZXYpOwogICAgaWYgKHNjLT5oYW5kbGUg
PT0gTlVMTCkKICAgICAgICByZXR1cm4oRU5YSU8pOwoKICAgIGFjcGlfc2MgPSBhY3BpX2Rldmlj
ZV9nZXRfcGFyZW50X3NvZnRjKGRldik7CiAgICBzeXNjdGxfY3R4X2luaXQoJnNjLT50b3NoaWJh
X3N5c2N0bF9jdHgpOwoKICAgIHNjLT50b3NoaWJhX3N5c2N0bF90cmVlID0gU1lTQ1RMX0FERF9O
T0RFKCZzYy0+dG9zaGliYV9zeXNjdGxfY3R4LAogICAgICAgIFNZU0NUTF9DSElMRFJFTihhY3Bp
X3NjLT5hY3BpX3N5c2N0bF90cmVlKSwgT0lEX0FVVE8sCiAgICAgICAgInRvc2hpYmEiLCBDVExG
TEFHX1JELCAwLCAiIik7CgogICAgLyogRW5hYmxlIEZuLWtleSBleHRlbnNpb24gKi8KICAgIGlm
IChlbmFibGVfZm5fZXh0ID09IEZOX0VYVF9FTkFCTEUpIHsKICAgICAgICBhY3BpX3Rvc2hpYmFf
Zm5fZXh0ZW5zaW9uX2VuYWJsZShkZXYsIHNjLT5oYW5kbGUpOwogICAgICAgIHNjLT5mbmtleV9z
eXNjdGxfdHJlZSA9IFNZU0NUTF9BRERfTk9ERSgmc2MtPmZua2V5X3N5c2N0bF9jdHgsCiAgICAg
ICAgICAgIFNZU0NUTF9DSElMRFJFTihzYy0+dG9zaGliYV9zeXNjdGxfdHJlZSksIE9JRF9BVVRP
LAogICAgICAgICAgICAiZm5fa2V5cyIsIENUTEZMQUdfUkQsIDAsICIiKTsKICAgIH0KCiAgICBm
b3IgKGkgPSAwOyBpIDwgRk5fVEFCTEVfTUFYOyBpKyspIHsKICAgICAgICBpZiAoQUNQSV9TVUND
RVNTKGNhbGxfaGNpKHNjLT5oYW5kbGUsIEhDSV9HRVQsIHRhYmxlW2ldLnJlZywgTlVMTCwgJnZh
bCkpKSB7CiAgICAgICAgICAgIGlmICh0YWJsZVtpXS5zeXNjdGxfbGFiZWwgIT0gTlVMTCkgewog
ICAgICAgICAgICAgICAgU1lTQ1RMX0FERF9QUk9DKCZzYy0+dG9zaGliYV9zeXNjdGxfY3R4LAog
ICAgICAgICAgICAgICAgICAgIFNZU0NUTF9DSElMRFJFTihzYy0+dG9zaGliYV9zeXNjdGxfdHJl
ZSksIE9JRF9BVVRPLAogICAgICAgICAgICAgICAgICAgIHRhYmxlW2ldLnN5c2N0bF9sYWJlbCwK
ICAgICAgICAgICAgICAgICAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcgfCBDVExGTEFHX0FO
WUJPRFksCiAgICAgICAgICAgICAgICAgICAgJnRhYmxlW2ldLCAoaW50KXNjLT5oYW5kbGUsIGFj
cGlfdG9zaGliYV9zeXNjdGwsICJJIiwgIiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
IChlbmFibGVfZm5fZXh0ID09IEZOX0VYVF9FTkFCTEUpIHsKICAgICAgICAgICAgICAgIGlmICh0
YWJsZVtpXS5mbmtleV9sYWJlbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgU1lTQ1RM
X0FERF9JTlQoJnNjLT5mbmtleV9zeXNjdGxfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICBT
WVNDVExfQ0hJTERSRU4oc2MtPmZua2V5X3N5c2N0bF90cmVlKSwgT0lEX0FVVE8sCiAgICAgICAg
ICAgICAgICAgICAgICAgIHRhYmxlW2ldLmZua2V5X2xhYmVsLAogICAgICAgICAgICAgICAgICAg
ICAgICBDVExGTEFHX1JXIHwgQ1RMRkxBR19BTllCT0RZLAogICAgICAgICAgICAgICAgICAgICAg
ICAmdGFibGVbaV0ua2V5Y29kZSwgMCwgdGFibGVbaV0uZm5rZXlfbGFiZWwpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoMCk7Cn0K
CnN0YXRpYyBpbnQKYWNwaV90b3NoaWJhX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQp7CiAg
ICBBQ1BJX0hBTkRMRSBoYW5kbGU7CiAgICBzdHJ1Y3QgZXh0ZW5zaW9uX2Z1bmMgKmVmOwogICAg
VUlOVDMyIGFyZzsKICAgIGludCB0bXA7CiAgICBpbnQgZXJyb3IgPSAwOwoKICAgIGVmID0gKHN0
cnVjdCBleHRlbnNpb25fZnVuYyAqKW9pZHAtPm9pZF9hcmcxOwogICAgaGFuZGxlID0gKEFDUElf
SEFORExFKW9pZHAtPm9pZF9hcmcyOwogICAgaWYgKEFDUElfRkFJTFVSRShjYWxsX2hjaShoYW5k
bGUsIEhDSV9HRVQsIGVmLT5yZWcsIE5VTEwsICZhcmcpKSkKICAgICAgICByZXR1cm4gKEVJTlZB
TCk7CiAgICAgICAgCiAgICB0bXAgPSAoYXJnICYgfmVmLT5tYXNrKSA+PiBlZi0+c2hpZnQ7CiAg
ICBlcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0bXAsIDAsIHJlcSk7CgogICAgLyog
ZXJyb3Igb3Igbm8gbmV3IHZhbHVlICovCiAgICBpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0
ciA9PSBOVUxMKQogICAgICAgIHJldHVybiAoZXJyb3IpOwoKICAgIGlmICh0bXAgPCBlZi0+bWlu
IHx8IHRtcCA+IGVmLT5tYXgpCiAgICAgICAgcmV0dXJuIChFSU5WQUwpOwoKICAgIGFyZyA9ICh0
bXAgPDwgZWYtPnNoaWZ0KSB8IGVmLT5tYXNrOwogICAgaWYgKEFDUElfRkFJTFVSRShjYWxsX2hj
aShoYW5kbGUsIEhDSV9TRVQsIGVmLT5yZWcsIGFyZywgTlVMTCkpKQogICAgICAgIHJldHVybiAo
RUlOVkFMKTsKCiAgICByZXR1cm4gKDApOwp9CgoKc3RhdGljIEFDUElfU1RBVFVTCmFjcGlfdG9z
aGliYV9mbl9leHRlbnNpb25fZW5hYmxlKGRldmljZV90IGRldiwgQUNQSV9IQU5ETEUgaGFuZGxl
KQp7CiAgICBBQ1BJX1NUQVRVUyBzdGF0dXM7CgogICAgc3RhdHVzID0gQWNwaUV2YWx1YXRlT2Jq
ZWN0KGhhbmRsZSwgTUVUSE9EX0hDSV9FTkFCTEUsIE5VTEwsIE5VTEwpOwogICAgaWYgKEFDUElf
RkFJTFVSRShzdGF0dXMpKSB7CiAgICAgICAgZGV2aWNlX3ByaW50ZihkZXYsICJhY3BpX3Rvc2hp
YmFfZXhfZW5hYmxlKCkgZXZhbHVhdGUgZmFpbGVkXG4iKTsKICAgICAgICByZXR1cm4gKHN0YXR1
cyk7CiAgICB9CgogICAgLyogSW5zdGFsbCBOb3RpZnkgaGFuZGxlciAqLwogICAgQWNwaUluc3Rh
bGxOb3RpZnlIYW5kbGVyKGhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjcGlfdG9zaGliYV9ub3RpZnlfaGFuZGxlciwgZGV2KTsKCiAgICBy
ZXR1cm4gKHN0YXR1cyk7Cn0KCgpBQ1BJX1NUQVRVUwpnZXRfaGNpX2ZuX2tleShBQ1BJX0hBTkRM
RSBoYW5kbGUsIFVJTlQzMiAqa2V5KQp7CiAgICBzdHJ1Y3QgaGNpX3JlZ3MgYXJncywgcmVzdWx0
czsKCiAgICBiemVybygmYXJncywgc2l6ZW9mKHN0cnVjdCBoY2lfcmVncykpOwoKICAgIGFyZ3Mu
cmVnW0hDSV9SRUdfQVhdID0gSENJX0dFVDsKICAgIGFyZ3MucmVnW0hDSV9SRUdfQlhdID0gSENJ
X1JFR19TWVNURU1fRVZFTlQ7CgogICAgaWYgKEFDUElfRkFJTFVSRShoY2lfcmF3KGhhbmRsZSwg
JmFyZ3MsICZyZXN1bHRzKSkpCiAgICAgICAgcmV0dXJuICgwKTsKCiAgICBpZiAocmVzdWx0cy5y
ZWdbSENJX1JFR19BWF0gIT0gSENJX1NVQ0NFU1MpCiAgICAgICAgcmV0dXJuIChBRV9FUlJPUik7
CgogICAgKmtleSA9IHJlc3VsdHMucmVnW0hDSV9SRUdfQ1hdOwogICAgcmV0dXJuIChBRV9PSyk7
Cn0KCnN0YXRpYyBBQ1BJX1NUQVRVUwpjYWxsX2hjaShBQ1BJX0hBTkRMRSBoYW5kbGUsIFVJTlQz
MiB0eXBlLCBVSU5UMzIgcmVnLCBVSU5UMzIgdmFsLCBVSU5UMzIgKnJldCkKewogICAgc3RydWN0
ICAgICBoY2lfcmVncyBhcmdzLCByZXN1bHRzOwoKICAgIGJ6ZXJvKCZhcmdzLCBzaXplb2Yoc3Ry
dWN0IGhjaV9yZWdzKSk7CiAgICBhcmdzLnJlZ1tIQ0lfUkVHX0FYXSA9IHR5cGU7CiAgICBhcmdz
LnJlZ1tIQ0lfUkVHX0JYXSA9IHJlZzsKICAgIGFyZ3MucmVnW0hDSV9SRUdfQ1hdID0gdmFsOwoK
ICAgIGlmIChBQ1BJX0ZBSUxVUkUoaGNpX3JhdyhoYW5kbGUsICZhcmdzLCAmcmVzdWx0cykpKQog
ICAgICAgIHJldHVybiAoQUVfRVJST1IpOwoKICAgIGlmIChyZXN1bHRzLnJlZ1tIQ0lfUkVHX0FY
XSAhPSBIQ0lfU1VDQ0VTUykKICAgICAgICByZXR1cm4gKEFFX0VSUk9SKTsKCiAgICBpZiAocmV0
ICE9IE5VTEwpCiAgICAgICAgKnJldCA9IHJlc3VsdHMucmVnW0hDSV9SRUdfQ1hdOwoKICAgIHJl
dHVybiBBRV9PSzsKfQoKc3RhdGljIEFDUElfU1RBVFVTCmhjaV9yYXcoQUNQSV9IQU5ETEUgaCwg
c3RydWN0IGhjaV9yZWdzICppbiwgc3RydWN0IGhjaV9yZWdzICpvdXQpCnsKICAgIEFDUElfT0JK
RUNUX0xJU1QgYXJnczsKICAgIEFDUElfQlVGRkVSIHJlc3VsdHM7CiAgICBBQ1BJX09CSkVDVCBv
YmpbSENJX1dPUkRTXTsKICAgIEFDUElfT0JKRUNUICpyZXMsICp0bXA7CiAgICBBQ1BJX1NUQVRV
UyBzdGF0dXMgPSBBRV9PSzsKICAgIGludCBpOwoKICAgIGFyZ3MuQ291bnQgPSBIQ0lfV09SRFM7
CiAgICBhcmdzLlBvaW50ZXIgPSBvYmo7CiAgICBmb3IgKGkgPSAwOyBpIDwgSENJX1dPUkRTOyAr
K2kpIHsKICAgICAgICBvYmpbaV0uVHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwogICAgICAgIG9i
altpXS5JbnRlZ2VyLlZhbHVlID0gaW4tPnJlZ1tpXTsKICAgIH0KCiAgICByZXN1bHRzLlBvaW50
ZXIgPSBOVUxMOwogICAgcmVzdWx0cy5MZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKCiAg
ICBpZiAoQUNQSV9GQUlMVVJFKEFjcGlFdmFsdWF0ZU9iamVjdChoLCBNRVRIT0RfSENJLCAmYXJn
cywgJnJlc3VsdHMpKSkKICAgICAgICBnb3RvIGVuZDsKCiAgICByZXMgPSAoQUNQSV9PQkpFQ1Qg
KilyZXN1bHRzLlBvaW50ZXI7CiAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICBzdGF0dXMg
PSBBRV9FUlJPUjsKICAgICAgICBnb3RvIGVuZDsKICAgIH0KCiAgICBpZiAocmVzLT5UeXBlICE9
IEFDUElfVFlQRV9QQUNLQUdFIHx8IHJlcy0+UGFja2FnZS5Db3VudCA+IEhDSV9XT1JEUykgewog
ICAgICAgIHN0YXR1cyA9IEFFX0VSUk9SOwogICAgICAgIGdvdG8gZW5kOwogICAgfQogICAgCiAg
ICBmb3IgKGkgPTA7IGkgPCBIQ0lfV09SRFM7IGkrKykgewogICAgICAgIHRtcCA9ICZyZXMtPlBh
Y2thZ2UuRWxlbWVudHNbaV07CiAgICAgICAgb3V0LT5yZWdbaV0gPSB0bXAtPkludGVnZXIuVmFs
dWU7CiAgICB9CgplbmQ6CiAgICBpZiAocmVzdWx0cy5Qb2ludGVyICE9IE5VTEwpCiAgICAgICAg
QWNwaU9zRnJlZShyZXN1bHRzLlBvaW50ZXIpOwoKICAgIHJldHVybihzdGF0dXMpOwp9CgoKc3Rh
dGljIHZvaWQKZ2VuZXJpY19uZXh0KEFDUElfSEFORExFIGhhbmRsZSwgc3RydWN0IGV4dGVuc2lv
bl9mdW5jICplZikKewogICAgVUlOVDMyIGFyZzsKICAgIGludCB0bXA7CgogICAgaWYgKEFDUElf
RkFJTFVSRShjYWxsX2hjaShoYW5kbGUsIEhDSV9HRVQsIGVmLT5yZWcsIE5VTEwsICZhcmcpKSkK
ICAgICAgICByZXR1cm47CgogICAgdG1wID0gKGFyZyAmIH5lZi0+bWFzaykgPj4gZWYtPnNoaWZ0
OwogICAgdG1wICs9IGVmLT5zdGVwOwoKICAgIGlmICh0bXAgPiBlZi0+bWF4KQogICAgICAgIHRt
cCA9IGVmLT5yb3RhdGUgPyBlZi0+bWluIDogZWYtPm1heDsKICAgIGVsc2UgaWYgKHRtcCA8IGVm
LT5taW4pCiAgICAgICAgdG1wID0gZWYtPnJvdGF0ZSA/IGVmLT5tYXggOiBlZi0+bWluOwoKICAg
IGFyZyA9ICh0bXAgPDwgZWYtPnNoaWZ0KSB8IGVmLT5tYXNrOwogICAgY2FsbF9oY2koaGFuZGxl
LCBIQ0lfU0VULCBlZi0+cmVnLCBhcmcsIE5VTEwpOwp9Cgp2b2lkCnBvd2VyX3Byb2ZpbGVfbmV4
dChkZXZpY2VfdCBkZXYsIEFDUElfSEFORExFIGhhbmRsZSkKewogICAgQWNwaU9zUXVldWVGb3JF
eGVjdXRpb24oT1NEX1BSSU9SSVRZX0xPLAogICAgICAgICAgICAgICAgICAgICAgICBhY3BpX3Rv
c2hpYmFfYnV0dG9uX3ByZXNzZWRfZm9yX3Bvd2VyX3Byb2ZpbGUsIGRldik7Cn0KCnZvaWQKZm5f
c2xlZXBfYnV0dG9uKGRldmljZV90IGRldiwgQUNQSV9IQU5ETEUgaGFuZGxlKQp7CiAgICBBY3Bp
T3NRdWV1ZUZvckV4ZWN1dGlvbihPU0RfUFJJT1JJVFlfTE8sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGFjcGlfdG9zaGliYV9idXR0b25fbm90aWZ5X3ByZXNzZWRfZm9yX3NsZWVwLCBkZXYpOwp9
Cgp2b2lkCnN5c3RlbV9ldmVudChkZXZpY2VfdCBkZXYsIEFDUElfSEFORExFIGgpCnsKICAgIGlu
dCBpLCBuOwogICAgVUlOVDMyIGtleTsKCiAgICBuID0gRk5fVEFCTEVfTUFYOwogICAgd2hpbGUg
KEFDUElfU1VDQ0VTUyhnZXRfaGNpX2ZuX2tleShoLCAma2V5KSkpIHsKICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0YWJsZVtpXS5rZXljb2RlID09IGtl
eSkgewogICAgICAgICAgICAgICAgaWYgKHRhYmxlW2ldLmZ1bmMgIT0gTlVMTCkgewogICAgICAg
ICAgICAgICAgICAgIHRhYmxlW2ldLmZ1bmMoZGV2LCBoKTsKICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19uZXh0KGgsICZ0YWJsZVtpXSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICBpZiAoYm9vdHZlcmJvc2UpIHsKICAgICAgICAgICAgZGV2aWNlX3ByaW50Zihk
ZXYsICJrZXkgY29kZT0weCV4XG4iLCBrZXkpOwogICAgICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2
b2lkCmFjcGlfdG9zaGliYV9ub3RpZnlfaGFuZGxlcihBQ1BJX0hBTkRMRSBoLCBVSU5UMzIgbm90
aWZ5LCB2b2lkICpjb250ZXh0KQp7CiAgICBkZXZpY2VfdCBkZXY7CiAgICBzdHJ1Y3QgYWNwaV90
b3NoaWJhX3NvZnRjCSpzYzsKCiAgICBkZXYgPSAoZGV2aWNlX3QpY29udGV4dDsKICAgIGlmICgo
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldikpID09IE5VTEwpCiAgICAgICAgcmV0dXJuOwoKICAg
IHN3aXRjaCAobm90aWZ5KSB7CiAgICBjYXNlIDB4ODA6CiAgICAgICAgc3lzdGVtX2V2ZW50KGRl
diwgaCk7CiAgICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgIGRldmljZV9wcmludGYo
ZGV2LAogICAgICAgICAgICAgICAgICAgICJUb3NoaWJhIEV4IGRyaXZlciBnZXQgVW5rbm93biBO
b3RpZnkgKDB4JXgpXG4iLCBub3RpZnkpOwogICAgICAgIGJyZWFrOwogICAgfQp9CgpzdGF0aWMg
dm9pZAphY3BpX3Rvc2hpYmFfYnV0dG9uX25vdGlmeV9wcmVzc2VkX2Zvcl9zbGVlcCh2b2lkICph
cmcpCnsKICAgIGRldmljZV90IGRldjsKICAgIHN0cnVjdCBhY3BpX3NvZnRjICAgICAgICAgICAq
YWNwaV9zYzsKCiAgICBBQ1BJX0ZVTkNUSU9OX1RSQUNFKChjaGFyICopKHVpbnRwdHJfdClfX2Z1
bmNfXyk7CgogICAgZGV2ID0gKGRldmljZV90KWFyZzsKICAgIGFjcGlfc2MgPSBhY3BpX2Rldmlj
ZV9nZXRfcGFyZW50X3NvZnRjKGRldik7CiAgICBpZiAoYWNwaV9zYyA9PSBOVUxMKSB7CiAgICAg
ICAgcmV0dXJuX1ZPSUQ7CiAgICB9CgogICAgYWNwaV9ldmVudGhhbmRsZXJfc2xlZXBfYnV0dG9u
X2Zvcl9zbGVlcCgodm9pZCAqKWFjcGlfc2MpOwp9CgpzdGF0aWMgdm9pZAphY3BpX3Rvc2hpYmFf
YnV0dG9uX3ByZXNzZWRfZm9yX3Bvd2VyX3Byb2ZpbGUodm9pZCAqYXJnKQp7CiAgICBpbnQgc3Rh
dHVzOwoKICAgIHN0YXR1cyA9IHBvd2VyX3Byb2ZpbGVfZ2V0X3N0YXRlKCk7CiAgICBwb3dlcl9w
cm9maWxlX3NldF9zdGF0ZShzdGF0dXMgPyBQT1dFUl9QUk9GSUxFX1BFUkZPUk1BTkNFIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1dFUl9QUk9GSUxFX0VDT05PTVkpOwp9CgoK
c3RhdGljIGRldmljZV9tZXRob2RfdCBhY3BpX3Rvc2hpYmFfbWV0aG9kc1tdID0gewoJREVWTUVU
SE9EKGRldmljZV9wcm9iZSwJCWFjcGlfdG9zaGliYV9wcm9iZSksCglERVZNRVRIT0QoZGV2aWNl
X2F0dGFjaCwJYWNwaV90b3NoaWJhX2F0dGFjaCksCgl7MCwgMH0KfTsKCnN0YXRpYyBkcml2ZXJf
dCBhY3BpX3Rvc2hpYmFfZHJpdmVyID0gewoJImFjcGlfdG9zaGliYSIsCglhY3BpX3Rvc2hpYmFf
bWV0aG9kcywKCXNpemVvZihzdHJ1Y3QgYWNwaV90b3NoaWJhX3NvZnRjKSwKfTsKCnN0YXRpYyBk
ZXZjbGFzc190IGFjcGlfdG9zaGliYV9kZXZjbGFzczsKRFJJVkVSX01PRFVMRShhY3BpX3Rvc2hp
YmEsIGFjcGksIGFjcGlfdG9zaGliYV9kcml2ZXIsIGFjcGlfdG9zaGliYV9kZXZjbGFzcywgMCwg
MCk7Ck1PRFVMRV9ERVBFTkQoYWNwaV90b3NoaWJhLCBhY3BpLCAxMDAsIDEwMCwgMTAwKTsK

--Multipart_Thu__18_Sep_2003_23:11:49_+0900_08d2dc00--
