c++/770: Memory allocated by new remains accessible even after calling delete.

Tathagato.Rai.Dastidar@nsc.com Tathagato.Rai.Dastidar@nsc.com
Fri Nov 10 21:46:00 GMT 2000


>Number:         770
>Category:       c++
>Synopsis:       Memory allocated by new remains accessible even after calling delete.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Nov 10 21:46:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Tathagato Rai Dastidar
>Release:        gcc version 2.8.1
>Organization:
>Environment:
sparc-sun-solaris2.5.1
>Description:
A pointer to a class object is created by calling new.
After some time, it is destroyed by calling delete. However,
data members of the class are still accessible via member
functions (called on the deallocated pointer). Trying to 
access deallocated memory should give a core dump. Nothing 
of the sort happens. The program runs normally.
>How-To-Repeat:
Just compile and run the file using:
% g++ test1.ii
% a.out
The output is:
0
Destructed
0
0
Destructed
0
67
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="test1.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test1.ii"

IyAxICJ0ZXN0MS5jYyIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL2lvc3RyZWFtLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7CiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy9saWJpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nKystaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiAg
CgoKCgoKCgp0eXBlZGVmIGxvbmcgX0dfY2xvY2tfdDsKdHlwZWRlZiBzaG9ydCBfR19kZXZfdDsK
dHlwZWRlZiBsb25nICAgX0dfZnBvc190Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9HX2dpZF90
Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
X0dfbW9kZV90Owp0eXBlZGVmIHNob3J0IF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19vZmZf
dDsKdHlwZWRlZiBpbnQgX0dfcGlkX3Q7CgoKCnR5cGVkZWYgaW50IF9HX3B0cmRpZmZfdDsKdHlw
ZWRlZiBpbnQgX0dfc2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsK
dHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfR191aWRfdDsK
dHlwZWRlZiBzaG9ydCB1bnNpZ25lZCBpbnQgX0dfd2NoYXJfdDsKdHlwZWRlZiBpbnQgICBfR19z
c2l6ZV90Owp0eXBlZGVmIGludCAgIF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlz
dDsKCgoKCnR5cGVkZWYgICAgICAgICAgaW50ICAgX0dfaW50OF90IF9fYXR0cmlidXRlX18oKF9f
bW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRy
aWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRl
ZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21v
ZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQ2NF90IF9fYXR0cmli
dXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0
X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9saWJpby5oIiAyIDMK
CgoKCgoKCgoKCgoKCgoKCgojIDU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrL2xpYmlvLmgiIDMK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVt
cF90OyAgc3RydWN0IF9JT19GSUxFOwoKIAojIDE2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9s
aWJpby5oIiAzCgoKCgoKCgoKCiAgICB0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgogCgpz
dHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBf
SU9fRklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTk5ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7
CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFkX2Vu
ZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJIAog
IGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hhciog
X0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lPX3Nh
dmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2ZV9l
bmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUg
Kl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwoKCgogIF9HX29mZl90ICBf
b2Zmc2V0OwoKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBjaGFyIF91bnVz
ZWQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCgoKCgoKCgp9OwoKCgoKCgoKCgoKCnN0cnVj
dCBfSU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPX3N0ZGluXywg
X0lPX3N0ZG91dF8sIF9JT19zdGRlcnJfOwoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIF9HX3Nz
aXplX3QgICgqcmVhZCkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgdm9pZCAqLCBfR19zc2l6ZV90ICkg
IDsKICBfR19zc2l6ZV90ICAoKndyaXRlKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBjb25zdCB2b2lk
ICosIF9HX3NzaXplX3QgKSAgOwogIF9HX2Zwb3NfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklM
RSAqLCBfR19vZmZfdCAsIGludCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUg
KikgIDsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190OwoKIApzdHJ1Y3QgX0lPX2Nvb2tpZV9m
aWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9p
ZCAqY29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwoK
CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUgKikgIDsK
ZXh0ZXJuIGludCBfX3VmbG93ICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfX292ZXJmbG93
ICAoX0lPX0ZJTEUgKiwgaW50KSAgOwoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX2dl
dGMgIChfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9J
T19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7
CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAgKF9JT19GSUxFICpfX2ZwKSAgOwoKZXh0ZXJuIGludCBf
SU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJTEUgKl9fZnApICA7CgogCgoKCmV4dGVybiB2b2lkIF9J
T19mbG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUg
IChfSU9fRklMRSAqKSAgOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAq
KSAgOwoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNv
bnN0IGNoYXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50
ZiAgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19z
c2l6ZV90ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVy
biBfR19zaXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkg
IDsKCgoKCgpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29m
Zl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBfR19mcG9zX3QgIF9JT19zZWVrcG9zICAoX0lPX0ZJ
TEUgKiwgX0dfZnBvc190ICwgaW50KSAgOwoKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9h
cmVhICAoX0lPX0ZJTEUgKikgIDsKCgp9CgoKCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysv
c3RyZWFtYnVmLmgiIDIgMwoKfQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJD
KysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3RyZWFtOyBjbGFzcyBzdHJlYW1idWY7Cgog
CgoKCgoKCgp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0dfZnBvc190ICBz
dHJlYW1wb3M7Cgp0eXBlZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0
cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0q
IF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICBzaG9ydCAg
X2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwog
ICAgaW50IF9wcmVjaXNpb247CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoK
CgojIDEyNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlv
cyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9z
IChjb25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFn
czsKICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAg
IHR5cGVkZWYgaW50IHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAw
ICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0g
b3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0
cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4
ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9
OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tp
cHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAg
ZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNo
b3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJ
ICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAw
MCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMr
b2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBs
ZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKysv
c3RyZWFtYnVmLmgiIDMKCgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsg
fQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90
aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyBy
ZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRm
ID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3Mo
KSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5l
d192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJl
dHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNp
c2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xk
cCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVy
biBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xk
Yml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRm
bGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0
cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJl
dHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10
ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7
IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRo
KGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7
IH0KCgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVh
cihpb3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8
YmFkYml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAg
ICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYg
X2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0
ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90
aHJvd19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09
IDA7IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsg
fQogICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9z
OjpmYWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6
YmFkYml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0K
ICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAo
dm9pZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsg
fQogICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0K
ICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFi
bGU7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBz
dHJlYW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVm
KiByZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7
IF9zdHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBz
eW5jX3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygp
IHsgc3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsK
ICAgIHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQq
IHB3b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChp
bnQpIGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAg
ICAgIEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVh
bWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5p
b3MoKTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0g
MCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoK
IAogCmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQg
Y2xhc3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9
IG9mZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAg
IH5zdHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50
IGRlbHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFt
YnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVu
ZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xh
c3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNv
bnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0
aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1
cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAg
ICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9J
T19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJl
dHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAg
IGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciog
cGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2so
KSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6
IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf
YmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAg
ICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9
CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAg
IGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7
aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRm
bGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBp
bnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2sp
OyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lP
X3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikg
eyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwg
aW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dy
aXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNl
dGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgx
MDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBl
YjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0
YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJu
IF9mbGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9i
YWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFy
ICplR3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRf
ZW5kOyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lP
X3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBf
SU9fYmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFj
a3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkg
eyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9f
c2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2Ug
IT0gKF9fbnVsbCkgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMg
IT0gKF9fbnVsbCkgOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5z
YXZlX21hcmtlcnMoKTsgIAogICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4
MDAgOyB9CiAgICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1Zihp
bnQgZmxhZ3M9MCk7CiAgcHVibGljOgogICAgc3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0
YXRpYyB2b2lkIGZsdXNoX2FsbF9saW5lYnVmZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFt
YnVmKCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmly
dHVhbCBpbnQgdW5kZXJmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZp
cnR1YWwgaW50IHBiYWNrZmFpbChpbnQgYyk7CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1
dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4
c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtv
ZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAg
dmlydHVhbCBzdHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6
aW58aW9zOjpvdXQpOwoKICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vl
a19kaXIgZCwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3Nl
ZWtvZmYgKHRoaXMsIG8sIGQsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJl
YW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9J
T19zZWVrcG9zICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3Ry
ZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFt
cG9zIHNzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7
CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmly
dHVhbCBpbnQgc3luYygpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBz
ZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRi
YWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyBy
ZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0
dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkp
Cgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBs
aW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFn
cyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5i
dWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAog
ICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSAoX19udWxsKSApIGRvYWxsb2NidWYo
KTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBf
SU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0
dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0
bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQog
ICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19w
YWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFt
c2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUo
aW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAg
bG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIF9HX3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1
dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0
aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBp
bnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMg
ICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0x
KSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAg
ICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191
bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9J
T19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFk
X3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFy
IGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSAoX19udWxsKSApOwog
ICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29u
c3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAg
Li4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFy
Kiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYs
IF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50
IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBz
dHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0
YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50
IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxl
YnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29u
c3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihj
b25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQp
OwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhp
bnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+
PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDog
KC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRl
KCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBp
bnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYo
Y2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBz
dHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBu
KTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3Jl
YWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIo
KSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBj
aGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFs
IHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwg
aW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9
OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykg
ewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25z
PTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJ
X2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9
IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsg
aW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKICAgIGlmIChfYXJy
YXlzKSBkZWxldGUgW10gX2FycmF5czsKfQp9ICAKCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KysvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mg
b3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYg
KCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJl
YW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYg
Zmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2
aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgog
ICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVk
PSAoX19udWxsKSApOwogICAgaW50IG9wZngoKSB7CglpZiAoIWdvb2QoKSkgcmV0dXJuIDA7Cgll
bHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVybiAxO30gfQogICAgdm9pZCBv
c2Z4KCkgeyAgOwoJCSAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0YnVmfGlvczo6c3RkaW8pKQoJ
CSAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2goKTsKICAgIG9zdHJlYW0mIHB1
dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAqdGhpczsgfQoKCgoKCiAgICBv
c3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXplIG4pOwogICAgb3N0cmVhbSYg
d3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVy
biB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgc2ln
bmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNo
YXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0cmVhbXNpemUg
bikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0m
IHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1vZmYsIF9zZWVrX2Rp
cik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAq
Zm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3JtYXQsIF9HX3Zh
X2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFy
KWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0
aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMp
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1
cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCgoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91Ymxl
KW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAo
KmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHso
KmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3Ry
ZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAg
ICAKcHJvdGVjdGVkOgogICAgX0dfc2l6ZV90ICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93cygp
OwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0
cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gKF9fbnVsbCkgKTsKICAgIGlzdHJlYW0mIGdldChj
aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1
bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4g
Z2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7
CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJilj
KTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVu
LCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBk
ZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgo
Y2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBj
aGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsg
fQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K
ICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYg
cmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVh
ZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBz
dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlz
dHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQo
KGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRl
bGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6
OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVk
ID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBp
ZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJ
ICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2Qo
KSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAo
X3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJu
IF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7
ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7
CgkgICA7CgkgIGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1
c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGlu
dCBnZXQoKSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBf
c3RyYnVmLT5zYnVtcGMoKTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2Zi
aXQpOwoJCSAgICAgICByZXR1cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBf
R19zaXplX3QgIGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9y
ZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJl
YW0mIHNlZWtnKHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVr
X2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBj
aCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVh
cihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7Cglp
ZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRi
aXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0
IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3Qg
IGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIq
KXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9y
Pj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHty
ZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQm
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0
cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYg
b3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0
cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3Vi
bGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7
fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMp
KCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNz
IGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAg
ICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVk
PSAoX19udWxsKSApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBp
c3RyZWFtIHsKcHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3Ry
ZWFtJik7CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dp
dGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVh
bSY+IChyaHMpKTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBv
c3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3Ry
ZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dp
dGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVh
bSY+IChyaHMpKTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4
dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlu
cyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0m
IGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0
cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYg
aSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJu
IGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVj
fGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkK
eyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7
IH0KfSAgCgoKIyAxICJ0ZXN0MS5jYyIgMgoKCmNsYXNzIFRpbnkgewoKcHJpdmF0ZToKCWludCBh
OwoKcHVibGljOgoJVGlueSgpIDogYSgwKSB7fQoJflRpbnkoKSB7CgkJY291dDw8IkRlc3RydWN0
ZWQiPDxlbmRsOyAKCX0KCWludCBYKFRpbnkgYikgewoJCWEgPSBiLmE7Cgl9Cgl2b2lkIHNldEEo
aW50IGkpIHsgYSA9IGk7IH0KCXZvaWQgcHV0QSgpIHtjb3V0PDxhPDxlbmRsO30KfTsKCm1haW4o
KSB7CgoJVGlueSAqamsgPSBuZXcgVGlueSgpOwoJamstPnB1dEEoKTsKCWRlbGV0ZSBqazsKCWpr
LT5wdXRBKCk7CgoJVGlueSAqamsxID0gbmV3IFRpbnkoKTsKCWprMS0+cHV0QSgpOwoJZGVsZXRl
IGprMTsKCWprMS0+cHV0QSgpOwoJamstPnNldEEoNjcpOwoJamstPnB1dEEoKTsKfQo=


More information about the Gcc-bugs mailing list