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 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).