From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id 52F2538A9098 for ; Thu, 6 Oct 2022 13:07:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 52F2538A9098 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x534.google.com with SMTP id l22so2730587edj.5 for ; Thu, 06 Oct 2022 06:07:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=ArPOkNsJTtRyOeJ/0cn1MHlKvFs85f1BFfTIj9dnLTw=; b=Ic6BBImmTv8G9CFj0TQLJcyFhzbNWW34ZXSqceOEK2TqOKoiVNPkLiAlk4TejhDt5n lnlYk68B7Vx7jiniO+hZENo8s8dcmdTNGGkn2C42WsVQihAErvgiti59OH9slKNZ1etz yDBvu6qgEQkxmgr+bfTN8ADzUdrmEygXPJTXZ/IYLhcpDmFmdXC90DSSr/Mlcws4IaE5 wQcfdoJO4wyZNnOebMzGxK3utwuXco1VuQTLd7Viv7bt3fGeI2GBbEEyzHu4+76jrD3A FPJEk7AjTjEL96aC0NVxEPEK/7YmqKo9pBAL8+uG8UNwsKsJ6DZNbYkTuD8NbGwYOYrm eQLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=ArPOkNsJTtRyOeJ/0cn1MHlKvFs85f1BFfTIj9dnLTw=; b=YkHbFyAAqje/BPbIfdX4Lr0toAImXhtiPGWbQwLGFZKVRJnKhrr83Ep+VElyWtokR7 BMLYd7oD6K0nqK4IgICOSz9W9SL6Tlu9eVrv6rsJis5sBDERv6sITVrtLqRg+dVpk7Je VbH4tXVUYeKlJUUl0GihpSCcC3Xqd2e48oI9ft5hdX6MFxZ7ihzePVEMB/SstLDtT78s QSLy8SyRne/FIW40WTwnvQsLvm28v4z8SvGf5fxYOShALdp5oYBfRkL16LGQR+KXNkVu gDwxsGcD+0aDGvj/GFQ+6z06zFAnIsDkGWl1sCfMkpS4NcWsGaUJgMeaWtb1MwscL9x4 2HYQ== X-Gm-Message-State: ACrzQf1cNgoEp51bnPMjvIvdNmi5yWB1CPo+WcLmfdUuoeq/OVS+IEAn DNeDt40hDVo1V7aVWbRlpXB1vuJoBqQxgkTVri0= X-Google-Smtp-Source: AMsMyM659LY6Z8eKG64yiDZhmf1GUj6fElLwNnyq1E0nSeI8Qg6KdXptrZmg2zo9Xof10Wv6xCP189rEcu86jklOmbM= X-Received: by 2002:a05:6402:1205:b0:458:c1b2:e428 with SMTP id c5-20020a056402120500b00458c1b2e428mr4508961edw.94.1665061647922; Thu, 06 Oct 2022 06:07:27 -0700 (PDT) MIME-Version: 1.0 References: <20220930080033.70151-1-juzhe.zhong@rivai.ai> In-Reply-To: From: Richard Biener Date: Thu, 6 Oct 2022 15:07:15 +0200 Message-ID: Subject: Re: [PATCH] Add first-order recurrence autovectorization To: juzhe.zhong@rivai.ai Cc: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Content-Type: multipart/mixed; boundary="0000000000000e3ebc05ea5d60d7" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000000e3ebc05ea5d60d7 Content-Type: text/plain; charset="UTF-8" On Thu, Oct 6, 2022 at 2:13 PM Richard Biener wrote: > > On Fri, Sep 30, 2022 at 10:00 AM wrote: > > > > From: Ju-Zhe Zhong > > > > Hi, After fixing previous ICE. > > I add full implementation (insert permutation to get correct result.) > > > > The gimple IR is correct now I think: > > # t_21 = PHI <_4(6), t_12(9)> > > # i_22 = PHI > > # vectp_a.6_26 = PHI > > # vect_vec_recur_.9_9 = PHI > > # vectp_b.11_7 = PHI > > # curr_cnt_36 = PHI > > # loop_len_20 = PHI > > _38 = .WHILE_LEN (loop_len_20, 32, POLY_INT_CST [4, 4]); > > while_len_37 = _38; > > _1 = (long unsigned int) i_22; > > _2 = _1 * 4; > > _3 = a_14(D) + _2; > > vect__4.8_19 = .LEN_LOAD (vectp_a.6_26, 32B, loop_len_20, 0); > > _4 = *_3; > > _5 = b_15(D) + _2; > > vect_vec_recur_.9_9 = VEC_PERM_EXPR ; > > > > But I encounter another ICE: > > 0x169e0e7 process_bb > > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:7498 > > 0x16a09af do_rpo_vn(function*, edge_def*, bitmap_head*, bool, bool, vn_lookup_kind) > > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:8109 > > 0x16a0fe7 do_rpo_vn(function*, edge_def*, bitmap_head*) > > ../../../riscv-gcc/gcc/tree-ssa-sccvn.cc:8205 > > 0x179b7db execute > > ../../../riscv-gcc/gcc/tree-vectorizer.cc:1365 > > > > Could you help me with this? After fixing this ICE, I think the loop vectorizer > > can run correctly. Maybe you can test is in X86 or ARM after fixing this ICE. > > Sorry for the late reply, the issue is that we have > > vect_vec_recur_.7_7 = VEC_PERM_EXPR { 7, 8, 9, 10, 11, 12, 13, 14 }>; > > thus > > + for (unsigned i = 0; i < ncopies; ++i) > + { > + gphi *phi = as_a (STMT_VINFO_VEC_STMTS (def_stmt_info)[i]); > + tree latch = PHI_ARG_DEF_FROM_EDGE (phi, loop_latch_edge (loop)); > + tree recur = gimple_phi_result (phi); > + gassign *assign > + = gimple_build_assign (recur, VEC_PERM_EXPR, recur, latch, perm); > + gimple_assign_set_lhs (assign, recur); > > needs to create a new SSA name for each LHS. You shouldn't create code in > vect_get_vec_defs_for_operand either. > > Let me mangle the patch a bit. > > The attached is what I came up with, the permutes need to be generated when > the backedge PHI values are filled in. Missing are ncopies > 1 handling, we'd > need to think of how the initial value and the permutes would work here, missing > is SLP support but more importantly handling in the epilogue (so on x86 requires > constant loop bound) > I've added a testcase that triggers on x86_64. Actually I broke it, the following is more correct. Richard. > Richard. --0000000000000e3ebc05ea5d60d7 Content-Type: application/octet-stream; name=p Content-Disposition: attachment; filename=p Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8x2opdh0 RnJvbSBjMTRlNDQ1Zjc5MTg4ZDA2MzRlN2M5MmJkNTI2NDEwNzgyMGMxMDM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1ZW50aGVyQHN1c2UuZGU+CkRh dGU6IFRodSwgNiBPY3QgMjAyMiAxMzo1NjowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFZlY3Rv cml6YXRpb24gb2YgZmlyc3Qtb3JkZXIgcmVjdXJyZW5jZXMKVG86IGdjYy1wYXRjaGVzQGdjYy5n bnUub3JnCgpNaXNzaW5nOgogKiBuY29waWVzID4gMQogKiBTTFAKICogZXBpbG9ndWUgaGFuZGxp bmcKICogY29zdGluZwogKiBtb3JlIHRlc3RjYXNlcyAod2l0aCBydW50aW1lIHZlcmlmaWNhdGlv bikKCgkqIHRyZWUtdmVjdG9yaXplci5oOgoJKiB0cmVlLXZlY3QtbG9vcC5jYwoJKiB0cmVlLXZl Y3Qtc3RtdHMuY2MKCgkqIGdjYy5kZy92ZWN0L3ZlY3QtcmVjdXJyLTEuYzogTmV3IHRlc3RjYXNl LgotLS0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1yZWN1cnItMS5jIHwgIDM4ICsr KysKIGdjYy90cmVlLXZlY3QtbG9vcC5jYyAgICAgICAgICAgICAgICAgICAgIHwgMjU0ICsrKysr KysrKysrKysrKysrKysrLS0KIGdjYy90cmVlLXZlY3Qtc3RtdHMuY2MgICAgICAgICAgICAgICAg ICAgIHwgIDEyICstCiBnY2MvdHJlZS12ZWN0b3JpemVyLmggICAgICAgICAgICAgICAgICAgICB8 ICAgNCArCiA0IGZpbGVzIGNoYW5nZWQsIDI5MCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtcmVj dXJyLTEuYwoKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1yZWN1 cnItMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXJlY3Vyci0xLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZlYjU5ZmRmODU0Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LXJlY3Vyci0xLmMKQEAgLTAs MCArMSwzOCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisKK3ZvaWQg X19hdHRyaWJ1dGVfXygobm9pcGEpKQorZm9vIChpbnQgKiBfX3Jlc3RyaWN0X18gYSwgaW50ICog X19yZXN0cmljdF9fIGIsIGludCAqIF9fcmVzdHJpY3RfXyBjKQoreworICBpbnQgdCA9ICpjOwor ICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpCisgICAgeworICAgICAgYltpXSA9IGFbaV0g LSB0OworICAgICAgdCA9IGFbaV07CisgICAgfQorfQorCitpbnQgYVs2NF0sIGJbNjRdOworCitp bnQKK21haW4gKCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA2 NDsgKytpKQorICAgIHsKKyAgICAgIGFbaV0gPSBpOworICAgICAgX19hc21fXyB2b2xhdGlsZSAo IiIgOjo6ICJtZW1vcnkiKTsKKyAgICB9CisgIGludCBjID0gNzsKKyAgZm9vIChhLCBiLCAmYyk7 CisgIGZvciAoaW50IGkgPSAxOyBpIDwgNjQ7ICsraSkKKyAgICBpZiAoYltpXSAhPSBhW2ldIC0g YVtpLTFdKQorICAgICAgYWJvcnQgKCk7CisgIGlmIChiWzBdICE9IC03KQorICAgIGFib3J0ICgp OworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJ2ZWN0 b3JpemVkIDEgbG9vcHMgaW4gZnVuY3Rpb24iICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXZlY3QtbG9vcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYwppbmRleCAyNTM2Y2Mz Y2Y0OS4uZjM3MjUxYmIxZWYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5jYworKysg Yi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MKQEAgLTUyOSw2ICs1MjksNTIgQEAgdmVjdF9pbm5lcl9w aGlfaW5fZG91YmxlX3JlZHVjdGlvbl9wIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGdwaGkg KnBoaSkKICAgcmV0dXJuIGZhbHNlOwogfQogCisvKiBSZXR1cm5zIHRydWUgaWYgUGhpIGlzIGEg Zmlyc3Qtb3JkZXIgcmVjdXJyZW5jZS4gQSBmaXJzdC1vcmRlcgorICAgcmVjdXJyZW5jZSBpcyBh IG5vbi1yZWR1Y3Rpb24gcmVjdXJyZW5jZSByZWxhdGlvbiBpbiB3aGljaCB0aGUgdmFsdWUgb2YK KyAgIHRoZSByZWN1cnJlbmNlIGluIHRoZSBjdXJyZW50IGxvb3AgaXRlcmF0aW9uIGVxdWFscyBh IHZhbHVlIGRlZmluZWQgaW4KKyAgIHRoZSBwcmV2aW91cyBpdGVyYXRpb24uICAqLworCitzdGF0 aWMgYm9vbAordmVjdF9waGlfZmlyc3Rfb3JkZXJfcmVjdXJyZW5jZV9wIChsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sIGNsYXNzIGxvb3AgKmxvb3AsCisJCQkJICAgZ3BoaSAqcGhpKQoreworICAv KiBFbnN1cmUgdGhlIGxvb3AgbGF0Y2ggZGVmaW5pdGlvbiBpcyBmcm9tIHdpdGhpbiB0aGUgbG9v cC4gICovCisgIGVkZ2UgbGF0Y2ggPSBsb29wX2xhdGNoX2VkZ2UgKGxvb3ApOworICB0cmVlIGxk ZWYgPSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKHBoaSwgbGF0Y2gpOworICBpZiAoVFJFRV9DT0RF IChsZGVmKSAhPSBTU0FfTkFNRQorICAgICAgfHwgU1NBX05BTUVfSVNfREVGQVVMVF9ERUYgKGxk ZWYpCisgICAgICB8fCAhZmxvd19iYl9pbnNpZGVfbG9vcF9wIChsb29wLCBnaW1wbGVfYmIgKFNT QV9OQU1FX0RFRl9TVE1UIChsZGVmKSkpKQorICAgIHJldHVybiBmYWxzZTsKKworICB0cmVlIGRl ZiA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGkpOworCisgIC8qIEVuc3VyZSBldmVyeSB1c2Vfc3Rt dCBvZiB0aGUgcGhpIG5vZGUgaXMgZG9taW5hdGVkIGJ5IHRoZSBsYXRjaAorICAgICBkZWZpbml0 aW9uLiAgKi8KKyAgaW1tX3VzZV9pdGVyYXRvciBpbW1faXRlcjsKKyAgdXNlX29wZXJhbmRfcCB1 c2VfcDsKKyAgRk9SX0VBQ0hfSU1NX1VTRV9GQVNUICh1c2VfcCwgaW1tX2l0ZXIsIGRlZikKKyAg ICBpZiAoIXZlY3Rfc3RtdF9kb21pbmF0ZXNfc3RtdF9wIChTU0FfTkFNRV9ERUZfU1RNVCAobGRl ZiksCisJCQkJICAgICBVU0VfU1RNVCAodXNlX3ApKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKwor ICAvKiBGaXJzdC1vcmRlciByZWN1cnJlbmNlIGF1dG92ZWN0b3JpemF0aW9uIG5lZWRzIHNodWZm bGUgdmVjdG9yLiAgKi8KKyAgdHJlZSBzY2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAoZGVmKTsKKyAg dHJlZSB2ZWN0eXBlID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBlIChsb29wX3ZpbmZvLCBz Y2FsYXJfdHlwZSk7CisgIGlmICghdmVjdHlwZSkKKyAgICByZXR1cm4gZmFsc2U7CisgIC8qIEZp cnN0LW9yZGVyIHJlY3VycmVuY2UgYXV0b3ZlY3Rvcml6YXRpb24gbmVlZHMgdG8gaGFuZGxlIHBl cm11dGF0aW9uCisgICAgIHdpdGggaW5kaWNlcyA9IFtudW5pdHMtMSwgbnVuaXRzLCBudW5pdHMr MSwgLi4uXS4gICovCisgIHBvbHlfaW50NjQgbnVuaXRzID0gVFlQRV9WRUNUT1JfU1VCUEFSVFMg KHZlY3R5cGUpOworICB2ZWNfcGVybV9idWlsZGVyIHNlbCAobnVuaXRzLCAxLCAzKTsKKyAgZm9y IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgc2VsLnF1aWNrX3B1c2ggKG51bml0cyAtIDEg KyBpKTsKKyAgdmVjX3Blcm1faW5kaWNlcyBpbmRpY2VzIChzZWwsIDEsIG51bml0cyAqIDIpOwor ICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wIChUWVBFX01PREUgKHZlY3R5cGUpLCBUWVBFX01P REUgKHZlY3R5cGUpLCBpbmRpY2VzKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHRy dWU7Cit9CisKIC8qIEZ1bmN0aW9uIHZlY3RfYW5hbHl6ZV9zY2FsYXJfY3ljbGVzXzEuCiAKICAg IEV4YW1pbmUgdGhlIGNyb3NzIGl0ZXJhdGlvbiBkZWYtdXNlIGN5Y2xlcyBvZiBzY2FsYXIgdmFy aWFibGVzCkBAIC02NjYsNiArNzEyLDggQEAgdmVjdF9hbmFseXplX3NjYWxhcl9jeWNsZXNfMSAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBjbGFzcyBsb29wICpsb29wLAogICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgZWxzZSBpZiAodmVjdF9waGlf Zmlyc3Rfb3JkZXJfcmVjdXJyZW5jZV9wIChsb29wX3ZpbmZvLCBsb29wLCBwaGkpKQorCVNUTVRf VklORk9fREVGX1RZUEUgKHN0bXRfdmluZm8pID0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNl OwogICAgICAgZWxzZQogICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAgICAgICAgICAg ZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwK QEAgLTE4MTAsNyArMTg1OCw4IEBAIHZlY3RfYW5hbHl6ZV9sb29wX29wZXJhdGlvbnMgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbykKIAogICAgICAgICAgIGlmICgoU1RNVF9WSU5GT19SRUxFVkFO VCAoc3RtdF9pbmZvKSA9PSB2ZWN0X3VzZWRfaW5fc2NvcGUKICAgICAgICAgICAgICAgIHx8IFNU TVRfVklORk9fTElWRV9QIChzdG10X2luZm8pKQotICAgICAgICAgICAgICAmJiBTVE1UX1ZJTkZP X0RFRl9UWVBFIChzdG10X2luZm8pICE9IHZlY3RfaW5kdWN0aW9uX2RlZikKKwkgICAgICAmJiBT VE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2luZm8pICE9IHZlY3RfaW5kdWN0aW9uX2RlZgorCSAg ICAgICYmIFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgIT0gdmVjdF9maXJzdF9vcmRl cl9yZWN1cnJlbmNlKQogCSAgICAvKiBBIHNjYWxhci1kZXBlbmRlbmNlIGN5Y2xlIHRoYXQgd2Ug ZG9uJ3Qgc3VwcG9ydC4gICovCiAJICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChw aGksCiAJCQkJCSAgICJub3QgdmVjdG9yaXplZDoiCkBAIC0xODMxLDYgKzE4ODAsMTAgQEAgdmVj dF9hbmFseXplX2xvb3Bfb3BlcmF0aW9ucyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQogCQkg ICAgICAgJiYgISBQVVJFX1NMUF9TVE1UIChzdG10X2luZm8pKQogCQlvayA9IHZlY3Rvcml6YWJs ZV9yZWR1Y3Rpb24gKGxvb3BfdmluZm8sCiAJCQkJCSAgICAgc3RtdF9pbmZvLCBOVUxMLCBOVUxM LCAmY29zdF92ZWMpOworCSAgICAgIGVsc2UgaWYgKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRf aW5mbykKKwkJCSA9PSB2ZWN0X2ZpcnN0X29yZGVyX3JlY3VycmVuY2UpCisJCW9rID0gdmVjdG9y aXphYmxlX2RlcF9waGkgKGxvb3BfdmluZm8sIHN0bXRfaW5mbywgTlVMTCwgTlVMTCwKKwkJCQkJ ICAgJmNvc3RfdmVjKTsKICAgICAgICAgICAgIH0KIAogCSAgLyogU0xQIFBISXMgYXJlIHRlc3Rl ZCBieSB2ZWN0X3NscF9hbmFseXplX25vZGVfb3BlcmF0aW9ucy4gICovCkBAIC04MjY3LDYgKzgz MjAsMTQ1IEBAIHZlY3Rvcml6YWJsZV9waGkgKHZlY19pbmZvICosCiAgIHJldHVybiB0cnVlOwog fQogCisvKiBWZWN0b3JpemVzIERlcCBQSElzLiAgKi8KKworYm9vbAordmVjdG9yaXphYmxlX2Rl cF9waGkgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8s CisJCSAgICAgIGdpbXBsZSAqKnZlY19zdG10LCBzbHBfdHJlZSBzbHBfbm9kZSwKKwkJICAgICAg c3RtdF92ZWN0b3JfZm9yX2Nvc3QgKikKK3sKKyAgaWYgKCFsb29wX3ZpbmZvIHx8ICFpc19hPGdw aGkgKj4gKHN0bXRfaW5mby0+c3RtdCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGdwaGkgKnBo aSA9IGFzX2E8Z3BoaSAqPiAoc3RtdF9pbmZvLT5zdG10KTsKKworICAvKiBTbyBmYXIgd2Ugb25s eSBzdXBwb3J0IGZpcnN0LW9yZGVyIHJlY3VycmVuY2UgYXV0by12ZWN0b3JpemF0aW9uLiAgKi8K KyAgaWYgKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgIT0gdmVjdF9maXJzdF9vcmRl cl9yZWN1cnJlbmNlKQorICAgIHJldHVybiBmYWxzZTsKKworICB0cmVlIHZlY3R5cGUgPSBTVE1U X1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbyk7CisgIGlmICghdmVjX3N0bXQpIC8qIHRyYW5zZm9y bWF0aW9uIG5vdCByZXF1aXJlZC4gICovCisgICAgeworICAgICAgLyogU28gZmFyIHdlIGRvbid0 IHN1cHBvcnQgZmlyc3Qtb3JkZXIgcmVjdXJyZW5jZSBmb3IgU0xQCisJIGF1dG8tdmVjdG9yaXph dGlvbi4gICAqLworICAgICAgaWYgKHNscF9ub2RlKQorCXsKKwkgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkKKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVj dF9sb2NhdGlvbiwKKwkJCSAgICAgImRvIG5vdCBzdXBwb3J0IGZpcnN0LW9yZGVyIHJlY3VycmVu Y2UiCisJCQkgICAgICJhdXRvdmVjdG9yaXphdGlvbiBmb3IgU0xQIG5vZGVcbiIpOworCSAgcmV0 dXJuIGZhbHNlOworCX0KKworICAgICAgLyogPz8/ICBXZSBwcm9iYWJseSBjYW4gc2hpZnQgaW4g emVyb3MgZm9yIHRoZSBpbml0aWFsIHZhbHVlcz8gICovCisgICAgICB1bnNpZ25lZCBuY29waWVz ID0gdmVjdF9nZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlwZSk7CisgICAgICBpZiAo bmNvcGllcyA+IDEpCisJcmV0dXJuIGZhbHNlOworCisgICAgICAvKiA/Pz8gIEFjY291bnQgZm9y IHRoZSBuZWNlc3NhcnkgcGVybXV0ZXMuICAqLworICAgICAgU1RNVF9WSU5GT19UWVBFIChzdG10 X2luZm8pID0gZGVwX3BoaV9pbmZvX3R5cGU7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK KyAgLyogVGhpcyBpcyB0aGUgc2Vjb25kIHBoYXNlIG9mIHZlY3Rvcml6aW5nIGZpcnN0LW9yZGVy IHJlY2VjdXJyZW5jZXMuIEFuCisgICAgIG92ZXJ2aWV3IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBp cyBkZXNjcmliZWQgYmVsb3cuIFN1cHBvc2Ugd2UgaGF2ZSB0aGUKKyAgICAgZm9sbG93aW5nIGxv b3AuCisKKyAgICAgaW50MzJfdCB0ID0gMDsKKyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyAr K2kpCisgICAgICAgeworCWJbaV0gPSBhW2ldIC0gdDsKKwl0ID0gYVtpXTsKKyAgICAgIH0KKwor ICAgIFRoZXJlIGlzIGEgZmlyc3Qtb3JkZXIgcmVjdXJyZW5jZSBvbiAiYSIuIEZvciB0aGlzIGxv b3AsIHRoZSBzaG9ydGhhbmQKKyAgICBzY2FsYXIgSVIgbG9va3MgbGlrZToKKworICAgIHNjYWxh ci5wcmVoZWFkZXI6CisgICAgICBpbml0ID0gYVstMV0KKyAgICAgIGJyIGxvb3AuYm9keQorCisg ICAgc2NhbGFyLmJvZHk6CisgICAgICBpID0gUEhJIDwwKHNjYWxhci5wcmVoZWFkZXIpLCBpKzEo c2NhbGFyLmJvZHkpPgorICAgICAgXzIgPSBQSEkgPChpbml0KHNjYWxhci5wcmVoZWFkZXIpLCA8 XzEoc2NhbGFyLmJvZHkpPgorICAgICAgXzEgPSBhW2ldCisgICAgICBiW2ldID0gXzEgLSBfMgor ICAgICAgYnIgY29uZCwgc2NhbGFyLmJvZHksIC4uLgorCisgICAgSW4gdGhpcyBleGFtcGxlLCBf MiBpcyBhIHJlY3VycmVuY2UgYmVjYXVzZSBpdCdzIHZhbHVlIGRlcGVuZHMgb24gdGhlCisgICAg cHJldmlvdXMgaXRlcmF0aW9uLiBJbiB0aGUgZmlyc3QgcGhhc2Ugb2YgdmVjdG9yaXphdGlvbiwg d2UgY3JlYXRlZCBhCisgICAgdGVtcG9yYXJ5IHZhbHVlIGZvciBfMi4gV2Ugbm93IGNvbXBsZXRl IHRoZSB2ZWN0b3JpemF0aW9uIGFuZCBwcm9kdWNlIHRoZQorICAgIHNob3J0aGFuZCB2ZWN0b3Ig SVIgc2hvd24gYmVsb3cgKFZGID0gNCkuCisKKyAgICB2ZWN0b3IucHJlaGVhZGVyOgorICAgICAg dmVjdF9pbml0ID0gdmVjdF9jc3QoLi4uLCAuLi4sIC4uLiwgYVstMV0pCisgICAgICBiciB2ZWN0 b3IuYm9keQorCisgICAgdmVjdG9yLmJvZHkKKyAgICAgIGkgPSBQSEkgPDAodmVjdG9yLnByZWhl YWRlciksIGkrNCh2ZWN0b3IuYm9keSk+CisgICAgICB2ZWN0XzEgPSBQSEkgPHZlY3RfaW5pdCh2 ZWN0b3IucHJlaGVhZGVyKSwgdjIodmVjdG9yLmJvZHkpPgorICAgICAgdmVjdF8yID0gYVtpLCBp KzEsIGkrMiwgaSszXTsKKyAgICAgIHZlY3RfMyA9IHZlY3Rvcih2ZWN0XzEoMyksIHZlY3RfMigw LCAxLCAyKSkKKyAgICAgIGJbaSwgaSsxLCBpKzIsIGkrM10gPSB2ZWN0XzIgLSB2ZWN0XzMKKyAg ICAgIGJyIGNvbmQsIHZlY3Rvci5ib2R5LCBtaWRkbGUuYmxvY2sKKworICAgIG1pZGRsZS5ibG9j azoKKyAgICAgIHggPSB2ZWN0XzIoMykKKyAgICAgIGJyIHNjYWxhci5wcmVoZWFkZXIKKworICAg IHNjYWxhci5waDoKKyAgICAgIHNfaW5pdCA9IFBISSA8eChtaWRkbGUuYmxvY2spLCBhWy0xXSwg b3RoZXJ3aXNlPgorICAgICAgYnIgc2NhbGFyLmJvZHkKKworICAgIEFmdGVyIGV4ZWN1dGlvbiBj b21wbGV0ZXMgdGhlIHZlY3RvciBsb29wLCB3ZSBleHRyYWN0IHRoZSBuZXh0IHZhbHVlIG9mCisg ICAgdGhlIHJlY3VycmVuY2UgKHgpIHRvIHVzZSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBpbiB0aGUg c2NhbGFyIGxvb3AuICAqLworCisgIGVkZ2UgcGUgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChMT09Q X1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pKTsKKyAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIg KHBoaSk7CisgIHRyZWUgcHJlaGVhZGVyID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGksIHBl KTsKKyAgdHJlZSB2ZWNfaW5pdCA9IGJ1aWxkX3ZlY3Rvcl9mcm9tX3ZhbCAodmVjdHlwZSwgcHJl aGVhZGVyKTsKKyAgdmVjX2luaXQgPSB2ZWN0X2luaXRfdmVjdG9yIChsb29wX3ZpbmZvLCBzdG10 X2luZm8sIHZlY19pbml0LCB2ZWN0eXBlLCBOVUxMKTsKKyAgLyogQ3JlYXRlIHRoZSB2ZWN0b3Jp emVkIGZpcnN0LW9yZGVyIFBISSBub2RlLiAgKi8KKyAgdHJlZSB2ZWNfZGVzdCA9IHZlY3RfZ2V0 X25ld192ZWN0X3ZhciAodmVjdHlwZSwKKwkJCQkJIHZlY3Rfc2ltcGxlX3ZhciwgInZlY19yZWN1 cl8iKTsKKyAgZ3BoaSAqbmV3X3BoaSA9IGNyZWF0ZV9waGlfbm9kZSAodmVjX2Rlc3QsIGJiKTsK KyAgYWRkX3BoaV9hcmcgKG5ld19waGksIHZlY19pbml0LCBwZSwgVU5LTk9XTl9MT0NBVElPTik7 CisKKyAgLyogSW5zZXJ0IHNodWZmbGV2ZWN0b3IgdG8gZm9yIGZpcnN0LW9yZGVyIHJlY3VycmVu Y2UKKyAgICAgYXV0b3ZlY3Rvcml6YXRpb24uCisgICAgIHJlc3VsdCA9IFZFQ19QRVJNIDx2ZWNf cmVjdXIsIHZlY3RfMSwKKyAgICAgaW5kZXhbbnVuaXRzLTEsIG51bml0cywgLi4uXT4uICAqLwor ICBwb2x5X2ludDY0IG51bml0cyA9IFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2ZWN0eXBlKTsKKyAg dmVjX3Blcm1fYnVpbGRlciBzZWwgKG51bml0cywgMSwgMyk7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgMzsgKytpKQorICAgIHNlbC5xdWlja19wdXNoIChudW5pdHMgLSAxICsgaSk7CisgIHZlY19w ZXJtX2luZGljZXMgaW5kaWNlcyAoc2VsLCAxLCBudW5pdHMgKiAyKTsKKyAgdHJlZSBwZXJtID0g dmVjdF9nZW5fcGVybV9tYXNrX2NoZWNrZWQgKHZlY3R5cGUsIGluZGljZXMpOworCisgIC8qIElu c2VydCB0aGUgcmVxdWlyZWQgcGVybXV0ZSBhZnRlciB0aGUgbGF0Y2ggZGVmaW5pdGlvbi4gIFRo ZQorICAgICBzZWNvbmQgb3BlcmFuZCBpcyB0ZW50YXRpdmUgYW5kIHdpbGwgYmUgdXBkYXRlZCB3 aGVuIHdlIGhhdmUKKyAgICAgdmVjdG9yaXplZCB0aGUgbGF0Y2ggZGVmaW5pdGlvbi4gICovCisg IHZlY19kZXN0ID0gbWFrZV9zc2FfbmFtZSAodmVjdHlwZSk7CisgIGdhc3NpZ24gKnZwZXJtCisg ICAgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWNfZGVzdCwgVkVDX1BFUk1fRVhQUiwKKwkJCSAg IGdpbXBsZV9waGlfcmVzdWx0IChuZXdfcGhpKSwKKwkJCSAgIGdpbXBsZV9waGlfcmVzdWx0IChu ZXdfcGhpKSwgcGVybSk7CisgIGVkZ2UgbGUgPSBsb29wX2xhdGNoX2VkZ2UgKExPT1BfVklORk9f TE9PUCAobG9vcF92aW5mbykpOworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kyCisgICAgPSBn c2lfZm9yX3N0bXQgKFNTQV9OQU1FX0RFRl9TVE1UIChQSElfQVJHX0RFRl9GUk9NX0VER0UgKHBo aSwgbGUpKSk7CisgIGdzaV9uZXh0ICgmZ3NpMik7CisgIHZlY3RfZmluaXNoX3N0bXRfZ2VuZXJh dGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCB2cGVybSwgJmdzaTIpOworCisgIGlmIChzbHBf bm9kZSkKKyAgICBTTFBfVFJFRV9WRUNfU1RNVFMgKHNscF9ub2RlKS5xdWlja19wdXNoICh2cGVy bSk7CisgIGVsc2UKKyAgICBTVE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKS5zYWZlX3B1 c2ggKHZwZXJtKTsKKworICBpZiAoIXNscF9ub2RlKQorICAgICp2ZWNfc3RtdCA9IFNUTVRfVklO Rk9fVkVDX1NUTVRTIChzdG10X2luZm8pWzBdOworICByZXR1cm4gdHJ1ZTsKK30KKwogLyogUmV0 dXJuIHRydWUgaWYgVkVDVFlQRSByZXByZXNlbnRzIGEgdmVjdG9yIHRoYXQgcmVxdWlyZXMgbG93 ZXJpbmcKICAgIGJ5IHRoZSB2ZWN0b3IgbG93ZXJpbmcgcGFzcy4gICovCiAKQEAgLTEwMjIzLDI3 ICsxMDQxNSw1MyBAQCBtYXliZV9zZXRfdmVjdG9yaXplZF9iYWNrZWRnZV92YWx1ZSAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpbmZvLAogICBpbW1fdXNlX2l0ZXJhdG9yIGl0ZXI7CiAgIHVzZV9vcGVy YW5kX3AgdXNlX3A7CiAgIEZPUl9FQUNIX0lNTV9VU0VfRkFTVCAodXNlX3AsIGl0ZXIsIGRlZikK LSAgICBpZiAoZ3BoaSAqcGhpID0gZHluX2Nhc3QgPGdwaGkgKj4gKFVTRV9TVE1UICh1c2VfcCkp KQotICAgICAgaWYgKGdpbXBsZV9iYiAocGhpKS0+bG9vcF9mYXRoZXItPmhlYWRlciA9PSBnaW1w bGVfYmIgKHBoaSkKLQkgICYmIChwaGlfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10IChw aGkpKQotCSAgJiYgU1RNVF9WSU5GT19SRUxFVkFOVF9QIChwaGlfaW5mbykKLQkgICYmIFZFQ1RP UklaQUJMRV9DWUNMRV9ERUYgKFNUTVRfVklORk9fREVGX1RZUEUgKHBoaV9pbmZvKSkKKyAgICB7 CisgICAgICBncGhpICpwaGkgPSBkeW5fY2FzdCA8Z3BoaSAqPiAoVVNFX1NUTVQgKHVzZV9wKSk7 CisgICAgICBpZiAoIXBoaSkKKwljb250aW51ZTsKKyAgICAgIGlmICghKGdpbXBsZV9iYiAocGhp KS0+bG9vcF9mYXRoZXItPmhlYWRlciA9PSBnaW1wbGVfYmIgKHBoaSkKKwkgICAgJiYgKHBoaV9p bmZvID0gbG9vcF92aW5mby0+bG9va3VwX3N0bXQgKHBoaSkpCisJICAgICYmIFNUTVRfVklORk9f UkVMRVZBTlRfUCAocGhpX2luZm8pKSkKKwljb250aW51ZTsKKyAgICAgIGxvb3BfcCBsb29wID0g Z2ltcGxlX2JiIChwaGkpLT5sb29wX2ZhdGhlcjsKKyAgICAgIGVkZ2UgZSA9IGxvb3BfbGF0Y2hf ZWRnZSAobG9vcCk7CisgICAgICBpZiAoUEhJX0FSR19ERUZfRlJPTV9FREdFIChwaGksIGUpICE9 IGRlZikKKwljb250aW51ZTsKKworICAgICAgaWYgKFZFQ1RPUklaQUJMRV9DWUNMRV9ERUYgKFNU TVRfVklORk9fREVGX1RZUEUgKHBoaV9pbmZvKSkKIAkgICYmIFNUTVRfVklORk9fUkVEVUNfVFlQ RSAocGhpX2luZm8pICE9IEZPTERfTEVGVF9SRURVQ1RJT04KIAkgICYmIFNUTVRfVklORk9fUkVE VUNfVFlQRSAocGhpX2luZm8pICE9IEVYVFJBQ1RfTEFTVF9SRURVQ1RJT04pCiAJewotCSAgbG9v cF9wIGxvb3AgPSBnaW1wbGVfYmIgKHBoaSktPmxvb3BfZmF0aGVyOwotCSAgZWRnZSBlID0gbG9v cF9sYXRjaF9lZGdlIChsb29wKTsKLQkgIGlmIChQSElfQVJHX0RFRl9GUk9NX0VER0UgKHBoaSwg ZSkgPT0gZGVmKQorCSAgdmVjPGdpbXBsZSAqPiAmcGhpX2RlZnMgPSBTVE1UX1ZJTkZPX1ZFQ19T VE1UUyAocGhpX2luZm8pOworCSAgdmVjPGdpbXBsZSAqPiAmbGF0Y2hfZGVmcyA9IFNUTVRfVklO Rk9fVkVDX1NUTVRTIChkZWZfc3RtdF9pbmZvKTsKKwkgIGdjY19hc3NlcnQgKHBoaV9kZWZzLmxl bmd0aCAoKSA9PSBsYXRjaF9kZWZzLmxlbmd0aCAoKSk7CisJICBmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgcGhpX2RlZnMubGVuZ3RoICgpOyArK2kpCisJICAgIGFkZF9waGlfYXJnIChhc19hIDxn cGhpICo+IChwaGlfZGVmc1tpXSksCisJCQkgZ2ltcGxlX2dldF9saHMgKGxhdGNoX2RlZnNbaV0p LCBlLAorCQkJIGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uIChwaGksIGUtPmRlc3RfaWR4KSk7CisJ fQorICAgICAgZWxzZSBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAocGhpX2luZm8pID09IHZlY3Rf Zmlyc3Rfb3JkZXJfcmVjdXJyZW5jZSkKKwl7CisJICAvKiBGb3IgZmlyc3Qgb3JkZXIgcmVjdXJy ZW5jZXMgd2UgaGF2ZSB0byB1cGRhdGUgYm90aCB1c2VzIG9mCisJICAgICB0aGUgbGF0Y2ggZGVm aW5pdGlvbiwgdGhlIG9uZSBpbiB0aGUgUEhJIG5vZGUgYW5kIHRoZSBvbmUKKwkgICAgIGluIHRo ZSBnZW5lcmF0ZWQgVkVDX1BFUk1fRVhQUi4gICovCisJICB2ZWM8Z2ltcGxlICo+ICZwaGlfZGVm cyA9IFNUTVRfVklORk9fVkVDX1NUTVRTIChwaGlfaW5mbyk7CisJICB2ZWM8Z2ltcGxlICo+ICZs YXRjaF9kZWZzID0gU1RNVF9WSU5GT19WRUNfU1RNVFMgKGRlZl9zdG10X2luZm8pOworCSAgZ2Nj X2Fzc2VydCAocGhpX2RlZnMubGVuZ3RoICgpID09IGxhdGNoX2RlZnMubGVuZ3RoICgpKTsKKwkg IC8qID8/PyAgRm9yIG5jb3BpZXMgPiAxIHRoaXMgc2NoZW1lIG1pZ2h0IG5vdCBiZSBjb3JyZWN0 LiAgKi8KKwkgIGdjY19hc3NlcnQgKHBoaV9kZWZzLmxlbmd0aCAoKSA9PSAxKTsKKwkgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBwaGlfZGVmcy5sZW5ndGggKCk7ICsraSkKIAkgICAgewotCSAg ICAgIHZlYzxnaW1wbGUgKj4gJnBoaV9kZWZzID0gU1RNVF9WSU5GT19WRUNfU1RNVFMgKHBoaV9p bmZvKTsKLQkgICAgICB2ZWM8Z2ltcGxlICo+ICZsYXRjaF9kZWZzID0gU1RNVF9WSU5GT19WRUNf U1RNVFMgKGRlZl9zdG10X2luZm8pOwotCSAgICAgIGdjY19hc3NlcnQgKHBoaV9kZWZzLmxlbmd0 aCAoKSA9PSBsYXRjaF9kZWZzLmxlbmd0aCAoKSk7Ci0JICAgICAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IHBoaV9kZWZzLmxlbmd0aCAoKTsgKytpKQotCQlhZGRfcGhpX2FyZyAoYXNfYSA8Z3Bo aSAqPiAocGhpX2RlZnNbaV0pLAotCQkJICAgICBnaW1wbGVfZ2V0X2xocyAobGF0Y2hfZGVmc1tp XSksIGUsCi0JCQkgICAgIGdpbXBsZV9waGlfYXJnX2xvY2F0aW9uIChwaGksIGUtPmRlc3RfaWR4 KSk7CisJICAgICAgZ2Fzc2lnbiAqcGVybSA9IGFzX2EgPGdhc3NpZ24gKj4gKHBoaV9kZWZzW2ld KTsKKwkgICAgICBncGhpICp2cGhpID0gYXNfYSA8Z3BoaSAqPgorCQkJICAgICAoU1NBX05BTUVf REVGX1NUTVQgKGdpbXBsZV9hc3NpZ25fcmhzMSAocGVybSkpKTsKKwkgICAgICBnaW1wbGVfYXNz aWduX3NldF9yaHMyIChwZXJtLCBnaW1wbGVfZ2V0X2xocyAobGF0Y2hfZGVmc1tpXSkpOworCSAg ICAgIHVwZGF0ZV9zdG10IChwZXJtKTsKKwkgICAgICBhZGRfcGhpX2FyZyAodnBoaSwgZ2ltcGxl X2dldF9saHMgKGxhdGNoX2RlZnNbaV0pLCBlLAorCQkJICAgZ2ltcGxlX3BoaV9hcmdfbG9jYXRp b24gKHBoaSwgZS0+ZGVzdF9pZHgpKTsKIAkgICAgfQogCX0KKyAgICB9CiB9CiAKIC8qIFZlY3Rv cml6ZSBTVE1UX0lORk8gaWYgcmVsZXZhbnQsIGluc2VydGluZyBhbnkgbmV3IGluc3RydWN0aW9u cyBiZWZvcmUgR1NJLgpAQCAtMTA2NTIsNiArMTA4NzAsNyBAQCB2ZWN0X3RyYW5zZm9ybV9sb29w IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGdpbXBsZSAqbG9vcF92ZWN0b3JpemVkX2NhbGwp CiAJICAgICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9yZWR1 Y3Rpb25fZGVmCiAJICAgICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0g dmVjdF9kb3VibGVfcmVkdWN0aW9uX2RlZgogCSAgICAgICB8fCBTVE1UX1ZJTkZPX0RFRl9UWVBF IChzdG10X2luZm8pID09IHZlY3RfbmVzdGVkX2N5Y2xlCisJICAgICAgIHx8IFNUTVRfVklORk9f REVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlCiAJICAg ICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVjdF9pbnRlcm5hbF9k ZWYpCiAJICAgICAgJiYgISBQVVJFX1NMUF9TVE1UIChzdG10X2luZm8pKQogCSAgICB7CkBAIC0x MDY3Nyw3ICsxMDg5Niw4IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywgZ2ltcGxlICpsb29wX3ZlY3Rvcml6ZWRfY2FsbCkKIAkgICAgICAgfHwgU1RNVF9W SU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2ZWN0X3JlZHVjdGlvbl9kZWYKIAkgICAgICAg fHwgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2ZWN0X2RvdWJsZV9yZWR1Y3Rp b25fZGVmCiAJICAgICAgIHx8IFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykgPT0gdmVj dF9uZXN0ZWRfY3ljbGUKLQkgICAgICAgfHwgU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZv KSA9PSB2ZWN0X2ludGVybmFsX2RlZikKKwkgICAgICAgfHwgU1RNVF9WSU5GT19ERUZfVFlQRSAo c3RtdF9pbmZvKSA9PSB2ZWN0X2ludGVybmFsX2RlZgorCSAgICAgICB8fCBTVE1UX1ZJTkZPX0RF Rl9UWVBFIChzdG10X2luZm8pID09IHZlY3RfZmlyc3Rfb3JkZXJfcmVjdXJyZW5jZSkKIAkgICAg ICAmJiAhIFBVUkVfU0xQX1NUTVQgKHN0bXRfaW5mbykpCiAJICAgIG1heWJlX3NldF92ZWN0b3Jp emVkX2JhY2tlZGdlX3ZhbHVlIChsb29wX3ZpbmZvLCBzdG10X2luZm8pOwogCX0KZGlmZiAtLWdp dCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCmluZGV4 IGM4ZDFlZmM0NWU1Li42OGI3OWE4Zjk4OCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10 cy5jYworKysgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCkBAIC0xMTQwNCw2ICsxMTQwNCwxMiBA QCB2ZWN0X3RyYW5zZm9ybV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgICBnY2NfYXNzZXJ0 IChkb25lKTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBkZXBfcGhpX2luZm9fdHlwZToKKyAg ICAgIGRvbmUgPSB2ZWN0b3JpemFibGVfZGVwX3BoaSAoYXNfYSA8bG9vcF92ZWNfaW5mbz4gKHZp bmZvKSwKKwkJCQkgIHN0bXRfaW5mbywgJnZlY19zdG10LCBzbHBfbm9kZSwgTlVMTCk7CisgICAg ICBnY2NfYXNzZXJ0IChkb25lKTsKKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBwaGlfaW5mb190 eXBlOgogICAgICAgZG9uZSA9IHZlY3Rvcml6YWJsZV9waGkgKHZpbmZvLCBzdG10X2luZm8sICZ2 ZWNfc3RtdCwgc2xwX25vZGUsIE5VTEwpOwogICAgICAgZ2NjX2Fzc2VydCAoZG9uZSk7CkBAIC0x MTgwNCw2ICsxMTgxMCw5IEBAIHZlY3RfaXNfc2ltcGxlX3VzZSAodHJlZSBvcGVyYW5kLCB2ZWNf aW5mbyAqdmluZm8sIGVudW0gdmVjdF9kZWZfdHlwZSAqZHQsCiAJY2FzZSB2ZWN0X25lc3RlZF9j eWNsZToKIAkgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgIm5lc3RlZCBjeWNsZVxuIik7CiAJICBi cmVhazsKKwljYXNlIHZlY3RfZmlyc3Rfb3JkZXJfcmVjdXJyZW5jZToKKwkgIGR1bXBfcHJpbnRm IChNU0dfTk9URSwgImZpcnN0IG9yZGVyIHJlY3VycmVuY2VcbiIpOworCSAgYnJlYWs7CiAJY2Fz ZSB2ZWN0X3Vua25vd25fZGVmX3R5cGU6CiAJICBkdW1wX3ByaW50ZiAoTVNHX05PVEUsICJ1bmtu b3duXG4iKTsKIAkgIGJyZWFrOwpAQCAtMTE4NTIsNyArMTE4NjEsOCBAQCB2ZWN0X2lzX3NpbXBs ZV91c2UgKHRyZWUgb3BlcmFuZCwgdmVjX2luZm8gKnZpbmZvLCBlbnVtIHZlY3RfZGVmX3R5cGUg KmR0LAogICAgICAgfHwgKmR0ID09IHZlY3RfaW5kdWN0aW9uX2RlZgogICAgICAgfHwgKmR0ID09 IHZlY3RfcmVkdWN0aW9uX2RlZgogICAgICAgfHwgKmR0ID09IHZlY3RfZG91YmxlX3JlZHVjdGlv bl9kZWYKLSAgICAgIHx8ICpkdCA9PSB2ZWN0X25lc3RlZF9jeWNsZSkKKyAgICAgIHx8ICpkdCA9 PSB2ZWN0X25lc3RlZF9jeWNsZQorCQkJfHwgKmR0ID09IHZlY3RfZmlyc3Rfb3JkZXJfcmVjdXJy ZW5jZSkKICAgICB7CiAgICAgICAqdmVjdHlwZSA9IFNUTVRfVklORk9fVkVDVFlQRSAoZGVmX3N0 bXRfaW5mbyk7CiAgICAgICBnY2NfYXNzZXJ0ICgqdmVjdHlwZSAhPSBOVUxMX1RSRUUpOwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCmlu ZGV4IDQ4NzBjNzU0NDk5Li5hOGE4M2NlZDI1MiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdG9y aXplci5oCisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaApAQCAtNjUsNiArNjUsNyBAQCBlbnVt IHZlY3RfZGVmX3R5cGUgewogICB2ZWN0X3JlZHVjdGlvbl9kZWYsCiAgIHZlY3RfZG91YmxlX3Jl ZHVjdGlvbl9kZWYsCiAgIHZlY3RfbmVzdGVkX2N5Y2xlLAorICB2ZWN0X2ZpcnN0X29yZGVyX3Jl Y3VycmVuY2UsCiAgIHZlY3RfdW5rbm93bl9kZWZfdHlwZQogfTsKIApAQCAtMTAyNyw2ICsxMDI4 LDcgQEAgZW51bSBzdG10X3ZlY19pbmZvX3R5cGUgewogICBjeWNsZV9waGlfaW5mb190eXBlLAog ICBsY19waGlfaW5mb190eXBlLAogICBwaGlfaW5mb190eXBlLAorICBkZXBfcGhpX2luZm9fdHlw ZSwKICAgbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZQogfTsKIApAQCAtMjMzMSw2ICsyMzMz LDggQEAgZXh0ZXJuIGJvb2wgdmVjdG9yaXphYmxlX2xjX3BoaSAobG9vcF92ZWNfaW5mbywgc3Rt dF92ZWNfaW5mbywKIAkJCQkgZ2ltcGxlICoqLCBzbHBfdHJlZSk7CiBleHRlcm4gYm9vbCB2ZWN0 b3JpemFibGVfcGhpICh2ZWNfaW5mbyAqLCBzdG10X3ZlY19pbmZvLCBnaW1wbGUgKiosIHNscF90 cmVlLAogCQkJICAgICAgc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKik7CitleHRlcm4gYm9vbCB2ZWN0 b3JpemFibGVfZGVwX3BoaSAobG9vcF92ZWNfaW5mbywgc3RtdF92ZWNfaW5mbywKKwkJCQkgZ2lt cGxlICoqLCBzbHBfdHJlZSwgc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKik7CiBleHRlcm4gYm9vbCB2 ZWN0X2VtdWxhdGVkX3ZlY3Rvcl9wICh0cmVlKTsKIGV4dGVybiBib29sIHZlY3RfY2FuX3ZlY3Rv cml6ZV93aXRob3V0X3NpbWRfcCAodHJlZV9jb2RlKTsKIGV4dGVybiBib29sIHZlY3RfY2FuX3Zl Y3Rvcml6ZV93aXRob3V0X3NpbWRfcCAoY29kZV9oZWxwZXIpOwotLSAKMi4zNS4zCgo= --0000000000000e3ebc05ea5d60d7--