From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 94430 invoked by alias); 25 Jun 2019 12:06: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 94421 invoked by uid 89); 25 Jun 2019 12:06:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-12.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=r90, defeats X-HELO: mail-lj1-f175.google.com Received: from mail-lj1-f175.google.com (HELO mail-lj1-f175.google.com) (209.85.208.175) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Jun 2019 12:06:51 +0000 Received: by mail-lj1-f175.google.com with SMTP id v24so15967577ljg.13 for ; Tue, 25 Jun 2019 05:06:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=cOhjeJRpn9A/7of09Rl+ncSRcLuPP1hz+BayRaZQ390=; b=XMj/Xzz75B/7onjWFeAsy1+BOrH9fPO3ByudbKBUp3+oVMMXrFTtb12DpZOhkZ1nAl CvprLo6natBzOfX4droHaejWrSYRb9+FeiXKDMbK67qbZ/1GmAvqiwb0SoIkpC6Zs0BW WBtygHHHdCzZL6NjuxVqPhsMRiVlovpvhZPRqyTgTE36GEaGd+ivULM9ZGMs2uwcJtBj bd1Xg3EK2u7qWBPR5Yx8TZ3G7RWkWNE6pbGG1K8SMhs3q6+GuW5Fb7b9qHQMqy9D6dUo yfnruBCxf/4Rv3Eu1OHEOMIw+GLysL8gcvRKN8mkSxvVW377hRAx0FLZF2zvdaquFMGG UfJw== MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Tue, 25 Jun 2019 12:06:00 -0000 Message-ID: Subject: Re: [SVE] [fwprop] PR88833 - Redundant moves for WHILELO-based loops To: Prathamesh Kulkarni , gcc Patches , Richard Sandiford Content-Type: multipart/mixed; boundary="00000000000067f10c058c24c3cd" X-IsSubscribed: yes X-SW-Source: 2019-06/txt/msg01547.txt.bz2 --00000000000067f10c058c24c3cd Content-Type: text/plain; charset="UTF-8" Content-length: 4315 On Mon, 24 Jun 2019 at 21:41, Prathamesh Kulkarni wrote: > > On Mon, 24 Jun 2019 at 19:51, Richard Sandiford > wrote: > > > > Prathamesh Kulkarni writes: > > > @@ -1415,6 +1460,19 @@ forward_propagate_into (df_ref use) > > > if (!def_set) > > > return false; > > > > > > + if (reg_prop_only > > > + && !REG_P (SET_SRC (def_set)) > > > + && !REG_P (SET_DEST (def_set))) > > > + return false; > > > > This should be: > > > > if (reg_prop_only > > && (!REG_P (SET_SRC (def_set)) || !REG_P (SET_DEST (def_set)))) > > return false; > > > > so that we return false if either operand isn't a register. > Oops, sorry about that -:( > > > > > + > > > + /* Allow propagations into a loop only for reg-to-reg copies, since > > > + replacing one register by another shouldn't increase the cost. */ > > > + > > > + if (DF_REF_BB (def)->loop_father != DF_REF_BB (use)->loop_father > > > + && !REG_P (SET_SRC (def_set)) > > > + && !REG_P (SET_DEST (def_set))) > > > + return false; > > > > Same here. > > > > OK with that change, thanks. > Thanks for the review, will make the changes and commit the patch > after re-testing. Hi, Testing the patch showed following failures on 32-bit x86: Executed from: g++.target/i386/i386.exp g++:g++.target/i386/pr88152.C scan-assembler-not vpcmpgt|vpcmpeq|vpsra Executed from: gcc.target/i386/i386.exp gcc:gcc.target/i386/pr66768.c scan-assembler add*.[ \t]%gs: gcc:gcc.target/i386/pr90178.c scan-assembler-times xorl[\\t ]*\\%eax,[\\t ]*%eax 1 The failure of pr88152.C is also seen on x86_64. For pr66768.c, and pr90178.c, forwprop replaces register which is volatile and frame related respectively. To avoid that, the attached patch, makes a stronger constraint that src and dest should be a register and not have frame_related or volatil flags set, which is checked in usable_reg_p(). Which avoids the failures for both the cases. Does it look OK ? For g++.target/i386/pr88152.C, the issue is that after the patch, forwprop1 does following propagation (in f10) which wasn't done before: In insn 10, replacing (unspec:SI [ (reg:V2DF 91) ] UNSPEC_MOVMSK) with (unspec:SI [ (subreg:V2DF (reg:V2DI 90) 0) ] UNSPEC_MOVMSK) This later defeats combine because insn 9 gets deleted. Without patch, the following combination takes place: Trying 7 -> 9: 7: r90:V2DI=r89:V2DI>r93:V2DI REG_DEAD r93:V2DI REG_DEAD r89:V2DI 9: r91:V2DF=r90:V2DI#0 REG_DEAD r90:V2DI Successfully matched this instruction: (set (subreg:V2DI (reg:V2DF 91) 0) (gt:V2DI (reg:V2DI 89) (reg:V2DI 93))) allowing combination of insns 7 and 9 and then: Trying 6, 9 -> 10: 6: r89:V2DI=const_vector 9: r91:V2DF#0=r89:V2DI>r93:V2DI REG_DEAD r89:V2DI REG_DEAD r93:V2DI 10: r87:SI=unspec[r91:V2DF] 43 REG_DEAD r91:V2DF Successfully matched this instruction: (set (reg:SI 87) (unspec:SI [ (lt:V2DF (reg:V2DI 93) (const_vector:V2DI [ (const_int 0 [0]) repeated x2 ])) ] UNSPEC_MOVMSK)) allowing combination of insns 6, 9 and 10 original costs 4 + 8 + 4 = 16 replacement cost 12 deferring deletion of insn with uid = 9. deferring deletion of insn with uid = 6. which deletes insns 2, 3, 6, 7, 9. With patch, it fails to combine 7->10: Trying 7 -> 10: 7: r90:V2DI=r89:V2DI>r93:V2DI REG_DEAD r93:V2DI REG_DEAD r89:V2DI 10: r87:SI=unspec[r90:V2DI#0] 43 REG_DEAD r90:V2DI Failed to match this instruction: (set (reg:SI 87) (unspec:SI [ (subreg:V2DF (gt:V2DI (reg:V2DI 89) (reg:V2DI 93)) 0) ] UNSPEC_MOVMSK)) and subsequently 6, 7 -> 10 (attached combine dumps before and after patch). So IIUC, the issue is that the target does not have a pattern that can match the above insn ? I tried a simple workaround to "pessimize" the else condition in propagate_rtx_1 in patch, to require old_rtx and new_rtx have same rtx_code, which at least works for this test-case, but not sure if that's the correct approach. Could you suggest how to proceed ? Thanks, Prathamesh > > Thanks, > Prathamesh > > > > Richard --00000000000067f10c058c24c3cd Content-Type: application/octet-stream; name="before.combine" Content-Disposition: attachment; filename="before.combine" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxbqzzk41 Content-length: 13420 Cjs7IEZ1bmN0aW9uIGYxMCAoX1ozZjEwRHYyX3ksIGZ1bmNkZWZfbm89NTU1 MCwgZGVjbF91aWQ9MzI4NTgsIGNncmFwaF91aWQ9NTU1MSwgc3ltYm9sX29y ZGVyPTU1NTApCgpzY2FubmluZyBuZXcgaW5zbiB3aXRoIHVpZCA9IDE4Lgpy ZXNjYW5uaW5nIGluc24gd2l0aCB1aWQgPSAyLgpzdGFydGluZyB0aGUgcHJv Y2Vzc2luZyBvZiBkZWZlcnJlZCBpbnNucwplbmRpbmcgdGhlIHByb2Nlc3Np bmcgb2YgZGVmZXJyZWQgaW5zbnMKZGZfYW5hbHl6ZSBjYWxsZWQKZGZfd29y a2xpc3RfZGF0YWZsb3dfZG91YmxlcXVldWU6IG5fYmFzaWNfYmxvY2tzIDMg bl9lZGdlcyAyIGNvdW50IDMgKCAgICAxKQoKCmYxMAoKRGF0YWZsb3cgc3Vt bWFyeToKZGVmX2luZm8tPnRhYmxlX3NpemUgPSAyNSwgdXNlX2luZm8tPnRh YmxlX3NpemUgPSAxNgo7OyAgaW52YWxpZGF0ZWQgYnkgY2FsbCAJIDAgW2F4 XSAxIFtkeF0gMiBbY3hdIDQgW3NpXSA1IFtkaV0gOCBbc3RdIDkgW3N0KDEp XSAxMCBbc3QoMildIDExIFtzdCgzKV0gMTIgW3N0KDQpXSAxMyBbc3QoNSld IDE0IFtzdCg2KV0gMTUgW3N0KDcpXSAxNyBbZmxhZ3NdIDE4IFtmcHNyXSAy MCBbeG1tMF0gMjEgW3htbTFdIDIyIFt4bW0yXSAyMyBbeG1tM10gMjQgW3ht bTRdIDI1IFt4bW01XSAyNiBbeG1tNl0gMjcgW3htbTddIDI4IFttbTBdIDI5 IFttbTFdIDMwIFttbTJdIDMxIFttbTNdIDMyIFttbTRdIDMzIFttbTVdIDM0 IFttbTZdIDM1IFttbTddIDM2IFtyOF0gMzcgW3I5XSAzOCBbcjEwXSAzOSBb cjExXSA0NCBbeG1tOF0gNDUgW3htbTldIDQ2IFt4bW0xMF0gNDcgW3htbTEx XSA0OCBbeG1tMTJdIDQ5IFt4bW0xM10gNTAgW3htbTE0XSA1MSBbeG1tMTVd IDUyIFt4bW0xNl0gNTMgW3htbTE3XSA1NCBbeG1tMThdIDU1IFt4bW0xOV0g NTYgW3htbTIwXSA1NyBbeG1tMjFdIDU4IFt4bW0yMl0gNTkgW3htbTIzXSA2 MCBbeG1tMjRdIDYxIFt4bW0yNV0gNjIgW3htbTI2XSA2MyBbeG1tMjddIDY0 IFt4bW0yOF0gNjUgW3htbTI5XSA2NiBbeG1tMzBdIDY3IFt4bW0zMV0gNjgg W2swXSA2OSBbazFdIDcwIFtrMl0gNzEgW2szXSA3MiBbazRdIDczIFtrNV0g NzQgW2s2XSA3NSBbazddCjs7ICBoYXJkd2FyZSByZWdzIHVzZWQgCSA3IFtz cF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0KOzsgIHJlZ3VsYXIgYmxvY2sgYXJ0 aWZpY2lhbCB1c2VzIAkgNiBbYnBdIDcgW3NwXSAxNiBbYXJncF0gMTkgW2Zy YW1lXQo7OyAgZWggYmxvY2sgYXJ0aWZpY2lhbCB1c2VzIAkgNiBbYnBdIDcg W3NwXSAxNiBbYXJncF0gMTkgW2ZyYW1lXQo7OyAgZW50cnkgYmxvY2sgZGVm cyAJIDAgW2F4XSAxIFtkeF0gMiBbY3hdIDQgW3NpXSA1IFtkaV0gNiBbYnBd IDcgW3NwXSAxNiBbYXJncF0gMTkgW2ZyYW1lXSAyMCBbeG1tMF0gMjEgW3ht bTFdIDIyIFt4bW0yXSAyMyBbeG1tM10gMjQgW3htbTRdIDI1IFt4bW01XSAy NiBbeG1tNl0gMjcgW3htbTddIDM2IFtyOF0gMzcgW3I5XQo7OyAgZXhpdCBi bG9jayB1c2VzIAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkgW2ZyYW1lXQo7 OyAgcmVncyBldmVyIGxpdmUgCSAwIFtheF0gMjAgW3htbTBdCjs7ICByZWYg dXNhZ2UgCXIwPXsyZCwydX0gcjE9ezFkfSByMj17MWR9IHI0PXsxZH0gcjU9 ezFkfSByNj17MWQsMnV9IHI3PXsxZCwydX0gcjE2PXsxZCwxdX0gcjE5PXsx ZCwydX0gcjIwPXsxZCwxdX0gcjIxPXsxZH0gcjIyPXsxZH0gcjIzPXsxZH0g cjI0PXsxZH0gcjI1PXsxZH0gcjI2PXsxZH0gcjI3PXsxZH0gcjM2PXsxZH0g cjM3PXsxZH0gcjg2PXsxZCwxdSwxZX0gcjg3PXsxZCwxdX0gcjg5PXsxZCwx dX0gcjkwPXsxZCwxdX0gcjkxPXsxZCwxdX0gcjkzPXsxZCwxdX0gCjs7ICAg IHRvdGFsIHJlZiB1c2FnZSA0M3syNmQsMTZ1LDFlfSBpbiA4ezggcmVndWxh ciArIDAgY2FsbH0gaW5zbnMuCgooICktPlswXS0+KCAyICkKOzsgYmIgMCBh cnRpZmljaWFsX2RlZnM6IHsgZDEoMCl7IH1kMigxKXsgfWQzKDIpeyB9ZDQo NCl7IH1kNSg1KXsgfWQ2KDYpeyB9ZDcoNyl7IH1kOCgxNil7IH1kOSgxOSl7 IH1kMTAoMjApeyB9ZDExKDIxKXsgfWQxMigyMil7IH1kMTMoMjMpeyB9ZDE0 KDI0KXsgfWQxNSgyNSl7IH1kMTYoMjYpeyB9ZDE3KDI3KXsgfWQxOCgzNil7 IH1kMTkoMzcpeyB9fQo7OyBiYiAwIGFydGlmaWNpYWxfdXNlczogeyB9Cjs7 IGxyICBpbiAgCQo7OyBsciAgdXNlIAkKOzsgbHIgIGRlZiAJIDAgW2F4XSAx IFtkeF0gMiBbY3hdIDQgW3NpXSA1IFtkaV0gNiBbYnBdIDcgW3NwXSAxNiBb YXJncF0gMTkgW2ZyYW1lXSAyMCBbeG1tMF0gMjEgW3htbTFdIDIyIFt4bW0y XSAyMyBbeG1tM10gMjQgW3htbTRdIDI1IFt4bW01XSAyNiBbeG1tNl0gMjcg W3htbTddIDM2IFtyOF0gMzcgW3I5XQo7OyBsaXZlICBpbiAgCQo7OyBsaXZl ICBnZW4gCSAwIFtheF0gMSBbZHhdIDIgW2N4XSA0IFtzaV0gNSBbZGldIDYg W2JwXSA3IFtzcF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0gMjAgW3htbTBdIDIx IFt4bW0xXSAyMiBbeG1tMl0gMjMgW3htbTNdIDI0IFt4bW00XSAyNSBbeG1t NV0gMjYgW3htbTZdIDI3IFt4bW03XSAzNiBbcjhdIDM3IFtyOV0KOzsgbGl2 ZSAga2lsbAkKOzsgbHIgIG91dCAJIDYgW2JwXSA3IFtzcF0gMTYgW2FyZ3Bd IDE5IFtmcmFtZV0gMjAgW3htbTBdCjs7IGxpdmUgIG91dCAJIDYgW2JwXSA3 IFtzcF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0gMjAgW3htbTBdCgooIDAgKS0+ WzJdLT4oIDEgKQo7OyBiYiAyIGFydGlmaWNpYWxfZGVmczogeyB9Cjs7IGJi IDIgYXJ0aWZpY2lhbF91c2VzOiB7IHUwKDYpeyB9dTEoNyl7IH11MigxNil7 IH11MygxOSl7IH19Cjs7IGxyICBpbiAgCSA2IFticF0gNyBbc3BdIDE2IFth cmdwXSAxOSBbZnJhbWVdIDIwIFt4bW0wXQo7OyBsciAgdXNlIAkgNiBbYnBd IDcgW3NwXSAxNiBbYXJncF0gMTkgW2ZyYW1lXSAyMCBbeG1tMF0KOzsgbHIg IGRlZiAJIDAgW2F4XSA4NiA4NyA4OSA5MCA5MSA5Mwo7OyBsaXZlICBpbiAg CSA2IFticF0gNyBbc3BdIDE2IFthcmdwXSAxOSBbZnJhbWVdIDIwIFt4bW0w XQo7OyBsaXZlICBnZW4gCSAwIFtheF0gODYgODcgODkgOTAgOTEKOzsgbGl2 ZSAga2lsbAkKOzsgbHIgIG91dCAJIDAgW2F4XSA2IFticF0gNyBbc3BdIDE2 IFthcmdwXSAxOSBbZnJhbWVdCjs7IGxpdmUgIG91dCAJIDAgW2F4XSA2IFti cF0gNyBbc3BdIDE2IFthcmdwXSAxOSBbZnJhbWVdCgooIDIgKS0+WzFdLT4o ICkKOzsgYmIgMSBhcnRpZmljaWFsX2RlZnM6IHsgfQo7OyBiYiAxIGFydGlm aWNpYWxfdXNlczogeyB1MTIoMCl7IH11MTMoNil7IH11MTQoNyl7IH11MTUo MTkpeyB9fQo7OyBsciAgaW4gIAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkg W2ZyYW1lXQo7OyBsciAgdXNlIAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkg W2ZyYW1lXQo7OyBsciAgZGVmIAkKOzsgbGl2ZSAgaW4gIAkgMCBbYXhdIDYg W2JwXSA3IFtzcF0gMTkgW2ZyYW1lXQo7OyBsaXZlICBnZW4gCQo7OyBsaXZl ICBraWxsCQo7OyBsciAgb3V0IAkKOzsgbGl2ZSAgb3V0IAkKCkZpbmRpbmcg bmVlZGVkIGluc3RydWN0aW9uczoKICBBZGRpbmcgaW5zbiAxNiB0byB3b3Jr bGlzdApGaW5pc2hlZCBmaW5kaW5nIG5lZWRlZCBpbnN0cnVjdGlvbnM6CnBy b2Nlc3NpbmcgYmxvY2sgMiBsciBvdXQgPSAgMCBbYXhdIDYgW2JwXSA3IFtz cF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0KICBBZGRpbmcgaW5zbiAxNSB0byB3 b3JrbGlzdAogIEFkZGluZyBpbnNuIDEwIHRvIHdvcmtsaXN0CiAgQWRkaW5n IGluc24gOSB0byB3b3JrbGlzdAogIEFkZGluZyBpbnNuIDcgdG8gd29ya2xp c3QKICBBZGRpbmcgaW5zbiA2IHRvIHdvcmtsaXN0CiAgQWRkaW5nIGluc24g MiB0byB3b3JrbGlzdAogIEFkZGluZyBpbnNuIDE4IHRvIHdvcmtsaXN0CmRm X3dvcmtsaXN0X2RhdGFmbG93X2RvdWJsZXF1ZXVlOiBuX2Jhc2ljX2Jsb2Nr cyAzIG5fZWRnZXMgMiBjb3VudCAzICggICAgMSkKaW5zbl9jb3N0IDQgZm9y ICAgIDE4OiByOTM6VjJEST14bW0wOlYyREkKICAgICAgUkVHX0RFQUQgeG1t MDpWMkRJCmluc25fY29zdCA0IGZvciAgICAgMjogcjg2OlYyREk9cjkzOlYy REkKICAgICAgUkVHX0RFQUQgcjkzOlYyREkKaW5zbl9jb3N0IDQgZm9yICAg ICA2OiByODk6VjJEST1jb25zdF92ZWN0b3IKaW5zbl9jb3N0IDggZm9yICAg ICA3OiByOTA6VjJEST1yODk6VjJEST5yODY6VjJESQogICAgICBSRUdfREVB RCByODk6VjJESQogICAgICBSRUdfREVBRCByODY6VjJESQogICAgICBSRUdf RVFVQUwgY29uc3RfdmVjdG9yPnI4NjpWMkRJCmluc25fY29zdCA0IGZvciAg ICAgOTogcjkxOlYyREY9cjkwOlYyREkjMAogICAgICBSRUdfREVBRCByOTA6 VjJESQppbnNuX2Nvc3QgNCBmb3IgICAgMTA6IHI4NzpTST11bnNwZWNbcjkx OlYyREZdIDQzCiAgICAgIFJFR19ERUFEIHI5MTpWMkRGCmluc25fY29zdCA0 IGZvciAgICAxNTogYXg6U0k9cjg3OlNJCiAgICAgIFJFR19ERUFEIHI4NzpT SQppbnNuX2Nvc3QgMCBmb3IgICAgMTY6IHVzZSBheDpTSQoKVHJ5aW5nIDIg LT4gNzoKICAgIDI6IHI4NjpWMkRJPXI5MzpWMkRJCiAgICAgIFJFR19ERUFE IHI5MzpWMkRJCiAgICA3OiByOTA6VjJEST1yODk6VjJEST5yODY6VjJESQog ICAgICBSRUdfREVBRCByODk6VjJESQogICAgICBSRUdfREVBRCByODY6VjJE SQogICAgICBSRUdfRVFVQUwgY29uc3RfdmVjdG9yPnI4NjpWMkRJClN1Y2Nl c3NmdWxseSBtYXRjaGVkIHRoaXMgaW5zdHJ1Y3Rpb246CihzZXQgKHJlZzpW MkRJIDkwKQogICAgKGd0OlYyREkgKHJlZzpWMkRJIDg5KQogICAgICAgIChy ZWc6VjJESSA5MykpKQphbGxvd2luZyBjb21iaW5hdGlvbiBvZiBpbnNucyAy IGFuZCA3Cm9yaWdpbmFsIGNvc3RzIDQgKyA4ID0gMTIKcmVwbGFjZW1lbnQg Y29zdCA4CmRlZmVycmluZyBkZWxldGlvbiBvZiBpbnNuIHdpdGggdWlkID0g Mi4KbW9kaWZ5aW5nIGluc24gaTMgICAgIDc6IHI5MDpWMkRJPXI4OTpWMkRJ PnI5MzpWMkRJCiAgICAgIFJFR19ERUFEIHI5MzpWMkRJCiAgICAgIFJFR19E RUFEIHI4OTpWMkRJCmRlZmVycmluZyByZXNjYW4gaW5zbiB3aXRoIHVpZCA9 IDcuCgpUcnlpbmcgNiAtPiA3OgogICAgNjogcjg5OlYyREk9Y29uc3RfdmVj dG9yCiAgICA3OiByOTA6VjJEST1yODk6VjJEST5yOTM6VjJESQogICAgICBS RUdfREVBRCByOTM6VjJESQogICAgICBSRUdfREVBRCByODk6VjJESQpGYWls ZWQgdG8gbWF0Y2ggdGhpcyBpbnN0cnVjdGlvbjoKKHNldCAocmVnOlYyREkg OTApCiAgICAobHQ6VjJESSAocmVnOlYyREkgOTMpCiAgICAgICAgKGNvbnN0 X3ZlY3RvcjpWMkRJIFsKICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCBb MF0pIHJlcGVhdGVkIHgyCiAgICAgICAgICAgIF0pKSkKClRyeWluZyA3IC0+ IDk6CiAgICA3OiByOTA6VjJEST1yODk6VjJEST5yOTM6VjJESQogICAgICBS RUdfREVBRCByOTM6VjJESQogICAgICBSRUdfREVBRCByODk6VjJESQogICAg OTogcjkxOlYyREY9cjkwOlYyREkjMAogICAgICBSRUdfREVBRCByOTA6VjJE SQpTdWNjZXNzZnVsbHkgbWF0Y2hlZCB0aGlzIGluc3RydWN0aW9uOgooc2V0 IChzdWJyZWc6VjJESSAocmVnOlYyREYgOTEpIDApCiAgICAoZ3Q6VjJESSAo cmVnOlYyREkgODkpCiAgICAgICAgKHJlZzpWMkRJIDkzKSkpCmFsbG93aW5n IGNvbWJpbmF0aW9uIG9mIGluc25zIDcgYW5kIDkKb3JpZ2luYWwgY29zdHMg OCArIDQgPSAxMgpyZXBsYWNlbWVudCBjb3N0IDgKZGVmZXJyaW5nIGRlbGV0 aW9uIG9mIGluc24gd2l0aCB1aWQgPSA3Lgptb2RpZnlpbmcgaW5zbiBpMyAg ICAgOTogcjkxOlYyREYjMD1yODk6VjJEST5yOTM6VjJESQogICAgICBSRUdf REVBRCByODk6VjJESQogICAgICBSRUdfREVBRCByOTM6VjJESQpkZWZlcnJp bmcgcmVzY2FuIGluc24gd2l0aCB1aWQgPSA5LgoKVHJ5aW5nIDYgLT4gOToK ICAgIDY6IHI4OTpWMkRJPWNvbnN0X3ZlY3RvcgogICAgOTogcjkxOlYyREYj MD1yODk6VjJEST5yOTM6VjJESQogICAgICBSRUdfREVBRCByODk6VjJESQog ICAgICBSRUdfREVBRCByOTM6VjJESQpGYWlsZWQgdG8gbWF0Y2ggdGhpcyBp bnN0cnVjdGlvbjoKKHNldCAoc3VicmVnOlYyREkgKHJlZzpWMkRGIDkxKSAw KQogICAgKGx0OlYyREkgKHJlZzpWMkRJIDkzKQogICAgICAgIChjb25zdF92 ZWN0b3I6VjJESSBbCiAgICAgICAgICAgICAgICAoY29uc3RfaW50IDAgWzBd KSByZXBlYXRlZCB4MgogICAgICAgICAgICBdKSkpCgpUcnlpbmcgOSAtPiAx MDoKICAgIDk6IHI5MTpWMkRGIzA9cjg5OlYyREk+cjkzOlYyREkKICAgICAg UkVHX0RFQUQgcjg5OlYyREkKICAgICAgUkVHX0RFQUQgcjkzOlYyREkKICAg MTA6IHI4NzpTST11bnNwZWNbcjkxOlYyREZdIDQzCiAgICAgIFJFR19ERUFE IHI5MTpWMkRGCkZhaWxlZCB0byBtYXRjaCB0aGlzIGluc3RydWN0aW9uOgoo c2V0IChyZWc6U0kgODcpCiAgICAodW5zcGVjOlNJIFsKICAgICAgICAgICAg KGd0OlYyREYgKHJlZzpWMkRJIDg5KQogICAgICAgICAgICAgICAgKHJlZzpW MkRJIDkzKSkKICAgICAgICBdIFVOU1BFQ19NT1ZNU0spKQoKVHJ5aW5nIDYs IDkgLT4gMTA6CiAgICA2OiByODk6VjJEST1jb25zdF92ZWN0b3IKICAgIDk6 IHI5MTpWMkRGIzA9cjg5OlYyREk+cjkzOlYyREkKICAgICAgUkVHX0RFQUQg cjg5OlYyREkKICAgICAgUkVHX0RFQUQgcjkzOlYyREkKICAgMTA6IHI4NzpT ST11bnNwZWNbcjkxOlYyREZdIDQzCiAgICAgIFJFR19ERUFEIHI5MTpWMkRG ClN1Y2Nlc3NmdWxseSBtYXRjaGVkIHRoaXMgaW5zdHJ1Y3Rpb246CihzZXQg KHJlZzpTSSA4NykKICAgICh1bnNwZWM6U0kgWwogICAgICAgICAgICAobHQ6 VjJERiAocmVnOlYyREkgOTMpCiAgICAgICAgICAgICAgICAoY29uc3RfdmVj dG9yOlYyREkgWwogICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfaW50 IDAgWzBdKSByZXBlYXRlZCB4MgogICAgICAgICAgICAgICAgICAgIF0pKQog ICAgICAgIF0gVU5TUEVDX01PVk1TSykpCmFsbG93aW5nIGNvbWJpbmF0aW9u IG9mIGluc25zIDYsIDkgYW5kIDEwCm9yaWdpbmFsIGNvc3RzIDQgKyA4ICsg NCA9IDE2CnJlcGxhY2VtZW50IGNvc3QgMTIKZGVmZXJyaW5nIGRlbGV0aW9u IG9mIGluc24gd2l0aCB1aWQgPSA5LgpkZWZlcnJpbmcgZGVsZXRpb24gb2Yg aW5zbiB3aXRoIHVpZCA9IDYuCm1vZGlmeWluZyBpbnNuIGkzICAgIDEwOiBy ODc6U0k9dW5zcGVjW3I5MzpWMkRJPGNvbnN0X3ZlY3Rvcl0gNDMKICAgICAg UkVHX0RFQUQgcjkzOlYyREkKZGVmZXJyaW5nIHJlc2NhbiBpbnNuIHdpdGgg dWlkID0gMTAuCnN0YXJ0aW5nIHRoZSBwcm9jZXNzaW5nIG9mIGRlZmVycmVk IGluc25zCnJlc2Nhbm5pbmcgaW5zbiB3aXRoIHVpZCA9IDEwLgplbmRpbmcg dGhlIHByb2Nlc3Npbmcgb2YgZGVmZXJyZWQgaW5zbnMKCgpmMTAKCkRhdGFm bG93IHN1bW1hcnk6Cjs7ICBpbnZhbGlkYXRlZCBieSBjYWxsIAkgMCBbYXhd IDEgW2R4XSAyIFtjeF0gNCBbc2ldIDUgW2RpXSA4IFtzdF0gOSBbc3QoMSld IDEwIFtzdCgyKV0gMTEgW3N0KDMpXSAxMiBbc3QoNCldIDEzIFtzdCg1KV0g MTQgW3N0KDYpXSAxNSBbc3QoNyldIDE3IFtmbGFnc10gMTggW2Zwc3JdIDIw IFt4bW0wXSAyMSBbeG1tMV0gMjIgW3htbTJdIDIzIFt4bW0zXSAyNCBbeG1t NF0gMjUgW3htbTVdIDI2IFt4bW02XSAyNyBbeG1tN10gMjggW21tMF0gMjkg W21tMV0gMzAgW21tMl0gMzEgW21tM10gMzIgW21tNF0gMzMgW21tNV0gMzQg W21tNl0gMzUgW21tN10gMzYgW3I4XSAzNyBbcjldIDM4IFtyMTBdIDM5IFty MTFdIDQ0IFt4bW04XSA0NSBbeG1tOV0gNDYgW3htbTEwXSA0NyBbeG1tMTFd IDQ4IFt4bW0xMl0gNDkgW3htbTEzXSA1MCBbeG1tMTRdIDUxIFt4bW0xNV0g NTIgW3htbTE2XSA1MyBbeG1tMTddIDU0IFt4bW0xOF0gNTUgW3htbTE5XSA1 NiBbeG1tMjBdIDU3IFt4bW0yMV0gNTggW3htbTIyXSA1OSBbeG1tMjNdIDYw IFt4bW0yNF0gNjEgW3htbTI1XSA2MiBbeG1tMjZdIDYzIFt4bW0yN10gNjQg W3htbTI4XSA2NSBbeG1tMjldIDY2IFt4bW0zMF0gNjcgW3htbTMxXSA2OCBb azBdIDY5IFtrMV0gNzAgW2syXSA3MSBbazNdIDcyIFtrNF0gNzMgW2s1XSA3 NCBbazZdIDc1IFtrN10KOzsgIGhhcmR3YXJlIHJlZ3MgdXNlZCAJIDcgW3Nw XSAxNiBbYXJncF0gMTkgW2ZyYW1lXQo7OyAgcmVndWxhciBibG9jayBhcnRp ZmljaWFsIHVzZXMgCSA2IFticF0gNyBbc3BdIDE2IFthcmdwXSAxOSBbZnJh bWVdCjs7ICBlaCBibG9jayBhcnRpZmljaWFsIHVzZXMgCSA2IFticF0gNyBb c3BdIDE2IFthcmdwXSAxOSBbZnJhbWVdCjs7ICBlbnRyeSBibG9jayBkZWZz IAkgMCBbYXhdIDEgW2R4XSAyIFtjeF0gNCBbc2ldIDUgW2RpXSA2IFticF0g NyBbc3BdIDE2IFthcmdwXSAxOSBbZnJhbWVdIDIwIFt4bW0wXSAyMSBbeG1t MV0gMjIgW3htbTJdIDIzIFt4bW0zXSAyNCBbeG1tNF0gMjUgW3htbTVdIDI2 IFt4bW02XSAyNyBbeG1tN10gMzYgW3I4XSAzNyBbcjldCjs7ICBleGl0IGJs b2NrIHVzZXMgCSAwIFtheF0gNiBbYnBdIDcgW3NwXSAxOSBbZnJhbWVdCjs7 ICByZWdzIGV2ZXIgbGl2ZSAJIDAgW2F4XSAyMCBbeG1tMF0KOzsgIHJlZiB1 c2FnZSAJcjA9ezJkLDJ1fSByMT17MWR9IHIyPXsxZH0gcjQ9ezFkfSByNT17 MWR9IHI2PXsxZCwydX0gcjc9ezFkLDJ1fSByMTY9ezFkLDF1fSByMTk9ezFk LDJ1fSByMjA9ezFkLDF1fSByMjE9ezFkfSByMjI9ezFkfSByMjM9ezFkfSBy MjQ9ezFkfSByMjU9ezFkfSByMjY9ezFkfSByMjc9ezFkfSByMzY9ezFkfSBy Mzc9ezFkfSByODc9ezFkLDF1fSByOTM9ezFkLDF1fSAKOzsgICAgdG90YWwg cmVmIHVzYWdlIDM0ezIyZCwxMnUsMGV9IGluIDR7NCByZWd1bGFyICsgMCBj YWxsfSBpbnNucy4KKG5vdGUgNCAwIDE4IDIgW2JiIDJdIE5PVEVfSU5TTl9C QVNJQ19CTE9DSykKKGluc24gMTggNCAyIDIgKHNldCAocmVnOlYyREkgOTMp CiAgICAgICAgKHJlZzpWMkRJIDIwIHhtbTAgWyBhIF0pKSAicHI4ODE1Mi5D IjoxNzozOSAtMQogICAgIChleHByX2xpc3Q6UkVHX0RFQUQgKHJlZzpWMkRJ IDIwIHhtbTAgWyBhIF0pCiAgICAgICAgKG5pbCkpKQoobm90ZSAyIDE4IDMg MiBOT1RFX0lOU05fREVMRVRFRCkKKG5vdGUgMyAyIDYgMiBOT1RFX0lOU05f RlVOQ1RJT05fQkVHKQoobm90ZSA2IDMgNyAyIE5PVEVfSU5TTl9ERUxFVEVE KQoobm90ZSA3IDYgOSAyIE5PVEVfSU5TTl9ERUxFVEVEKQoobm90ZSA5IDcg MTAgMiBOT1RFX0lOU05fREVMRVRFRCkKKGluc24gMTAgOSAxNSAyIChzZXQg KHJlZzpTSSA4NykKICAgICAgICAodW5zcGVjOlNJIFsKICAgICAgICAgICAg ICAgIChsdDpWMkRGIChyZWc6VjJESSA5MykKICAgICAgICAgICAgICAgICAg ICAoY29uc3RfdmVjdG9yOlYyREkgWwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0X2ludCAwIFswXSkgcmVwZWF0ZWQgeDIKICAgICAgICAg ICAgICAgICAgICAgICAgXSkpCiAgICAgICAgICAgIF0gVU5TUEVDX01PVk1T SykpICIuLi8uLi9zdGFnZTEtYnVpbGQvZ2NjL2luY2x1ZGUvZW1taW50cmlu LmgiOjk1ODozNCA0MjMwIHsqc3NlMl9tb3Ztc2twZF9sdH0KICAgICAoZXhw cl9saXN0OlJFR19ERUFEIChyZWc6VjJESSA5MykKICAgICAgICAobmlsKSkp CihpbnNuIDE1IDEwIDE2IDIgKHNldCAocmVnL2k6U0kgMCBheCkKICAgICAg ICAocmVnOlNJIDg3KSkgInByODgxNTIuQyI6MTc6MTIwIDY3IHsqbW92c2lf aW50ZXJuYWx9CiAgICAgKGV4cHJfbGlzdDpSRUdfREVBRCAocmVnOlNJIDg3 KQogICAgICAgIChuaWwpKSkKKGluc24gMTYgMTUgMCAyICh1c2UgKHJlZy9p OlNJIDAgYXgpKSAicHI4ODE1Mi5DIjoxNzoxMjAgLTEKICAgICAobmlsKSkK Cjs7IENvbWJpbmVyIHRvdGFsczogNiBhdHRlbXB0cywgNiBzdWJzdGl0dXRp b25zICgwIHJlcXVpcmluZyBuZXcgc3BhY2UpLAo7OyAzIHN1Y2Nlc3Nlcy4K --00000000000067f10c058c24c3cd Content-Type: application/octet-stream; name="after.combine" Content-Disposition: attachment; filename="after.combine" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxbqzzj30 Content-length: 12054 Cjs7IEZ1bmN0aW9uIGYxMCAoX1ozZjEwRHYyX3ksIGZ1bmNkZWZfbm89NTU1 MCwgZGVjbF91aWQ9MzI4NTgsIGNncmFwaF91aWQ9NTU1MSwgc3ltYm9sX29y ZGVyPTU1NTApCgpzY2FubmluZyBuZXcgaW5zbiB3aXRoIHVpZCA9IDE4Lgpy ZXNjYW5uaW5nIGluc24gd2l0aCB1aWQgPSAyLgpzdGFydGluZyB0aGUgcHJv Y2Vzc2luZyBvZiBkZWZlcnJlZCBpbnNucwplbmRpbmcgdGhlIHByb2Nlc3Np bmcgb2YgZGVmZXJyZWQgaW5zbnMKZGZfYW5hbHl6ZSBjYWxsZWQKZGZfd29y a2xpc3RfZGF0YWZsb3dfZG91YmxlcXVldWU6IG5fYmFzaWNfYmxvY2tzIDMg bl9lZGdlcyAyIGNvdW50IDMgKCAgICAxKQoKCmYxMAoKRGF0YWZsb3cgc3Vt bWFyeToKZGVmX2luZm8tPnRhYmxlX3NpemUgPSAyNCwgdXNlX2luZm8tPnRh YmxlX3NpemUgPSAxNQo7OyAgaW52YWxpZGF0ZWQgYnkgY2FsbCAJIDAgW2F4 XSAxIFtkeF0gMiBbY3hdIDQgW3NpXSA1IFtkaV0gOCBbc3RdIDkgW3N0KDEp XSAxMCBbc3QoMildIDExIFtzdCgzKV0gMTIgW3N0KDQpXSAxMyBbc3QoNSld IDE0IFtzdCg2KV0gMTUgW3N0KDcpXSAxNyBbZmxhZ3NdIDE4IFtmcHNyXSAy MCBbeG1tMF0gMjEgW3htbTFdIDIyIFt4bW0yXSAyMyBbeG1tM10gMjQgW3ht bTRdIDI1IFt4bW01XSAyNiBbeG1tNl0gMjcgW3htbTddIDI4IFttbTBdIDI5 IFttbTFdIDMwIFttbTJdIDMxIFttbTNdIDMyIFttbTRdIDMzIFttbTVdIDM0 IFttbTZdIDM1IFttbTddIDM2IFtyOF0gMzcgW3I5XSAzOCBbcjEwXSAzOSBb cjExXSA0NCBbeG1tOF0gNDUgW3htbTldIDQ2IFt4bW0xMF0gNDcgW3htbTEx XSA0OCBbeG1tMTJdIDQ5IFt4bW0xM10gNTAgW3htbTE0XSA1MSBbeG1tMTVd IDUyIFt4bW0xNl0gNTMgW3htbTE3XSA1NCBbeG1tMThdIDU1IFt4bW0xOV0g NTYgW3htbTIwXSA1NyBbeG1tMjFdIDU4IFt4bW0yMl0gNTkgW3htbTIzXSA2 MCBbeG1tMjRdIDYxIFt4bW0yNV0gNjIgW3htbTI2XSA2MyBbeG1tMjddIDY0 IFt4bW0yOF0gNjUgW3htbTI5XSA2NiBbeG1tMzBdIDY3IFt4bW0zMV0gNjgg W2swXSA2OSBbazFdIDcwIFtrMl0gNzEgW2szXSA3MiBbazRdIDczIFtrNV0g NzQgW2s2XSA3NSBbazddCjs7ICBoYXJkd2FyZSByZWdzIHVzZWQgCSA3IFtz cF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0KOzsgIHJlZ3VsYXIgYmxvY2sgYXJ0 aWZpY2lhbCB1c2VzIAkgNiBbYnBdIDcgW3NwXSAxNiBbYXJncF0gMTkgW2Zy YW1lXQo7OyAgZWggYmxvY2sgYXJ0aWZpY2lhbCB1c2VzIAkgNiBbYnBdIDcg W3NwXSAxNiBbYXJncF0gMTkgW2ZyYW1lXQo7OyAgZW50cnkgYmxvY2sgZGVm cyAJIDAgW2F4XSAxIFtkeF0gMiBbY3hdIDQgW3NpXSA1IFtkaV0gNiBbYnBd IDcgW3NwXSAxNiBbYXJncF0gMTkgW2ZyYW1lXSAyMCBbeG1tMF0gMjEgW3ht bTFdIDIyIFt4bW0yXSAyMyBbeG1tM10gMjQgW3htbTRdIDI1IFt4bW01XSAy NiBbeG1tNl0gMjcgW3htbTddIDM2IFtyOF0gMzcgW3I5XQo7OyAgZXhpdCBi bG9jayB1c2VzIAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkgW2ZyYW1lXQo7 OyAgcmVncyBldmVyIGxpdmUgCSAwIFtheF0gMjAgW3htbTBdCjs7ICByZWYg dXNhZ2UgCXIwPXsyZCwydX0gcjE9ezFkfSByMj17MWR9IHI0PXsxZH0gcjU9 ezFkfSByNj17MWQsMnV9IHI3PXsxZCwydX0gcjE2PXsxZCwxdX0gcjE5PXsx ZCwydX0gcjIwPXsxZCwxdX0gcjIxPXsxZH0gcjIyPXsxZH0gcjIzPXsxZH0g cjI0PXsxZH0gcjI1PXsxZH0gcjI2PXsxZH0gcjI3PXsxZH0gcjM2PXsxZH0g cjM3PXsxZH0gcjg2PXsxZCwxdSwxZX0gcjg3PXsxZCwxdX0gcjg5PXsxZCwx dX0gcjkwPXsxZCwxdX0gcjkzPXsxZCwxdX0gCjs7ICAgIHRvdGFsIHJlZiB1 c2FnZSA0MXsyNWQsMTV1LDFlfSBpbiA3ezcgcmVndWxhciArIDAgY2FsbH0g aW5zbnMuCgooICktPlswXS0+KCAyICkKOzsgYmIgMCBhcnRpZmljaWFsX2Rl ZnM6IHsgZDEoMCl7IH1kMigxKXsgfWQzKDIpeyB9ZDQoNCl7IH1kNSg1KXsg fWQ2KDYpeyB9ZDcoNyl7IH1kOCgxNil7IH1kOSgxOSl7IH1kMTAoMjApeyB9 ZDExKDIxKXsgfWQxMigyMil7IH1kMTMoMjMpeyB9ZDE0KDI0KXsgfWQxNSgy NSl7IH1kMTYoMjYpeyB9ZDE3KDI3KXsgfWQxOCgzNil7IH1kMTkoMzcpeyB9 fQo7OyBiYiAwIGFydGlmaWNpYWxfdXNlczogeyB9Cjs7IGxyICBpbiAgCQo7 OyBsciAgdXNlIAkKOzsgbHIgIGRlZiAJIDAgW2F4XSAxIFtkeF0gMiBbY3hd IDQgW3NpXSA1IFtkaV0gNiBbYnBdIDcgW3NwXSAxNiBbYXJncF0gMTkgW2Zy YW1lXSAyMCBbeG1tMF0gMjEgW3htbTFdIDIyIFt4bW0yXSAyMyBbeG1tM10g MjQgW3htbTRdIDI1IFt4bW01XSAyNiBbeG1tNl0gMjcgW3htbTddIDM2IFty OF0gMzcgW3I5XQo7OyBsaXZlICBpbiAgCQo7OyBsaXZlICBnZW4gCSAwIFth eF0gMSBbZHhdIDIgW2N4XSA0IFtzaV0gNSBbZGldIDYgW2JwXSA3IFtzcF0g MTYgW2FyZ3BdIDE5IFtmcmFtZV0gMjAgW3htbTBdIDIxIFt4bW0xXSAyMiBb eG1tMl0gMjMgW3htbTNdIDI0IFt4bW00XSAyNSBbeG1tNV0gMjYgW3htbTZd IDI3IFt4bW03XSAzNiBbcjhdIDM3IFtyOV0KOzsgbGl2ZSAga2lsbAkKOzsg bHIgIG91dCAJIDYgW2JwXSA3IFtzcF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0g MjAgW3htbTBdCjs7IGxpdmUgIG91dCAJIDYgW2JwXSA3IFtzcF0gMTYgW2Fy Z3BdIDE5IFtmcmFtZV0gMjAgW3htbTBdCgooIDAgKS0+WzJdLT4oIDEgKQo7 OyBiYiAyIGFydGlmaWNpYWxfZGVmczogeyB9Cjs7IGJiIDIgYXJ0aWZpY2lh bF91c2VzOiB7IHUwKDYpeyB9dTEoNyl7IH11MigxNil7IH11MygxOSl7IH19 Cjs7IGxyICBpbiAgCSA2IFticF0gNyBbc3BdIDE2IFthcmdwXSAxOSBbZnJh bWVdIDIwIFt4bW0wXQo7OyBsciAgdXNlIAkgNiBbYnBdIDcgW3NwXSAxNiBb YXJncF0gMTkgW2ZyYW1lXSAyMCBbeG1tMF0KOzsgbHIgIGRlZiAJIDAgW2F4 XSA4NiA4NyA4OSA5MCA5Mwo7OyBsaXZlICBpbiAgCSA2IFticF0gNyBbc3Bd IDE2IFthcmdwXSAxOSBbZnJhbWVdIDIwIFt4bW0wXQo7OyBsaXZlICBnZW4g CSAwIFtheF0gODYgODcgODkgOTAKOzsgbGl2ZSAga2lsbAkKOzsgbHIgIG91 dCAJIDAgW2F4XSA2IFticF0gNyBbc3BdIDE2IFthcmdwXSAxOSBbZnJhbWVd Cjs7IGxpdmUgIG91dCAJIDAgW2F4XSA2IFticF0gNyBbc3BdIDE2IFthcmdw XSAxOSBbZnJhbWVdCgooIDIgKS0+WzFdLT4oICkKOzsgYmIgMSBhcnRpZmlj aWFsX2RlZnM6IHsgfQo7OyBiYiAxIGFydGlmaWNpYWxfdXNlczogeyB1MTEo MCl7IH11MTIoNil7IH11MTMoNyl7IH11MTQoMTkpeyB9fQo7OyBsciAgaW4g IAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkgW2ZyYW1lXQo7OyBsciAgdXNl IAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkgW2ZyYW1lXQo7OyBsciAgZGVm IAkKOzsgbGl2ZSAgaW4gIAkgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTkgW2Zy YW1lXQo7OyBsaXZlICBnZW4gCQo7OyBsaXZlICBraWxsCQo7OyBsciAgb3V0 IAkKOzsgbGl2ZSAgb3V0IAkKCkZpbmRpbmcgbmVlZGVkIGluc3RydWN0aW9u czoKICBBZGRpbmcgaW5zbiAxNiB0byB3b3JrbGlzdApGaW5pc2hlZCBmaW5k aW5nIG5lZWRlZCBpbnN0cnVjdGlvbnM6CnByb2Nlc3NpbmcgYmxvY2sgMiBs ciBvdXQgPSAgMCBbYXhdIDYgW2JwXSA3IFtzcF0gMTYgW2FyZ3BdIDE5IFtm cmFtZV0KICBBZGRpbmcgaW5zbiAxNSB0byB3b3JrbGlzdAogIEFkZGluZyBp bnNuIDEwIHRvIHdvcmtsaXN0CiAgQWRkaW5nIGluc24gNyB0byB3b3JrbGlz dAogIEFkZGluZyBpbnNuIDYgdG8gd29ya2xpc3QKICBBZGRpbmcgaW5zbiAy IHRvIHdvcmtsaXN0CiAgQWRkaW5nIGluc24gMTggdG8gd29ya2xpc3QKZGZf d29ya2xpc3RfZGF0YWZsb3dfZG91YmxlcXVldWU6IG5fYmFzaWNfYmxvY2tz IDMgbl9lZGdlcyAyIGNvdW50IDMgKCAgICAxKQppbnNuX2Nvc3QgNCBmb3Ig ICAgMTg6IHI5MzpWMkRJPXhtbTA6VjJESQogICAgICBSRUdfREVBRCB4bW0w OlYyREkKaW5zbl9jb3N0IDQgZm9yICAgICAyOiByODY6VjJEST1yOTM6VjJE SQogICAgICBSRUdfREVBRCByOTM6VjJESQppbnNuX2Nvc3QgNCBmb3IgICAg IDY6IHI4OTpWMkRJPWNvbnN0X3ZlY3RvcgppbnNuX2Nvc3QgOCBmb3IgICAg IDc6IHI5MDpWMkRJPXI4OTpWMkRJPnI4NjpWMkRJCiAgICAgIFJFR19ERUFE IHI4OTpWMkRJCiAgICAgIFJFR19ERUFEIHI4NjpWMkRJCiAgICAgIFJFR19F UVVBTCBjb25zdF92ZWN0b3I+cjg2OlYyREkKaW5zbl9jb3N0IDQgZm9yICAg IDEwOiByODc6U0k9dW5zcGVjW3I5MDpWMkRJIzBdIDQzCiAgICAgIFJFR19E RUFEIHI5MDpWMkRJCmluc25fY29zdCA0IGZvciAgICAxNTogYXg6U0k9cjg3 OlNJCiAgICAgIFJFR19ERUFEIHI4NzpTSQppbnNuX2Nvc3QgMCBmb3IgICAg MTY6IHVzZSBheDpTSQoKVHJ5aW5nIDIgLT4gNzoKICAgIDI6IHI4NjpWMkRJ PXI5MzpWMkRJCiAgICAgIFJFR19ERUFEIHI5MzpWMkRJCiAgICA3OiByOTA6 VjJEST1yODk6VjJEST5yODY6VjJESQogICAgICBSRUdfREVBRCByODk6VjJE SQogICAgICBSRUdfREVBRCByODY6VjJESQogICAgICBSRUdfRVFVQUwgY29u c3RfdmVjdG9yPnI4NjpWMkRJClN1Y2Nlc3NmdWxseSBtYXRjaGVkIHRoaXMg aW5zdHJ1Y3Rpb246CihzZXQgKHJlZzpWMkRJIDkwKQogICAgKGd0OlYyREkg KHJlZzpWMkRJIDg5KQogICAgICAgIChyZWc6VjJESSA5MykpKQphbGxvd2lu ZyBjb21iaW5hdGlvbiBvZiBpbnNucyAyIGFuZCA3Cm9yaWdpbmFsIGNvc3Rz IDQgKyA4ID0gMTIKcmVwbGFjZW1lbnQgY29zdCA4CmRlZmVycmluZyBkZWxl dGlvbiBvZiBpbnNuIHdpdGggdWlkID0gMi4KbW9kaWZ5aW5nIGluc24gaTMg ICAgIDc6IHI5MDpWMkRJPXI4OTpWMkRJPnI5MzpWMkRJCiAgICAgIFJFR19E RUFEIHI5MzpWMkRJCiAgICAgIFJFR19ERUFEIHI4OTpWMkRJCmRlZmVycmlu ZyByZXNjYW4gaW5zbiB3aXRoIHVpZCA9IDcuCgpUcnlpbmcgNiAtPiA3Ogog ICAgNjogcjg5OlYyREk9Y29uc3RfdmVjdG9yCiAgICA3OiByOTA6VjJEST1y ODk6VjJEST5yOTM6VjJESQogICAgICBSRUdfREVBRCByOTM6VjJESQogICAg ICBSRUdfREVBRCByODk6VjJESQpGYWlsZWQgdG8gbWF0Y2ggdGhpcyBpbnN0 cnVjdGlvbjoKKHNldCAocmVnOlYyREkgOTApCiAgICAobHQ6VjJESSAocmVn OlYyREkgOTMpCiAgICAgICAgKGNvbnN0X3ZlY3RvcjpWMkRJIFsKICAgICAg ICAgICAgICAgIChjb25zdF9pbnQgMCBbMF0pIHJlcGVhdGVkIHgyCiAgICAg ICAgICAgIF0pKSkKClRyeWluZyA3IC0+IDEwOgogICAgNzogcjkwOlYyREk9 cjg5OlYyREk+cjkzOlYyREkKICAgICAgUkVHX0RFQUQgcjkzOlYyREkKICAg ICAgUkVHX0RFQUQgcjg5OlYyREkKICAgMTA6IHI4NzpTST11bnNwZWNbcjkw OlYyREkjMF0gNDMKICAgICAgUkVHX0RFQUQgcjkwOlYyREkKRmFpbGVkIHRv IG1hdGNoIHRoaXMgaW5zdHJ1Y3Rpb246CihzZXQgKHJlZzpTSSA4NykKICAg ICh1bnNwZWM6U0kgWwogICAgICAgICAgICAoc3VicmVnOlYyREYgKGd0OlYy REkgKHJlZzpWMkRJIDg5KQogICAgICAgICAgICAgICAgICAgIChyZWc6VjJE SSA5MykpIDApCiAgICAgICAgXSBVTlNQRUNfTU9WTVNLKSkKClRyeWluZyA2 LCA3IC0+IDEwOgogICAgNjogcjg5OlYyREk9Y29uc3RfdmVjdG9yCiAgICA3 OiByOTA6VjJEST1yODk6VjJEST5yOTM6VjJESQogICAgICBSRUdfREVBRCBy OTM6VjJESQogICAgICBSRUdfREVBRCByODk6VjJESQogICAxMDogcjg3OlNJ PXVuc3BlY1tyOTA6VjJESSMwXSA0MwogICAgICBSRUdfREVBRCByOTA6VjJE SQpGYWlsZWQgdG8gbWF0Y2ggdGhpcyBpbnN0cnVjdGlvbjoKKHNldCAocmVn OlNJIDg3KQogICAgKHVuc3BlYzpTSSBbCiAgICAgICAgICAgIChzdWJyZWc6 VjJERiAobHQ6VjJESSAocmVnOlYyREkgOTMpCiAgICAgICAgICAgICAgICAg ICAgKGNvbnN0X3ZlY3RvcjpWMkRJIFsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdF9pbnQgMCBbMF0pIHJlcGVhdGVkIHgyCiAgICAgICAg ICAgICAgICAgICAgICAgIF0pKSAwKQogICAgICAgIF0gVU5TUEVDX01PVk1T SykpCnN0YXJ0aW5nIHRoZSBwcm9jZXNzaW5nIG9mIGRlZmVycmVkIGluc25z CnJlc2Nhbm5pbmcgaW5zbiB3aXRoIHVpZCA9IDcuCmVuZGluZyB0aGUgcHJv Y2Vzc2luZyBvZiBkZWZlcnJlZCBpbnNucwoKCmYxMAoKRGF0YWZsb3cgc3Vt bWFyeToKOzsgIGludmFsaWRhdGVkIGJ5IGNhbGwgCSAwIFtheF0gMSBbZHhd IDIgW2N4XSA0IFtzaV0gNSBbZGldIDggW3N0XSA5IFtzdCgxKV0gMTAgW3N0 KDIpXSAxMSBbc3QoMyldIDEyIFtzdCg0KV0gMTMgW3N0KDUpXSAxNCBbc3Qo NildIDE1IFtzdCg3KV0gMTcgW2ZsYWdzXSAxOCBbZnBzcl0gMjAgW3htbTBd IDIxIFt4bW0xXSAyMiBbeG1tMl0gMjMgW3htbTNdIDI0IFt4bW00XSAyNSBb eG1tNV0gMjYgW3htbTZdIDI3IFt4bW03XSAyOCBbbW0wXSAyOSBbbW0xXSAz MCBbbW0yXSAzMSBbbW0zXSAzMiBbbW00XSAzMyBbbW01XSAzNCBbbW02XSAz NSBbbW03XSAzNiBbcjhdIDM3IFtyOV0gMzggW3IxMF0gMzkgW3IxMV0gNDQg W3htbThdIDQ1IFt4bW05XSA0NiBbeG1tMTBdIDQ3IFt4bW0xMV0gNDggW3ht bTEyXSA0OSBbeG1tMTNdIDUwIFt4bW0xNF0gNTEgW3htbTE1XSA1MiBbeG1t MTZdIDUzIFt4bW0xN10gNTQgW3htbTE4XSA1NSBbeG1tMTldIDU2IFt4bW0y MF0gNTcgW3htbTIxXSA1OCBbeG1tMjJdIDU5IFt4bW0yM10gNjAgW3htbTI0 XSA2MSBbeG1tMjVdIDYyIFt4bW0yNl0gNjMgW3htbTI3XSA2NCBbeG1tMjhd IDY1IFt4bW0yOV0gNjYgW3htbTMwXSA2NyBbeG1tMzFdIDY4IFtrMF0gNjkg W2sxXSA3MCBbazJdIDcxIFtrM10gNzIgW2s0XSA3MyBbazVdIDc0IFtrNl0g NzUgW2s3XQo7OyAgaGFyZHdhcmUgcmVncyB1c2VkIAkgNyBbc3BdIDE2IFth cmdwXSAxOSBbZnJhbWVdCjs7ICByZWd1bGFyIGJsb2NrIGFydGlmaWNpYWwg dXNlcyAJIDYgW2JwXSA3IFtzcF0gMTYgW2FyZ3BdIDE5IFtmcmFtZV0KOzsg IGVoIGJsb2NrIGFydGlmaWNpYWwgdXNlcyAJIDYgW2JwXSA3IFtzcF0gMTYg W2FyZ3BdIDE5IFtmcmFtZV0KOzsgIGVudHJ5IGJsb2NrIGRlZnMgCSAwIFth eF0gMSBbZHhdIDIgW2N4XSA0IFtzaV0gNSBbZGldIDYgW2JwXSA3IFtzcF0g MTYgW2FyZ3BdIDE5IFtmcmFtZV0gMjAgW3htbTBdIDIxIFt4bW0xXSAyMiBb eG1tMl0gMjMgW3htbTNdIDI0IFt4bW00XSAyNSBbeG1tNV0gMjYgW3htbTZd IDI3IFt4bW03XSAzNiBbcjhdIDM3IFtyOV0KOzsgIGV4aXQgYmxvY2sgdXNl cyAJIDAgW2F4XSA2IFticF0gNyBbc3BdIDE5IFtmcmFtZV0KOzsgIHJlZ3Mg ZXZlciBsaXZlIAkgMCBbYXhdIDIwIFt4bW0wXQo7OyAgcmVmIHVzYWdlIAly MD17MmQsMnV9IHIxPXsxZH0gcjI9ezFkfSByND17MWR9IHI1PXsxZH0gcjY9 ezFkLDJ1fSByNz17MWQsMnV9IHIxNj17MWQsMXV9IHIxOT17MWQsMnV9IHIy MD17MWQsMXV9IHIyMT17MWR9IHIyMj17MWR9IHIyMz17MWR9IHIyND17MWR9 IHIyNT17MWR9IHIyNj17MWR9IHIyNz17MWR9IHIzNj17MWR9IHIzNz17MWR9 IHI4Nz17MWQsMXV9IHI4OT17MWQsMXV9IHI5MD17MWQsMXV9IHI5Mz17MWQs MXV9IAo7OyAgICB0b3RhbCByZWYgdXNhZ2UgMzh7MjRkLDE0dSwwZX0gaW4g Nns2IHJlZ3VsYXIgKyAwIGNhbGx9IGluc25zLgoobm90ZSA0IDAgMTggMiBb YmIgMl0gTk9URV9JTlNOX0JBU0lDX0JMT0NLKQooaW5zbiAxOCA0IDIgMiAo c2V0IChyZWc6VjJESSA5MykKICAgICAgICAocmVnOlYyREkgMjAgeG1tMCBb IGEgXSkpICJwcjg4MTUyLkMiOjE3OjM5IC0xCiAgICAgKGV4cHJfbGlzdDpS RUdfREVBRCAocmVnOlYyREkgMjAgeG1tMCBbIGEgXSkKICAgICAgICAobmls KSkpCihub3RlIDIgMTggMyAyIE5PVEVfSU5TTl9ERUxFVEVEKQoobm90ZSAz IDIgNiAyIE5PVEVfSU5TTl9GVU5DVElPTl9CRUcpCihpbnNuIDYgMyA3IDIg KHNldCAocmVnOlYyREkgODkpCiAgICAgICAgKGNvbnN0X3ZlY3RvcjpWMkRJ IFsKICAgICAgICAgICAgICAgIChjb25zdF9pbnQgMCBbMF0pIHJlcGVhdGVk IHgyCiAgICAgICAgICAgIF0pKSAicHI4ODE1Mi5DIjoxNzo5NCAxMjIzIHtt b3Z2MmRpX2ludGVybmFsfQogICAgIChuaWwpKQooaW5zbiA3IDYgMTAgMiAo c2V0IChyZWc6VjJESSA5MCkKICAgICAgICAoZ3Q6VjJESSAocmVnOlYyREkg ODkpCiAgICAgICAgICAgIChyZWc6VjJESSA5MykpKSAicHI4ODE1Mi5DIjox Nzo5NCAzNjUxIHtzc2U0XzJfZ3R2MmRpM30KICAgICAoZXhwcl9saXN0OlJF R19ERUFEIChyZWc6VjJESSA5MykKICAgICAgICAoZXhwcl9saXN0OlJFR19E RUFEIChyZWc6VjJESSA4OSkKICAgICAgICAgICAgKG5pbCkpKSkKKGluc24g MTAgNyAxNSAyIChzZXQgKHJlZzpTSSA4NykKICAgICAgICAodW5zcGVjOlNJ IFsKICAgICAgICAgICAgICAgIChzdWJyZWc6VjJERiAocmVnOlYyREkgOTAp IDApCiAgICAgICAgICAgIF0gVU5TUEVDX01PVk1TSykpICIuLi8uLi9zdGFn ZTEtYnVpbGQvZ2NjL2luY2x1ZGUvZW1taW50cmluLmgiOjk1ODozNCA0MjIy IHtzc2UyX21vdm1za3BkfQogICAgIChleHByX2xpc3Q6UkVHX0RFQUQgKHJl ZzpWMkRJIDkwKQogICAgICAgIChuaWwpKSkKKGluc24gMTUgMTAgMTYgMiAo c2V0IChyZWcvaTpTSSAwIGF4KQogICAgICAgIChyZWc6U0kgODcpKSAicHI4 ODE1Mi5DIjoxNzoxMjAgNjcgeyptb3ZzaV9pbnRlcm5hbH0KICAgICAoZXhw cl9saXN0OlJFR19ERUFEIChyZWc6U0kgODcpCiAgICAgICAgKG5pbCkpKQoo aW5zbiAxNiAxNSAwIDIgKHVzZSAocmVnL2k6U0kgMCBheCkpICJwcjg4MTUy LkMiOjE3OjEyMCAtMQogICAgIChuaWwpKQoKOzsgQ29tYmluZXIgdG90YWxz OiA0IGF0dGVtcHRzLCA0IHN1YnN0aXR1dGlvbnMgKDAgcmVxdWlyaW5nIG5l dyBzcGFjZSksCjs7IDEgc3VjY2Vzc2VzLgo= --00000000000067f10c058c24c3cd Content-Type: application/x-patch; name="pr88833-8.diff" Content-Disposition: attachment; filename="pr88833-8.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxbr315l2 Content-length: 8488 ZGlmZiAtLWdpdCBhL2djYy9md3Byb3AuYyBiL2djYy9md3Byb3AuYwppbmRl eCA0NTcwM2ZlNWYwMS4uZmQ0ZTRlYjI4MTYgMTAwNjQ0Ci0tLSBhL2djYy9m d3Byb3AuYworKysgYi9nY2MvZndwcm9wLmMKQEAgLTQ0OCw2ICs0NDgsMjIg QEAgZW51bSB7CiAgIFBSX09QVElNSVpFX0ZPUl9TUEVFRCA9IDQKIH07CiAK Ky8qIEF2b2lkIHByb3BhZ2F0aW5nIFggaWYgaXQgaXMgYSByZWcgd2l0aCBv bmUgb2YgdGhlIGJlbG93IGZsYWdzIHNldC4gICovCisKK3N0YXRpYyBib29s Cit1c2FibGVfcmVnX3AgKHJ0eCB4KQoreworICBpZiAoIVJFR19QICh4KSkK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKFJUWF9GTEFHICh4LCBmcmFt ZV9yZWxhdGVkKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgZWxzZSBpZiAo UlRYX0ZMQUcgKHgsIHZvbGF0aWwpKQorICAgIHJldHVybiBmYWxzZTsKKwor ICByZXR1cm4gdHJ1ZTsKK30KIAogLyogUmVwbGFjZSBhbGwgb2NjdXJyZW5j ZXMgb2YgT0xEIGluICpQWCB3aXRoIE5FVyBhbmQgdHJ5IHRvIHNpbXBsaWZ5 IHRoZQogICAgcmVzdWx0aW5nIGV4cHJlc3Npb24uICBSZXBsYWNlICpQWCB3 aXRoIGEgbmV3IFJUTCBleHByZXNzaW9uIGlmIGFuCkBAIC01NDcsNiArNTYz LDU0IEBAIHByb3BhZ2F0ZV9ydHhfMSAocnR4ICpweCwgcnR4IG9sZF9ydHgs IHJ0eCBuZXdfcnR4LCBpbnQgZmxhZ3MpCiAJICB0ZW0gPSBzaW1wbGlmeV9n ZW5fc3VicmVnIChtb2RlLCBvcDAsIEdFVF9NT0RFIChTVUJSRUdfUkVHICh4 KSksCiAJCQkJICAgICBTVUJSRUdfQllURSAoeCkpOwogCX0KKworICAgICAg ZWxzZQorCXsKKwkgIHJ0dmVjIHZlYzsKKwkgIHJ0dmVjIG5ld3ZlYzsKKwkg IGNvbnN0IGNoYXIgKmZtdCA9IEdFVF9SVFhfRk9STUFUIChjb2RlKTsKKwkg IHJ0eCBvcDsKKworCSAgZm9yIChpbnQgaSA9IDA7IGZtdFtpXTsgaSsrKQor CSAgICBzd2l0Y2ggKGZtdFtpXSkKKwkgICAgICB7CisJICAgICAgY2FzZSAn RSc6CisJCXZlYyA9IFhWRUMgKHgsIGkpOworCQluZXd2ZWMgPSB2ZWM7CisJ CWZvciAoaW50IGogPSAwOyBqIDwgR0VUX05VTV9FTEVNICh2ZWMpOyBqKysp CisJCSAgeworCQkgICAgb3AgPSBSVFZFQ19FTFQgKHZlYywgaik7CisJCSAg ICB2YWxpZF9vcHMgJj0gcHJvcGFnYXRlX3J0eF8xICgmb3AsIG9sZF9ydHgs IG5ld19ydHgsIGZsYWdzKTsKKwkJICAgIGlmIChvcCAhPSBSVFZFQ19FTFQg KHZlYywgaikpCisJCSAgICAgIHsKKwkJCWlmIChuZXd2ZWMgPT0gdmVjKQor CQkJICB7CisJCQkgICAgbmV3dmVjID0gc2hhbGxvd19jb3B5X3J0dmVjICh2 ZWMpOworCQkJICAgIGlmICghdGVtKQorCQkJICAgICAgdGVtID0gc2hhbGxv d19jb3B5X3J0eCAoeCk7CisJCQkgICAgWFZFQyAodGVtLCBpKSA9IG5ld3Zl YzsKKwkJCSAgfQorCQkJUlRWRUNfRUxUIChuZXd2ZWMsIGopID0gb3A7CisJ CSAgICAgIH0KKwkJICB9CisJICAgICAgICBicmVhazsKKworCSAgICAgIGNh c2UgJ2UnOgorCQlpZiAoWEVYUCAoeCwgaSkpCisJCSAgeworCQkgICAgb3Ag PSBYRVhQICh4LCBpKTsKKwkJICAgIHZhbGlkX29wcyAmPSBwcm9wYWdhdGVf cnR4XzEgKCZvcCwgb2xkX3J0eCwgbmV3X3J0eCwgZmxhZ3MpOworCQkgICAg aWYgKG9wICE9IFhFWFAgKHgsIGkpKQorCQkgICAgICB7CisJCQlpZiAoIXRl bSkKKwkJCSAgdGVtID0gc2hhbGxvd19jb3B5X3J0eCAoeCk7CisJCQlYRVhQ ICh0ZW0sIGkpID0gb3A7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgICBi cmVhazsKKwkgICAgICB9CisJfQorCiAgICAgICBicmVhazsKIAogICAgIGNh c2UgUlRYX09CSjoKQEAgLTEzNzAsMTAgKzE0MzQsMTEgQEAgZm9yd2FyZF9w cm9wYWdhdGVfYW5kX3NpbXBsaWZ5IChkZl9yZWYgdXNlLCBydHhfaW5zbiAq ZGVmX2luc24sIHJ0eCBkZWZfc2V0KQogCiAvKiBHaXZlbiBhIHVzZSBVU0Ug b2YgYW4gaW5zbiwgaWYgaXQgaGFzIGEgc2luZ2xlIHJlYWNoaW5nCiAgICBk ZWZpbml0aW9uLCB0cnkgdG8gZm9yd2FyZCBwcm9wYWdhdGUgaXQgaW50byB0 aGF0IGluc24uCi0gICBSZXR1cm4gdHJ1ZSBpZiBjZmcgY2xlYW51cCB3aWxs IGJlIG5lZWRlZC4gICovCisgICBSZXR1cm4gdHJ1ZSBpZiBjZmcgY2xlYW51 cCB3aWxsIGJlIG5lZWRlZC4KKyAgIFJFR19QUk9QX09OTFkgaXMgdHJ1ZSBp ZiB3ZSBzaG91bGQgb25seSBwcm9wYWdhdGUgcmVnaXN0ZXIgY29waWVzLiAg Ki8KIAogc3RhdGljIGJvb2wKLWZvcndhcmRfcHJvcGFnYXRlX2ludG8gKGRm X3JlZiB1c2UpCitmb3J3YXJkX3Byb3BhZ2F0ZV9pbnRvIChkZl9yZWYgdXNl LCBib29sIHJlZ19wcm9wX29ubHkgPSBmYWxzZSkKIHsKICAgZGZfcmVmIGRl ZjsKICAgcnR4X2luc24gKmRlZl9pbnNuLCAqdXNlX2luc247CkBAIC0xMzk0 LDEwICsxNDU5LDYgQEAgZm9yd2FyZF9wcm9wYWdhdGVfaW50byAoZGZfcmVm IHVzZSkKICAgaWYgKERGX1JFRl9JU19BUlRJRklDSUFMIChkZWYpKQogICAg IHJldHVybiBmYWxzZTsKIAotICAvKiBEbyBub3QgcHJvcGFnYXRlIGxvb3Ag aW52YXJpYW50IGRlZmluaXRpb25zIGluc2lkZSB0aGUgbG9vcC4gICovCi0g IGlmIChERl9SRUZfQkIgKGRlZiktPmxvb3BfZmF0aGVyICE9IERGX1JFRl9C QiAodXNlKS0+bG9vcF9mYXRoZXIpCi0gICAgcmV0dXJuIGZhbHNlOwotCiAg IC8qIENoZWNrIGlmIHRoZSB1c2UgaXMgc3RpbGwgcHJlc2VudCBpbiB0aGUg aW5zbiEgICovCiAgIHVzZV9pbnNuID0gREZfUkVGX0lOU04gKHVzZSk7CiAg IGlmIChERl9SRUZfRkxBR1MgKHVzZSkgJiBERl9SRUZfSU5fTk9URSkKQEAg LTE0MTUsNiArMTQ3NiwxOSBAQCBmb3J3YXJkX3Byb3BhZ2F0ZV9pbnRvIChk Zl9yZWYgdXNlKQogICBpZiAoIWRlZl9zZXQpCiAgICAgcmV0dXJuIGZhbHNl OwogCisgIGlmIChyZWdfcHJvcF9vbmx5CisgICAgICAmJiAoIXVzYWJsZV9y ZWdfcCAoU0VUX1NSQyAoZGVmX3NldCkpCisJICB8fCAhdXNhYmxlX3JlZ19w IChTRVRfREVTVCAoZGVmX3NldCkpKSkKKyAgICByZXR1cm4gZmFsc2U7CisK KyAgLyogQWxsb3cgcHJvcGFnYXRpb25zIGludG8gYSBsb29wIG9ubHkgZm9y IHJlZy10by1yZWcgY29waWVzLCBzaW5jZQorICAgICByZXBsYWNpbmcgb25l IHJlZ2lzdGVyIGJ5IGFub3RoZXIgc2hvdWxkbid0IGluY3JlYXNlIHRoZSBj b3N0LiAgKi8KKworICBpZiAoREZfUkVGX0JCIChkZWYpLT5sb29wX2ZhdGhl ciAhPSBERl9SRUZfQkIgKHVzZSktPmxvb3BfZmF0aGVyCisgICAgICAmJiAo IXVzYWJsZV9yZWdfcCAoU0VUX1NSQyAoZGVmX3NldCkpCisJICB8fCAhdXNh YmxlX3JlZ19wIChTRVRfREVTVCAoZGVmX3NldCkpKSkKKyAgICByZXR1cm4g ZmFsc2U7CisKICAgLyogT25seSB0cnkgb25lIGtpbmQgb2YgcHJvcGFnYXRp b24uICBJZiB0d28gYXJlIHBvc3NpYmxlLCB3ZSdsbAogICAgICBkbyBpdCBv biB0aGUgZm9sbG93aW5nIGl0ZXJhdGlvbnMuICAqLwogICBpZiAoZm9yd2Fy ZF9wcm9wYWdhdGVfYW5kX3NpbXBsaWZ5ICh1c2UsIGRlZl9pbnNuLCBkZWZf c2V0KQpAQCAtMTQ4Myw3ICsxNTU3LDcgQEAgZ2F0ZV9md3Byb3AgKHZvaWQp CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWZ3cHJvcCAodm9pZCkKK2Z3 cHJvcCAoYm9vbCBmd3Byb3BfYWRkcl9wKQogewogICB1bnNpZ25lZCBpOwog CkBAIC0xNTAyLDExICsxNTc2LDE2IEBAIGZ3cHJvcCAodm9pZCkKIAogICAg ICAgZGZfcmVmIHVzZSA9IERGX1VTRVNfR0VUIChpKTsKICAgICAgIGlmICh1 c2UpCi0JaWYgKERGX1JFRl9UWVBFICh1c2UpID09IERGX1JFRl9SRUdfVVNF Ci0JICAgIHx8IERGX1JFRl9CQiAodXNlKS0+bG9vcF9mYXRoZXIgPT0gTlVM TAotCSAgICAvKiBUaGUgb3V0ZXIgbW9zdCBsb29wIGlzIG5vdCByZWFsbHkg YSBsb29wLiAgKi8KLQkgICAgfHwgbG9vcF9vdXRlciAoREZfUkVGX0JCICh1 c2UpLT5sb29wX2ZhdGhlcikgPT0gTlVMTCkKLQkgIGZvcndhcmRfcHJvcGFn YXRlX2ludG8gKHVzZSk7CisJeworCSAgaWYgKERGX1JFRl9UWVBFICh1c2Up ID09IERGX1JFRl9SRUdfVVNFCisJICAgICAgfHwgREZfUkVGX0JCICh1c2Up LT5sb29wX2ZhdGhlciA9PSBOVUxMCisJICAgICAgLyogVGhlIG91dGVyIG1v c3QgbG9vcCBpcyBub3QgcmVhbGx5IGEgbG9vcC4gICovCisJICAgICAgfHwg bG9vcF9vdXRlciAoREZfUkVGX0JCICh1c2UpLT5sb29wX2ZhdGhlcikgPT0g TlVMTCkKKwkgICAgZm9yd2FyZF9wcm9wYWdhdGVfaW50byAodXNlLCBmd3By b3BfYWRkcl9wKTsKKworCSAgZWxzZSBpZiAoZndwcm9wX2FkZHJfcCkKKwkg ICAgZm9yd2FyZF9wcm9wYWdhdGVfaW50byAodXNlLCBmYWxzZSk7CisJfQog ICAgIH0KIAogICBmd3Byb3BfZG9uZSAoKTsKQEAgLTE1MzcsNyArMTYxNiw3 IEBAIHB1YmxpYzoKIAogICAvKiBvcHRfcGFzcyBtZXRob2RzOiAqLwogICB2 aXJ0dWFsIGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKikgeyByZXR1cm4gZ2F0ZV9m d3Byb3AgKCk7IH0KLSAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAo ZnVuY3Rpb24gKikgeyByZXR1cm4gZndwcm9wICgpOyB9CisgIHZpcnR1YWwg dW5zaWduZWQgaW50IGV4ZWN1dGUgKGZ1bmN0aW9uICopIHsgcmV0dXJuIGZ3 cHJvcCAoZmFsc2UpOyB9CiAKIH07IC8vIGNsYXNzIHBhc3NfcnRsX2Z3cHJv cAogCkBAIC0xNTQ5LDMzICsxNjI4LDYgQEAgbWFrZV9wYXNzX3J0bF9md3By b3AgKGdjYzo6Y29udGV4dCAqY3R4dCkKICAgcmV0dXJuIG5ldyBwYXNzX3J0 bF9md3Byb3AgKGN0eHQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1m d3Byb3BfYWRkciAodm9pZCkKLXsKLSAgdW5zaWduZWQgaTsKLQotICBmd3By b3BfaW5pdCAoKTsKLQotICAvKiBHbyB0aHJvdWdoIGFsbCB0aGUgdXNlcy4g IGRmX3VzZXNfY3JlYXRlIHdpbGwgY3JlYXRlIG5ldyBvbmVzIGF0IHRoZQot ICAgICBlbmQsIGFuZCB3ZSdsbCBnbyB0aHJvdWdoIHRoZW0gYXMgd2VsbC4g ICovCi0gIGZvciAoaSA9IDA7IGkgPCBERl9VU0VTX1RBQkxFX1NJWkUgKCk7 IGkrKykKLSAgICB7Ci0gICAgICBpZiAoIXByb3BhZ2F0aW9uc19sZWZ0KQot CWJyZWFrOwotCi0gICAgICBkZl9yZWYgdXNlID0gREZfVVNFU19HRVQgKGkp OwotICAgICAgaWYgKHVzZSkKLQlpZiAoREZfUkVGX1RZUEUgKHVzZSkgIT0g REZfUkVGX1JFR19VU0UKLQkgICAgJiYgREZfUkVGX0JCICh1c2UpLT5sb29w X2ZhdGhlciAhPSBOVUxMCi0JICAgIC8qIFRoZSBvdXRlciBtb3N0IGxvb3Ag aXMgbm90IHJlYWxseSBhIGxvb3AuICAqLwotCSAgICAmJiBsb29wX291dGVy IChERl9SRUZfQkIgKHVzZSktPmxvb3BfZmF0aGVyKSAhPSBOVUxMKQotCSAg Zm9yd2FyZF9wcm9wYWdhdGVfaW50byAodXNlKTsKLSAgICB9Ci0KLSAgZndw cm9wX2RvbmUgKCk7Ci0gIHJldHVybiAwOwotfQotCiBuYW1lc3BhY2Ugewog CiBjb25zdCBwYXNzX2RhdGEgcGFzc19kYXRhX3J0bF9md3Byb3BfYWRkciA9 CkBAIC0xNjAwLDcgKzE2NTIsNyBAQCBwdWJsaWM6CiAKICAgLyogb3B0X3Bh c3MgbWV0aG9kczogKi8KICAgdmlydHVhbCBib29sIGdhdGUgKGZ1bmN0aW9u ICopIHsgcmV0dXJuIGdhdGVfZndwcm9wICgpOyB9Ci0gIHZpcnR1YWwgdW5z aWduZWQgaW50IGV4ZWN1dGUgKGZ1bmN0aW9uICopIHsgcmV0dXJuIGZ3cHJv cF9hZGRyICgpOyB9CisgIHZpcnR1YWwgdW5zaWduZWQgaW50IGV4ZWN1dGUg KGZ1bmN0aW9uICopIHsgcmV0dXJuIGZ3cHJvcCAodHJ1ZSk7IH0KIAogfTsg Ly8gY2xhc3MgcGFzc19ydGxfZndwcm9wX2FkZHIKIApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjg4ODMzLmY5MCBiL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHI4ODgzMy5mOTAKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIyNGU2Y2U1ZjNkCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wcjg4 ODMzLmY5MApAQCAtMCwwICsxLDkgQEAKKyEgeyBkZy1kbyBhc3NlbWJsZSB7 IHRhcmdldCBhYXJjaDY0X2FzbV9zdmVfb2sgfSB9CishIHsgZGctb3B0aW9u cyAiLU8zIC1tYXJjaD1hcm12OC4yLWErc3ZlIC0tc2F2ZS10ZW1wcyIgfQor CitzdWJyb3V0aW5lIGZvbyh4KQorICByZWFsIDo6IHgoMTAwKQorICB4ID0g eCArIDEwCitlbmQgc3Vicm91dGluZSBmb28KKworISB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIge1x0d2hpbGVsb1x0cFswLTldK1wucywgd3pyLCAo d1swLTldKykuKlx0d2hpbGVsb1x0cFswLTldK1wucywgd1swLTldKywgXDF9 IH0gfQo= --00000000000067f10c058c24c3cd--