Re: [PATCH v6 4/6] decoder: Add V4L2 stateless H.264 decoder driver

[email protected] Fri, 24 Jul 2026 07:28:02 +0000
Newsgroups org.infradead.lists.linux-amlogic,org.kernel.vger.linux-devicetree
Message-ID <[email protected]>
VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg
MzEgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtDcml0aWNhbF0gQXN5bW1ldHJp
Y2FsIHN0b3Avc3RhcnQgc3RyZWFtaW5nIHRyaWdnZXJzIGEgVXNlLUFmdGVyLUZyZWUgYW5kIE5V
TEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB0aGUgZGVjb2RlciBjb250ZXh0LgotIFtDcml0aWNh
bF0gVW52YWxpZGF0ZWQgcmVmZXJlbmNlIGxpc3Qgc2l6ZXMgYW5kIFBQUyBwYXJhbWV0ZXJzIGxl
YWQgdG8gbWFzc2l2ZSBoZWFwL2FycmF5IGJ1ZmZlciBvdmVyZmxvd3MuCi0gW0NyaXRpY2FsXSBH
bG9iYWwgY29udGV4dCBwb2ludGVycyBhcmUgdW5jb25kaXRpb25hbGx5IG92ZXJ3cml0dGVuIG9u
IG9wZW4oKSwgY29ycnVwdGluZyBzdGF0ZSBmb3IgY29uY3VycmVudCB1c2Vycy4KLSBbQ3JpdGlj
YWxdIE11bHRpLXBsYW5hciBjYXB0dXJlIGZvcm1hdHMgKGUuZy4gTlYxMk0pIGFyZSBicm9rZW4g
YmVjYXVzZSBgcGxhbmVfbnVtYCBpcyBoYXJkY29kZWQsIGNhdXNpbmcgc2V2ZXJlIERNQSBtZW1v
cnkgY29ycnVwdGlvbi4KLSBbQ3JpdGljYWxdIFRoZSBkcml2ZXIgZG9lcyBub3QgdmFsaWRhdGUg
dGhlIHZpZGVvIGRpbWVuc2lvbnMgc3BlY2lmaWVkIGluIHRoZSBTUFMgYWdhaW5zdCB0aGUgYWN0
dWFsIFY0TDIgZGVzdGluYXRpb24gYnVmZmVyIHNpemUsIGFsbG93aW5nIGFyYml0cmFyeSBETUEg
b3V0LW9mLWJvdW5kcyB3cml0ZXMuCi0gW0NyaXRpY2FsXSBDb2xvY2F0aW9uIGJ1ZmZlciBwaHlz
aWNhbCBhZGRyZXNzIGNhbGN1bGF0aW9ucyBzdWZmZXIgZnJvbSBpbnRlZ2VyIHRydW5jYXRpb25z
IGFuZCBvdmVyZmxvd3MsIGJ5cGFzc2luZyBib3VuZHMgY2hlY2tzIGFuZCBjYXVzaW5nIGFyYml0
cmFyeSBETUEgbWVtb3J5IGNvcnJ1cHRpb24uCi0gW0hpZ2hdIEluY29ycmVjdCBlcnJvciBjaGVj
a2luZyBmb3IgYG9mX3BhcnNlX3BoYW5kbGUoKWAgbGVhZHMgdG8gYSBOVUxMIHBvaW50ZXIgZGVy
ZWZlcmVuY2UgYW5kIHdyb25nIGVycm9yIGNvZGUuCi0gW0hpZ2hdIGBTX0ZNVGAgb24gdGhlIE9V
VFBVVCBxdWV1ZSBleHBsaWNpdGx5IGNsb2JiZXJzIHRoZSBDQVBUVVJFIHF1ZXVlJ3MgcGl4ZWwg
Zm9ybWF0LgotIFtIaWdoXSBIYXJkd2FyZSByZXNvdXJjZXMgYW5kIFBNIGRvbWFpbnMgYXJlIHBl
cm1hbmVudGx5IGxlYWtlZCBpbiBwcm9iZSBlcnJvciBwYXRocy4KLSBbSGlnaF0gVGhlIGBkb3Ng
IGNsb2NrIGlzIHJlcXVlc3RlZCBidXQgbmV2ZXIgcHJlcGFyZWQgb3IgZW5hYmxlZC4KLSBbSGln
aF0gYGNvcHlfcmVmX2xpc3RgIGluY29ycmVjdGx5IGR1cGxpY2F0ZXMgYHJlZl9saXN0MGAgaW50
byBgcmVmX2xpc3QxX3VucmVvcmRlcmVkYC4KLSBbSGlnaF0gTWV0YWRhdGEgY29weWluZyBhbmQg
cmVxdWVzdCBjb21wbGV0aW9uIG9jY3VyIGFmdGVyIGJ1ZmZlcnMgYXJlIGhhbmRlZCBiYWNrIHRv
IHVzZXJzcGFjZS4KLSBbSGlnaF0gU3luY2hyb25vdXMgYmxvY2tpbmcgaW4gYGRldmljZV9ydW5g
IGFsbG93cyBkb3VibGUtZmluaXNoaW5nIG9mIFY0TDIgTTJNIGpvYnMgb24gdGltZW91dC4KLSBb
SGlnaF0gTWlzc2luZyBib3VuZHMgY2hlY2sgb24gZmlybXdhcmUgc2l6ZSBjYXVzZXMgaW50ZWdl
ciB1bmRlcmZsb3cgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLgotIFtIaWdoXSBgVFJZX0ZNVGAg
aWdub3JlcyB1c2VyLXJlcXVlc3RlZCBwaXhlbCBmb3JtYXRzLCBkaXJlY3RseSByZXR1cm5pbmcg
dGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uLgotIFtIaWdoXSBCeXBhc3NpbmcgY2xvY2sgZW5hYmxp
bmcgd2hlbiB0aGUgcG93ZXIgZG9tYWluIGlzIGFjdGl2ZSBicmVha3MgUE0gdXNhZ2UgY291bnRz
IGFuZCBjbG9jayBiYWxhbmNpbmcuCi0gW0hpZ2hdIERldmljZSBsaWZldGltZSBtaXNtYXRjaCB3
aXRoIGBkZXZtX2t6YWxsb2NgIGNhdXNlcyBVc2UtQWZ0ZXItRnJlZSBvbiBkcml2ZXIgdW5iaW5k
LgotIFtIaWdoXSBGYWlsZWQgYWxsb2NhdGlvbnMgb3ZlcndyaXRlIGVycm9yIHJlc3VsdHMsIGFu
ZCBhbHdheXMtdHJ1ZSBgdThgIGNoZWNrcyBjYXVzZSB1bm93bmVkIGNhbnZhcyByZWxlYXNlLgot
IFtIaWdoXSBIYXJkd2FyZSBzdHJlYW0gcGFyc2VyIGlzIHByb2dyYW1tZWQgdG8gcmVhZCAxMDI0
IGJ5dGVzIHBhc3QgdGhlIHVzZXItc3VwcGxpZWQgcGF5bG9hZCwgY2F1c2luZyBPT0IgRE1BIHJl
YWRzLgotIFtIaWdoXSBJRFIgcGljdHVyZSBjaGVja3MgZXJyb25lb3VzbHkgdXNlIHN0cmljdCBl
cXVhbGl0eSBhZ2FpbnN0IGEgYml0bWFzayBmaWVsZC4KLSBbSGlnaF0gU3B1cmlvdXMgaGFyZHdh
cmUgaW50ZXJydXB0cyByZXN1bHQgaW4gYSBndWFyYW50ZWVkIGtlcm5lbCBjcmFzaCBieSBkZXJl
ZmVyZW5jaW5nIGEgTlVMTCBgY3Vycl9jdHhgLgotIFtIaWdoXSBUaGUgRFBCIHByZXBhcmF0aW9u
IGxvb3AgaW5jb3JyZWN0bHkgdGVybWluYXRlcyBlYXJseSBpZiBhIHNwYXJzZSBlbnRyeSBpcyBl
bmNvdW50ZXJlZC4KLSBbSGlnaF0gRmFpbGluZyB0byByZXR1cm4gcXVldWVkIGJ1ZmZlcnMgd2hl
biBgc3RhcnRfc3RyZWFtaW5nYCBmYWlscyBjYXVzZXMgdmlkZW9idWYyIHdhcm5pbmdzIGFuZCBs
ZWFrcy4KLSBbSGlnaF0gTWlzc2luZyB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgpIG9uIHByb2Jl
IGVycm9yIHBhdGggbGVhdmVzIGEgZGFuZ2xpbmcgY2hhcmFjdGVyIGRldmljZS4KLSBbSGlnaF0g
UHJlbWF0dXJlIGpvYiBmaW5pc2ggbm90aWZpY2F0aW9uIGNhdXNlcyBhIHJhY2UgYmV0d2VlbiBg
YW1sX3N0b3BfdmRlY19od2AgYW5kIGBhbWxfc3RhcnRfdmRlY19od2AuCi0gW0hpZ2hdIE1pc3Np
bmcgam9iIGZpbmlzaCBub3RpZmljYXRpb24gaW4gdGhlIElTUiBlcnJvciBwYXRoIHBlcm1hbmVu
dGx5IGhhbmdzIHRoZSB2NGwyX20ybSBxdWV1ZS4KLSBbSGlnaF0gYEVSUl9QVFJgIHN0b3JlZCBp
biBwb3dlciBkb21haW4gYXJyYXkgY2F1c2VzIGEga2VybmVsIHBhbmljIHdoZW4gZGVyZWZlcmVu
Y2VkIGJ5IFBNIEFQSS4KLSBbSGlnaF0gYHJlYWRfcG9sbF90aW1lb3V0X2F0b21pY2AgdXNlZCB3
aXRoIGxhcmdlIHRpbWVvdXRzIHN0YWxscyB0aGUgQ1BVLgotIFtNZWRpdW1dIFNlbGVjdGluZyBN
RVNPTl9TTSB3aXRob3V0IHNhdGlzZnlpbmcgaXRzIGRlcGVuZGVuY2llcyBjYXVzZXMgdW5tZXQg
ZGVwZW5kZW5jeSB3YXJuaW5ncy4KLSBbTWVkaXVtXSBGYWlsdXJlIGR1cmluZyBwb3dlciBkb21h
aW4gaW5pdGlhbGl6YXRpb24gbGVha3Mgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIGRvbWFpbnMuCi0g
W01lZGl1bV0gYGgyNjRfY3R4YCBpcyBsZWFrZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGZhaWx1
cmUuCi0tCgotLS0gUGF0Y2ggWzRdOiBbUEFUQ0ggdjYgNC82XSBkZWNvZGVyOiBBZGQgVjRMMiBz
dGF0ZWxlc3MgSC4yNjQgZGVjb2RlciBkcml2ZXIgLS0tCmNvbW1pdCBhZmM2NWZmMGMxODY3MWEx
OWZiYTUzY2I3YTVkNWE2NzE0MjBjMmQ2CkF1dGhvcjogWmhlbnRhbyBHdW8gPHpoZW50YW8uZ3Vv
QGFtbG9naWMuY29tPgoKZGVjb2RlcjogQWRkIFY0TDIgc3RhdGVsZXNzIEguMjY0IGRlY29kZXIg
ZHJpdmVyCgpBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBWNEwyIHN0YXRlbGVzcyB2aWRlbyBkZWNv
ZGVyIGRyaXZlciBvbiBBbWxvZ2ljIFM0CihTODA1WDIpIHBsYXRmb3JtLiBJbiBwaGFzZSAxLCBp
dCBzdXBwb3J0cyA4Yml0IEguMjY0IGJpdHN0cmVhbXMgZGVjb2RpbmcuIApDdXJyZW50bHkgb25s
eSBwcm9ncmVzc2l2ZSBzdHJlYW1zIGFyZSBzdXBwb3J0ZWQuCgo+IGRpZmYgLS1naXQgYS9kcml2
ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9w
bGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvS2NvbmZpZwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggMDAwMDAwMDAwMDAwMC4uZDM5Mjk2N2M3NzQzNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k
cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9LY29uZmlnCj4gQEAgLTAsMCArMSwx
OCBAQAo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIE1JVCkK
PiArCj4gK2NvbmZpZyBWSURFT19BTUxPR0lDX1ZERUMKPiArICAgIHRyaXN0YXRlICJBbWxvZ2lj
IFZpZGVvIERlY29kZXIgRHJpdmVyIgo+ICsgICAgZGVwZW5kcyBvbiBBUkNIX01FU09OIHx8IENP
TVBJTEVfVEVTVAo+ICsgICAgZGVwZW5kcyBvbiBWSURFT19ERVYKPiArICAgIGRlcGVuZHMgb24g
VjRMX01FTTJNRU1fRFJJVkVSUwo+ICsgICAgZGVwZW5kcyBvbiBURUUKPiArICAgIHNlbGVjdCBW
SURFT0JVRjJfRE1BX0NPTlRJRwo+ICsgICAgc2VsZWN0IFY0TDJfSDI2NAo+ICsgICAgc2VsZWN0
IFY0TDJfTUVNMk1FTV9ERVYKPiArICAgIHNlbGVjdCBNRVNPTl9DQU5WQVMKPiArICAgIHNlbGVj
dCBNRVNPTl9TTQoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMgc2VsZWN0aW5nIE1FU09OX1NNIGhl
cmUgYnlwYXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXM/CklmIHRoaXMgZHJp
dmVyIGlzIGJ1aWx0IHdpdGggQ09NUElMRV9URVNUIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBsYWNr
IHRoZQpkZXBlbmRlbmNpZXMgZm9yIE1FU09OX1NNLCBpdCBjb3VsZCB0cmlnZ2VyIEtjb25maWcg
dW5tZXQgZGVwZW5kZW5jeSB3YXJuaW5ncwphbmQgYnVpbGQgZmFpbHVyZXMuCgo+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlYy5jIGIvZHJp
dmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWMuYwo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZDRkY2QwMTgwZDJkMAo+IC0tLSAvZGV2
L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRl
Yy5jCj4gQEAgLTAsMCArMSw3MzYgQEAKClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIG0ybW9wc192
ZGVjX2RldmljZV9ydW4odm9pZCAqbTJtX3ByaXYpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19j
dHggKmN0eCA9IG0ybV9wcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gY3R4LT5k
ZXY7Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmLCAqZHN0X2J1ZjsKPiArCXN0
cnVjdCBtZWRpYV9yZXF1ZXN0ICpzcmNfcmVxOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJc3Jj
X2J1ZiA9IHY0bDJfbTJtX25leHRfc3JjX2J1ZihjdHgtPmZoLm0ybV9jdHgpOwo+ICsJZHN0X2J1
ZiA9IHY0bDJfbTJtX25leHRfZHN0X2J1ZihjdHgtPmZoLm0ybV9jdHgpOwoKWyAuLi4gXQoKPiAr
CXJldCA9IGN0eC0+Y29kZWNfb3BzLT5ydW4oY3R4KTsKPiArCj4gKwl2NGwyX20ybV9idWZfY29w
eV9tZXRhZGF0YShzcmNfYnVmLCBkc3RfYnVmKTsKPiArCWlmIChzcmNfcmVxKQo+ICsJCXY0bDJf
Y3RybF9yZXF1ZXN0X2NvbXBsZXRlKHNyY19yZXEsICZjdHgtPmN0cmxfaGFuZGxlcik7CgpbU2V2
ZXJpdHk6IEhpZ2hdCkNvdWxkIHY0bDJfbTJtX2J1Zl9jb3B5X21ldGFkYXRhIGFuZCB2NGwyX2N0
cmxfcmVxdWVzdF9jb21wbGV0ZSBiZSBhY2Nlc3NpbmcKYnVmZmVycyBhZnRlciB0aGV5IGhhdmUg
YmVlbiByZXR1cm5lZCB0byB1c2Vyc3BhY2U/CgpUaGUgc3luY2hyb25vdXMgd2FpdF9ldmVudCBp
biB0aGUgcnVuIGNhbGxiYWNrIGNvbXBsZXRlcyB3aGVuIHRoZSBoYXJkd2FyZSBJU1IKY2FsbHMg
djRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2guIEJ5IHRoZSB0aW1lIHJ1biByZXR1cm5z
IGhlcmUsIHRoZQpidWZmZXJzIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJldHVybmVkIHRvIHVz
ZXJzcGFjZSBhbmQgcG90ZW50aWFsbHkgdW5tYXBwZWQKb3IgZnJlZWQsIGxlYWRpbmcgdG8gYSB1
c2UtYWZ0ZXItZnJlZS4KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgdmRlY190cnlfZm10X21wKHN0
cnVjdCBhbWxfdmRlY19jdHggKmN0eCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCj4gKwkJCSAg
IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXApCj4gK3sKPiArCXN0cnVjdCBh
bWxfdmlkZW9fZm10ICpkZWNfZm10Owo+ICsJaW50IGksIGFsaWduOwo+ICsKPiArCWlmIChWNEwy
X1RZUEVfSVNfT1VUUFVUKHR5cGUpKQo+ICsJCWRlY19mbXQgPSAmY3R4LT5kZWNfZm10W0FNTF9G
TVRfU1JDXTsKPiArCWVsc2UKPiArCQlkZWNfZm10ID0gJmN0eC0+ZGVjX2ZtdFtBTUxfRk1UX0RT
VF07Cj4gKwo+ICsJcGl4X21wLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPiArCj4gKwlpZiAo
VjRMMl9UWVBFX0lTX09VVFBVVCh0eXBlKSkgewo+ICsJCXBpeF9tcC0+bnVtX3BsYW5lcyA9IGRl
Y19mbXQtPm51bV9wbGFuZXM7Cj4gKwkJcGl4X21wLT5waXhlbGZvcm1hdCA9IGRlY19mbXQtPmZv
dXJjYzsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIHVuY29uZGl0aW9uYWxseSBvdmVyd3Jp
dGUgdGhlIHVzZXItcmVxdWVzdGVkIHBpeGVsIGZvcm1hdCB3aXRoIHRoZQpjdXJyZW50IGFjdGl2
ZSBmb3JtYXQ/IFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBmcm9tIHF1ZXJ5
aW5nCnN1cHBvcnRlZCBmb3JtYXRzIHVzaW5nIFZJRElPQ19UUllfRk1UIHNpbmNlIHRoZWlyIHJl
cXVlc3RlZCBmb3JtYXQgaXMKYWdncmVzc2l2ZWx5IG92ZXJyaWRkZW4uCgpbIC4uLiBdCgo+ICtz
dGF0aWMgaW50IHZkZWNfc19mbXRfb3V0cHV0KHN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCwgc3Ry
dWN0IHY0bDJfZm9ybWF0ICpmKQo+ICt7Cj4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFu
ZSAqcGl4X21wID0gJmYtPmZtdC5waXhfbXA7Cj4gKwljb25zdCBzdHJ1Y3QgYW1sX3ZpZGVvX2Zt
dCAqb3V0X2ZtdDsKPiArCXN0cnVjdCB2YjJfcXVldWUgKnZxOwo+ICsJaW50IHJldDsKPiArCj4g
Kwl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIFY0TDJfQlVGX1RZUEVfVklERU9f
T1VUUFVUX01QTEFORSk7Cj4gKwlpZiAodmIyX2lzX2J1c3kodnEpICYmCj4gKwkgICAgcGl4X21w
LT5waXhlbGZvcm1hdCAhPSBjdHgtPnBpeF9mbXRbQU1MX0ZNVF9TUkNdLnBpeGVsZm9ybWF0KQo+
ICsJCXJldHVybiAtRUJVU1k7Cj4gKwo+ICsJb3V0X2ZtdCA9IGFtbF92ZGVjX2dldF92aWRlb19m
bXQoY3R4LT5kZXYsIHBpeF9tcC0+cGl4ZWxmb3JtYXQpOwo+ICsJaWYgKG91dF9mbXQpCj4gKwkJ
Y3R4LT5kZWNfZm10W0FNTF9GTVRfU1JDXSA9ICpvdXRfZm10Owo+ICsJZWxzZQo+ICsJCWRldl9k
YmcoJmN0eC0+ZGV2LT5wbGF0X2Rldi0+ZGV2LAo+ICsJCQkiJXMgZm10ICVkIG5vdCBzdXBwb3J0
ZWQsIHVzZSBkZWZhdWx0XG4iLCBfX2Z1bmNfXywKPiArCQkJcGl4X21wLT5waXhlbGZvcm1hdCk7
Cj4gKwo+ICsJcmV0ID0gdmRlY190cnlfZm10X21wKGN0eCwgZi0+dHlwZSwgcGl4X21wKTsKPiAr
CXNldF9waWNfaW5mbyhjdHgsIHBpeF9tcCwgZi0+dHlwZSk7Cj4gKwo+ICsJY3R4LT5waXhfZm10
W0FNTF9GTVRfU1JDXSA9ICpwaXhfbXA7Cj4gKwljdHgtPnBpeF9mbXRbQU1MX0ZNVF9EU1RdID0g
KnBpeF9tcDsKCltTZXZlcml0eTogSGlnaF0KQ2FuIHRoaXMgU19GTVQgY2FsbCBvbiB0aGUgT1VU
UFVUIHF1ZXVlIGNvcnJ1cHQgdGhlIENBUFRVUkUgcXVldWUncyBzdGF0ZT8KQnkgZGlyZWN0bHkg
YXNzaWduaW5nIHRvIGN0eC0+cGl4X2ZtdFtBTUxfRk1UX0RTVF0sIGNvbmZpZ3VyaW5nIHRoZSBi
aXRzdHJlYW0KZm9ybWF0IGNsb2JiZXJzIHRoZSByYXcgdW5jb21wcmVzc2VkIGZvcm1hdCBhbHJl
YWR5IGNvbmZpZ3VyZWQgb24gdGhlIENBUFRVUkUKcXVldWUuCgpbIC4uLiBdCgo+ICtzdGF0aWMg
aW50IHZiMm9wc192ZGVjX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNp
Z25lZCBpbnQgY291bnQpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IHZiMl9n
ZXRfZHJ2X3ByaXYocSk7Cj4gKwo+ICsJaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQocS0+dHlwZSkp
IHsKPiArCQljdHgtPmlzX291dHB1dF9zdHJlYW1vbiA9IDE7Cj4gKwkJaWYgKGFtbF92ZGVjX2lu
aXRfZGVjX2luc3QoY3R4KSA8IDApCj4gKwkJCXJldHVybiAtRUlOVkFMOwoKW1NldmVyaXR5OiBI
aWdoXQpTaG91bGQgdGhpcyBmYWlsdXJlIHBhdGggcmV0dXJuIHRoZSBxdWV1ZWQgYnVmZmVycyB0
byB0aGUgZnJhbWV3b3JrPwpXaGVuIHN0YXJ0X3N0cmVhbWluZyBmYWlscywgdGhlIHZpZGVvYnVm
MiBmcmFtZXdvcmsgcmVxdWlyZXMgdGhlIGRyaXZlciB0bwpyZXR1cm4gYWxsIHF1ZXVlZCBidWZm
ZXJzIChlLmcuIHVzaW5nIHZiMl9idWZmZXJfZG9uZSB3aXRoClZCMl9CVUZfU1RBVEVfUVVFVUVE
KSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSBzdGFsbHMgYW5kIHZpZGVvYnVmMiB3YXJucy4KClsgLi4u
IF0KCj4gK3N0YXRpYyB2b2lkIHZiMm9wc192ZGVjX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJf
cXVldWUgKnEpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2
X3ByaXYocSk7Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmID0gTlVMTCwgKmRz
dF9idWYgPSBOVUxMOwo+ICsKPiArCWFtbF92ZGVjX3JlbGVhc2VfaW5zdGFuY2UoY3R4KTsKCltT
ZXZlcml0eTogQ3JpdGljYWxdCklzIGl0IHNhZmUgdG8gcmVsZWFzZSB0aGUgY29kZWMgaW5zdGFu
Y2UgaGVyZSB3aGVuIG9ubHkgb25lIG9mIHRoZSBxdWV1ZXMKaXMgc3RvcHBlZD8KCklmIHVzZXJz
cGFjZSBzdG9wcyB0aGUgQ0FQVFVSRSBxdWV1ZSwgYW1sX3ZkZWNfcmVsZWFzZV9pbnN0YW5jZSBp
cyBjYWxsZWQsCndoaWNoIGZyZWVzIHRoZSBjb2RlYyBjb250ZXh0IGFuZCBudWxsaWZpZXMgY29k
ZWNfcHJpdi4gSWYgdGhlIE9VVFBVVCBxdWV1ZQppcyBzdGlsbCBzdHJlYW1pbmcsIHN1YnNlcXVl
bnQgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBWNEwyIGpvYnMgd2lsbApkZXJlZmVyZW5jZSB0aGUg
ZnJlZWQgb3IgTlVMTCBjb2RlY19wcml2LCBjYXVzaW5nIGEga2VybmVsIHBhbmljLgoKPiBkaWZm
IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfZHJ2
LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY19kcnYuYwo+
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZDYzY2JkNGY5ZTI2
ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv
dmRlYy9hbWxfdmRlY19kcnYuYwo+IEBAIC0wLDAgKzEsMjM5IEBACgpbIC4uLiBdCgo+ICtzdGF0
aWMgaW50IGZvcHNfdmNvZGVjX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVj
dCBhbWxfdmRlY19kZXYgKmRlY19kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwo+ICsJc3RydWN0
IGFtbF92ZGVjX2N0eCAqY3R4ID0gTlVMTDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWN0eCA9
IGt6YWxsb2Nfb2JqKCpjdHgsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJu
IC1FTk9NRU07Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGVjX2Rldi0+ZGV2X211dGV4KTsKPiArCWRl
Y19kZXYtPmRlY19jdHggPSBjdHg7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpEb2VzIHRoaXMgdW5j
b25kaXRpb25hbGx5IG92ZXJ3cml0ZSB0aGUgZ2xvYmFsIGRldmljZSBjb250ZXh0IHBvaW50ZXI/
CklmIG11bHRpcGxlIHByb2dyYW1zIG9wZW4gdGhlIHZpZGVvIGRldmljZSwgdGhlIGdsb2JhbCBw
b2ludGVyIGlzIG92ZXJ3cml0dGVuLgpTaW5jZSB0aGUgdGhyZWFkZWQgSVNSIHVuY29uZGl0aW9u
YWxseSB1c2VzIHRoZXNlIGdsb2JhbCBwb2ludGVycyB0byBsb29rCnVwIHRoZSBhY3RpdmUgY29u
dGV4dCwgYW4gaW50ZXJydXB0IGdlbmVyYXRlZCBieSBvbmUgY2xpZW50IHdpbGwgYmUgcHJvY2Vz
c2VkCnVzaW5nIGFub3RoZXIgY2xpZW50J3MgY29udGV4dCwgbGVhZGluZyB0byBzdGF0ZSBjb3Jy
dXB0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZQpjcmFzaGVzLgoKWyAuLi4gXQoKPiArc3RhdGljIGlu
dCBmb3BzX3Zjb2RlY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3Qg
YW1sX3ZkZWNfZGV2ICpkZWNfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKPiArCXN0cnVjdCBh
bWxfdmRlY19jdHggKmN0eCA9IGZoX3RvX2RlY19jdHgoZmlsZSk7Cj4gKwo+ICsJbXV0ZXhfbG9j
aygmZGVjX2Rldi0+ZGV2X211dGV4KTsKCltTZXZlcml0eTogSGlnaF0KSXMgdGhlIGxpZmV0aW1l
IG9mIGRlY19kZXYgcHJvcGVybHkgbWFuYWdlZCBoZXJlPwpJbiBhbWxfdmRlY19kcnZfcHJvYmUs
IHRoZSBhbWxfdmRlY19kZXYgc3RydWN0IGlzIGFsbG9jYXRlZCB3aXRoCmRldm1fa3phbGxvYywg
dHlpbmcgaXQgdG8gdGhlIHBsYXRmb3JtIGRldmljZS4gSWYgdGhlIGRyaXZlciBpcyB1bmJvdW5k
CndoaWxlIHVzZXJzcGFjZSBzdGlsbCBob2xkcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciwgdGhl
IG1lbW9yeSBpcyBmcmVlZC4KV2hlbiB1c2Vyc3BhY2UgbGF0ZXIgY2xvc2VzIHRoZSBmaWxlIGRl
c2NyaXB0b3IsIGZvcHNfdmNvZGVjX3JlbGVhc2Ugd2lsbApkZXJlZmVyZW5jZSB0aGUgZnJlZWQg
bWVtb3J5IHdoZW4gYXR0ZW1wdGluZyB0byB0YWtlIHRoZSBtdXRleC4KClsgLi4uIF0KCj4gK3N0
YXRpYyBpbnQgYW1sX3ZkZWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp
Cj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19kZXYgKmRldjsKPiArCXN0cnVjdCB2aWRlb19kZXZp
Y2UgKnZmZF9kZWM7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3Owo+ICsJaW50IHJldCA9IDA7
Cj4gKwo+ICsJZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGV2KSwgR0ZQ
X0tFUk5FTCk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkNvdWxkIHR5aW5nIHRoaXMgc3RydWN0dXJlIHRv
IHRoZSBwbGF0Zm9ybSBkZXZpY2UgdXNpbmcgZGV2bV9remFsbG9jCmxlYWQgdG8gdXNlLWFmdGVy
LWZyZWUgYnVncyBhcyBkZXNjcmliZWQgaW4gdGhlIHJlbGVhc2UgZm9wIGFib3ZlPwoKWyAuLi4g
XQoKPiArCWRldi0+cHZkZWNfZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+
ZGV2KTsKPiArCXJldCA9IGRldi0+cHZkZWNfZGF0YS0+cmVxX2h3X3Jlc291cmNlKGRldik7Cj4g
KwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGVycl9od19pbml0Owo+ICsKPiArCWRldi0+bTJtX2Rl
dl9kZWMgPSB2NGwyX20ybV9pbml0KCZhbWxfdmRlY19tMm1fb3BzKTsKPiArCWlmIChJU19FUlIo
ZGV2LT5tMm1fZGV2X2RlYykpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxl
ZCB0byBpbml0IG1lbTJtZW0gZGVjIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUigoX19m
b3JjZSB2b2lkICopZGV2LT5tMm1fZGV2X2RlYyk7Cj4gKwkJZ290byBlcnJfaHdfaW5pdDsKPiAr
CX0KPiArCj4gKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkX2RlYywgVkZMX1RZUEVf
VklERU8sIC0xKTsKPiArCWlmIChyZXQpIHsKPiArCQl2NGwyX2VycigmZGV2LT52NGwyX2Rldiwg
IkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKPiArCQlnb3RvIGVycl92aWRfZGV2
X3JlZ2lzdGVyOwo+ICsJfQoKWyAuLi4gXQoKPiArZXJyX21lZGlhX2Rldl9yZWdpc3RlcjoKPiAr
CXY0bDJfbTJtX3VucmVnaXN0ZXJfbWVkaWFfY29udHJvbGxlcihkZXYtPm0ybV9kZXZfZGVjKTsK
PiArZXJyb3JfbTJtX21jX3JlZ2lzdGVyOgo+ICsJbWVkaWFfZGV2aWNlX2NsZWFudXAoJmRldi0+
bWRldik7Cj4gK2Vycl92aWRfZGV2X3JlZ2lzdGVyOgo+ICsJdjRsMl9tMm1fcmVsZWFzZShkZXYt
Pm0ybV9kZXZfZGVjKTsKPiArZXJyX2h3X2luaXQ6Cj4gKwlkZXYtPmRlY19odyA9IE5VTEw7Cgpb
U2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBlcnJvciBwYXRoIGxlYWsgdGhlIHJlcXVlc3RlZCBo
YXJkd2FyZSByZXNvdXJjZXM/CklmIHByb2JlIGZhaWxzIGFmdGVyIHJlcV9od19yZXNvdXJjZSBj
b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCBqdW1waW5nIHRvCmVycl9od19pbml0IGNsZWFycyB0aGUg
cG9pbnRlciB3aXRob3V0IGludm9raW5nIHRoZSBjb3JyZXNwb25kaW5nCmRlc3Ryb3lfaHdfcmVz
b3VyY2UgY2FsbGJhY2ssIHBlcm1hbmVudGx5IGxlYWtpbmcgcG93ZXIgZG9tYWlucywgZGV2aWNl
CmxpbmtzLCBjbG9ja3MsIGFuZCBJUlFzLgoKPiArZXJyX2RlY19tZW1faW5pdDoKPiArCXZpZGVv
X2RldmljZV9yZWxlYXNlKHZmZF9kZWMpOwo+ICtlcnJfZGV2aWNlX2FsbG9jOgo+ICsJdjRsMl9k
ZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cgpb
U2V2ZXJpdHk6IEhpZ2hdCklzIGEgY2FsbCB0byB2aWRlb191bnJlZ2lzdGVyX2RldmljZSBtaXNz
aW5nIG9uIHRoZSBlcnJvciBwYXRocyBhZnRlcgp2aWRlb19yZWdpc3Rlcl9kZXZpY2Ugc3VjY2Vl
ZHM/CklmIHByb2JlIGZhaWxzIGxhdGUgKGxpa2UgZHVyaW5nIG1lZGlhX2RldmljZV9yZWdpc3Rl
ciksIHRoZSBlcnJvciBjbGVhbnVwCmludm9rZXMgdmlkZW9fZGV2aWNlX3JlbGVhc2Ugd2hpY2gg
aW1tZWRpYXRlbHkgZnJlZXMgdGhlIG1lbW9yeSwgYnV0CmxlYXZlcyB0aGUgYWN0aXZlIHZpZGVv
IG5vZGUgcmVnaXN0ZXJlZC4gSWYgdXNlcnNwYWNlIG9wZW5zIGl0LCBpdCB3aWxsIGFjY2Vzcwp0
aGUgZGVhbGxvY2F0ZWQgc3RydWN0dXJlLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w
bGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv
cm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2h3LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu
ZGV4IDAwMDAwMDAwMDAwMDAuLjI5YTE5NWViNjg3MjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv
ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYwoKWyAuLi4g
XQoKPiArdm9pZCBhbWxfc3RvcF92ZGVjX2h3KHN0cnVjdCBhbWxfdmRlY19odyAqaHcpCj4gK3sK
PiArCXUzMiByZWdfdmFsID0gMDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmVnbWFwX3dyaXRlKGh3
LT5tYXBbRE9TX0JVU10sIE1QU1IsIDApOwo+ICsJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JV
U10sIENQU1IsIDApOwo+ICsKPiArCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhyZWFk
X2Rvc19yZWcsIHJlZ192YWwsCj4gKwkJCQkgICAgICAgIShyZWdfdmFsICYgMHg4MDAwKSwKPiAr
CQkJCSAgICAgICAxMCwgMTAwMDAwLCB0cnVlLAo+ICsJCQkJICAgICAgIGh3LCBJTUVNX0RNQV9D
VFJMKTsKPiArCj4gKwlyZXQgPSByZWFkX3BvbGxfdGltZW91dF9hdG9taWMocmVhZF9kb3NfcmVn
LCByZWdfdmFsLAo+ICsJCQkJICAgICAgICEocmVnX3ZhbCAmIDB4ODAwMCksCj4gKwkJCQkgICAg
ICAgMTAsIDEwMDAwMCwgdHJ1ZSwKPiArCQkJCSAgICAgICBodywgTE1FTV9ETUFfQ1RSTCk7Cj4g
Kwo+ICsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKHJlYWRfZG9zX3JlZywgcmVnX3Zh
bCwKPiArCQkJCSAgICAgICAhKHJlZ192YWwgJiAweGZmZiksCj4gKwkJCQkgICAgICAgMTAsIDgw
MDAwMCwgdHJ1ZSwKPiArCQkJCSAgICAgICBodywgV1JSU1BfTE1FTSk7CgpbU2V2ZXJpdHk6IEhp
Z2hdCkNvdWxkIHRoaXMgYXRvbWljIHBvbGwgdGltZW91dCBjYXVzZSBhIHNvZnQgbG9ja3VwPwpy
ZWFkX3BvbGxfdGltZW91dF9hdG9taWMgdXNlcyB1ZGVsYXkgdG8gYnVzaWx5IHNwaW4gdGhlIHBy
b2Nlc3NvciB3aXRob3V0CnlpZWxkaW5nLiBTcGlubmluZyBmb3IgdXAgdG8gODAwbXMgc2V2ZXJl
bHkgdmlvbGF0ZXMga2VybmVsIGxhdGVuY3kgY29uc3RyYWludHMKYW5kIHdpbGwgdHJpZ2dlciBD
UFUgc3RhbGxzIGFuZCBzb2Z0IGxvY2t1cCB3YXJuaW5ncy4KClsgLi4uIF0KCj4gK3N0YXRpYyBp
bnQgcG1fdmRlY19wb3dlcl9kb21haW5faW5pdChzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3KQo+ICt7
Cj4gKwlpbnQgaSwgZXJyOwo+ICsJY29uc3Qgc3RydWN0IHBvd2VyX21hbmFnZXJfcyAqcG0gPSBo
dy0+cG07Cj4gKwlzdHJ1Y3QgcG1fcGRfcyAqcGQgPSBwbS0+cGRfZGF0YTsKPiArCj4gKwltdXRl
eF9pbml0KCZody0+cG1fbXV0ZXgpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBWREVDX01BWDsg
aSsrKSB7Cj4gKwkJcGRbaV0uZGV2ID0gZGV2X3BtX2RvbWFpbl9hdHRhY2hfYnlfbmFtZShody0+
ZGV2LCBwZFtpXS5uYW1lKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwocGRbaV0uZGV2KSkgewo+
ICsJCQllcnIgPSBQVFJfRVJSKHBkW2ldLmRldik7Cj4gKwkJCWRldl9kYmcoaHctPmRldiwgIkdl
dCAlcyBmYWlsZWQsIHBtLWRvbWFpbjogJWRcbiIsCj4gKwkJCQlwZFtpXS5uYW1lLCBlcnIpOwo+
ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXBkW2ldLmxpbmsgPSBkZXZpY2VfbGlua19h
ZGQoaHctPmRldiwgcGRbaV0uZGV2LAo+ICsJCQkJCSAgICAgRExfRkxBR19QTV9SVU5USU1FIHwK
PiArCQkJCQkgICAgIERMX0ZMQUdfU1RBVEVMRVNTKTsKPiArCQlpZiAoSVNfRVJSX09SX05VTEwo
cGRbaV0ubGluaykpIHsKPiArCQkJZGV2X2Vycihody0+ZGV2LCAiQWRkaW5nICVzIGRldmljZSBs
aW5rIGZhaWxlZCFcbiIsIHBkW2ldLm5hbWUpOwo+ICsJCQlyZXR1cm4gLUVOT0RFVjsKPiArCQl9
CgpbU2V2ZXJpdHk6IEhpZ2hdCkNhbiBwZFtpXS5kZXYgZW5kIHVwIHN0b3JpbmcgYW4gRVJSX1BU
UiBpZiBkZXZfcG1fZG9tYWluX2F0dGFjaF9ieV9uYW1lIGZhaWxzPwpJZiBhbiBFUlJfUFRSIGlz
IHJldHVybmVkLCBJU19FUlJfT1JfTlVMTCBjYXRjaGVzIGl0LCBidXQgcGRbaV0uZGV2IHJldGFp
bnMKdGhlIGVycm9yIHBvaW50ZXIuIExhdGVyLCBpbiBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dl
cl9vbiwgdGhlIGNvZGUgY2hlY2tzCmlmIChkZXYpLiBTaW5jZSBFUlJfUFRSIGlzIG5vbi1OVUxM
LCB0aGUgY2hlY2sgcGFzc2VzLCBhbmQgdGhlIGVycm9yIHBvaW50ZXIKaXMgc2VudCBkaXJlY3Rs
eSBpbnRvIHBtX3J1bnRpbWVfZ2V0X3N5bmMsIGNhdXNpbmcgYSBrZXJuZWwgcGFuaWMuCgpbU2V2
ZXJpdHk6IE1lZGl1bV0KRG9lcyB0aGlzIGVycm9yIHBhdGggbGVhayBwcmV2aW91c2x5IGF0dGFj
aGVkIGRvbWFpbnM/CklmIGRldmljZV9saW5rX2FkZCBmYWlscyBvbiB0aGUgc2Vjb25kIGl0ZXJh
dGlvbiwgcmV0dXJuaW5nIC1FTk9ERVYgZGlyZWN0bHkKYnlwYXNzZXMgY2xlYW51cCAoZGV2aWNl
X2xpbmtfZGVsIC8gZGV2X3BtX2RvbWFpbl9kZXRhY2gpIGZvciB0aGUgc3VjY2Vzc2Z1bApmaXJz
dCBpdGVyYXRpb24uCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBwbV92ZGVjX3Bvd2VyX2RvbWFp
bl9wb3dlcl9vbihzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LCBpbnQgaWQpCj4gK3sKPiArCWNvbnN0
IHN0cnVjdCBwb3dlcl9tYW5hZ2VyX3MgKnBtID0gaHctPnBtOwo+ICsJc3RydWN0IGRldmljZSAq
ZGV2ID0gcG0tPnBkX2RhdGFbaWRdLmRldjsKPiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpnYXRl
X25vZGUgPSBOVUxMOwo+ICsKPiArCWlmIChpZCA9PSBWREVDKQo+ICsJCWdhdGVfbm9kZSA9IHZk
ZWNfZ2V0X2Nsa19ieV9uYW1lKGh3LCAidmRlYyIpOwo+ICsJZWxzZSBpZiAoaWQgPT0gSFZERUMp
Cj4gKwkJZ2F0ZV9ub2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJoZXZjZiIpOwoKW1Nl
dmVyaXR5OiBIaWdoXQpJcyB0aGUgZG9zIGNsb2NrIG1pc3NpbmcgZnJvbSBiZWluZyBlbmFibGVk
IGhlcmU/ClRoZSBkb3MgY2xvY2sgaXMgZmV0Y2hlZCBpbiB2ZGVjX2Nsb2NrX2dhdGVfaW5pdCwg
YnV0IHRoaXMgZnVuY3Rpb24gb25seQpjaGVja3MgZm9yIHZkZWMgYW5kIGhldmNmIHRvIGVuYWJs
ZS4gSWYgdGhlIGRvcyBjbG9jayByZW1haW5zIGRpc2FibGVkLApzdWJzZXF1ZW50IGFjY2Vzc2Vz
IHRvIHRoZSBET1NfQlVTIGNvdWxkIHN0YWxsIHRoZSBzeXN0ZW0gYnVzLgoKWyAuLi4gXQoKPiAr
c3RhdGljIHZvaWQgdmRlY19wb3dlcm9uKHN0cnVjdCBhbWxfdmRlY19odyAqaHcsIGVudW0gdmRl
Y190eXBlX2UgY29yZSkKPiArewo+ICsJaWYgKGNvcmUgPj0gVkRFQ19NQVgpCj4gKwkJcmV0dXJu
Owo+ICsKPiArCW11dGV4X2xvY2soJmh3LT5wbV9tdXRleCk7Cj4gKwlpZiAoIWh3LT5wbS0+cGRf
ZGF0YVtjb3JlXS5kZXYpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJaHctPnBtLT5wZF9kYXRhW2Nv
cmVdLnJlZl9jb3VudCsrOwo+ICsJaWYgKGh3LT5wbS0+cGRfZGF0YVtjb3JlXS5yZWZfY291bnQg
PiAxKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmIChody0+cG0tPnBvd2VyX3N0YXRlKGh3LCBj
b3JlKSkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlody0+cG0tPnBvd2VyX29uKGh3LCBjb3JlKTsK
PiArCj4gK291dDoKPiArCW11dGV4X3VubG9jaygmaHctPnBtX211dGV4KTsKPiArfQoKW1NldmVy
aXR5OiBIaWdoXQpEb2VzIHNraXBwaW5nIHBvd2VyX29uIGhlcmUgYnJlYWsgdGhlIFBNIHVzYWdl
IGNvdW50cyBhbmQgY2xvY2sgYmFsYW5jaW5nPwpJZiBody0+cG0tPnBvd2VyX3N0YXRlIGlzIHRy
dWUsIHRoZSBkcml2ZXIganVtcHMgdG8gb3V0IHdpdGhvdXQgY2FsbGluZwpwb3dlcl9vbi4gSG93
ZXZlciwgcG93ZXJfb24gaXMgcmVzcG9uc2libGUgZm9yIGNsa19wcmVwYXJlX2VuYWJsZSBhbmQK
cG1fcnVudGltZV9nZXRfc3luYy4gQnkgYnlwYXNzaW5nIGl0LCB0aGUgY2xvY2sgaXNuJ3QgcHJl
cGFyZWQsIGJ1dAp2ZGVjX3Bvd2Vyb2ZmIHdpbGwgdW5jb25kaXRpb25hbGx5IGV4ZWN1dGUgcG93
ZXJfb2ZmLCBkaXNhYmxpbmcgdGhlCmNsb2NrIGFuZCB0cmlnZ2VyaW5nIGEgUE0gcHV0IHVuZGVy
Zmxvdy4KClsgLi4uIF0KCj4gK2ludCBkZXZfcmVxdWVzdF9od19yZXNvdXJjZXModm9pZCAqcHJp
dikKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gKHN0cnVjdCBhbWxfdmRlY19k
ZXYgKilwcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodzsKPiArCXN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNtX25wOwo+ICsJdm9pZCBf
X2lvbWVtICpyZWdfYmFzZVtNQVhfUkVHX0JVU107Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+
ICsJaW50IGk7Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwo+ICsJaWYgKCFkZXYgfHwgIWRldi0+ZGVj
X2h3KQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlwZGV2ID0gZGV2LT5wbGF0X2RldjsKPiArCWh3
ID0gZGV2LT5kZWNfaHc7Cj4gKwlody0+ZGV2ID0gJnBkZXYtPmRldjsKClsgLi4uIF0KCj4gKwlz
bV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsICJzZWN1cmUtbW9uaXRv
ciIsIDApOwo+ICsJaWYgKElTX0VSUihzbV9ucCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHctPmNh
bnZhcyk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgb2ZfcGFyc2VfcGhhbmRsZSByZXR1cm4gTlVM
TCBvbiBmYWlsdXJlIHJhdGhlciB0aGFuIGFuIEVSUl9QVFI/CklmIHRoZSBzZWN1cmUtbW9uaXRv
ciBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBzbV9ucCBpcyBOVUxMLCBtZWFuaW5nIElTX0VSUgpldmFs
dWF0ZXMgdG8gZmFsc2UuIFRoZSBkcml2ZXIgd2lsbCB0aGVuIHBhc3MgTlVMTCBpbnRvIG1lc29u
X3NtX2dldCwgd2hpY2gKbGlrZWx5IGRlcmVmZXJlbmNlcyBpdCwgcmVzdWx0aW5nIGluIGEga2Vy
bmVsIHBhbmljLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2lj
L3ZkZWMvYW1sX3ZkZWNfdGVlX2Z3LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMv
dmRlYy9hbWxfdmRlY190ZWVfZncuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw
MDAwMDAwMDAwMC4uYWQ0MTU2MjQ5ZjU1OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz
L21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY190ZWVfZncuYwoKWyAuLi4gXQoK
PiArc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmRhdGEs
IHNpemVfdCAqc2l6ZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7
Cj4gKwlpbnQgcmV0Owo+ICsJdm9pZCAqYnVmOwo+ICsKPiArCXJldCA9IHJlcXVlc3RfZmlybXdh
cmUoJmZ3LCBGSVJNV0FSRV9QQVRILCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl
dDsKPiArCj4gKwkvKiBnZXQgcmlkIG9mIHRoZSBmaXJzdCAzMksgYnl0ZXMgcGxhaW50ZXh0ICov
Cj4gKwlidWYgPSBremFsbG9jKChmdy0+c2l6ZSAtIFVDT0RFX0hFQURFUl9TSVpFKSwgR0ZQX0tF
Uk5FTCk7CgpbU2V2ZXJpdHk6IEhpZ2hdClNob3VsZCB0aGVyZSBiZSBhIGJvdW5kcyBjaGVjayBv
biBmdy0+c2l6ZSBiZWZvcmUgc3VidHJhY3Rpbmc/CklmIHRoZSBsb2FkZWQgZmlybXdhcmUgZmls
ZSBpcyBzbWFsbGVyIHRoYW4gVUNPREVfSEVBREVSX1NJWkUgKDMyS0IpLCB0aGlzCnN1YnRyYWN0
aW9uIHVuZGVyZmxvd3MgdG8gYSBtYXNzaXZlIHZhbHVlLCBsZWFkaW5nIHRvIGEgaHVnZSBremFs
bG9jIGZhaWx1cmUKb3Igb3V0LW9mLWJvdW5kcyBoZWFwIG9wZXJhdGlvbnMuCgo+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMgYi9kcml2ZXJz
L21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9oMjY0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjc1ODRkNWViMjBlYzgKPiAtLS0gL2Rldi9udWxsCj4g
KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jCgpbIC4uLiBd
Cgo+ICtzdGF0aWMgaW50IGgyNjRfcHJlcGFyZV9pbnB1dChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj
dHgpCj4gK3sKClsgLi4uIF0KCj4gKwlyZWdtYXBfd3JpdGUoaHctPm1hcFtET1NfQlVTXSwgVkxE
X01FTV9WSUZJRk9fUlAsCj4gKwkJICAgICByb3VuZF9kb3duKHNyY19kbWEsIFZERUNfRklGT19B
TElHTikpOwo+ICsJZHVtbXkgPSBwYXlsb2FkX3NpemUgKyBWTERfUEFERElOR19TSVpFOwo+ICsJ
cmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JVU10sIFZMRF9NRU1fVklGSUZPX1dQLAo+ICsJCSAg
ICAgcm91bmRfZG93bigoc3JjX2RtYSArIGR1bW15KSwgVkRFQ19GSUZPX0FMSUdOKSk7CgpbU2V2
ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBjYXVzZSB0aGUgaGFyZHdhcmUgdG8gcmVhZCBvdXQtb2Yt
Ym91bmRzIG1lbW9yeT8KQWRkaW5nIFZMRF9QQURESU5HX1NJWkUgKDEwMjQgYnl0ZXMpIHRvIHRo
ZSBwYXlsb2FkIHNpemUgaW1wbGljaXRseQp0ZWxscyB0aGUgaGFyZHdhcmUgc3RyZWFtIHBhcnNl
ciB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgdXNlci1wcm92aWRlZApWNEwyIGJ1ZmZlciBw
YXlsb2FkLiBJZiB0aGUgcGF5bG9hZCBzaXplIGFsaWducyBjbG9zZWx5IHdpdGggdGhlIGVuZCBv
Zgp0aGUgSU9NTVUvVk1BIG1hcHBpbmcsIHRoaXMgY2F1c2VzIE9PQiBETUEgcmVhZHMgYW5kIElP
TU1VIGZhdWx0cy4KClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIGNvbmZpZ19zcHNfcGFyYW1zKHN0
cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkgICAgICB1bnNpZ25lZCBzaG9ydCAq
c3BzX2Jhc2UsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9zcHMgKnNw
cykKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2N0eCAqY3R4ID0gaDI2NF9jdHgtPnY0bDJfY3R4
Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiAr
CXUzMiBjZmdfdG1wID0gMDsKPiArCXUzMiBmcmFtZV9zaXplOwo+ICsJdTMyIG9mZnNldCA9IDA7
Cj4gKwl1bnNpZ25lZCBzaG9ydCBkYXRhX3RtcFsweDEwMF07Cj4gKwlpbnQgaSwgaWk7Cj4gKwo+
ICsJbWVtc2V0KHNwc19iYXNlLCAwLCAweDEwMCk7Cj4gKwo+ICsJaDI2NF9jdHgtPmZyYW1lX3dp
ZHRoID0gKHNwcy0+cGljX3dpZHRoX2luX21ic19taW51czEgKyAxKSA8PCA0Owo+ICsJaDI2NF9j
dHgtPmZyYW1lX2hlaWdodCA9IChzcHMtPnBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSAr
IDEpIDw8IDQ7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpBcmUgdGhlIGRpbWVuc2lvbnMgcHJvdmlk
ZWQgaW4gdGhlIHVudHJ1c3RlZCBTUFMgdmFsaWRhdGVkIGFnYWluc3QgdGhlCmFjdHVhbCBhbGxv
Y2F0ZWQgVjRMMiBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZT8KClRoZSB1c2VyLXN1cHBsaWVkIFNQ
UyBkaW1lbnNpb25zIGFyZSB0cmFuc2xhdGVkIHRvIGNhbnZhcyBkaW1lbnNpb25zIGhlcmUuCklm
IHVzZXJzcGFjZSBwcm92aWRlcyBtYXNzaXZlIFNQUyBkaW1lbnNpb25zIGJ1dCBxdWV1ZXMgYSBz
bWFsbCBkZXN0aW5hdGlvbgpidWZmZXIsIHRoZSBoYXJkd2FyZSBkZWNvZGVyIHdpbGwgd3JpdGUg
b3V0IG9mIGJvdW5kcyBkdXJpbmcgZGVjb2RpbmcsCmNvcnJ1cHRpbmcgYWRqb2luaW5nIGtlcm5l
bCBwaHlzaWNhbCBtZW1vcnkuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBjb25maWdfZGVjb2Rl
X2NhbnZhcyhzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LAo+ICsJCQkJIHN0cnVjdCBoMjY0X2RlY29k
ZV9idWZfc3BlYyAqYnVmX3NwZWMsCj4gKwkJCQkgdTMyIG1iX3dpZHRoLCB1MzIgbWJfaGVpZ2h0
KQo+ICt7Cj4gKwlpbnQgY2FudmFzX2FsbG9jX3Jlc3VsdCA9IDA7Cj4gKwlpbnQgYmxrbW9kZSA9
IDB4MDsKPiArCj4gKwljYW52YXNfYWxsb2NfcmVzdWx0ID0gbWVzb25fY2FudmFzX2FsbG9jKGh3
LT5jYW52YXMsICZidWZfc3BlYy0+eV9jYW52YXNfaW5kZXgpOwo+ICsJY2FudmFzX2FsbG9jX3Jl
c3VsdCA9IG1lc29uX2NhbnZhc19hbGxvYyhody0+Y2FudmFzLCAmYnVmX3NwZWMtPnVfY2FudmFz
X2luZGV4KTsKCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGUgc2Vjb25kIGFzc2lnbm1lbnQgb3Zl
cndyaXRlIHRoZSBhbGxvY2F0aW9uIHJlc3VsdCBvZiB0aGUgZmlyc3Q/CklmIHRoZSBhbGxvY2F0
aW9uIG9mIHRoZSB5IGNhbnZhcyBmYWlscyBidXQgdGhlIHUgY2FudmFzIHN1Y2NlZWRzLCB0aGUK
ZmFpbHVyZSBpcyBtYXNrZWQsIGFuZCB0aGUgaGFyZHdhcmUgaXMgY29uZmlndXJlZCB3aXRoIGFu
IHVuaW5pdGlhbGl6ZWQKeV9jYW52YXNfaW5kZXguCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBy
ZW9yZGVyX3Nob3J0X3Rlcm0oc3RydWN0IHNsaWNlICpjdXJyX3NsaWNlLCBpbnQgY3VyX2xpc3Qs
Cj4gKwkJCSAgICAgICBpbnQgcGljX251bV9seCwgaW50ICpyZWZfaWR4X2x4KQo+ICt7Cj4gKwlz
dHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eCA9Cj4gKwkgICAgY29udGFpbmVyX29mKGN1cnJf
c2xpY2UsIHN0cnVjdCBhbWxfaDI2NF9jdHgsIG1zbGljZSk7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNf
Y3R4ICpjdHggPSBoMjY0X2N0eC0+djRsMl9jdHg7Cj4gKwlpbnQgY19pZHgsIG5faWR4Owo+ICsJ
aW50IG51bV9yZWZfaWR4X2x4X2FjdGl2ZTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3Bl
YyAqcGljX2x4ID0gTlVMTDsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqcmVmX2xp
c3RfcmVvcmRlcmVkOwoKWyAuLi4gXQoKPiArCWZvciAoY19pZHggPSBudW1fcmVmX2lkeF9seF9h
Y3RpdmU7IGNfaWR4ID4gKnJlZl9pZHhfbHg7IGNfaWR4LS0pCj4gKwkJbWVtY3B5KCZyZWZfbGlz
dF9yZW9yZGVyZWRbY19pZHhdLCAmcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4IC0gMV0sCj4gKwkJ
ICAgICAgIHNpemVvZihzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMpKTsKCltTZXZlcml0eTog
Q3JpdGljYWxdCklzIG51bV9yZWZfaWR4X2x4X2FjdGl2ZSBwcm9wZXJseSB2YWxpZGF0ZWQgYmVm
b3JlIHRoaXMgYmFja3dhcmRzIG1lbWNweT8KbnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMSBp
cyBwYXJzZWQgZnJvbSB0aGUgdW50cnVzdGVkIGJpdHN0cmVhbSBvcgp1c2VyLXN1cHBsaWVkIFBQ
UywgYW5kIGNhbiBiZSB1cCB0byA2NTUzNS4gZ2V0X3JlZl9saXN0X3NpemUgcmV0dXJucyB0aGlz
CnZhbHVlLCB3aGljaCBpcyB0aGVuIHVzZWQgYXMgYSBsb29wIGJvdW5kYXJ5IGZvciBtZW1jcHkg
b3ZlciB0aGUKZml4ZWQgMTctZWxlbWVudCByZWZfbGlzdDAgYXJyYXksIGNhdXNpbmcgbWFzc2l2
ZSBoZWFwIGJ1ZmZlciBvdmVyZmxvd3MuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBjb3B5X3Jl
Zl9saXN0KHN0cnVjdCBhbWxfaDI2NF9jdHggKmgyNjRfY3R4LCBpbnQgY3Vycl9saXN0KQo+ICt7
Cj4gKwlpZiAoY3Vycl9saXN0ID09IDApCj4gKwkJbWVtY3B5KGgyNjRfY3R4LT5yZWZfbGlzdDBf
dW5yZW9yZGVyZWQsIGgyNjRfY3R4LT5yZWZfbGlzdDAsCj4gKwkJICAgICAgIHNpemVvZihoMjY0
X2N0eC0+cmVmX2xpc3QwKSk7Cj4gKwllbHNlCj4gKwkJbWVtY3B5KGgyNjRfY3R4LT5yZWZfbGlz
dDFfdW5yZW9yZGVyZWQsIGgyNjRfY3R4LT5yZWZfbGlzdDAsCj4gKwkJICAgICAgIHNpemVvZiho
MjY0X2N0eC0+cmVmX2xpc3QxKSk7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIG1l
bWNweSBjb3B5IGZyb20gdGhlIHdyb25nIHNvdXJjZSBsaXN0PwpJdCBjb3BpZXMgaDI2NF9jdHgt
PnJlZl9saXN0MCBpbnRvIHJlZl9saXN0MV91bnJlb3JkZXJlZCBpbnN0ZWFkIG9mCmgyNjRfY3R4
LT5yZWZfbGlzdDEsIGJyZWFraW5nIEItZnJhbWUgcmVmZXJlbmNlIGxpc3QgcmVvcmRlcmluZy4K
ClsgLi4uIF0KCj4gK3N0YXRpYyB2b2lkIGNsZWFyX3VudXNlZF9jb2xfYnVmKHN0cnVjdCBhbWxf
aDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkJIHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNvZGVf
cGFyYW1zICpkZWNvZGUpCj4gK3sKPiArCWludCBpLCBjb2xfcG9jOwo+ICsKPiArCS8qIGZsdXNo
IGFsbCBjb2wgYnVmZmVycyB3aGVuIElEUiAqLwo+ICsJaWYgKGRlY29kZS0+ZmxhZ3MgPT0gVjRM
Ml9IMjY0X0RFQ09ERV9QQVJBTV9GTEFHX0lEUl9QSUMpIHsKCltTZXZlcml0eTogSGlnaF0KQ2Fu
IHRoaXMgZXF1YWxpdHkgY2hlY2sgZmFpbCBiZWNhdXNlIGZsYWdzIGlzIGEgYml0bWFzaz8KSWYg
ZGVjb2RlLT5mbGFncyBoYXMgYW5vdGhlciBiaXQgc2V0IChsaWtlIFY0TDJfSDI2NF9ERUNPREVf
UEFSQU1fRkxBR19GSUVMRF9QSUMpCmFsb25nc2lkZSBWNEwyX0gyNjRfREVDT0RFX1BBUkFNX0ZM
QUdfSURSX1BJQywgdGhlIHN0cmljdCBlcXVhbGl0eSBmYWlscy4gVGhpcwpwcmV2ZW50cyB0aGUg
bmVjZXNzYXJ5IGZsdXNoaW5nIG9mIGNvbG9jYXRlZCBidWZmZXJzIG9uIElEUiBmcmFtZXMuCgpb
IC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBoMjY0X2NvbmZpZ19kZWNvZGVfc3BlYyhzdHJ1Y3QgYW1s
X3ZkZWNfaHcgKmh3LCBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBh
bWxfaDI2NF9jdHggKmgyNjRfY3R4ID0gKHN0cnVjdCBhbWxfaDI2NF9jdHggKilody0+Y3Vycl9j
dHg7Cj4gKwlzdHJ1Y3QgdmRlY19oMjY0X3N0YXRlbGVzc19jdHJsX3JlZiAqY3RybHMgPSAmaDI2
NF9jdHgtPmN0cmxfcmVmOwo+ICsJc3RydWN0IHY0bDJfY3RybF9oMjY0X2RlY29kZV9wYXJhbXMg
KmRlY29kZSA9Cj4gKwkgICAgKHN0cnVjdCB2NGwyX2N0cmxfaDI2NF9kZWNvZGVfcGFyYW1zICop
Y3RybHMtPmRlY29kZTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqYnVmX3NwZWNf
bDAsICpidWZfc3BlY19sMTsKClsgLi4uIF0KCj4gKwkJYnVmX3NwZWNfbDAgPSBmaW5kX3NwZWNf
YnlfZHBiX2luZGV4KGgyNjRfY3R4LCBpLCAwKTsKPiArCQlpZiAoYnVmX3NwZWNfbDApIHsKPiAr
CQkJYnVmX3NwZWNfbDAtPmNhbnZhc19wb3MgPQo+ICsJCQkgICAgZ2V0X2NhbnZhc19wb3NfYnlf
cG9jKGgyNjRfY3R4LAo+ICsJCQkJCQkgIGRwYi0+dG9wX2ZpZWxkX29yZGVyX2NudCk7CgpbIC4u
LiBdCgo+ICsJCQlidWZfc3BlY19sMC0+eV9kbWFfYWRkciA9Cj4gKwkJCQl2YjJfZG1hX2NvbnRp
Z19wbGFuZV9kbWFfYWRkcih2YiwgMCk7Cj4gKwkJCWlmIChjdHgtPnBpY19pbmZvLnBsYW5lX251
bSA+IDEpCj4gKwkJCQlidWZfc3BlY19sMC0+Y19kbWFfYWRkciA9Cj4gKwkJCQkgICAgdmIyX2Rt
YV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIDEpOwo+ICsJCQllbHNlCj4gKwkJCQlidWZfc3Bl
Y19sMC0+Y19kbWFfYWRkciA9Cj4gKwkJCQkgICAgYnVmX3NwZWNfbDAtPnlfZG1hX2FkZHIgKwo+
ICsJCQkJICAgIGN0eC0+cGljX2luZm8uZmJfc2l6ZVswXTsKCltTZXZlcml0eTogQ3JpdGljYWxd
CklzIGN0eC0+cGljX2luZm8ucGxhbmVfbnVtIGFjY3VyYXRlIGhlcmUgZm9yIG11bHRpLXBsYW5h
ciBjYXB0dXJlIGZvcm1hdHM/CkluIHZkZWNfdHJ5X2ZtdF9tcCBhbmQgc2V0X3BpY19pbmZvLCBw
bGFuZV9udW0gaXMgaGFyZGNvZGVkIHRvIDEgd2hlbgpmb3JtYXR0aW5nIHRoZSBvdXRwdXQgcXVl
dWUuIFdoZW4gdXNlcnNwYWNlIHNldHMgYSBtdWx0aS1wbGFuYXIgZm9ybWF0CihsaWtlIE5WMTJN
KSBvbiB0aGUgY2FwdHVyZSBxdWV1ZSwgcGxhbmVfbnVtIHJlbWFpbnMgMS4gVGhlIGNvZGUgaGVy
ZQpzdWJzZXF1ZW50bHkgY2FsY3VsYXRlcyB0aGUgVVYgYWRkcmVzcyBhcyB5X2RtYV9hZGRyICsg
ZmJfc2l6ZVswXSwgcG9pbnRpbmcKY29tcGxldGVseSBvdXQgb2YgYm91bmRzIG9mIHRoZSBhY3R1
YWwgWSBwbGFuZSBhbGxvY2F0aW9uLCBjYXVzaW5nIHNldmVyZQpETUEgbWVtb3J5IGNvcnJ1cHRp
b24uCgpbIC4uLiBdCgo+ICsJZm9yIChpID0gMDsgaSA8IFY0TDJfSDI2NF9OVU1fRFBCX0VOVFJJ
RVM7IGkrKykgewo+ICsJCXN0cnVjdCB2NGwyX2gyNjRfZHBiX2VudHJ5ICpkcGIgPSAmZGVjb2Rl
LT5kcGJbaV07Cj4gKwo+ICsJCWlmICghKGRwYi0+ZmxhZ3MgJiBWNEwyX0gyNjRfRFBCX0VOVFJZ
X0ZMQUdfQUNUSVZFKSkKPiArCQkJYnJlYWs7CgpbU2V2ZXJpdHk6IEhpZ2hdClNob3VsZCB0aGlz
IGJlIGEgY29udGludWUgaW5zdGVhZCBvZiBhIGJyZWFrPwpWNEwyIERQQiBhcnJheXMgY2FuIGJl
IHNwYXJzZS4gSWYgYW4gZW1wdHkgc2xvdCBpcyBlbmNvdW50ZXJlZCBlYXJseSBpbiB0aGUKaXRl
cmF0aW9uLCBicmVhayBleGl0cyB0aGUgbG9vcCBjb21wbGV0ZWx5LCBza2lwcGluZyBjb25maWd1
cmF0aW9uIGZvcgphbGwgc3Vic2VxdWVudCB2YWxpZCByZWZlcmVuY2UgZnJhbWVzIGluIHRoZSBh
cnJheS4KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgYWxsb2NfY29sb2NhdGVfY21hKHN0cnVjdCBh
bWxfaDI2NF9jdHggKmgyNjRfY3R4LAo+ICsJCQkgICAgICBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj
dHgpCj4gK3sKPiArCWludCBhbGxvY19zaXplID0gMDsKPiArCWludCBpOwo+ICsJc3RydWN0IGFt
bF92ZGVjX2h3ICpodzsKPiArCj4gKwlpZiAoaDI2NF9jdHgtPmNvbGxhdGVkX2NtYV92YWRkcikK
PiArCQlyZXR1cm4gMDsKPiArCj4gKwlodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiArCWlm
ICghaHcpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCS8qIDk2IDpjb2wgYnVmIHNpemUgZm9yIGVh
Y2ggbWIgKi8KPiArCWgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplID0gaDI2NF9jdHgtPm1iX3Rv
dGFsICogOTY7Cj4gKwlhbGxvY19zaXplID0gUEFHRV9BTElHTihoMjY0X2N0eC0+b25lX2NvbF9i
dWZfc2l6ZSAqCj4gKwkJCShoMjY0X2N0eC0+bWF4X251bV9yZWZfZnJhbWVzICsgQ09MX0JVRkZF
Ul9NQVJHSU4pKTsKPiArCWgyNjRfY3R4LT5jb2xsYXRlZF9jbWFfdmFkZHIgPSBkbWFfYWxsb2Nf
Y29oZXJlbnQoaHctPmRldiwgYWxsb2Nfc2l6ZSwKPiArCQkJCQkJCSAgJmgyNjRfY3R4LT5jb2xs
YXRlZF9jbWFfYWRkciwgR0ZQX0tFUk5FTCk7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpDYW4gdGhp
cyBhbGxvY2F0aW9uIHNpemUgd3JhcCBhcm91bmQ/CkJlY2F1c2UgdGhlIFNQUyBwYXJhbWV0ZXJz
IHVzZWQgdG8gY29tcHV0ZSBvbmVfY29sX2J1Zl9zaXplIGFuZAptYXhfbnVtX3JlZl9mcmFtZXMg
YXJlIHVudmFsaWRhdGVkLCB0aGUgbXVsdGlwbGljYXRpb24gY2FuIHdyYXAgYXJvdW5kIGluCjMy
LWJpdCBzcGFjZSwgYWxsb2NhdGluZyBhIHRpbnkgQ01BIGJ1ZmZlci4KClsgLi4uIF0KCj4gK3N0
YXRpYyBpbnQgaDI2NF9jb25maWdfZGVjb2RlX2J1ZihzdHJ1Y3QgYW1sX3ZkZWNfaHcgKmh3LAo+
ICsJCQkJICBzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpjdHgpCj4gK3sKClsgLi4uIF0KCj4gKwlpZiAo
aDI2NF9jdHgtPmN1cnJfc3BlYy5jb2xfYnVmX2luZGV4ID49IDAgJiYKPiArCSAgICBoMjY0X2N0
eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXggPCBoMjY0X2N0eC0+Y29sb2NhdGVkX2J1Zl9udW0p
IHsKPiArCQljb2xvY2F0ZV93cl9hZHIgPSBoMjY0X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHIgKwo+
ICsJCSAgICAoKGgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplICoKPiArCQkgICAgICBoMjY0X2N0
eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXgpID4+ICh1c2VfbW9kZV84eDhfZmxhZyA/IDIgOiAw
KSk7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpJcyBjb2xvY2F0ZV93cl9hZHIgaW5jb3JyZWN0bHkg
dHlwZWQgYXMgMzItYml0ICh1bnNpZ25lZCBpbnQpPwpBc3NpZ25pbmcgdGhlIDY0LWJpdCBjb2xs
YXRlZF9jbWFfYWRkciAoZG1hX2FkZHJfdCkgdG8gYSAzMi1iaXQgaW50ZWdlcgp0cnVuY2F0ZXMg
dGhlIHVwcGVyIGJpdHMuIFRoZSBzdWJzZXF1ZW50IGJvdW5kcyBjaGVjawooY29sb2NhdGVfd3Jf
YWRyICsgb25lX2NvbF9idWZfc2l6ZSA+IGNvbGxhdGVkX2NtYV9hZGRyX2VuZCkgd3JhcHMgYXJv
dW5kIGluCjMyLWJpdCBzcGFjZSwgYWxsb3dpbmcgb3V0LW9mLWJvdW5kcyBETUEgcHJvZ3JhbW1p
bmcuCgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCByZWxlYXNlX2NhbnZhc19pbmRleChzdHJ1Y3Qg
YW1sX3ZkZWNfaHcgKmh3LAo+ICsJCQkJIHN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqYnVm
KQo+ICt7Cj4gKwlpZiAoYnVmLT55X2NhbnZhc19pbmRleCA+PSAwKSB7Cj4gKwkJZGV2X2RiZyho
dy0+ZGV2LCAiZnJlZSB5X2NhbnZhcyAlZFxuIiwgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJ
bWVzb25fY2FudmFzX2ZyZWUoaHctPmNhbnZhcywgYnVmLT55X2NhbnZhc19pbmRleCk7Cj4gKwkJ
YnVmLT55X2NhbnZhc19pbmRleCA9IC0xOwo+ICsJfQoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRo
aXMgbmVnYXRpdmUgYm91bmRzIGNoZWNrIHdvcmsgb24gYSB1OCB2YXJpYWJsZT8KYnVmLT55X2Nh
bnZhc19pbmRleCBpcyBkZWNsYXJlZCBhcyBhIHU4LiBUaGUgY2hlY2sgPj0gMCB3aWxsIGFsd2F5
cyBiZQp0cnVlLCBjYXVzaW5nIGl0IHRvIGJsaW5kbHkgaW52b2tlIG1lc29uX2NhbnZhc19mcmVl
KGh3LT5jYW52YXMsIDI1NSkKd2hlbiBpdCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQsIHdoaWNoIGNv
cnJ1cHRzIG90aGVyIHN1YnN5c3RlbSBjYW52YXNlcy4KClsgLi4uIF0KCj4gK3N0YXRpYyBpcnFy
ZXR1cm5fdCBoMjY0X3RocmVhZGVkX2lzcl9mdW5jKGludCBpcnEsIHZvaWQgKnByaXYpCj4gK3sK
PiArCXUzMiBkZWNfc3RhdHVzOwo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gKHN0cnVj
dCBhbWxfdmRlY19kZXYgKilwcml2Owo+ICsJc3RydWN0IGFtbF9oMjY0X2N0eCAqaDI2NF9jdHgg
PSAoc3RydWN0IGFtbF9oMjY0X2N0eCAqKWRldi0+ZGVjX2h3LT5jdXJyX2N0eDsKPiArCXN0cnVj
dCBhbWxfdmRlY19jdHggKmN0eCA9IChzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICopZGV2LT5kZWNfY3R4
Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3ICpodyA9IHZkZWNfZ2V0X2h3KGN0eC0+ZGV2KTsKPiAr
CXVuc2lnbmVkIHNob3J0ICpwID0gKHVuc2lnbmVkIHNob3J0ICopaDI2NF9jdHgtPmxtZW1fYWRk
cjsKCltTZXZlcml0eTogSGlnaF0KSXMgaXQgc2FmZSB0byBibGluZGx5IGRlcmVmZXJlbmNlIGgy
NjRfY3R4IGhlcmU/CldoZW4gdGhlIHN0cmVhbSBpcyB0b3JuIGRvd24gaW4gYW1sX2gyNjRfZXhp
dCwgY3Vycl9jdHggaXMgYXNzaWduZWQgTlVMTC4KSWYgYSBzcHVyaW91cyBvciBkZWxheWVkIGhh
cmR3YXJlIGludGVycnVwdCBmaXJlcyBzaG9ydGx5IGFmdGVyLCB0aGlzIHdpbGwKdHJpZ2dlciBh
IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwYW5pYy4KClsgLi4uIF0KCj4gKwkJaWYgKGgyNjRf
Y29uZmlnX2RlY29kZV9idWYoaHcsIGN0eCkgPCAwKSB7Cj4gKwkJCWgyNjRfcmVsZWFzZV9kZWNv
ZGVfc3BlYyhodywgY3R4KTsKPiArCQkJY3R4LT5pbnRfY29uZCA9IDE7Cj4gKwkJCXdha2VfdXBf
aW50ZXJydXB0aWJsZSgmY3R4LT5xdWV1ZSk7Cj4gKwkJCWdvdG8gaXJxX2hhbmRsZWQ7Cj4gKwkJ
fQoKW1NldmVyaXR5OiBIaWdoXQpJcyB0aGUgdjRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5p
c2ggY2FsbCBtaXNzaW5nIGZyb20gdGhpcyBlcnJvciBwYXRoPwpUaGUgY29kZSB3YWtlcyB1cCB0
aGUgd2FpdGVyIHRocmVhZCwgYnV0IHNraXBzIHNpZ25hbGxpbmcgam9iIGNvbXBsZXRpb24gdG8K
dGhlIE0yTSBmcmFtZXdvcmsuIFRoZSBmcmFtZXdvcmsgd2lsbCBuZXZlciByZWdpc3RlciB0aGUg
am9iIGFzIGZpbmlzaGVkLApwZXJtYW5lbnRseSBoYW5naW5nIHRoZSBNMk0gcXVldWUgZm9yIGFu
eSBzdWJzZXF1ZW50IGpvYnMuCgo+ICsJCWlmIChoMjY0X2N0eC0+bmV3X3BpY19mbGFnID09IDEp
IHsKPiArCQkJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JVU10sIERQQl9TVEFUVVNfUkVHLCBI
MjY0X0FDVElPTl9ERUNPREVfTkVXUElDKTsKPiArCQkJZGV2X2RiZygmZGV2LT5wbGF0X2Rldi0+
ZGV2LCAiYWN0aW9uIGRlY29kZSBuZXcgcGljXG4iKTsKPiArCQkJaDI2NF9jdHgtPm5ld19waWNf
ZmxhZyA9IDA7Cj4gKwkJfSBlbHNlIHsKPiArCQkJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JV
U10sIERQQl9TVEFUVVNfUkVHLCBIMjY0X0FDVElPTl9ERUNPREVfU0xJQ0UpOwo+ICsJCQlkZXZf
ZGJnKCZkZXYtPnBsYXRfZGV2LT5kZXYsICJhY3Rpb24gZGVjb2RlIG5ldyBzbGljZVxuIik7Cj4g
KwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIMjY0X1NMSUNFX0RBVEFfRE9ORToKPiArCQloMjY0
X3JlbGVhc2VfZGVjb2RlX3NwZWMoaHcsIGN0eCk7Cj4gKwkJaDI2NF9jdHgtPmRlY29kZV9waWNf
Y291bnQrKzsKPiArCQljdHgtPmludF9jb25kID0gMTsKPiArCQl2NGwyX20ybV9idWZfZG9uZV9h
bmRfam9iX2ZpbmlzaChkZXYtPm0ybV9kZXZfZGVjLCBjdHgtPm0ybV9jdHgsCj4gKwkJCQkJCSBW
QjJfQlVGX1NUQVRFX0RPTkUpOwo+ICsJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3R4LT5xdWV1
ZSk7Cj4gKwkJYnJlYWs7CgpbU2V2ZXJpdHk6IEhpZ2hdCkNvdWxkIG1hcmtpbmcgdGhlIGpvYiBm
aW5pc2hlZCBoZXJlIGNhdXNlIGEgcmFjZSB3aXRoIGFtbF9zdG9wX3ZkZWNfaHc/CkNhbGxpbmcg
djRsMl9tMm1fYnVmX2RvbmVfYW5kX2pvYl9maW5pc2ggc2lnbmFscyB0aGUgZnJhbWV3b3JrIHRv
CmltbWVkaWF0ZWx5IGRlcXVldWUgYW5kIHN0YXJ0IHRoZSBuZXh0IGpvYi4gQ29uY3VycmVudGx5
LCB0aGUgYXdva2VuCnRocmVhZCBpbnNpZGUgYW1sX2gyNjRfZGVjX3J1biBwcm9jZWVkcyB0byBp
c3N1ZSBhbiBhbWxfc3RvcF92ZGVjX2h3LApzaHV0dGluZyBkb3duIHRoZSBoYXJkd2FyZSB1bml0
IG91dCBmcm9tIHVuZGVyIHRoZSBuZXdseSBzY2hlZHVsZWQgam9iLgoKWyAuLi4gXQoKPiAraW50
IGFtbF9oMjY0X2luaXQodm9pZCAqcHJpdikKPiArewo+ICsJc3RydWN0IGFtbF92ZGVjX2N0eCAq
Y3R4ID0gKHN0cnVjdCBhbWxfdmRlY19jdHggKilwcml2Owo+ICsJc3RydWN0IGFtbF92ZGVjX2h3
ICpkZWNfaHc7Cj4gKwlzdHJ1Y3QgYW1sX2gyNjRfY3R4ICpoMjY0X2N0eDsKPiArCWludCByZXQg
PSAwOwo+ICsKPiArCWgyNjRfY3R4ID0ga3phbGxvY19vYmooKmgyNjRfY3R4LCBHRlBfS0VSTkVM
KTsKPiArCWlmICghaDI2NF9jdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaDI2NF9j
dHgtPnY0bDJfY3R4ID0gY3R4Owo+ICsJZGVjX2h3ID0gdmRlY19nZXRfaHcoY3R4LT5kZXYpOwo+
ICsJaWYgKCFkZWNfaHcpCj4gKwkJcmV0dXJuIC0xOwoKW1NldmVyaXR5OiBNZWRpdW1dCkRvZXMg
dGhpcyBlcnJvciBwYXRoIGxlYWsgdGhlIGZyZXNobHkgYWxsb2NhdGVkIGgyNjRfY3R4IHN0cnVj
dHVyZT8KSWYgdmRlY19nZXRfaHcgcmV0dXJucyBOVUxMLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAt
MSB3aXRob3V0IGNhbGxpbmcKa2ZyZWUgb24gaDI2NF9jdHguCgpbIC4uLiBdCgo+ICtpbnQgYW1s
X2gyNjRfZGVjX3J1bih2b2lkICpwcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNfY3R4ICpj
dHggPSAoc3RydWN0IGFtbF92ZGVjX2N0eCAqKXByaXY7Cj4gKwlzdHJ1Y3QgYW1sX2gyNjRfY3R4
ICpoMjY0X2N0eCA9IChzdHJ1Y3QgYW1sX2gyNjRfY3R4ICopY3R4LT5jb2RlY19wcml2Owo+ICsJ
c3RydWN0IGFtbF92ZGVjX2h3ICpkZWNfaHcgPSB2ZGVjX2dldF9odyhjdHgtPmRldik7Cj4gKwlp
bnQgcmV0ID0gLTE7Cj4gKwlpbnQgaTsKClsgLi4uIF0KCj4gKwlhbWxfc3RhcnRfdmRlY19odyhk
ZWNfaHcpOwo+ICsJaDI2NF9jdHgtPmluaXRfZmxhZyA9IDE7Cj4gKwo+ICsJcmVnbWFwX3dyaXRl
KGRlY19ody0+bWFwW0RPU19CVVNdLCBEUEJfU1RBVFVTX1JFRywgSDI2NF9BQ1RJT05fU0VBUkNI
X0hFQUQpOwo+ICsKPiArCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGN0
eC0+cXVldWUsIGN0eC0+aW50X2NvbmQsCj4gKwkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMo
REVDT0RFUl9USU1FT1VUX01TKSk7CgpbU2V2ZXJpdHk6IEhpZ2hdCkRvZXMgc3luY2hyb25vdXNs
eSBibG9ja2luZyBpbnNpZGUgZGV2aWNlX3J1biB2aW9sYXRlIHRoZSBNMk0gUmVxdWVzdCBBUEk/
CklmIHRoaXMgdGltZW91dCB0cmlnZ2VycywgZGV2aWNlX3J1biByZXR1cm5zIGFuZCBjYWxsZXJz
IHR5cGljYWxseSBhc3N1bWUKdGhlIGpvYiBmYWlsZWQgYW5kIG1heSBmaW5pc2ggaXQuIEhvd2V2
ZXIsIHRoZSBkZWxheWVkIGhhcmR3YXJlIGludGVycnVwdApjb3VsZCBzdWJzZXF1ZW50bHkgZmly
ZSBhbmQgY2FsbCB2NGwyX20ybV9idWZfZG9uZV9hbmRfam9iX2ZpbmlzaCBmb3IgdGhlCnNhbWUg
am9iLCBkb3VibGUtZmluaXNoaW5nIHRoZSBjb250ZXh0IGFuZCBjb3JydXB0aW5nIE0yTSBmcmFt
ZXdvcmsgc3RhdGUuCgotLSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRl
di8jL3BhdGNoc2V0LzIwMjYwNzI0LWI0LXM0LXZkZWMtdXBzdHJlYW0tdjYtMC02MDcyYTdlZTc0
MjhAYW1sb2dpYy5jb20/cGFydD00CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxp
c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0
aW5mby9saW51eC1hbWxvZ2ljCg==