From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8799 invoked by alias); 28 May 2009 16:57:29 -0000 Received: (qmail 8758 invoked by uid 22791); 28 May 2009 16:57:18 -0000 X-SWARE-Spam-Status: No, hits=-1.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 28 May 2009 16:56:58 +0000 Received: from spaceape8.eur.corp.google.com (spaceape8.eur.corp.google.com [172.28.16.142]) by smtp-out.google.com with ESMTP id n4SGusl3029941 for ; Thu, 28 May 2009 17:56:54 +0100 Received: from qw-out-1920.google.com (qwk4.prod.google.com [10.241.195.132]) by spaceape8.eur.corp.google.com with ESMTP id n4SGuq67028107 for ; Thu, 28 May 2009 09:56:52 -0700 Received: by qw-out-1920.google.com with SMTP id 4so3337548qwk.14 for ; Thu, 28 May 2009 09:56:52 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.110.6 with SMTP id l6mr811989qcp.52.1243529811724; Thu, 28 May 2009 09:56:51 -0700 (PDT) In-Reply-To: References: <20090527001157.934BD76BC0@localhost> Date: Thu, 28 May 2009 16:57:00 -0000 Message-ID: <8ac60eac0905280956v79d9a84apad9a4370212283b9@mail.gmail.com> Subject: Re: [patch] Use mmap instead of obstack_alloc for dwarf debug sections. From: Paul Pluzhnikov To: tromey@redhat.com Cc: gdb-patches@sources.redhat.com Content-Type: multipart/mixed; boundary=00163631053bb20ca5046afbd888 X-System-Of-Record: true 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-05/txt/msg00613.txt.bz2 --00163631053bb20ca5046afbd888 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1279 On Wed, May 27, 2009 at 6:16 PM, Tom Tromey wrote: > I like this patch quite a bit. > > It has a number of minor formatting problems, mostly missing spaces > before open parens. Sorry, these get me every time :-( I've corrected all I could find in the updated patch (attached). > Paul> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0fileno ((FILE *)abfd->= iostream), > > I don't know for sure, but I assume that it is not valid in general to > cast iostream like this. I would have used bfd_get_file_window(), but it's only compiled in when --use-mmap was given to bfd/configure. Is there a way to turn that on for GDB? The bfd_get_file_window() performs above cast, after checking for: (abfd->flags & BFD_IN_MEMORY) =3D=3D 0) and later if (abfd->iostream =3D=3D NULL && (abfd->iovec =3D=3D NULL || abfd->iovec->bseek (abfd, offset, SEEK_SET) !=3D 0)) The last 3 conditions can not be true because we just performed bfd_seek and bfd_bread on abfd. Looks like BFD_IN_MEMORY could be set if the file was add-symbol-file-from-memory'd. Is it ok to do this in gdb/dwarf2read.c: if (info->size > 4 * pagesize && (sectp->flags & SEC_RELOC) =3D=3D 0 && (abfd->flags & BFD_IN_MEMORY) =3D=3D 0) Thanks, --=20 Paul Pluzhnikov --00163631053bb20ca5046afbd888 Content-Type: text/plain; charset=US-ASCII; name="gdb-dwarf2-mmap-20090528.txt" Content-Disposition: attachment; filename="gdb-dwarf2-mmap-20090528.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fv9phw900 Content-length: 58882 SW5kZXg6IGR3YXJmMnJlYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R3YXJmMnJlYWQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4zMDUKZGlmZiAtdSAtcCAtdSAtcjEuMzA1IGR3 YXJmMnJlYWQuYwotLS0gZHdhcmYycmVhZC5jCTI2IE1heSAyMDA5IDIxOjI0 OjA3IC0wMDAwCTEuMzA1CisrKyBkd2FyZjJyZWFkLmMJMjggTWF5IDIwMDkg MTY6Mzg6MTggLTAwMDAKQEAgLTU1LDIwICs1NSw5IEBACiAjaWZkZWYgSEFW RV9aTElCX0gKICNpbmNsdWRlIDx6bGliLmg+CiAjZW5kaWYKLQotLyogQSBu b3RlIG9uIG1lbW9yeSB1c2FnZSBmb3IgdGhpcyBmaWxlLgotICAgCi0gICBB dCB0aGUgcHJlc2VudCB0aW1lLCB0aGlzIGNvZGUgcmVhZHMgdGhlIGRlYnVn IGluZm8gc2VjdGlvbnMgaW50bwotICAgdGhlIG9iamZpbGUncyBvYmpmaWxl X29ic3RhY2suICBBIGRlZmluaXRlIGltcHJvdmVtZW50IGZvciBzdGFydHVw Ci0gICB0aW1lLCBvbiBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IGVtaXQgcmVs b2NhdGlvbnMgZm9yIGRlYnVnCi0gICBzZWN0aW9ucywgd291bGQgYmUgdG8g dXNlIG1tYXAgaW5zdGVhZC4gIFRoZSBvYmplY3QncyBjb21wbGV0ZQotICAg ZGVidWcgaW5mb3JtYXRpb24gaXMgbG9hZGVkIGludG8gbWVtb3J5LCBwYXJ0 bHkgdG8gc2ltcGxpZnkKLSAgIGFic29sdXRlIERJRSByZWZlcmVuY2VzLgot Ci0gICBXaGV0aGVyIHVzaW5nIG9ic3RhY2tzIG9yIG1tYXAsIHRoZSBzZWN0 aW9ucyBzaG91bGQgcmVtYWluIGxvYWRlZAotICAgdW50aWwgdGhlIG9iamZp bGUgaXMgcmVsZWFzZWQsIGFuZCBwb2ludGVycyBpbnRvIHRoZSBzZWN0aW9u IGRhdGEKLSAgIGNhbiBiZSB1c2VkIGZvciBhbnkgb3RoZXIgZGF0YSBhc3Nv Y2lhdGVkIHRvIHRoZSBvYmpmaWxlIChzeW1ib2wKLSAgIG5hbWVzLCB0eXBl IG5hbWVzLCBsb2NhdGlvbiBleHByZXNzaW9ucyB0byBuYW1lIGEgZmV3KS4g ICovCisjaWZkZWYgSEFWRV9NTUFQCisjaW5jbHVkZSA8c3lzL21tYW4uaD4K KyNlbmRpZgogCiAjaWYgMAogLyogLmRlYnVnX2luZm8gaGVhZGVyIGZvciBh IGNvbXBpbGF0aW9uIHVuaXQKQEAgLTE0NSw2ICsxMzQsOCBAQCBfU1RBVEVN RU5UX1BST0xPR1VFOwogLyogV2hlbiBub24temVybywgZHVtcCBESUVzIGFm dGVyIHRoZXkgYXJlIHJlYWQgaW4uICAqLwogc3RhdGljIGludCBkd2FyZjJf ZGllX2RlYnVnID0gMDsKIAorc3RhdGljIGludCBwYWdlc2l6ZTsKKwogLyog V2hlbiBzZXQsIHRoZSBmaWxlIHRoYXQgd2UncmUgcHJvY2Vzc2luZyBpcyBr bm93biB0byBoYXZlIGRlYnVnZ2luZwogICAgaW5mbyBmb3IgQysrIG5hbWVz cGFjZXMuICBHQ0MgMy4zLnggZGlkIG5vdCBwcm9kdWNlIHRoaXMgaW5mb3Jt YXRpb24sCiAgICBidXQgbGF0ZXIgdmVyc2lvbnMgZG8uICAqLwpAQCAtMTUz LDI5ICsxNDQsMjcgQEAgc3RhdGljIGludCBwcm9jZXNzaW5nX2hhc19uYW1l c3BhY2VfaW5mbwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9iamZpbGVfZGF0 YSAqZHdhcmYyX29iamZpbGVfZGF0YV9rZXk7CiAKK3N0cnVjdCBkd2FyZjJf c2VjdGlvbl9pbmZvCit7CisgIGFzZWN0aW9uICphc2VjdGlvbjsKKyAgZ2Ri X2J5dGUgKmJ1ZmZlcjsKKyAgYmZkX3NpemVfdHlwZSBzaXplOworICBpbnQg d2FzX21tYXBlZDsKK307CisKIHN0cnVjdCBkd2FyZjJfcGVyX29iamZpbGUK IHsKLSAgLyogU2l6ZXMgb2YgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KLSAg dW5zaWduZWQgaW50IGluZm9fc2l6ZTsKLSAgdW5zaWduZWQgaW50IGFiYnJl dl9zaXplOwotICB1bnNpZ25lZCBpbnQgbGluZV9zaXplOwotICB1bnNpZ25l ZCBpbnQgcHVibmFtZXNfc2l6ZTsKLSAgdW5zaWduZWQgaW50IGFyYW5nZXNf c2l6ZTsKLSAgdW5zaWduZWQgaW50IGxvY19zaXplOwotICB1bnNpZ25lZCBp bnQgbWFjaW5mb19zaXplOwotICB1bnNpZ25lZCBpbnQgc3RyX3NpemU7Ci0g IHVuc2lnbmVkIGludCByYW5nZXNfc2l6ZTsKLSAgdW5zaWduZWQgaW50IGZy YW1lX3NpemU7Ci0gIHVuc2lnbmVkIGludCBlaF9mcmFtZV9zaXplOwotCi0g IC8qIExvYWRlZCBkYXRhIGZyb20gdGhlIHNlY3Rpb25zLiAgKi8KLSAgZ2Ri X2J5dGUgKmluZm9fYnVmZmVyOwotICBnZGJfYnl0ZSAqYWJicmV2X2J1ZmZl cjsKLSAgZ2RiX2J5dGUgKmxpbmVfYnVmZmVyOwotICBnZGJfYnl0ZSAqc3Ry X2J1ZmZlcjsKLSAgZ2RiX2J5dGUgKm1hY2luZm9fYnVmZmVyOwotICBnZGJf Ynl0ZSAqcmFuZ2VzX2J1ZmZlcjsKLSAgZ2RiX2J5dGUgKmxvY19idWZmZXI7 CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIGluZm87CisgIHN0cnVj dCBkd2FyZjJfc2VjdGlvbl9pbmZvIGFiYnJldjsKKyAgc3RydWN0IGR3YXJm Ml9zZWN0aW9uX2luZm8gbGluZTsKKyAgc3RydWN0IGR3YXJmMl9zZWN0aW9u X2luZm8gcHVibmFtZXM7CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZv IGFyYW5nZXM7CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIGxvYzsK KyAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gbWFjaW5mbzsKKyAgc3Ry dWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gc3RyOworICBzdHJ1Y3QgZHdhcmYy X3NlY3Rpb25faW5mbyByYW5nZXM7CisgIHN0cnVjdCBkd2FyZjJfc2VjdGlv bl9pbmZvIGZyYW1lOworICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBl aF9mcmFtZTsKIAogICAvKiBBIGxpc3Qgb2YgYWxsIHRoZSBjb21waWxhdGlv biB1bml0cy4gIFRoaXMgaXMgdXNlZCB0byBsb2NhdGUKICAgICAgdGhlIHRh cmdldCBjb21waWxhdGlvbiB1bml0IG9mIGEgcGFydGljdWxhciByZWZlcmVu Y2UuICAqLwpAQCAtMTk1LDE4ICsxODQsNiBAQCBzdHJ1Y3QgZHdhcmYyX3Bl cl9vYmpmaWxlCiAKIHN0YXRpYyBzdHJ1Y3QgZHdhcmYyX3Blcl9vYmpmaWxl ICpkd2FyZjJfcGVyX29iamZpbGU7CiAKLXN0YXRpYyBhc2VjdGlvbiAqZHdh cmZfaW5mb19zZWN0aW9uOwotc3RhdGljIGFzZWN0aW9uICpkd2FyZl9hYmJy ZXZfc2VjdGlvbjsKLXN0YXRpYyBhc2VjdGlvbiAqZHdhcmZfbGluZV9zZWN0 aW9uOwotc3RhdGljIGFzZWN0aW9uICpkd2FyZl9wdWJuYW1lc19zZWN0aW9u Owotc3RhdGljIGFzZWN0aW9uICpkd2FyZl9hcmFuZ2VzX3NlY3Rpb247Ci1z dGF0aWMgYXNlY3Rpb24gKmR3YXJmX2xvY19zZWN0aW9uOwotc3RhdGljIGFz ZWN0aW9uICpkd2FyZl9tYWNpbmZvX3NlY3Rpb247Ci1zdGF0aWMgYXNlY3Rp b24gKmR3YXJmX3N0cl9zZWN0aW9uOwotc3RhdGljIGFzZWN0aW9uICpkd2Fy Zl9yYW5nZXNfc2VjdGlvbjsKLWFzZWN0aW9uICpkd2FyZl9mcmFtZV9zZWN0 aW9uOwotYXNlY3Rpb24gKmR3YXJmX2VoX2ZyYW1lX3NlY3Rpb247Ci0KIC8q IG5hbWVzIG9mIHRoZSBkZWJ1Z2dpbmcgc2VjdGlvbnMgKi8KIAogLyogTm90 ZSB0aGF0IGlmIHRoZSBkZWJ1Z2dpbmcgc2VjdGlvbiBoYXMgYmVlbiBjb21w cmVzc2VkLCBpdCBtaWdodApAQCAtODAzLDggKzc4MCw2IEBAIHN0YXRpYyB2 b2lkIGR3YXJmMl9wc3ltdGFiX3RvX3N5bXRhYiAoc3QKIAogc3RhdGljIHZv aWQgcHN5bXRhYl90b19zeW10YWJfMSAoc3RydWN0IHBhcnRpYWxfc3ltdGFi ICopOwogCi1nZGJfYnl0ZSAqZHdhcmYyX3JlYWRfc2VjdGlvbiAoc3RydWN0 IG9iamZpbGUgKiwgYXNlY3Rpb24gKik7Ci0KIHN0YXRpYyB2b2lkIGR3YXJm Ml9yZWFkX2FiYnJldnMgKGJmZCAqYWJmZCwgc3RydWN0IGR3YXJmMl9jdSAq Y3UpOwogCiBzdGF0aWMgdm9pZCBkd2FyZjJfZnJlZV9hYmJyZXZfdGFibGUg KHZvaWQgKik7CkBAIC0xMTMwLDMwICsxMTA1LDIwIEBAIGR3YXJmMl9oYXNf aW5mbyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUKICAgc2V0X29iamZpbGVf ZGF0YSAob2JqZmlsZSwgZHdhcmYyX29iamZpbGVfZGF0YV9rZXksIGRhdGEp OwogICBkd2FyZjJfcGVyX29iamZpbGUgPSBkYXRhOwogCi0gIGR3YXJmX2lu Zm9fc2VjdGlvbiA9IDA7Ci0gIGR3YXJmX2FiYnJldl9zZWN0aW9uID0gMDsK LSAgZHdhcmZfbGluZV9zZWN0aW9uID0gMDsKLSAgZHdhcmZfc3RyX3NlY3Rp b24gPSAwOwotICBkd2FyZl9tYWNpbmZvX3NlY3Rpb24gPSAwOwotICBkd2Fy Zl9mcmFtZV9zZWN0aW9uID0gMDsKLSAgZHdhcmZfZWhfZnJhbWVfc2VjdGlv biA9IDA7Ci0gIGR3YXJmX3Jhbmdlc19zZWN0aW9uID0gMDsKLSAgZHdhcmZf bG9jX3NlY3Rpb24gPSAwOwotICAKICAgYmZkX21hcF9vdmVyX3NlY3Rpb25z IChvYmpmaWxlLT5vYmZkLCBkd2FyZjJfbG9jYXRlX3NlY3Rpb25zLCBOVUxM KTsKLSAgcmV0dXJuIChkd2FyZl9pbmZvX3NlY3Rpb24gIT0gTlVMTCAmJiBk d2FyZl9hYmJyZXZfc2VjdGlvbiAhPSBOVUxMKTsKKyAgcmV0dXJuIChkYXRh LT5pbmZvLmFzZWN0aW9uICE9IE5VTEwgJiYgZGF0YS0+YWJicmV2LmFzZWN0 aW9uICE9IE5VTEwpOwogfQogCiAvKiBXaGVuIGxvYWRpbmcgc2VjdGlvbnMs IHdlIGNhbiBlaXRoZXIgbG9vayBmb3IgIi48bmFtZT4iLCBvciBmb3IKICAq ICIuejxuYW1lPiIsIHdoaWNoIGluZGljYXRlcyBhIGNvbXByZXNzZWQgc2Vj dGlvbi4gICovCiAKIHN0YXRpYyBpbnQKLXNlY3Rpb25faXNfcCAoYXNlY3Rp b24gKnNlY3RwLCBjb25zdCBjaGFyICpuYW1lKQorc2VjdGlvbl9pc19wIChj b25zdCBjaGFyICpzZWN0aW9uX25hbWUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7 Ci0gIHJldHVybiAoKHNlY3RwLT5uYW1lWzBdID09ICcuJwotICAgICAgICAg ICAmJiBzdHJjbXAgKHNlY3RwLT5uYW1lICsgMSwgbmFtZSkgPT0gMCkKLSAg ICAgICAgICB8fCAoc2VjdHAtPm5hbWVbMF0gPT0gJy4nICYmIHNlY3RwLT5u YW1lWzFdID09ICd6JwotICAgICAgICAgICAgICAmJiBzdHJjbXAgKHNlY3Rw LT5uYW1lICsgMiwgbmFtZSkgPT0gMCkpOworICByZXR1cm4gKHNlY3Rpb25f bmFtZVswXSA9PSAnLicKKwkgICYmIChzdHJjbXAgKHNlY3Rpb25fbmFtZSAr IDEsIG5hbWUpID09IDAKKwkgICAgICB8fCAoc2VjdGlvbl9uYW1lWzFdID09 ICd6JworCQkgICYmIHN0cmNtcCAoc2VjdGlvbl9uYW1lICsgMiwgbmFtZSkg PT0gMCkpKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBtYXBwZWQgYWNy b3NzIHRoZSBzZWN0aW9ucyBhbmQgcmVtZW1iZXJzIHRoZQpAQCAtMTE2Mywx NDAgKzExMjgsMjYyIEBAIHNlY3Rpb25faXNfcCAoYXNlY3Rpb24gKnNlY3Rw LCBjb25zdCBjaGEKIHN0YXRpYyB2b2lkCiBkd2FyZjJfbG9jYXRlX3NlY3Rp b25zIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0cCwgdm9pZCAqaWdub3Jl X3B0cikKIHsKLSAgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAsIElORk9fU0VD VElPTikpCisgIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCBJTkZP X1NFQ1RJT04pKQogICAgIHsKLSAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ aW5mb19zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsKLSAg ICAgIGR3YXJmX2luZm9fc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYy X3Blcl9vYmpmaWxlLT5pbmZvLmFzZWN0aW9uID0gc2VjdHA7CisgICAgICBk d2FyZjJfcGVyX29iamZpbGUtPmluZm8uc2l6ZSA9IGJmZF9nZXRfc2VjdGlv bl9zaXplIChzZWN0cCk7CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9uX2lz X3AgKHNlY3RwLCBBQkJSRVZfU0VDVElPTikpCisgIGVsc2UgaWYgKHNlY3Rp b25faXNfcCAoc2VjdHAtPm5hbWUsIEFCQlJFVl9TRUNUSU9OKSkKICAgICB7 Ci0gICAgICBkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJldl9zaXplID0gYmZk X2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsKLSAgICAgIGR3YXJmX2FiYnJl dl9zZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUt PmFiYnJldi5hc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9v YmpmaWxlLT5hYmJyZXYuc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChz ZWN0cCk7CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3Rw LCBMSU5FX1NFQ1RJT04pKQorICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNl Y3RwLT5uYW1lLCBMSU5FX1NFQ1RJT04pKQogICAgIHsKLSAgICAgIGR3YXJm Ml9wZXJfb2JqZmlsZS0+bGluZV9zaXplID0gYmZkX2dldF9zZWN0aW9uX3Np emUgKHNlY3RwKTsKLSAgICAgIGR3YXJmX2xpbmVfc2VjdGlvbiA9IHNlY3Rw OworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lLmFzZWN0aW9uID0g c2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSA9 IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7CiAgICAgfQotICBlbHNl IGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBQVUJOQU1FU19TRUNUSU9OKSkK KyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cC0+bmFtZSwgUFVCTkFN RVNfU0VDVElPTikpCiAgICAgewotICAgICAgZHdhcmYyX3Blcl9vYmpmaWxl LT5wdWJuYW1lc19zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3Rw KTsKLSAgICAgIGR3YXJmX3B1Ym5hbWVzX3NlY3Rpb24gPSBzZWN0cDsKKyAg ICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+cHVibmFtZXMuYXNlY3Rpb24gPSBz ZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+cHVibmFtZXMuc2l6 ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7CiAgICAgfQotICBl bHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBBUkFOR0VTX1NFQ1RJT04p KQorICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCBBUkFO R0VTX1NFQ1RJT04pKQogICAgIHsKLSAgICAgIGR3YXJmMl9wZXJfb2JqZmls ZS0+YXJhbmdlc19zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3Rw KTsKLSAgICAgIGR3YXJmX2FyYW5nZXNfc2VjdGlvbiA9IHNlY3RwOworICAg ICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5hcmFuZ2VzLmFzZWN0aW9uID0gc2Vj dHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUtPmFyYW5nZXMuc2l6ZSA9 IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7CiAgICAgfQotICBlbHNl IGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBMT0NfU0VDVElPTikpCisgIGVs c2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAtPm5hbWUsIExPQ19TRUNUSU9O KSkKICAgICB7Ci0gICAgICBkd2FyZjJfcGVyX29iamZpbGUtPmxvY19zaXpl ID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsKLSAgICAgIGR3YXJm X2xvY19zZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZp bGUtPmxvYy5hc2VjdGlvbiA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9v YmpmaWxlLT5sb2Muc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0 cCk7CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBN QUNJTkZPX1NFQ1RJT04pKQorICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNl Y3RwLT5uYW1lLCBNQUNJTkZPX1NFQ1RJT04pKQogICAgIHsKLSAgICAgIGR3 YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5mb19zaXplID0gYmZkX2dldF9zZWN0 aW9uX3NpemUgKHNlY3RwKTsKLSAgICAgIGR3YXJmX21hY2luZm9fc2VjdGlv biA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZv LmFzZWN0aW9uID0gc2VjdHA7CisgICAgICBkd2FyZjJfcGVyX29iamZpbGUt Pm1hY2luZm8uc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7 CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBTVFJf U0VDVElPTikpCisgIGVsc2UgaWYgKHNlY3Rpb25faXNfcCAoc2VjdHAtPm5h bWUsIFNUUl9TRUNUSU9OKSkKICAgICB7Ci0gICAgICBkd2FyZjJfcGVyX29i amZpbGUtPnN0cl9zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3Rw KTsKLSAgICAgIGR3YXJmX3N0cl9zZWN0aW9uID0gc2VjdHA7CisgICAgICBk d2FyZjJfcGVyX29iamZpbGUtPnN0ci5hc2VjdGlvbiA9IHNlY3RwOworICAg ICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5zdHIuc2l6ZSA9IGJmZF9nZXRfc2Vj dGlvbl9zaXplIChzZWN0cCk7CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9u X2lzX3AgKHNlY3RwLCBGUkFNRV9TRUNUSU9OKSkKKyAgZWxzZSBpZiAoc2Vj dGlvbl9pc19wIChzZWN0cC0+bmFtZSwgRlJBTUVfU0VDVElPTikpCiAgICAg ewotICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5mcmFtZV9zaXplID0gYmZk X2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsKLSAgICAgIGR3YXJmX2ZyYW1l X3NlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ ZnJhbWUuYXNlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+ZnJhbWUuc2l6ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0 cCk7CiAgICAgfQotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBF SF9GUkFNRV9TRUNUSU9OKSkKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChz ZWN0cC0+bmFtZSwgRUhfRlJBTUVfU0VDVElPTikpCiAgICAgewogICAgICAg ZmxhZ3dvcmQgYWZsYWcgPSBiZmRfZ2V0X3NlY3Rpb25fZmxhZ3MgKGlnbm9y ZV9hYmZkLCBzZWN0cCk7CiAgICAgICBpZiAoYWZsYWcgJiBTRUNfSEFTX0NP TlRFTlRTKQogICAgICAgICB7Ci0gICAgICAgICAgZHdhcmYyX3Blcl9vYmpm aWxlLT5laF9mcmFtZV9zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNl Y3RwKTsKLSAgICAgICAgICBkd2FyZl9laF9mcmFtZV9zZWN0aW9uID0gc2Vj dHA7CisJICBkd2FyZjJfcGVyX29iamZpbGUtPmVoX2ZyYW1lLmFzZWN0aW9u ID0gc2VjdHA7CisgICAgICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5laF9m cmFtZS5zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsKICAg ICAgICAgfQogICAgIH0KLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0 cCwgUkFOR0VTX1NFQ1RJT04pKQorICBlbHNlIGlmIChzZWN0aW9uX2lzX3Ag KHNlY3RwLT5uYW1lLCBSQU5HRVNfU0VDVElPTikpCiAgICAgewotICAgICAg ZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXNfc2l6ZSA9IGJmZF9nZXRfc2Vj dGlvbl9zaXplIChzZWN0cCk7Ci0gICAgICBkd2FyZl9yYW5nZXNfc2VjdGlv biA9IHNlY3RwOworICAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXMu YXNlY3Rpb24gPSBzZWN0cDsKKyAgICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+ cmFuZ2VzLnNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoc2VjdHApOwog ICAgIH0KLSAgCisKICAgaWYgKChiZmRfZ2V0X3NlY3Rpb25fZmxhZ3MgKGFi ZmQsIHNlY3RwKSAmIFNFQ19MT0FEKQogICAgICAgJiYgYmZkX3NlY3Rpb25f dm1hIChhYmZkLCBzZWN0cCkgPT0gMCkKICAgICBkd2FyZjJfcGVyX29iamZp bGUtPmhhc19zZWN0aW9uX2F0X3plcm8gPSAxOwogfQogCi0vKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBkZWNvbXByZXNzaW5nIGEgc2VjdGlv biwgc28KLSAgIGR3YXJmMl9wZXJfb2JqZmlsZSBjYW4gcmVjb3JkIGl0cyBu ZXcsIHVuY29tcHJlc3NlZCBzaXplLiAgKi8KKy8qIERlY29tcHJlc3MgYSBz ZWN0aW9uIHRoYXQgd2FzIGNvbXByZXNzZWQgdXNpbmcgemxpYi4gIFN0b3Jl IHRoZQorICAgZGVjb21wcmVzc2VkIGJ1ZmZlciwgYW5kIGl0cyBzaXplLCBp biBPVVRCVUYgYW5kIE9VVFNJWkUuICAqLwogCiBzdGF0aWMgdm9pZAotZHdh cmYyX3Jlc2l6ZV9zZWN0aW9uIChhc2VjdGlvbiAqc2VjdHAsIGJmZF9zaXpl X3R5cGUgbmV3X3NpemUpCit6bGliX2RlY29tcHJlc3Nfc2VjdGlvbiAoc3Ry dWN0IG9iamZpbGUgKm9iamZpbGUsIGFzZWN0aW9uICpzZWN0cCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBnZGJfYnl0ZSAqKm91dGJ1ZiwgYmZkX3Np emVfdHlwZSAqb3V0c2l6ZSkKIHsKLSAgaWYgKHNlY3Rpb25faXNfcCAoc2Vj dHAsIElORk9fU0VDVElPTikpCi0gICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5p bmZvX3NpemUgPSBuZXdfc2l6ZTsKLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19w IChzZWN0cCwgQUJCUkVWX1NFQ1RJT04pKQotICAgIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+YWJicmV2X3NpemUgPSBuZXdfc2l6ZTsKLSAgZWxzZSBpZiAoc2Vj dGlvbl9pc19wIChzZWN0cCwgTElORV9TRUNUSU9OKSkKLSAgICBkd2FyZjJf cGVyX29iamZpbGUtPmxpbmVfc2l6ZSA9IG5ld19zaXplOwotICBlbHNlIGlm IChzZWN0aW9uX2lzX3AgKHNlY3RwLCBQVUJOQU1FU19TRUNUSU9OKSkKLSAg ICBkd2FyZjJfcGVyX29iamZpbGUtPnB1Ym5hbWVzX3NpemUgPSBuZXdfc2l6 ZTsKLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgQVJBTkdFU19T RUNUSU9OKSkKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPmFyYW5nZXNfc2l6 ZSA9IG5ld19zaXplOwotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3Rw LCBMT0NfU0VDVElPTikpCi0gICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5sb2Nf c2l6ZSA9IG5ld19zaXplOwotICBlbHNlIGlmIChzZWN0aW9uX2lzX3AgKHNl Y3RwLCBNQUNJTkZPX1NFQ1RJT04pKQotICAgIGR3YXJmMl9wZXJfb2JqZmls ZS0+bWFjaW5mb19zaXplID0gbmV3X3NpemU7Ci0gIGVsc2UgaWYgKHNlY3Rp b25faXNfcCAoc2VjdHAsIFNUUl9TRUNUSU9OKSkKLSAgICBkd2FyZjJfcGVy X29iamZpbGUtPnN0cl9zaXplID0gbmV3X3NpemU7Ci0gIGVsc2UgaWYgKHNl Y3Rpb25faXNfcCAoc2VjdHAsIEZSQU1FX1NFQ1RJT04pKQotICAgIGR3YXJm Ml9wZXJfb2JqZmlsZS0+ZnJhbWVfc2l6ZSA9IG5ld19zaXplOwotICBlbHNl IGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLCBFSF9GUkFNRV9TRUNUSU9OKSkK LSAgICBkd2FyZjJfcGVyX29iamZpbGUtPmVoX2ZyYW1lX3NpemUgPSBuZXdf c2l6ZTsKLSAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0cCwgUkFOR0VT X1NFQ1RJT04pKQotICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzX3Np emUgPSBuZXdfc2l6ZTsKLSAgZWxzZQotICAgIGludGVybmFsX2Vycm9yIChf X0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICBfKCJkd2FyZjJfcmVzaXplX3Nl Y3Rpb246IG1pc3Npbmcgc2VjdGlvbl9pc19wIGNoZWNrOiAlcyIpLAotICAg ICAgICAgICAgICAgICAgICBzZWN0cC0+bmFtZSk7CisgIGJmZCAqYWJmZCA9 IG9iamZpbGUtPm9iZmQ7CisjaWZuZGVmIEhBVkVfWkxJQl9ICisgIGVycm9y IChfKCJTdXBwb3J0IGZvciB6bGliLWNvbXByZXNzZWQgRFdBUkYgZGF0YSAo ZnJvbSAnJXMnKSAiCisgICAgICAgICAgICJpcyBkaXNhYmxlZCBpbiB0aGlz IGNvcHkgb2YgR0RCIiksCisgICAgICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChh YmZkKSk7CisjZWxzZQorICBiZmRfc2l6ZV90eXBlIGNvbXByZXNzZWRfc2l6 ZSA9IGJmZF9nZXRfc2VjdGlvbl9zaXplIChzZWN0cCk7CisgIGdkYl9ieXRl ICpjb21wcmVzc2VkX2J1ZmZlciA9IHhtYWxsb2MgKGNvbXByZXNzZWRfc2l6 ZSk7CisgIGJmZF9zaXplX3R5cGUgdW5jb21wcmVzc2VkX3NpemU7CisgIGdk Yl9ieXRlICp1bmNvbXByZXNzZWRfYnVmZmVyOworICB6X3N0cmVhbSBzdHJt OworICBpbnQgcmM7CisgIGludCBoZWFkZXJfc2l6ZSA9IDEyOworCisgIGlm IChiZmRfc2VlayAoYWJmZCwgc2VjdHAtPmZpbGVwb3MsIFNFRUtfU0VUKSAh PSAwCisgICAgICB8fCBiZmRfYnJlYWQgKGNvbXByZXNzZWRfYnVmZmVyLCBj b21wcmVzc2VkX3NpemUsIGFiZmQpICE9IGNvbXByZXNzZWRfc2l6ZSkKKyAg ICBlcnJvciAoXygiRHdhcmYgRXJyb3I6IENhbid0IHJlYWQgRFdBUkYgZGF0 YSBmcm9tICclcyciKSwKKyAgICAgICAgICAgYmZkX2dldF9maWxlbmFtZSAo YWJmZCkpOworCisgIC8qIFJlYWQgdGhlIHpsaWIgaGVhZGVyLiAgSW4gdGhp cyBjYXNlLCBpdCBzaG91bGQgYmUgIlpMSUIiIGZvbGxvd2VkCisgICAgIGJ5 IHRoZSB1bmNvbXByZXNzZWQgc2VjdGlvbiBzaXplLCA4IGJ5dGVzIGluIGJp Zy1lbmRpYW4gb3JkZXIuICAqLworICBpZiAoY29tcHJlc3NlZF9zaXplIDwg aGVhZGVyX3NpemUKKyAgICAgIHx8IHN0cm5jbXAgKGNvbXByZXNzZWRfYnVm ZmVyLCAiWkxJQiIsIDQpICE9IDApCisgICAgZXJyb3IgKF8oIkR3YXJmIEVy cm9yOiBDb3JydXB0IERXQVJGIFpMSUIgaGVhZGVyIGZyb20gJyVzJyIpLAor ICAgICAgICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSk7CisgIHVuY29t cHJlc3NlZF9zaXplID0gY29tcHJlc3NlZF9idWZmZXJbNF07IHVuY29tcHJl c3NlZF9zaXplIDw8PSA4OworICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21w cmVzc2VkX2J1ZmZlcls1XTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7Cisg IHVuY29tcHJlc3NlZF9zaXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzZdOyB1 bmNvbXByZXNzZWRfc2l6ZSA8PD0gODsKKyAgdW5jb21wcmVzc2VkX3NpemUg Kz0gY29tcHJlc3NlZF9idWZmZXJbN107IHVuY29tcHJlc3NlZF9zaXplIDw8 PSA4OworICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZl cls4XTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7CisgIHVuY29tcHJlc3Nl ZF9zaXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzldOyB1bmNvbXByZXNzZWRf c2l6ZSA8PD0gODsKKyAgdW5jb21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3Nl ZF9idWZmZXJbMTBdOyB1bmNvbXByZXNzZWRfc2l6ZSA8PD0gODsKKyAgdW5j b21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3NlZF9idWZmZXJbMTFdOworCisg IC8qIEl0IGlzIHBvc3NpYmxlIHRoZSBzZWN0aW9uIGNvbnNpc3RzIG9mIHNl dmVyYWwgY29tcHJlc3NlZAorICAgICBidWZmZXJzIGNvbmNhdGVuYXRlZCB0 b2dldGhlciwgc28gd2UgdW5jb21wcmVzcyBpbiBhIGxvb3AuICAqLworICBz dHJtLnphbGxvYyA9IE5VTEw7CisgIHN0cm0uemZyZWUgPSBOVUxMOworICBz dHJtLm9wYXF1ZSA9IE5VTEw7CisgIHN0cm0uYXZhaWxfaW4gPSBjb21wcmVz c2VkX3NpemUgLSBoZWFkZXJfc2l6ZTsKKyAgc3RybS5uZXh0X2luID0gKEJ5 dGVmKikgY29tcHJlc3NlZF9idWZmZXIgKyBoZWFkZXJfc2l6ZTsKKyAgc3Ry bS5hdmFpbF9vdXQgPSB1bmNvbXByZXNzZWRfc2l6ZTsKKyAgdW5jb21wcmVz c2VkX2J1ZmZlciA9IG9ic3RhY2tfYWxsb2MgKCZvYmpmaWxlLT5vYmpmaWxl X29ic3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bmNvbXByZXNzZWRfc2l6ZSk7CisgIHJjID0gaW5mbGF0ZUluaXQg KCZzdHJtKTsKKyAgd2hpbGUgKHN0cm0uYXZhaWxfaW4gPiAwKQorICAgIHsK KyAgICAgIGlmIChyYyAhPSBaX09LKQorICAgICAgICBlcnJvciAoXygiRHdh cmYgRXJyb3I6IHNldHRpbmcgdXAgRFdBUkYgdW5jb21wcmVzc2lvbiBpbiAn JXMnOiAlZCIpLAorICAgICAgICAgICAgICAgYmZkX2dldF9maWxlbmFtZSAo YWJmZCksIHJjKTsKKyAgICAgIHN0cm0ubmV4dF9vdXQgPSAoKEJ5dGVmKikg dW5jb21wcmVzc2VkX2J1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAr ICh1bmNvbXByZXNzZWRfc2l6ZSAtIHN0cm0uYXZhaWxfb3V0KSk7CisgICAg ICByYyA9IGluZmxhdGUgKCZzdHJtLCBaX0ZJTklTSCk7CisgICAgICBpZiAo cmMgIT0gWl9TVFJFQU1fRU5EKQorICAgICAgICBlcnJvciAoXygiRHdhcmYg RXJyb3I6IHpsaWIgZXJyb3IgdW5jb21wcmVzc2luZyBmcm9tICclcyc6ICVk IiksCisgICAgICAgICAgICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSwg cmMpOworICAgICAgcmMgPSBpbmZsYXRlUmVzZXQgKCZzdHJtKTsKKyAgICB9 CisgIHJjID0gaW5mbGF0ZUVuZCAoJnN0cm0pOworICBpZiAocmMgIT0gWl9P SworICAgICAgfHwgc3RybS5hdmFpbF9vdXQgIT0gMCkKKyAgICBlcnJvciAo XygiRHdhcmYgRXJyb3I6IGNvbmNsdWRpbmcgRFdBUkYgdW5jb21wcmVzc2lv biBpbiAnJXMnOiAlZCIpLAorICAgICAgICAgICBiZmRfZ2V0X2ZpbGVuYW1l IChhYmZkKSwgcmMpOworCisgIHhmcmVlIChjb21wcmVzc2VkX2J1ZmZlcik7 CisgICpvdXRidWYgPSB1bmNvbXByZXNzZWRfYnVmZmVyOworICAqb3V0c2l6 ZSA9IHVuY29tcHJlc3NlZF9zaXplOworI2VuZGlmCiB9CiAKLS8qIEJ1aWxk IGEgcGFydGlhbCBzeW1ib2wgdGFibGUuICAqLworLyogUmVhZCB0aGUgY29u dGVudHMgb2YgdGhlIHNlY3Rpb24gU0VDVFAgZnJvbSBvYmplY3QgZmlsZSBz cGVjaWZpZWQgYnkKKyAgIE9CSkZJTEUsIHN0b3JlIGluZm8gYWJvdXQgdGhl IHNlY3Rpb24gaW50byBJTkZPLgorICAgSWYgdGhlIHNlY3Rpb24gaXMgY29t cHJlc3NlZCwgdW5jb21wcmVzcyBpdCBiZWZvcmUgcmV0dXJuaW5nLiAgKi8K IAotdm9pZAotZHdhcmYyX2J1aWxkX3BzeW10YWJzIChzdHJ1Y3Qgb2JqZmls ZSAqb2JqZmlsZSwgaW50IG1haW5saW5lKQorc3RhdGljIHZvaWQKK2R3YXJm Ml9yZWFkX3NlY3Rpb24gKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBzdHJ1 Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyAqaW5mbykKIHsKLSAgLyogV2UgZGVm aW5pdGVseSBuZWVkIHRoZSAuZGVidWdfaW5mbyBhbmQgLmRlYnVnX2FiYnJl diBzZWN0aW9ucyAqLworICBiZmQgKmFiZmQgPSBvYmpmaWxlLT5vYmZkOwor ICBhc2VjdGlvbiAqc2VjdHAgPSBpbmZvLT5hc2VjdGlvbjsKKyAgZ2RiX2J5 dGUgKmJ1ZiwgKnJldGJ1ZjsKKyAgdW5zaWduZWQgY2hhciBoZWFkZXJbNF07 CiAKLSAgZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciA9IGR3YXJm Ml9yZWFkX3NlY3Rpb24gKG9iamZpbGUsIGR3YXJmX2luZm9fc2VjdGlvbik7 Ci0gIGR3YXJmMl9wZXJfb2JqZmlsZS0+YWJicmV2X2J1ZmZlciA9IGR3YXJm Ml9yZWFkX3NlY3Rpb24gKG9iamZpbGUsIGR3YXJmX2FiYnJldl9zZWN0aW9u KTsKKyAgaW5mby0+YnVmZmVyID0gTlVMTDsKKyAgaW5mby0+d2FzX21tYXBl ZCA9IDA7CiAKLSAgaWYgKGR3YXJmX2xpbmVfc2VjdGlvbikKLSAgICBkd2Fy ZjJfcGVyX29iamZpbGUtPmxpbmVfYnVmZmVyID0gZHdhcmYyX3JlYWRfc2Vj dGlvbiAob2JqZmlsZSwgZHdhcmZfbGluZV9zZWN0aW9uKTsKLSAgZWxzZQot ICAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+bGluZV9idWZmZXIgPSBOVUxMOwor ICBpZiAoaW5mby0+YXNlY3Rpb24gPT0gTlVMTCB8fCBpbmZvLT5zaXplID09 IDApCisgICAgcmV0dXJuOwogCi0gIGlmIChkd2FyZl9zdHJfc2VjdGlvbikK LSAgICBkd2FyZjJfcGVyX29iamZpbGUtPnN0cl9idWZmZXIgPSBkd2FyZjJf cmVhZF9zZWN0aW9uIChvYmpmaWxlLCBkd2FyZl9zdHJfc2VjdGlvbik7Ci0g IGVsc2UKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPnN0cl9idWZmZXIgPSBO VUxMOworICAvKiBDaGVjayBpZiB0aGUgZmlsZSBoYXMgYSA0LWJ5dGUgaGVh ZGVyIGluZGljYXRpbmcgY29tcHJlc3Npb24uICAqLworICBpZiAoaW5mby0+ c2l6ZSA+IHNpemVvZiAoaGVhZGVyKQorICAgICAgJiYgYmZkX3NlZWsgKGFi ZmQsIHNlY3RwLT5maWxlcG9zLCBTRUVLX1NFVCkgPT0gMAorICAgICAgJiYg YmZkX2JyZWFkIChoZWFkZXIsIHNpemVvZiAoaGVhZGVyKSwgYWJmZCkgPT0g c2l6ZW9mIChoZWFkZXIpKQorICAgIHsKKyAgICAgIC8qIFVwb24gZGVjb21w cmVzc2lvbiwgdXBkYXRlIHRoZSBidWZmZXIgYW5kIGl0cyBzaXplLiAgKi8K KyAgICAgIGlmIChzdHJuY21wIChoZWFkZXIsICJaTElCIiwgc2l6ZW9mICho ZWFkZXIpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgemxpYl9kZWNv bXByZXNzX3NlY3Rpb24gKG9iamZpbGUsIHNlY3RwLCAmaW5mby0+YnVmZmVy LAorCQkJCSAgICZpbmZvLT5zaXplKTsKKyAgICAgICAgICByZXR1cm47Cisg ICAgICAgIH0KKyAgICB9CiAKLSAgaWYgKGR3YXJmX21hY2luZm9fc2VjdGlv bikKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPm1hY2luZm9fYnVmZmVyID0g ZHdhcmYyX3JlYWRfc2VjdGlvbiAob2JqZmlsZSwKLQkJCQkJCWR3YXJmX21h Y2luZm9fc2VjdGlvbik7Ci0gIGVsc2UKLSAgICBkd2FyZjJfcGVyX29iamZp bGUtPm1hY2luZm9fYnVmZmVyID0gTlVMTDsKKyNpZmRlZiBIQVZFX01NQVAK KyAgaWYgKHBhZ2VzaXplID09IDApCisgICAgcGFnZXNpemUgPSBnZXRwYWdl c2l6ZSAoKTsKKyAgaWYgKGluZm8tPnNpemUgPiA0ICogcGFnZXNpemUgJiYg KHNlY3RwLT5mbGFncyAmIFNFQ19SRUxPQykgPT0gMCkKKyAgICB7CisgICAg ICBvZmZfdCBwZ19vZmZzZXQgPSBzZWN0cC0+ZmlsZXBvcyAmIH4ocGFnZXNp emUgLSAxKTsKKyAgICAgIHNpemVfdCBtYXBfbGVuZ3RoID0gaW5mby0+c2l6 ZSArIHNlY3RwLT5maWxlcG9zIC0gcGdfb2Zmc2V0OworICAgICAgY2FkZHJf dCByZXRidWYgPSBtbWFwICgwLCBtYXBfbGVuZ3RoLCBQUk9UX1JFQUQsIE1B UF9QUklWQVRFLAorCQkJICAgICBmaWxlbm8gKChGSUxFICopYWJmZC0+aW9z dHJlYW0pLAorCQkJICAgICBwZ19vZmZzZXQpOwogCi0gIGlmIChkd2FyZl9y YW5nZXNfc2VjdGlvbikKLSAgICBkd2FyZjJfcGVyX29iamZpbGUtPnJhbmdl c19idWZmZXIgPSBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCBkd2Fy Zl9yYW5nZXNfc2VjdGlvbik7Ci0gIGVsc2UKLSAgICBkd2FyZjJfcGVyX29i amZpbGUtPnJhbmdlc19idWZmZXIgPSBOVUxMOworICAgICAgaWYgKHJldGJ1 ZiAhPSBNQVBfRkFJTEVEKQorCXsKKwkgIGluZm8tPndhc19tbWFwZWQgPSAx OworCSAgaW5mby0+YnVmZmVyID0gcmV0YnVmICsgKHNlY3RwLT5maWxlcG9z ICYgKHBhZ2VzaXplIC0gMSkpIDsKKwkgIHJldHVybjsKKwl9CisgICAgfQor I2VuZGlmCiAKLSAgaWYgKGR3YXJmX2xvY19zZWN0aW9uKQotICAgIGR3YXJm Ml9wZXJfb2JqZmlsZS0+bG9jX2J1ZmZlciA9IGR3YXJmMl9yZWFkX3NlY3Rp b24gKG9iamZpbGUsIGR3YXJmX2xvY19zZWN0aW9uKTsKLSAgZWxzZQotICAg IGR3YXJmMl9wZXJfb2JqZmlsZS0+bG9jX2J1ZmZlciA9IE5VTEw7CisgIC8q IElmIHdlIGdldCBoZXJlLCB3ZSBhcmUgYSBub3JtYWwsIG5vdC1jb21wcmVz c2VkIHNlY3Rpb24uICAqLworICBpbmZvLT5idWZmZXIgPSBidWYKKyAgICA9 IG9ic3RhY2tfYWxsb2MgKCZvYmpmaWxlLT5vYmpmaWxlX29ic3RhY2ssIGlu Zm8tPnNpemUpOworCisgIC8qIFdoZW4gZGVidWdnaW5nIC5vIGZpbGVzLCB3 ZSBtYXkgbmVlZCB0byBhcHBseSByZWxvY2F0aW9uczsgc2VlCisgICAgIGh0 dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDAyLTA0L21z ZzAwMTM2Lmh0bWwgLgorICAgICBXZSBuZXZlciBjb21wcmVzcyBzZWN0aW9u cyBpbiAubyBmaWxlcywgc28gd2Ugb25seSBuZWVkIHRvCisgICAgIHRyeSB0 aGlzIHdoZW4gdGhlIHNlY3Rpb24gaXMgbm90IGNvbXByZXNzZWQuICAqLwor ICByZXRidWYgPSBzeW1maWxlX3JlbG9jYXRlX2RlYnVnX3NlY3Rpb24gKGFi ZmQsIHNlY3RwLCBidWYpOworICBpZiAocmV0YnVmICE9IE5VTEwpCisgICAg eworICAgICAgaW5mby0+YnVmZmVyID0gcmV0YnVmOworICAgICAgcmV0dXJu OworICAgIH0KKworICBpZiAoYmZkX3NlZWsgKGFiZmQsIHNlY3RwLT5maWxl cG9zLCBTRUVLX1NFVCkgIT0gMAorICAgICAgfHwgYmZkX2JyZWFkIChidWYs IGluZm8tPnNpemUsIGFiZmQpICE9IGluZm8tPnNpemUpCisgICAgZXJyb3Ig KF8oIkR3YXJmIEVycm9yOiBDYW4ndCByZWFkIERXQVJGIGRhdGEgZnJvbSAn JXMnIiksCisJICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCkpOworfQorCisv KiBGaWxsIGluIFNFQ1RQLCBCVUZQIGFuZCBTSVpFUCB3aXRoIHNlY3Rpb24g aW5mbywgZ2l2ZW4gT0JKRklMRSBhbmQKKyAgIFNFQ1RJT05fTkFNRS4gKi8K Kwordm9pZAorZHdhcmYyX2dldF9zZWN0aW9uX2luZm8gKHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlLCBjb25zdCBjaGFyICpzZWN0aW9uX25hbWUsCisJCQkg YXNlY3Rpb24gKipzZWN0cCwgZ2RiX2J5dGUgKipidWZwLAorCQkJIGJmZF9z aXplX3R5cGUgKnNpemVwKQoreworICBzdHJ1Y3QgZHdhcmYyX3Blcl9vYmpm aWxlICpkYXRhCisgICAgPSBvYmpmaWxlX2RhdGEgKG9iamZpbGUsIGR3YXJm Ml9vYmpmaWxlX2RhdGFfa2V5KTsKKyAgc3RydWN0IGR3YXJmMl9zZWN0aW9u X2luZm8gKmluZm87CisgIGlmIChzZWN0aW9uX2lzX3AgKHNlY3Rpb25fbmFt ZSwgRUhfRlJBTUVfU0VDVElPTikpCisgICAgaW5mbyA9ICZkYXRhLT5laF9m cmFtZTsKKyAgZWxzZSBpZiAoc2VjdGlvbl9pc19wIChzZWN0aW9uX25hbWUs IEZSQU1FX1NFQ1RJT04pKQorICAgIGluZm8gPSAmZGF0YS0+ZnJhbWU7Cisg IGVsc2UKKyAgICBnZGJfYXNzZXJ0ICgwKTsKKworICBpZiAoaW5mby0+YXNl Y3Rpb24gIT0gTlVMTCAmJiBpbmZvLT5zaXplICE9IDAgJiYgaW5mby0+YnVm ZmVyID09IE5VTEwpCisgICAgLyogV2UgaGF2ZW4ndCByZWFkIHRoaXMgc2Vj dGlvbiBpbiB5ZXQuICBEbyBpdCBub3cuICAqLworICAgIGR3YXJmMl9yZWFk X3NlY3Rpb24gKG9iamZpbGUsIGluZm8pOworCisgICpzZWN0cCA9IGluZm8t PmFzZWN0aW9uOworICAqYnVmcCA9IGluZm8tPmJ1ZmZlcjsKKyAgKnNpemVw ID0gaW5mby0+c2l6ZTsKK30KKworLyogQnVpbGQgYSBwYXJ0aWFsIHN5bWJv bCB0YWJsZS4gICovCisKK3ZvaWQKK2R3YXJmMl9idWlsZF9wc3ltdGFicyAo c3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGludCBtYWlubGluZSkKK3sKKyAg ZHdhcmYyX3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mbyk7CisgIGR3YXJmMl9yZWFkX3NlY3Rpb24gKG9iamZpbGUs ICZkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJldik7CisgIGR3YXJmMl9yZWFk X3NlY3Rpb24gKG9iamZpbGUsICZkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUp OworICBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCAmZHdhcmYyX3Bl cl9vYmpmaWxlLT5zdHIpOworICBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpm aWxlLCAmZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZvKTsKKyAgZHdhcmYy X3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3YXJmMl9wZXJfb2JqZmlsZS0+ cmFuZ2VzKTsKKyAgZHdhcmYyX3JlYWRfc2VjdGlvbiAob2JqZmlsZSwgJmR3 YXJmMl9wZXJfb2JqZmlsZS0+bG9jKTsKKyAgZHdhcmYyX3JlYWRfc2VjdGlv biAob2JqZmlsZSwgJmR3YXJmMl9wZXJfb2JqZmlsZS0+ZWhfZnJhbWUpOwor ICBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLCAmZHdhcmYyX3Blcl9v YmpmaWxlLT5mcmFtZSk7CiAKICAgaWYgKG1haW5saW5lCiAgICAgICB8fCAo b2JqZmlsZS0+Z2xvYmFsX3BzeW1ib2xzLnNpemUgPT0gMApAQCAtMTMzNyw3 ICsxNDI0LDcgQEAgZHdhcmYyX2J1aWxkX3BzeW10YWJzX2Vhc3kgKHN0cnVj dCBvYmpmaQogICBwdWJuYW1lc19idWZmZXIgPSBkd2FyZjJfcmVhZF9zZWN0 aW9uIChvYmpmaWxlLAogCQkJCQkgZHdhcmZfcHVibmFtZXNfc2VjdGlvbik7 CiAgIHB1Ym5hbWVzX3B0ciA9IHB1Ym5hbWVzX2J1ZmZlcjsKLSAgd2hpbGUg KChwdWJuYW1lc19wdHIgLSBwdWJuYW1lc19idWZmZXIpIDwgZHdhcmYyX3Bl cl9vYmpmaWxlLT5wdWJuYW1lc19zaXplKQorICB3aGlsZSAoKHB1Ym5hbWVz X3B0ciAtIHB1Ym5hbWVzX2J1ZmZlcikgPCBkd2FyZjJfcGVyX29iamZpbGUt PnB1Ym5hbWVzLnNpemUpCiAgICAgewogICAgICAgdW5zaWduZWQgaW50IGJ5 dGVzX3JlYWQ7CiAKQEAgLTE0MTIsMTkgKzE0OTksMTkgQEAgcGFydGlhbF9y ZWFkX2NvbXBfdW5pdF9oZWFkIChzdHJ1Y3QgY29tcAogCSAgICIoaXMgJWQs IHNob3VsZCBiZSAlZCkgW2luIG1vZHVsZSAlc10iKSwgaGVhZGVyLT52ZXJz aW9uLAogCSAgIDIsIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKTsKIAotICBp ZiAoaGVhZGVyLT5hYmJyZXZfb2Zmc2V0ID49IGR3YXJmMl9wZXJfb2JqZmls ZS0+YWJicmV2X3NpemUpCisgIGlmIChoZWFkZXItPmFiYnJldl9vZmZzZXQg Pj0gZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuc2l6ZSkKICAgICBlcnJv ciAoXygiRHdhcmYgRXJyb3I6IGJhZCBvZmZzZXQgKDB4JWx4KSBpbiBjb21w aWxhdGlvbiB1bml0IGhlYWRlciAiCiAJICAgIihvZmZzZXQgMHglbHggKyA2 KSBbaW4gbW9kdWxlICVzXSIpLAogCSAgIChsb25nKSBoZWFkZXItPmFiYnJl dl9vZmZzZXQsCi0JICAgKGxvbmcpIChiZWdfb2ZfY29tcF91bml0IC0gZHdh cmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciksCisJICAgKGxvbmcpIChi ZWdfb2ZfY29tcF91bml0IC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1 ZmZlciksCiAJICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCkpOwogCiAgIGlm IChiZWdfb2ZfY29tcF91bml0ICsgaGVhZGVyLT5sZW5ndGggKyBoZWFkZXIt PmluaXRpYWxfbGVuZ3RoX3NpemUKLSAgICAgID4gZHdhcmYyX3Blcl9vYmpm aWxlLT5pbmZvX2J1ZmZlciArIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19z aXplKQorICAgICAgPiBkd2FyZjJfcGVyX29iamZpbGUtPmluZm8uYnVmZmVy ICsgZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLnNpemUpCiAgICAgZXJyb3Ig KF8oIkR3YXJmIEVycm9yOiBiYWQgbGVuZ3RoICgweCVseCkgaW4gY29tcGls YXRpb24gdW5pdCBoZWFkZXIgIgogCSAgICIob2Zmc2V0IDB4JWx4ICsgMCkg W2luIG1vZHVsZSAlc10iKSwKIAkgICAobG9uZykgaGVhZGVyLT5sZW5ndGgs Ci0JICAgKGxvbmcpIChiZWdfb2ZfY29tcF91bml0IC0gZHdhcmYyX3Blcl9v YmpmaWxlLT5pbmZvX2J1ZmZlciksCisJICAgKGxvbmcpIChiZWdfb2ZfY29t cF91bml0IC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZlciksCiAJ ICAgYmZkX2dldF9maWxlbmFtZSAoYWJmZCkpOwogCiAgIHJldHVybiBpbmZv X3B0cjsKQEAgLTE1MDYsNyArMTU5Myw3IEBAIGR3YXJmMl9idWlsZF9wc3lt dGFic19oYXJkIChzdHJ1Y3Qgb2JqZmkKICAgc3RydWN0IGNsZWFudXAgKmJh Y2tfdG87CiAgIENPUkVfQUREUiBiYXNlYWRkcjsKIAotICBpbmZvX3B0ciA9 IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7CisgIGluZm9fcHRy ID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZlcjsKIAogICAvKiBB bnkgY2FjaGVkIGNvbXBpbGF0aW9uIHVuaXRzIHdpbGwgYmUgbGlua2VkIGJ5 IHRoZSBwZXItb2JqZmlsZQogICAgICByZWFkX2luX2NoYWluLiAgTWFrZSBz dXJlIHRvIGZyZWUgdGhlbSB3aGVuIHdlJ3JlIGRvbmUuICAqLwpAQCAtMTUz MCw4ICsxNjE3LDggQEAgZHdhcmYyX2J1aWxkX3BzeW10YWJzX2hhcmQgKHN0 cnVjdCBvYmpmaQogCiAgICAgIEZvciB0aGlzIGxvb3AgY29uZGl0aW9uLCBz aW1wbHkgY2hlY2tpbmcgd2hldGhlciB0aGVyZSdzIGFueSBkYXRhCiAgICAg IGxlZnQgYXQgYWxsIHNob3VsZCBiZSBzdWZmaWNpZW50LiAgKi8KLSAgd2hp bGUgKGluZm9fcHRyIDwgKGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZm ZXIKLQkJICAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19zaXplKSkK KyAgd2hpbGUgKGluZm9fcHRyIDwgKGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5m by5idWZmZXIKKwkJICAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5z aXplKSkKICAgICB7CiAgICAgICBzdHJ1Y3QgY2xlYW51cCAqYmFja190b19p bm5lcjsKICAgICAgIHN0cnVjdCBkd2FyZjJfY3UgY3U7CkBAIC0xNTUxLDcg KzE2MzgsNyBAQCBkd2FyZjJfYnVpbGRfcHN5bXRhYnNfaGFyZCAoc3RydWN0 IG9iamZpCiAgICAgICBpbmZvX3B0ciA9IHBhcnRpYWxfcmVhZF9jb21wX3Vu aXRfaGVhZCAoJmN1LmhlYWRlciwgaW5mb19wdHIsIGFiZmQpOwogCiAgICAg ICAvKiBDb21wbGV0ZSB0aGUgY3VfaGVhZGVyICovCi0gICAgICBjdS5oZWFk ZXIub2Zmc2V0ID0gYmVnX29mX2NvbXBfdW5pdCAtIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mb19idWZmZXI7CisgICAgICBjdS5oZWFkZXIub2Zmc2V0ID0g YmVnX29mX2NvbXBfdW5pdCAtIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5i dWZmZXI7CiAgICAgICBjdS5oZWFkZXIuZmlyc3RfZGllX29mZnNldCA9IGlu Zm9fcHRyIC0gYmVnX29mX2NvbXBfdW5pdDsKIAogICAgICAgY3UubGlzdF9p bl9zY29wZSA9ICZmaWxlX3N5bWJvbHM7CkBAIC0xNzA4LDcgKzE3OTUsNyBA QCBsb2FkX2NvbXBfdW5pdCAoc3RydWN0IGR3YXJmMl9wZXJfY3VfZGF0CiAg IHVuc2lnbmVkIGludCBieXRlc19yZWFkOwogICBzdHJ1Y3QgY2xlYW51cCAq YmFja190bzsKIAotICBpbmZvX3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+ aW5mb19idWZmZXIgKyB0aGlzX2N1LT5vZmZzZXQ7CisgIGluZm9fcHRyID0g ZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZlciArIHRoaXNfY3UtPm9m ZnNldDsKICAgYmVnX29mX2NvbXBfdW5pdCA9IGluZm9fcHRyOwogCiAgIGN1 ID0geG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZHdhcmYyX2N1KSk7CkBAIC0x NzIwLDcgKzE4MDcsNyBAQCBsb2FkX2NvbXBfdW5pdCAoc3RydWN0IGR3YXJm Ml9wZXJfY3VfZGF0CiAgIGluZm9fcHRyID0gcGFydGlhbF9yZWFkX2NvbXBf dW5pdF9oZWFkICgmY3UtPmhlYWRlciwgaW5mb19wdHIsIGFiZmQpOwogCiAg IC8qIENvbXBsZXRlIHRoZSBjdV9oZWFkZXIuICAqLwotICBjdS0+aGVhZGVy Lm9mZnNldCA9IGJlZ19vZl9jb21wX3VuaXQgLSBkd2FyZjJfcGVyX29iamZp bGUtPmluZm9fYnVmZmVyOworICBjdS0+aGVhZGVyLm9mZnNldCA9IGJlZ19v Zl9jb21wX3VuaXQgLSBkd2FyZjJfcGVyX29iamZpbGUtPmluZm8uYnVmZmVy OwogICBjdS0+aGVhZGVyLmZpcnN0X2RpZV9vZmZzZXQgPSBpbmZvX3B0ciAt IGJlZ19vZl9jb21wX3VuaXQ7CiAKICAgLyogUmVhZCB0aGUgYWJicmV2cyBm b3IgdGhpcyBjb21waWxhdGlvbiB1bml0IGludG8gYSB0YWJsZS4gICovCkBA IC0xNzYwLDIxICsxODQ3LDIxIEBAIGNyZWF0ZV9hbGxfY29tcF91bml0cyAo c3RydWN0IG9iamZpbGUgKm8KICAgaW50IG5fYWxsb2NhdGVkOwogICBpbnQg bl9jb21wX3VuaXRzOwogICBzdHJ1Y3QgZHdhcmYyX3Blcl9jdV9kYXRhICoq YWxsX2NvbXBfdW5pdHM7Ci0gIGdkYl9ieXRlICppbmZvX3B0ciA9IGR3YXJm Ml9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7CisgIGdkYl9ieXRlICppbmZv X3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5idWZmZXI7CiAKICAg bl9jb21wX3VuaXRzID0gMDsKICAgbl9hbGxvY2F0ZWQgPSAxMDsKICAgYWxs X2NvbXBfdW5pdHMgPSB4bWFsbG9jIChuX2FsbG9jYXRlZAogCQkJICAgICog c2l6ZW9mIChzdHJ1Y3QgZHdhcmYyX3Blcl9jdV9kYXRhICopKTsKICAgCi0g IHdoaWxlIChpbmZvX3B0ciA8IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19i dWZmZXIgKyBkd2FyZjJfcGVyX29iamZpbGUtPmluZm9fc2l6ZSkKKyAgd2hp bGUgKGluZm9fcHRyIDwgZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvLmJ1ZmZl ciArIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5zaXplKQogICAgIHsKICAg ICAgIHVuc2lnbmVkIGludCBsZW5ndGgsIGluaXRpYWxfbGVuZ3RoX3NpemU7 CiAgICAgICBnZGJfYnl0ZSAqYmVnX29mX2NvbXBfdW5pdDsKICAgICAgIHN0 cnVjdCBkd2FyZjJfcGVyX2N1X2RhdGEgKnRoaXNfY3U7CiAgICAgICB1bnNp Z25lZCBpbnQgb2Zmc2V0OwogCi0gICAgICBvZmZzZXQgPSBpbmZvX3B0ciAt IGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mb19idWZmZXI7CisgICAgICBvZmZz ZXQgPSBpbmZvX3B0ciAtIGR3YXJmMl9wZXJfb2JqZmlsZS0+aW5mby5idWZm ZXI7CiAKICAgICAgIC8qIFJlYWQganVzdCBlbm91Z2ggaW5mb3JtYXRpb24g dG8gZmluZCBvdXQgd2hlcmUgdGhlIG5leHQKIAkgY29tcGlsYXRpb24gdW5p dCBpcy4gICovCkBAIC0yNDIwLDcgKzI1MDcsNyBAQCBza2lwX29uZV9kaWUg KGdkYl9ieXRlICppbmZvX3B0ciwgc3RydWN0CiAJICBpZiAoYXR0ci5mb3Jt ID09IERXX0ZPUk1fcmVmX2FkZHIpCiAJICAgIGNvbXBsYWludCAoJnN5bWZp bGVfY29tcGxhaW50cywgXygiaWdub3JpbmcgYWJzb2x1dGUgRFdfQVRfc2li bGluZyIpKTsKIAkgIGVsc2UKLQkgICAgcmV0dXJuIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mb19idWZmZXIKKwkgICAgcmV0dXJuIGR3YXJmMl9wZXJfb2Jq ZmlsZS0+aW5mby5idWZmZXIKIAkgICAgICArIGR3YXJmMl9nZXRfcmVmX2Rp ZV9vZmZzZXQgKCZhdHRyKTsKIAl9CiAKQEAgLTI2OTMsNyArMjc4MCw3IEBA IGxvYWRfZnVsbF9jb21wX3VuaXQgKHN0cnVjdCBkd2FyZjJfcGVyX2MKICAg LyogU2V0IGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBwYXJ0aWFsIHN5bWJv bCB0YWJsZSBpbmZvLiAgKi8KICAgb2Zmc2V0ID0gcGVyX2N1LT5vZmZzZXQ7 CiAKLSAgaW5mb19wdHIgPSBkd2FyZjJfcGVyX29iamZpbGUtPmluZm9fYnVm ZmVyICsgb2Zmc2V0OworICBpbmZvX3B0ciA9IGR3YXJmMl9wZXJfb2JqZmls ZS0+aW5mby5idWZmZXIgKyBvZmZzZXQ7CiAKICAgY3UgPSB4bWFsbG9jIChz aXplb2YgKHN0cnVjdCBkd2FyZjJfY3UpKTsKICAgbWVtc2V0IChjdSwgMCwg c2l6ZW9mIChzdHJ1Y3QgZHdhcmYyX2N1KSk7CkBAIC0zMzU4LDE0ICszNDQ1 LDE0IEBAIGR3YXJmMl9yYW5nZXNfcmVhZCAodW5zaWduZWQgb2Zmc2V0LCBD T1IKICAgZm91bmRfYmFzZSA9IGN1LT5iYXNlX2tub3duOwogICBiYXNlID0g Y3UtPmJhc2VfYWRkcmVzczsKIAotICBpZiAob2Zmc2V0ID49IGR3YXJmMl9w ZXJfb2JqZmlsZS0+cmFuZ2VzX3NpemUpCisgIGlmIChvZmZzZXQgPj0gZHdh cmYyX3Blcl9vYmpmaWxlLT5yYW5nZXMuc2l6ZSkKICAgICB7CiAgICAgICBj b21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsCiAJCSBfKCJPZmZzZXQg JWQgb3V0IG9mIGJvdW5kcyBmb3IgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0ZSIp LAogCQkgb2Zmc2V0KTsKICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgYnVm ZmVyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXNfYnVmZmVyICsgb2Zm c2V0OworICBidWZmZXIgPSBkd2FyZjJfcGVyX29iamZpbGUtPnJhbmdlcy5i dWZmZXIgKyBvZmZzZXQ7CiAKICAgLyogUmVhZCBpbiB0aGUgbGFyZ2VzdCBw b3NzaWJsZSBhZGRyZXNzLiAgKi8KICAgbWFya2VyID0gcmVhZF9hZGRyZXNz IChvYmZkLCBidWZmZXIsIGN1LCAmZHVtbXkpOwpAQCAtMzY0MCw3ICszNzI3 LDcgQEAgZHdhcmYyX3JlY29yZF9ibG9ja19yYW5nZXMgKHN0cnVjdCBkaWVf aQogICAgICAgLyogVGhlIHZhbHVlIG9mIHRoZSBEV19BVF9yYW5nZXMgYXR0 cmlidXRlIGlzIHRoZSBvZmZzZXQgb2YgdGhlCiAgICAgICAgICBhZGRyZXNz IHJhbmdlIGxpc3QgaW4gdGhlIC5kZWJ1Z19yYW5nZXMgc2VjdGlvbi4gICov CiAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCA9IERXX1VOU05EIChhdHRy KTsKLSAgICAgIGdkYl9ieXRlICpidWZmZXIgPSBkd2FyZjJfcGVyX29iamZp bGUtPnJhbmdlc19idWZmZXIgKyBvZmZzZXQ7CisgICAgICBnZGJfYnl0ZSAq YnVmZmVyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5yYW5nZXMuYnVmZmVyICsg b2Zmc2V0OwogCiAgICAgICAvKiBGb3Igc29tZSB0YXJnZXQgYXJjaGl0ZWN0 dXJlcywgYnV0IG5vdCBvdGhlcnMsIHRoZQogICAgICAgICAgcmVhZF9hZGRy ZXNzIGZ1bmN0aW9uIHNpZ24tZXh0ZW5kcyB0aGUgYWRkcmVzc2VzIGl0IHJl dHVybnMuCkBAIC0zNjU5LDcgKzM3NDYsNyBAQCBkd2FyZjJfcmVjb3JkX2Js b2NrX3JhbmdlcyAoc3RydWN0IGRpZV9pCiAgICAgICBDT1JFX0FERFIgYmFz ZSA9IGN1LT5iYXNlX2FkZHJlc3M7CiAgICAgICBpbnQgYmFzZV9rbm93biA9 IGN1LT5iYXNlX2tub3duOwogCi0gICAgICBpZiAob2Zmc2V0ID49IGR3YXJm Ml9wZXJfb2JqZmlsZS0+cmFuZ2VzX3NpemUpCisgICAgICBpZiAob2Zmc2V0 ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+cmFuZ2VzLnNpemUpCiAgICAgICAg IHsKICAgICAgICAgICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMs CiAgICAgICAgICAgICAgICAgICAgICBfKCJPZmZzZXQgJWx1IG91dCBvZiBi b3VuZHMgZm9yIERXX0FUX3JhbmdlcyBhdHRyaWJ1dGUiKSwKQEAgLTU0OTcs MTMxICs1NTg0LDYgQEAgcmVhZF9kaWVfYW5kX3NpYmxpbmdzIChnZGJfYnl0 ZSAqaW5mb19wdAogICAgIH0KIH0KIAotLyogRGVjb21wcmVzcyBhIHNlY3Rp b24gdGhhdCB3YXMgY29tcHJlc3NlZCB1c2luZyB6bGliLiAgU3RvcmUgdGhl Ci0gICBkZWNvbXByZXNzZWQgYnVmZmVyLCBhbmQgaXRzIHNpemUsIGluIE9V VEJVRiBhbmQgT1VUU0laRS4gICovCi0KLXN0YXRpYyB2b2lkCi16bGliX2Rl Y29tcHJlc3Nfc2VjdGlvbiAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGFz ZWN0aW9uICpzZWN0cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnZGJf Ynl0ZSAqKm91dGJ1ZiwgYmZkX3NpemVfdHlwZSAqb3V0c2l6ZSkKLXsKLSAg YmZkICphYmZkID0gb2JqZmlsZS0+b2JmZDsKLSNpZm5kZWYgSEFWRV9aTElC X0gKLSAgZXJyb3IgKF8oIlN1cHBvcnQgZm9yIHpsaWItY29tcHJlc3NlZCBE V0FSRiBkYXRhIChmcm9tICclcycpICIKLSAgICAgICAgICAgImlzIGRpc2Fi bGVkIGluIHRoaXMgY29weSBvZiBHREIiKSwKLSAgICAgICAgIGJmZF9nZXRf ZmlsZW5hbWUgKGFiZmQpKTsKLSNlbHNlCi0gIGJmZF9zaXplX3R5cGUgY29t cHJlc3NlZF9zaXplID0gYmZkX2dldF9zZWN0aW9uX3NpemUgKHNlY3RwKTsK LSAgZ2RiX2J5dGUgKmNvbXByZXNzZWRfYnVmZmVyID0geG1hbGxvYyAoY29t cHJlc3NlZF9zaXplKTsKLSAgYmZkX3NpemVfdHlwZSB1bmNvbXByZXNzZWRf c2l6ZTsKLSAgZ2RiX2J5dGUgKnVuY29tcHJlc3NlZF9idWZmZXI7Ci0gIHpf c3RyZWFtIHN0cm07Ci0gIGludCByYzsKLSAgaW50IGhlYWRlcl9zaXplID0g MTI7Ci0KLSAgaWYgKGJmZF9zZWVrIChhYmZkLCBzZWN0cC0+ZmlsZXBvcywg U0VFS19TRVQpICE9IDAKLSAgICAgIHx8IGJmZF9icmVhZCAoY29tcHJlc3Nl ZF9idWZmZXIsIGNvbXByZXNzZWRfc2l6ZSwgYWJmZCkgIT0gY29tcHJlc3Nl ZF9zaXplKQotICAgIGVycm9yIChfKCJEd2FyZiBFcnJvcjogQ2FuJ3QgcmVh ZCBEV0FSRiBkYXRhIGZyb20gJyVzJyIpLAotICAgICAgICAgICBiZmRfZ2V0 X2ZpbGVuYW1lIChhYmZkKSk7Ci0KLSAgLyogUmVhZCB0aGUgemxpYiBoZWFk ZXIuICBJbiB0aGlzIGNhc2UsIGl0IHNob3VsZCBiZSAiWkxJQiIgZm9sbG93 ZWQKLSAgICAgYnkgdGhlIHVuY29tcHJlc3NlZCBzZWN0aW9uIHNpemUsIDgg Ynl0ZXMgaW4gYmlnLWVuZGlhbiBvcmRlci4gICovCi0gIGlmIChjb21wcmVz c2VkX3NpemUgPCBoZWFkZXJfc2l6ZQotICAgICAgfHwgc3RybmNtcCAoY29t cHJlc3NlZF9idWZmZXIsICJaTElCIiwgNCkgIT0gMCkKLSAgICBlcnJvciAo XygiRHdhcmYgRXJyb3I6IENvcnJ1cHQgRFdBUkYgWkxJQiBoZWFkZXIgZnJv bSAnJXMnIiksCi0gICAgICAgICAgIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQp KTsKLSAgdW5jb21wcmVzc2VkX3NpemUgPSBjb21wcmVzc2VkX2J1ZmZlcls0 XTsgdW5jb21wcmVzc2VkX3NpemUgPDw9IDg7Ci0gIHVuY29tcHJlc3NlZF9z aXplICs9IGNvbXByZXNzZWRfYnVmZmVyWzVdOyB1bmNvbXByZXNzZWRfc2l6 ZSA8PD0gODsKLSAgdW5jb21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3NlZF9i dWZmZXJbNl07IHVuY29tcHJlc3NlZF9zaXplIDw8PSA4OwotICB1bmNvbXBy ZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZlcls3XTsgdW5jb21wcmVz c2VkX3NpemUgPDw9IDg7Ci0gIHVuY29tcHJlc3NlZF9zaXplICs9IGNvbXBy ZXNzZWRfYnVmZmVyWzhdOyB1bmNvbXByZXNzZWRfc2l6ZSA8PD0gODsKLSAg dW5jb21wcmVzc2VkX3NpemUgKz0gY29tcHJlc3NlZF9idWZmZXJbOV07IHVu Y29tcHJlc3NlZF9zaXplIDw8PSA4OwotICB1bmNvbXByZXNzZWRfc2l6ZSAr PSBjb21wcmVzc2VkX2J1ZmZlclsxMF07IHVuY29tcHJlc3NlZF9zaXplIDw8 PSA4OwotICB1bmNvbXByZXNzZWRfc2l6ZSArPSBjb21wcmVzc2VkX2J1ZmZl clsxMV07Ci0KLSAgLyogSXQgaXMgcG9zc2libGUgdGhlIHNlY3Rpb24gY29u c2lzdHMgb2Ygc2V2ZXJhbCBjb21wcmVzc2VkCi0gICAgIGJ1ZmZlcnMgY29u Y2F0ZW5hdGVkIHRvZ2V0aGVyLCBzbyB3ZSB1bmNvbXByZXNzIGluIGEgbG9v cC4gICovCi0gIHN0cm0uemFsbG9jID0gTlVMTDsKLSAgc3RybS56ZnJlZSA9 IE5VTEw7Ci0gIHN0cm0ub3BhcXVlID0gTlVMTDsKLSAgc3RybS5hdmFpbF9p biA9IGNvbXByZXNzZWRfc2l6ZSAtIGhlYWRlcl9zaXplOwotICBzdHJtLm5l eHRfaW4gPSAoQnl0ZWYqKSBjb21wcmVzc2VkX2J1ZmZlciArIGhlYWRlcl9z aXplOwotICBzdHJtLmF2YWlsX291dCA9IHVuY29tcHJlc3NlZF9zaXplOwot ICB1bmNvbXByZXNzZWRfYnVmZmVyID0gb2JzdGFja19hbGxvYyAoJm9iamZp bGUtPm9iamZpbGVfb2JzdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZF9zaXplKTsKLSAgcmMgPSBp bmZsYXRlSW5pdCAoJnN0cm0pOwotICB3aGlsZSAoc3RybS5hdmFpbF9pbiA+ IDApCi0gICAgewotICAgICAgaWYgKHJjICE9IFpfT0spCi0gICAgICAgIGVy cm9yIChfKCJEd2FyZiBFcnJvcjogc2V0dGluZyB1cCBEV0FSRiB1bmNvbXBy ZXNzaW9uIGluICclcyc6ICVkIiksCi0gICAgICAgICAgICAgICBiZmRfZ2V0 X2ZpbGVuYW1lIChhYmZkKSwgcmMpOwotICAgICAgc3RybS5uZXh0X291dCA9 ICgoQnl0ZWYqKSB1bmNvbXByZXNzZWRfYnVmZmVyCi0gICAgICAgICAgICAg ICAgICAgICAgICsgKHVuY29tcHJlc3NlZF9zaXplIC0gc3RybS5hdmFpbF9v dXQpKTsKLSAgICAgIHJjID0gaW5mbGF0ZSAoJnN0cm0sIFpfRklOSVNIKTsK LSAgICAgIGlmIChyYyAhPSBaX1NUUkVBTV9FTkQpCi0gICAgICAgIGVycm9y IChfKCJEd2FyZiBFcnJvcjogemxpYiBlcnJvciB1bmNvbXByZXNzaW5nIGZy b20gJyVzJzogJWQiKSwKLSAgICAgICAgICAgICAgIGJmZF9nZXRfZmlsZW5h bWUgKGFiZmQpLCByYyk7Ci0gICAgICByYyA9IGluZmxhdGVSZXNldCAoJnN0 cm0pOwotICAgIH0KLSAgcmMgPSBpbmZsYXRlRW5kICgmc3RybSk7Ci0gIGlm IChyYyAhPSBaX09LCi0gICAgICB8fCBzdHJtLmF2YWlsX291dCAhPSAwKQot ICAgIGVycm9yIChfKCJEd2FyZiBFcnJvcjogY29uY2x1ZGluZyBEV0FSRiB1 bmNvbXByZXNzaW9uIGluICclcyc6ICVkIiksCi0gICAgICAgICAgIGJmZF9n ZXRfZmlsZW5hbWUgKGFiZmQpLCByYyk7Ci0KLSAgeGZyZWUgKGNvbXByZXNz ZWRfYnVmZmVyKTsKLSAgKm91dGJ1ZiA9IHVuY29tcHJlc3NlZF9idWZmZXI7 Ci0gICpvdXRzaXplID0gdW5jb21wcmVzc2VkX3NpemU7Ci0jZW5kaWYKLX0K LQotCi0vKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgc2VjdGlvbiBhdCBP RkZTRVQgYW5kIG9mIHNpemUgU0laRSBmcm9tIHRoZQotICAgb2JqZWN0IGZp bGUgc3BlY2lmaWVkIGJ5IE9CSkZJTEUgaW50byB0aGUgb2JqZmlsZV9vYnN0 YWNrIGFuZCByZXR1cm4gaXQuCi0gICBJZiB0aGUgc2VjdGlvbiBpcyBjb21w cmVzc2VkLCB1bmNvbXByZXNzIGl0IGJlZm9yZSByZXR1cm5pbmcuICAqLwot Ci1nZGJfYnl0ZSAqCi1kd2FyZjJfcmVhZF9zZWN0aW9uIChzdHJ1Y3Qgb2Jq ZmlsZSAqb2JqZmlsZSwgYXNlY3Rpb24gKnNlY3RwKQotewotICBiZmQgKmFi ZmQgPSBvYmpmaWxlLT5vYmZkOwotICBnZGJfYnl0ZSAqYnVmLCAqcmV0YnVm OwotICBiZmRfc2l6ZV90eXBlIHNpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6 ZSAoc2VjdHApOwotICB1bnNpZ25lZCBjaGFyIGhlYWRlcls0XTsKLQotICBp ZiAoc2l6ZSA9PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIENoZWNr IGlmIHRoZSBmaWxlIGhhcyBhIDQtYnl0ZSBoZWFkZXIgaW5kaWNhdGluZyBj b21wcmVzc2lvbi4gICovCi0gIGlmIChzaXplID4gc2l6ZW9mIChoZWFkZXIp Ci0gICAgICAmJiBiZmRfc2VlayAoYWJmZCwgc2VjdHAtPmZpbGVwb3MsIFNF RUtfU0VUKSA9PSAwCi0gICAgICAmJiBiZmRfYnJlYWQgKGhlYWRlciwgc2l6 ZW9mIChoZWFkZXIpLCBhYmZkKSA9PSBzaXplb2YgKGhlYWRlcikpCi0gICAg ewotICAgICAgLyogVXBvbiBkZWNvbXByZXNzaW9uLCB1cGRhdGUgdGhlIGJ1 ZmZlciBhbmQgaXRzIHNpemUuICAqLwotICAgICAgaWYgKHN0cm5jbXAgKGhl YWRlciwgIlpMSUIiLCBzaXplb2YgKGhlYWRlcikpID09IDApCi0gICAgICAg IHsKLSAgICAgICAgICB6bGliX2RlY29tcHJlc3Nfc2VjdGlvbiAob2JqZmls ZSwgc2VjdHAsICZidWYsICZzaXplKTsKLSAgICAgICAgICBkd2FyZjJfcmVz aXplX3NlY3Rpb24gKHNlY3RwLCBzaXplKTsKLSAgICAgICAgICByZXR1cm4g YnVmOwotICAgICAgICB9Ci0gICAgfQotCi0gIC8qIElmIHdlIGdldCBoZXJl LCB3ZSBhcmUgYSBub3JtYWwsIG5vdC1jb21wcmVzc2VkIHNlY3Rpb24uICAq LwotICBidWYgPSBvYnN0YWNrX2FsbG9jICgmb2JqZmlsZS0+b2JqZmlsZV9v YnN0YWNrLCBzaXplKTsKLSAgLyogV2hlbiBkZWJ1Z2dpbmcgLm8gZmlsZXMs IHdlIG1heSBuZWVkIHRvIGFwcGx5IHJlbG9jYXRpb25zOyBzZWUKLSAgICAg aHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMDItMDQv bXNnMDAxMzYuaHRtbCAuCi0gICAgIFdlIG5ldmVyIGNvbXByZXNzIHNlY3Rp b25zIGluIC5vIGZpbGVzLCBzbyB3ZSBvbmx5IG5lZWQgdG8KLSAgICAgdHJ5 IHRoaXMgd2hlbiB0aGUgc2VjdGlvbiBpcyBub3QgY29tcHJlc3NlZC4gICov Ci0gIHJldGJ1ZiA9IHN5bWZpbGVfcmVsb2NhdGVfZGVidWdfc2VjdGlvbiAo YWJmZCwgc2VjdHAsIGJ1Zik7Ci0gIGlmIChyZXRidWYgIT0gTlVMTCkKLSAg ICByZXR1cm4gcmV0YnVmOwotCi0gIGlmIChiZmRfc2VlayAoYWJmZCwgc2Vj dHAtPmZpbGVwb3MsIFNFRUtfU0VUKSAhPSAwCi0gICAgICB8fCBiZmRfYnJl YWQgKGJ1Ziwgc2l6ZSwgYWJmZCkgIT0gc2l6ZSkKLSAgICBlcnJvciAoXygi RHdhcmYgRXJyb3I6IENhbid0IHJlYWQgRFdBUkYgZGF0YSBmcm9tICclcyci KSwKLQkgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZkKSk7Ci0KLSAgcmV0dXJu IGJ1ZjsKLX0KLQogLyogSW4gRFdBUkYgdmVyc2lvbiAyLCB0aGUgZGVzY3Jp cHRpb24gb2YgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcwogICAgc3Rv cmVkIGluIGEgc2VwYXJhdGUgLmRlYnVnX2FiYnJldiBzZWN0aW9uLiAgQmVm b3JlIHdlIHJlYWQgYW55CiAgICBkaWVzIGZyb20gYSBzZWN0aW9uIHdlIHJl YWQgaW4gYWxsIGFiYnJldmlhdGlvbnMgYW5kIGluc3RhbGwgdGhlbQpAQCAt NTY0Nyw3ICs1NjA5LDcgQEAgZHdhcmYyX3JlYWRfYWJicmV2cyAoYmZkICph YmZkLCBzdHJ1Y3QgZAogICBtZW1zZXQgKGN1LT5kd2FyZjJfYWJicmV2cywg MCwKICAgICAgICAgICBBQkJSRVZfSEFTSF9TSVpFICogc2l6ZW9mIChzdHJ1 Y3QgYWJicmV2X2luZm8gKikpOwogCi0gIGFiYnJldl9wdHIgPSBkd2FyZjJf cGVyX29iamZpbGUtPmFiYnJldl9idWZmZXIgKyBjdV9oZWFkZXItPmFiYnJl dl9vZmZzZXQ7CisgIGFiYnJldl9wdHIgPSBkd2FyZjJfcGVyX29iamZpbGUt PmFiYnJldi5idWZmZXIgKyBjdV9oZWFkZXItPmFiYnJldl9vZmZzZXQ7CiAg IGFiYnJldl9udW1iZXIgPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAoYWJmZCwg YWJicmV2X3B0ciwgJmJ5dGVzX3JlYWQpOwogICBhYmJyZXZfcHRyICs9IGJ5 dGVzX3JlYWQ7CiAKQEAgLTU3MTksOCArNTY4MSw4IEBAIGR3YXJmMl9yZWFk X2FiYnJldnMgKGJmZCAqYWJmZCwgc3RydWN0IGQKICAgICAgICAgIGFscmVh ZHkgcmVhZCAod2hpY2ggbWVhbnMgd2UgYXJlIGFib3V0IHRvIHJlYWQgdGhl IGFiYnJldmlhdGlvbnMKICAgICAgICAgIGZvciB0aGUgbmV4dCBjb21waWxl IHVuaXQpIG9yIGlmIHRoZSBlbmQgb2YgdGhlIGFiYnJldmlhdGlvbgogICAg ICAgICAgdGFibGUgaXMgcmVhY2hlZC4gICovCi0gICAgICBpZiAoKHVuc2ln bmVkIGludCkgKGFiYnJldl9wdHIgLSBkd2FyZjJfcGVyX29iamZpbGUtPmFi YnJldl9idWZmZXIpCi0JICA+PSBkd2FyZjJfcGVyX29iamZpbGUtPmFiYnJl dl9zaXplKQorICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpIChhYmJyZXZfcHRy IC0gZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuYnVmZmVyKQorCSAgPj0g ZHdhcmYyX3Blcl9vYmpmaWxlLT5hYmJyZXYuc2l6ZSkKIAlicmVhazsKICAg ICAgIGFiYnJldl9udW1iZXIgPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAoYWJm ZCwgYWJicmV2X3B0ciwgJmJ5dGVzX3JlYWQpOwogICAgICAgYWJicmV2X3B0 ciArPSBieXRlc19yZWFkOwpAQCAtNjAzOCw3ICs2MDAwLDcgQEAgcmVhZF9w YXJ0aWFsX2RpZSAoc3RydWN0IHBhcnRpYWxfZGllX2luZgogCiAgIG1lbXNl dCAocGFydF9kaWUsIDAsIHNpemVvZiAoc3RydWN0IHBhcnRpYWxfZGllX2lu Zm8pKTsKIAotICBwYXJ0X2RpZS0+b2Zmc2V0ID0gaW5mb19wdHIgLSBkd2Fy ZjJfcGVyX29iamZpbGUtPmluZm9fYnVmZmVyOworICBwYXJ0X2RpZS0+b2Zm c2V0ID0gaW5mb19wdHIgLSBkd2FyZjJfcGVyX29iamZpbGUtPmluZm8uYnVm ZmVyOwogCiAgIGluZm9fcHRyICs9IGFiYnJldl9sZW47CiAKQEAgLTYxNTEs NyArNjExMyw3IEBAIHJlYWRfcGFydGlhbF9kaWUgKHN0cnVjdCBwYXJ0aWFs X2RpZV9pbmYKIAkgIGlmIChhdHRyLmZvcm0gPT0gRFdfRk9STV9yZWZfYWRk cikKIAkgICAgY29tcGxhaW50ICgmc3ltZmlsZV9jb21wbGFpbnRzLCBfKCJp Z25vcmluZyBhYnNvbHV0ZSBEV19BVF9zaWJsaW5nIikpOwogCSAgZWxzZQot CSAgICBwYXJ0X2RpZS0+c2libGluZyA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+ aW5mb19idWZmZXIKKwkgICAgcGFydF9kaWUtPnNpYmxpbmcgPSBkd2FyZjJf cGVyX29iamZpbGUtPmluZm8uYnVmZmVyCiAJICAgICAgKyBkd2FyZjJfZ2V0 X3JlZl9kaWVfb2Zmc2V0ICgmYXR0cik7CiAJICBicmVhazsKICAgICAgICAg Y2FzZSBEV19BVF9zdG10X2xpc3Q6CkBAIC02MjY3LDcgKzYyMjksNyBAQCBm aW5kX3BhcnRpYWxfZGllICh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzCiAJICBk d2FyZjJfcmVhZF9hYmJyZXZzIChwZXJfY3UtPmN1LT5vYmpmaWxlLT5vYmZk LCBwZXJfY3UtPmN1KTsKIAkgIGJhY2tfdG8gPSBtYWtlX2NsZWFudXAgKGR3 YXJmMl9mcmVlX2FiYnJldl90YWJsZSwgcGVyX2N1LT5jdSk7CiAJfQotICAg ICAgaW5mb19wdHIgPSAoZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZvX2J1ZmZl cgorICAgICAgaW5mb19wdHIgPSAoZHdhcmYyX3Blcl9vYmpmaWxlLT5pbmZv LmJ1ZmZlcgogCQkgICsgcGVyX2N1LT5jdS0+aGVhZGVyLm9mZnNldAogCQkg ICsgcGVyX2N1LT5jdS0+aGVhZGVyLmZpcnN0X2RpZV9vZmZzZXQpOwogICAg ICAgYWJicmV2ID0gcGVla19kaWVfYWJicmV2IChpbmZvX3B0ciwgJmJ5dGVz X3JlYWQsIHBlcl9jdS0+Y3UpOwpAQCAtNjM0Myw3ICs2MzA1LDcgQEAgcmVh ZF9mdWxsX2RpZSAoc3RydWN0IGRpZV9pbmZvICoqZGllcCwgYgogICBzdHJ1 Y3QgYWJicmV2X2luZm8gKmFiYnJldjsKICAgc3RydWN0IGRpZV9pbmZvICpk aWU7CiAKLSAgb2Zmc2V0ID0gaW5mb19wdHIgLSBkd2FyZjJfcGVyX29iamZp bGUtPmluZm9fYnVmZmVyOworICBvZmZzZXQgPSBpbmZvX3B0ciAtIGR3YXJm Ml9wZXJfb2JqZmlsZS0+aW5mby5idWZmZXI7CiAgIGFiYnJldl9udW1iZXIg PSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAoYWJmZCwgaW5mb19wdHIsICZieXRl c19yZWFkKTsKICAgaW5mb19wdHIgKz0gYnl0ZXNfcmVhZDsKICAgaWYgKCFh YmJyZXZfbnVtYmVyKQpAQCAtNjc3OSwyMiArNjc0MSwyMiBAQCByZWFkX2lu ZGlyZWN0X3N0cmluZyAoYmZkICphYmZkLCBnZGJfYnl0CiB7CiAgIExPTkdF U1Qgc3RyX29mZnNldCA9IHJlYWRfb2Zmc2V0IChhYmZkLCBidWYsIGN1X2hl YWRlciwgYnl0ZXNfcmVhZF9wdHIpOwogCi0gIGlmIChkd2FyZjJfcGVyX29i amZpbGUtPnN0cl9idWZmZXIgPT0gTlVMTCkKKyAgaWYgKGR3YXJmMl9wZXJf b2JqZmlsZS0+c3RyLmJ1ZmZlciA9PSBOVUxMKQogICAgIHsKICAgICAgIGVy cm9yIChfKCJEV19GT1JNX3N0cnAgdXNlZCB3aXRob3V0IC5kZWJ1Z19zdHIg c2VjdGlvbiBbaW4gbW9kdWxlICVzXSIpLAogCQkgICAgICBiZmRfZ2V0X2Zp bGVuYW1lIChhYmZkKSk7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0g IGlmIChzdHJfb2Zmc2V0ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyX3Np emUpCisgIGlmIChzdHJfb2Zmc2V0ID49IGR3YXJmMl9wZXJfb2JqZmlsZS0+ c3RyLnNpemUpCiAgICAgewogICAgICAgZXJyb3IgKF8oIkRXX0ZPUk1fc3Ry cCBwb2ludGluZyBvdXRzaWRlIG9mIC5kZWJ1Z19zdHIgc2VjdGlvbiBbaW4g bW9kdWxlICVzXSIpLAogCQkgICAgICBiZmRfZ2V0X2ZpbGVuYW1lIChhYmZk KSk7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgIGdkYl9hc3NlcnQg KEhPU1RfQ0hBUl9CSVQgPT0gOCk7Ci0gIGlmIChkd2FyZjJfcGVyX29iamZp bGUtPnN0cl9idWZmZXJbc3RyX29mZnNldF0gPT0gJ1wwJykKKyAgaWYgKGR3 YXJmMl9wZXJfb2JqZmlsZS0+c3RyLmJ1ZmZlcltzdHJfb2Zmc2V0XSA9PSAn XDAnKQogICAgIHJldHVybiBOVUxMOwotICByZXR1cm4gKGNoYXIgKikgKGR3 YXJmMl9wZXJfb2JqZmlsZS0+c3RyX2J1ZmZlciArIHN0cl9vZmZzZXQpOwor ICByZXR1cm4gKGNoYXIgKikgKGR3YXJmMl9wZXJfb2JqZmlsZS0+c3RyLmJ1 ZmZlciArIHN0cl9vZmZzZXQpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9u ZwpAQCAtNzA4MSw3ICs3MDQzLDcgQEAgZHdhcmZfZGVjb2RlX2xpbmVfaGVh ZGVyICh1bnNpZ25lZCBpbnQgbwogICBpbnQgaTsKICAgY2hhciAqY3VyX2Rp ciwgKmN1cl9maWxlOwogCi0gIGlmIChkd2FyZjJfcGVyX29iamZpbGUtPmxp bmVfYnVmZmVyID09IE5VTEwpCisgIGlmIChkd2FyZjJfcGVyX29iamZpbGUt PmxpbmUuYnVmZmVyID09IE5VTEwpCiAgICAgewogICAgICAgY29tcGxhaW50 ICgmc3ltZmlsZV9jb21wbGFpbnRzLCBfKCJtaXNzaW5nIC5kZWJ1Z19saW5l IHNlY3Rpb24iKSk7CiAgICAgICByZXR1cm4gMDsKQEAgLTcwODksNyArNzA1 MSw3IEBAIGR3YXJmX2RlY29kZV9saW5lX2hlYWRlciAodW5zaWduZWQgaW50 IG8KIAogICAvKiBNYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCB0aGVyZSdzIHJv b20gZm9yIHRoZSB0b3RhbF9sZW5ndGggZmllbGQuCiAgICAgIFRoYXQgY291 bGQgYmUgMTIgYnl0ZXMgbG9uZywgYnV0IHdlJ3JlIGp1c3QgZ29pbmcgdG8g ZnVkZ2UgdGhhdC4gICovCi0gIGlmIChvZmZzZXQgKyA0ID49IGR3YXJmMl9w ZXJfb2JqZmlsZS0+bGluZV9zaXplKQorICBpZiAob2Zmc2V0ICsgNCA+PSBk d2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSkKICAgICB7CiAgICAgICBk d2FyZjJfc3RhdGVtZW50X2xpc3RfZml0c19pbl9saW5lX251bWJlcl9zZWN0 aW9uX2NvbXBsYWludCAoKTsKICAgICAgIHJldHVybiAwOwpAQCAtNzEwMCwx NSArNzA2MiwxNSBAQCBkd2FyZl9kZWNvZGVfbGluZV9oZWFkZXIgKHVuc2ln bmVkIGludCBvCiAgIGJhY2tfdG8gPSBtYWtlX2NsZWFudXAgKChtYWtlX2Ns ZWFudXBfZnR5cGUgKikgZnJlZV9saW5lX2hlYWRlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHZvaWQgKikgbGgpOwogCi0gIGxpbmVfcHRyID0g ZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lX2J1ZmZlciArIG9mZnNldDsKKyAg bGluZV9wdHIgPSBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuYnVmZmVyICsg b2Zmc2V0OwogCiAgIC8qIFJlYWQgaW4gdGhlIGhlYWRlci4gICovCiAgIGxo LT50b3RhbF9sZW5ndGggPSAKICAgICByZWFkX2NoZWNrZWRfaW5pdGlhbF9s ZW5ndGhfYW5kX29mZnNldCAoYWJmZCwgbGluZV9wdHIsICZjdS0+aGVhZGVy LAogCQkJCQkgICAgJmJ5dGVzX3JlYWQsICZvZmZzZXRfc2l6ZSk7CiAgIGxp bmVfcHRyICs9IGJ5dGVzX3JlYWQ7Ci0gIGlmIChsaW5lX3B0ciArIGxoLT50 b3RhbF9sZW5ndGggPiAoZHdhcmYyX3Blcl9vYmpmaWxlLT5saW5lX2J1ZmZl cgotCQkJCSAgICAgKyBkd2FyZjJfcGVyX29iamZpbGUtPmxpbmVfc2l6ZSkp CisgIGlmIChsaW5lX3B0ciArIGxoLT50b3RhbF9sZW5ndGggPiAoZHdhcmYy X3Blcl9vYmpmaWxlLT5saW5lLmJ1ZmZlcgorCQkJCSAgICAgKyBkd2FyZjJf cGVyX29iamZpbGUtPmxpbmUuc2l6ZSkpCiAgICAgewogICAgICAgZHdhcmYy X3N0YXRlbWVudF9saXN0X2ZpdHNfaW5fbGluZV9udW1iZXJfc2VjdGlvbl9j b21wbGFpbnQgKCk7CiAgICAgICByZXR1cm4gMDsKQEAgLTcxNjQsOCArNzEy Niw4IEBAIGR3YXJmX2RlY29kZV9saW5lX2hlYWRlciAodW5zaWduZWQgaW50 IG8KICAgbGluZV9wdHIgKz0gYnl0ZXNfcmVhZDsKICAgbGgtPnN0YXRlbWVu dF9wcm9ncmFtX3N0YXJ0ID0gbGluZV9wdHI7IAogCi0gIGlmIChsaW5lX3B0 ciA+IChkd2FyZjJfcGVyX29iamZpbGUtPmxpbmVfYnVmZmVyCi0JCSAgKyBk d2FyZjJfcGVyX29iamZpbGUtPmxpbmVfc2l6ZSkpCisgIGlmIChsaW5lX3B0 ciA+IChkd2FyZjJfcGVyX29iamZpbGUtPmxpbmUuYnVmZmVyCisJCSAgKyBk d2FyZjJfcGVyX29iamZpbGUtPmxpbmUuc2l6ZSkpCiAgICAgY29tcGxhaW50 ICgmc3ltZmlsZV9jb21wbGFpbnRzLAogCSAgICAgICBfKCJsaW5lIG51bWJl ciBpbmZvIGhlYWRlciBkb2Vzbid0IGZpdCBpbiBgLmRlYnVnX2xpbmUnIHNl Y3Rpb24iKSk7CiAKQEAgLTEwMTQ1LDcgKzEwMTA3LDcgQEAgZHdhcmZfZGVj b2RlX21hY3JvcyAoc3RydWN0IGxpbmVfaGVhZGVyIAogICBlbnVtIGR3YXJm X21hY2luZm9fcmVjb3JkX3R5cGUgbWFjaW5mb190eXBlOwogICBpbnQgYXRf Y29tbWFuZGxpbmU7CiAKLSAgaWYgKGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFj aW5mb19idWZmZXIgPT0gTlVMTCkKKyAgaWYgKGR3YXJmMl9wZXJfb2JqZmls ZS0+bWFjaW5mby5idWZmZXIgPT0gTlVMTCkKICAgICB7CiAgICAgICBjb21w bGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsIF8oIm1pc3NpbmcgLmRlYnVn X21hY2luZm8gc2VjdGlvbiIpKTsKICAgICAgIHJldHVybjsKQEAgLTEwMTYy LDkgKzEwMTI0LDkgQEAgZHdhcmZfZGVjb2RlX21hY3JvcyAoc3RydWN0IGxp bmVfaGVhZGVyIAogICAgICBDVVJSRU5UX0ZJTEUgYWNjb3JkaW5nbHkgc28g dGhhdCBhbnkgbWFjcm8gZGVmaW5pdGlvbiBmb3VuZCBiZWZvcmUgdGhlCiAg ICAgIGZpcnN0IERXX01BQ0lORk9fc3RhcnRfZmlsZSBjYW4gc3RpbGwgYmUg YXNzb2NpYXRlZCB0byB0aGUgYmFzZSBmaWxlLiAgKi8KIAotICBtYWNfcHRy ID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZvX2J1ZmZlciArIG9mZnNl dDsKLSAgbWFjX2VuZCA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5mb19i dWZmZXIKLSAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5mb19zaXpl OworICBtYWNfcHRyID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5tYWNpbmZvLmJ1 ZmZlciArIG9mZnNldDsKKyAgbWFjX2VuZCA9IGR3YXJmMl9wZXJfb2JqZmls ZS0+bWFjaW5mby5idWZmZXIKKyAgICArIGR3YXJmMl9wZXJfb2JqZmlsZS0+ bWFjaW5mby5zaXplOwogCiAgIGRvCiAgICAgewpAQCAtMTAyNDEsNyArMTAy MDMsNyBAQCBkd2FyZl9kZWNvZGVfbWFjcm9zIChzdHJ1Y3QgbGluZV9oZWFk ZXIgCiAgICAgIGNvbW1hbmQtbGluZSBtYWNybyBkZWZpbml0aW9ucy91bmRl ZmluaXRpb25zLiAgVGhpcyBmbGFnIGlzIHVuc2V0IHdoZW4gd2UKICAgICAg cmVhY2ggdGhlIGZpcnN0IERXX01BQ0lORk9fc3RhcnRfZmlsZSBlbnRyeS4g ICovCiAKLSAgbWFjX3B0ciA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+bWFjaW5m b19idWZmZXIgKyBvZmZzZXQ7CisgIG1hY19wdHIgPSBkd2FyZjJfcGVyX29i amZpbGUtPm1hY2luZm8uYnVmZmVyICsgb2Zmc2V0OwogCiAgIC8qIERldGVy bWluZXMgaWYgR0RCIGlzIHN0aWxsIGJlZm9yZSBmaXJzdCBEV19NQUNJTkZP X3N0YXJ0X2ZpbGUuICBJZiB0cnVlCiAgICAgIEdEQiBpcyBzdGlsbCByZWFk aW5nIHRoZSBkZWZpbml0aW9ucyBmcm9tIGNvbW1hbmQgbGluZS4gIEZpcnN0 CkBAIC0xMDQ1OSw3ICsxMDQyMSw3IEBAIGR3YXJmMl9zeW1ib2xfbWFya19j b21wdXRlZCAoc3RydWN0IGF0dHIKICAgICAgIC8qICIuZGVidWdfbG9jIiBt YXkgbm90IGV4aXN0IGF0IGFsbCwgb3IgdGhlIG9mZnNldCBtYXkgYmUgb3V0 c2lkZQogCSB0aGUgc2VjdGlvbi4gIElmIHNvLCBmYWxsIHRocm91Z2ggdG8g dGhlIGNvbXBsYWludCBpbiB0aGUKIAkgb3RoZXIgYnJhbmNoLiAgKi8KLSAg ICAgICYmIERXX1VOU05EIChhdHRyKSA8IGR3YXJmMl9wZXJfb2JqZmlsZS0+ bG9jX3NpemUpCisgICAgICAmJiBEV19VTlNORCAoYXR0cikgPCBkd2FyZjJf cGVyX29iamZpbGUtPmxvYy5zaXplKQogICAgIHsKICAgICAgIHN0cnVjdCBk d2FyZjJfbG9jbGlzdF9iYXRvbiAqYmF0b247CiAKQEAgLTEwNDcwLDggKzEw NDMyLDggQEAgZHdhcmYyX3N5bWJvbF9tYXJrX2NvbXB1dGVkIChzdHJ1Y3Qg YXR0cgogCiAgICAgICAvKiBXZSBkb24ndCBrbm93IGhvdyBsb25nIHRoZSBs b2NhdGlvbiBsaXN0IGlzLCBidXQgbWFrZSBzdXJlIHdlCiAJIGRvbid0IHJ1 biBvZmYgdGhlIGVkZ2Ugb2YgdGhlIHNlY3Rpb24uICAqLwotICAgICAgYmF0 b24tPnNpemUgPSBkd2FyZjJfcGVyX29iamZpbGUtPmxvY19zaXplIC0gRFdf VU5TTkQgKGF0dHIpOwotICAgICAgYmF0b24tPmRhdGEgPSBkd2FyZjJfcGVy X29iamZpbGUtPmxvY19idWZmZXIgKyBEV19VTlNORCAoYXR0cik7CisgICAg ICBiYXRvbi0+c2l6ZSA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+bG9jLnNpemUg LSBEV19VTlNORCAoYXR0cik7CisgICAgICBiYXRvbi0+ZGF0YSA9IGR3YXJm Ml9wZXJfb2JqZmlsZS0+bG9jLmJ1ZmZlciArIERXX1VOU05EIChhdHRyKTsK ICAgICAgIGJhdG9uLT5iYXNlX2FkZHJlc3MgPSBjdS0+YmFzZV9hZGRyZXNz OwogICAgICAgaWYgKGN1LT5iYXNlX2tub3duID09IDApCiAJY29tcGxhaW50 ICgmc3ltZmlsZV9jb21wbGFpbnRzLApAQCAtMTA1NDAsNyArMTA1MDIsNyBA QCBkd2FyZjJfcGVyX2N1X2FkZHJfc2l6ZSAoc3RydWN0IGR3YXJmMl9wCiAg ICAgICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IHBlcl9jdS0+cHN5bXRh Yi0+b2JqZmlsZTsKICAgICAgIHN0cnVjdCBkd2FyZjJfcGVyX29iamZpbGUg KnBlcl9vYmpmaWxlCiAJPSBvYmpmaWxlX2RhdGEgKG9iamZpbGUsIGR3YXJm Ml9vYmpmaWxlX2RhdGFfa2V5KTsKLSAgICAgIGdkYl9ieXRlICppbmZvX3B0 ciA9IHBlcl9vYmpmaWxlLT5pbmZvX2J1ZmZlciArIHBlcl9jdS0+b2Zmc2V0 OworICAgICAgZ2RiX2J5dGUgKmluZm9fcHRyID0gcGVyX29iamZpbGUtPmlu Zm8uYnVmZmVyICsgcGVyX2N1LT5vZmZzZXQ7CiAKICAgICAgIHN0cnVjdCBj b21wX3VuaXRfaGVhZCBjdV9oZWFkZXI7CiAgICAgICBtZW1zZXQgKCZjdV9o ZWFkZXIsIDAsIHNpemVvZiBjdV9oZWFkZXIpOwpAQCAtMTA5MzMsMTIgKzEw ODk1LDQ5IEBAIHNob3dfZHdhcmYyX2NtZCAoY2hhciAqYXJncywgaW50IGZy b21fdHQKICAgY21kX3Nob3dfbGlzdCAoc2hvd19kd2FyZjJfY21kbGlzdCwg ZnJvbV90dHksICIiKTsKIH0KIAorLyogSWYgc2VjdGlvbiBkZXNjcmliZWQg YnkgSU5GTyB3YXMgbW1hcGVkLCBtdW5tYXAgaXQgbm93LiAgKi8KKworc3Rh dGljIHZvaWQKK211bm1hcF9zZWN0aW9uX2J1ZmZlciAoc3RydWN0IGR3YXJm Ml9zZWN0aW9uX2luZm8gKmluZm8pCit7CisgIGlmIChpbmZvLT53YXNfbW1h cGVkKQorICAgIHsKKyNpZmRlZiBIQVZFX01NQVAKKyAgICAgIGludHB0cl90 IGJlZ2luID0gKGludHB0cl90KSBpbmZvLT5idWZmZXI7CisgICAgICBpbnRw dHJfdCBtYXBfYmVnaW4gPSBiZWdpbiAmIH4ocGFnZXNpemUgLSAxKTsKKyAg ICAgIHNpemVfdCBtYXBfbGVuZ3RoID0gaW5mby0+c2l6ZSArIGJlZ2luIC0g bWFwX2JlZ2luOworICAgICAgZ2RiX2Fzc2VydCAobXVubWFwICgodm9pZCAq KW1hcF9iZWdpbiwgbWFwX2xlbmd0aCkgPT0gMCk7CisjZWxzZQorICAgICAg LyogV2l0aG91dCBIQVZFX01NQVAsIHdlIHNob3VsZCBuZXZlciBiZSBoZXJl IHRvIGJlZ2luIHdpdGguICAqLworICAgICAgZ2RiX2Fzc2VydCAoMCk7Cisj ZW5kaWYKKyAgICB9Cit9CisKKy8qIG11bm1hcCBkZWJ1ZyBzZWN0aW9ucyBm b3IgT0JKRklMRSwgaWYgbmVjZXNzYXJ5LiAgKi8KKworc3RhdGljIHZvaWQK K2R3YXJmMl9wZXJfb2JqZmlsZV9jbGVhbnVwIChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSwgdm9pZCAqZCkKK3sKKyAgc3RydWN0IGR3YXJmMl9wZXJfb2Jq ZmlsZSAqZGF0YSA9IGQ7CisgIG11bm1hcF9zZWN0aW9uX2J1ZmZlciAoJmRh dGEtPmluZm8pOworICBtdW5tYXBfc2VjdGlvbl9idWZmZXIgKCZkYXRhLT5h YmJyZXYpOworICBtdW5tYXBfc2VjdGlvbl9idWZmZXIgKCZkYXRhLT5saW5l KTsKKyAgbXVubWFwX3NlY3Rpb25fYnVmZmVyICgmZGF0YS0+c3RyKTsKKyAg bXVubWFwX3NlY3Rpb25fYnVmZmVyICgmZGF0YS0+bWFjaW5mbyk7CisgIG11 bm1hcF9zZWN0aW9uX2J1ZmZlciAoJmRhdGEtPnJhbmdlcyk7CisgIG11bm1h cF9zZWN0aW9uX2J1ZmZlciAoJmRhdGEtPmxvYyk7CisgIG11bm1hcF9zZWN0 aW9uX2J1ZmZlciAoJmRhdGEtPmZyYW1lKTsKKyAgbXVubWFwX3NlY3Rpb25f YnVmZmVyICgmZGF0YS0+ZWhfZnJhbWUpOworfQorCiB2b2lkIF9pbml0aWFs aXplX2R3YXJmMl9yZWFkICh2b2lkKTsKIAogdm9pZAogX2luaXRpYWxpemVf ZHdhcmYyX3JlYWQgKHZvaWQpCiB7Ci0gIGR3YXJmMl9vYmpmaWxlX2RhdGFf a2V5ID0gcmVnaXN0ZXJfb2JqZmlsZV9kYXRhICgpOworICBkd2FyZjJfb2Jq ZmlsZV9kYXRhX2tleQorICAgID0gcmVnaXN0ZXJfb2JqZmlsZV9kYXRhX3dp dGhfY2xlYW51cCAoZHdhcmYyX3Blcl9vYmpmaWxlX2NsZWFudXApOwogCiAg IGFkZF9wcmVmaXhfY21kICgiZHdhcmYyIiwgY2xhc3NfbWFpbnRlbmFuY2Us IHNldF9kd2FyZjJfY21kLCBfKCJcCiBTZXQgRFdBUkYgMiBzcGVjaWZpYyB2 YXJpYWJsZXMuXG5cCkluZGV4OiBkd2FyZjItZnJhbWUuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2R3YXJm Mi1mcmFtZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUg LXAgLXUgLXIxLjg3IGR3YXJmMi1mcmFtZS5jCi0tLSBkd2FyZjItZnJhbWUu YwkzIEphbiAyMDA5IDA1OjU3OjUxIC0wMDAwCTEuODcKKysrIGR3YXJmMi1m cmFtZS5jCTI4IE1heSAyMDA5IDE2OjM4OjE4IC0wMDAwCkBAIC0xODk2LDE1 ICsxODk2LDkgQEAgZGVjb2RlX2ZyYW1lX2VudHJ5IChzdHJ1Y3QgY29tcF91 bml0ICp1bgogfQogDAogCi0vKiBGSVhNRToga2V0dGVuaXMvMjAwMzA1MDQ6 IFRoaXMgc3RpbGwgbmVlZHMgdG8gYmUgaW50ZWdyYXRlZCB3aXRoCi0gICBk d2FyZjJyZWFkLmMgaW4gYSBiZXR0ZXIgd2F5LiAgKi8KLQotLyogSW1wb3J0 ZWQgZnJvbSBkd2FyZjJyZWFkLmMuICAqLwotZXh0ZXJuIGFzZWN0aW9uICpk d2FyZl9mcmFtZV9zZWN0aW9uOwotZXh0ZXJuIGFzZWN0aW9uICpkd2FyZl9l aF9mcmFtZV9zZWN0aW9uOwotCiAvKiBJbXBvcnRlZCBmcm9tIGR3YXJmMnJl YWQuYy4gICovCi1leHRlcm4gZ2RiX2J5dGUgKmR3YXJmMl9yZWFkX3NlY3Rp b24gKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLCBhc2VjdGlvbiAqc2VjdHAp OworZXh0ZXJuIHZvaWQgZHdhcmYyX2dldF9zZWN0aW9uX2luZm8gKHN0cnVj dCBvYmpmaWxlICosIGNvbnN0IGNoYXIgKiwgYXNlY3Rpb24gKiosCisJCQkJ ICAgICBnZGJfYnl0ZSAqKiwgYmZkX3NpemVfdHlwZSAqKTsKIAogdm9pZAog ZHdhcmYyX2J1aWxkX2ZyYW1lX2luZm8gKHN0cnVjdCBvYmpmaWxlICpvYmpm aWxlKQpAQCAtMTkyMiwxNyArMTkxNiwxNSBAQCBkd2FyZjJfYnVpbGRfZnJh bWVfaW5mbyAoc3RydWN0IG9iamZpbGUgCiAKICAgLyogRmlyc3QgYWRkIHRo ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSAuZWhfZnJhbWUgc2VjdGlvbi4gIFRo YXQgd2F5LAogICAgICB0aGUgRkRFcyBmcm9tIHRoYXQgc2VjdGlvbiBhcmUg c2VhcmNoZWQgbGFzdC4gICovCi0gIGlmIChkd2FyZl9laF9mcmFtZV9zZWN0 aW9uKQorICBkd2FyZjJfZ2V0X3NlY3Rpb25faW5mbyAob2JqZmlsZSwgIi5l aF9mcmFtZSIsCisJCQkgICAmdW5pdC0+ZHdhcmZfZnJhbWVfc2VjdGlvbiwK KwkJCSAgICZ1bml0LT5kd2FyZl9mcmFtZV9idWZmZXIsCisJCQkgICAmdW5p dC0+ZHdhcmZfZnJhbWVfc2l6ZSk7CisgIGlmICh1bml0LT5kd2FyZl9mcmFt ZV9zaXplKQogICAgIHsKICAgICAgIGFzZWN0aW9uICpnb3QsICp0eHQ7CiAK ICAgICAgIHVuaXQtPmNpZSA9IE5VTEw7Ci0gICAgICB1bml0LT5kd2FyZl9m cmFtZV9idWZmZXIgPSBkd2FyZjJfcmVhZF9zZWN0aW9uIChvYmpmaWxlLAot CQkJCQkJICAgICAgZHdhcmZfZWhfZnJhbWVfc2VjdGlvbik7Ci0KLSAgICAg IHVuaXQtPmR3YXJmX2ZyYW1lX3NpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6 ZSAoZHdhcmZfZWhfZnJhbWVfc2VjdGlvbik7Ci0gICAgICB1bml0LT5kd2Fy Zl9mcmFtZV9zZWN0aW9uID0gZHdhcmZfZWhfZnJhbWVfc2VjdGlvbjsKLQog ICAgICAgLyogRklYTUU6IGtldHRlbmlzLzIwMDMwNjAyOiBUaGlzIGlzIHRo ZSBEV19FSF9QRV9kYXRhcmVsIGJhc2UKIAkgdGhhdCBpcyB1c2VkIGZvciB0 aGUgaTM4Ni9hbWQ2NCB0YXJnZXQsIHdoaWNoIGN1cnJlbnRseSBpcwogCSB0 aGUgb25seSB0YXJnZXQgaW4gR0NDIHRoYXQgc3VwcG9ydHMvdXNlcyB0aGUK QEAgLTE5NTIsMTMgKzE5NDQsMTMgQEAgZHdhcmYyX2J1aWxkX2ZyYW1lX2lu Zm8gKHN0cnVjdCBvYmpmaWxlIAogCWZyYW1lX3B0ciA9IGRlY29kZV9mcmFt ZV9lbnRyeSAodW5pdCwgZnJhbWVfcHRyLCAxKTsKICAgICB9CiAKLSAgaWYg KGR3YXJmX2ZyYW1lX3NlY3Rpb24pCisgIGR3YXJmMl9nZXRfc2VjdGlvbl9p bmZvIChvYmpmaWxlLCAiLmRlYnVnX2ZyYW1lIiwKKwkJCSAgICZ1bml0LT5k d2FyZl9mcmFtZV9zZWN0aW9uLAorCQkJICAgJnVuaXQtPmR3YXJmX2ZyYW1l X2J1ZmZlciwKKwkJCSAgICZ1bml0LT5kd2FyZl9mcmFtZV9zaXplKTsKKyAg aWYgKHVuaXQtPmR3YXJmX2ZyYW1lX3NpemUpCiAgICAgewogICAgICAgdW5p dC0+Y2llID0gTlVMTDsKLSAgICAgIHVuaXQtPmR3YXJmX2ZyYW1lX2J1ZmZl ciA9IGR3YXJmMl9yZWFkX3NlY3Rpb24gKG9iamZpbGUsCi0JCQkJCQkgICAg ICBkd2FyZl9mcmFtZV9zZWN0aW9uKTsKLSAgICAgIHVuaXQtPmR3YXJmX2Zy YW1lX3NpemUgPSBiZmRfZ2V0X3NlY3Rpb25fc2l6ZSAoZHdhcmZfZnJhbWVf c2VjdGlvbik7Ci0gICAgICB1bml0LT5kd2FyZl9mcmFtZV9zZWN0aW9uID0g ZHdhcmZfZnJhbWVfc2VjdGlvbjsKIAogICAgICAgZnJhbWVfcHRyID0gdW5p dC0+ZHdhcmZfZnJhbWVfYnVmZmVyOwogICAgICAgd2hpbGUgKGZyYW1lX3B0 ciA8IHVuaXQtPmR3YXJmX2ZyYW1lX2J1ZmZlciArIHVuaXQtPmR3YXJmX2Zy YW1lX3NpemUpCg== --00163631053bb20ca5046afbd888--