From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17136 invoked by alias); 27 Oct 2017 18:22:35 -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 17125 invoked by uid 89); 27 Oct 2017 18:22:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=fv, gotta X-HELO: mail-io0-f174.google.com Received: from mail-io0-f174.google.com (HELO mail-io0-f174.google.com) (209.85.223.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 27 Oct 2017 18:22:31 +0000 Received: by mail-io0-f174.google.com with SMTP id m81so14543549ioi.13 for ; Fri, 27 Oct 2017 11:22:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=OQPS8oO5lYBdMQq+1elUrJEfKe3LbZ5UpUplPTstRhk=; b=KkEQQHACIGmC15BAi4O2GVSP2a2HRPvXybj4V+I0Cmeu0tPBnmf9D3VNvF64XEYT/n J4ldj3VUF0yui1bHGnHzBpa4atlX8Jm4iyeheGI0hPOtOg/TXh2FvyypYxliB7iKDxsA pGJtL+Mqp5ftBGQSxSR0JHt1I//p1JTemOgEN6d2LncKRz/sYFRK9/B/Lhgy6jZh1Heb Oyy+T4AW/DLDPKWdqw6weTVSZvvUTuWeeDPDLszO72wdri5tdKdBqakoUsCFZY9e4EFe RFQb/2ARP9hS1OFUkz8L1zXwEJtxWOhRda9YCYy5VOEly62OsjLJTh65ambH0a9UDPbh uTfw== X-Gm-Message-State: AMCzsaXk3hcEqRpcjBZO3BzR30/ekgwEnLHLGcaDnFFafCIfa348UEUM QfV7dDdY2Xr+NC8GWrs2g5BXMKvm+9I2AqCWJaROuA== X-Google-Smtp-Source: ABhQp+SSTlAjS/8kQakabP9NbAI8NksmP1wdhMDHS/eFiSdqi4l4NKJHRLNG0tzChUqOTFZBPIUBouHeNNaG6PR8G84= X-Received: by 10.36.73.144 with SMTP id e16mr1816149itd.90.1509128549641; Fri, 27 Oct 2017 11:22:29 -0700 (PDT) MIME-Version: 1.0 Received: by 10.2.74.18 with HTTP; Fri, 27 Oct 2017 11:22:29 -0700 (PDT) From: Uros Bizjak Date: Fri, 27 Oct 2017 18:30:00 -0000 Message-ID: Subject: [PATCH, i386]: Fix PR 82692, Ordered comparisons used for unordered built-ins To: "gcc-patches@gcc.gnu.org" Cc: Segher Boessenkool , "Joseph S. Myers" , "H. J. Lu" Content-Type: multipart/mixed; boundary="001a11448bb6206b82055c8b5fcb" X-SW-Source: 2017-10/txt/msg02113.txt.bz2 --001a11448bb6206b82055c8b5fcb Content-Type: text/plain; charset="UTF-8" Content-length: 2549 Hello! As discussed in the PR, different modes of a FP compare RTX are not strong enough to survive through RTL optimization passes. Attached testcase was miscompiled due to combine changing the mode of FP compare through SELECT_CC_MODE. The solution, implemented in the attached patch, is to drop CCFPUmode (which was used to distinguish unordered and ordered compares) and use UNSPEC_NOTRAP unspec wrappers around compare RTXes for unordered comparisons. 2017-10-27 Uros Bizjak PR target/82692 * config/i386/i386-modes.def (CCFPU): Remove definition. * config/i386/i386.c (put_condition_mode): Remove CCFPU mode handling. (ix86_cc_modes_compatible): Ditto. (ix86_expand_carry_flag_compare): Ditto. (ix86_expand_int_movcc): Ditto. (ix86_expand_int_addcc): Ditto. (ix86_reverse_condition): Ditto. (ix86_unordered_fp_compare): Rename from ix86_fp_compare_mode. Return true/false for unordered/ordered fp comparisons. (ix86_cc_mode): Always return CCFPmode for float mode comparisons. (ix86_prepare_fp_compare_args): Update for rename. (ix86_expand_fp_compare): Update for rename. Generate unordered compare RTXes wrapped with UNSPEC_NOTRAP unspec. (ix86_expand_sse_compare_and_jump): Ditto. * config/i386/predicates.md (fcmov_comparison_operator): Remove CCFPU mode handling. (ix86_comparison_operator): Ditto. (ix86_carry_flag_operator): Ditto. * config/i386/i386.md (UNSPEC_NOTRAP): New unspec. (*cmpu_i387): Wrap compare RTX with UNSPEC_NOTRAP unspec. (*cmpu_cc_i387): Ditto. (FPCMP): Remove mode iterator. (unord): Remove mode attribute. (unord_subst): New define_subst transformation (unord): New define_subst attribute. (unordered): Ditto. (*cmpi): Rewrite using unord_subst transformation. (*cmpixf_i387): Ditto. * config/i386/sse.md (_comi): Merge from _comi and _ucomi using unord_subst transformation. * config/i386/subst.md (SUBST_A): Remove CCFP and CCFPU modes. (round_saeonly): Also handle CCFP mode. * reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_NOTRAP unspec. Remove UNSPEC_SAHF unspec handling. testsuite/ChangeLog: 2017-10-27 Uros Bizjak PR target/82692 * gcc.dg/torture/pr82692.c: New test. Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Committed to mainline SVN. Uros. --001a11448bb6206b82055c8b5fcb Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j9a863vx0 Content-length: 25206 SW5kZXg6IGNvbmZpZy9pMzg2L2kzODYtbW9kZXMuZGVmCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGNvbmZpZy9pMzg2L2kzODYtbW9kZXMuZGVmCShy ZXZpc2lvbiAyNTQxMTEpCisrKyBjb25maWcvaTM4Ni9pMzg2LW1vZGVzLmRl Zgkod29ya2luZyBjb3B5KQpAQCAtNzIsOCArNzIsOCBAQCBDQ19NT0RFIChD Q08pOwogQ0NfTU9ERSAoQ0NQKTsKIENDX01PREUgKENDUyk7CiBDQ19NT0RF IChDQ1opOworCiBDQ19NT0RFIChDQ0ZQKTsKLUNDX01PREUgKENDRlBVKTsK IAogLyogVmVjdG9yIG1vZGVzLiAgTm90ZSB0aGF0IFZFQ19DT05DQVQgcGF0 dGVybnMgcmVxdWlyZSB2ZWN0b3IKICAgIHNpemVzIHR3aWNlIGFzIGJpZyBh cyBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZS4gICovCkluZGV4OiBjb25maWcv aTM4Ni9pMzg2LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmln L2kzODYvaTM4Ni5jCShyZXZpc2lvbiAyNTQxMTEpCisrKyBjb25maWcvaTM4 Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkKQEAgLTE2OTMwLDcgKzE2OTMwLDcg QEAgcHV0X2NvbmRpdGlvbl9jb2RlIChlbnVtIHJ0eF9jb2RlIGNvZGUsIG1h Y2hpbmVfbW8KIHsKICAgY29uc3QgY2hhciAqc3VmZml4OwogCi0gIGlmICht b2RlID09IENDRlBtb2RlIHx8IG1vZGUgPT0gQ0NGUFVtb2RlKQorICBpZiAo bW9kZSA9PSBDQ0ZQbW9kZSkKICAgICB7CiAgICAgICBjb2RlID0gaXg4Nl9m cF9jb21wYXJlX2NvZGVfdG9faW50ZWdlciAoY29kZSk7CiAgICAgICBtb2Rl ID0gQ0Ntb2RlOwpAQCAtMjE3MDksMTQgKzIxNzA5LDEzIEBAIGl4ODZfZXhw YW5kX2ludF9jb21wYXJlIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBvCiAg IHJldHVybiBnZW5fcnR4X2ZtdF9lZSAoY29kZSwgVk9JRG1vZGUsIGZsYWdz LCBjb25zdDBfcnR4KTsKIH0KIAotLyogRmlndXJlIG91dCB3aGV0aGVyIHRv IHVzZSBvcmRlcmVkIG9yIHVub3JkZXJlZCBmcCBjb21wYXJpc29ucy4KLSAg IFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbW9kZSB0byB1c2UuICAqLworLyog RmlndXJlIG91dCB3aGV0aGVyIHRvIHVzZSB1bm9yZGVyZWQgZnAgY29tcGFy aXNvbnMuICAqLwogCi1tYWNoaW5lX21vZGUKLWl4ODZfZnBfY29tcGFyZV9t b2RlIChlbnVtIHJ0eF9jb2RlIGNvZGUpCitzdGF0aWMgYm9vbAoraXg4Nl91 bm9yZGVyZWRfZnBfY29tcGFyZSAoZW51bSBydHhfY29kZSBjb2RlKQogewog ICBpZiAoIVRBUkdFVF9JRUVFX0ZQKQotICAgIHJldHVybiBDQ0ZQbW9kZTsK KyAgICByZXR1cm4gZmFsc2U7CiAKICAgc3dpdGNoIChjb2RlKQogICAgIHsK QEAgLTIxNzI0LDcgKzIxNzIzLDcgQEAgaXg4Nl9leHBhbmRfaW50X2NvbXBh cmUgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IG8KICAgICBjYXNlIEdFOgog ICAgIGNhc2UgTFQ6CiAgICAgY2FzZSBMRToKLSAgICAgIHJldHVybiBDQ0ZQ bW9kZTsKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgRVE6CiAg ICAgY2FzZSBORToKQEAgLTIxNzM3LDcgKzIxNzM2LDcgQEAgaXg4Nl9leHBh bmRfaW50X2NvbXBhcmUgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IG8KICAg ICBjYXNlIFVOR1Q6CiAgICAgY2FzZSBVTkdFOgogICAgIGNhc2UgVU5FUToK LSAgICAgIHJldHVybiBDQ0ZQVW1vZGU7CisgICAgICByZXR1cm4gdHJ1ZTsK IAogICAgIGRlZmF1bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CkBA IC0yMTc1Miw3ICsyMTc1MSw3IEBAIGl4ODZfY2NfbW9kZSAoZW51bSBydHhf Y29kZSBjb2RlLCBydHggb3AwLCBydHggb3AxCiAgIGlmIChTQ0FMQVJfRkxP QVRfTU9ERV9QIChtb2RlKSkKICAgICB7CiAgICAgICBnY2NfYXNzZXJ0ICgh REVDSU1BTF9GTE9BVF9NT0RFX1AgKG1vZGUpKTsKLSAgICAgIHJldHVybiBp eDg2X2ZwX2NvbXBhcmVfbW9kZSAoY29kZSk7CisgICAgICByZXR1cm4gQ0NG UG1vZGU7CiAgICAgfQogCiAgIHN3aXRjaCAoY29kZSkKQEAgLTIxODc0LDcg KzIxODczLDYgQEAgaXg4Nl9jY19tb2Rlc19jb21wYXRpYmxlIChtYWNoaW5l X21vZGUgbTEsIG1hY2hpbmUKIAl9CiAKICAgICBjYXNlIEVfQ0NGUG1vZGU6 Ci0gICAgY2FzZSBFX0NDRlBVbW9kZToKICAgICAgIC8qIFRoZXNlIGFyZSBv bmx5IGNvbXBhdGlibGUgd2l0aCB0aGVtc2VsdmVzLCB3aGljaCB3ZSBhbHJl YWR5CiAJIGNoZWNrZWQgYWJvdmUuICAqLwogICAgICAgcmV0dXJuIFZPSURt b2RlOwpAQCAtMjE5NzgsNyArMjE5NzYsNyBAQCBpeDg2X2ZwX2NvbXBhcmlz b25fc3RyYXRlZ3kgKGVudW0gcnR4X2NvZGUpCiBzdGF0aWMgZW51bSBydHhf Y29kZQogaXg4Nl9wcmVwYXJlX2ZwX2NvbXBhcmVfYXJncyAoZW51bSBydHhf Y29kZSBjb2RlLCBydHggKnBvcDAsIHJ0eCAqcG9wMSkKIHsKLSAgbWFjaGlu ZV9tb2RlIGZwY21wX21vZGUgPSBpeDg2X2ZwX2NvbXBhcmVfbW9kZSAoY29k ZSk7CisgIGJvb2wgdW5vcmRlcmVkX2NvbXBhcmUgPSBpeDg2X3Vub3JkZXJl ZF9mcF9jb21wYXJlIChjb2RlKTsKICAgcnR4IG9wMCA9ICpwb3AwLCBvcDEg PSAqcG9wMTsKICAgbWFjaGluZV9tb2RlIG9wX21vZGUgPSBHRVRfTU9ERSAo b3AwKTsKICAgYm9vbCBpc19zc2UgPSBUQVJHRVRfU1NFX01BVEggJiYgU1NF X0ZMT0FUX01PREVfUCAob3BfbW9kZSk7CkBAIC0yMTk5MCw3ICsyMTk4OCw3 IEBAIGl4ODZfcHJlcGFyZV9mcF9jb21wYXJlX2FyZ3MgKGVudW0gcnR4X2Nv ZGUgY29kZSwKICAgICAgZmxvYXRpbmcgcG9pbnQuICAqLwogCiAgIGlmICgh aXNfc3NlCi0gICAgICAmJiAoZnBjbXBfbW9kZSA9PSBDQ0ZQVW1vZGUKKyAg ICAgICYmICh1bm9yZGVyZWRfY29tcGFyZQogCSAgfHwgKG9wX21vZGUgPT0g WEZtb2RlCiAJICAgICAgJiYgISAoc3RhbmRhcmRfODAzODdfY29uc3RhbnRf cCAob3AwKSA9PSAxCiAJCSAgICB8fCBzdGFuZGFyZF84MDM4N19jb25zdGFu dF9wIChvcDEpID09IDEpCkBAIC0yMjA4NywxMCArMjIwODUsMTAgQEAgaXg4 Nl9mcF9jb21wYXJlX2NvZGVfdG9faW50ZWdlciAoZW51bSBydHhfY29kZSBj b2QKIHN0YXRpYyBydHgKIGl4ODZfZXhwYW5kX2ZwX2NvbXBhcmUgKGVudW0g cnR4X2NvZGUgY29kZSwgcnR4IG9wMCwgcnR4IG9wMSwgcnR4IHNjcmF0Y2gp CiB7Ci0gIG1hY2hpbmVfbW9kZSBmcGNtcF9tb2RlLCBpbnRjbXBfbW9kZTsK KyAgYm9vbCB1bm9yZGVyZWRfY29tcGFyZSA9IGl4ODZfdW5vcmRlcmVkX2Zw X2NvbXBhcmUgKGNvZGUpOworICBtYWNoaW5lX21vZGUgaW50Y21wX21vZGU7 CiAgIHJ0eCB0bXAsIHRtcDI7CiAKLSAgZnBjbXBfbW9kZSA9IGl4ODZfZnBf Y29tcGFyZV9tb2RlIChjb2RlKTsKICAgY29kZSA9IGl4ODZfcHJlcGFyZV9m cF9jb21wYXJlX2FyZ3MgKGNvZGUsICZvcDAsICZvcDEpOwogCiAgIC8qIERv IGZjb21pL3NhaGYgYmFzZWQgdGVzdCB3aGVuIHByb2ZpdGFibGUuICAqLwpA QCAtMjIwOTcsMTcgKzIyMDk1LDE5IEBAIGl4ODZfZXhwYW5kX2ZwX2NvbXBh cmUgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IG9wCiAgIHN3aXRjaCAoaXg4 Nl9mcF9jb21wYXJpc29uX3N0cmF0ZWd5IChjb2RlKSkKICAgICB7CiAgICAg Y2FzZSBJWDg2X0ZQQ01QX0NPTUk6Ci0gICAgICBpbnRjbXBfbW9kZSA9IGZw Y21wX21vZGU7Ci0gICAgICB0bXAgPSBnZW5fcnR4X0NPTVBBUkUgKGZwY21w X21vZGUsIG9wMCwgb3AxKTsKLSAgICAgIHRtcCA9IGdlbl9ydHhfU0VUIChn ZW5fcnR4X1JFRyAoZnBjbXBfbW9kZSwgRkxBR1NfUkVHKSwgdG1wKTsKLSAg ICAgIGVtaXRfaW5zbiAodG1wKTsKKyAgICAgIGludGNtcF9tb2RlID0gQ0NG UG1vZGU7CisgICAgICB0bXAgPSBnZW5fcnR4X0NPTVBBUkUgKENDRlBtb2Rl LCBvcDAsIG9wMSk7CisgICAgICBpZiAodW5vcmRlcmVkX2NvbXBhcmUpCisJ dG1wID0gZ2VuX3J0eF9VTlNQRUMgKENDRlBtb2RlLCBnZW5fcnR2ZWMgKDEs IHRtcCksIFVOU1BFQ19OT1RSQVApOworICAgICAgZW1pdF9pbnNuIChnZW5f cnR4X1NFVCAoZ2VuX3J0eF9SRUcgKENDRlBtb2RlLCBGTEFHU19SRUcpLCB0 bXApKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJWDg2X0ZQQ01QX1NB SEY6Ci0gICAgICBpbnRjbXBfbW9kZSA9IGZwY21wX21vZGU7Ci0gICAgICB0 bXAgPSBnZW5fcnR4X0NPTVBBUkUgKGZwY21wX21vZGUsIG9wMCwgb3AxKTsK LSAgICAgIHRtcCA9IGdlbl9ydHhfU0VUIChnZW5fcnR4X1JFRyAoZnBjbXBf bW9kZSwgRkxBR1NfUkVHKSwgdG1wKTsKLQorICAgICAgaW50Y21wX21vZGUg PSBDQ0ZQbW9kZTsKKyAgICAgIHRtcCA9IGdlbl9ydHhfQ09NUEFSRSAoQ0NG UG1vZGUsIG9wMCwgb3AxKTsKKyAgICAgIGlmICh1bm9yZGVyZWRfY29tcGFy ZSkKKwl0bXAgPSBnZW5fcnR4X1VOU1BFQyAoQ0NGUG1vZGUsIGdlbl9ydHZl YyAoMSwgdG1wKSwgVU5TUEVDX05PVFJBUCk7CisgICAgICB0bXAgPSBnZW5f cnR4X1NFVCAoZ2VuX3J0eF9SRUcgKENDRlBtb2RlLCBGTEFHU19SRUcpLCB0 bXApOwogICAgICAgaWYgKCFzY3JhdGNoKQogCXNjcmF0Y2ggPSBnZW5fcmVn X3J0eCAoSEltb2RlKTsKICAgICAgIHRtcDIgPSBnZW5fcnR4X0NMT0JCRVIg KFZPSURtb2RlLCBzY3JhdGNoKTsKQEAgLTIyMTE2LDExICsyMjExNiwxMyBA QCBpeDg2X2V4cGFuZF9mcF9jb21wYXJlIChlbnVtIHJ0eF9jb2RlIGNvZGUs IHJ0eCBvcAogCiAgICAgY2FzZSBJWDg2X0ZQQ01QX0FSSVRIOgogICAgICAg LyogU2FkbmVzcyB3cnQgcmVnLXN0YWNrIHBvcHMga2lsbGluZyBmcHNyIC0t IGdvdHRhIGdldCBmbnN0c3cgZmlyc3QuICAqLwotICAgICAgdG1wID0gZ2Vu X3J0eF9DT01QQVJFIChmcGNtcF9tb2RlLCBvcDAsIG9wMSk7Ci0gICAgICB0 bXAyID0gZ2VuX3J0eF9VTlNQRUMgKEhJbW9kZSwgZ2VuX3J0dmVjICgxLCB0 bXApLCBVTlNQRUNfRk5TVFNXKTsKKyAgICAgIHRtcCA9IGdlbl9ydHhfQ09N UEFSRSAoQ0NGUG1vZGUsIG9wMCwgb3AxKTsKKyAgICAgIGlmICh1bm9yZGVy ZWRfY29tcGFyZSkKKwl0bXAgPSBnZW5fcnR4X1VOU1BFQyAoQ0NGUG1vZGUs IGdlbl9ydHZlYyAoMSwgdG1wKSwgVU5TUEVDX05PVFJBUCk7CisgICAgICB0 bXAgPSBnZW5fcnR4X1VOU1BFQyAoSEltb2RlLCBnZW5fcnR2ZWMgKDEsIHRt cCksIFVOU1BFQ19GTlNUU1cpOwogICAgICAgaWYgKCFzY3JhdGNoKQogCXNj cmF0Y2ggPSBnZW5fcmVnX3J0eCAoSEltb2RlKTsKLSAgICAgIGVtaXRfaW5z biAoZ2VuX3J0eF9TRVQgKHNjcmF0Y2gsIHRtcDIpKTsKKyAgICAgIGVtaXRf aW5zbiAoZ2VuX3J0eF9TRVQgKHNjcmF0Y2gsIHRtcCkpOwogCiAgICAgICAv KiBJbiB0aGUgdW5vcmRlcmVkIGNhc2UsIHdlIGhhdmUgdG8gY2hlY2sgQzIg Zm9yIE5hTidzLCB3aGljaAogCSBkb2Vzbid0IGhhcHBlbiB0byB3b3JrIG91 dCB0byBhbnl0aGluZyBuaWNlIGNvbWJpbmF0aW9uLXdpc2UuCkBAIC0yMjU2 Miw4ICsyMjU2NCw3IEBAIGl4ODZfZXhwYW5kX2NhcnJ5X2ZsYWdfY29tcGFy ZSAoZW51bSBydHhfY29kZSBjb2RlCiAgICAgICBjb21wYXJlX3NlcSA9IGdl dF9pbnNucyAoKTsKICAgICAgIGVuZF9zZXF1ZW5jZSAoKTsKIAotICAgICAg aWYgKEdFVF9NT0RFIChYRVhQIChjb21wYXJlX29wLCAwKSkgPT0gQ0NGUG1v ZGUKLQkgIHx8IEdFVF9NT0RFIChYRVhQIChjb21wYXJlX29wLCAwKSkgPT0g Q0NGUFVtb2RlKQorICAgICAgaWYgKEdFVF9NT0RFIChYRVhQIChjb21wYXJl X29wLCAwKSkgPT0gQ0NGUG1vZGUpCiAgICAgICAgIGNvZGUgPSBpeDg2X2Zw X2NvbXBhcmVfY29kZV90b19pbnRlZ2VyIChHRVRfQ09ERSAoY29tcGFyZV9v cCkpOwogICAgICAgZWxzZQogCWNvZGUgPSBHRVRfQ09ERSAoY29tcGFyZV9v cCk7CkBAIC0yMjcwMyw4ICsyMjcwNCw3IEBAIGl4ODZfZXhwYW5kX2ludF9t b3ZjYyAocnR4IG9wZXJhbmRzW10pCiAKIAkgICAgICBmbGFncyA9IFhFWFAg KGNvbXBhcmVfb3AsIDApOwogCi0JICAgICAgaWYgKEdFVF9NT0RFIChmbGFn cykgPT0gQ0NGUG1vZGUKLQkJICB8fCBHRVRfTU9ERSAoZmxhZ3MpID09IEND RlBVbW9kZSkKKwkgICAgICBpZiAoR0VUX01PREUgKGZsYWdzKSA9PSBDQ0ZQ bW9kZSkKIAkJewogCQkgIGZwY21wID0gdHJ1ZTsKIAkJICBjb21wYXJlX2Nv ZGUKQEAgLTI0NzQ0LDggKzI0NzQ0LDcgQEAgaXg4Nl9leHBhbmRfaW50X2Fk ZGNjIChydHggb3BlcmFuZHNbXSkKIAogICBmbGFncyA9IFhFWFAgKGNvbXBh cmVfb3AsIDApOwogCi0gIGlmIChHRVRfTU9ERSAoZmxhZ3MpID09IENDRlBt b2RlCi0gICAgICB8fCBHRVRfTU9ERSAoZmxhZ3MpID09IENDRlBVbW9kZSkK KyAgaWYgKEdFVF9NT0RFIChmbGFncykgPT0gQ0NGUG1vZGUpCiAgICAgewog ICAgICAgZnBjbXAgPSB0cnVlOwogICAgICAgY29kZSA9IGl4ODZfZnBfY29t cGFyZV9jb2RlX3RvX2ludGVnZXIgKGNvZGUpOwpAQCAtNDMyMDgsNyArNDMy MDcsNyBAQCBpeDg2X2VuY29kZV9zZWN0aW9uX2luZm8gKHRyZWUgZGVjbCwg cnR4IHJ0bCwgaW50CiBlbnVtIHJ0eF9jb2RlCiBpeDg2X3JldmVyc2VfY29u ZGl0aW9uIChlbnVtIHJ0eF9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2Rl KQogewotICByZXR1cm4gKG1vZGUgIT0gQ0NGUG1vZGUgJiYgbW9kZSAhPSBD Q0ZQVW1vZGUKKyAgcmV0dXJuIChtb2RlICE9IENDRlBtb2RlCiAJICA/IHJl dmVyc2VfY29uZGl0aW9uIChjb2RlKQogCSAgOiByZXZlcnNlX2NvbmRpdGlv bl9tYXliZV91bm9yZGVyZWQgKGNvZGUpKTsKIH0KQEAgLTQzODIzLDE3ICs0 MzgyMiwyMCBAQCBzdGF0aWMgcnR4X2NvZGVfbGFiZWwgKgogaXg4Nl9leHBh bmRfc3NlX2NvbXBhcmVfYW5kX2p1bXAgKGVudW0gcnR4X2NvZGUgY29kZSwg cnR4IG9wMCwgcnR4IG9wMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIHN3YXBfb3BlcmFuZHMpCiB7Ci0gIG1hY2hpbmVfbW9k ZSBmcGNtcF9tb2RlID0gaXg4Nl9mcF9jb21wYXJlX21vZGUgKGNvZGUpOwor ICBib29sIHVub3JkZXJlZF9jb21wYXJlID0gaXg4Nl91bm9yZGVyZWRfZnBf Y29tcGFyZSAoY29kZSk7CiAgIHJ0eF9jb2RlX2xhYmVsICpsYWJlbDsKLSAg cnR4IHRtcDsKKyAgcnR4IHRtcCwgcmVnOwogCiAgIGlmIChzd2FwX29wZXJh bmRzKQogICAgIHN0ZDo6c3dhcCAob3AwLCBvcDEpOwogCiAgIGxhYmVsID0g Z2VuX2xhYmVsX3J0eCAoKTsKLSAgdG1wID0gZ2VuX3J0eF9SRUcgKGZwY21w X21vZGUsIEZMQUdTX1JFRyk7Ci0gIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQg KHRtcCwgZ2VuX3J0eF9DT01QQVJFIChmcGNtcF9tb2RlLCBvcDAsIG9wMSkp KTsKLSAgdG1wID0gZ2VuX3J0eF9mbXRfZWUgKGNvZGUsIFZPSURtb2RlLCB0 bXAsIGNvbnN0MF9ydHgpOworICB0bXAgPSBnZW5fcnR4X0NPTVBBUkUgKEND RlBtb2RlLCBvcDAsIG9wMSk7CisgIGlmICh1bm9yZGVyZWRfY29tcGFyZSkK KyAgICB0bXAgPSBnZW5fcnR4X1VOU1BFQyAoQ0NGUG1vZGUsIGdlbl9ydHZl YyAoMSwgdG1wKSwgVU5TUEVDX05PVFJBUCk7CisgIHJlZyA9IGdlbl9ydHhf UkVHIChDQ0ZQbW9kZSwgRkxBR1NfUkVHKTsKKyAgZW1pdF9pbnNuIChnZW5f cnR4X1NFVCAocmVnLCB0bXApKTsKKyAgdG1wID0gZ2VuX3J0eF9mbXRfZWUg KGNvZGUsIFZPSURtb2RlLCByZWcsIGNvbnN0MF9ydHgpOwogICB0bXAgPSBn ZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsIHRtcCwKIAkJCSAgICAg IGdlbl9ydHhfTEFCRUxfUkVGIChWT0lEbW9kZSwgbGFiZWwpLCBwY19ydHgp OwogICB0bXAgPSBlbWl0X2p1bXBfaW5zbiAoZ2VuX3J0eF9TRVQgKHBjX3J0 eCwgdG1wKSk7CkluZGV4OiBjb25maWcvaTM4Ni9pMzg2Lm1kCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGNvbmZpZy9pMzg2L2kzODYubWQJKHJldmlz aW9uIDI1NDExMSkKKysrIGNvbmZpZy9pMzg2L2kzODYubWQJKHdvcmtpbmcg Y29weSkKQEAgLTk5LDYgKzk5LDcgQEAKICAgVU5TUEVDX1NDQVMKICAgVU5T UEVDX0ZOU1RTVwogICBVTlNQRUNfU0FIRgorICBVTlNQRUNfTk9UUkFQCiAg IFVOU1BFQ19QQVJJVFkKICAgVU5TUEVDX0ZTVENXCiAgIFVOU1BFQ19GTERD VwpAQCAtMTQ3OCw5ICsxNDc5LDYgQEAKIAogOzsgRlAgY29tcGFyZXMsIHN0 ZXAgMToKIDs7IFNldCB0aGUgRlAgY29uZGl0aW9uIGNvZGVzLgotOzsKLTs7 IENDRlBtb2RlCWNvbXBhcmUgd2l0aCBleGNlcHRpb25zCi07OyBDQ0ZQVW1v ZGUJY29tcGFyZSB3aXRoIG5vIGV4Y2VwdGlvbnMKIAogOzsgV2UgbWF5IG5v dCB1c2UgIiMiIHRvIHNwbGl0IGFuZCBlbWl0IHRoZXNlLCBzaW5jZSB0aGUg UkVHX0RFQUQgbm90ZXMKIDs7IHVzZWQgdG8gbWFuYWdlIHRoZSByZWcgc3Rh Y2sgcG9wcGluZyB3b3VsZCBub3QgYmUgcHJlc2VydmVkLgpAQCAtMTU4Nyw5 ICsxNTg1LDExIEBACiAoZGVmaW5lX2luc24gIipjbXB1PG1vZGU+X2kzODci CiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhJIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9YSIpCiAJKHVuc3BlYzpISQotCSAgWyhjb21wYXJlOkNDRlBVCi0J ICAgICAobWF0Y2hfb3BlcmFuZDpYODdNT0RFRiAxICJyZWdpc3Rlcl9vcGVy YW5kIiAiZiIpCi0JICAgICAobWF0Y2hfb3BlcmFuZDpYODdNT0RFRiAyICJy ZWdpc3Rlcl9vcGVyYW5kIiAiZiIpKV0KKwkgIFsodW5zcGVjOkNDRlAKKwkg ICAgIFsoY29tcGFyZTpDQ0ZQCisJCShtYXRjaF9vcGVyYW5kOlg4N01PREVG IDEgInJlZ2lzdGVyX29wZXJhbmQiICJmIikKKwkJKG1hdGNoX29wZXJhbmQ6 WDg3TU9ERUYgMiAicmVnaXN0ZXJfb3BlcmFuZCIgImYiKSldCisJICAgICBV TlNQRUNfTk9UUkFQKV0KIAkgIFVOU1BFQ19GTlNUU1cpKV0KICAgIlRBUkdF VF84MDM4NyIKICAgIiogcmV0dXJuIG91dHB1dF9mcF9jb21wYXJlIChpbnNu LCBvcGVyYW5kcywgZmFsc2UsIHRydWUpOyIKQEAgLTE1OTgsMTAgKzE1OTgs MTIgQEAKICAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKIAogKGRl ZmluZV9pbnNuX2FuZF9zcGxpdCAiKmNtcHU8bW9kZT5fY2NfaTM4NyIKLSAg WyhzZXQgKHJlZzpDQ0ZQVSBGTEFHU19SRUcpCi0JKGNvbXBhcmU6Q0NGUFUK LQkgIChtYXRjaF9vcGVyYW5kOlg4N01PREVGIDEgInJlZ2lzdGVyX29wZXJh bmQiICJmIikKLQkgIChtYXRjaF9vcGVyYW5kOlg4N01PREVGIDIgInJlZ2lz dGVyX29wZXJhbmQiICJmIikpKQorICBbKHNldCAocmVnOkNDRlAgRkxBR1Nf UkVHKQorCSh1bnNwZWM6Q0NGUAorCSAgWyhjb21wYXJlOkNDRlAKKwkgICAg IChtYXRjaF9vcGVyYW5kOlg4N01PREVGIDEgInJlZ2lzdGVyX29wZXJhbmQi ICJmIikKKwkgICAgIChtYXRjaF9vcGVyYW5kOlg4N01PREVGIDIgInJlZ2lz dGVyX29wZXJhbmQiICJmIikpXQorCSAgVU5TUEVDX05PVFJBUCkpCiAgICAo Y2xvYmJlciAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPWEiKSldCiAgICJUQVJHRVRfODAzODcgJiYgVEFSR0VUX1NBSEYgJiYg IVRBUkdFVF9DTU9WRSIKICAgIiMiCkBAIC0xNjA4LDggKzE2MTAsMTAgQEAK ICAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCiAgIFsoc2V0IChtYXRjaF9kdXAg MCkKIAkodW5zcGVjOkhJCi0JICBbKGNvbXBhcmU6Q0NGUFUgKG1hdGNoX2R1 cCAxKShtYXRjaF9kdXAgMikpXQotCVVOU1BFQ19GTlNUU1cpKQorCSAgWyh1 bnNwZWM6Q0NGUAorCSAgICAgWyhjb21wYXJlOkNDRlAgKG1hdGNoX2R1cCAx KShtYXRjaF9kdXAgMikpXQorCSAgICAgVU5TUEVDX05PVFJBUCldCisJICBV TlNQRUNfRk5TVFNXKSkKICAgIChzZXQgKHJlZzpDQyBGTEFHU19SRUcpCiAJ KHVuc3BlYzpDQyBbKG1hdGNoX2R1cCAwKV0gVU5TUEVDX1NBSEYpKV0KICAg IiIKQEAgLTE2OTcsMjAgKzE3MDEsMjggQEAKIDs7IFBlbnRpdW0gUHJvIGNh biBkbyBzdGVwcyAxIHRocm91Z2ggMyBpbiBvbmUgZ28uCiA7OyAodGhlc2Ug aW5zdHJ1Y3Rpb25zIHNldCBmbGFncyBkaXJlY3RseSkKIAotKGRlZmluZV9t b2RlX2l0ZXJhdG9yIEZQQ01QIFtDQ0ZQIENDRlBVXSkKLShkZWZpbmVfbW9k ZV9hdHRyIHVub3JkIFsoQ0NGUCAiIikgKENDRlBVICJ1IildKQorKGRlZmlu ZV9zdWJzdF9hdHRyICJ1bm9yZCIgInVub3JkX3N1YnN0IiAiIiAidSIpCiso ZGVmaW5lX3N1YnN0X2F0dHIgInVub3JkZXJlZCIgInVub3JkX3N1YnN0IiAi ZmFsc2UiICJ0cnVlIikKIAotKGRlZmluZV9pbnNuICIqY21waTxGUENNUDp1 bm9yZD48TU9ERUY6bW9kZT4iCi0gIFsoc2V0IChyZWc6RlBDTVAgRkxBR1Nf UkVHKQotCShjb21wYXJlOkZQQ01QCisoZGVmaW5lX3N1YnN0ICJ1bm9yZF9z dWJzdCIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q0NGUCAwKQorICAgICAg ICAobWF0Y2hfb3BlcmFuZDpDQ0ZQIDEpKV0KKyAgIiIKKyAgWyhzZXQgKG1h dGNoX2R1cCAwKQorICAgICAgICAodW5zcGVjOkNDRlAKKwkgIFsobWF0Y2hf ZHVwIDEpXQorCSAgVU5TUEVDX05PVFJBUCkpXSkKKworKGRlZmluZV9pbnNu ICIqY21waTx1bm9yZD48TU9ERUY6bW9kZT4iCisgIFsoc2V0IChyZWc6Q0NG UCBGTEFHU19SRUcpCisJKGNvbXBhcmU6Q0NGUAogCSAgKG1hdGNoX29wZXJh bmQ6TU9ERUYgMCAicmVnaXN0ZXJfb3BlcmFuZCIgImYsdiIpCiAJICAobWF0 Y2hfb3BlcmFuZDpNT0RFRiAxICJyZWdpc3Rlcl9zc2VtZW1fb3BlcmFuZCIg ImYsdm0iKSkpXQogICAiKFNTRV9GTE9BVF9NT0RFX1AgKDxNT0RFRjpNT0RF Pm1vZGUpICYmIFRBUkdFVF9TU0VfTUFUSCkKICAgIHx8IChUQVJHRVRfODAz ODcgJiYgVEFSR0VUX0NNT1ZFKSIKICAgIkAKLSAgICogcmV0dXJuIG91dHB1 dF9mcF9jb21wYXJlIChpbnNuLCBvcGVyYW5kcywgdHJ1ZSwgXAotCQkJICAg ICAgIDxGUENNUDpNT0RFPm1vZGUgPT0gQ0NGUFVtb2RlKTsKLSAgICV2PEZQ Q01QOnVub3JkPmNvbWk8TU9ERUY6c3NlbW9kZXN1ZmZpeD5cdHslMSwgJTB8 JTAsICUxfSIKKyAgICogcmV0dXJuIG91dHB1dF9mcF9jb21wYXJlIChpbnNu LCBvcGVyYW5kcywgdHJ1ZSwgPHVub3JkZXJlZD4pOworICAgJXY8dW5vcmQ+ Y29taTxNT0RFRjpzc2Vtb2Rlc3VmZml4Plx0eyUxLCAlMHwlMCwgJTF9Igog ICBbKHNldF9hdHRyICJ0eXBlIiAiZmNtcCxzc2Vjb21pIikKICAgIChzZXRf YXR0ciAicHJlZml4IiAib3JpZyxtYXliZV92ZXgiKQogICAgKHNldF9hdHRy ICJtb2RlIiAiPE1PREVGOk1PREU+IikKQEAgLTE3MzksMTMgKzE3NTEsMTIg QEAKIAkgKHN5bWJvbF9yZWYgImZhbHNlIikpKSldKQogCiAoZGVmaW5lX2lu c24gIipjbXBpPHVub3JkPnhmX2kzODciCi0gIFsoc2V0IChyZWc6RlBDTVAg RkxBR1NfUkVHKQotCShjb21wYXJlOkZQQ01QCisgIFsoc2V0IChyZWc6Q0NG UCBGTEFHU19SRUcpCisJKGNvbXBhcmU6Q0NGUAogCSAgKG1hdGNoX29wZXJh bmQ6WEYgMCAicmVnaXN0ZXJfb3BlcmFuZCIgImYiKQogCSAgKG1hdGNoX29w ZXJhbmQ6WEYgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImYiKSkpXQogICAiVEFS R0VUXzgwMzg3ICYmIFRBUkdFVF9DTU9WRSIKLSAgIiogcmV0dXJuIG91dHB1 dF9mcF9jb21wYXJlIChpbnNuLCBvcGVyYW5kcywgdHJ1ZSwKLQkJCSAgICAg ICA8TU9ERT5tb2RlID09IENDRlBVbW9kZSk7IgorICAiKiByZXR1cm4gb3V0 cHV0X2ZwX2NvbXBhcmUgKGluc24sIG9wZXJhbmRzLCB0cnVlLCA8dW5vcmRl cmVkPik7IgogICBbKHNldF9hdHRyICJ0eXBlIiAiZmNtcCIpCiAgICAoc2V0 X2F0dHIgIm1vZGUiICJYRiIpCiAgICAoc2V0X2F0dHIgImF0aGxvbl9kZWNv ZGUiICJ2ZWN0b3IiKQpJbmRleDogY29uZmlnL2kzODYvcHJlZGljYXRlcy5t ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWcvaTM4Ni9wcmVk aWNhdGVzLm1kCShyZXZpc2lvbiAyNTQxMTEpCisrKyBjb25maWcvaTM4Ni9w cmVkaWNhdGVzLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAxLDcgKzEzMDEs NyBAQAogICBtYWNoaW5lX21vZGUgaW5tb2RlID0gR0VUX01PREUgKFhFWFAg KG9wLCAwKSk7CiAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9DT0RFIChv cCk7CiAKLSAgaWYgKGlubW9kZSA9PSBDQ0ZQbW9kZSB8fCBpbm1vZGUgPT0g Q0NGUFVtb2RlKQorICBpZiAoaW5tb2RlID09IENDRlBtb2RlKQogICAgIHsK ICAgICAgIGlmICghaXg4Nl90cml2aWFsX2ZwX2NvbXBhcmlzb25fb3BlcmF0 b3IgKG9wLCBtb2RlKSkKIAlyZXR1cm4gZmFsc2U7CkBAIC0xMzExLDcgKzEz MTEsNyBAQAogICBzd2l0Y2ggKGNvZGUpCiAgICAgewogICAgIGNhc2UgTFRV OiBjYXNlIEdUVTogY2FzZSBMRVU6IGNhc2UgR0VVOgotICAgICAgaWYgKGlu bW9kZSA9PSBDQ21vZGUgfHwgaW5tb2RlID09IENDRlBtb2RlIHx8IGlubW9k ZSA9PSBDQ0ZQVW1vZGUKKyAgICAgIGlmIChpbm1vZGUgPT0gQ0Ntb2RlIHx8 IGlubW9kZSA9PSBDQ0ZQbW9kZQogCSAgfHwgaW5tb2RlID09IENDQ21vZGUp CiAJcmV0dXJuIHRydWU7CiAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzQ4 LDcgKzEzNDgsNyBAQAogICBtYWNoaW5lX21vZGUgaW5tb2RlID0gR0VUX01P REUgKFhFWFAgKG9wLCAwKSk7CiAgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdF VF9DT0RFIChvcCk7CiAKLSAgaWYgKGlubW9kZSA9PSBDQ0ZQbW9kZSB8fCBp bm1vZGUgPT0gQ0NGUFVtb2RlKQorICBpZiAoaW5tb2RlID09IENDRlBtb2Rl KQogICAgIHJldHVybiBpeDg2X3RyaXZpYWxfZnBfY29tcGFyaXNvbl9vcGVy YXRvciAob3AsIG1vZGUpOwogCiAgIHN3aXRjaCAoY29kZSkKQEAgLTEzOTEs NyArMTM5MSw3IEBACiAgIG1hY2hpbmVfbW9kZSBpbm1vZGUgPSBHRVRfTU9E RSAoWEVYUCAob3AsIDApKTsKICAgZW51bSBydHhfY29kZSBjb2RlID0gR0VU X0NPREUgKG9wKTsKIAotICBpZiAoaW5tb2RlID09IENDRlBtb2RlIHx8IGlu bW9kZSA9PSBDQ0ZQVW1vZGUpCisgIGlmIChpbm1vZGUgPT0gQ0NGUG1vZGUp CiAgICAgewogICAgICAgaWYgKCFpeDg2X3RyaXZpYWxfZnBfY29tcGFyaXNv bl9vcGVyYXRvciAob3AsIG1vZGUpKQogCXJldHVybiBmYWxzZTsKSW5kZXg6 IGNvbmZpZy9pMzg2L3NzZS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBjb25maWcvaTM4Ni9zc2UubWQJKHJldmlzaW9uIDI1NDExMSkKKysrIGNv bmZpZy9pMzg2L3NzZS5tZAkod29ya2luZyBjb3B5KQpAQCAtMjc1NSw3ICsy NzU1LDcgQEAKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAgICAo c2V0X2F0dHIgIm1vZGUiICI8c3NlaW5zbm1vZGU+IildKQogCi0oZGVmaW5l X2luc24gIjxzc2U+X2NvbWk8cm91bmRfc2Flb25seV9uYW1lPiIKKyhkZWZp bmVfaW5zbiAiPHNzZT5fPHVub3JkPmNvbWk8cm91bmRfc2Flb25seV9uYW1l PiIKICAgWyhzZXQgKHJlZzpDQ0ZQIEZMQUdTX1JFRykKIAkoY29tcGFyZTpD Q0ZQCiAJICAodmVjX3NlbGVjdDpNT0RFRgpAQCAtMjc2NSw3ICsyNzY1LDcg QEAKIAkgICAgKG1hdGNoX29wZXJhbmQ6PHNzZXZlY21vZGU+IDEgIjxyb3Vu ZF9zYWVvbmx5X25pbW1fc2NhbGFyX3ByZWRpY2F0ZT4iICI8cm91bmRfc2Fl b25seV9jb25zdHJhaW50PiIpCiAJICAgIChwYXJhbGxlbCBbKGNvbnN0X2lu dCAwKV0pKSkpXQogICAiU1NFX0ZMT0FUX01PREVfUCAoPE1PREU+bW9kZSki Ci0gICIldmNvbWk8c3NlbW9kZXN1ZmZpeD5cdHs8cm91bmRfc2Flb25seV9v cDI+JTEsICUwfCUwLCAlPGlwdHI+MTxyb3VuZF9zYWVvbmx5X29wMj59Igor ICAiJXY8dW5vcmQ+Y29taTxzc2Vtb2Rlc3VmZml4Plx0ezxyb3VuZF9zYWVv bmx5X29wMj4lMSwgJTB8JTAsICU8aXB0cj4xPHJvdW5kX3NhZW9ubHlfb3Ay Pn0iCiAgIFsoc2V0X2F0dHIgInR5cGUiICJzc2Vjb21pIikKICAgIChzZXRf YXR0ciAicHJlZml4IiAibWF5YmVfdmV4IikKICAgIChzZXRfYXR0ciAicHJl Zml4X3JlcCIgIjAiKQpAQCAtMjc3NSwyNiArMjc3NSw2IEBACiAJCSAgICAg IChjb25zdF9zdHJpbmcgIjAiKSkpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8 TU9ERT4iKV0pCiAKLShkZWZpbmVfaW5zbiAiPHNzZT5fdWNvbWk8cm91bmRf c2Flb25seV9uYW1lPiIKLSAgWyhzZXQgKHJlZzpDQ0ZQVSBGTEFHU19SRUcp Ci0JKGNvbXBhcmU6Q0NGUFUKLQkgICh2ZWNfc2VsZWN0Ok1PREVGCi0JICAg IChtYXRjaF9vcGVyYW5kOjxzc2V2ZWNtb2RlPiAwICJyZWdpc3Rlcl9vcGVy YW5kIiAidiIpCi0JICAgIChwYXJhbGxlbCBbKGNvbnN0X2ludCAwKV0pKQot CSAgKHZlY19zZWxlY3Q6TU9ERUYKLQkgICAgKG1hdGNoX29wZXJhbmQ6PHNz ZXZlY21vZGU+IDEgIjxyb3VuZF9zYWVvbmx5X25pbW1fc2NhbGFyX3ByZWRp Y2F0ZT4iICI8cm91bmRfc2Flb25seV9jb25zdHJhaW50PiIpCi0JICAgIChw YXJhbGxlbCBbKGNvbnN0X2ludCAwKV0pKSkpXQotICAiU1NFX0ZMT0FUX01P REVfUCAoPE1PREU+bW9kZSkiCi0gICIldnVjb21pPHNzZW1vZGVzdWZmaXg+ XHR7PHJvdW5kX3NhZW9ubHlfb3AyPiUxLCAlMHwlMCwgJTxpcHRyPjE8cm91 bmRfc2Flb25seV9vcDI+fSIKLSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWNv bWkiKQotICAgKHNldF9hdHRyICJwcmVmaXgiICJtYXliZV92ZXgiKQotICAg KHNldF9hdHRyICJwcmVmaXhfcmVwIiAiMCIpCi0gICAoc2V0IChhdHRyICJw cmVmaXhfZGF0YTE2IikKLQkoaWZfdGhlbl9lbHNlIChlcV9hdHRyICJtb2Rl IiAiREYiKQotCQkgICAgICAoY29uc3Rfc3RyaW5nICIxIikKLQkJICAgICAg KGNvbnN0X3N0cmluZyAiMCIpKSkKLSAgIChzZXRfYXR0ciAibW9kZSIgIjxN T0RFPiIpXSkKLQogKGRlZmluZV9leHBhbmQgInZlY19jbXA8bW9kZT48YXZ4 NTEyZm1hc2ttb2RlbG93ZXI+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDo8 YXZ4NTEyZm1hc2ttb2RlPiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkobWF0 Y2hfb3BlcmF0b3I6PGF2eDUxMmZtYXNrbW9kZT4gMSAiIgpJbmRleDogY29u ZmlnL2kzODYvc3Vic3QubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g Y29uZmlnL2kzODYvc3Vic3QubWQJKHJldmlzaW9uIDI1NDExMSkKKysrIGNv bmZpZy9pMzg2L3N1YnN0Lm1kCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICsz Nyw3IEBACiAgICBWOERJICBWNERJICBWMkRJCiAgICBWMTZTRiBWOFNGICBW NFNGCiAgICBWOERGICBWNERGICBWMkRGCi0gICBRSSBISSBTSSBESSBTRiBE RgotICAgQ0NGUCBDQ0ZQVV0pCisgICBRSSBISSBTSSBESSBTRiBERl0pCiAK IChkZWZpbmVfc3Vic3RfYXR0ciAibWFza19uYW1lIiAibWFzayIgIiIgIl9t YXNrIikKIChkZWZpbmVfc3Vic3RfYXR0ciAibWFza19hcHBsaWVkIiAibWFz ayIgImZhbHNlIiAidHJ1ZSIpCkBAIC0xODMsNiArMTgyLDE2IEBACiAJICBV TlNQRUNfRU1CRURERURfUk9VTkRJTkcpKQogXSkKIAorKGRlZmluZV9zdWJz dCAicm91bmRfc2Flb25seSIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q0NG UCAwKQorICAgICAgICAobWF0Y2hfb3BlcmFuZDpDQ0ZQIDEpKV0KKyAgIlRB UkdFVF9BVlg1MTJGIgorICBbKHNldCAobWF0Y2hfZHVwIDApCisJKHVuc3Bl YzpDQ0ZQIFsobWF0Y2hfZHVwIDEpCisJICAobWF0Y2hfb3BlcmFuZDpTSSAy ICJjb25zdDQ4X29wZXJhbmQiKV0KKwkgIFVOU1BFQ19FTUJFRERFRF9ST1VO RElORykpCitdKQorCiAoZGVmaW5lX3N1YnN0X2F0dHIgInJvdW5kX2V4cGFu ZF9uYW1lIiAicm91bmRfZXhwYW5kIiAiIiAiX3JvdW5kIikKIChkZWZpbmVf c3Vic3RfYXR0ciAicm91bmRfZXhwYW5kX25pbW1fcHJlZGljYXRlIiAicm91 bmRfZXhwYW5kIiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJyZWdpc3Rlcl9v cGVyYW5kIikKIChkZWZpbmVfc3Vic3RfYXR0ciAicm91bmRfZXhwYW5kX29w ZXJhbmQiICJyb3VuZF9leHBhbmQiICIiICIsIG9wZXJhbmRzWzVdIikKSW5k ZXg6IHJlZy1zdGFjay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl Zy1zdGFjay5jCShyZXZpc2lvbiAyNTQxMTEpCisrKyByZWctc3RhY2suYwko d29ya2luZyBjb3B5KQpAQCAtMTU2MCwxMiArMTU2MCw2IEBAIHN1YnN0X3N0 YWNrX3JlZ3NfcGF0IChydHhfaW5zbiAqaW5zbiwgc3RhY2tfcHRyIHJlCiAK IAlzd2l0Y2ggKEdFVF9DT0RFIChwYXRfc3JjKSkKIAkgIHsKLQkgIGNhc2Ug Q09NUEFSRToKLQkgICAgLyogYGZjb21pJyBpbnNuIGNhbid0IHBvcCB0d28g cmVncy4gICovCi0JICAgIGNvbXBhcmVfZm9yX3N0YWNrX3JlZyAoaW5zbiwg cmVnc3RhY2ssIHBhdF9zcmMsCi0JCQkJICAgUkVHTk8gKCpkZXN0KSAhPSBG TEFHU19SRUcpOwotCSAgICBicmVhazsKLQogCSAgY2FzZSBDQUxMOgogCSAg ICB7CiAJICAgICAgaW50IGNvdW50OwpAQCAtMTk2NiwxNSArMTk2MCw2IEBA IHN1YnN0X3N0YWNrX3JlZ3NfcGF0IChydHhfaW5zbiAqaW5zbiwgc3RhY2tf cHRyIHJlCiAJCXJlcGxhY2VfcmVnIChzcmMyLCBGSVJTVF9TVEFDS19SRUcg KyAxKTsKIAkJYnJlYWs7CiAKLQkgICAgICBjYXNlIFVOU1BFQ19TQUhGOgot CQkvKiAodW5zcGVjIFsodW5zcGVjIFsoY29tcGFyZSldIFVOU1BFQ19GTlNU U1cpXSBVTlNQRUNfU0FIRikKLQkJICAgVGhlIGNvbWJpbmF0aW9uIG1hdGNo ZXMgdGhlIFBQUk8gZmNvbWkgaW5zdHJ1Y3Rpb24uICAqLwotCi0JCXBhdF9z cmMgPSBYVkVDRVhQIChwYXRfc3JjLCAwLCAwKTsKLQkJZ2NjX2Fzc2VydCAo R0VUX0NPREUgKHBhdF9zcmMpID09IFVOU1BFQyk7Ci0JCWdjY19hc3NlcnQg KFhJTlQgKHBhdF9zcmMsIDEpID09IFVOU1BFQ19GTlNUU1cpOwotCQkvKiBG YWxsIHRocm91Z2guICAqLwotCiAJICAgICAgY2FzZSBVTlNQRUNfRk5TVFNX OgogCQkvKiBDb21iaW5lZCBmY29tcCtmbnN0c3cgZ2VuZXJhdGVkIGZvciBk b2luZyB3ZWxsIHdpdGgKIAkJICAgQ1NFLiAgV2hlbiBvcHRpbWl6aW5nIHRo aXMgd291bGQgaGF2ZSBiZWVuIGJyb2tlbgpAQCAtMTk4MSwxNiArMTk2Niwy OSBAQCBzdWJzdF9zdGFja19yZWdzX3BhdCAocnR4X2luc24gKmluc24sIHN0 YWNrX3B0ciByZQogCQkgICB1cCBiZWZvcmUgbm93LiAgKi8KIAogCQlwYXRf c3JjID0gWFZFQ0VYUCAocGF0X3NyYywgMCwgMCk7CisJCWlmIChHRVRfQ09E RSAocGF0X3NyYykgPT0gQ09NUEFSRSkKKwkJICBnb3RvIGRvX2NvbXBhcmU7 CisKKwkJLyogRmFsbCB0aHJvdWdoLiAgKi8KKworCSAgICAgIGNhc2UgVU5T UEVDX05PVFJBUDoKKworCQlwYXRfc3JjID0gWFZFQ0VYUCAocGF0X3NyYywg MCwgMCk7CiAJCWdjY19hc3NlcnQgKEdFVF9DT0RFIChwYXRfc3JjKSA9PSBD T01QQVJFKTsKKwkJZ290byBkb19jb21wYXJlOwogCi0JCWNvbXBhcmVfZm9y X3N0YWNrX3JlZyAoaW5zbiwgcmVnc3RhY2ssIHBhdF9zcmMsIHRydWUpOwot CQlicmVhazsKLQogCSAgICAgIGRlZmF1bHQ6CiAJCWdjY191bnJlYWNoYWJs ZSAoKTsKIAkgICAgICB9CiAJICAgIGJyZWFrOwogCisJICBjYXNlIENPTVBB UkU6CisJICBkb19jb21wYXJlOgorCSAgICAvKiBgZmNvbWknIGluc24gY2Fu J3QgcG9wIHR3byByZWdzLiAgKi8KKwkgICAgY29tcGFyZV9mb3Jfc3RhY2tf cmVnIChpbnNuLCByZWdzdGFjaywgcGF0X3NyYywKKwkJCQkgICBSRUdOTyAo KmRlc3QpICE9IEZMQUdTX1JFRyk7CisJICAgIGJyZWFrOworCiAJICBjYXNl IElGX1RIRU5fRUxTRToKIAkgICAgLyogVGhpcyBpbnNuIHJlcXVpcmVzIHRo ZSB0b3Agb2Ygc3RhY2sgdG8gYmUgdGhlIGRlc3RpbmF0aW9uLiAgKi8KIApJ bmRleDogdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNjkyLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjgyNjkyLmMJKG5vbmV4aXN0ZW50KQorKysgdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjgyNjkyLmMJKHdvcmtpbmcgY29weSkKQEAgLTAs MCArMSwyNSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRp b25zICItTzIiIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IGZlbnZfZXhjZXB0aW9ucyB9ICovCisKKyNpbmNsdWRlIDxmZW52Lmg+ CisKK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGV4 aXQgKGludCk7CisKK2RvdWJsZSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUs IG5vY2xvbmUpKQorZm9vIChkb3VibGUgeCkKK3sKKyAgaWYgKF9fYnVpbHRp bl9pc2xlc3NlcXVhbCAoeCwgMC4wKSB8fCBfX2J1aWx0aW5faXNncmVhdGVy ICh4LCAxLjApKQorICAgIHJldHVybiB4ICsgeDsKKyAgcmV0dXJuIHggKiB4 OworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHZvbGF0aWxlIGRvdWJs ZSB4ID0gZm9vIChfX2J1aWx0aW5fbmFuICgiIikpOworICBpZiAoZmV0ZXN0 ZXhjZXB0IChGRV9JTlZBTElEKSkKKyAgICBhYm9ydCAoKTsKKyAgZXhpdCAo MCk7Cit9Cg== --001a11448bb6206b82055c8b5fcb--