From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 128004 invoked by alias); 3 Oct 2016 19:07:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 127962 invoked by uid 89); 3 Oct 2016 19:07:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=richards, Richards, obtaining, sk:get_poi X-HELO: mail-it0-f43.google.com Received: from mail-it0-f43.google.com (HELO mail-it0-f43.google.com) (209.85.214.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 03 Oct 2016 19:07:41 +0000 Received: by mail-it0-f43.google.com with SMTP id 188so43303368iti.1 for ; Mon, 03 Oct 2016 12:07:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=G5+rAWUQNca/E6BSmIJGUP+dZExVC7Dok7LbOwrpXN4=; b=R+y0LymSOJ61Td4B7PPx+EULopVYQXcD0EF3fz3Owdt039nAErLMP8bB9hWHwpNW+A P5cxUu+s2jcJwJkFdKZWuyqEEd/lP9POimGy/vyfMHUV3kAY+GlVLiiusvLIdXM/IIeW hXw/leDa+21n32mymdUEYGFAu7yMkJKrE6d+DsbmwAKYNZ2//Vu9LKlCyF/5OGe6IfUb 0I7L78E9nJ0ajCiPnmv6GwNPnFz2cV2eTEKNdE9dBqALISsfP9MmxLPm+R7dl6JW8iuu i8KSM/yxsvsmCpkp5wKAe7HF+Av1PldIOBAVLY8LS6wAJ086yLzV/HJ+Ub/2IrizOXT/ YMLQ== X-Gm-Message-State: AA6/9RnNmFT8vTEIqIlEjlAkCle2v0bmrYY68Mh0h7jf2xsKSKQWGp/DQE/w+FxkjekJIK6924ksnleFDaQU+nNw X-Received: by 10.36.204.139 with SMTP id x133mr19768347itf.86.1475521659578; Mon, 03 Oct 2016 12:07:39 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.81.85 with HTTP; Mon, 3 Oct 2016 12:07:38 -0700 (PDT) In-Reply-To: <20160922115635.GB86459@kam.mff.cuni.cz> References: <20160922115635.GB86459@kam.mff.cuni.cz> From: Prathamesh Kulkarni Date: Mon, 03 Oct 2016 19:07:00 -0000 Message-ID: Subject: Re: [RFC] Extend ipa-bitwise-cp with pointer alignment propagation To: Jan Hubicka Cc: gcc Patches , Martin Jambor , Richard Biener Content-Type: multipart/mixed; boundary=94eb2c0603066139e7053dfaa813 X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg00106.txt.bz2 --94eb2c0603066139e7053dfaa813 Content-Type: text/plain; charset=UTF-8 Content-length: 4649 On 22 September 2016 at 17:26, Jan Hubicka wrote: >> Hi, >> The attached patch tries to extend ipa bits propagation to handle >> pointer alignment propagation. >> The patch just disables ipa-cp-alignment pass, I suppose we want to >> eventually remove it ? > > Yes, can you please verify that alignments it computes are monotonously > worse than those your new code computes and include the removal in the > next iteration of the patch? >> >> Bootstrap+tested on x86_64-unknown-linux-gnu. >> Cross-tested on arm*-*-*, aarch64*-*-*. >> Does the patch look OK ? >> >> Thanks, >> Prathamesh >> @@ -2258,8 +2271,8 @@ propagate_constants_accross_call (struct cgraph_edge *cs) >> &dest_plats->itself); >> ret |= propagate_context_accross_jump_function (cs, jump_func, i, >> &dest_plats->ctxlat); >> - ret |= propagate_alignment_accross_jump_function (cs, jump_func, >> - &dest_plats->alignment); >> +// ret |= propagate_alignment_accross_jump_function (cs, jump_func, >> +// &dest_plats->alignment); > > obviously we do not want commented out ocde.. > >> ret |= propagate_bits_accross_jump_function (cs, i, jump_func, >> &dest_plats->bits_lattice); >> ret |= propagate_aggs_accross_jump_function (cs, jump_func, >> diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c >> index 1629781..5cee27b 100644 >> --- a/gcc/ipa-prop.c >> +++ b/gcc/ipa-prop.c >> @@ -1701,6 +1701,16 @@ ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi, >> jfunc->bits.mask = 0; >> } >> } >> + else if (POINTER_TYPE_P (TREE_TYPE (arg))) >> + { >> + unsigned HOST_WIDE_INT bitpos; >> + unsigned align; >> + >> + jfunc->bits.known = true; >> + get_pointer_alignment_1 (arg, &align, &bitpos); >> + jfunc->bits.mask = wi::mask(TYPE_PRECISION (TREE_TYPE (arg)), false).and_not (align / BITS_PER_UNIT - 1); > > ... and long lines :) > >> + jfunc->bits.value = bitpos / BITS_PER_UNIT; >> + } >> else >> gcc_assert (!jfunc->bits.known); >> >> @@ -5534,7 +5544,7 @@ ipcp_update_bits (struct cgraph_node *node) >> next_parm = DECL_CHAIN (parm); >> >> if (!bits[i].known >> - || !INTEGRAL_TYPE_P (TREE_TYPE (parm)) >> + || !(INTEGRAL_TYPE_P (TREE_TYPE (parm)) || POINTER_TYPE_P (TREE_TYPE (parm))) > > I suppose eventually we may want to enable other types, too. > It does even make sense to propagate this on aggregates, but definitly on > vectors and complex numbers. > > Otherwise the patch seems fine to me (modulo Richard's comments) Hi, Sorry for late response, I was travelling. I tried to verify the alignments are monotonously worse with the attached patch (verify.diff), which asserts that alignment lattice is not better than bits lattice during each propagation step in propagate_constants_accross_call(). Does that look OK ? ipa-cp-alignment has better alignments than ipa-bit-cp in following cases: a) ipa_get_type() returns NULL: ipa-bits-cp sets lattice to bottom if ipa_get_type (param) returns NULL, for instance in case of K&R function, while ipa-cp-alignment doesn't look at param types, and can propagate alignments. The following assert: if (bits_lattice.bottom_p ()) gcc_assert (align_lattice.bottom_p()) triggered for 400.perlbench, 403.gcc, 456.hmmer and 481.wrf due to ipa_get_type() returning NULL. I am not really sure how to handle this case, since we need to know parameter's type during bits propagation for obtaining precision. b) This happens for attached test-case (test.i), which is a reduced (and slightly modified) test-case from 458.sjeng. Bits propagation sets lattice to bottom, while alignment propagation propagates . In bits_lattice::meet_with_1 m_mask = other_mask = 0x0fffffffffffffff0 m_value = 0x7 other_value = 0x8 In this case meet operation sets m_mask to: (m_mask | mask) | (m_value ^ other_value) = 0x0fffffffffffffff0 | (0xf) == 0x0ffffffffffffffff and hence the bits lattice is set to bottom. I suppose it doesn't matter for this case if bits propagation sets lattice to bottom, since propagating isn't really useful ? The attached patch (alignprop-4.diff) removes ipa-cp-alignment, and checks for misalign against old_misalgin and prints message in the dump file if they mismatch. Testing in progress. Thanks, Prathamesh > Honza --94eb2c0603066139e7053dfaa813 Content-Type: text/plain; charset=US-ASCII; name="verify.diff" Content-Disposition: attachment; filename="verify.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itufabb01 Content-length: 1839 ZGlmZiAtLWdpdCBhL2djYy9pcGEtY3AuYyBiL2djYy9pcGEtY3AuYwppbmRl eCA3N2RhNDg5Li5mZWU1MzBlIDEwMDY0NAotLS0gYS9nY2MvaXBhLWNwLmMK KysrIGIvZ2NjL2lwYS1jcC5jCkBAIC0xOTEwLDYgKzE5MTAsMjggQEAgcHJv cGFnYXRlX2NvbnRleHRfYWNjcm9zc19qdW1wX2Z1bmN0aW9uIChjZ3JhcGhf ZWRnZSAqY3MsCiAgIHJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkCit2 ZXJpZnlfYWxpZ25fd29yc2VfcCAoaXBjcF9wYXJhbV9sYXR0aWNlcyAqZGVz dF9wbGF0cykKK3sKKyAgaXBjcF9hbGlnbm1lbnRfbGF0dGljZSBhbGlnbl9s YXR0aWNlID0gZGVzdF9wbGF0cy0+YWxpZ25tZW50OworICBpcGNwX2JpdHNf bGF0dGljZSBiaXRzX2xhdHRpY2UgPSBkZXN0X3BsYXRzLT5iaXRzX2xhdHRp Y2U7CisKKyAgaWYgKGJpdHNfbGF0dGljZS50b3BfcCAoKSkKKyAgICBnY2Nf YXNzZXJ0IChhbGlnbl9sYXR0aWNlLnRvcF9wICgpIHx8IGFsaWduX2xhdHRp Y2UuYm90dG9tX3AgKCkpOworCisgIGVsc2UgaWYgKGJpdHNfbGF0dGljZS5i b3R0b21fcCAoKSkKKyAgICBnY2NfYXNzZXJ0IChhbGlnbl9sYXR0aWNlLmJv dHRvbV9wICgpKTsKKworICBlbHNlIGlmICgoIWFsaWduX2xhdHRpY2UuYm90 dG9tX3AgKCkgJiYgIWFsaWduX2xhdHRpY2UudG9wX3AgKCkpCisgICAgICAm JiBiaXRzX2xhdHRpY2UuY29uc3RhbnRfcCAoKSkKKyAgICB7CisgICAgICBi b29sIGFsaWduID0gYWxpZ25fbGF0dGljZS5hbGlnbjsKKyAgICAgIHVuc2ln bmVkIHRlbSA9IGJpdHNfbGF0dGljZS5nZXRfbWFzayAoKS50b191aHdpICgp OyAgIAorICAgICAgdW5zaWduZWQgYml0c19hbGlnbiA9IHRlbSAmIC10ZW07 CisgICAgICBnY2NfYXNzZXJ0IChhbGlnbiA8PSBiaXRzX2FsaWduKTsKKyAg ICB9Cit9CisKIC8qIFByb3BhZ2F0ZSBhbGlnbm1lbnRzIGFjcm9zcyBqdW1w IGZ1bmN0aW9uIEpGVU5DIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoCiAgICBl ZGdlIENTIGFuZCB1cGRhdGUgREVTVF9MQVQgYWNjb3JkaW5nbHkuICAqLwog CkBAIC0yNDUxLDYgKzI0NzMsOSBAQCBwcm9wYWdhdGVfY29uc3RhbnRzX2Fj Y3Jvc3NfY2FsbCAoc3RydWN0IGNncmFwaF9lZGdlICpjcykKIAkJCQkJCSAg ICAgICBqdW1wX2Z1bmMsIGRlc3RfcGxhdHMpOwogCSAgZWxzZQogCSAgICBy ZXQgfD0gZGVzdF9wbGF0cy0+bV92YWx1ZV9yYW5nZS5zZXRfdG9fYm90dG9t ICgpOworCisJICBpZiAoZmxhZ19pcGFfY3BfYWxpZ25tZW50ICYmIGZsYWdf aXBhX2JpdF9jcCkKKwkgICAgdmVyaWZ5X2FsaWduX3dvcnNlX3AgKGRlc3Rf cGxhdHMpOwogCX0KICAgICB9CiAgIGZvciAoOyBpIDwgcGFybXNfY291bnQ7 IGkrKykK --94eb2c0603066139e7053dfaa813 Content-Type: application/octet-stream; name="test.i" Content-Disposition: attachment; filename="test.i" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itufabah0 Content-length: 232 X19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQpIYW5kbGVQYXJ0 bmVyIChjaGFyICpwMSkKewogIF9fYnVpbHRpbl9wcmludGYgKCIlcCIsIHAx KTsKfQoKbWFpbigpIHsKICBjaGFyIGFbMTBdOwogIEhhbmRsZVBhcnRuZXIo YSArIDcpOwogIEhhbmRsZVBhcnRuZXIoYSArIDgpOwp9Cg== --94eb2c0603066139e7053dfaa813 Content-Type: text/plain; charset=US-ASCII; name="alignprop-4.diff" Content-Disposition: attachment; filename="alignprop-4.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itufalbr2 Content-length: 41265 ZGlmZiAtLWdpdCBhL2djYy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQK aW5kZXggMGUwMTU3Ny4uNjAxYTM0NyAxMDA2NDQKLS0tIGEvZ2NjL2NvbW1v bi5vcHQKKysrIGIvZ2NjL2NvbW1vbi5vcHQKQEAgLTE1NjUsMTAgKzE1NjUs NiBAQCBmaXBhLWNwLWNsb25lCiBDb21tb24gUmVwb3J0IFZhcihmbGFnX2lw YV9jcF9jbG9uZSkgT3B0aW1pemF0aW9uCiBQZXJmb3JtIGNsb25pbmcgdG8g bWFrZSBJbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24gc3Ry b25nZXIuCiAKLWZpcGEtY3AtYWxpZ25tZW50Ci1Db21tb24gUmVwb3J0IFZh cihmbGFnX2lwYV9jcF9hbGlnbm1lbnQpIE9wdGltaXphdGlvbgotUGVyZm9y bSBhbGlnbm1lbnQgZGlzY292ZXJ5IGFuZCBwcm9wYWdhdGlvbiB0byBtYWtl IEludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbiBzdHJvbmdl ci4KLQogZmlwYS1iaXQtY3AKIENvbW1vbiBSZXBvcnQgVmFyKGZsYWdfaXBh X2JpdF9jcCkgT3B0aW1pemF0aW9uCiBQZXJmb3JtIGludGVycHJvY2VkdXJh bCBiaXR3aXNlIGNvbnN0YW50IHByb3BhZ2F0aW9uLgpkaWZmIC0tZ2l0IGEv Z2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKaW5k ZXggNjc2NzQ2Mi4uMWRmYTJlMCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZv a2UudGV4aQorKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCkBAIC0zNjAsNyAr MzYwLDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVj dHN9LgogLWZnY3NlLXNtIC1maG9pc3QtYWRqYWNlbnQtbG9hZHMgLWZpZi1j b252ZXJzaW9uIEBnb2wKIC1maWYtY29udmVyc2lvbjIgLWZpbmRpcmVjdC1p bmxpbmluZyBAZ29sCiAtZmlubGluZS1mdW5jdGlvbnMgLWZpbmxpbmUtZnVu Y3Rpb25zLWNhbGxlZC1vbmNlIC1maW5saW5lLWxpbWl0PUB2YXJ7bn0gQGdv bAotLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIC1maXBhLWNwIC1maXBhLWNw LWNsb25lIC1maXBhLWNwLWFsaWdubWVudCAtZmlwYS1iaXQtY3AgQGdvbAor LWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIC1maXBhLWNwIC1maXBhLWNwLWNs b25lIC1maXBhLWJpdC1jcCBAZ29sCiAtZmlwYS1wdGEgLWZpcGEtcHJvZmls ZSAtZmlwYS1wdXJlLWNvbnN0IC1maXBhLXJlZmVyZW5jZSAtZmlwYS1pY2Yg QGdvbAogLWZpcmEtYWxnb3JpdGhtPUB2YXJ7YWxnb3JpdGhtfSBAZ29sCiAt ZmlyYS1yZWdpb249QHZhcntyZWdpb259IC1maXJhLWhvaXN0LXByZXNzdXJl IEBnb2wKQEAgLTY2MzcsNyArNjYzNyw2IEBAIGFsc28gdHVybnMgb24gdGhl IGZvbGxvd2luZyBvcHRpbWl6YXRpb24gZmxhZ3M6CiAtZmlubGluZS1zbWFs bC1mdW5jdGlvbnMgQGdvbAogLWZpbmRpcmVjdC1pbmxpbmluZyBAZ29sCiAt ZmlwYS1jcCBAZ29sCi0tZmlwYS1jcC1hbGlnbm1lbnQgQGdvbAogLWZpcGEt Yml0LWNwIEBnb2wKIC1maXBhLXNyYSBAZ29sCiAtZmlwYS1pY2YgQGdvbApA QCAtNzYzOSwxNCArNzYzOCw2IEBAIGl0IG1heSBzaWduaWZpY2FudGx5IGlu Y3JlYXNlIGNvZGUgc2l6ZQogKHNlZSBAb3B0aW9uey0tcGFyYW0gaXBjcC11 bml0LWdyb3d0aD1AdmFye3ZhbHVlfX0pLgogVGhpcyBmbGFnIGlzIGVuYWJs ZWQgYnkgZGVmYXVsdCBhdCBAb3B0aW9uey1PM30uCiAKLUBpdGVtIC1maXBh LWNwLWFsaWdubWVudAotQG9waW5kZXggLWZpcGEtY3AtYWxpZ25tZW50Ci1X aGVuIGVuYWJsZWQsIHRoaXMgb3B0aW1pemF0aW9uIHByb3BhZ2F0ZXMgYWxp Z25tZW50IG9mIGZ1bmN0aW9uCi1wYXJhbWV0ZXJzIHRvIHN1cHBvcnQgYmV0 dGVyIHZlY3Rvcml6YXRpb24gYW5kIHN0cmluZyBvcGVyYXRpb25zLgotCi1U aGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IEBvcHRpb257LU8y fSBhbmQgQG9wdGlvbnstT3N9LiAgSXQKLXJlcXVpcmVzIHRoYXQgQG9wdGlv bnstZmlwYS1jcH0gaXMgZW5hYmxlZC4KLQogQGl0ZW0gLWZpcGEtYml0LWNw CiBAb3BpbmRleCAtZmlwYS1iaXQtY3AKIFdoZW4gZW5hYmxlZCwgcGVyZm9y bSBpcGEgYml0d2lzZSBjb25zdGFudCBwcm9wYWdhdGlvbi4gVGhpcyBmbGFn IGlzCmRpZmYgLS1naXQgYS9nY2MvaXBhLWNwLmMgYi9nY2MvaXBhLWNwLmMK aW5kZXggOTVhMmExZS4uODhiYWY2OSAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1j cC5jCisrKyBiL2djYy9pcGEtY3AuYwpAQCAtMjM4LDM2ICsyMzgsNiBAQCBw dWJsaWM6CiAgIHN0cnVjdCBpcGNwX2FnZ19sYXR0aWNlICpuZXh0OwogfTsK IAotLyogTGF0dGljZSBvZiBwb2ludGVyIGFsaWdubWVudC4gIFVubGlrZSB0 aGUgcHJldmlvdXMgdHlwZXMgb2YgbGF0dGljZXMsIHRoaXMKLSAgIG9uZSBp cyBvbmx5IGNhcGFibGUgb2YgaG9sZGluZyBvbmUgdmFsdWUuICAqLwotCi1j bGFzcyBpcGNwX2FsaWdubWVudF9sYXR0aWNlCi17Ci1wdWJsaWM6Ci0gIC8q IElmIGJvdHRvbSBhbmQgdG9wIGFyZSBib3RoIGZhbHNlLCB0aGVzZSB0d28g ZmllbGRzIGhvbGQgdmFsdWVzIGFzIGdpdmVuIGJ5Ci0gICAgIHB0cl9pbmZv X2RlZiBhbmQgZ2V0X3BvaW50ZXJfYWxpZ25tZW50XzEuICAqLwotICB1bnNp Z25lZCBhbGlnbjsKLSAgdW5zaWduZWQgbWlzYWxpZ247Ci0KLSAgaW5saW5l IGJvb2wgYm90dG9tX3AgKCkgY29uc3Q7Ci0gIGlubGluZSBib29sIHRvcF9w ICgpIGNvbnN0OwotICBpbmxpbmUgYm9vbCBzZXRfdG9fYm90dG9tICgpOwot ICBib29sIG1lZXRfd2l0aCAodW5zaWduZWQgbmV3X2FsaWduLCB1bnNpZ25l ZCBuZXdfbWlzYWxpZ24pOwotICBib29sIG1lZXRfd2l0aCAoY29uc3QgaXBj cF9hbGlnbm1lbnRfbGF0dGljZSAmb3RoZXIsIEhPU1RfV0lERV9JTlQgb2Zm c2V0KTsKLSAgdm9pZCBwcmludCAoRklMRSAqIGYpOwotcHJpdmF0ZToKLSAg LyogSWYgc2V0LCB0aGlzIGxhdHRpY2UgaXMgYm90dG9tIGFuZCBhbGwgb3Ro ZXIgZmllbGRzIHNob3VsZCBiZQotICAgICBkaXNyZWdhcmRlZC4gICovCi0g IGJvb2wgYm90dG9tOwotICAvKiBJZiBib3R0b20gYW5kIG5vdF90b3AgYXJl IGZhbHNlLCB0aGUgbGF0dGljZSBpcyBUT1AuICBJZiBub3RfdG9wIGlzIHRy dWUsCi0gICAgIHRoZSBrbm93biBhbGlnbm1lbnQgaXMgc3RvcmVkIGluIHRo ZSBmaWVsZHMgYWxpZ24gYW5kIG1pc2FsaWduLiAgVGhlIGZpZWxkCi0gICAg IGlzIG5lZ2F0ZWQgc28gdGhhdCBtZW1zZXQgdG8gemVybyBpbml0aWFsaXpl cyB0aGUgbGF0dGljZSB0byBUT1AKLSAgICAgc3RhdGUuICAqLwotICBib29s IG5vdF90b3A7Ci0KLSAgYm9vbCBtZWV0X3dpdGhfMSAodW5zaWduZWQgbmV3 X2FsaWduLCB1bnNpZ25lZCBuZXdfbWlzYWxpZ24pOwotfTsKLQogLyogTGF0 dGljZSBvZiBrbm93biBiaXRzLCBvbmx5IGNhcGFibGUgb2YgaG9sZGluZyBv bmUgdmFsdWUuCiAgICBCaXR3aXNlIGNvbnN0YW50IHByb3BhZ2F0aW9uIHBy b3BhZ2F0ZXMgd2hpY2ggYml0cyBvZiBhCiAgICB2YWx1ZSBhcmUgY29uc3Rh bnQuCkBAIC0zNTQsOCArMzI0LDYgQEAgcHVibGljOgogICBpcGNwX2xhdHRp Y2U8aXBhX3BvbHltb3JwaGljX2NhbGxfY29udGV4dD4gY3R4bGF0OwogICAv KiBMYXR0aWNlcyBkZXNjcmliaW5nIGFnZ3JlZ2F0ZSBwYXJ0cy4gICovCiAg IGlwY3BfYWdnX2xhdHRpY2UgKmFnZ3M7Ci0gIC8qIExhdHRpY2UgZGVzY3Jp YmluZyBrbm93biBhbGlnbm1lbnQuICAqLwotICBpcGNwX2FsaWdubWVudF9s YXR0aWNlIGFsaWdubWVudDsKICAgLyogTGF0dGljZSBkZXNjcmliaW5nIGtu b3duIGJpdHMuICAqLwogICBpcGNwX2JpdHNfbGF0dGljZSBiaXRzX2xhdHRp Y2U7CiAgIC8qIExhdHRpY2UgZGVzY3JpYmluZyB2YWx1ZSByYW5nZS4gICov CkBAIC01MzQsMTkgKzUwMiw2IEBAIGlwY3BfbGF0dGljZTx2YWx0eXBlPjo6 cHJpbnQgKEZJTEUgKiBmLCBib29sIGR1bXBfc291cmNlcywgYm9vbCBkdW1w X2JlbmVmaXRzKQogICAgIGZwcmludGYgKGYsICJcbiIpOwogfQogCi0vKiBQ cmludCBhbGlnbm1lbnQgbGF0dGljZSB0byBGLiAgKi8KLQotdm9pZAotaXBj cF9hbGlnbm1lbnRfbGF0dGljZTo6cHJpbnQgKEZJTEUgKiBmKQotewotICBp ZiAodG9wX3AgKCkpCi0gICAgZnByaW50ZiAoZiwgIiAgICAgICAgIEFsaWdu bWVudCB1bmtub3duIChUT1ApXG4iKTsKLSAgZWxzZSBpZiAoYm90dG9tX3Ag KCkpCi0gICAgZnByaW50ZiAoZiwgIiAgICAgICAgIEFsaWdubWVudCB1bnVz YWJsZSAoQk9UVE9NKVxuIik7Ci0gIGVsc2UKLSAgICBmcHJpbnRmIChmLCAi ICAgICAgICAgQWxpZ25tZW50ICV1LCBtaXNhbGlnbm1lbnQgJXVcbiIsIGFs aWduLCBtaXNhbGlnbik7Ci19Ci0KIHZvaWQKIGlwY3BfYml0c19sYXR0aWNl OjpwcmludCAoRklMRSAqZikKIHsKQEAgLTU5NSw3ICs1NTAsNiBAQCBwcmlu dF9hbGxfbGF0dGljZXMgKEZJTEUgKiBmLCBib29sIGR1bXBfc291cmNlcywg Ym9vbCBkdW1wX2JlbmVmaXRzKQogCSAgcGxhdHMtPml0c2VsZi5wcmludCAo ZiwgZHVtcF9zb3VyY2VzLCBkdW1wX2JlbmVmaXRzKTsKIAkgIGZwcmludGYg KGYsICIgICAgICAgICBjdHhzOiAiKTsKIAkgIHBsYXRzLT5jdHhsYXQucHJp bnQgKGYsIGR1bXBfc291cmNlcywgZHVtcF9iZW5lZml0cyk7Ci0JICBwbGF0 cy0+YWxpZ25tZW50LnByaW50IChmKTsKIAkgIHBsYXRzLT5iaXRzX2xhdHRp Y2UucHJpbnQgKGYpOwogCSAgZnByaW50ZiAoZiwgIiAgICAgICAgICIpOwog CSAgcGxhdHMtPm1fdmFsdWVfcmFuZ2UucHJpbnQgKGYpOwpAQCAtOTIyLDM4 ICs4NzYsNiBAQCBzZXRfYWdnX2xhdHNfY29udGFpbl92YXJpYWJsZSAoc3Ry dWN0IGlwY3BfcGFyYW1fbGF0dGljZXMgKnBsYXRzKQogICByZXR1cm4gcmV0 OwogfQogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBhbGlnbm1lbnQgaW5mb3JtYXRp b24gaW4gdGhlIGxhdHRpY2UgaXMgeWV0IHVua25vd24uICAqLwotCi1ib29s Ci1pcGNwX2FsaWdubWVudF9sYXR0aWNlOjp0b3BfcCAoKSBjb25zdAotewot ICByZXR1cm4gIWJvdHRvbSAmJiAhbm90X3RvcDsKLX0KLQotLyogUmV0dXJu IHRydWUgaWYgYWxpZ25tZW50IGluZm9ybWF0aW9uIGluIHRoZSBsYXR0aWNl IGlzIGtub3duIHRvIGJlCi0gICB1bnVzYWJsZS4gICovCi0KLWJvb2wKLWlw Y3BfYWxpZ25tZW50X2xhdHRpY2U6OmJvdHRvbV9wICgpIGNvbnN0Ci17Ci0g IHJldHVybiBib3R0b207Ci19Ci0KLS8qIFNldCBhbGlnbm1lbnQgaW5mb3Jt YXRpb24gaW4gdGhlIGxhdHRpY2UgdG8gYm90dG9tLiAgUmV0dXJuIHRydWUg aWYgaXQKLSAgIHByZXZpb3VzbHkgd2FzIGluIGEgZGlmZmVyZW50IHN0YXRl LiAgKi8KLQotYm9vbAotaXBjcF9hbGlnbm1lbnRfbGF0dGljZTo6c2V0X3Rv X2JvdHRvbSAoKQotewotICBpZiAoYm90dG9tX3AgKCkpCi0gICAgcmV0dXJu IGZhbHNlOwotICBib3R0b20gPSB0cnVlOwotICByZXR1cm4gdHJ1ZTsKLX0K LQotLyogTWVldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGF0dGljZSB3 aXRoIGRlc2NyaWJlZCBieSBPVEhFUgotICAgbGF0dGljZS4gICovCi0KIGJv b2wKIGlwY3BfdnJfbGF0dGljZTo6bWVldF93aXRoIChjb25zdCBpcGNwX3Zy X2xhdHRpY2UgJm90aGVyKQogewpAQCAtMTAyMiw4MiArOTQ0LDYgQEAgaXBj cF92cl9sYXR0aWNlOjpzZXRfdG9fYm90dG9tICgpCiAgIHJldHVybiB0cnVl OwogfQogCi0vKiBNZWV0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsYXR0 aWNlIHdpdGggYWxpZ25tZW50IGRlc2NyaWJlZCBieSBORVdfQUxJR04KLSAg IGFuZCBORVdfTUlTQUxJR04sIGFzc3VtaW5nIHRoYXQgd2Uga25vdyB0aGUg Y3VycmVudCB2YWx1ZSBpcyBuZWl0aGVyIFRPUCBub3IKLSAgIEJPVFRPTS4g IFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiBsYXR0aWNlIGhhcyBjaGFu Z2VkLiAgKi8KLQotYm9vbAotaXBjcF9hbGlnbm1lbnRfbGF0dGljZTo6bWVl dF93aXRoXzEgKHVuc2lnbmVkIG5ld19hbGlnbiwgdW5zaWduZWQgbmV3X21p c2FsaWduKQotewotICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChuZXdfYWxpZ24g IT0gMCk7Ci0gIGlmIChhbGlnbiA9PSBuZXdfYWxpZ24gJiYgbWlzYWxpZ24g PT0gbmV3X21pc2FsaWduKQotICAgIHJldHVybiBmYWxzZTsKLQotICBib29s IGNoYW5nZWQgPSBmYWxzZTsKLSAgaWYgKGFsaWduID4gbmV3X2FsaWduKQot ICAgIHsKLSAgICAgIGFsaWduID0gbmV3X2FsaWduOwotICAgICAgbWlzYWxp Z24gPSBtaXNhbGlnbiAlIG5ld19hbGlnbjsKLSAgICAgIGNoYW5nZWQgPSB0 cnVlOwotICAgIH0KLSAgaWYgKG1pc2FsaWduICE9IChuZXdfbWlzYWxpZ24g JSBhbGlnbikpCi0gICAgewotICAgICAgaW50IGRpZmYgPSBhYnMgKChpbnQp IG1pc2FsaWduIC0gKGludCkgKG5ld19taXNhbGlnbiAlIGFsaWduKSk7Ci0g ICAgICBhbGlnbiA9IGxlYXN0X2JpdF9od2kgKGRpZmYpOwotICAgICAgaWYg KGFsaWduKQotCW1pc2FsaWduID0gbWlzYWxpZ24gJSBhbGlnbjsKLSAgICAg IGVsc2UKLQlzZXRfdG9fYm90dG9tICgpOwotICAgICAgY2hhbmdlZCA9IHRy dWU7Ci0gICAgfQotICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChib3R0b21fcCAo KSB8fCBhbGlnbiAhPSAwKTsKLSAgcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLS8q IE1lZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxhdHRpY2Ugd2l0aCBh bGlnbm1lbnQgZGVzY3JpYmVkIGJ5IE5FV19BTElHTgotICAgYW5kIE5FV19N SVNBTElHTi4gIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiBsYXR0aWNl IGhhcyBjaGFuZ2VkLiAgKi8KLQotYm9vbAotaXBjcF9hbGlnbm1lbnRfbGF0 dGljZTo6bWVldF93aXRoICh1bnNpZ25lZCBuZXdfYWxpZ24sIHVuc2lnbmVk IG5ld19taXNhbGlnbikKLXsKLSAgZ2NjX2Fzc2VydCAobmV3X2FsaWduICE9 IDApOwotICBpZiAoYm90dG9tX3AgKCkpCi0gICAgcmV0dXJuIGZhbHNlOwot ICBpZiAodG9wX3AgKCkpCi0gICAgewotICAgICAgbm90X3RvcCA9IHRydWU7 Ci0gICAgICBhbGlnbiA9IG5ld19hbGlnbjsKLSAgICAgIG1pc2FsaWduID0g bmV3X21pc2FsaWduOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICBy ZXR1cm4gbWVldF93aXRoXzEgKG5ld19hbGlnbiwgbmV3X21pc2FsaWduKTsK LX0KLQotLyogTWVldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGF0dGlj ZSB3aXRoIE9USEVSLCB0YWtpbmcgaW50byBhY2NvdW50IHRoYXQKLSAgIE9G RlNFVCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcG9pbnRlciB2YWx1ZS4gIFJl dHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZgotICAgbGF0dGljZSBoYXMgY2hh bmdlZC4gICovCi0KLWJvb2wKLWlwY3BfYWxpZ25tZW50X2xhdHRpY2U6Om1l ZXRfd2l0aCAoY29uc3QgaXBjcF9hbGlnbm1lbnRfbGF0dGljZSAmb3RoZXIs Ci0JCQkJICAgSE9TVF9XSURFX0lOVCBvZmZzZXQpCi17Ci0gIGlmIChvdGhl ci5ib3R0b21fcCAoKSkKLSAgICByZXR1cm4gc2V0X3RvX2JvdHRvbSAoKTsK LSAgaWYgKGJvdHRvbV9wICgpIHx8IG90aGVyLnRvcF9wICgpKQotICAgIHJl dHVybiBmYWxzZTsKLQotICB1bnNpZ25lZCBhZGp1c3RlZF9taXNhbGlnbiA9 IChvdGhlci5taXNhbGlnbiArIG9mZnNldCkgJSBvdGhlci5hbGlnbjsKLSAg aWYgKHRvcF9wICgpKQotICAgIHsKLSAgICAgIG5vdF90b3AgPSB0cnVlOwot ICAgICAgYWxpZ24gPSBvdGhlci5hbGlnbjsKLSAgICAgIG1pc2FsaWduID0g YWRqdXN0ZWRfbWlzYWxpZ247Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9 Ci0KLSAgcmV0dXJuIG1lZXRfd2l0aF8xIChvdGhlci5hbGlnbiwgYWRqdXN0 ZWRfbWlzYWxpZ24pOwotfQotCiAvKiBTZXQgbGF0dGljZSB2YWx1ZSB0byBi b3R0b20sIGlmIGl0IGFscmVhZHkgaXNuJ3QgdGhlIGNhc2UuICAqLwogCiBi b29sCkBAIC0xMjUzLDcgKzEwOTksNiBAQCBzZXRfYWxsX2NvbnRhaW5zX3Zh cmlhYmxlIChzdHJ1Y3QgaXBjcF9wYXJhbV9sYXR0aWNlcyAqcGxhdHMpCiAg IHJldCA9IHBsYXRzLT5pdHNlbGYuc2V0X2NvbnRhaW5zX3ZhcmlhYmxlICgp OwogICByZXQgfD0gcGxhdHMtPmN0eGxhdC5zZXRfY29udGFpbnNfdmFyaWFi bGUgKCk7CiAgIHJldCB8PSBzZXRfYWdnX2xhdHNfY29udGFpbl92YXJpYWJs ZSAocGxhdHMpOwotICByZXQgfD0gcGxhdHMtPmFsaWdubWVudC5zZXRfdG9f Ym90dG9tICgpOwogICByZXQgfD0gcGxhdHMtPmJpdHNfbGF0dGljZS5zZXRf dG9fYm90dG9tICgpOwogICByZXQgfD0gcGxhdHMtPm1fdmFsdWVfcmFuZ2Uu c2V0X3RvX2JvdHRvbSAoKTsKICAgcmV0dXJuIHJldDsKQEAgLTEzNDIsNyAr MTE4Nyw2IEBAIGluaXRpYWxpemVfbm9kZV9sYXR0aWNlcyAoc3RydWN0IGNn cmFwaF9ub2RlICpub2RlKQogCSAgICAgIHBsYXRzLT5pdHNlbGYuc2V0X3Rv X2JvdHRvbSAoKTsKIAkgICAgICBwbGF0cy0+Y3R4bGF0LnNldF90b19ib3R0 b20gKCk7CiAJICAgICAgc2V0X2FnZ19sYXRzX3RvX2JvdHRvbSAocGxhdHMp OwotCSAgICAgIHBsYXRzLT5hbGlnbm1lbnQuc2V0X3RvX2JvdHRvbSAoKTsK IAkgICAgICBwbGF0cy0+Yml0c19sYXR0aWNlLnNldF90b19ib3R0b20gKCk7 CiAJICAgICAgcGxhdHMtPm1fdmFsdWVfcmFuZ2Uuc2V0X3RvX2JvdHRvbSAo KTsKIAkgICAgfQpAQCAtMTkxMCw1OSArMTc1NCw2IEBAIHByb3BhZ2F0ZV9j b250ZXh0X2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY2dyYXBoX2VkZ2UgKmNz LAogICByZXR1cm4gcmV0OwogfQogCi0vKiBQcm9wYWdhdGUgYWxpZ25tZW50 cyBhY3Jvc3MganVtcCBmdW5jdGlvbiBKRlVOQyB0aGF0IGlzIGFzc29jaWF0 ZWQgd2l0aAotICAgZWRnZSBDUyBhbmQgdXBkYXRlIERFU1RfTEFUIGFjY29y ZGluZ2x5LiAgKi8KLQotc3RhdGljIGJvb2wKLXByb3BhZ2F0ZV9hbGlnbm1l bnRfYWNjcm9zc19qdW1wX2Z1bmN0aW9uIChjZ3JhcGhfZWRnZSAqY3MsCi0J CQkJCSAgIGlwYV9qdW1wX2Z1bmMgKmpmdW5jLAotCQkJCQkgICBpcGNwX2Fs aWdubWVudF9sYXR0aWNlICpkZXN0X2xhdCkKLXsKLSAgaWYgKGRlc3RfbGF0 LT5ib3R0b21fcCAoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKGpm dW5jLT50eXBlID09IElQQV9KRl9QQVNTX1RIUk9VR0gKLQkgICB8fCBqZnVu Yy0+dHlwZSA9PSBJUEFfSkZfQU5DRVNUT1IpCi0gICAgewotICAgICAgc3Ry dWN0IGlwYV9ub2RlX3BhcmFtcyAqY2FsbGVyX2luZm8gPSBJUEFfTk9ERV9S RUYgKGNzLT5jYWxsZXIpOwotICAgICAgSE9TVF9XSURFX0lOVCBvZmZzZXQg PSAwOwotICAgICAgaW50IHNyY19pZHg7Ci0KLSAgICAgIGlmIChqZnVuYy0+ dHlwZSA9PSBJUEFfSkZfUEFTU19USFJPVUdIKQotCXsKLQkgIGVudW0gdHJl ZV9jb2RlIG9wID0gaXBhX2dldF9qZl9wYXNzX3Rocm91Z2hfb3BlcmF0aW9u IChqZnVuYyk7Ci0JICBpZiAob3AgIT0gTk9QX0VYUFIpCi0JICAgIHsKLQkg ICAgICBpZiAob3AgIT0gUE9JTlRFUl9QTFVTX0VYUFIKLQkJICAmJiBvcCAh PSBQTFVTX0VYUFIpCi0JCXJldHVybiBkZXN0X2xhdC0+c2V0X3RvX2JvdHRv bSAoKTsKLQkgICAgICB0cmVlIG9wZXJhbmQgPSBpcGFfZ2V0X2pmX3Bhc3Nf dGhyb3VnaF9vcGVyYW5kIChqZnVuYyk7Ci0JICAgICAgaWYgKCF0cmVlX2Zp dHNfc2h3aV9wIChvcGVyYW5kKSkKLQkJcmV0dXJuIGRlc3RfbGF0LT5zZXRf dG9fYm90dG9tICgpOwotCSAgICAgIG9mZnNldCA9IHRyZWVfdG9fc2h3aSAo b3BlcmFuZCk7Ci0JICAgIH0KLQkgIHNyY19pZHggPSBpcGFfZ2V0X2pmX3Bh c3NfdGhyb3VnaF9mb3JtYWxfaWQgKGpmdW5jKTsKLQl9Ci0gICAgICBlbHNl Ci0JewotCSAgc3JjX2lkeCA9IGlwYV9nZXRfamZfYW5jZXN0b3JfZm9ybWFs X2lkIChqZnVuYyk7Ci0JICBvZmZzZXQgPSBpcGFfZ2V0X2pmX2FuY2VzdG9y X29mZnNldCAoamZ1bmMpIC8gQklUU19QRVJfVU5JVDsKLQl9Ci0KLSAgICAg IHN0cnVjdCBpcGNwX3BhcmFtX2xhdHRpY2VzICpzcmNfbGF0czsKLSAgICAg IHNyY19sYXRzID0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChjYWxsZXJfaW5m bywgc3JjX2lkeCk7Ci0gICAgICByZXR1cm4gZGVzdF9sYXQtPm1lZXRfd2l0 aCAoc3JjX2xhdHMtPmFsaWdubWVudCwgb2Zmc2V0KTsKLSAgICB9Ci0gIGVs c2UKLSAgICB7Ci0gICAgICBpZiAoamZ1bmMtPmFsaWdubWVudC5rbm93bikK LQlyZXR1cm4gZGVzdF9sYXQtPm1lZXRfd2l0aCAoamZ1bmMtPmFsaWdubWVu dC5hbGlnbiwKLQkJCQkgICAgamZ1bmMtPmFsaWdubWVudC5taXNhbGlnbik7 Ci0gICAgICBlbHNlCi0JcmV0dXJuIGRlc3RfbGF0LT5zZXRfdG9fYm90dG9t ICgpOwotICAgIH0KLX0KLQogLyogUHJvcGFnYXRlIGJpdHMgYWNyb3NzIGpm dW5jIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoCiAgICBlZGdlIGNzIGFuZCB1 cGRhdGUgZGVzdF9sYXR0aWNlIGFjY29yZGluZ2x5LiAgKi8KIApAQCAtMTk5 MywxNiArMTc4NCwyOSBAQCBwcm9wYWdhdGVfYml0c19hY2Nyb3NzX2p1bXBf ZnVuY3Rpb24gKGNncmFwaF9lZGdlICpjcywgaW50IGlkeCwgaXBhX2p1bXBf ZnVuYyAqagogICB1bnNpZ25lZCBwcmVjaXNpb24gPSBUWVBFX1BSRUNJU0lP TiAocGFybV90eXBlKTsKICAgc2lnbm9wIHNnbiA9IFRZUEVfU0lHTiAocGFy bV90eXBlKTsKIAotICBpZiAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX1BBU1Nf VEhST1VHSCkKKyAgaWYgKGpmdW5jLT50eXBlID09IElQQV9KRl9QQVNTX1RI Uk9VR0gKKyAgICAgIHx8IGpmdW5jLT50eXBlID09IElQQV9KRl9BTkNFU1RP UikKICAgICB7CiAgICAgICBzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICpjYWxs ZXJfaW5mbyA9IElQQV9OT0RFX1JFRiAoY3MtPmNhbGxlcik7Ci0gICAgICBl bnVtIHRyZWVfY29kZSBjb2RlID0gaXBhX2dldF9qZl9wYXNzX3Rocm91Z2hf b3BlcmF0aW9uIChqZnVuYyk7CiAgICAgICB0cmVlIG9wZXJhbmQgPSBOVUxM X1RSRUU7CisgICAgICBlbnVtIHRyZWVfY29kZSBjb2RlOworICAgICAgdW5z aWduZWQgc3JjX2lkeDsKIAotICAgICAgaWYgKGNvZGUgIT0gTk9QX0VYUFIp Ci0Jb3BlcmFuZCA9IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhbmQg KGpmdW5jKTsKKyAgICAgIGlmIChqZnVuYy0+dHlwZSA9PSBJUEFfSkZfUEFT U19USFJPVUdIKQorCXsKKwkgIGNvZGUgPSBpcGFfZ2V0X2pmX3Bhc3NfdGhy b3VnaF9vcGVyYXRpb24gKGpmdW5jKTsKKwkgIHNyY19pZHggPSBpcGFfZ2V0 X2pmX3Bhc3NfdGhyb3VnaF9mb3JtYWxfaWQgKGpmdW5jKTsKKwkgIGlmIChj b2RlICE9IE5PUF9FWFBSKQorCSAgICBvcGVyYW5kID0gaXBhX2dldF9qZl9w YXNzX3Rocm91Z2hfb3BlcmFuZCAoamZ1bmMpOworCX0KKyAgICAgIGVsc2UK Kwl7CisJICBjb2RlID0gUE9JTlRFUl9QTFVTX0VYUFI7IAorCSAgc3JjX2lk eCA9IGlwYV9nZXRfamZfYW5jZXN0b3JfZm9ybWFsX2lkIChqZnVuYyk7CisJ ICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG9mZnNldCA9IGlwYV9nZXRfamZf YW5jZXN0b3Jfb2Zmc2V0IChqZnVuYykgLyBCSVRTX1BFUl9VTklUOworCSAg b3BlcmFuZCA9IGJ1aWxkX2ludF9jc3R1IChzaXplX3R5cGVfbm9kZSwgb2Zm c2V0KTsKKwl9CiAKLSAgICAgIGludCBzcmNfaWR4ID0gaXBhX2dldF9qZl9w YXNzX3Rocm91Z2hfZm9ybWFsX2lkIChqZnVuYyk7CiAgICAgICBzdHJ1Y3Qg aXBjcF9wYXJhbV9sYXR0aWNlcyAqc3JjX2xhdHMKIAk9IGlwYV9nZXRfcGFy bV9sYXR0aWNlcyAoY2FsbGVyX2luZm8sIHNyY19pZHgpOwogCkBAIC0yNDI2 LDggKzIyMzAsNiBAQCBwcm9wYWdhdGVfY29uc3RhbnRzX2FjY3Jvc3NfY2Fs bCAoc3RydWN0IGNncmFwaF9lZGdlICpjcykKIAkJCQkJCQkgJmRlc3RfcGxh dHMtPml0c2VsZik7CiAJICByZXQgfD0gcHJvcGFnYXRlX2NvbnRleHRfYWNj cm9zc19qdW1wX2Z1bmN0aW9uIChjcywganVtcF9mdW5jLCBpLAogCQkJCQkJ CSAgJmRlc3RfcGxhdHMtPmN0eGxhdCk7Ci0JICByZXQgfD0gcHJvcGFnYXRl X2FsaWdubWVudF9hY2Nyb3NzX2p1bXBfZnVuY3Rpb24gKGNzLCBqdW1wX2Z1 bmMsCi0JCQkJCQkJICZkZXN0X3BsYXRzLT5hbGlnbm1lbnQpOwogCSAgcmV0 IHw9IHByb3BhZ2F0ZV9iaXRzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY3Ms IGksIGp1bXBfZnVuYywKIAkJCQkJCSAgICAgICAmZGVzdF9wbGF0cy0+Yml0 c19sYXR0aWNlKTsKIAkgIHJldCB8PSBwcm9wYWdhdGVfYWdnc19hY2Nyb3Nz X2p1bXBfZnVuY3Rpb24gKGNzLCBqdW1wX2Z1bmMsCkBAIC00OTk3LDgxICs0 Nzk5LDYgQEAgaXBjcF9kZWNpc2lvbl9zdGFnZSAoc3RydWN0IGlwYV90b3Bv X2luZm8gKnRvcG8pCiAgICAgfQogfQogCi0vKiBMb29rIHVwIGFsbCBhbGln bm1lbnQgaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIGRpc2NvdmVyZWQgYW5k IGNvcHkgaXQgb3ZlcgotICAgdG8gdGhlIHRyYW5zZm9ybWF0aW9uIHN1bW1h cnkuICAqLwotCi1zdGF0aWMgdm9pZAotaXBjcF9zdG9yZV9hbGlnbm1lbnRf cmVzdWx0cyAodm9pZCkKLXsKLSAgY2dyYXBoX25vZGUgKm5vZGU7Ci0KLSAg Rk9SX0VBQ0hfRlVOQ1RJT05fV0lUSF9HSU1QTEVfQk9EWSAobm9kZSkKLSAg ewotICAgIGlwYV9ub2RlX3BhcmFtcyAqaW5mbyA9IElQQV9OT0RFX1JFRiAo bm9kZSk7Ci0gICAgYm9vbCBkdW1wZWRfc3RoID0gZmFsc2U7Ci0gICAgYm9v bCBmb3VuZF91c2VmdWxfcmVzdWx0ID0gZmFsc2U7Ci0KLSAgICBpZiAoIW9w dF9mb3JfZm4gKG5vZGUtPmRlY2wsIGZsYWdfaXBhX2NwX2FsaWdubWVudCkp Ci0gICAgICB7Ci0JaWYgKGR1bXBfZmlsZSkKLQkgIGZwcmludGYgKGR1bXBf ZmlsZSwgIk5vdCBjb25zaWRlcmluZyAlcyBmb3IgYWxpZ25tZW50IGRpc2Nv dmVyeSAiCi0JCSAgICJhbmQgcHJvcGFnYXRlOyAtZmlwYS1jcC1hbGlnbm1l bnQ6IGRpc2FibGVkLlxuIiwKLQkJICAgbm9kZS0+bmFtZSAoKSk7Ci0JY29u dGludWU7Ci0gICAgICB9Ci0KLSAgIGlmIChpbmZvLT5pcGNwX29yaWdfbm9k ZSkKLSAgICAgIGluZm8gPSBJUEFfTk9ERV9SRUYgKGluZm8tPmlwY3Bfb3Jp Z19ub2RlKTsKLQotICAgdW5zaWduZWQgY291bnQgPSBpcGFfZ2V0X3BhcmFt X2NvdW50IChpbmZvKTsKLSAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj b3VudCA7IGkrKykKLSAgICAgewotICAgICAgIGlwY3BfcGFyYW1fbGF0dGlj ZXMgKnBsYXRzID0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChpbmZvLCBpKTsK LSAgICAgICBpZiAoIXBsYXRzLT5hbGlnbm1lbnQuYm90dG9tX3AgKCkKLQkg ICAmJiAhcGxhdHMtPmFsaWdubWVudC50b3BfcCAoKSkKLQkgewotCSAgIGdj Y19jaGVja2luZ19hc3NlcnQgKHBsYXRzLT5hbGlnbm1lbnQuYWxpZ24gPiAw KTsKLQkgICBmb3VuZF91c2VmdWxfcmVzdWx0ID0gdHJ1ZTsKLQkgICBicmVh azsKLQkgfQotICAgICB9Ci0gICBpZiAoIWZvdW5kX3VzZWZ1bF9yZXN1bHQp Ci0gICAgIGNvbnRpbnVlOwotCi0gICBpcGNwX2dyb3dfdHJhbnNmb3JtYXRp b25zX2lmX25lY2Vzc2FyeSAoKTsKLSAgIGlwY3BfdHJhbnNmb3JtYXRpb25f c3VtbWFyeSAqdHMgPSBpcGNwX2dldF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5 IChub2RlKTsKLSAgIHZlY19zYWZlX3Jlc2VydmVfZXhhY3QgKHRzLT5hbGln bm1lbnRzLCBjb3VudCk7Ci0KLSAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBjb3VudCA7IGkrKykKLSAgICAgewotICAgICAgIGlwY3BfcGFyYW1fbGF0 dGljZXMgKnBsYXRzID0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChpbmZvLCBp KTsKLSAgICAgICBpcGFfYWxpZ25tZW50IGFsOwotCi0gICAgICAgaWYgKCFw bGF0cy0+YWxpZ25tZW50LmJvdHRvbV9wICgpCi0JICAgJiYgIXBsYXRzLT5h bGlnbm1lbnQudG9wX3AgKCkpCi0JIHsKLQkgICBhbC5rbm93biA9IHRydWU7 Ci0JICAgYWwuYWxpZ24gPSBwbGF0cy0+YWxpZ25tZW50LmFsaWduOwotCSAg IGFsLm1pc2FsaWduID0gcGxhdHMtPmFsaWdubWVudC5taXNhbGlnbjsKLQkg fQotICAgICAgIGVsc2UKLQkgYWwua25vd24gPSBmYWxzZTsKLQotICAgICAg IHRzLT5hbGlnbm1lbnRzLT5xdWlja19wdXNoIChhbCk7Ci0gICAgICAgaWYg KCFkdW1wX2ZpbGUgfHwgIWFsLmtub3duKQotCSBjb250aW51ZTsKLSAgICAg ICBpZiAoIWR1bXBlZF9zdGgpCi0JIHsKLQkgICBmcHJpbnRmIChkdW1wX2Zp bGUsICJQcm9wYWdhdGVkIGFsaWdubWVudCBpbmZvIGZvciBmdW5jdGlvbiAl cy8laTpcbiIsCi0JCSAgICBub2RlLT5uYW1lICgpLCBub2RlLT5vcmRlcik7 Ci0JICAgZHVtcGVkX3N0aCA9IHRydWU7Ci0JIH0KLSAgICAgICBmcHJpbnRm IChkdW1wX2ZpbGUsICIgIHBhcmFtICVpOiBhbGlnbjogJXUsIG1pc2FsaWdu OiAldVxuIiwKLQkJaSwgYWwuYWxpZ24sIGFsLm1pc2FsaWduKTsKLSAgICAg fQotICB9Ci19Ci0KIC8qIExvb2sgdXAgYWxsIHRoZSBiaXRzIGluZm9ybWF0 aW9uIHRoYXQgd2UgaGF2ZSBkaXNjb3ZlcmVkIGFuZCBjb3B5IGl0IG92ZXIK ICAgIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBzdW1tYXJ5LiAgKi8KIApAQCAt NTI0Niw4ICs0OTczLDYgQEAgaXBjcF9kcml2ZXIgKHZvaWQpCiAgIGlwY3Bf cHJvcGFnYXRlX3N0YWdlICgmdG9wbyk7CiAgIC8qIERlY2lkZSB3aGF0IGNv bnN0YW50IHByb3BhZ2F0aW9uIGFuZCBjbG9uaW5nIHNob3VsZCBiZSBwZXJm b3JtZWQuICAqLwogICBpcGNwX2RlY2lzaW9uX3N0YWdlICgmdG9wbyk7Ci0g IC8qIFN0b3JlIHJlc3VsdHMgb2YgYWxpZ25tZW50IHByb3BhZ2F0aW9uLiAq LwotICBpcGNwX3N0b3JlX2FsaWdubWVudF9yZXN1bHRzICgpOwogICAvKiBT dG9yZSByZXN1bHRzIG9mIGJpdHMgcHJvcGFnYXRpb24uICAqLwogICBpcGNw X3N0b3JlX2JpdHNfcmVzdWx0cyAoKTsKICAgLyogU3RvcmUgcmVzdWx0cyBv ZiB2YWx1ZSByYW5nZSBwcm9wYWdhdGlvbi4gICovCmRpZmYgLS1naXQgYS9n Y2MvaXBhLXByb3AuYyBiL2djYy9pcGEtcHJvcC5jCmluZGV4IGZlZWNkMjMu LjVlZDliYmYgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtcHJvcC5jCisrKyBiL2dj Yy9pcGEtcHJvcC5jCkBAIC0yOTQsMTUgKzI5NCw2IEBAIGlwYV9wcmludF9u b2RlX2p1bXBfZnVuY3Rpb25zX2Zvcl9lZGdlIChGSUxFICpmLCBzdHJ1Y3Qg Y2dyYXBoX2VkZ2UgKmNzKQogCSAgY3R4LT5kdW1wIChkdW1wX2ZpbGUpOwog CX0KIAotICAgICAgaWYgKGp1bXBfZnVuYy0+YWxpZ25tZW50Lmtub3duKQot CXsKLQkgIGZwcmludGYgKGYsICIgICAgICAgICBBbGlnbm1lbnQ6ICV1LCBt aXNhbGlnbm1lbnQ6ICV1XG4iLAotCQkgICBqdW1wX2Z1bmMtPmFsaWdubWVu dC5hbGlnbiwKLQkJICAganVtcF9mdW5jLT5hbGlnbm1lbnQubWlzYWxpZ24p OwotCX0KLSAgICAgIGVsc2UKLQlmcHJpbnRmIChmLCAiICAgICAgICAgVW5r bm93biBhbGlnbm1lbnRcbiIpOwotCiAgICAgICBpZiAoanVtcF9mdW5jLT5i aXRzLmtub3duKQogCXsKIAkgIGZwcmludGYgKGYsICIgICAgICAgICB2YWx1 ZTogIik7IHByaW50X2hleCAoanVtcF9mdW5jLT5iaXRzLnZhbHVlLCBmKTsK QEAgLTQwMiw3ICszOTMsNiBAQCBzdGF0aWMgdm9pZAogaXBhX3NldF9qZl91 bmtub3duIChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqamZ1bmMpCiB7CiAgIGpm dW5jLT50eXBlID0gSVBBX0pGX1VOS05PV047Ci0gIGpmdW5jLT5hbGlnbm1l bnQua25vd24gPSBmYWxzZTsKICAgamZ1bmMtPmJpdHMua25vd24gPSBmYWxz ZTsKICAgamZ1bmMtPnZyX2tub3duID0gZmFsc2U7CiB9CkBAIC0xNjc4LDI1 ICsxNjY4LDcgQEAgaXBhX2NvbXB1dGVfanVtcF9mdW5jdGlvbnNfZm9yX2Vk Z2UgKHN0cnVjdCBpcGFfZnVuY19ib2R5X2luZm8gKmZiaSwKIAkgICAgdXNl ZnVsX2NvbnRleHQgPSB0cnVlOwogCX0KIAotICAgICAgaWYgKFBPSU5URVJf VFlQRV9QIChUUkVFX1RZUEUoYXJnKSkpCi0JewotCSAgdW5zaWduZWQgSE9T VF9XSURFX0lOVCBod2lfYml0cG9zOwotCSAgdW5zaWduZWQgYWxpZ247Ci0K LQkgIGdldF9wb2ludGVyX2FsaWdubWVudF8xIChhcmcsICZhbGlnbiwgJmh3 aV9iaXRwb3MpOwotCSAgaWYgKGFsaWduID4gQklUU19QRVJfVU5JVAotCSAg ICAgICYmIGFsaWduICUgQklUU19QRVJfVU5JVCA9PSAwCi0JICAgICAgJiYg aHdpX2JpdHBvcyAlIEJJVFNfUEVSX1VOSVQgPT0gMCkKLQkgICAgewotCSAg ICAgIGpmdW5jLT5hbGlnbm1lbnQua25vd24gPSB0cnVlOwotCSAgICAgIGpm dW5jLT5hbGlnbm1lbnQuYWxpZ24gPSBhbGlnbiAvIEJJVFNfUEVSX1VOSVQ7 Ci0JICAgICAgamZ1bmMtPmFsaWdubWVudC5taXNhbGlnbiA9IGh3aV9iaXRw b3MgLyBCSVRTX1BFUl9VTklUOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIGdj Y19hc3NlcnQgKCFqZnVuYy0+YWxpZ25tZW50Lmtub3duKTsKLQkgIGdjY19h c3NlcnQgKCFqZnVuYy0+dnJfa25vd24pOwotCX0KLSAgICAgIGVsc2UKKyAg ICAgIGlmICghUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoYXJnKSkpCiAJ ewogCSAgd2lkZV9pbnQgbWluLCBtYXg7CiAJICB2YWx1ZV9yYW5nZV90eXBl IHR5cGU7CkBAIC0xNzEzLDcgKzE2ODUsNiBAQCBpcGFfY29tcHV0ZV9qdW1w X2Z1bmN0aW9uc19mb3JfZWRnZSAoc3RydWN0IGlwYV9mdW5jX2JvZHlfaW5m byAqZmJpLAogCSAgICB9CiAJICBlbHNlCiAJICAgIGdjY19hc3NlcnQgKCFq ZnVuYy0+dnJfa25vd24pOwotCSAgZ2NjX2Fzc2VydCAoIWpmdW5jLT5hbGln bm1lbnQua25vd24pOwogCX0KIAogICAgICAgaWYgKElOVEVHUkFMX1RZUEVf UCAoVFJFRV9UWVBFIChhcmcpKQpAQCAtMTczMyw2ICsxNzA0LDE3IEBAIGlw YV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zX2Zvcl9lZGdlIChzdHJ1Y3QgaXBh X2Z1bmNfYm9keV9pbmZvICpmYmksCiAJICAgICAgamZ1bmMtPmJpdHMubWFz ayA9IDA7CiAJICAgIH0KIAl9CisgICAgICBlbHNlIGlmIChQT0lOVEVSX1RZ UEVfUCAoVFJFRV9UWVBFIChhcmcpKSkKKwl7CisJICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIGJpdHBvczsKKwkgIHVuc2lnbmVkIGFsaWduOworCisJICBq ZnVuYy0+Yml0cy5rbm93biA9IHRydWU7CisJICBnZXRfcG9pbnRlcl9hbGln bm1lbnRfMSAoYXJnLCAmYWxpZ24sICZiaXRwb3MpOworCSAgamZ1bmMtPmJp dHMubWFzayA9IHdpOjptYXNrPHdpZGVzdF9pbnQ+KFRZUEVfUFJFQ0lTSU9O IChUUkVFX1RZUEUgKGFyZykpLCBmYWxzZSkKKwkJCSAgICAgLmFuZF9ub3Qg KGFsaWduIC8gQklUU19QRVJfVU5JVCAtIDEpOworCSAgamZ1bmMtPmJpdHMu dmFsdWUgPSBiaXRwb3MgLyBCSVRTX1BFUl9VTklUOworCX0KICAgICAgIGVs c2UKIAlnY2NfYXNzZXJ0ICghamZ1bmMtPmJpdHMua25vd24pOwogCkBAIC0z NzQ1LDE4ICszNzI3LDkgQEAgaXBhX25vZGVfcGFyYW1zX3Q6OmR1cGxpY2F0 ZShjZ3JhcGhfbm9kZSAqc3JjLCBjZ3JhcGhfbm9kZSAqZHN0LAogICAgIHsK ICAgICAgIGlwY3BfZ3Jvd190cmFuc2Zvcm1hdGlvbnNfaWZfbmVjZXNzYXJ5 ICgpOwogICAgICAgc3JjX3RyYW5zID0gaXBjcF9nZXRfdHJhbnNmb3JtYXRp b25fc3VtbWFyeSAoc3JjKTsKLSAgICAgIGNvbnN0IHZlYzxpcGFfYWxpZ25t ZW50LCB2YV9nYz4gKnNyY19hbGlnbm1lbnRzID0gc3JjX3RyYW5zLT5hbGln bm1lbnRzOwogICAgICAgY29uc3QgdmVjPGlwYV92ciwgdmFfZ2M+ICpzcmNf dnIgPSBzcmNfdHJhbnMtPm1fdnI7Ci0gICAgICB2ZWM8aXBhX2FsaWdubWVu dCwgdmFfZ2M+IComZHN0X2FsaWdubWVudHMKLQk9IGlwY3BfZ2V0X3RyYW5z Zm9ybWF0aW9uX3N1bW1hcnkgKGRzdCktPmFsaWdubWVudHM7CiAgICAgICB2 ZWM8aXBhX3ZyLCB2YV9nYz4gKiZkc3RfdnIKIAk9IGlwY3BfZ2V0X3RyYW5z Zm9ybWF0aW9uX3N1bW1hcnkgKGRzdCktPm1fdnI7Ci0gICAgICBpZiAodmVj X3NhZmVfbGVuZ3RoIChzcmNfdHJhbnMtPmFsaWdubWVudHMpID4gMCkKLQl7 Ci0JICB2ZWNfc2FmZV9yZXNlcnZlX2V4YWN0IChkc3RfYWxpZ25tZW50cywg c3JjX2FsaWdubWVudHMtPmxlbmd0aCAoKSk7Ci0JICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgc3JjX2FsaWdubWVudHMtPmxlbmd0aCAoKTsgKytpKQot CSAgICBkc3RfYWxpZ25tZW50cy0+cXVpY2tfcHVzaCAoKCpzcmNfYWxpZ25t ZW50cylbaV0pOwotCX0KICAgICAgIGlmICh2ZWNfc2FmZV9sZW5ndGggKHNy Y190cmFucy0+bV92cikgPiAwKQogCXsKIAkgIHZlY19zYWZlX3Jlc2VydmVf ZXhhY3QgKGRzdF92ciwgc3JjX3ZyLT5sZW5ndGggKCkpOwpAQCAtNDY4OCwx NSArNDY2MSw2IEBAIGlwYV93cml0ZV9qdW1wX2Z1bmN0aW9uIChzdHJ1Y3Qg b3V0cHV0X2Jsb2NrICpvYiwKICAgICB9CiAKICAgYnAgPSBiaXRwYWNrX2Ny ZWF0ZSAob2ItPm1haW5fc3RyZWFtKTsKLSAgYnBfcGFja192YWx1ZSAoJmJw LCBqdW1wX2Z1bmMtPmFsaWdubWVudC5rbm93biwgMSk7Ci0gIHN0cmVhbWVy X3dyaXRlX2JpdHBhY2sgKCZicCk7Ci0gIGlmIChqdW1wX2Z1bmMtPmFsaWdu bWVudC5rbm93bikKLSAgICB7Ci0gICAgICBzdHJlYW1lcl93cml0ZV91aHdp IChvYiwganVtcF9mdW5jLT5hbGlnbm1lbnQuYWxpZ24pOwotICAgICAgc3Ry ZWFtZXJfd3JpdGVfdWh3aSAob2IsIGp1bXBfZnVuYy0+YWxpZ25tZW50Lm1p c2FsaWduKTsKLSAgICB9Ci0KLSAgYnAgPSBiaXRwYWNrX2NyZWF0ZSAob2It Pm1haW5fc3RyZWFtKTsKICAgYnBfcGFja192YWx1ZSAoJmJwLCBqdW1wX2Z1 bmMtPmJpdHMua25vd24sIDEpOwogICBzdHJlYW1lcl93cml0ZV9iaXRwYWNr ICgmYnApOwogICBpZiAoanVtcF9mdW5jLT5iaXRzLmtub3duKQpAQCAtNDc4 MCwxNyArNDc0NCw2IEBAIGlwYV9yZWFkX2p1bXBfZnVuY3Rpb24gKHN0cnVj dCBsdG9faW5wdXRfYmxvY2sgKmliLAogICAgIH0KIAogICBzdHJ1Y3QgYml0 cGFja19kIGJwID0gc3RyZWFtZXJfcmVhZF9iaXRwYWNrIChpYik7Ci0gIGJv b2wgYWxpZ25tZW50X2tub3duID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDEp OwotICBpZiAoYWxpZ25tZW50X2tub3duKQotICAgIHsKLSAgICAgIGp1bXBf ZnVuYy0+YWxpZ25tZW50Lmtub3duID0gdHJ1ZTsKLSAgICAgIGp1bXBfZnVu Yy0+YWxpZ25tZW50LmFsaWduID0gc3RyZWFtZXJfcmVhZF91aHdpIChpYik7 Ci0gICAgICBqdW1wX2Z1bmMtPmFsaWdubWVudC5taXNhbGlnbiA9IHN0cmVh bWVyX3JlYWRfdWh3aSAoaWIpOwotICAgIH0KLSAgZWxzZQotICAgIGp1bXBf ZnVuYy0+YWxpZ25tZW50Lmtub3duID0gZmFsc2U7Ci0KLSAgYnAgPSBzdHJl YW1lcl9yZWFkX2JpdHBhY2sgKGliKTsKICAgYm9vbCBiaXRzX2tub3duID0g YnBfdW5wYWNrX3ZhbHVlICgmYnAsIDEpOwogICBpZiAoYml0c19rbm93bikK ICAgICB7CkBAIC01MTU2LDMwICs1MTA5LDYgQEAgd3JpdGVfaXBjcF90cmFu c2Zvcm1hdGlvbl9pbmZvIChvdXRwdXRfYmxvY2sgKm9iLCBjZ3JhcGhfbm9k ZSAqbm9kZSkKICAgICB9CiAKICAgaXBjcF90cmFuc2Zvcm1hdGlvbl9zdW1t YXJ5ICp0cyA9IGlwY3BfZ2V0X3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkgKG5v ZGUpOwotICBpZiAodHMgJiYgdmVjX3NhZmVfbGVuZ3RoICh0cy0+YWxpZ25t ZW50cykgPiAwKQotICAgIHsKLSAgICAgIGNvdW50ID0gdHMtPmFsaWdubWVu dHMtPmxlbmd0aCAoKTsKLQotICAgICAgc3RyZWFtZXJfd3JpdGVfdWh3aSAo b2IsIGNvdW50KTsKLSAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj b3VudDsgKytpKQotCXsKLQkgIGlwYV9hbGlnbm1lbnQgKnBhcm1fYWwgPSAm KCp0cy0+YWxpZ25tZW50cylbaV07Ci0KLQkgIHN0cnVjdCBiaXRwYWNrX2Qg YnA7Ci0JICBicCA9IGJpdHBhY2tfY3JlYXRlIChvYi0+bWFpbl9zdHJlYW0p OwotCSAgYnBfcGFja192YWx1ZSAoJmJwLCBwYXJtX2FsLT5rbm93biwgMSk7 Ci0JICBzdHJlYW1lcl93cml0ZV9iaXRwYWNrICgmYnApOwotCSAgaWYgKHBh cm1fYWwtPmtub3duKQotCSAgICB7Ci0JICAgICAgc3RyZWFtZXJfd3JpdGVf dWh3aSAob2IsIHBhcm1fYWwtPmFsaWduKTsKLQkgICAgICBzdHJlYW1lcl93 cml0ZV9od2lfaW5fcmFuZ2UgKG9iLT5tYWluX3N0cmVhbSwgMCwgcGFybV9h bC0+YWxpZ24sCi0JCQkJCSAgIHBhcm1fYWwtPm1pc2FsaWduKTsKLQkgICAg fQotCX0KLSAgICB9Ci0gIGVsc2UKLSAgICBzdHJlYW1lcl93cml0ZV91aHdp IChvYiwgMCk7Ci0KICAgaWYgKHRzICYmIHZlY19zYWZlX2xlbmd0aCAodHMt Pm1fdnIpID4gMCkKICAgICB7CiAgICAgICBjb3VudCA9IHRzLT5tX3ZyLT5s ZW5ndGggKCk7CkBAIC01MjUwLDMyICs1MTc5LDcgQEAgcmVhZF9pcGNwX3Ry YW5zZm9ybWF0aW9uX2luZm8gKGx0b19pbnB1dF9ibG9jayAqaWIsIGNncmFw aF9ub2RlICpub2RlLAogICAgICAgYWdndmFscyA9IGF2OwogICAgIH0KICAg aXBhX3NldF9ub2RlX2FnZ192YWx1ZV9jaGFpbiAobm9kZSwgYWdndmFscyk7 Ci0KLSAgY291bnQgPSBzdHJlYW1lcl9yZWFkX3Vod2kgKGliKTsKLSAgaWYg KGNvdW50ID4gMCkKLSAgICB7Ci0gICAgICBpcGNwX2dyb3dfdHJhbnNmb3Jt YXRpb25zX2lmX25lY2Vzc2FyeSAoKTsKLQotICAgICAgaXBjcF90cmFuc2Zv cm1hdGlvbl9zdW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3RyYW5zZm9ybWF0aW9u X3N1bW1hcnkgKG5vZGUpOwotICAgICAgdmVjX3NhZmVfZ3Jvd19jbGVhcmVk ICh0cy0+YWxpZ25tZW50cywgY291bnQpOwotCi0gICAgICBmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykKLQl7Ci0JICBpcGFfYWxpZ25tZW50ICpwYXJt X2FsOwotCSAgcGFybV9hbCA9ICYoKnRzLT5hbGlnbm1lbnRzKVtpXTsKLQkg IHN0cnVjdCBiaXRwYWNrX2QgYnA7Ci0JICBicCA9IHN0cmVhbWVyX3JlYWRf Yml0cGFjayAoaWIpOwotCSAgcGFybV9hbC0+a25vd24gPSBicF91bnBhY2tf dmFsdWUgKCZicCwgMSk7Ci0JICBpZiAocGFybV9hbC0+a25vd24pCi0JICAg IHsKLQkgICAgICBwYXJtX2FsLT5hbGlnbiA9IHN0cmVhbWVyX3JlYWRfdWh3 aSAoaWIpOwotCSAgICAgIHBhcm1fYWwtPm1pc2FsaWduCi0JCT0gc3RyZWFt ZXJfcmVhZF9od2lfaW5fcmFuZ2UgKGliLCAiaXBhLXByb3AgbWlzYWxpZ24i LAotCQkJCQkgICAgICAwLCBwYXJtX2FsLT5hbGlnbik7Ci0JICAgIH0KLQl9 Ci0gICAgfQotCisgIAogICBjb3VudCA9IHN0cmVhbWVyX3JlYWRfdWh3aSAo aWIpOwogICBpZiAoY291bnQgPiAwKQogICAgIHsKQEAgLTU1NjksNTggKzU0 NzMsNiBAQCBpcGNwX21vZGlmX2RvbV93YWxrZXI6OmJlZm9yZV9kb21fY2hp bGRyZW4gKGJhc2ljX2Jsb2NrIGJiKQogICByZXR1cm4gTlVMTDsKIH0KIAot LyogVXBkYXRlIGFsaWdubWVudCBvZiBmb3JtYWwgcGFyYW1ldGVycyBhcyBk ZXNjcmliZWQgaW4KLSAgIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFyeS4g ICovCi0KLXN0YXRpYyB2b2lkCi1pcGNwX3VwZGF0ZV9hbGlnbm1lbnRzIChz dHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCi17Ci0gIHRyZWUgZm5kZWNsID0g bm9kZS0+ZGVjbDsKLSAgdHJlZSBwYXJtID0gREVDTF9BUkdVTUVOVFMgKGZu ZGVjbCk7Ci0gIHRyZWUgbmV4dF9wYXJtID0gcGFybTsKLSAgaXBjcF90cmFu c2Zvcm1hdGlvbl9zdW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3RyYW5zZm9ybWF0 aW9uX3N1bW1hcnkgKG5vZGUpOwotICBpZiAoIXRzIHx8IHZlY19zYWZlX2xl bmd0aCAodHMtPmFsaWdubWVudHMpID09IDApCi0gICAgcmV0dXJuOwotICBj b25zdCB2ZWM8aXBhX2FsaWdubWVudCwgdmFfZ2M+ICZhbGlnbm1lbnRzID0g KnRzLT5hbGlnbm1lbnRzOwotICB1bnNpZ25lZCBjb3VudCA9IGFsaWdubWVu dHMubGVuZ3RoICgpOwotCi0gIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj b3VudDsgKytpLCBwYXJtID0gbmV4dF9wYXJtKQotICAgIHsKLSAgICAgIGlm IChub2RlLT5jbG9uZS5jb21iaW5lZF9hcmdzX3RvX3NraXAKLQkgICYmIGJp dG1hcF9iaXRfcCAobm9kZS0+Y2xvbmUuY29tYmluZWRfYXJnc190b19za2lw LCBpKSkKLQljb250aW51ZTsKLSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQg KHBhcm0pOwotICAgICAgbmV4dF9wYXJtID0gREVDTF9DSEFJTiAocGFybSk7 Ci0KLSAgICAgIGlmICghYWxpZ25tZW50c1tpXS5rbm93biB8fCAhaXNfZ2lt cGxlX3JlZyAocGFybSkpCi0JY29udGludWU7Ci0gICAgICB0cmVlIGRkZWYg PSBzc2FfZGVmYXVsdF9kZWYgKERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChub2Rl LT5kZWNsKSwgcGFybSk7Ci0gICAgICBpZiAoIWRkZWYpCi0JY29udGludWU7 Ci0KLSAgICAgIGlmIChkdW1wX2ZpbGUpCi0JZnByaW50ZiAoZHVtcF9maWxl LCAiICBBZGp1c3RpbmcgYWxpZ25tZW50IG9mIHBhcmFtICV1IHRvICV1LCAi Ci0JCSAibWlzYWxpZ25tZW50IHRvICV1XG4iLCBpLCBhbGlnbm1lbnRzW2ld LmFsaWduLAotCQkgYWxpZ25tZW50c1tpXS5taXNhbGlnbik7Ci0KLSAgICAg IHN0cnVjdCBwdHJfaW5mb19kZWYgKnBpID0gZ2V0X3B0cl9pbmZvIChkZGVm KTsKLSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHBpKTsKLSAgICAgIHVu c2lnbmVkIG9sZF9hbGlnbjsKLSAgICAgIHVuc2lnbmVkIG9sZF9taXNhbGln bjsKLSAgICAgIGJvb2wgb2xkX2tub3duID0gZ2V0X3B0cl9pbmZvX2FsaWdu bWVudCAocGksICZvbGRfYWxpZ24sICZvbGRfbWlzYWxpZ24pOwotCi0gICAg ICBpZiAob2xkX2tub3duCi0JICAmJiBvbGRfYWxpZ24gPj0gYWxpZ25tZW50 c1tpXS5hbGlnbikKLQl7Ci0JICBpZiAoZHVtcF9maWxlKQotCSAgICBmcHJp bnRmIChkdW1wX2ZpbGUsICIgICAgQnV0IHRoZSBhbGlnbm1lbnQgd2FzIGFs cmVhZHkgJXUuXG4iLAotCQkgICAgIG9sZF9hbGlnbik7Ci0JICBjb250aW51 ZTsKLQl9Ci0gICAgICBzZXRfcHRyX2luZm9fYWxpZ25tZW50IChwaSwgYWxp Z25tZW50c1tpXS5hbGlnbiwgYWxpZ25tZW50c1tpXS5taXNhbGlnbik7Ci0g ICAgfQotfQotCiAvKiBVcGRhdGUgYml0cyBpbmZvIG9mIGZvcm1hbCBwYXJh bWV0ZXJzIGFzIGRlc2NyaWJlZCBpbgogICAgaXBjcF90cmFuc2Zvcm1hdGlv bl9zdW1tYXJ5LiAgKi8KIApAQCAtNTY0Nyw3ICs1NDk5LDcgQEAgaXBjcF91 cGRhdGVfYml0cyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogICAgICAg bmV4dF9wYXJtID0gREVDTF9DSEFJTiAocGFybSk7CiAKICAgICAgIGlmICgh Yml0c1tpXS5rbm93bgotCSAgfHwgIUlOVEVHUkFMX1RZUEVfUCAoVFJFRV9U WVBFIChwYXJtKSkKKwkgIHx8ICEoSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZ UEUgKHBhcm0pKSB8fCBQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChwYXJt KSkpCiAJICB8fCAhaXNfZ2ltcGxlX3JlZyAocGFybSkpCiAJY29udGludWU7 ICAgICAgIAogCkBAIC01NjYyLDEyICs1NTE0LDUzIEBAIGlwY3BfdXBkYXRl X2JpdHMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKIAkgIGZwcmludGYg KGR1bXBfZmlsZSwgIlxuIik7CiAJfQogCi0gICAgICB1bnNpZ25lZCBwcmVj ID0gVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoZGRlZikpOwotICAgICAg c2lnbm9wIHNnbiA9IFRZUEVfU0lHTiAoVFJFRV9UWVBFIChkZGVmKSk7Cisg ICAgICBpZiAoSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKGRkZWYpKSkK Kwl7CisJICB1bnNpZ25lZCBwcmVjID0gVFlQRV9QUkVDSVNJT04gKFRSRUVf VFlQRSAoZGRlZikpOworCSAgc2lnbm9wIHNnbiA9IFRZUEVfU0lHTiAoVFJF RV9UWVBFIChkZGVmKSk7CisKKwkgIHdpZGVfaW50IG5vbnplcm9fYml0cyA9 IHdpZGVfaW50Ojpmcm9tIChiaXRzW2ldLm1hc2ssIHByZWMsIFVOU0lHTkVE KQorCQkJCSAgfCB3aWRlX2ludDo6ZnJvbSAoYml0c1tpXS52YWx1ZSwgcHJl Yywgc2duKTsKKwkgIHNldF9ub256ZXJvX2JpdHMgKGRkZWYsIG5vbnplcm9f Yml0cyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHVuc2lnbmVkIHRlbSA9 IGJpdHNbaV0ubWFzay50b191aHdpICgpOworCSAgdW5zaWduZWQgSE9TVF9X SURFX0lOVCBiaXRwb3MgPSBiaXRzW2ldLnZhbHVlLnRvX3Vod2kgKCk7IAor CSAgdW5zaWduZWQgYWxpZ24gPSB0ZW0gJiAtdGVtOworCSAgdW5zaWduZWQg bWlzYWxpZ24gPSBiaXRwb3MgJiAoYWxpZ24gLSAxKTsKIAotICAgICAgd2lk ZV9pbnQgbm9uemVyb19iaXRzID0gd2lkZV9pbnQ6OmZyb20gKGJpdHNbaV0u bWFzaywgcHJlYywgVU5TSUdORUQpCi0JCQkgICAgICB8IHdpZGVfaW50Ojpm cm9tIChiaXRzW2ldLnZhbHVlLCBwcmVjLCBzZ24pOwotICAgICAgc2V0X25v bnplcm9fYml0cyAoZGRlZiwgbm9uemVyb19iaXRzKTsKKwkgIGlmIChhbGln biA+IDEpCisJICAgIHsKKwkgICAgICBpZiAoZHVtcF9maWxlKQorCQlmcHJp bnRmIChkdW1wX2ZpbGUsICJBZGp1c3RpbmcgYWxpZ246ICV1LCBtaXNhbGln bjogJXVcbiIsIGFsaWduLCBtaXNhbGlnbik7IAorCisJICAgICAgdW5zaWdu ZWQgb2xkX2FsaWduLCBvbGRfbWlzYWxpZ247CisJICAgICAgc3RydWN0IHB0 cl9pbmZvX2RlZiAqcGkgPSBnZXRfcHRyX2luZm8gKGRkZWYpOworCSAgICAg IGJvb2wgb2xkX2tub3duID0gZ2V0X3B0cl9pbmZvX2FsaWdubWVudCAocGks ICZvbGRfYWxpZ24sICZvbGRfbWlzYWxpZ24pOworCisJICAgICAgaWYgKG9s ZF9rbm93bgorCQkgICYmIG9sZF9hbGlnbiA+IGFsaWduKQorCQl7CisJCSAg aWYgKGR1bXBfZmlsZSkKKwkJICAgIHsKKwkJICAgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiQnV0IGFsaWdubWVudCB3YXMgYWxyZWFkeSAldS5cbiIsIG9s ZF9hbGlnbik7CisJCSAgICAgIGlmIChvbGRfbWlzYWxpZ24gJiAoYWxpZ24g LSAxKSAhPSBtaXNhbGlnbikKKwkJCWZwcmludGYgKGR1bXBfZmlsZSwgIm9s ZF9taXNhbGlnbiAoJXUpIGFuZCBtaXNhbGlnbiAoJXUpIG1pc21hdGNoXG4i LAorCQkJCSBvbGRfbWlzYWxpZ24sIG1pc2FsaWduKTsKKwkJICAgIH0KKwkJ ICBjb250aW51ZTsKKwkJfQorCisJICAgICAgaWYgKG9sZF9rbm93bgorCQkg ICYmIChtaXNhbGlnbiAmIChvbGRfYWxpZ24gLSAxKSAhPSBvbGRfbWlzYWxp Z24pCisJCSAgJiYgZHVtcF9maWxlKQorCQlmcHJpbnRmIChkdW1wX2ZpbGUs ICJvbGRfbWlzYWxpZ24gKCV1KSBhbmQgbWlzYWxpZ24gKCV1KSBtaXNtYXRj aFxuIiwKKwkJCSBvbGRfbWlzYWxpZ24sIG1pc2FsaWduKTsKKworCSAgICAg IHNldF9wdHJfaW5mb19hbGlnbm1lbnQgKHBpLCBhbGlnbiwgbWlzYWxpZ24p OyAKKwkgICAgfQorCX0KICAgICB9CiB9CiAKQEAgLTU3NDIsNyArNTYzNSw2 IEBAIGlwY3BfdHJhbnNmb3JtX2Z1bmN0aW9uIChzdHJ1Y3QgY2dyYXBoX25v ZGUgKm5vZGUpCiAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiTW9kaWZpY2F0 aW9uIHBoYXNlIG9mIG5vZGUgJXMvJWlcbiIsCiAJICAgICBub2RlLT5uYW1l ICgpLCBub2RlLT5vcmRlcik7CiAKLSAgaXBjcF91cGRhdGVfYWxpZ25tZW50 cyAobm9kZSk7CiAgIGlwY3BfdXBkYXRlX2JpdHMgKG5vZGUpOwogICBpcGNw X3VwZGF0ZV92ciAobm9kZSk7CiAgIGFnZ3ZhbCA9IGlwYV9nZXRfYWdnX3Jl cGxhY2VtZW50c19mb3Jfbm9kZSAobm9kZSk7CkBAIC01Nzc1LDcgKzU2Njcs NiBAQCBpcGNwX3RyYW5zZm9ybV9mdW5jdGlvbiAoc3RydWN0IGNncmFwaF9u b2RlICpub2RlKQogICBmYmkuYmJfaW5mb3MucmVsZWFzZSAoKTsKICAgZnJl ZV9kb21pbmFuY2VfaW5mbyAoQ0RJX0RPTUlOQVRPUlMpOwogICAoKmlwY3Bf dHJhbnNmb3JtYXRpb25zKVtub2RlLT51aWRdLmFnZ192YWx1ZXMgPSBOVUxM OwotICAoKmlwY3BfdHJhbnNmb3JtYXRpb25zKVtub2RlLT51aWRdLmFsaWdu bWVudHMgPSBOVUxMOwogICBkZXNjcmlwdG9ycy5yZWxlYXNlICgpOwogCiAg IGlmICghc29tZXRoaW5nX2NoYW5nZWQpCmRpZmYgLS1naXQgYS9nY2MvaXBh LXByb3AuaCBiL2djYy9pcGEtcHJvcC5oCmluZGV4IGExMjM5NzguLjRlZWFl ODggMTAwNjQ0Ci0tLSBhL2djYy9pcGEtcHJvcC5oCisrKyBiL2djYy9pcGEt cHJvcC5oCkBAIC0xNDMsMTcgKzE0Myw2IEBAIHN0cnVjdCBHVFkoKCkpIGlw YV9hZ2dfanVtcF9mdW5jdGlvbgogCiB0eXBlZGVmIHN0cnVjdCBpcGFfYWdn X2p1bXBfZnVuY3Rpb24gKmlwYV9hZ2dfanVtcF9mdW5jdGlvbl9wOwogCi0v KiBJbmZvIGFib3V0IHBvaW50ZXIgYWxpZ25tZW50cy4gKi8KLXN0cnVjdCBH VFkoKCkpIGlwYV9hbGlnbm1lbnQKLXsKLSAgLyogVGhlIGRhdGEgZmllbGRz IGJlbG93IGFyZSB2YWxpZCBvbmx5IGlmIGtub3duIGlzIHRydWUuICAqLwot ICBib29sIGtub3duOwotICAvKiBTZWUgcHRyX2luZm9fZGVmIGFuZCBnZXRf cG9pbnRlcl9hbGlnbm1lbnRfMSBmb3IgZGVzY3JpcHRpb24gb2YgdGhlc2UK LSAgICAgdHdvLiAgKi8KLSAgdW5zaWduZWQgYWxpZ247Ci0gIHVuc2lnbmVk IG1pc2FsaWduOwotfTsKLQogLyogSW5mb3JtYXRpb24gYWJvdXQgemVyby9u b24temVybyBiaXRzLiAgKi8KIHN0cnVjdCBHVFkoKCkpIGlwYV9iaXRzCiB7 CkBAIC0xODYsOSArMTc1LDYgQEAgc3RydWN0IEdUWSAoKCkpIGlwYV9qdW1w X2Z1bmMKICAgICAgZGVzY3JpcHRpb24uICAqLwogICBzdHJ1Y3QgaXBhX2Fn Z19qdW1wX2Z1bmN0aW9uIGFnZzsKIAotICAvKiBJbmZvcm1hdGlvbiBhYm91 dCBhbGlnbm1lbnQgb2YgcG9pbnRlcnMuICovCi0gIHN0cnVjdCBpcGFfYWxp Z25tZW50IGFsaWdubWVudDsKLQogICAvKiBJbmZvcm1hdGlvbiBhYm91dCB6 ZXJvL25vbi16ZXJvIGJpdHMuICAqLwogICBzdHJ1Y3QgaXBhX2JpdHMgYml0 czsKIApAQCAtNTMxLDggKzUxNyw2IEBAIHN0cnVjdCBHVFkoKCkpIGlwY3Bf dHJhbnNmb3JtYXRpb25fc3VtbWFyeQogewogICAvKiBMaW5rZWQgbGlzdCBv ZiBrbm93biBhZ2dyZWdhdGUgdmFsdWVzLiAgKi8KICAgaXBhX2FnZ19yZXBs YWNlbWVudF92YWx1ZSAqYWdnX3ZhbHVlczsKLSAgLyogQWxpZ25tZW50IGlu Zm9ybWF0aW9uIGZvciBwb2ludGVycy4gICovCi0gIHZlYzxpcGFfYWxpZ25t ZW50LCB2YV9nYz4gKmFsaWdubWVudHM7CiAgIC8qIEtub3duIGJpdHMgaW5m b3JtYXRpb24uICAqLwogICB2ZWM8aXBhX2JpdHMsIHZhX2djPiAqYml0czsK ICAgLyogVmFsdWUgcmFuZ2UgaW5mb3JtYXRpb24uICAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL29wdHMuYyBiL2djYy9vcHRzLmMKaW5kZXggNDVmMWY4OWMuLjkw ZTYxODYgMTAwNjQ0Ci0tLSBhL2djYy9vcHRzLmMKKysrIGIvZ2NjL29wdHMu YwpAQCAtNTA0LDcgKzUwNCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVm YXVsdF9vcHRpb25zIGRlZmF1bHRfb3B0aW9uc190YWJsZVtdID0KICAgICB7 IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZnRyZWVfcHJlLCBOVUxMLCAxIH0s CiAgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2Z0cmVlX3N3aXRjaF9j b252ZXJzaW9uLCBOVUxMLCAxIH0sCiAgICAgeyBPUFRfTEVWRUxTXzJfUExV UywgT1BUX2ZpcGFfY3AsIE5VTEwsIDEgfSwKLSAgICB7IE9QVF9MRVZFTFNf Ml9QTFVTLCBPUFRfZmlwYV9jcF9hbGlnbm1lbnQsIE5VTEwsIDEgfSwKICAg ICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmlwYV9iaXRfY3AsIE5VTEws IDEgfSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmlwYV92cnAs IE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmRl dmlydHVhbGl6ZSwgTlVMTCwgMSB9LApAQCAtMTQyMyw5ICsxNDIyLDYgQEAg ZW5hYmxlX2Zkb19vcHRpbWl6YXRpb25zIChzdHJ1Y3QgZ2NjX29wdGlvbnMg Km9wdHMsCiAgIGlmICghb3B0c19zZXQtPnhfZmxhZ19pcGFfY3BfY2xvbmUK ICAgICAgICYmIHZhbHVlICYmIG9wdHMtPnhfZmxhZ19pcGFfY3ApCiAgICAg b3B0cy0+eF9mbGFnX2lwYV9jcF9jbG9uZSA9IHZhbHVlOwotICBpZiAoIW9w dHNfc2V0LT54X2ZsYWdfaXBhX2NwX2FsaWdubWVudAotICAgICAgJiYgdmFs dWUgJiYgb3B0cy0+eF9mbGFnX2lwYV9jcCkKLSAgICBvcHRzLT54X2ZsYWdf aXBhX2NwX2FsaWdubWVudCA9IHZhbHVlOwogICBpZiAoIW9wdHNfc2V0LT54 X2ZsYWdfaXBhX2JpdF9jcAogICAgICAgJiYgdmFsdWUgJiYgb3B0cy0+eF9m bGFnX2lwYV9jcCkKICAgICBvcHRzLT54X2ZsYWdfaXBhX2JpdF9jcCA9IHZh bHVlOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3By b3BhbGlnbi0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFs aWduLTEuYwppbmRleCBmMzQ1NTJjLi4xNDkxZGU4IDEwMDY0NAotLS0gYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTEuYworKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTEuYwpAQCAtMjcs NSArMjcsNSBAQCBiYXIgKHZvaWQpCiB9CiAKIAotLyogeyBkZy1maW5hbCB7 IHNjYW4taXBhLWR1bXAgIkFkanVzdGluZyBhbGlnbm1lbnQgb2YgcGFyYW0i ICJjcCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAi QWRqdXN0aW5nIGFsaWduIiAiY3AiIH0gfSAqLwogLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLW5vdCAiZmFpbF90aGVfdGVzdCIgIm9wdGltaXpl ZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9p cGEvcHJvcGFsaWduLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9w cm9wYWxpZ24tMi5jCmluZGV4IDY3YjE0OWEuLjUxNzk5YzcgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMi5jCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMi5jCkBA IC01Myw1ICs1Myw1IEBAIGJhcjIgKHZvaWQpCiAgIHRocm91Z2ggKGMuYnVm KTsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkFkanVz dGluZyBhbGlnbm1lbnQgb2YgcGFyYW0iICJjcCIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiQWRqdXN0aW5nIGFsaWduIiAiY3Ai IH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAi ZmFpbF90aGVfdGVzdCIgIm9wdGltaXplZCIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTMuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMy5jCmluZGV4IGQz YmMyYzQuLjRmNWRmNGEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wYWxpZ24tMy5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wYWxpZ24tMy5jCkBAIC0xLDUgKzEsNSBAQAogLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1mbm8t aXBhLWNwLWFsaWdubWVudCAtZm5vLWVhcmx5LWlubGluaW5nIC1mZHVtcC1p cGEtY3AgLWZkdW1wLXRyZWUtb3B0aW1pemVkIiB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1PMiAtZm5vLWlwYS1iaXQtY3AgLWZuby1lYXJseS1pbmxpbmlu ZyAtZmR1bXAtaXBhLWNwIC1mZHVtcC10cmVlLW9wdGltaXplZCIgfSAqLwog LyogeyBkZy1za2lwLWlmICJObyBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIiB7 IHsgISBuYXR1cmFsX2FsaWdubWVudF8zMiB9ICYmIHsgISBuYXR1cmFsX2Fs aWdubWVudF82NCB9IH0gfSAqLwogCiAjaW5jbHVkZSA8c3RkaW50Lmg+CkBA IC01Myw1ICs1Myw1IEBAIGJhcjIgKHZvaWQpCiAgIHRocm91Z2ggKGMuYnVm KTsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAtbm90ICJB ZGp1c3RpbmcgYWxpZ25tZW50IG9mIHBhcmFtIiAiY3AiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAtbm90ICJhbGlnbjoiICJjcCIg fSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImZhaWxf dGhlX3Rlc3QiICJvcHRpbWl6ZWQiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BhbGlnbi00LmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTQuYwppbmRleCBiNjgwODEz Li5iZDMyYmYwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9p cGEvcHJvcGFsaWduLTQuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9p cGEvcHJvcGFsaWduLTQuYwpAQCAtMjAsNCArMjAsNCBAQCBtYWluKCkKICAg dGVzdCAoJmFhWzNdKTsKICAgcmV0dXJuIDA7CiB9Ci0vKiB7IGRnLWZpbmFs IHsgc2Nhbi1pcGEtZHVtcCAiQWxpZ25tZW50IDgsIG1pc2FsaWdubWVudCA0 IiAgImNwIiAgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVt cCAiYWxpZ246IDgsIG1pc2FsaWduOiA0IiAgImNwIiAgfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTUu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tNS5jCmlu ZGV4IGYyY2Y2MDAuLjY4ZTU3ZGEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tNS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tNS5jCkBAIC0yMCw0ICsyMCw0IEBA IG1haW4oKQogICB0ZXN0ICgmYmIpOwogICByZXR1cm4gMDsKIH0KLS8qIHsg ZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJBbGlnbm1lbnQgMiIgICJjcCIg IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgImFsaWdu OiAyIiAgImNwIiAgfSB9ICovCg== --94eb2c0603066139e7053dfaa813--