From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC][PATCH 2/2] drm/arm: Add support for Mali Display Processors Date: Tue, 12 Apr 2016 17:47:57 +0200 Message-ID: <20160412154757.GG2510@phenom.ffwll.local> References: <1459527712-9488-1-git-send-email-Liviu.Dudau@arm.com> <1459527712-9488-3-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1459527712-9488-3-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: devicetree@vger.kernel.org, LKML , DRI devel List-Id: devicetree@vger.kernel.org T24gRnJpLCBBcHIgMDEsIDIwMTYgYXQgMDU6MjE6NTJQTSArMDEwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6Cj4gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZmFtaWx5IG9mIERpc3BsYXkgUHJvY2Vzc29y cyBmcm9tIEFSTSBMdGQuCj4gVGhpcyBjb21taXQgYWRkcyBiYXNpYyBzdXBwb3J0IGZvciBNYWxp IERQNTAwLCBEUDU1MCBhbmQgRFA2NTAKPiBwYXJ0cywgd2l0aCBvbmx5IHRoZSBkaXNwbGF5IGVu Z2luZSBiZWluZyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KPiAKPiBDYzogRGF2aWQgQnJvd24g PERhdmlkLkJyb3duQGFybS5jb20+Cj4gQ2M6IEJyaWFuIFN0YXJrZXkgPEJyaWFuLlN0YXJrZXlA YXJtLmNvbT4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJt LmNvbT4KClF1aWNrbHkgc2Nyb2xsZWQgdGhyb3VnaCBpdCB3aXRoIGFuIGV5ZSB0b3dhcmRzIGF0 b21pYy4gTG9va3MgcmVhbCBwcmV0dHksCkkgdGhpbmsgd2UncmUgZ2V0dGluZyBjbG9zZXIgdG8g dGhlIGlkZWFsIHdvcmxkIHdoZXJlIGEgbmV3IGF0b21pYyBkcml2ZXIKaXMganVzdCBodyBzcGVj aWZpYyBjb2RlIHBsdXMgbWluaW1hbCBhbW91bnRzIG9mIGdsdWUuCgpCdW5jaCBvZiBjb21tZW50 cyBpbmxpbmUgYmVsb3cuCi1EYW5pZWwKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vS2Nv bmZpZyAgICAgICAgIHwgIDE1ICsKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSAgICAg ICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMgICB8IDI3NiAr KysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jICAgIHwgNDg2 ICsrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2 LmggICAgfCAgNDkgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgICAgIHwg Nzc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9ody5oICAgICB8IDE5MiArKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfcGxhbmVzLmMgfCAzNDIgKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vYXJtL21hbGlkcF9yZWdzLmggICB8IDE3MiArKysrKysrKwo+ICA5IGZpbGVzIGNoYW5n ZWQsIDIzMTEgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfY3J0Yy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9kcnYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfZHJ2LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX2h3LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX2h3LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX3BsYW5lcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9yZWdzLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmln IGIvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCj4gaW5kZXggZWFlZDQ1NC4uZTViNWI2YiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYXJtL0tjb25maWcKPiBAQCAtMjUsMyArMjUsMTggQEAgY29uZmlnIERSTV9IRExD RF9TSE9XX1VOREVSUlVOCj4gIAkgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBzaG93IGluIHJlZCBj b2xvdXIgdGhlIHBpeGVscyB0aGF0IHRoZQo+ICAJICBIRExDRCBkZXZpY2UgZGlkIG5vdCBmZXRj aCBmcm9tIGZyYW1lYnVmZmVyIGR1ZSB0byB1bmRlcnJ1bgo+ICAJICBjb25kaXRpb25zLgo+ICsK PiArY29uZmlnIERSTV9NQUxJX0RJU1BMQVkKPiArCXRyaXN0YXRlICJBUk0gTWFsaSBEaXNwbGF5 IFByb2Nlc3NvciIKPiArCWRlcGVuZHMgb24gRFJNICYmIE9GICYmIChBUk0gfHwgQVJNNjQpCj4g KwlkZXBlbmRzIG9uIENPTU1PTl9DTEsKPiArCXNlbGVjdCBEUk1fQVJNCj4gKwlzZWxlY3QgRFJN X0tNU19IRUxQRVIKPiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBEUk1f R0VNX0NNQV9IRUxQRVIKPiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+ICsJaGVscAo+ICsJ ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgQVJNIE1hbGkg RGlzcGxheQo+ICsJICBQcm9jZXNzb3IgZHJpdmVyLiBJdCBzdXBwb3J0cyBhbGwgdGhlIHZhcmlh bnRzIG9mIHRoZSBoYXJkd2FyZS4KPiArCj4gKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGl0 IHdpbGwgYmUgY2FsbGVkIG1hbGlkcC4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Fy bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiBpbmRleCA4OWRjYjdi Li4zZTc2ZTZjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCj4gQEAgLTEsMiArMSw0IEBACj4gIGhk bGNkLXkgOj0gaGRsY2RfZHJ2Lm8gaGRsY2RfY3J0Yy5vCj4gIG9iai0kKENPTkZJR19EUk1fSERM Q0QpCSs9IGhkbGNkLm8KPiArbWFsaWRwLXkgOj0gbWFsaWRwX2Rydi5vIG1hbGlkcF9ody5vIG1h bGlkcF9wbGFuZXMubyBtYWxpZHBfY3J0Yy5vCj4gK29iai0kKENPTkZJR19EUk1fTUFMSV9ESVNQ TEFZKQkrPSBtYWxpZHAubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmFhNDlmZDQKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5jCj4gQEAgLTAsMCArMSwyNzYgQEAK PiArLyoKPiArICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl c2VydmVkLgo+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQg dG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBG b3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3Qg dG8gdGhlIHRlcm1zCj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAqCj4gKyAqIEFSTSBN YWxpIERQNTAwL0RQNTUwL0RQNjUwIGRyaXZlciAoY3J0YyBvcGVyYXRpb25zKQo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2lu Y2x1ZGUgIm1hbGlkcF9kcnYuaCIKPiArI2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ICsKPiArc3Rh dGljIGJvb2wgbWFsaWRwX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4g KwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFs aWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0 IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJLyoKPiArCSAq IGNoZWNrIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBkcml2ZSB0aGUgcmVxdWlyZWQgY2xvY2sgcmF0 ZSwKPiArCSAqIGJ1dCBza2lwIHRoZSBjaGVjayBpZiB0aGUgY2xvY2sgaXMgbWVhbnQgdG8gYmUg ZGlzYWJsZWQgKHJlcV9yYXRlID0gMCkKPiArCSAqLwo+ICsJbG9uZyByYXRlLCByZXFfcmF0ZSA9 IG1vZGUtPmNydGNfY2xvY2sgKiAxMDAwOwo+ICsKPiArCWlmIChyZXFfcmF0ZSkgewo+ICsJCXJh dGUgPSBjbGtfcm91bmRfcmF0ZShod2Rldi0+bWNsaywgcmVxX3JhdGUpOwo+ICsJCWlmIChyYXRl IDwgcmVxX3JhdGUpIHsKPiArCQkJRFJNX0RFQlVHX0RSSVZFUigibWNsayBjbG9jayB1bmFibGUg dG8gcmVhY2ggJWQga0h6XG4iLAo+ICsJCQkJCSBtb2RlLT5jcnRjX2Nsb2NrKTsKPiArCQkJcmV0 dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2LT5w eGxjbGssIHJlcV9yYXRlKTsKPiArCQlpZiAocmF0ZSAhPSByZXFfcmF0ZSkgewo+ICsJCQlEUk1f REVCVUdfRFJJVkVSKCJweGxjbGsgZG9lc24ndCBzdXBwb3J0ICVsZCBIelxuIiwKPiArCQkJCQkg cmVxX3JhdGUpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlhZGp1c3RlZF9t b2RlLT5jcnRjX2Nsb2NrID0gcmF0ZSAvIDEwMDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX21vZGVfc2V0X25vZmIoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0 Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsKPiArCWRybV9k aXNwbGF5X21vZGVfdG9fdmlkZW9tb2RlKCZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSwgJnZt KTsKPiArCj4gKwkvKiBtY2xrIG5lZWRzIHRvIGJlIHNldCB0byB0aGUgc2FtZSBvciBoaWdoZXIg cmF0ZSB0aGFuIHB4bGNsayAqLwo+ICsJY2xrX3NldF9yYXRlKGh3ZGV2LT5tY2xrLCBjcnRjLT5z dGF0ZS0+YWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrICogMTAwMCk7Cj4gKwljbGtfc2V0X3JhdGUo aHdkZXYtPnB4bGNsaywgY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jayAqIDEw MDApOwo+ICsKPiArCWh3ZGV2LT5tb2Rlc2V0KGh3ZGV2LCAmdm0pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBtYWxpZHBfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMp Owo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5weGxjbGspOwo+ICsJaHdkZXYtPmxlYXZlX2Nv bmZpZ19tb2RlKGh3ZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2NydGNfZGlz YWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICpt YWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCj4gKwlpZiAoY3J0Yy0+ZW5hYmxlZCkg ewoKVGhpcyBpbmRpY2F0ZXMgYSBzdGF0ZSB0cmFja2luZyBidWcgc29tZXdoZXJlIGluIHlvdXIg ZHJpdmVyIC0gYXRvbWljCmd1YXJhbnRlZXMgdG8gb25seSBjYWxsIHlvdXIgZGlzYWJsZSBob29r IGlmIHRoZSBodyBpcyBvbi4gQXNzdW1pbmcgeW91CmNvcnJlY3RseSBib290c3RyYXAgYXRvbWlj IHN0YXRlIG9uIGRyaXZlciBsb2FkIGFuZCBvbiByZXN1bWUuCgpBbHNvIGNydGMtPmVuYWJsZWQg aXMgbGVnYWN5IHN0YXRlLCBwbGVhc2UgdXNlIGNydGMtPnN0YXRlLT4qIGluIGF0b21pYwpkcml2 ZXJzIGV4Y2x1c2l2ZWx5LgoKUGxlYXNlIHJlbW92ZSB0aGlzIGNoZWNrLgoKPiArCQlod2Rldi0+ ZW50ZXJfY29uZmlnX21vZGUoaHdkZXYpOwo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rl di0+cHhsY2xrKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxpZHBfY3J0Y19hdG9t aWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRj X3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdk ZXYgPSBtYWxpZHAtPmRldjsKPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwo+ICsJdTMyIHJvdF9tZW1fZnJlZSwgcm90X21lbV91 c2FibGU7Cj4gKwlpbnQgcm90YXRlZF9wbGFuZXMgPSAwOwo+ICsKPiArCS8qCj4gKwkgKiBjaGVj ayBpZiB0aGVyZSBpcyBlbm91Z2ggcm90YXRpb24gbWVtb3J5IGF2YWlsYWJsZSBmb3IgcGxhbmVz Cj4gKwkgKiB0aGF0IG5lZWQgOTDCsCBhbmQgMjcwwrAgcm90YXRpb24uIEVhY2ggcGxhbmUgaGFz IHNldCBpdHMgcmVxdWlyZWQKPiArCSAqIG1lbW9yeSBzaXplIGluIHRoZSAtPnBsYW5lX2NoZWNr KCkgY2FsbGJhY2ssIGhlcmUgd2Ugb25seSBtYWtlCj4gKwkgKiBzdXJlIHRoYXQgdGhlIHN1bXMg YXJlIGxlc3MgdGhhdCB0aGUgdG90YWwgdXNhYmxlIG1lbW9yeS4KPiArCSAqCj4gKwkgKiBUaGUg cm90YXRpb24gbWVtb3J5IGFsbG9jYXRpb24gYWxnb3JpdGhtIChmb3IgZWFjaCBwbGFuZSk6Cj4g KwkgKiAgYS4gSWYgbm8gbW9yZSByb3RhdGVkIHBsYW5lcyBleGlzdCwgYWxsIHJlbWFpbmluZyBy b3RhdGUKPiArCSAqICAgICBtZW1vcnkgaW4gdGhlIGJhbmsgaXMgYXZhaWxhYmxlIGZvciB1c2Ug YnkgdGhlIHBsYW5lLgo+ICsJICogIGIuIElmIG90aGVyIHJvdGF0ZWQgcGxhbmVzIGV4aXN0LCBh bmQgcGxhbmUncyBsYXllciBJRCBpcwo+ICsJICogICAgIERFX1ZJREVPMSwgaXQgY2FuIHVzZSBh bGwgdGhlIG1lbW9yeSBmcm9tIGZpcnN0IGJhbmsgaWYKPiArCSAqICAgICBzZWNvbmRhcnkgcm90 YXRpb24gbWVtb3J5IGJhbmsgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgaXQgY2FuCj4gKwkgKiAg ICAgdXNlIHVwIHRvIGhhbGYgdGhlIGJhbmsncyBtZW1vcnkuCj4gKwkgKiAgYy4gSWYgb3RoZXIg cm90YXRlZCBwbGFuZXMgZXhpc3QsIGFuZCBwbGFuZSdzIGxheWVyIElEIGlzIG5vdAo+ICsJICog ICAgIERFX1ZJREVPMSwgaXQgY2FuIHVzZSBoYWxmIG9mIHRoZSBhdmFpbGFibGUgbWVtb3J5Cj4g KwkgKgo+ICsJICogTm90ZTogdGhpcyBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IHRoZSBvcmRlciBp biB3aGljaCB0aGUgcGxhbmVzIGFyZQo+ICsJICogY2hlY2tlZCBhbHdheXMgaGFzIERFX1ZJREVP MSBwbGFuZSBmaXJzdCBpbiB0aGUgbGlzdCBpZiBpdCBpcwo+ICsJICogcm90YXRlZC4gQmVjYXVz ZSB0aGF0IGlzIGhvdyB3ZSBjcmVhdGUgdGhlIHBsYW5lcyBpbiB0aGUgZmlyc3QKPiArCSAqIHBs YWNlLCB1bmRlciBjdXJyZW50IERSTSB2ZXJzaW9uIHRoaW5ncyB3b3JrLCBidXQgaWYgZXZlciB0 aGUgb3JkZXIKPiArCSAqIGluIHdoaWNoIGRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9w bGFuZSgpIGl0ZXJhdGVzIG92ZXIgcGxhbmVzCj4gKwkgKiBjaGFuZ2VzLCB3ZSBuZWVkIHRvIHBy ZS1zb3J0IHRoZSBwbGFuZXMgYmVmb3JlIHZhbGlkYXRpb24uCj4gKwkgKi8KPiArCj4gKwkvKiBm aXJzdCBjb3VudCB0aGUgbnVtYmVyIG9mIHJvdGF0ZWQgcGxhbmVzICovCj4gKwlkcm1fYXRvbWlj X2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUocGxhbmUsIHN0YXRlKSB7Cj4gKwkJcHN0YXRlID0g ZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7Cj4gKwkJaWYg KHBzdGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKQo+ICsJCQlyb3RhdGVkX3Bs YW5lcysrOwo+ICsJfQo+ICsKPiArCXJvdF9tZW1fZnJlZSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1v cnlbMF07Cj4gKwkvKgo+ICsJICogaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMSBwbGFuZSB1c2luZyBy b3RhdGlvbiBtZW1vcnksIHVzZSB0aGUgc2Vjb25kCj4gKwkgKiBibG9jayBvZiByb3RhdGlvbiBt ZW1vcnkgYXMgd2VsbAo+ICsJICovCj4gKwlpZiAocm90YXRlZF9wbGFuZXMgPiAxKQo+ICsJCXJv dF9tZW1fZnJlZSArPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdOwo+ICsKPiArCS8qIG5vdyB2 YWxpZGF0ZSB0aGUgcm90YXRpb24gbWVtb3J5IHJlcXVpcmVtZW50cyAqLwo+ICsJZHJtX2F0b21p Y19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBzdGF0ZSkgewo+ICsJCXN0cnVjdCBt YWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKPiArCj4gKwkJcHN0YXRl ID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7Cj4gKwkJ aWYgKHBzdGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7Cj4gKwkJCS8qIHBy b2Nlc3MgY3VycmVudCBwbGFuZSAqLwo+ICsJCQlyb3RhdGVkX3BsYW5lcy0tOwo+ICsKPiArCQkJ aWYgKCFyb3RhdGVkX3BsYW5lcykgewo+ICsJCQkJLyogbm8gbW9yZSByb3RhdGVkIHBsYW5lcywg d2UgY2FuIHVzZSB3aGF0J3MgbGVmdCAqLwo+ICsJCQkJcm90X21lbV91c2FibGUgPSByb3RfbWVt X2ZyZWU7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZiAoKG1wLT5sYXllci0+aWQgIT0gREVfVklE RU8xKSB8fAo+ICsJCQkJICAgIChod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID09IDApKQo+ICsJ CQkJCXJvdF9tZW1fdXNhYmxlID0gcm90X21lbV9mcmVlIC8gMjsKPiArCQkJCWVsc2UKPiArCQkJ CQlyb3RfbWVtX3VzYWJsZSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF07Cj4gKwkJCX0KPiAr Cj4gKwkJCXJvdF9tZW1fZnJlZSAtPSByb3RfbWVtX3VzYWJsZTsKPiArCj4gKwkJCWlmIChtcC0+ cm90bWVtX3NpemUgPiByb3RfbWVtX3VzYWJsZSkKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJ CX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRw X2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiArCQkJCSAgICAgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpvbGRfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJt ICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7Cj4gKwo+ICsJaWYgKGNydGMt PnN0YXRlLT5ldmVudCkgewo+ICsJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2 ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50Owo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7Cj4gKwkJZXZlbnQtPnBpcGUgPSBkcm1fY3J0 Y19pbmRleChjcnRjKTsKPiArCj4gKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMp ICE9IDApOwo+ICsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2Nr LCBmbGFncyk7Cj4gKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmJhc2UubGluaywgJm1hbGlkcC0+ ZXZlbnRfbGlzdCk7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3J0Yy0+ZGV2LT5ldmVu dF9sb2NrLCBmbGFncyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRj X2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFs aWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0IGRybV9kZXZpY2Ug KmRybSA9IGNydGMtPmRldjsKPiArCWludCByZXQgPSBtYWxpZHBfd2FpdF9jb25maWdfdmFsaWQo ZHJtKTsKPiArCj4gKwlpZiAoIXJldCkgewo+ICsJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwkJ c3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZTsKPiArCj4gKwkJc3Bpbl9sb2NrX2ly cXNhdmUoJmRybS0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsJCWUgPSBsaXN0X2ZpcnN0X2VudHJ5 X29yX251bGwoJm1hbGlkcC0+ZXZlbnRfbGlzdCwgdHlwZW9mKCplKSwKPiArCQkJCQkgICAgIGJh c2UubGluayk7Cj4gKwkJaWYgKGUpIHsKPiArCQkJbGlzdF9kZWwoJmUtPmJhc2UubGluayk7Cj4g KwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCZtYWxpZHAtPmNydGMsIGUpOwo+ICsJCQlk cm1fY3J0Y192YmxhbmtfcHV0KCZtYWxpZHAtPmNydGMpOwo+ICsJCX0KPiArCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiArCX0gZWxzZSB7Cj4gKwkJ RFJNX0RFQlVHX0RSSVZFUigidGltZWQgb3V0IHdhaXRpbmcgZm9yIHVwZGF0ZWQgY29uZmlndXJh dGlvblxuIik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf aGVscGVyX2Z1bmNzIG1hbGlkcF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5tb2RlX2ZpeHVw ID0gbWFsaWRwX2NydGNfbW9kZV9maXh1cCwKPiArCS5tb2RlX3NldCA9IGRybV9oZWxwZXJfY3J0 Y19tb2RlX3NldCwKPiArCS5tb2RlX3NldF9iYXNlID0gZHJtX2hlbHBlcl9jcnRjX21vZGVfc2V0 X2Jhc2UsCgpBYm92ZSB0d28gaG9va3MgYXJlIHVudXNlZCBieSBwdXJlIGF0b21pYyBkcml2ZXJz LCBwbGVhc2UgbGVhdmUgYXQgTlVMTC4KWW91IG9ubHkgbmVlZCBtb2RlX3NldF9ub2ZiLiBBbHNv IHdpdGggcnVudGltZSBQTSBteSByZWNvbW1lbmRhdGlvbiBpcyB0bwptZXJnZSBtb2RlX3NldF9u b2ZiIGludG8gLT5lbmFibGUgKHRoZXkncmUgb25seSBzcGxpdCBmb3IgYmFja3dhcmRzIGNvbXBh dApyZWFzb25zKS4KCj4gKwkubW9kZV9zZXRfbm9mYiA9IG1hbGlkcF9jcnRjX21vZGVfc2V0X25v ZmIsCj4gKwkuZW5hYmxlID0gbWFsaWRwX2NydGNfZW5hYmxlLAo+ICsJLmRpc2FibGUgPSBtYWxp ZHBfY3J0Y19kaXNhYmxlLAo+ICsJLmF0b21pY19jaGVjayA9IG1hbGlkcF9jcnRjX2F0b21pY19j aGVjaywKPiArCS5hdG9taWNfYmVnaW4gPSBtYWxpZHBfY3J0Y19hdG9taWNfYmVnaW4sCj4gKwku YXRvbWljX2ZsdXNoID0gbWFsaWRwX2NydGNfYXRvbWljX2ZsdXNoLAo+ICt9Owo+ICsKPiArc3Rh dGljIHZvaWQgbWFsaWRwX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sK PiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0 Yyk7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiAr Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPnB4bGNsayk7Cj4gKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoaHdkZXYtPm1jbGspOwo+ICsJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBtYWxpZHBfY3J0Y19m dW5jcyA9IHsKPiArCS5kZXN0cm95ID0gbWFsaWRwX2NydGNfZGVzdHJveSwKPiArCS5zZXRfY29u ZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAgPSBkcm1f YXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9j cnRjX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9h dG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK2ludCBtYWxpZHBf Y3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBf ZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJp bWFyeSA9IE5VTEwsICpwbGFuZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZHJtX2Zvcl9lYWNoX3Bs YW5lKHBsYW5lLCBkcm0pIHsKPiArCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSkgewo+ICsJCQlwcmltYXJ5ID0gcGxhbmU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlpZiAoIXByaW1hcnkpIHsKPiArCQlEUk1fRVJST1IoIm5vIHByaW1hcnkgcGxh bmUgZm91bmRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldCA9IGRy bV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbWFsaWRwLT5jcnRjLCBwcmltYXJ5LCBOVUxM LAo+ICsJCQkJCSZtYWxpZHBfY3J0Y19mdW5jcywgTlVMTCk7Cj4gKwo+ICsJaWYgKHJldCkgewo+ ICsJCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJZHJtX2NydGNfaGVscGVyX2FkZCgmbWFsaWRwLT5jcnRjLCAmbWFsaWRwX2NydGNf aGVscGVyX2Z1bmNzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2 LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmRlNDU5ODQKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMKPiBAQCAt MCwwICsxLDQ4NiBAQAo+ICsvKgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1 ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFu ZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dy YW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiAr ICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgS01TL0RSTSBkcml2ZXIKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZiX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X29mLmg+Cj4gKwo+ICsjaW5jbHVkZSAibWFsaWRwX2Rydi5oIgo+ICsjaW5jbHVkZSAibWFsaWRw X3JlZ3MuaCIKPiArI2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ICsKPiArI2RlZmluZSBNQUxJRFBf Q09ORl9WQUxJRF9USU1FT1VUCTI1MAo+ICsKPiArLyoKPiArICogc2V0IHRoZSAiY29uZmlnIHZh bGlkIiBiaXQgYW5kIHdhaXQgdW50aWwgdGhlIGhhcmR3YXJlCj4gKyAqIGFjdHMgb24gaXQKPiAr ICovCj4gK2ludCBtYWxpZHBfd2FpdF9jb25maWdfdmFsaWQoc3RydWN0IGRybV9kZXZpY2UgKmRy bSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7 Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaHdkZXYtPnNldF9jb25maWdfdmFsaWQoaHdkZXYpOwo+ICsJLyogZG9u J3Qgd2FpdCBmb3IgY29uZmlnX3ZhbGlkIGZsYWcgaWYgd2UgYXJlIGluIGNvbmZpZyBtb2RlICov Cj4gKwlpZiAoaHdkZXYtPmluX2NvbmZpZ19tb2RlKGh3ZGV2KSkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtYWxpZHAtPndxLAo+ ICsJCQlhdG9taWNfcmVhZCgmbWFsaWRwLT5jb25maWdfdmFsaWQpID09IDEsCj4gKwkJCW1zZWNz X3RvX2ppZmZpZXMoTUFMSURQX0NPTkZfVkFMSURfVElNRU9VVCkpOwo+ICsKPiArCXJldHVybiAo cmV0ID4gMCkgPyAwIDogLUVUSU1FRE9VVDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRw X291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3Ry dWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJaWYgKG1h bGlkcC0+ZmJkZXYpCj4gKwkJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2ZW50KG1hbGlkcC0+ZmJk ZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9hdG9taWNfY29tbWl0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gKwkJCQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g KwkJCQlib29sIGFzeW5jKQo+ICt7Cj4gKwkvKgo+ICsJICogVG9EbzogaW52ZXN0aWdhdGUgdGhl IGFzeW5jIHBhdGggdG8gbWFrZSBzdXJlIHRoYXQKPiArCSAqIG9wZXJhdGlvbnMgYXJlIHN1Ym1p dHRlZCBjb3JyZWN0bHkgdG8gdGhlIGhhcmR3YXJlLAo+ICsJICogcmF0aGVyIHRoYW4gaWdub3Jp bmcgdGhlIGFzeW5jIHBhcmFtCj4gKwkgKi8KClRoaXMgaXMgZGVmaW5pdGVseSBub3QgYXN5bmMg ZW5vdWdoIHNpbmNlIGl0J2xsIGNvbnRhaW4gZnVsbCBmZW5jZSBzdGFsbHMKYW5kIHZibGFuayB3 YWl0cy4gRm9yIHJlYWxseSBzaW1wbGUgaGFyZHdhcmVkIGp1c3QgYSBzY2hlZHVsZV93b3JrIGlz IGdvb2QKZW5vdWdoLiBGb3IgbW9yZSBmYW5jeSBodyB5b3UgbWlnaHQgbmVlZCBtdWx0aXBsZSBx dWV1ZXMgYW5kIHNvbWUgZGVwZW5jeQpoYW5kbGluZy4KClNob3VsZCBiZSBmaXhlZCBiZWZvcmUg c3VibWl0dGluZywgc2luY2Ugd2l0aG91dCBpdCBldmVuIGxlZ2FjeSBwYWdlZmxpcAp3b24ndCB3 b3JrIGNvcnJlY3RseSAoaXQncyBlbXVsYXRlZCB1c2luZyBhc3luYyBhdG9taWMpLgoKPiArCXJl dHVybiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoZGV2LCBzdGF0ZSwgZmFsc2UpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtYWxpZHBfbW9k ZV9jb25maWdfZnVuY3MgPSB7Cj4gKwkuZmJfY3JlYXRlID0gZHJtX2ZiX2NtYV9jcmVhdGUsCj4g Kwkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IG1hbGlkcF9vdXRwdXRfcG9sbF9jaGFuZ2VkLAo+ICsJ LmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ICsJLmF0b21pY19jb21t aXQgPSBtYWxpZHBfYXRvbWljX2NvbW1pdCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbWFsaWRw X2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IGNydGMp Cj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfZGlzYWJs ZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCj4gK3sK PiArfQoKTWlnaHQgYmUgd29ydGggaXQgdG8gY3JlYXRlIGEgcGF0Y2ggZm9yIGRybV9pcnEuYyB0 byBtYWtlCmVuYWJsZS9kaXNhYmxlX3ZibGFuayBmdW5jdGlvbnMgb3B0aW9uYWwuIE90b2ggZG9l cyB5b3VyIGNoaXAgcmVhbGx5IGtlZXAKb24gZ2VuZXJhdGluZyB2YmxhbmsgaXJxcyBhbGwgdGhl IHRpbWUsIHdpdGggbm8gd2F5IHRvIHNodXQgaXQgdXA/IFRoYXQKd291bGQgYmUgdGVycmlibGUg Zm9yIHBvd2VyIGNvbnN1bXB0aW9uIC4uLiBFc3BlY2lhbGx5IHNpbmNlIHlvdSBoYXZlIG5vCmh3 IGNvdW50ZXIgZWl0aGVyLgoKPiArCj4gK3N0YXRpYyBpbnQgbWFsaWRwX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRybSkKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBtYWxpZHBfZHJtICpt YWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiAr Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IGh3ZGV2LT5taW5fbGluZV9zaXplOwo+ ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gaHdkZXYtPm1pbl9saW5lX3NpemU7Cj4g Kwlkcm0tPm1vZGVfY29uZmlnLm1heF93aWR0aCA9IGh3ZGV2LT5tYXhfbGluZV9zaXplOwo+ICsJ ZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gaHdkZXYtPm1heF9saW5lX3NpemU7Cj4gKwlk cm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1hbGlkcF9tb2RlX2NvbmZpZ19mdW5jczsKPiArCj4g KwlyZXQgPSBtYWxpZHBfZGVfcGxhbmVzX2luaXQoZHJtKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4g KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGlzZSBwbGFuZXNcbiIpOwo+ICsJCWdvdG8g cGxhbmVfaW5pdF9mYWlsOwo+ICsJfQo+ICsKPiArCXJldCA9IG1hbGlkcF9jcnRjX2luaXQoZHJt KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXNlIENS VENcbiIpOwo+ICsJCWdvdG8gY3J0Y19pbml0X2ZhaWw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtjcnRjX2luaXRfZmFpbDoKPiArCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0p Owo+ICtwbGFuZV9pbml0X2ZhaWw6Cj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWFsaWRwX2lycV9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWludCBpcnFfZGUsIGlycV9z ZSwgcmV0ID0gMDsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEo JnBkZXYtPmRldik7Cj4gKwo+ICsJLyogZmV0Y2ggdGhlIGludGVycnVwdHMgZnJvbSBEVCAqLwo+ ICsJaXJxX2RlID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIkRFIik7Cj4gKwlpZiAo aXJxX2RlIDwgMCkgewo+ICsJCURSTV9FUlJPUigibm8gJ0RFJyBJUlEgc3BlY2lmaWVkIVxuIik7 Cj4gKwkJcmV0dXJuIGlycV9kZTsKPiArCX0KPiArCWlycV9zZSA9IHBsYXRmb3JtX2dldF9pcnFf YnluYW1lKHBkZXYsICJTRSIpOwo+ICsJaWYgKGlycV9zZSA8IDApIHsKPiArCQlEUk1fRVJST1Io Im5vICdTRScgSVJRIHNwZWNpZmllZCFcbiIpOwo+ICsJCXJldHVybiBpcnFfc2U7Cj4gKwl9Cj4g Kwo+ICsJcmV0ID0gbWFsaWRwX2RlX2lycV9pbml0KGRybSwgaXJxX2RlKTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBtYWxpZHBfc2VfaXJxX2luaXQoZHJtLCBp cnFfc2UpOwo+ICsJaWYgKHJldCkgewo+ICsJCW1hbGlkcF9kZV9pcnFfY2xlYW51cChkcm0pOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG1hbGlkcF9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJ c3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJZHJt X2ZiZGV2X2NtYV9yZXN0b3JlX21vZGUobWFsaWRwLT5mYmRldik7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7Cj4gKwkub3duZXIgPSBUSElT X01PRFVMRSwKPiArCS5vcGVuID0gZHJtX29wZW4sCj4gKwkucmVsZWFzZSA9IGRybV9yZWxlYXNl LAo+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ICsjaWZkZWYgQ09ORklHX0NPTVBB VAo+ICsJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICsJLnBv bGwgPSBkcm1fcG9sbCwKPiArCS5yZWFkID0gZHJtX3JlYWQsCj4gKwkubGxzZWVrID0gbm9vcF9s bHNlZWssCj4gKwkubW1hcCA9IGRybV9nZW1fY21hX21tYXAsCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGRybV9kcml2ZXIgbWFsaWRwX2RyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMg PSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfCBEUklWRVJfQVRPTUlDIHwKPiArCQkJICAg RFJJVkVSX1BSSU1FLAo+ICsJLmxhc3RjbG9zZSA9IG1hbGlkcF9sYXN0Y2xvc2UsCj4gKwkuZ2V0 X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAo+ICsJLmVuYWJsZV92 YmxhbmsgPSBtYWxpZHBfZW5hYmxlX3ZibGFuaywKPiArCS5kaXNhYmxlX3ZibGFuayA9IG1hbGlk cF9kaXNhYmxlX3ZibGFuaywKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVl X29iamVjdCwKPiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiArCS5kdW1i X2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ICsJLmR1bWJfbWFwX29mZnNldCA9 IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2Vt X2R1bWJfZGVzdHJveSwKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hh bmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3Rv X2hhbmRsZSwKPiArCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4g KwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmlt ZV9nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCj4gKwkuZ2Vt X3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJs ZSwKPiArCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2Vt X3ByaW1lX3Z1bm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVf bW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCj4gKwkuZm9wcyA9ICZmb3BzLAo+ICsJLm5h bWUgPSAibWFsaS1kcCIsCj4gKwkuZGVzYyA9ICJBUk0gTWFsaSBEaXNwbGF5IFByb2Nlc3NvciBk cml2ZXIiLAo+ICsJLmRhdGUgPSAiMjAxNjAxMDYiLAo+ICsJLm1ham9yID0gMSwKPiArCS5taW5v ciA9IDAsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAgbWFs aWRwX2RybV9vZl9tYXRjaFtdID0gewo+ICsJewo+ICsJCS5jb21wYXRpYmxlID0gImFybSxtYWxp LWRwNTAwIiwKPiArCQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF81MDBdCj4gKwl9LAo+ ICsJewo+ICsJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNTUwIiwKPiArCQkuZGF0YSA9ICZt YWxpZHBfZGV2aWNlW01BTElEUF81NTBdCj4gKwl9LAo+ICsJewo+ICsJCS5jb21wYXRpYmxlID0g ImFybSxtYWxpLWRwNjUwIiwKPiArCQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF82NTBd Cj4gKwl9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1hbGlkcF9k cm1fb2ZfbWF0Y2gpOwo+ICsKPiArI2RlZmluZSBNQVhfT1VUUFVUX0NIQU5ORUxTCTMKPiArCj4g K3N0YXRpYyBpbnQgbWFsaWRwX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2Owo+ ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYp Owo+ICsJLyogbnVtYmVyIG9mIGxpbmVzIGZvciB0aGUgUiwgRyBhbmQgQiBvdXRwdXQgKi8KPiAr CXU4IG91dHB1dF93aWR0aFtNQVhfT1VUUFVUX0NIQU5ORUxTXTsKPiArCWludCByZXQgPSAwLCBp Owo+ICsJdTMyIHZlcnNpb24sIG91dF9kZXB0aCA9IDA7Cj4gKwo+ICsJbWFsaWRwID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCptYWxpZHApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWFsaWRw KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWh3ZGV2ID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpod2RldiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFod2RldikKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwkvKgo+ICsJICogY29weSB0aGUgYXNzb2NpYXRlZCBkYXRhIGZyb20g bWFsaWRwX2RybV9vZl9tYXRjaCB0byBhdm9pZAo+ICsJICogaGF2aW5nIHRvIGtlZXAgYSByZWZl cmVuY2UgdG8gdGhlIE9GIG5vZGUgYWZ0ZXIgYmluZGluZwo+ICsJICovCj4gKwltZW1jcHkoaHdk ZXYsIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpLCBzaXplb2YoKmh3ZGV2KSk7Cj4gKwlt YWxpZHAtPmRldiA9IGh3ZGV2Owo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZtYWxpZHAtPmV2ZW50 X2xpc3QpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMCk7Cj4gKwlod2Rldi0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs IHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5yZWdzKSkgewo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIG1hcCBjb250cm9sIHJlZ2lzdGVycyBhcmVhXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VS Uihod2Rldi0+cmVncyk7Cj4gKwl9Cj4gKwo+ICsJaHdkZXYtPnBjbGsgPSBkZXZtX2Nsa19nZXQo ZGV2LCAicGNsayIpOwo+ICsJaWYgKElTX0VSUihod2Rldi0+cGNsaykpCj4gKwkJcmV0dXJuIFBU Ul9FUlIoaHdkZXYtPnBjbGspOwo+ICsKPiArCWh3ZGV2LT5hY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgImFjbGsiKTsKPiArCWlmIChJU19FUlIoaHdkZXYtPmFjbGspKQo+ICsJCXJldHVybiBQVFJf RVJSKGh3ZGV2LT5hY2xrKTsKPiArCj4gKwlod2Rldi0+bWNsayA9IGRldm1fY2xrX2dldChkZXYs ICJtY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGh3ZGV2LT5tY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VS Uihod2Rldi0+bWNsayk7Cj4gKwo+ICsJaHdkZXYtPnB4bGNsayA9IGRldm1fY2xrX2dldChkZXYs ICJweGxjbGsiKTsKPiArCWlmIChJU19FUlIoaHdkZXYtPnB4bGNsaykpCj4gKwkJcmV0dXJuIFBU Ul9FUlIoaHdkZXYtPnB4bGNsayk7Cj4gKwo+ICsJLyogR2V0IHRoZSBvcHRpb25hbCBmcmFtZWJ1 ZmZlciBtZW1vcnkgcmVzb3VyY2UgKi8KPiArCXJldCA9IG9mX3Jlc2VydmVkX21lbV9kZXZpY2Vf aW5pdChkZXYpOwo+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiArCWRybSA9IGRybV9kZXZfYWxsb2MoJm1hbGlkcF9kcml2ZXIsIGRldik7Cj4gKwlp ZiAoIWRybSkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBhbGxvY19mYWlsOwo+ICsJ fQo+ICsKPiArCS8qIEVuYWJsZSBBUEIgY2xvY2sgaW4gb3JkZXIgdG8gZ2V0IGFjY2VzcyB0byB0 aGUgcmVnaXN0ZXJzICovCj4gKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYtPnBjbGspOwo+ICsJ LyoKPiArCSAqIEVuYWJsZSBBWEkgY2xvY2sgYW5kIG1haW4gY2xvY2sgc28gdGhhdCBwcmVmZXRj aCBjYW4gc3RhcnQgb25jZQo+ICsJICogdGhlIHJlZ2lzdGVycyBhcmUgc2V0Cj4gKwkgKi8KPiAr CWNsa19wcmVwYXJlX2VuYWJsZShod2Rldi0+YWNsayk7Cj4gKwljbGtfcHJlcGFyZV9lbmFibGUo aHdkZXYtPm1jbGspOwo+ICsKPiArCXJldCA9IGh3ZGV2LT5xdWVyeV9odyhod2Rldik7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJJbnZhbGlkIEhXIGNvbmZpZ3VyYXRpb25cbiIpOwo+ ICsJCWdvdG8gcXVlcnlfaHdfZmFpbDsKPiArCX0KPiArCj4gKwl2ZXJzaW9uID0gbWFsaWRwX2h3 X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9ERV9DT1JFX0lEKTsKPiAr CURSTV9JTkZPKCJmb3VuZCBBUk0gTWFsaS1EUCUzeCB2ZXJzaW9uIHIlZHAlZFxuIiwgdmVyc2lv biA+PiAxNiwKPiArCQkgKHZlcnNpb24gPj4gMTIpICYgMHhmLCAodmVyc2lvbiA+PiA4KSAmIDB4 Zik7Cj4gKwo+ICsJLyogc2V0IHRoZSBudW1iZXIgb2YgbGluZXMgdXNlZCBmb3Igb3V0cHV0IG9m IFJHQiBkYXRhICovCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KGRldi0+b2Zf bm9kZSwKPiArCQkJCQkiYXJtLG1hbGlkcC1vdXRwdXQtcG9ydC1saW5lcyIsCj4gKwkJCQkJb3V0 cHV0X3dpZHRoLCBNQVhfT1VUUFVUX0NIQU5ORUxTKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBx dWVyeV9od19mYWlsOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfT1VUUFVUX0NIQU5ORUxT OyBpKyspCj4gKwkJb3V0X2RlcHRoID0gKG91dF9kZXB0aCA8PCA4KSB8IChvdXRwdXRfd2lkdGhb aV0gJiAweGYpOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBvdXRfZGVwdGgsIGh3ZGV2LT5t YXAub3V0X2RlcHRoX2Jhc2UpOwo+ICsKPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBtYWxpZHA7Cj4g KwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOwo+ICsJYXRvbWljX3NldCgmbWFsaWRwLT5jb25m aWdfdmFsaWQsIDApOwo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFsaWRwLT53cSk7Cj4gKwo+ ICsJcmV0ID0gbWFsaWRwX2luaXQoZHJtKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gaW5p dF9mYWlsOwo+ICsKPiArCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byByZWdpc3Rlcl9mYWlsOwo+ICsKPiArCS8qIFNldCB0aGUgQ1JUQydzIHBv cnQgc28gdGhhdCB0aGUgZW5jb2RlciBjb21wb25lbnQgY2FuIGZpbmQgaXQgKi8KPiArCW1hbGlk cC0+Y3J0Yy5wb3J0ID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBO VUxMKTsKPiArCj4gKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJb2Zf bm9kZV9wdXQobWFsaWRwLT5jcnRjLnBvcnQpOwo+ICsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1f RVJST1IoIkZhaWxlZCB0byBiaW5kIGFsbCBjb21wb25lbnRzXG4iKTsKPiArCQlnb3RvIGJpbmRf ZmFpbDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVf Y29uZmlnLm51bV9jcnRjKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gaW5pdGlhbGlzZSB2YmxhbmtcbiIpOwo+ICsJCWdvdG8gdmJsYW5rX2ZhaWw7Cj4gKwl9 Cj4gKwlkcm0tPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSB0cnVlOwo+ICsKPiArCXJldCA9IG1h bGlkcF9pcnFfaW5pdChwZGV2KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gaXJxX2luaXRf ZmFpbDsKPiArCj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJtKTsKPiArCj4gKwlkcm1faGVs cGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkcm0pOwo+ICsJbWFsaWRwLT5mYmRldiA9IGRy bV9mYmRldl9jbWFfaW5pdChkcm0sIDMyLCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+ICsJ CQkJCSAgIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7Cj4gKwo+ICsJaWYgKElTX0VS UihtYWxpZHAtPmZiZGV2KSkgewo+ICsJCXJldCA9IFBUUl9FUlIobWFsaWRwLT5mYmRldik7Cj4g KwkJbWFsaWRwLT5mYmRldiA9IE5VTEw7Cj4gKwkJZ290byBmYmRldl9mYWlsOwo+ICsJfQo+ICsK PiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtm YmRldl9mYWlsOgo+ICsJbWFsaWRwX3NlX2lycV9jbGVhbnVwKGRybSk7Cj4gKwltYWxpZHBfZGVf aXJxX2NsZWFudXAoZHJtKTsKPiAraXJxX2luaXRfZmFpbDoKPiArCWRybV92YmxhbmtfY2xlYW51 cChkcm0pOwo+ICt2YmxhbmtfZmFpbDoKPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJt KTsKPiArYmluZF9mYWlsOgo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gK3JlZ2lzdGVy X2ZhaWw6Cj4gKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKPiArCWRybV9tb2RlX2Nv bmZpZ19jbGVhbnVwKGRybSk7Cj4gK2luaXRfZmFpbDoKPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBO VUxMOwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Cj4gK3F1ZXJ5X2h3X2ZhaWw6Cj4g KwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPm1jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGh3ZGV2LT5hY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+cGNs ayk7Cj4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gK2FsbG9jX2ZhaWw6Cj4gKwlvZl9yZXNlcnZl ZF9tZW1fZGV2aWNlX3JlbGVhc2UoZGV2KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBtYWxpZHBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJc3RydWN0 IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCj4gKwlpZiAobWFsaWRwLT5mYmRl dikgewo+ICsJCWRybV9mYmRldl9jbWFfZmluaShtYWxpZHAtPmZiZGV2KTsKPiArCQltYWxpZHAt PmZiZGV2ID0gTlVMTDsKPiArCX0KPiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ ICsJbWFsaWRwX3NlX2lycV9jbGVhbnVwKGRybSk7Cj4gKwltYWxpZHBfZGVfaXJxX2NsZWFudXAo ZHJtKTsKPiArCWRybV92YmxhbmtfY2xlYW51cChkcm0pOwo+ICsJY29tcG9uZW50X3VuYmluZF9h bGwoZGV2LCBkcm0pOwo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gKwltYWxpZHBfZGVf cGxhbmVzX2Rlc3Ryb3koZHJtKTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4g Kwlkcm0tPmRldl9wcml2YXRlID0gTlVMTDsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwp Owo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKPiArCWNsa19kaXNhYmxl X3VucHJlcGFyZShod2Rldi0+YWNsayk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYt PnBjbGspOwo+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICsJb2ZfcmVzZXJ2ZWRfbWVtX2Rldmlj ZV9yZWxlYXNlKGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50 X21hc3Rlcl9vcHMgbWFsaWRwX21hc3Rlcl9vcHMgPSB7Cj4gKwkuYmluZCA9IG1hbGlkcF9iaW5k LAo+ICsJLnVuYmluZCA9IG1hbGlkcF91bmJpbmQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG1h bGlkcF9jb21wYXJlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gK3sKPiAr CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkYXRhOwo+ICsKPiArCXJldHVybiBkZXYtPm9mX25v ZGUgPT0gbnA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWFsaWRwX3BsYXRmb3JtX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAq cG9ydCwgKmVwOwo+ICsJc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ICsK PiArCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJ LyogdGhlcmUgaXMgb25seSBvbmUgb3V0cHV0IHBvcnQgaW5zaWRlIGVhY2ggZGV2aWNlLCBmaW5k IGl0ICovCj4gKwllcCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KHBkZXYtPmRldi5vZl9u b2RlLCBOVUxMKTsKPiArCWlmICghZXApCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJaWYg KCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGVwKSkgewo+ICsJCW9mX25vZGVfcHV0KGVwKTsKPiAr CQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwkvKiBhZGQgdGhlIHJlbW90ZSBlbmNvZGVy IHBvcnQgYXMgY29tcG9uZW50ICovCj4gKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0 X3BhcmVudChlcCk7Cj4gKwlvZl9ub2RlX3B1dChlcCk7Cj4gKwlpZiAoIXBvcnQgfHwgIW9mX2Rl dmljZV9pc19hdmFpbGFibGUocG9ydCkpIHsKPiArCQlvZl9ub2RlX3B1dChwb3J0KTsKPiArCQly ZXR1cm4gLUVBR0FJTjsKPiArCX0KPiArCj4gKwljb21wb25lbnRfbWF0Y2hfYWRkKCZwZGV2LT5k ZXYsICZtYXRjaCwgbWFsaWRwX2NvbXBhcmVfZGV2LCBwb3J0KTsKPiArCXJldHVybiBjb21wb25l bnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKCZwZGV2LT5kZXYsICZtYWxpZHBfbWFzdGVyX29wcywK PiArCQkJCQkgICAgICAgbWF0Y2gpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9wbGF0 Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJY29tcG9u ZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm1hbGlkcF9tYXN0ZXJfb3BzKTsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWxpZHBfcGxh dGZvcm1fZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZSwKPiAr CS5yZW1vdmUJCT0gbWFsaWRwX3BsYXRmb3JtX3JlbW92ZSwKPiArCS5kcml2ZXIJPSB7Cj4gKwkJ Lm5hbWUgPSAibWFsaS1kcCIsCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gbWFsaWRwX2RybV9vZl9t YXRjaCwKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hbGlkcF9w bGF0Zm9ybV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiTGl2aXUgRHVkYXUgPExpdml1 LkR1ZGF1QGFybS5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQVJNIE1hbGkgRFAgRFJN IGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxp ZHBfZHJ2LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjdkZTBkYTYK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmgK PiBAQCAtMCwwICsxLDQ5IEBACj4gKy8qCj4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGlt aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2 aXUuRHVkYXVAYXJtLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMg cHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcwo+ICsgKiBvZiBzdWNoIEdOVSBsaWNlbmNl Lgo+ICsgKgo+ICsgKiBBUk0gTWFsaSBEUDUwMC9EUDU1MC9EUDY1MCBLTVMvRFJNIGRyaXZlciBz dHJ1Y3R1cmVzCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX01BTElEUF9EUlZfSF9fCj4gKyNkZWZp bmUgX19NQUxJRFBfRFJWX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC93YWl0Lmg+Cj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiArCj4gK3N0 cnVjdCBtYWxpZHBfZHJtIHsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpkZXY7Cj4gKwlz dHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZmJkZXY7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xp c3Q7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKPiArCXdhaXRfcXVldWVfaGVhZF90IHdxOwo+ ICsJYXRvbWljX3QgY29uZmlnX3ZhbGlkOwo+ICt9Owo+ICsKPiArI2RlZmluZSBjcnRjX3RvX21h bGlkcF9kZXZpY2UoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtYWxpZHBfZHJtLCBjcnRjKQo+ ICsKPiArc3RydWN0IG1hbGlkcF9wbGFuZSB7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lIGJhc2U7Cj4g KwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXY7Cj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRw X2xheWVyICpsYXllcjsKPiArCS8qIHNpemUgb2YgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1lbW9y eSB3aGVuIHBsYW5lIGlzIHJvdGF0ZWQgKi8KPiArCXUzMiByb3RtZW1fc2l6ZTsKPiArfTsKPiAr Cj4gKyNkZWZpbmUgdG9fbWFsaWRwX3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFs aWRwX3BsYW5lLCBiYXNlKQo+ICsKPiAraW50IG1hbGlkcF93YWl0X2NvbmZpZ192YWxpZChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtKTsKPiAraW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtKTsKPiArdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0 IGRybV9kZXZpY2UgKmRybSk7Cj4gK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pOwo+ICsKPiArLyogb2Z0ZW4gdXNlZCBjb21iaW5hdGlvbiBvZiByb3RhdGlvbmFs IGJpdHMgKi8KPiArI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9NQVNLCShCSVQoRFJNX1JPVEFURV85 MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKQo+ICsKPiArI2VuZGlmICAvKiBfX01BTElEUF9EUlZf SF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMgYi9k cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5lODQwZDY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hcm0vbWFsaWRwX2h3LmMKPiBAQCAtMCwwICsxLDc3NyBAQAo+ICsvKgo+ICsgKiAoQykg Q09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1 dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFuZCBh bnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiAr ICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAv RFA2NTAgaGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBUaGlzIGlzIHdoZXJlCj4gKyAq IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUgaGFyZHdhcmUg aXMgYmVpbmcgZGVhbHQgd2l0aAo+ICsgKiBpbiBhbiBhdHRlbXB0IHRvIHByb3ZpZGUgdG8gdGhl IHJlc3Qgb2YgdGhlIGRyaXZlciBjb2RlIGEgdW5pZmllZCB2aWV3Cj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsjaW5jbHVk ZSA8dmlkZW8vZGlzcGxheV90aW1pbmcuaD4KPiArCj4gKyNpbmNsdWRlICJtYWxpZHBfZHJ2Lmgi Cj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiArI2luY2x1ZGUgIm1hbGlkcF9yZWdzLmgiCj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRwNTAwX2Rl X2Zvcm1hdHNbXSA9IHsKPiArCS8qICAgIGxheWVycyBzdXBwb3J0aW5nIHRoZSBmb3JtYXQsICAg ICBpbnRlcm5hbCBpZCwgICAgICBmb3VyY2MgKi8KPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJ Q1MxIHwgREVfR1JBUEhJQ1MyLCAgMCwgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCB9LAo+ICsJeyBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICAxLCBEUk1fRk9STUFUX0FC R1IyMTAxMDEwIH0sCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNT MiwgIDIsIERSTV9GT1JNQVRfQVJHQjg4ODggfSwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJ Q1MxIHwgREVfR1JBUEhJQ1MyLCAgMywgRFJNX0ZPUk1BVF9BQkdSODg4OCB9LAo+ICsJeyBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA0LCBEUk1fRk9STUFUX1hSR0I4 ODg4IH0sCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDUs IERSTV9GT1JNQVRfWEJHUjg4ODggfSwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfR1JBUEhJQ1MyLCAgNiwgRFJNX0ZPUk1BVF9SR0I4ODggfSwKPiArCXsgREVfVklERU8xIHwg REVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNywgRFJNX0ZPUk1BVF9CR1I4ODggfSwKPiAr CXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgOCwgRFJNX0ZPUk1B VF9SR0JBNTU1MSB9LAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElD UzIsICA5LCBEUk1fRk9STUFUX0FCR1IxNTU1IH0sCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBI SUNTMSB8IERFX0dSQVBISUNTMiwgMTAsIERSTV9GT1JNQVRfUkdCNTY1IH0sCj4gKwl7IERFX1ZJ REVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgMTEsIERSTV9GT1JNQVRfQkdSNTY1 IH0sCj4gKwl7IERFX1ZJREVPMSwgMTIsIERSTV9GT1JNQVRfVVlWWSB9LAo+ICsJeyBERV9WSURF TzEsIDEzLCBEUk1fRk9STUFUX1lVWVYgfSwKPiArCXsgREVfVklERU8xLCAxNCwgRFJNX0ZPUk1B VF9OVjEyIH0sCj4gKwl7IERFX1ZJREVPMSwgMTUsIERSTV9GT1JNQVRfWVVWNDIwIH0sCj4gK307 Cj4gKwo+ICsjZGVmaW5lIE1BTElEUF9JRChfX2dyb3VwLCBfX2Zvcm1hdCkgXAo+ICsJKCgoKF9f Z3JvdXApICYgMHg3KSA8PCAzKSB8ICgoX19mb3JtYXQpICYgMHg3KSkKPiArCj4gKyNkZWZpbmUg TUFMSURQX0NPTU1PTl9GT1JNQVRTIFwKPiArCS8qICAgIGxheWVycyBzdXBwb3J0aW5nIHRoZSBm b3JtYXQsICAgICAgaW50ZXJuYWwgaWQsICAgICAgZm91cmNjICovIFwKPiArCXsgREVfVklERU8x IHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMCwgMCksIERSTV9GT1JNQVRf QVJHQjIxMDEwMTAgfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURF TzIsIE1BTElEUF9JRCgwLCAxKSwgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCB9LCBcCj4gKwl7IERF X1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDAsIDIpLCBEUk1f Rk9STUFUX1JHQkExMDEwMTAyIH0sIFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfVklERU8yLCBNQUxJRFBfSUQoMCwgMyksIERSTV9GT1JNQVRfQkdSQTEwMTAxMDIgfSwgXAo+ ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFM SURQX0lEKDEsIDApLCBEUk1fRk9STUFUX0FSR0I4ODg4IH0sIFwKPiArCXsgREVfVklERU8xIHwg REVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAxKSwgRFJN X0ZPUk1BVF9BQkdSODg4OCB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERF X1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMSwgMiksIERSTV9GT1JNQVRfUkdCQTg4ODgg fSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFS VCwgTUFMSURQX0lEKDEsIDMpLCBEUk1fRk9STUFUX0JHUkE4ODg4IH0sIFwKPiArCXsgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAw KSwgRFJNX0ZPUk1BVF9YUkdCODg4OCB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNT MSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMiwgMSksIERSTV9GT1JNQVRfWEJH Ujg4ODggfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBE RV9TTUFSVCwgTUFMSURQX0lEKDIsIDIpLCBEUk1fRk9STUFUX1JHQlg4ODg4IH0sIFwKPiArCXsg REVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1BTElEUF9J RCgyLCAzKSwgRFJNX0ZPUk1BVF9CR1JYODg4OCB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dS QVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDMsIDApLCBEUk1fRk9STUFUX1JHQjg4OCB9 LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lE KDMsIDEpLCBEUk1fRk9STUFUX0JHUjg4OCB9LCBcCj4gKwl7IERFX1ZJREVPMSB8IERFX0dSQVBI SUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDQsIDApLCBEUk1fRk9STUFUX1JHQkE1NTUxIH0s IFwKPiArCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQo NCwgMSksIERSTV9GT1JNQVRfQUJHUjE1NTUgfSwgXAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAyKSwgRFJNX0ZPUk1BVF9SR0I1NjUgfSwJ XAo+ICsJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0 LCAzKSwgRFJNX0ZPUk1BVF9CR1I1NjUgfSwJXAo+ICsJeyBERV9WSURFTzEgfCBERV9WSURFTzIs IE1BTElEUF9JRCg1LCAyKSwgRFJNX0ZPUk1BVF9ZVVlWIH0sIFwKPiArCXsgREVfVklERU8xIHwg REVfVklERU8yLCBNQUxJRFBfSUQoNSwgMyksIERSTV9GT1JNQVRfVVlWWSB9LCBcCj4gKwl7IERF X1ZJREVPMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDYpLCBEUk1fRk9STUFUX05WMTIgfSwg XAo+ICsJeyBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA3KSwgRFJNX0ZPUk1B VF9ZVVY0MjAgfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0 IG1hbGlkcDU1MF9kZV9mb3JtYXRzW10gPSB7Cj4gKwlNQUxJRFBfQ09NTU9OX0ZPUk1BVFMsCj4g K307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRw NjUwX2RlX2Zvcm1hdHNbXSA9IHsKPiArCU1BTElEUF9DT01NT05fRk9STUFUUywKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2xheWVyIG1hbGlkcDUwMF9sYXllcnNbXSA9 IHsKPiArCXsgREVfVklERU8xLCBNQUxJRFA1MDBfREVfTFZfQkFTRSwgTUFMSURQNTAwX0RFX0xW X1BUUl9CQVNFIH0sCj4gKwl7IERFX0dSQVBISUNTMSwgTUFMSURQNTAwX0RFX0xHMV9CQVNFLCBN QUxJRFA1MDBfREVfTEcxX1BUUl9CQVNFIH0sCj4gKwl7IERFX0dSQVBISUNTMiwgTUFMSURQNTAw X0RFX0xHMl9CQVNFLCBNQUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFIH0sCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciBtYWxpZHA1NTBfbGF5ZXJzW10gPSB7Cj4g Kwl7IERFX1ZJREVPMSwgTUFMSURQNTUwX0RFX0xWMV9CQVNFLCBNQUxJRFA1NTBfREVfTFYxX1BU Ul9CQVNFIH0sCj4gKwl7IERFX0dSQVBISUNTMSwgTUFMSURQNTUwX0RFX0xHX0JBU0UsIE1BTElE UDU1MF9ERV9MR19QVFJfQkFTRSB9LAo+ICsJeyBERV9WSURFTzIsIE1BTElEUDU1MF9ERV9MVjJf QkFTRSwgTUFMSURQNTUwX0RFX0xWMl9QVFJfQkFTRSB9LAo+ICsJeyBERV9TTUFSVCwgTUFMSURQ NTUwX0RFX0xTX0JBU0UsIE1BTElEUDU1MF9ERV9MU19QVFJfQkFTRSB9LAo+ICt9Owo+ICsKPiAr I2RlZmluZSBNQUxJRFBfREVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVAk1Cj4gKwo+ICtpbnQgbWFs aWRwNTAwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJ dTMyIGNvbmYgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQNTAwX0NPTkZJR19JRCk7Cj4g Kwl1OCBsbl9zaXplX211bHQgPSAoMSA8PCAoKGNvbmYgPj4gNCkgJiAweDEpKTsKPiArCj4gKwlp ZiAoY29uZiAmIE1BTElEUF9IV19GRUFUVVJFX0RTKQo+ICsJCWh3ZGV2LT5mZWF0dXJlcyB8PSBN QUxJRFBfSFdfRkVBVFVSRV9EUzsKPiArCWh3ZGV2LT5taW5fbGluZV9zaXplID0gMjsKPiArCWh3 ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfMksgKiBsbl9zaXplX211bHQ7Cj4gKwlod2Rldi0+cm90 YXRpb25fbWVtb3J5WzBdID0gU1pfMUsgKiA2NCAqIGxuX3NpemVfbXVsdDsKPiArCWh3ZGV2LT5y b3RhdGlvbl9tZW1vcnlbMV0gPSAwOyAvKiBubyBzZWNvbmQgcm90YXRpb24gbWVtb3J5IGJhbmsg Ki8KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHA1MDBfZW50ZXJfY29u ZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIgc3Rh dHVzLCBjb3VudCA9IDMwOwo+ICsKPiArCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJRFA1 MDBfRENfQ09ORklHX1JFUSwgTUFMSURQNTAwX0RDX0NPTlRST0wpOwo+ICsJd2hpbGUgKGNvdW50 KSB7Cj4gKwkJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFz ZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDUwMF9EQ19D T05GSUdfUkVRKSA9PSBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSkKPiArCQkJYnJlYWs7Cj4gKwkJ LyoKPiArCQkgKiBlbnRlcmluZyBjb25maWcgbW9kZSBjYW4gdGFrZSBhcyBsb25nIGFzIHRoZSBy ZW5kZXJpbmcKPiArCQkgKiBvZiBhIGZ1bGwgZnJhbWUsIGhlbmNlIHRoZSBsb25nIHNsZWVwIGhl cmUKPiArCQkgKi8KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOwo+ICsJCWNvdW50LS07 Cj4gKwl9Cj4gKwlXQVJOKGNvdW50ID09IDAsICJ0aW1lb3V0IHdoaWxlIGVudGVyaW5nIGNvbmZp ZyBtb2RlIik7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwNTAwX2xlYXZlX2NvbmZpZ19tb2RlKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1cywgY291bnQg PSAzMDsKPiArCj4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ09O RklHX1JFUSwgTUFMSURQNTAwX0RDX0NPTlRST0wpOwo+ICsJd2hpbGUgKGNvdW50KSB7Cj4gKwkJ c3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElE UF9SRUdfU1RBVFVTKTsKPiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVR KSA9PSAwKQo+ICsJCQlicmVhazsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKPiArCQlj b3VudC0tOwo+ICsJfQo+ICsJV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBsZWF2aW5n IGNvbmZpZyBtb2RlIik7Cj4gK30KPiArCj4gK2Jvb2wgbWFsaWRwNTAwX2luX2NvbmZpZ19tb2Rl KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1czsKPiAr Cj4gKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsg TUFMSURQX1JFR19TVEFUVVMpOwo+ICsJaWYgKChzdGF0dXMgJiBNQUxJRFA1MDBfRENfQ09ORklH X1JFUSkgPT0gTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcDUwMF9zZXRfY29uZmlnX3Zh bGlkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJbWFsaWRwX2h3X3Nl dGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDUwMF9DT05GSUdfVkFMSUQpOwo+ ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcDUwMF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNl ICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbW9kZSkKPiArewo+ICsJdTMyIHZhbCA9IDA7Cj4g Kwo+ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTAwX0RDX0NMRUFSX01BU0ss IE1BTElEUDUwMF9EQ19DT05UUk9MKTsKPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxB R1NfSFNZTkNfSElHSCkKPiArCQl2YWwgfD0gTUFMSURQNTAwX0hTWU5DUE9MOwo+ICsJaWYgKG1v ZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lOQ19ISUdIKQo+ICsJCXZhbCB8PSBNQUxJRFA1 MDBfVlNZTkNQT0w7Cj4gKwl2YWwgfD0gTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQ7 Cj4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgdmFsLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7 Cj4gKwo+ICsJLyoKPiArCSAqIE1hbGktRFA1MDAgZW5jb2RlcyB0aGUgYmFja2dyb3VuZCBjb2xv ciBsaWtlIHRoaXM6Cj4gKwkgKiAgICAtIHJlZCAgIEAgTUFMSURQNTAwX0JHTkRfQ09MT1JbMTI6 MF0KPiArCSAqICAgIC0gZ3JlZW4gQCBNQUxJRFA1MDBfQkdORF9DT0xPUlsyNzoxNl0KPiArCSAq ICAgIC0gYmx1ZSAgQCAoTUFMSURQNTAwX0JHTkRfQ09MT1IgKyA0KVsxMjowXQo+ICsJICovCj4g Kwl2YWwgPSAoKE1BTElEUF9CR05EX0NPTE9SX0cgJiAweGZmZikgPDwgMTYpIHwKPiArCSAgICAg IChNQUxJRFBfQkdORF9DT0xPUl9SICYgMHhmZmYpOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2 LCB2YWwsIE1BTElEUDUwMF9CR05EX0NPTE9SKTsKPiArCW1hbGlkcF9od193cml0ZShod2Rldiwg TUFMSURQX0JHTkRfQ09MT1JfQiwgTUFMSURQNTAwX0JHTkRfQ09MT1IgKyA0KTsKPiArCj4gKwl2 YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ICsJCU1B TElEUF9ERV9IX0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7Cj4gKwltYWxpZHBfaHdfd3Jp dGUoaHdkZXYsIHZhbCwgTUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9IX1RJTUlO R1MpOwo+ICsKPiArCXZhbCA9IE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+dmZyb250 X3BvcmNoKSB8Cj4gKwkJTUFMSURQX0RFX1ZfQkFDS1BPUkNIKG1vZGUtPnZiYWNrX3BvcmNoKTsK PiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5HU19CQVNFICsg TUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hfU1lOQ1dJRFRI KG1vZGUtPmhzeW5jX2xlbikgfAo+ICsJCU1BTElEUF9ERV9WX1NZTkNXSURUSChtb2RlLT52c3lu Y19sZW4pOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdT X0JBU0UgKyBNQUxJRFBfREVfU1lOQ19XSURUSCk7Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hf QUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RFX1ZfQUNUSVZFKG1vZGUtPnZhY3RpdmUp Owo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0Ug KyBNQUxJRFBfREVfSFZfQUNUSVZFKTsKPiArCj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZ X0ZMQUdTX0lOVEVSTEFDRUQpCj4gKwkJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9E SVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKPiArCWVsc2UKPiArCQlt YWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQ X0RFX0RJU1BMQVlfRlVOQyk7Cj4gK30KPiArCj4gK2ludCBtYWxpZHA1MDBfcm90bWVtX3JlcXVp cmVkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTE2IHcsIHUxNiBoLCB1MzIgZm10 KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgZGVwdGg7Cj4gKwlpbnQgYnBwOwo+ICsKPiArCS8qIFJH Qjg4OCBvciBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCAqLwo+ICsJaWYgKChmbXQgPT0gRFJNX0ZP Uk1BVF9SR0I4ODgpIHx8IChmbXQgPT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCS8qCj4gKwkgKiBFYWNoIGxheWVyIG5lZWRzIGVub3VnaCByb3RhdGlv biBtZW1vcnkgdG8gZml0IDggbGluZXMKPiArCSAqIHdvcnRoIG9mIHBpeGVsIGRhdGEuIFJlcXVp cmVkIHNpemUgaXMgdGhlbjoKPiArCSAqICAgIHNpemUgPSAocm90YXRlZF93aWR0aCAqIGJwcCAq IDggKSAvIDg7Cj4gKwkgKi8KPiArCWRybV9mYl9nZXRfYnBwX2RlcHRoKGZtdCwgJmRlcHRoLCAm YnBwKTsKPiArCj4gKwlyZXR1cm4gdyAqIGJwcDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxp ZHA1NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1 MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1NTBfQ09ORklHX0lEKTsKPiAr CXU4IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7Cj4gKwo+ICsJaWYgKGNvbmYg JiBNQUxJRFBfSFdfRkVBVFVSRV9EUykKPiArCQlod2Rldi0+ZmVhdHVyZXMgfD0gTUFMSURQX0hX X0ZFQVRVUkVfRFM7Cj4gKwo+ICsJaHdkZXYtPm1pbl9saW5lX3NpemUgPSAyOwo+ICsKPiArCXN3 aXRjaCAobG5fc2l6ZSkgewo+ICsJY2FzZSAwOgo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0g U1pfMks7Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDY0S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ ICsJCXJzaXplID0gNjQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE6Cj4gKwkJaHdkZXYtPm1heF9s aW5lX3NpemUgPSBTWl80SzsKPiArCQkvKiB0d28gYmFua3Mgb2YgMTI4S0IgZm9yIHJvdGF0aW9u IG1lbW9yeSAqLwo+ICsJCXJzaXplID0gMTI4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJ CWh3ZGV2LT5tYXhfbGluZV9zaXplID0gMTI4MDsKPiArCQkvKiB0d28gYmFua3Mgb2YgNDBLQiBm b3Igcm90YXRpb24gbWVtb3J5ICovCj4gKwkJcnNpemUgPSA0MDsKPiArCQlicmVhazsKPiArCWNh c2UgMzoKPiArCQkvKiByZXNlcnZlZCB2YWx1ZSAqLwo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXpl ID0gMDsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlod2Rldi0+cm90YXRpb25f bWVtb3J5WzBdID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHA1NTBfZW50ZXJfY29uZmlnX21vZGUo c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIgc3RhdHVzLCBjb3Vu dCA9IDMwOwo+ICsKPiArCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJRFA1NTBfRENfQ09O RklHX1JFUSwgTUFMSURQNTUwX0RDX0NPTlRST0wpOwo+ICsJd2hpbGUgKGNvdW50KSB7Cj4gKwkJ c3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElE UF9SRUdfU1RBVFVTKTsKPiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVR KSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkKPiArCQkJYnJlYWs7Cj4gKwkJdXNsZWVwX3Jh bmdlKDEwMCwgMTAwMCk7Cj4gKwkJY291bnQtLTsKPiArCX0KPiArCVdBUk4oY291bnQgPT0gMCwg InRpbWVvdXQgd2hpbGUgZW50ZXJpbmcgY29uZmlnIG1vZGUiKTsKPiArfQo+ICsKPiArdm9pZCBt YWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 KQo+ICt7Cj4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDMwOwo+ICsKPiArCW1hbGlkcF9od19jbGVh cmJpdHMoaHdkZXYsIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRLCBNQUxJRFA1NTBfRENfQ09OVFJP TCk7Cj4gKwl3aGlsZSAoY291bnQpIHsKPiArCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2Rl diwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ICsJCWlmICgoc3Rh dHVzICYgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpID09IDApCj4gKwkJCWJyZWFrOwo+ICsJCXVz bGVlcF9yYW5nZSgxMDAsIDEwMDApOwo+ICsJCWNvdW50LS07Cj4gKwl9Cj4gKwlXQVJOKGNvdW50 ID09IDAsICJ0aW1lb3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKPiArfQo+ICsKPiAr Ym9vbCBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2KQo+ICt7Cj4gKwl1MzIgc3RhdHVzOwo+ICsKPiArCXN0YXR1cyA9IG1hbGlkcF9od19yZWFk KGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwlpZiAo KHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSBNQUxJRFA1NTBfRENfQ09ORklH X1JFUSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4g K3ZvaWQgbWFsaWRwNTUwX3NldF9jb25maWdfdmFsaWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2Ug Kmh3ZGV2KQo+ICt7Cj4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0NGR19WQUxJ RCwgTUFMSURQNTUwX0NPTkZJR19WQUxJRCk7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwNTUwX21v ZGVzZXQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCBzdHJ1Y3QgdmlkZW9tb2RlICpt b2RlKQo+ICt7Cj4gKwl1MzIgdmFsID0gTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQ7 Cj4gKwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9ERV9DT05UUk9M KTsKPiArCS8qCj4gKwkgKiBNYWxpLURQNTUwIGFuZCBNYWxpLURQNjUwIGVuY29kZSB0aGUgYmFj a2dyb3VuZCBjb2xvciBsaWtlIHRoaXM6Cj4gKwkgKiAgIC0gcmVkICAgQCBNQUxJRFA1NTBfREVf QkdORF9DT0xPUlsyMzoxNl0KPiArCSAqICAgLSBncmVlbiBAIE1BTElEUDU1MF9ERV9CR05EX0NP TE9SWzE1OjhdCj4gKwkgKiAgIC0gYmx1ZSAgQCBNQUxJRFA1NTBfREVfQkdORF9DT0xPUls3OjBd Cj4gKwkgKgo+ICsJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQg NCBiaXRzIGZyb20gdGhlIGRlZmF1bHQKPiArCSAqIE1BTElEUF9CR05EX0NPTE9SX3ggdmFsdWVz Cj4gKwkgKi8KPiArCXZhbCA9ICgoKE1BTElEUF9CR05EX0NPTE9SX1IgPj4gNCkgJiAweGZmKSA8 PCAxNikgfAo+ICsJICAgICAgKCgoTUFMSURQX0JHTkRfQ09MT1JfRyA+PiA0KSAmIDB4ZmYpIDw8 IDgpIHwKPiArCSAgICAgICgoTUFMSURQX0JHTkRfQ09MT1JfQiA+PiA0KSAmIDB4ZmYpOwo+ICsJ bWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SKTsKPiAr Cj4gKwl2YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ ICsJCU1BTElEUF9ERV9IX0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7Cj4gKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9I X1RJTUlOR1MpOwo+ICsKPiArCXZhbCA9IE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+ dmZyb250X3BvcmNoKSB8Cj4gKwkJTUFMSURQX0RFX1ZfQkFDS1BPUkNIKG1vZGUtPnZiYWNrX3Bv cmNoKTsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfVElNSU5HU19C QVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hfU1lO Q1dJRFRIKG1vZGUtPmhzeW5jX2xlbikgfAo+ICsJCU1BTElEUF9ERV9WX1NZTkNXSURUSChtb2Rl LT52c3luY19sZW4pOwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19IU1lOQ19I SUdIKQo+ICsJCXZhbCB8PSBNQUxJRFA1NTBfSFNZTkNQT0w7Cj4gKwlpZiAobW9kZS0+ZmxhZ3Mg JiBESVNQTEFZX0ZMQUdTX1ZTWU5DX0hJR0gpCj4gKwkJdmFsIHw9IE1BTElEUDU1MF9WU1lOQ1BP TDsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfVElNSU5HU19CQVNF ICsgTUFMSURQX0RFX1NZTkNfV0lEVEgpOwo+ICsKPiArCXZhbCA9IE1BTElEUF9ERV9IX0FDVElW RShtb2RlLT5oYWN0aXZlKSB8IE1BTElEUF9ERV9WX0FDVElWRShtb2RlLT52YWN0aXZlKTsKPiAr CW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1NTBfVElNSU5HU19CQVNFICsgTUFM SURQX0RFX0hWX0FDVElWRSk7Cj4gKwo+ICsJaWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFH U19JTlRFUkxBQ0VEKQo+ICsJCW1hbGlkcF9od19zZXRiaXRzKGh3ZGV2LCBNQUxJRFBfRElTUF9G VU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4gKwllbHNlCj4gKwkJbWFsaWRw X2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9ERV9E SVNQTEFZX0ZVTkMpOwo+ICt9Cj4gKwo+ICtpbnQgbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZChz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCkKPiAr ewo+ICsJdTMyIGJ5dGVzX3Blcl9jb2w7Cj4gKwo+ICsJLyogcmF3IFJHQjg4OCBvciBCR1I4ODgg Y2FuJ3QgYmUgcm90YXRlZCAqLwo+ICsJaWYgKChmbXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHx8 IChmbXQgPT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CXN3aXRjaCAoZm10KSB7Cj4gKwkvKiA4IGxpbmVzIGF0IDQgYnl0ZXMgcGVyIHBpeGVsICovCj4g KwljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjIx MDEwMTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Cj4gKwljYXNlIERSTV9GT1JN QVRfQkdSQTEwMTAxMDI6Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gKwljYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwljYXNl IERSTV9GT1JNQVRfQkdSQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwlj YXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4g KwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKPiArCS8qIDE2IGxpbmVzIGF0IDIgYnl0ZXMgcGVy IHBpeGVsICovCj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Cj4gKwljYXNlIERSTV9GT1JN QVRfQUJHUjE1NTU6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJY2FzZSBEUk1fRk9S TUFUX0JHUjU2NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJY2FzZSBEUk1fRk9STUFU X1lVWVY6Cj4gKwkJYnl0ZXNfcGVyX2NvbCA9IDMyOwo+ICsJCWJyZWFrOwo+ICsJLyogMTYgbGlu ZXMgYXQgMS41IGJ5dGVzIHBlciBwaXhlbCAqLwo+ICsJY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4g KwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ICsJCWJ5dGVzX3Blcl9jb2wgPSAyNDsKPiArCQli cmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHcgKiBieXRlc19wZXJfY29sOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcDY1MF9x dWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBjb25m ID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUDU1MF9DT05GSUdfSUQpOwo+ICsJdTggbG5f c2l6ZSA9IChjb25mID4+IDQpICYgMHgzLCByc2l6ZTsKPiArCj4gKwlpZiAoY29uZiAmIE1BTElE UF9IV19GRUFUVVJFX0RTKQo+ICsJCWh3ZGV2LT5mZWF0dXJlcyB8PSBNQUxJRFBfSFdfRkVBVFVS RV9EUzsKPiArCj4gKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDQ7Cj4gKwo+ICsJc3dpdGNoIChs bl9zaXplKSB7Cj4gKwljYXNlIDA6Cj4gKwljYXNlIDI6Cj4gKwkJLyogcmVzZXJ2ZWQgdmFsdWVz ICovCj4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAwOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJY2FzZSAxOgo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfNEs7Cj4gKwkJLyogdHdv IGJhbmtzIG9mIDEyOEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KPiArCQlyc2l6ZSA9IDEyODsK PiArCQlicmVhazsKPiArCWNhc2UgMzoKPiArCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDI1NjA7 Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDgwS0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ICsJCXJz aXplID0gODA7Cj4gKwl9Cj4gKwo+ICsJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXSA9IGh3ZGV2 LT5yb3RhdGlvbl9tZW1vcnlbMV0gPSByc2l6ZSAqIFNaXzFLOwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK2NvbnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1hbGlkcF9kZXZpY2VbTUFMSURQ X01BWF9ERVZJQ0VTXSA9IHsKPiArCVtNQUxJRFBfNTAwXSA9IHsKPiArCQkubWFwID0gewo+ICsJ CQkuc2VfYmFzZSA9IE1BTElEUDUwMF9TRV9CQVNFLAo+ICsJCQkuZGNfYmFzZSA9IE1BTElEUDUw MF9EQ19CQVNFLAo+ICsJCQkuZGVfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1BTElE UF9ERV9JUlFfVU5ERVJSVU4gfAo+ICsJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJRX0FYSV9FUlIg fAo+ICsJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJRX1ZTWU5DIHwKPiArCQkJCQkgICAgTUFMSURQ NTAwX0RFX0lSUV9HTE9CQUwsCj4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lSUV9W U1lOQywKPiArCQkJfSwKPiArCQkJLnNlX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sgPSBN QUxJRFA1MDBfU0VfSVJRX0NPTkZfTU9ERSwKPiArCQkJCS52c3luY19pcnEgPSAwLAo+ICsJCQl9 LAo+ICsJCQkuZGNfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUDUwMF9ERV9J UlFfQ09ORl9WQUxJRCwKPiArCQkJCS52c3luY19pcnEgPSBNQUxJRFA1MDBfREVfSVJRX0NPTkZf VkFMSUQsCj4gKwkJCX0sCj4gKwkJCS5sYXllcnMgPSBtYWxpZHA1MDBfbGF5ZXJzLAo+ICsJCQku bl9sYXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDUwMF9sYXllcnMpLAo+ICsJCQkuaW5wdXRfZm9y bWF0cyA9IG1hbGlkcDUwMF9kZV9mb3JtYXRzLAo+ICsJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJS QVlfU0laRShtYWxpZHA1MDBfZGVfZm9ybWF0cyksCj4gKwkJCS5vdXRfZGVwdGhfYmFzZSA9IE1B TElEUDUwMF9PVVRQVVRfREVQVEgsCj4gKwkJCS5mZWF0dXJlcyA9IDAsCS8qIG5vIENMRUFSSVJR IHJlZ2lzdGVyICovCj4gKwkJfSwKPiArCQkucXVlcnlfaHcgPSBtYWxpZHA1MDBfcXVlcnlfaHcs Cj4gKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTAwX2VudGVyX2NvbmZpZ19tb2RlLAo+ ICsJCS5sZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDUwMF9sZWF2ZV9jb25maWdfbW9kZSwKPiAr CQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1MDBfaW5fY29uZmlnX21vZGUsCj4gKwkJLnNldF9j b25maWdfdmFsaWQgPSBtYWxpZHA1MDBfc2V0X2NvbmZpZ192YWxpZCwKPiArCQkubW9kZXNldCA9 IG1hbGlkcDUwMF9tb2Rlc2V0LAo+ICsJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxpZHA1MDBfcm90 bWVtX3JlcXVpcmVkLAo+ICsJfSwKPiArCVtNQUxJRFBfNTUwXSA9IHsKPiArCQkubWFwID0gewo+ ICsJCQkuc2VfYmFzZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ICsJCQkuZGNfYmFzZSA9IE1BTElE UDU1MF9EQ19CQVNFLAo+ICsJCQkuZGVfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1B TElEUF9ERV9JUlFfVU5ERVJSVU4gfAo+ICsJCQkJCSAgICBNQUxJRFA1NTBfREVfSVJRX1ZTWU5D LAo+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCj4gKwkJCX0sCj4g KwkJCS5zZV9pcnFfbWFwID0gewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTUwX1NFX0lSUV9F T1cgfAo+ICsJCQkJCSAgICBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIsCj4gKwkJCX0sCj4gKwkJ CS5kY19pcnFfbWFwID0gewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTUwX0RDX0lSUV9DT05G X1ZBTElELAo+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwK PiArCQkJfSwKPiArCQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXllcnMsCj4gKwkJCS5uX2xheWVy cyA9IEFSUkFZX1NJWkUobWFsaWRwNTUwX2xheWVycyksCj4gKwkJCS5pbnB1dF9mb3JtYXRzID0g bWFsaWRwNTUwX2RlX2Zvcm1hdHMsCj4gKwkJCS5uX2lucHV0X2Zvcm1hdHMgPSBBUlJBWV9TSVpF KG1hbGlkcDU1MF9kZV9mb3JtYXRzKSwKPiArCQkJLm91dF9kZXB0aF9iYXNlID0gTUFMSURQNTUw X0RFX09VVFBVVF9ERVBUSCwKPiArCQkJLmZlYXR1cmVzID0gTUFMSURQX1JFR01BUF9IQVNfQ0xF QVJJUlEsCj4gKwkJfSwKPiArCQkucXVlcnlfaHcgPSBtYWxpZHA1NTBfcXVlcnlfaHcsCj4gKwkJ LmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2VudGVyX2NvbmZpZ19tb2RlLAo+ICsJCS5s ZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZSwKPiArCQkuaW5f Y29uZmlnX21vZGUgPSBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUsCj4gKwkJLnNldF9jb25maWdf dmFsaWQgPSBtYWxpZHA1NTBfc2V0X2NvbmZpZ192YWxpZCwKPiArCQkubW9kZXNldCA9IG1hbGlk cDU1MF9tb2Rlc2V0LAo+ICsJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxpZHA1NTBfcm90bWVtX3Jl cXVpcmVkLAo+ICsJfSwKPiArCVtNQUxJRFBfNjUwXSA9IHsKPiArCQkubWFwID0gewo+ICsJCQku c2VfYmFzZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ICsJCQkuZGNfYmFzZSA9IE1BTElEUDU1MF9E Q19CQVNFLAo+ICsJCQkuZGVfaXJxX21hcCA9IHsKPiArCQkJCS5pcnFfbWFzayA9IE1BTElEUF9E RV9JUlFfVU5ERVJSVU4gfAo+ICsJCQkJCSAgICBNQUxJRFA2NTBfREVfSVJRX0RSSUZUIHwKPiAr CQkJCQkgICAgTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKPiArCQkJCS52c3luY19pcnEgPSBNQUxJ RFA1NTBfREVfSVJRX1ZTWU5DLAo+ICsJCQl9LAo+ICsJCQkuc2VfaXJxX21hcCA9IHsKPiArCQkJ CS5pcnFfbWFzayA9IE1BTElEUDU1MF9TRV9JUlFfRU9XIHwKPiArCQkJCQkgICAgTUFMSURQNTUw X1NFX0lSUV9BWElfRVJSLAo+ICsJCQl9LAo+ICsJCQkuZGNfaXJxX21hcCA9IHsKPiArCQkJCS5p cnFfbWFzayA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKPiArCQkJCS52c3luY19pcnEg PSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQsCj4gKwkJCX0sCj4gKwkJCS5sYXllcnMgPSBt YWxpZHA1NTBfbGF5ZXJzLAo+ICsJCQkubl9sYXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9s YXllcnMpLAo+ICsJCQkuaW5wdXRfZm9ybWF0cyA9IG1hbGlkcDY1MF9kZV9mb3JtYXRzLAo+ICsJ CQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlfU0laRShtYWxpZHA2NTBfZGVfZm9ybWF0cyksCj4g KwkJCS5vdXRfZGVwdGhfYmFzZSA9IE1BTElEUDU1MF9ERV9PVVRQVVRfREVQVEgsCj4gKwkJCS5m ZWF0dXJlcyA9IE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRLAo+ICsJCX0sCj4gKwkJLnF1ZXJ5 X2h3ID0gbWFsaWRwNjUwX3F1ZXJ5X2h3LAo+ICsJCS5lbnRlcl9jb25maWdfbW9kZSA9IG1hbGlk cDU1MF9lbnRlcl9jb25maWdfbW9kZSwKPiArCQkubGVhdmVfY29uZmlnX21vZGUgPSBtYWxpZHA1 NTBfbGVhdmVfY29uZmlnX21vZGUsCj4gKwkJLmluX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2lu X2NvbmZpZ19tb2RlLAo+ICsJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTUwX3NldF9jb25m aWdfdmFsaWQsCj4gKwkJLm1vZGVzZXQgPSBtYWxpZHA1NTBfbW9kZXNldCwKPiArCQkucm90bWVt X3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZCwKPiArCX0sCj4gK307Cj4gKwo+ ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21h cCAqbWFwLAo+ICsJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCkKPiArewo+ICsJdTggaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWFwLT5uX2lucHV0X2Zvcm1hdHM7IGkrKykgewo+ICsJ CWlmICgoKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5sYXllciAmIGxheWVyX2lkKSA9PSBsYXllcl9p ZCkgJiYKPiArCQkgICAgKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5mb3JtYXQgPT0gZm9ybWF0KSkK PiArCQkJcmV0dXJuIG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5pZDsKPiArCX0KPiArCj4gKwlyZXR1 cm4gKHU4KS0xOwo+ICt9Cj4gKwo+ICsKPiArdTMyIG1hbGlkcF9od19yZWFkKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIHJlZykKPiArewo+ICsJdTMyIHZhbHVlID0gcmVhZGwo aHdkZXYtPnJlZ3MgKyByZWcpOwo+ICsJcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKwo+ICt2b2lkIG1h bGlkcF9od193cml0ZShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiB2YWx1ZSwg dTMyIHJlZykKPiArewo+ICsJd3JpdGVsKHZhbHVlLCBod2Rldi0+cmVncyArIHJlZyk7Cj4gK30K PiArCj4gK3ZvaWQgbWFsaWRwX2h3X3NldGJpdHMoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2LCB1MzIgbWFzaywgdTMyIHJlZykKPiArewo+ICsJdTMyIGRhdGEgPSBtYWxpZHBfaHdfcmVh ZChod2RldiwgcmVnKTsKPiArCj4gKwlkYXRhIHw9IG1hc2s7Cj4gKwltYWxpZHBfaHdfd3JpdGUo aHdkZXYsIGRhdGEsIHJlZyk7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwX2h3X2NsZWFyYml0cyhz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiBtYXNrLCB1MzIgcmVnKQo+ICt7Cj4g Kwl1MzIgZGF0YSA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCByZWcpOwo+ICsKPiArCWRhdGEgJj0g fm1hc2s7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGRhdGEsIHJlZyk7Cj4gK30KPiArCj4g K3ZvaWQgbWFsaWRwX2h3X2NsZWFyX2lycShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYs IHU4IGJsb2NrLCB1MzIgaXJxKQo+ICt7Cj4gKwl1MzIgYmFzZSA9IDA7Cj4gKwo+ICsJc3dpdGNo IChibG9jaykgewo+ICsJY2FzZSBNQUxJRFBfREVfQkxPQ0s6Cj4gKwkJYmFzZSA9IDA7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIE1BTElEUF9TRV9CTE9DSzoKPiArCQliYXNlID0gaHdkZXYtPm1hcC5z ZV9iYXNlOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNQUxJRFBfRENfQkxPQ0s6Cj4gKwkJYmFzZSA9 IGh3ZGV2LT5tYXAuZGNfYmFzZTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAoaHdkZXYt Pm1hcC5mZWF0dXJlcyAmIE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRKQo+ICsJCW1hbGlkcF9o d193cml0ZShod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19DTEVBUklSUSk7Cj4gKwllbHNl Cj4gKwkJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX1NUQVRV Uyk7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwX2h3X2Rpc2FibGVfaXJxKHN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpCj4gK3sKPiArCXUzMiBiYXNlID0g MDsKPiArCj4gKwlzd2l0Y2ggKGJsb2NrKSB7Cj4gKwljYXNlIE1BTElEUF9ERV9CTE9DSzoKPiAr CQliYXNlID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgTUFMSURQX1NFX0JMT0NLOgo+ICsJCWJh c2UgPSBod2Rldi0+bWFwLnNlX2Jhc2U7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1BTElEUF9EQ19C TE9DSzoKPiArCQliYXNlID0gaHdkZXYtPm1hcC5kY19iYXNlOwo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9SRUdf TUFTS0lSUSk7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwX2h3X2VuYWJsZV9pcnEoc3RydWN0IG1h bGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSkKPiArewo+ICsJdTMyIGJh c2UgPSAwOwo+ICsKPiArCXN3aXRjaCAoYmxvY2spIHsKPiArCWNhc2UgTUFMSURQX0RFX0JMT0NL Ogo+ICsJCWJhc2UgPSAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNQUxJRFBfU0VfQkxPQ0s6Cj4g KwkJYmFzZSA9IGh3ZGV2LT5tYXAuc2VfYmFzZTsKPiArCQlicmVhazsKPiArCWNhc2UgTUFMSURQ X0RDX0JMT0NLOgo+ICsJCWJhc2UgPSBod2Rldi0+bWFwLmRjX2Jhc2U7Cj4gKwkJYnJlYWs7Cj4g Kwl9Cj4gKwo+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9S RUdfTUFTS0lSUSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfZGVfaXJx KGludCBpcnEsIHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFy ZzsKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJ c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2Owo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9p cnFfbWFwICpkZTsKPiArCXUzMiBzdGF0dXMsIG1hc2ssIGRjX3N0YXR1czsKPiArCWlycXJldHVy bl90IHJldCA9IElSUV9OT05FOwo+ICsKPiArCWlmICghZHJtLT5kZXZfcHJpdmF0ZSkKPiArCQly ZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gKwo+ICsJaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCWRlID0g Jmh3ZGV2LT5tYXAuZGVfaXJxX21hcDsKPiArCj4gKwkvKiBmaXJzdCBoYW5kbGUgdGhlIGNvbmZp ZyB2YWxpZCBJUlEgKi8KPiArCWRjX3N0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rl di0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwlpZiAoZGNfc3RhdHVzICYg aHdkZXYtPm1hcC5kY19pcnFfbWFwLnZzeW5jX2lycSkgewo+ICsJCS8qIHdlIGhhdmUgYSBwYWdl IGZsaXAgZXZlbnQgKi8KPiArCQlhdG9taWNfc2V0KCZtYWxpZHAtPmNvbmZpZ192YWxpZCwgMSk7 Cj4gKwkJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RDX0JMT0NLLCBkY19zdGF0 dXMpOwo+ICsJCXJldCA9IElSUV9XQUtFX1RIUkVBRDsKPiArCX0KPiArCj4gKwlzdGF0dXMgPSBt YWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQX1JFR19TVEFUVVMpOwo+ICsJaWYgKCEoc3RhdHVz ICYgZGUtPmlycV9tYXNrKSkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1hc2sgPSBtYWxpZHBf aHdfcmVhZChod2RldiwgTUFMSURQX1JFR19NQVNLSVJRKTsKPiArCXN0YXR1cyAmPSBtYXNrOwo+ ICsJaWYgKHN0YXR1cyAmIGRlLT52c3luY19pcnEpCj4gKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFu aygmbWFsaWRwLT5jcnRjKTsKPiArCj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJ RFBfREVfQkxPQ0ssIHN0YXR1cyk7Cj4gKwo+ICsJcmV0dXJuIChyZXQgPT0gSVJRX05PTkUpID8g SVJRX0hBTkRMRUQgOiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBf ZGVfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBk cm0tPmRldl9wcml2YXRlOwo+ICsKPiArCXdha2VfdXAoJm1hbGlkcC0+d3EpOwo+ICsKPiArCXJl dHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAraW50IG1hbGlkcF9kZV9pcnFfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgaXJxKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAq bWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpo d2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBlbnN1cmUgaW50ZXJy dXB0cyBhcmUgZGlzYWJsZWQgKi8KPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFM SURQX0RDX0JMT0NLLCB+MCk7Cj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBf RENfQkxPQ0ssIH4wKTsKPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RF X0JMT0NLLCB+MCk7Cj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxP Q0ssIH4wKTsKPiArCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRybS0+ZGV2 LCBpcnEsIG1hbGlkcF9kZV9pcnEsCj4gKwkJCQkJbWFsaWRwX2RlX2lycV90aHJlYWRfaGFuZGxl ciwKPiArCQkJCQlJUlFGX1NIQVJFRCwgIm1hbGlkcC1kZSIsIGRybSk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluc3RhbGwgREUgSVJRIGhhbmRsZXJcbiIp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogZmlyc3QgZW5hYmxlIHRoZSBEQyBi bG9jayBJUlFzICovCj4gKwltYWxpZHBfaHdfZW5hYmxlX2lycShod2RldiwgTUFMSURQX0RDX0JM T0NLLAo+ICsJCQkgICAgIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC5pcnFfbWFzayk7Cj4gKwo+ICsJ Lyogbm93IGVuYWJsZSB0aGUgREUgYmxvY2sgSVJRcyAqLwo+ICsJbWFsaWRwX2h3X2VuYWJsZV9p cnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywKPiArCQkJICAgICBod2Rldi0+bWFwLmRlX2lycV9t YXAuaXJxX21hc2spOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIG1hbGlkcF9k ZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFs aWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsKPiArCW1hbGlkcF9od19kaXNhYmxlX2ly cShod2RldiwgTUFMSURQX0RFX0JMT0NLLAo+ICsJCQkgICAgICBod2Rldi0+bWFwLmRlX2lycV9t YXAuaXJxX21hc2spOwo+ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfRENf QkxPQ0ssCj4gKwkJCSAgICAgIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC5pcnFfbWFzayk7Cj4gK30K PiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfc2VfaXJxKGludCBpcnEsIHZvaWQgKmFy ZykKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKPiArCXN0cnVjdCBtYWxp ZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwl1MzIgc3RhdHVzLCBtYXNrOwo+ICsKPiAr CXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLnNlX2Jhc2UgKyBNQUxJ RFBfUkVHX1NUQVRVUyk7Cj4gKwlpZiAoIShzdGF0dXMgJiBod2Rldi0+bWFwLnNlX2lycV9tYXAu aXJxX21hc2spKQo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwltYXNrID0gbWFsaWRwX2h3 X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9SRUdfTUFTS0lSUSk7Cj4g KwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5zZV9iYXNlICsgTUFM SURQX1JFR19TVEFUVVMpOwo+ICsJc3RhdHVzICY9IG1hc2s7Cj4gKwkvKiBUb0RvOiBzdGF0dXMg ZGVjb2RpbmcgYW5kIGZpcmluZyB1cCBvZiBWU1lOQyBhbmQgcGFnZSBmbGlwIGV2ZW50cyAqLwo+ ICsKPiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgc3RhdHVz KTsKPiArCS8qIHJldHVybiBJUlFfV0FLRV9USFJFQUQ7ICovCj4gKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtYWxpZHBfc2VfaXJxX3RocmVhZF9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKPiArewo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ ICt9Cj4gKwo+ICtpbnQgbWFsaWRwX3NlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s IGludCBpcnEpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAq Lwo+ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIH4wKTsK PiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgfjApOwo+ICsK PiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZHJtLT5kZXYsIGlycSwgbWFsaWRw X3NlX2lycSwKPiArCQkJCQltYWxpZHBfc2VfaXJxX3RocmVhZF9oYW5kbGVyLAo+ICsJCQkJCUlS UUZfU0hBUkVELCAibWFsaWRwLXNlIiwgZHJtKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCBTRSBJUlEgaGFuZGxlclxuIik7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwltYWxpZHBfaHdfZW5hYmxlX2lycShod2RldiwgTUFMSURQX1NF X0JMT0NLLAo+ICsJCQkgICAgIGh3ZGV2LT5tYXAuc2VfaXJxX21hcC5pcnFfbWFzayk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgbWFsaWRwX3NlX2lycV9jbGVhbnVwKHN0cnVj dCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBk cm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFs aWRwLT5kZXY7Cj4gKwo+ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfU0Vf QkxPQ0ssCj4gKwkJCSAgICAgIGh3ZGV2LT5tYXAuc2VfaXJxX21hcC5pcnFfbWFzayk7Cj4gK30K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaCBiL2RyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAuLjEyMGEwNzkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfaHcuaAo+IEBAIC0wLDAgKzEsMTkyIEBACj4gKy8qCj4gKyAqCj4gKyAqIChDKSBD T1BZUklHSFQgMjAxMy0yMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8g eW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3Vu ZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8g dGhlIHRlcm1zCj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAqCj4gKyAqIEFSTSBNYWxp IERQIGhhcmR3YXJlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KPiArICovCj4gKwo+ICsjaWZuZGVm IF9fTUFMSURQX0hXX0hfXwo+ICsjZGVmaW5lIF9fTUFMSURQX0hXX0hfXwo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiArCj4g K3N0cnVjdCB2aWRlb21vZGU7Cj4gK3N0cnVjdCBjbGs7Cj4gKwo+ICsvKiBNYWxpIERQIElQIGJs b2NrcyAqLwo+ICtlbnVtIHsKPiArCU1BTElEUF9ERV9CTE9DSyA9IDAsCj4gKwlNQUxJRFBfU0Vf QkxPQ0ssCj4gKwlNQUxJRFBfRENfQkxPQ0sKPiArfTsKPiArCj4gKy8qIE1hbGkgRFAgbGF5ZXIg SURzICovCj4gK2VudW0gewo+ICsJREVfVklERU8xID0gQklUKDApLAo+ICsJREVfR1JBUEhJQ1Mx ID0gQklUKDEpLAo+ICsJREVfR1JBUEhJQ1MyID0gQklUKDIpLCAvKiB1c2VkIG9ubHkgaW4gRFA1 MDAgKi8KPiArCURFX1ZJREVPMiA9IEJJVCgzKSwKPiArCURFX1NNQVJUID0gQklUKDQpLAo+ICt9 Owo+ICsKPiArc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgewo+ICsJdTggbGF5ZXI7CQkvKiBi aXRtYXNrIG9mIGxheWVycyBzdXBwb3J0aW5nIGl0ICovCj4gKwl1OCBpZDsJCQkvKiB1c2VkIGlu dGVybmFsbHkgKi8KPiArCXUzMiBmb3JtYXQ7CQkvKiBEUk0gZm91cmNjICovCj4gK307Cj4gKwo+ ICsvKgo+ICsgKiBoaWRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlZ2lzdGVyIG1hcHMKPiAr ICogYnkgdXNpbmcgYSBjb21tb24gc3RydWN0dXJlIHRvIGhvbGQgdGhlCj4gKyAqIGJhc2UgcmVn aXN0ZXIgb2Zmc2V0cwo+ICsgKi8KPiArCj4gK3N0cnVjdCBtYWxpZHBfaXJxX21hcCB7Cj4gKwl1 MzIgaXJxX21hc2s7CQkvKiBtYXNrIG9mIElSUXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUg YmxvY2sgKi8KPiArCXUzMiB2c3luY19pcnE7CQkvKiBJUlEgYml0IHVzZWQgZm9yIHNpZ25hbGlu ZyBkdXJpbmcgVlNZTkMgKi8KPiArfTsKPiArCj4gK3N0cnVjdCBtYWxpZHBfbGF5ZXIgewo+ICsJ dTggaWQ7CQkJLyogbGF5ZXIgSUQgKi8KPiArCXUxNiBiYXNlOwkJLyogYWRkcmVzcyBvZmZzZXQg Zm9yIHRoZSByZWdpc3RlciBiYW5rICovCj4gKwl1MTYgcHRyOwkJLyogYWRkcmVzcyBvZmZzZXQg Zm9yIHRoZSBwb2ludGVyIHJlZ2lzdGVyICovCj4gK307Cj4gKwo+ICsvKiByZWdtYXAgZmVhdHVy ZXMgKi8KPiArI2RlZmluZSBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUQkoMSA8PCAwKQo+ICsK PiArc3RydWN0IG1hbGlkcF9od19yZWdtYXAgewo+ICsJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhl IERFIHJlZ2lzdGVyIGJhbmsgKi8KPiArCS8qIGlzIGFsd2F5cyAweDAwMDAgKi8KPiArCS8qIGFk ZHJlc3Mgb2Zmc2V0IG9mIHRoZSBTRSByZWdpc3RlcnMgYmFuayAqLwo+ICsJY29uc3QgdTE2IHNl X2Jhc2U7Cj4gKwkvKiBhZGRyZXNzIG9mZnNldCBvZiB0aGUgREMgcmVnaXN0ZXJzIGJhbmsgKi8K PiArCWNvbnN0IHUxNiBkY19iYXNlOwo+ICsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaXJxX21h cCBkZV9pcnFfbWFwOwo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIHNlX2lycV9tYXA7 Cj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgZGNfaXJxX21hcDsKPiArCj4gKwkvKiBs aXN0IG9mIHN1cHBvcnRlZCBsYXllcnMgKi8KPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfbGF5ZXIg KmxheWVyczsKPiArCWNvbnN0IHU4IG5fbGF5ZXJzOwo+ICsKPiArCS8qIGxpc3Qgb2Ygc3VwcG9y dGVkIGlucHV0IGZvcm1hdHMgZm9yIGVhY2ggbGF5ZXIgKi8KPiArCWNvbnN0IHN0cnVjdCBtYWxp ZHBfaW5wdXRfZm9ybWF0ICppbnB1dF9mb3JtYXRzOwo+ICsJY29uc3QgdTggbl9pbnB1dF9mb3Jt YXRzOwo+ICsKPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IGZvciB0aGUgb3V0cHV0IGRlcHRoIHJlZ2lz dGVyICovCj4gKwljb25zdCB1MTYgb3V0X2RlcHRoX2Jhc2U7Cj4gKwo+ICsJLyogYml0bWFwIHdp dGggcmVnaXN0ZXIgbWFwIGZlYXR1cmVzICovCj4gKwljb25zdCB1OCBmZWF0dXJlczsKPiArfTsK PiArCj4gKy8qIGhhcmR3YXJlIGZlYXR1cmVzICovCj4gKyNkZWZpbmUgTUFMSURQX0hXX0ZFQVRV UkVfRFMJCSgxIDw8IDApCS8qIHNwbGl0IHNjcmVlbiAqLwo+ICsKPiArc3RydWN0IG1hbGlkcF9o d19kZXZpY2Ugewo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgbWFwOwo+ICsJdm9p ZCBfX2lvbWVtICpyZWdzOwo+ICsKPiArCS8qIEFQQiBjbG9jayAqLwo+ICsJc3RydWN0IGNsayAq cGNsazsKPiArCS8qIEFYSSBjbG9jayAqLwo+ICsJc3RydWN0IGNsayAqYWNsazsKPiArCS8qIG1h aW4gY2xvY2sgZm9yIGRpc3BsYXkgY29yZSAqLwo+ICsJc3RydWN0IGNsayAqbWNsazsKPiArCS8q IHBpeGVsIGNsb2NrIGZvciBkaXNwbGF5IGNvcmUgKi8KPiArCXN0cnVjdCBjbGsgKnB4bGNsazsK PiArCj4gKwkvKgo+ICsJICogVmFsaWRhdGUgdGhlIGRyaXZlciBpbnN0YW5jZSBhZ2FpbnN0IHRo ZSBoYXJkd2FyZSBiaXRzCj4gKwkgKi8KPiArCWludCAoKnF1ZXJ5X2h3KShzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYpOwo+ICsKPiArCS8qCj4gKwkgKiBTZXQgdGhlIGhhcmR3YXJlIGlu dG8gY29uZmlnIG1vZGUsIHJlYWR5IHRvIGFjY2VwdCBtb2RlIGNoYW5nZXMKPiArCSAqLwo+ICsJ dm9pZCAoKmVudGVyX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYp Owo+ICsKPiArCS8qCj4gKwkgKiBUZWxsIGhhcmR3YXJlIHRvIGV4aXQgY29uZmlndXJhdGlvbiBt b2RlCj4gKwkgKi8KPiArCXZvaWQgKCpsZWF2ZV9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogUXVlcnkgaWYgaGFyZHdhcmUgaXMg aW4gY29uZmlndXJhdGlvbiBtb2RlCj4gKwkgKi8KPiArCWJvb2wgKCppbl9jb25maWdfbW9kZSko c3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogU2V0IGNv bmZpZ3VyYXRpb24gdmFsaWQgZmxhZyBmb3IgaGFyZHdhcmUgcGFyYW1ldGVycyB0aGF0IGNhbgo+ ICsJICogYmUgY2hhbmdlZCBvdXRzaWRlIHRoZSBjb25maWd1cmF0aW9uIG1vZGUuIEhhcmR3YXJl IHdpbGwgdXNlCj4gKwkgKiB0aGUgbmV3IHNldHRpbmdzIHdoZW4gY29uZmlnIHZhbGlkIGlzIHNl dCBhZnRlciB0aGUgZW5kIG9mIHRoZQo+ICsJICogY3VycmVudCBidWZmZXIgc2Nhbm91dAo+ICsJ ICovCj4gKwl2b2lkICgqc2V0X2NvbmZpZ192YWxpZCkoc3RydWN0IG1hbGlkcF9od19kZXZpY2Ug Kmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogU2V0IGEgbmV3IG1vZGUgaW4gaGFyZHdhcmUuIFJl cXVpcmVzIHRoZSBoYXJkd2FyZSB0byBiZSBpbgo+ICsJICogY29uZmlndXJhdGlvbiBtb2RlIGJl Zm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KPiArCSAqLwo+ICsJdm9pZCAoKm1vZGVzZXQp KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbSk7Cj4g Kwo+ICsJLyoKPiArCSAqIENhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgcm90YXRpb24gbWVtb3J5IGdp dmVuIHRoZSBhY3RpdmUgYXJlYQo+ICsJICogYW5kIHRoZSBidWZmZXIgZm9ybWF0Lgo+ICsJICov Cj4gKwlpbnQgKCpyb3RtZW1fcmVxdWlyZWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTE2IHcsIHUxNiBoLCB1MzIgZm10KTsKPiArCj4gKwl1OCBmZWF0dXJlczsKPiArCj4gKwl1 OCBtaW5fbGluZV9zaXplOwo+ICsJdTE2IG1heF9saW5lX3NpemU7Cj4gKwo+ICsJLyogc2l6ZSBv ZiBtZW1vcnkgdXNlZCBmb3Igcm90YXRpbmcgbGF5ZXJzLCB1cCB0byB0d28gYmFua3MgYXZhaWxh YmxlICovCj4gKwl1MzIgcm90YXRpb25fbWVtb3J5WzJdOwo+ICt9Owo+ICsKPiArLyogU3VwcG9y dGVkIHZhcmlhbnRzIG9mIHRoZSBoYXJkd2FyZSAqLwo+ICtlbnVtIHsKPiArCU1BTElEUF81MDAg PSAwLAo+ICsJTUFMSURQXzU1MCwKPiArCU1BTElEUF82NTAsCj4gKwkvKiBrZWVwIHRoZSBuZXh0 IGVudHJ5IGxhc3QgKi8KPiArCU1BTElEUF9NQVhfREVWSUNFUwo+ICt9Owo+ICsKPiArZXh0ZXJu IGNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1hbGlkcF9kZXZpY2VbTUFMSURQX01BWF9E RVZJQ0VTXTsKPiArCj4gK3UzMiBtYWxpZHBfaHdfcmVhZChzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYsIHUzMiByZWcpOwo+ICt2b2lkIG1hbGlkcF9od193cml0ZShzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYsIHUzMiB2YWx1ZSwgdTMyIHJlZyk7Cj4gK3ZvaWQgbWFsaWRwX2h3 X3NldGJpdHMoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MzIgbWFzaywgdTMyIHJl Zyk7Cj4gK3ZvaWQgbWFsaWRwX2h3X2NsZWFyYml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAq aHdkZXYsIHUzMiBtYXNrLCB1MzIgcmVnKTsKPiArdm9pZCBtYWxpZHBfaHdfY2xlYXJfaXJxKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpOwo+ICt2b2lk IG1hbGlkcF9od19kaXNhYmxlX2lycShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHU4 IGJsb2NrLCB1MzIgaXJxKTsKPiArdm9pZCBtYWxpZHBfaHdfZW5hYmxlX2lycShzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKTsKPiArCj4gK2ludCBtYWxp ZHBfZGVfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSk7Cj4gK2ludCBt YWxpZHBfc2VfaXJxX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgaW50IGlycSk7Cj4gK3Zv aWQgbWFsaWRwX2RlX2lycV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ICt2b2lk IG1hbGlkcF9zZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiArCj4gK3U4 IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKGNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwICpt YXAsCj4gKwkJCSAgIHU4IGxheWVyX2lkLCB1MzIgZm9ybWF0KTsKPiArCj4gKy8qCj4gKyAqIGJh Y2tncm91bmQgY29sb3IgY29tcG9uZW50cyBhcmUgZGVmaW5lZCBhcyAxMmJpdHMgdmFsdWVzLAo+ ICsgKiB0aGV5IHdpbGwgYmUgc2hpZnRlZCByaWdodCB3aGVuIHN0b3JlZCBvbiBoYXJkd2FyZSB0 aGF0Cj4gKyAqIHN1cHBvcnRzIG9ubHkgOGJpdHMgcGVyIGNoYW5uZWwKPiArICovCj4gKyNkZWZp bmUgTUFMSURQX0JHTkRfQ09MT1JfUgkJMHgwMDAKPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xP Ul9HCQkweDAwMAo+ICsjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX0IJCTB4MDAwCj4gKwo+ICsj ZW5kaWYgIC8qIF9fTUFMSURQX0hXX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9wbGFuZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5l cy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42ZjIwMTA5Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCj4g QEAgLTAsMCArMSwzNDIgQEAKPiArLyoKPiArICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1p dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZp dS5EdWRhdUBhcm0uY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiArICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBw cm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2Uu Cj4gKyAqCj4gKyAqIEFSTSBNYWxpIERQIHBsYW5lIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KPiAr ICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgo+ICsKPiArI2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ICsjaW5jbHVkZSAi bWFsaWRwX2Rydi5oIgo+ICsKPiArLyogTGF5ZXIgc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAq Lwo+ICsjZGVmaW5lIE1BTElEUF9MQVlFUl9GT1JNQVQJCTB4MDAwCj4gKyNkZWZpbmUgTUFMSURQ X0xBWUVSX0NPTlRST0wJCTB4MDA0Cj4gKyNkZWZpbmUgICBMQVlFUl9FTkFCTEUJCQkoMSA8PCAw KQo+ICsjZGVmaW5lICAgTEFZRVJfUk9UX09GRlNFVAkJOAo+ICsjZGVmaW5lICAgTEFZRVJfSF9G TElQCQkJKDEgPDwgMTApCj4gKyNkZWZpbmUgICBMQVlFUl9WX0ZMSVAJCQkoMSA8PCAxMSkKPiAr I2RlZmluZSAgIExBWUVSX1JPVF9NQVNLCQkoMHhmIDw8IDgpCj4gKyNkZWZpbmUgTUFMSURQX0xB WUVSX1NJWkUJCTB4MDBjCj4gKyNkZWZpbmUgICBMQVlFUl9IX1ZBTCh4KQkJKCgoeCkgJiAweDFm ZmYpIDw8IDApCj4gKyNkZWZpbmUgICBMQVlFUl9WX1ZBTCh4KQkJKCgoeCkgJiAweDFmZmYpIDw8 IDE2KQo+ICsjZGVmaW5lIE1BTElEUF9MQVlFUl9DT01QX1NJWkUJCTB4MDEwCj4gKyNkZWZpbmUg TUFMSURQX0xBWUVSX09GRlNFVAkJMHgwMTQKPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfU1RSSURF CQkweDAxOAo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX2Rlc3Ryb3koc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9f bWFsaWRwX3BsYW5lKHBsYW5lKTsKPiArCj4gKwlpZiAobXAtPmJhc2UuZmIpCj4gKwkJZHJtX2Zy YW1lYnVmZmVyX3VucmVmZXJlbmNlKG1wLT5iYXNlLmZiKTsKPiArCj4gKwlkcm1fcGxhbmVfaGVs cGVyX2Rpc2FibGUocGxhbmUpOwo+ICsJZHJtX3BsYW5lX2NsZWFudXAocGxhbmUpOwo+ICsJZGV2 bV9rZnJlZShwbGFuZS0+ZGV2LT5kZXYsIG1wKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxp ZHBfZGVfYXRvbWljX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJ CQkgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICsJCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKPiArCQkJCQkgaW50IGNydGNfeCwgaW50IGNydGNfeSwKPiArCQkJCQkgdW5zaWduZWQg aW50IGNydGNfdywKPiArCQkJCQkgdW5zaWduZWQgaW50IGNydGNfaCwKPiArCQkJCQkgdWludDMy X3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAo+ICsJCQkJCSB1aW50MzJfdCBzcmNfdywgdWludDMy X3Qgc3JjX2gpCj4gK3sKPiArCXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUo cGxhbmUsIGNydGMsIGZiLCBjcnRjX3gsIGNydGNfeSwKPiArCQkJCQkgICAgICBjcnRjX3csIGNy dGNfaCwgc3JjX3gsIHNyY195LAo+ICsJCQkJCSAgICAgIHNyY193LCBzcmNfaCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgbWFsaWRwX2RlX3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnN0YXRlLAo+ICsJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiAr CQkJCQkgICAgICAgdWludDY0X3QgdmFsKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfc2V0X3Byb3BlcnR5KHBsYW5lLCBwcm9wZXJ0eSwgdmFsKTsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbWFsaWRwX2RlX3BsYW5lX2Z1bmNz ID0gewo+ICsJLnVwZGF0ZV9wbGFuZSA9IG1hbGlkcF9kZV9hdG9taWNfdXBkYXRlX3BsYW5lLAo+ ICsJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAo+ICsJ LmRlc3Ryb3kgPSBtYWxpZHBfZGVfcGxhbmVfZGVzdHJveSwKPiArCS5yZXNldCA9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ICsJLnNldF9wcm9wZXJ0eSA9IGRybV9hdG9taWNfaGVs cGVyX3BsYW5lX3NldF9wcm9wZXJ0eSwKPiArCS5hdG9taWNfc2V0X3Byb3BlcnR5ID0gbWFsaWRw X2RlX3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHksCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9jaGVjayhzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ ICsJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ICsJ dTMyIHNyY193LCBzcmNfaDsKPiArCj4gKwlpZiAoIXN0YXRlLT5jcnRjIHx8ICFzdGF0ZS0+ZmIp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3JjX3cgPSBzdGF0ZS0+c3JjX3cgPj4gMTY7Cj4gKwlz cmNfaCA9IHN0YXRlLT5zcmNfaCA+PiAxNjsKPiArCj4gKwlpZiAoKHN0YXRlLT5jcnRjX3cgPiBt cC0+aHdkZXYtPm1heF9saW5lX3NpemUpIHx8Cj4gKwkgICAgKHN0YXRlLT5jcnRjX2ggPiBtcC0+ aHdkZXYtPm1heF9saW5lX3NpemUpIHx8Cj4gKwkgICAgKHN0YXRlLT5jcnRjX3cgPCBtcC0+aHdk ZXYtPm1pbl9saW5lX3NpemUpIHx8Cj4gKwkgICAgKHN0YXRlLT5jcnRjX2ggPCBtcC0+aHdkZXYt Pm1pbl9saW5lX3NpemUpIHx8Cj4gKwkgICAgKHN0YXRlLT5jcnRjX3cgIT0gc3JjX3cpIHx8IChz dGF0ZS0+Y3J0Y19oICE9IHNyY19oKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwltcC0+ cm90bWVtX3NpemUgPSAwOwo+ICsJaWYgKHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVE X01BU0spIHsKPiArCQlpbnQgdmFsOwo+ICsKPiArCQkvKiBTTUFSVCBsYXllciBjYW4ndCBiZSBy b3RhdGVkICovCj4gKwkJaWYgKG1wLT5sYXllci0+aWQgPT0gREVfU01BUlQpCj4gKwkJCXJldHVy biAtRUlOVkFMOwo+ICsKPiArCQl2YWwgPSBtcC0+aHdkZXYtPnJvdG1lbV9yZXF1aXJlZChtcC0+ aHdkZXYsIHN0YXRlLT5jcnRjX2gsCj4gKwkJCQkJCSBzdGF0ZS0+Y3J0Y193LAo+ICsJCQkJCQkg c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpOwo+ICsJCWlmICh2YWwgPCAwKQo+ICsJCQlyZXR1cm4g dmFsOwo+ICsKPiArCQltcC0+cm90bWVtX3NpemUgPSB2YWw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9kZV9wbGFuZV91cGRhdGUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRf c3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiArCXN0cnVj dCBtYWxpZHBfcGxhbmUgKm1wOwo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgKm1h cDsKPiArCXU4IGZvcm1hdF9pZDsKPiArCXUxNiBwdHI7Cj4gKwl1MzIgZm9ybWF0LCBzcmNfdywg c3JjX2gsIGRlc3RfdywgZGVzdF9oLCB2YWwgPSAwOwo+ICsJaW50IG51bV9wbGFuZXMsIGk7Cj4g Kwo+ICsJaWYgKCFwbGFuZS0+c3RhdGUtPmNydGMgfHwgIXBsYW5lLT5zdGF0ZS0+ZmIpCj4gKwkJ cmV0dXJuOwoKSWYgeW91IGhhdmUgYW4gYXRvbWljX2Rpc2FibGUgaG9vayBmb3IgeW91ciBwbGFu ZSB5b3Ugc2hvdWxkbid0IG5lZWQgdGhlc2UKY2hlY2tzIGhlcmUgLSBoZWxwZXJzIHdpbGwgb25s eSBjYWxsIHlvdSB3aGVuIGFjdHVhbGx5IGVuYWJsaW5nL3VwZGF0aW5nLAppLmUuIHdoZW4gZmIg YW5kIGNydGMgIT0gTlVMTC4KCj4gKwo+ICsJbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ ICsKPiArI2lmZGVmIE1BTElEUF9FTkFCTEVfQkdORF9DT0xPUl9BU19QUklNQVJZX1BMQU5FCj4g KwkvKiBza2lwIHRoZSBwcmltYXJ5IHBsYW5lLCBpdCBpcyB1c2luZyB0aGUgYmFja2dyb3VuZCBj b2xvciAqLwo+ICsJaWYgKCFtcC0+bGF5ZXIgfHwgIW1wLT5sYXllci0+aWQpCj4gKwkJcmV0dXJu Owo+ICsjZW5kaWYKPiArCj4gKwltYXAgPSAmbXAtPmh3ZGV2LT5tYXA7Cj4gKwlmb3JtYXQgPSBw bGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7Cj4gKwlmb3JtYXRfaWQgPSBtYWxpZHBfaHdf Z2V0X2Zvcm1hdF9pZChtYXAsIG1wLT5sYXllci0+aWQsIGZvcm1hdCk7Cj4gKwlpZiAoZm9ybWF0 X2lkID09ICh1OCktMSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbnVtX3BsYW5lcyA9IGRybV9mb3Jt YXRfbnVtX3BsYW5lcyhmb3JtYXQpOwo+ICsKPiArCS8qIGNvbnZlcnQgc3JjIHZhbHVlcyBmcm9t IFExNiBmaXhlZCBwb2ludCB0byBpbnRlZ2VyICovCj4gKwlzcmNfdyA9IHBsYW5lLT5zdGF0ZS0+ c3JjX3cgPj4gMTY7Cj4gKwlzcmNfaCA9IHBsYW5lLT5zdGF0ZS0+c3JjX2ggPj4gMTY7Cj4gKwlp ZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiArCQlk ZXN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfaDsKPiArCQlkZXN0X2ggPSBwbGFuZS0+c3RhdGUt PmNydGNfdzsKPiArCX0gZWxzZSB7Cj4gKwkJZGVzdF93ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7 Cj4gKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7Cj4gKwl9Cj4gKwlEUk1fREVCVUdf RFJJVkVSKCJzcmNfdyA9ICVkLCBzcmNfaCA9ICVkLCBkZXN0X3cgPSAlZCwgZGVzdF9oID0gJWRc biIsCj4gKwkJCSBzcmNfdywgc3JjX2gsIGRlc3RfdywgZGVzdF9oKTsKPiArCj4gKwltYWxpZHBf aHdfd3JpdGUobXAtPmh3ZGV2LCBmb3JtYXRfaWQsIG1wLT5sYXllci0+YmFzZSk7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgewo+ICsJCS8qIGNhbGN1bGF0ZSB0aGUg b2Zmc2V0IGZvciB0aGUgbGF5ZXIncyBwbGFuZSByZWdpc3RlcnMgKi8KPiArCQlwdHIgPSBtcC0+ bGF5ZXItPnB0ciArIChpIDw8IDQpOwo+ICsKPiArCQlvYmogPSBkcm1fZmJfY21hX2dldF9nZW1f b2JqKHBsYW5lLT5zdGF0ZS0+ZmIsIGkpOwo+ICsJCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYs IGxvd2VyXzMyX2JpdHMob2JqLT5wYWRkciksIHB0cik7Cj4gKwkJbWFsaWRwX2h3X3dyaXRlKG1w LT5od2RldiwgdXBwZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRyICsgNCk7Cj4gKwkJbWFsaWRw X2h3X3dyaXRlKG1wLT5od2RldiwgcGxhbmUtPnN0YXRlLT5mYi0+cGl0Y2hlc1tpXSwKPiArCQkJ CW1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9TVFJJREUpOwo+ICsJfQo+ICsKPiArCW1h bGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKHNyY193KSB8IExBWUVSX1ZfVkFM KHNyY19oKSwKPiArCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX1NJWkUpOwo+ICsK PiArCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKGRlc3RfdykgfCBMQVlF Ul9WX1ZBTChkZXN0X2gpLAo+ICsJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09N UF9TSVpFKTsKPiArCj4gKwltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBMQVlFUl9IX1ZBTChw bGFuZS0+c3RhdGUtPmNydGNfeCkgfAo+ICsJCQlMQVlFUl9WX1ZBTChwbGFuZS0+c3RhdGUtPmNy dGNfeSksCj4gKwkJCW1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9PRkZTRVQpOwo+ICsK PiArCS8qIGZpcnN0IGNsZWFyIHRoZSByb3RhdGlvbiBiaXRzIGluIHRoZSByZWdpc3RlciAqLwo+ ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhtcC0+aHdkZXYsIExBWUVSX1JPVF9NQVNLLAo+ICsJCQkg ICAgbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX0NPTlRST0wpOwo+ICsKPiArCS8qIHNl dHVwIHRoZSByb3RhdGlvbiBhbmQgYXhpcyBmbGlwIGJpdHMgKi8KPiArCWlmIChwbGFuZS0+c3Rh dGUtPnJvdGF0aW9uICYgRFJNX1JPVEFURV9NQVNLKQo+ICsJCXZhbCA9IGlsb2cyKHBsYW5lLT5z dGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIDw8IExBWUVSX1JPVF9PRkZTRVQ7Cj4g KwlpZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAmIEJJVChEUk1fUkVGTEVDVF9YKSkKPiArCQl2 YWwgfD0gTEFZRVJfVl9GTElQOwo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQo RFJNX1JFRkxFQ1RfWSkpCj4gKwkJdmFsIHw9IExBWUVSX0hfRkxJUDsKPiArCj4gKwkvKiBzZXQg dGhlICdlbmFibGUgbGF5ZXInIGJpdCAqLwo+ICsJdmFsIHw9IExBWUVSX0VOQUJMRTsKPiArCj4g KwltYWxpZHBfaHdfc2V0Yml0cyhtcC0+aHdkZXYsIHZhbCwKPiArCQkJICBtcC0+bGF5ZXItPmJh c2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlk cF9kZV9wbGFuZV9kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgIHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX3BsYW5l ICptcCA9IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJLyogVG9EbzogZmlndXJlIG91 dCB0aGUgYXR0YWNoZWQgZnJhbWVidWZmZXIgbGlmZWN5Y2xlICovCgpZb3UgZG9uJ3QgbmVlZCB0 byBmaWd1cmUgdGhpcyBvdXQsIGF0b21pYyBoZWxwZXJzIHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBm Ygpmb3IgeW91LgoKPiArCW1hbGlkcF9od19jbGVhcmJpdHMobXAtPmh3ZGV2LCBMQVlFUl9FTkFC TEUsCj4gKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtYWxp ZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLnByZXBhcmVfZmIgPSBOVUxMLAo+ICsJ LmNsZWFudXBfZmIgPSBOVUxMLAo+ICsJLmF0b21pY19jaGVjayA9IG1hbGlkcF9kZV9wbGFuZV9j aGVjaywKPiArCS5hdG9taWNfdXBkYXRlID0gbWFsaWRwX2RlX3BsYW5lX3VwZGF0ZSwKPiArCS5h dG9taWNfZGlzYWJsZSA9IG1hbGlkcF9kZV9wbGFuZV9kaXNhYmxlLAo+ICt9Owo+ICsKPiArI2lm ZGVmIE1BTElEUF9FTkFCTEVfQkdORF9DT0xPUl9BU19QUklNQVJZX1BMQU5FCj4gK3N0YXRpYyBj b25zdCB1aW50MzJfdCBzYWZlX21vZGVzZXRfZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9Y UkdCODg4OCwKPiArCURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IG1hbGlkcF9kZV9jcmVhdGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAr CXN0cnVjdCBtYWxpZHBfcGxhbmUgKnBsYW5lOwo+ICsJaW50IHJldDsKPiArCj4gKwlwbGFuZSA9 IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFwbGFuZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBkcm1fdW5pdmVy c2FsX3BsYW5lX2luaXQoZHJtLCAmcGxhbmUtPmJhc2UsIDAsCj4gKwkJCQkgICAgICAgJm1hbGlk cF9kZV9wbGFuZV9mdW5jcywKPiArCQkJCSAgICAgICBzYWZlX21vZGVzZXRfZm9ybWF0cywKPiAr CQkJCSAgICAgICBBUlJBWV9TSVpFKHNhZmVfbW9kZXNldF9mb3JtYXRzKSwKPiArCQkJCSAgICAg ICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZtYWxpZHBf ZGVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiArCXBsYW5lLT5od2RldiA9IG1hbGlkcC0+ZGV2Owo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiAraW50IG1hbGlkcF9kZV9wbGFu ZXNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2Ry bSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdf cmVnbWFwICptYXAgPSAmbWFsaWRwLT5kZXYtPm1hcDsKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUg KnBsYW5lID0gTlVMTDsKPiArCWVudW0gZHJtX3BsYW5lX3R5cGUgcGxhbmVfdHlwZTsKPiArCXVu c2lnbmVkIGxvbmcgY3J0Y3MgPSAxIDw8IGRybS0+bW9kZV9jb25maWcubnVtX2NydGM7Cj4gKwl1 MzIgKmZvcm1hdHM7Cj4gKwlpbnQgcmV0LCBpLCBqLCBuOwo+ICsKPiArI2lmZGVmIE1BTElEUF9F TkFCTEVfQkdORF9DT0xPUl9BU19QUklNQVJZX1BMQU5FCj4gKwlyZXQgPSBtYWxpZHBfZGVfY3Jl YXRlX3ByaW1hcnlfcGxhbmUoZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr CXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwo+ICsjZW5kaWYKPiArCj4gKwlm b3JtYXRzID0ga2NhbGxvYyhtYXAtPm5faW5wdXRfZm9ybWF0cywgc2l6ZW9mKCpmb3JtYXRzKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZvcm1hdHMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJ CWdvdG8gY2xlYW51cDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWFwLT5uX2xheWVy czsgaSsrKSB7Cj4gKwkJdTggaWQgPSBtYXAtPmxheWVyc1tpXS5pZDsKPiArCj4gKwkJcGxhbmUg PSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKPiAr CQlpZiAoIXBsYW5lKSB7Cj4gKwkJCXJldCA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gY2xlYW51cDsK PiArCQl9Cj4gKwo+ICsJCS8qIGJ1aWxkIHRoZSBsaXN0IG9mIERSTSBzdXBwb3J0ZWQgZm9ybWF0 cyBiYXNlZCBvbiB0aGUgbWFwICovCj4gKwkJZm9yIChuID0gMCwgaiA9IDA7ICBqIDwgbWFwLT5u X2lucHV0X2Zvcm1hdHM7IGorKykgewo+ICsJCQlpZiAoKG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5s YXllciAmIGlkKSA9PSBpZCkKPiArCQkJCWZvcm1hdHNbbisrXSA9IG1hcC0+aW5wdXRfZm9ybWF0 c1tqXS5mb3JtYXQ7Cj4gKwkJfQo+ICsKPiArI2lmbmRlZiBNQUxJRFBfRU5BQkxFX0JHTkRfQ09M T1JfQVNfUFJJTUFSWV9QTEFORQo+ICsJCXBsYW5lX3R5cGUgPSAoaSA9PSAwKSA/IERSTV9QTEFO RV9UWVBFX1BSSU1BUlkgOgo+ICsJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVk7Cj4gKyNlbmRp Zgo+ICsJCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZwbGFuZS0+YmFzZSwg Y3J0Y3MsCj4gKwkJCQkJICAgICAgICZtYWxpZHBfZGVfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCj4g KwkJCQkJICAgICAgIG4sIHBsYW5lX3R5cGUsIE5VTEwpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJ CQlnb3RvIGNsZWFudXA7Cj4gKwo+ICsJCWlmICghZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9w cm9wZXJ0eSkgewo+ICsJCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gQklUKERSTV9ST1RBVEVfMCkg fAo+ICsJCQkJCSAgICAgIEJJVChEUk1fUk9UQVRFXzkwKSB8Cj4gKwkJCQkJICAgICAgQklUKERS TV9ST1RBVEVfMTgwKSB8Cj4gKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMjcwKSB8Cj4gKwkJ CQkJICAgICAgQklUKERSTV9SRUZMRUNUX1gpIHwKPiArCQkJCQkgICAgICBCSVQoRFJNX1JFRkxF Q1RfWSk7Cj4gKwkJCWRybS0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQo+ICsJCQkJ ZHJtX21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRybSwgZmxhZ3MpOwo+ICsJCX0KPiAr CQlpZiAoZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkKPiArCQkJZHJtX29iamVj dF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2UsCj4gKwkJCQkJCSAgIGRybS0+bW9k ZV9jb25maWcucm90YXRpb25fcHJvcGVydHksCj4gKwkJCQkJCSAgIEJJVChEUk1fUk9UQVRFXzAp KTsKPiArCj4gKwkJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLAo+ICsJCQkJICAg ICAmbWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwkJcGxhbmUtPmh3ZGV2ID0gbWFs aWRwLT5kZXY7Cj4gKwkJcGxhbmUtPmxheWVyID0gJm1hcC0+bGF5ZXJzW2ldOwo+ICsJfQo+ICsK PiArCWtmcmVlKGZvcm1hdHMpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArY2xlYW51cDoKPiAr CW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOwo+ICsJa2ZyZWUoZm9ybWF0cyk7Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3ko c3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IGRybV9wbGFuZSAqcCwgKnB0 Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBwdCwgJmRybS0+bW9kZV9jb25m aWcucGxhbmVfbGlzdCwgaGVhZCkgewo+ICsJCWRybV9wbGFuZV9jbGVhbnVwKHApOwo+ICsJfQo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uNzNmZWNiMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtL21hbGlkcF9yZWdzLmgKPiBAQCAtMCwwICsxLDE3MiBAQAo+ICsvKgo+ICsgKiAo QykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAq IEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFu ZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMK PiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1 NTAvRFA2NTAgcmVnaXN0ZXJzIGRlZmluaXRpb24uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX01B TElEUF9SRUdTX0hfXwo+ICsjZGVmaW5lIF9fTUFMSURQX1JFR1NfSF9fCj4gKwo+ICsvKgo+ICsg KiBhYmJyZXZpYXRpb25zIHVzZWQ6Cj4gKyAqICAgIC0gREMgLSBkaXNwbGF5IGNvcmUgKGdlbmVy YWwgc2V0dGluZ3MpCj4gKyAqICAgIC0gREUgLSBkaXNwbGF5IGVuZ2luZQo+ICsgKiAgICAtIFNF IC0gc2NhbGluZyBlbmdpbmUKPiArICovCj4gKwo+ICsvKiBpbnRlcnJ1cHQgYml0IG1hc2tzICov Cj4gKyNkZWZpbmUgTUFMSURQX0RFX0lSUV9VTkRFUlJVTgkJCSgxIDw8IDApCj4gKwo+ICsjZGVm aW5lIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VSUgkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1 MDBfREVfSVJRX1ZTWU5DCQkJKDEgPDwgNSkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1BS T0dfTElORQkJKDEgPDwgNikKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1NBVFVSQVRJT04J CSgxIDw8IDcpCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX1ZBTElECQkoMSA8PCA4 KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQ09ORl9NT0RFCQkoMSA8PCAxMSkKPiArI2Rl ZmluZSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAxNykKPiArI2RlZmluZSBN QUxJRFA1MDBfREVfSVJRX1BNX0FDVElWRQkJKDEgPDwgMTgpCj4gKyNkZWZpbmUgTUFMSURQNTAw X0RFX0lSUV9URVNUTU9ERV9BQ1RJVkUJKDEgPDwgMTkpCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RF X0lSUV9GT1JDRV9CTE5LX0FDVElWRQkoMSA8PCAyNCkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVf SVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0dMT0JB TAkJCSgxIDw8IDMxKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9NT0RFCQkoMSA8 PCAwKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9WQUxJRAkJKDEgPDwgNCkKPiAr I2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0lOSVRfQlVTWQkJKDEgPDwgNSkKPiArI2RlZmluZSBN QUxJRFA1MDBfU0VfSVJRX0FYSV9FUlJPUgkJKDEgPDwgOCkKPiArI2RlZmluZSBNQUxJRFA1MDBf U0VfSVJRX09WRVJSVU4JCSgxIDw8IDkpCj4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9H X0xJTkUxCQkoMSA8PCAxMikKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX1BST0dfTElORTIJ CSgxIDw8IDEzKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9BQ1RJVkUJCSgxIDw8 IDE3KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkKPiAr I2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBN QUxJRFA1MDBfU0VfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQo+ICsKPiArI2RlZmluZSBNQUxJRFA1 NTBfREVfSVJRX1NBVFVSQVRJT04JCSgxIDw8IDgpCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lS UV9WU1lOQwkJCSgxIDw8IDEyKQo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9JUlFfUFJPR19MSU5F CQkoMSA8PCAxMykKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfSVJRX0FYSV9FUlIJCSgxIDw8IDE2 KQo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9JUlFfRU9XCQkJKDEgPDwgMCkKPiArI2RlZmluZSBN QUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDU1MF9E Q19JUlFfQ09ORl9WQUxJRAkJKDEgPDwgMCkKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NP TkZfTU9ERQkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfQUNUSVZF CQkoMSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0RFCQkJKDEgPDwgMjApCj4g KyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9TRQkJCSgxIDw8IDI0KQo+ICsKPiArI2RlZmluZSBN QUxJRFA2NTBfREVfSVJRX0RSSUZUCQkJKDEgPDwgNCkKPiArCj4gKy8qIGJpdCBtYXNrcyB0aGF0 IGFyZSBjb21tb24gYmV0d2VlbiBwcm9kdWN0cyAqLwo+ICsjZGVmaW5lICAgTUFMSURQX0NGR19W QUxJRAkJKDEgPDwgMCkKPiArI2RlZmluZSAgIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VECSgxIDw8 IDgpCj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzIGZvciBJUlEgbWFuYWdlbWVudCAqLwo+ICsj ZGVmaW5lIE1BTElEUF9SRUdfU1RBVFVTCQkweDAwMDAwCj4gKyNkZWZpbmUgTUFMSURQX1JFR19T RVRJUlEJCTB4MDAwMDQKPiArI2RlZmluZSBNQUxJRFBfUkVHX01BU0tJUlEJCTB4MDAwMDgKPiAr I2RlZmluZSBNQUxJRFBfUkVHX0NMRUFSSVJRCQkweDAwMDBjCj4gKwo+ICsvKiByZWdpc3RlciBv ZmZzZXRzICovCj4gKyNkZWZpbmUgTUFMSURQX0RFX0NPUkVfSUQJCTB4MDAwMTgKPiArI2RlZmlu ZSBNQUxJRFBfREVfRElTUExBWV9GVU5DCQkweDAwMDIwCj4gKwo+ICsvKiB0aGVzZSBvZmZzZXRz IGFyZSByZWxhdGl2ZSB0byBNQUxJRFA1eDBfVElNSU5HU19CQVNFICovCj4gKyNkZWZpbmUgTUFM SURQX0RFX0hfVElNSU5HUwkJMHgwCj4gKyNkZWZpbmUgTUFMSURQX0RFX1ZfVElNSU5HUwkJMHg0 Cj4gKyNkZWZpbmUgTUFMSURQX0RFX1NZTkNfV0lEVEgJCTB4OAo+ICsjZGVmaW5lIE1BTElEUF9E RV9IVl9BQ1RJVkUJCTB4Ywo+ICsKPiArLyogbWFjcm9zIHRvIHNldCB2YWx1ZXMgaW50byByZWdp c3RlcnMgKi8KPiArI2RlZmluZSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKHgpCSgoKHgpICYgMHhm ZmYpIDw8IDApCj4gKyNkZWZpbmUgTUFMSURQX0RFX0hfQkFDS1BPUkNIKHgpCSgoKHgpICYgMHgz ZmYpIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0goeCkJKCgoeCkg JiAweGZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0goeCkJKCgo eCkgJiAweGZmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBfREVfVl9CQUNLUE9SQ0goeCkJKCgo eCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfREVfSF9TWU5DV0lEVEgoeCkJKCgo eCkgJiAweDNmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBfREVfVl9TWU5DV0lEVEgoeCkJKCgo eCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfREVfSF9BQ1RJVkUoeCkJCSgoKHgp ICYgMHgxZmZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUF9ERV9WX0FDVElWRSh4KQkJKCgoeCkg JiAweDFmZmYpIDw8IDE2KQo+ICsKPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0cyBzcGVj aWZpYyB0byBEUDUwMCAqLwo+ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19CQVNFCQkweDAwMDAwCj4g KyNkZWZpbmUgTUFMSURQNTAwX0RDX0NPTlRST0wJCTB4MDAwMGMKPiArI2RlZmluZSAgIE1BTElE UDUwMF9EQ19DT05GSUdfUkVRCSgxIDw8IDE3KQo+ICsjZGVmaW5lICAgTUFMSURQNTAwX0hTWU5D UE9MCQkoMSA8PCAyMCkKPiArI2RlZmluZSAgIE1BTElEUDUwMF9WU1lOQ1BPTAkJKDEgPDwgMjEp Cj4gKyNkZWZpbmUgICBNQUxJRFA1MDBfRENfQ0xFQVJfTUFTSwkweDMwMGZmZgo+ICsjZGVmaW5l IE1BTElEUDUwMF9ERV9MSU5FX0NPVU5URVIJMHgwMDAxMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9E RV9BWElfQ09OVFJPTAkweDAwMDE0Cj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX1NFQ1VSRV9DVFJM CTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfQ0hST01BX0tFWQkJMHgwMDAyNAo+ICsj ZGVmaW5lIE1BTElEUDUwMF9USU1JTkdTX0JBU0UJCTB4MDAwMjgKPiArCj4gKyNkZWZpbmUgTUFM SURQNTAwX0NPTkZJR18zRAkJMHgwMDAzOAo+ICsjZGVmaW5lIE1BTElEUDUwMF9CR05EX0NPTE9S CQkweDAwMDNjCj4gKyNkZWZpbmUgTUFMSURQNTAwX09VVFBVVF9ERVBUSAkJMHgwMDA0NAo+ICsj ZGVmaW5lIE1BTElEUDUwMF9ZVVZfUkdCX0NPRUYJCTB4MDAwNDgKPiArI2RlZmluZSBNQUxJRFA1 MDBfQ09MT1JfQURKX0NPRUYJMHgwMDA3OAo+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxF X0FERFIJMHgwMDBhOAo+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxFX0RBVEEJMHgwMDBh Ywo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9CQVNFCQkweDAwMTAwCj4gKyNkZWZpbmUgTUFM SURQNTAwX0RFX0xWX1BUUl9CQVNFCTB4MDAxMjQKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcx X0JBU0UJCTB4MDAyMDAKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcxX1BUUl9CQVNFCTB4MDAy MWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcyX0JBU0UJCTB4MDAzMDAKPiArI2RlZmluZSBN QUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFCTB4MDAzMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfU0Vf QkFTRQkJMHgwMGMwMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9QVFJfQkFTRQkJMHgwMGUwYwo+ ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19JUlFfQkFTRQkJMHgwMGYwMAo+ICsjZGVmaW5lIE1BTElE UDUwMF9DT05GSUdfVkFMSUQJCTB4MDBmMDAKPiArI2RlZmluZSBNQUxJRFA1MDBfQ09ORklHX0lE CQkweDAwZmQ0Cj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNpZmljIHRv IERQNTUwL0RQNjUwICovCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0NPTlRST0wJCTB4MDAwMTAK PiArI2RlZmluZSBNQUxJRFA1NTBfREVfTElORV9DT1VOVEVSCTB4MDAwMTQKPiArI2RlZmluZSBN QUxJRFA1NTBfREVfQVhJX0NPTlRST0wJMHgwMDAxOAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9R T1MJCTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1NTBfVElNSU5HU19CQVNFCQkweDAwMDMwCj4g KyNkZWZpbmUgTUFMSURQNTUwX0hTWU5DUE9MCQkoMSA8PCAxMikKPiArI2RlZmluZSBNQUxJRFA1 NTBfVlNZTkNQT0wJCSgxIDw8IDI4KQo+ICsKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfRElTUF9T SURFQkFORAkweDAwMDQwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1IJCTB4MDAw NDQKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRICTB4MDAwNGMKPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfQ09MT1JfQ09FRgkJMHgwMDA1MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9E RV9DT0VGX1RBQkxFX0FERFIJMHgwMDA4MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0VGX1RB QkxFX0RBVEEJMHgwMDA4NAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfQkFTRQkJMHgwMDEw MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfUFRSX0JBU0UJMHgwMDEyNAo+ICsjZGVmaW5l IE1BTElEUDU1MF9ERV9MVjJfQkFTRQkJMHgwMDIwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9M VjJfUFRSX0JBU0UJMHgwMDIyNAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MR19CQVNFCQkweDAw MzAwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNFCTB4MDAzMWMKPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfTFNfQkFTRQkJMHgwMDQwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9M U19QVFJfQkFTRQkweDAwNDJjCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX1BFUkZfQkFTRQkJMHgw MDUwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9CQVNFCQkweDA4MDAwCj4gKyNkZWZpbmUgTUFM SURQNTUwX0RDX0JBU0UJCTB4MGMwMDAKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfQ09OVFJPTAkJ MHgwYzAxMAo+ICsjZGVmaW5lICAgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEJKDEgPDwgMTYpCj4g KyNkZWZpbmUgTUFMSURQNTUwX0NPTkZJR19WQUxJRAkJMHgwYzAxNAo+ICsjZGVmaW5lIE1BTElE UDU1MF9DT05GSUdfSUQJCTB4MGZmZDQKPiArCj4gKy8qCj4gKyAqIFN0YXJ0aW5nIHdpdGggRFA1 NTAgdGhlIHJlZ2lzdGVyIG1hcCBibG9ja3MgaGFzIGJlZW4gc3RhbmRhcmRpc2VkIHRvIHRoZQo+ ICsgKiBmb2xsb3dpbmcgbGF5b3V0Ogo+ICsgKgo+ICsgKiAgIE9mZnNldCAgICAgICAgICAgIEJs b2NrIHJlZ2lzdGVycwo+ICsgKiAgMHgwMDAwMCAgICAgICAgICAgIERpc3BsYXkgRW5naW5lCj4g KyAqICAweDA4MDAwICAgICAgICAgICAgU2NhbGluZyBFbmdpbmUKPiArICogIDB4MGMwMDAgICAg ICAgICAgICBEaXNwbGF5IENvcmUKPiArICogIDB4MTAwMDAgICAgICAgICAgICBTZWN1cmUgY29u dHJvbAo+ICsgKgo+ICsgKiBUaGUgb2xkIERQNTAwIElQIG1peGVzIHNvbWUgREMgd2l0aCB0aGUg REUgcmVnaXN0ZXJzLCBoZW5jZSB0aGUgbmVlZAo+ICsgKiBmb3IgYSBtYXBwaW5nIHN0cnVjdHVy ZS4KPiArICovCj4gKwo+ICsjZW5kaWYgLyogX19NQUxJRFBfUkVHU19IX18gKi8KPiAtLSAKPiAy LjcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=