From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH 4/5] x86/hvm: Misc non-functional cleanup to the HVM_PARAM infrastructure Date: Thu, 6 Sep 2018 09:26:08 +0000 Message-ID: References: <1536171124-27053-1-git-send-email-andrew.cooper3@citrix.com> <1536171124-27053-5-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1536171124-27053-5-git-send-email-andrew.cooper3@citrix.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Stefano Stabellini , Wei Liu , Andrew Cooper , Julien Grall , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmRyZXcgQ29vcGVyIFttYWls dG86YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbV0NCj4gU2VudDogMDUgU2VwdGVtYmVyIDIwMTgg MTk6MTINCj4gVG86IFhlbi1kZXZlbCA8eGVuLWRldmVsQGxpc3RzLnhlbi5vcmc+DQo+IENjOiBB bmRyZXcgQ29vcGVyIDxBbmRyZXcuQ29vcGVyM0BjaXRyaXguY29tPjsgSmFuIEJldWxpY2gNCj4g PEpCZXVsaWNoQHN1c2UuY29tPjsgV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT47IFJvZ2Vy IFBhdSBNb25uZQ0KPiA8cm9nZXIucGF1QGNpdHJpeC5jb20+OyBQYXVsIER1cnJhbnQgPFBhdWwu RHVycmFudEBjaXRyaXguY29tPjsgU3RlZmFubw0KPiBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBr ZXJuZWwub3JnPjsgSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU3ViamVj dDogW1BBVENIIDQvNV0geDg2L2h2bTogTWlzYyBub24tZnVuY3Rpb25hbCBjbGVhbnVwIHRvIHRo ZQ0KPiBIVk1fUEFSQU0gaW5mcmFzdHJ1Y3R1cmUNCj4gDQo+IFRoZSBwYXJhbWV0ZXIgbWFyc2hh bGxpbmcgYW5kIHhzbSBjaGVja3MgYXJlIGNvbW1vbiB0byBib3RoIHRoZSBzZXQgYW5kDQo+IGdl dA0KPiBwYXRocy4gIExpZnQgYWxsIG9mIHRoZSBjb21tb24gY29kZSBvdXQgaW50byBkb19odm1f b3AoKSBhbmQgbGV0DQo+IGh2bW9wX3tnZXQsc2V0fV9wYXJhbSgpIG9wZXJhdGUgb24gc3RydWN0 IHhlbl9odm1fcGFyYW0gZGlyZWN0bHkuDQo+IA0KPiBUaGlzIGlzIHNvbWV3aGF0IG5vaXN5IGlu IHRoZSBmdW5jdGlvbnMgYXMgZWFjaCBhLiByZWZlcmVuY2UgaGFzIHRvIGNoYW5nZSB0bw0KPiBh LT4gaW5zdGVhZC4NCj4gDQo+IEluIGFkZGl0aW9uLCBkcm9wIGFuIGVtcHR5IGRlZmF1bHQgc3Rh dGVtZW50LCBpbnNlcnQgbmV3bGluZXMgYXMgYXBwcm9wcmlhdGUNCj4gYmV0d2VlbiBjYXNlcywg YW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBJREVOVF9QVCBvbiB0aGUNCj4gZmFz dHBhdGgsDQo+IGJlY2F1c2UgdGhlIGNvbW1vbiBwYXRoIGFmdGVyIHRoZSBzd2l0Y2ggd2lsbCBt YWtlIHRoZSB1cGRhdGUuDQo+IA0KPiBObyBmdW5jdGlvbmFsIGNoYW5nZSwgYnV0IGEgbmV0IHNo cmluayBvZiAtMzI4IHRvIGRvX2h2bV9vcCgpLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQW5kcmV3 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4NCg0KUmV2aWV3ZWQtYnk6IFBhdWwg RHVycmFudCA8cGF1bC5kdXJyYW50QGNpdHJpeC5jb20+DQoNCj4gLS0tDQo+IENDOiBKYW4gQmV1 bGljaCA8SkJldWxpY2hAc3VzZS5jb20+DQo+IENDOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXgu Y29tPg0KPiBDQzogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+DQo+IEND OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPg0KPiBDQzogU3RlZmFubyBT dGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPg0KPiBDQzogSnVsaWVuIEdyYWxsIDxq dWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gLS0tDQo+ICB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jIHwg MjIzICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0NCj4gLS0tLS0tLS0t DQo+ICAxIGZpbGUgY2hhbmdlZCwgMTA0IGluc2VydGlvbnMoKyksIDExOSBkZWxldGlvbnMoLSkN Cj4gDQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2 L2h2bS9odm0uYw0KPiBpbmRleCA0MDhlNjk1Li5jODkxMjY5IDEwMDY0NA0KPiAtLS0gYS94ZW4v YXJjaC94ODYvaHZtL2h2bS5jDQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMNCj4gQEAg LTQwNjUsMTEgKzQwNjUsNyBAQCBzdGF0aWMgaW50IGh2bV9hbGxvd19zZXRfcGFyYW0oc3RydWN0 IGRvbWFpbiAqZCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgeGVuX2h2bV9wYXJhbSAqYSkNCj4gIHsNCj4gICAgICB1aW50NjRfdCB2YWx1ZSA9IGQtPmFy Y2guaHZtLnBhcmFtc1thLT5pbmRleF07DQo+IC0gICAgaW50IHJjOw0KPiAtDQo+IC0gICAgcmMg PSB4c21faHZtX3BhcmFtKFhTTV9UQVJHRVQsIGQsIEhWTU9QX3NldF9wYXJhbSk7DQo+IC0gICAg aWYgKCByYyApDQo+IC0gICAgICAgIHJldHVybiByYzsNCj4gKyAgICBpbnQgcmMgPSAwOw0KPiAN Cj4gICAgICBzd2l0Y2ggKCBhLT5pbmRleCApDQo+ICAgICAgew0KPiBAQCAtNDEzMyw2MiArNDEy OSw0NiBAQCBzdGF0aWMgaW50IGh2bV9hbGxvd19zZXRfcGFyYW0oc3RydWN0IGRvbWFpbg0KPiAq ZCwNCj4gICAgICAgICAgaWYgKCB2YWx1ZSAhPSAwICYmIGEtPnZhbHVlICE9IHZhbHVlICkNCj4g ICAgICAgICAgICAgIHJjID0gLUVFWElTVDsNCj4gICAgICAgICAgYnJlYWs7DQo+IC0gICAgZGVm YXVsdDoNCj4gLSAgICAgICAgYnJlYWs7DQo+ICAgICAgfQ0KPiANCj4gICAgICByZXR1cm4gcmM7 DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludCBodm1vcF9zZXRfcGFyYW0oDQo+IC0gICAgWEVOX0dV RVNUX0hBTkRMRV9QQVJBTSh4ZW5faHZtX3BhcmFtX3QpIGFyZykNCj4gK3N0YXRpYyBpbnQgaHZt b3Bfc2V0X3BhcmFtKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB4ZW5faHZtX3BhcmFtICphKQ0K PiAgew0KPiAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJfZCA9IGN1cnJlbnQtPmRvbWFpbjsNCj4g LSAgICBzdHJ1Y3QgeGVuX2h2bV9wYXJhbSBhOw0KPiAtICAgIHN0cnVjdCBkb21haW4gKmQ7DQo+ ICAgICAgc3RydWN0IHZjcHUgKnY7DQo+ICAgICAgaW50IHJjOw0KPiANCj4gLSAgICBpZiAoIGNv cHlfZnJvbV9ndWVzdCgmYSwgYXJnLCAxKSApDQo+IC0gICAgICAgIHJldHVybiAtRUZBVUxUOw0K PiAtDQo+IC0gICAgZCA9IHJjdV9sb2NrX2RvbWFpbl9ieV9hbnlfaWQoYS5kb21pZCk7DQo+IC0g ICAgaWYgKCBkID09IE5VTEwgKQ0KPiAtICAgICAgICByZXR1cm4gLUVTUkNIOw0KPiAtDQo+IC0g ICAgcmMgPSAtRUlOVkFMOw0KPiAtICAgIGlmICggIWlzX2h2bV9kb21haW4oZCkgKQ0KPiAtICAg ICAgICBnb3RvIG91dDsNCj4gLQ0KPiAtICAgIHJjID0gaHZtX2FsbG93X3NldF9wYXJhbShkLCAm YSk7DQo+ICsgICAgcmMgPSBodm1fYWxsb3dfc2V0X3BhcmFtKGQsIGEpOw0KPiAgICAgIGlmICgg cmMgKQ0KPiAgICAgICAgICBnb3RvIG91dDsNCj4gDQo+IC0gICAgc3dpdGNoICggYS5pbmRleCAp DQo+ICsgICAgc3dpdGNoICggYS0+aW5kZXggKQ0KPiAgICAgIHsNCj4gICAgICBjYXNlIEhWTV9Q QVJBTV9DQUxMQkFDS19JUlE6DQo+IC0gICAgICAgIGh2bV9zZXRfY2FsbGJhY2tfdmlhKGQsIGEu dmFsdWUpOw0KPiArICAgICAgICBodm1fc2V0X2NhbGxiYWNrX3ZpYShkLCBhLT52YWx1ZSk7DQo+ ICAgICAgICAgIGh2bV9sYXRjaF9zaGluZm9fc2l6ZShkKTsNCj4gICAgICAgICAgYnJlYWs7DQo+ ICsNCj4gICAgICBjYXNlIEhWTV9QQVJBTV9USU1FUl9NT0RFOg0KPiAtICAgICAgICBpZiAoIGEu dmFsdWUgPiBIVk1QVE1fb25lX21pc3NlZF90aWNrX3BlbmRpbmcgKQ0KPiArICAgICAgICBpZiAo IGEtPnZhbHVlID4gSFZNUFRNX29uZV9taXNzZWRfdGlja19wZW5kaW5nICkNCj4gICAgICAgICAg ICAgIHJjID0gLUVJTlZBTDsNCj4gICAgICAgICAgYnJlYWs7DQo+ICsNCj4gICAgICBjYXNlIEhW TV9QQVJBTV9WSVJJRElBTjoNCj4gLSAgICAgICAgaWYgKCAoYS52YWx1ZSAmIH5IVk1QVl9mZWF0 dXJlX21hc2spIHx8DQo+IC0gICAgICAgICAgICAgIShhLnZhbHVlICYgSFZNUFZfYmFzZV9mcmVx KSApDQo+ICsgICAgICAgIGlmICggKGEtPnZhbHVlICYgfkhWTVBWX2ZlYXR1cmVfbWFzaykgfHwN Cj4gKyAgICAgICAgICAgICAhKGEtPnZhbHVlICYgSFZNUFZfYmFzZV9mcmVxKSApDQo+ICAgICAg ICAgICAgICByYyA9IC1FSU5WQUw7DQo+ICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICAgICAgY2Fz ZSBIVk1fUEFSQU1fSURFTlRfUFQ6DQo+ICAgICAgICAgIC8qDQo+ICAgICAgICAgICAqIE9ubHkg YWN0dWFsbHkgcmVxdWlyZWQgZm9yIFZULXggbGFja2luZyB1bnJlc3RyaWN0ZWRfZ3Vlc3QNCj4g ICAgICAgICAgICogY2FwYWJpbGl0aWVzLiAgU2hvcnQgY2lyY3VpdCB0aGUgcGF1c2UgaWYgcG9z c2libGUuDQo+ICAgICAgICAgICAqLw0KPiAgICAgICAgICBpZiAoICFwYWdpbmdfbW9kZV9oYXAo ZCkgfHwgIWNwdV9oYXNfdm14ICkNCj4gLSAgICAgICAgew0KPiAtICAgICAgICAgICAgZC0+YXJj aC5odm0ucGFyYW1zW2EuaW5kZXhdID0gYS52YWx1ZTsNCj4gICAgICAgICAgICAgIGJyZWFrOw0K PiAtICAgICAgICB9DQo+IA0KPiAgICAgICAgICAvKg0KPiAgICAgICAgICAgKiBVcGRhdGUgR1VF U1RfQ1IzIGluIGVhY2ggVk1DUyB0byBwb2ludCBhdCBpZGVudGl0eSBtYXAuDQo+IEBAIC00MjAx LDExNyArNDE4MSwxMjMgQEAgc3RhdGljIGludCBodm1vcF9zZXRfcGFyYW0oDQo+IA0KPiAgICAg ICAgICByYyA9IDA7DQo+ICAgICAgICAgIGRvbWFpbl9wYXVzZShkKTsNCj4gLSAgICAgICAgZC0+ YXJjaC5odm0ucGFyYW1zW2EuaW5kZXhdID0gYS52YWx1ZTsNCj4gKyAgICAgICAgZC0+YXJjaC5o dm0ucGFyYW1zW2EtPmluZGV4XSA9IGEtPnZhbHVlOw0KPiAgICAgICAgICBmb3JfZWFjaF92Y3B1 ICggZCwgdiApDQo+ICAgICAgICAgICAgICBwYWdpbmdfdXBkYXRlX2NyMyh2LCBmYWxzZSk7DQo+ ICAgICAgICAgIGRvbWFpbl91bnBhdXNlKGQpOw0KPiANCj4gICAgICAgICAgZG9tY3RsX2xvY2tf cmVsZWFzZSgpOw0KPiAgICAgICAgICBicmVhazsNCj4gKw0KPiAgICAgIGNhc2UgSFZNX1BBUkFN X0RNX0RPTUFJTjoNCj4gICAgICAgICAgLyogVGhlIG9ubHkgdmFsdWUgdGhpcyBzaG91bGQgZXZl ciBiZSBzZXQgdG8gaXMgRE9NSURfU0VMRiAqLw0KPiAtICAgICAgICBpZiAoIGEudmFsdWUgIT0g RE9NSURfU0VMRiApDQo+ICsgICAgICAgIGlmICggYS0+dmFsdWUgIT0gRE9NSURfU0VMRiApDQo+ ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7DQo+IA0KPiAtICAgICAgICBhLnZhbHVlID0gY3Vy cl9kLT5kb21haW5faWQ7DQo+ICsgICAgICAgIGEtPnZhbHVlID0gY3Vycl9kLT5kb21haW5faWQ7 DQo+ICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fQUNQSV9TX1NU QVRFOg0KPiAgICAgICAgICByYyA9IDA7DQo+IC0gICAgICAgIGlmICggYS52YWx1ZSA9PSAzICkN Cj4gKyAgICAgICAgaWYgKCBhLT52YWx1ZSA9PSAzICkNCj4gICAgICAgICAgICAgIGh2bV9zM19z dXNwZW5kKGQpOw0KPiAtICAgICAgICBlbHNlIGlmICggYS52YWx1ZSA9PSAwICkNCj4gKyAgICAg ICAgZWxzZSBpZiAoIGEtPnZhbHVlID09IDAgKQ0KPiAgICAgICAgICAgICAgaHZtX3MzX3Jlc3Vt ZShkKTsNCj4gICAgICAgICAgZWxzZQ0KPiAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOw0KPiAt DQo+ICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fQUNQSV9JT1BP UlRTX0xPQ0FUSU9OOg0KPiAtICAgICAgICByYyA9IHBtdGltZXJfY2hhbmdlX2lvcG9ydChkLCBh LnZhbHVlKTsNCj4gKyAgICAgICAgcmMgPSBwbXRpbWVyX2NoYW5nZV9pb3BvcnQoZCwgYS0+dmFs dWUpOw0KPiAgICAgICAgICBicmVhazsNCj4gDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fTkVTVEVE SFZNOg0KPiAgICAgICAgICByYyA9IHhzbV9odm1fcGFyYW1fbmVzdGVkKFhTTV9QUklWLCBkKTsN Cj4gICAgICAgICAgaWYgKCByYyApDQo+ICAgICAgICAgICAgICBicmVhazsNCj4gLSAgICAgICAg aWYgKCBhLnZhbHVlID4gMSApDQo+ICsgICAgICAgIGlmICggYS0+dmFsdWUgPiAxICkNCj4gICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsNCj4gICAgICAgICAgLyoNCj4gICAgICAgICAgICogUmVt b3ZlIHRoZSBjaGVjayBiZWxvdyBvbmNlIHdlIGhhdmUNCj4gICAgICAgICAgICogc2hhZG93LW9u LXNoYWRvdy4NCj4gICAgICAgICAgICovDQo+IC0gICAgICAgIGlmICggIXBhZ2luZ19tb2RlX2hh cChkKSAmJiBhLnZhbHVlICkNCj4gKyAgICAgICAgaWYgKCAhcGFnaW5nX21vZGVfaGFwKGQpICYm IGEtPnZhbHVlICkNCj4gICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsNCj4gLSAgICAgICAgaWYg KCBhLnZhbHVlICYmDQo+ICsgICAgICAgIGlmICggYS0+dmFsdWUgJiYNCj4gICAgICAgICAgICAg ICBkLT5hcmNoLmh2bS5wYXJhbXNbSFZNX1BBUkFNX0FMVFAyTV0gKQ0KPiAgICAgICAgICAgICAg cmMgPSAtRUlOVkFMOw0KPiAgICAgICAgICAvKiBTZXQgdXAgTkhWTSBzdGF0ZSBmb3IgYW55IHZj cHVzIHRoYXQgYXJlIGFscmVhZHkgdXAuICovDQo+IC0gICAgICAgIGlmICggYS52YWx1ZSAmJg0K PiArICAgICAgICBpZiAoIGEtPnZhbHVlICYmDQo+ICAgICAgICAgICAgICAgIWQtPmFyY2guaHZt LnBhcmFtc1tIVk1fUEFSQU1fTkVTVEVESFZNXSApDQo+ICAgICAgICAgICAgICBmb3JfZWFjaF92 Y3B1KGQsIHYpDQo+ICAgICAgICAgICAgICAgICAgaWYgKCByYyA9PSAwICkNCj4gICAgICAgICAg ICAgICAgICAgICAgcmMgPSBuZXN0ZWRodm1fdmNwdV9pbml0aWFsaXNlKHYpOw0KPiAtICAgICAg ICBpZiAoICFhLnZhbHVlIHx8IHJjICkNCj4gKyAgICAgICAgaWYgKCAhYS0+dmFsdWUgfHwgcmMg KQ0KPiAgICAgICAgICAgICAgZm9yX2VhY2hfdmNwdShkLCB2KQ0KPiAgICAgICAgICAgICAgICAg IG5lc3RlZGh2bV92Y3B1X2Rlc3Ryb3kodik7DQo+ICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICAg ICAgY2FzZSBIVk1fUEFSQU1fQUxUUDJNOg0KPiAgICAgICAgICByYyA9IHhzbV9odm1fcGFyYW1f YWx0cDJtaHZtKFhTTV9QUklWLCBkKTsNCj4gICAgICAgICAgaWYgKCByYyApDQo+ICAgICAgICAg ICAgICBicmVhazsNCj4gLSAgICAgICAgaWYgKCBhLnZhbHVlID4gWEVOX0FMVFAyTV9saW1pdGVk ICkNCj4gKyAgICAgICAgaWYgKCBhLT52YWx1ZSA+IFhFTl9BTFRQMk1fbGltaXRlZCApDQo+ICAg ICAgICAgICAgICByYyA9IC1FSU5WQUw7DQo+IC0gICAgICAgIGlmICggYS52YWx1ZSAmJg0KPiAr ICAgICAgICBpZiAoIGEtPnZhbHVlICYmDQo+ICAgICAgICAgICAgICAgZC0+YXJjaC5odm0ucGFy YW1zW0hWTV9QQVJBTV9ORVNURURIVk1dICkNCj4gICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsN Cj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAgIGNhc2UgSFZNX1BBUkFNX1RSSVBMRV9GQVVM VF9SRUFTT046DQo+IC0gICAgICAgIGlmICggYS52YWx1ZSA+IFNIVVRET1dOX01BWCApDQo+ICsg ICAgICAgIGlmICggYS0+dmFsdWUgPiBTSFVURE9XTl9NQVggKQ0KPiAgICAgICAgICAgICAgcmMg PSAtRUlOVkFMOw0KPiAgICAgICAgICBicmVhazsNCj4gKw0KPiAgICAgIGNhc2UgSFZNX1BBUkFN X0lPUkVRX1NFUlZFUl9QRk46DQo+IC0gICAgICAgIGQtPmFyY2guaHZtLmlvcmVxX2dmbi5iYXNl ID0gYS52YWx1ZTsNCj4gKyAgICAgICAgZC0+YXJjaC5odm0uaW9yZXFfZ2ZuLmJhc2UgPSBhLT52 YWx1ZTsNCj4gICAgICAgICAgYnJlYWs7DQo+ICsNCj4gICAgICBjYXNlIEhWTV9QQVJBTV9OUl9J T1JFUV9TRVJWRVJfUEFHRVM6DQo+ICAgICAgew0KPiAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsN Cj4gDQo+IC0gICAgICAgIGlmICggYS52YWx1ZSA9PSAwIHx8DQo+IC0gICAgICAgICAgICAgYS52 YWx1ZSA+IHNpemVvZihkLT5hcmNoLmh2bS5pb3JlcV9nZm4ubWFzaykgKiA4ICkNCj4gKyAgICAg ICAgaWYgKCBhLT52YWx1ZSA9PSAwIHx8DQo+ICsgICAgICAgICAgICAgYS0+dmFsdWUgPiBzaXpl b2YoZC0+YXJjaC5odm0uaW9yZXFfZ2ZuLm1hc2spICogOCApDQo+ICAgICAgICAgIHsNCj4gICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsNCj4gICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAgICAg ICB9DQo+IC0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYS52YWx1ZTsgaSsrICkNCj4gKyAgICAg ICAgZm9yICggaSA9IDA7IGkgPCBhLT52YWx1ZTsgaSsrICkNCj4gICAgICAgICAgICAgIHNldF9i aXQoaSwgJmQtPmFyY2guaHZtLmlvcmVxX2dmbi5tYXNrKTsNCj4gDQo+ICAgICAgICAgIGJyZWFr Ow0KPiAgICAgIH0NCj4gKw0KPiAgICAgIGNhc2UgSFZNX1BBUkFNX1g4N19GSVBfV0lEVEg6DQo+ IC0gICAgICAgIGlmICggYS52YWx1ZSAhPSAwICYmIGEudmFsdWUgIT0gNCAmJiBhLnZhbHVlICE9 IDggKQ0KPiArICAgICAgICBpZiAoIGEtPnZhbHVlICE9IDAgJiYgYS0+dmFsdWUgIT0gNCAmJiBh LT52YWx1ZSAhPSA4ICkNCj4gICAgICAgICAgew0KPiAgICAgICAgICAgICAgcmMgPSAtRUlOVkFM Ow0KPiAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgICAgIH0NCj4gLSAgICAgICAgZC0+YXJj aC54ODdfZmlwX3dpZHRoID0gYS52YWx1ZTsNCj4gKyAgICAgICAgZC0+YXJjaC54ODdfZmlwX3dp ZHRoID0gYS0+dmFsdWU7DQo+ICAgICAgICAgIGJyZWFrOw0KPiANCj4gICAgICBjYXNlIEhWTV9Q QVJBTV9WTTg2X1RTUzoNCj4gICAgICAgICAgLyogSGFyZHdhcmUgd291bGQgc2lsZW50bHkgdHJ1 bmNhdGUgaGlnaCBiaXRzLiAqLw0KPiAtICAgICAgICBpZiAoIGEudmFsdWUgIT0gKHVpbnQzMl90 KWEudmFsdWUgKQ0KPiArICAgICAgICBpZiAoIGEtPnZhbHVlICE9ICh1aW50MzJfdClhLT52YWx1 ZSApDQo+ICAgICAgICAgIHsNCj4gICAgICAgICAgICAgIGlmICggZCA9PSBjdXJyX2QgKQ0KPiAg ICAgICAgICAgICAgICAgIGRvbWFpbl9jcmFzaChkKTsNCj4gICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsNCj4gICAgICAgICAgfQ0KPiAgICAgICAgICAvKiBPbGQgaHZtbG9hZGVyIGJpbmFyaWVz IGhhcmRjb2RlIHRoZSBzaXplIHRvIDEyOCBieXRlcy4gKi8NCj4gLSAgICAgICAgaWYgKCBhLnZh bHVlICkNCj4gLSAgICAgICAgICAgIGEudmFsdWUgfD0gKDEyOFVMTCA8PCAzMikgfCBWTTg2X1RT U19VUERBVEVEOw0KPiAtICAgICAgICBhLmluZGV4ID0gSFZNX1BBUkFNX1ZNODZfVFNTX1NJWkVE Ow0KPiArICAgICAgICBpZiAoIGEtPnZhbHVlICkNCj4gKyAgICAgICAgICAgIGEtPnZhbHVlIHw9 ICgxMjhVTEwgPDwgMzIpIHwgVk04Nl9UU1NfVVBEQVRFRDsNCj4gKyAgICAgICAgYS0+aW5kZXgg PSBIVk1fUEFSQU1fVk04Nl9UU1NfU0laRUQ7DQo+ICAgICAgICAgIGJyZWFrOw0KPiANCj4gICAg ICBjYXNlIEhWTV9QQVJBTV9WTTg2X1RTU19TSVpFRDoNCj4gLSAgICAgICAgaWYgKCAoYS52YWx1 ZSA+PiAzMikgPCBzaXplb2Yoc3RydWN0IHRzczMyKSApDQo+ICsgICAgICAgIGlmICggKGEtPnZh bHVlID4+IDMyKSA8IHNpemVvZihzdHJ1Y3QgdHNzMzIpICkNCj4gICAgICAgICAgew0KPiAgICAg ICAgICAgICAgaWYgKCBkID09IGN1cnJfZCApDQo+ICAgICAgICAgICAgICAgICAgZG9tYWluX2Ny YXNoKGQpOw0KPiBAQCAtNDMyMiw0MSArNDMwOCwzNCBAQCBzdGF0aWMgaW50IGh2bW9wX3NldF9w YXJhbSgNCj4gICAgICAgICAgICogMjU2IGJpdHMgaW50ZXJydXB0IHJlZGlyZWN0aW9uIGJpdG1h cCArIDY0ayBiaXRzIEkvTyBiaXRtYXANCj4gICAgICAgICAgICogcGx1cyBvbmUgcGFkZGluZyBi eXRlKS4NCj4gICAgICAgICAgICovDQo+IC0gICAgICAgIGlmICggKGEudmFsdWUgPj4gMzIpID4g c2l6ZW9mKHN0cnVjdCB0c3MzMikgKw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDEwMCAvIDgpICsgKDB4MTAwMDAgLyA4KSArIDEgKQ0KPiAtICAgICAgICAgICAgYS52YWx1 ZSA9ICh1aW50MzJfdClhLnZhbHVlIHwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAoKHNpemVv ZihzdHJ1Y3QgdHNzMzIpICsgKDB4MTAwIC8gOCkgKw0KPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMCAvIDgpICsgMSkgPDwgMzIpOw0KPiAt ICAgICAgICBhLnZhbHVlIHw9IFZNODZfVFNTX1VQREFURUQ7DQo+ICsgICAgICAgIGlmICggKGEt PnZhbHVlID4+IDMyKSA+IHNpemVvZihzdHJ1Y3QgdHNzMzIpICsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MTAwIC8gOCkgKyAoMHgxMDAwMCAvIDgpICsgMSApDQo+ICsg ICAgICAgICAgICBhLT52YWx1ZSA9ICh1aW50MzJfdClhLT52YWx1ZSB8DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICgoc2l6ZW9mKHN0cnVjdCB0c3MzMikgKyAoMHgxMDAgLyA4KSArDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMDAwMCAv IDgpICsgMSkgPDwgMzIpOw0KPiArICAgICAgICBhLT52YWx1ZSB8PSBWTTg2X1RTU19VUERBVEVE Ow0KPiAgICAgICAgICBicmVhazsNCj4gDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fTUNBX0NBUDoN Cj4gLSAgICAgICAgcmMgPSB2bWNlX2VuYWJsZV9tY2FfY2FwKGQsIGEudmFsdWUpOw0KPiArICAg ICAgICByYyA9IHZtY2VfZW5hYmxlX21jYV9jYXAoZCwgYS0+dmFsdWUpOw0KPiAgICAgICAgICBi cmVhazsNCj4gICAgICB9DQo+IA0KPiAgICAgIGlmICggcmMgIT0gMCApDQo+ICAgICAgICAgIGdv dG8gb3V0Ow0KPiANCj4gLSAgICBkLT5hcmNoLmh2bS5wYXJhbXNbYS5pbmRleF0gPSBhLnZhbHVl Ow0KPiArICAgIGQtPmFyY2guaHZtLnBhcmFtc1thLT5pbmRleF0gPSBhLT52YWx1ZTsNCj4gDQo+ ICAgICAgSFZNX0RCR19MT0coREJHX0xFVkVMX0hDQUxMLCAic2V0IHBhcmFtICV1ID0gJSJQUkl4 NjQsDQo+IC0gICAgICAgICAgICAgICAgYS5pbmRleCwgYS52YWx1ZSk7DQo+ICsgICAgICAgICAg ICAgICAgYS0+aW5kZXgsIGEtPnZhbHVlKTsNCj4gDQo+ICAgb3V0Og0KPiAtICAgIHJjdV91bmxv Y2tfZG9tYWluKGQpOw0KPiAgICAgIHJldHVybiByYzsNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50 IGh2bV9hbGxvd19nZXRfcGFyYW0oc3RydWN0IGRvbWFpbiAqZCwNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeGVuX2h2bV9wYXJhbSAqYSkNCj4gIHsNCj4g LSAgICBpbnQgcmM7DQo+IC0NCj4gLSAgICByYyA9IHhzbV9odm1fcGFyYW0oWFNNX1RBUkdFVCwg ZCwgSFZNT1BfZ2V0X3BhcmFtKTsNCj4gLSAgICBpZiAoIHJjICkNCj4gLSAgICAgICAgcmV0dXJu IHJjOw0KPiAtDQo+ICAgICAgc3dpdGNoICggYS0+aW5kZXggKQ0KPiAgICAgIHsNCj4gICAgICAg ICAgLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGNhbiBiZSByZWFkIGJ5IHRoZSBndWVzdCBh bmQgdG9vbHN0YWNrLiAqLw0KPiBAQCAtNDM3MSw3ICs0MzUwLDcgQEAgc3RhdGljIGludCBodm1f YWxsb3dfZ2V0X3BhcmFtKHN0cnVjdCBkb21haW4gKmQsDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1f Q09OU09MRV9FVlRDSE46DQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fQUxUUDJNOg0KPiAgICAgIGNh c2UgSFZNX1BBUkFNX1g4N19GSVBfV0lEVEg6DQo+IC0gICAgICAgIGJyZWFrOw0KPiArICAgICAg ICByZXR1cm4gMDsNCj4gDQo+ICAgICAgICAgIC8qDQo+ICAgICAgICAgICAqIFRoZSBmb2xsb3dp bmcgcGFyYW1ldGVycyBhcmUgaW50ZW5kZWQgZm9yIHRvb2xzdGFjayB1c2FnZSBvbmx5Lg0KPiBA QCAtNDM5Nyw1OSArNDM3Niw0MSBAQCBzdGF0aWMgaW50IGh2bV9hbGxvd19nZXRfcGFyYW0oc3Ry dWN0IGRvbWFpbg0KPiAqZCwNCj4gICAgICBjYXNlIEhWTV9QQVJBTV9JT1JFUV9TRVJWRVJfUEZO Og0KPiAgICAgIGNhc2UgSFZNX1BBUkFNX05SX0lPUkVRX1NFUlZFUl9QQUdFUzoNCj4gICAgICBj YXNlIEhWTV9QQVJBTV9NQ0FfQ0FQOg0KPiAtICAgICAgICBpZiAoIGQgPT0gY3VycmVudC0+ZG9t YWluICkNCj4gLSAgICAgICAgICAgIHJjID0gLUVQRVJNOw0KPiAtICAgICAgICBicmVhazsNCj4g KyAgICAgICAgcmV0dXJuIGQgPT0gY3VycmVudC0+ZG9tYWluID8gLUVQRVJNIDogMDsNCj4gDQo+ ICAgICAgICAgIC8qIEhvbGUsIGRlcHJlY2F0ZWQsIG9yIG91dC1vZi1yYW5nZS4gKi8NCj4gICAg ICBkZWZhdWx0Og0KPiAtICAgICAgICByYyA9IC1FSU5WQUw7DQo+IC0gICAgICAgIGJyZWFrOw0K PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gICAgICB9DQo+IC0NCj4gLSAgICByZXR1cm4g cmM7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludCBodm1vcF9nZXRfcGFyYW0oDQo+IC0gICAgWEVO X0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5faHZtX3BhcmFtX3QpIGFyZykNCj4gK3N0YXRpYyBpbnQg aHZtb3BfZ2V0X3BhcmFtKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB4ZW5faHZtX3BhcmFtICph KQ0KPiAgew0KPiAtICAgIHN0cnVjdCB4ZW5faHZtX3BhcmFtIGE7DQo+IC0gICAgc3RydWN0IGRv bWFpbiAqZDsNCj4gICAgICBpbnQgcmM7DQo+IA0KPiAtICAgIGlmICggY29weV9mcm9tX2d1ZXN0 KCZhLCBhcmcsIDEpICkNCj4gLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+IC0NCj4gLSAgICBk ID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsNCj4gLSAgICBpZiAoIGQgPT0g TlVMTCApDQo+IC0gICAgICAgIHJldHVybiAtRVNSQ0g7DQo+IC0NCj4gLSAgICByYyA9IC1FSU5W QUw7DQo+IC0gICAgaWYgKCAhaXNfaHZtX2RvbWFpbihkKSApDQo+IC0gICAgICAgIGdvdG8gb3V0 Ow0KPiAtDQo+IC0gICAgcmMgPSBodm1fYWxsb3dfZ2V0X3BhcmFtKGQsICZhKTsNCj4gKyAgICBy YyA9IGh2bV9hbGxvd19nZXRfcGFyYW0oZCwgYSk7DQo+ICAgICAgaWYgKCByYyApDQo+IC0gICAg ICAgIGdvdG8gb3V0Ow0KPiArICAgICAgICByZXR1cm4gcmM7DQo+IA0KPiAtICAgIHN3aXRjaCAo IGEuaW5kZXggKQ0KPiArICAgIHN3aXRjaCAoIGEtPmluZGV4ICkNCj4gICAgICB7DQo+ICAgICAg Y2FzZSBIVk1fUEFSQU1fQUNQSV9TX1NUQVRFOg0KPiAtICAgICAgICBhLnZhbHVlID0gZC0+YXJj aC5odm0uaXNfczNfc3VzcGVuZGVkID8gMyA6IDA7DQo+ICsgICAgICAgIGEtPnZhbHVlID0gZC0+ YXJjaC5odm0uaXNfczNfc3VzcGVuZGVkID8gMyA6IDA7DQo+ICAgICAgICAgIGJyZWFrOw0KPiAN Cj4gICAgICBjYXNlIEhWTV9QQVJBTV9WTTg2X1RTUzoNCj4gLSAgICAgICAgYS52YWx1ZSA9ICh1 aW50MzJfdClkLQ0KPiA+YXJjaC5odm0ucGFyYW1zW0hWTV9QQVJBTV9WTTg2X1RTU19TSVpFRF07 DQo+ICsgICAgICAgIGEtPnZhbHVlID0gKHVpbnQzMl90KWQtDQo+ID5hcmNoLmh2bS5wYXJhbXNb SFZNX1BBUkFNX1ZNODZfVFNTX1NJWkVEXTsNCj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiAgICAg IGNhc2UgSFZNX1BBUkFNX1ZNODZfVFNTX1NJWkVEOg0KPiAtICAgICAgICBhLnZhbHVlID0gZC0+ YXJjaC5odm0ucGFyYW1zW0hWTV9QQVJBTV9WTTg2X1RTU19TSVpFRF0gJg0KPiAtICAgICAgICAg ICAgICAgICAgflZNODZfVFNTX1VQREFURUQ7DQo+ICsgICAgICAgIGEtPnZhbHVlID0gZC0+YXJj aC5odm0ucGFyYW1zW0hWTV9QQVJBTV9WTTg2X1RTU19TSVpFRF0gJg0KPiArICAgICAgICAgICAg ICAgICAgIH5WTTg2X1RTU19VUERBVEVEOw0KPiAgICAgICAgICBicmVhazsNCj4gDQo+ICAgICAg Y2FzZSBIVk1fUEFSQU1fWDg3X0ZJUF9XSURUSDoNCj4gLSAgICAgICAgYS52YWx1ZSA9IGQtPmFy Y2gueDg3X2ZpcF93aWR0aDsNCj4gKyAgICAgICAgYS0+dmFsdWUgPSBkLT5hcmNoLng4N19maXBf d2lkdGg7DQo+ICAgICAgICAgIGJyZWFrOw0KPiArDQo+ICAgICAgY2FzZSBIVk1fUEFSQU1fSU9S RVFfUEZOOg0KPiAgICAgIGNhc2UgSFZNX1BBUkFNX0JVRklPUkVRX1BGTjoNCj4gICAgICBjYXNl IEhWTV9QQVJBTV9CVUZJT1JFUV9FVlRDSE46DQo+IEBAIC00NDY1LDIzICs0NDI2LDE5IEBAIHN0 YXRpYyBpbnQgaHZtb3BfZ2V0X3BhcmFtKA0KPiAgICAgICAgICAgICAgcmMgPSBodm1fY3JlYXRl X2lvcmVxX3NlcnZlcihkLCB0cnVlLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIVk1fSU9SRVFTUlZfQlVGSU9SRVFfTEVHQUNZLCBOVUxMKTsNCj4gICAgICAg ICAgICAgIGlmICggcmMgIT0gMCAmJiByYyAhPSAtRUVYSVNUICkNCj4gLSAgICAgICAgICAgICAg ICBnb3RvIG91dDsNCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQo+ICAgICAgICAgIH0N Cj4gDQo+IC0gICAgLypGQUxMVEhSVSovDQo+ICsgICAgICAgIC8qIEZhbGx0aHJvdWdoICovDQo+ ICAgICAgZGVmYXVsdDoNCj4gLSAgICAgICAgYS52YWx1ZSA9IGQtPmFyY2guaHZtLnBhcmFtc1th LmluZGV4XTsNCj4gKyAgICAgICAgYS0+dmFsdWUgPSBkLT5hcmNoLmh2bS5wYXJhbXNbYS0+aW5k ZXhdOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICB9DQo+IA0KPiAtICAgIHJjID0gX19jb3B5 X3RvX2d1ZXN0KGFyZywgJmEsIDEpID8gLUVGQVVMVCA6IDA7DQo+IC0NCj4gICAgICBIVk1fREJH X0xPRyhEQkdfTEVWRUxfSENBTEwsICJnZXQgcGFyYW0gJXUgPSAlIlBSSXg2NCwNCj4gLSAgICAg ICAgICAgICAgICBhLmluZGV4LCBhLnZhbHVlKTsNCj4gKyAgICAgICAgICAgICAgICBhLT5pbmRl eCwgYS0+dmFsdWUpOw0KPiANCj4gLSBvdXQ6DQo+IC0gICAgcmN1X3VubG9ja19kb21haW4oZCk7 DQo+IC0gICAgcmV0dXJuIHJjOw0KPiArICAgIHJldHVybiAwOw0KPiAgfQ0KPiANCj4gIC8qDQo+ IEBAIC00ODk2LDE0ICs0ODUzLDQyIEBAIGxvbmcgZG9faHZtX29wKHVuc2lnbmVkIGxvbmcgb3As DQo+IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQ0KPiAgICAgICAgICBicmVhazsN Cj4gDQo+ICAgICAgY2FzZSBIVk1PUF9zZXRfcGFyYW06DQo+IC0gICAgICAgIHJjID0gaHZtb3Bf c2V0X3BhcmFtKA0KPiAtICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnLCB4ZW5faHZt X3BhcmFtX3QpKTsNCj4gLSAgICAgICAgYnJlYWs7DQo+IC0NCj4gICAgICBjYXNlIEhWTU9QX2dl dF9wYXJhbToNCj4gLSAgICAgICAgcmMgPSBodm1vcF9nZXRfcGFyYW0oDQo+IC0gICAgICAgICAg ICBndWVzdF9oYW5kbGVfY2FzdChhcmcsIHhlbl9odm1fcGFyYW1fdCkpOw0KPiArICAgIHsNCj4g KyAgICAgICAgc3RydWN0IHhlbl9odm1fcGFyYW0gYTsNCj4gKyAgICAgICAgc3RydWN0IGRvbWFp biAqZDsNCj4gKw0KPiArICAgICAgICByYyA9IC1FRkFVTFQ7DQo+ICsgICAgICAgIGlmICggY29w eV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArDQo+ ICsgICAgICAgIHJjID0gLUVTUkNIOw0KPiArICAgICAgICBkID0gcmN1X2xvY2tfZG9tYWluX2J5 X2FueV9pZChhLmRvbWlkKTsNCj4gKyAgICAgICAgaWYgKCBkID09IE5VTEwgKQ0KPiArICAgICAg ICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICAgICAgcmMgPSAtRUlOVkFMOw0KPiArICAgICAgICBp ZiAoICFpc19odm1fZG9tYWluKGQpICkNCj4gKyAgICAgICAgICAgIGdvdG8gcGFyYW1fb3V0Ow0K PiArDQo+ICsgICAgICAgIHJjID0geHNtX2h2bV9wYXJhbShYU01fVEFSR0VULCBkLCBvcCk7DQo+ ICsgICAgICAgIGlmICggcmMgKQ0KPiArICAgICAgICAgICAgZ290byBwYXJhbV9vdXQ7DQo+ICsN Cj4gKyAgICAgICAgaWYgKCBvcCA9PSBIVk1PUF9zZXRfcGFyYW0gKQ0KPiArICAgICAgICAgICAg cmMgPSBodm1vcF9zZXRfcGFyYW0oZCwgJmEpOw0KPiArICAgICAgICBlbHNlDQo+ICsgICAgICAg IHsNCj4gKyAgICAgICAgICAgIHJjID0gaHZtb3BfZ2V0X3BhcmFtKGQsICZhKTsNCj4gKw0KPiAr ICAgICAgICAgICAgaWYgKCAhcmMgJiYgX19jb3B5X3RvX2d1ZXN0KGFyZywgJmEsIDEpICkNCj4g KyAgICAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAg IHBhcmFtX291dDoNCj4gKyAgICAgICAgcmN1X3VubG9ja19kb21haW4oZCk7DQo+ICAgICAgICAg IGJyZWFrOw0KPiArICAgIH0NCj4gDQo+ICAgICAgY2FzZSBIVk1PUF9mbHVzaF90bGJzOg0KPiAg ICAgICAgICByYyA9IGd1ZXN0X2hhbmRsZV9pc19udWxsKGFyZykgPyBodm1vcF9mbHVzaF90bGJf YWxsKCkgOiAtRUlOVkFMOw0KPiAtLQ0KPiAyLjEuNA0KDQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs