From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH] drm/msm: Remove dpu_edid_parser Date: Fri, 23 Feb 2018 16:51:41 -0500 Message-ID: <20180223215141.GQ223881@art_vandelay> References: <20180223191515.155783-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sean Paul , abhinavk-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMDE6Mjk6MDNQTSAtMDgwMCwgYWJoaW5hdmtAY29kZWF1 cm9yYS5vcmcgd3JvdGU6Cj4gSSBhbSBPSyB3aXRoIHJlbW92aW5nIHNvbWUgcGFydHMgb2YgdGhl IHBhcnNlciBidXQgbm90IGVudGlyZWx5Lgo+IAo+IEZ1bmRhbWVudGFsbHksIHdlIHdlbnQgYWhl YWQgd2l0aCB0aGUgcGFyc2VyIGZvciBhIGNvdXBsZSBvZiByZWFzb25zOgo+IAo+IC0+IFdlIHdv dWxkIGxpa2UgdG8gYmUgYWJsZSB0byBhc3NvY2lhdGUgdGhlIGNvbG9yIGZvcm1hdCB3aXRoIHRo ZSBtb2RlLgo+IFRoaXMgaGVscHMgdXMgZGVjaWRlIHRoYXQgaWYgdGhlIHNhbWUgbW9kZSBzdXBw b3J0cyBib3RoIFJHQi9ZVVYgdGhlbiB3aGljaAo+IG9uZSB3ZSBjYW4gcGljay4KPiAKPiAtPiBU aGUgdXBzdHJlYW0gcGFyc2VyIGN1cnJlbnRseSBqdXN0IGFkZHMgaXQgdG8gdGhlIHN1cHBvcnRl ZCBmb3JtYXRzIG9mCj4gdGhlIHNpbmsgaW5mby0+Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1Jf Rk9STUFUX1lDUkNCNDIwOyBIb3dldmVyIHRoZSBsaW5rCj4gYmV0d2VlbiB0aGUgbW9kZSBhbmQg dGhlIGZvcm1hdCBpdHNlbGYgaXMgdW5jbGVhcgo+IAo+IEkgd291bGQgbGlrZSB0byBrbm93IGlm IGFueSBvZiB0aGUgYWJvdmUgaGF2ZSBiZWVuIGFkZHJlc3NlZCBzbyBmYXIgYmVmb3JlCj4gcmV2 ZXJ0aW5nIHRoaXMuCgpUaGUgaW5mb3JtYXRpb24gb2Ygd2hpY2ggbW9kZXMgc3VwcG9ydCB3aGlj aCBmb3JtYXRzIGlzIHN0b3JlZCBpbiBiaXRtYXBzIHdpdGhpbgpkcm1faGRtaV9pbmZvLiBUaGUg ZG9jdW1lbnRhdGlvbiBpcyBoZXJlOgoKaHR0cHM6Ly8wMS5vcmcvbGludXhncmFwaGljcy9nZngt ZG9jcy9kcm0vZ3B1L2RybS1rbXMuaHRtbD9oaWdobGlnaHQ9ZHJtX2hkbWlfaW5mbyNjLmRybV9o ZG1pX2luZm8KCklzIHRoaXMgc3VmZmljaWVudD8KClNlYW4KCj4gCj4gVGhhbmtzCj4gCj4gQWJo aW5hdgo+IAo+IAo+IE9uIDIwMTgtMDItMjMgMTE6MTUsIFNlYW4gUGF1bCB3cm90ZToKPiA+IFVz ZSBkcm1fZWRpZCB0byBwYXJzZSB0aGUgZWRpZCBpbnN0ZWFkIG9mIHRoZSBoYW5kIHJvbGxlZCBk cHUgdmVyc2lvbi4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBj aHJvbWl1bS5vcmc+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAg ICAgICAgIHwgICAxIC0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmMgICAg IHwgIDIyICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMgICB8ICAg NyAtCj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICB8ICA3NyArKy0K PiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmggICAgIHwgICA3ICstCj4gPiAg ZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJzZXIuYyB8IDY1NyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgg fCAxNjYgLS0tLS0tLQo+ID4gIDcgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgODgy IGRlbGV0aW9ucygtKQo+ID4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9lZGlkX3BhcnNlci5jCj4gPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gPiBpbmRl eCBmY2Q4NWFlMjhkNjYuLjJmYjliYTExZGYxOSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK PiA+IEBAIC04Niw3ICs4Niw2IEBAIG1zbS15IDo9IFwKPiA+ICAJZGlzcC9kcHUxL2RwdV9ybS5v IFwKPiA+ICAJZGlzcC9kcHUxL2RwdV92YmlmLm8gXAo+ID4gIAlkcHVfZGJnLm8gXAo+ID4gLQlk cHVfZWRpZF9wYXJzZXIubyBcCj4gPiAgCWRwdV9pb191dGlsLm8gXAo+ID4gIAlkcHVfZGJnX2V2 dGxvZy5vIFwKPiA+ICAJZHB1X3Bvd2VyX2hhbmRsZS5vIFwKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9hdWRpby5jCj4gPiBpbmRleCA0ZTBjZGNkMTVjOGMuLmNlMDBiOGI1MjYzMSAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYwo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4gPiBAQCAtMTgsNiArMTgsNyBAQAo+ID4g ICNpbmNsdWRlIDxsaW51eC9tc21fZXh0X2Rpc3BsYXkuaD4KPiA+IAo+ID4gICNpbmNsdWRlIDxk cm0vZHJtX2RwX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KPiA+IAo+ ID4gICNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4gPiAgI2luY2x1ZGUgImRwX2F1ZGlvLmgiCj4g PiBAQCAtNDgwLDcgKzQ4MSw2IEBAIHN0YXRpYyBpbnQgZHBfYXVkaW9fZ2V0X2VkaWRfYmxrKHN0 cnVjdAo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ID4gIHsKPiA+ICAJaW50IHJjID0gMDsK PiA+ICAJc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUgKmF1ZGlvOwo+ID4gLQlzdHJ1Y3QgZHB1X2Vk aWRfY3RybCAqZWRpZDsKPiA+IAo+ID4gIAlhdWRpbyA9IGdldF9hdWRpb19nZXRfZGF0YShwZGV2 KTsKPiA+ICAJaWYgKElTX0VSUihhdWRpbykpIHsKPiA+IEBAIC00ODgsMTkgKzQ4OCwyOSBAQCBz dGF0aWMgaW50IGRwX2F1ZGlvX2dldF9lZGlkX2JsayhzdHJ1Y3QKPiA+IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKPiA+ICAJCWdvdG8gZW5kOwo+ID4gIAl9Cj4gPiAKPiA+IC0JaWYgKCFhdWRpby0+ cGFuZWwgfHwgIWF1ZGlvLT5wYW5lbC0+ZWRpZF9jdHJsKSB7Cj4gPiArCWlmICghYXVkaW8tPnBh bmVsIHx8ICFhdWRpby0+cGFuZWwtPmVkaWQpIHsKPiA+ICAJCXByX2VycigiaW52YWxpZCBwYW5l bCBkYXRhXG4iKTsKPiA+ICAJCXJjID0gLUVJTlZBTDsKPiA+ICAJCWdvdG8gZW5kOwo+ID4gIAl9 Cj4gPiAKPiA+IC0JZWRpZCA9IGF1ZGlvLT5wYW5lbC0+ZWRpZF9jdHJsOwo+ID4gLQo+ID4gKy8q Cj4gPiArICogVE9ETzoKPiA+ICsgKglhdWRpb19kYXRhX2JsayBzaG91bGQgYmUgY2hhbmdlZCB0 byBiZSBhIGNlYV9zYWQgYXJyYXkKPiA+ICsgKglhdWRpb19kYXRhX2Jsa19zaXplIHNob3VsZCBi ZSBjaGFuZ2VkIHRvIGNvbnRhaW4gYSBjb3VudCBvZiBzYWRzCj4gPiArICoKPiA+ICsgKglPbmNl IHRoaXMgaXMgZG9uZSwgdXNlIGRybV9lZGlkX3RvX3NhZCgpIHRvIGV4dHJhY3QgdGhpcyBmcm9t Cj4gPiArICoJYXVkaW8tPnBhbmVsLT5lZGlkLiBJJ2QgY2hhbmdlIHRoaXMsIGJ1dCBJIGRvbid0 IGhhdmUgdGhhdCBjb2RlIDovCj4gPiArICovCj4gPiArI2lmIDAKPiA+ICAJYmxrLT5hdWRpb19k YXRhX2JsayA9IGVkaWQtPmF1ZGlvX2RhdGFfYmxvY2s7Cj4gPiAgCWJsay0+YXVkaW9fZGF0YV9i bGtfc2l6ZSA9IGVkaWQtPmFkYl9zaXplOwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKwlibGstPnNw a19hbGxvY19kYXRhX2Jsa19zaXplID0gZHJtX2VkaWRfdG9fc3BlYWtlcl9hbGxvY2F0aW9uKAo+ ID4gKwkJCQkJCWF1ZGlvLT5wYW5lbC0+ZWRpZCwKPiA+ICsJCQkJCQlibGstPnNwa3JfYWxsb2Nf ZGF0YV9ibG9jayk7Cj4gPiAKPiA+IC0JYmxrLT5zcGtfYWxsb2NfZGF0YV9ibGsgPSBlZGlkLT5z cGtyX2FsbG9jX2RhdGFfYmxvY2s7Cj4gPiAtCWJsay0+c3BrX2FsbG9jX2RhdGFfYmxrX3NpemUg PSBlZGlkLT5zYWRiX3NpemU7Cj4gPiAgZW5kOgo+ID4gIAlyZXR1cm4gcmM7Cj4gPiAgfQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4gPiBpbmRleCA2ZjJjMDY4MDliZjUu Ljg0NmVmMzNhZWNiZCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf ZGlzcGxheS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+ ID4gQEAgLTM3MywxMiArMzczLDYgQEAgc3RhdGljIGludCBkcF9kaXNwbGF5X2JpbmQoc3RydWN0 IGRldmljZSAqZGV2LAo+ID4gc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ID4gIAkJZ290byBlbmQ7 Cj4gPiAgCX0KPiA+IAo+ID4gLQlyYyA9IGRwLT5wYW5lbC0+ZHB1X2VkaWRfcmVnaXN0ZXIoZHAt PnBhbmVsKTsKPiA+IC0JaWYgKHJjKSB7Cj4gPiAtCQlwcl9lcnIoIkRSTSBEUCBFRElEIHJlZ2lz dGVyIGZhaWxlZFxuIik7Cj4gPiAtCQlnb3RvIGVuZDsKPiA+IC0JfQo+ID4gLQo+ID4gIAlyYyA9 IGRwLT5wb3dlci0+cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyLCAmcHJpdi0+cGhhbmRsZSk7 Cj4gPiAgCWlmIChyYykgewo+ID4gIAkJcHJfZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxl ZFxuIik7Cj4gPiBAQCAtNDEyLDcgKzQwNiw2IEBAIHN0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiA+ICAJ fQo+ID4gCj4gPiAgCSh2b2lkKWRwLT5wb3dlci0+cG93ZXJfY2xpZW50X2RlaW5pdChkcC0+cG93 ZXIpOwo+ID4gLQkodm9pZClkcC0+cGFuZWwtPmRwdV9lZGlkX2RlcmVnaXN0ZXIoZHAtPnBhbmVs KTsKPiA+ICAJKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyKGRwLT5hdXgpOwo+ID4g IAlkcF9kaXNwbGF5X2RlaW5pdGlhbGl6ZV9oZGNwKGRwKTsKPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4gPiBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcGFuZWwuYwo+ID4gaW5kZXggMTFjMzMzOGUyM2IxLi42M2Y5YmY0MDc1MDgg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+ID4gQEAgLTE2LDYgKzE2LDkg QEAKPiA+IAo+ID4gICNpbmNsdWRlICJkcF9wYW5lbC5oIgo+ID4gCj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fY29ubmVjdG9yLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ID4gKwo+ ID4gICNkZWZpbmUgRFBfUEFORUxfREVGQVVMVF9CUFAgMjQKPiA+ICAjZGVmaW5lIERQX01BWF9E U19QT1JUX0NPVU5UIDEKPiA+IAo+ID4gQEAgLTE1MSw5ICsxNTQsMTAgQEAgc3RhdGljIGludCBk cF9wYW5lbF9yZWFkX2VkaWQoc3RydWN0IGRwX3BhbmVsCj4gPiAqZHBfcGFuZWwsCj4gPiAgCXBh bmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBf cGFuZWwpOwo+ID4gCj4gPiAgCWRvIHsKPiA+IC0JCWRwdV9nZXRfZWRpZChjb25uZWN0b3IsICZw YW5lbC0+YXV4LT5kcm1fYXV4LT5kZGMsCj4gPiAtCQkJKHZvaWQgKiopJmRwX3BhbmVsLT5lZGlk X2N0cmwpOwo+ID4gLQkJaWYgKCFkcF9wYW5lbC0+ZWRpZF9jdHJsLT5lZGlkKSB7Cj4gPiArCQlr ZnJlZShkcF9wYW5lbC0+ZWRpZCk7Cj4gPiArCQlkcF9wYW5lbC0+ZWRpZCA9IGRybV9nZXRfZWRp ZChjb25uZWN0b3IsCj4gPiArCQkJCQkgICAgICAmcGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjKTsK PiA+ICsJCWlmICghZHBfcGFuZWwtPmVkaWQpIHsKPiA+ICAJCQlwcl9lcnIoIkVESUQgcmVhZCBm YWlsZWRcbiIpOwo+ID4gIAkJCXJldHJ5X2NudCsrOwo+ID4gIAkJCXBhbmVsLT5hdXgtPnJlY29u ZmlnKHBhbmVsLT5hdXgpOwo+ID4gQEAgLTE2Myw3ICsxNjcsNyBAQCBzdGF0aWMgaW50IGRwX3Bh bmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwKPiA+ICpkcF9wYW5lbCwKPiA+ICAJCX0KPiA+ ICAJfSB3aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKPiA+IAo+ID4gLQlyZXR1cm4gLUVJ TlZBTDsKPiA+ICsJcmV0dXJuIGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGRwX3BhbmVs LT5lZGlkKTsKPiA+ICB9Cj4gPiAKPiA+ICBzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfc2lua19j YXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4gPiBAQCAtMTg4LDcgKzE5Miw3IEBAIHN0 YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9zaW5rX2NhcHMoc3RydWN0IGRwX3BhbmVsCj4gPiAqZHBf cGFuZWwsCj4gPiAgCX0KPiA+IAo+ID4gIAlyYyA9IGRwX3BhbmVsX3JlYWRfZWRpZChkcF9wYW5l bCwgY29ubmVjdG9yKTsKPiA+IC0JaWYgKHJjKSB7Cj4gPiArCWlmIChyYyA8IDApIHsKPiA+ICAJ CXByX2VycigicGFuZWwgZWRpZCByZWFkIGZhaWxlZCwgc2V0IGZhaWxzYWZlIG1vZGVcbiIpOwo+ ID4gIAkJcmV0dXJuIHJjOwo+ID4gIAl9Cj4gPiBAQCAtMjE1LDcgKzIxOSw3IEBAIHN0YXRpYyB1 MzIgZHBfcGFuZWxfZ2V0X21heF9wY2xrKHN0cnVjdCBkcF9wYW5lbAo+ID4gKmRwX3BhbmVsKQo+ ID4gCj4gPiAgCWxpbmtfaW5mbyA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwo+ID4gCj4gPiAtCWJw YyA9IGRwdV9nZXRfc2lua19icGMoZHBfcGFuZWwtPmVkaWRfY3RybCk7Cj4gPiArCWJwYyA9IGRw X3BhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGM7Cj4gPiAgCWJwcCA9IGJwYyAqIG51 bV9jb21wb25lbnRzOwo+ID4gIAlpZiAoIWJwcCkKPiA+ICAJCWJwcCA9IERQX1BBTkVMX0RFRkFV TFRfQlBQOwo+ID4gQEAgLTI5MCw4ICsyOTQsOCBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX2dldF9t b2RlcyhzdHJ1Y3QgZHBfcGFuZWwKPiA+ICpkcF9wYW5lbCwKPiA+ICAJaWYgKGRwX3BhbmVsLT52 aWRlb190ZXN0KSB7Cj4gPiAgCQlkcF9wYW5lbF9zZXRfdGVzdF9tb2RlKHBhbmVsLCBtb2RlKTsK PiA+ICAJCXJldHVybiAxOwo+ID4gLQl9IGVsc2UgaWYgKGRwX3BhbmVsLT5lZGlkX2N0cmwtPmVk aWQpIHsKPiA+IC0JCXJldHVybiBfZHB1X2VkaWRfdXBkYXRlX21vZGVzKGNvbm5lY3RvciwgZHBf cGFuZWwtPmVkaWRfY3RybCk7Cj4gPiArCX0gZWxzZSBpZiAoZHBfcGFuZWwtPmVkaWQpIHsKPiA+ ICsJCXJldHVybiBkcF9wYW5lbF9yZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Cj4gPiAg CX0KPiA+IAo+ID4gIAkvKiBmYWlsLXNhZmUgbW9kZSAqLwo+ID4gQEAgLTMwMCw2ICszMDQsMjcg QEAgc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRwX3BhbmVsCj4gPiAqZHBf cGFuZWwsCj4gPiAgCXJldHVybiAxOwo+ID4gIH0KPiA+IAo+ID4gK3N0YXRpYyB1OCBkcF9wYW5l bF9nZXRfZWRpZF9jaGVja3N1bShzdHJ1Y3QgZWRpZCAqZWRpZCkKPiA+ICt7Cj4gPiArCXN0cnVj dCBlZGlkICpsYXN0X2Jsb2NrID0gTlVMTDsKPiA+ICsJdTggKnJhd19lZGlkID0gTlVMTDsKPiA+ ICsKPiA+ICsJaWYgKCFlZGlkKSB7Cj4gPiArCQlwcl9lcnIoImludmFsaWQgZWRpZCBpbnB1dFxu Iik7Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyYXdfZWRpZCA9ICh1OCAq KWVkaWQ7Cj4gPiArCXJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25zICogRURJRF9MRU5HVEgp Owo+ID4gKwlsYXN0X2Jsb2NrID0gKHN0cnVjdCBlZGlkICopcmF3X2VkaWQ7Cj4gPiArCj4gPiAr CWlmIChsYXN0X2Jsb2NrKQo+ID4gKwkJcmV0dXJuIGxhc3RfYmxvY2stPmNoZWNrc3VtOwo+ID4g Kwo+ID4gKwlwcl9lcnIoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyB2b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5r X3JlcXVlc3Qoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBk cF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPiA+IEBAIC0zMTIsNyArMzM3LDcgQEAgc3RhdGljIHZv aWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QKPiA+IGRwX3BhbmVsICpkcF9w YW5lbCkKPiA+ICAJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5l bF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4gPiAKPiA+ICAJaWYgKHBhbmVsLT5saW5rLT5zaW5rX3Jl cXVlc3QgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Cj4gPiAtCQl1OCBjaGVja3N1bSA9IGRw dV9nZXRfZWRpZF9jaGVja3N1bShkcF9wYW5lbC0+ZWRpZF9jdHJsKTsKPiA+ICsJCXU4IGNoZWNr c3VtID0gZHBfcGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWQpOwo+ID4gCj4g PiAgCQlwYW5lbC0+bGluay0+c2VuZF9lZGlkX2NoZWNrc3VtKHBhbmVsLT5saW5rLCBjaGVja3N1 bSk7Cj4gPiAgCQlwYW5lbC0+bGluay0+c2VuZF90ZXN0X3Jlc3BvbnNlKHBhbmVsLT5saW5rKTsK PiA+IEBAIC0zODIsMzYgKzQwNyw2IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfdGltaW5nX2NmZyhz dHJ1Y3QgZHBfcGFuZWwKPiA+ICpkcF9wYW5lbCkKPiA+ICAJcmV0dXJuIHJjOwo+ID4gIH0KPiA+ IAo+ID4gLXN0YXRpYyBpbnQgZHBfcGFuZWxfZWRpZF9yZWdpc3RlcihzdHJ1Y3QgZHBfcGFuZWwg KmRwX3BhbmVsKQo+ID4gLXsKPiA+IC0JaW50IHJjID0gMDsKPiA+IC0KPiA+IC0JaWYgKCFkcF9w YW5lbCkgewo+ID4gLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiA+IC0JCXJjID0gLUVJ TlZBTDsKPiA+IC0JCWdvdG8gZW5kOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCWRwX3BhbmVsLT5lZGlk X2N0cmwgPSBkcHVfZWRpZF9pbml0KCk7Cj4gPiAtCWlmICghZHBfcGFuZWwtPmVkaWRfY3RybCkg ewo+ID4gLQkJcHJfZXJyKCJkcHUgZWRpZCBpbml0IGZvciBEUCBmYWlsZWRcbiIpOwo+ID4gLQkJ cmMgPSAtRU5PTUVNOwo+ID4gLQkJZ290byBlbmQ7Cj4gPiAtCX0KPiA+IC1lbmQ6Cj4gPiAtCXJl dHVybiByYzsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgZHBfcGFuZWxfZWRpZF9kZXJl Z2lzdGVyKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gPiAtewo+ID4gLQlpZiAoIWRwX3Bh bmVsKSB7Cj4gPiAtCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ID4gLQkJcmV0dXJuOwo+ ID4gLQl9Cj4gPiAtCj4gPiAtCWRwdV9lZGlkX2RlaW5pdCgodm9pZCAqKikmZHBfcGFuZWwtPmVk aWRfY3RybCk7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgZHBfcGFuZWxfaW5pdF9wYW5l bF9pbmZvKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gPiAgewo+ID4gIAlpbnQgcmMgPSAw Owo+ID4gQEAgLTUwMyw4ICs0OTgsNiBAQCBzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsX2dldChz dHJ1Y3QgZHBfcGFuZWxfaW4KPiA+ICppbikKPiA+ICAJZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3Bh bmVsOwo+ID4gIAlwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwo+ID4gCj4gPiAt CWRwX3BhbmVsLT5kcHVfZWRpZF9yZWdpc3RlciA9IGRwX3BhbmVsX2VkaWRfcmVnaXN0ZXI7Cj4g PiAtCWRwX3BhbmVsLT5kcHVfZWRpZF9kZXJlZ2lzdGVyID0gZHBfcGFuZWxfZWRpZF9kZXJlZ2lz dGVyOwo+ID4gIAlkcF9wYW5lbC0+aW5pdF9pbmZvID0gZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZv Owo+ID4gIAlkcF9wYW5lbC0+dGltaW5nX2NmZyA9IGRwX3BhbmVsX3RpbWluZ19jZmc7Cj4gPiAg CWRwX3BhbmVsLT5yZWFkX3NpbmtfY2FwcyA9IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzOwo+ID4g QEAgLTUyNyw1ICs1MjAsNyBAQCB2b2lkIGRwX3BhbmVsX3B1dChzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsKQo+ID4gCj4gPiAgCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3Qg ZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ID4gCj4gPiArCWtmcmVlKGRwX3BhbmVsLT5l ZGlkKTsKPiA+ICsJZHBfcGFuZWwtPmVkaWQgPSBOVUxMOwo+ID4gIAlkZXZtX2tmcmVlKHBhbmVs LT5kZXYsIHBhbmVsKTsKPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYW5lbC5oCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+ ID4gaW5kZXggYTk1ZmQwMTU3YTRlLi5kNmViZGI5OGY3NjcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFuZWwuaAo+ID4gQEAgLTE4LDcgKzE4LDggQEAKPiA+ICAjaW5jbHVkZSAiZHBf YXV4LmgiCj4gPiAgI2luY2x1ZGUgImRwX2xpbmsuaCIKPiA+ICAjaW5jbHVkZSAiZHBfdXNicGQu aCIKPiA+IC0jaW5jbHVkZSAiZHB1X2VkaWRfcGFyc2VyLmgiCj4gPiArCj4gPiArc3RydWN0IGVk aWQ7Cj4gPiAKPiA+ICBlbnVtIGRwX2xhbmVfY291bnQgewo+ID4gIAlEUF9MQU5FX0NPVU5UXzEJ PSAxLAo+ID4gQEAgLTYzLDcgKzY0LDcgQEAgc3RydWN0IGRwX3BhbmVsIHsKPiA+ICAJdTggZHNf cG9ydHNbRFBfTUFYX0RPV05TVFJFQU1fUE9SVFNdOwo+ID4gCj4gPiAgCXN0cnVjdCBkcm1fZHBf bGluayBsaW5rX2luZm87Cj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmw7Cj4g PiArCXN0cnVjdCBlZGlkICplZGlkOwo+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOwo+ID4gIAlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBwaW5mbzsKPiA+ICAJYm9vbCB2aWRlb190 ZXN0Owo+ID4gQEAgLTcxLDggKzcyLDYgQEAgc3RydWN0IGRwX3BhbmVsIHsKPiA+ICAJdTMyIHZp YzsKPiA+ICAJdTMyIG1heF9wY2xrX2toejsKPiA+IAo+ID4gLQlpbnQgKCpkcHVfZWRpZF9yZWdp c3Rlcikoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gPiAtCXZvaWQgKCpkcHVfZWRpZF9k ZXJlZ2lzdGVyKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiA+ICAJaW50ICgqaW5pdF9p bmZvKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiA+ICAJaW50ICgqdGltaW5nX2NmZyko c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gPiAgCWludCAoKnJlYWRfc2lua19jYXBzKShz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRp ZF9wYXJzZXIuYwo+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAyNGY1ZjQ0 YzE0OTIuLjAwMDAwMDAwMDAwMAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRp ZF9wYXJzZXIuYwo+ID4gKysrIC9kZXYvbnVsbAo+ID4gQEAgLTEsNjU3ICswLDAgQEAKPiA+IC0v KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCj4gPiAtICoKPiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ID4gLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAo+ID4gLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+ID4gLSAqCj4gPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiAtICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+IC0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gPiAtICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiA+IC0gKi8KPiA+IC0KPiA+IC0jaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4gPiAtI2lu Y2x1ZGUgPGxpbnV4L2hkbWkuaD4KPiA+IC0KPiA+IC0jaW5jbHVkZSAiZHB1X2ttcy5oIgo+ID4g LSNpbmNsdWRlICJkcHVfZWRpZF9wYXJzZXIuaCIKPiA+IC0KPiA+IC0jZGVmaW5lIERCQ19TVEFS VF9PRkZTRVQgNAo+ID4gLSNkZWZpbmUgRURJRF9EVERfTEVOIDE4Cj4gPiAtCj4gPiAtZW51bSBk YXRhX2Jsb2NrX3R5cGVzIHsKPiA+IC0JUkVTRVJWRUQsCj4gPiAtCUFVRElPX0RBVEFfQkxPQ0ss Cj4gPiAtCVZJREVPX0RBVEFfQkxPQ0ssCj4gPiAtCVZFTkRPUl9TUEVDSUZJQ19EQVRBX0JMT0NL LAo+ID4gLQlTUEVBS0VSX0FMTE9DQVRJT05fREFUQV9CTE9DSywKPiA+IC0JVkVTQV9EVENfREFU QV9CTE9DSywKPiA+IC0JUkVTRVJWRUQyLAo+ID4gLQlVU0VfRVhURU5ERURfVEFHCj4gPiAtfTsK PiA+IC0KPiA+IC1zdGF0aWMgdTggKmRwdV9maW5kX2VkaWRfZXh0ZW5zaW9uKHN0cnVjdCBlZGlk ICplZGlkLCBpbnQgZXh0X2lkKQo+ID4gLXsKPiA+IC0JdTggKmVkaWRfZXh0ID0gTlVMTDsKPiA+ IC0JaW50IGk7Cj4gPiAtCj4gPiAtCS8qIE5vIEVESUQgb3IgRURJRCBleHRlbnNpb25zICovCj4g PiAtCWlmIChlZGlkID09IE5VTEwgfHwgZWRpZC0+ZXh0ZW5zaW9ucyA9PSAwKQo+ID4gLQkJcmV0 dXJuIE5VTEw7Cj4gPiAtCj4gPiAtCS8qIEZpbmQgQ0VBIGV4dGVuc2lvbiAqLwo+ID4gLQlmb3Ig KGkgPSAwOyBpIDwgZWRpZC0+ZXh0ZW5zaW9uczsgaSsrKSB7Cj4gPiAtCQllZGlkX2V4dCA9ICh1 OCAqKWVkaWQgKyBFRElEX0xFTkdUSCAqIChpICsgMSk7Cj4gPiAtCQlpZiAoZWRpZF9leHRbMF0g PT0gZXh0X2lkKQo+ID4gLQkJCWJyZWFrOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCWlmIChpID09IGVk aWQtPmV4dGVuc2lvbnMpCj4gPiAtCQlyZXR1cm4gTlVMTDsKPiA+IC0KPiA+IC0JcmV0dXJuIGVk aWRfZXh0Owo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdTggKmRwdV9maW5kX2NlYV9leHRlbnNp b24oc3RydWN0IGVkaWQgKmVkaWQpCj4gPiAtewo+ID4gLQlyZXR1cm4gZHB1X2ZpbmRfZWRpZF9l eHRlbnNpb24oZWRpZCwgRFBVX0NFQV9FWFQpOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50 Cj4gPiAtZHB1X2NlYV9kYl9wYXlsb2FkX2xlbihjb25zdCB1OCAqZGIpCj4gPiAtewo+ID4gLQly ZXR1cm4gZGJbMF0gJiAweDFmOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50Cj4gPiAtZHB1 X2NlYV9kYl90YWcoY29uc3QgdTggKmRiKQo+ID4gLXsKPiA+IC0JcmV0dXJuIGRiWzBdID4+IDU7 Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBpbnQKPiA+IC1kcHVfY2VhX3JldmlzaW9uKGNvbnN0 IHU4ICpjZWEpCj4gPiAtewo+ID4gLQlyZXR1cm4gY2VhWzFdOwo+ID4gLX0KPiA+IC0KPiA+IC1z dGF0aWMgaW50Cj4gPiAtZHB1X2NlYV9kYl9vZmZzZXRzKGNvbnN0IHU4ICpjZWEsIGludCAqc3Rh cnQsIGludCAqZW5kKQo+ID4gLXsKPiA+IC0JLyogRGF0YSBibG9jayBvZmZzZXQgaW4gQ0VBIGV4 dGVuc2lvbiBibG9jayAqLwo+ID4gLQkqc3RhcnQgPSA0Owo+ID4gLQkqZW5kID0gY2VhWzJdOwo+ ID4gLQlpZiAoKmVuZCA9PSAwKQo+ID4gLQkJKmVuZCA9IDEyNzsKPiA+IC0JaWYgKCplbmQgPCA0 IHx8ICplbmQgPiAxMjcpCj4gPiAtCQlyZXR1cm4gLUVSQU5HRTsKPiA+IC0JcmV0dXJuIDA7Cj4g PiAtfQo+ID4gLQo+ID4gLSNkZWZpbmUgZHB1X2Zvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0 LCBlbmQpIFwKPiA+IC1mb3IgKChpKSA9IChzdGFydCk7IFwKPiA+IC0oaSkgPCAoZW5kKSAmJiAo aSkgKyBkcHVfY2VhX2RiX3BheWxvYWRfbGVuKCYoY2VhKVsoaSldKSA8IChlbmQpOyBcCj4gPiAt KGkpICs9IGRwdV9jZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEpWyhpKV0pICsgMSkKPiA+IC0KPiA+ IC1zdGF0aWMgYm9vbCBkcHVfY2VhX2RiX2lzX2hkbWlfaGZfdnNkYihjb25zdCB1OCAqZGIpCj4g PiAtewo+ID4gLQlpbnQgaGRtaV9pZDsKPiA+IC0KPiA+IC0JaWYgKGRwdV9jZWFfZGJfdGFnKGRi KSAhPSBWRU5ET1JfU1BFQ0lGSUNfREFUQV9CTE9DSykKPiA+IC0JCXJldHVybiBmYWxzZTsKPiA+ IC0KPiA+IC0JaWYgKGRwdV9jZWFfZGJfcGF5bG9hZF9sZW4oZGIpIDwgNykKPiA+IC0JCXJldHVy biBmYWxzZTsKPiA+IC0KPiA+IC0JaGRtaV9pZCA9IGRiWzFdIHwgKGRiWzJdIDw8IDgpIHwgKGRi WzNdIDw8IDE2KTsKPiA+IC0KPiA+IC0JcmV0dXJuIGhkbWlfaWQgPT0gSERNSV9GT1JVTV9JRUVF X09VSTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHU4ICpkcHVfZWRpZF9maW5kX2V4dGVuZGVk X3RhZ19ibG9jayhzdHJ1Y3QgZWRpZCAqZWRpZCwgaW50Cj4gPiBibGtfaWQpCj4gPiAtewo+ID4g LQl1OCAqZGIgPSBOVUxMOwo+ID4gLQl1OCAqY2VhID0gTlVMTDsKPiA+IC0KPiA+IC0JaWYgKCFl ZGlkKSB7Cj4gPiAtCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4iLCBfX2Z1bmNfXyk7 Cj4gPiAtCQlyZXR1cm4gTlVMTDsKPiA+IC0JfQo+ID4gLQo+ID4gLQljZWEgPSBkcHVfZmluZF9j ZWFfZXh0ZW5zaW9uKGVkaWQpOwo+ID4gLQo+ID4gLQlpZiAoY2VhICYmIGRwdV9jZWFfcmV2aXNp b24oY2VhKSA+PSAzKSB7Cj4gPiAtCQlpbnQgaSwgc3RhcnQsIGVuZDsKPiA+IC0KPiA+IC0JCWlm IChkcHVfY2VhX2RiX29mZnNldHMoY2VhLCAmc3RhcnQsICZlbmQpKQo+ID4gLQkJCXJldHVybiBO VUxMOwo+ID4gLQo+ID4gLQkJZHB1X2Zvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQp IHsKPiA+IC0JCQlkYiA9ICZjZWFbaV07Cj4gPiAtCQkJaWYgKChkcHVfY2VhX2RiX3RhZyhkYikg PT0gRFBVX0VYVEVOREVEX1RBRykgJiYKPiA+IC0JCQkJKGRiWzFdID09IGJsa19pZCkpCj4gPiAt CQkJCXJldHVybiBkYjsKPiA+IC0JCX0KPiA+IC0JfQo+ID4gLQlyZXR1cm4gTlVMTDsKPiA+IC19 Cj4gPiAtCj4gPiAtc3RhdGljIHU4ICoKPiA+IC1kcHVfZWRpZF9maW5kX2Jsb2NrKHN0cnVjdCBl ZGlkICplZGlkLCBpbnQgYmxrX2lkKQo+ID4gLXsKPiA+IC0JdTggKmRiID0gTlVMTDsKPiA+IC0J dTggKmNlYSA9IE5VTEw7Cj4gPiAtCj4gPiAtCWlmICghZWRpZCkgewo+ID4gLQkJRFBVX0VSUk9S KCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4g PiAtCX0KPiA+IC0KPiA+IC0JY2VhID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkKTsKPiA+ IC0KPiA+IC0JaWYgKGNlYSAmJiBkcHVfY2VhX3JldmlzaW9uKGNlYSkgPj0gMykgewo+ID4gLQkJ aW50IGksIHN0YXJ0LCBlbmQ7Cj4gPiAtCj4gPiAtCQlpZiAoZHB1X2NlYV9kYl9vZmZzZXRzKGNl YSwgJnN0YXJ0LCAmZW5kKSkKPiA+IC0JCQlyZXR1cm4gTlVMTDsKPiA+IC0KPiA+IC0JCWRwdV9m b3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5kKSB7Cj4gPiAtCQkJZGIgPSAmY2VhW2ld Owo+ID4gLQkJCWlmIChkcHVfY2VhX2RiX3RhZyhkYikgPT0gYmxrX2lkKQo+ID4gLQkJCQlyZXR1 cm4gZGI7Cj4gPiAtCQl9Cj4gPiAtCX0KPiA+IC0JcmV0dXJuIE5VTEw7Cj4gPiAtfQo+ID4gLQo+ ID4gLQo+ID4gLXN0YXRpYyBjb25zdCB1OCAqX2RwdV9lZGlkX2ZpbmRfYmxvY2soY29uc3QgdTgg KmluX2J1ZiwgdTMyCj4gPiBzdGFydF9vZmZzZXQsCj4gPiAtCXU4IHR5cGUsIHU4ICpsZW4pCj4g PiAtewo+ID4gLQkvKiB0aGUgc3RhcnQgb2YgZGF0YSBibG9jayBjb2xsZWN0aW9uLCBzdGFydCBv ZiBWaWRlbyBEYXRhIEJsb2NrICovCj4gPiAtCXUzMiBvZmZzZXQgPSBzdGFydF9vZmZzZXQ7Cj4g PiAtCXUzMiBkYmNfb2Zmc2V0ID0gaW5fYnVmWzJdOwo+ID4gLQo+ID4gLQlEUFVfRURJRF9ERUJV RygiJXMgKyIsIF9fZnVuY19fKTsKPiA+IC0JLyoKPiA+IC0JICogKiBlZGlkIGJ1ZmZlciAxLCBi eXRlIDIgYmVpbmcgNCBtZWFucyBubyBub24tRFREL0RhdGEgYmxvY2sKPiA+IC0JICogICBjb2xs ZWN0aW9uIHByZXNlbnQuCj4gPiAtCSAqICogZWRpZCBidWZmZXIgMSwgYnl0ZSAyIGJlaW5nIDAg bWVhbnMgbm8gbm9uLURURC9EQVRBIGJsb2NrCj4gPiAtCSAqICAgY29sbGVjdGlvbiBwcmVzZW50 IGFuZCBubyBEVEQgZGF0YSBwcmVzZW50Lgo+ID4gLQkgKi8KPiA+IC0JaWYgKChkYmNfb2Zmc2V0 ID09IDApIHx8IChkYmNfb2Zmc2V0ID09IDQpKSB7Cj4gPiAtCQlEUFVfRVJST1IoIkVESUQ6IG5v IERURCBvciBub24tRFREIGRhdGEgcHJlc2VudFxuIik7Cj4gPiAtCQlyZXR1cm4gTlVMTDsKPiA+ IC0JfQo+ID4gLQo+ID4gLQl3aGlsZSAob2Zmc2V0IDwgZGJjX29mZnNldCkgewo+ID4gLQkJdTgg YmxvY2tfbGVuID0gaW5fYnVmW29mZnNldF0gJiAweDFGOwo+ID4gLQo+ID4gLQkJaWYgKChvZmZz ZXQgKyBibG9ja19sZW4gPD0gZGJjX29mZnNldCkgJiYKPiA+IC0JCSAgICAoaW5fYnVmW29mZnNl dF0gPj4gNSkgPT0gdHlwZSkgewo+ID4gLQkJCSpsZW4gPSBibG9ja19sZW47Cj4gPiAtCQkJRFBV X0VESURfREVCVUcoImJsb2NrPSVkIGZvdW5kIEAgMHgleCB3LyBsZW49JWRcbiIsCj4gPiAtCQkJ CXR5cGUsIG9mZnNldCwgYmxvY2tfbGVuKTsKPiA+IC0KPiA+IC0JCQlyZXR1cm4gaW5fYnVmICsg b2Zmc2V0Owo+ID4gLQkJfQo+ID4gLQkJb2Zmc2V0ICs9IDEgKyBibG9ja19sZW47Cj4gPiAtCX0K PiA+IC0KPiA+IC0JcmV0dXJuIE5VTEw7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIGRw dV9lZGlkX2V4dHJhY3RfdmVuZG9yX2lkKHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwp Cj4gPiAtewo+ID4gLQljaGFyICp2ZW5kb3JfaWQ7Cj4gPiAtCXUzMiBpZF9jb2RlczsKPiA+IC0K PiA+IC0JRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4gPiAtCWlmICghZWRpZF9j dHJsKSB7Cj4gPiAtCQlEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4iLCBfX2Z1bmNfXyk7 Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0KPiA+IC0KPiA+IC0JdmVuZG9yX2lkID0gZWRpZF9jdHJs LT52ZW5kb3JfaWQ7Cj4gPiAtCWlkX2NvZGVzID0gKCh1MzIpZWRpZF9jdHJsLT5lZGlkLT5tZmdf aWRbMF0gPDwgOCkgKwo+ID4gLQkJZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMV07Cj4gPiAtCj4g PiAtCXZlbmRvcl9pZFswXSA9ICdBJyAtIDEgKyAoKGlkX2NvZGVzID4+IDEwKSAmIDB4MUYpOwo+ ID4gLQl2ZW5kb3JfaWRbMV0gPSAnQScgLSAxICsgKChpZF9jb2RlcyA+PiA1KSAmIDB4MUYpOwo+ ID4gLQl2ZW5kb3JfaWRbMl0gPSAnQScgLSAxICsgKGlkX2NvZGVzICYgMHgxRik7Cj4gPiAtCXZl bmRvcl9pZFszXSA9IDA7Cj4gPiAtCURQVV9FRElEX0RFQlVHKCJ2ZW5kb3IgaWQgaXMgJXMgIiwg dmVuZG9yX2lkKTsKPiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4gPiAt fQo+ID4gLQo+ID4gLXN0YXRpYyB2b2lkIGRwdV9lZGlkX3NldF95NDIwX3N1cHBvcnQoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC11MzIgdmlkZW9fZm9ybWF0KQo+ID4gLXsK PiA+IC0JdTggY2VhX21vZGUgPSAwOwo+ID4gLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZTsKPiA+IC0JdTMyIG1vZGVfZm10X2ZsYWdzID0gMDsKPiA+IC0KPiA+IC0JLyogTmVlZCB0byBh ZGQgWTQyMCBzdXBwb3J0IGZsYWcgdG8gdGhlIG1vZGVzICovCj4gPiAtCWxpc3RfZm9yX2VhY2hf ZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Cj4gPiAtCQkvKiBD YWNoZSB0aGUgZm9ybWF0IGZsYWdzIGJlZm9yZSBjbGVhcmluZyAqLwo+ID4gLQkJbW9kZV9mbXRf ZmxhZ3MgPSBtb2RlLT5mbGFnczsKPiA+IC0JCS8qIENsZWFyIHRoZSBSR0IvWVVWIGZvcm1hdCBm bGFncyBiZWZvcmUgY2FsbGluZyB1cHN0cmVhbSBBUEkgKi8KPiA+IC0JCW1vZGUtPmZsYWdzICY9 IH5EUFVfRFJNX01PREVfRkxBR19GTVRfTUFTSzsKPiA+IC0JCWNlYV9tb2RlID0gZHJtX21hdGNo X2NlYV9tb2RlKG1vZGUpOwo+ID4gLQkJLyogUmVzdG9yZSB0aGUgZm9ybWF0IGZsYWdzICovCj4g PiAtCQltb2RlLT5mbGFncyA9IG1vZGVfZm10X2ZsYWdzOwo+ID4gLQkJaWYgKChjZWFfbW9kZSAh PSAwKSAmJiAoY2VhX21vZGUgPT0gdmlkZW9fZm9ybWF0KSkgewo+ID4gLQkJCURQVV9FRElEX0RF QlVHKCIlcyBmb3VuZCBtYXRjaCBmb3IgJWQgIiwgX19mdW5jX18sCj4gPiAtCQkJdmlkZW9fZm9y bWF0KTsKPiA+IC0JCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX1NVUFBPUlRTX1lVVjsK PiA+IC0JCX0KPiA+IC0JfQo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBkcHVfZWRpZF9w YXJzZV9ZNDIwQ01EQigKPiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1 Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAo+ID4gLWNvbnN0IHU4ICpkYikKPiA+IC17Cj4g PiAtCXUzMiBvZmZzZXQgPSAwOwo+ID4gLQl1OCBjbWRiX2xlbiA9IDA7Cj4gPiAtCXU4IHN2ZF9s ZW4gPSAwOwo+ID4gLQljb25zdCB1OCAqc3ZkID0gTlVMTDsKPiA+IC0JdTMyIGkgPSAwLCBqID0g MDsKPiA+IC0JdTMyIHZpZGVvX2Zvcm1hdCA9IDA7Cj4gPiAtCj4gPiAtCWlmICghZWRpZF9jdHJs KSB7Cj4gPiAtCQlEUFVfRVJST1IoIiVzOiBlZGlkX2N0cmwgaXMgTlVMTFxuIiwgX19mdW5jX18p Owo+ID4gLQkJcmV0dXJuOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCWlmICghZGIpIHsKPiA+IC0JCURQ VV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsKPiA+IC0JCXJldHVybjsK PiA+IC0JfQo+ID4gLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18pOwo+ID4gLQlj bWRiX2xlbiA9IGRiWzBdICYgMHgxZjsKPiA+IC0KPiA+IC0JLyogQnl0ZSAzIHRvIEwrMSBjb250 YWluIFNWRHMgKi8KPiA+IC0Jb2Zmc2V0ICs9IDI7Cj4gPiAtCj4gPiAtCXN2ZCA9IGRwdV9lZGlk X2ZpbmRfYmxvY2soZWRpZF9jdHJsLT5lZGlkLCBWSURFT19EQVRBX0JMT0NLKTsKPiA+IC0KPiA+ IC0JaWYgKHN2ZCkgewo+ID4gLQkJLyptb3ZpbmcgdG8gdGhlIG5leHQgYnl0ZSBhcyB2aWMgaW5m byBiZWdpbnMgdGhlcmUqLwo+ID4gLQkJc3ZkX2xlbiA9IHN2ZFswXSAmIDB4MWY7Cj4gPiAtCQkr K3N2ZDsKPiA+IC0JfQo+ID4gLQo+ID4gLQlmb3IgKGkgPSAwOyBpIDwgc3ZkX2xlbjsgaSsrLCBq KyspIHsKPiA+IC0JCXZpZGVvX2Zvcm1hdCA9ICooc3ZkICsgaSkgJiAweDdGOwo+ID4gLQkJaWYg KGNtZGJfbGVuID09IDEpIHsKPiA+IC0JCQkvKiBJZiBjbWRiX2xlbiBpcyAxLCBpdCBtZWFucyBh bGwgU1ZEcyBzdXBwb3J0IFlVViAqLwo+ID4gLQkJCWRwdV9lZGlkX3NldF95NDIwX3N1cHBvcnQo Y29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwo+ID4gLQkJfSBlbHNlIGlmIChkYltvZmZzZXRdICYg KDEgPDwgaikpIHsKPiA+IC0JCQlkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KGNvbm5lY3Rvciwg dmlkZW9fZm9ybWF0KTsKPiA+IC0KPiA+IC0JCQlpZiAoaiAmIDB4ODApIHsKPiA+IC0JCQkJaiA9 IGovODsKPiA+IC0JCQkJb2Zmc2V0Kys7Cj4gPiAtCQkJCWlmIChvZmZzZXQgPj0gY21kYl9sZW4p Cj4gPiAtCQkJCQlicmVhazsKPiA+IC0JCQl9Cj4gPiAtCQl9Cj4gPiAtCX0KPiA+IC0KPiA+IC0J RFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPiA+IC0KPiA+IC19Cj4gPiAtCj4g PiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQyMFZEQigKPiA+IC1zdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAo+ID4g LWNvbnN0IHU4ICpkYikKPiA+IC17Cj4gPiAtCXU4IGxlbiA9IGRiWzBdICYgMHgxZjsKPiA+IC0J dTMyIGkgPSAwOwo+ID4gLQl1MzIgdmlkZW9fZm9ybWF0ID0gMDsKPiA+IC0KPiA+IC0JaWYgKCFl ZGlkX2N0cmwpIHsKPiA+IC0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVu Y19fKTsKPiA+IC0JCXJldHVybjsKPiA+IC0JfQo+ID4gLQo+ID4gLQlEUFVfRURJRF9ERUJVRygi JXMgK1xuIiwgX19mdW5jX18pOwo+ID4gLQo+ID4gLQkvKiBPZmZzZXQgdG8gYnl0ZSAzICovCj4g PiAtCWRiICs9IDI7Cj4gPiAtCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKPiA+IC0J CXZpZGVvX2Zvcm1hdCA9ICooZGIgKyBpKSAmIDB4N0Y7Cj4gPiAtCQkvKgo+ID4gLQkJICogbW9k ZSB3YXMgYWxyZWFkeSBhZGRlZCBpbiBnZXRfbW9kZXMoKQo+ID4gLQkJICogb25seSBuZWVkIHRv IHNldCB0aGUgWTQyMCBzdXBwb3J0IGZsYWcKPiA+IC0JCSAqLwo+ID4gLQkJZHB1X2VkaWRfc2V0 X3k0MjBfc3VwcG9ydChjb25uZWN0b3IsIHZpZGVvX2Zvcm1hdCk7Cj4gPiAtCX0KPiA+IC0JRFBV X0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyB2 b2lkIGRwdV9lZGlkX3NldF9tb2RlX2Zvcm1hdCgKPiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+ID4gLXsKPiA+IC0J Y29uc3QgdTggKmRiID0gTlVMTDsKPiA+IC0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7 Cj4gPiAtCj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gPiAtCS8q IFNldCBZVVYgbW9kZSBzdXBwb3J0IGZsYWdzIGZvciBZQ2JjcjQyMFZEQiAqLwo+ID4gLQlkYiA9 IGRwdV9lZGlkX2ZpbmRfZXh0ZW5kZWRfdGFnX2Jsb2NrKGVkaWRfY3RybC0+ZWRpZCwKPiA+IC0J CQlZNDIwX1ZJREVPX0RBVEFfQkxPQ0spOwo+ID4gLQlpZiAoZGIpCj4gPiAtCQlkcHVfZWRpZF9w YXJzZV9ZNDIwVkRCKGNvbm5lY3RvciwgZWRpZF9jdHJsLCBkYik7Cj4gPiAtCWVsc2UKPiA+IC0J CURQVV9FRElEX0RFQlVHKCJZQ2JDcjQyMCBWREIgaXMgbm90IHByZXNlbnRcbiIpOwo+ID4gLQo+ ID4gLQkvKiBTZXQgUkdCIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXMgd2hlcmUgWVVWIGlzIG5vdCBz ZXQgKi8KPiA+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5wcm9iZWRf bW9kZXMsIGhlYWQpIHsKPiA+IC0JCWlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19T VVBQT1JUU19ZVVYpKQo+ID4gLQkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfU1VQUE9S VFNfUkdCOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCj4gPiAtCWRiID0gZHB1X2VkaWRfZmluZF9leHRl bmRlZF90YWdfYmxvY2soZWRpZF9jdHJsLT5lZGlkLAo+ID4gLQkJCVk0MjBfQ0FQQUJJTElUWV9N QVBfREFUQV9CTE9DSyk7Cj4gPiAtCWlmIChkYikKPiA+IC0JCWRwdV9lZGlkX3BhcnNlX1k0MjBD TURCKGNvbm5lY3RvciwgZWRpZF9jdHJsLCBkYik7Cj4gPiAtCWVsc2UKPiA+IC0JCURQVV9FRElE X0RFQlVHKCJZQ2JDcjQyMCBDTURCIGlzIG5vdCBwcmVzZW50XG4iKTsKPiA+IC0KPiA+IC0JRFBV X0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGlj IHZvaWQgX2RwdV9lZGlkX3VwZGF0ZV9kY19tb2RlcygKPiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+ID4gLXsKPiA+ IC0JaW50IGksIHN0YXJ0LCBlbmQ7Cj4gPiAtCXU4ICplZGlkX2V4dCwgKmhkbWk7Cj4gPiAtCXN0 cnVjdCBkcm1fZGlzcGxheV9pbmZvICpkaXNwX2luZm87Cj4gPiAtCXUzMiBoZG1pX2RjX3l1dl9t b2RlcyA9IDA7Cj4gPiAtCj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7 Cj4gPiAtCj4gPiAtCWlmICghY29ubmVjdG9yIHx8ICFlZGlkX2N0cmwpIHsKPiA+IC0JCURQVV9F UlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gPiAtCQlyZXR1cm47Cj4gPiAtCX0KPiA+IC0KPiA+ IC0JZGlzcF9pbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwo+ID4gLQo+ID4gLQllZGlk X2V4dCA9IGRwdV9maW5kX2NlYV9leHRlbnNpb24oZWRpZF9jdHJsLT5lZGlkKTsKPiA+IC0KPiA+ IC0JaWYgKCFlZGlkX2V4dCkgewo+ID4gLQkJRFBVX0VSUk9SKCJubyBjZWEgZXh0ZW5zaW9uXG4i KTsKPiA+IC0JCXJldHVybjsKPiA+IC0JfQo+ID4gLQo+ID4gLQlpZiAoZHB1X2NlYV9kYl9vZmZz ZXRzKGVkaWRfZXh0LCAmc3RhcnQsICZlbmQpKQo+ID4gLQkJcmV0dXJuOwo+ID4gLQo+ID4gLQlk cHVfZm9yX2VhY2hfY2VhX2RiKGVkaWRfZXh0LCBpLCBzdGFydCwgZW5kKSB7Cj4gPiAtCQlpZiAo ZHB1X2NlYV9kYl9pc19oZG1pX2hmX3ZzZGIoJmVkaWRfZXh0W2ldKSkgewo+ID4gLQo+ID4gLQkJ CWhkbWkgPSAmZWRpZF9leHRbaV07Cj4gPiAtCj4gPiAtCQkJaWYgKGRwdV9jZWFfZGJfcGF5bG9h ZF9sZW4oaGRtaSkgPCA3KQo+ID4gLQkJCQljb250aW51ZTsKPiA+IC0KPiA+IC0JCQlpZiAoaGRt aVs3XSAmIERSTV9FRElEX1lDQkNSNDIwX0RDXzMwKSB7Cj4gPiAtCQkJCWhkbWlfZGNfeXV2X21v ZGVzIHw9IERSTV9FRElEX1lDQkNSNDIwX0RDXzMwOwo+ID4gLQkJCQlEUFVfRURJRF9ERUJVRygi WTQyMCAzMC1iaXQgc3VwcG9ydGVkXG4iKTsKPiA+IC0JCQl9Cj4gPiAtCj4gPiAtCQkJaWYgKGhk bWlbN10gJiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zNikgewo+ID4gLQkJCQloZG1pX2RjX3l1dl9t b2RlcyB8PSBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zNjsKPiA+IC0JCQkJRFBVX0VESURfREVCVUco Ilk0MjAgMzYtYml0IHN1cHBvcnRlZFxuIik7Cj4gPiAtCQkJfQo+ID4gLQo+ID4gLQkJCWlmICho ZG1pWzddICYgRFJNX0VESURfWUNCQ1I0MjBfRENfNDgpIHsKPiA+IC0JCQkJaGRtaV9kY195dXZf bW9kZXMgfD0gRFJNX0VESURfWUNCQ1I0MjBfRENfMzY7Cj4gPiAtCQkJCURQVV9FRElEX0RFQlVH KCJZNDIwIDQ4LWJpdCBzdXBwb3J0ZWRcbiIpOwo+ID4gLQkJCX0KPiA+IC0JCX0KPiA+IC0JfQo+ ID4gLQo+ID4gLQlkaXNwX2luZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8PSBoZG1pX2RjX3l1dl9t b2RlczsKPiA+IC0KPiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPiA+ IC19Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlkX2V4dHJhY3RfYXVkaW9fZGF0YV9i bG9ja3MoCj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwpCj4gPiAtewo+ID4g LQl1OCBsZW4gPSAwOwo+ID4gLQl1OCBhZGJfbWF4ID0gMDsKPiA+IC0JY29uc3QgdTggKmFkYiA9 IE5VTEw7Cj4gPiAtCXUzMiBvZmZzZXQgPSBEQkNfU1RBUlRfT0ZGU0VUOwo+ID4gLQl1OCAqY2Vh ID0gTlVMTDsKPiA+IC0KPiA+IC0JaWYgKCFlZGlkX2N0cmwpIHsKPiA+IC0JCURQVV9FUlJPUigi aW52YWxpZCBlZGlkX2N0cmxcbiIpOwo+ID4gLQkJcmV0dXJuOwo+ID4gLQl9Cj4gPiAtCURQVV9F RElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+ID4gLQljZWEgPSBkcHVfZmluZF9jZWFfZXh0 ZW5zaW9uKGVkaWRfY3RybC0+ZWRpZCk7Cj4gPiAtCWlmICghY2VhKSB7Cj4gPiAtCQlEUFVfREVC VUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiA+IC0JCXJldHVybjsKPiA+IC0JfQo+ ID4gLQo+ID4gLQllZGlkX2N0cmwtPmFkYl9zaXplID0gMDsKPiA+IC0KPiA+IC0JbWVtc2V0KGVk aWRfY3RybC0+YXVkaW9fZGF0YV9ibG9jaywgMCwKPiA+IC0JCXNpemVvZihlZGlkX2N0cmwtPmF1 ZGlvX2RhdGFfYmxvY2spKTsKPiA+IC0KPiA+IC0JZG8gewo+ID4gLQkJbGVuID0gMDsKPiA+IC0J CWFkYiA9IF9kcHVfZWRpZF9maW5kX2Jsb2NrKGNlYSwgb2Zmc2V0LCBBVURJT19EQVRBX0JMT0NL LAo+ID4gLQkJCSZsZW4pOwo+ID4gLQo+ID4gLQkJaWYgKChhZGIgPT0gTlVMTCkgfHwgKGxlbiA+ IE1BWF9BVURJT19EQVRBX0JMT0NLX1NJWkUgfHwKPiA+IC0JCQlhZGJfbWF4ID49IE1BWF9OVU1C RVJfQURCKSkgewo+ID4gLQkJCWlmICghZWRpZF9jdHJsLT5hZGJfc2l6ZSkgewo+ID4gLQkJCQlE UFVfREVCVUcoIk5vL0ludmFsaWQgQXVkaW8gRGF0YSBCbG9ja1xuIik7Cj4gPiAtCQkJCXJldHVy bjsKPiA+IC0JCQl9Cj4gPiAtCj4gPiAtCQkJY29udGludWU7Cj4gPiAtCQl9Cj4gPiAtCj4gPiAt CQltZW1jcHkoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrICsgZWRpZF9jdHJsLT5hZGJfc2l6 ZSwKPiA+IC0JCQlhZGIgKyAxLCBsZW4pOwo+ID4gLQkJb2Zmc2V0ID0gKGFkYiAtIGNlYSkgKyAx ICsgbGVuOwo+ID4gLQo+ID4gLQkJZWRpZF9jdHJsLT5hZGJfc2l6ZSArPSBsZW47Cj4gPiAtCQlh ZGJfbWF4Kys7Cj4gPiAtCX0gd2hpbGUgKGFkYik7Cj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyAt IiwgX19mdW5jX18pOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBfZHB1X2VkaWRfZXh0 cmFjdF9zcGVha2VyX2FsbG9jYXRpb25fZGF0YSgKPiA+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwg KmVkaWRfY3RybCkKPiA+IC17Cj4gPiAtCXU4IGxlbjsKPiA+IC0JY29uc3QgdTggKnNhZGIgPSBO VUxMOwo+ID4gLQl1OCAqY2VhID0gTlVMTDsKPiA+IC0KPiA+IC0JaWYgKCFlZGlkX2N0cmwpIHsK PiA+IC0JCURQVV9FUlJPUigiaW52YWxpZCBlZGlkX2N0cmxcbiIpOwo+ID4gLQkJcmV0dXJuOwo+ ID4gLQl9Cj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+ID4gLQljZWEg PSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWRfY3RybC0+ZWRpZCk7Cj4gPiAtCWlmICghY2Vh KSB7Cj4gPiAtCQlEUFVfREVCVUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiA+IC0J CXJldHVybjsKPiA+IC0JfQo+ID4gLQo+ID4gLQlzYWRiID0gX2RwdV9lZGlkX2ZpbmRfYmxvY2so Y2VhLCBEQkNfU1RBUlRfT0ZGU0VULAo+ID4gLQkJU1BFQUtFUl9BTExPQ0FUSU9OX0RBVEFfQkxP Q0ssICZsZW4pOwo+ID4gLQlpZiAoKHNhZGIgPT0gTlVMTCkgfHwgKGxlbiAhPSBNQVhfU1BLUl9B TExPQ19EQVRBX0JMT0NLX1NJWkUpKSB7Cj4gPiAtCQlEUFVfREVCVUcoIk5vL0ludmFsaWQgU3Bl YWtlciBBbGxvY2F0aW9uIERhdGEgQmxvY2tcbiIpOwo+ID4gLQkJcmV0dXJuOwo+ID4gLQl9Cj4g PiAtCj4gPiAtCW1lbWNweShlZGlkX2N0cmwtPnNwa3JfYWxsb2NfZGF0YV9ibG9jaywgc2FkYiAr IDEsIGxlbik7Cj4gPiAtCWVkaWRfY3RybC0+c2FkYl9zaXplID0gbGVuOwo+ID4gLQo+ID4gLQlE UFVfRURJRF9ERUJVRygic3BlYWtlciBhbGxvYyBkYXRhIFNQIGJ5dGUgPSAlMDh4ICVzJXMlcyVz JXMlcyVzXG4iLAo+ID4gLQkJc2FkYlsxXSwKPiA+IC0JCShzYWRiWzFdICYgQklUKDApKSA/ICJG TC9GUiwiIDogIiIsCj4gPiAtCQkoc2FkYlsxXSAmIEJJVCgxKSkgPyAiTEZFLCIgOiAiIiwKPiA+ IC0JCShzYWRiWzFdICYgQklUKDIpKSA/ICJGQywiIDogIiIsCj4gPiAtCQkoc2FkYlsxXSAmIEJJ VCgzKSkgPyAiUkwvUlIsIiA6ICIiLAo+ID4gLQkJKHNhZGJbMV0gJiBCSVQoNCkpID8gIlJDLCIg OiAiIiwKPiA+IC0JCShzYWRiWzFdICYgQklUKDUpKSA/ICJGTEMvRlJDLCIgOiAiIiwKPiA+IC0J CShzYWRiWzFdICYgQklUKDYpKSA/ICJSTEMvUlJDLCIgOiAiIik7Cj4gPiAtCURQVV9FRElEX0RF QlVHKCIlcyAtIiwgX19mdW5jX18pOwo+ID4gLX0KPiA+IC0KPiA+IC1zdHJ1Y3QgZHB1X2VkaWRf Y3RybCAqZHB1X2VkaWRfaW5pdCh2b2lkKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRwdV9lZGlkX2N0 cmwgKmVkaWRfY3RybCA9IE5VTEw7Cj4gPiAtCj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArXG4i LCBfX2Z1bmNfXyk7Cj4gPiAtCWVkaWRfY3RybCA9IGt6YWxsb2Moc2l6ZW9mKCplZGlkX2N0cmwp LCBHRlBfS0VSTkVMKTsKPiA+IC0JaWYgKCFlZGlkX2N0cmwpIHsKPiA+IC0JCURQVV9FUlJPUigi ZWRpZF9jdHJsIGFsbG9jIGZhaWxlZFxuIik7Cj4gPiAtCQlyZXR1cm4gTlVMTDsKPiA+IC0JfQo+ ID4gLQltZW1zZXQoKGVkaWRfY3RybCksIDAsIHNpemVvZigqZWRpZF9jdHJsKSk7Cj4gPiAtCURQ VV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4gPiAtCXJldHVybiBlZGlkX2N0cmw7 Cj4gPiAtfQo+ID4gLQo+ID4gLXZvaWQgZHB1X2ZyZWVfZWRpZCh2b2lkICoqaW5wdXQpCj4gPiAt ewo+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRp ZF9jdHJsICopKCppbnB1dCk7Cj4gPiAtCj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19m dW5jX18pOwo+ID4gLQlrZnJlZShlZGlkX2N0cmwtPmVkaWQpOwo+ID4gLQllZGlkX2N0cmwtPmVk aWQgPSBOVUxMOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lkIGRwdV9lZGlkX2RlaW5pdCh2b2lkICoq aW5wdXQpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0 cnVjdCBkcHVfZWRpZF9jdHJsICopKCppbnB1dCk7Cj4gPiAtCj4gPiAtCURQVV9FRElEX0RFQlVH KCIlcyArIiwgX19mdW5jX18pOwo+ID4gLQlkcHVfZnJlZV9lZGlkKCh2b2lkICopJmVkaWRfY3Ry bCk7Cj4gPiAtCWtmcmVlKGVkaWRfY3RybCk7Cj4gPiAtCURQVV9FRElEX0RFQlVHKCIlcyAtIiwg X19mdW5jX18pOwo+ID4gLX0KPiA+IC0KPiA+IC1pbnQgX2RwdV9lZGlkX3VwZGF0ZV9tb2Rlcyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gLQl2b2lkICppbnB1dCkKPiA+IC17 Cj4gPiAtCWludCByYyA9IDA7Cj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwg PSAoc3RydWN0IGRwdV9lZGlkX2N0cmwgKikoaW5wdXQpOwo+ID4gLQo+ID4gLQlEUFVfRURJRF9E RUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPiA+IC0JaWYgKGVkaWRfY3RybC0+ZWRpZCkgewo+ID4g LQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKPiA+ IC0JCQllZGlkX2N0cmwtPmVkaWQpOwo+ID4gLQo+ID4gLQkJcmMgPSBkcm1fYWRkX2VkaWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkX2N0cmwtPmVkaWQpOwo+ID4gLQkJZHB1X2VkaWRfc2V0X21vZGVf Zm9ybWF0KGNvbm5lY3RvciwgZWRpZF9jdHJsKTsKPiA+IC0JCV9kcHVfZWRpZF91cGRhdGVfZGNf bW9kZXMoY29ubmVjdG9yLCBlZGlkX2N0cmwpOwo+ID4gLQkJRFBVX0VESURfREVCVUcoIiVzIC0i LCBfX2Z1bmNfXyk7Cj4gPiAtCQlyZXR1cm4gcmM7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JZHJtX21v ZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVMTCk7Cj4gPiAt CURQVV9FRElEX0RFQlVHKCIlcyBudWxsIGVkaWQgLSIsIF9fZnVuY19fKTsKPiA+IC0JcmV0dXJu IHJjOwo+ID4gLX0KPiA+IC0KPiA+IC11MzIgZHB1X2dldF9zaW5rX2JwYyh2b2lkICppbnB1dCkK PiA+IC17Cj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRw dV9lZGlkX2N0cmwgKikoaW5wdXQpOwo+ID4gLQlzdHJ1Y3QgZWRpZCAqZWRpZCA9IGVkaWRfY3Ry bC0+ZWRpZDsKPiA+IC0KPiA+IC0JaWYgKCFlZGlkKSB7Cj4gPiAtCQlEUFVfRVJST1IoImludmFs aWQgZWRpZCBpbnB1dFxuIik7Cj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0JfQo+ID4gLQo+ID4gLQlp ZiAoKGVkaWQtPnJldmlzaW9uIDwgMykgfHwgIShlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVU X0RJR0lUQUwpKQo+ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCj4gPiAtCWlmIChlZGlkLT5yZXZpc2lv biA8IDQpIHsKPiA+IC0JCWlmIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0RJR0lUQUxfVFlQRV9E VkkpCj4gPiAtCQkJcmV0dXJuIDg7Cj4gPiAtCQllbHNlCj4gPiAtCQkJcmV0dXJuIDA7Cj4gPiAt CX0KPiA+IC0KPiA+IC0Jc3dpdGNoIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0RJR0lUQUxfREVQ VEhfTUFTSykgewo+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfNjoKPiA+IC0JCXJl dHVybiA2Owo+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfODoKPiA+IC0JCXJldHVy biA4Owo+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTA6Cj4gPiAtCQlyZXR1cm4g MTA7Cj4gPiAtCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xMjoKPiA+IC0JCXJldHVybiAx MjsKPiA+IC0JY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RFUFRIXzE0Ogo+ID4gLQkJcmV0dXJuIDE0 Owo+ID4gLQljYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTY6Cj4gPiAtCQlyZXR1cm4gMTY7 Cj4gPiAtCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF9VTkRFRjoKPiA+IC0JZGVmYXVsdDoK PiA+IC0JCXJldHVybiAwOwo+ID4gLQl9Cj4gPiAtfQo+ID4gLQo+ID4gLXU4IGRwdV9nZXRfZWRp ZF9jaGVja3N1bSh2b2lkICppbnB1dCkKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcHVfZWRpZF9jdHJs ICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0cmwgKikoaW5wdXQpOwo+ID4gLQlzdHJ1 Y3QgZWRpZCAqZWRpZCA9IE5VTEwsICpsYXN0X2Jsb2NrID0gTlVMTDsKPiA+IC0JdTggKnJhd19l ZGlkID0gTlVMTDsKPiA+IC0KPiA+IC0JaWYgKCFlZGlkX2N0cmwgfHwgIWVkaWRfY3RybC0+ZWRp ZCkgewo+ID4gLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVkaWQgaW5wdXRcbiIpOwo+ID4gLQkJcmV0 dXJuIDA7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JZWRpZCA9IGVkaWRfY3RybC0+ZWRpZDsKPiA+IC0K PiA+IC0JcmF3X2VkaWQgPSAodTggKillZGlkOwo+ID4gLQlyYXdfZWRpZCArPSAoZWRpZC0+ZXh0 ZW5zaW9ucyAqIEVESURfTEVOR1RIKTsKPiA+IC0JbGFzdF9ibG9jayA9IChzdHJ1Y3QgZWRpZCAq KXJhd19lZGlkOwo+ID4gLQo+ID4gLQlpZiAobGFzdF9ibG9jaykKPiA+IC0JCXJldHVybiBsYXN0 X2Jsb2NrLT5jaGVja3N1bTsKPiA+IC0KPiA+IC0JRFBVX0VSUk9SKCJJbnZhbGlkIGJsb2NrLCBu byBjaGVja3N1bVxuIik7Cj4gPiAtCXJldHVybiAwOwo+ID4gLX0KPiA+IC0KPiA+IC1ib29sIGRw dV9kZXRlY3RfaGRtaV9tb25pdG9yKHZvaWQgKmlucHV0KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRw dV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqKShpbnB1dCk7 Cj4gPiAtCj4gPiAtCXJldHVybiBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkX2N0cmwtPmVk aWQpOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lkIGRwdV9nZXRfZWRpZChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAo+ID4gLQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwg dm9pZCAqKmlucHV0KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3Ry bCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqKSgqaW5wdXQpOwo+ID4gLQo+ID4gLQllZGlkX2N0 cmwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBhZGFwdGVyKTsKPiA+IC0JRFBVX0VE SURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPiA+IC0KPiA+IC0JaWYgKCFlZGlkX2N0cmwt PmVkaWQpCj4gPiAtCQlEUFVfRVJST1IoIkVESUQgcmVhZCBmYWlsZWRcbiIpOwo+ID4gLQo+ID4g LQlpZiAoZWRpZF9jdHJsLT5lZGlkKSB7Cj4gPiAtCQlkcHVfZWRpZF9leHRyYWN0X3ZlbmRvcl9p ZChlZGlkX2N0cmwpOwo+ID4gLQkJX2RwdV9lZGlkX2V4dHJhY3RfYXVkaW9fZGF0YV9ibG9ja3Mo ZWRpZF9jdHJsKTsKPiA+IC0JCV9kcHVfZWRpZF9leHRyYWN0X3NwZWFrZXJfYWxsb2NhdGlvbl9k YXRhKGVkaWRfY3RybCk7Cj4gPiAtCX0KPiA+IC0JRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9f ZnVuY19fKTsKPiA+IC19Owo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1 X2VkaWRfcGFyc2VyLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJzZXIu aAo+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCBjMDUxYjE4YmI4MTIuLjAw MDAwMDAwMDAwMAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJzZXIu aAo+ID4gKysrIC9kZXYvbnVsbAo+ID4gQEAgLTEsMTY2ICswLDAgQEAKPiA+IC0vKgo+ID4gLSAq IENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiA+IC0gKgo+ID4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiAtICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Cj4gPiAtICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCj4gPiAtICoKPiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+IC0gKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKPiA+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lgo+ID4gLSAqCj4gPiAtICovCj4gPiAtCj4gPiAtI2lmbmRlZiBfRFBVX0VESURfUEFSU0VSX0hf Cj4gPiAtI2RlZmluZSBfRFBVX0VESURfUEFSU0VSX0hfCj4gPiAtCj4gPiAtI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Cj4gPiAtI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ID4gLSNpbmNsdWRl IDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gPiAtI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ID4g LSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiA+IC0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+IC0j aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiAtI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ ID4gLQo+ID4gLQo+ID4gLSNkZWZpbmUgTUFYX05VTUJFUl9BREIgNQo+ID4gLSNkZWZpbmUgTUFY X0FVRElPX0RBVEFfQkxPQ0tfU0laRSAzMAo+ID4gLSNkZWZpbmUgTUFYX1NQS1JfQUxMT0NfREFU QV9CTE9DS19TSVpFIDMKPiA+IC0jZGVmaW5lIEVESURfVkVORE9SX0lEX1NJWkUgICAgIDQKPiA+ IC0KPiA+IC0jZGVmaW5lIERQVV9DRUFfRVhUICAgIDB4MDIKPiA+IC0jZGVmaW5lIERQVV9FWFRF TkRFRF9UQUcgMHgwNwo+ID4gLQo+ID4gLSNkZWZpbmUgRFBVX0RSTV9NT0RFX0ZMQUdfRk1UX01B U0sgKDB4MyA8PCAyMCkKPiA+IC0KPiA+IC1lbnVtIGV4dGVuZGVkX2RhdGFfYmxvY2tfdHlwZXMg ewo+ID4gLQlWSURFT19DQVBBQklMSVRZX0RBVEFfQkxPQ0sgPSAweDAsCj4gPiAtCVZFTkRPUl9T UEVDSUZJQ19WSURFT19EQVRBX0JMT0NLID0gMHgwMSwKPiA+IC0JSERNSV9WSURFT19EQVRBX0JM T0NLID0gMHgwNCwKPiA+IC0JSERSX1NUQVRJQ19NRVRBREFUQV9EQVRBX0JMT0NLID0gMHgwNiwK PiA+IC0JWTQyMF9WSURFT19EQVRBX0JMT0NLID0gMHgwRSwKPiA+IC0JVklERU9fRk9STUFUX1BS RUZFUkVOQ0VfREFUQV9CTE9DSyA9IDB4MEQsCj4gPiAtCVk0MjBfQ0FQQUJJTElUWV9NQVBfREFU QV9CTE9DSyA9IDB4MEYsCj4gPiAtCVZFTkRPUl9TUEVDSUZJQ19BVURJT19EQVRBX0JMT0NLID0g MHgxMSwKPiA+IC0JSU5GT0ZSQU1FX0RBVEFfQkxPQ0sgPSAweDIwLAo+ID4gLX07Cj4gPiAtCj4g PiAtI2lmZGVmIERQVV9FRElEX0RFQlVHX0VOQUJMRQo+ID4gLSNkZWZpbmUgRFBVX0VESURfREVC VUcoZm10LCBhcmdzLi4uKSAgIERQVV9FUlJPUihmbXQsICMjYXJncykKPiA+IC0jZWxzZQo+ID4g LSNkZWZpbmUgRFBVX0VESURfREVCVUcoZm10LCBhcmdzLi4uKSAgIERQVV9ERUJVRyhmbXQsICMj YXJncykKPiA+IC0jZW5kaWYKPiA+IC0KPiA+IC0vKgo+ID4gLSAqIHN0cnVjdCBoZG1pX2VkaWRf aGRyX2RhdGEgLSBIRFIgU3RhdGljIE1ldGFkYXRhCj4gPiAtICogQGVvdGY6IEVsZWN0cm8tT3B0 aWNhbCBUcmFuc2ZlciBGdW5jdGlvbgo+ID4gLSAqIEBtZXRhZGF0YV90eXBlX29uZTogU3RhdGlj IE1ldGFkYXRhIFR5cGUgMSBzdXBwb3J0Cj4gPiAtICogQG1heF9sdW1pbmFuY2U6IERlc2lyZWQg Q29udGVudCBNYXhpbXVtIEx1bWluYW5jZQo+ID4gLSAqIEBhdmdfbHVtaW5hbmNlOiBEZXNpcmVk IENvbnRlbnQgRnJhbWUtYXZlcmFnZSBMdW1pbmFuY2UKPiA+IC0gKiBAbWluX2x1bWluYW5jZTog RGVzaXJlZCBDb250ZW50IE1pbmltdW0gTHVtaW5hbmNlCj4gPiAtICovCj4gPiAtc3RydWN0IGRw dV9lZGlkX2hkcl9kYXRhIHsKPiA+IC0JdTMyIGVvdGY7Cj4gPiAtCWJvb2wgbWV0YWRhdGFfdHlw ZV9vbmU7Cj4gPiAtCXUzMiBtYXhfbHVtaW5hbmNlOwo+ID4gLQl1MzIgYXZnX2x1bWluYW5jZTsK PiA+IC0JdTMyIG1pbl9sdW1pbmFuY2U7Cj4gPiAtfTsKPiA+IC0KPiA+IC1zdHJ1Y3QgZHB1X2Vk aWRfc2lua19jYXBzIHsKPiA+IC0JdTMyIG1heF9wY2xrX2luX2h6Owo+ID4gLQlib29sIHNjZGNf cHJlc2VudDsKPiA+IC0JYm9vbCBzY3JhbWJsZV9zdXBwb3J0OyAvKiBzY3JhbWJsZSBzdXBwb3J0 IGZvciBsZXNzIHRoYW4gMzQwTWNzYyAqLwo+ID4gLQlib29sIHJlYWRfcmVxX3N1cHBvcnQ7Cj4g PiAtCWJvb2wgb3NkX2Rpc3Bhcml0eTsKPiA+IC0JYm9vbCBkdWFsX3ZpZXdfc3VwcG9ydDsKPiA+ IC0JYm9vbCBpbmRfdmlld19zdXBwb3J0Owo+ID4gLX07Cj4gPiAtCj4gPiAtc3RydWN0IGRwdV9l ZGlkX2N0cmwgewo+ID4gLQlzdHJ1Y3QgZWRpZCAqZWRpZDsKPiA+IC0JdTggcHRfc2Nhbl9pbmZv Owo+ID4gLQl1OCBpdF9zY2FuX2luZm87Cj4gPiAtCXU4IGNlX3NjYW5faW5mbzsKPiA+IC0JdTgg YXVkaW9fZGF0YV9ibG9ja1tNQVhfTlVNQkVSX0FEQiAqIE1BWF9BVURJT19EQVRBX0JMT0NLX1NJ WkVdOwo+ID4gLQlpbnQgYWRiX3NpemU7Cj4gPiAtCXU4IHNwa3JfYWxsb2NfZGF0YV9ibG9ja1tN QVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkVdOwo+ID4gLQlpbnQgc2FkYl9zaXplOwo+ID4g LQlib29sIGhkcl9zdXBwb3J0ZWQ7Cj4gPiAtCWNoYXIgdmVuZG9yX2lkW0VESURfVkVORE9SX0lE X1NJWkVdOwo+ID4gLQlzdHJ1Y3QgZHB1X2VkaWRfc2lua19jYXBzIHNpbmtfY2FwczsKPiA+IC0J c3RydWN0IGRwdV9lZGlkX2hkcl9kYXRhIGhkcl9kYXRhOwo+ID4gLX07Cj4gPiAtCj4gPiAtLyoq Cj4gPiAtICogZHB1X2VkaWRfaW5pdCgpIC0gaW5pdCBlZGlkIHN0cnVjdHVyZS4KPiA+IC0gKiBA ZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+ID4gLSAq IFJldHVybjogaGFuZGxlIHRvIGRwdV9lZGlkX2N0cmwgZm9yIHRoZSBjbGllbnQuCj4gPiAtICov Cj4gPiAtc3RydWN0IGRwdV9lZGlkX2N0cmwgKmRwdV9lZGlkX2luaXQodm9pZCk7Cj4gPiAtCj4g PiAtLyoqCj4gPiAtICogZHB1X2VkaWRfZGVpbml0KCkgLSBkZWluaXQgZWRpZCBzdHJ1Y3R1cmUu Cj4gPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJsIHN0cnVjdHVy ZS4KPiA+IC0gKgo+ID4gLSAqIFJldHVybjogdm9pZC4KPiA+IC0gKi8KPiA+IC12b2lkIGRwdV9l ZGlkX2RlaW5pdCh2b2lkICoqZWRpZF9jdHJsKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcHVf Z2V0X2VkaWQoKSAtIGdldCBlZGlkIGluZm8uCj4gPiAtICogQGNvbm5lY3RvcjogICBIYW5kbGUg dG8gdGhlIGRybV9jb25uZWN0b3IuCj4gPiAtICogQGFkYXB0ZXI6ICAgICBoYW5kbGUgdG8gaTJj IGFkYXB0ZXIgZm9yIEREQyByZWFkCj4gPiAtICogQGVkaWRfY3RybDogICBIYW5kbGUgdG8gdGhl IGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IHZvaWQuCj4gPiAt ICovCj4gPiAtdm9pZCBkcHVfZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiA+IC1zdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCj4gPiAtdm9pZCAqKmVkaWRfY3Ry bCk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHB1X2ZyZWVfZWRpZCgpIC0gZnJlZSBlZGlkIHN0 cnVjdHVyZS4KPiA+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwg c3RydWN0dXJlLgo+ID4gLSAqCj4gPiAtICogUmV0dXJuOiB2b2lkLgo+ID4gLSAqLwo+ID4gLXZv aWQgZHB1X2ZyZWVfZWRpZCh2b2lkICoqZWRpZF9jdHJsKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0g KiBkcHVfZGV0ZWN0X2hkbWlfbW9uaXRvcigpIC0gZGV0ZWN0IEhETUkgbW9kZS4KPiA+IC0gKiBA ZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+ID4gLSAq Cj4gPiAtICogUmV0dXJuOiBlcnJvciBjb2RlLgo+ID4gLSAqLwo+ID4gLWJvb2wgZHB1X2RldGVj dF9oZG1pX21vbml0b3Iodm9pZCAqZWRpZF9jdHJsKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBk cHVfZ2V0X3NpbmtfYnBjKCkgLSByZXR1cm4gdGhlIGJwYyBvZiBzaW5rIGRldmljZS4KPiA+IC0g KiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+ID4g LSAqCj4gPiAtICogUmV0dXJuOiBicGMgc3VwcG9ydGVkIGJ5IHRoZSBzaW5rLgo+ID4gLSAqLwo+ ID4gLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmVkaWRfY3RybCk7Cj4gPiAtCj4gPiAtLyoq Cj4gPiAtICogZHB1X2dldF9lZGlkX2NoZWNrc3VtKCkgLSByZXR1cm4gdGhlIGNoZWNrc3VtIG9m IGxhc3QgYmxvY2sgb2YgRURJRC4KPiA+IC0gKiBAaW5wdXQ6ICAgICBIYW5kbGUgdG8gdGhlIGVk aWRfY3RybCBzdHJ1Y3R1cmUuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IGNoZWNrc3VtIG9mIHRo ZSBsYXN0IEVESUQgYmxvY2suCj4gPiAtICovCj4gPiAtdTggZHB1X2dldF9lZGlkX2NoZWNrc3Vt KHZvaWQgKmlucHV0KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBfZHB1X2VkaWRfdXBkYXRlX21v ZGVzKCkgLSBwb3B1bGF0ZSBFRElEIG1vZGVzLgo+ID4gLSAqIEBlZGlkX2N0cmw6ICAgICBIYW5k bGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm46IGVy cm9yIGNvZGUuCj4gPiAtICovCj4gPiAtaW50IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC0JCQkJCQkJdm9pZCAqZWRpZF9jdHJsKTsK PiA+IC0KPiA+IC0jZW5kaWYgLyogX0RQVV9FRElEX1BBUlNFUl9IXyAqLwo+ID4gLQoKLS0gClNl YW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5n IGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=