From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14234 invoked by alias); 23 Feb 2009 08:56:56 -0000 Received: (qmail 14221 invoked by uid 22791); 23 Feb 2009 08:56:53 -0000 X-SWARE-Spam-Status: No, hits=-0.1 required=5.0 tests=AWL,BAYES_50,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.187) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 23 Feb 2009 08:56:43 +0000 Received: by ti-out-0910.google.com with SMTP id y8so1393861tia.12 for ; Mon, 23 Feb 2009 00:56:40 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.53.19 with SMTP id b19mr5517353tia.34.1235379400096; Mon, 23 Feb 2009 00:56:40 -0800 (PST) In-Reply-To: References: <200901221324.02225.pedro@codesourcery.com> Date: Mon, 23 Feb 2009 14:08:00 -0000 Message-ID: Subject: Re: [RFA] Submit process record and replay third time, 3/9 From: teawater To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001485f025704e3b2f0463922e5c 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: 2009-02/txt/msg00439.txt.bz2 --001485f025704e3b2f0463922e5c Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 585 Hi Pedro, 3-record_target.txt patch update follow your "Modernize solaris threads support" patch. Thanks, Hui On Tue, Feb 17, 2009 at 15:01, teawater wrote: > Update follow the cvs-head. It just has a very small change - add a 0 > to be the argument of observer_notify_normal_stop. > > On Sun, Feb 8, 2009 at 21:03, teawater wrote: >> Hi Pedro, >> >> According to your mail "Get rid of linux-thread-db.c:target_beneath". >> I get ride of this global beneath function pointers. >> >> Do you think this patch is OK? >> >> Thanks, >> Hui >> > --001485f025704e3b2f0463922e5c Content-Type: text/plain; charset=US-ASCII; name="3-record_target.txt" Content-Disposition: attachment; filename="3-record_target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_frixbbvx0 Content-length: 54327 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDQgCiByZWNvcmQuYyAgICB8IDEyODMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAgODcgKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAxMzcyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAt NjYyLDcgKzY2Miw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5j IGFkYS10eXBlcHIKIAl2YWxhcml0aC5jIHZhbG9wcy5jIHZhbHByaW50LmMg dmFsdWUuYyB2YXJvYmouYyB2ZWMuYyBcCiAJd3JhcHBlci5jIFwKIAl4bWwt dGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKLQlpbmZlcmlvci5jCisJaW5mZXJp b3IuYyByZWNvcmQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtODEzLDcgKzgxMyw3 IEBAIENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQK IAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFsdWUubyBt ZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRlc2NyaXB0 aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwtYnVpbHRp bi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vCisJaW5mZXJpb3IubyBvc2Rh dGEubyByZWNvcmQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKLS0tIC9kZXYv bnVsbAorKysgYi9yZWNvcmQuYwpAQCAtMCwwICsxLDEyODMgQEAKKy8qIFBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGZvciBHREIsIHRoZSBH TlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1 ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVk ZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNs dWRlICJldmVudC10b3AuaCIKKyNpbmNsdWRlICJhbm5vdGF0ZS5oIgorI2lu Y2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCisKKyNp bmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZSBERUZBVUxUX1JFQ09SRF9J TlNOX01BWF9OVU0JMjAwMDAwCisKK2ludCByZWNvcmRfZGVidWcgPSAwOwor CityZWNvcmRfdCByZWNvcmRfZmlyc3Q7CityZWNvcmRfdCAqcmVjb3JkX2xp c3QgPSAmcmVjb3JkX2ZpcnN0OworcmVjb3JkX3QgKnJlY29yZF9hcmNoX2xp c3RfaGVhZCA9IE5VTEw7CityZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gTlVMTDsKK3N0cnVjdCByZWdjYWNoZSAqcmVjb3JkX3JlZ2NhY2hl ID0gTlVMTDsKKworLyogMSBhc2sgdXNlci4gMCBhdXRvIGRlbGV0ZSB0aGUg bGFzdCByZWNvcmRfdC4gICovCitzdGF0aWMgaW50IHJlY29yZF9zdG9wX2F0 X2xpbWl0ID0gMTsKK3N0YXRpYyBpbnQgcmVjb3JkX2luc25fbWF4X251bSA9 IERFRkFVTFRfUkVDT1JEX0lOU05fTUFYX05VTTsKK3N0YXRpYyBpbnQgcmVj b3JkX2luc25fbnVtID0gMDsKKworc3RydWN0IHRhcmdldF9vcHMgcmVjb3Jk X29wczsKK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMDsKK3N0 YXRpYyBlbnVtIHRhcmdldF9zaWduYWwgcmVjb3JkX3Jlc3VtZV9zaWdnbmFs Oworc3RhdGljIGludCByZWNvcmRfZ2V0X3NpZyA9IDA7CitzdGF0aWMgc2ln c2V0X3QgcmVjb3JkX21hc2thbGw7CitzdGF0aWMgaW50IHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGUgPSAwOworaW50IHJlY29yZF93aWxsX3N0b3Jl X3JlZ2lzdGVycyA9IDA7CisKK2V4dGVybiBzdHJ1Y3QgYnBfbG9jYXRpb24g KmJwX2xvY2F0aW9uX2NoYWluOworCisvKiBUaGUgYmVuZWF0aCBmdW5jdGlv biBwb2ludGVycy4gICovCitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnJl Y29yZF9iZW5lYXRoX3RvX3Jlc3VtZV9vcHMgPSBOVUxMOworc3RhdGljIHZv aWQgKCpyZWNvcmRfYmVuZWF0aF90b19yZXN1bWUpIChzdHJ1Y3QgdGFyZ2V0 X29wcyAqLCBwdGlkX3QsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSB0YXJnZXRfc2lnbmFsKSA9IE5VTEw7 CitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnJlY29yZF9iZW5lYXRoX3Rv X3dhaXRfb3BzID0gTlVMTDsKK3N0YXRpYyBwdGlkX3QgKCpyZWNvcmRfYmVu ZWF0aF90b193YWl0KSAoc3RydWN0IHRhcmdldF9vcHMgKiwgcHRpZF90LAor CQkJCQkgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICopID0gTlVMTDsKK3N0 YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyAqcmVjb3JkX2JlbmVhdGhfdG9fc3Rv cmVfcmVnaXN0ZXJzX29wcyA9IE5VTEw7CitzdGF0aWMgdm9pZCAoKnJlY29y ZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycykgKHN0cnVjdCB0YXJnZXRf b3BzICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCByZWdjYWNoZSAqLAorCQkJCQkJICBpbnQg cmVnbm8pID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyAqcmVj b3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsX29wcyA9IE5VTEw7CitzdGF0 aWMgTE9OR0VTVCAoKnJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCkg KHN0cnVjdCB0YXJnZXRfb3BzICogb3BzLAorCQkJCQkJICBlbnVtIHRhcmdl dF9vYmplY3Qgb2JqZWN0LAorCQkJCQkJICBjb25zdCBjaGFyICphbm5leCwK KwkJCQkJCSAgZ2RiX2J5dGUgKiByZWFkYnVmLAorCQkJCQkJICBjb25zdCBn ZGJfYnl0ZSAqIHdyaXRlYnVmLAorCQkJCQkJICBVTE9OR0VTVCBvZmZzZXQs CisJCQkJCQkgIExPTkdFU1QgbGVuKSA9IE5VTEw7CitzdGF0aWMgaW50ICgq cmVjb3JkX2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQpIChzdHJ1Y3Qg YnBfdGFyZ2V0X2luZm8gKikgPQorICBOVUxMOworc3RhdGljIGludCAoKnJl Y29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50KSAoc3RydWN0IGJw X3RhcmdldF9pbmZvICopID0KKyAgTlVMTDsKKworc3RhdGljIHZvaWQKK3Jl Y29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF90ICogcmVjKQoreworICByZWNv cmRfdCAqdG1wOworCisgIGlmICghcmVjKQorICAgIHJldHVybjsKKworICB3 aGlsZSAocmVjLT5uZXh0KQorICAgIHsKKyAgICAgIHJlYyA9IHJlYy0+bmV4 dDsKKyAgICB9CisKKyAgd2hpbGUgKHJlYy0+cHJldikKKyAgICB7CisgICAg ICB0bXAgPSByZWM7CisgICAgICByZWMgPSByZWMtPnByZXY7CisgICAgICBp ZiAodG1wLT50eXBlID09IHJlY29yZF9yZWcpCisJeGZyZWUgKHRtcC0+dS5y ZWcudmFsKTsKKyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRf bWVtKQorCXhmcmVlICh0bXAtPnUubWVtLnZhbCk7CisgICAgICB4ZnJlZSAo dG1wKTsKKyAgICB9CisKKyAgaWYgKHJlYyAhPSAmcmVjb3JkX2ZpcnN0KQor ICAgIHhmcmVlIChyZWMpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2xp c3RfcmVsZWFzZV9uZXh0ICh2b2lkKQoreworICByZWNvcmRfdCAqcmVjID0g cmVjb3JkX2xpc3Q7CisgIHJlY29yZF90ICp0bXAgPSByZWMtPm5leHQ7Cisg IHJlYy0+bmV4dCA9IE5VTEw7CisgIHdoaWxlICh0bXApCisgICAgeworICAg ICAgcmVjID0gdG1wLT5uZXh0OworICAgICAgaWYgKHRtcC0+dHlwZSA9PSBy ZWNvcmRfcmVnKQorCXJlY29yZF9pbnNuX251bS0tOworICAgICAgZWxzZSBp ZiAodG1wLT50eXBlID09IHJlY29yZF9yZWcpCisJeGZyZWUgKHRtcC0+dS5y ZWcudmFsKTsKKyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRf bWVtKQorCXhmcmVlICh0bXAtPnUubWVtLnZhbCk7CisgICAgICB4ZnJlZSAo dG1wKTsKKyAgICAgIHRtcCA9IHJlYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkCityZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICh2b2lkKQoreworICBy ZWNvcmRfdCAqdG1wID0gTlVMTDsKKyAgZW51bSByZWNvcmRfdHlwZSB0eXBl OworCisgIGlmICghcmVjb3JkX2ZpcnN0Lm5leHQpCisgICAgcmV0dXJuOwor CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHR5cGUgPSByZWNvcmRfZmly c3QubmV4dC0+dHlwZTsKKworICAgICAgaWYgKHR5cGUgPT0gcmVjb3JkX3Jl ZykKKwl4ZnJlZSAocmVjb3JkX2ZpcnN0Lm5leHQtPnUucmVnLnZhbCk7Cisg ICAgICBlbHNlIGlmICh0eXBlID09IHJlY29yZF9tZW0pCisJeGZyZWUgKHJl Y29yZF9maXJzdC5uZXh0LT51Lm1lbS52YWwpOworICAgICAgdG1wID0gcmVj b3JkX2ZpcnN0Lm5leHQ7CisgICAgICByZWNvcmRfZmlyc3QubmV4dCA9IHRt cC0+bmV4dDsKKyAgICAgIHhmcmVlICh0bXApOworCisgICAgICBpZiAoIXJl Y29yZF9maXJzdC5uZXh0KQorCXsKKwkgIGdkYl9hc3NlcnQgKHJlY29yZF9p bnNuX251bSA9PSAxKTsKKwkgIGJyZWFrOworCX0KKworICAgICAgcmVjb3Jk X2ZpcnN0Lm5leHQtPnByZXYgPSAmcmVjb3JkX2ZpcnN0OworCisgICAgICBp ZiAodHlwZSA9PSByZWNvcmRfZW5kKQorCWJyZWFrOworICAgIH0KKworICBy ZWNvcmRfaW5zbl9udW0tLTsKK30KKworLyogQWRkIGEgcmVjb3JkX3QgdG8g cmVjb3JkX2FyY2hfbGlzdC4gICovCitzdGF0aWMgdm9pZAorcmVjb3JkX2Fy Y2hfbGlzdF9hZGQgKHJlY29yZF90ICogcmVjKQoreworICBpZiAocmVjb3Jk X2RlYnVnID4gMSkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csCisJCQkiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9hcmNoX2xpc3RfYWRk ICVzLlxuIiwKKwkJCWhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlYykpOwor CisgIGlmIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpCisgICAgeworICAgICAg cmVjb3JkX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0gcmVjOworICAgICAgcmVj LT5wcmV2ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOworICAgICAgcmVjb3Jk X2FyY2hfbGlzdF90YWlsID0gcmVjOworICAgIH0KKyAgZWxzZQorICAgIHsK KyAgICAgIHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IHJlYzsKKyAgICAgIHJl Y29yZF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsKKyAgICB9Cit9CisKKy8qIFJl Y29yZCB0aGUgdmFsdWUgb2YgYSByZWdpc3RlciAoIm51bSIpIHRvIHJlY29y ZF9hcmNoX2xpc3QuICAqLworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKGludCBudW0pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJl Y29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgcmVnaXN0ZXIgbnVt ID0gJWQgdG8gIgorCQkJInJlY29yZCBsaXN0LlxuIiwKKwkJCW51bSk7CisK KyAgcmVjID0gKHJlY29yZF90ICopIHhtYWxsb2MgKHNpemVvZiAocmVjb3Jk X3QpKTsKKyAgcmVjLT51LnJlZy52YWwgPSAoZ2RiX2J5dGUgKikgeG1hbGxv YyAoTUFYX1JFR0lTVEVSX1NJWkUpOworICByZWMtPnByZXYgPSBOVUxMOwor ICByZWMtPm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfcmVn OworICByZWMtPnUucmVnLm51bSA9IG51bTsKKworICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBudW0sIHJlYy0+dS5yZWcudmFsKTsK KworICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4g MDsKK30KKworLyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBhIHJlZ2lvbiBvZiBt ZW1vcnkgd2hvc2UgYWRkcmVzcyBpcyAiYWRkciIgYW5kCisgICBsZW5ndGgg aXMgImxlbiIgdG8gcmVjb3JkX2FyY2hfbGlzdC4gICovCisKK2ludAorcmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxl bikKK3sKKyAgcmVjb3JkX3QgKnJlYzsKKworICBpZiAocmVjb3JkX2RlYnVn ID4gMSkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkiUHJvY2VzcyByZWNvcmQ6IGFkZCBtZW0gYWRkciA9IDB4JXMgbGVuID0g JWQgdG8gIgorCQkJInJlY29yZCBsaXN0LlxuIiwKKwkJCXBhZGRyX256IChh ZGRyKSwgbGVuKTsKKworICBpZiAoIWFkZHIpCisgICAgcmV0dXJuIDA7CisK KyAgcmVjID0gKHJlY29yZF90ICopIHhtYWxsb2MgKHNpemVvZiAocmVjb3Jk X3QpKTsKKyAgcmVjLT51Lm1lbS52YWwgPSAoZ2RiX2J5dGUgKikgeG1hbGxv YyAobGVuKTsKKyAgcmVjLT5wcmV2ID0gTlVMTDsKKyAgcmVjLT5uZXh0ID0g TlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3JkX21lbTsKKyAgcmVjLT51Lm1l bS5hZGRyID0gYWRkcjsKKyAgcmVjLT51Lm1lbS5sZW4gPSBsZW47CisKKyAg aWYgKHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgcmVjLT51Lm1lbS52YWws IGxlbikpCisgICAgeworICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwlmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCAiCisJCQkgICAgImFk ZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKwkJCSAgICBwYWRkcl9ueiAoYWRk ciksIGxlbik7CisgICAgICB4ZnJlZSAocmVjLT51Lm1lbS52YWwpOworICAg ICAgeGZyZWUgKHJlYyk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg IHJlY29yZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVybiAwOwor fQorCisvKiBBZGQgYSByZWNvcmRfZW5kIHR5cGUgcmVjb3JkX3QgdG8gcmVj b3JkX2FyY2hfbGlzdC4gICovCitpbnQKK3JlY29yZF9hcmNoX2xpc3RfYWRk X2VuZCAoaW50IG5lZWRfZGFzbSkKK3sKKyAgcmVjb3JkX3QgKnJlYzsKKwor ICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKyAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisJCQkiUHJvY2VzcyByZWNvcmQ6IGFkZCBlbmQg bmVlZF9kYXNtID0gJWQgdG8gIgorCQkJImFyY2ggbGlzdC5cbiIsCisJCQlu ZWVkX2Rhc20pOworCisgIHJlYyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChz aXplb2YgKHJlY29yZF90KSk7CisgIHJlYy0+cHJldiA9IE5VTEw7CisgIHJl Yy0+bmV4dCA9IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29yZF9lbmQ7CisK KyAgcmVjLT51Lm5lZWRfZGFzbSA9IG5lZWRfZGFzbTsKKworICByZWNvcmRf YXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQKK3JlY29yZF9jaGVja19pbnNuX251bSAoaW50IHNldF90ZXJt aW5hbCkKK3sKKyAgaWYgKHJlY29yZF9pbnNuX21heF9udW0pCisgICAgewor ICAgICAgZ2RiX2Fzc2VydCAocmVjb3JkX2luc25fbnVtIDw9IHJlY29yZF9p bnNuX21heF9udW0pOworICAgICAgaWYgKHJlY29yZF9pbnNuX251bSA9PSBy ZWNvcmRfaW5zbl9tYXhfbnVtKQorCXsKKwkgIC8qIEFzayB1c2VyIHdoYXQg dG8gZG8uICAqLworCSAgaWYgKHJlY29yZF9zdG9wX2F0X2xpbWl0KQorCSAg ICB7CisJICAgICAgaW50IHE7CisJICAgICAgaWYgKHNldF90ZXJtaW5hbCkK KwkJdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisJICAgICAgcSA9IHlxdWVy eSAoXygiRG8geW91IHdhbnQgdG8gYXV0byBkZWxldGUgcHJldmlvdXMgZXhl Y3V0aW9uICIKKwkJCSAgICAibG9nIGVudHJpZXMgd2hlbiByZWNvcmQvcmVw bGF5IGJ1ZmZlciBiZWNvbWVzICIKKwkJCSAgICAiZnVsbCAocmVjb3JkLXN0 b3AtYXQtbGltaXQpPyIpKTsKKwkgICAgICBpZiAoc2V0X3Rlcm1pbmFsKQor CQl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisJICAgICAgaWYgKHEp CisJCXJlY29yZF9zdG9wX2F0X2xpbWl0ID0gMDsKKwkgICAgICBlbHNlCisJ CWVycm9yIChfKCJQcm9jZXNzIHJlY29yZDogaW5mZXJpb3IgcHJvZ3JhbSBz dG9wcGVkLiIpKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkCityZWNvcmRfbm9ybWFsX3N0b3AgKHZvaWQpCit7CisgIGZpbmlzaF90 aHJlYWRfc3RhdGUgKG1pbnVzX29uZV9wdGlkKTsKKworICBpZiAoIWJyZWFr cG9pbnRzX2Fsd2F5c19pbnNlcnRlZF9tb2RlICgpICYmIHRhcmdldF9oYXNf ZXhlY3V0aW9uKQorICAgIHJlbW92ZV9icmVha3BvaW50cyAoKTsKKworICB0 YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKworICBpZiAodGFyZ2V0X2hhc19z dGFjayAmJiAhc3RvcF9zdGFja19kdW1teSkKKyAgICBzZXRfY3VycmVudF9z YWxfZnJvbV9mcmFtZSAoZ2V0X2N1cnJlbnRfZnJhbWUgKCksIDEpOworCisg IHNlbGVjdF9mcmFtZSAoZ2V0X2N1cnJlbnRfZnJhbWUgKCkpOworCisgIGFu bm90YXRlX3N0b3BwZWQgKCk7CisgIGlmICghc3VwcHJlc3Nfc3RvcF9vYnNl cnZlcikKKyAgICB7CisgICAgICBpZiAoIXB0aWRfZXF1YWwgKGluZmVyaW9y X3B0aWQsIG51bGxfcHRpZCkpCisJb2JzZXJ2ZXJfbm90aWZ5X25vcm1hbF9z dG9wIChpbmZlcmlvcl90aHJlYWQgKCktPnN0b3BfYnBzdGF0LCAwKTsKKyAg ICAgIGVsc2UKKwlvYnNlcnZlcl9ub3RpZnlfbm9ybWFsX3N0b3AgKE5VTEws IDApOworICAgIH0KK30KKworLyogQmVmb3JlIGluZmVyaW9yIHN0ZXAgKHdo ZW4gR0RCIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlLCBpbmZlcmlvcgor ICAgb25seSBjYW4gc3RlcCksIEdEQiB3aWxsIGNhbGwgdGhpcyBmdW5jdGlv biB0byByZWNvcmQgdGhlIHZhbHVlcyB0bworICAgcmVjb3JkX2xpc3QuICBU aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBnZGJhcmNoX3Byb2Nlc3NfcmVjb3Jk IHRvCisgICByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSBvZiBpbmZlcmlv ciBhbmQgc2V0IHRoZW0gdG8KKyAgIHJlY29yZF9hcmNoX2xpc3QsIGFuZCBh ZGQgaXQgdG8gcmVjb3JkX2xpc3QuICAqLworCitzdGF0aWMgdm9pZAorcmVj b3JkX21lc3NhZ2VfY2xlYW51cHMgKHZvaWQgKmlnbm9yZSkKK3sKKyAgcmVj b3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKyAg c2V0X2V4ZWN1dGluZyAoaW5mZXJpb3JfcHRpZCwgMCk7CisgIHJlY29yZF9u b3JtYWxfc3RvcCAoKTsKK30KKwordm9pZAorcmVjb3JkX21lc3NhZ2UgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoKQoreworICBpbnQgcmV0OworICBzdHJ1 Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwIChyZWNv cmRfbWVzc2FnZV9jbGVhbnVwcywgMCk7CisKKyAgcmVjb3JkX2FyY2hfbGlz dF9oZWFkID0gTlVMTDsKKyAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gTlVM TDsKKworICAvKiBDaGVjayByZWNvcmRfaW5zbl9udW0uICAqLworICByZWNv cmRfY2hlY2tfaW5zbl9udW0gKDEpOworCisgIHJlY29yZF9yZWdjYWNoZSA9 IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworCisgIHJldCA9IGdkYmFyY2hf cHJvY2Vzc19yZWNvcmQgKGdkYmFyY2gsCisJCQkJcmVnY2FjaGVfcmVhZF9w YyAocmVjb3JkX3JlZ2NhY2hlKSk7CisgIGlmIChyZXQgPiAwKQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZDogaW5mZXJpb3IgcHJvZ3JhbSBzdG9w cGVkLiIpKTsKKyAgaWYgKHJldCA8IDApCisgICAgZXJyb3IgKF8oIlByb2Nl c3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikp OworCisgIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7CisKKyAg cmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7Cisg IHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9saXN0Owor ICByZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKworICBp ZiAocmVjb3JkX2luc25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYg cmVjb3JkX2luc25fbWF4X251bSkKKyAgICByZWNvcmRfbGlzdF9yZWxlYXNl X2ZpcnN0ICgpOworICBlbHNlCisgICAgcmVjb3JkX2luc25fbnVtKys7Cit9 CisKKy8qIFRoaW5ncyB0byBjbGVhbiB1cCBpZiB3ZSBlcnJvciBvciBRVUlU IG91dCBvZiBmdW5jdGlvbiB0aGF0IHNldAorICAgcmVjb3JkX2dkYl9vcGVy YXRpb25fZGlzYWJsZSAoaWUuIGNvbW1hbmQgdGhhdCBjYXVzZWQgdGFyZ2V0 X3dhaXQgdG8KKyAgIGJlIGNhbGxlZCkuICAqLworc3RhdGljIHZvaWQKK3Jl Y29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfY2xlYW51cHMgKHZvaWQgKmln bm9yZSkKK3sKKyAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9IDA7 Cit9CisKK3N0cnVjdCBjbGVhbnVwICoKK3JlY29yZF9nZGJfb3BlcmF0aW9u X2Rpc2FibGVfc2V0ICh2b2lkKQoreworICBzdHJ1Y3QgY2xlYW51cCAqb2xk X2NsZWFudXBzID0KKyAgICBtYWtlX2NsZWFudXAgKHJlY29yZF9nZGJfb3Bl cmF0aW9uX2Rpc2FibGVfY2xlYW51cHMsIDApOworICByZWNvcmRfZ2RiX29w ZXJhdGlvbl9kaXNhYmxlID0gMTsKKworICByZXR1cm4gb2xkX2NsZWFudXBz OworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX29wZW4gKGNoYXIgKm5hbWUs IGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IHRhcmdldF9vcHMgKnQ7CisK KyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX29wZW5cbiIp OworCisgIC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRfaGFzX2V4 ZWN1dGlvbikKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IHRoZSBw cm9ncmFtIGlzIG5vdCBiZWluZyBydW4uIikpOworICBpZiAobm9uX3N0b3Ap CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4ndCBk ZWJ1ZyBpbmZlcmlvciBpbiBub24tc3RvcCBtb2RlICIKKwkgICAgICIobm9u LXN0b3ApLiIpKTsKKyAgaWYgKHRhcmdldF9hc3luY19wZXJtaXR0ZWQpCisg ICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4ndCBkZWJ1 ZyBpbmZlcmlvciBpbiBhc3luY2hyb25vdXMgIgorCSAgICAgIm1vZGUgKHRh cmdldC1hc3luYykuIikpOworCisgIGlmICghZ2RiYXJjaF9wcm9jZXNzX3Jl Y29yZF9wIChjdXJyZW50X2dkYmFyY2gpKQorICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZDogdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGRvZXNuJ3Qg c3VwcG9ydCAiCisJICAgICAicmVjb3JkIGZ1bmN0aW9uLiIpKTsKKworICAv KiBDaGVjayBpZiByZWNvcmQgdGFyZ2V0IGlzIGFscmVhZHkgcnVubmluZy4g ICovCisgIGlmIChUQVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQpCisgICAgewor ICAgICAgaWYgKCFucXVlcnkKKwkgIChfKCJQcm9jZXNzIHJlY29yZCB0YXJn ZXQgYWxyZWFkeSBydW5uaW5nLCBkbyB5b3Ugd2FudCB0byBkZWxldGUgIgor CSAgICAgInRoZSBvbGQgcmVjb3JkIGxvZz8iKSkpCisJcmV0dXJuOworICAg IH0KKworICAvKiBTZXQgdGhlIGJlbmVhdGggZnVuY3Rpb24gcG9pbnRlcnMu ICAqLworICBmb3IgKHQgPSBjdXJyZW50X3RhcmdldC5iZW5lYXRoOyB0ICE9 IE5VTEw7IHQgPSB0LT5iZW5lYXRoKQorICAgIHsKKyAgICAgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgICAgICB7CisJICByZWNvcmRf YmVuZWF0aF90b19yZXN1bWUgPSB0LT50b19yZXN1bWU7CisJICByZWNvcmRf YmVuZWF0aF90b19yZXN1bWVfb3BzID0gdDsKKyAgICAgICAgfQorICAgICAg aWYgKCFyZWNvcmRfYmVuZWF0aF90b193YWl0KQorICAgICAgICB7CisJICBy ZWNvcmRfYmVuZWF0aF90b193YWl0ID0gdC0+dG9fd2FpdDsKKwkgIHJlY29y ZF9iZW5lYXRoX3RvX3dhaXRfb3BzID0gdDsKKyAgICAgICAgfQorICAgICAg aWYgKCFyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMpCisgICAg ICAgIHsKKwkgIHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycyA9 IHQtPnRvX3N0b3JlX3JlZ2lzdGVyczsKKwkgIHJlY29yZF9iZW5lYXRoX3Rv X3N0b3JlX3JlZ2lzdGVyc19vcHMgPSB0OworICAgICAgICB9CisgICAgICBp ZiAoIXJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCkKKyAgICAgICAg eworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsID0gdC0+dG9f eGZlcl9wYXJ0aWFsOworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0 aWFsX29wcyA9IHQ7CisgICAgICAgIH0KKyAgICAgIGlmICghcmVjb3JkX2Jl bmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQpCisJcmVjb3JkX2JlbmVhdGhf dG9faW5zZXJ0X2JyZWFrcG9pbnQgPSB0LT50b19pbnNlcnRfYnJlYWtwb2lu dDsKKyAgICAgIGlmICghcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFr cG9pbnQpCisJcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFrcG9pbnQg PSB0LT50b19yZW1vdmVfYnJlYWtwb2ludDsKKyAgICB9CisgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgIGVycm9yIChfKCJQcm9jZXNz IHJlY29yZCBjYW4ndCBnZXQgdG9fcmVzdW1lLiIpKTsKKyAgaWYgKCFyZWNv cmRfYmVuZWF0aF90b193YWl0KQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJl Y29yZCBjYW4ndCBnZXQgdG9fd2FpdC4iKSk7CisgIGlmICghcmVjb3JkX2Jl bmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzKQorICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fc3RvcmVfcmVnaXN0ZXJzLiIpKTsK KyAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwpCisgICAg ZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbid0IGdldCB0b194ZmVyX3Bh cnRpYWwuIikpOworICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9i cmVha3BvaW50KQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW4n dCBnZXQgdG9faW5zZXJ0X2JyZWFrcG9pbnQuIikpOworICBpZiAoIXJlY29y ZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50KQorICAgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fcmVtb3ZlX2JyZWFrcG9p bnQuIikpOworCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisKKyAg LyogUmVzZXQgKi8KKyAgcmVjb3JkX2luc25fbnVtID0gMDsKKyAgcmVjb3Jk X2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworICByZWNvcmRfbGlzdC0+bmV4dCA9 IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfY2xvc2UgKGludCBx dWl0dGluZykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVj b3JkX2Nsb3NlXG4iKTsKKworICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNv cmRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfcmVzdW1lIChz dHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBwdGlkX3QgcHRpZCwgaW50IHN0ZXAs CisgICAgICAgICAgICAgICBlbnVtIHRhcmdldF9zaWduYWwgc2lnZ25hbCkK K3sKKyAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gc3RlcDsKKyAgcmVjb3JkX3Jl c3VtZV9zaWdnbmFsID0gc2lnZ25hbDsKKworICBpZiAoIVJFQ09SRF9JU19S RVBMQVkpCisgICAgeworICAgICAgcmVjb3JkX21lc3NhZ2UgKGN1cnJlbnRf Z2RiYXJjaCk7CisgICAgICByZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgKHJl Y29yZF9iZW5lYXRoX3RvX3Jlc3VtZV9vcHMsIHB0aWQsIDEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2duYWwpOworICAgIH0KK30K Kworc3RhdGljIHZvaWQKK3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25v KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBnZXQgYSBzaWdu YWxcbiIpOworCisgIHJlY29yZF9yZXN1bWVfc3RlcCA9IDE7CisgIHJlY29y ZF9nZXRfc2lnID0gMTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF93YWl0 X2NsZWFudXBzICh2b2lkICppZ25vcmUpCit7CisgIGlmIChleGVjdXRpb25f ZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKyAgICB7CisgICAgICBpZiAo cmVjb3JkX2xpc3QtPm5leHQpCisJcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlz dC0+bmV4dDsKKyAgICB9CisgIGVsc2UKKyAgICByZWNvcmRfbGlzdCA9IHJl Y29yZF9saXN0LT5wcmV2OworCisgIHNldF9leGVjdXRpbmcgKGluZmVyaW9y X3B0aWQsIDApOworICByZWNvcmRfbm9ybWFsX3N0b3AgKCk7Cit9CisKKy8q IHJlY29yZF93YWl0CisgICBJbiByZXBsYXkgbW9kZSwgdGhpcyBmdW5jdGlv biBleGFtaW5lcyB0aGUgcmVjb3JkZWQgbG9nIGFuZAorICAgZGV0ZXJtaW5l cyB3aGVyZSB0byBzdG9wLiAgKi8KKworc3RhdGljIHB0aWRfdAorcmVjb3Jk X3dhaXQgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsCisgICAgICAgICAgICAg IHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1 cykKK3sKKyAgc3RydWN0IGNsZWFudXAgKnNldF9jbGVhbnVwcyA9IHJlY29y ZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOworCisgIGlmIChyZWNv cmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfd2FpdCAiCisJCQkicmVj b3JkX3Jlc3VtZV9zdGVwID0gJWRcbiIsCisJCQlyZWNvcmRfcmVzdW1lX3N0 ZXApOworCisgIGlmICghUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAg ICBpZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQorCXsKKwkgIC8qIFRoaXMgaXMg YSBzaW5nbGUgc3RlcC4gICovCisJICByZXR1cm4gcmVjb3JkX2JlbmVhdGhf dG9fd2FpdCAocmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwdGlkLCBzdGF0dXMpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAo cmVjb3JkX3Jlc3VtZV9zdGVwKQorCSAgICB7CisJICAgICAgLyogVGhpcyBp cyBhIHNpbmdsZSBzdGVwLiAgKi8KKwkgICAgICByZXR1cm4gcmVjb3JkX2Jl bmVhdGhfdG9fd2FpdCAocmVjb3JkX2JlbmVhdGhfdG9fd2FpdF9vcHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRpZCwgc3RhdHVzKTsKKwkgICAgfQorCSAgZWxzZQor CSAgICB7CisJICAgICAgLyogVGhpcyBpcyBub3QgYSBzaW5nbGUgc3RlcC4g ICovCisJICAgICAgcHRpZF90IHJldDsKKwkgICAgICBpbnQgaXNfYnJlYWtw b2ludCA9IDE7CisJICAgICAgQ09SRV9BRERSIHBjID0gMDsKKwkgICAgICBp bnQgcGNfaXNfcmVhZCA9IDA7CisJICAgICAgc3RydWN0IGJwX2xvY2F0aW9u ICpibDsKKwkgICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYjsKKworCSAgICAg IGRvCisJCXsKKwkJICByZXQgPSByZWNvcmRfYmVuZWF0aF90b193YWl0IChy ZWNvcmRfYmVuZWF0aF90b193YWl0X29wcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 aWQsIHN0YXR1cyk7CisKKwkJICBpZiAoc3RhdHVzLT5raW5kID09IFRBUkdF VF9XQUlUS0lORF9TVE9QUEVECisJCSAgICAgICYmIHN0YXR1cy0+dmFsdWUu c2lnID09IFRBUkdFVF9TSUdOQUxfVFJBUCkKKwkJICAgIHsKKwkJICAgICAg LyogQ2hlY2sgaWYgdGhlcmUgaXMgYSBicmVha3BvaW50LiAgKi8KKwkJICAg ICAgcGNfaXNfcmVhZCA9IDA7CisJCSAgICAgIHJlZ2lzdGVyc19jaGFuZ2Vk ICgpOworCQkgICAgICBmb3IgKGJsID0gYnBfbG9jYXRpb25fY2hhaW47IGJs OyBibCA9IGJsLT5nbG9iYWxfbmV4dCkKKwkJCXsKKwkJCSAgYiA9IGJsLT5v d25lcjsKKwkJCSAgZ2RiX2Fzc2VydCAoYik7CisJCQkgIGlmIChiLT5lbmFi bGVfc3RhdGUgIT0gYnBfZW5hYmxlZAorCQkJICAgICAgJiYgYi0+ZW5hYmxl X3N0YXRlICE9IGJwX3Blcm1hbmVudCkKKwkJCSAgICBjb250aW51ZTsKKwkJ CSAgaWYgKCFwY19pc19yZWFkKQorCQkJICAgIHsKKwkJCSAgICAgIHBjID0K KwkJCQlyZWdjYWNoZV9yZWFkX3BjIChnZXRfdGhyZWFkX3JlZ2NhY2hlIChy ZXQpKTsKKwkJCSAgICAgIHBjX2lzX3JlYWQgPSAxOworCQkJICAgIH0KKwkJ CSAgc3dpdGNoIChiLT50eXBlKQorCQkJICAgIHsKKwkJCSAgICBkZWZhdWx0 OgorCQkJICAgICAgaWYgKGJsLT5hZGRyZXNzID09IHBjKQorCQkJCWdvdG8g YnJlYWtwb2ludDsKKwkJCSAgICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBi cF93YXRjaHBvaW50OgorCQkJICAgICAgLyogWFhYIHRlYXdhdGVyOiBJIHN0 aWxsIG5vdCB2ZXJ5IGNsZWFyIGhvdyB0bworCQkJCSBkZWFsIHdpdGggaXQu ICAqLworCQkJICAgICAgZ290byBicmVha3BvaW50OworCQkJICAgICAgYnJl YWs7CisKKwkJCSAgICBjYXNlIGJwX2NhdGNocG9pbnQ6CisJCQkgICAgICBn ZGJfYXNzZXJ0IChiLT5vcHMgIT0gTlVMTAorCQkJCQkgICYmIGItPm9wcy0+ YnJlYWtwb2ludF9oaXQgIT0gTlVMTCk7CisJCQkgICAgICBpZiAoYi0+b3Bz LT5icmVha3BvaW50X2hpdCAoYikpCisJCQkJZ290byBicmVha3BvaW50Owor CQkJICAgICAgYnJlYWs7CisKKwkJCSAgICBjYXNlIGJwX2hhcmR3YXJlX3dh dGNocG9pbnQ6CisJCQkgICAgY2FzZSBicF9yZWFkX3dhdGNocG9pbnQ6CisJ CQkgICAgY2FzZSBicF9hY2Nlc3Nfd2F0Y2hwb2ludDoKKwkJCSAgICAgIGlm IChTVE9QUEVEX0JZX1dBVENIUE9JTlQgKDApKQorCQkJCWdvdG8gYnJlYWtw b2ludDsKKwkJCSAgICAgIGJyZWFrOworCQkJICAgIH0KKwkJCX0KKworCQkg ICAgICAvKiBUaGVyZSBpcyBub3QgYSBicmVha3BvaW50LiAgKi8KKwkJICAg ICAgcmVjb3JkX21lc3NhZ2UgKGN1cnJlbnRfZ2RiYXJjaCk7CisJCSAgICAg IHJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZSAocmVjb3JkX2JlbmVhdGhfdG9f cmVzdW1lX29wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHB0aWQsIDEsCisJCQkJCQlyZWNvcmRfcmVzdW1l X3NpZ2duYWwpOworCQkgICAgICBjb250aW51ZTsKKwkJICAgIH0KKworCQkg IGlzX2JyZWFrcG9pbnQgPSAwOworCisJCWJyZWFrcG9pbnQ6CisJCSAgLyog QWRkIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayB0byBwYyBiZWNhdXNl IGdkYiB3aWxsCisJCSAgICAgZXhwZWN0IHRoZSBwYyB0byBiZSBhdCBhZGRy ZXNzIHBsdXMgZGVjcl9wY19hZnRlcl9icmVhaworCQkgICAgIHdoZW4gdGhl IGluZmVyaW9yIHN0b3BzIGF0IGEgYnJlYWtwb2ludC4gICovCisJCSAgaWYg KGlzX2JyZWFrcG9pbnQpCisJCSAgICB7CisJCSAgICAgIENPUkVfQUREUiBk ZWNyX3BjX2FmdGVyX2JyZWFrID0KKwkJCWdkYmFyY2hfZGVjcl9wY19hZnRl cl9icmVhayAoY3VycmVudF9nZGJhcmNoKTsKKwkJICAgICAgaWYgKGRlY3Jf cGNfYWZ0ZXJfYnJlYWspCisJCQl7CisJCQkgIGlmICghcGNfaXNfcmVhZCkK KwkJCSAgICBwYyA9CisJCQkgICAgICByZWdjYWNoZV9yZWFkX3BjIChnZXRf dGhyZWFkX3JlZ2NhY2hlIChyZXQpKTsKKwkJCSAgcmVnY2FjaGVfd3JpdGVf cGMgKGdldF90aHJlYWRfcmVnY2FjaGUgKHJldCksCisJCQkJCSAgICAgcGMg KyBkZWNyX3BjX2FmdGVyX2JyZWFrKTsKKwkJCX0KKwkJICAgIH0KKworCQkg IGJyZWFrOworCQl9CisJICAgICAgd2hpbGUgKDEpOworCisJICAgICAgcmV0 dXJuIHJldDsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICB7Cisg ICAgICBpbnQgbmVlZF9kYXNtID0gMDsKKyAgICAgIHN0cnVjdCByZWdjYWNo ZSAqcmVnY2FjaGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKyAgICAg IGludCBjb250aW51ZV9mbGFnID0gMTsKKyAgICAgIGludCBmaXJzdF9yZWNv cmRfZW5kID0gMTsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51 cHMgPSBtYWtlX2NsZWFudXAgKHJlY29yZF93YWl0X2NsZWFudXBzLCAwKTsK KyAgICAgIENPUkVfQUREUiB0bXBfcGM7CisKKyAgICAgIHN0YXR1cy0+a2lu ZCA9IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVEOworCisgICAgICAvKiBDaGVj ayBicmVha3BvaW50IHdoZW4gZm9yd2FyZCBleGVjdXRlLiAgKi8KKyAgICAg IGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCkKKwl7 CisJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7CisJ ICBpZiAoYnJlYWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHRtcF9wYykpCisJ ICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2RlYnVnKQorCQlmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogYnJlYWsgYXQgMHglcy5cbiIsCisJCQkJICAgIHBhZGRyX256ICh0bXBf cGMpKTsKKwkgICAgICBpZiAoZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFr IChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKQorCQkgICYmICFyZWNv cmRfcmVzdW1lX3N0ZXApCisJCXJlZ2NhY2hlX3dyaXRlX3BjIChyZWdjYWNo ZSwKKwkJCQkgICB0bXBfcGMgKworCQkJCSAgIGdkYmFyY2hfZGVjcl9wY19h ZnRlcl9icmVhaworCQkJCSAgIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2Fj aGUpKSk7CisJICAgICAgZ290byByZXBsYXlfb3V0OworCSAgICB9CisJfQor CisgICAgICByZWNvcmRfZ2V0X3NpZyA9IDA7CisgICAgICBzaWduYWwgKFNJ R0lOVCwgcmVjb3JkX3NpZ19oYW5kbGVyKTsKKyAgICAgIC8qIElmIEdEQiBp cyBpbiB0ZXJtaW5hbF9pbmZlcmlvciBtb2RlLCBpdCB3aWxsIG5vdCBnZXQg dGhlIHNpZ25hbC4KKyAgICAgICAgIEFuZCBpbiBHREIgcmVwbGF5IG1vZGUs IEdEQiBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gdGVybWluYWxfaW5mZXJpb3IK KyAgICAgICAgIG1vZGUsIGJlY2F1c2UgaW5mZXJpb3Igd2lsbCBub3QgZXhl Y3V0ZWQuCisgICAgICAgICBUaGVuIHNldCBpdCB0byB0ZXJtaW5hbF9vdXJz IHRvIG1ha2UgR0RCIGdldCB0aGUgc2lnbmFsLiAgKi8KKyAgICAgIHRhcmdl dF90ZXJtaW5hbF9vdXJzICgpOworCisgICAgICAvKiBJbiBFWEVDX0ZPUldB UkQgbW9kZSwgcmVjb3JkX2xpc3QgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHBy ZXYKKyAgICAgICAgIGluc3RydWN0aW9uLiAgKi8KKyAgICAgIGlmIChleGVj dXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCAmJiByZWNvcmRfbGlz dC0+bmV4dCkKKwlyZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5uZXh0Owor CisgICAgICAvKiBMb29wIG92ZXIgdGhlIHJlY29yZF9saXN0LCBsb29raW5n IGZvciB0aGUgbmV4dCBwbGFjZSB0bworCSBzdG9wLiAgKi8KKyAgICAgIGRv CisJeworCSAgLyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5kIG9mIGxv Zy4gICovCisJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JF VkVSU0UKKwkgICAgICAmJiByZWNvcmRfbGlzdCA9PSAmcmVjb3JkX2ZpcnN0 KQorCSAgICB7CisJICAgICAgLyogSGl0IGJlZ2lubmluZyBvZiByZWNvcmQg bG9nIGluIHJldmVyc2UuICAqLworCSAgICAgIHN0YXR1cy0+a2luZCA9IFRB UkdFVF9XQUlUS0lORF9OT19ISVNUT1JZOworCSAgICAgIGJyZWFrOworCSAg ICB9CisJICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiAhPSBFWEVDX1JFVkVS U0UgJiYgIXJlY29yZF9saXN0LT5uZXh0KQorCSAgICB7CisJICAgICAgLyog SGl0IGVuZCBvZiByZWNvcmQgbG9nIGdvaW5nIGZvcndhcmQuICAqLworCSAg ICAgIHN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9OT19ISVNUT1JZ OworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIFNldCBwdGlkLCBy ZWdpc3RlciBhbmQgbWVtb3J5IGFjY29yZGluZyB0byByZWNvcmRfbGlzdC4g ICovCisJICBpZiAocmVjb3JkX2xpc3QtPnR5cGUgPT0gcmVjb3JkX3JlZykK KwkgICAgeworCSAgICAgIC8qIHJlZyAqLworCSAgICAgIGdkYl9ieXRlIHJl Z1tNQVhfUkVHSVNURVJfU0laRV07CisJICAgICAgaWYgKHJlY29yZF9kZWJ1 ZyA+IDEpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJ CQkgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfcmVnICVzIHRvICIKKwkJ CQkgICAgImluZmVyaW9yIG51bSA9ICVkLlxuIiwKKwkJCQkgICAgaG9zdF9h ZGRyZXNzX3RvX3N0cmluZyAocmVjb3JkX2xpc3QpLAorCQkJCSAgICByZWNv cmRfbGlzdC0+dS5yZWcubnVtKTsKKwkgICAgICByZWdjYWNoZV9jb29rZWRf cmVhZCAocmVnY2FjaGUsIHJlY29yZF9saXN0LT51LnJlZy5udW0sIHJlZyk7 CisJICAgICAgcmVnY2FjaGVfY29va2VkX3dyaXRlIChyZWdjYWNoZSwgcmVj b3JkX2xpc3QtPnUucmVnLm51bSwKKwkJCQkgICAgIHJlY29yZF9saXN0LT51 LnJlZy52YWwpOworCSAgICAgIG1lbWNweSAocmVjb3JkX2xpc3QtPnUucmVn LnZhbCwgcmVnLCBNQVhfUkVHSVNURVJfU0laRSk7CisJICAgIH0KKwkgIGVs c2UgaWYgKHJlY29yZF9saXN0LT50eXBlID09IHJlY29yZF9tZW0pCisJICAg IHsKKwkgICAgICAvKiBtZW0gKi8KKwkgICAgICBnZGJfYnl0ZSAqbWVtID0g YWxsb2NhIChyZWNvcmRfbGlzdC0+dS5tZW0ubGVuKTsKKwkgICAgICBpZiAo cmVjb3JkX2RlYnVnID4gMSkKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9tZW0g JXMgdG8gIgorCQkJCSAgICAiaW5mZXJpb3IgYWRkciA9IDB4JXMgbGVuID0g JWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWNv cmRfbGlzdCksCisJCQkJICAgIHBhZGRyX256IChyZWNvcmRfbGlzdC0+dS5t ZW0uYWRkciksCisJCQkJICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOwor CisJICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQorCQkgIChyZWNvcmRf bGlzdC0+dS5tZW0uYWRkciwgbWVtLCByZWNvcmRfbGlzdC0+dS5tZW0ubGVu KSkKKwkJZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n IG1lbW9yeSBhdCAiCisJCQkgImFkZHIgPSAweCVzIGxlbiA9ICVkLiIpLAor CQkgICAgICAgcGFkZHJfbnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwK KwkJICAgICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCisJICAgICAg aWYgKHRhcmdldF93cml0ZV9tZW1vcnkKKwkJICAocmVjb3JkX2xpc3QtPnUu bWVtLmFkZHIsIHJlY29yZF9saXN0LT51Lm1lbS52YWwsCisJCSAgIHJlY29y ZF9saXN0LT51Lm1lbS5sZW4pKQorCQllcnJvciAoXworCQkgICAgICAgKCJQ cm9jZXNzIHJlY29yZDogZXJyb3Igd3JpdGluZyBtZW1vcnkgYXQgIgorCQkJ ImFkZHIgPSAweCVzIGxlbiA9ICVkLiIpLAorCQkgICAgICAgcGFkZHJfbnog KHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJICAgICAgIHJlY29yZF9s aXN0LT51Lm1lbS5sZW4pOworCisJICAgICAgbWVtY3B5IChyZWNvcmRfbGlz dC0+dS5tZW0udmFsLCBtZW0sIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOwor CSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2Rl YnVnID4gMSkKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9lbmQgJXMgdG8gIgor CQkJCSAgICAiaW5mZXJpb3IgbmVlZF9kYXNtID0gJWQuXG4iLAorCQkJCSAg ICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWNvcmRfbGlzdCksCisJCQkJ ICAgIHJlY29yZF9saXN0LT51Lm5lZWRfZGFzbSk7CisKKwkgICAgICBpZiAo ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX0ZPUldBUkQpCisJCW5lZWRf ZGFzbSA9IHJlY29yZF9saXN0LT51Lm5lZWRfZGFzbTsKKwkgICAgICBpZiAo bmVlZF9kYXNtKQorCQlnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkX2Rhc20gKGN1 cnJlbnRfZ2RiYXJjaCk7CisKKwkgICAgICBpZiAoZmlyc3RfcmVjb3JkX2Vu ZCAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJ eworCQkgIC8qIFdoZW4gcmV2ZXJzZSBleGN1dGUsIHRoZSBmaXJzdCByZWNv cmRfZW5kIGlzIHRoZSBwYXJ0IG9mCisJCSAgICAgY3VycmVudCBpbnN0cnVj dGlvbi4gICovCisJCSAgZmlyc3RfcmVjb3JkX2VuZCA9IDA7CisJCX0KKwkg ICAgICBlbHNlCisJCXsKKwkJICAvKiBJbiBFWEVDX1JFVkVSU0UgbW9kZSwg dGhpcyBpcyB0aGUgcmVjb3JkX2VuZCBvZiBwcmV2CisJCSAgICAgaW5zdHJ1 Y3Rpb24uCisJCSAgICAgSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHRoaXMgaXMg dGhlIHJlY29yZF9lbmQgb2YgY3VycmVudAorCQkgICAgIGluc3RydWN0aW9u LiAgKi8KKwkJICAvKiBzdGVwICovCisJCSAgaWYgKHJlY29yZF9yZXN1bWVf c3RlcCkKKwkJICAgIHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEp CisJCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAg ICAiUHJvY2VzcyByZWNvcmQ6IHN0ZXAuXG4iKTsKKwkJICAgICAgY29udGlu dWVfZmxhZyA9IDA7CisJCSAgICB9CisKKwkJICAvKiBjaGVjayBicmVha3Bv aW50ICovCisJCSAgdG1wX3BjID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2Fj aGUpOworCQkgIGlmIChicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAodG1w X3BjKSkKKwkJICAgIHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJ CWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQ cm9jZXNzIHJlY29yZDogYnJlYWsgIgorCQkJCQkgICAgImF0IDB4JXMuXG4i LAorCQkJCQkgICAgcGFkZHJfbnogKHRtcF9wYykpOworCQkgICAgICBpZiAo Z2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIChnZXRfcmVnY2FjaGVfYXJj aCAocmVnY2FjaGUpKQorCQkJICAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09 IEVYRUNfRk9SV0FSRAorCQkJICAmJiAhcmVjb3JkX3Jlc3VtZV9zdGVwKQor CQkJcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCQkgICB0bXBf cGMgKworCQkJCQkgICBnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJ CQkJICAgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsKKwkJICAg ICAgY29udGludWVfZmxhZyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgICBp ZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJCW5l ZWRfZGFzbSA9IHJlY29yZF9saXN0LT51Lm5lZWRfZGFzbTsKKwkgICAgfQor CituZXh0OgorCSAgaWYgKGNvbnRpbnVlX2ZsYWcpCisJICAgIHsKKwkgICAg ICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJ CXsKKwkJICBpZiAocmVjb3JkX2xpc3QtPnByZXYpCisJCSAgICByZWNvcmRf bGlzdCA9IHJlY29yZF9saXN0LT5wcmV2OworCQl9CisJICAgICAgZWxzZQor CQl7CisJCSAgaWYgKHJlY29yZF9saXN0LT5uZXh0KQorCQkgICAgcmVjb3Jk X2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsKKwkJfQorCSAgICB9CisJfQor ICAgICAgd2hpbGUgKGNvbnRpbnVlX2ZsYWcpOworCisgICAgICBzaWduYWwg KFNJR0lOVCwgaGFuZGxlX3NpZ2ludCk7CisKK3JlcGxheV9vdXQ6CisgICAg ICBpZiAocmVjb3JkX2dldF9zaWcpCisJc3RhdHVzLT52YWx1ZS5zaWcgPSBU QVJHRVRfU0lHTkFMX0lOVDsKKyAgICAgIGVsc2UKKwlzdGF0dXMtPnZhbHVl LnNpZyA9IFRBUkdFVF9TSUdOQUxfVFJBUDsKKworICAgICAgZGlzY2FyZF9j bGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKyAgICB9CisKKyAgZG9fY2xlYW51 cHMgKHNldF9jbGVhbnVwcyk7CisgIHJldHVybiBpbmZlcmlvcl9wdGlkOwor fQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2Rpc2Nvbm5lY3QgKHN0cnVjdCB0 YXJnZXRfb3BzICp0YXJnZXQsIGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkK K3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Rpc2Nv bm5lY3RcbiIpOworCisgIHVucHVzaF90YXJnZXQgKCZyZWNvcmRfb3BzKTsK KyAgdGFyZ2V0X2Rpc2Nvbm5lY3QgKGFyZ3MsIGZyb21fdHR5KTsKK30KKwor c3RhdGljIHZvaWQKK3JlY29yZF9kZXRhY2ggKHN0cnVjdCB0YXJnZXRfb3Bz ICpvcHMsIGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2RldGFjaFxuIik7CisKKyAg dW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfZGV0YWNo IChhcmdzLCBmcm9tX3R0eSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRf bW91cm5faW5mZXJpb3IgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMpCit7Cisg IGlmIChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6ICIKKwkJCSAgICAgICAgICAg ICJyZWNvcmRfbW91cm5faW5mZXJpb3JcbiIpOworCisgIHVucHVzaF90YXJn ZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0X21vdXJuX2luZmVyaW9yICgp OworfQorCisvKiBDbG9zZSBwcm9jZXNzIHJlY29yZCB0YXJnZXQgYmVmb3Jl IGtpbGxpbmcgdGhlIGluZmVyaW9yIHByb2Nlc3MuICAqLworc3RhdGljIHZv aWQKK3JlY29yZF9raWxsICh2b2lkKQoreworICBpZiAocmVjb3JkX2RlYnVn KQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nl c3MgcmVjb3JkOiByZWNvcmRfa2lsbFxuIik7CisKKyAgdW5wdXNoX3Rhcmdl dCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfa2lsbCAoKTsKK30KKworLyog UmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgKGJ5IHVzZXIgb3IgYnkgR0RCKSB0 byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KK3N0YXRpYyB2b2lkCity ZWNvcmRfcmVnaXN0ZXJzX2NoYW5nZSAoc3RydWN0IHJlZ2NhY2hlICpyZWdj YWNoZSwgaW50IHJlZ251bSkKK3sKKyAgLyogQ2hlY2sgcmVjb3JkX2luc25f bnVtLiAgKi8KKyAgcmVjb3JkX2NoZWNrX2luc25fbnVtICgwKTsKKworICBy ZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxMOworICByZWNvcmRfYXJjaF9s aXN0X3RhaWwgPSBOVUxMOworCisgIHJlY29yZF9yZWdjYWNoZSA9IGdldF9j dXJyZW50X3JlZ2NhY2hlICgpOworCisgIGlmIChyZWdudW0gPCAwKQorICAg IHsKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IGdkYmFy Y2hfbnVtX3JlZ3MgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpOyBp KyspCisJeworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaSkp CisJICAgIHsKKwkgICAgICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRf YXJjaF9saXN0X3RhaWwpOworCSAgICAgIGVycm9yIChfKCJQcm9jZXNzIHJl Y29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24gbG9nLiIpKTsKKwkg ICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0pKQorCXsKKwkgIHJlY29y ZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBl cnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhl Y3V0aW9uIGxvZy4iKSk7CisJfQorICAgIH0KKyAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX2VuZCAoMCkpCisgICAgeworICAgICAgcmVjb3JkX2xpc3Rf cmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKyAgICAgIGVycm9y IChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRp b24gbG9nLiIpKTsKKyAgICB9CisgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVj b3JkX2FyY2hfbGlzdF9oZWFkOworICByZWNvcmRfYXJjaF9saXN0X2hlYWQt PnByZXYgPSByZWNvcmRfbGlzdDsKKyAgcmVjb3JkX2xpc3QgPSByZWNvcmRf YXJjaF9saXN0X3RhaWw7CisKKyAgaWYgKHJlY29yZF9pbnNuX251bSA9PSBy ZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisg ICAgcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgZWxzZQorICAg IHJlY29yZF9pbnNuX251bSsrOworfQorCitzdGF0aWMgdm9pZAorcmVjb3Jk X3N0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGludCByZWdubykKK3sKKyAgaWYgKCFyZWNvcmRfZ2RiX29wZXJhdGlv bl9kaXNhYmxlKQorICAgIHsKKyAgICAgIGlmIChSRUNPUkRfSVNfUkVQTEFZ KQorCXsKKwkgIGludCBuOworCSAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVh bnVwczsKKworCSAgLyogTGV0IHVzZXIgY2hvb3NlIGlmIGhlIHdhbnRzIHRv IHdyaXRlIHJlZ2lzdGVyIG9yIG5vdC4gICovCisJICBpZiAocmVnbm8gPCAw KQorCSAgICBuID0KKwkgICAgICBucXVlcnkgKF8oIkJlY2F1c2UgR0RCIGlz IGluIHJlcGxheSBtb2RlLCBjaGFuZ2luZyB0aGUgIgorCQkJInZhbHVlIG9m IGEgcmVnaXN0ZXIgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gIgorCQkJImxv ZyB1bnVzYWJsZSBmcm9tIHRoaXMgcG9pbnQgb253YXJkLiAgIgorCQkJIkNo YW5nZSBhbGwgcmVnaXN0ZXJzPyIpKTsKKwkgIGVsc2UKKwkgICAgbiA9CisJ ICAgICAgbnF1ZXJ5IChfKCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9k ZSwgY2hhbmdpbmcgdGhlIHZhbHVlICIKKwkJCSJvZiBhIHJlZ2lzdGVyIHdp bGwgbWFrZSB0aGUgZXhlY3V0aW9uIGxvZyB1bnVzYWJsZSAiCisJCQkiZnJv bSB0aGlzIHBvaW50IG9ud2FyZC4gIENoYW5nZSByZWdpc3RlciAlcz8iKSwK KwkJICAgICAgZ2RiYXJjaF9yZWdpc3Rlcl9uYW1lIChnZXRfcmVnY2FjaGVf YXJjaCAocmVnY2FjaGUpLAorCQkJCQkgICAgICAgcmVnbm8pKTsKKworCSAg aWYgKCFuKQorCSAgICB7CisJICAgICAgLyogSW52YWxpZGF0ZSB0aGUgdmFs dWUgb2YgcmVnY2FjaGUgdGhhdCB3YXMgc2V0IGluIGZ1bmN0aW9uCisJICAg ICAgICAgInJlZ2NhY2hlX3Jhd193cml0ZSIuICAqLworCSAgICAgIGlmIChy ZWdubyA8IDApCisJCXsKKwkJICBpbnQgaTsKKwkJICBmb3IgKGkgPSAwOwor CQkgICAgICAgaSA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdldF9yZWdjYWNoZV9h cmNoIChyZWdjYWNoZSkpOworCQkgICAgICAgaSsrKQorCQkgICAgcmVnY2Fj aGVfaW52YWxpZGF0ZSAocmVnY2FjaGUsIGkpOworCQl9CisJICAgICAgZWxz ZQorCQlyZWdjYWNoZV9pbnZhbGlkYXRlIChyZWdjYWNoZSwgcmVnbm8pOwor CisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbmNlbGVkIHRo ZSBvcGVyYXRpb24uIikpOworCSAgICB9CisKKwkgIC8qIERlc3Ryb3kgdGhl IHJlY29yZCBmcm9tIGhlcmUgZm9yd2FyZC4gICovCisJICByZWNvcmRfbGlz dF9yZWxlYXNlX25leHQgKCk7CisJfQorCisgICAgICByZWNvcmRfcmVnaXN0 ZXJzX2NoYW5nZSAocmVnY2FjaGUsIHJlZ25vKTsKKyAgICB9CisgIHJlY29y ZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycyAocmVjb3JkX2JlbmVhdGhf dG9fc3RvcmVfcmVnaXN0ZXJzX29wcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWdjYWNoZSwgcmVnbm8pOworfQorCisvKiBy ZWNvcmRfeGZlcl9wYXJ0aWFsIC0tIGJlaGF2aW9yIGlzIGNvbmRpdGlvbmFs IG9uIFJFQ09SRF9JU19SRVBMQVkuCisgICBJbiByZXBsYXkgbW9kZSwgd2Ug Y2Fubm90IHdyaXRlIG1lbW9yeSB1bmxlcyB3ZSBhcmUgd2lsbGluZyB0bwor ICAgaW52YWxpZGF0ZSB0aGUgcmVjb3JkL3JlcGxheSBsb2cgZnJvbSB0aGlz IHBvaW50IGZvcndhcmQuICAqLworCitzdGF0aWMgTE9OR0VTVAorcmVjb3Jk X3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgZW51bSB0 YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJICAgICBjb25zdCBjaGFyICphbm5l eCwgZ2RiX2J5dGUgKiByZWFkYnVmLAorCQkgICAgIGNvbnN0IGdkYl9ieXRl ICogd3JpdGVidWYsIFVMT05HRVNUIG9mZnNldCwgTE9OR0VTVCBsZW4pCit7 CisgIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZQorICAgICAg JiYgKG9iamVjdCA9PSBUQVJHRVRfT0JKRUNUX01FTU9SWQorCSAgfHwgb2Jq ZWN0ID09IFRBUkdFVF9PQkpFQ1RfUkFXX01FTU9SWSkgJiYgd3JpdGVidWYp CisgICAgeworICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAg LyogTGV0IHVzZXIgY2hvb3NlIGlmIGhlIHdhbnRzIHRvIHdyaXRlIG1lbW9y eSBvciBub3QuICAqLworCSAgaWYgKCFucXVlcnkgKF8oIkJlY2F1c2UgR0RC IGlzIGluIHJlcGxheSBtb2RlLCB3cml0aW5nIHRvIG1lbW9yeSAiCisJCSAg ICAgICAgICJ3aWxsIG1ha2UgdGhlIGV4ZWN1dGlvbiBsb2cgdW51c2FibGUg ZnJvbSB0aGlzICIKKwkJICAgICAgICAgInBvaW50IG9ud2FyZC4gIFdyaXRl IG1lbW9yeSBhdCBhZGRyZXNzIDB4JXM/IiksCisJCSAgICAgICBwYWRkcl9u eiAob2Zmc2V0KSkpCisJICAgIHJldHVybiAtMTsKKworCSAgLyogRGVzdHJv eSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8KKwkgIHJlY29y ZF9saXN0X3JlbGVhc2VfbmV4dCAoKTsKKwl9CisKKyAgICAgIC8qIENoZWNr IHJlY29yZF9pbnNuX251bSAqLworICAgICAgcmVjb3JkX2NoZWNrX2luc25f bnVtICgwKTsKKworICAgICAgLyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2Ug dG8gbGlzdCBhcyBhbiBpbnN0cnVjdGlvbi4gICovCisgICAgICByZWNvcmRf YXJjaF9saXN0X2hlYWQgPSBOVUxMOworICAgICAgcmVjb3JkX2FyY2hfbGlz dF90YWlsID0gTlVMTDsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKG9mZnNldCwgbGVuKSkKKwl7CisJICByZWNvcmRfbGlzdF9yZWxl YXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgaWYgKHJlY29yZF9k ZWJ1ZykKKwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCV8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkICIKKwkJ CQkgICJleGVjdXRpb24gbG9nLiIpKTsKKwkgIHJldHVybiAtMTsKKwl9Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5kICgwKSkKKwl7CisJ ICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwp OworCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkgICAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLAorCQkJCV8oIlByb2Nlc3MgcmVjb3JkOiBmYWls ZWQgdG8gcmVjb3JkICIKKwkJCQkgICJleGVjdXRpb24gbG9nLiIpKTsKKwkg IHJldHVybiAtMTsKKwl9CisgICAgICByZWNvcmRfbGlzdC0+bmV4dCA9IHJl Y29yZF9hcmNoX2xpc3RfaGVhZDsKKyAgICAgIHJlY29yZF9hcmNoX2xpc3Rf aGVhZC0+cHJldiA9IHJlY29yZF9saXN0OworICAgICAgcmVjb3JkX2xpc3Qg PSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisKKyAgICAgIGlmIChyZWNvcmRf aW5zbl9udW0gPT0gcmVjb3JkX2luc25fbWF4X251bSAmJiByZWNvcmRfaW5z bl9tYXhfbnVtKQorCXJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7Cisg ICAgICBlbHNlCisJcmVjb3JkX2luc25fbnVtKys7CisgICAgfQorCisgIHJl dHVybiByZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwgKHJlY29yZF9i ZW5lYXRoX3RvX3hmZXJfcGFydGlhbF9vcHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCwgYW5uZXgsIHJlYWRi dWYsIHdyaXRlYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZzZXQsIGxlbik7Cit9CisKKy8qIHJlY29yZF9pbnNl cnRfYnJlYWtwb2ludAorICAgcmVjb3JkX3JlbW92ZV9icmVha3BvaW50Cisg ICBCZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBSRUNPUkRfSVNfUkVQTEFZ LgorICAgV2Ugd2lsbCBub3QgYWN0dWFsbHkgaW5zZXJ0IG9yIHJlbW92ZSBi cmVha3BvaW50cyB3aGVuIHJlcGxheWluZywKKyAgIG5vciB3aGVuIHJlY29y ZGluZy4gICovCisKK3N0YXRpYyBpbnQKK3JlY29yZF9pbnNlcnRfYnJlYWtw b2ludCAoc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3QpCit7CisgIGlm ICghUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xl YW51cCAqb2xkX2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlz YWJsZV9zZXQgKCk7CisgICAgICBpbnQgcmV0ID0gcmVjb3JkX2JlbmVhdGhf dG9faW5zZXJ0X2JyZWFrcG9pbnQgKGJwX3RndCk7CisKKyAgICAgIGRvX2Ns ZWFudXBzIChvbGRfY2xlYW51cHMpOworCisgICAgICByZXR1cm4gcmV0Owor ICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVjb3Jk X3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKmJw X3RndCkKK3sKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQorICAgIHsKKyAg ICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHMgPSByZWNvcmRfZ2Ri X29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsKKyAgICAgIGludCByZXQgPSBy ZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCAoYnBfdGd0KTsK KworICAgICAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7CisKKyAgICAg IHJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50CityZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZSAodm9pZCkKK3sK KyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3JlY29yZF9v cHMgKHZvaWQpCit7CisgIHJlY29yZF9vcHMudG9fc2hvcnRuYW1lID0gInJl Y29yZCI7CisgIHJlY29yZF9vcHMudG9fbG9uZ25hbWUgPSAiUHJvY2VzcyBy ZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQiOworICByZWNvcmRfb3BzLnRvX2Rv YyA9CisgICAgIkxvZyBwcm9ncmFtIHdoaWxlIGV4ZWN1dGluZyBhbmQgcmVw bGF5IGV4ZWN1dGlvbiBmcm9tIGxvZy4iOworICByZWNvcmRfb3BzLnRvX29w ZW4gPSByZWNvcmRfb3BlbjsKKyAgcmVjb3JkX29wcy50b19jbG9zZSA9IHJl Y29yZF9jbG9zZTsKKyAgcmVjb3JkX29wcy50b19yZXN1bWUgPSByZWNvcmRf cmVzdW1lOworICByZWNvcmRfb3BzLnRvX3dhaXQgPSByZWNvcmRfd2FpdDsK KyAgcmVjb3JkX29wcy50b19kaXNjb25uZWN0ID0gcmVjb3JkX2Rpc2Nvbm5l Y3Q7CisgIHJlY29yZF9vcHMudG9fZGV0YWNoID0gcmVjb3JkX2RldGFjaDsK KyAgcmVjb3JkX29wcy50b19tb3Vybl9pbmZlcmlvciA9IHJlY29yZF9tb3Vy bl9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19raWxsID0gcmVjb3JkX2tp bGw7CisgIHJlY29yZF9vcHMudG9fY3JlYXRlX2luZmVyaW9yID0gZmluZF9k ZWZhdWx0X2NyZWF0ZV9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19zdG9y ZV9yZWdpc3RlcnMgPSByZWNvcmRfc3RvcmVfcmVnaXN0ZXJzOworICByZWNv cmRfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF94ZmVyX3BhcnRpYWw7 CisgIHJlY29yZF9vcHMudG9faW5zZXJ0X2JyZWFrcG9pbnQgPSByZWNvcmRf aW5zZXJ0X2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9fcmVtb3ZlX2Jy ZWFrcG9pbnQgPSByZWNvcmRfcmVtb3ZlX2JyZWFrcG9pbnQ7CisgIHJlY29y ZF9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29yZF9jYW5fZXhl Y3V0ZV9yZXZlcnNlOworICByZWNvcmRfb3BzLnRvX3N0cmF0dW0gPSByZWNv cmRfc3RyYXR1bTsKKyAgcmVjb3JkX29wcy50b19tYWdpYyA9IE9QU19NQUdJ QzsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcmVjb3JkX2RlYnVnIChzdHJ1 Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkgICBzdHJ1Y3Qg Y21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCit7Cisg IGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBwcm9j ZXNzIHJlY29yZCB0YXJnZXQgaXMgJXMuXG4iKSwKKwkJICAgIHZhbHVlKTsK K30KKworLyogY21kX3JlY29yZF9zdGFydCAtLSBhbGlhcyBmb3IgInRhcmdl dCByZWNvcmQiLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfc3Rh cnQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgZXhlY3V0ZV9j b21tYW5kICgidGFyZ2V0IHJlY29yZCIsIGZyb21fdHR5KTsKK30KKworLyog Y21kX3JlY29yZF9kZWxldGUgLS0gdHJ1bmNhdGUgdGhlIHJlY29yZCBsb2cg ZnJvbSB0aGUgcHJlc2VudCBwb2ludAorICAgb2YgcmVwbGF5IHVudGlsIHRo ZSBlbmQuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29yZF9kZWxldGUg KGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKFRBUkdFVF9J U19QUk9DRVNTX1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lT X1JFUExBWSkKKwl7CisJICBpZiAoIWZyb21fdHR5IHx8IHF1ZXJ5IChfKCJE ZWxldGUgdGhlIGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCAiCisJCSAg ICAgICAgICAgICAgICAgICAgImFuZCBiZWdpbiB0byByZWNvcmQgdGhlIHJ1 bm5pbmcgbWVzc2FnZSAiCisJCSAgICAgICAgICAgICAgICAgICAgImF0IGN1 cnJlbnQgUEM/IikpKQorCSAgICByZWNvcmRfbGlzdF9yZWxlYXNlX25leHQg KCk7CisJfQorICAgICAgZWxzZQorCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8o IkFscmVhZHkgYXQgZW5kIG9mIHJlY29yZCBsaXN0LlxuIikpOworCisgICAg fQorICBlbHNlCisgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3Mg cmVjb3JkIGlzIG5vdCBzdGFydGVkLlxuIikpOworfQorCisvKiBjbWRfcmVj b3JkX3N0b3AgLS0gaW1wbGVtZW50IHRoZSAic3RvcHJlY29yZCIgY29tbWFu ZC4gICovCisKK3N0YXRpYyB2b2lkCitjbWRfcmVjb3JkX3N0b3AgKGNoYXIg KmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKFRBUkdFVF9JU19QUk9D RVNTX1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAoIXJlY29yZF9saXN0IHx8 ICFmcm9tX3R0eSB8fCBxdWVyeSAoXygiRGVsZXRlIHJlY29yZGVkIGxvZyBh bmQgIgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAic3RvcCByZWNvcmRpbmc/IikpKQorCXVucHVzaF90YXJnZXQgKCZyZWNv cmRfb3BzKTsKKyAgICB9CisgIGVsc2UKKyAgICBwcmludGZfdW5maWx0ZXJl ZCAoXygiUHJvY2VzcyByZWNvcmQgaXMgbm90IHN0YXJ0ZWQuXG4iKSk7Cit9 CisKKy8qIHNldF9yZWNvcmRfaW5zbl9tYXhfbnVtIC0tIHNldCB1cHBlciBs aW1pdCBvZiByZWNvcmQgbG9nIHNpemUuICAqLworCitzdGF0aWMgdm9pZAor c2V0X3JlY29yZF9pbnNuX21heF9udW0gKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMpCit7CisgIGlmIChy ZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJlY29y ZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oIlJlY29yZCBpbnN0cnVjdGlvbnMgbnVtYmVyIGlzIGJpZ2dlciB0 aGFuICIKKwkJICAgICAgICAgICAicmVjb3JkIGluc3RydWN0aW9ucyBtYXgg bnVtYmVyLiAgQXV0byBkZWxldGUgIgorCQkgICAgICAgICAgICJ0aGUgZmly c3Qgb25lcz9cbiIpKTsKKworICAgICAgd2hpbGUgKHJlY29yZF9pbnNuX251 bSA+IHJlY29yZF9pbnNuX21heF9udW0pCisJcmVjb3JkX2xpc3RfcmVsZWFz ZV9maXJzdCAoKTsKKyAgICB9Cit9CisKKy8qIHNob3dfcmVjb3JkX2luc25f bnVtYmVyIC0tIHByaW50IHRoZSBjdXJyZW50IGluZGV4CisgICBpbnRvIHRo ZSByZWNvcmQgbG9nIChudW1iZXIgb2YgaW5zbnMgcmVjb3JkZWQgc28gZmFy KS4gICovCisKK3N0YXRpYyB2b2lkCitzaG93X3JlY29yZF9pbnNuX251bWJl ciAoY2hhciAqaWdub3JlLCBpbnQgZnJvbV90dHkpCit7CisgIHByaW50Zl91 bmZpbHRlcmVkIChfKCJSZWNvcmQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVk LlxuIiksCisJCSAgICAgcmVjb3JkX2luc25fbnVtKTsKK30KKwordm9pZAor X2luaXRpYWxpemVfcmVjb3JkICh2b2lkKQoreworICAvKiBJbml0IHJlY29y ZF9tYXNrYWxsLiAgKi8KKyAgaWYgKHNpZ2ZpbGxzZXQgKCZyZWNvcmRfbWFz a2FsbCkgPT0gLTEpCisgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiUHJvY2Vz cyByZWNvcmQ6IHNpZ2ZpbGxzZXQgZmFpbGVkIikpOworCisgIC8qIEluaXQg cmVjb3JkX2ZpcnN0LiAgKi8KKyAgcmVjb3JkX2ZpcnN0LnByZXYgPSBOVUxM OworICByZWNvcmRfZmlyc3QubmV4dCA9IE5VTEw7CisgIHJlY29yZF9maXJz dC50eXBlID0gcmVjb3JkX2VuZDsKKyAgcmVjb3JkX2ZpcnN0LnUubmVlZF9k YXNtID0gMDsKKworICBpbml0X3JlY29yZF9vcHMgKCk7CisgIGFkZF90YXJn ZXQgKCZyZWNvcmRfb3BzKTsKKworICBhZGRfc2V0c2hvd196aW50ZWdlcl9j bWQgKCJyZWNvcmQiLCBub19jbGFzcywgJnJlY29yZF9kZWJ1ZywKKwkJCSAg ICBfKCJTZXQgZGVidWdnaW5nIG9mIHJlY29yZC9yZXBsYXkgZmVhdHVyZS4i KSwKKwkJCSAgICBfKCJTaG93IGRlYnVnZ2luZyBvZiByZWNvcmQvcmVwbGF5 IGZlYXR1cmUuIiksCisJCQkgICAgXygiV2hlbiBlbmFibGVkLCBkZWJ1Z2dp bmcgb3V0cHV0IGZvciAiCisJCQkgICAgICAicmVjb3JkL3JlcGxheSBmZWF0 dXJlIGlzIGRpc3BsYXllZC4iKSwKKwkJCSAgICBOVUxMLCBzaG93X3JlY29y ZF9kZWJ1ZywgJnNldGRlYnVnbGlzdCwKKwkJCSAgICAmc2hvd2RlYnVnbGlz dCk7CisKKyAgYWRkX2NvbSAoInJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNt ZF9yZWNvcmRfc3RhcnQsCisJICAgXygiQWJicmV2aWF0ZWQgZm9ybSBvZiBc InRhcmdldCByZWNvcmRcIiBjb21tYW5kLiIpKTsKKworICBhZGRfY29tX2Fs aWFzICgicmVjIiwgInJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworCisg IC8qIFhYWDogSSB0cnkgdG8gdXNlIHNvbWUgc2ltcGxlIGNvbW1hbmRzIHN1 Y2ggYXMgImRpc2Nvbm5lY3QiIGFuZAorICAgICAiZGV0YWNoIiB0byBzdXBw b3J0IHRoaXMgZnVuY3Rpb25zLiAgQnV0IHRoZXNlIGNvbW1hbmRzIGFsbCBo YXZlCisgICAgIG90aGVyIGFmZmVjdCB0byBHREIgc3VjaCBhcyBjYWxsIGZ1 bmN0aW9uICJub19zaGFyZWRfbGlicmFyaWVzIi4KKyAgICAgU28gSSBhZGQg c3BlY2lhbCBjb21tYW5kcyB0byBHREIuICAqLworICBhZGRfY29tICgiZGVs cmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZF9kZWxldGUsCisJ ICAgXygiRGVsZXRlIHRoZSByZXN0IG9mIGV4ZWN1dGlvbiBsb2cgYW5kIHN0 YXJ0IHJlY29yZGluZyBpdCBhbmV3LiIpKTsKKyAgYWRkX2NvbV9hbGlhcyAo ImRyIiwgImRlbHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworICBhZGRf Y29tICgic3RvcHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNvcmRf c3RvcCwKKwkgICBfKCJTdG9wIHRoZSByZWNvcmQvcmVwbGF5IHRhcmdldC4i KSk7CisgIGFkZF9jb21fYWxpYXMgKCJzciIsICJzdG9wcmVjb3JkIiwgY2xh c3Nfb2JzY3VyZSwgMSk7CisKKyAgLyogUmVjb3JkIGluc3RydWN0aW9ucyBu dW1iZXIgbGltaXQgY29tbWFuZC4gICovCisgIGFkZF9zZXRzaG93X2Jvb2xl YW5fY21kICgicmVjb3JkLXN0b3AtYXQtbGltaXQiLCBub19jbGFzcywKKwkJ CSAgICAmcmVjb3JkX3N0b3BfYXRfbGltaXQsCisJCQkgICAgXygiU2V0IHdo ZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wIHdoZW4gIgorCQkJICAgICAgInJl Y29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwKKwkJCSAgICBf KCJTaG93IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wIHdoZW4gIgorCQkJ ICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwK KwkgICAgICAgICAgICAgICAgICAgIF8oIkVuYWJsZSBpcyBkZWZhdWx0IHZh bHVlLlxuIgorCSAgICAgICAgICAgICAgICAgICAgICAiV2hlbiBlbmFibGVk LCBpZiB0aGUgcmVjb3JkL3JlcGxheSBidWZmZXIgIgorCQkJICAgICAgImJl Y29tZXMgZnVsbCxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJhc2sgdXNlciB3aGF0IHRvIGRvLlxuIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIldoZW4gZGlzYWJsZWQsIGlmIHRoZSByZWNvcmQvcmVw bGF5IGJ1ZmZlciAiCisJCQkgICAgICAiYmVjb21lcyBmdWxsLFxuIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSBpdCBhbmQgc3Rh cnQgbmV3IHJlY29yZGluZy4iKSwKKwkJCSAgICBOVUxMLCBOVUxMLCAmc2V0 bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRkX3NldHNob3dfemludGVnZXJfY21k ICgicmVjb3JkLWluc24tbnVtYmVyLW1heCIsIG5vX2NsYXNzLAorCQkJICAg ICZyZWNvcmRfaW5zbl9tYXhfbnVtLAorCQkJICAgIF8oIlNldCByZWNvcmQv cmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwKKwkJCSAgICBfKCJTaG93IHJlY29y ZC9yZXBsYXkgYnVmZmVyIGxpbWl0LiIpLAorCQkJICAgIF8oIlNldCB0aGUg bWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGJlICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJzdG9yZWQgaW4gdGhlXG4iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjb3JkL3JlcGxheSBi dWZmZXIuICAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWmVy byBtZWFucyB1bmxpbWl0ZWQgKGRlZmF1bHQgMjAwMDAwKS4iKSwKKwkJCSAg ICBzZXRfcmVjb3JkX2luc25fbWF4X251bSwKKwkJCSAgICBOVUxMLCAmc2V0 bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRkX2luZm8gKCJyZWNvcmQtaW5zbi1u dW1iZXIiLCBzaG93X3JlY29yZF9pbnNuX251bWJlciwKKwkgICAgXygiU2hv dyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSAi CisJICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyLiIpKTsKK30KLS0tIC9k ZXYvbnVsbAorKysgYi9yZWNvcmQuaApAQCAtMCwwICsxLDg3IEBACisvKiBQ cm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBmb3IgR0RCLCB0aGUg R05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor I2lmbmRlZiBfUkVDT1JEX0hfCisjZGVmaW5lIF9SRUNPUkRfSF8KKworI2Rl ZmluZSBUQVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQgICBcCisgICAgIChjdXJy ZW50X3RhcmdldC5iZW5lYXRoID09ICZyZWNvcmRfb3BzKQorI2RlZmluZSBS RUNPUkRfSVNfUkVQTEFZIFwKKyAgICAgKHJlY29yZF9saXN0LT5uZXh0IHx8 IGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorCit0eXBl ZGVmIHN0cnVjdCByZWNvcmRfcmVnX3MKK3sKKyAgaW50IG51bTsKKyAgZ2Ri X2J5dGUgKnZhbDsKK30gcmVjb3JkX3JlZ190OworCit0eXBlZGVmIHN0cnVj dCByZWNvcmRfbWVtX3MKK3sKKyAgQ09SRV9BRERSIGFkZHI7CisgIGludCBs ZW47CisgIGdkYl9ieXRlICp2YWw7Cit9IHJlY29yZF9tZW1fdDsKKworZW51 bSByZWNvcmRfdHlwZQoreworICByZWNvcmRfZW5kID0gMCwKKyAgcmVjb3Jk X3JlZywKKyAgcmVjb3JkX21lbQorfTsKKworLyogVGhpcyBpcyB0aGUgY29y ZSBzdHJ1Y3Qgb2YgcmVjb3JkIGZ1bmN0aW9uLgorCisgICBBbiBlbnRpdHkg b2YgcmVjb3JkX3QgaXMgYSByZWNvcmQgb2YgdGhlIHZhbHVlIGNoYW5nZSBv ZiBhIHJlZ2lzdGVyCisgICAoInJlY29yZF9yZWciKSBvciBhIHBhcnQgb2Yg bWVtb3J5ICgicmVjb3JkX21lbSIpLiAgQW5kIGVhY2gKKyAgIGluc3RydWN0 aW9uIG11c3QgaGFzIGEgcmVjb3JkX3QgKCJyZWNvcmRfZW5kIikgdGhhdCBw b2ludHMgb3V0IHRoaXMKKyAgIGlzIHRoZSBsYXN0IHJlY29yZF90IG9mIHRo aXMgaW5zdHJ1Y3Rpb24uCisKKyAgIEVhY2ggcmVjb3JkX3QgaXMgbGlua2Vk IHRvICJyZWNvcmRfbGlzdCIgYnkgInByZXYiIGFuZCAibmV4dCIuCisgKi8K K3R5cGVkZWYgc3RydWN0IHJlY29yZF9zCit7CisgIHN0cnVjdCByZWNvcmRf cyAqcHJldjsKKyAgc3RydWN0IHJlY29yZF9zICpuZXh0OworICBlbnVtIHJl Y29yZF90eXBlIHR5cGU7CisgIHVuaW9uCisgIHsKKyAgICAvKiByZWcgKi8K KyAgICByZWNvcmRfcmVnX3QgcmVnOworICAgIC8qIG1lbSAqLworICAgIHJl Y29yZF9tZW1fdCBtZW07CisgICAgLyogZW5kICovCisgICAgaW50IG5lZWRf ZGFzbTsKKyAgfSB1OworfSByZWNvcmRfdDsKKworZXh0ZXJuIGludCByZWNv cmRfZGVidWc7CitleHRlcm4gcmVjb3JkX3QgKnJlY29yZF9saXN0OworZXh0 ZXJuIHJlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0X2hlYWQ7CitleHRlcm4g cmVjb3JkX3QgKnJlY29yZF9hcmNoX2xpc3RfdGFpbDsKK2V4dGVybiBzdHJ1 Y3QgcmVnY2FjaGUgKnJlY29yZF9yZWdjYWNoZTsKKworZXh0ZXJuIHN0cnVj dCB0YXJnZXRfb3BzIHJlY29yZF9vcHM7CisKK2V4dGVybiBpbnQgcmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChpbnQgbnVtKTsKK2V4dGVybiBpbnQgcmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxl bik7CitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAoaW50 IG5lZWRfZGFzbSk7CitleHRlcm4gdm9pZCByZWNvcmRfbWVzc2FnZSAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gpOworZXh0ZXJuIHN0cnVjdCBjbGVhbnVw ICogcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKHZvaWQpOwor CisjZW5kaWYgLyogX1JFQ09SRF9IXyAqLwo= --001485f025704e3b2f0463922e5c--