From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8908D6E467 for ; Wed, 1 Aug 2018 14:47:49 +0000 (UTC) Date: Wed, 1 Aug 2018 16:47:39 +0200 From: Katarzyna Dec Message-ID: <20180801144739.GG23597@kdec5-desk.ger.corp.intel.com> References: <20180725213823.2025-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180725213823.2025-1-chris@chris-wilson.co.uk> Subject: Re: [igt-dev] [PATCH i-g-t] igt: Another combinatorial exercise for blits List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson Cc: igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCBKdWwgMjUsIDIwMTggYXQgMTA6Mzg6MjNQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFRoZSBhaW0gb2YgdGhpcyB0ZXN0IGlzIHRvIGNvbWJpbmUgZ2VtX2xpbmVhcl9ibGl0 cywgZ2VtX3RpbGVkX2JsaXRzIGV0Ywo+IGludG8gb25lIHRlc3QgcnVubmVyIHRoYXQgY292ZXJz IGludmVzdGlnYXRpb24gaW50byBIVyBhbGlnbm1lbnQgaXNzdWVzCj4gYXMgd2VsbCBhcyBkcml2 ZXIgYm91bmRhcmllcyAocmVsb2NzLCBhY2Nlc3MsIHRocmFzaGluZykuCj4gCj4gU2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IEthdGFy enluYSBEZWMgPGthdGFyenluYS5kZWNAaW50ZWwuY29tPgo+IC0tLQo+ICB0ZXN0cy9NYWtlZmls ZS5zb3VyY2VzIHwgICAxICsKPiAgdGVzdHMvZ2VtX2JsaXRzLmMgICAgICB8IDc1MyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB0ZXN0cy9tZXNvbi5idWlsZCAg ICAgIHwgICAxICsKPiAgMyBmaWxlcyBjaGFuZ2VkLCA3NTUgaW5zZXJ0aW9ucygrKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX2JsaXRzLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMv TWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBjODQ5MzNm MWQuLjU2NDU0NWZiNyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysr IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC00MSw2ICs0MSw3IEBAIFRFU1RTX3Byb2dz ID0gXAo+ICAJZHJ2X3N1c3BlbmQgXAo+ICAJZ2VtX2JhZF9yZWxvYyBcCj4gIAlnZW1fYmFzaWMg XAo+ICsJZ2VtX2JsaXRzIFwKPiAgCWdlbV9idXN5IFwKPiAgCWdlbV9jYWNoaW5nIFwKPiAgCWdl bV9jbG9zZSBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9ibGl0cy5jIGIvdGVzdHMvZ2VtX2Js aXRzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMC4uNDRkYTc3NWE0 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2dlbV9ibGl0cy5jCj4gQEAgLTAsMCArMSw3 NTMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KPiAr ICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT Cj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0 LmgiCj4gKyNpbmNsdWRlICJpZ3RfeDg2LmgiCj4gKwo+ICsjZGVmaW5lIE1JX0ZMVVNIX0RXICgw eDI2IDw8IDIzKQo+ICsKPiArI2RlZmluZSBCQ1NfU1dDVFJMIDB4MjIyMDAKPiArI2RlZmluZSBC Q1NfU1JDX1kgKDEgPDwgMCkKPiArI2RlZmluZSBCQ1NfRFNUX1kgKDEgPDwgMSkKPiArCj4gK3N0 cnVjdCBkZXZpY2Ugewo+ICsJaW50IGZkOwo+ICsJaW50IGdlbjsKPiArCWludCBwY2lpZDsKPiAr CWludCBsbGM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgYnVmZmVyIHsKPiArCXVpbnQzMl90IGhhbmRs ZTsKPiArCXVpbnQxNl90IHdpZHRoOwo+ICsJdWludDE2X3QgaGVpZ2h0Owo+ICsJdWludDE2X3Qg c3RyaWRlOwo+ICsJdWludDMyX3Qgc2l6ZTsKPiArCXVuc2lnbmVkIGludCB0aWxpbmc7Cj4gKwl1 bnNpZ25lZCBpbnQgY2FjaGluZzsKPiArCXVpbnQ2NF90IGd0dF9vZmZzZXQ7Cj4gKwl1aW50MzJf dCBtb2RlbFtdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IGZscyh1aW50NjRfdCB4KQo+ICt7Cj4gKwlpbnQgdDsKPiArCj4gKwlmb3IgKHQgPSAw OyB4ID4+IHQ7IHQrKykKPiArCQk7Cj4gKwo+ICsJcmV0dXJuIHQ7Cj4gK30KPiArCj4gK3N0YXRp YyB1bnNpZ25lZCBpbnQKPiArZ2V0X3RpbGluZ19zdHJpZGUoY29uc3Qgc3RydWN0IGRldmljZSAq ZGV2aWNlLAo+ICsJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgdGlsaW5nKQo+ ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc3RyaWRlID0gNHUgKiB3aWR0aDsKPiArCj4gKwlpZiAodGls aW5nKSB7Cj4gKwkJaWYgKGRldmljZS0+Z2VuIDwgMykKPiArCQkJc3RyaWRlID0gQUxJR04oc3Ry aWRlLCAxMjgpOwo+ICsJCWVsc2UgaWYgKGRldmljZS0+Z2VuIDwgNCB8fCB0aWxpbmcgPT0gSTkx NV9USUxJTkdfWCkKPiArCQkJc3RyaWRlID0gQUxJR04oc3RyaWRlLCA1MTIpOwo+ICsJCWVsc2UK PiArCQkJc3RyaWRlID0gQUxJR04oc3RyaWRlLCAxMjgpOwo+ICsJCWlmIChkZXZpY2UtPmdlbiA8 IDQpCj4gKwkJCXN0cmlkZSA9IDEgPDwgZmxzKHN0cmlkZSAtIDEpOwpTaG91bGRuJ3QgJ2Vsc2Un IGJlIGxhc3QgaGVyZSBePyBXaGF0IGFib3V0IG9yZGVyIG9mICdlbHNlIGlmJyBhbmQgJ2lmJwph dCB0aGUgZW5kPwo+ICsJfSBlbHNlIHsKPiArCQlpZiAoZGV2aWNlLT5nZW4gPj0gOCkKPiArCQkJ c3RyaWRlID0gQUxJR04oc3RyaWRlLCA2NCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2Fzc2VydChzdHJp ZGUgPCBVSU5UMTZfTUFYICYmIHN0cmlkZSA+PSA0KndpZHRoKTsKPiArCXJldHVybiBzdHJpZGU7 Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQKPiArZ2V0X3RpbGluZ19oZWlnaHQoY29u c3Qgc3RydWN0IGRldmljZSAqZGV2aWNlLAo+ICsJCSAgdW5zaWduZWQgaW50IGhlaWdodCwgdW5z aWduZWQgaW50IHRpbGluZykKPiArewo+ICsJaWYgKCF0aWxpbmcpCj4gKwkJcmV0dXJuIGhlaWdo dDsKPiArCj4gKwlpZiAoZGV2aWNlLT5nZW4gPCAzKQo+ICsJCXJldHVybiBBTElHTihoZWlnaHQs IDE2KTsKPiArCWVsc2UgaWYgKGRldmljZS0+Z2VuIDwgNCB8fCB0aWxpbmcgPT0gSTkxNV9USUxJ TkdfWCkKPiArCQlyZXR1cm4gQUxJR04oaGVpZ2h0LCA4KTsKPiArCWVsc2UKPiArCQlyZXR1cm4g QUxJR04oaGVpZ2h0LCAzMik7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYnVmZmVyICpidWZm ZXJfY3JlYXRlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldmljZSwKPiArCQkJCSAgICB1bnNpZ25l ZCBpbnQgd2lkdGgsCj4gKwkJCQkgICAgdW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ICsJc3Ry dWN0IGJ1ZmZlciAqYnVmZmVyOwo+ICsKPiArCWlndF9hc3NlcnQod2lkdGggJiYgaGVpZ2h0KTsK PiArCj4gKwlidWZmZXIgPSBjYWxsb2MoMSwgc2l6ZW9mKCpidWZmZXIpICsgNHUgKiB3aWR0aCAq IGhlaWdodCk7Cj4gKwlpZiAoIWJ1ZmZlcikKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlidWZm ZXItPndpZHRoID0gd2lkdGg7Cj4gKwlidWZmZXItPmhlaWdodCA9IGhlaWdodDsKPiArCj4gKwli dWZmZXItPnN0cmlkZSA9IGdldF90aWxpbmdfc3RyaWRlKGRldmljZSwgd2lkdGgsIEk5MTVfVElM SU5HX05PTkUpOwo+ICsJYnVmZmVyLT5zaXplID0gQUxJR04oYnVmZmVyLT5zdHJpZGUgKiBoZWln aHQsIDQwOTYpOwo+ICsJYnVmZmVyLT5oYW5kbGUgPSBnZW1fY3JlYXRlKGRldmljZS0+ZmQsIGJ1 ZmZlci0+c2l6ZSk7Cj4gKwlidWZmZXItPmNhY2hpbmcgPSBkZXZpY2UtPmxsYzsKPiArCj4gKwlm b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Cj4gKwkJdWludDMyX3QgKnJvdyA9IGJ1 ZmZlci0+bW9kZWwgKyB5ICogd2lkdGg7Cj4gKwo+ICsJCWZvciAoaW50IHggPSAwOyB4IDwgd2lk dGg7IHgrKykKPiArCQkJcm93W3hdID0gKHkgPDwgMTYgfCB4KSBeIGJ1ZmZlci0+aGFuZGxlOwo+ ICsKPiArCQlnZW1fd3JpdGUoZGV2aWNlLT5mZCwKPiArCQkJICBidWZmZXItPmhhbmRsZSwgNHUg KiB5ICogd2lkdGgsCj4gKwkJCSAgcm93LCA0dSAqIHdpZHRoKTsKPiArCX0KPiArCj4gKwlyZXR1 cm4gYnVmZmVyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBidWZmZXJfc2V0X3RpbGluZyhjb25z dCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCj4gKwkJCSAgICAgIHN0cnVjdCBidWZmZXIgKmJ1ZmZl ciwKPiArCQkJICAgICAgdW5zaWduZWQgaW50IHRpbGluZykKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzNdOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5IHJlbG9jWzJdOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiBleGVjYnVmOwo+ICsJY29uc3QgYm9vbCBoYXNfNjRiX3JlbG9jID0gZGV2aWNlLT5nZW4gPj0g ODsKPiArCXVpbnQzMl90IHN0cmlkZSwgc2l6ZSwgcGl0Y2g7Cj4gKwl1aW50MzJfdCAqYmF0Y2g7 Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoYnVmZmVyLT50aWxpbmcgPT0gdGlsaW5nKQo+ICsJCXJl dHVybjsKPiArCj4gKwlzdHJpZGUgPSBnZXRfdGlsaW5nX3N0cmlkZShkZXZpY2UsIGJ1ZmZlci0+ d2lkdGgsIHRpbGluZyk7Cj4gKwlzaXplID0gc3RyaWRlICogZ2V0X3RpbGluZ19oZWlnaHQoZGV2 aWNlLCBidWZmZXItPmhlaWdodCwgdGlsaW5nKTsKPiArCXNpemUgPSBBTElHTihzaXplLCA0MDk2 KTsKPiArCj4gKwltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4gKwlleGVj YnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaik7Cj4gKwlleGVjYnVmLmJ1ZmZl cl9jb3VudCA9IEFSUkFZX1NJWkUob2JqKTsKPiArCWlmIChkZXZpY2UtPmdlbiA+PSA2KQo+ICsJ CWV4ZWNidWYuZmxhZ3MgPSBJOTE1X0VYRUNfQkxUOwo+ICsKPiArCW1lbXNldChvYmosIDAsIHNp emVvZihvYmopKTsKPiArCW9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGRldmljZS0+ZmQsIHNp emUpOwo+ICsJaWYgKHRpbGluZykgewo+ICsJCW9ialswXS5mbGFncyA9IEVYRUNfT0JKRUNUX05F RURTX0ZFTkNFOwo+ICsJCWdlbV9zZXRfdGlsaW5nKGRldmljZS0+ZmQsIG9ialswXS5oYW5kbGUs IHRpbGluZywgc3RyaWRlKTsKPiArCX0KPiArCj4gKwlvYmpbMV0uaGFuZGxlID0gYnVmZmVyLT5o YW5kbGU7Cj4gKwlvYmpbMV0ub2Zmc2V0ID0gYnVmZmVyLT5ndHRfb2Zmc2V0Owo+ICsJaWYgKGJ1 ZmZlci0+dGlsaW5nKQo+ICsJCW9ialsxXS5mbGFncyA9IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNF Owo+ICsKPiArCW9ialsyXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGRldmljZS0+ZmQsIDQwOTYpOwo+ ICsJb2JqWzJdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIobWVtc2V0KHJlbG9jLCAwLCBz aXplb2YocmVsb2MpKSk7Cj4gKwlvYmpbMl0ucmVsb2NhdGlvbl9jb3VudCA9IDI7Cj4gKwliYXRj aCA9IGdlbV9tbWFwX19jcHUoZGV2aWNlLT5mZCwgb2JqWzJdLmhhbmRsZSwgMCwgNDA5NiwgUFJP VF9XUklURSk7Cj4gKwo+ICsJaSA9IDA7Cj4gKwo+ICsJaWYgKCh0aWxpbmcgfCBidWZmZXItPnRp bGluZykgPj0gSTkxNV9USUxJTkdfWSkgewo+ICsJCXVuc2lnbmVkIGludCBtYXNrOwo+ICsKPiAr CQliYXRjaFtpKytdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07Cj4gKwkJYmF0Y2hbaSsrXSA9IEJD U19TV0NUUkw7Cj4gKwoKQWxsIGJhdGNoIGNyZWF0aW9uIHN0YXJpbmcgZnJvbSBoZXJlIF4gbG9v a3MgbWlzdGVyaW91cy4gTWF5YmUgd2UgY2FuIG1ha2UKYnVmZmVyX3NldF90aWxpbmcgYW5kIGJ1 ZmZlcl9saW5lYXIgZnVuY3Rpb25zIG1vcmUgY2xlYXJlcj8KSXQgaXMgaGFyZCBkbyByZWFkIGFu ZCB1bmRlcnN0YW5kLgoKPiArCQltYXNrID0gKEJDU19TUkNfWSB8IEJDU19EU1RfWSkgPDwgMTY7 Cj4gKwkJaWYgKGJ1ZmZlci0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCj4gKwkJCW1hc2sgfD0g QkNTX1NSQ19ZOwo+ICsJCWlmICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKPiArCQkJbWFzayB8 PSBCQ1NfRFNUX1k7Cj4gKwkJYmF0Y2hbaSsrXSA9IG1hc2s7Cj4gKwl9Cj4gKwo+ICsJYmF0Y2hb aV0gPSAoWFlfU1JDX0NPUFlfQkxUX0NNRCB8Cj4gKwkJICAgIFhZX1NSQ19DT1BZX0JMVF9XUklU RV9BTFBIQSB8Cj4gKwkJICAgIFhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IpOwo+ICsJYmF0Y2hb aV0gfD0gNiArIDIgKiBoYXNfNjRiX3JlbG9jOwo+ICsJaWYgKGRldmljZS0+Z2VuID49IDQgJiYg YnVmZmVyLT50aWxpbmcpCj4gKwkJYmF0Y2hbaV0gfD0gWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxF RDsKPiArCWlmIChkZXZpY2UtPmdlbiA+PSA0ICYmIHRpbGluZykKPiArCQliYXRjaFtpXSB8PSBY WV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVEOwo+ICsJaSsrOwo+ICsKPiArCXBpdGNoID0gc3RyaWRl Owo+ICsJaWYgKGRldmljZS0+Z2VuID49IDQgJiYgdGlsaW5nKQo+ICsJCXBpdGNoIC89IDQ7Cj4g KwliYXRjaFtpKytdID0gMyA8PCAyNCB8IDB4Y2MgPDwgMTYgfCBwaXRjaDsKPiArCWJhdGNoW2kr K10gPSAwOwo+ICsJYmF0Y2hbaSsrXSA9IGJ1ZmZlci0+aGVpZ2h0IDw8IDE2IHwgYnVmZmVyLT53 aWR0aDsKPiArCXJlbG9jWzBdLnRhcmdldF9oYW5kbGUgPSBvYmpbMF0uaGFuZGxlOwo+ICsJcmVs b2NbMF0ucHJlc3VtZWRfb2Zmc2V0ID0gb2JqWzBdLm9mZnNldDsKPiArCXJlbG9jWzBdLm9mZnNl dCA9IHNpemVvZigqYmF0Y2gpICogaTsKPiArCXJlbG9jWzBdLnJlYWRfZG9tYWlucyA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvY1swXS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOwo+ICsJYmF0Y2hbaSsrXSA9IG9ialswXS5vZmZzZXQ7Cj4gKwlpZiAoaGFz XzY0Yl9yZWxvYykKPiArCQliYXRjaFtpKytdID0gb2JqWzBdLm9mZnNldCA+PiAzMjsKPiArCj4g KwliYXRjaFtpKytdID0gMDsKPiArCXBpdGNoID0gYnVmZmVyLT5zdHJpZGU7Cj4gKwlpZiAoZGV2 aWNlLT5nZW4gPj0gNCAmJiBidWZmZXItPnRpbGluZykKPiArCQlwaXRjaCAvPSA0Owo+ICsJYmF0 Y2hbaSsrXSA9IHBpdGNoOwo+ICsJcmVsb2NbMV0udGFyZ2V0X2hhbmRsZSA9IG9ialsxXS5oYW5k bGU7Cj4gKwlyZWxvY1sxXS5wcmVzdW1lZF9vZmZzZXQgPSBvYmpbMV0ub2Zmc2V0Owo+ICsJcmVs b2NbMV0ub2Zmc2V0ID0gc2l6ZW9mKCpiYXRjaCkgKiBpOwo+ICsJcmVsb2NbMV0ucmVhZF9kb21h aW5zID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCWJhdGNoW2krK10gPSBvYmpbMV0ub2Zm c2V0Owo+ICsJaWYgKGhhc182NGJfcmVsb2MpCj4gKwkJYmF0Y2hbaSsrXSA9IG9ialsxXS5vZmZz ZXQgPj4gMzI7Cj4gKwo+ICsJaWYgKCh0aWxpbmcgfCBidWZmZXItPnRpbGluZykgPj0gSTkxNV9U SUxJTkdfWSkgewo+ICsJCWlndF9hc3NlcnQoZGV2aWNlLT5nZW4gPj0gNik7Cj4gKwkJYmF0Y2hb aSsrXSA9IE1JX0ZMVVNIX0RXIHwgMjsKPiArCQliYXRjaFtpKytdID0gMDsKPiArCQliYXRjaFtp KytdID0gMDsKPiArCQliYXRjaFtpKytdID0gMDsKPiArCj4gKwkJYmF0Y2hbaSsrXSA9IE1JX0xP QURfUkVHSVNURVJfSU1NOwo+ICsJCWJhdGNoW2krK10gPSBCQ1NfU1dDVFJMOwo+ICsJCWJhdGNo W2krK10gPSAoQkNTX1NSQ19ZIHwgQkNTX0RTVF9ZKSA8PCAxNjsKPiArCX0KPiArCj4gKwliYXRj aFtpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCW11bm1hcChiYXRjaCwgNDA5Nik7Cj4g Kwo+ICsJZ2VtX2V4ZWNidWYoZGV2aWNlLT5mZCwgJmV4ZWNidWYpOwo+ICsKPiArCWdlbV9jbG9z ZShkZXZpY2UtPmZkLCBvYmpbMl0uaGFuZGxlKTsKPiArCWdlbV9jbG9zZShkZXZpY2UtPmZkLCBv YmpbMV0uaGFuZGxlKTsKPiArCj4gKwlidWZmZXItPmd0dF9vZmZzZXQgPSBvYmpbMF0ub2Zmc2V0 Owo+ICsJYnVmZmVyLT5oYW5kbGUgPSBvYmpbMF0uaGFuZGxlOwo+ICsKPiArCWJ1ZmZlci0+dGls aW5nID0gdGlsaW5nOwo+ICsJYnVmZmVyLT5zdHJpZGUgPSBzdHJpZGU7Cj4gKwlidWZmZXItPnNp emUgPSBzaXplOwo+ICt9Cj4gKwo+ICtlbnVtIG1vZGUgewo+ICsJQ1BVLAo+ICsJUFJXLAo+ICsJ R1RULAo+ICsJV0MsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBibGl0X3RvX2xpbmVhcihjb25z dCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBidWZmZXIgKmJ1 ZmZlciwKPiArCQkJICAgdm9pZCAqbGluZWFyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBvYmpbM107Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25f ZW50cnkgcmVsb2NbMl07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWY7Cj4gKwljb25zdCBib29sIGhhc182NGJfcmVsb2MgPSBkZXZpY2UtPmdlbiA+PSA4Owo+ICsJ dWludDMyX3QgKmJhdGNoOwo+ICsJdWludDMyX3QgcGl0Y2g7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ ICsJaWd0X2Fzc2VydChidWZmZXItPnRpbGluZyk7Cj4gKwo+ICsJbWVtc2V0KCZleGVjYnVmLCAw LCBzaXplb2YoZXhlY2J1ZikpOwo+ICsJZXhlY2J1Zi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9p bnRlcihvYmopOwo+ICsJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBBUlJBWV9TSVpFKG9iaik7Cj4g KwlpZiAoZGV2aWNlLT5nZW4gPj0gNikKPiArCQlleGVjYnVmLmZsYWdzID0gSTkxNV9FWEVDX0JM VDsKPiArCj4gKwltZW1zZXQob2JqLCAwLCBzaXplb2Yob2JqKSk7Cj4gKwlnZW1fdXNlcnB0cihk ZXZpY2UtPmZkLCBsaW5lYXIsIGJ1ZmZlci0+c2l6ZSwgMCwgMCwgJm9ialswXS5oYW5kbGUpOwo+ ICsJb2JqWzFdLmhhbmRsZSA9IGJ1ZmZlci0+aGFuZGxlOwo+ICsJb2JqWzFdLm9mZnNldCA9IGJ1 ZmZlci0+Z3R0X29mZnNldDsKPiArCW9ialsxXS5mbGFncyA9IEVYRUNfT0JKRUNUX05FRURTX0ZF TkNFOwo+ICsKPiArCW1lbXNldChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4gKwlvYmpbMl0u aGFuZGxlID0gZ2VtX2NyZWF0ZShkZXZpY2UtPmZkLCA0MDk2KTsKPiArCW9ialsyXS5yZWxvY3Nf cHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsKPiArCW9ialsyXS5yZWxvY2F0aW9uX2NvdW50 ID0gQVJSQVlfU0laRShyZWxvYyk7Cj4gKwliYXRjaCA9IGdlbV9tbWFwX19jcHUoZGV2aWNlLT5m ZCwgb2JqWzJdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9XUklURSk7Cj4gKwo+ICsJaWYgKGJ1ZmZl ci0+dGlsaW5nID49IEk5MTVfVElMSU5HX1kpIHsKPiArCQl1bnNpZ25lZCBpbnQgbWFzazsKPiAr Cj4gKwkJYmF0Y2hbaSsrXSA9IE1JX0xPQURfUkVHSVNURVJfSU1NOwo+ICsJCWJhdGNoW2krK10g PSBCQ1NfU1dDVFJMOwo+ICsKPiArCQltYXNrID0gKEJDU19TUkNfWSB8IEJDU19EU1RfWSkgPDwg MTY7Cj4gKwkJaWYgKGJ1ZmZlci0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCj4gKwkJCW1hc2sg fD0gQkNTX1NSQ19ZOwo+ICsJCWJhdGNoW2krK10gPSBtYXNrOwo+ICsJfQo+ICsKPiArCWJhdGNo W2ldID0gKFhZX1NSQ19DT1BZX0JMVF9DTUQgfAo+ICsJCSAgICBYWV9TUkNfQ09QWV9CTFRfV1JJ VEVfQUxQSEEgfAo+ICsJCSAgICBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCKTsKPiArCWlmIChk ZXZpY2UtPmdlbiA+PSA0ICYmIGJ1ZmZlci0+dGlsaW5nKQo+ICsJCWJhdGNoW2ldIHw9IFhZX1NS Q19DT1BZX0JMVF9TUkNfVElMRUQ7Cj4gKwo+ICsJYmF0Y2hbaSsrXSB8PSA2ICsgMiAqIGhhc182 NGJfcmVsb2M7Cj4gKwo+ICsJYmF0Y2hbaSsrXSA9IDMgPDwgMjQgfCAweGNjIDw8IDE2IHwgYnVm ZmVyLT5zdHJpZGU7Cj4gKwliYXRjaFtpKytdID0gMDsKPiArCWJhdGNoW2krK10gPSBidWZmZXIt PmhlaWdodCA8PCAxNiB8IGJ1ZmZlci0+d2lkdGg7Cj4gKwlyZWxvY1swXS50YXJnZXRfaGFuZGxl ID0gb2JqWzBdLmhhbmRsZTsKPiArCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IG9ialswXS5v ZmZzZXQ7Cj4gKwlyZWxvY1swXS5vZmZzZXQgPSBzaXplb2YoKmJhdGNoKSAqIGk7Cj4gKwlyZWxv Y1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2NbMF0u d3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiArCWJhdGNoW2krK10gPSBv YmpbMF0ub2Zmc2V0Owo+ICsJaWYgKGhhc182NGJfcmVsb2MpCj4gKwkJYmF0Y2hbaSsrXSA9IG9i alswXS5vZmZzZXQgPj4gMzI7Cj4gKwo+ICsJYmF0Y2hbaSsrXSA9IDA7Cj4gKwlwaXRjaCA9IGJ1 ZmZlci0+c3RyaWRlOwo+ICsJaWYgKGRldmljZS0+Z2VuID49IDQgJiYgYnVmZmVyLT50aWxpbmcp Cj4gKwkJcGl0Y2ggLz0gNDsKPiArCWJhdGNoW2krK10gPSBwaXRjaDsKPiArCXJlbG9jWzFdLnRh cmdldF9oYW5kbGUgPSBvYmpbMV0uaGFuZGxlOwo+ICsJcmVsb2NbMV0ucHJlc3VtZWRfb2Zmc2V0 ID0gb2JqWzFdLm9mZnNldDsKPiArCXJlbG9jWzFdLm9mZnNldCA9IHNpemVvZigqYmF0Y2gpICog aTsKPiArCXJlbG9jWzFdLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4g KwliYXRjaFtpKytdID0gb2JqWzFdLm9mZnNldDsKPiArCWlmIChoYXNfNjRiX3JlbG9jKQo+ICsJ CWJhdGNoW2krK10gPSBvYmpbMV0ub2Zmc2V0ID4+IDMyOwo+ICsKPiArCWlmIChidWZmZXItPnRp bGluZyA+PSBJOTE1X1RJTElOR19ZKSB7Cj4gKwkJaWd0X2Fzc2VydChkZXZpY2UtPmdlbiA+PSA2 KTsKPiArCQliYXRjaFtpKytdID0gTUlfRkxVU0hfRFcgfCAyOwo+ICsJCWJhdGNoW2krK10gPSAw Owo+ICsJCWJhdGNoW2krK10gPSAwOwo+ICsJCWJhdGNoW2krK10gPSAwOwo+ICsKPiArCQliYXRj aFtpKytdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU07Cj4gKwkJYmF0Y2hbaSsrXSA9IEJDU19TV0NU Ukw7Cj4gKwkJYmF0Y2hbaSsrXSA9IChCQ1NfU1JDX1kgfCBCQ1NfRFNUX1kpIDw8IDE2Owo+ICsJ fQo+ICsKPiArCWJhdGNoW2krK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJbXVubWFwKGJh dGNoLCA0MDk2KTsKPiArCj4gKwlnZW1fZXhlY2J1ZihkZXZpY2UtPmZkLCAmZXhlY2J1Zik7Cj4g KwlnZW1fY2xvc2UoZGV2aWNlLT5mZCwgb2JqWzJdLmhhbmRsZSk7Cj4gKwo+ICsJZ2VtX3N5bmMo ZGV2aWNlLT5mZCwgb2JqWzBdLmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoZGV2aWNlLT5mZCwgb2Jq WzBdLmhhbmRsZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICpkb3dubG9hZChjb25zdCBzdHJ1 Y3QgZGV2aWNlICpkZXZpY2UsCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGJ1ZmZlciAqYnVmZmVy LAo+ICsJCSAgICAgIGVudW0gbW9kZSBtb2RlKQo+ICt7Cj4gKwl2b2lkICpsaW5lYXIsICpzcmM7 Cj4gKwo+ICsJaWd0X2Fzc2VydChwb3NpeF9tZW1hbGlnbigmbGluZWFyLCA0MDk2LCBidWZmZXIt PnNpemUpID09IDApOwo+ICsKPiArCXN3aXRjaCAobW9kZSkgewo+ICsJY2FzZSBDUFU6Cj4gKwkJ aWYgKGJ1ZmZlci0+dGlsaW5nKSB7Cj4gKwkJCWlmIChidWZmZXItPmNhY2hpbmcgJiYgIWRldmlj ZS0+bGxjKSB7Cj4gKwkJCQltb2RlID0gR1RUOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQkJ aWYgKGRldmljZS0+Z2VuIDwgMykgewo+ICsJCQkJbW9kZSA9IEdUVDsKPiArCQkJCWJyZWFrOwo+ ICsJCQl9CldoeSBkbyB3ZSBuZWVkIDIgaWYtcyBoZXJlIF4/IEJvdGggYXJlIHNldHRpbmcgdGhl IHNhbWUgbW9kZS4KPiArCj4gKwkJCWJsaXRfdG9fbGluZWFyKGRldmljZSwgYnVmZmVyLCBsaW5l YXIpOwo+ICsJCQlyZXR1cm4gbGluZWFyOwo+ICsJCX0KPiArCQlicmVhazsKPiArCj4gKwljYXNl IFBSVzoKPiArCWNhc2UgV0M6Cj4gKwkJaWYgKCFidWZmZXItPnRpbGluZykKPiArCQkJYnJlYWs7 Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQltb2RlID0gR1RUOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsK PiArCXN3aXRjaCAobW9kZSkgewo+ICsJY2FzZSBDUFU6Cj4gKwkJc3JjID0gZ2VtX21tYXBfX2Nw dShkZXZpY2UtPmZkLCBidWZmZXItPmhhbmRsZSwKPiArCQkJCSAgICAwLCBidWZmZXItPnNpemUs Cj4gKwkJCQkgICAgUFJPVF9SRUFEKTsKPiArCj4gKwkJZ2VtX3NldF9kb21haW4oZGV2aWNlLT5m ZCwgYnVmZmVyLT5oYW5kbGUsCj4gKwkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsK PiArCQlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBzcmMsIGJ1ZmZlci0+c2l6ZSk7Cj4gKwkJ bXVubWFwKHNyYywgYnVmZmVyLT5zaXplKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFdDOgo+ ICsJCXNyYyA9IGdlbV9tbWFwX193YyhkZXZpY2UtPmZkLCBidWZmZXItPmhhbmRsZSwKPiArCQkJ CSAgIDAsIGJ1ZmZlci0+c2l6ZSwKPiArCQkJCSAgIFBST1RfUkVBRCk7Cj4gKwo+ICsJCWdlbV9z ZXRfZG9tYWluKGRldmljZS0+ZmQsIGJ1ZmZlci0+aGFuZGxlLAo+ICsJCQkgICAgICAgSTkxNV9H RU1fRE9NQUlOX1dDLCAwKTsKPiArCQlpZ3RfbWVtY3B5X2Zyb21fd2MobGluZWFyLCBzcmMsIGJ1 ZmZlci0+c2l6ZSk7Cj4gKwkJbXVubWFwKHNyYywgYnVmZmVyLT5zaXplKTsKPiArCQlicmVhazsK PiArCj4gKwljYXNlIEdUVDoKPiArCQlzcmMgPSBnZW1fbW1hcF9fZ3R0KGRldmljZS0+ZmQsIGJ1 ZmZlci0+aGFuZGxlLAo+ICsJCQkJICAgYnVmZmVyLT5zaXplLAo+ICsJCQkJICAgUFJPVF9SRUFE KTsKPiArCj4gKwkJZ2VtX3NldF9kb21haW4oZGV2aWNlLT5mZCwgYnVmZmVyLT5oYW5kbGUsCj4g KwkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKPiArCQlpZ3RfbWVtY3B5X2Zyb21f d2MobGluZWFyLCBzcmMsIGJ1ZmZlci0+c2l6ZSk7Cj4gKwkJbXVubWFwKHNyYywgYnVmZmVyLT5z aXplKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFBSVzoKPiArCQlnZW1fcmVhZChkZXZpY2Ut PmZkLCBidWZmZXItPmhhbmRsZSwgMCwgbGluZWFyLCBidWZmZXItPnNpemUpOwo+ICsJCWJyZWFr Owo+ICsJfQo+ICsKPiArCXJldHVybiBsaW5lYXI7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGJ1 ZmZlcl9jaGVjayhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCj4gKwkJCSBjb25zdCBzdHJ1 Y3QgYnVmZmVyICpidWZmZXIsCj4gKwkJCSBlbnVtIG1vZGUgbW9kZSkKPiArewo+ICsJdW5zaWdu ZWQgaW50IG51bV9lcnJvcnMgPSAwOwo+ICsJdWludDMyX3QgKmxpbmVhcjsKPiArCj4gKwlsaW5l YXIgPSBkb3dubG9hZChkZXZpY2UsIGJ1ZmZlciwgbW9kZSk7Cj4gKwlpZ3RfYXNzZXJ0KGxpbmVh cik7Cj4gKwo+ICsJZm9yIChpbnQgeSA9IDA7IHkgPCBidWZmZXItPmhlaWdodDsgeSsrKSB7Cj4g KwkJY29uc3QgdWludDMyX3QgKm1vZGVsID0gYnVmZmVyLT5tb2RlbCArIHkgKiBidWZmZXItPndp ZHRoOwo+ICsJCWNvbnN0IHVpbnQzMl90ICpyb3cgPQo+ICsJCQlsaW5lYXIgKyB5ICogYnVmZmVy LT5zdHJpZGUgLyBzaXplb2YodWludDMyX3QpOwo+ICsKPiArCQlmb3IgKGludCB4ID0gMDsgeCA8 IGJ1ZmZlci0+d2lkdGg7IHgrKykgewo+ICsJCQlpZiAocm93W3hdICE9IG1vZGVsW3hdICYmIG51 bV9lcnJvcnMrKyA8IDUpIHsKPiArCQkJCWlndF93YXJuKCJidWZmZXIgaGFuZGxlPSVkIG1pc21h dGNoIGF0ICglZCwgJWQpOiBleHBlY3RlZCAlMDh4LCBmb3VuZCAlMDh4XG4iLAo+ICsJCQkJCSBi dWZmZXItPmhhbmRsZSwKPiArCQkJCQkgeCwgeSwgbW9kZWxbeF0sIHJvd1t4XSk7Cj4gKwkJCX0K PiArCQl9Cj4gKwl9Cj4gKwo+ICsJZnJlZShsaW5lYXIpOwo+ICsKPiArCXJldHVybiBudW1fZXJy b3JzID09IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ1ZmZlcl9mcmVlKGNvbnN0IHN0cnVj dCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGJ1ZmZlciAqYnVmZmVyKQo+ICt7Cj4gKwlpZ3RfYXNz ZXJ0KGJ1ZmZlcl9jaGVjayhkZXZpY2UsIGJ1ZmZlciwgR1RUKSk7Cj4gKwlnZW1fY2xvc2UoZGV2 aWNlLT5mZCwgYnVmZmVyLT5oYW5kbGUpOwo+ICsJZnJlZShidWZmZXIpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtZW1jcHlfYmx0KGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAo+ICsJCSAg ICAgICB1aW50MzJfdCBzcmNfc3RyaWRlLCB1aW50MzJfdCBkc3Rfc3RyaWRlLAo+ICsJCSAgICAg ICB1aW50MTZfdCBzcmNfeCwgdWludDE2X3Qgc3JjX3ksCj4gKwkJICAgICAgIHVpbnQxNl90IGRz dF94LCB1aW50MTZfdCBkc3RfeSwKPiArCQkgICAgICAgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90 IGhlaWdodCkKPiArewo+ICsJY29uc3QgdWludDhfdCAqc3JjX2J5dGVzOwo+ICsJdWludDhfdCAq ZHN0X2J5dGVzOwo+ICsJaW50IGJ5dGVfd2lkdGg7Cj4gKwo+ICsJc3JjX2J5dGVzID0gKGNvbnN0 IHVpbnQ4X3QgKilzcmMgKyBzcmNfc3RyaWRlICogc3JjX3kgKyBzcmNfeCAqIDQ7Cj4gKwlkc3Rf Ynl0ZXMgPSAodWludDhfdCAqKWRzdCArIGRzdF9zdHJpZGUgKiBkc3RfeSArIGRzdF94ICogNDsK PiArCj4gKwlieXRlX3dpZHRoID0gd2lkdGggKiA0Owo+ICsJaWYgKGJ5dGVfd2lkdGggPT0gc3Jj X3N0cmlkZSAmJiBieXRlX3dpZHRoID09IGRzdF9zdHJpZGUpIHsKPiArCQlieXRlX3dpZHRoICo9 IGhlaWdodDsKPiArCQloZWlnaHQgPSAxOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAoYnl0ZV93aWR0 aCkgewo+ICsJY2FzZSA0Ogo+ICsJCWRvIHsKPiArCQkJKih1aW50MzJfdCAqKWRzdF9ieXRlcyA9 ICooY29uc3QgdWludDMyX3QgKilzcmNfYnl0ZXM7Cj4gKwkJCXNyY19ieXRlcyArPSBzcmNfc3Ry aWRlOwo+ICsJCQlkc3RfYnl0ZXMgKz0gZHN0X3N0cmlkZTsKPiArCQl9IHdoaWxlICgtLWhlaWdo dCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSA4Ogo+ICsJCWRvIHsKPiArCQkJKih1aW50NjRf dCAqKWRzdF9ieXRlcyA9ICooY29uc3QgdWludDY0X3QgKilzcmNfYnl0ZXM7Cj4gKwkJCXNyY19i eXRlcyArPSBzcmNfc3RyaWRlOwo+ICsJCQlkc3RfYnl0ZXMgKz0gZHN0X3N0cmlkZTsKPiArCQl9 IHdoaWxlICgtLWhlaWdodCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDE2Ogo+ICsJCWRvIHsKPiAr CQkJKCh1aW50NjRfdCAqKWRzdF9ieXRlcylbMF0gPSAoKGNvbnN0IHVpbnQ2NF90ICopc3JjX2J5 dGVzKVswXTsKPiArCQkJKCh1aW50NjRfdCAqKWRzdF9ieXRlcylbMV0gPSAoKGNvbnN0IHVpbnQ2 NF90ICopc3JjX2J5dGVzKVsxXTsKPiArCQkJc3JjX2J5dGVzICs9IHNyY19zdHJpZGU7Cj4gKwkJ CWRzdF9ieXRlcyArPSBkc3Rfc3RyaWRlOwo+ICsJCX0gd2hpbGUgKC0taGVpZ2h0KTsKPiArCQli cmVhazsKPiArCj4gKwlkZWZhdWx0Ogo+ICsJCWRvIHsKPiArCQkJbWVtY3B5KGRzdF9ieXRlcywg c3JjX2J5dGVzLCBieXRlX3dpZHRoKTsKPiArCQkJc3JjX2J5dGVzICs9IHNyY19zdHJpZGU7Cj4g KwkJCWRzdF9ieXRlcyArPSBkc3Rfc3RyaWRlOwo+ICsJCX0gd2hpbGUgKC0taGVpZ2h0KTsKPiAr CQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArYmxpdChjb25zdCBzdHJ1 Y3QgZGV2aWNlICpkZXZpY2UsCj4gKyAgICAgc3RydWN0IGJ1ZmZlciAqc3JjLCB1aW50MTZfdCBz cmNfeCwgdWludDE2X3Qgc3JjX3ksCj4gKyAgICAgc3RydWN0IGJ1ZmZlciAqZHN0LCB1aW50MTZf dCBkc3RfeCwgdWludDE2X3QgZHN0X3ksCj4gKyAgICAgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90 IGhlaWdodCkKPiArCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9i alszXTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1syXTsK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCWNvbnN0IGJv b2wgaGFzXzY0Yl9yZWxvYyA9IGRldmljZS0+Z2VuID49IDg7Cj4gKwl1aW50MzJfdCAqYmF0Y2g7 Cj4gKwl1aW50MzJfdCBwaXRjaDsKPiArCWludCBpID0gMDsKPiArCj4gKwlpZiAoc3JjX3ggPCAw KSB7Cj4gKwkJd2lkdGggKz0gc3JjX3g7Cj4gKwkJZHN0X3ggLT0gc3JjX3g7Cj4gKwkJc3JjX3gg PSAwOwo+ICsJfQo+ICsJaWYgKHNyY195IDwgMCkgewo+ICsJCWhlaWdodCArPSBzcmNfeTsKPiAr CQlkc3RfeSAgLT0gc3JjX3k7Cj4gKwkJc3JjX3kgPSAwOwo+ICsJfQo+ICsKPiArCWlmIChkc3Rf eCA8IDApIHsKPiArCQl3aWR0aCArPSBkc3RfeDsKPiArCQlzcmNfeCAtPSBkc3RfeDsKPiArCQlk c3RfeCA9IDA7Cj4gKwl9Cj4gKwlpZiAoZHN0X3kgPCAwKSB7Cj4gKwkJaGVpZ2h0ICs9IGRzdF95 Owo+ICsJCXNyY195ICAtPSBkc3RfeTsKPiArCQlkc3RfeSA9IDA7Cj4gKwl9Cj4gKwo+ICsJaWYg KHNyY194ICsgd2lkdGggPiBzcmMtPndpZHRoKQo+ICsJCXdpZHRoID0gc3JjLT53aWR0aCAtIHNy Y194Owo+ICsJaWYgKGRzdF94ICsgd2lkdGggPiBkc3QtPndpZHRoKQo+ICsJCXdpZHRoID0gZHN0 LT53aWR0aCAtIGRzdF94Owo+ICsKPiArCWlmIChzcmNfeSArIGhlaWdodCA+IHNyYy0+aGVpZ2h0 KQo+ICsJCWhlaWdodCA9IHNyYy0+aGVpZ2h0IC0gc3JjX3k7Cj4gKwlpZiAoZHN0X3kgKyBoZWln aHQgPiBkc3QtPmhlaWdodCkKPiArCQloZWlnaHQgPSBkc3QtPmhlaWdodCAtIGRzdF95Owo+ICsK PiArCWlmIChkc3QtPmNhY2hpbmcpIHsKPiArCQlpZ3RfYXNzZXJ0KGRldmljZS0+Z2VuID49IDMp Owo+ICsJCWlndF9hc3NlcnQoZGV2aWNlLT5sbGMgfHwgIXNyYy0+Y2FjaGluZyk7Cj4gKwl9Cj4g KwpIb3cgZGlkIHlvdSBjYWxjdWxhdGVkIHRoaXMgdmFsdWVzIGFib3ZlIF4gPwoKPiArCW1lbXNl dCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiArCWV4ZWNidWYuYnVmZmVyc19wdHIg PSB0b191c2VyX3BvaW50ZXIob2JqKTsKPiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gQVJSQVlf U0laRShvYmopOwo+ICsJaWYgKGRldmljZS0+Z2VuID49IDYpCj4gKwkJZXhlY2J1Zi5mbGFncyA9 IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOwo+ICsJ b2JqWzBdLmhhbmRsZSA9IGRzdC0+aGFuZGxlOwo+ICsJb2JqWzBdLm9mZnNldCA9IGRzdC0+Z3R0 X29mZnNldDsKPiArCWlmIChkc3QtPnRpbGluZykKPiArCQlvYmpbMF0uZmxhZ3MgPSBFWEVDX09C SkVDVF9ORUVEU19GRU5DRTsKPiArCj4gKwlvYmpbMV0uaGFuZGxlID0gc3JjLT5oYW5kbGU7Cj4g KwlvYmpbMV0ub2Zmc2V0ID0gc3JjLT5ndHRfb2Zmc2V0Owo+ICsJaWYgKHNyYy0+dGlsaW5nKQo+ ICsJCW9ialsxXS5mbGFncyA9IEVYRUNfT0JKRUNUX05FRURTX0ZFTkNFOwo+ICsKPiArCW1lbXNl dChyZWxvYywgMCwgc2l6ZW9mKHJlbG9jKSk7Cj4gKwlvYmpbMl0uaGFuZGxlID0gZ2VtX2NyZWF0 ZShkZXZpY2UtPmZkLCA0MDk2KTsKPiArCW9ialsyXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2lu dGVyKHJlbG9jKTsKPiArCW9ialsyXS5yZWxvY2F0aW9uX2NvdW50ID0gQVJSQVlfU0laRShyZWxv Yyk7Cj4gKwliYXRjaCA9IGdlbV9tbWFwX19jcHUoZGV2aWNlLT5mZCwgb2JqWzJdLmhhbmRsZSwg MCwgNDA5NiwgUFJPVF9XUklURSk7Cj4gKwo+ICsJaWYgKChzcmMtPnRpbGluZyB8IGRzdC0+dGls aW5nKSA+PSBJOTE1X1RJTElOR19ZKSB7Cj4gKwkJdW5zaWduZWQgaW50IG1hc2s7Cj4gKwo+ICsJ CWJhdGNoW2krK10gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKPiArCQliYXRjaFtpKytdID0gQkNT X1NXQ1RSTDsKPiArCj4gKwkJbWFzayA9IChCQ1NfU1JDX1kgfCBCQ1NfRFNUX1kpIDw8IDE2Owo+ ICsJCWlmIChzcmMtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQo+ICsJCQltYXNrIHw9IEJDU19T UkNfWTsKPiArCQlpZiAoZHN0LT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKPiArCQkJbWFzayB8 PSBCQ1NfRFNUX1k7Cj4gKwkJYmF0Y2hbaSsrXSA9IG1hc2s7Cj4gKwl9Cj4gKwo+ICsJYmF0Y2hb aV0gPSAoWFlfU1JDX0NPUFlfQkxUX0NNRCB8Cj4gKwkJICAgIFhZX1NSQ19DT1BZX0JMVF9XUklU RV9BTFBIQSB8Cj4gKwkJICAgIFhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IpOwo+ICsJYmF0Y2hb aV0gfD0gNiArIDIgKiBoYXNfNjRiX3JlbG9jOwo+ICsJaWYgKGRldmljZS0+Z2VuID49IDQgJiYg c3JjLT50aWxpbmcpCj4gKwkJYmF0Y2hbaV0gfD0gWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRDsK PiArCWlmIChkZXZpY2UtPmdlbiA+PSA0ICYmIGRzdC0+dGlsaW5nKQo+ICsJCWJhdGNoW2ldIHw9 IFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQ7Cj4gKwlpKys7Cj4gKwo+ICsJcGl0Y2ggPSBkc3Qt PnN0cmlkZTsKPiArCWlmIChkZXZpY2UtPmdlbiA+PSA0ICYmIGRzdC0+dGlsaW5nKQo+ICsJCXBp dGNoIC89IDQ7Cj4gKwliYXRjaFtpKytdID0gMyA8PCAyNCB8IDB4Y2MgPDwgMTYgfCBwaXRjaDsK PiArCj4gKwliYXRjaFtpKytdID0gZHN0X3kgPDwgMTYgfCBkc3RfeDsKPiArCWJhdGNoW2krK10g PSAoaGVpZ2h0ICsgZHN0X3kpIDw8IDE2IHwgKHdpZHRoICsgZHN0X3gpOwo+ICsJcmVsb2NbMF0u dGFyZ2V0X2hhbmRsZSA9IG9ialswXS5oYW5kbGU7Cj4gKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZz ZXQgPSBvYmpbMF0ub2Zmc2V0Owo+ICsJcmVsb2NbMF0ub2Zmc2V0ID0gc2l6ZW9mKCpiYXRjaCkg KiBpOwo+ICsJcmVsb2NbMF0ucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsK PiArCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwli YXRjaFtpKytdID0gb2JqWzBdLm9mZnNldDsKPiArCWlmIChoYXNfNjRiX3JlbG9jKQo+ICsJCWJh dGNoW2krK10gPSBvYmpbMF0ub2Zmc2V0ID4+IDMyOwo+ICsKPiArCWJhdGNoW2krK10gPSBzcmNf eSA8PCAxNiB8IHNyY194Owo+ICsJcGl0Y2ggPSBzcmMtPnN0cmlkZTsKPiArCWlmIChkZXZpY2Ut PmdlbiA+PSA0ICYmIHNyYy0+dGlsaW5nKQo+ICsJCXBpdGNoIC89IDQ7Cj4gKwliYXRjaFtpKytd ID0gcGl0Y2g7Cj4gKwlyZWxvY1sxXS50YXJnZXRfaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKPiAr CXJlbG9jWzFdLnByZXN1bWVkX29mZnNldCA9IG9ialsxXS5vZmZzZXQ7Cj4gKwlyZWxvY1sxXS5v ZmZzZXQgPSBzaXplb2YoKmJhdGNoKSAqIGk7Cj4gKwlyZWxvY1sxXS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJYmF0Y2hbaSsrXSA9IG9ialsxXS5vZmZzZXQ7Cj4g KwlpZiAoaGFzXzY0Yl9yZWxvYykKPiArCQliYXRjaFtpKytdID0gb2JqWzFdLm9mZnNldCA+PiAz MjsKPiArCj4gKwlpZiAoKHNyYy0+dGlsaW5nIHwgZHN0LT50aWxpbmcpID49IEk5MTVfVElMSU5H X1kpIHsKPiArCQlpZ3RfYXNzZXJ0KGRldmljZS0+Z2VuID49IDYpOwo+ICsJCWJhdGNoW2krK10g PSBNSV9GTFVTSF9EVyB8IDI7Cj4gKwkJYmF0Y2hbaSsrXSA9IDA7Cj4gKwkJYmF0Y2hbaSsrXSA9 IDA7Cj4gKwkJYmF0Y2hbaSsrXSA9IDA7Cj4gKwo+ICsJCWJhdGNoW2krK10gPSBNSV9MT0FEX1JF R0lTVEVSX0lNTTsKPiArCQliYXRjaFtpKytdID0gQkNTX1NXQ1RSTDsKPiArCQliYXRjaFtpKytd ID0gKEJDU19TUkNfWSB8IEJDU19EU1RfWSkgPDwgMTY7Cj4gKwl9Cj4gKwo+ICsJYmF0Y2hbaSsr XSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwltdW5tYXAoYmF0Y2gsIDQwOTYpOwo+ICsKPiAr CWdlbV9leGVjYnVmKGRldmljZS0+ZmQsICZleGVjYnVmKTsKPiArCWdlbV9jbG9zZShkZXZpY2Ut PmZkLCBvYmpbMl0uaGFuZGxlKTsKPiArCj4gKwlkc3QtPmd0dF9vZmZzZXQgPSBvYmpbMF0ub2Zm c2V0Owo+ICsJc3JjLT5ndHRfb2Zmc2V0ID0gb2JqWzFdLm9mZnNldDsKPiArCj4gKwltZW1jcHlf Ymx0KHNyYy0+bW9kZWwsIGRzdC0+bW9kZWwsCj4gKwkJICAgNHUgKiBzcmMtPndpZHRoLCA0dSAq IGRzdC0+d2lkdGgsCj4gKwkJICAgc3JjX3gsIHNyY195LAo+ICsJCSAgIGRzdF94LCBkc3RfeSwK PiArCQkgICB3aWR0aCwgaGVpZ2h0KTsKPiArfQo+ICsKPiAraWd0X21haW4KPiArewo+ICsJc3Ry dWN0IGRldmljZSBkZXZpY2U7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWRldmljZS5mZCA9 IGRybV9vcGVuX2RyaXZlcl9yZW5kZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZV9n ZW0oZGV2aWNlLmZkKTsKPiArCj4gKwkJZGV2aWNlLnBjaWlkID0gaW50ZWxfZ2V0X2RybV9kZXZp ZChkZXZpY2UuZmQpOwo+ICsJCWRldmljZS5nZW4gPSBpbnRlbF9nZW4oZGV2aWNlLnBjaWlkKTsK PiArCQlkZXZpY2UubGxjID0gZ2VtX2hhc19sbGMoZGV2aWNlLmZkKTsKPiArCX0KPiArCj4gKwlp Z3Rfc3VidGVzdCgiYmFzaWMiKSB7Cj4gKwkJc3RydWN0IGJ1ZmZlciAqc3JjLCAqZHN0Owo+ICsJ CXVuc2lnbmVkIGludCB4LCB5Owo+ICsKPiArCQlmb3IgKHVuc2lnbmVkIGludCBoZWlnaHQgPSAx OyBoZWlnaHQgPD0gMTY7IGhlaWdodCA8PD0gMSkgewo+ICsJCQlmb3IgKHVuc2lnbmVkIGludCB3 aWR0aCA9IDE7IHdpZHRoIDw9IDY0OyB3aWR0aCA8PD0gMSkgewo+ICsJCQkJc3JjID0gYnVmZmVy X2NyZWF0ZSgmZGV2aWNlLAo+ICsJCQkJCQkgICAgd2lkdGggKiAxNiwgaGVpZ2h0ICogNCk7Cj4g KwkJCQlkc3QgPSBidWZmZXJfY3JlYXRlKCZkZXZpY2UsCj4gKwkJCQkJCSAgICB3aWR0aCAqIDE2 LCBoZWlnaHQgKiA0KTsKPiArCj4gKwkJCQl5ID0gMDsKPiArCQkJCWZvciAodW5zaWduZWQgaW50 IHNyY190aWxpbmcgPSBJOTE1X1RJTElOR19OT05FOwo+ICsJCQkJICAgICBzcmNfdGlsaW5nIDw9 IChkZXZpY2UuZ2VuID49IDYgPyBJOTE1X1RJTElOR19ZIDogSTkxNV9USUxJTkdfWCk7Cj4gKwkJ CQkgICAgIHNyY190aWxpbmcrKykgewo+ICsJCQkJCWJ1ZmZlcl9zZXRfdGlsaW5nKCZkZXZpY2Us IHNyYywgc3JjX3RpbGluZyk7Cj4gKwo+ICsJCQkJCXggPSAwOwo+ICsJCQkJCWZvciAodW5zaWdu ZWQgaW50IGRzdF90aWxpbmcgPSBJOTE1X1RJTElOR19OT05FOwo+ICsJCQkJCSAgICAgZHN0X3Rp bGluZyA8PSAoZGV2aWNlLmdlbiA+PSA2ID8gSTkxNV9USUxJTkdfWSA6IEk5MTVfVElMSU5HX1gp Owo+ICsJCQkJCSAgICAgZHN0X3RpbGluZysrKSB7Cj4gKwkJCQkJCWJ1ZmZlcl9zZXRfdGlsaW5n KCZkZXZpY2UsIGRzdCwgZHN0X3RpbGluZyk7Cj4gKwo+ICsJCQkJCQlmb3IgKGVudW0gbW9kZSBk b3duID0gQ1BVOyBkb3duIDw9IFdDOyBkb3duKyspIHsKPiArCQkJCQkJCWlndF9kZWJ1ZygiVGVz dGluZyBzcmNfdGlsaW5nPSVkLCBkc3RfdGlsaW5nPSVkLCBkb3duPSVkIGF0ICglZCwgJWQpIHgg KCVkLCAlZClcbiIsCj4gKwkJCQkJCQkJICBzcmNfdGlsaW5nLAo+ICsJCQkJCQkJCSAgZHN0X3Rp bGluZywKPiArCQkJCQkJCQkgIGRvd24sIHgsIHksCj4gKwkJCQkJCQkJICB3aWR0aCwgaGVpZ2h0 KTsKPiArCj4gKwkJCQkJCQlpZ3RfYXNzZXJ0KHggKyB3aWR0aCA8PSBkc3QtPndpZHRoKTsKPiAr CQkJCQkJCWlndF9hc3NlcnQoeSArIGhlaWdodCA8PSBkc3QtPmhlaWdodCk7Cj4gKwo+ICsJCQkJ CQkJYmxpdCgmZGV2aWNlLAo+ICsJCQkJCQkJICAgICBzcmMsIHgsIHksCj4gKwkJCQkJCQkgICAg IGRzdCwgeCwgeSwKPiArCQkJCQkJCSAgICAgd2lkdGgsIGhlaWdodCk7Cj4gKwkJCQkJCQlpZ3Rf YXNzZXJ0KGJ1ZmZlcl9jaGVjaygmZGV2aWNlLCBkc3QsIGRvd24pKTsKPiArCj4gKwkJCQkJCQl4 ICs9IHdpZHRoOwo+ICsJCQkJCQl9Cj4gKwkJCQkJfQo+ICsKPiArCQkJCQl5ICs9IGhlaWdodDsK PiArCQkJCX0KPiArCj4gKwkJCQlidWZmZXJfZnJlZSgmZGV2aWNlLCBkc3QpOwo+ICsJCQkJYnVm ZmVyX2ZyZWUoJmRldmljZSwgc3JjKTsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArfQoKV2hvbGUg dGVzdCB3aXRoIGFsbCBoZWxwZXIgZnVuY3Rpb25zIHNlZW1zIHRvIGJlIG5vdCBjbGVhciBlbm91 Z2guIApJIHdvdWxkIHByZWZlciB0byBoYXZlIG1vcmUgY29tbWVudHMgb2Ygd2hhdCBpcyBnb2lu ZyBvbiBpbiB0aGUgY29kZSwKZXNwZWNpYWxseSBpbiBjcmVhdGluZyBiYXRjaGVzLgoKR2VuZXJh bCBxdWVzdGlvbiAtIGRvZXMgdGhpcyB0ZXN0IGdpdmVzIGFkZGl0aW9uYWwgY292ZXJnZSBvciB3 aWxsIGJlCmEgc3Vic3RpdHVlIGZvciBzb21lIGV4aXN0aW5nPwoKS2FzaWEgOikKCj4gZGlmZiAt LWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBpbmRleCAzMmMy MTU2YzYuLmJlY2FkZmE4ZCAxMDA2NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ICsrKyBi L3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTE4LDYgKzE4LDcgQEAgdGVzdF9wcm9ncyA9IFsKPiAg CSdkcnZfc3VzcGVuZCcsCj4gIAknZ2VtX2JhZF9yZWxvYycsCj4gIAknZ2VtX2Jhc2ljJywKPiAr CSdnZW1fYmxpdHMnLAo+ICAJJ2dlbV9idXN5JywKPiAgCSdnZW1fY2FjaGluZycsCj4gIAknZ2Vt X2Nsb3NlJywKPiAtLSAKPiAyLjE4LjAKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pZ3QtZGV2Cg==