From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 06/14] drm: extract drm_atomic_uapi.c Date: Wed, 5 Sep 2018 09:55:28 +0200 Message-ID: <20180905075528.GA4929@phenom.ffwll.local> References: <20180903165439.24845-1-daniel.vetter@ffwll.ch> <20180903165439.24845-6-daniel.vetter@ffwll.ch> <20180904204133.GA2053@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 263F66E3BA for ; Wed, 5 Sep 2018 07:55:51 +0000 (UTC) Received: by mail-ed1-x52d.google.com with SMTP id j62-v6so5309490edd.7 for ; Wed, 05 Sep 2018 00:55:51 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180904204133.GA2053@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rodrigo Vivi Cc: David Airlie , Daniel Vetter , Intel Graphics Development , DRI Development , Sean Paul , Daniel Vetter , freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBTZXAgMDQsIDIwMTggYXQgMDE6NDE6MzNQTSAtMDcwMCwgUm9kcmlnbyBWaXZpIHdy b3RlOgo+IE1heWJlIHN0YXJ0IGEgbmV3IGZpbGUgd2l0aCBTUERYIGlkZW50aWZpZXI/Cj4gCj4g SSBsaWtlIHRoZSBpZGVhIG9mIHRoaXMgc3BsaXQuLi4KCkkganVzdCBjaGVja2VkLCBub25lIG9m IHRoZSBvdGhlciBkcm0gZmlsZXMgaGF2ZSB0aGVtLiBJJ20gbm90IHN1cmUgSSB3YW50CnRvIHN0 YXJ0IHRoaXMgc3BlY2lmaWMgYmlrZXNoZWQsIHNvIEkgdGhpbmsgSSdsbCBsZWF2ZSBpdCBhcy1p cy4KCj4gQWNrZWQtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZpQGludGVsLmNvbT4KClRo YW5rcywgRGFuaWVsCgo+IAo+ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiBSb2IgQ2xh cmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gPiArICogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfdWFwaS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ID4gKyNpbmNsdWRl IDxkcm0vZHJtX3ByaW50Lmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5r Lmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgo+ID4gKyNpbmNsdWRl IDxsaW51eC91YWNjZXNzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9maWxlLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImRybV9jcnRjX2lu dGVybmFsLmgiCj4gPiArCj4gPiArLyoqCj4gPiArICogRE9DOiBvdmVydmlldwo+ID4gKyAqCj4g PiArICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYXJzaGFsbGluZyBhbmQgZGVtYXJzaGFsbGlu ZyBnbHVlIGZvciB0aGUgYXRvbWljIFVBUEkKPiA+ICsgKiBpbiBhbGwgaXQncyBmb3JtOiBUaGUg bW9uc3RlciBBVE9NSUMgSU9DVEwgaXRzZWxmLCBjb2RlIGZvciBHRVRfUFJPUEVSVFkgYW5kCj4g PiArICogU0VUX1BST1BFUlRZIElPQ1Rscy4gUGx1cyBpbnRlcmZhY2UgZnVuY3Rpb25zIGZvciBj b21wYXRpYmlsaXR5IGhlbHBlcnMgYW5kCj4gPiArICogZHJpdmVycyB3aGljaCBoYXZlIHNwZWNp YWwgbmVlZHMgdG8gY29uc3RydWN0IHRoZWlyIG93biBhdG9taWMgdXBkYXRlcywgZS5nLgo+ID4g KyAqIGZvciBsb2FkIGRldGVjdCBvciBzaW1pbGlhci4KPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBkcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjIC0gc2V0IG1vZGUgZm9yIENSVEMK PiA+ICsgKiBAc3RhdGU6IHRoZSBDUlRDIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQo+ ID4gKyAqIEBtb2RlOiBrZXJuZWwtaW50ZXJuYWwgbW9kZSB0byB1c2UgZm9yIHRoZSBDUlRDLCBv ciBOVUxMIHRvIGRpc2FibGUKPiA+ICsgKgo+ID4gKyAqIFNldCBhIG1vZGUgKG9yaWdpbmF0aW5n IGZyb20gdGhlIGtlcm5lbCkgb24gdGhlIGRlc2lyZWQgQ1JUQyBzdGF0ZSBhbmQgdXBkYXRlCj4g PiArICogdGhlIGVuYWJsZSBwcm9wZXJ0eS4KPiA+ICsgKgo+ID4gKyAqIFJFVFVSTlM6Cj4gPiAr ICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIENhbm5vdCByZXR1cm4g LUVERUFETEsuCj4gPiArICovCj4gPiAraW50IGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMo c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0g c3RhdGUtPmNydGM7Cj4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyB1bW9kZTsKPiA+ICsK PiA+ICsJLyogRWFybHkgcmV0dXJuIGZvciBubyBjaGFuZ2UuICovCj4gPiArCWlmIChtb2RlICYm IG1lbWNtcCgmc3RhdGUtPm1vZGUsIG1vZGUsIHNpemVvZigqbW9kZSkpID09IDApCj4gPiArCQly ZXR1cm4gMDsKPiA+ICsKPiA+ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHN0YXRlLT5tb2RlX2Js b2IpOwo+ID4gKwlzdGF0ZS0+bW9kZV9ibG9iID0gTlVMTDsKPiA+ICsKPiA+ICsJaWYgKG1vZGUp IHsKPiA+ICsJCWRybV9tb2RlX2NvbnZlcnRfdG9fdW1vZGUoJnVtb2RlLCBtb2RlKTsKPiA+ICsJ CXN0YXRlLT5tb2RlX2Jsb2IgPQo+ID4gKwkJCWRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYihzdGF0 ZS0+Y3J0Yy0+ZGV2LAo+ID4gKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHVtb2RlKSwKPiA+ICsJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bW9k ZSk7Cj4gPiArCQlpZiAoSVNfRVJSKHN0YXRlLT5tb2RlX2Jsb2IpKQo+ID4gKwkJCXJldHVybiBQ VFJfRVJSKHN0YXRlLT5tb2RlX2Jsb2IpOwo+ID4gKwo+ID4gKwkJZHJtX21vZGVfY29weSgmc3Rh dGUtPm1vZGUsIG1vZGUpOwo+ID4gKwkJc3RhdGUtPmVuYWJsZSA9IHRydWU7Cj4gPiArCQlEUk1f REVCVUdfQVRPTUlDKCJTZXQgW01PREU6JXNdIGZvciBbQ1JUQzolZDolc10gc3RhdGUgJXBcbiIs Cj4gPiArCQkJCSBtb2RlLT5uYW1lLCBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLCBzdGF0ZSk7 Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQltZW1zZXQoJnN0YXRlLT5tb2RlLCAwLCBzaXplb2Yoc3Rh dGUtPm1vZGUpKTsKPiA+ICsJCXN0YXRlLT5lbmFibGUgPSBmYWxzZTsKPiA+ICsJCURSTV9ERUJV R19BVE9NSUMoIlNldCBbTk9NT0RFXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAo+ID4g KwkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwgc3RhdGUpOwo+ID4gKwl9Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X21v ZGVfZm9yX2NydGMpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9taWNfc2V0X21vZGVf cHJvcF9mb3JfY3J0YyAtIHNldCBtb2RlIGZvciBDUlRDCj4gPiArICogQHN0YXRlOiB0aGUgQ1JU QyB3aG9zZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKPiA+ICsgKiBAYmxvYjogcG9pbnRlciB0 byBibG9iIHByb3BlcnR5IHRvIHVzZSBmb3IgbW9kZQo+ID4gKyAqCj4gPiArICogU2V0IGEgbW9k ZSAob3JpZ2luYXRpbmcgZnJvbSBhIGJsb2IgcHJvcGVydHkpIG9uIHRoZSBkZXNpcmVkIENSVEMg c3RhdGUuCj4gPiArICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2Ugb24gdGhl IGJsb2IgcHJvcGVydHkgZm9yIHRoZSBDUlRDIHN0YXRlLAo+ID4gKyAqIGFuZCByZWxlYXNlIHRo ZSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgc3RhdGUncyBleGlzdGluZyBtb2RlIHByb3BlcnR5LCBp ZiBhbnkKPiA+ICsgKiB3YXMgc2V0Lgo+ID4gKyAqCj4gPiArICogUkVUVVJOUzoKPiA+ICsgKiBa ZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4gQ2Fubm90IHJldHVybiAtRURF QURMSy4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRj KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKPiA+ICsKPiA+ICsJaWYg KGJsb2IgPT0gc3RhdGUtPm1vZGVfYmxvYikKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlk cm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7Cj4gPiArCXN0YXRlLT5tb2Rl X2Jsb2IgPSBOVUxMOwo+ID4gKwo+ID4gKwltZW1zZXQoJnN0YXRlLT5tb2RlLCAwLCBzaXplb2Yo c3RhdGUtPm1vZGUpKTsKPiA+ICsKPiA+ICsJaWYgKGJsb2IpIHsKPiA+ICsJCWludCByZXQ7Cj4g PiArCj4gPiArCQlpZiAoYmxvYi0+bGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9k ZWluZm8pKSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6JXNdIGJhZCBtb2Rl IGJsb2IgbGVuZ3RoOiAlenVcbiIsCj4gPiArCQkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFt ZSwKPiA+ICsJCQkJCSBibG9iLT5sZW5ndGgpOwo+ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4g KwkJfQo+ID4gKwo+ID4gKwkJcmV0ID0gZHJtX21vZGVfY29udmVydF91bW9kZShjcnRjLT5kZXYs Cj4gPiArCQkJCQkgICAgICZzdGF0ZS0+bW9kZSwgYmxvYi0+ZGF0YSk7Cj4gPiArCQlpZiAocmV0 KSB7Cj4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6JXNdIGludmFsaWQgbW9kZSAo cmV0PSVkLCBzdGF0dXM9JXMpOlxuIiwKPiA+ICsJCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5u YW1lLAo+ID4gKwkJCQkJIHJldCwgZHJtX2dldF9tb2RlX3N0YXR1c19uYW1lKHN0YXRlLT5tb2Rl LnN0YXR1cykpOwo+ID4gKwkJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoJnN0YXRlLT5t b2RlKTsKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXN0YXRl LT5tb2RlX2Jsb2IgPSBkcm1fcHJvcGVydHlfYmxvYl9nZXQoYmxvYik7Cj4gPiArCQlzdGF0ZS0+ ZW5hYmxlID0gdHJ1ZTsKPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTU9ERTolc10gZm9y IFtDUlRDOiVkOiVzXSBzdGF0ZSAlcFxuIiwKPiA+ICsJCQkJIHN0YXRlLT5tb2RlLm5hbWUsIGNy dGMtPmJhc2UuaWQsIGNydGMtPm5hbWUsCj4gPiArCQkJCSBzdGF0ZSk7Cj4gPiArCX0gZWxzZSB7 Cj4gPiArCQlzdGF0ZS0+ZW5hYmxlID0gZmFsc2U7Cj4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJT ZXQgW05PTU9ERV0gZm9yIFtDUlRDOiVkOiVzXSBzdGF0ZSAlcFxuIiwKPiA+ICsJCQkJIGNydGMt PmJhc2UuaWQsIGNydGMtPm5hbWUsIHN0YXRlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4g MDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9y X2NydGMpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3Bs YW5lIC0gc2V0IGNydGMgZm9yIHBsYW5lCj4gPiArICogQHBsYW5lX3N0YXRlOiB0aGUgcGxhbmUg d2hvc2UgaW5jb21pbmcgc3RhdGUgdG8gdXBkYXRlCj4gPiArICogQGNydGM6IGNydGMgdG8gdXNl IGZvciB0aGUgcGxhbmUKPiA+ICsgKgo+ID4gKyAqIENoYW5naW5nIHRoZSBhc3NpZ25lZCBjcnRj IGZvciBhIHBsYW5lIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kIHN0YXRlCj4gPiAr ICogZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUg b2YgYWxsIHRoZXNlIGRldGFpbHMKPiA+ICsgKiBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVy IGluIHRoZSBzdGF0ZSBvYmplY3QgaXRzZWxmLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLiBX aGVuIHRoZSBlcnJvciBpcyBFREVBRExLCj4gPiArICogdGhlbiB0aGUgdy93IG11dGV4IGNvZGUg aGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZSBlbnRpcmUgYXRvbWljCj4gPiArICogc2Vx dWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgo+ID4g KyAqLwo+ID4gK2ludAo+ID4gK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcGxhbmVfc3Rh dGUtPnBsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiAr CS8qIE5vdGhpbmcgdG8gZG8gZm9yIHNhbWUgY3J0YyovCj4gPiArCWlmIChwbGFuZV9zdGF0ZS0+ Y3J0YyA9PSBjcnRjKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCWlmIChwbGFuZV9zdGF0ZS0+Y3J0 Yykgewo+ID4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVf c3RhdGUtPnN0YXRlLAo+ID4gKwkJCQkJCSAgICAgICBwbGFuZV9zdGF0ZS0+Y3J0Yyk7Cj4gPiAr CQlpZiAoV0FSTl9PTihJU19FUlIoY3J0Y19zdGF0ZSkpKQo+ID4gKwkJCXJldHVybiBQVFJfRVJS KGNydGNfc3RhdGUpOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZS0+cGxhbmVfbWFzayAmPSB+ZHJt X3BsYW5lX21hc2socGxhbmUpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXBsYW5lX3N0YXRlLT5jcnRj ID0gY3J0YzsKPiA+ICsKPiA+ICsJaWYgKGNydGMpIHsKPiA+ICsJCWNydGNfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9jcnRjX3N0YXRlKHBsYW5lX3N0YXRlLT5zdGF0ZSwKPiA+ICsJCQkJCQkgICAg ICAgY3J0Yyk7Cj4gPiArCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQo+ID4gKwkJCXJldHVybiBQ VFJfRVJSKGNydGNfc3RhdGUpOwo+ID4gKwkJY3J0Y19zdGF0ZS0+cGxhbmVfbWFzayB8PSBkcm1f cGxhbmVfbWFzayhwbGFuZSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGNydGMpCj4gPiArCQlE Uk1fREVCVUdfQVRPTUlDKCJMaW5rIFtQTEFORTolZDolc10gc3RhdGUgJXAgdG8gW0NSVEM6JWQ6 JXNdXG4iLAo+ID4gKwkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLCBwbGFuZV9zdGF0 ZSwKPiA+ICsJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOwo+ID4gKwllbHNlCj4gPiAr CQlEUk1fREVCVUdfQVRPTUlDKCJMaW5rIFtQTEFORTolZDolc10gc3RhdGUgJXAgdG8gW05PQ1JU Q11cbiIsCj4gPiArCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRl KTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19zZXRfY3J0Y19mb3JfcGxhbmUpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9t aWNfc2V0X2ZiX2Zvcl9wbGFuZSAtIHNldCBmcmFtZWJ1ZmZlciBmb3IgcGxhbmUKPiA+ICsgKiBA cGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQo+ID4gKyAqIEBm YjogZmIgdG8gdXNlIGZvciB0aGUgcGxhbmUKPiA+ICsgKgo+ID4gKyAqIENoYW5naW5nIHRoZSBh c3NpZ25lZCBmcmFtZWJ1ZmZlciBmb3IgYSBwbGFuZSByZXF1aXJlcyB1cyB0byBncmFiIGEgcmVm ZXJlbmNlCj4gPiArICogdG8gdGhlIG5ldyBmYiBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRo ZSBvbGQgZmIsIGlmIHRoZXJlIGlzIG9uZS4gVGhpcwo+ID4gKyAqIGZ1bmN0aW9uIHRha2VzIGNh cmUgb2YgYWxsIHRoZXNlIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0 aGUKPiA+ICsgKiBzdGF0ZSBvYmplY3QgaXRzZWxmLgo+ID4gKyAqLwo+ID4gK3ZvaWQKPiA+ICtk cm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVf c3RhdGUsCj4gPiArCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBwbGFuZV9zdGF0ZS0+cGxhbmU7Cj4gPiArCj4g PiArCWlmIChmYikKPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIlNldCBbRkI6JWRdIGZvciBbUExB TkU6JWQ6JXNdIHN0YXRlICVwXG4iLAo+ID4gKwkJCQkgZmItPmJhc2UuaWQsIHBsYW5lLT5iYXNl LmlkLCBwbGFuZS0+bmFtZSwKPiA+ICsJCQkJIHBsYW5lX3N0YXRlKTsKPiA+ICsJZWxzZQo+ID4g KwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgW1BMQU5FOiVkOiVzXSBzdGF0ZSAl cFxuIiwKPiA+ICsJCQkJIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwgcGxhbmVfc3RhdGUp Owo+ID4gKwo+ID4gKwlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZwbGFuZV9zdGF0ZS0+ZmIsIGZi KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUp Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZSAt IHNldCBmZW5jZSBmb3IgcGxhbmUKPiA+ICsgKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBv YmplY3QgZm9yIHRoZSBwbGFuZQo+ID4gKyAqIEBmZW5jZTogZG1hX2ZlbmNlIHRvIHVzZSBmb3Ig dGhlIHBsYW5lCj4gPiArICoKPiA+ICsgKiBIZWxwZXIgdG8gc2V0dXAgdGhlIHBsYW5lX3N0YXRl IGZlbmNlIGluIGNhc2UgaXQgaXMgbm90IHNldCB5ZXQuCj4gPiArICogQnkgdXNpbmcgdGhpcyBk cml2ZXJzIGRvZXNuJ3QgbmVlZCB0byB3b3JyeSBpZiB0aGUgdXNlciBjaG9vc2UKPiA+ICsgKiBp bXBsaWNpdCBvciBleHBsaWNpdCBmZW5jaW5nLgo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlv biB3aWxsIG5vdCBzZXQgdGhlIGZlbmNlIHRvIHRoZSBzdGF0ZSBpZiBpdCB3YXMgc2V0Cj4gPiAr ICogdmlhIGV4cGxpY2l0IGZlbmNpbmcgaW50ZXJmYWNlcyBvbiB0aGUgYXRvbWljIGlvY3RsLiBJ biB0aGF0IGNhc2UgaXQgd2lsbAo+ID4gKyAqIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgZmVu Y2UgYXMgd2UgYXJlIG5vdCBzdG9yaW5nIGl0IGFueXdoZXJlLgo+ID4gKyAqIE90aGVyd2lzZSwg aWYgJmRybV9wbGFuZV9zdGF0ZS5mZW5jZSBpcyBub3Qgc2V0IHRoaXMgZnVuY3Rpb24gd2UganVz dCBzZXQgaXQKPiA+ICsgKiB3aXRoIHRoZSByZWNlaXZlZCBpbXBsaWNpdCBmZW5jZS4gSW4gYm90 aCBjYXNlcyB0aGlzIGZ1bmN0aW9uIGNvbnN1bWVzIGEKPiA+ICsgKiByZWZlcmVuY2UgZm9yIEBm ZW5jZS4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgd2F5IGV4cGxpY2l0IGZlbmNpbmcgY2FuIGJlIHVz ZWQgdG8gb3ZlcnJ1bGUgaW1wbGljaXQgZmVuY2luZywgd2hpY2ggaXMKPiA+ICsgKiBpbXBvcnRh bnQgdG8gbWFrZSBleHBsaWNpdCBmZW5jaW5nIHVzZS1jYXNlcyB3b3JrOiBPbmUgZXhhbXBsZSBp cyB1c2luZyBvbmUKPiA+ICsgKiBidWZmZXIgZm9yIDIgc2NyZWVucyB3aXRoIGRpZmZlcmVudCBy ZWZyZXNoIHJhdGVzLiBJbXBsaWNpdCBmZW5jaW5nIHdpbGwKPiA+ICsgKiBjbGFtcCByZW5kZXJp bmcgdG8gdGhlIHJlZnJlc2ggcmF0ZSBvZiB0aGUgc2xvd2VyIHNjcmVlbiwgd2hlcmVhcyBleHBs aWNpdAo+ID4gKyAqIGZlbmNlIGFsbG93cyAyIGluZGVwZW5kZW50IHJlbmRlciBhbmQgZGlzcGxh eSBsb29wcyBvbiBhIHNpbmdsZSBidWZmZXIuIElmIGEKPiA+ICsgKiBkcml2ZXIgYWxsb3dzIG9i ZXlzIGJvdGggaW1wbGljaXQgYW5kIGV4cGxpY2l0IGZlbmNlcyBmb3IgcGxhbmUgdXBkYXRlcywg dGhlbgo+ID4gKyAqIGl0IHdpbGwgYnJlYWsgYWxsIHRoZSBiZW5lZml0cyBvZiBleHBsaWNpdCBm ZW5jaW5nLgo+ID4gKyAqLwo+ID4gK3ZvaWQKPiA+ICtkcm1fYXRvbWljX3NldF9mZW5jZV9mb3Jf cGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gPiArCQkJICAgICAg IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+ID4gK3sKPiA+ICsJaWYgKHBsYW5lX3N0YXRlLT5m ZW5jZSkgewo+ID4gKwkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gPiArCQlyZXR1cm47Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcGxhbmVfc3RhdGUtPmZlbmNlID0gZmVuY2U7Cj4gPiArfQo+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKTsKPiA+ICsKPiA+ICsv KioKPiA+ICsgKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IgLSBzZXQgY3J0YyBm b3IgY29ubmVjdG9yCj4gPiArICogQGNvbm5fc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9y IHRoZSBjb25uZWN0b3IKPiA+ICsgKiBAY3J0YzogY3J0YyB0byB1c2UgZm9yIHRoZSBjb25uZWN0 b3IKPiA+ICsgKgo+ID4gKyAqIENoYW5naW5nIHRoZSBhc3NpZ25lZCBjcnRjIGZvciBhIGNvbm5l Y3RvciByZXF1aXJlcyB1cyB0byBncmFiIHRoZSBsb2NrIGFuZAo+ID4gKyAqIHN0YXRlIGZvciB0 aGUgbmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0 aGVzZQo+ID4gKyAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUg c3RhdGUgb2JqZWN0IGl0c2VsZi4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogMCBv biBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUg ZXJyb3IgaXMgRURFQURMSwo+ID4gKyAqIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhhcyBkZXRl Y3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUgZW50aXJlIGF0b21pYwo+ID4gKyAqIHNlcXVlbmNlIG11 c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KPiA+ICsgKi8KPiA+ ICtpbnQKPiA+ICtkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCj4gPiArCQkJCSAgc3RydWN0IGRybV9jcnRjICpj cnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5f c3RhdGUtPmNvbm5lY3RvcjsKPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRl Owo+ID4gKwo+ID4gKwlpZiAoY29ubl9zdGF0ZS0+Y3J0YyA9PSBjcnRjKQo+ID4gKwkJcmV0dXJu IDA7Cj4gPiArCj4gPiArCWlmIChjb25uX3N0YXRlLT5jcnRjKSB7Cj4gPiArCQljcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsCj4gPiAr CQkJCQkJCSAgIGNvbm5fc3RhdGUtPmNydGMpOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZS0+Y29u bmVjdG9yX21hc2sgJj0KPiA+ICsJCQl+ZHJtX2Nvbm5lY3Rvcl9tYXNrKGNvbm5fc3RhdGUtPmNv bm5lY3Rvcik7Cj4gPiArCj4gPiArCQlkcm1fY29ubmVjdG9yX3B1dChjb25uX3N0YXRlLT5jb25u ZWN0b3IpOwo+ID4gKwkJY29ubl9zdGF0ZS0+Y3J0YyA9IE5VTEw7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJaWYgKGNydGMpIHsKPiA+ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0 YXRlKGNvbm5fc3RhdGUtPnN0YXRlLCBjcnRjKTsKPiA+ICsJCWlmIChJU19FUlIoY3J0Y19zdGF0 ZSkpCj4gPiArCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiArCj4gPiArCQljcnRj X3N0YXRlLT5jb25uZWN0b3JfbWFzayB8PQo+ID4gKwkJCWRybV9jb25uZWN0b3JfbWFzayhjb25u X3N0YXRlLT5jb25uZWN0b3IpOwo+ID4gKwo+ID4gKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubl9z dGF0ZS0+Y29ubmVjdG9yKTsKPiA+ICsJCWNvbm5fc3RhdGUtPmNydGMgPSBjcnRjOwo+ID4gKwo+ ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiTGluayBbQ09OTkVDVE9SOiVkOiVzXSBzdGF0ZSAlcCB0 byBbQ1JUQzolZDolc11cbiIsCj4gPiArCQkJCSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rv ci0+bmFtZSwKPiA+ICsJCQkJIGNvbm5fc3RhdGUsIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUp Owo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiTGluayBbQ09OTkVDVE9S OiVkOiVzXSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwKPiA+ICsJCQkJIGNvbm5lY3Rvci0+YmFz ZS5pZCwgY29ubmVjdG9yLT5uYW1lLAo+ID4gKwkJCQkgY29ubl9zdGF0ZSk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19z ZXRfY3J0Y19mb3JfY29ubmVjdG9yKTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzZXRfb3V0X2Zl bmNlX2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJICAg c3RydWN0IGRybV9jcnRjICpjcnRjLCBzMzIgX191c2VyICpmZW5jZV9wdHIpCj4gPiArewo+ID4g KwlzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0YyldLm91dF9mZW5jZV9wdHIgPSBmZW5j ZV9wdHI7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzMzIgX191c2VyICpnZXRfb3V0X2ZlbmNl X2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJCSAgc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJczMyIF9fdXNlciAqZmVuY2VfcHRyOwo+ ID4gKwo+ID4gKwlmZW5jZV9wdHIgPSBzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5kZXgoY3J0Yyld Lm91dF9mZW5jZV9wdHI7Cj4gPiArCXN0YXRlLT5jcnRjc1tkcm1fY3J0Y19pbmRleChjcnRjKV0u b3V0X2ZlbmNlX3B0ciA9IE5VTEw7Cj4gPiArCj4gPiArCXJldHVybiBmZW5jZV9wdHI7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc2V0X291dF9mZW5jZV9mb3JfY29ubmVjdG9yKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCj4gPiArCQkJCQlzMzIgX191c2VyICpmZW5jZV9wdHIpCj4gPiArewo+ID4g Kwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5lY3Rvcik7Cj4g PiArCj4gPiArCWlmICghZmVuY2VfcHRyKQo+ID4gKwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlm IChwdXRfdXNlcigtMSwgZmVuY2VfcHRyKSkKPiA+ICsJCXJldHVybiAtRUZBVUxUOwo+ID4gKwo+ ID4gKwlzdGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsK PiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzMzIgX191c2Vy ICpnZXRfb3V0X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ID4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4g PiArewo+ID4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5l Y3Rvcik7Cj4gPiArCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKPiA+ICsKPiA+ICsJZmVuY2VfcHRy ID0gc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdLm91dF9mZW5jZV9wdHI7Cj4gPiArCXN0YXRlLT5j b25uZWN0b3JzW2luZGV4XS5vdXRfZmVuY2VfcHRyID0gTlVMTDsKPiA+ICsKPiA+ICsJcmV0dXJu IGZlbmNlX3B0cjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludAo+ID4gK2RybV9hdG9taWNf cmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ ICsJCQkJCSBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKipibG9iLAo+ID4gKwkJCQkJIHVpbnQ2 NF90IGJsb2JfaWQsCj4gPiArCQkJCQkgc3NpemVfdCBleHBlY3RlZF9zaXplLAo+ID4gKwkJCQkJ IHNzaXplX3QgZXhwZWN0ZWRfZWxlbV9zaXplLAo+ID4gKwkJCQkJIGJvb2wgKnJlcGxhY2VkKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpuZXdfYmxvYiA9IE5VTEw7Cj4g PiArCj4gPiArCWlmIChibG9iX2lkICE9IDApIHsKPiA+ICsJCW5ld19ibG9iID0gZHJtX3Byb3Bl cnR5X2xvb2t1cF9ibG9iKGRldiwgYmxvYl9pZCk7Cj4gPiArCQlpZiAobmV3X2Jsb2IgPT0gTlVM TCkKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJCWlmIChleHBlY3RlZF9zaXpl ID4gMCAmJgo+ID4gKwkJICAgIG5ld19ibG9iLT5sZW5ndGggIT0gZXhwZWN0ZWRfc2l6ZSkgewo+ ID4gKwkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7Cj4gPiArCQkJcmV0dXJuIC1F SU5WQUw7Cj4gPiArCQl9Cj4gPiArCQlpZiAoZXhwZWN0ZWRfZWxlbV9zaXplID4gMCAmJgo+ID4g KwkJICAgIG5ld19ibG9iLT5sZW5ndGggJSBleHBlY3RlZF9lbGVtX3NpemUgIT0gMCkgewo+ID4g KwkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7Cj4gPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJKnJlcGxhY2VkIHw9IGRybV9wcm9wZXJ0 eV9yZXBsYWNlX2Jsb2IoYmxvYiwgbmV3X2Jsb2IpOwo+ID4gKwlkcm1fcHJvcGVydHlfYmxvYl9w dXQobmV3X2Jsb2IpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBkcm1fYXRvbWljX2NydGNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiA+ICsJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVy dHkgKnByb3BlcnR5LAo+ID4gKwkJdWludDY0X3QgdmFsKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+ICsJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAq Y29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gPiArCWJvb2wgcmVwbGFjZWQgPSBmYWxzZTsK PiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9h Y3RpdmUpCj4gPiArCQlzdGF0ZS0+YWN0aXZlID0gdmFsOwo+ID4gKwllbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnByb3BfbW9kZV9pZCkgewo+ID4gKwkJc3RydWN0IGRybV9wcm9wZXJ0eV9i bG9iICptb2RlID0KPiA+ICsJCQlkcm1fcHJvcGVydHlfbG9va3VwX2Jsb2IoZGV2LCB2YWwpOwo+ ID4gKwkJcmV0ID0gZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRjKHN0YXRlLCBtb2Rl KTsKPiA+ICsJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChtb2RlKTsKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kZWdhbW1hX2x1dF9wcm9wZXJ0 eSkgewo+ID4gKwkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Jsb2JfZnJvbV9p ZChkZXYsCj4gPiArCQkJCQkmc3RhdGUtPmRlZ2FtbWFfbHV0LAo+ID4gKwkJCQkJdmFsLAo+ID4g KwkJCQkJLTEsIHNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCksCj4gPiArCQkJCQkmcmVwbGFj ZWQpOwo+ID4gKwkJc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKPiA+ICsJ CXJldHVybiByZXQ7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jdG1fcHJv cGVydHkpIHsKPiA+ICsJCXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zy b21faWQoZGV2LAo+ID4gKwkJCQkJJnN0YXRlLT5jdG0sCj4gPiArCQkJCQl2YWwsCj4gPiArCQkJ CQlzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pLCAtMSwKPiA+ICsJCQkJCSZyZXBsYWNlZCk7 Cj4gPiArCQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwo+ID4gKwkJcmV0 dXJuIHJldDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmdhbW1hX2x1dF9w cm9wZXJ0eSkgewo+ID4gKwkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Jsb2Jf ZnJvbV9pZChkZXYsCj4gPiArCQkJCQkmc3RhdGUtPmdhbW1hX2x1dCwKPiA+ICsJCQkJCXZhbCwK PiA+ICsJCQkJCS0xLCBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpLAo+ID4gKwkJCQkJJnJl cGxhY2VkKTsKPiA+ICsJCXN0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgfD0gcmVwbGFjZWQ7Cj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJv cF9vdXRfZmVuY2VfcHRyKSB7Cj4gPiArCQlzMzIgX191c2VyICpmZW5jZV9wdHIgPSB1NjRfdG9f dXNlcl9wdHIodmFsKTsKPiA+ICsKPiA+ICsJCWlmICghZmVuY2VfcHRyKQo+ID4gKwkJCXJldHVy biAwOwo+ID4gKwo+ID4gKwkJaWYgKHB1dF91c2VyKC0xLCBmZW5jZV9wdHIpKQo+ID4gKwkJCXJl dHVybiAtRUZBVUxUOwo+ID4gKwo+ID4gKwkJc2V0X291dF9mZW5jZV9mb3JfY3J0YyhzdGF0ZS0+ c3RhdGUsIGNydGMsIGZlbmNlX3B0cik7Cj4gPiArCX0gZWxzZSBpZiAoY3J0Yy0+ZnVuY3MtPmF0 b21pY19zZXRfcHJvcGVydHkpIHsKPiA+ICsJCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX3Nl dF9wcm9wZXJ0eShjcnRjLCBzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gPiArCX0gZWxzZSB7Cj4g PiArCQlEUk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJP UDolZDolc11dXG4iLAo+ID4gKwkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKPiA+ICsJ CQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+bmFtZSk7Cj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludAo+ID4gK2RybV9hdG9taWNfY3J0Y19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+ID4gKwkJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKPiA+ICsJ CXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+ICsJc3RydWN0IGRybV9t b2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gPiArCj4gPiArCWlmIChw cm9wZXJ0eSA9PSBjb25maWctPnByb3BfYWN0aXZlKQo+ID4gKwkJKnZhbCA9IHN0YXRlLT5hY3Rp dmU7Cj4gPiArCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9tb2RlX2lkKQo+ID4g KwkJKnZhbCA9IChzdGF0ZS0+bW9kZV9ibG9iKSA/IHN0YXRlLT5tb2RlX2Jsb2ItPmJhc2UuaWQg OiAwOwo+ID4gKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRlZ2FtbWFfbHV0X3Byb3Bl cnR5KQo+ID4gKwkJKnZhbCA9IChzdGF0ZS0+ZGVnYW1tYV9sdXQpID8gc3RhdGUtPmRlZ2FtbWFf bHV0LT5iYXNlLmlkIDogMDsKPiA+ICsJZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jdG1f cHJvcGVydHkpCj4gPiArCQkqdmFsID0gKHN0YXRlLT5jdG0pID8gc3RhdGUtPmN0bS0+YmFzZS5p ZCA6IDA7Cj4gPiArCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3Bl cnR5KQo+ID4gKwkJKnZhbCA9IChzdGF0ZS0+Z2FtbWFfbHV0KSA/IHN0YXRlLT5nYW1tYV9sdXQt PmJhc2UuaWQgOiAwOwo+ID4gKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfb3V0 X2ZlbmNlX3B0cikKPiA+ICsJCSp2YWwgPSAwOwo+ID4gKwllbHNlIGlmIChjcnRjLT5mdW5jcy0+ YXRvbWljX2dldF9wcm9wZXJ0eSkKPiA+ICsJCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX2dl dF9wcm9wZXJ0eShjcnRjLCBzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gPiArCWVsc2UKPiA+ICsJ CXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiA+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiA+ICsJCXVpbnQ2NF90IHZhbCkKPiA+ICt7Cj4gPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiA+ICsKPiA+ICsJaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgewo+ID4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBkcm1fZnJhbWVidWZmZXJfbG9va3VwKGRldiwgTlVMTCwgdmFsKTsKPiA+ICsJCWRy bV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZShzdGF0ZSwgZmIpOwo+ID4gKwkJaWYgKGZiKQo+ID4g KwkJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+cHJvcF9pbl9mZW5jZV9mZCkgewo+ID4gKwkJaWYgKHN0YXRlLT5mZW5jZSkKPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJCWlmIChVNjQySTY0KHZhbCkgPT0gLTEp Cj4gPiArCQkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCQlzdGF0ZS0+ZmVuY2UgPSBzeW5jX2ZpbGVf Z2V0X2ZlbmNlKHZhbCk7Cj4gPiArCQlpZiAoIXN0YXRlLT5mZW5jZSkKPiA+ICsJCQlyZXR1cm4g LUVJTlZBTDsKPiA+ICsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bf Y3J0Y19pZCkgewo+ID4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZHJtX2NydGNfZmluZChk ZXYsIE5VTEwsIHZhbCk7Cj4gPiArCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxh bmUoc3RhdGUsIGNydGMpOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJv cF9jcnRjX3gpIHsKPiA+ICsJCXN0YXRlLT5jcnRjX3ggPSBVNjQySTY0KHZhbCk7Cj4gPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeSkgewo+ID4gKwkJc3RhdGUt PmNydGNfeSA9IFU2NDJJNjQodmFsKTsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnByb3BfY3J0Y193KSB7Cj4gPiArCQlzdGF0ZS0+Y3J0Y193ID0gdmFsOwo+ID4gKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2gpIHsKPiA+ICsJCXN0YXRlLT5j cnRjX2ggPSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3Ny Y194KSB7Cj4gPiArCQlzdGF0ZS0+c3JjX3ggPSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT5wcm9wX3NyY195KSB7Cj4gPiArCQlzdGF0ZS0+c3JjX3kgPSB2YWw7Cj4g PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY193KSB7Cj4gPiArCQlz dGF0ZS0+c3JjX3cgPSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5w cm9wX3NyY19oKSB7Cj4gPiArCQlzdGF0ZS0+c3JjX2ggPSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gcGxhbmUtPmFscGhhX3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+YWxwaGEg PSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmJsZW5kX21vZGVfcHJv cGVydHkpIHsKPiA+ICsJCXN0YXRlLT5waXhlbF9ibGVuZF9tb2RlID0gdmFsOwo+ID4gKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+ID4gKwkJaWYg KCFpc19wb3dlcl9vZl8yKHZhbCAmIERSTV9NT0RFX1JPVEFURV9NQVNLKSkgewo+ID4gKwkJCURS TV9ERUJVR19BVE9NSUMoIltQTEFORTolZDolc10gYmFkIHJvdGF0aW9uIGJpdG1hc2s6IDB4JWxs eFxuIiwKPiA+ICsJCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHZhbCk7Cj4gPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiArCQlzdGF0ZS0+cm90YXRpb24gPSB2YWw7 Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVydHkpIHsKPiA+ ICsJCXN0YXRlLT56cG9zID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5l LT5jb2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPmNvbG9yX2VuY29kaW5n ID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9yYW5nZV9w cm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPmNvbG9yX3JhbmdlID0gdmFsOwo+ID4gKwl9IGVsc2Ug aWYgKHBsYW5lLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewo+ID4gKwkJcmV0dXJuIHBs YW5lLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShwbGFuZSwgc3RhdGUsCj4gPiArCQkJCXBy b3BlcnR5LCB2YWwpOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW1BM QU5FOiVkOiVzXSB1bmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXV1cbiIsCj4gPiArCQkJCSBw bGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCj4gPiArCQkJCSBwcm9wZXJ0eS0+YmFzZS5pZCwg cHJvcGVydHktPm5hbWUpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtkcm1fYXRvbWlj X3BsYW5lX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCWNvbnN0 IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAo+ID4gKwkJc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gcGxhbmUtPmRldjsKPiA+ICsJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmln ID0gJmRldi0+bW9kZV9jb25maWc7Cj4gPiArCj4gPiArCWlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3BfZmJfaWQpIHsKPiA+ICsJCSp2YWwgPSAoc3RhdGUtPmZiKSA/IHN0YXRlLT5mYi0+YmFz ZS5pZCA6IDA7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2luX2Zl bmNlX2ZkKSB7Cj4gPiArCQkqdmFsID0gLTE7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT5wcm9wX2NydGNfaWQpIHsKPiA+ICsJCSp2YWwgPSAoc3RhdGUtPmNydGMpID8gc3Rh dGUtPmNydGMtPmJhc2UuaWQgOiAwOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9jcnRjX3gpIHsKPiA+ICsJCSp2YWwgPSBJNjQyVTY0KHN0YXRlLT5jcnRjX3gpOwo+ ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3kpIHsKPiA+ICsJ CSp2YWwgPSBJNjQyVTY0KHN0YXRlLT5jcnRjX3kpOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9jcnRjX3cpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+Y3J0Y193Owo+ ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2gpIHsKPiA+ICsJ CSp2YWwgPSBzdGF0ZS0+Y3J0Y19oOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9zcmNfeCkgewo+ID4gKwkJKnZhbCA9IHN0YXRlLT5zcmNfeDsKPiA+ICsJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3kpIHsKPiA+ICsJCSp2YWwgPSBzdGF0 ZS0+c3JjX3k7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY193 KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnNyY193Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9zcmNfaCkgewo+ID4gKwkJKnZhbCA9IHN0YXRlLT5zcmNfaDsKPiA+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YWxwaGFfcHJvcGVydHkpIHsKPiA+ICsJ CSp2YWwgPSBzdGF0ZS0+YWxwaGE7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUt PmJsZW5kX21vZGVfcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+cGl4ZWxfYmxlbmRf bW9kZTsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+cm90YXRpb25fcHJvcGVy dHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+cm90YXRpb247Cj4gPiArCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+enBv czsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfZW5jb2RpbmdfcHJv cGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+Y29sb3JfZW5jb2Rpbmc7Cj4gPiArCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3BlcnR5KSB7Cj4gPiArCQkq dmFsID0gc3RhdGUtPmNvbG9yX3JhbmdlOwo+ID4gKwl9IGVsc2UgaWYgKHBsYW5lLT5mdW5jcy0+ YXRvbWljX2dldF9wcm9wZXJ0eSkgewo+ID4gKwkJcmV0dXJuIHBsYW5lLT5mdW5jcy0+YXRvbWlj X2dldF9wcm9wZXJ0eShwbGFuZSwgc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ID4gKwl9IGVsc2Ug ewo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKgo+ID4gK2Ry bV9hdG9taWNfZ2V0X3dyaXRlYmFja19qb2Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCj4gPiArewo+ID4gKwlXQVJOX09OKGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSyk7Cj4gPiArCj4gPiAr CWlmICghY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYikKPiA+ICsJCWNvbm5fc3RhdGUtPndyaXRl YmFja19qb2IgPQo+ID4gKwkJCWt6YWxsb2Moc2l6ZW9mKCpjb25uX3N0YXRlLT53cml0ZWJhY2tf am9iKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCj4gPiArCXJldHVybiBjb25uX3N0YXRlLT53cml0ZWJh Y2tfam9iOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybV9hdG9taWNfc2V0X3dyaXRl YmFja19mYl9mb3JfY29ubmVjdG9yKAo+ID4gKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KmNvbm5fc3RhdGUsCj4gPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiA+ICt7Cj4g PiArCXN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iID0KPiA+ICsJCWRybV9hdG9taWNfZ2V0 X3dyaXRlYmFja19qb2IoY29ubl9zdGF0ZSk7Cj4gPiArCWlmICgham9iKQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gPiArCj4gPiArCWRybV9mcmFtZWJ1ZmZlcl9hc3NpZ24oJmpvYi0+ZmIsIGZi KTsKPiA+ICsKPiA+ICsJaWYgKGZiKQo+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtGQjol ZF0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwKPiA+ICsJCQkJIGZiLT5iYXNlLmlkLCBjb25u X3N0YXRlKTsKPiA+ICsJZWxzZQo+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtOT0ZCXSBm b3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAo+ID4gKwkJCQkgY29ubl9zdGF0ZSk7Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybV9hdG9taWNfY29u bmVjdG9yX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4g KwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICpwcm9wZXJ0eSwKPiA+ICsJCXVpbnQ2NF90IHZhbCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiA+ICsJc3RydWN0IGRybV9tb2RlX2NvbmZp ZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7Cj4gPiArCj4gPiArCWlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnByb3BfY3J0Y19pZCkgewo+ID4gKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0g ZHJtX2NydGNfZmluZChkZXYsIE5VTEwsIHZhbCk7Cj4gPiArCQlyZXR1cm4gZHJtX2F0b21pY19z ZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0YXRlLCBjcnRjKTsKPiA+ICsJfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBjb25maWctPmRwbXNfcHJvcGVydHkpIHsKPiA+ICsJCS8qIHNldHRpbmcgRFBNUyBw cm9wZXJ0eSByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLCB3aGljaAo+ID4gKwkJICogaXMgZG9u ZSBpbiBsZWdhY3kgc2V0cHJvcCBwYXRoIGZvciB1cy4gIERpc2FsbG93IChmb3IKPiA+ICsJCSAq IG5vdz8pIGF0b21pYyB3cml0ZXMgdG8gRFBNUyBwcm9wZXJ0eToKPiA+ICsJCSAqLwo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9z ZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+dHYuc3ViY29ubmVj dG9yID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfbGVmdF9t YXJnaW5fcHJvcGVydHkpIHsKPiA+ICsJCXN0YXRlLT50di5tYXJnaW5zLmxlZnQgPSB2YWw7Cj4g PiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9yaWdodF9tYXJnaW5fcHJvcGVy dHkpIHsKPiA+ICsJCXN0YXRlLT50di5tYXJnaW5zLnJpZ2h0ID0gdmFsOwo+ID4gKwl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewo+ID4gKwkJ c3RhdGUtPnR2Lm1hcmdpbnMudG9wID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPnR2Lm1h cmdpbnMuYm90dG9tID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ dHZfbW9kZV9wcm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPnR2Lm1vZGUgPSB2YWw7Cj4gPiArCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7Cj4g PiArCQlzdGF0ZS0+dHYuYnJpZ2h0bmVzcyA9IHZhbDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X2NvbnRyYXN0X3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+dHYuY29u dHJhc3QgPSB2YWw7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9mbGlj a2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0 aW9uID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfb3ZlcnNj YW5fcHJvcGVydHkpIHsKPiA+ICsJCXN0YXRlLT50di5vdmVyc2NhbiA9IHZhbDsKPiA+ICsJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NhdHVyYXRpb25fcHJvcGVydHkpIHsKPiA+ ICsJCXN0YXRlLT50di5zYXR1cmF0aW9uID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+dHZfaHVlX3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+dHYuaHVlID0gdmFs Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19zdGF0dXNfcHJvcGVy dHkpIHsKPiA+ICsJCS8qIE5ldmVyIGRvd25ncmFkZSBmcm9tIEdPT0QgdG8gQkFEIG9uIHVzZXJz cGFjZSdzIHJlcXVlc3QgaGVyZSwKPiA+ICsJCSAqIG9ubHkgaHcgaXNzdWVzIGNhbiBkbyB0aGF0 Lgo+ID4gKwkJICoKPiA+ICsJCSAqIEZvciBhbiBhdG9taWMgcHJvcGVydHkgdGhlIHVzZXJzcGFj ZSBkb2Vzbid0IG5lZWQgdG8gYmUgYWJsZQo+ID4gKwkJICogdG8gdW5kZXJzdGFuZCBhbGwgdGhl IHByb3BlcnRpZXMsIGJ1dCBuZWVkcyB0byBiZSBhYmxlIHRvCj4gPiArCQkgKiByZXN0b3JlIHRo ZSBzdGF0ZSBpdCB3YW50cyBvbiBWVCBzd2l0Y2guIFNvIGlmIHRoZSB1c2Vyc3BhY2UKPiA+ICsJ CSAqIHRyaWVzIHRvIGNoYW5nZSB0aGUgbGlua19zdGF0dXMgZnJvbSBHT09EIHRvIEJBRCwgZHJp dmVyCj4gPiArCQkgKiBzaWxlbnRseSByZWplY3RzIGl0IGFuZCByZXR1cm5zIGEgMC4gVGhpcyBw cmV2ZW50cyB1c2Vyc3BhY2UKPiA+ICsJCSAqIGZyb20gYWNjaWRlbnRseSBicmVha2luZyAgdGhl IGRpc3BsYXkgd2hlbiBpdCByZXN0b3JlcyB0aGUKPiA+ICsJCSAqIHN0YXRlLgo+ID4gKwkJICov Cj4gPiArCQlpZiAoc3RhdGUtPmxpbmtfc3RhdHVzICE9IERSTV9MSU5LX1NUQVRVU19HT09EKQo+ ID4gKwkJCXN0YXRlLT5saW5rX3N0YXR1cyA9IHZhbDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgewo+ID4gKwkJc3RhdGUtPnBpY3R1 cmVfYXNwZWN0X3JhdGlvID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+Y29udGVudF90eXBlX3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+Y29udGVudF90eXBlID0g dmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+c2NhbGluZ19tb2Rl X3Byb3BlcnR5KSB7Cj4gPiArCQlzdGF0ZS0+c2NhbGluZ19tb2RlID0gdmFsOwo+ID4gKwl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5 KSB7Cj4gPiArCQlpZiAodmFsID09IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9FTkFCTEVE KSB7Cj4gPiArCQkJRFJNX0RFQlVHX0tNUygib25seSBkcml2ZXJzIGNhbiBzZXQgQ1AgRW5hYmxl ZFxuIik7Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQl9Cj4gPiArCQlzdGF0ZS0+Y29u dGVudF9wcm90ZWN0aW9uID0gdmFsOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+d3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5KSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBOVUxMLCB2YWwpOwo+ID4gKwkJ aW50IHJldCA9IGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKHN0YXRl LCBmYik7Cj4gPiArCQlpZiAoZmIpCj4gPiArCQkJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Cj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+d3Jp dGViYWNrX291dF9mZW5jZV9wdHJfcHJvcGVydHkpIHsKPiA+ICsJCXMzMiBfX3VzZXIgKmZlbmNl X3B0ciA9IHU2NF90b191c2VyX3B0cih2YWwpOwo+ID4gKwo+ID4gKwkJcmV0dXJuIHNldF9vdXRf ZmVuY2VfZm9yX2Nvbm5lY3RvcihzdGF0ZS0+c3RhdGUsIGNvbm5lY3RvciwKPiA+ICsJCQkJCQkg ICBmZW5jZV9wdHIpOwo+ID4gKwl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19z ZXRfcHJvcGVydHkpIHsKPiA+ICsJCXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0 X3Byb3BlcnR5KGNvbm5lY3RvciwKPiA+ICsJCQkJc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ID4g Kwl9IGVsc2Ugewo+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5FQ1RPUjolZDolc10gdW5r bm93biBwcm9wZXJ0eSBbUFJPUDolZDolc11dXG4iLAo+ID4gKwkJCQkgY29ubmVjdG9yLT5iYXNl LmlkLCBjb25uZWN0b3ItPm5hbWUsCj4gPiArCQkJCSBwcm9wZXJ0eS0+YmFzZS5pZCwgcHJvcGVy dHktPm5hbWUpOwo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQKPiA+ICtkcm1fYXRvbWljX2Nvbm5l Y3Rvcl9nZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsJ CWNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKPiA+ICsJCXN0cnVjdCBk cm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiA+ICsKPiA+ICsJaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX2lkKSB7Cj4gPiArCQkqdmFsID0gKHN0YXRlLT5jcnRj KSA/IHN0YXRlLT5jcnRjLT5iYXNlLmlkIDogMDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPmRwbXNfcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBjb25uZWN0b3ItPmRwbXM7 Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVj dG9yX3Byb3BlcnR5KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnR2LnN1YmNvbm5lY3RvcjsKPiA+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5 KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMubGVmdDsKPiA+ICsJfSBlbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkgewo+ID4gKwkJ KnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLnJpZ2h0Owo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewo+ID4gKwkJKnZhbCA9IHN0YXRl LT50di5tYXJnaW5zLnRvcDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2 X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lu cy5ib3R0b207Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9tb2RlX3By b3BlcnR5KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnR2Lm1vZGU7Cj4gPiArCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7Cj4gPiArCQkqdmFs ID0gc3RhdGUtPnR2LmJyaWdodG5lc3M7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29u ZmlnLT50dl9jb250cmFzdF9wcm9wZXJ0eSkgewo+ID4gKwkJKnZhbCA9IHN0YXRlLT50di5jb250 cmFzdDsKPiA+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVk dWN0aW9uX3Byb3BlcnR5KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnR2LmZsaWNrZXJfcmVkdWN0 aW9uOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfb3ZlcnNjYW5fcHJv cGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+dHYub3ZlcnNjYW47Cj4gPiArCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zYXR1cmF0aW9uX3Byb3BlcnR5KSB7Cj4gPiArCQkq dmFsID0gc3RhdGUtPnR2LnNhdHVyYXRpb247Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9odWVfcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+dHYuaHVlOwo+ ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19zdGF0dXNfcHJvcGVydHkp IHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+bGlua19zdGF0dXM7Cj4gPiArCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5hc3BlY3RfcmF0aW9fcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBz dGF0ZS0+cGljdHVyZV9hc3BlY3RfcmF0aW87Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT5jb250ZW50X3R5cGVfcHJvcGVydHkpIHsKPiA+ICsJCSp2YWwgPSBzdGF0ZS0+Y29u dGVudF90eXBlOwo+ID4gKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+c2NhbGlu Z19tb2RlX3Byb3BlcnR5KSB7Cj4gPiArCQkqdmFsID0gc3RhdGUtPnNjYWxpbmdfbW9kZTsKPiA+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmNvbnRlbnRfcHJvdGVjdGlvbl9w cm9wZXJ0eSkgewo+ID4gKwkJKnZhbCA9IHN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb247Cj4gPiAr CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT53cml0ZWJhY2tfZmJfaWRfcHJvcGVydHkp IHsKPiA+ICsJCS8qIFdyaXRlYmFjayBmcmFtZWJ1ZmZlciBpcyBvbmUtc2hvdCwgd3JpdGUgYW5k IGZvcmdldCAqLwo+ID4gKwkJKnZhbCA9IDA7Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT53cml0ZWJhY2tfb3V0X2ZlbmNlX3B0cl9wcm9wZXJ0eSkgewo+ID4gKwkJKnZhbCA9 IDA7Cj4gPiArCX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0 eSkgewo+ID4gKwkJcmV0dXJuIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHko Y29ubmVjdG9yLAo+ID4gKwkJCQlzdGF0ZSwgcHJvcGVydHksIHZhbCk7Cj4gPiArCX0gZWxzZSB7 Cj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiAraW50IGRybV9hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fbW9k ZV9vYmplY3QgKm9iaiwKPiA+ICsJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50 NjRfdCAqdmFsKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByb3BlcnR5 LT5kZXY7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCXN3aXRjaCAob2JqLT50eXBlKSB7Cj4g PiArCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjogewo+ID4gKwkJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0b3Iob2JqKTsKPiA+ICsJCVdBUk5f T04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211 dGV4KSk7Cj4gPiArCQlyZXQgPSBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoY29u bmVjdG9yLAo+ID4gKwkJCQljb25uZWN0b3ItPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiA+ICsJ CWJyZWFrOwo+ID4gKwl9Cj4gPiArCWNhc2UgRFJNX01PREVfT0JKRUNUX0NSVEM6IHsKPiA+ICsJ CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9ial90b19jcnRjKG9iaik7Cj4gPiArCQlXQVJOX09O KCFkcm1fbW9kZXNldF9pc19sb2NrZWQoJmNydGMtPm11dGV4KSk7Cj4gPiArCQlyZXQgPSBkcm1f YXRvbWljX2NydGNfZ2V0X3Byb3BlcnR5KGNydGMsCj4gPiArCQkJCWNydGMtPnN0YXRlLCBwcm9w ZXJ0eSwgdmFsKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCWNhc2UgRFJNX01PREVfT0JK RUNUX1BMQU5FOiB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9ial90b19wbGFu ZShvYmopOwo+ID4gKwkJV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZwbGFuZS0+bXV0 ZXgpKTsKPiA+ICsJCXJldCA9IGRybV9hdG9taWNfcGxhbmVfZ2V0X3Byb3BlcnR5KHBsYW5lLAo+ ID4gKwkJCQlwbGFuZS0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ID4gKwkJYnJlYWs7Cj4gPiAr CX0KPiA+ICsJZGVmYXVsdDoKPiA+ICsJCXJldCA9IC1FSU5WQUw7Cj4gPiArCQlicmVhazsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAq IFRoZSBiaWcgbW9uc3RlciBpb2N0bAo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg ZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpjcmVhdGVfdmJsYW5rX2V2ZW50KAo+ID4gKwkJc3Ry dWN0IGRybV9jcnRjICpjcnRjLCB1aW50NjRfdCB1c2VyX2RhdGEpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplID0gTlVMTDsKPiA+ICsKPiA+ICsJZSA9IGt6 YWxsb2Moc2l6ZW9mICplLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFlKQo+ID4gKwkJcmV0dXJu IE5VTEw7Cj4gPiArCj4gPiArCWUtPmV2ZW50LmJhc2UudHlwZSA9IERSTV9FVkVOVF9GTElQX0NP TVBMRVRFOwo+ID4gKwllLT5ldmVudC5iYXNlLmxlbmd0aCA9IHNpemVvZihlLT5ldmVudCk7Cj4g PiArCWUtPmV2ZW50LnZibC5jcnRjX2lkID0gY3J0Yy0+YmFzZS5pZDsKPiA+ICsJZS0+ZXZlbnQu dmJsLnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKPiA+ICsKPiA+ICsJcmV0dXJuIGU7Cj4gPiArfQo+ ID4gKwo+ID4gK2ludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9jb21taXRfZHBtcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKPiA+ICsJCQkJICAgICBpbnQgbW9kZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBk cm1fY29ubmVjdG9yICp0bXBfY29ubmVjdG9yOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqbmV3X2Nvbm5fc3RhdGU7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICsJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gKwlpbnQgaSwgcmV0LCBvbGRf bW9kZSA9IGNvbm5lY3Rvci0+ZHBtczsKPiA+ICsJYm9vbCBhY3RpdmUgPSBmYWxzZTsKPiA+ICsK PiA+ICsJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+bW9kZV9jb25maWcuY29u bmVjdGlvbl9tdXRleCwKPiA+ICsJCQkgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCWlmIChtb2RlICE9IERSTV9N T0RFX0RQTVNfT04pCj4gPiArCQltb2RlID0gRFJNX01PREVfRFBNU19PRkY7Cj4gPiArCWNvbm5l Y3Rvci0+ZHBtcyA9IG1vZGU7Cj4gPiArCj4gPiArCWNydGMgPSBjb25uZWN0b3ItPnN0YXRlLT5j cnRjOwo+ID4gKwlpZiAoIWNydGMpCj4gPiArCQlnb3RvIG91dDsKPiA+ICsJcmV0ID0gZHJtX2F0 b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdGF0ZSwgY3J0Yyk7Cj4gPiArCWlmIChyZXQp Cj4gPiArCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4gKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7 Cj4gPiArCQlyZXQgPSBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgdG1w X2Nvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpIHsKPiA+ICsJCWlmIChuZXdfY29ubl9zdGF0 ZS0+Y3J0YyAhPSBjcnRjKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJaWYgKHRtcF9jb25uZWN0 b3ItPmRwbXMgPT0gRFJNX01PREVfRFBNU19PTikgewo+ID4gKwkJCWFjdGl2ZSA9IHRydWU7Cj4g PiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJY3J0Y19zdGF0ZS0+YWN0 aXZlID0gYWN0aXZlOwo+ID4gKwlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChzdGF0ZSk7Cj4gPiAr b3V0Ogo+ID4gKwlpZiAocmV0ICE9IDApCj4gPiArCQljb25uZWN0b3ItPmRwbXMgPSBvbGRfbW9k ZTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGRybV9hdG9taWNfc2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICsJCQkgICAgc3Ry dWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAo+ID4gKwkJCSAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICpwcm9wLAo+ID4gKwkJCSAgICB1aW50NjRfdCBwcm9wX3ZhbHVlKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9tb2RlX29iamVjdCAqcmVmOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAo IWRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfZ2V0KHByb3AsIHByb3BfdmFsdWUsICZyZWYpKQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCXN3aXRjaCAob2JqLT50eXBlKSB7Cj4g PiArCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjogewo+ID4gKwkJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0b3Iob2JqKTsKPiA+ICsJCXN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7Cj4gPiArCj4gPiArCQljb25u ZWN0b3Jfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5l Y3Rvcik7Cj4gPiArCQlpZiAoSVNfRVJSKGNvbm5lY3Rvcl9zdGF0ZSkpIHsKPiA+ICsJCQlyZXQg PSBQVFJfRVJSKGNvbm5lY3Rvcl9zdGF0ZSk7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiAr Cj4gPiArCQlyZXQgPSBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoY29ubmVjdG9y LAo+ID4gKwkJCQljb25uZWN0b3Jfc3RhdGUsIHByb3AsIHByb3BfdmFsdWUpOwo+ID4gKwkJYnJl YWs7Cj4gPiArCX0KPiA+ICsJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQzogewo+ID4gKwkJc3Ry dWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKPiA+ICsJCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICsKPiA+ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ICsJCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpIHsKPiA+ICsJCQlyZXQgPSBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ID4gKwkJCWJyZWFr Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmV0ID0gZHJtX2F0b21pY19jcnRjX3NldF9wcm9wZXJ0 eShjcnRjLAo+ID4gKwkJCQljcnRjX3N0YXRlLCBwcm9wLCBwcm9wX3ZhbHVlKTsKPiA+ICsJCWJy ZWFrOwo+ID4gKwl9Cj4gPiArCWNhc2UgRFJNX01PREVfT0JKRUNUX1BMQU5FOiB7Cj4gPiArCQlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9ial90b19wbGFuZShvYmopOwo+ID4gKwkJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gPiArCj4gPiArCQlwbGFuZV9zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7Cj4gPiArCQlpZiAoSVNf RVJSKHBsYW5lX3N0YXRlKSkgewo+ID4gKwkJCXJldCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOwo+ ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJcmV0ID0gZHJtX2F0b21pY19wbGFu ZV9zZXRfcHJvcGVydHkocGxhbmUsCj4gPiArCQkJCXBsYW5lX3N0YXRlLCBwcm9wLCBwcm9wX3Zh bHVlKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlyZXQgPSAt RUlOVkFMOwo+ID4gKwkJYnJlYWs7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZHJtX3Byb3BlcnR5X2No YW5nZV92YWxpZF9wdXQocHJvcCwgcmVmKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogRE9DOiBleHBsaWNpdCBmZW5jaW5nIHByb3BlcnRpZXMKPiA+ICsg Kgo+ID4gKyAqIEV4cGxpY2l0IGZlbmNpbmcgYWxsb3dzIHVzZXJzcGFjZSB0byBjb250cm9sIHRo ZSBidWZmZXIgc3luY2hyb25pemF0aW9uCj4gPiArICogYmV0d2VlbiBkZXZpY2VzLiBBIEZlbmNl IG9yIGEgZ3JvdXAgb2YgZmVuY2VzIGFyZSB0cmFuc2ZlcmVkIHRvL2Zyb20KPiA+ICsgKiB1c2Vy c3BhY2UgdXNpbmcgU3luYyBGaWxlIGZkcyBhbmQgdGhlcmUgYXJlIHR3byBEUk0gcHJvcGVydGll cyBmb3IgdGhhdC4KPiA+ICsgKiBJTl9GRU5DRV9GRCBvbiBlYWNoIERSTSBQbGFuZSB0byBzZW5k IGZlbmNlcyB0byB0aGUga2VybmVsIGFuZAo+ID4gKyAqIE9VVF9GRU5DRV9QVFIgb24gZWFjaCBE Uk0gQ1JUQyB0byByZWNlaXZlIGZlbmNlcyBmcm9tIHRoZSBrZXJuZWwuCj4gPiArICoKPiA+ICsg KiBBcyBhIGNvbnRyYXN0LCB3aXRoIGltcGxpY2l0IGZlbmNpbmcgdGhlIGtlcm5lbCBrZWVwcyB0 cmFjayBvZiBhbnkKPiA+ICsgKiBvbmdvaW5nIHJlbmRlcmluZywgYW5kIGF1dG9tYXRpY2FsbHkg ZW5zdXJlcyB0aGF0IHRoZSBhdG9taWMgdXBkYXRlIHdhaXRzCj4gPiArICogZm9yIGFueSBwZW5k aW5nIHJlbmRlcmluZyB0byBjb21wbGV0ZS4gRm9yIHNoYXJlZCBidWZmZXJzIHJlcHJlc2VudGVk IHdpdGgKPiA+ICsgKiBhICZzdHJ1Y3QgZG1hX2J1ZiB0aGlzIGlzIHRyYWNrZWQgaW4gJnN0cnVj dCByZXNlcnZhdGlvbl9vYmplY3QuCj4gPiArICogSW1wbGljaXQgc3luY2luZyBpcyBob3cgTGlu dXggdHJhZGl0aW9uYWxseSB3b3JrZWQgKGUuZy4gRFJJMi8zIG9uIFgub3JnKSwKPiA+ICsgKiB3 aGVyZWFzIGV4cGxpY2l0IGZlbmNpbmcgaXMgd2hhdCBBbmRyb2lkIHdhbnRzLgo+ID4gKyAqCj4g PiArICogIklOX0ZFTkNFX0ZE4oCdOgo+ID4gKyAqCVVzZSB0aGlzIHByb3BlcnR5IHRvIHBhc3Mg YSBmZW5jZSB0aGF0IERSTSBzaG91bGQgd2FpdCBvbiBiZWZvcmUKPiA+ICsgKglwcm9jZWVkaW5n IHdpdGggdGhlIEF0b21pYyBDb21taXQgcmVxdWVzdCBhbmQgc2hvdyB0aGUgZnJhbWVidWZmZXIg Zm9yCj4gPiArICoJdGhlIHBsYW5lIG9uIHRoZSBzY3JlZW4uIFRoZSBmZW5jZSBjYW4gYmUgZWl0 aGVyIGEgbm9ybWFsIGZlbmNlIG9yIGEKPiA+ICsgKgltZXJnZWQgb25lLCB0aGUgc3luY19maWxl IGZyYW1ld29yayB3aWxsIGhhbmRsZSBib3RoIGNhc2VzIGFuZCB1c2UgYQo+ID4gKyAqCWZlbmNl X2FycmF5IGlmIGEgbWVyZ2VkIGZlbmNlIGlzIHJlY2VpdmVkLiBQYXNzaW5nIC0xIGhlcmUgbWVh bnMgbm8KPiA+ICsgKglmZW5jZXMgdG8gd2FpdCBvbi4KPiA+ICsgKgo+ID4gKyAqCUlmIHRoZSBB dG9taWMgQ29tbWl0IHJlcXVlc3QgaGFzIHRoZSBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIGZs YWcKPiA+ICsgKglpdCB3aWxsIG9ubHkgY2hlY2sgaWYgdGhlIFN5bmMgRmlsZSBpcyBhIHZhbGlk IG9uZS4KPiA+ICsgKgo+ID4gKyAqCU9uIHRoZSBkcml2ZXIgc2lkZSB0aGUgZmVuY2UgaXMgc3Rv cmVkIG9uIHRoZSBAZmVuY2UgcGFyYW1ldGVyIG9mCj4gPiArICoJJnN0cnVjdCBkcm1fcGxhbmVf c3RhdGUuIERyaXZlcnMgd2hpY2ggYWxzbyBzdXBwb3J0IGltcGxpY2l0IGZlbmNpbmcKPiA+ICsg KglzaG91bGQgc2V0IHRoZSBpbXBsaWNpdCBmZW5jZSB1c2luZyBkcm1fYXRvbWljX3NldF9mZW5j ZV9mb3JfcGxhbmUoKSwKPiA+ICsgKgl0byBtYWtlIHN1cmUgdGhlcmUncyBjb25zaXN0ZW50IGJl aGF2aW91ciBiZXR3ZWVuIGRyaXZlcnMgaW4gcHJlY2VkZW5jZQo+ID4gKyAqCW9mIGltcGxpY2l0 IHZzLiBleHBsaWNpdCBmZW5jaW5nLgo+ID4gKyAqCj4gPiArICogIk9VVF9GRU5DRV9QVFLigJ06 Cj4gPiArICoJVXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBhIGZpbGUgZGVzY3JpcHRvciBwb2lu dGVyIHRvIERSTS4gT25jZSB0aGUKPiA+ICsgKglBdG9taWMgQ29tbWl0IHJlcXVlc3QgY2FsbCBy ZXR1cm5zIE9VVF9GRU5DRV9QVFIgd2lsbCBiZSBmaWxsZWQgd2l0aAo+ID4gKyAqCXRoZSBmaWxl IGRlc2NyaXB0b3IgbnVtYmVyIG9mIGEgU3luYyBGaWxlLiBUaGlzIFN5bmMgRmlsZSBjb250YWlu cyB0aGUKPiA+ICsgKglDUlRDIGZlbmNlIHRoYXQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIGFsbCBm cmFtZWJ1ZmZlcnMgcHJlc2VudCBvbiB0aGUKPiA+ICsgKglBdG9taWMgQ29tbWl0ICogcmVxdWVz dCBmb3IgdGhhdCBnaXZlbiBDUlRDIGFyZSBzY2FubmVkIG91dCBvbiB0aGUKPiA+ICsgKglzY3Jl ZW4uCj4gPiArICoKPiA+ICsgKglUaGUgQXRvbWljIENvbW1pdCByZXF1ZXN0IGZhaWxzIGlmIGEg aW52YWxpZCBwb2ludGVyIGlzIHBhc3NlZC4gSWYgdGhlCj4gPiArICoJQXRvbWljIENvbW1pdCBy ZXF1ZXN0IGZhaWxzIGZvciBhbnkgb3RoZXIgcmVhc29uIHRoZSBvdXQgZmVuY2UgZmQKPiA+ICsg KglyZXR1cm5lZCB3aWxsIGJlIC0xLiBPbiBhIEF0b21pYyBDb21taXQgd2l0aCB0aGUKPiA+ICsg KglEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIGZsYWcgdGhlIG91dCBmZW5jZSB3aWxsIGFsc28g YmUgc2V0IHRvIC0xLgo+ID4gKyAqCj4gPiArICoJTm90ZSB0aGF0IG91dC1mZW5jZXMgZG9uJ3Qg aGF2ZSBhIHNwZWNpYWwgaW50ZXJmYWNlIHRvIGRyaXZlcnMgYW5kIGFyZQo+ID4gKyAqCWludGVy bmFsbHkgcmVwcmVzZW50ZWQgYnkgYSAmc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCBp biBzdHJ1Y3QKPiA+ICsgKgkmZHJtX2NydGNfc3RhdGUsIHdoaWNoIGlzIGFsc28gdXNlZCBieSB0 aGUgbm9uYmxvY2tpbmcgYXRvbWljIGNvbW1pdAo+ID4gKyAqCWhlbHBlcnMgYW5kIGZvciB0aGUg RFJNIGV2ZW50IGhhbmRsaW5nIGZvciBleGlzdGluZyB1c2Vyc3BhY2UuCj4gPiArICovCj4gPiAr Cj4gPiArc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgewo+ID4gKwlzMzIgX191c2VyICpvdXRf ZmVuY2VfcHRyOwo+ID4gKwlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Cj4gPiArCWludCBm ZDsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc2V0dXBfb3V0X2ZlbmNlKHN0cnVjdCBk cm1fb3V0X2ZlbmNlX3N0YXRlICpmZW5jZV9zdGF0ZSwKPiA+ICsJCQkgICBzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSkKPiA+ICt7Cj4gPiArCWZlbmNlX3N0YXRlLT5mZCA9IGdldF91bnVzZWRfZmRf ZmxhZ3MoT19DTE9FWEVDKTsKPiA+ICsJaWYgKGZlbmNlX3N0YXRlLT5mZCA8IDApCj4gPiArCQly ZXR1cm4gZmVuY2Vfc3RhdGUtPmZkOwo+ID4gKwo+ID4gKwlpZiAocHV0X3VzZXIoZmVuY2Vfc3Rh dGUtPmZkLCBmZW5jZV9zdGF0ZS0+b3V0X2ZlbmNlX3B0cikpCj4gPiArCQlyZXR1cm4gLUVGQVVM VDsKPiA+ICsKPiA+ICsJZmVuY2Vfc3RhdGUtPnN5bmNfZmlsZSA9IHN5bmNfZmlsZV9jcmVhdGUo ZmVuY2UpOwo+ID4gKwlpZiAoIWZlbmNlX3N0YXRlLT5zeW5jX2ZpbGUpCj4gPiArCQlyZXR1cm4g LUVOT01FTTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgcHJlcGFyZV9zaWduYWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICsJCQkJICBz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJCSAgc3RydWN0IGRybV9tb2Rl X2F0b21pYyAqYXJnLAo+ID4gKwkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+ID4g KwkJCQkgIHN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICoqZmVuY2Vfc3RhdGUsCj4gPiArCQkJ CSAgdW5zaWduZWQgaW50ICpudW1fZmVuY2VzKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiArCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubl9zdGF0ZTsKPiA+ICsJaW50IGksIGMgPSAwLCByZXQ7Cj4gPiArCj4gPiArCWlmIChh cmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkKPiA+ICsJCXJldHVybiAwOwo+ ID4gKwo+ID4gKwlmb3JfZWFjaF9uZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19z dGF0ZSwgaSkgewo+ID4gKwkJczMyIF9fdXNlciAqZmVuY2VfcHRyOwo+ID4gKwo+ID4gKwkJZmVu Y2VfcHRyID0gZ2V0X291dF9mZW5jZV9mb3JfY3J0YyhjcnRjX3N0YXRlLT5zdGF0ZSwgY3J0Yyk7 Cj4gPiArCj4gPiArCQlpZiAoYXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB8 fCBmZW5jZV9wdHIpIHsKPiA+ICsJCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpl Owo+ID4gKwo+ID4gKwkJCWUgPSBjcmVhdGVfdmJsYW5rX2V2ZW50KGNydGMsIGFyZy0+dXNlcl9k YXRhKTsKPiA+ICsJCQlpZiAoIWUpCj4gPiArCQkJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4g KwkJCWNydGNfc3RhdGUtPmV2ZW50ID0gZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmIChhcmct PmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UKSB7Cj4gPiArCQkJc3RydWN0IGRybV9w ZW5kaW5nX3ZibGFua19ldmVudCAqZSA9IGNydGNfc3RhdGUtPmV2ZW50Owo+ID4gKwo+ID4gKwkJ CWlmICghZmlsZV9wcml2KQo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCQlyZXQgPSBk cm1fZXZlbnRfcmVzZXJ2ZV9pbml0KGRldiwgZmlsZV9wcml2LCAmZS0+YmFzZSwKPiA+ICsJCQkJ CQkgICAgICZlLT5ldmVudC5iYXNlKTsKPiA+ICsJCQlpZiAocmV0KSB7Cj4gPiArCQkJCWtmcmVl KGUpOwo+ID4gKwkJCQljcnRjX3N0YXRlLT5ldmVudCA9IE5VTEw7Cj4gPiArCQkJCXJldHVybiBy ZXQ7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKGZlbmNlX3B0cikgewo+ID4g KwkJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+ID4gKwkJCXN0cnVjdCBkcm1fb3V0X2ZlbmNl X3N0YXRlICpmOwo+ID4gKwo+ID4gKwkJCWYgPSBrcmVhbGxvYygqZmVuY2Vfc3RhdGUsIHNpemVv ZigqKmZlbmNlX3N0YXRlKSAqCj4gPiArCQkJCSAgICAgKCpudW1fZmVuY2VzICsgMSksIEdGUF9L RVJORUwpOwo+ID4gKwkJCWlmICghZikKPiA+ICsJCQkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4g PiArCQkJbWVtc2V0KCZmWypudW1fZmVuY2VzXSwgMCwgc2l6ZW9mKCpmKSk7Cj4gPiArCj4gPiAr CQkJZlsqbnVtX2ZlbmNlc10ub3V0X2ZlbmNlX3B0ciA9IGZlbmNlX3B0cjsKPiA+ICsJCQkqZmVu Y2Vfc3RhdGUgPSBmOwo+ID4gKwo+ID4gKwkJCWZlbmNlID0gZHJtX2NydGNfY3JlYXRlX2ZlbmNl KGNydGMpOwo+ID4gKwkJCWlmICghZmVuY2UpCj4gPiArCQkJCXJldHVybiAtRU5PTUVNOwo+ID4g Kwo+ID4gKwkJCXJldCA9IHNldHVwX291dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5j ZSk7Cj4gPiArCQkJaWYgKHJldCkgewo+ID4gKwkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPiA+ ICsJCQkJcmV0dXJuIHJldDsKPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJY3J0Y19zdGF0ZS0+ZXZl bnQtPmJhc2UuZmVuY2UgPSBmZW5jZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWMrKzsKPiA+ICsJ fQo+ID4gKwo+ID4gKwlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25u LCBjb25uX3N0YXRlLCBpKSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3Ig KndiX2Nvbm47Cj4gPiArCQlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYjsKPiA+ICsJCXN0 cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmOwo+ID4gKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVu Y2U7Cj4gPiArCQlzMzIgX191c2VyICpmZW5jZV9wdHI7Cj4gPiArCj4gPiArCQlmZW5jZV9wdHIg PSBnZXRfb3V0X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3RhdGUsIGNvbm4pOwo+ID4gKwkJaWYgKCFm ZW5jZV9wdHIpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlqb2IgPSBkcm1fYXRvbWlj X2dldF93cml0ZWJhY2tfam9iKGNvbm5fc3RhdGUpOwo+ID4gKwkJaWYgKCFqb2IpCj4gPiArCQkJ cmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCQlmID0ga3JlYWxsb2MoKmZlbmNlX3N0YXRlLCBz aXplb2YoKipmZW5jZV9zdGF0ZSkgKgo+ID4gKwkJCSAgICAgKCpudW1fZmVuY2VzICsgMSksIEdG UF9LRVJORUwpOwo+ID4gKwkJaWYgKCFmKQo+ID4gKwkJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ ID4gKwkJbWVtc2V0KCZmWypudW1fZmVuY2VzXSwgMCwgc2l6ZW9mKCpmKSk7Cj4gPiArCj4gPiAr CQlmWypudW1fZmVuY2VzXS5vdXRfZmVuY2VfcHRyID0gZmVuY2VfcHRyOwo+ID4gKwkJKmZlbmNl X3N0YXRlID0gZjsKPiA+ICsKPiA+ICsJCXdiX2Nvbm4gPSBkcm1fY29ubmVjdG9yX3RvX3dyaXRl YmFjayhjb25uKTsKPiA+ICsJCWZlbmNlID0gZHJtX3dyaXRlYmFja19nZXRfb3V0X2ZlbmNlKHdi X2Nvbm4pOwo+ID4gKwkJaWYgKCFmZW5jZSkKPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsK PiA+ICsJCXJldCA9IHNldHVwX291dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5jZSk7 Cj4gPiArCQlpZiAocmV0KSB7Cj4gPiArCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gPiArCQkJ cmV0dXJuIHJldDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWpvYi0+b3V0X2ZlbmNlID0gZmVuY2U7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogSGF2aW5nIHRoaXMgZmxhZyBtZWFucyB1 c2VyIG1vZGUgcGVuZHMgb24gZXZlbnQgd2hpY2ggd2lsbCBuZXZlcgo+ID4gKwkgKiByZWFjaCBk dWUgdG8gbGFjayBvZiBhdCBsZWFzdCBvbmUgQ1JUQyBmb3Igc2lnbmFsaW5nCj4gPiArCSAqLwo+ ID4gKwlpZiAoYyA9PSAwICYmIChhcmctPmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5U KSkKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgY29tcGxldGVfc2lnbmFsaW5nKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gPiArCQkJICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ ICsJCQkgICAgICAgc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0YXRlLAo+ID4g KwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2ZlbmNlcywKPiA+ICsJCQkgICAgICAgYm9vbCBp bnN0YWxsX2ZkcykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ICsJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJ aWYgKGluc3RhbGxfZmRzKSB7Cj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNlczsgaSsr KQo+ID4gKwkJCWZkX2luc3RhbGwoZmVuY2Vfc3RhdGVbaV0uZmQsCj4gPiArCQkJCSAgIGZlbmNl X3N0YXRlW2ldLnN5bmNfZmlsZS0+ZmlsZSk7Cj4gPiArCj4gPiArCQlrZnJlZShmZW5jZV9zdGF0 ZSk7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yX2VhY2hfbmV3X2NydGNf aW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsKPiA+ICsJCXN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Y19zdGF0ZS0+ZXZlbnQ7Cj4gPiArCQkv Kgo+ID4gKwkJICogRnJlZSB0aGUgYWxsb2NhdGVkIGV2ZW50LiBkcm1fYXRvbWljX2hlbHBlcl9z ZXR1cF9jb21taXQKPiA+ICsJCSAqIGNhbiBhbGxvY2F0ZSBhbiBldmVudCB0b28sIHNvIG9ubHkg ZnJlZSBpdCBpZiBpdCdzIG91cnMKPiA+ICsJCSAqIHRvIHByZXZlbnQgYSBkb3VibGUgZnJlZSBp biBkcm1fYXRvbWljX3N0YXRlX2NsZWFyLgo+ID4gKwkJICovCj4gPiArCQlpZiAoZXZlbnQgJiYg KGV2ZW50LT5iYXNlLmZlbmNlIHx8IGV2ZW50LT5iYXNlLmZpbGVfcHJpdikpIHsKPiA+ICsJCQlk cm1fZXZlbnRfY2FuY2VsX2ZyZWUoZGV2LCAmZXZlbnQtPmJhc2UpOwo+ID4gKwkJCWNydGNfc3Rh dGUtPmV2ZW50ID0gTlVMTDsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoIWZlbmNl X3N0YXRlKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Zl bmNlczsgaSsrKSB7Cj4gPiArCQlpZiAoZmVuY2Vfc3RhdGVbaV0uc3luY19maWxlKQo+ID4gKwkJ CWZwdXQoZmVuY2Vfc3RhdGVbaV0uc3luY19maWxlLT5maWxlKTsKPiA+ICsJCWlmIChmZW5jZV9z dGF0ZVtpXS5mZCA+PSAwKQo+ID4gKwkJCXB1dF91bnVzZWRfZmQoZmVuY2Vfc3RhdGVbaV0uZmQp Owo+ID4gKwo+ID4gKwkJLyogSWYgdGhpcyBmYWlscyBsb2cgZXJyb3IgdG8gdGhlIHVzZXIgKi8K PiA+ICsJCWlmIChmZW5jZV9zdGF0ZVtpXS5vdXRfZmVuY2VfcHRyICYmCj4gPiArCQkgICAgcHV0 X3VzZXIoLTEsIGZlbmNlX3N0YXRlW2ldLm91dF9mZW5jZV9wdHIpKQo+ID4gKwkJCURSTV9ERUJV R19BVE9NSUMoIkNvdWxkbid0IGNsZWFyIG91dF9mZW5jZV9wdHJcbiIpOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWtmcmVlKGZlbmNlX3N0YXRlKTsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGRybV9tb2Rl X2F0b21pY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKwkJCSAgdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX21v ZGVfYXRvbWljICphcmcgPSBkYXRhOwo+ID4gKwl1aW50MzJfdCBfX3VzZXIgKm9ianNfcHRyID0g KHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPm9ianNfcHRyKTsKPiA+ICsJ dWludDMyX3QgX191c2VyICpjb3VudF9wcm9wc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVu c2lnbmVkIGxvbmcpKGFyZy0+Y291bnRfcHJvcHNfcHRyKTsKPiA+ICsJdWludDMyX3QgX191c2Vy ICpwcm9wc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+cHJv cHNfcHRyKTsKPiA+ICsJdWludDY0X3QgX191c2VyICpwcm9wX3ZhbHVlc19wdHIgPSAodWludDY0 X3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+cHJvcF92YWx1ZXNfcHRyKTsKPiA+ICsJ dW5zaWduZWQgaW50IGNvcGllZF9vYmpzLCBjb3BpZWRfcHJvcHM7Cj4gPiArCXN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+ICsJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4 IGN0eDsKPiA+ICsJc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0YXRlOwo+ID4g KwlpbnQgcmV0ID0gMDsKPiA+ICsJdW5zaWduZWQgaW50IGksIGosIG51bV9mZW5jZXM7Cj4gPiAr Cj4gPiArCS8qIGRpc2FsbG93IGZvciBkcml2ZXJzIG5vdCBzdXBwb3J0aW5nIGF0b21pYzogKi8K PiA+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0FUT01JQykpCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJLyogZGlzYWxsb3cgZm9yIHVzZXJzcGFj ZSB0aGF0IGhhcyBub3QgZW5hYmxlZCBhdG9taWMgY2FwIChldmVuCj4gPiArCSAqIHRob3VnaCB0 aGlzIG1heSBiZSBhIGJpdCBvdmVya2lsbCwgc2luY2UgbGVnYWN5IHVzZXJzcGFjZQo+ID4gKwkg KiB3b3VsZG4ndCBrbm93IGhvdyB0byBjYWxsIHRoaXMgaW9jdGwpCj4gPiArCSAqLwo+ID4gKwlp ZiAoIWZpbGVfcHJpdi0+YXRvbWljKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiAr CWlmIChhcmctPmZsYWdzICYgfkRSTV9NT0RFX0FUT01JQ19GTEFHUykKPiA+ICsJCXJldHVybiAt RUlOVkFMOwo+ID4gKwo+ID4gKwlpZiAoYXJnLT5yZXNlcnZlZCkKPiA+ICsJCXJldHVybiAtRUlO VkFMOwo+ID4gKwo+ID4gKwlpZiAoKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZ TkMpICYmCj4gPiArCQkJIWRldi0+bW9kZV9jb25maWcuYXN5bmNfcGFnZV9mbGlwKQo+ID4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCS8qIGNhbid0IHRlc3QgYW5kIGV4cGVjdCBhbiBl dmVudCBhdCB0aGUgc2FtZSB0aW1lLiAqLwo+ID4gKwlpZiAoKGFyZy0+ZmxhZ3MgJiBEUk1fTU9E RV9BVE9NSUNfVEVTVF9PTkxZKSAmJgo+ID4gKwkJCShhcmctPmZsYWdzICYgRFJNX01PREVfUEFH RV9GTElQX0VWRU5UKSkKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlkcm1fbW9k ZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgRFJNX01PREVTRVRfQUNRVUlSRV9JTlRFUlJVUFRJQkxF KTsKPiA+ICsKPiA+ICsJc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Cj4gPiAr CWlmICghc3RhdGUpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsJc3RhdGUtPmFj cXVpcmVfY3R4ID0gJmN0eDsKPiA+ICsJc3RhdGUtPmFsbG93X21vZGVzZXQgPSAhIShhcmctPmZs YWdzICYgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQpOwo+ID4gKwo+ID4gK3JldHJ5Ogo+ ID4gKwljb3BpZWRfb2JqcyA9IDA7Cj4gPiArCWNvcGllZF9wcm9wcyA9IDA7Cj4gPiArCWZlbmNl X3N0YXRlID0gTlVMTDsKPiA+ICsJbnVtX2ZlbmNlcyA9IDA7Cj4gPiArCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBhcmctPmNvdW50X29ianM7IGkrKykgewo+ID4gKwkJdWludDMyX3Qgb2JqX2lkLCBj b3VudF9wcm9wczsKPiA+ICsJCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKPiA+ICsKPiA+ ICsJCWlmIChnZXRfdXNlcihvYmpfaWQsIG9ianNfcHRyICsgY29waWVkX29ianMpKSB7Cj4gPiAr CQkJcmV0ID0gLUVGQVVMVDsKPiA+ICsJCQlnb3RvIG91dDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJ CW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgZmlsZV9wcml2LCBvYmpfaWQsIERSTV9N T0RFX09CSkVDVF9BTlkpOwo+ID4gKwkJaWYgKCFvYmopIHsKPiA+ICsJCQlyZXQgPSAtRU5PRU5U Owo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKCFvYmotPnByb3Bl cnRpZXMpIHsKPiA+ICsJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Cj4gPiArCQkJcmV0ID0g LUVOT0VOVDsKPiA+ICsJCQlnb3RvIG91dDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmIChnZXRf dXNlcihjb3VudF9wcm9wcywgY291bnRfcHJvcHNfcHRyICsgY29waWVkX29ianMpKSB7Cj4gPiAr CQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwo+ID4gKwkJCXJldCA9IC1FRkFVTFQ7Cj4gPiAr CQkJZ290byBvdXQ7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQljb3BpZWRfb2JqcysrOwo+ID4gKwo+ ID4gKwkJZm9yIChqID0gMDsgaiA8IGNvdW50X3Byb3BzOyBqKyspIHsKPiA+ICsJCQl1aW50MzJf dCBwcm9wX2lkOwo+ID4gKwkJCXVpbnQ2NF90IHByb3BfdmFsdWU7Cj4gPiArCQkJc3RydWN0IGRy bV9wcm9wZXJ0eSAqcHJvcDsKPiA+ICsKPiA+ICsJCQlpZiAoZ2V0X3VzZXIocHJvcF9pZCwgcHJv cHNfcHRyICsgY29waWVkX3Byb3BzKSkgewo+ID4gKwkJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9i aik7Cj4gPiArCQkJCXJldCA9IC1FRkFVTFQ7Cj4gPiArCQkJCWdvdG8gb3V0Owo+ID4gKwkJCX0K PiA+ICsKPiA+ICsJCQlwcm9wID0gZHJtX21vZGVfb2JqX2ZpbmRfcHJvcF9pZChvYmosIHByb3Bf aWQpOwo+ID4gKwkJCWlmICghcHJvcCkgewo+ID4gKwkJCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9i aik7Cj4gPiArCQkJCXJldCA9IC1FTk9FTlQ7Cj4gPiArCQkJCWdvdG8gb3V0Owo+ID4gKwkJCX0K PiA+ICsKPiA+ICsJCQlpZiAoY29weV9mcm9tX3VzZXIoJnByb3BfdmFsdWUsCj4gPiArCQkJCQkg ICBwcm9wX3ZhbHVlc19wdHIgKyBjb3BpZWRfcHJvcHMsCj4gPiArCQkJCQkgICBzaXplb2YocHJv cF92YWx1ZSkpKSB7Cj4gPiArCQkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKPiA+ICsJCQkJ cmV0ID0gLUVGQVVMVDsKPiA+ICsJCQkJZ290byBvdXQ7Cj4gPiArCQkJfQo+ID4gKwo+ID4gKwkJ CXJldCA9IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0YXRlLCBvYmosIHByb3AsCj4gPiArCQkJ CQkJICAgICAgcHJvcF92YWx1ZSk7Cj4gPiArCQkJaWYgKHJldCkgewo+ID4gKwkJCQlkcm1fbW9k ZV9vYmplY3RfcHV0KG9iaik7Cj4gPiArCQkJCWdvdG8gb3V0Owo+ID4gKwkJCX0KPiA+ICsKPiA+ ICsJCQljb3BpZWRfcHJvcHMrKzsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRybV9tb2RlX29iamVj dF9wdXQob2JqKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBwcmVwYXJlX3NpZ25hbGluZyhk ZXYsIHN0YXRlLCBhcmcsIGZpbGVfcHJpdiwgJmZlbmNlX3N0YXRlLAo+ID4gKwkJCQkmbnVtX2Zl bmNlcyk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIG91dDsKPiA+ICsKPiA+ICsJaWYgKGFy Zy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKSB7Cj4gPiArCQlyZXQgPSBkcm1f YXRvbWljX2NoZWNrX29ubHkoc3RhdGUpOwo+ID4gKwl9IGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBE Uk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0spIHsKPiA+ICsJCXJldCA9IGRybV9hdG9taWNfbm9uYmxv Y2tpbmdfY29tbWl0KHN0YXRlKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCWlmICh1bmxpa2VseShk cm1fZGVidWcgJiBEUk1fVVRfU1RBVEUpKQo+ID4gKwkJCWRybV9hdG9taWNfcHJpbnRfc3RhdGUo c3RhdGUpOwo+ID4gKwo+ID4gKwkJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ID4g Kwl9Cj4gPiArCj4gPiArb3V0Ogo+ID4gKwljb21wbGV0ZV9zaWduYWxpbmcoZGV2LCBzdGF0ZSwg ZmVuY2Vfc3RhdGUsIG51bV9mZW5jZXMsICFyZXQpOwo+ID4gKwo+ID4gKwlpZiAocmV0ID09IC1F REVBRExLKSB7Cj4gPiArCQlkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKPiA+ICsJCXJl dCA9IGRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Cj4gPiArCQlpZiAoIXJldCkKPiA+ICsJCQln b3RvIHJldHJ5Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRl KTsKPiA+ICsKPiA+ICsJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPiA+ICsJZHJtX21v ZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKPiA+IGluZGV4IDVhODRjM2JjOTE1ZC4uY2U3 NWU5NTA2ZTg1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBl ci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKPiA+IEBAIC0z NSw2ICszNSw3IEBACj4gPiAgCj4gPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiAgI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGku aD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1f ZW5jb2Rlci5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19pbnRlcm5hbC5oIGIvZHJpdmVycy9ncHUvZHJt L2RybV9jcnRjX2ludGVybmFsLmgKPiA+IGluZGV4IGZmNWUwZDUyMWMyMS4uZWRlMjBiNTVkNTBj IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKPiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19pbnRlcm5hbC5oCj4gPiBAQCAtMjA0LDYg KzIwNCw5IEBAIHN0cnVjdCBkcm1fbWlub3I7Cj4gPiAgaW50IGRybV9hdG9taWNfZGVidWdmc19p bml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiA+ICAjZW5kaWYKPiA+ICAKPiA+ICt2b2lk IGRybV9hdG9taWNfcHJpbnRfc3RhdGUoY29uc3Qgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKTsKPiA+ICsKPiA+ICsvKiBkcm1fYXRvbWljX3VhcGkuYyAqLwo+ID4gIGludCBkcm1fYXRv bWljX2Nvbm5lY3Rvcl9jb21taXRfZHBtcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gPiAgCQkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJCQkJ ICAgICBpbnQgbW9kZSk7Cj4gPiBAQCAtMjEzLDYgKzIxNiw4IEBAIGludCBkcm1fYXRvbWljX3Nl dF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCQkJICAgIHVp bnQ2NF90IHByb3BfdmFsdWUpOwo+ID4gIGludCBkcm1fYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gPiAgCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkg KnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKTsKPiA+ICsKPiA+ICsvKiBJT0NUTCAqLwo+ID4gIGlu dCBkcm1fbW9kZV9hdG9taWNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAJCQkg IHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiA+ICAKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2ZyYW1lYnVmZmVyLmMKPiA+IGluZGV4IDc4MWFmMWQ0MmQ3Ni4uN2NhOGM3NzIyM2Ni IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKPiA+IEBAIC0yNSw2ICsyNSw3 IEBACj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fYXV0aC5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJt X2ZyYW1lYnVmZmVyLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9wcmlu dC5oPgo+ID4gIAo+ID4gICNpbmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5jCj4gPiBpbmRleCAyODEwZDQxMzE0 MTEuLjc2MDdmOWNkNmY3NyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt X2ZyYW1lYnVmZmVyX2hlbHBlci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9m cmFtZWJ1ZmZlcl9oZWxwZXIuYwo+ID4gQEAgLTE2LDYgKzE2LDcgQEAKPiA+ICAKPiA+ICAjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2Zi X2hlbHBlci5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ID4gICNpbmNsdWRl IDxkcm0vZHJtX2ZyYW1lYnVmZmVyLmg+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9wbGFuZV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmVfaGVscGVyLmMK PiA+IGluZGV4IDYyMWYxNzY0M2JiMC4uYTM5Mzc1NmI2NjRlIDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2RybV9wbGFuZV9oZWxwZXIuYwo+ID4gQEAgLTI4LDYgKzI4LDcgQEAKPiA+ICAjaW5jbHVkZSA8 ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9yZWN0Lmg+Cj4g PiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX3VhcGkuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ID4gICNp bmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf aGVscGVyLmg+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBh ODVhODNmMzE5NzkuLjg1Y2FkMTZmMzFlZCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gPiBAQCAtNDYsNiArNDYsNyBAQAo+ID4gICNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4g PiAgI2luY2x1ZGUgPGRybS9kcm1fcmVjdC5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y191YXBpLmg+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2RtYV9yZW1hcHBpbmcuaD4KPiA+ICAjaW5j bHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21p Yy5jCj4gPiBpbmRleCBjMWYxNzc5Yzk4MGYuLjRiY2RlY2E3NDc5ZCAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9hdG9taWMuYwo+ID4gQEAgLTE1LDYgKzE1LDggQEAKPiA+ICAgKiB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gPiAg ICovCj4gPiAgCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiA+ICsKPiA+ ICAjaW5jbHVkZSAibXNtX2Rydi5oIgo+ID4gICNpbmNsdWRlICJtc21fZ2VtLmgiCj4gPiAgI2lu Y2x1ZGUgIm1zbV9rbXMuaCIKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiA+IGluZGV4IDBlNmEx MjE4NThkMS4uM2NlMTM2YmE4NzkxIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zj NC92YzRfY3J0Yy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiA+ IEBAIC0zNSw2ICszNSw3IEBACj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gPiAg I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiA+ ICAjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hl bHBlci5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcGxhbmUuYwo+ID4gaW5kZXggNmM2ZDM3YWE1MTJhLi45ZGMzZmNiZDI5MGIgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCj4gPiBAQCAtMjIsNiArMjIsNyBAQAo+ID4gICNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9mYl9j bWFfaGVscGVyLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4gPiAr I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KPiA+ICAKPiA+ICAjaW5jbHVkZSAidWFw aS9kcm0vdmM0X2RybS5oIgo+ID4gICNpbmNsdWRlICJ2YzRfZHJ2LmgiCj4gPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4g PiBpbmRleCA2NmU0OWVmN2QzYjUuLjRhZmY0MDg4NmFjYiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1 ZGUvZHJtL2RybV9hdG9taWMuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4g PiBAQCAtNTg0LDIyICs1ODQsNiBAQCBfX2RybV9hdG9taWNfZ2V0X2N1cnJlbnRfcGxhbmVfc3Rh dGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAlyZXR1cm4gcGxhbmUtPnN0 YXRlOwo+ID4gIH0KPiA+ICAKPiA+IC1pbnQgX19tdXN0X2NoZWNrCj4gPiAtZHJtX2F0b21pY19z ZXRfbW9kZV9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAo+ID4gLQkJCSAg ICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwo+ID4gLWludCBfX211c3Rf Y2hlY2sKPiA+IC1kcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9yX2NydGMoc3RydWN0IGRybV9j cnRjX3N0YXRlICpzdGF0ZSwKPiA+IC0JCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJs b2IpOwo+ID4gLWludCBfX211c3RfY2hlY2sKPiA+IC1kcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9w bGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiA+IC0JCQkgICAgICBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4gLXZvaWQgZHJtX2F0b21pY19zZXRfZmJfZm9yX3Bs YW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gLQkJCQkgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIpOwo+ID4gLXZvaWQgZHJtX2F0b21pY19zZXRfZmVuY2VfZm9y X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gLQkJCQkgICAg c3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOwo+ID4gLWludCBfX211c3RfY2hlY2sKPiA+IC1kcm1f YXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KmNvbm5fc3RhdGUsCj4gPiAtCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiA+ICBpbnQg X19tdXN0X2NoZWNrCj4gPiAgZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiAgCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pY191YXBpLmggYi9p bmNsdWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uOGNlYzUyYWQxMjc3Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiAr KysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaAo+ID4gQEAgLTAsMCArMSw1OCBAQAo+ ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQKPiA+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggSW50ZWwg Q29ycC4KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiArICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4g PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCj4gPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUgo+ID4gKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ID4gKyAqIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4g KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIEF1dGhv cnM6Cj4gPiArICogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+ID4gKyAqIERhbmll bCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiArICovCj4gPiArCj4gPiArI2lm bmRlZiBEUk1fQVRPTUlDX1VBUElfSF8KPiA+ICsjZGVmaW5lIERSTV9BVE9NSUNfVUFQSV9IXwo+ ID4gKwo+ID4gK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKPiA+ICtzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZTsKPiA+ICtzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2I7Cj4gPiArc3RydWN0IGRybV9wbGFu ZV9zdGF0ZTsKPiA+ICtzdHJ1Y3QgZHJtX2NydGM7Cj4gPiArc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGU7Cj4gPiArc3RydWN0IGRtYV9mZW5jZTsKPiA+ICtzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy Owo+ID4gKwo+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ICtkcm1fYXRvbWljX3NldF9tb2RlX2Zv cl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCj4gPiArCQkJICAgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cj4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4g K2RybV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlLAo+ID4gKwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYik7Cj4gPiAr aW50IF9fbXVzdF9jaGVjawo+ID4gK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gKwkJCSAgICAgIHN0cnVjdCBkcm1f Y3J0YyAqY3J0Yyk7Cj4gPiArdm9pZCBkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gPiArCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYik7Cj4gPiArdm9pZCBkcm1fYXRvbWljX3NldF9mZW5jZV9mb3JfcGxhbmUoc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCj4gPiArCQkJCSAgICBzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZSk7Cj4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4gK2RybV9hdG9taWNfc2V0 X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0 ZSwKPiA+ICsJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4gKwo+ID4gKyNlbmRpZgo+ ID4gLS0gCj4gPiAyLjE4LjAKPiA+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=