From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Stultz Subject: [EARLY RFC][PATCH 1/4] dma-buf: Add dma-buf pools framework Date: Wed, 20 Feb 2019 23:40:27 -0800 Message-ID: <1550734830-23499-2-git-send-email-john.stultz@linaro.org> References: <1550734830-23499-1-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pl1-x644.google.com (mail-pl1-x644.google.com [IPv6:2607:f8b0:4864:20::644]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC03D89364 for ; Thu, 21 Feb 2019 07:40:36 +0000 (UTC) Received: by mail-pl1-x644.google.com with SMTP id 101so13737845pld.6 for ; Wed, 20 Feb 2019 23:40:36 -0800 (PST) In-Reply-To: <1550734830-23499-1-git-send-email-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laura Abbott Cc: Chenbo Feng , Alistair Strachan , Liam Mark , "Andrew F . Davis" , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBkbWEtYnVmIHBvb2xzIGZyYW1ld29yay4KClRoaXMg ZnJhbWV3b3JrIGFsbG93cyBmb3IgZGlmZmVyZW50IHBvb2wgaW1wbGVtZW50YXRpb25zIHRvIGJl CmNyZWF0ZWQsIHdoaWNoIGFjdCBhcyBkbWEtYnVmIGV4cG9ydGVycywgYWxsb3dpbmcgdXNlcmxh bmQgdG8KYWxsb2NhdGUgc3BlY2lmaWMgdHlwZXMgb2YgbWVtb3J5IGZvciB1c2UgaW4gZG1hLWJ1 ZiBzaGFyaW5nLgoKVGhpcyByZXNlbWJsZXMgdGhlIEFuZHJvaWQgSU9OIGZyYW1ld29yayBpbiB0 aGF0IGl0IHRha2VzIHRoYXQKY29kZSBhbmQgcmVuYW1lcyBtb3N0IG9mIHRoZSB2YXJpYWJsZXMu IChGb2xsb3dpbmcgUmFmYWVsCld5c29ja2kncyBlYXJsaWVyIHRoZW9yeSB0aGF0IHRoZSAiZWFz aWVzdCB3YXkgdG8gc2VsbCBhIG9uY2UKcmVqZWN0ZWQgZmVhdHVyZSBpcyB0byBhZHZlcnRpc2Ug aXQgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSIgOikKCkhvd2V2ZXIsIHRoZSBBUEkgaGFzIGJlZW4g Z3JlYXRseSBzaW1wbGlmaWVkIGNvbXBhcmVkIHRvIElPTi4KVGhpcyBwYXRjaHNldCBleHRlbmRz IHNvbWUgb2YgbXkgKGFuZCBCZW5qYW1pbidzKSBlYXJsaWVyIHdvcmsKd2l0aCB0aGUgSU9OIHBl ci1oZWFwIGRldmljZSBub2Rlcy4KCkVhY2ggcG9vbCAocHJldmlvdXNseSAiaGVhcCIgaW4gSU9O KSBoYXMgaXRzIG93biBkZXZpY2Ugbm9kZSwKd2hpY2ggb25lIGNhbiBhbGxvY2F0ZSBmcm9tIHVz aW5nIHRoZSBETUFCVUZfUE9PTF9JT0NfQUxMT0MKd2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvIHRo ZSBJT05fSU9DX0FMTE9DIGNhbGwuCgpUaGVyZSBpcyBubyBlcXVpdmFsZW50IElPTl9JT0NfSEVB UF9RVUVSWSBpbnRlcmZhY2UsIGFzIHRoZQpwb29scyBhbGwgaGF2ZSB0aGVpciBvd24gZGV2aWNl IG5vZGVzLgoKQWRkaXRpb25hbGx5LCBhbnkgdW51c2VkIGNvZGUgZnJvbSBJT04gd2FzIHJlbW92 ZWQuCgpOT1RFOiBSZXdvcmtlZCB0aGUgcGVyLXBvb2wgZGV2aWNlcyB0byBjcmVhdGUgYSBwcm9w ZXIgY2xhc3Mgc28KQW5kcm9pZCBjYW4gaGF2ZSBhIG5pY2UgL2Rldi9kbWFidWZfcG9vbHMvIGRp cmVjdG9yeS4gSXRzIHdvcmtpbmcKYnV0IEknbSBhbG1vc3Qgc3VyZSBpZiBJIGRpZCBpdCB3cm9u ZywgYXMgaXRzIG11Y2ggbW9yZSBjb21wbGV4CnRoZW4ganVzdCB1c2luZyBhIG1pc2NkZXZpY2Uu IEV4dHJhIHJldmlldyB3b3VsZCBiZSBoZWxwZnVsLgoKQ2M6IExhdXJhIEFiYm90dCA8bGFiYm90 dEByZWRoYXQuY29tPgpDYzogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxp bmFyby5vcmc+CkNjOiBTdW1pdCBTZW13YWwgPHN1bWl0LnNlbXdhbEBsaW5hcm8ub3JnPgpDYzog TGlhbSBNYXJrIDxsbWFya0Bjb2RlYXVyb3JhLm9yZz4KQ2M6IEJyaWFuIFN0YXJrZXkgPEJyaWFu LlN0YXJrZXlAYXJtLmNvbT4KQ2M6IEFuZHJldyBGLiBEYXZpcyA8YWZkQHRpLmNvbT4KQ2M6IENo ZW5ibyBGZW5nIDxmZW5nY0Bnb29nbGUuY29tPgpDYzogQWxpc3RhaXIgU3RyYWNoYW4gPGFzdHJh Y2hhbkBnb29nbGUuY29tPgpDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpTaWdu ZWQtb2ZmLWJ5OiBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4KLS0tCiBNQUlO VEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKwogZHJpdmVycy9kbWEtYnVm L0tjb25maWcgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS1idWYvcG9vbHMvS2NvbmZpZyAgICAgICAg fCAgMTAgKwogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL01ha2VmaWxlICAgICAgIHwgICAyICsKIGRy aXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMuYyB8IDY3MCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5o IHwgMjQ0ICsrKysrKysrKysrKysKIGRyaXZlcnMvZG1hLWJ1Zi9wb29scy9wb29sLWhlbHBlcnMu YyB8IDMxNyArKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL3Bvb2wtaW9j dGwuYyAgIHwgIDk0ICsrKysrCiBpbmNsdWRlL3VhcGkvbGludXgvZG1hYnVmLXBvb2xzLmggICAg fCAgNTkgKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAxNDEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvcG9vbHMvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZG1hLWJ1Zi9wb29scy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9wb29scy9wb29sLWhlbHBlcnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZG1hLWJ1Zi9wb29scy9wb29sLWlvY3RsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL3VhcGkvbGludXgvZG1hYnVmLXBvb2xzLmgKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBi L01BSU5UQUlORVJTCmluZGV4IDhlNzk4Y2UuLjZiYzNhYjAgMTAwNjQ0Ci0tLSBhL01BSU5UQUlO RVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00NjE0LDYgKzQ2MTQsMTkgQEAgRjoJaW5jbHVkZS9s aW51eC8qZmVuY2UuaAogRjoJRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1idWYucnN0CiBU OglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZHJtL2RybS1taXNjCiAKK0RNQS1C VUYgUE9PTFMgRlJBTUVXT1JLCitNOglMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4K K1I6CUxpYW0gTWFyayA8bG1hcmtAY29kZWF1cm9yYS5vcmc+CitSOglCcmlhbiBTdGFya2V5IDxC cmlhbi5TdGFya2V5QGFybS5jb20+CitSOgkiQW5kcmV3IEYuIERhdmlzIiA8YWZkQHRpLmNvbT4K K1I6CUpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgorUzoJTWFpbnRhaW5lZAor TDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitMOglkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCitMOglsaW5hcm8tbW0tc2lnQGxpc3RzLmxpbmFyby5vcmcgKG1vZGVyYXRlZCBm b3Igbm9uLXN1YnNjcmliZXJzKQorRjoJZHJpdmVycy9kbWEtYnVmL3Bvb2xzLyoKK1Q6CWdpdCBn aXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJtLW1pc2MKKwogRE1BIEdFTkVSSUMg T0ZGTE9BRCBFTkdJTkUgU1VCU1lTVEVNCiBNOglWaW5vZCBLb3VsIDx2a291bEBrZXJuZWwub3Jn PgogTDoJZG1hZW5naW5lQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEt YnVmL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwppbmRleCAyZTVhMGZhLi5jNzQ2 NTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZworKysgYi9kcml2ZXJzL2Rt YS1idWYvS2NvbmZpZwpAQCAtMzksNCArMzksNiBAQCBjb25maWcgVURNQUJVRgogCSAgQSBkcml2 ZXIgdG8gbGV0IHVzZXJzcGFjZSB0dXJuIG1lbWZkIHJlZ2lvbnMgaW50byBkbWEtYnVmcy4KIAkg IFFlbXUgY2FuIHVzZSB0aGlzIHRvIGNyZWF0ZSBob3N0IGRtYWJ1ZnMgZm9yIGd1ZXN0IGZyYW1l YnVmZmVycy4KIAorc291cmNlICJkcml2ZXJzL2RtYS1idWYvcG9vbHMvS2NvbmZpZyIKKwogZW5k bWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlCmluZGV4IDA5MTNhNmMuLjljMjk1ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv ZG1hLWJ1Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKQEAgLTEsNCAr MSw1IEBACiBvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8g cmVzZXJ2YXRpb24ubyBzZXFuby1mZW5jZS5vCitvYmoteQkJCQkrPSBwb29scy8KIG9iai0kKENP TkZJR19TWU5DX0ZJTEUpCQkrPSBzeW5jX2ZpbGUubwogb2JqLSQoQ09ORklHX1NXX1NZTkMpCQkr PSBzd19zeW5jLm8gc3luY19kZWJ1Zy5vCiBvYmotJChDT05GSUdfVURNQUJVRikJCSs9IHVkbWFi dWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL0tjb25maWcgYi9kcml2ZXJz L2RtYS1idWYvcG9vbHMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5jYWE3ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL0tjb25m aWcKQEAgLTAsMCArMSwxMCBAQAorbWVudWNvbmZpZyBETUFCVUZfUE9PTFMKKwlib29sICJETUEt QlVGIFVzZXJsYW5kIE1lbW9yeSBQb29scyIKKwlkZXBlbmRzIG9uIEhBU19ETUEgJiYgTU1VCisJ c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisJc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSCisJaGVs cAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgRE1BLUJVRiB1c2VybGFuZCwg bWVtb3J5IHBvb2xzLAorCSAgd2hpY2ggYWxsb3cgdXNlcnNwYWNlIHRvIGFsbG9jYXRlIGRtYS1i dWZzIHRoYXQgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuCisJICBkcml2ZXJzLgorCSAgSWYgeW91J3Jl IG5vdCB1c2luZyBBbmRyb2lkIGl0cyBwcm9iYWJseSBzYWZlIHRvIHNheSBOIGhlcmUuCmRpZmYg LS1naXQgYS9kcml2ZXJzL2RtYS1idWYvcG9vbHMvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYv cG9vbHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiMTI4 NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9NYWtlZmlsZQpAQCAt MCwwICsxLDIgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKK29iai0kKENP TkZJR19ETUFCVUZfUE9PTFMpCQkrPSBkbWFidWYtcG9vbHMubyBwb29sLWlvY3RsLm8gcG9vbC1o ZWxwZXJzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMu YyBiL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9kbWFidWYtcG9vbHMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43MDZiMGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9k bWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5jCkBAIC0wLDAgKzEsNjcwIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIGRyaXZlcnMvZG1hLWJ1Zi9wb29scy9k bWFidWYtcG9vbHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4KKyAq IENvcHlyaWdodCAoQykgMjAxOSBMaW5hcm8gTHRkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9h bm9uX2lub2Rlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgv ZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRl IDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KKyNpbmNsdWRlIDxs aW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51 eC9tbV90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3NjaGVkL3Rhc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv dWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgImRtYWJ1 Zi1wb29scy5oIgorCisjZGVmaW5lIERFVk5BTUUgImRtYWJ1Zl9wb29scyIKKworI2RlZmluZSBO VU1fUE9PTF9NSU5PUlMgMTI4CitzdGF0aWMgREVGSU5FX0lEUihkbWFidWZfcG9vbF9pZHIpOwor c3RhdGljIERFRklORV9NVVRFWChtaW5vcl9sb2NrKTsgLyogUHJvdGVjdCBpZHIgYWNjZXNzZXMg Ki8KKworc3RydWN0IGRtYWJ1Zl9wb29sX2RldmljZSB7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSBs b2NrOworCXN0cnVjdCBwbGlzdF9oZWFkIHBvb2xzOworCXN0cnVjdCBkZW50cnkgKmRlYnVnX3Jv b3Q7CisJZGV2X3QgZGV2aWNlX2RldnQ7CisJc3RydWN0IGNsYXNzICpwb29sX2NsYXNzOworfTsK Kworc3RhdGljIHN0cnVjdCBkbWFidWZfcG9vbF9kZXZpY2UgKmludGVybmFsX2RldjsKK3N0YXRp YyBpbnQgcG9vbF9pZDsKKworLyogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQg d2hpbGUgZGV2LT5sb2NrIGlzIGhlbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVm ZmVyICpkbWFidWZfcG9vbF9idWZmZXJfY3JlYXRlKAorCQkJCQkJc3RydWN0IGRtYWJ1Zl9wb29s ICpwb29sLAorCQkJCQkJc3RydWN0IGRtYWJ1Zl9wb29sX2RldmljZSAqZGV2LAorCQkJCQkJdW5z aWduZWQgbG9uZyBsZW4sCisJCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBk bWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgcmV0OworCisJYnVmZmVyID0ga3phbGxv YyhzaXplb2YoKmJ1ZmZlciksIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKKworCWJ1ZmZlci0+cG9vbCA9IHBvb2w7CisJYnVmZmVyLT5mbGFn cyA9IGZsYWdzOworCWJ1ZmZlci0+c2l6ZSA9IGxlbjsKKworCXJldCA9IHBvb2wtPm9wcy0+YWxs b2NhdGUocG9vbCwgYnVmZmVyLCBsZW4sIGZsYWdzKTsKKworCWlmIChyZXQpIHsKKwkJaWYgKCEo cG9vbC0+ZmxhZ3MgJiBETUFCVUZfUE9PTF9GTEFHX0RFRkVSX0ZSRUUpKQorCQkJZ290byBlcnIy OworCisJCWRtYWJ1Zl9wb29sX2ZyZWVsaXN0X2RyYWluKHBvb2wsIDApOworCQlyZXQgPSBwb29s LT5vcHMtPmFsbG9jYXRlKHBvb2wsIGJ1ZmZlciwgbGVuLCBmbGFncyk7CisJCWlmIChyZXQpCisJ CQlnb3RvIGVycjI7CisJfQorCisJaWYgKCFidWZmZXItPnNnX3RhYmxlKSB7CisJCVdBUk5fT05D RSgxLCAiVGhpcyBwb29sIG5lZWRzIHRvIHNldCB0aGUgc2d0YWJsZSIpOworCQlyZXQgPSAtRUlO VkFMOworCQlnb3RvIGVycjE7CisJfQorCisJc3Bpbl9sb2NrKCZwb29sLT5zdGF0X2xvY2spOwor CXBvb2wtPm51bV9vZl9idWZmZXJzKys7CisJcG9vbC0+bnVtX29mX2FsbG9jX2J5dGVzICs9IGxl bjsKKwlpZiAocG9vbC0+bnVtX29mX2FsbG9jX2J5dGVzID4gcG9vbC0+YWxsb2NfYnl0ZXNfd20p CisJCXBvb2wtPmFsbG9jX2J5dGVzX3dtID0gcG9vbC0+bnVtX29mX2FsbG9jX2J5dGVzOworCXNw aW5fdW5sb2NrKCZwb29sLT5zdGF0X2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmJ1ZmZlci0+ YXR0YWNobWVudHMpOworCW11dGV4X2luaXQoJmJ1ZmZlci0+bG9jayk7CisJcmV0dXJuIGJ1ZmZl cjsKKworZXJyMToKKwlwb29sLT5vcHMtPmZyZWUoYnVmZmVyKTsKK2VycjI6CisJa2ZyZWUoYnVm ZmVyKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCit2b2lkIGRtYWJ1Zl9wb29sX2J1ZmZl cl9kZXN0cm95KHN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlcikKK3sKKwlpZiAoYnVm ZmVyLT5rbWFwX2NudCA+IDApIHsKKwkJcHJfd2Fybl9vbmNlKCIlczogYnVmZmVyIHN0aWxsIG1h cHBlZCBpbiB0aGUga2VybmVsXG4iLAorCQkJICAgICBfX2Z1bmNfXyk7CisJCWJ1ZmZlci0+cG9v bC0+b3BzLT51bm1hcF9rZXJuZWwoYnVmZmVyLT5wb29sLCBidWZmZXIpOworCX0KKwlidWZmZXIt PnBvb2wtPm9wcy0+ZnJlZShidWZmZXIpOworCXNwaW5fbG9jaygmYnVmZmVyLT5wb29sLT5zdGF0 X2xvY2spOworCWJ1ZmZlci0+cG9vbC0+bnVtX29mX2J1ZmZlcnMtLTsKKwlidWZmZXItPnBvb2wt Pm51bV9vZl9hbGxvY19ieXRlcyAtPSBidWZmZXItPnNpemU7CisJc3Bpbl91bmxvY2soJmJ1ZmZl ci0+cG9vbC0+c3RhdF9sb2NrKTsKKworCWtmcmVlKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lk IF9kbWFidWZfcG9vbF9idWZmZXJfZGVzdHJveShzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpi dWZmZXIpCit7CisJc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sID0gYnVmZmVyLT5wb29sOworCisJ aWYgKHBvb2wtPmZsYWdzICYgRE1BQlVGX1BPT0xfRkxBR19ERUZFUl9GUkVFKQorCQlkbWFidWZf cG9vbF9mcmVlbGlzdF9hZGQocG9vbCwgYnVmZmVyKTsKKwllbHNlCisJCWRtYWJ1Zl9wb29sX2J1 ZmZlcl9kZXN0cm95KGJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkICpkbWFidWZfcG9vbF9idWZm ZXJfa21hcF9nZXQoc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKQoreworCXZvaWQg KnZhZGRyOworCisJaWYgKGJ1ZmZlci0+a21hcF9jbnQpIHsKKwkJYnVmZmVyLT5rbWFwX2NudCsr OworCQlyZXR1cm4gYnVmZmVyLT52YWRkcjsKKwl9CisJdmFkZHIgPSBidWZmZXItPnBvb2wtPm9w cy0+bWFwX2tlcm5lbChidWZmZXItPnBvb2wsIGJ1ZmZlcik7CisJaWYgKFdBUk5fT05DRSghdmFk ZHIsCisJCSAgICAgICJwb29sLT5vcHMtPm1hcF9rZXJuZWwgc2hvdWxkIHJldHVybiBFUlJfUFRS IG9uIGVycm9yIikpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChJU19FUlIodmFk ZHIpKQorCQlyZXR1cm4gdmFkZHI7CisJYnVmZmVyLT52YWRkciA9IHZhZGRyOworCWJ1ZmZlci0+ a21hcF9jbnQrKzsKKwlyZXR1cm4gdmFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9wb29s X2J1ZmZlcl9rbWFwX3B1dChzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIpCit7CisJ YnVmZmVyLT5rbWFwX2NudC0tOworCWlmICghYnVmZmVyLT5rbWFwX2NudCkgeworCQlidWZmZXIt PnBvb2wtPm9wcy0+dW5tYXBfa2VybmVsKGJ1ZmZlci0+cG9vbCwgYnVmZmVyKTsKKwkJYnVmZmVy LT52YWRkciA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpkdXBfc2df dGFibGUoc3RydWN0IHNnX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKm5ld190 YWJsZTsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csICpuZXdfc2c7CisK KwluZXdfdGFibGUgPSBremFsbG9jKHNpemVvZigqbmV3X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFuZXdfdGFibGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gc2df YWxsb2NfdGFibGUobmV3X3RhYmxlLCB0YWJsZS0+bmVudHMsIEdGUF9LRVJORUwpOworCWlmIChy ZXQpIHsKKwkJa2ZyZWUobmV3X3RhYmxlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJ fQorCisJbmV3X3NnID0gbmV3X3RhYmxlLT5zZ2w7CisJZm9yX2VhY2hfc2codGFibGUtPnNnbCwg c2csIHRhYmxlLT5uZW50cywgaSkgeworCQltZW1jcHkobmV3X3NnLCBzZywgc2l6ZW9mKCpzZykp OworCQluZXdfc2ctPmRtYV9hZGRyZXNzID0gMDsKKwkJbmV3X3NnID0gc2dfbmV4dChuZXdfc2cp OworCX0KKworCXJldHVybiBuZXdfdGFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZHVwZWRf dGFibGUoc3RydWN0IHNnX3RhYmxlICp0YWJsZSkKK3sKKwlzZ19mcmVlX3RhYmxlKHRhYmxlKTsK KwlrZnJlZSh0YWJsZSk7Cit9CisKK3N0cnVjdCBkbWFidWZfcG9vbHNfYXR0YWNobWVudCB7CisJ c3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzZ190YWJsZSAqdGFibGU7CisJc3RydWN0IGxp c3RfaGVhZCBsaXN0OworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKK307CisKK3N0YXRp YyBpbnQgZG1hYnVmX3Bvb2xfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCisJCQkgICAg ICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KQoreworCXN0cnVjdCBkbWFi dWZfcG9vbHNfYXR0YWNobWVudCAqYTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOworCXN0cnVj dCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKworCWEgPSBremFs bG9jKHNpemVvZigqYSksIEdGUF9LRVJORUwpOworCWlmICghYSkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwl0YWJsZSA9IGR1cF9zZ190YWJsZShidWZmZXItPnNnX3RhYmxlKTsKKwlpZiAoSVNfRVJS KHRhYmxlKSkgeworCQlrZnJlZShhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYS0+dGFi bGUgPSB0YWJsZTsKKwlhLT5kZXYgPSBhdHRhY2htZW50LT5kZXY7CisJYS0+ZGlyID0gRE1BX05P TkU7CisJSU5JVF9MSVNUX0hFQUQoJmEtPmxpc3QpOworCisJYXR0YWNobWVudC0+cHJpdiA9IGE7 CisKKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOworCWxpc3RfYWRkKCZhLT5saXN0LCAmYnVm ZmVyLT5hdHRhY2htZW50cyk7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9wb29sX2RldGF0Y2goc3RydWN0IGRtYV9i dWYgKmRtYWJ1ZiwKKwkJCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KQor eworCXN0cnVjdCBkbWFidWZfcG9vbHNfYXR0YWNobWVudCAqYSA9IGF0dGFjaG1lbnQtPnByaXY7 CisJc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyID0gZG1hYnVmLT5wcml2OworCXN0 cnVjdCBzZ190YWJsZSAqdGFibGU7CisKKwlpZiAoIWEpCisJCXJldHVybjsKKworCXRhYmxlID0g YS0+dGFibGU7CisJaWYgKHRhYmxlKSB7CisJCWlmIChhLT5kaXIgIT0gRE1BX05PTkUpCisJCQlk bWFfdW5tYXBfc2coYXR0YWNobWVudC0+ZGV2LCB0YWJsZS0+c2dsLCB0YWJsZS0+bmVudHMsCisJ CQkJICAgICBhLT5kaXIpOworCQlzZ19mcmVlX3RhYmxlKHRhYmxlKTsKKwl9CisKKwltdXRleF9s b2NrKCZidWZmZXItPmxvY2spOworCWxpc3RfZGVsKCZhLT5saXN0KTsKKwltdXRleF91bmxvY2so JmJ1ZmZlci0+bG9jayk7CisJZnJlZV9kdXBlZF90YWJsZShhLT50YWJsZSk7CisKKwlrZnJlZShh KTsKKwlhdHRhY2htZW50LT5wcml2ID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZ190YWJs ZSAqZG1hYnVmX3Bvb2xfbWFwX2RtYV9idWYoCisJCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaG1lbnQsCisJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikK K3sKKwlzdHJ1Y3QgZG1hYnVmX3Bvb2xzX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2htZW50LT5wcml2 OworCXN0cnVjdCBzZ190YWJsZSAqdGFibGU7CisKKwlpZiAoV0FSTl9PTihkaXJlY3Rpb24gPT0g RE1BX05PTkUgfHwgIWEpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmIChhLT5k aXIgPT0gZGlyZWN0aW9uKQorCQlyZXR1cm4gYS0+dGFibGU7CisKKwlpZiAoV0FSTl9PTihhLT5k aXIgIT0gRE1BX05PTkUpKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCisJdGFibGUgPSBh LT50YWJsZTsKKwlpZiAoIUlTX0VSUih0YWJsZSkpIHsKKwkJaWYgKCFkbWFfbWFwX3NnKGF0dGFj aG1lbnQtPmRldiwgdGFibGUtPnNnbCwgdGFibGUtPm5lbnRzLAorCQkJCWRpcmVjdGlvbikpIHsK KwkJCXRhYmxlID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJfSBlbHNlIHsKKwkJCWEtPmRpciA9IGRp cmVjdGlvbjsKKwkJfQorCX0KKwlyZXR1cm4gdGFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1 Zl9wb29sX3VubWFwX2RtYV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVu dCwKKwkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqdGFibGUsCisJCQkgICAgICBlbnVtIGRtYV9k YXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX3Bvb2xf bW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkK K3sKKwlzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIgPSBkbWFidWYtPnByaXY7CisJ aW50IHJldCA9IDA7CisKKwlpZiAoIWJ1ZmZlci0+cG9vbC0+b3BzLT5tYXBfdXNlcikgeworCQlw cl9lcnIoIiVzOiB0aGlzIHBvb2wgZG9lcyBub3QgZGVmaW5lIGEgbWV0aG9kIGZvciBtYXBwaW5n IHRvIHVzZXJzcGFjZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJaWYgKCEoYnVmZmVyLT5mbGFncyAmIERNQUJVRl9QT09MX0ZMQUdfQ0FDSEVEKSkK KwkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9w cm90KTsKKworCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7CisJLyogbm93IG1hcCBpdCB0byB1 c2Vyc3BhY2UgKi8KKwlyZXQgPSBidWZmZXItPnBvb2wtPm9wcy0+bWFwX3VzZXIoYnVmZmVyLT5w b29sLCBidWZmZXIsIHZtYSk7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJaWYg KHJldCkKKwkJcHJfZXJyKCIlczogZmFpbHVyZSBtYXBwaW5nIGJ1ZmZlciB0byB1c2Vyc3BhY2Vc biIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p ZCBkbWFidWZfcG9vbF9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKK3sK KwlzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIgPSBkbWFidWYtPnByaXY7CisKKwlf ZG1hYnVmX3Bvb2xfYnVmZmVyX2Rlc3Ryb3koYnVmZmVyKTsKK30KKworc3RhdGljIHZvaWQgKmRt YWJ1Zl9wb29sX2RtYV9idWZfa21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAorCQkJCQl1bnNp Z25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIg PSBkbWFidWYtPnByaXY7CisKKwlyZXR1cm4gYnVmZmVyLT52YWRkciArIG9mZnNldCAqIFBBR0Vf U0laRTsKK30KKworc3RhdGljIHZvaWQgZG1hYnVmX3Bvb2xfZG1hX2J1Zl9rdW5tYXAoc3RydWN0 IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCXZvaWQg KnB0cikKK3sKK30KKworc3RhdGljIGludCBkbWFidWZfcG9vbF9kbWFfYnVmX2JlZ2luX2NwdV9h Y2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rp b24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciA9IGRt YWJ1Zi0+cHJpdjsKKwl2b2lkICp2YWRkcjsKKwlzdHJ1Y3QgZG1hYnVmX3Bvb2xzX2F0dGFjaG1l bnQgKmE7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIFRPRE86IE1vdmUgdGhpcyBlbHNld2hl cmUgYmVjYXVzZSB3ZSBkb24ndCBhbHdheXMgbmVlZCBhIHZhZGRyCisJICovCisJaWYgKGJ1ZmZl ci0+cG9vbC0+b3BzLT5tYXBfa2VybmVsKSB7CisJCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7 CisJCXZhZGRyID0gZG1hYnVmX3Bvb2xfYnVmZmVyX2ttYXBfZ2V0KGJ1ZmZlcik7CisJCWlmIChJ U19FUlIodmFkZHIpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHZhZGRyKTsKKwkJCWdvdG8gdW5sb2Nr OworCQl9CisJCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKKwl9CisKKwltdXRleF9sb2Nr KCZidWZmZXItPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYSwgJmJ1ZmZlci0+YXR0YWNo bWVudHMsIGxpc3QpIHsKKwkJZG1hX3N5bmNfc2dfZm9yX2NwdShhLT5kZXYsIGEtPnRhYmxlLT5z Z2wsIGEtPnRhYmxlLT5uZW50cywKKwkJCQkgICAgZGlyZWN0aW9uKTsKKwl9CisKK3VubG9jazoK KwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBkbWFidWZfcG9vbF9kbWFfYnVmX2VuZF9jcHVfYWNjZXNzKHN0cnVjdCBkbWFfYnVmICpk bWFidWYsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorewor CXN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKKwlzdHJ1 Y3QgZG1hYnVmX3Bvb2xzX2F0dGFjaG1lbnQgKmE7CisKKwlpZiAoYnVmZmVyLT5wb29sLT5vcHMt Pm1hcF9rZXJuZWwpIHsKKwkJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKKwkJZG1hYnVmX3Bv b2xfYnVmZmVyX2ttYXBfcHV0KGJ1ZmZlcik7CisJCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2Nr KTsKKwl9CisKKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50 cnkoYSwgJmJ1ZmZlci0+YXR0YWNobWVudHMsIGxpc3QpIHsKKwkJZG1hX3N5bmNfc2dfZm9yX2Rl dmljZShhLT5kZXYsIGEtPnRhYmxlLT5zZ2wsIGEtPnRhYmxlLT5uZW50cywKKwkJCQkgICAgICAg ZGlyZWN0aW9uKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgZG1hX2J1Zl9vcHMgPSB7 CisJLm1hcF9kbWFfYnVmID0gZG1hYnVmX3Bvb2xfbWFwX2RtYV9idWYsCisJLnVubWFwX2RtYV9i dWYgPSBkbWFidWZfcG9vbF91bm1hcF9kbWFfYnVmLAorCS5tbWFwID0gZG1hYnVmX3Bvb2xfbW1h cCwKKwkucmVsZWFzZSA9IGRtYWJ1Zl9wb29sX2RtYV9idWZfcmVsZWFzZSwKKwkuYXR0YWNoID0g ZG1hYnVmX3Bvb2xfYXR0YWNoLAorCS5kZXRhY2ggPSBkbWFidWZfcG9vbF9kZXRhdGNoLAorCS5i ZWdpbl9jcHVfYWNjZXNzID0gZG1hYnVmX3Bvb2xfZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzLAor CS5lbmRfY3B1X2FjY2VzcyA9IGRtYWJ1Zl9wb29sX2RtYV9idWZfZW5kX2NwdV9hY2Nlc3MsCisJ Lm1hcCA9IGRtYWJ1Zl9wb29sX2RtYV9idWZfa21hcCwKKwkudW5tYXAgPSBkbWFidWZfcG9vbF9k bWFfYnVmX2t1bm1hcCwKK307CisKK2ludCBkbWFidWZfcG9vbF9hbGxvYyhzdHJ1Y3QgZG1hYnVm X3Bvb2wgKnBvb2wsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qg ZG1hYnVmX3Bvb2xfZGV2aWNlICpkZXYgPSBpbnRlcm5hbF9kZXY7CisJc3RydWN0IGRtYWJ1Zl9w b29sX2J1ZmZlciAqYnVmZmVyID0gTlVMTDsKKwlERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhl eHBfaW5mbyk7CisJaW50IGZkOworCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisKKwlwcl9kZWJ1 ZygiJXM6IHBvb2w6ICVzIGxlbiAlenUgZmxhZ3MgJXhcbiIsIF9fZnVuY19fLAorCQkgcG9vbC0+ bmFtZSwgbGVuLCBmbGFncyk7CisKKwlsZW4gPSBQQUdFX0FMSUdOKGxlbik7CisKKwlpZiAoIWxl bikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb3duX3JlYWQoJmRldi0+bG9jayk7CisJYnVmZmVy ID0gZG1hYnVmX3Bvb2xfYnVmZmVyX2NyZWF0ZShwb29sLCBkZXYsIGxlbiwgZmxhZ3MpOworCXVw X3JlYWQoJmRldi0+bG9jayk7CisKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisK KwlpZiAoSVNfRVJSKGJ1ZmZlcikpCisJCXJldHVybiBQVFJfRVJSKGJ1ZmZlcik7CisKKwlleHBf aW5mby5vcHMgPSAmZG1hX2J1Zl9vcHM7CisJZXhwX2luZm8uc2l6ZSA9IGJ1ZmZlci0+c2l6ZTsK KwlleHBfaW5mby5mbGFncyA9IE9fUkRXUjsKKwlleHBfaW5mby5wcml2ID0gYnVmZmVyOworCisJ ZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKKwlpZiAoSVNfRVJSKGRtYWJ1Zikp IHsKKwkJX2RtYWJ1Zl9wb29sX2J1ZmZlcl9kZXN0cm95KGJ1ZmZlcik7CisJCXJldHVybiBQVFJf RVJSKGRtYWJ1Zik7CisJfQorCisJZmQgPSBkbWFfYnVmX2ZkKGRtYWJ1ZiwgT19DTE9FWEVDKTsK KwlpZiAoZmQgPCAwKQorCQlkbWFfYnVmX3B1dChkbWFidWYpOworCisJcmV0dXJuIGZkOworfQor CitzdGF0aWMgaW50IGRtYWJ1Zl9wb29sX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sOworCisJbXV0ZXhfbG9j aygmbWlub3JfbG9jayk7CisJcG9vbCA9IGlkcl9maW5kKCZkbWFidWZfcG9vbF9pZHIsIGltaW5v cihpbm9kZSkpOworCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7CisJaWYgKCFwb29sKSB7CisJ CXByX2RlYnVnKCJkZXZpY2U6IG1pbm9yICVkIHVua25vd24uXG4iLCBpbWlub3IoaW5vZGUpKTsK KwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogaW5zdGFuY2UgZGF0YSBhcyBjb250ZXh0ICov CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcG9vbDsKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBm aWxwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRtYWJ1Zl9wb29sX3JlbGVhc2Uo c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0 ZV9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIGRtYWJ1Zl9wb29sX2ZvcHMgPSB7CisJLm93bmVyICAgICAgICAgID0g VEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZG1hYnVmX3Bvb2xfb3BlbiwKKwkucmVsZWFzZQk9IGRt YWJ1Zl9wb29sX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gZG1hYnVmX3Bvb2xfaW9jdGws CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSBkbWFidWZfcG9vbF9pb2N0 bCwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBkZWJ1Z19zaHJpbmtfc2V0KHZvaWQgKmRhdGEs IHU2NCB2YWwpCit7CisJc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sID0gZGF0YTsKKwlzdHJ1Y3Qg c2hyaW5rX2NvbnRyb2wgc2M7CisJaW50IG9ianM7CisKKwlzYy5nZnBfbWFzayA9IEdGUF9ISUdI VVNFUjsKKwlzYy5ucl90b19zY2FuID0gdmFsOworCisJaWYgKCF2YWwpIHsKKwkJb2JqcyA9IHBv b2wtPnNocmlua2VyLmNvdW50X29iamVjdHMoJnBvb2wtPnNocmlua2VyLCAmc2MpOworCQlzYy5u cl90b19zY2FuID0gb2JqczsKKwl9CisKKwlwb29sLT5zaHJpbmtlci5zY2FuX29iamVjdHMoJnBv b2wtPnNocmlua2VyLCAmc2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlYnVnX3No cmlua19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IGRtYWJ1Zl9wb29sICpw b29sID0gZGF0YTsKKwlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgc2M7CisJaW50IG9ianM7CisKKwlz Yy5nZnBfbWFzayA9IEdGUF9ISUdIVVNFUjsKKwlzYy5ucl90b19zY2FuID0gMDsKKworCW9ianMg PSBwb29sLT5zaHJpbmtlci5jb3VudF9vYmplY3RzKCZwb29sLT5zaHJpbmtlciwgJnNjKTsKKwkq dmFsID0gb2JqczsKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZGVi dWdfc2hyaW5rX2ZvcHMsIGRlYnVnX3Nocmlua19nZXQsCisJCQlkZWJ1Z19zaHJpbmtfc2V0LCAi JWxsdVxuIik7CisKKworc3RhdGljIGludCBkbWFidWZfcG9vbF9nZXRfbWlub3Ioc3RydWN0IGRt YWJ1Zl9wb29sICpwb29sKQoreworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJbXV0ZXhfbG9j aygmbWlub3JfbG9jayk7CisJcmV0dmFsID0gaWRyX2FsbG9jKCZkbWFidWZfcG9vbF9pZHIsIHBv b2wsIDAsIE5VTV9QT09MX01JTk9SUywKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwg Pj0gMCkgeworCQlwb29sLT5taW5vciA9IHJldHZhbDsKKwkJcmV0dmFsID0gMDsKKwl9IGVsc2Ug aWYgKHJldHZhbCA9PSAtRU5PU1BDKSB7CisJCXByaW50aygiJXM6IFRvbyBtYW55IGRtYWJ1Zi1w b29sc1xuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUlOVkFMOworCX0KKwltdXRleF91bmxv Y2soJm1pbm9yX2xvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1 Zl9wb29sX2ZyZWVfbWlub3Ioc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sKQoreworCW11dGV4X2xv Y2soJm1pbm9yX2xvY2spOworCWlkcl9yZW1vdmUoJmRtYWJ1Zl9wb29sX2lkciwgcG9vbC0+bWlu b3IpOworCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7Cit9CisKKwordm9pZCBkbWFidWZfcG9v bF9hZGQoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sKQoreworCXN0cnVjdCBkbWFidWZfcG9vbF9k ZXZpY2UgKmRldiA9IGludGVybmFsX2RldjsKKwlpbnQgcmV0OworCXN0cnVjdCBkZXZpY2UgKmRl dl9yZXQ7CisJc3RydWN0IGRlbnRyeSAqcG9vbF9yb290OworCWNoYXIgZGVidWdfbmFtZVs2NF07 CisKKwlpZiAoIXBvb2wtPm9wcy0+YWxsb2NhdGUgfHwgIXBvb2wtPm9wcy0+ZnJlZSkKKwkJcHJf ZXJyKCIlczogY2FuIG5vdCBhZGQgcG9vbCB3aXRoIGludmFsaWQgb3BzIHN0cnVjdC5cbiIsCisJ CSAgICAgICBfX2Z1bmNfXyk7CisKKwkvKiBkZXRlcm0gbWlub3IgbnVtYmVyICovCisJcmV0ID0g ZG1hYnVmX3Bvb2xfZ2V0X21pbm9yKHBvb2wpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCIlczog Z2V0IG1pbm9yIG51bWJlciBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkv KiBjcmVhdGUgZGV2aWNlICovCisJcG9vbC0+cG9vbF9kZXZ0ID0gTUtERVYoTUFKT1IoZGV2LT5k ZXZpY2VfZGV2dCksIHBvb2wtPm1pbm9yKTsKKwlkZXZfcmV0ID0gZGV2aWNlX2NyZWF0ZShkZXYt PnBvb2xfY2xhc3MsCisJCQkJTlVMTCwKKwkJCQlwb29sLT5wb29sX2RldnQsCisJCQkJTlVMTCwK KwkJCQlwb29sLT5uYW1lKTsKKwlpZiAoSVNfRVJSKGRldl9yZXQpKSB7CisJCXByX2VycigiZG1h YnVmLXBvb2xzOiBmYWlsZWQgdG8gY3JlYXRlIGNoYXIgZGV2aWNlLlxuIik7CisJCXJldHVybjsK Kwl9CisKKwljZGV2X2luaXQoJnBvb2wtPnBvb2xfZGV2LCAmZG1hYnVmX3Bvb2xfZm9wcyk7CisJ cmV0ID0gY2Rldl9hZGQoJnBvb2wtPnBvb2xfZGV2LCBkZXYtPmRldmljZV9kZXZ0LCBOVU1fUE9P TF9NSU5PUlMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmljZV9kZXN0cm95KGRldi0+cG9vbF9j bGFzcywgcG9vbC0+cG9vbF9kZXZ0KTsKKwkJcHJfZXJyKCJkbWFidWYtcG9vbHM6IGZhaWxlZCB0 byBhZGQgY2hhciBkZXZpY2UuXG4iKTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmcG9vbC0+ZnJl ZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcG9vbC0+c3RhdF9sb2NrKTsKKwlwb29sLT5mcmVl X2xpc3Rfc2l6ZSA9IDA7CisKKwlpZiAocG9vbC0+ZmxhZ3MgJiBETUFCVUZfUE9PTF9GTEFHX0RF RkVSX0ZSRUUpCisJCWRtYWJ1Zl9wb29sX2luaXRfZGVmZXJyZWRfZnJlZShwb29sKTsKKworCWlm ICgocG9vbC0+ZmxhZ3MgJiBETUFCVUZfUE9PTF9GTEFHX0RFRkVSX0ZSRUUpIHx8IHBvb2wtPm9w cy0+c2hyaW5rKSB7CisJCXJldCA9IGRtYWJ1Zl9wb29sX2luaXRfc2hyaW5rZXIocG9vbCk7CisJ CWlmIChyZXQpCisJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVnaXN0ZXIgc2hyaW5rZXJcbiIs IF9fZnVuY19fKTsKKwl9CisKKwlwb29sLT5udW1fb2ZfYnVmZmVycyA9IDA7CisJcG9vbC0+bnVt X29mX2FsbG9jX2J5dGVzID0gMDsKKwlwb29sLT5hbGxvY19ieXRlc193bSA9IDA7CisKKwlwb29s X3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocG9vbC0+bmFtZSwgZGV2LT5kZWJ1Z19yb290KTsK KwlkZWJ1Z2ZzX2NyZWF0ZV91NjQoIm51bV9vZl9idWZmZXJzIiwKKwkJCSAgIDA0NDQsIHBvb2xf cm9vdCwKKwkJCSAgICZwb29sLT5udW1fb2ZfYnVmZmVycyk7CisJZGVidWdmc19jcmVhdGVfdTY0 KCJudW1fb2ZfYWxsb2NfYnl0ZXMiLAorCQkJICAgMDQ0NCwKKwkJCSAgIHBvb2xfcm9vdCwKKwkJ CSAgICZwb29sLT5udW1fb2ZfYWxsb2NfYnl0ZXMpOworCWRlYnVnZnNfY3JlYXRlX3U2NCgiYWxs b2NfYnl0ZXNfd20iLAorCQkJICAgMDQ0NCwKKwkJCSAgIHBvb2xfcm9vdCwKKwkJCSAgICZwb29s LT5hbGxvY19ieXRlc193bSk7CisKKwlpZiAocG9vbC0+c2hyaW5rZXIuY291bnRfb2JqZWN0cyAm JgorCSAgICBwb29sLT5zaHJpbmtlci5zY2FuX29iamVjdHMpIHsKKwkJc25wcmludGYoZGVidWdf bmFtZSwgNjQsICIlc19zaHJpbmsiLCBwb29sLT5uYW1lKTsKKwkJZGVidWdmc19jcmVhdGVfZmls ZShkZWJ1Z19uYW1lLAorCQkJCSAgICAwNjQ0LAorCQkJCSAgICBwb29sX3Jvb3QsCisJCQkJICAg IHBvb2wsCisJCQkJICAgICZkZWJ1Z19zaHJpbmtfZm9wcyk7CisJfQorCisJZG93bl93cml0ZSgm ZGV2LT5sb2NrKTsKKwlwb29sLT5pZCA9IHBvb2xfaWQrKzsKKwkvKgorCSAqIHVzZSBuZWdhdGl2 ZSBwb29sLT5pZCB0byByZXZlcnNlIHRoZSBwcmlvcml0eSAtLSB3aGVuIHRyYXZlcnNpbmcKKwkg KiB0aGUgbGlzdCBsYXRlciBhdHRlbXB0IGhpZ2hlciBpZCBudW1iZXJzIGZpcnN0CisJICovCisJ cGxpc3Rfbm9kZV9pbml0KCZwb29sLT5ub2RlLCAtcG9vbC0+aWQpOworCXBsaXN0X2FkZCgmcG9v bC0+bm9kZSwgJmRldi0+cG9vbHMpOworCisJdXBfd3JpdGUoJmRldi0+bG9jayk7Cit9CitFWFBP UlRfU1lNQk9MKGRtYWJ1Zl9wb29sX2FkZCk7CisKK3N0YXRpYyBpbnQgZG1hYnVmX3Bvb2xfZGV2 aWNlX2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBkbWFidWZfcG9vbF9kZXZpY2UgKmlkZXY7CisJ aW50IHJldDsKKworCWlkZXYgPSBremFsbG9jKHNpemVvZigqaWRldiksIEdGUF9LRVJORUwpOwor CWlmICghaWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBhbGxvY19jaHJkZXZfcmVn aW9uKCZpZGV2LT5kZXZpY2VfZGV2dCwgMCwgTlVNX1BPT0xfTUlOT1JTLAorCQkJCSAgREVWTkFN RSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2lkZXY7CisKKwlpZGV2LT5wb29sX2NsYXNzID0g Y2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBERVZOQU1FKTsKKwlpZiAoSVNfRVJSKGlkZXYtPnBv b2xfY2xhc3MpKSB7CisJCXJldCA9IFBUUl9FUlIoaWRldi0+cG9vbF9jbGFzcyk7CisJCWdvdG8g dW5yZWdfcmVnaW9uOworCX0KKworCWlkZXYtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9k aXIoImlvbiIsIE5VTEwpOworCWluaXRfcndzZW0oJmlkZXYtPmxvY2spOworCXBsaXN0X2hlYWRf aW5pdCgmaWRldi0+cG9vbHMpOworCWludGVybmFsX2RldiA9IGlkZXY7CisJcmV0dXJuIDA7CisK K3VucmVnX3JlZ2lvbjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oaWRldi0+ZGV2aWNlX2Rl dnQsIE5VTV9QT09MX01JTk9SUyk7CitmcmVlX2lkZXY6CisJa2ZyZWUoaWRldik7CisJcmV0dXJu IHJldDsKKworfQorc3Vic3lzX2luaXRjYWxsKGRtYWJ1Zl9wb29sX2RldmljZV9jcmVhdGUpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5oIGIvZHJpdmVy cy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1wb29scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjEyMTEwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvcG9v bHMvZG1hYnVmLXBvb2xzLmgKQEAgLTAsMCArMSwyNDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovCisvKgorICogZHJpdmVycy9kbWEtYnVmL3Bvb2xzL2RtYWJ1Zi1w b29scy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgorICovCisKKyNp Zm5kZWYgX0RNQUJVRl9QT09MU19ICisjZGVmaW5lIF9ETUFCVUZfUE9PTFNfSAorCisjaW5jbHVk ZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxp bnV4L2RtYS1kaXJlY3Rpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8 bGludXgvbW1fdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxp bnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgv c2hyaW5rZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21p c2NkZXZpY2UuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2RtYWJ1Zi1wb29scy5oPgorCisvKioK KyAqIHN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgLSBtZXRhZGF0YSBmb3IgYSBwYXJ0aWN1bGFy IGJ1ZmZlcgorICogQHBvb2w6CQliYWNrIHBvaW50ZXIgdG8gdGhlIHBvb2wgdGhlIGJ1ZmZlciBj YW1lIGZyb20KKyAqIEBmbGFnczoJCWJ1ZmZlciBzcGVjaWZpYyBmbGFncworICogQHByaXZhdGVf ZmxhZ3M6CWludGVybmFsIGJ1ZmZlciBzcGVjaWZpYyBmbGFncworICogQHNpemU6CQlzaXplIG9m IHRoZSBidWZmZXIKKyAqIEBwcml2X3ZpcnQ6CQlwcml2YXRlIGRhdGEgdG8gdGhlIGJ1ZmZlciBy ZXByZXNlbnRhYmxlIGFzCisgKgkJCWEgdm9pZCAqCisgKiBAbG9jazoJCXByb3RlY3RzIHRoZSBi dWZmZXJzIGNudCBmaWVsZHMKKyAqIEBrbWFwX2NudDoJCW51bWJlciBvZiB0aW1lcyB0aGUgYnVm ZmVyIGlzIG1hcHBlZCB0byB0aGUga2VybmVsCisgKiBAdmFkZHI6CQl0aGUga2VybmVsIG1hcHBp bmcgaWYga21hcF9jbnQgaXMgbm90IHplcm8KKyAqIEBzZ190YWJsZToJCXRoZSBzZyB0YWJsZSBm b3IgdGhlIGJ1ZmZlciBpZiBkbWFwX2NudCBpcyBub3QgemVybworICogQGF0dGFjaG1lbnRzOgls aXN0IGhlYWQgZm9yIGRldmljZSBhdHRhY2htZW50cworICogQGxpc3Q6CQlsaXN0IGhlYWQgZm9y IGRlZmVycmVkIGZyZWVpbmcKKyAqLworc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciB7CisJc3Ry dWN0IGRtYWJ1Zl9wb29sICpwb29sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQg bG9uZyBwcml2YXRlX2ZsYWdzOworCXNpemVfdCBzaXplOworCXZvaWQgKnByaXZfdmlydDsKKwlz dHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQga21hcF9jbnQ7CisJdm9pZCAqdmFkZHI7CisJc3RydWN0 IHNnX3RhYmxlICpzZ190YWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF0dGFjaG1lbnRzOworCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKworLyoqCisgKiBzdHJ1Y3QgZG1hYnVmX3Bvb2xf b3BzIC0gb3BzIHRvIG9wZXJhdGUgb24gYSBnaXZlbiBwb29sCisgKiBAYWxsb2NhdGU6CQlhbGxv Y2F0ZSBtZW1vcnkKKyAqIEBmcmVlOgkJZnJlZSBtZW1vcnkKKyAqIEBtYXBfa2VybmVsCQltYXAg bWVtb3J5IHRvIHRoZSBrZXJuZWwKKyAqIEB1bm1hcF9rZXJuZWwJdW5tYXAgbWVtb3J5IHRvIHRo ZSBrZXJuZWwKKyAqIEBtYXBfdXNlcgkJbWFwIG1lbW9yeSB0byB1c2Vyc3BhY2UKKyAqIEBzaHJp bmsJCXNocmlua2VyIGhvb2sgdG8gcmVkdWNlIHBvb2wgbWVtb3J5IHVzYWdlCisgKgorICogYWxs b2NhdGUsIHBoeXMsIGFuZCBtYXBfdXNlciByZXR1cm4gMCBvbiBzdWNjZXNzLCAtZXJybm8gb24g ZXJyb3IuCisgKiBtYXBfZG1hIGFuZCBtYXBfa2VybmVsIHJldHVybiBwb2ludGVyIG9uIHN1Y2Nl c3MsIEVSUl9QVFIgb24KKyAqIGVycm9yLiBAZnJlZSB3aWxsIGJlIGNhbGxlZCB3aXRoIERNQUJV Rl9QT09MX1BSSVZfRkxBR19TSFJJTktFUl9GUkVFIHNldCBpbgorICogdGhlIGJ1ZmZlcidzIHBy aXZhdGVfZmxhZ3Mgd2hlbiBjYWxsZWQgZnJvbSBhIHNocmlua2VyLiBJbiB0aGF0CisgKiBjYXNl LCB0aGUgcGFnZXMgYmVpbmcgZnJlZSdkIG11c3QgYmUgdHJ1bHkgZnJlZSdkIGJhY2sgdG8gdGhl CisgKiBzeXN0ZW0sIG5vdCBwdXQgaW4gYSBwYWdlIHBvb2wgb3Igb3RoZXJ3aXNlIGNhY2hlZC4K KyAqLworc3RydWN0IGRtYWJ1Zl9wb29sX29wcyB7CisJaW50ICgqYWxsb2NhdGUpKHN0cnVjdCBk bWFidWZfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciwg dW5zaWduZWQgbG9uZyBsZW4sCisJCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwl2b2lkICgqZnJl ZSkoc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKTsKKwl2b2lkICogKCptYXBfa2Vy bmVsKShzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wsCisJCQkgICAgIHN0cnVjdCBkbWFidWZfcG9v bF9idWZmZXIgKmJ1ZmZlcik7CisJdm9pZCAoKnVubWFwX2tlcm5lbCkoc3RydWN0IGRtYWJ1Zl9w b29sICpwb29sLAorCQkJICAgICBzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIpOwor CWludCAoKm1hcF91c2VyKShzdHJ1Y3QgZG1hYnVmX3Bvb2wgKm1hcHBlciwKKwkJCXN0cnVjdCBk bWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlciwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KTsKKwlpbnQgKCpzaHJpbmspKHN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCwgZ2ZwX3QgZ2ZwX21h c2ssCisJCSAgICAgIGludCBucl90b19zY2FuKTsKK307CisKKy8qKgorICogcG9vbCBmbGFncyAt IGZsYWdzIGJldHdlZW4gdGhlIGRtYWJ1ZiBwb29scyBhbmQgY29yZSBkbWFidWYgY29kZQorICov CisjZGVmaW5lIERNQUJVRl9QT09MX0ZMQUdfREVGRVJfRlJFRSBCSVQoMCkKKworLyoqCisgKiBw cml2YXRlIGZsYWdzIC0gZmxhZ3MgaW50ZXJuYWwgdG8gZG1hYnVmX3Bvb2xzCisgKi8KKy8qCisg KiBCdWZmZXIgaXMgYmVpbmcgZnJlZWQgZnJvbSBhIHNocmlua2VyIGZ1bmN0aW9uLiBTa2lwIGFu eSBwb3NzaWJsZQorICogcG9vbC1zcGVjaWZpYyBjYWNoaW5nIG1lY2hhbmlzbSAoZS5nLiBwYWdl IHBvb2xzKS4gR3VhcmFudGVlcyB0aGF0CisgKiBhbnkgYnVmZmVyIHN0b3JhZ2UgdGhhdCBjYW1l IGZyb20gdGhlIHN5c3RlbSBhbGxvY2F0b3Igd2lsbCBiZQorICogcmV0dXJuZWQgdG8gdGhlIHN5 c3RlbSBhbGxvY2F0b3IuCisgKi8KKyNkZWZpbmUgRE1BQlVGX1BPT0xfUFJJVl9GTEFHX1NIUklO S0VSX0ZSRUUgQklUKDApCisKKy8qKgorICogc3RydWN0IGRtYWJ1Zl9wb29sIC0gcmVwcmVzZW50 cyBhIGRtYWJ1ZiBwb29sIGluIHRoZSBzeXN0ZW0KKyAqIEBub2RlOgkJcmIgbm9kZSB0byBwdXQg dGhlIHBvb2wgb24gdGhlIGRldmljZSdzIHRyZWUgb2YgcG9vbHMKKyAqIEBwb29sX2RldgkJbWlz Y2RldmljZSBmb3IgcG9vbCBkZXZpY2Vub2RlCisgKiBAb3BzOgkJb3BzIHN0cnVjdCBhcyBhYm92 ZQorICogQGZsYWdzOgkJZmxhZ3MKKyAqIEBpZDoJCQlpZCBvZiBwb29sCisgKiBAbmFtZToJCXVz ZWQgZm9yIGRlYnVnZ2luZy9kZXZpY2Utbm9kZSBuYW1lCisgKiBAc2hyaW5rZXI6CQlhIHNocmlu a2VyIGZvciB0aGUgcG9vbAorICogQGZyZWVfbGlzdDoJCWZyZWUgbGlzdCBoZWFkIGlmIGRlZmVy cmVkIGZyZWUgaXMgdXNlZAorICogQGZyZWVfbGlzdF9zaXplCXNpemUgb2YgdGhlIGRlZmVycmVk IGZyZWUgbGlzdCBpbiBieXRlcworICogQGxvY2s6CQlwcm90ZWN0cyB0aGUgZnJlZSBsaXN0Cisg KiBAd2FpdHF1ZXVlOgkJcXVldWUgdG8gd2FpdCBvbiBmcm9tIGRlZmVycmVkIGZyZWUgdGhyZWFk CisgKiBAdGFzazoJCXRhc2sgc3RydWN0IG9mIGRlZmVycmVkIGZyZWUgdGhyZWFkCisgKiBAbnVt X29mX2J1ZmZlcnMJdGhlIG51bWJlciBvZiBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZlcnMKKyAq IEBudW1fb2ZfYWxsb2NfYnl0ZXMJdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgYnl0ZXMKKyAqIEBh bGxvY19ieXRlc193bQl0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBieXRlcyB3YXRlcm1hcmthCisg KiBAc3RhdF9sb2NrCQlsb2NrIGZvciBwb29sIHN0YXRpc3RpY3MKKyAqCisgKiBSZXByZXNlbnRz IGEgcG9vbCBvZiBtZW1vcnkgZnJvbSB3aGljaCBidWZmZXJzIGNhbiBiZSBtYWRlLiAgSW4gc29t ZQorICogc3lzdGVtcyB0aGUgb25seSBwb29sIGlzIHJlZ3VsYXIgc3lzdGVtIG1lbW9yeSBhbGxv Y2F0ZWQgdmlhIHZtYWxsb2MuCisgKiBPbiBvdGhlcnMsIHNvbWUgYmxvY2tzIG1pZ2h0IHJlcXVp cmUgbGFyZ2UgcGh5c2ljYWxseSBjb250aWd1b3VzIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFsbG9j YXRlZCBmcm9tIGEgc3BlY2lhbGx5IHJlc2VydmVkIHBvb2wuCisgKi8KK3N0cnVjdCBkbWFidWZf cG9vbCB7CisJc3RydWN0IHBsaXN0X25vZGUgbm9kZTsKKwlkZXZfdCBwb29sX2RldnQ7CisJc3Ry dWN0IGNkZXYgcG9vbF9kZXY7CisJdW5zaWduZWQgaW50IG1pbm9yOworCXN0cnVjdCBkbWFidWZf cG9vbF9vcHMgKm9wczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpZDsK Kwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBzaHJpbmtlciBzaHJpbmtlcjsKKwlzdHJ1Y3Qg bGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzaXplX3QgZnJlZV9saXN0X3NpemU7CisJc3BpbmxvY2tf dCBmcmVlX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHF1ZXVlOworCXN0cnVjdCB0YXNr X3N0cnVjdCAqdGFzazsKKwl1NjQgbnVtX29mX2J1ZmZlcnM7CisJdTY0IG51bV9vZl9hbGxvY19i eXRlczsKKwl1NjQgYWxsb2NfYnl0ZXNfd207CisJc3BpbmxvY2tfdCBzdGF0X2xvY2s7Cit9Owor CisvKioKKyAqIGRtYWJ1Zl9wb29sX2FkZCAtIGFkZHMgYSBwb29sIHRvIGRtYWJ1ZiBwb29scwor ICogQHBvb2w6CQl0aGUgcG9vbCB0byBhZGQKKyAqLwordm9pZCBkbWFidWZfcG9vbF9hZGQoc3Ry dWN0IGRtYWJ1Zl9wb29sICpwb29sKTsKKworLyoqCisgKiBzb21lIGhlbHBlcnMgZm9yIGNvbW1v biBvcGVyYXRpb25zIG9uIGJ1ZmZlcnMgdXNpbmcgdGhlIHNnX3RhYmxlCisgKiBhbmQgdmFkZHIg ZmllbGRzCisgKi8KK3ZvaWQgKmRtYWJ1Zl9wb29sX21hcF9rZXJuZWwoc3RydWN0IGRtYWJ1Zl9w b29sICpwb29sLAorCQkJICAgICBzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIpOwor dm9pZCBkbWFidWZfcG9vbF91bm1hcF9rZXJuZWwoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sLAor CQkJICAgICAgc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKTsKK2ludCBkbWFidWZf cG9vbF9tYXBfdXNlcihzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wsCisJCQkgc3RydWN0IGRtYWJ1 Zl9wb29sX2J1ZmZlciAqYnVmZmVyLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsK K2ludCBkbWFidWZfcG9vbF9idWZmZXJfemVybyhzdHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpi dWZmZXIpOworaW50IGRtYWJ1Zl9wb29sX3BhZ2VzX3plcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIHNp emVfdCBzaXplLCBwZ3Byb3RfdCBwZ3Byb3QpOworaW50IGRtYWJ1Zl9wb29sX2FsbG9jKHN0cnVj dCBkbWFidWZfcG9vbCAqcG9vbCwgc2l6ZV90IGxlbiwKKwkJICAgICAgdW5zaWduZWQgaW50IGZs YWdzKTsKK3ZvaWQgZG1hYnVmX3Bvb2xfYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRtYWJ1Zl9wb29s X2J1ZmZlciAqYnVmZmVyKTsKKworLyoqCisgKiBkbWFidWZfcG9vbF9pbml0X3Nocmlua2VyCisg KiBAcG9vbDoJCXRoZSBwb29sCisgKgorICogSWYgYSBwb29sIHNldHMgdGhlIERNQUJVRl9QT09M X0ZMQUdfREVGRVJfRlJFRSBmbGFnIG9yIGRlZmluZXMgdGhlIHNocmluayBvcAorICogdGhpcyBm dW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBzZXR1cCBhIHNocmlua2VyIHRvIHNocmluayB0aGUg ZnJlZWxpc3RzCisgKiBhbmQgY2FsbCB0aGUgcG9vbCdzIHNocmluayBvcC4KKyAqLworaW50IGRt YWJ1Zl9wb29sX2luaXRfc2hyaW5rZXIoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sKTsKKworLyoq CisgKiBkbWFidWZfcG9vbF9pbml0X2RlZmVycmVkX2ZyZWUgLS0gaW5pdGlhbGl6ZSBkZWZlcnJl ZCBmcmVlIGZ1bmN0aW9uYWxpdHkKKyAqIEBwb29sOgkJdGhlIHBvb2wKKyAqCisgKiBJZiBhIHBv b2wgc2V0cyB0aGUgRE1BQlVGX1BPT0xfRkxBR19ERUZFUl9GUkVFIGZsYWcgdGhpcyBmdW5jdGlv biB3aWxsCisgKiBiZSBjYWxsZWQgdG8gc2V0dXAgZGVmZXJyZWQgZnJlZXMuIENhbGxzIHRvIGZy ZWUgdGhlIGJ1ZmZlciB3aWxsCisgKiByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIHRoZSBhY3R1YWwg ZnJlZSB3aWxsIG9jY3VyIHNvbWUgdGltZSBsYXRlcgorICovCitpbnQgZG1hYnVmX3Bvb2xfaW5p dF9kZWZlcnJlZF9mcmVlKHN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCk7CisKKy8qKgorICogZG1h YnVmX3Bvb2xfZnJlZWxpc3RfYWRkIC0gYWRkIGEgYnVmZmVyIHRvIHRoZSBkZWZlcnJlZCBmcmVl IGxpc3QKKyAqIEBwb29sOgkJdGhlIHBvb2wKKyAqIEBidWZmZXI6CQl0aGUgYnVmZmVyCisgKgor ICogQWRkcyBhbiBpdGVtIHRvIHRoZSBkZWZlcnJlZCBmcmVlbGlzdC4KKyAqLwordm9pZCBkbWFi dWZfcG9vbF9mcmVlbGlzdF9hZGQoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sLAorCQkJICAgICAg c3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKTsKKworLyoqCisgKiBkbWFidWZfcG9v bF9mcmVlbGlzdF9kcmFpbiAtIGRyYWluIHRoZSBkZWZlcnJlZCBmcmVlIGxpc3QKKyAqIEBwb29s OgkJdGhlIHBvb2wKKyAqIEBzaXplOgkJYW1vdW50IG9mIG1lbW9yeSB0byBkcmFpbiBpbiBieXRl cworICoKKyAqIERyYWlucyB0aGUgaW5kaWNhdGVkIGFtb3VudCBvZiBtZW1vcnkgZnJvbSB0aGUg ZGVmZXJyZWQgZnJlZWxpc3QgaW1tZWRpYXRlbHkuCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBhbW91 bnQgZnJlZWQuICBUaGUgdG90YWwgZnJlZWQgbWF5IGJlIGhpZ2hlciBkZXBlbmRpbmcKKyAqIG9u IHRoZSBzaXplIG9mIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCwgb3IgbG93ZXIgaWYgdGhlcmUgaXMg aW5zdWZmaWNpZW50CisgKiB0b3RhbCBtZW1vcnkgb24gdGhlIGZyZWVsaXN0LgorICovCitzaXpl X3QgZG1hYnVmX3Bvb2xfZnJlZWxpc3RfZHJhaW4oc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sLCBz aXplX3Qgc2l6ZSk7CisKKy8qKgorICogZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2hyaW5rIC0gZHJh aW4gdGhlIGRlZmVycmVkIGZyZWUKKyAqCQkJCWxpc3QsIHNraXBwaW5nIGFueSBwb29sLXNwZWNp ZmljCisgKgkJCQlwb29saW5nIG9yIGNhY2hpbmcgbWVjaGFuaXNtcworICoKKyAqIEBwb29sOgkJ dGhlIHBvb2wKKyAqIEBzaXplOgkJYW1vdW50IG9mIG1lbW9yeSB0byBkcmFpbiBpbiBieXRlcwor ICoKKyAqIERyYWlucyB0aGUgaW5kaWNhdGVkIGFtb3VudCBvZiBtZW1vcnkgZnJvbSB0aGUgZGVm ZXJyZWQgZnJlZWxpc3QgaW1tZWRpYXRlbHkuCisgKiBSZXR1cm5zIHRoZSB0b3RhbCBhbW91bnQg ZnJlZWQuICBUaGUgdG90YWwgZnJlZWQgbWF5IGJlIGhpZ2hlciBkZXBlbmRpbmcKKyAqIG9uIHRo ZSBzaXplIG9mIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCwgb3IgbG93ZXIgaWYgdGhlcmUgaXMgaW5z dWZmaWNpZW50CisgKiB0b3RhbCBtZW1vcnkgb24gdGhlIGZyZWVsaXN0LgorICoKKyAqIFVubGlr ZSB3aXRoIEBkbWFidWZfcG9vbF9mcmVlbGlzdF9kcmFpbiwgZG9uJ3QgcHV0IGFueSBwYWdlcyBi YWNrIGludG8KKyAqIHBhZ2UgcG9vbHMgb3Igb3RoZXJ3aXNlIGNhY2hlIHRoZSBwYWdlcy4gRXZl cnl0aGluZyBtdXN0IGJlCisgKiBnZW51aW5lbHkgZnJlZSdkIGJhY2sgdG8gdGhlIHN5c3RlbS4g SWYgeW91J3JlIGZyZWUnaW5nIGZyb20gYQorICogc2hyaW5rZXIgeW91IHByb2JhYmx5IHdhbnQg dG8gdXNlIHRoaXMuIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbgorICogdGhlIHBvb2wub3BzLmZy ZWUgY2FsbGJhY2sgaG9ub3JpbmcgdGhlIERNQUJVRl9QT09MX1BSSVZfRkxBR19TSFJJTktFUl9G UkVFCisgKiBmbGFnLgorICovCitzaXplX3QgZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2hyaW5rKHN0 cnVjdCBkbWFidWZfcG9vbCAqcG9vbCwKKwkJCQlzaXplX3Qgc2l6ZSk7CisKKy8qKgorICogZG1h YnVmX3Bvb2xfZnJlZWxpc3Rfc2l6ZSAtIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZyZWVsaXN0 IGluIGJ5dGVzCisgKiBAcG9vbDoJCXRoZSBwb29sCisgKi8KK3NpemVfdCBkbWFidWZfcG9vbF9m cmVlbGlzdF9zaXplKHN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCk7CisKKworbG9uZyBkbWFidWZf cG9vbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQg bG9uZyBhcmcpOworCisjZW5kaWYgLyogX0RNQUJVRl9QT09MU19IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS1idWYvcG9vbHMvcG9vbC1oZWxwZXJzLmMgYi9kcml2ZXJzL2RtYS1idWYvcG9v bHMvcG9vbC1oZWxwZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhi ZGZiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9wb29scy9wb29sLWhlbHBl cnMuYwpAQCAtMCwwICsxLDMxNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKKy8qCisgKiBkcml2ZXJzL2RtYS1idWYvcG9vbC9wb29sLWhlbHBlcnMuYworICoKKyAqIENv cHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBMaW5h cm8gTHRkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9m cmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21t Lmg+CisjaW5jbHVkZSA8bGludXgvcnRtdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ CisjaW5jbHVkZSA8dWFwaS9saW51eC9zY2hlZC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Nj YXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgImRtYWJ1 Zi1wb29scy5oIgorCit2b2lkICpkbWFidWZfcG9vbF9tYXBfa2VybmVsKHN0cnVjdCBkbWFidWZf cG9vbCAqcG9vbCwKKwkJCSAgc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKQorewor CXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGksIGo7CisJdm9pZCAqdmFkZHI7CisJcGdw cm90X3QgcGdwcm90OworCXN0cnVjdCBzZ190YWJsZSAqdGFibGUgPSBidWZmZXItPnNnX3RhYmxl OworCWludCBucGFnZXMgPSBQQUdFX0FMSUdOKGJ1ZmZlci0+c2l6ZSkgLyBQQUdFX1NJWkU7CisJ c3RydWN0IHBhZ2UgKipwYWdlcyA9IHZtYWxsb2MoYXJyYXlfc2l6ZShucGFnZXMsCisJCQkJCQkg c2l6ZW9mKHN0cnVjdCBwYWdlICopKSk7CisJc3RydWN0IHBhZ2UgKip0bXAgPSBwYWdlczsKKwor CWlmICghcGFnZXMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKGJ1ZmZlci0+ ZmxhZ3MgJiBETUFCVUZfUE9PTF9GTEFHX0NBQ0hFRCkKKwkJcGdwcm90ID0gUEFHRV9LRVJORUw7 CisJZWxzZQorCQlwZ3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVMKTsKKwor CWZvcl9lYWNoX3NnKHRhYmxlLT5zZ2wsIHNnLCB0YWJsZS0+bmVudHMsIGkpIHsKKwkJaW50IG5w YWdlc190aGlzX2VudHJ5ID0gUEFHRV9BTElHTihzZy0+bGVuZ3RoKSAvIFBBR0VfU0laRTsKKwkJ c3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKHNnKTsKKworCQlXQVJOX09OKGkgPj0gbnBhZ2Vz KTsKKwkJZm9yIChqID0gMDsgaiA8IG5wYWdlc190aGlzX2VudHJ5OyBqKyspCisJCQkqKHRtcCsr KSA9IHBhZ2UrKzsKKwl9CisJdmFkZHIgPSB2bWFwKHBhZ2VzLCBucGFnZXMsIFZNX01BUCwgcGdw cm90KTsKKwl2ZnJlZShwYWdlcyk7CisKKwlpZiAoIXZhZGRyKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCXJldHVybiB2YWRkcjsKK30KKwordm9pZCBkbWFidWZfcG9vbF91bm1hcF9r ZXJuZWwoc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sLAorCQkJICAgc3RydWN0IGRtYWJ1Zl9wb29s X2J1ZmZlciAqYnVmZmVyKQoreworCXZ1bm1hcChidWZmZXItPnZhZGRyKTsKK30KKworaW50IGRt YWJ1Zl9wb29sX21hcF91c2VyKHN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCwKKwkJCSBzdHJ1Y3Qg ZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXIsCisJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCit7CisJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7CisJdW5z aWduZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9 IHZtYS0+dm1fcGdvZmYgKiBQQUdFX1NJWkU7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlp bnQgaTsKKwlpbnQgcmV0OworCisJZm9yX2VhY2hfc2codGFibGUtPnNnbCwgc2csIHRhYmxlLT5u ZW50cywgaSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpOworCQl1bnNpZ25l ZCBsb25nIHJlbWFpbmRlciA9IHZtYS0+dm1fZW5kIC0gYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBs ZW4gPSBzZy0+bGVuZ3RoOworCisJCWlmIChvZmZzZXQgPj0gc2ctPmxlbmd0aCkgeworCQkJb2Zm c2V0IC09IHNnLT5sZW5ndGg7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChvZmZzZXQpIHsK KwkJCXBhZ2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCQkJbGVuID0gc2ctPmxlbmd0aCAtIG9m ZnNldDsKKwkJCW9mZnNldCA9IDA7CisJCX0KKwkJbGVuID0gbWluKGxlbiwgcmVtYWluZGVyKTsK KwkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgYWRkciwgcGFnZV90b19wZm4ocGFnZSksIGxl biwKKwkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCQlhZGRyICs9IGxlbjsKKwkJaWYgKGFkZHIgPj0gdm1hLT52bV9lbmQpCisJCQlyZXR1 cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX3Bvb2xfY2xlYXJf cGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bSwKKwkJCQkgICBwZ3Byb3RfdCBwZ3By b3QpCit7CisJdm9pZCAqYWRkciA9IHZtX21hcF9yYW0ocGFnZXMsIG51bSwgLTEsIHBncHJvdCk7 CisKKwlpZiAoIWFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChhZGRyLCAwLCBQQUdF X1NJWkUgKiBudW0pOworCXZtX3VubWFwX3JhbShhZGRyLCBudW0pOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgZG1hYnVmX3Bvb2xfc2dsaXN0X3plcm8oc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZ2wsIHVuc2lnbmVkIGludCBuZW50cywKKwkJCQlwZ3Byb3RfdCBwZ3Byb3QpCit7CisJaW50 IHAgPSAwOworCWludCByZXQgPSAwOworCXN0cnVjdCBzZ19wYWdlX2l0ZXIgcGl0ZXI7CisJc3Ry dWN0IHBhZ2UgKnBhZ2VzWzMyXTsKKworCWZvcl9lYWNoX3NnX3BhZ2Uoc2dsLCAmcGl0ZXIsIG5l bnRzLCAwKSB7CisJCXBhZ2VzW3ArK10gPSBzZ19wYWdlX2l0ZXJfcGFnZSgmcGl0ZXIpOworCQlp ZiAocCA9PSBBUlJBWV9TSVpFKHBhZ2VzKSkgeworCQkJcmV0ID0gZG1hYnVmX3Bvb2xfY2xlYXJf cGFnZXMocGFnZXMsIHAsIHBncHJvdCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJ CQlwID0gMDsKKwkJfQorCX0KKwlpZiAocCkKKwkJcmV0ID0gZG1hYnVmX3Bvb2xfY2xlYXJfcGFn ZXMocGFnZXMsIHAsIHBncHJvdCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZG1hYnVmX3Bv b2xfYnVmZmVyX3plcm8oc3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciAqYnVmZmVyKQoreworCXN0 cnVjdCBzZ190YWJsZSAqdGFibGUgPSBidWZmZXItPnNnX3RhYmxlOworCXBncHJvdF90IHBncHJv dDsKKworCWlmIChidWZmZXItPmZsYWdzICYgRE1BQlVGX1BPT0xfRkxBR19DQUNIRUQpCisJCXBn cHJvdCA9IFBBR0VfS0VSTkVMOworCWVsc2UKKwkJcGdwcm90ID0gcGdwcm90X3dyaXRlY29tYmlu ZShQQUdFX0tFUk5FTCk7CisKKwlyZXR1cm4gZG1hYnVmX3Bvb2xfc2dsaXN0X3plcm8odGFibGUt PnNnbCwgdGFibGUtPm5lbnRzLCBwZ3Byb3QpOworfQorCitpbnQgZG1hYnVmX3Bvb2xfcGFnZXNf emVybyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUsIHBncHJvdF90IHBncHJvdCkKK3sK KwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2df c2V0X3BhZ2UoJnNnLCBwYWdlLCBzaXplLCAwKTsKKwlyZXR1cm4gZG1hYnVmX3Bvb2xfc2dsaXN0 X3plcm8oJnNnLCAxLCBwZ3Byb3QpOworfQorCit2b2lkIGRtYWJ1Zl9wb29sX2ZyZWVsaXN0X2Fk ZChzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wsCisJCQkgICAgICBzdHJ1Y3QgZG1hYnVmX3Bvb2xf YnVmZmVyICpidWZmZXIpCit7CisJc3Bpbl9sb2NrKCZwb29sLT5mcmVlX2xvY2spOworCWxpc3Rf YWRkKCZidWZmZXItPmxpc3QsICZwb29sLT5mcmVlX2xpc3QpOworCXBvb2wtPmZyZWVfbGlzdF9z aXplICs9IGJ1ZmZlci0+c2l6ZTsKKwlzcGluX3VubG9jaygmcG9vbC0+ZnJlZV9sb2NrKTsKKwl3 YWtlX3VwKCZwb29sLT53YWl0cXVldWUpOworfQorCitzaXplX3QgZG1hYnVmX3Bvb2xfZnJlZWxp c3Rfc2l6ZShzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wpCit7CisJc2l6ZV90IHNpemU7CisKKwlz cGluX2xvY2soJnBvb2wtPmZyZWVfbG9jayk7CisJc2l6ZSA9IHBvb2wtPmZyZWVfbGlzdF9zaXpl OworCXNwaW5fdW5sb2NrKCZwb29sLT5mcmVlX2xvY2spOworCisJcmV0dXJuIHNpemU7Cit9CisK K3N0YXRpYyBzaXplX3QgX2RtYWJ1Zl9wb29sX2ZyZWVsaXN0X2RyYWluKHN0cnVjdCBkbWFidWZf cG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsCisJCQkJCSAgYm9vbCBza2lwX3Bvb2xzKQoreworCXN0 cnVjdCBkbWFidWZfcG9vbF9idWZmZXIgKmJ1ZmZlcjsKKwlzaXplX3QgdG90YWxfZHJhaW5lZCA9 IDA7CisKKwlpZiAoZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2l6ZShwb29sKSA9PSAwKQorCQlyZXR1 cm4gMDsKKworCXNwaW5fbG9jaygmcG9vbC0+ZnJlZV9sb2NrKTsKKwlpZiAoc2l6ZSA9PSAwKQor CQlzaXplID0gcG9vbC0+ZnJlZV9saXN0X3NpemU7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBv b2wtPmZyZWVfbGlzdCkpIHsKKwkJaWYgKHRvdGFsX2RyYWluZWQgPj0gc2l6ZSkKKwkJCWJyZWFr OworCQlidWZmZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwb29sLT5mcmVlX2xpc3QsCisJCQkJCSAg c3RydWN0IGRtYWJ1Zl9wb29sX2J1ZmZlciwKKwkJCQkJICBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1 ZmZlci0+bGlzdCk7CisJCXBvb2wtPmZyZWVfbGlzdF9zaXplIC09IGJ1ZmZlci0+c2l6ZTsKKwkJ aWYgKHNraXBfcG9vbHMpCisJCQlidWZmZXItPnByaXZhdGVfZmxhZ3MgfD0KKwkJCQkJRE1BQlVG X1BPT0xfUFJJVl9GTEFHX1NIUklOS0VSX0ZSRUU7CisJCXRvdGFsX2RyYWluZWQgKz0gYnVmZmVy LT5zaXplOworCQlzcGluX3VubG9jaygmcG9vbC0+ZnJlZV9sb2NrKTsKKwkJZG1hYnVmX3Bvb2xf YnVmZmVyX2Rlc3Ryb3koYnVmZmVyKTsKKwkJc3Bpbl9sb2NrKCZwb29sLT5mcmVlX2xvY2spOwor CX0KKwlzcGluX3VubG9jaygmcG9vbC0+ZnJlZV9sb2NrKTsKKworCXJldHVybiB0b3RhbF9kcmFp bmVkOworfQorCitzaXplX3QgZG1hYnVmX3Bvb2xfZnJlZWxpc3RfZHJhaW4oc3RydWN0IGRtYWJ1 Zl9wb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gX2RtYWJ1Zl9wb29sX2ZyZWVs aXN0X2RyYWluKHBvb2wsIHNpemUsIGZhbHNlKTsKK30KKworc2l6ZV90IGRtYWJ1Zl9wb29sX2Zy ZWVsaXN0X3NocmluayhzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplKQorewor CXJldHVybiBfZG1hYnVmX3Bvb2xfZnJlZWxpc3RfZHJhaW4ocG9vbCwgc2l6ZSwgdHJ1ZSk7Cit9 CisKK3N0YXRpYyBpbnQgZG1hYnVmX3Bvb2xfZGVmZXJyZWRfZnJlZSh2b2lkICpkYXRhKQorewor CXN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCA9IGRhdGE7CisKKwl3aGlsZSAodHJ1ZSkgeworCQlz dHJ1Y3QgZG1hYnVmX3Bvb2xfYnVmZmVyICpidWZmZXI7CisKKwkJd2FpdF9ldmVudF9mcmVlemFi bGUocG9vbC0+d2FpdHF1ZXVlLAorCQkJCSAgICAgZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2l6ZShw b29sKSA+IDApOworCisJCXNwaW5fbG9jaygmcG9vbC0+ZnJlZV9sb2NrKTsKKwkJaWYgKGxpc3Rf ZW1wdHkoJnBvb2wtPmZyZWVfbGlzdCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZwb29sLT5mcmVlX2xv Y2spOworCQkJY29udGludWU7CisJCX0KKwkJYnVmZmVyID0gbGlzdF9maXJzdF9lbnRyeSgmcG9v bC0+ZnJlZV9saXN0LAorCQkJCQkgIHN0cnVjdCBkbWFidWZfcG9vbF9idWZmZXIsCisJCQkJCSAg bGlzdCk7CisJCWxpc3RfZGVsKCZidWZmZXItPmxpc3QpOworCQlwb29sLT5mcmVlX2xpc3Rfc2l6 ZSAtPSBidWZmZXItPnNpemU7CisJCXNwaW5fdW5sb2NrKCZwb29sLT5mcmVlX2xvY2spOworCQlk bWFidWZfcG9vbF9idWZmZXJfZGVzdHJveShidWZmZXIpOworCX0KKworCXJldHVybiAwOworfQor CitpbnQgZG1hYnVmX3Bvb2xfaW5pdF9kZWZlcnJlZF9mcmVlKHN0cnVjdCBkbWFidWZfcG9vbCAq cG9vbCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9 IDAgfTsKKworCUlOSVRfTElTVF9IRUFEKCZwb29sLT5mcmVlX2xpc3QpOworCWluaXRfd2FpdHF1 ZXVlX2hlYWQoJnBvb2wtPndhaXRxdWV1ZSk7CisJcG9vbC0+dGFzayA9IGt0aHJlYWRfcnVuKGRt YWJ1Zl9wb29sX2RlZmVycmVkX2ZyZWUsIHBvb2wsCisJCQkJICIlcyIsIHBvb2wtPm5hbWUpOwor CWlmIChJU19FUlIocG9vbC0+dGFzaykpIHsKKwkJcHJfZXJyKCIlczogY3JlYXRpbmcgdGhyZWFk IGZvciBkZWZlcnJlZCBmcmVlIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0 dXJuIFBUUl9FUlJfT1JfWkVSTyhwb29sLT50YXNrKTsKKwl9CisJc2NoZWRfc2V0c2NoZWR1bGVy KHBvb2wtPnRhc2ssIFNDSEVEX0lETEUsICZwYXJhbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB1bnNpZ25lZCBsb25nIGRtYWJ1Zl9wb29sX3Nocmlua19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIg KnNocmlua2VyLAorCQkJCQkgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQoreworCXN0cnVj dCBkbWFidWZfcG9vbCAqcG9vbCA9IGNvbnRhaW5lcl9vZihzaHJpbmtlciwgc3RydWN0IGRtYWJ1 Zl9wb29sLAorCQkJCQkJc2hyaW5rZXIpOworCWludCB0b3RhbCA9IDA7CisKKwl0b3RhbCA9IGRt YWJ1Zl9wb29sX2ZyZWVsaXN0X3NpemUocG9vbCkgLyBQQUdFX1NJWkU7CisJaWYgKHBvb2wtPm9w cy0+c2hyaW5rKQorCQl0b3RhbCArPSBwb29sLT5vcHMtPnNocmluayhwb29sLCBzYy0+Z2ZwX21h c2ssIDApOworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG1hYnVm X3Bvb2xfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKKwkJCQkJICBzdHJ1 Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQoreworCXN0cnVjdCBkbWFidWZfcG9vbCAqcG9vbCA9IGNv bnRhaW5lcl9vZihzaHJpbmtlciwgc3RydWN0IGRtYWJ1Zl9wb29sLAorCQkJCQkJc2hyaW5rZXIp OworCWludCBmcmVlZCA9IDA7CisJaW50IHRvX3NjYW4gPSBzYy0+bnJfdG9fc2NhbjsKKworCWlm ICh0b19zY2FuID09IDApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBzaHJpbmsgdGhlIGZyZWUg bGlzdCBmaXJzdCwgbm8gcG9pbnQgaW4gemVyb2luZyB0aGUgbWVtb3J5IGlmIHdlJ3JlCisJICog anVzdCBnb2luZyB0byByZWNsYWltIGl0LiBBbHNvLCBza2lwIGFueSBwb3NzaWJsZSBwYWdlIHBv b2xpbmcuCisJICovCisJaWYgKHBvb2wtPmZsYWdzICYgRE1BQlVGX1BPT0xfRkxBR19ERUZFUl9G UkVFKSB7CisJCWZyZWVkID0gZG1hYnVmX3Bvb2xfZnJlZWxpc3Rfc2hyaW5rKHBvb2wsIHRvX3Nj YW4gKiBQQUdFX1NJWkUpOworCQlmcmVlZCAvPSBQQUdFX1NJWkU7CisJfQorCisJdG9fc2NhbiAt PSBmcmVlZDsKKwlpZiAodG9fc2NhbiA8PSAwKQorCQlyZXR1cm4gZnJlZWQ7CisKKwlpZiAocG9v bC0+b3BzLT5zaHJpbmspCisJCWZyZWVkICs9IHBvb2wtPm9wcy0+c2hyaW5rKHBvb2wsIHNjLT5n ZnBfbWFzaywgdG9fc2Nhbik7CisJcmV0dXJuIGZyZWVkOworfQorCitpbnQgZG1hYnVmX3Bvb2xf aW5pdF9zaHJpbmtlcihzdHJ1Y3QgZG1hYnVmX3Bvb2wgKnBvb2wpCit7CisJcG9vbC0+c2hyaW5r ZXIuY291bnRfb2JqZWN0cyA9IGRtYWJ1Zl9wb29sX3Nocmlua19jb3VudDsKKwlwb29sLT5zaHJp bmtlci5zY2FuX29iamVjdHMgPSBkbWFidWZfcG9vbF9zaHJpbmtfc2NhbjsKKwlwb29sLT5zaHJp bmtlci5zZWVrcyA9IERFRkFVTFRfU0VFS1M7CisJcG9vbC0+c2hyaW5rZXIuYmF0Y2ggPSAwOwor CisJcmV0dXJuIHJlZ2lzdGVyX3Nocmlua2VyKCZwb29sLT5zaHJpbmtlcik7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2RtYS1idWYvcG9vbHMvcG9vbC1pb2N0bC5jIGIvZHJpdmVycy9kbWEtYnVm L3Bvb2xzL3Bvb2wtaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 MzE1M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL3Bvb2xzL3Bvb2wtaW9j dGwuYwpAQCAtMCwwICsxLDk0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4KKyAqLworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgImRtYWJ1Zi1w b29scy5oIgorCit1bmlvbiBwb29sX2lvY3RsX2FyZyB7CisJc3RydWN0IGRtYWJ1Zl9wb29sX2Fs bG9jYXRpb25fZGF0YSBwb29sX2FsbG9jYXRpb247Cit9OworCitzdGF0aWMgaW50IHZhbGlkYXRl X2lvY3RsX2FyZyh1bnNpZ25lZCBpbnQgY21kLCB1bmlvbiBwb29sX2lvY3RsX2FyZyAqYXJnKQor eworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBETUFCVUZfUE9PTF9JT0NfQUxMT0M6CisJCWlmIChh cmctPnBvb2xfYWxsb2NhdGlvbi5yZXNlcnZlZDAgfHwKKwkJICAgIGFyZy0+cG9vbF9hbGxvY2F0 aW9uLnJlc2VydmVkMSkKKwkJCXJldHVybiAtRUlOVkFMOworCWRlZmF1bHQ6CisJCWJyZWFrOwor CX0KKworCXJldHVybiAwOworfQorCisvKiBmaXggdXAgdGhlIGNhc2VzIHdoZXJlIHRoZSBpb2N0 bCBkaXJlY3Rpb24gYml0cyBhcmUgaW5jb3JyZWN0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBv b2xfaW9jdGxfZGlyKHVuc2lnbmVkIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwlkZWZh dWx0OgorCQlyZXR1cm4gX0lPQ19ESVIoY21kKTsKKwl9Cit9CisKK2xvbmcgZG1hYnVmX3Bvb2xf aW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBkaXI7CisJdW5pb24gcG9vbF9p b2N0bF9hcmcgZGF0YTsKKworCWRpciA9IHBvb2xfaW9jdGxfZGlyKGNtZCk7CisKKwlpZiAoX0lP Q19TSVpFKGNtZCkgPiBzaXplb2YoZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkg KiBUaGUgY29weV9mcm9tX3VzZXIgaXMgdW5jb25kaXRpb25hbCBoZXJlIGZvciBib3RoIHJlYWQg YW5kIHdyaXRlCisJICogdG8gZG8gdGhlIHZhbGlkYXRlLiBJZiB0aGVyZSBpcyBubyB3cml0ZSBm b3IgdGhlIGlvY3RsLCB0aGUKKwkgKiBidWZmZXIgaXMgY2xlYXJlZAorCSAqLworCWlmIChjb3B5 X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgX191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJ CXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gdmFsaWRhdGVfaW9jdGxfYXJnKGNtZCwgJmRhdGEp OworCWlmIChyZXQpIHsKKwkJcHJfd2Fybl9vbmNlKCIlczogaW9jdGwgdmFsaWRhdGUgZmFpbGVk XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCEoZGlyICYgX0lPQ19X UklURSkpCisJCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworCXN3aXRjaCAoY21k KSB7CisJY2FzZSBETUFCVUZfUE9PTF9JT0NfQUxMT0M6CisJeworCQlzdHJ1Y3QgY2RldiAqY2Rl diA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwkJc3RydWN0IGRtYWJ1Zl9wb29sICpwb29sOworCQlp bnQgZmQ7CisKKwkJcG9vbCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgZG1hYnVmX3Bvb2ws IHBvb2xfZGV2KTsKKworCQlmZCA9IGRtYWJ1Zl9wb29sX2FsbG9jKHBvb2wsIGRhdGEucG9vbF9h bGxvY2F0aW9uLmxlbiwKKwkJCSAgICAgICBkYXRhLnBvb2xfYWxsb2NhdGlvbi5mbGFncyk7CisJ CWlmIChmZCA8IDApCisJCQlyZXR1cm4gZmQ7CisKKwkJZGF0YS5wb29sX2FsbG9jYXRpb24uZmQg PSBmZDsKKworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQor CisJaWYgKGRpciAmIF9JT0NfUkVBRCkgeworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNl ciAqKWFyZywgJmRhdGEsIF9JT0NfU0laRShjbWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0K KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2RtYWJ1Zi1w b29scy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtYWJ1Zi1wb29scy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDliMTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRl L3VhcGkvbGludXgvZG1hYnVmLXBvb2xzLmgKQEAgLTAsMCArMSw1OSBAQAorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9p ZC91YXBpL2lvbi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgorICog Q29weXJpZ2h0IChDKSAyMDE5IExpbmFybyBMdGQuCisgKi8KKyNpZm5kZWYgX1VBUElfTElOVVhf RE1BQlVGX1BPT0xfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9ETUFCVUZfUE9PTF9ICisKKyNpbmNs dWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qKgorICog YWxsb2NhdGlvbiBmbGFncyAtIHRoZSBsb3dlciAxNiBiaXRzIGFyZSB1c2VkIGJ5IGNvcmUgZG1h YnVmIHBvb2xzLCB0aGUKKyAqIHVwcGVyIDE2IGJpdHMgYXJlIHJlc2VydmVkIGZvciB1c2UgYnkg dGhlIHBvb2xzIHRoZW1zZWx2ZXMuCisgKi8KKworLyoKKyAqIG1hcHBpbmdzIG9mIHRoaXMgYnVm ZmVyIHNob3VsZCBiZSBjYWNoZWQsIGRtYWJ1ZiBwb29scyB3aWxsIGRvIGNhY2hlCisgKiBtYWlu dGVuYW5jZSB3aGVuIHRoZSBidWZmZXIgaXMgbWFwcGVkIGZvciBkbWEKKyAqLworI2RlZmluZSBE TUFCVUZfUE9PTF9GTEFHX0NBQ0hFRCAxCisKKy8qKgorICogRE9DOiBETUFCVUYgUG9vbCBVc2Vy c3BhY2UgQVBJCisgKgorICovCisKKy8qKgorICogc3RydWN0IGRtYWJ1Zl9wb29sX2FsbG9jYXRp b25fZGF0YSAtIG1ldGFkYXRhIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSBmb3IKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9ucworICogQGxlbjoJCXNpemUg b2YgdGhlIGFsbG9jYXRpb24KKyAqIEBmbGFnczoJCWZsYWdzIHBhc3NlZCB0byBwb29sCisgKiBA ZmQ6CQkJd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIGZkIHdoaWNoIHByb3ZkZXMgdGhlCisgKgkJ CWhhbmRsZSB0byB0aGUgYWxsb2NhdGVkIGRtYS1idWYKKyAqCisgKiBQcm92aWRlZCBieSB1c2Vy c3BhY2UgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGlvY3RsCisgKi8KK3N0cnVjdCBkbWFidWZfcG9v bF9hbGxvY2F0aW9uX2RhdGEgeworCV9fdTY0IGxlbjsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBm ZDsKKwlfX3UzMiByZXNlcnZlZDA7CisJX191MzIgcmVzZXJ2ZWQxOworfTsKKworI2RlZmluZSBE TUFCVUZfUE9PTF9JT0NfTUFHSUMJCSdQJworCisvKioKKyAqIERPQzogRE1BQlVGX1BPT0xfSU9D X0FMTE9DIC0gYWxsb2NhdGUgbWVtb3J5IGZyb20gcG9vbAorICoKKyAqIFRha2VzIGFuIGRtYWJ1 Zl9wb29sX2FsbG9jYXRpb25fZGF0YSBzdHJ1Y3QgYW5kIHJldHVybnMgaXQgd2l0aCB0aGUgZmQg ZmllbGQKKyAqIHBvcHVsYXRlZCB3aXRoIHRoZSBkbWFidWYgaGFuZGxlIG9mIHRoZSBhbGxvY2F0 aW9uLgorICovCisjZGVmaW5lIERNQUJVRl9QT09MX0lPQ19BTExPQwlfSU9XUihETUFCVUZfUE9P TF9JT0NfTUFHSUMsIDAsIFwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hYnVmX3Bvb2xfYWxsb2NhdGlv bl9kYXRhKQorCisjZW5kaWYgLyogX1VBUElfTElOVVhfRE1BQlVGX1BPT0xfSCAqLwotLSAKMi43 LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==