linux-sctp.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: David Laight <David.Laight@ACULAB.COM>,
	'Vlad Yasevich' <vyasevich@gmail.com>,
	'Neil Horman' <nhorman@tuxdriver.com>,
	"'David S. Miller'" <davem@davemloft.net>,
	'Jakub Kicinski' <kuba@kernel.org>,
	"'linux-sctp@vger.kernel.org'" <linux-sctp@vger.kernel.org>,
	"'netdev@vger.kernel.org'" <netdev@vger.kernel.org>,
	'Christoph Hellwig' <hch@lst.de>,
	'Marcelo Ricardo Leitner' <marcelo.leitner@gmail.com>
Subject: RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
Date: Tue, 26 May 2020 16:44:07 +0000	[thread overview]
Message-ID: <8bb56a30edfb4ff696d44cf9af909d82@AcuMS.aculab.com> (raw)
In-Reply-To: <bab9a624ee2d4e05b1198c3f7344a200@AcuMS.aculab.com>

VGhpcyBzaG91bGQgYmUgMy84Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy
b206IG5ldGRldi1vd25lckB2Z2VyLmtlcm5lbC5vcmcgPG5ldGRldi1vd25lckB2Z2VyLmtlcm5l
bC5vcmc+IE9uIEJlaGFsZiBPZiBEYXZpZCBMYWlnaHQNCj4gU2VudDogMjYgTWF5IDIwMjAgMTc6
NDANCj4gVG86ICdWbGFkIFlhc2V2aWNoJyA8dnlhc2V2aWNoQGdtYWlsLmNvbT47ICdOZWlsIEhv
cm1hbicgPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT47ICdEYXZpZCBTLiBNaWxsZXInDQo+IDxkYXZl
bUBkYXZlbWxvZnQubmV0PjsgJ0pha3ViIEtpY2luc2tpJyA8a3ViYUBrZXJuZWwub3JnPjsgJ2xp
bnV4LXNjdHBAdmdlci5rZXJuZWwub3JnJyA8bGludXgtDQo+IHNjdHBAdmdlci5rZXJuZWwub3Jn
PjsgJ25ldGRldkB2Z2VyLmtlcm5lbC5vcmcnIDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPjsgJ0No
cmlzdG9waCBIZWxsd2lnJw0KPiA8aGNoQGxzdC5kZT47ICdNYXJjZWxvIFJpY2FyZG8gTGVpdG5l
cicgPG1hcmNlbG8ubGVpdG5lckBnbWFpbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MyBuZXQt
bmV4dCAxLzhdIHNjdHA6IHNldHNvY2tvcHQsIGV4cGFuZCBzb21lICNkZWZpbmVzDQo+IA0KPiBF
eHBhbmQgdGhlICNkZWZpbmUgZm9vICgqZm9vKSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcmV2aW91
cyBwYXRjaC4NCj4gRG9lc24ndCBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlLg0KPiANCj4gU2ln
bmVkLW9mZi1ieTogRGF2aWQgTGFpZ2h0IDxkYXZpZC5sYWlnaHRAYWN1bGFiLmNvbT4NCj4gDQo+
IC0tLQ0KPiAgbmV0L3NjdHAvc29ja2V0LmMgfCA2ODcgKysrKysrKysrKysrKysrKysrKysrKysr
KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAxIGZpbGUgY2hhbmdlZCwgMzMxIGlu
c2VydGlvbnMoKyksIDM1NiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9uZXQvc2N0
cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jDQo+IGluZGV4IDYzOWQ3ZGEuLmI4MDY4ZGEg
MTAwNjQ0DQo+IC0tLSBhL25ldC9zY3RwL3NvY2tldC5jDQo+ICsrKyBiL25ldC9zY3RwL3NvY2tl
dC5jDQo+IEBAIC0yNTg1LDkgKzI1ODUsOCBAQCBzdGF0aWMgaW50IHNjdHBfYXBwbHlfcGVlcl9h
ZGRyX3BhcmFtcyhzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCXJldHVybiAw
Ow0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBz
Y3RwX3NldHNvY2tvcHRfcGVlcl9hZGRyX3BhcmFtcyhzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ
CSAgICBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYXJhbXMsDQo+ICsJCQkJCSAgICBzdHJ1Y3Qg
c2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxl
bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMgPSBOVUxMOw0KPiBA
QCAtMjU5NiwzMyArMjU5NSwzMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2Fk
ZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpbnQgZXJyb3I7DQo+ICAJaW50IGhiX2No
YW5nZSwgcG10dWRfY2hhbmdlLCBzYWNrZGVsYXlfY2hhbmdlOw0KPiANCj4gLQlpZiAob3B0bGVu
ICE9IHNpemVvZihwYXJhbXMpKSB7DQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykp
IHsNCj4gIAkJaWYgKG9wdGxlbiAhPSBBTElHTihvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBh
cmFtcywNCj4gIAkJCQkJCSAgICBzcHBfaXB2Nl9mbG93bGFiZWwpLCA0KSkNCj4gIAkJCXJldHVy
biAtRUlOVkFMOw0KPiAtCQlpZiAocGFyYW1zLnNwcF9mbGFncyAmIChTUFBfRFNDUCB8IFNQUF9J
UFY2X0ZMT1dMQUJFTCkpDQo+ICsJCWlmIChwYXJhbXMtPnNwcF9mbGFncyAmIChTUFBfRFNDUCB8
IFNQUF9JUFY2X0ZMT1dMQUJFTCkpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9DQo+IA0K
PiAgCS8qIFZhbGlkYXRlIGZsYWdzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzLiAqLw0KPiAtCWhiX2No
YW5nZSAgICAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX0hCOw0KPiAtCXBtdHVkX2NoYW5n
ZSAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiAtCXNhY2tkZWxheV9jaGFu
Z2UgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1NBQ0tERUxBWTsNCj4gKwloYl9jaGFuZ2UgICAg
ICAgID0gcGFyYW1zLT5zcHBfZmxhZ3MgJiBTUFBfSEI7DQo+ICsJcG10dWRfY2hhbmdlICAgICA9
IHBhcmFtcy0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiArCXNhY2tkZWxheV9jaGFuZ2UgPSBw
YXJhbXMtPnNwcF9mbGFncyAmIFNQUF9TQUNLREVMQVk7DQo+IA0KPiAgCWlmIChoYl9jaGFuZ2Ug
ICAgICAgID09IFNQUF9IQiB8fA0KPiAgCSAgICBwbXR1ZF9jaGFuZ2UgICAgID09IFNQUF9QTVRV
RCB8fA0KPiAgCSAgICBzYWNrZGVsYXlfY2hhbmdlID09IFNQUF9TQUNLREVMQVkgfHwNCj4gLQkg
ICAgcGFyYW1zLnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gLQkgICAgKHBhcmFtcy5zcHBfcGF0
aG10dSAmJg0KPiAtCSAgICAgcGFyYW1zLnNwcF9wYXRobXR1IDwgU0NUUF9ERUZBVUxUX01JTlNF
R01FTlQpKQ0KPiArCSAgICBwYXJhbXMtPnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gKwkgICAg
KHBhcmFtcy0+c3BwX3BhdGhtdHUgJiYNCj4gKwkgICAgIHBhcmFtcy0+c3BwX3BhdGhtdHUgPCBT
Q1RQX0RFRkFVTFRfTUlOU0VHTUVOVCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAkv
KiBJZiBhbiBhZGRyZXNzIG90aGVyIHRoYW4gSU5BRERSX0FOWSBpcyBzcGVjaWZpZWQsIGFuZA0K
PiAgCSAqIG5vIHRyYW5zcG9ydCBpcyBmb3VuZCwgdGhlbiB0aGUgcmVxdWVzdCBpcyBpbnZhbGlk
Lg0KPiAgCSAqLw0KPiAtCWlmICghc2N0cF9pc19hbnkoc2ssICh1bmlvbiBzY3RwX2FkZHIgKikm
cGFyYW1zLnNwcF9hZGRyZXNzKSkgew0KPiAtCQl0cmFucyA9IHNjdHBfYWRkcl9pZDJ0cmFuc3Bv
cnQoc2ssICZwYXJhbXMuc3BwX2FkZHJlc3MsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3BwX2Fz
c29jX2lkKTsNCj4gKwlpZiAoIXNjdHBfaXNfYW55KHNrLCAodW5pb24gc2N0cF9hZGRyICopJnBh
cmFtcy0+c3BwX2FkZHJlc3MpKSB7DQo+ICsJCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9y
dChzaywgJnBhcmFtcy0+c3BwX2FkZHJlc3MsDQo+ICsJCQkJCSAgICAgICBwYXJhbXMtPnNwcF9h
c3NvY19pZCk7DQo+ICAJCWlmICghdHJhbnMpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9
DQo+IEBAIC0yNjMxLDE5ICsyNjMwLDE5IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bl
ZXJfYWRkcl9wYXJhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgCSAqIHNvY2tldCBpcyBhIG9uZSB0
byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uDQo+ICAJICogd2FzIG5vdCBm
b3VuZCwgdGhlbiB0aGUgaWQgd2FzIGludmFsaWQuDQo+ICAJICovDQo+IC0JYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy5zcHBfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJh
bXMuc3BwX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy0+c3BwX2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFy
YW1zLT5zcHBfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9z
dHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIEhlYXJ0YmVh
dCBkZW1hbmQgY2FuIG9ubHkgYmUgc2VudCBvbiBhIHRyYW5zcG9ydCBvcg0KPiAgCSAqIGFzc29j
aWF0aW9uLCBidXQgbm90IGEgc29ja2V0Lg0KPiAgCSAqLw0KPiAtCWlmIChwYXJhbXMuc3BwX2Zs
YWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICsJaWYgKHBhcmFtcy0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiANCj4gIAkvKiBQcm9jZXNzIHBhcmFtZXRlcnMuICovDQo+IC0JZXJyb3Ig
PSBzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNwLA0K
PiArCWVycm9yID0gc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFz
b2MsIHNwLA0KPiAgCQkJCQkgICAgaGJfY2hhbmdlLCBwbXR1ZF9jaGFuZ2UsDQo+ICAJCQkJCSAg
ICBzYWNrZGVsYXlfY2hhbmdlKTsNCj4gDQo+IEBAIC0yNjU2LDcgKzI2NTUsNyBAQCBzdGF0aWMg
aW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4g
IAlpZiAoIXRyYW5zICYmIGFzb2MpIHsNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywg
JmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwNCj4gIAkJCQl0cmFuc3BvcnRzKSB7DQo+
IC0JCQlzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNw
LA0KPiArCQkJc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFzb2Ms
IHNwLA0KPiAgCQkJCQkJICAgIGhiX2NoYW5nZSwgcG10dWRfY2hhbmdlLA0KPiAgCQkJCQkJICAg
IHNhY2tkZWxheV9jaGFuZ2UpOw0KPiAgCQl9DQo+IEBAIC0yNjY0LDcgKzI2NjMsNiBAQCBzdGF0
aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywN
Cj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW1zDQo+IA0KPiAgc3RhdGlj
IGlubGluZSBfX3UzMiBzY3RwX3NwcF9zYWNrZGVsYXlfZW5hYmxlKF9fdTMyIHBhcmFtX2ZsYWdz
KQ0KPiAgew0KPiBAQCAtMjc0OSwxNiArMjc0NywxNSBAQCBzdGF0aWMgdm9pZCBzY3RwX2FwcGx5
X2Fzb2NfZGVsYXllZF9hY2soc3RydWN0IHNjdHBfc2Fja19pbmZvICpwYXJhbXMsDQo+ICAgKiAg
ICB2YWx1ZSB0byAxIHdpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBzYWNrIGFsZ29yaXRobS4NCj4g
ICAqLw0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBzY3Rw
X3NldHNvY2tvcHRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgICBz
dHJ1Y3Qgc2N0cF9zYWNrX2luZm8gcGFyYW1zLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9z
YWNrX2luZm8gKnBhcmFtcywNCj4gIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4g
IHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gIAlpZiAob3B0bGVuID09IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zYWNrX2luZm8pKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19kZWxheSA9PSAwICYm
IHBhcmFtcy5zYWNrX2ZyZXEgPT0gMCkNCj4gKwkJaWYgKHBhcmFtcy0+c2Fja19kZWxheSA9PSAw
ICYmIHBhcmFtcy0+c2Fja19mcmVxID09IDApDQo+ICAJCQlyZXR1cm4gMDsNCj4gIAl9IGVsc2Ug
aWYgKG9wdGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7DQo+ICAJCXBy
X3dhcm5fcmF0ZWxpbWl0ZWQoREVQUkVDQVRFRA0KPiBAQCAtMjc2Niw1NiArMjc2Myw1NiBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssDQo+
ICAJCQkJICAgICJVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sg
c29ja2V0IG9wdGlvbi5cbiINCj4gIAkJCQkgICAgIlVzZSBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8g
aW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVu
dCkpOw0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZGVsYXkgPT0gMCkNCj4gLQkJCXBhcmFtcy5zYWNr
X2ZyZXEgPSAxOw0KPiArCQlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID09IDApDQo+ICsJCQlwYXJh
bXMtPnNhY2tfZnJlcSA9IDE7DQo+ICAJCWVsc2UNCj4gLQkJCXBhcmFtcy5zYWNrX2ZyZXEgPSAw
Ow0KPiArCQkJcGFyYW1zLT5zYWNrX2ZyZXEgPSAwOw0KPiAgCX0gZWxzZQ0KPiAgCQlyZXR1cm4g
LUVJTlZBTDsNCj4gDQo+ICAJLyogVmFsaWRhdGUgdmFsdWUgcGFyYW1ldGVyLiAqLw0KPiAtCWlm
IChwYXJhbXMuc2Fja19kZWxheSA+IDUwMCkNCj4gKwlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID4g
NTAwKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogR2V0IGFzc29jaWF0aW9uLCBp
ZiBzYWNrX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DIGFuZCB0aGUNCj4gIAkgKiBzb2Nr
ZXQgaXMgYSBvbmUgdG8gbWFueSBzdHlsZSBzb2NrZXQsIGFuZCBhbiBhc3NvY2lhdGlvbg0KPiAg
CSAqIHdhcyBub3QgZm91bmQsIHRoZW4gdGhlIGlkIHdhcyBpbnZhbGlkLg0KPiAgCSAqLw0KPiAt
CWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuc2Fja19hc3NvY19pZCk7DQo+IC0JaWYg
KCFhc29jICYmIHBhcmFtcy5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlh
c29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5zYWNrX2Fzc29jX2lkKTsNCj4gKwlpZiAo
IWFzb2MgJiYgcGFyYW1zLT5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gIAkg
ICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm
IChhc29jKSB7DQo+IC0JCXNjdHBfYXBwbHlfYXNvY19kZWxheWVkX2FjaygmcGFyYW1zLCBhc29j
KTsNCj4gKwkJc2N0cF9hcHBseV9hc29jX2RlbGF5ZWRfYWNrKHBhcmFtcywgYXNvYyk7DQo+IA0K
PiAgCQlyZXR1cm4gMDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0K
PiAtCQlwYXJhbXMuc2Fja19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJh
bXMtPnNhY2tfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFt
cy5zYWNrX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z
YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19k
ZWxheSkgew0KPiAtCQkJc3AtPnNhY2tkZWxheSA9IHBhcmFtcy5zYWNrX2RlbGF5Ow0KPiArCWlm
IChwYXJhbXMtPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAg
cGFyYW1zLT5zYWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCWlmIChwYXJh
bXMtPnNhY2tfZGVsYXkpIHsNCj4gKwkJCXNwLT5zYWNrZGVsYXkgPSBwYXJhbXMtPnNhY2tfZGVs
YXk7DQo+ICAJCQlzcC0+cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9l
bmFibGUoc3AtPnBhcmFtX2ZsYWdzKTsNCj4gIAkJfQ0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZnJl
cSA9PSAxKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhY2tfZnJlcSA9PSAxKSB7DQo+ICAJCQlzcC0+
cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9kaXNhYmxlKHNwLT5wYXJh
bV9mbGFncyk7DQo+IC0JCX0gZWxzZSBpZiAocGFyYW1zLnNhY2tfZnJlcSA+IDEpIHsNCj4gLQkJ
CXNwLT5zYWNrZnJlcSA9IHBhcmFtcy5zYWNrX2ZyZXE7DQo+ICsJCX0gZWxzZSBpZiAocGFyYW1z
LT5zYWNrX2ZyZXEgPiAxKSB7DQo+ICsJCQlzcC0+c2Fja2ZyZXEgPSBwYXJhbXMtPnNhY2tfZnJl
cTsNCj4gIAkJCXNwLT5wYXJhbV9mbGFncyA9DQo+ICAJCQkJc2N0cF9zcHBfc2Fja2RlbGF5X2Vu
YWJsZShzcC0+cGFyYW1fZmxhZ3MpOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gLQlpZiAocGFyYW1z
LnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z
YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPnNhY2tfYXNz
b2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+c2Fja19hc3Nv
Y19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAm
c3AtPmVwLT5hc29jcywgYXNvY3MpDQo+IC0JCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2so
JnBhcmFtcywgYXNvYyk7DQo+ICsJCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2socGFyYW1z
LCBhc29jKTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC0yODMxLDggKzI4MjgsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAgKiBieSB0aGUgY2hhbmdlKS4gIFdpdGggVENQLXN0eWxlIHNvY2tldHMsIHRoaXMgb3B0
aW9uIGlzIGluaGVyaXRlZCBieQ0KPiAgICogc29ja2V0cyBkZXJpdmVkIGZyb20gYSBsaXN0ZW5l
ciBzb2NrZXQuDQo+ICAgKi8NCj4gLSNkZWZpbmUgc2luaXQgKCpzaW5pdCkNCj4gLXN0YXRpYyBp
bnQgc2N0cF9zZXRzb2Nrb3B0X2luaXRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9p
bml0bXNnIHNpbml0LA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW5pdG1zZyhzdHJ1
Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgKnNpbml0LA0KPiAgCQkJCSAgIHVuc2ln
bmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3Nr
KHNrKTsNCj4gQEAgLTI4NDAsMTggKzI4MzYsMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfaW5pdG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgc2luaXQsDQo+
ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiANCj4gLQlpZiAoc2luaXQuc2luaXRfbnVtX29zdHJlYW1zKQ0KPiAtCQlz
cC0+aW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMgPSBzaW5pdC5zaW5pdF9udW1fb3N0cmVhbXM7
DQo+IC0JaWYgKHNpbml0LnNpbml0X21heF9pbnN0cmVhbXMpDQo+IC0JCXNwLT5pbml0bXNnLnNp
bml0X21heF9pbnN0cmVhbXMgPSBzaW5pdC5zaW5pdF9tYXhfaW5zdHJlYW1zOw0KPiAtCWlmIChz
aW5pdC5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9hdHRl
bXB0cyA9IHNpbml0LnNpbml0X21heF9hdHRlbXB0czsNCj4gLQlpZiAoc2luaXQuc2luaXRfbWF4
X2luaXRfdGltZW8pDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvID0gc2lu
aXQuc2luaXRfbWF4X2luaXRfdGltZW87DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9udW1fb3N0cmVh
bXMpDQo+ICsJCXNwLT5pbml0bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IHNpbml0LT5zaW5pdF9u
dW1fb3N0cmVhbXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1zKQ0KPiArCQlz
cC0+aW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gc2luaXQtPnNpbml0X21heF9pbnN0cmVh
bXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+ICsJCXNwLT5pbml0bXNn
LnNpbml0X21heF9hdHRlbXB0cyA9IHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHM7DQo+ICsJaWYg
KHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbykNCj4gKwkJc3AtPmluaXRtc2cuc2luaXRfbWF4
X2luaXRfdGltZW8gPSBzaW5pdC0+c2luaXRfbWF4X2luaXRfdGltZW87DQo+IA0KPiAgCXJldHVy
biAwOw0KPiAgfQ0KPiAtI3VuZGVmIHNpbml0DQo+IA0KPiAgLyoNCj4gICAqIDcuMS4xNCBTZXQg
ZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgKFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKQ0KPiBAQCAt
Mjg2Nyw1NiArMjg2Miw1NSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9pbml0bXNnKHN0
cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfaW5pdG1zZyBzaW5pdCwNCj4gICAqICAgc2luZm9f
dGltZXRvbGl2ZS4gIFRoZSB1c2VyIG11c3QgcHJvdmlkZSB0aGUgc2luZm9fYXNzb2NfaWQgZmll
bGQgaW4NCj4gICAqICAgdG8gdGhpcyBjYWxsIGlmIHRoZSBjYWxsZXIgaXMgdXNpbmcgdGhlIFVE
UCBtb2RlbC4NCj4gICAqLw0KPiAtI2RlZmluZSBpbmZvICgqaW5mbykNCj4gIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc2VuZF9wYXJhbShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0J
CQkJCSAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gaW5mbywNCj4gKwkJCQkJICAgICAgc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbyAqaW5mbywNCj4gIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG9w
dGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAg
CXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gLQlpZiAob3B0bGVuICE9IHNp
emVvZihpbmZvKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqaW5mbykpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiAtCWlmIChpbmZvLnNpbmZvX2ZsYWdzICYNCj4gKwlpZiAoaW5mby0+c2lu
Zm9fZmxhZ3MgJg0KPiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0K
PiAgCSAgICAgIFNDVFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K
PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zaW5mb19hc3NvY19pZCk7DQo+
IC0JaWYgKCFhc29jICYmIGluZm8uc2luZm9fYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBpbmZvLT5zaW5mb19hc3NvY19pZCk7DQo+ICsJ
aWYgKCFhc29jICYmIGluZm8tPnNpbmZvX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g
IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg
CWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby5zaW5mb19zdHJl
YW07DQo+IC0JCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNpbmZvX2ZsYWdzOw0KPiAtCQlh
c29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCWFzb2MtPmRlZmF1bHRf
Y29udGV4dCA9IGluZm8uc2luZm9fY29udGV4dDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF90aW1ldG9s
aXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9
IGluZm8tPnNpbmZvX3N0cmVhbTsNCj4gKwkJYXNvYy0+ZGVmYXVsdF9mbGFncyA9IGluZm8tPnNp
bmZvX2ZsYWdzOw0KPiArCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zaW5mb19wcGlkOw0K
PiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlh
c29jLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLT5zaW5mb190aW1ldG9saXZlOw0KPiANCj4g
IAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlpZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4g
LQkJaW5mby5zaW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlpbmZvLT5z
aW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAoaW5mby5zaW5m
b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNpbmZvX2Fz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGlu
Zm8uc2luZm9fc3RyZWFtOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc2luZm9fZmxh
Z3M7DQo+IC0JCXNwLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCXNwLT5k
ZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNpbmZvX2NvbnRleHQ7DQo+IC0JCXNwLT5kZWZhdWx0X3Rp
bWV0b2xpdmUgPSBpbmZvLnNpbmZvX3RpbWV0b2xpdmU7DQo+ICsJaWYgKGluZm8tPnNpbmZvX2Fz
c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNpbmZvX2Fzc29j
X2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8t
PnNpbmZvX3N0cmVhbTsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zaW5mb19mbGFn
czsNCj4gKwkJc3AtPmRlZmF1bHRfcHBpZCA9IGluZm8tPnNpbmZvX3BwaWQ7DQo+ICsJCXNwLT5k
ZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlzcC0+ZGVmYXVsdF90
aW1ldG9saXZlID0gaW5mby0+c2luZm9fdGltZXRvbGl2ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChp
bmZvLnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZv
LnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnNpbmZv
X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zaW5mb19h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFz
b2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0g
PSBpbmZvLnNpbmZvX3N0cmVhbTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNp
bmZvX2ZsYWdzOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9wcGlkID0gaW5mby5zaW5mb19wcGlkOw0K
PiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5mby5zaW5mb19jb250ZXh0Ow0KPiAtCQkJ
YXNvYy0+ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQkJ
YXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLT5zaW5mb19zdHJlYW07DQo+ICsJCQlhc29jLT5k
ZWZhdWx0X2ZsYWdzID0gaW5mby0+c2luZm9fZmxhZ3M7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Bw
aWQgPSBpbmZvLT5zaW5mb19wcGlkOw0KPiArCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5m
by0+c2luZm9fY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8t
PnNpbmZvX3RpbWV0b2xpdmU7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMjkyNyw1MSArMjky
MSw1MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NlbmRfcGFyYW0oc3Ry
dWN0IHNvY2sgKnNrLA0KPiAgICogKFNDVFBfREVGQVVMVF9TTkRJTkZPKQ0KPiAgICovDQo+ICBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NuZGluZm8oc3RydWN0IHNvY2sgKnNr
LA0KPiAtCQkJCQkgICBzdHJ1Y3Qgc2N0cF9zbmRpbmZvIGluZm8sDQo+ICsJCQkJCSAgIHN0cnVj
dCBzY3RwX3NuZGluZm8gKmluZm8sDQo+ICAJCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gIAlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gDQo+IC0JaWYgKG9wdGxlbiAhPSBzaXplb2YoaW5m
bykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKmluZm8pKQ0KPiAgCQlyZXR1cm4gLUVJTlZB
TDsNCj4gLQlpZiAoaW5mby5zbmRfZmxhZ3MgJg0KPiArCWlmIChpbmZvLT5zbmRfZmxhZ3MgJg0K
PiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0KPiAgCSAgICAgIFND
VFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29j
ID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zbmRfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAm
JiBpbmZvLnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIGluZm8tPnNuZF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIGluZm8t
PnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ss
IFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykgew0KPiAtCQlh
c29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8uc25kX3NpZDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF9m
bGFncyA9IGluZm8uc25kX2ZsYWdzOw0KPiAtCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNu
ZF9wcGlkOw0KPiAtCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNuZF9jb250ZXh0Ow0K
PiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8tPnNuZF9zaWQ7DQo+ICsJCWFzb2MtPmRl
ZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcHBpZCA9
IGluZm8tPnNuZF9wcGlkOw0KPiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zbmRf
Y29udGV4dDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5
bGUoc2ssIFRDUCkpDQo+IC0JCWluZm8uc25kX2Fzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7
DQo+ICsJCWluZm8tPnNuZF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlp
ZiAoaW5mby5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgaW5m
by5zbmRfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gLQkJc3AtPmRlZmF1bHRfc3Ry
ZWFtID0gaW5mby5zbmRfc2lkOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc25kX2Zs
YWdzOw0KPiAtCQlzcC0+ZGVmYXVsdF9wcGlkID0gaW5mby5zbmRfcHBpZDsNCj4gLQkJc3AtPmRl
ZmF1bHRfY29udGV4dCA9IGluZm8uc25kX2NvbnRleHQ7DQo+ICsJaWYgKGluZm8tPnNuZF9hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zbmRfYXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwkJc3AtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k
X3NpZDsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCXNw
LT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJc3AtPmRlZmF1bHRfY29udGV4
dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCX0NCj4gDQo+IC0JaWYgKGluZm8uc25kX2Fzc29j
X2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNuZF9hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9D
VVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh
c29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLnNuZF9zaWQ7DQo+IC0J
CQlhc29jLT5kZWZhdWx0X2ZsYWdzID0gaW5mby5zbmRfZmxhZ3M7DQo+IC0JCQlhc29jLT5kZWZh
dWx0X3BwaWQgPSBpbmZvLnNuZF9wcGlkOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0g
aW5mby5zbmRfY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k
X3NpZDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJ
CQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJCWFzb2MtPmRlZmF1
bHRfY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gQEAg
LTI5ODQsOCArMjk3OCw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc25k
aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gcHJpbWFyeS4gIFRo
ZSBlbmNsb3NlZCBhZGRyZXNzIG11c3QgYmUgb25lIG9mIHRoZQ0KPiAgICogYXNzb2NpYXRpb24g
cGVlcidzIGFkZHJlc3Nlcy4NCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gLXN0
YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0
cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1h
cnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gKnByaW0sDQo+ICAJCQkJ
CXVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0
cmFuczsNCj4gQEAgLTI5OTYsMTcgKzI5ODksMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfcHJpbQ0KPiBwcmlt
LA0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogQWxsb3cgc2VjdXJpdHkgbW9kdWxl
IHRvIHZhbGlkYXRlIGFkZHJlc3MgYnV0IG5lZWQgYWRkcmVzcyBsZW4uICovDQo+IC0JYWYgPSBz
Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICsJYWYgPSBz
Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLT5zc3BfYWRkci5zc19mYW1pbHkpOw0KPiAgCWlmICgh
YWYpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAllcnIgPSBzZWN1cml0eV9zY3RwX2Jp
bmRfY29ubmVjdChzaywgU0NUUF9QUklNQVJZX0FERFIsDQo+IC0JCQkJCSAoc3RydWN0IHNvY2th
ZGRyICopJnByaW0uc3NwX2FkZHIsDQo+ICsJCQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0t
PnNzcF9hZGRyLA0KPiAgCQkJCQkgYWYtPnNvY2thZGRyX2xlbik7DQo+ICAJaWYgKGVycikNCj4g
IAkJcmV0dXJuIGVycjsNCj4gDQo+IC0JdHJhbnMgPSBzY3RwX2FkZHJfaWQydHJhbnNwb3J0KHNr
LCAmcHJpbS5zc3BfYWRkciwgcHJpbS5zc3BfYXNzb2NfaWQpOw0KPiArCXRyYW5zID0gc2N0cF9h
ZGRyX2lkMnRyYW5zcG9ydChzaywgJnByaW0tPnNzcF9hZGRyLCBwcmltLT5zc3BfYXNzb2NfaWQp
Ow0KPiAgCWlmICghdHJhbnMpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gQEAgLTMwMTQs
NyArMzAwNyw2IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1
Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gDQo+ICAJcmV0dXJuIDA7DQo+
ICB9DQo+IC0jdW5kZWYgcHJpbQ0KPiANCj4gIC8qDQo+ICAgKiA3LjEuNSBTQ1RQX05PREVMQVkN
Cj4gQEAgLTMwNDcsNyArMzAzOSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X25vZGVs
YXkoc3RydWN0IHNvY2sgKnNrLCBpbnQgKm9wdHZhbCwNCj4gICAqDQo+ICAgKi8NCj4gIHN0YXRp
YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3J0b2luZm8oc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAg
IHN0cnVjdCBzY3RwX3J0b2luZm8gcGFyYW1zLA0KPiArCQkJCSAgIHN0cnVjdCBzY3RwX3J0b2lu
Zm8gKnBhcmFtcywNCj4gIAkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiBAQCAtMzA1NywxNSArMzA0OSwxNSBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAlp
ZiAob3B0bGVuICE9IHNpemVvZiAoc3RydWN0IHNjdHBfcnRvaW5mbykpDQo+ICAJCXJldHVybiAt
RUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNydG9fYXNz
b2NfaWQpOw0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPnNydG9fYXNzb2Nf
aWQpOw0KPiANCj4gIAkvKiBTZXQgdGhlIHZhbHVlcyB0byB0aGUgc3BlY2lmaWMgYXNzb2NpYXRp
b24gKi8NCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNydG9fYXNzb2NfaWQgIT0gU0NUUF9GVVRV
UkVfQVNTT0MgJiYNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5zcnRvX2Fzc29jX2lkICE9IFND
VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJl
dHVybiAtRUlOVkFMOw0KPiANCj4gLQlydG9fbWF4ID0gcGFyYW1zLnNydG9fbWF4Ow0KPiAtCXJ0
b19taW4gPSBwYXJhbXMuc3J0b19taW47DQo+ICsJcnRvX21heCA9IHBhcmFtcy0+c3J0b19tYXg7
DQo+ICsJcnRvX21pbiA9IHBhcmFtcy0+c3J0b19taW47DQo+IA0KPiAgCWlmIChydG9fbWF4KQ0K
PiAgCQlydG9fbWF4ID0gYXNvYyA/IG1zZWNzX3RvX2ppZmZpZXMocnRvX21heCkgOiBydG9fbWF4
Ow0KPiBAQCAtMzA4MSwxNyArMzA3MywxNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y
dG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm
IChhc29jKSB7DQo+IC0JCWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+ICsJCWlmIChw
YXJhbXMtPnNydG9faW5pdGlhbCAhPSAwKQ0KPiAgCQkJYXNvYy0+cnRvX2luaXRpYWwgPQ0KPiAt
CQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLnNydG9faW5pdGlhbCk7DQo+ICsJCQkJbXNlY3Nf
dG9famlmZmllcyhwYXJhbXMtPnNydG9faW5pdGlhbCk7DQo+ICAJCWFzb2MtPnJ0b19tYXggPSBy
dG9fbWF4Ow0KPiAgCQlhc29jLT5ydG9fbWluID0gcnRvX21pbjsNCj4gIAl9IGVsc2Ugew0KPiAg
CQkvKiBJZiB0aGVyZSBpcyBubyBhc3NvY2lhdGlvbiBvciB0aGUgYXNzb2NpYXRpb24taWQgPSAw
DQo+ICAJCSAqIHNldCB0aGUgdmFsdWVzIHRvIHRoZSBlbmRwb2ludC4NCj4gIAkJICovDQo+IC0J
CWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+IC0JCQlzcC0+cnRvaW5mby5zcnRvX2lu
aXRpYWwgPSBwYXJhbXMuc3J0b19pbml0aWFsOw0KPiArCQlpZiAocGFyYW1zLT5zcnRvX2luaXRp
YWwgIT0gMCkNCj4gKwkJCXNwLT5ydG9pbmZvLnNydG9faW5pdGlhbCA9IHBhcmFtcy0+c3J0b19p
bml0aWFsOw0KPiAgCQlzcC0+cnRvaW5mby5zcnRvX21heCA9IHJ0b19tYXg7DQo+ICAJCXNwLT5y
dG9pbmZvLnNydG9fbWluID0gcnRvX21pbjsNCj4gIAl9DQo+IEBAIC0zMTExLDcgKzMxMDMsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4g
ICAqDQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1
Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyBwYXJhbXMs
DQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCSAg
ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gDQo+IEBAIC0zMTIwLDE1ICszMTEyLDE1
IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMpKQ0KPiAg
CQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFt
cy5zYXNvY19hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+
c2Fzb2NfYXNzb2NfaWQpOw0KPiANCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNhc29jX2Fzc29j
X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+c2Fz
b2NfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShz
aywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIFNldCB0aGUgdmFsdWVz
IHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLw0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWlm
IChwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhc29j
X2Fzb2NtYXhyeHQgIT0gMCkgew0KPiAgCQkJX191MzIgcGF0aF9zdW0gPSAwOw0KPiAgCQkJaW50
ICAgcGF0aHMgPSAwOw0KPiAgCQkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwZWVyX2FkZHI7DQo+
IEBAIC0zMTQ1LDI0ICszMTM3LDI0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29j
aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCQkgKiB0aGVuIG9uZSBwYXRoLg0KPiAgCQkJICov
DQo+ICAJCQlpZiAocGF0aHMgPiAxICYmDQo+IC0JCQkgICAgcGFyYW1zLnNhc29jX2Fzb2NtYXhy
eHQgPiBwYXRoX3N1bSkNCj4gKwkJCSAgICBwYXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQgPiBwYXRo
X3N1bSkNCj4gIAkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JCQlhc29jLT5tYXhfcmV0cmFu
cyA9IHBhcmFtcy5zYXNvY19hc29jbWF4cnh0Ow0KPiArCQkJYXNvYy0+bWF4X3JldHJhbnMgPSBw
YXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmIChwYXJhbXMuc2Fz
b2NfY29va2llX2xpZmUgIT0gMCkNCj4gLQkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3Rp
bWUocGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlKTsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29v
a2llX2xpZmUgIT0gMCkNCj4gKwkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3RpbWUocGFy
YW1zLT5zYXNvY19jb29raWVfbGlmZSk7DQo+ICAJfSBlbHNlIHsNCj4gIAkJLyogU2V0IHRoZSB2
YWx1ZXMgdG8gdGhlIGVuZHBvaW50ICovDQo+ICAJCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0
cF9zayhzayk7DQo+IA0KPiAtCQlpZiAocGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQgIT0gMCkNCj4g
KwkJaWYgKHBhcmFtcy0+c2Fzb2NfYXNvY21heHJ4dCAhPSAwKQ0KPiAgCQkJc3AtPmFzc29jcGFy
YW1zLnNhc29jX2Fzb2NtYXhyeHQgPQ0KPiAtCQkJCQkJcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQ7
DQo+IC0JCWlmIChwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgIT0gMCkNCj4gKwkJCQkJCXBhcmFt
cy0+c2Fzb2NfYXNvY21heHJ4dDsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29va2llX2xpZmUg
IT0gMCkNCj4gIAkJCXNwLT5hc3NvY3BhcmFtcy5zYXNvY19jb29raWVfbGlmZSA9DQo+IC0JCQkJ
CQlwYXJhbXMuc2Fzb2NfY29va2llX2xpZmU7DQo+ICsJCQkJCQlwYXJhbXMtPnNhc29jX2Nvb2tp
ZV9saWZlOw0KPiAgCX0NCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTMyMjAsNyArMzIxMiw3
IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X21hcHBlZHY0KHN0cnVjdCBzb2NrICpzaywg
aW50ICpvcHR2YWwsDQo+ICAgKiBhc3NvY192YWx1ZTogIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmll
cyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKnBh
cmFtcywNCj4gIAkJCQkgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNj
dHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMyMzMsMTYgKzMyMjUsMTYgQEAgc3Rh
dGljIGludCBzY3RwX3NldHNvY2tvcHRfbWF4c2VnKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkg
ICAgIlVzZSBvZiBpbnQgaW4gbWF4c2VnIHNvY2tldCBvcHRpb24uXG4iDQo+ICAJCQkJICAgICJV
c2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVu
dC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0KPiAtCQl2YWwgPSAqKGludCAqKSZwYXJh
bXM7DQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwg
PSAqKGludCAqKXBhcmFtczsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FT
U09DOw0KPiAgCX0gZWxzZSBpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSkpIHsNCj4gLQkJdmFsID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQl2YWwgPSBwYXJh
bXMtPmFzc29jX3ZhbHVlOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAg
CX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+
IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAo
IWFzb2MgJiYgcGFyYW1zLT5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAg
ICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEBAIC0z
Mjc3LDkgKzMyNjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhzZWcoc3RydWN0
IHNvY2sgKnNrLA0KPiAgICogICBsb2NhbGx5IGJvdW5kIGFkZHJlc3Nlcy4gVGhlIGZvbGxvd2lu
ZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIGENCj4gICAqICAgc2V0IHByaW1hcnkgcmVxdWVz
dDoNCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gIHN0YXRpYyBpbnQgc2N0cF9z
ZXRzb2Nrb3B0X3BlZXJfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAg
ICBzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSBwcmltLA0KPiArCQkJCQkgICAgIHN0cnVjdCBzY3Rw
X3NldHBlZXJwcmltICpwcmltLA0KPiAgCQkJCQkgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jawkqc3A7DQo+IEBAIC0zMjk2LDcgKzMyODcsNyBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAq
c2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0cGVlcnByaW0pKQ0K
PiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBy
aW0uc3NwcF9hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHByaW0tPnNz
cHBfYXNzb2NfaWQpOw0KPiAgCWlmICghYXNvYykNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0K
PiBAQCAtMzMwOSwyNiArMzMwMCwyNiBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVy
X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKCFzY3RwX3N0YXRlKGFzb2Ms
IEVTVEFCTElTSEVEKSkNCj4gIAkJcmV0dXJuIC1FTk9UQ09OTjsNCj4gDQo+IC0JYWYgPSBzY3Rw
X2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcHBfYWRkci5zc19mYW1pbHkpOw0KPiArCWFmID0gc2N0
cF9nZXRfYWZfc3BlY2lmaWMocHJpbS0+c3NwcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICAJaWYgKCFh
ZikNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWlmICghYWYtPmFkZHJfdmFsaWQoKHVu
aW9uIHNjdHBfYWRkciAqKSZwcmltLnNzcHBfYWRkciwgc3AsIE5VTEwpKQ0KPiArCWlmICghYWYt
PmFkZHJfdmFsaWQoKHVuaW9uIHNjdHBfYWRkciAqKSZwcmltLT5zc3BwX2FkZHIsIHNwLCBOVUxM
KSkNCj4gIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOw0KPiANCj4gLQlpZiAoIXNjdHBfYXNzb2Nf
bG9va3VwX2xhZGRyKGFzb2MsICh1bmlvbiBzY3RwX2FkZHIgKikmcHJpbS5zc3BwX2FkZHIpKQ0K
PiArCWlmICghc2N0cF9hc3NvY19sb29rdXBfbGFkZHIoYXNvYywgKHVuaW9uIHNjdHBfYWRkciAq
KSZwcmltLT5zc3BwX2FkZHIpKQ0KPiAgCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7DQo+IA0KPiAg
CS8qIEFsbG93IHNlY3VyaXR5IG1vZHVsZSB0byB2YWxpZGF0ZSBhZGRyZXNzLiAqLw0KPiAgCWVy
ciA9IHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KHNrLCBTQ1RQX1NFVF9QRUVSX1BSSU1BUllf
QUREUiwNCj4gLQkJCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmcHJpbS5zc3BwX2FkZHIsDQo+ICsJ
CQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0tPnNzcHBfYWRkciwNCj4gIAkJCQkJIGFmLT5z
b2NrYWRkcl9sZW4pOw0KPiAgCWlmIChlcnIpDQo+ICAJCXJldHVybiBlcnI7DQo+IA0KPiAgCS8q
IENyZWF0ZSBhbiBBU0NPTkYgY2h1bmsgd2l0aCBTRVRfUFJJTUFSWSBwYXJhbWV0ZXIJKi8NCj4g
IAljaHVuayA9IHNjdHBfbWFrZV9hc2NvbmZfc2V0X3ByaW0oYXNvYywNCj4gLQkJCQkJICAodW5p
b24gc2N0cF9hZGRyICopJnByaW0uc3NwcF9hZGRyKTsNCj4gKwkJCQkJICAodW5pb24gc2N0cF9h
ZGRyICopJnByaW0tPnNzcHBfYWRkcik7DQo+ICAJaWYgKCFjaHVuaykNCj4gIAkJcmV0dXJuIC1F
Tk9NRU07DQo+IA0KPiBAQCAtMzMzOCw3ICszMzI5LDYgQEAgc3RhdGljIGludCBzY3RwX3NldHNv
Y2tvcHRfcGVlcl9wcmltYXJ5X2FkZHIoc3RydWN0IHNvY2sgKnNrLA0KPiANCj4gIAlyZXR1cm4g
ZXJyOw0KPiAgfQ0KPiAtI3VuZGVmIHByaW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29j
a29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkJICAgIHN0cnVj
dCBzY3RwX3NldGFkYXB0YXRpb24gKmFkYXB0YXRpb24sDQo+IEBAIC0zMzY3LDcgKzMzNTcsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2Nr
ICpzaywNCj4gICAqIHNhdmVkIHdpdGggb3V0Ym91bmQgbWVzc2FnZXMuDQo+ICAgKi8NCj4gIHN0
YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2NvbnRleHQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJ
CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMzNzYs
MjggKzMzNjYsMjggQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfY29udGV4dChzdHJ1Y3Qg
c29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Mo
c2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCA+
IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+
YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4gU0NUUF9BTExf
QVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5W
QUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQg
PSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQgPSBw
YXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlp
ZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4gLQkJcGFyYW1zLmFzc29jX2lkID0gU0NUUF9GVVRV
UkVfQVNTT0M7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4g
DQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAg
ICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+IC0JCXNwLT5kZWZhdWx0X3Jj
dl9jb250ZXh0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NU
UF9BTExfQVNTT0MpDQo+ICsJCXNwLT5kZWZhdWx0X3Jjdl9jb250ZXh0ID0gcGFyYW1zLT5hc3Nv
Y192YWx1ZTsNCj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT
T0MgfHwNCj4gLQkgICAgcGFyYW1zLmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlm
IChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJh
bXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5
KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykNCj4gLQkJCWFzb2MtPmRlZmF1bHRfcmN2X2Nv
bnRleHQgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Jjdl9jb250
ZXh0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBA
IC0zNDg4LDcgKzM0NzgsNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wYXJ0aWFsX2Rl
bGl2ZXJ5X3BvaW50KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIGZ1dHVyZSBhc3NvY2lhdGlvbnMg
aW5oZXJpdGluZyB0aGUgc29ja2V0IHZhbHVlLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgIHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICAgc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUgKnBhcmFtcywNCj4gIAkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlz
dHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiBAQCAtMzUwMCwzNCArMzQ5MCwz
NCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAJCQkJICAgICJVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJl
Y2F0ZWQuXG4iDQo+ICAJCQkJICAgICJVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVh
ZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0K
PiAtCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSAqKGludCAqKSZwYXJhbXM7DQo+IC0JCXBhcmFtcy5h
c3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbXMtPmFzc29jX3ZhbHVlID0g
KihpbnQgKilwYXJhbXM7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NP
QzsNCj4gIAl9IGVsc2UgaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAgCX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5h
c3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss
IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4g
U0NUUF9BTExfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0
dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPm1heF9idXJzdCA9
IHBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3Nv
Y192YWx1ZTsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5
bGUoc2ssIFRDUCkpDQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0K
PiArCQlwYXJhbXMtPmFzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmIChw
YXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAtCQlzcC0+bWF4X2J1cnN0ID0gcGFyYW1zLmFz
c29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
IHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJCXNw
LT5tYXhfYnVyc3QgPSBwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9DVVJS
RU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKQ0K
PiAtCQkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQkJYXNvYy0+
bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9
DQo+IEBAIC0zNTM5LDkgKzM1MjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhi
dXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiByZWNlaXZlZCBvbmx5IGluIGFuIGF1dGhlbnRp
Y2F0ZWQgd2F5LiAgQ2hhbmdlcyB0byB0aGUgbGlzdCBvZiBjaHVua3MNCj4gICAqIHdpbGwgb25s
eSBlZmZlY3QgZnV0dXJlIGFzc29jaWF0aW9ucyBvbiB0aGUgc29ja2V0Lg0KPiAgICovDQo+IC0j
ZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1
bmsoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgIHN0cnVjdCBzY3RwX2F1dGhjaHVuayB2
YWwsDQo+ICsJCQkJICAgICAgc3RydWN0IHNjdHBfYXV0aGNodW5rICp2YWwsDQo+ICAJCQkJICAg
ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAq
ZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+IEBAIC0zNTUyLDcgKzM1NDEsNyBAQCBzdGF0aWMgaW50
IHNjdHBfc2V0c29ja29wdF9hdXRoX2NodW5rKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpZiAob3B0
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmspKQ0KPiAgCQlyZXR1cm4gLUVJTlZB
TDsNCj4gDQo+IC0Jc3dpdGNoICh2YWwuc2F1dGhfY2h1bmspIHsNCj4gKwlzd2l0Y2ggKHZhbC0+
c2F1dGhfY2h1bmspIHsNCj4gIAljYXNlIFNDVFBfQ0lEX0lOSVQ6DQo+ICAJY2FzZSBTQ1RQX0NJ
RF9JTklUX0FDSzoNCj4gIAljYXNlIFNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFOg0KPiBAQCAt
MzU2MSw3ICszNTUwLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhz
dHJ1Y3Qgc29jayAqc2ssDQo+ICAJfQ0KPiANCj4gIAkvKiBhZGQgdGhpcyBjaHVuayBpZCB0byB0
aGUgZW5kcG9pbnQgKi8NCj4gLQlyZXR1cm4gc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCB2
YWwuc2F1dGhfY2h1bmspOw0KPiArCXJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAs
IHZhbC0+c2F1dGhfY2h1bmspOw0KPiAgfQ0KPiANCj4gIC8qDQo+IEBAIC0zNjY2LDcgKzM2NTUs
NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX2tleShzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gc2hhcmVkIGtleS4NCj4gICAqLw0KPiAgc3RhdGljIGlu
dCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAg
ICAgc3RydWN0IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF9h
dXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0K
PiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM2
NzYsMjkgKzM2NjUsMjkgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShz
dHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0
aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFz
c29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3Rf
YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNr
LCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3Nv
Y19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+
ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBf
YXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJ
CXJldHVybiBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5
bnVtYmVyKTsNCj4gDQo+ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2Fj
dF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lk
ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBf
QUxMX0FTU09DKSB7DQo+IC0JCXJldCA9IHNjdHBfYXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNv
YywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFz
b2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gIAkJaWYgKHJldCkNCj4gIAkJCXJldHVybiBy
ZXQ7DQo+ICAJfQ0KPiANCj4gLQlpZiAodmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQyB8fA0KPiAtCSAgICB2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
IHsNCj4gKwlpZiAodmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN
Cj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQls
aXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2NzKSB7DQo+ICAJCQlpbnQg
cmVzID0gc2N0cF9hdXRoX3NldF9hY3RpdmVfa2V5KGVwLCBhc29jLA0KPiAtCQkJCQkJCSAgIHZh
bC5zY2FjdF9rZXludW1iZXIpOw0KPiArCQkJCQkJCSAgIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsN
Cj4gDQo+ICAJCQlpZiAocmVzICYmICFyZXQpDQo+ICAJCQkJcmV0ID0gcmVzOw0KPiBAQCAtMzcx
NCw3ICszNzAzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1
Y3Qgc29jayAqc2ssDQo+ICAgKiBUaGlzIHNldCBvcHRpb24gd2lsbCBkZWxldGUgYSBzaGFyZWQg
c2VjcmV0IGtleSBmcm9tIHVzZS4NCj4gICAqLw0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgc3RydWN0IHNjdHBfYXV0aGtl
eWlkIHZhbCwNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkg
ICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICpl
cCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3MjQsMjkgKzM3MTMsMjkgQEAgc3RhdGljIGlu
dCBzY3RwX3NldHNvY2tvcHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxl
biAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7
DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0K
PiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3RfYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlp
ZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJ
ICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlp
ZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBhc29jLCB2YWwu
c2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBh
c29jLCB2YWwtPnNjYWN0X2tleW51bWJlcik7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBU
Q1ApKQ0KPiAtCQl2YWwuc2NhY3RfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ
dmFsLT5zY2FjdF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAodmFs
LnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAtCQlyZXQgPSBzY3RwX2F1dGhfZGVs
X2tleV9pZChlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2Nh
Y3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfZGVsX2tl
eV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAg
CQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsN
Cj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVsX2tleV9pZChlcCwgYXNvYywNCj4gLQkJCQkJ
CSAgICAgICB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJCQkJCSAgICAgICB2YWwtPnNjYWN0
X2tleW51bWJlcik7DQo+IA0KPiAgCQkJaWYgKHJlcyAmJiAhcmV0KQ0KPiAgCQkJCXJldCA9IHJl
czsNCj4gQEAgLTM3NjIsNyArMzc1MSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Rl
bF9rZXkoc3RydWN0IHNvY2sgKnNrLA0KPiAgICogVGhpcyBzZXQgb3B0aW9uIHdpbGwgZGVhY3Rp
dmF0ZSBhIHNoYXJlZCBzZWNyZXQga2V5Lg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0
c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0
IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZh
bCwNCj4gIAkJCQkJICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3Rw
X2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3NzIsMjkgKzM3NjEsMjkg
QEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfZGVhY3RpdmF0ZV9rZXkoc3RydWN0IHNvY2sg
KnNrLA0KPiAgCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCkpDQo+
ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFs
LnNjYWN0X2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgdmFsLnNjYWN0X2Fzc29jX2lkID4g
U0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFsLT5zY2Fj
dF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIHZhbC0+c2NhY3RfYXNzb2NfaWQgPiBTQ1RQ
X0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4g
LUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0JCXJldHVybiBzY3RwX2F1dGhfZGVhY3Rf
a2V5X2lkKGVwLCBhc29jLCB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBf
YXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gDQo+
ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2FjdF9hc3NvY19pZCA9IFND
VFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lkID0gU0NUUF9GVVRVUkVf
QVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT
T0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+
IC0JCXJldCA9IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC5zY2FjdF9rZXlu
dW1iZXIpOw0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
IHx8DQo+ICsJICAgIHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g
KwkJcmV0ID0gc2N0cF9hdXRoX2RlYWN0X2tleV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXlu
dW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAgCQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAt
CWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAg
IHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0
X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnko
YXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsNCj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVh
Y3Rfa2V5X2lkKGVwLCBhc29jLA0KPiAtCQkJCQkJCSB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4g
KwkJCQkJCQkgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiANCj4gIAkJCWlmIChyZXMgJiYgIXJl
dCkNCj4gIAkJCQlyZXQgPSByZXM7DQo+IEBAIC0zODAzLDcgKzM3OTIsNiBAQCBzdGF0aWMgaW50
IHNjdHBfc2V0c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IA0KPiAg
CXJldHVybiByZXQ7DQo+ICB9DQo+IC0jdW5kZWYgdmFsDQo+IA0KPiAgLyoNCj4gICAqIDguMS4y
MyBTQ1RQX0FVVE9fQVNDT05GDQo+IEBAIC0zODE5LDI0ICszODA3LDIzIEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2RlYWN0aXZhdGVfa2V5KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIE5v
dGUuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHNvY2tldCBvcGVyYXRpb24gb3ZlcnJpZGVzIGRl
ZmF1bHQgcGFyYW1ldGVyDQo+ICAgKiBiZWluZyBzZXQgYnkgc3lzY3RsIGFzIHdlbGwgYXMgRnJl
ZUJTRCBpbXBsZW1lbnRhdGlvbg0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKm9wdHZhbCkNCj4g
LXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVjdCBzb2NrICpzaywg
aW50IHZhbCwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVj
dCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcHRs
ZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gDQo+
ICAJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQlp
ZiAoIXNjdHBfaXNfZXBfYm91bmRhbGwoc2spICYmIHZhbCkNCj4gKwlpZiAoIXNjdHBfaXNfZXBf
Ym91bmRhbGwoc2spICYmICgqb3B0dmFsKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JaWYg
KCh2YWwgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB8fCAoIXZhbCAmJiAhc3AtPmRvX2F1dG9fYXNj
b25mKSkNCj4gKwlpZiAoKCgqb3B0dmFsKSAmJiBzcC0+ZG9fYXV0b19hc2NvbmYpIHx8ICghKCpv
cHR2YWwpICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+ICAJ
c3Bpbl9sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9sb2NrKTsNCj4gLQlpZiAo
dmFsID09IDAgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICsJaWYgKCgqb3B0dmFsKSA9PSAw
ICYmIHNwLT5kb19hdXRvX2FzY29uZikgew0KPiAgCQlsaXN0X2RlbCgmc3AtPmF1dG9fYXNjb25m
X2xpc3QpOw0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAwOw0KPiAtCX0gZWxzZSBpZiAodmFs
ICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpIHsNCj4gKwl9IGVsc2UgaWYgKCgqb3B0dmFsKSAmJiAh
c3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICAJCWxpc3RfYWRkX3RhaWwoJnNwLT5hdXRvX2FzY29u
Zl9saXN0LA0KPiAgCQkgICAgJnNvY2tfbmV0KHNrKS0+c2N0cC5hdXRvX2FzY29uZl9zcGxpc3Qp
Ow0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAxOw0KPiBAQCAtMzg0NCw3ICszODMxLDYgQEAg
c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBp
bnQgdmFsLA0KPiAgCXNwaW5fdW5sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9s
b2NrKTsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gLSN1bmRlZiB2YWwNCj4gDQo+ICAvKg0KPiAg
ICogU0NUUF9QRUVSX0FERFJfVEhMRFMNCj4gQEAgLTM4NTMsNzAgKzM4MzksNjggQEAgc3RhdGlj
IGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFs
LA0KPiAgICogdHJhbnNwb3J0cyBpbiBhbiBhc3NvY2lhdGlvbi4gIFNlZSBTZWN0aW9uIDYuMSBv
ZjoNCj4gICAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtbmlzaGlkYS10c3Z3Zy1zY3Rw
LWZhaWxvdmVyLTA1LnR4dA0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRp
YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3BhZGRyX3RocmVzaG9sZHMoc3RydWN0IHNvY2sgKnNrLA0K
PiAtCQkJCQkgICAgc3RydWN0IHNjdHBfcGFkZHJ0aGxkc192MiB2YWwsDQo+ICsJCQkJCSAgICBz
dHJ1Y3Qgc2N0cF9wYWRkcnRobGRzX3YyICp2YWwsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQg
b3B0bGVuLCBib29sIHYyKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnM7
DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IGxlbjsNCj4gDQo+
IC0JbGVuID0gdjIgPyBzaXplb2YodmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRz
KTsNCj4gKwlsZW4gPSB2MiA/IHNpemVvZigqdmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRk
cnRobGRzKTsNCj4gIAlpZiAob3B0bGVuIDwgbGVuKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4g
DQo+IC0JaWYgKHYyICYmIHZhbC5zcHRfcGF0aHBmdGhsZCA+IHZhbC5zcHRfcGF0aGNwdGhsZCkN
Cj4gKwlpZiAodjIgJiYgdmFsLT5zcHRfcGF0aHBmdGhsZCA+IHZhbC0+c3B0X3BhdGhjcHRobGQp
DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAoIXNjdHBfaXNfYW55KHNrLCAoY29u
c3QgdW5pb24gc2N0cF9hZGRyICopJnZhbC5zcHRfYWRkcmVzcykpIHsNCj4gLQkJdHJhbnMgPSBz
Y3RwX2FkZHJfaWQydHJhbnNwb3J0KHNrLCAmdmFsLnNwdF9hZGRyZXNzLA0KPiAtCQkJCQkgICAg
ICAgdmFsLnNwdF9hc3NvY19pZCk7DQo+ICsJaWYgKCFzY3RwX2lzX2FueShzaywgKGNvbnN0IHVu
aW9uIHNjdHBfYWRkciAqKSZ2YWwtPnNwdF9hZGRyZXNzKSkgew0KPiArCQl0cmFucyA9IHNjdHBf
YWRkcl9pZDJ0cmFuc3BvcnQoc2ssICZ2YWwtPnNwdF9hZGRyZXNzLA0KPiArCQkJCQkgICAgICAg
dmFsLT5zcHRfYXNzb2NfaWQpOw0KPiAgCQlpZiAoIXRyYW5zKQ0KPiAgCQkJcmV0dXJuIC1FTk9F
TlQ7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4cnh0KQ0KPiAtCQkJdHJhbnMtPnBhdGht
YXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlmICh2YWwtPnNwdF9wYXRobWF4cnh0
KQ0KPiArCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0Ow0KPiAgCQlp
ZiAodjIpDQo+IC0JCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC5zcHRfcGF0aGNwdGhsZDsNCj4g
LQkJdHJhbnMtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+ICsJCQl0cmFucy0+
cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXRyYW5zLT5wZl9yZXRyYW5z
ID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+
IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC5zcHRfYXNzb2NfaWQpOw0KPiAtCWlmICgh
YXNvYyAmJiB2YWwuc3B0X2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNv
YyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC0+c3B0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2Mg
JiYgdmFsLT5zcHRfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0
cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29j
KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZhc29jLT5wZWVyLnRyYW5zcG9y
dF9hZGRyX2xpc3QsDQo+ICAJCQkJICAgIHRyYW5zcG9ydHMpIHsNCj4gLQkJCWlmICh2YWwuc3B0
X3BhdGhtYXhyeHQpDQo+IC0JCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhy
eHQ7DQo+ICsJCQlpZiAodmFsLT5zcHRfcGF0aG1heHJ4dCkNCj4gKwkJCQl0cmFucy0+cGF0aG1h
eHJ4dCA9IHZhbC0+c3B0X3BhdGhtYXhyeHQ7DQo+ICAJCQlpZiAodjIpDQo+IC0JCQkJdHJhbnMt
PnBzX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhjcHRobGQ7DQo+IC0JCQl0cmFucy0+cGZfcmV0cmFu
cyA9IHZhbC5zcHRfcGF0aHBmdGhsZDsNCj4gKwkJCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC0+
c3B0X3BhdGhjcHRobGQ7DQo+ICsJCQl0cmFucy0+cGZfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhw
ZnRobGQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmICh2YWwuc3B0X3BhdGhtYXhyeHQpDQo+IC0JCQlh
c29jLT5wYXRobWF4cnh0ID0gdmFsLnNwdF9wYXRobWF4cnh0Ow0KPiArCQlpZiAodmFsLT5zcHRf
cGF0aG1heHJ4dCkNCj4gKwkJCWFzb2MtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0
Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlhc29jLT5wc19yZXRyYW5zID0gdmFsLnNwdF9wYXRoY3B0
aGxkOw0KPiAtCQlhc29jLT5wZl9yZXRyYW5zID0gdmFsLnNwdF9wYXRocGZ0aGxkOw0KPiArCQkJ
YXNvYy0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCWFzb2MtPnBmX3Jl
dHJhbnMgPSB2YWwtPnNwdF9wYXRocGZ0aGxkOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXN0cnVjdCBz
Y3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4
cnh0KQ0KPiAtCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlm
ICh2YWwtPnNwdF9wYXRobWF4cnh0KQ0KPiArCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9w
YXRobWF4cnh0Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlzcC0+cHNfcmV0cmFucyA9IHZhbC5zcHRf
cGF0aGNwdGhsZDsNCj4gLQkJc3AtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+
ICsJCQlzcC0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXNwLT5wZl9y
ZXRyYW5zID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0K
PiAgfQ0KPiAtI3VuZGVmIHZhbA0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Jl
Y3ZyY3ZpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVu
c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC0zOTQxLDkyICszOTI1LDkxIEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X3JlY3ZueHRpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWws
DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcHJfc3VwcG9ydGVkKHN0
cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0K
PiArCQkJCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCQl1bnNpZ25l
ZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0K
PiANCj4gLQlpZiAob3B0bGVuICE9IHNpemVvZihwYXJhbXMpKQ0KPiArCWlmIChvcHRsZW4gIT0g
c2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNj
dHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFt
cy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFz
c29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5hc3Nv
Y19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFAp
KQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0Jc2N0cF9zayhzayktPmVwLT5wcnNjdHBf
ZW5hYmxlID0gISFwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJc2N0cF9zayhzayktPmVwLT5wcnNj
dHBfZW5hYmxlID0gISFwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4g
IH0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3ByaW5mbyhzdHJ1
Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gaW5mbywN
Cj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyAqaW5mbywNCj4gIAkJCQkJICB1
bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0
cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJl
dHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGluZm8pKQ0KPiAr
CWlmIChvcHRsZW4gIT0gc2l6ZW9mKCppbmZvKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlm
IChpbmZvLnByX3BvbGljeSAmIH5TQ1RQX1BSX1NDVFBfTUFTSykNCj4gKwlpZiAoaW5mby0+cHJf
cG9saWN5ICYgflNDVFBfUFJfU0NUUF9NQVNLKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+IC0JaWYg
KGluZm8ucHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAtCQlpbmZvLnByX3ZhbHVl
ID0gMDsNCj4gKwlpZiAoaW5mby0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAr
CQlpbmZvLT5wcl92YWx1ZSA9IDA7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBp
bmZvLnByX2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgaW5mby5wcl9hc3NvY19pZCA+IFND
VFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIGluZm8tPnByX2Fz
c29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgaW5mby0+cHJfYXNzb2NfaWQgPiBTQ1RQX0FMTF9B
U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g
DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJU0NUUF9QUl9TRVRf
UE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8ucHJfcG9saWN5KTsNCj4gLQkJYXNvYy0+
ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5wcl92YWx1ZTsNCj4gKwkJU0NUUF9QUl9TRVRfUE9M
SUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCWFzb2MtPmRl
ZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9
DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlpbmZvLnByX2Fzc29jX2lk
ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+ICsJCWluZm8tPnByX2Fzc29jX2lkID0gU0NUUF9GVVRV
UkVfQVNTT0M7DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DIHx8DQo+IC0JICAgIGluZm8ucHJfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g
LQkJU0NUUF9QUl9TRVRfUE9MSUNZKHNwLT5kZWZhdWx0X2ZsYWdzLCBpbmZvLnByX3BvbGljeSk7
DQo+IC0JCXNwLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLnByX3ZhbHVlOw0KPiArCWlmIChp
bmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5w
cl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlTQ1RQX1BSX1NFVF9QT0xJQ1ko
c3AtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCXNwLT5kZWZhdWx0X3Rp
bWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnByX2Fzc29jX2lk
ID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBf
Q1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh
c29jcykgew0KPiAtCQkJU0NUUF9QUl9TRVRfUE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGlu
Zm8ucHJfcG9saWN5KTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8ucHJf
dmFsdWU7DQo+ICsJCQlTQ1RQX1BSX1NFVF9QT0xJQ1koYXNvYy0+ZGVmYXVsdF9mbGFncywgaW5m
by0+cHJfcG9saWN5KTsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnBy
X3ZhbHVlOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gIG91dDoNCj4gIAlyZXR1cm4gcmV0dmFsOw0K
PiAgfQ0KPiAtI3VuZGVmIGluZm8NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y
ZWNvbmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgICAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSBwYXJhbXMsDQo+ICsJCQkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7
DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1F
SU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9w
dGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0g
c2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFy
YW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQy
YXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFz
c29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVE
UCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9lbmFi
bGUgPSAhIXBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9l
bmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZhbCA9IDA7DQo+IA0K
PiBAQCAtNDAzNSw0OCArNDAxOCw0NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZWNv
bmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2VuYWJsZV9zdHJyZXNldChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ
CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgKnBhcmFtcywNCj4gIAkJCQkJICAgdW5zaWduZWQgaW50IG9wdGxlbikN
Cj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+
ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5W
QUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxl
biAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlpZiAocGFyYW1z
LmFzc29jX3ZhbHVlICYgKH5TQ1RQX0VOQUJMRV9TVFJSRVNFVF9NQVNLKSkNCj4gKwlpZiAocGFy
YW1zLT5hc3NvY192YWx1ZSAmICh+U0NUUF9FTkFCTEVfU1RSUkVTRVRfTUFTSykpDQo+ICAJCWdv
dG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lk
KTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYN
Cj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYg
KCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBz
Y3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+ICAJcmV0dmFsID0gMDsN
Cj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1z
LmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5zdHJyZXNldF9lbmFibGUgPSBwYXJhbXMtPmFzc29j
X3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNr
LCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ
cGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1z
LmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19p
ZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJZXAtPnN0cnJlc2V0X2VuYWJsZSA9IHBhcmFtcy5h
c3NvY192YWx1ZTsNCj4gKwlpZiAocGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCQll
cC0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+IC0JaWYgKHBh
cmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFND
VFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2Nz
KQ0KPiAtCQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiAr
CQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICBv
dXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gDQo+IC0jdW5kZWYgcGFyYW1zDQo+ICBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzaywN
Cj4gIAkJCQkJIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnBhcmFtcywNCj4gIAkJCQkJIHVu
c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC00MTAzLDIwICs0MDg1LDE3IEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgb3V0Og0K
PiAgCXJldHVybiByZXR2YWw7DQo+ICB9DQo+IC0jZGVmaW5lIHBhcmFtcyAoKnBhcmFtcykNCj4g
DQo+IC0NCj4gLSNkZWZpbmUgYXNzb2NpZCAoKmFzc29jaWQpDQo+IC1zdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfYXNzb2NfdCBhc3Nv
Y2lkLA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2Moc3RydWN0IHNv
Y2sgKnNrLCBzY3RwX2Fzc29jX3QgKmFzc29jaWQsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGlu
dCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJ
aW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGFzc29j
aWQpKQ0KPiArCWlmIChvcHRsZW4gIT0gc2l6ZW9mKCphc3NvY2lkKSkNCj4gIAkJZ290byBvdXQ7
DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBhc3NvY2lkKTsNCj4gKwlhc29jID0g
c2N0cF9pZDJhc3NvYyhzaywgKCphc3NvY2lkKSk7DQo+ICAJaWYgKCFhc29jKQ0KPiAgCQlnb3Rv
IG91dDsNCj4gDQo+IEBAIC00MTI1LDYyICs0MTA0LDYxIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRz
b2Nrb3B0X3Jlc2V0X2Fzc29jKHN0cnVjdCBzb2NrICpzaywgc2N0cF9hc3NvY190IGFzc29jaWQs
DQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gLSN1bmRlZiBhc3NvY2lkDQo+
IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWRkX3N0cmVhbXMoc3RydWN0IHNvY2sg
KnNrLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyBwYXJhbXMsDQo+ICsJ
CQkJICAgICAgIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpwYXJhbXMsDQo+ICAJCQkJICAgICAg
IHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0g
c2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJ
CWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNhc19h
c3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+c2FzX2Fzc29j
X2lkKTsNCj4gIAlpZiAoIWFzb2MpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlyZXR2YWwgPSBz
Y3RwX3NlbmRfYWRkX3N0cmVhbXMoYXNvYywgJnBhcmFtcyk7DQo+ICsJcmV0dmFsID0gc2N0cF9z
ZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7DQo+IA0KPiAgb3V0Og0KPiAgCXJldHVybiBy
ZXR2YWw7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfc2NoZWR1bGVy
KHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBh
cmFtcywNCj4gKwkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJ
CQkJICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sg
KnNwID0gc2N0cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+
ICAJaW50IHJldHZhbCA9IDA7DQo+IA0KPiAtCWlmIChvcHRsZW4gPCBzaXplb2YocGFyYW1zKSkN
Cj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsN
Cj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY192YWx1ZSA+IFNDVFBfU1NfTUFYKQ0KPiArCWlmIChw
YXJhbXMtPmFzc29jX3ZhbHVlID4gU0NUUF9TU19NQVgpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K
PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlp
ZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29j
ID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYm
IHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxl
KHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0J
CXJldHVybiBzY3RwX3NjaGVkX3NldF9zY2hlZChhc29jLCBwYXJhbXMuYXNzb2NfdmFsdWUpOw0K
PiArCQlyZXR1cm4gc2N0cF9zY2hlZF9zZXRfc2NoZWQoYXNvYywgcGFyYW1zLT5hc3NvY192YWx1
ZSk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2Nf
aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVU
VVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJ
c3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJaWYgKHBhcmFtcy0+YXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1zLT5hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykNCj4gKwkJc3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMtPmFzc29jX3Zh
bHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8
fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwlpZiAo
cGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1z
LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5
KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAgCQkJaW50IHJldCA9IHNjdHBfc2No
ZWRfc2V0X3NjaGVkKGFzb2MsDQo+IC0JCQkJCQkgICAgICAgcGFyYW1zLmFzc29jX3ZhbHVlKTsN
Cj4gKwkJCQkJCSAgICAgICBwYXJhbXMtPmFzc29jX3ZhbHVlKTsNCj4gDQo+ICAJCQlpZiAocmV0
ICYmICFyZXR2YWwpDQo+ICAJCQkJcmV0dmFsID0gcmV0Ow0KPiBAQCAtNDE5MSwzMSArNDE2OSwz
MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9zY2hlZHVsZXIoc3RydWN0IHNvY2sgKnNr
LA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1
ZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSBw
YXJhbXMsDQo+ICsJCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSAqcGFyYW1zLA0KPiAg
CQkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0
bGVuIDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkN
Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu
YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9DVVJS
RU5UX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2Nf
aWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfQ1VSUkVOVF9B
U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g
DQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJcmV0dmFsID0gc2N0cF9zY2hlZF9zZXRfdmFsdWUoYXNv
YywgcGFyYW1zLnN0cmVhbV9pZCwNCj4gLQkJCQkJICAgICAgcGFyYW1zLnN0cmVhbV92YWx1ZSwg
R0ZQX0tFUk5FTCk7DQo+ICsJCXJldHZhbCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBh
cmFtcy0+c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICBwYXJhbXMtPnN0cmVhbV92YWx1ZSwgR0ZQ
X0tFUk5FTCk7DQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4gDQo+ICAJcmV0dmFsID0gMDsNCj4g
DQo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmc2N0cF9zayhzayktPmVwLT5hc29jcywg
YXNvY3MpIHsNCj4gLQkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFt
cy5zdHJlYW1faWQsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3RyZWFtX3ZhbHVlLCBHRlBfS0VS
TkVMKTsNCj4gKwkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFtcy0+
c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICAgcGFyYW1zLT5zdHJlYW1fdmFsdWUsIEdGUF9LRVJO
RUwpOw0KPiAgCQlpZiAocmV0ICYmICFyZXR2YWwpIC8qIHRyeSB0byByZXR1cm4gdGhlIDFzdCBl
cnJvci4gKi8NCj4gIAkJCXJldHZhbCA9IHJldDsNCj4gIAl9DQo+IEBAIC00MjI1LDE4ICs0MjAz
LDE4IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1ZShzdHJ1Y3Qg
c29jayAqc2ssDQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJs
ZWF2aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCQkgIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
KnBhcmFtcywNCj4gIAkJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1
Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0bGVu
IDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkNCj4g
IAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNz
b2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVf
QVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7
DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0Mg
JiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiBA
QCAtNDI0NSw3ICs0MjIzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJsZWF2
aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4g
DQo+IC0Jc3AtPmVwLT5pbnRsX2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCXNw
LT5lcC0+aW50bF9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZh
bCA9IDA7DQo+IA0KPiBAQCAtNDI5MSw0MSArNDI2OSw0MCBAQCBzdGF0aWMgaW50IHNjdHBfYXNz
b2NfdWxwZXZlbnRfdHlwZV9zZXQoc3RydWN0IHNjdHBfZXZlbnQgKnBhcmFtLA0KPiAgCXJldHVy
biAwOw0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW0gKCpwYXJhbSkNCj4gLXN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQg
cGFyYW0sDQo+ICtzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ldmVudChzdHJ1Y3Qgc29jayAq
c2ssIHN0cnVjdCBzY3RwX2V2ZW50ICpwYXJhbSwNCj4gIAkJCQkgdW5zaWduZWQgaW50IG9wdGxl
bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAwOw0KPiANCj4g
LQlpZiAob3B0bGVuIDwgc2l6ZW9mKHBhcmFtKSkNCj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpw
YXJhbSkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfdHlwZSA8
IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+IC0JICAgIHBhcmFtLnNlX3R5cGUgPiBTQ1RQX1NOX1RZ
UEVfTUFYKQ0KPiArCWlmIChwYXJhbS0+c2VfdHlwZSA8IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+
ICsJICAgIHBhcmFtLT5zZV90eXBlID4gU0NUUF9TTl9UWVBFX01BWCkNCj4gIAkJcmV0dXJuIC1F
SU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbS5zZV9hc3NvY19p
ZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtLnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0Mg
JiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW0tPnNlX2Fzc29jX2lkKTsNCj4g
KwlpZiAoIWFzb2MgJiYgcGFyYW0tPnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g
IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg
CWlmIChhc29jKQ0KPiAtCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFy
YW0sIGFzb2MpOw0KPiArCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldChwYXJh
bSwgYXNvYyk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbS5z
ZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbS0+c2VfYXNzb2NfaWQg
PSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFtLnNlX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKQ0KPiArCWlmIChwYXJhbS0+c2VfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mg
fHwNCj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlz
Y3RwX3VscGV2ZW50X3R5cGVfc2V0KCZzcC0+c3Vic2NyaWJlLA0KPiAtCQkJCSAgICAgICBwYXJh
bS5zZV90eXBlLCBwYXJhbS5zZV9vbik7DQo+ICsJCQkJICAgICAgIHBhcmFtLT5zZV90eXBlLCBw
YXJhbS0+c2Vfb24pOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfYXNzb2NfaWQgPT0gU0NUUF9DVVJS
RU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSB7DQo+ICsJaWYgKHBhcmFtLT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN
Cj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxp
c3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKSB7DQo+IC0JCQlp
bnQgcmV0ID0gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFyYW0sIGFzb2MpOw0KPiAr
CQkJaW50IHJldCA9IHNjdHBfYXNzb2NfdWxwZXZlbnRfdHlwZV9zZXQocGFyYW0sIGFzb2MpOw0K
PiANCj4gIAkJCWlmIChyZXQgJiYgIXJldHZhbCkNCj4gIAkJCQlyZXR2YWwgPSByZXQ7DQo+IEBA
IC00MzM0LDI2ICs0MzExLDI1IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0
cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQgcGFyYW0sDQo+IA0KPiAgCXJldHVybiBy
ZXR2YWw7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0
c29ja29wdF9hc2NvbmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAgIHN0
cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAg
ew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCXN0cnVjdCBzY3RwX2Vu
ZHBvaW50ICplcDsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0JaWYgKG9wdGxl
biAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqcGFyYW1zKSkN
Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu
YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRV
UkVfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19p
ZCk7DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNT
T0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0K
PiAgCWVwID0gc2N0cF9zayhzayktPmVwOw0KPiAtCWVwLT5hc2NvbmZfZW5hYmxlID0gISFwYXJh
bXMuYXNzb2NfdmFsdWU7DQo+ICsJZXAtPmFzY29uZl9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2Nf
dmFsdWU7DQo+IA0KPiAgCWlmIChlcC0+YXNjb25mX2VuYWJsZSAmJiBlcC0+YXV0aF9lbmFibGUp
IHsNCj4gIAkJc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpOw0K
PiBAQCAtNDM2NywyMyArNDM0MywyMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hc2Nv
bmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50IHNj
dHBfc2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAg
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsN
Cj4gIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRw
b2ludCAqZXA7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4g
IT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+
ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFz
c29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJF
X0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQp
Ow0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09D
ICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4g
IAllcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gLQlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7DQo+
ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUpIHsNCj4gIAkJcmV0dmFsID0gc2N0cF9hdXRoX2lu
aXQoZXAsIEdGUF9LRVJORUwpOw0KPiAgCQlpZiAocmV0dmFsKQ0KPiAgCQkJZ290byBvdXQ7DQo+
IEBAIC00MzkzLDcgKzQzNjksNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX3N1
cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWVwLT5hdXRo
X2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWVwLT5hdXRoX2VuYWJsZSA9ICEh
cGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gIAlyZXR2YWwgPSAwOw0KPiANCj4gIG91dDoNCj4gQEAg
LTQ0MDEsMjEgKzQzNzcsMjEgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9zdXBw
b3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRz
b2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
KnBhcmFtcywNCj4gIAkJCQkJIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0K
PiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXpl
b2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3Nv
YyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lk
ICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBh
cmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFND
VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdv
dG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy5h
c3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy0+
YXNzb2NfdmFsdWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+IEBAIC00NDIzLDMz
ICs0Mzk5LDMyIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3Ry
dWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bm
X2V4cG9zZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSBwYXJhbXMsDQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1z
LA0KPiAgCQkJCSAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0J
aWYgKG9wdGxlbiAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigq
cGFyYW1zKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUg
PiBTQ1RQX1BGX0VYUE9TRV9NQVgpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUgPiBTQ1RQ
X1BGX0VYUE9TRV9NQVgpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJh
c3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29j
X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss
IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9
IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJ
CWdvdG8gb3V0Ow0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJYXNvYy0+cGZfZXhwb3NlID0gcGFy
YW1zLmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5wZl9leHBvc2UgPSBwYXJhbXMtPmFzc29jX3Zh
bHVlOw0KPiAgCWVsc2UNCj4gLQkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy5hc3Nv
Y192YWx1ZTsNCj4gKwkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy0+YXNzb2NfdmFs
dWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4g
IH0NCj4gLSN1bmRlZiBwYXJhbXMNCj4gDQo+ICBzdGF0aWMgaW50IGtlcm5lbF9zY3RwX3NldHNv
Y2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLA0KPiAgCQkJ
ICAgaW50IG9wdGxlbikNCj4gLS0NCj4gMS44LjEuMg0KPiANCj4gLQ0KPiBSZWdpc3RlcmVkIEFk
ZHJlc3MgTGFrZXNpZGUsIEJyYW1sZXkgUm9hZCwgTW91bnQgRmFybSwgTWlsdG9uIEtleW5lcywg
TUsxIDFQVCwgVUsNCj4gUmVnaXN0cmF0aW9uIE5vOiAxMzk3Mzg2IChXYWxlcykNCg0KLQ0KUmVn
aXN0ZXJlZCBBZGRyZXNzIExha2VzaWRlLCBCcmFtbGV5IFJvYWQsIE1vdW50IEZhcm0sIE1pbHRv
biBLZXluZXMsIE1LMSAxUFQsIFVLDQpSZWdpc3RyYXRpb24gTm86IDEzOTczODYgKFdhbGVzKQ0K

  reply	other threads:[~2020-05-26 16:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-26 16:39 [PATCH v3 net-next 1/8] sctp: setsockopt, rename some locals David Laight
2020-05-26 16:40 ` [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines David Laight
2020-05-26 16:44   ` David Laight [this message]
2020-05-26 22:36     ` David Miller
2020-05-29 16:12       ` Marcelo Ricardo Leitner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8bb56a30edfb4ff696d44cf9af909d82@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=davem@davemloft.net \
    --cc=hch@lst.de \
    --cc=kuba@kernel.org \
    --cc=linux-sctp@vger.kernel.org \
    --cc=marcelo.leitner@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=vyasevich@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).