From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: From: Claudio Takahasi To: bluez-devel@lists.sourceforge.net Subject: Re: [Bluez-devel] hcid patch In-Reply-To: <1128160192.8555.6.camel@localhost.localdomain> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1256_1197224.1128348496225" References: <1128160192.8555.6.camel@localhost.localdomain> Sender: bluez-devel-admin@lists.sourceforge.net Errors-To: bluez-devel-admin@lists.sourceforge.net Reply-To: bluez-devel@lists.sourceforge.net List-Unsubscribe: , List-Id: BlueZ development List-Post: List-Help: List-Subscribe: , List-Archive: Date: Mon, 3 Oct 2005 11:08:16 -0300 ------=_Part_1256_1197224.1128348496225 Content-Type: multipart/alternative; boundary="----=_Part_1257_22641372.1128348496225" ------=_Part_1257_22641372.1128348496225 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Marcel, I kept some log information, if you want remove it I can send another patch= . The error code definition was included. I am using "hciX" in the path name until we receive a answer from dbus list. Services under the path /org/bluez/Devices weren't implemented yet. Is there other changes in this patch? Regards, Claudio >>>>Main Features 1. added multiple bt adapter support 2. added the structures to support profiles 3. Modified paths to "/org/bluez/Devices" and "/org/bluez/Manager". Where "Devices" is going to provide device configuration services currently provided by hciconfig tool. The "Manager" will handle services related to connection establishment and setup, including profiles, sdp and device discovery. 4. Added error new code definition >>>>Next Action 1. Move the functions to to suitable file names( eg: dbus-mgr.c and dbus-dev.c) 2. Define the device based path name. (waiting D-Bus mailing list answers) 3. Investigate fallback behaviour(how handle properly unregistered paths) On 10/1/05, Marcel Holtmann wrote: > > Hi Claudio, > > > The patch is attached. The basic structure to start the development of > > the "sdp", "network", "serial", ... was added. > > There are a lot not implemented methods. > > this patch looks like this: > > common/Makefile.am | 4 > common/util.c | 80 ++++ > common/util.h | 35 + > hcid/dbus-internal.h | 82 ++++ > hcid/dbus.c | 909 ++++++++++++++++++++++++++++++++++++++++++++++++++- > hcid/dbus.h | 200 +++++++++++ > hcid/hcid.h | 1 > hcid/main.c | 17 > tools/Makefile.am | 2 > tools/hcitool.c | 27 - > 10 files changed, 1319 insertions(+), 38 deletions(-) > > It is changing everything and looks like a previous patch that I > reviewed. > > I don't wanna see any changes outside hcid/dbus.[ch] at the moment and > the error definitions we agreed on are not included. It seems you just > modified one of your older patches with the new objects and paths. I > want to include something before the next release, but I am going the > full patch at the moment. > > Regards > > Marcel > > > > > ------------------------------------------------------- > This SF.Net email is sponsored by: > Power Architecture Resource Center: Free content, downloads, discussions, > and more. http://solutions.newsforge.com/ibmarch.tmpl > _______________________________________________ > Bluez-devel mailing list > Bluez-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bluez-devel > -- --------------------------------------------------------- Claudio Takahasi Nokia's Institute of Technology - INdT claudio.takahasi@indt.org.br ------=_Part_1257_22641372.1128348496225 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Marcel,

I kept some log information, if you want remove it I can send another patch. The error code definition was included. I am using "hciX" = in the path name until we receive a answer from dbus list. Services under the path /org/bluez/Devices weren't implemented yet.

Is there other changes in this patch?

Regards,
Claudio

>>>>Main Features
1. added multiple bt adapter support
2. added the structures to support profiles
3. Modified paths to "/org/bluez/Devices" and "/org/bluez/Ma= nager". Where "Devices" is going to provide device configuration services currently provided by hciconfig tool. The "Manager" will handle services related to connection establishment and setup, including profiles, sdp and device discovery.
4. Added error new code definition

>>>>Next Action
1. Move the functions to to suitable file names( eg: dbus-mgr.c and dbus-de= v.c)
2. Define the device based path name. (waiting D-Bus mailing list answers)<= br> 3. Investigate fallback behaviour(how handle properly unregistered paths)



On 10/1/05, Marcel Holtmann <marc= el@holtmann.org> wrote:
Hi Claudio,

> The patch is attached. The basic structure to start= the development of
> the "sdp", "network", "= ;serial", ... was added.
> There are a lot not implemented metho= ds.

this patch looks like this:

common/Makefile.am   = |    4
common/util.c     &= nbsp;  |   80 ++++
common/util.h   &= nbsp;    |   35 +
hcid/dbus-internal.h |&= nbsp;  82 ++++
hcid/dbus.c      &nbs= p;   |  909 ++++++++++++++++++++++++++++++++++++++= ++++++++++++-
hcid/dbus.h          = ;|  200 +++++++++++
hcid/hcid.h     =      |    1
hcid/main.c&nb= sp;         |   17 tools/Makefile.am    |    2
= tools/hcitool.c      |   27 -
1= 0 files changed, 1319 insertions(+), 38 deletions(-)

It is changing everything and looks like a previous patch that Ireviewed.

I don't wanna see any changes outside hcid/dbus.[ch] at t= he moment and
the error definitions we agreed on are not included. It se= ems you just
modified one of your older patches with the new objects and paths. Iwant to include something before the next release, but I am going the
f= ull patch at the moment.

Regards

Marcel




-------------------------------------------------------
This SF.Net emai= l is sponsored by:
Power Architecture Resource Center: Free content, dow= nloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
________________________= _______________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https:= //lists.sourceforge.net/lists/listinfo/bluez-devel



--
----------------------------------------= -----------------
Claudio Takahasi
Nokia's Institute of Technology - INdT
claudio.takahasi@indt.org.br ------=_Part_1257_22641372.1128348496225-- ------=_Part_1256_1197224.1128348496225 Content-Type: application/octet-stream; name="hcid_dbus_0010.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hcid_dbus_0010.patch" LS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvaGNpZC5oCTIwMDUtMDgtMjUgMTU6MzI6NDEu MDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC9oY2lkL2hjaWQuaAkyMDA1 LTEwLTAzIDExOjAyOjM2LjAwMDAwMDAwMCAtMDMwMApAQCAtMTIyLDYgKzEyMiw5IEBACiAKICNp ZmRlZiBFTkFCTEVfREJVUwogZ2Jvb2xlYW4gaGNpZF9kYnVzX2luaXQodm9pZCk7Cit2b2lkIGhj aWRfZGJ1c19leGl0KHZvaWQpOworZ2Jvb2xlYW4gbWdyX2RidXNfcmVnX2RldmljZV9wYXRocyh1 aW50MTZfdCBpZCk7CitnYm9vbGVhbiBtZ3JfZGJ1c191bnJlZ19kZXZpY2VfcGF0aHModWludDE2 X3QgaWQpOwogdm9pZCBoY2lkX2RidXNfcmVxdWVzdF9waW4oaW50IGRldiwgc3RydWN0IGhjaV9j b25uX2luZm8gKmNpKTsKIHZvaWQgaGNpZF9kYnVzX2lucXVpcnlfc3RhcnQoYmRhZGRyX3QgKmxv Y2FsKTsKIHZvaWQgaGNpZF9kYnVzX2lucXVpcnlfY29tcGxldGUoYmRhZGRyX3QgKmxvY2FsKTsK LS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvZGJ1cy5oCTE5NjktMTItMzEgMjE6MDA6MDAu MDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC9oY2lkL2RidXMuaAkyMDA1 LTEwLTAzIDEwOjQ5OjI4LjAwMDAwMDAwMCAtMDMwMApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAq CisgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgKgorICog IENvcHlyaWdodCAoQykgMjAwMC0yMDAxICBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDItMjAwMyAgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29t PgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDA1ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBo b2x0bWFubi5vcmc+CisgKgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKgorICogIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTCisgKiAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiAgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMu CisgKiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWQorICogIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVD VCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAorICogIFdIQVRTT0VW RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ TiBBTiAKKyAqICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElP VVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiAKKyAqICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqICBBTEwgTElBQklM SVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMs IAorICogIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBU TyBVU0UgT0YgVEhJUyAKKyAqICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgorICoKKyAqCisgKiAg JElkOiBkYnVzLmgsdiAwLjEgMjAwNS8wOS8xNiAwODowMDowMCBob2x0bWFubiBFeHAgJAorICov CisgCisjaWZuZGVmIF9fSF9CTFVFWl9EQlVTX0hfXworI2RlZmluZSBfX0hfQkxVRVpfREJVU19I X18KKworI2RlZmluZSBfX0VORF9TSUdfXyBEQlVTX1RZUEVfSU5WQUxJRF9BU19TVFJJTkcKKwor LyogYmx1ZXRvb3RoZCBCdXMgbmFtZSAqLworI2RlZmluZSBCTFVFWl9EQlVTX05BTUUJCQkib3Jn LmJsdWV6IgorI2RlZmluZSBERlRfREVWSUNFX0lEIAkJCSgweEZGRkYpCisjZGVmaW5lIEhDSV9E RlRfREVWSUNFX05BTUUJCSJkZWZhdWx0IgorI2RlZmluZSBIQ0lfREVWSUNFX05BTUUJCQkiaGNp IgorCisjZGVmaW5lIEJMVUVaX0RCVVNfREVWU19QQVRICQkJIi9vcmcvYmx1ZXovRGV2aWNlcyIK KyNkZWZpbmUgQkxVRVpfREJVU19ERVZTX0lOVEVSRkFDRQkJQkxVRVpfREJVU19OQU1FIi5EZXZp Y2VzIgorCisjZGVmaW5lIEJMVUVaX0RCVVNfTUdSX1BBVEgJCQkiL29yZy9ibHVlei9NYW5hZ2Vy IgorI2RlZmluZSBCTFVFWl9EQlVTX01HUl9JTlRFUkZBQ0UJCUJMVUVaX0RCVVNfTkFNRSIuTWFu YWdlciIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgQmx1ZVogRC1CdXMgRGV2aWNlIHNlcnZp Y2UgZGVmaW5pdGlvbnMgIi9vcmcvYmx1ZXovRGV2aWNlIgorICo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwor I2RlZmluZSBERVZfVVBfUkVRCQkJIlVwIgorI2RlZmluZSBERVZfRE9XTl9SRVEJCQkiRG93biIK KyNkZWZpbmUgREVWX1JFU0VUX1JFUQkJCSJSZXNldCIKKyNkZWZpbmUgREVWX1NFVF9QUk9QRVJU WV9SRVEJCSJTZXRQcm9wZXJ0eSIKKyNkZWZpbmUgREVWX0dFVF9QUk9QRVJUWV9SRVEJCSJHZXRQ cm9wZXJ0eSIKKworI2RlZmluZSBERVZfVVBfUkVRX1NJR05BVFVSRSAgICAgICAgICAgIAlfX0VO RF9TSUdfXworI2RlZmluZSBERVZfRE9XTl9SRVFfU0lHTkFUVVJFICAgICAgICAgICAgCV9fRU5E X1NJR19fCisjZGVmaW5lIERFVl9SRVNFVF9SRVFfU0lHTkFUVVJFICAgICAgICAgICAgCV9fRU5E X1NJR19fCisjZGVmaW5lIERFVl9TRVRfUFJPUEVSVFlfUkVRX1NJR05BVFVSRSAgICAgICAgICAg IAlfX0VORF9TSUdfXworI2RlZmluZSBERVZfR0VUX1BST1BFUlRZX1JFUV9TSUdOQVRVUkUgICAg ICAgICAgICAJX19FTkRfU0lHX18KKworCisvL1RPRE8gYWRkIHRoZSBvdGhlciBoY2ljb25maWcg ZmVhdHVyZXMKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgICAgQmx1ZVogRC1CdXMgTWFuYWdlciBz ZXJ2aWNlIGRlZmluaXRpb25zICIvb3JnL2JsdWV6L01hbmFnZXIiCisgKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PSovCisgCisgLyogPT09PT0gTWFuYWdlciBkZWZpbml0aW9ucywgc2VydmljZXMgdW5kZXIgQkxV RVpfREJVU19ERVZTX1BBVEggPT09PT0gKi8KKyNkZWZpbmUgTUdSX0dFVF9ERVZfUkVRCQkJIkRl dmljZUxpc3QiCisjZGVmaW5lIE1HUl9JTklUX1JFUQkJCSJJbml0IgorCisvKiBFbmFibGUvRGlz YWJsZSBzZXJ2aWNlcyBjb250cm9sbGVyLCBwYW4sIHNlcmlhbCwgLi4uICovCisjZGVmaW5lIE1H Ul9FTkFCTEVfUkVRCQkJIkVuYWJsZSIKKyNkZWZpbmUgTUdSX0RJU0FCTEVfUkVRCQkJIkRpc2Fi bGUiCisKKy8vc2lnbmF0dXJlcworI2RlZmluZSBNR1JfR0VUX0RFVl9SRVFfU0lHTkFUVVJFICAg ICAgICAgICAgCV9fRU5EX1NJR19fCisKKy8qIHl5YShzcykqLworI2RlZmluZSBNR1JfR0VUX0RF Vl9SRVBMWV9TSUdOQVRVUkUJCQlEQlVTX1RZUEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJV U19UWVBFX0JZVEVfQVNfU1RSSU5HXAorCQkJCQkJCURCVVNfVFlQRV9BUlJBWV9BU19TVFJJTkdc CisJCQkJCQkJSENJX0RFVklDRV9TVFJVQ1RfU0lHTkFUVVJFXAorCQkJCQkJCV9fRU5EX1NJR19f CisgCisvKiA9PT09PSBIQ0kgZGVmaW5pdGlvbnMgPT09PT0gKi8KKyNkZWZpbmUgQkxVRVpfREJV U19IQ0kJCQkiQ29udHJvbGxlciIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfUEFUSAkJQkxVRVpf REJVU19NR1JfUEFUSCIvIkJMVUVaX0RCVVNfSENJCisjZGVmaW5lIEJMVUVaX0RCVVNfSENJX0lO VEVSRkFDRQlCTFVFWl9EQlVTX01HUl9JTlRFUkZBQ0UiLiJCTFVFWl9EQlVTX0hDSQorCisvL0hD SSBzaWduYWxzCisjZGVmaW5lIEJMVUVaX0RCVVNfSENJX1NJR19JTlFfU1RBUlQJCSJJbnF1aXJ5 U3RhcnRTaWciCisjZGVmaW5lIEJMVUVaX0RCVVNfSENJX1NJR19JTlFfQ09NUExFVEUJCSJJbnF1 aXJ5Q29tcGxldGVTaWciCisjZGVmaW5lIEJMVUVaX0RCVVNfSENJX1NJR19JTlFfUkVTVUxUCQki SW5xdWlyeVJlc3VsdFNpZyIKKyNkZWZpbmUgQkxVRVpfREJVU19IQ0lfU0lHX1JFTU9URV9OQU1F CQkiUmVtb3RlTmFtZVNpZyIKKworLy9IQ0kgUHJvdmlkZWQgc2VydmljZXMKKyNkZWZpbmUgSENJ X1BFUklPRElDX0lOUV9SRVEJCQkiUGVyaW9kaWNJbnF1aXJ5IgorI2RlZmluZSBIQ0lfQ0FOQ0VM X1BFUklPRElDX0lOUV9SRVEJCSJDYW5jZWxQZXJpb2RpYyIKKyNkZWZpbmUgSENJX0lOUV9SRVEJ CQkJIklucXVpcnkiCisjZGVmaW5lIEhDSV9ST0xFX1NXSVRDSF9SRVEJCQkiUm9sZVN3aXRjaCIK KworCisjZGVmaW5lIEhDSV9QRVJJT0RJQ19JTlFfUkVRX1NJR05BVFVSRQkJICAgICAgICBEQlVT X1RZUEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0JZVEVfQVNfU1RSSU5HXAor CQkJCQkJCURCVVNfVFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlfX0VORF9TSUdfXworCQkJ CQkJCQorI2RlZmluZSBIQ0lfQ0FOQ0VMX1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFCQlfX0VO RF9TSUdfXworCisjZGVmaW5lIEhDSV9JTlFfUkVRX1NJR05BVFVSRSAgICAgICAgICAgICAgICAJ ICAgIAlEQlVTX1RZUEVfQllURV9BU19TVFJJTkdcCisJCQkJCQkJREJVU19UWVBFX0JZVEVfQVNf U1RSSU5HXAorCQkJCQkJCURCVVNfVFlQRV9VSU5UMTZfQVNfU1RSSU5HXAorCQkJCQkJCV9fRU5E X1NJR19fCisJCQkJCQkJCisjZGVmaW5lIEhDSV9ST0xFX1NXSVRDSF9SRVFfU0lHTkFUVVJFICAg ICAgICAgICAgICAgICAgIERCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HXAorCQkJCQkJCURCVVNf VFlQRV9CWVRFX0FTX1NUUklOR1wKKwkJCQkJCQlfX0VORF9TSUdfXworCQkJCQkJCQorI2RlZmlu ZSBIQ0lfREVWSUNFX1NUUlVDVF9TSUdOQVRVUkUJCURCVVNfU1RSVUNUX0JFR0lOX0NIQVJfQVNf U1RSSU5HXAorCQkJCQkJREJVU19UWVBFX1NUUklOR19BU19TVFJJTkdcCisJCQkJCQlEQlVTX1RZ UEVfU1RSSU5HX0FTX1NUUklOR1wKKwkJCQkJCURCVVNfU1RSVUNUX0VORF9DSEFSX0FTX1NUUklO RworCisjZGVmaW5lIEhDSV9JTlFfUkVQTFlfU0lHTkFUVVJFCQkJCURCVVNfU1RSVUNUX0JFR0lO X0NIQVJfQVNfU1RSSU5HXAorCQkJCQkJCURCVVNfVFlQRV9TVFJJTkdfQVNfU1RSSU5HXAorCQkJ CQkJCURCVVNfVFlQRV9VSU5UMzJfQVNfU1RSSU5HXAorCQkJCQkJCURCVVNfVFlQRV9VSU5UMTZf QVNfU1RSSU5HXAorCQkJCQkJCURCVVNfU1RSVUNUX0VORF9DSEFSX0FTX1NUUklOR1wKKwkJCQkJ CQlfX0VORF9TSUdfXworCisKKy8qID09PT09ICAgIFNEUCBkZWZpbml0aW9ucyAgICA9PT09PSAq LworI2RlZmluZSBCTFVFWl9EQlVTX1NEUCAJCSJTZXJ2aWNlIgorLy9EZWZhdWx0IHBhdGggZm9y IFNlcnZpY2UKKyNkZWZpbmUgQkxVRVpfREJVU19TRFBfUEFUSAlCTFVFWl9EQlVTX01HUl9QQVRI Ii8iSENJX0RGVF9ERVZJQ0VfTkFNRSIvIkJMVUVaX0RCVVNfU0RQCisvL1NEUCBzaWduYWxzCisv L1NEUCBQcm92aWRlZCBzZXJ2aWNlcworLy9TRFAgc2lnbmF0dXJlcworCisKKy8qID09PT09ICAg UkZDT01NIGRlZmluaXRpb25zICA9PT09PSAqLworI2RlZmluZSBCTFVFWl9EQlVTX1NFUklBTAkJ IlNlcmlhbCIKKy8vRGVmYXVsdCBwYXRoIGZvciBTZXJpYWwKKyNkZWZpbmUgQkxVRVpfREJVU19T RVJJQUxfUEFUSAlCTFVFWl9EQlVTX01HUl9QQVRIIi8iSENJX0RGVF9ERVZJQ0VfTkFNRSIvIkJM VUVaX0RCVVNfU0VSSUFMCisvL1JGQ09NTSBzaWduYWxzCisvL1JGQ09NTSBQcm92aWRlZCBzZXJ2 aWNlcworLy9SRkNPTU0gc2lnbmF0dXJlcworCisKKy8qID09PT09ICAgIFBBTiBkZWZpbml0aW9u cyAgICA9PT09PSAqLworI2RlZmluZSBCTFVFWl9EQlVTX05FVCAJCSJOZXR3b3JrIgorLy9EZWZh dWx0IHBhdGggZm9yIE5ldHdvcmsKKyNkZWZpbmUgQkxVRVpfREJVU19ORVRfUEFUSAlCTFVFWl9E QlVTX01HUl9QQVRIIi8iSENJX0RGVF9ERVZJQ0VfTkFNRSIvIkJMVUVaX0RCVVNfTkVUCisvL1BB TiBzaWduYWxzCisvL1BBTiBQcm92aWRlZCBzZXJ2aWNlcworLy9QQU4gc2lnbmF0dXJlcworCisv KiA9PT09PSAgICBISUQgZGVmaW5pdGlvbnMgICAgPT09PT0gKi8KKyNkZWZpbmUgQkxVRVpfREJV U19ISUQgCQkiSElEIgorLy9EZWZhdWx0IHBhdGggZm9yIEhJRAorI2RlZmluZSBCTFVFWl9EQlVT X0hJRF9QQVRICUJMVUVaX0RCVVNfTUdSX1BBVEgiLyJIQ0lfREZUX0RFVklDRV9OQU1FIi8iQkxV RVpfREJVU19ISUQKKworLy9ISUQgc2lnbmFscworLy9ISUQgUHJvdmlkZWQgc2VydmljZXMKKy8v SElEIHNpZ25hdHVyZXMKKworCisvKiA9PT09PSBDb21tb24gRXJyb3IgbWVzc2FnZXMgb2Ygb3Jn LmJsdWV6LiA9PT09PSovCisjZGVmaW5lIEJMVUVaX0RCVVNfRVJSX0ZBSUxFRCAgICAgICAgICAg ICAgQkxVRVpfREJVU19OQU1FIi5FRmFpbGVkIgorLy9UT0RPIFdoYXQgYXJlIHRoZSBvdGhlciBl cnJvciB0eXBlcz8KKworCisvKiBCTFVFWl9EQlVTX0VSUl9GQUlMRUQKKyAqIEVGYWlsZWQgZXJy b3IgbWVzc2FnZXMgc2lnbmF0dXJlIGlzIDogc25pCisgKiBXaGVyZSB0aGUgZmlyc3QgYXJndW1l bnQgaXMgYSBzdHJpbmcoZXJyb3IgbWVzc2FnZSBkZXNjcmlwdGlvbiksCisgKiB0aGUgc2Vjb25k IGlzIGEgdWludDE2IHRoYXQgY29udGFpbnMgdGhlIGVycm9yIGNsYXNzKHN5c3RlbSwgZGJ1cyBv ciBoY2kpLgorICogVGhlIGxhc3QgYXJndW1lbnQgaXMgYSBpbnQzMiB0aGF0IGNvbnRhaW5zIHRo ZSBlcnJvciBjb2RlKGVycm5vIAorICogZm9yIHN5c3RlbSBlcnJvcnMsIGEgZGJ1cyBlcnJvciBj b2RlIGRlZmluZWQgYmVsb3cgb3IgYSBoY2kgZXJyb3IpLgorICogRm9yIGhjaSBlcnJvciBzZWUg dGhlIGJsdWV0b290aCBzcGVjaWZpY2F0aW9uLgorICovCisgCisvKiBFcnJvciBjb2RlIG9mZnNl dHMgKi8KKyNkZWZpbmUgQkxVRVpfRUJUX09GRlNFVAkJKDB4MDAwMDAwMDApIC8qIHNlZSBCbHVl dG9vdGggZXJyb3IgY29kZSAqLworI2RlZmluZSBCTFVFWl9FQlRfRVhUX09GRlNFVAkJKDB4MDAw MDAxMDApCisjZGVmaW5lIEJMVUVaX0VEQlVTX09GRlNFVAkJKDB4MDAwMTAwMDApCisjZGVmaW5l IEJMVUVaX0VTWVNURU1fT0ZGU0VUCQkoMHgwMDAyMDAwMCkKKyNkZWZpbmUgQkxVRVpfRUZVVFVS RV9PRkZTRVQJCSgweDAwMDQwMDAwKQorCisKKy8qIEQtQnVzIGVycm9yIGNvZGUsIGNsYXNzIEJM VUVaX0VEQlVTX09GRlNFVCAqLworI2RlZmluZSBCTFVFWl9FREJVU19VTktOT1dOX01FVEhPRAko MHgwMSArIEJMVUVaX0VEQlVTX09GRlNFVCkKKyNkZWZpbmUgQkxVRVpfRURCVVNfV1JPTkdfU0lH TkFUVVJFCSgweDAyICsgQkxVRVpfRURCVVNfT0ZGU0VUKQorI2RlZmluZSBCTFVFWl9FREJVU19X Uk9OR19QQVJBTQkJKDB4MDMgKyBCTFVFWl9FREJVU19PRkZTRVQpCisjZGVmaW5lIEJMVUVaX0VE QlVTX1JFQ09SRF9OT1RfRk9VTkQJKDB4MDQgKyBCTFVFWl9FREJVU19PRkZTRVQpCisjZGVmaW5l IEJMVUVaX0VEQlVTX05PX01FTSAgIAkJKDB4MDUgKyBCTFVFWl9FREJVU19PRkZTRVQpCisjZGVm aW5lIEJMVUVaX0VEQlVTX0NPTk5fTk9UX0ZPVU5ECSgweDA2ICsgQkxVRVpfRURCVVNfT0ZGU0VU KQorCisvKiBELUJ1cyBlcnJvciBjb2RlLCBjbGFzcyBCTFVFWl9FU1lTVEVNX09GRlNFVCAqLwor I2RlZmluZSBCTFVFWl9FU1lTVEVNX0VOT0RFVgkJKEVOT0RFViArIEJMVUVaX0VTWVNURU1fT0ZG U0VUKQorCisKKy8qIEJMVUVaX0RCVVNfRVJSX05PX01FTU9SWSAqLworI2RlZmluZSBCTFVFWl9E QlVTX0VSUl9OT19NRU1PUllfU1RSCSJObyBtZW1vcnkiCisKKworI2VuZGlmIC8qX19IX0JMVUVa X0RCVVNfSF9fKi8KLS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvZGJ1cy5jCTIwMDUtMDkt MjIgMDk6MDk6MTYuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNpZC9oY2lk L2RidXMuYwkyMDA1LTEwLTAzIDEwOjQ4OjE5LjAwMDAwMDAwMCAtMDMwMApAQCAtMzMsOSArMzMs MTQgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9p b2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+ CiAKKwogI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxibHVldG9v dGgvaGNpLmg+CiAjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4KQEAgLTQ1LDIyICs1MCwy MjkgQEAKICNpbmNsdWRlICJnbGliLWVjdG9teS5oIgogCiAjaW5jbHVkZSAiaGNpZC5oIgorI2lu Y2x1ZGUgImRidXMuaCIKIAogc3RhdGljIERCdXNDb25uZWN0aW9uICpjb25uZWN0aW9uOworc3Rh dGljIGludDhfdCBudW1fYWRhcHRlcnMgPSAwOwogCiAjZGVmaW5lIFRJTUVPVVQgKDMwICogMTAw MCkJCS8qIDMwIHNlY29uZHMgKi8KKyNkZWZpbmUgQkxVRVRPT1RIX0RFVklDRV9OQU1FX0xFTiAg ICAoMTgpCisjZGVmaW5lIEJMVUVUT09USF9ERVZJQ0VfQUREUl9MRU4gICAgKDE4KQorI2RlZmlu ZSBNQVhfUEFUSF9MRU5HVEggICAoNjQpCiAKICNkZWZpbmUgU0VSVklDRV9OQU1FICJvcmcuYmx1 ZXouUGluQWdlbnQiCiAjZGVmaW5lIElOVEVSRkFDRV9OQU1FIFNFUlZJQ0VfTkFNRQogI2RlZmlu ZSBSRVFVRVNUX05BTUUgIlBpblJlcXVlc3QiCiAjZGVmaW5lIFBBVEhfTkFNRSAiL29yZy9ibHVl ei9QaW5BZ2VudCIKIAotI2RlZmluZSBXUk9OR19BUkdTX0VSUk9SICJvcmcuYmx1ZXouRXJyb3Iu V3JvbmdBcmdzIgogCiBzdHJ1Y3QgcGluX3JlcXVlc3QgewogCWludCBkZXY7CiAJYmRhZGRyX3Qg YmRhOwogfTsKKy8qCisgKiBuZXh0IGFjdGlvbjogbW92ZSB0byBhIGNvbW1vbiBoZWFkZXIKKyAq LworCisKK3R5cGVkZWYgREJ1c01lc3NhZ2UqIChzZXJ2aWNlX2hhbmRsZXJfZnVuY190KShEQnVz TWVzc2FnZSAqLCB2b2lkICopOworCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgICAg ICAgICAgICAgKm5hbWU7CisJc2VydmljZV9oYW5kbGVyX2Z1bmNfdCAqaGFuZGxlcl9mdW5jOwor CWNvbnN0IGNoYXIgICAgICAgICAgICAgKnNpZ25hdHVyZTsKK31zZXJ2aWNlX3RhYmxlX3Q7CisK K3R5cGVkZWYgaW50OF90ICByZWdpc3Rlcl9mdW5jdGlvbl90KERCdXNDb25uZWN0aW9uICpjb25u LCB1aW50OF90IGRmdF9yZWcsIHVpbnQxNl90IGlkKTsKK3R5cGVkZWYgaW50OF90ICB1bnJlZ2lz dGVyX2Z1bmN0aW9uX3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIHVpbnQ4X3QgdW5yZWdfZGZ0LCB1 aW50MTZfdCBpZCk7CisKK2NvbnN0IHNlcnZpY2VfdGFibGVfdCAqZ2V0X2hjaV90YWJsZSh2b2lk KTsKK2ludDhfdCAgaGNpX2RidXNfcmVnX29ial9wYXRoKERCdXNDb25uZWN0aW9uICpjb25uLCB1 aW50OF90IGRmdF9yZWcsIHVpbnQxNl90IGlkKTsKK2ludDhfdCAgaGNpX2RidXNfdW5yZWdfb2Jq X3BhdGgoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIHVpbnQ4X3QgdW5yZWdfZGZ0LCB1aW50MTZfdCBp ZCk7CisKKwordHlwZWRlZiBjb25zdCBzZXJ2aWNlX3RhYmxlX3QqIGdldF9zdmNfdGFibGVfZnVu Y190KHZvaWQpOwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJCSpuYW1lOworCXVpbnQ4 X3QJCQlzdGF0dXM7IC8qIDE6YWN0aXZlICAwOmRpc2FibGVkICovCisJdWludDhfdAkJCWRmdF9y ZWc7IC8qIGRmdCBwYXRoIHJlZ2lzdGVyZWQgKi8KKwlyZWdpc3Rlcl9mdW5jdGlvbl90ICAgICAq cmVnX2Z1bmM7CisJdW5yZWdpc3Rlcl9mdW5jdGlvbl90ICAgKnVucmVnX2Z1bmM7CisJZ2V0X3N2 Y190YWJsZV9mdW5jX3QgKmdldF9zdmNfdGFibGU7IC8qIHJldHVybiB0aGUgc2VydmljZSB0YWJs ZSAqLworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpcHJvZmlsZV9vYmpfcGF0aF9kYXRhX3Q7CisK Ky8qCisgKiBuZXh0IGFjdGlvbjogTW92ZSB0byAvY29tbW9uIGRpcmVjdG9yeQorICovCisKK3N0 YXRpYyBpbnQgZmluZF9jb25uKGludCBzLCBpbnQgZGV2X2lkLCBsb25nIGFyZykKK3sKKwlzdHJ1 Y3QgaGNpX2Nvbm5fbGlzdF9yZXEgKmNsOworCXN0cnVjdCBoY2lfY29ubl9pbmZvICpjaTsKKwlp bnQgaTsKKworCWlmICghKGNsID0gbWFsbG9jKDEwICogc2l6ZW9mKCpjaSkgKyBzaXplb2YoKmNs KSkpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7CisJCXJl dHVybiAwOworCX0KKwljbC0+ZGV2X2lkID0gZGV2X2lkOworCWNsLT5jb25uX251bSA9IDEwOwor CWNpID0gY2wtPmNvbm5faW5mbzsKKworCWlmIChpb2N0bChzLCBIQ0lHRVRDT05OTElTVCwgKHZv aWQgKikgY2wpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3QgZ2V0IGNvbm5lY3Rpb24gbGlz dCIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2wtPmNvbm5fbnVtOyBp KyssIGNpKyspCisJCWlmICghYmFjbXAoKGJkYWRkcl90ICopIGFyZywgJmNpLT5iZGFkZHIpKQor CQkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogRC1CdXMgZXJyb3IgbWVz c2FnZXMgZnVuY3Rpb25zIGFuZCBkZWNsYXJhdGlvbnMuCisgKiBUaGlzIHNlY3Rpb24gc2hvdWxk IGJlIG1vdmVkIHRvIGEgY29tbW9uIGZpbGUgCisgKiBpbiB0aGUgZnV0dXJlCisgKgorICovCit0 eXBlZGVmIHN0cnVjdCAgeworCXVpbnQzMl90IGNvZGU7CisJY29uc3QgY2hhciAqc3RyOworfWJs dWV6X2Vycm9yX3Q7CisKK3N0YXRpYyBjb25zdCBibHVlel9lcnJvcl90IGVycm9yX2FycmF5W10g PSB7CisJeyBCTFVFWl9FREJVU19VTktOT1dOX01FVEhPRCwgICAiTWV0aG9kIG5vdCBmb3VuZCJ9 LAorCXsgQkxVRVpfRURCVVNfV1JPTkdfU0lHTkFUVVJFLCAgIldyb25nIG1ldGhvZCBzaWduYXR1 cmUifSwKKwl7IEJMVUVaX0VEQlVTX1dST05HX1BBUkFNLCAgICAgICJJbnZhbGlkIHBhcmFtZXRl cnMifSwKKwl7IEJMVUVaX0VEQlVTX1JFQ09SRF9OT1RfRk9VTkQsICJObyByZWNvcmQgZm91bmQi fSwKKwl7IDAsIAkJCQlOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpibHVlel9kYnVz X2Vycm9yX3RvX3N0cihjb25zdCB1aW50MzJfdCBlY29kZSkgCit7CisJY29uc3QgYmx1ZXpfZXJy b3JfdCAqcHRyOworCXVpbnQzMl90IHJhd19jb2RlID0gMDsKKwkKKwlzeXNsb2cgKExPR19JTkZP LCAiJXMgLSBsaW5lOiVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18pOworCQorCWlm IChlY29kZSAmIEJMVUVaX0VTWVNURU1fT0ZGU0VUKSB7CisJCS8qIFN5c3RlbSBlcnJvciAqLwor CQlzeXNsb2cgKExPR19JTkZPLCAiJXMgLSBsaW5lOiVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywg X19MSU5FX18pOworCQlyYXdfY29kZSA9ICghQkxVRVpfRVNZU1RFTV9PRkZTRVQpICYgZWNvZGU7 CisJCXN5c2xvZyhMT0dfSU5GTywgIiVzIC0gbXNnOiVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXywg c3RyZXJyb3IocmF3X2NvZGUpKTsKKwkJcmV0dXJuIHN0cmVycm9yKHJhd19jb2RlKTsKKwl9IGVs c2UgaWYgKGVjb2RlICYgQkxVRVpfRURCVVNfT0ZGU0VUKSB7IAorCQkvKiBELUJ1cyBlcnJvciAq LworCQlzeXNsb2cgKExPR19JTkZPLCAiJXMgLSBsaW5lOiVkIiwgX19QUkVUVFlfRlVOQ1RJT05f XywgX19MSU5FX18pOworCQlmb3IgKHB0ciA9IGVycm9yX2FycmF5OyBwdHItPmNvZGU7IHB0cisr KSB7CisJCQlpZihwdHItPmNvZGUgPT0gZWNvZGUpIHsKKwkJCQlzeXNsb2coTE9HX0lORk8sICIl cyAtIG1zZzolcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHB0ci0+c3RyKTsKKwkJCQlyZXR1cm4g cHRyLT5zdHI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0RCdXNNZXNzYWdl ICpibHVlel9uZXdfZmFpbHVyZV9tc2coREJ1c01lc3NhZ2UgKm1zZywgY29uc3QgdWludDMyX3Qg ZWNvZGUpCit7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisJREJ1c01lc3NhZ2UgKnJlcGx5ID0g TlVMTDsKKwljb25zdCBjaGFyICplcnJvcl9tc2cgPSBOVUxMOworCQorCXN5c2xvZyAoTE9HX0lO Rk8sICIlcyAtIGxpbmU6JWQiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCisJ ZXJyb3JfbXNnID0gYmx1ZXpfZGJ1c19lcnJvcl90b19zdHIoZWNvZGUpOworCQorCWlmIChlcnJv cl9tc2cpIHsKKwkKKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywgQkxVRVpf REJVU19FUlJfRkFJTEVELCBlcnJvcl9tc2cpOworCQorCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0 X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMo Jml0ZXIsIERCVVNfVFlQRV9VSU5UMzIgLCZlY29kZSk7CisJfQorCQorCXJldHVybiByZXBseTsK K30KKworLyoKKyAqIE9iamVjdCBwYXRoIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZnVuY3Rpb25zIAor ICoKKyAqLworc3RhdGljIHByb2ZpbGVfb2JqX3BhdGhfZGF0YV90IG9ial9wYXRoX3RhYmxlW10g PSB7CisJe0JMVUVaX0RCVVNfSENJLCAgICAgICAxLCAwLCBoY2lfZGJ1c19yZWdfb2JqX3BhdGgs ICAgIGhjaV9kYnVzX3VucmVnX29ial9wYXRoLCAgICBnZXRfaGNpX3RhYmxlICB9LAorCS8qeyBC TFVFWl9EQlVTX1NEUCwgICAgMCwgMCwgc2RwX2RidXNfcmVnX29ial9wYXRoLCAgICBzZHBfZGJ1 c191bnJlZ19vYmpfcGF0aCwgICAgTlVMTCAgfSwqLworCS8qeyBCTFVFWl9EQlVTX05FVCwgICAg MCwgMCwgbmV0X2RidXNfcmVnX29ial9wYXRoLCAgICBuZXRfZGJ1c191bnJlZ19vYmpfcGF0aCwg ICAgTlVMTCAgfSwqLworCS8qeyBCTFVFWl9EQlVTX0hJRCwgICAgMCwgMCwgaGlkX2RidXNfcmVn X29ial9wYXRoLCAgICBoaWRfZGJ1c191bnJlZ19vYmpfcGF0aCAsICAgTlVMTCAgfSwqLworCS8q eyBCTFVFWl9EQlVTX1NFUklBTCwgMCwgMCwgc2VyaWFsX2RidXNfcmVnX29ial9wYXRoLCBzZXJp YWxfZGJ1c191bnJlZ19vYmpfcGF0aCwgTlVMTCAgfSwqLworCXtOVUxMLCAwLCAwLCBOVUxMLCBO VUxMLCBOVUxMfQorfTsKKworLyoKKyAqIERldmljZSBNZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25z IG9iamVjdCB0YWJsZSBkZWNsYXJhdGlvbgorICovCitzdGF0aWMgREJ1c0hhbmRsZXJSZXN1bHQg bXNnX2Z1bmMoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRh dGEpOworCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9nZXRfZGV2aWNlc19yZXEoREJ1c01l c3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9ub3Rf aW1wbGVtZW50ZWRfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpOworCitzdGF0aWMg Y29uc3QgREJ1c09iamVjdFBhdGhWVGFibGUgb2JqX3Z0YWJsZSA9IHsKKwlOVUxMLAorCSZtc2df ZnVuYywKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMCit9OworCisvKgorICogU2Vydmlj ZSBwcm92aWRlZCB1bmRlciB0aGUgcGF0aCBCTFVFWl9EQlVTX0RFVlNfUEFUSAorICogVE9ETyBh ZGQgdGhlIGhhbmRsZXJzCisgKi8KK3N0YXRpYyBjb25zdCBzZXJ2aWNlX3RhYmxlX3QgZGV2X3Nl cnZpY2VzW10gPSB7CisJe0RFVl9VUF9SRVEsIAkJaGFuZGxlX25vdF9pbXBsZW1lbnRlZF9yZXEs CURFVl9VUF9SRVFfU0lHTkFUVVJFfSwKKwl7REVWX0RPV05fUkVRLCAJCWhhbmRsZV9ub3RfaW1w bGVtZW50ZWRfcmVxLAlERVZfRE9XTl9SRVFfU0lHTkFUVVJFfSwKKwl7REVWX1JFU0VUX1JFUSwg CWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlERVZfUkVTRVRfUkVRX1NJR05BVFVSRSB9LAor CXtERVZfU0VUX1BST1BFUlRZX1JFUSwgCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlERVZf U0VUX1BST1BFUlRZX1JFUV9TSUdOQVRVUkUgfSwKKwl7REVWX0dFVF9QUk9QRVJUWV9SRVEsIAlo YW5kbGVfbm90X2ltcGxlbWVudGVkX3JlcSwJREVWX0dFVF9QUk9QRVJUWV9SRVFfU0lHTkFUVVJF IH0sCisJe05VTEwsIE5VTEwsIE5VTEx9Cit9OworCisvKgorICogTWFuYWdlciBNZXNzYWdlIGhh bmRsZXIgZnVuY3Rpb25zIG9iamVjdCB0YWJsZSBkZWNsYXJhdGlvbgorICoKKyAqLworc3RhdGlj IGNvbnN0IHNlcnZpY2VfdGFibGVfdCBtZ3Jfc2VydmljZXNbXSA9IHsKKwl7TUdSX0dFVF9ERVZf UkVRLAloYW5kbGVfZ2V0X2RldmljZXNfcmVxLAkJTUdSX0dFVF9ERVZfUkVRX1NJR05BVFVSRX0s CisJe01HUl9JTklUX1JFUSwgCQloYW5kbGVfbm90X2ltcGxlbWVudGVkX3JlcSwgCU5VTEwgfSwK Kwl7TUdSX0VOQUJMRV9SRVEsCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLCAJTlVMTCB9LAor CXtNR1JfRElTQUJMRV9SRVEsCWhhbmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxLAlOVUxMIH0sCisJ e05VTEwsCQkJaGFuZGxlX25vdF9pbXBsZW1lbnRlZF9yZXEsCU5VTEx9Cit9OworCisKKy8qCisg KiBIQ0kgTWFuYWdlciBNZXNzYWdlIGhhbmRsZXIgZnVuY3Rpb25zIG9iamVjdCB0YWJsZSBkZWNs YXJhdGlvbgorICoKKyAqLworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9zaWduYWxfZmls dGVyIChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7 CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3BlcmlvZGljX2lucV9yZXEoREJ1c01lc3Nh Z2UgKm1zZywgdm9pZCAqZGF0YSk7CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9jYW5jZWxf cGVyaW9kaWNfaW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBE QnVzTWVzc2FnZSogaGFuZGxlX2lucV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSk7 CitzdGF0aWMgREJ1c01lc3NhZ2UqIGhhbmRsZV9yb2xlX3N3aXRjaF9yZXEoREJ1c01lc3NhZ2Ug Km1zZywgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBjb25zdCBzZXJ2aWNlX3RhYmxlX3QgaGNpX3Nl cnZpY2VzW10gPSB7CisJe0hDSV9QRVJJT0RJQ19JTlFfUkVRLAkJaGFuZGxlX3BlcmlvZGljX2lu cV9yZXEsCUhDSV9QRVJJT0RJQ19JTlFfUkVRX1NJR05BVFVSRX0sCisJe0hDSV9DQU5DRUxfUEVS SU9ESUNfSU5RX1JFUSwJaGFuZGxlX2NhbmNlbF9wZXJpb2RpY19pbnFfcmVxLAlIQ0lfQ0FOQ0VM X1BFUklPRElDX0lOUV9SRVFfU0lHTkFUVVJFfSwKKwl7SENJX1JPTEVfU1dJVENIX1JFUSwJCWhh bmRsZV9yb2xlX3N3aXRjaF9yZXEsCQlIQ0lfUk9MRV9TV0lUQ0hfUkVRX1NJR05BVFVSRX0sCisJ e0hDSV9JTlFfUkVRLAkJCWhhbmRsZV9pbnFfcmVxLAkJCUhDSV9JTlFfUkVRX1NJR05BVFVSRX0s CisJe05VTEwsCQkJCU5VTEwsCQkJCU5VTEx9Cit9OwogCiBzdGF0aWMgdm9pZCByZXBseV9oYW5k bGVyX2Z1bmN0aW9uKERCdXNQZW5kaW5nQ2FsbCAqY2FsbCwgdm9pZCAqdXNlcl9kYXRhKQogewpA QCAtMTcwLDggKzM4Miw5IEBACiAKIAliYXN3YXAoJnRtcCwgbG9jYWwpOyBsb2NhbF9hZGRyID0g YmF0b3N0cigmdG1wKTsKIAotCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgiL29y Zy9ibHVlei9EZXZBZ2VudCIsCi0JCQkJIm9yZy5ibHVlei5EZXZBZ2VudCIsICJJbnF1aXJ5U3Rh cnQiKTsKKwltZXNzYWdlID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoQkxVRVpfREJVU19IQ0lf UEFUSCwKKwkJCQkJICBCTFVFWl9EQlVTX0hDSV9JTlRFUkZBQ0UsIAorCQkJCQkgIEJMVUVaX0RC VVNfSENJX1NJR19JTlFfU1RBUlQpOwogCWlmIChtZXNzYWdlID09IE5VTEwpIHsKIAkJc3lzbG9n KExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyBpbnF1aXJ5IHN0YXJ0IG1lc3NhZ2UiKTsK IAkJZ290byBmYWlsZWQ7CkBAIC0yMDQsOCArNDE3LDkgQEAKIAogCWJhc3dhcCgmdG1wLCBsb2Nh bCk7IGxvY2FsX2FkZHIgPSBiYXRvc3RyKCZ0bXApOwogCi0JbWVzc2FnZSA9IGRidXNfbWVzc2Fn ZV9uZXdfc2lnbmFsKCIvb3JnL2JsdWV6L0RldkFnZW50IiwKLQkJCQkib3JnLmJsdWV6LkRldkFn ZW50IiwgIklucXVpcnlDb21wbGV0ZSIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3NhZ2VfbmV3X3Np Z25hbChCTFVFWl9EQlVTX0hDSV9QQVRILAorCQkJCUJMVUVaX0RCVVNfSENJX0lOVEVSRkFDRSwg CisJCQkJQkxVRVpfREJVU19IQ0lfU0lHX0lOUV9DT01QTEVURSk7CiAJaWYgKG1lc3NhZ2UgPT0g TlVMTCkgewogCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFsbG9jYXRlIEQtQlVTIGlucXVpcnkg Y29tcGxldGUgbWVzc2FnZSIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTI0MSw4ICs0NTUsOSBAQAog CWJhc3dhcCgmdG1wLCBsb2NhbCk7IGxvY2FsX2FkZHIgPSBiYXRvc3RyKCZ0bXApOwogCWJhc3dh cCgmdG1wLCBwZWVyKTsgcGVlcl9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAotCW1lc3NhZ2UgPSBk YnVzX21lc3NhZ2VfbmV3X3NpZ25hbCgiL29yZy9ibHVlei9EZXZBZ2VudCIsCi0JCQkJIm9yZy5i bHVlei5EZXZBZ2VudCIsICJJbnF1aXJ5UmVzdWx0Iik7CisJbWVzc2FnZSA9IGRidXNfbWVzc2Fn ZV9uZXdfc2lnbmFsKEJMVUVaX0RCVVNfSENJX1BBVEgsCisJCQkJQkxVRVpfREJVU19IQ0lfSU5U RVJGQUNFLCAKKwkJCQlCTFVFWl9EQlVTX0hDSV9TSUdfSU5RX1JFU1VMVCk7CiAJaWYgKG1lc3Nh Z2UgPT0gTlVMTCkgewogCQlzeXNsb2coTE9HX0VSUiwgIkNhbid0IGFsbG9jYXRlIEQtQlVTIGlu cXVpcnkgcmVzdWx0IG1lc3NhZ2UiKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0yODAsOCArNDk1LDkg QEAKIAliYXN3YXAoJnRtcCwgbG9jYWwpOyBsb2NhbF9hZGRyID0gYmF0b3N0cigmdG1wKTsKIAli YXN3YXAoJnRtcCwgcGVlcik7IHBlZXJfYWRkciA9IGJhdG9zdHIoJnRtcCk7CiAKLQltZXNzYWdl ID0gZGJ1c19tZXNzYWdlX25ld19zaWduYWwoIi9vcmcvYmx1ZXovRGV2QWdlbnQiLAotCQkJCSJv cmcuYmx1ZXouRGV2QWdlbnQiLCAiUmVtb3RlTmFtZSIpOworCW1lc3NhZ2UgPSBkYnVzX21lc3Nh Z2VfbmV3X3NpZ25hbChCTFVFWl9EQlVTX0hDSV9QQVRILAorCQkJCUJMVUVaX0RCVVNfSENJX0lO VEVSRkFDRSwKKwkJCQlCTFVFWl9EQlVTX0hDSV9TSUdfUkVNT1RFX05BTUUpOwogCWlmIChtZXNz YWdlID09IE5VTEwpIHsKIAkJc3lzbG9nKExPR19FUlIsICJDYW4ndCBhbGxvY2F0ZSBELUJVUyBy ZW1vdGUgbmFtZSBtZXNzYWdlIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMzg4LDYgKzYwNCw4IEBA CiB7CiAJREJ1c0Vycm9yIGVycm9yOwogCisJbnVtX2FkYXB0ZXJzID0gMDsKKwkKIAlkYnVzX2Vy cm9yX2luaXQoJmVycm9yKTsKIAogCWNvbm5lY3Rpb24gPSBkYnVzX2J1c19nZXQoREJVU19CVVNf U1lTVEVNLCAmZXJyb3IpOwpAQCAtMzk4LDggKzYxNiw3NzQgQEAKIAkJcmV0dXJuIEZBTFNFOwog CX0KIAorCWRidXNfYnVzX3JlcXVlc3RfbmFtZShjb25uZWN0aW9uLCBCTFVFWl9EQlVTX05BTUUs IAorCQkJICAgICAgREJVU19OQU1FX0ZMQUdfUFJPSElCSVRfUkVQTEFDRU1FTlQsIAorCQkJICAg ICAgJmVycm9yKTsKKwkKKwlpZiAoZGJ1c19lcnJvcl9pc19zZXQgKCZlcnJvcikpIHsKKwkJc3lz bG9nKExPR19FUlIsIkQtQnVzIEVycm9yOiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CisJCWRidXNf ZXJyb3JfZnJlZSAoJmVycm9yKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkKKwkvL1JlZ2lzdGVy aW5nIHRoZSBkZXZpY2UgcGF0aAorCWlmICghZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVj dF9wYXRoKGNvbm5lY3Rpb24sIEJMVUVaX0RCVVNfREVWU19QQVRILCAmb2JqX3Z0YWJsZSwgTlVM TCkpIHsKKwkJc3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHJlZ2lzdGVyICVzIG9iamVj dCIsIEJMVUVaX0RCVVNfREVWU19QQVRIKTsKKwkJcmV0dXJuIEZBTFNFOworCX0gZWxzZSB7CisJ CXN5c2xvZyhMT0dfSU5GTywicmVnaXN0ZXJpbmcgIC0gIHBhdGg6JXMiLCBCTFVFWl9EQlVTX0RF VlNfUEFUSCk7CQorCX0KKworCS8vUmVnaXN0ZXJpbmcgdGhlIG1hbmFnZXIgcGF0aAorCWlmICgh ZGJ1c19jb25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdF9wYXRoKGNvbm5lY3Rpb24sIEJMVUVaX0RC VVNfTUdSX1BBVEgsICZvYmpfdnRhYmxlLCBOVUxMKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJV UyBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgb2JqZWN0IiwgQkxVRVpfREJVU19NR1JfUEFUSCk7CisJ CXJldHVybiBGQUxTRTsKKwl9IGVsc2UgeworCQlzeXNsb2coTE9HX0lORk8sInJlZ2lzdGVyaW5n ICAtICBwYXRoOiVzIiwgQkxVRVpfREJVU19NR1JfUEFUSCk7CisJfQorCisKKwlpZiAoIWRidXNf Y29ubmVjdGlvbl9hZGRfZmlsdGVyIChjb25uZWN0aW9uLCBoY2lfc2lnbmFsX2ZpbHRlciwgTlVM TCwgTlVMTCkpIHsKKwkJc3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIGFkZCBmaWx0ZXIi KTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkKIAlkYnVzX2Nvbm5lY3Rpb25fc2V0X3dhdGNoX2Z1 bmN0aW9ucyhjb25uZWN0aW9uLAogCQlhZGRfd2F0Y2gsIHJlbW92ZV93YXRjaCwgd2F0Y2hfdG9n Z2xlZCwgTlVMTCwgTlVMTCk7CiAKIAlyZXR1cm4gVFJVRTsKIH0KKworLyoKKyAqIEBicmllZiBU aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlciBhbGwgc2VydmljZSBmb3Ig CisgKiBlYWNoIG5ldyBoY2kgZGV2aWNlCisgKiBEZXRhaWxlZCBkZXNjcmlwdGlvbjogV2hlbiBh IEhDSV9ERVZfVVAgZXZlbnQgaXMgcmVjZWl2ZWQgb3IgdGhlCisgKiBkYWVtb24gaXMgaW5pdGlh bGl6ZWQgdGhlIHNlcnZpY2UgcGF0aHMgbXVzdCBiZSByZWdpc3RlcmVkLiBlZzoKKyAqIHBhbiwg c2RwLCBoY2ksIHJmY29tbSBwYXRocy4KKyAqIEBwYXJhbSBpZCBkZXZpY2UgaWQKKyAqIEByZXR1 cm4gVFJVRS9GQUxTRQorICovIAorZ2Jvb2xlYW4gbWdyX2RidXNfcmVnX2RldmljZV9wYXRocyh1 aW50MTZfdCBpZCkKK3sKKwlwcm9maWxlX29ial9wYXRoX2RhdGFfdCAqcHRyID0gb2JqX3BhdGhf dGFibGU7CisJaW50OF90IHJldCA9IDA7CisJCisJaWYgKGNvbm5lY3Rpb24pIHsKKwkJZm9yICg7 cHRyLT5uYW1lOyBwdHIrKykgeworCQkJcmV0ID0gKHB0ci0+cmVnX2Z1bmMoY29ubmVjdGlvbiwg cHRyLT5kZnRfcmVnLCBpZCkpOworCQkJaWYgKHJldCA8IDApICB7CisJCQkJYnJlYWs7CisJCQl9 CisJCQkvKiB0aGUgZGVmYXVsdCBwYXRoIGlzIG5vdyByZWdpc3RlcmVkICovCisJCQlwdHItPmRm dF9yZWcgPSAxOworCQl9CisJCQorCQlpZiAoIXJldCkgeworCQkJbnVtX2FkYXB0ZXJzKys7CisJ CX0KKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKwor LyoKKyAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB1bnJlZ2lzdGVy IGFsbCBzZXJ2aWNlIGZvciAKKyAqIGEgZGV0YWNoZWQgaGNpIGRldmljZQorICogRGV0YWlsZWQg ZGVzY3JpcHRpb246IFdoZW4gYSBIQ0lfREVWX0RPV04gZXZlbnQgaXMgcmVjZWl2ZWQgdGhlIAor ICogc2VydmljZSBwYXRocyBtdXN0IGJlIHVucmVnaXN0ZXJlZC4gZWc6IHBhbiwgc2RwLCBoY2ks IHJmY29tbSBwYXRocy4KKyAqIEBwYXJhbSBpZCBkZXZpY2UgaWQKKyAqIEByZXR1cm4gVFJVRS9G QUxTRQorICovCitnYm9vbGVhbiBtZ3JfZGJ1c191bnJlZ19kZXZpY2VfcGF0aHModWludDE2X3Qg aWQpCit7CisJcHJvZmlsZV9vYmpfcGF0aF9kYXRhX3QgKnB0ciA9IG9ial9wYXRoX3RhYmxlOwor CXVpbnQ4X3QgZGZ0X3VucmVnID0gMDsKKwkKKwlpZiAoY29ubmVjdGlvbikgeworCQlmb3IgKDtw dHItPm5hbWU7IHB0cisrKSB7CisJCQlkZnRfdW5yZWcgPSAobnVtX2FkYXB0ZXJzID4gMSk/IDA6 MTsKKwkJCW51bV9hZGFwdGVycy0tOworCQkJcHRyLT51bnJlZ19mdW5jKGNvbm5lY3Rpb24sIGRm dF91bnJlZywgaWQpOworCQkJCisJCQlpZiAoZGZ0X3VucmVnICkgeworCQkJCXB0ci0+ZGZ0X3Jl ZyA9IDA7CisJCQl9CisJCX0KKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIEZB TFNFOworCX0KK30KKworLyoKKyAqIEBicmllZiBIQ0kgb2JqZWN0IHBhdGggcmVnaXN0ZXIgZnVu Y3Rpb24KKyAqIERldGFpbGVkIGRlc2NyaXB0aW9uOiBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Ig cmVnaXN0ZXIgYSBuZXcgaGNpIAorICogRC1CdXMgcGF0aC4gSWYgbmVjZXNzYXJ5IHRoZSBkZWZh dWx0IHBhdGggbXVzdCBiZSByZWdpc3RlcmVkIHRvby4KKyAqIEBwYXJhbSBjb25uIEQtQnVzIGNv bm5lY3Rpb24KKyAqIEBwYXJhbSBkZnRfcmVnIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IHBhdGgoMCBv ciAhMCkKKyAqIEBwYXJhbSBpZCBoY2kgZGV2aWNlIGlkZW50aWZpY2F0aW9uCisgKiBAcmV0dXJu ICgwLVN1Y2Nlc3MvLTEgZmFpbHVyZSkKKyAqLworaW50OF90IGhjaV9kYnVzX3JlZ19vYmpfcGF0 aChEQnVzQ29ubmVjdGlvbiAqY29ubiwgdWludDhfdCBkZnRfcmVnLCB1aW50MTZfdCBpZCkKK3sK KwljaGFyIHBhdGhbTUFYX1BBVEhfTEVOR1RIXTsKKwlpbnQ4X3QgcmV0ID0gMDsKKwl1aW50MTZf dCAqcHRyX2lkID0gIChpbnQxNl90KiltYWxsb2MoMSk7CisJdWludDE2X3QgKnB0cl9pZF9kZnQ7 CisJCisJLyogcmVnaXN0ZXIgdGhlIGRlZmF1bHQgcGF0aCovCisJaWYgKCFkZnRfcmVnKSB7CisJ IAlwdHJfaWRfZGZ0ID0gIChpbnQxNl90KiltYWxsb2MoMSk7CisJCSpwdHJfaWRfZGZ0ID0gREZU X0RFVklDRV9JRDsKKwkJc3ByaW50ZihwYXRoLCAiJXMvJXMvJXMiLCBCTFVFWl9EQlVTX01HUl9Q QVRILCBIQ0lfREZUX0RFVklDRV9OQU1FLCBCTFVFWl9EQlVTX0hDSSk7CisJCisJCXN5c2xvZyhM T0dfSU5GTywgInJlZ2lzdGVyaW5nIGRmdCBwYXRoOiVzIC0gaWQ6JWQiLCBwYXRoLCBERlRfREVW SUNFX0lEKTsKKwkKKwkJaWYgKCFkYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfZmFsbGJhY2soY29u biwgcGF0aCwgJm9ial92dGFibGUsIHB0cl9pZF9kZnQpKSB7CisJCQlzeXNsb2coTE9HX0VSUiwi REJVUyBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0aCk7CisJCQkvL2lnbm9yZSwg dGhlIGRlZmF1bHQgcGF0aCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkCisJCX0KKwkKKwl9CisJCisJ KnB0cl9pZCA9IGlkOworCQorCS8qIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IHBhdGgqLworCXNwcmlu dGYocGF0aCwgIiVzLyVzJWQvJXMiLCBCTFVFWl9EQlVTX01HUl9QQVRILCBIQ0lfREVWSUNFX05B TUUsIGlkICxCTFVFWl9EQlVTX0hDSSk7CisJCisJc3lzbG9nKExPR19JTkZPLCAicmVnaXN0ZXJp bmcgIC0gIHBhdGg6JXMgLSBpZDolZCIscGF0aCwgaWQpOworCQorCWlmICghZGJ1c19jb25uZWN0 aW9uX3JlZ2lzdGVyX2ZhbGxiYWNrKGNvbm4sIHBhdGgsICZvYmpfdnRhYmxlLCBwdHJfaWQpKSB7 CisJCXN5c2xvZyhMT0dfRVJSLCJEQlVTIGZhaWxlZCB0byByZWdpc3RlciAlcyBvYmplY3QiLCBw YXRoKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBA YnJpZWYgSENJIG9iamVjdCBwYXRoIHVucmVnaXN0ZXIgZnVuY3Rpb24KKyAqIERldGFpbGVkIGRl c2NyaXB0aW9uOiBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdW5yZWdpc3RlciBIQ0kgRC1CdXMK KyAqIHBhdGggZm9yIGEgZGV0YWNoZWQgaGNpIGRldmljZS4gSWYgbmVjZXNzYXJ5IHRoZSBkZWZh dWx0IHBhdGggbXVzdCAKKyAqIGJlIHJlZ2lzdGVyZWQgdG9vLgorICogQHBhcmFtIGNvbm4gRC1C dXMgY29ubmVjdGlvbgorICogQHBhcmFtIHVucmVnX2RmdCByZWdpc3RlciB0aGUgZGVmYXVsdCBw YXRoKDAgb3IgITApCisgKiBAcGFyYW0gaWQgaGNpIGRldmljZSBpZGVudGlmaWNhdGlvbgorICog QHJldHVybiAoMC1TdWNjZXNzLy0xIGZhaWx1cmUpCisgKi8KK2ludDhfdCBoY2lfZGJ1c191bnJl Z19vYmpfcGF0aChEQnVzQ29ubmVjdGlvbiAqY29ubiwgdWludDhfdCB1bnJlZ19kZnQsIHVpbnQx Nl90IGlkKSAKK3sKKwlpbnQ4X3QgcmV0ID0gMDsKKwljaGFyIHBhdGhbTUFYX1BBVEhfTEVOR1RI XTsKKwljaGFyIGRmdF9wYXRoW01BWF9QQVRIX0xFTkdUSF07CisJdWludDE2X3QgKmRhdGE7CisJ CisJaWYgKHVucmVnX2RmdCkgeworCQlzcHJpbnRmKGRmdF9wYXRoLCAiJXMvJXMvJXMiLCBCTFVF Wl9EQlVTX01HUl9QQVRILCBIQ0lfREZUX0RFVklDRV9OQU1FLCBCTFVFWl9EQlVTX0hDSSk7CisJ CXN5c2xvZyhMT0dfSU5GTywgIiVzIC0gdW5yZWdpc3RlcmluZyBkZnQ6JXMiLCBfX1BSRVRUWV9G VU5DVElPTl9fLCBkZnRfcGF0aCk7CisJCWlmICghZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJf b2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIGRmdF9wYXRoKSkgeworCQkJc3lzbG9nKExPR19FUlIs IkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgZGZ0X3BhdGgpOworCQkJcmV0 ID0gLTE7CisJCX0gZWxzZSB7CisJCQlpZihkYnVzX2Nvbm5lY3Rpb25fZ2V0X29iamVjdF9wYXRo X2RhdGEoY29ubiwgZGZ0X3BhdGgsICh2b2lkKikmZGF0YSkpCisJCQl7CisJCQkJaWYoZGF0YSkK KwkJCQkJZnJlZShkYXRhKTsKKwkJCQlkYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCQkKKwl9CisJ CisJc3ByaW50ZihwYXRoLCAiJXMvJXMlZC8lcyIsIEJMVUVaX0RCVVNfTUdSX1BBVEgsIEhDSV9E RVZJQ0VfTkFNRSwgaWQsIEJMVUVaX0RCVVNfSENJKTsKKwlzeXNsb2coTE9HX0lORk8sICIlcyAt IHVucmVnaXN0ZXJpbmcgc3BlYzolcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHBhdGgpOworCWlm ICghZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBh dGgpKSB7CisJCXN5c2xvZyhMT0dfRVJSLCJEQlVTIGZhaWxlZCB0byB1bnJlZ2lzdGVyICVzIG9i amVjdCIsIHBhdGgpOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQlpZihkYnVzX2Nvbm5lY3Rp b25fZ2V0X29iamVjdF9wYXRoX2RhdGEoY29ubiwgcGF0aCwgKHZvaWQqKSZkYXRhKSkKKwkJewor CQkJaWYoZGF0YSkKKwkJCQlmcmVlKGRhdGEpOworCQkJZGF0YSA9IE5VTEw7CisJCX0KKwl9CisJ CisJcmV0dXJuIHJldDsKK30KKworCitjb25zdCBzZXJ2aWNlX3RhYmxlX3QgKmdldF9oY2lfdGFi bGUodm9pZCkgeworCXJldHVybiBoY2lfc2VydmljZXM7Cit9CisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAKKyAq ICBTZWN0aW9uIHJlc2VydmVkIHRvIEhDSSBNYW5haGVyIEQtQnVzIG1lc3NhZ2UgaGFuZGxlcnMK KyAqICAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KK3ZvaWQgaGNpZF9kYnVzX2V4aXQodm9pZCkKK3sKKwljaGFyIHBh dGhbTUFYX1BBVEhfTEVOR1RIXTsKKwljaGFyIGZzdF9wYXJlbnRbXSA9IEJMVUVaX0RCVVNfTUdS X1BBVEg7CisJY2hhciBzbmRfcGFyZW50W01BWF9QQVRIX0xFTkdUSF07CisJY2hhciAqKmZzdF9s ZXZlbCA9IE5VTEw7CisJY2hhciAqKnNuZF9sZXZlbCA9IE5VTEw7CisJY2hhciAqcHRyMTsKKwlj aGFyICpwdHIyOworCQorCWlmICghY29ubmVjdGlvbikKKwkJcmV0dXJuOworCS8qIHVucmVnaXN0 ZXIgYWxsIG9iamVjdHMgcGF0aHMgKi8KKwkKKwlpZiAoIWRidXNfY29ubmVjdGlvbl91bnJlZ2lz dGVyX29iamVjdF9wYXRoIChjb25uZWN0aW9uLCBCTFVFWl9EQlVTX0RFVlNfUEFUSCkpIHsKKwkJ c3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgQkxV RVpfREJVU19ERVZTX1BBVEgpOworCX0gZWxzZSB7CisJCXN5c2xvZyhMT0dfSU5GTywidW5yZWdp c3RlcmluZyAgLSAgcGF0aDolcyIsIEJMVUVaX0RCVVNfREVWU19QQVRIKTsKKwl9CisKKwlpZiAo IWRidXNfY29ubmVjdGlvbl91bnJlZ2lzdGVyX29iamVjdF9wYXRoIChjb25uZWN0aW9uLCBCTFVF Wl9EQlVTX01HUl9QQVRIKSkgeworCQlzeXNsb2coTE9HX0VSUiwiREJVUyBmYWlsZWQgdG8gdW5y ZWdpc3RlciAlcyBvYmplY3QiLCBCTFVFWl9EQlVTX01HUl9QQVRIKTsKKwl9IGVsc2UgeworCQlz eXNsb2coTE9HX0lORk8sInVucmVnaXN0ZXJpbmcgIC0gIHBhdGg6JXMiLCBCTFVFWl9EQlVTX01H Ul9QQVRIKTsKKwl9CisJCisJLy9nZXR0aW5nIHRoZSBmaXJzdCBsZXZlbAorCWRidXNfY29ubmVj dGlvbl9saXN0X3JlZ2lzdGVyZWQoY29ubmVjdGlvbiwgZnN0X3BhcmVudCwgJmZzdF9sZXZlbCk7 CisJCisJZm9yICggOypmc3RfbGV2ZWw7IGZzdF9sZXZlbCsrKSB7CisJCXB0cjEgPSAqZnN0X2xl dmVsOworCQlzcHJpbnRmKHNuZF9wYXJlbnQsICIlcy8lcyIsIGZzdF9wYXJlbnQsIHB0cjEpOwor CQkKKwkJLy9nZXR0aW5nIHRoZSBzZWNvbmQgbGV2ZWwKKwkJZGJ1c19jb25uZWN0aW9uX2xpc3Rf cmVnaXN0ZXJlZChjb25uZWN0aW9uLCBzbmRfcGFyZW50LCAmc25kX2xldmVsKTsKKwkJCisJCWlm ICghKCpzbmRfbGV2ZWwpKSB7CisJCQkvL25vIGNoaWxkCisJCQlzcHJpbnRmKHBhdGgsICIlcy8l cyIsIEJMVUVaX0RCVVNfTUdSX1BBVEgsIHB0cjEpOworCQkJCisJCQlzeXNsb2coTE9HX0lORk8s ICJ1bnJlZ2lzdGVyaW5nIHBhdGg6ICVzIiwgcGF0aCk7CisJCQkKKwkJCWlmICghZGJ1c19jb25u ZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBhdGgpKSB7CisJCQkJ c3lzbG9nKExPR19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0 aCk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQkKKwkJZm9yICggOypzbmRfbGV2ZWw7IHNu ZF9sZXZlbCsrKSB7CisJCQkvL3VucmVnaXN0ZXJpbmcgY2hpbGQgbGV2ZWwgcGF0aAorCQkJcHRy MiA9ICpzbmRfbGV2ZWw7CisJCQlzcHJpbnRmKHBhdGgsICIlcy8lcy8lcyIsIEJMVUVaX0RCVVNf TUdSX1BBVEgsIHB0cjEsIHB0cjIpOworCQkJCisJCQlzeXNsb2coTE9HX0lORk8sICJ1bnJlZ2lz dGVyaW5nIHBhdGg6ICVzIiwgcGF0aCk7CisJCQkKKwkJCWlmICghZGJ1c19jb25uZWN0aW9uX3Vu cmVnaXN0ZXJfb2JqZWN0X3BhdGggKGNvbm5lY3Rpb24sIHBhdGgpKSB7CisJCQkJc3lzbG9nKExP R19FUlIsIkRCVVMgZmFpbGVkIHRvIHVucmVnaXN0ZXIgJXMgb2JqZWN0IiwgcGF0aCk7CisJCQl9 CisJCX0KKwkJaWYgKCpzbmRfbGV2ZWwpIAorCQkJZGJ1c19mcmVlX3N0cmluZ19hcnJheShzbmRf bGV2ZWwpOworCX0KKwkKKwlpZiAoKmZzdF9sZXZlbCkgCisJCWRidXNfZnJlZV9zdHJpbmdfYXJy YXkoZnN0X2xldmVsKTsKK30KKworc3RhdGljIERCdXNIYW5kbGVyUmVzdWx0IGhjaV9zaWduYWxf ZmlsdGVyIChEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0 YSkKK3sKKwlEQnVzSGFuZGxlclJlc3VsdCByZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX05PVF9Z RVRfSEFORExFRDsKKwljb25zdCBjaGFyICppZmFjZTsKKwljb25zdCBjaGFyICptZXRob2Q7CisK KwlpZiAoIW1zZyB8fCAhY29ubikKKwkJcmV0dXJuIERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lF VF9IQU5ETEVEOworCQorCWlmIChkYnVzX21lc3NhZ2VfZ2V0X3R5cGUgKG1zZykgIT0gREJVU19N RVNTQUdFX1RZUEVfU0lHTkFMKQorCQlyZXR1cm4gREJVU19IQU5ETEVSX1JFU1VMVF9OT1RfWUVU X0hBTkRMRUQ7CisKKwlpZmFjZSA9IGRidXNfbWVzc2FnZV9nZXRfaW50ZXJmYWNlKG1zZyk7CisJ bWV0aG9kID0gZGJ1c19tZXNzYWdlX2dldF9tZW1iZXIobXNnKTsKKwkKKwlpZiAoc3RyY21wKGlm YWNlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCkgPT0gMCkgeworCQlpZiAoc3RyY21wKG1ldGhvZCwg IkRpc2Nvbm5lY3RlZCIpID09IDApeworCQkJcmV0ID0gREJVU19IQU5ETEVSX1JFU1VMVF9IQU5E TEVEOworCQl9CisJfSBlbHNlCWlmIChzdHJjbXAoaWZhY2UsIERCVVNfSU5URVJGQUNFX0RCVVMp ID09IDApIHsKKwkJCWlmIChzdHJjbXAobWV0aG9kLCAiTmFtZU93bmVyQ2hhbmdlZCIpID09IDAp IHsKKwkJCQlyZXQgPSBEQlVTX0hBTkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCQl9CisJCQlpZiAo c3RyY21wKG1ldGhvZCwgIk5hbWVBY3F1aXJlZCIpID09IDApIHsKKwkJCQlyZXQgPSBEQlVTX0hB TkRMRVJfUkVTVUxUX0hBTkRMRUQ7CisJCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisvKgorICog VGhlcmUgaXMgb25seSBvbmUgbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciBhbGwgb2JqZWN0 IHBhdGhzCisgKgorICovCisKK3N0YXRpYyBEQnVzSGFuZGxlclJlc3VsdCBtc2dfZnVuYyhEQnVz Q29ubmVjdGlvbiAqY29ubiwgCisJCQkJICAgICAgREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0 YSkKK3sKKwljb25zdCBzZXJ2aWNlX3RhYmxlX3QgKnB0cl9oYW5kbGVycyA9IE5VTEw7CisJREJ1 c01lc3NhZ2UgKnJlcGx5ID0gTlVMTDsKKwl1aW50MTZfdCB0eXBlOworCWNvbnN0IGNoYXIgKmlm YWNlOworCWNvbnN0IGNoYXIgKm1ldGhvZDsKKwljb25zdCBjaGFyICpzaWduYXR1cmU7CisJY29u c3QgY2hhciAqcGF0aDsKKwljb25zdCBjaGFyICpyZWxfcGF0aDsKKwljb25zdCBjaGFyICp0bXBf aWZhY2UgPSBOVUxMOworCXVpbnQzMl90IHJlc3VsdCA9IEJMVUVaX0VEQlVTX1VOS05PV05fTUVU SE9EOworCURCdXNIYW5kbGVyUmVzdWx0IHJldCA9IERCVVNfSEFORExFUl9SRVNVTFRfTk9UX1lF VF9IQU5ETEVEOzsKKwl1aW50OF90IGZvdW5kID0gMDsKKwkKKwkKKwlwYXRoID0gZGJ1c19tZXNz YWdlX2dldF9wYXRoKG1zZyk7CisJdHlwZSA9IGRidXNfbWVzc2FnZV9nZXRfdHlwZShtc2cpOwor CWlmYWNlID0gZGJ1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobXNnKTsKKwltZXRob2QgPSBkYnVz X21lc3NhZ2VfZ2V0X21lbWJlciAobXNnKTsKKwlzaWduYXR1cmUgPSBkYnVzX21lc3NhZ2VfZ2V0 X3NpZ25hdHVyZShtc2cpOworCQorCXN5c2xvZyAoTE9HX0lORk8sICIlcyAtIHBhdGg6JXMiLCBf X1BSRVRUWV9GVU5DVElPTl9fLCBwYXRoKTsKKwkKKwkvL2dldCB0aGUgdXNlciBkYXRhCisJaWYg KHN0cmNtcChwYXRoLCBCTFVFWl9EQlVTX0RFVlNfUEFUSCkgPT0gMCkgeworCQlwdHJfaGFuZGxl cnMgPSBkZXZfc2VydmljZXM7CisJCXRtcF9pZmFjZSA9IEJMVUVaX0RCVVNfREVWU19JTlRFUkZB Q0U7CisJCWZvdW5kID0gMTsKKwl9IGVsc2UgaWYgKHN0cmNtcChwYXRoLCBCTFVFWl9EQlVTX01H Ul9QQVRIKSA9PSAwKSB7CisJCXB0cl9oYW5kbGVycyA9IG1ncl9zZXJ2aWNlczsKKwkJdG1wX2lm YWNlID0gQkxVRVpfREJVU19NR1JfSU5URVJGQUNFOworCQlmb3VuZCA9IDE7CisJfSBlbHNlIHsK KwkJLyogb25seSBtc2cgdG8gcmVnaXN0ZXJlZCBvYmplY3QgcGF0aHMgd2lsbCBiZSByZWNlaXZl ZCAqLworCQkKKwkJcHJvZmlsZV9vYmpfcGF0aF9kYXRhX3QgKm1ncl9jaGlsZCA9IG9ial9wYXRo X3RhYmxlOworCQlyZWxfcGF0aCA9IHN0cnJjaHIocGF0aCwnLycpOworCQlyZWxfcGF0aCsrOwor CQkKKwkJaWYgKHJlbF9wYXRoKSB7CisJCQlmb3IgKDttZ3JfY2hpbGQtPm5hbWU7IG1ncl9jaGls ZCsrKSB7CisJCQkJaWYoc3RyY21wKG1ncl9jaGlsZC0+bmFtZSwgcmVsX3BhdGgpID09IDApIHsK KwkJCQkJcHRyX2hhbmRsZXJzID0gbWdyX2NoaWxkLT5nZXRfc3ZjX3RhYmxlKCk7CisJCQkJCWZv dW5kID0gMTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCXRtcF9pZmFjZSA9IEJMVUVaX0RCVVNfTUdS X0lOVEVSRkFDRTsKKwkJfQorCX0KKwkKKwlpZiAoZm91bmQgJiYgKHR5cGUgPT0gREJVU19NRVNT QUdFX1RZUEVfTUVUSE9EX0NBTEwpICYmIAorCQkoc3RyY21wKGlmYWNlLCB0bXBfaWZhY2UpID09 IDApICYmIChtZXRob2QgIT0gTlVMTCkpIHsKKwkJCisJCWZvciAoOyBwdHJfaGFuZGxlcnMtPm5h bWU7IHB0cl9oYW5kbGVycysrKSB7CisJCQlpZiAoc3RyY21wKG1ldGhvZCwgcHRyX2hhbmRsZXJz LT5uYW1lKSA9PSAwKSB7CisJCQkJLyogcmVzZXR0aW5nIHVua25vd24gbWV0aG9kLiBJdCdzIHBv c3NpYmxlIGhhbmRsZSBtZXRob2Qgb3ZlcmxvYWQgKi8KKwkJCQlyZXN1bHQgPSBCTFVFWl9FREJV U19XUk9OR19TSUdOQVRVUkU7IAorCQkJCWlmIChzdHJjbXAocHRyX2hhbmRsZXJzLT5zaWduYXR1 cmUsIHNpZ25hdHVyZSkgPT0gMCkgeworCQkJCQlpZihwdHJfaGFuZGxlcnMtPmhhbmRsZXJfZnVu YykgeworCQkJCQkJcmVwbHkgPSAocHRyX2hhbmRsZXJzLT5oYW5kbGVyX2Z1bmMpKG1zZywgZGF0 YSk7CisJCQkJCQlyZXN1bHQgPSAwOyAvKiByZXNldHRpbmcgd3Jvbmcgc2lnbmF0dXJlKi8KKwkJ CQkJfSBlbHNlIHsKKwkJCQkJCXN5c2xvZyhMT0dfSU5GTywgIlNlcnZpY2Ugbm90IGltcGxlbWVu dGVkIik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfSAKKwkJCQkKKwkJCX0KKwkJfQorCQkK KwkJaWYgKHJlc3VsdCkgeworCQkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBy ZXN1bHQpOworCQkJc3lzbG9nKExPR19JTkZPLCAiJXMgLSAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9O X18sIAorCQkJCShyZXN1bHQgPT0gQkxVRVpfRURCVVNfVU5LTk9XTl9NRVRIT0Q/IlVua25vd24g TWV0aG9kIjogIldyb25nIHNpZ25hdHVyZSIpKTsKKwkJfQorCQkKKwkJLyogc2VuZCBhbiBlcnJv ciBvciB0aGUgc3VjY2VzcyByZXBseSovCisJCWlmIChyZXBseSkgeworCQkJaWYgKCFkYnVzX2Nv bm5lY3Rpb25fc2VuZCAoY29ubiwgcmVwbHksIE5VTEwpKSB7IAorCQkJCXN5c2xvZyhMT0dfRVJS LCAiJXMgbGluZTolZCBDYW4ndCBzZW5kIHJlcGx5IG1lc3NhZ2UhIiwgXAorCQkJCQlfX1BSRVRU WV9GVU5DVElPTl9fLCBfX0xJTkVfXykgOworCQkJfQorCQkJZGJ1c19tZXNzYWdlX3VucmVmIChy ZXBseSk7CisJCX0KKwkJCisJCXJldCA9IERCVVNfSEFORExFUl9SRVNVTFRfSEFORExFRDsKKwl9 IGVsc2UgeworCQlzeXNsb2coTE9HX0lORk8sICJSZXF1ZXN0IG5vdCBoYW5kbGVkIik7CisJfQor CXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfcGVyaW9kaWNf aW5xX3JlcShEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCXdyaXRlX2lucXVpcnlf bW9kZV9jcCBpbnFfbW9kZTsKKwlwZXJpb2RpY19pbnF1aXJ5X2NwIGlucV9wYXJhbTsKKwlEQnVz TWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCWNvbnN0IHVp bnQxNl90ICp1ZGF0YSA9ICh1aW50MTZfdCAqKWRhdGE7CisJdWludDhfdCBsZW5ndGg7CisJdWlu dDhfdCBtYXhfcGVyaW9kOworCXVpbnQ4X3QgbWluX3BlcmlvZDsKKwlpbnQzMl90IHNvY2sgPSAt MTsKKwlpbnQzMl90IGRldl9pZCA9IC0xOworCisJaWYgKCp1ZGF0YSA9PSBERlRfREVWSUNFX0lE KSB7CisJCWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShOVUxMKSkgPCAwKSB7CisJCQlzeXNs b2coTE9HX0VSUiwgIkJsdWV0b290aCBkZXZpY2UgaXMgbm90IGF2YWlsYWJsZSIpOworCQkJcmVw bHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FU1lTVEVNX0VOT0RFVik7CisJ CQlnb3RvIGNsZWFudXA7CisJCQorCQl9CisJfSBlbHNlIHsKKwkJZGV2X2lkID0gKnVkYXRhOwor CX0KKwkKKwlzeXNsb2coTE9HX0lORk8sICIlcyAtIGxpbmU6JWQgLSBkZXZfaWQ6JWQiLCBfX1BS RVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXywgZGV2X2lkKTsKKwkJCQorCWlmICgoc29jayA9IGhj aV9vcGVuX2RldihkZXZfaWQpKSA8IDApIHsKKwkJc3lzbG9nKExPR19FUlIsICJIQ0kgZGV2aWNl IG9wZW4gZmFpbGVkIik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxV RVpfRVNZU1RFTV9FTk9ERVYpOworCQlnb3RvIGNsZWFudXA7CisJfQorCQorCWRidXNfbWVzc2Fn ZV9pdGVyX2luaXQobXNnLCAmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZp dGVyLCAmbGVuZ3RoKTsKKwlkYnVzX21lc3NhZ2VfaXRlcl9uZXh0KCZpdGVyKTsKKwlkYnVzX21l c3NhZ2VfaXRlcl9nZXRfYmFzaWMoJml0ZXIsICZtaW5fcGVyaW9kKTsKKwlkYnVzX21lc3NhZ2Vf aXRlcl9uZXh0KCZpdGVyKTsJCisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAm bWF4X3BlcmlvZCk7CisJCisJaWYgKChsZW5ndGggPj0gbWluX3BlcmlvZCkgfHwgKG1pbl9wZXJp b2QgPj0gbWF4X3BlcmlvZCkpIHsKKwkJICByZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyht c2csIEJMVUVaX0VEQlVTX1dST05HX1BBUkFNKTsKKwkJICBnb3RvIGNsZWFudXA7CisJfQorCisJ aW5xX3BhcmFtLm51bV9yc3AgPSAxMDA7CisJaW5xX3BhcmFtLmxlbmd0aCAgPSBsZW5ndGg7CisK KwlpbnFfcGFyYW0ubWF4X3BlcmlvZCA9IG1heF9wZXJpb2Q7CisJaW5xX3BhcmFtLm1pbl9wZXJp b2QgPSBtaW5fcGVyaW9kOworCisJLyogR2VuZXJhbC9VbmxpbWl0ZWQgSW5xdWlyeSBBY2Nlc3Mg Q29kZSAoR0lBQykgKi8KKwlpbnFfcGFyYW0ubGFwWzBdID0gMHgzMzsKKwlpbnFfcGFyYW0ubGFw WzFdID0gMHg4YjsKKwlpbnFfcGFyYW0ubGFwWzJdID0gMHg5ZTsKKworCWlucV9tb2RlLm1vZGUg PSAxOyAvL0lOUVVJUllfV0lUSF9SU1NJOworCQorCWlmIChoY2lfc2VuZF9jbWQoc29jaywgT0dG X0hPU1RfQ1RMLCBPQ0ZfV1JJVEVfSU5RVUlSWV9NT0RFLCAKKwkJV1JJVEVfSU5RVUlSWV9NT0RF X0NQX1NJWkUsICZpbnFfbW9kZSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3Qgc2V0 IGlucXVpcnkgbW9kZTolcy4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXBseSA9IGJsdWV6X25l d19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VTWVNURU1fT0ZGU0VUICsgZXJybm8pOworCQlnb3Rv IGNsZWFudXA7CisJfQorCQorCWlmIChoY2lfc2VuZF9jbWQoc29jaywgT0dGX0xJTktfQ1RMLCBP Q0ZfUEVSSU9ESUNfSU5RVUlSWSwgCisJCVBFUklPRElDX0lOUVVJUllfQ1BfU0laRSwgJmlucV9w YXJhbSkgPCAwKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ2FuJ3Qgc2VuZCBIQ0kgY29tbWFuZHM6 JXMuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2co bXNnLCBCTFVFWl9FU1lTVEVNX09GRlNFVCArIGVycm5vKTsKKwkJZ290byBjbGVhbnVwOworCX0g ZWxzZSB7CisJCisJCXVpbnQ4X3QgcmVzdWx0ID0gMDsKKwkJLyogcmV0dXJuIFRSVUUgdG8gaW5k aWNhdGUgdGhhdCBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCAqLworCQlyZXBseSA9IGRidXNfbWVz c2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2Fw cGVuZChyZXBseSwgJml0ZXIpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMoJml0 ZXIsIERCVVNfVFlQRV9CWVRFICwmcmVzdWx0KTsKKwl9CisJCitjbGVhbnVwOgorCisJaWYgKHNv Y2sgPiAwKQorCQljbG9zZShzb2NrKTsKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CisKK3N0YXRpYyBE QnVzTWVzc2FnZSogaGFuZGxlX2NhbmNlbF9wZXJpb2RpY19pbnFfcmVxKERCdXNNZXNzYWdlICpt c2csIHZvaWQgKmRhdGEpCit7CisJREJ1c01lc3NhZ2VJdGVyIGl0ZXI7CisJREJ1c01lc3NhZ2Ug KnJlcGx5ID0gTlVMTDsKKwljb25zdCB1aW50MTZfdCAqdWRhdGEgPSAodWludDE2X3QgKilkYXRh OworCWludDMyX3Qgc29jayA9IC0xOworCWludDMyX3QgZGV2X2lkID0gLTE7CisJCisJaWYgKCp1 ZGF0YSA9PSBERlRfREVWSUNFX0lEKSB7CisJCWlmICgoZGV2X2lkID0gaGNpX2dldF9yb3V0ZShO VUxMKSkgPCAwKSB7CisJCQlzeXNsb2coTE9HX0VSUiwgIkJsdWV0b290aCBkZXZpY2UgaXMgbm90 IGF2YWlsYWJsZSIpOworCQkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVF Wl9FU1lTVEVNX0VOT0RFVik7CisJCQlnb3RvIGNsZWFudXA7CisJCQorCQl9CisJfSBlbHNlIHsK KwkJZGV2X2lkID0gKnVkYXRhOworCX0KKwkKKwlzeXNsb2coTE9HX0lORk8sICIlcyAtIGxpbmU6 JWQgLSBkZXZfaWQ6JWQiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0xJTkVfXywgZGV2X2lkKTsK KwkKKwlpZiAoKHNvY2sgPSBoY2lfb3Blbl9kZXYoZGV2X2lkKSkgPCAwKSB7CisJCXN5c2xvZyhM T0dfRVJSLCAiSENJIGRldmljZSBvcGVuIGZhaWxlZCIpOworCQlyZXBseSA9IGJsdWV6X25ld19m YWlsdXJlX21zZyhtc2csIEJMVUVaX0VTWVNURU1fRU5PREVWKTsKKwkJZ290byBjbGVhbnVwOwor CX0KKwkKKwlpZiAoaGNpX3NlbmRfY21kKHNvY2ssIE9HRl9MSU5LX0NUTCwgT0NGX0VYSVRfUEVS SU9ESUNfSU5RVUlSWSwgMCAsIE5VTEwpIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIlNlbmQg aGNpIGNvbW1hbmQgZmFpbGVkLiIpOworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyht c2csIEJMVUVaX0VTWVNURU1fT0ZGU0VUICsgZXJybm8pOworCX0gZWxzZSAgeworCQl1aW50OF90 IHJlc3VsdCAgPSAwOworCQkvKiByZXR1cm4gVFJVRSB0byBpbmRpY2F0ZSB0aGF0IG9wZXJhdGlv biB3YXMgY29tcGxldGVkICovCisJCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0 dXJuKG1zZyk7CisJCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7 CisJCWRidXNfbWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmaXRlciwgREJVU19UWVBFX0JZVEUg LCZyZXN1bHQpOworCX0KKwkKK2NsZWFudXA6CisJaWYgKHNvY2sgPiAwKQorCQljbG9zZShzb2Nr KTsKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX2lu cV9yZXEoREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGFkZHJbMThdOwor CWNvbnN0IGNoYXIgYXJyYXlfc2lnW10gPSBIQ0lfSU5RX1JFUExZX1NJR05BVFVSRTsKKwlEQnVz TWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVzTWVzc2FnZUl0ZXIgYXJyYXlfaXRlcjsKKwlEQnVzTWVz c2FnZUl0ZXIgIHN0cnVjdF9pdGVyOworCURCdXNNZXNzYWdlICpyZXBseSA9IE5VTEw7CisJaW5x dWlyeV9pbmZvICppbmZvID0gTlVMTDsKKwljb25zdCB1aW50MTZfdCAqdWRhdGEgPSAodWludDE2 X3QgKilkYXRhOworCWNvbnN0IGNoYXIgKnBhZGRyID0gYWRkcjsKKwlpbnQzMl90IGRldl9pZCA9 IC0xOworCXVpbnQzMl90IGNsYXNzID0gMDsKKwl1aW50MTZfdCBjbG9ja19vZmZzZXQ7CisJdWlu dDE2X3QgZmxhZ3M7CisJaW50OF90IGxlbmd0aDsKKwlpbnQ4X3QgbnVtX3JzcDsKKwlpbnQ4X3Qg aTsKKworCXN5c2xvZyhMT0dfSU5GTywgIiVzIC0gbGluZTolZCIsIF9fUFJFVFRZX0ZVTkNUSU9O X18sIF9fTElORV9fKTsKKworCWlmICgqdWRhdGEgPT0gREZUX0RFVklDRV9JRCkgeworCQlpZiAo KGRldl9pZCA9IGhjaV9nZXRfcm91dGUoTlVMTCkpIDwgMCkgeworCQkJc3lzbG9nKExPR19FUlIs ICJCbHVldG9vdGggZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUiKTsKKwkJCXJlcGx5ID0gYmx1ZXpf bmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRVNZU1RFTV9FTk9ERVYpOworCQkJZ290byBjbGVh bnVwOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2lkID0gKGludDMyX3QpKnVkYXRhOworCX0KKwkK KwlzeXNsb2coTE9HX0lORk8sICIlcyAtIGxpbmU6JWQgLSBkZXZfaWQ6JWQiLCBfX1BSRVRUWV9G VU5DVElPTl9fLCBfX0xJTkVfXywgZGV2X2lkKTsKKwkKKwlkYnVzX21lc3NhZ2VfaXRlcl9pbml0 KG1zZywgJml0ZXIpOworCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJmxlbmd0 aCk7CisJZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRlcik7CisJZGJ1c19tZXNzYWdlX2l0ZXJf Z2V0X2Jhc2ljKCZpdGVyLCAmbnVtX3JzcCk7CisJZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmaXRl cik7CisJZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X2Jhc2ljKCZpdGVyLCAmZmxhZ3MpOworCQorCWlm ICgobGVuZ3RoIDw9IDApIHx8IChudW1fcnNwIDw9IDApKSB7CisJCXJlcGx5ID0gYmx1ZXpfbmV3 X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRURCVVNfV1JPTkdfUEFSQU0pOworCQlnb3RvIGNsZWFu dXA7CisJfQorCQorCW51bV9yc3AgPSBoY2lfaW5xdWlyeShkZXZfaWQsIGxlbmd0aCwgbnVtX3Jz cCwgTlVMTCwgJmluZm8sIGZsYWdzKTsKKwkKKwlpZiAobnVtX3JzcCA8IDApIHsKKwkJcmVwbHkg PSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBCTFVFWl9FU1lTVEVNX09GRlNFVCArIGVycm5v KTsKKwl9IGVsc2UgeworCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybiht c2cpOworCQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBseSwgJml0ZXIpOworCQlk YnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZLCBh cnJheV9zaWcsICZhcnJheV9pdGVyKTsKKwkJCisJICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt X3JzcDsgaSsrKSB7CisJCQliYTJzdHIoJihpbmZvK2kpLT5iZGFkZHIsIGFkZHIpOworCisJCQlj bG9ja19vZmZzZXQgPSBidG9ocygoaW5mbytpKS0+Y2xvY2tfb2Zmc2V0KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9ubHkgMyBieXRlcyBhcmUgdXNlZCAqLworCQkJbWVtY3B5KCZjbGFz cywgKGluZm8raSktPmRldl9jbGFzcywgMyk7CisJCQkKKwkJCWRidXNfbWVzc2FnZV9pdGVyX29w ZW5fY29udGFpbmVyKCZhcnJheV9pdGVyLCBEQlVTX1RZUEVfU1RSVUNULCBOVUxMLCAmc3RydWN0 X2l0ZXIpOworCQkJZGJ1c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZzdHJ1Y3RfaXRlciwg REJVU19UWVBFX1NUUklORyAsICZwYWRkcik7CisJCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRf YmFzaWMoJnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVfVUlOVDMyICwgJmNsYXNzKTsKKwkJCWRidXNf bWVzc2FnZV9pdGVyX2FwcGVuZF9iYXNpYygmc3RydWN0X2l0ZXIsIERCVVNfVFlQRV9VSU5UMTYg LCAmY2xvY2tfb2Zmc2V0KTsKKwkJCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigm YXJyYXlfaXRlciwgJnN0cnVjdF9pdGVyKTsKKwl9CisgICAgICAgIAlkYnVzX21lc3NhZ2VfaXRl cl9jbG9zZV9jb250YWluZXIoJml0ZXIsICZhcnJheV9pdGVyKTsKKyAgICAgICAgfQorCitjbGVh bnVwOgorCWlmKGluZm8pCisJCWJ0X2ZyZWUoaW5mbyk7CisJCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyBEQnVzTWVzc2FnZSogaGFuZGxlX3JvbGVfc3dpdGNoX3JlcShEQnVzTWVzc2FnZSAq bXNnLCB2b2lkICpkYXRhKQoreworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNzYWdl ICpyZXBseSA9IE5VTEw7CisJY2hhciAqc3RyX2JkYWRkciA9IE5VTEw7CisJY29uc3QgdWludDE2 X3QgKnVkYXRhID0gKHVpbnQxNl90ICopZGF0YTsKKwliZGFkZHJfdCBiZGFkZHI7CisJdWludDhf dCByb2xlOworCWludDMyX3QgZGV2X2lkID0gLTEsIHNvY2sgPSAtMTsKKwkKKwlkYnVzX21lc3Nh Z2VfaXRlcl9pbml0KG1zZywgJml0ZXIpOworCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygm aXRlciwgJnN0cl9iZGFkZHIpOworCWRidXNfbWVzc2FnZV9pdGVyX25leHQoJml0ZXIpOworCWRi dXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmaXRlciwgJnJvbGUpOworCQorCXN0cjJiYShzdHJf YmRhZGRyLCAmYmRhZGRyKTsKKwkKKwlkZXZfaWQgPSBoY2lfZm9yX2VhY2hfZGV2KEhDSV9VUCwg ZmluZF9jb25uLCAobG9uZykgJmJkYWRkcik7CisJCisJCisJaWYgKGRldl9pZCA8IDApIHsKKwkJ c3lzbG9nKExPR19FUlIsICJCbHVldG9vdGggZGV2aWNlIGZhaWxlZFxuIik7CisJCXJlcGx5ID0g Ymx1ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRVNZU1RFTV9FTk9ERVYpOworCQlnb3Rv IGNsZWFudXA7CisJfQorCQorCWlmICgqdWRhdGEgIT0gREZUX0RFVklDRV9JRCAmJiAqdWRhdGEg IT0gZGV2X2lkKSB7CisJCXN5c2xvZyhMT0dfRVJSLCAiQ29ubmVjdGlvbiBub3QgZm91bmRcbiIp OworCQlyZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VEQlVTX0NPTk5f Tk9UX0ZPVU5EKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXN5c2xvZyhMT0dfSU5GTywgIiVz IC0gbGluZTolZCAtIGRldl9pZDolZCIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fLCBk ZXZfaWQpOworCisJc29jayA9IGhjaV9vcGVuX2RldihkZXZfaWQpOworCQorCWlmIChzb2NrIDwg MCkgeworCQlzeXNsb2coTE9HX0VSUiwgIkhDSSBkZXZpY2Ugb3BlbiBmYWlsZWRcbiIpOworCQly ZXBseSA9IGJsdWV6X25ld19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VTWVNURU1fRU5PREVWKTsK KwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChoY2lfc3dpdGNoX3JvbGUoc29jaywgJmJkYWRk ciwgcm9sZSwgMTAwMDApIDwgMCkgeworCQlzeXNsb2coTE9HX0VSUiwgIlN3aXRjaCByb2xlIHJl cXVlc3QgZmFpbGVkXG4iKTsKKwkJcmVwbHkgPSBibHVlel9uZXdfZmFpbHVyZV9tc2cobXNnLCBC TFVFWl9FU1lTVEVNX09GRlNFVCArIGVycm5vKTsKKwl9IGVsc2UgeworCQl1aW50OF90IHJlc3Vs dCA9IDA7CisJCS8qIHJldHVybiBUUlVFIHRvIGluZGljYXRlIHRoYXQgb3BlcmF0aW9uIHdhcyBj b21wbGV0ZWQgKi8KKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNn KTsKKwkJZGJ1c19tZXNzYWdlX2l0ZXJfaW5pdF9hcHBlbmQocmVwbHksICZpdGVyKTsKKwkJZGJ1 c19tZXNzYWdlX2l0ZXJfYXBwZW5kX2Jhc2ljKCZpdGVyLCBEQlVTX1RZUEVfQllURSwgJnJlc3Vs dCk7CisJfQorY2xlYW51cDoKKwkKKwlyZXR1cm4gcmVwbHk7Cit9CisKKworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KiAgCisgKiAgU2VjdGlvbiByZXNlcnZlZCB0byBEZXZpY2UgRC1CdXMgbWVzc2FnZSBoYW5kbGVy cworICogIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworc3RhdGljIERCdXNNZXNzYWdlKiBoYW5kbGVfZ2V0X2Rldmlj ZXNfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpCit7CisJREJ1c01lc3NhZ2VJdGVy IGl0ZXI7CisJREJ1c01lc3NhZ2VJdGVyIGFycmF5X2l0ZXI7CisJREJ1c01lc3NhZ2VJdGVyICBz dHJ1Y3RfaXRlcjsKKwlEQnVzTWVzc2FnZSAqcmVwbHkgPSBOVUxMOworCQorCXN0cnVjdCBoY2lf ZGV2X2xpc3RfcmVxICpkbCA9IE5VTEw7CisJc3RydWN0IGhjaV9kZXZfcmVxICpkciAgICAgID0g TlVMTDsKKwlzdHJ1Y3QgaGNpX2Rldl9pbmZvIGRpOworCWludDE2X3QgaTsKKwlpbnQzMl90IHNv Y2sgPSAtMTsKKwkKKwljaGFyIGFuYW1lW0JMVUVUT09USF9ERVZJQ0VfTkFNRV9MRU5dOworCWNo YXIgYWFkZHJbQkxVRVRPT1RIX0RFVklDRV9BRERSX0xFTl07CisJY2hhciAqcGFkZHIgPSBhYWRk cjsKKwljaGFyICpwbmFtZSA9IGFuYW1lOworCWNvbnN0IGNoYXIgYXJyYXlfc2lnW10gPSBIQ0lf REVWSUNFX1NUUlVDVF9TSUdOQVRVUkU7CisJCisJc3lzbG9nKExPR19JTkZPLCAiJXMgLSBsaW5l OiVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18pOworCQorICAgICAgICAvKiBDcmVh dGUgYW5kIGJpbmQgSENJIHNvY2tldCAqLworICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZf QkxVRVRPT1RILCBTT0NLX1JBVywgQlRQUk9UT19IQ0kpKSA8IDApIHsKKyAgICAgICAgICAgICAg ICBzeXNsb2coTE9HX0VSUiwgIkNhbid0IG9wZW4gSENJIHNvY2tldDogJXMgKCVkKSIsCisgICAg ICAgICAgICAgICAgCXN0cmVycm9yKGVycm5vKSwgZXJybm8pOworCQlyZXBseSA9IGJsdWV6X25l d19mYWlsdXJlX21zZyhtc2csIEJMVUVaX0VTWVNURU1fT0ZGU0VUICsgZXJybm8pOworCQlnb3Rv IGNsZWFudXA7CisgICAgICAgIH0KKworCisJZGwgPSBtYWxsb2MoSENJX01BWF9ERVYgKiBzaXpl b2YoKmRyKSArIHNpemVvZigqZGwpKTsKKwkKKwlpZiAoIWRsKSB7CisJCXN5c2xvZyhMT0dfRVJS LCAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5Iik7CisJCXJlcGx5ID0gYmx1ZXpfbmV3X2ZhaWx1cmVf bXNnKG1zZywgQkxVRVpfRURCVVNfTk9fTUVNKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWRs LT5kZXZfbnVtID0gSENJX01BWF9ERVY7CisJZHIgPSBkbC0+ZGV2X3JlcTsKKworCWlmIChpb2N0 bChzb2NrLCBIQ0lHRVRERVZMSVNULCAodm9pZCAqKSBkbCkgPCAwKSB7CisJCXJlcGx5ID0gYmx1 ZXpfbmV3X2ZhaWx1cmVfbXNnKG1zZywgQkxVRVpfRVNZU1RFTV9PRkZTRVQgKyBlcnJubyk7CisJ CWdvdG8gY2xlYW51cDsKKwl9CisKKwkKKwkvKiBhY3RpdmUgYmx1ZXRvb3RoIGFkYXB0ZXIgZm91 bmQgKi8KKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCWRi dXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7CisJZGJ1c19tZXNzYWdl X2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERCVVNfVFlQRV9BUlJBWSwgYXJyYXlfc2lnLCAm YXJyYXlfaXRlcik7CisJZHIgPSBkbC0+ZGV2X3JlcTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgZGwt PmRldl9udW07IGkrKywgZHIrKykgeworCQlpZiAoaGNpX3Rlc3RfYml0KEhDSV9VUCwgJmRyLT5k ZXZfb3B0KSkgeworCQkJbWVtc2V0KCZkaSwgMCAsIHNpemVvZihzdHJ1Y3QgaGNpX2Rldl9pbmZv KSk7CisJCQlkaS5kZXZfaWQgPSBkci0+ZGV2X2lkOworCQkJCQorCQkJaWYgKCFpb2N0bChzb2Nr LCBIQ0lHRVRERVZJTkZPLCAodm9pZCAqKSAmZGkpKSB7CisJCQkJc3RyY3B5KGFuYW1lLCBkaS5u YW1lKTsKKwkJCQliYTJzdHIoJmRpLmJkYWRkciwgYWFkZHIpOworCQkJCWRidXNfbWVzc2FnZV9p dGVyX29wZW5fY29udGFpbmVyKCZhcnJheV9pdGVyLCBEQlVTX1RZUEVfU1RSVUNULCBOVUxMLAor CQkJCQkJJnN0cnVjdF9pdGVyKTsKKwkJCQlkYnVzX21lc3NhZ2VfaXRlcl9hcHBlbmRfYmFzaWMo JnN0cnVjdF9pdGVyLCBEQlVTX1RZUEVfU1RSSU5HICwmcG5hbWUpOworCQkJCWRidXNfbWVzc2Fn ZV9pdGVyX2FwcGVuZF9iYXNpYygmc3RydWN0X2l0ZXIsIERCVVNfVFlQRV9TVFJJTkcgLCZwYWRk cik7CisJCQkJc3lzbG9nKExPR19JTkZPLCAiJXMgLSAoJXMsICVzKSIsIF9fUFJFVFRZX0ZVTkNU SU9OX18sIHBuYW1lLCBwYWRkcik7CisJCQkJCisJCQkJZGJ1c19tZXNzYWdlX2l0ZXJfY2xvc2Vf Y29udGFpbmVyKCZhcnJheV9pdGVyLCAmc3RydWN0X2l0ZXIpOworCQkJfQorCQl9CisJfQorCWRi dXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmaXRlciwgJmFycmF5X2l0ZXIpOworCitj bGVhbnVwOgorCWlmIChkbCkKKwkJZnJlZShkbCk7CisJCisJaWYgKHNvY2sgPiAwKQorCQljbG9z ZSAoc29jayk7CisJCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UqIGhh bmRsZV9ub3RfaW1wbGVtZW50ZWRfcmVxKERCdXNNZXNzYWdlICptc2csIHZvaWQgKmRhdGEpIHsK Kwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKmlmYWNlOworCWNvbnN0IGNoYXIgKm1l dGhvZDsKKwkKKwlwYXRoID0gZGJ1c19tZXNzYWdlX2dldF9wYXRoKG1zZyk7CisJaWZhY2UgPSBk YnVzX21lc3NhZ2VfZ2V0X2ludGVyZmFjZShtc2cpOworCW1ldGhvZCA9IGRidXNfbWVzc2FnZV9n ZXRfbWVtYmVyKG1zZyk7CisJCisJc3lzbG9nKExPR19JTkZPLCAiTm90IEltcGxlbWVudGVkIC0g cGF0aDolcywgaWZhY2U6JXMgbWV0aG9kOiVzIiwgcGF0aCwgaWZhY2UsIG1ldGhvZCk7CisJCisJ cmV0dXJuIE5VTEw7CisKK30KLS0tIGJsdWV6LXV0aWxzLWN2cy5vcmlnL2hjaWQvbWFpbi5jCTIw MDUtMDctMDUgMTg6MTU6NDQuMDAwMDAwMDAwIC0wMzAwCisrKyBibHVlei11dGlscy1jdnMtaGNp ZC9oY2lkL21haW4uYwkyMDA1LTEwLTAzIDEwOjU4OjI4LjAwMDAwMDAwMCAtMDMwMApAQCAtMzc1 LDYgKzM3NSw5IEBACiAKIAkJaWYgKGhjaWQuc2VjdXJpdHkgJiYgaGNpX3Rlc3RfYml0KEhDSV9V UCwgJmRyLT5kZXZfb3B0KSkKIAkJCXN0YXJ0X3NlY3VyaXR5X21hbmFnZXIoZHItPmRldl9pZCk7 CisjaWZkZWYgRU5BQkxFX0RCVVMKKwkJCW1ncl9kYnVzX3JlZ19kZXZpY2VfcGF0aHMoZHItPmRl dl9pZCk7CisjZW5kaWYKIAl9CiAKIAlmcmVlKGRsKTsKQEAgLTQzOCwxMiArNDQxLDE4IEBACiAJ CQljb25maWd1cmVfZGV2aWNlKHNkLT5kZXZfaWQpOwogCQlpZiAoaGNpZC5zZWN1cml0eSkKIAkJ CXN0YXJ0X3NlY3VyaXR5X21hbmFnZXIoc2QtPmRldl9pZCk7CisjaWZkZWYgRU5BQkxFX0RCVVMK KwkJbWdyX2RidXNfcmVnX2RldmljZV9wYXRocyhzZC0+ZGV2X2lkKTsKKyNlbmRpZgogCQlicmVh azsKIAogCWNhc2UgSENJX0RFVl9ET1dOOgogCQlzeXNsb2coTE9HX0lORk8sICJIQ0kgZGV2ICVk IGRvd24iLCBzZC0+ZGV2X2lkKTsKIAkJaWYgKGhjaWQuc2VjdXJpdHkpCiAJCQlzdG9wX3NlY3Vy aXR5X21hbmFnZXIoc2QtPmRldl9pZCk7CisjaWZkZWYgRU5BQkxFX0RCVVMKKwkJbWdyX2RidXNf dW5yZWdfZGV2aWNlX3BhdGhzKHNkLT5kZXZfaWQpOworI2VuZGlmCiAJCWJyZWFrOwogCX0KIH0K QEAgLTYyNyw3ICs2MzYsOSBAQAogCWdfbWFpbl9ydW4oZXZlbnRfbG9vcCk7CiAKIAlmcmVlX2Rl dmljZV9vcHRzKCk7Ci0KKyNpZmRlZiBFTkFCTEVfREJVUwkKKwloY2lkX2RidXNfZXhpdCgpOwor I2VuZGlmCiAJc3lzbG9nKExPR19JTkZPLCAiRXhpdC4iKTsKIAlyZXR1cm4gMDsKIH0K ------=_Part_1256_1197224.1128348496225-- ------------------------------------------------------- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl _______________________________________________ Bluez-devel mailing list Bluez-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-devel