From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5603 invoked by alias); 4 Feb 2013 14:31:40 -0000 Received: (qmail 5289 invoked by uid 22791); 4 Feb 2013 14:31:36 -0000 X-SWARE-Spam-Status: No, hits=-7.6 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_SPAMHAUS_DROP,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mga02.intel.com (HELO mga02.intel.com) (134.134.136.20) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 04 Feb 2013 14:31:22 +0000 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 04 Feb 2013 06:31:20 -0800 X-ExtLoop1: 1 Received: from irsmsx101.ger.corp.intel.com ([163.33.3.153]) by orsmga002.jf.intel.com with ESMTP; 04 Feb 2013 06:31:16 -0800 Received: from irsmsx151.ger.corp.intel.com (163.33.192.59) by IRSMSX101.ger.corp.intel.com (163.33.3.153) with Microsoft SMTP Server (TLS) id 14.1.355.2; Mon, 4 Feb 2013 14:31:11 +0000 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.82]) by IRSMSX151.ger.corp.intel.com ([169.254.4.144]) with mapi id 14.01.0355.002; Mon, 4 Feb 2013 14:31:10 +0000 From: "Metzger, Markus T" To: Jan Kratochvil CC: "markus.t.metzger@gmail.com" , "gdb-patches@sourceware.org" Subject: RE: record-btrace Date: Mon, 04 Feb 2013 14:31:00 -0000 Message-ID: References: <20130129095303.GA12614@host2.jankratochvil.net> <20130129153617.GA28655@host2.jankratochvil.net> <20130201141829.GA24703@host2.jankratochvil.net> In-Reply-To: <20130201141829.GA24703@host2.jankratochvil.net> Content-Type: multipart/mixed; boundary="_003_A78C989F6D9628469189715575E55B2307B69233IRSMSX102gercor_" MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-02/txt/msg00073.txt.bz2 --_003_A78C989F6D9628469189715575E55B2307B69233IRSMSX102gercor_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-length: 2761 > -----Original Message----- > From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com] > Sent: Friday, February 01, 2013 3:18 PM > > The problem I have with "target record" is that the sub-commands are ad= ded in > > add_target, one per added target. Would it be OK to export targetlist s= o I can add > > an alias for target "record-full"? Or is it OK to just drop target "rec= ord"? >=20 > OK, let's export targetlist, with some comment it should not be normally = used. I added a new function add_deprecated_target_alias to do this. Patch attach= ed. Please let me know if you'd rather want it inline in a separate email. > > On a similar matter, I renamed the existing "set/show record" subcomman= ds by > > prepending "full-", i.e. "insn-number-max" becomes "full-insn-number-ma= x". >=20 > Could it be a prefix command? "set record full insn-number-max" etc. >=20 > To match "record full" (vs. "record btrace"). Done. > There should be aliases with deprecate_cmd during such changes, deprecate= _cmd > also ensures it does not get -completed anymore. When I use add_alias_cmd, I do not get the deprecated warning. Am I doing s= omething wrong (patch attached)? > > For record-btrace and record-full, to_record_list will be quite differe= nt. For all > > other targets, it will be NULL. > > > > We could share to_disconnect, to_detach, to_kill, and to_mourn_inferior= . They > > are just forwarding the request after unpushing the record target. > > > > I made the "record stop" command generic. It searches for a record targ= et > > beneath the current and unpushes the first it finds. I could do somethi= ng > > similar for the above. >=20 > It looks OK to me, it would be better to see the code. Please find the patch attached. Please let me know if you want the patch in= line in a separate email, instead. > > There's a record_changed notifier that is called in to_open and in the = stop > > command. Why is it not called in to_close instead of in the stop comman= d? >=20 > to_close is a bit dangerous that the target is no longer on stack, as > documented in unpush_target. So maybe record_changed could want to do > something with the record traget yet. >=20 > But with the currently only listener MI it should work even from to_close. We're not sending a notification every time we unpush the record target, e.= g. on mourn_inferior or detach. I'm preserving the current behavior. Regards, Markus. Intel GmbH Dornacher Strasse 1 85622 Feldkirchen/Muenchen, Deutschland Sitz der Gesellschaft: Feldkirchen bei Muenchen Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk Registergericht: Muenchen HRB 47456 Ust.-IdNr./VAT Registration No.: DE129385895 Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052 --_003_A78C989F6D9628469189715575E55B2307B69233IRSMSX102gercor_ Content-Type: application/octet-stream; name="add_deprecated_target_alias.patch" Content-Description: add_deprecated_target_alias.patch Content-Disposition: attachment; filename="add_deprecated_target_alias.patch"; size=1245; creation-date="Mon, 04 Feb 2013 13:45:42 GMT"; modification-date="Mon, 04 Feb 2013 13:45:22 GMT" Content-Transfer-Encoding: base64 Content-length: 1688 ZGlmZiAtLWdpdCBhL2dkYi90YXJnZXQuYyBiL2dkYi90YXJnZXQuYwppbmRl eCAxMGY2OWRjLi4yNWY0NjI5IDEwMDY0NAotLS0gYS9nZGIvdGFyZ2V0LmMK KysrIGIvZ2RiL3RhcmdldC5jCkBAIC00MzQsNiArNDM0LDIwIEBAIGluZm9y bWF0aW9uIG9uIHRoZSBhcmd1bWVudHMgZm9yIGEgcGFydGljdWxhciBwcm90 b2NvbCwgdHlwZVxuXAogICBhZGRfY21kICh0LT50b19zaG9ydG5hbWUsIG5v X2NsYXNzLCB0LT50b19vcGVuLCB0LT50b19kb2MsICZ0YXJnZXRsaXN0KTsK IH0KIAorLyogU2VlIHRhcmdldC5oLiAgKi8KKwordm9pZAorYWRkX2RlcHJl Y2F0ZWRfdGFyZ2V0X2FsaWFzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqdCwgY2hh ciAqYWxpYXMpCit7CisgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjOwor ICBjaGFyICphbHQ7CisKKyAgLyogSWYgd2UgdXNlIGFkZF9hbGlhc19jbWQs IGhlcmUsIHdlIGRvIG5vdCBnZXQgdGhlIGRlcHJlY2F0ZWQgd2FybmluZy4g ICovCisgIGMgPSBhZGRfY21kIChhbGlhcywgbm9fY2xhc3MsIHQtPnRvX29w ZW4sIHQtPnRvX2RvYywgJnRhcmdldGxpc3QpOworICBhbHQgPSB4c3RycHJp bnRmICgidGFyZ2V0ICVzIiwgdC0+dG9fc2hvcnRuYW1lKTsKKyAgZGVwcmVj YXRlX2NtZCAoYywgYWx0KTsKK30KKwogLyogU3R1YiBmdW5jdGlvbnMgKi8K IAogdm9pZApkaWZmIC0tZ2l0IGEvZ2RiL3RhcmdldC5oIGIvZ2RiL3Rhcmdl dC5oCmluZGV4IGM1NDMxMTguLjFkNzMzMzYgMTAwNjQ0Ci0tLSBhL2dkYi90 YXJnZXQuaAorKysgYi9nZGIvdGFyZ2V0LmgKQEAgLTE3NzksNiArMTc3OSwx MSBAQCBpbnQgdGFyZ2V0X3ZlcmlmeV9tZW1vcnkgKGNvbnN0IGdkYl9ieXRl ICpkYXRhLAogCiBleHRlcm4gdm9pZCBhZGRfdGFyZ2V0IChzdHJ1Y3QgdGFy Z2V0X29wcyAqKTsKIAorLyogQWRkcyBhIGNvbW1hbmQgQUxJQVMgZm9yIHRh cmdldCBUIGFuZCBtYXJrcyBpdCBkZXByZWNhdGVkLiAgVGhpcyBpcyB1c2Vm dWwKKyAgIGZvciBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0 eSB3aGVuIHJlbmFtaW5nIHRhcmdldHMuICAqLworCitleHRlcm4gdm9pZCBh ZGRfZGVwcmVjYXRlZF90YXJnZXRfYWxpYXMgKHN0cnVjdCB0YXJnZXRfb3Bz ICp0LCBjaGFyICphbGlhcyk7CisKIGV4dGVybiB2b2lkIHB1c2hfdGFyZ2V0 IChzdHJ1Y3QgdGFyZ2V0X29wcyAqKTsKIAogZXh0ZXJuIGludCB1bnB1c2hf dGFyZ2V0IChzdHJ1Y3QgdGFyZ2V0X29wcyAqKTsK --_003_A78C989F6D9628469189715575E55B2307B69233IRSMSX102gercor_ Content-Type: application/octet-stream; name="rename_record.patch" Content-Description: rename_record.patch Content-Disposition: attachment; filename="rename_record.patch"; size=194246; creation-date="Mon, 04 Feb 2013 14:28:05 GMT"; modification-date="Mon, 04 Feb 2013 14:27:59 GMT" Content-Transfer-Encoding: base64 Content-length: 263313 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCAzMzZlOGQwLi5iYTI4NGVlIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC03NTIsNyArNzUy LDcgQEAgU0ZJTEVTID0gYWRhLWV4cC55IGFkYS1sYW5nLmMgYWRhLXR5cGVw cmludC5jIGFkYS12YWxwcmludC5jIGFkYS10YXNrcy5jIFwKIAl2YWxhcml0 aC5jIHZhbG9wcy5jIHZhbHByaW50LmMgdmFsdWUuYyB2YXJvYmouYyBjb21t b24vdmVjLmMgXAogCXhtbC10ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAogCWlu ZmVyaW9yLmMgZ2RiX3VzbGVlcC5jIFwKLQlyZWNvcmQuYyBnY29yZS5jIFwK KwlyZWNvcmQuYyByZWNvcmQtZnVsbC5jIGdjb3JlLmMgXAogCWppdC5jIFwK IAl4bWwtc3lzY2FsbC5jIFwKIAlhbm5vdGF0ZS5jIGNvbW1vbi9zaWduYWxz LmMgY29weWluZy5jIGRmcC5jIGdkYi5jIGluZi1jaGlsZC5jIFwKQEAgLTgy OCw2ICs4MjgsNyBAQCBkaWNvcy10ZGVwLmggZmlsZXN5c3RlbS5oIGdjb3Jl LmggZ2RiX3djaGFyLmggaHBwYWJzZC10ZGVwLmggXAogaTM4Ni1kYXJ3aW4t dGRlcC5oIGkzODYtbmF0LmggbGludXgtcmVjb3JkLmggbW94aWUtdGRlcC5o IFwKIG9zZGF0YS5oIHByb2Nmcy5oIHB5dGhvbi9weS1ldmVudC5oIHB5dGhv bi9weS1ldmVudHMuaCBweXRob24vcHktc3RvcGV2ZW50LmggXAogcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oIHB5dGhvbi9weXRob24uaCByYXZlbnNjYXIt dGhyZWFkLmggcmVjb3JkLmggXAorcmVjb3JkLWZ1bGwuaCBcCiBzb2xpYi1k YXJ3aW4uaCBzb2xpYi1pYTY0LWhwdXguaCBzb2xpYi1zcHUuaCB3aW5kb3dz LW5hdC5oIHhjb2ZmcmVhZC5oIFwKIGdudWxpYi9pbXBvcnQvZXh0cmEvc25p cHBldC9hcmctbm9ubnVsbC5oIGdudWxpYi9pbXBvcnQvZXh0cmEvc25pcHBl dC9jKytkZWZzLmggXAogZ251bGliL2ltcG9ydC9leHRyYS9zbmlwcGV0L3dh cm4tb24tdXNlLmggXApAQCAtOTI1LDcgKzkyNiw3IEBAIENPTU1PTl9PQlMg PSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQoWVlPQkopIFwKIAlwcm9s b2d1ZS12YWx1ZS5vIG1lbW9yeS1tYXAubyBtZW1yYW5nZS5vIFwKIAl4bWwt c3VwcG9ydC5vIHhtbC1zeXNjYWxsLm8geG1sLXV0aWxzLm8gXAogCXRhcmdl dC1kZXNjcmlwdGlvbnMubyB0YXJnZXQtbWVtb3J5Lm8geG1sLXRkZXNjLm8g eG1sLWJ1aWx0aW4ubyBcCi0JaW5mZXJpb3IubyBvc2RhdGEubyBnZGJfdXNs ZWVwLm8gcmVjb3JkLm8gZ2NvcmUubyBcCisJaW5mZXJpb3IubyBvc2RhdGEu byBnZGJfdXNsZWVwLm8gcmVjb3JkLm8gcmVjb3JkLWZ1bGwubyBnY29yZS5v IFwKIAlnZGJfdmVjcy5vIGppdC5vIHByb2dzcGFjZS5vIHNraXAubyBwcm9i ZS5vIFwKIAljb21tb24tdXRpbHMubyBidWZmZXIubyBwdGlkLm8gZ2RiLWRs ZmNuLm8gY29tbW9uLWFnZW50Lm8gXAogCWZvcm1hdC5vIHJlZ2lzdHJ5Lm8g YnRyYWNlLm8KZGlmZiAtLWdpdCBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMg Yi9nZGIvYW1kNjQtbGludXgtdGRlcC5jCmluZGV4IGUyNjJjMTkuLjRmMzgz ZGIgMTAwNjQ0Ci0tLSBhL2dkYi9hbWQ2NC1saW51eC10ZGVwLmMKKysrIGIv Z2RiL2FtZDY0LWxpbnV4LXRkZXAuYwpAQCAtNDgsNyArNDgsNyBAQAogLyog VGhlIHN5c2NhbGwncyBYTUwgZmlsZW5hbWUgZm9yIGkzODYuICAqLwogI2Rl ZmluZSBYTUxfU1lTQ0FMTF9GSUxFTkFNRV9BTUQ2NCAic3lzY2FsbHMvYW1k NjQtbGludXgueG1sIgogCi0jaW5jbHVkZSAicmVjb3JkLmgiCisjaW5jbHVk ZSAicmVjb3JkLWZ1bGwuaCIKICNpbmNsdWRlICJsaW51eC1yZWNvcmQuaCIK IAogLyogU3VwcG9ydGVkIHJlZ2lzdGVyIG5vdGUgc2VjdGlvbnMuICAqLwpk aWZmIC0tZ2l0IGEvZ2RiL2kzODYtbGludXgtdGRlcC5jIGIvZ2RiL2kzODYt bGludXgtdGRlcC5jCmluZGV4IDE1YTEyNDcuLmY5NmZjODEgMTAwNjQ0Ci0t LSBhL2dkYi9pMzg2LWxpbnV4LXRkZXAuYworKysgYi9nZGIvaTM4Ni1saW51 eC10ZGVwLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIC8qIFRoZSBzeXNjYWxsJ3Mg WE1MIGZpbGVuYW1lIGZvciBpMzg2LiAgKi8KICNkZWZpbmUgWE1MX1NZU0NB TExfRklMRU5BTUVfSTM4NiAic3lzY2FsbHMvaTM4Ni1saW51eC54bWwiCiAK LSNpbmNsdWRlICJyZWNvcmQuaCIKKyNpbmNsdWRlICJyZWNvcmQtZnVsbC5o IgogI2luY2x1ZGUgImxpbnV4LXJlY29yZC5oIgogI2luY2x1ZGUgPHN0ZGlu dC5oPgogCmRpZmYgLS1naXQgYS9nZGIvaTM4Ni10ZGVwLmMgYi9nZGIvaTM4 Ni10ZGVwLmMKaW5kZXggZGYwNzdiYy4uMDFlY2I5OSAxMDA2NDQKLS0tIGEv Z2RiL2kzODYtdGRlcC5jCisrKyBiL2dkYi9pMzg2LXRkZXAuYwpAQCAtNTEs NyArNTEsNyBAQAogI2luY2x1ZGUgImkzODctdGRlcC5oIgogI2luY2x1ZGUg ImkzODYteHN0YXRlLmgiCiAKLSNpbmNsdWRlICJyZWNvcmQuaCIKKyNpbmNs dWRlICJyZWNvcmQtZnVsbC5oIgogI2luY2x1ZGUgPHN0ZGludC5oPgogCiAj aW5jbHVkZSAiZmVhdHVyZXMvaTM4Ni9pMzg2LmMiCmRpZmYgLS1naXQgYS9n ZGIvaW5mcnVuLmMgYi9nZGIvaW5mcnVuLmMKaW5kZXggZjRmZjViYi4uM2Y1 MDQ5MyAxMDA2NDQKLS0tIGEvZ2RiL2luZnJ1bi5jCisrKyBiL2dkYi9pbmZy dW4uYwpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgImdkYl9hc3NlcnQu aCIKICNpbmNsdWRlICJtaS9taS1jb21tb24uaCIKICNpbmNsdWRlICJldmVu dC10b3AuaCIKLSNpbmNsdWRlICJyZWNvcmQuaCIKKyNpbmNsdWRlICJyZWNv cmQtZnVsbC5oIgogI2luY2x1ZGUgImlubGluZS1mcmFtZS5oIgogI2luY2x1 ZGUgImppdC5oIgogI2luY2x1ZGUgInRyYWNlcG9pbnQuaCIKZGlmZiAtLWdp dCBhL2dkYi9saW51eC1yZWNvcmQuYyBiL2dkYi9saW51eC1yZWNvcmQuYwpp bmRleCA1YTllYzk5Li43MWQwYWNmIDEwMDY0NAotLS0gYS9nZGIvbGludXgt cmVjb3JkLmMKKysrIGIvZ2RiL2xpbnV4LXJlY29yZC5jCkBAIC0yMSw3ICsy MSw3IEBACiAjaW5jbHVkZSAidGFyZ2V0LmgiCiAjaW5jbHVkZSAiZ2RidHlw ZXMuaCIKICNpbmNsdWRlICJyZWdjYWNoZS5oIgotI2luY2x1ZGUgInJlY29y ZC5oIgorI2luY2x1ZGUgInJlY29yZC1mdWxsLmgiCiAjaW5jbHVkZSAibGlu dXgtcmVjb3JkLmgiCiAKIC8qIFRoZXNlIG1hY3JvcyBhcmUgdGhlIHZhbHVl cyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygc3lzdGVtIGNhbGwKZGlmZiAt LWdpdCBhL2dkYi9yZWNvcmQtZnVsbC5jIGIvZ2RiL3JlY29yZC1mdWxsLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0OTI5Ngot LS0gL2Rldi9udWxsCisrKyBiL2dkYi9yZWNvcmQtZnVsbC5jCkBAIC0wLDAg KzEsMzAzNiBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJn ZXQgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0 IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNs dWRlICJnZGJjbWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1 ZGUgImdkYnRocmVhZC5oIgorI2luY2x1ZGUgImV2ZW50LXRvcC5oIgorI2lu Y2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJjb21wbGV0ZXIuaCIK KyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5o IgorI2luY2x1ZGUgImV4ZWMuaCIKKyNpbmNsdWRlICJyZWNvcmQtZnVsbC5o IgorI2luY2x1ZGUgImVsZi1iZmQuaCIKKyNpbmNsdWRlICJnY29yZS5oIgor I2luY2x1ZGUgImV2ZW50LWxvb3AuaCIKKyNpbmNsdWRlICJpbmYtbG9vcC5o IgorI2luY2x1ZGUgImdkYl9iZmQuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5o IgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qIFRoaXMgbW9kdWxlIGlt cGxlbWVudHMgInRhcmdldCByZWNvcmQtZnVsbCIsIGFsc28ga25vd24gYXMg InByb2Nlc3MKKyAgIHJlY29yZCBhbmQgcmVwbGF5Ii4gIFRoaXMgdGFyZ2V0 IHNpdHMgb24gdG9wIG9mIGEgIm5vcm1hbCIgdGFyZ2V0CisgICAoYSB0YXJn ZXQgdGhhdCAiaGFzIGV4ZWN1dGlvbiIpLCBhbmQgcHJvdmlkZXMgYSByZWNv cmQgYW5kIHJlcGxheQorICAgZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIHJl dmVyc2UgZGVidWdnaW5nLgorCisgICBUYXJnZXQgcmVjb3JkIGhhcyB0d28g bW9kZXM6IHJlY29yZGluZywgYW5kIHJlcGxheWluZy4KKworICAgSW4gcmVj b3JkIG1vZGUsIHdlIGludGVyY2VwdCB0aGUgdG9fcmVzdW1lIGFuZCB0b193 YWl0IG1ldGhvZHMuCisgICBXaGVuZXZlciBnZGIgcmVzdW1lcyB0aGUgdGFy Z2V0LCB3ZSBydW4gdGhlIHRhcmdldCBpbiBzaW5nbGUgc3RlcAorICAgbW9k ZSwgYW5kIHdlIGJ1aWxkIHVwIGFuIGV4ZWN1dGlvbiBsb2cgaW4gd2hpY2gs IGZvciBlYWNoIGV4ZWN1dGVkCisgICBpbnN0cnVjdGlvbiwgd2UgcmVjb3Jk IGFsbCBjaGFuZ2VzIGluIG1lbW9yeSBhbmQgcmVnaXN0ZXIgc3RhdGUuCisg ICBUaGlzIGlzIGludmlzaWJsZSB0byB0aGUgdXNlciwgdG8gd2hvbSBpdCBq dXN0IGxvb2tzIGxpa2UgYW4KKyAgIG9yZGluYXJ5IGRlYnVnZ2luZyBzZXNz aW9uIChleGNlcHQgZm9yIHBlcmZvcm1hbmNlIGRlZ3JlZGF0aW9uKS4KKwor ICAgSW4gcmVwbGF5IG1vZGUsIGluc3RlYWQgb2YgYWN0dWFsbHkgbGV0dGlu ZyB0aGUgaW5mZXJpb3IgcnVuIGFzIGEKKyAgIHByb2Nlc3MsIHdlIHNpbXVs YXRlIGl0cyBleGVjdXRpb24gYnkgcGxheWluZyBiYWNrIHRoZSByZWNvcmRl ZAorICAgZXhlY3V0aW9uIGxvZy4gIEZvciBlYWNoIGluc3RydWN0aW9uIGlu IHRoZSBsb2csIHdlIHNpbXVsYXRlIHRoZQorICAgaW5zdHJ1Y3Rpb24ncyBz aWRlIGVmZmVjdHMgYnkgZHVwbGljYXRpbmcgdGhlIGNoYW5nZXMgdGhhdCBp dCB3b3VsZAorICAgaGF2ZSBtYWRlIG9uIG1lbW9yeSBhbmQgcmVnaXN0ZXJz LiAgKi8KKworI2RlZmluZSBERUZBVUxUX1JFQ09SRF9JTlNOX01BWF9OVU0J MjAwMDAwCisKKyNkZWZpbmUgUkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChy ZWNvcmRfbGlzdC0+bmV4dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVY RUNfUkVWRVJTRSkKKworI2RlZmluZSBSRUNPUkRfRklMRV9NQUdJQwluZXRv cmRlcjMyKDB4MjAwOTEwMTYpCisKKy8qIFRoZXNlIGFyZSB0aGUgY29yZSBz dHJ1Y3RzIG9mIHRoZSBwcm9jZXNzIHJlY29yZCBmdW5jdGlvbmFsaXR5Lgor CisgICBBIHJlY29yZF9lbnRyeSBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUg Y2hhbmdlIG9mIGEgcmVnaXN0ZXIKKyAgICgicmVjb3JkX3JlZyIpIG9yIGEg cGFydCBvZiBtZW1vcnkgKCJyZWNvcmRfbWVtIikuICBBbmQgZWFjaAorICAg aW5zdHJ1Y3Rpb24gbXVzdCBoYXZlIGEgc3RydWN0IHJlY29yZF9lbnRyeSAo InJlY29yZF9lbmQiKSB0aGF0CisgICBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlz IHRoZSBsYXN0IHN0cnVjdCByZWNvcmRfZW50cnkgb2YgdGhpcworICAgaW5z dHJ1Y3Rpb24uCisKKyAgIEVhY2ggc3RydWN0IHJlY29yZF9lbnRyeSBpcyBs aW5rZWQgdG8gInJlY29yZF9saXN0IiBieSAicHJldiIgYW5kCisgICAibmV4 dCIgcG9pbnRlcnMuICAqLworCitzdHJ1Y3QgcmVjb3JkX21lbV9lbnRyeQor eworICBDT1JFX0FERFIgYWRkcjsKKyAgaW50IGxlbjsKKyAgLyogU2V0IHRo aXMgZmxhZyBpZiB0YXJnZXQgbWVtb3J5IGZvciB0aGlzIGVudHJ5CisgICAg IGNhbiBubyBsb25nZXIgYmUgYWNjZXNzZWQuICAqLworICBpbnQgbWVtX2Vu dHJ5X25vdF9hY2Nlc3NpYmxlOworICB1bmlvbgorICB7CisgICAgZ2RiX2J5 dGUgKnB0cjsKKyAgICBnZGJfYnl0ZSBidWZbc2l6ZW9mIChnZGJfYnl0ZSAq KV07CisgIH0gdTsKK307CisKK3N0cnVjdCByZWNvcmRfcmVnX2VudHJ5Cit7 CisgIHVuc2lnbmVkIHNob3J0IG51bTsKKyAgdW5zaWduZWQgc2hvcnQgbGVu OworICB1bmlvbiAKKyAgeworICAgIGdkYl9ieXRlICpwdHI7CisgICAgZ2Ri X2J5dGUgYnVmWzIgKiBzaXplb2YgKGdkYl9ieXRlICopXTsKKyAgfSB1Owor fTsKKworc3RydWN0IHJlY29yZF9lbmRfZW50cnkKK3sKKyAgZW51bSBnZGJf c2lnbmFsIHNpZ3ZhbDsKKyAgVUxPTkdFU1QgaW5zbl9udW07Cit9OworCitl bnVtIHJlY29yZF90eXBlCit7CisgIHJlY29yZF9lbmQgPSAwLAorICByZWNv cmRfcmVnLAorICByZWNvcmRfbWVtCit9OworCisvKiBUaGlzIGlzIHRoZSBk YXRhIHN0cnVjdHVyZSB0aGF0IG1ha2VzIHVwIHRoZSBleGVjdXRpb24gbG9n LgorCisgICBUaGUgZXhlY3V0aW9uIGxvZyBjb25zaXN0cyBvZiBhIHNpbmds ZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzCisgICBvZiB0eXBlICJzdHJ1Y3Qg cmVjb3JkX2VudHJ5Ii4gIEl0IGlzIGRvdWJseSBsaW5rZWQgc28gdGhhdCBp dAorICAgY2FuIGJlIHRyYXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLgor CisgICBUaGUgc3RhcnQgb2YgdGhlIGxpc3QgaXMgYW5jaG9yZWQgYnkgYSBz dHJ1Y3QgY2FsbGVkCisgICAicmVjb3JkX2ZpcnN0Ii4gIFRoZSBwb2ludGVy ICJyZWNvcmRfbGlzdCIgZWl0aGVyIHBvaW50cyB0byB0aGUKKyAgIGxhc3Qg ZW50cnkgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGxpc3QgKGluIHJlY29yZCBt b2RlKSwgb3IgdG8gdGhlCisgICBuZXh0IGVudHJ5IGluIHRoZSBsaXN0IHRo YXQgd2lsbCBiZSBleGVjdXRlZCAoaW4gcmVwbGF5IG1vZGUpLgorCisgICBF YWNoIGxpc3QgZWxlbWVudCAoc3RydWN0IHJlY29yZF9lbnRyeSksIGluIGFk ZGl0aW9uIHRvIG5leHQgYW5kCisgICBwcmV2IHBvaW50ZXJzLCBjb25zaXN0 cyBvZiBhIHVuaW9uIG9mIHRocmVlIGVudHJ5IHR5cGVzOiBtZW0sIHJlZywK KyAgIGFuZCBlbmQuICBBIGZpZWxkIGNhbGxlZCAidHlwZSIgZGV0ZXJtaW5l cyB3aGljaCBlbnRyeSB0eXBlIGlzCisgICByZXByZXNlbnRlZCBieSBhIGdp dmVuIGxpc3QgZWxlbWVudC4KKworICAgRWFjaCBpbnN0cnVjdGlvbiB0aGF0 IGlzIGFkZGVkIHRvIHRoZSBleGVjdXRpb24gbG9nIGlzIHJlcHJlc2VudGVk CisgICBieSBhIHZhcmlhYmxlIG51bWJlciBvZiBsaXN0IGVsZW1lbnRzICgn ZW50cmllcycpLiAgVGhlIGluc3RydWN0aW9uCisgICB3aWxsIGhhdmUgb25l ICJyZWciIGVudHJ5IGZvciBlYWNoIHJlZ2lzdGVyIHRoYXQgaXMgY2hhbmdl ZCBieSAKKyAgIGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24gKGluY2x1ZGlu ZyB0aGUgUEMgaW4gZXZlcnkgY2FzZSkuICBJdCAKKyAgIHdpbGwgYWxzbyBo YXZlIG9uZSAibWVtIiBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgY2hhbmdlLiAg RmluYWxseSwKKyAgIGVhY2ggaW5zdHJ1Y3Rpb24gd2lsbCBoYXZlIGFuICJl bmQiIGVudHJ5IHRoYXQgc2VwYXJhdGVzIGl0IGZyb20KKyAgIHRoZSBjaGFu Z2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gICov CisKK3N0cnVjdCByZWNvcmRfZW50cnkKK3sKKyAgc3RydWN0IHJlY29yZF9l bnRyeSAqcHJldjsKKyAgc3RydWN0IHJlY29yZF9lbnRyeSAqbmV4dDsKKyAg ZW51bSByZWNvcmRfdHlwZSB0eXBlOworICB1bmlvbgorICB7CisgICAgLyog cmVnICovCisgICAgc3RydWN0IHJlY29yZF9yZWdfZW50cnkgcmVnOworICAg IC8qIG1lbSAqLworICAgIHN0cnVjdCByZWNvcmRfbWVtX2VudHJ5IG1lbTsK KyAgICAvKiBlbmQgKi8KKyAgICBzdHJ1Y3QgcmVjb3JkX2VuZF9lbnRyeSBl bmQ7CisgIH0gdTsKK307CisKKy8qIElmIHRydWUsIHF1ZXJ5IGlmIFBSRUMg Y2Fubm90IHJlY29yZCBtZW1vcnkKKyAgIGNoYW5nZSBvZiBuZXh0IGluc3Ry dWN0aW9uLiAgKi8KK2ludCByZWNvcmRfbWVtb3J5X3F1ZXJ5ID0gMDsKKwor c3RydWN0IHJlY29yZF9jb3JlX2J1Zl9lbnRyeQoreworICBzdHJ1Y3QgcmVj b3JkX2NvcmVfYnVmX2VudHJ5ICpwcmV2OworICBzdHJ1Y3QgdGFyZ2V0X3Nl Y3Rpb24gKnA7CisgIGJmZF9ieXRlICpidWY7Cit9OworCisvKiBSZWNvcmQg YnVmIHdpdGggY29yZSB0YXJnZXQuICAqLworc3RhdGljIGdkYl9ieXRlICpy ZWNvcmRfY29yZV9yZWdidWYgPSBOVUxMOworc3RhdGljIHN0cnVjdCB0YXJn ZXRfc2VjdGlvbiAqcmVjb3JkX2NvcmVfc3RhcnQ7CitzdGF0aWMgc3RydWN0 IHRhcmdldF9zZWN0aW9uICpyZWNvcmRfY29yZV9lbmQ7CitzdGF0aWMgc3Ry dWN0IHJlY29yZF9jb3JlX2J1Zl9lbnRyeSAqcmVjb3JkX2NvcmVfYnVmX2xp c3QgPSBOVUxMOworCisvKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUg dXNlZCBmb3IgbWFuYWdpbmcgdGhlIGxpbmtlZCBsaXN0IHRoYXQKKyAgIHJl cHJlc2VudHMgdGhlIGV4ZWN1dGlvbiBsb2cuCisKKyAgIHJlY29yZF9maXJz dCBpcyB0aGUgYW5jaG9yIHRoYXQgaG9sZHMgZG93biB0aGUgYmVnaW5uaW5n IG9mIHRoZSBsaXN0LgorCisgICByZWNvcmRfbGlzdCBzZXJ2ZXMgdHdvIGZ1 bmN0aW9uczoKKyAgICAgMSkgSW4gcmVjb3JkIG1vZGUsIGl0IGFuY2hvcnMg dGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAgICAgMikgSW4gcmVwbGF5IG1vZGUs IGl0IHRyYXZlcnNlcyB0aGUgbGlzdCBhbmQgcG9pbnRzIHRvCisgICAgICAg IHRoZSBuZXh0IGluc3RydWN0aW9uIHRoYXQgbXVzdCBiZSBlbXVsYXRlZC4K KworICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkIGFuZCByZWNvcmRfYXJjaF9s aXN0X3RhaWwgYXJlIHVzZWQgdG8gbWFuYWdlCisgICBhIHNlcGFyYXRlIGxp c3QsIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdXAgdGhlIGNoYW5nZSBlbGVt ZW50cyBvZgorICAgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgaW5zdHJ1Y3Rp b24gZHVyaW5nIHJlY29yZCBtb2RlLiAgV2hlbiB0aGlzCisgICBpbnN0cnVj dGlvbiBoYXMgYmVlbiBjb21wbGV0ZWx5IGFubm90YXRlZCBpbiB0aGUgImFy Y2ggbGlzdCIsIGl0IAorICAgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgbWFp biBleGVjdXRpb24gbG9nLiAgKi8KKworc3RhdGljIHN0cnVjdCByZWNvcmRf ZW50cnkgcmVjb3JkX2ZpcnN0Oworc3RhdGljIHN0cnVjdCByZWNvcmRfZW50 cnkgKnJlY29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsKK3N0YXRpYyBzdHJ1 Y3QgcmVjb3JkX2VudHJ5ICpyZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxM Oworc3RhdGljIHN0cnVjdCByZWNvcmRfZW50cnkgKnJlY29yZF9hcmNoX2xp c3RfdGFpbCA9IE5VTEw7CisKKy8qIDEgYXNrIHVzZXIuIDAgYXV0byBkZWxl dGUgdGhlIGxhc3Qgc3RydWN0IHJlY29yZF9lbnRyeS4gICovCitzdGF0aWMg aW50IHJlY29yZF9zdG9wX2F0X2xpbWl0ID0gMTsKKy8qIE1heGltdW0gYWxs b3dlZCBudW1iZXIgb2YgaW5zbnMgaW4gZXhlY3V0aW9uIGxvZy4gICovCitz dGF0aWMgdW5zaWduZWQgaW50IHJlY29yZF9pbnNuX21heF9udW0gPSBERUZB VUxUX1JFQ09SRF9JTlNOX01BWF9OVU07CisvKiBBY3R1YWwgY291bnQgb2Yg aW5zbnMgcHJlc2VudGx5IGluIGV4ZWN1dGlvbiBsb2cuICAqLworc3RhdGlj IGludCByZWNvcmRfaW5zbl9udW0gPSAwOworLyogQ291bnQgb2YgaW5zbnMg bG9nZ2VkIHNvIGZhciAobWF5IGJlIGxhcmdlcgorICAgdGhhbiBjb3VudCBv ZiBpbnNucyBwcmVzZW50bHkgaW4gZXhlY3V0aW9uIGxvZykuICAqLworc3Rh dGljIFVMT05HRVNUIHJlY29yZF9pbnNuX2NvdW50OworCisvKiBUaGUgdGFy Z2V0X29wcyBvZiBwcm9jZXNzIHJlY29yZC4gICovCitzdGF0aWMgc3RydWN0 IHRhcmdldF9vcHMgcmVjb3JkX29wczsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0 X29wcyByZWNvcmRfY29yZV9vcHM7CisKKy8qIENvbW1hbmQgbGlzdHMgZm9y ICJzZXQvc2hvdyByZWNvcmQgZnVsbCIuICAqLworc3RhdGljIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpzZXRfcmVjb3JkX2Z1bGxfY21kbGlzdDsKK3N0 YXRpYyBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqc2hvd19yZWNvcmRfZnVs bF9jbWRsaXN0OworCisvKiBUaGUgYmVuZWF0aCBmdW5jdGlvbiBwb2ludGVy cy4gICovCitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnJlY29yZF9iZW5l YXRoX3RvX3Jlc3VtZV9vcHM7CitzdGF0aWMgdm9pZCAoKnJlY29yZF9iZW5l YXRoX3RvX3Jlc3VtZSkgKHN0cnVjdCB0YXJnZXRfb3BzICosIHB0aWRfdCwg aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbnVtIGdkYl9zaWduYWwpOworc3RhdGljIHN0cnVjdCB0YXJnZXRfb3Bz ICpyZWNvcmRfYmVuZWF0aF90b193YWl0X29wczsKK3N0YXRpYyBwdGlkX3Qg KCpyZWNvcmRfYmVuZWF0aF90b193YWl0KSAoc3RydWN0IHRhcmdldF9vcHMg KiwgcHRpZF90LAorCQkJCQkgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICos CisJCQkJCSBpbnQpOworc3RhdGljIHN0cnVjdCB0YXJnZXRfb3BzICpyZWNv cmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnNfb3BzOworc3RhdGljIHZv aWQgKCpyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMpIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVnY2FjaGUgKiwKKwkJ CQkJCSAgaW50IHJlZ25vKTsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyAq cmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsX29wczsKK3N0YXRpYyBM T05HRVNUICgqcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsKSAoc3Ry dWN0IHRhcmdldF9vcHMgKm9wcywKKwkJCQkJCSAgZW51bSB0YXJnZXRfb2Jq ZWN0IG9iamVjdCwKKwkJCQkJCSAgY29uc3QgY2hhciAqYW5uZXgsCisJCQkJ CQkgIGdkYl9ieXRlICpyZWFkYnVmLAorCQkJCQkJICBjb25zdCBnZGJfYnl0 ZSAqd3JpdGVidWYsCisJCQkJCQkgIFVMT05HRVNUIG9mZnNldCwKKwkJCQkJ CSAgTE9OR0VTVCBsZW4pOworc3RhdGljIGludCAoKnJlY29yZF9iZW5lYXRo X3RvX2luc2VydF9icmVha3BvaW50KSAoc3RydWN0IGdkYmFyY2ggKiwKKwkJ CQkJCSAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqKTsKK3N0YXRpYyBpbnQg KCpyZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVj dCBnZGJhcmNoICosCisJCQkJCQkgICBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g Kik7CitzdGF0aWMgaW50ICgqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcHBlZF9i eV93YXRjaHBvaW50KSAodm9pZCk7CitzdGF0aWMgaW50ICgqcmVjb3JkX2Jl bmVhdGhfdG9fc3RvcHBlZF9kYXRhX2FkZHJlc3MpIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqLAorCQkJCQkJICAgICAgQ09SRV9BRERSICopOworc3RhdGljIHZv aWQgKCpyZWNvcmRfYmVuZWF0aF90b19hc3luYykgKHZvaWQgKCopIChlbnVt IGluZmVyaW9yX2V2ZW50X3R5cGUsIHZvaWQgKiksIHZvaWQgKik7CisKKy8q IEFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucyBmb3IgcmVjb3JkX3JlZywgcmVj b3JkX21lbSwgYW5kIHJlY29yZF9lbmQgCisgICBlbnRyaWVzLiAgKi8KKwor LyogQWxsb2MgYSByZWNvcmRfcmVnIHJlY29yZCBlbnRyeS4gICovCisKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IHJlY29yZF9lbnRyeSAqCityZWNvcmRfcmVn X2FsbG9jIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVt KQoreworICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWM7CisgIHN0cnVjdCBn ZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hl KTsKKworICByZWMgPSAoc3RydWN0IHJlY29yZF9lbnRyeSAqKSB4Y2FsbG9j ICgxLCBzaXplb2YgKHN0cnVjdCByZWNvcmRfZW50cnkpKTsKKyAgcmVjLT50 eXBlID0gcmVjb3JkX3JlZzsKKyAgcmVjLT51LnJlZy5udW0gPSByZWdudW07 CisgIHJlYy0+dS5yZWcubGVuID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwg cmVnbnVtKTsKKyAgaWYgKHJlYy0+dS5yZWcubGVuID4gc2l6ZW9mIChyZWMt PnUucmVnLnUuYnVmKSkKKyAgICByZWMtPnUucmVnLnUucHRyID0gKGdkYl9i eXRlICopIHhtYWxsb2MgKHJlYy0+dS5yZWcubGVuKTsKKworICByZXR1cm4g cmVjOworfQorCisvKiBGcmVlIGEgcmVjb3JkX3JlZyByZWNvcmQgZW50cnku ICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlY29yZF9yZWdfcmVsZWFz ZSAoc3RydWN0IHJlY29yZF9lbnRyeSAqcmVjKQoreworICBnZGJfYXNzZXJ0 IChyZWMtPnR5cGUgPT0gcmVjb3JkX3JlZyk7CisgIGlmIChyZWMtPnUucmVn LmxlbiA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpCisgICAgeGZyZWUg KHJlYy0+dS5yZWcudS5wdHIpOworICB4ZnJlZSAocmVjKTsKK30KKworLyog QWxsb2MgYSByZWNvcmRfbWVtIHJlY29yZCBlbnRyeS4gICovCisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IHJlY29yZF9lbnRyeSAqCityZWNvcmRfbWVtX2Fs bG9jIChDT1JFX0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgc3RydWN0IHJl Y29yZF9lbnRyeSAqcmVjOworCisgIHJlYyA9IChzdHJ1Y3QgcmVjb3JkX2Vu dHJ5ICopIHhjYWxsb2MgKDEsIHNpemVvZiAoc3RydWN0IHJlY29yZF9lbnRy eSkpOworICByZWMtPnR5cGUgPSByZWNvcmRfbWVtOworICByZWMtPnUubWVt LmFkZHIgPSBhZGRyOworICByZWMtPnUubWVtLmxlbiA9IGxlbjsKKyAgaWYg KHJlYy0+dS5tZW0ubGVuID4gc2l6ZW9mIChyZWMtPnUubWVtLnUuYnVmKSkK KyAgICByZWMtPnUubWVtLnUucHRyID0gKGdkYl9ieXRlICopIHhtYWxsb2Mg KGxlbik7CisKKyAgcmV0dXJuIHJlYzsKK30KKworLyogRnJlZSBhIHJlY29y ZF9tZW0gcmVjb3JkIGVudHJ5LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk CityZWNvcmRfbWVtX3JlbGVhc2UgKHN0cnVjdCByZWNvcmRfZW50cnkgKnJl YykKK3sKKyAgZ2RiX2Fzc2VydCAocmVjLT50eXBlID09IHJlY29yZF9tZW0p OworICBpZiAocmVjLT51Lm1lbS5sZW4gPiBzaXplb2YgKHJlYy0+dS5tZW0u dS5idWYpKQorICAgIHhmcmVlIChyZWMtPnUubWVtLnUucHRyKTsKKyAgeGZy ZWUgKHJlYyk7Cit9CisKKy8qIEFsbG9jIGEgcmVjb3JkX2VuZCByZWNvcmQg ZW50cnkuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZW50 cnkgKgorcmVjb3JkX2VuZF9hbGxvYyAodm9pZCkKK3sKKyAgc3RydWN0IHJl Y29yZF9lbnRyeSAqcmVjOworCisgIHJlYyA9IChzdHJ1Y3QgcmVjb3JkX2Vu dHJ5ICopIHhjYWxsb2MgKDEsIHNpemVvZiAoc3RydWN0IHJlY29yZF9lbnRy eSkpOworICByZWMtPnR5cGUgPSByZWNvcmRfZW5kOworCisgIHJldHVybiBy ZWM7Cit9CisKKy8qIEZyZWUgYSByZWNvcmRfZW5kIHJlY29yZCBlbnRyeS4g ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVjb3JkX2VuZF9yZWxlYXNl IChzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWMpCit7CisgIHhmcmVlIChyZWMp OworfQorCisvKiBGcmVlIG9uZSByZWNvcmQgZW50cnksIGFueSB0eXBlLgor ICAgUmV0dXJuIGVudHJ5LT50eXBlLCBpbiBjYXNlIGNhbGxlciB3YW50cyB0 byBrbm93LiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHJlY29yZF90eXBl CityZWNvcmRfZW50cnlfcmVsZWFzZSAoc3RydWN0IHJlY29yZF9lbnRyeSAq cmVjKQoreworICBlbnVtIHJlY29yZF90eXBlIHR5cGUgPSByZWMtPnR5cGU7 CisKKyAgc3dpdGNoICh0eXBlKSB7CisgIGNhc2UgcmVjb3JkX3JlZzoKKyAg ICByZWNvcmRfcmVnX3JlbGVhc2UgKHJlYyk7CisgICAgYnJlYWs7CisgIGNh c2UgcmVjb3JkX21lbToKKyAgICByZWNvcmRfbWVtX3JlbGVhc2UgKHJlYyk7 CisgICAgYnJlYWs7CisgIGNhc2UgcmVjb3JkX2VuZDoKKyAgICByZWNvcmRf ZW5kX3JlbGVhc2UgKHJlYyk7CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJu IHR5cGU7Cit9CisKKy8qIEZyZWUgYWxsIHJlY29yZCBlbnRyaWVzIGluIGxp c3QgcG9pbnRlZCB0byBieSBSRUMuICAqLworCitzdGF0aWMgdm9pZAorcmVj b3JkX2xpc3RfcmVsZWFzZSAoc3RydWN0IHJlY29yZF9lbnRyeSAqcmVjKQor eworICBpZiAoIXJlYykKKyAgICByZXR1cm47CisKKyAgd2hpbGUgKHJlYy0+ bmV4dCkKKyAgICByZWMgPSByZWMtPm5leHQ7CisKKyAgd2hpbGUgKHJlYy0+ cHJldikKKyAgICB7CisgICAgICByZWMgPSByZWMtPnByZXY7CisgICAgICBy ZWNvcmRfZW50cnlfcmVsZWFzZSAocmVjLT5uZXh0KTsKKyAgICB9CisKKyAg aWYgKHJlYyA9PSAmcmVjb3JkX2ZpcnN0KQorICAgIHsKKyAgICAgIHJlY29y ZF9pbnNuX251bSA9IDA7CisgICAgICByZWNvcmRfZmlyc3QubmV4dCA9IE5V TEw7CisgICAgfQorICBlbHNlCisgICAgcmVjb3JkX2VudHJ5X3JlbGVhc2Ug KHJlYyk7Cit9CisKKy8qIEZyZWUgYWxsIHJlY29yZCBlbnRyaWVzIGZvcndh cmQgb2YgdGhlIGdpdmVuIGxpc3QgcG9zaXRpb24uICAqLworCitzdGF0aWMg dm9pZAorcmVjb3JkX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVjdCBy ZWNvcmRfZW50cnkgKnJlYykKK3sKKyAgc3RydWN0IHJlY29yZF9lbnRyeSAq dG1wID0gcmVjLT5uZXh0OworCisgIHJlYy0+bmV4dCA9IE5VTEw7CisgIHdo aWxlICh0bXApCisgICAgeworICAgICAgcmVjID0gdG1wLT5uZXh0OworICAg ICAgaWYgKHJlY29yZF9lbnRyeV9yZWxlYXNlICh0bXApID09IHJlY29yZF9l bmQpCisJeworCSAgcmVjb3JkX2luc25fbnVtLS07CisJICByZWNvcmRfaW5z bl9jb3VudC0tOworCX0KKyAgICAgIHRtcCA9IHJlYzsKKyAgICB9Cit9CisK Ky8qIERlbGV0ZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgYmVn aW5uaW5nIG9mIHRoZSBsb2csIHRvIG1ha2UKKyAgIHJvb20gZm9yIGFkZGlu ZyBhIG5ldyBpbnN0cnVjdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCisK KyAgIE5vdGUgLS0gdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgcmVj b3JkX2luc25fbnVtLiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9saXN0 X3JlbGVhc2VfZmlyc3QgKHZvaWQpCit7CisgIHN0cnVjdCByZWNvcmRfZW50 cnkgKnRtcDsKKworICBpZiAoIXJlY29yZF9maXJzdC5uZXh0KQorICAgIHJl dHVybjsKKworICAvKiBMb29wIHVudGlsIGEgcmVjb3JkX2VuZC4gICovCisg IHdoaWxlICgxKQorICAgIHsKKyAgICAgIC8qIEN1dCByZWNvcmRfZmlyc3Qu bmV4dCBvdXQgb2YgdGhlIGxpbmtlZCBsaXN0LiAgKi8KKyAgICAgIHRtcCA9 IHJlY29yZF9maXJzdC5uZXh0OworICAgICAgcmVjb3JkX2ZpcnN0Lm5leHQg PSB0bXAtPm5leHQ7CisgICAgICB0bXAtPm5leHQtPnByZXYgPSAmcmVjb3Jk X2ZpcnN0OworCisgICAgICAvKiB0bXAgaXMgbm93IGlzb2xhdGVkLCBhbmQg Y2FuIGJlIGRlbGV0ZWQuICAqLworICAgICAgaWYgKHJlY29yZF9lbnRyeV9y ZWxlYXNlICh0bXApID09IHJlY29yZF9lbmQpCisJYnJlYWs7CS8qIEVuZCBs b29wIGF0IGZpcnN0IHJlY29yZF9lbmQuICAqLworCisgICAgICBpZiAoIXJl Y29yZF9maXJzdC5uZXh0KQorCXsKKwkgIGdkYl9hc3NlcnQgKHJlY29yZF9p bnNuX251bSA9PSAxKTsKKwkgIGJyZWFrOwkvKiBFbmQgbG9vcCB3aGVuIGxp c3QgaXMgZW1wdHkuICAqLworCX0KKyAgICB9Cit9CisKKy8qIEFkZCBhIHN0 cnVjdCByZWNvcmRfZW50cnkgdG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCisK K3N0YXRpYyB2b2lkCityZWNvcmRfYXJjaF9saXN0X2FkZCAoc3RydWN0IHJl Y29yZF9lbnRyeSAqcmVjKQoreworICBpZiAocmVjb3JkX2RlYnVnID4gMSkK KyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiUHJv Y2VzcyByZWNvcmQ6IHJlY29yZF9hcmNoX2xpc3RfYWRkICVzLlxuIiwKKwkJ CWhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlYykpOworCisgIGlmIChyZWNv cmRfYXJjaF9saXN0X3RhaWwpCisgICAgeworICAgICAgcmVjb3JkX2FyY2hf bGlzdF90YWlsLT5uZXh0ID0gcmVjOworICAgICAgcmVjLT5wcmV2ID0gcmVj b3JkX2FyY2hfbGlzdF90YWlsOworICAgICAgcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gcmVjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlY29y ZF9hcmNoX2xpc3RfaGVhZCA9IHJlYzsKKyAgICAgIHJlY29yZF9hcmNoX2xp c3RfdGFpbCA9IHJlYzsKKyAgICB9Cit9CisKKy8qIFJldHVybiB0aGUgdmFs dWUgc3RvcmFnZSBsb2NhdGlvbiBvZiBhIHJlY29yZCBlbnRyeS4gICovCitz dGF0aWMgaW5saW5lIGdkYl9ieXRlICoKK3JlY29yZF9nZXRfbG9jIChzdHJ1 Y3QgcmVjb3JkX2VudHJ5ICpyZWMpCit7CisgIHN3aXRjaCAocmVjLT50eXBl KSB7CisgIGNhc2UgcmVjb3JkX21lbToKKyAgICBpZiAocmVjLT51Lm1lbS5s ZW4gPiBzaXplb2YgKHJlYy0+dS5tZW0udS5idWYpKQorICAgICAgcmV0dXJu IHJlYy0+dS5tZW0udS5wdHI7CisgICAgZWxzZQorICAgICAgcmV0dXJuIHJl Yy0+dS5tZW0udS5idWY7CisgIGNhc2UgcmVjb3JkX3JlZzoKKyAgICBpZiAo cmVjLT51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy0+dS5yZWcudS5idWYpKQor ICAgICAgcmV0dXJuIHJlYy0+dS5yZWcudS5wdHI7CisgICAgZWxzZQorICAg ICAgcmV0dXJuIHJlYy0+dS5yZWcudS5idWY7CisgIGNhc2UgcmVjb3JkX2Vu ZDoKKyAgZGVmYXVsdDoKKyAgICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVkICgi dW5leHBlY3RlZCByZWNvcmRfZW50cnkgdHlwZSIpOworICAgIHJldHVybiBO VUxMOworICB9Cit9CisKKy8qIFJlY29yZCB0aGUgdmFsdWUgb2YgYSByZWdp c3RlciBOVU0gdG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCisKK2ludAorcmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbnVtKQoreworICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpy ZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiBh ZGQgcmVnaXN0ZXIgbnVtID0gJWQgdG8gIgorCQkJInJlY29yZCBsaXN0Llxu IiwKKwkJCXJlZ251bSk7CisKKyAgcmVjID0gcmVjb3JkX3JlZ19hbGxvYyAo cmVnY2FjaGUsIHJlZ251bSk7CisKKyAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCByZWdudW0sIHJlY29yZF9nZXRfbG9jIChyZWMpKTsKKworICBy ZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4gMDsKK30K KworaW50CityZWNvcmRfcmVhZF9tZW1vcnkgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLAorCQkgICAgQ09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpt eWFkZHIsCisJCSAgICBzc2l6ZV90IGxlbikKK3sKKyAgaW50IHJldCA9IHRh cmdldF9yZWFkX21lbW9yeSAobWVtYWRkciwgbXlhZGRyLCBsZW4pOworCisg IGlmIChyZXQgJiYgcmVjb3JkX2RlYnVnKQorICAgIHByaW50Zl91bmZpbHRl cmVkIChfKCJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkg IgorCQkJICJhdCBhZGRyICVzIGxlbiA9ICVsZC5cbiIpLAorCQkgICAgICAg cGFkZHJlc3MgKGdkYmFyY2gsIG1lbWFkZHIpLCAobG9uZykgbGVuKTsKKyAg cmV0dXJuIHJldDsKK30KKworLyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBhIHJl Z2lvbiBvZiBtZW1vcnkgd2hvc2UgYWRkcmVzcyBpcyBBRERSIGFuZAorICAg bGVuZ3RoIGlzIExFTiB0byByZWNvcmRfYXJjaF9saXN0LiAgKi8KKworaW50 CityZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKENPUkVfQUREUiBhZGRyLCBp bnQgbGVuKQoreworICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWM7CisKKyAg aWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgbWVtIGFk ZHIgPSAlcyBsZW4gPSAlZCB0byAiCisJCQkicmVjb3JkIGxpc3QuXG4iLAor CQkJcGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCBhZGRyKSwgbGVuKTsK KworICBpZiAoIWFkZHIpCS8qIEZJWE1FOiBXaHk/ICBTb21lIGFyY2ggbXVz dCBwZXJtaXQgaXQuLi4gICovCisgICAgcmV0dXJuIDA7CisKKyAgcmVjID0g cmVjb3JkX21lbV9hbGxvYyAoYWRkciwgbGVuKTsKKworICBpZiAocmVjb3Jk X3JlYWRfbWVtb3J5ICh0YXJnZXRfZ2RiYXJjaCAoKSwgYWRkciwgcmVjb3Jk X2dldF9sb2MgKHJlYyksIGxlbikpCisgICAgeworICAgICAgcmVjb3JkX21l bV9yZWxlYXNlIChyZWMpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4gMDsK K30KKworLyogQWRkIGEgcmVjb3JkX2VuZCB0eXBlIHN0cnVjdCByZWNvcmRf ZW50cnkgdG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCisKK2ludAorcmVjb3Jk X2FyY2hfbGlzdF9hZGRfZW5kICh2b2lkKQoreworICBzdHJ1Y3QgcmVjb3Jk X2VudHJ5ICpyZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3Mg cmVjb3JkOiBhZGQgZW5kIHRvIGFyY2ggbGlzdC5cbiIpOworCisgIHJlYyA9 IHJlY29yZF9lbmRfYWxsb2MgKCk7CisgIHJlYy0+dS5lbmQuc2lndmFsID0g R0RCX1NJR05BTF8wOworICByZWMtPnUuZW5kLmluc25fbnVtID0gKytyZWNv cmRfaW5zbl9jb3VudDsKKworICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVj KTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9j aGVja19pbnNuX251bSAoaW50IHNldF90ZXJtaW5hbCkKK3sKKyAgaWYgKHJl Y29yZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAgZ2RiX2Fzc2VydCAo cmVjb3JkX2luc25fbnVtIDw9IHJlY29yZF9pbnNuX21heF9udW0pOworICAg ICAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVt KQorCXsKKwkgIC8qIEFzayB1c2VyIHdoYXQgdG8gZG8uICAqLworCSAgaWYg KHJlY29yZF9zdG9wX2F0X2xpbWl0KQorCSAgICB7CisJICAgICAgaW50IHE7 CisKKwkgICAgICBpZiAoc2V0X3Rlcm1pbmFsKQorCQl0YXJnZXRfdGVybWlu YWxfb3VycyAoKTsKKwkgICAgICBxID0geXF1ZXJ5IChfKCJEbyB5b3Ugd2Fu dCB0byBhdXRvIGRlbGV0ZSBwcmV2aW91cyBleGVjdXRpb24gIgorCQkJICAg ICJsb2cgZW50cmllcyB3aGVuIHJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29t ZXMgIgorCQkJICAgICJmdWxsIChyZWNvcmQgZnVsbC1zdG9wLWF0LWxpbWl0 KT8iKSk7CisJICAgICAgaWYgKHNldF90ZXJtaW5hbCkKKwkJdGFyZ2V0X3Rl cm1pbmFsX2luZmVyaW9yICgpOworCSAgICAgIGlmIChxKQorCQlyZWNvcmRf c3RvcF9hdF9saW1pdCA9IDA7CisJICAgICAgZWxzZQorCQllcnJvciAoXygi UHJvY2VzcyByZWNvcmQ6IHN0b3BwZWQgYnkgdXNlci4iKSk7CisJICAgIH0K Kwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2FyY2hfbGlz dF9jbGVhbnVwcyAodm9pZCAqaWdub3JlKQoreworICByZWNvcmRfbGlzdF9y ZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworfQorCisvKiBCZWZv cmUgaW5mZXJpb3Igc3RlcCAod2hlbiBHREIgcmVjb3JkIHRoZSBydW5uaW5n IG1lc3NhZ2UsIGluZmVyaW9yCisgICBvbmx5IGNhbiBzdGVwKSwgR0RCIHdp bGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlY29yZCB0aGUgdmFsdWVzIHRv CisgICByZWNvcmRfbGlzdC4gIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIGdk YmFyY2hfcHJvY2Vzc19yZWNvcmQgdG8KKyAgIHJlY29yZCB0aGUgcnVubmlu ZyBtZXNzYWdlIG9mIGluZmVyaW9yIGFuZCBzZXQgdGhlbSB0bworICAgcmVj b3JkX2FyY2hfbGlzdCwgYW5kIGFkZCBpdCB0byByZWNvcmRfbGlzdC4gICov CisKK3N0YXRpYyBpbnQKK3JlY29yZF9tZXNzYWdlIChzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQoreworICBp bnQgcmV0OworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdj YWNoZV9hcmNoIChyZWdjYWNoZSk7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRf Y2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJlY29yZF9hcmNoX2xpc3RfY2xl YW51cHMsIDApOworCisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7 CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7CisKKyAgLyogQ2hl Y2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAgcmVjb3JkX2NoZWNrX2luc25f bnVtICgxKTsKKworICAvKiBJZiBnZGIgc2VuZHMgYSBzaWduYWwgdmFsdWUg dG8gdGFyZ2V0X3Jlc3VtZSwKKyAgICAgc2F2ZSBpdCBpbiB0aGUgJ2VuZCcg ZmllbGQgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uLgorCisgICAgIE1h eWJlIHByb2Nlc3MgcmVjb3JkIHNob3VsZCByZWNvcmQgd2hhdCByZWFsbHkg aGFwcGVuZWQsCisgICAgIHJhdGhlciB0aGFuIHdoYXQgZ2RiIHByZXRlbmRz IGhhcyBoYXBwZW5lZC4KKworICAgICBTbyBpZiBMaW51eCBkZWxpdmVyZWQg dGhlIHNpZ25hbCB0byB0aGUgY2hpbGQgcHJvY2VzcyBkdXJpbmcKKyAgICAg dGhlIHJlY29yZCBtb2RlLCB3ZSB3aWxsIHJlY29yZCBpdCBhbmQgZGVsaXZl ciBpdCBhZ2FpbiBpbgorICAgICB0aGUgcmVwbGF5IG1vZGUuCisKKyAgICAg SWYgdXNlciBzYXlzICJpZ25vcmUgdGhpcyBzaWduYWwiIGR1cmluZyB0aGUg cmVjb3JkIG1vZGUsIHRoZW4KKyAgICAgaXQgd2lsbCBiZSBpZ25vcmVkIGFn YWluIGR1cmluZyB0aGUgcmVwbGF5IG1vZGUgKG5vIG1hdHRlciBpZgorICAg ICB0aGUgdXNlciBzYXlzIHNvbWV0aGluZyBkaWZmZXJlbnQsIGxpa2UgImRl bGl2ZXIgdGhpcyBzaWduYWwiCisgICAgIGR1cmluZyB0aGUgcmVwbGF5IG1v ZGUpLgorCisgICAgIFVzZXIgc2hvdWxkIHVuZGVyc3RhbmQgdGhhdCBub3Ro aW5nIGhlIGRvZXMgZHVyaW5nIHRoZSByZXBsYXkKKyAgICAgbW9kZSB3aWxs IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGNoaWxkLiAgSWYgaGUgdHJp ZXMsCisgICAgIHRoZW4gdGhhdCBpcyBhIHVzZXIgZXJyb3IuCisKKyAgICAg QnV0IHdlIHNob3VsZCBzdGlsbCBkZWxpdmVyIHRoZSBzaWduYWwgdG8gZ2Ri IGR1cmluZyB0aGUgcmVwbGF5LAorICAgICBpZiB3ZSBkZWxpdmVyZWQgaXQg ZHVyaW5nIHRoZSByZWNvcmRpbmcuICBUaGVyZWZvcmUgd2Ugc2hvdWxkCisg ICAgIHJlY29yZCB0aGUgc2lnbmFsIGR1cmluZyByZWNvcmRfd2FpdCwgbm90 IHJlY29yZF9yZXN1bWUuICAqLworICBpZiAocmVjb3JkX2xpc3QgIT0gJnJl Y29yZF9maXJzdCkgICAgLyogRklYTUUgYmV0dGVyIHdheSB0byBjaGVjayAq LworICAgIHsKKyAgICAgIGdkYl9hc3NlcnQgKHJlY29yZF9saXN0LT50eXBl ID09IHJlY29yZF9lbmQpOworICAgICAgcmVjb3JkX2xpc3QtPnUuZW5kLnNp Z3ZhbCA9IHNpZ25hbDsKKyAgICB9CisKKyAgaWYgKHNpZ25hbCA9PSBHREJf U0lHTkFMXzAKKyAgICAgIHx8ICFnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkX3Np Z25hbF9wIChnZGJhcmNoKSkKKyAgICByZXQgPSBnZGJhcmNoX3Byb2Nlc3Nf cmVjb3JkIChnZGJhcmNoLAorCQkJCSAgcmVnY2FjaGUsCisJCQkJICByZWdj YWNoZV9yZWFkX3BjIChyZWdjYWNoZSkpOworICBlbHNlCisgICAgcmV0ID0g Z2RiYXJjaF9wcm9jZXNzX3JlY29yZF9zaWduYWwgKGdkYmFyY2gsCisJCQkJ CSByZWdjYWNoZSwKKwkJCQkJIHNpZ25hbCk7CisKKyAgaWYgKHJldCA+IDAp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBpbmZlcmlvciBwcm9n cmFtIHN0b3BwZWQuIikpOworICBpZiAocmV0IDwgMCkKKyAgICBlcnJvciAo XygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9u IGxvZy4iKSk7CisKKyAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBz KTsKKworICByZWNvcmRfbGlzdC0+bmV4dCA9IHJlY29yZF9hcmNoX2xpc3Rf aGVhZDsKKyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3Jk X2xpc3Q7CisgIHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWls OworCisgIGlmIChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3JkX2luc25fbWF4 X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHJlY29yZF9saXN0 X3JlbGVhc2VfZmlyc3QgKCk7CisgIGVsc2UKKyAgICByZWNvcmRfaW5zbl9u dW0rKzsKKworICByZXR1cm4gMTsKK30KKworc3RydWN0IHJlY29yZF9tZXNz YWdlX2FyZ3MgeworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworICBl bnVtIGdkYl9zaWduYWwgc2lnbmFsOworfTsKKworc3RhdGljIGludAorcmVj b3JkX21lc3NhZ2Vfd3JhcHBlciAodm9pZCAqYXJncykKK3sKKyAgc3RydWN0 IHJlY29yZF9tZXNzYWdlX2FyZ3MgKnJlY29yZF9hcmdzID0gYXJnczsKKwor ICByZXR1cm4gcmVjb3JkX21lc3NhZ2UgKHJlY29yZF9hcmdzLT5yZWdjYWNo ZSwgcmVjb3JkX2FyZ3MtPnNpZ25hbCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jl Y29yZF9tZXNzYWdlX3dyYXBwZXJfc2FmZSAoc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBn ZGJfc2lnbmFsIHNpZ25hbCkKK3sKKyAgc3RydWN0IHJlY29yZF9tZXNzYWdl X2FyZ3MgYXJnczsKKworICBhcmdzLnJlZ2NhY2hlID0gcmVnY2FjaGU7Cisg IGFyZ3Muc2lnbmFsID0gc2lnbmFsOworCisgIHJldHVybiBjYXRjaF9lcnJv cnMgKHJlY29yZF9tZXNzYWdlX3dyYXBwZXIsICZhcmdzLCBOVUxMLCBSRVRV Uk5fTUFTS19BTEwpOworfQorCisvKiBTZXQgdG8gMSBpZiByZWNvcmRfc3Rv cmVfcmVnaXN0ZXJzIGFuZCByZWNvcmRfeGZlcl9wYXJ0aWFsCisgICBkb2Vz bid0IG5lZWQgcmVjb3JkLiAgKi8KKworc3RhdGljIGludCByZWNvcmRfZ2Ri X29wZXJhdGlvbl9kaXNhYmxlID0gMDsKKworc3RydWN0IGNsZWFudXAgKgor cmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKHZvaWQpCit7Cisg IHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHMgPSBOVUxMOworCisgIG9s ZF9jbGVhbnVwcyA9CisgICAgbWFrZV9jbGVhbnVwX3Jlc3RvcmVfaW50ZWdl ciAoJnJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUpOworICByZWNvcmRf Z2RiX29wZXJhdGlvbl9kaXNhYmxlID0gMTsKKworICByZXR1cm4gb2xkX2Ns ZWFudXBzOworfQorCisvKiBGbGFnIHNldCB0byBUUlVFIGZvciB0YXJnZXRf c3RvcHBlZF9ieV93YXRjaHBvaW50LiAgKi8KK3N0YXRpYyBpbnQgcmVjb3Jk X2h3X3dhdGNocG9pbnQgPSAwOworCisvKiBFeGVjdXRlIG9uZSBpbnN0cnVj dGlvbiBmcm9tIHRoZSByZWNvcmQgbG9nLiAgRWFjaCBpbnN0cnVjdGlvbiBp bgorICAgdGhlIGxvZyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5IGFuIGFyYml0 cmFyeSBzZXF1ZW5jZSBvZiByZWdpc3RlcgorICAgZW50cmllcyBhbmQgbWVt b3J5IGVudHJpZXMsIGZvbGxvd2VkIGJ5IGFuICdlbmQnIGVudHJ5LiAgKi8K Kworc3RhdGljIGlubGluZSB2b2lkCityZWNvcmRfZXhlY19pbnNuIChzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCwKKwkJICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICplbnRyeSkKK3sKKyAgc3dp dGNoIChlbnRyeS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSByZWNvcmRfcmVn OiAvKiByZWcgKi8KKyAgICAgIHsKKyAgICAgICAgZ2RiX2J5dGUgcmVnW01B WF9SRUdJU1RFUl9TSVpFXTsKKworICAgICAgICBpZiAocmVjb3JkX2RlYnVn ID4gMSkKKyAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyBy ZWNvcmQ6IHJlY29yZF9yZWcgJXMgdG8gIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImluZmVyaW9yIG51bSA9ICVkLlxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcg KGVudHJ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5 LT51LnJlZy5udW0pOworCisgICAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFk IChyZWdjYWNoZSwgZW50cnktPnUucmVnLm51bSwgcmVnKTsKKyAgICAgICAg cmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgZW50cnktPnUucmVn Lm51bSwgCisJCQkgICAgICAgcmVjb3JkX2dldF9sb2MgKGVudHJ5KSk7Cisg ICAgICAgIG1lbWNweSAocmVjb3JkX2dldF9sb2MgKGVudHJ5KSwgcmVnLCBl bnRyeS0+dS5yZWcubGVuKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisg ICAgY2FzZSByZWNvcmRfbWVtOiAvKiBtZW0gKi8KKyAgICAgIHsKKwkvKiBO b3RoaW5nIHRvIGRvIGlmIHRoZSBlbnRyeSBpcyBmbGFnZ2VkIG5vdF9hY2Nl c3NpYmxlLiAgKi8KKyAgICAgICAgaWYgKCFlbnRyeS0+dS5tZW0ubWVtX2Vu dHJ5X25vdF9hY2Nlc3NpYmxlKQorICAgICAgICAgIHsKKyAgICAgICAgICAg IGdkYl9ieXRlICptZW0gPSBhbGxvY2EgKGVudHJ5LT51Lm1lbS5sZW4pOwor CisgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKyAgICAgICAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIHJlY29yZDog cmVjb3JkX21lbSAlcyB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImluZmVyaW9yIGFkZHIgPSAlcyBsZW4gPSAlZC5cbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9hZGRyZXNz X3RvX3N0cmluZyAoZW50cnkpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBlbnRyeS0+dS5tZW0uYWRk ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkt PnUubWVtLmxlbik7CisKKyAgICAgICAgICAgIGlmIChyZWNvcmRfcmVhZF9t ZW1vcnkgKGdkYmFyY2gsCisJCQkJICAgIGVudHJ5LT51Lm1lbS5hZGRyLCBt ZW0sIGVudHJ5LT51Lm1lbS5sZW4pKQorCSAgICAgIGVudHJ5LT51Lm1lbS5t ZW1fZW50cnlfbm90X2FjY2Vzc2libGUgPSAxOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdl dF93cml0ZV9tZW1vcnkgKGVudHJ5LT51Lm1lbS5hZGRyLCAKKwkJCQkJIHJl Y29yZF9nZXRfbG9jIChlbnRyeSksCisJCQkJCSBlbnRyeS0+dS5tZW0ubGVu KSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ZW50cnktPnUubWVtLm1lbV9lbnRyeV9ub3RfYWNjZXNzaWJsZSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAg ICAgICAgICAgICAgICAgd2FybmluZyAoXygiUHJvY2VzcyByZWNvcmQ6IGVy cm9yIHdyaXRpbmcgbWVtb3J5IGF0ICIKKwkJCQkgImFkZHIgPSAlcyBsZW4g PSAlZC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRk cmVzcyAoZ2RiYXJjaCwgZW50cnktPnUubWVtLmFkZHIpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT51Lm1lbS5sZW4pOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKwkJICB7 CisJCSAgICBtZW1jcHkgKHJlY29yZF9nZXRfbG9jIChlbnRyeSksIG1lbSwg ZW50cnktPnUubWVtLmxlbik7CisKKwkJICAgIC8qIFdlJ3ZlIGNoYW5nZWQg bWVtb3J5IC0tLSBjaGVjayBpZiBhIGhhcmR3YXJlCisJCSAgICAgICB3YXRj aHBvaW50IHNob3VsZCB0cmFwLiAgTm90ZSB0aGF0IHRoaXMKKwkJICAgICAg IHByZXNlbnRseSBhc3N1bWVzIHRoZSB0YXJnZXQgYmVuZWF0aCBzdXBwb3J0 cworCQkgICAgICAgY29udGludWFibGUgd2F0Y2hwb2ludHMuICBPbiBub24t Y29udGludWFibGUKKwkJICAgICAgIHdhdGNocG9pbnRzIHRhcmdldCwgd2Un bGwgd2FudCB0byBjaGVjayB0aGlzCisJCSAgICAgICBfYmVmb3JlXyBhY3R1 YWxseSBkb2luZyB0aGUgbWVtb3J5IGNoYW5nZSwgYW5kCisJCSAgICAgICBu b3QgZG9pbmcgdGhlIGNoYW5nZSBhdCBhbGwgaWYgdGhlIHdhdGNocG9pbnQK KwkJICAgICAgIHRyYXBzLiAgKi8KKwkJICAgIGlmIChoYXJkd2FyZV93YXRj aHBvaW50X2luc2VydGVkX2luX3JhbmdlCisJCQkoZ2V0X3JlZ2NhY2hlX2Fz cGFjZSAocmVnY2FjaGUpLAorCQkJIGVudHJ5LT51Lm1lbS5hZGRyLCBlbnRy eS0+dS5tZW0ubGVuKSkKKwkJICAgICAgcmVjb3JkX2h3X3dhdGNocG9pbnQg PSAxOworCQkgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHN0cnVj dCB0YXJnZXRfb3BzICp0bXBfdG9fcmVzdW1lX29wczsKK3N0YXRpYyB2b2lk ICgqdG1wX3RvX3Jlc3VtZSkgKHN0cnVjdCB0YXJnZXRfb3BzICosIHB0aWRf dCwgaW50LAorCQkJICAgICAgZW51bSBnZGJfc2lnbmFsKTsKK3N0YXRpYyBz dHJ1Y3QgdGFyZ2V0X29wcyAqdG1wX3RvX3dhaXRfb3BzOworc3RhdGljIHB0 aWRfdCAoKnRtcF90b193YWl0KSAoc3RydWN0IHRhcmdldF9vcHMgKiwgcHRp ZF90LAorCQkJICAgICAgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICosCisJ CQkgICAgICBpbnQpOworc3RhdGljIHN0cnVjdCB0YXJnZXRfb3BzICp0bXBf dG9fc3RvcmVfcmVnaXN0ZXJzX29wczsKK3N0YXRpYyB2b2lkICgqdG1wX3Rv X3N0b3JlX3JlZ2lzdGVycykgKHN0cnVjdCB0YXJnZXRfb3BzICosCisJCQkJ ICAgICAgIHN0cnVjdCByZWdjYWNoZSAqLAorCQkJCSAgICAgICBpbnQgcmVn bm8pOworc3RhdGljIHN0cnVjdCB0YXJnZXRfb3BzICp0bXBfdG9feGZlcl9w YXJ0aWFsX29wczsKK3N0YXRpYyBMT05HRVNUICgqdG1wX3RvX3hmZXJfcGFy dGlhbCkgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCisJCQkJICAgICAgIGVu dW0gdGFyZ2V0X29iamVjdCBvYmplY3QsCisJCQkJICAgICAgIGNvbnN0IGNo YXIgKmFubmV4LAorCQkJCSAgICAgICBnZGJfYnl0ZSAqcmVhZGJ1ZiwKKwkJ CQkgICAgICAgY29uc3QgZ2RiX2J5dGUgKndyaXRlYnVmLAorCQkJCSAgICAg ICBVTE9OR0VTVCBvZmZzZXQsCisJCQkJICAgICAgIExPTkdFU1QgbGVuKTsK K3N0YXRpYyBpbnQgKCp0bXBfdG9faW5zZXJ0X2JyZWFrcG9pbnQpIChzdHJ1 Y3QgZ2RiYXJjaCAqLAorCQkJCQlzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKik7 CitzdGF0aWMgaW50ICgqdG1wX3RvX3JlbW92ZV9icmVha3BvaW50KSAoc3Ry dWN0IGdkYmFyY2ggKiwKKwkJCQkJc3RydWN0IGJwX3RhcmdldF9pbmZvICop Oworc3RhdGljIGludCAoKnRtcF90b19zdG9wcGVkX2J5X3dhdGNocG9pbnQp ICh2b2lkKTsKK3N0YXRpYyBpbnQgKCp0bXBfdG9fc3RvcHBlZF9kYXRhX2Fk ZHJlc3MpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqLCBDT1JFX0FERFIgKik7Citz dGF0aWMgaW50ICgqdG1wX3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNzKSAoc3Ry dWN0IHRhcmdldF9vcHMgKiwgQ09SRV9BRERSICopOworc3RhdGljIHZvaWQg KCp0bXBfdG9fYXN5bmMpICh2b2lkICgqKSAoZW51bSBpbmZlcmlvcl9ldmVu dF90eXBlLCB2b2lkICopLCB2b2lkICopOworCitzdGF0aWMgdm9pZCByZWNv cmRfc2F2ZSAoY2hhciAqLCBpbnQpOworc3RhdGljIHZvaWQgcmVjb3JkX3Jl c3RvcmUgKHZvaWQpOworCisvKiBBc3luY2hyb25vdXMgc2lnbmFsIGhhbmRs ZSByZWdpc3RlcmVkIGFzIGV2ZW50IGxvb3Agc291cmNlIGZvciB3aGVuCisg ICB3ZSBoYXZlIHBlbmRpbmcgZXZlbnRzIHJlYWR5IHRvIGJlIHBhc3NlZCB0 byB0aGUgY29yZS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgYXN5bmNfZXZlbnRf aGFuZGxlciAqcmVjb3JkX2FzeW5jX2luZmVyaW9yX2V2ZW50X3Rva2VuOwor CitzdGF0aWMgdm9pZAorcmVjb3JkX2FzeW5jX2luZmVyaW9yX2V2ZW50X2hh bmRsZXIgKGdkYl9jbGllbnRfZGF0YSBkYXRhKQoreworICBpbmZlcmlvcl9l dmVudF9oYW5kbGVyIChJTkZfUkVHX0VWRU5ULCBOVUxMKTsKK30KKworLyog T3BlbiB0aGUgcHJvY2VzcyByZWNvcmQgdGFyZ2V0LiAgKi8KKworc3RhdGlj IHZvaWQKK3JlY29yZF9jb3JlX29wZW5fMSAoY2hhciAqbmFtZSwgaW50IGZy b21fdHR5KQoreworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0 X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisgIGludCByZWdudW0gPSBnZGJhcmNo X251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsKKyAg aW50IGk7CisKKyAgLyogR2V0IHJlY29yZF9jb3JlX3JlZ2J1Zi4gICovCisg IHRhcmdldF9mZXRjaF9yZWdpc3RlcnMgKHJlZ2NhY2hlLCAtMSk7CisgIHJl Y29yZF9jb3JlX3JlZ2J1ZiA9IHhtYWxsb2MgKE1BWF9SRUdJU1RFUl9TSVpF ICogcmVnbnVtKTsKKyAgZm9yIChpID0gMDsgaSA8IHJlZ251bTsgaSArKykK KyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGksCisJCQkg IHJlY29yZF9jb3JlX3JlZ2J1ZiArIE1BWF9SRUdJU1RFUl9TSVpFICogaSk7 CisKKyAgLyogR2V0IHJlY29yZF9jb3JlX3N0YXJ0IGFuZCByZWNvcmRfY29y ZV9lbmQuICAqLworICBpZiAoYnVpbGRfc2VjdGlvbl90YWJsZSAoY29yZV9i ZmQsICZyZWNvcmRfY29yZV9zdGFydCwgJnJlY29yZF9jb3JlX2VuZCkpCisg ICAgeworICAgICAgeGZyZWUgKHJlY29yZF9jb3JlX3JlZ2J1Zik7CisgICAg ICByZWNvcmRfY29yZV9yZWdidWYgPSBOVUxMOworICAgICAgZXJyb3IgKF8o IlwiJXNcIjogQ2FuJ3QgZmluZCBzZWN0aW9uczogJXMiKSwKKwkgICAgIGJm ZF9nZXRfZmlsZW5hbWUgKGNvcmVfYmZkKSwgYmZkX2Vycm1zZyAoYmZkX2dl dF9lcnJvciAoKSkpOworICAgIH0KKworICBwdXNoX3RhcmdldCAoJnJlY29y ZF9jb3JlX29wcyk7CisgIHJlY29yZF9yZXN0b3JlICgpOworfQorCisvKiAi dG9fb3BlbiIgdGFyZ2V0IG1ldGhvZCBmb3IgJ2xpdmUnIHByb2Nlc3Nlcy4g ICovCisKK3N0YXRpYyB2b2lkCityZWNvcmRfb3Blbl8xIChjaGFyICpuYW1l LCBpbnQgZnJvbV90dHkpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNv cmQ6IHJlY29yZF9vcGVuXG4iKTsKKworICAvKiBjaGVjayBleGVjICovCisg IGlmICghdGFyZ2V0X2hhc19leGVjdXRpb24pCisgICAgZXJyb3IgKF8oIlBy b2Nlc3MgcmVjb3JkOiB0aGUgcHJvZ3JhbSBpcyBub3QgYmVpbmcgcnVuLiIp KTsKKyAgaWYgKG5vbl9zdG9wKQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJl Y29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgaW5mZXJpb3IgaW4gbm9uLXN0b3Ag bW9kZSAiCisJICAgICAiKG5vbi1zdG9wKS4iKSk7CisKKyAgaWYgKCFnZGJh cmNoX3Byb2Nlc3NfcmVjb3JkX3AgKHRhcmdldF9nZGJhcmNoICgpKSkKKyAg ICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IHRoZSBjdXJyZW50IGFyY2hp dGVjdHVyZSBkb2Vzbid0IHN1cHBvcnQgIgorCSAgICAgInJlY29yZCBmdW5j dGlvbi4iKSk7CisKKyAgaWYgKCF0bXBfdG9fcmVzdW1lKQorICAgIGVycm9y IChfKCJDb3VsZCBub3QgZmluZCAndG9fcmVzdW1lJyBtZXRob2Qgb24gdGhl IHRhcmdldCBzdGFjay4iKSk7CisgIGlmICghdG1wX3RvX3dhaXQpCisgICAg ZXJyb3IgKF8oIkNvdWxkIG5vdCBmaW5kICd0b193YWl0JyBtZXRob2Qgb24g dGhlIHRhcmdldCBzdGFjay4iKSk7CisgIGlmICghdG1wX3RvX3N0b3JlX3Jl Z2lzdGVycykKKyAgICBlcnJvciAoXygiQ291bGQgbm90IGZpbmQgJ3RvX3N0 b3JlX3JlZ2lzdGVycycgIgorCSAgICAgIm1ldGhvZCBvbiB0aGUgdGFyZ2V0 IHN0YWNrLiIpKTsKKyAgaWYgKCF0bXBfdG9faW5zZXJ0X2JyZWFrcG9pbnQp CisgICAgZXJyb3IgKF8oIkNvdWxkIG5vdCBmaW5kICd0b19pbnNlcnRfYnJl YWtwb2ludCcgIgorCSAgICAgIm1ldGhvZCBvbiB0aGUgdGFyZ2V0IHN0YWNr LiIpKTsKKyAgaWYgKCF0bXBfdG9fcmVtb3ZlX2JyZWFrcG9pbnQpCisgICAg ZXJyb3IgKF8oIkNvdWxkIG5vdCBmaW5kICd0b19yZW1vdmVfYnJlYWtwb2lu dCcgIgorCSAgICAgIm1ldGhvZCBvbiB0aGUgdGFyZ2V0IHN0YWNrLiIpKTsK KyAgaWYgKCF0bXBfdG9fc3RvcHBlZF9ieV93YXRjaHBvaW50KQorICAgIGVy cm9yIChfKCJDb3VsZCBub3QgZmluZCAndG9fc3RvcHBlZF9ieV93YXRjaHBv aW50JyAiCisJICAgICAibWV0aG9kIG9uIHRoZSB0YXJnZXQgc3RhY2suIikp OworICBpZiAoIXRtcF90b19zdG9wcGVkX2RhdGFfYWRkcmVzcykKKyAgICBl cnJvciAoXygiQ291bGQgbm90IGZpbmQgJ3RvX3N0b3BwZWRfZGF0YV9hZGRy ZXNzJyAiCisJICAgICAibWV0aG9kIG9uIHRoZSB0YXJnZXQgc3RhY2suIikp OworCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7Cit9CisKK3N0YXRp YyB2b2lkIHJlY29yZF9pbml0X3JlY29yZF9icmVha3BvaW50cyAodm9pZCk7 CisKKy8qICJ0b19vcGVuIiB0YXJnZXQgbWV0aG9kLiAgT3BlbiB0aGUgcHJv Y2VzcyByZWNvcmQgdGFyZ2V0LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29y ZF9vcGVuIChjaGFyICpuYW1lLCBpbnQgZnJvbV90dHkpCit7CisgIHN0cnVj dCB0YXJnZXRfb3BzICp0OworCisgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNv cmQ6IHJlY29yZF9vcGVuXG4iKTsKKworICAvKiBDaGVjayBpZiByZWNvcmQg dGFyZ2V0IGlzIGFscmVhZHkgcnVubmluZy4gICovCisgIGlmIChjdXJyZW50 X3RhcmdldC50b19zdHJhdHVtID09IHJlY29yZF9zdHJhdHVtKQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgYWxyZWFkeSBydW5uaW5n LiAgVXNlIFwicmVjb3JkIHN0b3BcIiB0byAiCisgICAgICAgICAgICAgInN0 b3AgcmVjb3JkIHRhcmdldCBmaXJzdC4iKSk7CisKKyAgLyogUmVzZXQgdGhl IHRtcCBiZW5lYXRoIHBvaW50ZXJzLiAgKi8KKyAgdG1wX3RvX3Jlc3VtZV9v cHMgPSBOVUxMOworICB0bXBfdG9fcmVzdW1lID0gTlVMTDsKKyAgdG1wX3Rv X3dhaXRfb3BzID0gTlVMTDsKKyAgdG1wX3RvX3dhaXQgPSBOVUxMOworICB0 bXBfdG9fc3RvcmVfcmVnaXN0ZXJzX29wcyA9IE5VTEw7CisgIHRtcF90b19z dG9yZV9yZWdpc3RlcnMgPSBOVUxMOworICB0bXBfdG9feGZlcl9wYXJ0aWFs X29wcyA9IE5VTEw7CisgIHRtcF90b194ZmVyX3BhcnRpYWwgPSBOVUxMOwor ICB0bXBfdG9faW5zZXJ0X2JyZWFrcG9pbnQgPSBOVUxMOworICB0bXBfdG9f cmVtb3ZlX2JyZWFrcG9pbnQgPSBOVUxMOworICB0bXBfdG9fc3RvcHBlZF9i eV93YXRjaHBvaW50ID0gTlVMTDsKKyAgdG1wX3RvX3N0b3BwZWRfZGF0YV9h ZGRyZXNzID0gTlVMTDsKKyAgdG1wX3RvX2FzeW5jID0gTlVMTDsKKworICAv KiBTZXQgdGhlIGJlbmVhdGggZnVuY3Rpb24gcG9pbnRlcnMuICAqLworICBm b3IgKHQgPSBjdXJyZW50X3RhcmdldC5iZW5lYXRoOyB0ICE9IE5VTEw7IHQg PSB0LT5iZW5lYXRoKQorICAgIHsKKyAgICAgIGlmICghdG1wX3RvX3Jlc3Vt ZSkKKyAgICAgICAgeworCSAgdG1wX3RvX3Jlc3VtZSA9IHQtPnRvX3Jlc3Vt ZTsKKwkgIHRtcF90b19yZXN1bWVfb3BzID0gdDsKKyAgICAgICAgfQorICAg ICAgaWYgKCF0bXBfdG9fd2FpdCkKKyAgICAgICAgeworCSAgdG1wX3RvX3dh aXQgPSB0LT50b193YWl0OworCSAgdG1wX3RvX3dhaXRfb3BzID0gdDsKKyAg ICAgICAgfQorICAgICAgaWYgKCF0bXBfdG9fc3RvcmVfcmVnaXN0ZXJzKQor ICAgICAgICB7CisJICB0bXBfdG9fc3RvcmVfcmVnaXN0ZXJzID0gdC0+dG9f c3RvcmVfcmVnaXN0ZXJzOworCSAgdG1wX3RvX3N0b3JlX3JlZ2lzdGVyc19v cHMgPSB0OworICAgICAgICB9CisgICAgICBpZiAoIXRtcF90b194ZmVyX3Bh cnRpYWwpCisgICAgICAgIHsKKwkgIHRtcF90b194ZmVyX3BhcnRpYWwgPSB0 LT50b194ZmVyX3BhcnRpYWw7CisJICB0bXBfdG9feGZlcl9wYXJ0aWFsX29w cyA9IHQ7CisgICAgICAgIH0KKyAgICAgIGlmICghdG1wX3RvX2luc2VydF9i cmVha3BvaW50KQorCXRtcF90b19pbnNlcnRfYnJlYWtwb2ludCA9IHQtPnRv X2luc2VydF9icmVha3BvaW50OworICAgICAgaWYgKCF0bXBfdG9fcmVtb3Zl X2JyZWFrcG9pbnQpCisJdG1wX3RvX3JlbW92ZV9icmVha3BvaW50ID0gdC0+ dG9fcmVtb3ZlX2JyZWFrcG9pbnQ7CisgICAgICBpZiAoIXRtcF90b19zdG9w cGVkX2J5X3dhdGNocG9pbnQpCisJdG1wX3RvX3N0b3BwZWRfYnlfd2F0Y2hw b2ludCA9IHQtPnRvX3N0b3BwZWRfYnlfd2F0Y2hwb2ludDsKKyAgICAgIGlm ICghdG1wX3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNzKQorCXRtcF90b19zdG9w cGVkX2RhdGFfYWRkcmVzcyA9IHQtPnRvX3N0b3BwZWRfZGF0YV9hZGRyZXNz OworICAgICAgaWYgKCF0bXBfdG9fYXN5bmMpCisJdG1wX3RvX2FzeW5jID0g dC0+dG9fYXN5bmM7CisgICAgfQorICBpZiAoIXRtcF90b194ZmVyX3BhcnRp YWwpCisgICAgZXJyb3IgKF8oIkNvdWxkIG5vdCBmaW5kICd0b194ZmVyX3Bh cnRpYWwnIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHN0YWNrLiIpKTsKKworICAv KiBSZXNldCAqLworICByZWNvcmRfaW5zbl9udW0gPSAwOworICByZWNvcmRf aW5zbl9jb3VudCA9IDA7CisgIHJlY29yZF9saXN0ID0gJnJlY29yZF9maXJz dDsKKyAgcmVjb3JkX2xpc3QtPm5leHQgPSBOVUxMOworCisgIC8qIFNldCB0 aGUgdG1wIGJlbmVhdGggcG9pbnRlcnMgdG8gYmVuZWF0aCBwb2ludGVycy4g ICovCisgIHJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZV9vcHMgPSB0bXBfdG9f cmVzdW1lX29wczsKKyAgcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lID0gdG1w X3RvX3Jlc3VtZTsKKyAgcmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMgPSB0 bXBfdG9fd2FpdF9vcHM7CisgIHJlY29yZF9iZW5lYXRoX3RvX3dhaXQgPSB0 bXBfdG9fd2FpdDsKKyAgcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0 ZXJzX29wcyA9IHRtcF90b19zdG9yZV9yZWdpc3RlcnNfb3BzOworICByZWNv cmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMgPSB0bXBfdG9fc3RvcmVf cmVnaXN0ZXJzOworICByZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWxf b3BzID0gdG1wX3RvX3hmZXJfcGFydGlhbF9vcHM7CisgIHJlY29yZF9iZW5l YXRoX3RvX3hmZXJfcGFydGlhbCA9IHRtcF90b194ZmVyX3BhcnRpYWw7Cisg IHJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50ID0gdG1wX3Rv X2luc2VydF9icmVha3BvaW50OworICByZWNvcmRfYmVuZWF0aF90b19yZW1v dmVfYnJlYWtwb2ludCA9IHRtcF90b19yZW1vdmVfYnJlYWtwb2ludDsKKyAg cmVjb3JkX2JlbmVhdGhfdG9fc3RvcHBlZF9ieV93YXRjaHBvaW50ID0gdG1w X3RvX3N0b3BwZWRfYnlfd2F0Y2hwb2ludDsKKyAgcmVjb3JkX2JlbmVhdGhf dG9fc3RvcHBlZF9kYXRhX2FkZHJlc3MgPSB0bXBfdG9fc3RvcHBlZF9kYXRh X2FkZHJlc3M7CisgIHJlY29yZF9iZW5lYXRoX3RvX2FzeW5jID0gdG1wX3Rv X2FzeW5jOworCisgIGlmIChjb3JlX2JmZCkKKyAgICByZWNvcmRfY29yZV9v cGVuXzEgKG5hbWUsIGZyb21fdHR5KTsKKyAgZWxzZQorICAgIHJlY29yZF9v cGVuXzEgKG5hbWUsIGZyb21fdHR5KTsKKworICAvKiBSZWdpc3RlciBleHRy YSBldmVudCBzb3VyY2VzIGluIHRoZSBldmVudCBsb29wLiAgKi8KKyAgcmVj b3JkX2FzeW5jX2luZmVyaW9yX2V2ZW50X3Rva2VuCisgICAgPSBjcmVhdGVf YXN5bmNfZXZlbnRfaGFuZGxlciAocmVjb3JkX2FzeW5jX2luZmVyaW9yX2V2 ZW50X2hhbmRsZXIsCisJCQkJICBOVUxMKTsKKworICByZWNvcmRfaW5pdF9y ZWNvcmRfYnJlYWtwb2ludHMgKCk7CisKKyAgb2JzZXJ2ZXJfbm90aWZ5X3Jl Y29yZF9jaGFuZ2VkIChjdXJyZW50X2luZmVyaW9yICgpLCAgMSk7Cit9CisK Ky8qICJ0b19jbG9zZSIgdGFyZ2V0IG1ldGhvZC4gIENsb3NlIHRoZSBwcm9j ZXNzIHJlY29yZCB0YXJnZXQuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3Jk X2Nsb3NlIChpbnQgcXVpdHRpbmcpCit7CisgIHN0cnVjdCByZWNvcmRfY29y ZV9idWZfZW50cnkgKmVudHJ5OworCisgIGlmIChyZWNvcmRfZGVidWcpCisg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyBy ZWNvcmQ6IHJlY29yZF9jbG9zZVxuIik7CisKKyAgcmVjb3JkX2xpc3RfcmVs ZWFzZSAocmVjb3JkX2xpc3QpOworCisgIC8qIFJlbGVhc2UgcmVjb3JkX2Nv cmVfcmVnYnVmLiAgKi8KKyAgaWYgKHJlY29yZF9jb3JlX3JlZ2J1ZikKKyAg ICB7CisgICAgICB4ZnJlZSAocmVjb3JkX2NvcmVfcmVnYnVmKTsKKyAgICAg IHJlY29yZF9jb3JlX3JlZ2J1ZiA9IE5VTEw7CisgICAgfQorCisgIC8qIFJl bGVhc2UgcmVjb3JkX2NvcmVfYnVmX2xpc3QuICAqLworICBpZiAocmVjb3Jk X2NvcmVfYnVmX2xpc3QpCisgICAgeworICAgICAgZm9yIChlbnRyeSA9IHJl Y29yZF9jb3JlX2J1Zl9saXN0LT5wcmV2OyBlbnRyeTsgZW50cnkgPSBlbnRy eS0+cHJldikKKwl7CisJICB4ZnJlZSAocmVjb3JkX2NvcmVfYnVmX2xpc3Qp OworCSAgcmVjb3JkX2NvcmVfYnVmX2xpc3QgPSBlbnRyeTsKKwl9CisgICAg ICByZWNvcmRfY29yZV9idWZfbGlzdCA9IE5VTEw7CisgICAgfQorCisgIGlm IChyZWNvcmRfYXN5bmNfaW5mZXJpb3JfZXZlbnRfdG9rZW4pCisgICAgZGVs ZXRlX2FzeW5jX2V2ZW50X2hhbmRsZXIgKCZyZWNvcmRfYXN5bmNfaW5mZXJp b3JfZXZlbnRfdG9rZW4pOworfQorCitzdGF0aWMgaW50IHJlY29yZF9yZXN1 bWVfc3RlcCA9IDA7CisKKy8qIFRydWUgaWYgd2UndmUgYmVlbiByZXN1bWVk LCBhbmQgc28gZWFjaCByZWNvcmRfd2FpdCBjYWxsIHNob3VsZAorICAgYWR2 YW5jZSBleGVjdXRpb24uICBJZiB0aGlzIGlzIGZhbHNlLCByZWNvcmRfd2Fp dCB3aWxsIHJldHVybiBhCisgICBUQVJHRVRfV0FJVEtJTkRfSUdOT1JFLiAg Ki8KK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3VtZWQgPSAwOworCisvKiBUaGUg ZXhlY3V0aW9uIGRpcmVjdGlvbiBvZiB0aGUgbGFzdCByZXN1bWUgd2UgZ290 LiAgVGhpcyBpcworICAgbmVjZXNzYXJ5IGZvciBhc3luYyBtb2RlLiAgVmlz IChvcmRlciBpcyBub3Qgc3RyaWN0bHkgYWNjdXJhdGUpOgorCisgICAxLiB1 c2VyIGhhcyB0aGUgZ2xvYmFsIGV4ZWN1dGlvbiBkaXJlY3Rpb24gc2V0IHRv IGZvcndhcmQKKyAgIDIuIHVzZXIgZG9lcyBhIHJldmVyc2Utc3RlcCBjb21t YW5kCisgICAzLiByZWNvcmRfcmVzdW1lIGlzIGNhbGxlZCB3aXRoIGdsb2Jh bCBleGVjdXRpb24gZGlyZWN0aW9uCisgICAgICB0ZW1wb3JhcmlseSBzd2l0 Y2hlZCB0byByZXZlcnNlCisgICA0LiBHREIncyBleGVjdXRpb24gZGlyZWN0 aW9uIGlzIHJldmVydGVkIGJhY2sgdG8gZm9yd2FyZAorICAgNS4gdGFyZ2V0 IHJlY29yZCBub3RpZmllcyBldmVudCBsb29wIHRoZXJlJ3MgYW4gZXZlbnQg dG8gaGFuZGxlCisgICA2LiBpbmZydW4gYXNrcyB0aGUgdGFyZ2V0IHdoaWNo IGRpcmVjdGlvbiB3YXMgaXQgZ29pbmcsIGFuZCBzd2l0Y2hlcworICAgICAg dGhlIGdsb2JhbCBleGVjdXRpb24gZGlyZWN0aW9uIGFjY29yZGluZ2x5ICh0 byByZXZlcnNlKQorICAgNy4gaW5mcnVuIHBvbGxzIGFuIGV2ZW50IG91dCBv ZiB0aGUgcmVjb3JkIHRhcmdldCwgYW5kIGhhbmRsZXMgaXQKKyAgIDguIEdE QiBnb2VzIGJhY2sgdG8gdGhlIGV2ZW50IGxvb3AsIGFuZCBnb3RvICM0Lgor Ki8KK3N0YXRpYyBlbnVtIGV4ZWNfZGlyZWN0aW9uX2tpbmQgcmVjb3JkX2V4 ZWN1dGlvbl9kaXIgPSBFWEVDX0ZPUldBUkQ7CisKKy8qICJ0b19yZXN1bWUi IHRhcmdldCBtZXRob2QuICBSZXN1bWUgdGhlIHByb2Nlc3MgcmVjb3JkIHRh cmdldC4gICovCisKK3N0YXRpYyB2b2lkCityZWNvcmRfcmVzdW1lIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqb3BzLCBwdGlkX3QgcHRpZCwgaW50IHN0ZXAsCisg ICAgICAgICAgICAgICBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQoreworICBy ZWNvcmRfcmVzdW1lX3N0ZXAgPSBzdGVwOworICByZWNvcmRfcmVzdW1lZCA9 IDE7CisgIHJlY29yZF9leGVjdXRpb25fZGlyID0gZXhlY3V0aW9uX2RpcmVj dGlvbjsKKworICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCisgICAgeworICAg ICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSB0YXJnZXRfdGhyZWFkX2Fy Y2hpdGVjdHVyZSAocHRpZCk7CisKKyAgICAgIHJlY29yZF9tZXNzYWdlIChn ZXRfY3VycmVudF9yZWdjYWNoZSAoKSwgc2lnbmFsKTsKKworICAgICAgaWYg KCFzdGVwKQorICAgICAgICB7CisgICAgICAgICAgLyogVGhpcyBpcyBub3Qg aGFyZCBzaW5nbGUgc3RlcC4gICovCisgICAgICAgICAgaWYgKCFnZGJhcmNo X3NvZnR3YXJlX3NpbmdsZV9zdGVwX3AgKGdkYmFyY2gpKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAvKiBUaGlzIGlzIGEgbm9ybWFsIGNvbnRp bnVlLiAgKi8KKyAgICAgICAgICAgICAgc3RlcCA9IDE7CisgICAgICAgICAg ICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAvKiBUaGlzIGFyY2ggc3VwcG9ydCBzb2Z0IHNpZ2xlIHN0ZXAuICAq LworICAgICAgICAgICAgICBpZiAoc2luZ2xlX3N0ZXBfYnJlYWtwb2ludHNf aW5zZXJ0ZWQgKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgLyogVGhpcyBpcyBhIHNvZnQgc2luZ2xlIHN0ZXAuICAqLworICAg ICAgICAgICAgICAgICAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGEgY29udGlu dWUuCisgICAgICAgICAgICAgICAgICAgICBUcnkgdG8gaW5zZXJ0IGEgc29m dCBzaW5nbGUgc3RlcCBicmVha3BvaW50LiAgKi8KKyAgICAgICAgICAgICAg ICAgIGlmICghZ2RiYXJjaF9zb2Z0d2FyZV9zaW5nbGVfc3RlcCAoZ2RiYXJj aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0X2N1cnJlbnRfZnJhbWUgKCkpKQorICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBz eXN0ZW0gZG9uJ3Qgd2FudCB1c2Ugc29mdCBzaW5nbGUgc3RlcC4KKyAgICAg ICAgICAgICAgICAgICAgICAgICBVc2UgaGFyZCBzaWdsZSBzdGVwLiAgKi8K KyAgICAgICAgICAgICAgICAgICAgICBzdGVwID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorCisgICAgICAvKiBNYWtlIHN1cmUgdGhlIHRhcmdldCBi ZW5lYXRoIHJlcG9ydHMgYWxsIHNpZ25hbHMuICAqLworICAgICAgdGFyZ2V0 X3Bhc3Nfc2lnbmFscyAoMCwgTlVMTCk7CisKKyAgICAgIHJlY29yZF9iZW5l YXRoX3RvX3Jlc3VtZSAocmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lX29wcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRpZCwgc3RlcCwg c2lnbmFsKTsKKyAgICB9CisKKyAgLyogV2UgYXJlIGFib3V0IHRvIHN0YXJ0 IGV4ZWN1dGluZyB0aGUgaW5mZXJpb3IgKG9yIHNpbXVsYXRlIGl0KSwKKyAg ICAgbGV0J3MgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgZXZlbnQgbG9vcC4gICov CisgIGlmICh0YXJnZXRfY2FuX2FzeW5jX3AgKCkpCisgICAgeworICAgICAg dGFyZ2V0X2FzeW5jIChpbmZlcmlvcl9ldmVudF9oYW5kbGVyLCAwKTsKKyAg ICAgIC8qIE5vdGlmeSB0aGUgZXZlbnQgbG9vcCB0aGVyZSdzIGFuIGV2ZW50 IHRvIHdhaXQgZm9yLiAgV2UgZG8KKwkgbW9zdCBvZiB0aGUgd29yayBpbiBy ZWNvcmRfd2FpdC4gICovCisgICAgICBtYXJrX2FzeW5jX2V2ZW50X2hhbmRs ZXIgKHJlY29yZF9hc3luY19pbmZlcmlvcl9ldmVudF90b2tlbik7CisgICAg fQorfQorCitzdGF0aWMgaW50IHJlY29yZF9nZXRfc2lnID0gMDsKKworLyog U0lHSU5UIHNpZ25hbCBoYW5kbGVyLCByZWdpc3RlcmVkIGJ5ICJ0b193YWl0 IiBtZXRob2QuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX3NpZ19oYW5k bGVyIChpbnQgc2lnbm8pCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNv cmQ6IGdldCBhIHNpZ25hbFxuIik7CisKKyAgLyogSXQgd2lsbCBicmVhayB0 aGUgcnVubmluZyBpbmZlcmlvciBpbiByZXBsYXkgbW9kZS4gICovCisgIHJl Y29yZF9yZXN1bWVfc3RlcCA9IDE7CisKKyAgLyogSXQgd2lsbCBsZXQgcmVj b3JkX3dhaXQgc2V0IGluZmVyaW9yIHN0YXR1cyB0byBnZXQgdGhlIHNpZ25h bAorICAgICBTSUdJTlQuICAqLworICByZWNvcmRfZ2V0X3NpZyA9IDE7Cit9 CisKK3N0YXRpYyB2b2lkCityZWNvcmRfd2FpdF9jbGVhbnVwcyAodm9pZCAq aWdub3JlKQoreworICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVD X1JFVkVSU0UpCisgICAgeworICAgICAgaWYgKHJlY29yZF9saXN0LT5uZXh0 KQorCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7CisgICAgfQor ICBlbHNlCisgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+cHJldjsK K30KKworLyogInRvX3dhaXQiIHRhcmdldCBtZXRob2QgZm9yIHByb2Nlc3Mg cmVjb3JkIHRhcmdldC4KKworICAgSW4gcmVjb3JkIG1vZGUsIHRoZSB0YXJn ZXQgaXMgYWx3YXlzIHJ1biBpbiBzaW5nbGVzdGVwIG1vZGUKKyAgIChldmVu IHdoZW4gZ2RiIHNheXMgdG8gY29udGludWUpLiAgVGhlIHRvX3dhaXQgbWV0 aG9kIGludGVyY2VwdHMKKyAgIHRoZSBzdG9wIGV2ZW50cyBhbmQgZGV0ZXJt aW5lcyB3aGljaCBvbmVzIGFyZSB0byBiZSBwYXNzZWQgb24gdG8KKyAgIGdk Yi4gIE1vc3Qgc3RvcCBldmVudHMgYXJlIGp1c3Qgc2luZ2xlc3RlcCBldmVu dHMgdGhhdCBnZGIgaXMgbm90CisgICB0byBrbm93IGFib3V0LCBzbyB0aGUg dG9fd2FpdCBtZXRob2QganVzdCByZWNvcmRzIHRoZW0gYW5kIGtlZXBzCisg ICBzaW5nbGVzdGVwcGluZy4KKworICAgSW4gcmVwbGF5IG1vZGUsIHRoaXMg ZnVuY3Rpb24gZW11bGF0ZXMgdGhlIHJlY29yZGVkIGV4ZWN1dGlvbiBsb2cs IAorICAgb25lIGluc3RydWN0aW9uIGF0IGEgdGltZSAoZm9yd2FyZCBvciBi YWNrd2FyZCksIGFuZCBkZXRlcm1pbmVzIAorICAgd2hlcmUgdG8gc3RvcC4g ICovCisKK3N0YXRpYyBwdGlkX3QKK3JlY29yZF93YWl0XzEgKHN0cnVjdCB0 YXJnZXRfb3BzICpvcHMsCisJICAgICAgIHB0aWRfdCBwdGlkLCBzdHJ1Y3Qg dGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKKwkgICAgICAgaW50IG9wdGlv bnMpCit7CisgIHN0cnVjdCBjbGVhbnVwICpzZXRfY2xlYW51cHMgPSByZWNv cmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsKKworICBpZiAocmVj b3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKKwkJCSJQcm9jZXNzIHJlY29yZDogcmVjb3JkX3dhaXQgIgorCQkJInJl Y29yZF9yZXN1bWVfc3RlcCA9ICVkLCByZWNvcmRfcmVzdW1lZCA9ICVkLCBk aXJlY3Rpb249JXNcbiIsCisJCQlyZWNvcmRfcmVzdW1lX3N0ZXAsIHJlY29y ZF9yZXN1bWVkLAorCQkJcmVjb3JkX2V4ZWN1dGlvbl9kaXIgPT0gRVhFQ19G T1JXQVJEID8gImZvcndhcmQiIDogInJldmVyc2UiKTsKKworICBpZiAoIXJl Y29yZF9yZXN1bWVkKQorICAgIHsKKyAgICAgIGdkYl9hc3NlcnQgKChvcHRp b25zICYgVEFSR0VUX1dOT0hBTkcpICE9IDApOworCisgICAgICAvKiBObyBp bnRlcmVzdGluZyBldmVudC4gICovCisgICAgICBzdGF0dXMtPmtpbmQgPSBU QVJHRVRfV0FJVEtJTkRfSUdOT1JFOworICAgICAgcmV0dXJuIG1pbnVzX29u ZV9wdGlkOworICAgIH0KKworICByZWNvcmRfZ2V0X3NpZyA9IDA7CisgIHNp Z25hbCAoU0lHSU5ULCByZWNvcmRfc2lnX2hhbmRsZXIpOworCisgIGlmICgh UkVDT1JEX0lTX1JFUExBWSAmJiBvcHMgIT0gJnJlY29yZF9jb3JlX29wcykK KyAgICB7CisgICAgICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQorCXsKKwkg IC8qIFRoaXMgaXMgYSBzaW5nbGUgc3RlcC4gICovCisJICByZXR1cm4gcmVj b3JkX2JlbmVhdGhfdG9fd2FpdCAocmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9v cHMsCisJCQkJCSBwdGlkLCBzdGF0dXMsIG9wdGlvbnMpOworCX0KKyAgICAg IGVsc2UKKwl7CisJICAvKiBUaGlzIGlzIG5vdCBhIHNpbmdsZSBzdGVwLiAg Ki8KKwkgIHB0aWRfdCByZXQ7CisJICBDT1JFX0FERFIgdG1wX3BjOworCSAg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSB0YXJnZXRfdGhyZWFkX2FyY2hp dGVjdHVyZSAoaW5mZXJpb3JfcHRpZCk7CisKKwkgIHdoaWxlICgxKQorCSAg ICB7CisJICAgICAgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAocmVj b3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMsCisJCQkJCSAgICBwdGlkLCBzdGF0 dXMsIG9wdGlvbnMpOworCSAgICAgIGlmIChzdGF0dXMtPmtpbmQgPT0gVEFS R0VUX1dBSVRLSU5EX0lHTk9SRSkKKwkJeworCQkgIGlmIChyZWNvcmRfZGVi dWcpCisJCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkJCSJQcm9jZXNzIHJlY29yZDogcmVjb3JkX3dhaXQgIgorCQkJCQkidGFy Z2V0IGJlbmVhdGggbm90IGRvbmUgeWV0XG4iKTsKKwkJICByZXR1cm4gcmV0 OworCQl9CisKKyAgICAgICAgICAgICAgaWYgKHNpbmdsZV9zdGVwX2JyZWFr cG9pbnRzX2luc2VydGVkICgpKQorICAgICAgICAgICAgICAgIHJlbW92ZV9z aW5nbGVfc3RlcF9icmVha3BvaW50cyAoKTsKKworCSAgICAgIGlmIChyZWNv cmRfcmVzdW1lX3N0ZXApCisJCXJldHVybiByZXQ7CisKKwkgICAgICAvKiBJ cyB0aGlzIGEgU0lHVFJBUD8gICovCisJICAgICAgaWYgKHN0YXR1cy0+a2lu ZCA9PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAorCQkgICYmIHN0YXR1cy0+ dmFsdWUuc2lnID09IEdEQl9TSUdOQUxfVFJBUCkKKwkJeworCQkgIHN0cnVj dCByZWdjYWNoZSAqcmVnY2FjaGU7CisJCSAgc3RydWN0IGFkZHJlc3Nfc3Bh Y2UgKmFzcGFjZTsKKworCQkgIC8qIFllcyAtLSB0aGlzIGlzIGxpa2VseSBv dXIgc2luZ2xlLXN0ZXAgZmluaXNoaW5nLAorCQkgICAgIGJ1dCBjaGVjayBp ZiB0aGVyZSdzIGFueSByZWFzb24gdGhlIGNvcmUgd291bGQgYmUKKwkJICAg ICBpbnRlcmVzdGVkIGluIHRoZSBldmVudC4gICovCisKKwkJICByZWdpc3Rl cnNfY2hhbmdlZCAoKTsKKwkJICByZWdjYWNoZSA9IGdldF9jdXJyZW50X3Jl Z2NhY2hlICgpOworCQkgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJl Z2NhY2hlKTsKKwkJICBhc3BhY2UgPSBnZXRfcmVnY2FjaGVfYXNwYWNlIChy ZWdjYWNoZSk7CisKKwkJICBpZiAodGFyZ2V0X3N0b3BwZWRfYnlfd2F0Y2hw b2ludCAoKSkKKwkJICAgIHsKKwkJICAgICAgLyogQWx3YXlzIGludGVyZXN0 ZWQgaW4gd2F0Y2hwb2ludHMuICAqLworCQkgICAgfQorCQkgIGVsc2UgaWYg KGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wIChhc3BhY2UsIHRtcF9wYykp CisJCSAgICB7CisJCSAgICAgIC8qIFRoZXJlIGlzIGEgYnJlYWtwb2ludCBo ZXJlLiAgTGV0IHRoZSBjb3JlCisJCQkgaGFuZGxlIGl0LiAgKi8KKwkJICAg ICAgaWYgKHNvZnR3YXJlX2JyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wIChh c3BhY2UsIHRtcF9wYykpCisJCQl7CisJCQkgIHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoCisJCQkgICAgPSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp OworCQkJICBDT1JFX0FERFIgZGVjcl9wY19hZnRlcl9icmVhaworCQkJICAg ID0gZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZGJhcmNoKTsKKwkJ CSAgaWYgKGRlY3JfcGNfYWZ0ZXJfYnJlYWspCisJCQkgICAgcmVnY2FjaGVf d3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCQkgICAgICAgdG1wX3BjICsgZGVj cl9wY19hZnRlcl9icmVhayk7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZQor CQkgICAgeworCQkgICAgICAvKiBUaGlzIGlzIGEgc2luZ2xlLXN0ZXAgdHJh cC4gIFJlY29yZCB0aGUKKwkJICAgICAgICAgaW5zbiBhbmQgaXNzdWUgYW5v dGhlciBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgIEZJWE1FOiB0 aGlzIHBhcnQgY2FuIGJlIGEgcmFuZG9tIFNJR1RSQVAgdG9vLgorICAgICAg ICAgICAgICAgICAgICAgICAgIEJ1dCBHREIgY2Fubm90IGhhbmRsZSBpdC4g ICovCisgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZXAgPSAxOworCisJ CSAgICAgIGlmICghcmVjb3JkX21lc3NhZ2Vfd3JhcHBlcl9zYWZlIChyZWdj YWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0RCX1NJR05BTF8wKSkKKyAgCQkJeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VU X1dBSVRLSU5EX1NUT1BQRUQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdGF0dXMtPnZhbHVlLnNpZyA9IEdEQl9TSUdOQUxfMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAJCQl9CisKKyAgICAgICAg ICAgICAgICAgICAgICBpZiAoZ2RiYXJjaF9zb2Z0d2FyZV9zaW5nbGVfc3Rl cF9wIChnZGJhcmNoKSkKKwkJCXsKKwkJCSAgLyogVHJ5IHRvIGluc2VydCB0 aGUgc29mdHdhcmUgc2luZ2xlIHN0ZXAgYnJlYWtwb2ludC4KKwkJCSAgICAg SWYgaW5zZXJ0IHN1Y2Nlc3MsIHNldCBzdGVwIHRvIDAuICAqLworCQkJICBz ZXRfZXhlY3V0aW5nIChpbmZlcmlvcl9wdGlkLCAwKTsKKwkJCSAgcmVpbml0 X2ZyYW1lX2NhY2hlICgpOworCQkJICBpZiAoZ2RiYXJjaF9zb2Z0d2FyZV9z aW5nbGVfc3RlcCAoZ2RiYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9jdXJy ZW50X2ZyYW1lICgpKSkKKwkJCSAgICBzdGVwID0gMDsKKwkJCSAgc2V0X2V4 ZWN1dGluZyAoaW5mZXJpb3JfcHRpZCwgMSk7CisJCQl9CisKKwkJICAgICAg aWYgKHJlY29yZF9kZWJ1ZykKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX3dh aXQgIgorCQkJCQkgICAgImlzc3Vpbmcgb25lIG1vcmUgc3RlcCBpbiB0aGUg dGFyZ2V0IGJlbmVhdGhcbiIpOworCQkgICAgICByZWNvcmRfYmVuZWF0aF90 b19yZXN1bWUgKHJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZV9vcHMsCisJCQkJ CQlwdGlkLCBzdGVwLAorCQkJCQkJR0RCX1NJR05BTF8wKTsKKwkJICAgICAg Y29udGludWU7CisJCSAgICB9CisJCX0KKworCSAgICAgIC8qIFRoZSBpbmZl cmlvciBpcyBicm9rZW4gYnkgYSBicmVha3BvaW50IG9yIGEgc2lnbmFsLiAg Ki8KKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICByZXR1cm4gcmV0Owor CX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisgICAg ICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNo IChyZWdjYWNoZSk7CisgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXNw YWNlID0gZ2V0X3JlZ2NhY2hlX2FzcGFjZSAocmVnY2FjaGUpOworICAgICAg aW50IGNvbnRpbnVlX2ZsYWcgPSAxOworICAgICAgaW50IGZpcnN0X3JlY29y ZF9lbmQgPSAxOworICAgICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVw cyA9IG1ha2VfY2xlYW51cCAocmVjb3JkX3dhaXRfY2xlYW51cHMsIDApOwor ICAgICAgQ09SRV9BRERSIHRtcF9wYzsKKworICAgICAgcmVjb3JkX2h3X3dh dGNocG9pbnQgPSAwOworICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dB SVRLSU5EX1NUT1BQRUQ7CisKKyAgICAgIC8qIENoZWNrIGJyZWFrcG9pbnQg d2hlbiBmb3J3YXJkIGV4ZWN1dGUuICAqLworICAgICAgaWYgKGV4ZWN1dGlv bl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQorCXsKKwkgIHRtcF9wYyA9 IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkgIGlmIChicmVha3Bv aW50X2luc2VydGVkX2hlcmVfcCAoYXNwYWNlLCB0bXBfcGMpKQorCSAgICB7 CisJICAgICAgaW50IGRlY3JfcGNfYWZ0ZXJfYnJlYWsgPSBnZGJhcmNoX2Rl Y3JfcGNfYWZ0ZXJfYnJlYWsgKGdkYmFyY2gpOworCisJICAgICAgaWYgKHJl Y29yZF9kZWJ1ZykKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IGJyZWFrIGF0ICVzLlxuIiwK KwkJCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsIHRtcF9wYykpOworCisJICAg ICAgaWYgKGRlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJICAmJiAhcmVjb3JkX3Jl c3VtZV9zdGVwCisJCSAgJiYgc29mdHdhcmVfYnJlYWtwb2ludF9pbnNlcnRl ZF9oZXJlX3AgKGFzcGFjZSwgdG1wX3BjKSkKKwkJcmVnY2FjaGVfd3JpdGVf cGMgKHJlZ2NhY2hlLAorCQkJCSAgIHRtcF9wYyArIGRlY3JfcGNfYWZ0ZXJf YnJlYWspOworCSAgICAgIGdvdG8gcmVwbGF5X291dDsKKwkgICAgfQorCX0K KworICAgICAgLyogSWYgR0RCIGlzIGluIHRlcm1pbmFsX2luZmVyaW9yIG1v ZGUsIGl0IHdpbGwgbm90IGdldCB0aGUgc2lnbmFsLgorICAgICAgICAgQW5k IGluIEdEQiByZXBsYXkgbW9kZSwgR0RCIGRvZXNuJ3QgbmVlZCB0byBiZSBp biB0ZXJtaW5hbF9pbmZlcmlvcgorICAgICAgICAgbW9kZSwgYmVjYXVzZSBp bmZlcmlvciB3aWxsIG5vdCBleGVjdXRlZC4KKyAgICAgICAgIFRoZW4gc2V0 IGl0IHRvIHRlcm1pbmFsX291cnMgdG8gbWFrZSBHREIgZ2V0IHRoZSBzaWdu YWwuICAqLworICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisKKyAg ICAgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNvcmRfbGlzdCBwb2lu dHMgdG8gdGhlIHRhaWwgb2YgcHJldgorICAgICAgICAgaW5zdHJ1Y3Rpb24u ICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19G T1JXQVJEICYmIHJlY29yZF9saXN0LT5uZXh0KQorCXJlY29yZF9saXN0ID0g cmVjb3JkX2xpc3QtPm5leHQ7CisKKyAgICAgIC8qIExvb3Agb3ZlciB0aGUg cmVjb3JkX2xpc3QsIGxvb2tpbmcgZm9yIHRoZSBuZXh0IHBsYWNlIHRvCisJ IHN0b3AuICAqLworICAgICAgZG8KKwl7CisJICAvKiBDaGVjayBmb3IgYmVn aW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8KKwkgIGlmIChleGVjdXRpb25f ZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQorCSAgICAgICYmIHJlY29yZF9s aXN0ID09ICZyZWNvcmRfZmlyc3QpCisJICAgIHsKKwkgICAgICAvKiBIaXQg YmVnaW5uaW5nIG9mIHJlY29yZCBsb2cgaW4gcmV2ZXJzZS4gICovCisJICAg ICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGlmIChleGVjdXRpb25fZGly ZWN0aW9uICE9IEVYRUNfUkVWRVJTRSAmJiAhcmVjb3JkX2xpc3QtPm5leHQp CisJICAgIHsKKwkgICAgICAvKiBIaXQgZW5kIG9mIHJlY29yZCBsb2cgZ29p bmcgZm9yd2FyZC4gICovCisJICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VU X1dBSVRLSU5EX05PX0hJU1RPUlk7CisJICAgICAgYnJlYWs7CisJICAgIH0K KworICAgICAgICAgIHJlY29yZF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJh cmNoLCByZWNvcmRfbGlzdCk7CisKKwkgIGlmIChyZWNvcmRfbGlzdC0+dHlw ZSA9PSByZWNvcmRfZW5kKQorCSAgICB7CisJICAgICAgaWYgKHJlY29yZF9k ZWJ1ZyA+IDEpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZW5kICVzIHRvICIK KwkJCQkgICAgImluZmVyaW9yLlxuIiwKKwkJCQkgICAgaG9zdF9hZGRyZXNz X3RvX3N0cmluZyAocmVjb3JkX2xpc3QpKTsKKworCSAgICAgIGlmIChmaXJz dF9yZWNvcmRfZW5kICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19S RVZFUlNFKQorCQl7CisJCSAgLyogV2hlbiByZXZlcnNlIGV4Y3V0ZSwgdGhl IGZpcnN0IHJlY29yZF9lbmQgaXMgdGhlIHBhcnQgb2YKKwkJICAgICBjdXJy ZW50IGluc3RydWN0aW9uLiAgKi8KKwkJICBmaXJzdF9yZWNvcmRfZW5kID0g MDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIEluIEVYRUNfUkVW RVJTRSBtb2RlLCB0aGlzIGlzIHRoZSByZWNvcmRfZW5kIG9mIHByZXYKKwkJ ICAgICBpbnN0cnVjdGlvbi4KKwkJICAgICBJbiBFWEVDX0ZPUldBUkQgbW9k ZSwgdGhpcyBpcyB0aGUgcmVjb3JkX2VuZCBvZiBjdXJyZW50CisJCSAgICAg aW5zdHJ1Y3Rpb24uICAqLworCQkgIC8qIHN0ZXAgKi8KKwkJICBpZiAocmVj b3JkX3Jlc3VtZV9zdGVwKQorCQkgICAgeworCQkgICAgICBpZiAocmVjb3Jk X2RlYnVnID4gMSkKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOworCQkg ICAgICBjb250aW51ZV9mbGFnID0gMDsKKwkJICAgIH0KKworCQkgIC8qIGNo ZWNrIGJyZWFrcG9pbnQgKi8KKwkJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFk X3BjIChyZWdjYWNoZSk7CisJCSAgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0ZWRf aGVyZV9wIChhc3BhY2UsIHRtcF9wYykpCisJCSAgICB7CisJCSAgICAgIGlu dCBkZWNyX3BjX2FmdGVyX2JyZWFrCisJCQk9IGdkYmFyY2hfZGVjcl9wY19h ZnRlcl9icmVhayAoZ2RiYXJjaCk7CisKKwkJICAgICAgaWYgKHJlY29yZF9k ZWJ1ZykKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJ CQkJICAgICJQcm9jZXNzIHJlY29yZDogYnJlYWsgIgorCQkJCQkgICAgImF0 ICVzLlxuIiwKKwkJCQkJICAgIHBhZGRyZXNzIChnZGJhcmNoLCB0bXBfcGMp KTsKKwkJICAgICAgaWYgKGRlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCSAgJiYg ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQKKwkJCSAgJiYg IXJlY29yZF9yZXN1bWVfc3RlcAorCQkJICAmJiBzb2Z0d2FyZV9icmVha3Bv aW50X2luc2VydGVkX2hlcmVfcCAoYXNwYWNlLAorCQkJCQkJCQkgIHRtcF9w YykpCisJCQlyZWdjYWNoZV93cml0ZV9wYyAocmVnY2FjaGUsCisJCQkJCSAg IHRtcF9wYyArIGRlY3JfcGNfYWZ0ZXJfYnJlYWspOworCQkgICAgICBjb250 aW51ZV9mbGFnID0gMDsKKwkJICAgIH0KKworCQkgIGlmIChyZWNvcmRfaHdf d2F0Y2hwb2ludCkKKwkJICAgIHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1 ZykKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJ ICAgICJQcm9jZXNzIHJlY29yZDogaGl0IGh3ICIKKwkJCQkJICAgICJ3YXRj aHBvaW50LlxuIik7CisJCSAgICAgIGNvbnRpbnVlX2ZsYWcgPSAwOworCQkg ICAgfQorCQkgIC8qIENoZWNrIHRhcmdldCBzaWduYWwgKi8KKwkJICBpZiAo cmVjb3JkX2xpc3QtPnUuZW5kLnNpZ3ZhbCAhPSBHREJfU0lHTkFMXzApCisJ CSAgICAvKiBGSVhNRTogYmV0dGVyIHdheSB0byBjaGVjayAqLworCQkgICAg Y29udGludWVfZmxhZyA9IDA7CisJCX0KKwkgICAgfQorCisJICBpZiAoY29u dGludWVfZmxhZykKKwkgICAgeworCSAgICAgIGlmIChleGVjdXRpb25fZGly ZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJeworCQkgIGlmIChyZWNvcmRf bGlzdC0+cHJldikKKwkJICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3Qt PnByZXY7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAocmVjb3Jk X2xpc3QtPm5leHQpCisJCSAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0 LT5uZXh0OworCQl9CisJICAgIH0KKwl9CisgICAgICB3aGlsZSAoY29udGlu dWVfZmxhZyk7CisKK3JlcGxheV9vdXQ6CisgICAgICBpZiAocmVjb3JkX2dl dF9zaWcpCisJc3RhdHVzLT52YWx1ZS5zaWcgPSBHREJfU0lHTkFMX0lOVDsK KyAgICAgIGVsc2UgaWYgKHJlY29yZF9saXN0LT51LmVuZC5zaWd2YWwgIT0g R0RCX1NJR05BTF8wKQorCS8qIEZJWE1FOiBiZXR0ZXIgd2F5IHRvIGNoZWNr ICovCisJc3RhdHVzLT52YWx1ZS5zaWcgPSByZWNvcmRfbGlzdC0+dS5lbmQu c2lndmFsOworICAgICAgZWxzZQorCXN0YXR1cy0+dmFsdWUuc2lnID0gR0RC X1NJR05BTF9UUkFQOworCisgICAgICBkaXNjYXJkX2NsZWFudXBzIChvbGRf Y2xlYW51cHMpOworICAgIH0KKworICBzaWduYWwgKFNJR0lOVCwgaGFuZGxl X3NpZ2ludCk7CisKKyAgZG9fY2xlYW51cHMgKHNldF9jbGVhbnVwcyk7Cisg IHJldHVybiBpbmZlcmlvcl9wdGlkOworfQorCitzdGF0aWMgcHRpZF90City ZWNvcmRfd2FpdCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywKKwkgICAgIHB0 aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywK KwkgICAgIGludCBvcHRpb25zKQoreworICBwdGlkX3QgcmV0dXJuX3B0aWQ7 CisKKyAgcmV0dXJuX3B0aWQgPSByZWNvcmRfd2FpdF8xIChvcHMsIHB0aWQs IHN0YXR1cywgb3B0aW9ucyk7CisgIGlmIChzdGF0dXMtPmtpbmQgIT0gVEFS R0VUX1dBSVRLSU5EX0lHTk9SRSkKKyAgICB7CisgICAgICAvKiBXZSdyZSBy ZXBvcnRpbmcgYSBzdG9wLiAgTWFrZSBzdXJlIGFueSBzcHVyaW91cworCSB0 YXJnZXRfd2FpdChXTk9IQU5HKSBkb2Vzbid0IGFkdmFuY2UgdGhlIHRhcmdl dCB1bnRpbCB0aGUKKwkgY29yZSB3YW50cyB1cyByZXN1bWVkIGFnYWluLiAg Ki8KKyAgICAgIHJlY29yZF9yZXN1bWVkID0gMDsKKyAgICB9CisgIHJldHVy biByZXR1cm5fcHRpZDsKK30KKworc3RhdGljIGludAorcmVjb3JkX3N0b3Bw ZWRfYnlfd2F0Y2hwb2ludCAodm9pZCkKK3sKKyAgaWYgKFJFQ09SRF9JU19S RVBMQVkpCisgICAgcmV0dXJuIHJlY29yZF9od193YXRjaHBvaW50OworICBl bHNlCisgICAgcmV0dXJuIHJlY29yZF9iZW5lYXRoX3RvX3N0b3BwZWRfYnlf d2F0Y2hwb2ludCAoKTsKK30KKworc3RhdGljIGludAorcmVjb3JkX3N0b3Bw ZWRfZGF0YV9hZGRyZXNzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBDT1JF X0FERFIgKmFkZHJfcCkKK3sKKyAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisg ICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICByZXR1cm4gcmVjb3JkX2JlbmVh dGhfdG9fc3RvcHBlZF9kYXRhX2FkZHJlc3MgKG9wcywgYWRkcl9wKTsKK30K KworLyogInRvX2Rpc2Nvbm5lY3QiIG1ldGhvZCBmb3IgcHJvY2VzcyByZWNv cmQgdGFyZ2V0LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9kaXNjb25u ZWN0IChzdHJ1Y3QgdGFyZ2V0X29wcyAqdGFyZ2V0LCBjaGFyICphcmdzLCBp bnQgZnJvbV90dHkpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF9kaXNjb25uZWN0XG4iKTsKKworICB1bnB1c2hfdGFyZ2V0ICgm cmVjb3JkX29wcyk7CisgIHRhcmdldF9kaXNjb25uZWN0IChhcmdzLCBmcm9t X3R0eSk7Cit9CisKKy8qICJ0b19kZXRhY2giIG1ldGhvZCBmb3IgcHJvY2Vz cyByZWNvcmQgdGFyZ2V0LiAgKi8KKworc3RhdGljIHZvaWQKK3JlY29yZF9k ZXRhY2ggKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIGNoYXIgKmFyZ3MsIGlu dCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDog cmVjb3JkX2RldGFjaFxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29y ZF9vcHMpOworICB0YXJnZXRfZGV0YWNoIChhcmdzLCBmcm9tX3R0eSk7Cit9 CisKKy8qICJ0b19tb3Vybl9pbmZlcmlvciIgbWV0aG9kIGZvciBwcm9jZXNz IHJlY29yZCB0YXJnZXQuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX21v dXJuX2luZmVyaW9yIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQoreworICBp ZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiAiCisJCQkgICAgICAgICAgICAi cmVjb3JkX21vdXJuX2luZmVyaW9yXG4iKTsKKworICB1bnB1c2hfdGFyZ2V0 ICgmcmVjb3JkX29wcyk7CisgIHRhcmdldF9tb3Vybl9pbmZlcmlvciAoKTsK K30KKworLyogQ2xvc2UgcHJvY2VzcyByZWNvcmQgdGFyZ2V0IGJlZm9yZSBr aWxsaW5nIHRoZSBpbmZlcmlvciBwcm9jZXNzLiAgKi8KKworc3RhdGljIHZv aWQKK3JlY29yZF9raWxsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQorewor ICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfa2lsbFxuIik7 CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRf a2lsbCAoKTsKK30KKworLyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgKGJ5 IHVzZXIgb3IgYnkgR0RCKSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAg Ki8KKworc3RhdGljIHZvaWQKK3JlY29yZF9yZWdpc3RlcnNfY2hhbmdlIChz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQoreworICAv KiBDaGVjayByZWNvcmRfaW5zbl9udW0uICAqLworICByZWNvcmRfY2hlY2tf aW5zbl9udW0gKDApOworCisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5V TEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7CisKKyAgaWYg KHJlZ251bSA8IDApCisgICAgeworICAgICAgaW50IGk7CisKKyAgICAgIGZv ciAoaSA9IDA7IGkgPCBnZGJhcmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVf YXJjaCAocmVnY2FjaGUpKTsgaSsrKQorCXsKKwkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBpKSkKKwkgICAgeworCSAgICAg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7 CisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8g cmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCSAgICB9CisJfQorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZ2NhY2hlLCByZWdudW0pKQorCXsKKwkgIHJlY29yZF9saXN0 X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBlcnJvciAo XygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9u IGxvZy4iKSk7CisJfQorICAgIH0KKyAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX2VuZCAoKSkKKyAgICB7CisgICAgICByZWNvcmRfbGlzdF9yZWxlYXNl IChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICAgICAgZXJyb3IgKF8oIlBy b2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cu IikpOworICAgIH0KKyAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJj aF9saXN0X2hlYWQ7CisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9 IHJlY29yZF9saXN0OworICByZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xp c3RfdGFpbDsKKworICBpZiAocmVjb3JkX2luc25fbnVtID09IHJlY29yZF9p bnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKKyAgICByZWNv cmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICBlbHNlCisgICAgcmVjb3Jk X2luc25fbnVtKys7Cit9CisKKy8qICJ0b19zdG9yZV9yZWdpc3RlcnMiIG1l dGhvZCBmb3IgcHJvY2VzcyByZWNvcmQgdGFyZ2V0LiAgKi8KKworc3RhdGlj IHZvaWQKK3JlY29yZF9zdG9yZV9yZWdpc3RlcnMgKHN0cnVjdCB0YXJnZXRf b3BzICpvcHMsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcmVnbm8pCit7CisgIGlmICghcmVjb3Jk X2dkYl9vcGVyYXRpb25fZGlzYWJsZSkKKyAgICB7CisgICAgICBpZiAoUkVD T1JEX0lTX1JFUExBWSkKKwl7CisJICBpbnQgbjsKKworCSAgLyogTGV0IHVz ZXIgY2hvb3NlIGlmIGhlIHdhbnRzIHRvIHdyaXRlIHJlZ2lzdGVyIG9yIG5v dC4gICovCisJICBpZiAocmVnbm8gPCAwKQorCSAgICBuID0KKwkgICAgICBx dWVyeSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5n aW5nIHRoZSAiCisJCSAgICAgICAidmFsdWUgb2YgYSByZWdpc3RlciB3aWxs IG1ha2UgdGhlIGV4ZWN1dGlvbiAiCisJCSAgICAgICAibG9nIHVudXNhYmxl IGZyb20gdGhpcyBwb2ludCBvbndhcmQuICAiCisJCSAgICAgICAiQ2hhbmdl IGFsbCByZWdpc3RlcnM/IikpOworCSAgZWxzZQorCSAgICBuID0KKwkgICAg ICBxdWVyeSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNo YW5naW5nIHRoZSB2YWx1ZSAiCisJCSAgICAgICAib2YgYSByZWdpc3RlciB3 aWxsIG1ha2UgdGhlIGV4ZWN1dGlvbiBsb2cgdW51c2FibGUgIgorCQkgICAg ICAgImZyb20gdGhpcyBwb2ludCBvbndhcmQuICBDaGFuZ2UgcmVnaXN0ZXIg JXM/IiksCisJCSAgICAgIGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2V0X3Jl Z2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSwKKwkJCQkJICAgICAgIHJlZ25vKSk7 CisKKwkgIGlmICghbikKKwkgICAgeworCSAgICAgIC8qIEludmFsaWRhdGUg dGhlIHZhbHVlIG9mIHJlZ2NhY2hlIHRoYXQgd2FzIHNldCBpbiBmdW5jdGlv bgorCSAgICAgICAgICJyZWdjYWNoZV9yYXdfd3JpdGUiLiAgKi8KKwkgICAg ICBpZiAocmVnbm8gPCAwKQorCQl7CisJCSAgaW50IGk7CisKKwkJICBmb3Ig KGkgPSAwOworCQkgICAgICAgaSA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdldF9y ZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOworCQkgICAgICAgaSsrKQorCQkg ICAgcmVnY2FjaGVfaW52YWxpZGF0ZSAocmVnY2FjaGUsIGkpOworCQl9CisJ ICAgICAgZWxzZQorCQlyZWdjYWNoZV9pbnZhbGlkYXRlIChyZWdjYWNoZSwg cmVnbm8pOworCisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNh bmNlbGVkIHRoZSBvcGVyYXRpb24uIikpOworCSAgICB9CisKKwkgIC8qIERl c3Ryb3kgdGhlIHJlY29yZCBmcm9tIGhlcmUgZm9yd2FyZC4gICovCisJICBy ZWNvcmRfbGlzdF9yZWxlYXNlX2ZvbGxvd2luZyAocmVjb3JkX2xpc3QpOwor CX0KKworICAgICAgcmVjb3JkX3JlZ2lzdGVyc19jaGFuZ2UgKHJlZ2NhY2hl LCByZWdubyk7CisgICAgfQorICByZWNvcmRfYmVuZWF0aF90b19zdG9yZV9y ZWdpc3RlcnMgKHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVyc19v cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn Y2FjaGUsIHJlZ25vKTsKK30KKworLyogInRvX3hmZXJfcGFydGlhbCIgbWV0 aG9kLiAgQmVoYXZpb3IgaXMgY29uZGl0aW9uYWwgb24gUkVDT1JEX0lTX1JF UExBWS4KKyAgIEluIHJlcGxheSBtb2RlLCB3ZSBjYW5ub3Qgd3JpdGUgbWVt b3J5IHVubGVzIHdlIGFyZSB3aWxsaW5nIHRvCisgICBpbnZhbGlkYXRlIHRo ZSByZWNvcmQvcmVwbGF5IGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4g ICovCisKK3N0YXRpYyBMT05HRVNUCityZWNvcmRfeGZlcl9wYXJ0aWFsIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBlbnVtIHRhcmdldF9vYmplY3Qgb2Jq ZWN0LAorCQkgICAgIGNvbnN0IGNoYXIgKmFubmV4LCBnZGJfYnl0ZSAqcmVh ZGJ1ZiwKKwkJICAgICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsIFVMT05H RVNUIG9mZnNldCwgTE9OR0VTVCBsZW4pCit7CisgIGlmICghcmVjb3JkX2dk Yl9vcGVyYXRpb25fZGlzYWJsZQorICAgICAgJiYgKG9iamVjdCA9PSBUQVJH RVRfT0JKRUNUX01FTU9SWQorCSAgfHwgb2JqZWN0ID09IFRBUkdFVF9PQkpF Q1RfUkFXX01FTU9SWSkgJiYgd3JpdGVidWYpCisgICAgeworICAgICAgaWYg KFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgLyogTGV0IHVzZXIgY2hvb3Nl IGlmIGhlIHdhbnRzIHRvIHdyaXRlIG1lbW9yeSBvciBub3QuICAqLworCSAg aWYgKCFxdWVyeSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUs IHdyaXRpbmcgdG8gbWVtb3J5ICIKKwkJICAgICAgICAid2lsbCBtYWtlIHRo ZSBleGVjdXRpb24gbG9nIHVudXNhYmxlIGZyb20gdGhpcyAiCisJCSAgICAg ICAgInBvaW50IG9ud2FyZC4gIFdyaXRlIG1lbW9yeSBhdCBhZGRyZXNzICVz PyIpLAorCQkgICAgICAgcGFkZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCBv ZmZzZXQpKSkKKwkgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbmNl bGVkIHRoZSBvcGVyYXRpb24uIikpOworCisJICAvKiBEZXN0cm95IHRoZSBy ZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLworCSAgcmVjb3JkX2xpc3Rf cmVsZWFzZV9mb2xsb3dpbmcgKHJlY29yZF9saXN0KTsKKwl9CisKKyAgICAg IC8qIENoZWNrIHJlY29yZF9pbnNuX251bSAqLworICAgICAgcmVjb3JkX2No ZWNrX2luc25fbnVtICgwKTsKKworICAgICAgLyogUmVjb3JkIHJlZ2lzdGVy cyBjaGFuZ2UgdG8gbGlzdCBhcyBhbiBpbnN0cnVjdGlvbi4gICovCisgICAg ICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxMOworICAgICAgcmVjb3Jk X2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKG9mZnNldCwgbGVuKSkKKwl7CisJICByZWNvcmRf bGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgaWYg KHJlY29yZF9kZWJ1ZykKKwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorCQkJCSJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29y ZCAiCisJCQkJImV4ZWN1dGlvbiBsb2cuIik7CisJICByZXR1cm4gLTE7CisJ fQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkKKwl7 CisJICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3Rh aWwpOworCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJQcm9jZXNzIHJlY29yZDogZmFp bGVkIHRvIHJlY29yZCAiCisJCQkJImV4ZWN1dGlvbiBsb2cuIik7CisJICBy ZXR1cm4gLTE7CisJfQorICAgICAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNv cmRfYXJjaF9saXN0X2hlYWQ7CisgICAgICByZWNvcmRfYXJjaF9saXN0X2hl YWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAgICAgIHJlY29yZF9saXN0ID0g cmVjb3JkX2FyY2hfbGlzdF90YWlsOworCisgICAgICBpZiAocmVjb3JkX2lu c25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2luc25f bWF4X251bSkKKwlyZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICAg ICAgZWxzZQorCXJlY29yZF9pbnNuX251bSsrOworICAgIH0KKworICByZXR1 cm4gcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsIChyZWNvcmRfYmVu ZWF0aF90b194ZmVyX3BhcnRpYWxfb3BzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsIGFubmV4LCByZWFkYnVm LCB3cml0ZWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2Zmc2V0LCBsZW4pOworfQorCisvKiBUaGlzIHN0cnVjdHVy ZSByZXByZXNlbnRzIGEgYnJlYWtwb2ludCBpbnNlcnRlZCB3aGlsZSB0aGUg cmVjb3JkCisgICB0YXJnZXQgaXMgYWN0aXZlLiAgV2UgdXNlIHRoaXMgdG8g a25vdyB3aGVuIHRvIGluc3RhbGwvcmVtb3ZlCisgICBicmVha3BvaW50cyBp bi9mcm9tIHRoZSB0YXJnZXQgYmVuZWF0aC4gIEZvciBleGFtcGxlLCBhIGJy ZWFrcG9pbnQKKyAgIG1heSBiZSBpbnNlcnRlZCB3aGlsZSByZWNvcmRpbmcs IGJ1dCByZW1vdmVkIHdoZW4gbm90IHJlcGxheWluZyBub3IKKyAgIHJlY29y ZGluZy4gIEluIHRoYXQgY2FzZSwgdGhlIGJyZWFrcG9pbnQgaGFkIG5vdCBi ZWVuIGluc2VydGVkIG9uCisgICB0aGUgdGFyZ2V0IGJlbmVhdGgsIHNvIHdl IHNob3VsZCBub3QgdHJ5IHRvIHJlbW92ZSBpdCB0aGVyZS4gICovCisKK3N0 cnVjdCByZWNvcmRfYnJlYWtwb2ludAoreworICAvKiBUaGUgYWRkcmVzcyBh bmQgYWRkcmVzcyBzcGFjZSB0aGUgYnJlYWtwb2ludCB3YXMgc2V0IGF0LiAg Ki8KKyAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFkZHJlc3Nfc3BhY2U7Cisg IENPUkVfQUREUiBhZGRyOworCisgIC8qIFRydWUgd2hlbiB0aGUgYnJlYWtw b2ludCBoYXMgYmVlbiBhbHNvIGluc3RhbGxlZCBpbiB0aGUgdGFyZ2V0Cisg ICAgIGJlbmVhdGguICBUaGlzIHdpbGwgYmUgZmFsc2UgZm9yIGJyZWFrcG9p bnRzIHNldCBkdXJpbmcgcmVwbGF5IG9yCisgICAgIHdoZW4gcmVjb3JkaW5n LiAgKi8KKyAgaW50IGluX3RhcmdldF9iZW5lYXRoOworfTsKKwordHlwZWRl ZiBzdHJ1Y3QgcmVjb3JkX2JyZWFrcG9pbnQgKnJlY29yZF9icmVha3BvaW50 X3A7CitERUZfVkVDX1AocmVjb3JkX2JyZWFrcG9pbnRfcCk7CisKKy8qIFRo ZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGluc2VydGVkIHdoaWxlIHRoZSByZWNv cmQgdGFyZ2V0IGlzCisgICBhY3RpdmUuICAqLworVkVDKHJlY29yZF9icmVh a3BvaW50X3ApICpyZWNvcmRfYnJlYWtwb2ludHMgPSBOVUxMOworCitzdGF0 aWMgdm9pZAorcmVjb3JkX3N5bmNfcmVjb3JkX2JyZWFrcG9pbnRzIChzdHJ1 Y3QgYnBfbG9jYXRpb24gKmxvYywgdm9pZCAqZGF0YSkKK3sKKyAgaWYgKGxv Yy0+bG9jX3R5cGUgIT0gYnBfbG9jX3NvZnR3YXJlX2JyZWFrcG9pbnQpCisg ICAgICByZXR1cm47CisKKyAgaWYgKGxvYy0+aW5zZXJ0ZWQpCisgICAgewor ICAgICAgc3RydWN0IHJlY29yZF9icmVha3BvaW50ICpicCA9IFhORVcgKHN0 cnVjdCByZWNvcmRfYnJlYWtwb2ludCk7CisKKyAgICAgIGJwLT5hZGRyID0g bG9jLT50YXJnZXRfaW5mby5wbGFjZWRfYWRkcmVzczsKKyAgICAgIGJwLT5h ZGRyZXNzX3NwYWNlID0gbG9jLT50YXJnZXRfaW5mby5wbGFjZWRfYWRkcmVz c19zcGFjZTsKKworICAgICAgYnAtPmluX3RhcmdldF9iZW5lYXRoID0gMTsK KworICAgICAgVkVDX3NhZmVfcHVzaCAocmVjb3JkX2JyZWFrcG9pbnRfcCwg cmVjb3JkX2JyZWFrcG9pbnRzLCBicCk7CisgICAgfQorfQorCisvKiBTeW5j IGV4aXN0aW5nIGJyZWFrcG9pbnRzIHRvIHJlY29yZF9icmVha3BvaW50cy4g ICovCisKK3N0YXRpYyB2b2lkCityZWNvcmRfaW5pdF9yZWNvcmRfYnJlYWtw b2ludHMgKHZvaWQpCit7CisgIFZFQ19mcmVlIChyZWNvcmRfYnJlYWtwb2lu dF9wLCByZWNvcmRfYnJlYWtwb2ludHMpOworCisgIGl0ZXJhdGVfb3Zlcl9i cF9sb2NhdGlvbnMgKHJlY29yZF9zeW5jX3JlY29yZF9icmVha3BvaW50cyk7 Cit9CisKKy8qIEJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIFJFQ09SRF9J U19SRVBMQVkuICBXZSB3aWxsIG5vdCBhY3R1YWxseQorICAgaW5zZXJ0IG9y IHJlbW92ZSBicmVha3BvaW50cyBpbiB0aGUgcmVhbCB0YXJnZXQgd2hlbiBy ZXBsYXlpbmcsIG5vcgorICAgd2hlbiByZWNvcmRpbmcuICAqLworCitzdGF0 aWMgaW50CityZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLAorCQkJICBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJw X3RndCkKK3sKKyAgc3RydWN0IHJlY29yZF9icmVha3BvaW50ICpicDsKKyAg aW50IGluX3RhcmdldF9iZW5lYXRoID0gMDsKKworICBpZiAoIVJFQ09SRF9J U19SRVBMQVkpCisgICAgeworICAgICAgLyogV2hlbiByZWNvcmRpbmcsIHdl IGN1cnJlbnRseSBhbHdheXMgc2luZ2xlLXN0ZXAsIHNvIHdlIGRvbid0CisJ IHJlYWxseSBuZWVkIHRvIGluc3RhbGwgcmVndWxhciBicmVha3BvaW50cyBp biB0aGUgaW5mZXJpb3IuCisJIEhvd2V2ZXIsIHdlIGRvIGhhdmUgdG8gaW5z ZXJ0IHNvZnR3YXJlIHNpbmdsZS1zdGVwCisJIGJyZWFrcG9pbnRzLCBpbiBj YXNlIHRoZSB0YXJnZXQgY2FuJ3QgaGFyZHdhcmUgc3RlcC4gIFRvIGtlZXAK KwkgdGhpbmdzIHNpbmdsZSwgd2UgYWx3YXlzIGluc2VydC4gICovCisgICAg ICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOworICAgICAgaW50IHJl dDsKKworICAgICAgb2xkX2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRp b25fZGlzYWJsZV9zZXQgKCk7CisgICAgICByZXQgPSByZWNvcmRfYmVuZWF0 aF90b19pbnNlcnRfYnJlYWtwb2ludCAoZ2RiYXJjaCwgYnBfdGd0KTsKKyAg ICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisgICAgICBpZiAo cmV0ICE9IDApCisJcmV0dXJuIHJldDsKKworICAgICAgaW5fdGFyZ2V0X2Jl bmVhdGggPSAxOworICAgIH0KKworICBicCA9IFhORVcgKHN0cnVjdCByZWNv cmRfYnJlYWtwb2ludCk7CisgIGJwLT5hZGRyID0gYnBfdGd0LT5wbGFjZWRf YWRkcmVzczsKKyAgYnAtPmFkZHJlc3Nfc3BhY2UgPSBicF90Z3QtPnBsYWNl ZF9hZGRyZXNzX3NwYWNlOworICBicC0+aW5fdGFyZ2V0X2JlbmVhdGggPSBp bl90YXJnZXRfYmVuZWF0aDsKKyAgVkVDX3NhZmVfcHVzaCAocmVjb3JkX2Jy ZWFrcG9pbnRfcCwgcmVjb3JkX2JyZWFrcG9pbnRzLCBicCk7CisgIHJldHVy biAwOworfQorCisvKiAidG9fcmVtb3ZlX2JyZWFrcG9pbnQiIG1ldGhvZCBm b3IgcHJvY2VzcyByZWNvcmQgdGFyZ2V0LiAgKi8KKworc3RhdGljIGludAor cmVjb3JkX3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwKKwkJCSAgc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3QpCit7 CisgIHN0cnVjdCByZWNvcmRfYnJlYWtwb2ludCAqYnA7CisgIGludCBpeDsK KworICBmb3IgKGl4ID0gMDsKKyAgICAgICBWRUNfaXRlcmF0ZSAocmVjb3Jk X2JyZWFrcG9pbnRfcCwgcmVjb3JkX2JyZWFrcG9pbnRzLCBpeCwgYnApOwor ICAgICAgICsraXgpCisgICAgeworICAgICAgaWYgKGJwLT5hZGRyID09IGJw X3RndC0+cGxhY2VkX2FkZHJlc3MKKwkgICYmIGJwLT5hZGRyZXNzX3NwYWNl ID09IGJwX3RndC0+cGxhY2VkX2FkZHJlc3Nfc3BhY2UpCisJeworCSAgaWYg KGJwLT5pbl90YXJnZXRfYmVuZWF0aCkKKwkgICAgeworCSAgICAgIHN0cnVj dCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisJICAgICAgaW50IHJldDsKKwor CSAgICAgIG9sZF9jbGVhbnVwcyA9IHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rp c2FibGVfc2V0ICgpOworCSAgICAgIHJldCA9IHJlY29yZF9iZW5lYXRoX3Rv X3JlbW92ZV9icmVha3BvaW50IChnZGJhcmNoLCBicF90Z3QpOworCSAgICAg IGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisJICAgICAgaWYgKHJl dCAhPSAwKQorCQlyZXR1cm4gcmV0OworCSAgICB9CisKKwkgIFZFQ191bm9y ZGVyZWRfcmVtb3ZlIChyZWNvcmRfYnJlYWtwb2ludF9wLCByZWNvcmRfYnJl YWtwb2ludHMsIGl4KTsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAg Z2RiX2Fzc2VydF9ub3RfcmVhY2hlZCAoInJlbW92aW5nIHVua25vd24gYnJl YWtwb2ludCIpOworfQorCisvKiAidG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSIg bWV0aG9kIGZvciBwcm9jZXNzIHJlY29yZCB0YXJnZXQuICAqLworCitzdGF0 aWMgaW50CityZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZSAodm9pZCkKK3sK KyAgcmV0dXJuIDE7Cit9CisKKy8qICJ0b19nZXRfYm9va21hcmsiIG1ldGhv ZCBmb3IgcHJvY2VzcyByZWNvcmQgYW5kIHByZWMgb3ZlciBjb3JlLiAgKi8K Kworc3RhdGljIGdkYl9ieXRlICoKK3JlY29yZF9nZXRfYm9va21hcmsgKGNo YXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgZ2RiX2J5dGUgKnJldCA9 IE5VTEw7CisKKyAgLyogUmV0dXJuIHN0cmluZ2lmaWVkIGZvcm0gb2YgaW5z dHJ1Y3Rpb24gY291bnQuICAqLworICBpZiAocmVjb3JkX2xpc3QgJiYgcmVj b3JkX2xpc3QtPnR5cGUgPT0gcmVjb3JkX2VuZCkKKyAgICByZXQgPSB4c3Ry ZHVwIChwdWxvbmdlc3QgKHJlY29yZF9saXN0LT51LmVuZC5pbnNuX251bSkp OworCisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgeworICAgICAgaWYgKHJl dCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkgICAg InJlY29yZF9nZXRfYm9va21hcmsgcmV0dXJucyAlc1xuIiwgcmV0KTsKKyAg ICAgIGVsc2UKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkgICAgInJlY29yZF9nZXRfYm9va21hcmsgcmV0dXJucyBOVUxMXG4iKTsK KyAgICB9CisgIHJldHVybiByZXQ7Cit9CisKKy8qICJ0b19nb3RvX2Jvb2tt YXJrIiBtZXRob2QgZm9yIHByb2Nlc3MgcmVjb3JkIGFuZCBwcmVjIG92ZXIg Y29yZS4gICovCisKK3N0YXRpYyB2b2lkCityZWNvcmRfZ290b19ib29rbWFy ayAoZ2RiX2J5dGUgKmJvb2ttYXJrLCBpbnQgZnJvbV90dHkpCit7CisgIHN0 cnVjdCBjbGVhbnVwICpjbGVhbnVwOworICBjaGFyICpjbWQ7CisKKyAgaWYg KHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCisJCQkicmVjb3JkX2dvdG9fYm9va21hcmsgcmVjZWl2ZXMgJXNc biIsIGJvb2ttYXJrKTsKKworICBpZiAoYm9va21hcmtbMF0gPT0gJ1wnJyB8 fCBib29rbWFya1swXSA9PSAnXCInKQorICAgIHsKKyAgICAgIGlmIChib29r bWFya1tzdHJsZW4gKGJvb2ttYXJrKSAtIDFdICE9IGJvb2ttYXJrWzBdKQor CWVycm9yIChfKCJVbmJhbGFuY2VkIHF1b3RlczogJXMiKSwgYm9va21hcmsp OworCisgICAgICAvKiBTdHJpcCB0cmFpbGluZyBxdW90ZS4gICovCisgICAg ICBib29rbWFya1tzdHJsZW4gKGJvb2ttYXJrKSAtIDFdID0gJ1wwJzsKKyAg ICAgIC8qIFN0cmlwIGxlYWRpbmcgcXVvdGUuICAqLworICAgICAgYm9va21h cmsrKzsKKyAgICAgIC8qIFBhc3MgYWxvbmcgdG8gInJlY29yZCBnb3RvIi4g ICovCisgICAgfQorCisgIGNtZCA9IHhzdHJwcmludGYgKCJyZWNvcmQgZ290 byAlcyIsIGJvb2ttYXJrKTsKKyAgY2xlYW51cCA9IG1ha2VfY2xlYW51cCAo eGZyZWUsIGNtZCk7CisKKyAgZXhlY3V0ZV9jb21tYW5kIChjbWQsIGZyb21f dHR5KTsKKworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cit9CisKK3N0YXRp YyB2b2lkCityZWNvcmRfYXN5bmMgKHZvaWQgKCpjYWxsYmFjaykgKGVudW0g aW5mZXJpb3JfZXZlbnRfdHlwZSBldmVudF90eXBlLAorCQkJCXZvaWQgKmNv bnRleHQpLCB2b2lkICpjb250ZXh0KQoreworICAvKiBJZiB3ZSdyZSBvbiB0 b3Agb2YgYSBsaW5lIHRhcmdldCAoZS5nLiwgbGludXgtbmF0LCByZW1vdGUp LCB0aGVuCisgICAgIHNldCBpdCB0byBhc3luYyBtb2RlIGFzIHdlbGwuICBX aWxsIGJlIE5VTEwgaWYgd2UncmUgc2l0dGluZyBvbgorICAgICB0b3Agb2Yg dGhlIGNvcmUgdGFyZ2V0LCBmb3IgInJlY29yZCByZXN0b3JlIi4gICovCisg IGlmIChyZWNvcmRfYmVuZWF0aF90b19hc3luYyAhPSBOVUxMKQorICAgIHJl Y29yZF9iZW5lYXRoX3RvX2FzeW5jIChjYWxsYmFjaywgY29udGV4dCk7Cit9 CisKK3N0YXRpYyBpbnQKK3JlY29yZF9jYW5fYXN5bmNfcCAodm9pZCkKK3sK KyAgLyogV2Ugb25seSBlbmFibGUgYXN5bmMgd2hlbiB0aGUgdXNlciBzcGVj aWZpY2FsbHkgYXNrcyBmb3IgaXQuICAqLworICByZXR1cm4gdGFyZ2V0X2Fz eW5jX3Blcm1pdHRlZDsKK30KKworc3RhdGljIGludAorcmVjb3JkX2lzX2Fz eW5jX3AgKHZvaWQpCit7CisgIC8qIFdlIG9ubHkgZW5hYmxlIGFzeW5jIHdo ZW4gdGhlIHVzZXIgc3BlY2lmaWNhbGx5IGFza3MgZm9yIGl0LiAgKi8KKyAg cmV0dXJuIHRhcmdldF9hc3luY19wZXJtaXR0ZWQ7Cit9CisKK3N0YXRpYyBl bnVtIGV4ZWNfZGlyZWN0aW9uX2tpbmQKK3JlY29yZF9leGVjdXRpb25fZGly ZWN0aW9uICh2b2lkKQoreworICByZXR1cm4gcmVjb3JkX2V4ZWN1dGlvbl9k aXI7Cit9CisKKy8qIFRoZSAidG9faW5mb19yZWNvcmQiIG1ldGhvZC4gICov CisKK3N0YXRpYyB2b2lkIHJlY29yZF9pbmZvIChjaGFyICphcmdzLCBpbnQg ZnJvbV90dHkpCit7CisgIHN0cnVjdCByZWNvcmRfZW50cnkgKnA7CisKKyAg aWYgKGN1cnJlbnRfdGFyZ2V0LnRvX3N0cmF0dW0gPT0gcmVjb3JkX3N0cmF0 dW0pCisgICAgeworICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisJcHJp bnRmX2ZpbHRlcmVkIChfKCJSZXBsYXkgbW9kZTpcbiIpKTsKKyAgICAgIGVs c2UKKwlwcmludGZfZmlsdGVyZWQgKF8oIlJlY29yZCBtb2RlOlxuIikpOwor CisgICAgICAvKiBGaW5kIGVudHJ5IGZvciBmaXJzdCBhY3R1YWwgaW5zdHJ1 Y3Rpb24gaW4gdGhlIGxvZy4gICovCisgICAgICBmb3IgKHAgPSByZWNvcmRf Zmlyc3QubmV4dDsKKwkgICBwICE9IE5VTEwgJiYgcC0+dHlwZSAhPSByZWNv cmRfZW5kOworCSAgIHAgPSBwLT5uZXh0KQorCTsKKworICAgICAgLyogRG8g d2UgaGF2ZSBhIGxvZyBhdCBhbGw/ICAqLworICAgICAgaWYgKHAgIT0gTlVM TCAmJiBwLT50eXBlID09IHJlY29yZF9lbmQpCisJeworCSAgLyogRGlzcGxh eSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGZpcnN0IGluc3RydWN0aW9uIGlu IHRoZSBsb2cuICAqLworCSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJMb3dlc3Qg cmVjb3JkZWQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiksCisJCQkg ICBwdWxvbmdlc3QgKHAtPnUuZW5kLmluc25fbnVtKSk7CisKKwkgIC8qIElm IGluIHJlcGxheSBtb2RlLCBkaXNwbGF5IHdoZXJlIHdlIGFyZSBpbiB0aGUg bG9nLiAgKi8KKwkgIGlmIChSRUNPUkRfSVNfUkVQTEFZKQorCSAgICBwcmlu dGZfZmlsdGVyZWQgKF8oIkN1cnJlbnQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlz ICVzLlxuIiksCisJCQkgICAgIHB1bG9uZ2VzdCAocmVjb3JkX2xpc3QtPnUu ZW5kLmluc25fbnVtKSk7CisKKwkgIC8qIERpc3BsYXkgaW5zdHJ1Y3Rpb24g bnVtYmVyIGZvciBsYXN0IGluc3RydWN0aW9uIGluIHRoZSBsb2cuICAqLwor CSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJIaWdoZXN0IHJlY29yZGVkIGluc3Ry dWN0aW9uIG51bWJlciBpcyAlcy5cbiIpLCAKKwkJCSAgIHB1bG9uZ2VzdCAo cmVjb3JkX2luc25fY291bnQpKTsKKworCSAgLyogRGlzcGxheSBsb2cgY291 bnQuICAqLworCSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJMb2cgY29udGFpbnMg JWQgaW5zdHJ1Y3Rpb25zLlxuIiksIAorCQkJICAgcmVjb3JkX2luc25fbnVt KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcHJpbnRmX2ZpbHRlcmVkIChf KCJObyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGxvZ2dlZC5cbiIpKTsKKwl9 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRmX2ZpbHRlcmVk IChfKCJ0YXJnZXQgcmVjb3JkIGlzIG5vdCBhY3RpdmUuXG4iKSk7CisgICAg fQorCisgIC8qIERpc3BsYXkgbWF4IGxvZyBzaXplLiAgKi8KKyAgcHJpbnRm X2ZpbHRlcmVkIChfKCJNYXggbG9nZ2VkIGluc3RydWN0aW9ucyBpcyAlZC5c biIpLAorCQkgICByZWNvcmRfaW5zbl9tYXhfbnVtKTsKK30KKworLyogcmVj b3JkX2dvdG9faW5zbiAtLSByZXdpbmQgdGhlIHJlY29yZCBsb2cgKGZvcndh cmQgb3IgYmFja3dhcmQsCisgICBkZXBlbmRpbmcgb24gRElSKSB0byB0aGUg Z2l2ZW4gZW50cnksIGNoYW5naW5nIHRoZSBwcm9ncmFtIHN0YXRlCisgICBj b3JyZXNwb25kaW5nbHkuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX2dv dG9faW5zbiAoc3RydWN0IHJlY29yZF9lbnRyeSAqZW50cnksCisJCSAgZW51 bSBleGVjX2RpcmVjdGlvbl9raW5kIGRpcikKK3sKKyAgc3RydWN0IGNsZWFu dXAgKnNldF9jbGVhbnVwcyA9IHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2Fi bGVfc2V0ICgpOworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0 X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJh cmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsKKworICAvKiBB c3N1bWUgZXZlcnl0aGluZyBpcyB2YWxpZDogd2Ugd2lsbCBoaXQgdGhlIGVu dHJ5LAorICAgICBhbmQgd2Ugd2lsbCBub3QgaGl0IHRoZSBlbmQgb2YgdGhl IHJlY29yZGluZy4gICovCisKKyAgaWYgKGRpciA9PSBFWEVDX0ZPUldBUkQp CisgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKKworICBk bworICAgIHsKKyAgICAgIHJlY29yZF9leGVjX2luc24gKHJlZ2NhY2hlLCBn ZGJhcmNoLCByZWNvcmRfbGlzdCk7CisgICAgICBpZiAoZGlyID09IEVYRUNf UkVWRVJTRSkKKwlyZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2Owor ICAgICAgZWxzZQorCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7 CisgICAgfSB3aGlsZSAocmVjb3JkX2xpc3QgIT0gZW50cnkpOworICBkb19j bGVhbnVwcyAoc2V0X2NsZWFudXBzKTsKK30KKworLyogVGhlICJ0b19nb3Rv X3JlY29yZCIgbWV0aG9kLiAgKi8KKworc3RhdGljIHZvaWQgcmVjb3JkX2dv dG8gKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQoreworICBzdHJ1Y3QgcmVj b3JkX2VudHJ5ICpwID0gTlVMTDsKKyAgVUxPTkdFU1QgdGFyZ2V0X2luc24g PSAwOworCisgIGlmIChhcmcgPT0gTlVMTCB8fCAqYXJnID09ICdcMCcpCisg ICAgZXJyb3IgKF8oIkNvbW1hbmQgcmVxdWlyZXMgYW4gYXJndW1lbnQgKGlu c24gbnVtYmVyIHRvIGdvIHRvKS4iKSk7CisKKyAgaWYgKHN0cm5jbXAgKGFy ZywgInN0YXJ0Iiwgc3RybGVuICgic3RhcnQiKSkgPT0gMAorICAgICAgfHwg c3RybmNtcCAoYXJnLCAiYmVnaW4iLCBzdHJsZW4gKCJiZWdpbiIpKSA9PSAw KQorICAgIHsKKyAgICAgIC8qIFNwZWNpYWwgY2FzZS4gIEZpbmQgZmlyc3Qg aW5zbi4gICovCisgICAgICBmb3IgKHAgPSAmcmVjb3JkX2ZpcnN0OyBwICE9 IE5VTEw7IHAgPSBwLT5uZXh0KQorCWlmIChwLT50eXBlID09IHJlY29yZF9l bmQpCisJICBicmVhazsKKyAgICAgIGlmIChwKQorCXRhcmdldF9pbnNuID0g cC0+dS5lbmQuaW5zbl9udW07CisgICAgfQorICBlbHNlIGlmIChzdHJuY21w IChhcmcsICJlbmQiLCBzdHJsZW4gKCJlbmQiKSkgPT0gMCkKKyAgICB7Cisg ICAgICAvKiBTcGVjaWFsIGNhc2UuICBGaW5kIGxhc3QgaW5zbi4gICovCisg ICAgICBmb3IgKHAgPSByZWNvcmRfbGlzdDsgcC0+bmV4dCAhPSBOVUxMOyBw ID0gcC0+bmV4dCkKKwk7CisgICAgICBmb3IgKDsgcCE9IE5VTEw7IHAgPSBw LT5wcmV2KQorCWlmIChwLT50eXBlID09IHJlY29yZF9lbmQpCisJICBicmVh azsKKyAgICAgIGlmIChwKQorCXRhcmdldF9pbnNuID0gcC0+dS5lbmQuaW5z bl9udW07CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogR2VuZXJh bCBjYXNlLiAgRmluZCBkZXNpZ25hdGVkIGluc24uICAqLworICAgICAgdGFy Z2V0X2luc24gPSBwYXJzZV9hbmRfZXZhbF9sb25nIChhcmcpOworCisgICAg ICBmb3IgKHAgPSAmcmVjb3JkX2ZpcnN0OyBwICE9IE5VTEw7IHAgPSBwLT5u ZXh0KQorCWlmIChwLT50eXBlID09IHJlY29yZF9lbmQgJiYgcC0+dS5lbmQu aW5zbl9udW0gPT0gdGFyZ2V0X2luc24pCisJICBicmVhazsKKyAgICB9CisK KyAgaWYgKHAgPT0gTlVMTCkKKyAgICBlcnJvciAoXygiVGFyZ2V0IGluc24g JyVzJyBub3QgZm91bmQuIiksIGFyZyk7CisgIGVsc2UgaWYgKHAgPT0gcmVj b3JkX2xpc3QpCisgICAgZXJyb3IgKF8oIkFscmVhZHkgYXQgaW5zbiAnJXMn LiIpLCBhcmcpOworICBlbHNlIGlmIChwLT51LmVuZC5pbnNuX251bSA+IHJl Y29yZF9saXN0LT51LmVuZC5pbnNuX251bSkKKyAgICB7CisgICAgICBwcmlu dGZfZmlsdGVyZWQgKF8oIkdvIGZvcndhcmQgdG8gaW5zbiBudW1iZXIgJXNc biIpLAorCQkgICAgICAgcHVsb25nZXN0ICh0YXJnZXRfaW5zbikpOworICAg ICAgcmVjb3JkX2dvdG9faW5zbiAocCwgRVhFQ19GT1JXQVJEKTsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGZfZmlsdGVyZWQgKF8oIkdv IGJhY2t3YXJkIHRvIGluc24gbnVtYmVyICVzXG4iKSwKKwkJICAgICAgIHB1 bG9uZ2VzdCAodGFyZ2V0X2luc24pKTsKKyAgICAgIHJlY29yZF9nb3RvX2lu c24gKHAsIEVYRUNfUkVWRVJTRSk7CisgICAgfQorICByZWdpc3RlcnNfY2hh bmdlZCAoKTsKKyAgcmVpbml0X2ZyYW1lX2NhY2hlICgpOworICBwcmludF9z dGFja19mcmFtZSAoZ2V0X3NlbGVjdGVkX2ZyYW1lIChOVUxMKSwgMSwgU1JD X0FORF9MT0MpOworfQorCisvKiBUaGUgInRvX2RlbGV0ZV9yZWNvcmQiIG1l dGhvZCBvZiB0YXJnZXQgcmVjb3JkLWZ1bGwuICAqLworCitzdGF0aWMgdm9p ZAorcmVjb3JkX2RlbGV0ZSAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQor eworICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBpZiAo IWZyb21fdHR5IHx8IHF1ZXJ5IChfKCJEZWxldGUgdGhlIGxvZyBmcm9tIHRo aXMgcG9pbnQgZm9yd2FyZCAiCisJCQkJImFuZCBiZWdpbiB0byByZWNvcmQg dGhlIHJ1bm5pbmcgbWVzc2FnZSAiCisJCQkJImF0IGN1cnJlbnQgUEM/Iikp KQorCXJlY29yZF9saXN0X3JlbGVhc2VfZm9sbG93aW5nIChyZWNvcmRfbGlz dCk7CisgICAgfQorICBlbHNlCisgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8o IkFscmVhZHkgYXQgZW5kIG9mIHJlY29yZCBsaXN0LlxuIikpOworfQorCitz dGF0aWMgdm9pZAoraW5pdF9yZWNvcmRfb3BzICh2b2lkKQoreworICByZWNv cmRfb3BzLnRvX3Nob3J0bmFtZSA9ICJyZWNvcmQtZnVsbCI7CisgIHJlY29y ZF9vcHMudG9fbG9uZ25hbWUgPSAiUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxh eSB0YXJnZXQiOworICByZWNvcmRfb3BzLnRvX2RvYyA9CisgICAgIkxvZyBw cm9ncmFtIHdoaWxlIGV4ZWN1dGluZyBhbmQgcmVwbGF5IGV4ZWN1dGlvbiBm cm9tIGxvZy4iOworICByZWNvcmRfb3BzLnRvX29wZW4gPSByZWNvcmRfb3Bl bjsKKyAgcmVjb3JkX29wcy50b19jbG9zZSA9IHJlY29yZF9jbG9zZTsKKyAg cmVjb3JkX29wcy50b19yZXN1bWUgPSByZWNvcmRfcmVzdW1lOworICByZWNv cmRfb3BzLnRvX3dhaXQgPSByZWNvcmRfd2FpdDsKKyAgcmVjb3JkX29wcy50 b19kaXNjb25uZWN0ID0gcmVjb3JkX2Rpc2Nvbm5lY3Q7CisgIHJlY29yZF9v cHMudG9fZGV0YWNoID0gcmVjb3JkX2RldGFjaDsKKyAgcmVjb3JkX29wcy50 b19tb3Vybl9pbmZlcmlvciA9IHJlY29yZF9tb3Vybl9pbmZlcmlvcjsKKyAg cmVjb3JkX29wcy50b19raWxsID0gcmVjb3JkX2tpbGw7CisgIHJlY29yZF9v cHMudG9fY3JlYXRlX2luZmVyaW9yID0gZmluZF9kZWZhdWx0X2NyZWF0ZV9p bmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19zdG9yZV9yZWdpc3RlcnMgPSBy ZWNvcmRfc3RvcmVfcmVnaXN0ZXJzOworICByZWNvcmRfb3BzLnRvX3hmZXJf cGFydGlhbCA9IHJlY29yZF94ZmVyX3BhcnRpYWw7CisgIHJlY29yZF9vcHMu dG9faW5zZXJ0X2JyZWFrcG9pbnQgPSByZWNvcmRfaW5zZXJ0X2JyZWFrcG9p bnQ7CisgIHJlY29yZF9vcHMudG9fcmVtb3ZlX2JyZWFrcG9pbnQgPSByZWNv cmRfcmVtb3ZlX2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9fc3RvcHBl ZF9ieV93YXRjaHBvaW50ID0gcmVjb3JkX3N0b3BwZWRfYnlfd2F0Y2hwb2lu dDsKKyAgcmVjb3JkX29wcy50b19zdG9wcGVkX2RhdGFfYWRkcmVzcyA9IHJl Y29yZF9zdG9wcGVkX2RhdGFfYWRkcmVzczsKKyAgcmVjb3JkX29wcy50b19j YW5fZXhlY3V0ZV9yZXZlcnNlID0gcmVjb3JkX2Nhbl9leGVjdXRlX3JldmVy c2U7CisgIHJlY29yZF9vcHMudG9fc3RyYXR1bSA9IHJlY29yZF9zdHJhdHVt OworICAvKiBBZGQgYm9va21hcmsgdGFyZ2V0IG1ldGhvZHMuICAqLworICBy ZWNvcmRfb3BzLnRvX2dldF9ib29rbWFyayA9IHJlY29yZF9nZXRfYm9va21h cms7CisgIHJlY29yZF9vcHMudG9fZ290b19ib29rbWFyayA9IHJlY29yZF9n b3RvX2Jvb2ttYXJrOworICByZWNvcmRfb3BzLnRvX2FzeW5jID0gcmVjb3Jk X2FzeW5jOworICByZWNvcmRfb3BzLnRvX2Nhbl9hc3luY19wID0gcmVjb3Jk X2Nhbl9hc3luY19wOworICByZWNvcmRfb3BzLnRvX2lzX2FzeW5jX3AgPSBy ZWNvcmRfaXNfYXN5bmNfcDsKKyAgcmVjb3JkX29wcy50b19leGVjdXRpb25f ZGlyZWN0aW9uID0gcmVjb3JkX2V4ZWN1dGlvbl9kaXJlY3Rpb247CisgIHJl Y29yZF9vcHMudG9faW5mb19yZWNvcmQgPSByZWNvcmRfaW5mbzsKKyAgcmVj b3JkX29wcy50b19zYXZlX3JlY29yZCA9IHJlY29yZF9zYXZlOworICByZWNv cmRfb3BzLnRvX2RlbGV0ZV9yZWNvcmQgPSByZWNvcmRfZGVsZXRlOworICBy ZWNvcmRfb3BzLnRvX2dvdG9fcmVjb3JkID0gcmVjb3JkX2dvdG87CisgIHJl Y29yZF9vcHMudG9fbWFnaWMgPSBPUFNfTUFHSUM7Cit9CisKKy8qICJ0b19y ZXN1bWUiIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KKwor c3RhdGljIHZvaWQKK3JlY29yZF9jb3JlX3Jlc3VtZSAoc3RydWN0IHRhcmdl dF9vcHMgKm9wcywgcHRpZF90IHB0aWQsIGludCBzdGVwLAorICAgICAgICAg ICAgICAgICAgICBlbnVtIGdkYl9zaWduYWwgc2lnbmFsKQoreworICByZWNv cmRfcmVzdW1lX3N0ZXAgPSBzdGVwOworICByZWNvcmRfcmVzdW1lZCA9IDE7 CisgIHJlY29yZF9leGVjdXRpb25fZGlyID0gZXhlY3V0aW9uX2RpcmVjdGlv bjsKKworICAvKiBXZSBhcmUgYWJvdXQgdG8gc3RhcnQgZXhlY3V0aW5nIHRo ZSBpbmZlcmlvciAob3Igc2ltdWxhdGUgaXQpLAorICAgICBsZXQncyByZWdp c3RlciBpdCB3aXRoIHRoZSBldmVudCBsb29wLiAgKi8KKyAgaWYgKHRhcmdl dF9jYW5fYXN5bmNfcCAoKSkKKyAgICB7CisgICAgICB0YXJnZXRfYXN5bmMg KGluZmVyaW9yX2V2ZW50X2hhbmRsZXIsIDApOworCisgICAgICAvKiBOb3Rp ZnkgdGhlIGV2ZW50IGxvb3AgdGhlcmUncyBhbiBldmVudCB0byB3YWl0IGZv ci4gICovCisgICAgICBtYXJrX2FzeW5jX2V2ZW50X2hhbmRsZXIgKHJlY29y ZF9hc3luY19pbmZlcmlvcl9ldmVudF90b2tlbik7CisgICAgfQorfQorCisv KiAidG9fa2lsbCIgbWV0aG9kIGZvciBwcmVjIG92ZXIgY29yZWZpbGUuICAq LworCitzdGF0aWMgdm9pZAorcmVjb3JkX2NvcmVfa2lsbCAoc3RydWN0IHRh cmdldF9vcHMgKm9wcykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2NvcmVfa2lsbFxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAo JnJlY29yZF9jb3JlX29wcyk7Cit9CisKKy8qICJ0b19mZXRjaF9yZWdpc3Rl cnMiIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KKworc3Rh dGljIHZvaWQKK3JlY29yZF9jb3JlX2ZldGNoX3JlZ2lzdGVycyAoc3RydWN0 IHRhcmdldF9vcHMgKm9wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJlZ25vKQoreworICBpZiAocmVnbm8gPCAw KQorICAgIHsKKyAgICAgIGludCBudW0gPSBnZGJhcmNoX251bV9yZWdzIChn ZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsKKyAgICAgIGludCBpOwor CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpICsrKQorICAgICAgICBy ZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVjb3JkX2NvcmVfcmVnYnVmICsgTUFYX1JF R0lTVEVSX1NJWkUgKiBpKTsKKyAgICB9CisgIGVsc2UKKyAgICByZWdjYWNo ZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgcmVnbm8sCisgICAgICAgICAgICAg ICAgICAgICAgICAgcmVjb3JkX2NvcmVfcmVnYnVmICsgTUFYX1JFR0lTVEVS X1NJWkUgKiByZWdubyk7Cit9CisKKy8qICJ0b19wcmVwYXJlX3RvX3N0b3Jl IiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3JlZmlsZS4gICovCisKK3N0YXRp YyB2b2lkCityZWNvcmRfY29yZV9wcmVwYXJlX3RvX3N0b3JlIChzdHJ1Y3Qg cmVnY2FjaGUgKnJlZ2NhY2hlKQoreworfQorCisvKiAidG9fc3RvcmVfcmVn aXN0ZXJzIiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3JlZmlsZS4gICovCisK K3N0YXRpYyB2b2lkCityZWNvcmRfY29yZV9zdG9yZV9yZWdpc3RlcnMgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByZWdubykKK3sKKyAgaWYgKHJlY29y ZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUpCisgICAgcmVnY2FjaGVfcmF3X2Nv bGxlY3QgKHJlZ2NhY2hlLCByZWdubywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVjb3JkX2NvcmVfcmVnYnVmICsgTUFYX1JFR0lTVEVSX1NJWkUg KiByZWdubyk7CisgIGVsc2UKKyAgICBlcnJvciAoXygiWW91IGNhbid0IGRv IHRoYXQgd2l0aG91dCBhIHByb2Nlc3MgdG8gZGVidWcuIikpOworfQorCisv KiAidG9feGZlcl9wYXJ0aWFsIiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3Jl ZmlsZS4gICovCisKK3N0YXRpYyBMT05HRVNUCityZWNvcmRfY29yZV94ZmVy X3BhcnRpYWwgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIGVudW0gdGFyZ2V0 X29iamVjdCBvYmplY3QsCisJCSAgICAgICAgICBjb25zdCBjaGFyICphbm5l eCwgZ2RiX2J5dGUgKnJlYWRidWYsCisJCSAgICAgICAgICBjb25zdCBnZGJf Ynl0ZSAqd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgTE9OR0VTVCBsZW4pCit7CisgIGlmIChvYmplY3Qg PT0gVEFSR0VUX09CSkVDVF9NRU1PUlkpCisgICAgeworICAgICAgaWYgKHJl Y29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUgfHwgIXdyaXRlYnVmKQorCXsK KwkgIHN0cnVjdCB0YXJnZXRfc2VjdGlvbiAqcDsKKworCSAgZm9yIChwID0g cmVjb3JkX2NvcmVfc3RhcnQ7IHAgPCByZWNvcmRfY29yZV9lbmQ7IHArKykK KwkgICAgeworCSAgICAgIGlmIChvZmZzZXQgPj0gcC0+YWRkcikKKwkJewor CQkgIHN0cnVjdCByZWNvcmRfY29yZV9idWZfZW50cnkgKmVudHJ5OworCQkg IFVMT05HRVNUIHNlY19vZmZzZXQ7CisKKwkJICBpZiAob2Zmc2V0ID49IHAt PmVuZGFkZHIpCisJCSAgICBjb250aW51ZTsKKworCQkgIGlmIChvZmZzZXQg KyBsZW4gPiBwLT5lbmRhZGRyKQorCQkgICAgbGVuID0gcC0+ZW5kYWRkciAt IG9mZnNldDsKKworCQkgIHNlY19vZmZzZXQgPSBvZmZzZXQgLSBwLT5hZGRy OworCisJCSAgLyogUmVhZCByZWFkYnVmIG9yIHdyaXRlIHdyaXRlYnVmIHAs IG9mZnNldCwgbGVuLiAgKi8KKwkJICAvKiBDaGVjayBmbGFncy4gICovCisJ CSAgaWYgKHAtPnRoZV9iZmRfc2VjdGlvbi0+ZmxhZ3MgJiBTRUNfQ09OU1RS VUNUT1IKKwkJICAgICAgfHwgKHAtPnRoZV9iZmRfc2VjdGlvbi0+ZmxhZ3Mg JiBTRUNfSEFTX0NPTlRFTlRTKSA9PSAwKQorCQkgICAgeworCQkgICAgICBp ZiAocmVhZGJ1ZikKKwkJCW1lbXNldCAocmVhZGJ1ZiwgMCwgbGVuKTsKKwkJ ICAgICAgcmV0dXJuIGxlbjsKKwkJICAgIH0KKwkJICAvKiBHZXQgcmVjb3Jk X2NvcmVfYnVmX2VudHJ5LiAgKi8KKwkJICBmb3IgKGVudHJ5ID0gcmVjb3Jk X2NvcmVfYnVmX2xpc3Q7IGVudHJ5OworCQkgICAgICAgZW50cnkgPSBlbnRy eS0+cHJldikKKwkJICAgIGlmIChlbnRyeS0+cCA9PSBwKQorCQkgICAgICBi cmVhazsKKwkJICBpZiAod3JpdGVidWYpCisJCSAgICB7CisJCSAgICAgIGlm ICghZW50cnkpCisJCQl7CisJCQkgIC8qIEFkZCBhIG5ldyBlbnRyeS4gICov CisJCQkgIGVudHJ5ID0gKHN0cnVjdCByZWNvcmRfY29yZV9idWZfZW50cnkg KikKKwkJCSAgICB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCByZWNvcmRfY29y ZV9idWZfZW50cnkpKTsKKwkJCSAgZW50cnktPnAgPSBwOworCQkJICBpZiAo IWJmZF9tYWxsb2NfYW5kX2dldF9zZWN0aW9uIChwLT5iZmQsCisJCQkJCQkJ ICAgcC0+dGhlX2JmZF9zZWN0aW9uLAorCQkJCQkJCSAgICZlbnRyeS0+YnVm KSkKKwkJCSAgICB7CisJCQkgICAgICB4ZnJlZSAoZW50cnkpOworCQkJICAg ICAgcmV0dXJuIDA7CisJCQkgICAgfQorCQkJICBlbnRyeS0+cHJldiA9IHJl Y29yZF9jb3JlX2J1Zl9saXN0OworCQkJICByZWNvcmRfY29yZV9idWZfbGlz dCA9IGVudHJ5OworCQkJfQorCisJCSAgICAgIG1lbWNweSAoZW50cnktPmJ1 ZiArIHNlY19vZmZzZXQsIHdyaXRlYnVmLAorCQkJICAgICAgKHNpemVfdCkg bGVuKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlm ICghZW50cnkpCisJCQlyZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9w YXJ0aWFsCisJCQkgIChyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWxf b3BzLAorCQkJICAgb2JqZWN0LCBhbm5leCwgcmVhZGJ1Ziwgd3JpdGVidWYs CisJCQkgICBvZmZzZXQsIGxlbik7CisKKwkJICAgICAgbWVtY3B5IChyZWFk YnVmLCBlbnRyeS0+YnVmICsgc2VjX29mZnNldCwKKwkJCSAgICAgIChzaXpl X3QpIGxlbik7CisJCSAgICB9CisKKwkJICByZXR1cm4gbGVuOworCQl9CisJ ICAgIH0KKworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIGVsc2UKKwllcnJv ciAoXygiWW91IGNhbid0IGRvIHRoYXQgd2l0aG91dCBhIHByb2Nlc3MgdG8g ZGVidWcuIikpOworICAgIH0KKworICByZXR1cm4gcmVjb3JkX2JlbmVhdGhf dG9feGZlcl9wYXJ0aWFsIChyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRp YWxfb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvYmplY3QsIGFubmV4LCByZWFkYnVmLCB3cml0ZWJ1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBs ZW4pOworfQorCisvKiAidG9faW5zZXJ0X2JyZWFrcG9pbnQiIG1ldGhvZCBm b3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KKworc3RhdGljIGludAorcmVj b3JkX2NvcmVfaW5zZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLAorCQkJICAgICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBf dGd0KQoreworICByZXR1cm4gMDsKK30KKworLyogInRvX3JlbW92ZV9icmVh a3BvaW50IiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3JlZmlsZS4gICovCisK K3N0YXRpYyBpbnQKK3JlY29yZF9jb3JlX3JlbW92ZV9icmVha3BvaW50IChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKwkJCSAgICAgICBzdHJ1Y3QgYnBf dGFyZ2V0X2luZm8gKmJwX3RndCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8q ICJ0b19oYXNfZXhlY3V0aW9uIiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3Jl ZmlsZS4gICovCisKK3N0YXRpYyBpbnQKK3JlY29yZF9jb3JlX2hhc19leGVj dXRpb24gKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIHB0aWRfdCB0aGVfcHRp ZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3Jl Y29yZF9jb3JlX29wcyAodm9pZCkKK3sKKyAgcmVjb3JkX2NvcmVfb3BzLnRv X3Nob3J0bmFtZSA9ICJyZWNvcmQtY29yZSI7CisgIHJlY29yZF9jb3JlX29w cy50b19sb25nbmFtZSA9ICJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRh cmdldCI7CisgIHJlY29yZF9jb3JlX29wcy50b19kb2MgPQorICAgICJMb2cg cHJvZ3JhbSB3aGlsZSBleGVjdXRpbmcgYW5kIHJlcGxheSBleGVjdXRpb24g ZnJvbSBsb2cuIjsKKyAgcmVjb3JkX2NvcmVfb3BzLnRvX29wZW4gPSByZWNv cmRfb3BlbjsKKyAgcmVjb3JkX2NvcmVfb3BzLnRvX2Nsb3NlID0gcmVjb3Jk X2Nsb3NlOworICByZWNvcmRfY29yZV9vcHMudG9fcmVzdW1lID0gcmVjb3Jk X2NvcmVfcmVzdW1lOworICByZWNvcmRfY29yZV9vcHMudG9fd2FpdCA9IHJl Y29yZF93YWl0OworICByZWNvcmRfY29yZV9vcHMudG9fa2lsbCA9IHJlY29y ZF9jb3JlX2tpbGw7CisgIHJlY29yZF9jb3JlX29wcy50b19mZXRjaF9yZWdp c3RlcnMgPSByZWNvcmRfY29yZV9mZXRjaF9yZWdpc3RlcnM7CisgIHJlY29y ZF9jb3JlX29wcy50b19wcmVwYXJlX3RvX3N0b3JlID0gcmVjb3JkX2NvcmVf cHJlcGFyZV90b19zdG9yZTsKKyAgcmVjb3JkX2NvcmVfb3BzLnRvX3N0b3Jl X3JlZ2lzdGVycyA9IHJlY29yZF9jb3JlX3N0b3JlX3JlZ2lzdGVyczsKKyAg cmVjb3JkX2NvcmVfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF9jb3Jl X3hmZXJfcGFydGlhbDsKKyAgcmVjb3JkX2NvcmVfb3BzLnRvX2luc2VydF9i cmVha3BvaW50ID0gcmVjb3JkX2NvcmVfaW5zZXJ0X2JyZWFrcG9pbnQ7Cisg IHJlY29yZF9jb3JlX29wcy50b19yZW1vdmVfYnJlYWtwb2ludCA9IHJlY29y ZF9jb3JlX3JlbW92ZV9icmVha3BvaW50OworICByZWNvcmRfY29yZV9vcHMu dG9fc3RvcHBlZF9ieV93YXRjaHBvaW50ID0gcmVjb3JkX3N0b3BwZWRfYnlf d2F0Y2hwb2ludDsKKyAgcmVjb3JkX2NvcmVfb3BzLnRvX3N0b3BwZWRfZGF0 YV9hZGRyZXNzID0gcmVjb3JkX3N0b3BwZWRfZGF0YV9hZGRyZXNzOworICBy ZWNvcmRfY29yZV9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29y ZF9jYW5fZXhlY3V0ZV9yZXZlcnNlOworICByZWNvcmRfY29yZV9vcHMudG9f aGFzX2V4ZWN1dGlvbiA9IHJlY29yZF9jb3JlX2hhc19leGVjdXRpb247Cisg IHJlY29yZF9jb3JlX29wcy50b19zdHJhdHVtID0gcmVjb3JkX3N0cmF0dW07 CisgIC8qIEFkZCBib29rbWFyayB0YXJnZXQgbWV0aG9kcy4gICovCisgIHJl Y29yZF9jb3JlX29wcy50b19nZXRfYm9va21hcmsgPSByZWNvcmRfZ2V0X2Jv b2ttYXJrOworICByZWNvcmRfY29yZV9vcHMudG9fZ290b19ib29rbWFyayA9 IHJlY29yZF9nb3RvX2Jvb2ttYXJrOworICByZWNvcmRfY29yZV9vcHMudG9f YXN5bmMgPSByZWNvcmRfYXN5bmM7CisgIHJlY29yZF9jb3JlX29wcy50b19j YW5fYXN5bmNfcCA9IHJlY29yZF9jYW5fYXN5bmNfcDsKKyAgcmVjb3JkX2Nv cmVfb3BzLnRvX2lzX2FzeW5jX3AgPSByZWNvcmRfaXNfYXN5bmNfcDsKKyAg cmVjb3JkX2NvcmVfb3BzLnRvX2V4ZWN1dGlvbl9kaXJlY3Rpb24gPSByZWNv cmRfZXhlY3V0aW9uX2RpcmVjdGlvbjsKKyAgcmVjb3JkX2NvcmVfb3BzLnRv X2luZm9fcmVjb3JkID0gcmVjb3JkX2luZm87CisgIHJlY29yZF9jb3JlX29w cy50b19zYXZlX3JlY29yZCA9IHJlY29yZF9zYXZlOworICByZWNvcmRfY29y ZV9vcHMudG9fZGVsZXRlX3JlY29yZCA9IHJlY29yZF9kZWxldGU7CisgIHJl Y29yZF9jb3JlX29wcy50b19nb3RvX3JlY29yZCA9IHJlY29yZF9nb3RvOwor ICByZWNvcmRfY29yZV9vcHMudG9fbWFnaWMgPSBPUFNfTUFHSUM7Cit9CisK Ky8qIFNldCB1cHBlciBsaW1pdCBvZiByZWNvcmQgbG9nIHNpemUuICAqLwor CitzdGF0aWMgdm9pZAorc2V0X3JlY29yZF9pbnNuX21heF9udW0gKGNoYXIg KmFyZ3MsIGludCBmcm9tX3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQg KmMpCit7CisgIGlmIChyZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9t YXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAg LyogQ291bnQgZG93biByZWNvcmRfaW5zbl9udW0gd2hpbGUgcmVsZWFzaW5n IHJlY29yZHMgZnJvbSBsaXN0LiAgKi8KKyAgICAgIHdoaWxlIChyZWNvcmRf aW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtKQorCXsKKwkgIHJlY29y ZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisJICByZWNvcmRfaW5zbl9udW0t LTsKKwl9CisgICAgfQorfQorCisvKiBSZWNvcmQgbG9nIHNhdmUtZmlsZSBm b3JtYXQKKyAgIFZlcnNpb24gMSAobmV2ZXIgcmVsZWFzZWQpCisKKyAgIEhl YWRlcjoKKyAgICAgNCBieXRlczogbWFnaWMgbnVtYmVyIGh0b25sKDB4MjAw OTA4MjkpLgorICAgICAgIE5PVEU6IGJlIHN1cmUgdG8gY2hhbmdlIHdoZW5l dmVyIHRoaXMgZmlsZSBmb3JtYXQgY2hhbmdlcyEKKworICAgUmVjb3JkczoK KyAgICAgcmVjb3JkX2VuZDoKKyAgICAgICAxIGJ5dGU6ICByZWNvcmQgdHlw ZSAocmVjb3JkX2VuZCwgc2VlIGVudW0gcmVjb3JkX3R5cGUpLgorICAgICBy ZWNvcmRfcmVnOgorICAgICAgIDEgYnl0ZTogIHJlY29yZCB0eXBlIChyZWNv cmRfcmVnLCBzZWUgZW51bSByZWNvcmRfdHlwZSkuCisgICAgICAgOCBieXRl czogcmVnaXN0ZXIgaWQgKG5ldHdvcmsgYnl0ZSBvcmRlcikuCisgICAgICAg TUFYX1JFR0lTVEVSX1NJWkUgYnl0ZXM6IHJlZ2lzdGVyIHZhbHVlLgorICAg ICByZWNvcmRfbWVtOgorICAgICAgIDEgYnl0ZTogIHJlY29yZCB0eXBlIChy ZWNvcmRfbWVtLCBzZWUgZW51bSByZWNvcmRfdHlwZSkuCisgICAgICAgOCBi eXRlczogbWVtb3J5IGxlbmd0aCAobmV0d29yayBieXRlIG9yZGVyKS4KKyAg ICAgICA4IGJ5dGVzOiBtZW1vcnkgYWRkcmVzcyAobmV0d29yayBieXRlIG9y ZGVyKS4KKyAgICAgICBuIGJ5dGVzOiBtZW1vcnkgdmFsdWUgKG4gPT0gbWVt b3J5IGxlbmd0aCkuCisKKyAgIFZlcnNpb24gMgorICAgICA0IGJ5dGVzOiBt YWdpYyBudW1iZXIgbmV0b3JkZXIzMigweDIwMDkxMDE2KS4KKyAgICAgICBO T1RFOiBiZSBzdXJlIHRvIGNoYW5nZSB3aGVuZXZlciB0aGlzIGZpbGUgZm9y bWF0IGNoYW5nZXMhCisKKyAgIFJlY29yZHM6CisgICAgIHJlY29yZF9lbmQ6 CisgICAgICAgMSBieXRlOiAgcmVjb3JkIHR5cGUgKHJlY29yZF9lbmQsIHNl ZSBlbnVtIHJlY29yZF90eXBlKS4KKyAgICAgICA0IGJ5dGVzOiBzaWduYWwK KyAgICAgICA0IGJ5dGVzOiBpbnN0cnVjdGlvbiBjb3VudAorICAgICByZWNv cmRfcmVnOgorICAgICAgIDEgYnl0ZTogIHJlY29yZCB0eXBlIChyZWNvcmRf cmVnLCBzZWUgZW51bSByZWNvcmRfdHlwZSkuCisgICAgICAgNCBieXRlczog cmVnaXN0ZXIgaWQgKG5ldHdvcmsgYnl0ZSBvcmRlcikuCisgICAgICAgbiBi eXRlczogcmVnaXN0ZXIgdmFsdWUgKG4gPT0gYWN0dWFsIHJlZ2lzdGVyIHNp emUpLgorICAgICAgICAgICAgICAgIChlZy4gNCBieXRlcyBmb3IgeDg2IGdl bmVyYWwgcmVnaXN0ZXJzKS4KKyAgICAgcmVjb3JkX21lbToKKyAgICAgICAx IGJ5dGU6ICByZWNvcmQgdHlwZSAocmVjb3JkX21lbSwgc2VlIGVudW0gcmVj b3JkX3R5cGUpLgorICAgICAgIDQgYnl0ZXM6IG1lbW9yeSBsZW5ndGggKG5l dHdvcmsgYnl0ZSBvcmRlcikuCisgICAgICAgOCBieXRlczogbWVtb3J5IGFk ZHJlc3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikuCisgICAgICAgbiBieXRlczog bWVtb3J5IHZhbHVlIChuID09IG1lbW9yeSBsZW5ndGgpLgorCisqLworCisv KiBiZmRjb3JlX3JlYWQgLS0gcmVhZCBieXRlcyBmcm9tIGEgY29yZSBmaWxl IHNlY3Rpb24uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmZGNvcmVf cmVhZCAoYmZkICpvYmZkLCBhc2VjdGlvbiAqb3NlYywgdm9pZCAqYnVmLCBp bnQgbGVuLCBpbnQgKm9mZnNldCkKK3sKKyAgaW50IHJldCA9IGJmZF9nZXRf c2VjdGlvbl9jb250ZW50cyAob2JmZCwgb3NlYywgYnVmLCAqb2Zmc2V0LCBs ZW4pOworCisgIGlmIChyZXQpCisgICAgKm9mZnNldCArPSBsZW47CisgIGVs c2UKKyAgICBlcnJvciAoXygiRmFpbGVkIHRvIHJlYWQgJWQgYnl0ZXMgZnJv bSBjb3JlIGZpbGUgJXMgKCclcycpLiIpLAorCSAgIGxlbiwgYmZkX2dldF9m aWxlbmFtZSAob2JmZCksCisJICAgYmZkX2Vycm1zZyAoYmZkX2dldF9lcnJv ciAoKSkpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90CituZXRvcmRl cjY0ICh1aW50NjRfdCBpbnB1dCkKK3sKKyAgdWludDY0X3QgcmV0OworCisg IHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgKChnZGJfYnl0ZSAqKSAmcmV0LCBz aXplb2YgKHJldCksIAorCQkJICBCRkRfRU5ESUFOX0JJRywgaW5wdXQpOwor ICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90Citu ZXRvcmRlcjMyICh1aW50MzJfdCBpbnB1dCkKK3sKKyAgdWludDMyX3QgcmV0 OworCisgIHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgKChnZGJfYnl0ZSAqKSAm cmV0LCBzaXplb2YgKHJldCksIAorCQkJICBCRkRfRU5ESUFOX0JJRywgaW5w dXQpOworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQx Nl90CituZXRvcmRlcjE2ICh1aW50MTZfdCBpbnB1dCkKK3sKKyAgdWludDE2 X3QgcmV0OworCisgIHN0b3JlX3Vuc2lnbmVkX2ludGVnZXIgKChnZGJfYnl0 ZSAqKSAmcmV0LCBzaXplb2YgKHJldCksIAorCQkJICBCRkRfRU5ESUFOX0JJ RywgaW5wdXQpOworICByZXR1cm4gcmV0OworfQorCisvKiBSZXN0b3JlIHRo ZSBleGVjdXRpb24gbG9nIGZyb20gYSBjb3JlX2JmZCBmaWxlLiAgKi8KK3N0 YXRpYyB2b2lkCityZWNvcmRfcmVzdG9yZSAodm9pZCkKK3sKKyAgdWludDMy X3QgbWFnaWM7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7Cisg IHN0cnVjdCByZWNvcmRfZW50cnkgKnJlYzsKKyAgYXNlY3Rpb24gKm9zZWM7 CisgIHVpbnQzMl90IG9zZWNfc2l6ZTsKKyAgaW50IGJmZF9vZmZzZXQgPSAw OworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworCisgIC8qIFdlIHJl c3RvcmUgdGhlIGV4ZWN1dGlvbiBsb2cgZnJvbSB0aGUgb3BlbiBjb3JlIGJm ZCwKKyAgICAgaWYgdGhlcmUgaXMgb25lLiAgKi8KKyAgaWYgKGNvcmVfYmZk ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIC8qICJyZWNvcmRfcmVzdG9y ZSIgY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gcmVjb3JkIGxpc3QgaXMgZW1w dHkuICAqLworICBnZGJfYXNzZXJ0IChyZWNvcmRfZmlyc3QubmV4dCA9PSBO VUxMKTsKKyAKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJSZXN0b3JpbmcgcmVjb3JkaW5nIGZy b20gY29yZSBmaWxlLlxuIik7CisKKyAgLyogTm93IG5lZWQgdG8gZmluZCBv dXIgc3BlY2lhbCBub3RlIHNlY3Rpb24uICAqLworICBvc2VjID0gYmZkX2dl dF9zZWN0aW9uX2J5X25hbWUgKGNvcmVfYmZkLCAibnVsbDAiKTsKKyAgaWYg KHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csICJGaW5kIHByZWNvcmQgc2VjdGlvbiAlcy5cbiIsCisJCQlvc2Vj ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7CisgIGlmIChvc2VjID09IE5V TEwpCisgICAgcmV0dXJuOworICBvc2VjX3NpemUgPSBiZmRfc2VjdGlvbl9z aXplIChjb3JlX2JmZCwgb3NlYyk7CisgIGlmIChyZWNvcmRfZGVidWcpCisg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiJXMiLCBiZmRf c2VjdGlvbl9uYW1lIChjb3JlX2JmZCwgb3NlYykpOworCisgIC8qIENoZWNr IHRoZSBtYWdpYyBjb2RlLiAgKi8KKyAgYmZkY29yZV9yZWFkIChjb3JlX2Jm ZCwgb3NlYywgJm1hZ2ljLCBzaXplb2YgKG1hZ2ljKSwgJmJmZF9vZmZzZXQp OworICBpZiAobWFnaWMgIT0gUkVDT1JEX0ZJTEVfTUFHSUMpCisgICAgZXJy b3IgKF8oIlZlcnNpb24gbWlzLW1hdGNoIG9yIGZpbGUgZm9ybWF0IGVycm9y IGluIGNvcmUgZmlsZSAlcy4iKSwKKwkgICBiZmRfZ2V0X2ZpbGVuYW1lIChj b3JlX2JmZCkpOworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSIgIFJlYWRpbmcgNC1ieXRl IG1hZ2ljIGNvb2tpZSAiCisJCQkiUkVDT1JEX0ZJTEVfTUFHSUMgKDB4JXMp XG4iLAorCQkJcGhleF9ueiAobmV0b3JkZXIzMiAobWFnaWMpLCA0KSk7CisK KyAgLyogUmVzdG9yZSB0aGUgZW50cmllcyBpbiByZWNmZCBpbnRvIHJlY29y ZF9hcmNoX2xpc3RfaGVhZCBhbmQKKyAgICAgcmVjb3JkX2FyY2hfbGlzdF90 YWlsLiAgKi8KKyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKKyAg cmVjb3JkX2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKyAgcmVjb3JkX2luc25f bnVtID0gMDsKKyAgb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwIChyZWNv cmRfYXJjaF9saXN0X2NsZWFudXBzLCAwKTsKKyAgcmVnY2FjaGUgPSBnZXRf Y3VycmVudF9yZWdjYWNoZSAoKTsKKworICB3aGlsZSAoMSkKKyAgICB7Cisg ICAgICB1aW50OF90IHJlY3R5cGU7CisgICAgICB1aW50MzJfdCByZWdudW0s IGxlbiwgc2lnbmFsLCBjb3VudDsKKyAgICAgIHVpbnQ2NF90IGFkZHI7CisK KyAgICAgIC8qIFdlIGFyZSBmaW5pc2hlZCB3aGVuIG9mZnNldCByZWFjaGVz IG9zZWNfc2l6ZS4gICovCisgICAgICBpZiAoYmZkX29mZnNldCA+PSBvc2Vj X3NpemUpCisJYnJlYWs7CisgICAgICBiZmRjb3JlX3JlYWQgKGNvcmVfYmZk LCBvc2VjLCAmcmVjdHlwZSwgc2l6ZW9mIChyZWN0eXBlKSwgJmJmZF9vZmZz ZXQpOworCisgICAgICBzd2l0Y2ggKHJlY3R5cGUpCisgICAgICAgIHsKKyAg ICAgICAgY2FzZSByZWNvcmRfcmVnOiAvKiByZWcgKi8KKyAgICAgICAgICAv KiBHZXQgcmVnaXN0ZXIgbnVtYmVyIHRvIHJlZ251bS4gICovCisgICAgICAg ICAgYmZkY29yZV9yZWFkIChjb3JlX2JmZCwgb3NlYywgJnJlZ251bSwKKwkJ CXNpemVvZiAocmVnbnVtKSwgJmJmZF9vZmZzZXQpOworCSAgcmVnbnVtID0g bmV0b3JkZXIzMiAocmVnbnVtKTsKKworICAgICAgICAgIHJlYyA9IHJlY29y ZF9yZWdfYWxsb2MgKHJlZ2NhY2hlLCByZWdudW0pOworCisgICAgICAgICAg LyogR2V0IHZhbC4gICovCisgICAgICAgICAgYmZkY29yZV9yZWFkIChjb3Jl X2JmZCwgb3NlYywgcmVjb3JkX2dldF9sb2MgKHJlYyksCisJCQlyZWMtPnUu cmVnLmxlbiwgJmJmZF9vZmZzZXQpOworCisJICBpZiAocmVjb3JkX2RlYnVn KQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ IiAgUmVhZGluZyByZWdpc3RlciAlZCAoMSAiCisJCQkJInBsdXMgJWx1IHBs dXMgJWQgYnl0ZXMpXG4iLAorCQkJCXJlYy0+dS5yZWcubnVtLAorCQkJCSh1 bnNpZ25lZCBsb25nKSBzaXplb2YgKHJlZ251bSksCisJCQkJcmVjLT51LnJl Zy5sZW4pOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgcmVj b3JkX21lbTogLyogbWVtICovCisgICAgICAgICAgLyogR2V0IGxlbi4gICov CisgICAgICAgICAgYmZkY29yZV9yZWFkIChjb3JlX2JmZCwgb3NlYywgJmxl biwgCisJCQlzaXplb2YgKGxlbiksICZiZmRfb2Zmc2V0KTsKKwkgIGxlbiA9 IG5ldG9yZGVyMzIgKGxlbik7CisKKyAgICAgICAgICAvKiBHZXQgYWRkci4g ICovCisgICAgICAgICAgYmZkY29yZV9yZWFkIChjb3JlX2JmZCwgb3NlYywg JmFkZHIsCisJCQlzaXplb2YgKGFkZHIpLCAmYmZkX29mZnNldCk7CisJICBh ZGRyID0gbmV0b3JkZXI2NCAoYWRkcik7CisKKyAgICAgICAgICByZWMgPSBy ZWNvcmRfbWVtX2FsbG9jIChhZGRyLCBsZW4pOworCisgICAgICAgICAgLyog R2V0IHZhbC4gICovCisgICAgICAgICAgYmZkY29yZV9yZWFkIChjb3JlX2Jm ZCwgb3NlYywgcmVjb3JkX2dldF9sb2MgKHJlYyksCisJCQlyZWMtPnUubWVt LmxlbiwgJmJmZF9vZmZzZXQpOworCisJICBpZiAocmVjb3JkX2RlYnVnKQor CSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIiAg UmVhZGluZyBtZW1vcnkgJXMgKDEgcGx1cyAiCisJCQkJIiVsdSBwbHVzICVs dSBwbHVzICVkIGJ5dGVzKVxuIiwKKwkJCQlwYWRkcmVzcyAoZ2V0X2N1cnJl bnRfYXJjaCAoKSwKKwkJCQkJICByZWMtPnUubWVtLmFkZHIpLAorCQkJCSh1 bnNpZ25lZCBsb25nKSBzaXplb2YgKGFkZHIpLAorCQkJCSh1bnNpZ25lZCBs b25nKSBzaXplb2YgKGxlbiksCisJCQkJcmVjLT51Lm1lbS5sZW4pOworICAg ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgcmVjb3JkX2VuZDogLyog ZW5kICovCisgICAgICAgICAgcmVjID0gcmVjb3JkX2VuZF9hbGxvYyAoKTsK KyAgICAgICAgICByZWNvcmRfaW5zbl9udW0gKys7CisKKwkgIC8qIEdldCBz aWduYWwgdmFsdWUuICAqLworCSAgYmZkY29yZV9yZWFkIChjb3JlX2JmZCwg b3NlYywgJnNpZ25hbCwgCisJCQlzaXplb2YgKHNpZ25hbCksICZiZmRfb2Zm c2V0KTsKKwkgIHNpZ25hbCA9IG5ldG9yZGVyMzIgKHNpZ25hbCk7CisJICBy ZWMtPnUuZW5kLnNpZ3ZhbCA9IHNpZ25hbDsKKworCSAgLyogR2V0IGluc24g Y291bnQuICAqLworCSAgYmZkY29yZV9yZWFkIChjb3JlX2JmZCwgb3NlYywg JmNvdW50LCAKKwkJCXNpemVvZiAoY291bnQpLCAmYmZkX29mZnNldCk7CisJ ICBjb3VudCA9IG5ldG9yZGVyMzIgKGNvdW50KTsKKwkgIHJlYy0+dS5lbmQu aW5zbl9udW0gPSBjb3VudDsKKwkgIHJlY29yZF9pbnNuX2NvdW50ID0gY291 bnQgKyAxOworCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSIgIFJlYWRpbmcgcmVjb3Jk X2VuZCAoMSArICIKKwkJCQkiJWx1ICsgJWx1IGJ5dGVzKSwgb2Zmc2V0ID09 ICVzXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHNpZ25hbCks CisJCQkJKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoY291bnQpLAorCQkJCXBh ZGRyZXNzIChnZXRfY3VycmVudF9hcmNoICgpLAorCQkJCQkgIGJmZF9vZmZz ZXQpKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgIGVycm9yIChfKCJCYWQgZW50cnkgdHlwZSBpbiBjb3JlIGZp bGUgJXMuIiksCisJCSBiZmRfZ2V0X2ZpbGVuYW1lIChjb3JlX2JmZCkpOwor ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIEFkZCBy ZWMgdG8gcmVjb3JkIGFyY2ggbGlzdC4gICovCisgICAgICByZWNvcmRfYXJj aF9saXN0X2FkZCAocmVjKTsKKyAgICB9CisKKyAgZGlzY2FyZF9jbGVhbnVw cyAob2xkX2NsZWFudXBzKTsKKworICAvKiBBZGQgcmVjb3JkX2FyY2hfbGlz dF9oZWFkIHRvIHRoZSBlbmQgb2YgcmVjb3JkIGxpc3QuICAqLworICByZWNv cmRfZmlyc3QubmV4dCA9IHJlY29yZF9hcmNoX2xpc3RfaGVhZDsKKyAgcmVj b3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gJnJlY29yZF9maXJzdDsKKyAg cmVjb3JkX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0gTlVMTDsKKyAgcmVjb3Jk X2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworCisgIC8qIFVwZGF0ZSByZWNvcmRf aW5zbl9tYXhfbnVtLiAgKi8KKyAgaWYgKHJlY29yZF9pbnNuX251bSA+IHJl Y29yZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAgcmVjb3JkX2luc25f bWF4X251bSA9IHJlY29yZF9pbnNuX251bTsKKyAgICAgIHdhcm5pbmcgKF8o IkF1dG8gaW5jcmVhc2UgcmVjb3JkL3JlcGxheSBidWZmZXIgbGltaXQgdG8g JWQuIiksCisgICAgICAgICAgICAgICByZWNvcmRfaW5zbl9tYXhfbnVtKTsK KyAgICB9CisKKyAgLyogU3VjY2VlZGVkLiAgKi8KKyAgcHJpbnRmX2ZpbHRl cmVkIChfKCJSZXN0b3JlZCByZWNvcmRzIGZyb20gY29yZSBmaWxlICVzLlxu IiksCisJCSAgIGJmZF9nZXRfZmlsZW5hbWUgKGNvcmVfYmZkKSk7CisKKyAg cHJpbnRfc3RhY2tfZnJhbWUgKGdldF9zZWxlY3RlZF9mcmFtZSAoTlVMTCks IDEsIFNSQ19BTkRfTE9DKTsKK30KKworLyogUmVzdG9yZSB0aGUgZXhlY3V0 aW9uIGxvZyBmcm9tIGEgZmlsZS4gIFdlIHVzZSBhIG1vZGlmaWVkIGVsZgor ICAgY29yZWZpbGUgZm9ybWF0LCB3aXRoIGFuIGV4dHJhIHNlY3Rpb24gZm9y IG91ciBkYXRhLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfcmVz dG9yZSAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBjb3JlX2Zp bGVfY29tbWFuZCAoYXJncywgZnJvbV90dHkpOworICByZWNvcmRfb3BlbiAo YXJncywgZnJvbV90dHkpOworfQorCisvKiBBbGlhcyBmb3IgInRhcmdldCBy ZWNvcmQiLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfc3RhcnQg KGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKGFyZ3MgIT0g TlVMTCAmJiAqYXJncyAhPSAwKQorICAgIGVycm9yIChfKCJJbnZhbGlkIGFy Z3VtZW50LiIpKTsKKworICBleGVjdXRlX2NvbW1hbmQgKCJ0YXJnZXQgcmVj b3JkLWZ1bGwiLCBmcm9tX3R0eSk7Cit9CisKKy8qIGJmZGNvcmVfd3JpdGUg LS0gd3JpdGUgYnl0ZXMgaW50byBhIGNvcmUgZmlsZSBzZWN0aW9uLiAgKi8K Kworc3RhdGljIGlubGluZSB2b2lkCitiZmRjb3JlX3dyaXRlIChiZmQgKm9i ZmQsIGFzZWN0aW9uICpvc2VjLCB2b2lkICpidWYsIGludCBsZW4sIGludCAq b2Zmc2V0KQoreworICBpbnQgcmV0ID0gYmZkX3NldF9zZWN0aW9uX2NvbnRl bnRzIChvYmZkLCBvc2VjLCBidWYsICpvZmZzZXQsIGxlbik7CisKKyAgaWYg KHJldCkKKyAgICAqb2Zmc2V0ICs9IGxlbjsKKyAgZWxzZQorICAgIGVycm9y IChfKCJGYWlsZWQgdG8gd3JpdGUgJWQgYnl0ZXMgdG8gY29yZSBmaWxlICVz ICgnJXMnKS4iKSwKKwkgICBsZW4sIGJmZF9nZXRfZmlsZW5hbWUgKG9iZmQp LAorCSAgIGJmZF9lcnJtc2cgKGJmZF9nZXRfZXJyb3IgKCkpKTsKK30KKwor c3RhdGljIHZvaWQKK3JlY29yZF9zYXZlX2NsZWFudXBzICh2b2lkICpkYXRh KQoreworICBiZmQgKm9iZmQgPSBkYXRhOworICBjaGFyICpwYXRobmFtZSA9 IHhzdHJkdXAgKGJmZF9nZXRfZmlsZW5hbWUgKG9iZmQpKTsKKworICBnZGJf YmZkX3VucmVmIChvYmZkKTsKKyAgdW5saW5rIChwYXRobmFtZSk7CisgIHhm cmVlIChwYXRobmFtZSk7Cit9CisKKy8qIFNhdmUgdGhlIGV4ZWN1dGlvbiBs b2cgdG8gYSBmaWxlLiAgV2UgdXNlIGEgbW9kaWZpZWQgZWxmIGNvcmVmaWxl CisgICBmb3JtYXQsIHdpdGggYW4gZXh0cmEgc2VjdGlvbiBmb3Igb3VyIGRh dGEuICAqLworCitzdGF0aWMgdm9pZAorcmVjb3JkX3NhdmUgKGNoYXIgKnJl Y2ZpbGVuYW1lLCBpbnQgZnJvbV90dHkpCit7CisgIHN0cnVjdCByZWNvcmRf ZW50cnkgKmN1cl9yZWNvcmRfbGlzdDsKKyAgdWludDMyX3QgbWFnaWM7Cisg IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGU7CisgIHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzOwor ICBzdHJ1Y3QgY2xlYW51cCAqc2V0X2NsZWFudXBzOworICBiZmQgKm9iZmQ7 CisgIGludCBzYXZlX3NpemUgPSAwOworICBhc2VjdGlvbiAqb3NlYyA9IE5V TEw7CisgIGludCBiZmRfb2Zmc2V0ID0gMDsKKworICAvKiBPcGVuIHRoZSBz YXZlIGZpbGUuICAqLworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlNhdmluZyBleGVjdXRpb24g bG9nIHRvIGNvcmUgZmlsZSAnJXMnXG4iLAorCQkJcmVjZmlsZW5hbWUpOwor CisgIC8qIE9wZW4gdGhlIG91dHB1dCBmaWxlLiAgKi8KKyAgb2JmZCA9IGNy ZWF0ZV9nY29yZV9iZmQgKHJlY2ZpbGVuYW1lKTsKKyAgb2xkX2NsZWFudXBz ID0gbWFrZV9jbGVhbnVwIChyZWNvcmRfc2F2ZV9jbGVhbnVwcywgb2JmZCk7 CisKKyAgLyogU2F2ZSB0aGUgY3VycmVudCByZWNvcmQgZW50cnkgdG8gImN1 cl9yZWNvcmRfbGlzdCIuICAqLworICBjdXJfcmVjb3JkX2xpc3QgPSByZWNv cmRfbGlzdDsKKworICAvKiBHZXQgdGhlIHZhbHVlcyBvZiByZWdjYWNoZSBh bmQgZ2RiYXJjaC4gICovCisgIHJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVn Y2FjaGUgKCk7CisgIGdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAocmVn Y2FjaGUpOworCisgIC8qIERpc2FibGUgdGhlIEdEQiBvcGVyYXRpb24gcmVj b3JkLiAgKi8KKyAgc2V0X2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRp b25fZGlzYWJsZV9zZXQgKCk7CisKKyAgLyogUmV2ZXJzZSBleGVjdXRlIHRv IHRoZSBiZWdpbiBvZiByZWNvcmQgbGlzdC4gICovCisgIHdoaWxlICgxKQor ICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciBiZWdpbm5pbmcgYW5kIGVuZCBv ZiBsb2cuICAqLworICAgICAgaWYgKHJlY29yZF9saXN0ID09ICZyZWNvcmRf Zmlyc3QpCisgICAgICAgIGJyZWFrOworCisgICAgICByZWNvcmRfZXhlY19p bnNuIChyZWdjYWNoZSwgZ2RiYXJjaCwgcmVjb3JkX2xpc3QpOworCisgICAg ICBpZiAocmVjb3JkX2xpc3QtPnByZXYpCisgICAgICAgIHJlY29yZF9saXN0 ID0gcmVjb3JkX2xpc3QtPnByZXY7CisgICAgfQorCisgIC8qIENvbXB1dGUg dGhlIHNpemUgbmVlZGVkIGZvciB0aGUgZXh0cmEgYmZkIHNlY3Rpb24uICAq LworICBzYXZlX3NpemUgPSA0OwkvKiBtYWdpYyBjb29raWUgKi8KKyAgZm9y IChyZWNvcmRfbGlzdCA9IHJlY29yZF9maXJzdC5uZXh0OyByZWNvcmRfbGlz dDsKKyAgICAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5uZXh0KQor ICAgIHN3aXRjaCAocmVjb3JkX2xpc3QtPnR5cGUpCisgICAgICB7CisgICAg ICBjYXNlIHJlY29yZF9lbmQ6CisJc2F2ZV9zaXplICs9IDEgKyA0ICsgNDsK KwlicmVhazsKKyAgICAgIGNhc2UgcmVjb3JkX3JlZzoKKwlzYXZlX3NpemUg Kz0gMSArIDQgKyByZWNvcmRfbGlzdC0+dS5yZWcubGVuOworCWJyZWFrOwor ICAgICAgY2FzZSByZWNvcmRfbWVtOgorCXNhdmVfc2l6ZSArPSAxICsgNCAr IDggKyByZWNvcmRfbGlzdC0+dS5tZW0ubGVuOworCWJyZWFrOworICAgICAg fQorCisgIC8qIE1ha2UgdGhlIG5ldyBiZmQgc2VjdGlvbi4gICovCisgIG9z ZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheV93aXRoX2ZsYWdzIChvYmZk LCAicHJlY29yZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTRUNfSEFTX0NPTlRFTlRTCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNFQ19SRUFET05M WSk7CisgIGlmIChvc2VjID09IE5VTEwpCisgICAgZXJyb3IgKF8oIkZhaWxl ZCB0byBjcmVhdGUgJ3ByZWNvcmQnIHNlY3Rpb24gZm9yIGNvcmVmaWxlICVz OiAlcyIpLAorCSAgIHJlY2ZpbGVuYW1lLAorICAgICAgICAgICBiZmRfZXJy bXNnIChiZmRfZ2V0X2Vycm9yICgpKSk7CisgIGJmZF9zZXRfc2VjdGlvbl9z aXplIChvYmZkLCBvc2VjLCBzYXZlX3NpemUpOworICBiZmRfc2V0X3NlY3Rp b25fdm1hIChvYmZkLCBvc2VjLCAwKTsKKyAgYmZkX3NldF9zZWN0aW9uX2Fs aWdubWVudCAob2JmZCwgb3NlYywgMCk7CisgIGJmZF9zZWN0aW9uX2xtYSAo b2JmZCwgb3NlYykgPSAwOworCisgIC8qIFNhdmUgY29yZWZpbGUgc3RhdGUu ICAqLworICB3cml0ZV9nY29yZV9maWxlIChvYmZkKTsKKworICAvKiBXcml0 ZSBvdXQgdGhlIHJlY29yZCBsb2cuICAqLworICAvKiBXcml0ZSB0aGUgbWFn aWMgY29kZS4gICovCisgIG1hZ2ljID0gUkVDT1JEX0ZJTEVfTUFHSUM7Cisg IGlmIChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorCQkJIiAgV3JpdGluZyA0LWJ5dGUgbWFnaWMgY29va2ll ICIKKwkJCSJSRUNPUkRfRklMRV9NQUdJQyAoMHglcylcbiIsCisJCSAgICAg IHBoZXhfbnogKG1hZ2ljLCA0KSk7CisgIGJmZGNvcmVfd3JpdGUgKG9iZmQs IG9zZWMsICZtYWdpYywgc2l6ZW9mIChtYWdpYyksICZiZmRfb2Zmc2V0KTsK KworICAvKiBTYXZlIHRoZSBlbnRyaWVzIHRvIHJlY2ZkIGFuZCBmb3J3YXJk IGV4ZWN1dGUgdG8gdGhlIGVuZCBvZgorICAgICByZWNvcmQgbGlzdC4gICov CisgIHJlY29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsKKyAgd2hpbGUgKDEp CisgICAgeworICAgICAgLyogU2F2ZSBlbnRyeS4gICovCisgICAgICBpZiAo cmVjb3JkX2xpc3QgIT0gJnJlY29yZF9maXJzdCkKKyAgICAgICAgeworCSAg dWludDhfdCB0eXBlOworCSAgdWludDMyX3QgcmVnbnVtLCBsZW4sIHNpZ25h bCwgY291bnQ7CisgICAgICAgICAgdWludDY0X3QgYWRkcjsKKworCSAgdHlw ZSA9IHJlY29yZF9saXN0LT50eXBlOworICAgICAgICAgIGJmZGNvcmVfd3Jp dGUgKG9iZmQsIG9zZWMsICZ0eXBlLCBzaXplb2YgKHR5cGUpLCAmYmZkX29m ZnNldCk7CisKKyAgICAgICAgICBzd2l0Y2ggKHJlY29yZF9saXN0LT50eXBl KQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSByZWNvcmRfcmVn OiAvKiByZWcgKi8KKwkgICAgICBpZiAocmVjb3JkX2RlYnVnKQorCQlmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICIgIFdyaXRp bmcgcmVnaXN0ZXIgJWQgKDEgIgorCQkJCSAgICAicGx1cyAlbHUgcGx1cyAl ZCBieXRlcylcbiIsCisJCQkJICAgIHJlY29yZF9saXN0LT51LnJlZy5udW0s CisJCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHJlZ251bSksCisJ CQkJICAgIHJlY29yZF9saXN0LT51LnJlZy5sZW4pOworCisgICAgICAgICAg ICAgIC8qIFdyaXRlIHJlZ251bS4gICovCisgICAgICAgICAgICAgIHJlZ251 bSA9IG5ldG9yZGVyMzIgKHJlY29yZF9saXN0LT51LnJlZy5udW0pOworICAg ICAgICAgICAgICBiZmRjb3JlX3dyaXRlIChvYmZkLCBvc2VjLCAmcmVnbnVt LAorCQkJICAgICBzaXplb2YgKHJlZ251bSksICZiZmRfb2Zmc2V0KTsKKwor ICAgICAgICAgICAgICAvKiBXcml0ZSByZWd2YWwuICAqLworICAgICAgICAg ICAgICBiZmRjb3JlX3dyaXRlIChvYmZkLCBvc2VjLCByZWNvcmRfZ2V0X2xv YyAocmVjb3JkX2xpc3QpLAorCQkJICAgICByZWNvcmRfbGlzdC0+dS5yZWcu bGVuLCAmYmZkX29mZnNldCk7CisgICAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgICBjYXNlIHJlY29yZF9tZW06IC8qIG1lbSAqLworCSAgICAg IGlmIChyZWNvcmRfZGVidWcpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCQkgICAgIiAgV3JpdGluZyBtZW1vcnkgJXMgKDEgcGx1 cyAiCisJCQkJICAgICIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIs CisJCQkJICAgIHBhZGRyZXNzIChnZGJhcmNoLAorCQkJCQkgICAgICByZWNv cmRfbGlzdC0+dS5tZW0uYWRkciksCisJCQkJICAgICh1bnNpZ25lZCBsb25n KSBzaXplb2YgKGFkZHIpLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykgc2l6 ZW9mIChsZW4pLAorCQkJCSAgICByZWNvcmRfbGlzdC0+dS5tZW0ubGVuKTsK KworCSAgICAgIC8qIFdyaXRlIG1lbWxlbi4gICovCisJICAgICAgbGVuID0g bmV0b3JkZXIzMiAocmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisJICAgICAg YmZkY29yZV93cml0ZSAob2JmZCwgb3NlYywgJmxlbiwgc2l6ZW9mIChsZW4p LCAmYmZkX29mZnNldCk7CisKKwkgICAgICAvKiBXcml0ZSBtZW1hZGRyLiAg Ki8KKwkgICAgICBhZGRyID0gbmV0b3JkZXI2NCAocmVjb3JkX2xpc3QtPnUu bWVtLmFkZHIpOworCSAgICAgIGJmZGNvcmVfd3JpdGUgKG9iZmQsIG9zZWMs ICZhZGRyLCAKKwkJCSAgICAgc2l6ZW9mIChhZGRyKSwgJmJmZF9vZmZzZXQp OworCisJICAgICAgLyogV3JpdGUgbWVtdmFsLiAgKi8KKwkgICAgICBiZmRj b3JlX3dyaXRlIChvYmZkLCBvc2VjLCByZWNvcmRfZ2V0X2xvYyAocmVjb3Jk X2xpc3QpLAorCQkJICAgICByZWNvcmRfbGlzdC0+dS5tZW0ubGVuLCAmYmZk X29mZnNldCk7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg ICAgIGNhc2UgcmVjb3JkX2VuZDoKKwkJaWYgKHJlY29yZF9kZWJ1ZykKKwkJ ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICAg IiAgV3JpdGluZyByZWNvcmRfZW5kICgxICsgIgorCQkJCSAgICAgICIlbHUg KyAlbHUgYnl0ZXMpXG4iLCAKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZykg c2l6ZW9mIChzaWduYWwpLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBz aXplb2YgKGNvdW50KSk7CisJCS8qIFdyaXRlIHNpZ25hbCB2YWx1ZS4gICov CisJCXNpZ25hbCA9IG5ldG9yZGVyMzIgKHJlY29yZF9saXN0LT51LmVuZC5z aWd2YWwpOworCQliZmRjb3JlX3dyaXRlIChvYmZkLCBvc2VjLCAmc2lnbmFs LAorCQkJICAgICAgIHNpemVvZiAoc2lnbmFsKSwgJmJmZF9vZmZzZXQpOwor CisJCS8qIFdyaXRlIGluc24gY291bnQuICAqLworCQljb3VudCA9IG5ldG9y ZGVyMzIgKHJlY29yZF9saXN0LT51LmVuZC5pbnNuX251bSk7CisJCWJmZGNv cmVfd3JpdGUgKG9iZmQsIG9zZWMsICZjb3VudCwKKwkJCSAgICAgICBzaXpl b2YgKGNvdW50KSwgJmJmZF9vZmZzZXQpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIEV4 ZWN1dGUgZW50cnkuICAqLworICAgICAgcmVjb3JkX2V4ZWNfaW5zbiAocmVn Y2FjaGUsIGdkYmFyY2gsIHJlY29yZF9saXN0KTsKKworICAgICAgaWYgKHJl Y29yZF9saXN0LT5uZXh0KQorICAgICAgICByZWNvcmRfbGlzdCA9IHJlY29y ZF9saXN0LT5uZXh0OworICAgICAgZWxzZQorICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgLyogUmV2ZXJzZSBleGVjdXRlIHRvIGN1cl9yZWNvcmRfbGlz dC4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIC8qIENoZWNrIGZv ciBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsb2cuICAqLworICAgICAgaWYgKHJl Y29yZF9saXN0ID09IGN1cl9yZWNvcmRfbGlzdCkKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIHJlY29yZF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNo LCByZWNvcmRfbGlzdCk7CisKKyAgICAgIGlmIChyZWNvcmRfbGlzdC0+cHJl dikKKyAgICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+cHJldjsK KyAgICB9CisKKyAgZG9fY2xlYW51cHMgKHNldF9jbGVhbnVwcyk7CisgIGdk Yl9iZmRfdW5yZWYgKG9iZmQpOworICBkaXNjYXJkX2NsZWFudXBzIChvbGRf Y2xlYW51cHMpOworCisgIC8qIFN1Y2NlZWRlZC4gICovCisgIHByaW50Zl9m aWx0ZXJlZCAoXygiU2F2ZWQgY29yZSBmaWxlICVzIHdpdGggZXhlY3V0aW9u IGxvZy5cbiIpLAorCQkgICByZWNmaWxlbmFtZSk7Cit9CisKKy8qIFRoZSAi c2V0IHJlY29yZCBmdWxsIiBjb21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQK K3NldF9yZWNvcmRfZnVsbF9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJv bV90dHkpCit7CisgIHByaW50Zl91bmZpbHRlcmVkIChfKCJcInNldCByZWNv cmQgZnVsbFwiIG11c3QgYmUgZm9sbG93ZWQgIgorCQkgICAgICAgImJ5IGFu IGFwcG9ycHJpYXRlIHN1YmNvbW1hbmQuXG4iKSk7CisgIGhlbHBfbGlzdCAo c2V0X3JlY29yZF9mdWxsX2NtZGxpc3QsICJzZXQgcmVjb3JkIGZ1bGwgIiwg YWxsX2NvbW1hbmRzLAorCSAgICAgZ2RiX3N0ZG91dCk7Cit9CisKKy8qIFRo ZSAic2hvdyByZWNvcmQgZnVsbCIgY29tbWFuZC4gICovCisKK3N0YXRpYyB2 b2lkCitzaG93X3JlY29yZF9mdWxsX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGlu dCBmcm9tX3R0eSkKK3sKKyAgY21kX3Nob3dfbGlzdCAoc2hvd19yZWNvcmRf ZnVsbF9jbWRsaXN0LCBmcm9tX3R0eSwgIiIpOworfQorCisvKiBQcm92aWRl IGEgcHJvdG90eXBlIHRvIHNpbGVuY2UgLVdtaXNzaW5nLXByb3RvdHlwZXMu ICAqLworZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6 ZV9yZWNvcmRfZnVsbDsKKwordm9pZAorX2luaXRpYWxpemVfcmVjb3JkX2Z1 bGwgKHZvaWQpCit7CisgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjOwor CisgIC8qIEluaXQgcmVjb3JkX2ZpcnN0LiAgKi8KKyAgcmVjb3JkX2ZpcnN0 LnByZXYgPSBOVUxMOworICByZWNvcmRfZmlyc3QubmV4dCA9IE5VTEw7Cisg IHJlY29yZF9maXJzdC50eXBlID0gcmVjb3JkX2VuZDsKKworICBpbml0X3Jl Y29yZF9vcHMgKCk7CisgIGFkZF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKyAg YWRkX2RlcHJlY2F0ZWRfdGFyZ2V0X2FsaWFzICgmcmVjb3JkX29wcywgInJl Y29yZCIpOworICBpbml0X3JlY29yZF9jb3JlX29wcyAoKTsKKyAgYWRkX3Rh cmdldCAoJnJlY29yZF9jb3JlX29wcyk7CisKKyAgYWRkX2NtZCAoImZ1bGwi LCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0YXJ0LAorCSAgIF8oIlN0 YXJ0IGZ1bGwgZXhlY3V0aW9uIHJlY29yZGluZy4iKSwKKwkgICAmcmVjb3Jk X2NtZGxpc3QpOworCisgIGMgPSBhZGRfY21kICgicmVzdG9yZSIsIGNsYXNz X29ic2N1cmUsIGNtZF9yZWNvcmRfcmVzdG9yZSwKKwkgICAgICAgXygiUmVz dG9yZSB0aGUgZXhlY3V0aW9uIGxvZyBmcm9tIGEgZmlsZS5cblwKK0FyZ3Vt ZW50IGlzIGZpbGVuYW1lLiAgRmlsZSBtdXN0IGJlIGNyZWF0ZWQgd2l0aCAn cmVjb3JkIHNhdmUnLiIpLAorCSAgICAgICAmcmVjb3JkX2NtZGxpc3QpOwor ICBzZXRfY21kX2NvbXBsZXRlciAoYywgZmlsZW5hbWVfY29tcGxldGVyKTsK KworICBhZGRfcHJlZml4X2NtZCAoImZ1bGwiLCBjbGFzc19zdXBwb3J0LCBz ZXRfcmVjb3JkX2Z1bGxfY29tbWFuZCwKKwkJICBfKCJTZXQgcmVjb3JkIG9w dGlvbnMiKSwgJnNldF9yZWNvcmRfZnVsbF9jbWRsaXN0LAorCQkgICJzZXQg cmVjb3JkIGZ1bGwgIiwgMCwgJnNldF9yZWNvcmRfY21kbGlzdCk7CisKKyAg YWRkX3ByZWZpeF9jbWQgKCJmdWxsIiwgY2xhc3Nfc3VwcG9ydCwgc2hvd19y ZWNvcmRfZnVsbF9jb21tYW5kLAorCQkgIF8oIlNob3cgcmVjb3JkIG9wdGlv bnMiKSwgJnNob3dfcmVjb3JkX2Z1bGxfY21kbGlzdCwKKwkJICAic2hvdyBy ZWNvcmQgZnVsbCAiLCAwLCAmc2hvd19yZWNvcmRfY21kbGlzdCk7CisKKyAg LyogUmVjb3JkIGluc3RydWN0aW9ucyBudW1iZXIgbGltaXQgY29tbWFuZC4g ICovCisgIGFkZF9zZXRzaG93X2Jvb2xlYW5fY21kICgic3RvcC1hdC1saW1p dCIsIG5vX2NsYXNzLAorCQkJICAgJnJlY29yZF9zdG9wX2F0X2xpbWl0LCBf KCJcCitTZXQgd2hldGhlciByZWNvcmQvcmVwbGF5IHN0b3BzIHdoZW4gcmVj b3JkL3JlcGxheSBidWZmZXIgYmVjb21lcyBmdWxsLiIpLCBfKCJcCitTaG93 IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wcyB3aGVuIHJlY29yZC9yZXBs YXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwKKwkJCSAgIF8oIkRlZmF1bHQg aXMgT04uXG5cCitXaGVuIE9OLCBpZiB0aGUgcmVjb3JkL3JlcGxheSBidWZm ZXIgYmVjb21lcyBmdWxsLCBhc2sgdXNlciB3aGF0IHRvIGRvLlxuXAorV2hl biBPRkYsIGlmIHRoZSByZWNvcmQvcmVwbGF5IGJ1ZmZlciBiZWNvbWVzIGZ1 bGwsXG5cCitkZWxldGUgdGhlIG9sZGVzdCByZWNvcmRlZCBpbnN0cnVjdGlv biB0byBtYWtlIHJvb20gZm9yIGVhY2ggbmV3IG9uZS4iKSwKKwkJCSAgIE5V TEwsIE5VTEwsCisJCQkgICAmc2V0X3JlY29yZF9mdWxsX2NtZGxpc3QsICZz aG93X3JlY29yZF9mdWxsX2NtZGxpc3QpOworCisgIGMgPSBhZGRfYWxpYXNf Y21kICgic3RvcC1hdC1saW1pdCIsCisJCSAgICAgImZ1bGwgc3RvcC1hdC1s aW1pdCIsIG5vX2NsYXNzLCAxLAorCQkgICAgICZzZXRfcmVjb3JkX2NtZGxp c3QpOworICBkZXByZWNhdGVfY21kIChjLCAic2V0IHJlY29yZCBmdWxsIHN0 b3AtYXQtbGltaXQiKTsKKworICBjID0gYWRkX2FsaWFzX2NtZCAoInN0b3At YXQtbGltaXQiLAorCQkgICAgICJmdWxsIHN0b3AtYXQtbGltaXQiLCBub19j bGFzcywgMSwKKwkJICAgICAmc2hvd19yZWNvcmRfY21kbGlzdCk7CisgIGRl cHJlY2F0ZV9jbWQgKGMsICJzaG93IHJlY29yZCBmdWxsIHN0b3AtYXQtbGlt aXQiKTsKKworICBhZGRfc2V0c2hvd191aW50ZWdlcl9jbWQgKCJpbnNuLW51 bWJlci1tYXgiLCBub19jbGFzcywKKwkJCSAgICAmcmVjb3JkX2luc25fbWF4 X251bSwKKwkJCSAgICBfKCJTZXQgcmVjb3JkL3JlcGxheSBidWZmZXIgbGlt aXQuIiksCisJCQkgICAgXygiU2hvdyByZWNvcmQvcmVwbGF5IGJ1ZmZlciBs aW1pdC4iKSwgXygiXAorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0 cnVjdGlvbnMgdG8gYmUgc3RvcmVkIGluIHRoZVxuXAorcmVjb3JkL3JlcGxh eSBidWZmZXIuICBaZXJvIG1lYW5zIHVubGltaXRlZC4gIERlZmF1bHQgaXMg MjAwMDAwLiIpLAorCQkJICAgIHNldF9yZWNvcmRfaW5zbl9tYXhfbnVtLAor CQkJICAgIE5VTEwsICZzZXRfcmVjb3JkX2Z1bGxfY21kbGlzdCwKKwkJCSAg ICAmc2hvd19yZWNvcmRfZnVsbF9jbWRsaXN0KTsKKworICBjID0gYWRkX2Fs aWFzX2NtZCAoImluc24tbnVtYmVyLW1heCIsCisJCSAgICAgImZ1bGwgaW5z bi1udW1iZXItbWF4Iiwgbm9fY2xhc3MsIDEsCisJCSAgICAgJnNldF9yZWNv cmRfY21kbGlzdCk7CisgIGRlcHJlY2F0ZV9jbWQgKGMsICJzZXQgcmVjb3Jk IGZ1bGwgaW5zbi1udW1iZXItbWF4Iik7CisKKyAgYyA9IGFkZF9hbGlhc19j bWQgKCJpbnNuLW51bWJlci1tYXgiLAorCQkgICAgICJmdWxsIGluc24tbnVt YmVyLW1heCIsIG5vX2NsYXNzLCAxLAorCQkgICAgICZzaG93X3JlY29yZF9j bWRsaXN0KTsKKyAgZGVwcmVjYXRlX2NtZCAoYywgInNob3cgcmVjb3JkIGZ1 bGwgaW5zbi1udW1iZXItbWF4Iik7CisKKyAgYWRkX3NldHNob3dfYm9vbGVh bl9jbWQgKCJtZW1vcnktcXVlcnkiLCBub19jbGFzcywKKwkJCSAgICZyZWNv cmRfbWVtb3J5X3F1ZXJ5LCBfKCJcCitTZXQgd2hldGhlciBxdWVyeSBpZiBQ UkVDIGNhbm5vdCByZWNvcmQgbWVtb3J5IGNoYW5nZSBvZiBuZXh0IGluc3Ry dWN0aW9uLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiXAor U2hvdyB3aGV0aGVyIHF1ZXJ5IGlmIFBSRUMgY2Fubm90IHJlY29yZCBtZW1v cnkgY2hhbmdlIG9mIG5leHQgaW5zdHJ1Y3Rpb24uIiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBfKCJcCitEZWZhdWx0IGlzIE9GRi5cblwKK1do ZW4gT04sIHF1ZXJ5IGlmIFBSRUMgY2Fubm90IHJlY29yZCBtZW1vcnkgY2hh bmdlIG9mIG5leHQgaW5zdHJ1Y3Rpb24uIiksCisJCQkgICBOVUxMLCBOVUxM LAorCQkJICAgJnNldF9yZWNvcmRfZnVsbF9jbWRsaXN0LCAmc2hvd19yZWNv cmRfZnVsbF9jbWRsaXN0KTsKKworICBjID0gYWRkX2FsaWFzX2NtZCAoIm1l bW9yeS1xdWVyeSIsCisJCSAgICAgImZ1bGwgbWVtb3J5LXF1ZXJ5Iiwgbm9f Y2xhc3MsIDEsCisJCSAgICAgJnNldF9yZWNvcmRfY21kbGlzdCk7CisgIGRl cHJlY2F0ZV9jbWQgKGMsICJzZXQgcmVjb3JkIGZ1bGwgbWVtb3J5LXF1ZXJ5 Iik7CisKKyAgYyA9IGFkZF9hbGlhc19jbWQgKCJtZW1vcnktcXVlcnkiLAor CQkgICAgICJmdWxsIG1lbW9yeS1xdWVyeSIsIG5vX2NsYXNzLCAxLAorCQkg ICAgICZzaG93X3JlY29yZF9jbWRsaXN0KTsKKyAgZGVwcmVjYXRlX2NtZCAo YywgInNob3cgcmVjb3JkIGZ1bGwgbWVtb3J5LXF1ZXJ5Iik7Cit9CmRpZmYg LS1naXQgYS9nZGIvcmVjb3JkLWZ1bGwuaCBiL2dkYi9yZWNvcmQtZnVsbC5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTA4ZGUK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcmVjb3JkLWZ1bGwuaApAQCAtMCww ICsxLDM4IEBACisvKiBQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdl dCBmb3IgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQg KEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9SRUNPUkRfRlVMTF9IXwor I2RlZmluZSBfUkVDT1JEX0ZVTExfSF8KKworI2luY2x1ZGUgInJlY29yZC5o IgorCitleHRlcm4gaW50IHJlY29yZF9tZW1vcnlfcXVlcnk7CisKK2V4dGVy biBpbnQgcmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgcmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbik7Citl eHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAodm9pZCk7Citl eHRlcm4gc3RydWN0IGNsZWFudXAgKnJlY29yZF9nZGJfb3BlcmF0aW9uX2Rp c2FibGVfc2V0ICh2b2lkKTsKKworLyogV3JhcHBlciBmb3IgdGFyZ2V0X3Jl YWRfbWVtb3J5IHRoYXQgcHJpbnRzIGEgZGVidWcgbWVzc2FnZSBpZgorICAg cmVhZGluZyBtZW1vcnkgZmFpbHMuICAqLworZXh0ZXJuIGludCByZWNvcmRf cmVhZF9tZW1vcnkgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJICAg ICAgIENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLAorCQkJ ICAgICAgIHNzaXplX3QgbGVuKTsKKworI2VuZGlmIC8qIF9SRUNPUkRfRlVM TF9IXyAqLwpkaWZmIC0tZ2l0IGEvZ2RiL3JlY29yZC5jIGIvZ2RiL3JlY29y ZC5jCmluZGV4IDFhNjg3MzguLmNmYTI2MzcgMTAwNjQ0Ci0tLSBhL2dkYi9y ZWNvcmQuYworKysgYi9nZGIvcmVjb3JkLmMKQEAgLTE4LDIxOTggKzE4LDI5 IEBACiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNs dWRlICJkZWZzLmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCiAjaW5jbHVkZSAi Z2RiY21kLmgiCi0jaW5jbHVkZSAicmVnY2FjaGUuaCIKLSNpbmNsdWRlICJn ZGJ0aHJlYWQuaCIKLSNpbmNsdWRlICJldmVudC10b3AuaCIKLSNpbmNsdWRl ICJleGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiY29tcGxldGVyLmgiCi0jaW5j bHVkZSAiYXJjaC11dGlscy5oIgotI2luY2x1ZGUgImdkYmNvcmUuaCIKLSNp bmNsdWRlICJleGVjLmgiCi0jaW5jbHVkZSAicmVjb3JkLmgiCi0jaW5jbHVk ZSAiZWxmLWJmZC5oIgotI2luY2x1ZGUgImdjb3JlLmgiCi0jaW5jbHVkZSAi ZXZlbnQtbG9vcC5oIgotI2luY2x1ZGUgImluZi1sb29wLmgiCi0jaW5jbHVk ZSAiZ2RiX2JmZC5oIgogI2luY2x1ZGUgIm9ic2VydmVyLmgiCi0KLSNpbmNs dWRlIDxzaWduYWwuaD4KLQotLyogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyAi dGFyZ2V0IHJlY29yZCIsIGFsc28ga25vd24gYXMgInByb2Nlc3MKLSAgIHJl Y29yZCBhbmQgcmVwbGF5Ii4gIFRoaXMgdGFyZ2V0IHNpdHMgb24gdG9wIG9m IGEgIm5vcm1hbCIgdGFyZ2V0Ci0gICAoYSB0YXJnZXQgdGhhdCAiaGFzIGV4 ZWN1dGlvbiIpLCBhbmQgcHJvdmlkZXMgYSByZWNvcmQgYW5kIHJlcGxheQot ICAgZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIHJldmVyc2UgZGVidWdnaW5n LgotCi0gICBUYXJnZXQgcmVjb3JkIGhhcyB0d28gbW9kZXM6IHJlY29yZGlu ZywgYW5kIHJlcGxheWluZy4KLQotICAgSW4gcmVjb3JkIG1vZGUsIHdlIGlu dGVyY2VwdCB0aGUgdG9fcmVzdW1lIGFuZCB0b193YWl0IG1ldGhvZHMuCi0g ICBXaGVuZXZlciBnZGIgcmVzdW1lcyB0aGUgdGFyZ2V0LCB3ZSBydW4gdGhl IHRhcmdldCBpbiBzaW5nbGUgc3RlcAotICAgbW9kZSwgYW5kIHdlIGJ1aWxk IHVwIGFuIGV4ZWN1dGlvbiBsb2cgaW4gd2hpY2gsIGZvciBlYWNoIGV4ZWN1 dGVkCi0gICBpbnN0cnVjdGlvbiwgd2UgcmVjb3JkIGFsbCBjaGFuZ2VzIGlu IG1lbW9yeSBhbmQgcmVnaXN0ZXIgc3RhdGUuCi0gICBUaGlzIGlzIGludmlz aWJsZSB0byB0aGUgdXNlciwgdG8gd2hvbSBpdCBqdXN0IGxvb2tzIGxpa2Ug YW4KLSAgIG9yZGluYXJ5IGRlYnVnZ2luZyBzZXNzaW9uIChleGNlcHQgZm9y IHBlcmZvcm1hbmNlIGRlZ3JlZGF0aW9uKS4KLQotICAgSW4gcmVwbGF5IG1v ZGUsIGluc3RlYWQgb2YgYWN0dWFsbHkgbGV0dGluZyB0aGUgaW5mZXJpb3Ig cnVuIGFzIGEKLSAgIHByb2Nlc3MsIHdlIHNpbXVsYXRlIGl0cyBleGVjdXRp b24gYnkgcGxheWluZyBiYWNrIHRoZSByZWNvcmRlZAotICAgZXhlY3V0aW9u IGxvZy4gIEZvciBlYWNoIGluc3RydWN0aW9uIGluIHRoZSBsb2csIHdlIHNp bXVsYXRlIHRoZQotICAgaW5zdHJ1Y3Rpb24ncyBzaWRlIGVmZmVjdHMgYnkg ZHVwbGljYXRpbmcgdGhlIGNoYW5nZXMgdGhhdCBpdCB3b3VsZAotICAgaGF2 ZSBtYWRlIG9uIG1lbW9yeSBhbmQgcmVnaXN0ZXJzLiAgKi8KLQotI2RlZmlu ZSBERUZBVUxUX1JFQ09SRF9JTlNOX01BWF9OVU0JMjAwMDAwCi0KLSNkZWZp bmUgUkVDT1JEX0lTX1JFUExBWSBcCi0gICAgIChyZWNvcmRfbGlzdC0+bmV4 dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKLQot I2RlZmluZSBSRUNPUkRfRklMRV9NQUdJQwluZXRvcmRlcjMyKDB4MjAwOTEw MTYpCi0KLS8qIFRoZXNlIGFyZSB0aGUgY29yZSBzdHJ1Y3RzIG9mIHRoZSBw cm9jZXNzIHJlY29yZCBmdW5jdGlvbmFsaXR5LgotCi0gICBBIHJlY29yZF9l bnRyeSBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUgY2hhbmdlIG9mIGEgcmVn aXN0ZXIKLSAgICgicmVjb3JkX3JlZyIpIG9yIGEgcGFydCBvZiBtZW1vcnkg KCJyZWNvcmRfbWVtIikuICBBbmQgZWFjaAotICAgaW5zdHJ1Y3Rpb24gbXVz dCBoYXZlIGEgc3RydWN0IHJlY29yZF9lbnRyeSAoInJlY29yZF9lbmQiKSB0 aGF0Ci0gICBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IHN0cnVj dCByZWNvcmRfZW50cnkgb2YgdGhpcwotICAgaW5zdHJ1Y3Rpb24uCi0KLSAg IEVhY2ggc3RydWN0IHJlY29yZF9lbnRyeSBpcyBsaW5rZWQgdG8gInJlY29y ZF9saXN0IiBieSAicHJldiIgYW5kCi0gICAibmV4dCIgcG9pbnRlcnMuICAq LwotCi1zdHJ1Y3QgcmVjb3JkX21lbV9lbnRyeQotewotICBDT1JFX0FERFIg YWRkcjsKLSAgaW50IGxlbjsKLSAgLyogU2V0IHRoaXMgZmxhZyBpZiB0YXJn ZXQgbWVtb3J5IGZvciB0aGlzIGVudHJ5Ci0gICAgIGNhbiBubyBsb25nZXIg YmUgYWNjZXNzZWQuICAqLwotICBpbnQgbWVtX2VudHJ5X25vdF9hY2Nlc3Np YmxlOwotICB1bmlvbgotICB7Ci0gICAgZ2RiX2J5dGUgKnB0cjsKLSAgICBn ZGJfYnl0ZSBidWZbc2l6ZW9mIChnZGJfYnl0ZSAqKV07Ci0gIH0gdTsKLX07 Ci0KLXN0cnVjdCByZWNvcmRfcmVnX2VudHJ5Ci17Ci0gIHVuc2lnbmVkIHNo b3J0IG51bTsKLSAgdW5zaWduZWQgc2hvcnQgbGVuOwotICB1bmlvbiAKLSAg ewotICAgIGdkYl9ieXRlICpwdHI7Ci0gICAgZ2RiX2J5dGUgYnVmWzIgKiBz aXplb2YgKGdkYl9ieXRlICopXTsKLSAgfSB1OwotfTsKLQotc3RydWN0IHJl Y29yZF9lbmRfZW50cnkKLXsKLSAgZW51bSBnZGJfc2lnbmFsIHNpZ3ZhbDsK LSAgVUxPTkdFU1QgaW5zbl9udW07Ci19OwotCi1lbnVtIHJlY29yZF90eXBl Ci17Ci0gIHJlY29yZF9lbmQgPSAwLAotICByZWNvcmRfcmVnLAotICByZWNv cmRfbWVtCi19OwotCi0vKiBUaGlzIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0 aGF0IG1ha2VzIHVwIHRoZSBleGVjdXRpb24gbG9nLgotCi0gICBUaGUgZXhl Y3V0aW9uIGxvZyBjb25zaXN0cyBvZiBhIHNpbmdsZSBsaW5rZWQgbGlzdCBv ZiBlbnRyaWVzCi0gICBvZiB0eXBlICJzdHJ1Y3QgcmVjb3JkX2VudHJ5Ii4g IEl0IGlzIGRvdWJseSBsaW5rZWQgc28gdGhhdCBpdAotICAgY2FuIGJlIHRy YXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLgotCi0gICBUaGUgc3RhcnQg b2YgdGhlIGxpc3QgaXMgYW5jaG9yZWQgYnkgYSBzdHJ1Y3QgY2FsbGVkCi0g ICAicmVjb3JkX2ZpcnN0Ii4gIFRoZSBwb2ludGVyICJyZWNvcmRfbGlzdCIg ZWl0aGVyIHBvaW50cyB0byB0aGUKLSAgIGxhc3QgZW50cnkgdGhhdCB3YXMg YWRkZWQgdG8gdGhlIGxpc3QgKGluIHJlY29yZCBtb2RlKSwgb3IgdG8gdGhl Ci0gICBuZXh0IGVudHJ5IGluIHRoZSBsaXN0IHRoYXQgd2lsbCBiZSBleGVj dXRlZCAoaW4gcmVwbGF5IG1vZGUpLgotCi0gICBFYWNoIGxpc3QgZWxlbWVu dCAoc3RydWN0IHJlY29yZF9lbnRyeSksIGluIGFkZGl0aW9uIHRvIG5leHQg YW5kCi0gICBwcmV2IHBvaW50ZXJzLCBjb25zaXN0cyBvZiBhIHVuaW9uIG9m IHRocmVlIGVudHJ5IHR5cGVzOiBtZW0sIHJlZywKLSAgIGFuZCBlbmQuICBB IGZpZWxkIGNhbGxlZCAidHlwZSIgZGV0ZXJtaW5lcyB3aGljaCBlbnRyeSB0 eXBlIGlzCi0gICByZXByZXNlbnRlZCBieSBhIGdpdmVuIGxpc3QgZWxlbWVu dC4KLQotICAgRWFjaCBpbnN0cnVjdGlvbiB0aGF0IGlzIGFkZGVkIHRvIHRo ZSBleGVjdXRpb24gbG9nIGlzIHJlcHJlc2VudGVkCi0gICBieSBhIHZhcmlh YmxlIG51bWJlciBvZiBsaXN0IGVsZW1lbnRzICgnZW50cmllcycpLiAgVGhl IGluc3RydWN0aW9uCi0gICB3aWxsIGhhdmUgb25lICJyZWciIGVudHJ5IGZv ciBlYWNoIHJlZ2lzdGVyIHRoYXQgaXMgY2hhbmdlZCBieSAKLSAgIGV4ZWN1 dGluZyB0aGUgaW5zdHJ1Y3Rpb24gKGluY2x1ZGluZyB0aGUgUEMgaW4gZXZl cnkgY2FzZSkuICBJdCAKLSAgIHdpbGwgYWxzbyBoYXZlIG9uZSAibWVtIiBl bnRyeSBmb3IgZWFjaCBtZW1vcnkgY2hhbmdlLiAgRmluYWxseSwKLSAgIGVh Y2ggaW5zdHJ1Y3Rpb24gd2lsbCBoYXZlIGFuICJlbmQiIGVudHJ5IHRoYXQg c2VwYXJhdGVzIGl0IGZyb20KLSAgIHRoZSBjaGFuZ2VzIGFzc29jaWF0ZWQg d2l0aCB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gICovCi0KLXN0cnVjdCByZWNv cmRfZW50cnkKLXsKLSAgc3RydWN0IHJlY29yZF9lbnRyeSAqcHJldjsKLSAg c3RydWN0IHJlY29yZF9lbnRyeSAqbmV4dDsKLSAgZW51bSByZWNvcmRfdHlw ZSB0eXBlOwotICB1bmlvbgotICB7Ci0gICAgLyogcmVnICovCi0gICAgc3Ry dWN0IHJlY29yZF9yZWdfZW50cnkgcmVnOwotICAgIC8qIG1lbSAqLwotICAg IHN0cnVjdCByZWNvcmRfbWVtX2VudHJ5IG1lbTsKLSAgICAvKiBlbmQgKi8K LSAgICBzdHJ1Y3QgcmVjb3JkX2VuZF9lbnRyeSBlbmQ7Ci0gIH0gdTsKLX07 CisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKIAogLyogVGhpcyBpcyB0aGUgZGVi dWcgc3dpdGNoIGZvciBwcm9jZXNzIHJlY29yZC4gICovCiB1bnNpZ25lZCBp bnQgcmVjb3JkX2RlYnVnID0gMDsKIAotLyogSWYgdHJ1ZSwgcXVlcnkgaWYg UFJFQyBjYW5ub3QgcmVjb3JkIG1lbW9yeQotICAgY2hhbmdlIG9mIG5leHQg aW5zdHJ1Y3Rpb24uICAqLwotaW50IHJlY29yZF9tZW1vcnlfcXVlcnkgPSAw OwotCi1zdHJ1Y3QgcmVjb3JkX2NvcmVfYnVmX2VudHJ5Ci17Ci0gIHN0cnVj dCByZWNvcmRfY29yZV9idWZfZW50cnkgKnByZXY7Ci0gIHN0cnVjdCB0YXJn ZXRfc2VjdGlvbiAqcDsKLSAgYmZkX2J5dGUgKmJ1ZjsKLX07Ci0KLS8qIFJl Y29yZCBidWYgd2l0aCBjb3JlIHRhcmdldC4gICovCi1zdGF0aWMgZ2RiX2J5 dGUgKnJlY29yZF9jb3JlX3JlZ2J1ZiA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0 IHRhcmdldF9zZWN0aW9uICpyZWNvcmRfY29yZV9zdGFydDsKLXN0YXRpYyBz dHJ1Y3QgdGFyZ2V0X3NlY3Rpb24gKnJlY29yZF9jb3JlX2VuZDsKLXN0YXRp YyBzdHJ1Y3QgcmVjb3JkX2NvcmVfYnVmX2VudHJ5ICpyZWNvcmRfY29yZV9i dWZfbGlzdCA9IE5VTEw7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVz IGFyZSB1c2VkIGZvciBtYW5hZ2luZyB0aGUgbGlua2VkIGxpc3QgdGhhdAot ICAgcmVwcmVzZW50cyB0aGUgZXhlY3V0aW9uIGxvZy4KLQotICAgcmVjb3Jk X2ZpcnN0IGlzIHRoZSBhbmNob3IgdGhhdCBob2xkcyBkb3duIHRoZSBiZWdp bm5pbmcgb2YgdGhlIGxpc3QuCi0KLSAgIHJlY29yZF9saXN0IHNlcnZlcyB0 d28gZnVuY3Rpb25zOgotICAgICAxKSBJbiByZWNvcmQgbW9kZSwgaXQgYW5j aG9ycyB0aGUgZW5kIG9mIHRoZSBsaXN0LgotICAgICAyKSBJbiByZXBsYXkg bW9kZSwgaXQgdHJhdmVyc2VzIHRoZSBsaXN0IGFuZCBwb2ludHMgdG8KLSAg ICAgICAgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gdGhhdCBtdXN0IGJlIGVtdWxh dGVkLgotCi0gICByZWNvcmRfYXJjaF9saXN0X2hlYWQgYW5kIHJlY29yZF9h cmNoX2xpc3RfdGFpbCBhcmUgdXNlZCB0byBtYW5hZ2UKLSAgIGEgc2VwYXJh dGUgbGlzdCwgd2hpY2ggaXMgdXNlZCB0byBidWlsZCB1cCB0aGUgY2hhbmdl IGVsZW1lbnRzIG9mCi0gICB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBpbnN0 cnVjdGlvbiBkdXJpbmcgcmVjb3JkIG1vZGUuICBXaGVuIHRoaXMKLSAgIGlu c3RydWN0aW9uIGhhcyBiZWVuIGNvbXBsZXRlbHkgYW5ub3RhdGVkIGluIHRo ZSAiYXJjaCBsaXN0IiwgaXQgCi0gICB3aWxsIGJlIGFwcGVuZGVkIHRvIHRo ZSBtYWluIGV4ZWN1dGlvbiBsb2cuICAqLwotCi1zdGF0aWMgc3RydWN0IHJl Y29yZF9lbnRyeSByZWNvcmRfZmlyc3Q7Ci1zdGF0aWMgc3RydWN0IHJlY29y ZF9lbnRyeSAqcmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0Owotc3RhdGlj IHN0cnVjdCByZWNvcmRfZW50cnkgKnJlY29yZF9hcmNoX2xpc3RfaGVhZCA9 IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHJlY29yZF9lbnRyeSAqcmVjb3JkX2Fy Y2hfbGlzdF90YWlsID0gTlVMTDsKLQotLyogMSBhc2sgdXNlci4gMCBhdXRv IGRlbGV0ZSB0aGUgbGFzdCBzdHJ1Y3QgcmVjb3JkX2VudHJ5LiAgKi8KLXN0 YXRpYyBpbnQgcmVjb3JkX3N0b3BfYXRfbGltaXQgPSAxOwotLyogTWF4aW11 bSBhbGxvd2VkIG51bWJlciBvZiBpbnNucyBpbiBleGVjdXRpb24gbG9nLiAg Ki8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjb3JkX2luc25fbWF4X251bSA9 IERFRkFVTFRfUkVDT1JEX0lOU05fTUFYX05VTTsKLS8qIEFjdHVhbCBjb3Vu dCBvZiBpbnNucyBwcmVzZW50bHkgaW4gZXhlY3V0aW9uIGxvZy4gICovCi1z dGF0aWMgaW50IHJlY29yZF9pbnNuX251bSA9IDA7Ci0vKiBDb3VudCBvZiBp bnNucyBsb2dnZWQgc28gZmFyIChtYXkgYmUgbGFyZ2VyCi0gICB0aGFuIGNv dW50IG9mIGluc25zIHByZXNlbnRseSBpbiBleGVjdXRpb24gbG9nKS4gICov Ci1zdGF0aWMgVUxPTkdFU1QgcmVjb3JkX2luc25fY291bnQ7Ci0KLS8qIFRo ZSB0YXJnZXRfb3BzIG9mIHByb2Nlc3MgcmVjb3JkLiAgKi8KLXN0YXRpYyBz dHJ1Y3QgdGFyZ2V0X29wcyByZWNvcmRfb3BzOwotc3RhdGljIHN0cnVjdCB0 YXJnZXRfb3BzIHJlY29yZF9jb3JlX29wczsKLQotLyogVGhlIGJlbmVhdGgg ZnVuY3Rpb24gcG9pbnRlcnMuICAqLwotc3RhdGljIHN0cnVjdCB0YXJnZXRf b3BzICpyZWNvcmRfYmVuZWF0aF90b19yZXN1bWVfb3BzOwotc3RhdGljIHZv aWQgKCpyZWNvcmRfYmVuZWF0aF90b19yZXN1bWUpIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqLCBwdGlkX3QsIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBnZGJfc2lnbmFsKTsKLXN0YXRpYyBz dHJ1Y3QgdGFyZ2V0X29wcyAqcmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9vcHM7 Ci1zdGF0aWMgcHRpZF90ICgqcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCkgKHN0 cnVjdCB0YXJnZXRfb3BzICosIHB0aWRfdCwKLQkJCQkJIHN0cnVjdCB0YXJn ZXRfd2FpdHN0YXR1cyAqLAotCQkJCQkgaW50KTsKLXN0YXRpYyBzdHJ1Y3Qg dGFyZ2V0X29wcyAqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJz X29wczsKLXN0YXRpYyB2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVf cmVnaXN0ZXJzKSAoc3RydWN0IHRhcmdldF9vcHMgKiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHJlZ2NhY2hlICosCi0JCQkJCQkgIGludCByZWdubyk7Ci1zdGF0aWMgc3Ry dWN0IHRhcmdldF9vcHMgKnJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlh bF9vcHM7Ci1zdGF0aWMgTE9OR0VTVCAoKnJlY29yZF9iZW5lYXRoX3RvX3hm ZXJfcGFydGlhbCkgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCi0JCQkJCQkg IGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsCi0JCQkJCQkgIGNvbnN0IGNo YXIgKmFubmV4LAotCQkJCQkJICBnZGJfYnl0ZSAqcmVhZGJ1ZiwKLQkJCQkJ CSAgY29uc3QgZ2RiX2J5dGUgKndyaXRlYnVmLAotCQkJCQkJICBVTE9OR0VT VCBvZmZzZXQsCi0JCQkJCQkgIExPTkdFU1QgbGVuKTsKLXN0YXRpYyBpbnQg KCpyZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJlYWtwb2ludCkgKHN0cnVj dCBnZGJhcmNoICosCi0JCQkJCQkgICBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g Kik7Ci1zdGF0aWMgaW50ICgqcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2Jy ZWFrcG9pbnQpIChzdHJ1Y3QgZ2RiYXJjaCAqLAotCQkJCQkJICAgc3RydWN0 IGJwX3RhcmdldF9pbmZvICopOwotc3RhdGljIGludCAoKnJlY29yZF9iZW5l YXRoX3RvX3N0b3BwZWRfYnlfd2F0Y2hwb2ludCkgKHZvaWQpOwotc3RhdGlj IGludCAoKnJlY29yZF9iZW5lYXRoX3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNz KSAoc3RydWN0IHRhcmdldF9vcHMgKiwKLQkJCQkJCSAgICAgIENPUkVfQURE UiAqKTsKLXN0YXRpYyB2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fYXN5bmMp ICh2b2lkICgqKSAoZW51bSBpbmZlcmlvcl9ldmVudF90eXBlLCB2b2lkICop LCB2b2lkICopOwotCi0vKiBBbGxvYyBhbmQgZnJlZSBmdW5jdGlvbnMgZm9y IHJlY29yZF9yZWcsIHJlY29yZF9tZW0sIGFuZCByZWNvcmRfZW5kIAotICAg ZW50cmllcy4gICovCi0KLS8qIEFsbG9jIGEgcmVjb3JkX3JlZyByZWNvcmQg ZW50cnkuICAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZW50 cnkgKgotcmVjb3JkX3JlZ19hbGxvYyAoc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgaW50IHJlZ251bSkKLXsKLSAgc3RydWN0IHJlY29yZF9lbnRyeSAq cmVjOwotICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9yZWdjYWNo ZV9hcmNoIChyZWdjYWNoZSk7Ci0KLSAgcmVjID0gKHN0cnVjdCByZWNvcmRf ZW50cnkgKikgeGNhbGxvYyAoMSwgc2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2Vu dHJ5KSk7Ci0gIHJlYy0+dHlwZSA9IHJlY29yZF9yZWc7Ci0gIHJlYy0+dS5y ZWcubnVtID0gcmVnbnVtOwotICByZWMtPnUucmVnLmxlbiA9IHJlZ2lzdGVy X3NpemUgKGdkYmFyY2gsIHJlZ251bSk7Ci0gIGlmIChyZWMtPnUucmVnLmxl biA+IHNpemVvZiAocmVjLT51LnJlZy51LmJ1ZikpCi0gICAgcmVjLT51LnJl Zy51LnB0ciA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChyZWMtPnUucmVnLmxl bik7Ci0KLSAgcmV0dXJuIHJlYzsKLX0KLQotLyogRnJlZSBhIHJlY29yZF9y ZWcgcmVjb3JkIGVudHJ5LiAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1y ZWNvcmRfcmVnX3JlbGVhc2UgKHN0cnVjdCByZWNvcmRfZW50cnkgKnJlYykK LXsKLSAgZ2RiX2Fzc2VydCAocmVjLT50eXBlID09IHJlY29yZF9yZWcpOwot ICBpZiAocmVjLT51LnJlZy5sZW4gPiBzaXplb2YgKHJlYy0+dS5yZWcudS5i dWYpKQotICAgIHhmcmVlIChyZWMtPnUucmVnLnUucHRyKTsKLSAgeGZyZWUg KHJlYyk7Ci19Ci0KLS8qIEFsbG9jIGEgcmVjb3JkX21lbSByZWNvcmQgZW50 cnkuICAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZWNvcmRfZW50cnkg KgotcmVjb3JkX21lbV9hbGxvYyAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4p Ci17Ci0gIHN0cnVjdCByZWNvcmRfZW50cnkgKnJlYzsKLQotICByZWMgPSAo c3RydWN0IHJlY29yZF9lbnRyeSAqKSB4Y2FsbG9jICgxLCBzaXplb2YgKHN0 cnVjdCByZWNvcmRfZW50cnkpKTsKLSAgcmVjLT50eXBlID0gcmVjb3JkX21l bTsKLSAgcmVjLT51Lm1lbS5hZGRyID0gYWRkcjsKLSAgcmVjLT51Lm1lbS5s ZW4gPSBsZW47Ci0gIGlmIChyZWMtPnUubWVtLmxlbiA+IHNpemVvZiAocmVj LT51Lm1lbS51LmJ1ZikpCi0gICAgcmVjLT51Lm1lbS51LnB0ciA9IChnZGJf Ynl0ZSAqKSB4bWFsbG9jIChsZW4pOwotCi0gIHJldHVybiByZWM7Ci19Ci0K LS8qIEZyZWUgYSByZWNvcmRfbWVtIHJlY29yZCBlbnRyeS4gICovCi0KLXN0 YXRpYyBpbmxpbmUgdm9pZAotcmVjb3JkX21lbV9yZWxlYXNlIChzdHJ1Y3Qg cmVjb3JkX2VudHJ5ICpyZWMpCi17Ci0gIGdkYl9hc3NlcnQgKHJlYy0+dHlw ZSA9PSByZWNvcmRfbWVtKTsKLSAgaWYgKHJlYy0+dS5tZW0ubGVuID4gc2l6 ZW9mIChyZWMtPnUubWVtLnUuYnVmKSkKLSAgICB4ZnJlZSAocmVjLT51Lm1l bS51LnB0cik7Ci0gIHhmcmVlIChyZWMpOwotfQotCi0vKiBBbGxvYyBhIHJl Y29yZF9lbmQgcmVjb3JkIGVudHJ5LiAgKi8KLQotc3RhdGljIGlubGluZSBz dHJ1Y3QgcmVjb3JkX2VudHJ5ICoKLXJlY29yZF9lbmRfYWxsb2MgKHZvaWQp Ci17Ci0gIHN0cnVjdCByZWNvcmRfZW50cnkgKnJlYzsKLQotICByZWMgPSAo c3RydWN0IHJlY29yZF9lbnRyeSAqKSB4Y2FsbG9jICgxLCBzaXplb2YgKHN0 cnVjdCByZWNvcmRfZW50cnkpKTsKLSAgcmVjLT50eXBlID0gcmVjb3JkX2Vu ZDsKLQotICByZXR1cm4gcmVjOwotfQotCi0vKiBGcmVlIGEgcmVjb3JkX2Vu ZCByZWNvcmQgZW50cnkuICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJl Y29yZF9lbmRfcmVsZWFzZSAoc3RydWN0IHJlY29yZF9lbnRyeSAqcmVjKQot ewotICB4ZnJlZSAocmVjKTsKLX0KLQotLyogRnJlZSBvbmUgcmVjb3JkIGVu dHJ5LCBhbnkgdHlwZS4KLSAgIFJldHVybiBlbnRyeS0+dHlwZSwgaW4gY2Fz ZSBjYWxsZXIgd2FudHMgdG8ga25vdy4gICovCi0KLXN0YXRpYyBpbmxpbmUg ZW51bSByZWNvcmRfdHlwZQotcmVjb3JkX2VudHJ5X3JlbGVhc2UgKHN0cnVj dCByZWNvcmRfZW50cnkgKnJlYykKLXsKLSAgZW51bSByZWNvcmRfdHlwZSB0 eXBlID0gcmVjLT50eXBlOwotCi0gIHN3aXRjaCAodHlwZSkgewotICBjYXNl IHJlY29yZF9yZWc6Ci0gICAgcmVjb3JkX3JlZ19yZWxlYXNlIChyZWMpOwot ICAgIGJyZWFrOwotICBjYXNlIHJlY29yZF9tZW06Ci0gICAgcmVjb3JkX21l bV9yZWxlYXNlIChyZWMpOwotICAgIGJyZWFrOwotICBjYXNlIHJlY29yZF9l bmQ6Ci0gICAgcmVjb3JkX2VuZF9yZWxlYXNlIChyZWMpOwotICAgIGJyZWFr OwotICB9Ci0gIHJldHVybiB0eXBlOwotfQorc3RydWN0IGNtZF9saXN0X2Vs ZW1lbnQgKnJlY29yZF9jbWRsaXN0ID0gTlVMTDsKK3N0cnVjdCBjbWRfbGlz dF9lbGVtZW50ICpzZXRfcmVjb3JkX2NtZGxpc3QgPSBOVUxMOworc3RydWN0 IGNtZF9saXN0X2VsZW1lbnQgKnNob3dfcmVjb3JkX2NtZGxpc3QgPSBOVUxM Oworc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmluZm9fcmVjb3JkX2NtZGxp c3QgPSBOVUxMOwogCi0vKiBGcmVlIGFsbCByZWNvcmQgZW50cmllcyBpbiBs aXN0IHBvaW50ZWQgdG8gYnkgUkVDLiAgKi8KKy8qIENoZWNrIHRoYXQgcmVj b3JkaW5nIGlzIGFjdGl2ZS4gIFRocm93IGFuIGVycm9yLCBpZiBpdCBpc24n dC4gICovCiAKIHN0YXRpYyB2b2lkCi1yZWNvcmRfbGlzdF9yZWxlYXNlIChz dHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWMpCityZXF1aXJlX3JlY29yZCAodm9p ZCkKIHsKLSAgaWYgKCFyZWMpCisgIGlmIChSRUNPUkRfSVNfVVNFRCkKICAg ICByZXR1cm47CiAKLSAgd2hpbGUgKHJlYy0+bmV4dCkKLSAgICByZWMgPSBy ZWMtPm5leHQ7Ci0KLSAgd2hpbGUgKHJlYy0+cHJldikKLSAgICB7Ci0gICAg ICByZWMgPSByZWMtPnByZXY7Ci0gICAgICByZWNvcmRfZW50cnlfcmVsZWFz ZSAocmVjLT5uZXh0KTsKLSAgICB9Ci0KLSAgaWYgKHJlYyA9PSAmcmVjb3Jk X2ZpcnN0KQotICAgIHsKLSAgICAgIHJlY29yZF9pbnNuX251bSA9IDA7Ci0g ICAgICByZWNvcmRfZmlyc3QubmV4dCA9IE5VTEw7Ci0gICAgfQotICBlbHNl Ci0gICAgcmVjb3JkX2VudHJ5X3JlbGVhc2UgKHJlYyk7Ci19Ci0KLS8qIEZy ZWUgYWxsIHJlY29yZCBlbnRyaWVzIGZvcndhcmQgb2YgdGhlIGdpdmVuIGxp c3QgcG9zaXRpb24uICAqLwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX2xpc3Rf cmVsZWFzZV9mb2xsb3dpbmcgKHN0cnVjdCByZWNvcmRfZW50cnkgKnJlYykK LXsKLSAgc3RydWN0IHJlY29yZF9lbnRyeSAqdG1wID0gcmVjLT5uZXh0Owot Ci0gIHJlYy0+bmV4dCA9IE5VTEw7Ci0gIHdoaWxlICh0bXApCi0gICAgewot ICAgICAgcmVjID0gdG1wLT5uZXh0OwotICAgICAgaWYgKHJlY29yZF9lbnRy eV9yZWxlYXNlICh0bXApID09IHJlY29yZF9lbmQpCi0JewotCSAgcmVjb3Jk X2luc25fbnVtLS07Ci0JICByZWNvcmRfaW5zbl9jb3VudC0tOwotCX0KLSAg ICAgIHRtcCA9IHJlYzsKLSAgICB9Ci19Ci0KLS8qIERlbGV0ZSB0aGUgZmly c3QgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cs IHRvIG1ha2UKLSAgIHJvb20gZm9yIGFkZGluZyBhIG5ldyBpbnN0cnVjdGlv biBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCi0KLSAgIE5vdGUgLS0gdGhpcyBm dW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgcmVjb3JkX2luc25fbnVtLiAgKi8K LQotc3RhdGljIHZvaWQKLXJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKHZv aWQpCi17Ci0gIHN0cnVjdCByZWNvcmRfZW50cnkgKnRtcDsKLQotICBpZiAo IXJlY29yZF9maXJzdC5uZXh0KQotICAgIHJldHVybjsKLQotICAvKiBMb29w IHVudGlsIGEgcmVjb3JkX2VuZC4gICovCi0gIHdoaWxlICgxKQotICAgIHsK LSAgICAgIC8qIEN1dCByZWNvcmRfZmlyc3QubmV4dCBvdXQgb2YgdGhlIGxp bmtlZCBsaXN0LiAgKi8KLSAgICAgIHRtcCA9IHJlY29yZF9maXJzdC5uZXh0 OwotICAgICAgcmVjb3JkX2ZpcnN0Lm5leHQgPSB0bXAtPm5leHQ7Ci0gICAg ICB0bXAtPm5leHQtPnByZXYgPSAmcmVjb3JkX2ZpcnN0OwotCi0gICAgICAv KiB0bXAgaXMgbm93IGlzb2xhdGVkLCBhbmQgY2FuIGJlIGRlbGV0ZWQuICAq LwotICAgICAgaWYgKHJlY29yZF9lbnRyeV9yZWxlYXNlICh0bXApID09IHJl Y29yZF9lbmQpCi0JYnJlYWs7CS8qIEVuZCBsb29wIGF0IGZpcnN0IHJlY29y ZF9lbmQuICAqLwotCi0gICAgICBpZiAoIXJlY29yZF9maXJzdC5uZXh0KQot CXsKLQkgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA9PSAxKTsKLQkg IGJyZWFrOwkvKiBFbmQgbG9vcCB3aGVuIGxpc3QgaXMgZW1wdHkuICAqLwot CX0KLSAgICB9Ci19Ci0KLS8qIEFkZCBhIHN0cnVjdCByZWNvcmRfZW50cnkg dG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCi0KLXN0YXRpYyB2b2lkCi1yZWNv cmRfYXJjaF9saXN0X2FkZCAoc3RydWN0IHJlY29yZF9lbnRyeSAqcmVjKQot ewotICBpZiAocmVjb3JkX2RlYnVnID4gMSkKLSAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCi0JCQkiUHJvY2VzcyByZWNvcmQ6IHJlY29y ZF9hcmNoX2xpc3RfYWRkICVzLlxuIiwKLQkJCWhvc3RfYWRkcmVzc190b19z dHJpbmcgKHJlYykpOwotCi0gIGlmIChyZWNvcmRfYXJjaF9saXN0X3RhaWwp Ci0gICAgewotICAgICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0g cmVjOwotICAgICAgcmVjLT5wcmV2ID0gcmVjb3JkX2FyY2hfbGlzdF90YWls OwotICAgICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gcmVjOwotICAgIH0K LSAgZWxzZQotICAgIHsKLSAgICAgIHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9 IHJlYzsKLSAgICAgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsKLSAg ICB9Ci19Ci0KLS8qIFJldHVybiB0aGUgdmFsdWUgc3RvcmFnZSBsb2NhdGlv biBvZiBhIHJlY29yZCBlbnRyeS4gICovCi1zdGF0aWMgaW5saW5lIGdkYl9i eXRlICoKLXJlY29yZF9nZXRfbG9jIChzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpy ZWMpCi17Ci0gIHN3aXRjaCAocmVjLT50eXBlKSB7Ci0gIGNhc2UgcmVjb3Jk X21lbToKLSAgICBpZiAocmVjLT51Lm1lbS5sZW4gPiBzaXplb2YgKHJlYy0+ dS5tZW0udS5idWYpKQotICAgICAgcmV0dXJuIHJlYy0+dS5tZW0udS5wdHI7 Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlYy0+dS5tZW0udS5idWY7Ci0g IGNhc2UgcmVjb3JkX3JlZzoKLSAgICBpZiAocmVjLT51LnJlZy5sZW4gPiBz aXplb2YgKHJlYy0+dS5yZWcudS5idWYpKQotICAgICAgcmV0dXJuIHJlYy0+ dS5yZWcudS5wdHI7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIHJlYy0+dS5y ZWcudS5idWY7Ci0gIGNhc2UgcmVjb3JkX2VuZDoKLSAgZGVmYXVsdDoKLSAg ICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVkICgidW5leHBlY3RlZCByZWNvcmRf ZW50cnkgdHlwZSIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8q IFJlY29yZCB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciBOVU0gdG8gcmVjb3Jk X2FyY2hfbGlzdC4gICovCi0KLWludAotcmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVtKQot ewotICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWM7Ci0KLSAgaWYgKHJlY29y ZF9kZWJ1ZyA+IDEpCi0gICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAotCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgcmVnaXN0ZXIgbnVtID0g JWQgdG8gIgotCQkJInJlY29yZCBsaXN0LlxuIiwKLQkJCXJlZ251bSk7Ci0K LSAgcmVjID0gcmVjb3JkX3JlZ19hbGxvYyAocmVnY2FjaGUsIHJlZ251bSk7 Ci0KLSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCByZWdudW0sIHJl Y29yZF9nZXRfbG9jIChyZWMpKTsKLQotICByZWNvcmRfYXJjaF9saXN0X2Fk ZCAocmVjKTsKLQotICByZXR1cm4gMDsKLX0KLQotaW50Ci1yZWNvcmRfcmVh ZF9tZW1vcnkgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotCQkgICAgQ09S RV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsCi0JCSAgICBzc2l6 ZV90IGxlbikKLXsKLSAgaW50IHJldCA9IHRhcmdldF9yZWFkX21lbW9yeSAo bWVtYWRkciwgbXlhZGRyLCBsZW4pOwotCi0gIGlmIChyZXQgJiYgcmVjb3Jk X2RlYnVnKQotICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJl Y29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgIgotCQkJICJhdCBhZGRyICVz IGxlbiA9ICVsZC5cbiIpLAotCQkgICAgICAgcGFkZHJlc3MgKGdkYmFyY2gs IG1lbWFkZHIpLCAobG9uZykgbGVuKTsKLSAgcmV0dXJuIHJldDsKLX0KLQot LyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBhIHJlZ2lvbiBvZiBtZW1vcnkgd2hv c2UgYWRkcmVzcyBpcyBBRERSIGFuZAotICAgbGVuZ3RoIGlzIExFTiB0byBy ZWNvcmRfYXJjaF9saXN0LiAgKi8KLQotaW50Ci1yZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKQotewotICBzdHJ1 Y3QgcmVjb3JkX2VudHJ5ICpyZWM7Ci0KLSAgaWYgKHJlY29yZF9kZWJ1ZyA+ IDEpCi0gICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJ IlByb2Nlc3MgcmVjb3JkOiBhZGQgbWVtIGFkZHIgPSAlcyBsZW4gPSAlZCB0 byAiCi0JCQkicmVjb3JkIGxpc3QuXG4iLAotCQkJcGFkZHJlc3MgKHRhcmdl dF9nZGJhcmNoICgpLCBhZGRyKSwgbGVuKTsKLQotICBpZiAoIWFkZHIpCS8q IEZJWE1FOiBXaHk/ICBTb21lIGFyY2ggbXVzdCBwZXJtaXQgaXQuLi4gICov Ci0gICAgcmV0dXJuIDA7Ci0KLSAgcmVjID0gcmVjb3JkX21lbV9hbGxvYyAo YWRkciwgbGVuKTsKLQotICBpZiAocmVjb3JkX3JlYWRfbWVtb3J5ICh0YXJn ZXRfZ2RiYXJjaCAoKSwgYWRkciwgcmVjb3JkX2dldF9sb2MgKHJlYyksIGxl bikpCi0gICAgewotICAgICAgcmVjb3JkX21lbV9yZWxlYXNlIChyZWMpOwot ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICByZWNvcmRfYXJjaF9saXN0 X2FkZCAocmVjKTsKLQotICByZXR1cm4gMDsKLX0KLQotLyogQWRkIGEgcmVj b3JkX2VuZCB0eXBlIHN0cnVjdCByZWNvcmRfZW50cnkgdG8gcmVjb3JkX2Fy Y2hfbGlzdC4gICovCi0KLWludAotcmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5k ICh2b2lkKQotewotICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWM7Ci0KLSAg aWYgKHJlY29yZF9kZWJ1ZyA+IDEpCi0gICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAotCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgZW5kIHRv IGFyY2ggbGlzdC5cbiIpOwotCi0gIHJlYyA9IHJlY29yZF9lbmRfYWxsb2Mg KCk7Ci0gIHJlYy0+dS5lbmQuc2lndmFsID0gR0RCX1NJR05BTF8wOwotICBy ZWMtPnUuZW5kLmluc25fbnVtID0gKytyZWNvcmRfaW5zbl9jb3VudDsKLQot ICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKLQotICByZXR1cm4gMDsK LX0KLQotc3RhdGljIHZvaWQKLXJlY29yZF9jaGVja19pbnNuX251bSAoaW50 IHNldF90ZXJtaW5hbCkKLXsKLSAgaWYgKHJlY29yZF9pbnNuX21heF9udW0p Ci0gICAgewotICAgICAgZ2RiX2Fzc2VydCAocmVjb3JkX2luc25fbnVtIDw9 IHJlY29yZF9pbnNuX21heF9udW0pOwotICAgICAgaWYgKHJlY29yZF9pbnNu X251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVtKQotCXsKLQkgIC8qIEFzayB1 c2VyIHdoYXQgdG8gZG8uICAqLwotCSAgaWYgKHJlY29yZF9zdG9wX2F0X2xp bWl0KQotCSAgICB7Ci0JICAgICAgaW50IHE7Ci0KLQkgICAgICBpZiAoc2V0 X3Rlcm1pbmFsKQotCQl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKLQkgICAg ICBxID0geXF1ZXJ5IChfKCJEbyB5b3Ugd2FudCB0byBhdXRvIGRlbGV0ZSBw cmV2aW91cyBleGVjdXRpb24gIgotCQkJICAgICJsb2cgZW50cmllcyB3aGVu IHJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgIgotCQkJICAgICJmdWxs IChyZWNvcmQgc3RvcC1hdC1saW1pdCk/IikpOwotCSAgICAgIGlmIChzZXRf dGVybWluYWwpCi0JCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQkg ICAgICBpZiAocSkKLQkJcmVjb3JkX3N0b3BfYXRfbGltaXQgPSAwOwotCSAg ICAgIGVsc2UKLQkJZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBzdG9wcGVk IGJ5IHVzZXIuIikpOwotCSAgICB9Ci0JfQotICAgIH0KLX0KLQotc3RhdGlj IHZvaWQKLXJlY29yZF9hcmNoX2xpc3RfY2xlYW51cHMgKHZvaWQgKmlnbm9y ZSkKLXsKLSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlz dF90YWlsKTsKLX0KLQotLyogQmVmb3JlIGluZmVyaW9yIHN0ZXAgKHdoZW4g R0RCIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlLCBpbmZlcmlvcgotICAg b25seSBjYW4gc3RlcCksIEdEQiB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0 byByZWNvcmQgdGhlIHZhbHVlcyB0bwotICAgcmVjb3JkX2xpc3QuICBUaGlz IGZ1bmN0aW9uIHdpbGwgY2FsbCBnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkIHRv Ci0gICByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSBvZiBpbmZlcmlvciBh bmQgc2V0IHRoZW0gdG8KLSAgIHJlY29yZF9hcmNoX2xpc3QsIGFuZCBhZGQg aXQgdG8gcmVjb3JkX2xpc3QuICAqLwotCi1zdGF0aWMgaW50Ci1yZWNvcmRf bWVzc2FnZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgZW51bSBnZGJf c2lnbmFsIHNpZ25hbCkKLXsKLSAgaW50IHJldDsKLSAgc3RydWN0IGdkYmFy Y2ggKmdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOwot ICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVw IChyZWNvcmRfYXJjaF9saXN0X2NsZWFudXBzLCAwKTsKLQotICByZWNvcmRf YXJjaF9saXN0X2hlYWQgPSBOVUxMOwotICByZWNvcmRfYXJjaF9saXN0X3Rh aWwgPSBOVUxMOwotCi0gIC8qIENoZWNrIHJlY29yZF9pbnNuX251bS4gICov Ci0gIHJlY29yZF9jaGVja19pbnNuX251bSAoMSk7Ci0KLSAgLyogSWYgZ2Ri IHNlbmRzIGEgc2lnbmFsIHZhbHVlIHRvIHRhcmdldF9yZXN1bWUsCi0gICAg IHNhdmUgaXQgaW4gdGhlICdlbmQnIGZpZWxkIG9mIHRoZSBwcmV2aW91cyBp bnN0cnVjdGlvbi4KLQotICAgICBNYXliZSBwcm9jZXNzIHJlY29yZCBzaG91 bGQgcmVjb3JkIHdoYXQgcmVhbGx5IGhhcHBlbmVkLAotICAgICByYXRoZXIg dGhhbiB3aGF0IGdkYiBwcmV0ZW5kcyBoYXMgaGFwcGVuZWQuCi0KLSAgICAg U28gaWYgTGludXggZGVsaXZlcmVkIHRoZSBzaWduYWwgdG8gdGhlIGNoaWxk IHByb2Nlc3MgZHVyaW5nCi0gICAgIHRoZSByZWNvcmQgbW9kZSwgd2Ugd2ls bCByZWNvcmQgaXQgYW5kIGRlbGl2ZXIgaXQgYWdhaW4gaW4KLSAgICAgdGhl IHJlcGxheSBtb2RlLgotCi0gICAgIElmIHVzZXIgc2F5cyAiaWdub3JlIHRo aXMgc2lnbmFsIiBkdXJpbmcgdGhlIHJlY29yZCBtb2RlLCB0aGVuCi0gICAg IGl0IHdpbGwgYmUgaWdub3JlZCBhZ2FpbiBkdXJpbmcgdGhlIHJlcGxheSBt b2RlIChubyBtYXR0ZXIgaWYKLSAgICAgdGhlIHVzZXIgc2F5cyBzb21ldGhp bmcgZGlmZmVyZW50LCBsaWtlICJkZWxpdmVyIHRoaXMgc2lnbmFsIgotICAg ICBkdXJpbmcgdGhlIHJlcGxheSBtb2RlKS4KLQotICAgICBVc2VyIHNob3Vs ZCB1bmRlcnN0YW5kIHRoYXQgbm90aGluZyBoZSBkb2VzIGR1cmluZyB0aGUg cmVwbGF5Ci0gICAgIG1vZGUgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9m IHRoZSBjaGlsZC4gIElmIGhlIHRyaWVzLAotICAgICB0aGVuIHRoYXQgaXMg YSB1c2VyIGVycm9yLgotCi0gICAgIEJ1dCB3ZSBzaG91bGQgc3RpbGwgZGVs aXZlciB0aGUgc2lnbmFsIHRvIGdkYiBkdXJpbmcgdGhlIHJlcGxheSwKLSAg ICAgaWYgd2UgZGVsaXZlcmVkIGl0IGR1cmluZyB0aGUgcmVjb3JkaW5nLiAg VGhlcmVmb3JlIHdlIHNob3VsZAotICAgICByZWNvcmQgdGhlIHNpZ25hbCBk dXJpbmcgcmVjb3JkX3dhaXQsIG5vdCByZWNvcmRfcmVzdW1lLiAgKi8KLSAg aWYgKHJlY29yZF9saXN0ICE9ICZyZWNvcmRfZmlyc3QpICAgIC8qIEZJWE1F IGJldHRlciB3YXkgdG8gY2hlY2sgKi8KLSAgICB7Ci0gICAgICBnZGJfYXNz ZXJ0IChyZWNvcmRfbGlzdC0+dHlwZSA9PSByZWNvcmRfZW5kKTsKLSAgICAg IHJlY29yZF9saXN0LT51LmVuZC5zaWd2YWwgPSBzaWduYWw7Ci0gICAgfQot Ci0gIGlmIChzaWduYWwgPT0gR0RCX1NJR05BTF8wCi0gICAgICB8fCAhZ2Ri YXJjaF9wcm9jZXNzX3JlY29yZF9zaWduYWxfcCAoZ2RiYXJjaCkpCi0gICAg cmV0ID0gZ2RiYXJjaF9wcm9jZXNzX3JlY29yZCAoZ2RiYXJjaCwKLQkJCQkg IHJlZ2NhY2hlLAotCQkJCSAgcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUp KTsKLSAgZWxzZQotICAgIHJldCA9IGdkYmFyY2hfcHJvY2Vzc19yZWNvcmRf c2lnbmFsIChnZGJhcmNoLAotCQkJCQkgcmVnY2FjaGUsCi0JCQkJCSBzaWdu YWwpOwotCi0gIGlmIChyZXQgPiAwKQotICAgIGVycm9yIChfKCJQcm9jZXNz IHJlY29yZDogaW5mZXJpb3IgcHJvZ3JhbSBzdG9wcGVkLiIpKTsKLSAgaWYg KHJldCA8IDApCi0gICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWls ZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOwotCi0gIGRpc2NhcmRf Y2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7Ci0KLSAgcmVjb3JkX2xpc3QtPm5l eHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7Ci0gIHJlY29yZF9hcmNoX2xp c3RfaGVhZC0+cHJldiA9IHJlY29yZF9saXN0OwotICByZWNvcmRfbGlzdCA9 IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKLQotICBpZiAocmVjb3JkX2luc25f bnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4 X251bSkKLSAgICByZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOwotICBl bHNlCi0gICAgcmVjb3JkX2luc25fbnVtKys7Ci0KLSAgcmV0dXJuIDE7Ci19 Ci0KLXN0cnVjdCByZWNvcmRfbWVzc2FnZV9hcmdzIHsKLSAgc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZTsKLSAgZW51bSBnZGJfc2lnbmFsIHNpZ25hbDsK LX07Ci0KLXN0YXRpYyBpbnQKLXJlY29yZF9tZXNzYWdlX3dyYXBwZXIgKHZv aWQgKmFyZ3MpCi17Ci0gIHN0cnVjdCByZWNvcmRfbWVzc2FnZV9hcmdzICpy ZWNvcmRfYXJncyA9IGFyZ3M7Ci0KLSAgcmV0dXJuIHJlY29yZF9tZXNzYWdl IChyZWNvcmRfYXJncy0+cmVnY2FjaGUsIHJlY29yZF9hcmdzLT5zaWduYWwp OwotfQotCi1zdGF0aWMgaW50Ci1yZWNvcmRfbWVzc2FnZV93cmFwcGVyX3Nh ZmUgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gZ2RiX3NpZ25hbCBzaWduYWwpCi17Ci0g IHN0cnVjdCByZWNvcmRfbWVzc2FnZV9hcmdzIGFyZ3M7Ci0KLSAgYXJncy5y ZWdjYWNoZSA9IHJlZ2NhY2hlOwotICBhcmdzLnNpZ25hbCA9IHNpZ25hbDsK LQotICByZXR1cm4gY2F0Y2hfZXJyb3JzIChyZWNvcmRfbWVzc2FnZV93cmFw cGVyLCAmYXJncywgTlVMTCwgUkVUVVJOX01BU0tfQUxMKTsKLX0KLQotLyog U2V0IHRvIDEgaWYgcmVjb3JkX3N0b3JlX3JlZ2lzdGVycyBhbmQgcmVjb3Jk X3hmZXJfcGFydGlhbAotICAgZG9lc24ndCBuZWVkIHJlY29yZC4gICovCi0K LXN0YXRpYyBpbnQgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9IDA7 Ci0KLXN0cnVjdCBjbGVhbnVwICoKLXJlY29yZF9nZGJfb3BlcmF0aW9uX2Rp c2FibGVfc2V0ICh2b2lkKQotewotICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2Ns ZWFudXBzID0gTlVMTDsKLQotICBvbGRfY2xlYW51cHMgPQotICAgIG1ha2Vf Y2xlYW51cF9yZXN0b3JlX2ludGVnZXIgKCZyZWNvcmRfZ2RiX29wZXJhdGlv bl9kaXNhYmxlKTsKLSAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9 IDE7Ci0KLSAgcmV0dXJuIG9sZF9jbGVhbnVwczsKLX0KLQotLyogRmxhZyBz ZXQgdG8gVFJVRSBmb3IgdGFyZ2V0X3N0b3BwZWRfYnlfd2F0Y2hwb2ludC4g ICovCi1zdGF0aWMgaW50IHJlY29yZF9od193YXRjaHBvaW50ID0gMDsKLQot LyogRXhlY3V0ZSBvbmUgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgcmVjb3JkIGxv Zy4gIEVhY2ggaW5zdHJ1Y3Rpb24gaW4KLSAgIHRoZSBsb2cgd2lsbCBiZSBy ZXByZXNlbnRlZCBieSBhbiBhcmJpdHJhcnkgc2VxdWVuY2Ugb2YgcmVnaXN0 ZXIKLSAgIGVudHJpZXMgYW5kIG1lbW9yeSBlbnRyaWVzLCBmb2xsb3dlZCBi eSBhbiAnZW5kJyBlbnRyeS4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAot cmVjb3JkX2V4ZWNfaW5zbiAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0JCSAgc3RydWN0IHJlY29yZF9l bnRyeSAqZW50cnkpCi17Ci0gIHN3aXRjaCAoZW50cnktPnR5cGUpCi0gICAg ewotICAgIGNhc2UgcmVjb3JkX3JlZzogLyogcmVnICovCi0gICAgICB7Ci0g ICAgICAgIGdkYl9ieXRlIHJlZ1tNQVhfUkVHSVNURVJfU0laRV07Ci0KLSAg ICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCi0gICAgICAgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfcmVnICVzIHRv ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZlcmlvciBu dW0gPSAlZC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo b3N0X2FkZHJlc3NfdG9fc3RyaW5nIChlbnRyeSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnRyeS0+dS5yZWcubnVtKTsKLQotICAgICAg ICByZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIGVudHJ5LT51LnJl Zy5udW0sIHJlZyk7Ci0gICAgICAgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAo cmVnY2FjaGUsIGVudHJ5LT51LnJlZy5udW0sIAotCQkJICAgICAgIHJlY29y ZF9nZXRfbG9jIChlbnRyeSkpOwotICAgICAgICBtZW1jcHkgKHJlY29yZF9n ZXRfbG9jIChlbnRyeSksIHJlZywgZW50cnktPnUucmVnLmxlbik7Ci0gICAg ICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgcmVjb3JkX21lbTogLyog bWVtICovCi0gICAgICB7Ci0JLyogTm90aGluZyB0byBkbyBpZiB0aGUgZW50 cnkgaXMgZmxhZ2dlZCBub3RfYWNjZXNzaWJsZS4gICovCi0gICAgICAgIGlm ICghZW50cnktPnUubWVtLm1lbV9lbnRyeV9ub3RfYWNjZXNzaWJsZSkKLSAg ICAgICAgICB7Ci0gICAgICAgICAgICBnZGJfYnl0ZSAqbWVtID0gYWxsb2Nh IChlbnRyeS0+dS5tZW0ubGVuKTsKLQotICAgICAgICAgICAgaWYgKHJlY29y ZF9kZWJ1ZyA+IDEpCi0gICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9tZW0gJXMgdG8gIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZlcmlvciBhZGRy ID0gJXMgbGVuID0gJWQuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKGVudHJ5KSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2Ri YXJjaCwgZW50cnktPnUubWVtLmFkZHIpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudHJ5LT51Lm1lbS5sZW4pOwotCi0gICAgICAg ICAgICBpZiAocmVjb3JkX3JlYWRfbWVtb3J5IChnZGJhcmNoLAotCQkJCSAg ICBlbnRyeS0+dS5tZW0uYWRkciwgbWVtLCBlbnRyeS0+dS5tZW0ubGVuKSkK LQkgICAgICBlbnRyeS0+dS5tZW0ubWVtX2VudHJ5X25vdF9hY2Nlc3NpYmxl ID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIGlmICh0YXJnZXRfd3JpdGVfbWVtb3J5IChlbnRyeS0+ dS5tZW0uYWRkciwgCi0JCQkJCSByZWNvcmRfZ2V0X2xvYyAoZW50cnkpLAot CQkJCQkgZW50cnktPnUubWVtLmxlbikpCi0gICAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT51Lm1lbS5tZW1fZW50cnlf bm90X2FjY2Vzc2libGUgPSAxOwotICAgICAgICAgICAgICAgICAgICBpZiAo cmVjb3JkX2RlYnVnKQotICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcg KF8oIlByb2Nlc3MgcmVjb3JkOiBlcnJvciB3cml0aW5nIG1lbW9yeSBhdCAi Ci0JCQkJICJhZGRyID0gJXMgbGVuID0gJWQuIiksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGFkZHJlc3MgKGdkYmFyY2gsIGVudHJ5LT51 Lm1lbS5hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bnRyeS0+dS5tZW0ubGVuKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICBlbHNlCi0JCSAgewotCQkgICAgbWVtY3B5IChyZWNvcmRf Z2V0X2xvYyAoZW50cnkpLCBtZW0sIGVudHJ5LT51Lm1lbS5sZW4pOwotCi0J CSAgICAvKiBXZSd2ZSBjaGFuZ2VkIG1lbW9yeSAtLS0gY2hlY2sgaWYgYSBo YXJkd2FyZQotCQkgICAgICAgd2F0Y2hwb2ludCBzaG91bGQgdHJhcC4gIE5v dGUgdGhhdCB0aGlzCi0JCSAgICAgICBwcmVzZW50bHkgYXNzdW1lcyB0aGUg dGFyZ2V0IGJlbmVhdGggc3VwcG9ydHMKLQkJICAgICAgIGNvbnRpbnVhYmxl IHdhdGNocG9pbnRzLiAgT24gbm9uLWNvbnRpbnVhYmxlCi0JCSAgICAgICB3 YXRjaHBvaW50cyB0YXJnZXQsIHdlJ2xsIHdhbnQgdG8gY2hlY2sgdGhpcwot CQkgICAgICAgX2JlZm9yZV8gYWN0dWFsbHkgZG9pbmcgdGhlIG1lbW9yeSBj aGFuZ2UsIGFuZAotCQkgICAgICAgbm90IGRvaW5nIHRoZSBjaGFuZ2UgYXQg YWxsIGlmIHRoZSB3YXRjaHBvaW50Ci0JCSAgICAgICB0cmFwcy4gICovCi0J CSAgICBpZiAoaGFyZHdhcmVfd2F0Y2hwb2ludF9pbnNlcnRlZF9pbl9yYW5n ZQotCQkJKGdldF9yZWdjYWNoZV9hc3BhY2UgKHJlZ2NhY2hlKSwKLQkJCSBl bnRyeS0+dS5tZW0uYWRkciwgZW50cnktPnUubWVtLmxlbikpCi0JCSAgICAg IHJlY29yZF9od193YXRjaHBvaW50ID0gMTsKLQkJICB9Ci0gICAgICAgICAg ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAg ICB9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyAqdG1wX3RvX3Jl c3VtZV9vcHM7Ci1zdGF0aWMgdm9pZCAoKnRtcF90b19yZXN1bWUpIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqLCBwdGlkX3QsIGludCwKLQkJCSAgICAgIGVudW0g Z2RiX3NpZ25hbCk7Ci1zdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnRtcF90 b193YWl0X29wczsKLXN0YXRpYyBwdGlkX3QgKCp0bXBfdG9fd2FpdCkgKHN0 cnVjdCB0YXJnZXRfb3BzICosIHB0aWRfdCwKLQkJCSAgICAgIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqLAotCQkJICAgICAgaW50KTsKLXN0YXRpYyBz dHJ1Y3QgdGFyZ2V0X29wcyAqdG1wX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHM7 Ci1zdGF0aWMgdm9pZCAoKnRtcF90b19zdG9yZV9yZWdpc3RlcnMpIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqLAotCQkJCSAgICAgICBzdHJ1Y3QgcmVnY2FjaGUg KiwKLQkJCQkgICAgICAgaW50IHJlZ25vKTsKLXN0YXRpYyBzdHJ1Y3QgdGFy Z2V0X29wcyAqdG1wX3RvX3hmZXJfcGFydGlhbF9vcHM7Ci1zdGF0aWMgTE9O R0VTVCAoKnRtcF90b194ZmVyX3BhcnRpYWwpIChzdHJ1Y3QgdGFyZ2V0X29w cyAqb3BzLAotCQkJCSAgICAgICBlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0 LAotCQkJCSAgICAgICBjb25zdCBjaGFyICphbm5leCwKLQkJCQkgICAgICAg Z2RiX2J5dGUgKnJlYWRidWYsCi0JCQkJICAgICAgIGNvbnN0IGdkYl9ieXRl ICp3cml0ZWJ1ZiwKLQkJCQkgICAgICAgVUxPTkdFU1Qgb2Zmc2V0LAotCQkJ CSAgICAgICBMT05HRVNUIGxlbik7Ci1zdGF0aWMgaW50ICgqdG1wX3RvX2lu c2VydF9icmVha3BvaW50KSAoc3RydWN0IGdkYmFyY2ggKiwKLQkJCQkJc3Ry dWN0IGJwX3RhcmdldF9pbmZvICopOwotc3RhdGljIGludCAoKnRtcF90b19y ZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVjdCBnZGJhcmNoICosCi0JCQkJCXN0 cnVjdCBicF90YXJnZXRfaW5mbyAqKTsKLXN0YXRpYyBpbnQgKCp0bXBfdG9f c3RvcHBlZF9ieV93YXRjaHBvaW50KSAodm9pZCk7Ci1zdGF0aWMgaW50ICgq dG1wX3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNzKSAoc3RydWN0IHRhcmdldF9v cHMgKiwgQ09SRV9BRERSICopOwotc3RhdGljIGludCAoKnRtcF90b19zdG9w cGVkX2RhdGFfYWRkcmVzcykgKHN0cnVjdCB0YXJnZXRfb3BzICosIENPUkVf QUREUiAqKTsKLXN0YXRpYyB2b2lkICgqdG1wX3RvX2FzeW5jKSAodm9pZCAo KikgKGVudW0gaW5mZXJpb3JfZXZlbnRfdHlwZSwgdm9pZCAqKSwgdm9pZCAq KTsKLQotc3RhdGljIHZvaWQgcmVjb3JkX3Jlc3RvcmUgKHZvaWQpOwotCi0v KiBBc3luY2hyb25vdXMgc2lnbmFsIGhhbmRsZSByZWdpc3RlcmVkIGFzIGV2 ZW50IGxvb3Agc291cmNlIGZvciB3aGVuCi0gICB3ZSBoYXZlIHBlbmRpbmcg ZXZlbnRzIHJlYWR5IHRvIGJlIHBhc3NlZCB0byB0aGUgY29yZS4gICovCi0K LXN0YXRpYyBzdHJ1Y3QgYXN5bmNfZXZlbnRfaGFuZGxlciAqcmVjb3JkX2Fz eW5jX2luZmVyaW9yX2V2ZW50X3Rva2VuOwotCi1zdGF0aWMgdm9pZAotcmVj b3JkX2FzeW5jX2luZmVyaW9yX2V2ZW50X2hhbmRsZXIgKGdkYl9jbGllbnRf ZGF0YSBkYXRhKQotewotICBpbmZlcmlvcl9ldmVudF9oYW5kbGVyIChJTkZf UkVHX0VWRU5ULCBOVUxMKTsKLX0KLQotLyogT3BlbiB0aGUgcHJvY2VzcyBy ZWNvcmQgdGFyZ2V0LiAgKi8KLQotc3RhdGljIHZvaWQKLXJlY29yZF9jb3Jl X29wZW5fMSAoY2hhciAqbmFtZSwgaW50IGZyb21fdHR5KQotewotICBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUg KCk7Ci0gIGludCByZWdudW0gPSBnZGJhcmNoX251bV9yZWdzIChnZXRfcmVn Y2FjaGVfYXJjaCAocmVnY2FjaGUpKTsKLSAgaW50IGk7Ci0KLSAgLyogR2V0 IHJlY29yZF9jb3JlX3JlZ2J1Zi4gICovCi0gIHRhcmdldF9mZXRjaF9yZWdp c3RlcnMgKHJlZ2NhY2hlLCAtMSk7Ci0gIHJlY29yZF9jb3JlX3JlZ2J1ZiA9 IHhtYWxsb2MgKE1BWF9SRUdJU1RFUl9TSVpFICogcmVnbnVtKTsKLSAgZm9y IChpID0gMDsgaSA8IHJlZ251bTsgaSArKykKLSAgICByZWdjYWNoZV9yYXdf Y29sbGVjdCAocmVnY2FjaGUsIGksCi0JCQkgIHJlY29yZF9jb3JlX3JlZ2J1 ZiArIE1BWF9SRUdJU1RFUl9TSVpFICogaSk7Ci0KLSAgLyogR2V0IHJlY29y ZF9jb3JlX3N0YXJ0IGFuZCByZWNvcmRfY29yZV9lbmQuICAqLwotICBpZiAo YnVpbGRfc2VjdGlvbl90YWJsZSAoY29yZV9iZmQsICZyZWNvcmRfY29yZV9z dGFydCwgJnJlY29yZF9jb3JlX2VuZCkpCi0gICAgewotICAgICAgeGZyZWUg KHJlY29yZF9jb3JlX3JlZ2J1Zik7Ci0gICAgICByZWNvcmRfY29yZV9yZWdi dWYgPSBOVUxMOwotICAgICAgZXJyb3IgKF8oIlwiJXNcIjogQ2FuJ3QgZmlu ZCBzZWN0aW9uczogJXMiKSwKLQkgICAgIGJmZF9nZXRfZmlsZW5hbWUgKGNv cmVfYmZkKSwgYmZkX2Vycm1zZyAoYmZkX2dldF9lcnJvciAoKSkpOwotICAg IH0KLQotICBwdXNoX3RhcmdldCAoJnJlY29yZF9jb3JlX29wcyk7Ci0gIHJl Y29yZF9yZXN0b3JlICgpOwotfQotCi0vKiAidG9fb3BlbiIgdGFyZ2V0IG1l dGhvZCBmb3IgJ2xpdmUnIHByb2Nlc3Nlcy4gICovCi0KLXN0YXRpYyB2b2lk Ci1yZWNvcmRfb3Blbl8xIChjaGFyICpuYW1lLCBpbnQgZnJvbV90dHkpCi17 Ci0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9vcGVuXG4i KTsKLQotICAvKiBjaGVjayBleGVjICovCi0gIGlmICghdGFyZ2V0X2hhc19l eGVjdXRpb24pCi0gICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUg cHJvZ3JhbSBpcyBub3QgYmVpbmcgcnVuLiIpKTsKLSAgaWYgKG5vbl9zdG9w KQotICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3Qg ZGVidWcgaW5mZXJpb3IgaW4gbm9uLXN0b3AgbW9kZSAiCi0JICAgICAiKG5v bi1zdG9wKS4iKSk7Ci0KLSAgaWYgKCFnZGJhcmNoX3Byb2Nlc3NfcmVjb3Jk X3AgKHRhcmdldF9nZGJhcmNoICgpKSkKLSAgICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1 cHBvcnQgIgotCSAgICAgInJlY29yZCBmdW5jdGlvbi4iKSk7Ci0KLSAgaWYg KCF0bXBfdG9fcmVzdW1lKQotICAgIGVycm9yIChfKCJDb3VsZCBub3QgZmlu ZCAndG9fcmVzdW1lJyBtZXRob2Qgb24gdGhlIHRhcmdldCBzdGFjay4iKSk7 Ci0gIGlmICghdG1wX3RvX3dhaXQpCi0gICAgZXJyb3IgKF8oIkNvdWxkIG5v dCBmaW5kICd0b193YWl0JyBtZXRob2Qgb24gdGhlIHRhcmdldCBzdGFjay4i KSk7Ci0gIGlmICghdG1wX3RvX3N0b3JlX3JlZ2lzdGVycykKLSAgICBlcnJv ciAoXygiQ291bGQgbm90IGZpbmQgJ3RvX3N0b3JlX3JlZ2lzdGVycycgIgot CSAgICAgIm1ldGhvZCBvbiB0aGUgdGFyZ2V0IHN0YWNrLiIpKTsKLSAgaWYg KCF0bXBfdG9faW5zZXJ0X2JyZWFrcG9pbnQpCi0gICAgZXJyb3IgKF8oIkNv dWxkIG5vdCBmaW5kICd0b19pbnNlcnRfYnJlYWtwb2ludCcgIgotCSAgICAg Im1ldGhvZCBvbiB0aGUgdGFyZ2V0IHN0YWNrLiIpKTsKLSAgaWYgKCF0bXBf dG9fcmVtb3ZlX2JyZWFrcG9pbnQpCi0gICAgZXJyb3IgKF8oIkNvdWxkIG5v dCBmaW5kICd0b19yZW1vdmVfYnJlYWtwb2ludCcgIgotCSAgICAgIm1ldGhv ZCBvbiB0aGUgdGFyZ2V0IHN0YWNrLiIpKTsKLSAgaWYgKCF0bXBfdG9fc3Rv cHBlZF9ieV93YXRjaHBvaW50KQotICAgIGVycm9yIChfKCJDb3VsZCBub3Qg ZmluZCAndG9fc3RvcHBlZF9ieV93YXRjaHBvaW50JyAiCi0JICAgICAibWV0 aG9kIG9uIHRoZSB0YXJnZXQgc3RhY2suIikpOwotICBpZiAoIXRtcF90b19z dG9wcGVkX2RhdGFfYWRkcmVzcykKLSAgICBlcnJvciAoXygiQ291bGQgbm90 IGZpbmQgJ3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNzJyAiCi0JICAgICAibWV0 aG9kIG9uIHRoZSB0YXJnZXQgc3RhY2suIikpOwotCi0gIHB1c2hfdGFyZ2V0 ICgmcmVjb3JkX29wcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlY29yZF9pbml0 X3JlY29yZF9icmVha3BvaW50cyAodm9pZCk7Ci0KLS8qICJ0b19vcGVuIiB0 YXJnZXQgbWV0aG9kLiAgT3BlbiB0aGUgcHJvY2VzcyByZWNvcmQgdGFyZ2V0 LiAgKi8KLQotc3RhdGljIHZvaWQKLXJlY29yZF9vcGVuIChjaGFyICpuYW1l LCBpbnQgZnJvbV90dHkpCi17Ci0gIHN0cnVjdCB0YXJnZXRfb3BzICp0Owot Ci0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9vcGVuXG4i KTsKLQotICAvKiBDaGVjayBpZiByZWNvcmQgdGFyZ2V0IGlzIGFscmVhZHkg cnVubmluZy4gICovCi0gIGlmIChjdXJyZW50X3RhcmdldC50b19zdHJhdHVt ID09IHJlY29yZF9zdHJhdHVtKQotICAgIGVycm9yIChfKCJQcm9jZXNzIHJl Y29yZCB0YXJnZXQgYWxyZWFkeSBydW5uaW5nLiAgVXNlIFwicmVjb3JkIHN0 b3BcIiB0byAiCi0gICAgICAgICAgICAgInN0b3AgcmVjb3JkIHRhcmdldCBm aXJzdC4iKSk7Ci0KLSAgLyogUmVzZXQgdGhlIHRtcCBiZW5lYXRoIHBvaW50 ZXJzLiAgKi8KLSAgdG1wX3RvX3Jlc3VtZV9vcHMgPSBOVUxMOwotICB0bXBf dG9fcmVzdW1lID0gTlVMTDsKLSAgdG1wX3RvX3dhaXRfb3BzID0gTlVMTDsK LSAgdG1wX3RvX3dhaXQgPSBOVUxMOwotICB0bXBfdG9fc3RvcmVfcmVnaXN0 ZXJzX29wcyA9IE5VTEw7Ci0gIHRtcF90b19zdG9yZV9yZWdpc3RlcnMgPSBO VUxMOwotICB0bXBfdG9feGZlcl9wYXJ0aWFsX29wcyA9IE5VTEw7Ci0gIHRt cF90b194ZmVyX3BhcnRpYWwgPSBOVUxMOwotICB0bXBfdG9faW5zZXJ0X2Jy ZWFrcG9pbnQgPSBOVUxMOwotICB0bXBfdG9fcmVtb3ZlX2JyZWFrcG9pbnQg PSBOVUxMOwotICB0bXBfdG9fc3RvcHBlZF9ieV93YXRjaHBvaW50ID0gTlVM TDsKLSAgdG1wX3RvX3N0b3BwZWRfZGF0YV9hZGRyZXNzID0gTlVMTDsKLSAg dG1wX3RvX2FzeW5jID0gTlVMTDsKLQotICAvKiBTZXQgdGhlIGJlbmVhdGgg ZnVuY3Rpb24gcG9pbnRlcnMuICAqLwotICBmb3IgKHQgPSBjdXJyZW50X3Rh cmdldC5iZW5lYXRoOyB0ICE9IE5VTEw7IHQgPSB0LT5iZW5lYXRoKQotICAg IHsKLSAgICAgIGlmICghdG1wX3RvX3Jlc3VtZSkKLSAgICAgICAgewotCSAg dG1wX3RvX3Jlc3VtZSA9IHQtPnRvX3Jlc3VtZTsKLQkgIHRtcF90b19yZXN1 bWVfb3BzID0gdDsKLSAgICAgICAgfQotICAgICAgaWYgKCF0bXBfdG9fd2Fp dCkKLSAgICAgICAgewotCSAgdG1wX3RvX3dhaXQgPSB0LT50b193YWl0Owot CSAgdG1wX3RvX3dhaXRfb3BzID0gdDsKLSAgICAgICAgfQotICAgICAgaWYg KCF0bXBfdG9fc3RvcmVfcmVnaXN0ZXJzKQotICAgICAgICB7Ci0JICB0bXBf dG9fc3RvcmVfcmVnaXN0ZXJzID0gdC0+dG9fc3RvcmVfcmVnaXN0ZXJzOwot CSAgdG1wX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHMgPSB0OwotICAgICAgICB9 Ci0gICAgICBpZiAoIXRtcF90b194ZmVyX3BhcnRpYWwpCi0gICAgICAgIHsK LQkgIHRtcF90b194ZmVyX3BhcnRpYWwgPSB0LT50b194ZmVyX3BhcnRpYWw7 Ci0JICB0bXBfdG9feGZlcl9wYXJ0aWFsX29wcyA9IHQ7Ci0gICAgICAgIH0K LSAgICAgIGlmICghdG1wX3RvX2luc2VydF9icmVha3BvaW50KQotCXRtcF90 b19pbnNlcnRfYnJlYWtwb2ludCA9IHQtPnRvX2luc2VydF9icmVha3BvaW50 OwotICAgICAgaWYgKCF0bXBfdG9fcmVtb3ZlX2JyZWFrcG9pbnQpCi0JdG1w X3RvX3JlbW92ZV9icmVha3BvaW50ID0gdC0+dG9fcmVtb3ZlX2JyZWFrcG9p bnQ7Ci0gICAgICBpZiAoIXRtcF90b19zdG9wcGVkX2J5X3dhdGNocG9pbnQp Ci0JdG1wX3RvX3N0b3BwZWRfYnlfd2F0Y2hwb2ludCA9IHQtPnRvX3N0b3Bw ZWRfYnlfd2F0Y2hwb2ludDsKLSAgICAgIGlmICghdG1wX3RvX3N0b3BwZWRf ZGF0YV9hZGRyZXNzKQotCXRtcF90b19zdG9wcGVkX2RhdGFfYWRkcmVzcyA9 IHQtPnRvX3N0b3BwZWRfZGF0YV9hZGRyZXNzOwotICAgICAgaWYgKCF0bXBf dG9fYXN5bmMpCi0JdG1wX3RvX2FzeW5jID0gdC0+dG9fYXN5bmM7Ci0gICAg fQotICBpZiAoIXRtcF90b194ZmVyX3BhcnRpYWwpCi0gICAgZXJyb3IgKF8o IkNvdWxkIG5vdCBmaW5kICd0b194ZmVyX3BhcnRpYWwnIG1ldGhvZCBvbiB0 aGUgdGFyZ2V0IHN0YWNrLiIpKTsKLQotICAvKiBSZXNldCAqLwotICByZWNv cmRfaW5zbl9udW0gPSAwOwotICByZWNvcmRfaW5zbl9jb3VudCA9IDA7Ci0g IHJlY29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsKLSAgcmVjb3JkX2xpc3Qt Pm5leHQgPSBOVUxMOwotCi0gIC8qIFNldCB0aGUgdG1wIGJlbmVhdGggcG9p bnRlcnMgdG8gYmVuZWF0aCBwb2ludGVycy4gICovCi0gIHJlY29yZF9iZW5l YXRoX3RvX3Jlc3VtZV9vcHMgPSB0bXBfdG9fcmVzdW1lX29wczsKLSAgcmVj b3JkX2JlbmVhdGhfdG9fcmVzdW1lID0gdG1wX3RvX3Jlc3VtZTsKLSAgcmVj b3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMgPSB0bXBfdG9fd2FpdF9vcHM7Ci0g IHJlY29yZF9iZW5lYXRoX3RvX3dhaXQgPSB0bXBfdG9fd2FpdDsKLSAgcmVj b3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzX29wcyA9IHRtcF90b19z dG9yZV9yZWdpc3RlcnNfb3BzOwotICByZWNvcmRfYmVuZWF0aF90b19zdG9y ZV9yZWdpc3RlcnMgPSB0bXBfdG9fc3RvcmVfcmVnaXN0ZXJzOwotICByZWNv cmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWxfb3BzID0gdG1wX3RvX3hmZXJf cGFydGlhbF9vcHM7Ci0gIHJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlh bCA9IHRtcF90b194ZmVyX3BhcnRpYWw7Ci0gIHJlY29yZF9iZW5lYXRoX3Rv X2luc2VydF9icmVha3BvaW50ID0gdG1wX3RvX2luc2VydF9icmVha3BvaW50 OwotICByZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCA9IHRt cF90b19yZW1vdmVfYnJlYWtwb2ludDsKLSAgcmVjb3JkX2JlbmVhdGhfdG9f c3RvcHBlZF9ieV93YXRjaHBvaW50ID0gdG1wX3RvX3N0b3BwZWRfYnlfd2F0 Y2hwb2ludDsKLSAgcmVjb3JkX2JlbmVhdGhfdG9fc3RvcHBlZF9kYXRhX2Fk ZHJlc3MgPSB0bXBfdG9fc3RvcHBlZF9kYXRhX2FkZHJlc3M7Ci0gIHJlY29y ZF9iZW5lYXRoX3RvX2FzeW5jID0gdG1wX3RvX2FzeW5jOwotCi0gIGlmIChj b3JlX2JmZCkKLSAgICByZWNvcmRfY29yZV9vcGVuXzEgKG5hbWUsIGZyb21f dHR5KTsKLSAgZWxzZQotICAgIHJlY29yZF9vcGVuXzEgKG5hbWUsIGZyb21f dHR5KTsKLQotICAvKiBSZWdpc3RlciBleHRyYSBldmVudCBzb3VyY2VzIGlu IHRoZSBldmVudCBsb29wLiAgKi8KLSAgcmVjb3JkX2FzeW5jX2luZmVyaW9y X2V2ZW50X3Rva2VuCi0gICAgPSBjcmVhdGVfYXN5bmNfZXZlbnRfaGFuZGxl ciAocmVjb3JkX2FzeW5jX2luZmVyaW9yX2V2ZW50X2hhbmRsZXIsCi0JCQkJ ICBOVUxMKTsKLQotICByZWNvcmRfaW5pdF9yZWNvcmRfYnJlYWtwb2ludHMg KCk7Ci0KLSAgb2JzZXJ2ZXJfbm90aWZ5X3JlY29yZF9jaGFuZ2VkIChjdXJy ZW50X2luZmVyaW9yICgpLCAgMSk7Ci19Ci0KLS8qICJ0b19jbG9zZSIgdGFy Z2V0IG1ldGhvZC4gIENsb3NlIHRoZSBwcm9jZXNzIHJlY29yZCB0YXJnZXQu ICAqLwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX2Nsb3NlIChpbnQgcXVpdHRp bmcpCi17Ci0gIHN0cnVjdCByZWNvcmRfY29yZV9idWZfZW50cnkgKmVudHJ5 OwotCi0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9jbG9z ZVxuIik7Ci0KLSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2xpc3Qp OwotCi0gIC8qIFJlbGVhc2UgcmVjb3JkX2NvcmVfcmVnYnVmLiAgKi8KLSAg aWYgKHJlY29yZF9jb3JlX3JlZ2J1ZikKLSAgICB7Ci0gICAgICB4ZnJlZSAo cmVjb3JkX2NvcmVfcmVnYnVmKTsKLSAgICAgIHJlY29yZF9jb3JlX3JlZ2J1 ZiA9IE5VTEw7Ci0gICAgfQotCi0gIC8qIFJlbGVhc2UgcmVjb3JkX2NvcmVf YnVmX2xpc3QuICAqLwotICBpZiAocmVjb3JkX2NvcmVfYnVmX2xpc3QpCi0g ICAgewotICAgICAgZm9yIChlbnRyeSA9IHJlY29yZF9jb3JlX2J1Zl9saXN0 LT5wcmV2OyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+cHJldikKLQl7Ci0JICB4 ZnJlZSAocmVjb3JkX2NvcmVfYnVmX2xpc3QpOwotCSAgcmVjb3JkX2NvcmVf YnVmX2xpc3QgPSBlbnRyeTsKLQl9Ci0gICAgICByZWNvcmRfY29yZV9idWZf bGlzdCA9IE5VTEw7Ci0gICAgfQotCi0gIGlmIChyZWNvcmRfYXN5bmNfaW5m ZXJpb3JfZXZlbnRfdG9rZW4pCi0gICAgZGVsZXRlX2FzeW5jX2V2ZW50X2hh bmRsZXIgKCZyZWNvcmRfYXN5bmNfaW5mZXJpb3JfZXZlbnRfdG9rZW4pOwot fQotCi1zdGF0aWMgaW50IHJlY29yZF9yZXN1bWVfc3RlcCA9IDA7Ci0KLS8q IFRydWUgaWYgd2UndmUgYmVlbiByZXN1bWVkLCBhbmQgc28gZWFjaCByZWNv cmRfd2FpdCBjYWxsIHNob3VsZAotICAgYWR2YW5jZSBleGVjdXRpb24uICBJ ZiB0aGlzIGlzIGZhbHNlLCByZWNvcmRfd2FpdCB3aWxsIHJldHVybiBhCi0g ICBUQVJHRVRfV0FJVEtJTkRfSUdOT1JFLiAgKi8KLXN0YXRpYyBpbnQgcmVj b3JkX3Jlc3VtZWQgPSAwOwotCi0vKiBUaGUgZXhlY3V0aW9uIGRpcmVjdGlv biBvZiB0aGUgbGFzdCByZXN1bWUgd2UgZ290LiAgVGhpcyBpcwotICAgbmVj ZXNzYXJ5IGZvciBhc3luYyBtb2RlLiAgVmlzIChvcmRlciBpcyBub3Qgc3Ry aWN0bHkgYWNjdXJhdGUpOgotCi0gICAxLiB1c2VyIGhhcyB0aGUgZ2xvYmFs IGV4ZWN1dGlvbiBkaXJlY3Rpb24gc2V0IHRvIGZvcndhcmQKLSAgIDIuIHVz ZXIgZG9lcyBhIHJldmVyc2Utc3RlcCBjb21tYW5kCi0gICAzLiByZWNvcmRf cmVzdW1lIGlzIGNhbGxlZCB3aXRoIGdsb2JhbCBleGVjdXRpb24gZGlyZWN0 aW9uCi0gICAgICB0ZW1wb3JhcmlseSBzd2l0Y2hlZCB0byByZXZlcnNlCi0g ICA0LiBHREIncyBleGVjdXRpb24gZGlyZWN0aW9uIGlzIHJldmVydGVkIGJh Y2sgdG8gZm9yd2FyZAotICAgNS4gdGFyZ2V0IHJlY29yZCBub3RpZmllcyBl dmVudCBsb29wIHRoZXJlJ3MgYW4gZXZlbnQgdG8gaGFuZGxlCi0gICA2LiBp bmZydW4gYXNrcyB0aGUgdGFyZ2V0IHdoaWNoIGRpcmVjdGlvbiB3YXMgaXQg Z29pbmcsIGFuZCBzd2l0Y2hlcwotICAgICAgdGhlIGdsb2JhbCBleGVjdXRp b24gZGlyZWN0aW9uIGFjY29yZGluZ2x5ICh0byByZXZlcnNlKQotICAgNy4g aW5mcnVuIHBvbGxzIGFuIGV2ZW50IG91dCBvZiB0aGUgcmVjb3JkIHRhcmdl dCwgYW5kIGhhbmRsZXMgaXQKLSAgIDguIEdEQiBnb2VzIGJhY2sgdG8gdGhl IGV2ZW50IGxvb3AsIGFuZCBnb3RvICM0LgotKi8KLXN0YXRpYyBlbnVtIGV4 ZWNfZGlyZWN0aW9uX2tpbmQgcmVjb3JkX2V4ZWN1dGlvbl9kaXIgPSBFWEVD X0ZPUldBUkQ7Ci0KLS8qICJ0b19yZXN1bWUiIHRhcmdldCBtZXRob2QuICBS ZXN1bWUgdGhlIHByb2Nlc3MgcmVjb3JkIHRhcmdldC4gICovCi0KLXN0YXRp YyB2b2lkCi1yZWNvcmRfcmVzdW1lIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3Bz LCBwdGlkX3QgcHRpZCwgaW50IHN0ZXAsCi0gICAgICAgICAgICAgICBlbnVt IGdkYl9zaWduYWwgc2lnbmFsKQotewotICByZWNvcmRfcmVzdW1lX3N0ZXAg PSBzdGVwOwotICByZWNvcmRfcmVzdW1lZCA9IDE7Ci0gIHJlY29yZF9leGVj dXRpb25fZGlyID0gZXhlY3V0aW9uX2RpcmVjdGlvbjsKLQotICBpZiAoIVJF Q09SRF9JU19SRVBMQVkpCi0gICAgewotICAgICAgc3RydWN0IGdkYmFyY2gg KmdkYmFyY2ggPSB0YXJnZXRfdGhyZWFkX2FyY2hpdGVjdHVyZSAocHRpZCk7 Ci0KLSAgICAgIHJlY29yZF9tZXNzYWdlIChnZXRfY3VycmVudF9yZWdjYWNo ZSAoKSwgc2lnbmFsKTsKLQotICAgICAgaWYgKCFzdGVwKQotICAgICAgICB7 Ci0gICAgICAgICAgLyogVGhpcyBpcyBub3QgaGFyZCBzaW5nbGUgc3RlcC4g ICovCi0gICAgICAgICAgaWYgKCFnZGJhcmNoX3NvZnR3YXJlX3NpbmdsZV9z dGVwX3AgKGdkYmFyY2gpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAvKiBUaGlzIGlzIGEgbm9ybWFsIGNvbnRpbnVlLiAgKi8KLSAgICAgICAg ICAgICAgc3RlcCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgZWxz ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAvKiBUaGlzIGFyY2gg c3VwcG9ydCBzb2Z0IHNpZ2xlIHN0ZXAuICAqLwotICAgICAgICAgICAgICBp ZiAoc2luZ2xlX3N0ZXBfYnJlYWtwb2ludHNfaW5zZXJ0ZWQgKCkpCi0gICAg ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBh IHNvZnQgc2luZ2xlIHN0ZXAuICAqLwotICAgICAgICAgICAgICAgICAgcmVj b3JkX3Jlc3VtZV9zdGVwID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAvKiBUaGlzIGlzIGEgY29udGludWUuCi0gICAgICAgICAgICAg ICAgICAgICBUcnkgdG8gaW5zZXJ0IGEgc29mdCBzaW5nbGUgc3RlcCBicmVh a3BvaW50LiAgKi8KLSAgICAgICAgICAgICAgICAgIGlmICghZ2RiYXJjaF9z b2Z0d2FyZV9zaW5nbGVfc3RlcCAoZ2RiYXJjaCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2N1 cnJlbnRfZnJhbWUgKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICAgICAgLyogVGhpcyBzeXN0ZW0gZG9uJ3Qgd2FudCB1 c2Ugc29mdCBzaW5nbGUgc3RlcC4KLSAgICAgICAgICAgICAgICAgICAgICAg ICBVc2UgaGFyZCBzaWdsZSBzdGVwLiAgKi8KLSAgICAgICAgICAgICAgICAg ICAgICBzdGVwID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg ICAvKiBNYWtlIHN1cmUgdGhlIHRhcmdldCBiZW5lYXRoIHJlcG9ydHMgYWxs IHNpZ25hbHMuICAqLwotICAgICAgdGFyZ2V0X3Bhc3Nfc2lnbmFscyAoMCwg TlVMTCk7Ci0KLSAgICAgIHJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZSAocmVj b3JkX2JlbmVhdGhfdG9fcmVzdW1lX29wcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHRpZCwgc3RlcCwgc2lnbmFsKTsKLSAgICB9Ci0K LSAgLyogV2UgYXJlIGFib3V0IHRvIHN0YXJ0IGV4ZWN1dGluZyB0aGUgaW5m ZXJpb3IgKG9yIHNpbXVsYXRlIGl0KSwKLSAgICAgbGV0J3MgcmVnaXN0ZXIg aXQgd2l0aCB0aGUgZXZlbnQgbG9vcC4gICovCi0gIGlmICh0YXJnZXRfY2Fu X2FzeW5jX3AgKCkpCi0gICAgewotICAgICAgdGFyZ2V0X2FzeW5jIChpbmZl cmlvcl9ldmVudF9oYW5kbGVyLCAwKTsKLSAgICAgIC8qIE5vdGlmeSB0aGUg ZXZlbnQgbG9vcCB0aGVyZSdzIGFuIGV2ZW50IHRvIHdhaXQgZm9yLiAgV2Ug ZG8KLQkgbW9zdCBvZiB0aGUgd29yayBpbiByZWNvcmRfd2FpdC4gICovCi0g ICAgICBtYXJrX2FzeW5jX2V2ZW50X2hhbmRsZXIgKHJlY29yZF9hc3luY19p bmZlcmlvcl9ldmVudF90b2tlbik7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50 IHJlY29yZF9nZXRfc2lnID0gMDsKLQotLyogU0lHSU5UIHNpZ25hbCBoYW5k bGVyLCByZWdpc3RlcmVkIGJ5ICJ0b193YWl0IiBtZXRob2QuICAqLwotCi1z dGF0aWMgdm9pZAotcmVjb3JkX3NpZ19oYW5kbGVyIChpbnQgc2lnbm8pCi17 Ci0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IGdldCBhIHNpZ25hbFxu Iik7Ci0KLSAgLyogSXQgd2lsbCBicmVhayB0aGUgcnVubmluZyBpbmZlcmlv ciBpbiByZXBsYXkgbW9kZS4gICovCi0gIHJlY29yZF9yZXN1bWVfc3RlcCA9 IDE7Ci0KLSAgLyogSXQgd2lsbCBsZXQgcmVjb3JkX3dhaXQgc2V0IGluZmVy aW9yIHN0YXR1cyB0byBnZXQgdGhlIHNpZ25hbAotICAgICBTSUdJTlQuICAq LwotICByZWNvcmRfZ2V0X3NpZyA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1y ZWNvcmRfd2FpdF9jbGVhbnVwcyAodm9pZCAqaWdub3JlKQotewotICBpZiAo ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCi0gICAgewot ICAgICAgaWYgKHJlY29yZF9saXN0LT5uZXh0KQotCXJlY29yZF9saXN0ID0g cmVjb3JkX2xpc3QtPm5leHQ7Ci0gICAgfQotICBlbHNlCi0gICAgcmVjb3Jk X2xpc3QgPSByZWNvcmRfbGlzdC0+cHJldjsKLX0KLQotLyogInRvX3dhaXQi IHRhcmdldCBtZXRob2QgZm9yIHByb2Nlc3MgcmVjb3JkIHRhcmdldC4KLQot ICAgSW4gcmVjb3JkIG1vZGUsIHRoZSB0YXJnZXQgaXMgYWx3YXlzIHJ1biBp biBzaW5nbGVzdGVwIG1vZGUKLSAgIChldmVuIHdoZW4gZ2RiIHNheXMgdG8g Y29udGludWUpLiAgVGhlIHRvX3dhaXQgbWV0aG9kIGludGVyY2VwdHMKLSAg IHRoZSBzdG9wIGV2ZW50cyBhbmQgZGV0ZXJtaW5lcyB3aGljaCBvbmVzIGFy ZSB0byBiZSBwYXNzZWQgb24gdG8KLSAgIGdkYi4gIE1vc3Qgc3RvcCBldmVu dHMgYXJlIGp1c3Qgc2luZ2xlc3RlcCBldmVudHMgdGhhdCBnZGIgaXMgbm90 Ci0gICB0byBrbm93IGFib3V0LCBzbyB0aGUgdG9fd2FpdCBtZXRob2QganVz dCByZWNvcmRzIHRoZW0gYW5kIGtlZXBzCi0gICBzaW5nbGVzdGVwcGluZy4K LQotICAgSW4gcmVwbGF5IG1vZGUsIHRoaXMgZnVuY3Rpb24gZW11bGF0ZXMg dGhlIHJlY29yZGVkIGV4ZWN1dGlvbiBsb2csIAotICAgb25lIGluc3RydWN0 aW9uIGF0IGEgdGltZSAoZm9yd2FyZCBvciBiYWNrd2FyZCksIGFuZCBkZXRl cm1pbmVzIAotICAgd2hlcmUgdG8gc3RvcC4gICovCi0KLXN0YXRpYyBwdGlk X3QKLXJlY29yZF93YWl0XzEgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCi0J ICAgICAgIHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMg KnN0YXR1cywKLQkgICAgICAgaW50IG9wdGlvbnMpCi17Ci0gIHN0cnVjdCBj bGVhbnVwICpzZXRfY2xlYW51cHMgPSByZWNvcmRfZ2RiX29wZXJhdGlvbl9k aXNhYmxlX3NldCAoKTsKLQotICBpZiAocmVjb3JkX2RlYnVnKQotICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCSJQcm9jZXNzIHJl Y29yZDogcmVjb3JkX3dhaXQgIgotCQkJInJlY29yZF9yZXN1bWVfc3RlcCA9 ICVkLCByZWNvcmRfcmVzdW1lZCA9ICVkLCBkaXJlY3Rpb249JXNcbiIsCi0J CQlyZWNvcmRfcmVzdW1lX3N0ZXAsIHJlY29yZF9yZXN1bWVkLAotCQkJcmVj b3JkX2V4ZWN1dGlvbl9kaXIgPT0gRVhFQ19GT1JXQVJEID8gImZvcndhcmQi IDogInJldmVyc2UiKTsKLQotICBpZiAoIXJlY29yZF9yZXN1bWVkKQotICAg IHsKLSAgICAgIGdkYl9hc3NlcnQgKChvcHRpb25zICYgVEFSR0VUX1dOT0hB TkcpICE9IDApOwotCi0gICAgICAvKiBObyBpbnRlcmVzdGluZyBldmVudC4g ICovCi0gICAgICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfSUdO T1JFOwotICAgICAgcmV0dXJuIG1pbnVzX29uZV9wdGlkOwotICAgIH0KLQot ICByZWNvcmRfZ2V0X3NpZyA9IDA7Ci0gIHNpZ25hbCAoU0lHSU5ULCByZWNv cmRfc2lnX2hhbmRsZXIpOwotCi0gIGlmICghUkVDT1JEX0lTX1JFUExBWSAm JiBvcHMgIT0gJnJlY29yZF9jb3JlX29wcykKLSAgICB7Ci0gICAgICBpZiAo cmVjb3JkX3Jlc3VtZV9zdGVwKQotCXsKLQkgIC8qIFRoaXMgaXMgYSBzaW5n bGUgc3RlcC4gICovCi0JICByZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9fd2Fp dCAocmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMsCi0JCQkJCSBwdGlkLCBz dGF0dXMsIG9wdGlvbnMpOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICAvKiBU aGlzIGlzIG5vdCBhIHNpbmdsZSBzdGVwLiAgKi8KLQkgIHB0aWRfdCByZXQ7 Ci0JICBDT1JFX0FERFIgdG1wX3BjOwotCSAgc3RydWN0IGdkYmFyY2ggKmdk YmFyY2ggPSB0YXJnZXRfdGhyZWFkX2FyY2hpdGVjdHVyZSAoaW5mZXJpb3Jf cHRpZCk7Ci0KLQkgIHdoaWxlICgxKQotCSAgICB7Ci0JICAgICAgcmV0ID0g cmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAocmVjb3JkX2JlbmVhdGhfdG9fd2Fp dF9vcHMsCi0JCQkJCSAgICBwdGlkLCBzdGF0dXMsIG9wdGlvbnMpOwotCSAg ICAgIGlmIChzdGF0dXMtPmtpbmQgPT0gVEFSR0VUX1dBSVRLSU5EX0lHTk9S RSkKLQkJewotCQkgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX3dhaXQgIgotCQkJCQkidGFyZ2V0IGJlbmVhdGggbm90IGRv bmUgeWV0XG4iKTsKLQkJICByZXR1cm4gcmV0OwotCQl9Ci0KLSAgICAgICAg ICAgICAgaWYgKHNpbmdsZV9zdGVwX2JyZWFrcG9pbnRzX2luc2VydGVkICgp KQotICAgICAgICAgICAgICAgIHJlbW92ZV9zaW5nbGVfc3RlcF9icmVha3Bv aW50cyAoKTsKLQotCSAgICAgIGlmIChyZWNvcmRfcmVzdW1lX3N0ZXApCi0J CXJldHVybiByZXQ7Ci0KLQkgICAgICAvKiBJcyB0aGlzIGEgU0lHVFJBUD8g ICovCi0JICAgICAgaWYgKHN0YXR1cy0+a2luZCA9PSBUQVJHRVRfV0FJVEtJ TkRfU1RPUFBFRAotCQkgICYmIHN0YXR1cy0+dmFsdWUuc2lnID09IEdEQl9T SUdOQUxfVFJBUCkKLQkJewotCQkgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGU7Ci0JCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKLQotCQkg IC8qIFllcyAtLSB0aGlzIGlzIGxpa2VseSBvdXIgc2luZ2xlLXN0ZXAgZmlu aXNoaW5nLAotCQkgICAgIGJ1dCBjaGVjayBpZiB0aGVyZSdzIGFueSByZWFz b24gdGhlIGNvcmUgd291bGQgYmUKLQkJICAgICBpbnRlcmVzdGVkIGluIHRo ZSBldmVudC4gICovCi0KLQkJICByZWdpc3RlcnNfY2hhbmdlZCAoKTsKLQkJ ICByZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOwotCQkgIHRt cF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsKLQkJICBhc3Bh Y2UgPSBnZXRfcmVnY2FjaGVfYXNwYWNlIChyZWdjYWNoZSk7Ci0KLQkJICBp ZiAodGFyZ2V0X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAoKSkKLQkJICAgIHsK LQkJICAgICAgLyogQWx3YXlzIGludGVyZXN0ZWQgaW4gd2F0Y2hwb2ludHMu ICAqLwotCQkgICAgfQotCQkgIGVsc2UgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0 ZWRfaGVyZV9wIChhc3BhY2UsIHRtcF9wYykpCi0JCSAgICB7Ci0JCSAgICAg IC8qIFRoZXJlIGlzIGEgYnJlYWtwb2ludCBoZXJlLiAgTGV0IHRoZSBjb3Jl Ci0JCQkgaGFuZGxlIGl0LiAgKi8KLQkJICAgICAgaWYgKHNvZnR3YXJlX2Jy ZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wIChhc3BhY2UsIHRtcF9wYykpCi0J CQl7Ci0JCQkgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoCi0JCQkgICAgPSBn ZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOwotCQkJICBDT1JFX0FERFIg ZGVjcl9wY19hZnRlcl9icmVhawotCQkJICAgID0gZ2RiYXJjaF9kZWNyX3Bj X2FmdGVyX2JyZWFrIChnZGJhcmNoKTsKLQkJCSAgaWYgKGRlY3JfcGNfYWZ0 ZXJfYnJlYWspCi0JCQkgICAgcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hl LAotCQkJCQkgICAgICAgdG1wX3BjICsgZGVjcl9wY19hZnRlcl9icmVhayk7 Ci0JCQl9Ci0JCSAgICB9Ci0JCSAgZWxzZQotCQkgICAgewotCQkgICAgICAv KiBUaGlzIGlzIGEgc2luZ2xlLXN0ZXAgdHJhcC4gIFJlY29yZCB0aGUKLQkJ ICAgICAgICAgaW5zbiBhbmQgaXNzdWUgYW5vdGhlciBzdGVwLgotICAgICAg ICAgICAgICAgICAgICAgICAgIEZJWE1FOiB0aGlzIHBhcnQgY2FuIGJlIGEg cmFuZG9tIFNJR1RSQVAgdG9vLgotICAgICAgICAgICAgICAgICAgICAgICAg IEJ1dCBHREIgY2Fubm90IGhhbmRsZSBpdC4gICovCi0gICAgICAgICAgICAg ICAgICAgICAgaW50IHN0ZXAgPSAxOwotCi0JCSAgICAgIGlmICghcmVjb3Jk X21lc3NhZ2Vfd3JhcHBlcl9zYWZlIChyZWdjYWNoZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0RCX1NJR05BTF8wKSkKLSAgCQkJewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQ7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMtPnZhbHVlLnNp ZyA9IEdEQl9TSUdOQUxfMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwotICAJCQl9Ci0KLSAgICAgICAgICAgICAgICAgICAgICBpZiAo Z2RiYXJjaF9zb2Z0d2FyZV9zaW5nbGVfc3RlcF9wIChnZGJhcmNoKSkKLQkJ CXsKLQkJCSAgLyogVHJ5IHRvIGluc2VydCB0aGUgc29mdHdhcmUgc2luZ2xl IHN0ZXAgYnJlYWtwb2ludC4KLQkJCSAgICAgSWYgaW5zZXJ0IHN1Y2Nlc3Ms IHNldCBzdGVwIHRvIDAuICAqLwotCQkJICBzZXRfZXhlY3V0aW5nIChpbmZl cmlvcl9wdGlkLCAwKTsKLQkJCSAgcmVpbml0X2ZyYW1lX2NhY2hlICgpOwot CQkJICBpZiAoZ2RiYXJjaF9zb2Z0d2FyZV9zaW5nbGVfc3RlcCAoZ2RiYXJj aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldF9jdXJyZW50X2ZyYW1lICgpKSkKLQkJ CSAgICBzdGVwID0gMDsKLQkJCSAgc2V0X2V4ZWN1dGluZyAoaW5mZXJpb3Jf cHRpZCwgMSk7Ci0JCQl9Ci0KLQkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykK LQkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAg ICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX3dhaXQgIgotCQkJCQkgICAgImlz c3Vpbmcgb25lIG1vcmUgc3RlcCBpbiB0aGUgdGFyZ2V0IGJlbmVhdGhcbiIp OwotCQkgICAgICByZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgKHJlY29yZF9i ZW5lYXRoX3RvX3Jlc3VtZV9vcHMsCi0JCQkJCQlwdGlkLCBzdGVwLAotCQkJ CQkJR0RCX1NJR05BTF8wKTsKLQkJICAgICAgY29udGludWU7Ci0JCSAgICB9 Ci0JCX0KLQotCSAgICAgIC8qIFRoZSBpbmZlcmlvciBpcyBicm9rZW4gYnkg YSBicmVha3BvaW50IG9yIGEgc2lnbmFsLiAgKi8KLQkgICAgICBicmVhazsK LQkgICAgfQotCi0JICByZXR1cm4gcmV0OwotCX0KLSAgICB9Ci0gIGVsc2UK LSAgICB7Ci0gICAgICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0 X2N1cnJlbnRfcmVnY2FjaGUgKCk7Ci0gICAgICBzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSk7Ci0gICAg ICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYXNwYWNlID0gZ2V0X3JlZ2NhY2hl X2FzcGFjZSAocmVnY2FjaGUpOwotICAgICAgaW50IGNvbnRpbnVlX2ZsYWcg PSAxOwotICAgICAgaW50IGZpcnN0X3JlY29yZF9lbmQgPSAxOwotICAgICAg c3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAo cmVjb3JkX3dhaXRfY2xlYW51cHMsIDApOwotICAgICAgQ09SRV9BRERSIHRt cF9wYzsKLQotICAgICAgcmVjb3JkX2h3X3dhdGNocG9pbnQgPSAwOwotICAg ICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQ7Ci0K LSAgICAgIC8qIENoZWNrIGJyZWFrcG9pbnQgd2hlbiBmb3J3YXJkIGV4ZWN1 dGUuICAqLwotICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhF Q19GT1JXQVJEKQotCXsKLQkgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMg KHJlZ2NhY2hlKTsKLQkgIGlmIChicmVha3BvaW50X2luc2VydGVkX2hlcmVf cCAoYXNwYWNlLCB0bXBfcGMpKQotCSAgICB7Ci0JICAgICAgaW50IGRlY3Jf cGNfYWZ0ZXJfYnJlYWsgPSBnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsg KGdkYmFyY2gpOwotCi0JICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKLQkJZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCSAgICAiUHJvY2Vz cyByZWNvcmQ6IGJyZWFrIGF0ICVzLlxuIiwKLQkJCQkgICAgcGFkZHJlc3Mg KGdkYmFyY2gsIHRtcF9wYykpOwotCi0JICAgICAgaWYgKGRlY3JfcGNfYWZ0 ZXJfYnJlYWsKLQkJICAmJiAhcmVjb3JkX3Jlc3VtZV9zdGVwCi0JCSAgJiYg c29mdHdhcmVfYnJlYWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKGFzcGFjZSwg dG1wX3BjKSkKLQkJcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAotCQkJ CSAgIHRtcF9wYyArIGRlY3JfcGNfYWZ0ZXJfYnJlYWspOwotCSAgICAgIGdv dG8gcmVwbGF5X291dDsKLQkgICAgfQotCX0KLQotICAgICAgLyogSWYgR0RC IGlzIGluIHRlcm1pbmFsX2luZmVyaW9yIG1vZGUsIGl0IHdpbGwgbm90IGdl dCB0aGUgc2lnbmFsLgotICAgICAgICAgQW5kIGluIEdEQiByZXBsYXkgbW9k ZSwgR0RCIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiB0ZXJtaW5hbF9pbmZlcmlv cgotICAgICAgICAgbW9kZSwgYmVjYXVzZSBpbmZlcmlvciB3aWxsIG5vdCBl eGVjdXRlZC4KLSAgICAgICAgIFRoZW4gc2V0IGl0IHRvIHRlcm1pbmFsX291 cnMgdG8gbWFrZSBHREIgZ2V0IHRoZSBzaWduYWwuICAqLwotICAgICAgdGFy Z2V0X3Rlcm1pbmFsX291cnMgKCk7Ci0KLSAgICAgIC8qIEluIEVYRUNfRk9S V0FSRCBtb2RlLCByZWNvcmRfbGlzdCBwb2ludHMgdG8gdGhlIHRhaWwgb2Yg cHJldgotICAgICAgICAgaW5zdHJ1Y3Rpb24uICAqLwotICAgICAgaWYgKGV4 ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEICYmIHJlY29yZF9s aXN0LT5uZXh0KQotCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7 Ci0KLSAgICAgIC8qIExvb3Agb3ZlciB0aGUgcmVjb3JkX2xpc3QsIGxvb2tp bmcgZm9yIHRoZSBuZXh0IHBsYWNlIHRvCi0JIHN0b3AuICAqLwotICAgICAg ZG8KLQl7Ci0JICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2Yg bG9nLiAgKi8KLQkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNf UkVWRVJTRQotCSAgICAgICYmIHJlY29yZF9saXN0ID09ICZyZWNvcmRfZmly c3QpCi0JICAgIHsKLQkgICAgICAvKiBIaXQgYmVnaW5uaW5nIG9mIHJlY29y ZCBsb2cgaW4gcmV2ZXJzZS4gICovCi0JICAgICAgc3RhdHVzLT5raW5kID0g VEFSR0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7Ci0JICAgICAgYnJlYWs7Ci0J ICAgIH0KLQkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVW RVJTRSAmJiAhcmVjb3JkX2xpc3QtPm5leHQpCi0JICAgIHsKLQkgICAgICAv KiBIaXQgZW5kIG9mIHJlY29yZCBsb2cgZ29pbmcgZm9yd2FyZC4gICovCi0J ICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RP Ulk7Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQotICAgICAgICAgIHJlY29y ZF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfbGlzdCk7 Ci0KLQkgIGlmIChyZWNvcmRfbGlzdC0+dHlwZSA9PSByZWNvcmRfZW5kKQot CSAgICB7Ci0JICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCi0JCWZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkgICAgIlByb2Nlc3Mg cmVjb3JkOiByZWNvcmRfZW5kICVzIHRvICIKLQkJCQkgICAgImluZmVyaW9y LlxuIiwKLQkJCQkgICAgaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjb3Jk X2xpc3QpKTsKLQotCSAgICAgIGlmIChmaXJzdF9yZWNvcmRfZW5kICYmIGV4 ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQotCQl7Ci0JCSAg LyogV2hlbiByZXZlcnNlIGV4Y3V0ZSwgdGhlIGZpcnN0IHJlY29yZF9lbmQg aXMgdGhlIHBhcnQgb2YKLQkJICAgICBjdXJyZW50IGluc3RydWN0aW9uLiAg Ki8KLQkJICBmaXJzdF9yZWNvcmRfZW5kID0gMDsKLQkJfQotCSAgICAgIGVs c2UKLQkJewotCQkgIC8qIEluIEVYRUNfUkVWRVJTRSBtb2RlLCB0aGlzIGlz IHRoZSByZWNvcmRfZW5kIG9mIHByZXYKLQkJICAgICBpbnN0cnVjdGlvbi4K LQkJICAgICBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgdGhpcyBpcyB0aGUgcmVj b3JkX2VuZCBvZiBjdXJyZW50Ci0JCSAgICAgaW5zdHJ1Y3Rpb24uICAqLwot CQkgIC8qIHN0ZXAgKi8KLQkJICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQot CQkgICAgewotCQkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKLQkJCWZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAgICJQcm9j ZXNzIHJlY29yZDogc3RlcC5cbiIpOwotCQkgICAgICBjb250aW51ZV9mbGFn ID0gMDsKLQkJICAgIH0KLQotCQkgIC8qIGNoZWNrIGJyZWFrcG9pbnQgKi8K LQkJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7Ci0J CSAgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wIChhc3BhY2UsIHRt cF9wYykpCi0JCSAgICB7Ci0JCSAgICAgIGludCBkZWNyX3BjX2FmdGVyX2Jy ZWFrCi0JCQk9IGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoZ2RiYXJj aCk7Ci0KLQkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKLQkJCWZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAgICJQcm9jZXNzIHJl Y29yZDogYnJlYWsgIgotCQkJCQkgICAgImF0ICVzLlxuIiwKLQkJCQkJICAg IHBhZGRyZXNzIChnZGJhcmNoLCB0bXBfcGMpKTsKLQkJICAgICAgaWYgKGRl Y3JfcGNfYWZ0ZXJfYnJlYWsKLQkJCSAgJiYgZXhlY3V0aW9uX2RpcmVjdGlv biA9PSBFWEVDX0ZPUldBUkQKLQkJCSAgJiYgIXJlY29yZF9yZXN1bWVfc3Rl cAotCQkJICAmJiBzb2Z0d2FyZV9icmVha3BvaW50X2luc2VydGVkX2hlcmVf cCAoYXNwYWNlLAotCQkJCQkJCQkgIHRtcF9wYykpCi0JCQlyZWdjYWNoZV93 cml0ZV9wYyAocmVnY2FjaGUsCi0JCQkJCSAgIHRtcF9wYyArIGRlY3JfcGNf YWZ0ZXJfYnJlYWspOwotCQkgICAgICBjb250aW51ZV9mbGFnID0gMDsKLQkJ ICAgIH0KLQotCQkgIGlmIChyZWNvcmRfaHdfd2F0Y2hwb2ludCkKLQkJICAg IHsKLQkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKLQkJCWZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogaGl0IGh3ICIKLQkJCQkJICAgICJ3YXRjaHBvaW50LlxuIik7Ci0JCSAg ICAgIGNvbnRpbnVlX2ZsYWcgPSAwOwotCQkgICAgfQotCQkgIC8qIENoZWNr IHRhcmdldCBzaWduYWwgKi8KLQkJICBpZiAocmVjb3JkX2xpc3QtPnUuZW5k LnNpZ3ZhbCAhPSBHREJfU0lHTkFMXzApCi0JCSAgICAvKiBGSVhNRTogYmV0 dGVyIHdheSB0byBjaGVjayAqLwotCQkgICAgY29udGludWVfZmxhZyA9IDA7 Ci0JCX0KLQkgICAgfQotCi0JICBpZiAoY29udGludWVfZmxhZykKLQkgICAg ewotCSAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVW RVJTRSkKLQkJewotCQkgIGlmIChyZWNvcmRfbGlzdC0+cHJldikKLQkJICAg IHJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPnByZXY7Ci0JCX0KLQkgICAg ICBlbHNlCi0JCXsKLQkJICBpZiAocmVjb3JkX2xpc3QtPm5leHQpCi0JCSAg ICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5uZXh0OwotCQl9Ci0JICAg IH0KLQl9Ci0gICAgICB3aGlsZSAoY29udGludWVfZmxhZyk7Ci0KLXJlcGxh eV9vdXQ6Ci0gICAgICBpZiAocmVjb3JkX2dldF9zaWcpCi0Jc3RhdHVzLT52 YWx1ZS5zaWcgPSBHREJfU0lHTkFMX0lOVDsKLSAgICAgIGVsc2UgaWYgKHJl Y29yZF9saXN0LT51LmVuZC5zaWd2YWwgIT0gR0RCX1NJR05BTF8wKQotCS8q IEZJWE1FOiBiZXR0ZXIgd2F5IHRvIGNoZWNrICovCi0Jc3RhdHVzLT52YWx1 ZS5zaWcgPSByZWNvcmRfbGlzdC0+dS5lbmQuc2lndmFsOwotICAgICAgZWxz ZQotCXN0YXR1cy0+dmFsdWUuc2lnID0gR0RCX1NJR05BTF9UUkFQOwotCi0g ICAgICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOwotICAgIH0K LQotICBzaWduYWwgKFNJR0lOVCwgaGFuZGxlX3NpZ2ludCk7Ci0KLSAgZG9f Y2xlYW51cHMgKHNldF9jbGVhbnVwcyk7Ci0gIHJldHVybiBpbmZlcmlvcl9w dGlkOwotfQotCi1zdGF0aWMgcHRpZF90Ci1yZWNvcmRfd2FpdCAoc3RydWN0 IHRhcmdldF9vcHMgKm9wcywKLQkgICAgIHB0aWRfdCBwdGlkLCBzdHJ1Y3Qg dGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cywKLQkgICAgIGludCBvcHRpb25z KQotewotICBwdGlkX3QgcmV0dXJuX3B0aWQ7Ci0KLSAgcmV0dXJuX3B0aWQg PSByZWNvcmRfd2FpdF8xIChvcHMsIHB0aWQsIHN0YXR1cywgb3B0aW9ucyk7 Ci0gIGlmIChzdGF0dXMtPmtpbmQgIT0gVEFSR0VUX1dBSVRLSU5EX0lHTk9S RSkKLSAgICB7Ci0gICAgICAvKiBXZSdyZSByZXBvcnRpbmcgYSBzdG9wLiAg TWFrZSBzdXJlIGFueSBzcHVyaW91cwotCSB0YXJnZXRfd2FpdChXTk9IQU5H KSBkb2Vzbid0IGFkdmFuY2UgdGhlIHRhcmdldCB1bnRpbCB0aGUKLQkgY29y ZSB3YW50cyB1cyByZXN1bWVkIGFnYWluLiAgKi8KLSAgICAgIHJlY29yZF9y ZXN1bWVkID0gMDsKLSAgICB9Ci0gIHJldHVybiByZXR1cm5fcHRpZDsKLX0K LQotc3RhdGljIGludAotcmVjb3JkX3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAo dm9pZCkKLXsKLSAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCi0gICAgcmV0dXJu IHJlY29yZF9od193YXRjaHBvaW50OwotICBlbHNlCi0gICAgcmV0dXJuIHJl Y29yZF9iZW5lYXRoX3RvX3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAoKTsKLX0K LQotc3RhdGljIGludAotcmVjb3JkX3N0b3BwZWRfZGF0YV9hZGRyZXNzIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBDT1JFX0FERFIgKmFkZHJfcCkKLXsK LSAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCi0gICAgcmV0dXJuIDA7Ci0gIGVs c2UKLSAgICByZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9fc3RvcHBlZF9kYXRh X2FkZHJlc3MgKG9wcywgYWRkcl9wKTsKLX0KLQotLyogInRvX2Rpc2Nvbm5l Y3QiIG1ldGhvZCBmb3IgcHJvY2VzcyByZWNvcmQgdGFyZ2V0LiAgKi8KLQot c3RhdGljIHZvaWQKLXJlY29yZF9kaXNjb25uZWN0IChzdHJ1Y3QgdGFyZ2V0 X29wcyAqdGFyZ2V0LCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi17Ci0g IGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9kaXNjb25uZWN0 XG4iKTsKLQotICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7Ci0gIHRh cmdldF9kaXNjb25uZWN0IChhcmdzLCBmcm9tX3R0eSk7Ci19Ci0KLS8qICJ0 b19kZXRhY2giIG1ldGhvZCBmb3IgcHJvY2VzcyByZWNvcmQgdGFyZ2V0LiAg Ki8KLQotc3RhdGljIHZvaWQKLXJlY29yZF9kZXRhY2ggKHN0cnVjdCB0YXJn ZXRfb3BzICpvcHMsIGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKLXsKLSAg aWYgKHJlY29yZF9kZWJ1ZykKLSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2RldGFjaFxuIik7 Ci0KLSAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOwotICB0YXJnZXRf ZGV0YWNoIChhcmdzLCBmcm9tX3R0eSk7Ci19Ci0KLS8qICJ0b19tb3Vybl9p bmZlcmlvciIgbWV0aG9kIGZvciBwcm9jZXNzIHJlY29yZCB0YXJnZXQuICAq LwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX21vdXJuX2luZmVyaW9yIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqb3BzKQotewotICBpZiAocmVjb3JkX2RlYnVnKQot ICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3Mg cmVjb3JkOiAiCi0JCQkgICAgICAgICAgICAicmVjb3JkX21vdXJuX2luZmVy aW9yXG4iKTsKLQotICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7Ci0g IHRhcmdldF9tb3Vybl9pbmZlcmlvciAoKTsKLX0KLQotLyogQ2xvc2UgcHJv Y2VzcyByZWNvcmQgdGFyZ2V0IGJlZm9yZSBraWxsaW5nIHRoZSBpbmZlcmlv ciBwcm9jZXNzLiAgKi8KLQotc3RhdGljIHZvaWQKLXJlY29yZF9raWxsIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQotewotICBpZiAocmVjb3JkX2RlYnVn KQotICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nl c3MgcmVjb3JkOiByZWNvcmRfa2lsbFxuIik7Ci0KLSAgdW5wdXNoX3Rhcmdl dCAoJnJlY29yZF9vcHMpOwotICB0YXJnZXRfa2lsbCAoKTsKLX0KLQotLyog UmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgKGJ5IHVzZXIgb3IgYnkgR0RCKSB0 byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KLQotc3RhdGljIHZvaWQK LXJlY29yZF9yZWdpc3RlcnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJl Z2NhY2hlLCBpbnQgcmVnbnVtKQotewotICAvKiBDaGVjayByZWNvcmRfaW5z bl9udW0uICAqLwotICByZWNvcmRfY2hlY2tfaW5zbl9udW0gKDApOwotCi0g IHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7Ci0gIHJlY29yZF9hcmNo X2xpc3RfdGFpbCA9IE5VTEw7Ci0KLSAgaWYgKHJlZ251bSA8IDApCi0gICAg ewotICAgICAgaW50IGk7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBnZGJh cmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsg aSsrKQotCXsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJl Z2NhY2hlLCBpKSkKLQkgICAgewotCSAgICAgIHJlY29yZF9saXN0X3JlbGVh c2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7Ci0JICAgICAgZXJyb3IgKF8o IlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBs b2cuIikpOwotCSAgICB9Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBy ZWdudW0pKQotCXsKLQkgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9h cmNoX2xpc3RfdGFpbCk7Ci0JICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6 IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7Ci0JfQotICAg IH0KLSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkKLSAgICB7 Ci0gICAgICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0 X3RhaWwpOwotICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWls ZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOwotICAgIH0KLSAgcmVj b3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7Ci0gIHJl Y29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9saXN0OwotICBy ZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKLQotICBpZiAo cmVjb3JkX2luc25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVj b3JkX2luc25fbWF4X251bSkKLSAgICByZWNvcmRfbGlzdF9yZWxlYXNlX2Zp cnN0ICgpOwotICBlbHNlCi0gICAgcmVjb3JkX2luc25fbnVtKys7Ci19Ci0K LS8qICJ0b19zdG9yZV9yZWdpc3RlcnMiIG1ldGhvZCBmb3IgcHJvY2VzcyBy ZWNvcmQgdGFyZ2V0LiAgKi8KLQotc3RhdGljIHZvaWQKLXJlY29yZF9zdG9y ZV9yZWdpc3RlcnMgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBp bnQgcmVnbm8pCi17Ci0gIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlz YWJsZSkKLSAgICB7Ci0gICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKLQl7 Ci0JICBpbnQgbjsKLQotCSAgLyogTGV0IHVzZXIgY2hvb3NlIGlmIGhlIHdh bnRzIHRvIHdyaXRlIHJlZ2lzdGVyIG9yIG5vdC4gICovCi0JICBpZiAocmVn bm8gPCAwKQotCSAgICBuID0KLQkgICAgICBxdWVyeSAoXygiQmVjYXVzZSBH REIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSAiCi0JCSAgICAg ICAidmFsdWUgb2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhlIGV4ZWN1dGlv biAiCi0JCSAgICAgICAibG9nIHVudXNhYmxlIGZyb20gdGhpcyBwb2ludCBv bndhcmQuICAiCi0JCSAgICAgICAiQ2hhbmdlIGFsbCByZWdpc3RlcnM/Iikp OwotCSAgZWxzZQotCSAgICBuID0KLQkgICAgICBxdWVyeSAoXygiQmVjYXVz ZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSB2YWx1ZSAi Ci0JCSAgICAgICAib2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhlIGV4ZWN1 dGlvbiBsb2cgdW51c2FibGUgIgotCQkgICAgICAgImZyb20gdGhpcyBwb2lu dCBvbndhcmQuICBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCi0JCSAgICAgIGdk YmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2Nh Y2hlKSwKLQkJCQkJICAgICAgIHJlZ25vKSk7Ci0KLQkgIGlmICghbikKLQkg ICAgewotCSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHJlZ2Nh Y2hlIHRoYXQgd2FzIHNldCBpbiBmdW5jdGlvbgotCSAgICAgICAgICJyZWdj YWNoZV9yYXdfd3JpdGUiLiAgKi8KLQkgICAgICBpZiAocmVnbm8gPCAwKQot CQl7Ci0JCSAgaW50IGk7Ci0KLQkJICBmb3IgKGkgPSAwOwotCQkgICAgICAg aSA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdj YWNoZSkpOwotCQkgICAgICAgaSsrKQotCQkgICAgcmVnY2FjaGVfaW52YWxp ZGF0ZSAocmVnY2FjaGUsIGkpOwotCQl9Ci0JICAgICAgZWxzZQotCQlyZWdj YWNoZV9pbnZhbGlkYXRlIChyZWdjYWNoZSwgcmVnbm8pOwotCi0JICAgICAg ZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbmNlbGVkIHRoZSBvcGVyYXRp b24uIikpOwotCSAgICB9Ci0KLQkgIC8qIERlc3Ryb3kgdGhlIHJlY29yZCBm cm9tIGhlcmUgZm9yd2FyZC4gICovCi0JICByZWNvcmRfbGlzdF9yZWxlYXNl X2ZvbGxvd2luZyAocmVjb3JkX2xpc3QpOwotCX0KLQotICAgICAgcmVjb3Jk X3JlZ2lzdGVyc19jaGFuZ2UgKHJlZ2NhY2hlLCByZWdubyk7Ci0gICAgfQot ICByZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMgKHJlY29yZF9i ZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnY2FjaGUsIHJlZ25vKTsKLX0K LQotLyogInRvX3hmZXJfcGFydGlhbCIgbWV0aG9kLiAgQmVoYXZpb3IgaXMg Y29uZGl0aW9uYWwgb24gUkVDT1JEX0lTX1JFUExBWS4KLSAgIEluIHJlcGxh eSBtb2RlLCB3ZSBjYW5ub3Qgd3JpdGUgbWVtb3J5IHVubGVzIHdlIGFyZSB3 aWxsaW5nIHRvCi0gICBpbnZhbGlkYXRlIHRoZSByZWNvcmQvcmVwbGF5IGxv ZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gICovCi0KLXN0YXRpYyBMT05H RVNUCi1yZWNvcmRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAq b3BzLCBlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAotCQkgICAgIGNvbnN0 IGNoYXIgKmFubmV4LCBnZGJfYnl0ZSAqcmVhZGJ1ZiwKLQkJICAgICBjb25z dCBnZGJfYnl0ZSAqd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwgTE9OR0VT VCBsZW4pCi17Ci0gIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJs ZQotICAgICAgJiYgKG9iamVjdCA9PSBUQVJHRVRfT0JKRUNUX01FTU9SWQot CSAgfHwgb2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfUkFXX01FTU9SWSkgJiYg d3JpdGVidWYpCi0gICAgewotICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkp Ci0JewotCSAgLyogTGV0IHVzZXIgY2hvb3NlIGlmIGhlIHdhbnRzIHRvIHdy aXRlIG1lbW9yeSBvciBub3QuICAqLwotCSAgaWYgKCFxdWVyeSAoXygiQmVj YXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIHdyaXRpbmcgdG8gbWVtb3J5 ICIKLQkJICAgICAgICAid2lsbCBtYWtlIHRoZSBleGVjdXRpb24gbG9nIHVu dXNhYmxlIGZyb20gdGhpcyAiCi0JCSAgICAgICAgInBvaW50IG9ud2FyZC4g IFdyaXRlIG1lbW9yeSBhdCBhZGRyZXNzICVzPyIpLAotCQkgICAgICAgcGFk ZHJlc3MgKHRhcmdldF9nZGJhcmNoICgpLCBvZmZzZXQpKSkKLQkgICAgZXJy b3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbmNlbGVkIHRoZSBvcGVyYXRpb24u IikpOwotCi0JICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZv cndhcmQuICAqLwotCSAgcmVjb3JkX2xpc3RfcmVsZWFzZV9mb2xsb3dpbmcg KHJlY29yZF9saXN0KTsKLQl9Ci0KLSAgICAgIC8qIENoZWNrIHJlY29yZF9p bnNuX251bSAqLwotICAgICAgcmVjb3JkX2NoZWNrX2luc25fbnVtICgwKTsK LQotICAgICAgLyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgdG8gbGlzdCBh cyBhbiBpbnN0cnVjdGlvbi4gICovCi0gICAgICByZWNvcmRfYXJjaF9saXN0 X2hlYWQgPSBOVUxMOwotICAgICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0g TlVMTDsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKG9m ZnNldCwgbGVuKSkKLQl7Ci0JICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNv cmRfYXJjaF9saXN0X3RhaWwpOwotCSAgaWYgKHJlY29yZF9kZWJ1ZykKLQkg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCSJQcm9j ZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCAiCi0JCQkJImV4ZWN1dGlv biBsb2cuIik7Ci0JICByZXR1cm4gLTE7Ci0JfQotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkKLQl7Ci0JICByZWNvcmRfbGlzdF9y ZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOwotCSAgaWYgKHJlY29y ZF9kZWJ1ZykKLQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAotCQkJCSJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCAiCi0J CQkJImV4ZWN1dGlvbiBsb2cuIik7Ci0JICByZXR1cm4gLTE7Ci0JfQotICAg ICAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7 Ci0gICAgICByZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRf bGlzdDsKLSAgICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90 YWlsOwotCi0gICAgICBpZiAocmVjb3JkX2luc25fbnVtID09IHJlY29yZF9p bnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKLQlyZWNvcmRf bGlzdF9yZWxlYXNlX2ZpcnN0ICgpOwotICAgICAgZWxzZQotCXJlY29yZF9p bnNuX251bSsrOwotICAgIH0KLQotICByZXR1cm4gcmVjb3JkX2JlbmVhdGhf dG9feGZlcl9wYXJ0aWFsIChyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRp YWxfb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvYmplY3QsIGFubmV4LCByZWFkYnVmLCB3cml0ZWJ1ZiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBs ZW4pOwotfQotCi0vKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgYnJl YWtwb2ludCBpbnNlcnRlZCB3aGlsZSB0aGUgcmVjb3JkCi0gICB0YXJnZXQg aXMgYWN0aXZlLiAgV2UgdXNlIHRoaXMgdG8ga25vdyB3aGVuIHRvIGluc3Rh bGwvcmVtb3ZlCi0gICBicmVha3BvaW50cyBpbi9mcm9tIHRoZSB0YXJnZXQg YmVuZWF0aC4gIEZvciBleGFtcGxlLCBhIGJyZWFrcG9pbnQKLSAgIG1heSBi ZSBpbnNlcnRlZCB3aGlsZSByZWNvcmRpbmcsIGJ1dCByZW1vdmVkIHdoZW4g bm90IHJlcGxheWluZyBub3IKLSAgIHJlY29yZGluZy4gIEluIHRoYXQgY2Fz ZSwgdGhlIGJyZWFrcG9pbnQgaGFkIG5vdCBiZWVuIGluc2VydGVkIG9uCi0g ICB0aGUgdGFyZ2V0IGJlbmVhdGgsIHNvIHdlIHNob3VsZCBub3QgdHJ5IHRv IHJlbW92ZSBpdCB0aGVyZS4gICovCi0KLXN0cnVjdCByZWNvcmRfYnJlYWtw b2ludAotewotICAvKiBUaGUgYWRkcmVzcyBhbmQgYWRkcmVzcyBzcGFjZSB0 aGUgYnJlYWtwb2ludCB3YXMgc2V0IGF0LiAgKi8KLSAgc3RydWN0IGFkZHJl c3Nfc3BhY2UgKmFkZHJlc3Nfc3BhY2U7Ci0gIENPUkVfQUREUiBhZGRyOwot Ci0gIC8qIFRydWUgd2hlbiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbiBhbHNv IGluc3RhbGxlZCBpbiB0aGUgdGFyZ2V0Ci0gICAgIGJlbmVhdGguICBUaGlz IHdpbGwgYmUgZmFsc2UgZm9yIGJyZWFrcG9pbnRzIHNldCBkdXJpbmcgcmVw bGF5IG9yCi0gICAgIHdoZW4gcmVjb3JkaW5nLiAgKi8KLSAgaW50IGluX3Rh cmdldF9iZW5lYXRoOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX2Jy ZWFrcG9pbnQgKnJlY29yZF9icmVha3BvaW50X3A7Ci1ERUZfVkVDX1AocmVj b3JkX2JyZWFrcG9pbnRfcCk7Ci0KLS8qIFRoZSBsaXN0IG9mIGJyZWFrcG9p bnRzIGluc2VydGVkIHdoaWxlIHRoZSByZWNvcmQgdGFyZ2V0IGlzCi0gICBh Y3RpdmUuICAqLwotVkVDKHJlY29yZF9icmVha3BvaW50X3ApICpyZWNvcmRf YnJlYWtwb2ludHMgPSBOVUxMOwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX3N5 bmNfcmVjb3JkX2JyZWFrcG9pbnRzIChzdHJ1Y3QgYnBfbG9jYXRpb24gKmxv Yywgdm9pZCAqZGF0YSkKLXsKLSAgaWYgKGxvYy0+bG9jX3R5cGUgIT0gYnBf bG9jX3NvZnR3YXJlX2JyZWFrcG9pbnQpCi0gICAgICByZXR1cm47Ci0KLSAg aWYgKGxvYy0+aW5zZXJ0ZWQpCi0gICAgewotICAgICAgc3RydWN0IHJlY29y ZF9icmVha3BvaW50ICpicCA9IFhORVcgKHN0cnVjdCByZWNvcmRfYnJlYWtw b2ludCk7Ci0KLSAgICAgIGJwLT5hZGRyID0gbG9jLT50YXJnZXRfaW5mby5w bGFjZWRfYWRkcmVzczsKLSAgICAgIGJwLT5hZGRyZXNzX3NwYWNlID0gbG9j LT50YXJnZXRfaW5mby5wbGFjZWRfYWRkcmVzc19zcGFjZTsKLQotICAgICAg YnAtPmluX3RhcmdldF9iZW5lYXRoID0gMTsKLQotICAgICAgVkVDX3NhZmVf cHVzaCAocmVjb3JkX2JyZWFrcG9pbnRfcCwgcmVjb3JkX2JyZWFrcG9pbnRz LCBicCk7Ci0gICAgfQotfQotCi0vKiBTeW5jIGV4aXN0aW5nIGJyZWFrcG9p bnRzIHRvIHJlY29yZF9icmVha3BvaW50cy4gICovCi0KLXN0YXRpYyB2b2lk Ci1yZWNvcmRfaW5pdF9yZWNvcmRfYnJlYWtwb2ludHMgKHZvaWQpCi17Ci0g IFZFQ19mcmVlIChyZWNvcmRfYnJlYWtwb2ludF9wLCByZWNvcmRfYnJlYWtw b2ludHMpOwotCi0gIGl0ZXJhdGVfb3Zlcl9icF9sb2NhdGlvbnMgKHJlY29y ZF9zeW5jX3JlY29yZF9icmVha3BvaW50cyk7Ci19Ci0KLS8qIEJlaGF2aW9y IGlzIGNvbmRpdGlvbmFsIG9uIFJFQ09SRF9JU19SRVBMQVkuICBXZSB3aWxs IG5vdCBhY3R1YWxseQotICAgaW5zZXJ0IG9yIHJlbW92ZSBicmVha3BvaW50 cyBpbiB0aGUgcmVhbCB0YXJnZXQgd2hlbiByZXBsYXlpbmcsIG5vcgotICAg d2hlbiByZWNvcmRpbmcuICAqLwotCi1zdGF0aWMgaW50Ci1yZWNvcmRfaW5z ZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotCQkJ ICBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKLXsKLSAgc3RydWN0 IHJlY29yZF9icmVha3BvaW50ICpicDsKLSAgaW50IGluX3RhcmdldF9iZW5l YXRoID0gMDsKLQotICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCi0gICAgewot ICAgICAgLyogV2hlbiByZWNvcmRpbmcsIHdlIGN1cnJlbnRseSBhbHdheXMg c2luZ2xlLXN0ZXAsIHNvIHdlIGRvbid0Ci0JIHJlYWxseSBuZWVkIHRvIGlu c3RhbGwgcmVndWxhciBicmVha3BvaW50cyBpbiB0aGUgaW5mZXJpb3IuCi0J IEhvd2V2ZXIsIHdlIGRvIGhhdmUgdG8gaW5zZXJ0IHNvZnR3YXJlIHNpbmds ZS1zdGVwCi0JIGJyZWFrcG9pbnRzLCBpbiBjYXNlIHRoZSB0YXJnZXQgY2Fu J3QgaGFyZHdhcmUgc3RlcC4gIFRvIGtlZXAKLQkgdGhpbmdzIHNpbmdsZSwg d2UgYWx3YXlzIGluc2VydC4gICovCi0gICAgICBzdHJ1Y3QgY2xlYW51cCAq b2xkX2NsZWFudXBzOwotICAgICAgaW50IHJldDsKLQotICAgICAgb2xkX2Ns ZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7 Ci0gICAgICByZXQgPSByZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJlYWtw b2ludCAoZ2RiYXJjaCwgYnBfdGd0KTsKLSAgICAgIGRvX2NsZWFudXBzIChv bGRfY2xlYW51cHMpOwotCi0gICAgICBpZiAocmV0ICE9IDApCi0JcmV0dXJu IHJldDsKLQotICAgICAgaW5fdGFyZ2V0X2JlbmVhdGggPSAxOwotICAgIH0K LQotICBicCA9IFhORVcgKHN0cnVjdCByZWNvcmRfYnJlYWtwb2ludCk7Ci0g IGJwLT5hZGRyID0gYnBfdGd0LT5wbGFjZWRfYWRkcmVzczsKLSAgYnAtPmFk ZHJlc3Nfc3BhY2UgPSBicF90Z3QtPnBsYWNlZF9hZGRyZXNzX3NwYWNlOwot ICBicC0+aW5fdGFyZ2V0X2JlbmVhdGggPSBpbl90YXJnZXRfYmVuZWF0aDsK LSAgVkVDX3NhZmVfcHVzaCAocmVjb3JkX2JyZWFrcG9pbnRfcCwgcmVjb3Jk X2JyZWFrcG9pbnRzLCBicCk7Ci0gIHJldHVybiAwOwotfQotCi0vKiAidG9f cmVtb3ZlX2JyZWFrcG9pbnQiIG1ldGhvZCBmb3IgcHJvY2VzcyByZWNvcmQg dGFyZ2V0LiAgKi8KLQotc3RhdGljIGludAotcmVjb3JkX3JlbW92ZV9icmVh a3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLQkJCSAgc3RydWN0 IGJwX3RhcmdldF9pbmZvICpicF90Z3QpCi17Ci0gIHN0cnVjdCByZWNvcmRf YnJlYWtwb2ludCAqYnA7Ci0gIGludCBpeDsKLQotICBmb3IgKGl4ID0gMDsK LSAgICAgICBWRUNfaXRlcmF0ZSAocmVjb3JkX2JyZWFrcG9pbnRfcCwgcmVj b3JkX2JyZWFrcG9pbnRzLCBpeCwgYnApOwotICAgICAgICsraXgpCi0gICAg ewotICAgICAgaWYgKGJwLT5hZGRyID09IGJwX3RndC0+cGxhY2VkX2FkZHJl c3MKLQkgICYmIGJwLT5hZGRyZXNzX3NwYWNlID09IGJwX3RndC0+cGxhY2Vk X2FkZHJlc3Nfc3BhY2UpCi0JewotCSAgaWYgKGJwLT5pbl90YXJnZXRfYmVu ZWF0aCkKLQkgICAgewotCSAgICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xl YW51cHM7Ci0JICAgICAgaW50IHJldDsKLQotCSAgICAgIG9sZF9jbGVhbnVw cyA9IHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOwotCSAg ICAgIHJldCA9IHJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50 IChnZGJhcmNoLCBicF90Z3QpOwotCSAgICAgIGRvX2NsZWFudXBzIChvbGRf Y2xlYW51cHMpOwotCi0JICAgICAgaWYgKHJldCAhPSAwKQotCQlyZXR1cm4g cmV0OwotCSAgICB9Ci0KLQkgIFZFQ191bm9yZGVyZWRfcmVtb3ZlIChyZWNv cmRfYnJlYWtwb2ludF9wLCByZWNvcmRfYnJlYWtwb2ludHMsIGl4KTsKLQkg IHJldHVybiAwOwotCX0KLSAgICB9Ci0KLSAgZ2RiX2Fzc2VydF9ub3RfcmVh Y2hlZCAoInJlbW92aW5nIHVua25vd24gYnJlYWtwb2ludCIpOwotfQotCi0v KiAidG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSIgbWV0aG9kIGZvciBwcm9jZXNz IHJlY29yZCB0YXJnZXQuICAqLwotCi1zdGF0aWMgaW50Ci1yZWNvcmRfY2Fu X2V4ZWN1dGVfcmV2ZXJzZSAodm9pZCkKLXsKLSAgcmV0dXJuIDE7Ci19Ci0K LS8qICJ0b19nZXRfYm9va21hcmsiIG1ldGhvZCBmb3IgcHJvY2VzcyByZWNv cmQgYW5kIHByZWMgb3ZlciBjb3JlLiAgKi8KLQotc3RhdGljIGdkYl9ieXRl ICoKLXJlY29yZF9nZXRfYm9va21hcmsgKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkKLXsKLSAgZ2RiX2J5dGUgKnJldCA9IE5VTEw7Ci0KLSAgLyogUmV0 dXJuIHN0cmluZ2lmaWVkIGZvcm0gb2YgaW5zdHJ1Y3Rpb24gY291bnQuICAq LwotICBpZiAocmVjb3JkX2xpc3QgJiYgcmVjb3JkX2xpc3QtPnR5cGUgPT0g cmVjb3JkX2VuZCkKLSAgICByZXQgPSB4c3RyZHVwIChwdWxvbmdlc3QgKHJl Y29yZF9saXN0LT51LmVuZC5pbnNuX251bSkpOwotCi0gIGlmIChyZWNvcmRf ZGVidWcpCi0gICAgewotICAgICAgaWYgKHJldCkKLQlmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCi0JCQkgICAgInJlY29yZF9nZXRfYm9va21h cmsgcmV0dXJucyAlc1xuIiwgcmV0KTsKLSAgICAgIGVsc2UKLQlmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkgICAgInJlY29yZF9nZXRf Ym9va21hcmsgcmV0dXJucyBOVUxMXG4iKTsKLSAgICB9Ci0gIHJldHVybiBy ZXQ7Ci19Ci0KLS8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tbWFu ZCAicmVjb3JkIGdvdG8iLiAgKi8KLXN0YXRpYyB2b2lkIGNtZF9yZWNvcmRf Z290byAoY2hhciAqLCBpbnQpOwotCi0vKiAidG9fZ290b19ib29rbWFyayIg bWV0aG9kIGZvciBwcm9jZXNzIHJlY29yZCBhbmQgcHJlYyBvdmVyIGNvcmUu ICAqLwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX2dvdG9fYm9va21hcmsgKGdk Yl9ieXRlICpib29rbWFyaywgaW50IGZyb21fdHR5KQotewotICBpZiAocmVj b3JkX2RlYnVnKQotICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKLQkJCSJyZWNvcmRfZ290b19ib29rbWFyayByZWNlaXZlcyAlc1xuIiwg Ym9va21hcmspOwotCi0gIGlmIChib29rbWFya1swXSA9PSAnXCcnIHx8IGJv b2ttYXJrWzBdID09ICdcIicpCi0gICAgewotICAgICAgaWYgKGJvb2ttYXJr W3N0cmxlbiAoYm9va21hcmspIC0gMV0gIT0gYm9va21hcmtbMF0pCi0JZXJy b3IgKF8oIlVuYmFsYW5jZWQgcXVvdGVzOiAlcyIpLCBib29rbWFyayk7Ci0K LSAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHF1b3RlLiAgKi8KLSAgICAgIGJv b2ttYXJrW3N0cmxlbiAoYm9va21hcmspIC0gMV0gPSAnXDAnOwotICAgICAg LyogU3RyaXAgbGVhZGluZyBxdW90ZS4gICovCi0gICAgICBib29rbWFyaysr OwotICAgICAgLyogUGFzcyBhbG9uZyB0byBjbWRfcmVjb3JkX2dvdG8uICAq LwotICAgIH0KLQotICBjbWRfcmVjb3JkX2dvdG8gKChjaGFyICopIGJvb2tt YXJrLCBmcm9tX3R0eSk7Ci0gIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQK LXJlY29yZF9hc3luYyAodm9pZCAoKmNhbGxiYWNrKSAoZW51bSBpbmZlcmlv cl9ldmVudF90eXBlIGV2ZW50X3R5cGUsCi0JCQkJdm9pZCAqY29udGV4dCks IHZvaWQgKmNvbnRleHQpCi17Ci0gIC8qIElmIHdlJ3JlIG9uIHRvcCBvZiBh IGxpbmUgdGFyZ2V0IChlLmcuLCBsaW51eC1uYXQsIHJlbW90ZSksIHRoZW4K LSAgICAgc2V0IGl0IHRvIGFzeW5jIG1vZGUgYXMgd2VsbC4gIFdpbGwgYmUg TlVMTCBpZiB3ZSdyZSBzaXR0aW5nIG9uCi0gICAgIHRvcCBvZiB0aGUgY29y ZSB0YXJnZXQsIGZvciAicmVjb3JkIHJlc3RvcmUiLiAgKi8KLSAgaWYgKHJl Y29yZF9iZW5lYXRoX3RvX2FzeW5jICE9IE5VTEwpCi0gICAgcmVjb3JkX2Jl bmVhdGhfdG9fYXN5bmMgKGNhbGxiYWNrLCBjb250ZXh0KTsKLX0KLQotc3Rh dGljIGludAotcmVjb3JkX2Nhbl9hc3luY19wICh2b2lkKQotewotICAvKiBX ZSBvbmx5IGVuYWJsZSBhc3luYyB3aGVuIHRoZSB1c2VyIHNwZWNpZmljYWxs eSBhc2tzIGZvciBpdC4gICovCi0gIHJldHVybiB0YXJnZXRfYXN5bmNfcGVy bWl0dGVkOwotfQotCi1zdGF0aWMgaW50Ci1yZWNvcmRfaXNfYXN5bmNfcCAo dm9pZCkKLXsKLSAgLyogV2Ugb25seSBlbmFibGUgYXN5bmMgd2hlbiB0aGUg dXNlciBzcGVjaWZpY2FsbHkgYXNrcyBmb3IgaXQuICAqLwotICByZXR1cm4g dGFyZ2V0X2FzeW5jX3Blcm1pdHRlZDsKLX0KLQotc3RhdGljIGVudW0gZXhl Y19kaXJlY3Rpb25fa2luZAotcmVjb3JkX2V4ZWN1dGlvbl9kaXJlY3Rpb24g KHZvaWQpCi17Ci0gIHJldHVybiByZWNvcmRfZXhlY3V0aW9uX2RpcjsKLX0K LQotc3RhdGljIHZvaWQKLWluaXRfcmVjb3JkX29wcyAodm9pZCkKLXsKLSAg cmVjb3JkX29wcy50b19zaG9ydG5hbWUgPSAicmVjb3JkIjsKLSAgcmVjb3Jk X29wcy50b19sb25nbmFtZSA9ICJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5 IHRhcmdldCI7Ci0gIHJlY29yZF9vcHMudG9fZG9jID0KLSAgICAiTG9nIHBy b2dyYW0gd2hpbGUgZXhlY3V0aW5nIGFuZCByZXBsYXkgZXhlY3V0aW9uIGZy b20gbG9nLiI7Ci0gIHJlY29yZF9vcHMudG9fb3BlbiA9IHJlY29yZF9vcGVu OwotICByZWNvcmRfb3BzLnRvX2Nsb3NlID0gcmVjb3JkX2Nsb3NlOwotICBy ZWNvcmRfb3BzLnRvX3Jlc3VtZSA9IHJlY29yZF9yZXN1bWU7Ci0gIHJlY29y ZF9vcHMudG9fd2FpdCA9IHJlY29yZF93YWl0OwotICByZWNvcmRfb3BzLnRv X2Rpc2Nvbm5lY3QgPSByZWNvcmRfZGlzY29ubmVjdDsKLSAgcmVjb3JkX29w cy50b19kZXRhY2ggPSByZWNvcmRfZGV0YWNoOwotICByZWNvcmRfb3BzLnRv X21vdXJuX2luZmVyaW9yID0gcmVjb3JkX21vdXJuX2luZmVyaW9yOwotICBy ZWNvcmRfb3BzLnRvX2tpbGwgPSByZWNvcmRfa2lsbDsKLSAgcmVjb3JkX29w cy50b19jcmVhdGVfaW5mZXJpb3IgPSBmaW5kX2RlZmF1bHRfY3JlYXRlX2lu ZmVyaW9yOwotICByZWNvcmRfb3BzLnRvX3N0b3JlX3JlZ2lzdGVycyA9IHJl Y29yZF9zdG9yZV9yZWdpc3RlcnM7Ci0gIHJlY29yZF9vcHMudG9feGZlcl9w YXJ0aWFsID0gcmVjb3JkX3hmZXJfcGFydGlhbDsKLSAgcmVjb3JkX29wcy50 b19pbnNlcnRfYnJlYWtwb2ludCA9IHJlY29yZF9pbnNlcnRfYnJlYWtwb2lu dDsKLSAgcmVjb3JkX29wcy50b19yZW1vdmVfYnJlYWtwb2ludCA9IHJlY29y ZF9yZW1vdmVfYnJlYWtwb2ludDsKLSAgcmVjb3JkX29wcy50b19zdG9wcGVk X2J5X3dhdGNocG9pbnQgPSByZWNvcmRfc3RvcHBlZF9ieV93YXRjaHBvaW50 OwotICByZWNvcmRfb3BzLnRvX3N0b3BwZWRfZGF0YV9hZGRyZXNzID0gcmVj b3JkX3N0b3BwZWRfZGF0YV9hZGRyZXNzOwotICByZWNvcmRfb3BzLnRvX2Nh bl9leGVjdXRlX3JldmVyc2UgPSByZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJz ZTsKLSAgcmVjb3JkX29wcy50b19zdHJhdHVtID0gcmVjb3JkX3N0cmF0dW07 Ci0gIC8qIEFkZCBib29rbWFyayB0YXJnZXQgbWV0aG9kcy4gICovCi0gIHJl Y29yZF9vcHMudG9fZ2V0X2Jvb2ttYXJrID0gcmVjb3JkX2dldF9ib29rbWFy azsKLSAgcmVjb3JkX29wcy50b19nb3RvX2Jvb2ttYXJrID0gcmVjb3JkX2dv dG9fYm9va21hcms7Ci0gIHJlY29yZF9vcHMudG9fYXN5bmMgPSByZWNvcmRf YXN5bmM7Ci0gIHJlY29yZF9vcHMudG9fY2FuX2FzeW5jX3AgPSByZWNvcmRf Y2FuX2FzeW5jX3A7Ci0gIHJlY29yZF9vcHMudG9faXNfYXN5bmNfcCA9IHJl Y29yZF9pc19hc3luY19wOwotICByZWNvcmRfb3BzLnRvX2V4ZWN1dGlvbl9k aXJlY3Rpb24gPSByZWNvcmRfZXhlY3V0aW9uX2RpcmVjdGlvbjsKLSAgcmVj b3JkX29wcy50b19tYWdpYyA9IE9QU19NQUdJQzsKLX0KLQotLyogInRvX3Jl c3VtZSIgbWV0aG9kIGZvciBwcmVjIG92ZXIgY29yZWZpbGUuICAqLwotCi1z dGF0aWMgdm9pZAotcmVjb3JkX2NvcmVfcmVzdW1lIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqb3BzLCBwdGlkX3QgcHRpZCwgaW50IHN0ZXAsCi0gICAgICAgICAg ICAgICAgICAgIGVudW0gZ2RiX3NpZ25hbCBzaWduYWwpCi17Ci0gIHJlY29y ZF9yZXN1bWVfc3RlcCA9IHN0ZXA7Ci0gIHJlY29yZF9yZXN1bWVkID0gMTsK LSAgcmVjb3JkX2V4ZWN1dGlvbl9kaXIgPSBleGVjdXRpb25fZGlyZWN0aW9u OwotCi0gIC8qIFdlIGFyZSBhYm91dCB0byBzdGFydCBleGVjdXRpbmcgdGhl IGluZmVyaW9yIChvciBzaW11bGF0ZSBpdCksCi0gICAgIGxldCdzIHJlZ2lz dGVyIGl0IHdpdGggdGhlIGV2ZW50IGxvb3AuICAqLwotICBpZiAodGFyZ2V0 X2Nhbl9hc3luY19wICgpKQotICAgIHsKLSAgICAgIHRhcmdldF9hc3luYyAo aW5mZXJpb3JfZXZlbnRfaGFuZGxlciwgMCk7Ci0KLSAgICAgIC8qIE5vdGlm eSB0aGUgZXZlbnQgbG9vcCB0aGVyZSdzIGFuIGV2ZW50IHRvIHdhaXQgZm9y LiAgKi8KLSAgICAgIG1hcmtfYXN5bmNfZXZlbnRfaGFuZGxlciAocmVjb3Jk X2FzeW5jX2luZmVyaW9yX2V2ZW50X3Rva2VuKTsKLSAgICB9Ci19Ci0KLS8q ICJ0b19raWxsIiBtZXRob2QgZm9yIHByZWMgb3ZlciBjb3JlZmlsZS4gICov Ci0KLXN0YXRpYyB2b2lkCi1yZWNvcmRfY29yZV9raWxsIChzdHJ1Y3QgdGFy Z2V0X29wcyAqb3BzKQotewotICBpZiAocmVjb3JkX2RlYnVnKQotICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3Jk OiByZWNvcmRfY29yZV9raWxsXG4iKTsKLQotICB1bnB1c2hfdGFyZ2V0ICgm cmVjb3JkX2NvcmVfb3BzKTsKLX0KLQotLyogInRvX2ZldGNoX3JlZ2lzdGVy cyIgbWV0aG9kIGZvciBwcmVjIG92ZXIgY29yZWZpbGUuICAqLwotCi1zdGF0 aWMgdm9pZAotcmVjb3JkX2NvcmVfZmV0Y2hfcmVnaXN0ZXJzIChzdHJ1Y3Qg dGFyZ2V0X29wcyAqb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgcmVnbm8pCi17Ci0gIGlmIChyZWdubyA8IDAp Ci0gICAgewotICAgICAgaW50IG51bSA9IGdkYmFyY2hfbnVtX3JlZ3MgKGdl dF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOwotICAgICAgaW50IGk7Ci0K LSAgICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkgKyspCi0gICAgICAgIHJl Z2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWNvcmRfY29yZV9yZWdidWYgKyBNQVhfUkVH SVNURVJfU0laRSAqIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHJlZ2NhY2hl X3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCByZWdubywKLSAgICAgICAgICAgICAg ICAgICAgICAgICByZWNvcmRfY29yZV9yZWdidWYgKyBNQVhfUkVHSVNURVJf U0laRSAqIHJlZ25vKTsKLX0KLQotLyogInRvX3ByZXBhcmVfdG9fc3RvcmUi IG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KLQotc3RhdGlj IHZvaWQKLXJlY29yZF9jb3JlX3ByZXBhcmVfdG9fc3RvcmUgKHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUpCi17Ci19Ci0KLS8qICJ0b19zdG9yZV9yZWdp c3RlcnMiIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KLQot c3RhdGljIHZvaWQKLXJlY29yZF9jb3JlX3N0b3JlX3JlZ2lzdGVycyAoc3Ry dWN0IHRhcmdldF9vcHMgKm9wcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHJlZ25vKQotewotICBpZiAocmVjb3Jk X2dkYl9vcGVyYXRpb25fZGlzYWJsZSkKLSAgICByZWdjYWNoZV9yYXdfY29s bGVjdCAocmVnY2FjaGUsIHJlZ25vLAotICAgICAgICAgICAgICAgICAgICAg ICAgICByZWNvcmRfY29yZV9yZWdidWYgKyBNQVhfUkVHSVNURVJfU0laRSAq IHJlZ25vKTsKLSAgZWxzZQotICAgIGVycm9yIChfKCJZb3UgY2FuJ3QgZG8g dGhhdCB3aXRob3V0IGEgcHJvY2VzcyB0byBkZWJ1Zy4iKSk7Ci19Ci0KLS8q ICJ0b194ZmVyX3BhcnRpYWwiIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVm aWxlLiAgKi8KLQotc3RhdGljIExPTkdFU1QKLXJlY29yZF9jb3JlX3hmZXJf cGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgZW51bSB0YXJnZXRf b2JqZWN0IG9iamVjdCwKLQkJICAgICAgICAgIGNvbnN0IGNoYXIgKmFubmV4 LCBnZGJfYnl0ZSAqcmVhZGJ1ZiwKLQkJICAgICAgICAgIGNvbnN0IGdkYl9i eXRlICp3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICBMT05HRVNUIGxlbikKLXsKLSAgaWYgKG9iamVjdCA9 PSBUQVJHRVRfT0JKRUNUX01FTU9SWSkKLSAgICB7Ci0gICAgICBpZiAocmVj b3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSB8fCAhd3JpdGVidWYpCi0Jewot CSAgc3RydWN0IHRhcmdldF9zZWN0aW9uICpwOwotCi0JICBmb3IgKHAgPSBy ZWNvcmRfY29yZV9zdGFydDsgcCA8IHJlY29yZF9jb3JlX2VuZDsgcCsrKQot CSAgICB7Ci0JICAgICAgaWYgKG9mZnNldCA+PSBwLT5hZGRyKQotCQl7Ci0J CSAgc3RydWN0IHJlY29yZF9jb3JlX2J1Zl9lbnRyeSAqZW50cnk7Ci0JCSAg VUxPTkdFU1Qgc2VjX29mZnNldDsKLQotCQkgIGlmIChvZmZzZXQgPj0gcC0+ ZW5kYWRkcikKLQkJICAgIGNvbnRpbnVlOwotCi0JCSAgaWYgKG9mZnNldCAr IGxlbiA+IHAtPmVuZGFkZHIpCi0JCSAgICBsZW4gPSBwLT5lbmRhZGRyIC0g b2Zmc2V0OwotCi0JCSAgc2VjX29mZnNldCA9IG9mZnNldCAtIHAtPmFkZHI7 Ci0KLQkJICAvKiBSZWFkIHJlYWRidWYgb3Igd3JpdGUgd3JpdGVidWYgcCwg b2Zmc2V0LCBsZW4uICAqLwotCQkgIC8qIENoZWNrIGZsYWdzLiAgKi8KLQkJ ICBpZiAocC0+dGhlX2JmZF9zZWN0aW9uLT5mbGFncyAmIFNFQ19DT05TVFJV Q1RPUgotCQkgICAgICB8fCAocC0+dGhlX2JmZF9zZWN0aW9uLT5mbGFncyAm IFNFQ19IQVNfQ09OVEVOVFMpID09IDApCi0JCSAgICB7Ci0JCSAgICAgIGlm IChyZWFkYnVmKQotCQkJbWVtc2V0IChyZWFkYnVmLCAwLCBsZW4pOwotCQkg ICAgICByZXR1cm4gbGVuOwotCQkgICAgfQotCQkgIC8qIEdldCByZWNvcmRf Y29yZV9idWZfZW50cnkuICAqLwotCQkgIGZvciAoZW50cnkgPSByZWNvcmRf Y29yZV9idWZfbGlzdDsgZW50cnk7Ci0JCSAgICAgICBlbnRyeSA9IGVudHJ5 LT5wcmV2KQotCQkgICAgaWYgKGVudHJ5LT5wID09IHApCi0JCSAgICAgIGJy ZWFrOwotCQkgIGlmICh3cml0ZWJ1ZikKLQkJICAgIHsKLQkJICAgICAgaWYg KCFlbnRyeSkKLQkJCXsKLQkJCSAgLyogQWRkIGEgbmV3IGVudHJ5LiAgKi8K LQkJCSAgZW50cnkgPSAoc3RydWN0IHJlY29yZF9jb3JlX2J1Zl9lbnRyeSAq KQotCQkJICAgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHJlY29yZF9jb3Jl X2J1Zl9lbnRyeSkpOwotCQkJICBlbnRyeS0+cCA9IHA7Ci0JCQkgIGlmICgh YmZkX21hbGxvY19hbmRfZ2V0X3NlY3Rpb24gKHAtPmJmZCwKLQkJCQkJCQkg ICBwLT50aGVfYmZkX3NlY3Rpb24sCi0JCQkJCQkJICAgJmVudHJ5LT5idWYp KQotCQkJICAgIHsKLQkJCSAgICAgIHhmcmVlIChlbnRyeSk7Ci0JCQkgICAg ICByZXR1cm4gMDsKLQkJCSAgICB9Ci0JCQkgIGVudHJ5LT5wcmV2ID0gcmVj b3JkX2NvcmVfYnVmX2xpc3Q7Ci0JCQkgIHJlY29yZF9jb3JlX2J1Zl9saXN0 ID0gZW50cnk7Ci0JCQl9Ci0KLQkJICAgICAgbWVtY3B5IChlbnRyeS0+YnVm ICsgc2VjX29mZnNldCwgd3JpdGVidWYsCi0JCQkgICAgICAoc2l6ZV90KSBs ZW4pOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIHsKLQkJICAgICAgaWYg KCFlbnRyeSkKLQkJCXJldHVybiByZWNvcmRfYmVuZWF0aF90b194ZmVyX3Bh cnRpYWwKLQkJCSAgKHJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbF9v cHMsCi0JCQkgICBvYmplY3QsIGFubmV4LCByZWFkYnVmLCB3cml0ZWJ1ZiwK LQkJCSAgIG9mZnNldCwgbGVuKTsKLQotCQkgICAgICBtZW1jcHkgKHJlYWRi dWYsIGVudHJ5LT5idWYgKyBzZWNfb2Zmc2V0LAotCQkJICAgICAgKHNpemVf dCkgbGVuKTsKLQkJICAgIH0KLQotCQkgIHJldHVybiBsZW47Ci0JCX0KLQkg ICAgfQotCi0JICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZQotCWVycm9y IChfKCJZb3UgY2FuJ3QgZG8gdGhhdCB3aXRob3V0IGEgcHJvY2VzcyB0byBk ZWJ1Zy4iKSk7Ci0gICAgfQotCi0gIHJldHVybiByZWNvcmRfYmVuZWF0aF90 b194ZmVyX3BhcnRpYWwgKHJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlh bF9vcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9iamVjdCwgYW5uZXgsIHJlYWRidWYsIHdyaXRlYnVmLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGxl bik7Ci19Ci0KLS8qICJ0b19pbnNlcnRfYnJlYWtwb2ludCIgbWV0aG9kIGZv ciBwcmVjIG92ZXIgY29yZWZpbGUuICAqLwotCi1zdGF0aWMgaW50Ci1yZWNv cmRfY29yZV9pbnNlcnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsCi0JCQkgICAgICAgc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90 Z3QpCi17Ci0gIHJldHVybiAwOwotfQotCi0vKiAidG9fcmVtb3ZlX2JyZWFr cG9pbnQiIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVmaWxlLiAgKi8KLQot c3RhdGljIGludAotcmVjb3JkX2NvcmVfcmVtb3ZlX2JyZWFrcG9pbnQgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotCQkJICAgICAgIHN0cnVjdCBicF90 YXJnZXRfaW5mbyAqYnBfdGd0KQotewotICByZXR1cm4gMDsKLX0KLQotLyog InRvX2hhc19leGVjdXRpb24iIG1ldGhvZCBmb3IgcHJlYyBvdmVyIGNvcmVm aWxlLiAgKi8KLQotc3RhdGljIGludAotcmVjb3JkX2NvcmVfaGFzX2V4ZWN1 dGlvbiAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgcHRpZF90IHRoZV9wdGlk KQotewotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLWluaXRfcmVj b3JkX2NvcmVfb3BzICh2b2lkKQotewotICByZWNvcmRfY29yZV9vcHMudG9f c2hvcnRuYW1lID0gInJlY29yZC1jb3JlIjsKLSAgcmVjb3JkX2NvcmVfb3Bz LnRvX2xvbmduYW1lID0gIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFy Z2V0IjsKLSAgcmVjb3JkX2NvcmVfb3BzLnRvX2RvYyA9Ci0gICAgIkxvZyBw cm9ncmFtIHdoaWxlIGV4ZWN1dGluZyBhbmQgcmVwbGF5IGV4ZWN1dGlvbiBm cm9tIGxvZy4iOwotICByZWNvcmRfY29yZV9vcHMudG9fb3BlbiA9IHJlY29y ZF9vcGVuOwotICByZWNvcmRfY29yZV9vcHMudG9fY2xvc2UgPSByZWNvcmRf Y2xvc2U7Ci0gIHJlY29yZF9jb3JlX29wcy50b19yZXN1bWUgPSByZWNvcmRf Y29yZV9yZXN1bWU7Ci0gIHJlY29yZF9jb3JlX29wcy50b193YWl0ID0gcmVj b3JkX3dhaXQ7Ci0gIHJlY29yZF9jb3JlX29wcy50b19raWxsID0gcmVjb3Jk X2NvcmVfa2lsbDsKLSAgcmVjb3JkX2NvcmVfb3BzLnRvX2ZldGNoX3JlZ2lz dGVycyA9IHJlY29yZF9jb3JlX2ZldGNoX3JlZ2lzdGVyczsKLSAgcmVjb3Jk X2NvcmVfb3BzLnRvX3ByZXBhcmVfdG9fc3RvcmUgPSByZWNvcmRfY29yZV9w cmVwYXJlX3RvX3N0b3JlOwotICByZWNvcmRfY29yZV9vcHMudG9fc3RvcmVf cmVnaXN0ZXJzID0gcmVjb3JkX2NvcmVfc3RvcmVfcmVnaXN0ZXJzOwotICBy ZWNvcmRfY29yZV9vcHMudG9feGZlcl9wYXJ0aWFsID0gcmVjb3JkX2NvcmVf eGZlcl9wYXJ0aWFsOwotICByZWNvcmRfY29yZV9vcHMudG9faW5zZXJ0X2Jy ZWFrcG9pbnQgPSByZWNvcmRfY29yZV9pbnNlcnRfYnJlYWtwb2ludDsKLSAg cmVjb3JkX2NvcmVfb3BzLnRvX3JlbW92ZV9icmVha3BvaW50ID0gcmVjb3Jk X2NvcmVfcmVtb3ZlX2JyZWFrcG9pbnQ7Ci0gIHJlY29yZF9jb3JlX29wcy50 b19zdG9wcGVkX2J5X3dhdGNocG9pbnQgPSByZWNvcmRfc3RvcHBlZF9ieV93 YXRjaHBvaW50OwotICByZWNvcmRfY29yZV9vcHMudG9fc3RvcHBlZF9kYXRh X2FkZHJlc3MgPSByZWNvcmRfc3RvcHBlZF9kYXRhX2FkZHJlc3M7Ci0gIHJl Y29yZF9jb3JlX29wcy50b19jYW5fZXhlY3V0ZV9yZXZlcnNlID0gcmVjb3Jk X2Nhbl9leGVjdXRlX3JldmVyc2U7Ci0gIHJlY29yZF9jb3JlX29wcy50b19o YXNfZXhlY3V0aW9uID0gcmVjb3JkX2NvcmVfaGFzX2V4ZWN1dGlvbjsKLSAg cmVjb3JkX2NvcmVfb3BzLnRvX3N0cmF0dW0gPSByZWNvcmRfc3RyYXR1bTsK LSAgLyogQWRkIGJvb2ttYXJrIHRhcmdldCBtZXRob2RzLiAgKi8KLSAgcmVj b3JkX2NvcmVfb3BzLnRvX2dldF9ib29rbWFyayA9IHJlY29yZF9nZXRfYm9v a21hcms7Ci0gIHJlY29yZF9jb3JlX29wcy50b19nb3RvX2Jvb2ttYXJrID0g cmVjb3JkX2dvdG9fYm9va21hcms7Ci0gIHJlY29yZF9jb3JlX29wcy50b19h c3luYyA9IHJlY29yZF9hc3luYzsKLSAgcmVjb3JkX2NvcmVfb3BzLnRvX2Nh bl9hc3luY19wID0gcmVjb3JkX2Nhbl9hc3luY19wOwotICByZWNvcmRfY29y ZV9vcHMudG9faXNfYXN5bmNfcCA9IHJlY29yZF9pc19hc3luY19wOwotICBy ZWNvcmRfY29yZV9vcHMudG9fZXhlY3V0aW9uX2RpcmVjdGlvbiA9IHJlY29y ZF9leGVjdXRpb25fZGlyZWN0aW9uOwotICByZWNvcmRfY29yZV9vcHMudG9f bWFnaWMgPSBPUFNfTUFHSUM7CisgIGVycm9yIChfKCJObyByZWNvcmQgdGFy Z2V0IGlzIGN1cnJlbnRseSBhY3RpdmUuXG4iKSk7CiB9CiAKIC8qIEltcGxl bWVudCAic2hvdyByZWNvcmQgZGVidWciIGNvbW1hbmQuICAqLwpAQCAtMjIy Nyw3ICs1OCw3IEBAIHNob3dfcmVjb3JkX2RlYnVnIChzdHJ1Y3QgdWlfZmls ZSAqZmlsZSwgaW50IGZyb21fdHR5LAogc3RhdGljIHZvaWQKIGNtZF9yZWNv cmRfc3RhcnQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHsKLSAgZXhl Y3V0ZV9jb21tYW5kICgidGFyZ2V0IHJlY29yZCIsIGZyb21fdHR5KTsKKyAg ZXhlY3V0ZV9jb21tYW5kICgidGFyZ2V0IHJlY29yZC1mdWxsIiwgZnJvbV90 dHkpOwogfQogCiAvKiBUcnVuY2F0ZSB0aGUgcmVjb3JkIGxvZyBmcm9tIHRo ZSBwcmVzZW50IHBvaW50CkBAIC0yMjM2LDIxICs2Nyw5IEBAIGNtZF9yZWNv cmRfc3RhcnQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKIHN0YXRpYyB2 b2lkCiBjbWRfcmVjb3JkX2RlbGV0ZSAoY2hhciAqYXJncywgaW50IGZyb21f dHR5KQogewotICBpZiAoY3VycmVudF90YXJnZXQudG9fc3RyYXR1bSA9PSBy ZWNvcmRfc3RyYXR1bSkKLSAgICB7Ci0gICAgICBpZiAoUkVDT1JEX0lTX1JF UExBWSkKLQl7Ci0JICBpZiAoIWZyb21fdHR5IHx8IHF1ZXJ5IChfKCJEZWxl dGUgdGhlIGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCAiCi0JCSAgICAg ICAgICAgICAgICAgICAgImFuZCBiZWdpbiB0byByZWNvcmQgdGhlIHJ1bm5p bmcgbWVzc2FnZSAiCi0JCSAgICAgICAgICAgICAgICAgICAgImF0IGN1cnJl bnQgUEM/IikpKQotCSAgICByZWNvcmRfbGlzdF9yZWxlYXNlX2ZvbGxvd2lu ZyAocmVjb3JkX2xpc3QpOwotCX0KLSAgICAgIGVsc2UKLQkgIHByaW50Zl91 bmZpbHRlcmVkIChfKCJBbHJlYWR5IGF0IGVuZCBvZiByZWNvcmQgbGlzdC5c biIpKTsKKyAgcmVxdWlyZV9yZWNvcmQgKCk7CiAKLSAgICB9Ci0gIGVsc2UK LSAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgaXMg bm90IHN0YXJ0ZWQuXG4iKSk7CisgIHRhcmdldF9kZWxldGVfcmVjb3JkIChh cmdzLCBmcm9tX3R0eSk7CiB9CiAKIC8qIEltcGxlbWVudCB0aGUgInN0b3By ZWNvcmQiIG9yICJyZWNvcmQgc3RvcCIgY29tbWFuZC4gICovCkBAIC0yMjU4 LDM2ICs3NywyNyBAQCBjbWRfcmVjb3JkX2RlbGV0ZSAoY2hhciAqYXJncywg aW50IGZyb21fdHR5KQogc3RhdGljIHZvaWQKIGNtZF9yZWNvcmRfc3RvcCAo Y2hhciAqYXJncywgaW50IGZyb21fdHR5KQogewotICBpZiAoY3VycmVudF90 YXJnZXQudG9fc3RyYXR1bSA9PSByZWNvcmRfc3RyYXR1bSkKLSAgICB7Ci0g ICAgICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7Ci0gICAgICBwcmlu dGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgaXMgc3RvcHBlZCBh bmQgYWxsIGV4ZWN1dGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAibG9ncyBhcmUgZGVsZXRlZC5cbiIpKTsKKyAgc3RydWN0IHRhcmdldF9v cHMgKnQ7CiAKLSAgICAgIG9ic2VydmVyX25vdGlmeV9yZWNvcmRfY2hhbmdl ZCAoY3VycmVudF9pbmZlcmlvciAoKSwgMCk7Ci0gICAgfQotICBlbHNlCi0g ICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGlzIG5v dCBzdGFydGVkLlxuIikpOwotfQorICByZXF1aXJlX3JlY29yZCAoKTsKIAot LyogU2V0IHVwcGVyIGxpbWl0IG9mIHJlY29yZCBsb2cgc2l6ZS4gICovCisg IGZvciAodCA9IGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGg7IHQgIT0gTlVMTDsg dCA9IHQtPmJlbmVhdGgpCisgICAgaWYgKHQtPnRvX3N0cmF0dW0gPT0gcmVj b3JkX3N0cmF0dW0pCisgICAgICB7CisJdW5wdXNoX3RhcmdldCAodCk7CiAK LXN0YXRpYyB2b2lkCi1zZXRfcmVjb3JkX2luc25fbWF4X251bSAoY2hhciAq YXJncywgaW50IGZyb21fdHR5LCBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAq YykKLXsKLSAgaWYgKHJlY29yZF9pbnNuX251bSA+IHJlY29yZF9pbnNuX21h eF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKLSAgICB7Ci0gICAgICAv KiBDb3VudCBkb3duIHJlY29yZF9pbnNuX251bSB3aGlsZSByZWxlYXNpbmcg cmVjb3JkcyBmcm9tIGxpc3QuICAqLwotICAgICAgd2hpbGUgKHJlY29yZF9p bnNuX251bSA+IHJlY29yZF9pbnNuX21heF9udW0pCi0JewotCSAgcmVjb3Jk X2xpc3RfcmVsZWFzZV9maXJzdCAoKTsKLQkgIHJlY29yZF9pbnNuX251bS0t OwotCX0KLSAgICB9CisJcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3Mg cmVjb3JkIGlzIHN0b3BwZWQgYW5kIGFsbCBleGVjdXRpb24gIgorCQkJICAg ICAibG9ncyBhcmUgZGVsZXRlZC5cbiIpKTsKKworCW9ic2VydmVyX25vdGlm eV9yZWNvcmRfY2hhbmdlZCAoY3VycmVudF9pbmZlcmlvciAoKSwgMCk7CisJ cmV0dXJuOworICAgICAgfQorCisgIC8qIFdlIHNob3VsZCBub3QgZ2V0IGhl cmUuICAqLworICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9f LCBfKCJDb3VsZG4ndCBmaW5kIHJlY29yZCB0YXJnZXQuIikpOwogfQogCi1z dGF0aWMgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKnJlY29yZF9jbWRsaXN0 LCAqc2V0X3JlY29yZF9jbWRsaXN0LAotCQkJICAgICAgICpzaG93X3JlY29y ZF9jbWRsaXN0LCAqaW5mb19yZWNvcmRfY21kbGlzdDsKKy8qIFRoZSAic2V0 IHJlY29yZCIgY29tbWFuZC4gICovCiAKIHN0YXRpYyB2b2lkCiBzZXRfcmVj b3JkX2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKQEAgLTIy OTcsMzg1ICsxMDcsMzYgQEAgc2V0X3JlY29yZF9jb21tYW5kIChjaGFyICph cmdzLCBpbnQgZnJvbV90dHkpCiAgIGhlbHBfbGlzdCAoc2V0X3JlY29yZF9j bWRsaXN0LCAic2V0IHJlY29yZCAiLCBhbGxfY29tbWFuZHMsIGdkYl9zdGRv dXQpOwogfQogCisvKiBUaGUgInNob3cgcmVjb3JkIiBjb21tYW5kLiAgKi8K Kwogc3RhdGljIHZvaWQKIHNob3dfcmVjb3JkX2NvbW1hbmQgKGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSkKIHsKICAgY21kX3Nob3dfbGlzdCAoc2hvd19y ZWNvcmRfY21kbGlzdCwgZnJvbV90dHksICIiKTsKIH0KIAotLyogRGlzcGxh eSBzb21lIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGV4ZWN1dGlvbiBsb2cuICAq LworLyogVGhlICJpbmZvIHJlY29yZCIgY29tbWFuZC4gICovCiAKIHN0YXRp YyB2b2lkCiBpbmZvX3JlY29yZF9jb21tYW5kIChjaGFyICphcmdzLCBpbnQg ZnJvbV90dHkpCiB7Ci0gIHN0cnVjdCByZWNvcmRfZW50cnkgKnA7Ci0KLSAg aWYgKGN1cnJlbnRfdGFyZ2V0LnRvX3N0cmF0dW0gPT0gcmVjb3JkX3N0cmF0 dW0pCi0gICAgewotICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCi0JcHJp bnRmX2ZpbHRlcmVkIChfKCJSZXBsYXkgbW9kZTpcbiIpKTsKLSAgICAgIGVs c2UKLQlwcmludGZfZmlsdGVyZWQgKF8oIlJlY29yZCBtb2RlOlxuIikpOwot Ci0gICAgICAvKiBGaW5kIGVudHJ5IGZvciBmaXJzdCBhY3R1YWwgaW5zdHJ1 Y3Rpb24gaW4gdGhlIGxvZy4gICovCi0gICAgICBmb3IgKHAgPSByZWNvcmRf Zmlyc3QubmV4dDsKLQkgICBwICE9IE5VTEwgJiYgcC0+dHlwZSAhPSByZWNv cmRfZW5kOwotCSAgIHAgPSBwLT5uZXh0KQotCTsKLQotICAgICAgLyogRG8g d2UgaGF2ZSBhIGxvZyBhdCBhbGw/ICAqLwotICAgICAgaWYgKHAgIT0gTlVM TCAmJiBwLT50eXBlID09IHJlY29yZF9lbmQpCi0JewotCSAgLyogRGlzcGxh eSBpbnN0cnVjdGlvbiBudW1iZXIgZm9yIGZpcnN0IGluc3RydWN0aW9uIGlu IHRoZSBsb2cuICAqLwotCSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJMb3dlc3Qg cmVjb3JkZWQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVzLlxuIiksCi0JCQkg ICBwdWxvbmdlc3QgKHAtPnUuZW5kLmluc25fbnVtKSk7Ci0KLQkgIC8qIElm IGluIHJlcGxheSBtb2RlLCBkaXNwbGF5IHdoZXJlIHdlIGFyZSBpbiB0aGUg bG9nLiAgKi8KLQkgIGlmIChSRUNPUkRfSVNfUkVQTEFZKQotCSAgICBwcmlu dGZfZmlsdGVyZWQgKF8oIkN1cnJlbnQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlz ICVzLlxuIiksCi0JCQkgICAgIHB1bG9uZ2VzdCAocmVjb3JkX2xpc3QtPnUu ZW5kLmluc25fbnVtKSk7Ci0KLQkgIC8qIERpc3BsYXkgaW5zdHJ1Y3Rpb24g bnVtYmVyIGZvciBsYXN0IGluc3RydWN0aW9uIGluIHRoZSBsb2cuICAqLwot CSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJIaWdoZXN0IHJlY29yZGVkIGluc3Ry dWN0aW9uIG51bWJlciBpcyAlcy5cbiIpLCAKLQkJCSAgIHB1bG9uZ2VzdCAo cmVjb3JkX2luc25fY291bnQpKTsKLQotCSAgLyogRGlzcGxheSBsb2cgY291 bnQuICAqLwotCSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJMb2cgY29udGFpbnMg JWQgaW5zdHJ1Y3Rpb25zLlxuIiksIAotCQkJICAgcmVjb3JkX2luc25fbnVt KTsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgcHJpbnRmX2ZpbHRlcmVkIChf KCJObyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGxvZ2dlZC5cbiIpKTsKLQl9 Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgcHJpbnRmX2ZpbHRlcmVk IChfKCJ0YXJnZXQgcmVjb3JkIGlzIG5vdCBhY3RpdmUuXG4iKSk7Ci0gICAg fQotCi0gIC8qIERpc3BsYXkgbWF4IGxvZyBzaXplLiAgKi8KLSAgcHJpbnRm X2ZpbHRlcmVkIChfKCJNYXggbG9nZ2VkIGluc3RydWN0aW9ucyBpcyAlZC5c biIpLAotCQkgICByZWNvcmRfaW5zbl9tYXhfbnVtKTsKLX0KLQotLyogUmVj b3JkIGxvZyBzYXZlLWZpbGUgZm9ybWF0Ci0gICBWZXJzaW9uIDEgKG5ldmVy IHJlbGVhc2VkKQotCi0gICBIZWFkZXI6Ci0gICAgIDQgYnl0ZXM6IG1hZ2lj IG51bWJlciBodG9ubCgweDIwMDkwODI5KS4KLSAgICAgICBOT1RFOiBiZSBz dXJlIHRvIGNoYW5nZSB3aGVuZXZlciB0aGlzIGZpbGUgZm9ybWF0IGNoYW5n ZXMhCi0KLSAgIFJlY29yZHM6Ci0gICAgIHJlY29yZF9lbmQ6Ci0gICAgICAg MSBieXRlOiAgcmVjb3JkIHR5cGUgKHJlY29yZF9lbmQsIHNlZSBlbnVtIHJl Y29yZF90eXBlKS4KLSAgICAgcmVjb3JkX3JlZzoKLSAgICAgICAxIGJ5dGU6 ICByZWNvcmQgdHlwZSAocmVjb3JkX3JlZywgc2VlIGVudW0gcmVjb3JkX3R5 cGUpLgotICAgICAgIDggYnl0ZXM6IHJlZ2lzdGVyIGlkIChuZXR3b3JrIGJ5 dGUgb3JkZXIpLgotICAgICAgIE1BWF9SRUdJU1RFUl9TSVpFIGJ5dGVzOiBy ZWdpc3RlciB2YWx1ZS4KLSAgICAgcmVjb3JkX21lbToKLSAgICAgICAxIGJ5 dGU6ICByZWNvcmQgdHlwZSAocmVjb3JkX21lbSwgc2VlIGVudW0gcmVjb3Jk X3R5cGUpLgotICAgICAgIDggYnl0ZXM6IG1lbW9yeSBsZW5ndGggKG5ldHdv cmsgYnl0ZSBvcmRlcikuCi0gICAgICAgOCBieXRlczogbWVtb3J5IGFkZHJl c3MgKG5ldHdvcmsgYnl0ZSBvcmRlcikuCi0gICAgICAgbiBieXRlczogbWVt b3J5IHZhbHVlIChuID09IG1lbW9yeSBsZW5ndGgpLgotCi0gICBWZXJzaW9u IDIKLSAgICAgNCBieXRlczogbWFnaWMgbnVtYmVyIG5ldG9yZGVyMzIoMHgy MDA5MTAxNikuCi0gICAgICAgTk9URTogYmUgc3VyZSB0byBjaGFuZ2Ugd2hl bmV2ZXIgdGhpcyBmaWxlIGZvcm1hdCBjaGFuZ2VzIQotCi0gICBSZWNvcmRz OgotICAgICByZWNvcmRfZW5kOgotICAgICAgIDEgYnl0ZTogIHJlY29yZCB0 eXBlIChyZWNvcmRfZW5kLCBzZWUgZW51bSByZWNvcmRfdHlwZSkuCi0gICAg ICAgNCBieXRlczogc2lnbmFsCi0gICAgICAgNCBieXRlczogaW5zdHJ1Y3Rp b24gY291bnQKLSAgICAgcmVjb3JkX3JlZzoKLSAgICAgICAxIGJ5dGU6ICBy ZWNvcmQgdHlwZSAocmVjb3JkX3JlZywgc2VlIGVudW0gcmVjb3JkX3R5cGUp LgotICAgICAgIDQgYnl0ZXM6IHJlZ2lzdGVyIGlkIChuZXR3b3JrIGJ5dGUg b3JkZXIpLgotICAgICAgIG4gYnl0ZXM6IHJlZ2lzdGVyIHZhbHVlIChuID09 IGFjdHVhbCByZWdpc3RlciBzaXplKS4KLSAgICAgICAgICAgICAgICAoZWcu IDQgYnl0ZXMgZm9yIHg4NiBnZW5lcmFsIHJlZ2lzdGVycykuCi0gICAgIHJl Y29yZF9tZW06Ci0gICAgICAgMSBieXRlOiAgcmVjb3JkIHR5cGUgKHJlY29y ZF9tZW0sIHNlZSBlbnVtIHJlY29yZF90eXBlKS4KLSAgICAgICA0IGJ5dGVz OiBtZW1vcnkgbGVuZ3RoIChuZXR3b3JrIGJ5dGUgb3JkZXIpLgotICAgICAg IDggYnl0ZXM6IG1lbW9yeSBhZGRyZXNzIChuZXR3b3JrIGJ5dGUgb3JkZXIp LgotICAgICAgIG4gYnl0ZXM6IG1lbW9yeSB2YWx1ZSAobiA9PSBtZW1vcnkg bGVuZ3RoKS4KLQotKi8KLQotLyogYmZkY29yZV9yZWFkIC0tIHJlYWQgYnl0 ZXMgZnJvbSBhIGNvcmUgZmlsZSBzZWN0aW9uLiAgKi8KLQotc3RhdGljIGlu bGluZSB2b2lkCi1iZmRjb3JlX3JlYWQgKGJmZCAqb2JmZCwgYXNlY3Rpb24g Km9zZWMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50ICpvZmZzZXQpCi17Ci0g IGludCByZXQgPSBiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMgKG9iZmQsIG9z ZWMsIGJ1ZiwgKm9mZnNldCwgbGVuKTsKLQotICBpZiAocmV0KQotICAgICpv ZmZzZXQgKz0gbGVuOwotICBlbHNlCi0gICAgZXJyb3IgKF8oIkZhaWxlZCB0 byByZWFkICVkIGJ5dGVzIGZyb20gY29yZSBmaWxlICVzICgnJXMnKS4iKSwK LQkgICBsZW4sIGJmZF9nZXRfZmlsZW5hbWUgKG9iZmQpLAotCSAgIGJmZF9l cnJtc2cgKGJmZF9nZXRfZXJyb3IgKCkpKTsKLX0KLQotc3RhdGljIGlubGlu ZSB1aW50NjRfdAotbmV0b3JkZXI2NCAodWludDY0X3QgaW5wdXQpCi17Ci0g IHVpbnQ2NF90IHJldDsKLQotICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyICgo Z2RiX2J5dGUgKikgJnJldCwgc2l6ZW9mIChyZXQpLCAKLQkJCSAgQkZEX0VO RElBTl9CSUcsIGlucHV0KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGlubGluZSB1aW50MzJfdAotbmV0b3JkZXIzMiAodWludDMyX3QgaW5wdXQp Ci17Ci0gIHVpbnQzMl90IHJldDsKLQotICBzdG9yZV91bnNpZ25lZF9pbnRl Z2VyICgoZ2RiX2J5dGUgKikgJnJldCwgc2l6ZW9mIChyZXQpLCAKLQkJCSAg QkZEX0VORElBTl9CSUcsIGlucHV0KTsKLSAgcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIGlubGluZSB1aW50MTZfdAotbmV0b3JkZXIxNiAodWludDE2X3Qg aW5wdXQpCi17Ci0gIHVpbnQxNl90IHJldDsKLQotICBzdG9yZV91bnNpZ25l ZF9pbnRlZ2VyICgoZ2RiX2J5dGUgKikgJnJldCwgc2l6ZW9mIChyZXQpLCAK LQkJCSAgQkZEX0VORElBTl9CSUcsIGlucHV0KTsKLSAgcmV0dXJuIHJldDsK LX0KLQotLyogUmVzdG9yZSB0aGUgZXhlY3V0aW9uIGxvZyBmcm9tIGEgY29y ZV9iZmQgZmlsZS4gICovCi1zdGF0aWMgdm9pZAotcmVjb3JkX3Jlc3RvcmUg KHZvaWQpCi17Ci0gIHVpbnQzMl90IG1hZ2ljOwotICBzdHJ1Y3QgY2xlYW51 cCAqb2xkX2NsZWFudXBzOwotICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpyZWM7 Ci0gIGFzZWN0aW9uICpvc2VjOwotICB1aW50MzJfdCBvc2VjX3NpemU7Ci0g IGludCBiZmRfb2Zmc2V0ID0gMDsKLSAgc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZTsKLQotICAvKiBXZSByZXN0b3JlIHRoZSBleGVjdXRpb24gbG9nIGZy b20gdGhlIG9wZW4gY29yZSBiZmQsCi0gICAgIGlmIHRoZXJlIGlzIG9uZS4g ICovCi0gIGlmIChjb3JlX2JmZCA9PSBOVUxMKQotICAgIHJldHVybjsKLQot ICAvKiAicmVjb3JkX3Jlc3RvcmUiIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVu IHJlY29yZCBsaXN0IGlzIGVtcHR5LiAgKi8KLSAgZ2RiX2Fzc2VydCAocmVj b3JkX2ZpcnN0Lm5leHQgPT0gTlVMTCk7Ci0gCi0gIGlmIChyZWNvcmRfZGVi dWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUmVz dG9yaW5nIHJlY29yZGluZyBmcm9tIGNvcmUgZmlsZS5cbiIpOwotCi0gIC8q IE5vdyBuZWVkIHRvIGZpbmQgb3VyIHNwZWNpYWwgbm90ZSBzZWN0aW9uLiAg Ki8KLSAgb3NlYyA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChjb3JlX2Jm ZCwgIm51bGwwIik7Ci0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiRmluZCBwcmVjb3JkIHNlY3Rp b24gJXMuXG4iLAotCQkJb3NlYyA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIp OwotICBpZiAob3NlYyA9PSBOVUxMKQotICAgIHJldHVybjsKLSAgb3NlY19z aXplID0gYmZkX3NlY3Rpb25fc2l6ZSAoY29yZV9iZmQsIG9zZWMpOwotICBp ZiAocmVjb3JkX2RlYnVnKQotICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgIiVzIiwgYmZkX3NlY3Rpb25fbmFtZSAoY29yZV9iZmQsIG9z ZWMpKTsKLQotICAvKiBDaGVjayB0aGUgbWFnaWMgY29kZS4gICovCi0gIGJm ZGNvcmVfcmVhZCAoY29yZV9iZmQsIG9zZWMsICZtYWdpYywgc2l6ZW9mICht YWdpYyksICZiZmRfb2Zmc2V0KTsKLSAgaWYgKG1hZ2ljICE9IFJFQ09SRF9G SUxFX01BR0lDKQotICAgIGVycm9yIChfKCJWZXJzaW9uIG1pcy1tYXRjaCBv ciBmaWxlIGZvcm1hdCBlcnJvciBpbiBjb3JlIGZpbGUgJXMuIiksCi0JICAg YmZkX2dldF9maWxlbmFtZSAoY29yZV9iZmQpKTsKLSAgaWYgKHJlY29yZF9k ZWJ1ZykKLSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0J CQkiICBSZWFkaW5nIDQtYnl0ZSBtYWdpYyBjb29raWUgIgotCQkJIlJFQ09S RF9GSUxFX01BR0lDICgweCVzKVxuIiwKLQkJCXBoZXhfbnogKG5ldG9yZGVy MzIgKG1hZ2ljKSwgNCkpOwotCi0gIC8qIFJlc3RvcmUgdGhlIGVudHJpZXMg aW4gcmVjZmQgaW50byByZWNvcmRfYXJjaF9saXN0X2hlYWQgYW5kCi0gICAg IHJlY29yZF9hcmNoX2xpc3RfdGFpbC4gICovCi0gIHJlY29yZF9hcmNoX2xp c3RfaGVhZCA9IE5VTEw7Ci0gIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5V TEw7Ci0gIHJlY29yZF9pbnNuX251bSA9IDA7Ci0gIG9sZF9jbGVhbnVwcyA9 IG1ha2VfY2xlYW51cCAocmVjb3JkX2FyY2hfbGlzdF9jbGVhbnVwcywgMCk7 Ci0gIHJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7Ci0KLSAg d2hpbGUgKDEpCi0gICAgewotICAgICAgdWludDhfdCByZWN0eXBlOwotICAg ICAgdWludDMyX3QgcmVnbnVtLCBsZW4sIHNpZ25hbCwgY291bnQ7Ci0gICAg ICB1aW50NjRfdCBhZGRyOwotCi0gICAgICAvKiBXZSBhcmUgZmluaXNoZWQg d2hlbiBvZmZzZXQgcmVhY2hlcyBvc2VjX3NpemUuICAqLwotICAgICAgaWYg KGJmZF9vZmZzZXQgPj0gb3NlY19zaXplKQotCWJyZWFrOwotICAgICAgYmZk Y29yZV9yZWFkIChjb3JlX2JmZCwgb3NlYywgJnJlY3R5cGUsIHNpemVvZiAo cmVjdHlwZSksICZiZmRfb2Zmc2V0KTsKLQotICAgICAgc3dpdGNoIChyZWN0 eXBlKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgcmVjb3JkX3JlZzogLyog cmVnICovCi0gICAgICAgICAgLyogR2V0IHJlZ2lzdGVyIG51bWJlciB0byBy ZWdudW0uICAqLwotICAgICAgICAgIGJmZGNvcmVfcmVhZCAoY29yZV9iZmQs IG9zZWMsICZyZWdudW0sCi0JCQlzaXplb2YgKHJlZ251bSksICZiZmRfb2Zm c2V0KTsKLQkgIHJlZ251bSA9IG5ldG9yZGVyMzIgKHJlZ251bSk7Ci0KLSAg ICAgICAgICByZWMgPSByZWNvcmRfcmVnX2FsbG9jIChyZWdjYWNoZSwgcmVn bnVtKTsKLQotICAgICAgICAgIC8qIEdldCB2YWwuICAqLwotICAgICAgICAg IGJmZGNvcmVfcmVhZCAoY29yZV9iZmQsIG9zZWMsIHJlY29yZF9nZXRfbG9j IChyZWMpLAotCQkJcmVjLT51LnJlZy5sZW4sICZiZmRfb2Zmc2V0KTsKLQot CSAgaWYgKHJlY29yZF9kZWJ1ZykKLQkgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAotCQkJCSIgIFJlYWRpbmcgcmVnaXN0ZXIgJWQgKDEg IgotCQkJCSJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwKLQkJCQlyZWMt PnUucmVnLm51bSwKLQkJCQkodW5zaWduZWQgbG9uZykgc2l6ZW9mIChyZWdu dW0pLAotCQkJCXJlYy0+dS5yZWcubGVuKTsKLSAgICAgICAgICBicmVhazsK LQotICAgICAgICBjYXNlIHJlY29yZF9tZW06IC8qIG1lbSAqLwotICAgICAg ICAgIC8qIEdldCBsZW4uICAqLwotICAgICAgICAgIGJmZGNvcmVfcmVhZCAo Y29yZV9iZmQsIG9zZWMsICZsZW4sIAotCQkJc2l6ZW9mIChsZW4pLCAmYmZk X29mZnNldCk7Ci0JICBsZW4gPSBuZXRvcmRlcjMyIChsZW4pOwotCi0gICAg ICAgICAgLyogR2V0IGFkZHIuICAqLwotICAgICAgICAgIGJmZGNvcmVfcmVh ZCAoY29yZV9iZmQsIG9zZWMsICZhZGRyLAotCQkJc2l6ZW9mIChhZGRyKSwg JmJmZF9vZmZzZXQpOwotCSAgYWRkciA9IG5ldG9yZGVyNjQgKGFkZHIpOwot Ci0gICAgICAgICAgcmVjID0gcmVjb3JkX21lbV9hbGxvYyAoYWRkciwgbGVu KTsKLQotICAgICAgICAgIC8qIEdldCB2YWwuICAqLwotICAgICAgICAgIGJm ZGNvcmVfcmVhZCAoY29yZV9iZmQsIG9zZWMsIHJlY29yZF9nZXRfbG9jIChy ZWMpLAotCQkJcmVjLT51Lm1lbS5sZW4sICZiZmRfb2Zmc2V0KTsKLQotCSAg aWYgKHJlY29yZF9kZWJ1ZykKLQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAotCQkJCSIgIFJlYWRpbmcgbWVtb3J5ICVzICgxIHBsdXMg IgotCQkJCSIlbHUgcGx1cyAlbHUgcGx1cyAlZCBieXRlcylcbiIsCi0JCQkJ cGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksCi0JCQkJCSAgcmVjLT51 Lm1lbS5hZGRyKSwKLQkJCQkodW5zaWduZWQgbG9uZykgc2l6ZW9mIChhZGRy KSwKLQkJCQkodW5zaWduZWQgbG9uZykgc2l6ZW9mIChsZW4pLAotCQkJCXJl Yy0+dS5tZW0ubGVuKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBj YXNlIHJlY29yZF9lbmQ6IC8qIGVuZCAqLwotICAgICAgICAgIHJlYyA9IHJl Y29yZF9lbmRfYWxsb2MgKCk7Ci0gICAgICAgICAgcmVjb3JkX2luc25fbnVt ICsrOwotCi0JICAvKiBHZXQgc2lnbmFsIHZhbHVlLiAgKi8KLQkgIGJmZGNv cmVfcmVhZCAoY29yZV9iZmQsIG9zZWMsICZzaWduYWwsIAotCQkJc2l6ZW9m IChzaWduYWwpLCAmYmZkX29mZnNldCk7Ci0JICBzaWduYWwgPSBuZXRvcmRl cjMyIChzaWduYWwpOwotCSAgcmVjLT51LmVuZC5zaWd2YWwgPSBzaWduYWw7 Ci0KLQkgIC8qIEdldCBpbnNuIGNvdW50LiAgKi8KLQkgIGJmZGNvcmVfcmVh ZCAoY29yZV9iZmQsIG9zZWMsICZjb3VudCwgCi0JCQlzaXplb2YgKGNvdW50 KSwgJmJmZF9vZmZzZXQpOwotCSAgY291bnQgPSBuZXRvcmRlcjMyIChjb3Vu dCk7Ci0JICByZWMtPnUuZW5kLmluc25fbnVtID0gY291bnQ7Ci0JICByZWNv cmRfaW5zbl9jb3VudCA9IGNvdW50ICsgMTsKLQkgIGlmIChyZWNvcmRfZGVi dWcpCi0JICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJ CQkiICBSZWFkaW5nIHJlY29yZF9lbmQgKDEgKyAiCi0JCQkJIiVsdSArICVs dSBieXRlcyksIG9mZnNldCA9PSAlc1xuIiwKLQkJCQkodW5zaWduZWQgbG9u Zykgc2l6ZW9mIChzaWduYWwpLAotCQkJCSh1bnNpZ25lZCBsb25nKSBzaXpl b2YgKGNvdW50KSwKLQkJCQlwYWRkcmVzcyAoZ2V0X2N1cnJlbnRfYXJjaCAo KSwKLQkJCQkJICBiZmRfb2Zmc2V0KSk7Ci0gICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBlcnJvciAoXygiQmFkIGVu dHJ5IHR5cGUgaW4gY29yZSBmaWxlICVzLiIpLAotCQkgYmZkX2dldF9maWxl bmFtZSAoY29yZV9iZmQpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg fQotCi0gICAgICAvKiBBZGQgcmVjIHRvIHJlY29yZCBhcmNoIGxpc3QuICAq LwotICAgICAgcmVjb3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7Ci0gICAgfQot Ci0gIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7Ci0KLSAgLyog QWRkIHJlY29yZF9hcmNoX2xpc3RfaGVhZCB0byB0aGUgZW5kIG9mIHJlY29y ZCBsaXN0LiAgKi8KLSAgcmVjb3JkX2ZpcnN0Lm5leHQgPSByZWNvcmRfYXJj aF9saXN0X2hlYWQ7Ci0gIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9 ICZyZWNvcmRfZmlyc3Q7Ci0gIHJlY29yZF9hcmNoX2xpc3RfdGFpbC0+bmV4 dCA9IE5VTEw7Ci0gIHJlY29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsKLQot ICAvKiBVcGRhdGUgcmVjb3JkX2luc25fbWF4X251bS4gICovCi0gIGlmIChy ZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICBpZiAo UkVDT1JEX0lTX1VTRUQpCiAgICAgewotICAgICAgcmVjb3JkX2luc25fbWF4 X251bSA9IHJlY29yZF9pbnNuX251bTsKLSAgICAgIHdhcm5pbmcgKF8oIkF1 dG8gaW5jcmVhc2UgcmVjb3JkL3JlcGxheSBidWZmZXIgbGltaXQgdG8gJWQu IiksCi0gICAgICAgICAgICAgICByZWNvcmRfaW5zbl9tYXhfbnVtKTsKKyAg ICAgIHByaW50Zl9maWx0ZXJlZCAoXygiQWN0aXZlIHJlY29yZCB0YXJnZXQ6 ICVzXG4iKSwgdGFyZ2V0X3Nob3J0bmFtZSk7CisgICAgICB0YXJnZXRfaW5m b19yZWNvcmQgKGFyZ3MsIGZyb21fdHR5KTsKICAgICB9Ci0KLSAgLyogU3Vj Y2VlZGVkLiAgKi8KLSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJSZXN0b3JlZCBy ZWNvcmRzIGZyb20gY29yZSBmaWxlICVzLlxuIiksCi0JCSAgIGJmZF9nZXRf ZmlsZW5hbWUgKGNvcmVfYmZkKSk7Ci0KLSAgcHJpbnRfc3RhY2tfZnJhbWUg KGdldF9zZWxlY3RlZF9mcmFtZSAoTlVMTCksIDEsIFNSQ19BTkRfTE9DKTsK LX0KLQotLyogYmZkY29yZV93cml0ZSAtLSB3cml0ZSBieXRlcyBpbnRvIGEg Y29yZSBmaWxlIHNlY3Rpb24uICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQK LWJmZGNvcmVfd3JpdGUgKGJmZCAqb2JmZCwgYXNlY3Rpb24gKm9zZWMsIHZv aWQgKmJ1ZiwgaW50IGxlbiwgaW50ICpvZmZzZXQpCi17Ci0gIGludCByZXQg PSBiZmRfc2V0X3NlY3Rpb25fY29udGVudHMgKG9iZmQsIG9zZWMsIGJ1Ziwg Km9mZnNldCwgbGVuKTsKLQotICBpZiAocmV0KQotICAgICpvZmZzZXQgKz0g bGVuOwogICBlbHNlCi0gICAgZXJyb3IgKF8oIkZhaWxlZCB0byB3cml0ZSAl ZCBieXRlcyB0byBjb3JlIGZpbGUgJXMgKCclcycpLiIpLAotCSAgIGxlbiwg YmZkX2dldF9maWxlbmFtZSAob2JmZCksCi0JICAgYmZkX2Vycm1zZyAoYmZk X2dldF9lcnJvciAoKSkpOwotfQotCi0vKiBSZXN0b3JlIHRoZSBleGVjdXRp b24gbG9nIGZyb20gYSBmaWxlLiAgV2UgdXNlIGEgbW9kaWZpZWQgZWxmCi0g ICBjb3JlZmlsZSBmb3JtYXQsIHdpdGggYW4gZXh0cmEgc2VjdGlvbiBmb3Ig b3VyIGRhdGEuICAqLwotCi1zdGF0aWMgdm9pZAotY21kX3JlY29yZF9yZXN0 b3JlIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi17Ci0gIGNvcmVfZmls ZV9jb21tYW5kIChhcmdzLCBmcm9tX3R0eSk7Ci0gIHJlY29yZF9vcGVuIChh cmdzLCBmcm9tX3R0eSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWNvcmRfc2F2 ZV9jbGVhbnVwcyAodm9pZCAqZGF0YSkKLXsKLSAgYmZkICpvYmZkID0gZGF0 YTsKLSAgY2hhciAqcGF0aG5hbWUgPSB4c3RyZHVwIChiZmRfZ2V0X2ZpbGVu YW1lIChvYmZkKSk7Ci0KLSAgZ2RiX2JmZF91bnJlZiAob2JmZCk7Ci0gIHVu bGluayAocGF0aG5hbWUpOwotICB4ZnJlZSAocGF0aG5hbWUpOworICAgIHBy aW50Zl9maWx0ZXJlZCAoXygiTm8gcmVjb3JkIHRhcmdldCBpcyBjdXJyZW50 bHkgYWN0aXZlLlxuIikpOwogfQogCi0vKiBTYXZlIHRoZSBleGVjdXRpb24g bG9nIHRvIGEgZmlsZS4gIFdlIHVzZSBhIG1vZGlmaWVkIGVsZiBjb3JlZmls ZQotICAgZm9ybWF0LCB3aXRoIGFuIGV4dHJhIHNlY3Rpb24gZm9yIG91ciBk YXRhLiAgKi8KKy8qIFRoZSAicmVjb3JkIHNhdmUiIGNvbW1hbmQuICAqLwog CiBzdGF0aWMgdm9pZAogY21kX3JlY29yZF9zYXZlIChjaGFyICphcmdzLCBp bnQgZnJvbV90dHkpCiB7CiAgIGNoYXIgKnJlY2ZpbGVuYW1lLCByZWNmaWxl bmFtZV9idWZmZXJbNDBdOwotICBzdHJ1Y3QgcmVjb3JkX2VudHJ5ICpjdXJf cmVjb3JkX2xpc3Q7Ci0gIHVpbnQzMl90IG1hZ2ljOwotICBzdHJ1Y3QgcmVn Y2FjaGUgKnJlZ2NhY2hlOwotICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsK LSAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwczsKLSAgc3RydWN0IGNs ZWFudXAgKnNldF9jbGVhbnVwczsKLSAgYmZkICpvYmZkOwotICBpbnQgc2F2 ZV9zaXplID0gMDsKLSAgYXNlY3Rpb24gKm9zZWMgPSBOVUxMOwotICBpbnQg YmZkX29mZnNldCA9IDA7CiAKLSAgaWYgKHN0cmNtcCAoY3VycmVudF90YXJn ZXQudG9fc2hvcnRuYW1lLCAicmVjb3JkIikgIT0gMCkKLSAgICBlcnJvciAo XygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0YXJnZXQg J3JlY29yZCcuXG4iCi0JICAgICAiVXNlICd0YXJnZXQgcmVjb3JkJyBmaXJz dC5cbiIpKTsKKyAgcmVxdWlyZV9yZWNvcmQgKCk7CiAKICAgaWYgKGFyZ3Mg JiYgKmFyZ3MpCiAgICAgcmVjZmlsZW5hbWUgPSBhcmdzOwpAQCAtMjY4Nywy MjAgKzE0OCw3IEBAIGNtZF9yZWNvcmRfc2F2ZSAoY2hhciAqYXJncywgaW50 IGZyb21fdHR5KQogICAgICAgcmVjZmlsZW5hbWUgPSByZWNmaWxlbmFtZV9i dWZmZXI7CiAgICAgfQogCi0gIC8qIE9wZW4gdGhlIHNhdmUgZmlsZS4gICov Ci0gIGlmIChyZWNvcmRfZGVidWcpCi0gICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCAiU2F2aW5nIGV4ZWN1dGlvbiBsb2cgdG8gY29yZSBm aWxlICclcydcbiIsCi0JCQlyZWNmaWxlbmFtZSk7Ci0KLSAgLyogT3BlbiB0 aGUgb3V0cHV0IGZpbGUuICAqLwotICBvYmZkID0gY3JlYXRlX2djb3JlX2Jm ZCAocmVjZmlsZW5hbWUpOwotICBvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFu dXAgKHJlY29yZF9zYXZlX2NsZWFudXBzLCBvYmZkKTsKLQotICAvKiBTYXZl IHRoZSBjdXJyZW50IHJlY29yZCBlbnRyeSB0byAiY3VyX3JlY29yZF9saXN0 Ii4gICovCi0gIGN1cl9yZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0OwotCi0g IC8qIEdldCB0aGUgdmFsdWVzIG9mIHJlZ2NhY2hlIGFuZCBnZGJhcmNoLiAg Ki8KLSAgcmVnY2FjaGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKLSAg Z2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSk7Ci0KLSAg LyogRGlzYWJsZSB0aGUgR0RCIG9wZXJhdGlvbiByZWNvcmQuICAqLwotICBz ZXRfY2xlYW51cHMgPSByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3Nl dCAoKTsKLQotICAvKiBSZXZlcnNlIGV4ZWN1dGUgdG8gdGhlIGJlZ2luIG9m IHJlY29yZCBsaXN0LiAgKi8KLSAgd2hpbGUgKDEpCi0gICAgewotICAgICAg LyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxvZy4gICovCi0g ICAgICBpZiAocmVjb3JkX2xpc3QgPT0gJnJlY29yZF9maXJzdCkKLSAgICAg ICAgYnJlYWs7Ci0KLSAgICAgIHJlY29yZF9leGVjX2luc24gKHJlZ2NhY2hl LCBnZGJhcmNoLCByZWNvcmRfbGlzdCk7Ci0KLSAgICAgIGlmIChyZWNvcmRf bGlzdC0+cHJldikKLSAgICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlz dC0+cHJldjsKLSAgICB9Ci0KLSAgLyogQ29tcHV0ZSB0aGUgc2l6ZSBuZWVk ZWQgZm9yIHRoZSBleHRyYSBiZmQgc2VjdGlvbi4gICovCi0gIHNhdmVfc2l6 ZSA9IDQ7CS8qIG1hZ2ljIGNvb2tpZSAqLwotICBmb3IgKHJlY29yZF9saXN0 ID0gcmVjb3JkX2ZpcnN0Lm5leHQ7IHJlY29yZF9saXN0OwotICAgICAgIHJl Y29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQpCi0gICAgc3dpdGNoIChy ZWNvcmRfbGlzdC0+dHlwZSkKLSAgICAgIHsKLSAgICAgIGNhc2UgcmVjb3Jk X2VuZDoKLQlzYXZlX3NpemUgKz0gMSArIDQgKyA0OwotCWJyZWFrOwotICAg ICAgY2FzZSByZWNvcmRfcmVnOgotCXNhdmVfc2l6ZSArPSAxICsgNCArIHJl Y29yZF9saXN0LT51LnJlZy5sZW47Ci0JYnJlYWs7Ci0gICAgICBjYXNlIHJl Y29yZF9tZW06Ci0Jc2F2ZV9zaXplICs9IDEgKyA0ICsgOCArIHJlY29yZF9s aXN0LT51Lm1lbS5sZW47Ci0JYnJlYWs7Ci0gICAgICB9Ci0KLSAgLyogTWFr ZSB0aGUgbmV3IGJmZCBzZWN0aW9uLiAgKi8KLSAgb3NlYyA9IGJmZF9tYWtl X3NlY3Rpb25fYW55d2F5X3dpdGhfZmxhZ3MgKG9iZmQsICJwcmVjb3JkIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNFQ19IQVNfQ09OVEVOVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgU0VDX1JFQURPTkxZKTsKLSAgaWYgKG9z ZWMgPT0gTlVMTCkKLSAgICBlcnJvciAoXygiRmFpbGVkIHRvIGNyZWF0ZSAn cHJlY29yZCcgc2VjdGlvbiBmb3IgY29yZWZpbGUgJXM6ICVzIiksCi0JICAg cmVjZmlsZW5hbWUsCi0gICAgICAgICAgIGJmZF9lcnJtc2cgKGJmZF9nZXRf ZXJyb3IgKCkpKTsKLSAgYmZkX3NldF9zZWN0aW9uX3NpemUgKG9iZmQsIG9z ZWMsIHNhdmVfc2l6ZSk7Ci0gIGJmZF9zZXRfc2VjdGlvbl92bWEgKG9iZmQs IG9zZWMsIDApOwotICBiZmRfc2V0X3NlY3Rpb25fYWxpZ25tZW50IChvYmZk LCBvc2VjLCAwKTsKLSAgYmZkX3NlY3Rpb25fbG1hIChvYmZkLCBvc2VjKSA9 IDA7Ci0KLSAgLyogU2F2ZSBjb3JlZmlsZSBzdGF0ZS4gICovCi0gIHdyaXRl X2djb3JlX2ZpbGUgKG9iZmQpOwotCi0gIC8qIFdyaXRlIG91dCB0aGUgcmVj b3JkIGxvZy4gICovCi0gIC8qIFdyaXRlIHRoZSBtYWdpYyBjb2RlLiAgKi8K LSAgbWFnaWMgPSBSRUNPUkRfRklMRV9NQUdJQzsKLSAgaWYgKHJlY29yZF9k ZWJ1ZykKLSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0J CQkiICBXcml0aW5nIDQtYnl0ZSBtYWdpYyBjb29raWUgIgotCQkJIlJFQ09S RF9GSUxFX01BR0lDICgweCVzKVxuIiwKLQkJICAgICAgcGhleF9ueiAobWFn aWMsIDQpKTsKLSAgYmZkY29yZV93cml0ZSAob2JmZCwgb3NlYywgJm1hZ2lj LCBzaXplb2YgKG1hZ2ljKSwgJmJmZF9vZmZzZXQpOwotCi0gIC8qIFNhdmUg dGhlIGVudHJpZXMgdG8gcmVjZmQgYW5kIGZvcndhcmQgZXhlY3V0ZSB0byB0 aGUgZW5kIG9mCi0gICAgIHJlY29yZCBsaXN0LiAgKi8KLSAgcmVjb3JkX2xp c3QgPSAmcmVjb3JkX2ZpcnN0OwotICB3aGlsZSAoMSkKLSAgICB7Ci0gICAg ICAvKiBTYXZlIGVudHJ5LiAgKi8KLSAgICAgIGlmIChyZWNvcmRfbGlzdCAh PSAmcmVjb3JkX2ZpcnN0KQotICAgICAgICB7Ci0JICB1aW50OF90IHR5cGU7 Ci0JICB1aW50MzJfdCByZWdudW0sIGxlbiwgc2lnbmFsLCBjb3VudDsKLSAg ICAgICAgICB1aW50NjRfdCBhZGRyOwotCi0JICB0eXBlID0gcmVjb3JkX2xp c3QtPnR5cGU7Ci0gICAgICAgICAgYmZkY29yZV93cml0ZSAob2JmZCwgb3Nl YywgJnR5cGUsIHNpemVvZiAodHlwZSksICZiZmRfb2Zmc2V0KTsKLQotICAg ICAgICAgIHN3aXRjaCAocmVjb3JkX2xpc3QtPnR5cGUpCi0gICAgICAgICAg ICB7Ci0gICAgICAgICAgICBjYXNlIHJlY29yZF9yZWc6IC8qIHJlZyAqLwot CSAgICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCWZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKLQkJCQkgICAgIiAgV3JpdGluZyByZWdpc3RlciAl ZCAoMSAiCi0JCQkJICAgICJwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwK LQkJCQkgICAgcmVjb3JkX2xpc3QtPnUucmVnLm51bSwKLQkJCQkgICAgKHVu c2lnbmVkIGxvbmcpIHNpemVvZiAocmVnbnVtKSwKLQkJCQkgICAgcmVjb3Jk X2xpc3QtPnUucmVnLmxlbik7Ci0KLSAgICAgICAgICAgICAgLyogV3JpdGUg cmVnbnVtLiAgKi8KLSAgICAgICAgICAgICAgcmVnbnVtID0gbmV0b3JkZXIz MiAocmVjb3JkX2xpc3QtPnUucmVnLm51bSk7Ci0gICAgICAgICAgICAgIGJm ZGNvcmVfd3JpdGUgKG9iZmQsIG9zZWMsICZyZWdudW0sCi0JCQkgICAgIHNp emVvZiAocmVnbnVtKSwgJmJmZF9vZmZzZXQpOwotCi0gICAgICAgICAgICAg IC8qIFdyaXRlIHJlZ3ZhbC4gICovCi0gICAgICAgICAgICAgIGJmZGNvcmVf d3JpdGUgKG9iZmQsIG9zZWMsIHJlY29yZF9nZXRfbG9jIChyZWNvcmRfbGlz dCksCi0JCQkgICAgIHJlY29yZF9saXN0LT51LnJlZy5sZW4sICZiZmRfb2Zm c2V0KTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNh c2UgcmVjb3JkX21lbTogLyogbWVtICovCi0JICAgICAgaWYgKHJlY29yZF9k ZWJ1ZykKLQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJ CSAgICAiICBXcml0aW5nIG1lbW9yeSAlcyAoMSBwbHVzICIKLQkJCQkgICAg IiVsdSBwbHVzICVsdSBwbHVzICVkIGJ5dGVzKVxuIiwKLQkJCQkgICAgcGFk ZHJlc3MgKGdkYmFyY2gsCi0JCQkJCSAgICAgIHJlY29yZF9saXN0LT51Lm1l bS5hZGRyKSwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoYWRk ciksCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKGxlbiksCi0J CQkJICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOwotCi0JICAgICAgLyog V3JpdGUgbWVtbGVuLiAgKi8KLQkgICAgICBsZW4gPSBuZXRvcmRlcjMyIChy ZWNvcmRfbGlzdC0+dS5tZW0ubGVuKTsKLQkgICAgICBiZmRjb3JlX3dyaXRl IChvYmZkLCBvc2VjLCAmbGVuLCBzaXplb2YgKGxlbiksICZiZmRfb2Zmc2V0 KTsKLQotCSAgICAgIC8qIFdyaXRlIG1lbWFkZHIuICAqLwotCSAgICAgIGFk ZHIgPSBuZXRvcmRlcjY0IChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkcik7Ci0J ICAgICAgYmZkY29yZV93cml0ZSAob2JmZCwgb3NlYywgJmFkZHIsIAotCQkJ ICAgICBzaXplb2YgKGFkZHIpLCAmYmZkX29mZnNldCk7Ci0KLQkgICAgICAv KiBXcml0ZSBtZW12YWwuICAqLwotCSAgICAgIGJmZGNvcmVfd3JpdGUgKG9i ZmQsIG9zZWMsIHJlY29yZF9nZXRfbG9jIChyZWNvcmRfbGlzdCksCi0JCQkg ICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4sICZiZmRfb2Zmc2V0KTsKLSAg ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSByZWNv cmRfZW5kOgotCQlpZiAocmVjb3JkX2RlYnVnKQotCQkgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkgICAgICAiICBXcml0aW5nIHJl Y29yZF9lbmQgKDEgKyAiCi0JCQkJICAgICAgIiVsdSArICVsdSBieXRlcylc biIsIAotCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YgKHNpZ25h bCksCi0JCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZiAoY291bnQp KTsKLQkJLyogV3JpdGUgc2lnbmFsIHZhbHVlLiAgKi8KLQkJc2lnbmFsID0g bmV0b3JkZXIzMiAocmVjb3JkX2xpc3QtPnUuZW5kLnNpZ3ZhbCk7Ci0JCWJm ZGNvcmVfd3JpdGUgKG9iZmQsIG9zZWMsICZzaWduYWwsCi0JCQkgICAgICAg c2l6ZW9mIChzaWduYWwpLCAmYmZkX29mZnNldCk7Ci0KLQkJLyogV3JpdGUg aW5zbiBjb3VudC4gICovCi0JCWNvdW50ID0gbmV0b3JkZXIzMiAocmVjb3Jk X2xpc3QtPnUuZW5kLmluc25fbnVtKTsKLQkJYmZkY29yZV93cml0ZSAob2Jm ZCwgb3NlYywgJmNvdW50LAotCQkJICAgICAgIHNpemVvZiAoY291bnQpLCAm YmZkX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgLyogRXhlY3V0ZSBlbnRyeS4g ICovCi0gICAgICByZWNvcmRfZXhlY19pbnNuIChyZWdjYWNoZSwgZ2RiYXJj aCwgcmVjb3JkX2xpc3QpOwotCi0gICAgICBpZiAocmVjb3JkX2xpc3QtPm5l eHQpCi0gICAgICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7 Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAvKiBS ZXZlcnNlIGV4ZWN1dGUgdG8gY3VyX3JlY29yZF9saXN0LiAgKi8KLSAgd2hp bGUgKDEpCi0gICAgewotICAgICAgLyogQ2hlY2sgZm9yIGJlZ2lubmluZyBh bmQgZW5kIG9mIGxvZy4gICovCi0gICAgICBpZiAocmVjb3JkX2xpc3QgPT0g Y3VyX3JlY29yZF9saXN0KQotICAgICAgICBicmVhazsKLQotICAgICAgcmVj b3JkX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29yZF9saXN0 KTsKLQotICAgICAgaWYgKHJlY29yZF9saXN0LT5wcmV2KQotICAgICAgICBy ZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2OwotICAgIH0KLQotICBk b19jbGVhbnVwcyAoc2V0X2NsZWFudXBzKTsKLSAgZ2RiX2JmZF91bnJlZiAo b2JmZCk7Ci0gIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7Ci0K LSAgLyogU3VjY2VlZGVkLiAgKi8KLSAgcHJpbnRmX2ZpbHRlcmVkIChfKCJT YXZlZCBjb3JlIGZpbGUgJXMgd2l0aCBleGVjdXRpb24gbG9nLlxuIiksCi0J CSAgIHJlY2ZpbGVuYW1lKTsKLX0KLQotLyogcmVjb3JkX2dvdG9faW5zbiAt LSByZXdpbmQgdGhlIHJlY29yZCBsb2cgKGZvcndhcmQgb3IgYmFja3dhcmQs Ci0gICBkZXBlbmRpbmcgb24gRElSKSB0byB0aGUgZ2l2ZW4gZW50cnksIGNo YW5naW5nIHRoZSBwcm9ncmFtIHN0YXRlCi0gICBjb3JyZXNwb25kaW5nbHku ICAqLwotCi1zdGF0aWMgdm9pZAotcmVjb3JkX2dvdG9faW5zbiAoc3RydWN0 IHJlY29yZF9lbnRyeSAqZW50cnksCi0JCSAgZW51bSBleGVjX2RpcmVjdGlv bl9raW5kIGRpcikKLXsKLSAgc3RydWN0IGNsZWFudXAgKnNldF9jbGVhbnVw cyA9IHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOwotICBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2Fj aGUgKCk7Ci0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2Nh Y2hlX2FyY2ggKHJlZ2NhY2hlKTsKLQotICAvKiBBc3N1bWUgZXZlcnl0aGlu ZyBpcyB2YWxpZDogd2Ugd2lsbCBoaXQgdGhlIGVudHJ5LAotICAgICBhbmQg d2Ugd2lsbCBub3QgaGl0IHRoZSBlbmQgb2YgdGhlIHJlY29yZGluZy4gICov Ci0KLSAgaWYgKGRpciA9PSBFWEVDX0ZPUldBUkQpCi0gICAgcmVjb3JkX2xp c3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKLQotICBkbwotICAgIHsKLSAgICAg IHJlY29yZF9leGVjX2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRf bGlzdCk7Ci0gICAgICBpZiAoZGlyID09IEVYRUNfUkVWRVJTRSkKLQlyZWNv cmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2OwotICAgICAgZWxzZQotCXJl Y29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7Ci0gICAgfSB3aGlsZSAo cmVjb3JkX2xpc3QgIT0gZW50cnkpOwotICBkb19jbGVhbnVwcyAoc2V0X2Ns ZWFudXBzKTsKKyAgdGFyZ2V0X3NhdmVfcmVjb3JkIChyZWNmaWxlbmFtZSwg ZnJvbV90dHkpOwogfQogCiAvKiAicmVjb3JkIGdvdG8iIGNvbW1hbmQuICBB cmd1bWVudCBpcyBhbiBpbnN0cnVjdGlvbiBudW1iZXIsCkBAIC0yOTExLDYy ICsxNTksOSBAQCByZWNvcmRfZ290b19pbnNuIChzdHJ1Y3QgcmVjb3JkX2Vu dHJ5ICplbnRyeSwKIHN0YXRpYyB2b2lkCiBjbWRfcmVjb3JkX2dvdG8gKGNo YXIgKmFyZywgaW50IGZyb21fdHR5KQogewotICBzdHJ1Y3QgcmVjb3JkX2Vu dHJ5ICpwID0gTlVMTDsKLSAgVUxPTkdFU1QgdGFyZ2V0X2luc24gPSAwOwor ICByZXF1aXJlX3JlY29yZCAoKTsKIAotICBpZiAoYXJnID09IE5VTEwgfHwg KmFyZyA9PSAnXDAnKQotICAgIGVycm9yIChfKCJDb21tYW5kIHJlcXVpcmVz IGFuIGFyZ3VtZW50IChpbnNuIG51bWJlciB0byBnbyB0bykuIikpOwotCi0g IGlmIChzdHJuY21wIChhcmcsICJzdGFydCIsIHN0cmxlbiAoInN0YXJ0Iikp ID09IDAKLSAgICAgIHx8IHN0cm5jbXAgKGFyZywgImJlZ2luIiwgc3RybGVu ICgiYmVnaW4iKSkgPT0gMCkKLSAgICB7Ci0gICAgICAvKiBTcGVjaWFsIGNh c2UuICBGaW5kIGZpcnN0IGluc24uICAqLwotICAgICAgZm9yIChwID0gJnJl Y29yZF9maXJzdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkKLQlpZiAocC0+ dHlwZSA9PSByZWNvcmRfZW5kKQotCSAgYnJlYWs7Ci0gICAgICBpZiAocCkK LQl0YXJnZXRfaW5zbiA9IHAtPnUuZW5kLmluc25fbnVtOwotICAgIH0KLSAg ZWxzZSBpZiAoc3RybmNtcCAoYXJnLCAiZW5kIiwgc3RybGVuICgiZW5kIikp ID09IDApCi0gICAgewotICAgICAgLyogU3BlY2lhbCBjYXNlLiAgRmluZCBs YXN0IGluc24uICAqLwotICAgICAgZm9yIChwID0gcmVjb3JkX2xpc3Q7IHAt Pm5leHQgIT0gTlVMTDsgcCA9IHAtPm5leHQpCi0JOwotICAgICAgZm9yICg7 IHAhPSBOVUxMOyBwID0gcC0+cHJldikKLQlpZiAocC0+dHlwZSA9PSByZWNv cmRfZW5kKQotCSAgYnJlYWs7Ci0gICAgICBpZiAocCkKLQl0YXJnZXRfaW5z biA9IHAtPnUuZW5kLmluc25fbnVtOwotICAgIH0KLSAgZWxzZQotICAgIHsK LSAgICAgIC8qIEdlbmVyYWwgY2FzZS4gIEZpbmQgZGVzaWduYXRlZCBpbnNu LiAgKi8KLSAgICAgIHRhcmdldF9pbnNuID0gcGFyc2VfYW5kX2V2YWxfbG9u ZyAoYXJnKTsKLQotICAgICAgZm9yIChwID0gJnJlY29yZF9maXJzdDsgcCAh PSBOVUxMOyBwID0gcC0+bmV4dCkKLQlpZiAocC0+dHlwZSA9PSByZWNvcmRf ZW5kICYmIHAtPnUuZW5kLmluc25fbnVtID09IHRhcmdldF9pbnNuKQotCSAg YnJlYWs7Ci0gICAgfQotCi0gIGlmIChwID09IE5VTEwpCi0gICAgZXJyb3Ig KF8oIlRhcmdldCBpbnNuICclcycgbm90IGZvdW5kLiIpLCBhcmcpOwotICBl bHNlIGlmIChwID09IHJlY29yZF9saXN0KQotICAgIGVycm9yIChfKCJBbHJl YWR5IGF0IGluc24gJyVzJy4iKSwgYXJnKTsKLSAgZWxzZSBpZiAocC0+dS5l bmQuaW5zbl9udW0gPiByZWNvcmRfbGlzdC0+dS5lbmQuaW5zbl9udW0pCi0g ICAgewotICAgICAgcHJpbnRmX2ZpbHRlcmVkIChfKCJHbyBmb3J3YXJkIHRv IGluc24gbnVtYmVyICVzXG4iKSwKLQkJICAgICAgIHB1bG9uZ2VzdCAodGFy Z2V0X2luc24pKTsKLSAgICAgIHJlY29yZF9nb3RvX2luc24gKHAsIEVYRUNf Rk9SV0FSRCk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgcHJpbnRm X2ZpbHRlcmVkIChfKCJHbyBiYWNrd2FyZCB0byBpbnNuIG51bWJlciAlc1xu IiksCi0JCSAgICAgICBwdWxvbmdlc3QgKHRhcmdldF9pbnNuKSk7Ci0gICAg ICByZWNvcmRfZ290b19pbnNuIChwLCBFWEVDX1JFVkVSU0UpOwotICAgIH0K LSAgcmVnaXN0ZXJzX2NoYW5nZWQgKCk7Ci0gIHJlaW5pdF9mcmFtZV9jYWNo ZSAoKTsKLSAgcHJpbnRfc3RhY2tfZnJhbWUgKGdldF9zZWxlY3RlZF9mcmFt ZSAoTlVMTCksIDEsIFNSQ19BTkRfTE9DKTsKKyAgdGFyZ2V0X2dvdG9fcmVj b3JkIChhcmcsIGZyb21fdHR5KTsKIH0KIAogLyogUHJvdmlkZSBhIHByb3Rv dHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KQEAg LTI5NzcsMTYgKzE3Miw2IEBAIF9pbml0aWFsaXplX3JlY29yZCAodm9pZCkK IHsKICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmM7CiAKLSAgLyogSW5p dCByZWNvcmRfZmlyc3QuICAqLwotICByZWNvcmRfZmlyc3QucHJldiA9IE5V TEw7Ci0gIHJlY29yZF9maXJzdC5uZXh0ID0gTlVMTDsKLSAgcmVjb3JkX2Zp cnN0LnR5cGUgPSByZWNvcmRfZW5kOwotCi0gIGluaXRfcmVjb3JkX29wcyAo KTsKLSAgYWRkX3RhcmdldCAoJnJlY29yZF9vcHMpOwotICBpbml0X3JlY29y ZF9jb3JlX29wcyAoKTsKLSAgYWRkX3RhcmdldCAoJnJlY29yZF9jb3JlX29w cyk7Ci0KICAgYWRkX3NldHNob3dfenVpbnRlZ2VyX2NtZCAoInJlY29yZCIs IG5vX2NsYXNzLCAmcmVjb3JkX2RlYnVnLAogCQkJICAgICBfKCJTZXQgZGVi dWdnaW5nIG9mIHJlY29yZC9yZXBsYXkgZmVhdHVyZS4iKSwKIAkJCSAgICAg XygiU2hvdyBkZWJ1Z2dpbmcgb2YgcmVjb3JkL3JlcGxheSBmZWF0dXJlLiIp LApAQCAtMjk5Niw3ICsxODEsNyBAQCBfaW5pdGlhbGl6ZV9yZWNvcmQgKHZv aWQpCiAJCQkgICAgICZzaG93ZGVidWdsaXN0KTsKIAogICBjID0gYWRkX3By ZWZpeF9jbWQgKCJyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3Jk X3N0YXJ0LAotCQkgICAgICBfKCJBYmJyZXZpYXRlZCBmb3JtIG9mIFwidGFy Z2V0IHJlY29yZFwiIGNvbW1hbmQuIiksCisJCSAgICAgIF8oIlN0YXJ0IHJl Y29yZGluZy4iKSwKIAkJICAgICAgJnJlY29yZF9jbWRsaXN0LCAicmVjb3Jk ICIsIDAsICZjbWRsaXN0KTsKICAgc2V0X2NtZF9jb21wbGV0ZXIgKGMsIGZp bGVuYW1lX2NvbXBsZXRlcik7CiAKQEAgLTMwMjEsMTIgKzIwNiw2IEBAIERl ZmF1bHQgZmlsZW5hbWUgaXMgJ2dkYl9yZWNvcmQuPHByb2Nlc3NfaWQ+Jy4i KSwKIAkgICAgICAgJnJlY29yZF9jbWRsaXN0KTsKICAgc2V0X2NtZF9jb21w bGV0ZXIgKGMsIGZpbGVuYW1lX2NvbXBsZXRlcik7CiAKLSAgYyA9IGFkZF9j bWQgKCJyZXN0b3JlIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZF9yZXN0 b3JlLAotCSAgICAgICBfKCJSZXN0b3JlIHRoZSBleGVjdXRpb24gbG9nIGZy b20gYSBmaWxlLlxuXAotQXJndW1lbnQgaXMgZmlsZW5hbWUuICBGaWxlIG11 c3QgYmUgY3JlYXRlZCB3aXRoICdyZWNvcmQgc2F2ZScuIiksCi0JICAgICAg ICZyZWNvcmRfY21kbGlzdCk7Ci0gIHNldF9jbWRfY29tcGxldGVyIChjLCBm aWxlbmFtZV9jb21wbGV0ZXIpOwotCiAgIGFkZF9jbWQgKCJkZWxldGUiLCBj bGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX2RlbGV0ZSwKIAkgICBfKCJEZWxl dGUgdGhlIHJlc3Qgb2YgZXhlY3V0aW9uIGxvZyBhbmQgc3RhcnQgcmVjb3Jk aW5nIGl0IGFuZXcuIiksCiAgICAgICAgICAgICZyZWNvcmRfY21kbGlzdCk7 CkBAIC0zMDM4LDQwICsyMTcsOCBAQCBBcmd1bWVudCBpcyBmaWxlbmFtZS4g IEZpbGUgbXVzdCBiZSBjcmVhdGVkIHdpdGggJ3JlY29yZCBzYXZlJy4iKSwK ICAgICAgICAgICAgJnJlY29yZF9jbWRsaXN0KTsKICAgYWRkX2FsaWFzX2Nt ZCAoInMiLCAic3RvcCIsIGNsYXNzX29ic2N1cmUsIDEsICZyZWNvcmRfY21k bGlzdCk7CiAKLSAgLyogUmVjb3JkIGluc3RydWN0aW9ucyBudW1iZXIgbGlt aXQgY29tbWFuZC4gICovCi0gIGFkZF9zZXRzaG93X2Jvb2xlYW5fY21kICgi c3RvcC1hdC1saW1pdCIsIG5vX2NsYXNzLAotCQkJICAgJnJlY29yZF9zdG9w X2F0X2xpbWl0LCBfKCJcCi1TZXQgd2hldGhlciByZWNvcmQvcmVwbGF5IHN0 b3BzIHdoZW4gcmVjb3JkL3JlcGxheSBidWZmZXIgYmVjb21lcyBmdWxsLiIp LCBfKCJcCi1TaG93IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wcyB3aGVu IHJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwKLQkJCSAg IF8oIkRlZmF1bHQgaXMgT04uXG5cCi1XaGVuIE9OLCBpZiB0aGUgcmVjb3Jk L3JlcGxheSBidWZmZXIgYmVjb21lcyBmdWxsLCBhc2sgdXNlciB3aGF0IHRv IGRvLlxuXAotV2hlbiBPRkYsIGlmIHRoZSByZWNvcmQvcmVwbGF5IGJ1ZmZl ciBiZWNvbWVzIGZ1bGwsXG5cCi1kZWxldGUgdGhlIG9sZGVzdCByZWNvcmRl ZCBpbnN0cnVjdGlvbiB0byBtYWtlIHJvb20gZm9yIGVhY2ggbmV3IG9uZS4i KSwKLQkJCSAgIE5VTEwsIE5VTEwsCi0JCQkgICAmc2V0X3JlY29yZF9jbWRs aXN0LCAmc2hvd19yZWNvcmRfY21kbGlzdCk7Ci0gIGFkZF9zZXRzaG93X3Vp bnRlZ2VyX2NtZCAoImluc24tbnVtYmVyLW1heCIsIG5vX2NsYXNzLAotCQkJ ICAgICZyZWNvcmRfaW5zbl9tYXhfbnVtLAotCQkJICAgIF8oIlNldCByZWNv cmQvcmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwKLQkJCSAgICBfKCJTaG93IHJl Y29yZC9yZXBsYXkgYnVmZmVyIGxpbWl0LiIpLCBfKCJcCi1TZXQgdGhlIG1h eGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBiZSBzdG9yZWQgaW4g dGhlXG5cCi1yZWNvcmQvcmVwbGF5IGJ1ZmZlci4gIFplcm8gbWVhbnMgdW5s aW1pdGVkLiAgRGVmYXVsdCBpcyAyMDAwMDAuIiksCi0JCQkgICAgc2V0X3Jl Y29yZF9pbnNuX21heF9udW0sCi0JCQkgICAgTlVMTCwgJnNldF9yZWNvcmRf Y21kbGlzdCwgJnNob3dfcmVjb3JkX2NtZGxpc3QpOwotCiAgIGFkZF9jbWQg KCJnb3RvIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZF9nb3RvLCBfKCJc CiBSZXN0b3JlIHRoZSBwcm9ncmFtIHRvIGl0cyBzdGF0ZSBhdCBpbnN0cnVj dGlvbiBudW1iZXIgTi5cblwKIEFyZ3VtZW50IGlzIGluc3RydWN0aW9uIG51 bWJlciwgYXMgc2hvd24gYnkgJ2luZm8gcmVjb3JkJy4iKSwKIAkgICAmcmVj b3JkX2NtZGxpc3QpOwotCi0gIGFkZF9zZXRzaG93X2Jvb2xlYW5fY21kICgi bWVtb3J5LXF1ZXJ5Iiwgbm9fY2xhc3MsCi0JCQkgICAmcmVjb3JkX21lbW9y eV9xdWVyeSwgXygiXAotU2V0IHdoZXRoZXIgcXVlcnkgaWYgUFJFQyBjYW5u b3QgcmVjb3JkIG1lbW9yeSBjaGFuZ2Ugb2YgbmV4dCBpbnN0cnVjdGlvbi4i KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlwKLVNob3cgd2hl dGhlciBxdWVyeSBpZiBQUkVDIGNhbm5vdCByZWNvcmQgbWVtb3J5IGNoYW5n ZSBvZiBuZXh0IGluc3RydWN0aW9uLiIpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgXygiXAotRGVmYXVsdCBpcyBPRkYuXG5cCi1XaGVuIE9OLCBx dWVyeSBpZiBQUkVDIGNhbm5vdCByZWNvcmQgbWVtb3J5IGNoYW5nZSBvZiBu ZXh0IGluc3RydWN0aW9uLiIpLAotCQkJICAgTlVMTCwgTlVMTCwKLQkJCSAg ICZzZXRfcmVjb3JkX2NtZGxpc3QsICZzaG93X3JlY29yZF9jbWRsaXN0KTsK LQogfQpkaWZmIC0tZ2l0IGEvZ2RiL3JlY29yZC5oIGIvZ2RiL3JlY29yZC5o CmluZGV4IDljZjkyMjMuLjFjNTdmYTUgMTAwNjQ0Ci0tLSBhL2dkYi9yZWNv cmQuaAorKysgYi9nZGIvcmVjb3JkLmgKQEAgLTIwLDIwICsyMCwxNiBAQAog I2lmbmRlZiBfUkVDT1JEX0hfCiAjZGVmaW5lIF9SRUNPUkRfSF8KIAorI2lu Y2x1ZGUgInRhcmdldC5oIgorCiAjZGVmaW5lIFJFQ09SRF9JU19VU0VECShj dXJyZW50X3RhcmdldC50b19zdHJhdHVtID09IHJlY29yZF9zdHJhdHVtKQog CiBleHRlcm4gdW5zaWduZWQgaW50IHJlY29yZF9kZWJ1ZzsKLWV4dGVybiBp bnQgcmVjb3JkX21lbW9yeV9xdWVyeTsKLQotZXh0ZXJuIGludCByZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs IGludCBudW0pOwotZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKENPUkVfQUREUiBhZGRyLCBpbnQgbGVuKTsKLWV4dGVybiBpbnQgcmVj b3JkX2FyY2hfbGlzdF9hZGRfZW5kICh2b2lkKTsKLWV4dGVybiBzdHJ1Y3Qg Y2xlYW51cCAqcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKHZv aWQpOwotCi0vKiBXcmFwcGVyIGZvciB0YXJnZXRfcmVhZF9tZW1vcnkgdGhh dCBwcmludHMgYSBkZWJ1ZyBtZXNzYWdlIGlmCi0gICByZWFkaW5nIG1lbW9y eSBmYWlscy4gICovCi1leHRlcm4gaW50IHJlY29yZF9yZWFkX21lbW9yeSAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0JCQkgICAgICAgQ09SRV9BRERS IG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsCi0JCQkgICAgICAgc3NpemVf dCBsZW4pOworCisvKiBBbGxvdyByZWNvcmQgdGFyZ2V0cyB0byBhZGQgdGhl aXIgb3duIHN1Yi1jb21tYW5kcy4gICovCitleHRlcm4gc3RydWN0IGNtZF9s aXN0X2VsZW1lbnQgKnJlY29yZF9jbWRsaXN0OworZXh0ZXJuIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpzZXRfcmVjb3JkX2NtZGxpc3Q7CitleHRlcm4g c3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKnNob3dfcmVjb3JkX2NtZGxpc3Q7 CitleHRlcm4gc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmluZm9fcmVjb3Jk X2NtZGxpc3Q7CiAKICNlbmRpZiAvKiBfUkVDT1JEX0hfICovCmRpZmYgLS1n aXQgYS9nZGIvdGFyZ2V0LmMgYi9nZGIvdGFyZ2V0LmMKaW5kZXggMjVmNDYy OS4uNDJkZGIzYiAxMDA2NDQKLS0tIGEvZ2RiL3RhcmdldC5jCisrKyBiL2dk Yi90YXJnZXQuYwpAQCAtNDIzMSw2ICs0MjMxLDcxIEBAIHRhcmdldF9yZWFk X2J0cmFjZSAoc3RydWN0IGJ0cmFjZV90YXJnZXRfaW5mbyAqYnRpbmZvKQog ICByZXR1cm4gTlVMTDsKIH0KIAorLyogU2VlIHRhcmdldC5oLiAgKi8KKwor dm9pZAordGFyZ2V0X2luZm9fcmVjb3JkIChjaGFyICphcmdzLCBpbnQgZnJv bV90dHkpCit7CisgIHN0cnVjdCB0YXJnZXRfb3BzICp0OworCisgIGZvciAo dCA9IGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGg7IHQgIT0gTlVMTDsgdCA9IHQt PmJlbmVhdGgpCisgICAgaWYgKHQtPnRvX2luZm9fcmVjb3JkICE9IE5VTEwp CisgICAgICB7CisJdC0+dG9faW5mb19yZWNvcmQgKGFyZ3MsIGZyb21fdHR5 KTsKKwlyZXR1cm47CisgICAgICB9Cit9CisKKy8qIFNlZSB0YXJnZXQuaC4g ICovCisKK3ZvaWQKK3RhcmdldF9zYXZlX3JlY29yZCAoY2hhciAqZmlsZW5h bWUsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IHRhcmdldF9vcHMgKnQ7 CisKKyAgZm9yICh0ID0gY3VycmVudF90YXJnZXQuYmVuZWF0aDsgdCAhPSBO VUxMOyB0ID0gdC0+YmVuZWF0aCkKKyAgICBpZiAodC0+dG9fc2F2ZV9yZWNv cmQgIT0gTlVMTCkKKyAgICAgIHsKKwl0LT50b19zYXZlX3JlY29yZCAoZmls ZW5hbWUsIGZyb21fdHR5KTsKKwlyZXR1cm47CisgICAgICB9CisKKyAgZXJy b3IgKF8oIlRoZSBjdXJyZW50IHJlY29yZCB0YXJnZXQgZG9lcyBub3Qgc3Vw cG9ydCBzYXZpbmcuIikpOworfQorCisvKiBTZWUgdGFyZ2V0LmguICAqLwor Cit2b2lkCit0YXJnZXRfZGVsZXRlX3JlY29yZCAoY2hhciAqYXJncywgaW50 IGZyb21fdHR5KQoreworICBzdHJ1Y3QgdGFyZ2V0X29wcyAqdDsKKworICBm b3IgKHQgPSBjdXJyZW50X3RhcmdldC5iZW5lYXRoOyB0ICE9IE5VTEw7IHQg PSB0LT5iZW5lYXRoKQorICAgIGlmICh0LT50b19kZWxldGVfcmVjb3JkICE9 IE5VTEwpCisgICAgICB7CisJdC0+dG9fZGVsZXRlX3JlY29yZCAoYXJncywg ZnJvbV90dHkpOworCXJldHVybjsKKyAgICAgIH0KKworICBlcnJvciAoXygi VGhlIGN1cnJlbnQgcmVjb3JkIHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IGRl bGV0aW5nLiIpKTsKK30KKworLyogU2VlIHRhcmdldC5oLiAgKi8KKwordm9p ZAordGFyZ2V0X2dvdG9fcmVjb3JkIChjaGFyICphcmdzLCBpbnQgZnJvbV90 dHkpCit7CisgIHN0cnVjdCB0YXJnZXRfb3BzICp0OworCisgIGZvciAodCA9 IGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGg7IHQgIT0gTlVMTDsgdCA9IHQtPmJl bmVhdGgpCisgICAgaWYgKHQtPnRvX2dvdG9fcmVjb3JkICE9IE5VTEwpCisg ICAgICB7CisJdC0+dG9fZ290b19yZWNvcmQgKGFyZ3MsIGZyb21fdHR5KTsK KwlyZXR1cm47CisgICAgICB9CisKKyAgZXJyb3IgKF8oIlRoZSBjdXJyZW50 IHJlY29yZCB0YXJnZXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlv bi4iKSk7Cit9CiAKIHN0YXRpYyB2b2lkCiBkZWJ1Z190b19wcmVwYXJlX3Rv X3N0b3JlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlKQpkaWZmIC0tZ2l0 IGEvZ2RiL3RhcmdldC5oIGIvZ2RiL3RhcmdldC5oCmluZGV4IDFkNzMzMzYu LmQ1YTFmODYgMTAwNjQ0Ci0tLSBhL2dkYi90YXJnZXQuaAorKysgYi9nZGIv dGFyZ2V0LmgKQEAgLTg3Niw2ICs4NzYsMTggQEAgc3RydWN0IHRhcmdldF9v cHMKICAgICAvKiBSZWFkIGJyYW5jaCB0cmFjZSBkYXRhLiAgKi8KICAgICBW RUMgKGJ0cmFjZV9ibG9ja19zKSAqKCp0b19yZWFkX2J0cmFjZSkgKHN0cnVj dCBidHJhY2VfdGFyZ2V0X2luZm8gKik7CiAKKyAgICAvKiBQcmludCBpbmZv cm1hdGlvbiBhYm91dCB0aGUgcmVjb3JkaW5nLiAgKi8KKyAgICB2b2lkICgq dG9faW5mb19yZWNvcmQpIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwor CisgICAgLyogU2F2ZSB0aGUgcmVjb3JkZWQgZXhlY3V0aW9uIHRyYWNlIGlu dG8gYSBmaWxlLiAgKi8KKyAgICB2b2lkICgqdG9fc2F2ZV9yZWNvcmQpIChj aGFyICpmaWxlbmFtZSwgaW50IGZyb21fdHR5KTsKKworICAgIC8qIERlbGV0 ZSB0aGUgcmVjb3JkZWQgZXhlY3V0aW9uIHRyYWNlLiAgKi8KKyAgICB2b2lk ICgqdG9fZGVsZXRlX3JlY29yZCkgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0 eSk7CisKKyAgICAvKiBHbyB0byBhIHNwZWNpZmljIGxvY2F0aW9uIGluIHRo ZSByZWNvcmRlZCBleGVjdXRpb24gdHJhY2UuICAqLworICAgIHZvaWQgKCp0 b19nb3RvX3JlY29yZCkgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7CisK ICAgICBpbnQgdG9fbWFnaWM7CiAgICAgLyogTmVlZCBzdWItc3RydWN0dXJl IGZvciB0YXJnZXQgbWFjaGluZSByZWxhdGVkIHJhdGhlciB0aGFuIGNvbW0g cmVsYXRlZD8KICAgICAgKi8KQEAgLTE5MzgsNSArMTk1MCwxNiBAQCBleHRl cm4gaW50IHRhcmdldF9idHJhY2VfaGFzX2NoYW5nZWQgKHN0cnVjdCBidHJh Y2VfdGFyZ2V0X2luZm8gKmJ0aW5mbyk7CiAgICBSZXR1cm5zIGEgdmVjdG9y IG9mIGJyYW5jaCB0cmFjZSBibG9ja3Mgd2l0aCB0aGUgbGF0ZXN0IGVudHJ5 IGF0IGluZGV4IDAuICAqLwogZXh0ZXJuIFZFQyAoYnRyYWNlX2Jsb2NrX3Mp ICp0YXJnZXRfcmVhZF9idHJhY2UgKHN0cnVjdCBidHJhY2VfdGFyZ2V0X2lu Zm8gKik7CiAKKy8qIFByaW50IHJlY29yZCBpbmZvcm1hdGlvbiBmb3IgdGhp cyByZWNvcmQgdGFyZ2V0LiAgKi8KK2V4dGVybiB2b2lkIHRhcmdldF9pbmZv X3JlY29yZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KTsKKworLyogU2F2 ZSB0aGUgcmVjb3JkZWQgZXhlY3V0aW9uIHRyYWNlIGludG8gYSBmaWxlLiAg Ki8KK2V4dGVybiB2b2lkIHRhcmdldF9zYXZlX3JlY29yZCAoY2hhciAqZmls ZW5hbWUsIGludCBmcm9tX3R0eSk7CisKKy8qIERlbGV0ZSB0aGUgcmVjb3Jk ZWQgZXhlY3V0aW9uIHRyYWNlLiAgKi8KK2V4dGVybiB2b2lkIHRhcmdldF9k ZWxldGVfcmVjb3JkIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOworCisv KiBHbyB0byBhIHNwZWNpZmljIGxvY2F0aW9uIGluIHRoZSByZWNvcmRlZCBl eGVjdXRpb24gdHJhY2UuICAqLworZXh0ZXJuIHZvaWQgdGFyZ2V0X2dvdG9f cmVjb3JkIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpOwogCiAjZW5kaWYg LyogIWRlZmluZWQgKFRBUkdFVF9IKSAqLwo= --_003_A78C989F6D9628469189715575E55B2307B69233IRSMSX102gercor_--