From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: Re: [PATCH v4 3/4] gpu: ipu-ic: Add complete image conversion
support with tiling
Date: Tue, 06 Sep 2016 11:26:20 +0200
Message-ID: <1473153980.2805.89.camel@pengutronix.de>
References: <1471481419-5917-1-git-send-email-steve_longerbeam@mentor.com>
<1471481419-5917-4-git-send-email-steve_longerbeam@mentor.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de
[IPv6:2001:67c:670:201:290:27ff:fe1d:cc33])
by gabe.freedesktop.org (Postfix) with ESMTPS id A536C89F75
for ; Tue, 6 Sep 2016 09:26:23 +0000 (UTC)
In-Reply-To: <1471481419-5917-4-git-send-email-steve_longerbeam@mentor.com>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: Steve Longerbeam
Cc: linux-fbdev@vger.kernel.org, Steve Longerbeam , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tomi.valkeinen@ti.com, plagnioj@jcrosoft.com
List-Id: dri-devel@lists.freedesktop.org
SGkgU3RldmUsCgpBbSBNaXR0d29jaCwgZGVuIDE3LjA4LjIwMTYsIDE3OjUwIC0wNzAwIHNjaHJp
ZWIgU3RldmUgTG9uZ2VyYmVhbToKPiBUaGlzIHBhdGNoIGltcGxlbWVudHMgY29tcGxldGUgaW1h
Z2UgY29udmVyc2lvbiBzdXBwb3J0IHRvIGlwdS1pYywKPiB3aXRoIHRpbGluZyB0byBzdXBwb3J0
IHNjYWxpbmcgdG8gYW5kIGZyb20gaW1hZ2VzIHVwIHRvIDQwOTZ4NDA5Ni4KPiBJbWFnZSByb3Rh
dGlvbiBpcyBhbHNvIHN1cHBvcnRlZC4KPiAKPiBUaGUgaW50ZXJuYWwgQVBJIGlzIHN1YnN5c3Rl
bSBhZ25vc3RpYyAobm8gVjRMMiBkZXBlbmRlbmN5IGV4Y2VwdAo+IGZvciB0aGUgdXNlIG9mIFY0
TDIgZm91cmNjIHBpeGVsIGZvcm1hdHMpLgo+IAo+IENhbGxlcnMgcHJlcGFyZSBmb3IgaW1hZ2Ug
Y29udmVyc2lvbiBieSBjYWxsaW5nCj4gaXB1X2ltYWdlX2NvbnZlcnRfcHJlcGFyZSgpLCB3aGlj
aCBpbml0aWFsaXplcyB0aGUgcGFyYW1ldGVycyBvZgo+IHRoZSBjb252ZXJzaW9uLgoKLi4uIGFu
ZCBwb3NzaWJseSBhbGxvY2F0ZXMgaW50ZXJtZWRpYXRlIGJ1ZmZlcnMgZm9yIHJvdGF0aW9uIHN1
cHBvcnQuClRoaXMgc2hvdWxkIGJlIGRvY3VtZW50ZWQgc29tZXdoZXJlLCB3aXRoIGEgbm9kZSB0
aGF0IHY0bDIgdXNlcnMgc2hvdWxkCmJlIGRvaW5nIHRoaXMgZHVyaW5nIFJFUUJVRlMuCgo+ICBU
aGUgY2FsbGVyIHBhc3NlcyBpbiB0aGUgaXB1X2ljIHRhc2sgdG8gdXNlIGZvcgo+IHRoZSBjb252
ZXJzaW9uLCB0aGUgaW5wdXQgYW5kIG91dHB1dCBpbWFnZSBmb3JtYXRzLCBhIHJvdGF0aW9uIG1v
ZGUsCj4gYW5kIGEgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgY29tcGxldGlvbiBjb250ZXh0IHBv
aW50ZXI6Cj4gCj4gc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKgo+IGlwdV9pbWFnZV9jb252
ZXJ0X3ByZXBhcmUoc3RydWN0IGlwdV9pYyAqaWMsCj4gICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgaXB1X2ltYWdlICppbiwgc3RydWN0IGlwdV9pbWFnZSAqb3V0LAo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bSBpcHVfcm90YXRlX21vZGUgcm90X21vZGUsCj4gICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbWFnZV9jb252ZXJ0ZXJfY2JfdCBjb21wbGV0ZSwKPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbXBsZXRlX2NvbnRleHQpOwoKQXMgSSBjb21t
ZW50ZWQgb24gdGhlIG90aGVyIHBhdGNoLCBJIHRoaW5rIHRoZSBpbWFnZV9jb252ZXJ0IGZ1bmN0
aW9ucwpzaG91bGQgdXNlIGEgc2VwYXJhdGUgaGFuZGxlIGZvciB0aGUgaW1hZ2UgY29udmVyc2lv
biBxdWV1ZXMgdGhhdCBzaXQgb24KdG9wIG9mIHRoZSBpcHVfaWMgdGFzayBoYW5kbGVzLgoKPiBU
aGUgY2FsbGVyIGlzIGdpdmVuIGEgbmV3IGNvbnZlcnNpb24gY29udGV4dCB0aGF0IG11c3QgYmUg
cGFzc2VkIHRvCj4gdGhlIGZ1cnRoZXIgQVBJczoKPiAKPiBzdHJ1Y3QgaW1hZ2VfY29udmVydGVy
X3J1biAqCj4gaXB1X2ltYWdlX2NvbnZlcnRfcnVuKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4
ICpjdHgsCj4gICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QgaW5fcGh5cywgZG1hX2Fk
ZHJfdCBvdXRfcGh5cyk7Cj4gCj4gVGhpcyBxdWV1ZXMgYSBuZXcgaW1hZ2UgY29udmVyc2lvbiBy
ZXF1ZXN0IHRvIGEgcnVuIHF1ZXVlLCBhbmQKPiBzdGFydHMgdGhlIGNvbnZlcnNpb24gaW1tZWRp
YXRlbHkgaWYgdGhlIHJ1biBxdWV1ZSBpcyBlbXB0eS4gT25seQo+IHRoZSBwaHlzYWRkcidzIG9m
IHRoZSBpbnB1dCBhbmQgb3V0cHV0IGltYWdlIGJ1ZmZlcnMgYXJlIG5lZWRlZCwKPiBzaW5jZSB0
aGUgY29udmVyc2lvbiBjb250ZXh0IHdhcyBjcmVhdGVkIHByZXZpb3VzbHkgd2l0aAo+IGlwdV9p
bWFnZV9jb252ZXJ0X3ByZXBhcmUoKS4gUmV0dXJucyBhIG5ldyBydW4gb2JqZWN0IHBvaW50ZXIu
IFdoZW4KPiB0aGUgY29udmVyc2lvbiBjb21wbGV0ZXMsIHRoZSBydW4gcG9pbnRlciBpcyByZXR1
cm5lZCB0byB0aGUKPiBjb21wbGV0aW9uIGNhbGxiYWNrLgo+Cj4gdm9pZCBpbWFnZV9jb252ZXJ0
X2Fib3J0KHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHgpOwo+IAo+IFRoaXMgd2lsbCBh
Ym9ydCBhbnkgYWN0aXZlIG9yIHBlbmRpbmcgY29udmVyc2lvbnMgZm9yIHRoaXMgY29udGV4dC4K
PiBBbnkgY3VycmVudGx5IGFjdGl2ZSBvciBwZW5kaW5nIHJ1bnMgYmVsb25naW5nIHRvIHRoaXMg
Y29udGV4dCBhcmUKPiByZXR1cm5lZCB2aWEgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgd2l0aCBh
biBlcnJvciBzdGF0dXMuCj4KPiB2b2lkIGlwdV9pbWFnZV9jb252ZXJ0X3VucHJlcGFyZShzdHJ1
Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4KTsKPiAKPiBVbnByZXBhcmVzIHRoZSBjb252ZXJz
aW9uIGNvbnRleHQuIEFueSBhY3RpdmUgb3IgcGVuZGluZyBydW5zIHdpbGwKPiBiZSBhYm9ydGVk
IGJ5IGNhbGxpbmcgaW1hZ2VfY29udmVydF9hYm9ydCgpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFN0
ZXZlIExvbmdlcmJlYW0gPHN0ZXZlX2xvbmdlcmJlYW1AbWVudG9yLmNvbT4KPiAKPiAtLS0KPiAK
PiB2NDoKPiAtIGRvIGF3YXkgd2l0aCBzdHJ1Y3QgaXB1X2ljX3RpbGVfb2ZmLCBhbmQgbW92ZSB0
aWxlIG9mZnNldHMgaW50bwo+ICAgc3RydWN0IGlwdV9pY190aWxlLiBUaGlzIHBhdmVzIHRoZSB3
YXkgZm9yIHBvc3NpYmx5IGFsbG93aW5nIGZvcgo+ICAgZWFjaCB0aWxlIHRvIGhhdmUgZGlmZmVy
ZW50IGRpbWVuc2lvbnMgaW4gdGhlIGZ1dHVyZS4KClRoYW5rcywgdGhpcyBsb29rcyBhIGxvdCBi
ZXR0ZXIgdG8gbWUuCgo+IHYzOiBubyBjaGFuZ2VzCj4gdjI6IG5vIGNoYW5nZXMKPiAtLS0KPiAg
ZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1pYy5jIHwgMTY5NCArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKystCj4gIGluY2x1ZGUvdmlkZW8vaW14LWlwdS12My5oICB8ICAg
NTcgKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCAxNzM5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u
cygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9pcHUtdjMvaXB1LWljLmMgYi9kcml2
ZXJzL2dwdS9pcHUtdjMvaXB1LWljLmMKPiBpbmRleCAxYTM3YWZjLi4wMWIxYjU2IDEwMDY0NAo+
IC0tLSBhL2RyaXZlcnMvZ3B1L2lwdS12My9pcHUtaWMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2lw
dS12My9pcHUtaWMuYwo+IEBAIC0xNyw2ICsxNyw4IEBACj4gICNpbmNsdWRlIDxsaW51eC9iaXRy
ZXYuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9lcnIuaD4K
PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1h
cHBpbmcuaD4KPiAgI2luY2x1ZGUgImlwdS1wcnYuaCIKPiAgCj4gIC8qIElDIFJlZ2lzdGVyIE9m
ZnNldHMgKi8KPiBAQCAtODIsNiArODQsNDAgQEAKPiAgI2RlZmluZSBJQ19JRE1BQ18zX1BQX1dJ
RFRIX01BU0sgICAgICAgICgweDNmZiA8PCAyMCkKPiAgI2RlZmluZSBJQ19JRE1BQ18zX1BQX1dJ
RFRIX09GRlNFVCAgICAgIDIwCj4gIAo+ICsvKgo+ICsgKiBUaGUgSUMgUmVzaXplciBoYXMgYSBy
ZXN0cmljdGlvbiB0aGF0IHRoZSBvdXRwdXQgZnJhbWUgZnJvbSB0aGUKPiArICogcmVzaXplciBt
dXN0IGJlIDEwMjQgb3IgbGVzcyBpbiBib3RoIHdpZHRoIChwaXhlbHMpIGFuZCBoZWlnaHQKPiAr
ICogKGxpbmVzKS4KPiArICoKPiArICogVGhlIGltYWdlIGNvbnZlcnNpb24gc3VwcG9ydCBhdHRl
bXB0cyB0byBzcGxpdCB1cCBhIGNvbnZlcnNpb24gd2hlbgo+ICsgKiB0aGUgZGVzaXJlZCBvdXRw
dXQgKGNvbnZlcnRlZCkgZnJhbWUgcmVzb2x1dGlvbiBleGNlZWRzIHRoZSBJQyByZXNpemVyCj4g
KyAqIGxpbWl0IG9mIDEwMjQgaW4gZWl0aGVyIGRpbWVuc2lvbi4KPiArICoKPiArICogSWYgZWl0
aGVyIGRpbWVuc2lvbiBvZiB0aGUgb3V0cHV0IGZyYW1lIGV4Y2VlZHMgdGhlIGxpbWl0LCB0aGUK
PiArICogZGltZW5zaW9uIGlzIHNwbGl0IGludG8gMSwgMiwgb3IgNCBlcXVhbCBzdHJpcGVzLCBm
b3IgYSBtYXhpbXVtCj4gKyAqIG9mIDQqNCBvciAxNiB0aWxlcy4gQSBjb252ZXJzaW9uIGlzIHRo
ZW4gY2FycmllZCBvdXQgZm9yIGVhY2gKPiArICogdGlsZSAoYnV0IHRha2luZyBjYXJlIHRvIHBh
c3MgdGhlIGZ1bGwgZnJhbWUgc3RyaWRlIGxlbmd0aCB0bwo+ICsgKiB0aGUgRE1BIGNoYW5uZWwn
cyBwYXJhbWV0ZXIgbWVtb3J5ISkuIElETUEgZG91YmxlLWJ1ZmZlcmluZyBpcyB1c2VkCj4gKyAq
IHRvIGNvbnZlcnQgZWFjaCB0aWxlIGJhY2stdG8tYmFjayB3aGVuIHBvc3NpYmxlIChzZWUgbm90
ZSBiZWxvdwo+ICsgKiB3aGVuIGRvdWJsZV9idWZmZXJpbmcgYm9vbGVhbiBpcyBzZXQpLgo+ICsg
Kgo+ICsgKiBOb3RlIHRoYXQgdGhlIGlucHV0IGZyYW1lIG11c3QgYmUgc3BsaXQgdXAgaW50byB0
aGUgc2FtZSBudW1iZXIKPiArICogb2YgdGlsZXMgYXMgdGhlIG91dHB1dCBmcmFtZS4KPiArICov
Cj4gKyNkZWZpbmUgTUFYX1NUUklQRVNfVyAgICA0Cj4gKyNkZWZpbmUgTUFYX1NUUklQRVNfSCAg
ICA0Cj4gKyNkZWZpbmUgTUFYX1RJTEVTIChNQVhfU1RSSVBFU19XICogTUFYX1NUUklQRVNfSCkK
PiArCj4gKyNkZWZpbmUgTUlOX1cgICAgIDEyOAo+ICsjZGVmaW5lIE1JTl9IICAgICAxMjgKCldo
ZXJlIGRvZXMgdGhpcyBtaW5pbXVtIGNvbWUgZnJvbT8KCj4gKyNkZWZpbmUgTUFYX1cgICAgIDQw
OTYKPiArI2RlZmluZSBNQVhfSCAgICAgNDA5Ngo+ICsKPiArZW51bSBpbWFnZV9jb252ZXJ0X3R5
cGUgewo+ICsJSU1BR0VfQ09OVkVSVF9JTiA9IDAsCj4gKwlJTUFHRV9DT05WRVJUX09VVCwKPiAr
fTsKPiArCj4gIHN0cnVjdCBpY190YXNrX3JlZ29mZnMgewo+ICAJdTMyIHJzYzsKPiAgCXUzMiB0
cG1lbV9jc2NbMl07Cj4gQEAgLTk2LDYgKzEzMiwxNiBAQCBzdHJ1Y3QgaWNfdGFza19iaXRmaWVs
ZHMgewo+ICAJdTMyIGljX2NtYl9nYWxwaGFfYml0Owo+ICB9Owo+ICAKPiArc3RydWN0IGljX3Rh
c2tfY2hhbm5lbHMgewo+ICsJaW50IGluOwo+ICsJaW50IG91dDsKPiArCWludCByb3RfaW47Cj4g
KwlpbnQgcm90X291dDsKPiArCWludCB2ZGlfaW5fcDsKPiArCWludCB2ZGlfaW47Cj4gKwlpbnQg
dmRpX2luX247CgpUaGUgdmRpIGNoYW5uZWxzIGFyZSB1bnVzZWQuCgo+ICt9Owo+ICsKPiAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBpY190YXNrX3JlZ29mZnMgaWNfdGFza19yZWdbSUNfTlVNX1RBU0tT
XSA9IHsKPiAgCVtJQ19UQVNLX0VOQ09ERVJdID0gewo+ICAJCS5yc2MgPSBJQ19QUlBfRU5DX1JT
QywKPiBAQCAtMTM4LDEyICsxODQsMTU1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNfdGFza19i
aXRmaWVsZHMgaWNfdGFza19iaXRbSUNfTlVNX1RBU0tTXSA9IHsKPiAgCX0sCj4gIH07Cj4gIAo+
ICtzdGF0aWMgY29uc3Qgc3RydWN0IGljX3Rhc2tfY2hhbm5lbHMgaWNfdGFza19jaFtJQ19OVU1f
VEFTS1NdID0gewo+ICsJW0lDX1RBU0tfRU5DT0RFUl0gPSB7Cj4gKwkJLm91dCA9IElQVVYzX0NI
QU5ORUxfSUNfUFJQX0VOQ19NRU0sCj4gKwkJLnJvdF9pbiA9IElQVVYzX0NIQU5ORUxfTUVNX1JP
VF9FTkMsCj4gKwkJLnJvdF9vdXQgPSBJUFVWM19DSEFOTkVMX1JPVF9FTkNfTUVNLAo+ICsJfSwK
PiArCVtJQ19UQVNLX1ZJRVdGSU5ERVJdID0gewo+ICsJCS5pbiA9IElQVVYzX0NIQU5ORUxfTUVN
X0lDX1BSUF9WRiwKPiArCQkub3V0ID0gSVBVVjNfQ0hBTk5FTF9JQ19QUlBfVkZfTUVNLAo+ICsJ
CS5yb3RfaW4gPSBJUFVWM19DSEFOTkVMX01FTV9ST1RfVkYsCj4gKwkJLnJvdF9vdXQgPSBJUFVW
M19DSEFOTkVMX1JPVF9WRl9NRU0sCj4gKwkJLnZkaV9pbl9wID0gSVBVVjNfQ0hBTk5FTF9NRU1f
VkRJX1BSRVYsCj4gKwkJLnZkaV9pbiA9IElQVVYzX0NIQU5ORUxfTUVNX1ZESV9DVVIsCj4gKwkJ
LnZkaV9pbl9uID0gSVBVVjNfQ0hBTk5FTF9NRU1fVkRJX05FWFQsCgpTZWUgYWJvdmUuCgo+ICsJ
fSwKPiArCVtJQ19UQVNLX1BPU1RfUFJPQ0VTU09SXSA9IHsKPiArCQkuaW4gPSBJUFVWM19DSEFO
TkVMX01FTV9JQ19QUCwKPiArCQkub3V0ID0gSVBVVjNfQ0hBTk5FTF9JQ19QUF9NRU0sCj4gKwkJ
LnJvdF9pbiA9IElQVVYzX0NIQU5ORUxfTUVNX1JPVF9QUCwKPiArCQkucm90X291dCA9IElQVVYz
X0NIQU5ORUxfUk9UX1BQX01FTSwKPiArCX0sCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaXB1X2ljX2Rt
YV9idWYgewo+ICsJdm9pZCAgICAgICAgICAqdmlydDsKPiArCWRtYV9hZGRyX3QgICAgcGh5czsK
PiArCXVuc2lnbmVkIGxvbmcgbGVuOwo+ICt9Owo+ICsKPiArLyogZGltZW5zaW9ucyBvZiBvbmUg
dGlsZSAqLwo+ICtzdHJ1Y3QgaXB1X2ljX3RpbGUgewo+ICsJdTMyIHdpZHRoOwo+ICsJdTMyIGhl
aWdodDsKPiArCS8qIHNpemUgYW5kIHN0cmlkZXMgYXJlIGluIGJ5dGVzICovCj4gKwl1MzIgc2l6
ZTsKPiArCXUzMiBzdHJpZGU7Cj4gKwl1MzIgcm90X3N0cmlkZTsKPiArCS8qIHN0YXJ0IFkgb3Ig
cGFja2VkIG9mZnNldCBvZiB0aGlzIHRpbGUgKi8KPiArCXUzMiBvZmZzZXQ7Cj4gKwkvKiBvZmZz
ZXQgZnJvbSBzdGFydCB0byB0aWxlIGluIFUgcGxhbmUsIGZvciBwbGFuYXIgZm9ybWF0cyAqLwo+
ICsJdTMyIHVfb2ZmOwo+ICsJLyogb2Zmc2V0IGZyb20gc3RhcnQgdG8gdGlsZSBpbiBWIHBsYW5l
LCBmb3IgcGxhbmFyIGZvcm1hdHMgKi8KPiArCXUzMiB2X29mZjsKPiArfTsKPiArCj4gK3N0cnVj
dCBpcHVfaWNfcGl4Zm10IHsKPiArCWNoYXIJKm5hbWU7Cj4gKwl1MzIJZm91cmNjOyAgICAgICAg
LyogVjRMMiBmb3VyY2MgKi8KPiArCWludCAgICAgYnBwOyAgICAgICAgICAgLyogdG90YWwgYnBw
ICovCj4gKwlpbnQgICAgIHlfZGVwdGg7ICAgICAgIC8qIGRlcHRoIG9mIFkgcGxhbmUgZm9yIHBs
YW5hciBmb3JtYXRzICovCj4gKwlpbnQgICAgIHV2X3dpZHRoX2RlYzsgIC8qIGRlY2ltYXRpb24g
aW4gd2lkdGggZm9yIFUvViBwbGFuZXMgKi8KPiArCWludCAgICAgdXZfaGVpZ2h0X2RlYzsgLyog
ZGVjaW1hdGlvbiBpbiBoZWlnaHQgZm9yIFUvViBwbGFuZXMgKi8KPiArCWJvb2wgICAgdXZfc3dh
cHBlZDsgICAgLyogVSBhbmQgViBwbGFuZXMgYXJlIHN3YXBwZWQgKi8KPiArCWJvb2wgICAgdXZf
cGFja2VkOyAgICAgLyogcGFydGlhbCBwbGFuYXIgKFUgYW5kIFYgaW4gc2FtZSBwbGFuZSkgKi8K
PiArfTsKPiArCj4gK3N0cnVjdCBpcHVfaWNfaW1hZ2Ugewo+ICsJc3RydWN0IGlwdV9pbWFnZSBi
YXNlOwo+ICsJZW51bSBpbWFnZV9jb252ZXJ0X3R5cGUgdHlwZTsKPiArCj4gKwljb25zdCBzdHJ1
Y3QgaXB1X2ljX3BpeGZtdCAqZm10Owo+ICsJdW5zaWduZWQgaW50IHN0cmlkZTsKPiArCj4gKwkv
KiAjIG9mIHJvd3MgKGhvcml6b250YWwgc3RyaXBlcykgaWYgZGVzdCBoZWlnaHQgaXMgPiAxMDI0
ICovCj4gKwl1bnNpZ25lZCBpbnQgbnVtX3Jvd3M7Cj4gKwkvKiAjIG9mIGNvbHVtbnMgKHZlcnRp
Y2FsIHN0cmlwZXMpIGlmIGRlc3Qgd2lkdGggaXMgPiAxMDI0ICovCj4gKwl1bnNpZ25lZCBpbnQg
bnVtX2NvbHM7Cj4gKwo+ICsJc3RydWN0IGlwdV9pY190aWxlIHRpbGVbTUFYX1RJTEVTXTsKPiAr
fTsKPiArCj4gK3N0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4Owo+ICtzdHJ1Y3QgaW1hZ2VfY29u
dmVydGVyOwo+ICBzdHJ1Y3QgaXB1X2ljX3ByaXY7Cj4gK3N0cnVjdCBpcHVfaWM7Cj4gKwo+ICtz
dHJ1Y3QgaW1hZ2VfY29udmVydGVyX3J1biB7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0
eCAqY3R4Owo+ICsKPiArCWRtYV9hZGRyX3QgaW5fcGh5czsKPiArCWRtYV9hZGRyX3Qgb3V0X3Bo
eXM7Cj4gKwo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4g
K307Cj4gKwo+ICtzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCB7Cj4gKwlzdHJ1Y3QgaW1hZ2Vf
Y29udmVydGVyICpjdnQ7Cj4gKwo+ICsJaW1hZ2VfY29udmVydGVyX2NiX3QgY29tcGxldGU7Cj4g
Kwl2b2lkICpjb21wbGV0ZV9jb250ZXh0Owo+ICsKPiArCS8qIFNvdXJjZS9kZXN0aW5hdGlvbiBp
bWFnZSBkYXRhIGFuZCByb3RhdGlvbiBtb2RlICovCj4gKwlzdHJ1Y3QgaXB1X2ljX2ltYWdlIGlu
Owo+ICsJc3RydWN0IGlwdV9pY19pbWFnZSBvdXQ7Cj4gKwllbnVtIGlwdV9yb3RhdGVfbW9kZSBy
b3RfbW9kZTsKPiArCj4gKwkvKiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciByb3RhdGlvbiAqLwo+
ICsJc3RydWN0IGlwdV9pY19kbWFfYnVmIHJvdF9pbnRlcm1lZGlhdGVbMl07CgpObyBuZWVkIHRv
IGNoYW5nZSBpdCBub3csIGJ1dCBJIGFzc3VtZSB0aGVzZSBjb3VsZCBiZSBwZXIgSUMgdGFzawpp
bnN0ZWFkIG9mIHBlciBjb250ZXh0LgoKPiArCS8qIGN1cnJlbnQgYnVmZmVyIG51bWJlciBmb3Ig
ZG91YmxlIGJ1ZmZlcmluZyAqLwo+ICsJaW50IGN1cl9idWZfbnVtOwo+ICsKPiArCWJvb2wgYWJv
cnRpbmc7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBhYm9ydGVkOwo+ICsKPiArCS8qIGNhbiB3ZSB1
c2UgZG91YmxlLWJ1ZmZlcmluZyBmb3IgdGhpcyBjb252ZXJzaW9uIG9wZXJhdGlvbj8gKi8KPiAr
CWJvb2wgZG91YmxlX2J1ZmZlcmluZzsKPiArCS8qIG51bV9yb3dzICogbnVtX2NvbHMgKi8KPiAr
CXVuc2lnbmVkIGludCBudW1fdGlsZXM7Cj4gKwkvKiBuZXh0IHRpbGUgdG8gcHJvY2VzcyAqLwo+
ICsJdW5zaWduZWQgaW50IG5leHRfdGlsZTsKPiArCS8qIHdoZXJlIHRvIHBsYWNlIGNvbnZlcnRl
ZCB0aWxlIGluIGRlc3QgaW1hZ2UgKi8KPiArCXVuc2lnbmVkIGludCBvdXRfdGlsZV9tYXBbTUFY
X1RJTEVTXTsKPiArCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gK307Cj4gKwo+ICtzdHJ1
Y3QgaW1hZ2VfY29udmVydGVyIHsKPiArCXN0cnVjdCBpcHVfaWMgKmljOwo+ICsKPiArCXN0cnVj
dCBpcHV2M19jaGFubmVsICppbl9jaGFuOwo+ICsJc3RydWN0IGlwdXYzX2NoYW5uZWwgKm91dF9j
aGFuOwo+ICsJc3RydWN0IGlwdXYzX2NoYW5uZWwgKnJvdGF0aW9uX2luX2NoYW47Cj4gKwlzdHJ1
Y3QgaXB1djNfY2hhbm5lbCAqcm90YXRpb25fb3V0X2NoYW47Cj4gKwo+ICsJLyogdGhlIElQVSBl
bmQtb2YtZnJhbWUgaXJxcyAqLwo+ICsJaW50IG91dF9lb2ZfaXJxOwo+ICsJaW50IHJvdF9vdXRf
ZW9mX2lycTsKPiArCj4gKwlzcGlubG9ja190IGlycWxvY2s7Cj4gKwo+ICsJLyogbGlzdCBvZiBj
b252ZXJ0IGNvbnRleHRzICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGN0eF9saXN0Owo+ICsJLyog
cXVldWUgb2YgY29udmVyc2lvbiBydW5zICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdf
cTsKPiArCS8qIHF1ZXVlIG9mIGNvbXBsZXRlZCBydW5zICovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFk
IGRvbmVfcTsKPiArCj4gKwkvKiB0aGUgY3VycmVudCBjb252ZXJzaW9uIHJ1biAqLwo+ICsJc3Ry
dWN0IGltYWdlX2NvbnZlcnRlcl9ydW4gKmN1cnJlbnRfcnVuOwo+ICt9Owo+ICAKPiAgc3RydWN0
IGlwdV9pYyB7Cj4gIAllbnVtIGlwdV9pY190YXNrIHRhc2s7Cj4gIAljb25zdCBzdHJ1Y3QgaWNf
dGFza19yZWdvZmZzICpyZWc7Cj4gIAljb25zdCBzdHJ1Y3QgaWNfdGFza19iaXRmaWVsZHMgKmJp
dDsKPiArCWNvbnN0IHN0cnVjdCBpY190YXNrX2NoYW5uZWxzICpjaDsKPiAgCj4gIAllbnVtIGlw
dV9jb2xvcl9zcGFjZSBpbl9jcywgZ19pbl9jczsKPiAgCWVudW0gaXB1X2NvbG9yX3NwYWNlIG91
dF9jczsKPiBAQCAtMTUxLDYgKzM0MCw4IEBAIHN0cnVjdCBpcHVfaWMgewo+ICAJYm9vbCByb3Rh
dGlvbjsKPiAgCWJvb2wgaW5fdXNlOwo+ICAKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXIgY3Z0
Owo+ICsKPiAgCXN0cnVjdCBpcHVfaWNfcHJpdiAqcHJpdjsKPiAgfTsKPiAgCj4gQEAgLTYxOSw3
ICs4MTAsNyBAQCBpbnQgaXB1X2ljX3Rhc2tfaWRtYV9pbml0KHN0cnVjdCBpcHVfaWMgKmljLCBz
dHJ1Y3QgaXB1djNfY2hhbm5lbCAqY2hhbm5lbCwKPiAgCWlwdV9pY193cml0ZShpYywgaWNfaWRt
YWNfMiwgSUNfSURNQUNfMik7Cj4gIAlpcHVfaWNfd3JpdGUoaWMsIGljX2lkbWFjXzMsIElDX0lE
TUFDXzMpOwo+ICAKPiAtCWlmIChyb3QgPj0gSVBVX1JPVEFURV85MF9SSUdIVCkKPiArCWlmIChp
cHVfcm90X21vZGVfaXNfaXJ0KHJvdCkpCj4gIAkJaWMtPnJvdGF0aW9uID0gdHJ1ZTsKPiAgCj4g
IHVubG9jazoKPiBAQCAtNjQ4LDYgKzgzOSwxNDg3IEBAIHN0YXRpYyB2b2lkIGlwdV9pcnRfZGlz
YWJsZShzdHJ1Y3QgaXB1X2ljICppYykKPiAgCX0KPiAgfQo+ICAKPiArLyoKPiArICogQ29tcGxl
dGUgaW1hZ2UgY29udmVyc2lvbiBzdXBwb3J0IGZvbGxvd3MKPiArICovCj4gKwo+ICtzdGF0aWMg
Y29uc3Qgc3RydWN0IGlwdV9pY19waXhmbXQgaXB1X2ljX2Zvcm1hdHNbXSA9IHsKPiArCXsKPiAr
CQkubmFtZQk9ICJSR0I1NjUiLAoKUGxlYXNlIGRyb3AgdGhlIG5hbWVzLCBrZWVwaW5nIGEgbGlz
dCBvZiB1c2VyIHJlYWRhYmxlIGZvcm1hdCBuYW1lcyBpcwp0aGUgdjRsMiBjb3JlJ3MgYnVzaW5l
c3MsIG5vdCBvdXJzLgoKPiArCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKPiArCQku
YnBwICAgID0gMTYsCgpicHAgaXMgb25seSBldmVyIHVzZWQgaW4gYnl0ZXMsIG5vdCBiaXRzIChh
bHdheXMgZGl2aWRlZCBieSA4KS4KV2h5IG5vdCBtYWtlIHRoaXMgYnl0ZXNfcGVyX3BpeGVsIG9y
IHBpeGVsX3N0cmlkZSA9IDIuCgo+ICsJfSwgewo+ICsJCS5uYW1lCT0gIlJHQjI0IiwKPiArCQku
Zm91cmNjCT0gVjRMMl9QSVhfRk1UX1JHQjI0LAo+ICsJCS5icHAgICAgPSAyNCwKPiArCX0sIHsK
PiArCQkubmFtZQk9ICJCR1IyNCIsCj4gKwkJLmZvdXJjYwk9IFY0TDJfUElYX0ZNVF9CR1IyNCwK
PiArCQkuYnBwICAgID0gMjQsCj4gKwl9LCB7Cj4gKwkJLm5hbWUJPSAiUkdCMzIiLAo+ICsJCS5m
b3VyY2MJPSBWNEwyX1BJWF9GTVRfUkdCMzIsCj4gKwkJLmJwcCAgICA9IDMyLAo+ICsJfSwgewo+
ICsJCS5uYW1lCT0gIkJHUjMyIiwKPiArCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX0JHUjMyLAo+
ICsJCS5icHAgICAgPSAzMiwKPiArCX0sIHsKPiArCQkubmFtZQk9ICI0OjI6MiBwYWNrZWQsIFlV
WVYiLAo+ICsJCS5mb3VyY2MJPSBWNEwyX1BJWF9GTVRfWVVZViwKPiArCQkuYnBwICAgID0gMTYs
Cj4gKwkJLnV2X3dpZHRoX2RlYyA9IDIsCj4gKwkJLnV2X2hlaWdodF9kZWMgPSAxLAo+ICsJfSwg
ewo+ICsJCS5uYW1lCT0gIjQ6MjoyIHBhY2tlZCwgVVlWWSIsCj4gKwkJLmZvdXJjYwk9IFY0TDJf
UElYX0ZNVF9VWVZZLAo+ICsJCS5icHAgICAgPSAxNiwKPiArCQkudXZfd2lkdGhfZGVjID0gMiwK
PiArCQkudXZfaGVpZ2h0X2RlYyA9IDEsCj4gKwl9LCB7Cj4gKwkJLm5hbWUJPSAiNDoyOjAgcGxh
bmFyLCBZVVYiLAo+ICsJCS5mb3VyY2MJPSBWNEwyX1BJWF9GTVRfWVVWNDIwLAo+ICsJCS5icHAg
ICAgPSAxMiwKPiArCQkueV9kZXB0aCA9IDgsCgp5X2RlcHRoIGlzIG9ubHkgZXZlciB1c2VkIGlu
IGJ5dGVzLCBub3QgYml0cyAoYWx3YXlzIGRpdmlkZWQgYnkgOCkuCldoeSBub3QgbWFrZSB0aGlz
IGJvb2wgcGxhbmFyIGluc3RlYWQuCgo+ICsJCS51dl93aWR0aF9kZWMgPSAyLAo+ICsJCS51dl9o
ZWlnaHRfZGVjID0gMiwKPiArCX0sIHsKPiArCQkubmFtZQk9ICI0OjI6MCBwbGFuYXIsIFlWVSIs
Cj4gKwkJLmZvdXJjYwk9IFY0TDJfUElYX0ZNVF9ZVlU0MjAsCj4gKwkJLmJwcCAgICA9IDEyLAo+
ICsJCS55X2RlcHRoID0gOCwKPiArCQkudXZfd2lkdGhfZGVjID0gMiwKPiArCQkudXZfaGVpZ2h0
X2RlYyA9IDIsCj4gKwkJLnV2X3N3YXBwZWQgPSB0cnVlLAo+ICsJfSwgewo+ICsJCS5uYW1lICAg
PSAiNDoyOjAgcGFydGlhbCBwbGFuYXIsIE5WMTIiLAo+ICsJCS5mb3VyY2MgPSBWNEwyX1BJWF9G
TVRfTlYxMiwKPiArCQkuYnBwICAgID0gMTIsCj4gKwkJLnlfZGVwdGggPSA4LAo+ICsJCS51dl93
aWR0aF9kZWMgPSAyLAo+ICsJCS51dl9oZWlnaHRfZGVjID0gMiwKPiArCQkudXZfcGFja2VkID0g
dHJ1ZSwKPiArCX0sIHsKPiArCQkubmFtZSAgID0gIjQ6MjoyIHBsYW5hciwgWVVWIiwKPiArCQku
Zm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQyMlAsCj4gKwkJLmJwcCAgICA9IDE2LAo+ICsJCS55
X2RlcHRoID0gOCwKPiArCQkudXZfd2lkdGhfZGVjID0gMiwKPiArCQkudXZfaGVpZ2h0X2RlYyA9
IDEsCj4gKwl9LCB7Cj4gKwkJLm5hbWUgICA9ICI0OjI6MiBwYXJ0aWFsIHBsYW5hciwgTlYxNiIs
Cj4gKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9OVjE2LAo+ICsJCS5icHAgICAgPSAxNiwKPiAr
CQkueV9kZXB0aCA9IDgsCj4gKwkJLnV2X3dpZHRoX2RlYyA9IDIsCj4gKwkJLnV2X2hlaWdodF9k
ZWMgPSAxLAo+ICsJCS51dl9wYWNrZWQgPSB0cnVlLAo+ICsJfSwKPiArfTsKPiArCj4gK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgaXB1X2ljX3BpeGZtdCAqaXB1X2ljX2dldF9mb3JtYXQodTMyIGZvdXJj
YykKPiArewo+ICsJY29uc3Qgc3RydWN0IGlwdV9pY19waXhmbXQgKnJldCA9IE5VTEw7Cj4gKwl1
bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcHVfaWNf
Zm9ybWF0cyk7IGkrKykgewo+ICsJCWlmIChpcHVfaWNfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm91
cmNjKSB7Cj4gKwkJCXJldCA9ICZpcHVfaWNfZm9ybWF0c1tpXTsKPiArCQkJYnJlYWs7Cj4gKwkJ
fQo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlwdV9p
Y19kdW1wX2Zvcm1hdChzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4LAo+ICsJCQkgICAg
ICAgc3RydWN0IGlwdV9pY19pbWFnZSAqaWNfaW1hZ2UpCj4gK3sKPiArCXN0cnVjdCBpcHVfaWNf
cHJpdiAqcHJpdiA9IGN0eC0+Y3Z0LT5pYy0+cHJpdjsKPiArCj4gKwlkZXZfZGJnKHByaXYtPmlw
dS0+ZGV2LAo+ICsJCSJjdHggJXA6ICVzIGZvcm1hdDogJWR4JWQgKCVkeCVkIHRpbGVzIG9mIHNp
emUgJWR4JWQpLCAlYyVjJWMlY1xuIiwKPiArCQljdHgsCj4gKwkJaWNfaW1hZ2UtPnR5cGUgPT0g
SU1BR0VfQ09OVkVSVF9PVVQgPyAiT3V0cHV0IiA6ICJJbnB1dCIsCj4gKwkJaWNfaW1hZ2UtPmJh
c2UucGl4LndpZHRoLCBpY19pbWFnZS0+YmFzZS5waXguaGVpZ2h0LAo+ICsJCWljX2ltYWdlLT5u
dW1fY29scywgaWNfaW1hZ2UtPm51bV9yb3dzLAo+ICsJCWljX2ltYWdlLT50aWxlWzBdLndpZHRo
LCBpY19pbWFnZS0+dGlsZVswXS5oZWlnaHQsCj4gKwkJaWNfaW1hZ2UtPmZtdC0+Zm91cmNjICYg
MHhmZiwKPiArCQkoaWNfaW1hZ2UtPmZtdC0+Zm91cmNjID4+IDgpICYgMHhmZiwKPiArCQkoaWNf
aW1hZ2UtPmZtdC0+Zm91cmNjID4+IDE2KSAmIDB4ZmYsCj4gKwkJKGljX2ltYWdlLT5mbXQtPmZv
dXJjYyA+PiAyNCkgJiAweGZmKTsKPiArfQo+ICsKPiAraW50IGlwdV9pbWFnZV9jb252ZXJ0X2Vu
dW1fZm9ybWF0KGludCBpbmRleCwgY29uc3QgY2hhciAqKmRlc2MsIHUzMiAqZm91cmNjKQo+ICt7
Cj4gKwljb25zdCBzdHJ1Y3QgaXB1X2ljX3BpeGZtdCAqZm10Owo+ICsKPiArCWlmIChpbmRleCA+
PSAoaW50KUFSUkFZX1NJWkUoaXB1X2ljX2Zvcm1hdHMpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+
ICsKPiArCS8qIEZvcm1hdCBmb3VuZCAqLwo+ICsJZm10ID0gJmlwdV9pY19mb3JtYXRzW2luZGV4
XTsKPiArCSpkZXNjID0gZm10LT5uYW1lOwo+ICsJKmZvdXJjYyA9IGZtdC0+Zm91cmNjOwo+ICsJ
cmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2ltYWdlX2NvbnZlcnRfZW51
bV9mb3JtYXQpOwo+ICsKPiArc3RhdGljIHZvaWQgaXB1X2ljX2ZyZWVfZG1hX2J1ZihzdHJ1Y3Qg
aXB1X2ljX3ByaXYgKnByaXYsCj4gKwkJCQlzdHJ1Y3QgaXB1X2ljX2RtYV9idWYgKmJ1ZikKPiAr
ewo+ICsJaWYgKGJ1Zi0+dmlydCkKPiArCQlkbWFfZnJlZV9jb2hlcmVudChwcml2LT5pcHUtPmRl
diwKPiArCQkJCSAgYnVmLT5sZW4sIGJ1Zi0+dmlydCwgYnVmLT5waHlzKTsKPiArCWJ1Zi0+dmly
dCA9IE5VTEw7Cj4gKwlidWYtPnBoeXMgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlwdV9p
Y19hbGxvY19kbWFfYnVmKHN0cnVjdCBpcHVfaWNfcHJpdiAqcHJpdiwKPiArCQkJCXN0cnVjdCBp
cHVfaWNfZG1hX2J1ZiAqYnVmLAo+ICsJCQkJaW50IHNpemUpCj4gK3sKPiArCXVuc2lnbmVkIGxv
bmcgbmV3bGVuID0gUEFHRV9BTElHTihzaXplKTsKPiArCj4gKwlpZiAoYnVmLT52aXJ0KSB7Cj4g
KwkJaWYgKGJ1Zi0+bGVuID09IG5ld2xlbikKPiArCQkJcmV0dXJuIDA7Cj4gKwkJaXB1X2ljX2Zy
ZWVfZG1hX2J1Zihwcml2LCBidWYpOwo+ICsJfQoKSXMgaXQgbmVjZXNzYXJ5IHRvIHN1cHBvcnQg
cmVhbGxvY2F0aW9uPyBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkKdGhlIHByZXBhcmUg
ZnVuY3Rpb24sIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29udGV4dC4KCj4gKwo+ICsJYnVmLT5sZW4g
PSBuZXdsZW47Cj4gKwlidWYtPnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQocHJpdi0+aXB1LT5k
ZXYsIGJ1Zi0+bGVuLCAmYnVmLT5waHlzLAo+ICsJCQkJICAgICAgIEdGUF9ETUEgfCBHRlBfS0VS
TkVMKTsKPiArCWlmICghYnVmLT52aXJ0KSB7Cj4gKwkJZGV2X2Vycihwcml2LT5pcHUtPmRldiwg
ImZhaWxlZCB0byBhbGxvYyBkbWEgYnVmZmVyXG4iKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr
CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgaXB1X2lj
X251bV9zdHJpcGVzKGludCBkaW0pCj4gK3sKPiArCWlmIChkaW0gPD0gMTAyNCkKPiArCQlyZXR1
cm4gMTsKPiArCWVsc2UgaWYgKGRpbSA8PSAyMDQ4KQo+ICsJCXJldHVybiAyOwo+ICsJZWxzZQo+
ICsJCXJldHVybiA0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpcHVfaWNfY2FsY190aWxlX2Rp
bWVuc2lvbnMoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0eCwKPiArCQkJCQlzdHJ1Y3Qg
aXB1X2ljX2ltYWdlICppbWFnZSkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsg
aSA8IGN0eC0+bnVtX3RpbGVzOyBpKyspIHsKPiArCQlzdHJ1Y3QgaXB1X2ljX3RpbGUgKnRpbGUg
PSAmaW1hZ2UtPnRpbGVbaV07Cj4gKwo+ICsJCXRpbGUtPmhlaWdodCA9IGltYWdlLT5iYXNlLnBp
eC5oZWlnaHQgLyBpbWFnZS0+bnVtX3Jvd3M7Cj4gKwkJdGlsZS0+d2lkdGggPSBpbWFnZS0+YmFz
ZS5waXgud2lkdGggLyBpbWFnZS0+bnVtX2NvbHM7CgpXZSBhbHJlYWR5IGhhdmUgdGFsa2VkIGFi
b3V0IHRoaXMsIHRoaXMgc2ltcGxpZmllZCB0aWxpbmcgd2lsbCBjYXVzZQppbWFnZSBhcnRpZmFj
dHMgKGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNlYW1zIGF0IHRoZSB0aWxlIGJvcmRlcnMpIHdo
ZW4KdGhlIGJpbGluZWFyIHVwc2NhbGVyIHNvdXJjZSBwaXhlbCBzdGVwIGlzIHNpZ25pZmljYW50
bHkgc21hbGxlciB0aGFuIGEKd2hvbGUgcGl4ZWwuClRoaXMgY2FuIGJlIGZpeGVkIGluIHRoZSBm
dXR1cmUgYnkgdXNpbmcgb3ZlcmxhcHBpbmcgdGlsZXMgb2YgZGlmZmVyZW50CnNpemVzIGFuZCBw
b3NzaWJseSBieSBzbGlnaHRseSBjaGFuZ2luZyB0aGUgc2NhbGluZyBmYWN0b3JzIG9mCmluZGl2
aWR1YWwgdGlsZXMuCgo+ICsJCXRpbGUtPnNpemUgPSAoKHRpbGUtPmhlaWdodCAqIGltYWdlLT5m
bXQtPmJwcCkgPj4gMykgKgo+ICsJCQl0aWxlLT53aWR0aDsKPiArCj4gKwkJaWYgKGltYWdlLT5m
bXQtPnlfZGVwdGgpIHsKPiArCQkJdGlsZS0+c3RyaWRlID0KPiArCQkJCShpbWFnZS0+Zm10LT55
X2RlcHRoICogdGlsZS0+d2lkdGgpID4+IDM7Cj4gKwkJCXRpbGUtPnJvdF9zdHJpZGUgPQo+ICsJ
CQkJKGltYWdlLT5mbXQtPnlfZGVwdGggKiB0aWxlLT5oZWlnaHQpID4+IDM7Cj4gKwkJfSBlbHNl
IHsKPiArCQkJdGlsZS0+c3RyaWRlID0KPiArCQkJCShpbWFnZS0+Zm10LT5icHAgKiB0aWxlLT53
aWR0aCkgPj4gMzsKPiArCQkJdGlsZS0+cm90X3N0cmlkZSA9Cj4gKwkJCQkoaW1hZ2UtPmZtdC0+
YnBwICogdGlsZS0+aGVpZ2h0KSA+PiAzOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArLyoKPiAr
ICogVXNlIHRoZSByb3RhdGlvbiB0cmFuc2Zvcm1hdGlvbiB0byBmaW5kIHRoZSB0aWxlIGNvb3Jk
aW5hdGVzCj4gKyAqIChyb3csIGNvbCkgb2YgYSB0aWxlIGluIHRoZSBkZXN0aW5hdGlvbiBmcmFt
ZSB0aGF0IGNvcnJlc3BvbmRzCj4gKyAqIHRvIHRoZSBnaXZlbiB0aWxlIGNvb3JkaW5hdGVzIG9m
IGEgc291cmNlIGZyYW1lLiBUaGUgZGVzdGluYXRpb24KPiArICogY29vcmRpbmF0ZSBpcyB0aGVu
IGNvbnZlcnRlZCB0byBhIHRpbGUgaW5kZXguCj4gKyAqLwo+ICtzdGF0aWMgaW50IGlwdV9pY190
cmFuc2Zvcm1fdGlsZV9pbmRleChzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4LAo+ICsJ
CQkJICAgICAgIGludCBzcmNfcm93LCBpbnQgc3JjX2NvbCkKPiArewo+ICsJc3RydWN0IGlwdV9p
Y19wcml2ICpwcml2ID0gY3R4LT5jdnQtPmljLT5wcml2Owo+ICsJc3RydWN0IGlwdV9pY19pbWFn
ZSAqc19pbWFnZSA9ICZjdHgtPmluOwo+ICsJc3RydWN0IGlwdV9pY19pbWFnZSAqZF9pbWFnZSA9
ICZjdHgtPm91dDsKPiArCWludCBjb3MsIHNpbiwgZHN0X3JvdywgZHN0X2NvbDsKPiArCj4gKwkv
KiB3aXRoIG5vIHJvdGF0aW9uIGl0J3MgYSAxOjEgbWFwcGluZyAqLwo+ICsJaWYgKGN0eC0+cm90
X21vZGUgPT0gSVBVX1JPVEFURV9OT05FKQo+ICsJCXJldHVybiBzcmNfcm93ICogc19pbWFnZS0+
bnVtX2NvbHMgKyBzcmNfY29sOwo+ICsKPiArCWlmIChjdHgtPnJvdF9tb2RlICYgSVBVX1JPVF9C
SVRfOTApIHsKPiArCQljb3MgPSAwOwo+ICsJCXNpbiA9IDE7Cj4gKwl9IGVsc2Ugewo+ICsJCWNv
cyA9IDE7Cj4gKwkJc2luID0gMDsKPiArCX0KPisKPiArCS8qCj4gKwkgKiBiZWZvcmUgZG9pbmcg
dGhlIHRyYW5zZm9ybSwgZmlyc3Qgd2UgaGF2ZSB0byB0cmFuc2xhdGUKPiArCSAqIHNvdXJjZSBy
b3csY29sIGZvciBhbiBvcmlnaW4gaW4gdGhlIGNlbnRlciBvZiBzX2ltYWdlCj4gKwkgKi8KPiAr
CXNyY19yb3cgKj0gMjsKPiArCXNyY19jb2wgKj0gMjsKPiArCXNyY19yb3cgLT0gc19pbWFnZS0+
bnVtX3Jvd3MgLSAxOwo+ICsJc3JjX2NvbCAtPSBzX2ltYWdlLT5udW1fY29scyAtIDE7Cj4gKwo+
ICsJLyogZG8gdGhlIHJvdGF0aW9uIHRyYW5zZm9ybSAqLwo+ICsJZHN0X2NvbCA9IHNyY19jb2wg
KiBjb3MgLSBzcmNfcm93ICogc2luOwo+ICsJZHN0X3JvdyA9IHNyY19jb2wgKiBzaW4gKyBzcmNf
cm93ICogY29zOwoKVGhpcyBsb29rcyBuaWNlLCBidXQgSSdkIGp1c3QgbW92ZSB0aGUgcm90X21v
ZGUgY29uZGl0aW9uYWwgYmVsb3cKYXNzaWdubWVudCBvZiBzcmNfcm93L2NvbCBhbmQgZG8gYXdh
eSB3aXRoIHRoZSBzaW4vY29zIHRlbXBvcmFyeQp2YXJpYWJsZXM6CgoJLyoKCSAqIGJlZm9yZSBk
b2luZyB0aGUgdHJhbnNmb3JtLCBmaXJzdCB3ZSBoYXZlIHRvIHRyYW5zbGF0ZQoJICogc291cmNl
IHJvdyxjb2wgZm9yIGFuIG9yaWdpbiBpbiB0aGUgY2VudGVyIG9mIHNfaW1hZ2UKCSAqLwoJc3Jj
X3JvdyA9IHNyY19yb3cgKiAyIC0gKHNfaW1hZ2UtPm51bV9yb3dzIC0gMSk7CglzcmNfY29sID0g
c3JjX2NvbCAqIDIgLSAoc19pbWFnZS0+bnVtX2NvbHMgLSAxKTsKCgkvKiBkbyB0aGUgcm90YXRp
b24gdHJhbnNmb3JtICovCglpZiAoY3R4LT5yb3RfbW9kZSAmIElQVV9ST1RfQklUXzkwKSB7CgkJ
ZHN0X2NvbCA9IC1zcmNfcm93OwoJCWRzdF9yb3cgPSBzcmNfY29sOwoJfSBlbHNlIHsKCQlkc3Rf
Y29sID0gc3JjX2NvbDsKCQlkc3Rfcm93ID0gc3JjX3JvdzsKCX0KCj4gKwkvKiBhcHBseSBmbGlw
ICovCj4gKwlpZiAoY3R4LT5yb3RfbW9kZSAmIElQVV9ST1RfQklUX0hGTElQKQo+ICsJCWRzdF9j
b2wgPSAtZHN0X2NvbDsKPiArCWlmIChjdHgtPnJvdF9tb2RlICYgSVBVX1JPVF9CSVRfVkZMSVAp
Cj4gKwkJZHN0X3JvdyA9IC1kc3Rfcm93Owo+ICsKPiArCWRldl9kYmcocHJpdi0+aXB1LT5kZXYs
ICJjdHggJXA6IFslZCwlZF0gLS0+IFslZCwlZF1cbiIsCj4gKwkJY3R4LCBzcmNfY29sLCBzcmNf
cm93LCBkc3RfY29sLCBkc3Rfcm93KTsKPiArCj4gKwkvKgo+ICsJICogZmluYWxseSB0cmFuc2xh
dGUgZGVzdCByb3csY29sIHVzaW5nIGFuIG9yaWdpbiBpbiB1cHBlcgo+ICsJICogbGVmdCBvZiBk
X2ltYWdlCj4gKwkgKi8KPiArCWRzdF9yb3cgKz0gZF9pbWFnZS0+bnVtX3Jvd3MgLSAxOwo+ICsJ
ZHN0X2NvbCArPSBkX2ltYWdlLT5udW1fY29scyAtIDE7Cj4gKwlkc3Rfcm93IC89IDI7Cj4gKwlk
c3RfY29sIC89IDI7Cj4gKwo+ICsJcmV0dXJuIGRzdF9yb3cgKiBkX2ltYWdlLT5udW1fY29scyAr
IGRzdF9jb2w7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEZpbGwgdGhlIG91dF90aWxlX21hcFtdIHdp
dGggdHJhbnNmb3JtZWQgZGVzdGluYXRpb24gdGlsZSBpbmRlY2VzLgo+ICsgKi8KPiArc3RhdGlj
IHZvaWQgaXB1X2ljX2NhbGNfb3V0X3RpbGVfbWFwKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4
ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBpcHVfaWNfaW1hZ2UgKnNfaW1hZ2UgPSAmY3R4LT5pbjsK
PiArCXVuc2lnbmVkIGludCByb3csIGNvbCwgdGlsZSA9IDA7Cj4gKwo+ICsJZm9yIChyb3cgPSAw
OyByb3cgPCBzX2ltYWdlLT5udW1fcm93czsgcm93KyspIHsKPiArCQlmb3IgKGNvbCA9IDA7IGNv
bCA8IHNfaW1hZ2UtPm51bV9jb2xzOyBjb2wrKykgewo+ICsJCQljdHgtPm91dF90aWxlX21hcFt0
aWxlXSA9Cj4gKwkJCQlpcHVfaWNfdHJhbnNmb3JtX3RpbGVfaW5kZXgoY3R4LCByb3csIGNvbCk7
Cj4gKwkJCXRpbGUrKzsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlwdV9p
Y19jYWxjX3RpbGVfb2Zmc2V0c19wbGFuYXIoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0
eCwKPiArCQkJCQkgICAgc3RydWN0IGlwdV9pY19pbWFnZSAqaW1hZ2UpCj4gK3sKPiArCXN0cnVj
dCBpcHVfaWNfcHJpdiAqcHJpdiA9IGN0eC0+Y3Z0LT5pYy0+cHJpdjsKPiArCWNvbnN0IHN0cnVj
dCBpcHVfaWNfcGl4Zm10ICpmbXQgPSBpbWFnZS0+Zm10Owo+ICsJdW5zaWduZWQgaW50IHJvdywg
Y29sLCB0aWxlID0gMDsKPiArCXUzMiBILCB3LCBoLCB5X2RlcHRoLCB5X3N0cmlkZSwgdXZfc3Ry
aWRlOwo+ICsJdTMyIHV2X3Jvd19vZmYsIHV2X2NvbF9vZmYsIHV2X29mZiwgdV9vZmYsIHZfb2Zm
LCB0bXA7Cj4gKwl1MzIgeV9yb3dfb2ZmLCB5X2NvbF9vZmYsIHlfb2ZmOwo+ICsJdTMyIHlfc2l6
ZSwgdXZfc2l6ZTsKPiArCj4gKwkvKiBzZXR1cCBzb21lIGNvbnZlbmllbmNlIHZhcnMgKi8KPiAr
CUggPSBpbWFnZS0+YmFzZS5waXguaGVpZ2h0Owo+ICsKPiArCXlfZGVwdGggPSBmbXQtPnlfZGVw
dGg7Cj4gKwl5X3N0cmlkZSA9IGltYWdlLT5zdHJpZGU7Cj4gKwl1dl9zdHJpZGUgPSB5X3N0cmlk
ZSAvIGZtdC0+dXZfd2lkdGhfZGVjOwo+ICsJaWYgKGZtdC0+dXZfcGFja2VkKQo+ICsJCXV2X3N0
cmlkZSAqPSAyOwo+ICsKPiArCXlfc2l6ZSA9IEggKiB5X3N0cmlkZTsKPiArCXV2X3NpemUgPSB5
X3NpemUgLyAoZm10LT51dl93aWR0aF9kZWMgKiBmbXQtPnV2X2hlaWdodF9kZWMpOwo+ICsKPiAr
CWZvciAocm93ID0gMDsgcm93IDwgaW1hZ2UtPm51bV9yb3dzOyByb3crKykgewo+ICsJCXcgPSBp
bWFnZS0+dGlsZVt0aWxlXS53aWR0aDsKPiArCQloID0gaW1hZ2UtPnRpbGVbdGlsZV0uaGVpZ2h0
Owo+ICsJCXlfcm93X29mZiA9IHJvdyAqIGggKiB5X3N0cmlkZTsKPiArCQl1dl9yb3dfb2ZmID0g
KHJvdyAqIGggKiB1dl9zdHJpZGUpIC8gZm10LT51dl9oZWlnaHRfZGVjOwo+ICsKPiArCQlmb3Ig
KGNvbCA9IDA7IGNvbCA8IGltYWdlLT5udW1fY29sczsgY29sKyspIHsKPiArCQkJeV9jb2xfb2Zm
ID0gKGNvbCAqIHcgKiB5X2RlcHRoKSA+PiAzOwoKV2Uga25vdyB0aGF0IGZvciBwbGFuYXIgZm9y
bWF0cywgeV9kZXB0aCBjYW4gb25seSBldmVyIGJlIDguIE5vIG5lZWQgdG8KY2FsY3VsYXRlIHRo
aXMgaGVyZS4KCj4gKwkJCXV2X2NvbF9vZmYgPSB5X2NvbF9vZmYgLyBmbXQtPnV2X3dpZHRoX2Rl
YzsKPiArCQkJaWYgKGZtdC0+dXZfcGFja2VkKQo+ICsJCQkJdXZfY29sX29mZiAqPSAyOwo+ICsK
PiArCQkJeV9vZmYgPSB5X3Jvd19vZmYgKyB5X2NvbF9vZmY7Cj4gKwkJCXV2X29mZiA9IHV2X3Jv
d19vZmYgKyB1dl9jb2xfb2ZmOwo+ICsKPiArCQkJdV9vZmYgPSB5X3NpemUgLSB5X29mZiArIHV2
X29mZjsKPiArCQkJdl9vZmYgPSAoZm10LT51dl9wYWNrZWQpID8gMCA6IHVfb2ZmICsgdXZfc2l6
ZTsKPiArCQkJaWYgKGZtdC0+dXZfc3dhcHBlZCkgewo+ICsJCQkJdG1wID0gdV9vZmY7Cj4gKwkJ
CQl1X29mZiA9IHZfb2ZmOwo+ICsJCQkJdl9vZmYgPSB0bXA7Cj4gKwkJCX0KPiArCj4gKwkJCWlt
YWdlLT50aWxlW3RpbGVdLm9mZnNldCA9IHlfb2ZmOwo+ICsJCQlpbWFnZS0+dGlsZVt0aWxlXS51
X29mZiA9IHVfb2ZmOwo+ICsJCQlpbWFnZS0+dGlsZVt0aWxlKytdLnZfb2ZmID0gdl9vZmY7Cj4g
Kwo+ICsJCQlkZXZfZGJnKHByaXYtPmlwdS0+ZGV2LAo+ICsJCQkJImN0eCAlcDogJXNAWyVkLCVk
XTogeV9vZmYgJTA4eCwgdV9vZmYgJTA4eCwgdl9vZmYgJTA4eFxuIiwKPiArCQkJCWN0eCwgaW1h
Z2UtPnR5cGUgPT0gSU1BR0VfQ09OVkVSVF9JTiA/Cj4gKwkJCQkiSW5wdXQiIDogIk91dHB1dCIs
IHJvdywgY29sLAo+ICsJCQkJeV9vZmYsIHVfb2ZmLCB2X29mZik7Cj4gKwkJfQo+ICsJfQo+ICt9
Cj4gKwo+ICtzdGF0aWMgdm9pZCBpcHVfaWNfY2FsY190aWxlX29mZnNldHNfcGFja2VkKHN0cnVj
dCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHgsCj4gKwkJCQkJICAgIHN0cnVjdCBpcHVfaWNfaW1h
Z2UgKmltYWdlKQo+ICt7Cj4gKwlzdHJ1Y3QgaXB1X2ljX3ByaXYgKnByaXYgPSBjdHgtPmN2dC0+
aWMtPnByaXY7Cj4gKwljb25zdCBzdHJ1Y3QgaXB1X2ljX3BpeGZtdCAqZm10ID0gaW1hZ2UtPmZt
dDsKPiArCXVuc2lnbmVkIGludCByb3csIGNvbCwgdGlsZSA9IDA7Cj4gKwl1MzIgdywgaCwgYnBw
LCBzdHJpZGU7Cj4gKwl1MzIgcm93X29mZiwgY29sX29mZjsKPiArCj4gKwkvKiBzZXR1cCBzb21l
IGNvbnZlbmllbmNlIHZhcnMgKi8KPiArCXN0cmlkZSA9IGltYWdlLT5zdHJpZGU7Cj4gKwlicHAg
PSBmbXQtPmJwcDsKPiArCj4gKwlmb3IgKHJvdyA9IDA7IHJvdyA8IGltYWdlLT5udW1fcm93czsg
cm93KyspIHsKPiArCQl3ID0gaW1hZ2UtPnRpbGVbdGlsZV0ud2lkdGg7Cj4gKwkJaCA9IGltYWdl
LT50aWxlW3RpbGVdLmhlaWdodDsKPiArCQlyb3dfb2ZmID0gcm93ICogaCAqIHN0cmlkZTsKPiAr
Cj4gKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBpbWFnZS0+bnVtX2NvbHM7IGNvbCsrKSB7Cj4gKwkJ
CWNvbF9vZmYgPSAoY29sICogdyAqIGJwcCkgPj4gMzsKPiArCj4gKwkJCWltYWdlLT50aWxlW3Rp
bGVdLm9mZnNldCA9IHJvd19vZmYgKyBjb2xfb2ZmOwo+ICsJCQlpbWFnZS0+dGlsZVt0aWxlXS51
X29mZiA9IDA7Cj4gKwkJCWltYWdlLT50aWxlW3RpbGUrK10udl9vZmYgPSAwOwo+ICsKPiArCQkJ
ZGV2X2RiZyhwcml2LT5pcHUtPmRldiwKPiArCQkJCSJjdHggJXA6ICVzQFslZCwlZF06IHBoeXMg
JTA4eFxuIiwgY3R4LAo+ICsJCQkJaW1hZ2UtPnR5cGUgPT0gSU1BR0VfQ09OVkVSVF9JTiA/Cj4g
KwkJCQkiSW5wdXQiIDogIk91dHB1dCIsIHJvdywgY29sLAo+ICsJCQkJcm93X29mZiArIGNvbF9v
ZmYpOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXB1X2ljX2NhbGNfdGls
ZV9vZmZzZXRzKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHgsCj4gKwkJCQkgICAgIHN0
cnVjdCBpcHVfaWNfaW1hZ2UgKmltYWdlKQo+ICt7Cj4gKwlpZiAoaW1hZ2UtPmZtdC0+eV9kZXB0
aCkKPiArCQlpcHVfaWNfY2FsY190aWxlX29mZnNldHNfcGxhbmFyKGN0eCwgaW1hZ2UpOwo+ICsJ
ZWxzZQo+ICsJCWlwdV9pY19jYWxjX3RpbGVfb2Zmc2V0c19wYWNrZWQoY3R4LCBpbWFnZSk7Cj4g
K30KPiArCj4gKy8qCj4gKyAqIHJldHVybiB0aGUgbnVtYmVyIG9mIHJ1bnMgaW4gZ2l2ZW4gcXVl
dWUgKHBlbmRpbmdfcSBvciBkb25lX3EpCj4gKyAqIGZvciB0aGlzIGNvbnRleHQuIGhvbGQgaXJx
bG9jayB3aGVuIGNhbGxpbmcuCj4gKyAqLwoKTW9zdCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgc2Vl
bXMgdG8gYmUgcnVubmluZyB1bmRlciBvbmUgYmlnIHNwaW5sb2NrLgpJcyB0aGlzIHJlYWxseSBu
ZWNlc3Nhcnk/CkFsbCB0aGUgSVJRIGhhbmRsZXJzIHRvIGlzIHBvdGVudGlhbGx5IGNhbGwgaXB1
X2ljX2NvbnZlcnRfc3RvcCwgdXBkYXRlCnRoZSBDUE1FTSwgbWFyayBidWZmZXJzIGFzIHJlYWR5
IGZvciB0aGUgSURNQUMsIGFuZCBhbmQgcHV0IHRoZSBjdXJyZW50CnJ1biBvbiB0aGUgZG9uZV9x
IHdoZW4gcmVhZHkuIENhbid0IHRoZSBJQy9JRE1BQyByZWdpc3RlciBhY2Nlc3MgYmUKbG9ja2Vk
IGNvbXBsZXRlbHkgc2VwYXJhdGVseSBmcm9tIHRoZSBsaXN0IGhhbmRsaW5nPwoKPiArc3RhdGlj
IGludCBpcHVfaWNfZ2V0X3J1bl9jb3VudChzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4
LAo+ICsJCQkJc3RydWN0IGxpc3RfaGVhZCAqcSkKPiArewo+ICsJc3RydWN0IGltYWdlX2NvbnZl
cnRlcl9ydW4gKnJ1bjsKPiArCWludCBjb3VudCA9IDA7CgpBZGQKCWxvY2tkZXBfYXNzZXJ0X2hl
bGQoJmN0eC0+aXJxbG9jayk7CmZvciB0aGUgZnVuY3Rpb25zIHRoYXQgZXhwZWN0IHRoZWlyIGNh
bGxlciB0byBiZSBob2xkaW5nIHRoZSBsb2NrLgoKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocnVu
LCBxLCBsaXN0KSB7Cj4gKwkJaWYgKHJ1bi0+Y3R4ID09IGN0eCkKPiArCQkJY291bnQrKzsKPiAr
CX0KPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gKy8qIGhvbGQgaXJxbG9jayB3aGVu
IGNhbGxpbmcgKi8KPiArc3RhdGljIHZvaWQgaXB1X2ljX2NvbnZlcnRfc3RvcChzdHJ1Y3QgaW1h
Z2VfY29udmVydGVyX3J1biAqcnVuKQo+ICt7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0
eCAqY3R4ID0gcnVuLT5jdHg7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyICpjdnQgPSBjdHgt
PmN2dDsKPiArCXN0cnVjdCBpcHVfaWNfcHJpdiAqcHJpdiA9IGN2dC0+aWMtPnByaXY7Cj4gKwo+
ICsJZGV2X2RiZyhwcml2LT5pcHUtPmRldiwgIiVzOiBzdG9wcGluZyBjdHggJXAgcnVuICVwXG4i
LAo+ICsJCV9fZnVuY19fLCBjdHgsIHJ1bik7CgpNYXliZSBhZGQgc29tZSBpbmRpY2F0aW9uIHdo
aWNoIElDIHRhc2sgdGhpcyBjb250ZXh0IGJlbG9uZ3MgdG8/Cgo+ICsJLyogZGlzYWJsZSBJQyB0
YXNrcyBhbmQgdGhlIGNoYW5uZWxzICovCj4gKwlpcHVfaWNfdGFza19kaXNhYmxlKGN2dC0+aWMp
Owo+ICsJaXB1X2lkbWFjX2Rpc2FibGVfY2hhbm5lbChjdnQtPmluX2NoYW4pOwo+ICsJaXB1X2lk
bWFjX2Rpc2FibGVfY2hhbm5lbChjdnQtPm91dF9jaGFuKTsKPiArCj4gKwlpZiAoaXB1X3JvdF9t
b2RlX2lzX2lydChjdHgtPnJvdF9tb2RlKSkgewo+ICsJCWlwdV9pZG1hY19kaXNhYmxlX2NoYW5u
ZWwoY3Z0LT5yb3RhdGlvbl9pbl9jaGFuKTsKPiArCQlpcHVfaWRtYWNfZGlzYWJsZV9jaGFubmVs
KGN2dC0+cm90YXRpb25fb3V0X2NoYW4pOwo+ICsJCWlwdV9pZG1hY191bmxpbmsoY3Z0LT5vdXRf
Y2hhbiwgY3Z0LT5yb3RhdGlvbl9pbl9jaGFuKTsKPiArCX0KPiArCj4gKwlpcHVfaWNfZGlzYWJs
ZShjdnQtPmljKTsKPiArfQo+ICsKPiArLyogaG9sZCBpcnFsb2NrIHdoZW4gY2FsbGluZyAqLwo+
ICtzdGF0aWMgdm9pZCBpbml0X2lkbWFjX2NoYW5uZWwoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9j
dHggKmN0eCwKPiArCQkJICAgICAgIHN0cnVjdCBpcHV2M19jaGFubmVsICpjaGFubmVsLAo+ICsJ
CQkgICAgICAgc3RydWN0IGlwdV9pY19pbWFnZSAqaW1hZ2UsCj4gKwkJCSAgICAgICBlbnVtIGlw
dV9yb3RhdGVfbW9kZSByb3RfbW9kZSwKPiArCQkJICAgICAgIGJvb2wgcm90X3N3YXBfd2lkdGhf
aGVpZ2h0KQo+ICt7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyICpjdnQgPSBjdHgtPmN2dDsK
PiArCXVuc2lnbmVkIGludCBidXJzdF9zaXplOwo+ICsJdTMyIHdpZHRoLCBoZWlnaHQsIHN0cmlk
ZTsKPiArCWRtYV9hZGRyX3QgYWRkcjAsIGFkZHIxID0gMDsKPiArCXN0cnVjdCBpcHVfaW1hZ2Ug
dGlsZV9pbWFnZTsKPiArCXVuc2lnbmVkIGludCB0aWxlX2lkeFsyXTsKPiArCj4gKwlpZiAoaW1h
Z2UtPnR5cGUgPT0gSU1BR0VfQ09OVkVSVF9PVVQpIHsKPiArCQl0aWxlX2lkeFswXSA9IGN0eC0+
b3V0X3RpbGVfbWFwWzBdOwo+ICsJCXRpbGVfaWR4WzFdID0gY3R4LT5vdXRfdGlsZV9tYXBbMV07
Cj4gKwl9IGVsc2Ugewo+ICsJCXRpbGVfaWR4WzBdID0gMDsKPiArCQl0aWxlX2lkeFsxXSA9IDE7
Cj4gKwl9Cj4gKwo+ICsJaWYgKHJvdF9zd2FwX3dpZHRoX2hlaWdodCkgewo+ICsJCXdpZHRoID0g
aW1hZ2UtPnRpbGVbMF0uaGVpZ2h0Owo+ICsJCWhlaWdodCA9IGltYWdlLT50aWxlWzBdLndpZHRo
Owo+ICsJCXN0cmlkZSA9IGltYWdlLT50aWxlWzBdLnJvdF9zdHJpZGU7Cj4gKwkJYWRkcjAgPSBj
dHgtPnJvdF9pbnRlcm1lZGlhdGVbMF0ucGh5czsKPiArCQlpZiAoY3R4LT5kb3VibGVfYnVmZmVy
aW5nKQo+ICsJCQlhZGRyMSA9IGN0eC0+cm90X2ludGVybWVkaWF0ZVsxXS5waHlzOwo+ICsJfSBl
bHNlIHsKPiArCQl3aWR0aCA9IGltYWdlLT50aWxlWzBdLndpZHRoOwo+ICsJCWhlaWdodCA9IGlt
YWdlLT50aWxlWzBdLmhlaWdodDsKPiArCQlzdHJpZGUgPSBpbWFnZS0+c3RyaWRlOwo+ICsJCWFk
ZHIwID0gaW1hZ2UtPmJhc2UucGh5czAgKwo+ICsJCQlpbWFnZS0+dGlsZVt0aWxlX2lkeFswXV0u
b2Zmc2V0Owo+ICsJCWlmIChjdHgtPmRvdWJsZV9idWZmZXJpbmcpCj4gKwkJCWFkZHIxID0gaW1h
Z2UtPmJhc2UucGh5czAgKwo+ICsJCQkJaW1hZ2UtPnRpbGVbdGlsZV9pZHhbMV1dLm9mZnNldDsK
PiArCX0KPiArCj4gKwlpcHVfY3BtZW1femVybyhjaGFubmVsKTsKPiArCj4gKwltZW1zZXQoJnRp
bGVfaW1hZ2UsIDAsIHNpemVvZih0aWxlX2ltYWdlKSk7Cj4gKwl0aWxlX2ltYWdlLnBpeC53aWR0
aCA9IHRpbGVfaW1hZ2UucmVjdC53aWR0aCA9IHdpZHRoOwo+ICsJdGlsZV9pbWFnZS5waXguaGVp
Z2h0ID0gdGlsZV9pbWFnZS5yZWN0LmhlaWdodCA9IGhlaWdodDsKPiArCXRpbGVfaW1hZ2UucGl4
LmJ5dGVzcGVybGluZSA9IHN0cmlkZTsKPiArCXRpbGVfaW1hZ2UucGl4LnBpeGVsZm9ybWF0ID0g
IGltYWdlLT5mbXQtPmZvdXJjYzsKPiArCXRpbGVfaW1hZ2UucGh5czAgPSBhZGRyMDsKPiArCXRp
bGVfaW1hZ2UucGh5czEgPSBhZGRyMTsKPiArCWlwdV9jcG1lbV9zZXRfaW1hZ2UoY2hhbm5lbCwg
JnRpbGVfaW1hZ2UpOwo+ICsKPiArCWlmIChpbWFnZS0+Zm10LT55X2RlcHRoICYmICFyb3Rfc3dh
cF93aWR0aF9oZWlnaHQpCj4gKwkJaXB1X2NwbWVtX3NldF91dl9vZmZzZXQoY2hhbm5lbCwKPiAr
CQkJCQlpbWFnZS0+dGlsZVt0aWxlX2lkeFswXV0udV9vZmYsCj4gKwkJCQkJaW1hZ2UtPnRpbGVb
dGlsZV9pZHhbMF1dLnZfb2ZmKTsKPiArCj4gKwlpZiAocm90X21vZGUpCj4gKwkJaXB1X2NwbWVt
X3NldF9yb3RhdGlvbihjaGFubmVsLCByb3RfbW9kZSk7Cj4gKwo+ICsJaWYgKGNoYW5uZWwgPT0g
Y3Z0LT5yb3RhdGlvbl9pbl9jaGFuIHx8Cj4gKwkgICAgY2hhbm5lbCA9PSBjdnQtPnJvdGF0aW9u
X291dF9jaGFuKSB7Cj4gKwkJYnVyc3Rfc2l6ZSA9IDg7Cj4gKwkJaXB1X2NwbWVtX3NldF9ibG9j
a19tb2RlKGNoYW5uZWwpOwo+ICsJfSBlbHNlCj4gKwkJYnVyc3Rfc2l6ZSA9ICh3aWR0aCAlIDE2
KSA/IDggOiAxNjsKClRoaXMgaXMgZm9yIGxhdGVyLCBidXQgaXQgbWlnaHQgdHVybiBvdXQgdG8g
YmUgYmV0dGVyIHRvIGFjY2VwdCBhIGxpdHRsZQpvdmVyZHJhdyBpZiBzdHJpZGUgYWxsb3dzIGZv
ciBpdCBhbmQgdXNlIHRoZSBsYXJnZXIgYnVyc3Qgc2l6ZSwKZXNwZWNpYWxseSBmb3Igd2lkZSBp
bWFnZXMuCgo+ICsJaXB1X2NwbWVtX3NldF9idXJzdHNpemUoY2hhbm5lbCwgYnVyc3Rfc2l6ZSk7
Cj4gKwo+ICsJaXB1X2ljX3Rhc2tfaWRtYV9pbml0KGN2dC0+aWMsIGNoYW5uZWwsIHdpZHRoLCBo
ZWlnaHQsCj4gKwkJCSAgICAgIGJ1cnN0X3NpemUsIHJvdF9tb2RlKTsKPiArCj4gKwlpcHVfY3Bt
ZW1fc2V0X2F4aV9pZChjaGFubmVsLCAxKTsKPiArCj4gKwlpcHVfaWRtYWNfc2V0X2RvdWJsZV9i
dWZmZXIoY2hhbm5lbCwgY3R4LT5kb3VibGVfYnVmZmVyaW5nKTsKPiArfQo+ICsKPiArLyogaG9s
ZCBpcnFsb2NrIHdoZW4gY2FsbGluZyAqLwo+ICtzdGF0aWMgaW50IGlwdV9pY19jb252ZXJ0X3N0
YXJ0KHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVuICpydW4pCj4gK3sKPiArCXN0cnVjdCBpbWFn
ZV9jb252ZXJ0ZXJfY3R4ICpjdHggPSBydW4tPmN0eDsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0
ZXIgKmN2dCA9IGN0eC0+Y3Z0Owo+ICsJc3RydWN0IGlwdV9pY19wcml2ICpwcml2ID0gY3Z0LT5p
Yy0+cHJpdjsKPiArCXN0cnVjdCBpcHVfaWNfaW1hZ2UgKnNfaW1hZ2UgPSAmY3R4LT5pbjsKPiAr
CXN0cnVjdCBpcHVfaWNfaW1hZ2UgKmRfaW1hZ2UgPSAmY3R4LT5vdXQ7Cj4gKwllbnVtIGlwdV9j
b2xvcl9zcGFjZSBzcmNfY3MsIGRlc3RfY3M7Cj4gKwl1bnNpZ25lZCBpbnQgZGVzdF93aWR0aCwg
ZGVzdF9oZWlnaHQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldl9kYmcocHJpdi0+aXB1LT5kZXYs
ICIlczogc3RhcnRpbmcgY3R4ICVwIHJ1biAlcFxuIiwKPiArCQlfX2Z1bmNfXywgY3R4LCBydW4p
Owo+ICsKPiArCXNyY19jcyA9IGlwdV9waXhlbGZvcm1hdF90b19jb2xvcnNwYWNlKHNfaW1hZ2Ut
PmZtdC0+Zm91cmNjKTsKPiArCWRlc3RfY3MgPSBpcHVfcGl4ZWxmb3JtYXRfdG9fY29sb3JzcGFj
ZShkX2ltYWdlLT5mbXQtPmZvdXJjYyk7Cj4gKwo+ICsJaWYgKGlwdV9yb3RfbW9kZV9pc19pcnQo
Y3R4LT5yb3RfbW9kZSkpIHsKPiArCQkvKiBzd2FwIHdpZHRoL2hlaWdodCBmb3IgcmVzaXplciAq
Lwo+ICsJCWRlc3Rfd2lkdGggPSBkX2ltYWdlLT50aWxlWzBdLmhlaWdodDsKPiArCQlkZXN0X2hl
aWdodCA9IGRfaW1hZ2UtPnRpbGVbMF0ud2lkdGg7Cj4gKwl9IGVsc2Ugewo+ICsJCWRlc3Rfd2lk
dGggPSBkX2ltYWdlLT50aWxlWzBdLndpZHRoOwo+ICsJCWRlc3RfaGVpZ2h0ID0gZF9pbWFnZS0+
dGlsZVswXS5oZWlnaHQ7Cj4gKwl9Cj4gKwo+ICsJLyogc2V0dXAgdGhlIElDIHJlc2l6ZXIgYW5k
IENTQyAqLwo+ICsJcmV0ID0gaXB1X2ljX3Rhc2tfaW5pdChjdnQtPmljLAo+ICsJCQkgICAgICAg
c19pbWFnZS0+dGlsZVswXS53aWR0aCwKPiArCQkJICAgICAgIHNfaW1hZ2UtPnRpbGVbMF0uaGVp
Z2h0LAo+ICsJCQkgICAgICAgZGVzdF93aWR0aCwKPiArCQkJICAgICAgIGRlc3RfaGVpZ2h0LAo+
ICsJCQkgICAgICAgc3JjX2NzLCBkZXN0X2NzKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJy
KHByaXYtPmlwdS0+ZGV2LCAiaXB1X2ljX3Rhc2tfaW5pdCBmYWlsZWQsICVkXG4iLCByZXQpOwo+
ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogaW5pdCB0aGUgc291cmNlIE1FTS0tPklD
IFBQIElETUFDIGNoYW5uZWwgKi8KPiArCWluaXRfaWRtYWNfY2hhbm5lbChjdHgsIGN2dC0+aW5f
Y2hhbiwgc19pbWFnZSwKPiArCQkJICAgSVBVX1JPVEFURV9OT05FLCBmYWxzZSk7Cj4gKwo+ICsJ
aWYgKGlwdV9yb3RfbW9kZV9pc19pcnQoY3R4LT5yb3RfbW9kZSkpIHsKPiArCQkvKiBpbml0IHRo
ZSBJQyBQUC0tPk1FTSBJRE1BQyBjaGFubmVsICovCj4gKwkJaW5pdF9pZG1hY19jaGFubmVsKGN0
eCwgY3Z0LT5vdXRfY2hhbiwgZF9pbWFnZSwKPiArCQkJCSAgIElQVV9ST1RBVEVfTk9ORSwgdHJ1
ZSk7Cj4gKwo+ICsJCS8qIGluaXQgdGhlIE1FTS0tPklDIFBQIFJPVCBJRE1BQyBjaGFubmVsICov
Cj4gKwkJaW5pdF9pZG1hY19jaGFubmVsKGN0eCwgY3Z0LT5yb3RhdGlvbl9pbl9jaGFuLCBkX2lt
YWdlLAo+ICsJCQkJICAgY3R4LT5yb3RfbW9kZSwgdHJ1ZSk7Cj4gKwo+ICsJCS8qIGluaXQgdGhl
IGRlc3RpbmF0aW9uIElDIFBQIFJPVC0tPk1FTSBJRE1BQyBjaGFubmVsICovCj4gKwkJaW5pdF9p
ZG1hY19jaGFubmVsKGN0eCwgY3Z0LT5yb3RhdGlvbl9vdXRfY2hhbiwgZF9pbWFnZSwKPiArCQkJ
CSAgIElQVV9ST1RBVEVfTk9ORSwgZmFsc2UpOwo+ICsKPiArCQkvKiBub3cgbGluayBJQyBQUC0t
Pk1FTSB0byBNRU0tLT5JQyBQUCBST1QgKi8KPiArCQlpcHVfaWRtYWNfbGluayhjdnQtPm91dF9j
aGFuLCBjdnQtPnJvdGF0aW9uX2luX2NoYW4pOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBpbml0IHRo
ZSBkZXN0aW5hdGlvbiBJQyBQUC0tPk1FTSBJRE1BQyBjaGFubmVsICovCj4gKwkJaW5pdF9pZG1h
Y19jaGFubmVsKGN0eCwgY3Z0LT5vdXRfY2hhbiwgZF9pbWFnZSwKPiArCQkJCSAgIGN0eC0+cm90
X21vZGUsIGZhbHNlKTsKPiArCX0KPiArCj4gKwkvKiBlbmFibGUgdGhlIElDICovCj4gKwlpcHVf
aWNfZW5hYmxlKGN2dC0+aWMpOwo+ICsKPiArCS8qIHNldCBidWZmZXJzIHJlYWR5ICovCj4gKwlp
cHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihjdnQtPmluX2NoYW4sIDApOwo+ICsJaXB1X2lkbWFjX3Nl
bGVjdF9idWZmZXIoY3Z0LT5vdXRfY2hhbiwgMCk7Cj4gKwlpZiAoaXB1X3JvdF9tb2RlX2lzX2ly
dChjdHgtPnJvdF9tb2RlKSkKPiArCQlpcHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihjdnQtPnJvdGF0
aW9uX291dF9jaGFuLCAwKTsKPiArCWlmIChjdHgtPmRvdWJsZV9idWZmZXJpbmcpIHsKPiArCQlp
cHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihjdnQtPmluX2NoYW4sIDEpOwo+ICsJCWlwdV9pZG1hY19z
ZWxlY3RfYnVmZmVyKGN2dC0+b3V0X2NoYW4sIDEpOwo+ICsJCWlmIChpcHVfcm90X21vZGVfaXNf
aXJ0KGN0eC0+cm90X21vZGUpKQo+ICsJCQlpcHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihjdnQtPnJv
dGF0aW9uX291dF9jaGFuLCAxKTsKPiArCX0KPiArCj4gKwkvKiBlbmFibGUgdGhlIGNoYW5uZWxz
ISAqLwo+ICsJaXB1X2lkbWFjX2VuYWJsZV9jaGFubmVsKGN2dC0+aW5fY2hhbik7Cj4gKwlpcHVf
aWRtYWNfZW5hYmxlX2NoYW5uZWwoY3Z0LT5vdXRfY2hhbik7Cj4gKwlpZiAoaXB1X3JvdF9tb2Rl
X2lzX2lydChjdHgtPnJvdF9tb2RlKSkgewo+ICsJCWlwdV9pZG1hY19lbmFibGVfY2hhbm5lbChj
dnQtPnJvdGF0aW9uX2luX2NoYW4pOwo+ICsJCWlwdV9pZG1hY19lbmFibGVfY2hhbm5lbChjdnQt
PnJvdGF0aW9uX291dF9jaGFuKTsKPiArCX0KPiArCj4gKwlpcHVfaWNfdGFza19lbmFibGUoY3Z0
LT5pYyk7Cj4gKwo+ICsJaXB1X2NwbWVtX2R1bXAoY3Z0LT5pbl9jaGFuKTsKPiArCWlwdV9jcG1l
bV9kdW1wKGN2dC0+b3V0X2NoYW4pOwo+ICsJaWYgKGlwdV9yb3RfbW9kZV9pc19pcnQoY3R4LT5y
b3RfbW9kZSkpIHsKPiArCQlpcHVfY3BtZW1fZHVtcChjdnQtPnJvdGF0aW9uX2luX2NoYW4pOwo+
ICsJCWlwdV9jcG1lbV9kdW1wKGN2dC0+cm90YXRpb25fb3V0X2NoYW4pOwo+ICsJfQo+ICsKPiAr
CWlwdV9kdW1wKHByaXYtPmlwdSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIGhv
bGQgaXJxbG9jayB3aGVuIGNhbGxpbmcgKi8KPiArc3RhdGljIGludCBpcHVfaWNfcnVuKHN0cnVj
dCBpbWFnZV9jb252ZXJ0ZXJfcnVuICpydW4pCj4gK3sKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0
ZXJfY3R4ICpjdHggPSBydW4tPmN0eDsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXIgKmN2dCA9
IGN0eC0+Y3Z0Owo+ICsKPiArCWN0eC0+aW4uYmFzZS5waHlzMCA9IHJ1bi0+aW5fcGh5czsKPiAr
CWN0eC0+b3V0LmJhc2UucGh5czAgPSBydW4tPm91dF9waHlzOwo+ICsKPiArCWN0eC0+Y3VyX2J1
Zl9udW0gPSAwOwo+ICsJY3R4LT5uZXh0X3RpbGUgPSAxOwo+ICsKPiArCS8qIHJlbW92ZSBydW4g
ZnJvbSBwZW5kaW5nX3EgYW5kIHNldCBhcyBjdXJyZW50ICovCj4gKwlsaXN0X2RlbCgmcnVuLT5s
aXN0KTsKPiArCWN2dC0+Y3VycmVudF9ydW4gPSBydW47Cj4gKwo+ICsJcmV0dXJuIGlwdV9pY19j
b252ZXJ0X3N0YXJ0KHJ1bik7Cj4gK30KPiArCj4gKy8qIGhvbGQgaXJxbG9jayB3aGVuIGNhbGxp
bmcgKi8KPiArc3RhdGljIHZvaWQgaXB1X2ljX3J1bl9uZXh0KHN0cnVjdCBpbWFnZV9jb252ZXJ0
ZXIgKmN2dCkKPiArewo+ICsJc3RydWN0IGlwdV9pY19wcml2ICpwcml2ID0gY3Z0LT5pYy0+cHJp
djsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVuICpydW4sICp0bXA7Cj4gKwlpbnQgcmV0
Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydW4sIHRtcCwgJmN2dC0+cGVuZGlu
Z19xLCBsaXN0KSB7Cj4gKwkJLyogc2tpcCBjb250ZXh0cyB0aGF0IGFyZSBhYm9ydGluZyAqLwo+
ICsJCWlmIChydW4tPmN0eC0+YWJvcnRpbmcpIHsKPiArCQkJZGV2X2RiZyhwcml2LT5pcHUtPmRl
diwKPiArCQkJCSAiJXM6IHNraXBwaW5nIGFib3J0aW5nIGN0eCAlcCBydW4gJXBcbiIsCj4gKwkJ
CQkgX19mdW5jX18sIHJ1bi0+Y3R4LCBydW4pOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+
ICsJCXJldCA9IGlwdV9pY19ydW4ocnVuKTsKPiArCQlpZiAoIXJldCkKPiArCQkJYnJlYWs7Cj4g
Kwo+ICsJCS8qCj4gKwkJICogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBzdGFydCwgYWRkIHRo
ZSBydW4KPiArCQkgKiB0byBkb25lIHEgYW5kIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHJ1biBpbiB0
aGUKPiArCQkgKiBwZW5kaW5nIHEuCj4gKwkJICovCj4gKwkJcnVuLT5zdGF0dXMgPSByZXQ7Cj4g
KwkJbGlzdF9hZGRfdGFpbCgmcnVuLT5saXN0LCAmY3Z0LT5kb25lX3EpOwo+ICsJCWN2dC0+Y3Vy
cmVudF9ydW4gPSBOVUxMOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpcHVfaWNfZW1w
dHlfZG9uZV9xKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXIgKmN2dCkKPiArewo+ICsJc3RydWN0IGlw
dV9pY19wcml2ICpwcml2ID0gY3Z0LT5pYy0+cHJpdjsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0
ZXJfcnVuICpydW47Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNwaW5fbG9ja19p
cnFzYXZlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4gKwl3aGlsZSAoIWxpc3RfZW1wdHko
JmN2dC0+ZG9uZV9xKSkgewo+ICsJCXJ1biA9IGxpc3RfZW50cnkoY3Z0LT5kb25lX3EubmV4dCwK
PiArCQkJCSBzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX3J1biwKPiArCQkJCSBsaXN0KTsKPiArCj4g
KwkJbGlzdF9kZWwoJnJ1bi0+bGlzdCk7Cj4gKwo+ICsJCWRldl9kYmcocHJpdi0+aXB1LT5kZXYs
Cj4gKwkJCSIlczogY29tcGxldGluZyBjdHggJXAgcnVuICVwIHdpdGggJWRcbiIsCj4gKwkJCV9f
ZnVuY19fLCBydW4tPmN0eCwgcnVuLCBydW4tPnN0YXR1cyk7Cj4gKwo+ICsJCS8qIGNhbGwgdGhl
IGNvbXBsZXRpb24gY2FsbGJhY2sgYW5kIGZyZWUgdGhlIHJ1biAqLwo+ICsJCXNwaW5fdW5sb2Nr
X2lycXJlc3RvcmUoJmN2dC0+aXJxbG9jaywgZmxhZ3MpOwo+ICsJCXJ1bi0+Y3R4LT5jb21wbGV0
ZShydW4tPmN0eC0+Y29tcGxldGVfY29udGV4dCwgcnVuLAo+ICsJCQkJICAgcnVuLT5zdGF0dXMp
Owo+ICsJCWtmcmVlKHJ1bik7Cj4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmN2dC0+aXJxbG9jaywg
ZmxhZ3MpOwo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN2dC0+aXJxbG9j
aywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiB0aGUgYm90dG9tIGhhbGYgdGhyZWFkIGNs
ZWFycyBvdXQgdGhlIGRvbmVfcSwgY2FsbGluZyB0aGUKPiArICogY29tcGxldGlvbiBoYW5kbGVy
IGZvciBlYWNoLgo+ICsgKi8KPiArc3RhdGljIGlycXJldHVybl90IGlwdV9pY19iaChpbnQgaXJx
LCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXIgKmN2dCA9IGRl
dl9pZDsKPiArCXN0cnVjdCBpcHVfaWNfcHJpdiAqcHJpdiA9IGN2dC0+aWMtPnByaXY7Cj4gKwlz
dHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK
PiArCj4gKwlkZXZfZGJnKHByaXYtPmlwdS0+ZGV2LCAiJXM6IGVudGVyXG4iLCBfX2Z1bmNfXyk7
Cj4gKwo+ICsJaXB1X2ljX2VtcHR5X2RvbmVfcShjdnQpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFz
YXZlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4gKwkvKgo+ICsJICogdGhlIGRvbmVfcSBp
cyBjbGVhcmVkIG91dCwgc2lnbmFsIGFueSBjb250ZXh0cwo+ICsJICogdGhhdCBhcmUgYWJvcnRp
bmcgdGhhdCBhYm9ydCBjYW4gY29tcGxldGUuCj4gKwkgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50
cnkoY3R4LCAmY3Z0LT5jdHhfbGlzdCwgbGlzdCkgewo+ICsJCWlmIChjdHgtPmFib3J0aW5nKSB7
Cj4gKwkJCWRldl9kYmcocHJpdi0+aXB1LT5kZXYsCj4gKwkJCQkgIiVzOiBzaWduYWxpbmcgYWJv
cnQgZm9yIGN0eCAlcFxuIiwKPiArCQkJCSBfX2Z1bmNfXywgY3R4KTsKPiArCQkJY29tcGxldGUo
JmN0eC0+YWJvcnRlZCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv
cmUoJmN2dC0+aXJxbG9jaywgZmxhZ3MpOwo+ICsKPiArCWRldl9kYmcocHJpdi0+aXB1LT5kZXYs
ICIlczogZXhpdFxuIiwgX19mdW5jX18pOwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4g
Kwo+ICsvKiBob2xkIGlycWxvY2sgd2hlbiBjYWxsaW5nICovCj4gK3N0YXRpYyBpcnFyZXR1cm5f
dCBpcHVfaWNfZG9pcnEoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9ydW4gKnJ1bikKPiArewo+ICsJ
c3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0eCA9IHJ1bi0+Y3R4Owo+ICsJc3RydWN0IGlt
YWdlX2NvbnZlcnRlciAqY3Z0ID0gY3R4LT5jdnQ7Cj4gKwlzdHJ1Y3QgaXB1X2ljX3RpbGUgKnNy
Y190aWxlLCAqZHN0X3RpbGU7Cj4gKwlzdHJ1Y3QgaXB1X2ljX2ltYWdlICpzX2ltYWdlID0gJmN0
eC0+aW47Cj4gKwlzdHJ1Y3QgaXB1X2ljX2ltYWdlICpkX2ltYWdlID0gJmN0eC0+b3V0Owo+ICsJ
c3RydWN0IGlwdXYzX2NoYW5uZWwgKm91dGNoOwo+ICsJdW5zaWduZWQgaW50IGRzdF9pZHg7Cj4g
Kwo+ICsJb3V0Y2ggPSBpcHVfcm90X21vZGVfaXNfaXJ0KGN0eC0+cm90X21vZGUpID8KPiArCQlj
dnQtPnJvdGF0aW9uX291dF9jaGFuIDogY3Z0LT5vdXRfY2hhbjsKPiArCj4gKwkvKgo+ICsJICog
SXQgaXMgZGlmZmljdWx0IHRvIHN0b3AgdGhlIGNoYW5uZWwgRE1BIGJlZm9yZSB0aGUgY2hhbm5l
bHMKPiArCSAqIGVudGVyIHRoZSBwYXVzZWQgc3RhdGUuIFdpdGhvdXQgZG91YmxlLWJ1ZmZlcmlu
ZyB0aGUgY2hhbm5lbHMKPiArCSAqIGFyZSBhbHdheXMgaW4gYSBwYXVzZWQgc3RhdGUgd2hlbiB0
aGUgRU9GIGlycSBvY2N1cnMsIHNvIGl0Cj4gKwkgKiBpcyBzYWZlIHRvIHN0b3AgdGhlIGNoYW5u
ZWxzIG5vdy4gRm9yIGRvdWJsZS1idWZmZXJpbmcgd2UKPiArCSAqIGp1c3QgaWdub3JlIHRoZSBh
Ym9ydCB1bnRpbCB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcywgd2hlbiBpdAo+ICsJICogaXMgc2Fm
ZSB0byBzaHV0IGRvd24uCj4gKwkgKi8KPiArCWlmIChjdHgtPmFib3J0aW5nICYmICFjdHgtPmRv
dWJsZV9idWZmZXJpbmcpIHsKPiArCQlpcHVfaWNfY29udmVydF9zdG9wKHJ1bik7Cj4gKwkJcnVu
LT5zdGF0dXMgPSAtRUlPOwo+ICsJCWdvdG8gZG9uZTsKPiArCX0KPiArCj4gKwlpZiAoY3R4LT5u
ZXh0X3RpbGUgPT0gY3R4LT5udW1fdGlsZXMpIHsKPiArCQkvKgo+ICsJCSAqIHRoZSBjb252ZXJz
aW9uIGlzIGNvbXBsZXRlCj4gKwkJICovCj4gKwkJaXB1X2ljX2NvbnZlcnRfc3RvcChydW4pOwo+
ICsJCXJ1bi0+c3RhdHVzID0gMDsKPiArCQlnb3RvIGRvbmU7Cj4gKwl9Cj4gKwo+ICsJLyoKPiAr
CSAqIG5vdCBkb25lLCBwbGFjZSB0aGUgbmV4dCB0aWxlIGJ1ZmZlcnMuCj4gKwkgKi8KPiArCWlm
ICghY3R4LT5kb3VibGVfYnVmZmVyaW5nKSB7Cj4gKwo+ICsJCXNyY190aWxlID0gJnNfaW1hZ2Ut
PnRpbGVbY3R4LT5uZXh0X3RpbGVdOwo+ICsJCWRzdF9pZHggPSBjdHgtPm91dF90aWxlX21hcFtj
dHgtPm5leHRfdGlsZV07Cj4gKwkJZHN0X3RpbGUgPSAmZF9pbWFnZS0+dGlsZVtkc3RfaWR4XTsK
PiArCj4gKwkJaXB1X2NwbWVtX3NldF9idWZmZXIoY3Z0LT5pbl9jaGFuLCAwLAo+ICsJCQkJICAg
ICBzX2ltYWdlLT5iYXNlLnBoeXMwICsgc3JjX3RpbGUtPm9mZnNldCk7Cj4gKwkJaXB1X2NwbWVt
X3NldF9idWZmZXIob3V0Y2gsIDAsCj4gKwkJCQkgICAgIGRfaW1hZ2UtPmJhc2UucGh5czAgKyBk
c3RfdGlsZS0+b2Zmc2V0KTsKPiArCQlpZiAoc19pbWFnZS0+Zm10LT55X2RlcHRoKQo+ICsJCQlp
cHVfY3BtZW1fc2V0X3V2X29mZnNldChjdnQtPmluX2NoYW4sCj4gKwkJCQkJCXNyY190aWxlLT51
X29mZiwKPiArCQkJCQkJc3JjX3RpbGUtPnZfb2ZmKTsKPiArCQlpZiAoZF9pbWFnZS0+Zm10LT55
X2RlcHRoKQo+ICsJCQlpcHVfY3BtZW1fc2V0X3V2X29mZnNldChvdXRjaCwKPiArCQkJCQkJZHN0
X3RpbGUtPnVfb2ZmLAo+ICsJCQkJCQlkc3RfdGlsZS0+dl9vZmYpOwo+ICsKPiArCQlpcHVfaWRt
YWNfc2VsZWN0X2J1ZmZlcihjdnQtPmluX2NoYW4sIDApOwo+ICsJCWlwdV9pZG1hY19zZWxlY3Rf
YnVmZmVyKG91dGNoLCAwKTsKPiArCj4gKwl9IGVsc2UgaWYgKGN0eC0+bmV4dF90aWxlIDwgY3R4
LT5udW1fdGlsZXMgLSAxKSB7Cj4gKwo+ICsJCXNyY190aWxlID0gJnNfaW1hZ2UtPnRpbGVbY3R4
LT5uZXh0X3RpbGUgKyAxXTsKPiArCQlkc3RfaWR4ID0gY3R4LT5vdXRfdGlsZV9tYXBbY3R4LT5u
ZXh0X3RpbGUgKyAxXTsKPiArCQlkc3RfdGlsZSA9ICZkX2ltYWdlLT50aWxlW2RzdF9pZHhdOwo+
ICsKPiArCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihjdnQtPmluX2NoYW4sIGN0eC0+Y3VyX2J1Zl9u
dW0sCj4gKwkJCQkgICAgIHNfaW1hZ2UtPmJhc2UucGh5czAgKyBzcmNfdGlsZS0+b2Zmc2V0KTsK
PiArCQlpcHVfY3BtZW1fc2V0X2J1ZmZlcihvdXRjaCwgY3R4LT5jdXJfYnVmX251bSwKPiArCQkJ
CSAgICAgZF9pbWFnZS0+YmFzZS5waHlzMCArIGRzdF90aWxlLT5vZmZzZXQpOwo+ICsKPiArCQlp
cHVfaWRtYWNfc2VsZWN0X2J1ZmZlcihjdnQtPmluX2NoYW4sIGN0eC0+Y3VyX2J1Zl9udW0pOwo+
ICsJCWlwdV9pZG1hY19zZWxlY3RfYnVmZmVyKG91dGNoLCBjdHgtPmN1cl9idWZfbnVtKTsKPiAr
Cj4gKwkJY3R4LT5jdXJfYnVmX251bSBePSAxOwo+ICsJfQo+ICsKPiArCWN0eC0+bmV4dF90aWxl
Kys7Cj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gK2RvbmU6Cj4gKwlsaXN0X2FkZF90YWlsKCZy
dW4tPmxpc3QsICZjdnQtPmRvbmVfcSk7Cj4gKwljdnQtPmN1cnJlbnRfcnVuID0gTlVMTDsKPiAr
CWlwdV9pY19ydW5fbmV4dChjdnQpOwo+ICsJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKPiArfQo+
ICsKPiArc3RhdGljIGlycXJldHVybl90IGlwdV9pY19ub3JvdGF0ZV9pcnEoaW50IGlycSwgdm9p
ZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGltYWdlX2NvbnZlcnRlciAqY3Z0ID0gZGF0YTsKPiAr
CXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHg7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVy
dGVyX3J1biAqcnVuOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCWlycXJldHVybl90IHJl
dDsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3Z0LT5pcnFsb2NrLCBmbGFncyk7Cj4gKwo+
ICsJLyogZ2V0IGN1cnJlbnQgcnVuIGFuZCBpdHMgY29udGV4dCAqLwo+ICsJcnVuID0gY3Z0LT5j
dXJyZW50X3J1bjsKPiArCWlmICghcnVuKSB7Cj4gKwkJcmV0ID0gSVJRX05PTkU7Cj4gKwkJZ290
byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJY3R4ID0gcnVuLT5jdHg7Cj4gKwo+ICsJaWYgKGlwdV9yb3Rf
bW9kZV9pc19pcnQoY3R4LT5yb3RfbW9kZSkpIHsKPiArCQkvKiB0aGlzIGlzIGEgcm90YXRpb24g
b3BlcmF0aW9uLCBqdXN0IGlnbm9yZSAqLwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN2
dC0+aXJxbG9jaywgZmxhZ3MpOwo+ICsJCXJldHVybiBJUlFfSEFORExFRDsKPiArCX0KCldoeSBl
bmFibGUgdGhlIG91dF9jaGFuIEVPRiBpcnEgYXQgYWxsIHdoZW4gdXNpbmcgdGhlIElSVCBtb2Rl
PwoKPiArCj4gKwlyZXQgPSBpcHVfaWNfZG9pcnEocnVuKTsKPiArb3V0Ogo+ICsJc3Bpbl91bmxv
Y2tfaXJxcmVzdG9yZSgmY3Z0LT5pcnFsb2NrLCBmbGFncyk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9
Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgaXB1X2ljX3JvdGF0ZV9pcnEoaW50IGlycSwgdm9p
ZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGltYWdlX2NvbnZlcnRlciAqY3Z0ID0gZGF0YTsKPiAr
CXN0cnVjdCBpcHVfaWNfcHJpdiAqcHJpdiA9IGN2dC0+aWMtPnByaXY7Cj4gKwlzdHJ1Y3QgaW1h
Z2VfY29udmVydGVyX2N0eCAqY3R4Owo+ICsJc3RydWN0IGltYWdlX2NvbnZlcnRlcl9ydW4gKnJ1
bjsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlpcnFyZXR1cm5fdCByZXQ7Cj4gKwo+ICsJ
c3Bpbl9sb2NrX2lycXNhdmUoJmN2dC0+aXJxbG9jaywgZmxhZ3MpOwo+ICsKPiArCS8qIGdldCBj
dXJyZW50IHJ1biBhbmQgaXRzIGNvbnRleHQgKi8KPiArCXJ1biA9IGN2dC0+Y3VycmVudF9ydW47
Cj4gKwlpZiAoIXJ1bikgewo+ICsJCXJldCA9IElSUV9OT05FOwo+ICsJCWdvdG8gb3V0Owo+ICsJ
fQo+ICsKPiArCWN0eCA9IHJ1bi0+Y3R4Owo+ICsKPiArCWlmICghaXB1X3JvdF9tb2RlX2lzX2ly
dChjdHgtPnJvdF9tb2RlKSkgewo+ICsJCS8qIHRoaXMgd2FzIE5PVCBhIHJvdGF0aW9uIG9wZXJh
dGlvbiwgc2hvdWxkbid0IGhhcHBlbiAqLwo+ICsJCWRldl9lcnIocHJpdi0+aXB1LT5kZXYsICJV
bmV4cGVjdGVkIHJvdGF0aW9uIGludGVycnVwdFxuIik7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVz
dG9yZSgmY3Z0LT5pcnFsb2NrLCBmbGFncyk7Cj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsJ
fQo+ICsKPiArCXJldCA9IGlwdV9pY19kb2lycShydW4pOwo+ICtvdXQ6Cj4gKwlzcGluX3VubG9j
a19pcnFyZXN0b3JlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCXJldHVybiByZXQ7Cj4gK30K
PiArCj4gKy8qCj4gKyAqIHRyeSB0byBmb3JjZSB0aGUgY29tcGxldGlvbiBvZiBydW5zIGZvciB0
aGlzIGN0eC4gQ2FsbGVkIHdoZW4KPiArICogYWJvcnQgd2FpdCB0aW1lcyBvdXQgaW4gaXB1X2lt
YWdlX2NvbnZlcnRfYWJvcnQoKS4KPiArICovCj4gK3N0YXRpYyB2b2lkIGlwdV9pY19mb3JjZV9h
Ym9ydChzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaW1h
Z2VfY29udmVydGVyICpjdnQgPSBjdHgtPmN2dDsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJf
cnVuICpydW47Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXNwaW5fbG9ja19pcnFz
YXZlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4gKwlydW4gPSBjdnQtPmN1cnJlbnRfcnVu
Owo+ICsJaWYgKHJ1biAmJiBydW4tPmN0eCA9PSBjdHgpIHsKPiArCQlpcHVfaWNfY29udmVydF9z
dG9wKHJ1bik7Cj4gKwkJcnVuLT5zdGF0dXMgPSAtRUlPOwo+ICsJCWxpc3RfYWRkX3RhaWwoJnJ1
bi0+bGlzdCwgJmN2dC0+ZG9uZV9xKTsKPiArCQljdnQtPmN1cnJlbnRfcnVuID0gTlVMTDsKPiAr
CQlpcHVfaWNfcnVuX25leHQoY3Z0KTsKPiArCX0KPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0
b3JlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4gKwlpcHVfaWNfZW1wdHlfZG9uZV9xKGN2
dCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlwdV9pY19yZWxlYXNlX2lwdV9yZXNvdXJjZXMo
c3RydWN0IGltYWdlX2NvbnZlcnRlciAqY3Z0KQo+ICt7Cj4gKwlpZiAoY3Z0LT5vdXRfZW9mX2ly
cSA+PSAwKQo+ICsJCWZyZWVfaXJxKGN2dC0+b3V0X2VvZl9pcnEsIGN2dCk7Cj4gKwlpZiAoY3Z0
LT5yb3Rfb3V0X2VvZl9pcnEgPj0gMCkKPiArCQlmcmVlX2lycShjdnQtPnJvdF9vdXRfZW9mX2ly
cSwgY3Z0KTsKPiArCj4gKwlpZiAoIUlTX0VSUl9PUl9OVUxMKGN2dC0+aW5fY2hhbikpCj4gKwkJ
aXB1X2lkbWFjX3B1dChjdnQtPmluX2NoYW4pOwo+ICsJaWYgKCFJU19FUlJfT1JfTlVMTChjdnQt
Pm91dF9jaGFuKSkKPiArCQlpcHVfaWRtYWNfcHV0KGN2dC0+b3V0X2NoYW4pOwo+ICsJaWYgKCFJ
U19FUlJfT1JfTlVMTChjdnQtPnJvdGF0aW9uX2luX2NoYW4pKQo+ICsJCWlwdV9pZG1hY19wdXQo
Y3Z0LT5yb3RhdGlvbl9pbl9jaGFuKTsKPiArCWlmICghSVNfRVJSX09SX05VTEwoY3Z0LT5yb3Rh
dGlvbl9vdXRfY2hhbikpCj4gKwkJaXB1X2lkbWFjX3B1dChjdnQtPnJvdGF0aW9uX291dF9jaGFu
KTsKPiArCj4gKwljdnQtPmluX2NoYW4gPSBjdnQtPm91dF9jaGFuID0gY3Z0LT5yb3RhdGlvbl9p
bl9jaGFuID0KPiArCQljdnQtPnJvdGF0aW9uX291dF9jaGFuID0gTlVMTDsKPiArCWN2dC0+b3V0
X2VvZl9pcnEgPSBjdnQtPnJvdF9vdXRfZW9mX2lycSA9IC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMg
aW50IGlwdV9pY19nZXRfaXB1X3Jlc291cmNlcyhzdHJ1Y3QgaW1hZ2VfY29udmVydGVyICpjdnQp
Cj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpY190YXNrX2NoYW5uZWxzICpjaGFuID0gY3Z0LT5pYy0+
Y2g7Cj4gKwlzdHJ1Y3QgaXB1X2ljX3ByaXYgKnByaXYgPSBjdnQtPmljLT5wcml2Owo+ICsJaW50
IHJldDsKPiArCj4gKwkvKiBnZXQgSURNQUMgY2hhbm5lbHMgKi8KPiArCWN2dC0+aW5fY2hhbiA9
IGlwdV9pZG1hY19nZXQocHJpdi0+aXB1LCBjaGFuLT5pbik7Cj4gKwljdnQtPm91dF9jaGFuID0g
aXB1X2lkbWFjX2dldChwcml2LT5pcHUsIGNoYW4tPm91dCk7Cj4gKwlpZiAoSVNfRVJSKGN2dC0+
aW5fY2hhbikgfHwgSVNfRVJSKGN2dC0+b3V0X2NoYW4pKSB7Cj4gKwkJZGV2X2Vycihwcml2LT5p
cHUtPmRldiwgImNvdWxkIG5vdCBhY3F1aXJlIGlkbWFjIGNoYW5uZWxzXG4iKTsKPiArCQlyZXQg
PSAtRUJVU1k7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJY3Z0LT5yb3RhdGlvbl9pbl9j
aGFuID0gaXB1X2lkbWFjX2dldChwcml2LT5pcHUsIGNoYW4tPnJvdF9pbik7Cj4gKwljdnQtPnJv
dGF0aW9uX291dF9jaGFuID0gaXB1X2lkbWFjX2dldChwcml2LT5pcHUsIGNoYW4tPnJvdF9vdXQp
Owo+ICsJaWYgKElTX0VSUihjdnQtPnJvdGF0aW9uX2luX2NoYW4pIHx8IElTX0VSUihjdnQtPnJv
dGF0aW9uX291dF9jaGFuKSkgewo+ICsJCWRldl9lcnIocHJpdi0+aXB1LT5kZXYsCj4gKwkJCSJj
b3VsZCBub3QgYWNxdWlyZSBpZG1hYyByb3RhdGlvbiBjaGFubmVsc1xuIik7Cj4gKwkJcmV0ID0g
LUVCVVNZOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCS8qIGFjcXVpcmUgdGhlIEVPRiBp
bnRlcnJ1cHRzICovCj4gKwljdnQtPm91dF9lb2ZfaXJxID0gaXB1X2lkbWFjX2NoYW5uZWxfaXJx
KHByaXYtPmlwdSwKPiArCQkJCQkJY3Z0LT5vdXRfY2hhbiwKPiArCQkJCQkJSVBVX0lSUV9FT0Yp
Owo+ICsKPiArCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGN2dC0+b3V0X2VvZl9pcnEsCj4g
KwkJCQkgICBpcHVfaWNfbm9yb3RhdGVfaXJxLCBpcHVfaWNfYmgsCj4gKwkJCQkgICAwLCAiaXB1
LWljIiwgY3Z0KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihwcml2LT5pcHUtPmRl
diwgImNvdWxkIG5vdCBhY3F1aXJlIGlycSAlZFxuIiwKPiArCQkJIGN2dC0+b3V0X2VvZl9pcnEp
Owo+ICsJCWN2dC0+b3V0X2VvZl9pcnEgPSAtMTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4g
KwljdnQtPnJvdF9vdXRfZW9mX2lycSA9IGlwdV9pZG1hY19jaGFubmVsX2lycShwcml2LT5pcHUs
Cj4gKwkJCQkJCSAgICAgY3Z0LT5yb3RhdGlvbl9vdXRfY2hhbiwKPiArCQkJCQkJICAgICBJUFVf
SVJRX0VPRik7Cj4gKwo+ICsJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY3Z0LT5yb3Rfb3V0
X2VvZl9pcnEsCj4gKwkJCQkgICBpcHVfaWNfcm90YXRlX2lycSwgaXB1X2ljX2JoLAo+ICsJCQkJ
ICAgMCwgImlwdS1pYyIsIGN2dCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIocHJp
di0+aXB1LT5kZXYsICJjb3VsZCBub3QgYWNxdWlyZSBpcnEgJWRcbiIsCj4gKwkJCWN2dC0+cm90
X291dF9lb2ZfaXJxKTsKPiArCQljdnQtPnJvdF9vdXRfZW9mX2lycSA9IC0xOwo+ICsJCWdvdG8g
ZXJyOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICtlcnI6Cj4gKwlpcHVfaWNfcmVsZWFzZV9p
cHVfcmVzb3VyY2VzKGN2dCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50
IGlwdV9pY19maWxsX2ltYWdlKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHgsCj4gKwkJ
CSAgICAgc3RydWN0IGlwdV9pY19pbWFnZSAqaWNfaW1hZ2UsCj4gKwkJCSAgICAgc3RydWN0IGlw
dV9pbWFnZSAqaW1hZ2UsCj4gKwkJCSAgICAgZW51bSBpbWFnZV9jb252ZXJ0X3R5cGUgdHlwZSkK
PiArewo+ICsJc3RydWN0IGlwdV9pY19wcml2ICpwcml2ID0gY3R4LT5jdnQtPmljLT5wcml2Owo+
ICsKPiArCWljX2ltYWdlLT5iYXNlID0gKmltYWdlOwo+ICsJaWNfaW1hZ2UtPnR5cGUgPSB0eXBl
Owo+ICsKPiArCWljX2ltYWdlLT5mbXQgPSBpcHVfaWNfZ2V0X2Zvcm1hdChpbWFnZS0+cGl4LnBp
eGVsZm9ybWF0KTsKPiArCWlmICghaWNfaW1hZ2UtPmZtdCkgewo+ICsJCWRldl9lcnIocHJpdi0+
aXB1LT5kZXYsICJwaXhlbGZvcm1hdCBub3Qgc3VwcG9ydGVkIGZvciAlc1xuIiwKPiArCQkJdHlw
ZSA9PSBJTUFHRV9DT05WRVJUX09VVCA/ICJPdXRwdXQiIDogIklucHV0Iik7Cj4gKwkJcmV0dXJu
IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGljX2ltYWdlLT5mbXQtPnlfZGVwdGgpCj4gKwkJ
aWNfaW1hZ2UtPnN0cmlkZSA9IChpY19pbWFnZS0+Zm10LT55X2RlcHRoICoKPiArCQkJCSAgICBp
Y19pbWFnZS0+YmFzZS5waXgud2lkdGgpID4+IDM7Cj4gKwllbHNlCj4gKwkJaWNfaW1hZ2UtPnN0
cmlkZSAgPSBpY19pbWFnZS0+YmFzZS5waXguYnl0ZXNwZXJsaW5lOwo+ICsKPiArCWlwdV9pY19j
YWxjX3RpbGVfZGltZW5zaW9ucyhjdHgsIGljX2ltYWdlKTsKPiArCWlwdV9pY19jYWxjX3RpbGVf
b2Zmc2V0cyhjdHgsIGljX2ltYWdlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyog
Ym9ycm93ZWQgZnJvbSBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWNvbW1vbi5jICovCj4g
K3N0YXRpYyB1bnNpZ25lZCBpbnQgY2xhbXBfYWxpZ24odW5zaWduZWQgaW50IHgsIHVuc2lnbmVk
IGludCBtaW4sCj4gKwkJCQl1bnNpZ25lZCBpbnQgbWF4LCB1bnNpZ25lZCBpbnQgYWxpZ24pCj4g
K3sKPiArCS8qIEJpdHMgdGhhdCBtdXN0IGJlIHplcm8gdG8gYmUgYWxpZ25lZCAqLwo+ICsJdW5z
aWduZWQgaW50IG1hc2sgPSB+KCgxIDw8IGFsaWduKSAtIDEpOwo+ICsKPiArCS8qIENsYW1wIHRv
IGFsaWduZWQgbWluIGFuZCBtYXggKi8KPiArCXggPSBjbGFtcCh4LCAobWluICsgfm1hc2spICYg
bWFzaywgbWF4ICYgbWFzayk7Cj4gKwo+ICsJLyogUm91bmQgdG8gbmVhcmVzdCBhbGlnbmVkIHZh
bHVlICovCj4gKwlpZiAoYWxpZ24pCj4gKwkJeCA9ICh4ICsgKDEgPDwgKGFsaWduIC0gMSkpKSAm
IG1hc2s7Cj4gKwo+ICsJcmV0dXJuIHg7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFdlIGhhdmUgdG8g
YWRqdXN0IHRoZSB0aWxlIHdpZHRoIHN1Y2ggdGhhdCB0aGUgdGlsZSBwaHlzYWRkcnMgYW5kCj4g
KyAqIFUgYW5kIFYgcGxhbmUgb2Zmc2V0cyBhcmUgbXVsdGlwbGVzIG9mIDggYnl0ZXMgYXMgcmVx
dWlyZWQgYnkKPiArICogdGhlIElQVSBETUEgQ29udHJvbGxlci4gRm9yIHRoZSBwbGFuYXIgZm9y
bWF0cywgdGhpcyBjb3JyZXNwb25kcwo+ICsgKiB0byBhIHBpeGVsIGFsaWdubWVudCBvZiAxNiAo
YnV0IHVzZSBhIG1vcmUgZm9ybWFsIGVxdWF0aW9uIHNpbmNlCj4gKyAqIHRoZSB2YXJpYWJsZXMg
YXJlIGF2YWlsYWJsZSkuIEZvciBhbGwgdGhlIHBhY2tlZCBmb3JtYXRzLCA4IGlzCj4gKyAqIGdv
b2QgZW5vdWdoLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB1MzIgdGlsZV93aWR0aF9hbGlnbihj
b25zdCBzdHJ1Y3QgaXB1X2ljX3BpeGZtdCAqZm10KQo+ICt7Cj4gKwlyZXR1cm4gZm10LT55X2Rl
cHRoID8gKDY0ICogZm10LT51dl93aWR0aF9kZWMpIC8gZm10LT55X2RlcHRoIDogODsKPiArfQo+
ICsKPiArLyoKPiArICogRm9yIHRpbGUgaGVpZ2h0IGFsaWdubWVudCwgd2UgaGF2ZSB0byBlbnN1
cmUgdGhhdCB0aGUgb3V0cHV0IHRpbGUKPiArICogaGVpZ2h0cyBhcmUgbXVsdGlwbGVzIG9mIDgg
bGluZXMgaWYgdGhlIElSVCBpcyByZXF1aXJlZCBieSB0aGUKPiArICogZ2l2ZW4gcm90YXRpb24g
bW9kZSAodGhlIElSVCBwZXJmb3JtcyByb3RhdGlvbnMgb24gOHg4IGJsb2Nrcwo+ICsgKiBhdCBh
IHRpbWUpLiBJZiB0aGUgSVJUIGlzIG5vdCB1c2VkLCBvciBmb3IgaW5wdXQgaW1hZ2UgdGlsZXMs
Cj4gKyAqIDIgbGluZXMgYXJlIGdvb2QgZW5vdWdoLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSB1
MzIgdGlsZV9oZWlnaHRfYWxpZ24oZW51bSBpbWFnZV9jb252ZXJ0X3R5cGUgdHlwZSwKPiArCQkJ
CSAgICBlbnVtIGlwdV9yb3RhdGVfbW9kZSByb3RfbW9kZSkKPiArewo+ICsJcmV0dXJuICh0eXBl
ID09IElNQUdFX0NPTlZFUlRfT1VUICYmCj4gKwkJaXB1X3JvdF9tb2RlX2lzX2lydChyb3RfbW9k
ZSkpID8gOCA6IDI7Cj4gK30KPiArCj4gKy8qIEFkanVzdHMgaW5wdXQvb3V0cHV0IGltYWdlcyB0
byBJUFUgcmVzdHJpY3Rpb25zICovCj4gK2ludCBpcHVfaW1hZ2VfY29udmVydF9hZGp1c3Qoc3Ry
dWN0IGlwdV9pbWFnZSAqaW4sIHN0cnVjdCBpcHVfaW1hZ2UgKm91dCwKPiArCQkJICAgICBlbnVt
IGlwdV9yb3RhdGVfbW9kZSByb3RfbW9kZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGlwdV9pY19w
aXhmbXQgKmluZm10LCAqb3V0Zm10Owo+ICsJdW5zaWduZWQgaW50IG51bV9pbl9yb3dzLCBudW1f
aW5fY29sczsKPiArCXVuc2lnbmVkIGludCBudW1fb3V0X3Jvd3MsIG51bV9vdXRfY29sczsKPiAr
CXUzMiB3X2FsaWduLCBoX2FsaWduOwo+ICsKPiArCWluZm10ID0gaXB1X2ljX2dldF9mb3JtYXQo
aW4tPnBpeC5waXhlbGZvcm1hdCk7Cj4gKwlvdXRmbXQgPSBpcHVfaWNfZ2V0X2Zvcm1hdChvdXQt
PnBpeC5waXhlbGZvcm1hdCk7Cj4gKwo+ICsJLyogc2V0IHNvbWUgZGVmYXVsdHMgaWYgbmVlZGVk
ICovCgpJcyB0aGlzIG91ciB0YXNrIGF0IGFsbD8KCj4gKwlpZiAoIWluZm10KSB7Cj4gKwkJaW4t
PnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0IyNDsKPiArCQlpbmZtdCA9IGlwdV9p
Y19nZXRfZm9ybWF0KFY0TDJfUElYX0ZNVF9SR0IyNCk7Cj4gKwl9Cj4gKwlpZiAoIW91dGZtdCkg
ewo+ICsJCW91dC0+cGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjI0Owo+ICsJCW91
dGZtdCA9IGlwdV9pY19nZXRfZm9ybWF0KFY0TDJfUElYX0ZNVF9SR0IyNCk7Cj4gKwl9Cj4gKwo+
ICsJaWYgKCFpbi0+cGl4LndpZHRoIHx8ICFpbi0+cGl4LmhlaWdodCkgewo+ICsJCWluLT5waXgu
d2lkdGggPSA2NDA7Cj4gKwkJaW4tPnBpeC5oZWlnaHQgPSA0ODA7Cj4gKwl9Cj4gKwlpZiAoIW91
dC0+cGl4LndpZHRoIHx8ICFvdXQtPnBpeC5oZWlnaHQpIHsKPiArCQlvdXQtPnBpeC53aWR0aCA9
IDY0MDsKPiArCQlvdXQtPnBpeC5oZWlnaHQgPSA0ODA7Cj4gKwl9Cj4gKwo+ICsJLyogaW1hZ2Ug
Y29udmVydGVyIGRvZXMgbm90IGhhbmRsZSBmaWVsZHMgKi8KPiArCWluLT5waXguZmllbGQgPSBv
dXQtPnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKCldoeSBub3Q/IFRoZSBzY2FsZXIgY2Fu
IHNjYWxlIGFsdGVybmF0ZSB0b3AvYm90dG9tIGZpZWxkcyBubyBwcm9ibGVtLgoKRm9yIFNFUV9U
Qi9CVCBhbmQgdGhlIGludGVybGVhdmVkIGludGVybGFjaW5nIHdlJ2QgaGF2ZSB0byBhZGp1c3QK
c2NhbGluZyBmYWN0b3JzIHBlciBmaWVsZCBhbmQgdXNlIHR3byB2ZXJ0aWNhbCB0aWxlcyBmb3Ig
dGhlIGZpZWxkcwpiZWZvcmUgdGhpcyBjYW4gYmUgc3VwcG9ydGVkLgoKPiArCS8qIHJlc2l6ZXIg
Y2Fubm90IGRvd25zaXplIG1vcmUgdGhhbiA0OjEgKi8KPiArCWlmIChpcHVfcm90X21vZGVfaXNf
aXJ0KHJvdF9tb2RlKSkgewo+ICsJCW91dC0+cGl4LmhlaWdodCA9IG1heF90KF9fdTMyLCBvdXQt
PnBpeC5oZWlnaHQsCj4gKwkJCQkJaW4tPnBpeC53aWR0aCAvIDQpOwo+ICsJCW91dC0+cGl4Lndp
ZHRoID0gbWF4X3QoX191MzIsIG91dC0+cGl4LndpZHRoLAo+ICsJCQkJICAgICAgIGluLT5waXgu
aGVpZ2h0IC8gNCk7Cj4gKwl9IGVsc2Ugewo+ICsJCW91dC0+cGl4LndpZHRoID0gbWF4X3QoX191
MzIsIG91dC0+cGl4LndpZHRoLAo+ICsJCQkJICAgICAgIGluLT5waXgud2lkdGggLyA0KTsKPiAr
CQlvdXQtPnBpeC5oZWlnaHQgPSBtYXhfdChfX3UzMiwgb3V0LT5waXguaGVpZ2h0LAo+ICsJCQkJ
CWluLT5waXguaGVpZ2h0IC8gNCk7Cj4gKwl9Cj4gKwo+ICsJLyogZ2V0IHRpbGluZyByb3dzL2Nv
bHMgZnJvbSBvdXRwdXQgZm9ybWF0ICovCj4gKwludW1fb3V0X3Jvd3MgPSBpcHVfaWNfbnVtX3N0
cmlwZXMob3V0LT5waXguaGVpZ2h0KTsKPiArCW51bV9vdXRfY29scyA9IGlwdV9pY19udW1fc3Ry
aXBlcyhvdXQtPnBpeC53aWR0aCk7Cj4gKwlpZiAoaXB1X3JvdF9tb2RlX2lzX2lydChyb3RfbW9k
ZSkpIHsKPiArCQludW1faW5fcm93cyA9IG51bV9vdXRfY29sczsKPiArCQludW1faW5fY29scyA9
IG51bV9vdXRfcm93czsKPiArCX0gZWxzZSB7Cj4gKwkJbnVtX2luX3Jvd3MgPSBudW1fb3V0X3Jv
d3M7Cj4gKwkJbnVtX2luX2NvbHMgPSBudW1fb3V0X2NvbHM7Cj4gKwl9Cj4gKwo+ICsJLyogYWxp
Z24gaW5wdXQgd2lkdGgvaGVpZ2h0ICovCj4gKwl3X2FsaWduID0gaWxvZzIodGlsZV93aWR0aF9h
bGlnbihpbmZtdCkgKiBudW1faW5fY29scyk7Cj4gKwloX2FsaWduID0gaWxvZzIodGlsZV9oZWln
aHRfYWxpZ24oSU1BR0VfQ09OVkVSVF9JTiwgcm90X21vZGUpICoKPiArCQkJbnVtX2luX3Jvd3Mp
Owo+ICsJaW4tPnBpeC53aWR0aCA9IGNsYW1wX2FsaWduKGluLT5waXgud2lkdGgsIE1JTl9XLCBN
QVhfVywgd19hbGlnbik7Cj4gKwlpbi0+cGl4LmhlaWdodCA9IGNsYW1wX2FsaWduKGluLT5waXgu
aGVpZ2h0LCBNSU5fSCwgTUFYX0gsIGhfYWxpZ24pOwo+ICsKPiArCS8qIGFsaWduIG91dHB1dCB3
aWR0aC9oZWlnaHQgKi8KPiArCXdfYWxpZ24gPSBpbG9nMih0aWxlX3dpZHRoX2FsaWduKG91dGZt
dCkgKiBudW1fb3V0X2NvbHMpOwo+ICsJaF9hbGlnbiA9IGlsb2cyKHRpbGVfaGVpZ2h0X2FsaWdu
KElNQUdFX0NPTlZFUlRfT1VULCByb3RfbW9kZSkgKgo+ICsJCQludW1fb3V0X3Jvd3MpOwo+ICsJ
b3V0LT5waXgud2lkdGggPSBjbGFtcF9hbGlnbihvdXQtPnBpeC53aWR0aCwgTUlOX1csIE1BWF9X
LCB3X2FsaWduKTsKPiArCW91dC0+cGl4LmhlaWdodCA9IGNsYW1wX2FsaWduKG91dC0+cGl4Lmhl
aWdodCwgTUlOX0gsIE1BWF9ILCBoX2FsaWduKTsKPiArCj4gKwkvKiBzZXQgaW5wdXQvb3V0cHV0
IHN0cmlkZXMgYW5kIGltYWdlIHNpemVzICovCj4gKwlpbi0+cGl4LmJ5dGVzcGVybGluZSA9IChp
bi0+cGl4LndpZHRoICogaW5mbXQtPmJwcCkgPj4gMzsKPiArCWluLT5waXguc2l6ZWltYWdlID0g
aW4tPnBpeC5oZWlnaHQgKiBpbi0+cGl4LmJ5dGVzcGVybGluZTsKPiArCW91dC0+cGl4LmJ5dGVz
cGVybGluZSA9IChvdXQtPnBpeC53aWR0aCAqIG91dGZtdC0+YnBwKSA+PiAzOwo+ICsJb3V0LT5w
aXguc2l6ZWltYWdlID0gb3V0LT5waXguaGVpZ2h0ICogb3V0LT5waXguYnl0ZXNwZXJsaW5lOwo+
ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGlwdV9pbWFnZV9jb252
ZXJ0X2FkanVzdCk7Cj4gKwo+ICsvKgo+ICsgKiB0aGlzIGlzIHVzZWQgYnkgaXB1X2ltYWdlX2Nv
bnZlcnRfcHJlcGFyZSgpIHRvIHZlcmlmeSBzZXQgaW5wdXQgYW5kCj4gKyAqIG91dHB1dCBpbWFn
ZXMgYXJlIHZhbGlkIGJlZm9yZSBzdGFydGluZyB0aGUgY29udmVyc2lvbi4gQ2xpZW50cyBjYW4K
PiArICogYWxzbyBjYWxsIGl0IGJlZm9yZSBjYWxsaW5nIGlwdV9pbWFnZV9jb252ZXJ0X3ByZXBh
cmUoKS4KPiArICovCj4gK2ludCBpcHVfaW1hZ2VfY29udmVydF92ZXJpZnkoc3RydWN0IGlwdV9p
bWFnZSAqaW4sIHN0cnVjdCBpcHVfaW1hZ2UgKm91dCwKPiArCQkJICAgICBlbnVtIGlwdV9yb3Rh
dGVfbW9kZSByb3RfbW9kZSkKPiArewo+ICsJc3RydWN0IGlwdV9pbWFnZSB0ZXN0aW4sIHRlc3Rv
dXQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXRlc3RpbiA9ICppbjsKPiArCXRlc3RvdXQgPSAqb3V0
Owo+ICsKPiArCXJldCA9IGlwdV9pbWFnZV9jb252ZXJ0X2FkanVzdCgmdGVzdGluLCAmdGVzdG91
dCwgcm90X21vZGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWlmICh0
ZXN0aW4ucGl4LndpZHRoICE9IGluLT5waXgud2lkdGggfHwKPiArCSAgICB0ZXN0aW4ucGl4Lmhl
aWdodCAhPSBpbi0+cGl4LmhlaWdodCB8fAo+ICsJICAgIHRlc3RvdXQucGl4LndpZHRoICE9IG91
dC0+cGl4LndpZHRoIHx8Cj4gKwkgICAgdGVzdG91dC5waXguaGVpZ2h0ICE9IG91dC0+cGl4Lmhl
aWdodCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBP
UlRfU1lNQk9MX0dQTChpcHVfaW1hZ2VfY29udmVydF92ZXJpZnkpOwo+ICsKPiArLyoKPiArICog
Q2FsbCBpcHVfaW1hZ2VfY29udmVydF9wcmVwYXJlKCkgdG8gcHJlcGFyZSBmb3IgdGhlIGNvbnZl
cnNpb24gb2YKPiArICogZ2l2ZW4gaW1hZ2VzIGFuZCByb3RhdGlvbiBtb2RlLiBSZXR1cm5zIGEg
bmV3IGNvbnZlcnNpb24gY29udGV4dC4KPiArICovCj4gK3N0cnVjdCBpbWFnZV9jb252ZXJ0ZXJf
Y3R4ICoKPiAraXB1X2ltYWdlX2NvbnZlcnRfcHJlcGFyZShzdHJ1Y3QgaXB1X2ljICppYywKPiAr
CQkJICBzdHJ1Y3QgaXB1X2ltYWdlICppbiwgc3RydWN0IGlwdV9pbWFnZSAqb3V0LAo+ICsJCQkg
IGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdF9tb2RlLAo+ICsJCQkgIGltYWdlX2NvbnZlcnRlcl9j
Yl90IGNvbXBsZXRlLAo+ICsJCQkgIHZvaWQgKmNvbXBsZXRlX2NvbnRleHQpCj4gK3sKPiArCXN0
cnVjdCBpcHVfaWNfcHJpdiAqcHJpdiA9IGljLT5wcml2Owo+ICsJc3RydWN0IGltYWdlX2NvbnZl
cnRlciAqY3Z0ID0gJmljLT5jdnQ7Cj4gKwlzdHJ1Y3QgaXB1X2ljX2ltYWdlICpzX2ltYWdlLCAq
ZF9pbWFnZTsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpjdHg7Cj4gKwl1bnNpZ25l
ZCBsb25nIGZsYWdzOwo+ICsJYm9vbCBnZXRfcmVzOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAo
IWljIHx8ICFpbiB8fCAhb3V0IHx8ICFjb21wbGV0ZSkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlO
VkFMKTsKPiArCj4gKwkvKiB2ZXJpZnkgdGhlIGluL291dCBpbWFnZXMgYmVmb3JlIGNvbnRpbnVp
bmcgKi8KPiArCXJldCA9IGlwdV9pbWFnZV9jb252ZXJ0X3ZlcmlmeShpbiwgb3V0LCByb3RfbW9k
ZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycihwcml2LT5pcHUtPmRldiwgIiVzOiBpbi9v
dXQgZm9ybWF0cyBpbnZhbGlkXG4iLAo+ICsJCQlfX2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIEVSUl9Q
VFIocmV0KTsKPiArCX0KPiArCj4gKwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tF
Uk5FTCk7Cj4gKwlpZiAoIWN0eCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g
KwlkZXZfZGJnKHByaXYtPmlwdS0+ZGV2LCAiJXM6IGN0eCAlcFxuIiwgX19mdW5jX18sIGN0eCk7
Cj4gKwo+ICsJY3R4LT5jdnQgPSBjdnQ7Cj4gKwlpbml0X2NvbXBsZXRpb24oJmN0eC0+YWJvcnRl
ZCk7Cj4gKwo+ICsJc19pbWFnZSA9ICZjdHgtPmluOwo+ICsJZF9pbWFnZSA9ICZjdHgtPm91dDsK
PiArCj4gKwkvKiBzZXQgdGlsaW5nIGFuZCByb3RhdGlvbiAqLwo+ICsJZF9pbWFnZS0+bnVtX3Jv
d3MgPSBpcHVfaWNfbnVtX3N0cmlwZXMob3V0LT5waXguaGVpZ2h0KTsKPiArCWRfaW1hZ2UtPm51
bV9jb2xzID0gaXB1X2ljX251bV9zdHJpcGVzKG91dC0+cGl4LndpZHRoKTsKPiArCWlmIChpcHVf
cm90X21vZGVfaXNfaXJ0KHJvdF9tb2RlKSkgewo+ICsJCXNfaW1hZ2UtPm51bV9yb3dzID0gZF9p
bWFnZS0+bnVtX2NvbHM7Cj4gKwkJc19pbWFnZS0+bnVtX2NvbHMgPSBkX2ltYWdlLT5udW1fcm93
czsKPiArCX0gZWxzZSB7Cj4gKwkJc19pbWFnZS0+bnVtX3Jvd3MgPSBkX2ltYWdlLT5udW1fcm93
czsKPiArCQlzX2ltYWdlLT5udW1fY29scyA9IGRfaW1hZ2UtPm51bV9jb2xzOwo+ICsJfQo+ICsK
PiArCWN0eC0+bnVtX3RpbGVzID0gZF9pbWFnZS0+bnVtX2NvbHMgKiBkX2ltYWdlLT5udW1fcm93
czsKPiArCWN0eC0+cm90X21vZGUgPSByb3RfbW9kZTsKPiArCj4gKwlyZXQgPSBpcHVfaWNfZmls
bF9pbWFnZShjdHgsIHNfaW1hZ2UsIGluLCBJTUFHRV9DT05WRVJUX0lOKTsKPiArCWlmIChyZXQp
Cj4gKwkJZ290byBvdXRfZnJlZTsKPiArCXJldCA9IGlwdV9pY19maWxsX2ltYWdlKGN0eCwgZF9p
bWFnZSwgb3V0LCBJTUFHRV9DT05WRVJUX09VVCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0
X2ZyZWU7Cj4gKwo+ICsJaXB1X2ljX2NhbGNfb3V0X3RpbGVfbWFwKGN0eCk7Cj4gKwo+ICsJaXB1
X2ljX2R1bXBfZm9ybWF0KGN0eCwgc19pbWFnZSk7Cj4gKwlpcHVfaWNfZHVtcF9mb3JtYXQoY3R4
LCBkX2ltYWdlKTsKPiArCj4gKwljdHgtPmNvbXBsZXRlID0gY29tcGxldGU7Cj4gKwljdHgtPmNv
bXBsZXRlX2NvbnRleHQgPSBjb21wbGV0ZV9jb250ZXh0Owo+ICsKPiArCS8qCj4gKwkgKiBDYW4g
d2UgdXNlIGRvdWJsZS1idWZmZXJpbmcgZm9yIHRoaXMgb3BlcmF0aW9uPyBJZiB0aGVyZSBpcwo+
ICsJICogb25seSBvbmUgdGlsZSAodGhlIHdob2xlIGltYWdlIGNhbiBiZSBjb252ZXJ0ZWQgaW4g
YSBzaW5nbGUKPiArCSAqIG9wZXJhdGlvbikgdGhlcmUncyBubyBwb2ludCBpbiB1c2luZyBkb3Vi
bGUtYnVmZmVyaW5nLiBBbHNvLAo+ICsJICogdGhlIElQVSdzIElETUFDIGNoYW5uZWxzIGFsbG93
IG9ubHkgYSBzaW5nbGUgVSBhbmQgViBwbGFuZQo+ICsJICogb2Zmc2V0IHNoYXJlZCBiZXR3ZWVu
IGJvdGggYnVmZmVycywgYnV0IHRoZXNlIG9mZnNldHMgY2hhbmdlCj4gKwkgKiBmb3IgZXZlcnkg
dGlsZSwgYW5kIHRoZXJlZm9yZSB3b3VsZCBoYXZlIHRvIGJlIHVwZGF0ZWQgZm9yCj4gKwkgKiBl
YWNoIGJ1ZmZlciB3aGljaCBpcyBub3QgcG9zc2libGUuIFNvIGRvdWJsZS1idWZmZXJpbmcgaXMK
PiArCSAqIGltcG9zc2libGUgd2hlbiBlaXRoZXIgdGhlIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBp
bWFnZXMgYXJlCj4gKwkgKiBhIHBsYW5hciBmb3JtYXQgKFlVVjQyMCwgWVVWNDIyUCwgZXRjLiku
Cj4gKwkgKi8KPiArCWN0eC0+ZG91YmxlX2J1ZmZlcmluZyA9IChjdHgtPm51bV90aWxlcyA+IDEg
JiYKPiArCQkJCSAhc19pbWFnZS0+Zm10LT55X2RlcHRoICYmCj4gKwkJCQkgIWRfaW1hZ2UtPmZt
dC0+eV9kZXB0aCk7Cj4gKwo+ICsJaWYgKGlwdV9yb3RfbW9kZV9pc19pcnQoY3R4LT5yb3RfbW9k
ZSkpIHsKPiArCQlyZXQgPSBpcHVfaWNfYWxsb2NfZG1hX2J1Zihwcml2LCAmY3R4LT5yb3RfaW50
ZXJtZWRpYXRlWzBdLAo+ICsJCQkJCSAgIGRfaW1hZ2UtPnRpbGVbMF0uc2l6ZSk7Cj4gKwkJaWYg
KHJldCkKPiArCQkJZ290byBvdXRfZnJlZTsKPiArCQlpZiAoY3R4LT5kb3VibGVfYnVmZmVyaW5n
KSB7Cj4gKwkJCXJldCA9IGlwdV9pY19hbGxvY19kbWFfYnVmKHByaXYsCj4gKwkJCQkJCSAgICZj
dHgtPnJvdF9pbnRlcm1lZGlhdGVbMV0sCj4gKwkJCQkJCSAgIGRfaW1hZ2UtPnRpbGVbMF0uc2l6
ZSk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlnb3RvIG91dF9mcmVlX2RtYWJ1ZjA7Cj4gKwkJfQo+
ICsJfQo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiAr
Cj4gKwlnZXRfcmVzID0gbGlzdF9lbXB0eSgmY3Z0LT5jdHhfbGlzdCk7Cj4gKwo+ICsJbGlzdF9h
ZGRfdGFpbCgmY3R4LT5saXN0LCAmY3Z0LT5jdHhfbGlzdCk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tf
aXJxcmVzdG9yZSgmY3Z0LT5pcnFsb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKGdldF9yZXMpIHsK
PiArCQlyZXQgPSBpcHVfaWNfZ2V0X2lwdV9yZXNvdXJjZXMoY3Z0KTsKPiArCQlpZiAocmV0KQo+
ICsJCQlnb3RvIG91dF9mcmVlX2RtYWJ1ZjE7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGN0eDsKPiAr
Cj4gK291dF9mcmVlX2RtYWJ1ZjE6Cj4gKwlpcHVfaWNfZnJlZV9kbWFfYnVmKHByaXYsICZjdHgt
PnJvdF9pbnRlcm1lZGlhdGVbMV0pOwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN2dC0+aXJxbG9j
aywgZmxhZ3MpOwo+ICsJbGlzdF9kZWwoJmN0eC0+bGlzdCk7Cj4gKwlzcGluX3VubG9ja19pcnFy
ZXN0b3JlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArb3V0X2ZyZWVfZG1hYnVmMDoKPiArCWlw
dV9pY19mcmVlX2RtYV9idWYocHJpdiwgJmN0eC0+cm90X2ludGVybWVkaWF0ZVswXSk7Cj4gK291
dF9mcmVlOgo+ICsJa2ZyZWUoY3R4KTsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiAr
RVhQT1JUX1NZTUJPTF9HUEwoaXB1X2ltYWdlX2NvbnZlcnRfcHJlcGFyZSk7Cj4gKwo+ICsvKgo+
ICsgKiBDYXJyeSBvdXQgYSBzaW5nbGUgaW1hZ2UgY29udmVyc2lvbi4gT25seSB0aGUgcGh5c2Fk
ZHIncyBvZiB0aGUgaW5wdXQKPiArICogYW5kIG91dHB1dCBpbWFnZSBidWZmZXJzIGFyZSBuZWVk
ZWQuIFRoZSBjb252ZXJzaW9uIGNvbnRleHQgbXVzdCBoYXZlCj4gKyAqIGJlZW4gY3JlYXRlZCBw
cmV2aW91c2x5IHdpdGggaXB1X2ltYWdlX2NvbnZlcnRfcHJlcGFyZSgpLiBSZXR1cm5zIHRoZQo+
ICsgKiBuZXcgcnVuIG9iamVjdC4KPiArICovCj4gK3N0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVu
ICoKPiAraXB1X2ltYWdlX2NvbnZlcnRfcnVuKHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICpj
dHgsCj4gKwkJICAgICAgZG1hX2FkZHJfdCBpbl9waHlzLCBkbWFfYWRkcl90IG91dF9waHlzKQo+
ICt7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyICpjdnQgPSBjdHgtPmN2dDsKPiArCXN0cnVj
dCBpcHVfaWNfcHJpdiAqcHJpdiA9IGN2dC0+aWMtPnByaXY7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29u
dmVydGVyX3J1biAqcnVuOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCWludCByZXQgPSAw
Owo+ICsKPiArCXJ1biA9IGt6YWxsb2Moc2l6ZW9mKCpydW4pLCBHRlBfS0VSTkVMKTsKPiArCWlm
ICghcnVuKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwoKV2hhdCBpcyB0aGUgcmVhc29u
aW5nIGJlaGluZCBtYWtpbmcgdGhlIGltYWdlX2NvbnZlcnRlcl9ydW4gb3BhcXVlIHRvCnRoZSB1
c2VyPyBJZiB5b3UgbGV0IHRoZSB1c2VyIHByb3ZpZGUgaXQgdG8gaXB1X2ltYWdlX2NvbnZlcnRf
cnVuLCBpdAp3b3VsZG4ndCBoYXZlIHRvIGJlIGFsbG9jYXRlZC9mcmVlZCB3aXRoIGVhY2ggZnJh
bWUuCgo+ICsJcnVuLT5jdHggPSBjdHg7Cj4gKwlydW4tPmluX3BoeXMgPSBpbl9waHlzOwo+ICsJ
cnVuLT5vdXRfcGh5cyA9IG91dF9waHlzOwo+ICsKPiArCWRldl9kYmcocHJpdi0+aXB1LT5kZXYs
ICIlczogY3R4ICVwIHJ1biAlcFxuIiwgX19mdW5jX18sCj4gKwkJY3R4LCBydW4pOwo+ICsKPiAr
CXNwaW5fbG9ja19pcnFzYXZlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoY3R4
LT5hYm9ydGluZykgewo+ICsJCXJldCA9IC1FSU87Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwl9Cj4g
Kwo+ICsJbGlzdF9hZGRfdGFpbCgmcnVuLT5saXN0LCAmY3Z0LT5wZW5kaW5nX3EpOwo+ICsKPiAr
CWlmICghY3Z0LT5jdXJyZW50X3J1bikgewo+ICsJCXJldCA9IGlwdV9pY19ydW4ocnVuKTsKPiAr
CQlpZiAocmV0KQo+ICsJCQljdnQtPmN1cnJlbnRfcnVuID0gTlVMTDsKPiArCX0KPiArdW5sb2Nr
Ogo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Z0LT5pcnFsb2NrLCBmbGFncyk7Cj4gKwo+
ICsJaWYgKHJldCkgewo+ICsJCWtmcmVlKHJ1bik7Cj4gKwkJcnVuID0gRVJSX1BUUihyZXQpOwo+
ICsJfQo+ICsKPiArCXJldHVybiBydW47Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoaXB1X2lt
YWdlX2NvbnZlcnRfcnVuKTsKPiArCj4gKy8qIEFib3J0IGFueSBhY3RpdmUgb3IgcGVuZGluZyBj
b252ZXJzaW9ucyBmb3IgdGhpcyBjb250ZXh0ICovCj4gK3ZvaWQgaXB1X2ltYWdlX2NvbnZlcnRf
YWJvcnQoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGlt
YWdlX2NvbnZlcnRlciAqY3Z0ID0gY3R4LT5jdnQ7Cj4gKwlzdHJ1Y3QgaXB1X2ljX3ByaXYgKnBy
aXYgPSBjdnQtPmljLT5wcml2Owo+ICsJc3RydWN0IGltYWdlX2NvbnZlcnRlcl9ydW4gKnJ1biwg
KmFjdGl2ZV9ydW4sICp0bXA7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJaW50IHJ1bl9j
b3VudCwgcmV0Owo+ICsJYm9vbCBuZWVkX2Fib3J0Owo+ICsKPiArCXJlaW5pdF9jb21wbGV0aW9u
KCZjdHgtPmFib3J0ZWQpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZjdnQtPmlycWxvY2ss
IGZsYWdzKTsKPiArCj4gKwkvKiBtb3ZlIGFsbCByZW1haW5pbmcgcGVuZGluZyBydW5zIGluIHRo
aXMgY29udGV4dCB0byBkb25lX3EgKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydW4s
IHRtcCwgJmN2dC0+cGVuZGluZ19xLCBsaXN0KSB7Cj4gKwkJaWYgKHJ1bi0+Y3R4ICE9IGN0eCkK
PiArCQkJY29udGludWU7Cj4gKwkJcnVuLT5zdGF0dXMgPSAtRUlPOwo+ICsJCWxpc3RfbW92ZV90
YWlsKCZydW4tPmxpc3QsICZjdnQtPmRvbmVfcSk7Cj4gKwl9Cj4gKwo+ICsJcnVuX2NvdW50ID0g
aXB1X2ljX2dldF9ydW5fY291bnQoY3R4LCAmY3Z0LT5kb25lX3EpOwo+ICsJYWN0aXZlX3J1biA9
IChjdnQtPmN1cnJlbnRfcnVuICYmIGN2dC0+Y3VycmVudF9ydW4tPmN0eCA9PSBjdHgpID8KPiAr
CQljdnQtPmN1cnJlbnRfcnVuIDogTlVMTDsKPiArCj4gKwluZWVkX2Fib3J0ID0gKHJ1bl9jb3Vu
dCB8fCBhY3RpdmVfcnVuKTsKPiArCj4gKwljdHgtPmFib3J0aW5nID0gbmVlZF9hYm9ydDsKPiAr
Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsKPiArCj4g
KwlpZiAoIW5lZWRfYWJvcnQpIHsKPiArCQlkZXZfZGJnKHByaXYtPmlwdS0+ZGV2LCAiJXM6IG5v
IGFib3J0IG5lZWRlZCBmb3IgY3R4ICVwXG4iLAo+ICsJCQlfX2Z1bmNfXywgY3R4KTsKPiArCQly
ZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZGV2X2RiZyhwcml2LT5pcHUtPmRldiwKPiArCQkgIiVzOiB3
YWl0IGZvciBjb21wbGV0aW9uOiAlZCBydW5zLCBhY3RpdmUgcnVuICVwXG4iLAo+ICsJCSBfX2Z1
bmNfXywgcnVuX2NvdW50LCBhY3RpdmVfcnVuKTsKPiArCj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21w
bGV0aW9uX3RpbWVvdXQoJmN0eC0+YWJvcnRlZCwKPiArCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMo
MTAwMDApKTsKPiArCWlmIChyZXQgPT0gMCkgewo+ICsJCWRldl93YXJuKHByaXYtPmlwdS0+ZGV2
LCAiJXM6IHRpbWVvdXRcbiIsIF9fZnVuY19fKTsKPiArCQlpcHVfaWNfZm9yY2VfYWJvcnQoY3R4
KTsKPiArCX0KPiArCj4gKwljdHgtPmFib3J0aW5nID0gZmFsc2U7Cj4gK30KPiArRVhQT1JUX1NZ
TUJPTF9HUEwoaXB1X2ltYWdlX2NvbnZlcnRfYWJvcnQpOwo+ICsKPiArLyogVW5wcmVwYXJlIGlt
YWdlIGNvbnZlcnNpb24gY29udGV4dCAqLwo+ICt2b2lkIGlwdV9pbWFnZV9jb252ZXJ0X3VucHJl
cGFyZShzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaW1h
Z2VfY29udmVydGVyICpjdnQgPSBjdHgtPmN2dDsKPiArCXN0cnVjdCBpcHVfaWNfcHJpdiAqcHJp
diA9IGN2dC0+aWMtPnByaXY7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJYm9vbCBwdXRf
cmVzOwo+ICsKPiArCS8qIG1ha2Ugc3VyZSBubyBydW5zIGFyZSBoYW5naW5nIGFyb3VuZCAqLwo+
ICsJaXB1X2ltYWdlX2NvbnZlcnRfYWJvcnQoY3R4KTsKPiArCj4gKwlkZXZfZGJnKHByaXYtPmlw
dS0+ZGV2LCAiJXM6IHJlbW92aW5nIGN0eCAlcFxuIiwgX19mdW5jX18sIGN0eCk7Cj4gKwo+ICsJ
c3Bpbl9sb2NrX2lycXNhdmUoJmN2dC0+aXJxbG9jaywgZmxhZ3MpOwo+ICsKPiArCWxpc3RfZGVs
KCZjdHgtPmxpc3QpOwo+ICsKPiArCXB1dF9yZXMgPSBsaXN0X2VtcHR5KCZjdnQtPmN0eF9saXN0
KTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdnQtPmlycWxvY2ssIGZsYWdzKTsK
PiArCj4gKwlpZiAocHV0X3JlcykKPiArCQlpcHVfaWNfcmVsZWFzZV9pcHVfcmVzb3VyY2VzKGN2
dCk7Cj4gKwo+ICsJaXB1X2ljX2ZyZWVfZG1hX2J1Zihwcml2LCAmY3R4LT5yb3RfaW50ZXJtZWRp
YXRlWzFdKTsKPiArCWlwdV9pY19mcmVlX2RtYV9idWYocHJpdiwgJmN0eC0+cm90X2ludGVybWVk
aWF0ZVswXSk7Cj4gKwo+ICsJa2ZyZWUoY3R4KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChp
cHVfaW1hZ2VfY29udmVydF91bnByZXBhcmUpOwo+ICsKPiArLyoKPiArICogIkNhbm5lZCIgYXN5
bmNocm9ub3VzIHNpbmdsZSBpbWFnZSBjb252ZXJzaW9uLiBPbiBzdWNjZXNzZnVsIHJldHVybgo+
ICsgKiBjYWxsZXIgbXVzdCBjYWxsIGlwdV9pbWFnZV9jb252ZXJ0X3VucHJlcGFyZSgpIGFmdGVy
IGNvbnZlcnNpb24gY29tcGxldGVzLgo+ICsgKiBSZXR1cm5zIHRoZSBuZXcgY29udmVyc2lvbiBj
b250ZXh0Lgo+ICsgKi8KPiArc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKgo+ICtpcHVfaW1h
Z2VfY29udmVydChzdHJ1Y3QgaXB1X2ljICppYywKPiArCQkgIHN0cnVjdCBpcHVfaW1hZ2UgKmlu
LCBzdHJ1Y3QgaXB1X2ltYWdlICpvdXQsCj4gKwkJICBlbnVtIGlwdV9yb3RhdGVfbW9kZSByb3Rf
bW9kZSwKPiArCQkgIGltYWdlX2NvbnZlcnRlcl9jYl90IGNvbXBsZXRlLAo+ICsJCSAgdm9pZCAq
Y29tcGxldGVfY29udGV4dCkKPiArewo+ICsJc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0
eDsKPiArCXN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVuICpydW47Cj4gKwo+ICsJY3R4ID0gaXB1
X2ltYWdlX2NvbnZlcnRfcHJlcGFyZShpYywgaW4sIG91dCwgcm90X21vZGUsCj4gKwkJCQkJY29t
cGxldGUsIGNvbXBsZXRlX2NvbnRleHQpOwo+ICsJaWYgKElTX0VSUihjdHgpKQo+ICsJCXJldHVy
biBjdHg7Cj4gKwo+ICsJcnVuID0gaXB1X2ltYWdlX2NvbnZlcnRfcnVuKGN0eCwgaW4tPnBoeXMw
LCBvdXQtPnBoeXMwKTsKPiArCWlmIChJU19FUlIocnVuKSkgewo+ICsJCWlwdV9pbWFnZV9jb252
ZXJ0X3VucHJlcGFyZShjdHgpOwo+ICsJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIocnVuKSk7Cj4g
Kwl9Cj4gKwo+ICsJcmV0dXJuIGN0eDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChpcHVfaW1h
Z2VfY29udmVydCk7Cj4gKwo+ICsvKiAiQ2FubmVkIiBzeW5jaHJvbm91cyBzaW5nbGUgaW1hZ2Ug
Y29udmVyc2lvbiAqLwo+ICtzdGF0aWMgdm9pZCBpbWFnZV9jb252ZXJ0X3N5bmNfY29tcGxldGUo
dm9pZCAqZGF0YSwKPiArCQkJCQlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX3J1biAqcnVuLAo+ICsJ
CQkJCWludCBlcnIpCj4gK3sKPiArCXN0cnVjdCBjb21wbGV0aW9uICpjb21wID0gZGF0YTsKPiAr
Cj4gKwljb21wbGV0ZShjb21wKTsKPiArfQo+ICsKPiAraW50IGlwdV9pbWFnZV9jb252ZXJ0X3N5
bmMoc3RydWN0IGlwdV9pYyAqaWMsCj4gKwkJCSAgIHN0cnVjdCBpcHVfaW1hZ2UgKmluLCBzdHJ1
Y3QgaXB1X2ltYWdlICpvdXQsCj4gKwkJCSAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdF9tb2Rl
KQo+ICt7Cj4gKwlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4Owo+ICsJc3RydWN0IGNv
bXBsZXRpb24gY29tcDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaW5pdF9jb21wbGV0aW9uKCZjb21w
KTsKPiArCj4gKwljdHggPSBpcHVfaW1hZ2VfY29udmVydChpYywgaW4sIG91dCwgcm90X21vZGUs
Cj4gKwkJCQlpbWFnZV9jb252ZXJ0X3N5bmNfY29tcGxldGUsICZjb21wKTsKPiArCWlmIChJU19F
UlIoY3R4KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgpOwo+ICsKPiArCXJldCA9IHdhaXRfZm9y
X2NvbXBsZXRpb25fdGltZW91dCgmY29tcCwgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOwo+ICsJ
cmV0ID0gKHJldCA9PSAwKSA/IC1FVElNRURPVVQgOiAwOwo+ICsKPiArCWlwdV9pbWFnZV9jb252
ZXJ0X3VucHJlcGFyZShjdHgpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZ
TUJPTF9HUEwoaXB1X2ltYWdlX2NvbnZlcnRfc3luYyk7Cj4gKwoKTW9zdCBvZiB0aGlzIGNhbGN1
bGF0aW9uIG9mIHRpbGUgZ2VvbWV0cnkgYW5kIGNvbnZlcnNpb24gcXVldWUgaGFuZGxpbmcKY29k
ZSBpcyBub3QgcmVhbGx5IGxvdyBsZXZlbCBJQyBoYXJkd2FyZSBhY2Nlc3MuIEknZCBsaWtlIHRo
ZSBjb2RlIHRoYXQKZG9lc24ndCBoYXZlIHRvIGFjY2VzcyBpcHVfaWMgaW50ZXJuYWxzIGRpcmVj
dGx5IHRvIGJlIG1vdmVkIGludG8gYQpzZXBhcmF0ZSBzb3VyY2UgZmlsZS4gSSdkIHN1Z2dlc3Qg
aXB1LWljLXF1ZXVlLmMsIG9yCmlwdS1pbWFnZS1jb252ZXJ0LmMuCgo+ICBpbnQgaXB1X2ljX2Vu
YWJsZShzdHJ1Y3QgaXB1X2ljICppYykKPiAgewo+ICAJc3RydWN0IGlwdV9pY19wcml2ICpwcml2
ID0gaWMtPnByaXY7Cj4gQEAgLTc0Niw2ICsyNDE4LDcgQEAgaW50IGlwdV9pY19pbml0KHN0cnVj
dCBpcHVfc29jICppcHUsIHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgCWlwdS0+aWNfcHJpdiA9IHBy
aXY7Cj4gIAo+ICAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwo+ICsKPiAgCXByaXYtPmJh
c2UgPSBkZXZtX2lvcmVtYXAoZGV2LCBiYXNlLCBQQUdFX1NJWkUpOwo+ICAJaWYgKCFwcml2LT5i
YXNlKQo+ICAJCXJldHVybiAtRU5PTUVNOwo+IEBAIC03NTgsMTAgKzI0MzEsMjEgQEAgaW50IGlw
dV9pY19pbml0KHN0cnVjdCBpcHVfc29jICppcHUsIHN0cnVjdCBkZXZpY2UgKmRldiwKPiAgCXBy
aXYtPmlwdSA9IGlwdTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgSUNfTlVNX1RBU0tTOyBpKysp
IHsKPiAtCQlwcml2LT50YXNrW2ldLnRhc2sgPSBpOwo+IC0JCXByaXYtPnRhc2tbaV0ucHJpdiA9
IHByaXY7Cj4gLQkJcHJpdi0+dGFza1tpXS5yZWcgPSAmaWNfdGFza19yZWdbaV07Cj4gLQkJcHJp
di0+dGFza1tpXS5iaXQgPSAmaWNfdGFza19iaXRbaV07Cj4gKwkJc3RydWN0IGlwdV9pYyAqaWMg
PSAmcHJpdi0+dGFza1tpXTsKPiArCQlzdHJ1Y3QgaW1hZ2VfY29udmVydGVyICpjdnQgPSAmaWMt
PmN2dDsKPiArCj4gKwkJaWMtPnRhc2sgPSBpOwo+ICsJCWljLT5wcml2ID0gcHJpdjsKPiArCQlp
Yy0+cmVnID0gJmljX3Rhc2tfcmVnW2ldOwo+ICsJCWljLT5iaXQgPSAmaWNfdGFza19iaXRbaV07
Cj4gKwkJaWMtPmNoID0gJmljX3Rhc2tfY2hbaV07Cj4gKwo+ICsJCWN2dC0+aWMgPSBpYzsKPiAr
CQlzcGluX2xvY2tfaW5pdCgmY3Z0LT5pcnFsb2NrKTsKPiArCQlJTklUX0xJU1RfSEVBRCgmY3Z0
LT5jdHhfbGlzdCk7Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJmN2dC0+cGVuZGluZ19xKTsKPiArCQlJ
TklUX0xJU1RfSEVBRCgmY3Z0LT5kb25lX3EpOwo+ICsJCWN2dC0+b3V0X2VvZl9pcnEgPSBjdnQt
PnJvdF9vdXRfZW9mX2lycSA9IC0xOwo+ICAJfQo+ICAKPiAgCXJldHVybiAwOwo+IGRpZmYgLS1n
aXQgYS9pbmNsdWRlL3ZpZGVvL2lteC1pcHUtdjMuaCBiL2luY2x1ZGUvdmlkZW8vaW14LWlwdS12
My5oCj4gaW5kZXggMWEzZjdkNC4uOTkyYWRkZiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3ZpZGVv
L2lteC1pcHUtdjMuaAo+ICsrKyBiL2luY2x1ZGUvdmlkZW8vaW14LWlwdS12My5oCj4gQEAgLTYz
LDE3ICs2MywyNSBAQCBlbnVtIGlwdV9jc2lfZGVzdCB7Cj4gIC8qCj4gICAqIEVudW1lcmF0aW9u
IG9mIElQVSByb3RhdGlvbiBtb2Rlcwo+ICAgKi8KPiArI2RlZmluZSBJUFVfUk9UX0JJVF9WRkxJ
UCAoMSA8PCAwKQo+ICsjZGVmaW5lIElQVV9ST1RfQklUX0hGTElQICgxIDw8IDEpCj4gKyNkZWZp
bmUgSVBVX1JPVF9CSVRfOTAgICAgKDEgPDwgMikKPiArCj4gIGVudW0gaXB1X3JvdGF0ZV9tb2Rl
IHsKPiAgCUlQVV9ST1RBVEVfTk9ORSA9IDAsCj4gLQlJUFVfUk9UQVRFX1ZFUlRfRkxJUCwKPiAt
CUlQVV9ST1RBVEVfSE9SSVpfRkxJUCwKPiAtCUlQVV9ST1RBVEVfMTgwLAo+IC0JSVBVX1JPVEFU
RV85MF9SSUdIVCwKPiAtCUlQVV9ST1RBVEVfOTBfUklHSFRfVkZMSVAsCj4gLQlJUFVfUk9UQVRF
XzkwX1JJR0hUX0hGTElQLAo+IC0JSVBVX1JPVEFURV85MF9MRUZULAo+ICsJSVBVX1JPVEFURV9W
RVJUX0ZMSVAgPSBJUFVfUk9UX0JJVF9WRkxJUCwKPiArCUlQVV9ST1RBVEVfSE9SSVpfRkxJUCA9
IElQVV9ST1RfQklUX0hGTElQLAo+ICsJSVBVX1JPVEFURV8xODAgPSAoSVBVX1JPVF9CSVRfVkZM
SVAgfCBJUFVfUk9UX0JJVF9IRkxJUCksCj4gKwlJUFVfUk9UQVRFXzkwX1JJR0hUID0gSVBVX1JP
VF9CSVRfOTAsCj4gKwlJUFVfUk9UQVRFXzkwX1JJR0hUX1ZGTElQID0gKElQVV9ST1RfQklUXzkw
IHwgSVBVX1JPVF9CSVRfVkZMSVApLAo+ICsJSVBVX1JPVEFURV85MF9SSUdIVF9IRkxJUCA9IChJ
UFVfUk9UX0JJVF85MCB8IElQVV9ST1RfQklUX0hGTElQKSwKPiArCUlQVV9ST1RBVEVfOTBfTEVG
VCA9IChJUFVfUk9UX0JJVF85MCB8Cj4gKwkJCSAgICAgIElQVV9ST1RfQklUX1ZGTElQIHwgSVBV
X1JPVF9CSVRfSEZMSVApLAo+ICB9Owo+ICAKPiArLyogOTAtZGVncmVlIHJvdGF0aW9ucyByZXF1
aXJlIHRoZSBJUlQgdW5pdCAqLwo+ICsjZGVmaW5lIGlwdV9yb3RfbW9kZV9pc19pcnQobSkgKCht
KSA+PSBJUFVfUk9UQVRFXzkwX1JJR0hUKQo+ICsKPiAgZW51bSBpcHVfY29sb3Jfc3BhY2Ugewo+
ICAJSVBVVjNfQ09MT1JTUEFDRV9SR0IsCj4gIAlJUFVWM19DT0xPUlNQQUNFX1lVViwKPiBAQCAt
MzM3LDYgKzM0NSw3IEBAIGVudW0gaXB1X2ljX3Rhc2sgewo+ICB9Owo+ICAKPiAgc3RydWN0IGlw
dV9pYzsKPiArCj4gIGludCBpcHVfaWNfdGFza19pbml0KHN0cnVjdCBpcHVfaWMgKmljLAo+ICAJ
CSAgICAgaW50IGluX3dpZHRoLCBpbnQgaW5faGVpZ2h0LAo+ICAJCSAgICAgaW50IG91dF93aWR0
aCwgaW50IG91dF9oZWlnaHQsCj4gQEAgLTM1MSw2ICszNjAsNDAgQEAgdm9pZCBpcHVfaWNfdGFz
a19kaXNhYmxlKHN0cnVjdCBpcHVfaWMgKmljKTsKPiAgaW50IGlwdV9pY190YXNrX2lkbWFfaW5p
dChzdHJ1Y3QgaXB1X2ljICppYywgc3RydWN0IGlwdXYzX2NoYW5uZWwgKmNoYW5uZWwsCj4gIAkJ
CSAgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LCBpbnQgYnVyc3Rfc2l6ZSwKPiAgCQkJICBlbnVtIGlw
dV9yb3RhdGVfbW9kZSByb3QpOwo+ICsKPiArc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHg7Cj4g
K3N0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVuOwo+ICsKCkFkZCBhbiBpcHVfIHByZWZpeCB0byB0
aG9zZS4KCj4gK3R5cGVkZWYgdm9pZCAoKmltYWdlX2NvbnZlcnRlcl9jYl90KSh2b2lkICpjdHgs
Cj4gKwkJCQkgICAgIHN0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfcnVuICpydW4sCj4gKwkJCQkgICAg
IGludCBlcnIpOwo+ICsKPiAraW50IGlwdV9pbWFnZV9jb252ZXJ0X2VudW1fZm9ybWF0KGludCBp
bmRleCwgY29uc3QgY2hhciAqKmRlc2MsIHUzMiAqZm91cmNjKTsKPiAraW50IGlwdV9pbWFnZV9j
b252ZXJ0X2FkanVzdChzdHJ1Y3QgaXB1X2ltYWdlICppbiwgc3RydWN0IGlwdV9pbWFnZSAqb3V0
LAo+ICsJCQkgICAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdF9tb2RlKTsKPiAraW50IGlwdV9p
bWFnZV9jb252ZXJ0X3ZlcmlmeShzdHJ1Y3QgaXB1X2ltYWdlICppbiwgc3RydWN0IGlwdV9pbWFn
ZSAqb3V0LAo+ICsJCQkgICAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdF9tb2RlKTsKPiArc3Ry
dWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKgo+ICtpcHVfaW1hZ2VfY29udmVydF9wcmVwYXJlKHN0
cnVjdCBpcHVfaWMgKmljLAo+ICsJCQkgIHN0cnVjdCBpcHVfaW1hZ2UgKmluLCBzdHJ1Y3QgaXB1
X2ltYWdlICpvdXQsCj4gKwkJCSAgZW51bSBpcHVfcm90YXRlX21vZGUgcm90X21vZGUsCj4gKwkJ
CSAgaW1hZ2VfY29udmVydGVyX2NiX3QgY29tcGxldGUsCj4gKwkJCSAgdm9pZCAqY29tcGxldGVf
Y29udGV4dCk7Cj4gK3ZvaWQgaXB1X2ltYWdlX2NvbnZlcnRfdW5wcmVwYXJlKHN0cnVjdCBpbWFn
ZV9jb252ZXJ0ZXJfY3R4ICpjdHgpOwo+ICtzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX3J1biAqCj4g
K2lwdV9pbWFnZV9jb252ZXJ0X3J1bihzdHJ1Y3QgaW1hZ2VfY29udmVydGVyX2N0eCAqY3R4LAo+
ICsJCSAgICAgIGRtYV9hZGRyX3QgaW5fcGh5cywgZG1hX2FkZHJfdCBvdXRfcGh5cyk7Cj4gK3Zv
aWQgaXB1X2ltYWdlX2NvbnZlcnRfYWJvcnQoc3RydWN0IGltYWdlX2NvbnZlcnRlcl9jdHggKmN0
eCk7Cj4gK3N0cnVjdCBpbWFnZV9jb252ZXJ0ZXJfY3R4ICoKPiAraXB1X2ltYWdlX2NvbnZlcnQo
c3RydWN0IGlwdV9pYyAqaWMsCj4gKwkJICBzdHJ1Y3QgaXB1X2ltYWdlICppbiwgc3RydWN0IGlw
dV9pbWFnZSAqb3V0LAo+ICsJCSAgZW51bSBpcHVfcm90YXRlX21vZGUgcm90X21vZGUsCj4gKwkJ
ICBpbWFnZV9jb252ZXJ0ZXJfY2JfdCBjb21wbGV0ZSwKPiArCQkgIHZvaWQgKmNvbXBsZXRlX2Nv
bnRleHQpOwo+ICtpbnQgaXB1X2ltYWdlX2NvbnZlcnRfc3luYyhzdHJ1Y3QgaXB1X2ljICppYywK
PiArCQkJICAgc3RydWN0IGlwdV9pbWFnZSAqaW4sIHN0cnVjdCBpcHVfaW1hZ2UgKm91dCwKPiAr
CQkJICAgZW51bSBpcHVfcm90YXRlX21vZGUgcm90X21vZGUpOwo+ICsKPiAgaW50IGlwdV9pY19l
bmFibGUoc3RydWN0IGlwdV9pYyAqaWMpOwo+ICBpbnQgaXB1X2ljX2Rpc2FibGUoc3RydWN0IGlw
dV9pYyAqaWMpOwo+ICBzdHJ1Y3QgaXB1X2ljICppcHVfaWNfZ2V0KHN0cnVjdCBpcHVfc29jICpp
cHUsIGVudW0gaXB1X2ljX3Rhc2sgdGFzayk7CgpyZWdhcmRzClBoaWxpcHAKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp
c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr
dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=