Re: [PATCH 1/2] sbi: add hardware isolation abstraction framework

Anup Patel <[email protected]> Wed, 22 Jul 2026 22:53:02 +0530
Newsgroups org.infradead.lists.opensbi
Message-ID <CAAhSdy2nDpVbNPWLx1hqs_-VagG9Xj8Hj5JtKaJLUAC=oVNJaw@mail.gmail.com>
T24gVHVlLCBKdWwgMjEsIDIwMjYgYXQgODo1MeKAr1BNIFJheW1vbmQgTWFvIDxyYXltb25kbWFv
Y2FAZ21haWwuY29tPiB3cm90ZToKPgo+IEhpIEFudXAsCj4KPiBPbiBGcmksIEp1bCAxNywgMjAy
NiBhdCAzOjU04oCvQU0gQW51cCBQYXRlbCA8YW51cEBicmFpbmZhdWx0Lm9yZz4gd3JvdGU6Cj4g
Pgo+ID4gT24gVGh1LCBKdWwgMTYsIDIwMjYgYXQgNzowOeKAr1BNIEFudXAgUGF0ZWwgPGFudXBA
YnJhaW5mYXVsdC5vcmc+IHdyb3RlOgo+ID4gPgo+ID4gPiBPbiBNb24sIE1heSA0LCAyMDI2IGF0
IDExOjA54oCvUE0gUmF5bW9uZCBNYW8gPHJheW1vbmRtYW9jYUBnbWFpbC5jb20+IHdyb3RlOgo+
ID4gPiA+Cj4gPiA+ID4gRnJvbTogUmF5bW9uZCBNYW8gPHJheW1vbmQubWFvQHJpc2NzdGFyLmNv
bT4KPiA+ID4gPgo+ID4gPiA+IEludHJvZHVjZSBhIGdlbmVyaWMgaGFyZHdhcmUtaXNvbGF0aW9u
IHJlZ2lzdHJhdGlvbiBhbmQgZGlzcGF0Y2gKPiA+ID4gPiBmcmFtZXdvcmsgZm9yIE9wZW5TQkkg
ZG9tYWlucy4KPiA+ID4gPgo+ID4gPiA+IEFkZCBib290LXRpbWUgaW5pdCwgcGVyLWRvbWFpbiBp
bml0LCBkb21haW4gZXhpdCwgZG9tYWluIGVudGVyIGFuZAo+ID4gPiA+IGNsZWFudXAgY2FsbGJh
Y2tzLCBhbmQgc3RvcmUgcGVyLWRvbWFpbiBtZWNoYW5pc20gY29udGV4dHMgaW4gc3RydWN0Cj4g
PiA+ID4gc2JpX2RvbWFpbi4KPiA+ID4gPgo+ID4gPiA+IFRoaXMgZXN0YWJsaXNoZXMgYW4gYWJz
dHJhY3Rpb24gdGhhdCBhbGxvd3MgbXVsdGlwbGUgaGFyZHdhcmUKPiA+ID4gPiBpc29sYXRpb24g
bWVjaGFuaXNtcyB0byBiZSBjb21wb3NlZCB3aGlsZSBrZWVwaW5nIGNvcmUgZG9tYWluIG1vZGVs
Cj4gPiA+ID4gYW5kIGRhdGEgc3RydWN0dXJlcyBpbmRlcGVuZGVudCBmcm9tIGFueSBzaW5nbGUg
cGxhdGZvcm0KPiA+ID4gPiBpbXBsZW1lbnRhdGlvbi4KPiA+ID4gPgo+ID4gPiA+IFNpZ25lZC1v
ZmYtYnk6IFJheW1vbmQgTWFvIDxyYXltb25kLm1hb0ByaXNjc3Rhci5jb20+Cj4gPiA+Cj4gPiA+
IFdlIGRvbid0IG5lZWQgeWV0IGFub3RoZXIgaGFydC1sZXZlbCBhYnN0cmFjdGlvbiBmb3IgdGhp
bmdzIGxpa2UKPiA+ID4gV29ybGRHdWFyZCwgU3VwZXJ2aXNvciBEb21haW4gSUQsIGFuZCBRb1Mg
SUQgY29uZmlndXJhdGlvbgo+ID4gPiBhdCBoYXJ0LWxldmVsLgo+ID4gPgo+ID4gPiBUaGUgZXhp
c3RpbmcgaGFydCBwcm90ZWN0aW9uIGFic3RyYWN0aW9uIGNhbiBiZSBlYXNpbHkgZXh0ZW5kZWQK
PiA+ID4gdG8gc3VwcG9ydCBib3RoIG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKFBNUCwg
ZVBNUCwKPiA+ID4gU21tcHQsIGV0YykgYW5kIElEIGNvbmZpZ3VyYXRpb25zIChXb3JsZEd1YXJk
LCBEb21haW4gSUQsIGV0YykuCj4gPiA+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGluY2x1ZGUvc2Jp
L3NiaV9kb21haW4uaCB8ICAgNCArCj4gPiA+ID4gIGluY2x1ZGUvc2JpL3NiaV9od2lzby5oICB8
ICA1NiArKysrKysrKysrKysrCj4gPiA+ID4gIGxpYi9zYmkvb2JqZWN0cy5tayAgICAgICB8ICAg
MSArCj4gPiA+ID4gIGxpYi9zYmkvc2JpX2h3aXNvLmMgICAgICB8IDE3NSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMzYg
aW5zZXJ0aW9ucygrKQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zYmkvc2Jp
X2h3aXNvLmgKPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zYmkvc2JpX2h3aXNvLmMK
PiA+ID4gPgo+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3NiaS9zYmlfZG9tYWluLmggYi9p
bmNsdWRlL3NiaS9zYmlfZG9tYWluLmgKPiA+ID4gPiBpbmRleCAwMjc2NTc3Ny4uZmM3MzMwYTYg
MTAwNjQ0Cj4gPiA+ID4gLS0tIGEvaW5jbHVkZS9zYmkvc2JpX2RvbWFpbi5oCj4gPiA+ID4gKysr
IGIvaW5jbHVkZS9zYmkvc2JpX2RvbWFpbi5oCj4gPiA+ID4gQEAgLTE0LDYgKzE0LDcgQEAKPiA+
ID4gPiAgI2luY2x1ZGUgPHNiaS9zYmlfdHlwZXMuaD4KPiA+ID4gPiAgI2luY2x1ZGUgPHNiaS9z
YmlfaGFydG1hc2suaD4KPiA+ID4gPiAgI2luY2x1ZGUgPHNiaS9zYmlfZG9tYWluX2NvbnRleHQu
aD4KPiA+ID4gPiArI2luY2x1ZGUgPHNiaS9zYmlfaHdpc28uaD4KPiA+ID4gPiAgI2luY2x1ZGUg
PHNiaS9zYmlfcnB4eS5oPgo+ID4gPiA+Cj4gPiA+ID4gIHN0cnVjdCBzYmlfc2NyYXRjaDsKPiA+
ID4gPiBAQCAtMTk5LDYgKzIwMCw5IEBAIHN0cnVjdCBzYmlfZG9tYWluIHsKPiA+ID4gPiAgICAg
ICAgIGJvb2wgc3lzdGVtX3Jlc2V0X2FsbG93ZWQ7Cj4gPiA+ID4gICAgICAgICAvKiogSXMgZG9t
YWluIGFsbG93ZWQgdG8gc3VzcGVuZCB0aGUgc3lzdGVtICovCj4gPiA+ID4gICAgICAgICBib29s
IHN5c3RlbV9zdXNwZW5kX2FsbG93ZWQ7Cj4gPiA+ID4gKyAgICAgICAvKiogSGFyZHdhcmUgaXNv
bGF0aW9uIGNvbnRleHRzIGZvciByZWdpc3RlcmVkIG1lY2hhbmlzbXMgKi8KPiA+ID4gPiArICAg
ICAgIHN0cnVjdCBzYmlfaHdpc29fZG9tYWluX2N0eCAqaHdpc29fY3R4czsKPiA+ID4gPiArICAg
ICAgIHUzMiBod2lzb19jdHhfY291bnQ7Cj4gPiA+Cj4gPiA+IFdlIGFscmVhZHkgaGF2ZSBzYmlf
ZG9tYWluX2RhdGEgQVBJcyB0byBhbGxvdyBhbnkgcGFydAo+ID4gPiBvZiBPcGVuU0JJIGNyZWF0
ZSBwZXItZG9tYWluIGRhdGEgc28gd2Ugc2hvdWxkIHJlLXVzZQo+ID4gPiBBUElzIGZvciBhZGRp
bmcgbW9yZSBpbmZvcm1hdGlvbiBwYXJzZWQgZnJvbSBEVCBhdCBib290LXRpbWUuCj4gPiA+Cj4g
PiA+ID4gICAgICAgICAvKiogSWRlbnRpZmllcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGZpcm13
YXJlIHJlZ2lvbiAqLwo+ID4gPiA+ICAgICAgICAgYm9vbCBmd19yZWdpb25faW5pdGVkOwo+ID4g
PiA+ICB9Owo+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3NiaS9zYmlfaHdpc28uaCBiL2lu
Y2x1ZGUvc2JpL3NiaV9od2lzby5oCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4g
PiBpbmRleCAwMDAwMDAwMC4uMWVmZGI4YzEKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4g
KysrIGIvaW5jbHVkZS9zYmkvc2JpX2h3aXNvLmgKPiA+ID4gPiBAQCAtMCwwICsxLDU2IEBACj4g
PiA+ID4gKy8qCj4gPiA+ID4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1
c2UKPiA+ID4gPiArICoKPiA+ID4gPiArICogU3lzdGVtLWxldmVsIGhhcmR3YXJlIGlzb2xhdGlv
biBmcmFtZXdvcmsKPiA+ID4gPiArICoKPiA+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDI2IFJJ
U0NzdGFyIFNvbHV0aW9ucyBDb3Jwb3JhdGlvbi4KPiA+ID4gPiArICoKPiA+ID4gPiArICogQXV0
aG9yOiBSYXltb25kIE1hbyA8cmF5bW9uZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4gPiA+ICsgKi8K
PiA+ID4gPiArCj4gPiA+ID4gKyNpZm5kZWYgX19TQklfSFdJU09fSF9fCj4gPiA+ID4gKyNkZWZp
bmUgX19TQklfSFdJU09fSF9fCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSA8c2JpL3NiaV90
eXBlcy5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8c2JpL3NiaV9kb21haW4uaD4KPiA+ID4gPiArCj4g
PiA+ID4gK3N0cnVjdCBzYmlfaHdpc29fb3BzIHsKPiA+ID4gPiArICAgICAgIGNvbnN0IGNoYXIg
Km5hbWU7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgLyogQm9vdC10aW1lIGluaXQgKi8KPiA+
ID4gPiArICAgICAgIGludCAoKmluaXQpKHZvaWQgKmZkdCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsg
ICAgICAgLyogUGVyLWRvbWFpbiBpbml0IChkb21haW5fb2Zmc2V0IHJlZmVycyB0byBkb21haW4g
aW5zdGFuY2Ugbm9kZSkgKi8KPiA+ID4gPiArICAgICAgIGludCAoKmRvbWFpbl9pbml0KSh2b2lk
ICpmZHQsIGludCBkb21haW5fb2Zmc2V0LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzYmlfZG9tYWluICpkb20sIHZvaWQgKipjdHgpOwo+ID4gPiA+ICsKPiA+ID4g
PiArICAgICAgIC8qIEJlZm9yZSBzd2l0Y2hpbmcgYXdheSBmcm9tIGEgZG9tYWluICovCj4gPiA+
ID4gKyAgICAgICB2b2lkICgqZG9tYWluX2V4aXQpKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpz
cmMsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlf
ZG9tYWluICpkc3QsIHZvaWQgKmN0eCk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgLyogQWZ0
ZXIgc3dpdGNoaW5nIGludG8gYSBkb21haW4gKi8KPiA+ID4gPiArICAgICAgIHZvaWQgKCpkb21h
aW5fZW50ZXIpKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpkc3QsCj4gPiA+ID4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2JpX2RvbWFpbiAqc3JjLCB2b2lkICpj
dHgpOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIC8qIE9wdGlvbmFsIGNsZWFudXAgKi8KPiA+
ID4gPiArICAgICAgIHZvaWQgKCpkb21haW5fY2xlYW51cCkoc3RydWN0IHNiaV9kb21haW4gKmRv
bSwgdm9pZCAqY3R4KTsKPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCBzYmlf
aHdpc29fZG9tYWluX2N0eCB7Cj4gPiA+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNv
X29wcyAqb3BzOwo+ID4gPiA+ICsgICAgICAgdm9pZCAqY3R4Owo+ID4gPiA+ICt9Owo+ID4gPiA+
ICsKPiA+ID4gPiAraW50IHNiaV9od2lzb19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNv
X29wcyAqb3BzKTsKPiA+ID4gPiArCj4gPiA+ID4gK2ludCBzYmlfaHdpc29faW5pdCh2b2lkICpm
ZHQpOwo+ID4gPiA+ICtpbnQgc2JpX2h3aXNvX2RvbWFpbl9pbml0KHZvaWQgKmZkdCwgaW50IGRv
bWFpbl9vZmZzZXQsCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Jp
X2RvbWFpbiAqZG9tKTsKPiA+ID4gPiArCj4gPiA+ID4gK3ZvaWQgc2JpX2h3aXNvX2RvbWFpbl9l
eGl0KGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpzcmMsCj4gPiA+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKmRzdCk7Cj4gPiA+ID4gK3ZvaWQg
c2JpX2h3aXNvX2RvbWFpbl9lbnRlcihjb25zdCBzdHJ1Y3Qgc2JpX2RvbWFpbiAqZHN0LAo+ID4g
PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2JpX2RvbWFpbiAq
c3JjKTsKPiA+ID4gPiArdm9pZCBzYmlfaHdpc29fZG9tYWluX2NsZWFudXAoc3RydWN0IHNiaV9k
b21haW4gKmRvbSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsjZW5kaWYgLyogX19TQklfSFdJU09fSF9f
ICovCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9zYmkvb2JqZWN0cy5tayBiL2xpYi9zYmkvb2Jq
ZWN0cy5tawo+ID4gPiA+IGluZGV4IGNhMzEyZWUyLi42MDkxNDk5YSAxMDA2NDQKPiA+ID4gPiAt
LS0gYS9saWIvc2JpL29iamVjdHMubWsKPiA+ID4gPiArKysgYi9saWIvc2JpL29iamVjdHMubWsK
PiA+ID4gPiBAQCAtNzIsNiArNzIsNyBAQCBsaWJzYmktb2Jqcy15ICs9IHNiaV9kb21haW4ubwo+
ID4gPiA+ICBsaWJzYmktb2Jqcy15ICs9IHNiaV9lbXVsYXRlX2Nzci5vCj4gPiA+ID4gIGxpYnNi
aS1vYmpzLXkgKz0gc2JpX2ZpZm8ubwo+ID4gPiA+ICBsaWJzYmktb2Jqcy15ICs9IHNiaV9oYXJ0
Lm8KPiA+ID4gPiArbGlic2JpLW9ianMteSArPSBzYmlfaHdpc28ubwo+ID4gPiA+ICBsaWJzYmkt
b2Jqcy15ICs9IHNiaV9oZWFwLm8KPiA+ID4gPiAgbGlic2JpLW9ianMteSArPSBzYmlfbWF0aC5v
Cj4gPiA+ID4gIGxpYnNiaS1vYmpzLXkgKz0gc2JpX2hmZW5jZS5vCj4gPiA+ID4gZGlmZiAtLWdp
dCBhL2xpYi9zYmkvc2JpX2h3aXNvLmMgYi9saWIvc2JpL3NiaV9od2lzby5jCj4gPiA+ID4gbmV3
IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiBpbmRleCAwMDAwMDAwMC4uNmM5NmRjM2UKPiA+ID4g
PiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gKysrIGIvbGliL3NiaS9zYmlfaHdpc28uYwo+ID4gPiA+
IEBAIC0wLDAgKzEsMTc1IEBACj4gPiA+ID4gKy8qCj4gPiA+ID4gKyAqIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKPiA+ID4gPiArICoKPiA+ID4gPiArICogU3lzdGVtLWxl
dmVsIGhhcmR3YXJlIGlzb2xhdGlvbiBmcmFtZXdvcmsKPiA+ID4gPiArICoKPiA+ID4gPiArICog
Q29weXJpZ2h0IChjKSAyMDI2IFJJU0NzdGFyIFNvbHV0aW9ucyBDb3Jwb3JhdGlvbi4KPiA+ID4g
PiArICoKPiA+ID4gPiArICogQXV0aG9yOiBSYXltb25kIE1hbyA8cmF5bW9uZC5tYW9AcmlzY3N0
YXIuY29tPgo+ID4gPiA+ICsgKi8KPiA+ID4gPiArCj4gPiA+ID4gKyNpbmNsdWRlIDxsaWJmZHQu
aD4KPiA+ID4gPiArI2luY2x1ZGUgPHNiaS9zYmlfZXJyb3IuaD4KPiA+ID4gPiArI2luY2x1ZGUg
PHNiaS9zYmlfaGVhcC5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8c2JpL3NiaV9od2lzby5oPgo+ID4g
PiA+ICsjaW5jbHVkZSA8c2JpL3NiaV9saXN0Lmg+Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3Qg
c2JpX2h3aXNvX25vZGUgewo+ID4gPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHNiaV9od2lzb19v
cHMgKm9wczsKPiA+ID4gPiArICAgICAgIHN0cnVjdCBzYmlfZGxpc3Qgbm9kZTsKPiA+ID4gPiAr
fTsKPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBTQklfTElTVF9IRUFEKGh3aXNvX29wc19saXN0
KTsKPiA+ID4gPiArc3RhdGljIHUzMiBod2lzb19vcHNfY291bnQ7Cj4gPiA+ID4gKwo+ID4gPiA+
ICtzdGF0aWMgYm9vbCBod2lzb19vcHNfcmVnaXN0ZXJlZChjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNv
X29wcyAqb3BzKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25v
ZGUgKmVudHJ5Owo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHNiaV9saXN0X2Zvcl9lYWNoX2Vu
dHJ5KGVudHJ5LCAmaHdpc29fb3BzX2xpc3QsIG5vZGUpIHsKPiA+ID4gPiArICAgICAgICAgICAg
ICAgaWYgKGVudHJ5LT5vcHMgPT0gb3BzKQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAg
IHJldHVybiBmYWxzZTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiAraW50IHNiaV9od2lz
b19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNvX29wcyAqb3BzKQo+ID4gPiA+ICt7Cj4g
PiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKm5vZGU7Cj4gPiA+ID4gKwo+ID4g
PiA+ICsgICAgICAgaWYgKCFvcHMgfHwgIW9wcy0+bmFtZSkKPiA+ID4gPiArICAgICAgICAgICAg
ICAgcmV0dXJuIFNCSV9FSU5WQUw7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKGh3aXNv
X29wc19yZWdpc3RlcmVkKG9wcykpCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBTQklf
RUFMUkVBRFk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgbm9kZSA9IHNiaV96YWxsb2Moc2l6
ZW9mKCpub2RlKSk7Cj4gPiA+ID4gKyAgICAgICBpZiAoIW5vZGUpCj4gPiA+ID4gKyAgICAgICAg
ICAgICAgIHJldHVybiBTQklfRU5PTUVNOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIG5vZGUt
Pm9wcyA9IG9wczsKPiA+ID4gPiArICAgICAgIFNCSV9JTklUX0xJU1RfSEVBRCgmbm9kZS0+bm9k
ZSk7Cj4gPiA+ID4gKyAgICAgICBzYmlfbGlzdF9hZGRfdGFpbCgmbm9kZS0+bm9kZSwgJmh3aXNv
X29wc19saXN0KTsKPiA+ID4gPiArICAgICAgIGh3aXNvX29wc19jb3VudCsrOwo+ID4gPiA+ICsK
PiA+ID4gPiArICAgICAgIHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtp
bnQgc2JpX2h3aXNvX2luaXQodm9pZCAqZmR0KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBz
dHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKmVudHJ5Owo+ID4gPiA+ICsgICAgICAgaW50IHJjOwo+ID4g
PiA+ICsKPiA+ID4gPiArICAgICAgIHNiaV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaHdp
c29fb3BzX2xpc3QsIG5vZGUpIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFlbnRyeS0+
b3BzLT5pbml0KQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4g
PiA+ICsKPiA+ID4gPiArICAgICAgICAgICAgICAgcmMgPSBlbnRyeS0+b3BzLT5pbml0KGZkdCk7
Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiA+ID4gPiArICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmM7Cj4gPiA+ID4gKyAgICAgICB9Cj4gPiA+ID4gKwo+ID4gPiA+ICsg
ICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK2ludCBzYmlfaHdp
c29fZG9tYWluX2luaXQodm9pZCAqZmR0LCBpbnQgZG9tYWluX29mZnNldCwKPiA+ID4gPiArICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYmlfZG9tYWluICpkb20pCj4gPiA+ID4gK3sK
PiA+ID4gPiArICAgICAgIHN0cnVjdCBzYmlfaHdpc29fbm9kZSAqZW50cnk7Cj4gPiA+ID4gKyAg
ICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX2RvbWFpbl9jdHggKmN0eHM7Cj4gPiA+ID4gKyAgICAgICB2
b2lkICpjdHg7Cj4gPiA+ID4gKyAgICAgICB1MzIgaWR4ID0gMDsKPiA+ID4gPiArICAgICAgIGlu
dCByYzsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAoIWRvbSkKPiA+ID4gPiArICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKCFod2lzb19v
cHNfY291bnQpCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gPiA+ICsKPiA+
ID4gPiArICAgICAgIGN0eHMgPSBzYmlfY2FsbG9jKHNpemVvZigqY3R4cyksIGh3aXNvX29wc19j
b3VudCk7Cj4gPiA+ID4gKyAgICAgICBpZiAoIWN0eHMpCj4gPiA+ID4gKyAgICAgICAgICAgICAg
IHJldHVybiBTQklfRU5PTUVNOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGRvbS0+aHdpc29f
Y3R4cyA9IGN0eHM7Cj4gPiA+ID4gKyAgICAgICBkb20tPmh3aXNvX2N0eF9jb3VudCA9IGh3aXNv
X29wc19jb3VudDsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBzYmlfbGlzdF9mb3JfZWFjaF9l
bnRyeShlbnRyeSwgJmh3aXNvX29wc19saXN0LCBub2RlKSB7Cj4gPiA+ID4gKyAgICAgICAgICAg
ICAgIGN0eHNbaWR4XS5vcHMgPSBlbnRyeS0+b3BzOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBj
dHhzW2lkeF0uY3R4ID0gTlVMTDsKPiA+ID4gPiArICAgICAgICAgICAgICAgY3R4ID0gTlVMTDsK
PiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChlbnRyeS0+b3BzLT5kb21haW5f
aW5pdCkgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJjID0gZW50cnktPm9wcy0+
ZG9tYWluX2luaXQoZmR0LCBkb21haW5fb2Zmc2V0LAo+ID4gPiA+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLCAmY3R4KTsKPiA+ID4gPiAr
ICAgICAgICAgICAgICAgICAgICAgICBjdHhzW2lkeF0uY3R4ID0gY3R4Owo+ID4gPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyYykgewo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2JpX2h3aXNvX2RvbWFpbl9jbGVhbnVwKGRvbSk7Cj4gPiA+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gPiA+ID4gKyAgICAgICAgICAg
ICAgICAgICAgICAgfQo+ID4gPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiA+ID4gKwo+ID4gPiA+
ICsgICAgICAgICAgICAgICBjdHhzW2lkeF0uY3R4ID0gY3R4Owo+ID4gPiA+ICsgICAgICAgICAg
ICAgICBpZHgrKzsKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBy
ZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArdm9pZCBzYmlfaHdpc29fZG9t
YWluX2V4aXQoY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYywKPiA+ID4gPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2JpX2RvbWFpbiAqZHN0KQo+ID4gPiA+ICt7
Cj4gPiA+ID4gKyAgICAgICB1MzIgaTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAoIXNy
YyB8fCAhc3JjLT5od2lzb19jdHhzKQo+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4g
PiA+ID4gKwo+ID4gPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHNyYy0+aHdpc29fY3R4X2Nv
dW50OyBpKyspIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFzcmMtPmh3aXNvX2N0eHNb
aV0ub3BzIHx8Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAhc3JjLT5od2lzb19jdHhzW2ld
Lm9wcy0+ZG9tYWluX2V4aXQpCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgICAgICAgICBzcmMtPmh3aXNvX2N0eHNbaV0u
b3BzLT5kb21haW5fZXhpdCgKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3JjLCBkc3QsIHNyYy0+aHdpc29fY3R4c1tpXS5jdHgpOwo+ID4gPiA+ICsgICAg
ICAgfQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5f
ZW50ZXIoY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKmRzdCwKPiA+ID4gPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYykKPiA+ID4gPiArewo+
ID4gPiA+ICsgICAgICAgdTMyIGk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKCFkc3Qg
fHwgIWRzdC0+aHdpc29fY3R4cykKPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4g
PiA+ICsKPiA+ID4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkc3QtPmh3aXNvX2N0eF9jb3Vu
dDsgaSsrKSB7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmICghZHN0LT5od2lzb19jdHhzW2ld
Lm9wcyB8fAo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIWRzdC0+aHdpc29fY3R4c1tpXS5v
cHMtPmRvbWFpbl9lbnRlcikKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGRzdC0+aHdpc29fY3R4c1tpXS5v
cHMtPmRvbWFpbl9lbnRlcigKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHN0LCBzcmMsIGRzdC0+aHdpc29fY3R4c1tpXS5jdHgpOwo+ID4gPiA+ICsgICAg
ICAgfQo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5f
Y2xlYW51cChzdHJ1Y3Qgc2JpX2RvbWFpbiAqZG9tKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAg
ICB1MzIgaTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICAgICBpZiAoIWRvbSB8fCAhZG9tLT5od2lz
b19jdHhzKQo+ID4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ID4gKwo+ID4gPiA+
ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGRvbS0+aHdpc29fY3R4X2NvdW50OyBpKyspIHsKPiA+
ID4gPiArICAgICAgICAgICAgICAgaWYgKCFkb20tPmh3aXNvX2N0eHNbaV0ub3BzIHx8Cj4gPiA+
ID4gKyAgICAgICAgICAgICAgICAgICAhZG9tLT5od2lzb19jdHhzW2ldLm9wcy0+ZG9tYWluX2Ns
ZWFudXApCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ID4g
Kwo+ID4gPiA+ICsgICAgICAgICAgICAgICBkb20tPmh3aXNvX2N0eHNbaV0ub3BzLT5kb21haW5f
Y2xlYW51cCgKPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tLCBkb20tPmh3aXNvX2N0eHNbaV0uY3R4KTsKPiA+ID4gPiArICAgICAgIH0KPiA+ID4gPiAr
Cj4gPiA+ID4gKyAgICAgICBzYmlfZnJlZShkb20tPmh3aXNvX2N0eHMpOwo+ID4gPiA+ICsgICAg
ICAgZG9tLT5od2lzb19jdHhzID0gTlVMTDsKPiA+ID4gPiArICAgICAgIGRvbS0+aHdpc29fY3R4
X2NvdW50ID0gMDsKPiA+ID4gPiArfQo+ID4gPiA+IC0tCj4gPiA+ID4gMi4yNS4xCj4gPiA+ID4K
PiA+ID4KPiA+ID4gTGV0IG1lIHNlbmQgYSBzZXBhcmF0ZSBzZXJpZXMgc2hvd2luZyBob3cgdG8g
ZXh0ZW5kCj4gPiA+IHNiaV9oYXJ0X2lzb2xhdGlvbiBhcyBzdWdnZXN0ZWQgYWJvdmUuCj4gPiA+
Cj4gPgo+ID4gSSBqdXN0IHBvc3RlZCB0aGUgc2VyaWVzIHRvIGV4dGVuZCB0aGUgZXhpc3Rpbmcg
aGFydCBwcm90ZWN0aW9uCj4gPiBhYnN0cmFjdGlvbi4KPiA+Cj4gPiBSZWZlciwgcGF0Y2ggc2Vy
aWVzICJbUEFUQ0ggMC81XSBFeHRlbmQgaGFydCBwcm90ZWN0aW9uIGFic3RyYWN0aW9uCj4gPiBm
b3IgSUQgY29uZmlndXJhdGlvbiIKPiA+Cj4KPiBJIGFtIHBsYW5uaW5nIHRvIHBvc3QgYSB2MiB0
byByZWJhc2Ugb24geW91ciBoYXJ0IHByb3RlY3Rpb24KPiBhYnN0cmFjdGlvbiwgYW5kIHNxdWFz
aCB0aGUgaG9va3Mgb2YgbXkgdjEgYXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IKPiBpc29sYXRpb24g
bWVjaGFuaXNtcyAoZS5nLiBXRywgUE1QLCAuLi4pIHRvIHVzZS4KPiBJcyB0aGlzIHBsYW4gZ29v
ZCBmb3IgeW91Pwo+CgpUaGUgc2JpX2RvbWFpbl9kYXRhIGhvb2tzIGFyZSBxdWlldCBzdWl0YWJs
ZSBmb3IgV0cgY2hlY2tlcgphbmQgc2JpX2hhcnRfcHJvdGVjdGlvbiBob29rcyBhcmUgcXVpZXQg
c3VpdGFibGUgZm9yIFdHIElTQQpzdXBwb3J0LiBJIGRvbid0IGJlbGlldmUgd2UgbmVlZCBhbnkg
b3RoZXIgaG9va3MKCkFsc28sIHdlIGhhdmUga2VwdCBGRFQgdXNhZ2UgYW5kIEZEVCBiYXNlZCBk
cml2ZXJzCmNvbnRhaW5lZCB1bmRlciBsaWIvdXRpbHMgc28gaG9va3MgaW4gbGliL3NiaSB0YWtp
bmcgZmR0CnBhcmFtZXRlciBkb2VzIG5vdCBhbGlnbiB3aXRoIGN1cnJlbnQgd2F5IG9mIGltcGxl
bWVudGluZwpGRFQgYmFzZWQgZHJpdmVycy4KClJlZ2FyZHMsCkFudXAKCi0tIApvcGVuc2JpIG1h
aWxpbmcgbGlzdApvcGVuc2JpQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh
ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9vcGVuc2JpCg==