Re: Getting IOCTL's into VFS File System Drivers

Jeff V. Merkey (jmerkey@timpanogas.com)
Wed, 10 Nov 1999 16:36:47 -0700


This is a multi-part message in MIME format.
--------------CFD2F6169F1909DAD2C42AF9
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

All,

Here's the FS Control Dispatcher for the NT Version of NWFS on Windows
2000. You will note that there is an IRP for VERIFY_VOLUME. This is
the code that actually recovers failing file systems (like FSCK on
Linux). Since this interface not well documented, it's no surprise that
Michael doesn't know about it.

Please look over the attached.

Jeff

Michael Nelson wrote:
>
> > If NT really does what you describe... Well, small wonder that it's so
> > bloated.
>
> As far as I know, Chkdsk, the FS-specific checking DLLs, etc... are all
> user mode code. I don't know what mechanism Jeff is referring to re: auto
> invoking chkdsk on volume mounts, so I can't say how that's accomplished
> (probably makes a callback to user mode to invoke the utilities).
>
> -mike
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.rutgers.edu
> Please read the FAQ at http://www.tux.org/lkml/
--------------CFD2F6169F1909DAD2C42AF9
Content-Type: application/x-unknown-content-type-cfile;
name="Fsctrl.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="Fsctrl.c"

LyorKw0KDQpDb3B5cmlnaHQgKGMpIDE5ODktMTk5OSBUaW1wYW5vZ2FzIFJlc2VhcmNoIEdy
b3VwLCBJbmMuDQoNCk1vZHVsZSBOYW1lOg0KDQogICAgRnNDdHJsLmMNCg0KQWJzdHJhY3Q6
DQoNCiAgICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBGaWxlIFN5c3RlbSBDb250cm9s
IHJvdXRpbmVzIGZvciBOd2ZzIGNhbGxlZA0KICAgIGJ5IHRoZSBGc2QvRnNwIGRpc3BhdGNo
IGRyaXZlcnMuDQoNCkF1dGhvcnM6DQoNCiAgICBKZWZmIE1lcmtleSAgKGptZXJrZXlAdGlt
cGFub2dhcy5jb20pDQoNCi0tKi8NCg0KI2luY2x1ZGUgIk53UHJvY3MuaCINCg0KLy8NCi8v
ICBUaGUgQnVnIGNoZWNrIGZpbGUgaWQgZm9yIHRoaXMgbW9kdWxlDQovLw0KDQojZGVmaW5l
IEJ1Z0NoZWNrRmlsZUlkICAgICAgICAgICAgICAgICAgIChOV0ZTX0JVR19DSEVDS19GU0NU
UkwpDQoNCi8vDQovLyAgTG9jYWwgY29uc3RhbnRzDQovLw0KDQpCT09MRUFOIE53RGlzYWJs
ZSA9IFRSVUU7DQoNCi8vDQovLyAgTG9jYWwgc3VwcG9ydCByb3V0aW5lcw0KLy8NCg0KTlRT
VEFUVVMNCk53VXNlckZzY3RsICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29udGV4dCwN
CiAgICBJTiBQSVJQIElycA0KICAgICk7DQoNCk5UU1RBVFVTDQpOd01vdW50Vm9sdW1lICgN
CiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29udGV4dCwNCiAgICBJTiBQSVJQIElycA0KICAg
ICk7DQoNCk5UU1RBVFVTDQpOd1ZlcmlmeVZvbHVtZSAoDQogICAgSU4gUElSUF9DT05URVhU
IElycENvbnRleHQsDQogICAgSU4gUElSUCBJcnANCiAgICApOw0KDQpOVFNUQVRVUw0KTndP
cGxvY2tSZXF1ZXN0ICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29udGV4dCwNCiAgICBJ
TiBQSVJQIElycA0KICAgICk7DQoNCk5UU1RBVFVTDQpOd0xvY2tWb2x1bWUgKA0KICAgIElO
IFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAgKTsNCg0K
TlRTVEFUVVMNCk53VW5sb2NrVm9sdW1lICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29u
dGV4dCwNCiAgICBJTiBQSVJQIElycA0KICAgICk7DQoNCk5UU1RBVFVTDQpOd0Rpc21vdW50
Vm9sdW1lICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29udGV4dCwNCiAgICBJTiBQSVJQ
IElycA0KICAgICk7DQoNCk5UU1RBVFVTDQpOd0lzVm9sdW1lTW91bnRlZCAoDQogICAgSU4g
UElSUF9DT05URVhUIElycENvbnRleHQsDQogICAgSU4gUElSUCBJcnANCiAgICApOw0KDQpO
VFNUQVRVUw0KTndJc1BhdGhuYW1lVmFsaWQgKA0KICAgIElOIFBJUlBfQ09OVEVYVCBJcnBD
b250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAgKTsNCg0KTlRTVEFUVVMNCk53SW52YWxp
ZGF0ZVZvbHVtZXMgKA0KICAgIElOIFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0LA0KICAgIElO
IFBJUlAgSXJwDQogICAgKTsNCg0KI2lmZGVmIEFMTE9DX1BSQUdNQQ0KI3ByYWdtYSBhbGxv
Y190ZXh0KFBBR0UsIE53Q29tbW9uRnNDb250cm9sKQ0KI3ByYWdtYSBhbGxvY190ZXh0KFBB
R0UsIE53SW52YWxpZGF0ZVZvbHVtZXMpDQojcHJhZ21hIGFsbG9jX3RleHQoUEFHRSwgTndJ
c1BhdGhuYW1lVmFsaWQpDQojcHJhZ21hIGFsbG9jX3RleHQoUEFHRSwgTndJc1ZvbHVtZU1v
dW50ZWQpDQojcHJhZ21hIGFsbG9jX3RleHQoUEFHRSwgTndMb2NrVm9sdW1lKQ0KI3ByYWdt
YSBhbGxvY190ZXh0KFBBR0UsIE53TW91bnRWb2x1bWUpDQojcHJhZ21hIGFsbG9jX3RleHQo
UEFHRSwgTndPcGxvY2tSZXF1ZXN0KQ0KI3ByYWdtYSBhbGxvY190ZXh0KFBBR0UsIE53VW5s
b2NrVm9sdW1lKQ0KI3ByYWdtYSBhbGxvY190ZXh0KFBBR0UsIE53VXNlckZzY3RsKQ0KI3By
YWdtYSBhbGxvY190ZXh0KFBBR0UsIE53VmVyaWZ5Vm9sdW1lKQ0KI2VuZGlmDQoNCgwNCk5U
U1RBVFVTDQpOd0NvbW1vbkZzQ29udHJvbCAoDQogICAgSU4gUElSUF9DT05URVhUIElycENv
bnRleHQsDQogICAgSU4gUElSUCBJcnANCiAgICApDQoNCi8qKysNCg0KUm91dGluZSBEZXNj
cmlwdGlvbjoNCg0KICAgIFRoaXMgaXMgdGhlIGNvbW1vbiByb3V0aW5lIGZvciBkb2luZyBG
aWxlU3lzdGVtIGNvbnRyb2wgb3BlcmF0aW9ucyBjYWxsZWQNCiAgICBieSBib3RoIHRoZSBm
c2QgYW5kIGZzcCB0aHJlYWRzDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVz
IHRoZSBJcnAgdG8gcHJvY2Vzcw0KDQpSZXR1cm4gVmFsdWU6DQoNCiAgICBOVFNUQVRVUyAt
IFRoZSByZXR1cm4gc3RhdHVzIGZvciB0aGUgb3BlcmF0aW9uDQoNCi0tKi8NCg0Kew0KICAg
IE5UU1RBVFVTIFN0YXR1czsNCiAgICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3AgPSBJb0dl
dEN1cnJlbnRJcnBTdGFja0xvY2F0aW9uKCBJcnAgKTsNCg0KICAgIC8vDQogICAgLy8gIEdl
dCBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgSXJwIHN0YWNrIGxvY2F0aW9uDQogICAgLy8N
Cg0KICAgIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbiggSXJwICk7DQoN
CiAgICBQQUdFRF9DT0RFKCk7DQoNCiAgICAvLw0KICAgIC8vICBXZSBrbm93IHRoaXMgaXMg
YSBmaWxlIHN5c3RlbSBjb250cm9sIHNvIHdlJ2xsIGNhc2Ugb24gdGhlDQogICAgLy8gIG1p
bm9yIGZ1bmN0aW9uLCBhbmQgY2FsbCBhIGludGVybmFsIHdvcmtlciByb3V0aW5lIHRvIGNv
bXBsZXRlDQogICAgLy8gIHRoZSBpcnAuDQogICAgLy8NCg0KICAgIHN3aXRjaCAoSXJwU3At
Pk1pbm9yRnVuY3Rpb24pIHsNCg0KICAgIGNhc2UgSVJQX01OX1VTRVJfRlNfUkVRVUVTVDoN
Cg0KICAgICAgICBTdGF0dXMgPSBOd1VzZXJGc2N0bCggSXJwQ29udGV4dCwgSXJwICk7DQog
ICAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBJUlBfTU5fTU9VTlRfVk9MVU1FOg0KDQogICAg
ICAgIFN0YXR1cyA9IE53TW91bnRWb2x1bWUoIElycENvbnRleHQsIElycCApOw0KICAgICAg
ICBicmVhazsNCg0KICAgIGNhc2UgSVJQX01OX1ZFUklGWV9WT0xVTUU6DQoNCiAgICAgICAg
U3RhdHVzID0gTndWZXJpZnlWb2x1bWUoIElycENvbnRleHQsIElycCApOw0KICAgICAgICBi
cmVhazsNCg0KICAgIGRlZmF1bHQ6DQoNCiAgICAgICAgTndDb21wbGV0ZVJlcXVlc3QoIEly
cENvbnRleHQsIElycCwgU1RBVFVTX0lOVkFMSURfREVWSUNFX1JFUVVFU1QgKTsNCiAgICAg
ICAgU3RhdHVzID0gU1RBVFVTX0lOVkFMSURfREVWSUNFX1JFUVVFU1Q7DQogICAgICAgIGJy
ZWFrOw0KICAgIH0NCg0KICAgIHJldHVybiBTdGF0dXM7DQp9DQoNCgwNCi8vDQovLyAgTG9j
YWwgc3VwcG9ydCByb3V0aW5lDQovLw0KDQpOVFNUQVRVUw0KTndVc2VyRnNjdGwgKA0KICAg
IElOIFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAgKQ0K
LyorKw0KDQpSb3V0aW5lIERlc2NyaXB0aW9uOg0KDQogICAgVGhpcyBpcyB0aGUgY29tbW9u
IHJvdXRpbmUgZm9yIGltcGxlbWVudGluZyB0aGUgdXNlcidzIHJlcXVlc3RzIG1hZGUNCiAg
ICB0aHJvdWdoIE50RnNDb250cm9sRmlsZS4NCg0KQXJndW1lbnRzOg0KDQogICAgSXJwIC0g
U3VwcGxpZXMgdGhlIElycCBiZWluZyBwcm9jZXNzZWQNCg0KUmV0dXJuIFZhbHVlOg0KDQog
ICAgTlRTVEFUVVMgLSBUaGUgcmV0dXJuIHN0YXR1cyBmb3IgdGhlIG9wZXJhdGlvbg0KDQot
LSovDQoNCnsNCiAgICBOVFNUQVRVUyBTdGF0dXM7DQogICAgUElPX1NUQUNLX0xPQ0FUSU9O
IElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbiggSXJwICk7DQoNCiAgICBQ
QUdFRF9DT0RFKCk7DQoNCiAgICAvLw0KICAgIC8vICBTcGVjaWFsIGNhc2UgZm9yIHRoZSBt
YWluIGRldmljZSBvYmplY3QuDQogICAgLy8NCg0KICAgIGlmIChJcnBTcC0+RGV2aWNlT2Jq
ZWN0ID09IE53RGF0YS5GaWxlU3lzdGVtRGV2aWNlT2JqZWN0KSB7DQoNCiAgICAgICAgaWYg
KElycFNwLT5QYXJhbWV0ZXJzLkZpbGVTeXN0ZW1Db250cm9sLkZzQ29udHJvbENvZGUgPT0g
RlNDVExfUVVFUllfQUxMX0RJU0tTKSB7DQoNCiAgICAgICAgICAgIHJldHVybiBOd1Byb2Nl
c3NWb2x1bWVMYXlvdXQoIElycENvbnRleHQsIElycCwgSXJwU3AgKTsNCg0KICAgICAgICB9
IGVsc2Ugew0KDQogICAgICAgICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4dCwg
SXJwLCBTVEFUVVNfSU5WQUxJRF9ERVZJQ0VfUkVRVUVTVCk7DQogICAgICAgICAgICByZXR1
cm4gU1RBVFVTX0lOVkFMSURfREVWSUNFX1JFUVVFU1Q7DQogICAgICAgIH0NCiAgICB9DQoN
CiAgICAvLw0KICAgIC8vICBDYXNlIG9uIHRoZSBjb250cm9sIGNvZGUuDQogICAgLy8NCg0K
ICAgIHN3aXRjaCAoIElycFNwLT5QYXJhbWV0ZXJzLkZpbGVTeXN0ZW1Db250cm9sLkZzQ29u
dHJvbENvZGUgKSB7DQoNCiAgICBjYXNlIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzEg
Og0KICAgIGNhc2UgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMiA6DQogICAgY2FzZSBG
U0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyA6DQogICAgY2FzZSBGU0NUTF9PUExPQ0tfQlJF
QUtfQUNLTk9XTEVER0UgOg0KICAgIGNhc2UgRlNDVExfT1BCQVRDSF9BQ0tfQ0xPU0VfUEVO
RElORyA6DQogICAgY2FzZSBGU0NUTF9PUExPQ0tfQlJFQUtfTk9USUZZIDoNCiAgICBjYXNl
IEZTQ1RMX09QTE9DS19CUkVBS19BQ0tfTk9fMiA6DQogICAgY2FzZSBGU0NUTF9SRVFVRVNU
X0ZJTFRFUl9PUExPQ0sgOg0KDQogICAgICAgIFN0YXR1cyA9IE53T3Bsb2NrUmVxdWVzdCgg
SXJwQ29udGV4dCwgSXJwICk7DQogICAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBGU0NUTF9M
T0NLX1ZPTFVNRSA6DQoNCiAgICAgICAgU3RhdHVzID0gTndMb2NrVm9sdW1lKCBJcnBDb250
ZXh0LCBJcnAgKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIEZTQ1RMX1VOTE9DS19W
T0xVTUUgOg0KDQogICAgICAgIFN0YXR1cyA9IE53VW5sb2NrVm9sdW1lKCBJcnBDb250ZXh0
LCBJcnAgKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIEZTQ1RMX0RJU01PVU5UX1ZP
TFVNRSA6DQoNCiAgICAgICAgU3RhdHVzID0gTndEaXNtb3VudFZvbHVtZSggSXJwQ29udGV4
dCwgSXJwICk7DQogICAgICAgIGJyZWFrOw0KDQogICAgY2FzZSBGU0NUTF9JU19WT0xVTUVf
TU9VTlRFRCA6DQoNCiAgICAgICAgU3RhdHVzID0gTndJc1ZvbHVtZU1vdW50ZWQoIElycENv
bnRleHQsIElycCApOw0KICAgICAgICBicmVhazsNCg0KICAgIGNhc2UgRlNDVExfSVNfUEFU
SE5BTUVfVkFMSUQgOg0KDQogICAgICAgIFN0YXR1cyA9IE53SXNQYXRobmFtZVZhbGlkKCBJ
cnBDb250ZXh0LCBJcnAgKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICBjYXNlIEZTQ1RMX0lO
VkFMSURBVEVfVk9MVU1FUyA6DQoNCiAgICAgICAgU3RhdHVzID0gTndJbnZhbGlkYXRlVm9s
dW1lcyggSXJwQ29udGV4dCwgSXJwICk7DQogICAgICAgIGJyZWFrOw0KDQoNCiAgICAvLw0K
ICAgIC8vICBXZSBkb24ndCBzdXBwb3J0IGFueSBvZiB0aGUga25vd24gb3IgdW5rbm93biBy
ZXF1ZXN0cy4NCiAgICAvLw0KDQogICAgZGVmYXVsdDoNCg0KICAgICAgICBOd0NvbXBsZXRl
UmVxdWVzdCggSXJwQ29udGV4dCwgSXJwLCBTVEFUVVNfSU5WQUxJRF9ERVZJQ0VfUkVRVUVT
VCApOw0KICAgICAgICBTdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9ERVZJQ0VfUkVRVUVTVDsN
CiAgICAgICAgYnJlYWs7DQogICAgfQ0KDQogICAgcmV0dXJuIFN0YXR1czsNCn0NCg0KDA0K
Ly8NCi8vICBMb2NhbCBzdXBwb3J0IHJvdXRpbmUNCi8vDQoNCk5UU1RBVFVTDQpOd01vdW50
Vm9sdW1lICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJwQ29udGV4dCwNCiAgICBJTiBQSVJQ
IElycA0KICAgICkNCg0KLyorKw0KDQpSb3V0aW5lIERlc2NyaXB0aW9uOg0KDQogICAgVGhp
cyByb3V0aW5lIHBlcmZvcm1zIHRoZSBtb3VudCB2b2x1bWUgb3BlcmF0aW9uLiAgSXQgaXMg
cmVzcG9uc2libGUgZm9yDQogICAgZWl0aGVyIGNvbXBsZXRpbmcgb2YgZW5xdWV1aW5nIHRo
ZSBpbnB1dCBJcnAuDQoNCiAgICBTaW5jZSBhIHBhcnRpdGlvbiBtYXkgaG9sZCBzZXZlcmFs
IE5ldFdhcmUgdm9sdW1lcywgd2UgbXVjaCBtb3VudCBhbGwNCiAgICB2b2x1bWVzIHJlc2lk
aW5nIG9uIHRoaXMgcGFydGl0aW9uLiAgU2luY2UgYSB2b2x1bWUgY2FuIGFsc28gc3BhbiBz
ZXZlcmFsDQogICAgbG9naWNhbCBkaXNrcyAoaS5lLiBoYXZlIG11bHRpcGxlIHNlZ21lbnRz
LCB3aXRoIG9uZSBzZWdtZW50IHBlciBkaXNrKSwgd2UNCiAgICBtYXkgaGF2ZSB0byBtb3Vu
dCBzZXZlcmFsIGRpc2ssIHdoaWNoIG1heSBsZWFkIHRvIG1vcmUgdm9sdW1lcyBiZWluZw0K
ICAgIG1vdW50ZWQsIGV0Yy4NCg0KICAgIFRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBiZWVuIGNh
bGxlZCBtZWFucyB0aGF0IGlmIHRoaXMgcGFydGl0aW9uIGNvbnRhaW5zIGFueQ0KICAgIE5l
dHdhcmUgdm9sdW1lcyB0aGV5IGhhdmUgbm90IGJlZW4gbW91bnRlZCB5ZXQsIGFuZCBmdXJ0
aGVyIHNpbmNlIHRoZSBJL08NCiAgICBzeXN0ZW0gaXMgaG9sZGluZyBhIGxvY2sgYWJvdmUg
dXMsIHdlIGtub3cgd2UgYXJlIHNlcmlhbGl6ZWQgYW5kIHRodXMgZG8NCiAgICBub3QgaGF2
ZSB0byB3b3JyeSBhYm91dCBhbnlib2R5IGVsc2UgbW91bnRpbmcgdGhlc2Ugdm9sdW1lcy4N
Cg0KICAgIFRoZSBtb3VudCBwcm9jZWVkIGluIHRoZSBmb2xsb3dpbmcgc3RlcHM6DQoNCiAg
ICAtIFdlIHF1ZXJ5IHRoZSBwYXJ0aXRpb24gdHlwZSBmcm9tIHRoZSBwYXJ0aXRpb24gdGFi
bGUuICBPbmx5IGNlcnRhaW4gYXJlDQogICAgdmFsaWQgZm9yIE5ldHdhcmUuDQoNCiAgICAt
IFdlIGNhbGwgTndJc05ldHdhcmVWb2x1bWUoKSwgd2hpY2ggcmV0dXJucyBhbiBlbnVtZXJh
dGVkIHR5cGUuDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJcnAg
dG8gcHJvY2Vzcw0KDQpSZXR1cm4gVmFsdWU6DQoNCiAgICBOVFNUQVRVUyAtIFRoZSByZXR1
cm4gc3RhdHVzIGZvciB0aGUgb3BlcmF0aW9uDQoNCi0tKi8NCg0Kew0KICAgIFBJT19TVEFD
S19MT0NBVElPTiBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oIElycCAp
Ow0KDQogICAgSXJwU3AtPlBhcmFtZXRlcnMuTW91bnRWb2x1bWUuVnBiLT5EZXZpY2VPYmpl
Y3QgPSBOVUxMOw0KDQogICAgTndDb21wbGV0ZVJlcXVlc3QoIElycENvbnRleHQsIElycCwg
U1RBVFVTX1VOUkVDT0dOSVpFRF9WT0xVTUUgKTsNCiAgICByZXR1cm4gU1RBVFVTX1VOUkVD
T0dOSVpFRF9WT0xVTUU7DQp9DQoNCgwNCi8vDQovLyAgTG9jYWwgc3VwcG9ydCByb3V0aW5l
DQovLw0KDQpOVFNUQVRVUw0KTndWZXJpZnlWb2x1bWUgKA0KICAgIElOIFBJUlBfQ09OVEVY
VCBJcnBDb250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAgKQ0KDQovKisrDQoNClJvdXRp
bmUgRGVzY3JpcHRpb246DQoNCiAgICBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIHZlcmlm
eSB2b2x1bWUgb3BlcmF0aW9uLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yDQogICAgZWl0aGVy
IGNvbXBsZXRpbmcgb2YgZW5xdWV1aW5nIHRoZSBpbnB1dCBJcnAuDQoNCkFyZ3VtZW50czoN
Cg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJcnAgdG8gcHJvY2Vzcw0KDQpSZXR1cm4gVmFs
dWU6DQoNCiAgICBOVFNUQVRVUyAtIFRoZSByZXR1cm4gc3RhdHVzIGZvciB0aGUgb3BlcmF0
aW9uDQoNCi0tKi8NCg0Kew0KICAgIFBJT19TVEFDS19MT0NBVElPTiBJcnBTcCA9IElvR2V0
Q3VycmVudElycFN0YWNrTG9jYXRpb24oIElycCApOw0KICAgIFBWUEIgVnBiID0gSXJwU3At
PlBhcmFtZXRlcnMuVmVyaWZ5Vm9sdW1lLlZwYjsNCg0KICAgIC8vDQogICAgLy8gIFdlIGNo
ZWNrIHRoYXQgd2UgYXJlIHRhbGtpbmcgdG8gYSBOd0Rpc2sgZGV2aWNlLg0KICAgIC8vDQoN
CiAgICBBU1NFUlQoIFZwYi0+UmVhbERldmljZS0+RGV2aWNlVHlwZSA9PSBGSUxFX0RFVklD
RV9ESVNLICk7DQogICAgQVNTRVJUKCBGbGFnT24oIElycENvbnRleHQtPkZsYWdzLCBJUlBf
Q09OVEVYVF9GTEFHX1dBSVQgKSk7DQoNCiAgICAvLw0KICAgIC8vICBWZXJpZmllcyBhcmUg
anVzdCBuby1vcGVkIHJpZ2h0IG5vdywgaS5lIHNldCB0aGUgZmxhZyBhbmQgc2F5IG5vLg0K
ICAgIC8vDQoNCiAgICBDbGVhckZsYWcoIFZwYi0+UmVhbERldmljZS0+RmxhZ3MsIERPX1ZF
UklGWV9WT0xVTUUgKTsNCg0KICAgIE53Q29tcGxldGVSZXF1ZXN0KCBJcnBDb250ZXh0LCBJ
cnAsIFNUQVRVU19TVUNDRVNTICk7DQogICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOw0KfQ0K
DQoMDQovLw0KLy8gIExvY2FsIHN1cHBvcnQgcm91dGluZQ0KLy8NCg0KTlRTVEFUVVMNCk53
T3Bsb2NrUmVxdWVzdCAoDQogICAgSU4gUElSUF9DT05URVhUIElycENvbnRleHQsDQogICAg
SU4gUElSUCBJcnANCiAgICApDQoNCi8qKysNCg0KUm91dGluZSBEZXNjcmlwdGlvbjoNCg0K
ICAgIFRoaXMgaXMgdGhlIGNvbW1vbiByb3V0aW5lIHRvIGhhbmRsZSBvcGxvY2sgcmVxdWVz
dHMgbWFkZSB2aWEgdGhlDQogICAgTnRGc0NvbnRyb2xGaWxlIGNhbGwuDQoNCkFyZ3VtZW50
czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJcnAgYmVpbmcgcHJvY2Vzc2VkDQoNClJl
dHVybiBWYWx1ZToNCg0KICAgIE5UU1RBVFVTIC0gVGhlIHJldHVybiBzdGF0dXMgZm9yIHRo
ZSBvcGVyYXRpb24NCg0KLS0qLw0KDQp7DQogICAgTlRTVEFUVVMgU3RhdHVzOw0KICAgIFBG
Q0IgRmNiOw0KICAgIFBDQ0IgQ2NiOw0KDQogICAgVUxPTkcgT3Bsb2NrQ291bnQgPSAwOw0K
ICAgIFBJT19TVEFDS19MT0NBVElPTiBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9j
YXRpb24oIElycCApOw0KDQogICAgUEFHRURfQ09ERSgpOw0KDQogICAgLy8NCiAgICAvLyAg
V2Ugb25seSBwZXJtaXQgb3Bsb2NrIHJlcXVlc3RzIG9uIGZpbGVzLg0KICAgIC8vDQoNCiAg
ICBpZiAoTndEZWNvZGVGaWxlT2JqZWN0KCBJcnBDb250ZXh0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElycFNwLT5GaWxlT2JqZWN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZGY2IsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNjYiApICE9IFVz
ZXJGaWxlT3BlbiApIHsNCg0KICAgICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4
dCwgSXJwLCBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIgKTsNCiAgICAgICAgcmV0dXJuIFNU
QVRVU19JTlZBTElEX1BBUkFNRVRFUjsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vICBNYWtl
IHRoaXMgYSB3YWl0YWJsZSBJcnBjb250ZXh0IHNvIHdlIGRvbid0IGZhaWwgdG8gYWNxdWly
ZQ0KICAgIC8vICB0aGUgcmVzb3VyY2VzLg0KICAgIC8vDQoNCiAgICBTZXRGbGFnKCBJcnBD
b250ZXh0LT5GbGFncywgSVJQX0NPTlRFWFRfRkxBR19XQUlUICk7DQogICAgQ2xlYXJGbGFn
KCBJcnBDb250ZXh0LT5GbGFncywgSVJQX0NPTlRFWFRfRkxBR19GT1JDRV9QT1NUICk7DQoN
CiAgICAvLw0KICAgIC8vICBTd2l0Y2ggb24gdGhlIGZ1bmN0aW9uIGNvbnRyb2wgY29kZS4g
IFdlIGdyYWIgdGhlIEZjYiBleGNsdXNpdmVseQ0KICAgIC8vICBmb3Igb3Bsb2NrIHJlcXVl
c3RzLCBzaGFyZWQgZm9yIG9wbG9jayBicmVhayBhY2tub3dsZWRnZW1lbnQuDQogICAgLy8N
Cg0KICAgIHN3aXRjaCAoSXJwU3AtPlBhcmFtZXRlcnMuRmlsZVN5c3RlbUNvbnRyb2wuRnND
b250cm9sQ29kZSkgew0KDQogICAgY2FzZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8x
IDoNCiAgICBjYXNlIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgOg0KICAgIGNhc2Ug
RlNDVExfUkVRVUVTVF9CQVRDSF9PUExPQ0sgOg0KICAgIGNhc2UgRlNDVExfUkVRVUVTVF9G
SUxURVJfT1BMT0NLIDoNCg0KICAgICAgICBOd0FjcXVpcmVGY2JFeGNsdXNpdmUoIElycENv
bnRleHQsIEZjYiwgRkFMU0UgKTsNCg0KICAgICAgICBpZiAoSXJwU3AtPlBhcmFtZXRlcnMu
RmlsZVN5c3RlbUNvbnRyb2wuRnNDb250cm9sQ29kZSA9PSBGU0NUTF9SRVFVRVNUX09QTE9D
S19MRVZFTF8yKSB7DQoNCiAgICAgICAgICAgIGlmIChGY2ItPkZpbGVMb2NrICE9IE5VTEwp
IHsNCg0KICAgICAgICAgICAgICAgIE9wbG9ja0NvdW50ID0gKFVMT05HKSBGc1J0bEFyZVRo
ZXJlQ3VycmVudEZpbGVMb2NrcyggRmNiLT5GaWxlTG9jayApOw0KICAgICAgICAgICAgfQ0K
DQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgIE9wbG9ja0NvdW50ID0gRmNiLT5G
aWxlSGFuZGxlQ291bnQ7DQogICAgICAgIH0NCg0KICAgICAgICBicmVhazsNCg0KICAgIGNh
c2UgRlNDVExfT1BMT0NLX0JSRUFLX0FDS05PV0xFREdFOg0KICAgIGNhc2UgRlNDVExfT1BC
QVRDSF9BQ0tfQ0xPU0VfUEVORElORzoNCiAgICBjYXNlIEZTQ1RMX09QTE9DS19CUkVBS19O
T1RJRlk6DQogICAgY2FzZSBGU0NUTF9PUExPQ0tfQlJFQUtfQUNLX05PXzI6DQoNCiAgICAg
ICAgTndBY3F1aXJlRmNiU2hhcmVkKCBJcnBDb250ZXh0LCBGY2IsIEZBTFNFICk7DQogICAg
ICAgIGJyZWFrOw0KDQogICAgZGVmYXVsdDoNCg0KICAgICAgICBOd0NvbXBsZXRlUmVxdWVz
dCggSXJwQ29udGV4dCwgSXJwLCBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIgKTsNCiAgICAg
ICAgcmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsNCiAgICB9DQoNCiAgICAvLw0K
ICAgIC8vICBVc2UgYSB0cnkgZmluYWxseSB0byBmcmVlIHRoZSBGY2IuDQogICAgLy8NCg0K
ICAgIHRyeSB7DQoNCiAgICAgICAgLy8NCiAgICAgICAgLy8gIFZlcmlmeSB0aGUgRmNiLg0K
ICAgICAgICAvLw0KDQogICAgICAgIE53VmVyaWZ5RmNiT3BlcmF0aW9uKCBJcnBDb250ZXh0
LCBGY2IgKTsNCg0KICAgICAgICAvLw0KICAgICAgICAvLyAgQ2FsbCB0aGUgRnNSdGwgcm91
dGluZSB0byBncmFudC9hY2tub3dsZWRnZSBvcGxvY2suDQogICAgICAgIC8vDQoNCiAgICAg
ICAgU3RhdHVzID0gRnNSdGxPcGxvY2tGc2N0cmwoICZGY2ItPk9wbG9jaywNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElycCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wbG9ja0NvdW50ICk7DQoNCiAgICAgICAgLy8NCiAgICAgICAg
Ly8gIFNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIGlmIEZhc3QgSS9PIGlzIHBvc3NpYmxlDQog
ICAgICAgIC8vDQoNCiAgICAgICAgRmNiLT5Jc0Zhc3RJb1Bvc3NpYmxlID0gTndJc0Zhc3RJ
b1Bvc3NpYmxlKCBGY2IgKTsNCg0KICAgICAgICAvLw0KICAgICAgICAvLyAgVGhlIG9wbG9j
ayBwYWNrYWdlIHdpbGwgY29tcGxldGUgdGhlIElycC4NCiAgICAgICAgLy8NCg0KICAgICAg
ICBJcnAgPSBOVUxMOw0KDQogICAgfSBmaW5hbGx5IHsNCg0KICAgICAgICAvLw0KICAgICAg
ICAvLyAgUmVsZWFzZSBhbGwgb2Ygb3VyIHJlc291cmNlcw0KICAgICAgICAvLw0KDQogICAg
ICAgIE53UmVsZWFzZUZjYiggSXJwQ29udGV4dCwgRmNiICk7DQogICAgfQ0KDQogICAgLy8N
CiAgICAvLyAgQ29tcGxldGUgdGhlIHJlcXVlc3QgaWYgdGhlcmUgd2FzIG5vIGV4Y2VwdGlv
bi4NCiAgICAvLw0KDQogICAgTndDb21wbGV0ZVJlcXVlc3QoIElycENvbnRleHQsIElycCwg
U3RhdHVzICk7DQogICAgcmV0dXJuIFN0YXR1czsNCn0NCg0KDA0KLy8NCi8vICBMb2NhbCBz
dXBwb3J0IHJvdXRpbmUNCi8vDQoNCk5UU1RBVFVTDQpOd0xvY2tWb2x1bWUgKA0KICAgIElO
IFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAgKQ0KDQov
KisrDQoNClJvdXRpbmUgRGVzY3JpcHRpb246DQoNCiAgICBUaGlzIHJvdXRpbmUgcGVyZm9y
bXMgdGhlIGxvY2sgdm9sdW1lIG9wZXJhdGlvbi4gIEl0IGlzIHJlc3BvbnNpYmxlIGZvcg0K
ICAgIGVpdGhlciBjb21wbGV0aW5nIG9mIGVucXVldWluZyB0aGUgaW5wdXQgSXJwLg0KDQpB
cmd1bWVudHM6DQoNCiAgICBJcnAgLSBTdXBwbGllcyB0aGUgSXJwIHRvIHByb2Nlc3MNCg0K
UmV0dXJuIFZhbHVlOg0KDQogICAgTlRTVEFUVVMgLSBUaGUgcmV0dXJuIHN0YXR1cyBmb3Ig
dGhlIG9wZXJhdGlvbg0KDQotLSovDQoNCnsNCiAgICBOVFNUQVRVUyBTdGF0dXM7DQoNCiAg
ICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3AgPSBJb0dldEN1cnJlbnRJcnBTdGFja0xvY2F0
aW9uKCBJcnAgKTsNCg0KICAgIFBWQ0IgVmNiOw0KICAgIFBGQ0IgRmNiOw0KICAgIFBDQ0Ig
Q2NiOw0KDQogICAgUEFHRURfQ09ERSgpOw0KDQogICAgLy8NCiAgICAvLyAgRGVjb2RlIHRo
ZSBmaWxlIG9iamVjdCwgdGhlIG9ubHkgdHlwZSBvZiBvcGVucyB3ZSBhY2NlcHQgYXJlDQog
ICAgLy8gIHVzZXIgdm9sdW1lIG9wZW5zLg0KICAgIC8vDQoNCiAgICBpZiAoTndEZWNvZGVG
aWxlT2JqZWN0KCBJcnBDb250ZXh0LCBJcnBTcC0+RmlsZU9iamVjdCwgJkZjYiwgJkNjYiAp
ICE9IFVzZXJWb2x1bWVPcGVuKSB7DQoNCiAgICAgICAgTndDb21wbGV0ZVJlcXVlc3QoIEly
cENvbnRleHQsIElycCwgU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSICk7DQoNCiAgICAgICAg
cmV0dXJuIFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsNCiAgICB9DQoNCiAgICAvLw0KICAg
IC8vICBBY3F1aXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIFZjYi4NCiAgICAvLw0KDQog
ICAgVmNiID0gRmNiLT5WY2I7DQogICAgTndBY3F1aXJlVmNiRXhjbHVzaXZlKCBJcnBDb250
ZXh0LCBWY2IsIEZBTFNFICk7DQoNCiAgICB0cnkgew0KDQogICAgICAgIE53QWNxdWlyZUZj
YkV4Y2x1c2l2ZSggSXJwQ29udGV4dCwgRmNiLCBGQUxTRSApOw0KDQogICAgICAgIC8vDQog
ICAgICAgIC8vICBWZXJpZnkgdGhlIFZjYi4NCiAgICAgICAgLy8NCg0KICAgICAgICBOd1Zl
cmlmeVZjYiggSXJwQ29udGV4dCwgVmNiICk7DQoNCiAgICAgICAgLy8NCiAgICAgICAgLy8g
IElmIHRoZSB2b2x1bWUgaXMgYWxyZWFkeSBsb2NrZWQgdGhlbiBjb21wbGV0ZSB3aXRoIHN1
Y2Nlc3MgaWYgdGhpcyBmaWxlDQogICAgICAgIC8vICBvYmplY3QgaGFzIHRoZSB2b2x1bWUg
bG9ja2VkLCBmYWlsIG90aGVyd2lzZS4NCiAgICAgICAgLy8NCg0KICAgICAgICBpZiAoRmxh
Z09uKCBWY2ItPlZjYlN0YXRlLCBWQ0JfU1RBVEVfTE9DS0VEICkpIHsNCg0KICAgICAgICAg
ICAgU3RhdHVzID0gU1RBVFVTX0FDQ0VTU19ERU5JRUQ7DQoNCiAgICAgICAgICAgIGlmIChW
Y2ItPlZvbHVtZUxvY2tGaWxlT2JqZWN0ID09IElycFNwLT5GaWxlT2JqZWN0KSB7DQoNCiAg
ICAgICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsNCiAgICAgICAgICAgIH0N
Cg0KICAgICAgICAvLw0KICAgICAgICAvLyAgSWYgdGhlIGNsZWFudXAgY291bnQgZm9yIHRo
ZSB2b2x1bWUgaXMgZ3JlYXRlciB0aGFuIDEgdGhlbiB0aGlzIHJlcXVlc3QNCiAgICAgICAg
Ly8gIHdpbGwgZmFpbC4NCiAgICAgICAgLy8NCg0KICAgICAgICB9IGVsc2UgaWYgKFZjYi0+
RmlsZUhhbmRsZUNvdW50ID4gMSkgew0KDQogICAgICAgICAgICBTdGF0dXMgPSBTVEFUVVNf
QUNDRVNTX0RFTklFRDsNCg0KICAgICAgICAvLw0KICAgICAgICAvLyAgV2Ugd2lsbCB0cnkg
dG8gZ2V0IHJpZCBvZiBhbGwgb2YgdGhlIHVzZXIgcmVmZXJlbmNlcy4gIElmIHRoZXJlIGlz
IG9ubHkgb25lDQogICAgICAgIC8vICByZW1haW5pbmcgYWZ0ZXIgdGhlIHB1cmdlIHRoZW4g
d2UgY2FuIGFsbG93IHRoZSB2b2x1bWUgdG8gYmUgbG9ja2VkLg0KICAgICAgICAvLw0KDQog
ICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgIFN0YXR1cyA9IE53UHVyZ2VWb2x1bWUo
IElycENvbnRleHQsIFZjYiApOw0KDQogICAgICAgICAgICBpZiAoTlRfU1VDQ0VTUyhTdGF0
dXMpKSB7DQoNCiAgICAgICAgICAgICAgICBpZiAoVmNiLT5GY2JDb3VudCA+IE5XRlNfUkVT
SURVQUxfRkNCX0NPVU5UKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gU1RB
VFVTX0FDQ0VTU19ERU5JRUQ7DQoNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAg
ICAgICAgICAgICAgICAgIFNldEZsYWcoIFZjYi0+VnBiLT5GbGFncywgVlBCX0xPQ0tFRCAp
Ow0KICAgICAgICAgICAgICAgICAgICBTZXRGbGFnKCBWY2ItPlZjYlN0YXRlLCBWQ0JfU1RB
VEVfTE9DS0VEICk7DQogICAgICAgICAgICAgICAgICAgIFZjYi0+Vm9sdW1lTG9ja0ZpbGVP
YmplY3QgPSBJcnBTcC0+RmlsZU9iamVjdDsNCiAgICAgICAgICAgICAgICAgICAgU3RhdHVz
ID0gU1RBVFVTX1NVQ0NFU1M7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQoNCiAgICB9IGZpbmFsbHkgew0KDQogICAgICAgIC8vDQogICAgICAgIC8v
ICBSZWxlYXNlIHRoZSBWY2IuDQogICAgICAgIC8vDQoNCiAgICAgICAgaWYgKEV4SXNSZXNv
dXJjZUFjcXVpcmVkRXhjbHVzaXZlKEZjYi0+UmVzb3VyY2UpKSB7DQogICAgICAgICAgICBO
d1JlbGVhc2VGY2IoIElycENvbnRleHQsIEZjYik7DQogICAgICAgIH0NCiAgICAgICAgTndS
ZWxlYXNlVmNiKCBJcnBDb250ZXh0LCBWY2IgKTsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8v
ICBDb21wbGV0ZSB0aGUgcmVxdWVzdCBpZiB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGV4Y2Vw
dGlvbnMuDQogICAgLy8NCg0KICAgIE53Q29tcGxldGVSZXF1ZXN0KCBJcnBDb250ZXh0LCBJ
cnAsIFN0YXR1cyApOw0KICAgIHJldHVybiBTdGF0dXM7DQp9DQoNCgwNCi8vDQovLyAgTG9j
YWwgc3VwcG9ydCByb3V0aW5lDQovLw0KDQpOVFNUQVRVUw0KTndVbmxvY2tWb2x1bWUgKA0K
ICAgIElOIFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0LA0KICAgIElOIFBJUlAgSXJwDQogICAg
KQ0KDQovKisrDQoNClJvdXRpbmUgRGVzY3JpcHRpb246DQoNCiAgICBUaGlzIHJvdXRpbmUg
cGVyZm9ybXMgdGhlIHVubG9jayB2b2x1bWUgb3BlcmF0aW9uLiAgSXQgaXMgcmVzcG9uc2li
bGUgZm9yDQogICAgZWl0aGVyIGNvbXBsZXRpbmcgb2YgZW5xdWV1aW5nIHRoZSBpbnB1dCBJ
cnAuDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJcnAgdG8gcHJv
Y2Vzcw0KDQpSZXR1cm4gVmFsdWU6DQoNCiAgICBOVFNUQVRVUyAtIFRoZSByZXR1cm4gc3Rh
dHVzIGZvciB0aGUgb3BlcmF0aW9uDQoNCi0tKi8NCg0Kew0KICAgIE5UU1RBVFVTIFN0YXR1
cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsNCg0KICAgIFBJT19TVEFDS19MT0NBVElP
TiBJcnBTcCA9IElvR2V0Q3VycmVudElycFN0YWNrTG9jYXRpb24oIElycCApOw0KDQogICAg
UFZDQiBWY2I7DQogICAgUEZDQiBGY2I7DQogICAgUENDQiBDY2I7DQoNCiAgICBQQUdFRF9D
T0RFKCk7DQoNCiAgICAvLw0KICAgIC8vICBEZWNvZGUgdGhlIGZpbGUgb2JqZWN0LCB0aGUg
b25seSB0eXBlIG9mIG9wZW5zIHdlIGFjY2VwdCBhcmUNCiAgICAvLyAgdXNlciB2b2x1bWUg
b3BlbnMuDQogICAgLy8NCg0KICAgIGlmIChOd0RlY29kZUZpbGVPYmplY3QoIElycENvbnRl
eHQsIElycFNwLT5GaWxlT2JqZWN0LCAmRmNiLCAmQ2NiICkgIT0gVXNlclZvbHVtZU9wZW4g
KSB7DQoNCiAgICAgICAgTndDb21wbGV0ZVJlcXVlc3QoIElycENvbnRleHQsIElycCwgU1RB
VFVTX0lOVkFMSURfUEFSQU1FVEVSICk7DQogICAgICAgIHJldHVybiBTVEFUVVNfSU5WQUxJ
RF9QQVJBTUVURVI7DQogICAgfQ0KDQogICAgLy8NCiAgICAvLyAgQWNxdWlyZSBleGNsdXNp
dmUgYWNjZXNzIHRvIHRoZSBWY2IuDQogICAgLy8NCg0KICAgIFZjYiA9IEZjYi0+VmNiOw0K
DQogICAgTndBY3F1aXJlVmNiRXhjbHVzaXZlKCBJcnBDb250ZXh0LCBWY2IsIEZBTFNFICk7
DQoNCiAgICAvLw0KICAgIC8vICBVc2UgYSB0cnktZmluYWxseSB0byBmYWNpbGl0YXRlIGNs
ZWFudXAuDQogICAgLy8NCg0KICAgIHRyeSB7DQoNCiAgICAgICAgTndBY3F1aXJlRmNiRXhj
bHVzaXZlKCBJcnBDb250ZXh0LCBGY2IsIEZBTFNFICk7DQoNCiAgICAgICAgLy8NCiAgICAg
ICAgLy8gIFdlIHdvbid0IGNoZWNrIGZvciBhIHZhbGlkIFZjYiBmb3IgdGhpcyByZXF1ZXN0
LiAgQW4gdW5sb2NrIHdpbGwgYWx3YXlzDQogICAgICAgIC8vICBzdWNjZWVkIG9uIGEgbG9j
a2VkIHZvbHVtZS4NCiAgICAgICAgLy8NCg0KICAgICAgICBpZiAoSXJwU3AtPkZpbGVPYmpl
Y3QgPT0gVmNiLT5Wb2x1bWVMb2NrRmlsZU9iamVjdCkgew0KDQogICAgICAgICAgICBDbGVh
ckZsYWcoIFZjYi0+VmNiU3RhdGUsIFZDQl9TVEFURV9MT0NLRUQgKTsNCiAgICAgICAgICAg
IENsZWFyRmxhZyggVmNiLT5WcGItPkZsYWdzLCBWUEJfTE9DS0VEICk7DQogICAgICAgICAg
ICBWY2ItPlZvbHVtZUxvY2tGaWxlT2JqZWN0ID0gTlVMTDsNCiAgICAgICAgICAgIFN0YXR1
cyA9IFNUQVRVU19TVUNDRVNTOw0KICAgICAgICB9DQoNCiAgICB9IGZpbmFsbHkgew0KDQog
ICAgICAgIC8vDQogICAgICAgIC8vICBSZWxlYXNlIGFsbCBvZiBvdXIgcmVzb3VyY2VzDQog
ICAgICAgIC8vDQoNCiAgICAgICAgaWYgKEV4SXNSZXNvdXJjZUFjcXVpcmVkRXhjbHVzaXZl
KEZjYi0+UmVzb3VyY2UpKSB7DQogICAgICAgICAgICBOd1JlbGVhc2VGY2IoIElycENvbnRl
eHQsIEZjYik7DQogICAgICAgIH0NCiAgICAgICAgTndSZWxlYXNlVmNiKCBJcnBDb250ZXh0
LCBWY2IgKTsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vICBDb21wbGV0ZSB0aGUgcmVxdWVz
dCBpZiB0aGVyZSBoYXZlbid0IGJlZW4gYW55IGV4Y2VwdGlvbnMuDQogICAgLy8NCg0KICAg
IE53Q29tcGxldGVSZXF1ZXN0KCBJcnBDb250ZXh0LCBJcnAsIFN0YXR1cyApOw0KICAgIHJl
dHVybiBTdGF0dXM7DQp9DQoNCg0KDA0KLy8NCi8vICBMb2NhbCBzdXBwb3J0IHJvdXRpbmUN
Ci8vDQoNCk5UU1RBVFVTDQpOd0Rpc21vdW50Vm9sdW1lICgNCiAgICBJTiBQSVJQX0NPTlRF
WFQgSXJwQ29udGV4dCwNCiAgICBJTiBQSVJQIElycA0KICAgICkNCg0KLyorKw0KDQpSb3V0
aW5lIERlc2NyaXB0aW9uOg0KDQogICAgVGhpcyByb3V0aW5lIHBlcmZvcm1zIHRoZSBkaXNt
b3VudCB2b2x1bWUgb3BlcmF0aW9uLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yDQogICAgZWl0
aGVyIGNvbXBsZXRpbmcgb2YgZW5xdWV1aW5nIHRoZSBpbnB1dCBJcnAuICBXZSBvbmx5IGRp
c21vdW50IGEgdm9sdW1lIHdoaWNoDQogICAgaGFzIGJlZW4gbG9ja2VkLiAgVGhlIGludGVu
dCBoZXJlIGlzIHRoYXQgc29tZW9uZSBoYXMgbG9ja2VkIHRoZSB2b2x1bWUgKHRoZXkgYXJl
IHRoZQ0KICAgIG9ubHkgcmVtYWluaW5nIGhhbmRsZSkuICBXZSBzZXQgdGhlIHZlcmlmeSBi
aXQgaGVyZSBhbmQgdGhlIHVzZXIgd2lsbCBjbG9zZSBoaXMgaGFuZGxlLg0KICAgIFdlIHdp
bGwgZGlzbW91bnQgYSB2b2x1bWUgd2l0aCBubyB1c2VyJ3MgaGFuZGxlcyBpbiB0aGUgdmVy
aWZ5IHBhdGguDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJcnAg
dG8gcHJvY2Vzcw0KDQpSZXR1cm4gVmFsdWU6DQoNCiAgICBOVFNUQVRVUyAtIFRoZSByZXR1
cm4gc3RhdHVzIGZvciB0aGUgb3BlcmF0aW9uDQoNCi0tKi8NCg0Kew0KICAgIE5UU1RBVFVT
IFN0YXR1czsNCiAgICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3AgPSBJb0dldEN1cnJlbnRJ
cnBTdGFja0xvY2F0aW9uKCBJcnAgKTsNCg0KICAgIFBERVZJQ0VfT0JKRUNUIE5ld1Rhcmdl
dERldmljZU9iamVjdDsNCg0KICAgIEtJUlFMIFNhdmVkSXJxbDsNCg0KICAgIFBWQ0IgVmNi
Ow0KICAgIFBGQ0IgRmNiOw0KICAgIFBDQ0IgQ2NiOw0KICAgIFBWUEIgVnBiOw0KDQogICAg
UEFHRURfQ09ERSgpOw0KDQogICAgaWYgKE53RGVjb2RlRmlsZU9iamVjdCggSXJwQ29udGV4
dCwgSXJwU3AtPkZpbGVPYmplY3QsICZGY2IsICZDY2IgKSAhPSBVc2VyVm9sdW1lT3BlbiAp
IHsNCg0KICAgICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4dCwgSXJwLCBTVEFU
VVNfSU5WQUxJRF9QQVJBTUVURVIgKTsNCiAgICAgICAgcmV0dXJuIFNUQVRVU19JTlZBTElE
X1BBUkFNRVRFUjsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vICBXZSBuZWVkIHRvIGZhaWwg
dGhpcyBpZiB3ZSBhcmUgcnVubmluZyBvbiBOVDUgZm9yIHRoZSB0aW1lIGJlaW5nLg0KICAg
IC8vDQoNCiAgICBpZiAoTndEYXRhLk1ham9yVmVyc2lvbiA+PSA1KSB7DQogICAgICAgIE53
Q29tcGxldGVSZXF1ZXN0KCBJcnBDb250ZXh0LCBJcnAsIFNUQVRVU19OT1RfSU1QTEVNRU5U
RUQgKTsNCiAgICAgICAgcmV0dXJuIFNUQVRVU19OT1RfSU1QTEVNRU5URUQ7DQogICAgfQ0K
DQogICAgLy8NCiAgICAvLyAgQWNxdWlyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBWY2Iu
DQogICAgLy8NCg0KICAgIFZjYiA9IEZjYi0+VmNiOw0KICAgIFZwYiA9IFZjYi0+VnBiOw0K
DQogICAgTndBY3F1aXJlVmNiRXhjbHVzaXZlKCBJcnBDb250ZXh0LCBWY2IsIEZBTFNFICk7
DQoNCiAgICB0cnkgew0KDQogICAgICAgIE53QWNxdWlyZUZjYkV4Y2x1c2l2ZSggSXJwQ29u
dGV4dCwgRmNiLCBGQUxTRSApOw0KDQogICAgICAgIGlmIChWY2ItPlZvbHVtZUxvY2tGaWxl
T2JqZWN0ICE9IElycFNwLT5GaWxlT2JqZWN0KSB7DQoNCiAgICAgICAgICAgIHRyeV9yZXR1
cm4oIFN0YXR1cyA9IFNUQVRVU19OT1RfTE9DS0VEICk7DQogICAgICAgIH0NCg0KICAgICAg
ICAvLw0KICAgICAgICAvLyAgTWFrZSBzdXJlIG5vYm9keSBpcyBlbnJvdXRlIHRvIHRoZSBm
aWxlIHN5c3RlbS4NCiAgICAgICAgLy8NCg0KICAgICAgICBJb0FjcXVpcmVWcGJTcGluTG9j
ayggJlNhdmVkSXJxbCApOw0KDQogICAgICAgIEFTU0VSVChGbGFnT24oVnBiLT5GbGFncywg
VlBCX0xPQ0tFRCkpOw0KDQogICAgICAgIGlmIChWcGItPlJlZmVyZW5jZUNvdW50ICE9IDEp
IHsNCiAgICAgICAgICAgIElvUmVsZWFzZVZwYlNwaW5Mb2NrKCBTYXZlZElycWwgKTsNCiAg
ICAgICAgICAgIHRyeV9yZXR1cm4oIFN0YXR1cyA9IFNUQVRVU19TSEFSSU5HX1ZJT0xBVElP
TiApOw0KICAgICAgICB9DQoNCiAgICAgICAgSW9SZWxlYXNlVnBiU3BpbkxvY2soIFNhdmVk
SXJxbCApOw0KDQogICAgICAgIC8vDQogICAgICAgIC8vICBOb3cgd2UgbWFyayB0aGUgdm9s
dW1lIGFzIGRpc21vdW50aW5nLCBhdHRhY2ggdG8gdGhlIHBzZXVkbw0KICAgICAgICAvLyAg
ZGV2aWNlLCB0aGVuIGRlbGV0ZSB0aGUgcHNldWRvIGRldmljZS4NCiAgICAgICAgLy8NCiAg
ICAgICAgLy8gIFRoZSBjbG9zZSBvZiB0aGUgREFTRCBoYW5kbGUgc2hvdWxkIGNhdXNlIHRo
ZSBwc2V1ZG8gdG8gYmVjb21lDQogICAgICAgIC8vICBkZWxldGVkICh1bmVzcyB0aGVyZSBh
cmUgZGlyZWN0IGRldmljZSBvcGVucyB0byB0aGUgcHNldWRvIGRldmljZSwNCiAgICAgICAg
Ly8gIGluIHdoaWNoIGNhc2UgdGhlIGRlbGV0ZSB3aWxsIGJlIGRlbGF5ZWQgdW50aWwgdGhl
eSBhcmUgY2xvc2VkKS4NCiAgICAgICAgLy8gIFNpbmNlIHdlIGFyZSBhdHRhY2hlZCwgd2Ug
d2lsbCBnZXQgYSBEZWxldGVEZXZpY2UgZmFzdC1pbyBjYWxsYmFjaw0KICAgICAgICAvLyAg
d2hpY2ggd2UgY2FuIHVzZSB0byBmcmVlIHRoZSBOZXR3YXJlIHJlc291cmNlcyBhbmQgb3Vy
IG93bg0KICAgICAgICAvLyAgcmVzb3VyY2VzIChpbmNsdWRlIG91ciBvd24gdm9sdW1lIGRl
dmljZSBvYmplY3QpLg0KICAgICAgICAvLw0KDQogICAgICAgIFZjYi0+VmNiQ29uZGl0aW9u
ID0gVmNiRGlzbW91bnRJblByb2dyZXNzOw0KDQogICAgICAgIE5ld1RhcmdldERldmljZU9i
amVjdCA9DQogICAgICAgICAgICBJb0F0dGFjaERldmljZVRvRGV2aWNlU3RhY2soIElycFNw
LT5EZXZpY2VPYmplY3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZjYi0+VGFyZ2V0RGV2aWNlT2JqZWN0ICk7DQoNCiAgICAgICAgaWYgKE5ld1Rhcmdl
dERldmljZU9iamVjdCAhPSBWY2ItPlRhcmdldERldmljZU9iamVjdCkgew0KICAgICAgICAg
ICAgdHJ5X3JldHVybiggU3RhdHVzID0gU1RBVFVTX0lOVkFMSURfREVWSUNFX1NUQVRFICk7
DQogICAgICAgIH0NCg0KICAgICAgICBJb0RlbGV0ZURldmljZSggVmNiLT5UYXJnZXREZXZp
Y2VPYmplY3QgKTsNCg0KICAgICAgICBTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsNCg0KICAg
IHRyeV9leGl0OiAgTk9USElORzsNCiAgICB9IGZpbmFsbHkgew0KDQogICAgICAgIC8vDQog
ICAgICAgIC8vICBSZWxlYXNlIGFsbCBvZiBvdXIgcmVzb3VyY2VzDQogICAgICAgIC8vDQoN
CiAgICAgICAgaWYgKEV4SXNSZXNvdXJjZUFjcXVpcmVkRXhjbHVzaXZlKEZjYi0+UmVzb3Vy
Y2UpKSB7DQogICAgICAgICAgICBOd1JlbGVhc2VGY2IoIElycENvbnRleHQsIEZjYik7DQog
ICAgICAgIH0NCiAgICAgICAgTndSZWxlYXNlVmNiKCBJcnBDb250ZXh0LCBWY2IgKTsNCiAg
ICB9DQoNCiAgICAvLw0KICAgIC8vICBDb21wbGV0ZSB0aGUgcmVxdWVzdCBpZiB0aGVyZSBo
YXZlbid0IGJlZW4gYW55IGV4Y2VwdGlvbnMuDQogICAgLy8NCg0KICAgIE53Q29tcGxldGVS
ZXF1ZXN0KCBJcnBDb250ZXh0LCBJcnAsIFN0YXR1cyApOw0KICAgIHJldHVybiBTdGF0dXM7
DQp9DQoNCgwNCi8vDQovLyAgTG9jYWwgc3VwcG9ydCByb3V0aW5lDQovLw0KDQpOVFNUQVRV
Uw0KTndJc1ZvbHVtZU1vdW50ZWQgKA0KICAgIElOIFBJUlBfQ09OVEVYVCBJcnBDb250ZXh0
LA0KICAgIElOIFBJUlAgSXJwDQogICAgKQ0KDQovKisrDQoNClJvdXRpbmUgRGVzY3JpcHRp
b246DQoNCiAgICBUaGlzIHJvdXRpbmUgZGV0ZXJtaW5lcyBpZiBhIHZvbHVtZSBpcyBjdXJy
ZW50bHkgbW91bnRlZC4NCg0KQXJndW1lbnRzOg0KDQogICAgSXJwIC0gU3VwcGxpZXMgdGhl
IElycCB0byBwcm9jZXNzDQoNClJldHVybiBWYWx1ZToNCg0KICAgIE5UU1RBVFVTIC0gVGhl
IHJldHVybiBzdGF0dXMgZm9yIHRoZSBvcGVyYXRpb24NCg0KLS0qLw0KDQp7DQogICAgUElP
X1NUQUNLX0xPQ0FUSU9OIElycFNwID0gSW9HZXRDdXJyZW50SXJwU3RhY2tMb2NhdGlvbigg
SXJwICk7DQoNCiAgICBQRkNCIEZjYjsNCiAgICBQQ0NCIENjYjsNCg0KICAgIFBBR0VEX0NP
REUoKTsNCg0KICAgIC8vDQogICAgLy8gIERlY29kZSB0aGUgZmlsZSBvYmplY3QuDQogICAg
Ly8NCg0KICAgIE53RGVjb2RlRmlsZU9iamVjdCggSXJwQ29udGV4dCwgSXJwU3AtPkZpbGVP
YmplY3QsICZGY2IsICZDY2IgKTsNCg0KICAgIGlmIChGY2IgIT0gTlVMTCkgew0KDQogICAg
ICAgIC8vDQogICAgICAgIC8vICBEaXNhYmxlIFBvcFVwcywgd2Ugd2FudCB0byByZXR1cm4g
YW55IGVycm9yLg0KICAgICAgICAvLw0KDQogICAgICAgIFNldEZsYWcoIElycENvbnRleHQt
PkZsYWdzLCBJUlBfQ09OVEVYVF9GTEFHX0RJU0FCTEVfUE9QVVBTICk7DQoNCiAgICAgICAg
Ly8NCiAgICAgICAgLy8gIFZlcmlmeSB0aGUgVmNiLiAgVGhpcyB3aWxsIHJhaXNlIGluIHRo
ZSBlcnJvciBjb25kaXRpb24uDQogICAgICAgIC8vDQoNCiAgICAgICAgTndWZXJpZnlWY2Io
IElycENvbnRleHQsIEZjYi0+VmNiICk7DQogICAgfQ0KDQogICAgTndDb21wbGV0ZVJlcXVl
c3QoIElycENvbnRleHQsIElycCwgU1RBVFVTX1NVQ0NFU1MgKTsNCg0KICAgIHJldHVybiBT
VEFUVVNfU1VDQ0VTUzsNCn0NCg0KDA0KLy8NCi8vICBMb2NhbCBzdXBwb3J0IHJvdXRpbmUN
Ci8vDQoNCk5UU1RBVFVTDQpOd0lzUGF0aG5hbWVWYWxpZCAoDQogICAgSU4gUElSUF9DT05U
RVhUIElycENvbnRleHQsDQogICAgSU4gUElSUCBJcnANCiAgICApDQoNCi8qKysNCg0KUm91
dGluZSBEZXNjcmlwdGlvbjoNCg0KICAgIFRoaXMgcm91dGluZSBkZXRlcm1pbmVzIGlmIHBh
dGhuYW1lIGlzIGEgdmFsaWQgTldGUyBwYXRobmFtZS4NCiAgICBXZSBhbHdheXMgc3VjY2Vl
ZCB0aGlzIHJlcXVlc3QuDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRo
ZSBJcnAgdG8gcHJvY2Vzcy4NCg0KUmV0dXJuIFZhbHVlOg0KDQogICAgTm9uZQ0KDQotLSov
DQoNCnsNCiAgICBQQUdFRF9DT0RFKCk7DQoNCiAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJw
Q29udGV4dCwgSXJwLCBTVEFUVVNfU1VDQ0VTUyApOw0KICAgIHJldHVybiBTVEFUVVNfU1VD
Q0VTUzsNCn0NCg0KDA0KLy8NCi8vICBMb2NhbCBzdXBwb3J0IHJvdXRpbmUNCi8vDQoNCk5U
U1RBVFVTDQpOd0ludmFsaWRhdGVWb2x1bWVzICgNCiAgICBJTiBQSVJQX0NPTlRFWFQgSXJw
Q29udGV4dCwNCiAgICBJTiBQSVJQIElycA0KICAgICkNCg0KLyorKw0KDQpSb3V0aW5lIERl
c2NyaXB0aW9uOg0KDQogICAgVGhpcyByb3V0aW5lIHNlYXJjaGVzIGZvciBhbGwgdGhlIHZv
bHVtZXMgbW91bnRlZCBvbiB0aGUgc2FtZSByZWFsIGRldmljZQ0KICAgIG9mIHRoZSBjdXJy
ZW50IERBU0QgaGFuZGxlLCBhbmQgbWFya3MgdGhlbSBhbGwgYmFkLiAgVGhlIG9ubHkgb3Bl
cmF0aW9uDQogICAgdGhhdCBjYW4gYmUgZG9uZSBvbiBzdWNoIGhhbmRsZXMgaXMgY2xlYW51
cCBhbmQgY2xvc2UuDQoNCkFyZ3VtZW50czoNCg0KICAgIElycCAtIFN1cHBsaWVzIHRoZSBJ
cnAgdG8gcHJvY2Vzcw0KDQpSZXR1cm4gVmFsdWU6DQoNCiAgICBOVFNUQVRVUyAtIFRoZSBy
ZXR1cm4gc3RhdHVzIGZvciB0aGUgb3BlcmF0aW9uDQoNCi0tKi8NCg0Kew0KICAgIE5UU1RB
VFVTIFN0YXR1czsNCiAgICBQSU9fU1RBQ0tfTE9DQVRJT04gSXJwU3AgPSBJb0dldEN1cnJl
bnRJcnBTdGFja0xvY2F0aW9uKCBJcnAgKTsNCiAgICBLSVJRTCBTYXZlZElycWw7DQoNCiAg
ICBMVUlEIFRjYlByaXZpbGVnZSA9IHtTRV9UQ0JfUFJJVklMRUdFLCAwfTsNCg0KICAgIEhB
TkRMRSBIYW5kbGU7DQoNCiAgICBQVlBCIE5ld1ZwYjsNCiAgICBQVkNCIFZjYjsNCg0KICAg
IFBMSVNUX0VOVFJZIExpbmtzOw0KDQogICAgUEZJTEVfT0JKRUNUIEZpbGVUb01hcmtCYWQ7
DQogICAgUERFVklDRV9PQkpFQ1QgRGV2aWNlVG9NYXJrQmFkOw0KDQogICAgLy8NCiAgICAv
LyAgQ2hlY2sgZm9yIHRoZSBjb3JyZWN0IHNlY3VyaXR5IGFjY2Vzcy4NCiAgICAvLyAgVGhl
IGNhbGxlciBtdXN0IGhhdmUgdGhlIFNlVGNiUHJpdmlsZWdlLg0KICAgIC8vDQoNCiAgICBp
ZiAoIVNlU2luZ2xlUHJpdmlsZWdlQ2hlY2soIFRjYlByaXZpbGVnZSwgSXJwLT5SZXF1ZXN0
b3JNb2RlICkpIHsNCg0KICAgICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4dCwg
SXJwLCBTVEFUVVNfUFJJVklMRUdFX05PVF9IRUxEICk7DQoNCiAgICAgICAgcmV0dXJuIFNU
QVRVU19QUklWSUxFR0VfTk9UX0hFTEQ7DQogICAgfQ0KDQogICAgLy8NCiAgICAvLyAgVHJ5
IHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSBvYmplY3QgZnJvbSB0aGUgaGFuZGxl
IHBhc3NlZCBpbi4NCiAgICAvLw0KDQogICAgaWYgKElycFNwLT5QYXJhbWV0ZXJzLkZpbGVT
eXN0ZW1Db250cm9sLklucHV0QnVmZmVyTGVuZ3RoICE9IHNpemVvZiggSEFORExFICkpIHsN
Cg0KICAgICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4dCwgSXJwLCBTVEFUVVNf
SU5WQUxJRF9QQVJBTUVURVIgKTsNCiAgICAgICAgcmV0dXJuIFNUQVRVU19JTlZBTElEX1BB
UkFNRVRFUjsNCiAgICB9DQoNCiAgICBIYW5kbGUgPSAqKChQSEFORExFKSBJcnAtPkFzc29j
aWF0ZWRJcnAuU3lzdGVtQnVmZmVyKTsNCg0KICAgIFN0YXR1cyA9IE9iUmVmZXJlbmNlT2Jq
ZWN0QnlIYW5kbGUoIEhhbmRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJ
b0ZpbGVPYmplY3RUeXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEtlcm5lbE1vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkZpbGVUb01hcmtCYWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTlVMTCApOw0KDQogICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpIHsNCg0KICAg
ICAgICBOd0NvbXBsZXRlUmVxdWVzdCggSXJwQ29udGV4dCwgSXJwLCBTdGF0dXMgKTsNCiAg
ICAgICAgcmV0dXJuIFN0YXR1czsNCiAgICB9DQoNCiAgICAvLw0KICAgIC8vICBXZSBvbmx5
IG5lZWRlZCB0aGUgcG9pbnRlciwgbm90IGEgcmVmZXJlbmNlLg0KICAgIC8vDQoNCiAgICBP
YkRlcmVmZXJlbmNlT2JqZWN0KCBGaWxlVG9NYXJrQmFkICk7DQoNCiAgICAvLw0KICAgIC8v
ICBHcmFiIHRoZSBEZXZpY2VPYmplY3QgZnJvbSB0aGUgRmlsZU9iamVjdC4NCiAgICAvLw0K
DQogICAgRGV2aWNlVG9NYXJrQmFkID0gRmlsZVRvTWFya0JhZC0+RGV2aWNlT2JqZWN0Ow0K
DQogICAgLy8NCiAgICAvLyAgQ3JlYXRlIGEgbmV3IFZwYiBmb3IgdGhpcyBkZXZpY2Ugc28g
dGhhdCBhbnkgbmV3IG9wZW5zIHdpbGwgbW91bnQNCiAgICAvLyAgYSBuZXcgdm9sdW1lLg0K
ICAgIC8vDQoNCiAgICBOZXdWcGIgPSBFeEFsbG9jYXRlUG9vbFdpdGhUYWcoIE5vblBhZ2Vk
UG9vbE11c3RTdWNjZWVkLCBzaXplb2YoIFZQQiApLCBUQUdfVlBCICk7DQogICAgUnRsWmVy
b01lbW9yeSggTmV3VnBiLCBzaXplb2YoIFZQQiApICk7DQoNCiAgICBOZXdWcGItPlR5cGUg
PSBJT19UWVBFX1ZQQjsNCiAgICBOZXdWcGItPlNpemUgPSBzaXplb2YoIFZQQiApOw0KICAg
IE5ld1ZwYi0+UmVhbERldmljZSA9IERldmljZVRvTWFya0JhZDsNCg0KICAgIC8vDQogICAg
Ly8gIE1ha2Ugc3VyZSB0aGlzIHJlcXVlc3QgY2FuIHdhaXQuDQogICAgLy8NCg0KICAgIFNl
dEZsYWcoIElycENvbnRleHQtPkZsYWdzLCBJUlBfQ09OVEVYVF9GTEFHX1dBSVQgKTsNCiAg
ICBDbGVhckZsYWcoIElycENvbnRleHQtPkZsYWdzLCBJUlBfQ09OVEVYVF9GTEFHX0ZPUkNF
X1BPU1QgKTsNCg0KICAgIE53QWNxdWlyZU53RGF0YSggSXJwQ29udGV4dCApOw0KDQogICAg
Ly8NCiAgICAvLyAgTm90aGluZyBjYW4gZ28gd3Jvbmcgbm93Lg0KICAgIC8vDQoNCiAgICBJ
b0FjcXVpcmVWcGJTcGluTG9jayggJlNhdmVkSXJxbCApOw0KICAgIERldmljZVRvTWFya0Jh
ZC0+VnBiID0gTmV3VnBiOw0KICAgIElvUmVsZWFzZVZwYlNwaW5Mb2NrKCBTYXZlZElycWwg
KTsNCg0KICAgIC8vDQogICAgLy8gIE5vdyB3YWxrIHRocm91Z2ggYWxsIHRoZSBtb3VudGVk
IFZjYidzIGxvb2tpbmcgZm9yIGNhbmRpZGF0ZXMgdG8NCiAgICAvLyAgbWFyayBpbnZhbGlk
Lg0KICAgIC8vDQogICAgLy8gIE9uIHZvbHVtZXMgd2UgbWFyayBpbnZhbGlkLCBjaGVjayBm
b3IgZGlzbW91bnQgcG9zc2liaWxpdHkgKHdoaWNoIGlzDQogICAgLy8gIHdoeSB3ZSBoYXZl
IHRvIGdldCB0aGUgbmV4dCBsaW5rIHNvIGVhcmx5KS4NCiAgICAvLw0KDQogICAgTGlua3Mg
PSBOd0RhdGEuVmNiUXVldWUuRmxpbms7DQoNCiAgICB3aGlsZSAoTGlua3MgIT0gJk53RGF0
YS5WY2JRdWV1ZSkgew0KDQogICAgICAgIFZjYiA9IENPTlRBSU5JTkdfUkVDT1JEKCBMaW5r
cywgVkNCLCBWY2JMaW5rcyk7DQoNCiAgICAgICAgTGlua3MgPSBMaW5rcy0+Rmxpbms7DQoN
CiAgICAgICAgLy8NCiAgICAgICAgLy8gIElmIHdlIGdldCBhIG1hdGNoLCBtYXJrIHRoZSB2
b2x1bWUgQmFkLCBhbmQgYWxzbyBjaGVjayB0bw0KICAgICAgICAvLyAgc2VlIGlmIHRoZSB2
b2x1bWUgc2hvdWxkIGdvIGF3YXkuDQogICAgICAgIC8vDQoNCiAgICAgICAgTndMb2NrKCk7
DQoNCiAgICAgICAgaWYgKFZjYi0+VnBiLT5SZWFsRGV2aWNlID09IERldmljZVRvTWFya0Jh
ZCkgew0KDQogICAgICAgICAgICBWY2ItPlZjYkNvbmRpdGlvbiA9IFZjYkludmFsaWQ7DQog
ICAgICAgICAgICBOd1VubG9jaygpOw0KDQogICAgICAgICAgICBOd0NoZWNrRm9yRGlzbW91
bnQoIElycENvbnRleHQsIFZjYiApOw0KDQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAg
ICAgIE53VW5sb2NrKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBOd1JlbGVhc2VOd0Rh
dGEoIElycENvbnRleHQgKTsNCg0KICAgIE53Q29tcGxldGVSZXF1ZXN0KCBJcnBDb250ZXh0
LCBJcnAsIFNUQVRVU19TVUNDRVNTICk7DQogICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOw0K
fQ0KDQo=
--------------CFD2F6169F1909DAD2C42AF9--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/