[Patch, fortran] PR126205 - A coarray allocated in a team is not being automatically deallocated

Paul Richard Thomas <[email protected]> Fri, 24 Jul 2026 16:18:57 +0100
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <CAGkQGi+HyT=7o09KuaDsAYc5KPx2JCcLtwAFTp6BrgtWwyqkmA@mail.gmail.com>
--000000000000e926ad06575ce488
Content-Type: multipart/alternative; boundary="000000000000e926ab06575ce486"

--000000000000e926ab06575ce486
Content-Type: text/plain; charset="UTF-8"

Hello All,
From John Reid's "Summary_of_Fortran_2018":

3.5 Coarrays allocated in teams

....snip....

In Fortran 2018, synchronization is now across the team, of course.
Symmetric memory is maintained within teams by requiring that

1. any allocatable coarray that is allocated before entry to a change team
construct remains allocated during the execution of the construct and
2. any allocatable coarray that becomes allocated within a change team
construct and is still allocated when the construct is left is
automatically deallocated, even if it has the save attribute.

....more snips....

Requirement 2 is not yet implemented in gfortran. The attachment does the
job.

Regression tested on FC44/x86_64 - OK for mainline and eventual backporting
to 16-branch?

Paul

--000000000000e926ab06575ce486
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello All,<br>From John Reid&#39;s &quot;Summary_of_Fortra=
n_2018&quot;:<br><br>3.5 Coarrays allocated in teams<br><br>....snip....<br=
><br>In Fortran 2018, synchronization is now across the team, of course. Sy=
mmetric memory is maintained within teams by requiring that<br><br>1. any a=
llocatable coarray that is allocated before entry to a change team construc=
t remains allocated during the execution of the construct and<br>2. any all=
ocatable coarray that becomes allocated within a change team construct and =
is still allocated when the construct is left is automatically deallocated,=
 even if it has the save attribute.<br><br>....more snips....<br><br>Requir=
ement 2 is not yet implemented in gfortran. The attachment does the job.<di=
v><br></div><div>Regression tested on FC44/x86_64 - OK for mainline and eve=
ntual backporting to 16-branch?</div><div><br></div><div>Paul</div><div><br=
></div></div>

--000000000000e926ab06575ce486--

--000000000000e926ad06575ce488
Content-Type: text/x-patch; charset="US-ASCII"; name="submit.patch"
Content-Disposition: attachment; filename="submit.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mrz3580c0>
X-Attachment-Id: f_mrz3580c0

RnJvbSA0ZjFjNmI2ZmY3YTdiMGU2ZmU4ZWVhMzQ3NDRkYWI2YWUxMzIwNjJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIFRob21hcyA8cGF1bHRAZ2NjLmdudS5vcmc+CkRhdGU6
IEZyaSwgMjQgSnVsIDIwMjYgMTU6MDU6NDYgKzAxMDAKU3ViamVjdDogW1BBVENIXSBGb3J0cmFu
OiBBdXRvIGRlYWxsb2NhdGUgY29hcnJheXMsIGFsbG9jYXRlZCBpbiB0ZWFtIGJsb2NrcwogW1BS
MTI2MjA1XQoKR2ZvcnRyYW4gd2FzIG5vdCBjb21wbGlhbnQgd2l0aCBGMjAxOCgxMS4xLjUuMiks
IHdoaWNoIHJlcXVpcmVzIHRoYXQKY29hcnJheXMgdGhhdCBhcmUgYWxsb2NhdGVkIHdpdGhpbiBh
IHRlYW0gYmxvY2sgYXJlIGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5CmJlZm9yZSBFTkQgVEVBTS4K
ClRoaXMgdGhlIGZvdXJ0aCB2YXJpYW50IG9mIHRoZSBwYXRjaDsgdGhlIG1haW4gZGlmZmVyZW5j
ZXMgYmVpbmcgd2hldGhlcgp0aGUgY29kZSBpcyBsb2NhdGVkIG9uIHJlc29sdmUuY2MsIHNwbGl0
IGJldHdlZW4gcmVzb2x2ZS5jYyBhbmQKdHJhbnMtc3RtdC5jYyBvciwgYXMgaGVyZSwgc3BsaXQg
YmV0d2VlbiBwYXJzZS5jYywgbWF0Y2guY2MgYW5kIHN0LmNjLgpUaGUgbWFpbiBhdHRyYWN0aW9u
IG9mIHRoZSBsYXR0ZXIgc2NoZW1lIGlzIHRoYXQgY29hcnJheS5jYyBhbmQKcmVzb2x2ZS5jYyBk
byB0aGUgbWFpbiBqb2Igb2YgcHJlcGFyaW5nIHRoZSBjb2RlIGZvciB0cmFuc2xhdGlvbi4KClRo
ZSB0ZWFtIGNvbnRleHQgaXMgdHJhY2tlZCB1c2luZyBhIHZlY3RvciBvZiB0ZWFtIG5hbWVzcGFj
ZXMsIHdoaWNoIGlzCnB1c2hlZCBhdCBDSEFOR0UgVEVBTSBhbmQgcG9wcGVkIGF0IEVORCBURUFN
LiBUaGUgYWxsb2NhdGUgZXhwcmVzc2lvbnMKYXJlIHN0YXNoZWQgaW4gYSB2ZWN0b3IgaGFzaF9t
YXAsIGtleWVkIG9uIHRoZSBuYW1lc3BhY2UuIFRoZSBhbGxvY2F0ZQpleHByZXNzaW9ucyBhcmUg
c3RvcmVkIHdoaWxlIHRoZSBBTExPQ0FURSBzdGF0bWVudHMgYXJlIGJlaW5nIG1hdGNoZWQuClRo
ZXkgYXJlIHRoZW4gcmVjb3ZlcmVkIGJlZm9yZSBlbmQgaW4gcGFyc2VfY2hhbmdlX3RlYW0gYW5k
IHNlbnQgb2ZmCmZvciBhdXRvbWF0aWMgZGVhbGxvY2F0aW9uIGluIHN0LmNjKGRlYWxsb2NhdGVf
YWxsb2NhdGVkX2NvYXJyYXlzLgoKVGhlIHVzZSBvZiBzdC5jYyBmb3IgZnVuY3Rpb25zIGdlbmVy
YXRpbmcgY2h1bmtzIG9mIGNvZGUgaXMgYSBwb2ludGVyCnRvIHNvbWV0aGluZyB0aGF0IEkgaGF2
ZSBiZWVuIGV5ZWluZyBmb3IgYSBsb25nIHRpbWUsIHdoaWNoIGlzIHRvCmV4dHJhY3QgYWxsIHN1
Y2ggZnVuY3Rpb25zIGZyb20gY2xhc3MuY2MgYW5kIHJlc29sdmUuY2Mgc28gdGhhdCB0aGV5CmNh
biBiZSByZWZhY3RvcmVkIHRvIHVzZSBjb21tb24gY2h1bmtzLiBUaGlzLCBob3dldmVyLCBpcyBm
b3IgYW5vdGhlcgp0aW1lIQoKMjAyNi0wNy0yNCAgUGF1bCBUaG9tYXMgIDxwYXVsdEBnY2MuZ251
Lm9yZz4KCmdjYy9mb3J0cmFuCglQUiBmb3J0cmFuLzEyNjIwNQoJKiBnZm9ydHJhbi5oOiBBZGQg
cHJvdG90eXBlIGZvciBkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2FycmF5cy4KCWhhc2hfbWFwIHRl
YW1fYWxsb2NhdGVkX2NvYXJyYXlzLCB2ZWN0b3IgdGVhbV9jb250ZXh0X3N0YWNrIGFuZAoJcHJv
dG90eXBlIGZvciBnZXRfY3VycmVudF90ZWFtX2NvbnRleHQuCgkqIG1hdGNoLmNjIChnZmNfbWF0
Y2hfYWxsb2NhdGUpOiBDYXB0dXJlIGFsbG9jYXRlIGV4cHJlc3Npb25zCglvZiBhbGxvY2F0YWJs
ZSBjb2FycmF5cyBhbmQgc3Rhc2ggaW4gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMuCgkqIHBhcnNl
LmNjIChwYXJzZV9jaGFuZ2VfdGVhbSk6IFB1c2ggdGVhbSBjb250ZXh0LiBXaGVuIGVuZCBpcwoJ
c2VlbiwgY3JlYXRlIHRoZSBjb2RlIHRvIGRlYWxsb2NhdGUgYWxsb2NhdGVkIGNvYXJyYXlzIGlu
IHRoaXMKCWNvbnRleHQsIHVzaW5nIGRlYWxsb2NhdGVfYWxsb2NhdGVkX2NvYXJyYXlzLgoJKiBz
dC5jYyAoZ2V0X2d1YXJkZWRfZGVhbGxvYyk6IEdlbmVyYXRlIGNvZGUgdG8gcHJvZHVjZQoJSUYg
KEFMTE9DQVRFRCAoZXhwcikpIERFQUxMT0NBVEUgKGV4cHIpLgoJKGRlYWxsb2NhdGVfYWxsb2Nh
dGVkX2NvYXJyYXlzKTogTW9kaWZ5IHRoZSBmaW5hbCBhcnJheSByZWYgb2YKCXRoZSBhbGxvY2F0
ZSBleHByZXNzaW9ucyBhbmQgY2FsbCBnZXRfZ3VhcmRlZF9kZWFsbG9jLgoKZ2NjL3Rlc3RzdWl0
ZS8KCVBSIGZvcnRyYW4vMTI2MjA1CgkqIGNvYXJyYXkvdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMu
ZjkwOiBOZXcgdGVzdC4KLS0tCiBnY2MvZm9ydHJhbi9nZm9ydHJhbi5oICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDUgKy0KIGdjYy9mb3J0cmFuL21hdGNoLmNjICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAxNyArKysKIGdjYy9mb3J0cmFuL3BhcnNlLmNjICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAyNiArKysrKwogZ2NjL2ZvcnRyYW4vc3QuY2MgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDk3ICsrKysrKysrKysrKysrKysKIC4uLi9jb2FycmF5L3RlYW1fYWxsb2Nh
dGVkX2NvYXJyYXlzLmY5MCAgICAgICB8IDEwNCArKysrKysrKysrKysrKysrKysKIDUgZmlsZXMg
Y2hhbmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NvYXJyYXkvdGVhbV9hbGxvY2F0ZWRfY29h
cnJheXMuZjkwCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0
cmFuL2dmb3J0cmFuLmgKaW5kZXggNDhkZGQ5YTcyZDUuLmFmYmNjYjRlNDc3IDEwMDY0NAotLS0g
YS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCisrKyBiL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgKQEAg
LTQxNzUsMTMgKzQxNzUsMTMgQEAgYm9vbCBoYXNfcGFyYW1ldGVyaXplZF9jb21wcyAoZ2ZjX3N5
bWJvbCAqKTsKIAogLyogc3QuY2MgKi8KIGV4dGVybiBnZmNfY29kZSBuZXdfc3Q7Ci0KIHZvaWQg
Z2ZjX2NsZWFyX25ld19zdCAodm9pZCk7CiBnZmNfY29kZSAqZ2ZjX2dldF9jb2RlIChnZmNfZXhl
Y19vcCk7CiBnZmNfY29kZSAqZ2ZjX2FwcGVuZF9jb2RlIChnZmNfY29kZSAqLCBnZmNfY29kZSAq
KTsKIHZvaWQgZ2ZjX2ZyZWVfc3RhdGVtZW50IChnZmNfY29kZSAqKTsKIHZvaWQgZ2ZjX2ZyZWVf
c3RhdGVtZW50cyAoZ2ZjX2NvZGUgKik7CiB2b2lkIGdmY19mcmVlX2Fzc29jaWF0aW9uX2xpc3Qg
KGdmY19hc3NvY2lhdGlvbl9saXN0ICopOwordm9pZCBkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2Fy
cmF5cyAodmVjPGdmY19leHByICo+ICopOwogCiAvKiByZXNvbHZlLmNjICovCiB2b2lkIGdmY19y
ZXNvbHZlX3N5bWJvbCAoZ2ZjX3N5bWJvbCAqKTsKQEAgLTQzNTgsNiArNDM1OCw5IEBAIHZvaWQg
Z2ZjX2dsb2JhbF91c2VkIChnZmNfZ3N5bWJvbCAqLCBsb2N1cyAqKTsKIGdmY19uYW1lc3BhY2Uq
IGdmY19idWlsZF9ibG9ja19ucyAoZ2ZjX25hbWVzcGFjZSAqKTsKIGdmY19zdGF0ZW1lbnQgbWF0
Y2hfb21wX2RpcmVjdGl2ZSAodm9pZCk7CiBib29sIGlzX29tcF9kZWNsYXJhdGl2ZV9zdG10IChn
ZmNfc3RhdGVtZW50KTsKK2V4dGVybiBoYXNoX21hcDxnZmNfbmFtZXNwYWNlICosIHZlYzxnZmNf
ZXhwciAqPj4gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXM7CitleHRlcm4gdmVjPGdmY19uYW1lc3Bh
Y2UgKj4gdGVhbV9jb250ZXh0X3N0YWNrOworZ2ZjX25hbWVzcGFjZSAqZ2V0X2N1cnJlbnRfdGVh
bV9jb250ZXh0ICh2b2lkKTsKIAogLyogZGVwZW5kZW5jeS5jYyAqLwogaW50IGdmY19kZXBfY29t
cGFyZV9mdW5jdGlvbnMgKGdmY19leHByICosIGdmY19leHByICosIGJvb2wpOwpkaWZmIC0tZ2l0
IGEvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MgYi9nY2MvZm9ydHJhbi9tYXRjaC5jYwppbmRleCBiMDlk
MzQ4ZTZiNS4uZDYxNzU3MDQ2ZDIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL21hdGNoLmNjCisr
KyBiL2djYy9mb3J0cmFuL21hdGNoLmNjCkBAIC01NDQzLDYgKzU0NDMsMjMgQEAgZ2ZjX21hdGNo
X2FsbG9jYXRlICh2b2lkKQogCSAgZ290byBjbGVhbnVwOwogCX0KIAorICAgICAgLyogRjIwMTgo
MTEuMS41LjIpOiBUcmFjayBjb2FycmF5cyBhbGxvY2F0ZWQgaW4gdGVhbSBibG9ja3MuICAqLwor
ICAgICAgZ2ZjX25hbWVzcGFjZSAqdGVhbV9ucyA9IGdldF9jdXJyZW50X3RlYW1fY29udGV4dCAo
KTsKKyAgICAgIGJvb2wgY29kaW0gPSB0YWlsLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5j
b2RpbWVuc2lvbgorCQkgICB8fCAodGFpbC0+ZXhwci0+c3ltdHJlZS0+bi5zeW0tPmFzCisJCSAg
ICAgICAmJiB0YWlsLT5leHByLT5zeW10cmVlLT5uLnN5bS0+YXMtPmNvcmFuayk7CisgICAgICBm
b3IgKGdmY19yZWYgKnIgPSB0YWlsLT5leHByLT5yZWY7IHI7IHIgPSByLT5uZXh0KQorCWlmIChy
LT50eXBlID09IFJFRl9DT01QT05FTlQgJiYgci0+dS5jLmNvbXBvbmVudCkKKwkgIGNvZGltID0g
ci0+dS5jLmNvbXBvbmVudC0+YXR0ci5jb2RpbWVuc2lvbgorCQkgIHx8IChyLT51LmMuY29tcG9u
ZW50LT5hcyAmJiByLT51LmMuY29tcG9uZW50LT5hcy0+Y29yYW5rKTsKKworICAgICAgaWYgKGZs
YWdfY29hcnJheSA9PSBHRkNfRkNPQVJSQVlfTElCICYmIHRlYW1fbnMgJiYgY29kaW0pCisJewor
CSAgZ2ZjX2V4cHIgKmUgPSBnZmNfY29weV9leHByICh0YWlsLT5leHByKTsKKwkgIHZlYzxnZmNf
ZXhwciAqPiAmYWxsb2NhdGVkID0gdGVhbV9hbGxvY2F0ZWRfY29hcnJheXMuZ2V0X29yX2luc2Vy
dCAodGVhbV9ucyk7CisJICBhbGxvY2F0ZWQuc2FmZV9wdXNoIChlKTsKKwl9CisKICAgICAgIGlm
IChnZmNfbWF0Y2hfY2hhciAoJywnKSAhPSBNQVRDSF9ZRVMpCiAJYnJlYWs7CiAKZGlmZiAtLWdp
dCBhL2djYy9mb3J0cmFuL3BhcnNlLmNjIGIvZ2NjL2ZvcnRyYW4vcGFyc2UuY2MKaW5kZXggN2I2
Y2Y1MjVhODAuLmViZDk4MDY5OGU5IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9wYXJzZS5jYwor
KysgYi9nY2MvZm9ydHJhbi9wYXJzZS5jYwpAQCAtNTU2NywxMiArNTU2NywyOCBAQCBsb29wOgog
ICBwb3Bfc3RhdGUgKCk7CiB9CiAKKworLyogRjIwMTgoMTEuMS41LjIpOiBUcmFjayBjb2FycmF5
cyBhbGxvY2F0ZWQgd2l0aGluIENIQU5HRSBURUFNIGJsb2Nrcy4KKyAgIE1hcCBmcm9tIHRlYW0g
bmFtZXNwYWNlIHRvIHZlY3RvciBvZiBhbGxvY2F0ZWQgY29hcnJheSBzeW1ib2xzLiAgKi8KK2hh
c2hfbWFwPGdmY19uYW1lc3BhY2UgKiwgdmVjPGdmY19leHByICo+PiB0ZWFtX2FsbG9jYXRlZF9j
b2FycmF5czsKKworLyogU3RhY2sgdG8gdHJhY2sgY3VycmVudCBDSEFOR0UgVEVBTSBjb250ZXh0
LiAgKi8KK3ZlYzxnZmNfbmFtZXNwYWNlICo+IHRlYW1fY29udGV4dF9zdGFjazsKKworZ2ZjX25h
bWVzcGFjZSAqCitnZXRfY3VycmVudF90ZWFtX2NvbnRleHQgKHZvaWQpCit7CisgIHJldHVybiB0
ZWFtX2NvbnRleHRfc3RhY2suaXNfZW1wdHkgKCkgPyBOVUxMIDogdGVhbV9jb250ZXh0X3N0YWNr
Lmxhc3QgKCk7Cit9CisKKwogc3RhdGljIHZvaWQKIHBhcnNlX2NoYW5nZV90ZWFtICh2b2lkKQog
ewogICBnZmNfbmFtZXNwYWNlICpteV9uczsKICAgZ2ZjX3N0YXRlX2RhdGEgczsKICAgZ2ZjX3N0
YXRlbWVudCBzdDsKKyAgdmVjPGdmY19leHByICo+ICp0ZWFtX2FsbG9jczsKIAogICBnZmNfbm90
aWZ5X3N0ZCAoR0ZDX1NURF9GMjAxOCwgIkNIQU5HRSBURUFNIGNvbnN0cnVjdCBhdCAlQyIpOwog
CkBAIC01NTkwLDYgKzU2MDYsOSBAQCBwYXJzZV9jaGFuZ2VfdGVhbSAodm9pZCkKICAgYWNjZXB0
X3N0YXRlbWVudCAoU1RfQ0hBTkdFX1RFQU0pOwogICBwdXNoX3N0YXRlICgmcywgQ09NUF9DSEFO
R0VfVEVBTSwgbXlfbnMtPnByb2NfbmFtZSk7CiAKKyAgLyogUHVzaCB0ZWFtIGNvbnRleHQgZm9y
IHRyYWNraW5nIGNvYXJyYXlzIGFsbG9jYXRlZCBpbiBhIHRlYW0gYmxvY2suICAqLworICB0ZWFt
X2NvbnRleHRfc3RhY2suc2FmZV9wdXNoIChnZmNfY3VycmVudF9ucyk7CisKIGxvb3A6CiAgIHN0
ID0gcGFyc2VfZXhlY3V0YWJsZSAoU1RfTk9ORSk7CiAgIHN3aXRjaCAoc3QpCkBAIC01NjAwLDYg
KzU2MTksMTMgQEAgbG9vcDoKICAgICBjYXNlX2VuZDoKICAgICAgIGFjY2VwdF9zdGF0ZW1lbnQg
KHN0KTsKICAgICAgIG15X25zLT5jb2RlID0gZ2ZjX3N0YXRlX3N0YWNrLT5oZWFkOworICAgICAg
LyogRjIwMTgoMTEuMS41LjIpOiBEZWFsbG9jYXRlIGNvYXJyYXkgZXhwcmVzc2lvbnMgYWxsb2Nh
dGVkIGluIHRoaXMKKwkgdGVhbSBibG9jaywgICovCisgICAgICB0ZWFtX2FsbG9jcyA9IHRlYW1f
YWxsb2NhdGVkX2NvYXJyYXlzLmdldCAoZ2ZjX2N1cnJlbnRfbnMpOworICAgICAgaWYgKHRlYW1f
YWxsb2NzKQorCWRlYWxsb2NhdGVfYWxsb2NhdGVkX2NvYXJyYXlzICh0ZWFtX2FsbG9jcyk7Cisg
ICAgICAvKiBQb3AgdGVhbSBjb250ZXh0LiAgKi8KKyAgICAgIHRlYW1fY29udGV4dF9zdGFjay5w
b3AgKCk7CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9nY2MvZm9y
dHJhbi9zdC5jYyBiL2djYy9mb3J0cmFuL3N0LmNjCmluZGV4IDM5NzExZTMyNjIwLi4yMTJkODVh
YWRiMCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vc3QuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vc3Qu
Y2MKQEAgLTM2NiwzICszNjYsMTAwIEBAIGdmY19mcmVlX2Fzc29jaWF0aW9uX2xpc3QgKGdmY19h
c3NvY2lhdGlvbl9saXN0KiBhc3NvYykKICAgZ2ZjX2ZyZWVfYXNzb2NpYXRpb25fbGlzdCAoYXNz
b2MtPm5leHQpOwogICBmcmVlIChhc3NvYyk7CiB9CisKKworLyogRnVuY3Rpb24gdG8gZ2VuZXJh
dGUgSUYgKEFMTE9DQVRFRChleHByKSkgREVBTExPQ0FURShleHByKSAgKi8KKworc3RhdGljIGdm
Y19jb2RlICoKK2dldF9ndWFyZGVkX2RlYWxsb2MgKGdmY19uYW1lc3BhY2UgKm5zLCBnZmNfZXhw
ciAqZXhwcikKK3sKKyAgZ2ZjX2NvZGUgKmRlYWxsb2MgPSBnZmNfZ2V0X2NvZGUgKEVYRUNfSUYp
OworICBkZWFsbG9jLT5ibG9jayA9IGdmY19nZXRfY29kZSAoRVhFQ19JRik7CisjZGVmaW5lIEFM
TE9DQVRFRCBkZWFsbG9jLT5ibG9jay0+ZXhwcjEKKyAgQUxMT0NBVEVEID0gZ2ZjX2dldF9leHBy
ICgpOworICBBTExPQ0FURUQtPmV4cHJfdHlwZSA9IEVYUFJfRlVOQ1RJT047CisgIEFMTE9DQVRF
RC0+d2hlcmUgPSBnZmNfY3VycmVudF9sb2N1czsKKyAgZ2ZjX2ZpbmRfc3ltX3RyZWUgKCJhbGxv
Y2F0ZWQiLCBucywgMSwgJkFMTE9DQVRFRC0+c3ltdHJlZSk7CisgIGlmICghQUxMT0NBVEVELT5z
eW10cmVlKQorICAgIHsKKyAgICAgIGdmY19nZXRfc3ltX3RyZWUgKCJhbGxvY2F0ZWQiLCBucywg
JkFMTE9DQVRFRC0+c3ltdHJlZSwgZmFsc2UpOworICAgICAgZ2ZjX2NvbW1pdF9zeW1ib2wgKEFM
TE9DQVRFRC0+c3ltdHJlZS0+bi5zeW0pOworICAgIH0KKyAgQUxMT0NBVEVELT5zeW10cmVlLT5u
LnN5bS0+YXR0ci5mbGF2b3IgPSBGTF9QUk9DRURVUkU7CisgIEFMTE9DQVRFRC0+c3ltdHJlZS0+
bi5zeW0tPmF0dHIuaW50cmluc2ljID0gMTsKKyAgQUxMT0NBVEVELT5zeW10cmVlLT5uLnN5bS0+
cmVzdWx0ID0gQUxMT0NBVEVELT5zeW10cmVlLT5uLnN5bTsKKyAgQUxMT0NBVEVELT50cy50eXBl
ID0gQlRfTE9HSUNBTDsKKyAgQUxMT0NBVEVELT50cy5raW5kID0gZ2ZjX2RlZmF1bHRfbG9naWNh
bF9raW5kOworICBBTExPQ0FURUQtPnZhbHVlLmZ1bmN0aW9uLmlzeW0KKwkJCT0gZ2ZjX2ludHJp
bnNpY19mdW5jdGlvbl9ieV9pZCAoR0ZDX0lTWU1fQUxMT0NBVEVEKTsKKyAgQUxMT0NBVEVELT52
YWx1ZS5mdW5jdGlvbi5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOworICBBTExP
Q0FURUQtPnZhbHVlLmZ1bmN0aW9uLmFjdHVhbC0+ZXhwciA9IGdmY19jb3B5X2V4cHIgKGV4cHIp
OworI3VuZGVmIEFMTE9DQVRFRAorICBkZWFsbG9jLT5ibG9jay0+bmV4dCA9IGdmY19nZXRfY29k
ZSAoRVhFQ19ERUFMTE9DQVRFKTsKKyAgZGVhbGxvYy0+YmxvY2stPm5leHQtPmV4dC5hbGxvYy5s
aXN0ID0gZ2ZjX2dldF9hbGxvYyAoKTsKKyAgZGVhbGxvYy0+YmxvY2stPm5leHQtPmV4dC5hbGxv
Yy5saXN0LT5leHByID0gZ2ZjX2NvcHlfZXhwciAoZXhwcik7CisgIHJldHVybiBkZWFsbG9jOwor
fQorCisKKy8qIEYyMDE4KDExLjEuNS4yKTogSW5zZXJ0IGNvZGUgdG8gZGVhbGxvY2F0ZSBjb2Fy
cmF5cywgYWxsb2NhdGVkIHdpdGhpbiBhIHRlYW0KKyAgIGJsb2NrLiBUaGlzIHVzZXMgdGhlIHBy
ZXZpb3VzIGZ1bmN0aW9uIHRvIGVmZmVjdCBhIGd1YXJkZWQgZGVhbGxvY2F0aW9uIG9mCisgICBh
bGxvY2F0ZWQgY29hcnJheSBleHByZXNzaW9ucy4gVGhlc2UgYXJlIGdhdGhlcmVkIGluIGdmY19t
YXRjaF9hbGxvY2F0ZSBhbmQKKyAgIHN0YXNoZWQgaW4gdGVhbV9hbGxvY3MuICAqLworCit2b2lk
CitkZWFsbG9jYXRlX2FsbG9jYXRlZF9jb2FycmF5cyAodmVjPGdmY19leHByICo+ICp0ZWFtX2Fs
bG9jcykKK3sKKyAgZ2ZjX2NvZGUgKmRlYWxsb2MsICpsYXN0X3N0bXQ7CisgIGdmY19yZWYgKnJl
ZiwgKmFyZWYgPSBOVUxMOworICBpbnQgaTsKKworICBmb3IgKGdmY19leHByICplIDogKnRlYW1f
YWxsb2NzKQorICAgIHsKKyAgICAgIGlmICghZSkKKwljb250aW51ZTsKKworICAgICAgLyogR2V0
IHRoZSBsYXN0IGFycmF5X3JlZiByaWdodC4gICovCisgICAgICBmb3IgKHJlZiA9IGUtPnJlZjsg
cmVmOyByZWYgPSByZWYtPm5leHQpCisJaWYgKHJlZi0+dHlwZSA9PSBSRUZfQVJSQVkpCisJICBh
cmVmID0gcmVmOworCisgICAgICBpZiAoYXJlZi0+dS5hci5hcy0+cmFuaykKKwl7CisJICBhcmVm
LT51LmFyLnR5cGUgPSBBUl9GVUxMOworCSAgYXJlZi0+dS5hci5kaW1lbiA9IGFyZWYtPnUuYXIu
YXMtPnJhbms7CisJICBmb3IgKGkgPSAwOyBpIDwgYXJlZi0+dS5hci5kaW1lbjsgaSsrKQorCSAg
ICB7CisJICAgICAgYXJlZi0+dS5hci5kaW1lbl90eXBlW2ldID0gRElNRU5fUkFOR0U7CisKKwkg
ICAgICBpZiAoYXJlZi0+dS5hci5zdGFydFtpXSkgZ2ZjX2ZyZWVfZXhwciAoYXJlZi0+dS5hci5z
dGFydFtpXSk7CisJICAgICAgaWYgKGFyZWYtPnUuYXIuZW5kW2ldKSBnZmNfZnJlZV9leHByIChh
cmVmLT51LmFyLmVuZFtpXSk7CisJICAgICAgaWYgKGFyZWYtPnUuYXIuc3RyaWRlW2ldKSBnZmNf
ZnJlZV9leHByIChhcmVmLT51LmFyLnN0cmlkZVtpXSk7CisJICAgICAgYXJlZi0+dS5hci5zdGFy
dFtpXSA9IGFyZWYtPnUuYXIuZW5kW2ldID0gYXJlZi0+dS5hci5zdHJpZGVbaV0gPSBOVUxMOwor
CSAgICB9CisJfQorCisgICAgICBmb3IgKGkgPSBhcmVmLT51LmFyLmFzLT5yYW5rOworCSAgIGkg
PCBhcmVmLT51LmFyLmFzLT5yYW5rICsgYXJlZi0+dS5hci5hcy0+Y29yYW5rOyBpKyspCisJIGFy
ZWYtPnUuYXIuZGltZW5fdHlwZVtpXSA9IERJTUVOX1RISVNfSU1BR0U7CisKKyAgICAgIC8qIElu
c2VydCB0aGUgZGVhbGxvY2F0aW9uIGNvZGUgYmVmb3JlIHRoZSBFTkQgVEVBTSBzdGF0ZW1lbnQu
ICAqLworICAgICAgbGFzdF9zdG10ID0gZ2ZjX2N1cnJlbnRfbnMtPmNvZGU7CisgICAgICB3aGls
ZSAobGFzdF9zdG10KQorCXsKKwkgIGxhc3Rfc3RtdCA9IGxhc3Rfc3RtdC0+bmV4dDsKKwkgIGlm
IChsYXN0X3N0bXQtPm5leHQtPm9wID09IEVYRUNfRU5EX1RFQU0gfHwgIWxhc3Rfc3RtdC0+bmV4
dCkKKwkgICAgeworCSAgICAgIGRlYWxsb2MgPSBnZXRfZ3VhcmRlZF9kZWFsbG9jIChnZmNfY3Vy
cmVudF9ucywgZSk7CisJICAgICAgaWYgKGRlYWxsb2MpCisJCXsKKwkJICBkZWFsbG9jLT5uZXh0
ID0gbGFzdF9zdG10LT5uZXh0OworCQkgIGxhc3Rfc3RtdC0+bmV4dCA9IGRlYWxsb2M7CisJCSAg
YnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGdmY19mcmVlX2V4cHIgKGUpOworICAgICAg
ZSA9IE5VTEw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k
Zy9jb2FycmF5L3RlYW1fYWxsb2NhdGVkX2NvYXJyYXlzLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv
cnRyYW4uZGcvY29hcnJheS90ZWFtX2FsbG9jYXRlZF9jb2FycmF5cy5mOTAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlY2VlN2JiZmY0Ci0tLSAvZGV2L251bGwKKysr
IGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jb2FycmF5L3RlYW1fYWxsb2NhdGVkX2NvYXJy
YXlzLmY5MApAQCAtMCwwICsxLDEwNCBAQAorISB7IGRnLWRvIHJ1biB9CishCishIEYyMDE4KDEx
LjEuNS4yKTogVGVzdCBhdXRvLWRlYWxsb2NhdGlvbiBvZiBhbGxvY2F0YWJsZSBjb2FycmF5cyB0
aGF0IGFyZQorISBhbGxvY2F0ZWQgd2l0aGluIGEgdGVhbSBibG9jay4KKyEKK3Byb2dyYW0gdGVz
dF9uZXN0ZWRfdGVhbXMKKyAgdXNlIGlzb19mb3J0cmFuX2Vudiwgb25seTogdGVhbV90eXBlCisg
IGltcGxpY2l0IG5vbmUKKyAgdHlwZSh0ZWFtX3R5cGUpIDo6IHRlYW0xLCB0ZWFtMgorICBpbnRl
Z2VyLCBhbGxvY2F0YWJsZSA6OiBhWzpdCisgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGJbOl0K
KyAgaW50ZWdlciwgYWxsb2NhdGFibGUgOjogb3V0ZXJbOl0KKyAgaW50ZWdlciwgYWxsb2NhdGFi
bGUgOjogaW5uZXIoOilbOl0gISBSYW5rIGFuZCBjb3JhbmsKKyAgbG9naWNhbCA6OiBpbWFnZTEK
KyAgaW50ZWdlciA6OiBtZQorCisgIHR5cGUgOjogbXl0eXBlCisgICAgaW50ZWdlciwgYWxsb2Nh
dGFibGUgOjogaVs6XQorICBlbmQgdHlwZQorICB0eXBlKG15dHlwZSkgOjogZHRfYSwgZHRfYiwg
ZHRfb3V0ZXIsIGR0X2lubmVyCisKKyAgaW1hZ2UxID0gdGhpc19pbWFnZSAoKSA9PSAxCisgIG1l
ID0gdGhpc19pbWFnZSAoKQorCisgICEgVGVzdCAxOiBTaW1wbGUgYWxsb2NhdGlvbiBpbiBzaW5n
bGUgdGVhbSBibG9jaworICBmb3JtIHRlYW0oMSwgdGVhbTEpCisgIGNoYW5nZSB0ZWFtKHRlYW0x
KQorICAgIGFsbG9jYXRlKGFbKl0pCisgICAgYSA9IDEKKyAgICBhbGxvY2F0ZShkdF9hJWlbKl0s
IHNvdXJjZSA9IG1lKQorICBlbmQgdGVhbQorICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChh
KSkgc3RvcCAxCisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2NhdGVkKGR0X2ElaSkpIHN0b3AgMgor
CisgICEgVGVzdCAyOiBNdWx0aXBsZSBhbGxvY2F0aW9ucyBpbiBzaW5nbGUgdGVhbSBibG9jawor
ICBmb3JtIHRlYW0oMSwgdGVhbTEpCisgIGNoYW5nZSB0ZWFtKHRlYW0xKQorICAgIGFsbG9jYXRl
KGFbKl0sIGJbKl0pCisgICAgYSA9IDEKKyAgICBiID0gMgorICAgIGFsbG9jYXRlKGR0X2ElaVsq
XSwgZHRfYiVpWypdLCBzb3VyY2UgPSBtZSkKKyAgZW5kIHRlYW0KKyAgaWYgKGltYWdlMSAuYW5k
LiBhbGxvY2F0ZWQoYSkpIHN0b3AgMworICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChiKSkg
c3RvcCA0CisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2NhdGVkKGR0X2ElaSkpIHN0b3AgNQorICBp
ZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9iJWkpKSBzdG9wIDYKKworICAhIFRlc3QgMzog
TmVzdGVkIHRlYW0gYmxvY2tzIC0gYWxsb2NhdGlvbiBpbiBvdXRlciB0ZWFtIG9ubHkKKyAgZm9y
bSB0ZWFtKDEsIHRlYW0xKQorICBjaGFuZ2UgdGVhbSh0ZWFtMSkKKyAgICBhbGxvY2F0ZShvdXRl
clsqXSkKKyAgICBhbGxvY2F0ZShkdF9vdXRlciVpWypdLCBzb3VyY2UgPSBtZSkKKyAgICBvdXRl
ciA9IDEwCisKKyAgICAhIE5lc3RlZCB0ZWFtIHdpdGggbm8gYWxsb2NhdGlvbnMKKyAgICBmb3Jt
IHRlYW0oMSwgdGVhbTIpCisgICAgY2hhbmdlIHRlYW0odGVhbTIpCisgICAgZW5kIHRlYW0KKwor
ICAgICEgTWFrZSBzdXJlIHRoYXQgYXV0by1kZWFsbG9jYXRpb24gb2NjdXJzIGluIHJpZ2h0IGNv
bnRleHQKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIC5ub3QuYWxsb2NhdGVkKG91dGVyKSkgc3RvcCA3
CisgICAgaWYgKGltYWdlMSAuYW5kLiAubm90LmFsbG9jYXRlZChkdF9vdXRlciVpKSkgc3RvcCA4
CisKKyAgZW5kIHRlYW0KKyAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQob3V0ZXIpKSBzdG9w
IDkKKyAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQoZHRfb3V0ZXIlaSkpIHN0b3AgMTAKKwor
ICAhIFRlc3QgNDogTmVzdGVkIHRlYW0gYmxvY2tzIC0gYWxsb2NhdGlvbiBpbiBpbm5lciB0ZWFt
IG9ubHkKKyAgZm9ybSB0ZWFtKDEsIHRlYW0xKQorICBjaGFuZ2UgdGVhbSh0ZWFtMSkKKworICAg
IGZvcm0gdGVhbSgxLCB0ZWFtMikKKyAgICBjaGFuZ2UgdGVhbSh0ZWFtMikKKyAgICAgIGFsbG9j
YXRlKGlubmVyKDQpWypdKQorICAgICAgaW5uZXIgPSAyMAorICAgICAgYWxsb2NhdGUoZHRfaW5u
ZXIlaVsqXSkKKyAgICBlbmQgdGVhbQorCisgICAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQo
aW5uZXIpKSBzdG9wIDExCisgICAgaWYgKGltYWdlMSAuYW5kLiBhbGxvY2F0ZWQoZHRfaW5uZXIl
aSkpIHN0b3AgMTIKKyAgZW5kIHRlYW0KKworICAhIFRlc3QgNTogTmVzdGVkIHRlYW0gYmxvY2tz
IC0gYWxsb2NhdGlvbnMgaW4gYm90aCBsZXZlbHMKKyAgZm9ybSB0ZWFtKDEsIHRlYW0xKQorICBj
aGFuZ2UgdGVhbSh0ZWFtMSkKKyAgICBhbGxvY2F0ZShvdXRlclsqXSkKKyAgICBvdXRlciA9IDMw
CisgICAgYWxsb2NhdGUoZHRfb3V0ZXIlaVsqXSwgc291cmNlID0gbWUpCisKKyAgICBmb3JtIHRl
YW0oMSwgdGVhbTIpCisgICAgY2hhbmdlIHRlYW0odGVhbTIpCisgICAgICBhbGxvY2F0ZShpbm5l
cigyKVsqXSkKKyAgICAgIGlubmVyID0gNDAKKyAgICAgIGFsbG9jYXRlKGR0X2lubmVyJWlbKl0s
IHNvdXJjZSA9IG1lKQorICAgIGVuZCB0ZWFtCisKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9j
YXRlZChpbm5lcikpIHN0b3AgMTMKKyAgICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9p
bm5lciVpKSkgc3RvcCAxNAorCisgIGVuZCB0ZWFtCisgIGlmIChpbWFnZTEgLmFuZC4gYWxsb2Nh
dGVkKG91dGVyKSkgc3RvcCAxNQorICBpZiAoaW1hZ2UxIC5hbmQuIGFsbG9jYXRlZChkdF9vdXRl
ciVpKSkgc3RvcCAxNgorCitlbmQgcHJvZ3JhbSB0ZXN0X25lc3RlZF90ZWFtcwotLSAKMi41NS4w
Cgo=
--000000000000e926ad06575ce488--