From: "Gix, Brian" <brian.gix@intel.com>
To: "marcel@holtmann.org" <marcel@holtmann.org>
Cc: "johan.hedberg@gmail.com" <johan.hedberg@gmail.com>,
"linux-bluetooth@vger.kernel.org"
<linux-bluetooth@vger.kernel.org>,
"Stotland, Inga" <inga.stotland@intel.com>
Subject: Re: [PATCH BlueZ v5 03/14] mesh: Infrastructure for Mesh daemon
Date: Sun, 8 Jul 2018 15:05:49 +0000 [thread overview]
Message-ID: <1531062347.7346.18.camel@intel.com> (raw)
In-Reply-To: <62AEAA3E-B88E-4D53-A113-3680C1F86047@holtmann.org>
SGkgTWFyY2VsLA0KDQpPbiBGcmksIDIwMTgtMDctMDYgYXQgMjA6MjAgKzAyMDAsIE1hcmNlbCBI
b2x0bWFubiB3cm90ZToNCj4gSGkgQnJpYW4sDQo+IA0KPiA+IC0tLQ0KPiA+IG1lc2gvZGlzcGxh
eS5jICAgICAgICAgfCAgNjcgKysrKysNCj4gPiBtZXNoL2hjaS5jICAgICAgICAgICAgIHwgNjk5
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiBt
ZXNoL21lc2gtaW8tZ2VuZXJpYy5jIHwgNjYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysNCj4gPiBtZXNoL21lc2gtaW8uYyAgICAgICAgIHwgMTg3ICsrKysr
KysrKysrKysNCj4gPiA0IGZpbGVzIGNoYW5nZWQsIDE2MTMgaW5zZXJ0aW9ucygrKQ0KPiA+IGNy
ZWF0ZSBtb2RlIDEwMDY0NCBtZXNoL2Rpc3BsYXkuYw0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBt
ZXNoL2hjaS5jDQo+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IG1lc2gvbWVzaC1pby1nZW5lcmljLmMN
Cj4gPiBjcmVhdGUgbW9kZSAxMDA2NDQgbWVzaC9tZXNoLWlvLmMNCj4gPiANCj4gPiBkaWZmIC0t
Z2l0IGEvbWVzaC9kaXNwbGF5LmMgYi9tZXNoL2Rpc3BsYXkuYw0KPiA+IG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwLi5hZGY5MmNhZTANCj4gPiAtLS0gL2Rldi9udWxs
DQo+ID4gKysrIGIvbWVzaC9kaXNwbGF5LmMNCj4gPiBAQCAtMCwwICsxLDY3IEBADQo+ID4gKy8q
DQo+ID4gKyAqDQo+ID4gKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3Ig
TGludXgNCj4gPiArICoNCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxOCAgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuKysrKw0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4g
PiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
DQo+ID4gKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
Lg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+
ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ID4gKyNpbmNsdWRlIDx0ZXJtaW9zLmg+DQo+ID4gKyNp
bmNsdWRlIDxzeXMvaW9jdGwuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+DQo+ID4gKyNp
bmNsdWRlIDxlbGwvZWxsLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiZGlzcGxheS5oIg0KPiA+
ICsNCj4gPiArI2RlZmluZSBsaWtlbHkoeCkgICBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQ0K
PiA+ICsjZGVmaW5lIHVubGlrZWx5KHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApDQo+IA0K
PiBJIGhpZ2hseSBkb3VidCB3ZSB3aWxsIG1ha2UgZ29vZCB1c2Ugb2YgbGlrZWx5IGFuZCB1bmxp
a2VseS4gSnVzdCByZW1vdmUgdGhhdC4gV2UgY2FuIG1lYXN1cmUgdGhhdCBhdCBzb21lDQo+IHBv
aW50LCBidXQgcmlnaHQgbm93IGl0IHNlZW1zIHVzZWxlc3MuIE9uIGEgc2lkZSBub3RlLCBJIGFt
IG5vdCBjb252aW5jZWQgdGhhdCBvdXIgdXNhZ2UgaW4gRUxMIGlzIGFjdHVhbGx5DQo+IHdvcnRo
IHdoaWxlIGRvaW5nLg0KDQpUaGlzIHdpbGwgYmUgcmVtb3ZlZCBmb3IgdjYgb2YgcGF0Y2gtc2V0
DQoNCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9udW1fY29sdW1u
czsNCj4gPiArDQo+ID4gK3Vuc2lnbmVkIGludCBudW1fY29sdW1ucyh2b2lkKQ0KPiA+ICt7DQo+
ID4gKwlzdHJ1Y3Qgd2luc2l6ZSB3czsNCj4gPiArDQo+ID4gKwlpZiAobGlrZWx5KGNhY2hlZF9u
dW1fY29sdW1ucyA+IDApKQ0KPiA+ICsJCXJldHVybiBjYWNoZWRfbnVtX2NvbHVtbnM7DQo+ID4g
Kw0KPiA+ICsJaWYgKGlvY3RsKFNURE9VVF9GSUxFTk8sIFRJT0NHV0lOU1osICZ3cykgPCAwIHx8
IHdzLndzX2NvbCA9PSAwKQ0KPiA+ICsJCWNhY2hlZF9udW1fY29sdW1ucyA9IDgwOw0KPiA+ICsJ
ZWxzZQ0KPiA+ICsJCWNhY2hlZF9udW1fY29sdW1ucyA9IHdzLndzX2NvbDsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gY2FjaGVkX251bV9jb2x1bW5zOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHBy
aW50X3BhY2tldChjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3Qg
c2l6ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHRpbWV2YWwgcGt0X3RpbWU7DQo+ID4gKw0KPiA+
ICsJZ2V0dGltZW9mZGF5KCZwa3RfdGltZSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUg
PiAwKSB7DQo+ID4gKwkJY2hhciAqc3RyOw0KPiA+ICsNCj4gPiArCQlzdHIgPSBsX3V0aWxfaGV4
c3RyaW5nKGRhdGEsIHNpemUpOw0KPiA+ICsJCWxfaW5mbygiJTA1ZC4lMDNkICVzOiAlcyIsDQo+
ID4gKwkJCQkodWludDMyX3QpIHBrdF90aW1lLnR2X3NlYyAlIDEwMDAwMCwNCj4gPiArCQkJCSh1
aW50MzJfdCkgcGt0X3RpbWUudHZfdXNlYy8xMDAwLCBsYWJlbCwgc3RyKTsNCj4gPiArCQlsX2Zy
ZWUoc3RyKTsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWxfaW5mbygiJTA1ZC4lMDNkICVzOiBlbXB0
eSIsDQo+ID4gKwkJCQkodWludDMyX3QpIHBrdF90aW1lLnR2X3NlYyAlIDEwMDAwMCwNCj4gPiAr
CQkJCSh1aW50MzJfdCkgcGt0X3RpbWUudHZfdXNlYy8xMDAwLCBsYWJlbCk7DQo+ID4gK30NCj4g
DQo+IEkgaGF2ZSBubyBpZGVhIHdoeSB3ZSBhcmUgbm90IHVzaW5nIHV0aWxfaGV4ZHVtcCgpIG9y
IGxfdXRpbF9oZXhkdW1wKCkgc2luY2UgdGhleSBhcmUgaG9va2VkIHVwIHByb3Blcmx5IHdpdGgN
Cj4gZGVidWcgZGVmaW5lcyBldGMuDQoNCmxfdXRpbF9oZXhkdW1wIGRvZXMgbm90IGNyZWF0ZSBz
dHJpbmdzIGluIHRoZSBmb3JtYXQgd2UgbW9zdCB1c2UsIHdoaWNoIGlzIGEgZm9ybSB0aGF0IGNh
biBiZSBmZWQgYmFjayBpbnRvDQpsX3V0aWxfZnJvbV9oZXhzdHJpbmcuIGxfdXRpbF9oZXhkdW1w
IGFkZHMgd2hpdGVzcGFjZSBiZXR3ZWVuIGVhY2ggb2N0ZXQsIGFuZCBhc2NpaSBnb3JwIGF0IHRo
ZSBlbmQgb2YgdGhlDQpsaW5lLCB3aGlsZSBsX3V0aWxfaGV4c3RyaW5nIHJldHVybnMgYSB0aWdo
dGx5IHBhY2tlZCBvY3RldHMtdG8tYXNjaWloZXguDQoNCldlIGNhbiB0aGVuIHVzZSB0aGUgb3V0
cHV0IGZyb20gdGhpcyBmdW5jdGlvbiB0byBjb3B5L3Bhc3RlIHN0cmluZ3MgYmV0d2VlbiBpbnN0
YW5jZXMgZm9yIGV4YW1wbGUgdG86DQoxLiBzaW11bGF0ZSAiT3V0IE9mIEJhbmQiIHB1YmxpYyBh
bmQgc3RhdGljIGtleSBleGNoYW5nZQ0KMi4gdHJhZGUgdmlhIGVtYWlsIGxvbmcgYXNjaWktaGV4
IHN0cmluZ3MgdG8gSU9QIGFuZCBVUEYgcGFydG5lcnMNCjMuIHBhc3RlIHJlcGVhdGVkIG92ZXIt
dGhlLWFpciBwYWNrZXRzIHRvIHJlcGVhdCBleGFjdCB0ZXN0IHJ1bnMgd2l0aG91dCBwcmVjb25k
aXRpb25pbmcgc2VxdWVuY2UgbnVtYmVycyBhbmQNCklWIEluZGV4cyBldGMuDQoNCklmIHlvdSBs
aWtlLCBJIGNhbiByZXdvcmsgdGhpcyB0byB1c2UgbF9kZWJ1ZywgYnV0IHRoZSBjdXJyZW50IG91
dHB1dCBmb3JtYXQgb2YgdGhlIGRhdGEgaXMgbW9yZSB1c2VmdWwgaW4gdGhpcw0KZm9ybSwgdGhh
biBpdCBpcyBpbiBoZXhkdW1wIGZvcm1hdC4NCg0KDQo+ID4gZGlmZiAtLWdpdCBhL21lc2gvaGNp
LmMgYi9tZXNoL2hjaS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAw
MDAwMDAuLmRhNjgzOGE1NQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9tZXNoL2hjaS5j
DQo+ID4gQEAgLTAsMCArMSw2OTkgQEANCj4gPiArLyoNCj4gPiArICoNCj4gPiArICogIEJsdWVa
IC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eA0KPiA+ICsgKg0KPiA+ICsgKiAg
Q29weXJpZ2h0IChDKSAyMDE4ICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4NCj4gPiArICoNCj4gPiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gPiArICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gPiArICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcg0KPiA+ICsgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ID4gKyAqDQo+ID4gKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gPiAr
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mDQo+ID4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KPiA+ICsgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0K
PiA+ICsjaWZkZWYgSEFWRV9DT05GSUdfSA0KPiA+ICsjaW5jbHVkZSA8Y29uZmlnLmg+DQo+ID4g
KyNlbmRpZg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiA+ICsjaW5jbHVkZSA8
c3RkbGliLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvdWlvLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+DQo+ID4gKyNpbmNsdWRlIDxlbGwvZWxsLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVk
ZSAibW9uaXRvci9idC5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvaGNpLmgiDQo+ID4g
Kw0KPiA+ICsjZGVmaW5lIEJUUFJPVE9fSENJCTENCj4gPiArc3RydWN0IHNvY2thZGRyX2hjaSB7
DQo+ID4gKwlzYV9mYW1pbHlfdAloY2lfZmFtaWx5Ow0KPiA+ICsJdW5zaWduZWQgc2hvcnQJaGNp
X2RldjsNCj4gPiArCXVuc2lnbmVkIHNob3J0ICBoY2lfY2hhbm5lbDsNCj4gPiArfTsNCj4gPiAr
I2RlZmluZSBIQ0lfQ0hBTk5FTF9VU0VSCTENCj4gPiArDQo+ID4gK3N0cnVjdCBidF9oY2kgew0K
PiA+ICsJaW50IHJlZl9jb3VudDsNCj4gPiArCXN0cnVjdCBsX2lvICppbzsNCj4gPiArCWJvb2wg
aXNfc3RyZWFtOw0KPiA+ICsJYm9vbCB3cml0ZXJfYWN0aXZlOw0KPiA+ICsJdWludDhfdCBudW1f
Y21kczsNCj4gPiArCXVpbnQ4X3QgbnVtX3BrdHM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbmV4dF9j
bWRfaWQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbmV4dF9ldnRfaWQ7DQo+ID4gKwlzdHJ1Y3QgbF9x
dWV1ZSAqY21kX3F1ZXVlOw0KPiA+ICsJc3RydWN0IGxfcXVldWUgKnJzcF9xdWV1ZTsNCj4gPiAr
CXN0cnVjdCBsX3F1ZXVlICpldnRfbGlzdDsNCj4gPiArCXN0cnVjdCBsX3F1ZXVlICpwa3RfcXVl
dWU7DQo+ID4gKwlidF9oY2lfcmVjZWl2ZV9mdW5jX3QgcmVjZWl2ZV9jYWxsYmFjazsNCj4gPiAr
CWJ0X2hjaV9kZXN0cm95X2Z1bmNfdCByZWNlaXZlX2Rlc3Ryb3k7DQo+ID4gKwl2b2lkICpyZWNl
aXZlX2RhdGE7DQo+ID4gK307DQo+IA0KPiBXaGF0IGlzIHdyb25nIHdpdGggc3JjL3NoYXJlZC9o
Y2kuW2NoXSBpbnN0ZWFkIGhhdmluZyBhIGNvcHkgaGVyZT8NCg0KVGhlIG1haW4gYmFycmllciB0
byB0aGlzIGlzIHRoYXQgdGhlIHNyYy9zaGFyZWQvaGNpLltjaF0gdXNlcyBnbGliIGNvbnZlbnRp
b25zLCBhbmQgdGhlIG1lc2ggdmVyc2lvbnMgdXNlIEVMTC4NCkkgYWdyZWUgdGhhdCB0aGVzZSBz
aG91bGQgYmUgYSBzaW5nbGUgaGNpLltjaF0sIGJ1dCBpdCBtYXkgbmVlZCB0byB3YWl0IHVudGls
IHRoZSByZXN0IG9mIGJsdWV6IGlzIHRyYW5zaXRpb25lZA0KdG8gRUxMLg0KDQpJIGNhbiBhZGQg
YSAvKiBUT0RPICovIHRvIHRoZSBtZXNoIHZlcnNpb24gdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBl
dmVudHVhbGx5IGFkZHJlc3NlZCAoPykuDQogDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY21kIHsNCj4g
PiArCXVuc2lnbmVkIGludCBpZDsNCj4gPiArCXVpbnQxNl90IG9wY29kZTsNCj4gPiArCXZvaWQg
KmRhdGE7DQo+ID4gKwl1aW50OF90IHNpemU7DQo+ID4gKwlidF9oY2lfY2FsbGJhY2tfZnVuY190
IGNhbGxiYWNrOw0KPiA+ICsJYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3k7DQo+ID4gKwl2
b2lkICp1c2VyX2RhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgZXZ0IHsNCj4gPiAr
CXVuc2lnbmVkIGludCBpZDsNCj4gPiArCXVpbnQ4X3QgZXZlbnQ7DQo+ID4gKwlidF9oY2lfY2Fs
bGJhY2tfZnVuY190IGNhbGxiYWNrOw0KPiA+ICsJYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ry
b3k7DQo+ID4gKwl2b2lkICp1c2VyX2RhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg
cGt0IHsNCj4gPiArCXVpbnQxNl90IGhhbmRsZTsNCj4gPiArCXVpbnQ4X3QgZmxhZ3M7DQo+ID4g
Kwl2b2lkICpkYXRhOw0KPiA+ICsJdWludDE2X3Qgc2l6ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4g
K3N0YXRpYyB2b2lkIGNtZF9mcmVlKHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBj
bWQgKmNtZCA9IGRhdGE7DQo+ID4gKw0KPiA+ICsJaWYgKGNtZC0+ZGVzdHJveSkNCj4gPiArCQlj
bWQtPmRlc3Ryb3koY21kLT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWxfZnJlZShjbWQtPmRh
dGEpOw0KPiA+ICsJbF9mcmVlKGNtZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk
IGV2dF9mcmVlKHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBldnQgKmV2dCA9IGRh
dGE7DQo+ID4gKw0KPiA+ICsJaWYgKGV2dC0+ZGVzdHJveSkNCj4gPiArCQlldnQtPmRlc3Ryb3ko
ZXZ0LT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWxfZnJlZShldnQpOw0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtzdGF0aWMgdm9pZCBwa3RfZnJlZSh2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlz
dHJ1Y3QgcGt0ICpwa3QgPSBkYXRhOw0KPiA+ICsNCj4gPiArCWxfZnJlZShwa3QtPmRhdGEpOw0K
PiA+ICsJbF9mcmVlKHBrdCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNlbmRf
Y29tbWFuZChzdHJ1Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90IG9wY29kZSwNCj4gPiArCQkJCQkJ
dm9pZCAqZGF0YSwgdWludDhfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IHR5cGUgPSBC
VF9INF9DTURfUEtUOw0KPiA+ICsJc3RydWN0IGJ0X2hjaV9jbWRfaGRyIGhkcjsNCj4gPiArCXN0
cnVjdCBpb3ZlYyBpb3ZbM107DQo+ID4gKwlpbnQgZmQsIGlvdmNudDsNCj4gPiArDQo+ID4gKwlo
ZHIub3Bjb2RlID0gTF9DUFVfVE9fTEUxNihvcGNvZGUpOw0KPiA+ICsJaGRyLnBsZW4gPSBzaXpl
Ow0KPiA+ICsNCj4gPiArCWlvdlswXS5pb3ZfYmFzZSA9ICZ0eXBlOw0KPiA+ICsJaW92WzBdLmlv
dl9sZW4gID0gMTsNCj4gPiArCWlvdlsxXS5pb3ZfYmFzZSA9ICZoZHI7DQo+ID4gKwlpb3ZbMV0u
aW92X2xlbiAgPSBzaXplb2YoaGRyKTsNCj4gPiArDQo+ID4gKwlpZiAoc2l6ZSA+IDApIHsNCj4g
PiArCQlpb3ZbMl0uaW92X2Jhc2UgPSBkYXRhOw0KPiA+ICsJCWlvdlsyXS5pb3ZfbGVuICA9IHNp
emU7DQo+ID4gKwkJaW92Y250ID0gMzsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWlvdmNudCA9IDI7
DQo+ID4gKw0KPiA+ICsJZmQgPSBsX2lvX2dldF9mZChoY2ktPmlvKTsNCj4gPiArCWlmIChmZCA8
IDApIHsNCj4gPiArCQlsX2Vycm9yKCJoY2ktPmlvIEJhZCIpOw0KPiA+ICsJCXJldHVybjsNCj4g
PiArCX0NCj4gPiArDQo+ID4gKwlpZiAod3JpdGV2KGZkLCBpb3YsIGlvdmNudCkgPCAwKSB7DQo+
ID4gKwkJbF9lcnJvcigid3JpdGV2IEJhZCIpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4g
PiArDQo+ID4gKwloY2ktPm51bV9jbWRzLS07DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2
b2lkIHNlbmRfcGFja2V0KHN0cnVjdCBidF9oY2kgKmhjaSwgdWludDE2X3QgaGFuZGxlLCB1aW50
OF90IGZsYWdzLA0KPiA+ICsJCQkJCQl2b2lkICpkYXRhLCB1aW50OF90IHNpemUpDQo+ID4gK3sN
Cj4gPiArCXVpbnQ4X3QgdHlwZSA9IEJUX0g0X0FDTF9QS1Q7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNp
X2FjbF9oZHIgaGRyOw0KPiA+ICsJc3RydWN0IGlvdmVjIGlvdlszXTsNCj4gPiArCWludCBmZCwg
aW92Y250Ow0KPiA+ICsNCj4gPiArCWhkci5oYW5kbGUgPSBMX0NQVV9UT19MRTE2KGZsYWdzIDw8
IDEyIHwgaGFuZGxlKTsNCj4gPiArCWhkci5kbGVuID0gTF9DUFVfVE9fTEUxNihzaXplKTsNCj4g
PiArDQo+ID4gKwlpb3ZbMF0uaW92X2Jhc2UgPSAmdHlwZTsNCj4gPiArCWlvdlswXS5pb3ZfbGVu
ICA9IDE7DQo+ID4gKwlpb3ZbMV0uaW92X2Jhc2UgPSAmaGRyOw0KPiA+ICsJaW92WzFdLmlvdl9s
ZW4gID0gc2l6ZW9mKGhkcik7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUgPiAwKSB7DQo+ID4gKwkJ
aW92WzJdLmlvdl9iYXNlID0gZGF0YTsNCj4gPiArCQlpb3ZbMl0uaW92X2xlbiAgPSBzaXplOw0K
PiA+ICsJCWlvdmNudCA9IDM7DQo+ID4gKwl9IGVsc2UNCj4gPiArCQlpb3ZjbnQgPSAyOw0KPiA+
ICsNCj4gPiArCWZkID0gbF9pb19nZXRfZmQoaGNpLT5pbyk7DQo+ID4gKwlpZiAoZmQgPCAwKSB7
DQo+ID4gKwkJbF9lcnJvcigiaGNpLT5pbyBCYWQiKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9
DQo+ID4gKw0KPiA+ICsJaWYgKHdyaXRldihmZCwgaW92LCBpb3ZjbnQpIDwgMCkgew0KPiA+ICsJ
CWxfZXJyb3IoIndyaXRldiBCYWQiKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0K
PiA+ICsJaGNpLT5udW1fcGt0cy0tOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBp
b193cml0ZV9jYWxsYmFjayhzdHJ1Y3QgbF9pbyAqaW8sIHZvaWQgKnVzZXJfZGF0YSkNCj4gPiAr
ew0KPiA+ICsJc3RydWN0IGJ0X2hjaSAqaGNpID0gdXNlcl9kYXRhOw0KPiA+ICsJc3RydWN0IGNt
ZCAqY21kOw0KPiA+ICsNCj4gPiArCWlmIChoY2ktPm51bV9jbWRzID4gMCkNCj4gPiArCQljbWQg
PSBsX3F1ZXVlX3BvcF9oZWFkKGhjaS0+Y21kX3F1ZXVlKTsNCj4gPiArCWVsc2UNCj4gPiArCQlj
bWQgPSBOVUxMOw0KPiA+ICsNCj4gPiArCWlmIChjbWQpIHsNCj4gPiArCQlzZW5kX2NvbW1hbmQo
aGNpLCBjbWQtPm9wY29kZSwgY21kLT5kYXRhLCBjbWQtPnNpemUpOw0KPiA+ICsJCWxfcXVldWVf
cHVzaF90YWlsKGhjaS0+cnNwX3F1ZXVlLCBjbWQpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlz
dHJ1Y3QgcGt0ICpwa3Q7DQo+ID4gKw0KPiA+ICsJCWlmIChoY2ktPm51bV9wa3RzIDwgMSkNCj4g
PiArCQkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCQlwa3QgPSBsX3F1ZXVlX3BvcF9oZWFkKGhj
aS0+cGt0X3F1ZXVlKTsNCj4gPiArCQlpZiAocGt0KSB7DQo+ID4gKwkJCXNlbmRfcGFja2V0KGhj
aSwgcGt0LT5oYW5kbGUsIHBrdC0+ZmxhZ3MsDQo+ID4gKwkJCQkJCQlwa3QtPmRhdGEsIHBrdC0+
c2l6ZSk7DQo+ID4gKwkJCXBrdF9mcmVlKHBrdCk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsN
Cj4gPiArCWlmICghbF9xdWV1ZV9pc2VtcHR5KGhjaS0+cGt0X3F1ZXVlKSkNCj4gPiArCQlyZXR1
cm4gdHJ1ZTsNCj4gPiArDQo+ID4gK2RvbmU6DQo+ID4gKwloY2ktPndyaXRlcl9hY3RpdmUgPSBm
YWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0
YXRpYyB2b2lkIHdha2V1cF93cml0ZXIoc3RydWN0IGJ0X2hjaSAqaGNpKQ0KPiA+ICt7DQo+ID4g
KwlpZiAoaGNpLT53cml0ZXJfYWN0aXZlKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlp
ZiAobF9xdWV1ZV9pc2VtcHR5KGhjaS0+Y21kX3F1ZXVlKSAmJiBsX3F1ZXVlX2lzZW1wdHkoaGNp
LT5wa3RfcXVldWUpKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoIWxfaW9fc2V0
X3dyaXRlX2hhbmRsZXIoaGNpLT5pbywgaW9fd3JpdGVfY2FsbGJhY2ssIGhjaSwgTlVMTCkpDQo+
ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWhjaS0+d3JpdGVyX2FjdGl2ZSA9IHRydWU7DQo+
ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIG1hdGNoX2NtZF9vcGNvZGUoY29uc3Qgdm9p
ZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IGNtZCAqY21k
ID0gYTsNCj4gPiArCXVpbnQxNl90IG9wY29kZSA9IExfUFRSX1RPX1VJTlQoYik7DQo+ID4gKw0K
PiA+ICsJcmV0dXJuIGNtZC0+b3Bjb2RlID09IG9wY29kZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr
c3RhdGljIHZvaWQgcHJvY2Vzc19yZXNwb25zZShzdHJ1Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90
IG9wY29kZSwNCj4gPiArCQkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkNCj4gPiAr
ew0KPiA+ICsJc3RydWN0IGNtZCAqY21kOw0KPiA+ICsNCj4gPiArCWlmIChvcGNvZGUgPT0gQlRf
SENJX0NNRF9OT1ApDQo+ID4gKwkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCWNtZCA9IGxfcXVl
dWVfcmVtb3ZlX2lmKGhjaS0+cnNwX3F1ZXVlLCBtYXRjaF9jbWRfb3Bjb2RlLA0KPiA+ICsJCQkJ
CQlMX1VJTlRfVE9fUFRSKG9wY29kZSkpOw0KPiA+ICsJaWYgKCFjbWQpDQo+ID4gKwkJZ290byBk
b25lOw0KPiA+ICsNCj4gPiArCWlmIChjbWQtPmNhbGxiYWNrKQ0KPiA+ICsJCWNtZC0+Y2FsbGJh
Y2soZGF0YSwgc2l6ZSwgY21kLT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWNtZF9mcmVlKGNt
ZCk7DQo+ID4gKw0KPiA+ICtkb25lOg0KPiA+ICsJd2FrZXVwX3dyaXRlcihoY2kpOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwcm9jZXNzX25vdGlmeSh2b2lkICpkYXRhLCB2b2lk
ICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lfZXZ0X2hkciAqaGRyID0g
dXNlcl9kYXRhOw0KPiA+ICsJc3RydWN0IGV2dCAqZXZ0ID0gZGF0YTsNCj4gPiArDQo+ID4gKwlp
ZiAoZXZ0LT5ldmVudCA9PSBoZHItPmV2dCkNCj4gPiArCQlldnQtPmNhbGxiYWNrKHVzZXJfZGF0
YSArIHNpemVvZihzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIpLA0KPiA+ICsJCQkJCQloZHItPnBsZW4s
IGV2dC0+dXNlcl9kYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHJvY2Vz
c19ldmVudChzdHJ1Y3QgYnRfaGNpICpoY2ksIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXpl
KQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIgKmhkciA9IGRhdGE7
DQo+ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9jbWRfY29tcGxldGUgKmNjOw0KPiA+ICsJ
Y29uc3Qgc3RydWN0IGJ0X2hjaV9ldnRfY21kX3N0YXR1cyAqY3M7DQo+ID4gKwljb25zdCBzdHJ1
Y3QgYnRfaGNpX2V2dF9udW1fY29tcGxldGVkX3BhY2tldHMgKmNwOw0KPiA+ICsNCj4gPiArCWlm
IChzaXplIDwgc2l6ZW9mKHN0cnVjdCBidF9oY2lfZXZ0X2hkcikpDQo+ID4gKwkJcmV0dXJuOw0K
PiA+ICsNCj4gPiArCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBidF9oY2lfZXZ0X2hkcik7DQo+ID4g
KwlzaXplIC09IHNpemVvZihzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIpOw0KPiA+ICsNCj4gPiArCWlm
IChoZHItPnBsZW4gIT0gc2l6ZSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJc3dpdGNo
IChoZHItPmV2dCkgew0KPiA+ICsJY2FzZSBCVF9IQ0lfRVZUX0NNRF9DT01QTEVURToNCj4gPiAr
CQlpZiAoc2l6ZSA8IHNpemVvZigqY2MpKQ0KPiA+ICsJCQlyZXR1cm47DQo+ID4gKwkJY2MgPSBk
YXRhOw0KPiA+ICsJCWhjaS0+bnVtX2NtZHMgPSBjYy0+bmNtZDsNCj4gPiArCQlwcm9jZXNzX3Jl
c3BvbnNlKGhjaSwgTF9MRTE2X1RPX0NQVShjYy0+b3Bjb2RlKSwNCj4gPiArCQkJCQkJZGF0YSAr
IHNpemVvZigqY2MpLA0KPiA+ICsJCQkJCQlzaXplIC0gc2l6ZW9mKCpjYykpOw0KPiA+ICsJCWJy
ZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgQlRfSENJX0VWVF9DTURfU1RBVFVTOg0KPiA+ICsJCWlm
IChzaXplIDwgc2l6ZW9mKCpjcykpDQo+ID4gKwkJCXJldHVybjsNCj4gPiArCQljcyA9IGRhdGE7
DQo+ID4gKwkJaGNpLT5udW1fY21kcyA9IGNzLT5uY21kOw0KPiA+ICsJCXByb2Nlc3NfcmVzcG9u
c2UoaGNpLCBMX0xFMTZfVE9fQ1BVKGNzLT5vcGNvZGUpLA0KPiA+ICsJCQkJCQkJJmNzLT5zdGF0
dXMsIDEpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgQlRfSENJX0VWVF9OVU1f
Q09NUExFVEVEX1BBQ0tFVFM6DQo+ID4gKwkJaWYgKHNpemUgPCBzaXplb2YoKmNwKSkNCj4gPiAr
CQkJcmV0dXJuOw0KPiA+ICsJCWNwID0gZGF0YTsNCj4gPiArCQlsX2RlYnVnKCJCVF9IQ0lfRVZU
X05VTV9DT01QTEVURURfUEFDS0VUUzolZCIsIGNwLT5jb3VudCk7DQo+ID4gKwkJLyogSWdub3Jp
bmcgaGFuZGxlIGluZm9ybWF0aW9uIGZvciBub3cgKi8NCj4gPiArCQloY2ktPm51bV9wa3RzID0g
Y3AtPmNvdW50Ow0KPiA+ICsJCXdha2V1cF93cml0ZXIoaGNpKTsNCj4gPiArCQlicmVhazsNCj4g
PiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWxfcXVldWVfZm9yZWFjaChoY2ktPmV2dF9saXN0
LCBwcm9jZXNzX25vdGlmeSwgKHZvaWQgKikgaGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0N
Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHJvY2Vzc19hY2woc3RydWN0IGJ0X2hj
aSAqaGNpLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkNCj4gPiArew0KPiA+ICsJY29u
c3Qgc3RydWN0IGJ0X2hjaV9hY2xfaGRyICpoZHIgPSBkYXRhOw0KPiA+ICsJdWludDE2X3QgaGFu
ZGxlOw0KPiA+ICsNCj4gPiArCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBidF9oY2lfYWNsX2hk
cikpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBi
dF9oY2lfYWNsX2hkcik7DQo+ID4gKwlzaXplIC09IHNpemVvZihzdHJ1Y3QgYnRfaGNpX2FjbF9o
ZHIpOw0KPiA+ICsNCj4gPiArCWlmIChMX0xFMTZfVE9fQ1BVKGhkci0+ZGxlbikgIT0gc2l6ZSkN
Cj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaGFuZGxlID0gTF9MRTE2X1RPX0NQVShoZHIt
PmhhbmRsZSk7DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+cmVjZWl2ZV9jYWxsYmFjaykNCj4gPiAr
CQloY2ktPnJlY2VpdmVfY2FsbGJhY2soaGFuZGxlICYgMHgwZmZmLCBoYW5kbGUgPj4gMTIsDQo+
ID4gKwkJCQkJZGF0YSwgc2l6ZSwgaGNpLT5yZWNlaXZlX2RhdGEpOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtzdGF0aWMgYm9vbCBpb19yZWFkX2NhbGxiYWNrKHN0cnVjdCBsX2lvICppbywgdm9pZCAq
dXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpICpoY2kgPSB1c2VyX2RhdGE7
DQo+ID4gKwl1aW50OF90IGJ1Zls1MTJdOw0KPiA+ICsJc3NpemVfdCBsZW47DQo+ID4gKwlpbnQg
ZmQ7DQo+ID4gKw0KPiA+ICsJZmQgPSBsX2lvX2dldF9mZChoY2ktPmlvKTsNCj4gPiArCWlmIChm
ZCA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmIChoY2ktPmlzX3N0
cmVhbSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJbGVuID0gcmVhZChmZCwg
YnVmLCBzaXplb2YoYnVmKSk7DQo+ID4gKwlpZiAobGVuIDwgMCkNCj4gPiArCQlyZXR1cm4gZmFs
c2U7DQo+ID4gKw0KPiA+ICsJaWYgKGxlbiA8IDEpDQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4g
Kw0KPiA+ICsJc3dpdGNoIChidWZbMF0pIHsNCj4gPiArCWNhc2UgQlRfSDRfRVZUX1BLVDoNCj4g
PiArCQlwcm9jZXNzX2V2ZW50KGhjaSwgYnVmICsgMSwgbGVuIC0gMSk7DQo+ID4gKwkJYnJlYWs7
DQo+ID4gKwljYXNlIEJUX0g0X0FDTF9QS1Q6DQo+ID4gKwkJcHJvY2Vzc19hY2woaGNpLCBidWYg
KyAxLCBsZW4gLSAxKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJbF9p
bmZvKCIlMi4yeC1SWGVkIiwgYnVmWzBdKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g
dHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBidF9oY2kgKmNyZWF0ZV9o
Y2koaW50IGZkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpICpoY2k7DQo+ID4gKw0KPiA+
ICsJaWYgKGZkIDwgMCkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKwloY2kgPSBs
X25ldyhzdHJ1Y3QgYnRfaGNpLCAxKTsNCj4gPiArDQo+ID4gKwloY2ktPmlvID0gbF9pb19uZXco
ZmQpOw0KPiA+ICsNCj4gPiArCWhjaS0+aXNfc3RyZWFtID0gdHJ1ZTsNCj4gPiArCWhjaS0+d3Jp
dGVyX2FjdGl2ZSA9IGZhbHNlOw0KPiA+ICsJaGNpLT5udW1fY21kcyA9IDE7DQo+ID4gKwloY2kt
Pm51bV9wa3RzID0gMTsNCj4gPiArCWhjaS0+bmV4dF9jbWRfaWQgPSAxOw0KPiA+ICsJaGNpLT5u
ZXh0X2V2dF9pZCA9IDE7DQo+ID4gKw0KPiA+ICsJaGNpLT5jbWRfcXVldWUgPSBsX3F1ZXVlX25l
dygpOw0KPiA+ICsJaGNpLT5yc3BfcXVldWUgPSBsX3F1ZXVlX25ldygpOw0KPiA+ICsJaGNpLT5l
dnRfbGlzdCA9IGxfcXVldWVfbmV3KCk7DQo+ID4gKwloY2ktPnBrdF9xdWV1ZSA9IGxfcXVldWVf
bmV3KCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFsX2lvX3NldF9yZWFkX2hhbmRsZXIoaGNpLT5pbywg
aW9fcmVhZF9jYWxsYmFjaywgaGNpLCBOVUxMKSkgew0KPiA+ICsJCWxfcXVldWVfZGVzdHJveSho
Y2ktPnBrdF9xdWV1ZSwgTlVMTCk7DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGhjaS0+ZXZ0X2xp
c3QsIE5VTEwpOw0KPiA+ICsJCWxfcXVldWVfZGVzdHJveShoY2ktPnJzcF9xdWV1ZSwgTlVMTCk7
DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGhjaS0+Y21kX3F1ZXVlLCBOVUxMKTsNCj4gPiArCQls
X2lvX2Rlc3Ryb3koaGNpLT5pbyk7DQo+ID4gKwkJbF9mcmVlKGhjaSk7DQo+ID4gKwkJcmV0dXJu
IE5VTEw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGJ0X2hjaV9yZWYoaGNpKTsNCj4g
PiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IGJ0X2hjaSAqYnRfaGNpX25ldyhpbnQgZmQpDQo+ID4g
K3sNCj4gPiArCXN0cnVjdCBidF9oY2kgKmhjaTsNCj4gPiArDQo+ID4gKwloY2kgPSBjcmVhdGVf
aGNpKGZkKTsNCj4gPiArCWlmICghaGNpKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsNCj4g
PiArCXJldHVybiBoY2k7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY3JlYXRlX3Nv
Y2tldCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgY2hhbm5lbCkNCj4gPiArew0KPiA+ICsJc3Ry
dWN0IHNvY2thZGRyX2hjaSBhZGRyOw0KPiA+ICsJaW50IGZkOw0KPiA+ICsNCj4gPiArCWZkID0g
c29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMgfCBTT0NLX05PTkJM
T0NLLA0KPiA+ICsJCQkJCQkJCUJUUFJPVE9fSENJKTsNCj4gPiArCWlmIChmZCA8IDApDQo+ID4g
KwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIp
KTsNCj4gPiArCWFkZHIuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsNCj4gPiArCWFkZHIuaGNp
X2RldiA9IGluZGV4Ow0KPiA+ICsJYWRkci5oY2lfY2hhbm5lbCA9IGNoYW5uZWw7DQo+ID4gKw0K
PiA+ICsJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRy
KSkgPCAwKSB7DQo+ID4gKwkJY2xvc2UoZmQpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0N
Cj4gPiArDQo+ID4gKwlyZXR1cm4gZmQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCBidF9o
Y2kgKmJ0X2hjaV9uZXdfdXNlcl9jaGFubmVsKHVpbnQxNl90IGluZGV4KQ0KPiA+ICt7DQo+ID4g
KwlzdHJ1Y3QgYnRfaGNpICpoY2k7DQo+ID4gKwlpbnQgZmQ7DQo+ID4gKw0KPiA+ICsJZmQgPSBj
cmVhdGVfc29ja2V0KGluZGV4LCBIQ0lfQ0hBTk5FTF9VU0VSKTsNCj4gPiArCWlmIChmZCA8IDAp
DQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJaGNpID0gY3JlYXRlX2hjaShmZCk7
DQo+ID4gKwlpZiAoIWhjaSkgew0KPiA+ICsJCWNsb3NlKGZkKTsNCj4gPiArCQlyZXR1cm4gTlVM
TDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwloY2ktPmlzX3N0cmVhbSA9IGZhbHNlOw0KPiA+ICsN
Cj4gPiArCWJ0X2hjaV9zZXRfY2xvc2Vfb25fdW5yZWYoaGNpLCB0cnVlKTsNCj4gPiArDQo+ID4g
KwlyZXR1cm4gaGNpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYnRfaGNpICpidF9oY2lf
cmVmKHN0cnVjdCBidF9oY2kgKmhjaSkNCj4gPiArew0KPiA+ICsJaWYgKCFoY2kpDQo+ID4gKwkJ
cmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmhjaS0+cmVm
X2NvdW50LCAxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaGNpOw0KPiA+ICt9DQo+ID4gKw0KPiA+
ICt2b2lkIGJ0X2hjaV91bnJlZihzdHJ1Y3QgYnRfaGNpICpoY2kpDQo+ID4gK3sNCj4gPiArCWlm
ICghaGNpKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoX19zeW5jX3N1Yl9hbmRf
ZmV0Y2goJmhjaS0+cmVmX2NvdW50LCAxKSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJ
aWYgKGhjaS0+cmVjZWl2ZV9kZXN0cm95KQ0KPiA+ICsJCWhjaS0+cmVjZWl2ZV9kZXN0cm95KGhj
aS0+cmVjZWl2ZV9kYXRhKTsNCj4gPiArDQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3koaGNpLT5wa3Rf
cXVldWUsIHBrdF9mcmVlKTsNCj4gPiArCWxfcXVldWVfZGVzdHJveShoY2ktPmV2dF9saXN0LCBl
dnRfZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3koaGNpLT5jbWRfcXVldWUsIGNtZF9mcmVl
KTsNCj4gPiArCWxfcXVldWVfZGVzdHJveShoY2ktPnJzcF9xdWV1ZSwgY21kX2ZyZWUpOw0KPiA+
ICsNCj4gPiArCWxfaW9fZGVzdHJveShoY2ktPmlvKTsNCj4gPiArDQo+ID4gKwlsX2ZyZWUoaGNp
KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBidF9oY2lfc2V0X2Nsb3NlX29uX3VucmVmKHN0
cnVjdCBidF9oY2kgKmhjaSwgYm9vbCBkb19jbG9zZSkNCj4gPiArew0KPiA+ICsJaWYgKCFoY2kp
DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBsX2lvX3NldF9jbG9z
ZV9vbl9kZXN0cm95KGhjaS0+aW8sIGRvX2Nsb3NlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdW5z
aWduZWQgaW50IGJ0X2hjaV9zZW5kKHN0cnVjdCBidF9oY2kgKmhjaSwgdWludDE2X3Qgb3Bjb2Rl
LA0KPiA+ICsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgdWludDhfdCBzaXplLA0KPiA+ICsJCQkJYnRf
aGNpX2NhbGxiYWNrX2Z1bmNfdCBjYWxsYmFjaywNCj4gPiArCQkJCXZvaWQgKnVzZXJfZGF0YSwg
YnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjbWQg
KmNtZDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+
ID4gKwljbWQgPSBsX25ldyhzdHJ1Y3QgY21kLCAxKTsNCj4gPiArDQo+ID4gKwljbWQtPm9wY29k
ZSA9IG9wY29kZTsNCj4gPiArCWNtZC0+c2l6ZSA9IHNpemU7DQo+ID4gKw0KPiA+ICsJaWYgKGNt
ZC0+c2l6ZSA+IDApDQo+ID4gKwkJY21kLT5kYXRhID0gbF9tZW1kdXAoZGF0YSwgY21kLT5zaXpl
KTsNCj4gPiArDQo+ID4gKwlpZiAoaGNpLT5uZXh0X2NtZF9pZCA8IDEpDQo+ID4gKwkJaGNpLT5u
ZXh0X2NtZF9pZCA9IDE7DQo+ID4gKw0KPiA+ICsJY21kLT5pZCA9IGhjaS0+bmV4dF9jbWRfaWQr
KzsNCj4gPiArDQo+ID4gKwljbWQtPmNhbGxiYWNrID0gY2FsbGJhY2s7DQo+ID4gKwljbWQtPmRl
c3Ryb3kgPSBkZXN0cm95Ow0KPiA+ICsJY21kLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7DQo+ID4g
Kw0KPiA+ICsJaWYgKCFsX3F1ZXVlX3B1c2hfdGFpbChoY2ktPmNtZF9xdWV1ZSwgY21kKSkgew0K
PiA+ICsJCWxfZnJlZShjbWQtPmRhdGEpOw0KPiA+ICsJCWxfZnJlZShjbWQpOw0KPiA+ICsJCXJl
dHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXdha2V1cF93cml0ZXIoaGNpKTsNCj4gPiAr
DQo+ID4gKwlyZXR1cm4gY21kLT5pZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wg
bWF0Y2hfY21kX2lkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpDQo+ID4gK3sNCj4gPiAr
CWNvbnN0IHN0cnVjdCBjbWQgKmNtZCA9IGE7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaWQgPSBMX1BU
Ul9UT19VSU5UKGIpOw0KPiA+ICsNCj4gPiArCXJldHVybiBjbWQtPmlkID09IGlkOw0KPiA+ICt9
DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV9jYW5jZWwoc3RydWN0IGJ0X2hjaSAqaGNpLCB1bnNp
Z25lZCBpbnQgaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjbWQgKmNtZDsNCj4gPiArDQo+ID4g
KwlpZiAoIWhjaSB8fCAhaWQpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWNt
ZCA9IGxfcXVldWVfcmVtb3ZlX2lmKGhjaS0+Y21kX3F1ZXVlLCBtYXRjaF9jbWRfaWQsDQo+ID4g
KwkJCQkJCUxfVUlOVF9UT19QVFIoaWQpKTsNCj4gPiArCWlmICghY21kKSB7DQo+ID4gKwkJY21k
ID0gbF9xdWV1ZV9yZW1vdmVfaWYoaGNpLT5yc3BfcXVldWUsIG1hdGNoX2NtZF9pZCwNCj4gPiAr
CQkJCQkJCUxfVUlOVF9UT19QVFIoaWQpKTsNCj4gPiArCQlpZiAoIWNtZCkNCj4gPiArCQkJcmV0
dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNtZF9mcmVlKGNtZCk7DQo+ID4gKw0K
PiA+ICsJd2FrZXVwX3dyaXRlcihoY2kpOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+
ICt9DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV9mbHVzaChzdHJ1Y3QgYnRfaGNpICpoY2kpDQo+
ID4gK3sNCj4gPiArCWlmICghaGNpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g
KwlpZiAoaGNpLT53cml0ZXJfYWN0aXZlKSB7DQo+ID4gKwkJbF9pb19zZXRfd3JpdGVfaGFuZGxl
cihoY2ktPmlvLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArCQloY2ktPndyaXRlcl9hY3RpdmUg
PSBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlsX3F1ZXVlX2NsZWFyKGhjaS0+Y21kX3F1
ZXVlLCBjbWRfZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2NsZWFyKGhjaS0+cnNwX3F1ZXVlLCBjbWRf
ZnJlZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3Vu
c2lnbmVkIGludCBidF9oY2lfcmVnaXN0ZXIoc3RydWN0IGJ0X2hjaSAqaGNpLCB1aW50OF90IGV2
ZW50LA0KPiA+ICsJCQkJYnRfaGNpX2NhbGxiYWNrX2Z1bmNfdCBjYWxsYmFjaywNCj4gPiArCQkJ
CXZvaWQgKnVzZXJfZGF0YSwgYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpDQo+ID4gK3sN
Cj4gPiArCXN0cnVjdCBldnQgKmV2dDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQly
ZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlldnQgPSBsX25ldyhzdHJ1Y3QgZXZ0LCAxKTsNCj4gPiAr
DQo+ID4gKwlldnQtPmV2ZW50ID0gZXZlbnQ7DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+bmV4dF9l
dnRfaWQgPCAxKQ0KPiA+ICsJCWhjaS0+bmV4dF9ldnRfaWQgPSAxOw0KPiA+ICsNCj4gPiArCWV2
dC0+aWQgPSBoY2ktPm5leHRfZXZ0X2lkKys7DQo+ID4gKw0KPiA+ICsJZXZ0LT5jYWxsYmFjayA9
IGNhbGxiYWNrOw0KPiA+ICsJZXZ0LT5kZXN0cm95ID0gZGVzdHJveTsNCj4gPiArCWV2dC0+dXNl
cl9kYXRhID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiArCWlmICghbF9xdWV1ZV9wdXNoX3RhaWwo
aGNpLT5ldnRfbGlzdCwgZXZ0KSkgew0KPiA+ICsJCWxfZnJlZShldnQpOw0KPiA+ICsJCXJldHVy
biAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBldnQtPmlkOw0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtzdGF0aWMgYm9vbCBtYXRjaF9ldnRfaWQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p
ZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IGV2dCAqZXZ0ID0gYTsNCj4gPiArCXVu
c2lnbmVkIGludCBpZCA9IExfUFRSX1RPX1VJTlQoYik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGV2
dC0+aWQgPT0gaWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgYnRfaGNpX3VucmVnaXN0ZXIo
c3RydWN0IGJ0X2hjaSAqaGNpLCB1bnNpZ25lZCBpbnQgaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVj
dCBldnQgKmV2dDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSB8fCAhaWQpDQo+ID4gKwkJcmV0dXJu
IGZhbHNlOw0KPiA+ICsNCj4gPiArCWV2dCA9IGxfcXVldWVfcmVtb3ZlX2lmKGhjaS0+ZXZ0X2xp
c3QsIG1hdGNoX2V2dF9pZCwNCj4gPiArCQkJCQkJTF9VSU5UX1RPX1BUUihpZCkpOw0KPiA+ICsJ
aWYgKCFldnQpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWV2dF9mcmVlKGV2
dCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wg
YnRfaGNpX3JlY2VpdmUoc3RydWN0IGJ0X2hjaSAqaGNpLCBidF9oY2lfcmVjZWl2ZV9mdW5jX3Qg
Y2FsbGJhY2ssDQo+ID4gKwkJCQl2b2lkICp1c2VyX2RhdGEsIGJ0X2hjaV9kZXN0cm95X2Z1bmNf
dCBkZXN0cm95KQ0KPiA+ICt7DQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7
DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+cmVjZWl2ZV9kZXN0cm95KQ0KPiA+ICsJCWhjaS0+cmVj
ZWl2ZV9kZXN0cm95KGhjaS0+cmVjZWl2ZV9kYXRhKTsNCj4gPiArDQo+ID4gKwloY2ktPnJlY2Vp
dmVfY2FsbGJhY2sgPSBjYWxsYmFjazsNCj4gPiArCWhjaS0+cmVjZWl2ZV9kZXN0cm95ID0gZGVz
dHJveTsNCj4gPiArCWhjaS0+cmVjZWl2ZV9kYXRhID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiAr
CXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV93cml0ZShzdHJ1
Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90IGhhbmRsZSwgdWludDhfdCBmbGFncywNCj4gPiArCQkJ
CWNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IHNpemUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBw
a3QgKnBrdDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+
ID4gKw0KPiA+ICsJcGt0ID0gbF9uZXcoc3RydWN0IHBrdCwgMSk7DQo+ID4gKw0KPiA+ICsJcGt0
LT5oYW5kbGUgPSBoYW5kbGU7DQo+ID4gKwlwa3QtPmZsYWdzID0gZmxhZ3M7DQo+ID4gKwlwa3Qt
PnNpemUgPSBzaXplOw0KPiA+ICsNCj4gPiArCWlmIChwa3QtPnNpemUgPiAwKQ0KPiA+ICsJCXBr
dC0+ZGF0YSA9IGxfbWVtZHVwKGRhdGEsIHBrdC0+c2l6ZSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFs
X3F1ZXVlX3B1c2hfdGFpbChoY2ktPnBrdF9xdWV1ZSwgcGt0KSkgew0KPiA+ICsJCWxfZnJlZShw
a3QtPmRhdGEpOw0KPiA+ICsJCWxfZnJlZShwa3QpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4g
PiArCX0NCj4gPiArDQo+ID4gKwl3YWtldXBfd3JpdGVyKGhjaSk7DQo+ID4gKw0KPiA+ICsJcmV0
dXJuIHRydWU7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvbWVzaC9tZXNoLWlvLWdlbmVyaWMu
YyBiL21lc2gvbWVzaC1pby1nZW5lcmljLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+
IGluZGV4IDAwMDAwMDAwMC4uN2E5NzRjZmYzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi
L21lc2gvbWVzaC1pby1nZW5lcmljLmMNCj4gPiBAQCAtMCwwICsxLDY2MCBAQA0KPiA+ICsvKg0K
PiA+ICsgKg0KPiA+ICsgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExp
bnV4DQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTggIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gPiArICoN
Cj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQo+ID4g
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiA+
ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZmRlZiBIQVZFX0NPTkZJR19IDQo+ID4gKyNp
bmNsdWRlIDxjb25maWcuaD4NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3lz
L3RpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGVsbC9lbGwuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRl
ICJsaWIvYmx1ZXRvb3RoLmgiDQo+ID4gKyNpbmNsdWRlICJsaWIvaGNpLmgiDQo+ID4gKw0KPiA+
ICsjaW5jbHVkZSAibW9uaXRvci9idC5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvaGNp
LmgiDQo+ID4gKyNpbmNsdWRlICJtZXNoL2Rpc3BsYXkuaCINCj4gPiArI2luY2x1ZGUgIm1lc2gv
bWVzaC1pby5oIg0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLWlvLWFwaS5oIg0KPiA+ICsNCj4g
PiArI2luY2x1ZGUgIm1lc2gvbWVzaC1pby1nZW5lcmljLmgiDQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg
bWVzaF9pb19wcml2YXRlIHsNCj4gPiArCXVpbnQxNl90IGluZGV4Ow0KPiA+ICsJc3RydWN0IGJ0
X2hjaSAqaGNpOw0KPiA+ICsJc3RydWN0IGxfdGltZW91dCAqdHhfdGltZW91dDsNCj4gPiArCXN0
cnVjdCBsX3F1ZXVlICpyeF9yZWdzOw0KPiA+ICsJc3RydWN0IGxfcXVldWUgKnR4X3BrdHM7DQo+
ID4gKwl1aW50OF90IGZpbHRlcnNbM107IC8qIFNpbXBsZSBmaWx0ZXJpbmcgb24gQUQgdHlwZSBv
bmx5ICovDQo+ID4gKwlib29sIHNlbmRpbmc7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4g
PiArCXVpbnQxNl90IGludGVydmFsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHB2dF9y
eF9yZWcgew0KPiA+ICsJdWludDhfdCBmaWx0ZXJfaWQ7DQo+ID4gKwltZXNoX2lvX3JlY3ZfZnVu
Y190IGNiOw0KPiA+ICsJdm9pZCAqdXNlcl9kYXRhOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Ry
dWN0IHByb2Nlc3NfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlCQkqcHZ0Ow0K
PiA+ICsJY29uc3QgdWludDhfdAkJCSpkYXRhOw0KPiA+ICsJdWludDhfdAkJCQlsZW47DQo+ID4g
KwlzdHJ1Y3QgbWVzaF9pb19yZWN2X2luZm8JaW5mbzsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0
cnVjdCB0eF9wa3Qgew0KPiA+ICsJc3RydWN0IG1lc2hfaW9fc2VuZF9pbmZvCWluZm87DQo+ID4g
Kwlib29sCQkJCWRlbGV0ZTsNCj4gPiArCXVpbnQ4X3QJCQkJbGVuOw0KPiA+ICsJdWludDhfdAkJ
CQlwa3RbMzBdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHR4X3BhdHRlcm4gew0KPiA+
ICsJY29uc3QgdWludDhfdAkJCSpkYXRhOw0KPiA+ICsJdWludDhfdAkJCQlsZW47DQo+ID4gK307
DQo+ID4gKw0KPiA+ICtzdGF0aWMgdWludDMyX3QgZ2V0X2luc3RhbnQodm9pZCkNCj4gPiArew0K
PiA+ICsJc3RydWN0IHRpbWV2YWwgdG07DQo+ID4gKwl1aW50MzJfdCBpbnN0YW50Ow0KPiA+ICsN
Cj4gPiArCWdldHRpbWVvZmRheSgmdG0sIE5VTEwpOw0KPiA+ICsJaW5zdGFudCA9IHRtLnR2X3Nl
YyAqIDEwMDA7DQo+ID4gKwlpbnN0YW50ICs9IHRtLnR2X3VzZWMgLyAxMDAwOw0KPiA+ICsNCj4g
PiArCXJldHVybiBpbnN0YW50Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdWludDMyX3Qg
aW5zdGFudF9yZW1haW5pbmdfbXModWludDMyX3QgaW5zdGFudCkNCj4gPiArew0KPiA+ICsJaW5z
dGFudCAtPSBnZXRfaW5zdGFudCgpOw0KPiA+ICsJcmV0dXJuIGluc3RhbnQ7DQo+ID4gK30NCj4g
PiArDQo+ID4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfcnhfY2FsbGJhY2tzKHZvaWQgKnZfcngsIHZv
aWQgKnZfcmVnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHZ0X3J4X3JlZyAqcnhfcmVnID0gdl9y
eDsNCj4gPiArCXN0cnVjdCBwcm9jZXNzX2RhdGEgKnJ4ID0gdl9yZWc7DQo+ID4gKwl1aW50OF90
IGFkX3R5cGU7DQo+ID4gKw0KPiA+ICsJYWRfdHlwZSA9IHJ4LT5wdnQtPmZpbHRlcnNbcnhfcmVn
LT5maWx0ZXJfaWQgLSAxXTsNCj4gPiArDQo+ID4gKwlpZiAocngtPmRhdGFbMF0gPT0gYWRfdHlw
ZSAmJiByeF9yZWctPmNiKQ0KPiA+ICsJCXJ4X3JlZy0+Y2IocnhfcmVnLT51c2VyX2RhdGEsICZy
eC0+aW5mbywgcngtPmRhdGEsIHJ4LT5sZW4pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg
dm9pZCBwcm9jZXNzX3J4KHN0cnVjdCBtZXNoX2lvX3ByaXZhdGUgKnB2dCwgaW50OF90IHJzc2ks
DQo+ID4gKwkJCQkJdWludDMyX3QgaW5zdGFudCwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICpk
YXRhLCB1aW50OF90IGxlbikNCj4gPiArew0KPiA+ICsJc3RydWN0IHByb2Nlc3NfZGF0YSByeCA9
IHsNCj4gPiArCQkucHZ0ID0gcHZ0LA0KPiA+ICsJCS5kYXRhID0gZGF0YSwNCj4gPiArCQkubGVu
ID0gbGVuLA0KPiA+ICsJCS5pbmZvLmluc3RhbnQgPSBpbnN0YW50LA0KPiA+ICsJCS5pbmZvLmNo
YW4gPSA3LA0KPiA+ICsJCS5pbmZvLnJzc2kgPSByc3NpLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4g
KwlsX3F1ZXVlX2ZvcmVhY2gocHZ0LT5yeF9yZWdzLCBwcm9jZXNzX3J4X2NhbGxiYWNrcywgJnJ4
KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZXZlbnRfYWR2X3JlcG9ydChzdHJ1
Y3QgbWVzaF9pbyAqaW8sIGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplKQ0KPiA+ICt7DQo+
ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9sZV9hZHZfcmVwb3J0ICpldnQgPSBidWY7DQo+
ID4gKwljb25zdCB1aW50OF90ICphZHY7DQo+ID4gKwl1aW50MzJfdCBpbnN0YW50Ow0KPiA+ICsJ
dWludDhfdCBhZHZfbGVuOw0KPiA+ICsJdWludDE2X3QgbGVuID0gMDsNCj4gPiArCWludDhfdCBy
c3NpOw0KPiA+ICsNCj4gPiArCWlmIChldnQtPmV2ZW50X3R5cGUgIT0gMHgwMykNCj4gPiArCQly
ZXR1cm47DQo+ID4gKw0KPiA+ICsJaWYgKGV2dC0+YWRkcl90eXBlICE9IEJEQUREUl9MRV9QVUJM
SUMgJiYNCj4gPiArCQkJZXZ0LT5hZGRyX3R5cGUgIT0gQkRBRERSX0xFX1JBTkRPTSkNCj4gPiAr
CQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaW5zdGFudCA9IGdldF9pbnN0YW50KCk7DQo+ID4gKwlh
ZHYgPSBldnQtPmRhdGE7DQo+ID4gKwlhZHZfbGVuID0gZXZ0LT5kYXRhX2xlbjsNCj4gPiArDQo+
ID4gKwkvKiByc3NpIGlzIGp1c3QgYmV5b25kIGxhc3QgYnl0ZSBvZiBkYXRhICovDQo+ID4gKwly
c3NpID0gKGludDhfdCkgYWR2W2Fkdl9sZW5dOw0KPiA+ICsNCj4gPiArCXdoaWxlIChsZW4gPCBh
ZHZfbGVuIC0gMSkgew0KPiA+ICsJCXVpbnQ4X3QgZmllbGRfbGVuID0gYWR2WzBdOw0KPiA+ICsN
Cj4gPiArCQkvKiBDaGVjayBmb3IgdGhlIGVuZCBvZiBhZHZlcnRpc2luZyBkYXRhICovDQo+ID4g
KwkJaWYgKGZpZWxkX2xlbiA9PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJbGVu
ICs9IGZpZWxkX2xlbiArIDE7DQo+ID4gKw0KPiA+ICsJCS8qIERvIG5vdCBjb250aW51ZSBkYXRh
IHBhcnNpbmcgaWYgZ290IGluY29ycmVjdCBsZW5ndGggKi8NCj4gPiArCQlpZiAobGVuID4gYWR2
X2xlbikNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCS8qIFRPRE86IENyZWF0ZSBhbiBJ
bnN0YW50IHRvIHVzZSAqLw0KPiA+ICsJCXByb2Nlc3NfcngoaW8tPnB2dCwgcnNzaSwgaW5zdGFu
dCwgYWR2ICsgMSwgYWR2WzBdKTsNCj4gPiArDQo+ID4gKwkJYWR2ICs9IGZpZWxkX2xlbiArIDE7
DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGV2ZW50X2NhbGxiYWNr
KGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplLCB2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sN
Cj4gPiArCXVpbnQ4X3QgZXZlbnQgPSBsX2dldF91OChidWYpOw0KPiA+ICsJc3RydWN0IG1lc2hf
aW8gKmlvID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoZXZlbnQpIHsNCj4gPiAr
CWNhc2UgQlRfSENJX0VWVF9MRV9BRFZfUkVQT1JUOg0KPiA+ICsJCWV2ZW50X2Fkdl9yZXBvcnQo
aW8sIGJ1ZiArIDEsIHNpemUgLSAxKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZh
dWx0Og0KPiA+ICsJCWxfaW5mbygiT3RoZXIgTWV0YSBFdnQgLSAlZCIsIGV2ZW50KTsNCj4gPiAr
CX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgZGV2X2luaXQodWludDE2X3QgaW5k
ZXgsIHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+ICsJc3RydWN0IG1lc2hfaW9fcHJp
dmF0ZSAqdG1wOw0KPiA+ICsNCj4gPiArCWlmICghaW8gfHwgaW8tPnB2dCkNCj4gPiArCQlyZXR1
cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJdG1wID0gbF9uZXcoc3RydWN0IG1lc2hfaW9fcHJpdmF0
ZSwgMSk7DQo+ID4gKw0KPiA+ICsJaWYgKHRtcCA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiBmYWxz
ZTsNCj4gPiArDQo+ID4gKwl0bXAtPnJ4X3JlZ3MgPSBsX3F1ZXVlX25ldygpOw0KPiA+ICsJdG1w
LT50eF9wa3RzID0gbF9xdWV1ZV9uZXcoKTsNCj4gPiArCWlmICghdG1wLT5yeF9yZWdzIHx8ICF0
bXAtPnR4X3BrdHMpDQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsNCj4gPiArCXRtcC0+aGNpID0g
YnRfaGNpX25ld191c2VyX2NoYW5uZWwoaW5kZXgpOw0KPiA+ICsJaWYgKCF0bXAtPmhjaSkNCj4g
PiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3JlZ2lzdGVyKHRtcC0+aGNpLCBC
VF9IQ0lfRVZUX0xFX01FVEFfRVZFTlQsDQo+ID4gKwkJCQkJCWV2ZW50X2NhbGxiYWNrLCBpbywg
TlVMTCk7DQo+ID4gKw0KPiA+ICsJaW8tPnB2dCA9IHRtcDsNCj4gPiArCXJldHVybiB0cnVlOw0K
PiA+ICsNCj4gPiArZmFpbDoNCj4gPiArCWxfcXVldWVfZGVzdHJveSh0bXAtPnJ4X3JlZ3MsIGxf
ZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3kodG1wLT50eF9wa3RzLCBsX2ZyZWUpOw0KPiA+
ICsJbF9mcmVlKHRtcCk7DQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4g
K3N0YXRpYyBib29sIGRldl9kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+
ICsJc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0ID0gaW8tPnB2dDsNCj4gPiArDQo+ID4gKwlp
ZiAoIXB2dCkNCj4gPiArCQlyZXR1cm4gdHJ1ZTsNCj4gPiArDQo+ID4gKwlidF9oY2lfdW5yZWYo
cHZ0LT5oY2kpOw0KPiA+ICsJbF90aW1lb3V0X3JlbW92ZShwdnQtPnR4X3RpbWVvdXQpOw0KPiA+
ICsJbF9xdWV1ZV9kZXN0cm95KHB2dC0+cnhfcmVncywgbF9mcmVlKTsNCj4gPiArCWxfcXVldWVf
ZGVzdHJveShwdnQtPnR4X3BrdHMsIGxfZnJlZSk7DQo+ID4gKwlsX2ZyZWUocHZ0KTsNCj4gPiAr
CWlvLT5wdnQgPSBOVUxMOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtzdGF0aWMgYm9vbCBkZXZfY2FwcyhzdHJ1Y3QgbWVzaF9pbyAqaW8sIHN0cnVjdCBt
ZXNoX2lvX2NhcHMgKmNhcHMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUg
KnB2dCA9IGlvLT5wdnQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFwdnQgfHwgIWNhcHMpDQo+ID4gKwkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWNhcHMtPm1heF9udW1fZmlsdGVycyA9IHNpemVv
ZihwdnQtPmZpbHRlcnMpOw0KPiA+ICsJY2Fwcy0+d2luZG93X2FjY3VyYWN5ID0gNTA7DQo+ID4g
Kw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNl
bmRfY2FuY2VsX2RvbmUoY29uc3Qgdm9pZCAqYnVmLCB1aW50OF90IHNpemUsDQo+ID4gKwkJCQkJ
CQl2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUg
KnB2dCA9IHVzZXJfZGF0YTsNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9yYW5kb21f
YWRkcmVzcyBjbWQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFwdnQpDQo+ID4gKwkJcmV0dXJuOw0KPiA+
ICsNCj4gPiArCXB2dC0+c2VuZGluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIEF0IGVuZCBv
ZiBhbnkgYnVyc3Qgb2YgQURWcywgY2hhbmdlIHJhbmRvbSBhZGRyZXNzICovDQo+ID4gKwlsX2dl
dHJhbmRvbShjbWQuYWRkciwgNik7DQo+ID4gKwljbWQuYWRkcls1XSB8PSAweGMwOw0KPiA+ICsJ
YnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX1JBTkRPTV9BRERSRVNTLA0K
PiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICt9DQo+
ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzZW5kX2NhbmNlbChzdHJ1Y3QgbWVzaF9pb19wcml2YXRl
ICpwdnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9hZHZfZW5hYmxl
IGNtZDsNCj4gPiArDQo+ID4gKwlpZiAoIXB2dCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+
ICsJaWYgKCFwdnQtPnNlbmRpbmcpIHsNCj4gPiArCQlzZW5kX2NhbmNlbF9kb25lKE5VTEwsIDAs
IHB2dCk7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNtZC5lbmFibGUg
PSAweDAwOwkvKiBEaXNhYmxlIGFkdmVydGlzaW5nICovDQo+ID4gKwlidF9oY2lfc2VuZChwdnQt
PmhjaSwgQlRfSENJX0NNRF9MRV9TRVRfQURWX0VOQUJMRSwNCj4gPiArCQkJCSZjbWQsIHNpemVv
ZihjbWQpLA0KPiA+ICsJCQkJc2VuZF9jYW5jZWxfZG9uZSwgcHZ0LCBOVUxMKTsNCj4gPiArfQ0K
PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc2V0X3NlbmRfYWR2X2VuYWJsZShjb25zdCB2b2lkICpi
dWYsIHVpbnQ4X3Qgc2l6ZSwNCj4gPiArCQkJCQkJCXZvaWQgKnVzZXJfZGF0YSkNCj4gPiArew0K
PiA+ICsJc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0ID0gdXNlcl9kYXRhOw0KPiA+ICsJc3Ry
dWN0IGJ0X2hjaV9jbWRfbGVfc2V0X2Fkdl9lbmFibGUgY21kOw0KPiA+ICsNCj4gPiArCWlmICgh
cHZ0KQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlwdnQtPnNlbmRpbmcgPSB0cnVlOw0K
PiA+ICsJY21kLmVuYWJsZSA9IDB4MDE7CS8qIEVuYWJsZSBhZHZlcnRpc2luZyAqLw0KPiA+ICsJ
YnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX0FEVl9FTkFCTEUsDQo+ID4g
KwkJCQkmY21kLCBzaXplb2YoY21kKSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK3N0YXRpYyB2b2lkIHNldF9zZW5kX2Fkdl9kYXRhKGNvbnN0IHZvaWQgKmJ1ZiwgdWlu
dDhfdCBzaXplLA0KPiA+ICsJCQkJCQkJdm9pZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlz
dHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhf
cGt0ICp0eDsNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9hZHZfZGF0YSBjbWQ7DQo+
ID4gKw0KPiA+ICsJaWYgKCFwdnQgfHwgIXB2dC0+dHgpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsN
Cj4gPiArCXR4ID0gcHZ0LT50eDsNCj4gPiArCWlmICh0eC0+bGVuID49IHNpemVvZihjbWQuZGF0
YSkpDQo+ID4gKwkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmY21kLCAwLCBzaXpl
b2YoY21kKSk7DQo+ID4gKw0KPiA+ICsJY21kLmxlbiA9IHR4LT5sZW4gKyAxOw0KPiA+ICsJY21k
LmRhdGFbMF0gPSB0eC0+bGVuOw0KPiA+ICsJbWVtY3B5KGNtZC5kYXRhICsgMSwgdHgtPnBrdCwg
dHgtPmxlbik7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURf
TEVfU0VUX0FEVl9EQVRBLA0KPiA+ICsJCQkJCSZjbWQsIHNpemVvZihjbWQpLA0KPiA+ICsJCQkJ
CXNldF9zZW5kX2Fkdl9lbmFibGUsIHB2dCwgTlVMTCk7DQo+ID4gK2RvbmU6DQo+ID4gKwlpZiAo
dHgtPmRlbGV0ZSkNCj4gPiArCQlsX2ZyZWUodHgpOw0KPiA+ICsNCj4gPiArCXB2dC0+dHggPSBO
VUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzZXRfc2VuZF9hZHZfcGFyYW1z
KGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplLA0KPiA+ICsJCQkJCQkJdm9pZCAqdXNlcl9k
YXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2Rh
dGE7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9zZXRfYWR2X3BhcmFtZXRlcnMgY21kOw0K
PiA+ICsJdWludDE2X3QgaGNpX2ludGVydmFsOw0KPiA+ICsNCj4gPiArCWlmICghcHZ0KQ0KPiA+
ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwloY2lfaW50ZXJ2YWwgPSAocHZ0LT5pbnRlcnZhbCAq
IDE2KSAvIDEwOw0KPiA+ICsJY21kLm1pbl9pbnRlcnZhbCA9IExfQ1BVX1RPX0xFMTYoaGNpX2lu
dGVydmFsKTsNCj4gPiArCWNtZC5tYXhfaW50ZXJ2YWwgPSBMX0NQVV9UT19MRTE2KGhjaV9pbnRl
cnZhbCk7DQo+ID4gKwljbWQudHlwZSA9IDB4MDM7IC8qIEFEVl9OT05DT05OX0lORCAqLw0KPiA+
ICsJY21kLm93bl9hZGRyX3R5cGUgPSAweDAxOyAvKiBBRERSX1RZUEVfUkFORE9NICovDQo+ID4g
KwljbWQuZGlyZWN0X2FkZHJfdHlwZSA9IDB4MDA7DQo+ID4gKwltZW1zZXQoY21kLmRpcmVjdF9h
ZGRyLCAwLCA2KTsNCj4gPiArCWNtZC5jaGFubmVsX21hcCA9IDB4MDc7DQo+ID4gKwljbWQuZmls
dGVyX3BvbGljeSA9IDB4MDM7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJU
X0hDSV9DTURfTEVfU0VUX0FEVl9QQVJBTUVURVJTLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNt
ZCksDQo+ID4gKwkJCQlzZXRfc2VuZF9hZHZfZGF0YSwgcHZ0LCBOVUxMKTsNCj4gPiArfQ0KPiA+
ICsNCj4gPiArc3RhdGljIHZvaWQgc2VuZF9wa3Qoc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0
LCBzdHJ1Y3QgdHhfcGt0ICp0eCwNCj4gPiArCQkJCQkJCXVpbnQxNl90IGludGVydmFsKQ0KPiA+
ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9zZXRfYWR2X2VuYWJsZSBjbWQ7DQo+ID4g
Kw0KPiA+ICsJcHZ0LT50eCA9IHR4Ow0KPiA+ICsJcHZ0LT5pbnRlcnZhbCA9IGludGVydmFsOw0K
PiA+ICsNCj4gPiArCWlmICghcHZ0LT5zZW5kaW5nKSB7DQo+ID4gKwkJc2V0X3NlbmRfYWR2X3Bh
cmFtcyhOVUxMLCAwLCBwdnQpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArDQo+ID4g
KwljbWQuZW5hYmxlID0gMHgwMDsJLyogRGlzYWJsZSBhZHZlcnRpc2luZyAqLw0KPiA+ICsJYnRf
aGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX0FEVl9FTkFCTEUsDQo+ID4gKwkJ
CQkmY21kLCBzaXplb2YoY21kKSwNCj4gPiArCQkJCXNldF9zZW5kX2Fkdl9wYXJhbXMsIHB2dCwg
TlVMTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHR4X3RpbWVvdXQoc3RydWN0
IGxfdGltZW91dCAqdGltZW91dCwgdm9pZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1
Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0
ICp0eDsNCj4gPiArCXVpbnQxNl90IG1zOw0KPiA+ICsJdWludDhfdCBjb3VudDsNCj4gPiArDQo+
ID4gKwlpZiAoIXB2dCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJdHggPSBsX3F1ZXVl
X3BvcF9oZWFkKHB2dC0+dHhfcGt0cyk7DQo+ID4gKwlpZiAoIXR4KSB7DQo+ID4gKwkJbF90aW1l
b3V0X3JlbW92ZSh0aW1lb3V0KTsNCj4gPiArCQlwdnQtPnR4X3RpbWVvdXQgPSBOVUxMOw0KPiA+
ICsJCXNlbmRfY2FuY2VsKHB2dCk7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4g
PiArCWlmICh0eC0+aW5mby50eXBlID09IE1FU0hfSU9fVElNSU5HX1RZUEVfR0VORVJBTCkgew0K
PiA+ICsJCW1zID0gdHgtPmluZm8udS5nZW4uaW50ZXJ2YWw7DQo+ID4gKwkJY291bnQgPSB0eC0+
aW5mby51Lmdlbi5jbnQ7DQo+ID4gKwkJaWYgKGNvdW50ICE9IE1FU0hfSU9fVFhfQ09VTlRfVU5M
SU1JVEVEKQ0KPiA+ICsJCQl0eC0+aW5mby51Lmdlbi5jbnQtLTsNCj4gPiArCX0gZWxzZSB7DQo+
ID4gKwkJbXMgPSAyNTsNCj4gPiArCQljb3VudCA9IDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ
dHgtPmRlbGV0ZSA9ICEhKGNvdW50ID09IDEpOw0KPiA+ICsNCj4gPiArCXNlbmRfcGt0KHB2dCwg
dHgsIG1zKTsNCj4gPiArDQo+ID4gKwlpZiAoY291bnQgPT0gMSkgew0KPiA+ICsJCS8qIHNlbmRf
cGt0IHdpbGwgZGVsZXRlIHdoZW4gZG9uZSAqLw0KPiA+ICsJCXR4ID0gbF9xdWV1ZV9wZWVrX2hl
YWQocHZ0LT50eF9wa3RzKTsNCj4gPiArCQlpZiAodHggJiYgdHgtPmluZm8udHlwZSA9PSBNRVNI
X0lPX1RJTUlOR19UWVBFX1BPTExfUlNQKSB7DQo+ID4gKwkJCW1zID0gaW5zdGFudF9yZW1haW5p
bmdfbXModHgtPmluZm8udS5wb2xsX3JzcC5pbnN0YW50ICsNCj4gPiArCQkJCQkJdHgtPmluZm8u
dS5wb2xsX3JzcC5kZWxheSk7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlDQo+ID4gKwkJbF9xdWV1
ZV9wdXNoX3RhaWwocHZ0LT50eF9wa3RzLCB0eCk7DQo+ID4gKw0KPiA+ICsJaWYgKHRpbWVvdXQp
IHsNCj4gPiArCQlwdnQtPnR4X3RpbWVvdXQgPSB0aW1lb3V0Ow0KPiA+ICsJCWxfdGltZW91dF9t
b2RpZnlfbXModGltZW91dCwgbXMpOw0KPiA+ICsJfSBlbHNlDQo+ID4gKwkJcHZ0LT50eF90aW1l
b3V0ID0gbF90aW1lb3V0X2NyZWF0ZV9tcyhtcywgdHhfdGltZW91dCwNCj4gPiArCQkJCQkJCQlw
dnQsIE5VTEwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0eF93b3JrZXIodm9p
ZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQg
PSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4gPiArCXVpbnQzMl90IGRl
bGF5Ow0KPiA+ICsNCj4gPiArCXR4ID0gbF9xdWV1ZV9wZWVrX2hlYWQocHZ0LT50eF9wa3RzKTsN
Cj4gPiArCWlmICghdHgpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAodHgt
PmluZm8udHlwZSkgew0KPiA+ICsJY2FzZSBNRVNIX0lPX1RJTUlOR19UWVBFX0dFTkVSQUw6DQo+
ID4gKwkJaWYgKHR4LT5pbmZvLnUuZ2VuLm1pbl9kZWxheSA9PSB0eC0+aW5mby51Lmdlbi5tYXhf
ZGVsYXkpDQo+ID4gKwkJCWRlbGF5ID0gdHgtPmluZm8udS5nZW4ubWluX2RlbGF5Ow0KPiA+ICsJ
CWVsc2Ugew0KPiA+ICsJCQlsX2dldHJhbmRvbSgmZGVsYXksIHNpemVvZihkZWxheSkpOw0KPiA+
ICsJCQlkZWxheSAlPSB0eC0+aW5mby51Lmdlbi5tYXhfZGVsYXkgLQ0KPiA+ICsJCQkJCQl0eC0+
aW5mby51Lmdlbi5taW5fZGVsYXk7DQo+ID4gKwkJCWRlbGF5ICs9IHR4LT5pbmZvLnUuZ2VuLm1p
bl9kZWxheTsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBNRVNI
X0lPX1RJTUlOR19UWVBFX1BPTEw6DQo+ID4gKwkJaWYgKHR4LT5pbmZvLnUucG9sbC5taW5fZGVs
YXkgPT0gdHgtPmluZm8udS5wb2xsLm1heF9kZWxheSkNCj4gPiArCQkJZGVsYXkgPSB0eC0+aW5m
by51LnBvbGwubWluX2RlbGF5Ow0KPiA+ICsJCWVsc2Ugew0KPiA+ICsJCQlsX2dldHJhbmRvbSgm
ZGVsYXksIHNpemVvZihkZWxheSkpOw0KPiA+ICsJCQlkZWxheSAlPSB0eC0+aW5mby51LnBvbGwu
bWF4X2RlbGF5IC0NCj4gPiArCQkJCQkJdHgtPmluZm8udS5wb2xsLm1pbl9kZWxheTsNCj4gPiAr
CQkJZGVsYXkgKz0gdHgtPmluZm8udS5wb2xsLm1pbl9kZWxheTsNCj4gPiArCQl9DQo+ID4gKwkJ
YnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBNRVNIX0lPX1RJTUlOR19UWVBFX1BPTExfUlNQOg0K
PiA+ICsJCS8qIERlbGF5IHVudGlsIEluc3RhbnQgKyBEZWxheSAqLw0KPiA+ICsJCWRlbGF5ID0g
aW5zdGFudF9yZW1haW5pbmdfbXModHgtPmluZm8udS5wb2xsX3JzcC5pbnN0YW50ICsNCj4gPiAr
CQkJCQkJdHgtPmluZm8udS5wb2xsX3JzcC5kZWxheSk7DQo+ID4gKwkJaWYgKGRlbGF5ID4gMjU1
KQ0KPiA+ICsJCQlkZWxheSA9IDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVs
dDoNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFkZWxheSkNCj4g
PiArCQl0eF90aW1lb3V0KHB2dC0+dHhfdGltZW91dCwgcHZ0KTsNCj4gPiArCWVsc2UgaWYgKHB2
dC0+dHhfdGltZW91dCkNCj4gPiArCQlsX3RpbWVvdXRfbW9kaWZ5X21zKHB2dC0+dHhfdGltZW91
dCwgZGVsYXkpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXB2dC0+dHhfdGltZW91dCA9IGxfdGltZW91
dF9jcmVhdGVfbXMoZGVsYXksIHR4X3RpbWVvdXQsDQo+ID4gKwkJCQkJCQkJcHZ0LCBOVUxMKTsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgc2VuZF90eChzdHJ1Y3QgbWVzaF9pbyAq
aW8sIHN0cnVjdCBtZXNoX2lvX3NlbmRfaW5mbyAqaW5mbywNCj4gPiArCQkJCQljb25zdCB1aW50
OF90ICpkYXRhLCB1aW50MTZfdCBsZW4pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3By
aXZhdGUgKnB2dCA9IGlvLT5wdnQ7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4gPiArCWJv
b2wgc2VuZGluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghaW5mbyB8fCAhZGF0YSB8fCAh
bGVuIHx8IGxlbiA+IHNpemVvZih0eC0+cGt0KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4g
Kw0KPiA+ICsNCj4gPiArCXR4ID0gbF9uZXcoc3RydWN0IHR4X3BrdCwgMSk7DQo+ID4gKwlpZiAo
IXR4KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwltZW1jcHkoJnR4LT5pbmZv
LCBpbmZvLCBzaXplb2YodHgtPmluZm8pKTsNCj4gPiArCW1lbWNweSgmdHgtPnBrdCwgZGF0YSwg
bGVuKTsNCj4gPiArCXR4LT5sZW4gPSBsZW47DQo+ID4gKw0KPiA+ICsJaWYgKGluZm8tPnR5cGUg
PT0gTUVTSF9JT19USU1JTkdfVFlQRV9QT0xMX1JTUCkNCj4gPiArCQlsX3F1ZXVlX3B1c2hfaGVh
ZChwdnQtPnR4X3BrdHMsIHR4KTsNCj4gPiArCWVsc2Ugew0KPiA+ICsJCXNlbmRpbmcgPSAhbF9x
dWV1ZV9pc2VtcHR5KHB2dC0+dHhfcGt0cyk7DQo+ID4gKwkJbF9xdWV1ZV9wdXNoX3RhaWwocHZ0
LT50eF9wa3RzLCB0eCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFzZW5kaW5nKSB7DQo+
ID4gKwkJbF90aW1lb3V0X3JlbW92ZShwdnQtPnR4X3RpbWVvdXQpOw0KPiA+ICsJCXB2dC0+dHhf
dGltZW91dCA9IE5VTEw7DQo+ID4gKwkJbF9pZGxlX29uZXNob3QodHhfd29ya2VyLCBwdnQsIE5V
TEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtzdGF0aWMgYm9vbCBmaW5kX2J5X2FkX3R5cGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p
ZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IHR4X3BrdCAqdHggPSBhOw0KPiA+ICsJ
dWludDhfdCBhZF90eXBlID0gTF9QVFJfVE9fVUlOVChiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g
IWFkX3R5cGUgfHwgYWRfdHlwZSA9PSB0eC0+cGt0WzBdOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz
dGF0aWMgYm9vbCBmaW5kX2J5X3BhdHRlcm4oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikN
Cj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IHR4X3BrdCAqdHggPSBhOw0KPiA+ICsJY29uc3Qg
c3RydWN0IHR4X3BhdHRlcm4gKnBhdHRlcm4gPSBiOw0KPiA+ICsNCj4gPiArCWlmICh0eC0+bGVu
IDwgcGF0dGVybi0+bGVuKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1
cm4gKCFtZW1jbXAodHgtPnBrdCwgcGF0dGVybi0+ZGF0YSwgcGF0dGVybi0+bGVuKSk7DQo+ID4g
K30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHR4X2NhbmNlbChzdHJ1Y3QgbWVzaF9pbyAqaW8s
IHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgbGVuKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9p
b19wcml2YXRlICpwdnQgPSBpby0+cHZ0Ow0KPiA+ICsJc3RydWN0IHR4X3BrdCAqdHg7DQo+ID4g
Kw0KPiA+ICsJaWYgKCFkYXRhKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlp
ZiAobGVuID09IDEpIHsNCj4gPiArCQlkbyB7DQo+ID4gKwkJCXR4ID0gbF9xdWV1ZV9yZW1vdmVf
aWYocHZ0LT50eF9wa3RzLCBmaW5kX2J5X2FkX3R5cGUsDQo+ID4gKwkJCQkJCQlMX1VJTlRfVE9f
UFRSKGRhdGFbMF0pKTsNCj4gPiArCQkJbF9mcmVlKHR4KTsNCj4gPiArCQl9IHdoaWxlICh0eCk7
DQo+ID4gKwl9ICBlbHNlIHsNCj4gPiArCQlzdHJ1Y3QgdHhfcGF0dGVybiBwYXR0ZXJuID0gew0K
PiA+ICsJCQkuZGF0YSA9IGRhdGEsDQo+ID4gKwkJCS5sZW4gPSBsZW4NCj4gPiArCQl9Ow0KPiA+
ICsNCj4gPiArCQlkbyB7DQo+ID4gKwkJCXR4ID0gbF9xdWV1ZV9yZW1vdmVfaWYocHZ0LT50eF9w
a3RzLCBmaW5kX2J5X3BhdHRlcm4sDQo+ID4gKwkJCQkJCQkJJnBhdHRlcm4pOw0KPiA+ICsJCQls
X2ZyZWUodHgpOw0KPiA+ICsJCX0gd2hpbGUgKHR4KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp
ZiAobF9xdWV1ZV9pc2VtcHR5KHB2dC0+dHhfcGt0cykpIHsNCj4gPiArCQlzZW5kX2NhbmNlbChw
dnQpOw0KPiA+ICsJCWxfdGltZW91dF9yZW1vdmUocHZ0LT50eF90aW1lb3V0KTsNCj4gPiArCQlw
dnQtPnR4X3RpbWVvdXQgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVl
Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBmaW5kX2J5X2ZpbHRlcl9pZChjb25z
dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgcHZ0
X3J4X3JlZyAqcnhfcmVnID0gYTsNCj4gPiArCXVpbnQ4X3QgZmlsdGVyX2lkID0gTF9QVFJfVE9f
VUlOVChiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcnhfcmVnLT5maWx0ZXJfaWQgPT0gZmlsdGVy
X2lkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCByZWN2X3JlZ2lzdGVyKHN0cnVj
dCBtZXNoX2lvICppbywgdWludDhfdCBmaWx0ZXJfaWQsDQo+ID4gKwkJCQltZXNoX2lvX3JlY3Zf
ZnVuY190IGNiLCB2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lf
Y21kX2xlX3NldF9zY2FuX2VuYWJsZSBjbWQ7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRl
ICpwdnQgPSBpby0+cHZ0Ow0KPiA+ICsJc3RydWN0IHB2dF9yeF9yZWcgKnJ4X3JlZzsNCj4gPiAr
CWJvb2wgc2Nhbm5pbmc7DQo+ID4gKw0KPiA+ICsJbF9pbmZvKCIlcyAlZCIsIF9fZnVuY19fLCBm
aWx0ZXJfaWQpOw0KPiA+ICsJaWYgKCFjYiB8fCAhZmlsdGVyX2lkIHx8IGZpbHRlcl9pZCA+IHNp
emVvZihwdnQtPmZpbHRlcnMpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwly
eF9yZWcgPSBsX3F1ZXVlX3JlbW92ZV9pZihwdnQtPnJ4X3JlZ3MsIGZpbmRfYnlfZmlsdGVyX2lk
LA0KPiA+ICsJCQkJCQlMX1VJTlRfVE9fUFRSKGZpbHRlcl9pZCkpOw0KPiA+ICsNCj4gPiArCWlm
ICghcnhfcmVnKSB7DQo+ID4gKwkJcnhfcmVnID0gbF9uZXcoc3RydWN0IHB2dF9yeF9yZWcsIDEp
Ow0KPiA+ICsJCWlmICghcnhfcmVnKQ0KPiA+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+
ID4gKw0KPiA+ICsJcnhfcmVnLT5maWx0ZXJfaWQgPSBmaWx0ZXJfaWQ7DQo+ID4gKwlyeF9yZWct
PmNiID0gY2I7DQo+ID4gKwlyeF9yZWctPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsNCj4gPiArDQo+
ID4gKwlzY2FubmluZyA9ICFsX3F1ZXVlX2lzZW1wdHkocHZ0LT5yeF9yZWdzKTsNCj4gPiArDQo+
ID4gKwlsX3F1ZXVlX3B1c2hfaGVhZChwdnQtPnJ4X3JlZ3MsIHJ4X3JlZyk7DQo+ID4gKw0KPiA+
ICsJaWYgKCFzY2FubmluZykgew0KPiA+ICsJCWNtZC5lbmFibGUgPSAweDAxOwkvKiBFbmFibGUg
c2Nhbm5pbmcgKi8NCj4gPiArCQljbWQuZmlsdGVyX2R1cCA9IDB4MDA7CS8qIFJlcG9ydCBkdXBs
aWNhdGVzICovDQo+ID4gKwkJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VU
X1NDQU5fRU5BQkxFLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIE5VTEwsIE5V
TEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtzdGF0aWMgYm9vbCByZWN2X2RlcmVnaXN0ZXIoc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50
OF90IGZpbHRlcl9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGJ0X2hjaV9jbWRfbGVfc2V0X3Nj
YW5fZW5hYmxlIGNtZDsNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUgKnB2dCA9IGlvLT5w
dnQ7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHB2dF9yeF9yZWcgKnJ4X3JlZzsNCj4gPiArDQo+ID4g
KwlyeF9yZWcgPSBsX3F1ZXVlX3JlbW92ZV9pZihwdnQtPnJ4X3JlZ3MsIGZpbmRfYnlfZmlsdGVy
X2lkLA0KPiA+ICsJCQkJCQlMX1VJTlRfVE9fUFRSKGZpbHRlcl9pZCkpOw0KPiA+ICsNCj4gPiAr
CWlmIChyeF9yZWcpDQo+ID4gKwkJbF9mcmVlKHJ4X3JlZyk7DQo+ID4gKw0KPiA+ICsJaWYgKGxf
cXVldWVfaXNlbXB0eShwdnQtPnJ4X3JlZ3MpKSB7DQo+ID4gKwkJY21kLmVuYWJsZSA9IDB4MDA7
CS8qIERpc2FibGUgc2Nhbm5pbmcgKi8NCj4gPiArCQljbWQuZmlsdGVyX2R1cCA9IDB4MDA7CS8q
IFJlcG9ydCBkdXBsaWNhdGVzICovDQo+ID4gKwkJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hD
SV9DTURfTEVfU0VUX1NDQU5fRU5BQkxFLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5V
TEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1
ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgZmlsdGVyX3NldChzdHJ1Y3QgbWVz
aF9pbyAqaW8sDQo+ID4gKwkJdWludDhfdCBmaWx0ZXJfaWQsIGNvbnN0IHVpbnQ4X3QgKmRhdGEs
IHVpbnQ4X3QgbGVuLA0KPiA+ICsJCW1lc2hfaW9fc3RhdHVzX2Z1bmNfdCBjYWxsYmFjaywgdm9p
ZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQg
PSBpby0+cHZ0Ow0KPiA+ICsNCj4gPiArCWxfaW5mbygiJXMgaWQ6ICVkLCAtLT4gJTIuMngiLCBf
X2Z1bmNfXywgZmlsdGVyX2lkLCBkYXRhWzBdKTsNCj4gPiArCWlmICghZGF0YSB8fCAhbGVuIHx8
ICFmaWx0ZXJfaWQgfHwgZmlsdGVyX2lkID4gc2l6ZW9mKHB2dC0+ZmlsdGVycykpDQo+ID4gKwkJ
cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXB2dC0+ZmlsdGVyc1tmaWx0ZXJfaWQgLSAxXSA9
IGRhdGFbMF07DQo+ID4gKw0KPiA+ICsJLyogVE9ETzogRGVsYXllZCBDYWxsIHRvIHN1Y2Nlc3Nm
dWwgc3RhdHVzICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+
ID4gK2NvbnN0IHN0cnVjdCBtZXNoX2lvX2FwaSBtZXNoX2lvX2dlbmVyaWMgPSB7DQo+ID4gKwku
aW5pdCA9IGRldl9pbml0LA0KPiA+ICsJLmRlc3Ryb3kgPSBkZXZfZGVzdHJveSwNCj4gPiArCS5j
YXBzID0gZGV2X2NhcHMsDQo+ID4gKwkuc2VuZCA9IHNlbmRfdHgsDQo+ID4gKwkucmVnID0gcmVj
dl9yZWdpc3RlciwNCj4gPiArCS5kZXJlZyA9IHJlY3ZfZGVyZWdpc3RlciwNCj4gPiArCS5zZXQg
PSBmaWx0ZXJfc2V0LA0KPiA+ICsJLmNhbmNlbCA9IHR4X2NhbmNlbCwNCj4gPiArfTsNCj4gPiBk
aWZmIC0tZ2l0IGEvbWVzaC9tZXNoLWlvLmMgYi9tZXNoL21lc2gtaW8uYw0KPiA+IG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwLi43NjJlYjJjNmYNCj4gPiAtLS0gL2Rl
di9udWxsDQo+ID4gKysrIGIvbWVzaC9tZXNoLWlvLmMNCj4gPiBAQCAtMCwwICsxLDE4NyBAQA0K
PiA+ICsvKg0KPiA+ICsgKg0KPiA+ICsgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3Rh
Y2sgZm9yIExpbnV4DQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTggIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+
ICsgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N
Cj4gPiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VDQo+ID4gKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZmRlZiBIQVZFX0NPTkZJR19I
DQo+ID4gKyNpbmNsdWRlIDxjb25maWcuaD4NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5j
bHVkZSA8ZWxsL2VsbC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImxpYi9ibHVldG9vdGguaCIN
Cj4gPiArI2luY2x1ZGUgImxpYi9oY2kuaCINCj4gPiArDQo+ID4gKyNpbmNsdWRlICJtZXNoL21l
c2gtZGVmcy5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvbWVzaC1pby5oIg0KPiA+ICsj
aW5jbHVkZSAibWVzaC9tZXNoLWlvLWFwaS5oIg0KPiA+ICsNCj4gPiArLyogTGlzdCBvZiBNZXNo
LUlPIFR5cGUgaGVhZGVycyAqLw0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLWlvLWdlbmVyaWMu
aCINCj4gPiArDQo+ID4gKy8qIExpc3Qgb2YgU3VwcG9ydGVkIE1lc2gtSU8gVHlwZXMgKi8NCj4g
PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZXNoX2lvX3RhYmxlIHRhYmxlW10gPSB7DQo+ID4gKwl7
TUVTSF9JT19UWVBFX0dFTkVSSUMsCSZtZXNoX2lvX2dlbmVyaWN9LA0KPiA+ICt9Ow0KPiANCj4g
CXsgTUVTSC4uLCAmbWVzaC4uIH0NCg0KRml4ZWQgaW4gdjYNCg0KPiA+ICsNCj4gPiArc3RhdGlj
IHN0cnVjdCBsX3F1ZXVlICppb19saXN0Ow0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbWF0Y2hf
YnlfaW8oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJcmV0dXJu
IGEgPT0gYjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbWF0Y2hfYnlfaW5kZXgo
Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0
IG1lc2hfaW8gKmlvID0gYTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaW8tPmluZGV4ID09IExfUFRS
X1RPX1VJTlQoYik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCBtZXNoX2lvICptZXNoX2lv
X25ldyh1aW50MTZfdCBpbmRleCwgZW51bSBtZXNoX2lvX3R5cGUgdHlwZSkNCj4gPiArew0KPiA+
ICsJY29uc3Qgc3RydWN0IG1lc2hfaW9fYXBpCSphcGkgPSBOVUxMOw0KPiA+ICsJc3RydWN0IG1l
c2hfaW8JCQkqaW87DQo+ID4gKwl1aW50MTZfdAkJCWk7DQo+IA0KPiBObyBhbGlnbm1lbnQgb2Yg
dmFyaWFibGUgbmFtZXMgcGxlYXNlLg0KDQpGaXhlZCBpbiB2Ng0KDQo+ID4gKw0KPiA+ICsJbF9p
bmZvKCIlcyAlZFxuIiwgX19mdW5jX18sIHR5cGUpOw0KPiANCj4gRW1wdHkgbGluZSBoZXJlLg0K
DQpGaXhlZCBpbiB2Ng0KDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgTF9BUlJBWV9TSVpFKHRhYmxl
KTsgaSsrKSB7DQo+ID4gKwkJaWYgKHRhYmxlW2ldLnR5cGUgPT0gdHlwZSkgew0KPiA+ICsJCQlh
cGkgPSB0YWJsZVtpXS5hcGk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4g
PiArDQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChpb19saXN0LCBtYXRjaF9ieV9pbmRleCwgTF9V
SU5UX1RPX1BUUihpbmRleCkpOw0KPiA+ICsNCj4gPiArCWlmIChhcGkgPT0gTlVMTCB8fCBhcGkt
PmluaXQgPT0gTlVMTCB8fCBpbyAhPSBOVUxMKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsN
Cj4gPiArCWlvID0gbF9uZXcoc3RydWN0IG1lc2hfaW8sIDEpOw0KPiA+ICsNCj4gPiArCWlmIChp
byA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiANCj4gVXNlIGlmICghaW8pLg0KDQpG
aXhlZCBpbiB2Ng0KDQo+ID4gKw0KPiA+ICsJaW8tPnR5cGUgPSB0eXBlOw0KPiA+ICsJaW8tPmlu
ZGV4ID0gaW5kZXg7DQo+ID4gKwlpby0+YXBpID0gYXBpOw0KPiA+ICsJaWYgKCFhcGktPmluaXQo
aW5kZXgsIGlvKSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJaWYgKGlvX2xpc3Qg
PT0gTlVMTCkNCj4gPiArCQlpb19saXN0ID0gbF9xdWV1ZV9uZXcoKTsNCj4gPiArDQo+ID4gKwlp
ZiAoYXBpLT5zZXQpIHsNCj4gPiArCQl1aW50OF90IHBrdCA9IE1FU0hfQURfVFlQRV9ORVRXT1JL
Ow0KPiA+ICsJCXVpbnQ4X3QgYmVjID0gTUVTSF9BRF9UWVBFX0JFQUNPTjsNCj4gPiArCQl1aW50
OF90IHBydiA9IE1FU0hfQURfVFlQRV9QUk9WSVNJT047DQo+ID4gKw0KPiA+ICsJCWFwaS0+c2V0
KGlvLCAxLCAmYmVjLCAxLCBOVUxMLCBOVUxMKTsNCj4gPiArCQlhcGktPnNldChpbywgMiwgJnBy
diwgMSwgTlVMTCwgTlVMTCk7DQo+ID4gKwkJYXBpLT5zZXQoaW8sIDMsICZwa3QsIDEsIE5VTEws
IE5VTEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChsX3F1ZXVlX3B1c2hfaGVhZChpb19s
aXN0LCBpbykpDQo+ID4gKwkJcmV0dXJuIGlvOw0KPiA+ICsNCj4gPiArZmFpbDoNCj4gPiArCWlm
IChhcGktPmRlc3Ryb3kpDQo+ID4gKwkJYXBpLT5kZXN0cm95KGlvKTsNCj4gPiArDQo+ID4gKwls
X2ZyZWUoaW8pOw0KPiA+ICsJcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQg
bWVzaF9pb19kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+ICsJaW8gPSBs
X3F1ZXVlX3JlbW92ZV9pZihpb19saXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiAr
CWlmIChpbyAmJiBpby0+YXBpICYmIGlvLT5hcGktPmRlc3Ryb3kpDQo+ID4gKwkJaW8tPmFwaS0+
ZGVzdHJveShpbyk7DQo+ID4gKw0KPiA+ICsJbF9mcmVlKGlvKTsNCj4gPiArDQo+ID4gKwlpZiAo
bF9xdWV1ZV9pc2VtcHR5KGlvX2xpc3QpKSB7DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGlvX2xp
c3QsIE5VTEwpOw0KPiA+ICsJCWlvX2xpc3QgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4g
Kw0KPiA+ICtib29sIG1lc2hfaW9fZ2V0X2NhcHMoc3RydWN0IG1lc2hfaW8gKmlvLCBzdHJ1Y3Qg
bWVzaF9pb19jYXBzICpjYXBzKQ0KPiA+ICt7DQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChpb19s
aXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiArCWlmIChpbyAmJiBpby0+YXBpICYm
IGlvLT5hcGktPmNhcHMpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPmNhcHMoaW8sIGNhcHMpOw0K
PiA+ICsNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNo
X2lvX3JlZ2lzdGVyX3JlY3ZfY2Ioc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90IGZpbHRlcl9p
ZCwNCj4gPiArCQkJCW1lc2hfaW9fcmVjdl9mdW5jX3QgY2IsIHZvaWQgKnVzZXJfZGF0YSkNCj4g
PiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsN
Cj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAmJiBpby0+YXBpLT5yZWcpDQo+ID4gKwkJ
cmV0dXJuIGlvLT5hcGktPnJlZyhpbywgZmlsdGVyX2lkLCBjYiwgdXNlcl9kYXRhKTsNCj4gPiAr
DQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9pb19k
ZXJlZ2lzdGVyX3JlY3ZfY2Ioc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90IGZpbHRlcl9pZCkN
Cj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlv
KTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAmJiBpby0+YXBpLT5kZXJlZykNCj4g
PiArCQlyZXR1cm4gaW8tPmFwaS0+ZGVyZWcoaW8sIGZpbHRlcl9pZCk7DQo+ID4gKw0KPiA+ICsJ
cmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfc2V0X2ZpbHRlcihz
dHJ1Y3QgbWVzaF9pbyAqaW8sIHVpbnQ4X3QgZmlsdGVyX2lkLA0KPiA+ICsJCQkJY29uc3QgdWlu
dDhfdCAqZGF0YSwgdWludDhfdCBsZW4sDQo+ID4gKwkJCQltZXNoX2lvX3N0YXR1c19mdW5jX3Qg
Y2IsIHZvaWQgKnVzZXJfZGF0YSkNCj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9f
bGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAm
JiBpby0+YXBpLT5zZXQpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPnNldChpbywgZmlsdGVyX2lk
LCBkYXRhLCBsZW4sIGNiLCB1c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBmYWxzZTsN
Cj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2lvX3NlbmQoc3RydWN0IG1lc2hfaW8gKmlv
LCBzdHJ1Y3QgbWVzaF9pb19zZW5kX2luZm8gKmluZm8sDQo+ID4gKwkJCQkJY29uc3QgdWludDhf
dCAqZGF0YSwgdWludDE2X3QgbGVuKQ0KPiA+ICt7DQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChp
b19saXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiArCWlmIChpbyAmJiBpby0+YXBp
ICYmIGlvLT5hcGktPnNlbmQpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPnNlbmQoaW8sIGluZm8s
IGRhdGEsIGxlbik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0K
PiA+ICtib29sIG1lc2hfaW9fc2VuZF9jYW5jZWwoc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90
ICpwYXR0ZXJuLCB1aW50OF90IGxlbikNCj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQo
aW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFw
aSAmJiBpby0+YXBpLT5jYW5jZWwpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPmNhbmNlbChpbywg
cGF0dGVybiwgbGVuKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gDQo+
IFJlZ2FyZHMNCj4gDQo+IE1hcmNlbA0KPiA=
next prev parent reply other threads:[~2018-07-08 15:05 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-06 17:12 [PATCH BlueZ v5 00/14] Bluetooth Mesh Daemon Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 01/14] mesh: Shared private meshd interfaces Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 02/14] mesh: Mesh crypto support Brian Gix
2018-07-06 18:10 ` Marcel Holtmann
2018-07-08 15:07 ` Gix, Brian
2018-07-06 17:12 ` [PATCH BlueZ v5 03/14] mesh: Infrastructure for Mesh daemon Brian Gix
2018-07-06 18:20 ` Marcel Holtmann
2018-07-08 15:05 ` Gix, Brian [this message]
2018-07-14 16:23 ` Marcel Holtmann
2018-07-06 17:12 ` [PATCH BlueZ v5 04/14] mesh: Initial Mesh Friendship support Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 05/14] mesh: Provisioning logic for mesh Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 06/14] mesh: Upper and Lower mesh transport Brian Gix
2018-07-06 17:12 ` [PATCH BlueZ v5 07/14] mesh: Add Accessors to Transport layer data Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 08/14] mesh: Header files for mesh access layer and utilities Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 09/14] mesh: Source " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 10/14] mesh: Source code for handling access layer mux/demux Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 11/14] mesh: Mesh config server model Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 12/14] mesh: Read and write mesh configuration in JSON format Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 13/14] mesh: Sample device composition " Brian Gix
2018-07-06 17:13 ` [PATCH BlueZ v5 14/14] Makefile for meshd Brian Gix
2018-07-06 17:23 ` Marcel Holtmann
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=1531062347.7346.18.camel@intel.com \
--to=brian.gix@intel.com \
--cc=inga.stotland@intel.com \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.