From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf2a.google.com (mail-qv1-xf2a.google.com [IPv6:2607:f8b0:4864:20::f2a]) by sourceware.org (Postfix) with ESMTPS id 84E8B3858D32 for ; Thu, 25 May 2023 17:43:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 84E8B3858D32 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-qv1-xf2a.google.com with SMTP id 6a1803df08f44-6238b15d298so229326d6.0 for ; Thu, 25 May 2023 10:43:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1685036637; x=1687628637; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=j7xolc6bqVzYoCfcSdS78w4Bo890OZ0cuErQmT8CDKI=; b=TloGFbPjzg96EVOnaD7OzYFaXvZxD/fD2GvC/GQqIOGJdJyWRbq38RZ1yfGS3ckIEr OeYLn7DeIXY1dZjtJgJdCoIdmvM7iGHInotKwNOiDb18L7RYhT9aBecDHqpHtFsoq73b r28S+ewoTpBfY624L+pZx11B0v/JyLJSFAG9dC84pVKnkELzvSct0kw16v+YB22Wyyf7 ZwXYaZVqpmnOIyA/79jGj53paIoPwLgapAxVbrzDfKp4Tkf9085QMt/7yyzNfnDpxk1m ktJct1FccsmWZV8NNHBg1mhpowmeg7hVHzmbjvyDbiYper4G4n2bCC7WVPw7+3C/nl5y 147g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685036637; x=1687628637; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=j7xolc6bqVzYoCfcSdS78w4Bo890OZ0cuErQmT8CDKI=; b=ZaRozpIUgQNtKEmSOQUTfBfPKNa+mo4hvzDsUihtACKjQeiMm2mvpaFDCrsnwe1gmv 3O2PnELnY3OzjWxXDsbwLF9d3Cu757Jun10EDP66ix6iiFP0DoXAsPiX114DCpQ14zyx OQjjqegxOvJzXRAsUIWZ/jBKlLY2jNa6GEGULqxMQ7BUAbvK83SQt7qbbN9Pt5GvsQUz WOGQdt1t6e0XhPVstswEXlkQCVY/m1X9uGKTf6KkWV+LvaQpo/j/IDOfvxZmNc9tNtgM ofUDKXPl+DW2aQjfJ265ouW0WVeACCmceENLwX/dAj/GnVolehhZVGWJ6U1NEPVgVgEl DWTg== X-Gm-Message-State: AC+VfDyZNYQ1gUE3IvNC4U92lB0Jw334x8iX6WeEB+zi5+mfl5BBO0a7 Pu3vchD8rVhlkinLhUi7V2TJT8tziXvl5/A+HnvCQ+fjJl+E0g== X-Google-Smtp-Source: ACHHUZ5GBG4HCUvJtr1u3jG37OeIWqzERECPCfMcCdnXi807C0hLeH6ijdgZ8qHax3osQ8zYDgfkKwyyvuZazsMQRk0= X-Received: by 2002:a05:6214:f0a:b0:623:9515:24c0 with SMTP id gw10-20020a0562140f0a00b00623951524c0mr2075449qvb.16.1685036637374; Thu, 25 May 2023 10:43:57 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Thu, 25 May 2023 19:43:46 +0200 Message-ID: Subject: [COMMITTED] i386: Use 2x-wider modes when emulating QImode vector instructions To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000348a4e05fc882a67" X-Spam-Status: No, score=-7.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,T_SCC_BODY_TEXT_LINE,URIBL_BLACK 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: --000000000000348a4e05fc882a67 Content-Type: text/plain; charset="UTF-8" Rewrite ix86_expand_vecop_qihi2 to expand fo 2x-wider (e.g. V16QI -> V16HImode) instructions when available. Currently, the compiler generates following assembly for V16QImode multiplication (-mavx2): vpunpcklbw %xmm0, %xmm0, %xmm3 vpunpcklbw %xmm1, %xmm1, %xmm2 vpunpckhbw %xmm0, %xmm0, %xmm0 movl $255, %eax vpunpckhbw %xmm1, %xmm1, %xmm1 vpmullw %xmm3, %xmm2, %xmm2 vmovd %eax, %xmm3 vpmullw %xmm0, %xmm1, %xmm1 vpbroadcastw %xmm3, %xmm3 vpand %xmm2, %xmm3, %xmm0 vpand %xmm1, %xmm3, %xmm3 vpackuswb %xmm3, %xmm0, %xmm0 and only with -mavx512bw -mavx512vl generates: vpmovzxbw %xmm1, %ymm1 vpmovzxbw %xmm0, %ymm0 vpmullw %ymm1, %ymm0, %ymm0 vpmovwb %ymm0, %xmm0 Patched compiler generates more optimized code involving multiplication in 2x-wider mode in cases where missing truncate instruction has to be emulated with a permutation (-mavx2): vpmovzxbw %xmm0, %ymm0 vpmovzxbw %xmm1, %ymm1 movl $255, %eax vpmullw %ymm1, %ymm0, %ymm1 vmovd %eax, %xmm0 vpbroadcastw %xmm0, %ymm0 vpand %ymm1, %ymm0, %ymm0 vpackuswb %ymm0, %ymm0, %ymm0 vpermq $216, %ymm0, %ymm0 The patch also adjusts cost calculation of V*QImode emulations to account for generation of 2x-wider mode instructions. gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_expand_vecop_qihi2): Rewrite to expand to 2x-wider (e.g. V16QI -> V16HImode) instructions when available. Emulate truncation via ix86_expand_vec_perm_const_1 when native truncate insn is not available. (ix86_expand_vecop_qihi_partial) : Use pmovzx when available. Trivially rename some variables. (ix86_expand_vecop_qihi): Unconditionally call ix86_expand_vecop_qihi2. * config/i386/i386.cc (ix86_multiplication_cost): Rewrite cost calculation of V*QImode emulations to account for generation of 2x-wider mode instructions. (ix86_shift_rotate_cost): Update cost calculation of V*QImode emulations to account for generation of 2x-wider mode instructions. gcc/testsuite/ChangeLog: * gcc.target/i386/avx512vl-pr95488-1.c: Revert 2023-05-18 change. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. --000000000000348a4e05fc882a67 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_li3faqc40 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYyBiL2djYy9jb25maWcv aTM4Ni9pMzg2LWV4cGFuZC5jYwppbmRleCA1YTU3YmU4MmU5OC4uMGQ4OTUzYjhjNzUgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYworKysgYi9nY2MvY29uZmlnL2kz ODYvaTM4Ni1leHBhbmQuY2MKQEAgLTIzMTA2LDY4ICsyMzEwNiw2IEBAIGl4ODZfZXhwYW5kX3Zl Y19pbnRlcmxlYXZlIChydHggdGFyZywgcnR4IG9wMCwgcnR4IG9wMSwgYm9vbCBoaWdoX3ApCiAg IGdjY19hc3NlcnQgKG9rKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIGFzIGl4 ODZfZXhwYW5kX3ZlY29wX3FpaGksCi0gICBidXQgb3B0aW1pemVkIHVuZGVyIEFWWDUxMkJXIGJ5 IHVzaW5nIHZwbW92d2IuCi0gICBGb3IgZXhhbXBsZSwgb3B0aW1pemUgdmVjdG9yIE1VTCBnZW5l cmF0aW9uIGxpa2UKLQotICAgdnBtb3Z6eGJ3IHltbTIsIHhtbTAKLSAgIHZwbW92enhidyB5bW0z LCB4bW0xCi0gICB2cG11bGx3ICAgeW1tNCwgeW1tMiwgeW1tMwotICAgdnBtb3Z3YiAgIHhtbTAs IHltbTQKLQotICAgaXQgd291bGQgdGFrZSBsZXNzIGluc3RydWN0aW9ucyB0aGFuIGl4ODZfZXhw YW5kX3ZlY29wX3FpaGkuCi0gICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzLiAgKi8KLQotc3RhdGlj IGJvb2wKLWl4ODZfZXhwYW5kX3ZlY29wX3FpaGkyIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBk ZXN0LCBydHggb3AxLCBydHggb3AyKQotewotICBtYWNoaW5lX21vZGUgaGltb2RlLCBxaW1vZGUg PSBHRVRfTU9ERSAoZGVzdCk7Ci0gIHJ0eCBob3AxLCBob3AyLCBoZGVzdDsKLSAgcnR4ICgqZ2Vu X3RydW5jYXRlKShydHgsIHJ0eCk7Ci0gIGJvb2wgdW5zX3AgPSAoY29kZSA9PSBBU0hJRlRSVCkg PyBmYWxzZSA6IHRydWU7Ci0KLSAgLyogVGhlcmUgYXJlIG5vIFY2NEhJbW9kZSBpbnN0cnVjdGlv bnMuICAqLwotICBpZiAocWltb2RlID09IFY2NFFJbW9kZSkKLSAgICByZXR1cm4gZmFsc2U7Ci0K LSAgLyogdnBtb3Z3YiBvbmx5IGF2YWlsYWJsZSB1bmRlciBBVlg1MTJCVy4gICovCi0gIGlmICgh VEFSR0VUX0FWWDUxMkJXKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAocWltb2RlID09IFYx NlFJbW9kZSAmJiAhVEFSR0VUX0FWWDUxMlZMKQotICAgIHJldHVybiBmYWxzZTsKLQotICAvKiBE byBub3QgZ2VuZXJhdGUgeW1tL3ptbSBpbnN0cnVjdGlvbnMgd2hlbgotICAgICB0YXJnZXQgcHJl ZmVycyAxMjgvMjU2IGJpdCB2ZWN0b3Igd2lkdGguICAqLwotICBpZiAoKHFpbW9kZSA9PSBWMTZR SW1vZGUgJiYgVEFSR0VUX1BSRUZFUl9BVlgxMjgpCi0gICAgICB8fCAocWltb2RlID09IFYzMlFJ bW9kZSAmJiBUQVJHRVRfUFJFRkVSX0FWWDI1NikpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHN3 aXRjaCAocWltb2RlKQotICAgIHsKLSAgICBjYXNlIEVfVjE2UUltb2RlOgotICAgICAgaGltb2Rl ID0gVjE2SEltb2RlOwotICAgICAgZ2VuX3RydW5jYXRlID0gZ2VuX3RydW5jdjE2aGl2MTZxaTI7 Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEVfVjMyUUltb2RlOgotICAgICAgaGltb2RlID0gVjMy SEltb2RlOwotICAgICAgZ2VuX3RydW5jYXRlID0gZ2VuX3RydW5jdjMyaGl2MzJxaTI7Ci0gICAg ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwotICAgIH0K LQotICBob3AxID0gZ2VuX3JlZ19ydHggKGhpbW9kZSk7Ci0gIGhvcDIgPSBnZW5fcmVnX3J0eCAo aGltb2RlKTsKLSAgaGRlc3QgPSBnZW5fcmVnX3J0eCAoaGltb2RlKTsKLSAgZW1pdF9pbnNuIChn ZW5fZXh0ZW5kX2luc24gKGhvcDEsIG9wMSwgaGltb2RlLCBxaW1vZGUsIHVuc19wKSk7Ci0gIGVt aXRfaW5zbiAoZ2VuX2V4dGVuZF9pbnNuIChob3AyLCBvcDIsIGhpbW9kZSwgcWltb2RlLCB1bnNf cCkpOwotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChoZGVzdCwgc2ltcGxpZnlfZ2VuX2JpbmFy eSAoY29kZSwgaGltb2RlLAotCQkJCQkJICAgICAgaG9wMSwgaG9wMikpKTsKLSAgZW1pdF9pbnNu IChnZW5fdHJ1bmNhdGUgKGRlc3QsIGhkZXN0KSk7Ci0gIHJldHVybiB0cnVlOwotfQotCiAvKiBF eHBhbmQgYSB2ZWN0b3Igb3BlcmF0aW9uIHNoaWZ0IGJ5IGNvbnN0YW50IGZvciBhIFYqUUltb2Rl IGluIHRlcm1zIG9mIHRoZQogICAgc2FtZSBvcGVyYXRpb24gb24gVipISW1vZGUuIFJldHVybiB0 cnVlIGlmIHN1Y2Nlc3MuICovCiBzdGF0aWMgYm9vbApAQCAtMjMyNzIsOSArMjMyMTAsOSBAQCB2 b2lkCiBpeDg2X2V4cGFuZF92ZWNvcF9xaWhpX3BhcnRpYWwgKGVudW0gcnR4X2NvZGUgY29kZSwg cnR4IGRlc3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiB7CiAgIG1hY2hpbmVfbW9kZSBxaW1vZGUgPSBH RVRfTU9ERSAoZGVzdCk7Ci0gIHJ0eCBxb3AxLCBxb3AyLCBob3AxLCBob3AyLCBxZGVzdCwgaHJl czsKKyAgcnR4IHFvcDEsIHFvcDIsIGhvcDEsIGhvcDIsIHFkZXN0LCBoZGVzdDsKICAgYm9vbCBv cDJ2ZWMgPSBHRVRfTU9ERV9DTEFTUyAoR0VUX01PREUgKG9wMikpID09IE1PREVfVkVDVE9SX0lO VDsKLSAgYm9vbCB1bnNfcCA9IHRydWU7CisgIGJvb2wgdW5zX3AgPSBjb2RlICE9IEFTSElGVFJU OwogCiAgIHN3aXRjaCAocWltb2RlKQogICAgIHsKQEAgLTIzMzA2LDI0ICsyMzI0NCwyNSBAQCBp eDg2X2V4cGFuZF92ZWNvcF9xaWhpX3BhcnRpYWwgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IGRl c3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiAgICAgewogICAgIGNhc2UgTVVMVDoKICAgICAgIGdjY19h c3NlcnQgKG9wMnZlYyk7Ci0gICAgICAvKiBVbnBhY2sgZGF0YSBzdWNoIHRoYXQgd2UndmUgZ290 IGEgc291cmNlIGJ5dGUgaW4gZWFjaCBsb3cgYnl0ZSBvZgotCSBlYWNoIHdvcmQuICBXZSBkb24n dCBjYXJlIHdoYXQgZ29lcyBpbnRvIHRoZSBoaWdoIGJ5dGUgb2YgZWFjaCB3b3JkLgotCSBSYXRo ZXIgdGhhbiB0cnlpbmcgdG8gZ2V0IHplcm8gaW4gdGhlcmUsIG1vc3QgY29udmVuaWVudCBpcyB0 byBsZXQKLQkgaXQgYmUgYSBjb3B5IG9mIHRoZSBsb3cgYnl0ZS4gICovCi0gICAgICBob3AxID0g Y29weV90b19yZWcgKHFvcDEpOwotICAgICAgaG9wMiA9IGNvcHlfdG9fcmVnIChxb3AyKTsKLSAg ICAgIGVtaXRfaW5zbiAoZ2VuX3ZlY19pbnRlcmxlYXZlX2xvd3YxNnFpIChob3AxLCBob3AxLCBo b3AxKSk7Ci0gICAgICBlbWl0X2luc24gKGdlbl92ZWNfaW50ZXJsZWF2ZV9sb3d2MTZxaSAoaG9w MiwgaG9wMiwgaG9wMikpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFTSElGVFJUOgotICAg ICAgdW5zX3AgPSBmYWxzZTsKKyAgICAgIGlmICghVEFSR0VUX1NTRTRfMSkKKwl7CisJICAvKiBV bnBhY2sgZGF0YSBzdWNoIHRoYXQgd2UndmUgZ290IGEgc291cmNlIGJ5dGUgaW4gZWFjaCBsb3cg Ynl0ZQorCSAgICAgb2YgZWFjaCB3b3JkLiAgV2UgZG9uJ3QgY2FyZSB3aGF0IGdvZXMgaW50byB0 aGUgaGlnaCBieXRlIG9mCisJICAgICBlYWNoIHdvcmQuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8g Z2V0IHplcm8gaW4gdGhlcmUsIG1vc3QKKwkgICAgIGNvbnZlbmllbnQgaXMgdG8gbGV0IGl0IGJl IGEgY29weSBvZiB0aGUgbG93IGJ5dGUuICAqLworCSAgaG9wMSA9IGNvcHlfdG9fcmVnIChxb3Ax KTsKKwkgIGhvcDIgPSBjb3B5X3RvX3JlZyAocW9wMik7CisJICBlbWl0X2luc24gKGdlbl92ZWNf aW50ZXJsZWF2ZV9sb3d2MTZxaSAoaG9wMSwgaG9wMSwgaG9wMSkpOworCSAgZW1pdF9pbnNuIChn ZW5fdmVjX2ludGVybGVhdmVfbG93djE2cWkgKGhvcDIsIGhvcDIsIGhvcDIpKTsKKwkgIGJyZWFr OworCX0KICAgICAgIC8qIEZBTExUSFJVICovCiAgICAgY2FzZSBBU0hJRlQ6CisgICAgY2FzZSBB U0hJRlRSVDoKICAgICBjYXNlIExTSElGVFJUOgogICAgICAgaG9wMSA9IGdlbl9yZWdfcnR4IChW OEhJbW9kZSk7CiAgICAgICBpeDg2X2V4cGFuZF9zc2VfdW5wYWNrIChob3AxLCBxb3AxLCB1bnNf cCwgZmFsc2UpOwotICAgICAgLyogdmFzaHIvdmxzaHIvdmFzaGwgICovCisgICAgICAvKiBtdWx0 L3Zhc2hyL3Zsc2hyL3Zhc2hsICAqLwogICAgICAgaWYgKG9wMnZlYykKIAl7CiAJICBob3AyID0g Z2VuX3JlZ19ydHggKFY4SEltb2RlKTsKQEAgLTIzMzQwLDE0ICsyMzI3OSwxNCBAQCBpeDg2X2V4 cGFuZF92ZWNvcF9xaWhpX3BhcnRpYWwgKGVudW0gcnR4X2NvZGUgY29kZSwgcnR4IGRlc3QsIHJ0 eCBvcDEsIHJ0eCBvcDIpCiAgIGlmIChjb2RlICE9IE1VTFQgJiYgb3AydmVjKQogICAgIHsKICAg ICAgIC8qIEV4cGFuZCB2YXNoci92bHNoci92YXNobC4gICovCi0gICAgICBocmVzID0gZ2VuX3Jl Z19ydHggKFY4SEltb2RlKTsKLSAgICAgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGhyZXMsCisg ICAgICBoZGVzdCA9IGdlbl9yZWdfcnR4IChWOEhJbW9kZSk7CisgICAgICBlbWl0X2luc24gKGdl bl9ydHhfU0VUIChoZGVzdCwKIAkJCSAgICAgIHNpbXBsaWZ5X2dlbl9iaW5hcnkgKGNvZGUsIFY4 SEltb2RlLAogCQkJCQkJICAgaG9wMSwgaG9wMikpKTsKICAgICB9CiAgIGVsc2UKICAgICAvKiBF eHBhbmQgbXVsdC9hc2hyL2xzaHIvYXNobC4gICovCi0gICAgaHJlcyA9IGV4cGFuZF9zaW1wbGVf Ymlub3AgKFY4SEltb2RlLCBjb2RlLCBob3AxLCBob3AyLAorICAgIGhkZXN0ID0gZXhwYW5kX3Np bXBsZV9iaW5vcCAoVjhISW1vZGUsIGNvZGUsIGhvcDEsIGhvcDIsCiAJCQkJTlVMTF9SVFgsIDEs IE9QVEFCX0RJUkVDVCk7CiAKICAgaWYgKFRBUkdFVF9BVlg1MTJCVyAmJiBUQVJHRVRfQVZYNTEy VkwpCkBAIC0yMzM1NywxOSArMjMyOTYsMTggQEAgaXg4Nl9leHBhbmRfdmVjb3BfcWloaV9wYXJ0 aWFsIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBkZXN0LCBydHggb3AxLCBydHggb3AyKQogICAg ICAgZWxzZQogCXFkZXN0ID0gZ2VuX3JlZ19ydHggKFY4UUltb2RlKTsKIAotICAgICAgZW1pdF9p bnNuIChnZW5fdHJ1bmN2OGhpdjhxaTIgKHFkZXN0LCBocmVzKSk7CisgICAgICBlbWl0X2luc24g KGdlbl90cnVuY3Y4aGl2OHFpMiAocWRlc3QsIGhkZXN0KSk7CiAgICAgfQogICBlbHNlCiAgICAg ewogICAgICAgc3RydWN0IGV4cGFuZF92ZWNfcGVybV9kIGQ7Ci0gICAgICBydHggcXJlcyA9IGdl bl9sb3dwYXJ0IChWMTZRSW1vZGUsIGhyZXMpOworICAgICAgcnR4IHFyZXMgPSBnZW5fbG93cGFy dCAoVjE2UUltb2RlLCBoZGVzdCk7CiAgICAgICBib29sIG9rOwogICAgICAgaW50IGk7CiAKICAg ICAgIC8qIE1lcmdlIHRoZSBkYXRhIGJhY2sgaW50byB0aGUgcmlnaHQgcGxhY2UuICAqLwogICAg ICAgZC50YXJnZXQgPSBxZGVzdDsKLSAgICAgIGQub3AwID0gcXJlczsKLSAgICAgIGQub3AxID0g cXJlczsKKyAgICAgIGQub3AwID0gZC5vcDEgPSBxcmVzOwogICAgICAgZC52bW9kZSA9IFYxNlFJ bW9kZTsKICAgICAgIGQubmVsdCA9IDE2OwogICAgICAgZC5vbmVfb3BlcmFuZF9wID0gZmFsc2U7 CkBAIC0yMzM4Niw2ICsyMzMyNCwxMTYgQEAgaXg4Nl9leHBhbmRfdmVjb3BfcWloaV9wYXJ0aWFs IChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBkZXN0LCBydHggb3AxLCBydHggb3AyKQogICAgIGVt aXRfbW92ZV9pbnNuIChkZXN0LCBnZW5fbG93cGFydCAocWltb2RlLCBxZGVzdCkpOwogfQogCisv KiBFbWl0IGluc3RydWN0aW9uIGluIDJ4IHdpZGVyIG1vZGUuICBGb3IgZXhhbXBsZSwgb3B0aW1p emUKKyAgIHZlY3RvciBNVUwgZ2VuZXJhdGlvbiBsaWtlCisKKyAgIHZwbW92enhidyB5bW0yLCB4 bW0wCisgICB2cG1vdnp4YncgeW1tMywgeG1tMQorICAgdnBtdWxsdyAgIHltbTQsIHltbTIsIHlt bTMKKyAgIHZwbW92d2IgICB4bW0wLCB5bW00CisKKyAgIGl0IHdvdWxkIHRha2UgbGVzcyBpbnN0 cnVjdGlvbnMgdGhhbiBpeDg2X2V4cGFuZF92ZWNvcF9xaWhpLgorICAgUmV0dXJuIHRydWUgaWYg c3VjY2Vzcy4gICovCisKK3N0YXRpYyBib29sCitpeDg2X2V4cGFuZF92ZWNvcF9xaWhpMiAoZW51 bSBydHhfY29kZSBjb2RlLCBydHggZGVzdCwgcnR4IG9wMSwgcnR4IG9wMikKK3sKKyAgbWFjaGlu ZV9tb2RlIGhpbW9kZSwgcWltb2RlID0gR0VUX01PREUgKGRlc3QpOworICBtYWNoaW5lX21vZGUg d3FpbW9kZTsKKyAgcnR4IHFvcDEsIHFvcDIsIGhvcDEsIGhvcDIsIGhkZXN0OworICBydHggKCpn ZW5fdHJ1bmNhdGUpKHJ0eCwgcnR4KSA9IE5VTEw7CisgIGJvb2wgb3AydmVjID0gR0VUX01PREVf Q0xBU1MgKEdFVF9NT0RFIChvcDIpKSA9PSBNT0RFX1ZFQ1RPUl9JTlQ7CisgIGJvb2wgdW5zX3Ag PSBjb2RlICE9IEFTSElGVFJUOworCisgIGlmICgocWltb2RlID09IFYxNlFJbW9kZSAmJiAhVEFS R0VUX0FWWDIpCisgICAgICB8fCAocWltb2RlID09IFYzMlFJbW9kZSAmJiAhVEFSR0VUX0FWWDUx MkJXKQorICAgICAgLyogVGhlcmUgYXJlIG5vIFY2NEhJbW9kZSBpbnN0cnVjdGlvbnMuICAqLwor ICAgICAgfHwgcWltb2RlID09IFY2NFFJbW9kZSkKKyAgICAgcmV0dXJuIGZhbHNlOworCisgIC8q IERvIG5vdCBnZW5lcmF0ZSB5bW0vem1tIGluc3RydWN0aW9ucyB3aGVuCisgICAgIHRhcmdldCBw cmVmZXJzIDEyOC8yNTYgYml0IHZlY3RvciB3aWR0aC4gICovCisgIGlmICgocWltb2RlID09IFYx NlFJbW9kZSAmJiBUQVJHRVRfUFJFRkVSX0FWWDEyOCkKKyAgICAgIHx8IChxaW1vZGUgPT0gVjMy UUltb2RlICYmIFRBUkdFVF9QUkVGRVJfQVZYMjU2KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg c3dpdGNoIChxaW1vZGUpCisgICAgeworICAgIGNhc2UgRV9WMTZRSW1vZGU6CisgICAgICBoaW1v ZGUgPSBWMTZISW1vZGU7CisgICAgICBpZiAoVEFSR0VUX0FWWDUxMlZMKQorCWdlbl90cnVuY2F0 ZSA9IGdlbl90cnVuY3YxNmhpdjE2cWkyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBFX1YzMlFJ bW9kZToKKyAgICAgIGhpbW9kZSA9IFYzMkhJbW9kZTsKKyAgICAgIGdlbl90cnVuY2F0ZSA9IGdl bl90cnVuY3YzMmhpdjMycWkyOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgd3FpbW9kZSA9IEdFVF9NT0RFXzJYV0lERVJf TU9ERSAocWltb2RlKS5yZXF1aXJlICgpOworICBxb3AxID0gbG93cGFydF9zdWJyZWcgKHdxaW1v ZGUsIGZvcmNlX3JlZyAocWltb2RlLCBvcDEpLCBxaW1vZGUpOworCisgIGlmIChvcDJ2ZWMpCisg ICAgcW9wMiA9IGxvd3BhcnRfc3VicmVnICh3cWltb2RlLCBmb3JjZV9yZWcgKHFpbW9kZSwgb3Ay KSwgcWltb2RlKTsKKyAgZWxzZQorICAgIHFvcDIgPSBvcDI7CisKKyAgaG9wMSA9IGdlbl9yZWdf cnR4IChoaW1vZGUpOworICBpeDg2X2V4cGFuZF9zc2VfdW5wYWNrIChob3AxLCBxb3AxLCB1bnNf cCwgZmFsc2UpOworCisgIGlmIChvcDJ2ZWMpCisgICAgeworICAgICAgaG9wMiA9IGdlbl9yZWdf cnR4IChoaW1vZGUpOworICAgICAgaXg4Nl9leHBhbmRfc3NlX3VucGFjayAoaG9wMiwgcW9wMiwg dW5zX3AsIGZhbHNlKTsKKyAgICB9CisgIGVsc2UKKyAgICBob3AyID0gcW9wMjsKKworICAgIGlm IChjb2RlICE9IE1VTFQgJiYgb3AydmVjKQorICAgICAgeworCS8qIEV4cGFuZCB2YXNoci92bHNo ci92YXNobC4gICovCisJaGRlc3QgPSBnZW5fcmVnX3J0eCAoaGltb2RlKTsKKwllbWl0X2luc24g KGdlbl9ydHhfU0VUIChoZGVzdCwKKwkJCQlzaW1wbGlmeV9nZW5fYmluYXJ5IChjb2RlLCBoaW1v ZGUsCisJCQkJCQkgICAgIGhvcDEsIGhvcDIpKSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAg LyogRXhwYW5kIG11bHQvYXNoci9sc2hyL2FzaGwuICAqLworICAgICAgaGRlc3QgPSBleHBhbmRf c2ltcGxlX2Jpbm9wIChoaW1vZGUsIGNvZGUsIGhvcDEsIGhvcDIsCisJCQkJICAgTlVMTF9SVFgs IDEsIE9QVEFCX0RJUkVDVCk7CisKKyAgaWYgKGdlbl90cnVuY2F0ZSkKKyAgICBlbWl0X2luc24g KGdlbl90cnVuY2F0ZSAoZGVzdCwgaGRlc3QpKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHN0cnVj dCBleHBhbmRfdmVjX3Blcm1fZCBkOworICAgICAgcnR4IHdxZGVzdCA9IGdlbl9yZWdfcnR4ICh3 cWltb2RlKTsKKyAgICAgIHJ0eCB3cXJlcyA9IGdlbl9sb3dwYXJ0ICh3cWltb2RlLCBoZGVzdCk7 CisgICAgICBib29sIG9rOworICAgICAgaW50IGk7CisKKyAgICAgIC8qIE1lcmdlIHRoZSBkYXRh IGJhY2sgaW50byB0aGUgcmlnaHQgcGxhY2UuICAqLworICAgICAgZC50YXJnZXQgPSB3cWRlc3Q7 CisgICAgICBkLm9wMCA9IGQub3AxID0gd3FyZXM7CisgICAgICBkLnZtb2RlID0gd3FpbW9kZTsK KyAgICAgIGQubmVsdCA9IEdFVF9NT0RFX05VTklUUyAod3FpbW9kZSk7CisgICAgICBkLm9uZV9v cGVyYW5kX3AgPSBmYWxzZTsKKyAgICAgIGQudGVzdGluZ19wID0gZmFsc2U7CisKKyAgICAgIGZv ciAoaSA9IDA7IGkgPCBkLm5lbHQ7ICsraSkKKwlkLnBlcm1baV0gPSBpICogMjsKKworICAgICAg b2sgPSBpeDg2X2V4cGFuZF92ZWNfcGVybV9jb25zdF8xICgmZCk7CisgICAgICBnY2NfYXNzZXJ0 IChvayk7CisKKyAgICAgIGVtaXRfbW92ZV9pbnNuIChkZXN0LCBnZW5fbG93cGFydCAocWltb2Rl LCB3cWRlc3QpKTsKKyAgICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIEV4cGFuZCBhIHZl Y3RvciBvcGVyYXRpb24gQ09ERSBmb3IgYSBWKlFJbW9kZSBpbiB0ZXJtcyBvZiB0aGUKICAgIHNh bWUgb3BlcmF0aW9uIG9uIFYqSEltb2RlLiAgKi8KIApAQCAtMjM0MDAsNyArMjM0NDgsNyBAQCBp eDg2X2V4cGFuZF92ZWNvcF9xaWhpIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eCBkZXN0LCBydHgg b3AxLCBydHggb3AyKQogICBib29sIG9wMnZlYyA9IEdFVF9NT0RFX0NMQVNTIChHRVRfTU9ERSAo b3AyKSkgPT0gTU9ERV9WRUNUT1JfSU5UOwogICBzdHJ1Y3QgZXhwYW5kX3ZlY19wZXJtX2QgZDsK ICAgYm9vbCBmdWxsX2ludGVybGVhdmUgPSB0cnVlOwotICBib29sIHVuc19wID0gdHJ1ZTsKKyAg Ym9vbCB1bnNfcCA9IGNvZGUgIT0gQVNISUZUUlQ7CiAgIGJvb2wgb2s7CiAgIGludCBpOwogCkBA IC0yMzQwOSw5ICsyMzQ1Nyw3IEBAIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGkgKGVudW0gcnR4X2Nv ZGUgY29kZSwgcnR4IGRlc3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiAgICAgICAmJiBpeDg2X2V4cGFu ZF92ZWNfc2hpZnRfcWloaV9jb25zdGFudCAoY29kZSwgZGVzdCwgb3AxLCBvcDIpKQogICAgIHJl dHVybjsKIAotICBpZiAoVEFSR0VUX0FWWDUxMkJXCi0gICAgICAmJiBWRUNUT1JfTU9ERV9QIChH RVRfTU9ERSAob3AyKSkKLSAgICAgICYmIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGkyIChjb2RlLCBk ZXN0LCBvcDEsIG9wMikpCisgIGlmIChpeDg2X2V4cGFuZF92ZWNvcF9xaWhpMiAoY29kZSwgZGVz dCwgb3AxLCBvcDIpKQogICAgIHJldHVybjsKIAogICBzd2l0Y2ggKHFpbW9kZSkKQEAgLTIzNDY4 LDEwICsyMzUxNCw4IEBAIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGkgKGVudW0gcnR4X2NvZGUgY29k ZSwgcnR4IGRlc3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiAgICAgICBlbWl0X2luc24gKGdlbl9paCAo b3AxX2gsIG9wMSwgb3AxKSk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgQVNISUZUUlQ6Ci0g ICAgICB1bnNfcCA9IGZhbHNlOwotICAgICAgLyogRkFMTFRIUlUgKi8KICAgICBjYXNlIEFTSElG VDoKKyAgICBjYXNlIEFTSElGVFJUOgogICAgIGNhc2UgTFNISUZUUlQ6CiAgICAgICBvcDFfbCA9 IGdlbl9yZWdfcnR4IChoaW1vZGUpOwogICAgICAgb3AxX2ggPSBnZW5fcmVnX3J0eCAoaGltb2Rl KTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmNjIGIvZ2NjL2NvbmZpZy9pMzg2 L2kzODYuY2MKaW5kZXggMjAyYWJmMGIzOWMuLmU1NDhkNjU4ODI4IDEwMDY0NAotLS0gYS9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5jYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jYwpAQCAtMjA0 OTcsNzUgKzIwNDk3LDEwOSBAQCBpeDg2X211bHRpcGxpY2F0aW9uX2Nvc3QgKGNvbnN0IHN0cnVj dCBwcm9jZXNzb3JfY29zdHMgKmNvc3QsCiAgICAgcmV0dXJuICBpeDg2X3ZlY19jb3N0IChtb2Rl LAogCQkJICAgaW5uZXJfbW9kZSA9PSBERm1vZGUgPyBjb3N0LT5tdWxzZCA6IGNvc3QtPm11bHNz KTsKICAgZWxzZSBpZiAoR0VUX01PREVfQ0xBU1MgKG1vZGUpID09IE1PREVfVkVDVE9SX0lOVCkK LSAgICBzd2l0Y2ggKG1vZGUpCi0gICAgICB7Ci0gICAgICBjYXNlIFY0UUltb2RlOgotICAgICAg Y2FzZSBWOFFJbW9kZToKLQkvKiBQYXJ0aWFsIFYqUUltb2RlIGlzIGVtdWxhdGVkIHdpdGggNC02 IGluc25zLiAgKi8KLQlpZiAoVEFSR0VUX0FWWDUxMkJXICYmIFRBUkdFVF9BVlg1MTJWTCkKLQkg IHJldHVybiBpeDg2X3ZlY19jb3N0IChtb2RlLCBjb3N0LT5tdWxzcyArIGNvc3QtPnNzZV9vcCAq IDMpOwotCWVsc2UgaWYgKFRBUkdFVF9BVlgyKQotCSAgcmV0dXJuIGl4ODZfdmVjX2Nvc3QgKG1v ZGUsIGNvc3QtPm11bHNzICsgY29zdC0+c3NlX29wICogNSk7Ci0JZWxzZSBpZiAoVEFSR0VUX1hP UCkKLQkgIHJldHVybiAoaXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKyBjb3N0LT5z c2Vfb3AgKiAzKQotCQkgICsgY29zdC0+c3NlX2xvYWRbMl0pOwotCWVsc2UKLQkgIHJldHVybiAo aXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKyBjb3N0LT5zc2Vfb3AgKiA0KQotCQkg ICsgY29zdC0+c3NlX2xvYWRbMl0pOwotCi0gICAgICBjYXNlIFYxNlFJbW9kZToKLQkvKiBWKlFJ bW9kZSBpcyBlbXVsYXRlZCB3aXRoIDQtMTEgaW5zbnMuICAqLwotCWlmIChUQVJHRVRfQVZYNTEy QlcgJiYgVEFSR0VUX0FWWDUxMlZMKQotCSAgcmV0dXJuIGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNv c3QtPm11bHNzICsgY29zdC0+c3NlX29wICogMyk7Ci0JZWxzZSBpZiAoVEFSR0VUX0FWWDIpCi0J ICByZXR1cm4gaXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKiAyICsgY29zdC0+c3Nl X29wICogOCk7Ci0JZWxzZSBpZiAoVEFSR0VUX1hPUCkKLQkgIHJldHVybiAoaXg4Nl92ZWNfY29z dCAobW9kZSwgY29zdC0+bXVsc3MgKiAyICsgY29zdC0+c3NlX29wICogNSkKLQkJICArIGNvc3Qt PnNzZV9sb2FkWzJdKTsKLQllbHNlCi0JICByZXR1cm4gKGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNv c3QtPm11bHNzICogMiArIGNvc3QtPnNzZV9vcCAqIDcpCi0JCSAgKyBjb3N0LT5zc2VfbG9hZFsy XSk7CisgICAgeworICAgICAgaW50IG5tdWx0cywgbm9wczsKKyAgICAgIC8qIENvc3Qgb2YgcmVh ZGluZyB0aGUgbWVtb3J5LiAgKi8KKyAgICAgIGludCBleHRyYTsKIAotICAgICAgY2FzZSBWMzJR SW1vZGU6Ci0JaWYgKFRBUkdFVF9BVlg1MTJCVykKLQkgIHJldHVybiBpeDg2X3ZlY19jb3N0ICht b2RlLCBjb3N0LT5tdWxzcyArIGNvc3QtPnNzZV9vcCAqIDMpOwotCWVsc2UKLQkgIHJldHVybiAo aXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKiAyICsgY29zdC0+c3NlX29wICogNykK LQkJICArIGNvc3QtPnNzZV9sb2FkWzNdICogMik7Ci0KLSAgICAgIGNhc2UgVjY0UUltb2RlOgot CXJldHVybiAoaXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKiAyICsgY29zdC0+c3Nl X29wICogOSkKLQkJKyBjb3N0LT5zc2VfbG9hZFszXSAqIDIKLQkJKyBjb3N0LT5zc2VfbG9hZFs0 XSAqIDIpOwotCi0gICAgICBjYXNlIFY0U0ltb2RlOgotCS8qIHBtdWxsZCBpcyB1c2VkIGluIHRo aXMgY2FzZS4gTm8gZW11bGF0aW9uIGlzIG5lZWRlZC4gICovCi0JaWYgKFRBUkdFVF9TU0U0XzEp Ci0JICBnb3RvIGRvX25hdGl2ZTsKLQkvKiBWNFNJbW9kZSBpcyBlbXVsYXRlZCB3aXRoIDcgaW5z bnMuICAqLwotCWVsc2UKLQkgIHJldHVybiBpeDg2X3ZlY19jb3N0IChtb2RlLCBjb3N0LT5tdWxz cyAqIDIgKyBjb3N0LT5zc2Vfb3AgKiA1KTsKLQotICAgICAgY2FzZSBWMkRJbW9kZToKLSAgICAg IGNhc2UgVjRESW1vZGU6Ci0JLyogdnBtdWxscSBpcyB1c2VkIGluIHRoaXMgY2FzZS4gTm8gZW11 bGF0aW9uIGlzIG5lZWRlZC4gICovCi0JaWYgKFRBUkdFVF9BVlg1MTJEUSAmJiBUQVJHRVRfQVZY NTEyVkwpCi0JICBnb3RvIGRvX25hdGl2ZTsKLQkvKiBWKkRJbW9kZSBpcyBlbXVsYXRlZCB3aXRo IDYtOCBpbnNucy4gICovCi0JZWxzZSBpZiAoVEFSR0VUX1hPUCAmJiBtb2RlID09IFYyREltb2Rl KQotCSAgcmV0dXJuIGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNvc3QtPm11bHNzICogMiArIGNvc3Qt PnNzZV9vcCAqIDQpOwotCS8qIEZBTExUSFJVICovCi0gICAgICBjYXNlIFY4REltb2RlOgotCS8q IHZwbXVsbHEgaXMgdXNlZCBpbiB0aGlzIGNhc2UuIE5vIGVtdWxhdGlvbiBpcyBuZWVkZWQuICAq LwotCWlmIChUQVJHRVRfQVZYNTEyRFEgJiYgbW9kZSA9PSBWOERJbW9kZSkKLQkgIGdvdG8gZG9f bmF0aXZlOwotCWVsc2UKLQkgIHJldHVybiBpeDg2X3ZlY19jb3N0IChtb2RlLCBjb3N0LT5tdWxz cyAqIDMgKyBjb3N0LT5zc2Vfb3AgKiA1KTsKKyAgICAgIHN3aXRjaCAobW9kZSkKKwl7CisJY2Fz ZSBWNFFJbW9kZToKKwljYXNlIFY4UUltb2RlOgorCSAgLyogUGFydGlhbCBWKlFJbW9kZSBpcyBl bXVsYXRlZCB3aXRoIDQtNiBpbnNucy4gICovCisJICBubXVsdHMgPSAxOworCSAgbm9wcyA9IDM7 CisJICBleHRyYSA9IDA7CiAKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICBkb19uYXRpdmU6Ci0JcmV0 dXJuIGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNvc3QtPm11bHNzKTsKLSAgICAgIH0KKwkgIGlmIChU QVJHRVRfQVZYNTEyQlcgJiYgVEFSR0VUX0FWWDUxMlZMKQorCSAgICA7CisJICBlbHNlIGlmIChU QVJHRVRfQVZYMikKKwkgICAgbm9wcyArPSAyOworCSAgZWxzZSBpZiAoVEFSR0VUX1hPUCkKKwkg ICAgZXh0cmEgKz0gY29zdC0+c3NlX2xvYWRbMl07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBu b3BzICs9IDE7CisJICAgICAgZXh0cmEgKz0gY29zdC0+c3NlX2xvYWRbMl07CisJICAgIH0KKwkg IGdvdG8gZG9fcWltb2RlOworCisJY2FzZSBWMTZRSW1vZGU6CisJICAvKiBWKlFJbW9kZSBpcyBl bXVsYXRlZCB3aXRoIDQtMTEgaW5zbnMuICAqLworCSAgbm11bHRzID0gMTsKKwkgIG5vcHMgPSAz OworCSAgZXh0cmEgPSAwOworCisJICBpZiAoVEFSR0VUX0FWWDIgJiYgIVRBUkdFVF9QUkVGRVJf QVZYMTI4KQorCSAgICB7CisJICAgICAgaWYgKCEoVEFSR0VUX0FWWDUxMkJXICYmIFRBUkdFVF9B Vlg1MTJWTCkpCisJCW5vcHMgKz0gMzsKKwkgICAgfQorCSAgZWxzZSBpZiAoVEFSR0VUX1hPUCkK KwkgICAgeworCSAgICAgIG5tdWx0cyArPSAxOworCSAgICAgIG5vcHMgKz0gMjsKKwkgICAgICBl eHRyYSArPSBjb3N0LT5zc2VfbG9hZFsyXTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAg ICAgbm11bHRzICs9IDE7CisJICAgICAgbm9wcyArPSA0OworCSAgICAgIGV4dHJhICs9IGNvc3Qt PnNzZV9sb2FkWzJdOworCSAgICB9CisJICBnb3RvIGRvX3FpbW9kZTsKKworCWNhc2UgVjMyUUlt b2RlOgorCSAgbm11bHRzID0gMTsKKwkgIG5vcHMgPSAzOworCSAgZXh0cmEgPSAwOworCisJICBp ZiAoIVRBUkdFVF9BVlg1MTJCVyB8fCBUQVJHRVRfUFJFRkVSX0FWWDI1NikKKwkgICAgeworCSAg ICAgIG5tdWx0cyArPSAxOworCSAgICAgIG5vcHMgKz0gNDsKKwkgICAgICBleHRyYSArPSBjb3N0 LT5zc2VfbG9hZFszXSAqIDI7CisJICAgIH0KKwkgIGdvdG8gZG9fcWltb2RlOworCisJY2FzZSBW NjRRSW1vZGU6CisJICBubXVsdHMgPSAyOworCSAgbm9wcyA9IDk7CisJICBleHRyYSA9IGNvc3Qt PnNzZV9sb2FkWzNdICogMiArIGNvc3QtPnNzZV9sb2FkWzRdICogMjsKKworCWRvX3FpbW9kZToK KwkgIHJldHVybiBpeDg2X3ZlY19jb3N0IChtb2RlLCBjb3N0LT5tdWxzcyAqIG5tdWx0cworCQkJ CSsgY29zdC0+c3NlX29wICogbm9wcykgKyBleHRyYTsKKworCWNhc2UgVjRTSW1vZGU6CisJICAv KiBwbXVsbGQgaXMgdXNlZCBpbiB0aGlzIGNhc2UuIE5vIGVtdWxhdGlvbiBpcyBuZWVkZWQuICAq LworCSAgaWYgKFRBUkdFVF9TU0U0XzEpCisJICAgIGdvdG8gZG9fbmF0aXZlOworCSAgLyogVjRT SW1vZGUgaXMgZW11bGF0ZWQgd2l0aCA3IGluc25zLiAgKi8KKwkgIGVsc2UKKwkgICAgcmV0dXJu IGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNvc3QtPm11bHNzICogMiArIGNvc3QtPnNzZV9vcCAqIDUp OworCisJY2FzZSBWMkRJbW9kZToKKwljYXNlIFY0REltb2RlOgorCSAgLyogdnBtdWxscSBpcyB1 c2VkIGluIHRoaXMgY2FzZS4gTm8gZW11bGF0aW9uIGlzIG5lZWRlZC4gICovCisJICBpZiAoVEFS R0VUX0FWWDUxMkRRICYmIFRBUkdFVF9BVlg1MTJWTCkKKwkgICAgZ290byBkb19uYXRpdmU7CisJ ICAvKiBWKkRJbW9kZSBpcyBlbXVsYXRlZCB3aXRoIDYtOCBpbnNucy4gICovCisJICBlbHNlIGlm IChUQVJHRVRfWE9QICYmIG1vZGUgPT0gVjJESW1vZGUpCisJICAgIHJldHVybiBpeDg2X3ZlY19j b3N0IChtb2RlLCBjb3N0LT5tdWxzcyAqIDIgKyBjb3N0LT5zc2Vfb3AgKiA0KTsKKwkgIC8qIEZB TExUSFJVICovCisJY2FzZSBWOERJbW9kZToKKwkgIC8qIHZwbXVsbHEgaXMgdXNlZCBpbiB0aGlz IGNhc2UuIE5vIGVtdWxhdGlvbiBpcyBuZWVkZWQuICAqLworCSAgaWYgKFRBUkdFVF9BVlg1MTJE USAmJiBtb2RlID09IFY4REltb2RlKQorCSAgICBnb3RvIGRvX25hdGl2ZTsKKwkgIGVsc2UKKwkg ICAgcmV0dXJuIGl4ODZfdmVjX2Nvc3QgKG1vZGUsIGNvc3QtPm11bHNzICogMyArIGNvc3QtPnNz ZV9vcCAqIDUpOworCisJZGVmYXVsdDoKKwlkb19uYXRpdmU6CisJICByZXR1cm4gaXg4Nl92ZWNf Y29zdCAobW9kZSwgY29zdC0+bXVsc3MpOworCX0KKyAgICB9CiAgIGVsc2UKICAgICByZXR1cm4g KGNvc3QtPm11bHRfaW5pdFtNT0RFX0lOREVYIChtb2RlKV0gKyBjb3N0LT5tdWx0X2JpdCAqIDcp OwogfQpAQCAtMjA2MzcsMTYgKzIwNjcxLDEzIEBAIGl4ODZfc2hpZnRfcm90YXRlX2Nvc3QgKGNv bnN0IHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgKmNvc3QsCiAJCWNvdW50ID0gMjsKIAkgICAgfQog CSAgZWxzZSBpZiAoVEFSR0VUX0FWWDUxMkJXICYmIFRBUkdFVF9BVlg1MTJWTCkKLQkgICAgewot CSAgICAgIGNvdW50ID0gMzsKLQkgICAgICByZXR1cm4gaXg4Nl92ZWNfY29zdCAobW9kZSwgY29z dC0+c3NlX29wICogY291bnQpOwotCSAgICB9CisJICAgIHJldHVybiBpeDg2X3ZlY19jb3N0ICht b2RlLCBjb3N0LT5zc2Vfb3AgKiA0KTsKIAkgIGVsc2UgaWYgKFRBUkdFVF9TU0U0XzEpCi0JICAg IGNvdW50ID0gNDsKLQkgIGVsc2UgaWYgKGNvZGUgPT0gQVNISUZUUlQpCiAJICAgIGNvdW50ID0g NTsKKwkgIGVsc2UgaWYgKGNvZGUgPT0gQVNISUZUUlQpCisJICAgIGNvdW50ID0gNjsKIAkgIGVs c2UKLQkgICAgY291bnQgPSA0OworCSAgICBjb3VudCA9IDU7CiAJICByZXR1cm4gaXg4Nl92ZWNf Y29zdCAobW9kZSwgY29zdC0+c3NlX29wICogY291bnQpICsgZXh0cmE7CiAKIAljYXNlIFYxNlFJ bW9kZToKQEAgLTIwNjYzLDcgKzIwNjk0LDcgQEAgaXg4Nl9zaGlmdF9yb3RhdGVfY29zdCAoY29u c3Qgc3RydWN0IHByb2Nlc3Nvcl9jb3N0cyAqY29zdCwKIAkJfQogCSAgICAgIGVsc2UKIAkJewot CQkgIGNvdW50ID0gKGNvZGUgPT0gQVNISUZUKSA/IDIgOiAzOworCQkgIGNvdW50ID0gKGNvZGUg PT0gQVNISUZUKSA/IDMgOiA0OwogCQkgIHJldHVybiBpeDg2X3ZlY19jb3N0IChtb2RlLCBjb3N0 LT5zc2Vfb3AgKiBjb3VudCk7CiAJCX0KIAkgICAgfQpAQCAtMjA2ODUsMTIgKzIwNzE2LDIwIEBA IGl4ODZfc2hpZnRfcm90YXRlX2Nvc3QgKGNvbnN0IHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgKmNv c3QsCiAJICAgICAgZWxzZQogCQljb3VudCA9IDI7CiAJICAgIH0KKwkgIGVsc2UgaWYgKFRBUkdF VF9BVlg1MTJCVworCQkgICAmJiAoKG1vZGUgPT0gVjMyUUltb2RlICYmICFUQVJHRVRfUFJFRkVS X0FWWDI1NikKKwkJICAgICAgIHx8IChtb2RlID09IFYxNlFJbW9kZSAmJiBUQVJHRVRfQVZYNTEy VkwKKwkJCSAgICYmICFUQVJHRVRfUFJFRkVSX0FWWDEyOCkpKQorCSAgICByZXR1cm4gaXg4Nl92 ZWNfY29zdCAobW9kZSwgY29zdC0+c3NlX29wICogNCk7CisJICBlbHNlIGlmIChUQVJHRVRfQVZY MgorCQkgICAmJiBtb2RlID09IFYxNlFJbW9kZSAmJiAhVEFSR0VUX1BSRUZFUl9BVlgxMjgpCisJ ICAgIGNvdW50ID0gNjsKIAkgIGVsc2UgaWYgKFRBUkdFVF9TU0U0XzEpCi0JICAgIGNvdW50ID0g ODsKLQkgIGVsc2UgaWYgKGNvZGUgPT0gQVNISUZUUlQpCiAJICAgIGNvdW50ID0gOTsKKwkgIGVs c2UgaWYgKGNvZGUgPT0gQVNISUZUUlQpCisJICAgIGNvdW50ID0gMTA7CiAJICBlbHNlCi0JICAg IGNvdW50ID0gODsKKwkgICAgY291bnQgPSA5OwogCSAgcmV0dXJuIGl4ODZfdmVjX2Nvc3QgKG1v ZGUsIGNvc3QtPnNzZV9vcCAqIGNvdW50KSArIGV4dHJhOwogCiAJY2FzZSBWMkRJbW9kZToKQEAg LTIwNzA0LDYgKzIwNzQzLDggQEAgaXg4Nl9zaGlmdF9yb3RhdGVfY29zdCAoY29uc3Qgc3RydWN0 IHByb2Nlc3Nvcl9jb3N0cyAqY29zdCwKIAkJICAgIGNvdW50ID0gVEFSR0VUX1NTRTRfMiA/IDEg OiAyOwogCQkgIGVsc2UgaWYgKFRBUkdFVF9YT1ApCiAJCSAgICBjb3VudCA9IDI7CisJCSAgZWxz ZSBpZiAoVEFSR0VUX1NTRTRfMSkKKwkJICAgIGNvdW50ID0gMzsKIAkJICBlbHNlCiAJCSAgICBj b3VudCA9IDQ7CiAJCX0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMnZsLXByOTU0ODgtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4 NTEydmwtcHI5NTQ4OC0xLmMKaW5kZXggNWU5ZjRmMjgwNWMuLmRjNjg0YTE2N2M4IDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1wcjk1NDg4LTEuYwor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC1wcjk1NDg4LTEuYwpA QCAtMSw4ICsxLDcgQEAKIC8qIFBSIHRhcmdldC9wcjk1NDg4ICAqLwogLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KIC8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXZ4NTEyYncgLW1hdng1MTJ2bCIgfSAg Ki8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBtb3Z6eGJ3IiA0IHsg dGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAidnB1bnBja2xidyIgNCB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZwbW92enhidyIgOCB7IHRhcmdldCB7 ICEgaWEzMiB9IH0gfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InZwbXVsbHdcW15cblxdKnltbSIgMiB9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAidnBtdWxsd1xbXlxuXF0qeG1tIiAyIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9 IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBtb3Z3YiIgNCB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCg== --000000000000348a4e05fc882a67--