From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v5 3/3] xen: add pvUSB backend Date: Thu, 12 May 2016 16:13:41 +0200 Message-ID: <1463062421-613-4-git-send-email-jgross@suse.com> References: <1463062421-613-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1463062421-613-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: qemu-devel@nongnu.org, xen-devel@lists.xensource.com Cc: anthony.perard@citrix.com, Juergen Gross , kraxel@redhat.com, stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org QWRkIGEgYmFja2VuZCBmb3IgcGFyYS12aXJ0dWFsaXplZCBVU0IgZGV2aWNlcyBmb3IgeGVuIGRv bWFpbnMuCgpUaGUgYmFja2VuZCBpcyB1c2luZyBob3N0LWxpYnVzYiB0byBmb3J3YXJkIFVTQiBy ZXF1ZXN0cyBmcm9tIGEKZG9tYWluIHZpYSBsaWJ1c2IgdG8gdGhlIHJlYWwgZGV2aWNlKHMpIHBh c3NlZCB0aHJvdWdoLgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2Uu Y29tPgpBY2tlZC1ieTogQW50aG9ueSBQRVJBUkQgPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+ Ci0tLQpWMzogbXVsdGlwbGUgc21hbGwgY2hhbmdlcyBhcyByZXF1ZXN0ZWQgYnkgQW50aG9ueSBQ ZXJhcmQKICAgIGNoZWNrIGZvciBmdWxsIHJpbmcgaW4gY2FzZSBvZiBob3RwbHVnIGV2ZW50cyBh cyByZXF1ZXN0ZWQgYnkKICAgIEFudGhvbnkgUGVyYXJkCiAgICB1c2UgUklOR19DT1BZX1JFUVVF U1QoKSBpbnN0ZWFkIG9mIFJJTkdfR0VUX1JFUVVFU1QoKQogICAgYWRkIGNoZWNrIGZvciByZXF1 aXJlZCBoZWFkZXIgdmVyc2lvbiBhbmQgZGlzYWJsZSBiYWNrZW5kIGluCiAgICBjYXNlIGhlYWRl ciBpcyB0b28gb2xkCgpWMjogdXNlIHhlbl9iZV9wcmludGYoKSBpbnN0ZWFkIG9mIGZwcmludGYo KSBmb3IgZGlhZ25vc3RpYyBwcmludHMgYXMKICAgIHJlcXVlc3RlZCBieSBTdGVmYW5vIFN0YWJl bGxpbmkKICAgIGxvdHMgb2Ygc21hbGwgY2hhbmdlcyByZXF1ZXN0ZWQgYnkgS29ucmFkIFdpbGsK ICAgIHJlbW92ZWQgaXNvYyByZXF1ZXN0IHN1cHBvcnQsIHdpbGwgYmUgaW4gc2VwYXJhdGUgcGF0 Y2gKLS0tCiBody91c2IvTWFrZWZpbGUub2JqcyAgICAgICAgIHwgICAgNCArCiBody91c2IveGVu LXVzYi5jICAgICAgICAgICAgIHwgMTA4MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGh3L3hlbnB2L3hlbl9tYWNoaW5lX3B2LmMgICAgfCAgICAzICsKIGluY2x1 ZGUvaHcveGVuL3hlbl9iYWNrZW5kLmggfCAgICAzICsKIGluY2x1ZGUvaHcveGVuL3hlbl9jb21t b24uaCAgfCAgICAyICsKIDUgZmlsZXMgY2hhbmdlZCwgMTA5MiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgaHcvdXNiL3hlbi11c2IuYwoKZGlmZiAtLWdpdCBhL2h3L3VzYi9NYWtl ZmlsZS5vYmpzIGIvaHcvdXNiL01ha2VmaWxlLm9ianMKaW5kZXggMjcxNzAyNy4uOThiNWM5ZCAx MDA2NDQKLS0tIGEvaHcvdXNiL01ha2VmaWxlLm9ianMKKysrIGIvaHcvdXNiL01ha2VmaWxlLm9i anMKQEAgLTM4LDMgKzM4LDcgQEAgY29tbW9uLW9iai0kKENPTkZJR19VU0JfUkVESVIpICs9IHJl ZGlyZWN0Lm8gcXVpcmtzLm8KIAogIyB1c2IgcGFzcy10aHJvdWdoCiBjb21tb24tb2JqLXkgKz0g JChwYXRzdWJzdCAlLGhvc3QtJS5vLCQoSE9TVF9VU0IpKQorCitpZmVxICgkKENPTkZJR19VU0Jf TElCVVNCKSx5KQorY29tbW9uLW9iai0kKENPTkZJR19YRU5fQkFDS0VORCkgKz0geGVuLXVzYi5v CitlbmRpZgpkaWZmIC0tZ2l0IGEvaHcvdXNiL3hlbi11c2IuYyBiL2h3L3VzYi94ZW4tdXNiLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0ZGYwNAotLS0gL2Rldi9udWxs CisrKyBiL2h3L3VzYi94ZW4tdXNiLmMKQEAgLTAsMCArMSwxMDgwIEBACisvKgorICogIHhlbiBw YXJhdmlydCB1c2IgZGV2aWNlIGJhY2tlbmQKKyAqCisgKiAgKGMpIEp1ZXJnZW4gR3Jvc3MgPGpn cm9zc0BzdXNlLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICog IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHVuZGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICoKKyAqICBDb250cmlidXRpb25zIGFmdGVyIDIwMTItMDEtMTMgYXJl IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqICBHTlUgR1BMLCB2ZXJzaW9uIDIg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8 bGlidXNiLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp bmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKKyNpbmNsdWRlICJxZW11L2Nv bmZpZy1maWxlLmgiCisjaW5jbHVkZSAiaHcvc3lzYnVzLmgiCisjaW5jbHVkZSAiaHcvdXNiLmgi CisjaW5jbHVkZSAiaHcveGVuL3hlbl9iYWNrZW5kLmgiCisjaW5jbHVkZSAibW9uaXRvci9xZGV2 LmgiCisjaW5jbHVkZSAicWFwaS9xbXAvcWJvb2wuaCIKKyNpbmNsdWRlICJxYXBpL3FtcC9xaW50 LmgiCisjaW5jbHVkZSAicWFwaS9xbXAvcXN0cmluZy5oIgorI2luY2x1ZGUgInN5cy91c2VyLmgi CisKKyNpbmNsdWRlIDx4ZW4vaW8vcmluZy5oPgorI2luY2x1ZGUgPHhlbi9pby91c2JpZi5oPgor CisvKgorICogQ2hlY2sgZm9yIHJlcXVpcmVkIHN1cHBvcnQgb2YgdXNiaWYuaDogVVNCSUZfU0hP UlRfTk9UX09LIHdhcyB0aGUgbGFzdAorICogbWFjcm8gYWRkZWQgd2UgcmVseSBvbi4KKyAqLwor I2lmZGVmIFVTQklGX1NIT1JUX05PVF9PSworCisjZGVmaW5lIFRSKHhlbmRldiwgbHZsLCBmbXQs IGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVM TCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB4ZW5fYmVf cHJpbnRmKHhlbmRldiwgbHZsLCAiJThsZC4lMDZsZCB4ZW4tdXNiKCVzKToiIGZtdCwgICBcCisg ICAgICAgICAgICAgICAgICAgICAgdHYudHZfc2VjLCB0di50dl91c2VjLCBfX2Z1bmNfXywgIyNh cmdzKTsgICAgIFwKKyAgICB9CisjZGVmaW5lIFRSX0JVUyh4ZW5kZXYsIGZtdCwgYXJncy4uLikg VFIoeGVuZGV2LCAyLCBmbXQsICMjYXJncykKKyNkZWZpbmUgVFJfUkVRKHhlbmRldiwgZm10LCBh cmdzLi4uKSBUUih4ZW5kZXYsIDMsIGZtdCwgIyNhcmdzKQorCisjZGVmaW5lIFVTQkJBQ0tfTUFY UE9SVFMgICAgICAgIFVTQklGX1BJUEVfUE9SVF9NQVNLCisjZGVmaW5lIFVTQl9ERVZfQUREUl9T SVpFICAgICAgIChVU0JJRl9QSVBFX0RFVl9NQVNLICsgMSkKKworLyogVVNCIHdpcmUgcHJvdG9j b2w6IHN0cnVjdHVyZSBkZXNjcmliaW5nIGNvbnRyb2wgcmVxdWVzdCBwYXJhbWV0ZXIuICovCitz dHJ1Y3QgdXNiaWZfY3RybHJlcXVlc3QgeworICAgIHVpbnQ4X3QgICAgYlJlcXVlc3RUeXBlOwor ICAgIHVpbnQ4X3QgICAgYlJlcXVlc3Q7CisgICAgdWludDE2X3QgICB3VmFsdWU7CisgICAgdWlu dDE2X3QgICB3SW5kZXg7CisgICAgdWludDE2X3QgICB3TGVuZ3RoOworfTsKKworc3RydWN0IHVz YmJhY2tfaW5mbzsKK3N0cnVjdCB1c2JiYWNrX3JlcTsKKworc3RydWN0IHVzYmJhY2tfc3R1YiB7 CisgICAgVVNCRGV2aWNlICAgICAqZGV2OworICAgIFVTQlBvcnQgICAgICAgcG9ydDsKKyAgICB1 bnNpZ25lZCBpbnQgIHNwZWVkOworICAgIGJvb2wgICAgICAgICAgYXR0YWNoZWQ7CisgICAgUVRB SUxRX0hFQUQoc3VibWl0X3FfaGVhZCwgdXNiYmFja19yZXEpIHN1Ym1pdF9xOworfTsKKworc3Ry dWN0IHVzYmJhY2tfcmVxIHsKKyAgICBzdHJ1Y3QgdXNiYmFja19pbmZvICAgICAgKnVzYmlmOwor ICAgIHN0cnVjdCB1c2JiYWNrX3N0dWIgICAgICAqc3R1YjsKKyAgICBzdHJ1Y3QgdXNiaWZfdXJi X3JlcXVlc3QgcmVxOworICAgIFVTQlBhY2tldCAgICAgICAgICAgICAgICBwYWNrZXQ7CisKKyAg ICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbnJfYnVmZmVyX3NlZ3M7IC8qICMgb2YgdHJhbnNm ZXJfYnVmZmVyIHNlZ21lbnRzICovCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgIG5yX2V4 dHJhX3NlZ3M7ICAvKiAjIG9mIGlzb19mcmFtZV9kZXNjIHNlZ21lbnRzICAqLworCisgICAgUVRB SUxRX0VOVFJZKHVzYmJhY2tfcmVxKSBxOworCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAg ICpidWZmZXI7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICppc29jX2J1ZmZlcjsKKyAg ICBzdHJ1Y3QgbGlidXNiX3RyYW5zZmVyICAgKnhmZXI7Cit9OworCitzdHJ1Y3QgdXNiYmFja19o b3RwbHVnIHsKKyAgICBRU0lNUExFUV9FTlRSWSh1c2JiYWNrX2hvdHBsdWcpIHE7CisgICAgdW5z aWduZWQgICAgICAgICAgICAgICAgIHBvcnQ7Cit9OworCitzdHJ1Y3QgdXNiYmFja19pbmZvIHsK KyAgICBzdHJ1Y3QgWGVuRGV2aWNlICAgICAgICAgeGVuZGV2OyAgLyogbXVzdCBiZSBmaXJzdCAq LworICAgIFVTQkJ1cyAgICAgICAgICAgICAgICAgICBidXM7CisgICAgdm9pZCAgICAgICAgICAg ICAgICAgICAgICp1cmJfc3Jpbmc7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICpjb25u X3NyaW5nOworICAgIHN0cnVjdCB1c2JpZl91cmJfYmFja19yaW5nIHVyYl9yaW5nOworICAgIHN0 cnVjdCB1c2JpZl9jb25uX2JhY2tfcmluZyBjb25uX3Jpbmc7CisgICAgaW50ICAgICAgICAgICAg ICAgICAgICAgIG51bV9wb3J0czsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgdXNiX3Zl cjsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgcmluZ19lcnJvcjsKKyAgICBRVEFJTFFf SEVBRChyZXFfZnJlZV9xX2hlYWQsIHVzYmJhY2tfcmVxKSByZXFfZnJlZV9xOworICAgIFFTSU1Q TEVRX0hFQUQoaG90cGx1Z19xX2hlYWQsIHVzYmJhY2tfaG90cGx1ZykgaG90cGx1Z19xOworICAg IHN0cnVjdCB1c2JiYWNrX3N0dWIgICAgICBwb3J0c1tVU0JCQUNLX01BWFBPUlRTXTsKKyAgICBz dHJ1Y3QgdXNiYmFja19zdHViICAgICAgKmFkZHJfdGFibGVbVVNCX0RFVl9BRERSX1NJWkVdOwor ICAgIFFFTVVCSCAgICAgICAgICAgICAgICAgICAqYmg7Cit9OworCitzdGF0aWMgc3RydWN0IHVz YmJhY2tfcmVxICp1c2JiYWNrX2dldF9yZXEoc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWYpCit7 CisgICAgc3RydWN0IHVzYmJhY2tfcmVxICp1c2JiYWNrX3JlcTsKKworICAgIGlmIChRVEFJTFFf RU1QVFkoJnVzYmlmLT5yZXFfZnJlZV9xKSkgeworICAgICAgICB1c2JiYWNrX3JlcSA9IGdfbmV3 MChzdHJ1Y3QgdXNiYmFja19yZXEsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVzYmJhY2tf cmVxID0gUVRBSUxRX0ZJUlNUKCZ1c2JpZi0+cmVxX2ZyZWVfcSk7CisgICAgICAgIFFUQUlMUV9S RU1PVkUoJnVzYmlmLT5yZXFfZnJlZV9xLCB1c2JiYWNrX3JlcSwgcSk7CisgICAgfQorICAgIHJl dHVybiB1c2JiYWNrX3JlcTsKK30KKworc3RhdGljIHZvaWQgdXNiYmFja19wdXRfcmVxKHN0cnVj dCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAq dXNiaWY7CisKKyAgICB1c2JpZiA9IHVzYmJhY2tfcmVxLT51c2JpZjsKKyAgICBtZW1zZXQodXNi YmFja19yZXEsIDAsIHNpemVvZigqdXNiYmFja19yZXEpKTsKKyAgICBRVEFJTFFfSU5TRVJUX0hF QUQoJnVzYmlmLT5yZXFfZnJlZV9xLCB1c2JiYWNrX3JlcSwgcSk7Cit9CisKK3N0YXRpYyBpbnQg dXNiYmFja19nbnR0YWJfbWFwKHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEpCit7Cisg ICAgdW5zaWduZWQgaW50IG5yX3NlZ3MsIGksIHByb3Q7CisgICAgdWludDMyX3QgcmVmW1VTQklG X01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNi aWYgPSB1c2JiYWNrX3JlcS0+dXNiaWY7CisgICAgc3RydWN0IFhlbkRldmljZSAqeGVuZGV2ID0g JnVzYmlmLT54ZW5kZXY7CisgICAgc3RydWN0IHVzYmlmX3JlcXVlc3Rfc2VnbWVudCAqc2VnOwor ICAgIHZvaWQgKmFkZHI7CisKKyAgICBucl9zZWdzID0gdXNiYmFja19yZXEtPm5yX2J1ZmZlcl9z ZWdzICsgdXNiYmFja19yZXEtPm5yX2V4dHJhX3NlZ3M7CisgICAgaWYgKCFucl9zZWdzKSB7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChucl9zZWdzID4gVVNCSUZfTUFYX1NF R01FTlRTX1BFUl9SRVFVRVNUKSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAwLCAi YmFkIG51bWJlciBvZiBzZWdtZW50cyBpbiByZXF1ZXN0ICglZClcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgbnJfc2Vncyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IGZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBpKyspIHsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCl1 c2JiYWNrX3JlcS0+cmVxLnNlZ1tpXS5vZmZzZXQgKworICAgICAgICAgICAgKHVuc2lnbmVkKXVz YmJhY2tfcmVxLT5yZXEuc2VnW2ldLmxlbmd0aCA+IFBBR0VfU0laRSkgeworICAgICAgICAgICAg eGVuX2JlX3ByaW50Zih4ZW5kZXYsIDAsICJzZWdtZW50IGNyb3NzZXMgcGFnZSBib3VuZGFyeVxu Iik7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmICh1c2JiYWNrX3JlcS0+bnJfYnVmZmVyX3NlZ3MpIHsKKyAgICAgICAgcHJvdCA9IFBST1Rf UkVBRDsKKyAgICAgICAgaWYgKHVzYmlmX3BpcGVpbih1c2JiYWNrX3JlcS0+cmVxLnBpcGUpKSB7 CisgICAgICAgICAgICAgICAgcHJvdCB8PSBQUk9UX1dSSVRFOworICAgICAgICB9CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCB1c2JiYWNrX3JlcS0+bnJfYnVmZmVyX3NlZ3M7IGkrKykgeworICAg ICAgICAgICAgcmVmW2ldID0gdXNiYmFja19yZXEtPnJlcS5zZWdbaV0uZ3JlZjsKKyAgICAgICAg fQorICAgICAgICB1c2JiYWNrX3JlcS0+YnVmZmVyID0geGVuZ250dGFiX21hcF9kb21haW5fZ3Jh bnRfcmVmcyh4ZW5kZXYtPmdudHRhYmRldiwKKyAgICAgICAgICAgIHVzYmJhY2tfcmVxLT5ucl9i dWZmZXJfc2VncywgeGVuZGV2LT5kb20sIHJlZiwgcHJvdCk7CisKKyAgICAgICAgaWYgKCF1c2Ji YWNrX3JlcS0+YnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAg fQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB1c2JiYWNrX3JlcS0+bnJfYnVmZmVyX3NlZ3M7 IGkrKykgeworICAgICAgICAgICAgc2VnID0gdXNiYmFja19yZXEtPnJlcS5zZWcgKyBpOworICAg ICAgICAgICAgYWRkciA9IHVzYmJhY2tfcmVxLT5idWZmZXIgKyBpICogUEFHRV9TSVpFICsgc2Vn LT5vZmZzZXQ7CisgICAgICAgICAgICBxZW11X2lvdmVjX2FkZCgmdXNiYmFja19yZXEtPnBhY2tl dC5pb3YsIGFkZHIsIHNlZy0+bGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh dXNiaWZfcGlwZWlzb2ModXNiYmFja19yZXEtPnJlcS5waXBlKSkgeworICAgICAgICByZXR1cm4g MDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJpZ2h0IG5vdyBpc29jIHJlcXVlc3RzIGFyZSBu b3Qgc3VwcG9ydGVkLgorICAgICAqIFByZXBhcmUgc3VwcG9ydGluZyB0aG9zZSBieSBkb2luZyB0 aGUgd29yayBuZWVkZWQgb24gdGhlIGd1ZXN0CisgICAgICogaW50ZXJmYWNlIHNpZGUuCisgICAg ICovCisKKyAgICBpZiAoIXVzYmJhY2tfcmVxLT5ucl9leHRyYV9zZWdzKSB7CisgICAgICAgIHhl bl9iZV9wcmludGYoeGVuZGV2LCAwLCAiaXNvIHJlcXVlc3Qgd2l0aG91dCBkZXNjcmlwdG9yIHNl Z21lbnRzXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcHJvdCA9 IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CisgICAgZm9yIChpID0gMDsgaSA8IHVzYmJhY2tfcmVx LT5ucl9leHRyYV9zZWdzOyBpKyspIHsKKyAgICAgICAgcmVmW2ldID0gdXNiYmFja19yZXEtPnJl cS5zZWdbaSArIHVzYmJhY2tfcmVxLT5yZXEubnJfYnVmZmVyX3NlZ3NdLmdyZWY7CisgICAgfQor ICAgIHVzYmJhY2tfcmVxLT5pc29jX2J1ZmZlciA9IHhlbmdudHRhYl9tYXBfZG9tYWluX2dyYW50 X3JlZnMoCisgICAgICAgICB4ZW5kZXYtPmdudHRhYmRldiwgdXNiYmFja19yZXEtPm5yX2V4dHJh X3NlZ3MsIHhlbmRldi0+ZG9tLCByZWYsIHByb3QpOworCisgICAgaWYgKCF1c2JiYWNrX3JlcS0+ aXNvY19idWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiYmFja19pbml0X3BhY2tldChzdHJ1Y3QgdXNiYmFj a19yZXEgKnVzYmJhY2tfcmVxKQoreworICAgIHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldiA9ICZ1 c2JiYWNrX3JlcS0+dXNiaWYtPnhlbmRldjsKKyAgICBVU0JQYWNrZXQgKnBhY2tldCA9ICZ1c2Ji YWNrX3JlcS0+cGFja2V0OworICAgIFVTQkRldmljZSAqZGV2ID0gdXNiYmFja19yZXEtPnN0dWIt PmRldjsKKyAgICBVU0JFbmRwb2ludCAqZXA7CisgICAgdW5zaWduZWQgaW50IHBpZCwgZXBfbnI7 CisgICAgYm9vbCBzb2s7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBxZW11X2lvdmVjX2luaXQo JnBhY2tldC0+aW92LCBVU0JJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpOworICAgIHBpZCA9 IHVzYmlmX3BpcGVpbih1c2JiYWNrX3JlcS0+cmVxLnBpcGUpID8gVVNCX1RPS0VOX0lOIDogVVNC X1RPS0VOX09VVDsKKyAgICBlcF9uciA9IHVzYmlmX3BpcGVlbmRwb2ludCh1c2JiYWNrX3JlcS0+ cmVxLnBpcGUpOworICAgIHNvayA9ICEhKHVzYmJhY2tfcmVxLT5yZXEudHJhbnNmZXJfZmxhZ3Mg JiBVU0JJRl9TSE9SVF9OT1RfT0spOworICAgIGlmICh1c2JpZl9waXBlY3RybCh1c2JiYWNrX3Jl cS0+cmVxLnBpcGUpKSB7CisgICAgICAgIGVwX25yID0gMDsKKyAgICAgICAgc29rID0gZmFsc2U7 CisgICAgfQorICAgIGVwID0gdXNiX2VwX2dldChkZXYsIHBpZCwgZXBfbnIpOworICAgIHVzYl9w YWNrZXRfc2V0dXAocGFja2V0LCBwaWQsIGVwLCAwLCAxLCBzb2ssIHRydWUpOworCisgICAgc3dp dGNoICh1c2JpZl9waXBldHlwZSh1c2JiYWNrX3JlcS0+cmVxLnBpcGUpKSB7CisgICAgY2FzZSBV U0JJRl9QSVBFX1RZUEVfSVNPQzoKKyAgICAgICAgVFJfUkVRKHhlbmRldiwgImlzbyB0cmFuc2Zl ciAlczogYnVmbGVuOiAleCwgJWQgZnJhbWVzXG4iLAorICAgICAgICAgICAgICAgKHBpZCA9PSBV U0JfVE9LRU5fSU4pID8gImluIiA6ICJvdXQiLAorICAgICAgICAgICAgICAgdXNiYmFja19yZXEt PnJlcS5idWZmZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgdXNiYmFja19yZXEtPnJlcS51Lmlz b2MubnJfZnJhbWVfZGVzY19zZWdzKTsKKyAgICAgICAgcmV0ID0gLUVJTlZBTDsgIC8qIGlzb2Mg bm90IGltcGxlbWVudGVkIHlldCAqLworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVVNCSUZf UElQRV9UWVBFX0lOVDoKKyAgICAgICAgVFJfUkVRKHhlbmRldiwgImludCB0cmFuc2ZlciAlczog YnVmbGVuOiAleFxuIiwKKyAgICAgICAgICAgICAgIChwaWQgPT0gVVNCX1RPS0VOX0lOKSA/ICJp biIgOiAib3V0IiwKKyAgICAgICAgICAgICAgIHVzYmJhY2tfcmVxLT5yZXEuYnVmZmVyX2xlbmd0 aCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBVU0JJRl9QSVBFX1RZUEVfQ1RSTDoKKyAg ICAgICAgcGFja2V0LT5wYXJhbWV0ZXIgPSAqKHVpbnQ2NF90ICopdXNiYmFja19yZXEtPnJlcS51 LmN0cmw7CisgICAgICAgIFRSX1JFUSh4ZW5kZXYsICJjdHJsIHBhcmFtZXRlcjogJWx4LCBidWZs ZW46ICV4XG4iLCBwYWNrZXQtPnBhcmFtZXRlciwKKyAgICAgICAgICAgICAgIHVzYmJhY2tfcmVx LT5yZXEuYnVmZmVyX2xlbmd0aCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBVU0JJRl9Q SVBFX1RZUEVfQlVMSzoKKyAgICAgICAgVFJfUkVRKHhlbmRldiwgImJ1bGsgdHJhbnNmZXIgJXM6 IGJ1ZmxlbjogJXhcbiIsCisgICAgICAgICAgICAgICAocGlkID09IFVTQl9UT0tFTl9JTikgPyAi aW4iIDogIm91dCIsCisgICAgICAgICAgICAgICB1c2JiYWNrX3JlcS0+cmVxLmJ1ZmZlcl9sZW5n dGgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXQgPSAtRUlOVkFM OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg dm9pZCB1c2JiYWNrX2RvX3Jlc3BvbnNlKHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEs IGludDMyX3Qgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90 IGFjdHVhbF9sZW5ndGgsIGludDMyX3QgZXJyb3JfY291bnQpCit7CisgICAgc3RydWN0IHVzYmJh Y2tfaW5mbyAqdXNiaWY7CisgICAgc3RydWN0IHVzYmlmX3VyYl9yZXNwb25zZSAqcmVzOworICAg IHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldjsKKyAgICB1bnNpZ25lZCBpbnQgbm90aWZ5OworCisg ICAgdXNiaWYgPSB1c2JiYWNrX3JlcS0+dXNiaWY7CisgICAgeGVuZGV2ID0gJnVzYmlmLT54ZW5k ZXY7CisKKyAgICBUUl9SRVEoeGVuZGV2LCAiaWQgJWQsIHN0YXR1cyAlZCwgbGVuZ3RoICVkLCBl cnJjbnQgJWRcbiIsCisgICAgICAgICAgIHVzYmJhY2tfcmVxLT5yZXEuaWQsIHN0YXR1cywgYWN0 dWFsX2xlbmd0aCwgZXJyb3JfY291bnQpOworCisgICAgaWYgKHVzYmJhY2tfcmVxLT5wYWNrZXQu aW92LmlvdikgeworICAgICAgICBxZW11X2lvdmVjX2Rlc3Ryb3koJnVzYmJhY2tfcmVxLT5wYWNr ZXQuaW92KTsKKyAgICB9CisKKyAgICBpZiAodXNiYmFja19yZXEtPmJ1ZmZlcikgeworICAgICAg ICB4ZW5nbnR0YWJfdW5tYXAoeGVuZGV2LT5nbnR0YWJkZXYsIHVzYmJhY2tfcmVxLT5idWZmZXIs CisgICAgICAgICAgICAgICAgICAgICAgICB1c2JiYWNrX3JlcS0+bnJfYnVmZmVyX3NlZ3MpOwor ICAgICAgICB1c2JiYWNrX3JlcS0+YnVmZmVyID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAodXNi YmFja19yZXEtPmlzb2NfYnVmZmVyKSB7CisgICAgICAgIHhlbmdudHRhYl91bm1hcCh4ZW5kZXYt PmdudHRhYmRldiwgdXNiYmFja19yZXEtPmlzb2NfYnVmZmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgdXNiYmFja19yZXEtPm5yX2V4dHJhX3NlZ3MpOworICAgICAgICB1c2JiYWNrX3JlcS0+ aXNvY19idWZmZXIgPSBOVUxMOworICAgIH0KKworICAgIHJlcyA9IFJJTkdfR0VUX1JFU1BPTlNF KCZ1c2JpZi0+dXJiX3JpbmcsIHVzYmlmLT51cmJfcmluZy5yc3BfcHJvZF9wdnQpOworICAgIHJl cy0+aWQgPSB1c2JiYWNrX3JlcS0+cmVxLmlkOworICAgIHJlcy0+c3RhdHVzID0gc3RhdHVzOwor ICAgIHJlcy0+YWN0dWFsX2xlbmd0aCA9IGFjdHVhbF9sZW5ndGg7CisgICAgcmVzLT5lcnJvcl9j b3VudCA9IGVycm9yX2NvdW50OworICAgIHJlcy0+c3RhcnRfZnJhbWUgPSAwOworICAgIHVzYmlm LT51cmJfcmluZy5yc3BfcHJvZF9wdnQrKzsKKyAgICBSSU5HX1BVU0hfUkVTUE9OU0VTX0FORF9D SEVDS19OT1RJRlkoJnVzYmlmLT51cmJfcmluZywgbm90aWZ5KTsKKworICAgIGlmIChub3RpZnkp IHsKKyAgICAgICAgeGVuX2JlX3NlbmRfbm90aWZ5KHhlbmRldik7CisgICAgfQorCisgICAgdXNi YmFja19wdXRfcmVxKHVzYmJhY2tfcmVxKTsKK30KKworc3RhdGljIHZvaWQgdXNiYmFja19kb19y ZXNwb25zZV9yZXQoc3RydWN0IHVzYmJhY2tfcmVxICp1c2JiYWNrX3JlcSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3RhdHVzKQoreworICAgIHVzYmJhY2tf ZG9fcmVzcG9uc2UodXNiYmFja19yZXEsIHN0YXR1cywgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQz Ml90IHVzYmJhY2tfeGxhdF9zdGF0dXMoaW50IHN0YXR1cykKK3sKKyAgICBzd2l0Y2ggKHN0YXR1 cykgeworICAgIGNhc2UgVVNCX1JFVF9TVUNDRVNTOgorICAgICAgICByZXR1cm4gMDsKKyAgICBj YXNlIFVTQl9SRVRfTk9ERVY6CisgICAgICAgIHJldHVybiAtRU5PREVWOworICAgIGNhc2UgVVNC X1JFVF9TVEFMTDoKKyAgICAgICAgcmV0dXJuIC1FUElQRTsKKyAgICBjYXNlIFVTQl9SRVRfQkFC QkxFOgorICAgICAgICByZXR1cm4gLUVPVkVSRkxPVzsKKyAgICBjYXNlIFVTQl9SRVRfSU9FUlJP UjoKKyAgICAgICAgcmV0dXJuIC1FUFJPVE87CisgICAgfQorCisgICAgcmV0dXJuIC1FU0hVVERP V047Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tfcGFja2V0X2NvbXBsZXRlKFVTQlBhY2tldCAq cGFja2V0KQoreworICAgIHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXE7CisgICAgaW50 MzJfdCBzdGF0dXM7CisKKyAgICB1c2JiYWNrX3JlcSA9IGNvbnRhaW5lcl9vZihwYWNrZXQsIHN0 cnVjdCB1c2JiYWNrX3JlcSwgcGFja2V0KTsKKworICAgIFFUQUlMUV9SRU1PVkUoJnVzYmJhY2tf cmVxLT5zdHViLT5zdWJtaXRfcSwgdXNiYmFja19yZXEsIHEpOworCisgICAgc3RhdHVzID0gdXNi YmFja194bGF0X3N0YXR1cyhwYWNrZXQtPnN0YXR1cyk7CisgICAgdXNiYmFja19kb19yZXNwb25z ZSh1c2JiYWNrX3JlcSwgc3RhdHVzLCBwYWNrZXQtPmFjdHVhbF9sZW5ndGgsIDApOworfQorCitz dGF0aWMgdm9pZCB1c2JiYWNrX3NldF9hZGRyZXNzKHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiYmFja19zdHViICpz dHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3VyX2Fk ZHIsIHVuc2lnbmVkIGludCBuZXdfYWRkcikKK3sKKyAgICBpZiAoY3VyX2FkZHIpIHsKKyAgICAg ICAgdXNiaWYtPmFkZHJfdGFibGVbY3VyX2FkZHJdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG5l d19hZGRyKSB7CisgICAgICAgIHVzYmlmLT5hZGRyX3RhYmxlW25ld19hZGRyXSA9IHN0dWI7Cisg ICAgfQorfQorCitzdGF0aWMgYm9vbCB1c2JiYWNrX2NhbmNlbF9yZXEoc3RydWN0IHVzYmJhY2tf cmVxICp1c2JiYWNrX3JlcSkKK3sKKyAgICBib29sIHJldCA9IGZhbHNlOworCisgICAgaWYgKHVz Yl9wYWNrZXRfaXNfaW5mbGlnaHQoJnVzYmJhY2tfcmVxLT5wYWNrZXQpKSB7CisgICAgICAgIHVz Yl9jYW5jZWxfcGFja2V0KCZ1c2JiYWNrX3JlcS0+cGFja2V0KTsKKyAgICAgICAgcmV0ID0gdHJ1 ZTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdXNiYmFja19wcm9j ZXNzX3VubGlua19yZXEoc3RydWN0IHVzYmJhY2tfcmVxICp1c2JiYWNrX3JlcSkKK3sKKyAgICBz dHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZjsKKyAgICBzdHJ1Y3QgdXNiYmFja19yZXEgKnVubGlu a19yZXE7CisgICAgdW5zaWduZWQgaW50IGlkLCBkZXZudW07CisgICAgaW50IHJldDsKKworICAg IHVzYmlmID0gdXNiYmFja19yZXEtPnVzYmlmOworICAgIHJldCA9IDA7CisgICAgaWQgPSB1c2Ji YWNrX3JlcS0+cmVxLnUudW5saW5rLnVubGlua19pZDsKKyAgICBUUl9SRVEoJnVzYmlmLT54ZW5k ZXYsICJ1bmxpbmsgaWQgJWRcbiIsIGlkKTsKKyAgICBkZXZudW0gPSB1c2JpZl9waXBlZGV2aWNl KHVzYmJhY2tfcmVxLT5yZXEucGlwZSk7CisgICAgaWYgKHVubGlrZWx5KGRldm51bSA9PSAwKSkg eworICAgICAgICB1c2JiYWNrX3JlcS0+c3R1YiA9IHVzYmlmLT5wb3J0cyArCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdXNiaWZfcGlwZXBvcnRudW0odXNiYmFja19yZXEtPnJlcS5waXBl KTsKKyAgICAgICAgaWYgKHVubGlrZWx5KCF1c2JiYWNrX3JlcS0+c3R1YikpIHsKKyAgICAgICAg ICAgIHJldCA9IC1FTk9ERVY7CisgICAgICAgICAgICBnb3RvIGZhaWxfcmVzcG9uc2U7CisgICAg ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodW5saWtlbHkoIXVzYmlmLT5hZGRyX3Rh YmxlW2Rldm51bV0pKSB7CisgICAgICAgICAgICByZXQgPSAtRU5PREVWOworICAgICAgICAgICAg Z290byBmYWlsX3Jlc3BvbnNlOworICAgICAgICB9CisgICAgICAgIHVzYmJhY2tfcmVxLT5zdHVi ID0gdXNiaWYtPmFkZHJfdGFibGVbZGV2bnVtXTsKKyAgICB9CisKKyAgICBRVEFJTFFfRk9SRUFD SCh1bmxpbmtfcmVxLCAmdXNiYmFja19yZXEtPnN0dWItPnN1Ym1pdF9xLCBxKSB7CisgICAgICAg IGlmICh1bmxpbmtfcmVxLT5yZXEuaWQgPT0gaWQpIHsKKyAgICAgICAgICAgIGlmICh1c2JiYWNr X2NhbmNlbF9yZXEodW5saW5rX3JlcSkpIHsKKyAgICAgICAgICAgICAgICB1c2JiYWNrX2RvX3Jl c3BvbnNlX3JldCh1bmxpbmtfcmVxLCAtRVBST1RPKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCitmYWlsX3Jlc3BvbnNlOgorICAgIHVzYmJh Y2tfZG9fcmVzcG9uc2VfcmV0KHVzYmJhY2tfcmVxLCByZXQpOworfQorCisvKgorICogQ2hlY2tz IHdoZXRoZXIgYSByZXF1ZXN0IGNhbiBiZSBoYW5kbGVkIGF0IG9uY2Ugb3Igc2hvdWxkIGJlIGZv cndhcmRlZAorICogdG8gdGhlIHVzYiBmcmFtZXdvcmsuCisgKiBSZXR1cm4gdmFsdWUgaXM6Cisg KiAwIGluIGNhc2Ugb2YgdXNiIGZyYW1ld29yayBpcyBuZWVkZWQKKyAqIDEgaW4gY2FzZSBvZiBs b2NhbCBoYW5kbGluZyAobm8gZXJyb3IpCisgKiBUaGUgcmVxdWVzdCByZXNwb25zZSBoYXMgYmVl biBxdWV1ZWQgYWxyZWFkeSBpZiByZXR1cm4gdmFsdWUgbm90IDAuCisgKi8KK3N0YXRpYyBpbnQg dXNiYmFja19jaGVja19hbmRfc3VibWl0KHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEp Cit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAgdW5zaWduZWQgaW50IGRl dm51bTsKKyAgICBzdHJ1Y3QgdXNiYmFja19zdHViICpzdHViOworICAgIHN0cnVjdCB1c2JpZl9j dHJscmVxdWVzdCAqY3RybDsKKyAgICBpbnQgcmV0OworICAgIHVpbnQxNl90IHdWYWx1ZTsKKwor ICAgIHVzYmlmID0gdXNiYmFja19yZXEtPnVzYmlmOworICAgIHN0dWIgPSBOVUxMOworICAgIGRl dm51bSA9IHVzYmlmX3BpcGVkZXZpY2UodXNiYmFja19yZXEtPnJlcS5waXBlKTsKKyAgICBjdHJs ID0gKHN0cnVjdCB1c2JpZl9jdHJscmVxdWVzdCAqKXVzYmJhY2tfcmVxLT5yZXEudS5jdHJsOwor ICAgIHdWYWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisKKyAgICAvKgorICAgICAq IFdoZW4gdGhlIGRldmljZSBpcyBmaXJzdCBjb25uZWN0ZWQgb3IgcmVzZXR0ZWQsIFVTQiBkZXZp Y2UgaGFzIG5vCisgICAgICogYWRkcmVzcy4gSW4gdGhpcyBpbml0aWFsIHN0YXRlLCBmb2xsb3dp bmcgcmVxdWVzdHMgYXJlIHNlbnQgdG8gZGV2aWNlCisgICAgICogYWRkcmVzcyAoIzApLAorICAg ICAqCisgICAgICogIDEuIEdFVF9ERVNDUklQVE9SICh3aXRoIERlc2NyaXB0b3IgVHlwZSBpcyAi REVWSUNFIikgaXMgc2VudCwKKyAgICAgKiAgICAgYW5kIE9TIGtub3dzIHdoYXQgZGV2aWNlIGlz IGNvbm5lY3RlZCB0by4KKyAgICAgKgorICAgICAqICAyLiBTRVRfQUREUkVTUyBpcyBzZW50LCBh bmQgdGhlbiBkZXZpY2UgaGFzIGl0cyBhZGRyZXNzLgorICAgICAqCisgICAgICogSW4gdGhlIG5l eHQgc3RlcCwgU0VUX0NPTkZJR1VSQVRJT04gaXMgc2VudCB0byBhZGRyZXNzZWQgZGV2aWNlLCBh bmQKKyAgICAgKiB0aGVuIHRoZSBkZXZpY2UgaXMgZmluYWxseSByZWFkeSB0byB1c2UuCisgICAg ICovCisgICAgaWYgKHVubGlrZWx5KGRldm51bSA9PSAwKSkgeworICAgICAgICBzdHViID0gdXNi aWYtPnBvcnRzICsgdXNiaWZfcGlwZXBvcnRudW0odXNiYmFja19yZXEtPnJlcS5waXBlKSAtIDE7 CisgICAgICAgIGlmICghc3R1Yi0+ZGV2IHx8ICFzdHViLT5hdHRhY2hlZCkgeworICAgICAgICAg ICAgcmV0ID0gLUVOT0RFVjsKKyAgICAgICAgICAgIGdvdG8gZG9fcmVzcG9uc2U7CisgICAgICAg IH0KKworICAgICAgICBzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisgICAgICAgIGNhc2UgVVNC X1JFUV9HRVRfREVTQ1JJUFRPUjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBHRVRf REVTQ1JJUFRPUiByZXF1ZXN0IHRvIGRldmljZSAjMC4KKyAgICAgICAgICAgICAqIHRocm91Z2gg bm9ybWFsIHRyYW5zZmVyLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBUUl9SRVEoJnVz YmlmLT54ZW5kZXYsICJkZXZudW0gMCBHRVRfREVTQ1JJUFRPUlxuIik7CisgICAgICAgICAgICB1 c2JiYWNrX3JlcS0+c3R1YiA9IHN0dWI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg Y2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IFNFVF9BRERSRVNTIHJlcXVlc3QgdG8gZGV2aWNlICMwLgorICAgICAgICAgICAgICogYWRkIGF0 dGFjaGVkIGRldmljZSB0byBhZGRyX3RhYmxlLgorICAgICAgICAgICAgICovCisgICAgICAgICAg ICBUUl9SRVEoJnVzYmlmLT54ZW5kZXYsICJkZXZudW0gMCBTRVRfQUREUkVTU1xuIik7CisgICAg ICAgICAgICB1c2JiYWNrX3NldF9hZGRyZXNzKHVzYmlmLCBzdHViLCAwLCB3VmFsdWUpOworICAg ICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIGdvdG8gZG9fcmVzcG9uc2U7CisgICAgfQorCisgICAgaWYgKHVubGlrZWx5KCF1 c2JpZi0+YWRkcl90YWJsZVtkZXZudW1dKSkgeworICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsK KyAgICAgICAgICAgIGdvdG8gZG9fcmVzcG9uc2U7CisgICAgfQorICAgIHVzYmJhY2tfcmVxLT5z dHViID0gdXNiaWYtPmFkZHJfdGFibGVbZGV2bnVtXTsKKworICAgIC8qCisgICAgICogQ2hlY2sg c3BlY2lhbCByZXF1ZXN0CisgICAgICovCisgICAgaWYgKGN0cmwtPmJSZXF1ZXN0ICE9IFVTQl9S RVFfU0VUX0FERFJFU1MpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAg ICAgKiBTRVRfQUREUkVTUyByZXF1ZXN0IHRvIGFkZHJlc3NlZCBkZXZpY2UuCisgICAgICogY2hh bmdlIGFkZHIgb3IgcmVtb3ZlIGZyb20gYWRkcl90YWJsZS4KKyAgICAgKi8KKyAgICB1c2JiYWNr X3NldF9hZGRyZXNzKHVzYmlmLCB1c2JiYWNrX3JlcS0+c3R1YiwgZGV2bnVtLCB3VmFsdWUpOwor ICAgIHJldCA9IDA7CisKK2RvX3Jlc3BvbnNlOgorICAgIHVzYmJhY2tfZG9fcmVzcG9uc2VfcmV0 KHVzYmJhY2tfcmVxLCByZXQpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1c2Ji YWNrX2Rpc3BhdGNoKHN0cnVjdCB1c2JiYWNrX3JlcSAqdXNiYmFja19yZXEpCit7CisgICAgaW50 IHJldDsKKyAgICB1bnNpZ25lZCBpbnQgZGV2bnVtOworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8g KnVzYmlmOworCisgICAgdXNiaWYgPSB1c2JiYWNrX3JlcS0+dXNiaWY7CisKKyAgICBUUl9SRVEo JnVzYmlmLT54ZW5kZXYsICJzdGFydCByZXFfaWQgJWQgcGlwZSAlMDh4XG4iLCB1c2JiYWNrX3Jl cS0+cmVxLmlkLAorICAgICAgICAgICB1c2JiYWNrX3JlcS0+cmVxLnBpcGUpOworCisgICAgLyog dW5saW5rIHJlcXVlc3QgKi8KKyAgICBpZiAodW5saWtlbHkodXNiaWZfcGlwZXVubGluayh1c2Ji YWNrX3JlcS0+cmVxLnBpcGUpKSkgeworICAgICAgICB1c2JiYWNrX3Byb2Nlc3NfdW5saW5rX3Jl cSh1c2JiYWNrX3JlcSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodXNiaWZf cGlwZWN0cmwodXNiYmFja19yZXEtPnJlcS5waXBlKSkgeworICAgICAgICBpZiAodXNiYmFja19j aGVja19hbmRfc3VibWl0KHVzYmJhY2tfcmVxKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGV2bnVtID0gdXNiaWZfcGlwZWRldmljZSh1 c2JiYWNrX3JlcS0+cmVxLnBpcGUpOworICAgICAgICB1c2JiYWNrX3JlcS0+c3R1YiA9IHVzYmlm LT5hZGRyX3RhYmxlW2Rldm51bV07CisKKyAgICAgICAgaWYgKCF1c2JiYWNrX3JlcS0+c3R1YiB8 fCAhdXNiYmFja19yZXEtPnN0dWItPmF0dGFjaGVkKSB7CisgICAgICAgICAgICByZXQgPSAtRU5P REVWOworICAgICAgICAgICAgZ290byBmYWlsX3Jlc3BvbnNlOworICAgICAgICB9CisgICAgfQor CisgICAgUVRBSUxRX0lOU0VSVF9UQUlMKCZ1c2JiYWNrX3JlcS0+c3R1Yi0+c3VibWl0X3EsIHVz YmJhY2tfcmVxLCBxKTsKKworICAgIHVzYmJhY2tfcmVxLT5ucl9idWZmZXJfc2VncyA9IHVzYmJh Y2tfcmVxLT5yZXEubnJfYnVmZmVyX3NlZ3M7CisgICAgdXNiYmFja19yZXEtPm5yX2V4dHJhX3Nl Z3MgPSB1c2JpZl9waXBlaXNvYyh1c2JiYWNrX3JlcS0+cmVxLnBpcGUpID8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzYmJhY2tfcmVxLT5yZXEudS5pc29jLm5yX2ZyYW1lX2Rl c2Nfc2VncyA6IDA7CisKKyAgICByZXQgPSB1c2JiYWNrX2luaXRfcGFja2V0KHVzYmJhY2tfcmVx KTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoJnVzYmlmLT54ZW5kZXYs IDAsICJpbnZhbGlkIHJlcXVlc3RcbiIpOworICAgICAgICByZXQgPSAtRVNIVVRET1dOOworICAg ICAgICBnb3RvIGZhaWxfZnJlZV91cmI7CisgICAgfQorCisgICAgcmV0ID0gdXNiYmFja19nbnR0 YWJfbWFwKHVzYmJhY2tfcmVxKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHhlbl9iZV9wcmlu dGYoJnVzYmlmLT54ZW5kZXYsIDAsICJpbnZhbGlkIGJ1ZmZlciwgcmV0PSVkXG4iLCByZXQpOwor ICAgICAgICByZXQgPSAtRVNIVVRET1dOOworICAgICAgICBnb3RvIGZhaWxfZnJlZV91cmI7Cisg ICAgfQorCisgICAgdXNiX2hhbmRsZV9wYWNrZXQodXNiYmFja19yZXEtPnN0dWItPmRldiwgJnVz YmJhY2tfcmVxLT5wYWNrZXQpOworICAgIGlmICh1c2JiYWNrX3JlcS0+cGFja2V0LnN0YXR1cyAh PSBVU0JfUkVUX0FTWU5DKSB7CisgICAgICAgIHVzYmJhY2tfcGFja2V0X2NvbXBsZXRlKCZ1c2Ji YWNrX3JlcS0+cGFja2V0KTsKKyAgICB9CisgICAgcmV0dXJuOworCitmYWlsX2ZyZWVfdXJiOgor ICAgIFFUQUlMUV9SRU1PVkUoJnVzYmJhY2tfcmVxLT5zdHViLT5zdWJtaXRfcSwgdXNiYmFja19y ZXEsIHEpOworCitmYWlsX3Jlc3BvbnNlOgorICAgIHVzYmJhY2tfZG9fcmVzcG9uc2VfcmV0KHVz YmJhY2tfcmVxLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB1c2JiYWNrX2hvdHBsdWdfbm90aWZ5 KHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmKQoreworICAgIHN0cnVjdCB1c2JpZl9jb25uX2Jh Y2tfcmluZyAqcmluZyA9ICZ1c2JpZi0+Y29ubl9yaW5nOworICAgIHN0cnVjdCB1c2JpZl9jb25u X3JlcXVlc3QgcmVxOworICAgIHN0cnVjdCB1c2JpZl9jb25uX3Jlc3BvbnNlICpyZXM7CisgICAg c3RydWN0IHVzYmJhY2tfaG90cGx1ZyAqdXNiX2hwOworICAgIHVuc2lnbmVkIGludCBub3RpZnk7 CisKKyAgICBpZiAoIXVzYmlmLT5jb25uX3NyaW5nKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisKKyAgICAvKiBDaGVjayBmb3IgZnVsbCByaW5nLiAqLworICAgIGlmICgoUklOR19TSVpFKHJp bmcpIC0gcmluZy0+cnNwX3Byb2RfcHZ0IC0gcmluZy0+cmVxX2NvbnMpID09IDApIHsKKyAgICAg ICAgeGVuX2JlX3NlbmRfbm90aWZ5KCZ1c2JpZi0+eGVuZGV2KTsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKworICAgIHVzYl9ocCA9IFFTSU1QTEVRX0ZJUlNUKCZ1c2JpZi0+aG90cGx1Z19xKTsK KyAgICBRU0lNUExFUV9SRU1PVkVfSEVBRCgmdXNiaWYtPmhvdHBsdWdfcSwgcSk7CisKKyAgICBS SU5HX0NPUFlfUkVRVUVTVChyaW5nLCByaW5nLT5yZXFfY29ucywgJnJlcSk7CisgICAgcmluZy0+ cmVxX2NvbnMrKzsKKyAgICByaW5nLT5zcmluZy0+cmVxX2V2ZW50ID0gcmluZy0+cmVxX2NvbnMg KyAxOworCisgICAgcmVzID0gUklOR19HRVRfUkVTUE9OU0UocmluZywgcmluZy0+cnNwX3Byb2Rf cHZ0KTsKKyAgICByZXMtPmlkID0gcmVxLmlkOworICAgIHJlcy0+cG9ydG51bSA9IHVzYl9ocC0+ cG9ydDsKKyAgICByZXMtPnNwZWVkID0gdXNiaWYtPnBvcnRzW3VzYl9ocC0+cG9ydCAtIDFdLnNw ZWVkOworICAgIHJpbmctPnJzcF9wcm9kX3B2dCsrOworICAgIFJJTkdfUFVTSF9SRVNQT05TRVNf QU5EX0NIRUNLX05PVElGWShyaW5nLCBub3RpZnkpOworCisgICAgaWYgKG5vdGlmeSkgeworICAg ICAgICB4ZW5fYmVfc2VuZF9ub3RpZnkoJnVzYmlmLT54ZW5kZXYpOworICAgIH0KKworICAgIFRS X0JVUygmdXNiaWYtPnhlbmRldiwgImhvdHBsdWcgcG9ydCAlZCBzcGVlZCAlZFxuIiwgdXNiX2hw LT5wb3J0LAorICAgICAgICAgICByZXMtPnNwZWVkKTsKKworICAgIGdfZnJlZSh1c2JfaHApOwor CisgICAgaWYgKCFRU0lNUExFUV9FTVBUWSgmdXNiaWYtPmhvdHBsdWdfcSkpIHsKKyAgICAgICAg cWVtdV9iaF9zY2hlZHVsZSh1c2JpZi0+YmgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdXNi YmFja19iaCh2b2lkICpvcGFxdWUpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7 CisgICAgc3RydWN0IHVzYmlmX3VyYl9iYWNrX3JpbmcgKnVyYl9yaW5nOworICAgIHN0cnVjdCB1 c2JiYWNrX3JlcSAqdXNiYmFja19yZXE7CisgICAgUklOR19JRFggcmMsIHJwOworICAgIHVuc2ln bmVkIGludCBtb3JlX3RvX2RvOworCisgICAgdXNiaWYgPSBvcGFxdWU7CisgICAgaWYgKHVzYmlm LT5yaW5nX2Vycm9yKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVFTSU1Q TEVRX0VNUFRZKCZ1c2JpZi0+aG90cGx1Z19xKSkgeworICAgICAgICB1c2JiYWNrX2hvdHBsdWdf bm90aWZ5KHVzYmlmKTsKKyAgICB9CisKKyAgICB1cmJfcmluZyA9ICZ1c2JpZi0+dXJiX3Jpbmc7 CisgICAgcmMgPSB1cmJfcmluZy0+cmVxX2NvbnM7CisgICAgcnAgPSB1cmJfcmluZy0+c3Jpbmct PnJlcV9wcm9kOworICAgIHhlbl9ybWIoKTsgLyogRW5zdXJlIHdlIHNlZSBxdWV1ZWQgcmVxdWVz dHMgdXAgdG8gJ3JwJy4gKi8KKworICAgIGlmIChSSU5HX1JFUVVFU1RfUFJPRF9PVkVSRkxPVyh1 cmJfcmluZywgcnApKSB7CisgICAgICAgIHJjID0gdXJiX3JpbmctPnJzcF9wcm9kX3B2dDsKKyAg ICAgICAgeGVuX2JlX3ByaW50ZigmdXNiaWYtPnhlbmRldiwgMCwgImRvbVUgcHJvdmlkZWQgYm9n dXMgcmluZyByZXF1ZXN0cyAiCisgICAgICAgICAgICAgICAgICAgICAgIiglI3ggLSAlI3ggPSAl dSkuIEhhbHRpbmcgcmluZyBwcm9jZXNzaW5nLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBy cCwgcmMsIHJwIC0gcmMpOworICAgICAgICB1c2JpZi0+cmluZ19lcnJvciA9IHRydWU7CisgICAg ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAocmMgIT0gcnApIHsKKyAgICAgICAgaWYg KFJJTkdfUkVRVUVTVF9DT05TX09WRVJGTE9XKHVyYl9yaW5nLCByYykpIHsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHVzYmJhY2tfcmVxID0gdXNiYmFja19nZXRfcmVx KHVzYmlmKTsKKworICAgICAgICBSSU5HX0NPUFlfUkVRVUVTVCh1cmJfcmluZywgcmMsICZ1c2Ji YWNrX3JlcS0+cmVxKTsKKyAgICAgICAgdXNiYmFja19yZXEtPnVzYmlmID0gdXNiaWY7CisKKyAg ICAgICAgdXNiYmFja19kaXNwYXRjaCh1c2JiYWNrX3JlcSk7CisKKyAgICAgICAgdXJiX3Jpbmct PnJlcV9jb25zID0gKytyYzsKKyAgICB9CisKKyAgICBSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVFV RVNUUyh1cmJfcmluZywgbW9yZV90b19kbyk7CisgICAgaWYgKG1vcmVfdG9fZG8pIHsKKyAgICAg ICAgcWVtdV9iaF9zY2hlZHVsZSh1c2JpZi0+YmgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg dXNiYmFja19ob3RwbHVnX2VucShzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZiwgdW5zaWduZWQg cG9ydCkKK3sKKyAgICBzdHJ1Y3QgdXNiYmFja19ob3RwbHVnICp1c2JfaHA7CisKKyAgICB1c2Jf aHAgPSBnX25ldzAoc3RydWN0IHVzYmJhY2tfaG90cGx1ZywgMSk7CisgICAgdXNiX2hwLT5wb3J0 ID0gcG9ydDsKKyAgICBRU0lNUExFUV9JTlNFUlRfVEFJTCgmdXNiaWYtPmhvdHBsdWdfcSwgdXNi X2hwLCBxKTsKKyAgICB1c2JiYWNrX2hvdHBsdWdfbm90aWZ5KHVzYmlmKTsKK30KKworc3RhdGlj IHZvaWQgdXNiYmFja19wb3J0aWRfcmVtb3ZlKHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmLCB1 bnNpZ25lZCBwb3J0KQoreworICAgIFVTQlBvcnQgKnA7CisKKyAgICBpZiAoIXVzYmlmLT5wb3J0 c1twb3J0IC0gMV0uZGV2KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwID0gJih1 c2JpZi0+cG9ydHNbcG9ydCAtIDFdLnBvcnQpOworICAgIHNucHJpbnRmKHAtPnBhdGgsIHNpemVv ZihwLT5wYXRoKSwgIiVkIiwgOTkpOworCisgICAgb2JqZWN0X3VucGFyZW50KE9CSkVDVCh1c2Jp Zi0+cG9ydHNbcG9ydCAtIDFdLmRldikpOworICAgIHVzYmlmLT5wb3J0c1twb3J0IC0gMV0uZGV2 ID0gTlVMTDsKKyAgICB1c2JpZi0+cG9ydHNbcG9ydCAtIDFdLnNwZWVkID0gVVNCSUZfU1BFRURf Tk9ORTsKKyAgICB1c2JpZi0+cG9ydHNbcG9ydCAtIDFdLmF0dGFjaGVkID0gZmFsc2U7CisgICAg dXNiYmFja19ob3RwbHVnX2VucSh1c2JpZiwgcG9ydCk7CisKKyAgICBUUl9CVVMoJnVzYmlmLT54 ZW5kZXYsICJwb3J0ICVkIHJlbW92ZWRcbiIsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCB1c2Ji YWNrX3BvcnRpZF9hZGQoc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWYsIHVuc2lnbmVkIHBvcnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVzaWQpCit7CisgICAgdW5z aWduZWQgc3BlZWQ7CisgICAgY2hhciAqcG9ydG5hbWU7CisgICAgVVNCUG9ydCAqcDsKKyAgICBF cnJvciAqbG9jYWxfZXJyID0gTlVMTDsKKyAgICBRRGljdCAqcWRpY3Q7CisgICAgUWVtdU9wdHMg Km9wdHM7CisKKyAgICBpZiAodXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5kZXYpIHsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIHBvcnRuYW1lID0gc3RyY2hyKGJ1c2lkLCAnLScpOworICAg IGlmICghcG9ydG5hbWUpIHsKKyAgICAgICAgeGVuX2JlX3ByaW50ZigmdXNiaWYtPnhlbmRldiwg MCwgImRldmljZSAlcyBpbGxlZ2FsIHNwZWNpZmljYXRpb25cbiIsCisgICAgICAgICAgICAgICAg ICAgICAgYnVzaWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBvcnRuYW1lKys7Cisg ICAgcCA9ICYodXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5wb3J0KTsKKyAgICBzbnByaW50ZihwLT5w YXRoLCBzaXplb2YocC0+cGF0aCksICIlcyIsIHBvcnRuYW1lKTsKKworICAgIHFkaWN0ID0gcWRp Y3RfbmV3KCk7CisgICAgcWRpY3RfcHV0KHFkaWN0LCAiZHJpdmVyIiwgcXN0cmluZ19mcm9tX3N0 cigidXNiLWhvc3QiKSk7CisgICAgcWRpY3RfcHV0KHFkaWN0LCAiaG9zdGJ1cyIsIHFpbnRfZnJv bV9pbnQoYXRvaShidXNpZCkpKTsKKyAgICBxZGljdF9wdXQocWRpY3QsICJob3N0cG9ydCIsIHFz dHJpbmdfZnJvbV9zdHIocG9ydG5hbWUpKTsKKyAgICBvcHRzID0gcWVtdV9vcHRzX2Zyb21fcWRp Y3QocWVtdV9maW5kX29wdHMoImRldmljZSIpLCBxZGljdCwgJmxvY2FsX2Vycik7CisgICAgaWYg KGxvY2FsX2VycikgeworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisgICAgdXNiaWYtPnBvcnRz W3BvcnQgLSAxXS5kZXYgPSBVU0JfREVWSUNFKHFkZXZfZGV2aWNlX2FkZChvcHRzLCAmbG9jYWxf ZXJyKSk7CisgICAgaWYgKCF1c2JpZi0+cG9ydHNbcG9ydCAtIDFdLmRldikgeworICAgICAgICBn b3RvIGVycjsKKyAgICB9CisgICAgUURFQ1JFRihxZGljdCk7CisgICAgc25wcmludGYocC0+cGF0 aCwgc2l6ZW9mKHAtPnBhdGgpLCAiJWQiLCBwb3J0KTsKKyAgICBzcGVlZCA9IHVzYmlmLT5wb3J0 c1twb3J0IC0gMV0uZGV2LT5zcGVlZDsKKyAgICBzd2l0Y2ggKHNwZWVkKSB7CisgICAgY2FzZSBV U0JfU1BFRURfTE9XOgorICAgICAgICBzcGVlZCA9IFVTQklGX1NQRUVEX0xPVzsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBVU0JfU1BFRURfRlVMTDoKKyAgICAgICAgc3BlZWQgPSBVU0JJRl9T UEVFRF9GVUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVTQl9TUEVFRF9ISUdIOgorICAg ICAgICBzcGVlZCA9ICh1c2JpZi0+dXNiX3ZlciA8IFVTQl9WRVJfVVNCMjApID8KKyAgICAgICAg ICAgICAgICBVU0JJRl9TUEVFRF9OT05FIDogVVNCSUZfU1BFRURfSElHSDsKKyAgICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3BlZWQgPSBVU0JJRl9TUEVFRF9OT05FOworICAg ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHNwZWVkID09IFVTQklGX1NQRUVEX05PTkUpIHsK KyAgICAgICAgeGVuX2JlX3ByaW50ZigmdXNiaWYtPnhlbmRldiwgMCwgImRldmljZSAlcyB3cm9u ZyBzcGVlZFxuIiwgYnVzaWQpOworICAgICAgICBvYmplY3RfdW5wYXJlbnQoT0JKRUNUKHVzYmlm LT5wb3J0c1twb3J0IC0gMV0uZGV2KSk7CisgICAgICAgIHVzYmlmLT5wb3J0c1twb3J0IC0gMV0u ZGV2ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB1c2JfZGV2aWNlX3Jlc2V0 KHVzYmlmLT5wb3J0c1twb3J0IC0gMV0uZGV2KTsKKyAgICB1c2JpZi0+cG9ydHNbcG9ydCAtIDFd LnNwZWVkID0gc3BlZWQ7CisgICAgdXNiaWYtPnBvcnRzW3BvcnQgLSAxXS5hdHRhY2hlZCA9IHRy dWU7CisgICAgUVRBSUxRX0lOSVQoJnVzYmlmLT5wb3J0c1twb3J0IC0gMV0uc3VibWl0X3EpOwor ICAgIHVzYmJhY2tfaG90cGx1Z19lbnEodXNiaWYsIHBvcnQpOworCisgICAgVFJfQlVTKCZ1c2Jp Zi0+eGVuZGV2LCAicG9ydCAlZCBhdHRhY2hlZFxuIiwgcG9ydCk7CisgICAgcmV0dXJuOworCitl cnI6CisgICAgUURFQ1JFRihxZGljdCk7CisgICAgc25wcmludGYocC0+cGF0aCwgc2l6ZW9mKHAt PnBhdGgpLCAiJWQiLCA5OSk7CisgICAgeGVuX2JlX3ByaW50ZigmdXNiaWYtPnhlbmRldiwgMCwg ImRldmljZSAlcyBjb3VsZCBub3QgYmUgb3BlbmVkXG4iLCBidXNpZCk7Cit9CisKK3N0YXRpYyB2 b2lkIHVzYmJhY2tfcHJvY2Vzc19wb3J0KHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmLCB1bnNp Z25lZCBwb3J0KQoreworICAgIGNoYXIgbm9kZVs4XTsKKyAgICBjaGFyICpidXNpZDsKKworICAg IHNucHJpbnRmKG5vZGUsIHNpemVvZihub2RlKSwgInBvcnQvJWQiLCBwb3J0KTsKKyAgICBidXNp ZCA9IHhlbnN0b3JlX3JlYWRfYmVfc3RyKCZ1c2JpZi0+eGVuZGV2LCBub2RlKTsKKyAgICBpZiAo YnVzaWQgPT0gTlVMTCkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKCZ1c2JpZi0+eGVuZGV2LCAw LCAieGVuc3RvcmVfcmVhZCAlcyBmYWlsZWRcbiIsIG5vZGUpOworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgLyogUmVtb3ZlIHBvcnRpZCwgaWYgdGhlIHBvcnQgaXMgbm90IGNvbm5lY3Rl ZC4gICovCisgICAgaWYgKHN0cmxlbihidXNpZCkgPT0gMCkgeworICAgICAgICB1c2JiYWNrX3Bv cnRpZF9yZW1vdmUodXNiaWYsIHBvcnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVzYmJhY2tf cG9ydGlkX2FkZCh1c2JpZiwgcG9ydCwgYnVzaWQpOworICAgIH0KKworICAgIGdfZnJlZShidXNp ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tfZGlzY29ubmVjdChzdHJ1Y3QgWGVuRGV2aWNl ICp4ZW5kZXYpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAgc3RydWN0 IHVzYmJhY2tfcmVxICpyZXEsICp0bXA7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBUUl9C VVMoeGVuZGV2LCAic3RhcnRcbiIpOworCisgICAgdXNiaWYgPSBjb250YWluZXJfb2YoeGVuZGV2 LCBzdHJ1Y3QgdXNiYmFja19pbmZvLCB4ZW5kZXYpOworCisgICAgeGVuX2JlX3VuYmluZF9ldnRj aG4oeGVuZGV2KTsKKworICAgIGlmICh1c2JpZi0+dXJiX3NyaW5nKSB7CisgICAgICAgIHhlbmdu dHRhYl91bm1hcCh4ZW5kZXYtPmdudHRhYmRldiwgdXNiaWYtPnVyYl9zcmluZywgMSk7CisgICAg ICAgIHVzYmlmLT51cmJfc3JpbmcgPSBOVUxMOworICAgIH0KKyAgICBpZiAodXNiaWYtPmNvbm5f c3JpbmcpIHsKKyAgICAgICAgeGVuZ250dGFiX3VubWFwKHhlbmRldi0+Z250dGFiZGV2LCB1c2Jp Zi0+Y29ubl9zcmluZywgMSk7CisgICAgICAgIHVzYmlmLT5jb25uX3NyaW5nID0gTlVMTDsKKyAg ICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNiaWYtPm51bV9wb3J0czsgaSsrKSB7CisgICAg ICAgIGlmICghdXNiaWYtPnBvcnRzW2ldLmRldikgeworICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0KKyAgICAgICAgUVRBSUxRX0ZPUkVBQ0hfU0FGRShyZXEsICZ1c2JpZi0+cG9ydHNb aV0uc3VibWl0X3EsIHEsIHRtcCkgeworICAgICAgICAgICAgdXNiYmFja19jYW5jZWxfcmVxKHJl cSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUl9CVVMoeGVuZGV2LCAiZmluaXNoZWRcbiIp OworfQorCitzdGF0aWMgaW50IHVzYmJhY2tfY29ubmVjdChzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5k ZXYpCit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisgICAgc3RydWN0IHVzYmlm X3VyYl9zcmluZyAqdXJiX3NyaW5nOworICAgIHN0cnVjdCB1c2JpZl9jb25uX3NyaW5nICpjb25u X3NyaW5nOworICAgIGludCB1cmJfcmluZ19yZWY7CisgICAgaW50IGNvbm5fcmluZ19yZWY7Cisg ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBUUl9CVVMoeGVuZGV2LCAic3RhcnRcbiIpOworCisg ICAgdXNiaWYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBzdHJ1Y3QgdXNiYmFja19pbmZvLCB4ZW5k ZXYpOworCisgICAgaWYgKHhlbnN0b3JlX3JlYWRfZmVfaW50KHhlbmRldiwgInVyYi1yaW5nLXJl ZiIsICZ1cmJfcmluZ19yZWYpKSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAwLCAi ZXJyb3IgcmVhZGluZyB1cmItcmluZy1yZWZcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorICAgIGlmICh4ZW5zdG9yZV9yZWFkX2ZlX2ludCh4ZW5kZXYsICJjb25uLXJpbmctcmVmIiwg JmNvbm5fcmluZ19yZWYpKSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAwLCAiZXJy b3IgcmVhZGluZyBjb25uLXJpbmctcmVmXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KyAgICBpZiAoeGVuc3RvcmVfcmVhZF9mZV9pbnQoeGVuZGV2LCAiZXZlbnQtY2hhbm5lbCIsICZ4 ZW5kZXYtPnJlbW90ZV9wb3J0KSkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRldiwgMCwg ImVycm9yIHJlYWRpbmcgZXZlbnQtY2hhbm5lbFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICB1c2JpZi0+dXJiX3NyaW5nID0geGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGVu ZGV2LT5nbnR0YWJkZXYsIHhlbmRldi0+ZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1cmJfcmluZ19yZWYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIHVz YmlmLT5jb25uX3NyaW5nID0geGVuZ250dGFiX21hcF9ncmFudF9yZWYoeGVuZGV2LT5nbnR0YWJk ZXYsIHhlbmRldi0+ZG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29ubl9yaW5nX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworICAgIGlmICghdXNiaWYt PnVyYl9zcmluZyB8fCAhdXNiaWYtPmNvbm5fc3JpbmcpIHsKKyAgICAgICAgeGVuX2JlX3ByaW50 Zih4ZW5kZXYsIDAsICJlcnJvciBtYXBwaW5nIHJpbmdzXG4iKTsKKyAgICAgICAgdXNiYmFja19k aXNjb25uZWN0KHhlbmRldik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB1cmJf c3JpbmcgPSB1c2JpZi0+dXJiX3NyaW5nOworICAgIGNvbm5fc3JpbmcgPSB1c2JpZi0+Y29ubl9z cmluZzsKKyAgICBCQUNLX1JJTkdfSU5JVCgmdXNiaWYtPnVyYl9yaW5nLCB1cmJfc3JpbmcsIFhD X1BBR0VfU0laRSk7CisgICAgQkFDS19SSU5HX0lOSVQoJnVzYmlmLT5jb25uX3JpbmcsIGNvbm5f c3JpbmcsIFhDX1BBR0VfU0laRSk7CisKKyAgICB4ZW5fYmVfYmluZF9ldnRjaG4oeGVuZGV2KTsK KworICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAxLCAidXJiLXJpbmctcmVmICVkLCBjb25uLXJp bmctcmVmICVkLCAiCisgICAgICAgICAgICAgICAgICAicmVtb3RlIHBvcnQgJWQsIGxvY2FsIHBv cnQgJWRcbiIsIHVyYl9yaW5nX3JlZiwKKyAgICAgICAgICAgICAgICAgIGNvbm5fcmluZ19yZWYs IHhlbmRldi0+cmVtb3RlX3BvcnQsIHhlbmRldi0+bG9jYWxfcG9ydCk7CisKKyAgICBmb3IgKGkg PSAxOyBpIDw9IHVzYmlmLT5udW1fcG9ydHM7IGkrKykgeworICAgICAgICBpZiAodXNiaWYtPnBv cnRzW2kgLSAxXS5kZXYpIHsKKyAgICAgICAgICAgIHVzYmJhY2tfaG90cGx1Z19lbnEodXNiaWYs IGkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHVzYmJhY2tfYmFja2VuZF9jaGFuZ2VkKHN0cnVjdCBYZW5EZXZpY2UgKnhlbmRldiwgY29uc3Qg Y2hhciAqbm9kZSkKK3sKKyAgICBzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZjsKKyAgICB1bnNp Z25lZCBpbnQgaTsKKworICAgIFRSX0JVUyh4ZW5kZXYsICJwYXRoICVzXG4iLCBub2RlKTsKKwor ICAgIHVzYmlmID0gY29udGFpbmVyX29mKHhlbmRldiwgc3RydWN0IHVzYmJhY2tfaW5mbywgeGVu ZGV2KTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IHVzYmlmLT5udW1fcG9ydHM7IGkrKykgeworICAg ICAgICB1c2JiYWNrX3Byb2Nlc3NfcG9ydCh1c2JpZiwgaSk7CisgICAgfQorfQorCitzdGF0aWMg aW50IHVzYmJhY2tfaW5pdChzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYpCit7CisgICAgc3RydWN0 IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisKKyAgICBUUl9CVVMoeGVuZGV2LCAic3RhcnRcbiIpOwor CisgICAgdXNiaWYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBzdHJ1Y3QgdXNiYmFja19pbmZvLCB4 ZW5kZXYpOworCisgICAgaWYgKHhlbnN0b3JlX3JlYWRfYmVfaW50KHhlbmRldiwgIm51bS1wb3J0 cyIsICZ1c2JpZi0+bnVtX3BvcnRzKSB8fAorICAgICAgICB1c2JpZi0+bnVtX3BvcnRzIDwgMSB8 fCB1c2JpZi0+bnVtX3BvcnRzID4gVVNCQkFDS19NQVhQT1JUUykgeworICAgICAgICB4ZW5fYmVf cHJpbnRmKHhlbmRldiwgMCwgIm51bS1wb3J0cyBub3QgcmVhZGFibGUgb3Igb3V0IG9mIGJvdW5k c1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHhlbnN0b3JlX3JlYWRf YmVfaW50KHhlbmRldiwgInVzYi12ZXIiLCAmdXNiaWYtPnVzYl92ZXIpIHx8CisgICAgICAgICh1 c2JpZi0+dXNiX3ZlciAhPSBVU0JfVkVSX1VTQjExICYmIHVzYmlmLT51c2JfdmVyICE9IFVTQl9W RVJfVVNCMjApKSB7CisgICAgICAgIHhlbl9iZV9wcmludGYoeGVuZGV2LCAwLCAidXNiLXZlciBu b3QgcmVhZGFibGUgb3Igb3V0IG9mIGJvdW5kc1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICB1c2JiYWNrX2JhY2tlbmRfY2hhbmdlZCh4ZW5kZXYsICJwb3J0Iik7CisKKyAg ICBUUl9CVVMoeGVuZGV2LCAiZmluaXNoZWRcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIHhlbl9idXNfYXR0YWNoKFVTQlBvcnQgKnBvcnQpCit7CisgICAgc3RydWN0IHVz YmJhY2tfaW5mbyAqdXNiaWY7CisKKyAgICB1c2JpZiA9IHBvcnQtPm9wYXF1ZTsKKyAgICBUUl9C VVMoJnVzYmlmLT54ZW5kZXYsICJcbiIpOworICAgIHVzYmlmLT5wb3J0c1twb3J0LT5pbmRleF0u YXR0YWNoZWQgPSB0cnVlOworICAgIHVzYmJhY2tfaG90cGx1Z19lbnEodXNiaWYsIHBvcnQtPmlu ZGV4ICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9idXNfZGV0YWNoKFVTQlBvcnQgKnBvcnQp Cit7CisgICAgc3RydWN0IHVzYmJhY2tfaW5mbyAqdXNiaWY7CisKKyAgICB1c2JpZiA9IHBvcnQt Pm9wYXF1ZTsKKyAgICBUUl9CVVMoJnVzYmlmLT54ZW5kZXYsICJcbiIpOworICAgIHVzYmlmLT5w b3J0c1twb3J0LT5pbmRleF0uYXR0YWNoZWQgPSBmYWxzZTsKKyAgICB1c2JiYWNrX2hvdHBsdWdf ZW5xKHVzYmlmLCBwb3J0LT5pbmRleCArIDEpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fYnVzX2No aWxkX2RldGFjaChVU0JQb3J0ICpwb3J0LCBVU0JEZXZpY2UgKmNoaWxkKQoreworICAgIHN0cnVj dCB1c2JiYWNrX2luZm8gKnVzYmlmOworCisgICAgdXNiaWYgPSBwb3J0LT5vcGFxdWU7CisgICAg VFJfQlVTKCZ1c2JpZi0+eGVuZGV2LCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeGVuX2J1c19j b21wbGV0ZShVU0JQb3J0ICpwb3J0LCBVU0JQYWNrZXQgKnBhY2tldCkKK3sKKyAgICBzdHJ1Y3Qg dXNiYmFja19pbmZvICp1c2JpZjsKKworICAgIHVzYmlmID0gcG9ydC0+b3BhcXVlOworICAgIFRS X1JFUSgmdXNiaWYtPnhlbmRldiwgIlxuIik7CisgICAgdXNiYmFja19wYWNrZXRfY29tcGxldGUo cGFja2V0KTsKK30KKworc3RhdGljIFVTQlBvcnRPcHMgeGVuX3VzYl9wb3J0X29wcyA9IHsKKyAg ICAuYXR0YWNoID0geGVuX2J1c19hdHRhY2gsCisgICAgLmRldGFjaCA9IHhlbl9idXNfZGV0YWNo LAorICAgIC5jaGlsZF9kZXRhY2ggPSB4ZW5fYnVzX2NoaWxkX2RldGFjaCwKKyAgICAuY29tcGxl dGUgPSB4ZW5fYnVzX2NvbXBsZXRlLAorfTsKKworc3RhdGljIFVTQkJ1c09wcyB4ZW5fdXNiX2J1 c19vcHMgPSB7Cit9OworCitzdGF0aWMgdm9pZCB1c2JiYWNrX2FsbG9jKHN0cnVjdCBYZW5EZXZp Y2UgKnhlbmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiYmFja19pbmZvICp1c2JpZjsKKyAgICBVU0JQ b3J0ICpwOworICAgIHVuc2lnbmVkIGludCBpLCBtYXhfZ3JhbnRzOworCisgICAgdXNiaWYgPSBj b250YWluZXJfb2YoeGVuZGV2LCBzdHJ1Y3QgdXNiYmFja19pbmZvLCB4ZW5kZXYpOworCisgICAg dXNiX2J1c19uZXcoJnVzYmlmLT5idXMsIHNpemVvZih1c2JpZi0+YnVzKSwgJnhlbl91c2JfYnVz X29wcywgeGVuX3N5c2Rldik7CisgICAgZm9yIChpID0gMDsgaSA8IFVTQkJBQ0tfTUFYUE9SVFM7 IGkrKykgeworICAgICAgICBwID0gJih1c2JpZi0+cG9ydHNbaV0ucG9ydCk7CisgICAgICAgIHVz Yl9yZWdpc3Rlcl9wb3J0KCZ1c2JpZi0+YnVzLCBwLCB1c2JpZiwgaSwgJnhlbl91c2JfcG9ydF9v cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9TUEVFRF9NQVNLX0xPVyB8IFVTQl9T UEVFRF9NQVNLX0ZVTEwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfU1BFRURfTUFT S19ISUdIKTsKKyAgICAgICAgc25wcmludGYocC0+cGF0aCwgc2l6ZW9mKHAtPnBhdGgpLCAiJWQi LCA5OSk7CisgICAgfQorCisgICAgUVRBSUxRX0lOSVQoJnVzYmlmLT5yZXFfZnJlZV9xKTsKKyAg ICBRU0lNUExFUV9JTklUKCZ1c2JpZi0+aG90cGx1Z19xKTsKKyAgICB1c2JpZi0+YmggPSBxZW11 X2JoX25ldyh1c2JiYWNrX2JoLCB1c2JpZik7CisKKyAgICAvKiBtYXhfZ3JhbnRzOiBmb3IgZWFj aCByZXF1ZXN0IGFuZCBmb3IgdGhlIHJpbmdzIChyZXF1ZXN0IGFuZCBjb25uZWN0KS4gKi8KKyAg ICBtYXhfZ3JhbnRzID0gVVNCSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUICogVVNCX1VSQl9S SU5HX1NJWkUgKyAyOworICAgIGlmICh4ZW5nbnR0YWJfc2V0X21heF9ncmFudHMoeGVuZGV2LT5n bnR0YWJkZXYsIG1heF9ncmFudHMpIDwgMCkgeworICAgICAgICB4ZW5fYmVfcHJpbnRmKHhlbmRl diwgMCwgInhlbmdudHRhYl9zZXRfbWF4X2dyYW50cyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAg ICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHVz YmJhY2tfZnJlZShzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYpCit7CisgICAgc3RydWN0IHVzYmJh Y2tfaW5mbyAqdXNiaWY7CisgICAgc3RydWN0IHVzYmJhY2tfcmVxICp1c2JiYWNrX3JlcTsKKyAg ICBzdHJ1Y3QgdXNiYmFja19ob3RwbHVnICp1c2JfaHA7CisgICAgdW5zaWduZWQgaW50IGk7CisK KyAgICBUUl9CVVMoeGVuZGV2LCAic3RhcnRcbiIpOworCisgICAgdXNiYmFja19kaXNjb25uZWN0 KHhlbmRldik7CisgICAgdXNiaWYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBzdHJ1Y3QgdXNiYmFj a19pbmZvLCB4ZW5kZXYpOworICAgIGZvciAoaSA9IDE7IGkgPD0gdXNiaWYtPm51bV9wb3J0czsg aSsrKSB7CisgICAgICAgIHVzYmJhY2tfcG9ydGlkX3JlbW92ZSh1c2JpZiwgaSk7CisgICAgfQor CisgICAgd2hpbGUgKCFRVEFJTFFfRU1QVFkoJnVzYmlmLT5yZXFfZnJlZV9xKSkgeworICAgICAg ICB1c2JiYWNrX3JlcSA9IFFUQUlMUV9GSVJTVCgmdXNiaWYtPnJlcV9mcmVlX3EpOworICAgICAg ICBRVEFJTFFfUkVNT1ZFKCZ1c2JpZi0+cmVxX2ZyZWVfcSwgdXNiYmFja19yZXEsIHEpOworICAg ICAgICBnX2ZyZWUodXNiYmFja19yZXEpOworICAgIH0KKyAgICB3aGlsZSAoIVFTSU1QTEVRX0VN UFRZKCZ1c2JpZi0+aG90cGx1Z19xKSkgeworICAgICAgICB1c2JfaHAgPSBRU0lNUExFUV9GSVJT VCgmdXNiaWYtPmhvdHBsdWdfcSk7CisgICAgICAgIFFTSU1QTEVRX1JFTU9WRV9IRUFEKCZ1c2Jp Zi0+aG90cGx1Z19xLCBxKTsKKyAgICAgICAgZ19mcmVlKHVzYl9ocCk7CisgICAgfQorCisgICAg cWVtdV9iaF9kZWxldGUodXNiaWYtPmJoKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBVU0JCQUNL X01BWFBPUlRTOyBpKyspIHsKKyAgICAgICAgdXNiX3VucmVnaXN0ZXJfcG9ydCgmdXNiaWYtPmJ1 cywgJih1c2JpZi0+cG9ydHNbaV0ucG9ydCkpOworICAgIH0KKworICAgIHVzYl9idXNfcmVsZWFz ZSgmdXNiaWYtPmJ1cyk7CisKKyAgICBUUl9CVVMoeGVuZGV2LCAiZmluaXNoZWRcbiIpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmJhY2tfZXZlbnQoc3RydWN0IFhlbkRl dmljZSAqeGVuZGV2KQoreworICAgIHN0cnVjdCB1c2JiYWNrX2luZm8gKnVzYmlmOworCisgICAg dXNiaWYgPSBjb250YWluZXJfb2YoeGVuZGV2LCBzdHJ1Y3QgdXNiYmFja19pbmZvLCB4ZW5kZXYp OworICAgIHFlbXVfYmhfc2NoZWR1bGUodXNiaWYtPmJoKTsKK30KKworc3RydWN0IFhlbkRldk9w cyB4ZW5fdXNiX29wcyA9IHsKKyAgICAuc2l6ZSAgICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB1 c2JiYWNrX2luZm8pLAorICAgIC5mbGFncyAgICAgICAgICAgPSBERVZPUFNfRkxBR19ORUVEX0dO VERFViwKKyAgICAuaW5pdCAgICAgICAgICAgID0gdXNiYmFja19pbml0LAorICAgIC5hbGxvYyAg ICAgICAgICAgPSB1c2JiYWNrX2FsbG9jLAorICAgIC5mcmVlICAgICAgICAgICAgPSB1c2JiYWNr X2ZyZWUsCisgICAgLmJhY2tlbmRfY2hhbmdlZCA9IHVzYmJhY2tfYmFja2VuZF9jaGFuZ2VkLAor ICAgIC5pbml0aWFsaXNlICAgICAgPSB1c2JiYWNrX2Nvbm5lY3QsCisgICAgLmRpc2Nvbm5lY3Qg ICAgICA9IHVzYmJhY2tfZGlzY29ubmVjdCwKKyAgICAuZXZlbnQgICAgICAgICAgID0gdXNiYmFj a19ldmVudCwKK307CisKKyNlbHNlIC8qIFVTQklGX1NIT1JUX05PVF9PSyAqLworCitzdGF0aWMg aW50IHVzYmJhY2tfbm90X3N1cHBvcnRlZCh2b2lkKQoreworICAgIHJldHVybiAtRUlOVkFMOwor fQorCitzdHJ1Y3QgWGVuRGV2T3BzIHhlbl91c2Jfb3BzID0geworICAgIC5iYWNrZW5kX3JlZ2lz dGVyID0gdXNiYmFja19ub3Rfc3VwcG9ydGVkLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9o dy94ZW5wdi94ZW5fbWFjaGluZV9wdi5jIGIvaHcveGVucHYveGVuX21hY2hpbmVfcHYuYwppbmRl eCA0OGQ1YmM2Li5mNjhjZjQ4IDEwMDY0NAotLS0gYS9ody94ZW5wdi94ZW5fbWFjaGluZV9wdi5j CisrKyBiL2h3L3hlbnB2L3hlbl9tYWNoaW5lX3B2LmMKQEAgLTgwLDYgKzgwLDkgQEAgc3RhdGlj IHZvaWQgeGVuX2luaXRfcHYoTWFjaGluZVN0YXRlICptYWNoaW5lKQogICAgIHhlbl9iZV9yZWdp c3RlcigidmZiIiwgJnhlbl9mcmFtZWJ1ZmZlcl9vcHMpOwogICAgIHhlbl9iZV9yZWdpc3Rlcigi cWRpc2siLCAmeGVuX2Jsa2Rldl9vcHMpOwogICAgIHhlbl9iZV9yZWdpc3RlcigicW5pYyIsICZ4 ZW5fbmV0ZGV2X29wcyk7CisjaWZkZWYgQ09ORklHX1VTQl9MSUJVU0IKKyAgICB4ZW5fYmVfcmVn aXN0ZXIoInF1c2IiLCAmeGVuX3VzYl9vcHMpOworI2VuZGlmCiAKICAgICAvKiBjb25maWd1cmUg ZnJhbWVidWZmZXIgKi8KICAgICBpZiAoeGVuZmJfZW5hYmxlZCkgewpkaWZmIC0tZ2l0IGEvaW5j bHVkZS9ody94ZW4veGVuX2JhY2tlbmQuaCBiL2luY2x1ZGUvaHcveGVuL3hlbl9iYWNrZW5kLmgK aW5kZXggNjMzNjRmNy4uNmUxOGE0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ody94ZW4veGVuX2Jh Y2tlbmQuaAorKysgYi9pbmNsdWRlL2h3L3hlbi94ZW5fYmFja2VuZC5oCkBAIC0xMDEsNiArMTAx LDkgQEAgZXh0ZXJuIHN0cnVjdCBYZW5EZXZPcHMgeGVuX2tiZG1vdXNlX29wczsgICAgIC8qIHhl bl9mcmFtZWJ1ZmZlci5jICovCiBleHRlcm4gc3RydWN0IFhlbkRldk9wcyB4ZW5fZnJhbWVidWZm ZXJfb3BzOyAgLyogeGVuX2ZyYW1lYnVmZmVyLmMgKi8KIGV4dGVybiBzdHJ1Y3QgWGVuRGV2T3Bz IHhlbl9ibGtkZXZfb3BzOyAgICAgICAvKiB4ZW5fZGlzay5jICAgICAgICAqLwogZXh0ZXJuIHN0 cnVjdCBYZW5EZXZPcHMgeGVuX25ldGRldl9vcHM7ICAgICAgIC8qIHhlbl9uaWMuYyAgICAgICAg ICovCisjaWZkZWYgQ09ORklHX1VTQl9MSUJVU0IKK2V4dGVybiBzdHJ1Y3QgWGVuRGV2T3BzIHhl bl91c2Jfb3BzOyAgICAgICAgICAvKiB4ZW4tdXNiLmMgICAgICAgICAqLworI2VuZGlmCiAKIHZv aWQgeGVuX2luaXRfZGlzcGxheShpbnQgZG9taWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2h3 L3hlbi94ZW5fY29tbW9uLmggYi9pbmNsdWRlL2h3L3hlbi94ZW5fY29tbW9uLmgKaW5kZXggYmQ2 NWU2Ny4uZDAxMGNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ody94ZW4veGVuX2NvbW1vbi5oCisr KyBiL2luY2x1ZGUvaHcveGVuL3hlbl9jb21tb24uaApAQCAtNDksNiArNDksOCBAQCB0eXBlZGVm IHhjX2dudHRhYiB4ZW5nbnR0YWJfaGFuZGxlOwogI2RlZmluZSB4ZW5nbnR0YWJfdW5tYXAoaCwg YSwgbikgeGNfZ250dGFiX211bm1hcChoLCBhLCBuKQogI2RlZmluZSB4ZW5nbnR0YWJfbWFwX2dy YW50X3JlZnMoaCwgYywgZCwgciwgcCkgXAogICAgIHhjX2dudHRhYl9tYXBfZ3JhbnRfcmVmcyho LCBjLCBkLCByLCBwKQorI2RlZmluZSB4ZW5nbnR0YWJfbWFwX2RvbWFpbl9ncmFudF9yZWZzKGgs IGMsIGQsIHIsIHApIFwKKyAgICB4Y19nbnR0YWJfbWFwX2RvbWFpbl9ncmFudF9yZWZzKGgsIGMs IGQsIHIsIHApCiAKICNkZWZpbmUgeGVuZm9yZWlnbm1lbW9yeV9vcGVuKGwsIGYpIHhlbl94Ywog Ci0tIAoyLjYuNgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==