From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <664d43d60901160522o4d21bb03w45f1868c4b860245@mail.gmail.com> Date: Fri, 16 Jan 2009 15:22:42 +0200 From: event To: "Marcel Holtmann" Subject: Re: [PATCH] Gateway profile Cc: linux-bluetooth@vger.kernel.org In-Reply-To: <1229482133.10889.5.camel@violet> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_27480_22579537.1232112162869" References: <664d43d60812151512y6631ebf2j9665e1473193077d@mail.gmail.com> <664d43d60812151514m6c225403i528453fcb6f08430@mail.gmail.com> <1229482133.10889.5.camel@violet> List-ID: ------=_Part_27480_22579537.1232112162869 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Wed, Dec 17, 2008 at 04:48, Marcel Holtmann wrote: > Hi Leonid, > >> I've implemented gateway profile. I've tested basic things, like >> place/cancel/answer call. Others are in development. Some could not be >> tested as my carrier doesn't provide corresponding services (like >> 3-way call, etc.) so any help welcome. > > thanks for the works, but can you please base the patch against the > latest GIT tree. It is kinda hard to review things that might already > have been implemented like sco_listen. > > audio/audio-api.txt | 94 +++++ > audio/device.h | 7 > audio/gateway.c | 938 +++++++++++++++++++++++++++++++++++++++++++++++++++ > audio/gateway.h | 11 > audio/manager.c | 124 ++++-- > common/glib-helper.c | 85 +++- > common/glib-helper.h | 1 > 7 files changed, 1205 insertions(+), 55 deletions(-) > > So any changes to glib-helper.[ch] have to be in a separate patch and > need to be discussed independent from the gateway implementation. > > Any audio-api.txt stuff should also go separately since that has to be > discussed. Also we can't send PCM data over D-Bus. It just doesn't work > like that. We do have the internal IPC for that and plugins for ALSA, > GStreamer and PulseAudio that should be used. > > However the most important part is that you follow the coding style and > that is the kernel coding style. You make it really hard for us to > review the code like this and it can't be applied. I really want you to > add support for the gateway role to BlueZ, but the overall code in the > project needs to follow the same rules. > > So please fix these issues first and then we do a deep review of it. > > Regards > > Marcel > > > Hello Marcel, Here is reworked and improved patches as you suggested with IPC support. But I have some doubts and questions: 1. to distinguish between headset and gateway I've added one more alsa config option "role" which could be master (for gateway and probably a2dp source) or slave (which is default and works for headset and a2dp sink). I don't really like this approach so if you have any other idea it would be great. 2. my cell phone closes SCO connection when it doesn't need one, probably others act like this as well. SCO close results in bluetooth_hsp_write returning an error. What would be the best way to overcome this? 3. I've noticed that ipc interface duplicate dbus interface to some extent. Why can't pcm_bluetooth work over dbus directly? 4. Aren't there any legal issues with implementing bluez? As I noticed in the spec that all the rights belong to Bluetooth SIG so it does look neither "free as in free beer" nor "free as in freedom" :) Vale, Leonid Movshovich ------=_Part_27480_22579537.1232112162869 Content-Type: application/octet-stream; name=audio_api.txt.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq0vau1i0 Content-Disposition: attachment; filename=audio_api.txt.patch ZGlmZiAtLWdpdCBhL2RvYy9hdWRpby1hcGkudHh0IGIvZG9jL2F1ZGlvLWFwaS50eHQKaW5kZXgg YTczYmEyMC4uZjZlMzVhOSAxMDA2NDQKLS0tIGEvZG9jL2F1ZGlvLWFwaS50eHQKKysrIGIvZG9j L2F1ZGlvLWFwaS50eHQKQEAgLTE5NSwzICsxOTUsMTEyIEBAIHByb3BlcnRpZXMJYm9vbGVhbiBD b25uZWN0ZWQgW3JlYWRvbmx5XQogCiAJCQlJbmRpY2F0ZXMgaWYgYSBzdHJlYW0gaXMgYWN0aXZl IHRvIGEgQTJEUCBzaW5rIG9uCiAJCQl0aGUgcmVtb3RlIGRldmljZS4KKworCitBdWRpb1Npbmsg aGllcmFyY2h5Cis9PT09PT09PT09PT09PT09PT09CisKK1NlcnZpY2UJCW9yZy5ibHVlegorSW50 ZXJmYWNlCW9yZy5ibHVlei5HYXRld2F5CitPYmplY3QgcGF0aAlbdmFyaWFibGUgcHJlZml4XS97 aGNpMCxoY2kxLC4uLn0vZGV2X1hYX1hYX1hYX1hYX1hYX1hYCisKK1RoaXMgaW50ZXJmYWNlIGlz IGF2YWlsYWJsZSBmb3IgcmVtb3RlIGRldmljZXMgd2hpY2ggY2FuIGZ1bmN0aW9uIGluIHRoZSBB dWRpbworR2F0ZXdheSByb2xlIG9mIHRoZSBIRlAgcHJvZmlsZXMuCisKK01ldGhvZHMJCXZvaWQg Q29ubmVjdCgpCisKKwkJICAgICBDb25uZWN0IHRvIHRoZSBBRyBzZXJ2aWNlIG9uIHRoZSByZW1v dGUgZGV2aWNlLgorCisJCXZvaWQgRGlzY29ubmVjdCgpCisJCWJvb2xlYW4gSXNDb25uZWN0ZWQo KQorCisJCXZvaWQgQW5zd2VyQ2FsbCgpCisJCQorCQkgICAgICBJdCBoYXMgdG8gY2FsbGVkIG9u bHkgYWZ0ZXIgUmluZyBzaWduYWwgcmVjZWl2ZWQuCisgICAgCisgICAgCQl2b2lkIENhbmNlbEN1 cnJlbnRDYWxsKCkKKworCQkgICAgICBDYW5jZWwgY2FsbCB3aGljaCBpcyBydW5uaW5nIG5vdy4g VGhpcyBvbmUgZG9lcyBub3RoaW5nIHdpdGggYW55IDMtd2F5CisJCSAgICAgIHNpdHVhdGlvbiBp bmNsLiBSYUguIEp1c3QgcGxhaW4gb2xkIFBESC4KKyAgICAgICAgIAorCSAJdm9pZCBDYWxsKHN0 cmluZyBudW1iZXIpCisKKwkJICAgICAgRGlhbCBhIG51bWJlciAnbnVtYmVyJy4gTm8gbnVtYmVy IHByb2Nlc3NpbmcgaXMgZG9uZSB0aHVzIGlmIEFHIHdvdWxkIAorCQkgICAgICByZWplY3QgdG8g ZGlhbCBpdCBkb24ndCBibGFtZSBtZSA6KQorICAgIAorICAgIAkJc3RyaW5nIEdldE9wZXJhdG9y TmFtZSgpCisgICAgCisgICAgCQl2b2lkIFZvaWNlUmVjb2duaXRpb25BY3RpdmF0ZSgpCisJCSAg ICAgIGluIGRldmVsb3BtZW50CisJCXZvaWQgVm9pY2VSZWNvZ25pdGlvbkRlYWN0aXZhdGUoKQor CQkgICAgICBpbiBkZXZlbG9wbWVudAorCisJCXN0cmluZyBHZXROdW1iZXJGb3JMYXN0Vm9pY2VU YWcoKQorCisJCSAgICAgIEFzayBBRyB0byBwcm92aWRlIGEgcGhvbmUgbnVtYmVyLiBJdCBsb29r cyBsaWtlIEFHIHNoZWxsIGluIHR1cm4gCisJCSAgICAgIGFzayB1c2VyIHRvIGNob29zZSBvbmUu IElkZWEgYmVoaW5kIHRoaXMgaXMgVlIgb24gdGhlIEhGIHNpZGUuCisKKyAgICAJCXZvaWQgU2Vu ZERUTUYoc3RyaW5nIGRpZ2l0cykKKworCQkgICAgICBXaWxsIHNlbmQgZWFjaCBkaWdpdCBpbiB0 aGUgJ2RpZ2l0cycgc2VxdWVudGlhbGx5LiBXb3VsZCBzZW5kIAorCQkgICAgICBub3RoaW5nIGlm IHRoZXJlIGlzIG5vbi1kdG1mIGRpZ2l0LgorCisJCXZvaWQgU2VuZE1pY3JvcGhvbmVHYWluKHVp bnQ4IGdhaW4pCisJCXZvaWQgU2VuZFNwZWFrZXJHYWluKHVpbnQ4IGdhaW4pCisKKwkJICAgICAg RmVlbCB0aGVtIHVzZWxlc3MgYnV0IHJlYWxseSBlYXN5IHRvIGltcGxlbWVudCA6KQorICAgIAor ICAgIAkJc3RyaW5nW10gR2V0U3Vic2NyaWJlck51bWJlcnMoKQorCisJCSAgICAgIEdldCBhbGwg dGhlIG51bWJlcnMgb2YgQUcKKworCitTaWduYWxzCisJCXZvaWQgQ29ubmVjdGVkKHVpbnQzMiBh Z19mZWF0dXJlcykgCisKKwkJICAgICAgQ29ubmVjdGlvbiBzdWNjZXNzZnVsbHkgZXN0ZWJsaXNo ZWQuICdhZ19mZWF0dXJlcycgYXJlCisJCSAgICAgIE9SZWQgZmVhdHVyZXM6CisJCSAgICAgICAg ICAgICAgICAgICAgMHgwMDEgVGhyZWUtd2F5IGNhbGxpbmcKKwkJCQkgICAgMHgwMDIgRWNobyBj YW5jZWxsaW5nIGFuZC9vciBub2ljZSByZWR1Y3Rpb24gZnVuY3Rpb24KKwkJCQkgICAgMHgwMDQg Vm9pY2UgcmVjb2duaXRpb24gZnVuY3Rpb24KKwkJCQkgICAgMHgwMDggSW4tYmFuZCByaW5nIHRv bmUgY2FwYWJpbGl0eQorICAgICAgICAgICAgICAJCQkgICAgMHgwMTAgQXR0YWNoIGEgbnVtYmVy IHRvIGEgdm9pY2UgdGFnCisgICAgICAgICAgICAgIAkJCSAgICAweDAyMCBBYmlsaXR5IHRvIHJl amVjdCBhIGNhbGwKKyAgICAgICAgICAgICAgCQkJICAgIDB4MDQwIEVuaGFuY2VkIGNhbGwgc3Rh dHVzCisgICAgICAgICAgICAgIAkJCSAgICAweDA4MCBFbmhhbmNlZCBjYWxsIGNvbnRyb2wKKyAg ICAgICAgICAgICAgCQkJICAgIDB4MTAwIEV4dGVuZGVkIEVycm9yIFJlc3VsdCBDb2QKKworICAg IAkJdm9pZCBEaXNjb25uZWN0ZWQoKQorCisJCXZvaWQgUmluZyhzdHJpbmcgbnVtYmVyKQorCisJ CSAgICAgIFNvbWVvbmUncyBjYWxsaW5nIGZyb20gJ251bWJlcicuIAorICAgICAgICAgCSAgICAg IENhbGxlciBudW1iZXIgaXMgcHJvdmlkZWQgYXMgcmVjZWl2ZWQgZnJvbSBBRy4KKworCQl2b2lk IFN0YXR1c1VwZGF0ZShzdHJpbmcgaW5kaWNhdG9yX25hbWUsIHVpbnQzMiBpbmRpY2F0b3JfdmFs dWUpCisKKwkJICAgICAgSW5kaWNhdG9yICdpbmRpY2F0b3JfbmFtZScgY2hhbmdlZCBpdHMgdmFs dWUgdG8gJ2luZGljYXRvcl92YWx1ZScuIAorCQkgICAgICBTeXN0ZW0gKGNhbGwsIGNhbGxzZXR1 cCwgZXRjLikgc3RhdHVzZXMgYXJlIG5vdCBzaWduYWxsZWQuCisKKwkJdm9pZCBDYWxsQ2FuY2Vs bGVkKCkKKwkJCisJCSAgICAgIENhbGwgZmFpbGVkIHRvIHNldCB1cC4gSXQgbWVhbnMgdGhhdCB3 ZSB0cmllZCB0byBjYWxsIHNvbWVvbmUgCisJCSAgICAgIG9yIHNvbWVvbmUgdHJpZWQgdG8gY2Fs bCB1cyBidXQgY2FsbCB3YXMgbm90IGFjY2VwdGVkLgorCisJCXZvaWQgQ2FsbFN0YXJ0KCkKKwor CQkgICAgICBDYWxsIHNldCB1cCBzdWNjZXNzZnVsbHkuCisKKwkJdm9pZCBDYWxsRW5kKCkKKwor CQkgICAgICBDYWxsIHdhcyBzdGFydGVkIGFuZCBub3cgZW5kZWQuIEluIGNvbnRyYXN0IHdpdGgg Q2FsbENhbmNlbGxlZCAKKwkJICAgICAgd2hlcmUgY2FsbCBkaWRuJ3Qgc3RhcnRlZAorCisJCXZv aWQgVm9pY2VSZWNvZ25pdGlvbkFjdGl2ZSgpCisJCXZvaWQgVm9pY2VSZWNvZ25pdGlvbkluYWN0 aXZlKCkKKwkJICAgICAgaW4gZGV2ZWxvcG1lbnQKKworCQl2b2lkIE1pY3JvcGhvbmVHYWluKHVp bnQ4IGdhaW4pIAorCQl2b2lkIFNwZWFrZXJHYWluKHVpbnQ4IGdhaW4pCisJCSAgICAgIEFHIHNl bnQgdXMgbmV3IGdhaW4uCisK ------=_Part_27480_22579537.1232112162869 Content-Type: application/octet-stream; name=gateway_profile.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq0vb7vk1 Content-Disposition: attachment; filename=gateway_profile.patch ZGlmZiAtLWdpdCBhL2F1ZGlvL2RldmljZS5jIGIvYXVkaW8vZGV2aWNlLmMKaW5kZXggNmY1OTc0 Ni4uMThjYzFkZSAxMDA2NDQKLS0tIGEvYXVkaW8vZGV2aWNlLmMKKysrIGIvYXVkaW8vZGV2aWNl LmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJhdmR0cC5oIgogI2luY2x1ZGUgImNvbnRy b2wuaCIKICNpbmNsdWRlICJoZWFkc2V0LmgiCisjaW5jbHVkZSAiZ2F0ZXdheS5oIgogI2luY2x1 ZGUgInNpbmsuaCIKIAogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWUoc3RydWN0IGF1ZGlvX2Rldmlj ZSAqZGV2KQpAQCAtMTAyLDYgKzEwMyw5IEBAIGdib29sZWFuIGF1ZGlvX2RldmljZV9pc19jb25u ZWN0ZWQoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAogCWVsc2UgaWYgKCFzdHJjbXAoaW50ZXJm YWNlLCBBVURJT19IRUFEU0VUX0lOVEVSRkFDRSkgJiYgZGV2LT5oZWFkc2V0ICYmCiAJCQloZWFk c2V0X2lzX2FjdGl2ZShkZXYpKQogCQlyZXR1cm4gVFJVRTsKKwllbHNlIGlmICghc3RyY21wKGlu dGVyZmFjZSwgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UpICYmIGRldi0+Z2F0ZXdheSAmJgorCQkJ Z2F0ZXdheV9pc19jb25uZWN0ZWQoZGV2KSkKKwkJcmV0dXJuIFRSVUU7CiAJZWxzZSBpZiAoIXN0 cmNtcChpbnRlcmZhY2UsIEFVRElPX0NPTlRST0xfSU5URVJGQUNFKSAmJiBkZXYtPmhlYWRzZXQg JiYKIAkJCWNvbnRyb2xfaXNfYWN0aXZlKGRldikpCiAJCXJldHVybiBUUlVFOwpkaWZmIC0tZ2l0 IGEvYXVkaW8vZGV2aWNlLmggYi9hdWRpby9kZXZpY2UuaAppbmRleCAyZjYyNmE1Li40ZGQyYjI2 IDEwMDY0NAotLS0gYS9hdWRpby9kZXZpY2UuaAorKysgYi9hdWRpby9kZXZpY2UuaApAQCAtMjIs NiArMjIsMTEgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfX0RFVklDRV9IX18KKyNkZWZpbmUgX19E RVZJQ0VfSF9fCisKKyNpbmNsdWRlIDxibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisKICNkZWZpbmUg R0VORVJJQ19BVURJT19VVUlECSIwMDAwMTIwMy0wMDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0RkIi CiAKICNkZWZpbmUgSFNQX0hTX1VVSUQJCSIwMDAwMTEwOC0wMDAwLTEwMDAtODAwMC0wMDgwNUY5 QjM0RkIiCkBAIC03MywzICs3OCw1IEBAIHZvaWQgYXVkaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKIAogZ2Jvb2xlYW4gYXVkaW9fZGV2aWNlX2lzX2Nv bm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCiAJCQkJCQljb25zdCBjaGFyICppbnRl cmZhY2UpOworI2VuZGlmIC8qX19ERVZJQ0VfSF9fKi8KKwpkaWZmIC0tZ2l0IGEvYXVkaW8vZ2F0 ZXdheS5jIGIvYXVkaW8vZ2F0ZXdheS5jCmluZGV4IGVkZjM4ZGUuLmQxNTg2MWIgMTAwNjQ0Ci0t LSBhL2F1ZGlvL2dhdGV3YXkuYworKysgYi9hdWRpby9nYXRld2F5LmMKQEAgLTQsNiArNCw3IEBA CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBOb2tpYSBDb3Jwb3JhdGlvbgogICog IENvcHlyaWdodCAoQykgMjAwNC0yMDA5ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFu bi5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgIExlb25pZCBNb3ZzaG92aWNoIDxl dmVudC5yaWdhQGdtYWlsLm9yZz4KICAqCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yNyw4ICsy OCwxMTUwIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpbmNsdWRl IDxmY250bC5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxkYnVzL2RidXMuaD4KKyNp bmNsdWRlIDxnZGJ1cy5oPgorCisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2lu Y2x1ZGUgPGJsdWV0b290aC9oY2kuaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvaGNpX2xpYi5oPgor I2luY2x1ZGUgPGJsdWV0b290aC9zY28uaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvcmZjb21tLmg+ CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL3NkcC5oPgorI2luY2x1ZGUgPGJsdWV0b290aC9zZHBfbGli Lmg+CiAKICNpbmNsdWRlICJnYXRld2F5LmgiCisjaW5jbHVkZSAiZXJyb3IuaCIKKyNpbmNsdWRl ICJnbGliLWhlbHBlci5oIgorI2luY2x1ZGUgImxvZ2dpbmcuaCIKKyNpbmNsdWRlICIuLi9zcmMv ZXJyb3IuaCIKKworI2RlZmluZSBSRkNPTU1fQlVGX1NJWkUgMjU2CisjZGVmaW5lIEFHX0lORElD QVRPUl9ERVNDUl9TSVpFIDIwCS8qIG5vdC1tb3JlLXRoZW4tMTYgZGVmaW5lZCBieSBHU00gKyAx IGZvciBOVUxMICsgcGFkZGluZyAqLworI2RlZmluZSBBR19DQUxMRVJfTlVNX1NJWkUgNjQJLyog c2l6ZSBvZiBudW1iZXIgKyB0eXBlICovCisKKy8qIGNvbW1hbmRzICovCisjZGVmaW5lIEFHX0ZF QVRVUkVTICJBVCtCUlNGPTI2XHIiCS8vID0gMHg3RiA9IEFsbCBmZWF0dXJlcyBzdXBwb3J0ZWQK KyNkZWZpbmUgQUdfSU5ESUNBVE9SU19TVVBQICJBVCtDSU5EPT9cciIKKyNkZWZpbmUgQUdfSU5E SUNBVE9SU19WQUwgIkFUK0NJTkQ/XHIiCisjZGVmaW5lIEFHX0lORElDQVRPUlNfRU5BQkxFICJB VCtDTUVSPTMsMCwwLDFcciIKKyNkZWZpbmUgQUdfSE9MRF9NUFRZX1NVUFAgIkFUK0NITEQ9P1xy IgorI2RlZmluZSBBR19DQUxMRVJfSURFTlRfRU5BQkxFICJBVCtDTElQPTFcciIKKyNkZWZpbmUg QUdfQ0FSUklFUl9GT1JNQVQgIkFUK0NPUFM9MywwXHIiCisjZGVmaW5lIEFHX0VYVEVOREVEX1JF U1VMVF9DT0RFICJBVCtDTUVFPTFcciIKKworI2RlZmluZSBBR19GRUFUVVJFXzNXQVkgMHgxCisj ZGVmaW5lIEFHX0ZFQVRVUkVfRVhURU5ERURfUkVTX0NPREUgMHgxMDAKKy8qIEhvbGQgYW5kIG11 bHRpcGFyeSBBRyBmZWF0dXJlcy4gQ29tbWVudHMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIGhhbmRz LWZyZWUgc3BlYyBmb3IgcmVmZXJlbmNlICovCisjZGVmaW5lIEFHX0NITERfMCAweDAxCQkvKiBS ZWxlYXNlcyBhbGwgaGVsZCBjYWxscyBvciBzZXRzIFVzZXIgRGV0ZXJtaW5lZCBVc2VyIEJ1c3kg KFVEVUIpIGZvciBhIHdhaXRpbmcgY2FsbCAqLworI2RlZmluZSBBR19DSExEXzEgMHgwMgkJLyog UmVsZWFzZXMgYWxsIGFjdGl2ZSBjYWxscyAoaWYgYW55IGV4aXN0KSBhbmQgYWNjZXB0cyB0aGUg b3RoZXIgKGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLworI2RlZmluZSBBR19DSExEXzF4IDB4MDQJ CS8qIFJlbGVhc2VzIHNwZWNpZmllZCBhY3RpdmUgY2FsbCBvbmx5IDx4PiAqLworI2RlZmluZSBB R19DSExEXzIgMHgwOAkJLyogUGxhY2VzIGFsbCBhY3RpdmUgY2FsbHMgKGlmIGFueSBleGlzdCkg b24gaG9sZCBhbmQgYWNjZXB0cyB0aGUgb3RoZXIgKGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLwor I2RlZmluZSBBR19DSExEXzJ4IDB4MTAJCS8qIFJlcXVlc3QgcHJpdmF0ZSBjb25zdWx0YXRpb24g bW9kZSB3aXRoIHNwZWNpZmllZCBjYWxsIDx4PiAoUGxhY2UgYWxsIGNhbGxzIG9uIGhvbGQgRVhD RVBUIHRoZSBjYWxsIDx4PikgKi8KKyNkZWZpbmUgQUdfQ0hMRF8zIDB4MjAJCS8qIEFkZHMgYSBo ZWxkIGNhbGwgdG8gdGhlIGNvbnZlcnNhdGlvbiAqLworI2RlZmluZSBBR19DSExEXzQgMHg0MAkJ LyogQ29ubmVjdHMgdGhlIHR3byBjYWxscyBhbmQgZGlzY29ubmVjdHMgdGhlIHN1YnNjcmliZXIg ZnJvbSBib3RoIGNhbGxzIChFeHBsaWNpdCBDYWxsIFRyYW5zZmVyKS4gCisJCQkJICAgU3VwcG9y dCBmb3IgdGhpcyB2YWx1ZSBhbmQgaXRzIGFzc29jaWF0ZWQgZnVuY3Rpb25hbGl0eSBpcyBvcHRp b25hbCBmb3IgdGhlIEhGLiAqLworI2RlZmluZSBPS19SRVNQT05TRSAiXHJcbk9LXHJcbiIKKyNk ZWZpbmUgRVJST1JfUkVTUE9OU0UgIlxyXG5FUlJPUlxyXG4iCisKKworc3RydWN0IGluZGljYXRv ciB7CisJZ2NoYXIgZGVzY3JbQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkVdOworCWdpbnQgdmFsdWU7 Cit9OworCitzdHJ1Y3QgZ2F0ZXdheSB7CisJR0lPQ2hhbm5lbCogcmZjb21tOworCWd1aW50IHJm Y29tbV93YXRjaF9pZDsKKwlHSU9DaGFubmVsKiBzY287CisJR0lPQ2hhbm5lbCogc2NvX3NlcnZl cjsKKwlnYXRld2F5X3N0cmVhbV9jYl90IHNjb19zdGFydF9jYjsKKwl2b2lkKiBzY29fc3RhcnRf Y2JfZGF0YTsKKwlEQnVzTWVzc2FnZSogY29ubmVjdF9tZXNzYWdlOworCWd1aW50IGFnX2ZlYXR1 cmVzOworCWd1aW50IGhvbGRfbXVsdGlwYXJ0eV9mZWF0dXJlczsKKwlHU0xpc3QqIGluZGllczsK KwlnYm9vbGVhbiBpc19kaWFsaW5nOworfTsKKworCitzdGF0aWMgZ2Jvb2xlYW4gcmZjb21tX2Fn X2RhdGFfY2IoR0lPQ2hhbm5lbCAqIGNoYW4sIEdJT0NvbmRpdGlvbiBjb25kLAorCQkJCSAgc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKKworaW50IGdhdGV3YXlfY2xvc2Uoc3RydWN0IGdh dGV3YXkgKmd3KTsKKworc3RhdGljIHZvaWQgcmZjb21tX3N0YXJ0X3dhdGNoKHN0cnVjdCBhdWRp b19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CisJ Z3ctPnJmY29tbV93YXRjaF9pZCA9CisJICAgIGdfaW9fYWRkX3dhdGNoKGd3LT5yZmNvbW0sCisJ CQkgICBHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hVUCB8IEdfSU9fTlZBTCwKKwkJCSAgIChH SU9GdW5jKSByZmNvbW1fYWdfZGF0YV9jYiwgZGV2KTsKK30KKworc3RhdGljIHZvaWQgcmZjb21t X3N0b3Bfd2F0Y2goc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnYXRld2F5 ICpndyA9IGRldi0+Z2F0ZXdheTsKKwlnX3NvdXJjZV9yZW1vdmUoZ3ctPnJmY29tbV93YXRjaF9p ZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBpb19jaGFubmVsX3dyaXRlX2FsbChHSU9DaGFubmVs ICogaW8sIGdjaGFyICogZGF0YSwKKwkJCQkgICAgIGdzaXplIGNvdW50KQoreworCWdzaXplIHdy aXR0ZW4gPSAwOworCUdJT1N0YXR1cyBzdGF0dXM7CisJd2hpbGUgKDAgPCBjb3VudCkgeworCQlz dGF0dXMgPQorCQkgICAgZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzKGlvLCBkYXRhLCBjb3VudCwg JndyaXR0ZW4sCisJCQkJCSAgICAgTlVMTCk7CisJCWlmIChHX0lPX1NUQVRVU19OT1JNQUwgIT0g c3RhdHVzKSB7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwkJZGF0YSArPSB3cml0dGVuOworCQlj b3VudCAtPSB3cml0dGVuOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworLyogaXQncyB3b3J0aCB0 byBtZW50aW9uIHRoYXQgZGF0YSBhbmQgcmVzcG9uc2UgY291bGQgYmUgdGhlIHNhbWUgcG9pbnRl cnMgKi8KK3N0YXRpYyBnYm9vbGVhbiByZmNvbW1fc2VuZF9hbmRfcmVhZChzdHJ1Y3QgZ2F0ZXdh eSAqZ3csIGdjaGFyICogZGF0YSwKKwkJCQkgICAgIGdjaGFyICogcmVzcG9uc2UsIGdzaXplIGNv dW50KQoreworCUdJT0NoYW5uZWwgKnJmY29tbSA9IGd3LT5yZmNvbW07CisKKwlpZiAoIWlvX2No YW5uZWxfd3JpdGVfYWxsKHJmY29tbSwgZGF0YSwgY291bnQpKSB7CisJCXJldHVybiBGQUxTRTsK Kwl9CisKKwlnc2l6ZSByZWFkID0gMDsKKwlnYm9vbGVhbiBnb3Rfb2sgPSBGQUxTRTsKKwlnYm9v bGVhbiBnb3RfZXJyb3IgPSBGQUxTRTsKKwlnY2hhciAqcmVzcF9idWYgPSByZXNwb25zZTsKKwln c2l6ZSB0b3JlYWQgPSBSRkNPTU1fQlVGX1NJWkUgLSAxOworCUdJT1N0YXR1cyBzdGF0dXM7CisJ d2hpbGUgKCEoZ290X29rIHx8IGdvdF9lcnJvcikpIHsKKwkJc3RhdHVzID0KKwkJICAgIGdfaW9f Y2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgcmVzcF9idWYsIHRvcmVhZCwKKwkJCQkJICAgICZy ZWFkLCBOVUxMKTsKKwkJaWYgKEdfSU9fU1RBVFVTX05PUk1BTCA9PSBzdGF0dXMpIHsKKwkJCXJl c3BfYnVmW3JlYWRdID0gJ1wwJzsKKwkJfSBlbHNlIHsKKwkJCWRlYnVnKCJyZmNvbW1fc2VuZF9h bmRfcmVhZCgpOiAlbSIpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCWdvdF9vayA9IE5VTEwg IT0gc3Ryc3RyKHJlc3BfYnVmLCBPS19SRVNQT05TRSk7CisJCWdvdF9lcnJvciA9IE5VTEwgIT0g c3Ryc3RyKHJlc3BfYnVmLCBFUlJPUl9SRVNQT05TRSk7CisJCXJlc3BfYnVmICs9IHJlYWQ7CisJ CXRvcmVhZCAtPSByZWFkOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworLyogZ2V0IDxkZXNjcj4g ZnJvbSB0aGUgbmFtZXM6ICg8ZGVzY3I+LCAoPHZhbHVlcz4pKSwgKDxkZXNjcj4sICg8dmFsdWVz PikpIC4uLiAqLworR1NMaXN0ICpwYXJzZV9pbmRpY2F0b3JfbmFtZXMoZ2NoYXIgKiBuYW1lcywg R1NMaXN0ICogaW5kaWVzKQoreworCWdjaGFyICpjdXJyZW50ID0gbmFtZXMgLSAxOworCUdTTGlz dCAqcmVzdWx0ID0gaW5kaWVzOworCWdjaGFyICpuZXh0OworCXdoaWxlIChOVUxMICE9IGN1cnJl bnQpIHsKKwkJY3VycmVudCArPSAyOworCQluZXh0ID0gc3Ryc3RyKGN1cnJlbnQsICIsKCIpOwor CQlzdHJ1Y3QgaW5kaWNhdG9yICppbmQgPQorCQkgICAgKHN0cnVjdCBpbmRpY2F0b3IgKikgZ19z bGljZV9uZXcoc3RydWN0IGluZGljYXRvcik7CisJCXN0cm5jcHkoaW5kLT5kZXNjciwgY3VycmVu dCwgMjApOworCQlpbmQtPmRlc2NyWyhnaW50KSBuZXh0IC0gKGdpbnQpIGN1cnJlbnRdID0gJ1ww JzsKKwkJcmVzdWx0ID0gZ19zbGlzdF9hcHBlbmQocmVzdWx0LCAoZ3BvaW50ZXIpIGluZCk7CisJ CWN1cnJlbnQgPSBzdHJzdHIobmV4dCArIDEsICIsKCIpOworCX0KKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KK0dTTGlzdCAqcGFy c2VfaW5kaWNhdG9yX3ZhbHVlcyhnY2hhciAqIHZhbHVlcywgR1NMaXN0ICogaW5kaWVzKQorewor CWdpbnQgdmFsOworCWdjaGFyICpjdXJyZW50ID0gdmFsdWVzIC0gMTsKKwlHU0xpc3QgKnJ1bm5l ciA9IGluZGllczsKKwl3aGlsZSAoTlVMTCAhPSBjdXJyZW50KSB7CisJCWN1cnJlbnQgKz0gMTsK KwkJc3NjYW5mKGN1cnJlbnQsICIlZCIsICZ2YWwpOworCQljdXJyZW50ID0gc3RyY2hyKGN1cnJl bnQsICcsJyk7CisJCXN0cnVjdCBpbmRpY2F0b3IgKmluZCA9CisJCSAgICAoc3RydWN0IGluZGlj YXRvciAqKSBnX3NsaXN0X250aF9kYXRhKHJ1bm5lciwgMCk7CisJCWluZC0+dmFsdWUgPSB2YWw7 CisJCXJ1bm5lciA9IGdfc2xpc3RfbmV4dChydW5uZXIpOworCX0KKwlyZXR1cm4gaW5kaWVzOwor fQorCisvKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KK3N0YXRpYyBndWlu dCBnZXRfaG9sZF9tcHR5X2ZlYXR1cmVzKGdjaGFyICogZmVhdHVyZXMpCit7CisJZ3VpbnQgcmVz dWx0ID0gMDsKKwlpZiAoTlVMTCAhPSBzdHJzdHIoZmVhdHVyZXMsICIwIikpIHsKKwkJcmVzdWx0 IHw9IEFHX0NITERfMDsKKwl9CisJaWYgKE5VTEwgIT0gc3Ryc3RyKGZlYXR1cmVzLCAiMSIpKSB7 CisJCXJlc3VsdCB8PSBBR19DSExEXzE7CisJfQorCWlmIChOVUxMICE9IHN0cnN0cihmZWF0dXJl cywgIjF4IikpIHsKKwkJcmVzdWx0IHw9IEFHX0NITERfMXg7CisJfQorCWlmIChOVUxMICE9IHN0 cnN0cihmZWF0dXJlcywgIjIiKSkgeworCQlyZXN1bHQgfD0gQUdfQ0hMRF8yOworCX0KKwlpZiAo TlVMTCAhPSBzdHJzdHIoZmVhdHVyZXMsICIyeCIpKSB7CisJCXJlc3VsdCB8PSBBR19DSExEXzJ4 OworCX0KKwlpZiAoTlVMTCAhPSBzdHJzdHIoZmVhdHVyZXMsICIzIikpIHsKKwkJcmVzdWx0IHw9 IEFHX0NITERfMzsKKwl9CisJaWYgKE5VTEwgIT0gc3Ryc3RyKGZlYXR1cmVzLCAiNCIpKSB7CisJ CXJlc3VsdCB8PSBBR19DSExEXzQ7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn Ym9vbGVhbiBlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25uKHN0cnVjdCBnYXRld2F5ICpndykK K3sKKwlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKKwlnYm9vbGVhbiByZXM7CisJcmVzID0K KwkgICAgcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0ZFQVRVUkVTLCBidWYsCisJCQkJIHNp emVvZihBR19GRUFUVVJFUykgLSAxKTsKKwlpZiAoIXJlcyB8fCAxICE9IHNzY2FuZihidWYsICJc clxuK0JSU0Y6JWQiLCAmZ3ctPmFnX2ZlYXR1cmVzKSkgeworCQlyZXR1cm4gRkFMU0U7CisJfQor CWRlYnVnKCJmZWF0dXJlcyBhcmUgMHglWCIsIGd3LT5hZ19mZWF0dXJlcyk7CisJcmVzID0KKwkg ICAgcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0lORElDQVRPUlNfU1VQUCwgYnVmLAorCQkJ CSBzaXplb2YoQUdfSU5ESUNBVE9SU19TVVBQKSAtIDEpOworCWlmICghcmVzIHx8ICFzdHJzdHIo YnVmLCAiK0NJTkQ6IikpIHsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlndy0+aW5kaWVzID0gcGFy c2VfaW5kaWNhdG9yX25hbWVzKHN0cmNocihidWYsICcoJyksIE5VTEwpOworCisJcmVzID0KKwkg ICAgcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0lORElDQVRPUlNfVkFMLCBidWYsCisJCQkJ IHNpemVvZihBR19JTkRJQ0FUT1JTX1ZBTCkgLSAxKTsKKwlpZiAoIXJlcyB8fCAhc3Ryc3RyKGJ1 ZiwgIitDSU5EOiIpKSB7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZ3ctPmluZGllcyA9CisJICAg IHBhcnNlX2luZGljYXRvcl92YWx1ZXMoc3RyY2hyKGJ1ZiwgJzonKSArIDEsIGd3LT5pbmRpZXMp OworCisJcmVzID0KKwkgICAgcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0lORElDQVRPUlNf RU5BQkxFLCBidWYsCisJCQkJIHNpemVvZihBR19JTkRJQ0FUT1JTX0VOQUJMRSkgLSAxKTsKKwlp ZiAoIXJlcyB8fCAhc3Ryc3RyKGJ1ZiwgIk9LIikpIHsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlp ZiAoMCAhPSAoZ3ctPmFnX2ZlYXR1cmVzICYgQUdfRkVBVFVSRV8zV0FZKSkgeworCQlyZXMgPQor CQkgICAgcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0hPTERfTVBUWV9TVVBQLCBidWYsCisJ CQkJCSBzaXplb2YoQUdfSE9MRF9NUFRZX1NVUFApIC0gMSk7CisJCWlmICghcmVzIHx8ICFzdHJz dHIoYnVmLCAiK0NITEQ6IikpIHsKKwkJCWdfc2xpY2VfZnJlZTEoUkZDT01NX0JVRl9TSVpFLCBi dWYpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCWd3LT5ob2xkX211bHRpcGFydHlfZmVhdHVy ZXMgPQorCQkgICAgZ2V0X2hvbGRfbXB0eV9mZWF0dXJlcyhzdHJjaHIoYnVmLCAnKCcpKTsKKwl9 IGVsc2UgeworCQlndy0+aG9sZF9tdWx0aXBhcnR5X2ZlYXR1cmVzID0gMDsKKwl9CisJZGVidWco IlNlcnZpY2UgbGF5ZXIgY29ubmVjdGlvbiBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQhIik7CisJ cmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0NBTExFUl9JREVOVF9FTkFCTEUsIGJ1ZiwKKwkJ CSAgICAgc2l6ZW9mKEFHX0NBTExFUl9JREVOVF9FTkFCTEUpIC0gMSk7CisJcmZjb21tX3NlbmRf YW5kX3JlYWQoZ3csIEFHX0NBUlJJRVJfRk9STUFULCBidWYsCisJCQkgICAgIHNpemVvZihBR19D QVJSSUVSX0ZPUk1BVCkgLSAxKTsKKwlpZiAoMCAhPSAoZ3ctPmFnX2ZlYXR1cmVzICYgQUdfRkVB VFVSRV9FWFRFTkRFRF9SRVNfQ09ERSkpIHsKKwkJcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFH X0VYVEVOREVEX1JFU1VMVF9DT0RFLCBidWYsCisJCQkJICAgICBzaXplb2YoQUdfRVhURU5ERURf UkVTVUxUX0NPREUpIC0gMSk7CisJfQorCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBw cm9jZXNzX2luZF9jaGFuZ2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBnY2hhciAqIG5hbWUs CisJCQkgICAgICAgZ2ludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdh dGV3YXk7CisJaWYgKDAgPT0gc3RyY21wKG5hbWUsICJjYWxsIikpIHsKKwkJaWYgKDAgPCB2YWx1 ZSkgeworCQkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldi0+Y29ubiwgZGV2LT5wYXRoLAorCQkJCQkg ICBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKKwkJCQkJICAgIkNhbGxTdGFydCIsIERCVVNfVFlQ RV9JTlZBTElEKTsKKwkJCWd3LT5pc19kaWFsaW5nID0gRkFMU0U7CisJCX0gZWxzZSB7CisJCQln X2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCSAgIEFVRElPX0dB VEVXQVlfSU5URVJGQUNFLAorCQkJCQkgICAiQ2FsbEVuZCIsIERCVVNfVFlQRV9JTlZBTElEKTsK KwkJfQorCX0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobmFtZSwgImNhbGxzdGF0dXMiKQorCQkgICAm JiBndy0+aXNfZGlhbGluZykgeworCQlpZiAoMCA9PSB2YWx1ZSkgeworCQkJZ19kYnVzX2VtaXRf c2lnbmFsKGRldi0+Y29ubiwgZGV2LT5wYXRoLAorCQkJCQkgICBBVURJT19HQVRFV0FZX0lOVEVS RkFDRSwKKwkJCQkJICAgIkNhbGxDYW5jZWxsZWQiLAorCQkJCQkgICBEQlVTX1RZUEVfSU5WQUxJ RCk7CisJCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOworCQl9IGVsc2UgeworCQkJZ3ctPmlzX2Rp YWxpbmcgPSBUUlVFOworCQl9CisJfSBlbHNlIGlmICgwID09IHN0cmNtcChuYW1lLCAiY2FsbGhl bGQiKSkgeworCQkvKiBGSVhNRTogVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIG9uIGFzc3Vt cHRpb25zIG9ubHkuIEhhcyB0byBiZSB0ZXN0ZWQgZm9yIGludGVyb3BlcmFiaWxpdHkKKwkJICAg SSBhc3N1bWUgdGhhdCBjYWxsaGVsZD0yIHdvdWxkIGJlIHNlbnQgd2hlbiBkaWFsIGZyb20gSEYg ZmFpbGVkIGluIGNhc2Ugb2YgMy13YXkgY2FsbCAKKwkJICAgVW5mb3J0dW5hdGVseSB0aGlzIHBh dGggaXMgbm90IGNvdmVyZWQgYnkgdGhlIEhGIHNwZWMgc28gdGhlIGNvZGUgaGFzIHRvIGJlIHRl c3RlZCBmb3IgaW50ZXJvcAorCQkgKi8KKwkJaWYgKDIgPT0gdmFsdWUpIHsJLyogJzInIG1lYW5z OiBhbGwgY2FsbHMgaGVsZCwgbm8gYWN0aXZlIGNhbGxzICovCisJCQlpZiAoZ3ctPmlzX2RpYWxp bmcpIHsKKwkJCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJ CQkgICBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKKwkJCQkJCSAgICJDYWxsQ2FuY2VsbGVkIiwK KwkJCQkJCSAgIERCVVNfVFlQRV9JTlZBTElEKTsKKwkJCQlndy0+aXNfZGlhbGluZyA9IEZBTFNF OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldi0+Y29ubiwg ZGV2LT5wYXRoLAorCQkJCSAgIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFLCAiU3RhdHVzVXBkYXRl IiwKKwkJCQkgICBEQlVTX1RZUEVfU1RSSU5HLCBuYW1lLCBEQlVTX1RZUEVfSU5UMzIsCisJCQkJ ICAgdmFsdWUsIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nl c3NfcmluZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UsIEdJT0NoYW5uZWwgKiBjaGFuLAor CQkJIGdjaGFyICogYnVmKQoreworCWdjaGFyIG51bWJlcltBR19DQUxMRVJfTlVNX1NJWkVdOwor CWdjaGFyICpzZXA7CisJZ3VpbnQgcmVhZDsKKworCXJmY29tbV9zdG9wX3dhdGNoKGRldmljZSk7 CisJZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoY2hhbiwgYnVmLCBSRkNPTU1fQlVGX1NJWkUgLSAx LCAmcmVhZCwKKwkJCQlOVUxMKTsKKwlpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitDTElQOiVz XHJcbiIsIG51bWJlcikpIHsKKwkJc2VwID0gc3RyY2hyKG51bWJlciwgJywnKTsKKwkJc2VwWzBd ID0gJ1wwJzsKKwkJLyogRklYTUU6IHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gZWFjaCBSSU5H K0NMSVAuIFRoYXQncyBiYWQgKi8KKwkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+Y29ubiwg ZGV2aWNlLT5wYXRoLAorCQkJCSAgIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFLCAiUmluZyIsCisJ CQkJICAgREJVU19UWVBFX1NUUklORywgbnVtYmVyLAorCQkJCSAgIERCVVNfVFlQRV9JTlZBTElE KTsKKwl9IGVsc2UgeworCQlpbmZvKCJyZmNvbW1fYWdfZGF0YV9jYigpOiAnJXMnIGluIHBsYWNl IG9mICtDTElQIGFmdGVyIFJJTkciCisJCSAgICAgLCBidWYpOworCX0KKwlyZmNvbW1fc3RhcnRf d2F0Y2goZGV2aWNlKTsKK30KKworc3RhdGljIGdib29sZWFuIHJmY29tbV9hZ19kYXRhX2NiKEdJ T0NoYW5uZWwgKiBjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKKwkJCQkgIHN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldmljZSkKK3sKKwlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKKwlzdHJ1Y3Qg Z2F0ZXdheSAqZ3c7CisJZ3VpbnQgcmVhZDsKKwlnY2hhciBpbmRpY2F0b3JbQUdfSU5ESUNBVE9S X0RFU0NSX1NJWkUgKyA0XTsJLyogc29tZSBzcGFjZSBmb3IgdmFsdWUgKi8KKwlnaW50IHZhbHVl OworCWdjaGFyICpzZXA7CisKKwlpZiAoY29uZCAmIEdfSU9fTlZBTCkKKwkJcmV0dXJuIEZBTFNF OworCisJZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisKKwlpZiAoY29uZCAmIChHX0lPX0VSUiB8IEdf SU9fSFVQKSkKKwkJcmV0dXJuIEZBTFNFOworCisKKwlpZiAoR19JT19FUlJPUl9OT05FICE9CisJ ICAgIGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKGNoYW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAm cmVhZCwKKwkJCQkgICAgTlVMTCkpCisJCXJldHVybiBUUlVFOworCisJYnVmW3JlYWRdID0gJ1ww JzsKKwlpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitDSUVWOiVzXHJcbiIsIGluZGljYXRvcikp IHsKKwkJc2VwID0gc3RyY2hyKGluZGljYXRvciwgJywnKTsKKwkJc2VwWzBdID0gJ1wwJzsKKwkJ c2VwICs9IDE7CisJCXZhbHVlID0gYXRvaShzZXApOworCQlwcm9jZXNzX2luZF9jaGFuZ2UoZGV2 aWNlLCBpbmRpY2F0b3IsIHZhbHVlKTsKKwl9IGVsc2UgaWYgKE5VTEwgIT0gc3Ryc3RyKGJ1Ziwg IlJJTkciKSkgeworCQlwcm9jZXNzX3JpbmcoZGV2aWNlLCBjaGFuLCBidWYpOworCX0gZWxzZSBp ZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitCVlJBOiVkXHJcbiIsICZ2YWx1ZSkpIHsKKwkJaWYg KDAgPT0gdmFsdWUpIHsKKwkJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXZpY2UtPmNvbm4sIGRldmlj ZS0+cGF0aCwKKwkJCQkJICAgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCisJCQkJCSAgICJWb2lj ZVJlY29nbml0aW9uQWN0aXZlIiwKKwkJCQkJICAgREJVU19UWVBFX0lOVkFMSUQpOworCQl9IGVs c2UgeworCQkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAor CQkJCQkgICBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKKwkJCQkJICAgIlZvaWNlUmVjb2duaXRp b25JbmFjdGl2ZSIsCisJCQkJCSAgIERCVVNfVFlQRV9JTlZBTElEKTsKKwkJfQorCX0gZWxzZSBp ZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitWR1M6JWRcclxuIiwgJnZhbHVlKSkgeworCQlnX2Ri dXNfZW1pdF9zaWduYWwoZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsCisJCQkJICAgQVVESU9f R0FURVdBWV9JTlRFUkZBQ0UsICJTcGVha2VyR2FpbiIsCisJCQkJICAgREJVU19UWVBFX0lOVDMy LCB2YWx1ZSwKKwkJCQkgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisKKwl9IGVsc2UgaWYgKDEgPT0g c3NjYW5mKGJ1ZiwgIlxyXG4rVkdNOiVkXHJcbiIsICZ2YWx1ZSkpIHsKKwkJZ19kYnVzX2VtaXRf c2lnbmFsKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAorCQkJCSAgIEFVRElPX0dBVEVXQVlf SU5URVJGQUNFLCAiTWljR2FpbiIsCisJCQkJICAgREJVU19UWVBFX0lOVDMyLCB2YWx1ZSwKKwkJ CQkgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisJfSBlbHNlIHsKKwkJZXJyb3IoInJmY29tbV9hZ19k YXRhX2NiKCk6IHJlYWQgd3JvbmcgZGF0YSAnJXMnIiwgYnVmKTsKKwl9CisJcmV0dXJuIFRSVUU7 Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBzY29faW9fY2IoR0lPQ2hhbm5lbCAqIGNoYW4sIEdJT0Nv bmRpdGlvbiBjb25kLAorCQkJICBzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OworCisJaWYgKGNvbmQgJiBHX0lPX05WQUwpCisJ CXJldHVybiBGQUxTRTsKKworCWlmIChjb25kICYgKEdfSU9fRVJSIHwgR19JT19IVVApKSB7CisJ CUdJT0NoYW5uZWwgKmNoYW4gPSBndy0+c2NvOworCQlnX2lvX2NoYW5uZWxfdW5yZWYoY2hhbik7 CisJCWdfaW9fY2hhbm5lbF9jbG9zZShjaGFuKTsKKwkJZ3ctPnNjbyA9IE5VTEw7CisJCXJldHVy biBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgdm9pZCBzY29fY29u bmVjdF9jYihHSU9DaGFubmVsICogY2hhbiwgaW50IGVyciwKKwkJCSAgIGNvbnN0IGJkYWRkcl90 ICogc3JjLCBjb25zdCBiZGFkZHJfdCAqIGRzdCwKKwkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkK K3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSB1 c2VyX2RhdGE7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OworCWlmICgwID4g ZXJyKSB7CisJCWVycm9yKCJzY29fY29ubmVjdF9jYigpOiAlcyAoJWQpIiwgc3RyZXJyb3IoLWVy ciksIC1lcnIpOworCQkvKiBub3Qgc3VyZSwgYnV0IGZyb20gb3RoZXIgcG9pbnQgb2Ygdmlldywg CisJCSAgIHdoYXQgaXMgdGhlIHJlYXNvbiB0byBoYXZlIGhlYWRzZXQgd2hpY2ggY2Fubm90IHBs YXkgYXVkaW8/ICovCisJCWdhdGV3YXlfY2xvc2UoZ3cpOworCQlyZXR1cm47CisJfQorCQorCWd3 LT5zY28gPSBjaGFuOworCWlmIChOVUxMICE9IGd3LT5zY29fc3RhcnRfY2IpIHsKKwkJZ3ctPnNj b19zdGFydF9jYihkZXYsIGd3LT5zY29fc3RhcnRfY2JfZGF0YSk7CisJfQorCWZjbnRsKGdfaW9f Y2hhbm5lbF91bml4X2dldF9mZChjaGFuKSwgRl9TRVRGTCwgMCk7CS8qIHdoeSBpcyB0aGlzIGhl cmU/ICovCisJZ19pb19hZGRfd2F0Y2goZ3ctPnNjbywgR19JT19FUlIgfCBHX0lPX0hVUCB8IEdf SU9fTlZBTCwKKwkJICAgICAgIChHSU9GdW5jKSBzY29faW9fY2IsIGRldik7Cit9CisKKworc3Rh dGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqIGNoYW4sIGludCBlcnIsCisJ CQkgICAgICBjb25zdCBiZGFkZHJfdCAqIHNyYywgY29uc3QgYmRhZGRyX3QgKiBkc3QsCisJCQkg ICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0g dXNlcl9kYXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKKwlEQnVzTWVz c2FnZSAqY29ubl9tZXMgPSBndy0+Y29ubmVjdF9tZXNzYWdlOworCWdjaGFyIGd3X2FkZHJbMThd OworCisJaWYgKGVyciA8IDApIHsKKwkJZXJyb3IoImNvbm5lY3QoKTogJXMgKCVkKSIsIHN0cmVy cm9yKC1lcnIpLCAtZXJyKTsKKwkJaWYgKE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikgeworCQkJ Z3ctPnNjb19zdGFydF9jYihOVUxMLCBndy0+c2NvX3N0YXJ0X2NiX2RhdGEpOworCQl9CisJCXJl dHVybjsKKwl9CisJCisJYmEyc3RyKCZkZXYtPmRzdCwgZ3dfYWRkcik7CisJLyogQmxvY2tpbmcg bW9kZSBzaG91bGQgYmUgZGVmYXVsdCwgYnV0IGp1c3QgaW4gY2FzZTogKi8KKwlHSU9GbGFncyBm bGFncyA9IGdfaW9fY2hhbm5lbF9nZXRfZmxhZ3MoY2hhbik7CisJZmxhZ3MgJj0gfkdfSU9fRkxB R19OT05CTE9DSzsKKwlmbGFncyAmPSBHX0lPX0ZMQUdfTUFTSzsKKwlnX2lvX2NoYW5uZWxfc2V0 X2ZsYWdzKGNoYW4sIGZsYWdzLCBOVUxMKTsKKwlnX2lvX2NoYW5uZWxfc2V0X2VuY29kaW5nKGNo YW4sIE5VTEwsIE5VTEwpOworCWdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQoY2hhbiwgRkFMU0Up OworCWd3LT5yZmNvbW0gPSBjaGFuOworCWlmIChlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25u KGRldi0+Z2F0ZXdheSkpIHsKKwkJR0lPQ2hhbm5lbCAqc2NvX3NlcnZlciA9CisJCSAgICBidF9z Y29fbGlzdGVuKCZkZXYtPnNyYywgMCwgc2NvX2Nvbm5lY3RfY2IsIGRldik7CisKKwkJaWYgKE5V TEwgIT0gc2NvX3NlcnZlcikgeworCQkJZGVidWcoIiVzOiBDb25uZWN0ZWQgdG8gJXMiLCBkZXYt PnBhdGgsIGd3X2FkZHIpOworCQkJcmZjb21tX3N0YXJ0X3dhdGNoKGRldik7CisJCQlndy0+c2Nv X3NlcnZlciA9IHNjb19zZXJ2ZXI7CisJCQlpZiAoTlVMTCAhPSBjb25uX21lcykgeworCQkJCURC dXNNZXNzYWdlICpyZXBseSA9CisJCQkJCWRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihj b25uX21lcyk7CisJCQkJZGJ1c19jb25uZWN0aW9uX3NlbmQoZGV2LT5jb25uLCByZXBseSwgTlVM TCk7CisJCQkJZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKwkJCQlkYnVzX21lc3NhZ2VfdW5y ZWYoY29ubl9tZXMpOworCQkJCWd3LT5jb25uZWN0X21lc3NhZ2UgPSBOVUxMOworCQkJfQorCisJ CQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCSAgIEFVRElP X0dBVEVXQVlfSU5URVJGQUNFLAorCQkJCQkgICAiQ29ubmVjdGVkIiwgREJVU19UWVBFX1VJTlQz MiwKKwkJCQkJICAgJmd3LT5hZ19mZWF0dXJlcywKKwkJCQkJICAgREJVU19UWVBFX0lOVkFMSUQp OworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZXJyb3IoIiVzOiBGYWlsZWQgdG8gc2V0dXAg U0NPIHNlcnZlciBzb2NrZXQiLAorCQkJICAgICAgZGV2LT5wYXRoKTsKKwkJfQorCX0gZWxzZSB7 CisJCWVycm9yCisJCSAgICAoIiVzOiBGYWlsZWQgdG8gZXN0YWJsaXNoIHNlcnZpY2UgbGF5ZXIg Y29ubmVjdGlvbiB0byAlcyIsCisJCSAgICAgZGV2LT5wYXRoLCBnd19hZGRyKTsKKwl9CisJaWYg KE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikgeworCQlndy0+c2NvX3N0YXJ0X2NiKE5VTEwsIGd3 LT5zY29fc3RhcnRfY2JfZGF0YSk7CisJfQorCWdhdGV3YXlfY2xvc2UoZ3cpOworfQorCitzdGF0 aWMgdm9pZCBnZXRfcmVjb3JkX2NiKHNkcF9saXN0X3QgKiByZWNzLCBpbnQgZXJyLCBncG9pbnRl ciB1c2VyX2RhdGEpCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRhOwor CURCdXNNZXNzYWdlICpjb25uX21lcyA9IGRldi0+Z2F0ZXdheS0+Y29ubmVjdF9tZXNzYWdlOwor CWludCBjaCA9IC0xOworCXNkcF9saXN0X3QgKnByb3RvcywgKmNsYXNzZXMgPSBOVUxMOworCXV1 aWRfdCB1dWlkOworCisJaWYgKGVyciA8IDApIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBnZXQgc2Vy dmljZSByZWNvcmQ6ICVzICglZCkiLAorCQkgICAgICBzdHJlcnJvcigtZXJyKSwgLWVycik7CisJ fSBlbHNlIGlmIChOVUxMID09IHJlY3MgfHwgTlVMTCA9PSByZWNzLT5kYXRhKSB7CisJCWVycm9y KCJObyByZWNvcmRzIGZvdW5kIik7CisJfSBlbHNlIGlmIChzZHBfZ2V0X3NlcnZpY2VfY2xhc3Nl cyhyZWNzLT5kYXRhLCAmY2xhc3NlcykgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHNl cnZpY2UgY2xhc3NlcyBmcm9tIHJlY29yZCIpOworCX0gZWxzZSB7CisJCW1lbWNweSgmdXVpZCwg Y2xhc3Nlcy0+ZGF0YSwgc2l6ZW9mKHV1aWQpKTsKKworCQlpZiAoMCA9PSBzZHBfdXVpZDEyOF90 b191dWlkKCZ1dWlkKQorCQkgICAgfHwgdXVpZC50eXBlICE9IFNEUF9VVUlEMTYpIHsKKwkJCWVy cm9yKCJOb3QgYSAxNiBiaXQgVVVJRCIpOworCQl9IGVsc2UgaWYgKHV1aWQudmFsdWUudXVpZDE2 ICE9IEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRCkgeworCQkJZXJyb3IoIlNlcnZpY2UgcmVjb3Jk IGRpZG4ndCBjb250YWluIHRoZSBIRlAgVVVJRCIpOworCQl9IGVsc2UgaWYgKDAgPT0gc2RwX2dl dF9hY2Nlc3NfcHJvdG9zKHJlY3MtPmRhdGEsICZwcm90b3MpKSB7CisJCQljaCA9IHNkcF9nZXRf cHJvdG9fcG9ydChwcm90b3MsIFJGQ09NTV9VVUlEKTsKKwkJCXNkcF9saXN0X2ZvcmVhY2gocHJv dG9zLAorCQkJCQkgKHNkcF9saXN0X2Z1bmNfdCkgc2RwX2xpc3RfZnJlZSwKKwkJCQkJIE5VTEwp OworCQkJc2RwX2xpc3RfZnJlZShwcm90b3MsIE5VTEwpOworCQkJaWYgKGNoID09IC0xKSB7CisJ CQkJZXJyb3IoIlVuYWJsZSB0byBleHRyYWN0IFJGQ09NTSBjaGFubmVsIGZyb20gc2VydmljZSBy ZWNvcmQiKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0gYnRfcmZjb21tX2Nvbm5lY3QoJmRldi0+ c3JjLCAmZGV2LT5kc3QsIGNoCisJCQkJCQkJLCByZmNvbW1fY29ubmVjdF9jYiwgZGV2KTsKKwkJ CQlpZiAoZXJyIDwgMCkgeworCQkJCQlnY2hhciogc3RyZXJyID0gc3RyZXJyb3IoZXJyKTsKKwkJ CQkJZXJyb3IoIlVuYWJsZSB0byBjb25uZWN0OiAlcyAoJXMpIiwKKwkJCQkJICAgICAgc3RyZXJy LCBlcnIpOworCQkJCQlpZiAoTlVMTCAhPSBjb25uX21lcykgeworCQkJCQkJZXJyb3JfY29tbW9u X3JlcGx5KGRldi0+Y29ubiwgY29ubl9tZXMKKwkJCQkJCQkJICAgLCBFUlJPUl9JTlRFUkZBQ0Ui LkNvbm5lY3Rpb25BdHRlbXB0RmFpbGVkIgorCQkJCQkJCQkgICAsIHN0cmVycik7CisJCQkJCX0K KwkJCQkJZ2F0ZXdheV9jbG9zZShkZXYtPmdhdGV3YXkpOworCQkJCX0KKwkJCQlzZHBfbGlzdF9m cmVlKGNsYXNzZXMsIGZyZWUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChO VUxMICE9IGNsYXNzZXMpIHsKKwkJc2RwX2xpc3RfZnJlZShjbGFzc2VzLCBmcmVlKTsKKwl9CisK KwlpZiAoTlVMTCAhPSByZWNzICYmIE5VTEwgIT0gcmVjcy0+ZGF0YSkgewkKKwkJc2RwX3JlY29y ZF9mcmVlKHJlY3MtPmRhdGEpOworCX0KKworCWlmIChOVUxMICE9IGNvbm5fbWVzKSB7CisJCWVy cm9yX2NvbW1vbl9yZXBseShkZXYtPmNvbm4sIGNvbm5fbWVzCisJCQkJICAgLCBFUlJPUl9JTlRF UkZBQ0UiLk5vdFN1cHBvcnRlZCIKKwkJCQkgICAsICJOb3Qgc3VwcG9ydGVkIik7CisJCWRidXNf bWVzc2FnZV91bnJlZihjb25uX21lcyk7CisJCWRldi0+Z2F0ZXdheS0+Y29ubmVjdF9tZXNzYWdl ID0gTlVMTDsKKwl9CisJZ2F0ZXdheV9zdHJlYW1fY2JfdCBzY29fY2IgPSBkZXYtPmdhdGV3YXkt PnNjb19zdGFydF9jYjsKKwlpZiAoTlVMTCAhPSBzY29fY2IpIHsKKwkJc2NvX2NiKE5VTEwsIGRl di0+Z2F0ZXdheS0+c2NvX3N0YXJ0X2NiX2RhdGEpOworCX0KK30KKworc3RhdGljIGludCBnZXRf cmVjb3JkcyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCit7CisJdXVpZF90IHV1aWQ7CisJ c2RwX3V1aWQxNl9jcmVhdGUoJnV1aWQsIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRCk7CisJcmV0 dXJuIGJ0X3NlYXJjaF9zZXJ2aWNlKCZkZXZpY2UtPnNyYywgJmRldmljZS0+ZHN0LCAmdXVpZAor CQkJCSAgICAsIGdldF9yZWNvcmRfY2IsIGRldmljZSwgTlVMTCk7Cit9CisKKworc3RhdGljIERC dXNNZXNzYWdlICphZ19jb25uZWN0KERCdXNDb25uZWN0aW9uICogY29ubiwgREJ1c01lc3NhZ2Ug KiBtc2csCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICph dV9kZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBnYXRld2F5ICpn dyA9IGF1X2Rldi0+Z2F0ZXdheTsKKworCWlmIChOVUxMICE9IGd3LT5yZmNvbW0pIHsKKwkJcmV0 dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJICAgIi5B bHJlYWR5Q29ubmVjdGVkIiwKKwkJCQkJICAgIkFscmVhZHkgQ29ubmVjdGVkIik7CisJfQorCisJ Z3ctPmNvbm5lY3RfbWVzc2FnZSA9IGRidXNfbWVzc2FnZV9yZWYobXNnKTsKKwlpZiAoZ2V0X3Jl Y29yZHMoYXVfZGV2KSA8IDApIHsKKwkJZGJ1c19tZXNzYWdlX3VucmVmKGd3LT5jb25uZWN0X21l c3NhZ2UpOworCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFD RQorCQkJCQkgICAiLkNvbm5lY3RBdHRlbXB0RmFpbGVkIiwKKwkJCQkJICAgIkNvbm5lY3QgQXR0 ZW1wdCBGYWlsZWQiKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2Fn ZSAqYWdfZGlzY29ubmVjdChEQnVzQ29ubmVjdGlvbiAqIGNvbm4sIERCdXNNZXNzYWdlICogbXNn LAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBk YXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlEQnVzTWVzc2Fn ZSAqcmVwbHkgPSBOVUxMOworCWNoYXIgZ3dfYWRkclsxOF07CisKKwlyZXBseSA9IGRidXNfbWVz c2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxM OworCisJaWYgKE5VTEwgPT0gZ3ctPnJmY29tbSkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJy b3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJICAgIi5Ob3RDb25uZWN0ZWQiLAorCQkJCQkg ICAiRGV2aWNlIG5vdCBDb25uZWN0ZWQiKTsKKworCWdhdGV3YXlfY2xvc2UoZ3cpOworCWJhMnN0 cigmZGV2aWNlLT5kc3QsIGd3X2FkZHIpOworCWRlYnVnKCJEaXNjb25uZWN0ZWQgZnJvbSAlcywg JXMiLCBnd19hZGRyLCBkZXZpY2UtPnBhdGgpOworCisJcmV0dXJuIHJlcGx5OworCit9CisKK3N0 YXRpYyBEQnVzTWVzc2FnZSAqYWdfaXNfY29ubmVjdGVkKERCdXNDb25uZWN0aW9uICogY29ubiwK KwkJCQkgICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEpCit7CisJZ2Jvb2xlYW4gcmVz ID0gZ2F0ZXdheV9pc19jb25uZWN0ZWQoKHN0cnVjdCBhdWRpb19kZXZpY2UgKikgZGF0YSk7CisJ REJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7 CisJaWYgKE5VTEwgIT0gcmVwbHkpIHsKKwkJZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5 LCBEQlVTX1RZUEVfQk9PTEVBTiwgJnJlcywKKwkJCQkJIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9 CisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKnByb2Nlc3NfYWdfcmVw b25zZShEQnVzTWVzc2FnZSAqIG1zZywgZ2NoYXIgKiByZXNwb25zZSkKK3sKKwlEQnVzTWVzc2Fn ZSAqcmVwbHk7CisJaWYgKE5VTEwgIT0gc3Ryc3RyKHJlc3BvbnNlLCBPS19SRVNQT05TRSkpIHsK KwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwl9IGVsc2Ug eworCQkvKiBGSVhNRTogc29tZSBjb2RlIHNob3VsZCBiZSBoZXJlIHRvIHByb2Nlc3NlcyBlcnJv cnMgaW4gYmV0dGVyIGZhc2lvbiAqLworCQlkZWJ1ZygiQUcgcmVzcG9uZGVkIHdpdGggJyVzJyB0 byAlcyBtZXRob2QgY2FsbCIsIHJlc3BvbnNlLAorCQkgICAgICBkYnVzX21lc3NhZ2VfZ2V0X21l bWJlcihtc2cpKTsKKwkJcmVwbHkgPQorCQkgICAgZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2cs CisJCQkJCSAgIEVSUk9SX0lOVEVSRkFDRQorCQkJCQkgICAiLk9wZXJhdGlvbkZhaWxlZCIsCisJ CQkJCSAgICJPcGVyYXRpb24gZmFpbGVkLiBTZWUgbG9nIGZvciBkZXRhaWxzIik7CisJfQorCXJl dHVybiByZXBseTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlICpwcm9jZXNzX3NpbXBsZShEQnVz TWVzc2FnZSAqIG1zZywKKwkJCQkgICBzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIGdjaGFyICog ZGF0YSkKK3sKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CisJZ2NoYXIgYnVm W1JGQ09NTV9CVUZfU0laRV07CisKKwlyZmNvbW1fc3RvcF93YXRjaChkZXYpOworCXJmY29tbV9z ZW5kX2FuZF9yZWFkKGd3LCBkYXRhLCBidWYsIHN0cmxlbihkYXRhKSk7CisJcmZjb21tX3N0YXJ0 X3dhdGNoKGRldik7CisJcmV0dXJuIHByb2Nlc3NfYWdfcmVwb25zZShtc2csIGJ1Zik7Cit9CisK KyNkZWZpbmUgQUdfQU5TV0VSICJBVEFcciIKKworc3RhdGljIERCdXNNZXNzYWdlICphZ19hbnN3 ZXIoREJ1c0Nvbm5lY3Rpb24gKiBjb25uLCBEQnVzTWVzc2FnZSAqIG1zZywKKwkJCSAgICAgIHZv aWQgKmRhdGEpCit7CisJcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgKHN0cnVjdCBhdWRpb19k ZXZpY2UgKikgZGF0YSwKKwkJCSAgICAgIEFHX0FOU1dFUik7Cit9CisKKyNkZWZpbmUgQUdfQ0FO Q0VMX0NVUiAiQVQrQ0hVUFxyIgorCitzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2NhbmNlbF9jdXIo REJ1c0Nvbm5lY3Rpb24gKiBjb25uLCBEQnVzTWVzc2FnZSAqIG1zZywKKwkJCQkgIHZvaWQgKmRh dGEpCit7CisJcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgKHN0cnVjdCBhdWRpb19kZXZpY2Ug KikgZGF0YSwKKwkJCSAgICAgIEFHX0NBTkNFTF9DVVIpOworfQorCisjZGVmaW5lIEFMTE9XRURf TlVNQkVSX1NZTUJPTFMgIjEyMzQ1Njc4OTAqIytBQkMiCS8qIGFjY29yZGluZyB0byBHU00gc3Bl YyAqLworI2RlZmluZSBBR19QTEFDRV9DQUxMICJBVEQlc1xyIgorLyogZGlhbGluZyBmcm9tIG1l bW9yeSBpcyBub3Qgc3VwcG9ydGVkIGFzIGhlYWRzZXQgc3BlYyBkb2Vzbid0IGRlZmluZSBhIHdh eQorICAgdG8gcmV0cmVpdmUgcGhvbmUgbWVtb3J5IGVudHJpZXMuCisqLworc3RhdGljIERCdXNN ZXNzYWdlICphZ19jYWxsKERCdXNDb25uZWN0aW9uICogY29ubiwgREJ1c01lc3NhZ2UgKiBtc2cs CisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBk YXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlnY2hhciBidWZb UkZDT01NX0JVRl9TSVpFXTsKKwlnY2hhciAqbnVtYmVyOworCWdpbnQgYXRkX2xlbjsKKworCWRi dXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9TVFJJTkcsICZudW1iZXIs CisJCQkgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisJaWYgKHN0cmxlbihudW1iZXIpICE9IHN0 cnNwbihudW1iZXIsIEFMTE9XRURfTlVNQkVSX1NZTUJPTFMpKSB7CisJCXJldHVybiBkYnVzX21l c3NhZ2VfbmV3X2Vycm9yKG1zZywKKwkJCQkJICAgICAgRVJST1JfSU5URVJGQUNFICIuQmFkTnVt YmVyIiwKKwkJCQkJICAgICAgIk51bWJlciBjb250YWlucyBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBu b3QgYWxsb3dlZCIpOworCX0KKwlhdGRfbGVuID0gc3ByaW50ZihidWYsIEFHX1BMQUNFX0NBTEws IG51bWJlcik7CisJcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKKwlyZmNvbW1fc2VuZF9hbmRf cmVhZChndywgYnVmLCBidWYsIGF0ZF9sZW4pOworCXJmY29tbV9zdGFydF93YXRjaChkZXZpY2Up OworCXJldHVybiBwcm9jZXNzX2FnX3JlcG9uc2UobXNnLCBidWYpOworfQorCisjZGVmaW5lIEFH X0dFVF9DQVJSSUVSICJBVCtDT1BTP1xyIgorCitzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2dldF9v cGVyYXRvcihEQnVzQ29ubmVjdGlvbiAqIGNvbm4sCisJCQkJICAgIERCdXNNZXNzYWdlICogbXNn LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiA9IChzdHJ1Y3QgYXVk aW9fZGV2aWNlICopIGRhdGE7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5Owor CWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOworCUdJT0NoYW5uZWwgKnJmY29tbSA9IGd3LT5y ZmNvbW07CisJZ3NpemUgcmVhZDsKKwlnY2hhciAqcmVzdWx0OworCURCdXNNZXNzYWdlICpyZXBs eTsKKwlHSU9TdGF0dXMgc3RhdHVzOworCisJcmZjb21tX3N0b3Bfd2F0Y2goZGV2KTsKKwlpb19j aGFubmVsX3dyaXRlX2FsbChyZmNvbW0sIEFHX0dFVF9DQVJSSUVSLAorCQkJICAgICBzdHJsZW4o QUdfR0VUX0NBUlJJRVIpKTsKKworCXN0YXR1cyA9CisJICAgIGdfaW9fY2hhbm5lbF9yZWFkX2No YXJzKHJmY29tbSwgYnVmLCBSRkNPTU1fQlVGX1NJWkUgLSAxLAorCQkJCSAgICAmcmVhZCwgTlVM TCk7CisJcmZjb21tX3N0YXJ0X3dhdGNoKGRldik7CisJaWYgKEdfSU9fU1RBVFVTX05PUk1BTCA9 PSBzdGF0dXMpIHsKKwkJYnVmW3JlYWRdID0gJ1wwJzsKKwkJaWYgKE5VTEwgIT0gc3Ryc3RyKGJ1 ZiwgIitDT1BTIikpIHsKKwkJCXJlc3VsdCA9IHN0cnJjaHIoYnVmLCAnLCcpICsgMTsKKwkJCXJl cGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJCQlkYnVzX21lc3Nh Z2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsCisJCQkJCQkgJnJlc3VsdCwK KwkJCQkJCSBEQlVTX1RZUEVfSU5WQUxJRCk7CisJCX0gZWxzZSB7CisJCQlpbmZvKCJhZ19nZXRf b3BlcmF0b3IoKTogJytDT1BTJyBleHBlY3RlZCBidXQgJyVzJyByZWNlaXZlZCIKKwkJCSAgICAg LCBidWYpOworCQkJcmVwbHkgPQorCQkJICAgIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobXNnLAor CQkJCQkJICAgRVJST1JfSU5URVJGQUNFCisJCQkJCQkgICAiLkZhaWxlZCIsCisJCQkJCQkgICAi VW5leHBlY3RlZCByZXNwb25zZSBmcm9tIEFHIik7CisJCX0KKwl9IGVsc2UgeworCQllcnJvcigi YWdfZ2V0X29wZXJhdG9yKCk6ICVtIik7CisJCXJlcGx5ID0KKwkJICAgIGRidXNfbWVzc2FnZV9u ZXdfZXJyb3IobXNnLAorCQkJCQkgICBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkJICAgIi5Db25uZWN0 aW9uRmFpbGVkIiwKKwkJCQkJICAgIkZhaWxlZCB0byByZWNlaXZlIHJlc3BvbnNlIGZyb20gQUci KTsKKwl9CisJcmV0dXJuIHJlcGx5OworfQorCisjZGVmaW5lIEFHX1ZSX0FDVElWQVRFICJBVCtC VlJBPTFcciIKK3N0YXRpYyBEQnVzTWVzc2FnZSAqYWdfdnJfYWN0aXZhdGUoREJ1c0Nvbm5lY3Rp b24gKiBjb25uLAorCQkJCSAgIERCdXNNZXNzYWdlICogbXNnLCB2b2lkICpkYXRhKQoreworCXJl dHVybiBwcm9jZXNzX3NpbXBsZShtc2csIChzdHJ1Y3QgYXVkaW9fZGV2aWNlICopIGRhdGEsCisJ CQkgICAgICBBR19WUl9BQ1RJVkFURSk7Cit9CisKKyNkZWZpbmUgQUdfVlJfREVBQ1RJVkFURSAi QVQrQlZSQT0wXHIiCitzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX3ZyX2RlYWN0aXZhdGUoREJ1c0Nv bm5lY3Rpb24gKiBjb25uLAorCQkJCSAgICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEp Cit7CisJcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgKHN0cnVjdCBhdWRpb19kZXZpY2UgKikg ZGF0YSwKKwkJCSAgICAgIEFHX1ZSX0RFQUNUSVZBVEUpOworfQorCisjZGVmaW5lIEFHX1JFUVVF U1RfTlVNQkVSICJBVCtCSU5QPTFcciIKK3N0YXRpYyBEQnVzTWVzc2FnZSAqYWdfZ2V0X251bWJl cl9mb3Jfdm9pY2UoREJ1c0Nvbm5lY3Rpb24gKiBjb25uLAorCQkJCQkgICAgREJ1c01lc3NhZ2Ug KiBtc2csIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0 YTsKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisJZ2NoYXIgYnVmW1JG Q09NTV9CVUZfU0laRV07CisJZ2NoYXIgbnVtYmVyW0FHX0NBTExFUl9OVU1fU0laRV07CisKKwly ZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOworCXJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19S RVFVRVNUX05VTUJFUiwgYnVmLAorCQkJICAgICBzdHJsZW4oQUdfUkVRVUVTVF9OVU1CRVIpKTsK KwlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKKwlpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJc bitCSU5QOiVzXHJcbiIsIG51bWJlcikpIHsKKwkJREJ1c01lc3NhZ2UgKnJlcGx5ID0gZGJ1c19t ZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJn cyhyZXBseSwgREJVU19UWVBFX1NUUklORywgbnVtYmVyLAorCQkJCQkgREJVU19UWVBFX0lOVkFM SUQpOworCQlyZXR1cm4gcmVwbHk7CisJfSBlbHNlIHsKKwkJaW5mbygiYWdfZ2V0X251bWJlcl9m b3Jfdm9pY2UoKTogQUcgcmV0dXJuZWQgJyVzJyBpbiBwbGFjZSBvZiBudW1iZXIiCisJCSAgICAg LCBidWYpOworCQlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csCisJCQkJCSAgICAg IEVSUk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIsCisJCQkJCSAgICAgICJBRyBkaWRuJ3QgcmV0dXJu IGEgbnVtYmVyIik7CisJfQorfQorCisjZGVmaW5lIEFHX1NFTkRfRFRNRiAiQVQrVlRTOiVjXHIi CitzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX3NlbmRfZHRtZihEQnVzQ29ubmVjdGlvbiAqIGNvbm4s IERCdXNNZXNzYWdlICogbXNnLAorCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRl d2F5OworCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOworCWdjaGFyICpudW1iZXI7CisJZ2lu dCBjb21fbGVuOworCisJZGJ1c19tZXNzYWdlX2dldF9hcmdzKG1zZywgTlVMTCwgREJVU19UWVBF X1NUUklORywgJm51bWJlciwKKwkJCSAgICAgIERCVVNfVFlQRV9JTlZBTElEKTsKKwlpZiAoc3Ry bGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwgQUxMT1dFRF9OVU1CRVJfU1lNQk9MUykpIHsK KwkJcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IobXNnLAorCQkJCQkgICAgICBFUlJPUl9J TlRFUkZBQ0UgIi5CYWROdW1iZXIiLAorCQkJCQkgICAgICAiTnVtYmVyIGNvbnRhaW5zIGNoYXJh Y3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7CisJfQorCWdib29sZWFuIGdvdF9vayA9IFRS VUU7CisJZ2ludCBudW1fbGVuID0gc3RybGVuKG51bWJlcik7CisJZ2ludCBpID0gMDsKKwlyZmNv bW1fc3RvcF93YXRjaChkZXZpY2UpOworCXdoaWxlIChpIDwgbnVtX2xlbiAmJiBnb3Rfb2spIHsK KwkJY29tX2xlbiA9IHNwcmludGYoYnVmLCBBR19TRU5EX0RUTUYsIG51bWJlcltpXSk7CisJCXJm Y29tbV9zZW5kX2FuZF9yZWFkKGd3LCBidWYsIGJ1ZiwgY29tX2xlbik7CisJCWdvdF9vayA9IE5V TEwgIT0gc3Ryc3RyKGJ1ZiwgT0tfUkVTUE9OU0UpOworCQlpICs9IDE7CisJfQorCXJmY29tbV9z dGFydF93YXRjaChkZXZpY2UpOworCXJldHVybiBwcm9jZXNzX2FnX3JlcG9uc2UobXNnLCBidWYp OworCit9CisKKyNkZWZpbmUgQUdfU0VUX01JQ19HQUlOICJBVCtWR006JWRcciIKK3N0YXRpYyBE QnVzTWVzc2FnZSAqYWdfc2VuZF9taWNfZ2FpbihEQnVzQ29ubmVjdGlvbiAqIGNvbm4sCisJCQkJ ICAgICBEQnVzTWVzc2FnZSAqIG1zZywgdm9pZCAqZGF0YSkKK3sKKwlnaW50IHZhbHVlOworCWdj aGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOworCWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5V TEwsIERCVVNfVFlQRV9JTlQzMiwgJnZhbHVlLAorCQkJICAgICAgREJVU19UWVBFX0lOVkFMSUQp OworCXNwcmludGYoYnVmLCBBR19TRVRfTUlDX0dBSU4sIHZhbHVlKTsKKwlyZXR1cm4gcHJvY2Vz c19zaW1wbGUobXNnLCAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhLCBidWYpOworfQorCisK KyNkZWZpbmUgQUdfU0VUX1NQRUFLRVJfR0FJTiAiQVQrVkdTOiVkXHIiCitzdGF0aWMgREJ1c01l c3NhZ2UgKmFnX3NlbmRfc3BlYWtlcl9nYWluKERCdXNDb25uZWN0aW9uICogY29ubiwKKwkJCQkJ IERCdXNNZXNzYWdlICogbXNnLCB2b2lkICpkYXRhKQoreworCWdpbnQgdmFsdWU7CisJZ2NoYXIg YnVmW1JGQ09NTV9CVUZfU0laRV07CisJZGJ1c19tZXNzYWdlX2dldF9hcmdzKG1zZywgTlVMTCwg REJVU19UWVBFX0lOVDMyLCAmdmFsdWUsCisJCQkgICAgICBEQlVTX1RZUEVfSU5WQUxJRCk7CisJ c3ByaW50ZihidWYsIEFHX1NFVF9TUEVBS0VSX0dBSU4sIHZhbHVlKTsKKwlyZXR1cm4gcHJvY2Vz c19zaW1wbGUobXNnLCAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhLCBidWYpOworfQorCisj ZGVmaW5lIEFHX0dFVF9TVUJTQ1JJQkVSX05VTVMgIkFUK0NOVU1cciIKKyNkZWZpbmUgQ05VTV9M RU4gNQkJLyogbGVuZ3RoIG9mICIrQ05VTSIgc3RyaW5nICovCisjZGVmaW5lIE1BWF9OVU1CRVJf Q05UIDE2CitzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2dldF9zdWJzY3JpYmVyX251bXMoREJ1c0Nv bm5lY3Rpb24gKiBjb25uLAorCQkJCQkgICBEQnVzTWVzc2FnZSAqIG1zZywgdm9pZCAqZGF0YSkK K3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5 ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKKwln Y2hhciAqY3VyX2NudW07CisJZ2NoYXIgbnVtYmVyc1tNQVhfTlVNQkVSX0NOVF1bQUdfQ0FMTEVS X05VTV9TSVpFXTsKKwlpbnQgbnVtYmVyX2NudCA9IDA7CisKKwlyZmNvbW1fc3RvcF93YXRjaChk ZXZpY2UpOworCXJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19HRVRfU1VCU0NSSUJFUl9OVU1T LCBidWYsCisJCQkgICAgIHN0cmxlbihBR19HRVRfU1VCU0NSSUJFUl9OVU1TKSk7CisJcmZjb21t X3N0YXJ0X3dhdGNoKGRldmljZSk7CisJY3VyX2NudW0gPSBzdHJzdHIoYnVmLCAiK0NOVU0iKTsK Kwl3aGlsZSAoTlVMTCAhPSBjdXJfY251bSAmJiBudW1iZXJfY250IDwgTUFYX05VTUJFUl9DTlQp IHsKKwkJc3NjYW5mKGN1cl9jbnVtLCAiK0NOVU06JXMsIiwgbnVtYmVyc1tudW1iZXJfY250XSk7 CisJCW51bWJlcl9jbnQgKz0gMTsKKwkJY3VyX2NudW0gPSBzdHJzdHIoY3VyX2NudW0gKyBDTlVN X0xFTiwgIitDTlVNIik7CisJfQorCURCdXNNZXNzYWdlICpyZXBseSA9IGRidXNfbWVzc2FnZV9u ZXdfbWV0aG9kX3JldHVybihtc2cpOworCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwg REJVU19UWVBFX0FSUkFZLCBEQlVTX1RZUEVfU1RSSU5HLAorCQkJCSAmbnVtYmVycywgbnVtYmVy X2NudCwgREJVU19UWVBFX0lOVkFMSUQpOworCXJldHVybiByZXBseTsKK30KKworc3RhdGljIERC dXNNZXNzYWdlICphZ19ob2xkX2FsbF9idXRfdGhpcyhEQnVzQ29ubmVjdGlvbiAqIGNvbm4sCisJ CQkJCSBEQnVzTWVzc2FnZSAqIG1zZywgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGJ1c19tZXNz YWdlX25ld19lcnJvcigKKwkJbXNnCisJCSwgRVJST1JfSU5URVJGQUNFIi5Ob3RJbXBsZW1lbnRl ZCIKKwkJLCAiTm90IGltcGxlbWVudGVkIik7CisJCit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAq YWdfY2FuY2VsX2FsbChEQnVzQ29ubmVjdGlvbiAqIGNvbm4sIERCdXNNZXNzYWdlICogbXNnLAor CQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcigKKwkJ bXNnCisJCSwgRVJST1JfSU5URVJGQUNFIi5Ob3RJbXBsZW1lbnRlZCIKKwkJLCAiTm90IGltcGxl bWVudGVkIik7CisKK30KKworc3RhdGljIERCdXNNZXNzYWdlICphZ19jYW5jZWxfc3BlYyhEQnVz Q29ubmVjdGlvbiAqIGNvbm4sCisJCQkJICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEp Cit7CisJcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IoCisJCW1zZworCQksIEVSUk9SX0lO VEVSRkFDRSIuTm90SW1wbGVtZW50ZWQiCisJCSwgIk5vdCBpbXBsZW1lbnRlZCIpOworCit9CisK K3N0YXRpYyBEQnVzTWVzc2FnZSAqYWdfcmFoX3B1dF9vbl9ob2xkKERCdXNDb25uZWN0aW9uICog Y29ubiwKKwkJCQkgICAgICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEpCit7CisJcmV0 dXJuIGRidXNfbWVzc2FnZV9uZXdfZXJyb3IoCisJCW1zZworCQksIEVSUk9SX0lOVEVSRkFDRSIu Tm90SW1wbGVtZW50ZWQiCisJCSwgIk5vdCBpbXBsZW1lbnRlZCIpOworCit9CisKK3N0YXRpYyBE QnVzTWVzc2FnZSAqYWdfcmFoX2Fuc3dlcl9oZWxkX2NhbGwoREJ1c0Nvbm5lY3Rpb24gKiBjb25u LAorCQkJCQkgICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRi dXNfbWVzc2FnZV9uZXdfZXJyb3IoCisJCW1zZworCQksIEVSUk9SX0lOVEVSRkFDRSIuTm90SW1w bGVtZW50ZWQiCisJCSwgIk5vdCBpbXBsZW1lbnRlZCIpOworCit9CisKK3N0YXRpYyBEQnVzTWVz c2FnZSAqYWdfcmFoX2NhbmNlbF9oZWxkX2NhbGwoREJ1c0Nvbm5lY3Rpb24gKiBjb25uLAorCQkJ CQkgICAgREJ1c01lc3NhZ2UgKiBtc2csIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGRidXNfbWVz c2FnZV9uZXdfZXJyb3IoCisJCW1zZworCQksIEVSUk9SX0lOVEVSRkFDRSIuTm90SW1wbGVtZW50 ZWQiCisJCSwgIk5vdCBpbXBsZW1lbnRlZCIpOworCit9CisKK3N0YXRpYyBHREJ1c01ldGhvZFRh YmxlIGdhdGV3YXlfbWV0aG9kc1tdID0geworCXsiQ29ubmVjdCIsICIiLCAiIiwgYWdfY29ubmVj dCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DfQorCSwgeyJEaXNjb25uZWN0IiwgIiIsICIiLCBh Z19kaXNjb25uZWN0fQorCSwgeyJJc0Nvbm5lY3RlZCIsICIiLCAiYiIsIGFnX2lzX2Nvbm5lY3Rl ZH0KKwksIHsiQW5zd2VyQ2FsbCIsICIiLCAiIiwgYWdfYW5zd2VyfQorCSwgeyJDYW5jZWxDdXJy ZW50Q2FsbCIsICIiLCAiIiwgYWdfY2FuY2VsX2N1cn0KKwksIHsiQ2FsbCIsICJzIiwgIiIsIGFn X2NhbGx9CisJLCB7IkdldE9wZXJhdG9yTmFtZSIsICIiLCAicyIsIGFnX2dldF9vcGVyYXRvcn0K KwksIHsiVm9pY2VSZWNvZ25pdGlvbkFjdHZhdGUiLCAiIiwgIiIsIGFnX3ZyX2FjdGl2YXRlfQor CSwgeyJWb2ljZVJlY29nbml0aW9uRGVhY3R2YXRlIiwgIiIsICIiLCBhZ192cl9kZWFjdGl2YXRl fQorCSwgeyJHZXROdW1iZXJGb3JMYXN0Vm9pY2VUYWciLCAiIiwgInMiLCBhZ19nZXRfbnVtYmVy X2Zvcl92b2ljZX0KKwksIHsiU2VuZERUTUYiLCAicyIsICIiLCBhZ19zZW5kX2R0bWZ9CisJLCB7 IlNlbmRNaWNyb3Bob25lR2FpbiIsICJ5IiwgIiIsIGFnX3NlbmRfbWljX2dhaW59CisJLCB7IlNl bmRTcGVha2VyR2FpbiIsICJ5IiwgIiIsIGFnX3NlbmRfc3BlYWtlcl9nYWlufQorCSwgeyJHZXRT dWJzY3JpYmVyTnVtYmVycyIsICIiLCAiYXMiLCBhZ19nZXRfc3Vic2NyaWJlcl9udW1zfQorCisJ LCB7IlJBSFB1dE9uSG9sZCIsICIiLCAiIiwgYWdfcmFoX3B1dF9vbl9ob2xkfQorCSwgeyJSQUhB bnN3ZXJIZWxkQ2FsbCIsICIiLCAiIiwgYWdfcmFoX2Fuc3dlcl9oZWxkX2NhbGx9CisJLCB7IlJB SENhbmNlbEhlbGRDYWxsIiwgIiIsICIiLCBhZ19yYWhfY2FuY2VsX2hlbGRfY2FsbH0KKworCSwg eyJDYW5jZWxDYWxsRnJvbU51bWJlciIsICJzIiwgIiIsIGFnX2NhbmNlbF9zcGVjfQorCSwgeyJD YW5jZWxBbGxDYWxscyIsICIiLCAiIiwgYWdfY2FuY2VsX2FsbH0KKwksIHsiSG9sZEFsbEJ1dFRo aXMiLCAicyIsICIiLCBhZ19ob2xkX2FsbF9idXRfdGhpc30KKworCSwge05VTEwsIE5VTEwsIE5V TEwsIE5VTEx9Cit9OworCitzdGF0aWMgR0RCdXNTaWduYWxUYWJsZSBnYXRld2F5X3NpZ25hbHNb XSA9IHsKKwl7IkNvbm5lY3RlZCIsICJ1In0KKwksIHsiRGlzY29ubmVjdGVkIiwgIiJ9CisJLCB7 IlJpbmciLCAicyJ9CisJLCB7IlN0YXR1c1VwZGF0ZSIsICJzaSJ9CisJLCB7IkNhbGxDYW5jZWxs ZWQiLCAiIn0KKwksIHsiQ2FsbFN0YXJ0IiwgIiJ9CisJLCB7IkNhbGxFbmQiLCAiIn0KKwksIHsi Vm9pY2VSZWNvZ25pdGlvbkFjdGl2ZSIsICIifQorCSwgeyJWb2ljZVJlY29nbml0aW9uSW5hY3Rp dmUiLCAiIn0KKwksIHsiTWljcm9waG9uZUdhaW4iLCAieSJ9CisJLCB7IlNwZWFrZXJHYWluIiwg InkifQorCSwgeyJSQUhDYWxsT25Ib2xkIiwgIiJ9CisJLCB7Ik5vQ2FsbHNIZWxkIiwgIiJ9CisJ LCB7IkhvbGRDYWxscyIsICIifQorCSwgeyJBbGxDYWxsc0hlbGQiLCAiIn0KKwksIHtOVUxMLCBO VUxMfQorfTsKKworZ2Jvb2xlYW4gZ2F0ZXdheV9pc19jb25uZWN0ZWQoc3RydWN0IGF1ZGlvX2Rl dmljZSAqZGV2KQoreworCXJldHVybiAoTlVMTCAhPSBkZXYpICYmIChOVUxMICE9IGRldi0+Z2F0 ZXdheSkKKwkgICAgJiYgKE5VTEwgIT0gZGV2LT5nYXRld2F5LT5yZmNvbW0pOworfQorCitzdHJ1 Y3QgZ2F0ZXdheSAqZ2F0ZXdheV9pbml0KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKK3sKKwlp ZiAoIWdfZGJ1c19yZWdpc3Rlcl9pbnRlcmZhY2UoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJ ICAgICAgIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAorCQkJCSAgICAgICBnYXRld2F5X21ldGhv ZHMsIGdhdGV3YXlfc2lnbmFscywKKwkJCQkgICAgICAgTlVMTCwgZGV2LCBOVUxMKSkgeworCQly ZXR1cm4gTlVMTDsKKwl9CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZ19uZXcwKHN0cnVjdCBnYXRl d2F5LCAxKTsKKwlndy0+aW5kaWVzID0gTlVMTDsKKwlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwor CXJldHVybiBndzsKK30KKworCitpbnQgZ2F0ZXdheV9jb25uZWN0X3JmY29tbShzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKiBpbykKK3sKKwlpZiAoIWlvKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWRldi0+Z2F0ZXdheS0+cmZjb21tID0gaW87CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgaW5kaWNhdG9yX3NsaWNlX2ZyZWUoZ3BvaW50ZXIgbWVtKQoreworCWdf c2xpY2VfZnJlZShzdHJ1Y3QgaW5kaWNhdG9yLCBtZW0pOworfQorCitpbnQgZ2F0ZXdheV9jbG9z ZShzdHJ1Y3QgZ2F0ZXdheSAqZ3cpCit7CisJR0lPQ2hhbm5lbCAqcmZjb21tID0gZ3ctPnJmY29t bTsKKwlHSU9DaGFubmVsICpzY28gPSBndy0+c2NvOworCUdJT0NoYW5uZWwgKnNjb19zZXJ2ZXIg PSBndy0+c2NvX3NlcnZlcjsKKwlnX3NsaXN0X2ZvcmVhY2goZ3ctPmluZGllcywgKEdGdW5jKSBp bmRpY2F0b3Jfc2xpY2VfZnJlZSwgTlVMTCk7CisJZ19zbGlzdF9mcmVlKGd3LT5pbmRpZXMpOwor CWlmIChyZmNvbW0pIHsKKwkJZ19pb19jaGFubmVsX2Nsb3NlKHJmY29tbSk7CisJCWdfaW9fY2hh bm5lbF91bnJlZihyZmNvbW0pOworCQlndy0+cmZjb21tID0gTlVMTDsKKwl9CisKKwlpZiAoc2Nv KSB7CisJCWdfaW9fY2hhbm5lbF9jbG9zZShzY28pOworCQlnX2lvX2NoYW5uZWxfdW5yZWYoc2Nv KTsKKwkJZ3ctPnNjbyA9IE5VTEw7CisJCWd3LT5zY29fc3RhcnRfY2IgPSBOVUxMOworCQlndy0+ c2NvX3N0YXJ0X2NiX2RhdGEgPSBOVUxMOworCX0KKworCWlmIChzY29fc2VydmVyKSB7CisJCWdf aW9fY2hhbm5lbF9jbG9zZShzY29fc2VydmVyKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKHNjb19z ZXJ2ZXIpOworCQlndy0+c2NvX3NlcnZlciA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCisK Ky8qIFRoZXNlIGFyZSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20gdW5peC5jIGZvciBhdWRp byBzeXN0ZW0gaWZhY2VzIChhbHNhLCBnc3RyZWFtZXIsIGV0Yy4pICovCisKK2dib29sZWFuIGdh dGV3YXlfcmVxdWVzdF9zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2CisJCQkgICAsIGdh dGV3YXlfc3RyZWFtX2NiX3QgY2IKKwkJCSAgICwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKKworCWlmIChOVUxMID09IGd3LT5zY28pIHsg CisJCWlmIChOVUxMID09IGd3LT5yZmNvbW0pIHsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCQln dy0+c2NvX3N0YXJ0X2NiID0gY2I7CisJCWd3LT5zY29fc3RhcnRfY2JfZGF0YSA9IHVzZXJfZGF0 YTsKKwkJYnRfc2NvX2Nvbm5lY3QoJmRldi0+c3JjLCAmZGV2LT5kc3QsIHNjb19jb25uZWN0X2Ni LCBkZXYpOworCX0gZWxzZSB7CisJCWlmIChOVUxMICE9IGNiKSB7CisJCQljYihkZXYsIHVzZXJf ZGF0YSk7CisJCX0KKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK2ludCBnYXRld2F5X2NvbmZpZ19z dHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2CisJCQkgICwgZ2F0ZXdheV9zdHJlYW1fY2Jf dCBzY29fY2IKKwkJCSAgLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGdhdGV3YXkgKmd3 ID0gZGV2LT5nYXRld2F5OworCWlmIChOVUxMID09IGd3LT5yZmNvbW0pIHsKKwkJZ3ctPnNjb19z dGFydF9jYiA9IHNjb19jYjsKKwkJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0gdXNlcl9kYXRhOwor CQlyZXR1cm4gZ2V0X3JlY29yZHMoZGV2KTsKKwl9IGVsc2UgeworCQlpZiAoTlVMTCAhPSBzY29f Y2IpIHsKKwkJCXNjb19jYihkZXYsIHVzZXJfZGF0YSk7CisJCX0KKwkJcmV0dXJuIDA7IAorCX0K K30KKworZ2Jvb2xlYW4gZ2F0ZXdheV9jYW5jZWxfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldiwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0 ZXdheTsKKwlnYXRld2F5X2Nsb3NlKGd3KTsKKwlyZXR1cm4gVFJVRTsKK30KKworaW50IGdhdGV3 YXlfZ2V0X3Njb19mZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCit7CisJR0lPQ2hhbm5lbCog c2NvX2NoYW4gPSBkZXYtPmdhdGV3YXktPnNjbzsKKworCWlmIChOVUxMID09IHNjb19jaGFuKQor CQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKHNjb19jaGFu KTsKK30KKwordm9pZCBnYXRld2F5X3N1c3BlbmRfc3RyZWFtKHN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZ2F0ZXdheSogZ3cgPSBkZXYtPmdhdGV3YXk7CisJCisJaWYgKGd3 LT5zY28pIHsKKwkJZ19pb19jaGFubmVsX2Nsb3NlKGd3LT5zY28pOworCQlnX2lvX2NoYW5uZWxf dW5yZWYoZ3ctPnNjbyk7CisJCWd3LT5zY28gPSBOVUxMOworCQlndy0+c2NvX3N0YXJ0X2NiID0g TlVMTDsKKwkJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQg YS9hdWRpby9nYXRld2F5LmggYi9hdWRpby9nYXRld2F5LmgKaW5kZXggZTkzNDA2Yi4uYTZhNTMx MCAxMDA2NDQKLS0tIGEvYXVkaW8vZ2F0ZXdheS5oCisrKyBiL2F1ZGlvL2dhdGV3YXkuaApAQCAt MjIsMTMgKzIyLDQwIEBACiAgKgogICovCiAKKworCisjaWZuZGVmIF9fR0FURVdBWV9IX18KKyNk ZWZpbmUgX19HQVRFV0FZX0hfXworCisjaW5jbHVkZSAiZGV2aWNlLmgiCisKICNkZWZpbmUgQVVE SU9fR0FURVdBWV9JTlRFUkZBQ0UgIm9yZy5ibHVlei5HYXRld2F5IgogCiAjZGVmaW5lIERFRkFV TFRfSFNQX0hTX0NIQU5ORUwgNgogI2RlZmluZSBERUZBVUxUX0hGUF9IU19DSEFOTkVMIDcKIAot aW50IGdhdGV3YXlfaW5pdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgZ2Jvb2xlYW4gZGlzYWJsZV9o ZnAsIGdib29sZWFuIHNjb19oY2kpOwordHlwZWRlZiB2b2lkICgqZ2F0ZXdheV9zdHJlYW1fY2Jf dCkgKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9pZCAqdXNlcl9kYXRhKTsKKworc3RydWN0 IGdhdGV3YXkqIGdhdGV3YXlfaW5pdChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpOworCitn Ym9vbGVhbiBnYXRld2F5X2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlKiBkZXYpOwor CitpbnQgZ2F0ZXdheV9jb25uZWN0X3JmY29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJ T0NoYW5uZWwgKmNoYW4pOworCitnYm9vbGVhbiBnYXRld2F5X3JlcXVlc3Rfc3RyZWFtKHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldgorCQkJICAgLCBnYXRld2F5X3N0cmVhbV9jYl90IGNiCisJCQkg ICAsIHZvaWQgKnVzZXJfZGF0YSk7CisKK2ludCBnYXRld2F5X2NvbmZpZ19zdHJlYW0oc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2CisJCQkgICAsIGdhdGV3YXlfc3RyZWFtX2NiX3QgY2IKKwkJCSAg ICwgdm9pZCAqdXNlcl9kYXRhKTsKKworZ2Jvb2xlYW4gZ2F0ZXdheV9jYW5jZWxfc3RyZWFtKHN0 cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKTsKKworaW50IGdhdGV3YXlf Z2V0X3Njb19mZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpOworCit2b2lkIGdhdGV3YXlfc3Vz cGVuZF9zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KTsKKwogCi12b2lkIGdhdGV3YXlf ZXhpdCh2b2lkKTsKKyNlbmRpZiAvKl9fR0FURVdBWV9IX18qLwogCi1nYm9vbGVhbiBnYXRld2F5 X2lzX2VuYWJsZWQodWludDE2X3Qgc3ZjKTsKZGlmZiAtLWdpdCBhL2F1ZGlvL2lwYy5oIGIvYXVk aW8vaXBjLmgKaW5kZXggNmFhNjQ4Ni4uNDU5N2YzYSAxMDA2NDQKLS0tIGEvYXVkaW8vaXBjLmgK KysrIGIvYXVkaW8vaXBjLmgKQEAgLTExMCw3ICsxMTAsMTEgQEAgdHlwZWRlZiBzdHJ1Y3Qgewog I2RlZmluZSBCVF9DQVBBQklMSVRJRVNfQUNDRVNTX01PREVfV1JJVEUJMgogI2RlZmluZSBCVF9D QVBBQklMSVRJRVNfQUNDRVNTX01PREVfUkVBRFdSSVRFCTMKIAorI2RlZmluZSBCVF9DQVBBQklM SVRJRVNfUk9MRV9TTEFWRSAwCisjZGVmaW5lIEJUX0NBUEFCSUxJVElFU19ST0xFX01BU1RFUiAx CisKICNkZWZpbmUgQlRfRkxBR19BVVRPQ09OTkVDVAkxCisjZGVmaW5lIEJUX0ZMQUdfTUFTVEVS IDB4MiAvKiBjaG9vc2UgYmV0d2VlbiBnYXRld2F5L3NvdXJjZSAoc2V0IGJpdCkgYW5kIGhlYWRz ZXQvc2luayAoY2xlYXIgYml0IGFrYSBkZWZhdWx0KSAqLwogCiBzdHJ1Y3QgYnRfZ2V0X2NhcGFi aWxpdGllc19yZXEgewogCWJ0X2F1ZGlvX21zZ19oZWFkZXJfdAloOwpAQCAtMTY1LDggKzE2OSw4 IEBAIHN0cnVjdCBidF9nZXRfY2FwYWJpbGl0aWVzX3JlcSB7CiAjZGVmaW5lIEJUX1BDTV9GTEFH X05SRUMJCQkxCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50OF90IHRyYW5zcG9ydDsKLQl1aW50 OF90IHR5cGU7CisJdWludDhfdCB0cmFuc3BvcnQ7IC8qIHNjbyB8IGEyZHAgKi8KKwl1aW50OF90 IHR5cGU7IC8qIHNiYyB8IG1wZWcxMiB8IG1wZWcyNCB8IGF0cmFjICovCiAJdWludDhfdCBsZW5n dGg7CiAJdWludDhfdCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY29kZWNf Y2FwYWJpbGl0aWVzX3Q7CmRpZmYgLS1naXQgYS9hdWRpby9tYW5hZ2VyLmMgYi9hdWRpby9tYW5h Z2VyLmMKaW5kZXggNGM5MjQ4Zi4uOTlhNDlhZCAxMDA2NDQKLS0tIGEvYXVkaW8vbWFuYWdlci5j CisrKyBiL2F1ZGlvL21hbmFnZXIuYwpAQCAtOTEsMTAgKzkxLDEwIEBAIHN0cnVjdCBhdWRpb19h ZGFwdGVyIHsKIAljaGFyCSpwYXRoOwogCXVpbnQzMl90IGhzcF9hZ19yZWNvcmRfaWQ7CiAJdWlu dDMyX3QgaGZwX2FnX3JlY29yZF9pZDsKLQl1aW50MzJfdCBoc3BfaHNfcmVjb3JkX2lkOworCXVp bnQzMl90IGhmcF9oc19yZWNvcmRfaWQ7CiAJR0lPQ2hhbm5lbCAqaHNwX2FnX3NlcnZlcjsKIAlH SU9DaGFubmVsICpoZnBfYWdfc2VydmVyOwotCUdJT0NoYW5uZWwgKmhzcF9oc19zZXJ2ZXI7CisJ R0lPQ2hhbm5lbCAqaGZwX2hzX3NlcnZlcjsKIH07CiAKIHN0YXRpYyBpbnQgbWF4X2Nvbm5lY3Rl ZF9oZWFkc2V0cyA9IDE7CkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIEdTTGlzdCAqZGV2aWNl cyA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IGVuYWJsZWRfaW50ZXJmYWNlcyBlbmFibGVkID0gewog CS5oZnAJCT0gVFJVRSwKIAkuaGVhZHNldAk9IFRSVUUsCi0JLmdhdGV3YXkJPSBGQUxTRSwKKwku Z2F0ZXdheQk9IFRSVUUsCiAJLnNpbmsJCT0gVFJVRSwKIAkuc291cmNlCQk9IEZBTFNFLAogCS5j b250cm9sCT0gVFJVRSwKQEAgLTEzMiwxMSArMTMyLDExIEBAIGdib29sZWFuIHNlcnZlcl9pc19l bmFibGVkKGJkYWRkcl90ICpzcmMsIHVpbnQxNl90IHN2YykKIAljYXNlIEhFQURTRVRfU1ZDTEFT U19JRDoKIAkJcmV0dXJuIGVuYWJsZWQuaGVhZHNldDsKIAljYXNlIEhFQURTRVRfQUdXX1NWQ0xB U1NfSUQ6Ci0JCXJldHVybiBlbmFibGVkLmdhdGV3YXk7CisJCXJldHVybiAgRkFMU0U7CiAJY2Fz ZSBIQU5EU0ZSRUVfU1ZDTEFTU19JRDoKIAkJcmV0dXJuIGVuYWJsZWQuaGVhZHNldCAmJiBlbmFi bGVkLmhmcDsKIAljYXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRDoKLQkJcmV0dXJuICBGQUxT RTsKKwkJcmV0dXJuIGVuYWJsZWQuZ2F0ZXdheTsKIAljYXNlIEFVRElPX1NJTktfU1ZDTEFTU19J RDoKIAkJcmV0dXJuIGVuYWJsZWQuc2luazsKIAljYXNlIEFWX1JFTU9URV9UQVJHRVRfU1ZDTEFT U19JRDoKQEAgLTE5Miw2ICsxOTIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3V1aWQoY29uc3Qg Y2hhciAqdXVpZHN0ciwgc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogCQlicmVhazsKIAlj YXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRDoKIAkJZGVidWcoIkZvdW5kIEhhbmRzZnJlZSBB RyByZWNvcmQiKTsKKwkJaWYgKGRldmljZS0+Z2F0ZXdheSA9PSBOVUxMKSB7CisJCQlkZXZpY2Ut PmdhdGV3YXkgPSBnYXRld2F5X2luaXQoZGV2aWNlKTsKKwkJfQorCiAJCWJyZWFrOwogCWNhc2Ug QVVESU9fU0lOS19TVkNMQVNTX0lEOgogCQlkZWJ1ZygiRm91bmQgQXVkaW8gU2luayIpOwpAQCAt Mjc3LDcgKzI4MSw3IEBAIHN0YXRpYyBzZHBfcmVjb3JkX3QgKmhzcF9hZ19yZWNvcmQodWludDhf dCBjaCkKIAlyZXR1cm4gcmVjb3JkOwogfQogCi1zdGF0aWMgc2RwX3JlY29yZF90ICpoc3BfaHNf cmVjb3JkKHVpbnQ4X3QgY2gpCitzdGF0aWMgc2RwX3JlY29yZF90ICpoZnBfaHNfcmVjb3JkKHVp bnQ4X3QgY2gpCiB7CiAJc2RwX2xpc3RfdCAqc3ZjbGFzc19pZCwgKnBmc2VxLCAqYXBzZXEsICpy b290OwogCXV1aWRfdCByb290X3V1aWQsIHN2Y2xhc3NfdXVpZCwgZ2Ffc3ZjbGFzc191dWlkOwpA QCAtMjk1LDEzICsyOTksMTMgQEAgc3RhdGljIHNkcF9yZWNvcmRfdCAqaHNwX2hzX3JlY29yZCh1 aW50OF90IGNoKQogCXJvb3QgPSBzZHBfbGlzdF9hcHBlbmQoMCwgJnJvb3RfdXVpZCk7CiAJc2Rw X3NldF9icm93c2VfZ3JvdXBzKHJlY29yZCwgcm9vdCk7CiAKLQlzZHBfdXVpZDE2X2NyZWF0ZSgm c3ZjbGFzc191dWlkLCBIRUFEU0VUX1NWQ0xBU1NfSUQpOworCXNkcF91dWlkMTZfY3JlYXRlKCZz dmNsYXNzX3V1aWQsIEhBTkRTRlJFRV9TVkNMQVNTX0lEKTsKIAlzdmNsYXNzX2lkID0gc2RwX2xp c3RfYXBwZW5kKDAsICZzdmNsYXNzX3V1aWQpOwogCXNkcF91dWlkMTZfY3JlYXRlKCZnYV9zdmNs YXNzX3V1aWQsIEdFTkVSSUNfQVVESU9fU1ZDTEFTU19JRCk7CiAJc3ZjbGFzc19pZCA9IHNkcF9s aXN0X2FwcGVuZChzdmNsYXNzX2lkLCAmZ2Ffc3ZjbGFzc191dWlkKTsKIAlzZHBfc2V0X3NlcnZp Y2VfY2xhc3NlcyhyZWNvcmQsIHN2Y2xhc3NfaWQpOwogCi0Jc2RwX3V1aWQxNl9jcmVhdGUoJnBy b2ZpbGUudXVpZCwgSEVBRFNFVF9QUk9GSUxFX0lEKTsKKwlzZHBfdXVpZDE2X2NyZWF0ZSgmcHJv ZmlsZS51dWlkLCBIQU5EU0ZSRUVfUFJPRklMRV9JRCk7CiAJcHJvZmlsZS52ZXJzaW9uID0gMHgw MTAwOwogCXBmc2VxID0gc2RwX2xpc3RfYXBwZW5kKDAsICZwcm9maWxlKTsKIAlzZHBfc2V0X3By b2ZpbGVfZGVzY3MocmVjb3JkLCBwZnNlcSk7CkBAIC0zMTksNyArMzIzLDcgQEAgc3RhdGljIHNk cF9yZWNvcmRfdCAqaHNwX2hzX3JlY29yZCh1aW50OF90IGNoKQogCWFwcm90byA9IHNkcF9saXN0 X2FwcGVuZCgwLCBhcHNlcSk7CiAJc2RwX3NldF9hY2Nlc3NfcHJvdG9zKHJlY29yZCwgYXByb3Rv KTsKIAotCXNkcF9zZXRfaW5mb19hdHRyKHJlY29yZCwgIkhlYWRzZXQiLCAwLCAwKTsKKwlzZHBf c2V0X2luZm9fYXR0cihyZWNvcmQsICJIYW5kcy1GcmVlIiwgMCwgMCk7CiAKIAlzZHBfZGF0YV9m cmVlKGNoYW5uZWwpOwogCXNkcF9saXN0X2ZyZWUocHJvdG9bMF0sIDApOwpAQCAtMzk4LDcgKzQw Miw3IEBAIHN0YXRpYyBzZHBfcmVjb3JkX3QgKmhmcF9hZ19yZWNvcmQodWludDhfdCBjaCwgdWlu dDMyX3QgZmVhdCkKIAlyZXR1cm4gcmVjb3JkOwogfQogCi1zdGF0aWMgdm9pZCBhdXRoX2NiKERC dXNFcnJvciAqZGVyciwgdm9pZCAqdXNlcl9kYXRhKQorc3RhdGljIHZvaWQgaGVhZHNldF9hdXRo X2NiKERCdXNFcnJvciAqZGVyciwgdm9pZCAqdXNlcl9kYXRhKQogewogCXN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldmljZSA9IHVzZXJfZGF0YTsKIAljb25zdCBjaGFyICp1dWlkOwpAQCAtNDc5LDcg KzQ4Myw3IEBAIHN0YXRpYyB2b2lkIGFnX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4sIGludCBlcnIs IGNvbnN0IGJkYWRkcl90ICpzcmMsCiAJaGVhZHNldF9zZXRfc3RhdGUoZGV2aWNlLCBIRUFEU0VU X1NUQVRFX0NPTk5FQ1RfSU5fUFJPR1JFU1MpOwogCiAJZXJyID0gYnRkX3JlcXVlc3RfYXV0aG9y aXphdGlvbigmZGV2aWNlLT5zcmMsICZkZXZpY2UtPmRzdCwKLQkJCQkJc2VydmVyX3V1aWQsIGF1 dGhfY2IsIGRldmljZSk7CisJCQkJCXNlcnZlcl91dWlkLCBoZWFkc2V0X2F1dGhfY2IsIGRldmlj ZSk7CiAJaWYgKGVyciA8IDApIHsKIAkJZGVidWcoIkF1dGhvcml6YXRpb24gZGVuaWVkOiAlcyIs IHN0cmVycm9yKC1lcnIpKTsKIAkJaGVhZHNldF9zZXRfc3RhdGUoZGV2aWNlLCBIRUFEU0VUX1NU QVRFX0RJU0NPTk5FQ1RFRCk7CkBAIC00OTMsMTAgKzQ5Nyw0OSBAQCBkcm9wOgogCWdfaW9fY2hh bm5lbF91bnJlZihjaGFuKTsKIH0KIAotc3RhdGljIHZvaWQgaHNfaW9fY2IoR0lPQ2hhbm5lbCAq Y2hhbiwgaW50IGVyciwgY29uc3QgYmRhZGRyX3QgKnNyYywKKworc3RhdGljIHZvaWQgZ2F0ZXdh eV9hdXRoX2NiKERCdXNFcnJvciAqZGVyciwgdm9pZCAqdXNlcl9kYXRhKQoreworCWlmIChkZXJy ICYmIGRidXNfZXJyb3JfaXNfc2V0KGRlcnIpKSB7CisJCWVycm9yKCJBY2Nlc3MgZGVuaWVkOiAl cyIsIGRlcnItPm1lc3NhZ2UpOworCX0gCit9CisKK3N0YXRpYyB2b2lkIGhmX2lvX2NiKEdJT0No YW5uZWwgKmNoYW4sIGludCBlcnIsIGNvbnN0IGJkYWRkcl90ICpzcmMsCiAJCWNvbnN0IGJkYWRk cl90ICpkc3QsIHZvaWQgKmRhdGEpCiB7Ci0JLypTdHViKi8KKwlzdHJ1Y3QgYXVkaW9fYWRhcHRl ciAqYWRhcHRlciA9IGRhdGE7CisJY29uc3QgY2hhciAqc2VydmVyX3V1aWQsICpyZW1vdGVfdXVp ZDsKKwl1aW50MTZfdCBzdmNsYXNzOworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZTsKKwor CWlmIChlcnIgPCAwKSB7CisJCWVycm9yKCJhY2NlcHQ6ICVzICglZCkiLCBzdHJlcnJvcigtZXJy KSwgLWVycik7CisJCXJldHVybjsKKwl9CisKKwlzZXJ2ZXJfdXVpZCA9IEhTUF9IU19VVUlEOwor CXJlbW90ZV91dWlkID0gSFNQX0FHX1VVSUQ7CisJc3ZjbGFzcyA9IEhFQURTRVRfQUdXX1NWQ0xB U1NfSUQ7CisKKwlkZXZpY2UgPSBtYW5hZ2VyX2dldF9kZXZpY2Uoc3JjLCBkc3QpOworCWlmICgh ZGV2aWNlKSB7CisJCWRlYnVnKCJGYWlsZWQgdG8gZ2V0IGRldmljZSIpOworCX0gZWxzZSBpZiAo IWRldmljZS0+Z2F0ZXdheSkgeworCQlidGRfZGV2aWNlX2FkZF91dWlkKGRldmljZS0+YnRkX2Rl diwgcmVtb3RlX3V1aWQpOworCX0gZWxzZSBpZiAoZ2F0ZXdheV9pc19jb25uZWN0ZWQoZGV2aWNl KSkgeworCQlkZWJ1ZygiUmVmdXNpbmcgbmV3IGNvbm5lY3Rpb24gc2luY2Ugb25lIGFscmVhZHkg ZXhpc3RzIik7CisJfSBlbHNlIGlmICgwID4gYnRkX3JlcXVlc3RfYXV0aG9yaXphdGlvbigmZGV2 aWNlLT5zcmMsICZkZXZpY2UtPmRzdCwKKwkJCQkJICAgICBzZXJ2ZXJfdXVpZCwgZ2F0ZXdheV9h dXRoX2NiLCBkZXZpY2UpKSB7CisJCWRlYnVnKCJBdXRob3JpemF0aW9uIGRlbmllZCEiKTsKKwl9 IGVsc2UgaWYgKGdhdGV3YXlfY29ubmVjdF9yZmNvbW0oZGV2aWNlLCBjaGFuKSA8IDApIHsKKwkJ ZXJyb3IoIkFsbG9jYXRpbmcgbmV3IEdJT0NoYW5uZWwgZmFpbGVkISIpOworCX0gZWxzZSB7CisJ CXJldHVybjsKKwl9CisKKwlnX2lvX2NoYW5uZWxfY2xvc2UoY2hhbik7CisJZ19pb19jaGFubmVs X3VucmVmKGNoYW4pOwogCXJldHVybjsKIH0KIApAQCAtNjA5LDI2ICs2NTIsMjYgQEAgc3RhdGlj IGludCBnYXRld2F5X3NlcnZlcl9pbml0KHN0cnVjdCBhdWRpb19hZGFwdGVyICphZGFwdGVyKQog CWlmIChtYXN0ZXIpCiAJCWZsYWdzIHw9IFJGQ09NTV9MTV9NQVNURVI7CiAKLQlhZGFwdGVyLT5o c3BfaHNfc2VydmVyID0gYnRfcmZjb21tX2xpc3RlbigmYWRhcHRlci0+c3JjLCBjaGFuLCBmbGFn cywKLQkJCQloc19pb19jYiwgYWRhcHRlcik7Ci0JaWYgKCFhZGFwdGVyLT5oc3BfaHNfc2VydmVy KQorCWFkYXB0ZXItPmhmcF9oc19zZXJ2ZXIgPSBidF9yZmNvbW1fbGlzdGVuKCZhZGFwdGVyLT5z cmMsIGNoYW4sIGZsYWdzLAorCQkJCWhmX2lvX2NiLCBhZGFwdGVyKTsKKwlpZiAoIWFkYXB0ZXIt PmhmcF9oc19zZXJ2ZXIpCiAJCXJldHVybiAtMTsKIAotCXJlY29yZCA9IGhzcF9oc19yZWNvcmQo Y2hhbik7CisJcmVjb3JkID0gaGZwX2hzX3JlY29yZChjaGFuKTsKIAlpZiAoIXJlY29yZCkgewog CQllcnJvcigiVW5hYmxlIHRvIGFsbG9jYXRlIG5ldyBzZXJ2aWNlIHJlY29yZCIpOwogCQlyZXR1 cm4gLTE7CiAJfQogCiAJaWYgKGFkZF9yZWNvcmRfdG9fc2VydmVyKCZhZGFwdGVyLT5zcmMsIHJl Y29yZCkgPCAwKSB7Ci0JCWVycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgSFNQIEhTIHNlcnZpY2Ug cmVjb3JkIik7CisJCWVycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgSEZQIEhTIHNlcnZpY2UgcmVj b3JkIik7CiAJCXNkcF9yZWNvcmRfZnJlZShyZWNvcmQpOwotCQlnX2lvX2NoYW5uZWxfdW5yZWYo YWRhcHRlci0+aHNwX2hzX3NlcnZlcik7Ci0JCWFkYXB0ZXItPmhzcF9oc19zZXJ2ZXIgPSBOVUxM OworCQlnX2lvX2NoYW5uZWxfdW5yZWYoYWRhcHRlci0+aGZwX2hzX3NlcnZlcik7CisJCWFkYXB0 ZXItPmhmcF9oc19zZXJ2ZXIgPSBOVUxMOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JYWRhcHRlci0+ aHNwX2hzX3JlY29yZF9pZCA9IHJlY29yZC0+aGFuZGxlOworCWFkYXB0ZXItPmhmcF9oc19yZWNv cmRfaWQgPSByZWNvcmQtPmhhbmRsZTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcwLDE0ICs4MTMs MTQgQEAgc3RhdGljIHZvaWQgZ2F0ZXdheV9zZXJ2ZXJfcmVtb3ZlKHN0cnVjdCBidGRfYWRhcHRl ciAqYWRhcHRlcikKIAlpZiAoIWFkcCkKIAkJcmV0dXJuOwogCi0JaWYgKGFkcC0+aHNwX2hzX3Jl Y29yZF9pZCkgewotCQlyZW1vdmVfcmVjb3JkX2Zyb21fc2VydmVyKGFkcC0+aHNwX2hzX3JlY29y ZF9pZCk7Ci0JCWFkcC0+aHNwX2hzX3JlY29yZF9pZCA9IDA7CisJaWYgKGFkcC0+aGZwX2hzX3Jl Y29yZF9pZCkgeworCQlyZW1vdmVfcmVjb3JkX2Zyb21fc2VydmVyKGFkcC0+aGZwX2hzX3JlY29y ZF9pZCk7CisJCWFkcC0+aGZwX2hzX3JlY29yZF9pZCA9IDA7CiAJfQogCi0JaWYgKGFkcC0+aHNw X2hzX3NlcnZlcikgewotCQlnX2lvX2NoYW5uZWxfdW5yZWYoYWRwLT5oc3BfaHNfc2VydmVyKTsK LQkJYWRwLT5oc3BfaHNfc2VydmVyID0gTlVMTDsKKwlpZiAoYWRwLT5oZnBfaHNfc2VydmVyKSB7 CisJCWdfaW9fY2hhbm5lbF91bnJlZihhZHAtPmhmcF9oc19zZXJ2ZXIpOworCQlhZHAtPmhmcF9o c19zZXJ2ZXIgPSBOVUxMOwogCX0KIH0KIApAQCAtOTkxLDE5ICsxMDM0LDIzIEBAIHN0cnVjdCBh dWRpb19kZXZpY2UgKm1hbmFnZXJfZmluZF9kZXZpY2UoY29uc3QgYmRhZGRyX3QgKmJkYSwgY29u c3QgY2hhciAqaW50ZXJmCiAJCWlmIChiYWNtcChiZGEsIEJEQUREUl9BTlkpICYmIGJhY21wKCZk ZXYtPmRzdCwgYmRhKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChpbnRlcmZhY2UgJiYgIXN0cmNt cChBVURJT19IRUFEU0VUX0lOVEVSRkFDRSwgaW50ZXJmYWNlKQorCQlpZiAoaW50ZXJmYWNlICYm IDAgID09IHN0cmNtcChBVURJT19IRUFEU0VUX0lOVEVSRkFDRSwgaW50ZXJmYWNlKQogCQkJCSYm ICFkZXYtPmhlYWRzZXQpCiAJCQljb250aW51ZTsKKwkKKwkJaWYgKGludGVyZmFjZSAmJiAwID09 IHN0cmNtcChBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgaW50ZXJmYWNlKQorCQkJCSYmICFkZXYt PmdhdGV3YXkpCisJCQljb250aW51ZTsKIAotCQlpZiAoaW50ZXJmYWNlICYmICFzdHJjbXAoQVVE SU9fU0lOS19JTlRFUkZBQ0UsIGludGVyZmFjZSkKKwkJaWYgKGludGVyZmFjZSAmJiAwID09IHN0 cmNtcChBVURJT19TSU5LX0lOVEVSRkFDRSwgaW50ZXJmYWNlKQogCQkJCSYmICFkZXYtPnNpbmsp CiAJCQljb250aW51ZTsKIAotCQlpZiAoaW50ZXJmYWNlICYmICFzdHJjbXAoQVVESU9fU09VUkNF X0lOVEVSRkFDRSwgaW50ZXJmYWNlKQorCQlpZiAoaW50ZXJmYWNlICYmIDAgPT0gc3RyY21wKEFV RElPX1NPVVJDRV9JTlRFUkZBQ0UsIGludGVyZmFjZSkKIAkJCQkmJiAhZGV2LT5zb3VyY2UpCiAJ CQljb250aW51ZTsKIAotCQlpZiAoaW50ZXJmYWNlICYmICFzdHJjbXAoQVVESU9fQ09OVFJPTF9J TlRFUkZBQ0UsIGludGVyZmFjZSkKKwkJaWYgKGludGVyZmFjZSAmJiAwID09IHN0cmNtcChBVURJ T19DT05UUk9MX0lOVEVSRkFDRSwgaW50ZXJmYWNlKQogCQkJCSYmICFkZXYtPmNvbnRyb2wpCiAJ CQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXVkaW8vcGNtX2JsdWV0b290aC5jIGIvYXVkaW8v cGNtX2JsdWV0b290aC5jCmluZGV4IGJmMjQyMDYuLjkzN2VmY2EgMTAwNjQ0Ci0tLSBhL2F1ZGlv L3BjbV9ibHVldG9vdGguYworKysgYi9hdWRpby9wY21fYmx1ZXRvb3RoLmMKQEAgLTEwOSw4ICsx MDksMTAgQEAgc3RydWN0IGJsdWV0b290aF9hMmRwIHsKIHN0cnVjdCBibHVldG9vdGhfYWxzYV9j b25maWcgewogCWNoYXIgZGV2aWNlWzE4XTsJCS8qIEFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBEZXZp Y2UgKi8KIAlpbnQgaGFzX2RldmljZTsKLQl1aW50OF90IHRyYW5zcG9ydDsJCS8qIFJlcXVlc3Rl ZCB0cmFuc3BvcnQgKi8KKwl1aW50OF90IHRyYW5zcG9ydDsJCS8qIFNDTyBvciBBMkRQICovCiAJ aW50IGhhc190cmFuc3BvcnQ7CisJdWludDhfdCByb2xlOwkJICAgICAgICAvKiBNYXN0ZXIgKGdh dGV3YXl8YTJkcCBzb3VyY2UpIG9yIFNsYXZlIChoZWFkc2V0fGEyZHAgc2luaykgKi8KKwlpbnQg aGFzX3JvbGU7CiAJdWludDE2X3QgcmF0ZTsKIAlpbnQgaGFzX3JhdGU7CiAJdWludDhfdCBjaGFu bmVsX21vZGU7CQkvKiBBMkRQIG9ubHkgKi8KQEAgLTEzOTgsNiArMTQwMCwyMSBAQCBzdGF0aWMg aW50IGJsdWV0b290aF9wYXJzZV9jb25maWcoc25kX2NvbmZpZ190ICpjb25mLAogCQkJfQogCQkJ Y29udGludWU7CiAJCX0KKwkJaWYgKHN0cmNtcChpZCwgInJvbGUiKSA9PSAwKXsKKwkJCWlmIChz bmRfY29uZmlnX2dldF9zdHJpbmcobiwgJnZhbHVlKSA8IDApIHsKKwkJCQlTTkRFUlIoIkludmFs aWQgdHlwZSBmb3IgJXMiLCBpZCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlm IChzdHJjbXAodmFsdWUsICJtYXN0ZXIiKSA9PSAwKSB7CisJCQkJYnRfY29uZmlnLT5yb2xlID0g QlRfQ0FQQUJJTElUSUVTX1JPTEVfTUFTVEVSOworCQkJCWJ0X2NvbmZpZy0+aGFzX3JvbGUgPSAx OworCQkJfSBlbHNlIHsKKwkJCQlidF9jb25maWctPnJvbGUgPSBCVF9DQVBBQklMSVRJRVNfUk9M RV9TTEFWRTsKKwkJCQlidF9jb25maWctPmhhc19yb2xlID0gMTsKKwkJCX0KKwkJCWNvbnRpbnVl OworCQl9CiAKIAkJaWYgKHN0cmNtcChpZCwgInJhdGUiKSA9PSAwKSB7CiAJCQlpZiAoc25kX2Nv bmZpZ19nZXRfc3RyaW5nKG4sICZ2YWx1ZSkgPCAwKSB7CkBAIC0xNjQzLDYgKzE2NjAsOSBAQCBz dGF0aWMgaW50IGJsdWV0b290aF9pbml0KHN0cnVjdCBibHVldG9vdGhfZGF0YSAqZGF0YSwgc25k X3BjbV9zdHJlYW1fdCBzdHJlYW0sCiAKIAlpZiAoYWxzYV9jb25mLT5hdXRvY29ubmVjdCkKIAkJ cmVxLT5mbGFncyB8PSBCVF9GTEFHX0FVVE9DT05ORUNUOworCWlmIChhbHNhX2NvbmYtPmhhc19y b2xlICYmIGFsc2FfY29uZi0+cm9sZSA9PSBCVF9DQVBBQklMSVRJRVNfUk9MRV9NQVNURVIpIHsK KwkJcmVxLT5mbGFncyB8PSBCVF9GTEFHX01BU1RFUjsKKwl9CiAJc3RybmNweShyZXEtPmRldmlj ZSwgYWxzYV9jb25mLT5kZXZpY2UsIDE4KTsKIAlpZiAoYWxzYV9jb25mLT5oYXNfdHJhbnNwb3J0 KQogCQlyZXEtPnRyYW5zcG9ydCA9IGFsc2FfY29uZi0+dHJhbnNwb3J0OwpkaWZmIC0tZ2l0IGEv YXVkaW8vdW5peC5jIGIvYXVkaW8vdW5peC5jCmluZGV4IGFkMzExODEuLjFkODM4MzYgMTAwNjQ0 Ci0tLSBhL2F1ZGlvL3VuaXguYworKysgYi9hdWRpby91bml4LmMKQEAgLTQ3LDEyICs0NywxNCBA QAogI2luY2x1ZGUgImEyZHAuaCIKICNpbmNsdWRlICJoZWFkc2V0LmgiCiAjaW5jbHVkZSAic2lu ay5oIgorI2luY2x1ZGUgImdhdGV3YXkuaCIKICNpbmNsdWRlICJ1bml4LmgiCiAjaW5jbHVkZSAi Z2xpYi1oZWxwZXIuaCIKIAogdHlwZWRlZiBlbnVtIHsKIAlUWVBFX05PTkUsCiAJVFlQRV9IRUFE U0VULAorCVRZUEVfR0FURVdBWSwKIAlUWVBFX1NJTkssCiAJVFlQRV9TT1VSQ0UKIH0gc2Vydmlj ZV90eXBlX3Q7CkBAIC05Myw3ICs5NSw2IEBAIHN0YXRpYyBpbnQgdW5peF9zb2NrID0gLTE7CiBz dGF0aWMgdm9pZCBjbGllbnRfZnJlZShzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCkKIHsKIAlz dHJ1Y3QgYTJkcF9kYXRhICphMmRwOwotCiAJc3dpdGNoIChjbGllbnQtPnR5cGUpIHsKIAljYXNl IFRZUEVfU0lOSzoKIAljYXNlIFRZUEVfU09VUkNFOgpAQCAtMTkwLDEwICsxOTEsMTMgQEAgc3Rh dGljIHNlcnZpY2VfdHlwZV90IHNlbGVjdF9zZXJ2aWNlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRl diwgY29uc3QgY2hhciAqaW50ZXIKIAkJCXJldHVybiBUWVBFX1NJTks7CiAJCWVsc2UgaWYgKGRl di0+aGVhZHNldCkKIAkJCXJldHVybiBUWVBFX0hFQURTRVQ7Ci0JfSBlbHNlIGlmICghc3RyY21w KGludGVyZmFjZSwgQVVESU9fU0lOS19JTlRFUkZBQ0UpICYmIGRldi0+c2luaykKKwl9IGVsc2Ug aWYgKDAgPT0gc3RyY21wKGludGVyZmFjZSwgQVVESU9fU0lOS19JTlRFUkZBQ0UpICYmIE5VTEwg IT0gZGV2LT5zaW5rKSB7CiAJCXJldHVybiBUWVBFX1NJTks7Ci0JZWxzZSBpZiAoIXN0cmNtcChp bnRlcmZhY2UsIEFVRElPX0hFQURTRVRfSU5URVJGQUNFKSAmJiBkZXYtPmhlYWRzZXQpCisJfSBl bHNlIGlmICgwID09IHN0cmNtcChpbnRlcmZhY2UsIEFVRElPX0hFQURTRVRfSU5URVJGQUNFKSAm JiBOVUxMICE9IGRldi0+aGVhZHNldCkgewogCQlyZXR1cm4gVFlQRV9IRUFEU0VUOworCX0gZWxz ZSBpZiAoMCA9PSBzdHJjbXAoaW50ZXJmYWNlLCBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSkgJiYg TlVMTCAhPSBkZXYtPmdhdGV3YXkpIHsKKwkJcmV0dXJuIFRZUEVfR0FURVdBWTsKKwl9CiAKIAly ZXR1cm4gVFlQRV9OT05FOwogfQpAQCAtMjMzLDcgKzIzNyw2IEBAIHN0YXRpYyB2b2lkIGhlYWRz ZXRfZGlzY292ZXJ5X2NvbXBsZXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9pZCAqdXNl cl9kYXRhCiAJc3RydWN0IGJ0X2dldF9jYXBhYmlsaXRpZXNfcnNwICpyc3AgPSAodm9pZCAqKSBi dWY7CiAJY29kZWNfY2FwYWJpbGl0aWVzX3QgKmNvZGVjOwogCXBjbV9jYXBhYmlsaXRpZXNfdCAq cGNtOwotCiAJY2xpZW50LT5yZXFfaWQgPSAwOwogCiAJaWYgKCFkZXYpCkBAIC0yNDgsNyArMjUx LDcgQEAgc3RhdGljIHZvaWQgaGVhZHNldF9kaXNjb3ZlcnlfY29tcGxldGUoc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2LCB2b2lkICp1c2VyX2RhdGEKIAogCXBjbSA9ICh2b2lkICopIGNvZGVjOwog CXBjbS0+c2FtcGxpbmdfcmF0ZSA9IDgwMDA7Ci0JaWYgKGhlYWRzZXRfZ2V0X25yZWMoZGV2KSkK KwlpZiAoTlVMTCAhPSBkZXYtPmhlYWRzZXQgJiYgaGVhZHNldF9nZXRfbnJlYyhkZXYpKQogCQlw Y20tPmZsYWdzIHw9IEJUX1BDTV9GTEFHX05SRUM7CiAKIAlyc3AtPmgudHlwZSA9IEJUX1JFU1BP TlNFOwpAQCAtMjk2LDYgKzI5OSwzNCBAQCBmYWlsZWQ6CiAJdW5peF9pcGNfZXJyb3IoY2xpZW50 LCBCVF9TRVRfQ09ORklHVVJBVElPTiwgRUlPKTsKIH0KIAorc3RhdGljIHZvaWQgZ2F0ZXdheV9z ZXR1cF9jb21wbGV0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkK K3sKKwlzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCA9IHVzZXJfZGF0YTsKKwljaGFyIGJ1ZltC VF9TVUdHRVNURURfQlVGRkVSX1NJWkVdOworCXN0cnVjdCBidF9zZXRfY29uZmlndXJhdGlvbl9y c3AgKnJzcCA9ICh2b2lkICopIGJ1ZjsKKworCWlmIChOVUxMID09IGRldikgeworCQl1bml4X2lw Y19lcnJvcihjbGllbnQsIEJUX1NFVF9DT05GSUdVUkFUSU9OLCBFSU8pOworCQlyZXR1cm47CisJ fQorCisJY2xpZW50LT5yZXFfaWQgPSAwOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1Zikp OworCisJcnNwLT5oLnR5cGUgPSBCVF9SRVNQT05TRTsKKwlyc3AtPmgubmFtZSA9IEJUX1NFVF9D T05GSUdVUkFUSU9OOworCXJzcC0+aC5sZW5ndGggPSBzaXplb2YoKnJzcCk7CisKKwlyc3AtPnRy YW5zcG9ydCA9IEJUX0NBUEFCSUxJVElFU19UUkFOU1BPUlRfU0NPOworCXJzcC0+YWNjZXNzX21v ZGUgPSBjbGllbnQtPmFjY2Vzc19tb2RlOworCXJzcC0+bGlua19tdHUgPSA0ODsKKworCWNsaWVu dC0+ZGF0YV9mZCA9IGdhdGV3YXlfZ2V0X3Njb19mZChkZXYpOworCisJdW5peF9pcGNfc2VuZG1z ZyhjbGllbnQsICZyc3AtPmgpOworfQorCiBzdGF0aWMgdm9pZCBoZWFkc2V0X3Jlc3VtZV9jb21w bGV0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKIHsKIAlzdHJ1 Y3QgdW5peF9jbGllbnQgKmNsaWVudCA9IHVzZXJfZGF0YTsKQEAgLTM0Myw2ICszNzQsMzUgQEAg ZmFpbGVkOgogCXVuaXhfaXBjX2Vycm9yKGNsaWVudCwgQlRfU1RBUlRfU1RSRUFNLCBFSU8pOwog fQogCitzdGF0aWMgdm9pZCBnYXRld2F5X3Jlc3VtZV9jb21wbGV0ZShzdHJ1Y3QgYXVkaW9fZGV2 aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVu dCA9IHVzZXJfZGF0YTsKKwljaGFyIGJ1ZltCVF9TVUdHRVNURURfQlVGRkVSX1NJWkVdOworCXN0 cnVjdCBidF9zdGFydF9zdHJlYW1fcnNwICpyc3AgPSAodm9pZCAqKSBidWY7CisJc3RydWN0IGJ0 X25ld19zdHJlYW1faW5kICppbmQgPSAodm9pZCAqKSBidWY7CisKKwltZW1zZXQoYnVmLCAwLCBz aXplb2YoYnVmKSk7CisJcnNwLT5oLnR5cGUgPSBCVF9SRVNQT05TRTsKKwlyc3AtPmgubmFtZSA9 IEJUX1NUQVJUX1NUUkVBTTsKKwlyc3AtPmgubGVuZ3RoID0gc2l6ZW9mKCpyc3ApOworCisJdW5p eF9pcGNfc2VuZG1zZyhjbGllbnQsICZyc3AtPmgpOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9m KGJ1ZikpOworCWluZC0+aC50eXBlID0gQlRfSU5ESUNBVElPTjsKKwlpbmQtPmgubmFtZSA9IEJU X05FV19TVFJFQU07CisJaW5kLT5oLmxlbmd0aCA9IHNpemVvZigqaW5kKTsKKworCXVuaXhfaXBj X3NlbmRtc2coY2xpZW50LCAmaW5kLT5oKTsKKworCWNsaWVudC0+ZGF0YV9mZCA9IGdhdGV3YXlf Z2V0X3Njb19mZChkZXYpOworCWlmICh1bml4X3NlbmRtc2dfZmQoY2xpZW50LT5zb2NrLCBjbGll bnQtPmRhdGFfZmQpIDwgMCkgeworCQllcnJvcigidW5peF9zZW5kbXNnX2ZkOiAlcyglZCkiLCBz dHJlcnJvcihlcnJubyksIGVycm5vKTsKKwkJdW5peF9pcGNfZXJyb3IoY2xpZW50LCBCVF9TVEFS VF9TVFJFQU0sIEVJTyk7CisJfQorCWNsaWVudC0+cmVxX2lkID0gMDsKK30KKwogc3RhdGljIHZv aWQgaGVhZHNldF9zdXNwZW5kX2NvbXBsZXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdm9p ZCAqdXNlcl9kYXRhKQogewogCXN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50ID0gdXNlcl9kYXRh OwpAQCAtNjQyLDcgKzcwMiw2IEBAIHN0YXRpYyB2b2lkIHN0YXJ0X2Rpc2NvdmVyeShzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXYsIHN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50CiB7CiAJc3RydWN0 IGEyZHBfZGF0YSAqYTJkcDsKIAlpbnQgZXJyID0gMDsKLQogCWNsaWVudC0+dHlwZSA9IHNlbGVj dF9zZXJ2aWNlKGRldiwgY2xpZW50LT5pbnRlcmZhY2UpOwogCiAJc3dpdGNoIChjbGllbnQtPnR5 cGUpIHsKQEAgLTY2NCw2ICs3MjMsNyBAQCBzdGF0aWMgdm9pZCBzdGFydF9kaXNjb3Zlcnkoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2LCBzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudAogCQlicmVh azsKIAogCWNhc2UgVFlQRV9IRUFEU0VUOgorCWNhc2UgVFlQRV9HQVRFV0FZOgogCQloZWFkc2V0 X2Rpc2NvdmVyeV9jb21wbGV0ZShkZXYsIGNsaWVudCk7CiAJCWJyZWFrOwogCkBAIC02NzcsNyAr NzM3LDcgQEAgc3RhdGljIHZvaWQgc3RhcnRfZGlzY292ZXJ5KHN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldiwgc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQKIAlyZXR1cm47CiAKIGZhaWxlZDoKLQl1 bml4X2lwY19lcnJvcihjbGllbnQsIEJUX0dFVF9DQVBBQklMSVRJRVMsIGVyciA/IDogRUlPKTsK Kwl1bml4X2lwY19lcnJvcihjbGllbnQsIEJUX0dFVF9DQVBBQklMSVRJRVMsIEVJTyk7CiB9CiAK IHN0YXRpYyB2b2lkIHN0YXJ0X2NvbmZpZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHN0cnVj dCB1bml4X2NsaWVudCAqY2xpZW50KQpAQCAtNzI3LDYgKzc4NywxNCBAQCBzdGF0aWMgdm9pZCBz dGFydF9jb25maWcoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBzdHJ1Y3QgdW5peF9jbGllbnQg KmNsaWVudCkKIAkJCQkJaHMtPmxvY2ssIGNsaWVudCk7CiAJCWNsaWVudC0+Y2FuY2VsID0gaGVh ZHNldF9jYW5jZWxfc3RyZWFtOwogCQlicmVhazsKKwljYXNlIFRZUEVfR0FURVdBWToKKwkJaWYg KGdhdGV3YXlfY29uZmlnX3N0cmVhbShkZXYsIGdhdGV3YXlfc2V0dXBfY29tcGxldGUsIGNsaWVu dCkgPj0gMCkgeworCQkJY2xpZW50LT5jYW5jZWwgPSBnYXRld2F5X2NhbmNlbF9zdHJlYW07CisJ CQlpZCA9IDE7CisJCX0gZWxzZSB7CisJCQlpZCA9IDA7CisJCX0KKwkJYnJlYWs7CiAKIAlkZWZh dWx0OgogCQllcnJvcigiTm8ga25vd24gc2VydmljZXMgZm9yIGRldmljZSIpOwpAQCAtNzg2LDYg Kzg1NCwxNSBAQCBzdGF0aWMgdm9pZCBzdGFydF9yZXN1bWUoc3RydWN0IGF1ZGlvX2RldmljZSAq ZGV2LCBzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCkKIAkJY2xpZW50LT5jYW5jZWwgPSBoZWFk c2V0X2NhbmNlbF9zdHJlYW07CiAJCWJyZWFrOwogCisJY2FzZSBUWVBFX0dBVEVXQVk6CisJCWlm IChnYXRld2F5X3JlcXVlc3Rfc3RyZWFtKGRldiwgZ2F0ZXdheV9yZXN1bWVfY29tcGxldGUsIGNs aWVudCkpeworCQkJaWQgPSAxOworCQl9IGVsc2UgeworCQkJaWQgPSAwOworCQl9CisJCWNsaWVu dC0+Y2FuY2VsID0gZ2F0ZXdheV9jYW5jZWxfc3RyZWFtOworCQlicmVhazsKKwogCWRlZmF1bHQ6 CiAJCWVycm9yKCJObyBrbm93biBzZXJ2aWNlcyBmb3IgZGV2aWNlIik7CiAJCWdvdG8gZmFpbGVk OwpAQCAtNzk1LDcgKzg3Miw2IEBAIHN0YXRpYyB2b2lkIHN0YXJ0X3Jlc3VtZShzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYsIHN0cnVjdCB1bml4X2NsaWVudCAqY2xpZW50KQogCQllcnJvcigic3Rh cnRfcmVzdW1lOiByZXN1bWUgZmFpbGVkIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQogCXJldHVy bjsKIAogZmFpbGVkOgpAQCAtODQwLDYgKzkxNiwxMyBAQCBzdGF0aWMgdm9pZCBzdGFydF9zdXNw ZW5kKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgc3RydWN0IHVuaXhfY2xpZW50ICpjbGllbnQp CiAJCWNsaWVudC0+Y2FuY2VsID0gaGVhZHNldF9jYW5jZWxfc3RyZWFtOwogCQlicmVhazsKIAor CWNhc2UgVFlQRV9HQVRFV0FZOgorCQlnYXRld2F5X3N1c3BlbmRfc3RyZWFtKGRldik7CisJCWNs aWVudC0+Y2FuY2VsID0gZ2F0ZXdheV9jYW5jZWxfc3RyZWFtOworCQloZWFkc2V0X3N1c3BlbmRf Y29tcGxldGUoZGV2LCBjbGllbnQpOworCQlpZCA9IDE7CisJCWJyZWFrOworCiAJZGVmYXVsdDoK IAkJZXJyb3IoIk5vIGtub3duIHNlcnZpY2VzIGZvciBkZXZpY2UiKTsKIAkJZ290byBmYWlsZWQ7 CkBAIC04NjksMTkgKzk1MiwyNSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZ2V0Y2FwYWJpbGl0aWVz X3JlcShzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCwKIAkJY2xpZW50LT5pbnRlcmZhY2UgPSBO VUxMOwogCX0KIAotCWlmIChyZXEtPnRyYW5zcG9ydCA9PSBCVF9DQVBBQklMSVRJRVNfVFJBTlNQ T1JUX1NDTykKLQkJY2xpZW50LT5pbnRlcmZhY2UgPSBnX3N0cmR1cChBVURJT19IRUFEU0VUX0lO VEVSRkFDRSk7Ci0JZWxzZSBpZiAocmVxLT50cmFuc3BvcnQgPT0gQlRfQ0FQQUJJTElUSUVTX1RS QU5TUE9SVF9BMkRQKQorCWlmIChyZXEtPnRyYW5zcG9ydCA9PSBCVF9DQVBBQklMSVRJRVNfVFJB TlNQT1JUX1NDTykgeworCQlpZiAocmVxLT5mbGFncyAmIEJUX0ZMQUdfTUFTVEVSKSB7CisJCQlj bGllbnQtPmludGVyZmFjZSA9IGdfc3RyZHVwKEFVRElPX0dBVEVXQVlfSU5URVJGQUNFKTsKKwkJ fSBlbHNlIHsKKwkJCWNsaWVudC0+aW50ZXJmYWNlID0gZ19zdHJkdXAoQVVESU9fSEVBRFNFVF9J TlRFUkZBQ0UpOworCQl9CisJfSBlbHNlIGlmIChyZXEtPnRyYW5zcG9ydCA9PSBCVF9DQVBBQklM SVRJRVNfVFJBTlNQT1JUX0EyRFApIHsKIAkJY2xpZW50LT5pbnRlcmZhY2UgPSBnX3N0cmR1cChB VURJT19TSU5LX0lOVEVSRkFDRSk7CisJfQogCi0JaWYgKCFtYW5hZ2VyX2ZpbmRfZGV2aWNlKCZi ZGFkZHIsIE5VTEwsIEZBTFNFKSkKKwlpZiAoIW1hbmFnZXJfZmluZF9kZXZpY2UoJmJkYWRkciwg TlVMTCwgRkFMU0UpKSB7CiAJCWdvdG8gZmFpbGVkOworCX0KIAogCWRldiA9IG1hbmFnZXJfZmlu ZF9kZXZpY2UoJmJkYWRkciwgY2xpZW50LT5pbnRlcmZhY2UsIFRSVUUpOwogCWlmICghZGV2KSB7 Ci0JCWlmIChyZXEtPmZsYWdzICYgQlRfRkxBR19BVVRPQ09OTkVDVCkKKwkJaWYgKHJlcS0+Zmxh Z3MgJiBCVF9GTEFHX0FVVE9DT05ORUNUKSB7CiAJCQlkZXYgPSBtYW5hZ2VyX2ZpbmRfZGV2aWNl KCZiZGFkZHIsIGNsaWVudC0+aW50ZXJmYWNlLCBGQUxTRSk7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJ CQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTk5OCwxOCArMTA4Nyw3IEBAIHN0YXRpYyB2b2lkIGhh bmRsZV9zZXRjb25maWd1cmF0aW9uX3JlcShzdHJ1Y3QgdW5peF9jbGllbnQgKmNsaWVudCwKIAog CXN0cjJiYShyZXEtPmRldmljZSwgJmJkYWRkcik7CiAKLQlpZiAoY2xpZW50LT5pbnRlcmZhY2Up IHsKLQkJZ19mcmVlKGNsaWVudC0+aW50ZXJmYWNlKTsKLQkJY2xpZW50LT5pbnRlcmZhY2UgPSBO VUxMOwotCX0KLQotCWlmIChyZXEtPmNvZGVjLnRyYW5zcG9ydCA9PSBCVF9DQVBBQklMSVRJRVNf VFJBTlNQT1JUX1NDTykgewotCQllcnIgPSBoYW5kbGVfc2NvX3RyYW5zcG9ydChjbGllbnQsIHJl cSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQllcnIgPSAtZXJyOwotCQkJZ290byBmYWlsZWQ7Ci0J CX0KLQl9IGVsc2UgaWYgKHJlcS0+Y29kZWMudHJhbnNwb3J0ID09IEJUX0NBUEFCSUxJVElFU19U UkFOU1BPUlRfQTJEUCkgeworCWlmIChyZXEtPmNvZGVjLnRyYW5zcG9ydCA9PSBCVF9DQVBBQklM SVRJRVNfVFJBTlNQT1JUX0EyRFApIHsKIAkJZXJyID0gaGFuZGxlX2EyZHBfdHJhbnNwb3J0KGNs aWVudCwgcmVxKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWVyciA9IC1lcnI7CkBAIC0xMTEwLDcg KzExODgsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gY2xpZW50X2NiKEdJT0NoYW5uZWwgKmNoYW4sIEdJ T0NvbmRpdGlvbiBjb25kLCBncG9pbnRlciBkYXRhKQogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJ CX0KLQogCQlpZiAoY2xpZW50LT5jYW5jZWwgJiYgY2xpZW50LT5yZXFfaWQgPiAwKQogCQkJY2xp ZW50LT5jYW5jZWwoY2xpZW50LT5kZXYsIGNsaWVudC0+cmVxX2lkKTsKIAkJZ290byBmYWlsZWQ7 CkBAIC0xMTU5LDcgKzEyMzYsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gY2xpZW50X2NiKEdJT0NoYW5u ZWwgKmNoYW4sIEdJT0NvbmRpdGlvbiBjb25kLCBncG9pbnRlciBkYXRhKQogCQllcnJvcigiQXVk aW8gQVBJOiByZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2UgbmFtZSAlZCIsCiAJCQkJbXNnaGRy LT5uYW1lKTsKIAl9Ci0KIAlyZXR1cm4gVFJVRTsKIAogZmFpbGVkOgo= ------=_Part_27480_22579537.1232112162869--