Re: [PATCH v2 068/110] nilfs2: replace PRIino with %llu/%llx format strings

Viacheslav Dubeyko <[email protected]> Mon, 2 Mar 2026 22:38:40 +0000
Newsgroups org.kernel.vger.autofs,dev.linux.lists.fsverity,dev.linux.lists.netfs,dev.linux.lists.ntfs3,dev.linux.lists.nvdimm,dev.linux.lists.ocfs2-devel,dev.linux.lists.v9fs,net.sourceforge.lists.linux-f2fs-devel,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-mtd,org.kernel.vger.audit,org.kernel.vger.bpf,org.kernel.vger.ceph-devel,org.kernel.vger.ecryptfs,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-can,org.kernel.vger.linux-cifs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fscrypt,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-hams,org.kernel.vger.linux-integrity,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media,org.kernel.vger.linux-nfs,org.kernel.vger.linux-nilfs,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-sctp,org.kernel.vger.linux-security-module,org.kernel.vger.linux-trace-kernel,org.kernel.vger.linux-unionfs,org.kernel.vger.linux-x25,org.kernel.vger.linux-xfs,org.kernel.vger.netdev,org.kernel.vger.selinux,org.kvack.linux-mm
Message-ID <[email protected]>
T24gTW9uLCAyMDI2LTAzLTAyIGF0IDE1OjI0IC0wNTAwLCBKZWZmIExheXRvbiB3cm90ZToNCj4g
Tm93IHRoYXQgaV9pbm8gaXMgdTY0IGFuZCB0aGUgUFJJaW5vIGZvcm1hdCBtYWNybyBoYXMgYmVl
biByZW1vdmVkLA0KPiByZXBsYWNlIGFsbCB1c2VzIGluIG5pbGZzMiB3aXRoIHRoZSBjb25jcmV0
ZSBmb3JtYXQgc3RyaW5ncy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEplZmYgTGF5dG9uIDxqbGF5
dG9uQGtlcm5lbC5vcmc+DQo+IC0tLQ0KPiAgZnMvbmlsZnMyL2FsbG9jLmMgICB8IDEwICsrKysr
LS0tLS0NCj4gIGZzL25pbGZzMi9ibWFwLmMgICAgfCAgMiArLQ0KPiAgZnMvbmlsZnMyL2J0bm9k
ZS5jICB8ICAyICstDQo+ICBmcy9uaWxmczIvYnRyZWUuYyAgIHwgMTIgKysrKysrLS0tLS0tDQo+
ICBmcy9uaWxmczIvZGlyLmMgICAgIHwgMTIgKysrKysrLS0tLS0tDQo+ICBmcy9uaWxmczIvZGly
ZWN0LmMgIHwgIDQgKystLQ0KPiAgZnMvbmlsZnMyL2djaW5vZGUuYyB8ICAyICstDQo+ICBmcy9u
aWxmczIvaW5vZGUuYyAgIHwgIDggKysrKy0tLS0NCj4gIGZzL25pbGZzMi9tZHQuYyAgICAgfCAg
MiArLQ0KPiAgZnMvbmlsZnMyL25hbWVpLmMgICB8ICAyICstDQo+ICBmcy9uaWxmczIvc2VnbWVu
dC5jIHwgIDIgKy0NCj4gIDExIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDI5IGRl
bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9hbGxvYy5jIGIvZnMvbmls
ZnMyL2FsbG9jLmMNCj4gaW5kZXggYTNjNTU5Yzg2ZTVhNGM2M2IxYzlkZDRjYTEzN2YyNDc0OWMz
ZWU4Ny4uN2IxY2QyYmFlZmNmMjFlNTRmOTI2MDg0NWIwMmM3Yzk1YzE0OGM2NCAxMDA2NDQNCj4g
LS0tIGEvZnMvbmlsZnMyL2FsbG9jLmMNCj4gKysrIGIvZnMvbmlsZnMyL2FsbG9jLmMNCj4gQEAg
LTcwNyw3ICs3MDcsNyBAQCB2b2lkIG5pbGZzX3BhbGxvY19jb21taXRfZnJlZV9lbnRyeShzdHJ1
Y3QgaW5vZGUgKmlub2RlLA0KPiAgDQo+ICAJaWYgKCFuaWxmc19jbGVhcl9iaXRfYXRvbWljKGxv
Y2ssIGdyb3VwX29mZnNldCwgYml0bWFwKSkNCj4gIAkJbmlsZnNfd2Fybihpbm9kZS0+aV9zYiwN
Cj4gLQkJCSAgICIlcyAoaW5vPSUiIFBSSWlubyAidSk6IGVudHJ5IG51bWJlciAlbGx1IGFscmVh
ZHkgZnJlZWQiLA0KPiArCQkJICAgIiVzIChpbm89JWxsdSk6IGVudHJ5IG51bWJlciAlbGx1IGFs
cmVhZHkgZnJlZWQiLA0KPiAgCQkJICAgX19mdW5jX18sIGlub2RlLT5pX2lubywNCj4gIAkJCSAg
ICh1bnNpZ25lZCBsb25nIGxvbmcpcmVxLT5wcl9lbnRyeV9ucik7DQo+ICAJZWxzZQ0KPiBAQCAt
NzQ4LDcgKzc0OCw3IEBAIHZvaWQgbmlsZnNfcGFsbG9jX2Fib3J0X2FsbG9jX2VudHJ5KHN0cnVj
dCBpbm9kZSAqaW5vZGUsDQo+ICANCj4gIAlpZiAoIW5pbGZzX2NsZWFyX2JpdF9hdG9taWMobG9j
aywgZ3JvdXBfb2Zmc2V0LCBiaXRtYXApKQ0KPiAgCQluaWxmc193YXJuKGlub2RlLT5pX3NiLA0K
PiAtCQkJICAgIiVzIChpbm89JSIgUFJJaW5vICJ1KTogZW50cnkgbnVtYmVyICVsbHUgYWxyZWFk
eSBmcmVlZCIsDQo+ICsJCQkgICAiJXMgKGlubz0lbGx1KTogZW50cnkgbnVtYmVyICVsbHUgYWxy
ZWFkeSBmcmVlZCIsDQo+ICAJCQkgICBfX2Z1bmNfXywgaW5vZGUtPmlfaW5vLA0KPiAgCQkJICAg
KHVuc2lnbmVkIGxvbmcgbG9uZylyZXEtPnByX2VudHJ5X25yKTsNCj4gIAllbHNlDQo+IEBAIC04
NjEsNyArODYxLDcgQEAgaW50IG5pbGZzX3BhbGxvY19mcmVldihzdHJ1Y3QgaW5vZGUgKmlub2Rl
LCBfX3U2NCAqZW50cnlfbnJzLCBzaXplX3Qgbml0ZW1zKQ0KPiAgCQkJaWYgKCFuaWxmc19jbGVh
cl9iaXRfYXRvbWljKGxvY2ssIGdyb3VwX29mZnNldCwNCj4gIAkJCQkJCSAgICBiaXRtYXApKSB7
DQo+ICAJCQkJbmlsZnNfd2Fybihpbm9kZS0+aV9zYiwNCj4gLQkJCQkJICAgIiVzIChpbm89JSIg
UFJJaW5vICJ1KTogZW50cnkgbnVtYmVyICVsbHUgYWxyZWFkeSBmcmVlZCIsDQo+ICsJCQkJCSAg
ICIlcyAoaW5vPSVsbHUpOiBlbnRyeSBudW1iZXIgJWxsdSBhbHJlYWR5IGZyZWVkIiwNCj4gIAkJ
CQkJICAgX19mdW5jX18sIGlub2RlLT5pX2lubywNCj4gIAkJCQkJICAgKHVuc2lnbmVkIGxvbmcg
bG9uZyllbnRyeV9ucnNbal0pOw0KPiAgCQkJfSBlbHNlIHsNCj4gQEAgLTkwNiw3ICs5MDYsNyBA
QCBpbnQgbmlsZnNfcGFsbG9jX2ZyZWV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTY0ICplbnRy
eV9ucnMsIHNpemVfdCBuaXRlbXMpDQo+ICAJCQkJCQkJICAgICAgbGFzdF9ucnNba10pOw0KPiAg
CQkJaWYgKHJldCAmJiByZXQgIT0gLUVOT0VOVCkNCj4gIAkJCQluaWxmc193YXJuKGlub2RlLT5p
X3NiLA0KPiAtCQkJCQkgICAiZXJyb3IgJWQgZGVsZXRpbmcgYmxvY2sgdGhhdCBvYmplY3QgKGVu
dHJ5PSVsbHUsIGlubz0lIiBQUklpbm8gInUpIGJlbG9uZ3MgdG8iLA0KPiArCQkJCQkgICAiZXJy
b3IgJWQgZGVsZXRpbmcgYmxvY2sgdGhhdCBvYmplY3QgKGVudHJ5PSVsbHUsIGlubz0lbGx1KSBi
ZWxvbmdzIHRvIiwNCj4gIAkJCQkJICAgcmV0LCAodW5zaWduZWQgbG9uZyBsb25nKWxhc3RfbnJz
W2tdLA0KPiAgCQkJCQkgICBpbm9kZS0+aV9pbm8pOw0KPiAgCQl9DQo+IEBAIC05MjMsNyArOTIz
LDcgQEAgaW50IG5pbGZzX3BhbGxvY19mcmVldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX3U2NCAq
ZW50cnlfbnJzLCBzaXplX3Qgbml0ZW1zKQ0KPiAgCQkJcmV0ID0gbmlsZnNfcGFsbG9jX2RlbGV0
ZV9iaXRtYXBfYmxvY2soaW5vZGUsIGdyb3VwKTsNCj4gIAkJCWlmIChyZXQgJiYgcmV0ICE9IC1F
Tk9FTlQpDQo+ICAJCQkJbmlsZnNfd2Fybihpbm9kZS0+aV9zYiwNCj4gLQkJCQkJICAgImVycm9y
ICVkIGRlbGV0aW5nIGJpdG1hcCBibG9jayBvZiBncm91cD0lbHUsIGlubz0lIiBQUklpbm8gInUi
LA0KPiArCQkJCQkgICAiZXJyb3IgJWQgZGVsZXRpbmcgYml0bWFwIGJsb2NrIG9mIGdyb3VwPSVs
dSwgaW5vPSVsbHUiLA0KPiAgCQkJCQkgICByZXQsIGdyb3VwLCBpbm9kZS0+aV9pbm8pOw0KPiAg
CQl9DQo+ICAJfQ0KPiBkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2JtYXAuYyBiL2ZzL25pbGZzMi9i
bWFwLmMNCj4gaW5kZXggZTEyOTc5YmFjM2MzZWU1ZWI3ZmNjMmJmMTU2ZmU2ZTQ4ZmM2NWE3ZC4u
ODI0ZjJiZDkxYzE2Nzk2NWVjM2E2NjAyMDJiNmU2YzVmMWZlMDA3ZSAxMDA2NDQNCj4gLS0tIGEv
ZnMvbmlsZnMyL2JtYXAuYw0KPiArKysgYi9mcy9uaWxmczIvYm1hcC5jDQo+IEBAIC0zMyw3ICsz
Myw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfYm1hcF9jb252ZXJ0X2Vycm9yKHN0cnVjdCBuaWxmc19i
bWFwICpibWFwLA0KPiAgDQo+ICAJaWYgKGVyciA9PSAtRUlOVkFMKSB7DQo+ICAJCV9fbmlsZnNf
ZXJyb3IoaW5vZGUtPmlfc2IsIGZuYW1lLA0KPiAtCQkJICAgICAgImJyb2tlbiBibWFwIChpbm9k
ZSBudW1iZXI9JSIgUFJJaW5vICJ1KSIsIGlub2RlLT5pX2lubyk7DQo+ICsJCQkgICAgICAiYnJv
a2VuIGJtYXAgKGlub2RlIG51bWJlcj0lbGx1KSIsIGlub2RlLT5pX2lubyk7DQo+ICAJCWVyciA9
IC1FSU87DQo+ICAJfQ0KPiAgCXJldHVybiBlcnI7DQo+IGRpZmYgLS1naXQgYS9mcy9uaWxmczIv
YnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMNCj4gaW5kZXggM2Q2NGYzYTkyMjNlNTYwMWRj
MjMzMmFlNmUxMDA3ZWRkNWI0ODI3Yi4uMmU1NTNkNjk4ZDBmMzk4MGRlOThmY2VkNDE1ZGZkODE5
ZGRiY2EwYSAxMDA2NDQNCj4gLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jDQo+ICsrKyBiL2ZzL25p
bGZzMi9idG5vZGUuYw0KPiBAQCAtNjQsNyArNjQsNyBAQCBuaWxmc19idG5vZGVfY3JlYXRlX2Js
b2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jLCBfX3U2NCBibG9ja25yKQ0KPiAgCQkgKiBj
bGVhcmluZyBvZiBhbiBhYmFuZG9uZWQgYi10cmVlIG5vZGUgaXMgbWlzc2luZyBzb21ld2hlcmUp
Lg0KPiAgCQkgKi8NCj4gIAkJbmlsZnNfZXJyb3IoaW5vZGUtPmlfc2IsDQo+IC0JCQkgICAgInN0
YXRlIGluY29uc2lzdGVuY3kgcHJvYmFibHkgZHVlIHRvIGR1cGxpY2F0ZSB1c2Ugb2YgYi10cmVl
IG5vZGUgYmxvY2sgYWRkcmVzcyAlbGx1IChpbm89JSIgUFJJaW5vICJ1KSIsDQo+ICsJCQkgICAg
InN0YXRlIGluY29uc2lzdGVuY3kgcHJvYmFibHkgZHVlIHRvIGR1cGxpY2F0ZSB1c2Ugb2YgYi10
cmVlIG5vZGUgYmxvY2sgYWRkcmVzcyAlbGx1IChpbm89JWxsdSkiLA0KPiAgCQkJICAgICh1bnNp
Z25lZCBsb25nIGxvbmcpYmxvY2tuciwgaW5vZGUtPmlfaW5vKTsNCj4gIAkJZ290byBmYWlsZWQ7
DQo+ICAJfQ0KPiBkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0cmVlLmMgYi9mcy9uaWxmczIvYnRy
ZWUuYw0KPiBpbmRleCA1NzE2M2U5OTFmYmM0OWUyYmZiYTJmYTU0M2YxYjhkYmQ3NzcxOGY0Li4z
YzAzZjVhNzQxZDE0NGQyMmQxZmZiNWFjZjQzYTAzNWU4OGMwMGRjIDEwMDY0NA0KPiAtLS0gYS9m
cy9uaWxmczIvYnRyZWUuYw0KPiArKysgYi9mcy9uaWxmczIvYnRyZWUuYw0KPiBAQCAtMzUzLDcg
KzM1Myw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbm9kZV9icm9rZW4oY29uc3Qgc3RydWN0
IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsDQo+ICAJCSAgICAgbmNoaWxkcmVuIDw9IDAgfHwNCj4g
IAkJICAgICBuY2hpbGRyZW4gPiBOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NQVgoc2l6ZSkp
KSB7DQo+ICAJCW5pbGZzX2NyaXQoaW5vZGUtPmlfc2IsDQo+IC0JCQkgICAiYmFkIGJ0cmVlIG5v
ZGUgKGlubz0lIiBQUklpbm8gInUsIGJsb2NrbnI9JWxsdSk6IGxldmVsID0gJWQsIGZsYWdzID0g
MHgleCwgbmNoaWxkcmVuID0gJWQiLA0KPiArCQkJICAgImJhZCBidHJlZSBub2RlIChpbm89JWxs
dSwgYmxvY2tucj0lbGx1KTogbGV2ZWwgPSAlZCwgZmxhZ3MgPSAweCV4LCBuY2hpbGRyZW4gPSAl
ZCIsDQo+ICAJCQkgICBpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2tuciwg
bGV2ZWwsDQo+ICAJCQkgICBmbGFncywgbmNoaWxkcmVuKTsNCj4gIAkJcmV0ID0gMTsNCj4gQEAg
LTM4NCw3ICszODQsNyBAQCBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Jvb3RfYnJva2VuKGNvbnN0
IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLA0KPiAgCQkgICAgIG5jaGlsZHJlbiA+IE5J
TEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCB8fA0KPiAgCQkgICAgIChuY2hpbGRyZW4gPT0g
MCAmJiBsZXZlbCA+IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOKSkpIHsNCj4gIAkJbmlsZnNf
Y3JpdChpbm9kZS0+aV9zYiwNCj4gLQkJCSAgICJiYWQgYnRyZWUgcm9vdCAoaW5vPSUiIFBSSWlu
byAidSk6IGxldmVsID0gJWQsIGZsYWdzID0gMHgleCwgbmNoaWxkcmVuID0gJWQiLA0KPiArCQkJ
ICAgImJhZCBidHJlZSByb290IChpbm89JWxsdSk6IGxldmVsID0gJWQsIGZsYWdzID0gMHgleCwg
bmNoaWxkcmVuID0gJWQiLA0KPiAgCQkJICAgaW5vZGUtPmlfaW5vLCBsZXZlbCwgZmxhZ3MsIG5j
aGlsZHJlbik7DQo+ICAJCXJldCA9IDE7DQo+ICAJfQ0KPiBAQCAtNDUzLDcgKzQ1Myw3IEBAIHN0
YXRpYyBpbnQgbmlsZnNfYnRyZWVfYmFkX25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0
cmVlLA0KPiAgCWlmICh1bmxpa2VseShuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKSAh
PSBsZXZlbCkpIHsNCj4gIAkJZHVtcF9zdGFjaygpOw0KPiAgCQluaWxmc19jcml0KGJ0cmVlLT5i
X2lub2RlLT5pX3NiLA0KPiAtCQkJICAgImJ0cmVlIGxldmVsIG1pc21hdGNoIChpbm89JSIgUFJJ
aW5vICJ1KTogJWQgIT0gJWQiLA0KPiArCQkJICAgImJ0cmVlIGxldmVsIG1pc21hdGNoIChpbm89
JWxsdSk6ICVkICE9ICVkIiwNCj4gIAkJCSAgIGJ0cmVlLT5iX2lub2RlLT5pX2lubywNCj4gIAkJ
CSAgIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpLCBsZXZlbCk7DQo+ICAJCXJldHVy
biAxOw0KPiBAQCAtNTIxLDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgX19uaWxmc19idHJlZV9nZXRf
YmxvY2soY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLCBfX3U2NCBwdHIsDQo+ICAgb3V0
X25vX3dhaXQ6DQo+ICAJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7DQo+ICAJCW5pbGZzX2Vy
cihidHJlZS0+Yl9pbm9kZS0+aV9zYiwNCj4gLQkJCSAgIkkvTyBlcnJvciByZWFkaW5nIGItdHJl
ZSBub2RlIGJsb2NrIChpbm89JSIgUFJJaW5vICJ1LCBibG9ja25yPSVsbHUpIiwNCj4gKwkJCSAg
IkkvTyBlcnJvciByZWFkaW5nIGItdHJlZSBub2RlIGJsb2NrIChpbm89JWxsdSwgYmxvY2tucj0l
bGx1KSIsDQo+ICAJCQkgIGJ0cmVlLT5iX2lub2RlLT5pX2lubywgKHVuc2lnbmVkIGxvbmcgbG9u
ZylwdHIpOw0KPiAgCQlicmVsc2UoYmgpOw0KPiAgCQlyZXR1cm4gLUVJTzsNCj4gQEAgLTIxMDQs
NyArMjEwNCw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlKHN0cnVjdCBuaWxm
c19ibWFwICpidHJlZSwNCj4gIAlpZiAocmV0IDwgMCkgew0KPiAgCQlpZiAodW5saWtlbHkocmV0
ID09IC1FTk9FTlQpKSB7DQo+ICAJCQluaWxmc19jcml0KGJ0cmVlLT5iX2lub2RlLT5pX3NiLA0K
PiAtCQkJCSAgICJ3cml0aW5nIG5vZGUvbGVhZiBibG9jayBkb2VzIG5vdCBhcHBlYXIgaW4gYi10
cmVlIChpbm89JSIgUFJJaW5vICJ1KSBhdCBrZXk9JWxsdSwgbGV2ZWw9JWQiLA0KPiArCQkJCSAg
ICJ3cml0aW5nIG5vZGUvbGVhZiBibG9jayBkb2VzIG5vdCBhcHBlYXIgaW4gYi10cmVlIChpbm89
JWxsdSkgYXQga2V5PSVsbHUsIGxldmVsPSVkIiwNCj4gIAkJCQkgICBidHJlZS0+Yl9pbm9kZS0+
aV9pbm8sDQo+ICAJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylrZXksIGxldmVsKTsNCj4gIAkJ
CXJldCA9IC1FSU5WQUw7DQo+IEBAIC0yMTQ2LDcgKzIxNDYsNyBAQCBzdGF0aWMgdm9pZCBuaWxm
c19idHJlZV9hZGRfZGlydHlfYnVmZmVyKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwNCj4gIAkg
ICAgbGV2ZWwgPj0gTklMRlNfQlRSRUVfTEVWRUxfTUFYKSB7DQo+ICAJCWR1bXBfc3RhY2soKTsN
Cj4gIAkJbmlsZnNfd2FybihidHJlZS0+Yl9pbm9kZS0+aV9zYiwNCj4gLQkJCSAgICJpbnZhbGlk
IGJ0cmVlIGxldmVsOiAlZCAoa2V5PSVsbHUsIGlubz0lIiBQUklpbm8gInUsIGJsb2NrbnI9JWxs
dSkiLA0KPiArCQkJICAgImludmFsaWQgYnRyZWUgbGV2ZWw6ICVkIChrZXk9JWxsdSwgaW5vPSVs
bHUsIGJsb2NrbnI9JWxsdSkiLA0KPiAgCQkJICAgbGV2ZWwsICh1bnNpZ25lZCBsb25nIGxvbmcp
a2V5LA0KPiAgCQkJICAgYnRyZWUtPmJfaW5vZGUtPmlfaW5vLA0KPiAgCQkJICAgKHVuc2lnbmVk
IGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXIu
YyBiL2ZzL25pbGZzMi9kaXIuYw0KPiBpbmRleCBiMTgyZGEwNzZjNThjNDgxMzE0NWJjM2U1MDFh
MWU5YTE4OGJjZTg1Li4zNjUzZGI1Y2RiNjUxMzdkMWU2NjBiYjUwOWMxNGVjNGNiYzg4NDBiIDEw
MDY0NA0KPiAtLS0gYS9mcy9uaWxmczIvZGlyLmMNCj4gKysrIGIvZnMvbmlsZnMyL2Rpci5jDQo+
IEBAIC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGJvb2wgbmlsZnNfY2hlY2tfZm9saW8oc3RydWN0
IGZvbGlvICpmb2xpbywgY2hhciAqa2FkZHIpDQo+ICANCj4gIEViYWRzaXplOg0KPiAgCW5pbGZz
X2Vycm9yKHNiLA0KPiAtCQkgICAgInNpemUgb2YgZGlyZWN0b3J5ICMlIiBQUklpbm8gInUgaXMg
bm90IGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSIsDQo+ICsJCSAgICAic2l6ZSBvZiBkaXJlY3Rv
cnkgIyVsbHUgaXMgbm90IGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSIsDQo+ICAJCSAgICBkaXIt
PmlfaW5vKTsNCj4gIAlnb3RvIGZhaWw7DQo+ICBFc2hvcnQ6DQo+IEBAIC0xNjksNyArMTY5LDcg
QEAgc3RhdGljIGJvb2wgbmlsZnNfY2hlY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgY2hh
ciAqa2FkZHIpDQo+ICAJZXJyb3IgPSAiZGlzYWxsb3dlZCBpbm9kZSBudW1iZXIiOw0KPiAgYmFk
X2VudHJ5Og0KPiAgCW5pbGZzX2Vycm9yKHNiLA0KPiAtCQkgICAgImJhZCBlbnRyeSBpbiBkaXJl
Y3RvcnkgIyUiIFBSSWlubyAidTogJXMgLSBvZmZzZXQ9JWx1LCBpbm9kZT0lbHUsIHJlY19sZW49
JXpkLCBuYW1lX2xlbj0lZCIsDQo+ICsJCSAgICAiYmFkIGVudHJ5IGluIGRpcmVjdG9yeSAjJWxs
dTogJXMgLSBvZmZzZXQ9JWx1LCBpbm9kZT0lbHUsIHJlY19sZW49JXpkLCBuYW1lX2xlbj0lZCIs
DQo+ICAJCSAgICBkaXItPmlfaW5vLCBlcnJvciwgKGZvbGlvLT5pbmRleCA8PCBQQUdFX1NISUZU
KSArIG9mZnMsDQo+ICAJCSAgICAodW5zaWduZWQgbG9uZylsZTY0X3RvX2NwdShwLT5pbm9kZSks
DQo+ICAJCSAgICByZWNfbGVuLCBwLT5uYW1lX2xlbik7DQo+IEBAIC0xNzcsNyArMTc3LDcgQEAg
c3RhdGljIGJvb2wgbmlsZnNfY2hlY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgY2hhciAq
a2FkZHIpDQo+ICBFZW5kOg0KPiAgCXAgPSAoc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqKShrYWRk
ciArIG9mZnMpOw0KPiAgCW5pbGZzX2Vycm9yKHNiLA0KPiAtCQkgICAgImVudHJ5IGluIGRpcmVj
dG9yeSAjJSIgUFJJaW5vICJ1IHNwYW5zIHRoZSBwYWdlIGJvdW5kYXJ5IG9mZnNldD0lbHUsIGlu
b2RlPSVsdSIsDQo+ICsJCSAgICAiZW50cnkgaW4gZGlyZWN0b3J5ICMlbGx1IHNwYW5zIHRoZSBw
YWdlIGJvdW5kYXJ5IG9mZnNldD0lbHUsIGlub2RlPSVsdSIsDQo+ICAJCSAgICBkaXItPmlfaW5v
LCAoZm9saW8tPmluZGV4IDw8IFBBR0VfU0hJRlQpICsgb2ZmcywNCj4gIAkJICAgICh1bnNpZ25l
ZCBsb25nKWxlNjRfdG9fY3B1KHAtPmlub2RlKSk7DQo+ICBmYWlsOg0KPiBAQCAtMjUxLDcgKzI1
MSw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0
IGRpcl9jb250ZXh0ICpjdHgpDQo+ICANCj4gIAkJa2FkZHIgPSBuaWxmc19nZXRfZm9saW8oaW5v
ZGUsIG4sICZmb2xpbyk7DQo+ICAJCWlmIChJU19FUlIoa2FkZHIpKSB7DQo+IC0JCQluaWxmc19l
cnJvcihzYiwgImJhZCBwYWdlIGluICMlIiBQUklpbm8gInUiLCBpbm9kZS0+aV9pbm8pOw0KPiAr
CQkJbmlsZnNfZXJyb3Ioc2IsICJiYWQgcGFnZSBpbiAjJWxsdSIsIGlub2RlLT5pX2lubyk7DQo+
ICAJCQljdHgtPnBvcyArPSBQQUdFX1NJWkUgLSBvZmZzZXQ7DQo+ICAJCQlyZXR1cm4gLUVJTzsN
Cj4gIAkJfQ0KPiBAQCAtMzM2LDcgKzMzNiw3IEBAIHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKm5p
bGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsDQo+ICAJCS8qIG5leHQgZm9saW8gaXMg
cGFzdCB0aGUgYmxvY2tzIHdlJ3ZlIGdvdCAqLw0KPiAgCQlpZiAodW5saWtlbHkobiA+IChkaXIt
PmlfYmxvY2tzID4+IChQQUdFX1NISUZUIC0gOSkpKSkgew0KPiAgCQkJbmlsZnNfZXJyb3IoZGly
LT5pX3NiLA0KPiAtCQkJICAgICAgICJkaXIgJSIgUFJJaW5vICJ1IHNpemUgJWxsZCBleGNlZWRz
IGJsb2NrIGNvdW50ICVsbHUiLA0KPiArCQkJICAgICAgICJkaXIgJWxsdSBzaXplICVsbGQgZXhj
ZWVkcyBibG9jayBjb3VudCAlbGx1IiwNCj4gIAkJCSAgICAgICBkaXItPmlfaW5vLCBkaXItPmlf
c2l6ZSwNCj4gIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpci0+aV9ibG9ja3MpOw0K
PiAgCQkJZ290byBvdXQ7DQo+IEBAIC0zODIsNyArMzgyLDcgQEAgc3RydWN0IG5pbGZzX2Rpcl9l
bnRyeSAqbmlsZnNfZG90ZG90KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZm9saW8gKipmb2xp
b3ApDQo+ICAJcmV0dXJuIG5leHRfZGU7DQo+ICANCj4gIGZhaWw6DQo+IC0JbmlsZnNfZXJyb3Io
ZGlyLT5pX3NiLCAiZGlyZWN0b3J5ICMlIiBQUklpbm8gInUgJXMiLCBkaXItPmlfaW5vLCBtc2cp
Ow0KPiArCW5pbGZzX2Vycm9yKGRpci0+aV9zYiwgImRpcmVjdG9yeSAjJWxsdSAlcyIsIGRpci0+
aV9pbm8sIG1zZyk7DQo+ICAJZm9saW9fcmVsZWFzZV9rbWFwKGZvbGlvLCBkZSk7DQo+ICAJcmV0
dXJuIE5VTEw7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyZWN0LmMgYi9mcy9u
aWxmczIvZGlyZWN0LmMNCj4gaW5kZXggMTA4NGQ0ZDU4NmUwNzhhYjY4MjUxNjc5NzZkZDJhNzFk
NTJiYzhhYS4uOGJkMGIxMzc0ZTI1ZjhmZjUxMGYzYjM2ZGJkZTJhY2MwMWFhZmMxZSAxMDA2NDQN
Cj4gLS0tIGEvZnMvbmlsZnMyL2RpcmVjdC5jDQo+ICsrKyBiL2ZzL25pbGZzMi9kaXJlY3QuYw0K
PiBAQCAtMzM4LDcgKzMzOCw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2Fzc2lnbihzdHJ1
Y3QgbmlsZnNfYm1hcCAqYm1hcCwNCj4gIAlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShi
bWFwLCAqYmgpOw0KPiAgCWlmICh1bmxpa2VseShrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCkp
IHsNCj4gIAkJbmlsZnNfY3JpdChibWFwLT5iX2lub2RlLT5pX3NiLA0KPiAtCQkJICAgIiVzIChp
bm89JSIgUFJJaW5vICJ1KTogaW52YWxpZCBrZXk6ICVsbHUiLA0KPiArCQkJICAgIiVzIChpbm89
JWxsdSk6IGludmFsaWQga2V5OiAlbGx1IiwNCj4gIAkJCSAgIF9fZnVuY19fLA0KPiAgCQkJICAg
Ym1hcC0+Yl9pbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpa2V5KTsNCj4gIAkJcmV0
dXJuIC1FSU5WQUw7DQo+IEBAIC0zNDYsNyArMzQ2LDcgQEAgc3RhdGljIGludCBuaWxmc19kaXJl
Y3RfYXNzaWduKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLA0KPiAgCXB0ciA9IG5pbGZzX2RpcmVj
dF9nZXRfcHRyKGJtYXAsIGtleSk7DQo+ICAJaWYgKHVubGlrZWx5KHB0ciA9PSBOSUxGU19CTUFQ
X0lOVkFMSURfUFRSKSkgew0KPiAgCQluaWxmc19jcml0KGJtYXAtPmJfaW5vZGUtPmlfc2IsDQo+
IC0JCQkgICAiJXMgKGlubz0lIiBQUklpbm8gInUpOiBpbnZhbGlkIHBvaW50ZXI6ICVsbHUiLA0K
PiArCQkJICAgIiVzIChpbm89JWxsdSk6IGludmFsaWQgcG9pbnRlcjogJWxsdSIsDQo+ICAJCQkg
ICBfX2Z1bmNfXywNCj4gIAkJCSAgIGJtYXAtPmJfaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9u
ZyBsb25nKXB0cik7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmls
ZnMyL2djaW5vZGUuYyBiL2ZzL25pbGZzMi9nY2lub2RlLmMNCj4gaW5kZXggNzE0OTYyZDAxMGRh
NGEyM2U5YjVmNDBkZThhYWFjYThiOTVhNzRkYS4uNjJkNGMxYjc4N2U5NWM5NjFhMzYwYTQyMTRk
NjIxZDU2NGFkOGI0YyAxMDA2NDQNCj4gLS0tIGEvZnMvbmlsZnMyL2djaW5vZGUuYw0KPiArKysg
Yi9mcy9uaWxmczIvZ2Npbm9kZS5jDQo+IEBAIC0xMzcsNyArMTM3LDcgQEAgaW50IG5pbGZzX2dj
Y2FjaGVfd2FpdF9hbmRfbWFya19kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQ0KPiAgCQlz
dHJ1Y3QgaW5vZGUgKmlub2RlID0gYmgtPmJfZm9saW8tPm1hcHBpbmctPmhvc3Q7DQo+ICANCj4g
IAkJbmlsZnNfZXJyKGlub2RlLT5pX3NiLA0KPiAtCQkJICAiSS9PIGVycm9yIHJlYWRpbmcgJXMg
YmxvY2sgZm9yIEdDIChpbm89JSIgUFJJaW5vICJ1LCB2YmxvY2tucj0lbGx1KSIsDQo+ICsJCQkg
ICJJL08gZXJyb3IgcmVhZGluZyAlcyBibG9jayBmb3IgR0MgKGlubz0lbGx1LCB2YmxvY2tucj0l
bGx1KSIsDQo+ICAJCQkgIGJ1ZmZlcl9uaWxmc19ub2RlKGJoKSA/ICJub2RlIiA6ICJkYXRhIiwN
Cj4gIAkJCSAgaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIp
Ow0KPiAgCQlyZXR1cm4gLUVJTzsNCj4gZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIv
ZnMvbmlsZnMyL2lub2RlLmMNCj4gaW5kZXggMGJjMWM1MTQxZWM1OTZiM2MzMWU3ZDE4ZTRiYTM1
NDFiZjYxODQwNi4uNTFmN2UxMjVhMzExYjg2ODg2MGUzZTExMTcwMGQ0OWQ0Y2I5OGZhNiAxMDA2
NDQNCj4gLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMNCj4gKysrIGIvZnMvbmlsZnMyL2lub2RlLmMN
Cj4gQEAgLTEwOCw3ICsxMDgsNyBAQCBpbnQgbmlsZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAq
aW5vZGUsIHNlY3Rvcl90IGJsa29mZiwNCj4gIAkJCQkgKiBiZSBsb2NrZWQgaW4gdGhpcyBjYXNl
Lg0KPiAgCQkJCSAqLw0KPiAgCQkJCW5pbGZzX3dhcm4oaW5vZGUtPmlfc2IsDQo+IC0JCQkJCSAg
ICIlcyAoaW5vPSUiIFBSSWlubyAidSk6IGEgcmFjZSBjb25kaXRpb24gd2hpbGUgaW5zZXJ0aW5n
IGEgZGF0YSBibG9jayBhdCBvZmZzZXQ9JWxsdSIsDQo+ICsJCQkJCSAgICIlcyAoaW5vPSVsbHUp
OiBhIHJhY2UgY29uZGl0aW9uIHdoaWxlIGluc2VydGluZyBhIGRhdGEgYmxvY2sgYXQgb2Zmc2V0
PSVsbHUiLA0KPiAgCQkJCQkgICBfX2Z1bmNfXywgaW5vZGUtPmlfaW5vLA0KPiAgCQkJCQkgICAo
dW5zaWduZWQgbG9uZyBsb25nKWJsa29mZik7DQo+ICAJCQkJZXJyID0gLUVBR0FJTjsNCj4gQEAg
LTc4OSw3ICs3ODksNyBAQCBzdGF0aWMgdm9pZCBuaWxmc190cnVuY2F0ZV9ibWFwKHN0cnVjdCBu
aWxmc19pbm9kZV9pbmZvICppaSwNCj4gIAkJZ290byByZXBlYXQ7DQo+ICANCj4gIGZhaWxlZDoN
Cj4gLQluaWxmc193YXJuKGlpLT52ZnNfaW5vZGUuaV9zYiwgImVycm9yICVkIHRydW5jYXRpbmcg
Ym1hcCAoaW5vPSUiIFBSSWlubyAidSkiLA0KPiArCW5pbGZzX3dhcm4oaWktPnZmc19pbm9kZS5p
X3NiLCAiZXJyb3IgJWQgdHJ1bmNhdGluZyBibWFwIChpbm89JWxsdSkiLA0KPiAgCQkgICByZXQs
IGlpLT52ZnNfaW5vZGUuaV9pbm8pOw0KPiAgfQ0KPiAgDQo+IEBAIC0xMDI2LDcgKzEwMjYsNyBA
QCBpbnQgbmlsZnNfc2V0X2ZpbGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQg
aW50IG5yX2RpcnR5KQ0KPiAgCQkJICogdGhpcyBpbm9kZS4NCj4gIAkJCSAqLw0KPiAgCQkJbmls
ZnNfd2Fybihpbm9kZS0+aV9zYiwNCj4gLQkJCQkgICAiY2Fubm90IHNldCBmaWxlIGRpcnR5IChp
bm89JSIgUFJJaW5vICJ1KTogdGhlIGZpbGUgaXMgYmVpbmcgZnJlZWQiLA0KPiArCQkJCSAgICJj
YW5ub3Qgc2V0IGZpbGUgZGlydHkgKGlubz0lbGx1KTogdGhlIGZpbGUgaXMgYmVpbmcgZnJlZWQi
LA0KPiAgCQkJCSAgIGlub2RlLT5pX2lubyk7DQo+ICAJCQlzcGluX3VubG9jaygmbmlsZnMtPm5z
X2lub2RlX2xvY2spOw0KPiAgCQkJcmV0dXJuIC1FSU5WQUw7IC8qDQo+IEBAIC0xMDU3LDcgKzEw
NTcsNyBAQCBpbnQgX19uaWxmc19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUs
IGludCBmbGFncykNCj4gIAllcnIgPSBuaWxmc19sb2FkX2lub2RlX2Jsb2NrKGlub2RlLCAmaWJo
KTsNCj4gIAlpZiAodW5saWtlbHkoZXJyKSkgew0KPiAgCQluaWxmc193YXJuKGlub2RlLT5pX3Ni
LA0KPiAtCQkJICAgImNhbm5vdCBtYXJrIGlub2RlIGRpcnR5IChpbm89JSIgUFJJaW5vICJ1KTog
ZXJyb3IgJWQgbG9hZGluZyBpbm9kZSBibG9jayIsDQo+ICsJCQkgICAiY2Fubm90IG1hcmsgaW5v
ZGUgZGlydHkgKGlubz0lbGx1KTogZXJyb3IgJWQgbG9hZGluZyBpbm9kZSBibG9jayIsDQo+ICAJ
CQkgICBpbm9kZS0+aV9pbm8sIGVycik7DQo+ICAJCXJldHVybiBlcnI7DQo+ICAJfQ0KPiBkaWZm
IC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jDQo+IGluZGV4IDg2Mjlj
NzJiNjJkYjMzMjE3ZDQ3NDcxMjQ4ODViNmY3MjdmMTgyYmUuLjA5YWRiNDBjNjVlNTA1ZDkyMDEy
YTNkMmY1ZmU4YTU2OTZlMTAwNTYgMTAwNjQ0DQo+IC0tLSBhL2ZzL25pbGZzMi9tZHQuYw0KPiAr
KysgYi9mcy9uaWxmczIvbWR0LmMNCj4gQEAgLTIwMyw3ICsyMDMsNyBAQCBzdGF0aWMgaW50IG5p
bGZzX21kdF9yZWFkX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgYmxv
Y2ssDQo+ICAJZXJyID0gLUVJTzsNCj4gIAlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShmaXJzdF9iaCkp
IHsNCj4gIAkJbmlsZnNfZXJyKGlub2RlLT5pX3NiLA0KPiAtCQkJICAiSS9PIGVycm9yIHJlYWRp
bmcgbWV0YS1kYXRhIGZpbGUgKGlubz0lIiBQUklpbm8gInUsIGJsb2NrLW9mZnNldD0lbHUpIiwN
Cj4gKwkJCSAgIkkvTyBlcnJvciByZWFkaW5nIG1ldGEtZGF0YSBmaWxlIChpbm89JWxsdSwgYmxv
Y2stb2Zmc2V0PSVsdSkiLA0KPiAgCQkJICBpbm9kZS0+aV9pbm8sIGJsb2NrKTsNCj4gIAkJZ290
byBmYWlsZWRfYmg7DQo+ICAJfQ0KPiBkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL25hbWVpLmMgYi9m
cy9uaWxmczIvbmFtZWkuYw0KPiBpbmRleCAyOWVkYjg0YTA2NjNjYWE0YjI5ZmE0ODhjMDQ5NWZj
NTMzNThjYTAwLi40MGFjNjc5ZWM1NmU0MDBiMWRmOThlOWJlNmZlOWNhMzM4YTliYTUxIDEwMDY0
NA0KPiAtLS0gYS9mcy9uaWxmczIvbmFtZWkuYw0KPiArKysgYi9mcy9uaWxmczIvbmFtZWkuYw0K
PiBAQCAtMjkyLDcgKzI5Miw3IEBAIHN0YXRpYyBpbnQgbmlsZnNfZG9fdW5saW5rKHN0cnVjdCBp
bm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpDQo+ICANCj4gIAlpZiAoIWlub2RlLT5p
X25saW5rKSB7DQo+ICAJCW5pbGZzX3dhcm4oaW5vZGUtPmlfc2IsDQo+IC0JCQkgICAiZGVsZXRp
bmcgbm9uZXhpc3RlbnQgZmlsZSAoaW5vPSUiIFBSSWlubyAidSksICVkIiwNCj4gKwkJCSAgICJk
ZWxldGluZyBub25leGlzdGVudCBmaWxlIChpbm89JWxsdSksICVkIiwNCj4gIAkJCSAgIGlub2Rl
LT5pX2lubywgaW5vZGUtPmlfbmxpbmspOw0KPiAgCQlzZXRfbmxpbmsoaW5vZGUsIDEpOw0KPiAg
CX0NCj4gZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmMgYi9mcy9uaWxmczIvc2VnbWVu
dC5jDQo+IGluZGV4IDlhOGJjM2ZhMzVjZTliNDQ3YWJiYzJmYjU2Y2JkMmIwY2M1Zjc2ZGUuLjRi
MWJmNTU5ZjM1MjRiMWNjMzk2NWRhZTlmZDNlNTc0NTcxODU2OWQgMTAwNjQ0DQo+IC0tLSBhL2Zz
L25pbGZzMi9zZWdtZW50LmMNCj4gKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuYw0KPiBAQCAtMjAy
NCw3ICsyMDI0LDcgQEAgc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NvbGxlY3RfZGlydHlfZmls
ZXMoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwNCj4gIAkJCQlpZmlsZSwgaWktPnZmc19pbm9k
ZS5pX2lubywgJmliaCk7DQo+ICAJCQlpZiAodW5saWtlbHkoZXJyKSkgew0KPiAgCQkJCW5pbGZz
X3dhcm4oc2NpLT5zY19zdXBlciwNCj4gLQkJCQkJICAgImxvZyB3cml0ZXI6IGVycm9yICVkIGdl
dHRpbmcgaW5vZGUgYmxvY2sgKGlubz0lIiBQUklpbm8gInUpIiwNCj4gKwkJCQkJICAgImxvZyB3
cml0ZXI6IGVycm9yICVkIGdldHRpbmcgaW5vZGUgYmxvY2sgKGlubz0lbGx1KSIsDQo+ICAJCQkJ
CSAgIGVyciwgaWktPnZmc19pbm9kZS5pX2lubyk7DQo+ICAJCQkJcmV0dXJuIGVycjsNCj4gIAkJ
CX0NCg0KUmV2aWV3ZWQtYnk6IFZpYWNoZXNsYXYgRHViZXlrbyA8c2xhdmFAZHViZXlrby5jb20+
DQoNClRoYW5rcywNClNsYXZhLg0KDQo=