From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id ABF9E3858C2F for ; Tue, 8 Nov 2022 00:23:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ABF9E3858C2F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1667866987; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=KrNw/lhM1GQSAtEzbQoKWDGkiC7hahhoL3hvUUvG9Ns=; b=hHBZQ+ZiNrvpSK5ELGi9KoBi+bAoDwt35eviKdqKhoWCg1MER7+NB+5h5+AqQxLsQhcJ30 9TyXGnVYqlZ+uEUjrasHPzudJt3P7IW9idGq7L7xOkiNhT7aIa3mAoRpDfrEFhrOTS44Nn jIK9NSg5i+dLBlRzl1o9ZqcSzW0PJcQ= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-672-UEQZooUjNzihAelFv0zQOg-1; Mon, 07 Nov 2022 19:23:06 -0500 X-MC-Unique: UEQZooUjNzihAelFv0zQOg-1 Received: by mail-qk1-f198.google.com with SMTP id bl21-20020a05620a1a9500b006fa35db066aso11552158qkb.19 for ; Mon, 07 Nov 2022 16:23:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=oVg0a26N3XmKl0mG5h04vAQbhAgUNykvvNzp8A2vm/8=; b=ORV3brJV5kvMyVhgFX8hUMKK901iGvezwdmsYV0LyiMC/f+Ip3aQcZKZnaEi8qKyR6 l/Oh/eZ0vz+wKYUi5bU6qf9rsxerR//lv3SDrx1j+C7gnxnpp4tUc5lSIFNzXgRElzxT OZdQzupVefle2uNniMNxI37UKrKLBWVEaRodj0YyV6kgDThN4mxh6ASSbh8nUV6hjmCQ hysyG9MHuQ7bOepgZWEJTS6r6hZc7hxpiTEJD9YS5o3FJcycS4kO8NYASSmrFbFinlKJ UKzaeYkljAAbFKsGDRvOUDwN0nd+RxzuFiKZu9zDnQ4FaemcnVlsJf6SZdxOFrO/9MmA xIfA== X-Gm-Message-State: ACrzQf1C1n93yXx/DITA2pXm+SzOdTZjekxT4x7Mg/km4XlL4cw7z+S5 w+1EZRsnalplMgqiajbTK6q1cHGfYyDlKe0bdCOIu01xzBK0I2XGKeGHQvlEywpKFXl17jI/osK d/AdVfBOpTRjTCBfJjWGD1CjhAzV2p5ziUXPen8bT9Nl+lwS5orxKhDghpAjZy9psZyfNYA== X-Received: by 2002:a0c:90a2:0:b0:47b:6b36:f94a with SMTP id p31-20020a0c90a2000000b0047b6b36f94amr47977201qvp.26.1667866984761; Mon, 07 Nov 2022 16:23:04 -0800 (PST) X-Google-Smtp-Source: AMsMyM6jlMQIrGOQRhynxGp2f5BDDOlPDS8hSkh0OzN5pyC3x9QmiLaGEXAoG//Dz+xjqUG/GO5GbA== X-Received: by 2002:a0c:90a2:0:b0:47b:6b36:f94a with SMTP id p31-20020a0c90a2000000b0047b6b36f94amr47977180qvp.26.1667866984400; Mon, 07 Nov 2022 16:23:04 -0800 (PST) Received: from [192.168.0.135] ([104.219.120.208]) by smtp.gmail.com with ESMTPSA id d14-20020ac851ce000000b0035d08c1da35sm7163506qtn.45.2022.11.07.16.23.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Nov 2022 16:23:03 -0800 (PST) Message-ID: <3a76b0ec-98eb-503a-c8f1-8dd5946435b3@redhat.com> Date: Mon, 7 Nov 2022 19:23:01 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED] PR tree-optimization/104530 - Add transitive inferred range processing. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------zV1gzrZmtiJRK7XYMNAlnnfA" Content-Language: en-US X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00,BODY_8BITS,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP 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: This is a multi-part message in MIME format. --------------zV1gzrZmtiJRK7XYMNAlnnfA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit During VRP block walk, global ranges are "finalized" during the walk.  The statement will never be revisited, so the global becomes unchanging. we add inferred ranges when operands of a statement imply further value restrictions.  The most common of these is a de-reference of a pointer implies non-null. These inferred ranges can potentially have transitive effects on values which have already been calculated. Its a form of recalculation, but only effects things after the inferred range. ie:   b.0_1 = b;   _2 = b.0_1 == 0B;  // _2 global range is [0,1]   _3 = (int) _2;       // _3 global range is [0,1]   c = _3;   _5 = *b.0_1;      // b.0_1 is now [1, +INF]   a = _5;   d.3_7 = d;   _8 = _3 % d.3_7;   if (_8 != 0) after the assignment to _5, b.0_1 has a inferred range of non-zero. when we evaluate _8, we only know that _3 is [0,1], therefore _8 is [0,1]  and we cannot fold the following condition. This patch introduces a check before we evaluate the final condition where we check if any inferred ranges introduced in the block affect any of the global values that were calculated.  If they do, the stateemnt is reevalauted using the inferred ranges, and if the result is better, that range is also added as a "transitive" inferred range. In the above case, we register the inferred range for b.0_1:    on-exit update b.0_1 in BB2 : [irange] int * [1, +INF] And then before evaluating the final condition, make a pass thru the block and add the "transitive" inferred ranges: Checking for transitive inferred ranges in BB 2    on-exit update _2 in BB2 : [irange] _Bool [0, 0] NONZERO 0x0    on-exit update _3 in BB2 : [irange] int [0, 0] NONZERO 0x0    on-exit update _8 in BB2 : [irange] int [0, 0] NONZERO 0x0 which then allows us to fold the statement without impacting the global values. Inferred ranges are available to all on-exit calculations, and thus will feed any following blocks. Performance is reasonable, with a less than 1% hit to VRP, and 0.03% overall. Bootstrapped on x86_64-pc-linux-gnu with no regeressions. Pushed. Andrew --------------zV1gzrZmtiJRK7XYMNAlnnfA Content-Type: text/x-patch; charset=UTF-8; name="540.diff" Content-Disposition: attachment; filename="540.diff" Content-Transfer-Encoding: base64 Y29tbWl0IGM4MzgxMTk5NDZjOWY3NWYxZTQyZjQzMjAyNzUzNTU4MjJjYzg2ZmMKQXV0aG9yOiBB bmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4KRGF0ZTogICBNb24gTm92IDcgMTU6 MDc6MzUgMjAyMiAtMDUwMAoKICAgIEFkZCB0cmFuc2l0aXZlIGluZmVycmVkIHJhbmdlIHByb2Nl c3NpbmcuCiAgICAKICAgIFJld2FsayBzdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgYSBibG9jayB0 byBzZWUgaWYgYW55IGluZmVycmVkIHJhbmdlcwogICAgYWZmZWN0IGVhcmxpZXIgY2FsY3VsYXRp b25zIGFuZCByZWdpc3RlciB0aG9zZSBhcyBpbmZlcnJlZCByYW5nZXMuCiAgICAKICAgICAgICAg ICAgZ2NjLwogICAgICAgICAgICBQUiB0cmVlLW9wdGltaXphdGlvbi8xMDQ1MzAKICAgICAgICAg ICAgKiBnaW1wbGUtcmFuZ2UtY2FjaGUuY2MgKHJhbmdlcl9jYWNoZTo6cmVnaXN0ZXJfaW5mZXJy ZWRfdmFsdWUpOgogICAgICAgICAgICBOZXcuICBTcGxpdCBmcm9tOgogICAgICAgICAgICAocmFu Z2VyX2NhY2hlOjphcHBseV9pbmZlcnJlZF9yYW5nZXMpOiBNb3ZlIHNldHRpbmcgY2FjaGUgdG8K ICAgICAgICAgICAgc2VwYXJhdGUgZnVuY3Rpb24uCiAgICAgICAgICAgICogZ2ltcGxlLXJhbmdl LWNhY2hlLmggKHJlZ2lzdGVyX2luZmVycmVkX3ZhbHVlKTogTmV3IHByb3RvdHlwZS4KICAgICAg ICAgICAgKiBnaW1wbGUtcmFuZ2UtaW5mZXIuY2MgKGluZmVyX3JhbmdlX21hbmFnZXI6Omhhc19y YW5nZV9wKTogTmV3LgogICAgICAgICAgICAqIGdpbXBsZS1yYW5nZS1pbmZlci5oIChoYXNfcmFu Z2VfcCk6IE5ldyBwcm90b3R5cGUuCiAgICAgICAgICAgICogZ2ltcGxlLXJhbmdlLmNjIChyZWdp c3Rlcl90cmFuc2l0aXZlX2luZmVycmVkX3Jhbmdlcyk6IE5ldy4KICAgICAgICAgICAgKiBnaW1w bGUtcmFuZ2UuaCAocmVnaXN0ZXJfdHJhbnNpdGl2ZV9pbmZlcnJlZF9yYW5nZXMpOiBOZXcgcHJv dG8uCiAgICAgICAgICAgICogdHJlZS12cnAuY2MgKHJ2cnBfZm9sZGVyOjpmb2xkX3N0bXQpOiBD aGVjayBmb3IgdHJhbnNpdGl2ZSBpbmZlcnJlZAogICAgICAgICAgICByYW5nZXMgYXQgdGhlIGVu ZCBvZiB0aGUgYmxvY2sgYmVmb3JlIGZvbGRpbmcgZmluYWwgc3RtdC4KICAgIAogICAgICAgICAg ICBnY2MvdGVzdHN1aXRlLwogICAgICAgICAgICAqIGdjYy5kZy9wcjEwNDUzMC5jOiBOZXcuCgpk aWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1jYWNoZS5jYyBiL2djYy9naW1wbGUtcmFuZ2Ut Y2FjaGUuY2MKaW5kZXggODllMjQwM2FjY2UuLmNlNWEwYzgxNTVlIDEwMDY0NAotLS0gYS9nY2Mv Z2ltcGxlLXJhbmdlLWNhY2hlLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtY2FjaGUuY2MKQEAg LTE1NDQsOCArMTU0NCwyNyBAQCByYW5nZXJfY2FjaGU6OnJhbmdlX2Zyb21fZG9tICh2cmFuZ2Ug JnIsIHRyZWUgbmFtZSwgYmFzaWNfYmxvY2sgc3RhcnRfYmIsCiAgIHJldHVybiB0cnVlOwogfQog Ci0vLyBUaGlzIHJvdXRpbmUgaXMgdXNlZCBkdXJpbmcgYSBibG9jayB3YWxrIHRvIG1vdmUgdGhl IHN0YXRlIG9mIG5vbi1udWxsIGZvcgotLy8gYW55IG9wZXJhbmRzIG9uIHN0bXQgUyB0byBub25u dWxsLgorLy8gVGhpcyByb3V0aW5lIHdpbGwgcmVnaXN0ZXIgYW4gaW5mZXJyZWQgdmFsdWUgaW4g YmxvY2sgQkIsIGFuZCBwb3NzaWJseQorLy8gdXBkYXRlIHRoZSBvbi1lbnRyeSBjYWNoZSBpZiBh cHByb3ByaWF0ZS4KKwordm9pZAorcmFuZ2VyX2NhY2hlOjpyZWdpc3Rlcl9pbmZlcnJlZF92YWx1 ZSAoY29uc3QgdnJhbmdlICZpciwgdHJlZSBuYW1lLAorCQkJCSAgICAgICBiYXNpY19ibG9jayBi YikKK3sKKyAgVmFsdWVfUmFuZ2UgciAoVFJFRV9UWVBFIChuYW1lKSk7CisgIGlmICghbV9vbl9l bnRyeS5nZXRfYmJfcmFuZ2UgKHIsIG5hbWUsIGJiKSkKKyAgICBleGl0X3JhbmdlIChyLCBuYW1l LCBiYiwgUkZEX1JFQURfT05MWSk7CisgIGlmIChyLmludGVyc2VjdCAoaXIpKQorICAgIHsKKyAg ICAgIG1fb25fZW50cnkuc2V0X2JiX3JhbmdlIChuYW1lLCBiYiwgcik7CisgICAgICAvLyBJZiB0 aGlzIHJhbmdlIHdhcyBpbnZhcmlhbnQgYmVmb3JlLCByZW1vdmUgaW52YXJpYW5jZS4KKyAgICAg IGlmICghbV9nb3JpLmhhc19lZGdlX3JhbmdlX3AgKG5hbWUpKQorCW1fZ29yaS5zZXRfcmFuZ2Vf aW52YXJpYW50IChuYW1lLCBmYWxzZSk7CisgICAgfQorfQorCisvLyBUaGlzIHJvdXRpbmUgaXMg dXNlZCBkdXJpbmcgYSBibG9jayB3YWxrIHRvIGFkanVzdCBhbnkgaW5mZXJyZWQgcmFuZ2VzCisv LyBvZiBvcGVyYW5kcyBvbiBzdG10IFMuCiAKIHZvaWQKIHJhbmdlcl9jYWNoZTo6YXBwbHlfaW5m ZXJyZWRfcmFuZ2VzIChnaW1wbGUgKnMpCkBAIC0xNTc0LDE3ICsxNTkzLDYgQEAgcmFuZ2VyX2Nh Y2hlOjphcHBseV9pbmZlcnJlZF9yYW5nZXMgKGdpbXBsZSAqcykKICAgICAgIHRyZWUgbmFtZSA9 IGluZmVyLm5hbWUgKHgpOwogICAgICAgbV9leGl0LmFkZF9yYW5nZSAobmFtZSwgYmIsIGluZmVy LnJhbmdlICh4KSk7CiAgICAgICBpZiAodXBkYXRlKQotCXsKLQkgIFZhbHVlX1JhbmdlIHIgKFRS RUVfVFlQRSAobmFtZSkpOwotCSAgaWYgKCFtX29uX2VudHJ5LmdldF9iYl9yYW5nZSAociwgbmFt ZSwgYmIpKQotCSAgICBleGl0X3JhbmdlIChyLCBuYW1lLCBiYiwgUkZEX1JFQURfT05MWSk7Ci0J ICBpZiAoci5pbnRlcnNlY3QgKGluZmVyLnJhbmdlICh4KSkpCi0JICAgIHsKLQkgICAgICBtX29u X2VudHJ5LnNldF9iYl9yYW5nZSAobmFtZSwgYmIsIHIpOwotCSAgICAgIC8vIElmIHRoaXMgcmFu Z2Ugd2FzIGludmFyaWFudCBiZWZvcmUsIHJlbW92ZSBpbnZhcmlhbmNlLgotCSAgICAgIGlmICgh bV9nb3JpLmhhc19lZGdlX3JhbmdlX3AgKG5hbWUpKQotCQltX2dvcmkuc2V0X3JhbmdlX2ludmFy aWFudCAobmFtZSwgZmFsc2UpOwotCSAgICB9Ci0JfQorCXJlZ2lzdGVyX2luZmVycmVkX3ZhbHVl IChpbmZlci5yYW5nZSAoeCksIG5hbWUsIGJiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9nY2Mv Z2ltcGxlLXJhbmdlLWNhY2hlLmggYi9nY2MvZ2ltcGxlLXJhbmdlLWNhY2hlLmgKaW5kZXggNDUw NTNiNTg3M2EuLjhlM2FlOGY1OGM2IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWNhY2hl LmgKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1jYWNoZS5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1Ymxp YzoKIAogICB2b2lkIHByb3BhZ2F0ZV91cGRhdGVkX3ZhbHVlICh0cmVlIG5hbWUsIGJhc2ljX2Js b2NrIGJiKTsKIAorICB2b2lkIHJlZ2lzdGVyX2luZmVycmVkX3ZhbHVlIChjb25zdCB2cmFuZ2Ug JnIsIHRyZWUgbmFtZSwgYmFzaWNfYmxvY2sgYmIpOwogICB2b2lkIGFwcGx5X2luZmVycmVkX3Jh bmdlcyAoZ2ltcGxlICpzKTsKICAgZ29yaV9jb21wdXRlIG1fZ29yaTsKICAgaW5mZXJfcmFuZ2Vf bWFuYWdlciBtX2V4aXQ7CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLWluZmVyLmNjIGIv Z2NjL2dpbXBsZS1yYW5nZS1pbmZlci5jYwppbmRleCAwMTBiMzRhNmJkZS4uODcxNGVmMmVkNDEg MTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtcmFuZ2UtaW5mZXIuY2MKKysrIGIvZ2NjL2dpbXBsZS1y YW5nZS1pbmZlci5jYwpAQCAtMjUyLDYgKzI1MiwxNyBAQCBpbmZlcl9yYW5nZV9tYW5hZ2VyOjpn ZXRfbm9uemVybyAodHJlZSBuYW1lKQogICByZXR1cm4gKihtX25vbnplcm9bdl0pOwogfQogCisv LyBSZXR1cm4gVFJVRSBpZiB0aGVyZSBhcmUgYW55IHJhbmdlIGluZmVyZW5jZXMgaW4gYmxvY2sg QkIuCisKK2Jvb2wKK2luZmVyX3JhbmdlX21hbmFnZXI6Omhhc19yYW5nZV9wIChiYXNpY19ibG9j ayBiYikKK3sKKyAgaWYgKGJiLT5pbmRleCA+PSAoaW50KW1fb25fZXhpdC5sZW5ndGggKCkpCisg ICAgcmV0dXJuIGZhbHNlOworICBiaXRtYXAgYiA9IG1fb25fZXhpdFtiYi0+aW5kZXhdLm1fbmFt ZXM7CisgIHJldHVybiBiICYmICFiaXRtYXBfZW1wdHlfcCAoYik7Cit9CisKIC8vIFJldHVybiBU UlVFIGlmIE5BTUUgaGFzIGEgcmFuZ2UgaW5mZXJlbmNlIGluIGJsb2NrIEJCLgogCiBib29sCmRp ZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLWluZmVyLmggYi9nY2MvZ2ltcGxlLXJhbmdlLWlu ZmVyLmgKaW5kZXggYWRmZTFmZDhjNjkuLjEwNzA1ZTA0NmQzIDEwMDY0NAotLS0gYS9nY2MvZ2lt cGxlLXJhbmdlLWluZmVyLmgKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS1pbmZlci5oCkBAIC02Miw2 ICs2Miw3IEBAIHB1YmxpYzoKICAgdm9pZCBhZGRfcmFuZ2UgKHRyZWUgbmFtZSwgYmFzaWNfYmxv Y2sgYmIsIGNvbnN0IHZyYW5nZSAmcik7CiAgIHZvaWQgYWRkX25vbnplcm8gKHRyZWUgbmFtZSwg YmFzaWNfYmxvY2sgYmIpOwogICBib29sIGhhc19yYW5nZV9wICh0cmVlIG5hbWUsIGJhc2ljX2Js b2NrIGJiKTsKKyAgYm9vbCBoYXNfcmFuZ2VfcCAoYmFzaWNfYmxvY2sgYmIpOwogICBib29sIG1h eWJlX2FkanVzdF9yYW5nZSAodnJhbmdlICZyLCB0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiKTsK IHByaXZhdGU6CiAgIGNsYXNzIGV4aXRfcmFuZ2VfaGVhZApkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs ZS1yYW5nZS5jYyBiL2djYy9naW1wbGUtcmFuZ2UuY2MKaW5kZXggODA2Mzg2OTE4YmQuLjI4ODVk MGZhMjFlIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLmNjCisrKyBiL2djYy9naW1wbGUt cmFuZ2UuY2MKQEAgLTQ4Miw2ICs0ODIsNTQgQEAgZ2ltcGxlX3Jhbmdlcjo6cmVnaXN0ZXJfaW5m ZXJyZWRfcmFuZ2VzIChnaW1wbGUgKnMpCiAgIG1fY2FjaGUuYXBwbHlfaW5mZXJyZWRfcmFuZ2Vz IChzKTsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHdhbGsgdGhlIHN0YXRlbWVudHMgaW4g QkIgdG8gZGV0ZXJtaW5lIGlmIGFueQorLy8gZGlzY292ZXJlZCBpbmZlcnJlZCByYW5nZXMgaW4g dGhlIGJsb2NrIGhhdmUgYW55IHRyYW5zaXRpdmUgZWZmZWN0cywKKy8vIGFuZCBpZiBzbywgcmVn aXN0ZXIgdGhvc2UgZWZmZWN0cyBpbiBCQi4KKwordm9pZAorZ2ltcGxlX3Jhbmdlcjo6cmVnaXN0 ZXJfdHJhbnNpdGl2ZV9pbmZlcnJlZF9yYW5nZXMgKGJhc2ljX2Jsb2NrIGJiKQoreworICAvLyBS ZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGluZmVycmVkIHJhbmdlcyBpbiBCQi4KKyAgaW5mZXJfcmFu Z2VfbWFuYWdlciAmaW5mZXIgPSBtX2NhY2hlLm1fZXhpdDsKKyAgaWYgKCFpbmZlci5oYXNfcmFu Z2VfcCAoYmIpKQorICAgIHJldHVybjsKKworICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdz ICYgVERGX0RFVEFJTFMpKQorICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIkNoZWNraW5nIGZvciB0 cmFuc2l0aXZlIGluZmVycmVkIHJhbmdlcyBpbiBCQiAlZFxuIiwKKwkgICAgIGJiLT5pbmRleCk7 CisKKyAgZm9yIChnaW1wbGVfc3RtdF9pdGVyYXRvciBzaSA9IGdzaV9zdGFydF9iYiAoYmIpOyAh Z3NpX2VuZF9wIChzaSk7CisgICAgICAgZ3NpX25leHQgKCZzaSkpCisgICAgeworICAgICAgZ2lt cGxlICpzID0gZ3NpX3N0bXQgKHNpKTsKKyAgICAgIHRyZWUgbGhzID0gZ2ltcGxlX2dldF9saHMg KHMpOworICAgICAgLy8gSWYgdGhlIExIUyBhbHJlYXlkIGhhcyBhbiBpbmZlcnJlZCBlZmZlY3Qs IGxlYXZlIGl0IGJlLgorICAgICAgaWYgKCFnaW1wbGVfcmFuZ2Vfc3NhX3AgKGxocykgfHwgaW5m ZXIuaGFzX3JhbmdlX3AgKGxocywgYmIpKQorCWNvbnRpbnVlOworICAgICAgLy8gUGljayB1cCBn bG9iYWwgdmFsdWUuCisgICAgICBWYWx1ZV9SYW5nZSBnIChUUkVFX1RZUEUgKGxocykpOworICAg ICAgcmFuZ2Vfb2ZfZXhwciAoZywgbGhzKTsKKworICAgICAgLy8gSWYgZWl0aGVyIGRlcGVuZGVu Y3kgaGFzIGFuIGluZmVycmVkIHJhbmdlLCBjaGVjayBpZiByZWNhbGN1bGF0aW5nCisgICAgICAv LyB0aGUgTEhTIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBnbG9iYWwgdmFsdWUuIElmIHNvLCByZWdp c3RlciBpdCBhcworICAgICAgLy8gYW4gaW5mZXJyZWQgcmFuZ2UgYXMgd2VsbC4KKyAgICAgIFZh bHVlX1JhbmdlIHIgKFRSRUVfVFlQRSAobGhzKSk7CisgICAgICByLnNldF91bmRlZmluZWQgKCk7 CisgICAgICB0cmVlIG5hbWUxID0gZ29yaSAoKS5kZXBlbmQxIChsaHMpOworICAgICAgdHJlZSBu YW1lMiA9IGdvcmkgKCkuZGVwZW5kMiAobGhzKTsKKyAgICAgIGlmICgobmFtZTEgJiYgaW5mZXIu aGFzX3JhbmdlX3AgKG5hbWUxLCBiYikpCisJICB8fCAobmFtZTIgJiYgaW5mZXIuaGFzX3Jhbmdl X3AgKG5hbWUyLCBiYikpKQorCXsKKwkgIC8vIENoZWNrIGlmIGZvbGRpbmcgUyBwcm9kdWNlcyBh IGRpZmZlcmVudCByZXN1bHQuCisJICBpZiAoZm9sZF9yYW5nZSAociwgcywgdGhpcykgJiYgZyAh PSByKQorCSAgICB7CisJICAgICAgaW5mZXIuYWRkX3JhbmdlIChsaHMsIGJiLCByKTsKKwkgICAg ICBtX2NhY2hlLnJlZ2lzdGVyX2luZmVycmVkX3ZhbHVlIChyLCBsaHMsIGJiKTsKKwkgICAgfQor CX0KKyAgICB9Cit9CisKIC8vIFdoZW4gYSBzdGF0ZW1lbnQgUyBoYXMgY2hhbmdlZCBzaW5jZSB0 aGUgcmVzdWx0IHdhcyBjYWNoZWQsIHJlLWV2YWx1YXRlCiAvLyBhbmQgdXBkYXRlIHRoZSBnbG9i YWwgY2FjaGUuCiAKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UuaCBiL2djYy9naW1wbGUt cmFuZ2UuaAppbmRleCAyMmUwNWY2NDVmOC4uZGZlODE5OWI4YjAgMTAwNjQ0Ci0tLSBhL2djYy9n aW1wbGUtcmFuZ2UuaAorKysgYi9nY2MvZ2ltcGxlLXJhbmdlLmgKQEAgLTYyLDYgKzYyLDcgQEAg cHVibGljOgogICBhdXRvX2VkZ2VfZmxhZyBub25fZXhlY3V0YWJsZV9lZGdlX2ZsYWc7CiAgIGJv b2wgZm9sZF9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCB0cmVlICgqKSAodHJlZSkp OwogICB2b2lkIHJlZ2lzdGVyX2luZmVycmVkX3JhbmdlcyAoZ2ltcGxlICpzKTsKKyAgdm9pZCBy ZWdpc3Rlcl90cmFuc2l0aXZlX2luZmVycmVkX3JhbmdlcyAoYmFzaWNfYmxvY2sgYmIpOwogcHJv dGVjdGVkOgogICBib29sIGZvbGRfcmFuZ2VfaW50ZXJuYWwgKHZyYW5nZSAmciwgZ2ltcGxlICpz LCB0cmVlIG5hbWUpOwogICB2b2lkIHByZWZpbGxfbmFtZSAodnJhbmdlICZyLCB0cmVlIG5hbWUp OwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHIxMDQ1MzAuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ByMTA0NTMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjFlYzEwMTU0ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvcHIxMDQ1MzAuYwpAQCAtMCwwICsxLDE5IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtZXZycCIgfSAqLworCit2b2lkIGZvbyh2 b2lkKTsKKworc3RhdGljIGludCBhLCAqYiA9ICZhLCBjLCBkID0gMTsKKworaW50IG1haW4oKSB7 CisgICAgYyA9IDAgPT0gYjsKKyAgICBhID0gKmI7CisgICAgaWYgKGMgJSBkKQorICAgICAgICBm b3IgKDsgZDsgLS1kKQorICAgICAgICAgICAgZm9vKCk7CisgICAgYiA9IDA7Cit9CisKKworLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiZm9vIiAiZXZycCIgfSB9ICAqLworCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS12cnAuY2MgYi9nY2MvdHJlZS12cnAuY2MKaW5kZXggMzlmN2Vi N2E3NWUuLjMzOTNjNzNhN2RiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12cnAuY2MKKysrIGIvZ2Nj L3RyZWUtdnJwLmNjCkBAIC00NTAxLDYgKzQ1MDEsMTUgQEAgcHVibGljOgogCiAgIGJvb2wgZm9s ZF9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpKSBvdmVycmlkZQogICB7CisgICAgZ2lt cGxlICpzID0gZ3NpX3N0bXQgKCpnc2kpOworICAgIC8vIElmIHRoaXMgaXMgYSBibG9jayBlbmRp bmcgY29uZGl0aW9uLCBhbmQgdGhlcmUgYXJlIGluZmVycmVkIHJhbmdlcywKKyAgICAvLyByZXBh cnNlIHRoZSBibG9jayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB0cmFuc2l0aXZlIGluZmVycmVk IHJhbmdlcy4KKyAgICBpZiAoaXNfYTxnY29uZCAqPiAocykpCisgICAgICB7CisJYmFzaWNfYmxv Y2sgYmIgPSBnaW1wbGVfYmIgKHMpOworCWlmIChiYiAmJiBzID09IGdpbXBsZV9vdXRnb2luZ19y YW5nZV9zdG10X3AgKGJiKSkKKwkgIG1fcmFuZ2VyLT5yZWdpc3Rlcl90cmFuc2l0aXZlX2luZmVy cmVkX3JhbmdlcyAoYmIpOworICAgICAgfQogICAgIGJvb2wgcmV0ID0gbV9zaW1wbGlmaWVyLnNp bXBsaWZ5IChnc2kpOwogICAgIGlmICghcmV0KQogICAgICAgcmV0ID0gbV9yYW5nZXItPmZvbGRf c3RtdCAoZ3NpLCBmb2xsb3dfc2luZ2xlX3VzZV9lZGdlcyk7Cg== --------------zV1gzrZmtiJRK7XYMNAlnnfA--