[Lcdproc] Enhancement of ETB134 driver for EZIO100 LCD

Howard Cai H.Cai@F5.com
Wed May 23 22:41:02 2007


This is a multi-part message in MIME format.

------_=_NextPart_001_01C79D8B.4EB89FCF
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi, here are changes I made recently to support the EZIO100 LCD based on
original MTB134 driver. Observed problems from original are and fixed:

1.=20
Key press is not lost therefore, READKEY from LCD is just returned
sometimes or occasionally.
=20
2.=20
The ICON interface is implemented incorrectly.

3.
Mixed data command and other commands caused some problems for key press
reading. Not sure exactly what the problem is

Please found the attached changes.

Can someone integrate them back to the LCDproc CVS trunk for others
benefits?

Thanks a lot!

Howard.
=20


------_=_NextPart_001_01C79D8B.4EB89FCF
Content-Type: application/octet-stream;
	name="LCDd.conf"
Content-Transfer-Encoding: base64
Content-Description: LCDd.conf
Content-Disposition: attachment;
	filename="LCDd.conf"

DQpbTVRCMTM0XQ0KIyANCiMgRVpJTy0xMDAgTENEIGRyaXZlci4NCg0KIyBTZWxlY3QgdGhlIG91
dHB1dCBkZXZpY2UgdG8gdXNlIFsvZGV2L2xjZF0NCkRldmljZT0vZGV2L3R0eVMxDQojIFNlbGVj
dCB0aGUgTENEIHR5cGUgKHNpemUpIFsyMHg0XQ0KU2l6ZT0xNngyDQojIFNldCB0aGUgaW5pdGlh
bCBjb250cmFzdCBbMTQwXQ0KQ29udHJhc3Q9MTQwDQojIFNldCB0aGUgaW5pdGlhbCBicmlnaHRu
ZXNzIFsxMDBdDQojIEJyaWdodG5lc3MgaGFyZHdhcmUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAx
MDAuDQpCcmlnaHRuZXNzPTEwMA0KIyBTZXQgdGhlIGluaXRpYWwgb2ZmLWJyaWdodG5lc3MgWzBd
DQojIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBkaXNwbGF5IGlzIG5vcm1hbGx5DQojIHN3
aXRjaGVkIG9mZiBpbiBjYXNlIExDRGQgaXMgaW5hY3RpdmUNCk9mZkJyaWdodG5lc3M9MA0KIyBT
ZXQgdGhlIGNvbW11bmljYXRpb24gc3BlZWQgWzk2MDBdDQojIHBvc3NpYmxlIHZhbHVlczogMTky
MDANClNwZWVkPTE5MjAwDQojIFNldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAoTmV3IG1lYW5zID49
IDIuMCkgW25vXQ0KIyBDdXJyZW50bHkgdGhpcyBmbGFnIGlzIG5vdCBpbiB1c2UsIHRoZXJlIGlz
IG5vIHN1Y2ggdGhpbmcgYXMgTmV3RmlybXdhcmUuIDs9KQ0KTmV3RmlybXdhcmU9bm8NCiMgUmVp
bml0aWFsaXplIHRoZSBMQ0QncyBCSU9TIFtub10NCiMgSSB3YW50IHRvIHJlYm9vdCB0aGUgTENE
IHRvIG1ha2Ugc3VyZSB3ZSBzdGFydCBmcm9tIGEga25vd24gc3RhdGUNCktleXBhZD15ZXMNCiMg
SWYgeW91IGhhdmUgYSBrZXlwYWQgY29ubmVjdGVkLiANCiMgWW91IG1heSBhbHNvIG5lZWQgdG8g
Y29uZmlndXJlIHRoZSBrZXlwYWQgbGF5b3V0IGZ1cnRoZXIgb24gaW4gdGhpcyBmaWxlLg0KDQpC
YWNrbGlnaHQ9eWVzDQojIElmIHlvdSBoYXZlIGEgc3dpdGNoYWJsZSBiYWNrbGlnaHQuDQpLZXlE
aXJlY3RfMT1FbnRlcg0KS2V5RGlyZWN0XzI9VXANCktleURpcmVjdF8zPURvd24NCktleURpcmVj
dF80PUVzY2FwZQ0KDQo=

------_=_NextPart_001_01C79D8B.4EB89FCF
Content-Type: application/octet-stream;
	name="misc-changes.diff"
Content-Transfer-Encoding: base64
Content-Description: misc-changes.diff
Content-Disposition: attachment;
	filename="misc-changes.diff"

CkRpZmZlcmVuY2VzIC4uLgoKPT09PSAvL2RlcG90L3Byb2plY3QvZGFudWJlL3BvcnRzL2xjZHBy
b2Mvc3RkL2JsZC9NYWtlZmlsZSM1IChrdGV4dCkgPT09PQoKMjlhMzAKPiAJJChUR1QpL0xDRGRf
d2ozMDAuY29uZiBcCjMyYzMzLDM0CjwgCSQoVEdUKS9DRm9udHo1NDEuc28KLS0tCj4gCSQoVEdU
KS9DRm9udHo1NDEuc28gXAo+IAkkKFRHVCkvTVRCMTM0LnNvCjQxYTQ0Cj4gCWNwICQoU1JDKS9M
Q0RkX3dqMzAwLmNvbmYgJChUR1QpCjQ4YTUyCj4gCWNwICQoU1JDKS9zZXJ2ZXIvZHJpdmVycy9N
VEIxMzQuc28gJChUR1QpCjUyYTU3Cj4gCWluc3RhbGwgLW02NDQgJChTUkMpL0xDRGRfd2ozMDAu
Y29uZiAkKERFU1RESVIpL2V0Ywo2M2E2OQo+IAlpbnN0YWxsIC1tNzU1ICQoU1JDKS9zZXJ2ZXIv
ZHJpdmVycy9NVEIxMzQuc28gJChERVNURElSKS9saWIKCj09PT0gLy9kZXBvdC9wcm9qZWN0L2Rh
bnViZS9wb3J0cy9sY2Rwcm9jL3N0ZC9zcmMvY29uZmlndXJlIzMgKGt4dGV4dCkgPT09PQoKODEz
MWM4MTMxCjwgICBkcml2ZXJzPWxjZG0wMDEsbXR4b3JiLGNmb250eixjZm9udHo2MzMsY2ZvbnR6
NTQxLGN1cnNlcyxjd2xueCx0ZXh0LGxiMjE2LGJheXJhZCxnbGssaGQ0NDc4MAotLS0KPiAgIGRy
aXZlcnM9bGNkbTAwMSxtdHhvcmIsY2ZvbnR6LGNmb250ejYzMyxjZm9udHo1NDEsY3Vyc2VzLGN3
bG54LHRleHQsbGIyMTYsYmF5cmFkLGdsayxoZDQ0NzgwLE1UQjEzNAo4MTM1YzgxMzUKPCAJZHJp
dmVycz1tdHhvcmIsY2ZvbnR6LGNmb250ejYzMyxjZm9udHo1NDEsY3Vyc2VzLGN3bG54LHRleHQs
bGIyMTYsbXRjX3MxNjIwOXgsaGQ0NDc4MCxqb3ksaXJtYW4sbGlyYyxiYXlyYWQsZ2xrLHN0djU3
MzAsc2VkMTMzMCxzZWQxNTIwLHN2Z2EsbGNkbTAwMSx0Njk2MyxsY3Rlcm0saWNwX2ExMDYsbXM2
OTMxCi0tLQo+IAlkcml2ZXJzPW10eG9yYixjZm9udHosY2ZvbnR6NjMzLGNmb250ejU0MSxjdXJz
ZXMsY3dsbngsdGV4dCxsYjIxNixtdGNfczE2MjA5eCxoZDQ0NzgwLE1UQjEzNCxqb3ksaXJtYW4s
bGlyYyxiYXlyYWQsZ2xrLHN0djU3MzAsc2VkMTMzMCxzZWQxNTIwLHN2Z2EsbGNkbTAwMSx0Njk2
MyxsY3Rlcm0saWNwX2ExMDYsbXM2OTMxCjgxNzRhODE3NSw4MTc4Cj4gCQlNVEIxMzQpCj4gCQkJ
RFJJVkVSUz0iJERSSVZFUlMgTVRCMTM0JHtTT30iCj4gCQkJYWN0ZHJpdmVycz0iJGFjdGRyaXZl
cnMgTVRCMTM0Igo+IAkJCTs7Cgo9PT09IC8vZGVwb3QvcHJvamVjdC9kYW51YmUvcG9ydHMvbGNk
cHJvYy9zdGQvc3JjL3NlcnZlci9kcml2ZXJzL01ha2VmaWxlLmFtIzQgKGt0ZXh0KSA9PT09Cgoy
MWMyMQo8IEVYVFJBX1BST0dSQU1TID0gYmF5cmFkIENGb250eiBDRm9udHo2MzMgQ0ZvbnR6NTQx
IGN1cnNlcyBDd0xueCBnbGsgaGQ0NDc4MCBpcm1hbiBpY3BfYTEwNiBqb3kgbGIyMTYgbXRjX3Mx
NjIwOXggbGNkbTAwMSBsY3Rlcm0gbGlyYyBNdHhPcmIgc2VkMTMzMCBzZWQxNTIwIHN0djU3MzAg
c3ZnYSB0Njk2MyB0ZXh0IHdpcnpfc2xpIG1zNjkzMQotLS0KPiBFWFRSQV9QUk9HUkFNUyA9IGJh
eXJhZCBDRm9udHogQ0ZvbnR6NjMzIENGb250ejU0MSBjdXJzZXMgQ3dMbnggZ2xrIGhkNDQ3ODAg
TVRCMTM0IGlybWFuIGljcF9hMTA2IGpveSBsYjIxNiBtdGNfczE2MjA5eCBsY2RtMDAxIGxjdGVy
bSBsaXJjIE10eE9yYiBzZWQxMzMwIHNlZDE1MjAgc3R2NTczMCBzdmdhIHQ2OTYzIHRleHQgd2ly
el9zbGkgbXM2OTMxCjI1YTI2Cj4gTVRCMTM0X0xEQUREID0gICAgbGliTENELmEKNDNhNDUKPiBN
VEIxMzRfU09VUkNFUyA9ICAgIGxjZC5oIG10YjEzNC5oIG10YjEzNC5jIHJlcG9ydC5oCgo9PT09
IC8vZGVwb3QvcHJvamVjdC9kYW51YmUvcG9ydHMvbGNkcHJvYy9zdGQvc3JjL3NlcnZlci9kcml2
ZXJzL01ha2VmaWxlLmluIzMgKGt0ZXh0KSA9PT09Cgo5OGM5OAo8IEVYVFJBX1BST0dSQU1TID0g
YmF5cmFkIENGb250eiBDRm9udHo2MzMgQ0ZvbnR6NTQxIGN1cnNlcyBDd0xueCBnbGsgaGQ0NDc4
MCBpcm1hbiBpY3BfYTEwNiBqb3kgbGIyMTYgbXRjX3MxNjIwOXggbGNkbTAwMSBsY3Rlcm0gbGly
YyBNdHhPcmIgc2VkMTMzMCBzZWQxNTIwIHN0djU3MzAgc3ZnYSB0Njk2MyB0ZXh0IHdpcnpfc2xp
IG1zNjkzMQotLS0KPiBFWFRSQV9QUk9HUkFNUyA9IGJheXJhZCBDRm9udHogQ0ZvbnR6NjMzIENG
b250ejU0MSBjdXJzZXMgQ3dMbnggZ2xrIGhkNDQ3ODAgTVRCMTM0IGlybWFuIGljcF9hMTA2IGpv
eSBsYjIxNiBtdGNfczE2MjA5eCBsY2RtMDAxIGxjdGVybSBsaXJjIE10eE9yYiBzZWQxMzMwIHNl
ZDE1MjAgc3R2NTczMCBzdmdhIHQ2OTYzIHRleHQgd2lyel9zbGkgbXM2OTMxCjEwMmExMDMKPiBN
VEIxMzRfTERBREQgPSBsaWJMQ0QuYQoxMjBhMTIyCj4gTVRCMTM0X1NPVVJDRVMgPSBsY2QuaCBt
dGIxMzQuaCBtdGIxMzQuYyByZXBvcnQuaAoxNTksMTYzYzE2MSwxNjYKPCAJaGQ0NDc4MCQoRVhF
RVhUKSBpcm1hbiQoRVhFRVhUKSBpY3BfYTEwNiQoRVhFRVhUKSBqb3kkKEVYRUVYVCkgXAo8IAls
YjIxNiQoRVhFRVhUKSBtdGNfczE2MjA5eCQoRVhFRVhUKSBsY2RtMDAxJChFWEVFWFQpIFwKPCAJ
bGN0ZXJtJChFWEVFWFQpIGxpcmMkKEVYRUVYVCkgTXR4T3JiJChFWEVFWFQpIHNlZDEzMzAkKEVY
RUVYVCkgXAo8IAlzZWQxNTIwJChFWEVFWFQpIHN0djU3MzAkKEVYRUVYVCkgc3ZnYSQoRVhFRVhU
KSB0Njk2MyQoRVhFRVhUKSBcCjwgCXRleHQkKEVYRUVYVCkgd2lyel9zbGkkKEVYRUVYVCkgbXM2
OTMxJChFWEVFWFQpCi0tLQo+IAloZDQ0NzgwJChFWEVFWFQpIE1UQjEzNCQoRVhFRVhUKSBpcm1h
biQoRVhFRVhUKSBcCj4gCWljcF9hMTA2JChFWEVFWFQpIGpveSQoRVhFRVhUKSBsYjIxNiQoRVhF
RVhUKSBcCj4gCW10Y19zMTYyMDl4JChFWEVFWFQpIGxjZG0wMDEkKEVYRUVYVCkgbGN0ZXJtJChF
WEVFWFQpIFwKPiAJbGlyYyQoRVhFRVhUKSBNdHhPcmIkKEVYRUVYVCkgc2VkMTMzMCQoRVhFRVhU
KSBzZWQxNTIwJChFWEVFWFQpIFwKPiAJc3R2NTczMCQoRVhFRVhUKSBzdmdhJChFWEVFWFQpIHQ2
OTYzJChFWEVFWFQpIHRleHQkKEVYRUVYVCkgXAo+IAl3aXJ6X3NsaSQoRVhFRVhUKSBtczY5MzEk
KEVYRUVYVCkKMTgyYTE4NiwxODkKPiBhbV9NVEIxMzRfT0JKRUNUUyA9IG10YjEzNC4kKE9CSkVY
VCkKPiBNVEIxMzRfT0JKRUNUUyA9ICQoYW1fTVRCMTM0X09CSkVDVFMpCj4gTVRCMTM0X0RFUEVO
REVOQ0lFUyA9IGxpYkxDRC5hCj4gTVRCMTM0X0xERkxBR1MgPQoyOTYsMzAzYzMwMywzMTAKPCAJ
JChNdHhPcmJfU09VUkNFUykgJChiYXlyYWRfU09VUkNFUykgJChjdXJzZXNfU09VUkNFUykgXAo8
IAkkKGdsa19TT1VSQ0VTKSAkKGhkNDQ3ODBfU09VUkNFUykgJChFWFRSQV9oZDQ0NzgwX1NPVVJD
RVMpIFwKPCAJJChpY3BfYTEwNl9TT1VSQ0VTKSAkKGlybWFuX1NPVVJDRVMpICQoam95X1NPVVJD
RVMpIFwKPCAJJChsYjIxNl9TT1VSQ0VTKSAkKGxjZG0wMDFfU09VUkNFUykgJChsY3Rlcm1fU09V
UkNFUykgXAo8IAkkKGxpcmNfU09VUkNFUykgJChtczY5MzFfU09VUkNFUykgJChtdGNfczE2MjA5
eF9TT1VSQ0VTKSBcCjwgCSQoc2VkMTMzMF9TT1VSQ0VTKSAkKHNlZDE1MjBfU09VUkNFUykgJChz
dHY1NzMwX1NPVVJDRVMpIFwKPCAJJChzdmdhX1NPVVJDRVMpICQodDY5NjNfU09VUkNFUykgJCh0
ZXh0X1NPVVJDRVMpIFwKPCAJJCh3aXJ6X3NsaV9TT1VSQ0VTKQotLS0KPiAJJChNVEIxMzRfU09V
UkNFUykgJChNdHhPcmJfU09VUkNFUykgJChiYXlyYWRfU09VUkNFUykgXAo+IAkkKGN1cnNlc19T
T1VSQ0VTKSAkKGdsa19TT1VSQ0VTKSAkKGhkNDQ3ODBfU09VUkNFUykgXAo+IAkkKEVYVFJBX2hk
NDQ3ODBfU09VUkNFUykgJChpY3BfYTEwNl9TT1VSQ0VTKSAkKGlybWFuX1NPVVJDRVMpIFwKPiAJ
JChqb3lfU09VUkNFUykgJChsYjIxNl9TT1VSQ0VTKSAkKGxjZG0wMDFfU09VUkNFUykgXAo+IAkk
KGxjdGVybV9TT1VSQ0VTKSAkKGxpcmNfU09VUkNFUykgJChtczY5MzFfU09VUkNFUykgXAo+IAkk
KG10Y19zMTYyMDl4X1NPVVJDRVMpICQoc2VkMTMzMF9TT1VSQ0VTKSAkKHNlZDE1MjBfU09VUkNF
UykgXAo+IAkkKHN0djU3MzBfU09VUkNFUykgJChzdmdhX1NPVVJDRVMpICQodDY5NjNfU09VUkNF
UykgXAo+IAkkKHRleHRfU09VUkNFUykgJCh3aXJ6X3NsaV9TT1VSQ0VTKQozMDVjMzEyCjwgU09V
UkNFUyA9ICQobGliTENEX2FfU09VUkNFUykgJChDRm9udHpfU09VUkNFUykgJChDRm9udHo1NDFf
U09VUkNFUykgJChDRm9udHo2MzNfU09VUkNFUykgJChDd0xueF9TT1VSQ0VTKSAkKE10eE9yYl9T
T1VSQ0VTKSAkKGJheXJhZF9TT1VSQ0VTKSAkKGN1cnNlc19TT1VSQ0VTKSAkKGdsa19TT1VSQ0VT
KSAkKGhkNDQ3ODBfU09VUkNFUykgJChFWFRSQV9oZDQ0NzgwX1NPVVJDRVMpICQoaWNwX2ExMDZf
U09VUkNFUykgJChpcm1hbl9TT1VSQ0VTKSAkKGpveV9TT1VSQ0VTKSAkKGxiMjE2X1NPVVJDRVMp
ICQobGNkbTAwMV9TT1VSQ0VTKSAkKGxjdGVybV9TT1VSQ0VTKSAkKGxpcmNfU09VUkNFUykgJCht
czY5MzFfU09VUkNFUykgJChtdGNfczE2MjA5eF9TT1VSQ0VTKSAkKHNlZDEzMzBfU09VUkNFUykg
JChzZWQxNTIwX1NPVVJDRVMpICQoc3R2NTczMF9TT1VSQ0VTKSAkKHN2Z2FfU09VUkNFUykgJCh0
Njk2M19TT1VSQ0VTKSAkKHRleHRfU09VUkNFUykgJCh3aXJ6X3NsaV9TT1VSQ0VTKQotLS0KPiBT
T1VSQ0VTID0gJChsaWJMQ0RfYV9TT1VSQ0VTKSAkKENGb250el9TT1VSQ0VTKSAkKENGb250ejU0
MV9TT1VSQ0VTKSAkKENGb250ejYzM19TT1VSQ0VTKSAkKEN3TG54X1NPVVJDRVMpICQoTVRCMTM0
X1NPVVJDRVMpICQoTXR4T3JiX1NPVVJDRVMpICQoYmF5cmFkX1NPVVJDRVMpICQoY3Vyc2VzX1NP
VVJDRVMpICQoZ2xrX1NPVVJDRVMpICQoaGQ0NDc4MF9TT1VSQ0VTKSAkKEVYVFJBX2hkNDQ3ODBf
U09VUkNFUykgJChpY3BfYTEwNl9TT1VSQ0VTKSAkKGlybWFuX1NPVVJDRVMpICQoam95X1NPVVJD
RVMpICQobGIyMTZfU09VUkNFUykgJChsY2RtMDAxX1NPVVJDRVMpICQobGN0ZXJtX1NPVVJDRVMp
ICQobGlyY19TT1VSQ0VTKSAkKG1zNjkzMV9TT1VSQ0VTKSAkKG10Y19zMTYyMDl4X1NPVVJDRVMp
ICQoc2VkMTMzMF9TT1VSQ0VTKSAkKHNlZDE1MjBfU09VUkNFUykgJChzdHY1NzMwX1NPVVJDRVMp
ICQoc3ZnYV9TT1VSQ0VTKSAkKHQ2OTYzX1NPVVJDRVMpICQodGV4dF9TT1VSQ0VTKSAkKHdpcnpf
c2xpX1NPVVJDRVMpCjM2MGEzNjgsMzcwCj4gTVRCMTM0JChFWEVFWFQpOiAkKE1UQjEzNF9PQkpF
Q1RTKSAkKE1UQjEzNF9ERVBFTkRFTkNJRVMpIAo+IAlAcm0gLWYgTVRCMTM0JChFWEVFWFQpCj4g
CSQoTElOSykgJChNVEIxMzRfTERGTEFHUykgJChNVEIxMzRfT0JKRUNUUykgJChNVEIxMzRfTERB
REQpICQoTElCUykK

------_=_NextPart_001_01C79D8B.4EB89FCF
Content-Type: application/octet-stream;
	name="mtb134.c"
Content-Transfer-Encoding: base64
Content-Description: mtb134.c
Content-Disposition: attachment;
	filename="mtb134.c"

LyoNCiAqDQogKiBNaWhhaSBCYXJib3MgPG1paGFpLmJhcmJvcyBhdCBldXJvc3BpZGVyIGRvdCBj
b20+DQogKg0KICogRW5oYW5jZWQgYnkgSG93YXJkIENhaSBhdCBoLmNhaUBmNS5jb20uDQogKiBN
YXkgMjMsIDIwMDcgYXQgU2VhdHRsZSwgV0EsIFVTQS4NCiAqDQogKiBTZXJpYWwgMTZ4MiBMQ0Qg
d2l0aCBhIDMgd2lyZSBjb25uZWN0aW9uIChUeCwgUnggYW5kIEdORCksIDI0MDAgYnBzLg0KICog
OCBjdXN0b20gY2hhcmFjdGVycywgNCBrZXlzLg0KICogTWFudWZhY3R1cmVkIGJ5IE1pY3JvdGlw
cyBUZWNobm9sb2d5DQogKiBodHRwOi8vd3d3Lm1pY3JvdGlwcy5jb20udHcvVGFpd2FuX0VuZ2xp
Z2gvY29udGVudC9Qcm9kdWN0c19jaGFyYWN0ZXJMQ0QuYXNwDQogKiBBbHNvIHNvbGQgYnkgUG9y
dHdlbGwgYXMgRVpJTy0xMDAgYW5kIG1heWJlIGJ5IG90aGVyIG1hbnVmYWN0dXJlcnMNCiAqDQog
KiBUaGUgb3JpZ2luYWwgaWNvbiBzZXR0aW5nIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluY29y
cmVjdGx5LCBpdCBzZXRzIHVwDQogKiB0aGUgY3VzdG9taXplZCBpY29uLCBidXQgbm90IGRpc3Bs
YXkgaXQuIGFsc28gc2VlbXMgbWl4ZWQgdGhlc2UgZGF0YSBjb21tYW5kcw0KICogd2l0aCBSRUFE
S0VZIGNvbW1hbmRzIGFmdGVyd2FyZHMgY2F1c2VkIHRoZSBMQ0QgbWlzLWJlaGF2aW9ybHkgLSBr
ZXkgcHJlc3NpbmcNCiAqIGlzIGNsZWFyZWQgc29tZWhvdyBpbnRlcm5hbGx5LCB0aGVyZWZvcmUg
dmVyeSBsb3cga2V5IHByZXNzcyByZXNwb25zZS4NCiAqIE5vdyBzZXR0aW5nIHRoZSBjdXN0b20g
aWNvbiBhdCBzdGFydHVwIGFuZCBkaXNwbGF5IGF0IHJ1biB0aW1lLg0KICovDQoNCiNpbmNsdWRl
IDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2lu
Y2x1ZGUgPHRlcm1pb3MuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPHN0cmluZy5o
Pg0KI2luY2x1ZGUgPGVycm5vLmg+DQoNCiNpZmRlZiBIQVZFX0NPTkZJR19IDQojIGluY2x1ZGUg
ImNvbmZpZy5oIg0KI2VuZGlmDQoNCiNpbmNsdWRlICJzaGFyZWQvc3RyLmgiDQojaW5jbHVkZSAi
c2hhcmVkL2RlYnVnLmgiDQojaW5jbHVkZSAibGNkLmgiDQojaW5jbHVkZSAibXRiMTM0LmgiDQoN
CiNpbmNsdWRlICJyZXBvcnQuaCINCg0KI2luY2x1ZGUgInRpbWluZy5oIg0KDQovLyBBdXRvcmVw
ZWF0IHZhbHVlcw0KI2RlZmluZSBLRVlQQURfQVVUT1JFUEVBVF9ERUxBWSA1MDANCiNkZWZpbmUg
S0VZUEFEX0FVVE9SRVBFQVRfRlJFUSAxNQ0KDQoNCi8qDQogKiBHbG9iYWwgdmFyaWFibGVzDQog
Ki8NCkRyaXZlciAqZE1UQjEzNDsNClByaXZhdGVEYXRhICpNVEIxMzQ7DQoNCi8vIFZhcnMgZm9y
IHRoZSBzZXJ2ZXIgY29yZQ0KTU9EVUxFX0VYUE9SVCBjaGFyICogYXBpX3ZlcnNpb24gPSBBUElf
VkVSU0lPTjsNCk1PRFVMRV9FWFBPUlQgaW50IHN0YXlfaW5fZm9yZWdyb3VuZCA9IDA7IC8vIGJl
Y2F1c2Ugb2YgcG9ydCBhY2Nlc3MgcHJvYmxlbXMNCk1PRFVMRV9FWFBPUlQgaW50IHN1cHBvcnRz
X211bHRpcGxlID0gMTsgLy8geWVzLCB3ZSBoYXZlIG5vIGdsb2JhbCB2YXJpYWJsZXMgKGV4Y2Vw
dCBmb3IgY29uc3RhbnRzKQ0KTU9EVUxFX0VYUE9SVCBjaGFyICpzeW1ib2xfcHJlZml4ID0gIk1U
QjEzNF8iOw0KDQppbnQga2V5Y29kZXNbXSA9IHtMQ0RfS0VZX0VOVEVSLCBMQ0RfS0VZX1VQLCBM
Q0RfS0VZX0RPV04sIExDRF9LRVlfRVNDfTsNCg0Kc3RhdGljIGludCBNVEIxMzRfaW5pdF9pY29u
KERyaXZlciAqZHJ2dGhpcyk7DQpzdGF0aWMgY2hhciAqZGVmYXVsdEtleU1hcERpcmVjdFtLRVlQ
QURfTUFYWF0gPSB7ICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiIH07DQoNCnN0YXRpYyBjaGFyICpk
ZWZhdWx0S2V5TWFwTWF0cml4W0tFWVBBRF9NQVhZXVtLRVlQQURfTUFYWF0gPSB7DQoJCXsgIjEi
LCAiMiIsICIzIiwgIkEiLCAiRSIgfSwNCgkJeyAiNCIsICI1IiwgIjYiLCAiQiIsICJGIiB9LA0K
CQl7ICI3IiwgIjgiLCAiOSIsICJDIiwgIkciIH0sDQoJCXsgIioiLCAiMCIsICIjIiwgIkQiLCAi
SCIgfSwNCgkJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sDQoJCXsgTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCB9LA0KCQl7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwg
fSwNCgkJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0sDQoJCXsgTlVMTCwgTlVMTCwg
TlVMTCwgTlVMTCwgTlVMTCB9LA0KCQl7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwN
CgkJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH19Ow0KDQovKg0KICogRHJpdmVyIGds
b2JhbCB2YXJpYWJsZXMNCiAqLw0KdHlwZWRlZiBlbnVtIHsNCglub25lID0gMCwNCgloYmFyID0g
MSwNCgl2YmFyID0gMiwNCgliaWduID0gNCwNCiAgICBiZWF0ID0gOCwNCglpY29uID0gMTANCn0g
Y3VzdG9tX3R5cGU7DQoNCi8qIGN1cnJlbnQgdXNlciBkZWZpbmVkIGNoYXJhY3RlcnMgKi8NCnN0
YXRpYyBjdXN0b21fdHlwZQljdXN0b20gPSBub25lOw0KDQovKiBmaWxlIGhhbmRsZSBmb3IgdGhl
IGRldmljZSAqLw0Kc3RhdGljIGludCBmZDsNCg0KDQoNCi8qDQogKiBEcml2ZXIgaW50ZXJuYWwg
ZnVuY3Rpb24gZGVjbGFyYXRpb25zDQogKi8NCiANCnN0YXRpYyBpbnQgTVRCMTM0X3NlbmRDb21t
YW5kKCB1bnNpZ25lZCBjaGFyIGNtZCApOw0KDQoNCi8qDQogKiBTdGFydCBvZiBmdW5jdGlvbiBp
bXBsZW1lbnRhdGlvbnMNCiAqLw0KDQpzdGF0aWMgaW50IE1UQjEzNF9zZW5kQ29tbWFuZCggdW5z
aWduZWQgY2hhciBjbWQgKQ0Kew0KCXVuc2lnbmVkIGNoYXIJYnVmWzJdOw0KCWludAkJcmV0Ow0K
CQ0KCWJ1ZlswXSA9IDB4ZmU7CQkJCS8qIE1UQjEzNCBjb21tYW5kIGNvZGUgKi8NCglidWZbMV0g
PSBjbWQ7DQoNCgl0aW1pbmdfdVBhdXNlKCAxMDAwICk7CQkJLyogd2FpdCBmb3IgMSBtcyAqLw0K
DQoJaWYgKCggcmV0ID0gd3JpdGUoIGZkLCBidWYsIDIgKSkgIT0gMiApCXsNCgkJaWYgKCByZXQg
PCAwICkNCgkJCWZwcmludGYoIHN0ZGVyciwgIk1UQjEzNF9zZW5kQ29tbWFuZDogd3JpdGUgZmFp
bGVkICglcylcbiIsIHN0cmVycm9yKCBlcnJubyApKTsNCgkJZWxzZQ0KCQkJZnByaW50Ziggc3Rk
ZXJyLCAiTVRCMTM0X3NlbmRDb21tYW5kOiBzaG9ydCB3cml0ZSAhPyFcbiIgKTsNCgkJcmV0dXJu
KCAtMSApOw0KCX0NCg0KCXRpbWluZ191UGF1c2UoIDEwMDAgKTsJCQkvKiB3YWl0IGZvciAxIG1z
ICovDQoNCglyZXR1cm4oIDAgKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEluaXRpYWxpemUgdGhl
IGRyaXZlciwgb3BlbiBjb20gcG9ydCBhbmQgc2V0IGl0IGNvcnJlY3RseQ0KKiBJbml0aWFsaXpl
IHRoZSBkaXNwbGF5IGFuZCB0dXJuIGl0IG9uDQoqLw0KaW50DQpNVEIxMzRfaW5pdCggRHJpdmVy
ICpkcnZ0aGlzLCBjaGFyICphcmdzICkNCnsNCglzdHJ1Y3QgdGVybWlvcwlwb3J0c2V0Ow0KCWNo
YXIJCWRldmljZVsyNTZdID0gIi9kZXYvbGNkIjsNCglpbnQJCXNwZWVkID0gQjI0MDA7DQovLwlp
bnQJCXNwZWVkID0gQjk2MDA7DQoJY2hhciAqczsNCglQcml2YXRlRGF0YSAqcDsNCg0KCWRNVEIx
MzQgPSBkcnZ0aGlzOw0KDQogICAgICAgLy8gQWxsb2NhdGUgYW5kIHN0b3JlIHByaXZhdGUgZGF0
YQ0KICAgICAgICBwID0gKFByaXZhdGVEYXRhICopIG1hbGxvYyggc2l6ZW9mKCBQcml2YXRlRGF0
YSkgKTsNCiAgICAgICAgaWYoICEgcCApDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAg
ICAgICBpZiggZHJ2dGhpcy0+c3RvcmVfcHJpdmF0ZV9wdHIoIGRydnRoaXMsIHAgKSApDQogICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOw0KDQogICAgICAgIC8vIENsZWFyIGRhdGEgc3RydWN0DQog
ICAgICAgIG1lbXNldCggcCwgMCwgc2l6ZW9mKCpwKSApOw0KDQoJTVRCMTM0ID0gcDsNCg0KCS8v
Ly8gUkVBRCBUSEUgQ09ORklHIEZJTEUNCg0KCXAtPnBvcnQJCQk9IGRydnRoaXMtPmNvbmZpZ19n
ZXRfaW50KCBkcnZ0aGlzLT5uYW1lLCAicG9ydCIsIDAsIExQVFBPUlQgKTsNCglwLT5leHRJRgkJ
PSBkcnZ0aGlzLT5jb25maWdfZ2V0X2Jvb2woIGRydnRoaXMtPm5hbWUsICJleHRlbmRlZCIsIDAs
IDAgKTsNCglwLT5oYXZlX2tleXBhZAkJPSBkcnZ0aGlzLT5jb25maWdfZ2V0X2Jvb2woIGRydnRo
aXMtPm5hbWUsICJrZXlwYWQiLCAwLCAwICk7DQoJcC0+aGF2ZV9iYWNrbGlnaHQJPSBkcnZ0aGlz
LT5jb25maWdfZ2V0X2Jvb2woIGRydnRoaXMtPm5hbWUsICJiYWNrbGlnaHQiLCAwLCAwICk7DQoJ
cC0+aGF2ZV9vdXRwdXQJCT0gZHJ2dGhpcy0+Y29uZmlnX2dldF9ib29sKCBkcnZ0aGlzLT5uYW1l
LCAib3V0cHV0cG9ydCIsIDAsIDAgKTsNCglwLT5kZWxheU11bHQgCQk9IGRydnRoaXMtPmNvbmZp
Z19nZXRfaW50KCBkcnZ0aGlzLT5uYW1lLCAiZGVsYXltdWx0IiwgMCwgMSApOw0KCXAtPmRlbGF5
QnVzIAkJPSBkcnZ0aGlzLT5jb25maWdfZ2V0X2Jvb2woIGRydnRoaXMtPm5hbWUsICJkZWxheWJ1
cyIsIDAsIDEgKTsNCg0KCXMgPSBkcnZ0aGlzLT5jb25maWdfZ2V0X3N0cmluZyggZHJ2dGhpcy0+
bmFtZSwgIkRldmljZSIsIDAsICIvZGV2L3R0eVMwIiApOw0KCWlmIChzKQ0KCXsNCgkJcmVwb3J0
IChSUFRfREVCVUcsICJNVEIxMzRfaW5pdDogZGV2aWNlOiAlcyIsIGRldmljZSApOw0KCQlzdHJj
cHkoZGV2aWNlLCBzKTsNCgl9DQoNCgkvLyBHZXQgYW5kIHBhcnNlIHNpemUNCglzID0gZHJ2dGhp
cy0+Y29uZmlnX2dldF9zdHJpbmcoIGRydnRoaXMtPm5hbWUsICJzaXplIiwgMCwgIjE2eDIiICk7
DQoJaWYoIHNzY2FuZiggcywgIiVkeCVkIiwgJihwLT53aWR0aCksICYocC0+aGVpZ2h0KSApICE9
IDINCgl8fCAocC0+d2lkdGggPD0gMCkgfHwgKHAtPndpZHRoID4gTENEX01BWF9XSURUSCkNCgl8
fCAocC0+aGVpZ2h0IDw9IDApIHx8IChwLT5oZWlnaHQgPiBMQ0RfTUFYX0hFSUdIVCkpIHsNCgkJ
cmVwb3J0IChSUFRfRVJSLCAiTVRCMTM0X2luaXQ6IENhbm5vdCByZWFkIHNpemU6ICVzIiwgcyAp
Ow0KCX0NCg0KCS8qDQoJICogT3BlbiB0aGUgSS9PIHBvcnQgYW5kIHNldCBpdCB1cCBhcyBuZWVk
ZWQNCgkgKi8NCglpZiAoKCBmZCA9IG9wZW4oIGRldmljZSwgT19SRFdSIHwgT19OT0NUVFkgfCBP
X05ERUxBWSApKSA9PSAtMSApCXsNCgkJZnByaW50Ziggc3RkZXJyLCAiTVRCMTM0X2luaXQ6IGZh
aWxlZCAoJXMpXG4iLCBzdHJlcnJvciggZXJybm8gKSk7DQoJCXJldHVybiggLTEgKTsNCgl9DQoN
CglpZiAoIHRjZ2V0YXR0ciggZmQsICZwb3J0c2V0ICkgIT0gMCApCXsNCgkJZnByaW50Ziggc3Rk
ZXJyLCAiTVRCMTM0X2luaXQ6IHRjZ2V0YXR0ciBmYWlsZWQgKCVzKVxuIiwgc3RyZXJyb3IoIGVy
cm5vICkpOw0KCQlyZXR1cm4oIC0xICk7DQoJfQ0KDQovKiBpbnB1dCBtb2RlcyAqLw0KICAgICAg
ICBwb3J0c2V0LmNfaWZsYWcgJj0gfihJR05CUkt8QlJLSU5UfFBBUk1SS3xJTlBDS3xJU1RSSVB8
SU5MQ1J8SUdOQ1J8SUNSTkwNCiAgICAgICAgICAgICAgICAgICAgICAgIHxJVUNMQ3xJWE9OfElY
QU5ZfElYT0ZGfElNQVhCRUwpOw0KICAgICAgICBwb3J0c2V0LmNfaWZsYWcgfD0gSUdOUEFSOw0K
DQovKiBvdXRwdXQgbW9kZXMgKi8NCiAgICAgICAgcG9ydHNldC5jX29mbGFnICY9IH4oT1BPU1R8
T0xDVUN8T05MQ1J8T0NSTkx8T05PQ1J8T05MUkVUfE9GSUxMDQogICAgICAgICAgICAgICAgICAg
ICAgICB8T0ZERUx8TkxETFl8Q1JETFl8VEFCRExZfEJTRExZfFZURExZfEZGRExZKTsNCiAgICAg
ICAgcG9ydHNldC5jX29mbGFnIHw9IE5MMHxDUjB8VEFCMHxCUzB8VlQwfEZGMDsNCg0KLyogY29u
dHJvbCBtb2RlcyAqLw0KICAgICAgICBwb3J0c2V0LmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8
Q1JUU0NUU3xQQVJPRER8SFVQQ0wpOw0KICAgICAgICBwb3J0c2V0LmNfY2ZsYWcgfD0gQ1JFQUR8
Q1M4fENTVE9QQnxDTE9DQUw7DQoNCi8qIGxvY2FsIG1vZGVzICovDQogICAgICAgIHBvcnRzZXQu
Y19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfElFWFRFTnxFQ0hPfEZMVVNIT3xQRU5ESU4pOw0KICAg
ICAgICBwb3J0c2V0LmNfbGZsYWcgfD0gTk9GTFNIOw0KDQovKiBzZXQgYmF1ZCByYXRlICovDQog
ICAgICAgIGNmc2V0b3NwZWVkKCZwb3J0c2V0LCBzcGVlZCk7DQogICAgICAgIGNmc2V0aXNwZWVk
KCZwb3J0c2V0LCBzcGVlZCk7DQoNCi8qIHNlbmQgdGhlIG5ldyBkZXZpY2Ugc2V0dGluZ3MgKi8N
CiAgICAgICAgaWYgKCB0Y3NldGF0dHIoIGZkLCBUQ1NBTk9XLCAmcG9ydHNldCApICE9IDAgKQl7
DQoJCWZwcmludGYoIHN0ZGVyciwgIk1UQjEzNF9pbml0OiB0Y3NldGF0dHIgZmFpbGVkICglcylc
biIsIHN0cmVycm9yKCBlcnJubyApKTsNCgkJcmV0dXJuKCAtMSApOw0KCX0NCg0KCS8vIEtleXBh
ZCA/DQoJaWYgKCBwLT5oYXZlX2tleXBhZCApIHsNCgkJaW50IHgsIHk7DQoNCgkJLy8gUmVhZCBr
ZXltYXANCgkJZm9yKCB4PTA7IHg8S0VZUEFEX01BWFg7IHgrKyApIHsNCgkJCWNoYXIgYnVmWzQw
XTsNCg0KCQkJLy8gRmlyc3QgZmlsbCB3aXRoIGRlZmF1bHQgdmFsdWUNCgkJCXAtPmtleU1hcERp
cmVjdFt4XSA9IGRlZmF1bHRLZXlNYXBEaXJlY3RbeF07DQoNCgkJCS8vIFJlYWQgY29uZmlnIHZh
bHVlDQoJCQlzcHJpbnRmKCBidWYsICJrZXlkaXJlY3RfJTFkIiwgeCsxICk7DQoJCQlzID0gZHJ2
dGhpcy0+Y29uZmlnX2dldF9zdHJpbmcoIGRydnRoaXMtPm5hbWUsIGJ1ZiwgMCwgTlVMTCApOw0K
DQoJCQkvLyBXYXMgYSBrZXkgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgZmlsZSA/DQoJCQlpZigg
cyApIHsNCgkJCQlwLT5rZXlNYXBEaXJlY3RbeF0gPSBzdHJkdXAoIHMgKTsNCgkJCQlzdHJjcHko
IHAtPmtleU1hcERpcmVjdFt4XSwgcyApOw0KCQkJCXJlcG9ydCggUlBUX0RFQlVHLCAiTVRCMTM0
OiBEaXJlY3Qga2V5ICVkOiBcIiVzXCIiLCB4LCBzICk7DQoJCQl9DQoJCX0NCg0KCQlmb3IoIHg9
MDsgeDxLRVlQQURfTUFYWDsgeCsrICkgew0KCQkJZm9yKCB5PTA7IHk8S0VZUEFEX01BWFk7IHkr
KyApIHsNCgkJCQljaGFyIGJ1Zls0MF07DQoNCgkJCQkvLyBGaXJzdCBmaWxsIHdpdGggZGVmYXVs
dCB2YWx1ZQ0KCQkJCXAtPmtleU1hcE1hdHJpeFt5XVt4XSA9IGRlZmF1bHRLZXlNYXBNYXRyaXhb
eV1beF07DQoNCgkJCQkvLyBSZWFkIGNvbmZpZyB2YWx1ZQ0KCQkJCXNwcmludGYoIGJ1ZiwgImtl
eW1hdHJpeF8lMWRfJWQiLCB4KzEsIHkrMSApOw0KCQkJCXMgPSBkcnZ0aGlzLT5jb25maWdfZ2V0
X3N0cmluZyggZHJ2dGhpcy0+bmFtZSwgYnVmLCAwLCBOVUxMICk7DQoNCgkJCQkvLyBXYXMgYSBr
ZXkgc3BlY2lmaWVkIGluIHRoZSBjb25maWcgZmlsZSA/DQoJCQkJaWYoIHMgKSB7DQoJCQkJCXAt
PmtleU1hcE1hdHJpeFt5XVt4XSA9IHN0cmR1cCggcyApOw0KCQkJCQlzdHJjcHkoIHAtPmtleU1h
cE1hdHJpeFt5XVt4XSwgcyApOw0KCQkJCQlyZXBvcnQoIFJQVF9JTkZPLCAiTVRCMTM0OiBNYXRy
aXgga2V5ICVkICVkOiBcIiVzXCIiLCB4LCB5LCBzICk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0K
DQoJLyoNCgkgKiBTZXR1cCB0aGUgZGlzcGxheSBwYXJhbWV0ZXJzIGFuZCBmcmFtZWJ1ZmZlcg0K
CSAqLw0KCXJlcG9ydCAoUlBUX0RFQlVHLCAiTVRCMTM0X2luaXQ6IGNvbmZpZ3VyaW5nOiAoJWQp
XG4iLCBmZCk7DQoNCgkvL01UQjEzNC0+d2lkdGggPSAxNiwgTVRCMTM0LT5oZWlnaHQgPSAyOw0K
CU1UQjEzNC0+Y2VsbHdpZHRoID0gNSwgTVRCMTM0LT5jZWxsaGVpZ2h0ID0gODsNCg0KCWlmICgg
TVRCMTM0LT5mcmFtZWJ1ZiA9PSBOVUxMICkJIHsNCgkJaWYgKCggTVRCMTM0LT5mcmFtZWJ1ZiA9
ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyggTVRCMTM0LT53aWR0aCAqIE1UQjEzNC0+aGVpZ2h0
ICkpICE9IE5VTEwgKQ0KCQkJbWVtc2V0IChNVEIxMzQtPmZyYW1lYnVmLCAnICcsIE1UQjEzNC0+
d2lkdGggKiBNVEIxMzQtPmhlaWdodCk7DQoJCWVsc2UJew0KCQkJZnByaW50Ziggc3RkZXJyLCAi
TVRCMTM0X2luaXQ6IGZyYW1lYnVmZmVyIGFsb2NhdGlvbiBmYWlsZWQuXG4iICk7DQoJCQlyZXR1
cm4oIC0xICk7DQoJCX0NCgl9DQoNCiAgICAgICAgLy8gQWxsb2NhdGUgYW5kIGNsZWFyIHRoZSBi
dWZmZXIgZm9yIGluY3JlbWVudGFsIHVwZGF0ZXMNCiAgICAgICAgcC0+bGNkX2NvbnRlbnRzID0g
KHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jIChwLT53aWR0aCAqIHAtPmhlaWdodCk7DQogICAgICAg
IGlmICghcC0+bGNkX2NvbnRlbnRzKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAg
ICAgICB9DQogICAgICAgIG1lbXNldChwLT5sY2RfY29udGVudHMsIDAsIHAtPndpZHRoICogcC0+
aGVpZ2h0KTsNCg0KCU1UQjEzNF9zZW5kQ29tbWFuZCggU09IICk7CQkvKiBzdGFydCBvZiBkYXRh
ICovDQoJTVRCMTM0X3NlbmRDb21tYW5kKCBTT0ggKTsJCS8qIHdoeSB0d2ljZSA/IC0gb25seSB0
aGUgbWFudWZhY3R1cmVyIGtub3dzIDpQICovDQoJTVRCMTM0X3NlbmRDb21tYW5kKCBDTEVBUiAp
OwkJLyogY2xlYXIgc2NyZWVuICovDQoJTVRCMTM0X3NlbmRDb21tYW5kKCBESVNQT04gKTsJCS8q
IGhpZGUgY3Vyc29yIGFuZCBzaG93IGRpc3BsYXkgKi8NCg0KICAgIE1UQjEzNF9pbml0X2ljb24o
ZHJ2dGhpcyk7DQoJcmVwb3J0IChSUFRfREVCVUcsICJNVEIxMzRfaW5pdDogcmV0dXJuaW5nOiAo
JWQpXG4iLCBmZCk7DQogICAgICAgIHJldHVybiggZmQgKTsJCS8qIFRoYXQncyBuaWNlICEhISAt
IHdoeSB0aGUgaGVsbCBkbyB3ZSBkbyB0aGF0IHNpbmNlIGl0J3Mgbm90IHVzZWQgcHJvcGVybHkg
YW55d2F5ID8qLw0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBDbGVhcnMgdGhlIHZpcnR1YWwgTENEIHNj
cmVlbiAodGhlIGZyYW1lYnVmZmVyKQ0KKi8NCnZvaWQgTVRCMTM0X2NsZWFyKCBEcml2ZXIgKmRy
dnRoaXMpDQp7DQoJUHJpdmF0ZURhdGEgKk1UQjEzNCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0aGlz
LT5wcml2YXRlX2RhdGE7DQoJcmVwb3J0IChSUFRfREVCVUcsICJNVEIxMzRfY2xlYXI6IHJldHVy
bmluZzogKCVkKVxuIiwgMCk7DQoJbWVtc2V0KCBNVEIxMzQtPmZyYW1lYnVmLCAnICcsIE1UQjEz
NC0+d2lkdGggKiBNVEIxMzQtPmhlaWdodCApOw0KfQ0KDQoNCg0KLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIFByaW50
cyBhIHN0cmluZyBpbiB0aGUgZnJhbWVidWZmZXIsIGF0IHBvc2l0aW9uICh4LHkpLiAgVGhlDQoq
IHVwcGVyLWxlZnQgaXMgKDEsMSksIGFuZCB0aGUgbG93ZXIgcmlnaHQgc2hvdWxkIGJlICgxNiwy
KS4NCiogQ2xpcHMgdGhlIHN0cmluZyBhcm91bmQgdGhlIGJvcmRlcnMNCiovDQp2b2lkIE1UQjEz
NF9zdHJpbmcoIERyaXZlciAqZHJ2dGhpcywgaW50IHgsIGludCB5LCBjaGFyIHN0cmluZ1tdICkN
CnsNCglQcml2YXRlRGF0YSAqTVRCMTM0ID0gKFByaXZhdGVEYXRhICopIGRydnRoaXMtPnByaXZh
dGVfZGF0YTsNCgl1bnNpZ25lZCBjaGFyCSpjOw0KDQoJaWYgKCB4ID4gTVRCMTM0LT53aWR0aCB8
fCB4IDwgMSApCQkvKiBDaGVjayBkYXRhIHNhbml0eSBmaXJzdCAqLw0KCQlyZXR1cm47DQoJaWYg
KCB5ID4gTVRCMTM0LT5oZWlnaHQgfHwgeSA8IDEgKQ0KCQlyZXR1cm47DQoNCgl5LS0sIHgtLTsJ
CQkJLyogTWFrZSBwYXJhbXMgMCBiYXNlZCAqLw0KCWMgPSBNVEIxMzQtPmZyYW1lYnVmICsgeSAq
IE1UQjEzNC0+d2lkdGggKyB4Ow0KDQoJd2hpbGUoIHggPCBNVEIxMzQtPndpZHRoICYmICpzdHJp
bmcgKQl7DQoJCWlmICggKnN0cmluZyA9PSAnXDI1NCcgKQ0KCQkJKmMrKyA9ICcjJzsNCgkJZWxz
ZQ0KCQkJKmMrKyA9ICpzdHJpbmcrKzsNCgl9IA0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIFByaW50
cyBhIGNoYXJhY3RlciBpbiB0aGUgZnJhbWVidWZmZXIsIGF0IHBvc2l0aW9uICh4LHkpLiAgVGhl
DQoqIHVwcGVyLWxlZnQgaXMgKDEsMSksIGFuZCB0aGUgbG93ZXIgcmlnaHQgc2hvdWxkIGJlICgx
NiwyKS4NCiovDQp2b2lkIE1UQjEzNF9jaHIoIERyaXZlciAqZHJ2dGhpcyxpbnQgeCwgaW50IHks
IGNoYXIgYyApDQp7DQoJUHJpdmF0ZURhdGEgKk1UQjEzNCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0
aGlzLT5wcml2YXRlX2RhdGE7DQoJcmVwb3J0IChSUFRfRVJSLCAiTVRCMTM0X2NocjogcmV0dXJu
aW5nOiAoJWQpXG4iLCAwKTsNCglpZiAoIHggPiBNVEIxMzQtPndpZHRoIHx8IHggPCAxICkJCS8q
IENoZWNrIGRhdGEgc2FuaXR5IGZpcnN0ICovDQoJCXJldHVybjsNCglpZiAoIHkgPiBNVEIxMzQt
PmhlaWdodCB8fCB5IDwgMSApDQoJCXJldHVybjsNCg0KCXktLSwgeC0tOwkJCQkvKiBNYWtlIHBh
cmFtcyAwIGJhc2VkICovDQoJaWYgKCBjID09ICdcMjU0JyApDQoJCSooTVRCMTM0LT5mcmFtZWJ1
ZiArIHkgKiBNVEIxMzQtPndpZHRoICsgeCkgPSAnIyc7DQoJZWxzZQ0KCQkqKE1UQjEzNC0+ZnJh
bWVidWYgKyB5ICogTVRCMTM0LT53aWR0aCArIHgpID0gYzsNCn0NCg0KDQovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCiogRHJhd3MgYSB2ZXJ0aWNhbCBiYXINCiovDQp2b2lkIE1UQjEzNF92YmFyKCBEcml2ZXIg
KmRydnRoaXMsIGludCB4LCBpbnQgeTEsIGludCBsZW4sIGludCBwcm9taWxsZSwgaW50IG9wdGlv
bnMgKQ0Kew0KCVByaXZhdGVEYXRhICpNVEIxMzQgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+
cHJpdmF0ZV9kYXRhOw0KDQoNCglNVEIxMzRfaW5pdF92YmFyKGRydnRoaXMpOw0KCWlmICggeCA+
IE1UQjEzNC0+d2lkdGggfHwgeCA8IDEgKQkJLyogQ2hlY2sgZGF0YSBzYW5pdHkgZmlyc3QgKi8N
CgkJcmV0dXJuOw0KDQogICAgICAgIGNoYXIJbWFwWzldID0geyAzMiwgMSwgMiwgMywgNCwgNSwg
NiwgNywgMjU1IH07DQoJICAgIGludAl5Ow0KDQogICAgICAgIGZvciggeSA9IE1UQjEzNC0+aGVp
Z2h0OyB5ID4gMCAmJiBsZW4gPiAwOyApCXsNCgkJeS0tOw0KCSAgICAgICAgaWYgKCBsZW4gPj0g
TVRCMTM0LT5jZWxsaGVpZ2h0ICogeSApDQoJCQlNVEIxMzRfY2hyKCBkcnZ0aGlzLCB4LCB5LCAy
NTUgKTsNCgkJZWxzZQ0KCQkJTVRCMTM0X2NociggZHJ2dGhpcywgeCwgeSwgbWFwW2xlbl0gKTsN
CgkJbGVuIC09IE1UQjEzNC0+Y2VsbGhlaWdodDsNCgl9DQp9DQoNCg0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
DQoqIERyYXdzIGEgaG9yaXpvbnRhbCBiYXIgdG8gdGhlIHJpZ2h0Lg0KKi8NCnZvaWQgTVRCMTM0
X2hiYXIoIERyaXZlciAqZHJ2dGhpcywgaW50IHgsIGludCB5LCBpbnQgbGVuICwgaW50IHByb21p
bGxlLCBpbnQgb3B0aW9ucykNCnsNCglQcml2YXRlRGF0YSAqTVRCMTM0ID0gKFByaXZhdGVEYXRh
ICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsNCgljaGFyIG1hcFs3XSA9IHsgMzIsIDEsIDIsIDMs
IDQsIDI1NSB9Ow0KDQoJcmVwb3J0IChSUFRfRVJSLCAiTVRCMTM0X2hiYXI6IHJldHVybmluZzog
KCVkKVxuIiwgMCk7DQoJTVRCMTM0X2luaXRfaGJhcihkcnZ0aGlzKTsNCglpZiAoIHggPiBNVEIx
MzQtPndpZHRoIHx8IHggPCAxICkJCS8qIENoZWNrIGRhdGEgc2FuaXR5IGZpcnN0ICovDQoJCXJl
dHVybjsNCglpZiAoIHkgPiBNVEIxMzQtPmhlaWdodCB8fCB5IDwgMSApDQoJCXJldHVybjsNCg0K
CWZvciggOyB4IDw9IE1UQjEzNC0+d2lkdGggJiYgbGVuID4gMDsgeCsrICkJew0KCQlpZiggbGVu
ID49IE1UQjEzNC0+Y2VsbHdpZHRoICkNCgkJCU1UQjEzNF9jaHIoIGRydnRoaXMsIHgsIHksIG1h
cFs1XSApOw0KCQllbHNlDQoJCQlNVEIxMzRfY2hyKCBkcnZ0aGlzLCB4LCB5LCBtYXBbbGVuXSAp
Ow0KCQlsZW4gLT0gTVRCMTM0LT5jZWxsd2lkdGg7DQoJfQ0KfQ0KDQoNCi8qDQogKiBpbml0X251
bSAtIG5vdCBpbXBsZW1lbnRlZA0KICovDQoNCi8qDQogKiBudW0gLSBub3QgaW1wbGVtZW50ZWQN
CiAqLw0KDQovKg0KICogaW5pdCAtIGltcGxlbWVudGVkIGhpZ2hlcg0KICovDQoNCg0KLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqDQoqIGNsb3NlIGNoYW5uZWwgYW5kIGNsZWFuLXVwDQoqLw0Kdm9pZCBNVEIxMzRfY2xv
c2UoIERyaXZlciAqZHJ2dGhpcyApDQp7DQoJUHJpdmF0ZURhdGEgKk1UQjEzNCA9IChQcml2YXRl
RGF0YSAqKSBkcnZ0aGlzLT5wcml2YXRlX2RhdGE7DQoJcmVwb3J0IChSUFRfREVCVUcsICJNVEIx
MzRfY2xvc2U6IHJldHVybmluZzogKCVkKVxuIiwgMCk7DQogICAgICAgIGNsb3NlKCBmZCApOw0K
CWlmKCBNVEIxMzQtPmZyYW1lYnVmICkJew0KCQlmcmVlKCBNVEIxMzQtPmZyYW1lYnVmICk7DQoJ
CU1UQjEzNC0+ZnJhbWVidWYgPSBOVUxMOw0KCX0NCglpZihNVEIxMzQtPmxjZF9jb250ZW50cykg
ew0KCQlmcmVlKCBNVEIxMzQtPmxjZF9jb250ZW50cyApOw0KCQlNVEIxMzQtPmxjZF9jb250ZW50
cyA9IE5VTEw7DQoJfQ0KCWZyZWUoTVRCMTM0KTsNCglkcnZ0aGlzLT5zdG9yZV9wcml2YXRlX3B0
ciggZHJ2dGhpcywgTlVMTCApOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy8gUmV0dXJucyB0aGUgZGlzcGxh
eSB3aWR0aA0KLy8NCmludA0KTVRCMTM0X3dpZHRoIChEcml2ZXIgKmRydnRoaXMpDQp7DQogICAg
UHJpdmF0ZURhdGEgKk1UQjEzNCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0aGlzLT5wcml2YXRlX2Rh
dGE7DQogICAgcmVwb3J0IChSUFRfREVCVUcsICJNVEIxMzRfd2lkdGg6IHJldHVybmluZzogKCVk
KVxuIiwgMCk7DQogICAgcmV0dXJuIE1UQjEzNC0+d2lkdGg7DQp9DQoNCi8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovLyBS
ZXR1cm5zIHRoZSBkaXNwbGF5IGhlaWdodA0KLy8NCmludA0KTVRCMTM0X2hlaWdodCAoRHJpdmVy
ICpkcnZ0aGlzKQ0Kew0KICAgIFByaXZhdGVEYXRhICpNVEIxMzQgPSAoUHJpdmF0ZURhdGEgKikg
ZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOw0KICAgIHJlcG9ydCAoUlBUX0RFQlVHLCAiTVRCMTM0X2hl
aWdodDogcmV0dXJuaW5nOiAoJWQpXG4iLCAwKTsNCiAgICByZXR1cm4gTVRCMTM0LT5oZWlnaHQ7
DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKg0KKiBGbHVzaCB0aGUgZnJhbWVidWZmZXIgLSBpcyB0aGlzIHdo
YXQgd2UgYXJlIHN1cHBvc2VkIHRvIGRvID8NCiovDQp2b2lkIE1UQjEzNF9vbGRmbHVzaChEcml2
ZXIgKmRydnRoaXMpDQp7DQoJUHJpdmF0ZURhdGEgKk1UQjEzNCA9IChQcml2YXRlRGF0YSAqKSBk
cnZ0aGlzLT5wcml2YXRlX2RhdGE7DQoJTVRCMTM0X2RyYXdfZnJhbWUoIGRydnRoaXMsIE1UQjEz
NC0+ZnJhbWVidWYgKTsNCglyZXBvcnQgKFJQVF9ERUJVRywgIk1UQjEzNF9mbHVzaDogcmV0dXJu
aW5nOiBcbiIpOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy8gRGVsYXkgYSBudW1iZXIgb2YgbWljcm9zZWNv
bmRzDQovLw0Kdm9pZA0KTVRCMTM0X3VQYXVzZSAoUHJpdmF0ZURhdGEgKnAsIGludCB1c2VjcykN
CnsNCiAgICAgICAgdGltaW5nX3VQYXVzZSggdXNlY3MgKiBwLT5kZWxheU11bHQgKTsNCn0NCg0K
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8NCi8vIFNldCBwb3NpdGlvbiAobm90IHBhcnQgb2YgQVBJKQ0KLy8NCi8vIHggYW5k
IHkgaGVyZSBhcmUgZm9yIHRoZSB2aXJ0dWFsIHAtPmhlaWdodCB4IHAtPndpZHRoIGRpc3BsYXkN
CnZvaWQNCk1UQjEzNF9wb3NpdGlvbiAoRHJpdmVyICpkcnZ0aGlzLCBpbnQgeCwgaW50IHkpDQp7
DQoJUHJpdmF0ZURhdGEgKnAgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRh
Ow0KDQoJTVRCMTM0X3NlbmRDb21tYW5kKCBQT1NJVElPTiArICh5ICogU0VUQ0hBUikgKyB4KTsN
CglNVEIxMzRfdVBhdXNlIChwLCA0MCk7ICAJLy8gTWluaW11bSBleGVjIHRpbWUgZm9yIGFsbA0K
fQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLw0KLy8gRmx1c2ggdGhlIGZyYW1lYnVmZmVyIHRvIHRoZSBkaXNwbGF5DQov
Lw0Kdm9pZA0KTVRCMTM0X2ZsdXNoIChEcml2ZXIgKmRydnRoaXMpDQp7DQoJUHJpdmF0ZURhdGEg
KnAgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOw0KCWludCB4LCB5Ow0K
CWludCB3aWQgPSBwLT53aWR0aDsNCgljaGFyIGNoOw0KCWNoYXIgZHJhd2luZzsNCi8vCWludCBy
b3c7DQoJaW50IGNvdW50Ow0KDQoJLy8gVXBkYXRlIExDRCBpbmNyZW1lbnRhbGx5IGJ5IGNvbXBh
cmluZyB3aXRoIGxhc3QgY29udGVudHMNCgljb3VudCA9IDA7DQoJZm9yICh5PTA7IHk8cC0+aGVp
Z2h0OyB5KyspIHsNCgkJZHJhd2luZyA9IDA7DQoJCWZvciAoeD0wIDsgeDx3aWQ7IHgrKykgew0K
CQkJY2ggPSBwLT5mcmFtZWJ1ZlsoeSAqIHdpZCkgKyB4XTsNCgkJCWlmKCBjaCAhPSBwLT5sY2Rf
Y29udGVudHNbKHkqd2lkKSt4XSApIHsNCgkJCQlpZiggIWRyYXdpbmcgfHwgeCAlIDggPT0gMCAp
IHsgLy8geCU4IGlzIGZvciAxNngxIGRpc3BsYXlzICENCgkJCQkJZHJhd2luZyA9IDE7DQoJCQkJ
CU1UQjEzNF9wb3NpdGlvbihkcnZ0aGlzLHgseSk7DQoJCQkJfQ0KCQkJCXdyaXRlKGZkLCAoY2hh
ciAqKSZjaCwgMSk7DQoJCQkJTVRCMTM0X3VQYXVzZSAocCwgNDApOyAgLy8gTWluaW11bSBleGVj
IHRpbWUgZm9yIGFsbCBjb21tYW5kcw0KCQkJCXAtPmxjZF9jb250ZW50c1soeSp3aWQpK3hdID0g
Y2g7DQoJCQkJY291bnQgKys7DQoJCQl9DQoJCQllbHNlIHsNCgkJCQlkcmF3aW5nID0gMDsNCgkJ
CX0NCgkJfQ0KCX0NCglkZWJ1ZyggUlBUX0RFQlVHLCAiTVRCMTM0OiBmbHVzaGVkICVkIGNoYXJz
IiwgY291bnQgKTsNCn0NCg0KLyoNCiAqIGZsdXNoX2JveCAtIG5vdCBpbXBsZW1lbnRlZCwgZG9l
c24ndCBzZWVtIG5lY2Vzc2FyeQ0KICovDQoNCi8qDQogKiBjb250cmFzdCAtIG5vdCBpbXBsZW1l
bnRlZCwgZG9lc24ndCBzZWVtIHRvIGJlIHN1cHBvcnRlZA0KICovDQoNCi8qDQogKiBiYWNrbGln
aHQgLSBub3QgaW1wbGVtZW50ZWQsIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQNCiAqLw0K
DQovKg0KICogb3V0cHV0IC0gbm90IGltcGxlbWVudGVkLCB1c2luZyBpdCBtYWtlcyB0aGUgTENE
IGJsaW5rIGJhZGx5DQogKi8NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogU2V0cyBhIGN1c3RvbSBj
aGFyYWN0ZXIgZnJvbSAwLTcNCiovDQp2b2lkIE1UQjEzNF9zZXRfY2hhciggRHJpdmVyICpkcnZ0
aGlzLCBpbnQgbiwgY2hhciAqZGF0ICkNCnsNCglpbnQJcm93Ow0KCVByaXZhdGVEYXRhICpNVEIx
MzQgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOw0KDQoJcmVwb3J0IChS
UFRfREVCVUcsICJNVEIxMzRfc2V0X2NoYXI6IHJldHVybmluZzogKCVkKVxuIiwgMCk7DQoJaWYg
KCBuIDwgMCB8fCBuID4gNyB8fCAhZGF0ICkNCgkJcmV0dXJuOw0KDQoJbiA9IDY0ICsgKCA4ICog
biApOw0KDQoJZm9yICggcm93ID0gMDsgcm93IDwgTVRCMTM0LT5jZWxsaGVpZ2h0OyByb3crKyAp
CXsNCgkJTVRCMTM0X3NlbmRDb21tYW5kKCBuICsgcm93ICk7DQoJCXdyaXRlKCBmZCwgZGF0ICsg
cm93LCAxICk7DQoJfQ0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogU2V0cyB1cCB0aGUgY2hhcmFj
dGVycyBmb3IgdmVydGljYWwgYmFycy4gIENhbGwgYmVmb3JlIE1UQjEzNC0+dmJhcigpDQoqLw0K
dm9pZCBNVEIxMzRfaW5pdF92YmFyKCBEcml2ZXIgKmRydnRoaXMgKQ0Kew0KCVByaXZhdGVEYXRh
ICpNVEIxMzQgPSAoUHJpdmF0ZURhdGEgKikgZHJ2dGhpcy0+cHJpdmF0ZV9kYXRhOw0KCWNoYXIJ
Y2MxW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYg
fTsNCgljaGFyCWNjMltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDFmLCAweDFmIH07DQoJY2hhcgljYzNbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw
MCwgMHgxZiwgMHgxZiwgMHgxZiB9Ow0KCWNoYXIJY2M0W10gPSB7IDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYgfTsNCgljaGFyCWNjNVtdID0geyAweDAwLCAw
eDAwLCAweDAwLCAweDFmLCAweDFmLCAweDFmLCAweDFmLCAweDFmIH07DQoJY2hhcgljYzZbXSA9
IHsgMHgwMCwgMHgwMCwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiB9Ow0KCWNo
YXIJY2M3W10gPSB7IDB4MDAsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4
MWYgfTsNCg0KCXJlcG9ydCAoUlBUX0RFQlVHLCAiTVRCMTM0X2luaXRfdmJhcjogcmV0dXJuaW5n
OiAoJWQpXG4iLCAwKTsNCglNVEIxMzQgPSBNVEIxMzQ7DQogICAgICAgIGlmICggY3VzdG9tICE9
IHZiYXIgKQl7DQoJCSAgICBNVEIxMzRfc2V0X2NoYXIoIGRydnRoaXMsIDEsIGNjMSApOw0KCSAg
ICAgICAgTVRCMTM0X3NldF9jaGFyKCBkcnZ0aGlzLCAyLCBjYzIgKTsNCgkgICAgICAgIE1UQjEz
NF9zZXRfY2hhciggZHJ2dGhpcywgMywgY2MzICk7DQoJICAgICAgICBNVEIxMzRfc2V0X2NoYXIo
IGRydnRoaXMsIDQsIGNjNCApOw0KCSAgICAgICAgTVRCMTM0X3NldF9jaGFyKCBkcnZ0aGlzLCA1
LCBjYzUgKTsNCgkgICAgICAgIE1UQjEzNF9zZXRfY2hhciggZHJ2dGhpcywgNiwgY2M2ICk7DQoJ
ICAgICAgICBNVEIxMzRfc2V0X2NoYXIoIGRydnRoaXMsIDcsIGNjNyApOw0KCSAgICAgICAgY3Vz
dG9tID0gdmJhcjsNCgl9DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBTZXRzIHVwIHRoZSBjaGFy
YWN0ZXJzIGZvciBob3Jpem9udGFsIGJhcnMuICBDYWxsIGJlZm9yZSBNVEIxMzQtPmhiYXIoKQ0K
Ki8NCnZvaWQgTVRCMTM0X2luaXRfaGJhcihEcml2ZXIgKmRydnRoaXMpDQp7DQoJUHJpdmF0ZURh
dGEgKk1UQjEzNCA9IChQcml2YXRlRGF0YSAqKSBkcnZ0aGlzLT5wcml2YXRlX2RhdGE7DQoJY2hh
cgljYzFbXSA9IHsgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgx
MCB9Ow0KCWNoYXIJY2MyW10gPSB7IDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgs
IDB4MTgsIDB4MTggfTsNCgljaGFyCWNjM1tdID0geyAweDFjLCAweDFjLCAweDFjLCAweDFjLCAw
eDFjLCAweDFjLCAweDFjLCAweDFjIH07DQoJY2hhcgljYzRbXSA9IHsgMHgxZSwgMHgxZSwgMHgx
ZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSwgMHgxZSB9Ow0KCWNoYXIJY2M1W10gPSB7IDB4MWYs
IDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYgfTsNCg0KCXJlcG9ydCAo
UlBUX0RFQlVHLCAiTVRCMTM0X2luaXRfaGJhcjogcmV0dXJuaW5nOiAoJWQpXG4iLCAwKTsNCglN
VEIxMzQgPSBNVEIxMzQ7DQoJaWYoIGN1c3RvbSAhPSBoYmFyICkJew0KCQkgICAgTVRCMTM0X3Nl
dF9jaGFyKCBkcnZ0aGlzLCAxLCBjYzEgKTsNCgkgICAgICAgIE1UQjEzNF9zZXRfY2hhciggZHJ2
dGhpcywgMiwgY2MyICk7DQoJICAgICAgICBNVEIxMzRfc2V0X2NoYXIoIGRydnRoaXMsIDMsIGNj
MyApOw0KCSAgICAgICAgTVRCMTM0X3NldF9jaGFyKCBkcnZ0aGlzLCA0LCBjYzQgKTsNCgkgICAg
ICAgIE1UQjEzNF9zZXRfY2hhciggZHJ2dGhpcywgNSwgY2M1ICk7DQoJICAgICAgICBjdXN0b20g
PSBoYmFyOw0KCX0NCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogQmxhc3RzIGEgc2luZ2xlIGZyYW1l
IG9uc2NyZWVuLCB0byB0aGUgbGNkLi4uDQoqIElucHV0IGlzIGEgY2hhcmFjdGVyIGFycmF5LCBz
aXplZCBNVEIxMzQtPndpZCpNVEIxMzQtPmhndA0KKi8NCnZvaWQgTVRCMTM0X2RyYXdfZnJhbWUo
IERyaXZlciAqZHJ2dGhpcywgY2hhciAqZGF0ICkNCnsNCglpbnQJaTsNCglQcml2YXRlRGF0YSAq
TVRCMTM0ID0gKFByaXZhdGVEYXRhICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsNCg0KCWlmICgg
IWRhdCApDQoJCXJldHVybjsNCg0KCWZvciAoIGkgPSAwOyBpIDwgTVRCMTM0LT5oZWlnaHQ7IGkr
KyApCXsNCgkJTVRCMTM0X3NlbmRDb21tYW5kKCBQT1NJVElPTiArIGkgKiBTRVRDSEFSICk7DQoJ
CXdyaXRlKCBmZCwgZGF0ICsgaSAqIE1UQjEzNC0+d2lkdGgsIE1UQjEzNC0+d2lkdGggKTsNCgl9
DQoJTVRCMTM0X3NlbmRDb21tYW5kKCBESVNQT04gKTsJLyogaGlkZSBjdXJzb3IgJiBkaXNwbGF5
IGNoYXJzICovDQoJcmVwb3J0IChSUFRfREVCVUcsICJNVEIxMzRfZHJhd19mcmFtZTogcmV0dXJu
aW5nOlxuIik7DQp9DQoNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogTG9hZHMgYSBwcmVkaWZpbmVkIGlj
b24gdG8gdGhlIGxjZC4uLg0KKiANCioNCiogICAgIDEsMSwxLDEsMSwgMHgxZg0KKiAgICAgMSww
LDEsMCwxLCAweDE1DQoqICAgICAwLDAsMCwwLDAsIDB4MDANCiogICAgIDAsMCwwLDAsMCwgMHgw
MA0KKiAgICAgMCwwLDAsMCwwLCAweDAwDQoqICAgICAxLDAsMCwwLDEsIDB4MTENCiogICAgIDEs
MSwwLDEsMSwgMHgxYg0KKiAgICAgMSwxLDEsMSwxLCAweDFmIC8vIEVtcHR5IEhlYXJ0DQoqDQoq
ICAgICAxLDEsMSwxLDEsIDB4MWYNCiogICAgIDEsMCwxLDAsMSwgMHgxNQ0KKiAgICAgMCwxLDAs
MSwwLCAweDBhDQoqICAgICAwLDEsMSwxLDAsIDB4MGUNCiogICAgIDAsMSwxLDEsMCwgMHgwZQ0K
KiAgICAgMSwwLDEsMCwxLCAweDE1DQoqICAgICAxLDEsMCwxLDEsIDB4MWINCiogICAgIDEsMSwx
LDEsMSwgMHgxZiAvLyBGaWxsZWQgSGVhcnQNCioNCiogICAgIDAsMCwwLDAsMCwgMHgwMA0KKiAg
ICAgMCwwLDAsMCwwLCAweDAwDQoqICAgICAwLDAsMCwwLDAsIDB4MDANCiogICAgIDAsMCwwLDAs
MCwgMHgwMA0KKiAgICAgMCwwLDAsMCwwLCAweDAwDQoqICAgICAwLDAsMCwwLDAsIDB4MDANCiog
ICAgIDAsMCwwLDAsMCwgMHgwMA0KKiAgICAgMSwwLDEsMCwxLCAweDE1IC8vIEVsbGlwc2lzDQoq
DQoqICAgICAwLDAsMSwwLDAsIDB4MDQNCiogICAgIDAsMSwxLDEsMCwgMHgwZQ0KKiAgICAgMSww
LDEsMCwxLCAweDE1DQoqICAgICAwLDAsMSwwLDAsIDB4NDANCiogICAgIDAsMCwxLDAsMCwgMHg0
MA0KKiAgICAgMSwwLDEsMCwxLCAweDE1DQoqICAgICAwLDEsMSwxLDAsIDB4MGUNCiogICAgIDAs
MCwxLDAsMCwgMHgwNCAvLyB1cC1kb3duIGFycm93DQoqDQoqICAgICAwLDAsMSwwLDAsIDB4MDQN
CiogICAgIDAsMSwxLDEsMCwgMHgwZQ0KKiAgICAgMSwxLDEsMSwxLCAweDFmDQoqICAgICAwLDAs
MSwwLDAsIDB4NDANCiogICAgIDAsMCwxLDAsMCwgMHg0MA0KKiAgICAgMSwxLDEsMSwxLCAweDFm
DQoqICAgICAwLDEsMSwxLDAsIDB4MGUNCiogICAgIDAsMCwxLDAsMCwgMHgwNCAvLyBmaWxsZWQg
dXAtZG93biBhcnJvdw0KKg0KKiAgICAgMSwwLDAsMCwwLCAweDEwDQoqICAgICAxLDEsMCwwLDAs
IDB4MTgNCiogICAgIDEsMSwxLDAsMCwgMHgxYw0KKiAgICAgMSwxLDEsMSwwLCAweDFlDQoqICAg
ICAxLDEsMSwwLDAsIDB4MWMNCiogICAgIDEsMSwwLDAsMCwgMHgxOA0KKiAgICAgMSwwLDAsMCww
LCAweDEwDQoqICAgICAwLDAsMCwwLDAsIDB4MDAgLy8gcmlnaHQgYXJyb3csIGZpbGxlZA0KKg0K
KiAgICAgMCwwLDAsMSwwLCAweDAyDQoqICAgICAwLDAsMSwxLDAsIDB4MDYNCiogICAgIDAsMSwx
LDEsMCwgMHgwZQ0KKiAgICAgMSwxLDEsMSwwLCAweDFlDQoqICAgICAwLDEsMSwxLDAsIDB4MGUN
CiogICAgIDAsMCwxLDEsMCwgMHgwNg0KKiAgICAgMCwwLDAsMSwwLCAweDAyDQoqICAgICAwLDAs
MCwwLDAsIDB4MDAgLy8gbGVmdCBhcnJvdywgZmlsbGVkDQoqDQoqICAgICAwLDAsMCwwLDAsIDB4
MDANCiogICAgIDAsMCwxLDAsMCwgMHgwNA0KKiAgICAgMCwxLDAsMSwwLCAweDBhDQoqICAgICAx
LDAsMCwwLDEsIDB4MTENCiogICAgIDEsMCwwLDAsMSwgMHgxMQ0KKiAgICAgMCwxLDAsMSwwLCAw
eDBhDQoqICAgICAwLDAsMSwwLDAsIDB4MDQNCiogICAgIDAsMCwwLDAsMCwgMHgwMCAvLyBjaXJj
bGUNCioNCiogICAgIDAsMCwwLDAsMCwgMHgwMA0KKiAgICAgMCwwLDEsMCwwLCAweDA0DQoqICAg
ICAwLDEsMSwxLDAsIDB4MGUNCiogICAgIDEsMSwxLDEsMSwgMHgxZg0KKiAgICAgMSwxLDEsMSwx
LCAweDFmDQoqICAgICAwLDEsMSwxLDAsIDB4MGUNCiogICAgIDAsMCwxLDAsMCwgMHgwNA0KKiAg
ICAgMCwwLDAsMCwwLCAweDAwIC8vIGZpbGxlZCBjaXJjbGUNCiovDQoNCi8qIEp1c3QgY29uZmln
dXJlIHRoZSBJQ09OIGF0IHN0YXJ0dXAgKi8NCnN0YXRpYyBpbnQgTVRCMTM0X2luaXRfaWNvbihE
cml2ZXIgKmRydnRoaXMpDQp7DQoJY2hhciBpY29uc1sxMl1bOF0gPQl7DQogICAgICAgICAgICB7
IDB4MWYsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MWIsIDB4MWYgfSwJLyogRW1w
dHkgSGVhcnQgKi8NCiAgICAgICAgICAgIHsgMHgxZiwgMHgxNSwgMHgwYSwgMHgwZSwgMHgwZSwg
MHgxNSwgMHgxYiwgMHgxZiB9LAkvKiBGaWxsZWQgSGVhcnQgKi8NCiAgICAgICAgICAgIHsgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSB9LAkvKiBFbGxpcHNp
cyAqLw0KICAgICAgICAgICAgeyAweDEwLCAweDM4LCAweDU0LCAweDEwLCAweDEwLCAweDEwLCAw
eDEwLCAweDAwIH0sCS8qIGFycm93IHVwICovDQogICAgICAgICAgICB7IDB4MTAsIDB4MTAsIDB4
MTAsIDB4MTAsIDB4NTQsIDB4MzgsIDB4MTAsIDB4MDAgfSwJLyogYXJyb3cgZG93biAqLw0KICAg
ICAgICAgICAgeyAweDEwLCAweDE4LCAweDFjLCAweDFlLCAweDFjLCAweDE4LCAweDEwLCAweDAw
IH0sCS8qIHJpZ2h0IGFycm93LCBmaWxsZWQgKi8NCiAgICAgICAgICAgIHsgMHgwMiwgMHgwNiwg
MHgwZSwgMHgxZSwgMHgwZSwgMHgwNiwgMHgwMiwgMHgwMCB9LAkvKiBsZWZ0IGFycm93LCBmaWxs
ZWQgKi8NCiAgICAgICAgICAgIHsgMHgwMCwgMHgwNCwgMHgwYSwgMHgxMSwgMHgxMSwgMHgwYSwg
MHgwNCwgMHgwMCB9LAkvKiBjaXJjbGUgKi8NCiAgICAgICAgICAgIHsgMHgwMCwgMHgxZiwgMHgx
ZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgwMCB9LAkvKiBmaWxsZWQgYmxvY2sgKi8NCiAg
ICAgICAgICAgIHsgMHgwNCwgMHgwNCwgMHgxZCwgMHgxNiwgMHgxNSwgMHgxMSwgMHgxZiwgMHgw
MCB9LAkvKiBjaGVja2JveCBvbiAqLw0KICAgICAgICAgICAgeyAweDAwLCAweDAwLCAweDFmLCAw
eDExLCAweDExLCAweDExLCAweDFmLCAweDAwIH0sCS8qIGNoZWNrYm94IG9mZiAqLw0KICAgICAg
ICAgICAgeyAweDAwLCAweDAwLCAweDFmLCAweDE1LCAweDFiLCAweDE1LCAweDFmLCAweDAwIH0J
LyogY2hlY2tib3ggZ3JheSAqLw0KICAgIH07DQoNCiAgICAvLyAtIG9ubHkgaGF2ZSA4IGljb25z
IHN1cHBvcnRlZCBpbiB0b3RhbC4NCiAgICBNVEIxMzRfc2V0X2NoYXIoIGRydnRoaXMsIDAsIGlj
b25zWzBdKTsgIC8vIGVtcHR5IGhlYXJ0DQogICAgTVRCMTM0X3NldF9jaGFyKCBkcnZ0aGlzLCAx
LCBpY29uc1sxXSk7ICAvLyBmaWxsZWQgaGVhcnQNCiAgICBNVEIxMzRfc2V0X2NoYXIoIGRydnRo
aXMsIDIsIGljb25zWzhdKTsgIC8vIGZpbGxlZCBibG9jaw0KICAgIE1UQjEzNF9zZXRfY2hhcigg
ZHJ2dGhpcywgMywgaWNvbnNbM10pOyAgLy8gYXJyb3cgdXANCiAgICBNVEIxMzRfc2V0X2NoYXIo
IGRydnRoaXMsIDQsIGljb25zWzRdKTsgIC8vIGFycm93IGRvd24NCiAgICBNVEIxMzRfc2V0X2No
YXIoIGRydnRoaXMsIDUsIGljb25zWzldKTsgIC8vIGNoZWNrYm94IG9uDQogICAgTVRCMTM0X3Nl
dF9jaGFyKCBkcnZ0aGlzLCA2LCBpY29uc1sxMF0pOyAvLyBjaGVja2JveCBvZmYNCiAgICBNVEIx
MzRfc2V0X2NoYXIoIGRydnRoaXMsIDcsIGljb25zWzExXSk7IC8vIGNoZWNrYm94IGdyYXkNCg0K
ICAgIHJldHVybiAwOw0KfQ0KDQoNCi8qDQogKiBJY29uIHNldHRpbmcgaXMgc2VwYXJhdGVkIGZy
b20gdGhpcyBydW4gdGltZSByb3V0aW5lIGZvciBlZmZpZW5jeSBhbmQNCiAqIGVycm9yIGR1ZSB0
byBtaXhlZCBjb21tYW5kcyBhbmQgZGF0YSB0byBMQ0QgZGV2aWNlIHRoYXQgY2F1c2VkDQogKiBL
RVlQUkVTUyByZWFkIHByb2JsZW1zLg0KICovDQppbnQgTVRCMTM0X2ljb24oIERyaXZlciAqZHJ2
dGhpcywgaW50IHdoaWNoLCBpbnQgZGVzdCwgaW50IGljb24gKQ0Kew0KICAgIHJlcG9ydCAoUlBU
X0RFQlVHLCAiTVRCMTM0X2ljb246IGNhbGxlZDogeCglZCksIHkoJWQpLCBpY29uKCVkKVxuIiwg
ZGVzdCwgd2hpY2gsIGljb24pOw0KICAgIGlmICggY3VzdG9tID09IGJpZ24gKQ0KICAgICAgICBj
dXN0b20gPSBiZWF0OwkJCS8qIHdoYXQgdGhlIGhlbGwgaXMgdGhhdCA/IT8gKi8NCiAgICBlbHNl
DQogICAgICAgIGN1c3RvbSA9IGljb247DQoNCiAgICAvKiB3ZSBoYXZlIGxpbWl0ZWQgSUNPTlMg
c3VwcG9ydGVkLCB0aGVyZWZvcmUgb25seSB0aG9zZSBuZWNlc3NhcnkgKi8NCiAgICBzd2l0Y2gg
KGljb24pIHsNCg0KICAgICAgICBjYXNlIElDT05fQkxPQ0tfRklMTEVEOiANCiAgICAgICAgICAg
IE1UQjEzNF9jaHIoIGRydnRoaXMsIHdoaWNoLCBkZXN0LCAyKTsNCiAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICBjYXNlIElDT05fSEVBUlRfT1BFTjoNCiAgICAgICAgICAgIE1UQjEzNF9jaHIo
IGRydnRoaXMsIHdoaWNoLCBkZXN0LCAwKTsNCiAgICAgICAgICAgIGJyZWFrOw0KIAkJY2FzZSBJ
Q09OX0hFQVJUX0ZJTExFRDoNCiAgICAgICAgICAgIE1UQjEzNF9jaHIoIGRydnRoaXMsIHdoaWNo
LCBkZXN0LCAxKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIElDT05fQ0hFQ0tC
T1hfT0ZGOg0KICAgICAgICAgICAgTVRCMTM0X2NociggZHJ2dGhpcywgd2hpY2gsIGRlc3QsIDYp
Ow0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgSUNPTl9DSEVDS0JPWF9PTjoNCiAg
ICAgICAgICAgIE1UQjEzNF9jaHIoIGRydnRoaXMsIHdoaWNoLCBkZXN0LCA1KTsNCiAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICBjYXNlIElDT05fQ0hFQ0tCT1hfR1JBWToNCiAgICAgICAgICAg
IE1UQjEzNF9jaHIoIGRydnRoaXMsIHdoaWNoLCBkZXN0LCA3KTsNCiAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICBjYXNlIElDT05fQVJST1dfVVA6DQogICAgICAgICAgICBNVEIxMzRfY2hyKCBk
cnZ0aGlzLCB3aGljaCwgZGVzdCwgMyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2Fz
ZSBJQ09OX0FSUk9XX0RPV046DQogICAgICAgICAgICBNVEIxMzRfY2hyKCBkcnZ0aGlzLCB3aGlj
aCwgZGVzdCwgNCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAg
ICAgICAgIHJldHVybiAtMTsNCiAgICB9DQoNCiAgICByZXR1cm4gMDsNCn0NCg0KDQoNCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKg0KKiBzY2FuIHRoZSBrZXlwYWQgDQoqLw0KY2hhciBNVEIxMzRfc2NhbmtleXBh
ZCggRHJpdmVyICpkcnZ0aGlzICkNCnsNCglQcml2YXRlRGF0YSAqTVRCMTM0ID0gKFByaXZhdGVE
YXRhICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsNCgl1bnNpZ25lZCBjaGFyCWJ1ZlsyNTZdOw0K
CXVuc2lnbmVkIGludCBpOw0KCWNoYXIga2V5ID0gMDsNCg0KCU1UQjEzNCA9IE1UQjEzNDsNCgli
dWZbMF0gPSAwLCBidWZbMV0gPSAwOw0KCQ0KCWlmIChNVEIxMzRfc2VuZENvbW1hbmQoIFJFQURL
RVkgKSAhPSAwKSB7IA0KCSAgICByZXBvcnQgKFJQVF9ERUJVRywgIk1UQjEzNF9zY2Fua2V5cGFk
OiBzZW5kIFJFQURLRVkgZmFpbGVkXG4iKTsNCgkJcmV0dXJuIDA7DQoJfQ0KCXJlcG9ydCAoUlBU
X0RFQlVHLCAiTVRCMTM0X3NjYW5rZXlwYWQ6IHNlbmQgUkVBREtFWSBTVUNDRUVEIVxuIik7DQoJ
aWYgKCAoaSA9IHJlYWQoIGZkLCBidWYsIDI1NSApKSA8IDAgKQl7DQoJICAgIHJlcG9ydCAoUlBU
X0RFQlVHLCAiTVRCMTM0X3NjYW5rZXlwYWQ6IFJFQURLRVkgcmVzcG9uc2UgZmFpbGVkOiAlZFxu
IiwgaSk7DQoJCWlmICggZXJybm8gIT0gRUFHQUlOICkJew0KCQkJZnByaW50Ziggc3RkZXJyLCAi
TVRCMTM0X2dldGtleTogcmVhZCBmYWlsZWQgJWQsICglcylcbiIsIGVycm5vLCBzdHJlcnJvcigg
ZXJybm8gKSk7DQoJCQlyZXR1cm4oIDAgKTsNCgkJfQ0KCX0gZWxzZQl7DQoJICAgIHJlcG9ydCAo
UlBUX0RFQlVHLCAiTVRCMTM0X3NjYW5fa2V5cGFkOiBSRUFES0VZIFJFU1AgOmxlbj0gJWQsIGJ1
ZlswXT0lZCwgYnVmWzFdPSVkXG4iLCANCgkJICAgIGksIGJ1ZlswXSwgYnVmWzFdKTsNCgkJaWYg
KCBidWZbMF0gPT0gSEVBREVSX0NPREUgKQl7DQoJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGtl
eWNvZGVzKS9zaXplb2YoaW50KTsgaSsrKQ0KCQkJCWlmIChidWZbMV0gPT0ga2V5Y29kZXNbaV0p
DQoJCQkJew0KCQkJCQlrZXkgPSBpKzE7IC8vIDEgPDwgaTsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0K
CQl9DQoJfQ0KCWlmIChrZXkpDQoJICAgIHJlcG9ydCAoUlBUX0RFQlVHLCAiTVRCMTM0X3NjYW5f
a2V5cGFkOiByZXR1cm5pbmc6ICglZClcbiIsIGtleSk7DQoJcmV0dXJuKCBrZXkgKTsNCn0NCg0K
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqDQoqIFJlYWQgdGhlIGRpc3BsYXkga2V5Ym9hcmQgDQoqLw0KY2hhciAq
DQpNVEIxMzRfZ2V0X2tleSggRHJpdmVyICpkcnZ0aGlzICkNCnsNCglQcml2YXRlRGF0YSAqTVRC
MTM0ID0gKFByaXZhdGVEYXRhICopIGRydnRoaXMtPnByaXZhdGVfZGF0YTsNCgl1bnNpZ25lZCBj
aGFyIHNjYW5jb2RlOw0KCWNoYXIgKiBrZXlzdHIgPSBOVUxMOw0KCXN0cnVjdCB0aW1ldmFsIGN1
cnJfdGltZSwgdGltZV9kaWZmOw0KDQoJaWYoICEgTVRCMTM0LT5oYXZlX2tleXBhZCApIHJldHVy
biBOVUxMOw0KDQoJZ2V0dGltZW9mZGF5KCZjdXJyX3RpbWUsTlVMTCk7DQoNCglzY2FuY29kZSA9
IE1UQjEzNF9zY2Fua2V5cGFkKGRydnRoaXMpOw0KCWlmKCBzY2FuY29kZSApIHsNCgkJa2V5c3Ry
ID0gTVRCMTM0LT5rZXlNYXBEaXJlY3Rbc2NhbmNvZGUgLSAxXTsNCgl9DQoNCglpZigga2V5c3Ry
ICE9IE5VTEwgKSB7DQoJCWlmIChrZXlzdHIgPT0gTVRCMTM0LT5wcmVzc2VkX2tleSkgew0KCQkJ
dGltZXJzdWIgKCZjdXJyX3RpbWUsICYoTVRCMTM0LT5wcmVzc2VkX2tleV90aW1lKSwgJnRpbWVf
ZGlmZik7DQoJCQlpZiAoKCh0aW1lX2RpZmYudHZfdXNlYyAvIDEwMDAgKyB0aW1lX2RpZmYudHZf
c2VjICogMTAwMCkgLSBLRVlQQURfQVVUT1JFUEVBVF9ERUxBWSkgDQoJCQkgICAgPCAxMDAwICog
TVRCMTM0LT5wcmVzc2VkX2tleV9yZXBldGl0aW9ucyAvIEtFWVBBRF9BVVRPUkVQRUFUX0ZSRVEg
KSB7DQoJCQkJLy8gVGhlIGtleSBpcyBhbHJlYWR5IHByZXNzZWQgcXVpdGUgc29tZSB0aW1lDQoJ
CQkJLy8gYnV0IGl0J3Mgbm90IHlldCB0aW1lIHRvIHJldHVybiBhIHJlcGVhdGVkIGtleXByZXNz
DQoJCQkJcmV0dXJuIE5VTEw7DQoJCQl9DQoJCQkvLyBPdGhlcndpc2UgYSBrZXlwcmVzcyB3aWxs
IGJlIHJldHVybmVkDQoJCQlNVEIxMzQtPnByZXNzZWRfa2V5X3JlcGV0aXRpb25zICsrOw0KCQl9
DQoJCWVsc2Ugew0KCQkJLy8gSXQncyBhIG5ldyBrZXlwcmVzcw0KCQkJTVRCMTM0LT5wcmVzc2Vk
X2tleV90aW1lID0gY3Vycl90aW1lOw0KCQkJTVRCMTM0LT5wcmVzc2VkX2tleV9yZXBldGl0aW9u
cyA9IDA7DQoJCX0NCgl9DQoNCgkvLyBTdG9yZSB0aGUga2V5IGZvciB0aGUgbmV4dCByb3VuZA0K
CU1UQjEzNC0+cHJlc3NlZF9rZXkgPSBrZXlzdHI7DQoNCglpZiAoa2V5c3RyKQ0KCQlyZXBvcnQg
KFJQVF9ERUJVRywgIk1UQjEzNF9nZXRfa2V5OiByZXR1cm5pbmc6ICglcylcbiIsIGtleXN0cik7
DQoJcmV0dXJuIGtleXN0cjsNCn0NCg0KLyoNCiAqIGdldGlubyAtIG5vdCBpbXBsZW1lbXRlZCwg
dGhlcmUgc2VlbXMgdG8gYmUgbm8gc3VwcG9ydCBmb3IgaXQNCiAqLw0K

------_=_NextPart_001_01C79D8B.4EB89FCF
Content-Type: application/octet-stream;
	name="mtb134.h"
Content-Transfer-Encoding: base64
Content-Description: mtb134.h
Content-Disposition: attachment;
	filename="mtb134.h"

I2lmbmRlZiBNVEIxMzRfSA0KI2RlZmluZSBNVEIxMzRfSA0KDQojaWZuZGVmIExQVFBPUlQNCiNk
ZWZpbmUgTFBUUE9SVCAgICAgICAgMHgzNzgNCiNlbmRpZg0KDQojZGVmaW5lIFNPSAkJMHgyOAkv
KiBzdGFydCBvZiBoZXggKi8NCiNkZWZpbmUJRU9ICQkweDM3CS8qIGVuZCBvZiBoZXggKi8NCiNk
ZWZpbmUgQ0xFQVIJCTB4MDEJLyogY2xlYXIgKi8NCg0KI2RlZmluZSBIT01FQ1VSU09SCTB4MDIJ
LyogaG9tZSAqLw0KDQojZGVmaW5lIFJFQURLRVkJCTB4MDYJLyogcmVhZCBrZXkgKi8NCiNkZWZp
bmUgRU5UUllNT0RFICAgMHgwNA0KDQojZGVmaW5lIEVfTU9WRVJJR0hUCTB4MTQJLyogcmlnaHQg
Ki8NCiNkZWZpbmUgRV9NT1ZFTEVGVAkweDEwCS8qIGxlZnQgKi8NCiNkZWZpbmUgRURHRVNDUk9M
TCAgMHgwMQ0KI2RlZmluZSBOT1NDUk9MTCAgICAweDAwDQoNCiNkZWZpbmUgT05PRkZDVFJMICAg
MHgwOA0KI2RlZmluZSBESVNQT04gICAgICAweDBDCS8qaGlkZSBjdXJzb3IgJiBkaXNwbGF5IGNo
YXJzICovDQoNCiNkZWZpbmUgRElTUE9GRiAgICAgMHgwMA0KI2RlZmluZSBDVVJTT1JPTiAgICAw
eDAyDQojZGVmaW5lIENVUlNPUk9GRiAgIDB4MDANCiNkZWZpbmUgQ1VSU09SQkxJTksgMHgwRA0K
I2RlZmluZSBDVVJTT1JOT0JMSU5LIDB4MDANCg0KI2RlZmluZSBDVVJTT1JTSElGVCAweDEwDQoj
ZGVmaW5lIFNDUk9MTERJU1AgIDB4MDgNCiNkZWZpbmUgTU9WRUNVUlNPUiAgMHgwMA0KI2RlZmlu
ZSBNT1ZFUklHSFQgICAweDA0DQojZGVmaW5lIE1PVkVMRUZUICAgIDB4MDANCg0KI2RlZmluZSBG
VU5DU0VUICAgICAweDIwDQojZGVmaW5lIElGXzhCSVQgICAgIDB4MTANCiNkZWZpbmUgSUZfNEJJ
VCAgICAgMHgwMA0KI2RlZmluZSBUV09MSU5FICAgICAweDA4DQojZGVmaW5lIE9ORUxJTkUgICAg
IDB4MDANCiNkZWZpbmUgTEFSR0VDSEFSICAgMHgwNAkJICAvKiA1eDExIGNoYXJhY3RlcnMgKi8N
CiNkZWZpbmUgU01BTExDSEFSICAgMHgwMAkJICAvKiA1eDggY2hhcmFjdGVycyAqLw0KDQojZGVm
aW5lIFNFVENIQVIgICAgIDB4NDANCg0KI2RlZmluZSBQT1NJVElPTiAgICAweDgwDQoNCiNkZWZp
bmUJSEVBREVSX0NPREUJMHhGRA0KDQojZGVmaW5lIExDRF9LRVlfRVNDCTB4NEUNCiNkZWZpbmUg
TENEX0tFWV9FTlRFUgkweDRCDQojZGVmaW5lIExDRF9LRVlfVVAJMHg0RA0KI2RlZmluZSBMQ0Rf
S0VZX0RPV04JMHg0Nw0KDQppbnQgTVRCMTM0X2luaXQoIERyaXZlciAqZHJpdmVyLCBjaGFyICpk
ZXZpY2UgKTsNCg0Kdm9pZCBNVEIxMzRfY2xlYXIoIERyaXZlciAqICk7DQp2b2lkIE1UQjEzNF9z
dHJpbmcoIERyaXZlciAqLCBpbnQgeCwgaW50IHksIGNoYXIgc3RyaW5nW10gKTsNCnZvaWQgTVRC
MTM0X2NociggRHJpdmVyICosaW50IHgsIGludCB5LCBjaGFyIGMgKSA7DQp2b2lkIE1UQjEzNF92
YmFyKCBEcml2ZXIgKixpbnQgeCwgaW50IHksIGludCBsZW4sIGludCBwcm9taWxsZSwgaW50IG9w
dGlvbnMgKTsNCnZvaWQgTVRCMTM0X2hiYXIoIERyaXZlciAqLGludCB4LCBpbnQgeSwgaW50IGxl
biwgaW50IHByb21pbGxlLCBpbnQgb3B0aW9ucyApOw0KDQovKiBOb3QgaW1wbGVtZW50ZWQgYXMg
SSBkb24ndCB1bmRlcnN0YW4gd2hhdCB0aGV5IGFyZSANCnZvaWQgTVRCMTM0X2luaXRfbnVtKCk7
DQp2b2lkIE1UQjEzNF9udW0oIGludCB4LCBpbnQgbnVtICk7DQoqLw0KDQp2b2lkIE1UQjEzNF9j
bG9zZSggRHJpdmVyICogKTsNCnZvaWQgTVRCMTM0X2ZsdXNoKCBEcml2ZXIgKiApOw0KDQovKiBO
b3QgaW1wbGVtZW50ZWQsIGRvZXNuJ3Qgc2VlbSBuZWNlc3NhcnkNCnZvaWQgTVRCMTM0X2ZsdXNo
X2JveCggaW50IGxmdCwgaW50IHRvcCwgaW50IHJndCwgaW50IGJvdCApOw0KKi8NCi8qIE5vdCBp
bXBsZW1lbnRlZCBhcyB0aGV5IHNlZW0gbm90IHRvIGJlIGF2YWlsYWJsZQ0Kdm9pZCBNVEIxMzRf
Y29udHJhc3QoIGludCBjb250cmFzdCApOw0Kdm9pZCBNVEIxMzRfYmFja2xpZ2h0KCBpbnQgb24g
KTsNCiovDQoNCi8qIE5vdCBpbXBsZW1ldGVkLiBUaGUgTENEIGJsaW5rcyBiYWRseSBpZiB5b3Ug
dXNlIGl0DQp2b2lkIE1UQjEzNF9vdXRwdXQoIGludCBvbiApOw0KKi8NCg0Kdm9pZCBNVEIxMzRf
c2V0X2NoYXIoIERyaXZlciAqLCBpbnQgbiwgY2hhciAqZGF0ICk7DQppbnQgTVRCMTM0X2ljb24o
IERyaXZlciAqLCBpbnQgd2hpY2gsIGludCBkZXN0ICwgaW50IGljb24pOw0Kdm9pZCBNVEIxMzRf
aW5pdF92YmFyKCBEcml2ZXIgKik7DQp2b2lkIE1UQjEzNF9pbml0X2hiYXIoIERyaXZlciAqKTsN
CnZvaWQgTVRCMTM0X2RyYXdfZnJhbWUoIERyaXZlciAqLCBjaGFyICpkYXQgKTsNCmNoYXIgKk1U
QjEzNF9nZXRfa2V5KERyaXZlciAqICApOw0KDQovLyBNYXhpbXVtIHNpemVzIG9mIHRoZSBrZXlw
YWQNCi8vIERPIE5PVCBDSEFOR0UgVEhFU0UgMiBWQUxVRVMsIHVubGVzcyB5b3UgY2hhbmdlIHRo
ZSBmdW5jdGlvbnMgdG9vDQojZGVmaW5lIEtFWVBBRF9NQVhYIDUNCiNkZWZpbmUgS0VZUEFEX01B
WFkgMTENCg0KdHlwZWRlZiBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGVfZGF0YSB7DQoNCgl1bnNpZ25l
ZCBpbnQgcG9ydDsNCg0KCWludCBmZDsgLyogZm9yIHBpY2FubGNkIGNvbm5lY3Rpb24gdHlwZSAq
Lw0KDQoJaW50IHdpZHRoLCBoZWlnaHQ7DQoJaW50IGNlbGx3aWR0aCwgY2VsbGhlaWdodDsNCg0K
CS8vIFRoZSBmcmFtZWJ1ZmZlcg0KCWNoYXIgKmZyYW1lYnVmOw0KDQoJLy8gRm9yIGluY3JlbWVu
dGFsIHVwZGF0ZXMgc3RvcmUgbGFzdCBsY2QgY29udGVudHMNCgljaGFyICpsY2RfY29udGVudHM7
DQoNCgkvLyBUaGUgZGVmaW5lYWJsZSBjaGFyYWN0ZXJzDQoJY2hhciAqY2NfYnVmOw0KCWNoYXIg
KmNjX2RpcnR5Ow0KDQoJLy8gc3Bhbkxpc3RbbGluZSBudW1iZXJdID0gZGlzcGxheSBsaW5lIG51
bWJlciBpcyBpbg0KCWludCAqc3Bhbkxpc3Q7DQoJaW50IG51bUxpbmVzOw0KDQoJLy8gZGlzcFZP
ZmZzZXQgaXMgYSBjdW11bGF0aXZlIHNpemVkIGFycmF5IG9mIGxpbmUgbnVtYmVycyBmb3IgZWFj
aCBkaXNwbGF5Lg0KCS8vIHVzZSB0aGlzIHRvIGRldGVybWluZSB0aGUgdmVydGljYWwgcG9zaXRp
b25pbmcgb24gYSBnaXZlbiBkaXNwbGF5DQoJaW50ICpkaXNwVk9mZnNldDsNCglpbnQgbnVtRGlz
cGxheXM7DQoNCgkvLyBkaXNwU2l6ZXMgaXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgZWFjaCBkaXNw
bGF5LiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQ0KCS8vIGlucHV0IHNwYW4gbGlzdCBidXQgaXMg
a2VwdCB0byBzYXZlIHNvbWUgY3B1IGN5Y2xlcy4NCglpbnQgKmRpc3BTaXplczsNCg0KCS8vIEtl
eXBhZCwgYmFja2xpZ2h0IGV4dGVuZGVkIGludGVyZmFjZSBhbmQgZGVsYXkgb3B0aW9ucw0KCWNo
YXIgaGF2ZV9rZXlwYWQ7CSAvLyBvZmYgYnkgZGVmYXVsdA0KCWNoYXIgaGF2ZV9iYWNrbGlnaHQ7
IC8vIG9mZiBieSBkZWZhdWx0DQoJY2hhciBleHRJRjsJCSAvLyBvZmYgYnkgZGVmYXVsdA0KCWNo
YXIgaGF2ZV9vdXRwdXQ7CSAvLyBoYXZlIGV4dHJhIG91dHB1dCBwb3J0IChvZmYgYnkgZGVmYXVs
dCkNCglpbnQgZGVsYXlNdWx0OwkgLy8gRGVsYXkgbXVsdGlwbGllciBmb3Igc2xvdyBkaXNwbGF5
cw0KCWNoYXIgZGVsYXlCdXM7CSAvLyBEZWxheSBpZiB0aGUgY29tcHV0ZXIgY2FuIHNlbmQgZGF0
YSB0b28gZmFzdCBvdmVyDQoJCQkJIC8vIGl0cyBidXMgdG8gTFBUIHBvcnQNCg0KCS8vIGtleU1h
cERpcmVjdCBjb250YWlucyBhbiBhcnJheSBvZiB0aGUgYXNjaWktY29kZXMgdGhhdCBzaG91bGQg
YmUgZ2VuZXJhdGVkDQoJLy8gd2hlbiBhIGRpcmVjdGx5IGNvbm5lY3RlZCBrZXkgaXMgcHJlc3Nl
ZCAobm90IGluIG1hdHJpeCkuDQoJY2hhciAqa2V5TWFwRGlyZWN0W0tFWVBBRF9NQVhYXTsNCg0K
CS8vIGtleU1hcE1hdHJpeCBjb250cmFpbnMgYW4gYXJyYXkgd2l0aCBhcnJheXMgb2YgdGhlIGFz
Y2lpLWNvZGVzIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZA0KCS8vIHdoZW4gYSBrZXkgaW4gdGhl
IG1hdHJpeCBpcyBwcmVzc2VkLg0KCWNoYXIgKmtleU1hcE1hdHJpeFtLRVlQQURfTUFYWV1bS0VZ
UEFEX01BWFhdOw0KDQoJY2hhciAqcHJlc3NlZF9rZXk7DQoJaW50IHByZXNzZWRfa2V5X3JlcGV0
aXRpb25zOw0KCXN0cnVjdCB0aW1ldmFsIHByZXNzZWRfa2V5X3RpbWU7DQoNCglpbnQgc3R1Y2tp
bnB1dHM7DQoNCglpbnQgYmFja2xpZ2h0X2JpdDsNCg0KCWludCBvdXRwdXRfc3RhdGU7CS8vIHdo
YXQgd2FzIG1vc3QgcmVjZW50bHkgb3V0cHV0IHRvIHRoZSBvdXRwdXQgcG9ydA0KDQoJaW50IGNj
bW9kZTsNCg0KfSBQcml2YXRlRGF0YTsNCg0KZXh0ZXJuIFByaXZhdGVEYXRhICpNVEIxMzQ7DQoj
ZW5kaWYNCg==

------_=_NextPart_001_01C79D8B.4EB89FCF--