From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH 3/9] drm: Extract drm_mode_object.[hc] Date: Thu, 25 Aug 2016 17:55:18 +0530 Message-ID: <57BEE3AE.1090703@codeaurora.org> References: <1471467366-26444-1-git-send-email-daniel.vetter@ffwll.ch> <1471467366-26444-3-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471467366-26444-3-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , DRI Development Cc: Daniel Vetter , Intel Graphics Development List-Id: intel-gfx@lists.freedesktop.org CgpPbiAwOC8xOC8yMDE2IDAyOjI2IEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+IEp1c3QgZm9y IHRoZSBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0IGJhc2UgY2xhc3MuIFRoZSBoZWFkZXIgZmlsZSB3 YXMKPiBhbHJlYWR5IHBhcnRpYWxseSBleHRyYWN0ZWQgdG8gaGVscCB1bnRhbmdsZSB0aGUgaW5j bHVkZSBsb29wcy4KPgo+IHYyOgo+IC0gQWxzbyBtb3ZlIHRoZSBnZW5lcmljIGdldC9zZXQgcHJv cGVydHkgaW9jdGxzLiBBdCBmaXJzdCB0aGlzIHNlZW1lZAo+ICAgIGxpa2UgYSBiYWQgaWRlYSBz aW5jZSBpdCByZXF1aXJlcyBtYWtpbmcgZHJtX21vZGVfY3J0Y19zZXRfb2JqX3Byb3AKPiAgICBu b24tc3RhdGljLiBCdXQgZXZlbnR1YWxseSB0aGF0IHdpbGwgZ2V0IHNwbGl0IGF3YXkgdG9vIChs aWtlCj4gICAgdGhlIGNvbm5lY3RvciB2ZXJzaW9uIGFscmVhZHkgaXMpIGZvciBib3RoIGNydGMg YW5kIHBsYW5lcy4gSGVuY2UgSQo+ICAgIHJlY29uc2lkZXJlZC4KPgo+IC0gZHJtX21vZGVfb2Jq ZWN0LltoY10gaW5zdGVhZCBvZiBkcm1fbW9kZXNldC5baGNdLCB3aGljaCByZXF1aXJlcwo+ICAg IHJlbmFtaW5nIHRoZSBkcm1fbW9kZXNldC5oIGhlYWRlciBJIGFscmVhZHkgc3RhcnRlZCBidWls ZGluZyB1cC4KPiAgICBUaGlzIGlzIG1vcmUgY29uc2lzdGVudCAobWF0Y2hlcyB0aGUgbmFtZSBv ZiB0aGUgbWFpbiBzdHJ1Y3R1cmUpLAo+ICAgIGFuZCBJIHdhbnQgdG8gYmUgYWJsZSB0byB1c2Ug ZHJtX21vZGVzZXQuW2hjXSBmb3IgdGhlIGJhc2ljIG1vZGVzZXQKPiAgICBpbml0L2NsZWFudXAg ZnVuY3Rpb25hbGl0eSBsaWtlIGRybV9tb2RlX2NvbmZpZ19pbml0Lgo+Cj4gU2lnbmVkLW9mZi1i eTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4gLS0tCj4gICBEb2N1 bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCAgICAgICB8ICAgOSArCj4gICBkcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUgICAgICAgICAgICB8ICAgMiArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9j cnRjLmMgICAgICAgICAgfCA0MTMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ICAgZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggfCAgNTIgKysrLS0KPiAgIGRy aXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9vYmplY3QuYyAgIHwgNDM1ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ICAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oICAgICAg ICAgfCAgIDIgKy0KPiAgIGluY2x1ZGUvZHJtL2RybV9jcnRjLmggICAgICAgICAgICAgIHwgIDEy ICstCj4gICBpbmNsdWRlL2RybS9kcm1fZW5jb2Rlci5oICAgICAgICAgICB8ICAgMiArLQo+ICAg aW5jbHVkZS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmggICAgICAgfCAgIDIgKy0KPiAgIGluY2x1ZGUv ZHJtL2RybV9tb2RlX29iamVjdC5oICAgICAgIHwgIDgwICsrKysrKysKPiAgIGluY2x1ZGUvZHJt L2RybV9tb2Rlcy5oICAgICAgICAgICAgIHwgICAyICstCj4gICBpbmNsdWRlL2RybS9kcm1fbW9k ZXNldC5oICAgICAgICAgICB8ICA3MCAtLS0tLS0KPiAgIDEyIGZpbGVzIGNoYW5nZWQsIDU2MiBp bnNlcnRpb25zKCspLCA1MTkgZGVsZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2RybV9tb2RlX29iamVjdC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9kcm0vZHJtX21vZGVfb2JqZWN0LmgKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L2RybS9kcm1fbW9kZXNldC5oCj4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJt LWttcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdAo+IGluZGV4IDQ3YzI4MzVi N2MyZC4uYjE2NDQ3MmYyMTU3IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMucnN0Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKPiBAQCAtMTUsNiAr MTUsMTUgQEAgYmUgc2V0dXAgYnkgaW5pdGlhbGl6aW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzLgo+ ICAgLSAgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBcKmZ1bmNzOwo+ICAgICAgTW9kZSBz ZXR0aW5nIGZ1bmN0aW9ucy4KPgo+ICtNb2Rlc2V0IEJhc2UgT2JqZWN0IEFic3RyYWN0aW9uCj4g Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBp bmNsdWRlL2RybS9kcm1fbW9kZV9vYmplY3QuaAo+ICsgICA6aW50ZXJuYWw6Cj4gKwo+ICsuLiBr ZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX29iamVjdC5jCj4gKyAgIDpleHBv cnQ6Cj4gKwo+ICAgS01TIERhdGEgU3RydWN0dXJlcwo+ICAgPT09PT09PT09PT09PT09PT09PQo+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+IGluZGV4IGVmZGI0MTc2MjMwZi4uNTk5NzlmM2YzNjQ4IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQo+IEBAIC0xNCw3ICsxNCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1 ZnMubyBkcm1fY2FjaGUubyBcCj4gICAJCWRybV9yZWN0Lm8gZHJtX3ZtYV9tYW5hZ2VyLm8gZHJt X2ZsaXBfd29yay5vIFwKPiAgIAkJZHJtX21vZGVzZXRfbG9jay5vIGRybV9hdG9taWMubyBkcm1f YnJpZGdlLm8gXAo+ICAgCQlkcm1fZnJhbWVidWZmZXIubyBkcm1fY29ubmVjdG9yLm8gZHJtX2Js ZW5kLm8gXAo+IC0JCWRybV9lbmNvZGVyLm8KPiArCQlkcm1fZW5jb2Rlci5vIGRybV9tb2RlX29i amVjdC5vCj4KPiAgIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCj4gICBkcm0t JChDT05GSUdfRFJNX0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Yy5jCj4gaW5kZXggZjg5NzExYjE2ZDNlLi5kN2Y2OGVjMDQ5ZDEgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2NydGMuYwo+IEBAIC01NywxNjIgKzU3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJv cF9lbnVtX2xpc3QgZHJtX3BsYW5lX3R5cGVfZW51bV9saXN0W10gPSB7Cj4gICAvKgo+ICAgICog T3B0aW9uYWwgcHJvcGVydGllcwo+ICAgICovCj4gLS8qCj4gLSAqIEludGVybmFsIGZ1bmN0aW9u IHRvIGFzc2lnbiBhIHNsb3QgaW4gdGhlIG9iamVjdCBpZHIgYW5kIG9wdGlvbmFsbHkKPiAtICog cmVnaXN0ZXIgdGhlIG9iamVjdCBpbnRvIHRoZSBpZHIuCj4gLSAqLwo+IC1pbnQgZHJtX21vZGVf b2JqZWN0X2dldF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJICAgIHN0cnVjdCBk cm1fbW9kZV9vYmplY3QgKm9iaiwKPiAtCQkJICAgIHVpbnQzMl90IG9ial90eXBlLAo+IC0JCQkg ICAgYm9vbCByZWdpc3Rlcl9vYmosCj4gLQkJCSAgICB2b2lkICgqb2JqX2ZyZWVfY2IpKHN0cnVj dCBrcmVmICprcmVmKSkKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQltdXRleF9sb2NrKCZkZXYt Pm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gLQlyZXQgPSBpZHJfYWxsb2MoJmRldi0+bW9kZV9j b25maWcuY3J0Y19pZHIsIHJlZ2lzdGVyX29iaiA/IG9iaiA6IE5VTEwsIDEsIDAsIEdGUF9LRVJO RUwpOwo+IC0JaWYgKHJldCA+PSAwKSB7Cj4gLQkJLyoKPiAtCQkgKiBTZXQgdXAgdGhlIG9iamVj dCBsaW5raW5nIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBpZHIKPiAtCQkgKiBsb2NrIHNv IHRoYXQgb3RoZXIgdXNlcnMgY2FuJ3Qgc2VlIGluY29uc2lzdGVudCBzdGF0ZS4KPiAtCQkgKi8K PiAtCQlvYmotPmlkID0gcmV0Owo+IC0JCW9iai0+dHlwZSA9IG9ial90eXBlOwo+IC0JCWlmIChv YmpfZnJlZV9jYikgewo+IC0JCQlvYmotPmZyZWVfY2IgPSBvYmpfZnJlZV9jYjsKPiAtCQkJa3Jl Zl9pbml0KCZvYmotPnJlZmNvdW50KTsKPiAtCQl9Cj4gLQl9Cj4gLQltdXRleF91bmxvY2soJmRl di0+bW9kZV9jb25maWcuaWRyX211dGV4KTsKPiAtCj4gLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6 IDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBkcm1fbW9kZV9vYmplY3RfZ2V0IC0gYWxsb2NhdGUg YSBuZXcgbW9kZXNldCBpZGVudGlmaWVyCj4gLSAqIEBkZXY6IERSTSBkZXZpY2UKPiAtICogQG9i ajogb2JqZWN0IHBvaW50ZXIsIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElECj4gLSAqIEBvYmpf dHlwZTogb2JqZWN0IHR5cGUKPiAtICoKPiAtICogQ3JlYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIg YmFzZWQgb24gQHB0ciBpbiBAZGV2J3MgaWRlbnRpZmllciBzcGFjZS4gIFVzZWQKPiAtICogZm9y IHRyYWNraW5nIG1vZGVzLCBDUlRDcyBhbmQgY29ubmVjdG9ycy4gTm90ZSB0aGF0IGRlc3BpdGUg dGhlIF9nZXQgcG9zdGZpeAo+IC0gKiBtb2Rlc2V0IGlkZW50aWZpZXJzIGFyZSBfbm90XyByZWZl cmVuY2UgY291bnRlZC4gSGVuY2UgZG9uJ3QgdXNlIHRoaXMgZm9yCj4gLSAqIHJlZmVyZW5jZSBj b3VudGVkIG1vZGVzZXQgb2JqZWN0cyBsaWtlIGZyYW1lYnVmZmVycy4KPiAtICoKPiAtICogUmV0 dXJuczoKPiAtICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gLSAq Lwo+IC1pbnQgZHJtX21vZGVfb2JqZWN0X2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0J CQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosIHVpbnQzMl90IG9ial90eXBlKQo+IC17Cj4g LQlyZXR1cm4gZHJtX21vZGVfb2JqZWN0X2dldF9yZWcoZGV2LCBvYmosIG9ial90eXBlLCB0cnVl LCBOVUxMKTsKPiAtfQo+IC0KPiAtdm9pZCBkcm1fbW9kZV9vYmplY3RfcmVnaXN0ZXIoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJICAgICAgc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2Jq KQo+IC17Cj4gLQltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gLQlp ZHJfcmVwbGFjZSgmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2lkciwgb2JqLCBvYmotPmlkKTsKPiAt CW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5pZHJfbXV0ZXgpOwo+IC19Cj4gLQo+IC0v KioKPiAtICogZHJtX21vZGVfb2JqZWN0X3VucmVnaXN0ZXIgLSBmcmVlIGEgbW9kZXNldCBpZGVu dGlmZXIKPiAtICogQGRldjogRFJNIGRldmljZQo+IC0gKiBAb2JqZWN0OiBvYmplY3QgdG8gZnJl ZQo+IC0gKgo+IC0gKiBGcmVlIEBpZCBmcm9tIEBkZXYncyB1bmlxdWUgaWRlbnRpZmllciBwb29s Lgo+IC0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIGFuZCBn dWFyZHMgYWdhaW5zdAo+IC0gKiBtdWx0aXBsZSByZW1vdmFscy4KPiAtICogVGhlc2UgbW9kZXNl dCBpZGVudGlmaWVycyBhcmUgX25vdF8gcmVmZXJlbmNlIGNvdW50ZWQuIEhlbmNlIGRvbid0IHVz ZSB0aGlzCj4gLSAqIGZvciByZWZlcmVuY2UgY291bnRlZCBtb2Rlc2V0IG9iamVjdHMgbGlrZSBm cmFtZWJ1ZmZlcnMuCj4gLSAqLwo+IC12b2lkIGRybV9tb2RlX29iamVjdF91bnJlZ2lzdGVyKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCSBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmpl Y3QpCj4gLXsKPiAtCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcuaWRyX211dGV4KTsKPiAt CWlmIChvYmplY3QtPmlkKSB7Cj4gLQkJaWRyX3JlbW92ZSgmZGV2LT5tb2RlX2NvbmZpZy5jcnRj X2lkciwgb2JqZWN0LT5pZCk7Cj4gLQkJb2JqZWN0LT5pZCA9IDA7Cj4gLQl9Cj4gLQltdXRleF91 bmxvY2soJmRldi0+bW9kZV9jb25maWcuaWRyX211dGV4KTsKPiAtfQo+IC0KPiAtc3RydWN0IGRy bV9tb2RlX29iamVjdCAqX19kcm1fbW9kZV9vYmplY3RfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAo+IC0JCQkJCSAgICAgICB1aW50MzJfdCBpZCwgdWludDMyX3QgdHlwZSkKPiAtewo+IC0J c3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqID0gTlVMTDsKPiAtCj4gLQltdXRleF9sb2NrKCZk ZXYtPm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gLQlvYmogPSBpZHJfZmluZCgmZGV2LT5tb2Rl X2NvbmZpZy5jcnRjX2lkciwgaWQpOwo+IC0JaWYgKG9iaiAmJiB0eXBlICE9IERSTV9NT0RFX09C SkVDVF9BTlkgJiYgb2JqLT50eXBlICE9IHR5cGUpCj4gLQkJb2JqID0gTlVMTDsKPiAtCWlmIChv YmogJiYgb2JqLT5pZCAhPSBpZCkKPiAtCQlvYmogPSBOVUxMOwo+IC0KPiAtCWlmIChvYmogJiYg b2JqLT5mcmVlX2NiKSB7Cj4gLQkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmb2JqLT5yZWZj b3VudCkpCj4gLQkJCW9iaiA9IE5VTEw7Cj4gLQl9Cj4gLQltdXRleF91bmxvY2soJmRldi0+bW9k ZV9jb25maWcuaWRyX211dGV4KTsKPiAtCj4gLQlyZXR1cm4gb2JqOwo+IC19Cj4gLQo+IC0vKioK PiAtICogZHJtX21vZGVfb2JqZWN0X2ZpbmQgLSBsb29rIHVwIGEgZHJtIG9iamVjdCB3aXRoIHN0 YXRpYyBsaWZldGltZQo+IC0gKiBAZGV2OiBkcm0gZGV2aWNlCj4gLSAqIEBpZDogaWQgb2YgdGhl IG1vZGUgb2JqZWN0Cj4gLSAqIEB0eXBlOiB0eXBlIG9mIHRoZSBtb2RlIG9iamVjdAo+IC0gKgo+ IC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9vayB1cCBhIG1vZGVzZXQgb2JqZWN0LiBJ dCB3aWxsIGFjcXVpcmUgYQo+IC0gKiByZWZlcmVuY2UgZm9yIHJlZmVyZW5jZSBjb3VudGVkIG9i amVjdHMuIFRoaXMgcmVmZXJlbmNlIG11c3QgYmUgZHJvcHBlZCBhZ2Fpbgo+IC0gKiBieSBjYWxs aW5kIGRybV9tb2RlX29iamVjdF91bnJlZmVyZW5jZSgpLgo+IC0gKi8KPiAtc3RydWN0IGRybV9t b2RlX29iamVjdCAqZHJtX21vZGVfb2JqZWN0X2ZpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAtCQl1aW50MzJfdCBpZCwgdWludDMyX3QgdHlwZSkKPiAtewo+IC0Jc3RydWN0IGRybV9tb2Rl X29iamVjdCAqb2JqID0gTlVMTDsKPiAtCj4gLQlvYmogPSBfX2RybV9tb2RlX29iamVjdF9maW5k KGRldiwgaWQsIHR5cGUpOwo+IC0JcmV0dXJuIG9iajsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKGRy bV9tb2RlX29iamVjdF9maW5kKTsKPiAtCj4gLS8qKgo+IC0gKiBkcm1fbW9kZV9vYmplY3RfdW5y ZWZlcmVuY2UgLSBkZWNyIHRoZSBvYmplY3QgcmVmY250Cj4gLSAqIEBvYmo6IG1vZGVfb2JqZWN0 Cj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb25zIGRlY3JlbWVudHMgdGhlIG9iamVjdCdzIHJlZmNv dW50IGlmIGl0IGlzIGEgcmVmY291bnRlZCBtb2Rlc2V0Cj4gLSAqIG9iamVjdC4gSXQgaXMgYSBu by1vcCBvbiBhbnkgb3RoZXIgb2JqZWN0LiBUaGlzIGlzIHVzZWQgdG8gZHJvcCByZWZlcmVuY2Vz Cj4gLSAqIGFjcXVpcmVkIHdpdGggZHJtX21vZGVfb2JqZWN0X3JlZmVyZW5jZSgpLgo+IC0gKi8K PiAtdm9pZCBkcm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9tb2RlX29iamVj dCAqb2JqKQo+IC17Cj4gLQlpZiAob2JqLT5mcmVlX2NiKSB7Cj4gLQkJRFJNX0RFQlVHKCJPQkog SUQ6ICVkICglZClcbiIsIG9iai0+aWQsIGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNv dW50KSk7Cj4gLQkJa3JlZl9wdXQoJm9iai0+cmVmY291bnQsIG9iai0+ZnJlZV9jYik7Cj4gLQl9 Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2UpOwo+IC0K PiAtLyoqCj4gLSAqIGRybV9tb2RlX29iamVjdF9yZWZlcmVuY2UgLSBpbmNyIHRoZSBvYmplY3Qg cmVmY250Cj4gLSAqIEBvYmo6IG1vZGVfb2JqZWN0Cj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb25z IGluY3JlbWVudHMgdGhlIG9iamVjdCdzIHJlZmNvdW50IGlmIGl0IGlzIGEgcmVmY291bnRlZCBt b2Rlc2V0Cj4gLSAqIG9iamVjdC4gSXQgaXMgYSBuby1vcCBvbiBhbnkgb3RoZXIgb2JqZWN0LiBS ZWZlcmVuY2VzIHNob3VsZCBiZSBkcm9wcGVkIGFnYWluCj4gLSAqIGJ5IGNhbGxpbmcgZHJtX21v ZGVfb2JqZWN0X3VucmVmZXJlbmNlKCkuCj4gLSAqLwo+IC12b2lkIGRybV9tb2RlX29iamVjdF9y ZWZlcmVuY2Uoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqKQo+IC17Cj4gLQlpZiAob2JqLT5m cmVlX2NiKSB7Cj4gLQkJRFJNX0RFQlVHKCJPQkogSUQ6ICVkICglZClcbiIsIG9iai0+aWQsIGF0 b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7Cj4gLQkJa3JlZl9nZXQoJm9iai0+ cmVmY291bnQpOwo+IC0JfQo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX21vZGVfb2JqZWN0X3Jl ZmVyZW5jZSk7Cj4gLQo+ICAgLyoqCj4gICAgKiBkcm1fY3J0Y19mb3JjZV9kaXNhYmxlIC0gRm9y Y2libHkgdHVybiBvZmYgYSBDUlRDCj4gICAgKiBAY3J0YzogQ1JUQyB0byB0dXJuIG9mZgo+IEBA IC0xMDA1LDQ1ICs4NDksNiBAQCBpbnQgZHJtX21vZGVfZ2V0Y3J0YyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ICAgCXJldHVybiAwOwo+ICAgfQo+Cj4gLS8qIGhlbHBlciBmb3IgZ2V0Y29ubmVj dG9yIGFuZCBnZXRwcm9wZXJ0aWVzIGlvY3RscyAqLwo+IC1pbnQgZHJtX21vZGVfb2JqZWN0X2dl dF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwgYm9vbCBhdG9taWMsCj4g LQkJCQkgICB1aW50MzJfdCBfX3VzZXIgKnByb3BfcHRyLAo+IC0JCQkJICAgdWludDY0X3QgX191 c2VyICpwcm9wX3ZhbHVlcywKPiAtCQkJCSAgIHVpbnQzMl90ICphcmdfY291bnRfcHJvcHMpCj4g LXsKPiAtCWludCBwcm9wc19jb3VudDsKPiAtCWludCBpLCByZXQsIGNvcGllZDsKPiAtCj4gLQlw cm9wc19jb3VudCA9IG9iai0+cHJvcGVydGllcy0+Y291bnQ7Cj4gLQlpZiAoIWF0b21pYykKPiAt CQlwcm9wc19jb3VudCAtPSBvYmotPnByb3BlcnRpZXMtPmF0b21pY19jb3VudDsKPiAtCj4gLQlp ZiAoKCphcmdfY291bnRfcHJvcHMgPj0gcHJvcHNfY291bnQpICYmIHByb3BzX2NvdW50KSB7Cj4g LQkJZm9yIChpID0gMCwgY29waWVkID0gMDsgY29waWVkIDwgcHJvcHNfY291bnQ7IGkrKykgewo+ IC0JCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wID0gb2JqLT5wcm9wZXJ0aWVzLT5wcm9wZXJ0 aWVzW2ldOwo+IC0JCQl1aW50NjRfdCB2YWw7Cj4gLQo+IC0JCQlpZiAoKHByb3AtPmZsYWdzICYg RFJNX01PREVfUFJPUF9BVE9NSUMpICYmICFhdG9taWMpCj4gLQkJCQljb250aW51ZTsKPiAtCj4g LQkJCXJldCA9IGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKG9iaiwgcHJvcCwgJnZhbCk7 Cj4gLQkJCWlmIChyZXQpCj4gLQkJCQlyZXR1cm4gcmV0Owo+IC0KPiAtCQkJaWYgKHB1dF91c2Vy KHByb3AtPmJhc2UuaWQsIHByb3BfcHRyICsgY29waWVkKSkKPiAtCQkJCXJldHVybiAtRUZBVUxU Owo+IC0KPiAtCQkJaWYgKHB1dF91c2VyKHZhbCwgcHJvcF92YWx1ZXMgKyBjb3BpZWQpKQo+IC0J CQkJcmV0dXJuIC1FRkFVTFQ7Cj4gLQo+IC0JCQljb3BpZWQrKzsKPiAtCQl9Cj4gLQl9Cj4gLQkq YXJnX2NvdW50X3Byb3BzID0gcHJvcHNfY291bnQ7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gICAvKioKPiAgICAqIGRybV9tb2RlX2dldHBsYW5lX3JlcyAtIGVudW1lcmF0ZSBhbGwgcGxh bmUgcmVzb3VyY2VzCj4gICAgKiBAZGV2OiBEUk0gZGV2aWNlCj4gQEAgLTIyODYsMTA1ICsyMDkx LDYgQEAgdm9pZCBkcm1fcHJvcGVydHlfZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSkKPiAgIEVYUE9SVF9TWU1CT0woZHJtX3Byb3Bl cnR5X2Rlc3Ryb3kpOwo+Cj4gICAvKioKPiAtICogZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkg LSBhdHRhY2ggYSBwcm9wZXJ0eSB0byBhIG1vZGVzZXQgb2JqZWN0Cj4gLSAqIEBvYmo6IGRybSBt b2Rlc2V0IG9iamVjdAo+IC0gKiBAcHJvcGVydHk6IHByb3BlcnR5IHRvIGF0dGFjaAo+IC0gKiBA aW5pdF92YWw6IGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb3BlcnR5Cj4gLSAqCj4gLSAqIFRoaXMg YXR0YWNoZXMgdGhlIGdpdmVuIHByb3BlcnR5IHRvIHRoZSBtb2Rlc2V0IG9iamVjdCB3aXRoIHRo ZSBnaXZlbiBpbml0aWFsCj4gLSAqIHZhbHVlLiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBjYW5u b3QgZmFpbCBzaW5jZSB0aGUgcHJvcGVydGllcyBhcmUgc3RvcmVkIGluCj4gLSAqIGEgc3RhdGlj YWxseSBzaXplZCBhcnJheS4KPiAtICovCj4gLXZvaWQgZHJtX29iamVjdF9hdHRhY2hfcHJvcGVy dHkoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAo+IC0JCQkJc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcGVydHksCj4gLQkJCQl1aW50NjRfdCBpbml0X3ZhbCkKPiAtewo+IC0JaW50IGNvdW50 ID0gb2JqLT5wcm9wZXJ0aWVzLT5jb3VudDsKPiAtCj4gLQlpZiAoY291bnQgPT0gRFJNX09CSkVD VF9NQVhfUFJPUEVSVFkpIHsKPiAtCQlXQVJOKDEsICJGYWlsZWQgdG8gYXR0YWNoIG9iamVjdCBw cm9wZXJ0eSAodHlwZTogMHgleCkuIFBsZWFzZSAiCj4gLQkJCSJpbmNyZWFzZSBEUk1fT0JKRUNU X01BWF9QUk9QRVJUWSBieSAxIGZvciBlYWNoIHRpbWUgIgo+IC0JCQkieW91IHNlZSB0aGlzIG1l c3NhZ2Ugb24gdGhlIHNhbWUgb2JqZWN0IHR5cGUuXG4iLAo+IC0JCQlvYmotPnR5cGUpOwo+IC0J CXJldHVybjsKPiAtCX0KPiAtCj4gLQlvYmotPnByb3BlcnRpZXMtPnByb3BlcnRpZXNbY291bnRd ID0gcHJvcGVydHk7Cj4gLQlvYmotPnByb3BlcnRpZXMtPnZhbHVlc1tjb3VudF0gPSBpbml0X3Zh bDsKPiAtCW9iai0+cHJvcGVydGllcy0+Y291bnQrKzsKPiAtCWlmIChwcm9wZXJ0eS0+ZmxhZ3Mg JiBEUk1fTU9ERV9QUk9QX0FUT01JQykKPiAtCQlvYmotPnByb3BlcnRpZXMtPmF0b21pY19jb3Vu dCsrOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkpOwo+ IC0KPiAtLyoqCj4gLSAqIGRybV9vYmplY3RfcHJvcGVydHlfc2V0X3ZhbHVlIC0gc2V0IHRoZSB2 YWx1ZSBvZiBhIHByb3BlcnR5Cj4gLSAqIEBvYmo6IGRybSBtb2RlIG9iamVjdCB0byBzZXQgcHJv cGVydHkgdmFsdWUgZm9yCj4gLSAqIEBwcm9wZXJ0eTogcHJvcGVydHkgdG8gc2V0Cj4gLSAqIEB2 YWw6IHZhbHVlIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgc2V0IHRvCj4gLSAqCj4gLSAqIFRoaXMg ZnVuY3Rpb25zIHNldHMgYSBnaXZlbiBwcm9wZXJ0eSBvbiBhIGdpdmVuIG9iamVjdC4gVGhpcyBm dW5jdGlvbiBvbmx5Cj4gLSAqIGNoYW5nZXMgdGhlIHNvZnR3YXJlIHN0YXRlIG9mIHRoZSBwcm9w ZXJ0eSwgaXQgZG9lcyBub3QgY2FsbCBpbnRvIHRoZQo+IC0gKiBkcml2ZXIncyAtPnNldF9wcm9w ZXJ0eSBjYWxsYmFjay4KPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogWmVybyBvbiBzdWNjZXNz LCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gLSAqLwo+IC1pbnQgZHJtX29iamVjdF9wcm9wZXJ0 eV9zZXRfdmFsdWUoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAo+IC0JCQkJICBzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFsKQo+IC17Cj4gLQlpbnQgaTsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5wcm9wZXJ0aWVzLT5jb3VudDsgaSsrKSB7Cj4gLQkJ aWYgKG9iai0+cHJvcGVydGllcy0+cHJvcGVydGllc1tpXSA9PSBwcm9wZXJ0eSkgewo+IC0JCQlv YmotPnByb3BlcnRpZXMtPnZhbHVlc1tpXSA9IHZhbDsKPiAtCQkJcmV0dXJuIDA7Cj4gLQkJfQo+ IC0JfQo+IC0KPiAtCXJldHVybiAtRUlOVkFMOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX29i amVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUpOwo+IC0KPiAtLyoqCj4gLSAqIGRybV9vYmplY3RfcHJv cGVydHlfZ2V0X3ZhbHVlIC0gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkKPiAtICog QG9iajogZHJtIG1vZGUgb2JqZWN0IHRvIGdldCBwcm9wZXJ0eSB2YWx1ZSBmcm9tCj4gLSAqIEBw cm9wZXJ0eTogcHJvcGVydHkgdG8gcmV0cmlldmUKPiAtICogQHZhbDogc3RvcmFnZSBmb3IgdGhl IHByb3BlcnR5IHZhbHVlCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBz b2Z0YXJlIHN0YXRlIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuCj4gLSAqIHBy b3BlcnR5LiBTaW5jZSB0aGVyZSBpcyBubyBkcml2ZXIgY2FsbGJhY2sgdG8gcmV0cmlldmUgdGhl IGN1cnJlbnQgcHJvcGVydHkKPiAtICogdmFsdWUgdGhpcyBtaWdodCBiZSBvdXQgb2Ygc3luYyB3 aXRoIHRoZSBoYXJkd2FyZSwgZGVwZW5kaW5nIHVwb24gdGhlIGRyaXZlcgo+IC0gKiBhbmQgcHJv cGVydHkuCj4gLSAqCj4gLSAqIFJldHVybnM6Cj4gLSAqIFplcm8gb24gc3VjY2VzcywgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlLgo+IC0gKi8KPiAtaW50IGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3Zh bHVlKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKPiAtCQkJCSAgc3RydWN0IGRybV9wcm9w ZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCS8q IHJlYWQtb25seSBwcm9wZXJ0aWVzIGJ5cGFzcyBhdG9taWMgbWVjaGFuaXNtIGFuZCBzdGlsbCBz dG9yZQo+IC0JICogdGhlaXIgdmFsdWUgaW4gb2JqLT5wcm9wZXJ0aWVzLT52YWx1ZXNbXS4uIG1v c3RseSB0byBhdm9pZAo+IC0JICogaGF2aW5nIHRvIGRlYWwgdy8gRURJRCBhbmQgc2ltaWxhciBw cm9wcyBpbiBhdG9taWMgcGF0aHM6Cj4gLQkgKi8KPiAtCWlmIChkcm1fY29yZV9jaGVja19mZWF0 dXJlKHByb3BlcnR5LT5kZXYsIERSSVZFUl9BVE9NSUMpICYmCj4gLQkJCSEocHJvcGVydHktPmZs YWdzICYgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUpKQo+IC0JCXJldHVybiBkcm1fYXRvbWljX2dl dF9wcm9wZXJ0eShvYmosIHByb3BlcnR5LCB2YWwpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBv YmotPnByb3BlcnRpZXMtPmNvdW50OyBpKyspIHsKPiAtCQlpZiAob2JqLT5wcm9wZXJ0aWVzLT5w cm9wZXJ0aWVzW2ldID09IHByb3BlcnR5KSB7Cj4gLQkJCSp2YWwgPSBvYmotPnByb3BlcnRpZXMt PnZhbHVlc1tpXTsKPiAtCQkJcmV0dXJuIDA7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiAt RUlOVkFMOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFs dWUpOwo+IC0KPiAtLyoqCj4gICAgKiBkcm1fbW9kZV9nZXRwcm9wZXJ0eV9pb2N0bCAtIGdldCB0 aGUgcHJvcGVydHkgbWV0YWRhdGEKPiAgICAqIEBkZXY6IERSTSBkZXZpY2UKPiAgICAqIEBkYXRh OiBpb2N0bCBkYXRhCj4gQEAgLTI5MjksOSArMjYzNSw5IEBAIHZvaWQgZHJtX3Byb3BlcnR5X2No YW5nZV92YWxpZF9wdXQoc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gICAJCWRybV9w cm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKG9ial90b19ibG9iKHJlZikpOwo+ICAgfQo+Cj4gLXN0 YXRpYyBpbnQgZHJtX21vZGVfY3J0Y19zZXRfb2JqX3Byb3Aoc3RydWN0IGRybV9tb2RlX29iamVj dCAqb2JqLAo+IC0JCQkJICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gLQkJ CQkgICAgICB1aW50NjRfdCB2YWx1ZSkKPiAraW50IGRybV9tb2RlX2NydGNfc2V0X29ial9wcm9w KHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHN0cnVjdCBkcm1fcHJv cGVydHkgKnByb3BlcnR5LAo+ICsJCQkgICAgICAgdWludDY0X3QgdmFsdWUpCj4gICB7Cj4gICAJ aW50IHJldCA9IC1FSU5WQUw7Cj4gICAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2Ny dGMob2JqKTsKPiBAQCAtMjk3NCwxMTkgKzI2ODAsNiBAQCBpbnQgZHJtX21vZGVfcGxhbmVfc2V0 X29ial9wcm9wKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgRVhQT1JUX1NZTUJPTChkcm1f bW9kZV9wbGFuZV9zZXRfb2JqX3Byb3ApOwo+Cj4gICAvKioKPiAtICogZHJtX21vZGVfb2JqX2dl dF9wcm9wZXJ0aWVzX2lvY3RsIC0gZ2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgb2JqZWN0J3Mg cHJvcGVydHkKPiAtICogQGRldjogRFJNIGRldmljZQo+IC0gKiBAZGF0YTogaW9jdGwgZGF0YQo+ IC0gKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBpbmZvCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24g cmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhbiBvYmplY3QncyBwcm9wZXJ0eS4gQ29t cGFyZWQKPiAtICogdG8gdGhlIGNvbm5lY3RvciBzcGVjaWZpYyBpb2N0bCB0aGlzIG9uZSBpcyBl eHRlbmRlZCB0byBhbHNvIHdvcmsgb24gY3J0YyBhbmQKPiAtICogcGxhbmUgb2JqZWN0cy4KPiAt ICoKPiAtICogQ2FsbGVkIGJ5IHRoZSB1c2VyIHZpYSBpb2N0bC4KPiAtICoKPiAtICogUmV0dXJu czoKPiAtICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+IC0g Ki8KPiAtaW50IGRybV9tb2RlX29ial9nZXRfcHJvcGVydGllc19pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAo+IC0JCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYpCj4gLXsKPiAtCXN0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMgKmFyZyA9 IGRhdGE7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7Cj4gLQlpbnQgcmV0ID0gMDsK PiAtCj4gLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkp Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsK PiAtCj4gLQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGFyZy0+b2JqX2lkLCBhcmct Pm9ial90eXBlKTsKPiAtCWlmICghb2JqKSB7Cj4gLQkJcmV0ID0gLUVOT0VOVDsKPiAtCQlnb3Rv IG91dDsKPiAtCX0KPiAtCWlmICghb2JqLT5wcm9wZXJ0aWVzKSB7Cj4gLQkJcmV0ID0gLUVJTlZB TDsKPiAtCQlnb3RvIG91dF91bnJlZjsKPiAtCX0KPiAtCj4gLQlyZXQgPSBkcm1fbW9kZV9vYmpl Y3RfZ2V0X3Byb3BlcnRpZXMob2JqLCBmaWxlX3ByaXYtPmF0b21pYywKPiAtCQkJKHVpbnQzMl90 IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPnByb3BzX3B0ciksCj4gLQkJCSh1aW50NjRf dCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5wcm9wX3ZhbHVlc19wdHIpLAo+IC0JCQkm YXJnLT5jb3VudF9wcm9wcyk7Cj4gLQo+IC1vdXRfdW5yZWY6Cj4gLQlkcm1fbW9kZV9vYmplY3Rf dW5yZWZlcmVuY2Uob2JqKTsKPiAtb3V0Ogo+IC0JZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYp Owo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtaW50IGRybV9tb2RlX29ial9zZXRfcHJvcGVy dHlfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAtCQkJCSAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiAtewo+IC0Jc3RydWN0IGRybV9tb2RlX29ial9z ZXRfcHJvcGVydHkgKmFyZyA9IGRhdGE7Cj4gLQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICphcmdf b2JqOwo+IC0Jc3RydWN0IGRybV9tb2RlX29iamVjdCAqcHJvcF9vYmo7Cj4gLQlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eTsKPiAtCWludCBpLCByZXQgPSAtRUlOVkFMOwo+IC0Jc3RydWN0 IGRybV9tb2RlX29iamVjdCAqcmVmOwo+IC0KPiAtCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVy ZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlkcm1f bW9kZXNldF9sb2NrX2FsbChkZXYpOwo+IC0KPiAtCWFyZ19vYmogPSBkcm1fbW9kZV9vYmplY3Rf ZmluZChkZXYsIGFyZy0+b2JqX2lkLCBhcmctPm9ial90eXBlKTsKPiAtCWlmICghYXJnX29iaikg ewo+IC0JCXJldCA9IC1FTk9FTlQ7Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gLQlpZiAoIWFyZ19v YmotPnByb3BlcnRpZXMpCj4gLQkJZ290byBvdXRfdW5yZWY7Cj4gLQo+IC0JZm9yIChpID0gMDsg aSA8IGFyZ19vYmotPnByb3BlcnRpZXMtPmNvdW50OyBpKyspCj4gLQkJaWYgKGFyZ19vYmotPnBy b3BlcnRpZXMtPnByb3BlcnRpZXNbaV0tPmJhc2UuaWQgPT0gYXJnLT5wcm9wX2lkKQo+IC0JCQli cmVhazsKPiAtCj4gLQlpZiAoaSA9PSBhcmdfb2JqLT5wcm9wZXJ0aWVzLT5jb3VudCkKPiAtCQln b3RvIG91dF91bnJlZjsKPiAtCj4gLQlwcm9wX29iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRl diwgYXJnLT5wcm9wX2lkLAo+IC0JCQkJCURSTV9NT0RFX09CSkVDVF9QUk9QRVJUWSk7Cj4gLQlp ZiAoIXByb3Bfb2JqKSB7Cj4gLQkJcmV0ID0gLUVOT0VOVDsKPiAtCQlnb3RvIG91dF91bnJlZjsK PiAtCX0KPiAtCXByb3BlcnR5ID0gb2JqX3RvX3Byb3BlcnR5KHByb3Bfb2JqKTsKPiAtCj4gLQlp ZiAoIWRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfZ2V0KHByb3BlcnR5LCBhcmctPnZhbHVlLCAm cmVmKSkKPiAtCQlnb3RvIG91dF91bnJlZjsKPiAtCj4gLQlzd2l0Y2ggKGFyZ19vYmotPnR5cGUp IHsKPiAtCWNhc2UgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjoKPiAtCQlyZXQgPSBkcm1fbW9k ZV9jb25uZWN0b3Jfc2V0X29ial9wcm9wKGFyZ19vYmosIHByb3BlcnR5LAo+IC0JCQkJCQkgICAg ICBhcmctPnZhbHVlKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX01PREVfT0JKRUNUX0NSVEM6 Cj4gLQkJcmV0ID0gZHJtX21vZGVfY3J0Y19zZXRfb2JqX3Byb3AoYXJnX29iaiwgcHJvcGVydHks IGFyZy0+dmFsdWUpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBEUk1fTU9ERV9PQkpFQ1RfUExBTkU6 Cj4gLQkJcmV0ID0gZHJtX21vZGVfcGxhbmVfc2V0X29ial9wcm9wKG9ial90b19wbGFuZShhcmdf b2JqKSwKPiAtCQkJCQkJICBwcm9wZXJ0eSwgYXJnLT52YWx1ZSk7Cj4gLQkJYnJlYWs7Cj4gLQl9 Cj4gLQo+IC0JZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9wdXQocHJvcGVydHksIHJlZik7Cj4g LQo+IC1vdXRfdW5yZWY6Cj4gLQlkcm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2UoYXJnX29iaik7 Cj4gLW91dDoKPiAtCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKPiAtCXJldHVybiByZXQ7 Cj4gLX0KPiAtCj4gLS8qKgo+ICAgICogZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZSAtIHNl dCB0aGUgZ2FtbWEgdGFibGUgc2l6ZQo+ICAgICogQGNydGM6IENSVEMgdG8gc2V0IHRoZSBnYW1t YSB0YWJsZSBzaXplIGZvcgo+ICAgICogQGdhbW1hX3NpemU6IHNpemUgb2YgdGhlIGdhbW1hIHRh YmxlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19pbnRlcm5hbC5oIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKPiBpbmRleCA2OWYyYjIxZGRhZDMu LjI2ZWE3YjVlMzY4NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50 ZXJuYWwuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19pbnRlcm5hbC5oCj4gQEAg LTMzLDI5ICszMywxNCBAQAo+Cj4KPiAgIC8qIGRybV9jcnRjLmMgKi8KPiAtaW50IGRybV9tb2Rl X29iamVjdF9nZXRfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLQkJCSAgICBzdHJ1Y3Qg ZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gLQkJCSAgICB1aW50MzJfdCBvYmpfdHlwZSwKPiAtCQkJ ICAgIGJvb2wgcmVnaXN0ZXJfb2JqLAo+IC0JCQkgICAgdm9pZCAoKm9ial9mcmVlX2NiKShzdHJ1 Y3Qga3JlZiAqa3JlZikpOwo+IC12b2lkIGRybV9tb2RlX29iamVjdF9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+IC0JCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmop Owo+IC1pbnQgZHJtX21vZGVfb2JqZWN0X2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+IC0J CQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosIHVpbnQzMl90IG9ial90eXBlKTsKPiAtc3Ry dWN0IGRybV9tb2RlX29iamVjdCAqX19kcm1fbW9kZV9vYmplY3RfZmluZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+IC0JCQkJCSAgICAgICB1aW50MzJfdCBpZCwgdWludDMyX3QgdHlwZSk7Cj4g LXZvaWQgZHJtX21vZGVfb2JqZWN0X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAtCQkJCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iamVjdCk7Cj4gLWludCBkcm1fbW9kZV9v YmplY3RfZ2V0X3Byb3BlcnRpZXMoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLCBib29sIGF0 b21pYywKPiAtCQkJCSAgIHVpbnQzMl90IF9fdXNlciAqcHJvcF9wdHIsCj4gLQkJCQkgICB1aW50 NjRfdCBfX3VzZXIgKnByb3BfdmFsdWVzLAo+IC0JCQkJICAgdWludDMyX3QgKmFyZ19jb3VudF9w cm9wcyk7Cj4gK2ludCBkcm1fbW9kZV9jcnRjX3NldF9vYmpfcHJvcChzdHJ1Y3QgZHJtX21vZGVf b2JqZWN0ICpvYmosCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwK PiArCQkJICAgICAgIHVpbnQ2NF90IHZhbHVlKTsKPiAgIGJvb2wgZHJtX3Byb3BlcnR5X2NoYW5n ZV92YWxpZF9nZXQoc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gICAJCQkJICAgdWlu dDY0X3QgdmFsdWUsCj4gICAJCQkJICAgc3RydWN0IGRybV9tb2RlX29iamVjdCAqKnJlZik7Cj4g ICB2b2lkIGRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfcHV0KHN0cnVjdCBkcm1fcHJvcGVydHkg KnByb3BlcnR5LAo+ICAgCQkJCSAgIHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKnJlZik7Cj4gLQo+ ICAgaW50IGRybV9wbGFuZV9jaGVja19waXhlbF9mb3JtYXQoY29uc3Qgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gICAJCQkJIHUzMiBmb3JtYXQpOwo+ICAgaW50IGRybV9jcnRjX2NoZWNrX3Zp ZXdwb3J0KGNvbnN0IHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiBAQCAtNzYsMTEgKzYxLDYgQEAg aW50IGRybV9tb2RlX2Rlc3Ryb3lfZHVtYl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICAgCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPgo+ICAgLyog SU9DVExzICovCj4gLWludCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXNfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAtCQkJCSAgICAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KTsKPiAtaW50IGRybV9tb2RlX29ial9zZXRfcHJvcGVydHlfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAtCQkJCSAgICBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7Cj4gLQo+ICAgaW50IGRybV9tb2RlX2dldHJlc291cmNlcyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+ICAgCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7Cj4gICBpbnQgZHJtX21vZGVfZ2V0cGxhbmVfcmVzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gQEAgLTExMyw2ICs5MywzMiBAQCBpbnQgZHJtX21vZGVfZ2Ft bWFfc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICBpbnQgZHJtX21vZGVfcGFn ZV9mbGlwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJCQkgICAgIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPgo+ICsvKiBkcm1fbW9kZV9vYmplY3Qu YyAqLwo+ICtpbnQgZHJtX21vZGVfb2JqZWN0X2dldF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiArCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKPiArCQkJICAgIHVpbnQz Ml90IG9ial90eXBlLAo+ICsJCQkgICAgYm9vbCByZWdpc3Rlcl9vYmosCj4gKwkJCSAgICB2b2lk ICgqb2JqX2ZyZWVfY2IpKHN0cnVjdCBrcmVmICprcmVmKSk7Cj4gK3ZvaWQgZHJtX21vZGVfb2Jq ZWN0X3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBk cm1fbW9kZV9vYmplY3QgKm9iaik7Cj4gK2ludCBkcm1fbW9kZV9vYmplY3RfZ2V0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gKwkJCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwgdWludDMy X3Qgb2JqX3R5cGUpOwo+ICtzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpfX2RybV9tb2RlX29iamVj dF9maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCQkJICAgICAgIHVpbnQzMl90IGlk LCB1aW50MzJfdCB0eXBlKTsKPiArdm9pZCBkcm1fbW9kZV9vYmplY3RfdW5yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqZWN0 KTsKCkFsaWdubWVudCBpc3N1ZSBpbiB0aGUgZGVjbGFyYXRpb24gaGVyZS4KCgo+ICtpbnQgZHJt X21vZGVfb2JqZWN0X2dldF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwg Ym9vbCBhdG9taWMsCj4gKwkJCQkgICB1aW50MzJfdCBfX3VzZXIgKnByb3BfcHRyLAo+ICsJCQkJ ICAgdWludDY0X3QgX191c2VyICpwcm9wX3ZhbHVlcywKPiArCQkJCSAgIHVpbnQzMl90ICphcmdf Y291bnRfcHJvcHMpOwo+ICsKPiArLyogSU9DVEwgKi8KPiArCj4gK2ludCBkcm1fbW9kZV9vYmpf Z2V0X3Byb3BlcnRpZXNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK PiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiAraW50IGRybV9tb2Rl X29ial9zZXRfcHJvcGVydHlfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiArCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gKwo+ICAgLyogZHJt X2VuY29kZXIuYyAqLwo+ICAgaW50IGRybV9lbmNvZGVyX3JlZ2lzdGVyX2FsbChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgIHZvaWQgZHJtX2VuY29kZXJfdW5yZWdpc3Rlcl9hbGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9k ZV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9vYmplY3QuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jZWY5MTA0ZTgyODUKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX29iamVjdC5jCj4gQEAgLTAs MCArMSw0MzUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE2IEludGVsIENvcnBvcmF0 aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1 dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwo+ICsgKiBkb2N1bWVudGF0aW9uIGZv ciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhh dAo+ICsgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBh bmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0Cj4gKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKPiArICog dGhhdCB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2 ZXJ0aXNpbmcgb3IKPiArICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9m IHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAo+ICsgKiB3cml0dGVuIHByaW9yIHBlcm1p c3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKPiAr ICogYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3Nl LiAgSXQgaXMgcHJvdmlkZWQgImFzCj4gKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGll ZCB3YXJyYW50eS4KPiArICoKPiArICogVEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFM TCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCj4gKyAqIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywg SU4gTk8KPiArICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBP UiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAo+ICsg KiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdM SUdFTkNFIE9SIE9USEVSCj4gKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKPiArICogT0YgVEhJUyBT T0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+ICsK PiArI2luY2x1ZGUgImRybV9jcnRjX2ludGVybmFsLmgiCj4gKwo+ICsvKgo+ICsgKiBJbnRlcm5h bCBmdW5jdGlvbiB0byBhc3NpZ24gYSBzbG90IGluIHRoZSBvYmplY3QgaWRyIGFuZCBvcHRpb25h bGx5Cj4gKyAqIHJlZ2lzdGVyIHRoZSBvYmplY3QgaW50byB0aGUgaWRyLgo+ICsgKi8KPiAraW50 IGRybV9tb2RlX29iamVjdF9nZXRfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAg ICBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gKwkJCSAgICB1aW50MzJfdCBvYmpfdHlw ZSwKPiArCQkJICAgIGJvb2wgcmVnaXN0ZXJfb2JqLAo+ICsJCQkgICAgdm9pZCAoKm9ial9mcmVl X2NiKShzdHJ1Y3Qga3JlZiAqa3JlZikpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmZGV2LT5tb2RlX2NvbmZpZy5pZHJfbXV0ZXgpOwo+ICsJcmV0ID0gaWRyX2FsbG9jKCZk ZXYtPm1vZGVfY29uZmlnLmNydGNfaWRyLCByZWdpc3Rlcl9vYmogPyBvYmogOiBOVUxMLCAxLCAw LCBHRlBfS0VSTkVMKTsKPiArCWlmIChyZXQgPj0gMCkgewo+ICsJCS8qCj4gKwkJICogU2V0IHVw IHRoZSBvYmplY3QgbGlua2luZyB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgaWRyCj4gKwkJ ICogbG9jayBzbyB0aGF0IG90aGVyIHVzZXJzIGNhbid0IHNlZSBpbmNvbnNpc3RlbnQgc3RhdGUu Cj4gKwkJICovCj4gKwkJb2JqLT5pZCA9IHJldDsKPiArCQlvYmotPnR5cGUgPSBvYmpfdHlwZTsK PiArCQlpZiAob2JqX2ZyZWVfY2IpIHsKPiArCQkJb2JqLT5mcmVlX2NiID0gb2JqX2ZyZWVfY2I7 Cj4gKwkJCWtyZWZfaW5pdCgmb2JqLT5yZWZjb3VudCk7Cj4gKwkJfQo+ICsJfQo+ICsJbXV0ZXhf dW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIHJldCA8 IDAgPyByZXQgOiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX21vZGVfb2JqZWN0X2dldCAt IGFsbG9jYXRlIGEgbmV3IG1vZGVzZXQgaWRlbnRpZmllcgo+ICsgKiBAZGV2OiBEUk0gZGV2aWNl Cj4gKyAqIEBvYmo6IG9iamVjdCBwb2ludGVyLCB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRAo+ ICsgKiBAb2JqX3R5cGU6IG9iamVjdCB0eXBlCj4gKyAqCj4gKyAqIENyZWF0ZSBhIHVuaXF1ZSBp ZGVudGlmaWVyIGJhc2VkIG9uIEBwdHIgaW4gQGRldidzIGlkZW50aWZpZXIgc3BhY2UuICBVc2Vk Cj4gKyAqIGZvciB0cmFja2luZyBtb2RlcywgQ1JUQ3MgYW5kIGNvbm5lY3RvcnMuIE5vdGUgdGhh dCBkZXNwaXRlIHRoZSBfZ2V0IHBvc3RmaXgKPiArICogbW9kZXNldCBpZGVudGlmaWVycyBhcmUg X25vdF8gcmVmZXJlbmNlIGNvdW50ZWQuIEhlbmNlIGRvbid0IHVzZSB0aGlzIGZvcgo+ICsgKiBy ZWZlcmVuY2UgY291bnRlZCBtb2Rlc2V0IG9iamVjdHMgbGlrZSBmcmFtZWJ1ZmZlcnMuCj4gKyAq Cj4gKyAqIFJldHVybnM6Cj4gKyAqIFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWls dXJlLgo+ICsgKi8KPiAraW50IGRybV9tb2RlX29iamVjdF9nZXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiArCQkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLCB1aW50MzJfdCBvYmpfdHlw ZSkKPiArewo+ICsJcmV0dXJuIGRybV9tb2RlX29iamVjdF9nZXRfcmVnKGRldiwgb2JqLCBvYmpf dHlwZSwgdHJ1ZSwgTlVMTCk7Cj4gK30KPiArCj4gK3ZvaWQgZHJtX21vZGVfb2JqZWN0X3JlZ2lz dGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9v YmplY3QgKm9iaikKPiArewo+ICsJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5pZHJfbXV0 ZXgpOwo+ICsJaWRyX3JlcGxhY2UoJmRldi0+bW9kZV9jb25maWcuY3J0Y19pZHIsIG9iaiwgb2Jq LT5pZCk7Cj4gKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuaWRyX211dGV4KTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGRybV9tb2RlX29iamVjdF91bnJlZ2lzdGVyIC0gZnJlZSBhIG1v ZGVzZXQgaWRlbnRpZmVyCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICogQG9iamVjdDogb2Jq ZWN0IHRvIGZyZWUKPiArICoKPiArICogRnJlZSBAaWQgZnJvbSBAZGV2J3MgdW5pcXVlIGlkZW50 aWZpZXIgcG9vbC4KPiArICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRp bWVzLCBhbmQgZ3VhcmRzIGFnYWluc3QKPiArICogbXVsdGlwbGUgcmVtb3ZhbHMuCj4gKyAqIFRo ZXNlIG1vZGVzZXQgaWRlbnRpZmllcnMgYXJlIF9ub3RfIHJlZmVyZW5jZSBjb3VudGVkLiBIZW5j ZSBkb24ndCB1c2UgdGhpcwo+ICsgKiBmb3IgcmVmZXJlbmNlIGNvdW50ZWQgbW9kZXNldCBvYmpl Y3RzIGxpa2UgZnJhbWVidWZmZXJzLgo+ICsgKi8KPiArdm9pZCBkcm1fbW9kZV9vYmplY3RfdW5y ZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgc3RydWN0IGRybV9tb2RlX29i amVjdCAqb2JqZWN0KQo+ICt7Cj4gKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmlkcl9t dXRleCk7Cj4gKwlpZiAob2JqZWN0LT5pZCkgewo+ICsJCWlkcl9yZW1vdmUoJmRldi0+bW9kZV9j b25maWcuY3J0Y19pZHIsIG9iamVjdC0+aWQpOwo+ICsJCW9iamVjdC0+aWQgPSAwOwo+ICsJfQo+ ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gK30KPiArCj4g K3N0cnVjdCBkcm1fbW9kZV9vYmplY3QgKl9fZHJtX21vZGVfb2JqZWN0X2ZpbmQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiArCQkJCQkgICAgICAgdWludDMyX3QgaWQsIHVpbnQzMl90IHR5cGUp Cj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5pZHJfbXV0ZXgpOwo+ICsJb2JqID0gaWRyX2ZpbmQo JmRldi0+bW9kZV9jb25maWcuY3J0Y19pZHIsIGlkKTsKPiArCWlmIChvYmogJiYgdHlwZSAhPSBE Uk1fTU9ERV9PQkpFQ1RfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQo+ICsJCW9iaiA9IE5VTEw7 Cj4gKwlpZiAob2JqICYmIG9iai0+aWQgIT0gaWQpCj4gKwkJb2JqID0gTlVMTDsKPiArCj4gKwlp ZiAob2JqICYmIG9iai0+ZnJlZV9jYikgewo+ICsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8o Jm9iai0+cmVmY291bnQpKQo+ICsJCQlvYmogPSBOVUxMOwo+ICsJfQo+ICsJbXV0ZXhfdW5sb2Nr KCZkZXYtPm1vZGVfY29uZmlnLmlkcl9tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIG9iajsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGRybV9tb2RlX29iamVjdF9maW5kIC0gbG9vayB1cCBhIGRybSBvYmpl Y3Qgd2l0aCBzdGF0aWMgbGlmZXRpbWUKPiArICogQGRldjogZHJtIGRldmljZQo+ICsgKiBAaWQ6 IGlkIG9mIHRoZSBtb2RlIG9iamVjdAo+ICsgKiBAdHlwZTogdHlwZSBvZiB0aGUgbW9kZSBvYmpl Y3QKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvb2sgdXAgYSBtb2Rlc2V0 IG9iamVjdC4gSXQgd2lsbCBhY3F1aXJlIGEKPiArICogcmVmZXJlbmNlIGZvciByZWZlcmVuY2Ug Y291bnRlZCBvYmplY3RzLiBUaGlzIHJlZmVyZW5jZSBtdXN0IGJlIGRyb3BwZWQgYWdhaW4KPiAr ICogYnkgY2FsbGluZCBkcm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2UoKS4KPiArICovCj4gK3N0 cnVjdCBkcm1fbW9kZV9vYmplY3QgKmRybV9tb2RlX29iamVjdF9maW5kKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gKwkJdWludDMyX3QgaWQsIHVpbnQzMl90IHR5cGUpCj4gK3sKPiArCXN0cnVj dCBkcm1fbW9kZV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gKwo+ICsJb2JqID0gX19kcm1fbW9kZV9v YmplY3RfZmluZChkZXYsIGlkLCB0eXBlKTsKPiArCXJldHVybiBvYmo7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fbW9kZV9vYmplY3RfZmluZCk7Cj4gKwo+ICsvKioKPiArICogZHJtX21vZGVf b2JqZWN0X3VucmVmZXJlbmNlIC0gZGVjciB0aGUgb2JqZWN0IHJlZmNudAo+ICsgKiBAb2JqOiBt b2RlX29iamVjdAo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9ucyBkZWNyZW1lbnRzIHRoZSBvYmpl Y3QncyByZWZjb3VudCBpZiBpdCBpcyBhIHJlZmNvdW50ZWQgbW9kZXNldAoKcy9mdW5jdGlvbnMv ZnVuY3Rpb24KCj4gKyAqIG9iamVjdC4gSXQgaXMgYSBuby1vcCBvbiBhbnkgb3RoZXIgb2JqZWN0 LiBUaGlzIGlzIHVzZWQgdG8gZHJvcCByZWZlcmVuY2VzCj4gKyAqIGFjcXVpcmVkIHdpdGggZHJt X21vZGVfb2JqZWN0X3JlZmVyZW5jZSgpLgo+ICsgKi8KPiArdm9pZCBkcm1fbW9kZV9vYmplY3Rf dW5yZWZlcmVuY2Uoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlpZiAob2Jq LT5mcmVlX2NiKSB7Cj4gKwkJRFJNX0RFQlVHKCJPQkogSUQ6ICVkICglZClcbiIsIG9iai0+aWQs IGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7Cj4gKwkJa3JlZl9wdXQoJm9i ai0+cmVmY291bnQsIG9iai0+ZnJlZV9jYik7Cj4gKwl9Cj4gK30KPiArRVhQT1JUX1NZTUJPTChk cm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2UpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9tb2RlX29i amVjdF9yZWZlcmVuY2UgLSBpbmNyIHRoZSBvYmplY3QgcmVmY250Cj4gKyAqIEBvYmo6IG1vZGVf b2JqZWN0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb25zIGluY3JlbWVudHMgdGhlIG9iamVjdCdz IHJlZmNvdW50IGlmIGl0IGlzIGEgcmVmY291bnRlZCBtb2Rlc2V0CgpzL2Z1bmN0aW9ucy9mdW5j dGlvbgoKPiArICogb2JqZWN0LiBJdCBpcyBhIG5vLW9wIG9uIGFueSBvdGhlciBvYmplY3QuIFJl ZmVyZW5jZXMgc2hvdWxkIGJlIGRyb3BwZWQgYWdhaW4KPiArICogYnkgY2FsbGluZyBkcm1fbW9k ZV9vYmplY3RfdW5yZWZlcmVuY2UoKS4KPiArICovCj4gK3ZvaWQgZHJtX21vZGVfb2JqZWN0X3Jl ZmVyZW5jZShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmopCj4gK3sKPiArCWlmIChvYmotPmZy ZWVfY2IpIHsKPiArCQlEUk1fREVCVUcoIk9CSiBJRDogJWQgKCVkKVxuIiwgb2JqLT5pZCwgYXRv bWljX3JlYWQoJm9iai0+cmVmY291bnQucmVmY291bnQpKTsKPiArCQlrcmVmX2dldCgmb2JqLT5y ZWZjb3VudCk7Cj4gKwl9Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9vYmplY3RfcmVm ZXJlbmNlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSAtIGF0 dGFjaCBhIHByb3BlcnR5IHRvIGEgbW9kZXNldCBvYmplY3QKPiArICogQG9iajogZHJtIG1vZGVz ZXQgb2JqZWN0Cj4gKyAqIEBwcm9wZXJ0eTogcHJvcGVydHkgdG8gYXR0YWNoCj4gKyAqIEBpbml0 X3ZhbDogaW5pdGlhbCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKPiArICoKPiArICogVGhpcyBhdHRh Y2hlcyB0aGUgZ2l2ZW4gcHJvcGVydHkgdG8gdGhlIG1vZGVzZXQgb2JqZWN0IHdpdGggdGhlIGdp dmVuIGluaXRpYWwKPiArICogdmFsdWUuIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBm YWlsIHNpbmNlIHRoZSBwcm9wZXJ0aWVzIGFyZSBzdG9yZWQgaW4KPiArICogYSBzdGF0aWNhbGx5 IHNpemVkIGFycmF5Lgo+ICsgKi8KPiArdm9pZCBkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShz dHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gKwkJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwKPiArCQkJCXVpbnQ2NF90IGluaXRfdmFsKQo+ICt7Cj4gKwlpbnQgY291bnQgPSBv YmotPnByb3BlcnRpZXMtPmNvdW50Owo+ICsKPiArCWlmIChjb3VudCA9PSBEUk1fT0JKRUNUX01B WF9QUk9QRVJUWSkgewo+ICsJCVdBUk4oMSwgIkZhaWxlZCB0byBhdHRhY2ggb2JqZWN0IHByb3Bl cnR5ICh0eXBlOiAweCV4KS4gUGxlYXNlICIKPiArCQkJImluY3JlYXNlIERSTV9PQkpFQ1RfTUFY X1BST1BFUlRZIGJ5IDEgZm9yIGVhY2ggdGltZSAiCj4gKwkJCSJ5b3Ugc2VlIHRoaXMgbWVzc2Fn ZSBvbiB0aGUgc2FtZSBvYmplY3QgdHlwZS5cbiIsCj4gKwkJCW9iai0+dHlwZSk7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCW9iai0+cHJvcGVydGllcy0+cHJvcGVydGllc1tjb3VudF0gPSBw cm9wZXJ0eTsKPiArCW9iai0+cHJvcGVydGllcy0+dmFsdWVzW2NvdW50XSA9IGluaXRfdmFsOwo+ ICsJb2JqLT5wcm9wZXJ0aWVzLT5jb3VudCsrOwo+ICsJaWYgKHByb3BlcnR5LT5mbGFncyAmIERS TV9NT0RFX1BST1BfQVRPTUlDKQo+ICsJCW9iai0+cHJvcGVydGllcy0+YXRvbWljX2NvdW50Kys7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSk7Cj4gKwo+ ICsvKioKPiArICogZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUgLSBzZXQgdGhlIHZhbHVl IG9mIGEgcHJvcGVydHkKPiArICogQG9iajogZHJtIG1vZGUgb2JqZWN0IHRvIHNldCBwcm9wZXJ0 eSB2YWx1ZSBmb3IKPiArICogQHByb3BlcnR5OiBwcm9wZXJ0eSB0byBzZXQKPiArICogQHZhbDog dmFsdWUgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBzZXQgdG8KPiArICoKPiArICogVGhpcyBmdW5j dGlvbnMgc2V0cyBhIGdpdmVuIHByb3BlcnR5IG9uIGEgZ2l2ZW4gb2JqZWN0LiBUaGlzIGZ1bmN0 aW9uIG9ubHkKCnMvZnVuY3Rpb25zL2Z1bmN0aW9uCgpPdGhlcndpc2U6CgpSZXZpZXdlZC1ieTog QXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KCkFyY2hpdAoKPiArICogY2hh bmdlcyB0aGUgc29mdHdhcmUgc3RhdGUgb2YgdGhlIHByb3BlcnR5LCBpdCBkb2VzIG5vdCBjYWxs IGludG8gdGhlCj4gKyAqIGRyaXZlcidzIC0+c2V0X3Byb3BlcnR5IGNhbGxiYWNrLgo+ICsgKgo+ ICsgKiBSZXR1cm5zOgo+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KPiArICovCj4gK2ludCBkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZShzdHJ1Y3QgZHJt X21vZGVfb2JqZWN0ICpvYmosCj4gKwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5 LCB1aW50NjRfdCB2YWwpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBv YmotPnByb3BlcnRpZXMtPmNvdW50OyBpKyspIHsKPiArCQlpZiAob2JqLT5wcm9wZXJ0aWVzLT5w cm9wZXJ0aWVzW2ldID09IHByb3BlcnR5KSB7Cj4gKwkJCW9iai0+cHJvcGVydGllcy0+dmFsdWVz W2ldID0gdmFsOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1F SU5WQUw7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1 ZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUgLSByZXRy aWV2ZSB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eQo+ICsgKiBAb2JqOiBkcm0gbW9kZSBvYmplY3Qg dG8gZ2V0IHByb3BlcnR5IHZhbHVlIGZyb20KPiArICogQHByb3BlcnR5OiBwcm9wZXJ0eSB0byBy ZXRyaWV2ZQo+ICsgKiBAdmFsOiBzdG9yYWdlIGZvciB0aGUgcHJvcGVydHkgdmFsdWUKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNvZnRhcmUgc3RhdGUgb2YgdGhlIGdp dmVuIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4KPiArICogcHJvcGVydHkuIFNpbmNlIHRoZXJlIGlz IG5vIGRyaXZlciBjYWxsYmFjayB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBwcm9wZXJ0eQo+ICsg KiB2YWx1ZSB0aGlzIG1pZ2h0IGJlIG91dCBvZiBzeW5jIHdpdGggdGhlIGhhcmR3YXJlLCBkZXBl bmRpbmcgdXBvbiB0aGUgZHJpdmVyCj4gKyAqIGFuZCBwcm9wZXJ0eS4KPiArICoKPiArICogUmV0 dXJuczoKPiArICogWmVybyBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAq Lwo+ICtpbnQgZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUoc3RydWN0IGRybV9tb2RlX29i amVjdCAqb2JqLAo+ICsJCQkJICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0 X3QgKnZhbCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJLyogcmVhZC1vbmx5IHByb3BlcnRpZXMg YnlwYXNzIGF0b21pYyBtZWNoYW5pc20gYW5kIHN0aWxsIHN0b3JlCj4gKwkgKiB0aGVpciB2YWx1 ZSBpbiBvYmotPnByb3BlcnRpZXMtPnZhbHVlc1tdLi4gbW9zdGx5IHRvIGF2b2lkCj4gKwkgKiBo YXZpbmcgdG8gZGVhbCB3LyBFRElEIGFuZCBzaW1pbGFyIHByb3BzIGluIGF0b21pYyBwYXRoczoK PiArCSAqLwo+ICsJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUocHJvcGVydHktPmRldiwgRFJJ VkVSX0FUT01JQykgJiYKPiArCQkJIShwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0lN TVVUQUJMRSkpCj4gKwkJcmV0dXJuIGRybV9hdG9taWNfZ2V0X3Byb3BlcnR5KG9iaiwgcHJvcGVy dHksIHZhbCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG9iai0+cHJvcGVydGllcy0+Y291bnQ7 IGkrKykgewo+ICsJCWlmIChvYmotPnByb3BlcnRpZXMtPnByb3BlcnRpZXNbaV0gPT0gcHJvcGVy dHkpIHsKPiArCQkJKnZhbCA9IG9iai0+cHJvcGVydGllcy0+dmFsdWVzW2ldOwo+ICsJCQlyZXR1 cm4gMDsKPiArCQl9Cj4gKwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUpOwo+ICsKPiArLyogaGVs cGVyIGZvciBnZXRjb25uZWN0b3IgYW5kIGdldHByb3BlcnRpZXMgaW9jdGxzICovCj4gK2ludCBk cm1fbW9kZV9vYmplY3RfZ2V0X3Byb3BlcnRpZXMoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2Jq LCBib29sIGF0b21pYywKPiArCQkJCSAgIHVpbnQzMl90IF9fdXNlciAqcHJvcF9wdHIsCj4gKwkJ CQkgICB1aW50NjRfdCBfX3VzZXIgKnByb3BfdmFsdWVzLAo+ICsJCQkJICAgdWludDMyX3QgKmFy Z19jb3VudF9wcm9wcykKPiArewo+ICsJaW50IHByb3BzX2NvdW50Owo+ICsJaW50IGksIHJldCwg Y29waWVkOwo+ICsKPiArCXByb3BzX2NvdW50ID0gb2JqLT5wcm9wZXJ0aWVzLT5jb3VudDsKPiAr CWlmICghYXRvbWljKQo+ICsJCXByb3BzX2NvdW50IC09IG9iai0+cHJvcGVydGllcy0+YXRvbWlj X2NvdW50Owo+ICsKPiArCWlmICgoKmFyZ19jb3VudF9wcm9wcyA+PSBwcm9wc19jb3VudCkgJiYg cHJvcHNfY291bnQpIHsKPiArCQlmb3IgKGkgPSAwLCBjb3BpZWQgPSAwOyBjb3BpZWQgPCBwcm9w c19jb3VudDsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3AgPSBvYmotPnBy b3BlcnRpZXMtPnByb3BlcnRpZXNbaV07Cj4gKwkJCXVpbnQ2NF90IHZhbDsKPiArCj4gKwkJCWlm ICgocHJvcC0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0FUT01JQykgJiYgIWF0b21pYykKPiArCQkJ CWNvbnRpbnVlOwo+ICsKPiArCQkJcmV0ID0gZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUo b2JqLCBwcm9wLCAmdmFsKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCXJldHVybiByZXQ7Cj4gKwo+ ICsJCQlpZiAocHV0X3VzZXIocHJvcC0+YmFzZS5pZCwgcHJvcF9wdHIgKyBjb3BpZWQpKQo+ICsJ CQkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJCQlpZiAocHV0X3VzZXIodmFsLCBwcm9wX3ZhbHVl cyArIGNvcGllZCkpCj4gKwkJCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwkJCWNvcGllZCsrOwo+ ICsJCX0KPiArCX0KPiArCSphcmdfY291bnRfcHJvcHMgPSBwcm9wc19jb3VudDsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRybV9tb2RlX29ial9nZXRfcHJvcGVydGll c19pb2N0bCAtIGdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIG9iamVjdCdzIHByb3BlcnR5Cj4g KyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICogQGRhdGE6IGlvY3RsIGRhdGEKPiArICogQGZpbGVf cHJpdjogRFJNIGZpbGUgaW5mbwo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0 aGUgY3VycmVudCB2YWx1ZSBmb3IgYW4gb2JqZWN0J3MgcHJvcGVydHkuIENvbXBhcmVkCj4gKyAq IHRvIHRoZSBjb25uZWN0b3Igc3BlY2lmaWMgaW9jdGwgdGhpcyBvbmUgaXMgZXh0ZW5kZWQgdG8g YWxzbyB3b3JrIG9uIGNydGMgYW5kCj4gKyAqIHBsYW5lIG9iamVjdHMuCj4gKyAqCj4gKyAqIENh bGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFpl cm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiArICovCj4gK2ludCBk cm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKPiArCQkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfb2JqX2dldF9wcm9wZXJ0aWVzICphcmcgPSBkYXRhOwo+ICsJ c3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYg KCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7Cj4gKwo+ICsJb2Jq ID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBhcmctPm9ial9pZCwgYXJnLT5vYmpfdHlwZSk7 Cj4gKwlpZiAoIW9iaikgewo+ICsJCXJldCA9IC1FTk9FTlQ7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9 Cj4gKwlpZiAoIW9iai0+cHJvcGVydGllcykgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290 byBvdXRfdW5yZWY7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX21vZGVfb2JqZWN0X2dldF9wcm9w ZXJ0aWVzKG9iaiwgZmlsZV9wcml2LT5hdG9taWMsCj4gKwkJCSh1aW50MzJfdCBfX3VzZXIgKiko dW5zaWduZWQgbG9uZykoYXJnLT5wcm9wc19wdHIpLAo+ICsJCQkodWludDY0X3QgX191c2VyICop KHVuc2lnbmVkIGxvbmcpKGFyZy0+cHJvcF92YWx1ZXNfcHRyKSwKPiArCQkJJmFyZy0+Y291bnRf cHJvcHMpOwo+ICsKPiArb3V0X3VucmVmOgo+ICsJZHJtX21vZGVfb2JqZWN0X3VucmVmZXJlbmNl KG9iaik7Cj4gK291dDoKPiArCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK2ludCBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5X2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJCQkgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5 ICphcmcgPSBkYXRhOwo+ICsJc3RydWN0IGRybV9tb2RlX29iamVjdCAqYXJnX29iajsKPiArCXN0 cnVjdCBkcm1fbW9kZV9vYmplY3QgKnByb3Bfb2JqOwo+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcGVydHk7Cj4gKwlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKPiArCXN0cnVjdCBkcm1fbW9kZV9v YmplY3QgKnJlZjsKPiArCj4gKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklW RVJfTU9ERVNFVCkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZHJtX21vZGVzZXRfbG9j a19hbGwoZGV2KTsKPiArCj4gKwlhcmdfb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBh cmctPm9ial9pZCwgYXJnLT5vYmpfdHlwZSk7Cj4gKwlpZiAoIWFyZ19vYmopIHsKPiArCQlyZXQg PSAtRU5PRU5UOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJaWYgKCFhcmdfb2JqLT5wcm9wZXJ0 aWVzKQo+ICsJCWdvdG8gb3V0X3VucmVmOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBhcmdfb2Jq LT5wcm9wZXJ0aWVzLT5jb3VudDsgaSsrKQo+ICsJCWlmIChhcmdfb2JqLT5wcm9wZXJ0aWVzLT5w cm9wZXJ0aWVzW2ldLT5iYXNlLmlkID09IGFyZy0+cHJvcF9pZCkKPiArCQkJYnJlYWs7Cj4gKwo+ ICsJaWYgKGkgPT0gYXJnX29iai0+cHJvcGVydGllcy0+Y291bnQpCj4gKwkJZ290byBvdXRfdW5y ZWY7Cj4gKwo+ICsJcHJvcF9vYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGFyZy0+cHJv cF9pZCwKPiArCQkJCQlEUk1fTU9ERV9PQkpFQ1RfUFJPUEVSVFkpOwo+ICsJaWYgKCFwcm9wX29i aikgewo+ICsJCXJldCA9IC1FTk9FTlQ7Cj4gKwkJZ290byBvdXRfdW5yZWY7Cj4gKwl9Cj4gKwlw cm9wZXJ0eSA9IG9ial90b19wcm9wZXJ0eShwcm9wX29iaik7Cj4gKwo+ICsJaWYgKCFkcm1fcHJv cGVydHlfY2hhbmdlX3ZhbGlkX2dldChwcm9wZXJ0eSwgYXJnLT52YWx1ZSwgJnJlZikpCj4gKwkJ Z290byBvdXRfdW5yZWY7Cj4gKwo+ICsJc3dpdGNoIChhcmdfb2JqLT50eXBlKSB7Cj4gKwljYXNl IERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1I6Cj4gKwkJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9y X3NldF9vYmpfcHJvcChhcmdfb2JqLCBwcm9wZXJ0eSwKPiArCQkJCQkJICAgICAgYXJnLT52YWx1 ZSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9NT0RFX09CSkVDVF9DUlRDOgo+ICsJCXJldCA9 IGRybV9tb2RlX2NydGNfc2V0X29ial9wcm9wKGFyZ19vYmosIHByb3BlcnR5LCBhcmctPnZhbHVl KTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX01PREVfT0JKRUNUX1BMQU5FOgo+ICsJCXJldCA9 IGRybV9tb2RlX3BsYW5lX3NldF9vYmpfcHJvcChvYmpfdG9fcGxhbmUoYXJnX29iaiksCj4gKwkJ CQkJCSAgcHJvcGVydHksIGFyZy0+dmFsdWUpOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWRy bV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfcHV0KHByb3BlcnR5LCByZWYpOwo+ICsKPiArb3V0X3Vu cmVmOgo+ICsJZHJtX21vZGVfb2JqZWN0X3VucmVmZXJlbmNlKGFyZ19vYmopOwo+ICtvdXQ6Cj4g Kwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaAo+IGluZGV4IGYxNTc2ZGI2YzA0NC4uNjZiN2Q2NzQ0ZGQyIDEwMDY0NAo+IC0t LSBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9j b25uZWN0b3IuaAo+IEBAIC0yNSw3ICsyNSw3IEBACj4KPiAgICNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+Cj4gICAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KPiAtI2luY2x1ZGUgPGRybS9kcm1fbW9k ZXNldC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+Cj4gICBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3M7Cj4gICBzdHJ1Y3QgZHJtX2RldmljZTsKPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgK PiBpbmRleCA2MWQ4MWZiM2M4ZmMuLjFhYmNjMTgyZTkyYiAxMDA2NDQKPiAtLS0gYS9pbmNsdWRl L2RybS9kcm1fY3J0Yy5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+IEBAIC0zNiw3 ICszNiw3IEBACj4gICAjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX2ZvdXJjYy5oPgo+ICAgI2luY2x1 ZGUgPGRybS9kcm1fbW9kZXNldF9sb2NrLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL2RybV9yZWN0Lmg+ Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXQuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbW9k ZV9vYmplY3QuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX2ZyYW1lYnVmZmVyLmg+Cj4gICAjaW5j bHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+ Cj4gQEAgLTIwOTMsMTYgKzIwOTMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZHJtX3Byb3BlcnR5 X3R5cGVfaXMoc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gICAJcmV0dXJuIHByb3Bl cnR5LT5mbGFncyAmIHR5cGU7Cj4gICB9Cj4KPiAtZXh0ZXJuIGludCBkcm1fb2JqZWN0X3Byb3Bl cnR5X3NldF92YWx1ZShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gLQkJCQkJIHN0cnVj dCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAo+IC0JCQkJCSB1aW50NjRfdCB2YWwpOwo+IC1leHRl cm4gaW50IGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKHN0cnVjdCBkcm1fbW9kZV9vYmpl Y3QgKm9iaiwKPiAtCQkJCQkgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gLQkJCQkJ IHVpbnQ2NF90ICp2YWx1ZSk7Cj4gLQo+IC1leHRlcm4gdm9pZCBkcm1fb2JqZWN0X2F0dGFjaF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gLQkJCQkgICAgICAgc3RydWN0 IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gLQkJCQkgICAgICAgdWludDY0X3QgaW5pdF92YWwp Owo+ICAgZXh0ZXJuIHN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9wcm9wZXJ0eV9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGZsYWdzLAo+ICAgCQkJCQkJY29uc3QgY2hhciAqbmFt ZSwgaW50IG51bV92YWx1ZXMpOwo+ICAgZXh0ZXJuIHN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9w cm9wZXJ0eV9jcmVhdGVfZW51bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MsCj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9lbmNvZGVyLmggYi9pbmNsdWRlL2RybS9kcm1f ZW5jb2Rlci5oCj4gaW5kZXggYjA0OTc0OGIyNTE0Li40ZjA2NmVlZGQwMzkgMTAwNjQ0Cj4gLS0t IGEvaW5jbHVkZS9kcm0vZHJtX2VuY29kZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9lbmNv ZGVyLmgKPiBAQCAtMjUsNyArMjUsNyBAQAo+Cj4gICAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ ICAgI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX21vZGVzZXQu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbW9kZV9vYmplY3QuaD4KPgo+ICAgLyoqCj4gICAgKiBz dHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgLSBlbmNvZGVyIGNvbnRyb2xzCj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybV9mcmFtZWJ1ZmZlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2ZyYW1lYnVm ZmVyLmgKPiBpbmRleCA1MGRlYjQwZDNiZmQuLmIyNTU0YzUwYTkwMyAxMDA2NDQKPiAtLS0gYS9p bmNsdWRlL2RybS9kcm1fZnJhbWVidWZmZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9mcmFt ZWJ1ZmZlci5oCj4gQEAgLTI1LDcgKzI1LDcgQEAKPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KPiAgICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgo+IC0jaW5jbHVkZSA8ZHJtL2RybV9tb2Rl c2V0Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVfb2JqZWN0Lmg+Cj4KPiAgIHN0cnVjdCBk cm1fZnJhbWVidWZmZXI7Cj4gICBzdHJ1Y3QgZHJtX2ZpbGU7Cj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2RybV9tb2RlX29iamVjdC5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVfb2JqZWN0LmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzBlNDQxNDI5OWY3 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2RlX29iamVjdC5oCj4g QEAgLTAsMCArMSw4MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSW50ZWwgQ29y cG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlz dHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCj4gKyAqIGRvY3VtZW50YXRp b24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRl ZCB0aGF0Cj4gKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKPiArICogbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAo+ ICsgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBp biBhZHZlcnRpc2luZyBvcgo+ICsgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRp b24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCj4gKyAqIHdyaXR0ZW4gcHJpb3Ig cGVybWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9u cwo+ICsgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1 cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKPiArICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBp bXBsaWVkIHdhcnJhbnR5Lgo+ICsgKgo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xB SU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiArICogSU5D TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTLCBJTiBOTwo+ICsgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1B R0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0Us Cj4gKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IE5FR0xJR0VOQ0UgT1IgT1RIRVIKPiArICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQo+ICsgKiBPRiBU SElTIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19EUk1fTU9ERVNFVF9IX18KPiAr I2RlZmluZSBfX0RSTV9NT0RFU0VUX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4K PiArc3RydWN0IGRybV9vYmplY3RfcHJvcGVydGllczsKPiArc3RydWN0IGRybV9wcm9wZXJ0eTsK PiArCj4gK3N0cnVjdCBkcm1fbW9kZV9vYmplY3Qgewo+ICsJdWludDMyX3QgaWQ7Cj4gKwl1aW50 MzJfdCB0eXBlOwo+ICsJc3RydWN0IGRybV9vYmplY3RfcHJvcGVydGllcyAqcHJvcGVydGllczsK PiArCXN0cnVjdCBrcmVmIHJlZmNvdW50Owo+ICsJdm9pZCAoKmZyZWVfY2IpKHN0cnVjdCBrcmVm ICprcmVmKTsKPiArfTsKPiArCj4gKyNkZWZpbmUgRFJNX09CSkVDVF9NQVhfUFJPUEVSVFkgMjQK PiArc3RydWN0IGRybV9vYmplY3RfcHJvcGVydGllcyB7Cj4gKwlpbnQgY291bnQsIGF0b21pY19j b3VudDsKPiArCS8qIE5PVEU6IGlmIHdlIGV2ZXIgc3RhcnQgZHluYW1pY2FsbHkgZGVzdHJveWlu ZyBwcm9wZXJ0aWVzIChpZS4KPiArCSAqIG5vdCBhdCBkcm1fbW9kZV9jb25maWdfY2xlYW51cCgp IHRpbWUpLCB0aGVuIHdlJ2QgaGF2ZSB0byBkbwo+ICsJICogYSBiZXR0ZXIgam9iIG9mIGRldGFj aGluZyBwcm9wZXJ0eSBmcm9tIG1vZGUgb2JqZWN0cyB0byBhdm9pZAo+ICsJICogZGFuZ2xpbmcg cHJvcGVydHkgcG9pbnRlcnM6Cj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3Bl cnRpZXNbRFJNX09CSkVDVF9NQVhfUFJPUEVSVFldOwo+ICsJLyogZG8gbm90IHJlYWQvd3JpdGUg dmFsdWVzIGRpcmVjdGx5LCBidXQgdXNlIGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKCkK PiArCSAqIGFuZCBkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZSgpOgo+ICsJICovCj4gKwl1 aW50NjRfdCB2YWx1ZXNbRFJNX09CSkVDVF9NQVhfUFJPUEVSVFldOwo+ICt9Owo+ICsKPiArLyog QXZvaWQgYm9pbGVycGxhdGUuICBJJ20gdGlyZWQgb2YgdHlwaW5nLiAqLwo+ICsjZGVmaW5lIERS TV9FTlVNX05BTUVfRk4oZm5uYW1lLCBsaXN0KQkJCQlcCj4gKwljb25zdCBjaGFyICpmbm5hbWUo aW50IHZhbCkJCQkJXAo+ICsJewkJCQkJCQlcCj4gKwkJaW50IGk7CQkJCQkJXAo+ICsJCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxpc3QpOyBpKyspIHsJXAo+ICsJCQlpZiAobGlzdFtpXS50 eXBlID09IHZhbCkJCVwKPiArCQkJCXJldHVybiBsaXN0W2ldLm5hbWU7CQlcCj4gKwkJfQkJCQkJ CVwKPiArCQlyZXR1cm4gIih1bmtub3duKSI7CQkJCVwKPiArCX0KPiArCj4gK3N0cnVjdCBkcm1f bW9kZV9vYmplY3QgKmRybV9tb2RlX29iamVjdF9maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gKwkJCQkJICAgICB1aW50MzJfdCBpZCwgdWludDMyX3QgdHlwZSk7Cj4gK3ZvaWQgZHJtX21v ZGVfb2JqZWN0X3JlZmVyZW5jZShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmopOwo+ICt2b2lk IGRybV9tb2RlX29iamVjdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmop Owo+ICsKPiAraW50IGRybV9vYmplY3RfcHJvcGVydHlfc2V0X3ZhbHVlKHN0cnVjdCBkcm1fbW9k ZV9vYmplY3QgKm9iaiwKPiArCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4g KwkJCQkgIHVpbnQ2NF90IHZhbCk7Cj4gK2ludCBkcm1fb2JqZWN0X3Byb3BlcnR5X2dldF92YWx1 ZShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gKwkJCQkgIHN0cnVjdCBkcm1fcHJvcGVy dHkgKnByb3BlcnR5LAo+ICsJCQkJICB1aW50NjRfdCAqdmFsdWUpOwo+ICsKPiArdm9pZCBkcm1f b2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gKwkJ CQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiArCQkJCXVpbnQ2NF90IGluaXRfdmFs KTsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2Rlcy5oIGIvaW5j bHVkZS9kcm0vZHJtX21vZGVzLmgKPiBpbmRleCAxNjIxZTliMzIzMzAuLjAxMWYxOTlkM2JjZiAx MDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZXMuaAo+ICsrKyBiL2luY2x1ZGUvZHJt L2RybV9tb2Rlcy5oCj4gQEAgLTI3LDcgKzI3LDcgQEAKPiAgICNpZm5kZWYgX19EUk1fTU9ERVNf SF9fCj4gICAjZGVmaW5lIF9fRFJNX01PREVTX0hfXwo+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX21v ZGVzZXQuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fbW9kZV9vYmplY3QuaD4KPiAgICNpbmNsdWRl IDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+Cj4gICAvKgo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fbW9kZXNldC5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXQuaAo+IGRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IGZlOTEwZDVlZmUxMi4uMDAwMDAwMDAwMDAwCj4gLS0tIGEv aW5jbHVkZS9kcm0vZHJtX21vZGVzZXQuaAo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw3MCArMCww IEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCAoYykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0g Kgo+IC0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQg c2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKPiAtICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1 cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKPiAtICog dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQg Ym90aCB0aGF0IGNvcHlyaWdodAo+IC0gKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCj4gLSAqIHRoYXQgdGhl IG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5n IG9yCj4gLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYywKPiAtICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAg VGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCj4gLSAqIGFib3V0 IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlz IHByb3ZpZGVkICJhcwo+IC0gKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFu dHkuCj4gLSAqCj4gLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFO VElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAo+IC0gKiBJTkNMVURJTkcgQUxMIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCj4g LSAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBT UEVDSUFMLCBJTkRJUkVDVCBPUgo+IC0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB TUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKPiAtICogREFUQSBP UiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP UiBPVEhFUgo+IC0gKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCj4gLSAqIE9GIFRISVMgU09GVFdBUkUu Cj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBfX0RSTV9NT0RFU0VUX0hfXwo+IC0jZGVmaW5lIF9fRFJN X01PREVTRVRfSF9fCj4gLQo+IC0jaW5jbHVkZSA8bGludXgva3JlZi5oPgo+IC1zdHJ1Y3QgZHJt X29iamVjdF9wcm9wZXJ0aWVzOwo+IC1zdHJ1Y3QgZHJtX3Byb3BlcnR5Owo+IC0KPiAtc3RydWN0 IGRybV9tb2RlX29iamVjdCB7Cj4gLQl1aW50MzJfdCBpZDsKPiAtCXVpbnQzMl90IHR5cGU7Cj4g LQlzdHJ1Y3QgZHJtX29iamVjdF9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzOwo+IC0Jc3RydWN0IGty ZWYgcmVmY291bnQ7Cj4gLQl2b2lkICgqZnJlZV9jYikoc3RydWN0IGtyZWYgKmtyZWYpOwo+IC19 Owo+IC0KPiAtI2RlZmluZSBEUk1fT0JKRUNUX01BWF9QUk9QRVJUWSAyNAo+IC1zdHJ1Y3QgZHJt X29iamVjdF9wcm9wZXJ0aWVzIHsKPiAtCWludCBjb3VudCwgYXRvbWljX2NvdW50Owo+IC0JLyog Tk9URTogaWYgd2UgZXZlciBzdGFydCBkeW5hbWljYWxseSBkZXN0cm95aW5nIHByb3BlcnRpZXMg KGllLgo+IC0JICogbm90IGF0IGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKCkgdGltZSksIHRoZW4g d2UnZCBoYXZlIHRvIGRvCj4gLQkgKiBhIGJldHRlciBqb2Igb2YgZGV0YWNoaW5nIHByb3BlcnR5 IGZyb20gbW9kZSBvYmplY3RzIHRvIGF2b2lkCj4gLQkgKiBkYW5nbGluZyBwcm9wZXJ0eSBwb2lu dGVyczoKPiAtCSAqLwo+IC0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydGllc1tEUk1fT0JK RUNUX01BWF9QUk9QRVJUWV07Cj4gLQkvKiBkbyBub3QgcmVhZC93cml0ZSB2YWx1ZXMgZGlyZWN0 bHksIGJ1dCB1c2UgZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUoKQo+IC0JICogYW5kIGRy bV9vYmplY3RfcHJvcGVydHlfc2V0X3ZhbHVlKCk6Cj4gLQkgKi8KPiAtCXVpbnQ2NF90IHZhbHVl c1tEUk1fT0JKRUNUX01BWF9QUk9QRVJUWV07Cj4gLX07Cj4gLQo+IC0vKiBBdm9pZCBib2lsZXJw bGF0ZS4gIEknbSB0aXJlZCBvZiB0eXBpbmcuICovCj4gLSNkZWZpbmUgRFJNX0VOVU1fTkFNRV9G Tihmbm5hbWUsIGxpc3QpCQkJCVwKPiAtCWNvbnN0IGNoYXIgKmZubmFtZShpbnQgdmFsKQkJCQlc Cj4gLQl7CQkJCQkJCVwKPiAtCQlpbnQgaTsJCQkJCQlcCj4gLQkJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUobGlzdCk7IGkrKykgewlcCj4gLQkJCWlmIChsaXN0W2ldLnR5cGUgPT0gdmFsKQkJ XAo+IC0JCQkJcmV0dXJuIGxpc3RbaV0ubmFtZTsJCVwKPiAtCQl9CQkJCQkJXAo+IC0JCXJldHVy biAiKHVua25vd24pIjsJCQkJXAo+IC0JfQo+IC0KPiAtc3RydWN0IGRybV9tb2RlX29iamVjdCAq ZHJtX21vZGVfb2JqZWN0X2ZpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAtCQkJCQkgICAg IHVpbnQzMl90IGlkLCB1aW50MzJfdCB0eXBlKTsKPiAtdm9pZCBkcm1fbW9kZV9vYmplY3RfcmVm ZXJlbmNlKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaik7Cj4gLXZvaWQgZHJtX21vZGVfb2Jq ZWN0X3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaik7Cj4gLQo+IC0jZW5k aWYKPgoKLS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9m IENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=