From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by sourceware.org (Postfix) with ESMTPS id 7F373385840C for ; Wed, 12 Jan 2022 19:06:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7F373385840C Received: by mail-qt1-x830.google.com with SMTP id c19so4169059qtx.3 for ; Wed, 12 Jan 2022 11:06:46 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=IPH7uCQ/HIQdgbvVJbrt2uHHjlBdDH2oIFFz3TcYjhU=; b=wGwd4YeKE2sQjZfRtNjD+GzHxAaL/EeJ+SKP8PJcAoFn6TzXY8nTc9ZSuHAwMLTi7c LzGAlC0EGwtNR/D/SCwdaB1IsrCOdJh7CpGoamdLEo/susYpoK1zM46BeyAcALm5B8Ae b6Wimn5vjm3r7d+QvqgKISMgbDQD7o8K47X/qeTn3Wbh5RvCXrf7xxoiNc1Wy74AGyLL A0KlkDIktXvEBv6VibSUXknaRW0WLGgWgy/8dR50MNt6Ko4d7K9nXXQCHv8DHNNP/Kmq 0YB939l5b+USK2/rC5PUWGJ4ymk9LTni8mm1apGOvRgKo2/7ROhh4MsvfOnZ1iPFQFBS JwOA== X-Gm-Message-State: AOAM530VToZgMx28J1zc5DgfSCciTe2CMTx5hS1e8rtyhD4Kxz/1/qUn Ows+eqmR9BEQ8lq4mu70rhHpLCq9xO3rkyL8EjywO+8am3CfsQ== X-Google-Smtp-Source: ABdhPJwTWYR9g9UNErrJhZIRjh2JZHweh3p2Mi+AmM+Ep9+Y++nkNSmpJ4IyV1L8i9jekqKt1hkYfNmIlpd4vrCDDeo= X-Received: by 2002:ac8:5e4a:: with SMTP id i10mr793163qtx.569.1642014405675; Wed, 12 Jan 2022 11:06:45 -0800 (PST) MIME-Version: 1.0 From: Uros Bizjak Date: Wed, 12 Jan 2022 20:06:34 +0100 Message-ID: Subject: [PATCH] i386: Add CC clobber and splits for 32-bit vector mode logic insns [PR100673, PR103861] To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000005e037805d56745e7" X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Jan 2022 19:06:49 -0000 --0000000000005e037805d56745e7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Add CC clobber to 32-bit vector mode logic insns to allow variants with general-purpose registers. Also improve ix86_sse_movcc to emit insn with CC clobber for narrow vector modes in order to re-enable conditional moves for 16-bit and 32-bit narrow vector modes with -msse2. 2022-01-12 Uro=C5=A1 Bizjak gcc/ChangeLog: PR target/100637 PR target/103861 * config/i386/i386-expand.c (ix86_emit_vec_binop): New static function. (ix86_expand_sse_movcc): Use ix86_emit_vec_binop instead of gen_rtx_X when constructing vector logic RTXes. (expand_vec_perm_pshufb2): Ditto. * config/i386/mmx.md (negv2qi): Disparage GPR alternative a bit. (v2qi3): Ditto. (vcond): Re-enable for TARGET_SSE2. (vcondu): Ditto. (vcond_mask_): Ditto. (one_cmpl2): Remove expander. (one_cmpl2): Rename from one_cmplv2qi. Use VI_16_32 mode iterator. (one_cmpl2 splitters): Use VI_16_32 mode iterator. Use lowpart_subreg instead of gen_lowpart to create subreg. (*andnot3): Merge from "*andnot" and "*andnotv2qi3" insn patterns using VI_16_32 mode iterator. Disparage GPR alternative a bit. Add CC clobber. (*andnot3 splitters): Use VI_16_32 mode iterator. Use lowpart_subreg instead of gen_lowpart to create subreg. (*3): Merge from "*" and "*v2qi3 insn patter= ns" using VI_16_32 mode iterator. Disparage GPR alternative a bit. Add CC clobber. (*3 splitters):Use VI_16_32 mode iterator. Use lowpart_subreg instead of gen_lowpart to create subreg. gcc/testsuite/ChangeLog: PR target/100637 PR target/103861 * g++.target/i386/pr100637-1b.C (dg-options): Use -msse2 instead of -msse4.1. * g++.target/i386/pr100637-1w.C (dg-options): Ditto. * g++.target/i386/pr103861-1.C (dg-options): Ditto. * gcc.target/i386/pr100637-4b.c (dg-options): Ditto. * gcc.target/i386/pr103861-4.c (dg-options): Ditto. * gcc.target/i386/pr100637-1b.c: Remove scan-assembler directives for logic instructions. * gcc.target/i386/pr100637-1w.c: Ditto. * gcc.target/i386/warn-vect-op-2.c: Update dg-warning for vector logic operation. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Pushed to master. Uros. --0000000000005e037805d56745e7 Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kybwypv70 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jIGIvZ2NjL2NvbmZpZy9p Mzg2L2kzODYtZXhwYW5kLmMKaW5kZXggOGIxMjY2ZmI5ZjEuLjAzMThmMTI2Nzg1IDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1leHBhbmQuYworKysgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni1leHBhbmQuYwpAQCAtMzc1Miw2ICszNzUyLDI3IEBAIGl4ODZfZXhwYW5kX3NzZV9jbXAg KHJ0eCBkZXN0LCBlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBjbXBfb3AwLCBydHggY21wX29wMSwK ICAgcmV0dXJuIGRlc3Q7CiB9CiAKKy8qIEVtaXQgeDg2IGJpbmFyeSBvcGVyYW5kIENPREUgaW4g bW9kZSBNT0RFIGZvciBTU0UgdmVjdG9yCisgICBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgcGVy Zm9ybWVkIHVzaW5nIEdQIHJlZ2lzdGVycy4gICovCisKK3N0YXRpYyB2b2lkCitpeDg2X2VtaXRf dmVjX2Jpbm9wIChlbnVtIHJ0eF9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkgICAg IHJ0eCBkc3QsIHJ0eCBzcmMxLCBydHggc3JjMikKK3sKKyAgcnR4IHRtcDsKKworICB0bXAgPSBn ZW5fcnR4X1NFVCAoZHN0LCBnZW5fcnR4X2ZtdF9lZSAoY29kZSwgbW9kZSwgc3JjMSwgc3JjMikp OworCisgIGlmIChHRVRfTU9ERV9TSVpFIChtb2RlKSA8PSBHRVRfTU9ERV9TSVpFIChTSW1vZGUp CisgICAgICAmJiBHRVRfTU9ERV9DTEFTUyAobW9kZSkgPT0gTU9ERV9WRUNUT1JfSU5UKQorICAg IHsKKyAgICAgIHJ0eCBjbG9iID0gZ2VuX3J0eF9DTE9CQkVSIChWT0lEbW9kZSwgZ2VuX3J0eF9S RUcgKENDbW9kZSwgRkxBR1NfUkVHKSk7CisgICAgICB0bXAgPSBnZW5fcnR4X1BBUkFMTEVMIChW T0lEbW9kZSwgZ2VuX3J0dmVjICgyLCB0bXAsIGNsb2IpKTsKKyAgICB9CisKKyAgZW1pdF9pbnNu ICh0bXApOworfQorCiAvKiBFeHBhbmQgREVTVCA9IENNUCA/IE9QX1RSVUUgOiBPUF9GQUxTRSBp bnRvIGEgc2VxdWVuY2Ugb2YgbG9naWNhbAogICAgb3BlcmF0aW9ucy4gIFRoaXMgaXMgdXNlZCBm b3IgYm90aCBzY2FsYXIgYW5kIHZlY3RvciBjb25kaXRpb25hbCBtb3Zlcy4gICovCiAKQEAgLTM4 MjAsMjMgKzM4NDEsMjAgQEAgaXg4Nl9leHBhbmRfc3NlX21vdmNjIChydHggZGVzdCwgcnR4IGNt cCwgcnR4IG9wX3RydWUsIHJ0eCBvcF9mYWxzZSkKICAgZWxzZSBpZiAob3BfZmFsc2UgPT0gQ09O U1QwX1JUWCAobW9kZSkpCiAgICAgewogICAgICAgb3BfdHJ1ZSA9IGZvcmNlX3JlZyAobW9kZSwg b3BfdHJ1ZSk7Ci0gICAgICB4ID0gZ2VuX3J0eF9BTkQgKG1vZGUsIGNtcCwgb3BfdHJ1ZSk7Ci0g ICAgICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChkZXN0LCB4KSk7CisgICAgICBpeDg2X2VtaXRf dmVjX2Jpbm9wIChBTkQsIG1vZGUsIGRlc3QsIGNtcCwgb3BfdHJ1ZSk7CiAgICAgICByZXR1cm47 CiAgICAgfQogICBlbHNlIGlmIChvcF90cnVlID09IENPTlNUMF9SVFggKG1vZGUpKQogICAgIHsK ICAgICAgIG9wX2ZhbHNlID0gZm9yY2VfcmVnIChtb2RlLCBvcF9mYWxzZSk7CiAgICAgICB4ID0g Z2VuX3J0eF9OT1QgKG1vZGUsIGNtcCk7Ci0gICAgICB4ID0gZ2VuX3J0eF9BTkQgKG1vZGUsIHgs IG9wX2ZhbHNlKTsKLSAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRlc3QsIHgpKTsKKyAg ICAgIGl4ODZfZW1pdF92ZWNfYmlub3AgKEFORCwgbW9kZSwgZGVzdCwgeCwgb3BfZmFsc2UpOwog ICAgICAgcmV0dXJuOwogICAgIH0KICAgZWxzZSBpZiAoSU5URUdSQUxfTU9ERV9QIChtb2RlKSAm JiBvcF90cnVlID09IENPTlNUTTFfUlRYIChtb2RlKSkKICAgICB7CiAgICAgICBvcF9mYWxzZSA9 IGZvcmNlX3JlZyAobW9kZSwgb3BfZmFsc2UpOwotICAgICAgeCA9IGdlbl9ydHhfSU9SIChtb2Rl LCBjbXAsIG9wX2ZhbHNlKTsKLSAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRlc3QsIHgp KTsKKyAgICAgIGl4ODZfZW1pdF92ZWNfYmlub3AgKElPUiwgbW9kZSwgZGVzdCwgY21wLCBvcF9m YWxzZSk7CiAgICAgICByZXR1cm47CiAgICAgfQogICBlbHNlIGlmIChUQVJHRVRfWE9QKQpAQCAt NDAxMCwxNSArNDAyOCwxMiBAQCBpeDg2X2V4cGFuZF9zc2VfbW92Y2MgKHJ0eCBkZXN0LCBydHgg Y21wLCBydHggb3BfdHJ1ZSwgcnR4IG9wX2ZhbHNlKQogICAgICAgZWxzZQogCXQzID0gZGVzdDsK IAotICAgICAgeCA9IGdlbl9ydHhfQU5EIChtb2RlLCBvcF90cnVlLCBjbXApOwotICAgICAgZW1p dF9pbnNuIChnZW5fcnR4X1NFVCAodDIsIHgpKTsKKyAgICAgIGl4ODZfZW1pdF92ZWNfYmlub3Ag KEFORCwgbW9kZSwgdDIsIG9wX3RydWUsIGNtcCk7CiAKICAgICAgIHggPSBnZW5fcnR4X05PVCAo bW9kZSwgY21wKTsKLSAgICAgIHggPSBnZW5fcnR4X0FORCAobW9kZSwgeCwgb3BfZmFsc2UpOwot ICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAodDMsIHgpKTsKKyAgICAgIGl4ODZfZW1pdF92 ZWNfYmlub3AgKEFORCwgbW9kZSwgdDMsIHgsIG9wX2ZhbHNlKTsKIAotICAgICAgeCA9IGdlbl9y dHhfSU9SIChtb2RlLCB0MywgdDIpOwotICAgICAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAoZGVz dCwgeCkpOworICAgICAgaXg4Nl9lbWl0X3ZlY19iaW5vcCAoSU9SLCBtb2RlLCBkZXN0LCB0Mywg dDIpOwogICAgIH0KIH0KIApAQCAtMjA3MzMsNyArMjA3NDgsNyBAQCBleHBhbmRfdmVjX3Blcm1f cHNodWZiMiAoc3RydWN0IGV4cGFuZF92ZWNfcGVybV9kICpkKQogICBvcCA9IGQtPnRhcmdldDsK ICAgaWYgKGQtPnZtb2RlICE9IG1vZGUpCiAgICAgb3AgPSBnZW5fcmVnX3J0eCAobW9kZSk7Ci0g IGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKG9wLCBnZW5fcnR4X0lPUiAobW9kZSwgbCwgaCkpKTsK KyAgaXg4Nl9lbWl0X3ZlY19iaW5vcCAoSU9SLCBtb2RlLCBvcCwgbCwgaCk7CiAgIGlmIChvcCAh PSBkLT50YXJnZXQpCiAgICAgZW1pdF9tb3ZlX2luc24gKGQtPnRhcmdldCwgZ2VuX2xvd3BhcnQg KGQtPnZtb2RlLCBvcCkpOwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbW14Lm1kIGIv Z2NjL2NvbmZpZy9pMzg2L21teC5tZAppbmRleCBmYTY3Mjc4ZTAwMy4uOGE4MTQyYzhhMDkgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9tbXgubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L21t eC5tZApAQCAtMTYzNCw3ICsxNjM0LDcgQEAKICAgIm9wZXJhbmRzWzJdID0gZm9yY2VfcmVnICg8 TU9ERT5tb2RlLCBDT05TVDBfUlRYICg8TU9ERT5tb2RlKSk7IikKIAogKGRlZmluZV9pbnNuICJu ZWd2MnFpMiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJRSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPVEsJll3IikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJRSSAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPT9RLCZZdyIpCiAgICAgICAgIChuZWc6VjJRSQogCSAgKG1hdGNoX29wZXJhbmQ6VjJR SSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCxZdyIpKSkKICAgIChjbG9iYmVyIChyZWc6Q0MgRkxB R1NfUkVHKSldCkBAIC0xNzQwLDcgKzE3NDAsNyBAQAogICAgKHNldF9hdHRyICJtb2RlIiAiVEki KV0pCiAKIChkZWZpbmVfaW5zbiAiPGluc24+djJxaTMiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5k OlYyUUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1RLHgsWXciKQorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpWMlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9P1EseCxZdyIpCiAgICAgICAgIChwbHVz bWludXM6VjJRSQogCSAgKG1hdGNoX29wZXJhbmQ6VjJRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi PGNvbW0+MCwwLFl3IikKIAkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMiAicmVnaXN0ZXJfb3BlcmFu ZCIgIlEseCxZdyIpKSkKQEAgLTI1ODcsNyArMjU4Nyw3IEBACiAJICAgICAobWF0Y2hfb3BlcmFu ZDpWSV8xNl8zMiA1ICJyZWdpc3Rlcl9vcGVyYW5kIildKQogCSAgKG1hdGNoX29wZXJhbmQ6Vklf MTZfMzIgMSkKIAkgIChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDIpKSldCi0gICJUQVJHRVRfU1NF NF8xIgorICAiVEFSR0VUX1NTRTIiCiB7CiAgIGJvb2wgb2sgPSBpeDg2X2V4cGFuZF9pbnRfdmNv bmQgKG9wZXJhbmRzKTsKICAgZ2NjX2Fzc2VydCAob2spOwpAQCAtMjYxOSw3ICsyNjE5LDcgQEAK IAkgICAgIChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDUgInJlZ2lzdGVyX29wZXJhbmQiKV0pCiAJ ICAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAxKQogCSAgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIg MikpKV0KLSAgIlRBUkdFVF9TU0U0XzEiCisgICJUQVJHRVRfU1NFMiIKIHsKICAgYm9vbCBvayA9 IGl4ODZfZXhwYW5kX2ludF92Y29uZCAob3BlcmFuZHMpOwogICBnY2NfYXNzZXJ0IChvayk7CkBA IC0yNjQ1LDcgKzI2NDUsNyBAQAogCSAgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMSAicmVnaXN0 ZXJfb3BlcmFuZCIpCiAJICAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAyICJyZWdpc3Rlcl9vcGVy YW5kIikKIAkgIChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDMgInJlZ2lzdGVyX29wZXJhbmQiKSkp XQotICAiVEFSR0VUX1NTRTRfMSIKKyAgIlRBUkdFVF9TU0UyIgogewogICBpeDg2X2V4cGFuZF9z c2VfbW92Y2MgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1szXSwKIAkJCSBvcGVyYW5kc1sxXSwgb3Bl cmFuZHNbMl0pOwpAQCAtMjc1MiwxOCArMjc1MiwxMCBAQAogICAiVEFSR0VUX01NWF9XSVRIX1NT RSIKICAgIm9wZXJhbmRzWzJdID0gZm9yY2VfcmVnICg8TU9ERT5tb2RlLCBDT05TVE0xX1JUWCAo PE1PREU+bW9kZSkpOyIpCiAKLShkZWZpbmVfZXhwYW5kICJvbmVfY21wbDxtb2RlPjIiCi0gIFso c2V0IChtYXRjaF9vcGVyYW5kOlZJXzMyIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCSh4b3I6Vklf MzIKLQkgIChtYXRjaF9vcGVyYW5kOlZJXzMyIDEgInJlZ2lzdGVyX29wZXJhbmQiKQotCSAgKG1h dGNoX2R1cCAyKSkpXQotICAiVEFSR0VUX1NTRTIiCi0gICJvcGVyYW5kc1syXSA9IGZvcmNlX3Jl ZyAoPE1PREU+bW9kZSwgQ09OU1RNMV9SVFggKDxNT0RFPm1vZGUpKTsiKQotCi0oZGVmaW5lX2lu c24gIm9uZV9jbXBsdjJxaTIiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yLCZ4LCZ2IikKLQkobm90OlYyUUkKLQkgIChtYXRjaF9vcGVyYW5kOlYy UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAseCx2IikpKV0KKyhkZWZpbmVfaW5zbiAib25lX2Nt cGw8bW9kZT4yIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPT9yLCZ4LCZ2IikKKwkobm90OlZJXzE2XzMyCisJICAobWF0Y2hfb3BlcmFuZDpW SV8xNl8zMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx4LHYiKSkpXQogICAiIgogICAiIyIKICAg WyhzZXRfYXR0ciAiaXNhIiAiKixzc2UyLGF2eDUxMnZsIikKQEAgLTI3NzEsMzIgKzI3NjMsMzAg QEAKICAgIChzZXRfYXR0ciAibW9kZSIgIlNJLFRJLFRJIildKQogCiAoZGVmaW5lX3NwbGl0Ci0g IFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAiZ2VuZXJhbF9yZWdfb3BlcmFuZCIpCi0JKG5v dDpWMlFJCi0JICAobWF0Y2hfb3BlcmFuZDpWMlFJIDEgImdlbmVyYWxfcmVnX29wZXJhbmQiKSkp XQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAwICJnZW5lcmFsX3JlZ19vcGVyYW5k IikKKwkobm90OlZJXzE2XzMyCisJICAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAxICJnZW5lcmFs X3JlZ19vcGVyYW5kIikpKV0KICAgInJlbG9hZF9jb21wbGV0ZWQiCiAgIFsoc2V0IChtYXRjaF9k dXAgMCkKIAkobm90OlNJIChtYXRjaF9kdXAgMSkpKV0KIHsKLSAgb3BlcmFuZHNbMV0gPSBnZW5f bG93cGFydCAoU0ltb2RlLCBvcGVyYW5kc1sxXSk7Ci0gIG9wZXJhbmRzWzBdID0gZ2VuX2xvd3Bh cnQgKFNJbW9kZSwgb3BlcmFuZHNbMF0pOworICBvcGVyYW5kc1sxXSA9IGxvd3BhcnRfc3VicmVn IChTSW1vZGUsIG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKTsKKyAgb3BlcmFuZHNbMF0gPSBsb3dw YXJ0X3N1YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1swXSwgPE1PREU+bW9kZSk7CiB9KQogCiAoZGVm aW5lX3NwbGl0Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAic3NlX3JlZ19vcGVyYW5k IikKLQkobm90OlYyUUkKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMSAic3NlX3JlZ19vcGVyYW5k IikpKV0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMCAic3NlX3JlZ19vcGVyYW5k IikKKwkobm90OlZJXzE2XzMyCisJICAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAxICJzc2VfcmVn X29wZXJhbmQiKSkpXQogICAiVEFSR0VUX1NTRTIgJiYgcmVsb2FkX2NvbXBsZXRlZCIKLSAgWyhz ZXQgKG1hdGNoX2R1cCAwKQotCSh4b3I6VjRRSQorICBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRj aF9kdXAgMikpCisgICAoc2V0IChtYXRjaF9kdXAgMCkKKwkoeG9yOlYxNlFJCiAJICAobWF0Y2hf ZHVwIDApIChtYXRjaF9kdXAgMSkpKV0KIHsKLSAgZW1pdF9pbnNuCi0gICAoZ2VuX3J0eF9TRVQg KGdlbl9ydHhfUkVHIChWMTZRSW1vZGUsIFJFR05PIChvcGVyYW5kc1swXSkpLAotCQkgQ09OU1RN MV9SVFggKFYxNlFJbW9kZSkpKTsKLQotICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChWNFFJ bW9kZSwgb3BlcmFuZHNbMV0pOwotICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChWNFFJbW9k ZSwgb3BlcmFuZHNbMF0pOworICBvcGVyYW5kc1syXSA9IENPTlNUTTFfUlRYIChWMTZRSW1vZGUp OworICBvcGVyYW5kc1sxXSA9IGxvd3BhcnRfc3VicmVnIChWMTZRSW1vZGUsIG9wZXJhbmRzWzFd LCA8TU9ERT5tb2RlKTsKKyAgb3BlcmFuZHNbMF0gPSBsb3dwYXJ0X3N1YnJlZyAoVjE2UUltb2Rl LCBvcGVyYW5kc1swXSwgPE1PREU+bW9kZSk7CiB9KQogCiAoZGVmaW5lX2luc24gIm1teF9hbmRu b3Q8bW9kZT4zIgpAQCAtMjgxNiwyNCArMjgwNiwxMSBAQAogICAgKHNldF9hdHRyICJtb2RlIiAi REksVEksVEksVEkiKV0pCiAKIChkZWZpbmVfaW5zbiAiKmFuZG5vdDxtb2RlPjMiCi0gIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlZJXzMyIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4LHYiKQotCShh bmQ6VklfMzIKLQkgIChub3Q6VklfMzIgKG1hdGNoX29wZXJhbmQ6VklfMzIgMSAicmVnaXN0ZXJf b3BlcmFuZCIgIjAseCx2IikpCi0JICAobWF0Y2hfb3BlcmFuZDpWSV8zMiAyICJyZWdpc3Rlcl9v cGVyYW5kIiAieCx4LHYiKSkpXQotICAiVEFSR0VUX1NTRTIiCi0gICJACi0gICBwYW5kblx0eyUy LCAlMHwlMCwgJTJ9Ci0gICB2cGFuZG5cdHslMiwgJTEsICUwfCUwLCAlMSwgJTJ9Ci0gICB2cGFu ZG5kXHR7JTIsICUxLCAlMHwlMCwgJTEsICUyfSIKLSAgWyhzZXRfYXR0ciAiaXNhIiAibm9hdngs YXZ4LGF2eDUxMnZsIikKLSAgIChzZXRfYXR0ciAidHlwZSIgInNzZWxvZyIpCi0gICAoc2V0X2F0 dHIgIm1vZGUiICJUSSIpXSkKLQotKGRlZmluZV9pbnNuICIqYW5kbm90djJxaTMiCi0gIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mcixyLHgseCx2IikK LSAgICAgICAgKGFuZDpWMlFJCi0JICAobm90OlYyUUkgKG1hdGNoX29wZXJhbmQ6VjJRSSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiMCxyLDAseCx2IikpCi0JICAobWF0Y2hfb3BlcmFuZDpWMlFJIDIg InJlZ2lzdGVyX29wZXJhbmQiICJyLHIseCx4LHYiKSkpCisgIFsoc2V0IChtYXRjaF9vcGVyYW5k OlZJXzE2XzMyIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9PyZyLD9yLHgseCx2IikKKyAgICAgICAg KGFuZDpWSV8xNl8zMgorCSAgKG5vdDpWSV8xNl8zMgorCSAgICAobWF0Y2hfb3BlcmFuZDpWSV8x Nl8zMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCxyLDAseCx2IikpCisJICAobWF0Y2hfb3BlcmFu ZDpWSV8xNl8zMiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAicixyLHgseCx2IikpKQogICAgKGNsb2Ji ZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAgIiIKICAgIiMiCkBAIC0yODQyLDEwICsyODE5LDEw IEBACiAgICAoc2V0X2F0dHIgIm1vZGUiICJTSSxTSSxUSSxUSSxUSSIpXSkKIAogKGRlZmluZV9z cGxpdAotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlFJIDAgImdlbmVyYWxfcmVnX29wZXJhbmQi KQotICAgICAgICAoYW5kOlYyUUkKLQkgIChub3Q6VjJRSSAobWF0Y2hfb3BlcmFuZDpWMlFJIDEg ImdlbmVyYWxfcmVnX29wZXJhbmQiKSkKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMiAiZ2VuZXJh bF9yZWdfb3BlcmFuZCIpKSkKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMCAiZ2Vu ZXJhbF9yZWdfb3BlcmFuZCIpCisgICAgICAgIChhbmQ6VklfMTZfMzIKKwkgIChub3Q6VklfMTZf MzIgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMSAiZ2VuZXJhbF9yZWdfb3BlcmFuZCIpKQorCSAg KG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMiAiZ2VuZXJhbF9yZWdfb3BlcmFuZCIpKSkKICAgIChj bG9iYmVyIChyZWc6Q0MgRkxBR1NfUkVHKSldCiAgICJUQVJHRVRfQk1JICYmIHJlbG9hZF9jb21w bGV0ZWQiCiAgIFsocGFyYWxsZWwKQEAgLTI4NTMsMTYgKzI4MzAsMTYgQEAKIAkgICAoYW5kOlNJ IChub3Q6U0kgKG1hdGNoX2R1cCAxKSkgKG1hdGNoX2R1cCAyKSkpCiAgICAgICAoY2xvYmJlciAo cmVnOkNDIEZMQUdTX1JFRykpXSldCiB7Ci0gIG9wZXJhbmRzWzJdID0gZ2VuX2xvd3BhcnQgKFNJ bW9kZSwgb3BlcmFuZHNbMl0pOwotICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUs IG9wZXJhbmRzWzFdKTsKLSAgb3BlcmFuZHNbMF0gPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvcGVy YW5kc1swXSk7CisgIG9wZXJhbmRzWzJdID0gbG93cGFydF9zdWJyZWcgKFNJbW9kZSwgb3BlcmFu ZHNbMl0sIDxNT0RFPm1vZGUpOworICBvcGVyYW5kc1sxXSA9IGxvd3BhcnRfc3VicmVnIChTSW1v ZGUsIG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKTsKKyAgb3BlcmFuZHNbMF0gPSBsb3dwYXJ0X3N1 YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1swXSwgPE1PREU+bW9kZSk7CiB9KQogCiAoZGVmaW5lX3Nw bGl0Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAiZ2VuZXJhbF9yZWdfb3BlcmFuZCIp Ci0gICAgICAgIChhbmQ6VjJRSQotCSAgKG5vdDpWMlFJIChtYXRjaF9vcGVyYW5kOlYyUUkgMSAi Z2VuZXJhbF9yZWdfb3BlcmFuZCIpKQotCSAgKG1hdGNoX29wZXJhbmQ6VjJRSSAyICJnZW5lcmFs X3JlZ19vcGVyYW5kIikpKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAwICJnZW5l cmFsX3JlZ19vcGVyYW5kIikKKyAgICAgICAgKGFuZDpWSV8xNl8zMgorCSAgKG5vdDpWSV8xNl8z MiAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAxICJnZW5lcmFsX3JlZ19vcGVyYW5kIikpCisJICAo bWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAyICJnZW5lcmFsX3JlZ19vcGVyYW5kIikpKQogICAgKGNs b2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAgIiFUQVJHRVRfQk1JICYmIHJlbG9hZF9jb21w bGV0ZWQiCiAgIFsoc2V0IChtYXRjaF9kdXAgMCkKQEAgLTI4NzIsMjQgKzI4NDksMjQgQEAKIAkg ICAoYW5kOlNJIChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCAyKSkpCiAgICAgICAoY2xvYmJlciAo cmVnOkNDIEZMQUdTX1JFRykpXSldCiB7Ci0gIG9wZXJhbmRzWzJdID0gZ2VuX2xvd3BhcnQgKFNJ bW9kZSwgb3BlcmFuZHNbMl0pOwotICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChTSW1vZGUs IG9wZXJhbmRzWzFdKTsKLSAgb3BlcmFuZHNbMF0gPSBnZW5fbG93cGFydCAoU0ltb2RlLCBvcGVy YW5kc1swXSk7CisgIG9wZXJhbmRzWzJdID0gbG93cGFydF9zdWJyZWcgKFNJbW9kZSwgb3BlcmFu ZHNbMl0sIDxNT0RFPm1vZGUpOworICBvcGVyYW5kc1sxXSA9IGxvd3BhcnRfc3VicmVnIChTSW1v ZGUsIG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKTsKKyAgb3BlcmFuZHNbMF0gPSBsb3dwYXJ0X3N1 YnJlZyAoU0ltb2RlLCBvcGVyYW5kc1swXSwgPE1PREU+bW9kZSk7CiB9KQogCiAoZGVmaW5lX3Nw bGl0Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAic3NlX3JlZ19vcGVyYW5kIikKLSAg ICAgICAgKGFuZDpWMlFJCi0JICAobm90OlYyUUkgKG1hdGNoX29wZXJhbmQ6VjJRSSAxICJzc2Vf cmVnX29wZXJhbmQiKSkKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMiAic3NlX3JlZ19vcGVyYW5k IikpKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAwICJzc2VfcmVnX29wZXJhbmQi KQorICAgICAgICAoYW5kOlZJXzE2XzMyCisJICAobm90OlZJXzE2XzMyIChtYXRjaF9vcGVyYW5k OlZJXzE2XzMyIDEgInNzZV9yZWdfb3BlcmFuZCIpKQorCSAgKG1hdGNoX29wZXJhbmQ6VklfMTZf MzIgMiAic3NlX3JlZ19vcGVyYW5kIikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcp KV0KICAgIlRBUkdFVF9TU0UyICYmIHJlbG9hZF9jb21wbGV0ZWQiCiAgIFsoc2V0IChtYXRjaF9k dXAgMCkKLQkoYW5kOlY0UUkgKG5vdDpWNFFJIChtYXRjaF9kdXAgMSkpIChtYXRjaF9kdXAgMikp KV0KKwkoYW5kOlYxNlFJIChub3Q6VjE2UUkgKG1hdGNoX2R1cCAxKSkgKG1hdGNoX2R1cCAyKSkp XQogewotICBvcGVyYW5kc1syXSA9IGdlbl9sb3dwYXJ0IChWNFFJbW9kZSwgb3BlcmFuZHNbMl0p OwotICBvcGVyYW5kc1sxXSA9IGdlbl9sb3dwYXJ0IChWNFFJbW9kZSwgb3BlcmFuZHNbMV0pOwot ICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChWNFFJbW9kZSwgb3BlcmFuZHNbMF0pOworICBv cGVyYW5kc1syXSA9IGxvd3BhcnRfc3VicmVnIChWMTZRSW1vZGUsIG9wZXJhbmRzWzJdLCA8TU9E RT5tb2RlKTsKKyAgb3BlcmFuZHNbMV0gPSBsb3dwYXJ0X3N1YnJlZyAoVjE2UUltb2RlLCBvcGVy YW5kc1sxXSwgPE1PREU+bW9kZSk7CisgIG9wZXJhbmRzWzBdID0gbG93cGFydF9zdWJyZWcgKFYx NlFJbW9kZSwgb3BlcmFuZHNbMF0sIDxNT0RFPm1vZGUpOwogfSkKIAogKGRlZmluZV9leHBhbmQg Im1teF88Y29kZT48bW9kZT4zIgpAQCAtMjkyNSwyNCArMjkwMiwxMCBAQAogICAgKHNldF9hdHRy ICJtb2RlIiAiREksVEksVEksVEkiKV0pCiAKIChkZWZpbmVfaW5zbiAiPGNvZGU+PG1vZGU+MyIK LSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VklfMzIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj14LHgs diIpCi0gICAgICAgIChhbnlfbG9naWM6VklfMzIKLQkgIChtYXRjaF9vcGVyYW5kOlZJXzMyIDEg InJlZ2lzdGVyX29wZXJhbmQiICIlMCx4LHYiKQotCSAgKG1hdGNoX29wZXJhbmQ6VklfMzIgMiAi cmVnaXN0ZXJfb3BlcmFuZCIgIngseCx2IikpKV0KLSAgIlRBUkdFVF9TU0UyIgotICAiQAotICAg cDxsb2dpYz5cdHslMiwgJTB8JTAsICUyfQotICAgdnA8bG9naWM+XHR7JTIsICUxLCAlMHwlMCwg JTEsICUyfQotICAgdnA8bG9naWM+ZFx0eyUyLCAlMSwgJTB8JTAsICUxLCAlMn0iCi0gIFsoc2V0 X2F0dHIgImlzYSIgIm5vYXZ4LGF2eCxhdng1MTJ2bCIpCi0gICAoc2V0X2F0dHIgInR5cGUiICJz c2Vsb2ciKQotICAgKHNldF9hdHRyICJtb2RlIiAiVEkiKV0pCi0KLShkZWZpbmVfaW5zbiAiPGNv ZGU+djJxaTMiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyUUkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj1yLHgseCx2IikKLSAgICAgICAgKGFueV9sb2dpYzpWMlFJCi0JICAobWF0Y2hfb3BlcmFu ZDpWMlFJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLHgsdiIpCi0JICAobWF0Y2hfb3BlcmFu ZDpWMlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyLHgseCx2IikpKQorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpWSV8xNl8zMiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPT9yLHgseCx2IikKKyAgICAg ICAgKGFueV9sb2dpYzpWSV8xNl8zMgorCSAgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIiUwLDAseCx2IikKKwkgIChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDIg InJlZ2lzdGVyX29wZXJhbmQiICJyLHgseCx2IikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFH U19SRUcpKV0KICAgIiIKICAgIiMiCkBAIC0yOTUxLDEwICsyOTE0LDEwIEBACiAgICAoc2V0X2F0 dHIgIm1vZGUiICJTSSxUSSxUSSxUSSIpXSkKIAogKGRlZmluZV9zcGxpdAotICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpWMlFJIDAgImdlbmVyYWxfcmVnX29wZXJhbmQiKQotICAgICAgICAoYW55X2xv Z2ljOlYyUUkKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMSAiZ2VuZXJhbF9yZWdfb3BlcmFuZCIp Ci0JICAobWF0Y2hfb3BlcmFuZDpWMlFJIDIgImdlbmVyYWxfcmVnX29wZXJhbmQiKSkpCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDAgImdlbmVyYWxfcmVnX29wZXJhbmQiKQorICAg ICAgICAoYW55X2xvZ2ljOlZJXzE2XzMyCisJICAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAxICJn ZW5lcmFsX3JlZ19vcGVyYW5kIikKKwkgIChtYXRjaF9vcGVyYW5kOlZJXzE2XzMyIDIgImdlbmVy YWxfcmVnX29wZXJhbmQiKSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAi cmVsb2FkX2NvbXBsZXRlZCIKICAgWyhwYXJhbGxlbApAQCAtMjk2MiwyNCArMjkyNSwyNCBAQAog CSAgIChhbnlfbG9naWM6U0kgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkKICAgICAgIChj bG9iYmVyIChyZWc6Q0MgRkxBR1NfUkVHKSldKV0KIHsKLSAgb3BlcmFuZHNbMl0gPSBnZW5fbG93 cGFydCAoU0ltb2RlLCBvcGVyYW5kc1syXSk7Ci0gIG9wZXJhbmRzWzFdID0gZ2VuX2xvd3BhcnQg KFNJbW9kZSwgb3BlcmFuZHNbMV0pOwotICBvcGVyYW5kc1swXSA9IGdlbl9sb3dwYXJ0IChTSW1v ZGUsIG9wZXJhbmRzWzBdKTsKKyAgb3BlcmFuZHNbMl0gPSBsb3dwYXJ0X3N1YnJlZyAoU0ltb2Rl LCBvcGVyYW5kc1syXSwgPE1PREU+bW9kZSk7CisgIG9wZXJhbmRzWzFdID0gbG93cGFydF9zdWJy ZWcgKFNJbW9kZSwgb3BlcmFuZHNbMV0sIDxNT0RFPm1vZGUpOworICBvcGVyYW5kc1swXSA9IGxv d3BhcnRfc3VicmVnIChTSW1vZGUsIG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKTsKIH0pCiAKIChk ZWZpbmVfc3BsaXQKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJRSSAwICJzc2VfcmVnX29wZXJh bmQiKQotICAgICAgICAoYW55X2xvZ2ljOlYyUUkKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMSAi c3NlX3JlZ19vcGVyYW5kIikKLQkgIChtYXRjaF9vcGVyYW5kOlYyUUkgMiAic3NlX3JlZ19vcGVy YW5kIikpKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWSV8xNl8zMiAwICJzc2VfcmVnX29wZXJh bmQiKQorICAgICAgICAoYW55X2xvZ2ljOlZJXzE2XzMyCisJICAobWF0Y2hfb3BlcmFuZDpWSV8x Nl8zMiAxICJzc2VfcmVnX29wZXJhbmQiKQorCSAgKG1hdGNoX29wZXJhbmQ6VklfMTZfMzIgMiAi c3NlX3JlZ19vcGVyYW5kIikpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBGTEFHU19SRUcpKV0KICAg IlRBUkdFVF9TU0UyICYmIHJlbG9hZF9jb21wbGV0ZWQiCiAgIFsoc2V0IChtYXRjaF9kdXAgMCkK LQkoYW55X2xvZ2ljOlY0UUkgKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSldCisJKGFueV9s b2dpYzpWMTZRSSAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKV0KIHsKLSAgb3BlcmFuZHNb Ml0gPSBnZW5fbG93cGFydCAoVjRRSW1vZGUsIG9wZXJhbmRzWzJdKTsKLSAgb3BlcmFuZHNbMV0g PSBnZW5fbG93cGFydCAoVjRRSW1vZGUsIG9wZXJhbmRzWzFdKTsKLSAgb3BlcmFuZHNbMF0gPSBn ZW5fbG93cGFydCAoVjRRSW1vZGUsIG9wZXJhbmRzWzBdKTsKKyAgb3BlcmFuZHNbMl0gPSBsb3dw YXJ0X3N1YnJlZyAoVjE2UUltb2RlLCBvcGVyYW5kc1syXSwgPE1PREU+bW9kZSk7CisgIG9wZXJh bmRzWzFdID0gbG93cGFydF9zdWJyZWcgKFYxNlFJbW9kZSwgb3BlcmFuZHNbMV0sIDxNT0RFPm1v ZGUpOworICBvcGVyYW5kc1swXSA9IGxvd3BhcnRfc3VicmVnIChWMTZRSW1vZGUsIG9wZXJhbmRz WzBdLCA8TU9ERT5tb2RlKTsKIH0pCiAKIDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysudGFyZ2V0L2kzODYvcHIxMDA2MzctMWIuQyBiL2djYy90ZXN0c3VpdGUvZysr LnRhcmdldC9pMzg2L3ByMTAwNjM3LTFiLkMKaW5kZXggZDYwMmFjMDhiNGQuLjM1YjVkZjdjOWRk IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy50YXJnZXQvaTM4Ni9wcjEwMDYzNy0xYi5D CisrKyBiL2djYy90ZXN0c3VpdGUvZysrLnRhcmdldC9pMzg2L3ByMTAwNjM3LTFiLkMKQEAgLTEs NiArMSw2IEBACiAvKiBQUiB0YXJnZXQvMTAwNjM3ICovCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAq LwotLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2U0IiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtbXNzZTIiIH0gKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9f dmVjdG9yX3NpemVfXyAoNCkpKSBfX3Y0cXU7CiB0eXBlZGVmIGNoYXIgX19hdHRyaWJ1dGVfXygo X192ZWN0b3Jfc2l6ZV9fICg0KSkpIF9fdjRxaTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLnRhcmdldC9pMzg2L3ByMTAwNjM3LTF3LkMgYi9nY2MvdGVzdHN1aXRlL2crKy50YXJnZXQv aTM4Ni9wcjEwMDYzNy0xdy5DCmluZGV4IGM2MDU2NDU0ODk3Li5hM2VkMDZmZGRlZSAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysudGFyZ2V0L2kzODYvcHIxMDA2MzctMXcuQworKysgYi9n Y2MvdGVzdHN1aXRlL2crKy50YXJnZXQvaTM4Ni9wcjEwMDYzNy0xdy5DCkBAIC0xLDYgKzEsNiBA QAogLyogUFIgdGFyZ2V0LzEwMDYzNyAqLwogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8qIHsg ZGctb3B0aW9ucyAiLU8yIC1tc3NlNCIgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2Uy IiB9ICovCiAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jf c2l6ZV9fICg0KSkpIF9fdjJodTsKIHR5cGVkZWYgc2hvcnQgX19hdHRyaWJ1dGVfXygoX192ZWN0 b3Jfc2l6ZV9fICg0KSkpIF9fdjJoaTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLnRh cmdldC9pMzg2L3ByMTAzODYxLTEuQyBiL2djYy90ZXN0c3VpdGUvZysrLnRhcmdldC9pMzg2L3By MTAzODYxLTEuQwppbmRleCA5NDBjOTM5ZTA0Zi4uNjQ3NTcyODk5MWUgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZysrLnRhcmdldC9pMzg2L3ByMTAzODYxLTEuQworKysgYi9nY2MvdGVzdHN1 aXRlL2crKy50YXJnZXQvaTM4Ni9wcjEwMzg2MS0xLkMKQEAgLTEsNiArMSw2IEBACiAvKiBQUiB0 YXJnZXQvMTAzODYxICovCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRpb25z ICItTzIgLW1zc2U0IiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbXNzZTIiIH0gKi8KIAog dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyAoMikp KSBfX3YycXU7CiB0eXBlZGVmIGNoYXIgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fICgy KSkpIF9fdjJxaTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By MTAwNjM3LTFiLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMDYzNy0xYi5j CmluZGV4IDNlNzQ0NWFkOWJiLi5mNWIxYzEyMmE2NSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvcHIxMDA2MzctMWIuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjEwMDYzNy0xYi5jCkBAIC01LDE3ICs1LDE0IEBACiB0eXBlZGVmIGNoYXIg X192NHFpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDQpKSk7CiAKIF9fdjRxaSBh bmQgKF9fdjRxaSBhLCBfX3Y0cWkgYikgeyByZXR1cm4gYSAmIGI7IH07Ci0vKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgImFuZHY0cWkzIiB9IH0gKi8KIAogX192NHFpIGFuZG4gKF9fdjRx aSBhLCBfX3Y0cWkgYikgeyByZXR1cm4gYSAmIH5iOyB9OwotLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJhbmRub3R2NHFpMyIgfSB9ICovCiAKIF9fdjRxaSBvciAgKF9fdjRxaSBhLCBf X3Y0cWkgYikgeyByZXR1cm4gYSB8IGI7IH07Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgImlvcnY0cWkzIiB9IH0gKi8KIAogX192NHFpIHhvciAgKF9fdjRxaSBhLCBfX3Y0cWkgYikg eyByZXR1cm4gYSBeIGI7IH07CisKIF9fdjRxaSBub3QgIChfX3Y0cWkgYSkgeyByZXR1cm4gfmE7 IH07Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInhvcnY0cWkzIiAyIH0g fSAqLwogCiBfX3Y0cWkgcGx1cyAgKF9fdjRxaSBhLCBfX3Y0cWkgYikgeyByZXR1cm4gYSArIGI7 IH07CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFkZHY0cWkzIiB9IH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAwNjM3LTF3LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMDYzNy0xdy5jCmluZGV4IGZlNjk2NDA0 NGI2Li41ZjI3OTg4NzhhZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHIxMDA2MzctMXcuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEw MDYzNy0xdy5jCkBAIC02LDE3ICs2LDE0IEBAIHR5cGVkZWYgc2hvcnQgX192MmhpIF9fYXR0cmli dXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDQpKSk7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f djJodSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg0KSkpOwogCiBfX3YyaGkgYW5k IChfX3YyaGkgYSwgX192MmhpIGIpIHsgcmV0dXJuIGEgJiBiOyB9OwotLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJhbmR2MmhpMyIgfSB9ICovCiAKIF9fdjJoaSBhbmRuIChfX3YyaGkg YSwgX192MmhpIGIpIHsgcmV0dXJuIGEgJiB+YjsgfTsKLS8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAiYW5kbm90djJoaTMiIH0gfSAqLwogCiBfX3YyaGkgb3IgIChfX3YyaGkgYSwgX192 MmhpIGIpIHsgcmV0dXJuIGEgfCBiOyB9OwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJpb3J2MmhpMyIgfSB9ICovCiAKIF9fdjJoaSB4b3IgIChfX3YyaGkgYSwgX192MmhpIGIpIHsg cmV0dXJuIGEgXiBiOyB9OworCiBfX3YyaGkgbm90ICAoX192MmhpIGEpIHsgcmV0dXJuIH5hOyB9 OwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ4b3J2MmhpMyIgMiB9IH0g Ki8KIAogX192MmhpIHBsdXMgIChfX3YyaGkgYSwgX192MmhpIGIpIHsgcmV0dXJuIGEgKyBiOyB9 OwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhZGR2MmhpMyIgfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMDYzNy00Yi5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMDA2MzctNGIuYwppbmRleCBhZGQ0NTA2ZTRj MS4uMTk4ZTNkZDMzNTIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByMTAwNjM3LTRiLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMDA2 MzctNGIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIFBSIHRhcmdldC8xMDA2MzcgKi8KIC8qIHsgZGct ZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiAtZnRyZWUtdmVjdG9yaXplIC1t c3NlNCIgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZ0cmVlLXZlY3Rvcml6ZSAtbXNzZTIi IH0gKi8KIAogdHlwZWRlZiBjaGFyIFQ7CiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByMTAzODYxLTQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByMTAzODYxLTQuYwppbmRleCA1NGMxODU5YjAyNy4uNTQzMzM2OTczMTYgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAzODYxLTQuYworKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMzg2MS00LmMKQEAgLTEsNiArMSw2IEBACiAvKiBQ UiB0YXJnZXQvMTAwNjM3ICovCiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotLyogeyBkZy1vcHRp b25zICItTzIgLWZ0cmVlLXZlY3Rvcml6ZSAtbXNzZTQiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LU8yIC1mdHJlZS12ZWN0b3JpemUgLW1zc2UyIiB9ICovCiAKIHR5cGVkZWYgY2hhciBUOwogCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni93YXJuLXZlY3Qtb3AtMi5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvd2Fybi12ZWN0LW9wLTIuYwppbmRleCA0 NTYwZjcwNzBiYi4uNWUzNzhiNmJkMDQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3dhcm4tdmVjdC1vcC0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvd2Fybi12ZWN0LW9wLTIuYwpAQCAtMTQsNyArMTQsNyBAQCBpbnQgbWFpbiAoaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKICAgICB2MCArIHYxLCAgICAgICAgICAgICAgLyogeyBkZy13YXJu aW5nICJleHBhbmRlZCBwaWVjZXdpc2UiIH0gICovCiAgICAgdjAgLSB2MSwgICAgICAgICAgICAg IC8qIHsgZGctd2FybmluZyAiZXhwYW5kZWQgcGllY2V3aXNlIiB9ICAqLwogICAgIHYwID4gdjEs ICAgICAgICAgICAgICAvKiB7IGRnLXdhcm5pbmcgImV4cGFuZGVkIHBpZWNld2lzZSIgfSAgKi8K LSAgICB2MCAmIHYxLCAgICAgICAgICAgICAgLyogeyBkZy13YXJuaW5nICJleHBhbmRlZCBwaWVj ZXdpc2UiIH0gICovCisgICAgdjAgJiB2MSwgICAgICAgICAgICAgIC8qIHsgZGctd2FybmluZyAi ZXhwYW5kZWQgaW4gcGFyYWxsZWwiIH0gICovCiAgICAgX19idWlsdGluX3NodWZmbGUgKHYwLCB2 MSksICAgICAgICAvKiB7IGRnLXdhcm5pbmcgImV4cGFuZGVkIHBpZWNld2lzZSIgfSAgKi8KICAg ICBfX2J1aWx0aW5fc2h1ZmZsZSAodjAsIHYxLCB2MSkgICAgIC8qIHsgZGctd2FybmluZyAiZXhw YW5kZWQgcGllY2V3aXNlIiB9ICAqLwogICB9Owo= --0000000000005e037805d56745e7--