From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v8 13/25] xsplice, symbols: Implement fast symbol names -> virtual addresses lookup Date: Wed, 13 Apr 2016 17:09:44 -0400 Message-ID: <1460581796-30071-14-git-send-email-konrad.wilk@oracle.com> References: <1460581796-30071-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aqS4V-0007rT-H2 for xen-devel@lists.xenproject.org; Wed, 13 Apr 2016 21:11:35 +0000 In-Reply-To: <1460581796-30071-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Keir Fraser , Jan Beulich , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgbWVjaGFuaXNtIGlzIGdlYXJlZCB0b3dhcmRzIGZhc3QgdmlydHVhbCBhZGRy ZXNzIC0+CnN5bWJvbCBuYW1lcyBsb29rdXAuIFRoaXMgaXMgZmluZSBmb3IgdGhlIG5vcm1hbCB1 c2UgY2FzZXMKKEJVR19PTiwgV0FSTl9PTiwgZXRjKSwgYnV0IGZvciB4U3BsaWNlIC0gd2hlcmUg d2UgbmVlZCB0byBmaW5kCmh5cGVydmlzb3Igc3ltYm9scyAtIGl0IGlzIHNsb3cuCgpUbyB1bmRl cnN0YW5kIHRoaXMgcGF0Y2gsIGEgZGVzY3JpcHRpb24gb2YgdGhlIGV4aXN0aW5nCm1ldGhvZCBp cyBleHBsYWluZWQgZmlyc3QuIEZvciBmb2xrcyBmYW1pbGFyIGdvIHRvICdORVcgQ09ERTonLgoK SE9XIElUIFdPUktTOgoKVGhlIHN5bWJvbCB0YWJsZSBsb29rdXAgbWVjaGFuaXNtIHVzZXMgYSBz aW1wbGUgZW5jb2RpbmcgbWVjaGFuaXNtCndoZXJlIGl0IGV4dHJhY3RzIHRoZSBjb21tb24gYXNj aWkgY2hhcmFjdGVycyB0aGF0IHRoZSBzeW1ib2wncyB1c2UuCgpUaGlzIHNhdmVzIHVzIHNwYWNl LiBUaGUgbG9va3VwIG1lY2hhbmlzbSBpcyBnZWFyZWQgdG93YXJkcyBsb29raW5nCnVwIHN5bWJv bHMgYmFzZWQgb24gYWRkcmVzcy4gV2UgaGF2ZSBvbmUgMC4uTiAod2hlcmUgTiBpcwp0aGUgbnVt YmVyIG9mIHN5bWJvbHMsIHNvIDY4NDkgZm9yIGV4YW1wbGUpIHRhYmxlOgoKc3ltYm9sc19hZGRy ZXNzZXNbMC4uTl0KCkFuZCBhbiAxLTEgKGluIGEgbG9vc2UgZmFzaGlvbikgb2YgdGhlIHN5bWJv bHMgKGVuY29kZWQpIGluIGEKc3ltYm9sc19uYW1lcyBzdHJlYW0gb2Ygc2l6ZSBOLgoKVGhlIE4g aXMgdmFyaWFibGUgKGxhdGVyIG9uIHRoYXQgYmVsb3cpCgpUaGUgc3ltYm9sc19uYW1lcyBhcmUg c29ydGVkIGJhc2VkIG9uIHN5bWJvbHNfYWRkcmVzc2VzLCB3aGljaAptZWFucyB0aGF0IHRoZSBk ZWNvZGVkIGVudHJpZXMgaW5zaWRlIHN5bWJvbHNfbmFtZXMgYXJlIG5vdCBpbgphc2NlbmRpbmcg b3IgZGVzY2VuZGluZyBvcmRlci4KClRoZXJlIGlzIGFsc28gdGhlIGVuY29kaW5nIG1lY2hhbmlz bSAtIHRoZSB0YWJsZSBvZiAyNTUgZW50cmllcwpjYWxsZWQgc3ltYm9sc190b2tlbl9pbmRleFtd LiBBbmQgdGhlIHN5bWJvbHNfdG9rZW5fdGFibGUgd2hpY2gKaXMgYW4gc3RyZWFtIG9mIEFTQ0lJ WiBjaGFyYWN0ZXJzLCBzdWNoIGFzIChpdCByZWFsbHkKaXMgbm90IGEgdGFibGUgYXMgdGhlIHZh bHVlcyBhcmUgdmFyaWFibGUpOgoKQDAgICAuYXNjaXogICJjcmVkaXQiCkA2ICAgLmFzY2l6ICAi bWFzayIKLi4KQDMwMCAuYXNjaXogICJTIgoKQW5kIHRoZSBzeW1ib2xzX3Rva2VuX2luZGV4OgpA MCAgICAgICAgLnNob3J0ICAwCkAxICAgICAgICAuc2hvcnQgIDcKQDIgICAgICAgIC5zaG9ydCAg MTIKQDQgICAgICAgIC5zaG9ydCAgMTYKLi4uCkA4NCAgICAgICAgIC5zaG9ydCAgMzAwCgpUaGUg cmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbSBpcyB0aGF0IHRoZSBzeW1ib2xzX3Rva2VuX2luZGV4 CmdpdmVzIHVzIHRoZSBvZmZzZXQgdG8gc3ltYm9sc190b2tlbl90YWJsZS4KClRoZSBzeW1ib2xf bmFtZXNbXSBhcnJheSBpcyBhIHN0cmVhbSBvZiBlbmNvZGVkIHZhbHVlcy4gRWFjaCB2YWx1ZQpm b2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gLSA8bGVuPiBmb2xsb3dlZCBieSA8ZW5jb2RpbmcgdmFs dWVzPi4KQW5kIHRoZSBhbm90aGVyIDxsZW4+IGZvbGxvd2VkIGJ5IDxlbmNvZGluZyB2YWx1ZXM+ LgoKSGVuY2UgdG8gZmluZCB0aGUgcmlnaHQgb25lIHlvdSBuZWVkIHRvIHJlYWQgPGxlbj4sIGFk ZCA8bGVuPgoodG8gc2tpcCBvdmVyKSwgcmVhZCA8bGVuPiwgYWRkIDxsZW4+LCBhbmQgc28gb24g dW50aWwgb25lCmZpbmRzIHRoZSByaWdodCB0dXBsZSBvZmZzZXQuCgpUaGUgPGVuY29kaW5nIHZh bHVlcz4gYXJlIHRoZSBpbmRpY2llcyBpbnRvIHRoZSBzeW1ib2xzX3Rva2VuX2luZGV4LgoKTWVh bmluZyBpZiB5b3UgaGF2ZToKICAweDA0LCAweDU0LCAweGRhLCAweGUyLCAweDc0CiAgWzQsIDg0 LCAyMTgsIDIyNiwgMTE2IGluIGh1bWFuIG51bWJlcmluZ10KClRoZSAweDA0IHRlbGxzIHVzIHRo YXQgdGhlIHN5bWJvbCBpcyBmb3VyIGJ5dGVzIHBhc3QgdGhpcyBvbmUgKHNvIG5leHQKc3ltYm9s IG9mZnNldCBzdGFydHMgYXQgNSkuIElmIHdlIGxvb2t1cCBzeW1ib2xzX3Rva2VuX2luZGV4Wzg0 XSB3ZSBnZXQgMzAwLgpzeW1ib2xzX3Rva2VuWzMwMF0gZ2V0cyB1cyB0aGUgIlMiLiBBbmQgc28g b24sIHRoZSBzdHJpbmcgZXZlbnR1YWxseQplbmQgdXAgYmVpbmcgZGVjb2RlIHRvIGJlICdTX3N0 ZXh0Jy4gVGhlIGZpcnN0IGNoYXJhY3RlciBpcyB0aGUgdHlwZSwKdGhlbiBvcHRpb25hbGx5IGZv bGx3ZWQgYnkgdGhlIGZpbGVuYW1lIChhbmQgIyByaWdodCBhZnRlciBmaWxlbmFtZSkKYW5kIHRo ZW4gbGFzdGx5IHRoZSBzeW1ib2wsIHN1Y2ggYXM6Cgp0dnBtdV9pbnRlbC5jI2NvcmUyX3ZwbXVf ZG9faW50ZXJydXB0CgpLZWVwIGluIG1pbmQgdGhhdCB0aGVyZSBhcmUgdHdvIGZpeGVkIHNpemVk IHRhYmxlczoKc3ltYm9sc19hZGRyZXNzZXNbMC4uc3ltYm9sc19udW1fc3ltc10sIGFuZApzeW1i b2xzX21hcmtlcnNbMC4uc3ltYm9sc19udW1fc3ltcy8yNTVdLgoKVGhlIHN5bWJvbHNfbWFya2Vy cyBpcyB1c2VkIHRvIHNwZWVkIHNlYXJjaGluZyBmb3IgdGhlIHJpZ2h0IGFkZHJlc3MuCkl0IGdp dmVzIHVzIHRoZSBvZmZzZXRzIHdpdGhpbiBzeW1ib2xfbmFtZXMgdGhhdCBzdGFydCBhdCB0aGUg PGxlbj48ZW5jb2RlZCB2YWx1ZT4uCgpUaGUgd2F5IHRvIGZpbmQgYSBzeW1ib2wgYmFzZWQgb24g dGhlIGFkZHJlc3MgaXM6CjEpIEZpZ3VyZSBvdXQgdGhlICd0dXBsZSBvZmZzZXQnIGZyb20gc3lt Ym9sc19hZGRyZXNzWzAuLnN5bWJvbHNfbnVtX3N5bXNdLgogICBUaGlzIHRhYmxlIGlzIHNvcnRl ZCBieSB2aXJ0dWFsIGFkZHJlc3NlcyBzbyBmaW5kaW5nIHRoZSB2YWx1ZSBpcyBzaW1wbGUuCjIp IEdldCBzdGFydGluZyBvZmZzZXQgb2Ygc3ltYm9sX25hbWVzIGJ5IHJldHJpZXZpbmcgdmFsdWUg b2YKICAgc3ltYm9sX21hcmtlcnNbJ3R1cGxlIG9mZnNldCcgLyAyNTVdLgozKS4gSXRlcmF0ZSB1 cCB0byAndHVwbGVfb2Zmc2V0ICYgMjU1JyBpbiBzeW1ib2xzX21hcmtlcnMgc3RyZWFtIHN0YXJ0 aW5nCiAgIGF0ICdvZmZzZXQnLgo0KS4gRGVjb2RlIHRoZSA8bGVuPjxlbmNvZGVkIHZhbHVlPgoK VGhpcyBob3dldmVyIGRvZXMgbm90IHdvcmsgdmVyeSB3ZWxsIGlmIHdlIHdhbnQgdG8gc2VhcmNo IHRoZSBvdGhlcgp3YXkgLSB3ZSBoYXZlIHRoZSBzeW1ib2wgbmFtZSBhbmQgd2FudCB0byBmaW5k IHRoZSBhZGRyZXNzLgoKTkVXIENPREU6CgpUbyBtYWtlIHRoYXQgd29yayB3ZSBhZGQgdGhyZWUg dGFibGVzOgoxKSBzeW1ib2xzX2FkZHJlc3Nlc19pbmRleF9zb3J0ZWRbMC4uc3ltYm9sc19udW1f c3ltc10uIFRoZSB2YWx1ZXMgYXJlCiBpbmRpY2llcyBpbnRvIHN5bWJvbHNfYWRkcmVzc2VzIGFy cmF5LiBUaGlzIGlzIGEgMS0xIHRhYmxlOgoKIHN5bWJvbHNfYWRkcmVzc2VzX2luZGV4X3NvcnRl ZDoKICAgICAubG9uZyAgIDYzMTUKICAgICAubG9uZyAgIDYwOTcKCiBUbyBnZXQgdGhlIGFkZHJl c3Mgb2YgYSBzeW1ib2wgYXQgb2Zmc2V0IDAgaW4gc3ltYm9sc19uYW1lX3NvcnRlZAogKHNlZSBi ZWxvdykgd2UgbG9vayBpbiBzeW1ib2xzX2FkZHJlc3Nlc19pbmRleF9zb3J0ZWRbMF0gdG8gZ2V0 CiA2MzE1IGFuZCB0aGVuIGxvb2sgaW4gc3ltYm9sc19hZGRyZXNzZXNfaW5kZXhbNjMxNV0gdG8g ZmluZCBpdC4KCjIpIFRoZSBzeW1ib2xzX25hbWVzX3NvcnRlZCBzdHJlYW0gLSBzYW1lIGZvcm1h dCBhcyBzeW1ib2xzX25hbWVzIGJ1dAogY29uc3RydWN0dWVkIGJ5IHNvcnRpbmcgdGhlIDx0eXBl PltmaWxlbmFtZSNdPHN5bWJvbD4gYnkgPHN5bWJvbD4sCiB0aGVuIFtmaWxlbmFtZSNdIGFuZCBs YXN0bHkgdHlwZS4gUmVjYWxsIHRoYXQgc3ltYm9sX25hbWVzIGlzIHNvcnRlZAogYmFzZWQgb24g YWRkcmVzc2VzIG9mIHRoZSBzeW1ib2xzLgoKMykgVG8gbWFrZSBpdCBzaW1wbGVyIHRvIHNlYXJj aCB3ZSBhbHNvIGFkZCBhbiBzeW1ib2xzX21hcmtlcnNfc29ydGVkCiBhcnJheSAob2Ygc2l6ZSBz eW1ib2xzX251bV9zeW1zLzI1NSkuCgpTZWFyY2hpbmcgZm9yIHN5bWJvbHMgaXMgc2ltcGxpZmll ZCBhcyB3ZSBjYW4gZG8gYSBiaW5hcnkgc2VhcmNoCm9uIHN5bWJvbF9uYW1lc19zb3J0ZWQgKGFu ZCB1c2luZyBzeW1ib2xzX21hcmtlcnNfc29ydGVkKS4gU2luY2UgdGhlCnN5bWJvbHMgYXJlIHNv cnRlZCBpdCB0YWtlcyBvbiBhdmVyYWdlIDEzIGNhbGxzIHRvIHN5bWJvbHNfZXhwYW5kX3N5bWJv bC4KCkRvaW5nIHNtYWxsIHRlc3RzIChzZWFyY2ggZm9yIGZpdmUgZGlmZmVyZW50IHN5bWJvbHMp IHVzaW5nIHRoZSBvbGQKYW5kIG5ldyBtZWNoYW5pc20gc2hvdyAybXMgdnMgMG1zIGltcHJvdmVt ZW50LgoKU2lnbmVkLW9mZi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0Bv cmFjbGUuY29tPgotLS0KQ0M6IEtlaXIgRnJhc2VyIDxrZWlyQHhlbi5vcmc+CkNDOiBKYW4gQmV1 bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNDOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVy M0BjaXRyaXguY29tPgoKdjg6IE5ldwogLSBSZW1vdmUgdGhlIGRlYnVnIGNvZGUKIC0gUmV0dXJu IHRoZSAnbWlkJyBpbmRleCBpbiBzeW1ib2xfYWRkcmVzc2VzLCBub3QgdGhlICdsb3cnLgotLS0K LS0tCiB4ZW4vYXJjaC94ODYvTWFrZWZpbGUgICAgICB8ICAzICsrCiB4ZW4vY29tbW9uL0tjb25m aWcgICAgICAgICB8IDEyICsrKysrKwogeGVuL2NvbW1vbi9zeW1ib2xzLWR1bW15LmMgfCAgNiAr KysKIHhlbi9jb21tb24vc3ltYm9scy5jICAgICAgIHwgNzUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLQogeGVuL3Rvb2xzL3N5bWJvbHMuYyAgICAgICAgfCA5MyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiA1IGZpbGVzIGNoYW5nZWQs IDE3NiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJj aC94ODYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggNTdjOTNlMS4uNGNl MjM0NiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL3g4 Ni9NYWtlZmlsZQpAQCAtNzQsNiArNzQsOSBAQCBlZmkteSA6PSAkKHNoZWxsIGlmIFsgISAtciAk KEJBU0VESVIpL2luY2x1ZGUveGVuL2NvbXBpbGUuaCAtbyBcCiAKIGlmZGVmIENPTkZJR19YU1BM SUNFCiBhbGxfc3ltYm9scyA9IC0tYWxsLXN5bWJvbHMKK2lmZGVmIENPTkZJR19GQVNUX1NZTUJP TF9MT09LVVAKK2FsbF9zeW1ib2xzID0gLS1hbGwtc3ltYm9scyAtLWFkZC1leHRyYS1zb3J0ZWQK K2VuZGlmCiBlbHNlCiBhbGxfc3ltYm9scyA9CiBlbmRpZgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1v bi9LY29uZmlnIGIveGVuL2NvbW1vbi9LY29uZmlnCmluZGV4IGZlYTMzZDMuLjYzOWRjNGIgMTAw NjQ0Ci0tLSBhL3hlbi9jb21tb24vS2NvbmZpZworKysgYi94ZW4vY29tbW9uL0tjb25maWcKQEAg LTIwMCw0ICsyMDAsMTYgQEAgY29uZmlnIFhTUExJQ0UKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4K IAorY29uZmlnIEZBU1RfU1lNQk9MX0xPT0tVUAorCWJvb2wgIkZhc3Qgc3ltYm9sIGxvb2t1cCAo YmlnZ2VyIGJpbmFyeSkiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBYU1BMSUNFCisJLS0taGVs cC0tLQorCSAgV2hlbiBzZWFyY2hpbmcgZm9yIHN5bWJvbCBhZGRyZXNzZXMgd2UgY2FuIHVzZSB0 aGUgYnVpbHQtaW4gc3lzdGVtCisJICB0aGF0IGlzIG9wdGltaXplZCBmb3Igc2VhcmNoaW5nIHN5 bWJvbHMgdXNpbmcgYWRkcmVzc2VzIGFzIHRoZSBrZXkuCisJICBIb3dldmVyIHVzaW5nIGl0IGZv ciB0aGUgaW52ZXJzZSAoZmluZCBhZGRyZXNzIHVzaW5nIHRoZSBzeW1ib2wgbmFtZSkKKwkgIGl0 IGlzIHNsb3cuIFRoaXMgZXh0cmEgZGF0YSAofjEyOGtCKSBzcGVlZHMgdXAgdGhlIHNlYXJjaC4K KwkgIFRoZSBvbmx5IHVzZXIgb2YgdGhpcyBpcyB4U3BsaWNlLgorCisJICBJZiB1bnN1cmUsIHNh eSBZLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9zeW1ib2xzLWR1bW15LmMgYi94 ZW4vY29tbW9uL3N5bWJvbHMtZHVtbXkuYwppbmRleCA1MDkwYzNiLi4xOGQ1NzJjIDEwMDY0NAot LS0gYS94ZW4vY29tbW9uL3N5bWJvbHMtZHVtbXkuYworKysgYi94ZW4vY29tbW9uL3N5bWJvbHMt ZHVtbXkuYwpAQCAtMTQsNiArMTQsMTIgQEAgY29uc3QgdW5zaWduZWQgbG9uZyBzeW1ib2xzX2Fk ZHJlc3Nlc1sxXTsKIGNvbnN0IHVuc2lnbmVkIGludCBzeW1ib2xzX251bV9zeW1zOwogY29uc3Qg dTggc3ltYm9sc19uYW1lc1sxXTsKIAorI2lmZGVmIENPTkZJR19GQVNUX1NZTUJPTF9MT09LVVAK K2NvbnN0IHU4IHN5bWJvbHNfbmFtZXNfc29ydGVkWzFdOworY29uc3QgdW5zaWduZWQgaW50IHN5 bWJvbHNfYWRkcmVzc2VzX2luZGV4X3NvcnRlZFsxXTsKK2NvbnN0IHVuc2lnbmVkIGludCBzeW1i b2xzX21hcmtlcnNfc29ydGVkWzFdOworI2VuZGlmCisKIGNvbnN0IHU4IHN5bWJvbHNfdG9rZW5f dGFibGVbMV07CiBjb25zdCB1MTYgc3ltYm9sc190b2tlbl9pbmRleFsxXTsKIApkaWZmIC0tZ2l0 IGEveGVuL2NvbW1vbi9zeW1ib2xzLmMgYi94ZW4vY29tbW9uL3N5bWJvbHMuYwppbmRleCA3ODE3 NjVkLi5jYjc5MmNkIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL3N5bWJvbHMuYworKysgYi94ZW4v Y29tbW9uL3N5bWJvbHMuYwpAQCAtMzEsNiArMzEsMTIgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVk IGxvbmcgc3ltYm9sc19hZGRyZXNzZXNbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc3lt Ym9sc19udW1fc3ltczsKIGV4dGVybiBjb25zdCB1OCBzeW1ib2xzX25hbWVzW107CiAKKyNpZmRl ZiBDT05GSUdfRkFTVF9TWU1CT0xfTE9PS1VQCitleHRlcm4gY29uc3QgdTggc3ltYm9sc19uYW1l c19zb3J0ZWRbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc3ltYm9sc19hZGRyZXNzZXNf aW5kZXhfc29ydGVkW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5bWJvbHNfbWFya2Vy c19zb3J0ZWRbXTsKKyNlbmRpZgorCiBleHRlcm4gY29uc3QgdTggc3ltYm9sc190b2tlbl90YWJs ZVtdOwogZXh0ZXJuIGNvbnN0IHUxNiBzeW1ib2xzX3Rva2VuX2luZGV4W107CiAKQEAgLTM4LDEz ICs0NCwxMyBAQCBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5bWJvbHNfbWFya2Vyc1tdOwog CiAvKiBleHBhbmQgYSBjb21wcmVzc2VkIHN5bWJvbCBkYXRhIGludG8gdGhlIHJlc3VsdGluZyB1 bmNvbXByZXNzZWQgc3RyaW5nLAogICAgZ2l2ZW4gdGhlIG9mZnNldCB0byB3aGVyZSB0aGUgc3lt Ym9sIGlzIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBz eW1ib2xzX2V4cGFuZF9zeW1ib2wodW5zaWduZWQgaW50IG9mZiwgY2hhciAqcmVzdWx0KQorc3Rh dGljIHVuc2lnbmVkIGludCBzeW1ib2xzX2V4cGFuZF9zeW1ib2woY29uc3QgdTggKmFycmF5LCB1 bnNpZ25lZCBpbnQgb2ZmLCBjaGFyICpyZXN1bHQpCiB7CiAgICAgaW50IGxlbiwgc2tpcHBlZF9m aXJzdCA9IDA7CiAgICAgY29uc3QgdTggKnRwdHIsICpkYXRhOwogCiAgICAgLyogZ2V0IHRoZSBj b21wcmVzc2VkIHN5bWJvbCBsZW5ndGggZnJvbSB0aGUgZmlyc3Qgc3ltYm9sIGJ5dGUgKi8KLSAg ICBkYXRhID0gJnN5bWJvbHNfbmFtZXNbb2ZmXTsKKyAgICBkYXRhID0gYXJyYXkgKyBvZmY7CiAg ICAgbGVuID0gKmRhdGE7CiAgICAgZGF0YSsrOwogCkBAIC03NywxNCArODMsMTkgQEAgc3RhdGlj IHVuc2lnbmVkIGludCBzeW1ib2xzX2V4cGFuZF9zeW1ib2wodW5zaWduZWQgaW50IG9mZiwgY2hh ciAqcmVzdWx0KQogCiAvKiBmaW5kIHRoZSBvZmZzZXQgb24gdGhlIGNvbXByZXNzZWQgc3RyZWFt IGdpdmVuIGFuZCBpbmRleCBpbiB0aGUKICAqIHN5bWJvbHMgYXJyYXkgKi8KLXN0YXRpYyB1bnNp Z25lZCBpbnQgZ2V0X3N5bWJvbF9vZmZzZXQodW5zaWduZWQgbG9uZyBwb3MpCitzdGF0aWMgdW5z aWduZWQgaW50IGdldF9zeW1ib2xfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgcG9zLCBib29sX3Qgc29y dGVkKQogewogICAgIGNvbnN0IHU4ICpuYW1lOwogICAgIGludCBpOwogCiAgICAgLyogdXNlIHRo ZSBjbG9zZXN0IG1hcmtlciB3ZSBoYXZlLiBXZSBoYXZlIG1hcmtlcnMgZXZlcnkgMjU2IHBvc2l0 aW9ucywKICAgICAgKiBzbyB0aGF0IHNob3VsZCBiZSBjbG9zZSBlbm91Z2ggKi8KLSAgICBuYW1l ID0gJnN5bWJvbHNfbmFtZXNbIHN5bWJvbHNfbWFya2Vyc1twb3M+PjhdIF07CisjaWZkZWYgQ09O RklHX0ZBU1RfU1lNQk9MX0xPT0tVUAorICAgIGlmIChzb3J0ZWQpCisgICAgICAgIG5hbWUgPSAm c3ltYm9sc19uYW1lc19zb3J0ZWRbIHN5bWJvbHNfbWFya2Vyc19zb3J0ZWRbcG9zPj44XSBdOwor ICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBuYW1lID0gJnN5bWJvbHNfbmFtZXNbIHN5bWJvbHNf bWFya2Vyc1twb3M+PjhdIF07CiAKICAgICAvKiBzZXF1ZW50aWFsbHkgc2NhbiBhbGwgdGhlIHN5 bWJvbHMgdXAgdG8gdGhlIHBvaW50IHdlJ3JlIHNlYXJjaGluZyBmb3IuCiAgICAgICogRXZlcnkg c3ltYm9sIGlzIHN0b3JlZCBpbiBhIFs8bGVuPl1bPGxlbj4gYnl0ZXMgb2YgZGF0YV0gZm9ybWF0 LCBzbyB3ZQpAQCAtOTMsNiArMTA0LDExIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N5bWJv bF9vZmZzZXQodW5zaWduZWQgbG9uZyBwb3MpCiAgICAgZm9yKGkgPSAwOyBpIDwgKHBvcyYweEZG KTsgaSsrKQogICAgICAgICBuYW1lID0gbmFtZSArICgqbmFtZSkgKyAxOwogCisjaWZkZWYgQ09O RklHX0ZBU1RfU1lNQk9MX0xPT0tVUAorICAgIGlmIChzb3J0ZWQpCisgICAgICAgIHJldHVybiBu YW1lIC0gc3ltYm9sc19uYW1lc19zb3J0ZWQ7CisjZW5kaWYKKwogICAgIHJldHVybiBuYW1lIC0g c3ltYm9sc19uYW1lczsKIH0KIApAQCAtMTM2LDcgKzE1Miw3IEBAIGNvbnN0IGNoYXIgKnN5bWJv bHNfbG9va3VwKHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgLS1sb3c7CiAKICAgICAgICAg LyogR3JhYiBuYW1lICovCi0gICAgc3ltYm9sc19leHBhbmRfc3ltYm9sKGdldF9zeW1ib2xfb2Zm c2V0KGxvdyksIG5hbWVidWYpOworICAgIHN5bWJvbHNfZXhwYW5kX3N5bWJvbChzeW1ib2xzX25h bWVzLCBnZXRfc3ltYm9sX29mZnNldChsb3csIDApLCBuYW1lYnVmKTsKIAogICAgIC8qIFNlYXJj aCBmb3IgbmV4dCBub24tYWxpYXNlZCBzeW1ib2wgKi8KICAgICBmb3IgKGkgPSBsb3cgKyAxOyBp IDwgc3ltYm9sc19udW1fc3ltczsgaSsrKSB7CkBAIC0xOTUsMTAgKzIxMSwxMCBAQCBpbnQgeGVu c3ltc19yZWFkKHVpbnQzMl90ICpzeW1udW0sIGNoYXIgKnR5cGUsCiAgICAgICAgIG5leHRfb2Zm c2V0ID0gbmV4dF9zeW1ib2wgPSAwOwogICAgIGlmICggbmV4dF9zeW1ib2wgIT0gKnN5bW51bSAp CiAgICAgICAgIC8qIE5vbi1zZXF1ZW50aWFsIGFjY2VzcyAqLwotICAgICAgICBuZXh0X29mZnNl dCA9IGdldF9zeW1ib2xfb2Zmc2V0KCpzeW1udW0pOworICAgICAgICBuZXh0X29mZnNldCA9IGdl dF9zeW1ib2xfb2Zmc2V0KCpzeW1udW0sIDApOwogCiAgICAgKnR5cGUgPSBzeW1ib2xzX2dldF9z eW1ib2xfdHlwZShuZXh0X29mZnNldCk7Ci0gICAgbmV4dF9vZmZzZXQgPSBzeW1ib2xzX2V4cGFu ZF9zeW1ib2wobmV4dF9vZmZzZXQsIG5hbWUpOworICAgIG5leHRfb2Zmc2V0ID0gc3ltYm9sc19l eHBhbmRfc3ltYm9sKHN5bWJvbHNfbmFtZXMsIG5leHRfb2Zmc2V0LCBuYW1lKTsKICAgICAqYWRk cmVzcyA9IHN5bWJvbHNfYWRkcmVzcygqc3ltbnVtKTsKIAogICAgIG5leHRfc3ltYm9sID0gKysq c3ltbnVtOwpAQCAtMjA4LDggKzIyNCw1MSBAQCBpbnQgeGVuc3ltc19yZWFkKHVpbnQzMl90ICpz eW1udW0sIGNoYXIgKnR5cGUsCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfRkFT VF9TWU1CT0xfTE9PS1VQCiB1bnNpZ25lZCBsb25nIHN5bWJvbHNfbG9va3VwX2J5X25hbWUoY29u c3QgY2hhciAqc3ltbmFtZSkKIHsKKyAgICBjaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTiArIDFd ID0geyAwIH07CisgICAgdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CisgICAgc3RhdGljIGNvbnN0 IGNoYXIgKmZpbGVuYW1lX3Rva2VuID0gIiMiOworCisgICAgaWYgKCBzeW1uYW1lID09ICdcMCcg KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFVuc3VwcG9ydGVkIHNlYXJjaCBmb3IgZmls ZW5hbWUgaW4gc3ltYm9sIHJpZ2h0IG5vdy4gKi8KKyAgICBpZiAoIHN0cnBicmsoc3ltbmFtZSwg ZmlsZW5hbWVfdG9rZW4pICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsb3cgPSAwOworICAg IGhpZ2ggPSBzeW1ib2xzX251bV9zeW1zOworICAgIHdoaWxlICggbG93IDwgaGlnaCApCisgICAg eworICAgICAgICB1bnNpZ25lZCBsb25nIG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgLyAyKTsK KyAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisgICAgICAgIGNvbnN0IGNoYXIgKnA7Cisg ICAgICAgIGludCByYzsKKworICAgICAgICBvZmZzZXQgPSBnZXRfc3ltYm9sX29mZnNldChtaWQs IDEpOworICAgICAgICAodm9pZClzeW1ib2xzX2V4cGFuZF9zeW1ib2woc3ltYm9sc19uYW1lc19z b3J0ZWQsIG9mZnNldCwgbmFtZWJ1Zik7CisgICAgICAgIC8qIEZvcm1hdCBpczogW2ZpbGVuYW1l XSM8c3ltYm9sPi4gc3ltYm9sc19leHBhbmRfc3ltYm9sIGVhdHMgdHlwZS4qLworICAgICAgICBw ID0gc3RycGJyaygoY29uc3QgY2hhciAqKW5hbWVidWYsIGZpbGVuYW1lX3Rva2VuKTsKKyAgICAg ICAgaWYgKCAhcCApCisgICAgICAgICAgICBwID0gbmFtZWJ1ZjsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgcCsrOyAvKiBTa2lwICMgKi8KKyAgICAgICAgcmMgPSBzdHJjbXAoc3ltbmFtZSwg cCk7CisgICAgICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CisgICAg ICAgIGVsc2UgaWYgKCByYyA+IDAgKQorICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbHNfYWRkcmVzcyhzeW1ib2xzX2FkZHJl c3Nlc19pbmRleF9zb3J0ZWRbbWlkXSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjZWxz ZQordW5zaWduZWQgbG9uZyBzeW1ib2xzX2xvb2t1cF9ieV9uYW1lKGNvbnN0IGNoYXIgKnN5bW5h bWUpCisgewogICAgIGNoYXIgbmFtZVtLU1lNX05BTUVfTEVOICsgMV0gPSB7IDAgfTsKICAgICB1 aW50MzJfdCBzeW1udW0gPSAwOwogICAgIGNoYXIgdHlwZTsKQEAgLTIzMSw3ICsyOTAsNyBAQCB1 bnNpZ25lZCBsb25nIHN5bWJvbHNfbG9va3VwX2J5X25hbWUoY29uc3QgY2hhciAqc3ltbmFtZSkK IAogICAgIHJldHVybiAwOwogfQotCisjZW5kaWYKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAg KiBtb2RlOiBDCmRpZmYgLS1naXQgYS94ZW4vdG9vbHMvc3ltYm9scy5jIGIveGVuL3Rvb2xzL3N5 bWJvbHMuYwppbmRleCAxOTZkYjc0Li4wYTU2YzVlIDEwMDY0NAotLS0gYS94ZW4vdG9vbHMvc3lt Ym9scy5jCisrKyBiL3hlbi90b29scy9zeW1ib2xzLmMKQEAgLTQwLDYgKzQwLDEwIEBAIHN0cnVj dCBzeW1fZW50cnkgewogCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGludCBs ZW47CiAJdW5zaWduZWQgY2hhciAqc3ltOworCXVuc2lnbmVkIGNoYXIgKnN5bWJvbDsKKwl1bnNp Z25lZCBjaGFyICpmaWxlbmFtZTsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGNoYXIg dHlwZTsKIH07CiAjZGVmaW5lIFNZTUJPTF9OQU1FKHMpICgoY2hhciAqKShzKS0+c3ltICsgMSkK IApAQCAtNDcsOCArNTEsMTAgQEAgc3RhdGljIHN0cnVjdCBzeW1fZW50cnkgKnRhYmxlOwogc3Rh dGljIHVuc2lnbmVkIGludCB0YWJsZV9zaXplLCB0YWJsZV9jbnQ7CiBzdGF0aWMgdW5zaWduZWQg bG9uZyBsb25nIF9zdGV4dCwgX2V0ZXh0LCBfc2luaXR0ZXh0LCBfZWluaXR0ZXh0LCBfc2V4dHJh dGV4dCwgX2VleHRyYXRleHQ7CiBzdGF0aWMgaW50IGFsbF9zeW1ib2xzID0gMDsKK3N0YXRpYyBp bnQgZXh0cmFfc29ydGVkID0gMDsKIHN0YXRpYyBjaGFyIHN5bWJvbF9wcmVmaXhfY2hhciA9ICdc MCc7CiBzdGF0aWMgZW51bSB7IGZtdF9ic2QsIGZtdF9zeXN2IH0gaW5wdXRfZm9ybWF0Oworc3Rh dGljIGludCBjb21wYXJlX25hbWUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKTsKIAog aW50IHRva2VuX3Byb2ZpdFsweDEwMDAwXTsKIApAQCAtNzksNiArODUsNyBAQCBzdGF0aWMgaW50 IHJlYWRfc3ltYm9sKEZJTEUgKmluLCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzKQogCWNoYXIgKnN5bSwg c3R5cGU7CiAJc3RhdGljIGVudW0geyBzeW1ib2wsIHNpbmdsZV9zb3VyY2UsIG11bHRpX3NvdXJj ZSB9IGxhc3Q7CiAJc3RhdGljIGNoYXIgKmZpbGVuYW1lOworCXVuc2lnbmVkIGludCBsZW47CiAJ aW50IHJjID0gLTE7CiAKIAlzd2l0Y2ggKGlucHV0X2Zvcm1hdCkgewpAQCAtMTY1LDE4ICsxNzIs MjkgQEAgc3RhdGljIGludCByZWFkX3N5bWJvbChGSUxFICppbiwgc3RydWN0IHN5bV9lbnRyeSAq cykKIAogCS8qIGluY2x1ZGUgdGhlIHR5cGUgZmllbGQgaW4gdGhlIHN5bWJvbCBuYW1lLCBzbyB0 aGF0IGl0IGdldHMKIAkgKiBjb21wcmVzc2VkIHRvZ2V0aGVyICovCi0Jcy0+bGVuID0gc3RybGVu KHN0cikgKyAxOworCXMtPmxlbiA9IGxlbiA9IHN0cmxlbihzdHIpICsgMTsKIAlpZiAoaXNsb3dl cihzdHlwZSkgJiYgZmlsZW5hbWUpCiAJCXMtPmxlbiArPSBzdHJsZW4oZmlsZW5hbWUpICsgMTsK IAlzLT5zeW0gPSBtYWxsb2Mocy0+bGVuICsgMSk7CisJaWYgKGV4dHJhX3NvcnRlZCkKKwkJcy0+ c3ltYm9sID0gbWFsbG9jKGxlbiArIDEpOwogCXN5bSA9IFNZTUJPTF9OQU1FKHMpOwogCWlmIChp c2xvd2VyKHN0eXBlKSAmJiBmaWxlbmFtZSkgewogCQlzeW0gPSBzdHBjcHkoc3ltLCBmaWxlbmFt ZSk7CiAJCSpzeW0rKyA9ICcjJzsKLQl9CisJCWlmIChleHRyYV9zb3J0ZWQpIHsKKwkJCXMtPmZp bGVuYW1lID0gbWFsbG9jKHN0cmxlbihmaWxlbmFtZSkgKyAxKTsKKwkJCXN0cmNweSgoY2hhciAq KXMtPmZpbGVuYW1lLCBmaWxlbmFtZSk7CisJCX0KKwl9IGVsc2UKKwkJcy0+ZmlsZW5hbWUgPSBO VUxMOworCiAJc3RyY3B5KHN5bSwgc3RyKTsKKwlpZiAoZXh0cmFfc29ydGVkKSB7CisJCXN0cmNw eSgoY2hhciAqKXMtPnN5bWJvbCwgc3RyKTsKKwkJcy0+dHlwZSA9IHN0eXBlOyAvKiBBcyBzLT5z eW1bMF0gZW5kcyBtYW5nbGVkLiAqLworCX0KIAlzLT5zeW1bMF0gPSBzdHlwZTsKLQogCXJjID0g MDsKIAogIHNraXBfdGFpbDoKQEAgLTI3Niw2ICsyOTQsMzYgQEAgc3RhdGljIGludCBleHBhbmRf c3ltYm9sKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIGNoYXIgKnJlc3VsdCkKIAlyZXR1 cm4gdG90YWw7CiB9CiAKKy8qIFNvcnQgYnkgc3ltYm9sIG5hbWVzLCB0aGVuIGZpbGVuYW1lLCBh bmQgbGFzdGx5IHR5cGUuICovCitzdGF0aWMgaW50IGNvbXBhcmVfbmFtZV9vcmlnKGNvbnN0IHZv aWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW0x ID0gcDE7CisJY29uc3Qgc3RydWN0IHN5bV9lbnRyeSAqc3ltMiA9IHAyOworCWludCByYzsKKwor CXJjID0gc3RyY21wKChjaGFyICopKHN5bTEtPnN5bWJvbCksIChjaGFyICopKHN5bTItPnN5bWJv bCkpOworCisJaWYgKCFyYykgeworCQlpZiAoc3ltMS0+ZmlsZW5hbWUgJiYgc3ltMi0+ZmlsZW5h bWUpCisJCQlyYyA9IHN0cmNtcCgoY2hhciAqKXN5bTEtPmZpbGVuYW1lLCAoY2hhciAqKXN5bTIt PmZpbGVuYW1lKTsKKwkJZWxzZSBpZiAoIXN5bTEtPmZpbGVuYW1lICYmIHN5bTItPmZpbGVuYW1l KQorCQkJcmMgPSAtMTsKKwkJZWxzZSBpZiAoc3ltMS0+ZmlsZW5hbWUgJiYgIXN5bTItPmZpbGVu YW1lKQorCQkJcmMgPSAxOworCisJCWlmICghcmMpIHsKKwkJCWlmIChzeW0xLT50eXBlIDwgc3lt Mi0+dHlwZSkKKwkJCQlyYyA9IC0xOworCQkJZWxzZSBpZiAoc3ltMS0+dHlwZSA+IHN5bTItPnR5 cGUpCisJCQkJcmMgPSAxOworCQkJZWxzZQorCQkJCXJjID0gMDsKKwkJfQorCX0KKworCXJldHVy biByYzsKK30KKwogc3RhdGljIHZvaWQgd3JpdGVfc3JjKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50 IGksIGssIG9mZjsKQEAgLTMzNCw3ICszODIsNiBAQCBzdGF0aWMgdm9pZCB3cml0ZV9zcmModm9p ZCkKIAkJcHJpbnRmKCJcdC5sb25nXHQlZFxuIiwgbWFya2Vyc1tpXSk7CiAJcHJpbnRmKCJcbiIp OwogCi0JZnJlZShtYXJrZXJzKTsKIAogCW91dHB1dF9sYWJlbCgic3ltYm9sc190b2tlbl90YWJs ZSIpOwogCW9mZiA9IDA7CkBAIC0zNTAsNiArMzk3LDQwIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3Ny Yyh2b2lkKQogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJcHJpbnRmKCJcdC5zaG9ydFx0 JWRcbiIsIGJlc3RfaWR4W2ldKTsKIAlwcmludGYoIlxuIik7CisKKwlpZiAoIWV4dHJhX3NvcnRl ZCkgeworCQlmcmVlKG1hcmtlcnMpOworCQlyZXR1cm47CisJfQorCisJLyogU29ydGVkIGJ5IG9y aWdpbmFsIHN5bWJvbCBuYW1lcywgZmlsZW5hbWUsIGFuZCBsYXN0bHkgdHlwZS4gKi8KKwlxc29y dCh0YWJsZSwgdGFibGVfY250LCBzaXplb2YoKnRhYmxlKSwgY29tcGFyZV9uYW1lX29yaWcpOwor CisJLyogTG9va3VwIHRhYmxlIHRvIHN5bWJvbHNfYWRkcmVzc2VzIChvciBzeW1ib2xzX29mZnNl dHMpLiovCisJb3V0cHV0X2xhYmVsKCJzeW1ib2xzX2FkZHJlc3Nlc19pbmRleF9zb3J0ZWQiKTsK Kwlmb3IgKGkgPSAwOyBpIDwgdGFibGVfY250OyBpKyspIHsKKwkJcHJpbnRmKCJcdC5sb25nXHQl ZFxuIiwgdGFibGVbaV0uaWR4KTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJb3V0cHV0X2xhYmVs KCJzeW1ib2xzX25hbWVzX3NvcnRlZCIpOworCW9mZiA9IDA7CisJZm9yIChpID0gMDsgaSA8IHRh YmxlX2NudDsgaSsrKSB7CisJCWlmICgoaSAmIDB4RkYpID09IDApCisJCQltYXJrZXJzW2kgPj4g OF0gPSBvZmY7CisJCXByaW50ZigiXHQuYnl0ZSAweCUwMngiLCB0YWJsZVtpXS5sZW4pOworCQlm b3IgKGsgPSAwOyBrIDwgdGFibGVbaV0ubGVuOyBrKyspCisJCQlwcmludGYoIiwgMHglMDJ4Iiwg dGFibGVbaV0uc3ltW2tdKTsKKwkJcHJpbnRmKCJcbiIpOworCQlvZmYgKz0gdGFibGVbaV0ubGVu ICsgMTsKKwl9CisJcHJpbnRmKCJcbiIpOworCW91dHB1dF9sYWJlbCgic3ltYm9sc19tYXJrZXJz X3NvcnRlZCIpOworCWZvciAoaSA9IDA7IGkgPCAoKHRhYmxlX2NudCArIDI1NSkgPj4gOCk7IGkr KykKKwkJcHJpbnRmKCJcdC5sb25nXHQlZFxuIiwgbWFya2Vyc1tpXSk7CisJcHJpbnRmKCJcbiIp OworCisJZnJlZShtYXJrZXJzKTsKIH0KIAogCkBAIC00MDksNyArNDkwLDcgQEAgc3RhdGljIHZv aWQgY29tcHJlc3Nfc3ltYm9scyh1bnNpZ25lZCBjaGFyICpzdHIsIGludCBpZHgpCiAKIAkJbGVu ID0gdGFibGVbaV0ubGVuOwogCQlwMSA9IHRhYmxlW2ldLnN5bTsKLQorCQl0YWJsZVtpXS5pZHgg PSBpOwogCQkvKiBmaW5kIHRoZSB0b2tlbiBvbiB0aGUgc3ltYm9sICovCiAJCXAyID0gbWVtbWVt X3B2dChwMSwgbGVuLCBzdHIsIDIpOwogCQlpZiAoIXAyKSBjb250aW51ZTsKQEAgLTU2MSw2ICs2 NDIsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaW5wdXRfZm9ybWF0 ID0gZm10X3N5c3Y7CiAJCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tc29ydCIpID09IDAp CiAJCQkJdW5zb3J0ZWQgPSB0cnVlOworCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLWFk ZC1leHRyYS1zb3J0ZWQiKSA9PSAwKQorCQkJCWV4dHJhX3NvcnRlZCA9IDE7CiAJCQllbHNlIGlm IChzdHJjbXAoYXJndltpXSwgIi0td2Fybi1kdXAiKSA9PSAwKQogCQkJCXdhcm5fZHVwID0gdHJ1 ZTsKIAkJCWVsc2UKLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK