Canon 30D dev - Bulb mode not working either in M mode

Sébastien Viel <[email protected]> Sat, 16 Mar 2024 21:23:33 +0000
Newsgroups gmane.comp.multimedia.gphoto.devel
Message-ID <YQXPR01MB6090299EFE3B40A7E8F3441A902F2@YQXPR01MB6090.CANPRD01.PROD.OUTLOOK.COM>
--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: multipart/alternative;
	boundary="_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_"

--_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGksDQoNCknigJltIHJlLWludHJvZHVjaW5nIG15c2VsZiB0byBhc3Ryb3Bob3RvZ3JhcHkgYW5k
IEkgd291bGQgbGlrZSB0byB1c2UgYW5kIG9sZCBDYW5vbiAzMEQgaW4gbXkgc2V0dXAuIEnigJlt
IGhhdmluZyBhbiBpc3N1ZSB3aXRoIHRoZSBidWxiIG1vZGUsIGV2ZW4gaWYgdGhlIG1vZGVsIHdh
c27igJl0IGRlZmluZWQgaW4gdGhlIGNhbm9uLmMgZmlsZSBvZiB0aGUgY29kZSwgZ1Bob3RvMiBj
YW4gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZGUgYnV0IGNhbiBub3QgY2FwdHVyZSBkZSBwaWN0dXJl
Lg0KDQpJIGhhdmUgdGhlIGNhbWVyYSwgSSDigJxjYW7igJ0gcHJvZ3JhbSBhIGJpdCBidXQgSSBy
ZWFsbHkgd2FudCB0byBmaXggdGhpcyBpc3N1ZSBhc2FwLCBtYXliZSBiZWZvcmUgOCBvZiBBcHJp
bCDwn5iJDQoNCkhlcmXigJlzIHRoZSBmaWxlcyB0aGF0IGNvdWxkIG1heWJlIGhlbHAuDQoNClJl
Z2FyZHMsDQoNCg0KDQpTw6liYXN0aWVuIFZpZWwNCkVuc2VpZ25hbnQgZW4gaW5mb3JtYXRpcXVl
DQpUZWNobmlxdWVzIGRlIGwnaW5mb3JtYXRpcXVlIOKAkyDDiWNvbGUgZHUgV2ViDQpzZWJhc3Rp
ZW4udmllbEBjZWdlcHJkbC5jYTxtYWlsdG86c2ViYXN0aWVuLnZpZWxAY2VnZXByZGwuY2E+DQo0
MTggODYyLTY5MDMsIHBvc3RlIDI0MTENCg0K

--_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy
bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt
YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj
cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv
ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl
PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6
IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m
YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy
IDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws
IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBjbTsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQt
ZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOw0KCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVT
O30NCnNwYW4uRW1haWxTdHlsZTE3DQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLWNvbXBvc2U7
DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9
DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LWZh
bWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt9
DQpAcGFnZSBXb3JkU2VjdGlvbjENCgl7c2l6ZTo2MTIuMHB0IDc5Mi4wcHQ7DQoJbWFyZ2luOjcy
LjBwdCA5MC4wcHQgNzIuMHB0IDkwLjBwdDt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3BhZ2U6V29y
ZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFw
ZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZd
LS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+
DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3ht
bD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkZSLUNBIiBsaW5rPSIjMDU2M0Mx
IiB2bGluaz0iIzk1NEY3MiIgc3R5bGU9IndvcmQtd3JhcDpicmVhay13b3JkIj4NCjxkaXYgY2xh
c3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1D
QSI+SGksPGJyPg0KPGJyPg0KSeKAmW0gcmUtaW50cm9kdWNpbmcgbXlzZWxmIHRvIGFzdHJvcGhv
dG9ncmFweSBhbmQgSSB3b3VsZCBsaWtlIHRvIHVzZSBhbmQgb2xkIENhbm9uIDMwRCBpbiBteSBz
ZXR1cC4gSeKAmW0gaGF2aW5nIGFuIGlzc3VlIHdpdGggdGhlIGJ1bGIgbW9kZSwgZXZlbiBpZiB0
aGUgbW9kZWwgd2FzbuKAmXQgZGVmaW5lZCBpbiB0aGUgY2Fub24uYyBmaWxlIG9mIHRoZSBjb2Rl
LCBnUGhvdG8yIGNhbiBkZXRlY3QgdGhlIGN1cnJlbnQgbW9kZSBidXQgY2FuIG5vdCBjYXB0dXJl
DQogZGUgcGljdHVyZS48YnI+DQo8YnI+DQpJIGhhdmUgdGhlIGNhbWVyYSwgSSDigJxjYW7igJ0g
cHJvZ3JhbSBhIGJpdCBidXQgSSByZWFsbHkgd2FudCB0byBmaXggdGhpcyBpc3N1ZSBhc2FwLCBt
YXliZSBiZWZvcmUgOCBvZiBBcHJpbA0KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLUNBIiBzdHlsZT0i
Zm9udC1mYW1pbHk6JnF1b3Q7U2Vnb2UgVUkgRW1vamkmcXVvdDssc2Fucy1zZXJpZiI+JiMxMjg1
MjE7PC9zcGFuPjxzcGFuIGxhbmc9IkVOLUNBIj48YnI+DQo8YnI+DQpIZXJl4oCZcyB0aGUgZmls
ZXMgdGhhdCBjb3VsZCBtYXliZSBoZWxwLjxicj4NCjxicj4NClJlZ2FyZHMsPGJyPg0KPGJyPg0K
PGJyPg0KPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
bGFuZz0iRU4tQ0EiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O
b3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2ZvbnQtZmFtaWx5OiZxdW90
O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzAwMzM2Njttc28tZmFyZWFzdC1sYW5ndWFn
ZTpGUi1DQSI+U8OpYmFzdGllbiBWaWVsPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXpl
OjEwLjVwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMy
MDIwMjA7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RlItQ0EiPjxicj4NCjwvc3Bhbj48c3BhbiBzdHls
ZT0iZm9udC1zaXplOjEwLjVwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNl
cmlmO2NvbG9yOmdyYXk7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RlItQ0EiPkVuc2VpZ25hbnQgZW4g
aW5mb3JtYXRpcXVlJm5ic3A7PGJyPg0KVGVjaG5pcXVlcyBkZSBsJ2luZm9ybWF0aXF1ZSDigJMg
w4ljb2xlIGR1IFdlYjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjVwdDtmb250LWZh
bWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMyMDIwMjA7bXNvLWZhcmVh
c3QtbGFuZ3VhZ2U6RlItQ0EiPjxicj4NCjxhIGhyZWY9Im1haWx0bzpzZWJhc3RpZW4udmllbEBj
ZWdlcHJkbC5jYSI+PHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPnNlYmFzdGllbi52aWVsQGNlZ2Vw
cmRsLmNhPC9zcGFuPjwvYT48YnI+DQo0MTggODYyLTY5MDMsIHBvc3RlIDI0MTE8L3NwYW4+PHNw
YW4gc3R5bGU9ImZvbnQtc2l6ZToxMC41cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwmcXVvdDss
c2Fucy1zZXJpZjtjb2xvcjpncmF5O21zby1mYXJlYXN0LWxhbmd1YWdlOkZSLUNBIj48bzpwPjwv
bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwv
cD4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--_000_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_--

--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/plain; name="canon-eos30d_Shutter_M.txt"
Content-Description: canon-eos30d_Shutter_M.txt
Content-Disposition: attachment; filename="canon-eos30d_Shutter_M.txt";
	size=9144; creation-date="Sat, 16 Mar 2024 21:22:30 GMT";
	modification-date="Sat, 16 Mar 2024 21:22:31 GMT"
Content-Transfer-Encoding: base64

L21haW4vYWN0aW9ucy9zeW5jZGF0ZXRpbWUKTGFiZWw6IFN5bmNocm9uaXplIGNhbWVyYSBkYXRl
IGFuZCB0aW1lIHdpdGggUEMKUmVhZG9ubHk6IDAKVHlwZTogVE9HR0xFCkN1cnJlbnQ6IDAKRU5E
Ci9tYWluL2FjdGlvbnMvdWlsb2NrCkxhYmVsOiBVSSBMb2NrClJlYWRvbmx5OiAwClR5cGU6IFRP
R0dMRQpDdXJyZW50OiAyCkVORAovbWFpbi9hY3Rpb25zL2Vvc21vdmllbW9kZQpMYWJlbDogTW92
aWUgTW9kZQpSZWFkb25seTogMApUeXBlOiBUT0dHTEUKQ3VycmVudDogMgpFTkQKL21haW4vYWN0
aW9ucy9vcGNvZGUKTGFiZWw6IFBUUCBPcGNvZGUKUmVhZG9ubHk6IDAKVHlwZTogVEVYVApDdXJy
ZW50OiAweDEwMDEsMHhwYXJhbTEsMHhwYXJhbTIKRU5ECi9tYWluL3NldHRpbmdzL2RhdGV0aW1l
CkxhYmVsOiBDYW1lcmEgRGF0ZSBhbmQgVGltZQpSZWFkb25seTogMApUeXBlOiBEQVRFCkN1cnJl
bnQ6IDE3MTA2MDgyMDkKUHJpbnRhYmxlOiBTYXQgMTYgTWFyIDIwMjQgMDU6NTY6NDkgUE0gQ0VU
CkhlbHA6IFVzZSAnbm93JyBhcyB0aGUgY3VycmVudCB0aW1lIHdoZW4gc2V0dGluZy4KCkVORAov
bWFpbi9zZXR0aW5ncy9vd25lcm5hbWUKTGFiZWw6IE93bmVyIE5hbWUKUmVhZG9ubHk6IDAKVHlw
ZTogVEVYVApDdXJyZW50OiB1bmtub3duCkVORAovbWFpbi9zZXR0aW5ncy9hdXRvcG93ZXJvZmYK
TGFiZWw6IEF1dG8gUG93ZXIgT2ZmClJlYWRvbmx5OiAwClR5cGU6IFRFWFQKQ3VycmVudDogMTgw
MApFTkQKL21haW4vc2V0dGluZ3MvY2FwdHVyZXRhcmdldApMYWJlbDogQ2FwdHVyZSBUYXJnZXQK
UmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogSW50ZXJuYWwgUkFNCkNob2ljZTogMCBJ
bnRlcm5hbCBSQU0KQ2hvaWNlOiAxIE1lbW9yeSBjYXJkCkVORAovbWFpbi9zZXR0aW5ncy9jYXB0
dXJlCkxhYmVsOiBDYXB0dXJlClJlYWRvbmx5OiAwClR5cGU6IFRPR0dMRQpDdXJyZW50OiAwCkVO
RAovbWFpbi9zZXR0aW5ncy9yZW1vdGVtb2RlCkxhYmVsOiBSZW1vdGUgTW9kZQpSZWFkb25seTog
MApUeXBlOiBURVhUCkN1cnJlbnQ6IDEKRU5ECi9tYWluL3NldHRpbmdzL2V2ZW50bW9kZQpMYWJl
bDogRXZlbnQgTW9kZQpSZWFkb25seTogMApUeXBlOiBURVhUCkN1cnJlbnQ6IDAKRU5ECi9tYWlu
L3N0YXR1cy9zZXJpYWxudW1iZXIKTGFiZWw6IFNlcmlhbCBOdW1iZXIKUmVhZG9ubHk6IDEKVHlw
ZTogVEVYVApDdXJyZW50OiAxMTIwODAzNzI4CkVORAovbWFpbi9zdGF0dXMvbWFudWZhY3R1cmVy
CkxhYmVsOiBDYW1lcmEgTWFudWZhY3R1cmVyClJlYWRvbmx5OiAxClR5cGU6IFRFWFQKQ3VycmVu
dDogQ2Fub24gSW5jLgpFTkQKL21haW4vc3RhdHVzL2NhbWVyYW1vZGVsCkxhYmVsOiBDYW1lcmEg
TW9kZWwKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50OiBDYW5vbiBFT1MgMzBECkVORAov
bWFpbi9zdGF0dXMvZGV2aWNldmVyc2lvbgpMYWJlbDogRGV2aWNlIFZlcnNpb24KUmVhZG9ubHk6
IDEKVHlwZTogVEVYVApDdXJyZW50OiAzLTEuMC42CkVORAovbWFpbi9zdGF0dXMvdmVuZG9yZXh0
ZW5zaW9uCkxhYmVsOiBWZW5kb3IgRXh0ZW5zaW9uClJlYWRvbmx5OiAxClR5cGU6IFRFWFQKQ3Vy
cmVudDogCkVORAovbWFpbi9zdGF0dXMvbW9kZWwKTGFiZWw6IENhbWVyYSBNb2RlbApSZWFkb25s
eTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDIxNDc0ODQyMTIKRU5ECi9tYWluL3N0YXR1cy9wdHB2
ZXJzaW9uCkxhYmVsOiBQVFAgVmVyc2lvbgpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6
IDI1NgpFTkQKL21haW4vc3RhdHVzL2Rwb2Z2ZXJzaW9uCkxhYmVsOiBEUE9GIFZlcnNpb24KUmVh
ZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50OiAyNTcKRU5ECi9tYWluL3N0YXR1cy9iYXR0ZXJ5
bGV2ZWwKTGFiZWw6IEJhdHRlcnkgTGV2ZWwKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJyZW50
OiAxMDAlCkVORAovbWFpbi9zdGF0dXMvYXZhaWxhYmxlc2hvdHMKTGFiZWw6IEF2YWlsYWJsZSBT
aG90cwpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDk1MDg3CkVORAovbWFpbi9pbWdz
ZXR0aW5ncy9pbWFnZWZvcm1hdApMYWJlbDogSW1hZ2UgRm9ybWF0ClJlYWRvbmx5OiAwClR5cGU6
IFJBRElPCkN1cnJlbnQ6IFJBVyArIExhcmdlIE5vcm1hbCBKUEVHCkNob2ljZTogMCBMYXJnZSBG
aW5lIEpQRUcKQ2hvaWNlOiAxIExhcmdlIE5vcm1hbCBKUEVHCkNob2ljZTogMiBNZWRpdW0gRmlu
ZSBKUEVHCkNob2ljZTogMyBNZWRpdW0gTm9ybWFsIEpQRUcKQ2hvaWNlOiA0IFNtYWxsIEZpbmUg
SlBFRwpDaG9pY2U6IDUgU21hbGwgTm9ybWFsIEpQRUcKQ2hvaWNlOiA2IFJBVwpDaG9pY2U6IDcg
UkFXICsgTGFyZ2UgRmluZSBKUEVHCkNob2ljZTogOCBSQVcgKyBMYXJnZSBOb3JtYWwgSlBFRwpD
aG9pY2U6IDkgUkFXICsgTWVkaXVtIEZpbmUgSlBFRwpDaG9pY2U6IDEwIFJBVyArIE1lZGl1bSBO
b3JtYWwgSlBFRwpDaG9pY2U6IDExIFJBVyArIFNtYWxsIEZpbmUgSlBFRwpDaG9pY2U6IDEyIFJB
VyArIFNtYWxsIE5vcm1hbCBKUEVHCkVORAovbWFpbi9pbWdzZXR0aW5ncy9pc28KTGFiZWw6IElT
TyBTcGVlZApSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiA0MDAKQ2hvaWNlOiAwIDEw
MApDaG9pY2U6IDEgMTI1CkNob2ljZTogMiAxNjAKQ2hvaWNlOiAzIDIwMApDaG9pY2U6IDQgMjUw
CkNob2ljZTogNSAzMjAKQ2hvaWNlOiA2IDQwMApDaG9pY2U6IDcgNTAwCkNob2ljZTogOCA2NDAK
Q2hvaWNlOiA5IDgwMApDaG9pY2U6IDEwIDEwMDAKQ2hvaWNlOiAxMSAxMjUwCkNob2ljZTogMTIg
MTYwMApDaG9pY2U6IDEzIDMyMDAKRU5ECi9tYWluL2ltZ3NldHRpbmdzL3doaXRlYmFsYW5jZQpM
YWJlbDogV2hpdGVCYWxhbmNlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IEF1dG8K
Q2hvaWNlOiAwIEF1dG8KQ2hvaWNlOiAxIERheWxpZ2h0CkNob2ljZTogMiBDbG91ZHkKQ2hvaWNl
OiAzIFR1bmdzdGVuCkNob2ljZTogNCBGbHVvcmVzY2VudApDaG9pY2U6IDUgRmxhc2gKQ2hvaWNl
OiA2IE1hbnVhbApDaG9pY2U6IDcgU2hhZG93CkNob2ljZTogOCBDb2xvciBUZW1wZXJhdHVyZQpF
TkQKL21haW4vaW1nc2V0dGluZ3MvY29sb3J0ZW1wZXJhdHVyZQpMYWJlbDogQ29sb3IgVGVtcGVy
YXR1cmUKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogNTIwMApDaG9pY2U6IDAgMjgw
MApDaG9pY2U6IDEgMjkwMApDaG9pY2U6IDIgMzAwMApDaG9pY2U6IDMgMzEwMApDaG9pY2U6IDQg
MzIwMApDaG9pY2U6IDUgMzMwMApDaG9pY2U6IDYgMzQwMApDaG9pY2U6IDcgMzUwMApDaG9pY2U6
IDggMzYwMApDaG9pY2U6IDkgMzcwMApDaG9pY2U6IDEwIDM4MDAKQ2hvaWNlOiAxMSAzOTAwCkNo
b2ljZTogMTIgNDAwMApDaG9pY2U6IDEzIDQxMDAKQ2hvaWNlOiAxNCA0MjAwCkNob2ljZTogMTUg
NDMwMApDaG9pY2U6IDE2IDQ0MDAKQ2hvaWNlOiAxNyA0NTAwCkNob2ljZTogMTggNDYwMApDaG9p
Y2U6IDE5IDQ3MDAKQ2hvaWNlOiAyMCA0ODAwCkNob2ljZTogMjEgNDkwMApDaG9pY2U6IDIyIDUw
MDAKQ2hvaWNlOiAyMyA1MTAwCkNob2ljZTogMjQgNTIwMApDaG9pY2U6IDI1IDUzMDAKQ2hvaWNl
OiAyNiA1NDAwCkNob2ljZTogMjcgNTUwMApDaG9pY2U6IDI4IDU2MDAKQ2hvaWNlOiAyOSA1NzAw
CkNob2ljZTogMzAgNTgwMApDaG9pY2U6IDMxIDU5MDAKQ2hvaWNlOiAzMiA2MDAwCkNob2ljZTog
MzMgNjEwMApDaG9pY2U6IDM0IDYyMDAKQ2hvaWNlOiAzNSA2MzAwCkNob2ljZTogMzYgNjQwMApD
aG9pY2U6IDM3IDY1MDAKQ2hvaWNlOiAzOCA2NjAwCkNob2ljZTogMzkgNjcwMApDaG9pY2U6IDQw
IDY4MDAKQ2hvaWNlOiA0MSA2OTAwCkNob2ljZTogNDIgNzAwMApDaG9pY2U6IDQzIDcxMDAKQ2hv
aWNlOiA0NCA3MjAwCkNob2ljZTogNDUgNzMwMApDaG9pY2U6IDQ2IDc0MDAKQ2hvaWNlOiA0NyA3
NTAwCkNob2ljZTogNDggNzYwMApDaG9pY2U6IDQ5IDc3MDAKQ2hvaWNlOiA1MCA3ODAwCkNob2lj
ZTogNTEgNzkwMApDaG9pY2U6IDUyIDgwMDAKQ2hvaWNlOiA1MyA4MTAwCkNob2ljZTogNTQgODIw
MApDaG9pY2U6IDU1IDgzMDAKQ2hvaWNlOiA1NiA4NDAwCkNob2ljZTogNTcgODUwMApDaG9pY2U6
IDU4IDg2MDAKQ2hvaWNlOiA1OSA4NzAwCkNob2ljZTogNjAgODgwMApDaG9pY2U6IDYxIDg5MDAK
Q2hvaWNlOiA2MiA5MDAwCkNob2ljZTogNjMgOTEwMApDaG9pY2U6IDY0IDkyMDAKQ2hvaWNlOiA2
NSA5MzAwCkNob2ljZTogNjYgOTQwMApDaG9pY2U6IDY3IDk1MDAKQ2hvaWNlOiA2OCA5NjAwCkNo
b2ljZTogNjkgOTcwMApDaG9pY2U6IDcwIDk4MDAKQ2hvaWNlOiA3MSA5OTAwCkNob2ljZTogNzIg
MTAwMDAKRU5ECi9tYWluL2ltZ3NldHRpbmdzL3doaXRlYmFsYW5jZWFkanVzdGEKTGFiZWw6IFdo
aXRlQmFsYW5jZSBBZGp1c3QgQQpSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiAwCkNo
b2ljZTogMCAtOQpDaG9pY2U6IDEgLTgKQ2hvaWNlOiAyIC03CkNob2ljZTogMyAtNgpDaG9pY2U6
IDQgLTUKQ2hvaWNlOiA1IC00CkNob2ljZTogNiAtMwpDaG9pY2U6IDcgLTIKQ2hvaWNlOiA4IC0x
CkNob2ljZTogOSAwCkNob2ljZTogMTAgMQpDaG9pY2U6IDExIDIKQ2hvaWNlOiAxMiAzCkNob2lj
ZTogMTMgNApDaG9pY2U6IDE0IDUKQ2hvaWNlOiAxNSA2CkNob2ljZTogMTYgNwpDaG9pY2U6IDE3
IDgKQ2hvaWNlOiAxOCA5CkVORAovbWFpbi9pbWdzZXR0aW5ncy93aGl0ZWJhbGFuY2VhZGp1c3Ri
CkxhYmVsOiBXaGl0ZUJhbGFuY2UgQWRqdXN0IEIKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3Vy
cmVudDogMApDaG9pY2U6IDAgLTkKQ2hvaWNlOiAxIC04CkNob2ljZTogMiAtNwpDaG9pY2U6IDMg
LTYKQ2hvaWNlOiA0IC01CkNob2ljZTogNSAtNApDaG9pY2U6IDYgLTMKQ2hvaWNlOiA3IC0yCkNo
b2ljZTogOCAtMQpDaG9pY2U6IDkgMApDaG9pY2U6IDEwIDEKQ2hvaWNlOiAxMSAyCkNob2ljZTog
MTIgMwpDaG9pY2U6IDEzIDQKQ2hvaWNlOiAxNCA1CkNob2ljZTogMTUgNgpDaG9pY2U6IDE2IDcK
Q2hvaWNlOiAxNyA4CkNob2ljZTogMTggOQpFTkQKL21haW4vaW1nc2V0dGluZ3Mvd2hpdGViYWxh
bmNleGEKTGFiZWw6IFdoaXRlQmFsYW5jZSBYIEEKUmVhZG9ubHk6IDEKVHlwZTogVEVYVApDdXJy
ZW50OiAwCkVORAovbWFpbi9pbWdzZXR0aW5ncy93aGl0ZWJhbGFuY2V4YgpMYWJlbDogV2hpdGVC
YWxhbmNlIFggQgpSZWFkb25seTogMQpUeXBlOiBURVhUCkN1cnJlbnQ6IDAKRU5ECi9tYWluL2lt
Z3NldHRpbmdzL2NvbG9yc3BhY2UKTGFiZWw6IENvbG9yIFNwYWNlClJlYWRvbmx5OiAwClR5cGU6
IFJBRElPCkN1cnJlbnQ6IHNSR0IKQ2hvaWNlOiAwIHNSR0IKQ2hvaWNlOiAxIEFkb2JlUkdCCkVO
RAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvZXhwb3N1cmVjb21wZW5zYXRpb24KTGFiZWw6IEV4cG9z
dXJlIENvbXBlbnNhdGlvbgpSZWFkb25seTogMApUeXBlOiBSQURJTwpDdXJyZW50OiAwCkNob2lj
ZTogMCAwCkVORAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvZm9jdXNtb2RlCkxhYmVsOiBGb2N1cyBN
b2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IE1hbnVhbApDaG9pY2U6IDAgTWFu
dWFsCkVORAovbWFpbi9jYXB0dXJlc2V0dGluZ3MvYXV0b2V4cG9zdXJlbW9kZQpMYWJlbDogQ2Fu
b24gQXV0byBFeHBvc3VyZSBNb2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1cnJlbnQ6IE1h
bnVhbApDaG9pY2U6IDAgUApDaG9pY2U6IDEgVFYKQ2hvaWNlOiAyIEFWCkNob2ljZTogMyBNYW51
YWwKQ2hvaWNlOiA0IEJ1bGIKQ2hvaWNlOiA1IEFfREVQCkNob2ljZTogNiBERVAKQ2hvaWNlOiA3
IEN1c3RvbQpDaG9pY2U6IDggTG9jawpDaG9pY2U6IDkgR3JlZW4KQ2hvaWNlOiAxMCBOaWdodCBQ
b3J0cmFpdApDaG9pY2U6IDExIFNwb3J0cwpDaG9pY2U6IDEyIFBvcnRyYWl0CkNob2ljZTogMTMg
TGFuZHNjYXBlCkNob2ljZTogMTQgQ2xvc2V1cApDaG9pY2U6IDE1IEZsYXNoIE9mZgpDaG9pY2U6
IDE2IEMyCkNob2ljZTogMTcgQzMKQ2hvaWNlOiAxOCBDcmVhdGl2ZSBBdXRvCkNob2ljZTogMTkg
TW92aWUKQ2hvaWNlOiAyMCBBdXRvCkNob2ljZTogMjEgSGFuZGhlbGQgTmlnaHQgU2NlbmUKQ2hv
aWNlOiAyMiBIRFIgQmFja2xpZ2h0IENvbnRyb2wKQ2hvaWNlOiAyMyBTQ04KQ2hvaWNlOiAyNCBG
b29kCkNob2ljZTogMjUgR3JhaW55IEIvVwpDaG9pY2U6IDI2IFNvZnQgZm9jdXMKQ2hvaWNlOiAy
NyBUb3kgY2FtZXJhIGVmZmVjdApDaG9pY2U6IDI4IEZpc2gtZXllIGVmZmVjdApDaG9pY2U6IDI5
IFdhdGVyIHBhaW50aW5nIGVmZmVjdApDaG9pY2U6IDMwIE1pbmlhdHVyZSBlZmZlY3QKQ2hvaWNl
OiAzMSBIRFIgYXJ0IHN0YW5kYXJkCkNob2ljZTogMzIgSERSIGFydCB2aXZpZApDaG9pY2U6IDMz
IEhEUiBhcnQgYm9sZApDaG9pY2U6IDM0IEhEUiBhcnQgZW1ib3NzZWQKQ2hvaWNlOiAzNSBQYW5u
aW5nCkNob2ljZTogMzYgSERSCkNob2ljZTogMzcgU2VsZiBQb3J0cmFpdApDaG9pY2U6IDM4IEh5
YnJpZCBBdXRvCkNob2ljZTogMzkgU21vb3RoIHNraW4KQ2hvaWNlOiA0MCBGdgpFTkQKL21haW4v
Y2FwdHVyZXNldHRpbmdzL2RyaXZlbW9kZQpMYWJlbDogRHJpdmUgTW9kZQpSZWFkb25seTogMApU
eXBlOiBSQURJTwpDdXJyZW50OiBTaW5nbGUKQ2hvaWNlOiAwIFNpbmdsZQpFTkQKL21haW4vY2Fw
dHVyZXNldHRpbmdzL3BpY3R1cmVzdHlsZQpMYWJlbDogUGljdHVyZSBTdHlsZQpSZWFkb25seTog
MApUeXBlOiBSQURJTwpDdXJyZW50OiBTdGFuZGFyZApDaG9pY2U6IDAgU3RhbmRhcmQKQ2hvaWNl
OiAxIFBvcnRyYWl0CkNob2ljZTogMiBMYW5kc2NhcGUKQ2hvaWNlOiAzIE5ldXRyYWwKQ2hvaWNl
OiA0IEZhaXRoZnVsCkNob2ljZTogNSBNb25vY2hyb21lCkNob2ljZTogNiBVc2VyIGRlZmluZWQg
MQpDaG9pY2U6IDcgVXNlciBkZWZpbmVkIDIKQ2hvaWNlOiA4IFVzZXIgZGVmaW5lZCAzCkVORAov
bWFpbi9jYXB0dXJlc2V0dGluZ3MvYXBlcnR1cmUKTGFiZWw6IEFwZXJ0dXJlClJlYWRvbmx5OiAw
ClR5cGU6IFJBRElPCkN1cnJlbnQ6IGltcGxpY2l0IGF1dG8KQ2hvaWNlOiAwIGltcGxpY2l0IGF1
dG8KRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9zaHV0dGVyc3BlZWQKTGFiZWw6IFNodXR0ZXIg
U3BlZWQKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogYnVsYgpDaG9pY2U6IDAgMzAK
Q2hvaWNlOiAxIDI1CkNob2ljZTogMiAyMApDaG9pY2U6IDMgMTUKQ2hvaWNlOiA0IDEzCkNob2lj
ZTogNSAxMC4zCkNob2ljZTogNiA4CkNob2ljZTogNyA2LjMKQ2hvaWNlOiA4IDUKQ2hvaWNlOiA5
IDQKQ2hvaWNlOiAxMCAzLjIKQ2hvaWNlOiAxMSAyLjUKQ2hvaWNlOiAxMiAyCkNob2ljZTogMTMg
MS42CkNob2ljZTogMTQgMS4zCkNob2ljZTogMTUgMQpDaG9pY2U6IDE2IDAuOApDaG9pY2U6IDE3
IDAuNgpDaG9pY2U6IDE4IDAuNQpDaG9pY2U6IDE5IDAuNApDaG9pY2U6IDIwIDAuMwpDaG9pY2U6
IDIxIDEvNApDaG9pY2U6IDIyIDEvNQpDaG9pY2U6IDIzIDEvNgpDaG9pY2U6IDI0IDEvOApDaG9p
Y2U6IDI1IDEvMTAKQ2hvaWNlOiAyNiAxLzEzCkNob2ljZTogMjcgMS8xNQpDaG9pY2U6IDI4IDEv
MjAKQ2hvaWNlOiAyOSAxLzI1CkNob2ljZTogMzAgMS8zMApDaG9pY2U6IDMxIDEvNDAKQ2hvaWNl
OiAzMiAxLzUwCkNob2ljZTogMzMgMS82MApDaG9pY2U6IDM0IDEvODAKQ2hvaWNlOiAzNSAxLzEw
MApDaG9pY2U6IDM2IDEvMTI1CkNob2ljZTogMzcgMS8xNjAKQ2hvaWNlOiAzOCAxLzIwMApDaG9p
Y2U6IDM5IDEvMjUwCkNob2ljZTogNDAgMS8zMjAKQ2hvaWNlOiA0MSAxLzQwMApDaG9pY2U6IDQy
IDEvNTAwCkNob2ljZTogNDMgMS82NDAKQ2hvaWNlOiA0NCAxLzgwMApDaG9pY2U6IDQ1IDEvMTAw
MApDaG9pY2U6IDQ2IDEvMTI1MApDaG9pY2U6IDQ3IDEvMTYwMApDaG9pY2U6IDQ4IDEvMjAwMApD
aG9pY2U6IDQ5IDEvMjUwMApDaG9pY2U6IDUwIDEvMzIwMApDaG9pY2U6IDUxIDEvNDAwMApDaG9p
Y2U6IDUyIDEvNTAwMApDaG9pY2U6IDUzIDEvNjQwMApDaG9pY2U6IDU0IDEvODAwMApDaG9pY2U6
IDU1IGJ1bGIKRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9tZXRlcmluZ21vZGUKTGFiZWw6IE1l
dGVyaW5nIE1vZGUKUmVhZG9ubHk6IDAKVHlwZTogUkFESU8KQ3VycmVudDogRXZhbHVhdGl2ZQpD
aG9pY2U6IDAgU3BvdApDaG9pY2U6IDEgRXZhbHVhdGl2ZQpDaG9pY2U6IDIgUGFydGlhbApDaG9p
Y2U6IDMgQ2VudGVyLXdlaWdodGVkIGF2ZXJhZ2UKRU5ECi9tYWluL2NhcHR1cmVzZXR0aW5ncy9i
cmFja2V0bW9kZQpMYWJlbDogQnJhY2tldCBNb2RlClJlYWRvbmx5OiAwClR5cGU6IFJBRElPCkN1
cnJlbnQ6IFVua25vd24gdmFsdWUgMDAwMApDaG9pY2U6IDAgVW5rbm93biB2YWx1ZSAwMDAwCkVO
RAoKQ2FtZXJhIHN1bW1hcnk6Ck1hbnVmYWN0dXJlcjogQ2Fub24gSW5jLgpNb2RlbDogQ2Fub24g
RU9TIDMwRAogIFZlcnNpb246IDMtMS4wLjYKICBTZXJpYWwgTnVtYmVyOiAxMTIwODAzNzI4ClZl
bmRvciBFeHRlbnNpb24gSUQ6IDB4YiAoMi4wKQpWZW5kb3IgRXh0ZW5zaW9uIERlc2NyaXB0aW9u
OiAKCkNhcHR1cmUgRm9ybWF0czogSlBFRwpEaXNwbGF5IEZvcm1hdHM6IFNjcmlwdCwgRFBPRiwg
TVMgQVZJLCBNUyBXYXZlLCBKUEVHLCBDUlcsIFVua25vd24oYmYwMikKCkRldmljZSBDYXBhYmls
aXRpZXM6CglGaWxlIERvd25sb2FkLCBGaWxlIERlbGV0aW9uLCBGaWxlIFVwbG9hZAoJTm8gSW1h
Z2UgQ2FwdHVyZSwgTm8gT3BlbiBDYXB0dXJlLCBDYW5vbiBFT1MgQ2FwdHVyZQoKU3RvcmFnZSBE
ZXZpY2VzIFN1bW1hcnk6CnN0b3JlXzAwMDAwMDAxOgoJU3RvcmFnZURlc2NyaXB0aW9uOiBDRgoJ
Vm9sdW1lTGFiZWw6IEE6CglTdG9yYWdlIFR5cGU6IFJlbW92YWJsZSBSQU0gKG1lbW9yeSBjYXJk
KQoJRmlsZXN5c3RlbXR5cGU6IERpZ2l0YWwgQ2FtZXJhIExheW91dCAoRENJTSkKCUFjY2VzcyBD
YXBhYmlsaXR5OiBSZWFkLVdyaXRlCglNYXhpbXVtIENhcGFiaWxpdHk6IDM5ODk2NDMyNjQgKDM4
MDQgTUIpCglGcmVlIFNwYWNlIChCeXRlcyk6IDM5NDYyOTUyOTYgKDM3NjMgTUIpCglGcmVlIFNw
YWNlIChJbWFnZXMpOiAtMQoKRGV2aWNlIFByb3BlcnR5IFN1bW1hcnk6Ck1vZGVsIElEKDB4ZDA0
OSk6IGVycm9yIDIwMDUgb24gcXVlcnku

--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/plain; name="canon.c"
Content-Description: canon.c
Content-Disposition: attachment; filename="canon.c"; size=183972;
	creation-date="Sat, 16 Mar 2024 21:22:57 GMT";
	modification-date="Sat, 16 Mar 2024 21:22:58 GMT"
Content-Transfer-Encoding: base64

LyoNCiAqIGNhbm9uLmMgLSBDYW5vbiBwcm90b2NvbCAibmF0aXZlIiBvcGVyYXRpb25zLg0KICoN
CiAqIFdyaXR0ZW4gMTk5OSBieSBXb2xmZ2FuZyBHLiBSZWlzc25lZ2dlciBhbmQgV2VybmVyIEFs
bWVzYmVyZ2VyDQogKiBBZGRpdGlvbnMgMjAwMCBieSBQaGlsaXBwZSBNYXJ6b3VrIGFuZCBFZG91
YXJkIExhZmFyZ3VlDQogKiBVU0Igc3VwcG9ydCwgMjAwMCwgYnkgTWlrYWVsIE55c3Ryb2VtDQog
Kg0KICogVGhpcyBmaWxlIGluY2x1ZGVzIGJvdGggVVNCIGFuZCBzZXJpYWwgc3VwcG9ydCBmb3Ig
dGhlIGNhbWVyYXMNCiAqIG1hbnVmYWN0dXJlZCBieSBDYW5vbi4gVGhlc2UgY29tcHJpc2UgYWxs
IChvciBhdCBsZWFzdCBhbG1vc3QgYWxsKQ0KICogb2YgdGhlIGRpZ2l0YWwgbW9kZWxzIG9mIHRo
ZSBJWFVTIGFuZCBQb3dlclNob3Qgc2VyaWVzLCBhbmQgRU9TDQogKiBEMzAsIEQ2MCwgYW5kIDEw
RC4gVGhlIEVPUy0xRCBhbmQgRU9TLTFEcyBhcmUgbm90IHN1cHBvcnRlZDsgdGhleQ0KICogdXNl
IGEgRmlyZVdpcmUgKElFRUUgMTM5NCkgaW50ZXJmYWNlLg0KICoNCiAqIFdlIGFyZSB3b3JraW5n
IGF0IG1vdmluZyBzZXJpYWwgYW5kIFVTQiBzcGVjaWZpYyBzdHVmZiB0byBzZXJpYWwuYw0KICog
YW5kIHVzYi5jLCBrZWVwaW5nIHRoZSBjb21tb24gcHJvdG9jb2xzL2J1c2VzIHN1cHBvcnQgaW4g
dGhpcw0KICogZmlsZS4NCiAqLw0KI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UNCiNpbmNsdWRlICJj
b25maWcuaCINCg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5j
bHVkZSA8c3RkYXJnLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8Y3R5cGUuaD4N
CiNpbmNsdWRlIDx1bmlzdGQuaD4NCg0KI2lmZGVmIFRNX0lOX1NZU19USU1FDQojaW5jbHVkZSA8
c3lzL3RpbWUuaD4NCiNlbHNlDQojaW5jbHVkZSA8dGltZS5oPg0KI2VuZGlmDQoNCiNpbmNsdWRl
IDxncGhvdG8yL2dwaG90bzIuaD4NCiNpbmNsdWRlIDxncGhvdG8yL2dwaG90bzItcG9ydC1sb2cu
aD4NCg0KI2luY2x1ZGUgImxpYmdwaG90bzIvaTE4bi5oIg0KDQoNCiNpbmNsdWRlICJ1c2IuaCIN
CiNpbmNsdWRlICJ1dGlsLmgiDQojaW5jbHVkZSAibGlicmFyeS5oIg0KI2luY2x1ZGUgImNhbm9u
LmgiDQojaW5jbHVkZSAic2VyaWFsLmgiDQoNCiNpZmRlZiBIQVZFX0xJQkVYSUYNCiMgIGluY2x1
ZGUgPGxpYmV4aWYvZXhpZi1kYXRhLmg+DQojICBpbmNsdWRlIDxsaWJleGlmL2V4aWYtdXRpbHMu
aD4NCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBDYW1lcmEgZGVmaW5pdGlvbnMNCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovDQoNCi8qKg0KICogbW9kZWxzOg0KICoNCiAqIENvbnRhaW5zIGxpc3Qg
b2YgYWxsIGNhbWVyYSBtb2RlbHMgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIHRoZWlyDQogKiBy
ZXNwZWN0aXZlIFVTQiBJRHMgYW5kIGEgc2VyaWFsIElEIFN0cmluZyBmb3IgY2FtZXJhcyB3aXRo
IFJTMjMyDQogKiBzZXJpYWwgc3VwcG9ydC4NCiAqDQogKiBTb21lIGNhbWVyYXMgYXJlIHNvbGQg
dW5kZXIgZGlmZmVyZW50IG5hbWVzIGluIGRpZmZlcmVudCByZWdpb25zLA0KICogYnV0IGFyZSB0
ZWNobmljYWxseSB0aGUgc2FtZS4gV2UgdHJlYXQgdGhlbSB0aGUgc2FtZSBmcm9tIGENCiAqIHRl
Y2huaWNhbCBwb2ludCBvZiB2aWV3LiBUbyBhdm9pZCB1bm5lY2Vzc2FyeSBxdWVzdGlvbnMgZnJv
bSB1c2VycywNCiAqIHdlIGFkZCB0aGUgb3RoZXIgbmFtZXMgdG8gdGhlIGNhbWVyYSBsaXN0IGFm
dGVyIHRoZSBwcmltYXJ5IG5hbWUsDQogKiBzdWNoIHRoYXQgdGhlaXIgY2FtZXJhIG5hbWUgb2Nj
dXJzIGluIHRoZSBsaXN0IG9mIHN1cHBvcnRlZA0KICogY2FtZXJhcy4NCiAqDQogKiBOb3RlczoN
CiAqIC0gQXQgbGVhc3Qgc29tZSBzZXJpYWwgY2FtZXJhcyByZXF1aXJlIGEgY2VydGFpbiBuYW1l
IGZvciBjb3JyZWN0DQogKiAgIGRldGVjdGlvbi4NCiAqIC0gTmV3ZXIgQ2Fub24gVVNCIGNhbWVy
YXMgYWxzbyBzdXBwb3J0IGEgUFRQIG1vZGUuIFNlZSBwdHAyIGNhbWxpYi4NCiAqIC0gTm8gSUVF
RTEzOTQgY2FtZXJhcyBzdXBwb3J0ZWQgeWV0Lg0KICogLSBUaGUgc2l6ZSBsaW1pdCBjb25zdGFu
dHMgYXJlbid0IHVzZWQgcHJvcGVybHkgYW55d2hlcmUuIFdlIHNob3VsZA0KICogICBwcm9iYWJs
eSBnZXQgcmlkIG9mIHRoZW0gYWx0b2dldGhlci4NCiAqKi8NCg0KLyogU0xfKiAtIHNpemUgbGlt
aXQgY29uc3RhbnRzICovDQojZGVmaW5lIEtJTE9CWVRFCSgxMDI0VSkNCiNkZWZpbmUgTUVHQUJZ
VEUJKDEwMjRVICogS0lMT0JZVEUpDQojZGVmaW5lIFNMX1RIVU1CCSggMTAwVSAqIEtJTE9CWVRF
KQ0KI2RlZmluZSBTTF9USFVNQl9DUjIgICAgKCAgMTBVICogTUVHQUJZVEUpIC8qIHNhbWUgYXMg
cmVndWxhciBpbWFnZSAqLw0KI2RlZmluZSBTTF9QSUNUVVJFCSggIDEwVSAqIE1FR0FCWVRFKQ0K
I2RlZmluZSBTTF9NT1ZJRV9TTUFMTAkoIDEwMFUgKiBNRUdBQllURSkNCiNkZWZpbmUgU0xfTU9W
SUVfTEFSR0UJKDIwNDhVICogTUVHQUJZVEUpDQojZGVmaW5lIE5PX1VTQiAgMA0KDQovKiBNb2Rl
bHMgd2l0aCB1bmtub3duIFVTQiBJRCdzOg0KICBFdXJvcGVhbiBuYW1lICAgICAgICAgIE5vcnRo
IEFtZXJpY2FuICAgICAgICAgICAgICAgICBKYXBhbmVzZSAgICAgICAgICAgICBJbnRybyBkYXRl
DQoNCiAgUG93ZXJTaG90IEE1MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSmFudWFyeSAyMDA1DQogIERpZ2l0YWwgSVhVUyA0MCAg
ICAgICAgUG93ZXJTaG90IFNEMzAwICAgICAgICAgICAgICAgIElYWSBEaWdpdGFsIDUwICAgICAg
IFNlcHRlbWJlciAyMDA0DQogIFBvd2VyU2hvdCBQcm8xICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZlYnJ1YXJ5IDIwMDQNCiAgICAg
ICAgICAgICAgICAgICAgICAgICBQb3dlclNob3QgU0QzMCAgICAgICAgICAgICAgICAgSVhZIGkg
em9vbSAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dl
clNob3QgQTQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIw
MDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclNob3QgQTYxMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAg
ICAgICBQb3dlclNob3QgQTYyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXVndXN0IDIwMDUNCiAgRGlnaXRhbCBJWFVTIDU1ICAgICAgICBQb3dlclNob3QgU0Q0NTAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgRGlnaXRhbCBJ
WFVTIDc1MCAgICAgICBQb3dlclNob3QgU0Q1NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXVndXN0IDIwMDUNCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclNob3Qg
UzgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAg
RGlnaXRhbCBJWFVTIFdpcmVsZXNzICBQb3dlclNob3QgU0Q0MzAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXVndXN0IDIwMDUNCiAgKi8NCmNvbnN0IHN0cnVjdCBjYW5vbkNh
bU1vZGVsRGF0YSBtb2RlbHNbXSA9IHsNCgkvKiAqSU5ERU5ULU9GRiogKi8NCgl7IkNhbm9uOlBv
d2VyU2hvdCBBNSIsCQlDQU5PTl9DTEFTU18zLAlOT19VU0IsIE5PX1VTQiwgQ0FQX05PTiwgU0xf
TU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCAiREUzMDAgQ2Fub24gSW5jLiJ9LA0K
CXsiQ2Fub246UG93ZXJTaG90IEE1IFpvb20iLAlDQU5PTl9DTEFTU18zLAlOT19VU0IsIE5PX1VT
QiwgQ0FQX05PTiwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCAiQ2Fub24g
UG93ZXJTaG90IEE1IFpvb20ifSwNCgl7IkNhbm9uOlBvd2VyU2hvdCBBNTAiLAkJQ0FOT05fQ0xB
U1NfMSwJTk9fVVNCLCBOT19VU0IsIENBUF9OT04sIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwg
U0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBBNTAifSwNCgl7IkNhbm9uOlBvd2VyU2hvdCBQ
cm83MCIsCUNBTk9OX0NMQVNTXzIsCU5PX1VTQiwgTk9fVVNCLCBDQVBfTk9OLCBTTF9NT1ZJRV9T
TUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsICJDYW5vbiBQb3dlclNob3QgUHJvNzAifSwNCgl7
IkNhbm9uOlBvd2VyU2hvdCBTMTAiLAkJQ0FOT05fQ0xBU1NfMCwJMHgwNEE5LCAweDMwNDEsIENB
UF9OT04sIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2Vy
U2hvdCBTMTAifSwNCiAgICAgICAgLyogMzA0MiBpcyBhIHNjYW5uZXIsIHNvIGl0IHdpbGwgbmV2
ZXIgYmUgYWRkZWQgaGVyZS4gKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzIwIiwgICAg
ICAgICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDMsIENBUF9OT04sIFNMX01PVklFX1NN
QUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBTMjAifSwNCiAgICAg
ICAgeyJDYW5vbjpFT1MgRDMwIiwgICAgICAgICAgICAgICBDQU5PTl9DTEFTU180LCAgMHgwNEE5
LCAweDMwNDQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg
TlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IFMxMDAgKDIwMDApIiwgQ0FOT05fQ0xB
U1NfMCwgIDB4MDRBOSwgMHgzMDQ1LCBDQVBfTk9OLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIs
IFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBESUdJVEFMIiwgICAgICAg
ICAgIENBTk9OX0NMQVNTXzAsICAweDA0QTksIDB4MzA0NiwgQ0FQX05PTiwgU0xfTU9WSUVfU01B
TEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFs
IElYVVMiLCAgICAgICAgICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDcsIENBUF9OT04s
IFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsi
Q2Fub246UG93ZXJTaG90IEcxIiwgICAgICAgICAgQ0FOT05fQ0xBU1NfMCwgIDB4MDRBOSwgMHgz
MDQ4LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsICJDYW5v
biBQb3dlclNob3QgRzEifSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUHJvOTAgSVMiLCAg
ICBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNDksIENBUF9TVVAsIFNMX01PVklFX1NNQUxM
LCBTTF9USFVNQiwgU0xfUElDVFVSRSwgIkNhbm9uIFBvd2VyU2hvdCBQcm85MCBJUyJ9LA0KDQog
ICAgICAgIHsiQ2Fub246SVhZIERJR0lUQUwgMzAwIiwgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4
MDRBOSwgMHgzMDRCLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RV
UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTMzAwIiwgICAgICAgIENBTk9O
X0NMQVNTXzEsICAweDA0QTksIDB4MzA0QywgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RI
VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgMzAw
IiwgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNEQsIENBUF9TVVAsIFNMX01PVklF
X1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93
ZXJTaG90IEEyMCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDRFLCBDQVBf
U1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg
ICB7IkNhbm9uOlBvd2VyU2hvdCBBMTAiLCAgICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTks
IDB4MzA0RiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCiAgICAgICAgLyogTWFjIE9TIGluY2x1ZGVzIHRoaXMgYXMgYSB2YWxpZCBJRDsgZG9u
J3Qga25vdyB3aGljaCBjYW1lcmEgbW9kZWwgLS1zd2VzdGluICovDQogICAgICAgIHsiQ2Fub246
UG93ZXJTaG90IHVua25vd24gMSIsICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDUwLCBD
QVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAg
ICAgICAvKiBDYW5vbiBJWFkgRElHSVRBTCAyMDAgaGVyZT8gKi8NCiAgICAgICAgeyJDYW5vbjpQ
b3dlclNob3QgUzExMCAoMjAwMSkiLCBDQU5PTl9DTEFTU18wLCAgMHgwNEE5LCAweDMwNTEsIENB
UF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg
ICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIHYiLCAgICAgICAgQ0FOT05fQ0xBU1NfMCwgIDB4MDRB
OSwgMHgzMDUyLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs
IE5VTEx9LA0KDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IEcyIiwgICAgICAgICAgQ0FOT05f
Q0xBU1NfMSwgIDB4MDRBOSwgMHgzMDU1LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhV
TUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNDAiLCAg
ICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA1NiwgQ0FQX1NVUCwgU0xfTU9WSUVf
U01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dl
clNob3QgUzMwIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNTcsIENBUF9T
VVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAg
IHsiQ2Fub246UG93ZXJTaG90IEE0MCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwg
MHgzMDU4LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V
TEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMzAiLCAgICAgICAgIENBTk9OX0NMQVNT
XzEsICAweDA0QTksIDB4MzA1OSwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBT
TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA1YSBpcyB0aGUgWlI1MCBEaWdpdGFsIENh
bWNvcmRlciBpbiBVU0IgTWFzcyBTdG9yYWdlIG1vZGUuICovDQogICAgICAgIC8qIDMwNWIgaXMg
dGhlIFpSNDVNQyBEaWdpdGFsIENhbWNvcmRlciBpbiBVU0IgTWFzcyBTdG9yYWdlIG1vZGUuICov
DQogICAgICAgIC8qIDMwNWMgaXMgaW4gTWFjT1MgSW5mby5wbGlzdCwgYnV0IEkgZG9uJ3Qga25v
dyB3aGF0IGl0IGlzIC0tc3dlc3Rpbi4gKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgdW5r
bm93biAyIiwgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNWMsIENBUF9TVVAsIFNMX01P
VklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAgICAgeyJDYW5v
bjpFT1MgRDYwIiwgICAgICAgICAgICAgICBDQU5PTl9DTEFTU180LCAgMHgwNEE5LCAweDMwNjAs
IENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQog
ICAgICAgIHsiQ2Fub246UG93ZXJTaG90IEExMDAiLCAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4
MDRBOSwgMHgzMDYxLCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RV
UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMjAwIiwgICAgICAgIENBTk9O
X0NMQVNTXzEsICAweDA0QTksIDB4MzA2MiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RI
VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTMjAw
IiwgICAgICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA2NSwgQ0FQX1NVUCwgU0xfTU9W
SUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpE
aWdpdGFsIElYVVMgdjIiLCAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNjUsIENB
UF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg
ICAgIHsiQ2Fub246UG93ZXJTaG90IFMzMzAiLCAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRB
OSwgMHgzMDY2LCBDQVBfU1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs
IE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyAzMzAiLCAgICAgIENBTk9OX0NM
QVNTXzEsICAweDA0QTksIDB4MzA2NiwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1C
LCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA2NyAgTVY1NTBpIERpZ2l0YWwgVmlk
ZW8gQ2FtZXJhICovDQoNCiAgICAgICAgLyogUmVwb3J0ZWQgYXQgaHR0cDovL3d3dy5saW51eC11
c2Iub3JnL3VzYi5pZHMsIHdlIGhhdmUgMzA2RS4gKi8NCiAgICAgICAgLyp7IkNhbm9uOlBvd2Vy
U2hvdCBHMyIsICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNjksIENBUF9TVVAs
IFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sKi8NCiAgICAgICAg
LyogMzA2YSBpcyBpbiBNYWNPUyBJbmZvLnBsaXN0LCBidXQgSSBkb24ndCBrbm93IHdoYXQgaXQg
aXMgLS1zd2VzdGluLiAqLw0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgdW5rbm93biAzIiwgICAg
IENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA2YSwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEws
IFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMjAw
IE1DIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNkIsIENBUF9TVVAsIFNM
X01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fu
b246TVZYMmkiLCAgICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDZC
LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K
ICAgICAgICB7IkNhbm9uOklYWSBEViBNIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzEsICAw
eDA0QTksIDB4MzA2QiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU
VVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQ1IChub3JtYWwgbW9kZSki
LCAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA2QywgQ0FQX1NVUCwgU0xfTU9WSUVfTEFS
R0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMHgzMDZEIGlzIFM0
NSBpbiBQVFAgbW9kZSAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBHMyAobm9ybWFsIG1v
ZGUpIiwgICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMDZFLCBDQVBfU1VQLCBTTF9NT1ZJ
RV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMwNkYg
aXMgRzMgaW4gUFRQIG1vZGUgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzIzMCAobm9y
bWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA3MCwgQ0FQX1NVUCwgU0xf
TU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5v
bjpEaWdpdGFsIElYVVMgdjMgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzQsICAweDA0QTks
IDB4MzA3MCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCiAgICAgICAgLyogMHgzMDcxIGlzIFMyMzAvSVhVUyB2MyBpbiBQVFAgbW9kZSAqLw0K
ICAgICAgICAvKiBGb2xsb3dpbmcgY2FtZXJhcyBzaGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fu
b24gbW9kZXMgKi8NCiNpZiAwIC8qIHNlcnZlZCBiZXR0ZXIgYnkgcHRwMiBkcml2ZXIgKi8NCiAg
ICAgICAgeyJDYW5vbjpQb3dlclNob3QgU0QxMDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNT
XzUsICAweDA0QTksIDB4MzA3MiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT
TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgSUkgKG5vcm1h
bCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA3MiwgQ0FQX1NVUCwgU0xfTU9W
SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQ
b3dlclNob3QgQTcwIiwgICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNzMsIENB
UF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAg
ICAgIHsiQ2Fub246UG93ZXJTaG90IEE2MCIsICAgICAgICAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRB
OSwgMHgzMDc0LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs
IE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyA0MDAiLCAgICAgIENBTk9OX0NM
QVNTXzEsICAweDA0QTksIDB4MzA3NSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1C
LCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQwMCIsICAg
ICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwNzUsIENBUF9TVVAsIFNMX01PVklFX0xB
UkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIEVuZCBvZiBzaGFy
ZWQgSUQncyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBBMzAwIiwgICAgICAgIENBTk9O
X0NMQVNTXzEsICAweDA0QTksIDB4MzA3NiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI
VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KICAgICAgICAvKiBTNTAgYWxzbyBzaGFyZXMgSUQg
Zm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzUw
IChub3JtYWwgbW9kZSkiLCAgIENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA3NywgQ0FQX1NV
UCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0K
ICAgICAgICB7IkNhbm9uOlpSNzBNQyAobm9ybWFsIG1vZGUpIiwgICAgICBDQU5PTl9DTEFTU18x
LCAgMHgwNEE5LCAweDMwNzgsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xf
UElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIDMwNzkgaXMgbGlzdGVkIGZvciBNVjY1MGksIHBy
b2JhYmx5IGluIFBUUCBtb2RlLiAqLw0KICAgICAgICB7IkNhbm9uOk1WNjUwaSAobm9ybWFsIG1v
ZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA3YSwgQ0FQX1NVUCwgU0xfTU9WSUVf
U01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgLyogMzA3YiBpcyBs
aXN0ZWQgZm9yIE1WNjMwaSwgcHJvYmFibHkgaW4gUFRQIG1vZGUuICovDQogICAgICAgIHsiQ2Fu
b246TVY2MzBpIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDdj
LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K
DQogICAgICAgIC8qIDMwN2YgaXMgT3B0dXJhIDIwL01WWDE1MGkgaW4gUFRQIG1vZGUsIHNvbWVv
bmUgdG9sZCwgYnV0IGl0IHNlZW1zIG5vdCBjb3JyZWN0LiBTcGVjaWZ5IGl0IGhlcmUgdG9vLiAq
Lw0KICAgICAgICB7IkNhbm9uOk9wdHVyYSAyMCIsIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4
MzA3ZiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxM
fSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMjAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNT
XzEsICAweDA0QTksIDB4MzA4MCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT
TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpNVlgxNTBpIChub3JtYWwgbW9kZSki
LCBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwODAsIENBUF9TVVAsIFNMX01PVklFX0xBUkdF
LCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIFNpZ2h0ZWQgYXQNCiAg
ICAgICAgICogPGh0dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy9zaG93ZGVzY3IucGhwP2lk
PTIyMzI+LiAqLw0KICAgICAgICB7IkNhbm9uOk1WWDEwMGkiLCAgICAgICAgICAgICAgIENBTk9O
X0NMQVNTXzEsICAweDA0QTksIDB4MzA4MSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI
VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpPcHR1cmEgMTAiLCAgICAg
ICAgICAgICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwODIsIENBUF9TVVAsIFNMX01PVklF
X0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246RU9T
IDEwRCIsICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMDgzLCBDQVBf
U1VQLCBTTF9NT1ZJRV9TTUFMTCwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg
ICB7IkNhbm9uOkVPUyAzMDBEIChub3JtYWwgbW9kZSkiLCBDQU5PTl9DTEFTU180LCAweDA0QTks
IDB4MzA4NCwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCiAgICAgICAgeyJDYW5vbjpFT1MgRGlnaXRhbCBSZWJlbCAobm9ybWFsIG1vZGUpIixD
QU5PTl9DTEFTU180LCAweDA0QTksIDB4MzA4NCwgQ0FQX1NVUCwgU0xfTU9WSUVfU01BTEwsIFNM
X1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpFT1MgS2lzcyBEaWdp
dGFsIChub3JtYWwgbW9kZSkiLENBTk9OX0NMQVNTXzQsICAweDA0QTksIDB4MzA4NCwgQ0FQX1NV
UCwgU0xfTU9WSUVfU01BTEwsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCg0KI2lmIDAN
CiAgICAgICAgLyogUFMgRzUgdXNlcyB0aGUgc2FtZSBQcm9kdWN0SUQgZm9yIFBUUCBhbmQgQ2Fu
b24sIHdpdGggcHJvdG9jb2wgYXV0b2RldGVjdGlvbiAqLw0KCS8qIFVzZSBQVFAgZHJpdmVyLCBh
cyB0aGlzIGRyaXZlciBoYWQgYnJva2VuIHJlcG9ydHMgLSBNYXJjdXMqLw0KICAgICAgICB7IkNh
bm9uOlBvd2VyU2hvdCBHNSAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNSwgICAgIDB4MDRB
OSwgMHgzMDg1LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUs
IE5VTEx9LA0KI2VuZGlmDQoNCiAgICAgICAgLyogRWx1cmEgNTAgY2FtY29yZGVyIGlzIDB4MzA4
NyBpbiBQVFAgbW9kZTsgMzA4OCBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOkVs
dXJhIDUwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDg4LCBD
QVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KDQog
ICAgICAgIC8qIE9wdHVyYSBYaS9NVlggM2kvRlYgTTEgdXNlcyAzMDhkIGluIFBUUCBtb2RlOyAz
MDhlIGluIENhbm9uIG1vZGU/ICovDQogICAgICAgIHsiQ2Fub246T3B0dXJhIFhpIChub3JtYWwg
bW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMDhlLCBDQVBfU1VQLCBTTF9NT1ZJ
RV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOk1W
WCAzaSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzA4ZSwgQ0FQ
X1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAg
ICAgeyJDYW5vbjpGViBNMSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTks
IDB4MzA4ZSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCg0KICAgICAgICAvKiBPcHR1cmEgMzAwL01WWCAxMGkvSVhZIERWIE0yIHZpZGVvIGNh
bWVyYSB1c2VzIDMwOTMgaW4gVVNCIE1hc3MgU3RvcmFnZSBtb2RlLiAqLw0KDQogICAgICAgIC8q
IE9wdHVyYSAzMDAvTVZYIDEwaS9JWFkgRFYgTTIgdmlkZW8gY2FtZXJhIHVzZXMgMzA5NSBpbiBQ
VFAgbW9kZTsgMzA5NiBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOk9wdHVyYSAz
MDAgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwOTYsIENBUF9T
VVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAg
IHsiQ2Fub246TVZYIDEwaSAobm9ybWFsIG1vZGUpIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTks
IDB4MzA5NiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCiAgICAgICAgeyJDYW5vbjpJWFkgRFYgTTIgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9D
TEFTU18xLCAgMHgwNEE5LCAweDMwOTYsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVN
QiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAgICAgLyogMHgzMDk5IGlzIHRoZSBFT1MgMzAw
RC9EaWdpdGFsIFJlYmVsIGluIFBUUCBtb2RlICovDQogICAgICAgIC8qIEE4MCBzZWVtcyB0byBz
aGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8NCiNpZiAwIC8qIHNlcnZlZCBi
ZXR0ZXIgYnkgUFRQMiBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGNhcHR1cmUgKi8NCiAgICAgICAg
eyJDYW5vbjpQb3dlclNob3QgQTgwIChub3JtYWwgbW9kZSkiLCAgIENBTk9OX0NMQVNTXzEsICAw
eDA0QTksIDB4MzA5QSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU
VVJFLCBOVUxMfSwNCiNlbmRpZg0KICAgICAgICAvKiAweDMwOWIgaXMgdGhlIFNEMTAgRGlnaXRh
bCBFTFBIL0RpZ2l0YWwgSVhVUyBpL0lYWSBEaWdpdGFsIEwNCiAgICAgICAgICAgaW4gUFRQIG1v
ZGU7IHdpbGwgaXQgd29yayBpbiBDYW5vbiBtb2RlPyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2Vy
U2hvdCBTRDEwIERpZ2l0YWwgRUxQSCAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU18xLCAg
MHgwNEE5LCAweDMwOUIsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElD
VFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIGkgKG5vcm1hbCBtb2Rl
KSIsICBDQU5PTl9DTEFTU18xLCAgMHgwNEE5LCAweDMwOUIsIENBUF9TVVAsIFNMX01PVklFX0xB
UkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246UG93ZXJT
aG90IElYWSBEaWdpdGFsIEwgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0QTks
IDB4MzA5QiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBO
VUxMfSwNCg0KI2lmIDANCi8qIHJlcG9ydGVkbHkgbm90IHdvcmtpbmcgLi4uIGNvbW1lbnQgb3V0
IGZvciBub3cgLSBNYXJjdXMgKi8NCiAgICAgICAgLyogUHJvZHVjdCBJRCBzaGFyZWQgYmV0d2Vl
biBQVFAgYW5kIENhbm9uIG1vZGUgKi8NCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzEgSVMg
KG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzA5QywgQ0FQX1NVUCwg
U0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0KDQog
ICAgICAgIC8qIDMwYTAgaXMgWlI5MC9NVjc1MGkgY2FtY29yZGVyICovDQoNCiAgICAgICAgLyog
MzBhOCBpcyBFbHVyYSA2MEUvTVZYMjAwaSBjYW1jb3JkZXIgaW4gUFRQIG1vZGU7IGRvbid0IGtu
b3cNCiAgICAgICAgICogaWYgaXQgd2lsbCByZXNwb25kIGluIG5hdGl2ZSBtb2RlIGF0IHRoZSBz
YW1lIHByb2R1Y3QNCiAgICAgICAgICogSUQuICovDQogICAgICAgIC8qIDMwYTkgaXMgT3B0dXJh
IDQwL01WWDI1aSBjYW1jb3JkZXIsIHJlcG9ydGVkIHdvcmtpbmcgYXQNCiAgICAgICAgICogPGh0
dHA6Ly93d3cucWJpay5jaC91c2IvZGV2aWNlcy9zaG93ZGVzY3IucGhwP2lkPTI3MDA+LiBTZWVt
cw0KICAgICAgICAgKiB0byBzaGFyZSBJRCB3aXRoIFBUUC4gKi8NCiAgICAgICAgeyJDYW5vbjpP
cHR1cmEgNDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBBOSwg
Q0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAg
ICAgICAgeyJDYW5vbjpNVlgyNWkgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzEsICAweDA0
QTksIDB4MzBBOSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJF
LCBOVUxMfSwNCg0KI2lmIDAgLyogSGFuZGxlZCBpbiBwdHAyLCBiZXR0ZXIgZm9yIGNhcHR1cmUg
ZXRjLiAtTWFyY3VzICovDQogICAgICAgIC8qIEFub3RoZXIgYmxvY2sgb2YgY2FtZXJhcyB0aGF0
IHNoYXJlIHRoZSBJRCBmb3IgUFRQIGFuZCBDYW5vbiBtb2RlcyAqLw0KICAgICAgICB7IkNhbm9u
OlBvd2VyU2hvdCBTNzAgKG5vcm1hbCBtb2RlKSIsICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwg
MHgzMGIxLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V
TEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNjAgKG5vcm1hbCBtb2RlKSIsICAgQ0FO
T05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMGIyLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xf
VEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBHNiAo
bm9ybWFsIG1vZGUpIiwgICAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwgMHgzMGIzLCBDQVBfU1VQ
LCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7
IkNhbm9uOkRpZ2l0YWwgSVhVUyA1MDAgKG5vcm1hbCBtb2RlKSIsQ0FOT05fQ0xBU1NfNSwgIDB4
MDRBOSwgMHgzMGI0LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RV
UkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTNTAwIERpZ2l0YWwgRUxQSCAo
bm9ybWFsIG1vZGUpIixDQU5PTl9DTEFTU181LCAgICAgICAweDA0QTksIDB4MzBiNCwgQ0FQX1NV
UCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAg
eyJDYW5vbjpJWFkgRGlnaXRhbCA1MDAgKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAw
eDA0QTksIDB4MzBiNCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNU
VVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTc1IiwgICAgICAgICAgICAg
ICAgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBiNSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFS
R0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNo
b3QgU0QxMTAgRGlnaXRhbCBFTFBIIiwgIENBTk9OX0NMQVNTXzEsICAweDA0QTksIDB4MzBiNiwg
Q0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAg
ICAgICAgeyJDYW5vbjpEaWdpdGFsIElYVVMgSUlzIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNT
XzEsICAweDA0QTksIDB4MzBiNiwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBT
TF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTQwMCIsICAgICAg
ICAgICAgICAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBiNywgQ0FQX1NVUCwgU0xfTU9W
SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQ
b3dlclNob3QgQTMxMCIsICAgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4
MzBiOCwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxM
fSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgQTg1IChub3JtYWwgbW9kZSkiLCAgIENBTk9O
X0NMQVNTXzUsICAweDA0QTksIDB4MzBiOSwgQ0FQX1NVUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RI
VU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpQb3dlclNob3QgUzQxMCBE
aWdpdGFsIEVMUEggKG5vcm1hbCBtb2RlKSIsIENBTk9OX0NMQVNTXzUsICAgICAgMHgwNEE5LCAw
eDMwYmEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVM
TH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIDQzMCAobm9ybWFsIG1vZGUpIixDQU5P
Tl9DTEFTU181LCAgMHgwNEE5LCAweDMwYmEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9U
SFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246SVhZIERpZ2l0YWwgNDMw
IChub3JtYWwgbW9kZSkiLCBDQU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYmEsIENBUF9TVVAs
IFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsi
Q2Fub246UG93ZXJTaG90IEE5NSAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU181LCAgMHgw
NEE5LCAweDMwYmIsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVS
RSwgTlVMTH0sDQoNCiAgICAgICAgLyogMHgzMGJmIGlzIFBvd2VyU2hvdCBTRDMwMC9EaWdpdGFs
IElYVVMgNDAgaW4gUFRQIG1vZGUgKi8NCiNlbmRpZg0KICAgICAgICAvKiBBbm90aGVyIGJsb2Nr
IG9mIGNhbWVyYXMgdGhhdCBzaGFyZSB0aGUgSUQgZm9yIFBUUCBhbmQgQ2Fub24gbW9kZXMgKi8N
CgkvKiBrZWVwIHRoZXNlIGVuYWJsZWQgYXMgdGhlIFBUUCB2YXJpYW50IGRvZXMgbm90IHN1cHBv
cnQgY2FwdHVyZSAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTRDIwMCAobm9ybWFsIG1v
ZGUpIiwgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGMwLCBDQVBfU1VQLCBTTF9NT1ZJRV9M
QVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkRpZ2l0
YWwgSVhVUyAzMCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGMw
LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K
ICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDQwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xB
U1NfNiwgIDB4MDRBOSwgMHgzMGMwLCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIs
IFNMX1BJQ1RVUkUsIE5VTEx9LA0KDQojaWYgMA0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBT
RDQwMCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMGMxLCBDQVBf
Tk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAg
ICB7IkNhbm9uOkRpZ2l0YWwgSVhVUyA1MCAobm9ybWFsIG1vZGUpIiwgQ0FOT05fQ0xBU1NfNCwg
IDB4MDRBOSwgMHgzMGMxLCBDQVBfTk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJ
Q1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDU1IChub3JtYWwgbW9k
ZSkiLCAgQ0FOT05fQ0xBU1NfNCwgIDB4MDRBOSwgMHgzMGMxLCBDQVBfTk9OLCBTTF9NT1ZJRV9M
QVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOlBvd2Vy
U2hvdCBBNTEwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMGMy
LCBDQVBfU1VQLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0K
ICAgICAgICAvKiBFbmQgb2Ygc2hhcmVkIElEJ3MgKi8NCiNlbmRpZg0KDQogICAgICAgIHsiQ2Fu
b246UG93ZXJTaG90IFNEMjAgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU181LCAgMHgwNEE5
LCAweDMwYzQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg
TlVMTH0sDQogICAgICAgIHsiQ2Fub246RGlnaXRhbCBJWFVTIGk1IChub3JtYWwgbW9kZSkiLCBD
QU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYzQsIENBUF9TVVAsIFNMX01PVklFX1NNQUxMLCBT
TF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIHsiQ2Fub246SVhZIERpZ2l0YWwg
TDIgKG5vcm1hbCBtb2RlKSIsICBDQU5PTl9DTEFTU181LCAgMHgwNEE5LCAweDMwYzQsIENBUF9T
VVAsIFNMX01PVklFX1NNQUxMLCBTTF9USFVNQiwgU0xfUElDVFVSRSwgTlVMTH0sDQoNCiAgICAg
ICAgLyogSXMgMHgzMGU5IEVPUyAxRCBNYXJrIElJIGluIENhbm9uIG1vZGU/ICovDQogICAgICAg
IC8qIDB4MzBlYSBpcyBFT1MgMUQgTWFyayBJSSBpbiBQVFAgbW9kZSAqLw0KDQogICAgICAgIHsi
Q2Fub246RU9TIDIwRCAobm9ybWFsIG1vZGUpIiwgICAgICAgICBDQU5PTl9DTEFTU182LCAgMHgw
NEE5LCAweDMwZWIsIENBUF9FWFAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQl9DUjIsIFNMX1BJ
Q1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMwZWMgaXMgRU9TIDIwRCBpbiBQVFAgbW9kZSAq
Lw0KDQogICAgICAgIHsiQ2Fub246RU9TIDMwRCAoUFRQIG1vZGUpIiwgICAgICAgICBDQU5PTl9D
TEFTU182LCAgMHgwNEE5LCAweDMxMTMsIENBUF9FWFAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVN
Ql9DUjIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICAvKiAweDMxMTMgaXMgRU9TIDMwRCBp
biBQVFAgbW9kZSAqLw0KDQoNCiAgICAgICAgeyJDYW5vbjpFT1MgMzUwRCAobm9ybWFsIG1vZGUp
IiwgICAgICAgICAgICAgICAgQ0FOT05fQ0xBU1NfNiwgIDB4MDRBOSwgMHgzMGVlLCBDQVBfRVhQ
LCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUJfQ1IyLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAg
ICAgeyJDYW5vbjpEaWdpdGFsIFJlYmVsIFhUIChub3JtYWwgbW9kZSkiLCAgICAgICAgICAgICAg
ICBDQU5PTl9DTEFTU182LCAgMHgwNEE5LCAweDMwZWUsIENBUF9FWFAsIFNMX01PVklFX0xBUkdF
LCBTTF9USFVNQl9DUjIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KICAgICAgICB7IkNhbm9uOkVPUyBL
aXNzIERpZ2l0YWwgTiAobm9ybWFsIG1vZGUpIiwgICAgICAgICAgICAgIENBTk9OX0NMQVNTXzYs
ICAweDA0QTksIDB4MzBlZSwgQ0FQX0VYUCwgU0xfTU9WSUVfTEFSR0UsIFNMX1RIVU1CX0NSMiwg
U0xfUElDVFVSRSwgTlVMTH0sDQogICAgICAgIC8qIDMwZWYgaXMgRU9TIDM1MEQvRGlnaXRhbCBS
ZWJlbCBYVC9FT1MgS2lzcyBEaWdpdGFsIE4gaW4gUFRQIG1vZGUuICovDQogICAgICAgIHsiQ2Fu
b246RU9TIDVEIChub3JtYWwgbW9kZSkiLCAgICAgICAgICBDQU5PTl9DTEFTU182LCAgMHgwNEE5
LCAweDMxMDEsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg
TlVMTH0sDQoNCiNpZiAwDQovKiByZXBvcnRlZGx5IG5vdCB3b3JraW5nIC4uLiBjb21tZW50IG91
dCBmb3Igbm93IC0gTWFyY3VzICovDQogICAgICAgIHsiQ2Fub246UG93ZXJTaG90IFMyIElTIChu
b3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfMSwgIDB4MDRBOSwgMHgzMGYwLCBDQVBfRVhQLCBT
TF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5VTEx9LA0KI2VuZGlmDQoNCiNp
ZiAwDQovKiByZXBvcnRlZGx5IG5vdCB3b3JraW5nIGVpdGhlci4gZmFpbGluZyB3aXRoIGxvY2sg
a2V5cyAtIE1hcmN1cyAqLw0KICAgICAgICB7IkNhbm9uOlBvd2VyU2hvdCBTRDUwMCAobm9ybWFs
IG1vZGUpIiwgIENBTk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBmMiwgQ0FQX05PTiwgU0xfTU9W
SUVfTEFSR0UsIFNMX1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiAgICAgICAgeyJDYW5vbjpE
aWdpdGFsIElYVVMgNzAwIChub3JtYWwgbW9kZSkiLCAgQ0FOT05fQ0xBU1NfNSwgIDB4MDRBOSwg
MHgzMGYyLCBDQVBfTk9OLCBTTF9NT1ZJRV9MQVJHRSwgU0xfVEhVTUIsIFNMX1BJQ1RVUkUsIE5V
TEx9LA0KICAgICAgICB7IkNhbm9uOklYWSBEaWdpdGFsIDYwMCAobm9ybWFsIG1vZGUpIiwgIENB
Tk9OX0NMQVNTXzUsICAweDA0QTksIDB4MzBmMiwgQ0FQX05PTiwgU0xfTU9WSUVfTEFSR0UsIFNM
X1RIVU1CLCBTTF9QSUNUVVJFLCBOVUxMfSwNCiNlbmRpZg0KDQoJLyogSSB3YXMgbm90IGFibGUg
dG8gbWFrZSBBNjIwIHdvcmsgd2l0aCBDTEFTUyA1LCAxIGFuZCA2LiAtTWFyY3VzICovDQoNCiNp
ZiAwDQoJLyogYWxzbyByZXBvcnRlZCBhcyBub3Qgd29ya2luZy4gKi8NCiAgICAgICAgeyJDYW5v
bjpQb3dlclNob3QgQTYxMCAobm9ybWFsIG1vZGUpIiwgICBDQU5PTl9DTEFTU181LCAgMHgwNEE5
LCAweDMwZmQsIENBUF9TVVAsIFNMX01PVklFX0xBUkdFLCBTTF9USFVNQiwgU0xfUElDVFVSRSwg
TlVMTH0sDQojZW5kaWYNCiAgICAgICAge05VTEwsIENBTk9OX0NMQVNTX05PTkUsIDB4MDAwMCwg
MHgwMDAwLCBDQVBfTk9OLCAwVSwgMFUsIDBVLCBOVUxMfQ0KICAgICAgICAvKiAqSU5ERU5ULU9O
KiAqLw0KfTsNCg0KI3VuZGVmIE5PX1VTQg0KI3VuZGVmIFNMX01PVklFX0xBUkdFDQojdW5kZWYg
U0xfTU9WSUVfU01BTEwNCiN1bmRlZiBTTF9QSUNUVVJFDQojdW5kZWYgUzFNDQojdW5kZWYgU0xf
VEhVTUINCg0KI2lmbmRlZiBIQVZFX1RNX0dNVE9GRg0KLyogcmVxdWlyZWQgZm9yIHRpbWUgY29u
dmVyc2lvbnMgaW4gY2Fub25faW50X3NldF90aW1lKCkgKi8NCmV4dGVybiBsb25nIGludCB0aW1l
em9uZTsNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBNZXRob2RzDQogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLw0KDQoNCi8qIFNpbXVsYXRlIGNhcGFiaWxpdGllcw0KICoNCiAqIElmIHlvdSBuZWVk
IHRvIGNoYW5nZSB0aGVzZSBmb3IgYSBjZXJ0YWluIGNhbWVyYSwgaXQgaXMgdGltZSB0bw0KICog
aW50cm9kdWNlIGFuZCB1c2UgZ2VuZXJhbCBjYXBhYmlsaXRpZXMgYXMgcmVwbGFjZW1lbnQuDQog
Ki8NCg0KI2RlZmluZSBleHRyYV9maWxlX2Zvcl90aHVtYl9vZl9qcGVnIEZBTFNFDQojZGVmaW5l
IGV4dHJhX2ZpbGVfZm9yX3RodW1iX29mX2NydyBUUlVFDQojZGVmaW5lIGV4dHJhX2ZpbGVfZm9y
X3RodW1iX29mX2NyMiBGQUxTRQ0KDQojaWZkZWYgX19HTlVDX18NCiMgZGVmaW5lIF9fdW51c2Vk
X18gX19hdHRyaWJ1dGVfXygodW51c2VkKSkNCiNlbHNlDQojIGRlZmluZSBfX3VudXNlZF9fDQoj
ZW5kaWYNCg0Kc3RhdGljIGludCBjYW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zIChDYW1lcmEg
KmNhbWVyYSwgR1BDb250ZXh0ICpjb250ZXh0KTsNCg0Kc3RhdGljIGNvbnN0IGNoYXIgKiBjYW5v
bjJncGhvdG9wYXRoIChDYW1lcmEgX191bnVzZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpwYXRo
KTsNCg0KDQovKiEgXGJyaWVmIFJldHVybiBmaWxlbmFtZSB3aXRoIGV4dGVuc2lvbiByZXBsYWNl
ZA0KICoNCiAqIFdlIGp1c3QgcmVwbGFjZSBmaWxlIGVuZGluZyBieSAuVEhNIGFuZCBhc3N1bWUg
dGhpcyBpcyB0aGUNCiAqIG5hbWUgb2YgdGhlIHRodW1ibmFpbCBmaWxlLg0KICoNCiAqIENBVVRJ
T04hDQogKiAgLSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBuZXdleHQgcGFy
YW1ldGVyLg0KICogIC0gVGhpcyBmdW5jdGlvbiBpcyBOT1QgdGhyZWFkc2FmZSENCiAqLw0KDQpz
dGF0aWMgY29uc3QgY2hhciAqDQpyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lvbihjb25zdCBjaGFy
ICpmaWxlbmFtZSwgY29uc3QgY2hhciBfX3VudXNlZF9fICpuZXdleHQpDQp7DQogICAgICAgIGNo
YXIgKnA7DQogICAgICAgIHN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsNCg0KICAgICAgICAvKiBXZSBq
dXN0IHJlcGxhY2UgZmlsZSBlbmRpbmcgYnkgLlRITSBhbmQgYXNzdW1lIHRoaXMgaXMgdGhlDQog
ICAgICAgICAqIG5hbWUgb2YgdGhlIHRodW1ibmFpbCBmaWxlLg0KICAgICAgICAgKi8NCiAgICAg
ICAgaWYgKHNpemVvZihidWYpIDwgc3RybGVuIChmaWxlbmFtZSkgKyAxKSB7DQogICAgICAgICAg
ICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lvbjogQnVmZmVyIHRvbyBz
bWFsbCBpbiAlcyBsaW5lICVpLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9f
LCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgIH0NCiAg
ICAgICAgc3RybmNweSAoYnVmLCBmaWxlbmFtZSwgc2l6ZW9mIChidWYpIC0gMSk7DQogICAgICAg
IGlmICgocCA9IHN0cnJjaHIgKGJ1ZiwgJy4nKSkgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAg
IEdQX0RFQlVHICgicmVwbGFjZV9maWxlbmFtZV9leHRlbnNpb246IE5vICcuJyBmb3VuZCBpbiBm
aWxlbmFtZSAnJXMnICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluICVzIGxpbmUgJWku
IiwgZmlsZW5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpKHAgLSBidWYpIDwg
c2l6ZW9mIChidWYpIC0gNCkgew0KICAgICAgICAgICAgICAgIHN0cm5jcHkgKHAsICIuVEhNIiwg
NCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVuc2lv
bjogTmV3IG5hbWUgZm9yICclcycgaXMgJyVzJyIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGVuYW1lLCBidWYpOw0KICAgICAgICAgICAgICAgIHJldHVybiBidWY7DQogICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJyZXBsYWNlX2ZpbGVuYW1lX2V4dGVu
c2lvbjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV3IG5hbWUgZm9yIGZpbGVuYW1l
ICclcycgZG9lc24ndCBmaXQgaW4gJXMgbGluZSAlaS4iLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlbmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICByZXR1
cm4gTlVMTDsNCiAgICAgICAgfQ0KfQ0KDQoNCi8qISBcYnJpZWYgUmV0dXJuIGZpbGVuYW1lIHdp
dGggZXh0ZW5zaW9uIHJlcGxhY2VkDQogKg0KICogV2UganVzdCByZXBsYWNlIGZpbGUgZW5kaW5n
IGJ5IC5XQVYsIHRoZSBmaXJzdCB0aHJlZQ0KICogbGV0dGVycyBieSBTTkQgYW5kIGFzc3VtZSB0
aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdWRpbyBmaWxlLg0KICoNCiAqIENBVVRJT04hDQogKiAg
LSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNvbnNpZGVyIHRoZSBuZXdleHQgcGFyYW1ldGVyLg0K
ICogIC0gVGhpcyBmdW5jdGlvbiBpcyBOT1QgdGhyZWFkc2FmZSENCiAqLw0KDQpzdGF0aWMgY2hh
ciAqDQpmaWxlbmFtZV90b19hdWRpbyhjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciBf
X3VudXNlZF9fICpuZXdleHQpDQp7DQogICAgICAgIGNoYXIgKnA7DQogICAgICAgIHN0YXRpYyBj
aGFyIGJ1ZlsxMDI0XTsNCg0KICAgICAgICBpZiAoc2l6ZW9mKGJ1ZikgPCBzdHJsZW4gKGZpbGVu
YW1lKSArIDEpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImZpbGVuYW1lX3RvX2F1ZGlv
OiBCdWZmZXIgdG9vIHNtYWxsIGluICVzIGxpbmUgJWkuIiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsN
CiAgICAgICAgfQ0KICAgICAgICBzdHJuY3B5IChidWYsIGZpbGVuYW1lLCBzaXplb2YgKGJ1Zikg
LSAxKTsNCiAgICAgICAgaWYgKChwID0gc3RycmNociAoYnVmLCAnXycpKSA9PSBOVUxMKSB7DQog
ICAgICAgICAgICAgICAgR1BfREVCVUcgKCJmaWxlbmFtZV90b19hdWRpbzogTm8gJy4nIGZvdW5k
IGluIGZpbGVuYW1lICclcycgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gJXMgbGlu
ZSAlaS4iLCBmaWxlbmFtZSwgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoKHAgLSBidWYpID4gMykgew0KICAg
ICAgICAgICAgICAgIHAgLT0gMzsNCiAgICAgICAgICAgICAgICBwWzBdID0gJ1MnOw0KICAgICAg
ICAgICAgICAgIHBbMV0gPSAnTic7DQogICAgICAgICAgICAgICAgcFsyXSA9ICdEJzsNCiAgICAg
ICAgfQ0KICAgICAgICBpZiAoKHAgPSBzdHJyY2hyIChidWYsICcuJykpID09IE5VTEwpIHsNCiAg
ICAgICAgICAgICAgICBHUF9ERUJVRyAoImZpbGVuYW1lX3RvX2F1ZGlvOiBObyAnLicgZm91bmQg
aW4gZmlsZW5hbWUgJyVzJyAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJpbiAlcyBsaW5l
ICVpLiIsIGZpbGVuYW1lLCBfX0ZJTEVfXywgX19MSU5FX18pOw0KICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOw0KICAgICAgICB9DQogICAgICAgIGlmICgodW5zaWduZWQgaW50KShwIC0gYnVm
KSA8IHNpemVvZiAoYnVmKSAtIDQpIHsNCiAgICAgICAgICAgICAgICBzdHJuY3B5IChwLCAiLldB
ViIsIDQpOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiZmlsZW5hbWVfdG9fYXVkaW86IE5l
dyBuYW1lIGZvciAnJXMnIGlzICclcyciLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl
bmFtZSwgYnVmKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYnVmOw0KICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiZmlsZW5hbWVfdG9fYXVkaW86ICINCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIk5ldyBuYW1lIGZvciBmaWxlbmFtZSAnJXMnIGRvZXNuJ3Qg
Zml0IGluICVzIGxpbmUgJWkuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUs
IF9fRklMRV9fLCBfX0xJTkVfXyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAg
ICAgIH0NCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9uYW1lOg0KICogQGNh
bWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBmaWxlbmFtZTogdGhlIGZpbGUgZm9yIHdoaWNo
IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgYXVkaW8gYW5ub3RhdGlvbg0KICoNCiAqIFRoZSBpZGVu
dGlmaWVyIHJldHVybmVkIGlzDQogKiAgYSkgTlVMTCBpZiBubyBhdWRpbyBmaWxlIGV4aXN0cyBm
b3IgdGhpcyBmaWxlIG9yIGFuIGludGVybmFsIGVycm9yIG9jY3VycmVkDQogKiAgYikgcG9pbnRl
ciB0byBzdHJpbmcgd2l0aCBmaWxlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWls
DQogKiAgYykgcG9pbnRlciB0byBmaWxlbmFtZSBpbiBjYXNlIGZpbGVuYW1lIGlzIGEgdGh1bWJu
YWlsIGl0c2VsZg0KICoNCiAqIFJldHVybnM6IGlkZW50aWZpZXIgZm9yIGNvcnJlc3BvbmRpbmcg
dGh1bWJuYWlsDQogKi8NCg0KY29uc3QgY2hhciAqDQpjYW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9u
YW1lIChDYW1lcmEgX191bnVzZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpmaWxlbmFtZSkNCnsN
CiAgICAgICAgY2hhciAqcmVzdWx0Ow0KDQogICAgICAgIC8qIFdlIHVzZSB0aGUgYXVkaW8gZmls
ZSBpdHNlbGYgYXMgdGhlIGF1ZGlvIGZpbGUuIEluIHNob3J0Og0KICAgICAgICAgKiBhdWRpb2Zp
bGUgPSBhdWRpb2ZpbGUoYXVkaW9maWxlKQ0KICAgICAgICAgKi8NCiAgICAgICAgaWYgKGlzX2F1
ZGlvIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9m
aWxlbmFtZTJhdWRpb25hbWU6IFwiJXNcIiBJUyBhbiBhdWRpbyBmaWxlIiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFt
ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFRoZXJlIGFyZSBvbmx5IGF1ZGlvIGZpbGVzIGZv
ciBpbWFnZXMgYW5kIG1vdmllcyAqLw0KICAgICAgICBpZiAoIShpc19tb3ZpZSAoZmlsZW5hbWUp
IHx8IGlzX2ltYWdlIChmaWxlbmFtZSkpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj
YW5vbl9pbnRfZmlsZW5hbWUyYXVkaW9uYW1lOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICJcIiVzXCIgaXMgbmVpdGhlciBtb3ZpZSBub3IgaW1hZ2UgLT4gbm8gYXVkaW8gZmlsZSIsIGZp
bGVuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAg
ICAgIHJlc3VsdCA9IGZpbGVuYW1lX3RvX2F1ZGlvIChmaWxlbmFtZSwgIi5XQVYiKTsNCg0KICAg
ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJhdWRpb25hbWU6IGF1ZGlvIGZvciBm
aWxlIFwiJXNcIiBpcyBleHRlcm5hbDogXCIlc1wiIiwNCiAgICAgICAgICAgICAgICAgIGZpbGVu
YW1lLCByZXN1bHQpOw0KDQogICAgICAgIHJldHVybiByZXN1bHQ7DQp9DQoNCi8qKg0KICogY2Fu
b25faW50X2ZpbGVuYW1lMnRodW1ibmFtZToNCiAqIEBjYW1lcmE6IENhbWVyYSB0byB3b3JrIG9u
DQogKiBAZmlsZW5hbWU6IHRoZSBmaWxlIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgdGh1bWJuYWls
IG9mDQogKg0KICogVGhlIGlkZW50aWZpZXIgcmV0dXJuZWQgaXMNCiAqICBhKSBOVUxMIGlmIG5v
IHRodW1ibmFpbCBleGlzdHMgZm9yIHRoaXMgZmlsZSBvciBhbiBpbnRlcm5hbCBlcnJvciBvY2N1
cnJlZA0KICogIGIpIHBvaW50ZXIgdG8gZW1wdHkgc3RyaW5nIGlmIHRodW1ibmFpbCBpcyBjb250
YWluZWQgaW4gdGhlIGZpbGUgaXRzZWxmDQogKiAgYykgcG9pbnRlciB0byBzdHJpbmcgd2l0aCBm
aWxlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWlsDQogKiAgZCkgcG9pbnRlciB0
byBmaWxlbmFtZSBpbiBjYXNlIGZpbGVuYW1lIGlzIGEgdGh1bWJuYWlsIGl0c2VsZg0KICoNCiAq
IFJldHVybnM6IGlkZW50aWZpZXIgZm9yIGNvcnJlc3BvbmRpbmcgdGh1bWJuYWlsDQogKi8NCg0K
Y29uc3QgY2hhciAqDQpjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lIChDYW1lcmEgX191bnVz
ZWRfXyAqY2FtZXJhLCBjb25zdCBjaGFyICpmaWxlbmFtZSkNCnsNCiAgICAgICAgc3RhdGljIGNo
YXIgKm51bGxzdHJpbmcgPSAiIjsNCg0KICAgICAgICAvKiBGaXJzdCBoYW5kbGUgY2FzZXMgd2hl
cmUgd2Ugc2hvdWxkbid0IHRyeSB0byBnZXQgZXh0cmEgLlRITQ0KICAgICAgICAgKiBmaWxlIGJ1
dCB1c2UgdGhlIHNwZWNpYWwgZ2V0X3RodW1ibmFpbF9vZl94eHggZnVuY3Rpb24uDQogICAgICAg
ICAqLw0KICAgICAgICBpZiAoIWV4dHJhX2ZpbGVfZm9yX3RodW1iX29mX2pwZWcgJiYgaXNfanBl
ZyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZmls
ZW5hbWUydGh1bWJuYW1lOiB0aHVtYm5haWwgZm9yIEpQRUcgXCIlc1wiIGlzIGludGVybmFsIiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsc3RyaW5nOw0KICAgICAgICB9DQogICAgICAgIGlmICghZXh0cmFfZmlsZV9mb3Jf
dGh1bWJfb2ZfY3J3ICYmIGlzX2NydyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1Bf
REVCVUcgKCJjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lOiB0aHVtYm5haWwgZm9yIENSVyBc
IiVzXCIgaXMgaW50ZXJuYWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7
DQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGxzdHJpbmc7DQogICAgICAgIH0NCiAgICAgICAg
aWYgKCFleHRyYV9maWxlX2Zvcl90aHVtYl9vZl9jcjIgJiYgaXNfY3IyIChmaWxlbmFtZSkpIHsN
CiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5hbWU6
IHRodW1ibmFpbCBmb3IgQ1IyIFwiJXNcIiBpcyBpbnRlcm5hbCIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbGVuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHN0cmluZzsN
CiAgICAgICAgfQ0KDQogICAgICAgIC8qIFdlIHVzZSB0aGUgdGh1bWJuYWlsIGZpbGUgaXRzZWxm
IGFzIHRoZSB0aHVtYm5haWwgb2YgdGhlDQogICAgICAgICAqIHRodW1ibmFpbCBmaWxlLiBJbiBz
aG9ydCB0aHVtYmZpbGUgPSB0aHVtYm5haWwodGh1bWJmaWxlKQ0KICAgICAgICAgKi8NCiAgICAg
ICAgaWYgKGlzX3RodW1ibmFpbCAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgR1BfREVC
VUcgKCJjYW5vbl9pbnRfZmlsZW5hbWUydGh1bWJuYW1lOiBcIiVzXCIgSVMgYSB0aHVtYm5haWwg
ZmlsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsNCiAgICAgICAgICAg
ICAgICByZXR1cm4gZmlsZW5hbWU7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBUaGVyZSBhcmUg
b25seSB0aHVtYm5haWxzIGZvciBpbWFnZXMgYW5kIG1vdmllcyAqLw0KICAgICAgICBpZiAoIWlz
X21vdmllIChmaWxlbmFtZSkgJiYgIWlzX2ltYWdlIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAg
ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5hbWU6ICINCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlwiJXNcIiBpcyBuZWl0aGVyIG1vdmllIG5vciBpbWFnZSAtPiBu
byB0aHVtYm5haWwiLCBmaWxlbmFtZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQog
ICAgICAgIH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9maWxlbmFtZTJ0aHVtYm5h
bWU6IHRodW1ibmFpbCBmb3IgZmlsZSBcIiVzXCIgaXMgZXh0ZXJuYWwiLA0KICAgICAgICAgICAg
ICAgICAgZmlsZW5hbWUpOw0KDQogICAgICAgIC8qIFdlIGp1c3QgcmVwbGFjZSBmaWxlIGVuZGlu
ZyBieSAuVEhNIGFuZCBhc3N1bWUgdGhpcyBpcyB0aGUNCiAgICAgICAgICogbmFtZSBvZiB0aGUg
dGh1bWJuYWlsIGZpbGUuDQogICAgICAgICAqLw0KICAgICAgICByZXR1cm4gcmVwbGFjZV9maWxl
bmFtZV9leHRlbnNpb24gKGZpbGVuYW1lLCAiLlRITSIpOw0KDQogICAgICAgIC8qIG5ldmVyIHJl
YWNoZWQgKi8NCiAgICAgICAgcmV0dXJuIE5VTEw7DQp9DQoNCi8qKg0KICogY2Fub25faW50X2Rp
cmVjdG9yeV9vcGVyYXRpb25zOg0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBw
YXRoOiBQYXRoIHRvIGRpcmVjdG9yeSBvbiB3aGljaCB0byBvcGVyYXRlDQogKiBAYWN0aW9uOiAj
Y2Fub25EaXJGdW5jdGlvbkNvZGUgKGVpdGhlciAjRElSX0NSRUFURSBvciAjRElSX1JFTU9WRSkN
CiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBDcmVhdGVz
IG9yIHJlbW92ZXMgYSBkaXJlY3RvcnkgaW4gY2FtZXJhIHN0b3JhZ2UuDQogKg0KICoNCiAqIFJl
dHVybnM6IGdwaG90bzIgc3RhdHVzIGNvZGUuICVHUF9PSyBvbiBzdWNjZXNzLCBvdGhlcndpc2Ug
c3RhdHVzDQogKiBmcm9tIGNhbm9uX3NlcmlhbF9lcnJvcigpLCAlR1BfRVJST1IgaWYgVVNCIG9w
ZXJhdGlvbiBmYWlscywNCiAqICVHUF9FUlJPUl9DT1JSVVBURURfREFUQSBpZiB0aGUgY2FtZXJh
IHJlc3BvbnNlIGlzIG5vdCB0aGUgZXhwZWN0ZWQNCiAqIGxlbmd0aCwgJUdQX0VSUk9SX0JBRF9Q
QVJBTUVURVJTIGlmIEBhY3Rpb24gaXMgaW52YWxpZC4NCiAqDQogKi8NCmludA0KY2Fub25faW50
X2RpcmVjdG9yeV9vcGVyYXRpb25zIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqcGF0aCwg
Y2Fub25EaXJGdW5jdGlvbkNvZGUgYWN0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsN
CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsNCiAgICAgICAgaW50IGNhbm9uX3VzYl9mdW5jdDsN
CiAgICAgICAgY2hhciB0eXBlOw0KDQogICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7DQogICAgICAg
ICAgICAgICAgY2FzZSBESVJfQ1JFQVRFOg0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IDB4NTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3VzYl9mdW5jdCA9IENBTk9OX1VT
Ql9GVU5DVElPTl9NS0RJUjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg
ICAgICAgICAgIGNhc2UgRElSX1JFTU9WRToNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSAweDY7DQogICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl91c2JfZnVuY3QgPSBDQU5PTl9V
U0JfRlVOQ1RJT05fUk1ESVI7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg
ICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj
YW5vbl9pbnRfZGlyZWN0b3J5X29wZXJhdGlvbnM6ICINCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQmFkIG9wZXJhdGlvbiBzcGVjaWZpZWQgOiAlaSIsIGFjdGlvbik7DQogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQkFEX1BBUkFNRVRFUlM7DQogICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVH
ICgiY2Fub25faW50X2RpcmVjdG9yeV9vcGVyYXRpb25zKCkgY2FsbGVkIHRvICVzIHRoZSBkaXJl
Y3RvcnkgJyVzJyIsDQogICAgICAgICAgICAgICAgICBjYW5vbl91c2JfZnVuY3QgPT0gQ0FOT05f
VVNCX0ZVTkNUSU9OX01LRElSID8gImNyZWF0ZSIgOiAicmVtb3ZlIiwgcGF0aCk7DQogICAgICAg
IHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9Q
T1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1
ZSAoY2FtZXJhLCBjYW5vbl91c2JfZnVuY3QsICZsZW4sICh1bnNpZ25lZCBjaGFyICopcGF0aCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu
IChwYXRoKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAp
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9PU19GQUlM
VVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz
ZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3Nl
cmlhbF9kaWFsb2d1ZSAoY2FtZXJhLCBjb250ZXh0LCB0eXBlLCAweDExLCAmbGVuLCBwYXRoLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJs
ZW4gKHBhdGgpICsgMSwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9
PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxf
ZXJyb3JfdHlwZSAoY2FtZXJhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVG
QVVMVA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAg
ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9kaXJlY3Rvcnlfb3BlcmF0aW9uczogVW5leHBlY3Rl
ZCBhbW91bnQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgZGF0YSByZXR1cm5lZCAo
ZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDB4NCwgbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4g
R1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobXNnWzBd
ICE9IDB4MDApIHsNCiAgICAgICAgICAgICAgICBpZiAoIGFjdGlvbiA9PSBESVJfQ1JFQVRFICkN
CiAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNv
dWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzLiIpLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aCApOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNvdWxkIG5vdCBy
ZW1vdmUgZGlyZWN0b3J5ICVzLiIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGF0aCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NBTUVSQV9F
UlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBj
YW5vbl9pbnRfaWRlbnRpZnlfY2FtZXJhOg0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3b3Jr
IHdpdGgNCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBH
ZXRzIHRoZSBjYW1lcmEgaWRlbnRpZmljYXRpb24gc3RyaW5nLCB1c3VhbGx5IHRoZSBvd25lciBu
YW1lLg0KICoNCiAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdGhlbiBzdG9yZWQgaW4gdGhlICJjYW1l
cmEiIHN0cnVjdHVyZSwgd2hpY2gNCiAqIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGZvciB0aGUgZHJp
dmVyLg0KICoNCiAqIFRoaXMgZnVuY3Rpb24gYWxzbyBnZXRzIHRoZSBmaXJtd2FyZSByZXZpc2lv
biBpbiB0aGUgY2FtZXJhIHN0cnVjdC4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNv
ZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2lkZW50aWZ5X2NhbWVyYSAoQ2FtZXJhICpjYW1l
cmEsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnOw0K
ICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50
X2lkZW50aWZ5X2NhbWVyYSgpIGNhbGxlZCIpOw0KDQogICAgICAgIHN3aXRjaCAoY2FtZXJhLT5w
b3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAgICAgICAg
ICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBDQU5PTl9V
U0JfRlVOQ1RJT05fSURFTlRJRllfQ0FNRVJBLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCBOVUxMLCAwKTsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAg
ICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxfZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwg
MHgwMSwgMHgxMiwgJmxlbiwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1z
ZyA9PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAo
ImNhbm9uX2ludF9pZGVudGlmeV9jYW1lcmE6IG1zZyBlcnJvciIpOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxfZXJyb3JfdHlwZSAoY2FtZXJhKTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQog
ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN
CiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAgIGlm
IChsZW4gIT0gMHg0Yykgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2lk
ZW50aWZ5X2NhbWVyYTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJuZWQgIg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSk7IGNvbnRpbnVpbmcuIiwgMHg0Yywg
bGVuKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFN0b3JlIHRoZXNlIHZhbHVlcyBpbiBvdXIg
ImNhbWVyYSIgc3RydWN0dXJlOiAqLw0KICAgICAgICBtZW1jcHkgKGNhbWVyYS0+cGwtPmZpcm13
cmV2LCAoY2hhciAqKSBtc2cgKyA4LCA0KTsNCiAgICAgICAgc3RybmNweSAoY2FtZXJhLT5wbC0+
aWRlbnQsIChjaGFyICopIG1zZyArIDEyLCAzMik7DQogICAgICAgIGlmICggY2FtZXJhLT5wbC0+
bWQtPm1vZGVsICE9IENBTk9OX0NMQVNTXzYgKQ0KICAgICAgICAgICAgICAgIHN0cm5jcHkgKGNh
bWVyYS0+cGwtPm93bmVyLCAoY2hhciAqKSBtc2cgKyA0NCwgMzIpOw0KICAgICAgICBlbHNlIHsN
CiAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIGdldCBvd25lciBleHBsaWNpdGx5LiAqLw0KICAg
ICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwgQ0FOT05fVVNC
X0ZVTkNUSU9OX0dFVF9PV05FUiwgJmxlbiwgTlVMTCwgMCApOw0KICAgICAgICAgICAgICAgIGlm
ICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9S
X09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgc3RybmNweSAoY2FtZXJhLT5wbC0+b3duZXIs
IChjaGFyICopIG1zZyArIDQsIDMyKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgR1BfREVCVUcg
KCJjYW5vbl9pbnRfaWRlbnRpZnlfY2FtZXJhOiBpZGVudCAnJXMnIG93bmVyICclcycsIGZpcm13
YXJlICVkLiVkLiVkLiVkIiwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmlkZW50LCBj
YW1lcmEtPnBsLT5vd25lciwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmZpcm13cmV2
WzNdLCBjYW1lcmEtPnBsLT5maXJtd3JldlsyXSwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+
cGwtPmZpcm13cmV2WzFdLCBjYW1lcmEtPnBsLT5maXJtd3JldlswXSApOw0KDQogICAgICAgIHJl
dHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X2JhdHRlcnk6DQogKiBAY2Ft
ZXJhOiB0aGUgY2FtZXJhIHRvIHdvcmsgb24NCiAqIEBwd3Jfc3RhdHVzOiBwb2ludGVyIHRvIGlu
dGVnZXIgZGV0ZXJtaW5pbmcgcG93ZXIgc3RhdHVzDQogKiBAcHdyX3NvdXJjZTogcG9pbnRlciB0
byBpbnRlZ2VyIGRldGVybWluaW5nIHBvd2VyIHNvdXJjZQ0KICogQGNvbnRleHQ6IGNvbnRleHQg
Zm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEdldHMgYmF0dGVyeSBzdGF0dXMuDQogKg0KICog
UmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9nZXRf
YmF0dGVyeSAoQ2FtZXJhICpjYW1lcmEsIGludCAqcHdyX3N0YXR1cywgaW50ICpwd3Jfc291cmNl
LCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAg
ICAgICAgdW5zaWduZWQgaW50IGxlbjsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9n
ZXRfYmF0dGVyeSgpIik7DQoNCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQtPnR5cGUpIHsN
CiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ld2VyIHByb3RvY29sIHVzZXMgYSBkaWZmZXJl
bnQgY29kZSwgYnV0IHdpdGggc2FtZSByZXNwb25zZS4gKi8NCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXNnID0gY2Fub25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9G
VU5DVElPTl9QT1dFUl9TVEFUVVNfMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuLCBOVUxMLCAwKTsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fu
b25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9GVU5DVElPTl9QT1dFUl9TVEFUVVMs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmxlbiwgTlVMTCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9PSBO
VUxMICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09T
X0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAg
ICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fu
b25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MGEsIDB4MTIsICZsZW4sIE5V
TEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5cGUgKGNhbWVy
YSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9PU19G
QUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0K
DQogICAgICAgIGlmIChsZW4gIT0gMHg4KSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj
YW5vbl9pbnRfZ2V0X2JhdHRlcnk6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAlaSBnb3QgJWkpIiwgMHg4LCBsZW4pOw0K
ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAg
fQ0KDQogICAgICAgIGlmIChwd3Jfc3RhdHVzKQ0KICAgICAgICAgICAgICAgICpwd3Jfc3RhdHVz
ID0gbXNnWzRdOw0KICAgICAgICBpZiAocHdyX3NvdXJjZSkNCiAgICAgICAgICAgICAgICAqcHdy
X3NvdXJjZSA9IG1zZ1s3XTsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfYmF0
dGVyeTogU3RhdHVzOiAlMDJ4ICglcykgLyBTb3VyY2U6ICUwMnggKCVzKSIsDQogICAgICAgICAg
ICAgICAgICBtc2dbNF0sIChtc2dbNF09PUNBTUVSQV9QT1dFUl9PSz8iT0siOiJCQUQiKSwNCiAg
ICAgICAgICAgICAgICAgIG1zZ1s3XSwgKG1zZ1s3XSZDQU1FUkFfTUFTS19CQVRURVJZPyJCQVRU
RVJZIjoiQUMiKSApOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5v
bl9pbnRfZ2V0X3BpY3R1cmVfYWJpbGl0aWVzOg0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3
b3JrIG9uDQogKiBAY29udGV4dDogdGhlIGNvbnRleHQgdG8gcHJpbnQgb24gZXJyb3INCiAqDQog
KiBSZWFkcyB0aGUgY2FtZXJhIHBpY3R1cmUgYWJpbGl0aWVzLCBidXQgaWdub3JlcyB0aGVtIGFz
IHdlIGRvbid0DQogKiAga25vdyBob3cgdG8gaW50ZXJwcmV0IHRoZSBkYXRhLg0KICogTk9URTog
Q29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHNvbWUgY2FtZXJhcw0KICogIGFuZCB3aWxs
IGNhdXNlIGFuIGVycm9yIGlmIGlzc3VlZC4gVGhlIGNhbWVyYXMgZm9yIHdoaWNoIHdlIGtub3cN
CiAqICBpdCB3b24ndCB3b3JrIGFyZQ0KICogIEVPUyBEMzANCiAqICBFT1MgRDYwDQogKiAgUG93
ZXJTaG90IFM0NS4NCiAqIE5PVEU6IFRoZSAiUHJvdG9jb2wiIGZpbGUgc2FpZCB0aGF0IGV4YWN0
bHkgMHgzODAgKDkwMCkgYnl0ZXMgd291bGQNCiAqICBiZSByZXR1cm5lZCwgYnV0IGl0J3MgYWN0
dWFsbHkgOTA0IGJ5dGVzIGZvciB0aGUgUG93ZXJTaG90IEcyLg0KICogIEkgZG9uJ3Qga25vdyB3
aGV0aGVyIHRoaXMgd2FzIGFuIGVycm9yIGluIHRoZSAiUHJvdG9jb2wiIGRvY3VtZW50DQogKiAg
b3IgaWYgZGlmZmVyZW50IG1vZGVscyByZXR1cm4gZGlmZmVyZW50IGxlbmd0aHMuIC1zd2VzdGlu
IDIwMDIuMDEuMDkNCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8N
CiNpZiAwIC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYnkgYW55Ym9keSAqLw0Kc3RhdGlj
IGludA0KY2Fub25faW50X2dldF9waWN0dXJlX2FiaWxpdGllcyAoQ2FtZXJhICpjYW1lcmEsIEdQ
Q29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnOw0KICAgICAg
ICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dldF9w
aWN0dXJlX2FiaWxpdGllcygpIik7DQoNCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQtPnR5
cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAgICAg
ICAgICAgICAgbXNnID0gY2Fub25fdXNiX2RpYWxvZ3VlIChjYW1lcmEsIENBTk9OX1VTQl9GVU5D
VElPTl9HRVRfUElDX0FCSUxJVElFUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmxlbiwgTlVMTCwgMCk7DQogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1zZyA9PSBOVUxMICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN
CiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAg
ICAgICAgbXNnID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MWYs
IDB4MTIsICZsZW4sIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0g
TlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vy
cm9yX3R5cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFV
TFQNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChsZW4gIT0gMHgzMzQpIHsNCiAgICAgICAgICAg
ICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcGljdHVyZV9hYmlsaXRpZXM6IFVuZXhwZWN0
ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3Rl
ZCAlaSBnb3QgJWkpIiwgMHgzMzQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VS
Uk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0K
fQ0KI2VuZGlmDQoNCi8qKg0KICogY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQNCiAqIEBw
YXlsb2FkOiB0byByZWNlaXZlIHBheWxvYWQgZm9yICVDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJP
TF9DQU1FUkENCiAqICAgY29tbWFuZA0KICogQHN1YmNtZDogU3ViY29tbWFuZCBmb3IgcmVtb3Rl
IGNhcHR1cmUgY29tbWFuZA0KICogICAoZS5nLiAlQ0FOT05fVVNCX0NPTlRST0xfU0hVVFRFUl9S
RUxFQVNFKQ0KICogQHdvcmQwOiAzMi1iaXQgZmlyc3Qgd29yZCBvZiBwYXlsb2FkIChmaXJzdCBj
b21tYW5kIHBhcmFtZXRlcikNCiAqIEB3b3JkMTogMzItYml0IHNlY29uZCB3b3JkIG9mIHBheWxv
YWQgKHNlY29uZCBjb21tYW5kIHBhcmFtZXRlcikNCiAqIEBkZXNjOiB0byByZWNlaXZlIHN0cmlu
ZyBkZXNjcmliaW5nIHN1YmNvbW1hbmQuDQogKg0KICogQnVpbGRzIHRoZSBwYXlsb2FkIGZvciBh
IHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQuIFRoZSBsZW5ndGggdmFyaWVzDQogKiBieSBjb21tYW5k
LCBzbyB0aGlzIGZ1bmN0aW9uIGEgYnVmZmVyIG9mIHRoZSBjb3JyZWN0IHNpemUgd2l0aCB0aGUN
CiAqIHByb3BlciBzdHVmZi4NCiAqDQogKiBSZXR1cm5zOiBzaXplIG9mIHBheWxvYWQgYnVmZmVy
LCBwYXlsb2FkIGRhdGEgaW4gQHBheWxvYWQsIGNvbW1hbmQNCiAqICBkZXNjcmlwdGlvbiBpbiBA
ZGVzYw0KICoNCiAqLw0Kc3RhdGljIGludA0KY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQg
KHVuc2lnbmVkIGNoYXIgKnBheWxvYWQsIHVuc2lnbmVkIGludCBzdWJjbWQsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmQwLCBpbnQgd29yZDEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqZGVzYykNCnsNCiAgICAgICAgaW50IGksIHBheXNpemU7
DQoNCiAgICAgICAgaSA9IDA7DQogICAgICAgIHdoaWxlIChjYW5vbl91c2JfY29udHJvbF9jbWRb
aV0ubnVtICE9IDApIHsNCiAgICAgICAgICAgICAgICBpZiAoY2Fub25fdXNiX2NvbnRyb2xfY21k
W2ldLm51bSA9PSBzdWJjbWQpDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg
ICAgICAgICAgICBpKys7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGNhbm9uX3VzYl9jb250cm9s
X2NtZFtpXS5udW0gPT0gMCkgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50
X3BhY2tfY29udHJvbF9zdWJjbWQ6IHVua25vd24gc3ViY29tbWFuZCAlZCIsIHN1YmNtZCk7DQog
ICAgICAgICAgICAgICAgc3ByaW50ZiAoZGVzYywgInVua25vd24gc3ViY29tbWFuZCIpOw0KICAg
ICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgc3ByaW50ZiAoZGVz
YywgIiVzIiwgY2Fub25fdXNiX2NvbnRyb2xfY21kW2ldLmRlc2NyaXB0aW9uKTsNCiAgICAgICAg
cGF5c2l6ZSA9IGNhbm9uX3VzYl9jb250cm9sX2NtZFtpXS5jbWRfbGVuZ3RoIC0gMHgxMDsNCiAg
ICAgICAgbWVtc2V0IChwYXlsb2FkLCAwLCBwYXlzaXplKTsNCiAgICAgICAgaWYgKHBheXNpemUg
Pj0gMHgwNCkgaHRvbGUzMmEocGF5bG9hZCwgICAgIGNhbm9uX3VzYl9jb250cm9sX2NtZFtpXS5z
dWJjbWQpOw0KICAgICAgICBpZiAocGF5c2l6ZSA+PSAweDA4KSBodG9sZTMyYShwYXlsb2FkKzB4
NCwgd29yZDApOw0KICAgICAgICBpZiAocGF5c2l6ZSA+PSAweDBjKSBodG9sZTMyYShwYXlsb2Fk
KzB4OCwgd29yZDEpOw0KDQogICAgICAgIHJldHVybiBwYXlzaXplOw0KfQ0KDQovKioNCiAqIGNh
bm9uX2ludF9kb19jb250cm9sX2NvbW1hbmQ6DQogKiBAY2FtZXJhOiBDYW1lcmEgdG8gd29yayBv
bg0KICogQHN1YmNtZDogU3ViY29tbWFuZCBmb3IgcmVtb3RlIGNhcHR1cmUgY29tbWFuZA0KICog
ICAoZS5nLiAlQ0FOT05fVVNCX0NPTlRST0xfSU5JVCkNCiAqIEBhOiAzMi1iaXQgZmlyc3Qgd29y
ZCBvZiBwYXlsb2FkIChmaXJzdCBjb21tYW5kIHBhcmFtZXRlcikNCiAqIEBiOiAzMi1iaXQgc2Vj
b25kIHdvcmQgb2YgcGF5bG9hZCAoc2Vjb25kIGNvbW1hbmQgcGFyYW1ldGVyKQ0KICoNCiAqIEV4
ZWN1dGVzIGEgbm9ybWFsIHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQgKGkuZS4gbm90DQogKiAlQ0FO
T05fVVNCX0NPTlRST0xfU0hVVFRFUl9SRUxFQVNFLCB3aGljaCBoYXMgaXRzIG93biBzcGVjaWFs
DQogKiBmdW5jdGlvbikuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBzdGF0dXMgY29kZQ0KICoN
CiAqLw0Kc3RhdGljIGludA0KY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoQ2FtZXJhICpj
YW1lcmEsIHVuc2lnbmVkIGludCBzdWJjbWQsIGludCBhLCBpbnQgYikNCnsNCiAgICAgICAgdW5z
aWduZWQgY2hhciBwYXlsb2FkWzB4NGNdOw0KICAgICAgICBjaGFyIGRlc2NbMTI4XTsNCiAgICAg
ICAgaW50IHBheWxvYWRsZW47DQogICAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuID0gMDsNCiAg
ICAgICAgdW5zaWduZWQgY2hhciAqbXNnID0gTlVMTDsNCg0KICAgICAgICBwYXlsb2FkbGVuID0g
Y2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQocGF5bG9hZCwgc3ViY21kLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSwgYiwgZGVzYyk7DQog
ICAgICAgIEdQX0RFQlVHKCIlcysrIHdpdGggJXgsICV4IiwgZGVzYywgYSwgYik7DQoNCiAgICAg
ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAg
ICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEgZGlmZmVyZW50IGNvZGUsIGJ1dCB3
aXRoIHNhbWUNCiAgICAgICAgICAgICAgICAgKiByZXNwb25zZS4gSXQgYWxzbyBuZWVkcyBhbiBl
eHRyYSB6ZXJvIGJ5dGUgYXQgdGhlDQogICAgICAgICAgICAgICAgICogZW5kLiAqLw0KICAgICAg
ICAgICAgICAgIHBheWxvYWRbcGF5bG9hZGxlbisrXSA9IDA7DQogICAgICAgICAgICAgICAgbXNn
ID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9GVU5DVElPTl9DT05UUk9MX0NBTUVSQV8yLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhbGVuLCBwYXls
b2FkLCBwYXlsb2FkbGVuICk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9DQU1F
UkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4s
IHBheWxvYWQsIHBheWxvYWRsZW4gKTsNCiAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAgJiYgZGF0
YWxlbiAhPSAweDFjKSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAgICAgICAgICAg
ICAgICBHUF9ERUJVRygiJXMgZGF0YWxlbj0leCIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzYywgZGF0YWxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRF
RF9EQVRBOw0KICAgICAgICB9DQogICAgICAgIG1zZyA9IE5VTEw7DQogICAgICAgIGRhdGFsZW4g
PSAwOw0KICAgICAgICBHUF9ERUJVRygiJXMtLSIsIGRlc2MpOw0KDQogICAgICAgIHJldHVybiBH
UF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZV9wYXlsb2Fk
Og0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsgb24NCiAqIEBzdWJjbWQ6IFN1YmNvbW1hbmQg
Zm9yIHJlbW90ZSBjYXB0dXJlIGNvbW1hbmQNCiAqICAgKGUuZy4gJUNBTk9OX1VTQl9DT05UUk9M
X0lOSVQpDQogKiBAcGF5bG9hZDogcG9pbnRlciB0byB0aGUgcGF5bG9hZCBkYXRhIGJ1ZmZlciB0
byBzZW5kIHRvIHRoZSBjYW1lcmENCiAqIEBwYXlsb2FkbGVuOiBsZW5ndGggb2YgdGhlIHBheWxv
YWQgdG8gc2VuZCB0byB0aGUgY2FtZXJhDQogKiBAcmVzcG9uc2VfaGFuZGxlOiBwb2ludGVyIHRv
IGEgcG9pbnRlciB3aGVyZSB0aGUgY2FtZXJhIHJlc3BvbnNlIGJ1ZmZlcg0KICogICBhZGRyZXNz
IHNob3VsZCBiZSBzdG9yZWQuDQogKiBAZGF0YWxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcmVzcG9u
c2UgZGF0YSBmcm9tIHRoZSBjYW1lcmENCiAqDQogKiBFeGVjdXRlcyBhIGNvbW1hbmQgd2l0aCBh
cmJpdHJhcnkgcGFyYW1ldGVyIGRhdGEgdGhhdCByZXR1cm5zIGRhdGENCiAqIGZyb20gdGhlIGNh
bWVyYSwgZS5nLiwgZ2V0IHJlbGVhc2UgcGFyYW1ldGVycywgc2V0IHJlbGVhc2UgcGFyYW1ldGVy
cy4NCiAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIGNhbGxlciBmdWxsIGNvbnRyb2wgb3Zl
ciBwYXlsb2FkIGRhdGEuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBzdGF0dXMgY29kZSwgY2Ft
ZXJhIHJlc3BvbnNlIGRhdGEgaW4gQHJlc3BvbnNlX2hhbmRsZSwNCiAqICAgICAgICAgIGxlbmd0
aCBvZiB0aGUgcmVzcG9uc2UgaW4gQGRhdGFsZW4NCiAqDQogKi8NCnN0YXRpYyBpbnQNCmNhbm9u
X2ludF9kb19jb250cm9sX2RpYWxvZ3VlX3BheWxvYWQgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25l
ZCBjaGFyICpwYXlsb2FkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHBheWxvYWRsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyICoqcmVzcG9uc2VfaGFuZGxlLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuKQ0Kew0KICAgICAg
ICB1bnNpZ25lZCBjaGFyICptc2c7DQoNCiAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9kb19j
b250cm9sX2RpYWxvZ3VlX3BheWxvYWQrKyIpOw0KDQogICAgICAgIGlmICggY2FtZXJhLT5wbC0+
bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAgLyogTmV3ZXIg
cHJvdG9jb2wgdXNlcyBhIGRpZmZlcmVudCBjb2RlLCBidXQgd2l0aCBzYW1lDQogICAgICAgICAg
ICAgICAgICogcmVzcG9uc2UuIEl0IGFsc28gbmVlZHMgYW4gZXh0cmEgemVybyBieXRlIGF0IHRo
ZQ0KICAgICAgICAgICAgICAgICAqIGVuZC4gKi8NCiAgICAgICAgICAgICAgICBwYXlsb2FkW3Bh
eWxvYWRsZW4rK10gPSAwOw0KICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1
ZV9mdWxsICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0FOT05fVVNCX0ZVTkNUSU9OX0NPTlRST0xfQ0FNRVJBXzIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuLCBwYXlsb2FkLCBw
YXlsb2FkbGVuKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgbXNn
ID0gY2Fub25fdXNiX2RpYWxvZ3VlX2Z1bGwgKCBjYW1lcmEsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9D
QU1FUkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhbGVuLCBwYXlsb2FkLCBwYXlsb2FkbGVuKTsNCg0KICAgICAgICBpZiAoIG1zZyA9PSBOVUxM
ICAmJiAqZGF0YWxlbiAhPSAweDFjKSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAg
ICAgICAgICAgICAgICBHUF9ERUJVRygiY2Fub25faW50X2RvX2NvbnRyb2xfZGlhbG9ndWVfcGF5
bG9hZCBlcnJvcjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhbGVuPSV4IiwgKmRh
dGFsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsN
CiAgICAgICAgfQ0KDQogICAgICAgICpyZXNwb25zZV9oYW5kbGUgPSBtc2c7DQoNCiAgICAgICAg
R1BfREVCVUcoImNhbm9uX2ludF9kb19jb250cm9sX2RpYWxvZ3VlX3BheWxvYWQtLSIpOw0KDQog
ICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZG9fY29udHJvbF9k
aWFsb2d1ZToNCiAqIEBjYW1lcmE6IENhbWVyYSB0byB3b3JrIG9uDQogKiBAc3ViY21kOiBTdWJj
b21tYW5kIGZvciByZW1vdGUgY2FwdHVyZSBjb21tYW5kDQogKiAgIChlLmcuICVDQU5PTl9VU0Jf
Q09OVFJPTF9JTklUKQ0KICogQGE6IDMyLWJpdCBmaXJzdCB3b3JkIG9mIHBheWxvYWQgKGZpcnN0
IGNvbW1hbmQgcGFyYW1ldGVyKQ0KICogQGI6IDMyLWJpdCBzZWNvbmQgd29yZCBvZiBwYXlsb2Fk
IChzZWNvbmQgY29tbWFuZCBwYXJhbWV0ZXIpDQogKiBAcmVzcG9uc2VfaGFuZGxlOiBwb2ludGVy
IHRvIGEgcG9pbnRlciB3aGVyZSB0aGUgY2FtZXJhIHJlc3BvbnNlIGJ1ZmZlcg0KICogICBhZGRy
ZXNzIHNob3VsZCBiZSBzdG9yZWQuDQogKiBAZGF0YWxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcmVz
cG9uc2UgZGF0YSBmcm9tIHRoZSBjYW1lcmENCiAqDQogKiBFeGVjdXRlcyBhIHJlbW90ZSBjYXB0
dXJlIGNvbW1hbmQgdGhhdCByZXR1cm5zIGRhdGEgZnJvbSB0aGUNCiAqIGNhbWVyYSwgZS5nLiwg
Z2V0IHJlbGVhc2UgcGFyYW1ldGVycy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1cyBj
b2RlLCBjYW1lcmEgcmVzcG9uc2UgZGF0YSBpbiBAcmVzcG9uc2VfaGFuZGxlLA0KICogICAgICAg
ICAgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBpbiBAZGF0YWxlbg0KICoNCiAqLw0Kc3RhdGljIGlu
dA0KY2Fub25faW50X2RvX2NvbnRyb2xfZGlhbG9ndWUgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25l
ZCBpbnQgc3ViY21kLCBpbnQgYSwgaW50IGIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqKnJlc3BvbnNlX2hhbmRsZSwgdW5zaWduZWQgaW50ICpkYXRhbGVu
KQ0Kew0KICAgICAgICB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMHg0Y107DQogICAgICAgIGNoYXIg
ZGVzY1sxMjhdOw0KICAgICAgICBpbnQgcGF5bG9hZGxlbjsNCiAgICAgICAgaW50IHN0YXR1czsN
Cg0KICAgICAgICBwYXlsb2FkbGVuID0gY2Fub25faW50X3BhY2tfY29udHJvbF9zdWJjbWQgKHBh
eWxvYWQsIHN1YmNtZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhLCBiLCBkZXNjKTsNCiAgICAgICAgR1BfREVCVUcoIiVzKysgd2l0aCAleCwg
JXgiLCBkZXNjLCBhLCBiKTsNCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJv
bF9kaWFsb2d1ZV9wYXlsb2FkIChjYW1lcmEsIHBheWxvYWQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRsZW4sDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
X2hhbmRsZSwgZGF0YWxlbik7DQoNCiAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAg
ICAgICAgICAgIC8qIEVSUk9SICovDQogICAgICAgICAgICAgICAgR1BfREVCVUcoIiVzIGVycm9y
OiBkYXRhbGVuPSV4IiwgZGVzYywgKmRhdGFsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBH
UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHKCIl
cy0tIiwgZGVzYyk7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fu
b25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sOg0KICogQGNhbWVyYTogQ2FtZXJhIHRvIHdvcmsg
b24NCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBJbml0
aWF0ZSByZW1vdGUgY29udHJvbCBvZiB0aGUgc2h1dHRlciByZWxlYXNlIGFuZCByZWxhdGVkIHBo
b3RvZ3JhcGhpYw0KICogcGFyYW1ldGVycy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1
cyBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9zdGFydF9yZW1vdGVfY29udHJvbCAoQ2Ft
ZXJhICpjYW1lcmEsIEdQQ29udGV4dCBfX3VudXNlZF9fICpjb250ZXh0KQ0Kew0KICAgICAgICBp
bnQgc3RhdHVzOw0KDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCkgew0K
ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9s
OiBDYW1lcmEgYWxyZWFkeSB1bmRlciByZW1vdGUgY29udHJvbCIpOw0KICAgICAgICAgICAgICAg
IHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIEluaXQsIGV4dGVuZHMg
Y2FtZXJhIGxlbnMsIHB1dHMgdXMgaW4gcmVtb3RlIGNhcHR1cmUgbW9kZSAqLw0KICAgICAgICBz
dGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9jb21tYW5kIChjYW1lcmEsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0lO
SVQsIDAsIDApOw0KDQoNCiAgICAgICAgaWYgKHN0YXR1cyA9PSBHUF9PSykNCiAgICAgICAgICAg
ICAgICBjYW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCA9IDE7DQoNCiAgICAgICAgcmV0dXJuIHN0
YXR1czsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2w6DQogKiBA
Y2FtZXJhOiBDYW1lcmEgdG8gd29yayBvbg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9y
IHJlcG9ydGluZw0KICoNCiAqIFRlcm1pbmF0ZSByZW1vdGUgY29udHJvbCBvZiB0aGUgc2h1dHRl
ciByZWxlYXNlIGFuZCByZWxhdGVkIHBob3RvZ3JhcGhpYw0KICogcGFyYW1ldGVycy4NCiAqDQog
KiBSZXR1cm5zOiBncGhvdG8yIHN0YXR1cyBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9l
bmRfcmVtb3RlX2NvbnRyb2wgKENhbWVyYSAqY2FtZXJhLCBHUENvbnRleHQgX191bnVzZWRfXyAq
Y29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBpZiAoIWNhbWVyYS0+
cGwtPnJlbW90ZV9jb250cm9sKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p
bnRfZW5kX3JlbW90ZV9jb250cm9sOiBDYW1lcmEgbm90IGN1cnJlbnRseSB1bmRlciByZW1vdGUg
Y29udHJvbCIpOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0K
DQogICAgICAgIC8qIEVuZCByZWxlYXNlIG1vZGUgKi8NCiAgICAgICAgc3RhdHVzID0gY2Fub25f
aW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfQ09OVFJPTF9FWElULCAwLCAwKTsNCg0K
DQogICAgICAgIGlmIChzdGF0dXMgPT0gR1BfT0spDQogICAgICAgICAgICAgICAgY2FtZXJhLT5w
bC0+cmVtb3RlX2NvbnRyb2wgPSAwOw0KDQogICAgICAgIHJldHVybiBzdGF0dXM7DQp9DQoNCg0K
LyoqDQogKiBjYW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8g
d29yayB3aXRoDQogKiBAZGF0YTogZ2V0cyB0aHVtYm5haWwgaW1hZ2UgZGF0YS4NCiAqIEBsZW5n
dGg6IGdldHMgbGVuZ3RoIG9mIEBkYXRhLg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9y
IHJlcG9ydGluZw0KICoNCiAqIERpcmVjdHMgdGhlIGNhbWVyYSB0byBjYXB0dXJlIGFuIGltYWdl
IHdpdGhvdXQgc3RvcmluZyBpdCBvbiB0aGUNCiAqIGNhbWVyYS4gKHJlbW90ZSBzaHV0dGVyIHJl
bGVhc2UgdmlhIFVTQikuIFRoZSB0aHVtYm5haWwgd2lsbCBiZQ0KICogcmV0dXJuZWQgaW4gQGRh
dGEuIFNlZSB0aGUgJ1Byb3RvY29sJyBmaWxlIGZvciBkZXRhaWxzLiBDYXB0dXJlDQogKiB0aHJv
dWdoIHNlcmlhbCBwb3J0IGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQuDQogKg0KICogUmV0dXJuczog
Z3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9jYXB0dXJlX3ByZXZp
ZXcgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25lZCBjaGFyICoqZGF0YSwgdW5zaWduZWQgaW50ICps
ZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7
DQogICAgICAgIGNhbm9uVHJhbnNmZXJNb2RlIHRyYW5zZmVybW9kZTsNCg0KICAgICAgICBpbnQg
bXN0aW1lb3V0ID0gLTE7DQogICAgICAgIGludCBzdGF0dXM7DQogICAgICAgIHVuc2lnbmVkIGlu
dCByZXR1cm5fbGVuZ3RoOw0KDQogICAgICAgIHVuc2lnbmVkIGludCBiX2xlbmd0aF9vcmlnID0g
MDsNCiAgICAgICAgdW5zaWduZWQgaW50ICpiX2xlbmd0aCA9ICZiX2xlbmd0aF9vcmlnOw0KICAg
ICAgICB1bnNpZ25lZCBjaGFyICpiX2RhdGFfb3JpZyA9IE5VTEw7DQogICAgICAgIHVuc2lnbmVk
IGNoYXIgKipiX2RhdGEgPSAmYl9kYXRhX29yaWc7DQoNCiAgICAgICAgaW50IHBob3RvX3N0YXR1
czsNCg0KICAgICAgICAvKiBTaG91bGQgd2UgZG93bmxvYWQgdGhlIHRodW1ibmFpbCwgb3IgdGhl
IGZ1bGwgaW1hZ2UgPyAqLw0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+Y2FwdHVyZV9zaXplID09
IENBUFRVUkVfRlVMTF9JTUFHRSkNCiAgICAgICAgICAgICAgICB0cmFuc2Zlcm1vZGUgPSBSRU1P
VEVfQ0FQVFVSRV9GVUxMX1RPX1BDOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgdHJh
bnNmZXJtb2RlID0gUkVNT1RFX0NBUFRVUkVfVEhVTUJfVE9fUEM7DQoNCiAgICAgICAgc3dpdGNo
IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCg0KICAg
ICAgICAgICAgICAgIGdwX3BvcnRfZ2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgJm1zdGltZW91
dCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6
IHVzYiBwb3J0IHRpbWVvdXQgc3RhcnRzIGF0ICVkbXMiLCBtc3RpbWVvdXQpOw0KDQogICAgICAg
ICAgICAgICAgY2FtZXJhLT5wbC0+aW1hZ2VfYl9rZXkgPSAweDA7DQogICAgICAgICAgICAgICAg
Y2FtZXJhLT5wbC0+aW1hZ2VfYl9sZW5ndGggPSAweDA7DQoNCiAgICAgICAgICAgICAgICAvKg0K
ICAgICAgICAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBDT05UUk9MX0NBTUVSQSBjb21t
YW5kcy4NCiAgICAgICAgICAgICAgICAgKi8NCg0KICAgICAgICAgICAgICAgIGlmICghY2FtZXJh
LT5wbC0+cmVtb3RlX2NvbnRyb2wpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdwX3BvcnRf
c2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgMTUwMDApOw0KDQogICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc3RhcnRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29u
dGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAg
IH0NCg0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgICogU2V0IHRoZSBjYXB0
dXJlZCBpbWFnZSB0cmFuc2ZlciBtb2RlLiAgV2UgaGF2ZSBmb3VyIG9wdGlvbnMNCiAgICAgICAg
ICAgICAgICAgKiB0aGF0IHdlIGNhbiBzcGVjaWZ5IGFueSBjb21ibyBvZiwgY2FwdHVyZWQgdGh1
bWIgdG8gUEMsDQogICAgICAgICAgICAgICAgICogZnVsbCB0byBQQywgdGh1bWIgdG8gZGlzaywg
YW5kIGZ1bGwgdG8gZGlzay4NCiAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAq
IFRoZSB0by1QQyBvcHRpb24gd2lsbCByZXR1cm4gYSBsZW5ndGggYW5kIGludGVnZXINCiAgICAg
ICAgICAgICAgICAgKiBrZXkgZnJvbSBjYW5vbl91c2JfY2FwdHVyZV9kaWFsb2d1ZSgpIHRvIHVz
ZSBpbiB0aGUNCiAgICAgICAgICAgICAgICAgKiAiRG93bmxvYWQgQ2FwdHVyZWQgSW1hZ2UiIGNv
bW1hbmQuDQogICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAg
ICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3OiB0cmFuc2ZlciBt
b2RlIGlzICV4IiwgdHJhbnNmZXJtb2RlICk7DQogICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fu
b25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX1NFVF9U
UkFOU0ZFUl9NT0RFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDQsIHRyYW5zZmVybW9kZSk7DQogICAgICAgICAgICAgICAgaWYgKCBz
dGF0dXMgPCAwICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAg
ICAgICAgICAgICAgICBncF9wb3J0X3NldF90aW1lb3V0IChjYW1lcmEtPnBvcnQsIG1zdGltZW91
dCk7DQogICAgICAgICAgICAgICAgR1BfREVCVUcoImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6
IHNldCBjYW1lcmEgcG9ydCB0aW1lb3V0IGJhY2sgdG8gJWQgc2Vjb25kcy4uLiIsIG1zdGltZW91
dCAvIDEwMDAgKTsNCg0KICAgICAgICAgICAgICAgIC8qIEdldCByZWxlYXNlIHBhcmFtZXRlcnMg
YSBjb3VwbGUgb2YgdGltZXMsIGp1c3QgdG8NCiAgICAgICAgICAgICAgICAgICBzZWUgaWYgdGhh
dCBoZWxwcy4gKi8NCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJv
bF9jb21tYW5kIChjYW1lcmEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0FOT05fVVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCB0cmFu
c2Zlcm1vZGUpOw0KICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApDQogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgICAgICAgICAgc3RhdHVzID0g
Y2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0dF
VF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwNCwgdHJhbnNmZXJtb2RlKTsNCiAgICAgICAgICAgICAgICBpZiAoIHN0YXR1
cyA8IDAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAg
ICAgICAgICAgIC8qIExvY2sga2V5cyBoZXJlIGZvciBFT1MgY2FtZXJhcyAqLw0KICAgICAgICAg
ICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzQgfHwgY2Ft
ZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbG9ja19rZXlzKGNhbWVyYSxjb250ZXh0KTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwgXygibG9jayBrZXlz
IGZhaWxlZC4iKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
dXM7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAg
ICAgICAgICAgICAgLyogU2h1dHRlciBSZWxlYXNlDQogICAgICAgICAgICAgICAgICAgQ2FuJ3Qg
dXNlIG5vcm1hbCAiY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCIsIGFzDQogICAgICAgICAg
ICAgICAgICAgd2UgbXVzdCByZWFkIHRoZSBpbnRlcnJ1cHQgcGlwZSBiZWZvcmUgdGhlIHJlc3Bv
bnNlDQogICAgICAgICAgICAgICAgICAgY29tZXMgYmFjayBmb3IgdGhpcyBjb21tYW5kLiAqLw0K
ICAgICAgICAgICAgICAgICpkYXRhID0gY2Fub25fdXNiX2NhcHR1cmVfZGlhbG9ndWUgKCBjYW1l
cmEsICZyZXR1cm5fbGVuZ3RoLCAmcGhvdG9fc3RhdHVzLCBjb250ZXh0ICk7DQogICAgICAgICAg
ICAgICAgaWYgKCAqZGF0YSA9PSBOVUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyog
VHJ5IHRvIGxlYXZlIGNhbWVyYSBpbiBhIHVzYWJsZSBzdGF0ZS4gKi8NCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29udGV4dCk7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBJdCB3b3VsZCBiZSBuaWNlIGlmIHdl
IGhhZCBhIHdheSB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlIHRoZSBjYW1l
cmEgZXJyb3Igc3RhdGUgZm9yIHRoZSBjYWxsZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGxpY2F0aW9uLiAgRm9yIGV4YW1wbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBw
aG90b19zdGF0dXMgPT0gMHgwMSBzZWVtcyB0byBtZWFuDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXV0b2ZvY3VzIGZhaWx1cmUiIG9uIHRoZSBFT1MgNUQuICovDQogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGhvdG9fc3RhdHVzICE9IDApDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DQU1FUkFfRVJST1I7DQogICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F
UlJPUl9PU19GQUlMVVJFOw0KDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg
aWYgKHRyYW5zZmVybW9kZSA9PSBSRU1PVEVfQ0FQVFVSRV9GVUxMX1RPX1BDKSB7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIERvd25sb2FkIHRoZSBpbWFnZS4gKi8NCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+aW1hZ2VfbGVuZ3RoID4gMCApIHsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2dldF9jYXB0dXJl
ZF9pbWFnZSAoIGNhbWVyYSwgY2FtZXJhLT5wbC0+aW1hZ2Vfa2V5LCBkYXRhLCBsZW5ndGgsIGNv
bnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAw
ICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg
ImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiBpbWFnZSBkb3dubG9hZCBmYWlsZWQsIHN0YXR1cz0g
JWkiLCBzdGF0dXMgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvd25sb2Fk
IHRoZSBzZWNvbmRhcnkgaW1hZ2UsIGlmIG9uZSBleGlzdHMgKi8NCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FtZXJhLT5wbC0+aW1hZ2VfYl9sZW5ndGggPiAwICkgew0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfZ2V0X2NhcHR1cmVkX3Nl
Y29uZGFyeV9pbWFnZSAoIGNhbWVyYSwgY2FtZXJhLT5wbC0+aW1hZ2VfYl9rZXksIGJfZGF0YSwg
Yl9sZW5ndGgsIGNvbnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdQX0RFQlVHICggImNhbm9uX2ludF9jYXB0dXJlX3ByZXZpZXc6Ig0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZWNvbmRhcnkgaW1hZ2UgZG93
bmxvYWQgZmFpbGVkLCBzdGF0dXM9ICVpIiwgc3RhdHVzICk7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBy
aWQgb2YgaXQgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYIG1heWJl
IHRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiB0byBkbyBzb21ldGhpbmcgZWxzZSB3aXRoIGl0ICovDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoYl9kYXRhX29yaWcpOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2Zlcm1vZGUg
PT0gUkVNT1RFX0NBUFRVUkVfVEhVTUJfVE9fUEMpIHsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgLyogRG93bmxvYWQgdGhlIHRodW1ibmFpbCBpbWFnZS4gKi8NCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FtZXJhLT5wbC0+dGh1bWJfbGVuZ3RoID4gMCApIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2dldF9jYXB0dXJlZF90aHVt
Ym5haWwgKCBjYW1lcmEsIGNhbWVyYS0+cGwtPmltYWdlX2tleSwgZGF0YSwgbGVuZ3RoLCBjb250
ZXh0ICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCAp
IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJj
YW5vbl9pbnRfY2FwdHVyZV9wcmV2aWV3OiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgdGh1bWJuYWlsIGRvd25sb2FkIGZhaWxlZCwgc3RhdHVz
PSAlaSIsIHN0YXR1cyApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0dXM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAg
IHJldHVybiBHUF9FUlJPUl9OT1RfU1VQUE9SVEVEOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0K
ICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBHUF9P
SzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZmluZF9uZXdfaW1hZ2U6DQogKiBAY2FtZXJhOiBD
YW1lcmEgKiB0byB0aGlzIGNhbWVyYQ0KICogQGluaXRpYWxfc3RhdGU6IENhbWVyYSBkaXJlY3Rv
cnkgZHVtcCBiZWZvcmUgaW1hZ2UgY2FwdHVyZQ0KICogQGluaXRpYWxfc3RhdGVfbGVuOiBMZW5n
dGggb2YgYmVmb3JlIGR1bXAgDQogKiBAZmluYWxfc3RhdGU6IERpcmVjdG9yeSBkdW1wIGFmdGVy
IGltYWdlIGNhcHR1cmUNCiAqIEBmaW5hbF9zdGF0ZV9sZW46IExlbmd0aCBvZiBhZnRlciBkdW1w
DQogKiBAcGF0aDogV2lsbCBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgcGF0aCBhbmQgZmlsZW5hbWUg
b2YgdGhlIGNhcHR1cmVkDQogKiAgICAgICAgaW1hZ2UsIGluIGNhbm9uaWNhbCBncGhvdG8yIGZv
cm1hdC4NCiAqDQogKiBDb21wYXJlcyB0d28gY29tcGxldGUgZHVtcHMgb2YgdGhlIGNhbWVyYSBk
aXJlY3Rvcnk6IGJlZm9yZSBhbmQNCiAqIGFmdGVyIGFuIGltYWdlIGNhcHR1cmUgY29tbWFuZC4g
VGhlIGZpcnN0IG5ldyBpbWFnZSBmaWxlIGlzIGZvdW5kLA0KICogYW5kIGl0cyBwYXRobmFtZSBp
cyBkZWNvZGVkIGludG8gdGhlIGdpdmVuIENhbWVyYUZpbGVQYXRoLg0KICoNCiAqLw0Kdm9pZCBj
YW5vbl9pbnRfZmluZF9uZXdfaW1hZ2UgKA0KCQlDYW1lcmEgKmNhbWVyYSwNCgkJdW5zaWduZWQg
Y2hhciAqaW5pdGlhbF9zdGF0ZSwgdW5zaWduZWQgaW50IGluaXRpYWxfc3RhdGVfbGVuZ3RoLA0K
CQl1bnNpZ25lZCBjaGFyICpmaW5hbF9zdGF0ZSwgdW5zaWduZWQgaW50IGZpbmFsX3N0YXRlX2xl
bmd0aCwNCgkJQ2FtZXJhRmlsZVBhdGggKnBhdGggKQ0Kew0KICAgICAgICBjaGFyICpvbGRfZW50
cnkgPSAoY2hhciAqKWluaXRpYWxfc3RhdGUsICpuZXdfZW50cnkgPSAoY2hhciAqKWZpbmFsX3N0
YXRlOw0KDQogICAgICAgIC8qIFNldCBkZWZhdWx0IHBhdGggbmFtZSAqLw0KICAgICAgICBzdHJu
Y3B5ICggcGF0aC0+bmFtZSwgXygiKlVOS05PV04qIiksIHNpemVvZihwYXRoLT5uYW1lKSApOw0K
ICAgICAgICBzdHJuY3B5ICggcGF0aC0+Zm9sZGVyLCBfKCIqVU5LTk9XTioiKSwgc2l6ZW9mKHBh
dGgtPmZvbGRlcikgKTsNCg0KICAgICAgICBwYXRoLT5mb2xkZXJbMF0gPSAwOyAvKiBTdGFydCB3
aXRoIG51bGwgcGF0aG5hbWUgc3RyaW5nLiAqLw0KICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9p
bnRfZmluZF9uZXdfaW1hZ2U6IHN0YXJ0aW5nIGRpcmVjdG9yeSBjb21wYXJlIiApOw0KICAgICAg
ICB3aGlsZSAoICgoKG5ld19lbnRyeSAtIChjaGFyKilmaW5hbF9zdGF0ZSkgPCBmaW5hbF9zdGF0
ZV9sZW5ndGgpICYmDQoJCSgob2xkX2VudHJ5IC0gKGNoYXIqKWluaXRpYWxfc3RhdGUpIDwgaW5p
dGlhbF9zdGF0ZV9sZW5ndGgpKSAmJg0KCQkoCWxlMTZhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05f
RElSRU5UX0FUVFJTICkgIT0gMCB8fA0KCQkJbGUzMmF0b2ggKCBvbGRfZW50cnkgKyBDQU5PTl9E
SVJFTlRfU0laRSApICE9IDAgfHwNCgkJCWxlMzJhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05fRElS
RU5UX1RJTUUgKSAhPSAwDQoJCSkNCgkpIHsNCiAgICAgICAgICAgICAgICBjaGFyICpvbGRfbmFt
ZSA9IG9sZF9lbnRyeSArIENBTk9OX0RJUkVOVF9OQU1FLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgKm5ld19uYW1lID0gbmV3X2VudHJ5ICsgQ0FOT05fRElSRU5UX05BTUU7DQogICAgICAgICAg
ICAgICAgR1BfREVCVUcgKCAiIG9sZCBlbnRyeSBcIiVzXCIsIGF0dHIgPSAweCUwMngsIHNpemU9
JWkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX25hbWUsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbGRfZW50cnlbQ0FOT05fRElSRU5UX0FUVFJTXSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlMzJhdG9oICggb2xkX2VudHJ5ICsgQ0FOT05fRElSRU5UX1NJWkUg
KSApOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIiBuZXcgZW50cnkgXCIlc1wiLCBhdHRy
ID0gMHglMDJ4LCBzaXplPSVpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1l
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2VudHJ5W0NBTk9OX0RJUkVOVF9BVFRS
U10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyYXRvaCAoIG5ld19lbnRyeSArIENB
Tk9OX0RJUkVOVF9TSVpFICkgKTsNCiAgICAgICAgICAgICAgICBpZiAoICpvbGRfZW50cnkgIT0g
Km5ld19lbnRyeQ0KICAgICAgICAgICAgICAgICAgICAgfHwgbGUzMmF0b2ggKCBvbGRfZW50cnkg
KyBDQU5PTl9ESVJFTlRfU0laRSApICE9IGxlMzJhdG9oICggbmV3X2VudHJ5ICsgQ0FOT05fRElS
RU5UX1NJWkUgKQ0KICAgICAgICAgICAgICAgICAgICAgfHwgbGUzMmF0b2ggKCBvbGRfZW50cnkg
KyBDQU5PTl9ESVJFTlRfVElNRSApICE9IGxlMzJhdG9oICggbmV3X2VudHJ5ICsgQ0FOT05fRElS
RU5UX1RJTUUgKQ0KICAgICAgICAgICAgICAgICAgICAgfHwgc3RyY21wICggb2xkX25hbWUsIG5l
d19uYW1lICkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBNaXNtYXRjaC4gUHJlc3Vt
YWJseSBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZmlsZSwgYnV0IGlzIGl0IGFu
DQogICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBmaWxlPyAqLw0KICAgICAgICAgICAg
ICAgICAgICAgICAgR1BfREVCVUcgKCAiRm91bmQgbWlzbWF0Y2giICk7DQogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGlzX2ltYWdlICggbmV3X25hbWUgKSApIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogWXVwLCB3ZSdsbCBhc3N1bWUgdGhhdCB0aGlzIGlzIHRoZSBu
ZXcgaW1hZ2UuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg
IiAgRm91bmQgb3VyIG5ldyBpbWFnZSBmaWxlIiApOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJjcHkgKCBwYXRoLT5uYW1lLCBuZXdfbmFtZSApOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJjcHkgKCBwYXRoLT5mb2xkZXIsIGNhbm9uMmdwaG90b3BhdGgg
KCBjYW1lcmEsIHBhdGgtPmZvbGRlciApICk7DQoNCgkJCQkvKiBGSVhNRTogTWFyY3VzOiBtYWtl
IGl0IGxlc3MgbGFyZ2UgZWZmb3J0Li4uICovDQoJCQkJZ3BfZmlsZXN5c3RlbV9yZXNldCAoY2Ft
ZXJhLT5mcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBtaXNtYXRjaCBpcyBub3QgYW4gaW1h
Z2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4gVGhlcmUgYXJlIHRo
cmVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmlsaXRpZXM6DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4gVGhpcyBpcyBhIG5ldyBkaXJl
Y3Rvcnkgd2l0aCBubw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl
cy4gVGhlIG5leHQgZW50cnkgd2lsbCBiZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbm90aGVyIGRpcmVjdG9yeS4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyLiBUaGlzIGlzIGFuIGF1eGlsaWFyeSBmaWxlDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzb3VuZCwgdGh1bWJuYWlsLCBjYXRhbG9nKS4NCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBlaXRoZXIgb2YgdGhlc2UgY2FzZXMsIHRo
ZSB0aGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBpcyB0byBz
a2lwIHRoaXMgZW50cnkgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBkaXJlY3RvcnkuDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4g
VGhpcyBpcyBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBuZXcNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsZXMsIGFuZCB3ZSB3aWxsIGVudGVyIGl0Lg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmV4dCBlbnRyeSBpbiB0aGUgbmV3DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGJlIGEgbmV3
IGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1heSB3
ZWxsIGJlIG91ciBuZXcgaW1hZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZS4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZTE2YXRvaCAoIG5ld19lbnRyeStDQU5P
Tl9ESVJFTlRfQVRUUlMgKSAmIENBTk9OX0FUVFJfUkVDVVJTX0VOVF9ESVIgKSB7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RyY21wICggIi4uIiwgbmV3
X25hbWUgKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIFBvcCBvdXQgb2YgdGhpcyBkaXJlY3RvcnkgKi8NCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvY2FsX2RpciA9IHN0cnJjaHIocGF0
aC0+Zm9sZGVyLCdcXCcpICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIFRoZSBFT1MgMzUwRCBoYXMNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqICIuLiIgZW50cmllcyByaWdodA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXAgdG8gdGhlIHJvb3Qs
IHNvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3
ZSBuZWVkIHRvIGF2b2lkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBkZXJlZmVyZW5jaW5nIGENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIG51bGwgcG9pbnRlci4gKi8NCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbG9jYWxfZGlyICE9IE5VTEwgJiYg
bG9jYWxfZGlyID4gcGF0aC0+Zm9sZGVyICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJMZWF2aW5nIGRpcmVjdG9y
eSBcIiVzXCIiLCBsb2NhbF9kaXIgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZGlyWy0xXSA9IDA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgdG9w
IGRpcmVjdG9yeSIgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXcgZGlyZWN0b3J5
LCBhbmQgd2UgbmVlZCB0byBlbnRlciBpdC4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkVudGVyaW5nIGRpcmVjdG9yeSBcIiVz
XCIiLCBuZXdfbmFtZSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBuZXdfZW50cnlbQ0FOT05fRElSRU5UX05BTUVdID09ICcuJyApDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEln
bm9yZSBhIGxlYWRpbmcgZG90ICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cm5jYXQgKCBwYXRoLT5mb2xkZXIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdfbmFtZSArIDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRo
LT5mb2xkZXIpIC0gMSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJuY2F0ICggcGF0aC0+Zm9sZGVyLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRoLT5mb2xkZXIpIC0g
MSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdfZW50cnkgKz0gQ0FOT05fTUlOSU1VTV9ESVJFTlRfU0laRSArIHN0cmxlbiAoIG5ld19l
bnRyeStDQU5PTl9ESVJFTlRfTkFNRSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbGUxNmF0b2ggKCBvbGRfZW50cnkrQ0FOT05fRElSRU5UX0FUVFJTICkgJiBD
QU5PTl9BVFRSX1JFQ1VSU19FTlRfRElSICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBFbnRlcmVkIGEgbmV3IGRpcmVjdG9yeTsgYXBwZW5kIGl0cw0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIHRoZSBjdXJyZW50IGZvbGRlciBwYXRoLg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZW5kIG9mIGEgZGlyZWN0b3J5
IGlzIHNpZ25hbGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGFuIGVu
dHJ5IHdpdGggemVybyBsZW5ndGggYW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWUsIGFuZCBuYW1lICIuLiIuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXN0cmNtcCAoICIuLiIsIG9sZF9uYW1lICkgKSB7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9wIG91dCBvZiB0aGlzIGRpcmVjdG9yeSAqLw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvY2FsX2RpciA9
IHN0cnJjaHIocGF0aC0+Zm9sZGVyLCdcXCcpICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBUaGUgRU9TIDM1MEQgaGFzDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogIi4uIiBlbnRyaWVzIHJpZ2h0DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXAgdG8gdGhlIHJvb3QsIHNvDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2UgbmVlZCB0byBhdm9pZA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRlcmVmZXJlbmNpbmcgYQ0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG51bGwgcG9pbnRlci4g
Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxvY2FsX2Rp
ciAhPSBOVUxMICYmIGxvY2FsX2RpciA+IHBhdGgtPmZvbGRlciApIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgZGly
ZWN0b3J5IFwiJXNcIiIsIGxvY2FsX2RpciApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZGlyWy0xXSA9IDA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdQX0RFQlVHICggIkxlYXZpbmcgdG9wIGRpcmVjdG9yeSIgKTsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcg
KCAiRW50ZXJpbmcgZGlyZWN0b3J5IFwiJXNcIiIsIG9sZF9uYW1lICk7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGRfbmFtZVswXSA9PSAnLicgKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWdub3JlIGEg
bGVhZGluZyBkb3QgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cm5jYXQgKCBwYXRoLT5mb2xkZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX25hbWUgKyAxLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihw
YXRoLT5mb2xkZXIpIC0gc3RybGVuKHBhdGgtPmZvbGRlcikgLSAxICk7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNhdCAoIHBhdGgtPmZvbGRlciwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfbmFt
ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2YocGF0aC0+Zm9sZGVyKSAtIHN0cmxlbihwYXRoLT5mb2xkZXIpIC0gMSApOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHRvIG5leHQgZW50cnkgKi8NCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld19lbnRyeSArPSBDQU5PTl9NSU5JTVVNX0RJUkVOVF9T
SVpFICsgc3RybGVuICggbmV3X2VudHJ5K0NBTk9OX0RJUkVOVF9OQU1FICk7DQogICAgICAgICAg
ICAgICAgICAgICAgICBvbGRfZW50cnkgKz0gQ0FOT05fTUlOSU1VTV9ESVJFTlRfU0laRSArIHN0
cmxlbiAoIG9sZF9lbnRyeStDQU5PTl9ESVJFTlRfTkFNRSApOw0KICAgICAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9jYXB0dXJlX2ltYWdlOg0KICogQGNh
bWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQHBhdGg6IGdldHMgZmlsbGVkIGluIHdpdGgg
dGhlIHBhdGggYW5kIGZpbGVuYW1lIG9mIHRoZSBjYXB0dXJlZA0KICogICBpbWFnZSwgaW4gY2Fu
b25pY2FsIGdwaG90bzIgZm9ybWF0Lg0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJl
cG9ydGluZw0KICoNCiAqIERpcmVjdHMgdGhlIGNhbWVyYSB0byBjYXB0dXJlIGFuIGltYWdlIChy
ZW1vdGUgc2h1dHRlciByZWxlYXNlIHZpYQ0KICogVVNCKS4gIFNlZSB0aGUgJ1Byb3RvY29sJyBm
aWxlIGZvciBkZXRhaWxzLiBDYXB0dXJlIHRocm91Z2ggc2VyaWFsDQogKiBwb3J0IGlzIG5vdCAo
eWV0KSBzdXBwb3J0ZWQuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0K
ICovDQppbnQNCmNhbm9uX2ludF9jYXB0dXJlX2ltYWdlIChDYW1lcmEgKmNhbWVyYSwgQ2FtZXJh
RmlsZVBhdGggKnBhdGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250
ZXh0KQ0Kew0KICAgICAgICBjYW5vblRyYW5zZmVyTW9kZSB0cmFuc2Zlcm1vZGU7DQoNCiAgICAg
ICAgaW50IG1zdGltZW91dCA9IC0xOw0KICAgICAgICBpbnQgc3RhdHVzOw0KICAgICAgICB1bnNp
Z25lZCBpbnQgcmV0dXJuX2xlbmd0aDsNCg0KICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhID0g
TlVMTDsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqaW5pdGlhbF9zdGF0ZSwgKmZpbmFsX3N0YXRl
OyAvKiBGb3IgY29tcGFyaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogYmVmb3JlL2FmdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogZGlyZWN0b3JpZXMgKi8NCiAgICAgICAgdW5zaWduZWQgaW50IGluaXRpYWxf
c3RhdGVfbGVuLCBmaW5hbF9zdGF0ZV9sZW47DQoNCiAgICAgICAgaW50IHBob3RvX3N0YXR1czsN
Cg0KICAgICAgICAvKiBTaG91bGQgd2Ugc2F2ZSB0aGUgdGh1bWJuYWlsLCBvciB0aGUgZnVsbCBp
bWFnZSA/ICovDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5jYXB0dXJlX3NpemUgPT0gQ0FQVFVS
RV9USFVNQikNCiAgICAgICAgICAgICAgICB0cmFuc2Zlcm1vZGUgPSBSRU1PVEVfQ0FQVFVSRV9U
SFVNQl9UT19EUklWRTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHRyYW5zZmVybW9k
ZSA9IFJFTU9URV9DQVBUVVJFX0ZVTExfVE9fRFJJVkU7DQoNCiAgICAgICAgc3dpdGNoIChjYW1l
cmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAgICAgICAgICAg
ICAgICAvKiBMaXN0IGFsbCBkaXJlY3RvcmllcyBvbiB0aGUgY2FtZXJhIHRvIGdldCBhDQogICAg
ICAgICAgICAgICAgICAgYmFzZWxpbmUgdG8gZmluZCB0aGUgbmV3IGZpbGUuICovDQogICAgICAg
ICAgICAgICAgc3RhdHVzID0gY2Fub25fdXNiX2xpc3RfYWxsX2RpcnMgKCBjYW1lcmEsICZpbml0
aWFsX3N0YXRlLCAmaW5pdGlhbF9zdGF0ZV9sZW4sIGNvbnRleHQgKTsNCg0KICAgICAgICAgICAg
ICAgIGlmICggc3RhdHVzIDwgMCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NvbnRl
eHRfZXJyb3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJjYW5vbl9pbnRfY2FwdHVyZV9pbWFnZTogaW5pdGlhbCBjYW5vbl91c2JfbGlzdF9h
bGxfZGlycygpIGZhaWxlZCB3aXRoIHN0YXR1cyAlbGkiKSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsb25nKXN0YXR1cyApOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg
ICBncF9wb3J0X2dldF90aW1lb3V0IChjYW1lcmEtPnBvcnQsICZtc3RpbWVvdXQpOw0KICAgICAg
ICAgICAgICAgIEdQX0RFQlVHKCJjYW5vbl9pbnRfY2FwdHVyZV9pbWFnZTogdXNiIHBvcnQgdGlt
ZW91dCBzdGFydHMgYXQgJWRtcyIsIG1zdGltZW91dCk7DQoNCiAgICAgICAgICAgICAgICAvKg0K
ICAgICAgICAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBDT05UUk9MX0NBTUVSQSBjb21t
YW5kcy4NCiAgICAgICAgICAgICAgICAgKi8NCg0KICAgICAgICAgICAgICAgIGdwX3BvcnRfc2V0
X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgMTUwMDApOw0KDQogICAgICAgICAgICAgICAgaWYgKCFj
YW1lcmEtPnBsLT5yZW1vdGVfY29udHJvbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzID0gY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KCQkJCWZyZWUgKCBp
bml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0dXM7DQoJCQl9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyoNCiAg
ICAgICAgICAgICAgICAgKiBTZXQgdGhlIGNhcHR1cmVkIGltYWdlIHRyYW5zZmVyIG1vZGUuICBX
ZSBoYXZlIGZvdXIgb3B0aW9ucw0KICAgICAgICAgICAgICAgICAqIHRoYXQgd2UgY2FuIHNwZWNp
ZnkgYW55IGNvbWJvIG9mLCBjYXB0dXJlZCB0aHVtYiB0byBQQywNCiAgICAgICAgICAgICAgICAg
KiBmdWxsIHRvIFBDLCB0aHVtYiB0byBkaXNrLCBhbmQgZnVsbCB0byBkaXNrLg0KICAgICAgICAg
ICAgICAgICAqDQogICAgICAgICAgICAgICAgICogVGhlIHRvLVBDIG9wdGlvbiB3aWxsIHJldHVy
biBhIGxlbmd0aCBhbmQgaW50ZWdlcg0KICAgICAgICAgICAgICAgICAqIGtleSBmcm9tIGNhbm9u
X3VzYl9jYXB0dXJlX2RpYWxvZ3VlKCkgdG8gdXNlIGluIHRoZQ0KICAgICAgICAgICAgICAgICAq
ICJEb3dubG9hZCBDYXB0dXJlZCBJbWFnZSIgY29tbWFuZC4NCiAgICAgICAgICAgICAgICAgKg0K
ICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2lu
dF9jYXB0dXJlX2ltYWdlOiB0cmFuc2ZlciBtb2RlIGlzICV4IiwgdHJhbnNmZXJtb2RlICk7DQog
ICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2Ft
ZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENBTk9OX1VTQl9DT05UUk9MX1NFVF9UUkFOU0ZFUl9NT0RFLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIHRyYW5zZmVybW9k
ZSk7DQogICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAg
ICAgICAgICAgY2Fub25faW50X2VuZF9yZW1vdGVfY29udHJvbCAoY2FtZXJhLCBjb250ZXh0KTsN
CgkJCWZyZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdHVzOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGdwX3BvcnRf
c2V0X3RpbWVvdXQgKGNhbWVyYS0+cG9ydCwgbXN0aW1lb3V0KTsNCiAgICAgICAgICAgICAgICBH
UF9ERUJVRygiY2Fub25faW50X2NhcHR1cmVfaW1hZ2U6IHNldCBjYW1lcmEgcG9ydCB0aW1lb3V0
IGJhY2sgdG8gJWQgc2Vjb25kcy4uLiIsIG1zdGltZW91dCAvIDEwMDAgKTsNCg0KICAgICAgICAg
ICAgICAgIC8qIEdldCByZWxlYXNlIHBhcmFtZXRlcnMgYSBjb3VwbGUgb2YgdGltZXMsIGp1c3Qg
dG8NCiAgICAgICAgICAgICAgICAgICBzZWUgaWYgdGhhdCBoZWxwcy4gKi8NCiAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9jb21tYW5kIChjYW1lcmEsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOT05f
VVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAwKTsNCiAgICAgICAgICAgICAgICBpZiAoIHN0
YXR1cyA8IDAgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9pbnRfZW5kX3JlbW90
ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0KCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgICAgICAgICAg
fQ0KDQojaWZkZWYgREVCVUdfVElOWV9JTUFHRVMNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfYmxvY2s7DQogICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcmVzdWx0X2xlbiwgcGF5bG9hZF9sZW47DQogICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMHg1OV07DQogICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyICpwYXJhbXM7DQogICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGRlc2NbMTAyNF07DQogICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk
X2xlbiA9IGNhbm9uX2ludF9wYWNrX2NvbnRyb2xfc3ViY21kICggcGF5bG9hZCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQU5PTl9VU0JfQ09OVFJPTF9HRVRfUEFSQU1TLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDAs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzYyApOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2Js
b2NrID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLCBDQU5PTl9VU0JfRlVOQ1RJT05fQ09O
VFJPTF9DQU1FUkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcmVzdWx0X2xlbiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4gKTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0X2Jsb2NrID09IE5VTEwgKSB7DQoJCQkJ
ZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdQX0VSUk9SOw0KCQkJfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQg
KCBwYXlsb2FkLCAwLCBzaXplb2YocGF5bG9hZCkgKTsNCiAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtcyA9IHBheWxvYWQrMHgwODsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAo
IHBhcmFtcywgcmVzdWx0X2Jsb2NrKzB4MGMsIDB4MzAgKTsNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgcGF5bG9hZFswXSA9IDB4MDc7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2Fk
WzRdID0gMHgzMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXSA9IDI7ICAgICAg
IC8qICJOb3JtYWwiIGNvbXByZXNzaW9uICovDQogICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbMl0gPSAxOyAgICAgICAvKiBKUEVHICovDQogICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbM10gPSAyOyAgICAgICAvKiBzbWFsbCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zWzRdID0gcGFyYW1zWzVdID0gMDsgLyogU2VsZiB0aW1lciBvZmYgKi8NCiAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1s2XSA9IDA7ICAgICAgICAgICAgIC8qIEZsYXNoIG9mZiAqLw0K
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzddID0gMDsgICAgICAgICAgICAgLyogQmVl
cCBvZmYgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9ibG9jayA9IGNhbm9uX3Vz
Yl9kaWFsb2d1ZSAoIGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0NPTlRST0xfQ0FNRVJBLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnJlc3VsdF9sZW4sIHBheWxvYWQsIDB4MzggKTsNCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcmVzdWx0X2Jsb2NrID09IE5VTEwgKSB7DQoJCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUg
KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SOw0KCQkJ
fQ0KICAgICAgICAgICAgICAgIH0NCiNlbmRpZiAvKiBERUJVR19USU5ZX0lNQUdFUyAqLw0KDQog
ICAgICAgICAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2RvX2NvbnRyb2xfY29tbWFuZCAoY2Ft
ZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENBTk9OX1VTQl9DT05UUk9MX0dFVF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgdHJhbnNmZXJtb2RlKTsNCiAg
ICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7DQogICAgICAgICAgICAgICAgICAgICAg
ICBjYW5vbl9pbnRfZW5kX3JlbW90ZV9jb250cm9sIChjYW1lcmEsIGNvbnRleHQpOw0KCQkJZnJl
ZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
dXM7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogTG9jayBrZXlzIGhl
cmUgZm9yIEVPUyAqLw0KICAgICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQtPm1vZGVs
ID09IENBTk9OX0NMQVNTXzQgfHwgY2FtZXJhLT5wbC0+bWQtPm1vZGVsID09IENBTk9OX0NMQVNT
XzYgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbG9ja19r
ZXlzKGNhbWVyYSxjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVz
IDwgMCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJv
ciAoY29udGV4dCwgXygibG9jayBrZXlzIGZhaWxlZC4iKSk7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wgKGNhbWVyYSwgY29udGV4
dCk7DQoJCQkJZnJlZSAoIGluaXRpYWxfc3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBTaHV0dGVyIFJlbGVhc2UNCiAgICAg
ICAgICAgICAgICAgICBDYW4ndCB1c2Ugbm9ybWFsICJjYW5vbl9pbnRfZG9fY29udHJvbF9jb21t
YW5kIiwgYXMNCiAgICAgICAgICAgICAgICAgICB3ZSBtdXN0IHJlYWQgdGhlIGludGVycnVwdCBw
aXBlIGJlZm9yZSB0aGUgcmVzcG9uc2UNCiAgICAgICAgICAgICAgICAgICBjb21lcyBiYWNrIGZv
ciB0aGlzIGNvbW1hbmQuICovDQogICAgICAgICAgICAgICAgZGF0YSA9IGNhbm9uX3VzYl9jYXB0
dXJlX2RpYWxvZ3VlICggY2FtZXJhLCAmcmV0dXJuX2xlbmd0aCwgJnBob3RvX3N0YXR1cywgY29u
dGV4dCApOw0KICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PSBOVUxMICkgew0KICAgICAgICAg
ICAgICAgICAgICAgICAgLyogVHJ5IHRvIGxlYXZlIGNhbWVyYSBpbiBhIHVzYWJsZSBzdGF0ZS4g
Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX2ludF9lbmRfcmVtb3RlX2NvbnRyb2wg
KGNhbWVyYSwgY29udGV4dCk7DQoNCgkJCWZyZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAg
ICAgICAgICAgICAgICAgICAvKiBYWFggSXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgYSB3YXkg
dG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZSB0aGUgY2FtZXJhIGVycm9yIHN0
YXRlIGZvciB0aGUgY2FsbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
bi4gIEZvciBleGFtcGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvdG9fc3RhdHVz
ID09IDB4MDEgc2VlbXMgdG8gbWVhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9m
b2N1cyBmYWlsdXJlIiBvbiB0aGUgRU9TIDVELiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBob3RvX3N0YXR1cyAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR1BfRVJST1JfQ0FNRVJBX0VSUk9SOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJ
TFVSRTsNCg0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8qIE5vdyBsaXN0
IGFsbCBkaXJlY3RvcmllcyBvbiB0aGUgY2FtZXJhOyB0aGlzIGhhcw0KICAgICAgICAgICAgICAg
ICAgIHByZXN1bWFibHkgYWRkZWQgYW4gaW1hZ2UgZmlsZS4gRmluZCB0aGUgZGlmZmVyZW5jZQ0K
ICAgICAgICAgICAgICAgICAgIGFuZCBkZWNvZGUgdG8gcmV0dXJuIHJlYWwgcGF0aCBhbmQgZmls
ZSBuYW1lcy4gKi8NCiAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl91c2JfbGlzdF9hbGxf
ZGlycyAoIGNhbWVyYSwgJmZpbmFsX3N0YXRlLCAmZmluYWxfc3RhdGVfbGVuLCBjb250ZXh0ICk7
DQogICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgew0KICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BfY29udGV4dF9lcnJvciAoIGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiY2Fub25faW50X2NhcHR1cmVfaW1hZ2U6Ig0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmaW5hbCBjYW5vbl91c2Jf
bGlzdF9hbGxfZGlycygpIGZhaWxlZCB3aXRoIHN0YXR1cyAlaSIpLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyApOw0KCQkJZnJlZSAoIGluaXRpYWxf
c3RhdGUgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAg
ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogRmluZCBuZXcgZmlsZSBuYW1lIGluIGNh
bWVyYSBkaXJlY3RvcnkgKi8NCiAgICAgICAgICAgICAgICBjYW5vbl9pbnRfZmluZF9uZXdfaW1h
Z2UgKCBjYW1lcmEsIGluaXRpYWxfc3RhdGUsIGluaXRpYWxfc3RhdGVfbGVuLCBmaW5hbF9zdGF0
ZSwgZmluYWxfc3RhdGVfbGVuLCBwYXRoICk7DQoNCgkJLyogU2F2ZSB0aGlzIHN0YXRlIHRvIHRo
ZSBjYW1lcmEgZGlyZWN0b3J5IHN0YXRlICovDQoJCWlmIChjYW1lcmEtPnBsLT5kaXJlY3Rvcnlf
c3RhdGUpDQoJCQlmcmVlIChjYW1lcmEtPnBsLT5kaXJlY3Rvcnlfc3RhdGUpOw0KCQljYW1lcmEt
PnBsLT5kaXJlY3Rvcnlfc3RhdGUgPSBmaW5hbF9zdGF0ZTsNCgkJY2FtZXJhLT5wbC0+ZGlyZWN0
b3J5X3N0YXRlX2xlbmd0aCA9IGZpbmFsX3N0YXRlX2xlbjsNCg0KICAgICAgICAgICAgICAgIGZy
ZWUgKCBpbml0aWFsX3N0YXRlICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNh
c2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX05PVF9T
VVBQT1JURUQ7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIEdQX1BPUlRfREVGQVVM
VA0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fu
b25faW50X3NldF9maWxlX2F0dHJpYnV0ZXM6DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3
aXRoDQogKiBAZmlsZTogZmlsZSB0byB3b3JrIG9uDQogKiBAZGlyOiBkaXJlY3RvcnkgdG8gd29y
ayBpbg0KICogQGF0dHJzOiAjY2Fub25EaXJlbnRBdHRyaWJ1dGVCaXRzIHdpdGggdGhlIGJpdHMg
dG8gc2V0DQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICog
U2V0cyBhIGZpbGUncyBhdHRyaWJ1dGVzLiBTZWUgdGhlICdQcm90b2NvbCcgZmlsZSBmb3IgZGV0
YWlscy4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0K
Y2Fub25faW50X3NldF9maWxlX2F0dHJpYnV0ZXMgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFy
ICpmaWxlLCBjb25zdCBjaGFyICpkaXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2Fub25EaXJlbnRBdHRyaWJ1dGVCaXRzIGF0dHJzLCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQog
ICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAgICAgdW5zaWduZWQgY2hhciBhdHRyWzRd
Ow0KICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f
aW50X3NldF9maWxlX2F0dHJpYnV0ZXMoKSBjYWxsZWQgZm9yICclcycgJyVzJywgYXR0cmlidXRl
cyAweCV4IiwNCiAgICAgICAgICAgICAgICAgIGRpciwgZmlsZSwgYXR0cnMpOw0KDQogICAgICAg
IGF0dHJbMF0gPSBhdHRyWzFdID0gYXR0clsyXSA9IDA7DQogICAgICAgIGF0dHJbM10gPSBhdHRy
czsNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAg
ICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fu
b25fdXNiX3NldF9maWxlX2F0dHJpYnV0ZXMgKCBjYW1lcmEsIGF0dHJzLCBkaXIsIGZpbGUsIGNv
bnRleHQgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg
IGNhc2UgR1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5v
bl9zZXJpYWxfZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHhlLCAweDExLCAmbGVuLCBhdHRy
LCA0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAoZmlsZSkgKyAxLCBOVUxMKTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKSB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbm9uX3NlcmlhbF9lcnJvcl90eXBlIChjYW1lcmEpOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCiAgICAgICAg
aWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9z
ZXRfZmlsZV9hdHRyaWJ1dGVzOiBVbmV4cGVjdGVkIGxlbmd0aCByZXR1cm5lZCAiDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICIoZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDB4NCwgbGVuKTsNCiAg
ICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0N
Cg0KICAgICAgICBHUF9MT0dfREFUQSAoKGNoYXIgKiltc2csIDQsDQogICAgICAgICAgICAgICAg
ICAgICAiY2Fub25faW50X3NldF9maWxlX2F0dHJpYnV0ZXM6IHJldHVybmVkIGZvdXIgYnl0ZXMg
YXMgZXhwZWN0ZWQsICINCiAgICAgICAgICAgICAgICAgICAgICJ3ZSBzaG91bGQgY2hlY2sgaWYg
dGhleSBpbmRpY2F0ZSBlcnJvciBvciBub3QuIFJldHVybmVkIGRhdGE6Iik7DQoNCiAgICAgICAg
cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFt
cw0KICogQGNhbWVyYTogdGhlIGNhbWVyYSB0byB3b3JrIG9uDQogKiBAY29udGV4dDogdGhlIGNv
bnRleHQgdG8gcHJpbnQgb24gZXJyb3INCiAqDQogKiBSZWFkcyB0aGUgY2FtZXJhJ3MgcmVsZWFz
ZSBwYXJhbWV0ZXJzIChJU08sIGFwZXJ0dXJlLCBzaHV0dGVyIHNwZWVkLCBldGMpDQogKg0KICog
UmlnaHQgbm93IHRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gYW4gRU9TIDVEIHZpYSBVU0Iu
DQogKiBOb3RlIHRoYXQgdGhlIGNhbWVyYSBtdXN0IGJlIHVuZGVyIFVTQiBjb250cm9sIHZpYQ0K
ICogY2Fub25faW50X3N0YXJ0X3JlbW90ZV9jb250cm9sKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBm
dW5jdGlvbi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmlu
dA0KY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoQ2FtZXJhICpjYW1lcmEsIEdQQ29udGV4
dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqcmVzcG9uc2UgPSBOVUxMOw0K
ICAgICAgICB1bnNpZ25lZCBpbnQgbGVuID0gMHg4YzsNCiAgICAgICAgdW5zaWduZWQgaW50IGk7
DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0
X3JlbGVhc2VfcGFyYW1zKCkiKTsNCg0KICAgICAgICAvKiBjYW5vbl9pbnRfc3RhcnRfcmVtb3Rl
X2NvbnRyb2woKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUNCiAgICAgICAgICAgdGhpcyBmdW5jdGlv
biAqLw0KICAgICAgICBpZiAoIWNhbWVyYS0+cGwtPnJlbW90ZV9jb250cm9sKSB7DQogICAgICAg
ICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zOiBDYW1lcmEg
bm90IHVuZGVyIFVTQiBjb250cm9sIik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9S
Ow0KICAgICAgICB9DQoNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0K
ICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZSAoY2FtZXJhLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENBTk9OX1VTQl9DT05UUk9MX0dFVF9QQVJBTVMsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMCwgJnJlc3BvbnNl
LCAmbGVuKTsNCgkJCWlmICggc3RhdHVzICE9IEdQX09LICkNCgkJCQlyZXR1cm4gc3RhdHVzOw0K
DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlID09IE5VTEwgKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S
VF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NV
UFBPUlRFRDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg
IEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAobGVuICE9IDB4OGMp
IHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJh
bXM6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJldHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIihleHBlY3RlZCAlaSBnb3QgJWkpIiwgMHg4YywgbGVuKTsNCiAgICAgICAgICAgICAgICBy
ZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KDQogICAgICAgIC8q
DQogICAgICAgICAqIDB4NWMgaXMgdGhlIG9mZnNldCB0byB0aGUgY2FtZXJhIHBhcmFtZXRlcnMg
aW4gdGhlDQogICAgICAgICAqIGdldCByZWxlYXNlIHBhcmFtcyByZXNwb25zZSBkYXRhDQogICAg
ICAgICAqLw0KICAgICAgICBtZW1jcHkoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMsIHJlc3Bv
bnNlICsgMHg1YywNCiAgICAgICAgICAgICAgIHNpemVvZihjYW1lcmEtPnBsLT5yZWxlYXNlX3Bh
cmFtcykpOw0KDQoJZm9yIChpPTA7aTxzaXplb2YoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMp
O2krKykgew0KCQlHUF9ERUJVRygiY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtczogWyVkXSA9
IDB4JTAyeCIsIGksIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW2ldKTsNCgl9DQoNCiAgICAg
ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zOiBzaHV0dGVyIHNwZWVk
ID0gMHglMDJ4IiwNCiAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1z
W1NIVVRURVJTUEVFRF9JTkRFWF0pOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dl
dF9yZWxlYXNlX3BhcmFtczogYXBlcnR1cmUgPSAweCUwMngiLA0KICAgICAgICAgICAgICAgICAg
Y2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdKTsNCg0KICAgICAgICBH
UF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGlzbyA9IDB4JTAyeCIsDQog
ICAgICAgICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdKTsN
Cg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGZvY3Vz
IG1vZGUgPSAweCUwMngiLA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9w
YXJhbXNbRk9DVVNfTU9ERV9JTkRFWF0pOw0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50
X2dldF9yZWxlYXNlX3BhcmFtczogYmVlcCBtb2RlID0gMHglMDJ4IiwNCiAgICAgICAgICAgICAg
ICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0JFRVBfSU5ERVhdKTsNCg0KICAgICAgICBH
UF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IGZsYXNoIG1vZGUgPSAweCUw
MngiLA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbRkxBU0hf
SU5ERVhdKTsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJh
bXM6IGV4cG9zdXJlYmlhcyA9IDB4JTAyeCIsDQogICAgICAgICAgICAgICAgICBjYW1lcmEtPnBs
LT5yZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdKTsNCg0KICAgICAgICBHUF9ERUJV
RyAoImNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXM6IHNob290aW5nIG1vZGUgPSAweCUwMngi
LA0KICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbU0hPT1RJTkdf
TU9ERV9JTkRFWF0pOw0KDQoNCiAgICAgICAgY2FtZXJhLT5wbC0+c2Vjb25kYXJ5X2ltYWdlID0g
MDsNCgkvKiBCYXNlZCBvbiB0aGUgaW1hZ2UgZm9ybWF0IHNldHRpbmdzIGluIHRoZSByZWxlYXNl
IHBhcmFtcywNCgkgICBkZXRlcm1pbmUgd2hldGhlciB3ZSBleHBlY3Qgb25lIG9yIHR3byBpbWFn
ZXMgdG8gYmUgcmV0dXJuZWQNCgkgICBieSB0aGUgY2FtZXJhLg0KICAgICAgICAgICBJIGFtIG5v
dCBzdXJlIGlmIHRoaXMgd2lsbCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLUVPUyA1RA0KICAgICAg
ICAgICBjYW1lcmFzIC0gSSB3b3VsZCBhcHByZWNpYXRlIHRlc3RpbmcgZmVlZGJhY2sgZnJvbSBv
dGhlcg0KICAgICAgICAgICBDYW5vbiBjYW1lcmEgdXNlcnMuICBUbyB0ZXN0IHRyeSBjYXB0dXJp
bmcgYW4gaW1hZ2UNCiAgICAgICAgICAgdG8gdGhlIGhvc3QgY29tcHV0ZXIgaW4gYSBzaW5nbGUg
Zm9ybWF0IChlLmcuLCBSQVcgb3IgTGFyZ2UgRmluZQ0KICAgICAgICAgICBKUEVHKS4gIEFsc28g
dHJ5IGNhcHR1cmluZyBhbiBpbWFnZSB3aGVuIHRoZSBjYW1lcmEgaXMgc2V0IHRvDQogICAgICAg
ICAgIGEgZHVhbCBmb3JtYXQsIGUuZy4sIFJBVyArIExhcmdlIEZpbmUgSlBFRy4gTm90ZSB0aGF0
IGN1cnJlbnRseSwgd2UNCiAgICAgICAgICAgb25seSBzYXZlIHRoZSBwcmltYXJ5IGltYWdlIHRv
IGRpc2suDQogICAgICAgICAgIFRoYW5rcyAtIDxwYXVsQGJvb3lha2EuY29tPg0KICAgICAgICAq
Lw0KCWlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfMl9JTkRFWF0g
JiAweGYwKQ0KCQljYW1lcmEtPnBsLT5zZWNvbmRhcnlfaW1hZ2UgPSAxOw0KDQogICAgICAgIHJl
dHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9zZXRfc2h1dHRlcl9zcGVlZA0K
ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQHNodXR0ZXJfc3BlZWQ6IHNodXR0
ZXIgc3BlZWQgLSB1c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAg
ICAgICBTSFVUVEVSX1NQRUVEXzFfMTUgZm9yIDEvMTV0aCBvZiBhIHNlY29uZCwgZXRjLg0KICog
QGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNh
bWVyYSdzIHNodXR0ZXIgc3BlZWQuICBPbmx5IHRlc3RlZCBmb3IgRU9TIDVEIHZpYSBVU0IuDQog
Kg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2lu
dF9zZXRfc2h1dHRlcl9zcGVlZCAoQ2FtZXJhICpjYW1lcmEsIGNhbm9uU2h1dHRlclNwZWVkU3Rh
dGUgc2h1dHRlcl9zcGVlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0
ICpjb250ZXh0KQ0Kew0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAgICAgIEdQX0RFQlVHICgi
Y2Fub25faW50X3NldF9zaHV0dGVyX3NwZWVkKCkgY2FsbGVkIGZvciBzcGVlZCAweCUwMngiLA0K
ICAgICAgICAgICAgICAgICAgc2h1dHRlcl9zcGVlZCk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBj
dXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n
ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1
cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KDQogICAgICAgIC8qIE1v
ZGlmeSB0aGUgc2h1dHRlciBzcGVlZCAqLw0KDQogICAgICAgIC8qIFhYWCBtdXN0IHRlc3QgZm9y
IHZhbGlkIHNodXR0ZXIgc3BlZWRzIGhlcmUgKi8NCiAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFz
ZV9wYXJhbXNbU0hVVFRFUlNQRUVEX0lOREVYXSA9IHNodXR0ZXJfc3BlZWQ7DQoNCiAgICAgICAg
LyogVXBsb2FkIHRoZSBzaHV0dGVyIHNwZWVkIHRvIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3Rh
dHVzID0gY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0K
ICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0K
DQogICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAg
ICAgc3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0
KTsNCg0KICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dHVzOw0KDQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tTSFVUVEVSU1BF
RURfSU5ERVhdICE9IHNodXR0ZXJfc3BlZWQpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAo
ImNhbm9uX2ludF9zZXRfc2h1dHRlcl9zcGVlZDogQ291bGQgbm90IHNldCBzaHV0dGVyICINCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgInNwZWVkIHRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVk
IDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0dGVyX3NwZWVkLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tTSFVUVEVS
U1BFRURfSU5ERVhdKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NVUFBP
UlRFRDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9u
X2ludF9zZXRfc2h1dHRlcl9zcGVlZDogc2h1dHRlciBzcGVlZCBjaGFuZ2UgdmVyaWZpZWQiKTsN
CiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9zaHV0dGVyX3Nw
ZWVkKCkgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5Iik7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0K
fQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9iZWVwDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8g
d29yayB3aXRoDQogKiBAYmVlcF9tb2RlOiBiZWVwIG1vZGUgLSB1c2Ugb25lIG9mIHRoZSBkZWZp
bmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAgICAgICBCRUVQX09OIGZvciB0dXJuaW5nIG9uIHRo
ZSBiZWVwIHdoZW4gdGhlIGNhbWVyYSBzZXRzIHRoZSBmb2N1cy4NCiAqIEBjb250ZXh0OiBjb250
ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTZXRzIHRoZSBjYW1lcmEncyBiZWVwIG1v
ZGUuIE9ubHkgdGVzdGVkIGZvciBBNDAgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8y
IGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9iZWVwIChDYW1lcmEgKmNh
bWVyYSwgY2Fub25CZWVwTW9kZSBiZWVwX21vZGUsDQogICAgICAgICAgICAgICAgICAgIEdQQ29u
dGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBHUF9ERUJV
RyAoImNhbm9uX2ludF9zZXRfYmVlcCgpIGNhbGxlZCBmb3IgYmVlcCAweCUwMngiLA0KICAgICAg
ICAgICAgICAgICAgYmVlcF9tb2RlKTsNCg0KICAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgY2Ft
ZXJhIHNldHRpbmdzICovDQoNCiAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNl
X3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAoc3RhdHVzIDwgMCkNCiAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIC8qIE1vZGlmeSB0aGUgYmVl
cCBtb2RlICovDQoNCiAgICAgICAgLyogWFhYIG11c3QgdGVzdCBmb3IgdmFsaWQgc2h1dHRlciBz
cGVlZHMgaGVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tCRUVQX0lO
REVYXSA9IGJlZXBfbW9kZTsNCg0KICAgICAgICAvKiBVcGxvYWQgdGhlIGJlZXAgbW9kZSB0byB0
aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJh
bXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGNhbWVy
YSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFz
ZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQog
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+
cmVsZWFzZV9wYXJhbXNbQkVFUF9JTkRFWF0gIT0gYmVlcF9tb2RlKSB7DQogICAgICAgICAgICAg
ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2JlZXA6IENvdWxkIG5vdCBzZXQgYmVlcCAiDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RlIHRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVk
IDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVwX21vZGUsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0JFRVBfSU5ERVhd
KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NVUFBPUlRFRDsNCiAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfYmVl
cDogYmVlcCBtb2RlIGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1Bf
REVCVUcgKCJjYW5vbl9pbnRfc2V0X2JlZXAoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0K
ICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X3NldF9mbGFzaA0K
ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQGZsYXNoX21vZGU6IGZsYXNoIG1v
ZGUgLSB1c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMNCiAqICAgICAgICAgICAgICAgICBG
TEFTSF9NT0RFX09GRiBmb3IgdHVybmluZyBvZmYgdGhlIGZsYXNoLg0KICogQGNvbnRleHQ6IGNv
bnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIGZsYXNo
IG1vZGUuIE9ubHkgdGVzdGVkIGZvciBBNDAgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhv
dG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9mbGFzaCAoQ2FtZXJh
ICpjYW1lcmEsIGNhbm9uRmxhc2hNb2RlIGZsYXNoX21vZGUsDQogICAgICAgICAgICAgICAgICAg
ICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAg
R1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2ZsYXNoKCkgY2FsbGVkIGZvciBmbGFzaCAweCUwMngi
LA0KICAgICAgICAgICAgICAgICAgZmxhc2hfbW9kZSk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBj
dXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n
ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1
cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNb2Rp
ZnkgdGhlIGJlZXAgbW9kZSAqLw0KDQogICAgICAgIC8qIFhYWCBtdXN0IHRlc3QgZm9yIHZhbGlk
IGZsYXNoIG1vZGUgaGVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tG
TEFTSF9JTkRFWF0gPSBmbGFzaF9tb2RlOw0KDQogICAgICAgIC8qIFVwbG9hZCB0aGUgZmxhc2gg
bW9kZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9zZXRfcmVs
ZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDAp
DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICAvKiBNYWtlIHN1cmUg
dGhlIGNhbWVyYSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9n
ZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1
cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KICAgICAgICBpZiAoY2Ft
ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbRkxBU0hfSU5ERVhdICE9IGZsYXNoX21vZGUpIHsNCiAg
ICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZmxhc2g6IENvdWxkIG5vdCBz
ZXQgZmxhc2ggIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kZSB0byAweCUwMnggKGNh
bWVyYSByZXR1cm5lZCAweCUwMngpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhc2hf
bW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJh
bXNbRkxBU0hfSU5ERVhdKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfTk9UX1NV
UFBPUlRFRDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNh
bm9uX2ludF9zZXRfZmxhc2g6IGZsYXNoIG1vZGUgY2hhbmdlIHZlcmlmaWVkIik7DQogICAgICAg
IH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZmxhc2goKSBmaW5pc2hlZCBz
dWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCg0KLyoqDQogKiBj
YW5vbl9pbnRfc2V0X3pvb20NCiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgNCiAqIEB6
b29tX2xldmVsOiB6b29tIGxldmVsIHRvIHNldCAtIEE0MDogMS4uMTA7IEcxOiAwLi40MCAocE1h
eE9wdGljYWxab29tUG9zKjQpDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0
aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgem9vbS4gT25seSB0ZXN0ZWQgZm9yIEE0MCBh
bmQgRzEgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQog
Ki8NCmludA0KY2Fub25faW50X3NldF96b29tIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hh
ciB6b29tX2xldmVsLA0KICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7
DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0
X3pvb20oKSBjYWxsZWQgZm9yIHpvb20gMHglMDJ4IiwNCiAgICAgICAgICAgICAgICAgIHpvb21f
bGV2ZWwpOw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9kb19jb250cm9sX2NvbW1hbmQo
IGNhbWVyYSwgQ0FOT05fVVNCX0NPTlRST0xfU0VUX1pPT01fUE9TLCAweDA0LCB6b29tX2xldmVs
ICk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfem9vbSgpIGZpbmlzaGVk
IHN1Y2Nlc3NmdWxseSIpOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAq
IGNhbm9uX2ludF9nZXRfem9vbQ0KICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICog
QHpvb21fbGV2ZWw6IHBvaW50ZXIgdG8gaG9sZCByZXR1cm5lZCB6b29tIGxldmVsIC0gQTQwOiAx
Li4xMDsgRzE6IDAuLjQwIChwTWF4T3B0aWNhbFpvb21Qb3MqNCkNCiAqIEB6b29tX21heDogcG9p
bnRlciB0byBob2xkIHpvb20gdXBwZXIgYm91bmQNCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBl
cnJvciByZXBvcnRpbmcNCiAqDQogKiBHZXRzIHRoZSBjYW1lcmEncyB6b29tLg0KICogVGVzdGVk
IG9ubHkgZm9yIEcxIGFuZCBTNDUgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVy
cm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF96b29tIChDYW1lcmEgKmNhbWVy
YSwNCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqem9vbV9sZXZlbCwNCiAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqem9vbV9tYXgsDQogICAgICAgICAgICAgICAg
ICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqbXNnID0g
TlVMTDsNCiAgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4gPSAwOw0KICAgICAgICB1bnNpZ25l
ZCBjaGFyIHBheWxvYWRbMHg0Y107DQogICAgICAgIGludCBwYXlsb2FkbGVuOw0KICAgICAgICBj
aGFyIGRlc2NbMTI4XTsNCg0KICAgICAgICAqem9vbV9sZXZlbCA9IDA7DQogICAgICAgICp6b29t
X21heCA9IDA7DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X2dldF96b29tKCkgY2FsbGVk
Iik7DQoNCiAgICAgICAgcGF5bG9hZGxlbiA9IGNhbm9uX2ludF9wYWNrX2NvbnRyb2xfc3ViY21k
KCBwYXlsb2FkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENBTk9OX1VTQl9DT05UUk9MX0dFVF9aT09NX1BPUywNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBkZXNjICk7DQoNCiAgICAg
ICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9kZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAg
ICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEgZGlmZmVyZW50IGNvZGUsIGJ1dCB3
aXRoIHNhbWUNCiAgICAgICAgICAgICAgICAgKiByZXNwb25zZS4gSXQgYWxzbyBuZWVkcyBhbiBl
eHRyYSB6ZXJvIGJ5dGUgYXQgdGhlDQogICAgICAgICAgICAgICAgICogZW5kLiAqLw0KICAgICAg
ICAgICAgICAgIHBheWxvYWRbcGF5bG9hZGxlbisrXSA9IDA7DQogICAgICAgICAgICAgICAgbXNn
ID0gY2Fub25fdXNiX2RpYWxvZ3VlICggY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENBTk9OX1VTQl9GVU5DVElPTl9DT05UUk9MX0NBTUVSQV8yLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhbGVuLCBwYXls
b2FkLCBwYXlsb2FkbGVuICk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoIGNhbWVyYSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVOQ1RJT05fQ09OVFJPTF9DQU1F
UkEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4s
IHBheWxvYWQsIHBheWxvYWRsZW4gKTsNCiAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAgfHwgZGF0
YWxlbiA8IDE1KSB7DQogICAgICAgICAgICAgICAgLyogRVJST1IgKi8NCiAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoIiVzIGRhdGFsZW49JXgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXNjLCBkYXRhbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVE
X0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICAqem9vbV9sZXZlbCA9IG1zZ1sxMl07DQogICAg
ICAgICp6b29tX21heCA9IG1zZ1sxNF07DQoNCiAgICAgICAgbXNnID0gTlVMTDsNCiAgICAgICAg
ZGF0YWxlbiA9IDA7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3pvb20oKSBm
aW5pc2hlZCBzdWNjZXNzZnVsbHkgbGV2ZWw9JWQiLCAqem9vbV9sZXZlbCk7DQoNCiAgICAgICAg
cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9pbWFnZV9mb3JtYXQN
CiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgNCiAqIEByZXNfYnl0ZTE6IGJ5dGUgMSBv
ZiB0aGUgMy1ieXRlIGltYWdlIGZvcm1hdCBjb2RlDQogKiBAcmVzX2J5dGUyOiBieXRlIDIgb2Yg
dGhlIDMtYnl0ZSBpbWFnZSBmb3JtYXQgY29kZQ0KICogQHJlc19ieXRlMzogYnl0ZSAzIG9mIHRo
ZSAzLWJ5dGUgaW1hZ2UgZm9ybWF0IGNvZGUNCiAqDQogKiBAY29udGV4dDogY29udGV4dCBmb3Ig
ZXJyb3IgcmVwb3J0aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgb3V0cHV0IGltYWdlIGZv
cm1hdC4gIE9ubHkgdGVzdGVkIGZvciBFT1MgNUQgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5zOiBn
cGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9pbWFnZV9mb3Jt
YXQgKENhbWVyYSAqY2FtZXJhLCB1bnNpZ25lZCBjaGFyIHJlc19ieXRlMSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXNfYnl0ZTIsIHVuc2lnbmVkIGNoYXIgcmVz
X2J5dGUzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7
DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0
X2ltYWdlX2Zvcm1hdCgpIGNhbGxlZCIpOw0KDQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBj
YW1lcmEgc2V0dGluZ3MgKi8NCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZ2V0X3JlbGVh
c2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0K
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTW9kaWZ5IHRoZSBp
bWFnZSBmb3JtYXQgKi8NCg0KICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFH
RV9GT1JNQVRfMV9JTkRFWF0gPSByZXNfYnl0ZTE7DQogICAgICAgIGNhbWVyYS0+cGwtPnJlbGVh
c2VfcGFyYW1zW0lNQUdFX0ZPUk1BVF8yX0lOREVYXSA9IHJlc19ieXRlMjsNCiAgICAgICAgY2Ft
ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbSU1BR0VfRk9STUFUXzNfSU5ERVhdID0gcmVzX2J5dGUz
Ow0KDQoNCgkJLyogVXBsb2FkIHRoZSBpbWFnZV9mb3JtYXQgdG8gdGhlIGNhbWVyYSAqLw0KICAg
ICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRl
eHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0dXM7DQoNCiAgICAgICAgLyogSXQgc2VlbXMgdG8gdGFrZSB0aGUgY2FtZXJhIGJvZHkgYSB3
aGlsZSB0byBjaGFuZ2UgdGhpcyBwYXJhbWV0ZXINCiAgICAgICAgICAgd2hlbiBhbGwgdGhyZWUg
cmVzX2J5dGVzIGFyZSBjaGFuZ2VkIGF0IG9uY2UuDQogICAgICAgICAgIFNvLCBnaXZlIHRoZSBj
YW1lcmEgYSBjaGFuY2UgdG8gY2F0Y2ggdXAuDQogICAgICAgICAgIDM3NTAgdXMgd2FzIG9jY2Fz
aW9uYWxseSB0b28gc2hvcnQsIGJ1dCA1MDAwIHVzIHNlZW1zIHRvDQogICAgICAgICAgIHdvcmsg
d2VsbC4gKi8NCiAgICAgICAgdXNsZWVwKDUwMDApOw0KDQogICAgICAgIC8qIE1ha2Ugc3VyZSB0
aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAgICAgc3RhdHVzID0gY2Fub25faW50X2dl
dF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAoc3RhdHVz
IDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIGlmIChjYW1l
cmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfMV9JTkRFWF0gIT0gcmVzX2J5dGUx
IHx8DQogICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRf
Ml9JTkRFWF0gIT0gcmVzX2J5dGUyIHx8DQogICAgICAgICAgICBjYW1lcmEtPnBsLT5yZWxlYXNl
X3BhcmFtc1tJTUFHRV9GT1JNQVRfM19JTkRFWF0gIT0gcmVzX2J5dGUzKSB7DQogICAgICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaW1hZ2VfZm9ybWF0OiBDb3VsZCBub3Qgc2V0IGlt
YWdlIGZvcm1hdCAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJ0byAweCUwMnggMHglMDJ4
IDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCAweCUwMnggMHglMDJ4KSIsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc19ieXRlMSwgcmVzX2J5dGUyLCByZXNfYnl0ZTMsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0lNQUdFX0ZP
Uk1BVF8xX0lOREVYXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+cmVs
ZWFzZV9wYXJhbXNbSU1BR0VfRk9STUFUXzJfSU5ERVhdLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJTUFHRV9GT1JNQVRfM19JTkRFWF0pOw0K
ICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9IGVs
c2Ugew0KICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2ltYWdlX2Zvcm1hdDog
aW1hZ2VfZm9ybWF0IGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1Bf
REVCVUcgKCJjYW5vbl9pbnRfc2V0X2ltYWdlX2Zvcm1hdCgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxs
eSIpOw0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9z
ZXRfaXNvDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAaXNvOiBJU08gLSB1
c2Ugb25lIG9mIHRoZSBkZWZpbmVzIHN1Y2ggYXMgSVNPXzQwMCwgZXRjLg0KICogQGNvbnRleHQ6
IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIElT
TyBzcGVlZC4gIE9ubHkgdGVzdGVkIGZvciBFT1MgNUQgdmlhIFVTQi4NCiAqDQogKiBSZXR1cm5z
OiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9pc28gKENh
bWVyYSAqY2FtZXJhLCBjYW5vbklzb1N0YXRlIGlzbywNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAg
ICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9pc28oKSBjYWxsZWQgZm9yIElTTyAweCUwMngi
LCBpc28pOw0KDQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8N
Cg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZ2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEs
IGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTW9kaWZ5IHRoZSBJU08gKi8NCg0KICAgICAgICBj
YW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdID0gaXNvOw0KDQogICAgICAgIC8q
IFVwbG9hZCB0aGUgSVNPIHRvIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3RhdHVzID0gY2Fub25f
aW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAgICBpZiAo
c3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAgICAgIC8q
IE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQoNCiAgICAgICAgc3RhdHVzID0g
Y2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsNCg0KICAgICAg
ICBpZiAoc3RhdHVzIDwgMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KDQogICAg
ICAgIGlmIChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tJU09fSU5ERVhdICE9IGlzbykgew0K
ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9pc286IENvdWxkIG5vdCBz
ZXQgSVNPICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIDB4JTAyeCAoY2FtZXJhIHJl
dHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpc28sIGNhbWVyYS0+
cGwtPnJlbGVhc2VfcGFyYW1zW0lTT19JTkRFWF0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBH
UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaXNvOiBJU08gY2hhbmdlIHZlcmlmaWVkIik7DQog
ICAgICAgIH0NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfaXNvKCkgZmluaXNo
ZWQgc3VjY2Vzc2Z1bGx5Iik7DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0K
ICogY2Fub25faW50X3NldF9zaG9vdGluZ19tb2RlDQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29y
ayB3aXRoDQogKiBAc2hvb3RpbmdfbW9kZTogdXNlIHRoZSB1bnNpZ25lZCBjaGFyIDhiaXQgdmFs
dWUgaW4gdGhlIGFycmF5DQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5n
DQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3Mgc2hvb3RpbmcgbW9kZS4NCiAqDQogKiBSZXR1cm5z
OiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X3NldF9zaG9vdGlu
Z19tb2RlIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hhciBzaG9vdGluZ19tb2RlLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAg
IGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X3Nob290aW5n
X21vZGUoKSBjYWxsZWQgZm9yIHNob290aW5nX21vZGUgMHglMDJ4Iiwgc2hvb3RpbmdfbW9kZSk7
DQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8NCiAgICAgICAg
c3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsN
CiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsN
CiAgICAgICAgLyogTW9kaWZ5IHRoZSBzaG9vdGluZyBtb2RlICovDQogICAgICAgIGNhbWVyYS0+
cGwtPnJlbGVhc2VfcGFyYW1zW1NIT09USU5HX01PREVfSU5ERVhdID0gc2hvb3RpbmdfbW9kZTsN
CiAgICAgICAgLyogVXBsb2FkIHRoZSBzaG9vdGluZyBtb2RlIHRvIHRoZSBjYW1lcmEgKi8NCiAg
ICAgICAgc3RhdHVzID0gY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250
ZXh0KTsNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXR1czsNCiAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBjYW1lcmEgY2hhbmdlZCBpdCEgKG5vdCBh
bGwgYXJlIGFibGUgdG8pICovDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFz
ZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlmIChzdGF0dXMgPCAwKQ0KICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIGlmIChjYW1lcmEtPnBsLT5yZWxl
YXNlX3BhcmFtc1tTSE9PVElOR19NT0RFX0lOREVYXSAhPSBzaG9vdGluZ19tb2RlKSB7DQogICAg
ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X3Nob290aW5nX21vZGU6IENvdWxk
IG5vdCBzZXQgc2hvb3RpbmcgbW9kZSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJ0byAw
eCUwMnggKGNhbWVyYSByZXR1cm5lZCAweCUwMngpIiwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hvb3RpbmdfbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhLT5wbC0+
cmVsZWFzZV9wYXJhbXNbU0hPT1RJTkdfTU9ERV9JTkRFWF0pOw0KICAgICAgICAgICAgICAgIHJl
dHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg
ICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfc2hvb3RpbmdfbW9kZTogc2hvb3Rpbmdf
bW9kZSBjaGFuZ2UgdmVyaWZpZWQiKTsNCiAgICAgICAgfQ0KICAgICAgICBHUF9ERUJVRyAoImNh
bm9uX2ludF9zZXRfc2hvb3RpbmdfbW9kZSgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSIpOw0KICAg
ICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCg0KLyoqDQogKiBjYW5vbl9pbnRfc2V0X2FwZXJ0dXJl
DQogKiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAYXBlcnR1cmU6IHVzZSBvbmUg
b2YgdGhlIGRlZmluZXMgc3VjaCBhcyBBUEVSVFVSRV9GNV82LCBldGMuDQogKiBAY29udGV4dDog
Y29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogU2V0cyB0aGUgY2FtZXJhJ3MgYXBl
cnR1cmUuICBPbmx5IHRlc3RlZCBmb3IgRU9TIDVEIHZpYSBVU0IuDQogKg0KICogUmV0dXJuczog
Z3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9zZXRfYXBlcnR1cmUg
KENhbWVyYSAqY2FtZXJhLCBjYW5vbkFwZXJ0dXJlU3RhdGUgYXBlcnR1cmUsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHN0
YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfYXBlcnR1cmUoKSBjYWxs
ZWQgZm9yIGFwZXJ0dXJlIDB4JTAyeCIsDQogICAgICAgICAgICAgICAgICBhcGVydHVyZSk7DQoN
CiAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAg
IHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7
DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1
czsNCg0KICAgICAgICAvKiBNb2RpZnkgdGhlIGFwZXJ0dXJlICovDQoNCiAgICAgICAgY2FtZXJh
LT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdID0gYXBlcnR1cmU7DQoNCiAgICAg
ICAgLyogVXBsb2FkIHRoZSBhcGVydHVyZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1
cyA9IGNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAg
ICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0K
ICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGNhbWVyYSBjaGFuZ2VkIGl0ISAqLw0KDQogICAgICAg
IHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7
DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1
czsNCg0KICAgICAgICBpZiAoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5E
RVhdICE9IGFwZXJ0dXJlKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf
c2V0X2FwZXJ0dXJlOiBDb3VsZCBub3Qgc2V0IGFwZXJ0dXJlICINCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcGVydHVyZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2Ft
ZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXNbQVBFUlRVUkVfSU5ERVhdKTsNCiAgICAgICAgICAgICAg
ICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfc2V0X2FwZXJ0dXJlOiBhcGVydHVyZSBj
aGFuZ2UgdmVyaWZpZWQiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f
aW50X3NldF9hcGVydHVyZSgpIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSIpOw0KDQogICAgICAgIHJl
dHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGNhbm9uX2ludF9zZXRfZXhwb3N1cmViaWFzDQog
KiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAYXBlcnR1cmU6IHVzZSB0aGUgdW5z
aWduZWQgY2hhciA4Yml0IHZhbHVlIGluIHRoZSBhcnJheQ0KICogQGNvbnRleHQ6IGNvbnRleHQg
Zm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIGV4cG9zdXJlIGJp
YXMuDQogKg0KICogUmV0dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNh
bm9uX2ludF9zZXRfZXhwb3N1cmViaWFzIChDYW1lcmEgKmNhbWVyYSwgdW5zaWduZWQgY2hhciBl
eHBiaWFzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQp
DQp7DQogICAgICAgIGludCBzdGF0dXM7DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf
c2V0X2V4cG9zdXJlYmlhcygpIGNhbGxlZCBmb3IgYXBlcnR1cmUgMHglMDJ4IiwgZXhwYmlhcyk7
DQogICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgKi8NCiAgICAgICAg
c3RhdHVzID0gY2Fub25faW50X2dldF9yZWxlYXNlX3BhcmFtcyAoY2FtZXJhLCBjb250ZXh0KTsN
CiAgICAgICAgaWYgKHN0YXR1cyA8IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsN
CiAgICAgICAgLyogTW9kaWZ5IHRoZSBhcGVydHVyZSAqLw0KICAgICAgICBjYW1lcmEtPnBsLT5y
ZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdID0gZXhwYmlhczsNCiAgICAgICAgLyog
VXBsb2FkIHRoZSBhcGVydHVyZSB0byB0aGUgY2FtZXJhICovDQogICAgICAgIHN0YXR1cyA9IGNh
bm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlm
IChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIC8q
IE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGNoYW5nZWQgaXQhICovDQogICAgICAgIHN0YXR1cyA9IGNh
bm9uX2ludF9nZXRfcmVsZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQogICAgICAgIGlm
IChzdGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQogICAgICAgIGlm
IChjYW1lcmEtPnBsLT5yZWxlYXNlX3BhcmFtc1tFWFBPU1VSRUJJQVNfSU5ERVhdICE9IGV4cGJp
YXMpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZXhwb3N1cmVi
aWFzOiBDb3VsZCBub3Qgc2V0IGV4cG9zdXJlIGJpYXMgIg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAidG8gMHglMDJ4IChjYW1lcmEgcmV0dXJuZWQgMHglMDJ4KSIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGJpYXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS0+
cGwtPnJlbGVhc2VfcGFyYW1zW0VYUE9TVVJFQklBU19JTkRFWF0pOw0KICAgICAgICAgICAgICAg
IHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAg
ICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZXhwb3N1cmViaWFzOiBleHBiaWFz
IGNoYW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25f
aW50X3NldF9leHBvc3VyZWJpYXMoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCiAgICAgICAg
cmV0dXJuIEdQX09LOw0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X3NldF9mb2N1c19tb2RlDQog
KiBAY2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAZm9jdXNfbW9kZTogdXNlIG9uZSBv
ZiB0aGUgZGVmaW5lcyBzdWNoIGFzIEFVVE9fRk9DVVNfQUlfU0VSVk8sIGV0Yy4NCiAqIEBjb250
ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTZXRzIHRoZSBjYW1lcmEn
cyBmb2N1cyBtb2RlLiAgTm90ZSB0aGF0IHRoZSBzZWxlY3Rpb24gb2YgZm9jdXMgbW9kZXMgaXMN
CiAqIGxpbWl0ZWQgYnkgdGhlIEFGL01GIHN3aXRjaCBvbiB0aGUgbGVucyBib2R5LiAgSW4gcGFy
dGljdWxhciwgdGhpcyBmdW5jdGlvbg0KICogaXMgb25seSB1c2VmdWwgZm9yIHN3aXRjaGluZyBi
ZXR3ZWVuIHRoZSB2YXJpb3VzIGF1dG9mb2N1cyBtb2RlcyB3aGlsZSB0aGUNCiAqIGxlbnMgZm9j
dXMgc3dpdGNoIGlzIHNldCB0byAnQUYnLiAgT25seSB0ZXN0ZWQgZm9yIEVPUyA1RCB2aWEgVVNC
Lg0KICoNCiAqIFJldHVybnM6IGdwaG90bzIgZXJyb3IgY29kZQ0KICoNCiAqLw0KaW50DQpjYW5v
bl9pbnRfc2V0X2ZvY3VzX21vZGUgKENhbWVyYSAqY2FtZXJhLCBjYW5vbkZvY3VzTW9kZVN0YXRl
IGZvY3VzX21vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQ29udGV4dCAqY29u
dGV4dCkNCnsNCiAgICAgICAgaW50IHN0YXR1czsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9u
X2ludF9zZXRfZm9jdXNfbW9kZSgpIGNhbGxlZCBmb3IgZm9jdXMgbW9kZSAweCUwMngiLA0KICAg
ICAgICAgICAgICAgICAgZm9jdXNfbW9kZSk7DQoNCiAgICAgICAgLyogR2V0IHRoZSBjdXJyZW50
IGNhbWVyYSBzZXR0aW5ncyAqLw0KDQogICAgICAgIHN0YXR1cyA9IGNhbm9uX2ludF9nZXRfcmVs
ZWFzZV9wYXJhbXMgKGNhbWVyYSwgY29udGV4dCk7DQoNCiAgICAgICAgaWYgKHN0YXR1cyA8IDAp
DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCg0KDQogICAgICAgIC8qIE1vZGlmeSB0
aGUgZm9jdXMgbW9kZSAqLw0KDQogICAgICAgIGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0ZP
Q1VTX01PREVfSU5ERVhdID0gZm9jdXNfbW9kZTsNCg0KICAgICAgICAvKiBVcGxvYWQgdGhlIGZv
Y3VzIG1vZGUgdG8gdGhlIGNhbWVyYSAqLw0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfc2V0
X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChzdGF0dXMg
PCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgLyogTWFrZSBz
dXJlIHRoZSBjYW1lcmEgY2hhbmdlZCBpdCEgKi8NCg0KICAgICAgICBzdGF0dXMgPSBjYW5vbl9p
bnRfZ2V0X3JlbGVhc2VfcGFyYW1zIChjYW1lcmEsIGNvbnRleHQpOw0KDQogICAgICAgIGlmIChz
dGF0dXMgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQoNCiAgICAgICAgaWYg
KGNhbWVyYS0+cGwtPnJlbGVhc2VfcGFyYW1zW0ZPQ1VTX01PREVfSU5ERVhdICE9IGZvY3VzX21v
ZGUpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfZm9jdXNfbW9k
ZTogQ291bGQgbm90IHNldCBmb2N1c19tb2RlICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg
InRvIDB4JTAyeCAoY2FtZXJhIHJldHVybmVkIDB4JTAyeCkiLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb2N1c19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEtPnBs
LT5yZWxlYXNlX3BhcmFtc1tGT0NVU19NT0RFX0lOREVYXSk7DQogICAgICAgICAgICAgICAgcmV0
dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg
ICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9mb2N1c19tb2RlOiBmb2N1c19tb2RlIGNo
YW5nZSB2ZXJpZmllZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p
bnRfc2V0X2ZvY3VzX21vZGUoKSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICBy
ZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcw0K
ICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9y
IGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldHMgdGhlIGNhbWVyYSdzIHJlbGVhc2UgcGFyYW1z
IC0tICBlLmcuLCBzaHV0dGVyIHNwZWVkLA0KICogYXBlcnR1cmUsIElTTyAtLSBiYXNlZCBvbiB0
aGUgY3VycmVudCBpbi1tZW1vcnkgc3RhdGUgZm9yIHRoZXNlIHBhcmFtcy4NCiAqDQogKiBSZXR1
cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCnN0YXRpYyBpbnQNCmNhbm9uX2ludF9z
ZXRfcmVsZWFzZV9wYXJhbXMgKENhbWVyYSAqY2FtZXJhLCBHUENvbnRleHQgKmNvbnRleHQpDQp7
DQogICAgICAgIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFsweDRjXTsNCiAgICAgICAgdW5zaWduZWQg
Y2hhciAqbXNnID0gTlVMTCwgKnRyYXNoX2hhbmRsZTsNCiAgICAgICAgdW5zaWduZWQgaW50IGxl
biwgcGF5bG9hZGxlbiwgdHJhc2hfaW50Ow0KICAgICAgICBpbnQgc3RhdHVzOw0KDQogICAgICAg
IEdQX0RFQlVHICgiY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFtcygpIGNhbGxlZCIpOw0KDQog
ICAgICAgIGlmICghY2FtZXJhLT5wbC0+cmVtb3RlX2NvbnRyb2wpIHsNCiAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfcmVsZWFzZV9wYXJhbXM6IENhbWVyYSBub3QgdW5k
ZXIgVVNCIGNvbnRyb2wiKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1I7DQogICAg
ICAgIH0NCg0KICAgICAgICBtZW1zZXQocGF5bG9hZCwgMCwgc2l6ZW9mKHBheWxvYWQpKTsNCg0K
ICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgY2FzZSBH
UF9QT1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyB3aGF0IHdlIG5lZWQg
Zm9yIENhbm9uIGNsYXNzIDYgY2FtZXJhcyAtDQogICAgICAgICAgICAgICAgICAgICAgIG5vdCBz
dXJlIHdoYXQgaXQgaXMgZm9yIHByZXZpb3VzIHByb3RvY29scyAqLw0KICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkWzB4MF0gPSBDQU5PTl9VU0JfQ09OVFJPTF9TRVRfWk9PTV9QT1M7DQogICAg
ICAgICAgICAgICAgICAgIHBheWxvYWRbMHg0XSA9IDB4MzA7DQoNCiAgICAgICAgICAgICAgICAg
ICAgLyogQ29weSB0aGUgcmVsZWFzZSBwYXJhbWV0ZXIgYmxvY2sgZnJvbSB0aGUgY2FtZXJhIHN0
YXRlDQogICAgICAgICAgICAgICAgICAgICAqIHN0cnVjdHVyZSBpbnRvIHRoZSBwYXlsb2FkLiAg
VGhlIDB4MDggaXMgdGhlIGJ5dGUgb2Zmc2V0DQogICAgICAgICAgICAgICAgICAgICAqIGludG8g
dGhlIHBheWxvYWQgd2hlcmUgdGhlIHJlbGVhc2UgcGFyYW1ldGVycyBzdGFydC4NCiAgICAgICAg
ICAgICAgICAgICAgICovDQogICAgICAgICAgICAgICAgICAgIG1lbWNweShwYXlsb2FkICsgMHgw
OCwgY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YoY2FtZXJhLT5wbC0+cmVsZWFzZV9wYXJhbXMpKTsNCg0KICAgICAgICAgICAgICAg
ICAgICBwYXlsb2FkbGVuID0gUkVMRUFTRV9QQVJBTVNfTEVOICsgMHgwODsNCg0KICAgICAgICAg
ICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZV9wYXlsb2Fk
IChjYW1lcmEsIHBheWxvYWQsIHBheWxvYWRsZW4sICZtc2csICZsZW4pOw0KDQogICAgICAgICAg
ICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCg0KICAgICAgICAgICAgICAgICAgICAv
KiBTZW5kIHRoZSBjYW1lcmEgYSBnZXRfcmVsZWFzZV9wYXJhbXMsIHRoZW4NCiAgICAgICAgICAg
ICAgICAgICAgICogc2VuZCB0aGUgc2V0X3JlbGVhc2VfcGFyYW1zIG9wIGFnYWluLg0KICAgICAg
ICAgICAgICAgICAgICAgKiBBcHBhcmVudGx5LCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHdo
aWNoIHJlcXVpcmUNCiAgICAgICAgICAgICAgICAgICAgICogdHdvICJzZXRzIiB0byB0YWtlIGVm
ZmVjdCBvbiB0aGUgQ2Fub24gRU9TIDVELg0KICAgICAgICAgICAgICAgICAgICAgKi8NCg0KICAg
ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9kaWFsb2d1ZSAo
Y2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0FOT05fVVNCX0NPTlRST0xfR0VUX1BBUkFNUywNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDAsICZ0
cmFzaF9oYW5kbGUsICZ0cmFzaF9pbnQpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKCBz
dGF0dXMgPCAwICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1I7
DQoNCg0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjYW5vbl9pbnRfZG9fY29udHJvbF9k
aWFsb2d1ZV9wYXlsb2FkIChjYW1lcmEsIHBheWxvYWQsIHBheWxvYWRsZW4sICZtc2csICZsZW4p
Ow0KDQogICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCg0KICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX05PVF9TVVBQT1JURUQ7DQogICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAgICAgIH0N
Cg0KICAgICAgICBpZiAobGVuICE9IDkyKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJj
YW5vbl9pbnRfc2V0X3JlbGVhc2VfcGFyYW1zOiBVbmV4cGVjdGVkIGxlbmd0aCByZXR1cm5lZCAi
DQogICAgICAgICAgICAgICAgICAgICAgICAgICIoZXhwZWN0ZWQgJWkgZ290ICVpKSIsIDkyLCBs
ZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAg
ICAgICAgfQ0KDQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF9yZWxlYXNlX3BhcmFt
cyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkiKTsNCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQoNCn0N
Cg0KLyoqDQogKiBjYW5vbl9pbnRfc2V0X293bmVyX25hbWU6DQogKiBAY2FtZXJhOiB0aGUgY2Ft
ZXJhIHRvIHNldCB0aGUgb3duZXIgbmFtZSBvZg0KICogQG5hbWU6IG93bmVyIG5hbWUgdG8gc2V0
IHRoZSBjYW1lcmEgdG8NCiAqIEBjb250ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcN
CiAqDQogKiBTZXRzIHRoZSBjYW1lcmEgb3duZXIgbmFtZS4gVGhlIHN0cmluZyBzaG91bGQgbm90
IGJlIG1vcmUgdGhhbiAzMA0KICogY2hhcmFjdGVycyBsb25nLiBXZSBjYWxsICNnZXRfb3duZXJf
bmFtZSBhZnRlcndhcmRzIGluIG9yZGVyIHRvDQogKiBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgd2Vu
dCBmaW5lLg0KICoNCiAqIFJldHVybnM6IGdwaG90bzIgZXJyb3IgY29kZQ0KICoNCiAqLw0KaW50
DQpjYW5vbl9pbnRfc2V0X293bmVyX25hbWUgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpu
YW1lLCBHUENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsN
CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2lu
dF9zZXRfb3duZXJfbmFtZSgpIGNhbGxlZCwgbmFtZSA9ICclcyciLCBuYW1lKTsNCiAgICAgICAg
aWYgKHN0cmxlbiAobmFtZSkgPiAzMCkgew0KICAgICAgICAgICAgICAgIGdwX2NvbnRleHRfZXJy
b3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTmFtZSAn
JXMnICglbGkgY2hhcmFjdGVycykgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRvbyBsb25nLCBtYXhpbXVtIDMwIGNoYXJhY3RlcnMgYXJlICINCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJhbGxvd2VkLiIpLCBuYW1lLCAobG9uZylzdHJsZW4gKG5h
bWUpKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQkFEX1BBUkFNRVRFUlM7DQog
ICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAg
ICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNhbWVyYS0+cGwtPm1kLT5tb2RlbCA9PSBDQU5PTl9DTEFTU182ICkgew0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FO
T05fVVNCX0ZVTkNUSU9OX0NBTUVSQV9DSE9XTl8yLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4sICh1bnNpZ25lZCBjaGFyICop
bmFtZSwgc3RybGVuIChuYW1lKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0NB
TUVSQV9DSE9XTiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbGVuLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHN0cmxlbiAobmFtZSkg
KyAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S
VF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxfZGlh
bG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHgwNSwgMHgxMiwgJmxlbiwgbmFtZSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChuYW1l
KSArIDEsIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCAp
IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5
cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F
UlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAg
ICAgIH0NCg0KICAgICAgICBpZiAobGVuICE9IDB4MDQpIHsNCiAgICAgICAgICAgICAgICBHUF9E
RUJVRyAoImNhbm9uX2ludF9zZXRfb3duZXJfbmFtZTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJu
ZWQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSkiLCAw
eDQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRB
Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGNhbm9uX2ludF9pZGVudGlmeV9jYW1lcmEg
KGNhbWVyYSwgY29udGV4dCk7DQp9DQoNCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X3RpbWU6DQog
KiBAY2FtZXJhOiBjYW1lcmEgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUgb2YNCiAqIEBjYW1lcmFf
dGltZTogcG9pbnRlciB0byB3aGVyZSB5b3Ugd2FudCB0aGUgY2FtZXJhIHRpbWUgKE5PVCBJTiBV
VEMhISEpDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICog
R2V0IGNhbWVyYSdzIGN1cnJlbnQgdGltZS4NCiAqDQogKiBUaGUgY2FtZXJhIGdpdmVzIHRpbWUg
aW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIHRoZXJlZm9yZSB3ZSBuZWVkDQogKiB0byBzd2FwIHRo
ZSA0IGJ5dGVzIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMuDQogKg0KICogTm90ZTogdGhlIHRpbWUg
cmV0dXJuZWQgZnJvbSB0aGUgY2FtZXJhIGlzIG5vdCBVVEMgYnV0IGxvY2FsIHRpbWUuDQogKiBU
aGlzIG1lYW5zIHlvdSBzaG91bGQgb25seSB1c2UgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgYWRqdXN0
IHRoZQ0KICogdGltZXpvbmUsIGxpa2UgZ210aW1lKCksIGluc3RlYWQgb2YgZnVuY3Rpb25zIHRo
YXQgZG8sIGxpa2UgbG9jYWx0aW1lKCkNCiAqIHNpbmNlIG90aGVyd2lzZSB5b3Ugd2lsbCBlbmQg
dXAgd2l0aCB0aGUgd3JvbmcgdGltZS4NCiAqDQogKiBXZSBwYXNzIGl0IGFsb25nIHRvIGNhbGxp
bmcgZnVuY3Rpb25zIGluIGxvY2FsIHRpbWUgaW5zdGVhZCBvZiBVVEMNCiAqIHNpbmNlIGl0IGlz
IG1vcmUgY29ycmVjdCB0byBzYXkgJ0NhbWVyYSB0aW1lOiAyMDAyLTAxLTAxIDAwOjAwOjAwJw0K
ICogaWYgdGhhdCBpcyB3aGF0IHRoZSBkaXNwbGF5IHNheXMgYW5kIG5vdCB0byBkaXNwbGF5IHRo
ZSBjYW1lcmFzIHRpbWUNCiAqIGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lem9uZSAod2hpY2ggd2ls
bCBvZiBjb3Vyc2UgYmUgd3JvbmcgaWYgeW91DQogKiBhcmUgbm90IGluIHRoZSB0aW1lem9uZSB0
aGUgY2FtZXJhcyBjbG9jayB3YXMgc2V0IGluKS4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVy
cm9yIGNvZGUNCiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF90aW1lIChDYW1lcmEgKmNhbWVy
YSwgdGltZV90ICpjYW1lcmFfdGltZSwgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICB1
bnNpZ25lZCBjaGFyICptc2c7DQogICAgICAgIHVuc2lnbmVkIGludCBsZW47DQoNCiAgICAgICAg
R1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3RpbWUoKSIpOw0KDQogICAgICAgIHN3aXRjaCAoY2Ft
ZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAg
ICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBD
QU5PTl9VU0JfRlVOQ1RJT05fR0VUX1RJTUUsICZsZW4sDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBtc2cgPT0gTlVMTCApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAg
ICAgICAgICAgIG1zZyA9IGNhbm9uX3NlcmlhbF9kaWFsb2d1ZSAoY2FtZXJhLCBjb250ZXh0LCAw
eDAzLCAweDEyLCAmbGVuLCBOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNn
ID09IE5VTEwgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3Nlcmlh
bF9lcnJvcl90eXBlIChjYW1lcmEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVG
QVVMVA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDEwKSB7DQogICAgICAgICAg
ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X3RpbWU6IFVuZXhwZWN0ZWQgbGVuZ3RoIHJl
dHVybmVkICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAlaSBnb3QgJWkp
IiwgMHgxMCwgbGVuKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVE
X0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoY2FtZXJhX3RpbWUgIT0gTlVMTCkgew0K
ICAgICAgICAgICAgICAgICpjYW1lcmFfdGltZSA9ICh0aW1lX3QpIGxlMzJhdG9oIChtc2cgKyA0
KTsNCgkJLyogWFhYIHNob3VsZCBzdHJpcCBcbiBhdCB0aGUgZW5kIG9mIGFzY3RpbWUoKSByZXR1
cm4gZGF0YSAqLw0KCQlHUF9ERUJVRyAoIkNhbWVyYSB0aW1lOiAlcyIsIGFzY3RpbWUgKGdtdGlt
ZSAoY2FtZXJhX3RpbWUpKSk7DQoJfQ0KDQogICAgICAgIHJldHVybiBHUF9PSzsNCn0NCg0KDQov
KioNCiAqIGNhbm9uX2ludF9zZXRfdGltZToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byBnZXQgdGhl
IGN1cnJlbnQgdGltZSBvZg0KICogQGRhdGU6IHRoZSBkYXRlIHRvIHNldCAoaW4gVVRDKQ0KICog
QGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIFNldCBjYW1lcmEn
cyBjdXJyZW50IHRpbWUuDQogKg0KICogQ2Fub24gY2FtZXJhcyBrbm93IG5vdGhpbmcgYWJvdXQg
dGltZSB6b25lcyBzbyB3ZSBoYXZlIHRvIGNvbnZlcnQgaXQgdG8gbG9jYWwNCiAqIHRpbWUgKGJ1
dCBzdGlsbCBleHByZXNzZWQgaW4gVU5JWCB0aW1lIGZvcm1hdCAoc2Vjb25kcyBzaW5jZSAxOTcw
LTAxLTAxKS4NCiAqDQogKiBSZXR1cm5zOiBncGhvdG8yIGVycm9yIGNvZGUNCiAqDQogKi8NCg0K
aW50DQpjYW5vbl9pbnRfc2V0X3RpbWUgKENhbWVyYSAqY2FtZXJhLCB0aW1lX3QgZGF0ZSwgR1BD
b250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICB1bnNpZ25lZCBjaGFyICptc2c7DQogICAgICAg
IHVuc2lnbmVkIGludCBsZW47DQogICAgICAgIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFsxMl07DQog
ICAgICAgIHRpbWVfdCBuZXdfZGF0ZTsNCiAgICAgICAgc3RydWN0IHRtICp0bTsNCg0KICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfdGltZTogJWxpPTB4JWx4ICVzIiwgKHVuc2lnbmVk
IGxvbmcpIGRhdGUsICh1bnNpZ25lZCBsb25nKSBkYXRlLA0KICAgICAgICAgICAgICAgICAgYXNj
dGltZSAobG9jYWx0aW1lICgmZGF0ZSkpKTsNCg0KICAgICAgICAvKiBjYWxsIGxvY2FsdGltZSgp
IGp1c3QgdG8gZ2V0ICdleHRlcm4gbG9uZyB0aW1lem9uZScgLyB0bS0+dG1fZ210b2ZmIHNldC4N
CiAgICAgICAgICoNCiAgICAgICAgICogdGhpcyBoYW5kbGVzIERTVCB0b28gKGF0IGxlYXN0IGlm
IEhBVkVfVE1fR01UT0ZGKSwgaWYgeW91IGFyZSBpbiBVVEMrMQ0KICAgICAgICAgKiB0bV9nbXRv
ZmYgaXMgMzYwMCBhbmQgaWYgeW91IGFyZSBpbiBVVEMrMStEU1QgdG1fZ210b2ZmIGlzIDcyMDAg
KGlmIHlvdXINCiAgICAgICAgICogRFNUIGlzIG9uZSBob3VyIG9mIGNvdXJzZSkuDQogICAgICAg
ICAqLw0KICAgICAgICB0bSA9IGxvY2FsdGltZSAoJmRhdGUpOw0KDQogICAgICAgIC8qIGNvbnZl
cnQgdG8gbG9jYWwgVU5JWCB0aW1lIHNpbmNlIGNhbm9uIGNhbWVyYXMga25vdyBub3RoaW5nIGFi
b3V0IHRpbWV6b25lcyAqLw0KDQojaWZkZWYgSEFWRV9UTV9HTVRPRkYNCiAgICAgICAgbmV3X2Rh
dGUgPSBkYXRlICsgdG0tPnRtX2dtdG9mZjsNCiAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRf
c2V0X3RpbWU6IGNvbnZlcnRlZCAlbGQgdG8gbG9jYWx0aW1lICVsZCAodG1fZ210b2ZmIGlzICVs
ZCkiLA0KICAgICAgICAgICAgICAgICAgKGxvbmcpZGF0ZSwgKGxvbmcpbmV3X2RhdGUsIChsb25n
KXRtLT50bV9nbXRvZmYpOw0KI2Vsc2UNCiAgICAgICAgbmV3X2RhdGUgPSBkYXRlIC0gdGltZXpv
bmU7DQogICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50X3NldF90aW1lOiBjb252ZXJ0ZWQgJWxk
IHRvIGxvY2FsdGltZSAlbGQgKHRpbWV6b25lIGlzICVsZCkiLA0KICAgICAgICAgICAgICAgICAg
KGxvbmcpZGF0ZSwgKGxvbmcpbmV3X2RhdGUsIChsb25nKXRpbWV6b25lKTsNCiNlbmRpZg0KDQog
ICAgICAgIG1lbXNldCAocGF5bG9hZCwgMCwgc2l6ZW9mIChwYXlsb2FkKSk7DQoNCiAgICAgICAg
aHRvbGUzMmEgKHBheWxvYWQsICh1bnNpZ25lZCBpbnQpIG5ld19kYXRlKTsNCg0KICAgICAgICBz
d2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9S
VF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9ndWUg
KGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX1NFVF9USU1FLCAmbGVuLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBzaXplb2YgKHBh
eWxvYWQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgR1Bf
UE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl9zZXJpYWxf
ZGlhbG9ndWUgKGNhbWVyYSwgY29udGV4dCwgMHgwNCwgMHgxMiwgJmxlbiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCwgc2l6ZW9m
IChwYXlsb2FkKSwgTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1zZyA9PSBO
VUxMICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbl9zZXJpYWxfZXJy
b3JfdHlwZSAoY2FtZXJhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVM
VA0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxlbiAhPSAweDQpIHsNCiAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9zZXRfdGltZTogVW5leHBlY3RlZCBsZW5ndGggcmV0dXJu
ZWQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVkICVpIGdvdCAlaSkiLCAw
eDQsIGxlbik7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRB
Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQovKioNCiAqIGNhbm9u
X2ludF9yZWFkeToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byBnZXQgcmVhZHkNCiAqIEBjb250ZXh0
OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBTd2l0Y2hlcyB0aGUgY2FtZXJh
IG9uLCBkZXRlY3RzIHRoZSBtb2RlbCBhbmQgc2V0cyBpdHMgc3BlZWQuDQogKg0KICogUmV0dXJu
czogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9yZWFkeSAoQ2Ft
ZXJhICpjYW1lcmEsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHJlczsNCg0K
ICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9yZWFkeSgpIik7DQoNCiAgICAgICAgc3dpdGNo
IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNC
Og0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fdXNiX3JlYWR5IChjYW1lcmEs
IGNvbnRleHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAg
ICAgY2FzZSBHUF9QT1JUX1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNh
bm9uX3NlcmlhbF9yZWFkeSAoY2FtZXJhLCBjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoN
CiAgICAgICAgcmV0dXJuIChyZXMpOw0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9nZXRfZGlza19u
YW1lOg0KICogQGNhbWVyYTogY2FtZXJhIHRvIGFzayBmb3IgZGlzayBkcml2ZQ0KICogQGNvbnRl
eHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEFzayB0aGUgY2FtZXJhIGZv
ciB0aGUgbmFtZSBvZiB0aGUgZmxhc2ggc3RvcmFnZQ0KICogZGV2aWNlLiBVc3VhbGx5ICJEOiIg
b3Igc29tZXRoaW5nIGxpa2UgdGhhdC4NCiAqDQogKiBSZXR1cm5zOiBuYW1lIG9mIGRpc2sNCiAq
DQogKi8NCmNoYXIgKg0KY2Fub25faW50X2dldF9kaXNrX25hbWUgKENhbWVyYSAqY2FtZXJhLCBH
UENvbnRleHQgKmNvbnRleHQpDQp7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAg
ICAgdW5zaWduZWQgaW50IGxlbjsNCiAgICAgICAgaW50IHJlczsNCg0KICAgICAgICBHUF9ERUJV
RyAoImNhbm9uX2ludF9nZXRfZGlza19uYW1lKCkiKTsNCg0KICAgICAgICBzd2l0Y2ggKGNhbWVy
YS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgR1BfUE9SVF9VU0I6DQogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbWVyYS0+cGwtPm1kLT5tb2RlbCA9PSBDQU5PTl9D
TEFTU182ICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV3ZXIgcHJvdG9j
b2wgdXNlcyBhIGRpZmZlcmVudCBjb2RlLCBidXQgd2l0aCBzYW1lIHJlc3BvbnNlLiAqLw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBjYW5vbl91c2JfbG9uZ19kaWFsb2d1
ZSAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0FOT05fVVNCX0ZVTkNUSU9OX0ZMQVNIX0RFVklDRV9JREVOVF8y
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJm1zZywgJmxlbiwgMTAyNCwgTlVMTCwgMCwgMCwgY29udGV4dCk7DQogICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cyA9IGNhbm9uX3VzYl9sb25nX2RpYWxvZ3VlIChjYW1lcmEsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5PTl9VU0JfRlVO
Q1RJT05fRkxBU0hfREVWSUNFX0lERU5ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZywgJmxlbiwgMTAyNCwgTlVMTCwg
MCwgMCwgY29udGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IEdQX09L
KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25faW50
X2dldF9kaXNrX25hbWU6IGNhbm9uX3VzYl9sb25nX2RpYWxvZ3VlICINCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQhIHJldHVybmVkICVpIiwgcmVzKTsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg
ICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgbXNn
ID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEsIGNvbnRleHQsIDB4MGEsIDB4MTEsICZs
ZW4sIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25fc2VyaWFsX2Vycm9yX3R5cGUg
KGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bGVuIDwgNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAg
IC8qIHNob3VsZCBiZSBHUF9FUlJPUl9DT1JSVVBURURfREFUQSAqLw0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAvKiB0aGlzIGlzIGNvcnJlY3QgZXZlbiB0aG91Z2ggaXQgbG9va3MgYSBiaXQg
ZnVubnkuIGNhbm9uX3NlcmlhbF9kaWFsb2d1ZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAg
KiBoYXMgYSBzdGF0aWMgYnVmZmVyLCBzdHJkdXAoKSBwYXJ0IG9mIHRoYXQgYnVmZmVyIGFuZCBy
ZXR1cm4gdG8gb3VyIGNhbGxlci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAg
ICAgICAgICAgICAgICAgICAgbXNnID0gKHVuc2lnbmVkIGNoYXIgKilzdHJkdXAgKChjaGFyICop
bXNnICsgNCk7ICAgICAgICAvKiBAQEAgc2hvdWxkIGNoZWNrIGxlbmd0aCAqLw0KICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtc2cgPT0gTlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2Rpc2tfbmFtZTogY291bGQgbm90
IGFsbG9jYXRlICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt
ZW1vcnkgdG8gaG9sZCByZXNwb25zZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTlVMTDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVF9SRVRVUk4g
KE5VTEwpDQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIG1zZyA9PSBOVUxMICkNCiAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsNCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRf
ZGlza19uYW1lOiBkaXNrICclcyciLCBtc2cpOw0KDQogICAgICAgIHJldHVybiAoY2hhciAqKW1z
ZzsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZ2V0X2Rpc2tfbmFtZV9pbmZvOg0KICogQGNhbWVy
YTogY2FtZXJhIHRvIGFzayBhYm91dCBkaXNrDQogKiBAbmFtZTogbmFtZSBvZiB0aGUgZGlzaw0K
ICogQGNhcGFjaXR5OiByZXR1cm5lZCBtYXhpbXVtIGRpc2sgY2FwYWNpdHkNCiAqIEBhdmFpbGFi
bGU6IHJldHVybmVkIGN1cnJlbnRseSBhdmFpbGFibGUgZGlzayBjYXBhY2l0eQ0KICogQGNvbnRl
eHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0KICoNCiAqIEdldHMgYXZhaWxhYmxlIHJv
b20gYW5kIG1heCBjYXBhY2l0eSBvZiBhIGRpc2sgZ2l2ZW4gYnkgQG5hbWUuDQogKg0KICogUmV0
dXJuczogYm9vbGVhbiB2YWx1ZSBkZW5vdGluZyBzdWNjZXNzIChGSVhNRTogQVRURU5USU9OISkN
CiAqDQogKi8NCmludA0KY2Fub25faW50X2dldF9kaXNrX25hbWVfaW5mbyAoQ2FtZXJhICpjYW1l
cmEsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqY2FwYWNpdHksIGludCAqYXZhaWxhYmxlLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAg
ICB1bnNpZ25lZCBjaGFyICptc2cgPSBOVUxMOw0KICAgICAgICBjaGFyIG5hbWVfbG9jYWxbMTI4
XTsNCiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsgICAgICAgLyogaXMgc2V0IGluIGJvdGggVVNC
IGFuZCBTRVJJQUwgY2FzZXMgKi8NCiAgICAgICAgaW50IGNhcD0wLCBhdmE9MDsgICAgICAgLyog
b25seSBzZXQgaW4gVVNCIGNhc2UgKi8NCg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9n
ZXRfZGlza19uYW1lX2luZm8oKSBuYW1lICclcyciLCBuYW1lKTsNCg0KICAgICAgICBDT05fQ0hF
Q0tfUEFSQU1fTlVMTCAobmFtZSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChjYXBh
Y2l0eSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChhdmFpbGFibGUpOw0KDQogICAg
ICAgIHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBH
UF9QT1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FtZXJhLT5wbC0+bWQt
Pm1vZGVsID09IENBTk9OX0NMQVNTXzYgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIE5ld2VyIHByb3RvY29sIHVzZXMgYSBkaWZmZXJlbnQgY29kZSwgYnV0IHdpdGggc2Ft
ZSByZXNwb25zZS4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweSAo
IG5hbWVfbG9jYWwsIG5hbWUsIHNpemVvZihuYW1lX2xvY2FsKSApOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4obmFtZV9sb2NhbCk7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbmFtZV9sb2NhbFtsZW4tMV0gPT0gJ1xcJyApDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sb2NhbFtsZW4tMV0gPSAw
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9n
dWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RJU0tfSU5GT18yLCAmbGVuLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNp
Z25lZCBjaGFyICopbmFtZV9sb2NhbCwgbGVuICk7DQoJCQkJaWYgKCBtc2cgPT0gTlVMTCApDQoJ
CQkJCXJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBUaGVzZSBuZXdlciBjYW1lcmFzIHJlcG9ydCBzaXplcyBpbg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBLIGluc3RlYWQgb2YgYnl0ZXMsIHNvIG1heCBjYXBh
Y2l0eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyA0VEIgcmF0aGVyIHRo
YW4gNEdCLiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAgPSBsZTMyYXRv
aCAobXNnICsgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YSA9IGxlMzJh
dG9oIChtc2cgKyA4KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBj
YW5vbl91c2JfZGlhbG9ndWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RJU0tfSU5GTywg
JmxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgY2hhciAqKW5hbWUsIHN0cmxlbiAobmFtZSkgKyAxKTsNCgkJCQlp
ZiAoIG1zZyA9PSBOVUxMICkNCgkJCQkJcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxVUkU7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCA9IGxlMzJhdG9oIChtc2cgKyA0KSAvIDEw
MjQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YSA9IGxlMzJhdG9oIChtc2cg
KyA4KSAvIDEwMjQ7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VSSUFMOg0KICAg
ICAgICAgICAgICAgICAgICAgICAgbXNnID0gY2Fub25fc2VyaWFsX2RpYWxvZ3VlIChjYW1lcmEs
IGNvbnRleHQsIDB4MDksIDB4MTEsICZsZW4sIG5hbWUsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbiAobmFtZSkgKyAxLCBOVUxMKTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKSB7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX3NlcmlhbF9lcnJvcl90eXBlIChjYW1lcmEpOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVS
RTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KICAgICAgICAgICAgICAgIEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQoNCiAgICAg
ICAgaWYgKGxlbiA8IDB4MGMpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2lu
dF9nZXRfZGlza19uYW1lX2luZm86ICINCiAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVj
dGVkIGxlbmd0aCByZXR1cm5lZCAiDQogICAgICAgICAgICAgICAgICAgICAgICAiKGV4cGVjdGVk
ICVpIGdvdCAlaSkiLCAweDBjLCBsZW4pOw0KICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJP
Ul9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIENhcGFjaXR5IGFuZCBh
dmFpbGFibGUgYXJlIG5vdCBOVUxMIGFzIHZlcmlmaWVkIGFib3ZlLg0KICAgICAgICAqIEJ1dCBj
YXAgYW5kIGF2YSBhcmUgb25seSBzZXQgZm9yIHRoZSBVU0IgY2FzZSwgc28gd2UgaGF2ZSB0byBj
aGVjayBmb3IgdGhhdC4NCiAgICAgICAgKiBJZiB5b3Uga25vdyB0aGUgbG9naWMgYmV0dGVyLCBm
ZWVsIGZyZWUgdG8gaW1wcm92ZSBpdC4gKi8NCiAgICAgICAgc3dpdGNoIChjYW1lcmEtPnBvcnQt
PnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0KICAgICAgICAgICAg
ICAgICAgICAgICAgKmNhcGFjaXR5ID0gY2FwOw0KICAgICAgICAgICAgICAgICAgICAgICAgKmF2
YWlsYWJsZSA9IGF2YTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fub25f
aW50X2dldF9kaXNrX25hbWVfaW5mbzogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY2FwYWNpdHkgJWkga2IsIGF2YWlsYWJsZSAlaSBrYiIsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhcCA+IDAgPyBjYXAgOiAwLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdmEgPiAwID8gYXZhIDogMCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsNCiAgICAgICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KDQogICAgICAg
IHJldHVybiBHUF9PSzsNCn0NCg0KDQovKioNCiAqIGdwaG90bzJjYW5vbnBhdGg6DQogKiBAY2Ft
ZXJhOiBjYW1lcmEgdG8gdXNlDQogKiBAcGF0aDogZ3Bob3RvMiBwYXRoDQogKiBAY29udGV4dDog
Y29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogY29udmVydCBncGhvdG8yIHBhdGgg
IChlLmcuICAgIi9kY2ltLzExNkNBTk9OL2ltZ18xMjQwLmpwZyIpDQogKiBpbnRvIGNhbm9uIHN0
eWxlIHBhdGggKGUuZy4gIkQ6XERDSU1cMTE2Q0FOT05cSU1HXzEyNDAuSlBHIikNCiAqDQogKiBD
YW5vbiBjYW1lcmFzIHVzZSBGQVQgd2l0aCB1cHBlciBjYXNlIGludGVybmFsbHksIHNvIHdlIGNv
bnZlcnQNCiAqIGludG8gdGhhdC4NCiAqDQogKiBSZXR1cm5zOiBpbW11dGFibGUgc3RyaW5nIHdp
dGggY29udmVydGVkIHBhdGggbmFtZQ0KICoNCiAqLw0KY29uc3QgY2hhciAqDQpncGhvdG8yY2Fu
b25wYXRoIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqcGF0aCwgR1BDb250ZXh0ICpjb250
ZXh0KQ0Kew0KICAgICAgICBzdGF0aWMgY2hhciB0bXBbMjAwMF07DQogICAgICAgIGNoYXIgKnA7
DQoNCiAgICAgICAgaWYgKHBhdGhbMF0gIT0gJy8nKSB7DQogICAgICAgICAgICAgICAgR1BfREVC
VUcgKCJOb24tYWJzb2x1dGUgZ3Bob3RvMiBwYXRoIGNhbm5vdCBiZSBjb252ZXJ0ZWQiKTsNCiAg
ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjYW1l
cmEtPnBsLT5jYWNoZWRfZHJpdmUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIEdQX0RFQlVH
ICgiTlVMTCBjYW1lcmEtPnBsLT5jYWNoZWRfZHJpdmUgaW4gZ3Bob3RvMmNhbm9ucGF0aCIpOw0K
ICAgICAgICAgICAgICAgIGNhbWVyYS0+cGwtPmNhY2hlZF9kcml2ZSA9IGNhbm9uX2ludF9nZXRf
ZGlza19uYW1lIChjYW1lcmEsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAgIGlmIChjYW1lcmEt
PnBsLT5jYWNoZWRfZHJpdmUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgR1Bf
REVCVUcgKCIybmQgTlVMTCBjYW1lcmEtPnBsLT5jYWNoZWRfZHJpdmUgaW4gZ3Bob3RvMmNhbm9u
cGF0aCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQogICAgICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgc25wcmludGYgKHRtcCwgc2l6ZW9mICh0bXAp
LCAiJXMlcyIsIGNhbWVyYS0+cGwtPmNhY2hlZF9kcml2ZSwgcGF0aCk7DQoNCiAgICAgICAgLyog
Q29udmVydCB0byB1cHBlciBjYXNlLCBzaW5jZSBGQVQgZmlsZSBzeXN0ZW0gb24gY2FtZXJhDQog
ICAgICAgICBkb2Vzbid0IGRvIGNhc2UsIGFuZCByZXBsYWNlIGFsbCBzbGFzaGVzIGJ5IGJhY2tz
bGFzaGVzICovDQogICAgICAgIGZvciAocCA9IHRtcDsgKnAgIT0gJ1wwJzsgcCsrKSB7DQogICAg
ICAgICAgICAgICAgaWYgKCAqcCAhPSAoY2hhcil0b3VwcGVyICggKnAgKSApDQogICAgICAgICAg
ICAgICAgICAgICAgICAvKiBXZSBkb24ndCBhbGxvdyBsb3dlci1jYXNlIGluIHBhdGggbmFtZXMu
ICovDQogICAgICAgICAgICAgICAgICAgICAgICBncF9jb250ZXh0X2Vycm9yIChjb250ZXh0LCBf
KCJMb3dlciBjYXNlIGxldHRlcnMgaW4gJXMgbm90IGFsbG93ZWQuIiksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoICk7DQogICAgICAgICAgICAgICAgaWYg
KCpwID09ICcvJykNCiAgICAgICAgICAgICAgICAgICAgICAgICpwID0gJ1xcJzsNCiAgICAgICAg
ICAgICAgICAqcCA9IChjaGFyKSB0b3VwcGVyKCpwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8q
IHJlbW92ZSB0cmFpbGluZyBiYWNrc2xhc2gsIG1ha2luZyBzdXJlIGJ1ZmZlciBlbmRzIHdpdGgg
XDAgKi8NCiAgICAgICAgaWYgKChwID4gdG1wKSAmJiAoKihwIC0gMSkgPT0gJ1xcJykpDQogICAg
ICAgICAgICAgICAgKihwIC0gMSkgPSAnXDAnOw0KDQogICAgICAgIGdwX2xvZyAoR1BfTE9HX0RB
VEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAgICAgICAgICAgICAiZ3Bob3RvMmNhbm9ucGF0aDog
Y29udmVydGVkICclcycgdG8gJyVzJyIsIHBhdGgsIHRtcCk7DQoNCiAgICAgICAgcmV0dXJuICh0
bXApOw0KfQ0KDQovKioNCiAqIGNhbm9uMmdwaG90b3BhdGg6DQogKiBAY2FtZXJhOiBjYW1lcmEg
dG8gdXNlDQogKiBAcGF0aDogY2Fub24gc3R5bGUgcGF0aA0KICoNCiAqIGNvbnZlcnQgY2Fub24g
c3R5bGUgcGF0aCAoZS5nLiAiRDpcRENJTVwxMTZDQU5PTlxJTUdfMTI0MC5KUEciKQ0KICogaW50
byBncGhvdG8yIHBhdGggICAgICAgIChlLmcuICAgIi9EQ0lNLzExNkNBTk9OL0lNR18xMjQwLkpQ
RyIpDQogKg0KICogQXNzdW1lcyBAcGF0aCB0byBzdGFydCB3aXRoIGRyaXZlIG5hbWUgZm9sbG93
ZWQgYnkgYSBjb2xvbi4NCiAqIEl0IGp1c3QgZHJvcHMgdGhlIGRyaXZlIG5hbWUuDQogKg0KICog
UmV0dXJuczogaW1tdXRhYmxlIHN0cmluZyB3aXRoIGdwaG90bzIgcGF0aA0KICoNCiAqLw0Kc3Rh
dGljIGNvbnN0IGNoYXIgKg0KY2Fub24yZ3Bob3RvcGF0aCAoQ2FtZXJhIF9fdW51c2VkX18gKmNh
bWVyYSwgY29uc3QgY2hhciAqcGF0aCkNCnsNCiAgICAgICAgc3RhdGljIGNoYXIgdG1wWzIwMDBd
Ow0KICAgICAgICBjaGFyICpwOw0KDQogICAgICAgIGlmICghKChwYXRoWzFdID09ICc6JykgJiYg
KHBhdGhbMl0gPT0gJ1xcJykpKSB7DQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbjJn
cGhvdG9wYXRoIGNhbGxlZCBvbiBpbnZhbGlkIGNhbm9uIHBhdGggJyVzJyIsIHBhdGgpOw0KICAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogMyBpcyBE
OiBwbHVzIE5VTEwgYnl0ZSAqLw0KICAgICAgICBpZiAoc3RybGVuIChwYXRoKSAtIDMgPiBzaXpl
b2YgKHRtcCkpIHsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uMmdwaG90b3BhdGgg
Y2FsbGVkIG9uIHRvbyBsb25nIGNhbm9uIHBhdGggKCVsaSBieXRlcyk6ICVzIiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxvbmcpKHN0cmxlbiAocGF0aCkpLCBwYXRoKTsNCiAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIHBhdGggaXMgc29t
ZXRoaW5nIGxpa2UgRDpcRk9PLCB3ZSB3YW50IHdoYXQgaXMgYWZ0ZXIgdGhlIGNvbG9uICovDQog
ICAgICAgIHN0cmNweSAodG1wLCBwYXRoICsgMik7DQoNCiAgICAgICAgLyogcmVwbGFjZSBiYWNr
c2xhc2hlcyBieSBzbGFzaGVzICovDQogICAgICAgIGZvciAocCA9IHRtcDsgKnAgIT0gJ1wwJzsg
cCsrKSB7DQogICAgICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpDQogICAgICAgICAgICAgICAg
ICAgICAgICAqcCA9ICcvJzsNCiAgICAgICAgfQ0KDQogICAgICAgIGdwX2xvZyAoR1BfTE9HX0RB
VEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAgICAgICAgICAgICAiY2Fub24yZ3Bob3RvcGF0aDog
Y29udmVydGVkICclcycgdG8gJyVzJyIsIHBhdGgsIHRtcCk7DQoNCiAgICAgICAgcmV0dXJuICh0
bXApOw0KfQ0KDQovKioNCiAqIGRlYnVnX2ZpbGVpbmZvOg0KICogQGluZm86IGluZm9ybWF0aW9u
IGJsb2NrDQogKg0KICogV3JpdGVzIGZpbGUgaW5mbyB0byBkZWJ1ZyBsb2cuIFVzYWJsZSBvbmx5
IGZyb20gd2l0aGluICJjYW5vbi5jIi4NCiAqDQogKi8NCnN0YXRpYyB2b2lkDQpkZWJ1Z19maWxl
aW5mbyAoQ2FtZXJhRmlsZUluZm8gKiBpbmZvKQ0Kew0KICAgICAgICBHUF9ERUJVRyAoIjxDYW1l
cmFGaWxlSW5mbz4iKTsNCiAgICAgICAgR1BfREVCVUcgKCIgIDxDYW1lcmFGaWxlSW5mb0ZpbGU+
Iik7DQogICAgICAgIGlmICgoaW5mby0+ZmlsZS5maWVsZHMgJiBHUF9GSUxFX0lORk9fVFlQRSkg
IT0gMCkNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIiAgICBUeXBlOiAgICVzIiwgaW5mby0+
ZmlsZS50eXBlKTsNCiAgICAgICAgaWYgKChpbmZvLT5maWxlLmZpZWxkcyAmIEdQX0ZJTEVfSU5G
T19TSVpFKSAhPSAwKQ0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiICAgIFNpemU6ICAgJWki
LCAoaW50KWluZm8tPmZpbGUuc2l6ZSk7DQogICAgICAgIGlmICgoaW5mby0+ZmlsZS5maWVsZHMg
JiBHUF9GSUxFX0lORk9fV0lEVEgpICE9IDApDQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCIg
ICAgV2lkdGg6ICAlaSIsIGluZm8tPmZpbGUud2lkdGgpOw0KICAgICAgICBpZiAoKGluZm8tPmZp
bGUuZmllbGRzICYgR1BfRklMRV9JTkZPX0hFSUdIVCkgIT0gMCkNCiAgICAgICAgICAgICAgICBH
UF9ERUJVRyAoIiAgICBIZWlnaHQ6ICVpIiwgaW5mby0+ZmlsZS5oZWlnaHQpOw0KICAgICAgICBp
ZiAoKGluZm8tPmZpbGUuZmllbGRzICYgR1BfRklMRV9JTkZPX1BFUk1JU1NJT05TKSAhPSAwKQ0K
ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiICAgIFBlcm1zOiAgMHgleCIsIGluZm8tPmZpbGUu
cGVybWlzc2lvbnMpOw0KICAgICAgICBpZiAoKGluZm8tPmZpbGUuZmllbGRzICYgR1BfRklMRV9J
TkZPX1NUQVRVUykgIT0gMCkNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIiAgICBTdGF0dXM6
ICVpIiwgaW5mby0+ZmlsZS5zdGF0dXMpOw0KICAgICAgICBpZiAoKGluZm8tPmZpbGUuZmllbGRz
ICYgR1BfRklMRV9JTkZPX01USU1FKSAhPSAwKSB7DQogICAgICAgICAgICAgICAgY2hhciAqcCwg
KnRpbWUgPSBhc2N0aW1lIChnbXRpbWUgKCZpbmZvLT5maWxlLm10aW1lKSk7DQoNCiAgICAgICAg
ICAgICAgICAvKiByZW1vdmUgdHJhaWxpbmcgXG4gKi8NCiAgICAgICAgICAgICAgICBmb3IgKHAg
PSB0aW1lOyAqcCAhPSAwOyArK3ApDQogICAgICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3Ro
aW5nICovIDsNCiAgICAgICAgICAgICAgICAqKHAgLSAxKSA9ICdcMCc7DQogICAgICAgICAgICAg
ICAgR1BfREVCVUcgKCIgICAgVGltZTogICAlcyAoJWxkKSIsIHRpbWUsIChsb25nKWluZm8tPmZp
bGUubXRpbWUpOw0KICAgICAgICB9DQogICAgICAgIEdQX0RFQlVHICgiICA8L0NhbWVyYUZpbGVJ
bmZvRmlsZT4iKTsNCiAgICAgICAgR1BfREVCVUcgKCI8L0NhbWVyYUZpbGVJbmZvPiIpOw0KfQ0K
DQovKioNCiAqIGNhbm9uX2ludF9saXN0X2RpcmVjdG9yeToNCiAqIEBjYW1lcmE6IENhbWVyYSB0
byBhY2Nlc3MNCiAqIEBmb2xkZXI6IEZvbGRlciBvbiB0aGUgY2FtZXJhIHRvIGxpc3QNCiAqIEBs
aXN0OiBSZXR1cm5zIGxpc3Qgb2YgZm9sZGVycyBpbiB0aGlzIGRpcmVjdG9yeQ0KICogQGZsYWdz
OiAjY2Fub25EaXJsaXN0RnVuY3Rpb25CaXRzIHNwZWNpZnlpbmcgdG8gbGlzdCBmaWxlcywgZm9s
ZGVycywgb3IgYm90aA0KICogQGNvbnRleHQ6IGNvbnRleHQgZm9yIGVycm9yIHJlcG9ydGluZw0K
ICoNCiAqIEdldHMgdGhlIGRpcmVjdG9yeSB0cmVlIG9mIGEgZ2l2ZW4gZmxhc2ggZGV2aWNlLCB1
bnNvcnRlZCBhbmQgd2l0aA0KICogYSBmZXcgbWlzc2luZyBmZWF0dXJlcyAoc3VjaCBhcyBjb3Jy
ZWN0IHNvcnRpbmcgb2YgZmlsZXMgYW5kDQogKiBjb3JyZWN0bHkgYXNzb2NpYXRpbmcgZmlsZXMg
d2l0aCBlYWNoIG90aGVyKS4NCiAqDQogKiBJbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCB1aW50OF90
W10gaXMgYSBjaGFyW10gZm9yIHN0cmluZ3MuDQogKg0KICogQSBmZXcgbm90ZXMgYWJvdXQgbGlz
dGluZyBmaWxlcyBhbmQgY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXM6DQogKg0KICogICBJZiBj
YW1lcmEtPnBsLT5saXN0X2FsbF9maWxlcyBpcyBmYWxzZSAoaW50ZW5kZWQgZGVmYXVsdCksIHRo
ZW4NCiAqICAgd2UgbGlzdCBvbmx5ICJwcmltYXJ5IGZpbGVzIiBvciAoIm1haW4iIGZpbGVzKS4g
VGhvc2UgYXJlIGZpbGVzDQogKiAgIGxpa2UgaW1hZ2UgZmlsZXMgb3IgbW92aWUgZmlsZXMgd2hp
Y2ggdGhlIHVzZXIgZXhwbGljaXRseSBjcmVhdGVkDQogKiAgIG9uIHRoZSBjYW1lcmEuICJTZWNv
bmRhcnkgZmlsZXMiIHN1Y2ggYXMgLnRobSBmaWxlcyB3aGljaCBjb250YWluDQogKiAgIHRoZSB0
aHVtYm5haWwgb2YgYSBtb3ZpZSBhcmUgbm90IGxpc3RlZCBoZXJlIC0geW91IGNhbiBnZXQgdGhl
bSB1c2luZw0KICogICB0aGUgLS1nZXQtdGh1bWJuYWlsIGNvbW1hbmQgaW4gZ3Bob3RvMiBvciB0
aGUgYW5hbG9nIGNvbW1hbmQgb2YgeW91cg0KICogICBmcm9udGVuZC4gU2FtZSBzdG9yeSB3aXRo
ICx3YXYgZmlsZXMgY29udGFpbmluZyBhdWRpbyBhbm5vdGF0aW9ucw0KICogICB0byBwcmltYXJ5
IGZpbGVzLg0KICoNCiAqICAgSWYgY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXMgaXMgdHJ1ZSAo
Y2FuIGJlIGNoYW5nZWQgdmlhIHRoZQ0KICogICBjb25maWd1cmF0aW9uIGludGVyZmFjZSksIHRo
ZW4gd2UgbGlzdCBfYWxsXyBmaWxlcy4gVGhpcyBtZWFucw0KICogICB0aGF0IHdlIGp1c3QgdXNl
IHRoZSBjYW1lcmEgbGlrZSBhIENGL1NEIGNhcmQgcmVhZGVyLiBVc2UgdGhpcyBtb2RlDQogKiAg
IHRvIHJlYWQvd3JpdGUgeW91ciAucGRmIGZpbGVzLCAudGd6IGJhY2t1cCB0YXJiYWxscywgb3Ig
d2hhdGV2ZXIuDQogKiAgIE9mIGNvdXJzZSwgYWxsIHRoZSAiaW50ZXJuYWwiIGZpbGVzIHRoZSBj
YW1lcmEgcHV0cyBvbiB0aGUgc3RvcmFnZQ0KICogICBtZWRpdW0gd2lsbCBiZSBsaXN0ZWQgaW4g
dGhpcyBtb2RlIGFzIHdlbGwuDQogKg0KICogUmV0dXJuczogYSBncGhvdG8yIHN0YXR1cyBjb2Rl
Lg0KICogICBAbGlzdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIGZvbGRlcnMgKGRpcmVjdG9yaWVz
KSBjb250YWluZWQgaW4gdGhpcyBmb2xkZXIuDQogKiAgIEZpbGVzIHdpbGwgYmUgYWRkZWQgdG8g
dGhlIGludGVybmFsIGdwaG90bzIgZmlsZSBzeXN0ZW0gb25seSBpZg0KICogICAgIHRoZXkgYXJl
IGltYWdlIG9yIG1vdmllIGZpbGVzLg0KICoNCiAqLw0KaW50DQpjYW5vbl9pbnRfbGlzdF9kaXJl
Y3RvcnkgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpmb2xkZXIsIENhbWVyYUxpc3QgKmxp
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbm9uRGlybGlzdEZ1bmN0aW9u
Qml0cyBmbGFncywgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAgICAgICBDYW1lcmFGaWxlSW5m
byBpbmZvOw0KICAgICAgICBpbnQgcmVzOw0KICAgICAgICB1bnNpZ25lZCBpbnQgZGlyZW50c19s
ZW5ndGg7DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKmRpcmVudF9kYXRhID0gTlVMTDsNCiAgICAg
ICAgdW5zaWduZWQgY2hhciAqZW5kX29mX2RhdGEsICp0ZW1wX2NoLCAqcG9zOw0KICAgICAgICBj
b25zdCBjaGFyICpjYW5vbmZvbGRlciA9IGdwaG90bzJjYW5vbnBhdGggKGNhbWVyYSwgZm9sZGVy
LCBjb250ZXh0KTsNCiAgICAgICAgaW50IGxpc3RfZmlsZXMgPSAoKGZsYWdzICYgQ0FOT05fTElT
VF9GSUxFUykgIT0gMCk7DQogICAgICAgIGludCBsaXN0X2ZvbGRlcnMgPSAoKGZsYWdzICYgQ0FO
T05fTElTVF9GT0xERVJTKSAhPSAwKTsNCg0KICAgICAgICBHUF9ERUJVRyAoIkJFR0lOIGNhbm9u
X2ludF9saXN0X2RpcmVjdG9yeSgpIGZvbGRlciAnJXMnIGFrYSAnJXMnICglcywgJXMpIiwgZm9s
ZGVyLA0KICAgICAgICAgICAgICAgICAgY2Fub25mb2xkZXIsIGxpc3RfZmlsZXMgPyAiZmlsZXMi
IDogIm5vIGZpbGVzIiwNCiAgICAgICAgICAgICAgICAgIGxpc3RfZm9sZGVycyA/ICJmb2xkZXJz
IiA6ICJubyBmb2xkZXJzIik7DQoNCiAgICAgICAgaWYgKCBjYW5vbmZvbGRlciA9PSBOVUxMICkg
ew0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggIkVycm9yOiBjYW5vbl9pbnRfbGlzdF9kaXJl
Y3RvcnkgY2FsbGVkIHdpdGggbnVsbCBuYW1lIGZvciBjYW1lcmEgZm9sZGVyIiApOw0KICAgICAg
ICAgICAgICAgIHJldHVybiBHUF9FUlJPUjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIEZldGNo
IGFsbCBkaXJlY3RvcnkgZW50cmllcyBmcm9tIHRoZSBjYW1lcmEgKi8NCiAgICAgICAgc3dpdGNo
IChjYW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNC
Og0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fdXNiX2dldF9kaXJlbnRzIChj
YW1lcmEsICZkaXJlbnRfZGF0YSwgJmRpcmVudHNfbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbmZvbGRlciwgY29udGV4dCk7
DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQ
X1BPUlRfU0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fc2VyaWFs
X2dldF9kaXJlbnRzIChjYW1lcmEsICZkaXJlbnRfZGF0YSwgJmRpcmVudHNfbGVuZ3RoLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5v
bmZvbGRlciwgY29udGV4dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg
ICAgICAgICAgICBHUF9QT1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVzICE9
IEdQX09LKQ0KICAgICAgICAgICAgICAgIHJldHVybiByZXM7DQoNCiAgICAgICAgZW5kX29mX2Rh
dGEgPSBkaXJlbnRfZGF0YSArIGRpcmVudHNfbGVuZ3RoOw0KDQogICAgICAgIGlmIChkaXJlbnRz
X2xlbmd0aCA8IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpIHsNCiAgICAgICAgICAgICAgICBn
cF9jb250ZXh0X2Vycm9yIChjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogRVJST1I6ICINCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsIG1lc3NhZ2UgdG9vIHNob3J0ICglaSA8IG1p
bmltdW0gJWkpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50c19s
ZW5ndGgsIENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpOw0KICAgICAgICAgICAgICAgIGZyZWUg
KGRpcmVudF9kYXRhKTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQogICAg
ICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoN
CiAgICAgICAgLyogVGhlIGZpcnN0IGRhdGEgd2UgaGF2ZSBnb3QgaGVyZSBpcyB0aGUgZGlyZW50
IGZvciB0aGUNCiAgICAgICAgICogZGlyZWN0b3J5IHdlIGFyZSByZWFkaW5nLiBTa2lwIG92ZXIg
MTAgYnl0ZXMNCiAgICAgICAgICogKDIgZm9yIGF0dHJpYnV0ZXMsIDQgZGF0ZSBhbmQgNCBzaXpl
KSBhbmQgdGhlbiBnbyBmaW5kDQogICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBu
YW1lIHNvIHRoYXQgd2UgZ2V0IHRvIHRoZSBuZXh0DQogICAgICAgICAqIGRpcmVudCB3aGljaCBp
cyBhY3R1YWxseSB0aGUgZmlyc3Qgb25lIHdlIGFyZSBpbnRlcmVzdGVkDQogICAgICAgICAqIGlu
DQogICAgICAgICAqLw0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9y
eTogQ2FtZXJhIGRpcmVjdG9yeSBsaXN0aW5nIGZvciBkaXJlY3RvcnkgJyVzJyIsDQogICAgICAg
ICAgICAgICAgICBkaXJlbnRfZGF0YSArIENBTk9OX0RJUkVOVF9OQU1FKTsNCg0KICAgICAgICBm
b3IgKHBvcyA9IGRpcmVudF9kYXRhICsgQ0FOT05fRElSRU5UX05BTUU7IHBvcyA8IGVuZF9vZl9k
YXRhICYmICpwb3MgIT0gMDsgcG9zKyspDQogICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAq
LyA7DQogICAgICAgIGlmIChwb3MgPT0gZW5kX29mX2RhdGEgfHwgKnBvcyAhPSAwKSB7DQogICAg
ICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6IFJlYWNoZWQgZW5k
IG9mIHBhY2tldCB3aGlsZSAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJl
eGFtaW5pbmcgdGhlIGZpcnN0IGRpcmVudCIpKTsNCiAgICAgICAgICAgICAgICBmcmVlIChkaXJl
bnRfZGF0YSk7DQogICAgICAgICAgICAgICAgZGlyZW50X2RhdGEgPSBOVUxMOw0KICAgICAgICAg
ICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgfQ0KICAgICAg
ICBwb3MrKzsgICAgICAgICAgICAgICAgICAvKiBza2lwIE5VTEwgYnl0ZSB0ZXJtaW5hdGluZyBk
aXJlY3RvcnkgbmFtZSAqLw0KDQogICAgICAgIC8qIHdlIGFyZSBub3cgcG9zaXRpb25lZCBhdCB0
aGUgZmlyc3QgaW50ZXJlc3RpbmcgZGlyZW50ICovDQoNCiAgICAgICAgLyogVGhpcyBpcyB0aGUg
bWFpbiBsb29wLCBmb3IgZXZlcnkgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkICovDQogICAgICAg
IHdoaWxlIChwb3MgPCBlbmRfb2ZfZGF0YSkgew0KICAgICAgICAgICAgICAgIGludCBpc19kaXIs
IGlzX2ZpbGU7DQogICAgICAgICAgICAgICAgdWludDE2X3QgZGlyZW50X2F0dHJzOyAgLyogYXR0
cmlidXRlcyBvZiBkaXJlbnQgKi8NCiAgICAgICAgICAgICAgICB1aW50MzJfdCBkaXJlbnRfZmls
ZV9zaXplOyAgICAgIC8qIHNpemUgb2YgZGlyZW50IGluIG9jdGV0cyAqLw0KICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGRpcmVudF90aW1lOyAgIC8qIHRpbWUgc3RhbXAgb2YgZGlyZW50IChVbml4
IEVwb2NoKSAqLw0KICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRpcmVudF9uYW1lOyAgIC8qIG5h
bWUgb2YgZGlyZW50ICovDQogICAgICAgICAgICAgICAgc2l6ZV90IGRpcmVudF9uYW1lX2xlbjsg
LyogbGVuZ3RoIG9mIGRpcmVudF9uYW1lICovDQogICAgICAgICAgICAgICAgc2l6ZV90IGRpcmVu
dF9lbnRfc2l6ZTsgLyogc2l6ZSBvZiBkaXJlbnQgaW4gb2N0ZXRzICovDQogICAgICAgICAgICAg
ICAgdWludDMyX3QgdG1wX3RpbWU7DQogICAgICAgICAgICAgICAgdGltZV90IGRhdGU7DQogICAg
ICAgICAgICAgICAgc3RydWN0IHRtICp0bTsNCg0KICAgICAgICAgICAgICAgIGRpcmVudF9hdHRy
cyA9IGxlMTZhdG9oIChwb3MgKyBDQU5PTl9ESVJFTlRfQVRUUlMpOw0KICAgICAgICAgICAgICAg
IGRpcmVudF9maWxlX3NpemUgPSBsZTMyYXRvaCAocG9zICsgQ0FOT05fRElSRU5UX1NJWkUpOw0K
ICAgICAgICAgICAgICAgIGRpcmVudF9uYW1lID0gcG9zICsgQ0FOT05fRElSRU5UX05BTUU7DQoN
CiAgICAgICAgICAgICAgICAvKiBzZWUgY2Fub25faW50X3NldF90aW1lKCkgZm9yIHRpbWV6b25l
IGhhbmRsaW5nICovDQogICAgICAgICAgICAgICAgdG1wX3RpbWUgPSBsZTMyYXRvaCAocG9zICsg
Q0FOT05fRElSRU5UX1RJTUUpOw0KICAgICAgICAgICAgICAgIGlmICh0bXBfdGltZSAhPSAwKSB7
DQogICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogSSBqdXN0IHdhbnQgdGhlIHRtX2dt
dG9mZi90aW1lem9uZSBpbmZvICovDQogICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdGlt
ZShOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRtICAgPSBsb2NhbHRpbWUgKCZkYXRl
KTsNCiNpZmRlZiBIQVZFX1RNX0dNVE9GRg0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50
X3RpbWUgPSB0bXBfdGltZSAtIHRtLT50bV9nbXRvZmY7DQogICAgICAgICAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogY29udmVydGVkICVsZCB0byBV
VEMgJWxkICh0bV9nbXRvZmYgaXMgJWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChsb25nKXRtcF90aW1lLCAobG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdG0tPnRtX2dtdG9m
Zik7DQojZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBfdGlt
ZSArIHRpbWV6b25lOw0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9p
bnRfbGlzdF9kaXJlY3Rvcnk6IGNvbnZlcnRlZCAlbGQgdG8gVVRDICVsZCAodGltZXpvbmUgaXMg
JWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKXRtcF90aW1lLCAo
bG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdGltZXpvbmUpOw0KI2VuZGlmDQogICAgICAgICAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVudF90aW1lID0gdG1wX3Rp
bWU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaXNfZGlyID0gKChkaXJl
bnRfYXR0cnMgJiBDQU5PTl9BVFRSX05PTl9SRUNVUlNfRU5UX0RJUikgIT0gMCkNCiAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9SRUNVUlNfRU5U
X0RJUikgIT0gMCk7DQogICAgICAgICAgICAgICAgaXNfZmlsZSA9ICFpc19kaXI7DQoNCiAgICAg
ICAgICAgICAgICBncF9sb2cgKEdQX0xPR19EQVRBLCAiY2Fub24vY2Fub24uYyIsDQogICAgICAg
ICAgICAgICAgICAgICAgICAiY2Fub25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZGluZyBkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSAoMHgl
bHggb2YgMHglbHgpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJl
bnRfZGF0YSksIChsb25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksIChsb25nKShlbmRfb2ZfZGF0
YSAtIGRpcmVudF9kYXRhKSApOw0KDQogICAgICAgICAgICAgICAgaWYgKHBvcyArIENBTk9OX01J
TklNVU1fRElSRU5UX1NJWkUgPiBlbmRfb2ZfZGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbWVyYS0+cG9ydC0+dHlwZSA9PSBHUF9QT1JUX1NFUklBTCkgew0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0byBzZWUgaWYgaXQgaXMgb25seSBOVUxM
IGJ5dGVzIGxlZnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgaXMg
bm90IGFuIGVycm9yIGZvciBzZXJpYWwgY2FtZXJhcw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiAoYXQgbGVhc3QgdGhlIEE1MCBhZGRzIGZpdmUgemVybyBieXRlcyBhdCB0aGUg
ZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh0ZW1wX2NoID0gcG9zOyAodGVtcF9jaCA8IGVuZF9vZl9k
YXRhKSAmJiAoISp0ZW1wX2NoKTsgdGVtcF9jaCsrKSA7ICAgICAgICAvKiBkbyBub3RoaW5nICov
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBfY2ggPT0gZW5kX29m
X2RhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJV
RyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxhc3QgJWxpIGJ5dGVzIHdlcmUgYWxsIDAg
LSBpZ25vcmluZy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVH
ICgiY2Fub25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlWyVsaT0weCVseF0gPT0gJWk9MHgleCIsIChs
b25nKSh0ZW1wX2NoIC0gcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxvbmcpKHRlbXBfY2ggLSBwb3MpLCAqdGVtcF9jaCwgKnRlbXBfY2gp
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fu
b25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJwb3MgaXMgJXAsIGVuZF9vZl9kYXRhIGlzICVwLCB0ZW1wX2No
IGlzICVwIC0gZGlmZiBpcyAweCVseCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcywgZW5kX29mX2RhdGEsIHRlbXBfY2gsIChsb25nKSh0ZW1w
X2NoIC0gcG9zKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiY2Fu
b25faW50X2xpc3RfZGlyZWN0b3J5OiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRpcmVudCBhdCBwb3NpdGlvbiAlbGk9MHglbHggb2YgJWxpPTB4JWx4IGlzIHRvbyBzbWFs
bCwgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5pbXVtIGRpcmVudCBp
cyAlaSBieXRlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBv
cyAtIGRpcmVudF9kYXRhKSwgKGxvbmcpKHBvcyAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSks
IChsb25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKTsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6ICINCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJ1bmNhdGVkIGRpcmVj
dG9yeSBlbnRyeSBlbmNvdW50ZXJlZCIpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUg
KGRpcmVudF9kYXRhKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVudF9kYXRhID0gTlVM
TDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9DT1JSVVBURURfREFU
QTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBDaGVjayBlbmQgb2Yg
dGhpcyBkaXJlbnQsIDEwIGlzIHRvIHNraXAgb3Zlcg0KICAgICAgICAgICAgICAgICAqIDIgICAg
YXR0cmlidXRlcyArIDB4MDANCiAgICAgICAgICAgICAgICAgKiA0ICAgIGZpbGUgc2l6ZQ0KICAg
ICAgICAgICAgICAgICAqIDQgICAgZmlsZSBkYXRlIChVTklYIGxvY2FsdGltZSkNCiAgICAgICAg
ICAgICAgICAgKiB0byB3aGVyZSB0aGUgZGlyZW50cnkgbmFtZSBiZWdpbnMuDQogICAgICAgICAg
ICAgICAgICovDQogICAgICAgICAgICAgICAgZm9yICh0ZW1wX2NoID0gZGlyZW50X25hbWU7IHRl
bXBfY2ggPCBlbmRfb2ZfZGF0YSAmJiAqdGVtcF9jaCAhPSAwOw0KICAgICAgICAgICAgICAgICAg
ICAgdGVtcF9jaCsrKSA7DQoNCiAgICAgICAgICAgICAgICBpZiAodGVtcF9jaCA9PSBlbmRfb2Zf
ZGF0YSB8fCAqdGVtcF9jaCAhPSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJV
RyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSBoYXMgaW52YWxpZCBuYW1l
IGluIGl0LiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFpbGluZyBvdXQg
d2l0aCB3aGF0IHdlJ3ZlIGdvdC4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpKTsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBkaXJl
bnRfbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopZGlyZW50X25hbWUpOw0KICAgICAgICAgICAg
ICAgIGRpcmVudF9lbnRfc2l6ZSA9IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUgKyBkaXJlbnRf
bmFtZV9sZW47DQoNCiAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGF0IGxlbmd0aCBvZiBuYW1l
IGluIHRoaXMgZGlyZW50IGlzIG5vdCBvZiB1bnJlYXNvbmFibGUgc2l6ZS4NCiAgICAgICAgICAg
ICAgICAgKiAyNTYgd2FzIHBpY2tlZCBvdXQgb2YgdGhlIGJsdWUNCiAgICAgICAgICAgICAgICAg
Ki8NCiAgICAgICAgICAgICAgICBpZiAoZGlyZW50X25hbWVfbGVuID4gMjU2KSB7DQogICAgICAg
ICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0X2RpcmVjdG9yeTogIg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbmFtZSBpbiBkaXJlbnQgYXQg
cG9zaXRpb24gJWxpIG9mICVsaSBpcyB0b28gbG9uZy4gKCVsaSBieXRlcykuIg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJiYWlsaW5nIG91dCB3aXRoIHdoYXQgd2UndmUgZ290
LiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvcyAtIGRpcmVu
dF9kYXRhKSwgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsb25nKWRpcmVudF9uYW1lX2xlbik7DQogICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg
ICAvKiAxMCBieXRlcyBvZiBhdHRyaWJ1dGVzLCBzaXplIGFuZCBkYXRlLCBhIG5hbWUgYW5kIGEg
TlVMTCB0ZXJtaW5hdGluZyBieXRlICovDQogICAgICAgICAgICAgICAgR1BfTE9HX0RBVEEgKChj
aGFyICopcG9zLCBkaXJlbnRfZW50X3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjYW5vbl9pbnRfbGlzdF9kaXJlY3Rvcnk6IGRpcmVudCBkZXRlcm1pbmVkIHRvIGJlICVsaT0w
eCVseCBieXRlcyA6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZGlyZW50
X2VudF9zaXplLCAobG9uZylkaXJlbnRfZW50X3NpemUpOw0KICAgICAgICAgICAgICAgIGlmIChk
aXJlbnRfbmFtZV9sZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LLCB0aGlzIGRp
cmVjdG9yeSBlbnRyeSBoYXMgYSBuYW1lIGluIGl0LiAqLw0KDQogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKGxpc3RfZm9sZGVycyAmJiBpc19kaXIpIHx8IChsaXN0X2ZpbGVzICYmIGlzX2Zp
bGUpKSB7DQoJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSAoY2hhciAqKWRpcmVudF9uYW1lOw0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGdvaW5nIHRvIGZpbGwg
b3V0IHRoZSBpbmZvIHN0cnVjdHVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiB0aGlzIGJsb2NrICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNl
dCAoJmluZm8sIDAsIHNpemVvZiAoaW5mbykpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIHdlIHN0YXJ0IHdpdGggbm90aGluZyBhbmQgY29udGludW91c2x5IGFkZCBzdHVm
ZiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzID0g
R1BfRklMRV9JTkZPX05PTkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5maWxlLm10aW1lID0gZGlyZW50X3RpbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmZvLmZpbGUubXRpbWUgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzIHw9IEdQX0ZJTEVfSU5GT19NVElNRTsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSkgew0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldGVybWluZSBmaWxlIHR5cGUgYmFz
ZWQgb24gZmlsZSBuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogdGhpcyBzdHVmZiBvbmx5IG1ha2VzIHNlbnNlIGZvciBmaWxlcywgbm90IGZvciBmb2xkZXJz
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5IChpbmZvLmZpbGUudHlwZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFt
ZTJtaW1ldHlwZSAoZmlsZW5hbWUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZiAoaW5mby5maWxlLnR5cGUpKTsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuZmllbGRzIHw9IEdQX0ZJTEVfSU5G
T19UWVBFOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRp
cmVudF9hdHRycyAmIENBTk9OX0FUVFJfTk9UX0RPV05MT0FERUQpDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUuc3RhdHVzID0gR1BfRklM
RV9TVEFUVVNfTk9UX0RPV05MT0FERUQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5maWxlLnN0YXR1cyA9IEdQX0ZJTEVfU1RBVFVTX0RPV05MT0FERUQ7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlLmZpZWxkcyB8PSBH
UF9GSUxFX0lORk9fU1RBVFVTOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogdGhlIHNpemUgaXMgbG9jYXRlZCBhdCBvZmZzZXQgMiBhbmQgaXMgNA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ5dGVzIGxvbmcsIHJlLW9yZGVy
IGxpdHRsZS9iaWcgZW5kaWFuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5maWxlLnNpemUgPSBkaXJlbnRfZmlsZV9zaXplOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZmlsZS5maWVsZHMgfD0gR1BfRklMRV9JTkZP
X1NJWkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaWxl
IGFjY2VzcyBtb2RlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9XUklURV9QUk9URUNURUQpID09IDApDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmZpbGUu
cGVybWlzc2lvbnMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHUF9GSUxFX1BFUk1fUkVBRCB8DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0ZJTEVfUEVSTV9ERUxFVEU7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlLnBlcm1pc3Npb25z
ID0gR1BfRklMRV9QRVJNX1JFQUQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fUEVSTUlTU0lPTlM7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBwcmludCBkaXJlbnQgYXMgdGV4dCAqLw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHUF9ERUJVRyAoIlJhdyBpbmZvOiBuYW1lPSVzIGlzX2Rpcj0laSwgaXNfZmls
ZT0laSwgYXR0cnM9MHgleCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJlbnRfbmFtZSwgaXNfZGlyLCBpc19maWxlLCBkaXJlbnRfYXR0cnMpOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19maWxlaW5mbyAoJmluZm8pOw0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19maWxlKSB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBBcHBlbmQgZGlyZWN0bHkgdG8gdGhlIGZpbGVzeXN0ZW0gaW5zdGVh
ZCBvZiB0byB0aGUgbGlzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBiZWNhdXNlIHdlIGhhdmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4NCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNhbWVyYS0+cGwtPmxpc3RfYWxsX2ZpbGVzDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc19pbWFnZSAoZmlsZW5h
bWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFpc19t
b3ZpZSAoZmlsZW5hbWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFpc19hdWRpbyAoZmlsZW5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogRmluZCBhc3NvY2lhdGVkIG1haW4gZmls
ZSBhbmQgYWRkIGl0IHRoZXJlICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIklnbm9yZWQgJXMvJXMiLCBmb2xkZXIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICp0aHVtYm5hbWU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcyA9IGdwX2ZpbGVzeXN0ZW1fYXBwZW5kIChjYW1lcmEtPmZzLCBm
b2xkZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSBHUF9PSykgew0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9E
RUJVRyAoIkNvdWxkIG5vdCBncF9maWxlc3lzdGVtX2FwcGVuZCAiDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW4g
Zm9sZGVyICVzOiAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZm9sZGVyLCBncF9yZXN1bHRfYXNf
c3RyaW5nIChyZXMpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiQWRkZWQgZmlsZSAlcy8lcyIsIGZvbGRlciwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGVuYW1lKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHVtYm5hbWUgPQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uX2ludF9maWxlbmFt
ZTJ0aHVtYm5hbWUgKGNhbWVyYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWxlbmFtZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aHVtYm5hbWUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHRodW1i
bmFpbCAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNfY3IyICggZmlsZW5hbWUgKSApIHsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIFdlIGdldCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgcmF3IGZpbGUgYXMg
dGhlIHRodW1ibmFpbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgKGFsbW9zdCkgYSB2YWxp
ZCBFWElGIGZpbGUuICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnByZXZpZXcuZmllbGRzID0NCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1BfRklMRV9JTkZPX1RZUEU7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJuY3B5IChpbmZvLnByZXZpZXcudHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX01J
TUVfRVhJRiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoaW5mby5wcmV2aWV3LnR5
cGUpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbGRlciBD
YW5vbiBjYW1zIGhhdmUgSlBFRyB0aHVtYnMgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucHJldmll
dy5maWVsZHMgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9GSUxFX0lORk9fVFlQRTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cm5jcHkgKGluZm8ucHJldmlldy50eXBlLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1BfTUlNRV9KUEVHLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChp
bmZvLnByZXZpZXcudHlwZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGdwX2ZpbGVzeXN0ZW1fc2V0
X2luZm9fbm9vcCAoY2FtZXJhLT5mcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xk
ZXIsIGZpbGVuYW1lLCBpbmZvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQp
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVzICE9IEdQX09LKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJDb3VsZCBub3QgZ3BfZmls
ZXN5c3RlbV9zZXRfaW5mb19ub29wKCkgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW4gZm9sZGVy
ICVzOiAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBmb2xkZXIsIGdwX3Jlc3VsdF9h
c19zdHJpbmcgKHJlcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHUF9ERUJVRyAoICJmaWxlIFwiJXNcIiBoYXMgcHJldmlldyBvZiBNSU1FIHR5cGUgXCIl
c1wiIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZW5hbWUsIGluZm8ucHJldmlldy50eXBlICk7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgY2FtZXJhcyBoYXZl
ICIuLiIgZXhwbGljaXRseQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhdCB0
aGUgZW5kIG9mIGVhY2ggZGlyZWN0b3J5LiBXZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiB3aWxsIHNpbGVudGx5IG9taXQgdGhpcyBmcm9tIHRoZQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBkaXJlY3RvcnkgcmV0dXJuZWQuICovDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNfZGlyICYmIHN0cmNtcCAoICIuLiIsIGZpbGVuYW1l
ICkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gZ3Bf
bGlzdF9hcHBlbmQgKGxpc3QsIGZpbGVuYW1lLCBOVUxMKTsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IEdQX09LKQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJDb3VsZCBub3QgZ3BfbGlz
dF9hcHBlbmQgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb2xkZXIgJXM6ICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIsIGdwX3Jlc3VsdF9hc19zdHJp
bmcgKHJlcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiB0aGlzIGNhc2UgY291bGQgbWVhbiB0aGF0IHRoaXMgd2FzIHRoZSBsYXN0IGRpcmVudCAqLw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9saXN0
X2RpcmVjdG9yeTogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRpcmVudCBhdCBwb3NpdGlvbiAlbGkgb2YgJWxpIGhhcyBOVUxMIG5hbWUsIHNraXBwaW5nLiIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zIC0g
ZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSkpOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg
IC8qIG1ha2UgJ3BvcycgcG9pbnQgdG8gbmV4dCBkaXJlbnQgaW4gcGFja2V0Lg0KICAgICAgICAg
ICAgICAgICAqIGZpcnN0IHdlIHNraXAgMTAgYnl0ZXMgb2YgYXR0cmlidXRlLCBzaXplIGFuZCBk
YXRlLA0KICAgICAgICAgICAgICAgICAqIHRoZW4gd2Ugc2tpcCB0aGUgbmFtZSBwbHVzIDEgZm9y
IHRoZSBOVUxMDQogICAgICAgICAgICAgICAgICogdGVybWluYXRpb24gYnl0ZXMuDQogICAgICAg
ICAgICAgICAgICovDQogICAgICAgICAgICAgICAgcG9zICs9IGRpcmVudF9lbnRfc2l6ZTsNCiAg
ICAgICAgfQ0KICAgICAgICBmcmVlIChkaXJlbnRfZGF0YSk7DQogICAgICAgIGRpcmVudF9kYXRh
ID0gTlVMTDsNCg0KICAgICAgICBHUF9ERUJVRyAoIjxGSUxFU1lTVEVNLURVTVA+Iik7DQogICAg
ICAgIGdwX2ZpbGVzeXN0ZW1fZHVtcCAoY2FtZXJhLT5mcyk7DQogICAgICAgIEdQX0RFQlVHICgi
PC9GSUxFU1lTVEVNLURVTVA+Iik7DQoNCiAgICAgICAgR1BfREVCVUcgKCJFTkQgY2Fub25faW50
X2xpc3RfZGlyKCkgZm9sZGVyICclcycgYWthICclcyciLCBmb2xkZXIsIGNhbm9uZm9sZGVyKTsN
Cg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoNCi8qKg0KICogY2Fub25faW50X2dldF9maWxl
Og0KICogQGNhbWVyYToNCiAqIEBuYW1lOiBuYW1lIG9mIGZpbGUgdG8gZmV0Y2gNCiAqIEBkYXRh
OiB0byByZWNlaXZlIGZpbGUgZGF0YQ0KICogQGxlbmd0aDogbGVuZ3RoIG9mIEBkYXRhDQogKiBA
Y29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogR2V0cyB0aGUgZGly
ZWN0b3J5IHRyZWUgb2YgYSBnaXZlbiBmbGFzaCBkZXZpY2UuDQogKg0KICogUmV0dXJuczogZ3Bo
b3RvMiBlcnJvciBjb2RlLCBmaWxlIGNvbnRlbnRzIGluIEBkYXRhLA0KICogIGxlbmd0aCBvZiBm
aWxlIGluIEBsZW5ndGguDQogKg0KICovDQppbnQNCmNhbm9uX2ludF9nZXRfZmlsZSAoQ2FtZXJh
ICpjYW1lcmEsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKipkYXRhLCB1bnNpZ25l
ZCBpbnQgKmxlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgR1BDb250ZXh0ICpjb250ZXh0KQ0K
ew0KICAgICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAg
IGNhc2UgR1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25f
dXNiX2dldF9maWxlIChjYW1lcmEsIG5hbWUsIGRhdGEsIGxlbmd0aCwgY29udGV4dCk7DQogICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRf
U0VSSUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEgPSBjYW5vbl9zZXJpYWxfZ2V0
X2ZpbGUgKGNhbWVyYSwgbmFtZSwgbGVuZ3RoLCBjb250ZXh0KTsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgqZGF0YSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdQX09LOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX09TX0ZBSUxV
UkU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBHUF9Q
T1JUX0RFRkFVTFQNCiAgICAgICAgfQ0KfQ0KDQovKioNCiAqIGNhbm9uX2ludF9nZXRfdGh1bWJu
YWlsOg0KICogQGNhbWVyYTogY2FtZXJhIHRvIHdvcmsgd2l0aA0KICogQG5hbWU6IGltYWdlIHRv
IGdldCB0aHVtYm5haWwgb2YNCiAqIEBsZW5ndGg6IGxlbmd0aCBvZiBkYXRhIHJldHVybmVkDQog
KiBAcmV0ZGF0YTogVGhlIHRodW1ibmFpbCBkYXRhDQogKiBAY29udGV4dDogY29udGV4dCBmb3Ig
ZXJyb3IgcmVwb3J0aW5nDQogKg0KICogTk9URTogU2luY2UgY2FtZXJhcyB0aGF0IGRvIG5vdCBz
dG9yZSB0aGUgdGh1bWJuYWlsIGluIGEgc2VwYXJhdGUNCiAqIGZpbGUgZG9lcyBub3QgcmV0dXJu
IGp1c3QgdGhlIHRodW1ibmFpbCBidXQgdGhlIGZpcnN0IDEwODEzIGJ5dGVzDQogKiBvZiB0aGUg
aW1hZ2UgKG1vc3Qgb2Z0ZW4gdGhlIEVYSUYgaGVhZGVyIHdpdGggdGh1bWJuYWlsIGRhdGEgaW4N
CiAqIGl0KSB0aGlzIG11c3QgYmUgdHJlYXRlZCBiZWZvcmUgY2FsbGVkIGEgdHJ1ZSB0aHVtYm5h
aWwuDQogKg0KICogUmV0dXJuczogcmVzdWx0IGZyb20gY2Fub25fdXNiX2dldF90aHVtYm5haWwo
KQ0KICogICBvciBjYW5vbl9zZXJpYWxfZ2V0X3RodW1ibmFpbCgpDQogKg0KICovDQppbnQNCmNh
bm9uX2ludF9nZXRfdGh1bWJuYWlsIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqbmFtZSwg
dW5zaWduZWQgY2hhciAqKnJldGRhdGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpsZW5ndGgsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgaW50IHJlczsN
Cg0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfdGh1bWJuYWlsKCkgY2FsbGVkIGZv
ciBmaWxlICclcyciLCBuYW1lKTsNCg0KICAgICAgICBDT05fQ0hFQ0tfUEFSQU1fTlVMTCAocmV0
ZGF0YSk7DQogICAgICAgIENPTl9DSEVDS19QQVJBTV9OVUxMIChsZW5ndGgpOw0KDQogICAgICAg
IHN3aXRjaCAoY2FtZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9Q
T1JUX1VTQjoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3VzYl9nZXRfdGh1
bWJuYWlsIChjYW1lcmEsIG5hbWUsIHJldGRhdGEsIGxlbmd0aCwgY29udGV4dCk7DQogICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfU0VS
SUFMOg0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gY2Fub25fc2VyaWFsX2dldF90aHVt
Ym5haWwgKGNhbWVyYSwgbmFtZSwgcmV0ZGF0YSwgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9SVF9ERUZBVUxU
DQogICAgICAgIH0NCiAgICAgICAgaWYgKHJlcyAhPSBHUF9PSykgew0KICAgICAgICAgICAgICAg
IEdQX0RFQlVHICgiY2Fub25faW50X2dldF90aHVtYm5haWwoKSBmYWlsZWQsIHJldHVybmVkICVp
IiwgcmVzKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOw0KICAgICAgICB9DQoNCiAgICAg
ICAgcmV0dXJuIHJlczsNCn0NCg0KLyoqDQogKiBjYW5vbl9pbnRfZGVsZXRlX2ZpbGU6DQogKiBA
Y2FtZXJhOiBjYW1lcmEgdG8gd29yayB3aXRoDQogKiBAbmFtZTogaW1hZ2UgdG8gZGVsZXRlDQog
KiBAZGlyOiBkaXJlY3RvcnkgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGZpbGUNCiAqIEBjb250
ZXh0OiBjb250ZXh0IGZvciBlcnJvciByZXBvcnRpbmcNCiAqDQogKiBEZWxldGVzIGEgZmlsZSBm
cm9tIHRoZSBjYW1lcmEgc3RvcmFnZS4NCiAqDQogKiBSZXR1cm5zOiByZXN1bHQgZnJvbSBjYW5v
bl91c2JfZGlhbG9ndWUoKSBvciBjYW5vbl9zZXJpYWxfZGlhbG9ndWUoKQ0KICoNCiAqLw0KaW50
DQpjYW5vbl9pbnRfZGVsZXRlX2ZpbGUgKENhbWVyYSAqY2FtZXJhLCBjb25zdCBjaGFyICpuYW1l
LCBjb25zdCBjaGFyICpkaXIsIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWdu
ZWQgY2hhciBwYXlsb2FkWzMwMF07DQogICAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZzsNCiAgICAg
ICAgdW5zaWduZWQgaW50IGxlbiwgcGF5bG9hZF9sZW5ndGg7DQoNCiAgICAgICAgc3dpdGNoIChj
YW1lcmEtPnBvcnQtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdQX1BPUlRfVVNCOg0K
ICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChwYXlsb2FkLCBkaXIsIHN0cmxlbiAoZGly
KSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYW1lcmEtPnBsLT5tZC0+bW9k
ZWwgPT0gQ0FOT05fQ0xBU1NfNiApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqcHRyID0gKGNoYXIgKilwYXlsb2FkICsgc3RybGVuKGRpcik7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgbGFzdF9ieXRlID0gZGlyW3N0cmxlbihkaXIpLTFdOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXdlciBwcm90b2NvbCB1c2VzIGEg
ZGlmZmVyZW50DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNvZGUgYW5kIGhh
cyBkaWZmZXJlbnQgcGFyYW1ldGVyczoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogLSBmdWxsIHBhdGggbmFtZSB0b2dldGhlciwgcmF0aGVyIHRoYW4gZGlyZWN0b3J5IGFuZCBm
aWxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgYXMgc2VwYXJhdGUgc3Ry
aW5ncw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtIDggYnl0ZXMgb2Ygb3Ro
ZXIgc3R1ZmYsIHN0YXJ0aW5nIGF0IDB4MjAgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogICBwYXlsb2FkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0g
ZGlyZWN0b3J5IG5hbWUgKGFnYWluKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiAtIDIgbnVsbCBieXRlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGxhc3RfYnl0ZSAhPSAnXFwnICYmIGxhc3RfYnl0ZSAhPSAnLycgKQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpwdHIrKyA9ICdcXCc7IC8qIE5lZWQgcGF0aCBzZXBh
cmF0b3IgYmV0d2VlbiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkg
KCBwdHIsIG5hbWUsIDB4MzAgLSBzdHJsZW4oZGlyKSAtIDEgKTsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZW1jcHkgKCBwYXlsb2FkICsgMHgzMCwgZGlyLCAweDMwICk7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWRfbGVuZ3RoID0gMHgzMCArIHN0
cmxlbihkaXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxhc3RfYnl0
ZSAhPSAnXFwnICYmIGxhc3RfYnl0ZSAhPSAnLycgKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBheWxvYWRbcGF5bG9hZF9sZW5ndGgrK10gPSAnXFwnOyAvKiBOZWVk
IHBhdGggc2VwYXJhdG9yIGF0IGVuZCBvZiBkaXJlY3RvcnkgbmFtZSAqLw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3VzYl9kaWFsb2d1ZSAoY2FtZXJhLCBD
QU5PTl9VU0JfRlVOQ1RJT05fREVMRVRFX0ZJTEVfMiwgJmxlbiwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLCBwYXlsb2Fk
X2xlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChwYXls
b2FkICsgc3RybGVuIChkaXIpICsgMSwgbmFtZSwgc3RybGVuIChuYW1lKSArIDEpOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aCA9IHN0cmxlbiAoZGlyKSAr
IHN0cmxlbiAobmFtZSkgKyAyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXls
b2FkW3BheWxvYWRfbGVuZ3RoKytdID0gMDsgLyogRG91YmxlIE5VTCB0byBlbmQgY29tbWFuZCAq
Lw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBjYW5vbl91c2JfZGlhbG9n
dWUgKGNhbWVyYSwgQ0FOT05fVVNCX0ZVTkNUSU9OX0RFTEVURV9GSUxFLCAmbGVuLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxv
YWQsIHBheWxvYWRfbGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbXNnID09IE5VTEwgKQ0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfT1NfRkFJTFVSRTsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCBsZTMyYXRvaCAoIG1zZyApICE9IDAgKSB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2ludF9kZWxldGVfZmlsZTogIg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24temVybyByZXR1
cm4gY29kZSAweCV4IGZyb20gY2FtZXJhLiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlBvc3NpYmx5IHRyaWVkIHRvIGRlbGV0ZSBhIG5vbmV4aXN0ZW50IGZp
bGUuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyYXRv
aCAoIG1zZyApICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9F
UlJPUl9GSUxFX05PVF9GT1VORDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1NF
UklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNhbm9uX3NlcmlhbF9kaWFsb2d1
ZSAoY2FtZXJhLCBjb250ZXh0LCAweGQsIDB4MTEsICZsZW4sIGRpciwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChkaXIpICsgMSwg
bmFtZSwgc3RybGVuIChuYW1lKSArIDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtc2cgPT0gTlVMTCApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25f
c2VyaWFsX2Vycm9yX3R5cGUgKGNhbWVyYSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHUF9FUlJPUl9PU19GQUlMVVJFOw0KICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgR1BfUE9S
VF9ERUZBVUxUDQogICAgICAgIH0NCg0KICAgICAgICBpZiAobGVuICE9IDQpIHsNCiAgICAgICAg
ICAgICAgICAvKiBYWFggc2hvdWxkIG1hcmsgZm9sZGVyIGFzIGRpcnR5IHNpbmNlIHdlIGNhbid0
IGJlIHN1cmUgaWYgdGhlIGZpbGUNCiAgICAgICAgICAgICAgICAgKiBnb3QgZGVsZXRlZCBvciBu
b3QNCiAgICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf
Q09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobXNnWzBdID09IDB4Mjkp
IHsNCiAgICAgICAgICAgICAgICBncF9jb250ZXh0X2Vycm9yIChjb250ZXh0LCBfKCJGaWxlIHBy
b3RlY3RlZC4iKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIEdQX0VSUk9SX0NBTUVSQV9FUlJP
UjsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIFhYWCB3ZSBzaG91bGQgbWFyayBmb2xkZXIgYXMg
ZGlydHksIHJlLXJlYWQgaXQgYW5kIGNoZWNrIGlmIHRoZSBmaWxlDQogICAgICAgICAqIGlzIGdv
bmUgb3Igbm90Lg0KICAgICAgICAgKi8NCiAgICAgICAgcmV0dXJuIEdQX09LOw0KfQ0KDQovKioN
CiAqIGNhbm9uX2ludF9wdXRfZmlsZToNCiAqIEBjYW1lcmE6IGNhbWVyYSB0byB3b3JrIHdpdGgN
CiAqIEBmaWxlOiBncGhvdG8yIGZpbGUgb2JqZWN0IHRvIHVwbG9hZA0KICogQGRlc3RuYW1lOiBu
YW1lIGZvciBmaWxlIG9uIGNhbWVyYQ0KICogQGRlc3RwYXRoOiBkaXJlY3RvcnkgaW4gd2hpY2gg
dG8gcHV0IHRoZSBmaWxlDQogKiBAY29udGV4dDogY29udGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5n
DQogKg0KICogVXBsb2FkcyBhIGZpbGUgdG8gdGhlIGNhbWVyYS4NCiAqDQogKiBSZXR1cm5zOiBy
ZXN1bHQgZnJvbSBjYW5vbl91c2JfcHV0X2ZpbGUoKSBvciBjYW5vbl9zZXJpYWxfcHV0X2ZpbGUo
KQ0KICoNCiAqLw0KaW50DQpjYW5vbl9pbnRfcHV0X2ZpbGUgKENhbWVyYSAqY2FtZXJhLCBDYW1l
cmFGaWxlICpmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwNCgkJICAgIGNvbnN0IGNoYXIgKmRl
c3RuYW1lLCBjb25zdCBjaGFyICpkZXN0cGF0aCwgR1BDb250ZXh0ICpjb250ZXh0KQ0Kew0KICAg
ICAgICBzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2Ug
R1BfUE9SVF9VU0I6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25fdXNiX3B1
dF9maWxlIChjYW1lcmEsIGZpbGUsIGZpbGVuYW1lLCBkZXN0bmFtZSwgZGVzdHBhdGgsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug
R1BfUE9SVF9TRVJJQUw6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Fub25fc2Vy
aWFsX3B1dF9maWxlIChjYW1lcmEsIGZpbGUsIGZpbGVuYW1lLCBkZXN0bmFtZSwgZGVzdHBhdGgs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg
IEdQX1BPUlRfREVGQVVMVA0KICAgICAgICB9DQogICAgICAgIC8qIE5ldmVyIHJlYWNoZWQgKi8N
CiAgICAgICAgcmV0dXJuIEdQX0VSUk9SOw0KfQ0KDQppbnQNCmNhbm9uX2ludF93YWl0X2Zvcl9l
dmVudCAoQ2FtZXJhICpjYW1lcmEsIGludCB0aW1lb3V0LA0KICAgICAgICAgICAgICAgIENhbWVy
YUV2ZW50VHlwZSAqZXZlbnR0eXBlLCB2b2lkICoqZXZlbnRkYXRhLA0KICAgICAgICAgICAgICAg
IEdQQ29udGV4dCAqY29udGV4dCkNCnsNCglzd2l0Y2ggKGNhbWVyYS0+cG9ydC0+dHlwZSkgew0K
CWNhc2UgR1BfUE9SVF9VU0I6DQoJCXJldHVybiBjYW5vbl91c2Jfd2FpdF9mb3JfZXZlbnQgKGNh
bWVyYSwgdGltZW91dCwgZXZlbnR0eXBlLCBldmVudGRhdGEsIGNvbnRleHQpOw0KCQlicmVhazsN
CglHUF9QT1JUX0RFRkFVTFQNCgl9DQoJLyogTmV2ZXIgcmVhY2hlZCAqLw0KCXJldHVybiBHUF9F
UlJPUjsNCn0NCg0KLyogTk9URToNCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFjdHVhbGx5IG5v
dCBiZSBuZWNlc3NhcnksIGFzDQogKiBjYW5vbl9pbnRfbGlzdF9kaXJlY3RvcnkgcHJlcHMgdGhl
IGZpbGVzeXN0ZW0gaW5mbyBiYWNraW5nIHN0b3JlIHdpdGgNCiAqIGFsbCB0aGUgQ2FtZXJhRmls
ZUluZm9zIGl0IG5lZWRzLg0KICogSXQgbWlnaHQgbmV2ZXIgYmUgY2FsbGVkLg0KICovDQppbnQN
CmNhbm9uX2ludF9nZXRfaW5mb19mdW5jIChDYW1lcmEgKmNhbWVyYSwgY29uc3QgY2hhciAqZm9s
ZGVyLA0KICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBDYW1lcmFGaWxlSW5m
byAqaW5mbywNCiAgICAgICAgICAgICAgICBHUENvbnRleHQgKmNvbnRleHQpDQp7DQoJLyogRklY
TUU6IGJpZyBjb3B5IGFuZCBwYXN0ZSBtZXNzIGZyb20gY2Fub25faW50X2xpc3RfZGlyZWN0b3J5
ICovDQogICAgICAgIGludCByZXM7DQogICAgICAgIHVuc2lnbmVkIGludCBkaXJlbnRzX2xlbmd0
aDsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqZGlyZW50X2RhdGEgPSBOVUxMOw0KICAgICAgICB1
bnNpZ25lZCBjaGFyICplbmRfb2ZfZGF0YSwgKnRlbXBfY2gsICpwb3M7DQogICAgICAgIGNvbnN0
IGNoYXIgKmNhbm9uZm9sZGVyID0gZ3Bob3RvMmNhbm9ucGF0aCAoY2FtZXJhLCBmb2xkZXIsIGNv
bnRleHQpOw0KDQogICAgICAgIEdQX0RFQlVHICgiQkVHSU4gY2Fub25faW50X2dldF9pbmZvX2Z1
bmMoKSBmb2xkZXIgJyVzJyBha2EgJyVzJyBmaWxlbmFtZSAlcyIsIGZvbGRlciwgY2Fub25mb2xk
ZXIsIGZpbGVuYW1lKTsNCg0KICAgICAgICBpZiAoIGNhbm9uZm9sZGVyID09IE5VTEwgKSB7DQog
ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiRXJyb3I6IGNhbm9uX2ludF9nZXRfaW5mb19mdW5j
IGNhbGxlZCB3aXRoIG51bGwgbmFtZSBmb3IgY2FtZXJhIGZvbGRlciIgKTsNCiAgICAgICAgICAg
ICAgICByZXR1cm4gR1BfRVJST1I7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBGZXRjaCBhbGwg
ZGlyZWN0b3J5IGVudHJpZXMgZnJvbSB0aGUgY2FtZXJhICovDQogICAgICAgIHN3aXRjaCAoY2Ft
ZXJhLT5wb3J0LT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JUX1VTQjoNCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3VzYl9nZXRfZGlyZW50cyAoY2FtZXJh
LCAmZGlyZW50X2RhdGEsICZkaXJlbnRzX2xlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25mb2xkZXIsIGNvbnRleHQpOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBHUF9QT1JU
X1NFUklBTDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGNhbm9uX3NlcmlhbF9nZXRf
ZGlyZW50cyAoY2FtZXJhLCAmZGlyZW50X2RhdGEsICZkaXJlbnRzX2xlbmd0aCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25mb2xk
ZXIsIGNvbnRleHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg
ICAgICAgR1BfUE9SVF9ERUZBVUxUDQogICAgICAgIH0NCiAgICAgICAgaWYgKHJlcyAhPSBHUF9P
SykNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOw0KDQogICAgICAgIGVuZF9vZl9kYXRhID0g
ZGlyZW50X2RhdGEgKyBkaXJlbnRzX2xlbmd0aDsNCg0KICAgICAgICBpZiAoZGlyZW50c19sZW5n
dGggPCBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKSB7DQogICAgICAgICAgICAgICAgZ3BfY29u
dGV4dF9lcnJvciAoY29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogRVJST1I6ICINCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbml0aWFsIG1lc3NhZ2UgdG9vIHNob3J0ICglaSA8IG1pbmltdW0g
JWkpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50c19sZW5ndGgs
IENBTk9OX01JTklNVU1fRElSRU5UX1NJWkUpOw0KICAgICAgICAgICAgICAgIGZyZWUgKGRpcmVu
dF9kYXRhKTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQogICAgICAgICAg
ICAgICAgcmV0dXJuIEdQX0VSUk9SX0NPUlJVUFRFRF9EQVRBOw0KICAgICAgICB9DQoNCiAgICAg
ICAgLyogVGhlIGZpcnN0IGRhdGEgd2UgaGF2ZSBnb3QgaGVyZSBpcyB0aGUgZGlyZW50IGZvciB0
aGUNCiAgICAgICAgICogZGlyZWN0b3J5IHdlIGFyZSByZWFkaW5nLiBTa2lwIG92ZXIgMTAgYnl0
ZXMNCiAgICAgICAgICogKDIgZm9yIGF0dHJpYnV0ZXMsIDQgZGF0ZSBhbmQgNCBzaXplKSBhbmQg
dGhlbiBnbyBmaW5kDQogICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBuYW1lIHNv
IHRoYXQgd2UgZ2V0IHRvIHRoZSBuZXh0DQogICAgICAgICAqIGRpcmVudCB3aGljaCBpcyBhY3R1
YWxseSB0aGUgZmlyc3Qgb25lIHdlIGFyZSBpbnRlcmVzdGVkDQogICAgICAgICAqIGluDQogICAg
ICAgICAqLw0KICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfaW5mb19mdW5jOiBDYW1l
cmEgZGlyZWN0b3J5IGxpc3RpbmcgZm9yIGRpcmVjdG9yeSAnJXMnIiwNCiAgICAgICAgICAgICAg
ICAgIGRpcmVudF9kYXRhICsgQ0FOT05fRElSRU5UX05BTUUpOw0KDQogICAgICAgIGZvciAocG9z
ID0gZGlyZW50X2RhdGEgKyBDQU5PTl9ESVJFTlRfTkFNRTsgcG9zIDwgZW5kX29mX2RhdGEgJiYg
KnBvcyAhPSAwOyBwb3MrKykNCiAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsNCiAg
ICAgICAgaWYgKHBvcyA9PSBlbmRfb2ZfZGF0YSB8fCAqcG9zICE9IDApIHsNCiAgICAgICAgICAg
ICAgICBncF9sb2cgKEdQX0xPR19FUlJPUiwgImNhbm9uX2ludF9nZXRfaW5mb19mdW5jIiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhY2hlZCBlbmQgb2YgcGFja2V0IHdo
aWxlIGV4YW1pbmluZyB0aGUgZmlyc3QgZGlyZW50Iik7DQogICAgICAgICAgICAgICAgZnJlZSAo
ZGlyZW50X2RhdGEpOw0KICAgICAgICAgICAgICAgIGRpcmVudF9kYXRhID0gTlVMTDsNCiAgICAg
ICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCiAg
ICAgICAgcG9zKys7ICAgICAgICAgICAgICAgICAgLyogc2tpcCBOVUxMIGJ5dGUgdGVybWluYXRp
bmcgZGlyZWN0b3J5IG5hbWUgKi8NCg0KICAgICAgICAvKiB3ZSBhcmUgbm93IHBvc2l0aW9uZWQg
YXQgdGhlIGZpcnN0IGludGVyZXN0aW5nIGRpcmVudCAqLw0KDQogICAgICAgIC8qIFRoaXMgaXMg
dGhlIG1haW4gbG9vcCwgZm9yIGV2ZXJ5IGRpcmVjdG9yeSBlbnRyeSByZXR1cm5lZCAqLw0KICAg
ICAgICB3aGlsZSAocG9zIDwgZW5kX29mX2RhdGEpIHsNCiAgICAgICAgICAgICAgICBpbnQgaXNf
ZGlyLCBpc19maWxlOw0KICAgICAgICAgICAgICAgIHVpbnQxNl90IGRpcmVudF9hdHRyczsgIC8q
IGF0dHJpYnV0ZXMgb2YgZGlyZW50ICovDQogICAgICAgICAgICAgICAgdWludDMyX3QgZGlyZW50
X2ZpbGVfc2l6ZTsgICAgICAvKiBzaXplIG9mIGRpcmVudCBpbiBvY3RldHMgKi8NCiAgICAgICAg
ICAgICAgICB1aW50MzJfdCBkaXJlbnRfdGltZTsgICAvKiB0aW1lIHN0YW1wIG9mIGRpcmVudCAo
VW5peCBFcG9jaCkgKi8NCiAgICAgICAgICAgICAgICB1aW50OF90ICpkaXJlbnRfbmFtZTsgICAv
KiBuYW1lIG9mIGRpcmVudCAqLw0KICAgICAgICAgICAgICAgIHNpemVfdCBkaXJlbnRfbmFtZV9s
ZW47IC8qIGxlbmd0aCBvZiBkaXJlbnRfbmFtZSAqLw0KICAgICAgICAgICAgICAgIHNpemVfdCBk
aXJlbnRfZW50X3NpemU7IC8qIHNpemUgb2YgZGlyZW50IGluIG9jdGV0cyAqLw0KICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHRtcF90aW1lOw0KICAgICAgICAgICAgICAgIHRpbWVfdCBkYXRlOw0K
ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqdG07DQoNCiAgICAgICAgICAgICAgICBkaXJlbnRf
YXR0cnMgPSBsZTE2YXRvaCAocG9zICsgQ0FOT05fRElSRU5UX0FUVFJTKTsNCiAgICAgICAgICAg
ICAgICBkaXJlbnRfZmlsZV9zaXplID0gbGUzMmF0b2ggKHBvcyArIENBTk9OX0RJUkVOVF9TSVpF
KTsNCiAgICAgICAgICAgICAgICBkaXJlbnRfbmFtZSA9IHBvcyArIENBTk9OX0RJUkVOVF9OQU1F
Ow0KDQogICAgICAgICAgICAgICAgLyogc2VlIGNhbm9uX2ludF9zZXRfdGltZSgpIGZvciB0aW1l
em9uZSBoYW5kbGluZyAqLw0KICAgICAgICAgICAgICAgIHRtcF90aW1lID0gbGUzMmF0b2ggKHBv
cyArIENBTk9OX0RJUkVOVF9USU1FKTsNCiAgICAgICAgICAgICAgICBpZiAodG1wX3RpbWUgIT0g
MCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLyogRklYTUU6IEkganVzdCB3YW50IHRoZSB0
bV9nbXRvZmYvdGltZXpvbmUgaW5mbyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9
IHRpbWUoTlVMTCk7DQogICAgICAgICAgICAgICAgICAgICAgICB0bSAgID0gbG9jYWx0aW1lICgm
ZGF0ZSk7DQojaWZkZWYgSEFWRV9UTV9HTVRPRkYNCiAgICAgICAgICAgICAgICAgICAgICAgIGRp
cmVudF90aW1lID0gdG1wX3RpbWUgLSB0bS0+dG1fZ210b2ZmOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogY29udmVydGVkICVsZCB0
byBVVEMgJWxkICh0bV9nbXRvZmYgaXMgJWxkKSIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChsb25nKXRtcF90aW1lLCAobG9uZylkaXJlbnRfdGltZSwgKGxvbmcpdG0tPnRtX2dt
dG9mZik7DQojZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBf
dGltZSArIHRpbWV6b25lOw0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5v
bl9pbnRfZ2V0X2luZm9fZnVuYzogY29udmVydGVkICVsZCB0byBVVEMgJWxkICh0aW1lem9uZSBp
cyAlbGQpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpdG1wX3RpbWUs
IChsb25nKWRpcmVudF90aW1lLCAobG9uZyl0aW1lem9uZSk7DQojZW5kaWYNCiAgICAgICAgICAg
ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZGlyZW50X3RpbWUgPSB0bXBf
dGltZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpc19kaXIgPSAoKGRp
cmVudF9hdHRycyAmIENBTk9OX0FUVFJfTk9OX1JFQ1VSU19FTlRfRElSKSAhPSAwKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgKChkaXJlbnRfYXR0cnMgJiBDQU5PTl9BVFRSX1JFQ1VSU19F
TlRfRElSKSAhPSAwKTsNCiAgICAgICAgICAgICAgICBpc19maWxlID0gIWlzX2RpcjsNCg0KICAg
ICAgICAgICAgICAgIGdwX2xvZyAoR1BfTE9HX0RBVEEsICJjYW5vbi9jYW5vbi5jIiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWRpbmcgZGlyZW50IGF0IHBvc2l0aW9uICVsaSBvZiAlbGkgKDB4
JWx4IG9mIDB4JWx4KSIsDQogICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zIC0gZGly
ZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAg
ICAgICAgICAgICAgICAobG9uZykocG9zIC0gZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2Rh
dGEgLSBkaXJlbnRfZGF0YSkgKTsNCg0KICAgICAgICAgICAgICAgIGlmIChwb3MgKyBDQU5PTl9N
SU5JTVVNX0RJUkVOVF9TSVpFID4gZW5kX29mX2RhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjYW1lcmEtPnBvcnQtPnR5cGUgPT0gR1BfUE9SVF9TRVJJQUwpIHsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIGl0IGlzIG9ubHkgTlVM
TCBieXRlcyBsZWZ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IGlz
IG5vdCBhbiBlcnJvciBmb3Igc2VyaWFsIGNhbWVyYXMNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogKGF0IGxlYXN0IHRoZSBBNTAgYWRkcyBmaXZlIHplcm8gYnl0ZXMgYXQgdGhl
IGVuZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodGVtcF9jaCA9IHBvczsgKHRlbXBfY2ggPCBlbmRfb2Zf
ZGF0YSkgJiYgKCEqdGVtcF9jaCk7IHRlbXBfY2grKykgOyAgICAgICAgLyogZG8gbm90aGluZyAq
Lw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wX2NoID09IGVuZF9v
Zl9kYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVC
VUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxhc3QgJWxpIGJ5dGVzIHdlcmUgYWxsIDAg
LSBpZ25vcmluZy4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVH
ICgiY2Fub25faW50X2dldF9pbmZvX2Z1bmM6ICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVbJWxpPTB4JWx4XSA9PSAlaT0weCV4IiwgKGxv
bmcpKHRlbXBfY2ggLSBwb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobG9uZykodGVtcF9jaCAtIHBvcyksICp0ZW1wX2NoLCAqdGVtcF9jaCk7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5v
bl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicG9zIGlzICVwLCBlbmRfb2ZfZGF0YSBpcyAlcCwgdGVtcF9jaCBp
cyAlcCAtIGRpZmYgaXMgMHglbHgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3MsIGVuZF9vZl9kYXRhLCB0ZW1wX2NoLCAobG9uZykodGVtcF9j
aCAtIHBvcykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9u
X2ludF9nZXRfaW5mb19mdW5jOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRpcmVudCBhdCBwb3NpdGlvbiAlbGk9MHglbHggb2YgJWxpPTB4JWx4IGlzIHRvbyBzbWFsbCwg
Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW5pbXVtIGRpcmVudCBpcyAl
aSBieXRlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvcyAt
IGRpcmVudF9kYXRhKSwgKGxvbmcpKHBvcyAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksIChs
b25nKShlbmRfb2ZfZGF0YSAtIGRpcmVudF9kYXRhKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQU5PTl9NSU5JTVVNX0RJUkVOVF9TSVpFKTsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGdwX2xvZyAoR1BfTE9HX0VSUk9SLCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYyIsICJ0
cnVuY2F0ZWQgZGlyZWN0b3J5IGVudHJ5IGVuY291bnRlcmVkIik7DQogICAgICAgICAgICAgICAg
ICAgICAgICBmcmVlIChkaXJlbnRfZGF0YSk7DQogICAgICAgICAgICAgICAgICAgICAgICBkaXJl
bnRfZGF0YSA9IE5VTEw7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf
Q09SUlVQVEVEX0RBVEE7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyog
Q2hlY2sgZW5kIG9mIHRoaXMgZGlyZW50LCAxMCBpcyB0byBza2lwIG92ZXINCiAgICAgICAgICAg
ICAgICAgKiAyICAgIGF0dHJpYnV0ZXMgKyAweDAwDQogICAgICAgICAgICAgICAgICogNCAgICBm
aWxlIHNpemUNCiAgICAgICAgICAgICAgICAgKiA0ICAgIGZpbGUgZGF0ZSAoVU5JWCBsb2NhbHRp
bWUpDQogICAgICAgICAgICAgICAgICogdG8gd2hlcmUgdGhlIGRpcmVudHJ5IG5hbWUgYmVnaW5z
Lg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGZvciAodGVtcF9jaCA9IGRp
cmVudF9uYW1lOyB0ZW1wX2NoIDwgZW5kX29mX2RhdGEgJiYgKnRlbXBfY2ggIT0gMDsNCiAgICAg
ICAgICAgICAgICAgICAgIHRlbXBfY2grKykgOw0KDQogICAgICAgICAgICAgICAgaWYgKHRlbXBf
Y2ggPT0gZW5kX29mX2RhdGEgfHwgKnRlbXBfY2ggIT0gMCkgew0KICAgICAgICAgICAgICAgICAg
ICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZ2V0X2luZm9fZnVuYzogIg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkaXJlbnQgYXQgcG9zaXRpb24gJWxpIG9mICVsaSBoYXMg
aW52YWxpZCBuYW1lIGluIGl0LiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YmFpbGluZyBvdXQgd2l0aCB3aGF0IHdlJ3ZlIGdvdC4iLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsb25nKShwb3MgLSBkaXJlbnRfZGF0YSksDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxvbmcpKGVuZF9vZl9kYXRhIC0gZGlyZW50X2RhdGEpKTsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgICBkaXJlbnRfbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopZGlyZW50X25hbWUpOw0K
ICAgICAgICAgICAgICAgIGRpcmVudF9lbnRfc2l6ZSA9IENBTk9OX01JTklNVU1fRElSRU5UX1NJ
WkUgKyBkaXJlbnRfbmFtZV9sZW47DQoNCiAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGF0IGxl
bmd0aCBvZiBuYW1lIGluIHRoaXMgZGlyZW50IGlzIG5vdCBvZiB1bnJlYXNvbmFibGUgc2l6ZS4N
CiAgICAgICAgICAgICAgICAgKiAyNTYgd2FzIHBpY2tlZCBvdXQgb2YgdGhlIGJsdWUNCiAgICAg
ICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICBpZiAoZGlyZW50X25hbWVfbGVuID4gMjU2
KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoImNhbm9uX2ludF9nZXRfaW5m
b19mdW5jOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBuYW1lIGlu
IGRpcmVudCBhdCBwb3NpdGlvbiAlbGkgb2YgJWxpIGlzIHRvbyBsb25nLiAoJWxpIGJ5dGVzKS4i
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhaWxpbmcgb3V0IHdpdGggd2hh
dCB3ZSd2ZSBnb3QuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyko
cG9zIC0gZGlyZW50X2RhdGEpLCAobG9uZykoZW5kX29mX2RhdGEgLSBkaXJlbnRfZGF0YSksDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZGlyZW50X25hbWVfbGVuKTsN
CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAg
ICAgICAgICAgICAgIC8qIDEwIGJ5dGVzIG9mIGF0dHJpYnV0ZXMsIHNpemUgYW5kIGRhdGUsIGEg
bmFtZSBhbmQgYSBOVUxMIHRlcm1pbmF0aW5nIGJ5dGUgKi8NCiAgICAgICAgICAgICAgICBHUF9M
T0dfREFUQSAoKGNoYXIgKilwb3MsIGRpcmVudF9lbnRfc2l6ZSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImNhbm9uX2ludF9nZXRfaW5mb19mdW5jOiBkaXJlbnQgZGV0ZXJtaW5lZCB0
byBiZSAlbGk9MHglbHggYnl0ZXM6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv
bmcpZGlyZW50X2VudF9zaXplLCAobG9uZylkaXJlbnRfZW50X3NpemUpOw0KICAgICAgICAgICAg
ICAgIGlmIChkaXJlbnRfbmFtZV9sZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9L
LCB0aGlzIGRpcmVjdG9yeSBlbnRyeSBoYXMgYSBuYW1lIGluIGl0LiAqLw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgKGNoYXIqKWRpcmVudF9uYW1lKSkg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSdyZSBnb2luZyB0byBmaWxs
IG91dCB0aGUgaW5mbyBzdHJ1Y3R1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gdGhpcyBibG9jayAqLw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IFdlIHN0YXJ0IHdpdGggbm90aGluZyBhbmQgY29udGludW91c2x5IGFkZCBzdHVmZiAqLw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyA9IEdQX0ZJTEVf
SU5GT19OT05FOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZpbGUu
bXRpbWUgPSBkaXJlbnRfdGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGluZm8tPmZpbGUubXRpbWUgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fTVRJTUU7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUpIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgZmlsZSB0eXBlIGJhc2VkIG9u
IGZpbGUgbmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRo
aXMgc3R1ZmYgb25seSBtYWtlcyBzZW5zZSBmb3IgZmlsZXMsIG5vdCBmb3IgZm9sZGVycw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweSAoaW5mby0+ZmlsZS50eXBlLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lMm1p
bWV0eXBlIChmaWxlbmFtZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mIChpbmZvLT5maWxlLnR5cGUpKTsNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9f
VFlQRTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJl
bnRfYXR0cnMgJiBDQU5PTl9BVFRSX05PVF9ET1dOTE9BREVEKQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5zdGF0dXMgPSBHUF9GSUxF
X1NUQVRVU19OT1RfRE9XTkxPQURFRDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLT5maWxlLnN0YXR1cyA9IEdQX0ZJTEVfU1RBVFVTX0RPV05MT0FERUQ7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5maWVsZHMgfD0g
R1BfRklMRV9JTkZPX1NUQVRVUzsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIHRoZSBzaXplIGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IDIgYW5kIGlzIDQNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBieXRlcyBsb25nLCByZS1vcmRl
ciBsaXR0bGUvYmlnIGVuZGlhbiAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8tPmZpbGUuc2l6ZSA9IGRpcmVudF9maWxlX3NpemU7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ZmlsZS5maWVsZHMgfD0gR1BfRklMRV9J
TkZPX1NJWkU7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm
aWxlIGFjY2VzcyBtb2RlcyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoZGlyZW50X2F0dHJzICYgQ0FOT05fQVRUUl9XUklURV9QUk9URUNURUQpID09IDAp
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5m
aWxlLnBlcm1pc3Npb25zID0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1BfRklMRV9QRVJNX1JFQUQgfA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUF9GSUxFX1BFUk1fREVMRVRF
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZpbGUucGVybWlz
c2lvbnMgPSBHUF9GSUxFX1BFUk1fUkVBRDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmZvLT5maWxlLmZpZWxkcyB8PSBHUF9GSUxFX0lORk9fUEVSTUlTU0lPTlM7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBwcmludCBkaXJlbnQgYXMgdGV4dCAqLw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoIlJhdyBpbmZvOiBuYW1lPSVzIGlzX2Rpcj0laSwg
aXNfZmlsZT0laSwgYXR0cnM9MHgleCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXJlbnRfbmFtZSwgaXNfZGlyLCBpc19maWxlLCBkaXJlbnRfYXR0cnMpOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19maWxlaW5mbyAoaW5mbyk7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUpIHsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIEFwcGVuZCBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBp
bnN0ZWFkIG9mIHRvIHRoZSBsaXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIGJlY2F1c2Ugd2UgaGF2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FtZXJhLT5wbC0+bGlzdF9hbGxfZmlsZXMNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlzX2ltYWdlIChm
aWxlbmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
IWlzX21vdmllIChmaWxlbmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlzX2F1ZGlvIChmaWxlbmFtZSkpIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBGaW5kIGFzc29jaWF0ZWQgbWFp
biBmaWxlIGFuZCBhZGQgaXQgdGhlcmUgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8NCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgiSWdub3JlZCAlcy8lcyIsIGZv
bGRlciwgZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICp0aHVtYm5hbWU7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGh1bWJuYW1lID0gY2Fub25faW50X2ZpbGVuYW1lMnRodW1i
bmFtZSAoY2FtZXJhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVu
YW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aHVtYm5hbWUgPT0gTlVMTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBubyB0aHVtYm5haWwgKi8NCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNfY3IyICgg
ZmlsZW5hbWUgKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSBnZXQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHJh
dyBmaWxlIGFzIHRoZSB0aHVtYm5haWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyAoYWxtb3N0KSBhIHZh
bGlkIEVYSUYgZmlsZS4gKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5wcmV2aWV3LmZpZWxkcyA9IEdQX0ZJTEVf
SU5GT19UWVBFOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby0+cHJldmlldy50eXBlLCBHUF9NSU1FX0VY
SUYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIE9sZGVyIENhbm9uIGNhbXMgaGF2ZSBKUEVHIHRodW1i
cyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm8tPnByZXZpZXcuZmllbGRzID0gR1BfRklMRV9JTkZPX1RZUEU7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyY3B5IChpbmZvLT5wcmV2aWV3LnR5cGUsIEdQX01JTUVfSlBFRyk7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImZpbGUgXCIl
c1wiIGhhcyBwcmV2aWV3IG9mIE1JTUUgdHlwZSBcIiVzXCIiLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgaW5mby0+
cHJldmlldy50eXBlICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQkJLyogZm91bmQgLi4uIGxl
YXZlIGxvb3AgKi8NCgkJCQlicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAvKiBtYWtlICdwb3MnIHBvaW50IHRvIG5l
eHQgZGlyZW50IGluIHBhY2tldC4NCiAgICAgICAgICAgICAgICAgKiBmaXJzdCB3ZSBza2lwIDEw
IGJ5dGVzIG9mIGF0dHJpYnV0ZSwgc2l6ZSBhbmQgZGF0ZSwNCiAgICAgICAgICAgICAgICAgKiB0
aGVuIHdlIHNraXAgdGhlIG5hbWUgcGx1cyAxIGZvciB0aGUgTlVMTA0KICAgICAgICAgICAgICAg
ICAqIHRlcm1pbmF0aW9uIGJ5dGVzLg0KICAgICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAg
ICAgIHBvcyArPSBkaXJlbnRfZW50X3NpemU7DQogICAgICAgIH0NCiAgICAgICAgZnJlZSAoZGly
ZW50X2RhdGEpOw0KICAgICAgICBkaXJlbnRfZGF0YSA9IE5VTEw7DQoNCiAgICAgICAgR1BfREVC
VUcgKCJFTkQgY2Fub25faW50X2dldF9pbmZvX2Z1bmMoKSBmb2xkZXIgJyVzJyBha2EgJyVzJyBm
biAnJXMnIiwgZm9sZGVyLCBjYW5vbmZvbGRlciwgZmlsZW5hbWUpOw0KDQoJcmV0dXJuIEdQX09L
Ow0KfQ0KDQoNCi8qKg0KICogY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjoNCiAqIEBkYXRh
OiByYXcgSkZJRiBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGh1bWJuYWlsDQogKiBAZGF0YWxlbjog
bGVuZ3RoIG9mIEBkYXRhDQogKiBAcmV0ZGF0YTogdG8gcmVjZWl2ZSBleHRyYWN0ZWQgdGh1bWJu
YWlsDQogKiBAcmV0ZGF0YWxlbjogbGVuZ3RoIG9mIEByZXRkYXRhDQogKiBAY29udGV4dDogY29u
dGV4dCBmb3IgZXJyb3IgcmVwb3J0aW5nDQogKg0KICogRXh0cmFjdHMgdGh1bWJuYWlsIGZyb20g
SkZJRiBpbWFnZSAoQTcwKSBvciBtb3ZpZSAudGhtIGZpbGUuDQogKiBqdXN0IGV4dHJhY3RlZCB0
aGUgY29kZSBmcm9tIHRoZSBvbGQgI2Nhbm9uX2ludF9nZXRfdGh1bWJuYWlsDQogKg0KICogUmV0
dXJuczogZ3Bob3RvMiBlcnJvciBjb2RlDQogKg0KICovDQoNCmludA0KY2Fub25faW50X2V4dHJh
Y3RfanBlZ190aHVtYiAodW5zaWduZWQgY2hhciAqZGF0YSwgY29uc3QgdW5zaWduZWQgaW50IGRh
dGFsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipyZXRk
YXRhLCB1bnNpZ25lZCBpbnQgKnJldGRhdGFsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdQQ29udGV4dCAqY29udGV4dCkNCnsNCiAgICAgICAgdW5zaWduZWQgaW50IGksIHRodW1i
c3RhcnQgPSAwLCB0aHVtYnNpemUgPSAwOw0KDQogICAgICAgIENIRUNLX1BBUkFNX05VTEwgKGRh
dGEpOw0KICAgICAgICBDSEVDS19QQVJBTV9OVUxMIChyZXRkYXRhKTsNCg0KICAgICAgICAqcmV0
ZGF0YSA9IE5VTEw7DQogICAgICAgICpyZXRkYXRhbGVuID0gMDsNCg0KICAgICAgICBpZiAoZGF0
YVswXSA9PSBKUEVHX0VTQyB8fCBkYXRhWzFdID09IEpQRUdfQkVHKSB7DQogICAgICAgICAgICAg
ICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiB0aGlzIGlzIGEgSkZJ
RiBmaWxlLiIpOw0KDQogICAgICAgICAgICAgICAgLyogcGljdHVyZXMgYXJlIEpGSUYgZmlsZXMs
IHdlIHNraXAgdGhlIGZpcnN0IDIgYnl0ZXMgKDB4RkYgMHhEOCkNCiAgICAgICAgICAgICAgICAg
KiBmaXJzdCBnbyBsb29rIGZvciBzdGFydCBvZiBKUEVHLCB3aGVuIHRoYXQgaXMgZm91bmQgd2Ug
c2V0IHRodW1ic3RhcnQNCiAgICAgICAgICAgICAgICAgKiB0byB0aGUgY3VycmVudCBwb3NpdGlv
biBhbmQgbmV2ZXIgbG9vayBmb3IgSlBFRyBiZWdpbiBieXRlcyBhZ2Fpbi4NCiAgICAgICAgICAg
ICAgICAgKiB3aGVuIHRodW1ic3RhcnQgaXMgc2V0IGxvb2sgZm9yIEpQRUcgZW5kLg0KICAgICAg
ICAgICAgICAgICAqLw0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDM7IGkgPCBkYXRhbGVuOyBp
KyspDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSBKUEVHX0VTQykgew0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISB0aHVtYnN0YXJ0KSB7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAoZGF0YWxlbiAtIDMp
ICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSAr
IDFdID09IEpQRUdfQkVHICYmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgoZGF0YVtpICsgM10gPT0gSlBFR19TT1MpIHx8IChkYXRhW2kgKyAzXSA9PSBKUEVH
X0E1MF9TT1MpKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRodW1ic3RhcnQgPSBpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGkgPCAoZGF0YWxlbiAtIDEpICYmIChkYXRhW2kgKyAxXSA9PSBKUEVHX0VORCkpIHsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYnNpemUgPSBpICsg
MiAtIHRodW1ic3RhcnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICghIHRodW1ic2l6ZSkgew0KICAgICAg
ICAgICAgICAgICAgICAgICAgZ3BfY29udGV4dF9lcnJvciAoY29udGV4dCwgXygiQ291bGQgbm90
IGV4dHJhY3QgSlBFRyAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0aHVtYm5haWwgZnJvbSBkYXRhOiBObyBiZWdpbm5pbmcvZW5kIikpOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVn
X3RodW1iOiBjb3VsZCBub3QgZmluZCBKUEVHICINCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiYmVnaW5uaW5nIChvZmZzZXQgJWkpIG9yIGVuZCAoc2l6ZSAlaSkgaW4gJWkgYnl0
ZXMgb2YgZGF0YSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbiwg
dGh1bWJzdGFydCwgdGh1bWJzaXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
UF9FUlJPUl9DT1JSVVBURURfREFUQTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg
ICAgICAvKiBub3cgdGhhdCB3ZSBrbm93IHRoZSBzaXplIG9mIHRoZSB0aHVtYm5haWwgZW1iZWRk
ZWQgaW4gdGhlIEpGSUYgZGF0YSwgbWFsbG9jKCkgKi8NCiAgICAgICAgICAgICAgICAqcmV0ZGF0
YSA9IG1hbGxvYyAodGh1bWJzaXplKTsNCiAgICAgICAgICAgICAgICBpZiAoISAqcmV0ZGF0YSkg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9q
cGVnX3RodW1iOiBjb3VsZCBub3QgYWxsb2NhdGUgJWkgYnl0ZXMgb2YgbWVtb3J5IiwgdGh1bWJz
aXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9OT19NRU1PUlk7
DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogYW5kIGNvcHkgKi8NCiAg
ICAgICAgICAgICAgICBtZW1jcHkgKCpyZXRkYXRhLCBkYXRhICsgdGh1bWJzdGFydCwgdGh1bWJz
aXplKTsNCiAgICAgICAgICAgICAgICAqcmV0ZGF0YWxlbiA9IHRodW1ic2l6ZTsNCiAgICAgICAg
fQ0KICAgICAgICBlbHNlIGlmICggIXN0cmNtcCAoIChjaGFyICopZGF0YSwgIklJKiIgKSAmJiBk
YXRhWzhdID09ICdDJyAmJiBkYXRhWzldID09ICdSJyApIHsNCg0KICAgICAgICAgICAgICAgIC8q
IFRoaXMgaXMgYSB2YWxpZCBFWElGIGZpbGU7IHdlIG5lZWQgdG8gc29ydCB0aHJvdWdoDQogICAg
ICAgICAgICAgICAgICogdG8gZ2V0IHRoZSBKUEVHIHRodW1ibmFpbC4gKi8NCiNpZmRlZiBIQVZF
X0xJQkVYSUYNCiAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIGRvIHRoaXMgb3Vyc2VsdmVz
LCBiZWNhdXNlIGxpYmV4aWYNCiAgICAgICAgICAgICAgICAgKiBhc3N1bWVzIHRoYXQgdGhlIEVY
SUYgaW5mbyBpcyBlbmNhcHN1bGF0ZWQgaW4gYW4NCiAgICAgICAgICAgICAgICAgKiBBUFAxIG1h
cmtlciBpbiBhIEpGSUYgZmlsZS4gU28gd2UgcGFyc2UgZW5vdWdoIHRvDQogICAgICAgICAgICAg
ICAgICogZ2V0IHRoZSB0aHVtYm5haWwsIHdoaWNoIGlzIGZvdW5kIHZpYSBJRkQgMS4gKi8NCiAg
ICAgICAgICAgICAgICAvKiBGSVhNRTogV2UgbmVlZCB0byBleHRyYWN0IHRoZSBFWElGIElGRCBh
bmQgY29weSBpdA0KICAgICAgICAgICAgICAgICAqIGludG8gdGhlIGltYWdlIHdlIHJldHVybiwg
YXMgaGlnaGVyIGxldmVscyBvZg0KICAgICAgICAgICAgICAgICAqIHNvZnR3YXJlIGFzc3VtZSB0
aGF0IHRoZSBFWElGIGlzIGluY2x1ZGVkIGluIHRoZQ0KICAgICAgICAgICAgICAgICAqIEpQRUcg
dGh1bWJuYWlsIGFuZCBqdXN0IGZldGNoIHRoZSB0aHVtYm5haWwgdG8gZ2V0DQogICAgICAgICAg
ICAgICAgICogdGhlIEVYSUYgZGF0YS4gKi8NCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
bl90YWdzOw0KICAgICAgICAgICAgICAgIGludCBpZmQwX29mZnNldCwgaWZkMV9vZmZzZXQ7DQog
ICAgICAgICAgICAgICAgaW50IGpwZWdfb2Zmc2V0ID0gLTEsIGpwZWdfc2l6ZSA9IC0xOw0KDQog
ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjog
dGhpcyBpcyBmcm9tIGEgQ1IyIGZpbGUuIik7DQogICAgICAgICAgICAgICAgZHVtcF9oZXggKCBz
dGRlcnIsIGRhdGEsIDMyICk7DQogICAgICAgICAgICAgICAgaWZkMF9vZmZzZXQgPSBleGlmX2dl
dF9sb25nICggZGF0YSs0LCBFWElGX0JZVEVfT1JERVJfSU5URUwgKTsNCiAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBJRkQgMCBhdCAweCV4
IiwgaWZkMF9vZmZzZXQgKTsNCiAgICAgICAgICAgICAgICBuX3RhZ3MgPSBleGlmX2dldF9zaG9y
dCAoIGRhdGEraWZkMF9vZmZzZXQsIEVYSUZfQllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAg
ICAgICAgIEdQX0RFQlVHICggImNhbm9uX2ludF9leHRyYWN0X2pwZWdfdGh1bWI6ICVkIHRhZ3Mg
aW4gSUZEIDAiLCBuX3RhZ3MgKTsNCiAgICAgICAgICAgICAgICBpZmQxX29mZnNldCA9IGV4aWZf
Z2V0X2xvbmcgKCBkYXRhICsgaWZkMF9vZmZzZXQgKyAyICsgMTIqbl90YWdzLCBFWElGX0JZVEVf
T1JERVJfSU5URUwgKTsNCiAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0
cmFjdF9qcGVnX3RodW1iOiBJRkQgMSBhdCAweCV4IiwgaWZkMV9vZmZzZXQgKTsNCiAgICAgICAg
ICAgICAgICBuX3RhZ3MgPSBleGlmX2dldF9zaG9ydCAoIGRhdGEraWZkMV9vZmZzZXQsIEVYSUZf
QllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAgICAgICAgIEdQX0RFQlVHICggImNhbm9uX2lu
dF9leHRyYWN0X2pwZWdfdGh1bWI6ICVkIHRhZ3MgaW4gSUZEIDEiLCBuX3RhZ3MgKTsNCg0KICAg
ICAgICAgICAgICAgIC8qIE5vdyBnbyB0aHJvdWdoIElGRCAxIGFuZCBmaW5kIHRoZSB0d28gdGFn
cyB3ZSBuZWVkLiAqLw0KICAgICAgICAgICAgICAgIGZvciAoIGk9MDsgaTxuX3RhZ3M7IGkrKyAp
IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVudHJ5ID0gZGF0YStp
ZmQxX29mZnNldCArIDIgKyAxMippOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdGFn
ID0gZXhpZl9nZXRfc2hvcnQgKCBlbnRyeSwgRVhJRl9CWVRFX09SREVSX0lOVEVMICk7DQogICAg
ICAgICAgICAgICAgICAgICAgICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3Ro
dW1iOiB0YWcgJWQgaXMgJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
LCBleGlmX3RhZ19nZXRfbmFtZSAoIHRhZyApICk7DQogICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKCB0YWcgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVYSUZfVEFHX0pQ
RUdfSU5URVJDSEFOR0VfRk9STUFUX0xFTkdUSDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganBlZ19zaXplID0gZXhpZl9nZXRfbG9uZyAoIGVudHJ5ICsgOCwgRVhJRl9CWVRFX09S
REVSX0lOVEVMICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQX0RFQlVHICgg
ImNhbm9uX2ludF9leHRyYWN0X2pwZWdfdGh1bWI6IEpQRUcgbGVuZ3RoIGlzICVkIiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3NpemUgKTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVYSUZfVEFHX0pQRUdfSU5URVJDSEFOR0VfRk9STUFUOg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqcGVnX29mZnNldCA9IGV4aWZfZ2V0X2xvbmcgKCBlbnRyeSArIDgs
IEVYSUZfQllURV9PUkRFUl9JTlRFTCApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHUF9ERUJVRyAoICJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBKUEVHIG9mZnNldCBp
cyAweCV4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVn
X29mZnNldCApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N
CiAgICAgICAgICAgICAgICBpZiAoIGpwZWdfc2l6ZSA8IDAgfHwganBlZ19vZmZzZXQgPCAwICkg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3Rf
anBlZ190aHVtYjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2lu
ZyBhIHJlcXVpcmVkIHRhZzogbGVuZ3RoPSVkLCBvZmZzZXQ9JWQiLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqcGVnX3NpemUsIGpwZWdfb2Zmc2V0ICk7DQogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1JfQ09SUlVQVEVEX0RBVEE7DQogICAgICAgICAg
ICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLyogTm93IHdlIHNob3VsZCBoYXZlIGVub3VnaCB0
byBleHRyYWN0IHRoZSB0aHVtYm5haWwuICovDQogICAgICAgICAgICAgICAgR1BfREVCVUcgKCAi
Y2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjogJWQgYnl0ZXMgb2YgSlBFRyBpbWFnZSIsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19zaXplICk7DQogICAgICAgICAgICAgICAg
KnJldGRhdGFsZW4gPSBqcGVnX3NpemU7DQogICAgICAgICAgICAgICAgKnJldGRhdGEgPSBtYWxs
b2MgKCAqcmV0ZGF0YWxlbiApOw0KICAgICAgICAgICAgICAgIG1lbWNweSAoICpyZXRkYXRhLCBk
YXRhICsganBlZ19vZmZzZXQsICpyZXRkYXRhbGVuICk7DQogICAgICAgICAgICAgICAgZHVtcF9o
ZXggKCBzdGRlcnIsICpyZXRkYXRhLCAzMiApOw0KI2Vsc2UgLyogSEFWRV9MSUJFWElGICovDQog
ICAgICAgICAgICAgICAgR1BfREVCVUcgKCAiY2Fub25faW50X2V4dHJhY3RfanBlZ190aHVtYjog
Q2FuJ3QgZ3JvayB0aHVtYm5haWwgZnJvbSBhIENSMiBmaWxlIHdpdGhvdXQgbGliZXhpZiIpOw0K
ICAgICAgICAgICAgICAgIHJldHVybiBHUF9FUlJPUl9OT1RfU1VQUE9SVEVEOw0KI2VuZGlmIC8q
IEhBVkVfTElCRVhJRiAqLw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAg
ICAgIGdwX2NvbnRleHRfZXJyb3IgKGNvbnRleHQsIF8oIkNvdWxkIG5vdCBleHRyYWN0IEpQRUcg
Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRodW1ibmFp
bCBmcm9tIGRhdGE6IERhdGEgaXMgbm90IEpGSUYiKSk7DQogICAgICAgICAgICAgICAgR1BfREVC
VUcgKCJjYW5vbl9pbnRfZXh0cmFjdF9qcGVnX3RodW1iOiBkYXRhIGlzIG5vdCBKRklGLCBjYW5u
b3QgZXh0cmFjdCB0aHVtYm5haWwiKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gR1BfRVJST1Jf
Q09SUlVQVEVEX0RBVEE7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gR1BfT0s7DQp9DQoN
Ci8qDQogKiBMb2NhbCBWYXJpYWJsZXM6DQogKiBjLWZpbGUtc3R5bGU6ImxpbnV4Ig0KICogaW5k
ZW50LXRhYnMtbW9kZTpuaWwNCiAqIEVuZDoNCiAqLw0K

--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Gphoto-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gphoto-devel

--_005_YQXPR01MB6090299EFE3B40A7E8F3441A902F2YQXPR01MB6090CANP_--