From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v6 04/14] xen: Use a typesafe to define INVALID_GFN Date: Wed, 6 Jul 2016 14:05:24 +0100 Message-ID: <577D0214.8000205@arm.com> References: <1467810073-27971-1-git-send-email-julien.grall@arm.com> <1467810073-27971-5-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1467810073-27971-5-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: elena.ufimtseva@oracle.com, Kevin Tian , sstabellini@kernel.org, Feng Wu , Jan Beulich , Jun Nakajima , Andrew Cooper , Tim Deegan , George Dunlap , Paul Durrant , Suravee Suthikulpanit , Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org KENDIEVsZW5hKQoKT24gMDYvMDcvMTYgMTQ6MDEsIEp1bGllbiBHcmFsbCB3cm90ZToKPiBBbHNv IHRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIGNvbnZlcnQgYXJjaC94ODYvZGVidWcuYyB0byB0aGUg dHlwZXNhZmUgZ2ZuLgo+Cj4gU2lnbmVkLW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3Jh bGxAYXJtLmNvbT4KPiBSZXZpZXdlZC1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNA Y2l0cml4LmNvbT4KPiBBY2tlZC1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBr ZXJuZWwub3JnPgo+Cj4gLS0tCj4gQ2M6IE11a2VzaCBSYXRob3IgPG11a2VzaC5yYXRob3JAb3Jh Y2xlLmNvbT4KCkkgZm9yZ290IHRvIHVwZGF0ZSB0aGUgQ0MgbGlzdCBzaW5jZSBHRFNYIG1haW50 YWluZXJzaGlwIHdhcyB0YWtlbiBvdmVyIApieSBFbGVuYS4gU29ycnkgZm9yIHRoYXQuCgpSZWdh cmRzLAoKPiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+IENjOiBQYXVsIER1 cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+IENjOiBCb3JpcyBPc3Ryb3Zza3kgPGJv cmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPgo+IENjOiBTdXJhdmVlIFN1dGhpa3VscGFuaXQgPHN1 cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgo+IENjOiBKdW4gTmFrYWppbWEgPGp1bi5uYWth amltYUBpbnRlbC5jb20+Cj4gQ2M6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgo+ IENjOiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGV1LmNpdHJpeC5jb20+Cj4gQ2M6IFRp bSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgo+IENjOiBGZW5nIFd1IDxmZW5nLnd1QGludGVsLmNvbT4K Pgo+ICAgICAgQ2hhbmdlcyBpbiB2NjoKPiAgICAgICAgICAtIEFkZCBTdGVmYW5vJ3MgYWNrZWQt YnkgZm9yIEFSTSBiaXRzCj4gICAgICAgICAgLSBSZW1vdmUgc2V0IG9mIGJyYWNrZXRzIHdoZW4g aXQgaXMgbm90IG5lY2Vzc2FyeQo+ICAgICAgICAgIC0gQWRkIEFuZHJldydzIHJldmlld2VkLWJ5 Cj4KPiAgICAgIENoYW5nZXMgaW4gdjU6Cj4gICAgICAgICAgLSBQYXRjaCBhZGRlZAo+IC0tLQo+ ICAgeGVuL2FyY2gvYXJtL3AybS5jICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKystLQo+ICAg eGVuL2FyY2gveDg2L2RlYnVnLmMgICAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrLS0t LS0tLS0tCj4gICB4ZW4vYXJjaC94ODYvZG9tYWluLmMgICAgICAgICAgICAgICAgICAgfCAgMiAr LQo+ICAgeGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMgICAgICAgICAgICAgIHwgIDcgKysrKy0t LQo+ICAgeGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAgICAgICAgICAgIHwgIDYgKysrLS0t Cj4gICB4ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMgICAgICAgICAgICAgICAgfCAgOCArKysrLS0t LQo+ICAgeGVuL2FyY2gveDg2L2h2bS9zdm0vbmVzdGVkc3ZtLmMgICAgICAgIHwgIDIgKy0KPiAg IHhlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jICAgICAgICAgICAgICB8ICA2ICsrKy0tLQo+ICAg eGVuL2FyY2gveDg2L21tL2FsdHAybS5jICAgICAgICAgICAgICAgIHwgIDIgKy0KPiAgIHhlbi9h cmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jICAgICAgICB8IDEwICsrKysrLS0tLS0KPiAgIHhl bi9hcmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2VwdC5jICAgICAgICB8ICAyICstCj4gICB4ZW4vYXJj aC94ODYvbW0vcDJtLXBvZC5jICAgICAgICAgICAgICAgfCAgNiArKystLS0KPiAgIHhlbi9hcmNo L3g4Ni9tbS9wMm0uYyAgICAgICAgICAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQo+ ICAgeGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21tb24uYyAgICAgICAgIHwgIDIgKy0KPiAgIHhl bi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYyAgICAgICAgICB8ICAyICstCj4gICB4ZW4vYXJj aC94ODYvbW0vc2hhZG93L3ByaXZhdGUuaCAgICAgICAgfCAgMiArLQo+ICAgeGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvYW1kL2lvbW11X21hcC5jIHwgIDIgKy0KPiAgIHhlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL3Z0ZC9pb21tdS5jICAgICB8ICA0ICsrLS0KPiAgIHhlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL3g4Ni9pb21tdS5jICAgICB8ICAyICstCj4gICB4ZW4vaW5jbHVkZS9hc20teDg2L2d1ZXN0 X3B0LmggICAgICAgICAgfCAgNCArKy0tCj4gICB4ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oICAg ICAgICAgICAgICAgfCAgMiArLQo+ICAgeGVuL2luY2x1ZGUveGVuL21tLmggICAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KPiAgIDIyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDU2 IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9h cmNoL2FybS9wMm0uYwo+IGluZGV4IGQ2OTA2MDIuLmM5MzhkZGUgMTAwNjQ0Cj4gLS0tIGEveGVu L2FyY2gvYXJtL3AybS5jCj4gKysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4gQEAgLTQ3OSw3ICs0 NzksNyBAQCBzdGF0aWMgaW50IF9fcDJtX2dldF9tZW1fYWNjZXNzKHN0cnVjdCBkb21haW4gKmQs IGdmbl90IGdmbiwKPiAgICAgICB9Cj4KPiAgICAgICAvKiBJZiByZXF1ZXN0IHRvIGdldCBkZWZh dWx0IGFjY2Vzcy4gKi8KPiAtICAgIGlmICggZ2ZuX3goZ2ZuKSA9PSBJTlZBTElEX0dGTiApCj4g KyAgICBpZiAoIGdmbl9lcShnZm4sIElOVkFMSURfR0ZOKSApCj4gICAgICAgewo+ICAgICAgICAg ICAqYWNjZXNzID0gbWVtYWNjZXNzW3AybS0+ZGVmYXVsdF9hY2Nlc3NdOwo+ICAgICAgICAgICBy ZXR1cm4gMDsKPiBAQCAtMTg3OSw3ICsxODc5LDcgQEAgbG9uZyBwMm1fc2V0X21lbV9hY2Nlc3Mo c3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCB1aW50MzJfdCBuciwKPiAgICAgICBwMm0tPm1l bV9hY2Nlc3NfZW5hYmxlZCA9IHRydWU7Cj4KPiAgICAgICAvKiBJZiByZXF1ZXN0IHRvIHNldCBk ZWZhdWx0IGFjY2Vzcy4gKi8KPiAtICAgIGlmICggZ2ZuX3goZ2ZuKSA9PSBJTlZBTElEX0dGTiAp Cj4gKyAgICBpZiAoIGdmbl9lcShnZm4sIElOVkFMSURfR0ZOKSApCj4gICAgICAgewo+ICAgICAg ICAgICBwMm0tPmRlZmF1bHRfYWNjZXNzID0gYTsKPiAgICAgICAgICAgcmV0dXJuIDA7Cj4gZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9kZWJ1Zy5jIGIveGVuL2FyY2gveDg2L2RlYnVnLmMKPiBp bmRleCA5MjEzZWE3Li4zMDMwMDIyIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9kZWJ1Zy5j Cj4gKysrIGIveGVuL2FyY2gveDg2L2RlYnVnLmMKPiBAQCAtNDQsOCArNDQsNyBAQCB0eXBlZGVm IHVuc2lnbmVkIGNoYXIgZGJnYnl0ZV90Owo+Cj4gICAvKiBSZXR1cm5zOiBtZm4gZm9yIHRoZSBn aXZlbiAoaHZtIGd1ZXN0KSB2YWRkciAqLwo+ICAgc3RhdGljIG1mbl90Cj4gLWRiZ19odm1fdmEy bWZuKGRiZ3ZhX3QgdmFkZHIsIHN0cnVjdCBkb21haW4gKmRwLCBpbnQgdG9hZGRyLAo+IC0gICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZ2ZuKQo+ICtkYmdfaHZtX3ZhMm1mbihkYmd2YV90 IHZhZGRyLCBzdHJ1Y3QgZG9tYWluICpkcCwgaW50IHRvYWRkciwgZ2ZuX3QgKmdmbikKPiAgIHsK PiAgICAgICBtZm5fdCBtZm47Cj4gICAgICAgdWludDMyX3QgcGZlYyA9IFBGRUNfcGFnZV9wcmVz ZW50Owo+IEBAIC01MywxNCArNTIsMTQgQEAgZGJnX2h2bV92YTJtZm4oZGJndmFfdCB2YWRkciwg c3RydWN0IGRvbWFpbiAqZHAsIGludCB0b2FkZHIsCj4KPiAgICAgICBEQkdQMigidmFkZHI6JWx4 IGRvbWlkOiVkXG4iLCB2YWRkciwgZHAtPmRvbWFpbl9pZCk7Cj4KPiAtICAgICpnZm4gPSBwYWdp bmdfZ3ZhX3RvX2dmbihkcC0+dmNwdVswXSwgdmFkZHIsICZwZmVjKTsKPiAtICAgIGlmICggKmdm biA9PSBJTlZBTElEX0dGTiApCj4gKyAgICAqZ2ZuID0gX2dmbihwYWdpbmdfZ3ZhX3RvX2dmbihk cC0+dmNwdVswXSwgdmFkZHIsICZwZmVjKSk7Cj4gKyAgICBpZiAoIGdmbl9lcSgqZ2ZuLCBJTlZB TElEX0dGTikgKQo+ICAgICAgIHsKPiAgICAgICAgICAgREJHUDIoImtkYjpiYWQgZ2ZuIGZyb20g Z3ZhX3RvX2dmblxuIik7Cj4gICAgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsKPiAgICAgICB9 Cj4KPiAtICAgIG1mbiA9IGdldF9nZm4oZHAsICpnZm4sICZnZm50eXBlKTsKPiArICAgIG1mbiA9 IGdldF9nZm4oZHAsIGdmbl94KCpnZm4pLCAmZ2ZudHlwZSk7Cj4gICAgICAgaWYgKCBwMm1faXNf cmVhZG9ubHkoZ2ZudHlwZSkgJiYgdG9hZGRyICkKPiAgICAgICB7Cj4gICAgICAgICAgIERCR1Ay KCJrZGI6cDJtX2lzX3JlYWRvbmx5OiBnZm50eXBlOiV4XG4iLCBnZm50eXBlKTsKPiBAQCAtNzIs NyArNzEsNyBAQCBkYmdfaHZtX3ZhMm1mbihkYmd2YV90IHZhZGRyLCBzdHJ1Y3QgZG9tYWluICpk cCwgaW50IHRvYWRkciwKPgo+ICAgICAgIGlmICggbWZuX2VxKG1mbiwgSU5WQUxJRF9NRk4pICkK PiAgICAgICB7Cj4gLSAgICAgICAgcHV0X2dmbihkcCwgKmdmbik7Cj4gKyAgICAgICAgcHV0X2dm bihkcCwgZ2ZuX3goKmdmbikpOwo+ICAgICAgICAgICAqZ2ZuID0gSU5WQUxJRF9HRk47Cj4gICAg ICAgfQo+Cj4gQEAgLTE2NSw3ICsxNjQsOCBAQCB1bnNpZ25lZCBpbnQgZGJnX3J3X2d1ZXN0X21l bShzdHJ1Y3QgZG9tYWluICpkcCwgdm9pZCAqIF9fdXNlciBnYWRkciwKPiAgICAgICAgICAgY2hh ciAqdmE7Cj4gICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWdh ZGRyOwo+ICAgICAgICAgICBtZm5fdCBtZm47Cj4gLSAgICAgICAgdW5zaWduZWQgbG9uZyBnZm4g PSBJTlZBTElEX0dGTiwgcGFnZWNudDsKPiArICAgICAgICBnZm5fdCBnZm4gPSBJTlZBTElEX0dG TjsKPiArICAgICAgICB1bnNpZ25lZCBsb25nIHBhZ2VjbnQ7Cj4KPiAgICAgICAgICAgcGFnZWNu dCA9IG1pbl90KGxvbmcsIFBBR0VfU0laRSAtIChhZGRyICYgflBBR0VfTUFTSyksIGxlbik7Cj4K PiBAQCAtMTg5LDggKzE4OSw4IEBAIHVuc2lnbmVkIGludCBkYmdfcndfZ3Vlc3RfbWVtKHN0cnVj dCBkb21haW4gKmRwLCB2b2lkICogX191c2VyIGdhZGRyLAo+ICAgICAgICAgICB9Cj4KPiAgICAg ICAgICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOwo+IC0gICAgICAgIGlmICggZ2ZuICE9IElOVkFM SURfR0ZOICkKPiAtICAgICAgICAgICAgcHV0X2dmbihkcCwgZ2ZuKTsKPiArICAgICAgICBpZiAo ICFnZm5fZXEoZ2ZuLCBJTlZBTElEX0dGTikgKQo+ICsgICAgICAgICAgICBwdXRfZ2ZuKGRwLCBn Zm5feChnZm4pKTsKPgo+ICAgICAgICAgICBhZGRyICs9IHBhZ2VjbnQ7Cj4gICAgICAgICAgIGJ1 ZiArPSBwYWdlY250Owo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZG9tYWluLmMgYi94ZW4v YXJjaC94ODYvZG9tYWluLmMKPiBpbmRleCBiYjU5MjQ3Li5jOGM3ZTJkIDEwMDY0NAo+IC0tLSBh L3hlbi9hcmNoL3g4Ni9kb21haW4uYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYwo+IEBA IC03ODMsNyArNzgzLDcgQEAgaW50IGFyY2hfZG9tYWluX3NvZnRfcmVzZXQoc3RydWN0IGRvbWFp biAqZCkKPiAgICAgICAgKiBnZm4gPT0gSU5WQUxJRF9HRk4gaW5kaWNhdGVzIHRoYXQgdGhlIHNo YXJlZF9pbmZvIHBhZ2Ugd2FzIG5ldmVyIG1hcHBlZAo+ICAgICAgICAqIHRvIHRoZSBkb21haW4n cyBhZGRyZXNzIHNwYWNlIGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcGxhY2UuCj4gICAgICAg ICovCj4gLSAgICBpZiAoIGdmbiA9PSBJTlZBTElEX0dGTiApCj4gKyAgICBpZiAoIGdmbiA9PSBn Zm5feChJTlZBTElEX0dGTikgKQo+ICAgICAgICAgICBnb3RvIGV4aXRfcHV0X3BhZ2U7Cj4KPiAg ICAgICBpZiAoIG1mbl94KGdldF9nZm5fcXVlcnkoZCwgZ2ZuLCAmcDJtdCkpICE9IG1mbiApCj4g ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vZW11bGF0ZS5jIGIveGVuL2FyY2gveDg2L2h2 bS9lbXVsYXRlLmMKPiBpbmRleCA4NTVhZjRkLi5jNTVhZDdiIDEwMDY0NAo+IC0tLSBhL3hlbi9h cmNoL3g4Ni9odm0vZW11bGF0ZS5jCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMK PiBAQCAtNDU1LDcgKzQ1NSw3IEBAIHN0YXRpYyBpbnQgaHZtZW11bF9saW5lYXJfdG9fcGh5cygK PiAgICAgICAgICAgICAgIHJldHVybiByYzsKPiAgICAgICAgICAgcGZuID0gX3BhZGRyID4+IFBB R0VfU0hJRlQ7Cj4gICAgICAgfQo+IC0gICAgZWxzZSBpZiAoIChwZm4gPSBwYWdpbmdfZ3ZhX3Rv X2dmbihjdXJyLCBhZGRyLCAmcGZlYykpID09IElOVkFMSURfR0ZOICkKPiArICAgIGVsc2UgaWYg KCAocGZuID0gcGFnaW5nX2d2YV90b19nZm4oY3VyciwgYWRkciwgJnBmZWMpKSA9PSBnZm5feChJ TlZBTElEX0dGTikgKQo+ICAgICAgIHsKPiAgICAgICAgICAgaWYgKCBwZmVjICYgKFBGRUNfcGFn ZV9wYWdlZCB8IFBGRUNfcGFnZV9zaGFyZWQpICkKPiAgICAgICAgICAgICAgIHJldHVybiBYODZF TVVMX1JFVFJZOwo+IEBAIC00NzIsNyArNDcyLDggQEAgc3RhdGljIGludCBodm1lbXVsX2xpbmVh cl90b19waHlzKAo+ICAgICAgICAgICBucGZuID0gcGFnaW5nX2d2YV90b19nZm4oY3VyciwgYWRk ciwgJnBmZWMpOwo+Cj4gICAgICAgICAgIC8qIElzIGl0IGNvbnRpZ3VvdXMgd2l0aCB0aGUgcHJl Y2VkaW5nIFBGTnM/IElmIG5vdCB0aGVuIHdlJ3JlIGRvbmUuICovCj4gLSAgICAgICAgaWYgKCAo bnBmbiA9PSBJTlZBTElEX0dGTikgfHwgKG5wZm4gIT0gKHBmbiArIChyZXZlcnNlID8gLWkgOiBp KSkpICkKPiArICAgICAgICBpZiAoIChucGZuID09IGdmbl94KElOVkFMSURfR0ZOKSkgfHwKPiAr ICAgICAgICAgICAgIChucGZuICE9IChwZm4gKyAocmV2ZXJzZSA/IC1pIDogaSkpKSApCj4gICAg ICAgICAgIHsKPiAgICAgICAgICAgICAgIGlmICggcGZlYyAmIChQRkVDX3BhZ2VfcGFnZWQgfCBQ RkVDX3BhZ2Vfc2hhcmVkKSApCj4gICAgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVU Ulk7Cj4gQEAgLTQ4MCw3ICs0ODEsNyBAQCBzdGF0aWMgaW50IGh2bWVtdWxfbGluZWFyX3RvX3Bo eXMoCj4gICAgICAgICAgICAgICBpZiAoIGRvbmUgPT0gMCApCj4gICAgICAgICAgICAgICB7Cj4g ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXZlcnNlKTsKPiAtICAgICAgICAgICAgICAgIGlm ICggbnBmbiAhPSBJTlZBTElEX0dGTiApCj4gKyAgICAgICAgICAgICAgICBpZiAoIG5wZm4gIT0g Z2ZuX3goSU5WQUxJRF9HRk4pICkKPiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVN VUxfVU5IQU5ETEVBQkxFOwo+ICAgICAgICAgICAgICAgICAgIGh2bV9pbmplY3RfcGFnZV9mYXVs dChwZmVjLCBhZGRyICYgUEFHRV9NQVNLKTsKPiAgICAgICAgICAgICAgICAgICByZXR1cm4gWDg2 RU1VTF9FWENFUFRJT047Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94 ZW4vYXJjaC94ODYvaHZtL2h2bS5jCj4gaW5kZXggZjNmYWYyZS4uYmIzOWQ1ZiAxMDA2NDQKPiAt LS0gYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0u Ywo+IEBAIC0zMDM5LDcgKzMwMzksNyBAQCBzdGF0aWMgZW51bSBodm1fY29weV9yZXN1bHQgX19o dm1fY29weSgKPiAgICAgICAgICAgaWYgKCBmbGFncyAmIEhWTUNPUFlfdmlydCApCj4gICAgICAg ICAgIHsKPiAgICAgICAgICAgICAgIGdmbiA9IHBhZ2luZ19ndmFfdG9fZ2ZuKGN1cnIsIGFkZHIs ICZwZmVjKTsKPiAtICAgICAgICAgICAgaWYgKCBnZm4gPT0gSU5WQUxJRF9HRk4gKQo+ICsgICAg ICAgICAgICBpZiAoIGdmbiA9PSBnZm5feChJTlZBTElEX0dGTikgKQo+ICAgICAgICAgICAgICAg ewo+ICAgICAgICAgICAgICAgICAgIGlmICggcGZlYyAmIFBGRUNfcGFnZV9wYWdlZCApCj4gICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBIVk1DT1BZX2dmbl9wYWdlZF9vdXQ7Cj4gQEAgLTMx NTQsNyArMzE1NCw3IEBAIHN0YXRpYyBlbnVtIGh2bV9jb3B5X3Jlc3VsdCBfX2h2bV9jbGVhcihw YWRkcl90IGFkZHIsIGludCBzaXplKQo+ICAgICAgICAgICBjb3VudCA9IG1pbl90KGludCwgUEFH RV9TSVpFIC0gKGFkZHIgJiB+UEFHRV9NQVNLKSwgdG9kbyk7Cj4KPiAgICAgICAgICAgZ2ZuID0g cGFnaW5nX2d2YV90b19nZm4oY3VyciwgYWRkciwgJnBmZWMpOwo+IC0gICAgICAgIGlmICggZ2Zu ID09IElOVkFMSURfR0ZOICkKPiArICAgICAgICBpZiAoIGdmbiA9PSBnZm5feChJTlZBTElEX0dG TikgKQo+ICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICBpZiAoIHBmZWMgJiBQRkVDX3BhZ2Vf cGFnZWQgKQo+ICAgICAgICAgICAgICAgICAgIHJldHVybiBIVk1DT1BZX2dmbl9wYWdlZF9vdXQ7 Cj4gQEAgLTUyOTgsNyArNTI5OCw3IEBAIHN0YXRpYyBpbnQgZG9fYWx0cDJtX29wKAo+ICAgICAg ICAgICAgICAgIGEudS5lbmFibGVfbm90aWZ5LnZjcHVfaWQgIT0gY3Vyci0+dmNwdV9pZCApCj4g ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4KPiAtICAgICAgICBpZiAoIChnZm5feCh2Y3B1 X2FsdHAybShjdXJyKS52ZWluZm9fZ2ZuKSAhPSBJTlZBTElEX0dGTikgfHwKPiArICAgICAgICBp ZiAoICFnZm5fZXEodmNwdV9hbHRwMm0oY3VycikudmVpbmZvX2dmbiwgSU5WQUxJRF9HRk4pIHx8 Cj4gICAgICAgICAgICAgICAgbWZuX2VxKGdldF9nZm5fcXVlcnlfdW5sb2NrZWQoY3Vyci0+ZG9t YWluLAo+ICAgICAgICAgICAgICAgICAgICAgICBhLnUuZW5hYmxlX25vdGlmeS5nZm4sICZwMm10 KSwgSU5WQUxJRF9NRk4pICkKPiAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IGRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMgYi94ZW4vYXJjaC94ODYvaHZtL2lvcmVx LmMKPiBpbmRleCA3MTQ4YWM0Li5kMjI0NWUyIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9o dm0vaW9yZXEuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYwo+IEBAIC0yMDQsNyAr MjA0LDcgQEAgc3RhdGljIHZvaWQgaHZtX2ZyZWVfaW9yZXFfZ21mbihzdHJ1Y3QgZG9tYWluICpk LCB1bnNpZ25lZCBsb25nIGdtZm4pCj4gICB7Cj4gICAgICAgdW5zaWduZWQgaW50IGkgPSBnbWZu IC0gZC0+YXJjaC5odm1fZG9tYWluLmlvcmVxX2dtZm4uYmFzZTsKPgo+IC0gICAgaWYgKCBnbWZu ICE9IElOVkFMSURfR0ZOICkKPiArICAgIGlmICggZ21mbiAhPSBnZm5feChJTlZBTElEX0dGTikg KQo+ICAgICAgICAgICBzZXRfYml0KGksICZkLT5hcmNoLmh2bV9kb21haW4uaW9yZXFfZ21mbi5t YXNrKTsKPiAgIH0KPgo+IEBAIC00MjAsNyArNDIwLDcgQEAgc3RhdGljIGludCBodm1faW9yZXFf c2VydmVyX21hcF9wYWdlcyhzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqcywKPiAgICAgICBpZiAo IHJjICkKPiAgICAgICAgICAgcmV0dXJuIHJjOwo+Cj4gLSAgICBpZiAoIGJ1ZmlvcmVxX3BmbiAh PSBJTlZBTElEX0dGTiApCj4gKyAgICBpZiAoIGJ1ZmlvcmVxX3BmbiAhPSBnZm5feChJTlZBTElE X0dGTikgKQo+ICAgICAgICAgICByYyA9IGh2bV9tYXBfaW9yZXFfcGFnZShzLCAxLCBidWZpb3Jl cV9wZm4pOwo+Cj4gICAgICAgaWYgKCByYyApCj4gQEAgLTQzNCw4ICs0MzQsOCBAQCBzdGF0aWMg aW50IGh2bV9pb3JlcV9zZXJ2ZXJfc2V0dXBfcGFnZXMoc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIg KnMsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90IGhh bmRsZV9idWZpb3JlcSkKPiAgIHsKPiAgICAgICBzdHJ1Y3QgZG9tYWluICpkID0gcy0+ZG9tYWlu Owo+IC0gICAgdW5zaWduZWQgbG9uZyBpb3JlcV9wZm4gPSBJTlZBTElEX0dGTjsKPiAtICAgIHVu c2lnbmVkIGxvbmcgYnVmaW9yZXFfcGZuID0gSU5WQUxJRF9HRk47Cj4gKyAgICB1bnNpZ25lZCBs b25nIGlvcmVxX3BmbiA9IGdmbl94KElOVkFMSURfR0ZOKTsKPiArICAgIHVuc2lnbmVkIGxvbmcg YnVmaW9yZXFfcGZuID0gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+ICAgICAgIGludCByYzsKPgo+ICAg ICAgIGlmICggaXNfZGVmYXVsdCApCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vc3Zt L25lc3RlZHN2bS5jIGIveGVuL2FyY2gveDg2L2h2bS9zdm0vbmVzdGVkc3ZtLmMKPiBpbmRleCA5 ZDJhYzA5Li5mOWIzOGFiIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL25lc3Rl ZHN2bS5jCj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS9zdm0vbmVzdGVkc3ZtLmMKPiBAQCAtMTIw MCw3ICsxMjAwLDcgQEAgbnN2bV9oYXBfd2Fsa19MMV9wMm0oc3RydWN0IHZjcHUgKnYsIHBhZGRy X3QgTDJfZ3BhLCBwYWRkcl90ICpMMV9ncGEsCj4gICAgICAgLyogV2FsayB0aGUgZ3Vlc3Qtc3Vw cGxpZWQgTlBUIHRhYmxlLCBqdXN0IGFzIGlmIGl0IHdlcmUgYSBwYWdldGFibGUgKi8KPiAgICAg ICBnZm4gPSBwYWdpbmdfZ2FfdG9fZ2ZuX2NyMyh2LCBuZXN0ZWRfY3IzLCBMMl9ncGEsICZwZmVj LCBwYWdlX29yZGVyKTsKPgo+IC0gICAgaWYgKCBnZm4gPT0gSU5WQUxJRF9HRk4gKQo+ICsgICAg aWYgKCBnZm4gPT0gZ2ZuX3goSU5WQUxJRF9HRk4pICkKPiAgICAgICAgICAgcmV0dXJuIE5FU1RF REhWTV9QQUdFRkFVTFRfSU5KRUNUOwo+Cj4gICAgICAgKkwxX2dwYSA9IChnZm4gPDwgUEFHRV9T SElGVCkgKyAoTDJfZ3BhICYgflBBR0VfTUFTSyk7Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9odm0vdm14L3ZteC5jIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKPiBpbmRleCBhMDYx NDIwLi4wODhmNDU0IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jCj4g KysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKPiBAQCAtMjA1NywxMyArMjA1NywxMyBA QCBzdGF0aWMgaW50IHZteF92Y3B1X2VtdWxhdGVfdm1mdW5jKHN0cnVjdCBjcHVfdXNlcl9yZWdz ICpyZWdzKQo+ICAgc3RhdGljIGJvb2xfdCB2bXhfdmNwdV9lbXVsYXRlX3ZlKHN0cnVjdCB2Y3B1 ICp2KQo+ICAgewo+ICAgICAgIGJvb2xfdCByYyA9IDAsIHdyaXRhYmxlOwo+IC0gICAgdW5zaWdu ZWQgbG9uZyBnZm4gPSBnZm5feCh2Y3B1X2FsdHAybSh2KS52ZWluZm9fZ2ZuKTsKPiArICAgIGdm bl90IGdmbiA9IHZjcHVfYWx0cDJtKHYpLnZlaW5mb19nZm47Cj4gICAgICAgdmVfaW5mb190ICp2 ZWluZm87Cj4KPiAtICAgIGlmICggZ2ZuID09IElOVkFMSURfR0ZOICkKPiArICAgIGlmICggZ2Zu X2VxKGdmbiwgSU5WQUxJRF9HRk4pICkKPiAgICAgICAgICAgcmV0dXJuIDA7Cj4KPiAtICAgIHZl aW5mbyA9IGh2bV9tYXBfZ3Vlc3RfZnJhbWVfcncoZ2ZuLCAwLCAmd3JpdGFibGUpOwo+ICsgICAg dmVpbmZvID0gaHZtX21hcF9ndWVzdF9mcmFtZV9ydyhnZm5feChnZm4pLCAwLCAmd3JpdGFibGUp Owo+ICAgICAgIGlmICggIXZlaW5mbyApCj4gICAgICAgICAgIHJldHVybiAwOwo+ICAgICAgIGlm ICggIXdyaXRhYmxlIHx8IHZlaW5mby0+c2VtYXBob3JlICE9IDAgKQo+IGRpZmYgLS1naXQgYS94 ZW4vYXJjaC94ODYvbW0vYWx0cDJtLmMgYi94ZW4vYXJjaC94ODYvbW0vYWx0cDJtLmMKPiBpbmRl eCAxMDYwNWM4Li45MzBiZGMyIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9hbHRwMm0u Ywo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9hbHRwMm0uYwo+IEBAIC0yNiw3ICsyNiw3IEBAIGFs dHAybV92Y3B1X3Jlc2V0KHN0cnVjdCB2Y3B1ICp2KQo+ICAgICAgIHN0cnVjdCBhbHRwMm12Y3B1 ICphdiA9ICZ2Y3B1X2FsdHAybSh2KTsKPgo+ICAgICAgIGF2LT5wMm1pZHggPSBJTlZBTElEX0FM VFAyTTsKPiAtICAgIGF2LT52ZWluZm9fZ2ZuID0gX2dmbihJTlZBTElEX0dGTik7Cj4gKyAgICBh di0+dmVpbmZvX2dmbiA9IElOVkFMSURfR0ZOOwo+ICAgfQo+Cj4gICB2b2lkCj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jIGIveGVuL2FyY2gveDg2L21tL2hh cC9ndWVzdF93YWxrLmMKPiBpbmRleCBkMjcxNmY5Li4xYjFhMTVkIDEwMDY0NAo+IC0tLSBhL3hl bi9hcmNoL3g4Ni9tbS9oYXAvZ3Vlc3Rfd2Fsay5jCj4gKysrIGIveGVuL2FyY2gveDg2L21tL2hh cC9ndWVzdF93YWxrLmMKPiBAQCAtNzAsMTQgKzcwLDE0IEBAIHVuc2lnbmVkIGxvbmcgaGFwX3Ay bV9nYV90b19nZm4oR1VFU1RfUEFHSU5HX0xFVkVMUykoCj4gICAgICAgICAgIGlmICggdG9wX3Bh Z2UgKQo+ICAgICAgICAgICAgICAgcHV0X3BhZ2UodG9wX3BhZ2UpOwo+ICAgICAgICAgICBwMm1f bWVtX3BhZ2luZ19wb3B1bGF0ZShwMm0tPmRvbWFpbiwgY3IzID4+IFBBR0VfU0hJRlQpOwo+IC0g ICAgICAgIHJldHVybiBJTlZBTElEX0dGTjsKPiArICAgICAgICByZXR1cm4gZ2ZuX3goSU5WQUxJ RF9HRk4pOwo+ICAgICAgIH0KPiAgICAgICBpZiAoIHAybV9pc19zaGFyZWQocDJtdCkgKQo+ICAg ICAgIHsKPiAgICAgICAgICAgcGZlY1swXSA9IFBGRUNfcGFnZV9zaGFyZWQ7Cj4gICAgICAgICAg IGlmICggdG9wX3BhZ2UgKQo+ICAgICAgICAgICAgICAgcHV0X3BhZ2UodG9wX3BhZ2UpOwo+IC0g ICAgICAgIHJldHVybiBJTlZBTElEX0dGTjsKPiArICAgICAgICByZXR1cm4gZ2ZuX3goSU5WQUxJ RF9HRk4pOwo+ICAgICAgIH0KPiAgICAgICBpZiAoICF0b3BfcGFnZSApCj4gICAgICAgewo+IEBA IC0xMTAsMTIgKzExMCwxMiBAQCB1bnNpZ25lZCBsb25nIGhhcF9wMm1fZ2FfdG9fZ2ZuKEdVRVNU X1BBR0lOR19MRVZFTFMpKAo+ICAgICAgICAgICAgICAgQVNTRVJUKHAybV9pc19ob3N0cDJtKHAy bSkpOwo+ICAgICAgICAgICAgICAgcGZlY1swXSA9IFBGRUNfcGFnZV9wYWdlZDsKPiAgICAgICAg ICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHAybS0+ZG9tYWluLCBnZm5feChnZm4pKTsK PiAtICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfR0ZOOwo+ICsgICAgICAgICAgICByZXR1cm4g Z2ZuX3goSU5WQUxJRF9HRk4pOwo+ICAgICAgICAgICB9Cj4gICAgICAgICAgIGlmICggcDJtX2lz X3NoYXJlZChwMm10KSApCj4gICAgICAgICAgIHsKPiAgICAgICAgICAgICAgIHBmZWNbMF0gPSBQ RkVDX3BhZ2Vfc2hhcmVkOwo+IC0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9HRk47Cj4gKyAg ICAgICAgICAgIHJldHVybiBnZm5feChJTlZBTElEX0dGTik7Cj4gICAgICAgICAgIH0KPgo+ICAg ICAgICAgICBpZiAoIHBhZ2Vfb3JkZXIgKQo+IEBAIC0xNDcsNyArMTQ3LDcgQEAgdW5zaWduZWQg bG9uZyBoYXBfcDJtX2dhX3RvX2dmbihHVUVTVF9QQUdJTkdfTEVWRUxTKSgKPiAgICAgICBpZiAo ICFodm1fbnhfZW5hYmxlZCh2KSAmJiAhaHZtX3NtZXBfZW5hYmxlZCh2KSApCj4gICAgICAgICAg IHBmZWNbMF0gJj0gflBGRUNfaW5zbl9mZXRjaDsKPgo+IC0gICAgcmV0dXJuIElOVkFMSURfR0ZO Owo+ICsgICAgcmV0dXJuIGdmbl94KElOVkFMSURfR0ZOKTsKPiAgIH0KPgo+Cj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2VwdC5jIGIveGVuL2FyY2gveDg2L21tL2hh cC9uZXN0ZWRfZXB0LmMKPiBpbmRleCA5NGNmODMyLi4wMmIyN2IxIDEwMDY0NAo+IC0tLSBhL3hl bi9hcmNoL3g4Ni9tbS9oYXAvbmVzdGVkX2VwdC5jCj4gKysrIGIveGVuL2FyY2gveDg2L21tL2hh cC9uZXN0ZWRfZXB0LmMKPiBAQCAtMjM2LDcgKzIzNiw3IEBAIGludCBuZXB0X3RyYW5zbGF0ZV9s MmdhKHN0cnVjdCB2Y3B1ICp2LCBwYWRkcl90IGwyZ2EsCj4gICAgICAgZXB0X3dhbGtfdCBndzsK PiAgICAgICByd3hfYWNjICY9IEVQVEVfUldYX01BU0s7Cj4KPiAtICAgICpsMWdmbiA9IElOVkFM SURfR0ZOOwo+ICsgICAgKmwxZ2ZuID0gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+Cj4gICAgICAgcmMg PSBuZXB0X3dhbGtfdGFibGVzKHYsIGwyZ2EsICZndyk7Cj4gICAgICAgc3dpdGNoICggcmMgKQo+ IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLXBvZC5jIGIveGVuL2FyY2gveDg2L21t L3AybS1wb2QuYwo+IGluZGV4IGYzODQ1ODkuLjE0OWY1MjkgMTAwNjQ0Cj4gLS0tIGEveGVuL2Fy Y2gveDg2L21tL3AybS1wb2QuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0tcG9kLmMKPiBA QCAtMTAwMyw3ICsxMDAzLDcgQEAgc3RhdGljIHZvaWQgcG9kX2VhZ2VyX3JlY2xhaW0oc3RydWN0 IHAybV9kb21haW4gKnAybSkKPiAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeCA9IChtcnAtPmlk eCArIGkrKykgJSBBUlJBWV9TSVpFKG1ycC0+bGlzdCk7Cj4gICAgICAgICAgIHVuc2lnbmVkIGxv bmcgZ2ZuID0gbXJwLT5saXN0W2lkeF07Cj4KPiAtICAgICAgICBpZiAoIGdmbiAhPSBJTlZBTElE X0dGTiApCj4gKyAgICAgICAgaWYgKCBnZm4gIT0gZ2ZuX3goSU5WQUxJRF9HRk4pICkKPiAgICAg ICAgICAgewo+ICAgICAgICAgICAgICAgaWYgKCBnZm4gJiBQT0RfTEFTVF9TVVBFUlBBR0UgKQo+ ICAgICAgICAgICAgICAgewo+IEBAIC0xMDIwLDcgKzEwMjAsNyBAQCBzdGF0aWMgdm9pZCBwb2Rf ZWFnZXJfcmVjbGFpbShzdHJ1Y3QgcDJtX2RvbWFpbiAqcDJtKQo+ICAgICAgICAgICAgICAgZWxz ZQo+ICAgICAgICAgICAgICAgICAgIHAybV9wb2RfemVyb19jaGVjayhwMm0sICZnZm4sIDEpOwo+ Cj4gLSAgICAgICAgICAgIG1ycC0+bGlzdFtpZHhdID0gSU5WQUxJRF9HRk47Cj4gKyAgICAgICAg ICAgIG1ycC0+bGlzdFtpZHhdID0gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+ICAgICAgICAgICB9Cj4K PiAgICAgICB9IHdoaWxlICggKHAybS0+cG9kLmNvdW50ID09IDApICYmIChpIDwgQVJSQVlfU0la RShtcnAtPmxpc3QpKSApOwo+IEBAIC0xMDMxLDcgKzEwMzEsNyBAQCBzdGF0aWMgdm9pZCBwb2Rf ZWFnZXJfcmVjb3JkKHN0cnVjdCBwMm1fZG9tYWluICpwMm0sCj4gICB7Cj4gICAgICAgc3RydWN0 IHBvZF9tcnBfbGlzdCAqbXJwID0gJnAybS0+cG9kLm1ycDsKPgo+IC0gICAgQVNTRVJUKGdmbiAh PSBJTlZBTElEX0dGTik7Cj4gKyAgICBBU1NFUlQoZ2ZuICE9IGdmbl94KElOVkFMSURfR0ZOKSk7 Cj4KPiAgICAgICBtcnAtPmxpc3RbbXJwLT5pZHgrK10gPQo+ICAgICAgICAgICBnZm4gfCAob3Jk ZXIgPT0gUEFHRV9PUkRFUl8yTSA/IFBPRF9MQVNUX1NVUEVSUEFHRSA6IDApOwo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvbW0vcDJtLmMgYi94ZW4vYXJjaC94ODYvbW0vcDJtLmMKPiBpbmRl eCBiOTNjOGEyLi5mZjBjY2U4IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+ ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYwo+IEBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBp bnQgcDJtX2luaXRpYWxpc2Uoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHAybV9kb21haW4gKnAy bSkKPiAgICAgICBwMm0tPm5wMm1fYmFzZSA9IFAyTV9CQVNFX0VBRERSOwo+Cj4gICAgICAgZm9y ICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAybS0+cG9kLm1ycC5saXN0KTsgKytpICkKPiAtICAg ICAgICBwMm0tPnBvZC5tcnAubGlzdFtpXSA9IElOVkFMSURfR0ZOOwo+ICsgICAgICAgIHAybS0+ cG9kLm1ycC5saXN0W2ldID0gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+Cj4gICAgICAgaWYgKCBoYXBf ZW5hYmxlZChkKSAmJiBjcHVfaGFzX3ZteCApCj4gICAgICAgICAgIHJldCA9IGVwdF9wMm1faW5p dChwMm0pOwo+IEBAIC0xODYzLDcgKzE4NjMsNyBAQCBsb25nIHAybV9zZXRfbWVtX2FjY2Vzcyhz dHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLAo+ICAgICAgIH0KPgo+ICAg ICAgIC8qIElmIHJlcXVlc3QgdG8gc2V0IGRlZmF1bHQgYWNjZXNzLiAqLwo+IC0gICAgaWYgKCBn Zm5feChnZm4pID09IElOVkFMSURfR0ZOICkKPiArICAgIGlmICggZ2ZuX2VxKGdmbiwgSU5WQUxJ RF9HRk4pICkKPiAgICAgICB7Cj4gICAgICAgICAgIHAybS0+ZGVmYXVsdF9hY2Nlc3MgPSBhOwo+ ICAgICAgICAgICByZXR1cm4gMDsKPiBAQCAtMTkzMiw3ICsxOTMyLDcgQEAgaW50IHAybV9nZXRf bWVtX2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLCBnZm5fdCBnZm4sIHhlbm1lbV9hY2Nlc3NfdCAq YWNjZXNzKQo+ICAgICAgIH07Cj4KPiAgICAgICAvKiBJZiByZXF1ZXN0IHRvIGdldCBkZWZhdWx0 IGFjY2Vzcy4gKi8KPiAtICAgIGlmICggZ2ZuX3goZ2ZuKSA9PSBJTlZBTElEX0dGTiApCj4gKyAg ICBpZiAoIGdmbl9lcShnZm4sIElOVkFMSURfR0ZOKSApCj4gICAgICAgewo+ICAgICAgICAgICAq YWNjZXNzID0gbWVtYWNjZXNzW3AybS0+ZGVmYXVsdF9hY2Nlc3NdOwo+ICAgICAgICAgICByZXR1 cm4gMDsKPiBAQCAtMjExMyw4ICsyMTEzLDggQEAgdW5zaWduZWQgbG9uZyBwYWdpbmdfZ3ZhX3Rv X2dmbihzdHJ1Y3QgdmNwdSAqdiwKPiAgICAgICAgICAgbW9kZSA9IHBhZ2luZ19nZXRfbmVzdGVk bW9kZSh2KTsKPiAgICAgICAgICAgbDJfZ2ZuID0gbW9kZS0+Z3ZhX3RvX2dmbih2LCBwMm0sIHZh LCBwZmVjKTsKPgo+IC0gICAgICAgIGlmICggbDJfZ2ZuID09IElOVkFMSURfR0ZOICkKPiAtICAg ICAgICAgICAgcmV0dXJuIElOVkFMSURfR0ZOOwo+ICsgICAgICAgIGlmICggbDJfZ2ZuID09IGdm bl94KElOVkFMSURfR0ZOKSApCj4gKyAgICAgICAgICAgIHJldHVybiBnZm5feChJTlZBTElEX0dG Tik7Cj4KPiAgICAgICAgICAgLyogdHJhbnNsYXRlIGwyIGd1ZXN0IGdmbiBpbnRvIGwxIGd1ZXN0 IGdmbiAqLwo+ICAgICAgICAgICBydiA9IG5lc3RlZGhhcF93YWxrX0wxX3AybSh2LCBsMl9nZm4s ICZsMV9nZm4sICZsMV9wYWdlX29yZGVyLCAmbDFfcDJtYSwKPiBAQCAtMjEyMyw3ICsyMTIzLDcg QEAgdW5zaWduZWQgbG9uZyBwYWdpbmdfZ3ZhX3RvX2dmbihzdHJ1Y3QgdmNwdSAqdiwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEoKnBmZWMgJiBQRkVDX2luc25fZmV0 Y2gpKTsKPgo+ICAgICAgICAgICBpZiAoIHJ2ICE9IE5FU1RFREhWTV9QQUdFRkFVTFRfRE9ORSAp Cj4gLSAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0dGTjsKPiArICAgICAgICAgICAgcmV0dXJu IGdmbl94KElOVkFMSURfR0ZOKTsKPgo+ICAgICAgICAgICAvKgo+ICAgICAgICAgICAgKiBTYW5p dHkgY2hlY2sgdGhhdCBsMV9nZm4gY2FuIGJlIHVzZWQgcHJvcGVybHkgYXMgYSA0SyBtYXBwaW5n LCBldmVuCj4gQEAgLTI0MTUsNyArMjQxNSw3IEBAIHN0YXRpYyB2b2lkIHAybV9pbml0X2FsdHAy bV9oZWxwZXIoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGkpCj4gICAgICAgc3RydWN0 IHAybV9kb21haW4gKnAybSA9IGQtPmFyY2guYWx0cDJtX3AybVtpXTsKPiAgICAgICBzdHJ1Y3Qg ZXB0X2RhdGEgKmVwdDsKPgo+IC0gICAgcDJtLT5taW5fcmVtYXBwZWRfZ2ZuID0gSU5WQUxJRF9H Rk47Cj4gKyAgICBwMm0tPm1pbl9yZW1hcHBlZF9nZm4gPSBnZm5feChJTlZBTElEX0dGTik7Cj4g ICAgICAgcDJtLT5tYXhfcmVtYXBwZWRfZ2ZuID0gMDsKPiAgICAgICBlcHQgPSAmcDJtLT5lcHQ7 Cj4gICAgICAgZXB0LT5hc3IgPSBwYWdldGFibGVfZ2V0X3BmbihwMm1fZ2V0X3BhZ2V0YWJsZShw Mm0pKTsKPiBAQCAtMjU1MSw3ICsyNTUxLDcgQEAgaW50IHAybV9jaGFuZ2VfYWx0cDJtX2dmbihz dHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaWR4LAo+Cj4gICAgICAgbWZuID0gYXAybS0+ Z2V0X2VudHJ5KGFwMm0sIGdmbl94KG9sZF9nZm4pLCAmdCwgJmEsIDAsIE5VTEwsIE5VTEwpOwo+ Cj4gLSAgICBpZiAoIGdmbl94KG5ld19nZm4pID09IElOVkFMSURfR0ZOICkKPiArICAgIGlmICgg Z2ZuX2VxKG5ld19nZm4sIElOVkFMSURfR0ZOKSApCj4gICAgICAgewo+ICAgICAgICAgICBpZiAo IG1mbl92YWxpZChtZm4pICkKPiAgICAgICAgICAgICAgIHAybV9yZW1vdmVfcGFnZShhcDJtLCBn Zm5feChvbGRfZ2ZuKSwgbWZuX3gobWZuKSwgUEFHRV9PUkRFUl80Syk7Cj4gQEAgLTI2MTMsNyAr MjYxMyw3IEBAIHN0YXRpYyB2b2lkIHAybV9yZXNldF9hbHRwMm0oc3RydWN0IHAybV9kb21haW4g KnAybSkKPiAgICAgICAvKiBVbmluaXQgYW5kIHJlaW5pdCBlcHQgdG8gZm9yY2UgVExCIHNob290 ZG93biAqLwo+ICAgICAgIGVwdF9wMm1fdW5pbml0KHAybSk7Cj4gICAgICAgZXB0X3AybV9pbml0 KHAybSk7Cj4gLSAgICBwMm0tPm1pbl9yZW1hcHBlZF9nZm4gPSBJTlZBTElEX0dGTjsKPiArICAg IHAybS0+bWluX3JlbWFwcGVkX2dmbiA9IGdmbl94KElOVkFMSURfR0ZOKTsKPiAgICAgICBwMm0t Pm1heF9yZW1hcHBlZF9nZm4gPSAwOwo+ICAgfQo+Cj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9tbS9zaGFkb3cvY29tbW9uLmMgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L2NvbW1vbi5jCj4g aW5kZXggMWMwYjZjZC4uNjFjY2RkZiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvbW0vc2hh ZG93L2NvbW1vbi5jCj4gKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9jb21tb24uYwo+IEBA IC0xNzA3LDcgKzE3MDcsNyBAQCBzdGF0aWMgbWZuX3QgZW11bGF0ZV9ndmFfdG9fbWZuKHN0cnVj dCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIHZhZGRyLAo+Cj4gICAgICAgLyogVHJhbnNsYXRlIHRo ZSBWQSB0byBhIEdGTi4gKi8KPiAgICAgICBnZm4gPSBwYWdpbmdfZ2V0X2hvc3Rtb2RlKHYpLT5n dmFfdG9fZ2ZuKHYsIE5VTEwsIHZhZGRyLCAmcGZlYyk7Cj4gLSAgICBpZiAoIGdmbiA9PSBJTlZB TElEX0dGTiApCj4gKyAgICBpZiAoIGdmbiA9PSBnZm5feChJTlZBTElEX0dGTikgKQo+ICAgICAg IHsKPiAgICAgICAgICAgaWYgKCBpc19odm1fdmNwdSh2KSApCj4gICAgICAgICAgICAgICBodm1f aW5qZWN0X3BhZ2VfZmF1bHQocGZlYywgdmFkZHIpOwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYvbW0vc2hhZG93L211bHRpLmMgYi94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211bHRpLmMKPiBp bmRleCBmODkyZTJmLi5lNTRjOGI3IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFk b3cvbXVsdGkuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYwo+IEBAIC0z NjYwLDcgKzM2NjAsNyBAQCBzaF9ndmFfdG9fZ2ZuKHN0cnVjdCB2Y3B1ICp2LCBzdHJ1Y3QgcDJt X2RvbWFpbiAqcDJtLAo+ICAgICAgICAgICAgKi8KPiAgICAgICAgICAgaWYgKCBpc19odm1fdmNw dSh2KSAmJiAhaHZtX254X2VuYWJsZWQodikgJiYgIWh2bV9zbWVwX2VuYWJsZWQodikgKQo+ICAg ICAgICAgICAgICAgcGZlY1swXSAmPSB+UEZFQ19pbnNuX2ZldGNoOwo+IC0gICAgICAgIHJldHVy biBJTlZBTElEX0dGTjsKPiArICAgICAgICByZXR1cm4gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+ICAg ICAgIH0KPiAgICAgICBnZm4gPSBndWVzdF93YWxrX3RvX2dmbigmZ3cpOwo+Cj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvcHJpdmF0ZS5oIGIveGVuL2FyY2gveDg2L21tL3No YWRvdy9wcml2YXRlLmgKPiBpbmRleCBjNDI0YWQ2Li44MjQ3OTZmIDEwMDY0NAo+IC0tLSBhL3hl bi9hcmNoL3g4Ni9tbS9zaGFkb3cvcHJpdmF0ZS5oCj4gKysrIGIveGVuL2FyY2gveDg2L21tL3No YWRvdy9wcml2YXRlLmgKPiBAQCAtNzk2LDcgKzc5Niw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgbG9uZyB2dGxiX2xvb2t1cChzdHJ1Y3QgdmNwdSAqdiwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhLCB1aW50MzJfdCBwZmVjKQo+ ICAgewo+ICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9udW1iZXIgPSB2YSA+PiBQQUdFX1NISUZU Owo+IC0gICAgdW5zaWduZWQgbG9uZyBmcmFtZV9udW1iZXIgPSBJTlZBTElEX0dGTjsKPiArICAg IHVuc2lnbmVkIGxvbmcgZnJhbWVfbnVtYmVyID0gZ2ZuX3goSU5WQUxJRF9HRk4pOwo+ICAgICAg IGludCBpID0gdnRsYl9oYXNoKHBhZ2VfbnVtYmVyKTsKPgo+ICAgICAgIHNwaW5fbG9jaygmdi0+ YXJjaC5wYWdpbmcudnRsYl9sb2NrKTsKPiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYW1kL2lvbW11X21hcC5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11 X21hcC5jCj4gaW5kZXggYzc1ODQ1OS4uYjhjMGE0OCAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMKPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC9hbWQvaW9tbXVfbWFwLmMKPiBAQCAtNTU1LDcgKzU1NSw3IEBAIHN0YXRpYyBpbnQgdXBk YXRlX3BhZ2luZ19tb2RlKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuKQo+ICAg ICAgIHVuc2lnbmVkIGxvbmcgb2xkX3Jvb3RfbWZuOwo+ICAgICAgIHN0cnVjdCBkb21haW5faW9t bXUgKmhkID0gZG9tX2lvbW11KGQpOwo+Cj4gLSAgICBpZiAoIGdmbiA9PSBJTlZBTElEX0dGTiAp Cj4gKyAgICBpZiAoIGdmbiA9PSBnZm5feChJTlZBTElEX0dGTikgKQo+ICAgICAgICAgICByZXR1 cm4gLUVBRERSTk9UQVZBSUw7Cj4gICAgICAgQVNTRVJUKCEoZ2ZuID4+IERFRkFVTFRfRE9NQUlO X0FERFJFU1NfV0lEVEgpKTsKPgo+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvaW9tbXUuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5jCj4gaW5k ZXggZjAxMDYxMi4uYzMyMmI5ZiAxMDA2NDQKPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC92dGQvaW9tbXUuYwo+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5j Cj4gQEAgLTYxMSw3ICs2MTEsNyBAQCBzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBpb21tdV9mbHVz aF9pb3RsYihzdHJ1Y3QgZG9tYWluICpkLAo+ICAgICAgICAgICBpZiAoIGlvbW11X2RvbWlkID09 IC0xICkKPiAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Cj4gLSAgICAgICAgaWYgKCBwYWdlX2Nv dW50ICE9IDEgfHwgZ2ZuID09IElOVkFMSURfR0ZOICkKPiArICAgICAgICBpZiAoIHBhZ2VfY291 bnQgIT0gMSB8fCBnZm4gPT0gZ2ZuX3goSU5WQUxJRF9HRk4pICkKPiAgICAgICAgICAgICAgIHJj ID0gaW9tbXVfZmx1c2hfaW90bGJfZHNpKGlvbW11LCBpb21tdV9kb21pZCwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZsdXNoX2Rldl9pb3RsYik7Cj4gICAg ICAgICAgIGVsc2UKPiBAQCAtNjQwLDcgKzY0MCw3IEBAIHN0YXRpYyBpbnQgX19tdXN0X2NoZWNr IGlvbW11X2ZsdXNoX2lvdGxiX3BhZ2VzKHN0cnVjdCBkb21haW4gKmQsCj4KPiAgIHN0YXRpYyBp bnQgX19tdXN0X2NoZWNrIGlvbW11X2ZsdXNoX2lvdGxiX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+ ICAgewo+IC0gICAgcmV0dXJuIGlvbW11X2ZsdXNoX2lvdGxiKGQsIElOVkFMSURfR0ZOLCAwLCAw KTsKPiArICAgIHJldHVybiBpb21tdV9mbHVzaF9pb3RsYihkLCBnZm5feChJTlZBTElEX0dGTiks IDAsIDApOwo+ICAgfQo+Cj4gICAvKiBjbGVhciBvbmUgcGFnZSdzIHBhZ2UgdGFibGUgKi8KPiBk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2lvbW11LmMgYi94ZW4vZHJp dmVycy9wYXNzdGhyb3VnaC94ODYvaW9tbXUuYwo+IGluZGV4IGNkNDM1ZDcuLjY5Y2Q2YzUgMTAw NjQ0Cj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2lvbW11LmMKPiArKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvaW9tbXUuYwo+IEBAIC02MSw3ICs2MSw3IEBAIGlu dCBhcmNoX2lvbW11X3BvcHVsYXRlX3BhZ2VfdGFibGUoc3RydWN0IGRvbWFpbiAqZCkKPiAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gcGFnZV90b19tZm4ocGFnZSk7Cj4gICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIGdmbiA9IG1mbl90b19nbWZuKGQsIG1mbik7Cj4KPiAtICAg ICAgICAgICAgaWYgKCBnZm4gIT0gSU5WQUxJRF9HRk4gKQo+ICsgICAgICAgICAgICBpZiAoIGdm biAhPSBnZm5feChJTlZBTElEX0dGTikgKQo+ICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAg ICAgICAgIEFTU0VSVCghKGdmbiA+PiBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKSk7Cj4g ICAgICAgICAgICAgICAgICAgQlVHX09OKFNIQVJFRF9NMlAoZ2ZuKSk7Cj4gZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfcHQuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3Vl c3RfcHQuaAo+IGluZGV4IGE4ZDk4MGMuLjc5ZWQ0ZmYgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9ndWVzdF9wdC5oCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9ndWVzdF9w dC5oCj4gQEAgLTMyLDcgKzMyLDcgQEAKPiAgICNlcnJvciBHVUVTVF9QQUdJTkdfTEVWRUxTIG5v dCBkZWZpbmVkCj4gICAjZW5kaWYKPgo+IC0jZGVmaW5lIFZBTElEX0dGTihtKSAobSAhPSBJTlZB TElEX0dGTikKPiArI2RlZmluZSBWQUxJRF9HRk4obSkgKG0gIT0gZ2ZuX3goSU5WQUxJRF9HRk4p KQo+Cj4gICBzdGF0aWMgaW5saW5lIGludAo+ICAgdmFsaWRfZ2ZuKGdmbl90IG0pCj4gQEAgLTI1 MSw3ICsyNTEsNyBAQCBzdGF0aWMgaW5saW5lIGdmbl90Cj4gICBndWVzdF93YWxrX3RvX2dmbih3 YWxrX3QgKmd3KQo+ICAgewo+ICAgICAgIGlmICggIShndWVzdF9sMWVfZ2V0X2ZsYWdzKGd3LT5s MWUpICYgX1BBR0VfUFJFU0VOVCkgKQo+IC0gICAgICAgIHJldHVybiBfZ2ZuKElOVkFMSURfR0ZO KTsKPiArICAgICAgICByZXR1cm4gSU5WQUxJRF9HRk47Cj4gICAgICAgcmV0dXJuIGd1ZXN0X2wx ZV9nZXRfZ2ZuKGd3LT5sMWUpOwo+ICAgfQo+Cj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2Fz bS14ODYvcDJtLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oCj4gaW5kZXggNGFiMzU3NC4u MTk0MDIwZSAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3AybS5oCj4gKysrIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9wMm0uaAo+IEBAIC0zMjQsNyArMzI0LDcgQEAgc3RydWN0IHAy bV9kb21haW4gewo+ICAgI2RlZmluZSBOUl9QT0RfTVJQX0VOVFJJRVMgMzIKPgo+ICAgLyogRW5j b2RlIE9SREVSXzJNIHN1cGVycGFnZSBpbiB0b3AgYml0IG9mIEdGTiAqLwo+IC0jZGVmaW5lIFBP RF9MQVNUX1NVUEVSUEFHRSAoSU5WQUxJRF9HRk4gJiB+KElOVkFMSURfR0ZOID4+IDEpKQo+ICsj ZGVmaW5lIFBPRF9MQVNUX1NVUEVSUEFHRSAoZ2ZuX3goSU5WQUxJRF9HRk4pICYgfihnZm5feChJ TlZBTElEX0dGTikgPj4gMSkpCj4KPiAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGlzdFtO Ul9QT0RfTVJQX0VOVFJJRVNdOwo+ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeDsKPiBk aWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL21tLmggYi94ZW4vaW5jbHVkZS94ZW4vbW0uaAo+ IGluZGV4IDdmMjA3ZWMuLjU4YmMwYjggMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUveGVuL21t LmgKPiArKysgYi94ZW4vaW5jbHVkZS94ZW4vbW0uaAo+IEBAIC04NCw3ICs4NCw3IEBAIHN0YXRp YyBpbmxpbmUgYm9vbF90IG1mbl9lcShtZm5fdCB4LCBtZm5fdCB5KQo+Cj4gICBUWVBFX1NBRkUo dW5zaWduZWQgbG9uZywgZ2ZuKTsKPiAgICNkZWZpbmUgUFJJX2dmbiAgICAgICAgICAiMDVseCIK PiAtI2RlZmluZSBJTlZBTElEX0dGTiAgICAgICh+MFVMKQo+ICsjZGVmaW5lIElOVkFMSURfR0ZO ICAgICAgX2dmbih+MFVMKQo+Cj4gICAjaWZuZGVmIGdmbl90Cj4gICAjZGVmaW5lIGdmbl90IC8q IEdyZXAgZm9kZGVyOiBnZm5fdCwgX2dmbigpIGFuZCBnZm5feCgpIGFyZSBkZWZpbmVkIGFib3Zl ICovCj4KCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=