From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) by sourceware.org (Postfix) with ESMTPS id 15ED83858D38 for ; Wed, 14 Jun 2023 10:15:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 15ED83858D38 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-qt1-x833.google.com with SMTP id d75a77b69052e-3f9dc03029eso16351121cf.3 for ; Wed, 14 Jun 2023 03:15:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686737750; x=1689329750; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=XMOf9rOxPrN/ij+8CikwjxDVTNLSYmRZjaU6+O3EITk=; b=JPsWBNCgrA/XEYbGQ0qzOUYX93QaDVRJ4/K9WGVcxMw0TpMmOnrjiSb6s6lRsWiYrl dgjFq2wSN3vidfkzdu1aWqk/Pevq5I3euvCNGbiQUINedT+sQHQS1qdDbvJul3QNfowp wjwb+WqFTE8xayk272rPHAV1oaIPqkT+YLp1FBhP7bg7vJVnPSjWRV3NSl9N8/MZCaaT kADbul7wb+claUJCp9856eGMpN+1OZrnfcobC3MWzz4XqAuaF5uHCg4/+1sH0fKsMa4y +A2YDnGUdvjfN+TI5YGyVDQ+jxb/x9+rUlPZavBqEO45NXLZkXuQwRH9bSgw0iiiAfuu jg/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686737750; x=1689329750; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=XMOf9rOxPrN/ij+8CikwjxDVTNLSYmRZjaU6+O3EITk=; b=iehfNAdnZ/Dd7Oys58lEdJk9zav9wVsTKMrb6NxnqZGKFL4LWI8xxRMkcyBkuw3xIC i5jR/3CdLDcArd3Zy23Miqxo68sg+UuxCQgxSDFs3EXoBZ7gcmcjsWFlYYLCaDkyjOO6 5apzhHGPX6XA+72/MlyxSEBscVIFuKBMKUfPgoqyCGbGIz0tDwePmrnIAK5B4ojy8UBm i2TCR5Djq87iBqeafLGkqY1Qsxf4t3EjwSSl9haskCWYSK8koSeZbZwzEecvMNq3l8hR Mtae/wZi6NE1OJ4BWttu/1hyij30zsUsrSUe/VYLcj1Clgt0f8YHlVoH2oSycZYaoVNb qqPg== X-Gm-Message-State: AC+VfDwGE2S9jiYH/986+ClTfwo7//C/YYQNR1JkMSDwxvBsLCbMEeBn DiGLpE/108mQbSxOYBYwYahAg6G8xonLVbmcpAtToRiNkYrZSA== X-Google-Smtp-Source: ACHHUZ45IM0fiKofaw5CpxtvxVOoPr3XoHdI1GOI5j1SN2UaRIuc0nSuBmSDjDPvBwMmkusLGaQXfbaV6IGJilUBopc= X-Received: by 2002:a05:6214:e4a:b0:615:a18b:d5af with SMTP id o10-20020a0562140e4a00b00615a18bd5afmr17265141qvc.35.1686737750034; Wed, 14 Jun 2023 03:15:50 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Wed, 14 Jun 2023 12:15:38 +0200 Message-ID: Subject: [PATCH] RTL: Merge rtx_equal_p and hash_rtx functions with their callback variants To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000006bddc805fe143cc5" X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --0000000000006bddc805fe143cc5 Content-Type: text/plain; charset="UTF-8" Use default argument when callback function is not required to merge rtx_equal_p and hash_rtx functions with their callback variants. gcc/ChangeLog: * cse.cc (hash_rtx_cb): Rename to hash_rtx. (hash_rtx): Remove. * early-remat.cc (remat_candidate_hasher::equal): Update to call rtx_equal_p with rtx_equal_p_callback_function argument. * rtl.cc (rtx_equal_p_cb): Rename to rtx_equal_p. (rtx_equal_p): Remove. * rtl.h (rtx_equal_p): Add rtx_equal_p_callback_function argument with NULL default value. (rtx_equal_p_cb): Remove function declaration. (hash_rtx_cb): Ditto. (hash_rtx): Add hash_rtx_callback_function argument with NULL default value. * sel-sched-ir.cc (free_nop_pool): Update function comment. (skip_unspecs_callback): Ditto. (vinsn_init): Update to call hash_rtx with hash_rtx_callback_function argument. (vinsn_equal_p): Ditto. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. OK for master? Uros. --0000000000006bddc805fe143cc5 Content-Type: text/plain; charset="US-ASCII"; name="cb.diff.txt" Content-Disposition: attachment; filename="cb.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_livk31rw0 ZGlmZiAtLWdpdCBhL2djYy9jc2UuY2MgYi9nY2MvY3NlLmNjCmluZGV4IDJiYjYzYWM0MTA1Li42 ZjJlMGQ0MzE4NSAxMDA2NDQKLS0tIGEvZ2NjL2NzZS5jYworKysgYi9nY2MvY3NlLmNjCkBAIC0y MjA4LDEzICsyMjA4LDI2IEBAIGhhc2hfcnR4X3N0cmluZyAoY29uc3QgY2hhciAqcHMpCiAgIHJl dHVybiBoYXNoOwogfQogCi0vKiBTYW1lIGFzIGhhc2hfcnR4LCBidXQgY2FsbCBDQiBvbiBlYWNo IHJ0eCBpZiBpdCBpcyBub3QgTlVMTC4KKy8qIEhhc2ggYW4gcnR4LiAgV2UgYXJlIGNhcmVmdWwg dG8gbWFrZSBzdXJlIHRoZSB2YWx1ZSBpcyBuZXZlciBuZWdhdGl2ZS4KKyAgIEVxdWl2YWxlbnQg cmVnaXN0ZXJzIGhhc2ggaWRlbnRpY2FsbHkuCisgICBNT0RFIGlzIHVzZWQgaW4gaGFzaGluZyBm b3IgQ09OU1RfSU5UcyBvbmx5OworICAgb3RoZXJ3aXNlIHRoZSBtb2RlIG9mIFggaXMgdXNlZC4K KworICAgU3RvcmUgMSBpbiBET19OT1RfUkVDT1JEX1AgaWYgYW55IHN1YmV4cHJlc3Npb24gaXMg dm9sYXRpbGUuCisKKyAgIElmIEhBU0hfQVJHX0lOX01FTU9SWV9QIGlzIG5vdCBOVUxMLCBzdG9y ZSAxIGluIGl0IGlmIFggY29udGFpbnMKKyAgIGEgTUVNIHJ0eCB3aGljaCBkb2VzIG5vdCBoYXZl IHRoZSBNRU1fUkVBRE9OTFlfUCBmbGFnIHNldC4KKworICAgTm90ZSB0aGF0IGNzZV9pbnNuIGtu b3dzIHRoYXQgdGhlIGhhc2ggY29kZSBvZiBhIE1FTSBleHByZXNzaW9uCisgICBpcyBqdXN0IChp bnQpIE1FTSBwbHVzIHRoZSBoYXNoIGNvZGUgb2YgdGhlIGFkZHJlc3MuCisKKyAgIENhbGwgQ0Ig b24gZWFjaCBydHggaWYgQ0IgaXMgbm90IE5VTEwuCiAgICBXaGVuIHRoZSBjYWxsYmFjayByZXR1 cm5zIHRydWUsIHdlIGNvbnRpbnVlIHdpdGggdGhlIG5ldyBydHguICAqLwogCiB1bnNpZ25lZAot aGFzaF9ydHhfY2IgKGNvbnN0X3J0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwKLSAgICAgICAgICAg ICBpbnQgKmRvX25vdF9yZWNvcmRfcCwgaW50ICpoYXNoX2FyZ19pbl9tZW1vcnlfcCwKLSAgICAg ICAgICAgICBib29sIGhhdmVfcmVnX3F0eSwgaGFzaF9ydHhfY2FsbGJhY2tfZnVuY3Rpb24gY2Ip CitoYXNoX3J0eCAoY29uc3RfcnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLAorCSAgaW50ICpkb19u b3RfcmVjb3JkX3AsIGludCAqaGFzaF9hcmdfaW5fbWVtb3J5X3AsCisJICBib29sIGhhdmVfcmVn X3F0eSwgaGFzaF9ydHhfY2FsbGJhY2tfZnVuY3Rpb24gY2IpCiB7CiAgIGludCBpLCBqOwogICB1 bnNpZ25lZCBoYXNoID0gMDsKQEAgLTIyMzQsOCArMjI0Nyw4IEBAIGhhc2hfcnR4X2NiIChjb25z dF9ydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsCiAgIGlmIChjYiAhPSBOVUxMCiAgICAgICAmJiAo KCpjYikgKHgsIG1vZGUsICZuZXd4LCAmbmV3bW9kZSkpKQogICAgIHsKLSAgICAgIGhhc2ggKz0g aGFzaF9ydHhfY2IgKG5ld3gsIG5ld21vZGUsIGRvX25vdF9yZWNvcmRfcCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhhc2hfYXJnX2luX21lbW9yeV9wLCBoYXZlX3JlZ19xdHksIGNiKTsK KyAgICAgIGhhc2ggKz0gaGFzaF9ydHggKG5ld3gsIG5ld21vZGUsIGRvX25vdF9yZWNvcmRfcCwK KwkJCWhhc2hfYXJnX2luX21lbW9yeV9wLCBoYXZlX3JlZ19xdHksIGNiKTsKICAgICAgIHJldHVy biBoYXNoOwogICAgIH0KIApAQCAtMjM1NSw5ICsyMzY4LDkgQEAgaGFzaF9ydHhfY2IgKGNvbnN0 X3J0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwKIAlmb3IgKGkgPSAwOyBpIDwgdW5pdHM7ICsraSkK IAkgIHsKIAkgICAgZWx0ID0gQ09OU1RfVkVDVE9SX0VOQ09ERURfRUxUICh4LCBpKTsKLQkgICAg aGFzaCArPSBoYXNoX3J0eF9jYiAoZWx0LCBHRVRfTU9ERSAoZWx0KSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvX25vdF9yZWNvcmRfcCwgaGFzaF9hcmdfaW5fbWVtb3J5X3As Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX3JlZ19xdHksIGNiKTsKKwkg ICAgaGFzaCArPSBoYXNoX3J0eCAoZWx0LCBHRVRfTU9ERSAoZWx0KSwKKwkJCSAgICAgIGRvX25v dF9yZWNvcmRfcCwgaGFzaF9hcmdfaW5fbWVtb3J5X3AsCisJCQkgICAgICBoYXZlX3JlZ19xdHks IGNiKTsKIAkgIH0KIAogCXJldHVybiBoYXNoOwpAQCAtMjQ2MywxMCArMjQ3NiwxMCBAQCBoYXNo X3J0eF9jYiAoY29uc3RfcnR4IHgsIG1hY2hpbmVfbW9kZSBtb2RlLAogCSAgICB7CiAJICAgICAg Zm9yIChpID0gMTsgaSA8IEFTTV9PUEVSQU5EU19JTlBVVF9MRU5HVEggKHgpOyBpKyspCiAJCXsK LQkJICBoYXNoICs9IChoYXNoX3J0eF9jYiAoQVNNX09QRVJBTkRTX0lOUFVUICh4LCBpKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9ERSAoQVNNX09QRVJB TkRTX0lOUFVUICh4LCBpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZG9fbm90X3JlY29yZF9wLCBoYXNoX2FyZ19pbl9tZW1vcnlfcCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX3JlZ19xdHksIGNiKQorCQkgIGhhc2ggKz0g KGhhc2hfcnR4IChBU01fT1BFUkFORFNfSU5QVVQgKHgsIGkpLAorCQkJCSAgICAgR0VUX01PREUg KEFTTV9PUEVSQU5EU19JTlBVVCAoeCwgaSkpLAorCQkJCSAgICAgZG9fbm90X3JlY29yZF9wLCBo YXNoX2FyZ19pbl9tZW1vcnlfcCwKKwkJCQkgICAgIGhhdmVfcmVnX3F0eSwgY2IpCiAJCQkgICAr IGhhc2hfcnR4X3N0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFTTV9PUEVSQU5E U19JTlBVVF9DT05TVFJBSU5UICh4LCBpKSkpOwogCQl9CkBAIC0yNTAyLDE2ICsyNTE1LDE2IEBA IGhhc2hfcnR4X2NiIChjb25zdF9ydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsCiAJICAgICAgZ290 byByZXBlYXQ7CiAJICAgIH0KIAotCSAgaGFzaCArPSBoYXNoX3J0eF9jYiAoWEVYUCAoeCwgaSks IFZPSURtb2RlLCBkb19ub3RfcmVjb3JkX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaGFzaF9hcmdfaW5fbWVtb3J5X3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGF2ZV9yZWdfcXR5LCBjYik7CisJICBoYXNoICs9IGhhc2hfcnR4IChYRVhQICh4LCBpKSwgVk9J RG1vZGUsIGRvX25vdF9yZWNvcmRfcCwKKwkJCSAgICBoYXNoX2FyZ19pbl9tZW1vcnlfcCwKKwkJ CSAgICBoYXZlX3JlZ19xdHksIGNiKTsKIAkgIGJyZWFrOwogCiAJY2FzZSAnRSc6CiAJICBmb3Ig KGogPSAwOyBqIDwgWFZFQ0xFTiAoeCwgaSk7IGorKykKLQkgICAgaGFzaCArPSBoYXNoX3J0eF9j YiAoWFZFQ0VYUCAoeCwgaSwgaiksIFZPSURtb2RlLCBkb19ub3RfcmVjb3JkX3AsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2FyZ19pbl9tZW1vcnlfcCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVfcmVnX3F0eSwgY2IpOworCSAgICBoYXNoICs9 IGhhc2hfcnR4IChYVkVDRVhQICh4LCBpLCBqKSwgVk9JRG1vZGUsIGRvX25vdF9yZWNvcmRfcCwK KwkJCSAgICAgIGhhc2hfYXJnX2luX21lbW9yeV9wLAorCQkJICAgICAgaGF2ZV9yZWdfcXR5LCBj Yik7CiAJICBicmVhazsKIAogCWNhc2UgJ3MnOgpAQCAtMjUzOCwyNyArMjU1MSw2IEBAIGhhc2hf cnR4X2NiIChjb25zdF9ydHggeCwgbWFjaGluZV9tb2RlIG1vZGUsCiAgIHJldHVybiBoYXNoOwog fQogCi0vKiBIYXNoIGFuIHJ0eC4gIFdlIGFyZSBjYXJlZnVsIHRvIG1ha2Ugc3VyZSB0aGUgdmFs dWUgaXMgbmV2ZXIgbmVnYXRpdmUuCi0gICBFcXVpdmFsZW50IHJlZ2lzdGVycyBoYXNoIGlkZW50 aWNhbGx5LgotICAgTU9ERSBpcyB1c2VkIGluIGhhc2hpbmcgZm9yIENPTlNUX0lOVHMgb25seTsK LSAgIG90aGVyd2lzZSB0aGUgbW9kZSBvZiBYIGlzIHVzZWQuCi0KLSAgIFN0b3JlIDEgaW4gRE9f Tk9UX1JFQ09SRF9QIGlmIGFueSBzdWJleHByZXNzaW9uIGlzIHZvbGF0aWxlLgotCi0gICBJZiBI QVNIX0FSR19JTl9NRU1PUllfUCBpcyBub3QgTlVMTCwgc3RvcmUgMSBpbiBpdCBpZiBYIGNvbnRh aW5zCi0gICBhIE1FTSBydHggd2hpY2ggZG9lcyBub3QgaGF2ZSB0aGUgTUVNX1JFQURPTkxZX1Ag ZmxhZyBzZXQuCi0KLSAgIE5vdGUgdGhhdCBjc2VfaW5zbiBrbm93cyB0aGF0IHRoZSBoYXNoIGNv ZGUgb2YgYSBNRU0gZXhwcmVzc2lvbgotICAgaXMganVzdCAoaW50KSBNRU0gcGx1cyB0aGUgaGFz aCBjb2RlIG9mIHRoZSBhZGRyZXNzLiAgKi8KLQotdW5zaWduZWQKLWhhc2hfcnR4IChjb25zdF9y dHggeCwgbWFjaGluZV9tb2RlIG1vZGUsIGludCAqZG9fbm90X3JlY29yZF9wLAotCSAgaW50ICpo YXNoX2FyZ19pbl9tZW1vcnlfcCwgYm9vbCBoYXZlX3JlZ19xdHkpCi17Ci0gIHJldHVybiBoYXNo X3J0eF9jYiAoeCwgbW9kZSwgZG9fbm90X3JlY29yZF9wLAotICAgICAgICAgICAgICAgICAgICAg IGhhc2hfYXJnX2luX21lbW9yeV9wLCBoYXZlX3JlZ19xdHksIE5VTEwpOwotfQotCiAvKiBIYXNo IGFuIHJ0eCBYIGZvciBjc2UgdmlhIGhhc2hfcnR4LgogICAgU3RvcmVzIDEgaW4gZG9fbm90X3Jl Y29yZCBpZiBhbnkgc3ViZXhwcmVzc2lvbiBpcyB2b2xhdGlsZS4KICAgIFN0b3JlcyAxIGluIGhh c2hfYXJnX2luX21lbW9yeSBpZiBYIGNvbnRhaW5zIGEgbWVtIHJ0eCB3aGljaApkaWZmIC0tZ2l0 IGEvZ2NjL2Vhcmx5LXJlbWF0LmNjIGIvZ2NjL2Vhcmx5LXJlbWF0LmNjCmluZGV4IDFlZTYzYzcz YzFiLi45M2NlZjYwYzc5MCAxMDA2NDQKLS0tIGEvZ2NjL2Vhcmx5LXJlbWF0LmNjCisrKyBiL2dj Yy9lYXJseS1yZW1hdC5jYwpAQCAtNTA0LDcgKzUwNCw3IEBAIHByaXZhdGU6CiAKIGVhcmx5X3Jl bWF0ICplYXJseV9yZW1hdDo6ZXI7CiAKLS8qIHJ0eF9lcXVhbF9wX2NiIGNhbGxiYWNrIHRoYXQg dHJlYXRzIGFueSB0d28gU0NSQVRDSGVzIGFzIGVxdWFsLgorLyogcnR4X2VxdWFsX3AgY2FsbGJh Y2sgdGhhdCB0cmVhdHMgYW55IHR3byBTQ1JBVENIZXMgYXMgZXF1YWwuCiAgICBUaGlzIGFsbG93 cyB1cyB0byBjb21wYXJlIHR3byBjb3BpZXMgb2YgYSBwYXR0ZXJuLCBldmVuIHRob3VnaCB0aGVp cgogICAgU0NSQVRDSGVzIGFyZSBhbHdheXMgZGlzdGluY3QuICAqLwogCkBAIC01MzQsMTAgKzUz NCw4IEBAIHJlbWF0X2NhbmRpZGF0ZV9oYXNoZXI6OmVxdWFsIChjb25zdCByZW1hdF9jYW5kaWRh dGUgKmNhbmQxLAogewogICByZXR1cm4gKGNhbmQxLT5yZWdubyA9PSBjYW5kMi0+cmVnbm8KIAkg ICYmIGNhbmQxLT5jb25zdGFudF9wID09IGNhbmQyLT5jb25zdGFudF9wCi0JICAmJiAoY2FuZDEt PmNvbnN0YW50X3AKLQkgICAgICA/IHJ0eF9lcXVhbF9wIChjYW5kMS0+cmVtYXRfcnR4LCBjYW5k Mi0+cmVtYXRfcnR4KQotCSAgICAgIDogcnR4X2VxdWFsX3BfY2IgKGNhbmQxLT5yZW1hdF9ydHgs IGNhbmQyLT5yZW1hdF9ydHgsCi0JCQkJc2NyYXRjaF9lcXVhbCkpCisJICAmJiBydHhfZXF1YWxf cCAoY2FuZDEtPnJlbWF0X3J0eCwgY2FuZDItPnJlbWF0X3J0eCwKKwkJCSAgY2FuZDEtPmNvbnN0 YW50X3AgPyBOVUxMIDogc2NyYXRjaF9lcXVhbCkKIAkgICYmICghY2FuZDEtPnVzZXMgfHwgYml0 bWFwX2VxdWFsX3AgKGNhbmQxLT51c2VzLCBjYW5kMi0+dXNlcykpKTsKIH0KIApkaWZmIC0tZ2l0 IGEvZ2NjL3J0bC5jYyBiL2djYy9ydGwuY2MKaW5kZXggMDc0ODQyN2M4ZDQuLjBjMDA0OTQ3NzUx IDEwMDY0NAotLS0gYS9nY2MvcnRsLmNjCisrKyBiL2djYy9ydGwuY2MKQEAgLTQxMiwxMyArNDEy LDE0IEBAIGludCBjdXJyZW50bHlfZXhwYW5kaW5nX3RvX3J0bDsKIAogDAogCi0vKiBTYW1lIGFz IHJ0eF9lcXVhbF9wLCBidXQgY2FsbCBDQiBvbiBlYWNoIHBhaXIgb2YgcnR4IGlmIENCIGlzIG5v dCBOVUxMLgotICAgV2hlbiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB3ZSBjb250aW51ZSB3 aXRoIHRoZSBuZXcgcGFpci4KLSAgIFdoZW5ldmVyIGNoYW5naW5nIHRoaXMgZnVuY3Rpb24gY2hl Y2sgaWYgcnR4X2VxdWFsX3AgYmVsb3cgZG9lc24ndCBuZWVkCi0gICBjaGFuZ2luZyBhcyB3ZWxs LiAgKi8KKy8qIFJldHVybiAxIGlmIFggYW5kIFkgYXJlIGlkZW50aWNhbC1sb29raW5nIHJ0eCdz LgorICAgVGhpcyBpcyB0aGUgTGlzcCBmdW5jdGlvbiBFUVVBTCBmb3IgcnR4IGFyZ3VtZW50cy4K KworICAgQ2FsbCBDQiBvbiBlYWNoIHBhaXIgb2YgcnR4IGlmIENCIGlzIG5vdCBOVUxMLgorICAg V2hlbiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB3ZSBjb250aW51ZSB3aXRoIHRoZSBuZXcg cGFpci4gICovCiAKIGludAotcnR4X2VxdWFsX3BfY2IgKGNvbnN0X3J0eCB4LCBjb25zdF9ydHgg eSwgcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24gY2IpCitydHhfZXF1YWxfcCAoY29uc3Rf cnR4IHgsIGNvbnN0X3J0eCB5LCBydHhfZXF1YWxfcF9jYWxsYmFja19mdW5jdGlvbiBjYikKIHsK ICAgaW50IGk7CiAgIGludCBqOwpAQCAtNDM0LDE1NCArNDM1LDcgQEAgcnR4X2VxdWFsX3BfY2Ig KGNvbnN0X3J0eCB4LCBjb25zdF9ydHggeSwgcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24g Y2IpCiAgIC8qIEludm9rZSB0aGUgY2FsbGJhY2sgZmlyc3QuICAqLwogICBpZiAoY2IgIT0gTlVM TAogICAgICAgJiYgKCgqY2IpICgmeCwgJnksICZueCwgJm55KSkpCi0gICAgcmV0dXJuIHJ0eF9l cXVhbF9wX2NiIChueCwgbnksIGNiKTsKLQotICBjb2RlID0gR0VUX0NPREUgKHgpOwotICAvKiBS dHgncyBvZiBkaWZmZXJlbnQgY29kZXMgY2Fubm90IGJlIGVxdWFsLiAgKi8KLSAgaWYgKGNvZGUg IT0gR0VUX0NPREUgKHkpKQotICAgIHJldHVybiAwOwotCi0gIC8qIChNVUxUOlNJIHggeSkgYW5k IChNVUxUOkhJIHggeSkgYXJlIE5PVCBlcXVpdmFsZW50LgotICAgICAoUkVHOlNJIHgpIGFuZCAo UkVHOkhJIHgpIGFyZSBOT1QgZXF1aXZhbGVudC4gICovCi0KLSAgaWYgKEdFVF9NT0RFICh4KSAh PSBHRVRfTU9ERSAoeSkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgLyogTUVNcyByZWZlcnJpbmcgdG8g ZGlmZmVyZW50IGFkZHJlc3Mgc3BhY2UgYXJlIG5vdCBlcXVpdmFsZW50LiAgKi8KLSAgaWYgKGNv ZGUgPT0gTUVNICYmIE1FTV9BRERSX1NQQUNFICh4KSAhPSBNRU1fQUREUl9TUEFDRSAoeSkpCi0g ICAgcmV0dXJuIDA7Ci0KLSAgLyogU29tZSBSVEwgY2FuIGJlIGNvbXBhcmVkIG5vbnJlY3Vyc2l2 ZWx5LiAgKi8KLSAgc3dpdGNoIChjb2RlKQotICAgIHsKLSAgICBjYXNlIFJFRzoKLSAgICAgIHJl dHVybiAoUkVHTk8gKHgpID09IFJFR05PICh5KSk7Ci0KLSAgICBjYXNlIExBQkVMX1JFRjoKLSAg ICAgIHJldHVybiBsYWJlbF9yZWZfbGFiZWwgKHgpID09IGxhYmVsX3JlZl9sYWJlbCAoeSk7Ci0K LSAgICBjYXNlIFNZTUJPTF9SRUY6Ci0gICAgICByZXR1cm4gWFNUUiAoeCwgMCkgPT0gWFNUUiAo eSwgMCk7Ci0KLSAgICBjYXNlIERFQlVHX0VYUFI6Ci0gICAgY2FzZSBWQUxVRToKLSAgICBjYXNl IFNDUkFUQ0g6Ci0gICAgQ0FTRV9DT05TVF9VTklRVUU6Ci0gICAgICByZXR1cm4gMDsKLQotICAg IGNhc2UgQ09OU1RfVkVDVE9SOgotICAgICAgaWYgKCFzYW1lX3ZlY3Rvcl9lbmNvZGluZ3NfcCAo eCwgeSkpCi0JcmV0dXJuIGZhbHNlOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERFQlVHX0lN UExJQ0lUX1BUUjoKLSAgICAgIHJldHVybiBERUJVR19JTVBMSUNJVF9QVFJfREVDTCAoeCkKLQkg ICAgID09IERFQlVHX0lNUExJQ0lUX1BUUl9ERUNMICh5KTsKLQotICAgIGNhc2UgREVCVUdfUEFS QU1FVEVSX1JFRjoKLSAgICAgIHJldHVybiBERUJVR19QQVJBTUVURVJfUkVGX0RFQ0wgKHgpCi0J ICAgICA9PSBERUJVR19QQVJBTUVURVJfUkVGX0RFQ0wgKHkpOwotCi0gICAgY2FzZSBFTlRSWV9W QUxVRToKLSAgICAgIHJldHVybiBydHhfZXF1YWxfcF9jYiAoRU5UUllfVkFMVUVfRVhQICh4KSwg RU5UUllfVkFMVUVfRVhQICh5KSwgY2IpOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwot ICAgIH0KLQotICAvKiBDb21wYXJlIHRoZSBlbGVtZW50cy4gIElmIGFueSBwYWlyIG9mIGNvcnJl c3BvbmRpbmcgZWxlbWVudHMKLSAgICAgZmFpbCB0byBtYXRjaCwgcmV0dXJuIDAgZm9yIHRoZSB3 aG9sZSB0aGluZy4gICovCi0KLSAgZm10ID0gR0VUX1JUWF9GT1JNQVQgKGNvZGUpOwotICBmb3Ig KGkgPSBHRVRfUlRYX0xFTkdUSCAoY29kZSkgLSAxOyBpID49IDA7IGktLSkKLSAgICB7Ci0gICAg ICBzd2l0Y2ggKGZtdFtpXSkKLQl7Ci0JY2FzZSAndyc6Ci0JICBpZiAoWFdJTlQgKHgsIGkpICE9 IFhXSU5UICh5LCBpKSkKLQkgICAgcmV0dXJuIDA7Ci0JICBicmVhazsKLQotCWNhc2UgJ24nOgot CWNhc2UgJ2knOgotCSAgaWYgKFhJTlQgKHgsIGkpICE9IFhJTlQgKHksIGkpKQotCSAgICB7Ci0j aWZuZGVmIEdFTkVSQVRPUl9GSUxFCi0JICAgICAgaWYgKCgoY29kZSA9PSBBU01fT1BFUkFORFMg JiYgaSA9PSA2KQotCQkgICB8fCAoY29kZSA9PSBBU01fSU5QVVQgJiYgaSA9PSAxKSkKLQkJICAm JiBYSU5UICh4LCBpKSA9PSBYSU5UICh5LCBpKSkKLQkJYnJlYWs7Ci0jZW5kaWYKLQkgICAgICBy ZXR1cm4gMDsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlICdwJzoKLQkgIGlmIChtYXliZV9u ZSAoU1VCUkVHX0JZVEUgKHgpLCBTVUJSRUdfQllURSAoeSkpKQotCSAgICByZXR1cm4gMDsKLQkg IGJyZWFrOwotCi0JY2FzZSAnVic6Ci0JY2FzZSAnRSc6Ci0JICAvKiBUd28gdmVjdG9ycyBtdXN0 IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgKi8KLQkgIGlmIChYVkVDTEVOICh4LCBpKSAhPSBYVkVD TEVOICh5LCBpKSkKLQkgICAgcmV0dXJuIDA7Ci0KLQkgIC8qIEFuZCB0aGUgY29ycmVzcG9uZGlu ZyBlbGVtZW50cyBtdXN0IG1hdGNoLiAgKi8KLQkgIGZvciAoaiA9IDA7IGogPCBYVkVDTEVOICh4 LCBpKTsgaisrKQotCSAgICBpZiAocnR4X2VxdWFsX3BfY2IgKFhWRUNFWFAgKHgsIGksIGopLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYVkVDRVhQICh5LCBpLCBqKSwgY2IpID09 IDApCi0JICAgICAgcmV0dXJuIDA7Ci0JICBicmVhazsKLQotCWNhc2UgJ2UnOgotCSAgaWYgKHJ0 eF9lcXVhbF9wX2NiIChYRVhQICh4LCBpKSwgWEVYUCAoeSwgaSksIGNiKSA9PSAwKQotCSAgICBy ZXR1cm4gMDsKLQkgIGJyZWFrOwotCi0JY2FzZSAnUyc6Ci0JY2FzZSAncyc6Ci0JICBpZiAoKFhT VFIgKHgsIGkpIHx8IFhTVFIgKHksIGkpKQotCSAgICAgICYmICghIFhTVFIgKHgsIGkpIHx8ICEg WFNUUiAoeSwgaSkKLQkJICB8fCBzdHJjbXAgKFhTVFIgKHgsIGkpLCBYU1RSICh5LCBpKSkpKQot CSAgICByZXR1cm4gMDsKLQkgIGJyZWFrOwotCi0JY2FzZSAndSc6Ci0JICAvKiBUaGVzZSBhcmUg anVzdCBiYWNrcG9pbnRlcnMsIHNvIHRoZXkgZG9uJ3QgbWF0dGVyLiAgKi8KLQkgIGJyZWFrOwot Ci0JY2FzZSAnMCc6Ci0JY2FzZSAndCc6Ci0JICBicmVhazsKLQotCSAgLyogSXQgaXMgYmVsaWV2 ZWQgdGhhdCBydHgncyBhdCB0aGlzIGxldmVsIHdpbGwgbmV2ZXIKLQkgICAgIGNvbnRhaW4gYW55 dGhpbmcgYnV0IGludGVnZXJzIGFuZCBvdGhlciBydHgncywKLQkgICAgIGV4Y2VwdCBmb3Igd2l0 aGluIExBQkVMX1JFRnMgYW5kIFNZTUJPTF9SRUZzLiAgKi8KLQlkZWZhdWx0OgotCSAgZ2NjX3Vu cmVhY2hhYmxlICgpOwotCX0KLSAgICB9Ci0gIHJldHVybiAxOwotfQotCi0vKiBSZXR1cm4gMSBp ZiBYIGFuZCBZIGFyZSBpZGVudGljYWwtbG9va2luZyBydHgncy4KLSAgIFRoaXMgaXMgdGhlIExp c3AgZnVuY3Rpb24gRVFVQUwgZm9yIHJ0eCBhcmd1bWVudHMuCi0gICBXaGVuZXZlciBjaGFuZ2lu ZyB0aGlzIGZ1bmN0aW9uIGNoZWNrIGlmIHJ0eF9lcXVhbF9wX2NiIGFib3ZlIGRvZXNuJ3QgbmVl ZAotICAgY2hhbmdpbmcgYXMgd2VsbC4gICovCi0KLWludAotcnR4X2VxdWFsX3AgKGNvbnN0X3J0 eCB4LCBjb25zdF9ydHggeSkKLXsKLSAgaW50IGk7Ci0gIGludCBqOwotICBlbnVtIHJ0eF9jb2Rl IGNvZGU7Ci0gIGNvbnN0IGNoYXIgKmZtdDsKLQotICBpZiAoeCA9PSB5KQotICAgIHJldHVybiAx OwotICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcnR4 X2VxdWFsX3AgKG54LCBueSwgY2IpOwogCiAgIGNvZGUgPSBHRVRfQ09ERSAoeCk7CiAgIC8qIFJ0 eCdzIG9mIGRpZmZlcmVudCBjb2RlcyBjYW5ub3QgYmUgZXF1YWwuICAqLwpAQCAtNjMwLDcgKzQ4 NCw3IEBAIHJ0eF9lcXVhbF9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4IHkpCiAJICAgICA9PSBE RUJVR19QQVJBTUVURVJfUkVGX0RFQ0wgKHkpOwogCiAgICAgY2FzZSBFTlRSWV9WQUxVRToKLSAg ICAgIHJldHVybiBydHhfZXF1YWxfcCAoRU5UUllfVkFMVUVfRVhQICh4KSwgRU5UUllfVkFMVUVf RVhQICh5KSk7CisgICAgICByZXR1cm4gcnR4X2VxdWFsX3AgKEVOVFJZX1ZBTFVFX0VYUCAoeCks IEVOVFJZX1ZBTFVFX0VYUCAoeSksIGNiKTsKIAogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsK QEAgLTY3NiwxMiArNTMwLDEyIEBAIHJ0eF9lcXVhbF9wIChjb25zdF9ydHggeCwgY29uc3RfcnR4 IHkpCiAKIAkgIC8qIEFuZCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBtdXN0IG1hdGNoLiAg Ki8KIAkgIGZvciAoaiA9IDA7IGogPCBYVkVDTEVOICh4LCBpKTsgaisrKQotCSAgICBpZiAocnR4 X2VxdWFsX3AgKFhWRUNFWFAgKHgsIGksIGopLCAgWFZFQ0VYUCAoeSwgaSwgaikpID09IDApCisJ ICAgIGlmIChydHhfZXF1YWxfcCAoWFZFQ0VYUCAoeCwgaSwgaiksIFhWRUNFWFAgKHksIGksIGop LCBjYikgPT0gMCkKIAkgICAgICByZXR1cm4gMDsKIAkgIGJyZWFrOwogCiAJY2FzZSAnZSc6Ci0J ICBpZiAocnR4X2VxdWFsX3AgKFhFWFAgKHgsIGkpLCBYRVhQICh5LCBpKSkgPT0gMCkKKwkgIGlm IChydHhfZXF1YWxfcCAoWEVYUCAoeCwgaSksIFhFWFAgKHksIGkpLCBjYikgPT0gMCkKIAkgICAg cmV0dXJuIDA7CiAJICBicmVhazsKIApkaWZmIC0tZ2l0IGEvZ2NjL3J0bC5oIGIvZ2NjL3J0bC5o CmluZGV4IDk4ODY5MWY1NzEwLi4zOTk1MjE2YjU4YiAxMDA2NDQKLS0tIGEvZ2NjL3J0bC5oCisr KyBiL2djYy9ydGwuaApAQCAtMzAwOCw3ICszMDA4LDEyIEBAIGV4dGVybiBydHggY29weV9ydHhf aWZfc2hhcmVkIChydHgpOwogLyogSW4gcnRsLmNjICovCiBleHRlcm4gdW5zaWduZWQgaW50IHJ0 eF9zaXplIChjb25zdF9ydHgpOwogZXh0ZXJuIHJ0eCBzaGFsbG93X2NvcHlfcnR4IChjb25zdF9y dHggQ1hYX01FTV9TVEFUX0lORk8pOwotZXh0ZXJuIGludCBydHhfZXF1YWxfcCAoY29uc3RfcnR4 LCBjb25zdF9ydHgpOworCit0eXBlZGVmIGludCAoKnJ0eF9lcXVhbF9wX2NhbGxiYWNrX2Z1bmN0 aW9uKSAoY29uc3RfcnR4ICosIGNvbnN0X3J0eCAqLAorCQkJCQkgICAgICBydHggKiwgcnR4ICop OworZXh0ZXJuIGludCBydHhfZXF1YWxfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgsCisJCQlydHhf ZXF1YWxfcF9jYWxsYmFja19mdW5jdGlvbiA9IE5VTEwpOworCiBleHRlcm4gYm9vbCBydHZlY19h bGxfZXF1YWxfcCAoY29uc3RfcnR2ZWMpOwogZXh0ZXJuIGJvb2wgcnR2ZWNfc2VyaWVzX3AgKHJ0 dmVjLCBpbnQpOwogCkBAIC0zNzEwLDE2ICszNzE1LDYgQEAgdHlwZWRlZiBpbnQgKCpmb3JfZWFj aF9pbmNfZGVjX2ZuKSAocnR4IG1lbSwgcnR4IG9wLCBydHggZGVzdCwgcnR4IHNyYywKIAkJCQkg ICAgcnR4IHNyY29mZiwgdm9pZCAqYXJnKTsKIGV4dGVybiBpbnQgZm9yX2VhY2hfaW5jX2RlYyAo cnR4LCBmb3JfZWFjaF9pbmNfZGVjX2ZuLCB2b2lkICphcmcpOwogCi10eXBlZGVmIGludCAoKnJ0 eF9lcXVhbF9wX2NhbGxiYWNrX2Z1bmN0aW9uKSAoY29uc3RfcnR4ICosIGNvbnN0X3J0eCAqLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eCAqLCBydHgg Kik7Ci1leHRlcm4gaW50IHJ0eF9lcXVhbF9wX2NiIChjb25zdF9ydHgsIGNvbnN0X3J0eCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eF9lcXVhbF9wX2NhbGxiYWNrX2Z1bmN0aW9uKTsK LQotdHlwZWRlZiBpbnQgKCpoYXNoX3J0eF9jYWxsYmFja19mdW5jdGlvbikgKGNvbnN0X3J0eCwg bWFjaGluZV9tb2RlLCBydHggKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtYWNoaW5lX21vZGUgKik7Ci1leHRlcm4gdW5zaWduZWQgaGFzaF9ydHhfY2IgKGNv bnN0X3J0eCwgbWFjaGluZV9tb2RlLCBpbnQgKiwgaW50ICosCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wsIGhhc2hfcnR4X2NhbGxiYWNrX2Z1bmN0aW9uKTsKLQogZXh0ZXJuIHJ0 eCByZWdub191c2VfaW4gKHVuc2lnbmVkIGludCwgcnR4KTsKIGV4dGVybiBib29sIGF1dG9faW5j X3AgKGNvbnN0X3J0eCk7CiBleHRlcm4gYm9vbCBpbl9pbnNuX2xpc3RfcCAoY29uc3QgcnR4X2lu c25fbGlzdCAqLCBjb25zdCBydHhfaW5zbiAqKTsKQEAgLTQxNDIsNyArNDEzNywxMSBAQCBleHRl cm4gaW50IHJ0eF90b190cmVlX2NvZGUgKGVudW0gcnR4X2NvZGUpOwogLyogSW4gY3NlLmNjICov CiBleHRlcm4gaW50IGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyAocnR4X2luc24gKiwgaW50 KTsKIGV4dGVybiBib29sIGV4cF9lcXVpdl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCwgaW50LCBi b29sKTsKLWV4dGVybiB1bnNpZ25lZCBoYXNoX3J0eCAoY29uc3RfcnR4IHgsIG1hY2hpbmVfbW9k ZSwgaW50ICosIGludCAqLCBib29sKTsKKwordHlwZWRlZiBpbnQgKCpoYXNoX3J0eF9jYWxsYmFj a19mdW5jdGlvbikgKGNvbnN0X3J0eCwgbWFjaGluZV9tb2RlLCBydHggKiwKKwkJCQkJICAgbWFj aGluZV9tb2RlICopOworZXh0ZXJuIHVuc2lnbmVkIGhhc2hfcnR4IChjb25zdF9ydHgsIG1hY2hp bmVfbW9kZSwgaW50ICosIGludCAqLAorCQkJICBib29sLCBoYXNoX3J0eF9jYWxsYmFja19mdW5j dGlvbiA9IE5VTEwpOwogCiAvKiBJbiBkc2UuY2MgKi8KIGV4dGVybiBib29sIGNoZWNrX2Zvcl9p bmNfZGVjIChydHhfaW5zbiAqaW5zbik7CmRpZmYgLS1naXQgYS9nY2Mvc2VsLXNjaGVkLWlyLmNj IGIvZ2NjL3NlbC1zY2hlZC1pci5jYwppbmRleCA5MjQxOTg3ZDRmZC4uMmM4MmU4NTRiMjYgMTAw NjQ0Ci0tLSBhL2djYy9zZWwtc2NoZWQtaXIuY2MKKysrIGIvZ2NjL3NlbC1zY2hlZC1pci5jYwpA QCAtMTA3Niw3ICsxMDc2LDcgQEAgZnJlZV9ub3BfcG9vbCAodm9pZCkKIH0KIAwKIAotLyogU2tp cCB1bnNwZWMgdG8gc3VwcG9ydCBpYTY0IHNwZWN1bGF0aW9uLiBDYWxsZWQgZnJvbSBydHhfZXF1 YWxfcF9jYi4KKy8qIFNraXAgdW5zcGVjIHRvIHN1cHBvcnQgaWE2NCBzcGVjdWxhdGlvbi4gQ2Fs bGVkIGZyb20gcnR4X2VxdWFsX3AuCiAgICBUaGUgY2FsbGJhY2sgaXMgZ2l2ZW4gdHdvIHJ0eGVz IFhYIGFuZCBZWSBhbmQgd3JpdGVzIHRoZSBuZXcgcnR4ZXMKICAgIHRvIE5YIGFuZCBOWSBpbiBj YXNlIHNvbWUgbmVlZHMgdG8gYmUgc2tpcHBlZC4gICovCiBzdGF0aWMgaW50CkBAIC0xMTA2LDcg KzExMDYsNyBAQCBza2lwX3Vuc3BlY3NfY2FsbGJhY2sgKGNvbnN0X3J0eCAqeHgsIGNvbnN0X3J0 eCAqeXksIHJ0eCAqbngsIHJ0eCogbnkpCiAgIHJldHVybiAwOwogfQogCi0vKiBDYWxsYmFjaywg Y2FsbGVkIGZyb20gaGFzaF9ydHhfY2IuICBIZWxwcyB0byBoYXNoIFVOU1BFQyBydHggWCBpbiBh IGNvcnJlY3Qgd2F5CisvKiBDYWxsYmFjaywgY2FsbGVkIGZyb20gaGFzaF9ydHguICBIZWxwcyB0 byBoYXNoIFVOU1BFQyBydHggWCBpbiBhIGNvcnJlY3Qgd2F5CiAgICB0byBzdXBwb3J0IGlhNjQg c3BlY3VsYXRpb24uICBXaGVuIGNoYW5nZXMgYXJlIG5lZWRlZCwgbmV3IHJ0eCBYIGFuZCBuZXcg bW9kZQogICAgTk1PREUgYXJlIHdyaXR0ZW4sIGFuZCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVl LiAgKi8KIHN0YXRpYyBpbnQKQEAgLTExODgsMTYgKzExODgsMTYgQEAgdmluc25faW5pdCAodmlu c25fdCB2aSwgaW5zbl90IGluc24sIGJvb2wgZm9yY2VfdW5pcXVlX3ApCiAgICAgewogICAgICAg cnR4IHJocyA9IFZJTlNOX1JIUyAodmkpOwogCi0gICAgICBWSU5TTl9IQVNIICh2aSkgPSBoYXNo X3J0eF9jYiAocmhzLCBHRVRfTU9ERSAocmhzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCBOVUxMLCBmYWxzZSwgaHJjZik7Ci0gICAgICBWSU5TTl9IQVNIX1JU WCAodmkpID0gaGFzaF9ydHhfY2IgKFZJTlNOX1BBVFRFUk4gKHZpKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVk9JRG1vZGUsIE5VTEwsIE5VTEwsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBocmNmKTsKKyAgICAgIFZJ TlNOX0hBU0ggKHZpKSA9IGhhc2hfcnR4IChyaHMsIEdFVF9NT0RFIChyaHMpLAorCQkJCSAgTlVM TCwgTlVMTCwgZmFsc2UsIGhyY2YpOworICAgICAgVklOU05fSEFTSF9SVFggKHZpKSA9IGhhc2hf cnR4IChWSU5TTl9QQVRURVJOICh2aSksCisJCQkJICAgICAgVk9JRG1vZGUsIE5VTEwsIE5VTEws CisJCQkJICAgICAgZmFsc2UsIGhyY2YpOwogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIFZJ TlNOX0hBU0ggKHZpKSA9IGhhc2hfcnR4X2NiIChWSU5TTl9QQVRURVJOICh2aSksIFZPSURtb2Rl LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIGZhbHNl LCBocmNmKTsKKyAgICAgIFZJTlNOX0hBU0ggKHZpKSA9IGhhc2hfcnR4IChWSU5TTl9QQVRURVJO ICh2aSksIFZPSURtb2RlLAorCQkJCSAgTlVMTCwgTlVMTCwgZmFsc2UsIGhyY2YpOwogICAgICAg VklOU05fSEFTSF9SVFggKHZpKSA9IFZJTlNOX0hBU0ggKHZpKTsKICAgICB9CiAKQEAgLTE2MDIs MTAgKzE2MDIsMTAgQEAgdmluc25fZXF1YWxfcCAodmluc25fdCB4LCB2aW5zbl90IHkpCiAgICAg ICBnY2NfYXNzZXJ0IChWSU5TTl9SSFMgKHgpKTsKICAgICAgIGdjY19hc3NlcnQgKFZJTlNOX1JI UyAoeSkpOwogCi0gICAgICByZXR1cm4gcnR4X2VxdWFsX3BfY2IgKFZJTlNOX1JIUyAoeCksIFZJ TlNOX1JIUyAoeSksIHJlcGNmKTsKKyAgICAgIHJldHVybiBydHhfZXF1YWxfcCAoVklOU05fUkhT ICh4KSwgVklOU05fUkhTICh5KSwgcmVwY2YpOwogICAgIH0KIAotICByZXR1cm4gcnR4X2VxdWFs X3BfY2IgKFZJTlNOX1BBVFRFUk4gKHgpLCBWSU5TTl9QQVRURVJOICh5KSwgcmVwY2YpOworICBy ZXR1cm4gcnR4X2VxdWFsX3AgKFZJTlNOX1BBVFRFUk4gKHgpLCBWSU5TTl9QQVRURVJOICh5KSwg cmVwY2YpOwogfQogDAogCg== --0000000000006bddc805fe143cc5--