c++/4602: error message suggests use of typename in /usr/include/g++-3/stl_iterator.h

magarwal@cadence.com magarwal@cadence.com
Wed Oct 17 23:26:00 GMT 2001


>Number:         4602
>Category:       c++
>Synopsis:       error message suggests use of typename in /usr/include/g++-3/stl_iterator.h
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Oct 17 23:26:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Mohit Agarwal
>Release:        g++-3
>Organization:
>Environment:
GNU/LINUX
>Description:
I was trying to compile Rougewave on linux. I got following error message :

/******************************

/usr/include/g++-3/stl_iterator.h:102: `_Iterator::iterator_category' 
is not a valid declarator
/usr/include/g++-3/stl_iterator.h:102:   perhaps you want `typename 
_Iterator::iterator_category' to make it a type
/usr/include/g++-3/stl_iterator.h:102: parse error before `;'
/usr/include/g++-3/stl_iterator.h:103: `_Iterator::value_type' is not a 
valid declarator
/usr/include/g++-3/stl_iterator.h:103:   perhaps you want `typename 
_Iterator::value_type' to make it a type
/usr/include/g++-3/stl_iterator.h:103: parse error before `;'
/usr/include/g++-3/stl_iterator.h:104: `_Iterator::difference_type' is 
not a valid declarator
/usr/include/g++-3/stl_iterator.h:104:   perhaps you want `typename 
_Iterator::difference_type' to make it a type
/usr/include/g++-3/stl_iterator.h:104: parse error before `;'
/usr/include/g++-3/stl_iterator.h:105: `_Iterator::pointer' is not a 
valid declarator
/usr/include/g++-3/stl_iterator.h:105:   perhaps you want `typename 
_Iterator::pointer' to make it a type
/usr/include/g++-3/stl_iterator.h:105: parse error before `;'
/usr/include/g++-3/stl_iterator.h:106: `_Iterator::reference' is not a 
valid declarator
/usr/include/g++-3/stl_iterator.h:106:   perhaps you want `typename 
_Iterator::reference' to make it a type
/usr/include/g++-3/stl_iterator.h:106: parse error before `;'
/usr/include/g++-3/stl_iterator.h:136: syntax error before `('
/usr/include/g++-3/stl_iterator.h:136: Internal error #19990916.
/usr/include/g++-3/stl_iterator.h:136: Internal compiler error in 
poplevel, at ../gcc/cp/decl.c:1315
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
/*********************************8

Please suggest the cause and solution of the error. I am working in Cadence 
Design Systems. I took your address from url given in error message. Hoping to 
receive your help ASAP.
>How-To-Repeat:
try compiling rougewave with g++-3 on gnu/linux.
>Fix:
expected
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="stl_iterator.h"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="stl_iterator.h"

LyoKICoKICogQ29weXJpZ2h0IChjKSAxOTk0CiAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CiAq
CiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwg
dGhpcyBzb2Z0d2FyZQogKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlz
IGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAogKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAogKiB0aGF0IGJvdGggdGhh
dCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgogKiBp
biBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtl
cyBubwogKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29m
dHdhcmUgZm9yIGFueQogKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0
IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KICoKICoKICogQ29weXJpZ2h0IChjKSAxOTk2
LTE5OTgKICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCiAqCiAqIFBl
cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBz
b2Z0d2FyZQogKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVi
eSBncmFudGVkIHdpdGhvdXQgZmVlLAogKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAogKiB0aGF0IGJvdGggdGhhdCBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgogKiBpbiBzdXBw
b3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCiAqIHJlcHJl
c2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55
CiAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBp
bXBsaWVkIHdhcnJhbnR5LgogKi8KCi8qIE5PVEU6IFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVy
IGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIFNUTCBoZWFkZXJzLgogKiAgIFlvdSBzaG91bGQgbm90
IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LgogKi8KCiNpZm5kZWYgX19TR0lfU1RMX0lOVEVS
TkFMX0lURVJBVE9SX0gKI2RlZmluZSBfX1NHSV9TVExfSU5URVJOQUxfSVRFUkFUT1JfSAoKX19T
VExfQkVHSU5fTkFNRVNQQUNFCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVi
bGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307Cgov
LyBUaGUgYmFzZSBjbGFzc2VzIGlucHV0X2l0ZXJhdG9yLCBvdXRwdXRfaXRlcmF0b3IsIGZvcndh
cmRfaXRlcmF0b3IsCi8vIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3IsIGFuZCByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yIGFyZSBub3QgcGFydCBvZgovLyB0aGUgQysrIHN0YW5kYXJkLiAgKHRoZXkgaGF2
ZSBiZWVuIHJlcGxhY2VkIGJ5IHN0cnVjdCBpdGVyYXRvci4pCi8vIFRoZXkgYXJlIGluY2x1ZGVk
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEhQIFNUTC4KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRl
Z29yeSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBj
bGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRl
cmF0b3IgewogIHR5cGVkZWYgX0NhdGVnb3J5ICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IF9UcCAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgX1BvaW50ZXIgICBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSBy
ZWZlcmVuY2U7Cn07CgojaWZkZWYgX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTgoK
dGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVn
b3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAg
ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAg
ICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRv
cl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBl
ZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3Qg
X1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAg
ICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKLy8gVGhlIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGl0
ZXJhdG9yX2NhdGVnb3J5LCBkaXN0YW5jZV90eXBlLCBhbmQKLy8gdmFsdWVfdHlwZSBhcmUgbm90
IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZC4gIChUaGV5IGhhdmUgYmVlbgovLyByZXBsYWNlZCBi
eSBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzLikgIFRoZXkgYXJlIGluY2x1ZGVkIGZvcgovLyBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEhQIFNUTC4KCi8vIFdlIGludHJvZHVjZSBpbnRl
cm5hbCBuYW1lcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkK
X19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1
cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBl
KGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoK
X192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJu
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlz
dGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19p
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJl
dHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKI2RlZmluZSBfX0lURVJBVE9SX0NBVEVHT1JZKF9f
aSkgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpCiNkZWZpbmUgX19ESVNUQU5DRV9UWVBFKF9faSkg
ICAgIF9fZGlzdGFuY2VfdHlwZShfX2kpCiNkZWZpbmUgX19WQUxVRV9UWVBFKF9faSkgICAgICAg
IF9fdmFsdWVfdHlwZShfX2kpCgojZWxzZSAvKiBfX1NUTF9DTEFTU19QQVJUSUFMX1NQRUNJQUxJ
WkFUSU9OICovCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IAppbmxpbmUg
aW5wdXRfaXRlcmF0b3JfdGFnIAppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBpbnB1dF9pdGVyYXRv
cjxfVHAsIF9EaXN0YW5jZT4mKQogIHsgcmV0dXJuIGlucHV0X2l0ZXJhdG9yX3RhZygpOyB9Cgpp
bmxpbmUgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeShjb25zdCBvdXRwdXRf
aXRlcmF0b3ImKQogIHsgcmV0dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiAKaW5saW5lIGZvcndhcmRfaXRlcmF0b3JfdGFn
Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IGZvcndhcmRfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+
JikKICB7IHJldHVybiBmb3J3YXJkX2l0ZXJhdG9yX3RhZygpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+IAppbmxpbmUgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcK
aXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfVHAsIF9EaXN0
YW5jZT4mKQogIHsgcmV0dXJuIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCk7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gCmlubGluZSByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZwppdGVyYXRvcl9jYXRlZ29yeShjb25zdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
PF9UcCwgX0Rpc3RhbmNlPiYpCiAgeyByZXR1cm4gcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWco
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9UcCopCiAgeyByZXR1cm4gcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcoKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
PiAKaW5saW5lIF9UcCogdmFsdWVfdHlwZShjb25zdCBpbnB1dF9pdGVyYXRvcjxfVHAsIF9EaXN0
YW5jZT4mKQogIHsgcmV0dXJuIChfVHAqKSgwKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPiAKaW5saW5lIF9UcCogdmFsdWVfdHlwZShjb25zdCBmb3J3YXJkX2l0ZXJh
dG9yPF9UcCwgX0Rpc3RhbmNlPiYpCiAgeyByZXR1cm4gKF9UcCopKDApOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IAppbmxpbmUgX1RwKiB2YWx1ZV90eXBlKGNvbnN0
IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKICB7IHJldHVybiAoX1Rw
KikoMCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gCmlubGluZSBf
VHAqIHZhbHVlX3R5cGUoY29uc3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxfVHAsIF9EaXN0YW5j
ZT4mKQogIHsgcmV0dXJuIChfVHAqKSgwKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IF9UcCogdmFsdWVfdHlwZShjb25zdCBfVHAqKSB7IHJldHVybiAoX1RwKikoMCk7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gCmlubGluZSBfRGlzdGFuY2UqIGRpc3Rh
bmNlX3R5cGUoY29uc3QgaW5wdXRfaXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JikKewogIHJldHVy
biAoX0Rpc3RhbmNlKikoMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4gCmlubGluZSBfRGlzdGFuY2UqIGRpc3RhbmNlX3R5cGUoY29uc3QgZm9yd2FyZF9pdGVyYXRv
cjxfVHAsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFuY2UqKSgwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiAKaW5saW5lIF9EaXN0YW5jZSogCmRpc3Rh
bmNlX3R5cGUoY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQp7
CiAgcmV0dXJuIChfRGlzdGFuY2UqKSgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPiAKaW5saW5lIF9EaXN0YW5jZSogCmRpc3RhbmNlX3R5cGUoY29uc3QgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFuY2Uq
KSgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHB0cmRpZmZfdCogZGlzdGFuY2Vf
dHlwZShjb25zdCBfVHAqKSB7IHJldHVybiAocHRyZGlmZl90KikoMCk7IH0KCi8vIFdpdGhvdXQg
cGFydGlhbCBzcGVjaWFsaXphdGlvbiB3ZSBjYW4ndCB1c2UgaXRlcmF0b3JfdHJhaXRzLCBzbwov
LyB3ZSBtdXN0IGtlZXAgdGhlIG9sZCBpdGVyYXRvciBxdWVyeSBmdW5jdGlvbnMgYXJvdW5kLiAg
CgojZGVmaW5lIF9fSVRFUkFUT1JfQ0FURUdPUlkoX19pKSBpdGVyYXRvcl9jYXRlZ29yeShfX2kp
CiNkZWZpbmUgX19ESVNUQU5DRV9UWVBFKF9faSkgICAgIGRpc3RhbmNlX3R5cGUoX19pKQojZGVm
aW5lIF9fVkFMVUVfVFlQRShfX2kpICAgICAgICB2YWx1ZV90eXBlKF9faSkKCiNlbmRpZiAvKiBf
X1NUTF9DTEFTU19QQVJUSUFMX1NQRUNJQUxJWkFUSU9OICovCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19k
aXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgX19uICs9
IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2Um
IF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKI2lmZGVmIF9fU1RMX0NMQVNTX1BBUlRJQUxfU1BFQ0lBTElaQVRJ
T04KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0
b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAr
K19fZmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmly
c3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn
b3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X0NhdGVnb3J5KCkpOwp9CgojZW5kaWYgLyogX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpB
VElPTiAqLwoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5s
aW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRf
aXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKI2lmIGRlZmluZWQoX19z
Z2kpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAoX01JUFNfU0lNICE9IF9NSVBTX1NJTV9BQkkz
MikKI3ByYWdtYSBzZXQgd29mZiAxMTgzCiNlbmRpZgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkKICAg
IHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoK
I2lmIGRlZmluZWQoX19zZ2kpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAoX01JUFNfU0lNICE9
IF9NSVBTX1NJTV9BQkkzMikKI3ByYWdtYSByZXNldCB3b2ZmIDExODMKI2VuZGlmCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2
b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwg
CiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9f
aSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf
X24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpw
cm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29u
dGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoK
I2lmbmRlZiBfX1NUTF9DTEFTU19QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NvbnRhaW5lcj4KaW5saW5lIG91dHB1dF9pdGVyYXRvcl90YWcKaXRlcmF0b3JfY2F0ZWdv
cnkoY29uc3QgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mKQp7CiAgcmV0dXJuIG91
dHB1dF9pdGVyYXRvcl90YWcoKTsKfQoKI2VuZGlmIC8qIF9fU1RMX0NMQVNTX1BBUlRJQUxfU1BF
Q0lBTElaQVRJT04gKi8KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gp
IHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnBy
b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250
YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh
bHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9
Cn07CgojaWZuZGVmIF9fU1RMX0NMQVNTX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04KCnRlbXBsYXRl
IDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgb3V0cHV0X2l0ZXJhdG9yX3RhZwppdGVyYXRvcl9j
YXRlZ29yeShjb25zdCBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mKQp7CiAgcmV0
dXJuIG91dHB1dF9pdGVyYXRvcl90YWcoKTsKfQoKI2VuZGlmIC8qIF9fU1RMX0NMQVNTX1BBUlRJ
QUxfU1BFQ0lBTElaQVRJT04gKi8KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWlu
ZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7
CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5l
cjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBj
b250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg
ICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFp
bmVyOjppdGVyYXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQog
IGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUg
X0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXIt
Pmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0KfTsKCiNpZm5kZWYgX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFM
SVpBVElPTgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBvdXRwdXRfaXRlcmF0
b3JfdGFnCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYpCnsKICByZXR1cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygpOwp9CgojZW5kaWYgLyogX19TVExf
Q0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTiAqLwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu
ZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4g
aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKI2lmbmRlZiBfX1NUTF9MSU1JVEVE
X0RFRkFVTFRfVEVNUExBVEVTCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
LCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAKICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZSA9IHB0cmRpZmZfdD4gCiNlbHNlCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UsIAogICAgICAgICAgY2xhc3Mg
X0Rpc3RhbmNlPiAKI2VuZGlmCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7
CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRl
cjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGly
ZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJl
bnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0K
I2lmbmRlZiBfX1NHSV9TVExfTk9fQVJST1dfT1BFUkFUT1IKICBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQojZW5kaWYgLyogX19TR0lfU1RMX05P
X0FSUk9XX09QRVJBVE9SICovCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2Vs
ZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBf
U2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAr
K2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKI2lmbmRlZiBfX1NUTF9DTEFTU19Q
QVJUSUFMX1NQRUNJQUxJWkFUSU9OCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2NhdGVnb3J5
KGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwLCBfUmVmZXJlbmNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZT4mKSAKewogIHJldHVybiBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIF9UcCoKdmFsdWVfdHlwZShjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRl
cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAgcmV0
dXJuIChfVHAqKSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
Y2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIF9EaXN0YW5jZSoKZGlzdGFuY2VfdHlwZShjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiYpCnsK
ICByZXR1cm4gKF9EaXN0YW5jZSopIDA7Cn0KCiNlbmRpZiAvKiBfX1NUTF9DTEFTU19QQVJUSUFM
X1NQRUNJQUxJWkFUSU9OICovCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9U
cCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVy
biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCiNpZmRlZiBfX1NUTF9DTEFTU19QQVJUSUFM
X1NQRUNJQUxJWkFUSU9OCgovLyBUaGlzIGlzIHRoZSBuZXcgdmVyc2lvbiBvZiByZXZlcnNlX2l0
ZXJhdG9yLCBhcyBkZWZpbmVkIGluIHRoZQovLyAgZHJhZnQgQysrIHN0YW5kYXJkLiAgSXQgcmVs
aWVzIG9uIHRoZSBpdGVyYXRvcl90cmFpdHMgdGVtcGxhdGUsCi8vICB3aGljaCBpbiB0dXJuIHJl
bGllcyBvbiBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uLiAgVGhlIGNsYXNzCi8vICByZXZlcnNlX2Jp
ZGlyZWN0aW9uYWxfaXRlcmF0b3IgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIGRyYWZ0Ci8vICBz
dGFuZGFyZCwgYnV0IGl0IGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgoK
dGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciAKewpwcm90
ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh
dG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0
eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4
cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gp
IHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5j
dXJyZW50KSB7fQojaWZkZWYgX19TVExfTUVNQkVSX1RFTVBMQVRFUwogIHRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+
JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KI2VuZGlmIC8qIF9fU1RMX01FTUJF
Ul9URU1QTEFURVMgKi8KICAgIAogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9y
IF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiNpZm5kZWYgX19TR0lf
U1RMX05PX0FSUk9XX09QRVJBVE9SCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJihvcGVyYXRvciooKSk7IH0KI2VuZGlmIC8qIF9fU0dJX1NUTF9OT19BUlJPV19PUEVSQVRP
UiAqLwoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRv
ci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVy
YXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAg
IHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19u
KSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBv
cGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikg
Y29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9f
bikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i
YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVuYW1lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKI2Vsc2UgLyogX19T
VExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTiAqLwoKLy8gVGhpcyBpcyB0aGUgb2xkIHZl
cnNpb24gb2YgcmV2ZXJzZV9pdGVyYXRvciwgYXMgZm91bmQgaW4gdGhlIG9yaWdpbmFsCi8vICBI
UCBTVEwuICBJdCBkb2VzIG5vdCB1c2UgcGFydGlhbCBzcGVjaWFsaXphdGlvbi4KCiNpZm5kZWYg
X19TVExfTElNSVRFRF9ERUZBVUxUX1RFTVBMQVRFUwp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKI2Vsc2UKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlLAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlPiAKI2VuZGlmCmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgewogIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9UcCwgX1JlZmVy
ZW5jZSwgX0Rpc3RhbmNlPgogICAgICAgIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50
ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIHJl
dmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9feCkgOiBjdXJyZW50KF9feCkge30KICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICooY3VycmVudCAtIDEpOyB9CiNpZm5kZWYgX19TR0lfU1RMX05P
X0FSUk9XX09QRVJBVE9SCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv
cGVyYXRvciooKSk7IH0KI2VuZGlmIC8qIF9fU0dJX1NUTF9OT19BUlJPV19PUEVSQVRPUiAqLwog
IF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
IC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7
CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0o
aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJu
IF9fdG1wOwogIH0KICBfU2VsZiBvcGVyYXRvcisoX0Rpc3RhbmNlIF9fbikgY29uc3QgewogICAg
cmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShfRGlz
dGFuY2UgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
X1NlbGYgb3BlcmF0b3ItKF9EaXN0YW5jZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihj
dXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oX0Rpc3RhbmNlIF9fbikgewog
ICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9SZWZlcmVuY2Ugb3Bl
cmF0b3JbXShfRGlzdGFuY2UgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCAKICAg
ICAgICAgIGNsYXNzIF9SZWZlcmVuY2UsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiYpCnsKICByZXR1cm4gcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgX1RwKiB2YWx1ZV90eXBlKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+JikKewogIHJldHVybiAoX1RwKikg
MDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLAog
ICAgICAgICAgY2xhc3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3Rh
bmNlKiAKZGlzdGFuY2VfdHlwZShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAsIF9SZWZl
cmVuY2UsIF9EaXN0YW5jZT4mKQp7CiAgcmV0dXJuIChfRGlzdGFuY2UqKSAwOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xh
c3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I9PShj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgX1RwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiYgX194LCAK
ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3Rh
bmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xh
c3MgX1JlZmVyZW5jZSwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBfVHAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mIF9feCwgCiAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgX1Rw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+
JiBfX3kpCnsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9S
ZWZlcmVuY2UsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSAKb3BlcmF0b3ItKGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBfVHAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4mIF9feCwgCiAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgX1Rw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+
JiBfX3kpCnsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZEFjY0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3Q+Cmlu
bGluZSByZXZlcnNlX2l0ZXJhdG9yPF9SYW5kQWNjSXRlciwgX1RwLCBfUmVmLCBfRGlzdD4gCm9w
ZXJhdG9yKyhfRGlzdCBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9SYW5k
QWNjSXRlciwgX1RwLCBfUmVmLCBfRGlzdD4mIF9feCkKewogIHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yPF9SYW5kQWNjSXRlciwgX1RwLCBfUmVmLCBfRGlzdD4oX194LmJhc2UoKSAtIF9fbik7Cn0K
CiNlbmRpZiAvKiBfX1NUTF9DTEFTU19QQVJUSUFMX1NQRUNJQUxJWkFUSU9OICovCgovLyBXaGVu
IHdlIGhhdmUgdGVtcGxhdGl6ZWQgaW9zdHJlYW1zLCBpc3RyZWFtX2l0ZXJhdG9yIGFuZCBvc3Ry
ZWFtX2l0ZXJhdG9yCi8vIG11c3QgYmUgcmV3cml0dGVuLgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09IF9fU1RMX05VTExfVE1QTF9BUkdTIChjb25zdCBpc3RyZWFtX2l0
ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoKICBpc3RyZWFtKiBfTV9zdHJlYW07
CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtlcjsKICB2b2lkIF9NX3JlYWQoKSB7
CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYg
KF9NX2VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICBfTV9lbmRfbWFya2Vy
ID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYgaW5w
dXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg
ICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0ICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3QgX1RwJiAgICAgICAgICByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6
IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJh
dG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZl
cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KI2lmbmRlZiBfX1NH
SV9TVExfTk9fQVJST1dfT1BFUkFUT1IKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmKG9wZXJhdG9yKigpKTsgfQojZW5kaWYgLyogX19TR0lfU1RMX05PX0FSUk9XX09QRVJB
VE9SICovCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsgCiAg
ICBfTV9yZWFkKCk7IAogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yPF9U
cCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSAgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9E
aXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0K
fTsKCiNpZm5kZWYgX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Q+CmlubGluZSBpbnB1dF9pdGVyYXRvcl90YWcgCml0ZXJh
dG9yX2NhdGVnb3J5KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mKQp7CiAgcmV0
dXJuIGlucHV0X2l0ZXJhdG9yX3RhZygpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
RGlzdD4KaW5saW5lIF9UcCogCnZhbHVlX3R5cGUoY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9EaXN0PiYpIHsgcmV0dXJuIChfVHAqKSAwOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfRGlzdD4KaW5saW5lIF9EaXN0KiAKZGlzdGFuY2VfdHlwZShjb25zdCBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0Rpc3Q+JikgeyByZXR1cm4gKF9EaXN0KikwOyB9CgojZW5kaWYgLyogX19TVExf
Q0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTiAqLwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0
cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAoX194Ll9NX3N0
cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBf
X3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2Ug
JiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNs
YXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwog
IGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6
IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry
ZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3Ry
aW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1Rw
JiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmlu
ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJl
YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSAKICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfSAKfTsKCiNp
Zm5kZWYgX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIG91dHB1dF9pdGVyYXRvcl90YWcgCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0
IG9zdHJlYW1faXRlcmF0b3I8X1RwPiYpIHsKICByZXR1cm4gb3V0cHV0X2l0ZXJhdG9yX3RhZygp
Owp9CgojZW5kaWYgLyogX19TVExfQ0xBU1NfUEFSVElBTF9TUEVDSUFMSVpBVElPTiAqLwoKX19T
VExfRU5EX05BTUVTUEFDRQoKI2VuZGlmIC8qIF9fU0dJX1NUTF9JTlRFUk5BTF9JVEVSQVRPUl9I
ICovCgovLyBMb2NhbCBWYXJpYWJsZXM6Ci8vIG1vZGU6QysrCi8vIEVuZDoK



More information about the Gcc-bugs mailing list