From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7385 invoked by alias); 23 Aug 2019 08:27:50 -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 7377 invoked by uid 89); 23 Aug 2019 08:27:50 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.5 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.1 spammy=reply! X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0a-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.156.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 23 Aug 2019 08:27:46 +0000 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7N8R89Q098115 for ; Fri, 23 Aug 2019 04:27:44 -0400 Received: from e06smtp04.uk.ibm.com (e06smtp04.uk.ibm.com [195.75.94.100]) by mx0a-001b2d01.pphosted.com with ESMTP id 2uj9hfpf9q-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 23 Aug 2019 04:27:44 -0400 Received: from localhost by e06smtp04.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 23 Aug 2019 09:27:42 +0100 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp04.uk.ibm.com (192.168.101.134) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 23 Aug 2019 09:27:38 +0100 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x7N8Rbiq53674114 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 23 Aug 2019 08:27:37 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8ACA911C04A; Fri, 23 Aug 2019 08:27:37 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4930F11C052; Fri, 23 Aug 2019 08:27:35 +0000 (GMT) Received: from kewenlins-mbp.cn.ibm.com (unknown [9.200.147.238]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP; Fri, 23 Aug 2019 08:27:35 +0000 (GMT) Subject: Re: [PATCH v6 3/3] PR80791 Consider doloop cmp use in ivopts To: "Bin.Cheng" Cc: gcc-patches List , Segher Boessenkool , Bill Schmidt , Richard Guenther References: <1557803406-123657-1-git-send-email-linkw@linux.ibm.com> <2d897dc2-a01c-5005-6973-aad0c5930aa8@linux.ibm.com> <9d622cb7-2c1f-91bf-a61e-0239aa2ea8bf@linux.ibm.com> <6d0b4b11-1c33-fbd5-604d-293c01b1c285@linux.ibm.com> <43a3b3c1-9c41-82fa-a5db-1a7a1a5ceae1@linux.ibm.com> From: "Kewen.Lin" Date: Fri, 23 Aug 2019 09:57:00 -0000 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------7C7BC046621AD65B2E0ECA53" x-cbid: 19082308-0016-0000-0000-000002A21025 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19082308-0017-0000-0000-000033024D0C Message-Id: X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg01620.txt.bz2 This is a multi-part message in MIME format. --------------7C7BC046621AD65B2E0ECA53 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-length: 6576 Hi Bin on 2019/8/23 上午10:19, Bin.Cheng wrote: > On Thu, Aug 22, 2019 at 3:09 PM Kewen.Lin wrote: >> >> Hi Bin, >> >> on 2019/8/22 下午1:46, Bin.Cheng wrote: >>> On Thu, Aug 22, 2019 at 11:18 AM Kewen.Lin wrote: >>>> >>>> Hi Bin, >>>> >>>> Thanks for your time! >>>> >>>> on 2019/8/21 下午8:32, Bin.Cheng wrote: >>>>> On Wed, Aug 14, 2019 at 3:23 PM Kewen.Lin wrote: >>>>>> >>>>>> Hi! >>>>>> >>>>>> Comparing to the previous versions of implementation mainly based on the >>>>>> existing IV cands but zeroing the related group/use cost, this new one is based >>>>>> on Richard and Segher's suggestion introducing one doloop dedicated IV cand. >>>>>> >>>>>> Some key points are listed below: >>>>>> 1) New field doloop_p in struct iv_cand to indicate doloop dedicated IV cand. >>>>>> 2) Special name "doloop" assigned. >>>>>> 3) Doloop IV cand with form (niter+1, +, -1) >>>>>> 4) For doloop IV cand, no extra one cost like BIV, assign zero cost for step. >>>>>> 5) Support may_be_zero (regressed PR is in this case), the base of doloop IV >>>>>> can be COND_EXPR, add handlings in cand_value_at and may_eliminate_iv. >>>>>> 6) Add more expr support in force_expr_to_var_cost for reasonable cost >>>>>> calculation on the IV base with may_be_zero (like COND_EXPR). >>>>>> 7) Set zero cost when using doloop IV cand for doloop use. >>>>>> 8) Add three hooks (should we merge _generic and _address?). >>>>>> *) have_count_reg_decr_p, is to indicate the target has special hardware >>>>>> count register, we shouldn't consider the impact of doloop IV when >>>>>> calculating register pressures. >>>>>> *) doloop_cost_for_generic, is the extra cost when using doloop IV cand for >>>>>> generic type IV use. >>>>>> *) doloop_cost_for_address, is the extra cost when using doloop IV cand for >>>>>> address type IV use. >> The new patch addressing the comments is attached. >> Could you please have a look again? Thanks in advance! > Thanks for working on this. A bit more nit-pickings. > > - add_candidate_1 (data, base, step, important, > - IP_NORMAL, use, NULL, orig_iv); > - if (ip_end_pos (data->current_loop) > + add_candidate_1 (data, base, step, important, IP_NORMAL, use, NULL, doloop, > + orig_iv); > + if (!doloop && ip_end_pos (data->current_loop) > Could you add some comments elaborating why ip_end_pos candidate > shouldn't be added for doloop case? Because the increment position is > wrong. > > Also if you make doloop the last default parameter of add_candidate_1, > you can save more unnecessary changes to calls to add_candidate? > > - cost = get_computation_cost (data, use, cand, false, > - &inv_vars, NULL, &inv_expr); > + { > + cost = get_computation_cost (data, use, cand, false, &inv_vars, NULL, > + &inv_expr); > + if (cand->doloop_p) > + cost += targetm.doloop_cost_for_generic; > + } > This adjustment > > cost = get_computation_cost (data, use, cand, true, > &inv_vars, &can_autoinc, &inv_expr); > > + if (cand->doloop_p) > + cost += targetm.doloop_cost_for_address; > + > and this adjustment can be moved into get_computation_cost where all > cost adjustments are done. > > + /* For doloop candidate/use pair, adjust to zero cost. */ > + if (group->doloop_p && cand->doloop_p) > + cost = no_cost; > Note above code handles comparing against zero case and decreases the > cost by one (which prefers the same kind candidate as doloop one), > it's very possible to have -1 cost for doloop cand here. how about > just set to no_cost if it's positive? Your call. > > +/* For the targets which support doloop, to predict whether later RTL doloop > + transformation will perform on this loop, further detect the doloop use and > + mark the flag doloop_use_p if predicted. */ > + > +void > +predict_and_process_doloop (struct ivopts_data *data) > A better name here? Sorry I don't have another candidate in mind... > > + data->doloop_use_p = false; > This can be moved to the beginning of above > 'predict_and_process_doloop' function. > > Lastly, could you please add some brief description/comment about > doloop handling as a subsection in the file head comment? > > Otherwise, the ivopt changes look good to me. > > Thanks, > bin > Thanks for your prompt reply! I've updated the code as your comments, the updated version is attached. Looking forward to your review again. Thanks, Kewen ----- gcc/ChangeLog 2019-08-23 Kewen Lin PR middle-end/80791 * config/rs6000/rs6000.c (TARGET_HAVE_COUNT_REG_DECR_P): New macro. (TARGET_DOLOOP_COST_FOR_GENERIC): Likewise. (TARGET_DOLOOP_COST_FOR_ADDRESS): Likewise. * target.def (have_count_reg_decr_p): New hook. (doloop_cost_for_generic): Likewise. (doloop_cost_for_address): Likewise. * doc/tm.texi.in (TARGET_HAVE_COUNT_REG_DECR_P): Likewise. (TARGET_DOLOOP_COST_FOR_GENERIC): Likewise. (TARGET_DOLOOP_COST_FOR_ADDRESS): Likewise. * doc/tm.texi: Regenerate. * tree-ssa-loop-ivopts.c (comp_cost::operator+=): Consider infinite cost addend. (record_group): Init doloop_p. (add_candidate_1): Add optional argument doloop, change the handlings accordingly. (add_candidate): Likewise. (generic_predict_doloop_p): Update attribute. (force_expr_to_var_cost): Add costing for expressions COND_EXPR/LT_EXPR/ LE_EXPR/GT_EXPR/GE_EXPR/EQ_EXPR/NE_EXPR/UNORDERED_EXPR/ORDERED_EXPR/ UNLT_EXPR/UNLE_EXPR/UNGT_EXPR/UNGE_EXPR/UNEQ_EXPR/LTGT_EXPR/MAX_EXPR/ MIN_EXPR. (get_computation_cost): Update for doloop IV cand extra cost. (determine_group_iv_cost_cond): Update for doloop IV cand. (determine_iv_cost): Likewise. (ivopts_estimate_reg_pressure): Likewise. (may_eliminate_iv): Update handlings for doloop IV cand. (add_iv_candidate_for_doloop): New function. (find_iv_candidates): Call function add_iv_candidate_for_doloop. (iv_ca_set_no_cp): Update for doloop IV cand. (iv_ca_set_cp): Likewise. (iv_ca_dump): Dump register cost. (find_doloop_use): New function. (analyze_and_mark_doloop_use): Likewise. (tree_ssa_iv_optimize_loop): Call function analyze_and_mark_doloop_use. gcc/testsuite/ChangeLog 2019-08-23 Kewen Lin PR middle-end/80791 * gcc.dg/tree-ssa/ivopts-3.c: Adjust for doloop change. * gcc.dg/tree-ssa/ivopts-lt.c: Likewise. * gcc.dg/tree-ssa/pr32044.c: Likewise. --------------7C7BC046621AD65B2E0ECA53 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="doloop_dedicated_iv3.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="doloop_dedicated_iv3.diff" Content-length: 31086 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jIGIvZ2Nj L2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKaW5kZXggNjY2N2NkMC4uNWVjY2Jk YyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKysr IGIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKQEAgLTE5MTIsNiArMTkx MiwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIHJz NjAwMF9hdHRyaWJ1dGVfdGFibGVbXSA9CiAjdW5kZWYgVEFSR0VUX1BSRURJ Q1RfRE9MT09QX1AKICNkZWZpbmUgVEFSR0VUX1BSRURJQ1RfRE9MT09QX1Ag cnM2MDAwX3ByZWRpY3RfZG9sb29wX3AKIAorI3VuZGVmIFRBUkdFVF9IQVZF X0NPVU5UX1JFR19ERUNSX1AKKyNkZWZpbmUgVEFSR0VUX0hBVkVfQ09VTlRf UkVHX0RFQ1JfUCB0cnVlCisKKy8qIDEwMDAwMDAwMDAgaXMgaW5maW5pdGUg Y29zdCBpbiBJVk9QVHMuICAqLworI3VuZGVmIFRBUkdFVF9ET0xPT1BfQ09T VF9GT1JfR0VORVJJQworI2RlZmluZSBUQVJHRVRfRE9MT09QX0NPU1RfRk9S X0dFTkVSSUMgMTAwMDAwMDAwMAorCisjdW5kZWYgVEFSR0VUX0RPTE9PUF9D T1NUX0ZPUl9BRERSRVNTCisjZGVmaW5lIFRBUkdFVF9ET0xPT1BfQ09TVF9G T1JfQUREUkVTUyAxMDAwMDAwMDAwCisKICN1bmRlZiBUQVJHRVRfQVRPTUlD X0FTU0lHTl9FWFBBTkRfRkVOVgogI2RlZmluZSBUQVJHRVRfQVRPTUlDX0FT U0lHTl9FWFBBTkRfRkVOViByczYwMDBfYXRvbWljX2Fzc2lnbl9leHBhbmRf ZmVudgogCmRpZmYgLS1naXQgYS9nY2MvZG9jL3RtLnRleGkgYi9nY2MvZG9j L3RtLnRleGkKaW5kZXggYzJhYTRkMC4uOWYzYTA4YSAxMDA2NDQKLS0tIGEv Z2NjL2RvYy90bS50ZXhpCisrKyBiL2djYy9kb2MvdG0udGV4aQpAQCAtMTE2 MTgsNiArMTE2MTgsMjkgQEAgbG9vcHMsIGFuZCB3aWxsIGhlbHAgaXZvcHRz IHRvIG1ha2Ugc29tZSBkZWNpc2lvbnMuCiBUaGUgZGVmYXVsdCB2ZXJzaW9u IG9mIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLgogQGVuZCBkZWZ0eXBlZm4K IAorQGRlZnR5cGV2ciB7VGFyZ2V0IEhvb2t9IGJvb2wgVEFSR0VUX0hBVkVf Q09VTlRfUkVHX0RFQ1JfUAorUmV0dXJuIHRydWUgaWYgdGhlIHRhcmdldCBz dXBwb3J0cyBoYXJkd2FyZSBjb3VudCByZWdpc3RlciBmb3IgZGVjcmVtZW50 CithbmQgYnJhbmNoLiAgVGhpcyBjb3VudCByZWdpc3RlciBjYW4ndCBiZSB1 c2VkIGFzIGdlbmVyYWwgcmVnaXN0ZXIgc2luY2UKK21vdmluZyB0by9mcm9t IGEgZ2VuZXJhbCByZWdpc3RlciBmcm9tL3RvIGl0IGlzIHZlcnkgZXhwZW5z aXZlLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuCitAZW5kIGRlZnR5 cGV2cgorCitAZGVmdHlwZXZyIHtUYXJnZXQgSG9va30gaW50NjRfdCBUQVJH RVRfRE9MT09QX0NPU1RfRk9SX0dFTkVSSUMKK0lWT1BUcyBpbnRyb2R1Y2Vz IG9uZSBkb2xvb3AgZGVkaWNhdGVkIElWIGNhbmRpZGF0ZSwgdGhpcyBob29r IG9mZmVycworIHRhcmdldCBvd25lciBhIHdheSB0byBhZGp1c3QgY29zdCB3 aGVuIHNlbGVjdGluZyBkb2xvb3AgSVYgY2FuZGlkYXRlIGZvciBhCisgZ2Vu ZXJpYyBJViB1c2UuICBBdCBjYWxjdWF0aW9uLCB0aGlzIHZhbHVlIHdpbGwg YmUgYWRkZWQgb24gbm9ybWFsIGNvc3QKKyBhbHJlYWR5IGNhbGN1bGF0ZWQg YnkgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KK1RoZSBkZWZhdWx0IHZhbHVl IGlzIHplcm8uCitAZW5kIGRlZnR5cGV2cgorCitAZGVmdHlwZXZyIHtUYXJn ZXQgSG9va30gaW50NjRfdCBUQVJHRVRfRE9MT09QX0NPU1RfRk9SX0FERFJF U1MKK0lWT1BUcyBpbnRyb2R1Y2VzIG9uZSBkb2xvb3AgZGVkaWNhdGVkIElW IGNhbmRpZGF0ZSwgdGhpcyBob29rIG9mZmVycworIHRhcmdldCBvd25lciBh IHdheSB0byBhZGp1c3QgY29zdCB3aGVuIHNlbGVjdGluZyBkb2xvb3AgSVYg Y2FuZGlkYXRlIGZvciBhbgorIGFkZHJlc3MgSVYgdXNlLiAgQXQgY2FsY3Vh dGlvbiwgdGhpcyB2YWx1ZSB3aWxsIGJlIGFkZGVkIG9uIG5vcm1hbCBjb3N0 CisgYWxyZWFkeSBjYWxjdWxhdGVkIGJ5IGN1cnJlbnQgaW1wbGVtZW50YXRp b24uCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLgorQGVuZCBkZWZ0eXBl dnIKKwogQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wgVEFSR0VUX0NB Tl9VU0VfRE9MT09QX1AgKGNvbnN0IHdpZGVzdF9pbnQgQHZhcnsmaXRlcmF0 aW9uc30sIGNvbnN0IHdpZGVzdF9pbnQgQHZhcnsmaXRlcmF0aW9uc19tYXh9 LCB1bnNpZ25lZCBpbnQgQHZhcntsb29wX2RlcHRofSwgYm9vbCBAdmFye2Vu dGVyZWRfYXRfdG9wfSkKIFJldHVybiB0cnVlIGlmIGl0IGlzIHBvc3NpYmxl IHRvIHVzZSBsb3ctb3ZlcmhlYWQgbG9vcHMgKEBjb2Rle2RvbG9vcF9lbmR9 CiBhbmQgQGNvZGV7ZG9sb29wX2JlZ2lufSkgZm9yIGEgcGFydGljdWxhciBs b29wLiAgQHZhcntpdGVyYXRpb25zfSBnaXZlcyB0aGUKZGlmZiAtLWdpdCBh L2djYy9kb2MvdG0udGV4aS5pbiBiL2djYy9kb2MvdG0udGV4aS5pbgppbmRl eCBiNGQ1N2I4Li40MzQ2NzczIDEwMDY0NAotLS0gYS9nY2MvZG9jL3RtLnRl eGkuaW4KKysrIGIvZ2NjL2RvYy90bS50ZXhpLmluCkBAIC03OTQ2LDYgKzc5 NDYsMTIgQEAgdG8gYnkgQHZhcntjZV9pbmZvfS4KIAogQGhvb2sgVEFSR0VU X1BSRURJQ1RfRE9MT09QX1AKIAorQGhvb2sgVEFSR0VUX0hBVkVfQ09VTlRf UkVHX0RFQ1JfUAorCitAaG9vayBUQVJHRVRfRE9MT09QX0NPU1RfRk9SX0dF TkVSSUMKKworQGhvb2sgVEFSR0VUX0RPTE9PUF9DT1NUX0ZPUl9BRERSRVNT CisKIEBob29rIFRBUkdFVF9DQU5fVVNFX0RPTE9PUF9QCiAKIEBob29rIFRB UkdFVF9JTlZBTElEX1dJVEhJTl9ET0xPT1AKZGlmZiAtLWdpdCBhL2djYy90 YXJnZXQuZGVmIGIvZ2NjL3RhcmdldC5kZWYKaW5kZXggNzFiNjk3Mi4uNjll Mjg0NCAxMDA2NDQKLS0tIGEvZ2NjL3RhcmdldC5kZWYKKysrIGIvZ2NjL3Rh cmdldC5kZWYKQEAgLTQyNDYsNiArNDI0NiwzMiBAQCBUaGUgZGVmYXVsdCB2 ZXJzaW9uIG9mIHRoaXMgaG9vayByZXR1cm5zIGZhbHNlLiIsCiAgYm9vbCwg KHN0cnVjdCBsb29wICpsb29wKSwKICBkZWZhdWx0X3ByZWRpY3RfZG9sb29w X3ApCiAKK0RFRkhPT0tQT0QKKyhoYXZlX2NvdW50X3JlZ19kZWNyX3AsCisg IlJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUg Y291bnQgcmVnaXN0ZXIgZm9yIGRlY3JlbWVudFxuXAorYW5kIGJyYW5jaC4g IFRoaXMgY291bnQgcmVnaXN0ZXIgY2FuJ3QgYmUgdXNlZCBhcyBnZW5lcmFs IHJlZ2lzdGVyIHNpbmNlXG5cCittb3ZpbmcgdG8vZnJvbSBhIGdlbmVyYWwg cmVnaXN0ZXIgZnJvbS90byBpdCBpcyB2ZXJ5IGV4cGVuc2l2ZS5cblwKK1Ro ZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiIsCisgYm9vbCwgZmFsc2UpCisK K0RFRkhPT0tQT0QKKyhkb2xvb3BfY29zdF9mb3JfZ2VuZXJpYywKKyAiSVZP UFRzIGludHJvZHVjZXMgb25lIGRvbG9vcCBkZWRpY2F0ZWQgSVYgY2FuZGlk YXRlLCB0aGlzIGhvb2sgb2ZmZXJzXG5cCisgdGFyZ2V0IG93bmVyIGEgd2F5 IHRvIGFkanVzdCBjb3N0IHdoZW4gc2VsZWN0aW5nIGRvbG9vcCBJViBjYW5k aWRhdGUgZm9yIGFcblwKKyBnZW5lcmljIElWIHVzZS4gIEF0IGNhbGN1YXRp b24sIHRoaXMgdmFsdWUgd2lsbCBiZSBhZGRlZCBvbiBub3JtYWwgY29zdFxu XAorIGFscmVhZHkgY2FsY3VsYXRlZCBieSBjdXJyZW50IGltcGxlbWVudGF0 aW9uLlxuXAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgemVyby4iLAorIGludDY0 X3QsIDApCisKK0RFRkhPT0tQT0QKKyhkb2xvb3BfY29zdF9mb3JfYWRkcmVz cywKKyAiSVZPUFRzIGludHJvZHVjZXMgb25lIGRvbG9vcCBkZWRpY2F0ZWQg SVYgY2FuZGlkYXRlLCB0aGlzIGhvb2sgb2ZmZXJzXG5cCisgdGFyZ2V0IG93 bmVyIGEgd2F5IHRvIGFkanVzdCBjb3N0IHdoZW4gc2VsZWN0aW5nIGRvbG9v cCBJViBjYW5kaWRhdGUgZm9yIGFuXG5cCisgYWRkcmVzcyBJViB1c2UuICBB dCBjYWxjdWF0aW9uLCB0aGlzIHZhbHVlIHdpbGwgYmUgYWRkZWQgb24gbm9y bWFsIGNvc3RcblwKKyBhbHJlYWR5IGNhbGN1bGF0ZWQgYnkgY3VycmVudCBp bXBsZW1lbnRhdGlvbi5cblwKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHplcm8u IiwKKyBpbnQ2NF90LCAwKQorCiBERUZIT09LCiAoY2FuX3VzZV9kb2xvb3Bf cCwKICAiUmV0dXJuIHRydWUgaWYgaXQgaXMgcG9zc2libGUgdG8gdXNlIGxv dy1vdmVyaGVhZCBsb29wcyAoQGNvZGV7ZG9sb29wX2VuZH1cblwKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2l2b3B0cy0z LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9pdm9wdHMtMy5j CmluZGV4IDIxNGU2YTcuLmNlNGIxZDAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2l2b3B0cy0zLmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXZvcHRzLTMuYwpAQCAtMTAsNCAr MTAsNiBAQCBpbnQgbWFpbiAodm9pZCkKICAgICBmMiAoKTsKIH0KIAotLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIhPSAwIiA1ICJp dm9wdHMiIH0gfSAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiIT0gMCIgNSAiaXZvcHRzIiB7IHRhcmdldCB7ICEgcG93ZXJw YyotKi0qIH0gfSB9IH0gKi8KKy8qIE1vcmUgZGVidWcgaW5mb3JtYXRpb24g ZW1pdHRlZCBmb3IgZG9sb29wIG9uIHBvd2VycGMuICAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIhPSAwIiA2ICJpdm9wdHMi IHsgdGFyZ2V0IHsgcG93ZXJwYyotKi0qIH0gfSB9IH0gKi8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL2l2b3B0cy1sdC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXZvcHRzLWx0LmMK aW5kZXggN2Q1ODU5Yi4uNzFkN2Y2NyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXZvcHRzLWx0LmMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvaXZvcHRzLWx0LmMKQEAgLTE3LDYg KzE3LDcgQEAgZjEgKGNoYXIgKnAsIHVpbnRwdHJfdCBpLCB1aW50cHRyX3Qg bikKICAgd2hpbGUgKGkgPCBuKTsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJQSEkiIDEgIml2b3B0cyIgfSB9ICovCi0v KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlBISSA8cF8i IDEgIml2b3B0cyJ9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAicF9cWzAtOVxdKiA8IiAxICJpdm9wdHMiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJQSEkiIDEg Iml2b3B0cyIgeyB0YXJnZXQgeyAhIHBvd2VycGMqLSotKiB9IH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlBISSIg MiAiaXZvcHRzIiB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9IH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlBISSA8 cF8iIDEgIml2b3B0cyIgeyB0YXJnZXQgeyAhIHBvd2VycGMqLSotKiB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg InBfXFswLTlcXSogPCIgMSAiaXZvcHRzIiB7IHRhcmdldCB7ICEgcG93ZXJw YyotKi0qIH0gfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3ByMzIwNDQuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3RyZWUtc3NhL3ByMzIwNDQuYwppbmRleCA4YTg5NzdhLi4wNmMyN2Iw IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9w cjMyMDQ0LmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev cHIzMjA0NC5jCkBAIC0xLDYgKzEsMTAgQEAKIC8qIHsgZGctZG8gY29tcGls ZSB9ICovCiAvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1vcHRp bWl6ZWQiIH0gKi8KIAorLyogRm9yIHBvd2VycGMsIGRpc2FibGUgZG9sb29w IElWIGNhbmQgZ2VuZXJhdGlvbiBpbiBJVk9QVHMgdG8gYXZvaWQgdW5leHBl Y3RlZAorICAgZGl2aXNpb24gb3BlcmF0aW9uIGZvciBpdHMgYmFzZSBzZXR1 cC4gICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZuby1icmFu Y2gtY291bnQtcmVnIiB7IHRhcmdldCB7IHBvd2VycGMqLSotKiB9IH0gfSAq LworCiBpbnQgZm9vIChpbnQgbikKIHsKICAgd2hpbGUgKG4gPj0gNDUpCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1pdm9wdHMuYyBiL2djYy90 cmVlLXNzYS1sb29wLWl2b3B0cy5jCmluZGV4IDUzMGVhNGEuLjg4ZTc4OTAg MTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29wLWl2b3B0cy5jCisrKyBi L2djYy90cmVlLXNzYS1sb29wLWl2b3B0cy5jCkBAIC02NCw3ICs2NCwzMCBA QCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQogICAgQWxsIG9mIHRoaXMgaXMgZG9uZSBsb29wIGJ5IGxvb3Au ICBEb2luZyBpdCBnbG9iYWxseSBpcyB0aGVvcmV0aWNhbGx5CiAgICBwb3Nz aWJsZSwgaXQgbWlnaHQgZ2l2ZSBhIGJldHRlciBwZXJmb3JtYW5jZSBhbmQg aXQgbWlnaHQgZW5hYmxlIHVzCiAgICB0byBkZWNpZGUgY29zdHMgbW9yZSBw cmVjaXNlbHksIGJ1dCBnZXR0aW5nIGFsbCB0aGUgaW50ZXJhY3Rpb25zIHJp Z2h0Ci0gICB3b3VsZCBiZSBjb21wbGljYXRlZC4gICovCisgICB3b3VsZCBi ZSBjb21wbGljYXRlZC4KKworICAgRm9yIHRoZSB0YXJnZXRzIHN1cHBvcnRp bmcgbG93LW92ZXJoZWFkIGxvb3BzLCBJVk9QVHMgaGFzIHRvIHRha2UgY2Fy ZSBvZgorICAgdGhlIGxvb3BzIHdoaWNoIHdpbGwgcHJvYmFibHkgYmUgdHJh bnNmb3JtZWQgaW4gUlRMIGRvbG9vcCBvcHRpbWl6YXRpb24sCisgICB0byB0 cnkgdG8gbWFrZSBzZWxlY3RlZCBJViBjYW5kaWRhdGUgc2V0IG9wdGltYWwu ICBUaGUgcHJvY2VzcyBvZiBkb2xvb3AKKyAgIHN1cHBvcnQgaW5jbHVkZXM6 CisKKyAgIDEpIEFuYWx5emUgdGhlIGN1cnJlbnQgbG9vcCB3aWxsIGJlIHRy YW5zZm9ybWVkIHRvIGRvbG9vcCBvciBub3QsIGZpbmQgYW5kCisgICAgICBt YXJrIGl0cyBjb21wYXJlIHR5cGUgSVYgdXNlIGFzIGRvbG9vcCB1c2UgKGl2 X2dyb3VwIGZpZWxkIGRvbG9vcF9wKSwgYW5kCisgICAgICBzZXQgZmxhZyBk b2xvb3BfdXNlX3Agb2YgaXZvcHRzX2RhdGEgdG8gbm90aWZ5IHN1YnNlcXVl bnQgcHJvY2Vzc2luZ3Mgb24KKyAgICAgIGRvbG9vcC4gIFNlZSBhbmFseXpl X2FuZF9tYXJrX2RvbG9vcF91c2UgYW5kIGl0cyBjYWxsZWVzIGZvciB0aGUg ZGV0YWlscy4KKyAgICAgIFRoZSB0YXJnZXQgaG9vayBwcmVkaWN0X2RvbG9v cF9wIGNhbiBiZSB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgY2hlY2tzLgor CisgICAyKSBBZGQgb25lIGRvbG9vcCBkZWRpY2F0ZWQgSVYgY2FuZCB7KG1h eV9iZV96ZXJvID8gMSA6IChuaXRlciArIDEpKSwgKywgLTF9LAorICAgICAg c2V0IGZsYWcgZG9sb29wX3Agb2YgaXZfY2FuZCwgc3RlcCBjb3N0IGlzIHNl dCBhcyB6ZXJvIGFuZCBubyBleHRyYSBjb3N0CisgICAgICBsaWtlIGJpdi4g IEZvciBjb3N0IGRldGVybWluYXRpb24gYmV0d2VlbiBkb2xvb3AgSVYgY2Fu ZCBhbmQgSVYgdXNlLCB0aGUKKyAgICAgIHRhcmdldCBob29rcyBkb2xvb3Bf Y29zdF9mb3JfZ2VuZXJpYyBhbmQgZG9sb29wX2Nvc3RfZm9yX2FkZHJlc3Mg YXJlCisgICAgICBwcm92aWRlZCB0byBhZGQgb24gZXh0cmEgY29zdHMgZm9y IGdlbmVyaWMgdHlwZSBhbmQgYWRkcmVzcyB0eXBlIElWIHVzZS4KKyAgICAg IFplcm8gY29zdCBpcyBhc3NpZ25lZCB0byB0aGUgcGFpciBiZXR3ZWVuIGRv bG9vcCBJViBjYW5kIGFuZCBkb2xvb3AgSVYKKyAgICAgIHVzZSwgYW5kIGJv dW5kIHplcm8gaXMgc2V0IGZvciBJViBlbGltaW5hdGlvbi4KKworICAgMykg V2l0aCB0aGUgY29zdCBzZXR0aW5nIGluIHN0ZXAgMiksIHRoZSBjdXJyZW50 IGNvc3QgbW9kZWwgYmFzZWQgSVYKKyAgICAgIHNlbGVjdGlvbiBhbGdvcml0 aG0gd2lsbCBwcm9jZXNzIGFzIHVzdWFsLCBwaWNrIHVwIGRvbG9vcCBkZWRp Y2F0ZWQgSVYgaWYKKyAgICAgIHByb2ZpdGFibGUuICAqLwogCiAjaW5jbHVk ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC0yNzUsNiAr Mjk4LDkgQEAgY29tcF9jb3N0OjpvcGVyYXRvcis9IChjb21wX2Nvc3QgY29z dCkKIGNvbXBfY29zdAogY29tcF9jb3N0OjpvcGVyYXRvcis9IChIT1NUX1dJ REVfSU5UIGMpCiB7CisgIGlmIChjID49IElORlRZKQorICAgIHRoaXMtPmNv c3QgPSBJTkZUWTsKKwogICBpZiAoaW5maW5pdGVfY29zdF9wICgpKQogICAg IHJldHVybiAqdGhpczsKIApAQCAtMzk5LDYgKzQyNSw4IEBAIHN0cnVjdCBp dl9ncm91cAogICBzdHJ1Y3QgY29zdF9wYWlyICpjb3N0X21hcDsKICAgLyog VGhlIHNlbGVjdGVkIGNhbmRpZGF0ZSBmb3IgdGhlIGdyb3VwLiAgKi8KICAg c3RydWN0IGl2X2NhbmQgKnNlbGVjdGVkOworICAvKiBUbyBpbmRpY2F0ZSB0 aGlzIGlzIGEgZG9sb29wIHVzZSBncm91cC4gICovCisgIGJvb2wgZG9sb29w X3A7CiAgIC8qIFVzZXMgaW4gdGhlIGdyb3VwLiAgKi8KICAgdmVjPHN0cnVj dCBpdl91c2UgKj4gdnVzZXM7CiB9OwpAQCAtNDM5LDYgKzQ2Nyw3IEBAIHN0 cnVjdCBpdl9jYW5kCiAJCQkgICBiZSBob2lzdGVkIG91dCBvZiBsb29wLiAg Ki8KICAgc3RydWN0IGl2ICpvcmlnX2l2OwkvKiBUaGUgb3JpZ2luYWwgaXYg aWYgdGhpcyBjYW5kIGlzIGFkZGVkIGZyb20gYml2IHdpdGgKIAkJCSAgIHNt YWxsZXIgdHlwZS4gICovCisgIGJvb2wgZG9sb29wX3A7CS8qIFdoZXRoZXIg dGhpcyBpcyBhIGRvbG9vcCBjYW5kaWRhdGUuICAqLwogfTsKIAogLyogSGFz aHRhYmxlIGVudHJ5IGZvciBjb21tb24gY2FuZGlkYXRlIGRlcml2ZWQgZnJv bSBpdiB1c2VzLiAgKi8KQEAgLTYxMiw2ICs2NDEsOSBAQCBzdHJ1Y3QgaXZv cHRzX2RhdGEKIAogICAvKiBXaGV0aGVyIHRoZSBsb29wIGJvZHkgY2FuIG9u bHkgYmUgZXhpdGVkIHZpYSBzaW5nbGUgZXhpdC4gICovCiAgIGJvb2wgbG9v cF9zaW5nbGVfZXhpdF9wOworCisgIC8qIFdoZXRoZXIgdGhlIGxvb3AgaGFz IGRvbG9vcCBjb21wYXJpc29uIHVzZS4gICovCisgIGJvb2wgZG9sb29wX3Vz ZV9wOwogfTsKIAogLyogQW4gYXNzaWdubWVudCBvZiBpdiBjYW5kaWRhdGVz IHRvIHVzZXMuICAqLwpAQCAtMTUyOCw2ICsxNTYwLDcgQEAgcmVjb3JkX2dy b3VwIChzdHJ1Y3QgaXZvcHRzX2RhdGEgKmRhdGEsIGVudW0gdXNlX3R5cGUg dHlwZSkKICAgZ3JvdXAtPnR5cGUgPSB0eXBlOwogICBncm91cC0+cmVsYXRl ZF9jYW5kcyA9IEJJVE1BUF9BTExPQyAoTlVMTCk7CiAgIGdyb3VwLT52dXNl cy5jcmVhdGUgKDEpOworICBncm91cC0+ZG9sb29wX3AgPSBmYWxzZTsKIAog ICBkYXRhLT52Z3JvdXBzLnNhZmVfcHVzaCAoZ3JvdXApOwogICByZXR1cm4g Z3JvdXA7CkBAIC0zMDE3LDEwICszMDUwLDEwIEBAIGdldF9sb29wX2ludmFy aWFudF9leHByIChzdHJ1Y3QgaXZvcHRzX2RhdGEgKmRhdGEsIHRyZWUgaW52 X2V4cHIpCiAgICByZXBsYWNlbWVudCBvZiB0aGUgZmluYWwgdmFsdWUgb2Yg dGhlIGl2IGJ5IGEgZGlyZWN0IGNvbXB1dGF0aW9uLiAgKi8KIAogc3RhdGlj IHN0cnVjdCBpdl9jYW5kICoKLWFkZF9jYW5kaWRhdGVfMSAoc3RydWN0IGl2 b3B0c19kYXRhICpkYXRhLAotCQkgdHJlZSBiYXNlLCB0cmVlIHN0ZXAsIGJv b2wgaW1wb3J0YW50LCBlbnVtIGl2X3Bvc2l0aW9uIHBvcywKLQkJIHN0cnVj dCBpdl91c2UgKnVzZSwgZ2ltcGxlICppbmNyZW1lbnRlZF9hdCwKLQkJIHN0 cnVjdCBpdiAqb3JpZ19pdiA9IE5VTEwpCithZGRfY2FuZGlkYXRlXzEgKHN0 cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSwgdHJlZSBiYXNlLCB0cmVlIHN0ZXAs IGJvb2wgaW1wb3J0YW50LAorCQkgZW51bSBpdl9wb3NpdGlvbiBwb3MsIHN0 cnVjdCBpdl91c2UgKnVzZSwKKwkJIGdpbXBsZSAqaW5jcmVtZW50ZWRfYXQs IHN0cnVjdCBpdiAqb3JpZ19pdiA9IE5VTEwsCisJCSBib29sIGRvbG9vcCA9 IGZhbHNlKQogewogICB1bnNpZ25lZCBpOwogICBzdHJ1Y3QgaXZfY2FuZCAq Y2FuZCA9IE5VTEw7CkBAIC0zMDc5LDExICszMTEyLDE1IEBAIGFkZF9jYW5k aWRhdGVfMSAoc3RydWN0IGl2b3B0c19kYXRhICpkYXRhLAogICAgICAgY2Fu ZC0+cG9zID0gcG9zOwogICAgICAgaWYgKHBvcyAhPSBJUF9PUklHSU5BTCkK IAl7Ci0JICBjYW5kLT52YXJfYmVmb3JlID0gY3JlYXRlX3RtcF92YXJfcmF3 IChUUkVFX1RZUEUgKGJhc2UpLCAiaXZ0bXAiKTsKKwkgIGlmIChkb2xvb3Ap CisJICAgIGNhbmQtPnZhcl9iZWZvcmUgPSBjcmVhdGVfdG1wX3Zhcl9yYXcg KFRSRUVfVFlQRSAoYmFzZSksICJkb2xvb3AiKTsKKwkgIGVsc2UKKwkgICAg Y2FuZC0+dmFyX2JlZm9yZSA9IGNyZWF0ZV90bXBfdmFyX3JhdyAoVFJFRV9U WVBFIChiYXNlKSwgIml2dG1wIik7CiAJICBjYW5kLT52YXJfYWZ0ZXIgPSBj YW5kLT52YXJfYmVmb3JlOwogCX0KICAgICAgIGNhbmQtPmltcG9ydGFudCA9 IGltcG9ydGFudDsKICAgICAgIGNhbmQtPmluY3JlbWVudGVkX2F0ID0gaW5j cmVtZW50ZWRfYXQ7CisgICAgICBjYW5kLT5kb2xvb3BfcCA9IGRvbG9vcDsK ICAgICAgIGRhdGEtPnZjYW5kcy5zYWZlX3B1c2ggKGNhbmQpOwogCiAgICAg ICBpZiAoIXBvbHlfaW50X3RyZWVfcCAoc3RlcCkpCkBAIC0zMTE2LDYgKzMx NTMsNyBAQCBhZGRfY2FuZGlkYXRlXzEgKHN0cnVjdCBpdm9wdHNfZGF0YSAq ZGF0YSwKICAgICB9CiAKICAgY2FuZC0+aW1wb3J0YW50IHw9IGltcG9ydGFu dDsKKyAgY2FuZC0+ZG9sb29wX3AgfD0gZG9sb29wOwogCiAgIC8qIFJlbGF0 ZSBjYW5kaWRhdGUgdG8gdGhlIGdyb3VwIGZvciB3aGljaCBpdCBpcyBhZGRl ZC4gICovCiAgIGlmICh1c2UpCkBAIC0zMjA5LDE0ICszMjQ3LDE2IEBAIGFk ZF9hdXRvaW5jX2NhbmRpZGF0ZXMgKHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0 YSwgdHJlZSBiYXNlLCB0cmVlIHN0ZXAsCiAgICB0aGUgZW5kIG9mIGxvb3Au ICAqLwogCiBzdGF0aWMgdm9pZAotYWRkX2NhbmRpZGF0ZSAoc3RydWN0IGl2 b3B0c19kYXRhICpkYXRhLAotCSAgICAgICB0cmVlIGJhc2UsIHRyZWUgc3Rl cCwgYm9vbCBpbXBvcnRhbnQsIHN0cnVjdCBpdl91c2UgKnVzZSwKLQkgICAg ICAgc3RydWN0IGl2ICpvcmlnX2l2ID0gTlVMTCkKK2FkZF9jYW5kaWRhdGUg KHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSwgdHJlZSBiYXNlLCB0cmVlIHN0 ZXAsIGJvb2wgaW1wb3J0YW50LAorCSAgICAgICBzdHJ1Y3QgaXZfdXNlICp1 c2UsIHN0cnVjdCBpdiAqb3JpZ19pdiA9IE5VTEwsCisJICAgICAgIGJvb2wg ZG9sb29wID0gZmFsc2UpCiB7CiAgIGlmIChpcF9ub3JtYWxfcG9zIChkYXRh LT5jdXJyZW50X2xvb3ApKQotICAgIGFkZF9jYW5kaWRhdGVfMSAoZGF0YSwg YmFzZSwgc3RlcCwgaW1wb3J0YW50LAotCQkgICAgIElQX05PUk1BTCwgdXNl LCBOVUxMLCBvcmlnX2l2KTsKLSAgaWYgKGlwX2VuZF9wb3MgKGRhdGEtPmN1 cnJlbnRfbG9vcCkKKyAgICBhZGRfY2FuZGlkYXRlXzEgKGRhdGEsIGJhc2Us IHN0ZXAsIGltcG9ydGFudCwgSVBfTk9STUFMLCB1c2UsIE5VTEwsIG9yaWdf aXYsCisJCSAgICAgZG9sb29wKTsKKyAgLyogRXhjbHVkZSBkb2xvb3AgY2Fu ZGlkYXRlIGhlcmUgc2luY2UgaXQgcmVxdWlyZXMgZGVjcmVtZW50IHRoZW4g Y29tcGFyaXNvbgorICAgICBhbmQganVtcCwgdGhlIElQX0VORCBwb3NpdGlv biBkb2Vzbid0IG1hdGNoLiAgKi8KKyAgaWYgKCFkb2xvb3AgJiYgaXBfZW5k X3BvcyAoZGF0YS0+Y3VycmVudF9sb29wKQogICAgICAgJiYgYWxsb3dfaXBf ZW5kX3Bvc19wIChkYXRhLT5jdXJyZW50X2xvb3ApKQogICAgIGFkZF9jYW5k aWRhdGVfMSAoZGF0YSwgYmFzZSwgc3RlcCwgaW1wb3J0YW50LCBJUF9FTkQs IHVzZSwgTlVMTCwgb3JpZ19pdik7CiB9CkBAIC0zNzI0LDcgKzM3NjQsNyBA QCBwcmVwYXJlX2RlY2xfcnRsICh0cmVlICpleHByX3AsIGludCAqd3MsIHZv aWQgKmRhdGEpCiAgICBTb21lIFJUTCBzcGVjaWZpYyBjaGVja3Mgc2VlbXMg dW5hYmxlIHRvIGJlIGNoZWNrZWQgaW4gZ2ltcGxlLCBpZiBhbnkgbmV3CiAg ICBjaGVja3Mgb3IgZWFzeSBjaGVja3MgX2FyZV8gbWlzc2luZyBoZXJlLCBw bGVhc2UgYWRkIHRoZW0uICAqLwogCi1zdGF0aWMgYm9vbCBBVFRSSUJVVEVf VU5VU0VECitzdGF0aWMgYm9vbAogZ2VuZXJpY19wcmVkaWN0X2RvbG9vcF9w IChzdHJ1Y3QgaXZvcHRzX2RhdGEgKmRhdGEpCiB7CiAgIHN0cnVjdCBsb29w ICpsb29wID0gZGF0YS0+Y3VycmVudF9sb29wOwpAQCAtNDE3Nyw2ICs0MjE3 LDM2IEBAIGZvcmNlX2V4cHJfdG9fdmFyX2Nvc3QgKHRyZWUgZXhwciwgYm9v bCBzcGVlZCkKICAgICAgIFNUUklQX05PUFMgKG9wMCk7CiAgICAgICBvcDEg PSBOVUxMX1RSRUU7CiAgICAgICBicmVhazsKKyAgICAvKiBTZWUgYWRkX2l2 X2NhbmRpZGF0ZV9mb3JfZG9sb29wLCBmb3IgZG9sb29wIG1heV9iZV96ZXJv IGNhc2UsIHdlCisgICAgICAgaW50cm9kdWNlIENPTkRfRVhQUiBmb3IgSVYg YmFzZSwgbmVlZCB0byBzdXBwb3J0IGJldHRlciBjb3N0IGVzdGltYXRpb24K KyAgICAgICBmb3IgdGhpcyBDT05EX0VYUFIgYW5kIHRjY19jb21wYXJpc29u LiAgKi8KKyAgICBjYXNlIENPTkRfRVhQUjoKKyAgICAgIG9wMCA9IFRSRUVf T1BFUkFORCAoZXhwciwgMSk7CisgICAgICBTVFJJUF9OT1BTIChvcDApOwor ICAgICAgb3AxID0gVFJFRV9PUEVSQU5EIChleHByLCAyKTsKKyAgICAgIFNU UklQX05PUFMgKG9wMSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIExUX0VY UFI6CisgICAgY2FzZSBMRV9FWFBSOgorICAgIGNhc2UgR1RfRVhQUjoKKyAg ICBjYXNlIEdFX0VYUFI6CisgICAgY2FzZSBFUV9FWFBSOgorICAgIGNhc2Ug TkVfRVhQUjoKKyAgICBjYXNlIFVOT1JERVJFRF9FWFBSOgorICAgIGNhc2Ug T1JERVJFRF9FWFBSOgorICAgIGNhc2UgVU5MVF9FWFBSOgorICAgIGNhc2Ug VU5MRV9FWFBSOgorICAgIGNhc2UgVU5HVF9FWFBSOgorICAgIGNhc2UgVU5H RV9FWFBSOgorICAgIGNhc2UgVU5FUV9FWFBSOgorICAgIGNhc2UgTFRHVF9F WFBSOgorICAgIGNhc2UgTUFYX0VYUFI6CisgICAgY2FzZSBNSU5fRVhQUjoK KyAgICAgIG9wMCA9IFRSRUVfT1BFUkFORCAoZXhwciwgMCk7CisgICAgICBT VFJJUF9OT1BTIChvcDApOworICAgICAgb3AxID0gVFJFRV9PUEVSQU5EIChl eHByLCAxKTsKKyAgICAgIFNUUklQX05PUFMgKG9wMSk7CisgICAgICBicmVh azsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAvKiBKdXN0IGFuIGFyYml0cmFy eSB2YWx1ZSwgRklYTUUuICAqLwpAQCAtNDI1OCw2ICs0MzI4LDM1IEBAIGZv cmNlX2V4cHJfdG9fdmFyX2Nvc3QgKHRyZWUgZXhwciwgYm9vbCBzcGVlZCkK ICAgICBjYXNlIFJTSElGVF9FWFBSOgogICAgICAgY29zdCA9IGNvbXBfY29z dCAoYWRkX2Nvc3QgKHNwZWVkLCBtb2RlKSwgMCk7CiAgICAgICBicmVhazsK KyAgICBjYXNlIENPTkRfRVhQUjoKKyAgICAgIG9wMCA9IFRSRUVfT1BFUkFO RCAoZXhwciwgMCk7CisgICAgICBTVFJJUF9OT1BTIChvcDApOworICAgICAg aWYgKG9wMCA9PSBOVUxMX1RSRUUgfHwgVFJFRV9DT0RFIChvcDApID09IFNT QV9OQU1FCisJICB8fCBDT05TVEFOVF9DTEFTU19QIChvcDApKQorCWNvc3Qg PSBub19jb3N0OworICAgICAgZWxzZQorCWNvc3QgPSBmb3JjZV9leHByX3Rv X3Zhcl9jb3N0IChvcDAsIHNwZWVkKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgTFRfRVhQUjoKKyAgICBjYXNlIExFX0VYUFI6CisgICAgY2FzZSBHVF9F WFBSOgorICAgIGNhc2UgR0VfRVhQUjoKKyAgICBjYXNlIEVRX0VYUFI6Cisg ICAgY2FzZSBORV9FWFBSOgorICAgIGNhc2UgVU5PUkRFUkVEX0VYUFI6Cisg ICAgY2FzZSBPUkRFUkVEX0VYUFI6CisgICAgY2FzZSBVTkxUX0VYUFI6Cisg ICAgY2FzZSBVTkxFX0VYUFI6CisgICAgY2FzZSBVTkdUX0VYUFI6CisgICAg Y2FzZSBVTkdFX0VYUFI6CisgICAgY2FzZSBVTkVRX0VYUFI6CisgICAgY2Fz ZSBMVEdUX0VYUFI6CisgICAgY2FzZSBNQVhfRVhQUjoKKyAgICBjYXNlIE1J Tl9FWFBSOgorICAgICAgLyogU2ltcGx5IHVzZSAxLjUgKiBhZGQgY29zdCBm b3Igbm93LCBGSVhNRSBpZiB0aGVyZSBpcyBzb21lIG1vcmUgYWNjdXJhdGUK KwkgY29zdCBldmFsdWF0aW9uIHdheS4gICovCisgICAgICBjb3N0ID0gY29t cF9jb3N0ICgxLjUgKiBhZGRfY29zdCAoc3BlZWQsIG1vZGUpLCAwKTsKKyAg ICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKICAgICAgIGdjY191bnJlYWNo YWJsZSAoKTsKQEAgLTQ2MzQsNyArNDczMywxMCBAQCBnZXRfY29tcHV0YXRp b25fY29zdCAoc3RydWN0IGl2b3B0c19kYXRhICpkYXRhLCBzdHJ1Y3QgaXZf dXNlICp1c2UsCiAgICAgewogICAgICAgY29zdCA9IGdldF9hZGRyZXNzX2Nv c3QgKGRhdGEsIHVzZSwgY2FuZCwgJmFmZl9pbnYsICZhZmZfdmFyLCByYXRp bywKIAkJCSAgICAgICBpbnZfdmFycywgaW52X2V4cHIsIGNhbl9hdXRvaW5j LCBzcGVlZCk7Ci0gICAgICByZXR1cm4gZ2V0X3NjYWxlZF9jb21wdXRhdGlv bl9jb3N0X2F0IChkYXRhLCBhdCwgY29zdCk7CisgICAgICBjb3N0ID0gZ2V0 X3NjYWxlZF9jb21wdXRhdGlvbl9jb3N0X2F0IChkYXRhLCBhdCwgY29zdCk7 CisgICAgICAvKiBGb3IgZG9sb29wIElWIGNhbmQsIGFkZCBvbiB0aGUgZXh0 cmEgY29zdC4gICovCisgICAgICBjb3N0ICs9IGNhbmQtPmRvbG9vcF9wID8g dGFyZ2V0bS5kb2xvb3BfY29zdF9mb3JfYWRkcmVzcyA6IDA7CisgICAgICBy ZXR1cm4gY29zdDsKICAgICB9CiAKICAgYm9vbCBzaW1wbGVfaW52ID0gKGFm Zl9jb21iaW5hdGlvbl9jb25zdF9wICgmYWZmX2ludikKQEAgLTQ2ODQsNiAr NDc4NiwxMCBAQCBnZXRfY29tcHV0YXRpb25fY29zdCAoc3RydWN0IGl2b3B0 c19kYXRhICpkYXRhLCBzdHJ1Y3QgaXZfdXNlICp1c2UsCiAgIGlmIChjb21w X2ludiAmJiAhaW50ZWdlcl96ZXJvcCAoY29tcF9pbnYpKQogICAgIGNvc3Qg Kz0gYWRkX2Nvc3QgKHNwZWVkLCBUWVBFX01PREUgKHV0eXBlKSk7CiAKKyAg LyogRm9yIGRvbG9vcCBJViBjYW5kLCBhZGQgb24gdGhlIGV4dHJhIGNvc3Qu ICAqLworICBpZiAoY2FuZC0+ZG9sb29wX3AgJiYgdXNlLT50eXBlID09IFVT RV9OT05MSU5FQVJfRVhQUikKKyAgICBjb3N0ICs9IHRhcmdldG0uZG9sb29w X2Nvc3RfZm9yX2dlbmVyaWM7CisKICAgcmV0dXJuIGdldF9zY2FsZWRfY29t cHV0YXRpb25fY29zdF9hdCAoZGF0YSwgYXQsIGNvc3QpOwogfQogCkBAIC01 MTQyLDYgKzUyNDgsMTUgQEAgbWF5X2VsaW1pbmF0ZV9pdiAoc3RydWN0IGl2 b3B0c19kYXRhICpkYXRhLAogCX0KICAgICB9CiAKKyAgLyogRm9yIGRvbG9v cCBJViBjYW5kLCB0aGUgYm91bmQgd291bGQgYmUgemVyby4gIEl0J3Mgc2Fm ZSB3aGV0aGVyCisgICAgIG1heV9iZV96ZXJvIHNldCBvciBub3QuICAqLwor ICBpZiAoY2FuZC0+ZG9sb29wX3ApCisgICAgeworICAgICAgKmJvdW5kID0g YnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChjYW5kLT5pdi0+YmFzZSksIDAp OworICAgICAgKmNvbXAgPSBpdl9lbGltaW5hdGlvbl9jb21wYXJlIChkYXRh LCB1c2UpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgIGNhbmRf dmFsdWVfYXQgKGxvb3AsIGNhbmQsIHVzZS0+c3RtdCwgZGVzYy0+bml0ZXIs ICZibmQpOwogCiAgICpib3VuZCA9IGZvbGRfY29udmVydCAoVFJFRV9UWVBF IChjYW5kLT5pdi0+YmFzZSksCkBAIC01MjY0LDYgKzUzNzksOSBAQCBkZXRl cm1pbmVfZ3JvdXBfaXZfY29zdF9jb25kIChzdHJ1Y3QgaXZvcHRzX2RhdGEg KmRhdGEsCiAgICAgICBpbnZfdmFycyA9IGludl92YXJzX2VsaW07CiAgICAg ICBpbnZfdmFyc19lbGltID0gTlVMTDsKICAgICAgIGludl9leHByID0gaW52 X2V4cHJfZWxpbTsKKyAgICAgIC8qIEZvciBkb2xvb3AgY2FuZGlkYXRlL3Vz ZSBwYWlyLCBhZGp1c3QgdG8gemVybyBjb3N0LiAgKi8KKyAgICAgIGlmIChn cm91cC0+ZG9sb29wX3AgJiYgY2FuZC0+ZG9sb29wX3AgJiYgZWxpbV9jb3N0 LmNvc3QgPiBub19jb3N0LmNvc3QpCisJY29zdCA9IG5vX2Nvc3Q7CiAgICAg fQogICBlbHNlCiAgICAgewpAQCAtNTM5MCw2ICs1NTA4LDQyIEBAIHJlbGF0 ZV9jb21wYXJlX3VzZV93aXRoX2FsbF9jYW5kcyAoc3RydWN0IGl2b3B0c19k YXRhICpkYXRhKQogICAgIH0KIH0KIAorLyogQWRkIG9uZSBkb2xvb3AgZGVk aWNhdGVkIElWIGNhbmRpZGF0ZToKKyAgICAgLSBCYXNlIGlzIChtYXlfYmVf emVybyA/IDEgOiAobml0ZXIgKyAxKSkuCisgICAgIC0gU3RlcCBpcyAtMS4g ICovCisKK3N0YXRpYyB2b2lkCithZGRfaXZfY2FuZGlkYXRlX2Zvcl9kb2xv b3AgKHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSkKK3sKKyAgdHJlZV9uaXRl cl9kZXNjICpuaXRlcl9kZXNjID0gbml0ZXJfZm9yX3NpbmdsZV9kb21fZXhp dCAoZGF0YSk7CisgIGdjY19hc3NlcnQgKG5pdGVyX2Rlc2MgJiYgbml0ZXJf ZGVzYy0+YXNzdW1wdGlvbnMpOworCisgIHRyZWUgbml0ZXIgPSBuaXRlcl9k ZXNjLT5uaXRlcjsKKyAgdHJlZSBudHlwZSA9IFRSRUVfVFlQRSAobml0ZXIp OworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKG50eXBlKSA9PSBJTlRFR0VS X1RZUEUpOworCisgIHRyZWUgbWF5X2JlX3plcm8gPSBuaXRlcl9kZXNjLT5t YXlfYmVfemVybzsKKyAgaWYgKG1heV9iZV96ZXJvICYmIGludGVnZXJfemVy b3AgKG1heV9iZV96ZXJvKSkKKyAgICBtYXlfYmVfemVybyA9IE5VTExfVFJF RTsKKyAgaWYgKG1heV9iZV96ZXJvKQorICAgIHsKKyAgICAgIGlmIChDT01Q QVJJU09OX0NMQVNTX1AgKG1heV9iZV96ZXJvKSkKKwl7CisJICBuaXRlciA9 IGZvbGRfYnVpbGQzIChDT05EX0VYUFIsIG50eXBlLCBtYXlfYmVfemVybywK KwkJCSAgICAgICBidWlsZF9pbnRfY3N0IChudHlwZSwgMCksCisJCQkgICAg ICAgcmV3cml0ZV90b19ub25fdHJhcHBpbmdfb3ZlcmZsb3cgKG5pdGVyKSk7 CisJfQorICAgICAgLyogRG9uJ3QgdHJ5IHRvIG9idGFpbiB0aGUgaXRlcmF0 aW9uIGNvdW50IGV4cHJlc3Npb24gd2hlbiBtYXlfYmVfemVybyBpcworCSBp bnRlZ2VyX25vbnplcm9wIChhY3R1YWxseSBpdGVyYXRpb24gY291bnQgaXMg b25lKSBvciBlbHNlLiAgKi8KKyAgICAgIGVsc2UKKwlyZXR1cm47CisgICAg fQorCisgIHRyZWUgYmFzZSA9IGZvbGRfYnVpbGQyIChQTFVTX0VYUFIsIG50 eXBlLCB1bnNoYXJlX2V4cHIgKG5pdGVyKSwKKwkJCSAgIGJ1aWxkX2ludF9j c3QgKG50eXBlLCAxKSk7CisgIGFkZF9jYW5kaWRhdGUgKGRhdGEsIGJhc2Us IGJ1aWxkX2ludF9jc3QgKG50eXBlLCAtMSksIHRydWUsIE5VTEwsIE5VTEws IHRydWUpOworfQorCiAvKiBGaW5kcyB0aGUgY2FuZGlkYXRlcyBmb3IgdGhl IGluZHVjdGlvbiB2YXJpYWJsZXMuICAqLwogCiBzdGF0aWMgdm9pZApAQCAt NTM5OCw2ICs1NTUyLDEwIEBAIGZpbmRfaXZfY2FuZGlkYXRlcyAoc3RydWN0 IGl2b3B0c19kYXRhICpkYXRhKQogICAvKiBBZGQgY29tbW9ubHkgdXNlZCBp dnMuICAqLwogICBhZGRfc3RhbmRhcmRfaXZfY2FuZGlkYXRlcyAoZGF0YSk7 CiAKKyAgLyogQWRkIGRvbG9vcCBkZWRpY2F0ZSBpdnMuICAqLworICBpZiAo ZGF0YS0+ZG9sb29wX3VzZV9wKQorICAgIGFkZF9pdl9jYW5kaWRhdGVfZm9y X2RvbG9vcCAoZGF0YSk7CisKICAgLyogQWRkIG9sZCBpbmR1Y3Rpb24gdmFy aWFibGVzLiAgKi8KICAgYWRkX2l2X2NhbmRpZGF0ZV9mb3JfYml2cyAoZGF0 YSk7CiAKQEAgLTU1NzgsMTYgKzU3MzYsMjEgQEAgZGV0ZXJtaW5lX2l2X2Nv c3QgKHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSwgc3RydWN0IGl2X2NhbmQg KmNhbmQpCiAgICAgIG9yIGEgY29uc3Qgc2V0LiAgKi8KICAgaWYgKGNvc3Rf YmFzZS5jb3N0ID09IDApCiAgICAgY29zdF9iYXNlLmNvc3QgPSBDT1NUU19O X0lOU05TICgxKTsKLSAgY29zdF9zdGVwID0gYWRkX2Nvc3QgKGRhdGEtPnNw ZWVkLCBUWVBFX01PREUgKFRSRUVfVFlQRSAoYmFzZSkpKTsKLQorICAvKiBE b2xvb3AgZGVjcmVtZW50IHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHplcm8g Y29zdC4gICovCisgIGlmIChjYW5kLT5kb2xvb3BfcCkKKyAgICBjb3N0X3N0 ZXAgPSAwOworICBlbHNlCisgICAgY29zdF9zdGVwID0gYWRkX2Nvc3QgKGRh dGEtPnNwZWVkLCBUWVBFX01PREUgKFRSRUVfVFlQRSAoYmFzZSkpKTsKICAg Y29zdCA9IGNvc3Rfc3RlcCArIGFkanVzdF9zZXR1cF9jb3N0IChkYXRhLCBj b3N0X2Jhc2UuY29zdCk7CiAKICAgLyogUHJlZmVyIHRoZSBvcmlnaW5hbCBp dnMgdW5sZXNzIHdlIG1heSBnYWluIHNvbWV0aGluZyBieSByZXBsYWNpbmcg aXQuCiAgICAgIFRoZSByZWFzb24gaXMgdG8gbWFrZSBkZWJ1Z2dpbmcgc2lt cGxlcjsgc28gdGhpcyBpcyBub3QgcmVsZXZhbnQgZm9yCiAgICAgIGFydGlm aWNpYWwgaXZzIGNyZWF0ZWQgYnkgb3RoZXIgb3B0aW1pemF0aW9uIHBhc3Nl cy4gICovCi0gIGlmIChjYW5kLT5wb3MgIT0gSVBfT1JJR0lOQUwKLSAgICAg IHx8ICFTU0FfTkFNRV9WQVIgKGNhbmQtPnZhcl9iZWZvcmUpCi0gICAgICB8 fCBERUNMX0FSVElGSUNJQUwgKFNTQV9OQU1FX1ZBUiAoY2FuZC0+dmFyX2Jl Zm9yZSkpKQorICBpZiAoKGNhbmQtPnBvcyAhPSBJUF9PUklHSU5BTAorICAg ICAgIHx8ICFTU0FfTkFNRV9WQVIgKGNhbmQtPnZhcl9iZWZvcmUpCisgICAg ICAgfHwgREVDTF9BUlRJRklDSUFMIChTU0FfTkFNRV9WQVIgKGNhbmQtPnZh cl9iZWZvcmUpKSkKKyAgICAgIC8qIFByZWZlciBkb2xvb3AgYXMgd2VsbC4g ICovCisgICAgICAmJiAhY2FuZC0+ZG9sb29wX3ApCiAgICAgY29zdCsrOwog CiAgIC8qIFByZWZlciBub3QgdG8gaW5zZXJ0IHN0YXRlbWVudHMgaW50byBs YXRjaCB1bmxlc3MgdGhlcmUgYXJlIHNvbWUKQEAgLTU4MzIsNyArNTk5NSw4 IEBAIGl2X2NhX3NldF9ub19jcCAoc3RydWN0IGl2b3B0c19kYXRhICpkYXRh LCBzdHJ1Y3QgaXZfY2EgKml2cywKICAgaWYgKGl2cy0+bl9jYW5kX3VzZXNb Y2lkXSA9PSAwKQogICAgIHsKICAgICAgIGJpdG1hcF9jbGVhcl9iaXQgKGl2 cy0+Y2FuZHMsIGNpZCk7Ci0gICAgICBpdnMtPm5fY2FuZHMtLTsKKyAgICAg IGlmICghY3AtPmNhbmQtPmRvbG9vcF9wIHx8ICF0YXJnZXRtLmhhdmVfY291 bnRfcmVnX2RlY3JfcCkKKwlpdnMtPm5fY2FuZHMtLTsKICAgICAgIGl2cy0+ Y2FuZF9jb3N0IC09IGNwLT5jYW5kLT5jb3N0OwogICAgICAgaXZfY2Ffc2V0 X3JlbW92ZV9pbnZzIChpdnMsIGNwLT5jYW5kLT5pbnZfdmFycywgaXZzLT5u X2ludl92YXJfdXNlcyk7CiAgICAgICBpdl9jYV9zZXRfcmVtb3ZlX2ludnMg KGl2cywgY3AtPmNhbmQtPmludl9leHBycywgaXZzLT5uX2ludl9leHByX3Vz ZXMpOwpAQCAtNTg4OSw3ICs2MDUzLDggQEAgaXZfY2Ffc2V0X2NwIChzdHJ1 Y3QgaXZvcHRzX2RhdGEgKmRhdGEsIHN0cnVjdCBpdl9jYSAqaXZzLAogICAg ICAgaWYgKGl2cy0+bl9jYW5kX3VzZXNbY2lkXSA9PSAxKQogCXsKIAkgIGJp dG1hcF9zZXRfYml0IChpdnMtPmNhbmRzLCBjaWQpOwotCSAgaXZzLT5uX2Nh bmRzKys7CisJICBpZiAoIWNwLT5jYW5kLT5kb2xvb3BfcCB8fCAhdGFyZ2V0 bS5oYXZlX2NvdW50X3JlZ19kZWNyX3ApCisJICAgIGl2cy0+bl9jYW5kcysr OwogCSAgaXZzLT5jYW5kX2Nvc3QgKz0gY3AtPmNhbmQtPmNvc3Q7CiAJICBp dl9jYV9zZXRfYWRkX2ludnMgKGl2cywgY3AtPmNhbmQtPmludl92YXJzLCBp dnMtPm5faW52X3Zhcl91c2VzKTsKIAkgIGl2X2NhX3NldF9hZGRfaW52cyAo aXZzLCBjcC0+Y2FuZC0+aW52X2V4cHJzLCBpdnMtPm5faW52X2V4cHJfdXNl cyk7CkBAIC02MTM0LDYgKzYyOTksOCBAQCBpdl9jYV9kdW1wIChzdHJ1Y3Qg aXZvcHRzX2RhdGEgKmRhdGEsIEZJTEUgKmZpbGUsIHN0cnVjdCBpdl9jYSAq aXZzKQogCiAgIGZwcmludGYgKGZpbGUsICIgIGNvc3Q6ICUiIFBSSWQ2NCAi IChjb21wbGV4aXR5ICVkKVxuIiwgY29zdC5jb3N0LAogCSAgIGNvc3QuY29t cGxleGl0eSk7CisgIGZwcmludGYgKGZpbGUsICIgIHJlZ19jb3N0OiAlZFxu IiwKKwkgICBpdm9wdHNfZXN0aW1hdGVfcmVnX3ByZXNzdXJlIChkYXRhLCBp dnMtPm5faW52cywgaXZzLT5uX2NhbmRzKSk7CiAgIGZwcmludGYgKGZpbGUs ICIgIGNhbmRfY29zdDogJSIgUFJJZDY0ICJcbiAgY2FuZF9ncm91cF9jb3N0 OiAiCiAJICAgIiUiIFBSSWQ2NCAiIChjb21wbGV4aXR5ICVkKVxuIiwgaXZz LT5jYW5kX2Nvc3QsCiAJICAgaXZzLT5jYW5kX3VzZV9jb3N0LmNvc3QsIGl2 cy0+Y2FuZF91c2VfY29zdC5jb21wbGV4aXR5KTsKQEAgLTc1NjgsNiArNzcz NSw3NyBAQCBkZXRlcm1pbmVfc2NhbGluZ19mYWN0b3IgKHN0cnVjdCBpdm9w dHNfZGF0YSAqZGF0YSwgYmFzaWNfYmxvY2sgKmJvZHkpCiAgICAgfQogfQog CisvKiBGaW5kIGRvbG9vcCBjb21wYXJpc29uIHVzZSBhbmQgc2V0IGl0cyBk b2xvb3BfcCBvbiBpZiBmb3VuZC4gICovCisKK3N0YXRpYyBib29sCitmaW5k X2RvbG9vcF91c2UgKHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSkKK3sKKyAg c3RydWN0IGxvb3AgKmxvb3AgPSBkYXRhLT5jdXJyZW50X2xvb3A7CisKKyAg Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPnZncm91cHMubGVuZ3Ro ICgpOyBpKyspCisgICAgeworICAgICAgc3RydWN0IGl2X2dyb3VwICpncm91 cCA9IGRhdGEtPnZncm91cHNbaV07CisgICAgICBpZiAoZ3JvdXAtPnR5cGUg PT0gVVNFX0NPTVBBUkUpCisJeworCSAgZ2NjX2Fzc2VydCAoZ3JvdXAtPnZ1 c2VzLmxlbmd0aCAoKSA9PSAxKTsKKwkgIHN0cnVjdCBpdl91c2UgKnVzZSA9 IGdyb3VwLT52dXNlc1swXTsKKwkgIGdpbXBsZSAqc3RtdCA9IHVzZS0+c3Rt dDsKKwkgIGlmIChnaW1wbGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX0NPTkQp CisJICAgIHsKKwkgICAgICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAo c3RtdCk7CisJICAgICAgZWRnZSB0cnVlX2VkZ2UsIGZhbHNlX2VkZ2U7CisJ ICAgICAgZXh0cmFjdF90cnVlX2ZhbHNlX2VkZ2VzX2Zyb21fYmxvY2sgKGJi LCAmdHJ1ZV9lZGdlLCAmZmFsc2VfZWRnZSk7CisJICAgICAgLyogVGhpcyBj b21wYXJpc29uIGlzIHVzZWQgZm9yIGxvb3AgbGF0Y2guICBSZXF1aXJlIGxh dGNoIGlzIGVtcHR5CisJCSBmb3Igbm93LiAgKi8KKwkgICAgICBpZiAoKGxv b3AtPmxhdGNoID09IHRydWVfZWRnZS0+ZGVzdAorCQkgICB8fCBsb29wLT5s YXRjaCA9PSBmYWxzZV9lZGdlLT5kZXN0KQorCQkgICYmIGVtcHR5X2Jsb2Nr X3AgKGxvb3AtPmxhdGNoKSkKKwkJeworCQkgIGdyb3VwLT5kb2xvb3BfcCA9 IHRydWU7CisJCSAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRE Rl9ERVRBSUxTKSkKKwkJICAgIHsKKwkJICAgICAgZnByaW50ZiAoZHVtcF9m aWxlLCAiRG9sb29wIGNtcCBpdiB1c2U6ICIpOworCQkgICAgICBwcmludF9n aW1wbGVfc3RtdCAoZHVtcF9maWxlLCBzdG10LCBUREZfREVUQUlMUyk7CisJ CSAgICB9CisJCSAgcmV0dXJuIHRydWU7CisJCX0KKwkgICAgfQorCX0KKyAg ICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBGb3IgdGhlIHRhcmdl dHMgd2hpY2ggc3VwcG9ydCBkb2xvb3AsIHRvIHByZWRpY3Qgd2hldGhlciBs YXRlciBSVEwgZG9sb29wCisgICB0cmFuc2Zvcm1hdGlvbiB3aWxsIHBlcmZv cm0gb24gdGhpcyBsb29wLCBmdXJ0aGVyIGRldGVjdCB0aGUgZG9sb29wIHVz ZSBhbmQKKyAgIG1hcmsgdGhlIGZsYWcgZG9sb29wX3VzZV9wIGlmIHByZWRp Y3RlZC4gICovCisKK3ZvaWQKK2FuYWx5emVfYW5kX21hcmtfZG9sb29wX3Vz ZSAoc3RydWN0IGl2b3B0c19kYXRhICpkYXRhKQoreworICBkYXRhLT5kb2xv b3BfdXNlX3AgPSBmYWxzZTsKKworICBpZiAoIWZsYWdfYnJhbmNoX29uX2Nv dW50X3JlZykKKyAgICByZXR1cm47CisKKyAgaWYgKCFnZW5lcmljX3ByZWRp Y3RfZG9sb29wX3AgKGRhdGEpKQorICAgIHJldHVybjsKKworICBpZiAoZmlu ZF9kb2xvb3BfdXNlIChkYXRhKSkKKyAgICB7CisgICAgICBkYXRhLT5kb2xv b3BfdXNlX3AgPSB0cnVlOworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVt cF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwl7CisJICBzdHJ1Y3QgbG9vcCAq bG9vcCA9IGRhdGEtPmN1cnJlbnRfbG9vcDsKKwkgIGZwcmludGYgKGR1bXBf ZmlsZSwKKwkJICAgIlByZWRpY3QgbG9vcCAlZCBjYW4gcGVyZm9ybSIKKwkJ ICAgIiBkb2xvb3Agb3B0aW1pemF0aW9uIGxhdGVyLlxuIiwKKwkJICAgbG9v cC0+bnVtKTsKKwkgIGZsb3dfbG9vcF9kdW1wIChsb29wLCBkdW1wX2ZpbGUs IE5VTEwsIDEpOworCX0KKyAgICB9Cit9CisKIC8qIE9wdGltaXplcyB0aGUg TE9PUC4gIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyBjaGFuZ2VkLiAgKi8K IAogc3RhdGljIGJvb2wKQEAgLTc2MjIsNiArNzg2MCw5IEBAIHRyZWVfc3Nh X2l2X29wdGltaXplX2xvb3AgKHN0cnVjdCBpdm9wdHNfZGF0YSAqZGF0YSwg c3RydWN0IGxvb3AgKmxvb3AsCiAgIC8qIERldGVybWluZSBjb3N0IHNjYWxp bmcgZmFjdG9yIGZvciBiYXNpYyBibG9ja3MgaW4gbG9vcC4gICovCiAgIGRl dGVybWluZV9zY2FsaW5nX2ZhY3RvciAoZGF0YSwgYm9keSk7CiAKKyAgLyog QW5hbHl6ZSBkb2xvb3AgcG9zc2liaWxpdHkgYW5kIG1hcmsgdGhlIGRvbG9v cCB1c2UgaWYgcHJlZGljdGVkLiAgKi8KKyAgYW5hbHl6ZV9hbmRfbWFya19k b2xvb3BfdXNlIChkYXRhKTsKKwogICAvKiBGaW5kcyBjYW5kaWRhdGVzIGZv ciB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlcyAoaXRlbSAyKS4gICovCiAgIGZp bmRfaXZfY2FuZGlkYXRlcyAoZGF0YSk7CiAK --------------7C7BC046621AD65B2E0ECA53--