[Insight-developers] Bug Report: VNL configure on cygwin/gcc 3.2

Lydia Ng lng@insightful.com
Tue, 11 Feb 2003 10:45:18 -0800


This is a multi-part message in MIME format.

------_=_NextPart_001_01C2D1FD.B91DA76F
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable


Problem: Cygwin/gcc3.2 fails when trying to build VXLNumerics

I think I've track down to problem to when VCL does configure.
It tries to test if the compiler "needs explicit instantiation" and I
think it gets it wrong. Consequently in vcl_config_compiler.h,
VCL_NEEDS_INLINE_INSTANTION is defined to be "1". With the previous
version of gcc it was defined to "0". In fact, if you edit the header
file and change it to "0", ITK compiles ok.

Does anyone know how to fix the configure process so that it would get
the right results?

I have attached vxl\vcl\config.log and vcl_config_compiler.h which might
help with debugging.

The actual error message you get when you try to compile ITK is below.

- Lydia

-------------------------------------------------------------
c++ -ftemplate-depth-50 -D_PTHREADS -DNOMINMAX
-I/cygdrive/d/lng/Insight/Insigh
t/Code/Numerics/vxl -I/cygdrive/d/lng/Insight/Insight/Code/Algorithms
-I/cygdriv
e/d/lng/Insight/Insight/Code/BasicFilters
-I/cygdrive/d/lng/Insight/Insight/Code
/Common -I/cygdrive/d/lng/Insight/Insight/Code/Numerics
-I/cygdrive/d/lng/Insigh
t/Insight/Code/IO -I/cygdrive/d/lng/Insight/Insight/Code/Numerics/FEM
-I/cygdriv
e/d/lng/Insight/Insight/Code/Numerics/Statistics
-I/cygdrive/d/lng/Insight/Insig
ht-Cygwin/Code/Numerics/vxl
-I/cygdrive/d/lng/Insight/Insight/Code/Numerics/vxl
-I/cygdrive/d/lng/Insight/Insight-Cygwin/Code/Numerics/vxl/vcl
-I/cygdrive/d/lng
/Insight/Insight/Code/Numerics/vxl/vcl
-I/cygdrive/d/lng/Insight/Insight/Code/Sp
atialObject -I/cygdrive/d/lng/Insight/Insight/Utilities/png
-I/cygdrive/d/lng/In
sight/Insight/Utilities/zlib
-I/cygdrive/d/lng/Insight/Insight/Utilities/MetaIO
-I/cygdrive/d/lng/Insight/Insight/Utilities/MetaIO/SpatialObject
-I/cygdrive/d/l
ng/Insight/Insight/Utilities/DICOMParser
-I/cygdrive/d/lng/Insight/Insight-Cygwi
n   -c
/cygdrive/d/lng/Insight/Insight/Code/Numerics/vxl/vnl/Templates/vnl_matr
i
x+double-.cxx -o vnl/Templates/vnl_matrix+double-.o
/cygdrive/d/lng/Insight/Insight/Code/Numerics/vxl/vnl/Templates/vnl_matr
ix+doubl
e-.cxx:2: non-template
   used as template
make[7]: *** [vnl/Templates/vnl_matrix+double-.o] Error 1
make[6]: *** [default_target] Error 2
make[5]: *** [default_target_vxl] Error 2
make[4]: *** [default_target] Error 2
make[3]: *** [default_target_Numerics] Error 2
make[2]: *** [default_target] Error 2
make[1]: *** [default_target_Code] Error 2
make: *** [default_target] Error 2


------_=_NextPart_001_01C2D1FD.B91DA76F
Content-Type: application/octet-stream;
	name="config.cache"
Content-Transfer-Encoding: base64
Content-Description: config.cache
Content-Disposition: attachment;
	filename="config.cache"

IyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2Yg
Y29uZmlndXJlCiMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJl
ZCBiZXR3ZWVuIGNvbmZpZ3VyZQojIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLiAgSXQgaXMg
bm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLgojIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91
IGRvbid0IHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KIwojIEJ5IGRl
ZmF1bHQsIGNvbmZpZ3VyZSB1c2VzIC4vY29uZmlnLmNhY2hlIGFzIHRoZSBjYWNoZSBmaWxlLAoj
IGNyZWF0aW5nIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0IGFscmVhZHkuICBZb3UgY2FuIGdpdmUg
Y29uZmlndXJlCiMgdGhlIC0tY2FjaGUtZmlsZT1GSUxFIG9wdGlvbiB0byB1c2UgYSBkaWZmZXJl
bnQgY2FjaGUgZmlsZTsgdGhhdCBpcwojIHdoYXQgY29uZmlndXJlIGRvZXMgd2hlbiBpdCBjYWxs
cyBjb25maWd1cmUgc2NyaXB0cyBpbgojIHN1YmRpcmVjdG9yaWVzLCBzbyB0aGV5IHNoYXJlIHRo
ZSBjYWNoZS4KIyBHaXZpbmcgLS1jYWNoZS1maWxlPS9kZXYvbnVsbCBkaXNhYmxlcyBjYWNoaW5n
LCBmb3IgZGVidWdnaW5nIGNvbmZpZ3VyZS4KIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRl
bnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQgdGhlCiMgLS1yZWNoZWNrIG9w
dGlvbiB0byByZXJ1biBjb25maWd1cmUuCiMKYWNfY3ZfaGVhZGVyX2NvbXBsZXg9JHthY19jdl9o
ZWFkZXJfY29tcGxleD0neWVzJ30NCmFjX2N2X2hlYWRlcl9pb3M9JHthY19jdl9oZWFkZXJfaW9z
PSd5ZXMnfQ0KYWNfY3ZfcHJvZ19jY193b3Jrcz0ke2FjX2N2X3Byb2dfY2Nfd29ya3M9J3llcyd9
DQphY19jdl9oZWFkZXJfdHlwZWluZm89JHthY19jdl9oZWFkZXJfdHlwZWluZm89J3llcyd9DQph
Y19jdl9oZWFkZXJfc2V0PSR7YWNfY3ZfaGVhZGVyX3NldD0neWVzJ30NCmFjX2N2X3Byb2dfQ1hY
Q1BQPSR7YWNfY3ZfcHJvZ19DWFhDUFA9J2MrKyAtRSd9DQphY19jdl9oZWFkZXJfY3N0cmluZz0k
e2FjX2N2X2hlYWRlcl9jc3RyaW5nPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2Nsb2NhbGU9JHthY19j
dl9oZWFkZXJfY2xvY2FsZT0neWVzJ30NCmFjX2N2X2NfYmlnZW5kaWFuPSR7YWNfY3ZfY19iaWdl
bmRpYW49J25vJ30NCmFjX2N2X2hlYWRlcl9zdHJzdHJlYW09JHthY19jdl9oZWFkZXJfc3Ryc3Ry
ZWFtPSdubyd9DQphY19jdl9oZWFkZXJfZnVuY3Rpb25hbD0ke2FjX2N2X2hlYWRlcl9mdW5jdGlv
bmFsPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX29zdHJlYW09JHthY19jdl9oZWFkZXJfb3N0cmVhbT0n
eWVzJ30NCmFjX2N2X2hlYWRlcl9jc3RkaW89JHthY19jdl9oZWFkZXJfY3N0ZGlvPSd5ZXMnfQ0K
YWNfY3ZfaGVhZGVyX2N0aW1lPSR7YWNfY3ZfaGVhZGVyX2N0aW1lPSd5ZXMnfQ0KYWNfY3ZfaGVh
ZGVyX2NjdHlwZT0ke2FjX2N2X2hlYWRlcl9jY3R5cGU9J3llcyd9DQphY19jdl9wcm9nX2NjX2c9
JHthY19jdl9wcm9nX2NjX2c9J3llcyd9DQphY19jdl9oZWFkZXJfZGVxdWU9JHthY19jdl9oZWFk
ZXJfZGVxdWU9J3llcyd9DQphY19jdl9oZWFkZXJfY2Vycm5vPSR7YWNfY3ZfaGVhZGVyX2NlcnJu
bz0neWVzJ30NCmFjX2N2X2hlYWRlcl9zc3RyZWFtPSR7YWNfY3ZfaGVhZGVyX3NzdHJlYW09J3ll
cyd9DQphY19jdl9oZWFkZXJfY3djdHlwZT0ke2FjX2N2X2hlYWRlcl9jd2N0eXBlPSd5ZXMnfQ0K
YWNfY3ZfaGVhZGVyX3N0YWNrPSR7YWNfY3ZfaGVhZGVyX3N0YWNrPSd5ZXMnfQ0KYWNfY3ZfaGVh
ZGVyX2JpdHNldD0ke2FjX2N2X2hlYWRlcl9iaXRzZXQ9J3llcyd9DQphY19jdl9wcm9nX0NYWD0k
e2FjX2N2X3Byb2dfQ1hYPSdjKysnfQ0KYWNfY3ZfaGVhZGVyX2lvc2Z3ZD0ke2FjX2N2X2hlYWRl
cl9pb3Nmd2Q9J3llcyd9DQphY19jdl9oZWFkZXJfYWxnb3JpdGhtPSR7YWNfY3ZfaGVhZGVyX2Fs
Z29yaXRobT0neWVzJ30NCmFjX2N2X2hlYWRlcl9jc3RkZGVmPSR7YWNfY3ZfaGVhZGVyX2NzdGRk
ZWY9J3llcyd9DQphY19jdl9wcm9nX2N4eF9jcm9zcz0ke2FjX2N2X3Byb2dfY3h4X2Nyb3NzPSdu
byd9DQphY19jdl9oZWFkZXJfc3RyZWFtYnVmPSR7YWNfY3ZfaGVhZGVyX3N0cmVhbWJ1Zj0neWVz
J30NCmFjX2N2X2hlYWRlcl9saW1pdHM9JHthY19jdl9oZWFkZXJfbGltaXRzPSd5ZXMnfQ0KYWNf
Y3ZfaGVhZGVyX3ZlY3Rvcj0ke2FjX2N2X2hlYWRlcl92ZWN0b3I9J3llcyd9DQphY19jdl9oZWFk
ZXJfY3NpZ25hbD0ke2FjX2N2X2hlYWRlcl9jc2lnbmFsPSd5ZXMnfQ0KYWNfY3ZfcHJvZ19DQz0k
e2FjX2N2X3Byb2dfQ0M9J2djYyd9DQphY19jdl9oZWFkZXJfZXhjZXB0aW9uPSR7YWNfY3ZfaGVh
ZGVyX2V4Y2VwdGlvbj0neWVzJ30NCmFjX2N2X2hlYWRlcl9zdHJpbmc9JHthY19jdl9oZWFkZXJf
c3RyaW5nPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2xvY2FsZT0ke2FjX2N2X2hlYWRlcl9sb2NhbGU9
J3llcyd9DQphY19jdl9oZWFkZXJfY3N0ZGxpYj0ke2FjX2N2X2hlYWRlcl9jc3RkbGliPSd5ZXMn
fQ0KYWNfY3ZfaGVhZGVyX21lbW9yeT0ke2FjX2N2X2hlYWRlcl9tZW1vcnk9J3llcyd9DQphY19j
dl9oZWFkZXJfcXVldWU9JHthY19jdl9oZWFkZXJfcXVldWU9J3llcyd9DQphY19jdl9oZWFkZXJf
Y3N0ZGFyZz0ke2FjX2N2X2hlYWRlcl9jc3RkYXJnPSd5ZXMnfQ0KYWNfY3ZfcHJvZ19jeHhfd29y
a3M9JHthY19jdl9wcm9nX2N4eF93b3Jrcz0neWVzJ30NCmFjX2N2X2hlYWRlcl9zdGRleGNlcHQ9
JHthY19jdl9oZWFkZXJfc3RkZXhjZXB0PSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2Npc282NDY9JHth
Y19jdl9oZWFkZXJfY2lzbzY0Nj0neWVzJ30NCmFjX2N2X2hlYWRlcl9tYXA9JHthY19jdl9oZWFk
ZXJfbWFwPSd5ZXMnfQ0KYWNfY3ZfcHJvZ19nY2M9JHthY19jdl9wcm9nX2djYz0neWVzJ30NCmFj
X2N2X3Byb2dfY2NfY3Jvc3M9JHthY19jdl9wcm9nX2NjX2Nyb3NzPSdubyd9DQphY19jdl9oZWFk
ZXJfdmFsYXJyYXk9JHthY19jdl9oZWFkZXJfdmFsYXJyYXk9J3llcyd9DQphY19jdl9oZWFkZXJf
dXRpbGl0eT0ke2FjX2N2X2hlYWRlcl91dGlsaXR5PSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2lvbWFu
aXA9JHthY19jdl9oZWFkZXJfaW9tYW5pcD0neWVzJ30NCmFjX2N2X2hlYWRlcl9jd2NoYXI9JHth
Y19jdl9oZWFkZXJfY3djaGFyPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2NmbG9hdD0ke2FjX2N2X2hl
YWRlcl9jZmxvYXQ9J3llcyd9DQphY19jdl9wcm9nX2N4eF9nPSR7YWNfY3ZfcHJvZ19jeHhfZz0n
eWVzJ30NCmFjX2N2X2hlYWRlcl9pb3N0cmVhbT0ke2FjX2N2X2hlYWRlcl9pb3N0cmVhbT0neWVz
J30NCmFjX2N2X3Byb2dfZ3h4PSR7YWNfY3ZfcHJvZ19neHg9J3llcyd9DQphY19jdl9oZWFkZXJf
ZnN0cmVhbT0ke2FjX2N2X2hlYWRlcl9mc3RyZWFtPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX251bWVy
aWM9JHthY19jdl9oZWFkZXJfbnVtZXJpYz0neWVzJ30NCmFjX2N2X2hlYWRlcl9saXN0PSR7YWNf
Y3ZfaGVhZGVyX2xpc3Q9J3llcyd9DQphY19jdl9oZWFkZXJfaXRlcmF0b3I9JHthY19jdl9oZWFk
ZXJfaXRlcmF0b3I9J3llcyd9DQphY19jdl9oZWFkZXJfaXN0cmVhbT0ke2FjX2N2X2hlYWRlcl9p
c3RyZWFtPSd5ZXMnfQ0KYWNfY3ZfaGVhZGVyX2NsaW1pdHM9JHthY19jdl9oZWFkZXJfY2xpbWl0
cz0neWVzJ30NCmFjX2N2X2hlYWRlcl9jYXNzZXJ0PSR7YWNfY3ZfaGVhZGVyX2Nhc3NlcnQ9J3ll
cyd9DQphY19jdl9oZWFkZXJfY3NldGptcD0ke2FjX2N2X2hlYWRlcl9jc2V0am1wPSd5ZXMnfQ0K
YWNfY3ZfaGVhZGVyX25ldz0ke2FjX2N2X2hlYWRlcl9uZXc9J3llcyd9DQphY19jdl9oZWFkZXJf
Y21hdGg9JHthY19jdl9oZWFkZXJfY21hdGg9J3llcyd9DQo=

------_=_NextPart_001_01C2D1FD.B91DA76F
Content-Type: application/octet-stream;
	name="vcl_config_compiler.h"
Content-Transfer-Encoding: base64
Content-Description: vcl_config_compiler.h
Content-Disposition: attachment;
	filename="vcl_config_compiler.h"

I2lmbmRlZiB2Y2xfY29uZmlnX2NvbXBpbGVyX2hfDQojZGVmaW5lIHZjbF9jb25maWdfY29tcGls
ZXJfaF8NCg0KLy8gVGhpcyBmaWxlIGVpdGhlciBpcyBvciB3YXMgZ2VuZXJhdGVkIGZyb20gdmNs
X2NvbmZpZ19jb21waWxlci5oLmluDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gc3ludGF4LWxpa2Ug
dGhpbmdzLg0KDQovLzogVkNMX0hBU19CT09MDQovLyBTZXQgdG8gMSBpZiAiYm9vbCIgaXMgYWNj
ZXB0ZWQgYnkgdGhlIGNvbXBpbGVyIGFzIGEgYnVpbHQtaW4gdHlwZS4NCiNkZWZpbmUgVkNMX0hB
U19CT09MIDENCg0KDQovLzogVkNMX0hBU19EWU5BTUlDX0NBU1QNCi8vIA0KLy8gVHJ1ZSBpZiB0
aGUgY29tcGlsZXIgc3VwcG9ydHMgZHluYW1pYyBjYXN0Lg0KLy8NCiNkZWZpbmUgVkNMX0hBU19E
WU5BTUlDX0NBU1QgMQ0KDQoNCi8vOiBWQ0xfSEFTX1RZUEVOQU1FDQovLyANCi8vIFRydWUgaWYg
dGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAidHlwZW5hbWUiIGtleXdvcmQNCi8vDQojZGVmaW5l
IFZDTF9IQVNfVFlQRU5BTUUgMQ0KDQoNCi8vOiBWQ0xfSEFTX0VYUE9SVA0KLy8gDQovLyBUcnVl
IGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgImV4cG9ydCIga2V5d29yZA0KLy8NCiNkZWZp
bmUgVkNMX0hBU19FWFBPUlQgMQ0KDQovLzogVkNMX0hBU19NVVRBQkxFDQovLyANCi8vIFRydWUg
aWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAibXV0YWJsZSIga2V5d29yZA0KLy8NCiNkZWZp
bmUgVkNMX0hBU19NVVRBQkxFIDENCg0KDQovLzogVkNMX0hBU19FWFBMSUNJVA0KLy8gDQovLyBU
cnVlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgImV4cGxpY2l0IiBrZXl3b3JkDQovLw0K
I2RlZmluZSBWQ0xfSEFTX0VYUExJQ0lUIDENCg0KDQovLzogVkNMX0ZPUl9TQ09QRV9IQUNLOg0K
Ly8gDQovLyBUcnVlIGlmIHRoZSBjb21waWxlciB1c2VzIG9sZC1zdHlsZSAnZm9yJyBsb29wIHNj
b3BpbmcuDQovLyBTZXR0aW5nIHRoaXMgbm9uemVybyBjYXVzZXMgdGhlIEhlbmRlcnNvbiB0cmlj
ayB0byBiZSB1c2VkLg0KI2RlZmluZSBWQ0xfRk9SX1NDT1BFX0hBQ0sgMA0KDQoNCi8vOiBWQ0xf
REVGQVVMVF9WQUxVRSh4KQ0KLy8NCi8vIFVzZWQgdG8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBm
b3IgZnVuY3Rpb24gYXJncyBpbiBkZWZpbml0aW9uDQovLyBTb21lIGNvbXBpbGVycyAoR0NDMjcy
KSByZXF1aXJlIGRlZmF1bHRzIGluIHRlbXBsYXRlIGZ1bmN0aW9uIGRlZmluaXRpb25zDQovLyBP
dGhlciBjb21waWxlcnMgKFZDNTApIGRpc2FsbG93IGRlZmF1bHRzIGluIGJvdGggZGVjbHMgYW5k
IGRlZnMNCg0KLy8jZGVmaW5lIFZDTF9ERUZBVUxUX1ZBTFVFKHgpIC8qIG5vIG5lZWQgKi8NCi8v
I2RlZmluZSBWQ0xfREVGQVVMVF9WQUxVRSh4KSA9IHgNCiNkZWZpbmUgVkNMX0RFRkFVTFRfVkFM
VUUoeCkgLyogbm8gbmVlZCAqLw0KDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcHJvYmxlbXMgd2l0
aCBzdGF0aWMgbWVtYmVycy4NCg0KLy8gVkNMX0lNUExFTUVOVF9TVEFUSUNfQ09OU1RTDQovLyAN
Ci8vIFRydWUgaWYgc3RhdGljIGNvbnN0cyBtdXN0IGJlIGRlZmluZWQgaW4gc29tZSBzb3VyY2Ug
ZmlsZS4gIEkgZG9uJ3Qga25vdw0KLy8gd2hhdCBBTlNJIGhhcyB0byBzYXkgYWJvdXQgdGhpcywg
YnV0IGFueXdheSwgdGhlIGFib3ZlIGV4YW1wbGUgbmVlZHMgdGhpcw0KLy8gaW4gc29tZSAuQyBm
aWxlOg0KLy8gXHZlcmJhdGltDQovLyAgICAgI2lmIFZDTF9JTVBMRU1FTlRfU1RBVElDX0NPTlNU
Uw0KLy8gICAgIGNvbnN0IGludCBBOjp4ID0gMjc7DQovLyAgICAgI2VuZGlmDQovLyBcZW5kdmVy
YmF0aW0NCi8vI2RlZmluZSBWQ0xfSU1QTEVNRU5UX1NUQVRJQ19DT05TVFMgMA0KDQoNCi8vOiBW
Q0xfU1RBVElDX0NPTlNUX0lOSVRfSU5UKHgpDQovLyANCi8vIEFOU0kgYWxsb3dzDQovLyBcdmVy
YmF0aW0NCi8vICAgICBjbGFzcyBBIHsNCi8vICAgICAJIHN0YXRpYyBjb25zdCBpbnQgeCA9IDI3
Ow0KLy8gICAgIH07DQovLyBcZW5kdmVyYmF0aW0NCi8vIEFuZCB0aGVyZSBpcyBhIHNwZWVkIGFk
dmFudGFnZSwgc28gd2Ugd2FudCB0byB1c2UgaXQgd2hlcmUgc3VwcG9ydGVkLg0KLy8gVGhlIG1h
Y3JvIGlzIHVzZWQgbGlrZSB0aGlzOg0KLy8gXHZlcmJhdGltDQovLyAgICAgICBzdGF0aWMgY29u
c3QgaW50IHggVkNMX1NUQVRJQ19DT05TVF9JTklUX0lOVCgyNyk7DQovLyBcZW5kdmVyYmF0aW0N
Ci8vDQovLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHF1ZXJ5IHRoZSBzZXR0aW5nIG9mIHRoaXMs
IG9uZSBhY3R1YWxseSBtdXN0DQovLyBkZWZpbmUgVkNMX0NBTl9TVEFUSUNfQ09OU1RfSU5JVF9J
TlQgdG8gZWl0aGVyIDAgb3IgMS4NCg0KLy8jZGVmaW5lIFZDTF9DQU5fU1RBVElDX0NPTlNUX0lO
SVRfSU5UIDEgLyogYWxsb3dlZCAqLw0KLy8jZGVmaW5lIFZDTF9DQU5fU1RBVElDX0NPTlNUX0lO
SVRfSU5UIDAgLyogbm90IGFsbG93ZWQgKi8NCiNpZm5kZWYgVkNMX0NBTl9TVEFUSUNfQ09OU1Rf
SU5JVF9JTlQNCiNkZWZpbmUgVkNMX0NBTl9TVEFUSUNfQ09OU1RfSU5JVF9JTlQgKDEgJiYgITAp
DQojZW5kaWYNCiNpZiBWQ0xfQ0FOX1NUQVRJQ19DT05TVF9JTklUX0lOVA0KI2RlZmluZSBWQ0xf
U1RBVElDX0NPTlNUX0lOSVRfSU5UKHgpID0geA0KI2Vsc2UNCiNkZWZpbmUgVkNMX1NUQVRJQ19D
T05TVF9JTklUX0lOVCh4KSAvKiBub3QgYWxsb3dlZCAqLw0KI2VuZGlmDQoNCg0KLy86IFZDTF9T
VEFUSUNfQ09OU1RfSU5JVF9GTE9BVCh4KQ0KLy8gDQovLyBHQ0MgYWxsb3dzIHRoZSBhYm92ZSwg
YnV0IHdpdGggZmxvYXRpbmcgcG9pbnQgdHlwZXMsIEFOU0kgZG9lc24ndC4NCi8vIEFnYWluLCB3
ZSdsbCB1c2UgaXQgaWYgd2UndmUgZ290IGl0Lg0KLy8NCi8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcXVlcnkgdGhlIHNldHRpbmcgb2YgdGhpcywgb25lIGFjdHVhbGx5IG11c3QNCi8vIGRlZmlu
ZSBWQ0xfQ0FOX1NUQVRJQ19DT05TVF9JTklUX0ZMT0FUIHRvIGVpdGhlciAwIG9yIDEuDQoNCi8v
I2RlZmluZSBWQ0xfQ0FOX1NUQVRJQ19DT05TVF9JTklUX0ZMT0FUIDEgLyogYWxsb3dlZCAqLw0K
Ly8jZGVmaW5lIFZDTF9DQU5fU1RBVElDX0NPTlNUX0lOSVRfRkxPQVQgMCAvKiBub3QgYWxsb3dl
ZCAqLw0KI2lmbmRlZiBWQ0xfQ0FOX1NUQVRJQ19DT05TVF9JTklUX0ZMT0FUDQojZGVmaW5lIFZD
TF9DQU5fU1RBVElDX0NPTlNUX0lOSVRfRkxPQVQgKDEgJiYgITApDQojZW5kaWYNCiNpZiBWQ0xf
Q0FOX1NUQVRJQ19DT05TVF9JTklUX0ZMT0FUDQojZGVmaW5lIFZDTF9TVEFUSUNfQ09OU1RfSU5J
VF9GTE9BVCh4KSA9IHgNCiNlbHNlDQojZGVmaW5lIFZDTF9TVEFUSUNfQ09OU1RfSU5JVF9GTE9B
VCh4KSAvKiBub3QgYWxsb3dlZCAqLw0KI2VuZGlmDQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyB2
YXJpb3VzIHRlbXBsYXRlIGlzc3Vlcy4NCg0KLy86IFZDTF9IQVNfTUVNQkVSX1RFTVBMQVRFUw0K
Ly8gDQovLyBUcnVlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0ZW1wbGF0ZSBtZW1iZXJzIG9m
IHRlbXBsYXRlIGNsYXNzZXMuICBlLmcuDQovLyBcdmVyYmF0aW0NCi8vICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVT4gY2xhc3MgQSB7DQovLyAgICAgCSB0ZW1wbGF0ZSA8Y2xhc3MgVj4gdm9pZCBmKFYp
Ow0KLy8gICAgIH0NCi8vIFxlbmR2ZXJiYXRpbQ0KI2RlZmluZSBWQ0xfSEFTX01FTUJFUl9URU1Q
TEFURVMgMQ0KDQoNCi8vOiBWQ0xfQ0FOX0RPX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04NCi8vIA0K
Ly8gVHJ1ZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgcGFydGlhbCBzcGVjaWFsaXphdGlvbnMg
b2YgdGVtcGxhdGVzLiBlLmcuDQovLyBcdmVyYmF0aW0NCi8vIHRlbXBsYXRlIDxjbGFzcyBUPg0K
Ly8gY2xhc3MgdmVjdG9yPFQqPiA6IHB1YmxpYyB2ZWN0b3I8dm9pZCAqPiB7IC4uIGlubGluZSBt
ZXRob2RzIC4uIH07DQovLyBcZW5kdmVyYmF0aW0NCi8vDQojZGVmaW5lIFZDTF9DQU5fRE9fUEFS
VElBTF9TUEVDSUFMSVpBVElPTiAxDQoNCg0KLy86IFZDTF9ERUZJTkVfU1BFQ0lBTElaQVRJT04N
Ci8vIA0KLy8gSW4gb3JkZXIgdG8gKmRlZmluZSogYSB0ZW1wbGF0ZSAoZnVuY3Rpb24gb3IgY2xh
c3MpIHNwZWNpYWxpemF0aW9uLCB0aGUNCi8vIGRlZmluaXRpb24gbXVzdCBiZSBwcmVjZWRlZCBi
eSAidGVtcGxhdGUgPD4iIG9uIElTTy1jb25mb3JtaW5nIGNvbXBpbGVycy4NCi8vIFNvbWUgY29t
cGlsZXJzIChlZyBnY2MgMi43LjIpIG1ha2Ugbm8gZGlzdGluY3Rpb24gYmV0d2VlbiBhbiBpbnN0
YW5jZQ0KLy8gb2YgYSB0ZW1wbGF0ZWQgZnVuY3Rpb24gYW5kIGEgZnVuY3Rpb24gd2l0aCB0aGUg
c2FtZSBuYW1lIGFuZCBzaWduYXR1cmUsDQovLyBhbmQgc28gZG8gbm90IHN1cHBvcnQgdGhlIHVz
ZSBvZiAidGVtcGxhdGUgPD4iLiBVc2UgVkNMX0RFRklORV9TUEVDSUFMSVpBVElPTg0KLy8gaW5z
dGVhZC4NCi8vDQovLyBOb3RlIHRoYXQgeW91IERPIE5PVCBuZWVkIHRvIGZvcndhcmQgZGVjbGFy
ZSBhIHNwZWNpYWxpemF0aW9uLiBFLmcuIGlmIA0KLy8gZm9vLmggc2F5cyAidGVtcGxhdGUgPGNs
YXNzIFQ+IHZvaWQgZm9vKFQgKik7IiBhbmQgZm9vLmN4eCBzcGVjaWFsaXplcw0KLy8gdm9pZCBm
b288aW50PihpbnQgKiksIHRoZSBjbGllbnQgZG9lc24ndCBuZWVkIHRvIGtub3cgdGhhdCB0aGUg
dGVtcGxhdGUNCi8vIHN5bWJvbCBoZSBsaW5rcyBhZ2FpbnN0IGlzIGEgc3BlY2lhbGl6YXRpb24u
DQoNCi8vI2RlZmluZSBWQ0xfREVGSU5FX1NQRUNJQUxJWkFUSU9OIC8qIHRlbXBsYXRlIDw+ICov
DQovLyNkZWZpbmUgVkNMX0RFRklORV9TUEVDSUFMSVpBVElPTiB0ZW1wbGF0ZSA8Pg0KI2RlZmlu
ZSBWQ0xfREVGSU5FX1NQRUNJQUxJWkFUSU9OIHRlbXBsYXRlIDw+DQoNCg0KLy86IFZDTF9OVUxM
X1RNUExfQVJHUw0KLy8NCi8vIERlZmluZSB0byA8PiBmb3IgY29tcGlsZXJzIHRoYXQgcmVxdWly
ZSB0aGVtIGluIGZyaWVuZCB0ZW1wbGF0ZSBmdW5jdGlvbg0KLy8gZGVjbGFyYXRpb25zIChpLmUu
LCBFR0NTKS4NCg0KLy8jZGVmaW5lIFZDTF9OVUxMX1RNUExfQVJHUyAvKiA8PiAqLw0KLy8jZGVm
aW5lIFZDTF9OVUxMX1RNUExfQVJHUyA8Pg0KI2RlZmluZSBWQ0xfTlVMTF9UTVBMX0FSR1MgPD4N
Cg0KDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHRlbXBsYXRlIGluc3RhbnRpYXRpb24NCg0KLy86IFZD
TF9BTExPV1NfSU5MSU5FX0lOU1RBTlRJQVRJT04NCi8vIA0KLy8gVHJ1ZSBpZiB0aGUgY29tcGls
ZXIgYWxsb3dzIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgaW5saW5lIA0KLy8gZnVuY3Rpb24g
dGVtcGxhdGVzLiBUaGUgbmF0aXZlIFNHSSBDQyA3LjIuMSBkb2VzIG5vdC4NCiNkZWZpbmUgVkNM
X0FMTE9XU19JTkxJTkVfSU5TVEFOVElBVElPTiAxDQoNCg0KLy86IFZDTF9ORUVEU19JTkxJTkVf
SU5TVEFOVElBVElPTg0KLy8gDQovLyBUcnVlIGlmIHRoZSBjb21waWxlciBuZWVkcyBleHBsaWNp
dCBpbnN0YW50aWF0aW9uIG9mIGlubGluZSANCi8vIGZ1bmN0aW9uIHRlbXBsYXRlcy4gZ2NjIDIu
Ny4yICh3aXRoIC1mbm8taW1wbGljaXQtdGVtcGxhdGVzKSBkb2VzLg0KI2RlZmluZSBWQ0xfTkVF
RFNfSU5MSU5FX0lOU1RBTlRJQVRJT04gMQ0KDQoNCi8vOiBWQ0xfRE9fTk9UX0lOU1RBTlRJQVRF
KHRleHQsIHJldCkNCi8vDQovLyBJZiBhIG1ldGhvZCBpcyBkZWZpbmVkIG9uIHNvbWUgdGVtcGxh
dGUsIGJ1dCBtYWtlcyBubyBzZW5zZSBmb3Igc29tZQ0KLy8gaW5zdGFuY2VzIG9mIHRoYXQgdGVt
cGxhdGUsIHRoZSBjb21waWxlciBzaG91bGQgbm90IGNvbXBsYWluIHVubGVzcyB0aGUNCi8vIG1l
dGhvZCBpcyBhY3R1YWxseSB1c2VkLiAgRm9yIGV4YW1wbGUNCi8vIFx2ZXJiYXRpbQ0KLy8gICAg
IHRlbXBsYXRlIDxjbGFzcyBUPg0KLy8gICAgIGNsYXNzIFQgew0KLy8gICAgCSBpbnQgYmFkX21l
dGhvZCgpIHsNCi8vICAgIAkgICByZXR1cm4gVDo6ZigpOyAgLy8gUmVxdWlyZXMgVCB0byBoYXZl
IHN0YXRpYyBtZXRob2QgZg0KLy8gICAgCSB9DQovLyAgICAgfTsNCi8vIFxlbmR2ZXJiYXRpbQ0K
Ly8NCi8vIFRoZSBsYW5ndWFnZSBhbGxvd3MgeW91IHRvIHVzZSBhIFQ8aW50PiBldmVuIHRob3Vn
aCBpbnQ6OmYoKSBpcyBnYXJiYWdlLA0KLy8gKnByb3ZpZGluZyogeW91IG5ldmVyIGNhbGwgVC5i
YWRfbWV0aG9kKCkuDQovLw0KLy8gTW9zdCBjb21waWxlcnMgZG9uJ3QgaW1wbGVtZW50IHRoYXQg
eWV0LCBzbyB0aGUgc29sdXRpb24gaXMgdG8gcHJvdmlkZSBhDQovLyBkdW1teSBzcGVjaWFsaXph
dGlvbiBvZiBUOjpiYWRfbWV0aG9kIHRoYXQgcmV0dXJucyBzb21ldGhpbmcgbXVuZGFuZSBhbmQN
Ci8vIHN0b3BzIHRoZSBzdGFuZGFyZCBiYWRfbWV0aG9kIGZyb20gYmVpbmcgZ2VuZXJhdGVkLiAg
Rm9yIHRoaXMsIHVzZToNCi8vIFx2ZXJiYXRpbQ0KLy8gICAgIFZDTF9ET19OT1RfSU5TVEFOVElB
VEUoaW50IFQ6OmJhZF9tZXRob2QoKSwgc29tZV9yZXR1cm5fdmFsdWUpDQovLyBcZW5kdmVyYmF0
aW0NCi8vIGlmIHRoZSBmdW5jdGlvbiBpcyB2b2lkLCB1c2UgVkNMX1ZPSURfUkVUVVJOIGFzIHRo
ZSByZXR1cm4gdmFsdWUNCg0KLy8jZGVmaW5lIFZDTF9ET19OT1RfSU5TVEFOVElBVEUodGV4dCwg
cmV0KSB0ZXh0IHsgcmV0dXJuIHJldDsgfQ0KLy8jZGVmaW5lIFZDTF9ET19OT1RfSU5TVEFOVElB
VEUodGV4dCwgcmV0KSB0ZW1wbGF0ZSA8PiB0ZXh0IHsgcmV0dXJuIHJldDsgfQ0KLy8jZGVmaW5l
IFZDTF9ET19OT1RfSU5TVEFOVElBVEUodGV4dCwgcmV0KSAvKiBubyBuZWVkIC0tIG1hZ2ljIGNv
bXBpbGVyICovDQovL0ZJWE1FICNkZWZpbmUgVkNMX0RPX05PVF9JTlNUQU5USUFURSh0ZXh0LCBy
ZXQpIEBWQ0xfRE9fTk9UX0lOU1RBTlRJQVRFQA0KI2RlZmluZSBWQ0xfRE9fTk9UX0lOU1RBTlRJ
QVRFKHRleHQsIHJldCkgXA0KVkNMX0RFRklORV9TUEVDSUFMSVpBVElPTiBcDQp0ZXh0IHsgcmV0
dXJuIHJldDsgfQ0KDQoNCi8vOiBWQ0xfVU5JTlNUQU5USUFURV9TUEVDSUFMSVpBVElPTihzeW1i
b2wpDQovLyANCi8vIE9LLCB2YXJpb3VzIGNvbXBpbGVycyBkbyB2YXJpb3VzIHNpbGx5IHRoaW5n
cyBhYm91dCBpbnN0YW50aWF0aW9uIG9mDQovLyBmdW5jdGlvbnMvbWV0aG9kcyB0aGF0IGhhdmUg
YmVlbiBzcGVjaWFsaXplZC4gIFVzZSB0aGlzIG1hY3JvIHRvIHRlbGwNCi8vIHRoZSBjb21waWxl
ciBub3QgdG8gZ2VuZXJhdGUgY29kZSBmb3IgbWV0aG9kcyB3aGljaCBoYXZlIGJlZW4gc3BlY2lh
bGl6ZWQNCi8vIFx2ZXJiYXRpbQ0KLy8gICAgICBWQ0xfVU5JTlNUQU5USUFURV9TUEVDSUFMSVpB
VElPTihpbnQgVDo6c3BlY2lhbGl6ZWRfbWV0aG9kKCkpDQovLyBcZW5kdmVyYmF0aW0NCi8vIEl0
IHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgdGhlICJ0ZW1wbGF0ZSBjbGFzcyBBPFQ+OyINCg0KLy8j
ZGVmaW5lIFZDTF9VTklOU1RBTlRJQVRFX1NQRUNJQUxJWkFUSU9OKHN5bWJvbCkgIEBwcmFnbWEg
ZG9fbm90X2luc3RhbnRpYXRlIHRleHRADQovLyNkZWZpbmUgVkNMX1VOSU5TVEFOVElBVEVfU1BF
Q0lBTElaQVRJT04oc3ltYm9sKSAvKiBubyBuZWVkIC0gc2Vuc2libGUgY29tcGlsZXIgKi8NCi8v
RklYTUUgI2RlZmluZSBWQ0xfVU5JTlNUQU5USUFURV9TUEVDSUFMSVpBVElPTihzeW1ib2wpIEBW
Q0xfVU5JTlNUQU5USUFURV9TUEVDSUFMSVpBVElPTkANCiNkZWZpbmUgVkNMX1VOSU5TVEFOVElB
VEVfU1BFQ0lBTElaQVRJT04oc3ltYm9sKSAvKiB3aGljaCBjb21waWxlciBuZWVkcyB0aGlzID8g
Ki8NCg0KDQovLzogVkNMX1VOSU5TVEFOVElBVEVfVU5TRUVOX1NQRUNJQUxJWkFUSU9OKHN5bWJv
bCkNCi8vIA0KLy8gZ2NjIGlzIHNlbnNpYmxlIGFib3V0IHNwZWNpYWxpemF0aW9ucyBpZiBpdCBo
YXMgc2VlbiB0aGUgZGVmaW5pdGlvbiwNCi8vIGJ1dCBpZiBpdCdzIGluIGFub3RoZXIgZmlsZSwg
bmVlZCB0byB1c2UgZXh0ZXJuIHRvIHRlbGwgaXQuDQovLyBcdmVyYmF0aW0NCi8vICAgICAgVkNM
X1VOSU5TVEFOVElBVEVfVU5TRUVOX1NQRUNJQUxJWkFUSU9OKGludCBUOjpzcGVjaWFsaXplZF9t
ZXRob2QoKSkNCi8vIFxlbmR2ZXJiYXRpbQ0KLy8gSXQgc2hvdWxkIGJlIHBsYWNlZCBiZWZvcmUg
dGhlICJ0ZW1wbGF0ZSBjbGFzcyBBPFQ+OyINCg0KLy8jZGVmaW5lIFZDTF9VTklOU1RBTlRJQVRF
X1VOU0VFTl9TUEVDSUFMSVpBVElPTihzeW1ib2wpIGV4dGVybiBzeW1ib2w7DQovLyNkZWZpbmUg
VkNMX1VOSU5TVEFOVElBVEVfVU5TRUVOX1NQRUNJQUxJWkFUSU9OKHN5bWJvbCkgLyogbm8gbmVl
ZCAqLw0KLy9GSVhNRSAjZGVmaW5lIFZDTF9VTklOU1RBTlRJQVRFX1VOU0VFTl9TUEVDSUFMSVpB
VElPTihzeW1ib2wpIEBWQ0xfVU5JTlNUQU5USUFURV9VTlNFRU5fU1BFQ0lBTElaQVRJT05ADQoj
ZGVmaW5lIFZDTF9VTklOU1RBTlRJQVRFX1VOU0VFTl9TUEVDSUFMSVpBVElPTihzeW1ib2wpIC8q
IG5ldmVyIHVzZWQgKi8NCg0KDQovLzogVkNMX0lOU1RBTlRJQVRFX1NUQVRJQ19URU1QTEFURV9N
RU1CRVIoc3ltYm9sKQ0KLy8NCi8vIFNvbWUgY29tcGlsZXJzIChlLmcuIGdjYyAyLjcuMikgZG8g
bm90IGFjY2VwdCBhIHRlbXBsYXRlZCBkZWZpbml0aW9uIA0KLy8gb2Ygc3RhdGljIG1lbWJlcnMs
IGFzIGluDQovLyBcdmVyYmF0aW0NCi8vICAgdGVtcGxhdGUgPGNsYXNzIFQ+DQovLyAgIHN0cnVj
dCBBIHsNCi8vICAgICBBKCkgeyB9DQovLyAgICAgc3RhdGljIGNoYXIgKmZtdDsNCi8vICAgfTsN
Ci8vDQovLyAgIHRlbXBsYXRlIDxjbGFzcyBUPg0KLy8gICBjaGFyICpBPFQ+OjpmbXQgPSAwOw0K
Ly8NCi8vICAgdGVtcGxhdGUgc3RydWN0IEE8aW50PjsNCi8vIFxlbmR2ZXJiYXRpbQ0KLy8gVGhl
IHdheSByb3VuZCB0aGlzIGlzIHRvIHN1cHBseSBhbiBleHBsaWNpdCBkZWZpbml0aW9uIGZvciBl
dmVyeSANCi8vIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBuZWVkZWQuDQovLw0KLy8gUHV0IHRoZSB0
ZW1wbGF0ZWQgZGVmaW5pdGlvbiBsaWtlIHRoaXMNCi8vIFx2ZXJiYXRpbQ0KLy8gICAgICAjaWYg
VkNMX0NBTl9ET19TVEFUSUNfVEVNUExBVEVfTUVNQkVSDQovLyAgICAgIHRlbXBsYXRlIDxjbGFz
cyBUPg0KLy8gICAgICBjaGFyICpBPFQ+OjpmbXQgPSAwOw0KLy8gICAgICAjZW5kaWYNCi8vIFxl
bmR2ZXJiYXRpbQ0KLy8gYW5kIHBsYWNlDQovLyBcdmVyYmF0aW0NCi8vICAgICAgVkNMX0lOU1RB
TlRJQVRFX1NUQVRJQ19URU1QTEFURV9NRU1CRVIoaW50IEE8aW50Pjo6Zm10ID0gMCkNCi8vIFxl
bmR2ZXJiYXRpbQ0KLy8gYmVmb3JlIHRoZQ0KLy8gXHZlcmJhdGltDQovLyAgICAgIHRlbXBsYXRl
IGNsYXNzIEE8aW50PjsNCi8vIFxlbmR2ZXJiYXRpbQ0KLy8gd2l0aA0KLy8gXHZlcmJhdGltDQov
LyAgICAgIFZDTF9VTklOU1RBTlRJQVRFX1NUQVRJQ19URU1QTEFURV9NRU1CRVIoQTxpbnQ+Ojp2
YXIpDQovLyBcZW5kdmVyYmF0aW0NCi8vIGFmdGVyd2FyZHMuDQoNCi8vI2RlZmluZSBWQ0xfSU5T
VEFOVElBVEVfU1RBVElDX1RFTVBMQVRFX01FTUJFUihzeW1ib2wpIC8qIG5vIG5lZWQgKi8NCi8v
I2RlZmluZSBWQ0xfSU5TVEFOVElBVEVfU1RBVElDX1RFTVBMQVRFX01FTUJFUihzeW1ib2wpIHN5
bWJvbDsNCi8vDQojZGVmaW5lIFZDTF9DQU5fRE9fU1RBVElDX1RFTVBMQVRFX01FTUJFUiAxDQoj
aWYgVkNMX0NBTl9ET19TVEFUSUNfVEVNUExBVEVfTUVNQkVSDQojIGRlZmluZSBWQ0xfSU5TVEFO
VElBVEVfU1RBVElDX1RFTVBMQVRFX01FTUJFUihzeW1ib2wpICAgLyogKi8NCiMgZGVmaW5lIFZD
TF9VTklOU1RBTlRJQVRFX1NUQVRJQ19URU1QTEFURV9NRU1CRVIoc3ltYm9sKSAvKiAqLw0KI2Vs
c2UNCiMgZGVmaW5lIFZDTF9JTlNUQU5USUFURV9TVEFUSUNfVEVNUExBVEVfTUVNQkVSKHN5bWJv
bCkgc3ltYm9sOw0KIyBkZWZpbmUgVkNMX1VOSU5TVEFOVElBVEVfU1RBVElDX1RFTVBMQVRFX01F
TUJFUihzeW1ib2wpIC8qIHdoaWNoIGNvbXBpbGVyIG5lZWRzIHRoaXMgPyAqLw0KI2VuZGlmDQoN
Cg0KLy86IFZDTF9DQU5fRE9fTk9OX1RZUEVfRlVOQ1RJT05fVEVNUExBVEVfUEFSQU1FVEVSDQov
Lw0KLy8gU29tZSBjb21waWxlcnMgKGUuZy4gU3VuUHJvIDUuMCkgZG8gbm90IGFjY2VwdCBub24t
dHlwZSB0ZW1wbGF0ZQ0KLy8gcGFyYW1ldGVycyBpbiBmdW5jdGlvbiB0ZW1wbGF0ZXMuIEUuZy4g
DQovLyBcdmVyYmF0aW0NCi8vIHRlbXBsYXRlIDxjbGFzcyBULCBpbnQgbj4gc3RydWN0IHZpY2t5
IHsgVCBkYXRhW25dOyB9IC8vIGNhbiBkbw0KLy8NCi8vIHRlbXBsYXRlIDxjbGFzcyBULCBpbnQg
bj4NCi8vIHZvaWQgYV9mdW5jdGlvbl90ZW1wbGF0ZSh2aWNreTxULCBuPiBjb25zdCAmKSB7IC4u
LiB9IC8vIGNhbm5vdA0KLy8gXGVuZHZlcmJhdGltDQojZGVmaW5lIFZDTF9DQU5fRE9fTk9OX1RZ
UEVfRlVOQ1RJT05fVEVNUExBVEVfUEFSQU1FVEVSIDENCg0KDQovLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8v
IG92ZXJsb2FkIHJlc29sdXRpb24gcHJvYmxlbXMuDQoNCi8vOiBWQ0xfTkVFRF9GUklFTkRfRk9S
X1RFTVBMQVRFX09WRVJMT0FEDQovLw0KLy8gT24gc29tZSBjb21waWxlcnMgKGluIHBhcnRpY3Vs
YXIgZ2NjIDIuNy4yLjMpLCB0aGUgY29tcGlsZXIgZG9lc24ndA0KLy8ga25vdyBob3cgdG8gY2Fz
dCBhIHRlbXBsYXRlZCBkZXJpdmVkIGNsYXNzIHRvIGEgdGVtcGxhdGVkIGJhc2UgY2xhc3MNCi8v
IChlZy4gdm5sX21hdHJpeF9maXhlZDwzLDMsZG91YmxlPiAtPiB2bmxfbWF0cml4PGRvdWJsZT4p
IHdoZW4gZG9pbmcgb3ZlcmxvYWQgDQovLyByZXNvbHV0aW9uLiBNYWtpbmcgdGhlIG92ZXJsb2Fk
ZWQgZnVuY3Rpb24gYSBmcmllbmQgb2YgdGhlIGNsYXNzIG1ha2VzDQovLyB0aGUgcHJvYmxlbSBn
byBhd2F5Lg0KLy8NCi8vIFRydWUgaWYgdGhlIGNvbXBpbGVyIG5lZWRzIHRoaXMgaGFjay4NCg0K
Ly8jZGVmaW5lIFZDTF9ORUVEX0ZSSUVORF9GT1JfVEVNUExBVEVfT1ZFUkxPQUQgMA0KLy8jZGVm
aW5lIFZDTF9ORUVEX0ZSSUVORF9GT1JfVEVNUExBVEVfT1ZFUkxPQUQgMQ0KI2RlZmluZSBWQ0xf
TkVFRF9GUklFTkRfRk9SX1RFTVBMQVRFX09WRVJMT0FEIDANCg0KDQovLzogVkNMX09WRVJMT0FE
X0NBU1QNCi8vDQovLyBTb21lIGNvbXBpbGVycyAoZ2NjIDIuNy4yLjMgYW5kIFNHSSBuYXRpdmUg
Ni4wKSBvZnRlbiB3b24ndCBwZXJmb3JtDQovLyBjZXJ0YWluIGltcGxpY2l0IGNhc3RzLiBFLmcu
IGNhc3RpbmcgYSB0ZW1wbGF0ZWQgZGVyaXZlZCBjbGFzcyB0byBhDQovLyB0ZW1wbGF0ZWQgYmFz
ZSBjbGFzcyAoc2VlIGFib3ZlKSwgb3IgZXZlbiByZWFsaXppbmcgdGhhdA0KLy8gInRlbXBsYXRl
IHZvaWQgZm9vKGZsb2F0IGNvbnN0ICogY29uc3QgKiwgZmxvYXQgKiBjb25zdCAqLCBpbnQsIGlu
dCkiDQovLyBjYW4gYmUgY2FsbGVkIHdpdGggcGFyYW1ldGVycyBvZiB0eXBlICIoZmxvYXQgKios
IGZsb2F0ICoqLCBpbnQsIGludCkiLg0KLy8NCi8vICAgVG8gZml4IHRoZSBjb2RlLCBpdCBpcyB0
ZW1wdGluZyB0byBhZGQgYW4gZXhwbGljaXQgY2FzdCBhbmQgZ2V0IG9uDQovLyB3aXRoIHRoaW5n
cywgYnV0IHRoYXQgd291bGQgdGhyb3cgYXdheSB0aGUgY2hlY2tpbmcgcGVyZm9ybWVkIGJ5IG1v
cmUNCi8vIGhlbHBmdWwgY29tcGlsZXJzLiBVc2UgVkNMX09WRVJMT0FEX0NBU1QgaW5zdGVhZC4N
Cg0KLy8jZGVmaW5lIFZDTF9PVkVSTE9BRF9DQVNUKFQsIHgpICgoVCkoeCkpDQovLyNkZWZpbmUg
VkNMX09WRVJMT0FEX0NBU1QoVCwgeCkgKHgpDQojZGVmaW5lIFZDTF9PVkVSTE9BRF9DQVNUKFQs
IHgpICh4KQ0KDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gc3R1ZmYNCg0KDQovLzogVkNMX05PX1NU
QVRJQ19EQVRBX01FTUJFUlMNCi8vDQovLyBUcnVlIGlmIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBv
cnQgc3RhdGljIGRhdGEgbWVtYmVycyBpbiB0ZW1wbGF0ZSBjbGFzc2VzLg0KLy8NCiNkZWZpbmUg
VkNMX05PX1NUQVRJQ19EQVRBX01FTUJFUlMgMA0KDQoNCi8vOiBWQ0xfSEFTX1RFTVBMQVRFX1NZ
TUJPTFMNCi8vDQovLyBUcnVlIGlmIHRoZSBjb21waWxlciBtYW5nbGVzIGZ1bmN0aW9uIHRlbXBs
YXRlIGluc3RhbmNlcyBkaWZmZXJlbnRseSANCi8vIGZyb20gbm9uLXRlbXBsYXRlZCBmdW5jdGlv
bnMgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBzaWduYXR1cmUuDQovLyBUaGlzIGlzIGNvcnJlY3Qg
YmVoYXZpb3VyLg0KLy8NCiNkZWZpbmUgVkNMX0hBU19URU1QTEFURV9TWU1CT0xTIDENCg0KDQov
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0NCi8vIGRlZmF1bHQgdGVtcGxhdGUgYXJndW1lbnRzDQoNCi8vOiBWQ0xf
REVGQVVMVF9UTVBMX0FSRyhhcmcpDQovLw0KLy8gSXQgaXMgd3JvbmcgdG8gcHJvdmlkZSBhIGRl
ZmF1bHQgZm9yIGEgdGVtcGxhdGUgcGFyYW1ldGVyIGluIHR3bw0KLy8gZGVjbGFyYXRpb25zIGlu
IHRoZSBzYW1lIHNjb3BlICgxNC4xLjEyKSwgZS5nLiANCi8vIFx2ZXJiYXRpbQ0KLy8gICB0ZW1w
bGF0ZSA8Y2xhc3MgUywgY2xhc3MgVCA9IGludD4gY2xhc3MgWDsNCi8vICAgdGVtcGxhdGUgPGNs
YXNzIFMsIGNsYXNzIFQgPSBpbnQ+IGNsYXNzIFggeyAvKiAuLi4gKi8gfTsNCi8vIFxlbmR2ZXJi
YXRpbQ0KLy8gaXMgd3JvbmcuDQovLyBIb3dldmVyLCBzb21lIG9sZGVyIGNvbXBpbGVycyBpbnNp
c3Qgb24gc2VlaW5nIHRoZSBkZWZhdWx0IGFyZ3VtZW50DQovLyBhZ2FpbiB3aGVuIGRlZmluaW5n
IGEgY2xhc3MgYm9keSBvciBpbnN0YW50aWF0aW5nLg0KLy8gVG8gc2F0aXNmeSB0aGVtLCB1c2Ug
dGhpcyBtYWNybyBhcyBmb2xsb3dzIDoNCi8vIFx2ZXJiYXRpbQ0KLy8gICB0ZW1wbGF0ZSA8Y2xh
c3MgUywgY2xhc3MgVCBWQ0xfREVGQVVMVF9UTVBMX0FSRyg9IGludCk+IFggeyAvKiAuLi4gKi8g
fTsNCi8vICAgdGVtcGxhdGUgWDxkb3VibGUgVkNMX0RFRkFVTFRfVE1QTF9BUkcoLCBpbnQpPjsN
Ci8vIFxlbmR2ZXJiYXRpbQ0KLy8NCi8vIEl0J3MgcG9zc2libGUgd2UgbmVlZCB0d28gbWFjcm9z
LCBvbmUgZm9yIHJlZGVjbGFyYXRpb24gYW5kIA0KLy8gb25lIGZvciBpbnN0YW50aWF0aW9uLg0K
DQovLyNkZWZpbmUgVkNMX0RFRkFVTFRfVE1QTF9BUkcoYXJnKSAvKiBubyBuZWVkICovDQovLyNk
ZWZpbmUgVkNMX0RFRkFVTFRfVE1QTF9BUkcoYXJnKSBhcmcNCiNkZWZpbmUgVkNMX0RFRkFVTFRf
VE1QTF9BUkcoYXJnKSANCg0KLy8gDQojZGVmaW5lIFZDTF9DQU5fRE9fQ09NUExFVEVfREVGQVVM
VF9UWVBFX1BBUkFNRVRFUiAxDQojZGVmaW5lIFZDTF9DQU5fRE9fVEVNUExBVEVfREVGQVVMVF9U
WVBFX1BBUkFNRVRFUiAxDQoNCi8vIFZDTF9ERkxfVFlQRV9QQVJBTV9TVExERUNMKEEsIGEpIGFu
ZCBWQ0xfREZMX1RNUExfUEFSQU1fU1RMREVDTChBLCBhKQ0KLy8gRUdDUyBkb2Vzbid0IGxpa2Ug
ZGVmaW5pdGlvbiBvZiBkZWZhdWx0IHR5cGVzLCB2aXo6DQovLyAgIHRlbXBsYXRlIDxjbGFzcyBB
ID0gZGVmYXVsdD4gY2xhc3MgdmVjdG9yOw0KLy8gICB0ZW1wbGF0ZSA8Y2xhc3MgQSA9IGRlZmF1
bHQ+IGNsYXNzIHZlY3RvciB7IC4uLiB9Ow0KLy8gVGhpcyBtYWNybyBpcyB1c2VkIHRvIHNheSAi
ZGVmaW5lIGlmIG5vdCBwcmV2aW91c2x5IGRlZmluZWQsIGxpa2UNCi8vICAgdGVtcGxhdGUgPFZD
TF9ERkxfVFlQRV9QQVJBTV9TVExERUNMKEEsYSk+IGNsYXNzIHZlY3RvciB7IC4uLiB9Ow0KDQov
LyNkZWZpbmUgVkNMX0RGTF9UWVBFX1BBUkFNX1NUTERFQ0woQSxhKSBBID0gYQ0KLy8jZGVmaW5l
IFZDTF9ERkxfVFlQRV9QQVJBTV9TVExERUNMKEEsYSkgQSAvKiA9IGEgKi8NCi8vI2RlZmluZSBW
Q0xfREZMX1RZUEVfUEFSQU1fU1RMREVDTChBLGEpIF9fREZMX1RZUEVfUEFSQU0oQSxhKQ0KLy9G
SVhNRSAjZGVmaW5lIFZDTF9ERkxfVFlQRV9QQVJBTV9TVExERUNMKEEsYSkgQFZDTF9ERkxfVFlQ
RV9QQVJBTV9TVExERUNMQA0KLy8NCi8vI2RlZmluZSBWQ0xfREZMX1RNUExfUEFSQU1fU1RMREVD
TChBLGEpIEEgPSBhDQovLyNkZWZpbmUgVkNMX0RGTF9UTVBMX1BBUkFNX1NUTERFQ0woQSxhKSBB
IC8qID0gYSAqLw0KLy8jZGVmaW5lIFZDTF9ERkxfVE1QTF9QQVJBTV9TVExERUNMKEEsYSkgX19T
VExfREZMX1RNUExfUEFSQU0oQSxhKQ0KLy9GSVhNRSAjZGVmaW5lIFZDTF9ERkxfVE1QTF9QQVJB
TV9TVExERUNMKEEsYSkgQFZDTF9ERkxfVE1QTF9QQVJBTV9TVExERUNMQA0KDQoNCi8vIFZDTF9E
RkxfVE1QTF9BUkcoY2xhc3MpDQovLyBTaW1pbGFybHksIHdoZW4gaW5zdGFudGlhdGluZyBhIHRl
bXBsYXRlZCBjbGFzcyB3aXRoIGEgZGVmYXVsdCANCi8vIHRlbXBsYXRlIGFyZ3VtZW50LCBzb21l
IGNvbXBpbGVycyBkb24ndCBsaWtlIHRoZSByZWRlY2xhcmF0aW9uIG9mIA0KLy8gdGhhdCBhcmd1
bWVudCwgd2hpbGUgb3RoZXJzIGluc2lzdCBvbiBpdC4NCi8vIEluIHN1Y2ggY2FzZXMsIHNwZWNp
ZnkgdGhlIGRlZmF1bHQgYXJndW1lbnQgYXMgZm9sbG93czoNCi8vICAgdGVtcGxhdGUgY2xhc3Mg
dmVjdG9yIDxpbnQgVkNMX0RGTF9UTVBMX0FSRyhkZWZhdWx0X2l0ZXJhdG9yKSA+Ow0KLy8gKE5v
dGUgdGhlIG1pc3NpbmcgY29tbWEgYWZ0ZXIgaW50OiBpdCBpcyBpbnNpZGUgdGhlIG1hY3JvLikN
Cg0KLy8jZGVmaW5lIFZDTF9ERkxfVE1QTF9BUkcoY2xhc3NuYW1lKSAsIGNsYXNzbmFtZQ0KLy8j
ZGVmaW5lIFZDTF9ERkxfVE1QTF9BUkcoY2xhc3NuYW1lKSAvKiAsIGNsYXNzbmFtZSAqLw0KLy8j
ZGVmaW5lIFZDTF9ERkxfVE1QTF9BUkcoY2xhc3NuYW1lKSBfX0RGTF9UTVBMX0FSRyhjbGFzc25h
bWUpDQovL0ZJWE1FICNkZWZpbmUgVkNMX0RGTF9UTVBMX0FSRyhjbGFzc25hbWUpIEBWQ0xfREZM
X1RNUExfQVJHQA0KDQoNCi8vOiBWQ0xfU1VOUFJPX0NMQVNTX1NDT1BFX0hBQ0soQSkNCi8vDQov
LyBOaWNlIG9uZS4gIENhbid0IHVzZSBzdGQ6OnZlY3RvcjxUPiBpbiBhIGNsYXNzIG9uIFN1blBy
byA1LCBtdXN0IHVzZQ0KLy8gc3RkOjp2ZWN0b3I8VCwgc3RkOjphbGxvY2F0b3I8VD4gPi4gIE9m
IGNvdXJzZSwgd2UgY2Fubm90IGV4cGVjdCB0aGF0IG90aGVyDQovLyBjb21waWxlcnMgY2FsbCB0
aGUgZGVmYXVsdCBhbGxvY2F0b3Igc3RkOjphbGxvY2F0b3I8VD4sIHNvIHdlIG11c3QgdXNlDQov
LyBhIG1hY3JvLiAgSSBjb3VsZCBjYWxsIGl0IHNvbWV0aGluZyBnZW5lcmljLCBsaWtlIA0KLy8g
VkNMX0NMQVNTX1NDT1BFX0hBQ0ssIGJ1dCB0byBiZSBob25lc3QsIGl0J3MgYSBzdW5wcm8gcHJv
YmxlbSwgDQovLyB0aGV5IGRlc2VydmUgdGhlIGJsYW1lLg0KLy8gVXNhZ2UgKHRoZSBjb21tYSBp
cyBpbnNpZGUgdGhlIG1hY3JvKSA6DQovLyBcdmVyYmF0aW0NCi8vICAgIHZlY3RvcjxUIFZDTF9T
VU5QUk9fQ0xBU1NfU0NPUEVfSEFDSyhzdGQ6OmFsbG9jYXRvcjxUID4pPg0KLy8gXGVuZHZlcmJh
dGltDQoNCi8vI2RlZmluZSBWQ0xfU1VOUFJPX0NMQVNTX1NDT1BFX0hBQ0soQSkgLyogLCBBICov
DQovLyNkZWZpbmUgVkNMX1NVTlBST19DTEFTU19TQ09QRV9IQUNLKEEpICwgQQ0KI2RlZmluZSBW
Q0xfU1VOUFJPX0NMQVNTX1NDT1BFX0hBQ0soQSkgLyogLCBBICovDQoNCg0KLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQovLyBleGNlcHRpb24gYW5kIG5hbWVzcGFjZSBpc3N1ZXMNCg0KDQovLzogVkNMX0hBU19F
WENFUFRJT05TDQovLyBTZXQgdG8gdHJ1ZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIHVz
ZSBvZiBleGNlcHRpb25zLg0KI2RlZmluZSBWQ0xfSEFTX0VYQ0VQVElPTlMgMQ0KDQoNCi8vOiBW
Q0xfSEFTX05BTUVTUEFDRVMNCi8vIFNldCB0byB0cnVlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0
cyB0aGUgdXNlIG9mIG5hbWVzcGFjZXMuDQojZGVmaW5lIFZDTF9IQVNfTkFNRVNQQUNFUyAxDQoN
Cg0KLy86IFZDTF9BTExPV1NfTkFNRVNQQUNFX1NURA0KLy8gU2V0IHRvIHRydWUgaWYgdGhlIGNv
bXBpbGVyIGFsbG93cyBuYW1lc3BhY2Ugc3RkOjogZm9yIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Lg0K
I2RlZmluZSBWQ0xfQUxMT1dTX05BTUVTUEFDRV9TVEQgMQ0KDQoNCi8vOiBWQ0xfTkVFRFNfTkFN
RVNQQUNFX1NURA0KLy8gU2V0IHRvIHRydWUgaWYgdGhlIGNvbXBpbGVyIG5lZWRzIG5hbWVzcGFj
ZSBzdGQ6OiBmb3IgdGhlIHN0YW5kYXJkIGxpYnJhcnkuDQojZGVmaW5lIFZDTF9ORUVEU19OQU1F
U1BBQ0VfU1REIDENCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi8vIGFyY2hpdGVjdHVyZSBtYWNyb3Mg
cmVtb3ZlZCAtLSB0aGV5J3JlIG5vdCBpbiB0aGUgQysrIHN0YW5kYXJkDQoNCiNlbmRpZg0K

------_=_NextPart_001_01C2D1FD.B91DA76F--