From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCH 05/14] drm/i915: Move most cdclk/rawclk related code to intel_cdclk.c Date: Thu, 22 Dec 2016 15:10:16 +0200 Message-ID: <1482412216.4759.48.camel@gmail.com> References: <20161219172840.31842-1-ville.syrjala@linux.intel.com> <20161219172840.31842-6-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com [IPv6:2607:f8b0:400e:c05::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9749F6F285 for ; Thu, 22 Dec 2016 13:10:32 +0000 (UTC) Received: by mail-pg0-x243.google.com with SMTP id i5so10524400pgh.2 for ; Thu, 22 Dec 2016 05:10:32 -0800 (PST) In-Reply-To: <20161219172840.31842-6-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org Cc: Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE2LTEyLTE5IGF0IDE5OjI4ICswMjAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbSB3cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGlu dXguaW50ZWwuY29tPgo+IAo+IExldCdzIHRyeSB0byBzaHJpbmsgaW50ZWxfZGlzcGxheS5jIGEg Yml0IGJ5IG1vdmluZyB0aGUgY2RjbGsvcmF3Y2xrCj4gc3R1ZmYgdG8gYSBuZXcgZmlsZS4gSXQn cyBhbGwgcmVhc29uYWJseSBzZWxmIGNvbnRhaW5lZCBzbyB3ZSBkb24ndAo+IGV2ZW4gaGF2ZSB0 byBhZGQgdGhhdCBtYW55IG5vbi1zdGF0aWMgc3ltYm9scy4KPiAKPiBXZSdsbCBhbHNvIHRha2Ug dGhlIG9wcG9ydHVuaXR5IHRvIHNodWZmbGUgYXJvdW5kIHRoZSBmdW5jdGlvbnMgYSBiaXQKPiB0 byBnZXQgdGhpbmdzIGluIGEgbW9yZSBjb25zaXN0ZW50IG9yZGVyIGJhc2VkIG9uIHRoZSBwbGF0 Zm9ybS4KCkhtbSwgbWF5YmUgdGhpcyBpcyB0aGUgbW9tZW50IHRvIGFkZCBzb21lIGtlcm5lbGRv YyB0byB0aGlzIHN0dWZmLCBvciBEYW5pZWwKbWlnaHQgYmUgZ3J1bXB5PyA6KQoKVGhlIG5ldyBm aWxlIG1ha2VzIHNlbnNlLCBkaWRuJ3QgcmVhbGx5IGNoZWNrIHRoZSBtb3ZlIGxpbmUgYnkgbGlu ZSwgYnV0CgpSZXZpZXdlZC1ieTogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxjb25zZWx2 YW4yQGdtYWlsLmNvbT4KCgo+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZcKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqAxICsKPiDCoGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2NkY2xrLmPCoMKgwqB8IDE2OTAgKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAyMTE1ICsrKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5owqDCoMKgwqDCoHzCoMKgwqDCoDkgKy0KPiDCoDQgZmlsZXMgY2hhbmdlZCwgMTky MiBpbnNlcnRpb25zKCspLCAxODkzIGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NkY2xrLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQo+IGluZGV4IDUxOTY1MDllNzFjZi4uM2Y1YzIxYjc2ZTg1IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtNzAsNiArNzAsNyBAQCBpOTE1LXkgKz0gaW50ZWxfYXVkaW8ubyBcCj4gwqAJ wqDCoGludGVsX2F0b21pYy5vIFwKPiDCoAnCoMKgaW50ZWxfYXRvbWljX3BsYW5lLm8gXAo+IMKg CcKgwqBpbnRlbF9iaW9zLm8gXAo+ICsJwqDCoGludGVsX2NkY2xrLm8gXAo+IMKgCcKgwqBpbnRl bF9jb2xvci5vIFwKPiDCoAnCoMKgaW50ZWxfZGlzcGxheS5vIFwKPiDCoAnCoMKgaW50ZWxfZHBp b19waHkubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NkY2xr LmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NkY2xrLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTgwNGM0MzU1M2I3Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NkY2xrLmMKPiBAQCAtMCwwICsx LDE2OTAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMDYtMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hBTEwKPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF Ugo+ICsgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg ImludGVsX2Rydi5oIgo+ICsKPiArc3RhdGljIGludCBmaXhlZF8xMzNtaHpfZ2V0X2NkY2xrKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJcmV0dXJuIDEzMzMzMzsK PiArfQo+ICsKPiArc3RhdGljIGludCBmaXhlZF8yMDBtaHpfZ2V0X2NkY2xrKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJcmV0dXJuIDIwMDAwMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBmaXhlZF8yNjZtaHpfZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiArewo+ICsJcmV0dXJuIDI2NjY2NzsKPiArfQo+ICsKPiArc3RhdGlj IGludCBmaXhlZF8zMzNtaHpfZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJcmV0dXJuIDMzMzMzMzsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaXhl ZF80MDBtaHpfZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsJcmV0dXJuIDQwMDAwMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaXhlZF80NTBtaHpf Z2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJcmV0 dXJuIDQ1MDAwMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpODV4X2dldF9jZGNsayhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2 ID0gZGV2X3ByaXYtPmRybS5wZGV2Owo+ICsJdTE2IGhwbGxjYyA9IDA7Cj4gKwo+ICsJLyoKPiAr CcKgKiA4NTJHTS84NTJHTVYgb25seSBzdXBwb3J0cyAxMzMgTUh6IGFuZCB0aGUgSFBMTENDCj4g KwnCoCogZW5jb2RpbmcgaXMgZGlmZmVyZW50IDooCj4gKwnCoCogRklYTUUgaXMgdGhpcyB0aGUg cmlnaHQgd2F5IHRvIGRldGVjdCA4NTJHTS84NTJHTVY/Cj4gKwnCoCovCj4gKwlpZiAocGRldi0+ cmV2aXNpb24gPT0gMHgxKQo+ICsJCXJldHVybiAxMzMzMzM7Cj4gKwo+ICsJcGNpX2J1c19yZWFk X2NvbmZpZ193b3JkKHBkZXYtPmJ1cywKPiArCQkJCcKgUENJX0RFVkZOKDAsIDMpLCBIUExMQ0Ms ICZocGxsY2MpOwo+ICsKPiArCS8qIEFzc3VtZSB0aGF0IHRoZSBoYXJkd2FyZSBpcyBpbiB0aGUg aGlnaCBzcGVlZCBzdGF0ZS7CoMKgVGhpcwo+ICsJwqAqIHNob3VsZCBiZSB0aGUgZGVmYXVsdC4K PiArCcKgKi8KPiArCXN3aXRjaCAoaHBsbGNjICYgR0NfQ0xPQ0tfQ09OVFJPTF9NQVNLKSB7Cj4g KwljYXNlIEdDX0NMT0NLXzEzM18yMDA6Cj4gKwljYXNlIEdDX0NMT0NLXzEzM18yMDBfMjoKPiAr CWNhc2UgR0NfQ0xPQ0tfMTAwXzIwMDoKPiArCQlyZXR1cm4gMjAwMDAwOwo+ICsJY2FzZSBHQ19D TE9DS18xNjZfMjUwOgo+ICsJCXJldHVybiAyNTAwMDA7Cj4gKwljYXNlIEdDX0NMT0NLXzEwMF8x MzM6Cj4gKwkJcmV0dXJuIDEzMzMzMzsKPiArCWNhc2UgR0NfQ0xPQ0tfMTMzXzI2NjoKPiArCWNh c2UgR0NfQ0xPQ0tfMTMzXzI2Nl8yOgo+ICsJY2FzZSBHQ19DTE9DS18xNjZfMjY2Ogo+ICsJCXJl dHVybiAyNjY2Njc7Cj4gKwl9Cj4gKwo+ICsJLyogU2hvdWxkbid0IGhhcHBlbiAqLwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNWdtX2dldF9jZGNsayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0g ZGV2X3ByaXYtPmRybS5wZGV2Owo+ICsJdTE2IGdjZmdjID0gMDsKPiArCj4gKwlwY2lfcmVhZF9j b25maWdfd29yZChwZGV2LCBHQ0ZHQywgJmdjZmdjKTsKPiArCj4gKwlpZiAoZ2NmZ2MgJiBHQ19M T1dfRlJFUVVFTkNZX0VOQUJMRSkKPiArCQlyZXR1cm4gMTMzMzMzOwo+ICsKPiArCXN3aXRjaCAo Z2NmZ2MgJiBHQ19ESVNQTEFZX0NMT0NLX01BU0spIHsKPiArCWNhc2UgR0NfRElTUExBWV9DTE9D S18zMzNfTUhaOgo+ICsJCXJldHVybiAzMzMzMzM7Cj4gKwlkZWZhdWx0Ogo+ICsJY2FzZSBHQ19E SVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaOgo+ICsJCXJldHVybiAxOTAwMDA7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfaHBsbF92Y28oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJs Yl92Y29bOF0gPSB7Cj4gKwkJWzBdID0gMzIwMDAwMCwKPiArCQlbMV0gPSA0MDAwMDAwLAo+ICsJ CVsyXSA9IDUzMzMzMzMsCj4gKwkJWzNdID0gNDgwMDAwMCwKPiArCQlbNF0gPSA2NDAwMDAwLAo+ ICsJfTsKPiArCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcG52X3Zjb1s4XSA9IHsKPiArCQlb MF0gPSAzMjAwMDAwLAo+ICsJCVsxXSA9IDQwMDAwMDAsCj4gKwkJWzJdID0gNTMzMzMzMywKPiAr CQlbM10gPSA0ODAwMDAwLAo+ICsJCVs0XSA9IDI2NjY2NjcsCj4gKwl9Owo+ICsJc3RhdGljIGNv bnN0IHVuc2lnbmVkIGludCBjbF92Y29bOF0gPSB7Cj4gKwkJWzBdID0gMzIwMDAwMCwKPiArCQlb MV0gPSA0MDAwMDAwLAo+ICsJCVsyXSA9IDUzMzMzMzMsCj4gKwkJWzNdID0gNjQwMDAwMCwKPiAr CQlbNF0gPSAzMzMzMzMzLAo+ICsJCVs1XSA9IDM1NjY2NjcsCj4gKwkJWzZdID0gNDI2NjY2NywK PiArCX07Cj4gKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVsa192Y29bOF0gPSB7Cj4gKwkJ WzBdID0gMzIwMDAwMCwKPiArCQlbMV0gPSA0MDAwMDAwLAo+ICsJCVsyXSA9IDUzMzMzMzMsCj4g KwkJWzNdID0gNDgwMDAwMCwKPiArCX07Cj4gKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGN0 Z192Y29bOF0gPSB7Cj4gKwkJWzBdID0gMzIwMDAwMCwKPiArCQlbMV0gPSA0MDAwMDAwLAo+ICsJ CVsyXSA9IDUzMzMzMzMsCj4gKwkJWzNdID0gNjQwMDAwMCwKPiArCQlbNF0gPSAyNjY2NjY3LAo+ ICsJCVs1XSA9IDQyNjY2NjcsCj4gKwl9Owo+ICsJY29uc3QgdW5zaWduZWQgaW50ICp2Y29fdGFi bGU7Cj4gKwl1bnNpZ25lZCBpbnQgdmNvOwo+ICsJdWludDhfdCB0bXAgPSAwOwo+ICsKPiArCS8q IEZJWE1FIG90aGVyIGNoaXBzZXRzPyAqLwo+ICsJaWYgKElTX0dNNDUoZGV2X3ByaXYpKQo+ICsJ CXZjb190YWJsZSA9IGN0Z192Y287Cj4gKwllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQo+ICsJ CXZjb190YWJsZSA9IGVsa192Y287Cj4gKwllbHNlIGlmIChJU19JOTY1R00oZGV2X3ByaXYpKQo+ ICsJCXZjb190YWJsZSA9IGNsX3ZjbzsKPiArCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2 KSkKPiArCQl2Y29fdGFibGUgPSBwbnZfdmNvOwo+ICsJZWxzZSBpZiAoSVNfRzMzKGRldl9wcml2 KSkKPiArCQl2Y29fdGFibGUgPSBibGJfdmNvOwo+ICsJZWxzZQo+ICsJCXJldHVybiAwOwo+ICsK PiArCXRtcCA9IEk5MTVfUkVBRChJU19NT0JJTEUoZGV2X3ByaXYpID8gSFBMTFZDT19NT0JJTEUg OiBIUExMVkNPKTsKPiArCj4gKwl2Y28gPSB2Y29fdGFibGVbdG1wICYgMHg3XTsKPiArCWlmICh2 Y28gPT0gMCkKPiArCQlEUk1fRVJST1IoIkJhZCBIUExMIFZDTyAoSFBMTFZDTz0weCUwMngpXG4i LCB0bXApOwo+ICsJZWxzZQo+ICsJCURSTV9ERUJVR19LTVMoIkhQTEwgVkNPICV1IGtIelxuIiwg dmNvKTsKPiArCj4gKwlyZXR1cm4gdmNvOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGczM19nZXRf Y2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3Qg cGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsKPiArCXN0YXRpYyBjb25zdCB1aW50 OF90IGRpdl8zMjAwW10gPSB7IDEyLCAxMCzCoMKgOCzCoMKgNywgNSwgMTYgfTsKPiArCXN0YXRp YyBjb25zdCB1aW50OF90IGRpdl80MDAwW10gPSB7IDE0LCAxMiwgMTAswqDCoDgsIDYsIDIwIH07 Cj4gKwlzdGF0aWMgY29uc3QgdWludDhfdCBkaXZfNDgwMFtdID0geyAyMCwgMTQsIDEyLCAxMCwg OCwgMjQgfTsKPiArCXN0YXRpYyBjb25zdCB1aW50OF90IGRpdl81MzMzW10gPSB7IDIwLCAxNiwg MTIsIDEyLCA4LCAyOCB9Owo+ICsJY29uc3QgdWludDhfdCAqZGl2X3RhYmxlOwo+ICsJdW5zaWdu ZWQgaW50IGNkY2xrX3NlbCwgdmNvID0gaW50ZWxfaHBsbF92Y28oZGV2X3ByaXYpOwo+ICsJdWlu dDE2X3QgdG1wID0gMDsKPiArCj4gKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBHQ0ZHQywg JnRtcCk7Cj4gKwo+ICsJY2RjbGtfc2VsID0gKHRtcCA+PiA0KSAmIDB4NzsKPiArCj4gKwlpZiAo Y2RjbGtfc2VsID49IEFSUkFZX1NJWkUoZGl2XzMyMDApKQo+ICsJCWdvdG8gZmFpbDsKPiArCj4g Kwlzd2l0Y2ggKHZjbykgewo+ICsJY2FzZSAzMjAwMDAwOgo+ICsJCWRpdl90YWJsZSA9IGRpdl8z MjAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0MDAwMDAwOgo+ICsJCWRpdl90YWJsZSA9IGRpdl80 MDAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0ODAwMDAwOgo+ICsJCWRpdl90YWJsZSA9IGRpdl80 ODAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA1MzMzMzMzOgo+ICsJCWRpdl90YWJsZSA9IGRpdl81 MzMzOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZjbywgZGl2X3RhYmxlW2NkY2xrX3NlbF0pOwo+ ICsKPiArZmFpbDoKPiArCURSTV9FUlJPUigiVW5hYmxlIHRvIGRldGVybWluZSBDRENMSy4gSFBM TCBWQ089JXUga0h6LAo+IENGR0M9MHglMDh4XG4iLAo+ICsJCcKgwqB2Y28sIHRtcCk7Cj4gKwly ZXR1cm4gMTkwNDc2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBudl9nZXRfY2RjbGsoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRl diA9IGRldl9wcml2LT5kcm0ucGRldjsKPiArCXUxNiBnY2ZnYyA9IDA7Cj4gKwo+ICsJcGNpX3Jl YWRfY29uZmlnX3dvcmQocGRldiwgR0NGR0MsICZnY2ZnYyk7Cj4gKwo+ICsJc3dpdGNoIChnY2Zn YyAmIEdDX0RJU1BMQVlfQ0xPQ0tfTUFTSykgewo+ICsJY2FzZSBHQ19ESVNQTEFZX0NMT0NLXzI2 N19NSFpfUE5WOgo+ICsJCXJldHVybiAyNjY2Njc7Cj4gKwljYXNlIEdDX0RJU1BMQVlfQ0xPQ0tf MzMzX01IWl9QTlY6Cj4gKwkJcmV0dXJuIDMzMzMzMzsKPiArCWNhc2UgR0NfRElTUExBWV9DTE9D S180NDRfTUhaX1BOVjoKPiArCQlyZXR1cm4gNDQ0NDQ0Owo+ICsJY2FzZSBHQ19ESVNQTEFZX0NM T0NLXzIwMF9NSFpfUE5WOgo+ICsJCXJldHVybiAyMDAwMDA7Cj4gKwlkZWZhdWx0Ogo+ICsJCURS TV9FUlJPUigiVW5rbm93biBwbnYgZGlzcGxheSBjb3JlIGNsb2NrIDB4JTA0eFxuIiwgZ2NmZ2Mp Owo+ICsJY2FzZSBHQ19ESVNQTEFZX0NMT0NLXzEzM19NSFpfUE5WOgo+ICsJCXJldHVybiAxMzMz MzM7Cj4gKwljYXNlIEdDX0RJU1BMQVlfQ0xPQ0tfMTY3X01IWl9QTlY6Cj4gKwkJcmV0dXJuIDE2 NjY2NzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBpOTY1Z21fZ2V0X2NkY2xrKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IHBjaV9kZXYgKnBk ZXYgPSBkZXZfcHJpdi0+ZHJtLnBkZXY7Cj4gKwlzdGF0aWMgY29uc3QgdWludDhfdCBkaXZfMzIw MFtdID0geyAxNiwgMTAswqDCoDggfTsKPiArCXN0YXRpYyBjb25zdCB1aW50OF90IGRpdl80MDAw W10gPSB7IDIwLCAxMiwgMTAgfTsKPiArCXN0YXRpYyBjb25zdCB1aW50OF90IGRpdl81MzMzW10g PSB7IDI0LCAxNiwgMTQgfTsKPiArCWNvbnN0IHVpbnQ4X3QgKmRpdl90YWJsZTsKPiArCXVuc2ln bmVkIGludCBjZGNsa19zZWwsIHZjbyA9IGludGVsX2hwbGxfdmNvKGRldl9wcml2KTsKPiArCXVp bnQxNl90IHRtcCA9IDA7Cj4gKwo+ICsJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgR0NGR0Ms ICZ0bXApOwo+ICsKPiArCWNkY2xrX3NlbCA9ICgodG1wID4+IDgpICYgMHgxZikgLSAxOwo+ICsK PiArCWlmIChjZGNsa19zZWwgPj0gQVJSQVlfU0laRShkaXZfMzIwMCkpCj4gKwkJZ290byBmYWls Owo+ICsKPiArCXN3aXRjaCAodmNvKSB7Cj4gKwljYXNlIDMyMDAwMDA6Cj4gKwkJZGl2X3RhYmxl ID0gZGl2XzMyMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDQwMDAwMDA6Cj4gKwkJZGl2X3RhYmxl ID0gZGl2XzQwMDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDUzMzMzMzM6Cj4gKwkJZGl2X3RhYmxl ID0gZGl2XzUzMzM7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWdvdG8gZmFpbDsKPiAr CX0KPiArCj4gKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QodmNvLCBkaXZfdGFibGVbY2RjbGtf c2VsXSk7Cj4gKwo+ICtmYWlsOgo+ICsJRFJNX0VSUk9SKCJVbmFibGUgdG8gZGV0ZXJtaW5lIENE Q0xLLiBIUExMIFZDTz0ldSBrSHosCj4gQ0ZHQz0weCUwNHhcbiIsCj4gKwkJwqDCoHZjbywgdG1w KTsKPiArCXJldHVybiAyMDAwMDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ200NV9nZXRfY2Rj bGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgcGNp X2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsKPiArCXVuc2lnbmVkIGludCBjZGNsa19z ZWwsIHZjbyA9IGludGVsX2hwbGxfdmNvKGRldl9wcml2KTsKPiArCXVpbnQxNl90IHRtcCA9IDA7 Cj4gKwo+ICsJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgR0NGR0MsICZ0bXApOwo+ICsKPiAr CWNkY2xrX3NlbCA9ICh0bXAgPj4gMTIpICYgMHgxOwo+ICsKPiArCXN3aXRjaCAodmNvKSB7Cj4g KwljYXNlIDI2NjY2Njc6Cj4gKwljYXNlIDQwMDAwMDA6Cj4gKwljYXNlIDUzMzMzMzM6Cj4gKwkJ cmV0dXJuIGNkY2xrX3NlbCA/IDMzMzMzMyA6IDIyMjIyMjsKPiArCWNhc2UgMzIwMDAwMDoKPiAr CQlyZXR1cm4gY2RjbGtfc2VsID8gMzIwMDAwIDogMjI4NTcxOwo+ICsJZGVmYXVsdDoKPiArCQlE Uk1fRVJST1IoIlVuYWJsZSB0byBkZXRlcm1pbmUgQ0RDTEsuIEhQTEwgVkNPPSV1LAo+IENGR0M9 MHglMDR4XG4iLAo+ICsJCQnCoMKgdmNvLCB0bXApOwo+ICsJCXJldHVybiAyMjIyMjI7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaHN3X2dldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXVpbnQzMl90IGxjcGxsID0gSTkxNV9SRUFEKExDUExM X0NUTCk7Cj4gKwl1aW50MzJfdCBmcmVxID0gbGNwbGwgJiBMQ1BMTF9DTEtfRlJFUV9NQVNLOwo+ ICsKPiArCWlmIChsY3BsbCAmIExDUExMX0NEX1NPVVJDRV9GQ0xLKQo+ICsJCXJldHVybiA4MDAw MDA7Cj4gKwllbHNlIGlmIChJOTE1X1JFQUQoRlVTRV9TVFJBUCkgJiBIU1dfQ0RDTEtfTElNSVQp Cj4gKwkJcmV0dXJuIDQ1MDAwMDsKPiArCWVsc2UgaWYgKGZyZXEgPT0gTENQTExfQ0xLX0ZSRVFf NDUwKQo+ICsJCXJldHVybiA0NTAwMDA7Cj4gKwllbHNlIGlmIChJU19IU1dfVUxUKGRldl9wcml2 KSkKPiArCQlyZXR1cm4gMzM3NTAwOwo+ICsJZWxzZQo+ICsJCXJldHVybiA1NDAwMDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgdmx2X2NhbGNfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICsJCQnCoMKgaW50IG1heF9waXhjbGspCj4gK3sKPiArCWludCBmcmVxXzMy MCA9IChkZXZfcHJpdi0+aHBsbF9mcmVxIDw8wqDCoDEpICUgMzIwMDAwICE9IDAgPwo+ICsJCTMz MzMzMyA6IDMyMDAwMDsKPiArCWludCBsaW1pdCA9IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpID8g OTUgOiA5MDsKPiArCj4gKwkvKgo+ICsJwqAqIFdlIHNlZW0gdG8gZ2V0IGFuIHVuc3RhYmxlIG9y IHNvbGlkIGNvbG9yIHBpY3R1cmUgYXQgMjAwTUh6Lgo+ICsJwqAqIE5vdCBzdXJlIHdoYXQncyB3 cm9uZy4gRm9yIG5vdyB1c2UgMjAwTUh6IG9ubHkgd2hlbiBhbGwgcGlwZXMKPiArCcKgKiBhcmUg b2ZmLgo+ICsJwqAqLwo+ICsJaWYgKCFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJgo+ICsJwqDC oMKgwqBtYXhfcGl4Y2xrID4gZnJlcV8zMjAqbGltaXQvMTAwKQo+ICsJCXJldHVybiA0MDAwMDA7 Cj4gKwllbHNlIGlmIChtYXhfcGl4Y2xrID4gMjY2NjY3KmxpbWl0LzEwMCkKPiArCQlyZXR1cm4g ZnJlcV8zMjA7Cj4gKwllbHNlIGlmIChtYXhfcGl4Y2xrID4gMCkKPiArCQlyZXR1cm4gMjY2NjY3 Owo+ICsJZWxzZQo+ICsJCXJldHVybiAyMDAwMDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmx2 X2dldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXJl dHVybiB2bHZfZ2V0X2Nja19jbG9ja19ocGxsKGRldl9wcml2LCAiY2RjbGsiLAo+ICsJCQkJwqDC oMKgwqDCoMKgQ0NLX0RJU1BMQVlfQ0xPQ0tfQ09OVFJPTCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHZsdl9wcm9ncmFtX3BmaV9jcmVkaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJdW5zaWduZWQgaW50IGNyZWRpdHMsIGRlZmF1bHRfY3JlZGl0czsKPiAr Cj4gKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJZGVmYXVsdF9jcmVkaXRzID0g UEZJX0NSRURJVCgxMik7Cj4gKwllbHNlCj4gKwkJZGVmYXVsdF9jcmVkaXRzID0gUEZJX0NSRURJ VCg4KTsKPiArCj4gKwlpZiAoZGV2X3ByaXYtPmNkY2xrX2ZyZXEgPj0gZGV2X3ByaXYtPmN6Y2xr X2ZyZXEpIHsKPiArCQkvKiBDSFYgc3VnZ2VzdGVkIHZhbHVlIGlzIDMxIG9yIDYzICovCj4gKwkJ aWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCQljcmVkaXRzID0gUEZJX0NSRURJVF82 MzsKPiArCQllbHNlCj4gKwkJCWNyZWRpdHMgPSBQRklfQ1JFRElUKDE1KTsKPiArCX0gZWxzZSB7 Cj4gKwkJY3JlZGl0cyA9IGRlZmF1bHRfY3JlZGl0czsKPiArCX0KPiArCj4gKwkvKgo+ICsJwqAq IFdBIC0gd3JpdGUgZGVmYXVsdCBjcmVkaXRzIGJlZm9yZSByZS1wcm9ncmFtbWluZwo+ICsJwqAq IEZJWE1FOiBzaG91bGQgd2UgYWxzbyBzZXQgdGhlIHJlc2VuZCBiaXQgaGVyZT8KPiArCcKgKi8K PiArCUk5MTVfV1JJVEUoR0NJX0NPTlRST0wsIFZHQV9GQVNUX01PREVfRElTQUJMRSB8Cj4gKwkJ wqDCoMKgZGVmYXVsdF9jcmVkaXRzKTsKPiArCj4gKwlJOTE1X1dSSVRFKEdDSV9DT05UUk9MLCBW R0FfRkFTVF9NT0RFX0RJU0FCTEUgfAo+ICsJCcKgwqDCoGNyZWRpdHMgfCBQRklfQ1JFRElUX1JF U0VORCk7Cj4gKwo+ICsJLyoKPiArCcKgKiBGSVhNRSBpcyB0aGlzIGd1YXJhbnRlZWQgdG8gY2xl YXIKPiArCcKgKiBpbW1lZGlhdGVseSBvciBzaG91bGQgd2UgcG9sbCBmb3IgaXQ/Cj4gKwnCoCov Cj4gKwlXQVJOX09OKEk5MTVfUkVBRChHQ0lfQ09OVFJPTCkgJiBQRklfQ1JFRElUX1JFU0VORCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZsdl9zZXRfY2RjbGsoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IGNkY2xrKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gKwl1MzIgdmFsLCBjbWQ7Cj4gKwo+ICsJV0FSTl9PTihkZXZf cHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsoZGV2X3ByaXYpICE9IGRldl9wcml2LQo+ID5jZGNsa19m cmVxKTsKPiArCj4gKwlpZiAoY2RjbGsgPj0gMzIwMDAwKSAvKiBqdW1wIHRvIGhpZ2hlc3Qgdm9s dGFnZSBmb3IgNDAwTUh6IHRvbyAqLwo+ICsJCWNtZCA9IDI7Cj4gKwllbHNlIGlmIChjZGNsayA9 PSAyNjY2NjcpCj4gKwkJY21kID0gMTsKPiArCWVsc2UKPiArCQljbWQgPSAwOwo+ICsKPiArCW11 dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUEZSRVEpOwo+ICsJdmFsICY9IH5EU1BGUkVRR1VBUl9N QVNLOwo+ICsJdmFsIHw9IChjbWQgPDwgRFNQRlJFUUdVQVJfU0hJRlQpOwo+ICsJdmx2X3B1bml0 X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSwgdmFsKTsKPiArCWlmICh3YWl0X2Zv cigodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BGUkVRKSAmCj4gKwkJwqDC oMKgwqDCoMKgRFNQRlJFUVNUQVRfTUFTSykgPT0gKGNtZCA8PCBEU1BGUkVRU1RBVF9TSElGVCks Cj4gKwkJwqDCoMKgwqDCoDUwKSkgewo+ICsJCURSTV9FUlJPUigidGltZWQgb3V0IHdhaXRpbmcg Zm9yIENEY2xrIGNoYW5nZVxuIik7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5y cHMuaHdfbG9jayk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOwo+ICsK PiArCWlmIChjZGNsayA9PSA0MDAwMDApIHsKPiArCQl1MzIgZGl2aWRlcjsKPiArCj4gKwkJZGl2 aWRlciA9IERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5ocGxsX2ZyZXEgPDwgMSwKPiArCQkJ CQnCoMKgwqDCoGNkY2xrKSAtIDE7Cj4gKwo+ICsJCS8qIGFkanVzdCBjZGNsayBkaXZpZGVyICov Cj4gKwkJdmFsID0gdmx2X2Nja19yZWFkKGRldl9wcml2LCBDQ0tfRElTUExBWV9DTE9DS19DT05U Uk9MKTsKPiArCQl2YWwgJj0gfkNDS19GUkVRVUVOQ1lfVkFMVUVTOwo+ICsJCXZhbCB8PSBkaXZp ZGVyOwo+ICsJCXZsdl9jY2tfd3JpdGUoZGV2X3ByaXYsIENDS19ESVNQTEFZX0NMT0NLX0NPTlRS T0wsIHZhbCk7Cj4gKwo+ICsJCWlmICh3YWl0X2Zvcigodmx2X2Nja19yZWFkKGRldl9wcml2LAo+ IENDS19ESVNQTEFZX0NMT0NLX0NPTlRST0wpICYKPiArCQkJwqDCoMKgwqDCoMKgQ0NLX0ZSRVFV RU5DWV9TVEFUVVMpID09IChkaXZpZGVyIDw8Cj4gQ0NLX0ZSRVFVRU5DWV9TVEFUVVNfU0hJRlQp LAo+ICsJCQnCoMKgwqDCoMKgNTApKQo+ICsJCQlEUk1fRVJST1IoInRpbWVkIG91dCB3YWl0aW5n IGZvciBDRGNsayBjaGFuZ2VcbiIpOwo+ICsJfQo+ICsKPiArCS8qIGFkanVzdCBzZWxmLXJlZnJl c2ggZXhpdCBsYXRlbmN5IHZhbHVlICovCj4gKwl2YWwgPSB2bHZfYnVuaXRfcmVhZChkZXZfcHJp diwgQlVOSVRfUkVHX0JJU09DKTsKPiArCXZhbCAmPSB+MHg3ZjsKPiArCj4gKwkvKgo+ICsJwqAq IEZvciBoaWdoIGJhbmR3aWR0aCBjb25maWdzLCB3ZSBzZXQgYSBoaWdoZXIgbGF0ZW5jeSBpbiB0 aGUgYnVuaXQKPiArCcKgKiBzbyB0aGF0IHRoZSBjb3JlIGRpc3BsYXkgZmV0Y2ggaGFwcGVucyBp biB0aW1lIHRvIGF2b2lkIHVuZGVycnVucy4KPiArCcKgKi8KPiArCWlmIChjZGNsayA9PSA0MDAw MDApCj4gKwkJdmFsIHw9IDQ1MDAgLyAyNTA7IC8qIDQuNSB1c2VjICovCj4gKwllbHNlCj4gKwkJ dmFsIHw9IDMwMDAgLyAyNTA7IC8qIDMuMCB1c2VjICovCj4gKwl2bHZfYnVuaXRfd3JpdGUoZGV2 X3ByaXYsIEJVTklUX1JFR19CSVNPQywgdmFsKTsKPiArCj4gKwltdXRleF91bmxvY2soJmRldl9w cml2LT5zYl9sb2NrKTsKPiArCj4gKwlpbnRlbF91cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBjaHZfc2V0X2NkY2xrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IGludCBjZGNsaykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g dG9faTkxNShkZXYpOwo+ICsJdTMyIHZhbCwgY21kOwo+ICsKPiArCVdBUk5fT04oZGV2X3ByaXYt PmRpc3BsYXkuZ2V0X2NkY2xrKGRldl9wcml2KSAhPSBkZXZfcHJpdi0KPiA+Y2RjbGtfZnJlcSk7 Cj4gKwo+ICsJc3dpdGNoIChjZGNsaykgewo+ICsJY2FzZSAzMzMzMzM6Cj4gKwljYXNlIDMyMDAw MDoKPiArCWNhc2UgMjY2NjY3Ogo+ICsJY2FzZSAyMDAwMDA6Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCU1JU1NJTkdfQ0FTRShjZGNsayk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CS8qCj4gKwnCoCogU3BlY3MgYXJlIGZ1bGwgb2YgbWlzaW5mb3JtYXRpb24sIGJ1dCB0ZXN0aW5n IG9uIGFjdHVhbAo+ICsJwqAqIGhhcmR3YXJlIGhhcyBzaG93biB0aGF0IHdlIGp1c3QgbmVlZCB0 byB3cml0ZSB0aGUgZGVzaXJlZAo+ICsJwqAqIENDSyBkaXZpZGVyIGludG8gdGhlIFB1bml0IHJl Z2lzdGVyLgo+ICsJwqAqLwo+ICsJY21kID0gRElWX1JPVU5EX0NMT1NFU1QoZGV2X3ByaXYtPmhw bGxfZnJlcSA8PCAxLCBjZGNsaykgLSAxOwo+ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5y cHMuaHdfbG9jayk7Cj4gKwl2YWwgPSB2bHZfcHVuaXRfcmVhZChkZXZfcHJpdiwgUFVOSVRfUkVH X0RTUEZSRVEpOwo+ICsJdmFsICY9IH5EU1BGUkVRR1VBUl9NQVNLX0NIVjsKPiArCXZhbCB8PSAo Y21kIDw8IERTUEZSRVFHVUFSX1NISUZUX0NIVik7Cj4gKwl2bHZfcHVuaXRfd3JpdGUoZGV2X3By aXYsIFBVTklUX1JFR19EU1BGUkVRLCB2YWwpOwo+ICsJaWYgKHdhaXRfZm9yKCh2bHZfcHVuaXRf cmVhZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUEZSRVEpICYKPiArCQnCoMKgwqDCoMKgwqBEU1BG UkVRU1RBVF9NQVNLX0NIVikgPT0gKGNtZCA8PAo+IERTUEZSRVFTVEFUX1NISUZUX0NIViksCj4g KwkJwqDCoMKgwqDCoDUwKSkgewo+ICsJCURSTV9FUlJPUigidGltZWQgb3V0IHdhaXRpbmcgZm9y IENEY2xrIGNoYW5nZVxuIik7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMu aHdfbG9jayk7Cj4gKwo+ICsJaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiArfQo+ICsK PiArc3RhdGljIGludCBiZHdfY2FsY19jZGNsayhpbnQgbWF4X3BpeGNsaykKPiArewo+ICsJaWYg KG1heF9waXhjbGsgPiA1NDAwMDApCj4gKwkJcmV0dXJuIDY3NTAwMDsKPiArCWVsc2UgaWYgKG1h eF9waXhjbGsgPiA0NTAwMDApCj4gKwkJcmV0dXJuIDU0MDAwMDsKPiArCWVsc2UgaWYgKG1heF9w aXhjbGsgPiAzMzc1MDApCj4gKwkJcmV0dXJuIDQ1MDAwMDsKPiArCWVsc2UKPiArCQlyZXR1cm4g MzM3NTAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJkd19nZXRfY2RjbGsoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1aW50MzJfdCBsY3BsbCA9IEk5MTVfUkVB RChMQ1BMTF9DVEwpOwo+ICsJdWludDMyX3QgZnJlcSA9IGxjcGxsICYgTENQTExfQ0xLX0ZSRVFf TUFTSzsKPiArCj4gKwlpZiAobGNwbGwgJiBMQ1BMTF9DRF9TT1VSQ0VfRkNMSykKPiArCQlyZXR1 cm4gODAwMDAwOwo+ICsJZWxzZSBpZiAoSTkxNV9SRUFEKEZVU0VfU1RSQVApICYgSFNXX0NEQ0xL X0xJTUlUKQo+ICsJCXJldHVybiA0NTAwMDA7Cj4gKwllbHNlIGlmIChmcmVxID09IExDUExMX0NM S19GUkVRXzQ1MCkKPiArCQlyZXR1cm4gNDUwMDAwOwo+ICsJZWxzZSBpZiAoZnJlcSA9PSBMQ1BM TF9DTEtfRlJFUV81NE9fQkRXKQo+ICsJCXJldHVybiA1NDAwMDA7Cj4gKwllbHNlIGlmIChmcmVx ID09IExDUExMX0NMS19GUkVRXzMzN181X0JEVykKPiArCQlyZXR1cm4gMzM3NTAwOwo+ICsJZWxz ZQo+ICsJCXJldHVybiA2NzUwMDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJkd19zZXRfY2Rj bGsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNkY2xrKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwl1aW50MzJfdCB2YWws IGRhdGE7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChXQVJOKChJOTE1X1JFQUQoTENQTExfQ1RM KSAmCj4gKwkJwqDCoChMQ1BMTF9QTExfRElTQUJMRSB8IExDUExMX1BMTF9MT0NLIHwKPiArCQnC oMKgwqBMQ1BMTF9DRF9DTE9DS19ESVNBQkxFIHwgTENQTExfUk9PVF9DRF9DTE9DS19ESVNBQkxF IHwKPiArCQnCoMKgwqBMQ1BMTF9DRDJYX0NMT0NLX0RJU0FCTEUgfCBMQ1BMTF9QT1dFUl9ET1dO X0FMTE9XIHwKPiArCQnCoMKgwqBMQ1BMTF9DRF9TT1VSQ0VfRkNMSykpICE9IExDUExMX1BMTF9M T0NLLAo+ICsJCcKgInRyeWluZyB0byBjaGFuZ2UgY2RjbGsgZnJlcXVlbmN5IHdpdGggY2RjbGsg bm90Cj4gZW5hYmxlZFxuIikpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xvY2soJmRldl9w cml2LT5ycHMuaHdfbG9jayk7Cj4gKwlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV93cml0ZShkZXZf cHJpdiwKPiArCQkJCcKgwqDCoMKgwqDCoEJEV19QQ09ERV9ESVNQTEFZX0ZSRVFfQ0hBTkdFX1JF USwKPiAweDApOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ICsJ aWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluZm9ybSBwY29kZSBhYm91dCBj ZGNsayBjaGFuZ2VcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwl2YWwgPSBJOTE1X1JF QUQoTENQTExfQ1RMKTsKPiArCXZhbCB8PSBMQ1BMTF9DRF9TT1VSQ0VfRkNMSzsKPiArCUk5MTVf V1JJVEUoTENQTExfQ1RMLCB2YWwpOwo+ICsKPiArCWlmICh3YWl0X2Zvcl91cyhJOTE1X1JFQUQo TENQTExfQ1RMKSAmCj4gKwkJCUxDUExMX0NEX1NPVVJDRV9GQ0xLX0RPTkUsIDEpKQo+ICsJCURS TV9FUlJPUigiU3dpdGNoaW5nIHRvIEZDTEsgZmFpbGVkXG4iKTsKPiArCj4gKwl2YWwgPSBJOTE1 X1JFQUQoTENQTExfQ1RMKTsKPiArCXZhbCAmPSB+TENQTExfQ0xLX0ZSRVFfTUFTSzsKPiArCj4g Kwlzd2l0Y2ggKGNkY2xrKSB7Cj4gKwljYXNlIDQ1MDAwMDoKPiArCQl2YWwgfD0gTENQTExfQ0xL X0ZSRVFfNDUwOwo+ICsJCWRhdGEgPSAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA1NDAwMDA6Cj4g KwkJdmFsIHw9IExDUExMX0NMS19GUkVRXzU0T19CRFc7Cj4gKwkJZGF0YSA9IDE7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIDMzNzUwMDoKPiArCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRX Owo+ICsJCWRhdGEgPSAyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA2NzUwMDA6Cj4gKwkJdmFsIHw9 IExDUExMX0NMS19GUkVRXzY3NV9CRFc7Cj4gKwkJZGF0YSA9IDM7Cj4gKwkJYnJlYWs7Cj4gKwlk ZWZhdWx0Ogo+ICsJCVdBUk4oMSwgImludmFsaWQgY2RjbGsgZnJlcXVlbmN5XG4iKTsKPiArCQly ZXR1cm47Cj4gKwl9Cj4gKwo+ICsJSTkxNV9XUklURShMQ1BMTF9DVEwsIHZhbCk7Cj4gKwo+ICsJ dmFsID0gSTkxNV9SRUFEKExDUExMX0NUTCk7Cj4gKwl2YWwgJj0gfkxDUExMX0NEX1NPVVJDRV9G Q0xLOwo+ICsJSTkxNV9XUklURShMQ1BMTF9DVEwsIHZhbCk7Cj4gKwo+ICsJaWYgKHdhaXRfZm9y X3VzKChJOTE1X1JFQUQoTENQTExfQ1RMKSAmCj4gKwkJCUxDUExMX0NEX1NPVVJDRV9GQ0xLX0RP TkUpID09IDAsIDEpKQo+ICsJCURSTV9FUlJPUigiU3dpdGNoaW5nIGJhY2sgdG8gTENQTEwgZmFp bGVkXG4iKTsKPiArCj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ICsJ c2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIEhTV19QQ09ERV9ERV9XUklURV9GUkVR X1JFUSwgZGF0YSk7Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4g Kwo+ICsJSTkxNV9XUklURShDRENMS19GUkVRLCBESVZfUk9VTkRfQ0xPU0VTVChjZGNsaywgMTAw MCkgLSAxKTsKPiArCj4gKwlpbnRlbF91cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+ICsKPiArCVdB Uk4oY2RjbGsgIT0gZGV2X3ByaXYtPmNkY2xrX2ZyZXEsCj4gKwnCoMKgwqDCoMKgImNkY2xrIHJl cXVlc3RlZCAlZCBrSHogYnV0IGdvdCAlZCBrSHpcbiIsCj4gKwnCoMKgwqDCoMKgY2RjbGssIGRl dl9wcml2LT5jZGNsa19mcmVxKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBza2xfY2FsY19jZGNs ayhpbnQgbWF4X3BpeGNsaywgaW50IHZjbykKPiArewo+ICsJaWYgKHZjbyA9PSA4NjQwMDAwKSB7 Cj4gKwkJaWYgKG1heF9waXhjbGsgPiA1NDAwMDApCj4gKwkJCXJldHVybiA2MTcxNDM7Cj4gKwkJ ZWxzZSBpZiAobWF4X3BpeGNsayA+IDQzMjAwMCkKPiArCQkJcmV0dXJuIDU0MDAwMDsKPiArCQll bHNlIGlmIChtYXhfcGl4Y2xrID4gMzA4NTcxKQo+ICsJCQlyZXR1cm4gNDMyMDAwOwo+ICsJCWVs c2UKPiArCQkJcmV0dXJuIDMwODU3MTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKG1heF9waXhjbGsg PiA1NDAwMDApCj4gKwkJCXJldHVybiA2NzUwMDA7Cj4gKwkJZWxzZSBpZiAobWF4X3BpeGNsayA+ IDQ1MDAwMCkKPiArCQkJcmV0dXJuIDU0MDAwMDsKPiArCQllbHNlIGlmIChtYXhfcGl4Y2xrID4g MzM3NTAwKQo+ICsJCQlyZXR1cm4gNDUwMDAwOwo+ICsJCWVsc2UKPiArCQkJcmV0dXJuIDMzNzUw MDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2tsX2RwbGwwX3VwZGF0ZShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJZGV2 X3ByaXYtPmNkY2xrX3BsbC5yZWYgPSAyNDAwMDsKPiArCWRldl9wcml2LT5jZGNsa19wbGwudmNv ID0gMDsKPiArCj4gKwl2YWwgPSBJOTE1X1JFQUQoTENQTEwxX0NUTCk7Cj4gKwlpZiAoKHZhbCAm IExDUExMX1BMTF9FTkFCTEUpID09IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChXQVJOX09O KCh2YWwgJiBMQ1BMTF9QTExfTE9DSykgPT0gMCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXZhbCA9 IEk5MTVfUkVBRChEUExMX0NUUkwxKTsKPiArCj4gKwlpZiAoV0FSTl9PTigodmFsICYgKERQTExf Q1RSTDFfSERNSV9NT0RFKFNLTF9EUExMMCkgfAo+ICsJCQnCoMKgwqDCoERQTExfQ1RSTDFfU1ND KFNLTF9EUExMMCkgfAo+ICsJCQnCoMKgwqDCoERQTExfQ1RSTDFfT1ZFUlJJREUoU0tMX0RQTEww KSkpICE9Cj4gKwkJwqDCoMKgwqBEUExMX0NUUkwxX09WRVJSSURFKFNLTF9EUExMMCkpKQo+ICsJ CXJldHVybjsKPiArCj4gKwlzd2l0Y2ggKHZhbCAmIERQTExfQ1RSTDFfTElOS19SQVRFX01BU0so U0tMX0RQTEwwKSkgewo+ICsJY2FzZSBEUExMX0NUUkwxX0xJTktfUkFURShEUExMX0NUUkwxX0xJ TktfUkFURV84MTAsIFNLTF9EUExMMCk6Cj4gKwljYXNlIERQTExfQ1RSTDFfTElOS19SQVRFKERQ TExfQ1RSTDFfTElOS19SQVRFXzEzNTAsIFNLTF9EUExMMCk6Cj4gKwljYXNlIERQTExfQ1RSTDFf TElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzE2MjAsIFNLTF9EUExMMCk6Cj4gKwljYXNl IERQTExfQ1RSTDFfTElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzI3MDAsIFNLTF9EUExM MCk6Cj4gKwkJZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPSA4MTAwMDAwOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBEUExMX0NUUkwxX0xJTktfUkFURShEUExMX0NUUkwxX0xJTktfUkFURV8xMDgwLCBT S0xfRFBMTDApOgo+ICsJY2FzZSBEUExMX0NUUkwxX0xJTktfUkFURShEUExMX0NUUkwxX0xJTktf UkFURV8yMTYwLCBTS0xfRFBMTDApOgo+ICsJCWRldl9wcml2LT5jZGNsa19wbGwudmNvID0gODY0 MDAwMDsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJTUlTU0lOR19DQVNFKHZhbCAmIERQ TExfQ1RSTDFfTElOS19SQVRFX01BU0soU0tMX0RQTEwwKSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgc2tsX2dldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXUzMiBjZGN0bDsKPiArCj4gKwlza2xfZHBsbDBfdXBkYXRl KGRldl9wcml2KTsKPiArCj4gKwlpZiAoZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPT0gMCkKPiAr CQlyZXR1cm4gZGV2X3ByaXYtPmNkY2xrX3BsbC5yZWY7Cj4gKwo+ICsJY2RjdGwgPSBJOTE1X1JF QUQoQ0RDTEtfQ1RMKTsKPiArCj4gKwlpZiAoZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPT0gODY0 MDAwMCkgewo+ICsJCXN3aXRjaCAoY2RjdGwgJiBDRENMS19GUkVRX1NFTF9NQVNLKSB7Cj4gKwkJ Y2FzZSBDRENMS19GUkVRXzQ1MF80MzI6Cj4gKwkJCXJldHVybiA0MzIwMDA7Cj4gKwkJY2FzZSBD RENMS19GUkVRXzMzN18zMDg6Cj4gKwkJCXJldHVybiAzMDg1NzE7Cj4gKwkJY2FzZSBDRENMS19G UkVRXzU0MDoKPiArCQkJcmV0dXJuIDU0MDAwMDsKPiArCQljYXNlIENEQ0xLX0ZSRVFfNjc1XzYx NzoKPiArCQkJcmV0dXJuIDYxNzE0MzsKPiArCQlkZWZhdWx0Ogo+ICsJCQlNSVNTSU5HX0NBU0Uo Y2RjdGwgJiBDRENMS19GUkVRX1NFTF9NQVNLKTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCXN3 aXRjaCAoY2RjdGwgJiBDRENMS19GUkVRX1NFTF9NQVNLKSB7Cj4gKwkJY2FzZSBDRENMS19GUkVR XzQ1MF80MzI6Cj4gKwkJCXJldHVybiA0NTAwMDA7Cj4gKwkJY2FzZSBDRENMS19GUkVRXzMzN18z MDg6Cj4gKwkJCXJldHVybiAzMzc1MDA7Cj4gKwkJY2FzZSBDRENMS19GUkVRXzU0MDoKPiArCQkJ cmV0dXJuIDU0MDAwMDsKPiArCQljYXNlIENEQ0xLX0ZSRVFfNjc1XzYxNzoKPiArCQkJcmV0dXJu IDY3NTAwMDsKPiArCQlkZWZhdWx0Ogo+ICsJCQlNSVNTSU5HX0NBU0UoY2RjdGwgJiBDRENMS19G UkVRX1NFTF9NQVNLKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGRldl9wcml2LT5jZGNs a19wbGwucmVmOwo+ICt9Cj4gKwo+ICsvKiBjb252ZXJ0IGZyb20ga0h6IHRvIC4xIGZpeHBvaW50 IE1IeiB3aXRoIC0xTUh6IG9mZnNldCAqLwo+ICtzdGF0aWMgaW50IHNrbF9jZGNsa19kZWNpbWFs KGludCBjZGNsaykKPiArewo+ICsJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGNkY2xrIC0gMTAw MCwgNTAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2tsX3NldF9wcmVmZXJyZWRfY2RjbGtf dmNvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCQlpbnQgdmNvKQo+ ICt7Cj4gKwlib29sIGNoYW5nZWQgPSBkZXZfcHJpdi0+c2tsX3ByZWZlcnJlZF92Y29fZnJlcSAh PSB2Y287Cj4gKwo+ICsJZGV2X3ByaXYtPnNrbF9wcmVmZXJyZWRfdmNvX2ZyZXEgPSB2Y287Cj4g Kwo+ICsJaWYgKGNoYW5nZWQpCj4gKwkJaW50ZWxfdXBkYXRlX21heF9jZGNsayhkZXZfcHJpdik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNrbF9kcGxsMF9lbmFibGUoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmNvKQo+ICt7Cj4gKwlpbnQgbWluX2NkY2xrID0gc2ts X2NhbGNfY2RjbGsoMCwgdmNvKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJV0FSTl9PTih2Y28gIT0g ODEwMDAwMCAmJiB2Y28gIT0gODY0MDAwMCk7Cj4gKwo+ICsJLyogc2VsZWN0IHRoZSBtaW5pbXVt IENEQ0xLIGJlZm9yZSBlbmFibGluZyBEUExMIDAgKi8KPiArCXZhbCA9IENEQ0xLX0ZSRVFfMzM3 XzMwOCB8IHNrbF9jZGNsa19kZWNpbWFsKG1pbl9jZGNsayk7Cj4gKwlJOTE1X1dSSVRFKENEQ0xL X0NUTCwgdmFsKTsKPiArCVBPU1RJTkdfUkVBRChDRENMS19DVEwpOwo+ICsKPiArCS8qCj4gKwnC oCogV2UgYWx3YXlzIGVuYWJsZSBEUExMMCB3aXRoIHRoZSBsb3dlc3QgbGluayByYXRlIHBvc3Np YmxlLCBidXQKPiBzdGlsbAo+ICsJwqAqIHRha2luZyBpbnRvIGFjY291bnQgdGhlIFZDTyByZXF1 aXJlZCB0byBvcGVyYXRlIHRoZSBlRFAgcGFuZWwgYXQKPiB0aGUKPiArCcKgKiBkZXNpcmVkIGZy ZXF1ZW5jeS4gVGhlIHVzdWFsIERQIGxpbmsgcmF0ZXMgb3BlcmF0ZSB3aXRoIGEgVkNPIG9mCj4g KwnCoCogODEwMCB3aGlsZSB0aGUgZURQIDEuNCBhbHRlcm5hdGUgbGluayByYXRlcyBuZWVkIGEg VkNPIG9mIDg2NDAuCj4gKwnCoCogVGhlIG1vZGVzZXQgY29kZSBpcyByZXNwb25zaWJsZSBmb3Ig dGhlIHNlbGVjdGlvbiBvZiB0aGUgZXhhY3QKPiBsaW5rCj4gKwnCoCogcmF0ZSBsYXRlciBvbiwg d2l0aCB0aGUgY29uc3RyYWludCBvZiBjaG9vc2luZyBhIGZyZXF1ZW5jeSB0aGF0Cj4gKwnCoCog d29ya3Mgd2l0aCB2Y28uCj4gKwnCoCovCj4gKwl2YWwgPSBJOTE1X1JFQUQoRFBMTF9DVFJMMSk7 Cj4gKwo+ICsJdmFsICY9IH4oRFBMTF9DVFJMMV9IRE1JX01PREUoU0tMX0RQTEwwKSB8IERQTExf Q1RSTDFfU1NDKFNLTF9EUExMMCkKPiB8Cj4gKwkJwqBEUExMX0NUUkwxX0xJTktfUkFURV9NQVNL KFNLTF9EUExMMCkpOwo+ICsJdmFsIHw9IERQTExfQ1RSTDFfT1ZFUlJJREUoU0tMX0RQTEwwKTsK PiArCWlmICh2Y28gPT0gODY0MDAwMCkKPiArCQl2YWwgfD0gRFBMTF9DVFJMMV9MSU5LX1JBVEUo RFBMTF9DVFJMMV9MSU5LX1JBVEVfMTA4MCwKPiArCQkJCQnCoMKgwqDCoFNLTF9EUExMMCk7Cj4g KwllbHNlCj4gKwkJdmFsIHw9IERQTExfQ1RSTDFfTElOS19SQVRFKERQTExfQ1RSTDFfTElOS19S QVRFXzgxMCwKPiArCQkJCQnCoMKgwqDCoFNLTF9EUExMMCk7Cj4gKwo+ICsJSTkxNV9XUklURShE UExMX0NUUkwxLCB2YWwpOwo+ICsJUE9TVElOR19SRUFEKERQTExfQ1RSTDEpOwo+ICsKPiArCUk5 MTVfV1JJVEUoTENQTEwxX0NUTCwgSTkxNV9SRUFEKExDUExMMV9DVEwpIHwgTENQTExfUExMX0VO QUJMRSk7Cj4gKwo+ICsJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LAo+ICsJ CQkJwqDCoMKgwqBMQ1BMTDFfQ1RMLCBMQ1BMTF9QTExfTE9DSywKPiBMQ1BMTF9QTExfTE9DSywK PiArCQkJCcKgwqDCoMKgNSkpCj4gKwkJRFJNX0VSUk9SKCJEUExMMCBub3QgbG9ja2VkXG4iKTsK PiArCj4gKwlkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyA9IHZjbzsKPiArCj4gKwkvKiBXZSdsbCB3 YW50IHRvIGtlZXAgdXNpbmcgdGhlIGN1cnJlbnQgdmNvIGZyb20gbm93IG9uLiAqLwo+ICsJc2ts X3NldF9wcmVmZXJyZWRfY2RjbGtfdmNvKGRldl9wcml2LCB2Y28pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBza2xfZHBsbDBfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCUk5MTVfV1JJVEUoTENQTEwxX0NUTCwgSTkxNV9SRUFEKExDUExMMV9DVEwp ICYgfkxDUExMX1BMTF9FTkFCTEUpOwo+ICsJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRl dl9wcml2LAo+ICsJCQkJwqDCoMKgTENQTEwxX0NUTCwgTENQTExfUExMX0xPQ0ssIDAsCj4gKwkJ CQnCoMKgwqAxKSkKPiArCQlEUk1fRVJST1IoIkNvdWxkbid0IGRpc2FibGUgRFBMTDBcbiIpOwo+ ICsKPiArCWRldl9wcml2LT5jZGNsa19wbGwudmNvID0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc2tsX3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gKwkJ CcKgwqBpbnQgY2RjbGssIGludCB2Y28pCj4gK3sKPiArCXUzMiBmcmVxX3NlbGVjdCwgcGN1X2Fj azsKPiArCWludCByZXQ7Cj4gKwo+ICsJV0FSTl9PTigoY2RjbGsgPT0gMjQwMDApICE9ICh2Y28g PT0gMCkpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkNoYW5naW5nIENEQ0xLIHRvICVkIGtI eiAoVkNPICVkIGtIeilcbiIsCj4gKwkJCcKgY2RjbGssIHZjbyk7Cj4gKwo+ICsJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiArCXJldCA9IHNrbF9wY29kZV9yZXF1ZXN0KGRl dl9wcml2LCBTS0xfUENPREVfQ0RDTEtfQ09OVFJPTCwKPiArCQkJCVNLTF9DRENMS19QUkVQQVJF X0ZPUl9DSEFOR0UsCj4gKwkJCQlTS0xfQ0RDTEtfUkVBRFlfRk9SX0NIQU5HRSwKPiArCQkJCVNL TF9DRENMS19SRUFEWV9GT1JfQ0hBTkdFLCAzKTsKPiArCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PnJwcy5od19sb2NrKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBp bmZvcm0gUENVIGFib3V0IGNkY2xrIGNoYW5nZSAoJWQpXG4iLAo+ICsJCQnCoMKgcmV0KTsKPiAr CQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJLyogc2V0IENEQ0xLX0NUTCAqLwo+ICsJc3dpdGNoIChj ZGNsaykgewo+ICsJY2FzZSA0NTAwMDA6Cj4gKwljYXNlIDQzMjAwMDoKPiArCQlmcmVxX3NlbGVj dCA9IENEQ0xLX0ZSRVFfNDUwXzQzMjsKPiArCQlwY3VfYWNrID0gMTsKPiArCQlicmVhazsKPiAr CWNhc2UgNTQwMDAwOgo+ICsJCWZyZXFfc2VsZWN0ID0gQ0RDTEtfRlJFUV81NDA7Cj4gKwkJcGN1 X2FjayA9IDI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDMwODU3MToKPiArCWNhc2UgMzM3NTAwOgo+ ICsJZGVmYXVsdDoKPiArCQlmcmVxX3NlbGVjdCA9IENEQ0xLX0ZSRVFfMzM3XzMwODsKPiArCQlw Y3VfYWNrID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgNjE3MTQzOgo+ICsJY2FzZSA2NzUwMDA6 Cj4gKwkJZnJlcV9zZWxlY3QgPSBDRENMS19GUkVRXzY3NV82MTc7Cj4gKwkJcGN1X2FjayA9IDM7 Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRldl9wcml2LT5jZGNsa19wbGwudmNvICE9 IDAgJiYKPiArCcKgwqDCoMKgZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gIT0gdmNvKQo+ICsJCXNr bF9kcGxsMF9kaXNhYmxlKGRldl9wcml2KTsKPiArCj4gKwlpZiAoZGV2X3ByaXYtPmNkY2xrX3Bs bC52Y28gIT0gdmNvKQo+ICsJCXNrbF9kcGxsMF9lbmFibGUoZGV2X3ByaXYsIHZjbyk7Cj4gKwo+ ICsJSTkxNV9XUklURShDRENMS19DVEwsIGZyZXFfc2VsZWN0IHwgc2tsX2NkY2xrX2RlY2ltYWwo Y2RjbGspKTsKPiArCVBPU1RJTkdfUkVBRChDRENMS19DVEwpOwo+ICsKPiArCS8qIGluZm9ybSBQ Q1Ugb2YgdGhlIGNoYW5nZSAqLwo+ICsJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2Nr KTsKPiArCXNhbmR5YnJpZGdlX3Bjb2RlX3dyaXRlKGRldl9wcml2LCBTS0xfUENPREVfQ0RDTEtf Q09OVFJPTCwgcGN1X2Fjayk7Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9j ayk7Cj4gKwo+ICsJaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgc2tsX3Nhbml0aXplX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJdWludDMyX3QgY2RjdGwsIGV4cGVjdGVkOwo+ICsKPiArCS8qCj4gKwnC oCogY2hlY2sgaWYgdGhlIHByZS1vcyBpbml0aWFsaXplZCB0aGUgZGlzcGxheQo+ICsJwqAqIFRo ZXJlIGlzIFNXRjE4IHNjcmF0Y2hwYWQgcmVnaXN0ZXIgZGVmaW5lZCB3aGljaCBpcyBzZXQgYnkg dGhlCj4gKwnCoCogcHJlLW9zIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSBPUyBkcml2ZXJzIHRv IGNoZWNrIHRoZSBzdGF0dXMKPiArCcKgKi8KPiArCWlmICgoSTkxNV9SRUFEKFNXRl9JTEsoMHgx OCkpICYgMHgwMEZGRkZGRikgPT0gMCkKPiArCQlnb3RvIHNhbml0aXplOwo+ICsKPiArCWludGVs X3VwZGF0ZV9jZGNsayhkZXZfcHJpdik7Cj4gKwkvKiBJcyBQTEwgZW5hYmxlZCBhbmQgbG9ja2Vk ID8gKi8KPiArCWlmIChkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyA9PSAwIHx8Cj4gKwnCoMKgwqDC oGRldl9wcml2LT5jZGNsa19mcmVxID09IGRldl9wcml2LT5jZGNsa19wbGwucmVmKQo+ICsJCWdv dG8gc2FuaXRpemU7Cj4gKwo+ICsJLyogRFBMTCBva2F5OyB2ZXJpZnkgdGhlIGNkY2xvY2sKPiAr CcKgKgo+ICsJwqAqIE5vdGljZWQgaW4gc29tZSBpbnN0YW5jZXMgdGhhdCB0aGUgZnJlcSBzZWxl Y3Rpb24gaXMgY29ycmVjdCBidXQKPiArCcKgKiBkZWNpbWFsIHBhcnQgaXMgcHJvZ3JhbW1lZCB3 cm9uZyBmcm9tIEJJT1Mgd2hlcmUgcHJlLW9zIGRvZXMgbm90Cj4gKwnCoCogZW5hYmxlIGRpc3Bs YXkuIFZlcmlmeSB0aGUgc2FtZSBhcyB3ZWxsLgo+ICsJwqAqLwo+ICsJY2RjdGwgPSBJOTE1X1JF QUQoQ0RDTEtfQ1RMKTsKPiArCWV4cGVjdGVkID0gKGNkY3RsICYgQ0RDTEtfRlJFUV9TRUxfTUFT SykgfAo+ICsJCXNrbF9jZGNsa19kZWNpbWFsKGRldl9wcml2LT5jZGNsa19mcmVxKTsKPiArCWlm IChjZGN0bCA9PSBleHBlY3RlZCkKPiArCQkvKiBBbGwgd2VsbDsgbm90aGluZyB0byBzYW5pdGl6 ZSAqLwo+ICsJCXJldHVybjsKPiArCj4gK3Nhbml0aXplOgo+ICsJRFJNX0RFQlVHX0tNUygiU2Fu aXRpemluZyBjZGNsayBwcm9ncmFtbWVkIGJ5IHByZS1vc1xuIik7Cj4gKwo+ICsJLyogZm9yY2Ug Y2RjbGsgcHJvZ3JhbW1pbmcgKi8KPiArCWRldl9wcml2LT5jZGNsa19mcmVxID0gMDsKPiArCS8q IGZvcmNlIGZ1bGwgUExMIGRpc2FibGUgKyBlbmFibGUgKi8KPiArCWRldl9wcml2LT5jZGNsa19w bGwudmNvID0gLTE7Cj4gK30KPiArCj4gK3ZvaWQgc2tsX3VuaW5pdF9jZGNsayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXNrbF9zZXRfY2RjbGsoZGV2X3ByaXYs IGRldl9wcml2LT5jZGNsa19wbGwucmVmLCAwKTsKPiArfQo+ICsKPiArdm9pZCBza2xfaW5pdF9j ZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWludCBjZGNs aywgdmNvOwo+ICsKPiArCXNrbF9zYW5pdGl6ZV9jZGNsayhkZXZfcHJpdik7Cj4gKwo+ICsJaWYg KGRldl9wcml2LT5jZGNsa19mcmVxICE9IDAgJiYgZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gIT0g MCkgewo+ICsJCS8qCj4gKwkJwqAqIFVzZSB0aGUgY3VycmVudCB2Y28gYXMgb3VyIGluaXRpYWwK PiArCQnCoCogZ3Vlc3MgYXMgdG8gd2hhdCB0aGUgcHJlZmVycmVkIHZjbyBpcy4KPiArCQnCoCov Cj4gKwkJaWYgKGRldl9wcml2LT5za2xfcHJlZmVycmVkX3Zjb19mcmVxID09IDApCj4gKwkJCXNr bF9zZXRfcHJlZmVycmVkX2NkY2xrX3ZjbyhkZXZfcHJpdiwKPiArCQkJCQkJwqDCoMKgwqBkZXZf cHJpdi0+Y2RjbGtfcGxsLnZjbyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXZjbyA9IGRl dl9wcml2LT5za2xfcHJlZmVycmVkX3Zjb19mcmVxOwo+ICsJaWYgKHZjbyA9PSAwKQo+ICsJCXZj byA9IDgxMDAwMDA7Cj4gKwljZGNsayA9IHNrbF9jYWxjX2NkY2xrKDAsIHZjbyk7Cj4gKwo+ICsJ c2tsX3NldF9jZGNsayhkZXZfcHJpdiwgY2RjbGssIHZjbyk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgYnh0X2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGspCj4gK3sKPiArCWlmIChtYXhfcGl4Y2xr ID4gNTc2MDAwKQo+ICsJCXJldHVybiA2MjQwMDA7Cj4gKwllbHNlIGlmIChtYXhfcGl4Y2xrID4g Mzg0MDAwKQo+ICsJCXJldHVybiA1NzYwMDA7Cj4gKwllbHNlIGlmIChtYXhfcGl4Y2xrID4gMjg4 MDAwKQo+ICsJCXJldHVybiAzODQwMDA7Cj4gKwllbHNlIGlmIChtYXhfcGl4Y2xrID4gMTQ0MDAw KQo+ICsJCXJldHVybiAyODgwMDA7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIDE0NDAwMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBnbGtfY2FsY19jZGNsayhpbnQgbWF4X3BpeGNsaykKPiArewo+ICsJ aWYgKG1heF9waXhjbGsgPiAyICogMTU4NDAwKQo+ICsJCXJldHVybiAzMTY4MDA7Cj4gKwllbHNl IGlmIChtYXhfcGl4Y2xrID4gMiAqIDc5MjAwKQo+ICsJCXJldHVybiAxNTg0MDA7Cj4gKwllbHNl Cj4gKwkJcmV0dXJuIDc5MjAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJ4dF9kZV9wbGxfdmNv KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IGNkY2xrKQo+ICt7Cj4gKwlp bnQgcmF0aW87Cj4gKwo+ICsJaWYgKGNkY2xrID09IGRldl9wcml2LT5jZGNsa19wbGwucmVmKQo+ ICsJCXJldHVybiAwOwo+ICsKPiArCXN3aXRjaCAoY2RjbGspIHsKPiArCWRlZmF1bHQ6Cj4gKwkJ TUlTU0lOR19DQVNFKGNkY2xrKTsKPiArCWNhc2UgMTQ0MDAwOgo+ICsJY2FzZSAyODgwMDA6Cj4g KwljYXNlIDM4NDAwMDoKPiArCWNhc2UgNTc2MDAwOgo+ICsJCXJhdGlvID0gNjA7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIDYyNDAwMDoKPiArCQlyYXRpbyA9IDY1Owo+ICsJCWJyZWFrOwo+ICsJfQo+ ICsKPiArCXJldHVybiBkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZiAqIHJhdGlvOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGdsa19kZV9wbGxfdmNvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgaW50IGNkY2xrKQo+ICt7Cj4gKwlpbnQgcmF0aW87Cj4gKwo+ICsJaWYgKGNkY2xrID09 IGRldl9wcml2LT5jZGNsa19wbGwucmVmKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXN3aXRjaCAo Y2RjbGspIHsKPiArCWRlZmF1bHQ6Cj4gKwkJTUlTU0lOR19DQVNFKGNkY2xrKTsKPiArCWNhc2XC oMKgNzkyMDA6Cj4gKwljYXNlIDE1ODQwMDoKPiArCWNhc2UgMzE2ODAwOgo+ICsJCXJhdGlvID0g MzM7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGRldl9wcml2LT5jZGNsa19wbGwu cmVmICogcmF0aW87Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ4dF9kZV9wbGxfdXBkYXRlKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJdTMyIHZhbDsKPiArCj4g KwlkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZiA9IDE5MjAwOwo+ICsJZGV2X3ByaXYtPmNkY2xrX3Bs bC52Y28gPSAwOwo+ICsKPiArCXZhbCA9IEk5MTVfUkVBRChCWFRfREVfUExMX0VOQUJMRSk7Cj4g KwlpZiAoKHZhbCAmIEJYVF9ERV9QTExfUExMX0VOQUJMRSkgPT0gMCkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJaWYgKFdBUk5fT04oKHZhbCAmIEJYVF9ERV9QTExfTE9DSykgPT0gMCkpCj4gKwkJcmV0 dXJuOwo+ICsKPiArCXZhbCA9IEk5MTVfUkVBRChCWFRfREVfUExMX0NUTCk7Cj4gKwlkZXZfcHJp di0+Y2RjbGtfcGxsLnZjbyA9ICh2YWwgJiBCWFRfREVfUExMX1JBVElPX01BU0spICoKPiArCQlk ZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZjsKPiArfQo+ICsKPiArc3RhdGljIGludCBieHRfZ2V0X2Nk Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJdTMyIGRpdmlk ZXI7Cj4gKwlpbnQgZGl2LCB2Y287Cj4gKwo+ICsJYnh0X2RlX3BsbF91cGRhdGUoZGV2X3ByaXYp Owo+ICsKPiArCXZjbyA9IGRldl9wcml2LT5jZGNsa19wbGwudmNvOwo+ICsJaWYgKHZjbyA9PSAw KQo+ICsJCXJldHVybiBkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZjsKPiArCj4gKwlkaXZpZGVyID0g STkxNV9SRUFEKENEQ0xLX0NUTCkgJiBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VMX01BU0s7Cj4gKwo+ ICsJc3dpdGNoIChkaXZpZGVyKSB7Cj4gKwljYXNlIEJYVF9DRENMS19DRDJYX0RJVl9TRUxfMToK PiArCQlkaXYgPSAyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VM XzFfNToKPiArCQlXQVJOKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpLCAiVW5zdXBwb3J0ZWQgZGl2 aWRlclxuIik7Cj4gKwkJZGl2ID0gMzsKPiArCQlicmVhazsKPiArCWNhc2UgQlhUX0NEQ0xLX0NE MlhfRElWX1NFTF8yOgo+ICsJCWRpdiA9IDQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJYVF9DRENM S19DRDJYX0RJVl9TRUxfNDoKPiArCQlkaXYgPSA4Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoK PiArCQlNSVNTSU5HX0NBU0UoZGl2aWRlcik7Cj4gKwkJcmV0dXJuIGRldl9wcml2LT5jZGNsa19w bGwucmVmOwo+ICsJfQo+ICsKPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2Y28sIGRpdik7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJ4dF9kZV9wbGxfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCUk5MTVfV1JJVEUoQlhUX0RFX1BMTF9FTkFC TEUsIDApOwo+ICsKPiArCS8qIFRpbWVvdXQgMjAwdXMgKi8KPiArCWlmIChpbnRlbF93YWl0X2Zv cl9yZWdpc3RlcihkZXZfcHJpdiwKPiArCQkJCcKgwqDCoMKgQlhUX0RFX1BMTF9FTkFCTEUsIEJY VF9ERV9QTExfTE9DSywgMCwKPiArCQkJCcKgwqDCoMKgMSkpCj4gKwkJRFJNX0VSUk9SKCJ0aW1l b3V0IHdhaXRpbmcgZm9yIERFIFBMTCB1bmxvY2tcbiIpOwo+ICsKPiArCWRldl9wcml2LT5jZGNs a19wbGwudmNvID0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYnh0X2RlX3BsbF9lbmFibGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgdmNvKQo+ICt7Cj4gKwlpbnQg cmF0aW8gPSBESVZfUk9VTkRfQ0xPU0VTVCh2Y28sIGRldl9wcml2LT5jZGNsa19wbGwucmVmKTsK PiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gSTkxNV9SRUFEKEJYVF9ERV9QTExfQ1RMKTsKPiAr CXZhbCAmPSB+QlhUX0RFX1BMTF9SQVRJT19NQVNLOwo+ICsJdmFsIHw9IEJYVF9ERV9QTExfUkFU SU8ocmF0aW8pOwo+ICsJSTkxNV9XUklURShCWFRfREVfUExMX0NUTCwgdmFsKTsKPiArCj4gKwlJ OTE1X1dSSVRFKEJYVF9ERV9QTExfRU5BQkxFLCBCWFRfREVfUExMX1BMTF9FTkFCTEUpOwo+ICsK PiArCS8qIFRpbWVvdXQgMjAwdXMgKi8KPiArCWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcihk ZXZfcHJpdiwKPiArCQkJCcKgwqDCoMKgQlhUX0RFX1BMTF9FTkFCTEUsCj4gKwkJCQnCoMKgwqDC oEJYVF9ERV9QTExfTE9DSywKPiArCQkJCcKgwqDCoMKgQlhUX0RFX1BMTF9MT0NLLAo+ICsJCQkJ wqDCoMKgwqAxKSkKPiArCQlEUk1fRVJST1IoInRpbWVvdXQgd2FpdGluZyBmb3IgREUgUExMIGxv Y2tcbiIpOwo+ICsKPiArCWRldl9wcml2LT5jZGNsa19wbGwudmNvID0gdmNvOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBieHRfc2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwgaW50IGNkY2xrKQo+ICt7Cj4gKwl1MzIgdmFsLCBkaXZpZGVyOwo+ICsJaW50IHZjbywg cmV0Owo+ICsKPiArCWlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkKPiArCQl2Y28gPSBnbGtf ZGVfcGxsX3ZjbyhkZXZfcHJpdiwgY2RjbGspOwo+ICsJZWxzZQo+ICsJCXZjbyA9IGJ4dF9kZV9w bGxfdmNvKGRldl9wcml2LCBjZGNsayk7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiQ2hhbmdp bmcgQ0RDTEsgdG8gJWQga0h6IChWQ08gJWQga0h6KVxuIiwKPiArCQkJwqBjZGNsaywgdmNvKTsK PiArCj4gKwkvKiBjZGNsayA9IHZjbyAvIDIgLyBkaXZ7MSwxLjUsMiw0fSAqLwo+ICsJc3dpdGNo IChESVZfUk9VTkRfQ0xPU0VTVCh2Y28sIGNkY2xrKSkgewo+ICsJY2FzZSA4Ogo+ICsJCWRpdmlk ZXIgPSBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VMXzQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDQ6Cj4g KwkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJYX0RJVl9TRUxfMjsKPiArCQlicmVhazsKPiArCWNh c2UgMzoKPiArCQlXQVJOKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpLCAiVW5zdXBwb3J0ZWQgZGl2 aWRlclxuIik7Cj4gKwkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJYX0RJVl9TRUxfMV81Owo+ICsJ CWJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJCWRpdmlkZXIgPSBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VM XzE7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCVdBUk5fT04oY2RjbGsgIT0gZGV2X3By aXYtPmNkY2xrX3BsbC5yZWYpOwo+ICsJCVdBUk5fT04odmNvICE9IDApOwo+ICsKPiArCQlkaXZp ZGVyID0gQlhUX0NEQ0xLX0NEMlhfRElWX1NFTF8xOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiAr CS8qIEluZm9ybSBwb3dlciBjb250cm9sbGVyIG9mIHVwY29taW5nIGZyZXF1ZW5jeSBjaGFuZ2Ug Ki8KPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gKwlyZXQgPSBzYW5k eWJyaWRnZV9wY29kZV93cml0ZShkZXZfcHJpdiwgSFNXX1BDT0RFX0RFX1dSSVRFX0ZSRVFfUkVR LAo+ICsJCQkJwqDCoMKgwqDCoMKgMHg4MDAwMDAwMCk7Cj4gKwltdXRleF91bmxvY2soJmRldl9w cml2LT5ycHMuaHdfbG9jayk7Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiUENv ZGUgQ0RDTEsgZnJlcSBjaGFuZ2Ugbm90aWZ5IGZhaWxlZCAoZXJyICVkLAo+IGZyZXEgJWQpXG4i LAo+ICsJCQnCoMKgcmV0LCBjZGNsayk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmIChk ZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSAwICYmCj4gKwnCoMKgwqDCoGRldl9wcml2LT5jZGNs a19wbGwudmNvICE9IHZjbykKPiArCQlieHRfZGVfcGxsX2Rpc2FibGUoZGV2X3ByaXYpOwo+ICsK PiArCWlmIChkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSB2Y28pCj4gKwkJYnh0X2RlX3BsbF9l bmFibGUoZGV2X3ByaXYsIHZjbyk7Cj4gKwo+ICsJdmFsID0gZGl2aWRlciB8IHNrbF9jZGNsa19k ZWNpbWFsKGNkY2xrKTsKPiArCS8qCj4gKwnCoCogRklYTUUgaWYgb25seSB0aGUgY2QyeCBkaXZp ZGVyIG5lZWRzIGNoYW5naW5nLCBpdCBjb3VsZCBiZSBkb25lCj4gKwnCoCogd2l0aG91dCBzaHV0 dGluZyBvZmYgdGhlIHBpcGUgKGlmIG9ubHkgb25lIHBpcGUgaXMgYWN0aXZlKS4KPiArCcKgKi8K PiArCXZhbCB8PSBCWFRfQ0RDTEtfQ0QyWF9QSVBFX05PTkU7Cj4gKwkvKgo+ICsJwqAqIERpc2Fi bGUgU1NBIFByZWNoYXJnZSB3aGVuIENEIGNsb2NrIGZyZXF1ZW5jeSA8IDUwMCBNSHosCj4gKwnC oCogZW5hYmxlIG90aGVyd2lzZS4KPiArCcKgKi8KPiArCWlmIChjZGNsayA+PSA1MDAwMDApCj4g KwkJdmFsIHw9IEJYVF9DRENMS19TU0FfUFJFQ0hBUkdFX0VOQUJMRTsKPiArCUk5MTVfV1JJVEUo Q0RDTEtfQ1RMLCB2YWwpOwo+ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9j ayk7Cj4gKwlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV93cml0ZShkZXZfcHJpdiwgSFNXX1BDT0RF X0RFX1dSSVRFX0ZSRVFfUkVRLAo+ICsJCQkJwqDCoMKgwqDCoMKgRElWX1JPVU5EX1VQKGNkY2xr LCAyNTAwMCkpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+ICsK PiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIlBDb2RlIENEQ0xLIGZyZXEgc2V0IGZhaWxl ZCwgKGVyciAlZCwgZnJlcSAlZClcbiIsCj4gKwkJCcKgwqByZXQsIGNkY2xrKTsKPiArCQlyZXR1 cm47Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgYnh0X3Nhbml0aXplX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKPiArewo+ICsJdTMyIGNkY3RsLCBleHBlY3RlZDsKPiArCj4gKwlpbnRlbF91 cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+ICsKPiArCWlmIChkZXZfcHJpdi0+Y2RjbGtfcGxsLnZj byA9PSAwIHx8Cj4gKwnCoMKgwqDCoGRldl9wcml2LT5jZGNsa19mcmVxID09IGRldl9wcml2LT5j ZGNsa19wbGwucmVmKQo+ICsJCWdvdG8gc2FuaXRpemU7Cj4gKwo+ICsJLyogRFBMTCBva2F5OyB2 ZXJpZnkgdGhlIGNkY2xvY2sKPiArCcKgKgo+ICsJwqAqIFNvbWUgQklPUyB2ZXJzaW9ucyBsZWF2 ZSBhbiBpbmNvcnJlY3QgZGVjaW1hbCBmcmVxdWVuY3kgdmFsdWUgYW5kCj4gKwnCoCogc2V0IHJl c2VydmVkIE1CWiBiaXRzIGluIENEQ0xLX0NUTCBhdCBsZWFzdCBkdXJpbmcgZXhpdGluZyBmcm9t Cj4gUzQsCj4gKwnCoCogc28gc2FuaXRpemUgdGhpcyByZWdpc3Rlci4KPiArCcKgKi8KPiArCWNk Y3RsID0gSTkxNV9SRUFEKENEQ0xLX0NUTCk7Cj4gKwkvKgo+ICsJwqAqIExldCdzIGlnbm9yZSB0 aGUgcGlwZSBmaWVsZCwgc2luY2UgQklPUyBjb3VsZCBoYXZlIGNvbmZpZ3VyZWQgdGhlCj4gKwnC oCogZGl2aWRlcnMgYm90aCBzeW5jaGluZyB0byBhbiBhY3RpdmUgcGlwZSwgb3IgYXN5bmNocm9u b3VzbHkKPiArCcKgKiAoUElQRV9OT05FKS4KPiArCcKgKi8KPiArCWNkY3RsICY9IH5CWFRfQ0RD TEtfQ0QyWF9QSVBFX05PTkU7Cj4gKwo+ICsJZXhwZWN0ZWQgPSAoY2RjdGwgJiBCWFRfQ0RDTEtf Q0QyWF9ESVZfU0VMX01BU0spIHwKPiArCQnCoMKgwqBza2xfY2RjbGtfZGVjaW1hbChkZXZfcHJp di0+Y2RjbGtfZnJlcSk7Cj4gKwkvKgo+ICsJwqAqIERpc2FibGUgU1NBIFByZWNoYXJnZSB3aGVu IENEIGNsb2NrIGZyZXF1ZW5jeSA8IDUwMCBNSHosCj4gKwnCoCogZW5hYmxlIG90aGVyd2lzZS4K PiArCcKgKi8KPiArCWlmIChkZXZfcHJpdi0+Y2RjbGtfZnJlcSA+PSA1MDAwMDApCj4gKwkJZXhw ZWN0ZWQgfD0gQlhUX0NEQ0xLX1NTQV9QUkVDSEFSR0VfRU5BQkxFOwo+ICsKPiArCWlmIChjZGN0 bCA9PSBleHBlY3RlZCkKPiArCQkvKiBBbGwgd2VsbDsgbm90aGluZyB0byBzYW5pdGl6ZSAqLwo+ ICsJCXJldHVybjsKPiArCj4gK3Nhbml0aXplOgo+ICsJRFJNX0RFQlVHX0tNUygiU2FuaXRpemlu ZyBjZGNsayBwcm9ncmFtbWVkIGJ5IHByZS1vc1xuIik7Cj4gKwo+ICsJLyogZm9yY2UgY2RjbGsg cHJvZ3JhbW1pbmcgKi8KPiArCWRldl9wcml2LT5jZGNsa19mcmVxID0gMDsKPiArCj4gKwkvKiBm b3JjZSBmdWxsIFBMTCBkaXNhYmxlICsgZW5hYmxlICovCj4gKwlkZXZfcHJpdi0+Y2RjbGtfcGxs LnZjbyA9IC0xOwo+ICt9Cj4gKwo+ICt2b2lkIGJ4dF9pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaW50IGNkY2xrOwo+ICsKPiArCWJ4dF9zYW5p dGl6ZV9jZGNsayhkZXZfcHJpdik7Cj4gKwo+ICsJaWYgKGRldl9wcml2LT5jZGNsa19mcmVxICE9 IDAgJiYgZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gIT0gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ LyoKPiArCcKgKiBGSVhNRToKPiArCcKgKiAtIFRoZSBpbml0aWFsIENEQ0xLIG5lZWRzIHRvIGJl IHJlYWQgZnJvbSBWQlQuCj4gKwnCoCrCoMKgwqBOZWVkIHRvIG1ha2UgdGhpcyBjaGFuZ2UgYWZ0 ZXIgVkJUIGhhcyBjaGFuZ2VzIGZvciBCWFQuCj4gKwnCoCovCj4gKwlpZiAoSVNfR0VNSU5JTEFL RShkZXZfcHJpdikpCj4gKwkJY2RjbGsgPSBnbGtfY2FsY19jZGNsaygwKTsKPiArCWVsc2UKPiAr CQljZGNsayA9IGJ4dF9jYWxjX2NkY2xrKDApOwo+ICsKPiArCWJ4dF9zZXRfY2RjbGsoZGV2X3By aXYsIGNkY2xrKTsKPiArfQo+ICsKPiArdm9pZCBieHRfdW5pbml0X2NkY2xrKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJYnh0X3NldF9jZGNsayhkZXZfcHJpdiwg ZGV2X3ByaXYtPmNkY2xrX3BsbC5yZWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJkd19hZGp1 c3RfbWluX3BpcGVfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ICpjcnRjX3N0 YXRlLAo+ICsJCQkJCcKgwqBpbnQgcGl4ZWxfcmF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0KPiArCQl0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0Yy0+ ZGV2KTsKPiArCj4gKwkvKiBwaXhlbCByYXRlIG11c3RuJ3QgZXhjZWVkIDk1JSBvZiBjZGNsayB3 aXRoIElQUyBvbiBCRFcgKi8KPiArCWlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpICYmIGNydGNf c3RhdGUtPmlwc19lbmFibGVkKQo+ICsJCXBpeGVsX3JhdGUgPSBESVZfUk9VTkRfVVAocGl4ZWxf cmF0ZSAqIDEwMCwgOTUpOwo+ICsKPiArCS8qIEJTcGVjIHNheXMgIkRvIG5vdCB1c2UgRGlzcGxh eVBvcnQgd2l0aCBDRENMSyBsZXNzIHRoYW4KPiArCcKgKiA0MzIgTUh6LCBhdWRpbyBlbmFibGVk LCBwb3J0IHdpZHRoIHg0LCBhbmQgbGluayByYXRlCj4gKwnCoCogSEJSMiAoNS40IEdIeiksIG9y IGVsc2UgdGhlcmUgbWF5IGJlIGF1ZGlvIGNvcnJ1cHRpb24gb3IKPiArCcKgKiBzY3JlZW4gY29y cnVwdGlvbi4iCj4gKwnCoCovCj4gKwlpZiAoaW50ZWxfY3J0Y19oYXNfZHBfZW5jb2RlcihjcnRj X3N0YXRlKSAmJgo+ICsJwqDCoMKgwqBjcnRjX3N0YXRlLT5oYXNfYXVkaW8gJiYKPiArCcKgwqDC oMKgY3J0Y19zdGF0ZS0+cG9ydF9jbG9jayA+PSA1NDAwMDAgJiYKPiArCcKgwqDCoMKgY3J0Y19z dGF0ZS0+bGFuZV9jb3VudCA9PSA0KQo+ICsJCXBpeGVsX3JhdGUgPSBtYXgoNDMyMDAwLCBwaXhl bF9yYXRlKTsKPiArCj4gKwlyZXR1cm4gcGl4ZWxfcmF0ZTsKPiArfQo+ICsKPiArLyogY29tcHV0 ZSB0aGUgbWF4IHJhdGUgZm9yIG5ldyBjb25maWd1cmF0aW9uICovCj4gK3N0YXRpYyBpbnQgaW50 ZWxfbWF4X3BpeGVsX3JhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4g KwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gdG9faW50ZWxfYXRv bWljX3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoc3RhdGUtPmRldik7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gKwlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+ICsJdW5zaWduZWQgaW50IG1heF9waXhlbF9yYXRlID0gMCwgaTsKPiArCWVu dW0gcGlwZSBwaXBlOwo+ICsKPiArCW1lbWNweShpbnRlbF9zdGF0ZS0+bWluX3BpeGNsaywgZGV2 X3ByaXYtPm1pbl9waXhjbGssCj4gKwnCoMKgwqDCoMKgwqDCoHNpemVvZihpbnRlbF9zdGF0ZS0+ bWluX3BpeGNsaykpOwo+ICsKPiArCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMs IGNzdGF0ZSwgaSkgewo+ICsJCWludCBwaXhlbF9yYXRlOwo+ICsKPiArCQljcnRjX3N0YXRlID0g dG9faW50ZWxfY3J0Y19zdGF0ZShjc3RhdGUpOwo+ICsJCWlmICghY3J0Y19zdGF0ZS0+YmFzZS5l bmFibGUpIHsKPiArCQkJaW50ZWxfc3RhdGUtPm1pbl9waXhjbGtbaV0gPSAwOwo+ICsJCQljb250 aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXBpeGVsX3JhdGUgPSBjcnRjX3N0YXRlLT5waXhlbF9yYXRl Owo+ICsKPiArCQlpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2KSB8fCBJU19HRU45KGRldl9wcml2 KSkKPiArCQkJcGl4ZWxfcmF0ZSA9Cj4gKwkJCQliZHdfYWRqdXN0X21pbl9waXBlX3BpeGVsX3Jh dGUoY3J0Y19zdGF0ZSwKPiArCQkJCQkJCcKgwqDCoMKgwqDCoMKgcGl4ZWxfcmF0ZSk7Cj4gKwo+ ICsJCWludGVsX3N0YXRlLT5taW5fcGl4Y2xrW2ldID0gcGl4ZWxfcmF0ZTsKPiArCX0KPiArCj4g Kwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ICsJCW1heF9waXhlbF9yYXRlID0gbWF4 KGludGVsX3N0YXRlLT5taW5fcGl4Y2xrW3BpcGVdLAo+ICsJCQkJwqDCoMKgwqDCoG1heF9waXhl bF9yYXRlKTsKPiArCj4gKwlyZXR1cm4gbWF4X3BpeGVsX3JhdGU7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmx2X21vZGVzZXRfY2FsY19jZGNsayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2Owo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ICsJaW50IG1h eF9waXhjbGsgPSBpbnRlbF9tYXhfcGl4ZWxfcmF0ZShzdGF0ZSk7Cj4gKwlzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gKwkJdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0 YXRlKTsKPiArCj4gKwlpbnRlbF9zdGF0ZS0+Y2RjbGsgPSBpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xr ID0KPiArCQl2bHZfY2FsY19jZGNsayhkZXZfcHJpdiwgbWF4X3BpeGNsayk7Cj4gKwo+ICsJaWYg KCFpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzKQo+ICsJCWludGVsX3N0YXRlLT5kZXZfY2RjbGsg PSB2bHZfY2FsY19jZGNsayhkZXZfcHJpdiwgMCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHZsdl9tb2Rlc2V0X2NvbW1pdF9jZGNsayhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2xk X3N0YXRlLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpvbGRfaW50ZWxfc3RhdGUg PQo+ICsJCXRvX2ludGVsX2F0b21pY19zdGF0ZShvbGRfc3RhdGUpOwo+ICsJdW5zaWduZWQgaW50 IHJlcV9jZGNsayA9IG9sZF9pbnRlbF9zdGF0ZS0+ZGV2X2NkY2xrOwo+ICsKPiArCS8qCj4gKwnC oCogRklYTUU6IFdlIGNhbiBlbmQgdXAgaGVyZSB3aXRoIGFsbCBwb3dlciBkb21haW5zIG9mZiwg eWV0Cj4gKwnCoCogd2l0aCBhIENEQ0xLIGZyZXF1ZW5jeSBvdGhlciB0aGFuIHRoZSBtaW5pbXVt LiBUbyBhY2NvdW50Cj4gKwnCoCogZm9yIHRoaXMgdGFrZSB0aGUgUElQRS1BIHBvd2VyIGRvbWFp biwgd2hpY2ggY292ZXJzIHRoZSBIVwo+ICsJwqAqIGJsb2NrcyBuZWVkZWQgZm9yIHRoZSBmb2xs b3dpbmcgcHJvZ3JhbW1pbmcuIFRoaXMgY2FuIGJlCj4gKwnCoCogcmVtb3ZlZCBvbmNlIGl0J3Mg Z3VhcmFudGVlZCB0aGF0IHdlIGdldCBoZXJlIGVpdGhlciB3aXRoCj4gKwnCoCogdGhlIG1pbmlt dW0gQ0RDTEsgc2V0LCBvciB0aGUgcmVxdWlyZWQgcG93ZXIgZG9tYWlucwo+ICsJwqAqIGVuYWJs ZWQuCj4gKwnCoCovCj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJf RE9NQUlOX1BJUEVfQSk7Cj4gKwo+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJ CWNodl9zZXRfY2RjbGsoZGV2LCByZXFfY2RjbGspOwo+ICsJZWxzZQo+ICsJCXZsdl9zZXRfY2Rj bGsoZGV2LCByZXFfY2RjbGspOwo+ICsKPiArCXZsdl9wcm9ncmFtX3BmaV9jcmVkaXRzKGRldl9w cml2KTsKPiArCj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgUE9XRVJfRE9N QUlOX1BJUEVfQSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYmR3X21vZGVzZXRfY2FsY19jZGNs ayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmRldik7Cj4gKwlzdHJ1Y3QgaW50 ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0 YXRlKTsKPiArCWludCBtYXhfcGl4Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUpOwo+ ICsJaW50IGNkY2xrOwo+ICsKPiArCS8qCj4gKwnCoCogRklYTUUgc2hvdWxkIGFsc28gYWNjb3Vu dCBmb3IgcGxhbmUgcmF0aW8KPiArCcKgKiBvbmNlIDY0YnBwIHBpeGVsIGZvcm1hdHMgYXJlIHN1 cHBvcnRlZC4KPiArCcKgKi8KPiArCWNkY2xrID0gYmR3X2NhbGNfY2RjbGsobWF4X3BpeGNsayk7 Cj4gKwo+ICsJaWYgKGNkY2xrID4gZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxKSB7Cj4gKwkJRFJN X0RFQlVHX0tNUygicmVxdWVzdGVkIGNkY2xrICglZCBrSHopIGV4Y2VlZHMgbWF4ICglZAo+IGtI eilcbiIsCj4gKwkJCcKgwqDCoMKgwqDCoGNkY2xrLCBkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWludGVsX3N0YXRlLT5jZGNsayA9 IGludGVsX3N0YXRlLT5kZXZfY2RjbGsgPSBjZGNsazsKPiArCWlmICghaW50ZWxfc3RhdGUtPmFj dGl2ZV9jcnRjcykKPiArCQlpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xrID0gYmR3X2NhbGNfY2RjbGso MCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGJkd19tb2Rlc2V0 X2NvbW1pdF9jZGNsayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2xkX3N0YXRlLT5kZXY7Cj4gKwlzdHJ1Y3QgaW50 ZWxfYXRvbWljX3N0YXRlICpvbGRfaW50ZWxfc3RhdGUgPQo+ICsJCXRvX2ludGVsX2F0b21pY19z dGF0ZShvbGRfc3RhdGUpOwo+ICsJdW5zaWduZWQgaW50IHJlcV9jZGNsayA9IG9sZF9pbnRlbF9z dGF0ZS0+ZGV2X2NkY2xrOwo+ICsKPiArCWJkd19zZXRfY2RjbGsoZGV2LCByZXFfY2RjbGspOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNrbF9tb2Rlc2V0X2NhbGNfY2RjbGsoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpp bnRlbF9zdGF0ZSA9Cj4gdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUtPmRldik7Cj4gKwljb25z dCBpbnQgbWF4X3BpeGNsayA9IGludGVsX21heF9waXhlbF9yYXRlKHN0YXRlKTsKPiArCWludCB2 Y28gPSBpbnRlbF9zdGF0ZS0+Y2RjbGtfcGxsX3ZjbzsKPiArCWludCBjZGNsazsKPiArCj4gKwkv Kgo+ICsJwqAqIEZJWE1FIHNob3VsZCBhbHNvIGFjY291bnQgZm9yIHBsYW5lIHJhdGlvCj4gKwnC oCogb25jZSA2NGJwcCBwaXhlbCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCj4gKwnCoCovCj4gKwlj ZGNsayA9IHNrbF9jYWxjX2NkY2xrKG1heF9waXhjbGssIHZjbyk7Cj4gKwo+ICsJLyoKPiArCcKg KiBGSVhNRSBtb3ZlIHRoZSBjZGNsayBjYWNsdWxhdGlvbiB0bwo+ICsJwqAqIGNvbXB1dGVfY29u ZmlnKCkgc28gd2UgY2FuIGZhaWwgZ3JhY2VndWxseS4KPiArCcKgKi8KPiArCWlmIChjZGNsayA+ IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSkgewo+ICsJCURSTV9FUlJPUigicmVxdWVzdGVkIGNk Y2xrICglZCBrSHopIGV4Y2VlZHMgbWF4ICglZCBrSHopXG4iLAo+ICsJCQnCoMKgY2RjbGssIGRl dl9wcml2LT5tYXhfY2RjbGtfZnJlcSk7Cj4gKwkJY2RjbGsgPSBkZXZfcHJpdi0+bWF4X2NkY2xr X2ZyZXE7Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfc3RhdGUtPmNkY2xrID0gaW50ZWxfc3RhdGUtPmRl dl9jZGNsayA9IGNkY2xrOwo+ICsJaWYgKCFpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzKQo+ICsJ CWludGVsX3N0YXRlLT5kZXZfY2RjbGsgPSBza2xfY2FsY19jZGNsaygwLCB2Y28pOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBza2xfbW9kZXNldF9jb21taXRfY2Rj bGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShvbGRfc3RhdGUtPmRldik7Cj4gKwlz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gKwkJdG9faW50ZWxfYXRv bWljX3N0YXRlKG9sZF9zdGF0ZSk7Cj4gKwl1bnNpZ25lZCBpbnQgcmVxX2NkY2xrID0gaW50ZWxf c3RhdGUtPmRldl9jZGNsazsKPiArCXVuc2lnbmVkIGludCByZXFfdmNvID0gaW50ZWxfc3RhdGUt PmNkY2xrX3BsbF92Y287Cj4gKwo+ICsJc2tsX3NldF9jZGNsayhkZXZfcHJpdiwgcmVxX2NkY2xr LCByZXFfdmNvKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBieHRfbW9kZXNldF9jYWxjX2NkY2xr KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKPiArCWludCBtYXhfcGl4 Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUpOwo+ICsJc3RydWN0IGludGVsX2F0b21p Y19zdGF0ZSAqaW50ZWxfc3RhdGUgPQo+ICsJCXRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7 Cj4gKwlpbnQgY2RjbGs7Cj4gKwo+ICsJaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ICsJ CWNkY2xrID0gZ2xrX2NhbGNfY2RjbGsobWF4X3BpeGNsayk7Cj4gKwllbHNlCj4gKwkJY2RjbGsg PSBieHRfY2FsY19jZGNsayhtYXhfcGl4Y2xrKTsKPiArCj4gKwlpbnRlbF9zdGF0ZS0+Y2RjbGsg PSBpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xrID0gY2RjbGs7Cj4gKwo+ICsJaWYgKCFpbnRlbF9zdGF0 ZS0+YWN0aXZlX2NydGNzKSB7Cj4gKwkJaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ICsJ CQljZGNsayA9IGdsa19jYWxjX2NkY2xrKDApOwo+ICsJCWVsc2UKPiArCQkJY2RjbGsgPSBieHRf Y2FsY19jZGNsaygwKTsKPiArCj4gKwkJaW50ZWxfc3RhdGUtPmRldl9jZGNsayA9IGNkY2xrOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBieHRfbW9kZXNl dF9jb21taXRfY2RjbGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9sZF9zdGF0ZS0+ZGV2Owo+ICsJc3RydWN0IGlu dGVsX2F0b21pY19zdGF0ZSAqb2xkX2ludGVsX3N0YXRlID0KPiArCQl0b19pbnRlbF9hdG9taWNf c3RhdGUob2xkX3N0YXRlKTsKPiArCXVuc2lnbmVkIGludCByZXFfY2RjbGsgPSBvbGRfaW50ZWxf c3RhdGUtPmRldl9jZGNsazsKPiArCj4gKwlieHRfc2V0X2NkY2xrKHRvX2k5MTUoZGV2KSwgcmVx X2NkY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbnRlbF9jb21wdXRlX21heF9kb3RjbGso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlpbnQgbWF4X2NkY2xr X2ZyZXEgPSBkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXE7Cj4gKwo+ICsJaWYgKElTX0dFTUlOSUxB S0UoZGV2X3ByaXYpKQo+ICsJCXJldHVybiAyICogbWF4X2NkY2xrX2ZyZXE7Cj4gKwllbHNlIGlm IChJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuID49IDkgfHwKPiArCQnCoElTX0hBU1dFTEwoZGV2 X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4gKwkJcmV0dXJuIG1heF9jZGNsa19m cmVxOwo+ICsJZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gKwkJcmV0dXJuIG1h eF9jZGNsa19mcmVxKjk1LzEwMDsKPiArCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5n ZW4gPCA0KQo+ICsJCXJldHVybiAyKm1heF9jZGNsa19mcmVxKjkwLzEwMDsKPiArCWVsc2UKPiAr CQlyZXR1cm4gbWF4X2NkY2xrX2ZyZXEqOTAvMTAwOwo+ICt9Cj4gKwo+ICt2b2lkIGludGVsX3Vw ZGF0ZV9tYXhfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4g KwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfS0FCWUxBS0UoZGV2X3ByaXYpKSB7Cj4g KwkJdTMyIGxpbWl0ID0gSTkxNV9SRUFEKFNLTF9ERlNNKSAmIFNLTF9ERlNNX0NEQ0xLX0xJTUlU X01BU0s7Cj4gKwkJaW50IG1heF9jZGNsaywgdmNvOwo+ICsKPiArCQl2Y28gPSBkZXZfcHJpdi0+ c2tsX3ByZWZlcnJlZF92Y29fZnJlcTsKPiArCQlXQVJOX09OKHZjbyAhPSA4MTAwMDAwICYmIHZj byAhPSA4NjQwMDAwKTsKPiArCj4gKwkJLyoKPiArCQnCoCogVXNlIHRoZSBsb3dlciAodmNvIDg2 NDApIGNkY2xrIHZhbHVlcyBhcyBhCj4gKwkJwqAqIGZpcnN0IGd1ZXNzLiBza2xfY2FsY19jZGNs aygpIHdpbGwgY29ycmVjdCBpdAo+ICsJCcKgKiBpZiB0aGUgcHJlZmVycmVkIHZjbyBpcyA4MTAw IGluc3RlYWQuCj4gKwkJwqAqLwo+ICsJCWlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1J VF82NzUpCj4gKwkJCW1heF9jZGNsayA9IDYxNzE0MzsKPiArCQllbHNlIGlmIChsaW1pdCA9PSBT S0xfREZTTV9DRENMS19MSU1JVF81NDApCj4gKwkJCW1heF9jZGNsayA9IDU0MDAwMDsKPiArCQll bHNlIGlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF80NTApCj4gKwkJCW1heF9jZGNs ayA9IDQzMjAwMDsKPiArCQllbHNlCj4gKwkJCW1heF9jZGNsayA9IDMwODU3MTsKPiArCj4gKwkJ ZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gc2tsX2NhbGNfY2RjbGsobWF4X2NkY2xrLCB2Y28p Owo+ICsJfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkgewo+ICsJCWRldl9wcml2 LT5tYXhfY2RjbGtfZnJlcSA9IDMxNjgwMDsKPiArCX0gZWxzZSBpZiAoSVNfQlJPWFRPTihkZXZf cHJpdikpIHsKPiArCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA2MjQwMDA7Cj4gKwl9IGVs c2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpwqDCoHsKPiArCQkvKgo+ICsJCcKgKiBGSVhN RSB3aXRoIGV4dHJhIGNvb2xpbmcgd2UgY2FuIGFsbG93Cj4gKwkJwqAqIDU0MCBNSHogZm9yIFVM WCBhbmQgNjc1IE1oeiBmb3IgVUxULgo+ICsJCcKgKiBIb3cgY2FuIHdlIGtub3cgaWYgZXh0cmEg Y29vbGluZyBpcwo+ICsJCcKgKiBhdmFpbGFibGU/IFBDSSBJRCwgVlRCLCBzb21ldGhpbmcgZWxz ZT8KPiArCQnCoCovCj4gKwkJaWYgKEk5MTVfUkVBRChGVVNFX1NUUkFQKSAmIEhTV19DRENMS19M SU1JVCkKPiArCQkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNDUwMDAwOwo+ICsJCWVsc2Ug aWYgKElTX0JEV19VTFgoZGV2X3ByaXYpKQo+ICsJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEg PSA0NTAwMDA7Cj4gKwkJZWxzZSBpZiAoSVNfQkRXX1VMVChkZXZfcHJpdikpCj4gKwkJCWRldl9w cml2LT5tYXhfY2RjbGtfZnJlcSA9IDU0MDAwMDsKPiArCQllbHNlCj4gKwkJCWRldl9wcml2LT5t YXhfY2RjbGtfZnJlcSA9IDY3NTAwMDsKPiArCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpIHsKPiArCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSAzMjAwMDA7Cj4gKwl9IGVs c2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Cj4gKwkJZGV2X3ByaXYtPm1heF9jZGNs a19mcmVxID0gNDAwMDAwOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBvdGhlcndpc2UgYXNzdW1lIGNk Y2xrIGlzIGZpeGVkICovCj4gKwkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gZGV2X3ByaXYt PmNkY2xrX2ZyZXE7Cj4gKwl9Cj4gKwo+ICsJZGV2X3ByaXYtPm1heF9kb3RjbGtfZnJlcSA9IGlu dGVsX2NvbXB1dGVfbWF4X2RvdGNsayhkZXZfcHJpdik7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZF UigiTWF4IENEIGNsb2NrIHJhdGU6ICVkIGtIelxuIiwKPiArCQkJwqBkZXZfcHJpdi0+bWF4X2Nk Y2xrX2ZyZXEpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIk1heCBkb3RjbG9jayByYXRlOiAl ZCBrSHpcbiIsCj4gKwkJCcKgZGV2X3ByaXYtPm1heF9kb3RjbGtfZnJlcSk7Cj4gK30KPiArCj4g K3ZvaWQgaW50ZWxfdXBkYXRlX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiArewo+ICsJZGV2X3ByaXYtPmNkY2xrX2ZyZXEgPSBkZXZfcHJpdi0+ZGlzcGxheS5nZXRf Y2RjbGsoZGV2X3ByaXYpOwo+ICsKPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4g KwkJRFJNX0RFQlVHX0RSSVZFUigiQ3VycmVudCBDRCBjbG9jayByYXRlOiAlZCBrSHosIFZDTzog JWQga0h6LAo+IHJlZjogJWQga0h6XG4iLAo+ICsJCQkJwqBkZXZfcHJpdi0+Y2RjbGtfZnJlcSwg ZGV2X3ByaXYtCj4gPmNkY2xrX3BsbC52Y28sCj4gKwkJCQnCoGRldl9wcml2LT5jZGNsa19wbGwu cmVmKTsKPiArCWVsc2UKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJDdXJyZW50IENEIGNsb2NrIHJh dGU6ICVkIGtIelxuIiwKPiArCQkJCcKgZGV2X3ByaXYtPmNkY2xrX2ZyZXEpOwo+ICsKPiArCS8q Cj4gKwnCoCogOTowIENNQlVTIFtzaWNdIENEQ0xLIGZyZXF1ZW5jeSAoY2RmcmVxKToKPiArCcKg KiBQcm9ncmFtbW5nIFtzaWNdIG5vdGU6IGJpdFs5OjJdIHNob3VsZCBiZSBwcm9ncmFtbWVkIHRv IHRoZSBudW1iZXIKPiArCcKgKiBvZiBjZGNsayB0aGF0IGdlbmVyYXRlcyA0TUh6IHJlZmVyZW5j ZSBjbG9jayBmcmVxIHdoaWNoIGlzIHVzZWQgdG8KPiArCcKgKiBnZW5lcmF0ZSBHTUJ1cyBjbG9j ay4gVGhpcyB3aWxsIHZhcnkgd2l0aCB0aGUgY2RjbGsgZnJlcS4KPiArCcKgKi8KPiArCWlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiArCQlJ OTE1X1dSSVRFKEdNQlVTRlJFUV9WTFYsCj4gKwkJCcKgwqDCoERJVl9ST1VORF9VUChkZXZfcHJp di0+Y2RjbGtfZnJlcSwgMTAwMCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBjaF9yYXdjbGso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlyZXR1cm4gKEk5MTVf UkVBRChQQ0hfUkFXQ0xLX0ZSRVEpICYgUkFXQ0xLX0ZSRVFfTUFTSykgKiAxMDAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHZsdl9ocmF3Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArewo+ICsJLyogUkFXQ0xLX0ZSRVFfVkxWIHJlZ2lzdGVyIHVwZGF0ZWQgZnJvbSBw b3dlciB3ZWxsIGNvZGUgKi8KPiArCXJldHVybiB2bHZfZ2V0X2Nja19jbG9ja19ocGxsKGRldl9w cml2LCAiaHJhd2NsayIsCj4gKwkJCQnCoMKgwqDCoMKgwqBDQ0tfRElTUExBWV9SRUZfQ0xPQ0tf Q09OVFJPTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZzR4X2hyYXdjbGsoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwl1aW50MzJfdCBjbGtjZmc7Cj4gKwo+ICsJ LyogaHJhd2Nsb2NrIGlzIDEvNCB0aGUgRlNCIGZyZXF1ZW5jeSAqLwo+ICsJY2xrY2ZnID0gSTkx NV9SRUFEKENMS0NGRyk7Cj4gKwlzd2l0Y2ggKGNsa2NmZyAmIENMS0NGR19GU0JfTUFTSykgewo+ ICsJY2FzZSBDTEtDRkdfRlNCXzQwMDoKPiArCQlyZXR1cm4gMTAwMDAwOwo+ICsJY2FzZSBDTEtD RkdfRlNCXzUzMzoKPiArCQlyZXR1cm4gMTMzMzMzOwo+ICsJY2FzZSBDTEtDRkdfRlNCXzY2NzoK PiArCQlyZXR1cm4gMTY2NjY3Owo+ICsJY2FzZSBDTEtDRkdfRlNCXzgwMDoKPiArCQlyZXR1cm4g MjAwMDAwOwo+ICsJY2FzZSBDTEtDRkdfRlNCXzEwNjc6Cj4gKwkJcmV0dXJuIDI2NjY2NzsKPiAr CWNhc2UgQ0xLQ0ZHX0ZTQl8xMzMzOgo+ICsJCXJldHVybiAzMzMzMzM7Cj4gKwkvKiB0aGVzZSB0 d28gYXJlIGp1c3QgYSBndWVzczsgb25lIG9mIHRoZW0gbWlnaHQgYmUgcmlnaHQgKi8KPiArCWNh c2UgQ0xLQ0ZHX0ZTQl8xNjAwOgo+ICsJY2FzZSBDTEtDRkdfRlNCXzE2MDBfQUxUOgo+ICsJCXJl dHVybiA0MDAwMDA7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAxMzMzMzM7Cj4gKwl9Cj4gK30K PiArCj4gK3ZvaWQgaW50ZWxfdXBkYXRlX3Jhd2NsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gK3sKPiArCWlmIChIQVNfUENIX1NQTElUKGRldl9wcml2KSkKPiArCQlkZXZf cHJpdi0+cmF3Y2xrX2ZyZXEgPSBwY2hfcmF3Y2xrKGRldl9wcml2KTsKPiArCWVsc2UgaWYgKElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCWRl dl9wcml2LT5yYXdjbGtfZnJlcSA9IHZsdl9ocmF3Y2xrKGRldl9wcml2KTsKPiArCWVsc2UgaWYg KElTX0c0WChkZXZfcHJpdikgfHwgSVNfUElORVZJRVcoZGV2X3ByaXYpKQo+ICsJCWRldl9wcml2 LT5yYXdjbGtfZnJlcSA9IGc0eF9ocmF3Y2xrKGRldl9wcml2KTsKPiArCWVsc2UKPiArCQkvKiBu byByYXdjbGsgb24gb3RoZXIgcGxhdGZvcm1zLCBvciBubyBuZWVkIHRvIGtub3cgaXQgKi8KPiAr CQlyZXR1cm47Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigicmF3Y2xrIHJhdGU6ICVkIGtIelxu IiwgZGV2X3ByaXYtPnJhd2Nsa19mcmVxKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9pbml0X2Nk Y2xrX2hvb2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJaWYg KElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Cj4g KwkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jb21taXRfY2RjbGsgPQo+ICsJCQl2bHZfbW9k ZXNldF9jb21taXRfY2RjbGs7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jYWxjX2Nk Y2xrID0KPiArCQkJdmx2X21vZGVzZXRfY2FsY19jZGNsazsKPiArCX0gZWxzZSBpZiAoSVNfQlJP QURXRUxMKGRldl9wcml2KSkgewo+ICsJCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfY29tbWl0 X2NkY2xrID0KPiArCQkJYmR3X21vZGVzZXRfY29tbWl0X2NkY2xrOwo+ICsJCWRldl9wcml2LT5k aXNwbGF5Lm1vZGVzZXRfY2FsY19jZGNsayA9Cj4gKwkJCWJkd19tb2Rlc2V0X2NhbGNfY2RjbGs7 Cj4gKwl9IGVsc2UgaWYgKElTX0dFTjlfTFAoZGV2X3ByaXYpKSB7Cj4gKwkJZGV2X3ByaXYtPmRp c3BsYXkubW9kZXNldF9jb21taXRfY2RjbGsgPQo+ICsJCQlieHRfbW9kZXNldF9jb21taXRfY2Rj bGs7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jYWxjX2NkY2xrID0KPiArCQkJYnh0 X21vZGVzZXRfY2FsY19jZGNsazsKPiArCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikg fHwgSVNfS0FCWUxBS0UoZGV2X3ByaXYpKSB7Cj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNl dF9jb21taXRfY2RjbGsgPQo+ICsJCQlza2xfbW9kZXNldF9jb21taXRfY2RjbGs7Cj4gKwkJZGV2 X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jYWxjX2NkY2xrID0KPiArCQkJc2tsX21vZGVzZXRfY2Fs Y19jZGNsazsKPiArCX0KPiArCj4gKwlpZiAoSVNfU0tZTEFLRShkZXZfcHJpdikgfHwgSVNfS0FC WUxBS0UoZGV2X3ByaXYpKQo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IHNrbF9n ZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJU19HRU45X0xQKGRldl9wcml2KSkKPiArCQlkZXZfcHJp di0+ZGlzcGxheS5nZXRfY2RjbGsgPSBieHRfZ2V0X2NkY2xrOwo+ICsJZWxzZSBpZiAoSVNfQlJP QURXRUxMKGRldl9wcml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBiZHdf Z2V0X2NkY2xrOwo+ICsJZWxzZSBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikpCj4gKwkJZGV2X3By aXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gaHN3X2dldF9jZGNsazsKPiArCWVsc2UgaWYgKElTX1ZB TExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+ICsJCWRldl9w cml2LT5kaXNwbGF5LmdldF9jZGNsayA9IHZsdl9nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJU19H RU42KGRldl9wcml2KSB8fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ICsJCWRldl9wcml2LT5k aXNwbGF5LmdldF9jZGNsayA9IGZpeGVkXzQwMG1oel9nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJ U19HRU41KGRldl9wcml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhl ZF80NTBtaHpfZ2V0X2NkY2xrOwo+ICsJZWxzZSBpZiAoSVNfR000NShkZXZfcHJpdikpCj4gKwkJ ZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZ200NV9nZXRfY2RjbGs7Cj4gKwllbHNlIGlm IChJU19HNFgoZGV2X3ByaXYpKQo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGcz M19nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJU19JOTY1R00oZGV2X3ByaXYpKQo+ICsJCWRldl9w cml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGk5NjVnbV9nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJ U19JOTY1RyhkZXZfcHJpdikpCj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZml4 ZWRfNDAwbWh6X2dldF9jZGNsazsKPiArCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkK PiArCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBwbnZfZ2V0X2NkY2xrOwo+ICsJZWxz ZSBpZiAoSVNfRzMzKGRldl9wcml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsg PSBnMzNfZ2V0X2NkY2xrOwo+ICsJZWxzZSBpZiAoSVNfSTk0NUdNKGRldl9wcml2KSkKPiArCQlk ZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhlZF8yMDBtaHpfZ2V0X2NkY2xrOwo+ICsJ ZWxzZSBpZiAoSVNfSTk0NUcoZGV2X3ByaXYpKQo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9j ZGNsayA9IGZpeGVkXzQwMG1oel9nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJU19JOTE1R00oZGV2 X3ByaXYpKQo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGk5MTVnbV9nZXRfY2Rj bGs7Cj4gKwllbHNlIGlmIChJU19JOTE1RyhkZXZfcHJpdikpCj4gKwkJZGV2X3ByaXYtPmRpc3Bs YXkuZ2V0X2NkY2xrID0gZml4ZWRfMzMzbWh6X2dldF9jZGNsazsKPiArCWVsc2UgaWYgKElTX0k4 NjVHKGRldl9wcml2KSkKPiArCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhlZF8y NjZtaHpfZ2V0X2NkY2xrOwo+ICsJZWxzZSBpZiAoSVNfSTg1WChkZXZfcHJpdikpCj4gKwkJZGV2 X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gaTg1eF9nZXRfY2RjbGs7Cj4gKwllbHNlIGlmIChJ U19JODQ1RyhkZXZfcHJpdikpCj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZml4 ZWRfMjAwbWh6X2dldF9jZGNsazsKPiArCWVsc2UgeyAvKiA4MzAgKi8KPiArCQlXQVJOKCFJU19J ODMwKGRldl9wcml2KSwKPiArCQnCoMKgwqDCoMKgIlVua25vd24gcGxhdGZvcm0uIEFzc3VtaW5n IDEzMyBNSHogQ0RDTEtcbiIpOwo+ICsJCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGZp eGVkXzEzM21oel9nZXRfY2RjbGs7Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMKPiBpbmRleCAyOWY5MWU3OTkyNzIuLjUxOWU1ZDY2M2M1ZiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiBAQCAtMTIzLDkgKzEyMyw2IEBAIHN0YXRp YyB2b2lkIGlyb25sYWtlX3BmaXRfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiBi b29sIGZvcmNlKTsKPiDCoHN0YXRpYyB2b2lkIGlyb25sYWtlX3BmaXRfZW5hYmxlKHN0cnVjdCBp bnRlbF9jcnRjICpjcnRjKTsKPiDCoHN0YXRpYyB2b2lkIGludGVsX21vZGVzZXRfc2V0dXBfaHdf c3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gwqBzdGF0aWMgdm9pZCBpbnRlbF9wcmVf ZGlzYWJsZV9wcmltYXJ5X25vYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gLXN0YXRp YyBpbnQgaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KTsKPiAtc3RhdGljIGludCBnbGtfY2FsY19jZGNsayhpbnQgbWF4X3BpeGNsayk7Cj4gLXN0YXRp YyBpbnQgYnh0X2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGspOwo+IMKgCj4gwqBzdHJ1Y3QgaW50 ZWxfbGltaXQgewo+IMKgCXN0cnVjdCB7Cj4gQEAgLTE3MSw4ICsxNjgsOCBAQCBpbnQgdmx2X2dl dF9jY2tfY2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgCXJldHVy biBESVZfUk9VTkRfQ0xPU0VTVChyZWZfZnJlcSA8PCAxLCBkaXZpZGVyICsgMSk7Cj4gwqB9Cj4g wqAKPiAtc3RhdGljIGludCB2bHZfZ2V0X2Nja19jbG9ja19ocGxsKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCcKgwqBjb25zdCBjaGFyICpuYW1lLCB1MzIgcmVnKQo+ ICtpbnQgdmx2X2dldF9jY2tfY2xvY2tfaHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gKwkJCcKgwqDCoGNvbnN0IGNoYXIgKm5hbWUsIHUzMiByZWcpCj4gwqB7Cj4gwqAJ aWYgKGRldl9wcml2LT5ocGxsX2ZyZXEgPT0gMCkKPiDCoAkJZGV2X3ByaXYtPmhwbGxfZnJlcSA9 IHZhbGxleXZpZXdfZ2V0X3ZjbyhkZXZfcHJpdik7Cj4gQEAgLTE4MSw2MyArMTc4LDYgQEAgc3Rh dGljIGludCB2bHZfZ2V0X2Nja19jbG9ja19ocGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4g KmRldl9wcml2LAo+IMKgCQkJCcKgZGV2X3ByaXYtPmhwbGxfZnJlcSk7Cj4gwqB9Cj4gwqAKPiAt c3RhdGljIGludAo+IC1pbnRlbF9wY2hfcmF3Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0JcmV0dXJuIChJOTE1X1JFQUQoUENIX1JBV0NMS19GUkVRKSAmIFJB V0NMS19GUkVRX01BU0spICogMTAwMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludAo+IC1pbnRlbF92 bHZfaHJhd2NsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCS8q IFJBV0NMS19GUkVRX1ZMViByZWdpc3RlciB1cGRhdGVkIGZyb20gcG93ZXIgd2VsbCBjb2RlICov Cj4gLQlyZXR1cm4gdmx2X2dldF9jY2tfY2xvY2tfaHBsbChkZXZfcHJpdiwgImhyYXdjbGsiLAo+ IC0JCQkJwqDCoMKgwqDCoMKgQ0NLX0RJU1BMQVlfUkVGX0NMT0NLX0NPTlRST0wpOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50Cj4gLWludGVsX2c0eF9ocmF3Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdWludDMyX3QgY2xrY2ZnOwo+IC0KPiAtCS8qIGhyYXdj bG9jayBpcyAxLzQgdGhlIEZTQiBmcmVxdWVuY3kgKi8KPiAtCWNsa2NmZyA9IEk5MTVfUkVBRChD TEtDRkcpOwo+IC0Jc3dpdGNoIChjbGtjZmcgJiBDTEtDRkdfRlNCX01BU0spIHsKPiAtCWNhc2Ug Q0xLQ0ZHX0ZTQl80MDA6Cj4gLQkJcmV0dXJuIDEwMDAwMDsKPiAtCWNhc2UgQ0xLQ0ZHX0ZTQl81 MzM6Cj4gLQkJcmV0dXJuIDEzMzMzMzsKPiAtCWNhc2UgQ0xLQ0ZHX0ZTQl82Njc6Cj4gLQkJcmV0 dXJuIDE2NjY2NzsKPiAtCWNhc2UgQ0xLQ0ZHX0ZTQl84MDA6Cj4gLQkJcmV0dXJuIDIwMDAwMDsK PiAtCWNhc2UgQ0xLQ0ZHX0ZTQl8xMDY3Ogo+IC0JCXJldHVybiAyNjY2Njc7Cj4gLQljYXNlIENM S0NGR19GU0JfMTMzMzoKPiAtCQlyZXR1cm4gMzMzMzMzOwo+IC0JLyogdGhlc2UgdHdvIGFyZSBq dXN0IGEgZ3Vlc3M7IG9uZSBvZiB0aGVtIG1pZ2h0IGJlIHJpZ2h0ICovCj4gLQljYXNlIENMS0NG R19GU0JfMTYwMDoKPiAtCWNhc2UgQ0xLQ0ZHX0ZTQl8xNjAwX0FMVDoKPiAtCQlyZXR1cm4gNDAw MDAwOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMTMzMzMzOwo+IC0JfQo+IC19Cj4gLQo+IC12 b2lkIGludGVsX3VwZGF0ZV9yYXdjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+IC17Cj4gLQlpZiAoSEFTX1BDSF9TUExJVChkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYtPnJh d2Nsa19mcmVxID0gaW50ZWxfcGNoX3Jhd2NsayhkZXZfcHJpdik7Cj4gLQllbHNlIGlmIChJU19W QUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQlkZXZf cHJpdi0+cmF3Y2xrX2ZyZXEgPSBpbnRlbF92bHZfaHJhd2NsayhkZXZfcHJpdik7Cj4gLQllbHNl IGlmIChJU19HNFgoZGV2X3ByaXYpIHx8IElTX1BJTkVWSUVXKGRldl9wcml2KSkKPiAtCQlkZXZf cHJpdi0+cmF3Y2xrX2ZyZXEgPSBpbnRlbF9nNHhfaHJhd2NsayhkZXZfcHJpdik7Cj4gLQllbHNl Cj4gLQkJcmV0dXJuOyAvKiBubyByYXdjbGsgb24gb3RoZXIgcGxhdGZvcm1zLCBvciBubyBuZWVk IHRvIGtub3cKPiBpdCAqLwo+IC0KPiAtCURSTV9ERUJVR19EUklWRVIoInJhd2NsayByYXRlOiAl ZCBrSHpcbiIsIGRldl9wcml2LT5yYXdjbGtfZnJlcSk7Cj4gLX0KPiAtCj4gwqBzdGF0aWMgdm9p ZCBpbnRlbF91cGRhdGVfY3pjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ IMKgewo+IMKgCWlmICghKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKSkKPiBAQCAtNTc5MSwxMDkyICs1NzMxLDIxMCBAQCBzdGF0aWMgdm9pZCBtb2Rl c2V0X3B1dF9wb3dlcl9kb21haW5zKHN0cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IMKgCQlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgZG9tYWluKTsKPiDCoH0K PiDCoAo+IC1zdGF0aWMgaW50IGludGVsX2NvbXB1dGVfbWF4X2RvdGNsayhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIHZhbGxleXZpZXdfY3J0Y19lbmFi bGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAo+ICsJCQkJwqDCoMKgc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiDCoHsKPiAtCWludCBtYXhfY2RjbGtf ZnJlcSA9IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcTsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9IHBpcGVfY29uZmlnLT5iYXNlLmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkZXYpOwo+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRj KGNydGMpOwo+ICsJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwo+IMKgCj4gLQlpZiAoSVNf R0VNSU5JTEFLRShkZXZfcHJpdikpCj4gLQkJcmV0dXJuIDIgKiBtYXhfY2RjbGtfZnJlcTsKPiAt CWVsc2UgaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4gPj0gOSB8fAo+IC0JCcKgSVNfSEFT V0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gbWF4 X2NkY2xrX2ZyZXE7Cj4gLQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQly ZXR1cm4gbWF4X2NkY2xrX2ZyZXEqOTUvMTAwOwo+IC0JZWxzZSBpZiAoSU5URUxfSU5GTyhkZXZf cHJpdiktPmdlbiA8IDQpCj4gLQkJcmV0dXJuIDIqbWF4X2NkY2xrX2ZyZXEqOTAvMTAwOwo+IC0J ZWxzZQo+IC0JCXJldHVybiBtYXhfY2RjbGtfZnJlcSo5MC8xMDA7Cj4gLX0KPiArCWlmIChXQVJO X09OKGludGVsX2NydGMtPmFjdGl2ZSkpCj4gKwkJcmV0dXJuOwo+IMKgCj4gLXN0YXRpYyBpbnQg c2tsX2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGssIGludCB2Y28pOwo+ICsJaWYgKGludGVsX2Ny dGNfaGFzX2RwX2VuY29kZXIoaW50ZWxfY3J0Yy0+Y29uZmlnKSkKPiArCQlpbnRlbF9kcF9zZXRf bV9uKGludGVsX2NydGMsIE0xX04xKTsKPiDCoAo+IC1zdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVf bWF4X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JaWYg KElTX1NLWUxBS0UoZGV2X3ByaXYpIHx8IElTX0tBQllMQUtFKGRldl9wcml2KSkgewo+IC0JCXUz MiBsaW1pdCA9IEk5MTVfUkVBRChTS0xfREZTTSkgJiBTS0xfREZTTV9DRENMS19MSU1JVF9NQVNL Owo+IC0JCWludCBtYXhfY2RjbGssIHZjbzsKPiArCWludGVsX3NldF9waXBlX3RpbWluZ3MoaW50 ZWxfY3J0Yyk7Cj4gKwlpbnRlbF9zZXRfcGlwZV9zcmNfc2l6ZShpbnRlbF9jcnRjKTsKPiDCoAo+ IC0JCXZjbyA9IGRldl9wcml2LT5za2xfcHJlZmVycmVkX3Zjb19mcmVxOwo+IC0JCVdBUk5fT04o dmNvICE9IDgxMDAwMDAgJiYgdmNvICE9IDg2NDAwMDApOwo+ICsJaWYgKElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9CKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IMKgCj4gLQkJLyoKPiAtCQnCoCogVXNlIHRo ZSBsb3dlciAodmNvIDg2NDApIGNkY2xrIHZhbHVlcyBhcyBhCj4gLQkJwqAqIGZpcnN0IGd1ZXNz LiBza2xfY2FsY19jZGNsaygpIHdpbGwgY29ycmVjdCBpdAo+IC0JCcKgKiBpZiB0aGUgcHJlZmVy cmVkIHZjbyBpcyA4MTAwIGluc3RlYWQuCj4gLQkJwqAqLwo+IC0JCWlmIChsaW1pdCA9PSBTS0xf REZTTV9DRENMS19MSU1JVF82NzUpCj4gLQkJCW1heF9jZGNsayA9IDYxNzE0MzsKPiAtCQllbHNl IGlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF81NDApCj4gLQkJCW1heF9jZGNsayA9 IDU0MDAwMDsKPiAtCQllbHNlIGlmIChsaW1pdCA9PSBTS0xfREZTTV9DRENMS19MSU1JVF80NTAp Cj4gLQkJCW1heF9jZGNsayA9IDQzMjAwMDsKPiAtCQllbHNlCj4gLQkJCW1heF9jZGNsayA9IDMw ODU3MTsKPiAtCj4gLQkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gc2tsX2NhbGNfY2RjbGso bWF4X2NkY2xrLCB2Y28pOwo+IC0JfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGRldl9wcml2KSkg ewo+IC0JCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDMxNjgwMDsKPiAtCX0gZWxzZSBpZiAo SVNfQlJPWFRPTihkZXZfcHJpdikpIHsKPiAtCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA2 MjQwMDA7Cj4gLQl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpwqDCoHsKPiAtCQkv Kgo+IC0JCcKgKiBGSVhNRSB3aXRoIGV4dHJhIGNvb2xpbmcgd2UgY2FuIGFsbG93Cj4gLQkJwqAq IDU0MCBNSHogZm9yIFVMWCBhbmQgNjc1IE1oeiBmb3IgVUxULgo+IC0JCcKgKiBIb3cgY2FuIHdl IGtub3cgaWYgZXh0cmEgY29vbGluZyBpcwo+IC0JCcKgKiBhdmFpbGFibGU/IFBDSSBJRCwgVlRC LCBzb21ldGhpbmcgZWxzZT8KPiAtCQnCoCovCj4gLQkJaWYgKEk5MTVfUkVBRChGVVNFX1NUUkFQ KSAmIEhTV19DRENMS19MSU1JVCkKPiAtCQkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNDUw MDAwOwo+IC0JCWVsc2UgaWYgKElTX0JEV19VTFgoZGV2X3ByaXYpKQo+IC0JCQlkZXZfcHJpdi0+ bWF4X2NkY2xrX2ZyZXEgPSA0NTAwMDA7Cj4gLQkJZWxzZSBpZiAoSVNfQkRXX1VMVChkZXZfcHJp dikpCj4gLQkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDU0MDAwMDsKPiAtCQllbHNlCj4g LQkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDY3NTAwMDsKPiAtCX0gZWxzZSBpZiAoSVNf Q0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiAtCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSAz MjAwMDA7Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Cj4gLQkJZGV2 X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNDAwMDAwOwo+IC0JfSBlbHNlIHsKPiAtCQkvKiBvdGhl cndpc2UgYXNzdW1lIGNkY2xrIGlzIGZpeGVkICovCj4gLQkJZGV2X3ByaXYtPm1heF9jZGNsa19m cmVxID0gZGV2X3ByaXYtPmNkY2xrX2ZyZXE7Cj4gKwkJSTkxNV9XUklURShDSFZfQkxFTkQocGlw ZSksIENIVl9CTEVORF9MRUdBQ1kpOwo+ICsJCUk5MTVfV1JJVEUoQ0hWX0NBTlZBUyhwaXBlKSwg MCk7Cj4gwqAJfQo+IMKgCj4gLQlkZXZfcHJpdi0+bWF4X2RvdGNsa19mcmVxID0gaW50ZWxfY29t cHV0ZV9tYXhfZG90Y2xrKGRldl9wcml2KTsKPiAtCj4gLQlEUk1fREVCVUdfRFJJVkVSKCJNYXgg Q0QgY2xvY2sgcmF0ZTogJWQga0h6XG4iLAo+IC0JCQnCoGRldl9wcml2LT5tYXhfY2RjbGtfZnJl cSk7Cj4gLQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiTWF4IGRvdGNsb2NrIHJhdGU6ICVkIGtIelxu IiwKPiAtCQkJwqBkZXZfcHJpdi0+bWF4X2RvdGNsa19mcmVxKTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgaW50ZWxfdXBkYXRlX2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPiAtewo+IC0JZGV2X3ByaXYtPmNkY2xrX2ZyZXEgPSBkZXZfcHJpdi0+ZGlzcGxheS5nZXRf Y2RjbGsoZGV2X3ByaXYpOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCj4g LQkJRFJNX0RFQlVHX0RSSVZFUigiQ3VycmVudCBDRCBjbG9jayByYXRlOiAlZCBrSHosIFZDTzog JWQga0h6LAo+IHJlZjogJWQga0h6XG4iLAo+IC0JCQkJwqBkZXZfcHJpdi0+Y2RjbGtfZnJlcSwg ZGV2X3ByaXYtCj4gPmNkY2xrX3BsbC52Y28sCj4gLQkJCQnCoGRldl9wcml2LT5jZGNsa19wbGwu cmVmKTsKPiAtCWVsc2UKPiAtCQlEUk1fREVCVUdfRFJJVkVSKCJDdXJyZW50IENEIGNsb2NrIHJh dGU6ICVkIGtIelxuIiwKPiAtCQkJCcKgZGV2X3ByaXYtPmNkY2xrX2ZyZXEpOwo+IC0KPiAtCS8q Cj4gLQnCoCogOTowIENNQlVTIFtzaWNdIENEQ0xLIGZyZXF1ZW5jeSAoY2RmcmVxKToKPiAtCcKg KiBQcm9ncmFtbW5nIFtzaWNdIG5vdGU6IGJpdFs5OjJdIHNob3VsZCBiZSBwcm9ncmFtbWVkIHRv IHRoZSBudW1iZXIKPiAtCcKgKiBvZiBjZGNsayB0aGF0IGdlbmVyYXRlcyA0TUh6IHJlZmVyZW5j ZSBjbG9jayBmcmVxIHdoaWNoIGlzIHVzZWQgdG8KPiAtCcKgKiBnZW5lcmF0ZSBHTUJ1cyBjbG9j ay4gVGhpcyB3aWxsIHZhcnkgd2l0aCB0aGUgY2RjbGsgZnJlcS4KPiAtCcKgKi8KPiAtCWlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiAtCQlJ OTE1X1dSSVRFKEdNQlVTRlJFUV9WTFYsIERJVl9ST1VORF9VUChkZXZfcHJpdi0+Y2RjbGtfZnJl cSwKPiAxMDAwKSk7Cj4gLX0KPiArCWk5eHhfc2V0X3BpcGVjb25mKGludGVsX2NydGMpOwo+IMKg Cj4gLS8qIGNvbnZlcnQgZnJvbSBrSHogdG8gLjEgZml4cG9pbnQgTUh6IHdpdGggLTFNSHogb2Zm c2V0ICovCj4gLXN0YXRpYyBpbnQgc2tsX2NkY2xrX2RlY2ltYWwoaW50IGNkY2xrKQo+IC17Cj4g LQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY2RjbGsgLSAxMDAwLCA1MDApOwo+IC19Cj4gKwlp bnRlbF9jcnRjLT5hY3RpdmUgPSB0cnVlOwo+IMKgCj4gLXN0YXRpYyBpbnQgYnh0X2RlX3BsbF92 Y28oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpbnQgY2RjbGspCj4gLXsKPiAt CWludCByYXRpbzsKPiArCWludGVsX3NldF9jcHVfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2 X3ByaXYsIHBpcGUsIHRydWUpOwo+IMKgCj4gLQlpZiAoY2RjbGsgPT0gZGV2X3ByaXYtPmNkY2xr X3BsbC5yZWYpCj4gLQkJcmV0dXJuIDA7Cj4gKwlpbnRlbF9lbmNvZGVyc19wcmVfcGxsX2VuYWJs ZShjcnRjLCBwaXBlX2NvbmZpZywgb2xkX3N0YXRlKTsKPiDCoAo+IC0Jc3dpdGNoIChjZGNsaykg ewo+IC0JZGVmYXVsdDoKPiAtCQlNSVNTSU5HX0NBU0UoY2RjbGspOwo+IC0JY2FzZSAxNDQwMDA6 Cj4gLQljYXNlIDI4ODAwMDoKPiAtCWNhc2UgMzg0MDAwOgo+IC0JY2FzZSA1NzYwMDA6Cj4gLQkJ cmF0aW8gPSA2MDsKPiAtCQlicmVhazsKPiAtCWNhc2UgNjI0MDAwOgo+IC0JCXJhdGlvID0gNjU7 Cj4gLQkJYnJlYWs7Cj4gKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiArCQljaHZf cHJlcGFyZV9wbGwoaW50ZWxfY3J0YywgaW50ZWxfY3J0Yy0+Y29uZmlnKTsKPiArCQljaHZfZW5h YmxlX3BsbChpbnRlbF9jcnRjLCBpbnRlbF9jcnRjLT5jb25maWcpOwo+ICsJfSBlbHNlIHsKPiAr CQl2bHZfcHJlcGFyZV9wbGwoaW50ZWxfY3J0YywgaW50ZWxfY3J0Yy0+Y29uZmlnKTsKPiArCQl2 bHZfZW5hYmxlX3BsbChpbnRlbF9jcnRjLCBpbnRlbF9jcnRjLT5jb25maWcpOwo+IMKgCX0KPiDC oAo+IC0JcmV0dXJuIGRldl9wcml2LT5jZGNsa19wbGwucmVmICogcmF0aW87Cj4gLX0KPiArCWlu dGVsX2VuY29kZXJzX3ByZV9lbmFibGUoY3J0YywgcGlwZV9jb25maWcsIG9sZF9zdGF0ZSk7Cj4g wqAKPiAtc3RhdGljIGludCBnbGtfZGVfcGxsX3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGludCBjZGNsaykKPiAtewo+IC0JaW50IHJhdGlvOwo+ICsJaTl4eF9wZml0X2Vu YWJsZShpbnRlbF9jcnRjKTsKPiDCoAo+IC0JaWYgKGNkY2xrID09IGRldl9wcml2LT5jZGNsa19w bGwucmVmKQo+IC0JCXJldHVybiAwOwo+ICsJaW50ZWxfY29sb3JfbG9hZF9sdXRzKCZwaXBlX2Nv bmZpZy0+YmFzZSk7Cj4gwqAKPiAtCXN3aXRjaCAoY2RjbGspIHsKPiAtCWRlZmF1bHQ6Cj4gLQkJ TUlTU0lOR19DQVNFKGNkY2xrKTsKPiAtCWNhc2XCoMKgNzkyMDA6Cj4gLQljYXNlIDE1ODQwMDoK PiAtCWNhc2UgMzE2ODAwOgo+IC0JCXJhdGlvID0gMzM7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gKwlp bnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9jcnRjKTsKPiArCWludGVsX2VuYWJsZV9waXBl KGludGVsX2NydGMpOwo+ICsKPiArCWFzc2VydF92YmxhbmtfZGlzYWJsZWQoY3J0Yyk7Cj4gKwlk cm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gwqAKPiAtCXJldHVybiBkZXZfcHJpdi0+Y2RjbGtf cGxsLnJlZiAqIHJhdGlvOwo+ICsJaW50ZWxfZW5jb2RlcnNfZW5hYmxlKGNydGMsIHBpcGVfY29u ZmlnLCBvbGRfc3RhdGUpOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyB2b2lkIGJ4dF9kZV9wbGxfZGlz YWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGk5 eHhfc2V0X3BsbF9kaXZpZGVycyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiDCoHsKPiAtCUk5 MTVfV1JJVEUoQlhUX0RFX1BMTF9FTkFCTEUsIDApOwo+IC0KPiAtCS8qIFRpbWVvdXQgMjAwdXMg Ki8KPiAtCWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwKPiAtCQkJCcKgwqDC oMKgQlhUX0RFX1BMTF9FTkFCTEUsIEJYVF9ERV9QTExfTE9DSywgMCwKPiAtCQkJCcKgwqDCoMKg MSkpCj4gLQkJRFJNX0VSUk9SKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIERFIFBMTCB1bmxvY2tcbiIp Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IMKgCj4gLQlkZXZf cHJpdi0+Y2RjbGtfcGxsLnZjbyA9IDA7Cj4gKwlJOTE1X1dSSVRFKEZQMChjcnRjLT5waXBlKSwg Y3J0Yy0+Y29uZmlnLT5kcGxsX2h3X3N0YXRlLmZwMCk7Cj4gKwlJOTE1X1dSSVRFKEZQMShjcnRj LT5waXBlKSwgY3J0Yy0+Y29uZmlnLT5kcGxsX2h3X3N0YXRlLmZwMSk7Cj4gwqB9Cj4gwqAKPiAt c3RhdGljIHZvaWQgYnh0X2RlX3BsbF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBpbnQgdmNvKQo+ICtzdGF0aWMgdm9pZCBpOXh4X2NydGNfZW5hYmxlKHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKPiArCQkJwqDCoMKgwqDCoHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gwqB7Cj4gLQlpbnQgcmF0aW8gPSBESVZfUk9VTkRf Q0xPU0VTVCh2Y28sIGRldl9wcml2LT5jZGNsa19wbGwucmVmKTsKPiAtCXUzMiB2YWw7Cj4gKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwo+ICsJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9j cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0 Yy0+cGlwZTsKPiDCoAo+IC0JdmFsID0gSTkxNV9SRUFEKEJYVF9ERV9QTExfQ1RMKTsKPiAtCXZh bCAmPSB+QlhUX0RFX1BMTF9SQVRJT19NQVNLOwo+IC0JdmFsIHw9IEJYVF9ERV9QTExfUkFUSU8o cmF0aW8pOwo+IC0JSTkxNV9XUklURShCWFRfREVfUExMX0NUTCwgdmFsKTsKPiArCWlmIChXQVJO X09OKGludGVsX2NydGMtPmFjdGl2ZSkpCj4gKwkJcmV0dXJuOwo+IMKgCj4gLQlJOTE1X1dSSVRF KEJYVF9ERV9QTExfRU5BQkxFLCBCWFRfREVfUExMX1BMTF9FTkFCTEUpOwo+ICsJaTl4eF9zZXRf cGxsX2RpdmlkZXJzKGludGVsX2NydGMpOwo+IMKgCj4gLQkvKiBUaW1lb3V0IDIwMHVzICovCj4g LQlpZiAoaW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCj4gLQkJCQnCoMKgwqDCoEJY VF9ERV9QTExfRU5BQkxFLAo+IC0JCQkJwqDCoMKgwqBCWFRfREVfUExMX0xPQ0ssCj4gLQkJCQnC oMKgwqDCoEJYVF9ERV9QTExfTE9DSywKPiAtCQkJCcKgwqDCoMKgMSkpCj4gLQkJRFJNX0VSUk9S KCJ0aW1lb3V0IHdhaXRpbmcgZm9yIERFIFBMTCBsb2NrXG4iKTsKPiArCWlmIChpbnRlbF9jcnRj X2hhc19kcF9lbmNvZGVyKGludGVsX2NydGMtPmNvbmZpZykpCj4gKwkJaW50ZWxfZHBfc2V0X21f bihpbnRlbF9jcnRjLCBNMV9OMSk7Cj4gwqAKPiAtCWRldl9wcml2LT5jZGNsa19wbGwudmNvID0g dmNvOwo+IC19Cj4gKwlpbnRlbF9zZXRfcGlwZV90aW1pbmdzKGludGVsX2NydGMpOwo+ICsJaW50 ZWxfc2V0X3BpcGVfc3JjX3NpemUoaW50ZWxfY3J0Yyk7Cj4gwqAKPiAtc3RhdGljIHZvaWQgYnh0 X3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBjZGNsaykK PiAtewo+IC0JdTMyIHZhbCwgZGl2aWRlcjsKPiAtCWludCB2Y28sIHJldDsKPiArCWk5eHhfc2V0 X3BpcGVjb25mKGludGVsX2NydGMpOwo+IMKgCj4gLQlpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJp dikpCj4gLQkJdmNvID0gZ2xrX2RlX3BsbF92Y28oZGV2X3ByaXYsIGNkY2xrKTsKPiAtCWVsc2UK PiAtCQl2Y28gPSBieHRfZGVfcGxsX3ZjbyhkZXZfcHJpdiwgY2RjbGspOwo+ICsJaW50ZWxfY3J0 Yy0+YWN0aXZlID0gdHJ1ZTsKPiDCoAo+IC0JRFJNX0RFQlVHX0RSSVZFUigiQ2hhbmdpbmcgQ0RD TEsgdG8gJWQga0h6IChWQ08gJWQga0h6KVxuIiwgY2RjbGssCj4gdmNvKTsKPiArCWlmICghSVNf R0VOMihkZXZfcHJpdikpCj4gKwkJaW50ZWxfc2V0X2NwdV9maWZvX3VuZGVycnVuX3JlcG9ydGlu ZyhkZXZfcHJpdiwgcGlwZSwgdHJ1ZSk7Cj4gwqAKPiAtCS8qIGNkY2xrID0gdmNvIC8gMiAvIGRp dnsxLDEuNSwyLDR9ICovCj4gLQlzd2l0Y2ggKERJVl9ST1VORF9DTE9TRVNUKHZjbywgY2RjbGsp KSB7Cj4gLQljYXNlIDg6Cj4gLQkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJYX0RJVl9TRUxfNDsK PiAtCQlicmVhazsKPiAtCWNhc2UgNDoKPiAtCQlkaXZpZGVyID0gQlhUX0NEQ0xLX0NEMlhfRElW X1NFTF8yOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAzOgo+IC0JCVdBUk4oSVNfR0VNSU5JTEFLRShk ZXZfcHJpdiksICJVbnN1cHBvcnRlZCBkaXZpZGVyXG4iKTsKPiAtCQlkaXZpZGVyID0gQlhUX0NE Q0xLX0NEMlhfRElWX1NFTF8xXzU7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDI6Cj4gLQkJZGl2aWRl ciA9IEJYVF9DRENMS19DRDJYX0RJVl9TRUxfMTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJV0FSTl9PTihjZGNsayAhPSBkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZik7Cj4gLQkJV0FSTl9P Tih2Y28gIT0gMCk7Cj4gKwlpbnRlbF9lbmNvZGVyc19wcmVfZW5hYmxlKGNydGMsIHBpcGVfY29u ZmlnLCBvbGRfc3RhdGUpOwo+IMKgCj4gLQkJZGl2aWRlciA9IEJYVF9DRENMS19DRDJYX0RJVl9T RUxfMTsKPiAtCQlicmVhazsKPiAtCX0KPiArCWk5eHhfZW5hYmxlX3BsbChpbnRlbF9jcnRjKTsK PiDCoAo+IC0JLyogSW5mb3JtIHBvd2VyIGNvbnRyb2xsZXIgb2YgdXBjb21pbmcgZnJlcXVlbmN5 IGNoYW5nZSAqLwo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiAtCXJl dCA9IHNhbmR5YnJpZGdlX3Bjb2RlX3dyaXRlKGRldl9wcml2LCBIU1dfUENPREVfREVfV1JJVEVf RlJFUV9SRVEsCj4gLQkJCQnCoMKgwqDCoMKgwqAweDgwMDAwMDAwKTsKPiAtCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKPiArCWk5eHhfcGZpdF9lbmFibGUoaW50ZWxfY3J0 Yyk7Cj4gwqAKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoIlBDb2RlIENEQ0xLIGZyZXEg Y2hhbmdlIG5vdGlmeSBmYWlsZWQgKGVyciAlZCwKPiBmcmVxICVkKVxuIiwKPiAtCQkJwqDCoHJl dCwgY2RjbGspOwo+IC0JCXJldHVybjsKPiAtCX0KPiArCWludGVsX2NvbG9yX2xvYWRfbHV0cygm cGlwZV9jb25maWctPmJhc2UpOwo+IMKgCj4gLQlpZiAoZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28g IT0gMCAmJgo+IC0JwqDCoMKgwqBkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSB2Y28pCj4gLQkJ Ynh0X2RlX3BsbF9kaXNhYmxlKGRldl9wcml2KTsKPiArCWludGVsX3VwZGF0ZV93YXRlcm1hcmtz KGludGVsX2NydGMpOwo+ICsJaW50ZWxfZW5hYmxlX3BpcGUoaW50ZWxfY3J0Yyk7Cj4gwqAKPiAt CWlmIChkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSB2Y28pCj4gLQkJYnh0X2RlX3BsbF9lbmFi bGUoZGV2X3ByaXYsIHZjbyk7Cj4gKwlhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKGNydGMpOwo+ICsJ ZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOwo+IMKgCj4gLQl2YWwgPSBkaXZpZGVyIHwgc2tsX2Nk Y2xrX2RlY2ltYWwoY2RjbGspOwo+IC0JLyoKPiAtCcKgKiBGSVhNRSBpZiBvbmx5IHRoZSBjZDJ4 IGRpdmlkZXIgbmVlZHMgY2hhbmdpbmcsIGl0IGNvdWxkIGJlIGRvbmUKPiAtCcKgKiB3aXRob3V0 IHNodXR0aW5nIG9mZiB0aGUgcGlwZSAoaWYgb25seSBvbmUgcGlwZSBpcyBhY3RpdmUpLgo+IC0J wqAqLwo+IC0JdmFsIHw9IEJYVF9DRENMS19DRDJYX1BJUEVfTk9ORTsKPiAtCS8qCj4gLQnCoCog RGlzYWJsZSBTU0EgUHJlY2hhcmdlIHdoZW4gQ0QgY2xvY2sgZnJlcXVlbmN5IDwgNTAwIE1IeiwK PiAtCcKgKiBlbmFibGUgb3RoZXJ3aXNlLgo+IC0JwqAqLwo+IC0JaWYgKGNkY2xrID49IDUwMDAw MCkKPiAtCQl2YWwgfD0gQlhUX0NEQ0xLX1NTQV9QUkVDSEFSR0VfRU5BQkxFOwo+IC0JSTkxNV9X UklURShDRENMS19DVEwsIHZhbCk7Cj4gKwlpbnRlbF9lbmNvZGVyc19lbmFibGUoY3J0YywgcGlw ZV9jb25maWcsIG9sZF9zdGF0ZSk7Cj4gK30KPiDCoAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYt PnJwcy5od19sb2NrKTsKPiAtCXJldCA9IHNhbmR5YnJpZGdlX3Bjb2RlX3dyaXRlKGRldl9wcml2 LCBIU1dfUENPREVfREVfV1JJVEVfRlJFUV9SRVEsCj4gLQkJCQnCoMKgwqDCoMKgwqBESVZfUk9V TkRfVVAoY2RjbGssIDI1MDAwKSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdf bG9jayk7Cj4gK3N0YXRpYyB2b2lkIGk5eHhfcGZpdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4g wqAKPiAtCWlmIChyZXQpIHsKPiAtCQlEUk1fRVJST1IoIlBDb2RlIENEQ0xLIGZyZXEgc2V0IGZh aWxlZCwgKGVyciAlZCwgZnJlcSAlZClcbiIsCj4gLQkJCcKgwqByZXQsIGNkY2xrKTsKPiArCWlm ICghY3J0Yy0+Y29uZmlnLT5nbWNoX3BmaXQuY29udHJvbCkKPiDCoAkJcmV0dXJuOwo+IC0JfQo+ IMKgCj4gLQlpbnRlbF91cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+ICsJYXNzZXJ0X3BpcGVfZGlz YWJsZWQoZGV2X3ByaXYsIGNydGMtPnBpcGUpOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoImRp c2FibGluZyBwZml0LCBjdXJyZW50OiAweCUwOHhcbiIsCj4gKwkJCcKgSTkxNV9SRUFEKFBGSVRf Q09OVFJPTCkpOwo+ICsJSTkxNV9XUklURShQRklUX0NPTlRST0wsIDApOwo+IMKgfQo+IMKgCj4g LXN0YXRpYyB2b2lkIGJ4dF9zYW5pdGl6ZV9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGk5eHhfY3J0Y19kaXNhYmxlKHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKPiArCQkJwqDCoMKgwqDCoMKgc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiDCoHsKPiAtCXUzMiBjZGN0bCwgZXhwZWN0ZWQ7Cj4g LQo+IC0JaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiAtCj4gLQlpZiAoZGV2X3ByaXYt PmNkY2xrX3BsbC52Y28gPT0gMCB8fAo+IC0JwqDCoMKgwqBkZXZfcHJpdi0+Y2RjbGtfZnJlcSA9 PSBkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZikKPiAtCQlnb3RvIHNhbml0aXplOwo+IC0KPiAtCS8q IERQTEwgb2theTsgdmVyaWZ5IHRoZSBjZGNsb2NrCj4gLQnCoCoKPiAtCcKgKiBTb21lIEJJT1Mg dmVyc2lvbnMgbGVhdmUgYW4gaW5jb3JyZWN0IGRlY2ltYWwgZnJlcXVlbmN5IHZhbHVlIGFuZAo+ IC0JwqAqIHNldCByZXNlcnZlZCBNQlogYml0cyBpbiBDRENMS19DVEwgYXQgbGVhc3QgZHVyaW5n IGV4aXRpbmcgZnJvbQo+IFM0LAo+IC0JwqAqIHNvIHNhbml0aXplIHRoaXMgcmVnaXN0ZXIuCj4g LQnCoCovCj4gLQljZGN0bCA9IEk5MTVfUkVBRChDRENMS19DVEwpOwo+IC0JLyoKPiAtCcKgKiBM ZXQncyBpZ25vcmUgdGhlIHBpcGUgZmllbGQsIHNpbmNlIEJJT1MgY291bGQgaGF2ZSBjb25maWd1 cmVkIHRoZQo+IC0JwqAqIGRpdmlkZXJzIGJvdGggc3luY2hpbmcgdG8gYW4gYWN0aXZlIHBpcGUs IG9yIGFzeW5jaHJvbm91c2x5Cj4gLQnCoCogKFBJUEVfTk9ORSkuCj4gLQnCoCovCj4gLQljZGN0 bCAmPSB+QlhUX0NEQ0xLX0NEMlhfUElQRV9OT05FOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRj ID0gb2xkX2NydGNfc3RhdGUtPmJhc2UuY3J0YzsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Yyk7Cj4gKwlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gwqAKPiAtCWV4cGVj dGVkID0gKGNkY3RsICYgQlhUX0NEQ0xLX0NEMlhfRElWX1NFTF9NQVNLKSB8Cj4gLQkJwqDCoMKg c2tsX2NkY2xrX2RlY2ltYWwoZGV2X3ByaXYtPmNkY2xrX2ZyZXEpOwo+IMKgCS8qCj4gLQnCoCog RGlzYWJsZSBTU0EgUHJlY2hhcmdlIHdoZW4gQ0QgY2xvY2sgZnJlcXVlbmN5IDwgNTAwIE1IeiwK PiAtCcKgKiBlbmFibGUgb3RoZXJ3aXNlLgo+ICsJwqAqIE9uIGdlbjIgcGxhbmVzIGFyZSBkb3Vi bGUgYnVmZmVyZWQgYnV0IHRoZSBwaXBlIGlzbid0LCBzbyB3ZSBtdXN0Cj4gKwnCoCogd2FpdCBm b3IgcGxhbmVzIHRvIGZ1bGx5IHR1cm4gb2ZmIGJlZm9yZSBkaXNhYmxpbmcgdGhlIHBpcGUuCj4g wqAJwqAqLwo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19mcmVxID49IDUwMDAwMCkKPiAtCQlleHBl Y3RlZCB8PSBCWFRfQ0RDTEtfU1NBX1BSRUNIQVJHRV9FTkFCTEU7Cj4gLQo+IC0JaWYgKGNkY3Rs ID09IGV4cGVjdGVkKQo+IC0JCS8qIEFsbCB3ZWxsOyBub3RoaW5nIHRvIHNhbml0aXplICovCj4g LQkJcmV0dXJuOwo+ICsJaWYgKElTX0dFTjIoZGV2X3ByaXYpKQo+ICsJCWludGVsX3dhaXRfZm9y X3ZibGFuayhkZXZfcHJpdiwgcGlwZSk7Cj4gwqAKPiAtc2FuaXRpemU6Cj4gLQlEUk1fREVCVUdf S01TKCJTYW5pdGl6aW5nIGNkY2xrIHByb2dyYW1tZWQgYnkgcHJlLW9zXG4iKTsKPiArCWludGVs X2VuY29kZXJzX2Rpc2FibGUoY3J0Yywgb2xkX2NydGNfc3RhdGUsIG9sZF9zdGF0ZSk7Cj4gwqAK PiAtCS8qIGZvcmNlIGNkY2xrIHByb2dyYW1taW5nICovCj4gLQlkZXZfcHJpdi0+Y2RjbGtfZnJl cSA9IDA7Cj4gKwlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOwo+ICsJYXNzZXJ0X3ZibGFua19k aXNhYmxlZChjcnRjKTsKPiDCoAo+IC0JLyogZm9yY2UgZnVsbCBQTEwgZGlzYWJsZSArIGVuYWJs ZSAqLwo+IC0JZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPSAtMTsKPiAtfQo+ICsJaW50ZWxfZGlz YWJsZV9waXBlKGludGVsX2NydGMpOwo+IMKgCj4gLXZvaWQgYnh0X2luaXRfY2RjbGsoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlpbnQgY2RjbGs7Cj4gKwlpOXh4 X3BmaXRfZGlzYWJsZShpbnRlbF9jcnRjKTsKPiDCoAo+IC0JYnh0X3Nhbml0aXplX2NkY2xrKGRl dl9wcml2KTsKPiArCWludGVsX2VuY29kZXJzX3Bvc3RfZGlzYWJsZShjcnRjLCBvbGRfY3J0Y19z dGF0ZSwgb2xkX3N0YXRlKTsKPiDCoAo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19mcmVxICE9IDAg JiYgZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gIT0gMCkKPiAtCQlyZXR1cm47Cj4gKwlpZiAoIWlu dGVsX2NydGNfaGFzX3R5cGUoaW50ZWxfY3J0Yy0+Y29uZmlnLCBJTlRFTF9PVVRQVVRfRFNJKSkg ewo+ICsJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKPiArCQkJY2h2X2Rpc2FibGVfcGxs KGRldl9wcml2LCBwaXBlKTsKPiArCQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkK PiArCQkJdmx2X2Rpc2FibGVfcGxsKGRldl9wcml2LCBwaXBlKTsKPiArCQllbHNlCj4gKwkJCWk5 eHhfZGlzYWJsZV9wbGwoaW50ZWxfY3J0Yyk7Cj4gKwl9Cj4gwqAKPiAtCS8qCj4gLQnCoCogRklY TUU6Cj4gLQnCoCogLSBUaGUgaW5pdGlhbCBDRENMSyBuZWVkcyB0byBiZSByZWFkIGZyb20gVkJU Lgo+IC0JwqAqwqDCoMKgTmVlZCB0byBtYWtlIHRoaXMgY2hhbmdlIGFmdGVyIFZCVCBoYXMgY2hh bmdlcyBmb3IgQlhULgo+IC0JwqAqLwo+IC0JaWYgKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ IC0JCWNkY2xrID0gZ2xrX2NhbGNfY2RjbGsoMCk7Cj4gLQllbHNlCj4gLQkJY2RjbGsgPSBieHRf Y2FsY19jZGNsaygwKTsKPiArCWludGVsX2VuY29kZXJzX3Bvc3RfcGxsX2Rpc2FibGUoY3J0Yywg b2xkX2NydGNfc3RhdGUsIG9sZF9zdGF0ZSk7Cj4gwqAKPiAtCWJ4dF9zZXRfY2RjbGsoZGV2X3By aXYsIGNkY2xrKTsKPiArCWlmICghSVNfR0VOMihkZXZfcHJpdikpCj4gKwkJaW50ZWxfc2V0X2Nw dV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgcGlwZSwgZmFsc2UpOwo+IMKgfQo+ IMKgCj4gLXZvaWQgYnh0X3VuaW5pdF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gK3N0YXRpYyB2b2lkIGludGVsX2NydGNfZGlzYWJsZV9ub2F0b21pYyhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gwqB7Cj4gLQlieHRfc2V0X2NkY2xrKGRldl9wcml2LCBkZXZfcHJp di0+Y2RjbGtfcGxsLnJlZik7Cj4gLX0KPiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy Owo+ICsJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMp Owo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5k ZXYpOwo+ICsJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBkb21haW47Cj4gKwl1bnNp Z25lZCBsb25nIGRvbWFpbnM7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4g KwlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCWludCByZXQ7Cj4gwqAK PiAtc3RhdGljIGludCBza2xfY2FsY19jZGNsayhpbnQgbWF4X3BpeGNsaywgaW50IHZjbykKPiAt ewo+IC0JaWYgKHZjbyA9PSA4NjQwMDAwKSB7Cj4gLQkJaWYgKG1heF9waXhjbGsgPiA1NDAwMDAp Cj4gLQkJCXJldHVybiA2MTcxNDM7Cj4gLQkJZWxzZSBpZiAobWF4X3BpeGNsayA+IDQzMjAwMCkK PiAtCQkJcmV0dXJuIDU0MDAwMDsKPiAtCQllbHNlIGlmIChtYXhfcGl4Y2xrID4gMzA4NTcxKQo+ IC0JCQlyZXR1cm4gNDMyMDAwOwo+IC0JCWVsc2UKPiAtCQkJcmV0dXJuIDMwODU3MTsKPiAtCX0g ZWxzZSB7Cj4gLQkJaWYgKG1heF9waXhjbGsgPiA1NDAwMDApCj4gLQkJCXJldHVybiA2NzUwMDA7 Cj4gLQkJZWxzZSBpZiAobWF4X3BpeGNsayA+IDQ1MDAwMCkKPiAtCQkJcmV0dXJuIDU0MDAwMDsK PiAtCQllbHNlIGlmIChtYXhfcGl4Y2xrID4gMzM3NTAwKQo+IC0JCQlyZXR1cm4gNDUwMDAwOwo+ IC0JCWVsc2UKPiAtCQkJcmV0dXJuIDMzNzUwMDsKPiAtCX0KPiAtfQo+ICsJaWYgKCFpbnRlbF9j cnRjLT5hY3RpdmUpCj4gKwkJcmV0dXJuOwo+IMKgCj4gLXN0YXRpYyB2b2lkCj4gLXNrbF9kcGxs MF91cGRhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIg dmFsOwo+ICsJaWYgKHRvX2ludGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKS0+ YmFzZS52aXNpYmxlKSB7Cj4gKwkJV0FSTl9PTihpbnRlbF9jcnRjLT5mbGlwX3dvcmspOwo+IMKg Cj4gLQlkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZiA9IDI0MDAwOwo+IC0JZGV2X3ByaXYtPmNkY2xr X3BsbC52Y28gPSAwOwo+ICsJCWludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnlfbm9hdG9taWMoY3J0 Yyk7Cj4gwqAKPiAtCXZhbCA9IEk5MTVfUkVBRChMQ1BMTDFfQ1RMKTsKPiAtCWlmICgodmFsICYg TENQTExfUExMX0VOQUJMRSkgPT0gMCkKPiAtCQlyZXR1cm47Cj4gKwkJaW50ZWxfY3J0Y19kaXNh YmxlX3BsYW5lcyhjcnRjLCAxIDw8IGRybV9wbGFuZV9pbmRleChjcnRjLQo+ID5wcmltYXJ5KSk7 Cj4gKwkJdG9faW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpLT5iYXNlLnZp c2libGUgPQo+IGZhbHNlOwo+ICsJfQo+IMKgCj4gLQlpZiAoV0FSTl9PTigodmFsICYgTENQTExf UExMX0xPQ0spID09IDApKQo+IC0JCXJldHVybjsKPiArCXN0YXRlID0gZHJtX2F0b21pY19zdGF0 ZV9hbGxvYyhjcnRjLT5kZXYpOwo+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gY3J0Yy0+ZGV2LT5t b2RlX2NvbmZpZy5hY3F1aXJlX2N0eDsKPiDCoAo+IC0JdmFsID0gSTkxNV9SRUFEKERQTExfQ1RS TDEpOwo+ICsJLyogRXZlcnl0aGluZydzIGFscmVhZHkgbG9ja2VkLCAtRURFQURMSyBjYW4ndCBo YXBwZW4uICovCj4gKwljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0 YXRlLCBpbnRlbF9jcnRjKTsKPiArCXJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5l Y3RvcnMoc3RhdGUsIGNydGMpOwo+IMKgCj4gLQlpZiAoV0FSTl9PTigodmFsICYgKERQTExfQ1RS TDFfSERNSV9NT0RFKFNLTF9EUExMMCkgfAo+IC0JCQnCoMKgwqDCoERQTExfQ1RSTDFfU1NDKFNL TF9EUExMMCkgfAo+IC0JCQnCoMKgwqDCoERQTExfQ1RSTDFfT1ZFUlJJREUoU0tMX0RQTEwwKSkp ICE9Cj4gLQkJwqDCoMKgwqBEUExMX0NUUkwxX09WRVJSSURFKFNLTF9EUExMMCkpKQo+IC0JCXJl dHVybjsKPiArCVdBUk5fT04oSVNfRVJSKGNydGNfc3RhdGUpIHx8IHJldCk7Cj4gwqAKPiAtCXN3 aXRjaCAodmFsICYgRFBMTF9DVFJMMV9MSU5LX1JBVEVfTUFTSyhTS0xfRFBMTDApKSB7Cj4gLQlj YXNlIERQTExfQ1RSTDFfTElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzgxMCwgU0tMX0RQ TEwwKToKPiAtCWNhc2UgRFBMTF9DVFJMMV9MSU5LX1JBVEUoRFBMTF9DVFJMMV9MSU5LX1JBVEVf MTM1MCwgU0tMX0RQTEwwKToKPiAtCWNhc2UgRFBMTF9DVFJMMV9MSU5LX1JBVEUoRFBMTF9DVFJM MV9MSU5LX1JBVEVfMTYyMCwgU0tMX0RQTEwwKToKPiAtCWNhc2UgRFBMTF9DVFJMMV9MSU5LX1JB VEUoRFBMTF9DVFJMMV9MSU5LX1JBVEVfMjcwMCwgU0tMX0RQTEwwKToKPiAtCQlkZXZfcHJpdi0+ Y2RjbGtfcGxsLnZjbyA9IDgxMDAwMDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERQTExfQ1RSTDFf TElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzEwODAsIFNLTF9EUExMMCk6Cj4gLQljYXNl IERQTExfQ1RSTDFfTElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzIxNjAsIFNLTF9EUExM MCk6Cj4gLQkJZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPSA4NjQwMDAwOwo+IC0JCWJyZWFrOwo+ IC0JZGVmYXVsdDoKPiAtCQlNSVNTSU5HX0NBU0UodmFsICYgRFBMTF9DVFJMMV9MSU5LX1JBVEVf TUFTSyhTS0xfRFBMTDApKTsKPiAtCQlicmVhazsKPiAtCX0KPiAtfQo+ICsJZGV2X3ByaXYtPmRp c3BsYXkuY3J0Y19kaXNhYmxlKGNydGNfc3RhdGUsIHN0YXRlKTsKPiDCoAo+IC12b2lkIHNrbF9z ZXRfcHJlZmVycmVkX2NkY2xrX3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGludCB2Y28pCj4gLXsKPiAtCWJvb2wgY2hhbmdlZCA9IGRldl9wcml2LT5za2xfcHJlZmVycmVk X3Zjb19mcmVxICE9IHZjbzsKPiArCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiDCoAo+ IC0JZGV2X3ByaXYtPnNrbF9wcmVmZXJyZWRfdmNvX2ZyZXEgPSB2Y287Cj4gLQo+IC0JaWYgKGNo YW5nZWQpCj4gLQkJaW50ZWxfdXBkYXRlX21heF9jZGNsayhkZXZfcHJpdik7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkCj4gLXNrbF9kcGxsMF9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpbnQgdmNvKQo+IC17Cj4gLQlpbnQgbWluX2NkY2xrID0gc2tsX2NhbGNfY2Rj bGsoMCwgdmNvKTsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JV0FSTl9PTih2Y28gIT0gODEwMDAwMCAm JiB2Y28gIT0gODY0MDAwMCk7Cj4gLQo+IC0JLyogc2VsZWN0IHRoZSBtaW5pbXVtIENEQ0xLIGJl Zm9yZSBlbmFibGluZyBEUExMIDAgKi8KPiAtCXZhbCA9IENEQ0xLX0ZSRVFfMzM3XzMwOCB8IHNr bF9jZGNsa19kZWNpbWFsKG1pbl9jZGNsayk7Cj4gLQlJOTE1X1dSSVRFKENEQ0xLX0NUTCwgdmFs KTsKPiAtCVBPU1RJTkdfUkVBRChDRENMS19DVEwpOwo+IC0KPiAtCS8qCj4gLQnCoCogV2UgYWx3 YXlzIGVuYWJsZSBEUExMMCB3aXRoIHRoZSBsb3dlc3QgbGluayByYXRlIHBvc3NpYmxlLCBidXQK PiBzdGlsbAo+IC0JwqAqIHRha2luZyBpbnRvIGFjY291bnQgdGhlIFZDTyByZXF1aXJlZCB0byBv cGVyYXRlIHRoZSBlRFAgcGFuZWwgYXQKPiB0aGUKPiAtCcKgKiBkZXNpcmVkIGZyZXF1ZW5jeS4g VGhlIHVzdWFsIERQIGxpbmsgcmF0ZXMgb3BlcmF0ZSB3aXRoIGEgVkNPIG9mCj4gLQnCoCogODEw MCB3aGlsZSB0aGUgZURQIDEuNCBhbHRlcm5hdGUgbGluayByYXRlcyBuZWVkIGEgVkNPIG9mIDg2 NDAuCj4gLQnCoCogVGhlIG1vZGVzZXQgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHNlbGVj dGlvbiBvZiB0aGUgZXhhY3QKPiBsaW5rCj4gLQnCoCogcmF0ZSBsYXRlciBvbiwgd2l0aCB0aGUg Y29uc3RyYWludCBvZiBjaG9vc2luZyBhIGZyZXF1ZW5jeSB0aGF0Cj4gLQnCoCogd29ya3Mgd2l0 aCB2Y28uCj4gLQnCoCovCj4gLQl2YWwgPSBJOTE1X1JFQUQoRFBMTF9DVFJMMSk7Cj4gLQo+IC0J dmFsICY9IH4oRFBMTF9DVFJMMV9IRE1JX01PREUoU0tMX0RQTEwwKSB8IERQTExfQ1RSTDFfU1ND KFNLTF9EUExMMCkKPiB8Cj4gLQkJwqBEUExMX0NUUkwxX0xJTktfUkFURV9NQVNLKFNLTF9EUExM MCkpOwo+IC0JdmFsIHw9IERQTExfQ1RSTDFfT1ZFUlJJREUoU0tMX0RQTEwwKTsKPiAtCWlmICh2 Y28gPT0gODY0MDAwMCkKPiAtCQl2YWwgfD0gRFBMTF9DVFJMMV9MSU5LX1JBVEUoRFBMTF9DVFJM MV9MSU5LX1JBVEVfMTA4MCwKPiAtCQkJCQnCoMKgwqDCoFNLTF9EUExMMCk7Cj4gLQllbHNlCj4g LQkJdmFsIHw9IERQTExfQ1RSTDFfTElOS19SQVRFKERQTExfQ1RSTDFfTElOS19SQVRFXzgxMCwK PiAtCQkJCQnCoMKgwqDCoFNLTF9EUExMMCk7Cj4gLQo+IC0JSTkxNV9XUklURShEUExMX0NUUkwx LCB2YWwpOwo+IC0JUE9TVElOR19SRUFEKERQTExfQ1RSTDEpOwo+IC0KPiAtCUk5MTVfV1JJVEUo TENQTEwxX0NUTCwgSTkxNV9SRUFEKExDUExMMV9DVEwpIHwgTENQTExfUExMX0VOQUJMRSk7Cj4g LQo+IC0JaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LAo+IC0JCQkJwqDCoMKg wqBMQ1BMTDFfQ1RMLCBMQ1BMTF9QTExfTE9DSywKPiBMQ1BMTF9QTExfTE9DSywKPiAtCQkJCcKg wqDCoMKgNSkpCj4gLQkJRFJNX0VSUk9SKCJEUExMMCBub3QgbG9ja2VkXG4iKTsKPiAtCj4gLQlk ZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyA9IHZjbzsKPiAtCj4gLQkvKiBXZSdsbCB3YW50IHRvIGtl ZXAgdXNpbmcgdGhlIGN1cnJlbnQgdmNvIGZyb20gbm93IG9uLiAqLwo+IC0Jc2tsX3NldF9wcmVm ZXJyZWRfY2RjbGtfdmNvKGRldl9wcml2LCB2Y28pOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+ IC1za2xfZHBsbDBfZGlzYWJsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g LXsKPiAtCUk5MTVfV1JJVEUoTENQTEwxX0NUTCwgSTkxNV9SRUFEKExDUExMMV9DVEwpICYgfkxD UExMX1BMTF9FTkFCTEUpOwo+IC0JaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2 LAo+IC0JCQkJwqDCoMKgTENQTEwxX0NUTCwgTENQTExfUExMX0xPQ0ssIDAsCj4gLQkJCQnCoMKg wqAxKSkKPiAtCQlEUk1fRVJST1IoIkNvdWxkbid0IGRpc2FibGUgRFBMTDBcbiIpOwo+IC0KPiAt CWRldl9wcml2LT5jZGNsa19wbGwudmNvID0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgc2ts X3NldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBjZGNsaywg aW50Cj4gdmNvKQo+IC17Cj4gLQl1MzIgZnJlcV9zZWxlY3QsIHBjdV9hY2s7Cj4gLQlpbnQgcmV0 Owo+IC0KPiAtCVdBUk5fT04oKGNkY2xrID09IDI0MDAwKSAhPSAodmNvID09IDApKTsKPiAtCj4g LQlEUk1fREVCVUdfRFJJVkVSKCJDaGFuZ2luZyBDRENMSyB0byAlZCBrSHogKFZDTyAlZCBrSHop XG4iLCBjZGNsaywKPiB2Y28pOwo+IC0KPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdf bG9jayk7Cj4gLQlyZXQgPSBza2xfcGNvZGVfcmVxdWVzdChkZXZfcHJpdiwgU0tMX1BDT0RFX0NE Q0xLX0NPTlRST0wsCj4gLQkJCQlTS0xfQ0RDTEtfUFJFUEFSRV9GT1JfQ0hBTkdFLAo+IC0JCQkJ U0tMX0NEQ0xLX1JFQURZX0ZPUl9DSEFOR0UsCj4gLQkJCQlTS0xfQ0RDTEtfUkVBRFlfRk9SX0NI QU5HRSwgMyk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gLQlp ZiAocmV0KSB7Cj4gLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5mb3JtIFBDVSBhYm91dCBjZGNs ayBjaGFuZ2UgKCVkKVxuIiwKPiAtCQkJwqDCoHJldCk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0K PiAtCS8qIHNldCBDRENMS19DVEwgKi8KPiAtCXN3aXRjaCAoY2RjbGspIHsKPiAtCWNhc2UgNDUw MDAwOgo+IC0JY2FzZSA0MzIwMDA6Cj4gLQkJZnJlcV9zZWxlY3QgPSBDRENMS19GUkVRXzQ1MF80 MzI7Cj4gLQkJcGN1X2FjayA9IDE7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDU0MDAwMDoKPiAtCQlm cmVxX3NlbGVjdCA9IENEQ0xLX0ZSRVFfNTQwOwo+IC0JCXBjdV9hY2sgPSAyOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSAzMDg1NzE6Cj4gLQljYXNlIDMzNzUwMDoKPiAtCWRlZmF1bHQ6Cj4gLQkJZnJl cV9zZWxlY3QgPSBDRENMS19GUkVRXzMzN18zMDg7Cj4gLQkJcGN1X2FjayA9IDA7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIDYxNzE0MzoKPiAtCWNhc2UgNjc1MDAwOgo+IC0JCWZyZXFfc2VsZWN0ID0g Q0RDTEtfRlJFUV82NzVfNjE3Owo+IC0JCXBjdV9hY2sgPSAzOwo+IC0JCWJyZWFrOwo+IC0JfQo+ IC0KPiAtCWlmIChkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSAwICYmCj4gLQnCoMKgwqDCoGRl dl9wcml2LT5jZGNsa19wbGwudmNvICE9IHZjbykKPiAtCQlza2xfZHBsbDBfZGlzYWJsZShkZXZf cHJpdik7Cj4gLQo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19wbGwudmNvICE9IHZjbykKPiAtCQlz a2xfZHBsbDBfZW5hYmxlKGRldl9wcml2LCB2Y28pOwo+IC0KPiAtCUk5MTVfV1JJVEUoQ0RDTEtf Q1RMLCBmcmVxX3NlbGVjdCB8IHNrbF9jZGNsa19kZWNpbWFsKGNkY2xrKSk7Cj4gLQlQT1NUSU5H X1JFQUQoQ0RDTEtfQ1RMKTsKPiAtCj4gLQkvKiBpbmZvcm0gUENVIG9mIHRoZSBjaGFuZ2UgKi8K PiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gLQlzYW5keWJyaWRnZV9w Y29kZV93cml0ZShkZXZfcHJpdiwgU0tMX1BDT0RFX0NEQ0xLX0NPTlRST0wsIHBjdV9hY2spOwo+ IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0KPiAtCWludGVsX3Vw ZGF0ZV9jZGNsayhkZXZfcHJpdik7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHNrbF9zYW5pdGl6 ZV9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IC0KPiAtdm9pZCBz a2xfdW5pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+ IC0Jc2tsX3NldF9jZGNsayhkZXZfcHJpdiwgZGV2X3ByaXYtPmNkY2xrX3BsbC5yZWYsIDApOwo+ IC19Cj4gLQo+IC12b2lkIHNrbF9pbml0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0JaW50IGNkY2xrLCB2Y287Cj4gLQo+IC0Jc2tsX3Nhbml0aXplX2Nk Y2xrKGRldl9wcml2KTsKPiAtCj4gLQlpZiAoZGV2X3ByaXYtPmNkY2xrX2ZyZXEgIT0gMCAmJiBk ZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyAhPSAwKSB7Cj4gLQkJLyoKPiAtCQnCoCogVXNlIHRoZSBj dXJyZW50IHZjbyBhcyBvdXIgaW5pdGlhbAo+IC0JCcKgKiBndWVzcyBhcyB0byB3aGF0IHRoZSBw cmVmZXJyZWQgdmNvIGlzLgo+IC0JCcKgKi8KPiAtCQlpZiAoZGV2X3ByaXYtPnNrbF9wcmVmZXJy ZWRfdmNvX2ZyZXEgPT0gMCkKPiAtCQkJc2tsX3NldF9wcmVmZXJyZWRfY2RjbGtfdmNvKGRldl9w cml2LAo+IC0JCQkJCQnCoMKgwqDCoGRldl9wcml2LT5jZGNsa19wbGwudmNvKTsKPiAtCQlyZXR1 cm47Cj4gLQl9Cj4gLQo+IC0JdmNvID0gZGV2X3ByaXYtPnNrbF9wcmVmZXJyZWRfdmNvX2ZyZXE7 Cj4gLQlpZiAodmNvID09IDApCj4gLQkJdmNvID0gODEwMDAwMDsKPiAtCWNkY2xrID0gc2tsX2Nh bGNfY2RjbGsoMCwgdmNvKTsKPiAtCj4gLQlza2xfc2V0X2NkY2xrKGRldl9wcml2LCBjZGNsaywg dmNvKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgc2tsX3Nhbml0aXplX2NkY2xrKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdWludDMyX3QgY2RjdGwsIGV4cGVj dGVkOwo+IC0KPiAtCS8qCj4gLQnCoCogY2hlY2sgaWYgdGhlIHByZS1vcyBpbnRpYWxpemVkIHRo ZSBkaXNwbGF5Cj4gLQnCoCogVGhlcmUgaXMgU1dGMTggc2NyYXRjaHBhZCByZWdpc3RlciBkZWZp bmVkIHdoaWNoIGlzIHNldCBieSB0aGUKPiAtCcKgKiBwcmUtb3Mgd2hpY2ggY2FuIGJlIHVzZWQg YnkgdGhlIE9TIGRyaXZlcnMgdG8gY2hlY2sgdGhlIHN0YXR1cwo+IC0JwqAqLwo+IC0JaWYgKChJ OTE1X1JFQUQoU1dGX0lMSygweDE4KSkgJiAweDAwRkZGRkZGKSA9PSAwKQo+IC0JCWdvdG8gc2Fu aXRpemU7Cj4gLQo+IC0JaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiAtCS8qIElzIFBM TCBlbmFibGVkIGFuZCBsb2NrZWQgPyAqLwo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19wbGwudmNv ID09IDAgfHwKPiAtCcKgwqDCoMKgZGV2X3ByaXYtPmNkY2xrX2ZyZXEgPT0gZGV2X3ByaXYtPmNk Y2xrX3BsbC5yZWYpCj4gLQkJZ290byBzYW5pdGl6ZTsKPiAtCj4gLQkvKiBEUExMIG9rYXk7IHZl cmlmeSB0aGUgY2RjbG9jawo+IC0JwqAqCj4gLQnCoCogTm90aWNlZCBpbiBzb21lIGluc3RhbmNl cyB0aGF0IHRoZSBmcmVxIHNlbGVjdGlvbiBpcyBjb3JyZWN0IGJ1dAo+IC0JwqAqIGRlY2ltYWwg cGFydCBpcyBwcm9ncmFtbWVkIHdyb25nIGZyb20gQklPUyB3aGVyZSBwcmUtb3MgZG9lcyBub3QK PiAtCcKgKiBlbmFibGUgZGlzcGxheS4gVmVyaWZ5IHRoZSBzYW1lIGFzIHdlbGwuCj4gLQnCoCov Cj4gLQljZGN0bCA9IEk5MTVfUkVBRChDRENMS19DVEwpOwo+IC0JZXhwZWN0ZWQgPSAoY2RjdGwg JiBDRENMS19GUkVRX1NFTF9NQVNLKSB8Cj4gLQkJc2tsX2NkY2xrX2RlY2ltYWwoZGV2X3ByaXYt PmNkY2xrX2ZyZXEpOwo+IC0JaWYgKGNkY3RsID09IGV4cGVjdGVkKQo+IC0JCS8qIEFsbCB3ZWxs OyBub3RoaW5nIHRvIHNhbml0aXplICovCj4gLQkJcmV0dXJuOwo+IC0KPiAtc2FuaXRpemU6Cj4g LQlEUk1fREVCVUdfS01TKCJTYW5pdGl6aW5nIGNkY2xrIHByb2dyYW1tZWQgYnkgcHJlLW9zXG4i KTsKPiAtCj4gLQkvKiBmb3JjZSBjZGNsayBwcm9ncmFtbWluZyAqLwo+IC0JZGV2X3ByaXYtPmNk Y2xrX2ZyZXEgPSAwOwo+IC0JLyogZm9yY2UgZnVsbCBQTEwgZGlzYWJsZSArIGVuYWJsZSAqLwo+ IC0JZGV2X3ByaXYtPmNkY2xrX3BsbC52Y28gPSAtMTsKPiAtfQo+IC0KPiAtLyogQWRqdXN0IENE Y2xrIGRpdmlkZXJzIHRvIGFsbG93IGhpZ2ggcmVzIG9yIHNhdmUgcG93ZXIgaWYgcG9zc2libGUg Ki8KPiAtc3RhdGljIHZvaWQgdmFsbGV5dmlld19zZXRfY2RjbGsoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IGNkY2xrKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gLQl1MzIgdmFsLCBjbWQ7Cj4gLQo+IC0JV0FSTl9PTihkZXZf cHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsoZGV2X3ByaXYpICE9IGRldl9wcml2LQo+ID5jZGNsa19m cmVxKTsKPiAtCj4gLQlpZiAoY2RjbGsgPj0gMzIwMDAwKSAvKiBqdW1wIHRvIGhpZ2hlc3Qgdm9s dGFnZSBmb3IgNDAwTUh6IHRvbyAqLwo+IC0JCWNtZCA9IDI7Cj4gLQllbHNlIGlmIChjZGNsayA9 PSAyNjY2NjcpCj4gLQkJY21kID0gMTsKPiAtCWVsc2UKPiAtCQljbWQgPSAwOwo+IC0KPiAtCW11 dGV4X2xvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gLQl2YWwgPSB2bHZfcHVuaXRfcmVh ZChkZXZfcHJpdiwgUFVOSVRfUkVHX0RTUEZSRVEpOwo+IC0JdmFsICY9IH5EU1BGUkVRR1VBUl9N QVNLOwo+IC0JdmFsIHw9IChjbWQgPDwgRFNQRlJFUUdVQVJfU0hJRlQpOwo+IC0Jdmx2X3B1bml0 X3dyaXRlKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSwgdmFsKTsKPiAtCWlmICh3YWl0X2Zv cigodmx2X3B1bml0X3JlYWQoZGV2X3ByaXYsIFBVTklUX1JFR19EU1BGUkVRKSAmCj4gLQkJwqDC oMKgwqDCoMKgRFNQRlJFUVNUQVRfTUFTSykgPT0gKGNtZCA8PCBEU1BGUkVRU1RBVF9TSElGVCks Cj4gLQkJwqDCoMKgwqDCoDUwKSkgewo+IC0JCURSTV9FUlJPUigidGltZWQgb3V0IHdhaXRpbmcg Zm9yIENEY2xrIGNoYW5nZVxuIik7Cj4gLQl9Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5y cHMuaHdfbG9jayk7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnNiX2xvY2spOwo+IC0K PiAtCWlmIChjZGNsayA9PSA0MDAwMDApIHsKPiAtCQl1MzIgZGl2aWRlcjsKPiAtCj4gLQkJZGl2 aWRlciA9IERJVl9ST1VORF9DTE9TRVNUKGRldl9wcml2LT5ocGxsX2ZyZXEgPDwgMSwgY2RjbGsp Cj4gLSAxOwo+IC0KPiAtCQkvKiBhZGp1c3QgY2RjbGsgZGl2aWRlciAqLwo+IC0JCXZhbCA9IHZs dl9jY2tfcmVhZChkZXZfcHJpdiwgQ0NLX0RJU1BMQVlfQ0xPQ0tfQ09OVFJPTCk7Cj4gLQkJdmFs ICY9IH5DQ0tfRlJFUVVFTkNZX1ZBTFVFUzsKPiAtCQl2YWwgfD0gZGl2aWRlcjsKPiAtCQl2bHZf Y2NrX3dyaXRlKGRldl9wcml2LCBDQ0tfRElTUExBWV9DTE9DS19DT05UUk9MLCB2YWwpOwo+IC0K PiAtCQlpZiAod2FpdF9mb3IoKHZsdl9jY2tfcmVhZChkZXZfcHJpdiwKPiBDQ0tfRElTUExBWV9D TE9DS19DT05UUk9MKSAmCj4gLQkJCcKgwqDCoMKgwqDCoENDS19GUkVRVUVOQ1lfU1RBVFVTKSA9 PSAoZGl2aWRlciA8PAo+IENDS19GUkVRVUVOQ1lfU1RBVFVTX1NISUZUKSwKPiAtCQkJwqDCoMKg wqDCoDUwKSkKPiAtCQkJRFJNX0VSUk9SKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgQ0RjbGsgY2hh bmdlXG4iKTsKPiAtCX0KPiAtCj4gLQkvKiBhZGp1c3Qgc2VsZi1yZWZyZXNoIGV4aXQgbGF0ZW5j eSB2YWx1ZSAqLwo+IC0JdmFsID0gdmx2X2J1bml0X3JlYWQoZGV2X3ByaXYsIEJVTklUX1JFR19C SVNPQyk7Cj4gLQl2YWwgJj0gfjB4N2Y7Cj4gLQo+IC0JLyoKPiAtCcKgKiBGb3IgaGlnaCBiYW5k d2lkdGggY29uZmlncywgd2Ugc2V0IGEgaGlnaGVyIGxhdGVuY3kgaW4gdGhlIGJ1bml0Cj4gLQnC oCogc28gdGhhdCB0aGUgY29yZSBkaXNwbGF5IGZldGNoIGhhcHBlbnMgaW4gdGltZSB0byBhdm9p ZCB1bmRlcnJ1bnMuCj4gLQnCoCovCj4gLQlpZiAoY2RjbGsgPT0gNDAwMDAwKQo+IC0JCXZhbCB8 PSA0NTAwIC8gMjUwOyAvKiA0LjUgdXNlYyAqLwo+IC0JZWxzZQo+IC0JCXZhbCB8PSAzMDAwIC8g MjUwOyAvKiAzLjAgdXNlYyAqLwo+IC0Jdmx2X2J1bml0X3dyaXRlKGRldl9wcml2LCBCVU5JVF9S RUdfQklTT0MsIHZhbCk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+c2JfbG9jayk7 Cj4gLQo+IC0JaW50ZWxfdXBkYXRlX2NkY2xrKGRldl9wcml2KTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgY2hlcnJ5dmlld19zZXRfY2RjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNk Y2xrKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7Cj4gLQl1MzIgdmFsLCBjbWQ7Cj4gLQo+IC0JV0FSTl9PTihkZXZfcHJpdi0+ZGlzcGxh eS5nZXRfY2RjbGsoZGV2X3ByaXYpICE9IGRldl9wcml2LQo+ID5jZGNsa19mcmVxKTsKPiAtCj4g LQlzd2l0Y2ggKGNkY2xrKSB7Cj4gLQljYXNlIDMzMzMzMzoKPiAtCWNhc2UgMzIwMDAwOgo+IC0J Y2FzZSAyNjY2Njc6Cj4gLQljYXNlIDIwMDAwMDoKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJTUlTU0lOR19DQVNFKGNkY2xrKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JLyoKPiAt CcKgKiBTcGVjcyBhcmUgZnVsbCBvZiBtaXNpbmZvcm1hdGlvbiwgYnV0IHRlc3Rpbmcgb24gYWN0 dWFsCj4gLQnCoCogaGFyZHdhcmUgaGFzIHNob3duIHRoYXQgd2UganVzdCBuZWVkIHRvIHdyaXRl IHRoZSBkZXNpcmVkCj4gLQnCoCogQ0NLIGRpdmlkZXIgaW50byB0aGUgUHVuaXQgcmVnaXN0ZXIu Cj4gLQnCoCovCj4gLQljbWQgPSBESVZfUk9VTkRfQ0xPU0VTVChkZXZfcHJpdi0+aHBsbF9mcmVx IDw8IDEsIGNkY2xrKSAtIDE7Cj4gLQo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnJwcy5od19s b2NrKTsKPiAtCXZhbCA9IHZsdl9wdW5pdF9yZWFkKGRldl9wcml2LCBQVU5JVF9SRUdfRFNQRlJF USk7Cj4gLQl2YWwgJj0gfkRTUEZSRVFHVUFSX01BU0tfQ0hWOwo+IC0JdmFsIHw9IChjbWQgPDwg RFNQRlJFUUdVQVJfU0hJRlRfQ0hWKTsKPiAtCXZsdl9wdW5pdF93cml0ZShkZXZfcHJpdiwgUFVO SVRfUkVHX0RTUEZSRVEsIHZhbCk7Cj4gLQlpZiAod2FpdF9mb3IoKHZsdl9wdW5pdF9yZWFkKGRl dl9wcml2LCBQVU5JVF9SRUdfRFNQRlJFUSkgJgo+IC0JCcKgwqDCoMKgwqDCoERTUEZSRVFTVEFU X01BU0tfQ0hWKSA9PSAoY21kIDw8Cj4gRFNQRlJFUVNUQVRfU0hJRlRfQ0hWKSwKPiAtCQnCoMKg wqDCoMKgNTApKSB7Cj4gLQkJRFJNX0VSUk9SKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgQ0RjbGsg Y2hhbmdlXG4iKTsKPiAtCX0KPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2Nr KTsKPiAtCj4gLQlpbnRlbF91cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IHZhbGxleXZpZXdfY2FsY19jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gLQkJCQnCoGludCBtYXhfcGl4Y2xrKQo+IC17Cj4gLQlpbnQgZnJlcV8zMjAgPSAo ZGV2X3ByaXYtPmhwbGxfZnJlcSA8PMKgwqAxKSAlIDMyMDAwMCAhPSAwID8gMzMzMzMzIDoKPiAz MjAwMDA7Cj4gLQlpbnQgbGltaXQgPSBJU19DSEVSUllWSUVXKGRldl9wcml2KSA/IDk1IDogOTA7 Cj4gLQo+IC0JLyoKPiAtCcKgKiBSZWFsbHkgb25seSBhIGZldyBjYXNlcyB0byBkZWFsIHdpdGgs IGFzIG9ubHkgNCBDRGNsa3MgYXJlCj4gc3VwcG9ydGVkOgo+IC0JwqAqwqDCoMKgMjAwTUh6Cj4g LQnCoCrCoMKgwqAyNjdNSHoKPiAtCcKgKsKgwqDCoDMyMC8zMzNNSHogKGRlcGVuZHMgb24gSFBM TCBmcmVxKQo+IC0JwqAqwqDCoMKgNDAwTUh6IChWTFYgb25seSkKPiAtCcKgKiBTbyB3ZSBjaGVj ayB0byBzZWUgd2hldGhlciB3ZSdyZSBhYm92ZSA5MCUgKFZMVikgb3IgOTUlIChDSFYpCj4gLQnC oCogb2YgdGhlIGxvd2VyIGJpbiBhbmQgYWRqdXN0IGlmIG5lZWRlZC4KPiAtCcKgKgo+IC0JwqAq IFdlIHNlZW0gdG8gZ2V0IGFuIHVuc3RhYmxlIG9yIHNvbGlkIGNvbG9yIHBpY3R1cmUgYXQgMjAw TUh6Lgo+IC0JwqAqIE5vdCBzdXJlIHdoYXQncyB3cm9uZy4gRm9yIG5vdyB1c2UgMjAwTUh6IG9u bHkgd2hlbiBhbGwgcGlwZXMKPiAtCcKgKiBhcmUgb2ZmLgo+IC0JwqAqLwo+IC0JaWYgKCFJU19D SEVSUllWSUVXKGRldl9wcml2KSAmJgo+IC0JwqDCoMKgwqBtYXhfcGl4Y2xrID4gZnJlcV8zMjAq bGltaXQvMTAwKQo+IC0JCXJldHVybiA0MDAwMDA7Cj4gLQllbHNlIGlmIChtYXhfcGl4Y2xrID4g MjY2NjY3KmxpbWl0LzEwMCkKPiAtCQlyZXR1cm4gZnJlcV8zMjA7Cj4gLQllbHNlIGlmIChtYXhf cGl4Y2xrID4gMCkKPiAtCQlyZXR1cm4gMjY2NjY3Owo+IC0JZWxzZQo+IC0JCXJldHVybiAyMDAw MDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZ2xrX2NhbGNfY2RjbGsoaW50IG1heF9waXhjbGsp Cj4gLXsKPiAtCWlmIChtYXhfcGl4Y2xrID4gMiAqIDE1ODQwMCkKPiAtCQlyZXR1cm4gMzE2ODAw Owo+IC0JZWxzZSBpZiAobWF4X3BpeGNsayA+IDIgKiA3OTIwMCkKPiAtCQlyZXR1cm4gMTU4NDAw Owo+IC0JZWxzZQo+IC0JCXJldHVybiA3OTIwMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBieHRf Y2FsY19jZGNsayhpbnQgbWF4X3BpeGNsaykKPiAtewo+IC0JaWYgKG1heF9waXhjbGsgPiA1NzYw MDApCj4gLQkJcmV0dXJuIDYyNDAwMDsKPiAtCWVsc2UgaWYgKG1heF9waXhjbGsgPiAzODQwMDAp Cj4gLQkJcmV0dXJuIDU3NjAwMDsKPiAtCWVsc2UgaWYgKG1heF9waXhjbGsgPiAyODgwMDApCj4g LQkJcmV0dXJuIDM4NDAwMDsKPiAtCWVsc2UgaWYgKG1heF9waXhjbGsgPiAxNDQwMDApCj4gLQkJ cmV0dXJuIDI4ODAwMDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gMTQ0MDAwOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW50IHZhbGxleXZpZXdfbW9kZXNldF9jYWxjX2NkY2xrKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5k ZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 Cj4gLQlpbnQgbWF4X3BpeGNsayA9IGludGVsX21heF9waXhlbF9yYXRlKHN0YXRlKTsKPiAtCXN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiAtCQl0b19pbnRlbF9hdG9t aWNfc3RhdGUoc3RhdGUpOwo+IC0KPiAtCWludGVsX3N0YXRlLT5jZGNsayA9IGludGVsX3N0YXRl LT5kZXZfY2RjbGsgPQo+IC0JCXZhbGxleXZpZXdfY2FsY19jZGNsayhkZXZfcHJpdiwgbWF4X3Bp eGNsayk7Cj4gLQo+IC0JaWYgKCFpbnRlbF9zdGF0ZS0+YWN0aXZlX2NydGNzKQo+IC0JCWludGVs X3N0YXRlLT5kZXZfY2RjbGsgPSB2YWxsZXl2aWV3X2NhbGNfY2RjbGsoZGV2X3ByaXYsIDApOwo+ IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGJ4dF9tb2Rlc2V0X2NhbGNf Y2RjbGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOwo+IC0JaW50IG1h eF9waXhjbGsgPSBpbnRlbF9tYXhfcGl4ZWxfcmF0ZShzdGF0ZSk7Cj4gLQlzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICppbnRlbF9zdGF0ZSA9Cj4gLQkJdG9faW50ZWxfYXRvbWljX3N0YXRlKHN0 YXRlKTsKPiAtCWludCBjZGNsazsKPiAtCj4gLQlpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp Cj4gLQkJY2RjbGsgPSBnbGtfY2FsY19jZGNsayhtYXhfcGl4Y2xrKTsKPiAtCWVsc2UKPiAtCQlj ZGNsayA9IGJ4dF9jYWxjX2NkY2xrKG1heF9waXhjbGspOwo+IC0KPiAtCWludGVsX3N0YXRlLT5j ZGNsayA9IGludGVsX3N0YXRlLT5kZXZfY2RjbGsgPSBjZGNsazsKPiAtCj4gLQlpZiAoIWludGVs X3N0YXRlLT5hY3RpdmVfY3J0Y3MpIHsKPiAtCQlpZiAoSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp Cj4gLQkJCWNkY2xrID0gZ2xrX2NhbGNfY2RjbGsoMCk7Cj4gLQkJZWxzZQo+IC0JCQljZGNsayA9 IGJ4dF9jYWxjX2NkY2xrKDApOwo+IC0KPiAtCQlpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xrID0gY2Rj bGs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHZsdl9w cm9ncmFtX3BmaV9jcmVkaXRzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAt ewo+IC0JdW5zaWduZWQgaW50IGNyZWRpdHMsIGRlZmF1bHRfY3JlZGl0czsKPiAtCj4gLQlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJZGVmYXVsdF9jcmVkaXRzID0gUEZJX0NSRURJ VCgxMik7Cj4gLQllbHNlCj4gLQkJZGVmYXVsdF9jcmVkaXRzID0gUEZJX0NSRURJVCg4KTsKPiAt Cj4gLQlpZiAoZGV2X3ByaXYtPmNkY2xrX2ZyZXEgPj0gZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpIHsK PiAtCQkvKiBDSFYgc3VnZ2VzdGVkIHZhbHVlIGlzIDMxIG9yIDYzICovCj4gLQkJaWYgKElTX0NI RVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCQljcmVkaXRzID0gUEZJX0NSRURJVF82MzsKPiAtCQll bHNlCj4gLQkJCWNyZWRpdHMgPSBQRklfQ1JFRElUKDE1KTsKPiAtCX0gZWxzZSB7Cj4gLQkJY3Jl ZGl0cyA9IGRlZmF1bHRfY3JlZGl0czsKPiAtCX0KPiAtCj4gLQkvKgo+IC0JwqAqIFdBIC0gd3Jp dGUgZGVmYXVsdCBjcmVkaXRzIGJlZm9yZSByZS1wcm9ncmFtbWluZwo+IC0JwqAqIEZJWE1FOiBz aG91bGQgd2UgYWxzbyBzZXQgdGhlIHJlc2VuZCBiaXQgaGVyZT8KPiAtCcKgKi8KPiAtCUk5MTVf V1JJVEUoR0NJX0NPTlRST0wsIFZHQV9GQVNUX01PREVfRElTQUJMRSB8Cj4gLQkJwqDCoMKgZGVm YXVsdF9jcmVkaXRzKTsKPiAtCj4gLQlJOTE1X1dSSVRFKEdDSV9DT05UUk9MLCBWR0FfRkFTVF9N T0RFX0RJU0FCTEUgfAo+IC0JCcKgwqDCoGNyZWRpdHMgfCBQRklfQ1JFRElUX1JFU0VORCk7Cj4g LQo+IC0JLyoKPiAtCcKgKiBGSVhNRSBpcyB0aGlzIGd1YXJhbnRlZWQgdG8gY2xlYXIKPiAtCcKg KiBpbW1lZGlhdGVseSBvciBzaG91bGQgd2UgcG9sbCBmb3IgaXQ/Cj4gLQnCoCovCj4gLQlXQVJO X09OKEk5MTVfUkVBRChHQ0lfQ09OVFJPTCkgJiBQRklfQ1JFRElUX1JFU0VORCk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIHZhbGxleXZpZXdfbW9kZXNldF9jb21taXRfY2RjbGsoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUKPiAqb2xkX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gb2xkX3N0YXRlLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpvbGRfaW50 ZWxfc3RhdGUgPQo+IC0JCXRvX2ludGVsX2F0b21pY19zdGF0ZShvbGRfc3RhdGUpOwo+IC0JdW5z aWduZWQgcmVxX2NkY2xrID0gb2xkX2ludGVsX3N0YXRlLT5kZXZfY2RjbGs7Cj4gLQo+IC0JLyoK PiAtCcKgKiBGSVhNRTogV2UgY2FuIGVuZCB1cCBoZXJlIHdpdGggYWxsIHBvd2VyIGRvbWFpbnMg b2ZmLCB5ZXQKPiAtCcKgKiB3aXRoIGEgQ0RDTEsgZnJlcXVlbmN5IG90aGVyIHRoYW4gdGhlIG1p bmltdW0uIFRvIGFjY291bnQKPiAtCcKgKiBmb3IgdGhpcyB0YWtlIHRoZSBQSVBFLUEgcG93ZXIg ZG9tYWluLCB3aGljaCBjb3ZlcnMgdGhlIEhXCj4gLQnCoCogYmxvY2tzIG5lZWRlZCBmb3IgdGhl IGZvbGxvd2luZyBwcm9ncmFtbWluZy4gVGhpcyBjYW4gYmUKPiAtCcKgKiByZW1vdmVkIG9uY2Ug aXQncyBndWFyYW50ZWVkIHRoYXQgd2UgZ2V0IGhlcmUgZWl0aGVyIHdpdGgKPiAtCcKgKiB0aGUg bWluaW11bSBDRENMSyBzZXQsIG9yIHRoZSByZXF1aXJlZCBwb3dlciBkb21haW5zCj4gLQnCoCog ZW5hYmxlZC4KPiAtCcKgKi8KPiAtCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQ T1dFUl9ET01BSU5fUElQRV9BKTsKPiAtCj4gLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikp Cj4gLQkJY2hlcnJ5dmlld19zZXRfY2RjbGsoZGV2LCByZXFfY2RjbGspOwo+IC0JZWxzZQo+IC0J CXZhbGxleXZpZXdfc2V0X2NkY2xrKGRldiwgcmVxX2NkY2xrKTsKPiAtCj4gLQl2bHZfcHJvZ3Jh bV9wZmlfY3JlZGl0cyhkZXZfcHJpdik7Cj4gLQo+IC0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQo ZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9QSVBFX0EpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCB2 YWxsZXl2aWV3X2NydGNfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZp ZywKPiAtCQkJCcKgwqDCoHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpCj4gLXsK PiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBpcGVfY29uZmlnLT5iYXNlLmNydGM7Cj4gLQlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+IC0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+IC0Jc3RydWN0IGludGVsX2NydGMgKmlu dGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+IC0JaW50IHBpcGUgPSBpbnRlbF9jcnRj LT5waXBlOwo+IC0KPiAtCWlmIChXQVJOX09OKGludGVsX2NydGMtPmFjdGl2ZSkpCj4gLQkJcmV0 dXJuOwo+IC0KPiAtCWlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKGludGVsX2NydGMtPmNv bmZpZykpCj4gLQkJaW50ZWxfZHBfc2V0X21fbihpbnRlbF9jcnRjLCBNMV9OMSk7Cj4gLQo+IC0J aW50ZWxfc2V0X3BpcGVfdGltaW5ncyhpbnRlbF9jcnRjKTsKPiAtCWludGVsX3NldF9waXBlX3Ny Y19zaXplKGludGVsX2NydGMpOwo+IC0KPiAtCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAm JiBwaXBlID09IFBJUEVfQikgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGV2KTsKPiAtCj4gLQkJSTkxNV9XUklURShDSFZfQkxFTkQocGlwZSksIENI Vl9CTEVORF9MRUdBQ1kpOwo+IC0JCUk5MTVfV1JJVEUoQ0hWX0NBTlZBUyhwaXBlKSwgMCk7Cj4g LQl9Cj4gLQo+IC0JaTl4eF9zZXRfcGlwZWNvbmYoaW50ZWxfY3J0Yyk7Cj4gLQo+IC0JaW50ZWxf Y3J0Yy0+YWN0aXZlID0gdHJ1ZTsKPiAtCj4gLQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5f cmVwb3J0aW5nKGRldl9wcml2LCBwaXBlLCB0cnVlKTsKPiAtCj4gLQlpbnRlbF9lbmNvZGVyc19w cmVfcGxsX2VuYWJsZShjcnRjLCBwaXBlX2NvbmZpZywgb2xkX3N0YXRlKTsKPiAtCj4gLQlpZiAo SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPiAtCQljaHZfcHJlcGFyZV9wbGwoaW50ZWxfY3J0 YywgaW50ZWxfY3J0Yy0+Y29uZmlnKTsKPiAtCQljaHZfZW5hYmxlX3BsbChpbnRlbF9jcnRjLCBp bnRlbF9jcnRjLT5jb25maWcpOwo+IC0JfSBlbHNlIHsKPiAtCQl2bHZfcHJlcGFyZV9wbGwoaW50 ZWxfY3J0YywgaW50ZWxfY3J0Yy0+Y29uZmlnKTsKPiAtCQl2bHZfZW5hYmxlX3BsbChpbnRlbF9j cnRjLCBpbnRlbF9jcnRjLT5jb25maWcpOwo+IC0JfQo+IC0KPiAtCWludGVsX2VuY29kZXJzX3By ZV9lbmFibGUoY3J0YywgcGlwZV9jb25maWcsIG9sZF9zdGF0ZSk7Cj4gLQo+IC0JaTl4eF9wZml0 X2VuYWJsZShpbnRlbF9jcnRjKTsKPiAtCj4gLQlpbnRlbF9jb2xvcl9sb2FkX2x1dHMoJnBpcGVf Y29uZmlnLT5iYXNlKTsKPiAtCj4gLQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhpbnRlbF9jcnRj KTsKPiAtCWludGVsX2VuYWJsZV9waXBlKGludGVsX2NydGMpOwo+IC0KPiAtCWFzc2VydF92Ymxh bmtfZGlzYWJsZWQoY3J0Yyk7Cj4gLQlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7Cj4gLQo+IC0J aW50ZWxfZW5jb2RlcnNfZW5hYmxlKGNydGMsIHBpcGVfY29uZmlnLCBvbGRfc3RhdGUpOwo+IC19 Cj4gLQo+IC1zdGF0aWMgdm9pZCBpOXh4X3NldF9wbGxfZGl2aWRlcnMoc3RydWN0IGludGVsX2Ny dGMgKmNydGMpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsK PiAtCj4gLQlJOTE1X1dSSVRFKEZQMChjcnRjLT5waXBlKSwgY3J0Yy0+Y29uZmlnLT5kcGxsX2h3 X3N0YXRlLmZwMCk7Cj4gLQlJOTE1X1dSSVRFKEZQMShjcnRjLT5waXBlKSwgY3J0Yy0+Y29uZmln LT5kcGxsX2h3X3N0YXRlLmZwMSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5eHhfY3J0Y19l bmFibGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAo+IC0JCQnCoMKgwqDC oMKgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRy bV9jcnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsKPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Cj4gLQllbnVtIHBpcGUgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7 Cj4gLQo+IC0JaWYgKFdBUk5fT04oaW50ZWxfY3J0Yy0+YWN0aXZlKSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0JaTl4eF9zZXRfcGxsX2RpdmlkZXJzKGludGVsX2NydGMpOwo+IC0KPiAtCWlmIChpbnRl bF9jcnRjX2hhc19kcF9lbmNvZGVyKGludGVsX2NydGMtPmNvbmZpZykpCj4gLQkJaW50ZWxfZHBf c2V0X21fbihpbnRlbF9jcnRjLCBNMV9OMSk7Cj4gLQo+IC0JaW50ZWxfc2V0X3BpcGVfdGltaW5n cyhpbnRlbF9jcnRjKTsKPiAtCWludGVsX3NldF9waXBlX3NyY19zaXplKGludGVsX2NydGMpOwo+ IC0KPiAtCWk5eHhfc2V0X3BpcGVjb25mKGludGVsX2NydGMpOwo+IC0KPiAtCWludGVsX2NydGMt PmFjdGl2ZSA9IHRydWU7Cj4gLQo+IC0JaWYgKCFJU19HRU4yKGRldl9wcml2KSkKPiAtCQlpbnRl bF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBwaXBlLCB0cnVlKTsK PiAtCj4gLQlpbnRlbF9lbmNvZGVyc19wcmVfZW5hYmxlKGNydGMsIHBpcGVfY29uZmlnLCBvbGRf c3RhdGUpOwo+IC0KPiAtCWk5eHhfZW5hYmxlX3BsbChpbnRlbF9jcnRjKTsKPiAtCj4gLQlpOXh4 X3BmaXRfZW5hYmxlKGludGVsX2NydGMpOwo+IC0KPiAtCWludGVsX2NvbG9yX2xvYWRfbHV0cygm cGlwZV9jb25maWctPmJhc2UpOwo+IC0KPiAtCWludGVsX3VwZGF0ZV93YXRlcm1hcmtzKGludGVs X2NydGMpOwo+IC0JaW50ZWxfZW5hYmxlX3BpcGUoaW50ZWxfY3J0Yyk7Cj4gLQo+IC0JYXNzZXJ0 X3ZibGFua19kaXNhYmxlZChjcnRjKTsKPiAtCWRybV9jcnRjX3ZibGFua19vbihjcnRjKTsKPiAt Cj4gLQlpbnRlbF9lbmNvZGVyc19lbmFibGUoY3J0YywgcGlwZV9jb25maWcsIG9sZF9zdGF0ZSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5eHhfcGZpdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 Cj4gLQo+IC0JaWYgKCFjcnRjLT5jb25maWctPmdtY2hfcGZpdC5jb250cm9sKQo+IC0JCXJldHVy bjsKPiAtCj4gLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgY3J0Yy0+cGlwZSk7Cj4g LQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsaW5nIHBmaXQsIGN1cnJlbnQ6IDB4JTA4eFxu IiwKPiAtCQkJwqBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKSk7Cj4gLQlJOTE1X1dSSVRFKFBGSVRf Q09OVFJPTCwgMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5eHhfY3J0Y19kaXNhYmxlKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKPiAtCQkJwqDCoMKgwqDCoMKg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9j cnRjICpjcnRjID0gb2xkX2NydGNfc3RhdGUtPmJhc2UuY3J0YzsKPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGRldik7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRv X2ludGVsX2NydGMoY3J0Yyk7Cj4gLQlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4gLQo+ IC0JLyoKPiAtCcKgKiBPbiBnZW4yIHBsYW5lcyBhcmUgZG91YmxlIGJ1ZmZlcmVkIGJ1dCB0aGUg cGlwZSBpc24ndCwgc28gd2UgbXVzdAo+IC0JwqAqIHdhaXQgZm9yIHBsYW5lcyB0byBmdWxseSB0 dXJuIG9mZiBiZWZvcmUgZGlzYWJsaW5nIHRoZSBwaXBlLgo+IC0JwqAqLwo+IC0JaWYgKElTX0dF TjIoZGV2X3ByaXYpKQo+IC0JCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXZfcHJpdiwgcGlwZSk7 Cj4gLQo+IC0JaW50ZWxfZW5jb2RlcnNfZGlzYWJsZShjcnRjLCBvbGRfY3J0Y19zdGF0ZSwgb2xk X3N0YXRlKTsKPiAtCj4gLQlkcm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOwo+IC0JYXNzZXJ0X3Zi bGFua19kaXNhYmxlZChjcnRjKTsKPiAtCj4gLQlpbnRlbF9kaXNhYmxlX3BpcGUoaW50ZWxfY3J0 Yyk7Cj4gLQo+IC0JaTl4eF9wZml0X2Rpc2FibGUoaW50ZWxfY3J0Yyk7Cj4gLQo+IC0JaW50ZWxf ZW5jb2RlcnNfcG9zdF9kaXNhYmxlKGNydGMsIG9sZF9jcnRjX3N0YXRlLCBvbGRfc3RhdGUpOwo+ IC0KPiAtCWlmICghaW50ZWxfY3J0Y19oYXNfdHlwZShpbnRlbF9jcnRjLT5jb25maWcsIElOVEVM X09VVFBVVF9EU0kpKSB7Cj4gLQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQo+IC0JCQlj aHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOwo+IC0JCWVsc2UgaWYgKElTX1ZBTExFWVZJ RVcoZGV2X3ByaXYpKQo+IC0JCQl2bHZfZGlzYWJsZV9wbGwoZGV2X3ByaXYsIHBpcGUpOwo+IC0J CWVsc2UKPiAtCQkJaTl4eF9kaXNhYmxlX3BsbChpbnRlbF9jcnRjKTsKPiAtCX0KPiAtCj4gLQlp bnRlbF9lbmNvZGVyc19wb3N0X3BsbF9kaXNhYmxlKGNydGMsIG9sZF9jcnRjX3N0YXRlLCBvbGRf c3RhdGUpOwo+IC0KPiAtCWlmICghSVNfR0VOMihkZXZfcHJpdikpCj4gLQkJaW50ZWxfc2V0X2Nw dV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgcGlwZSwgZmFsc2UpOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2Rpc2FibGVfbm9hdG9taWMoc3RydWN0IGRybV9j cnRjICpjcnRjKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKPiAtCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ZGV2KTsKPiAt CWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gZG9tYWluOwo+IC0JdW5zaWduZWQgbG9u ZyBkb21haW5zOwo+IC0Jc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+IC0Jc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmICgh aW50ZWxfY3J0Yy0+YWN0aXZlKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAodG9faW50ZWxfcGxh bmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpLT5iYXNlLnZpc2libGUpIHsKPiAtCQlXQVJO X09OKGludGVsX2NydGMtPmZsaXBfd29yayk7Cj4gLQo+IC0JCWludGVsX3ByZV9kaXNhYmxlX3By aW1hcnlfbm9hdG9taWMoY3J0Yyk7Cj4gLQo+IC0JCWludGVsX2NydGNfZGlzYWJsZV9wbGFuZXMo Y3J0YywgMSA8PCBkcm1fcGxhbmVfaW5kZXgoY3J0Yy0KPiA+cHJpbWFyeSkpOwo+IC0JCXRvX2lu dGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKS0+YmFzZS52aXNpYmxlID0KPiBm YWxzZTsKPiAtCX0KPiAtCj4gLQlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoY3J0Yy0+ ZGV2KTsKPiAtCXN0YXRlLT5hY3F1aXJlX2N0eCA9IGNydGMtPmRldi0+bW9kZV9jb25maWcuYWNx dWlyZV9jdHg7Cj4gLQo+IC0JLyogRXZlcnl0aGluZydzIGFscmVhZHkgbG9ja2VkLCAtRURFQURM SyBjYW4ndCBoYXBwZW4uICovCj4gLQljcnRjX3N0YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRj X3N0YXRlKHN0YXRlLCBpbnRlbF9jcnRjKTsKPiAtCXJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVj dGVkX2Nvbm5lY3RvcnMoc3RhdGUsIGNydGMpOwo+IC0KPiAtCVdBUk5fT04oSVNfRVJSKGNydGNf c3RhdGUpIHx8IHJldCk7Cj4gLQo+IC0JZGV2X3ByaXYtPmRpc3BsYXkuY3J0Y19kaXNhYmxlKGNy dGNfc3RhdGUsIHN0YXRlKTsKPiAtCj4gLQlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Cj4g LQo+IC0JRFJNX0RFQlVHX0tNUygiW0NSVEM6JWQ6JXNdIGh3IHN0YXRlIGFkanVzdGVkLCB3YXMg ZW5hYmxlZCwgbm93Cj4gZGlzYWJsZWRcbiIsCj4gLQkJwqDCoMKgwqDCoMKgY3J0Yy0+YmFzZS5p ZCwgY3J0Yy0+bmFtZSk7Cj4gKwlEUk1fREVCVUdfS01TKCJbQ1JUQzolZDolc10gaHcgc3RhdGUg YWRqdXN0ZWQsIHdhcyBlbmFibGVkLCBub3cKPiBkaXNhYmxlZFxuIiwKPiArCQnCoMKgwqDCoMKg wqBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKPiDCoAo+IMKgCVdBUk5fT04oZHJtX2F0b21p Y19zZXRfbW9kZV9mb3JfY3J0YyhjcnRjLT5zdGF0ZSwgTlVMTCkgPCAwKTsKPiDCoAljcnRjLT5z dGF0ZS0+YWN0aXZlID0gZmFsc2U7Cj4gQEAgLTcxMjQsNTQzICs2MTgyLDEyMSBAQCBzdGF0aWMg aW50IGlyb25sYWtlX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QKPiBpbnRlbF9jcnRjICppbnRl bF9jcnRjLAo+IMKgCQlnb3RvIHJldHJ5Owo+IMKgCX0KPiDCoAo+IC0JaWYgKG5lZWRzX3JlY29t cHV0ZSkKPiAtCQlyZXR1cm4gUkVUUlk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt c3RhdGljIGJvb2wgcGlwZV9jb25maWdfc3VwcG9ydHNfaXBzKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAtCQkJCcKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcpCj4gLXsKPiAtCWlmIChwaXBlX2NvbmZpZy0+cGlwZV9icHAgPiAyNCkKPiAt CQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0JLyogSFNXIGNhbiBoYW5kbGUgcGl4ZWwgcmF0ZSB1cCB0 byBjZGNsaz8gKi8KPiAtCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gdHJ1 ZTsKPiAtCj4gLQkvKgo+IC0JwqAqIFdlIGNvbXBhcmUgYWdhaW5zdCBtYXggd2hpY2ggbWVhbnMg d2UgbXVzdCB0YWtlCj4gLQnCoCogdGhlIGluY3JlYXNlZCBjZGNsayByZXF1aXJlbWVudCBpbnRv IGFjY291bnQgd2hlbgo+IC0JwqAqIGNhbGN1bGF0aW5nIHRoZSBuZXcgY2RjbGsuCj4gLQnCoCoK PiAtCcKgKiBTaG91bGQgbWVhc3VyZSB3aGV0aGVyIHVzaW5nIGEgbG93ZXIgY2RjbGsgdy9vIElQ Uwo+IC0JwqAqLwo+IC0JcmV0dXJuIHBpcGVfY29uZmlnLT5waXhlbF9yYXRlIDw9Cj4gLQkJZGV2 X3ByaXYtPm1heF9jZGNsa19mcmVxICogOTUgLyAxMDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGhzd19jb21wdXRlX2lwc19jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLQkJCQnC oMKgwqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gLXsKPiAtCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAtCj4gLQlwaXBlX2NvbmZpZy0+aXBz X2VuYWJsZWQgPSBpOTE1LmVuYWJsZV9pcHMgJiYKPiAtCQloc3dfY3J0Y19zdXBwb3J0c19pcHMo Y3J0YykgJiYKPiAtCQlwaXBlX2NvbmZpZ19zdXBwb3J0c19pcHMoZGV2X3ByaXYsIHBpcGVfY29u ZmlnKTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgaW50ZWxfY3J0Y19zdXBwb3J0c19kb3VibGVf d2lkZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiAtewo+IC0JY29uc3Qgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4g LQo+IC0JLyogR0RHIGRvdWJsZSB3aWRlIG9uIGVpdGhlciBwaXBlLCBvdGhlcndpc2UgcGlwZSBB IG9ubHkgKi8KPiAtCXJldHVybiBJTlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuIDwgNCAmJgo+IC0J CShjcnRjLT5waXBlID09IFBJUEVfQSB8fCBJU19JOTE1RyhkZXZfcHJpdikpOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZQo+ICpjcnRjX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0Yy0KPiA+ZGV2KTsKPiAt Cj4gLQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXZfcHJpdikpCj4gLQkJLyogRklYTUUgY2FsY3Vs YXRlIHByb3BlciBwaXBlIHBpeGVsIHJhdGUgR01DSCBwZml0ICovCj4gLQkJY3J0Y19zdGF0ZS0+ cGl4ZWxfcmF0ZSA9Cj4gLQkJCWNydGNfc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Ns b2NrOwo+IC0JZWxzZQo+IC0JCWNydGNfc3RhdGUtPnBpeGVsX3JhdGUgPQo+IC0JCQlpbGtfcGlw ZV9waXhlbF9yYXRlKGNydGNfc3RhdGUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGludGVsX2Ny dGNfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4gLQkJCQnCoMKgwqDC oMKgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0KPiA+YmFzZS5hZGp1c3RlZF9t b2RlOwo+IC0JaW50IGNsb2NrX2xpbWl0ID0gZGV2X3ByaXYtPm1heF9kb3RjbGtfZnJlcTsKPiAt Cj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpIHsKPiAtCQljbG9ja19saW1pdCA9IGRl dl9wcml2LT5tYXhfY2RjbGtfZnJlcSAqIDkgLyAxMDsKPiAtCj4gLQkJLyoKPiAtCQnCoCogRW5h YmxlIGRvdWJsZSB3aWRlIG1vZGUgd2hlbiB0aGUgZG90IGNsb2NrCj4gLQkJwqAqIGlzID4gOTAl IG9mIHRoZSAoZGlzcGxheSkgY29yZSBzcGVlZC4KPiAtCQnCoCovCj4gLQkJaWYgKGludGVsX2Ny dGNfc3VwcG9ydHNfZG91YmxlX3dpZGUoY3J0YykgJiYKPiAtCQnCoMKgwqDCoGFkanVzdGVkX21v ZGUtPmNydGNfY2xvY2sgPiBjbG9ja19saW1pdCkgewo+IC0JCQljbG9ja19saW1pdCA9IGRldl9w cml2LT5tYXhfZG90Y2xrX2ZyZXE7Cj4gLQkJCXBpcGVfY29uZmlnLT5kb3VibGVfd2lkZSA9IHRy dWU7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrID4g Y2xvY2tfbGltaXQpIHsKPiAtCQlEUk1fREVCVUdfS01TKCJyZXF1ZXN0ZWQgcGl4ZWwgY2xvY2sg KCVkIGtIeikgdG9vIGhpZ2ggKG1heDoKPiAlZCBrSHosIGRvdWJsZSB3aWRlOiAlcylcbiIsCj4g LQkJCcKgwqDCoMKgwqDCoGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssIGNsb2NrX2xpbWl0LAo+ IC0JCQnCoMKgwqDCoMKgwqB5ZXNubyhwaXBlX2NvbmZpZy0+ZG91YmxlX3dpZGUpKTsKPiAtCQly ZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQkvKgo+IC0JwqAqIFBpcGUgaG9yaXpvbnRhbCBz aXplIG11c3QgYmUgZXZlbiBpbjoKPiAtCcKgKiAtIERWTyBnYW5nZWQgbW9kZQo+IC0JwqAqIC0g TFZEUyBkdWFsIGNoYW5uZWwgbW9kZQo+IC0JwqAqIC0gRG91YmxlIHdpZGUgcGlwZQo+IC0JwqAq Lwo+IC0JaWYgKChpbnRlbF9jcnRjX2hhc190eXBlKHBpcGVfY29uZmlnLCBJTlRFTF9PVVRQVVRf TFZEUykgJiYKPiAtCcKgwqDCoMKgwqBpbnRlbF9pc19kdWFsX2xpbmtfbHZkcyhkZXYpKSB8fCBw aXBlX2NvbmZpZy0+ZG91YmxlX3dpZGUpCj4gLQkJcGlwZV9jb25maWctPnBpcGVfc3JjX3cgJj0g fjE7Cj4gLQo+IC0JLyogQ2FudGlnYSsgY2Fubm90IGhhbmRsZSBtb2RlcyB3aXRoIGEgaHN5bmMg ZnJvbnQgcG9yY2ggb2YgMC4KPiAtCcKgKiBXYVBydW5lTW9kZVdpdGhJbmNvcnJlY3RIc3luY09m ZnNldDpjdGcsZWxrLGlsayxzbmIsaXZiLHZsdixoc3cuCj4gLQnCoCovCj4gLQlpZiAoKElOVEVM X0dFTihkZXZfcHJpdikgPiA0IHx8IElTX0c0WChkZXZfcHJpdikpICYmCj4gLQkJYWRqdXN0ZWRf bW9kZS0+Y3J0Y19oc3luY19zdGFydCA9PSBhZGp1c3RlZF9tb2RlLQo+ID5jcnRjX2hkaXNwbGF5 KQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWludGVsX2NydGNfY29tcHV0ZV9waXhlbF9y YXRlKHBpcGVfY29uZmlnKTsKPiAtCj4gLQlpZiAoSEFTX0lQUyhkZXZfcHJpdikpCj4gLQkJaHN3 X2NvbXB1dGVfaXBzX2NvbmZpZyhjcnRjLCBwaXBlX2NvbmZpZyk7Cj4gLQo+IC0JaWYgKHBpcGVf Y29uZmlnLT5oYXNfcGNoX2VuY29kZXIpCj4gLQkJcmV0dXJuIGlyb25sYWtlX2ZkaV9jb21wdXRl X2NvbmZpZyhjcnRjLCBwaXBlX2NvbmZpZyk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbnQgc2t5bGFrZV9nZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQl1MzIgY2RjdGw7Cj4gLQo+IC0Jc2tsX2RwbGwwX3VwZGF0ZShkZXZf cHJpdik7Cj4gLQo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19wbGwudmNvID09IDApCj4gLQkJcmV0 dXJuIGRldl9wcml2LT5jZGNsa19wbGwucmVmOwo+IC0KPiAtCWNkY3RsID0gSTkxNV9SRUFEKENE Q0xLX0NUTCk7Cj4gLQo+IC0JaWYgKGRldl9wcml2LT5jZGNsa19wbGwudmNvID09IDg2NDAwMDAp IHsKPiAtCQlzd2l0Y2ggKGNkY3RsICYgQ0RDTEtfRlJFUV9TRUxfTUFTSykgewo+IC0JCWNhc2Ug Q0RDTEtfRlJFUV80NTBfNDMyOgo+IC0JCQlyZXR1cm4gNDMyMDAwOwo+IC0JCWNhc2UgQ0RDTEtf RlJFUV8zMzdfMzA4Ogo+IC0JCQlyZXR1cm4gMzA4NTcxOwo+IC0JCWNhc2UgQ0RDTEtfRlJFUV81 NDA6Cj4gLQkJCXJldHVybiA1NDAwMDA7Cj4gLQkJY2FzZSBDRENMS19GUkVRXzY3NV82MTc6Cj4g LQkJCXJldHVybiA2MTcxNDM7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJTUlTU0lOR19DQVNFKGNkY3Rs ICYgQ0RDTEtfRlJFUV9TRUxfTUFTSyk7Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlzd2l0Y2gg KGNkY3RsICYgQ0RDTEtfRlJFUV9TRUxfTUFTSykgewo+IC0JCWNhc2UgQ0RDTEtfRlJFUV80NTBf NDMyOgo+IC0JCQlyZXR1cm4gNDUwMDAwOwo+IC0JCWNhc2UgQ0RDTEtfRlJFUV8zMzdfMzA4Ogo+ IC0JCQlyZXR1cm4gMzM3NTAwOwo+IC0JCWNhc2UgQ0RDTEtfRlJFUV81NDA6Cj4gLQkJCXJldHVy biA1NDAwMDA7Cj4gLQkJY2FzZSBDRENMS19GUkVRXzY3NV82MTc6Cj4gLQkJCXJldHVybiA2NzUw MDA7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJTUlTU0lOR19DQVNFKGNkY3RsICYgQ0RDTEtfRlJFUV9T RUxfTUFTSyk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiBkZXZfcHJpdi0+Y2RjbGtfcGxs LnJlZjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgYnh0X2RlX3BsbF91cGRhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQl1MzIgdmFsOwo+IC0KPiAtCWRldl9w cml2LT5jZGNsa19wbGwucmVmID0gMTkyMDA7Cj4gLQlkZXZfcHJpdi0+Y2RjbGtfcGxsLnZjbyA9 IDA7Cj4gLQo+IC0JdmFsID0gSTkxNV9SRUFEKEJYVF9ERV9QTExfRU5BQkxFKTsKPiAtCWlmICgo dmFsICYgQlhUX0RFX1BMTF9QTExfRU5BQkxFKSA9PSAwKQo+IC0JCXJldHVybjsKPiAtCj4gLQlp ZiAoV0FSTl9PTigodmFsICYgQlhUX0RFX1BMTF9MT0NLKSA9PSAwKSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0JdmFsID0gSTkxNV9SRUFEKEJYVF9ERV9QTExfQ1RMKTsKPiAtCWRldl9wcml2LT5jZGNs a19wbGwudmNvID0gKHZhbCAmIEJYVF9ERV9QTExfUkFUSU9fTUFTSykgKgo+IC0JCWRldl9wcml2 LT5jZGNsa19wbGwucmVmOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGJyb3h0b25fZ2V0X2NkY2xr KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAtewo+IC0JdTMyIGRpdmlkZXI7 Cj4gLQlpbnQgZGl2LCB2Y287Cj4gLQo+IC0JYnh0X2RlX3BsbF91cGRhdGUoZGV2X3ByaXYpOwo+ IC0KPiAtCXZjbyA9IGRldl9wcml2LT5jZGNsa19wbGwudmNvOwo+IC0JaWYgKHZjbyA9PSAwKQo+ IC0JCXJldHVybiBkZXZfcHJpdi0+Y2RjbGtfcGxsLnJlZjsKPiAtCj4gLQlkaXZpZGVyID0gSTkx NV9SRUFEKENEQ0xLX0NUTCkgJiBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VMX01BU0s7Cj4gLQo+IC0J c3dpdGNoIChkaXZpZGVyKSB7Cj4gLQljYXNlIEJYVF9DRENMS19DRDJYX0RJVl9TRUxfMToKPiAt CQlkaXYgPSAyOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBCWFRfQ0RDTEtfQ0QyWF9ESVZfU0VMXzFf NToKPiAtCQlXQVJOKElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpLCAiVW5zdXBwb3J0ZWQgZGl2aWRl clxuIik7Cj4gLQkJZGl2ID0gMzsKPiAtCQlicmVhazsKPiAtCWNhc2UgQlhUX0NEQ0xLX0NEMlhf RElWX1NFTF8yOgo+IC0JCWRpdiA9IDQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIEJYVF9DRENMS19D RDJYX0RJVl9TRUxfNDoKPiAtCQlkaXYgPSA4Owo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAt CQlNSVNTSU5HX0NBU0UoZGl2aWRlcik7Cj4gLQkJcmV0dXJuIGRldl9wcml2LT5jZGNsa19wbGwu cmVmOwo+IC0JfQo+IC0KPiAtCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCh2Y28sIGRpdik7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgYnJvYWR3ZWxsX2dldF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXVpbnQzMl90IGxjcGxsID0gSTkxNV9SRUFEKExD UExMX0NUTCk7Cj4gLQl1aW50MzJfdCBmcmVxID0gbGNwbGwgJiBMQ1BMTF9DTEtfRlJFUV9NQVNL Owo+IC0KPiAtCWlmIChsY3BsbCAmIExDUExMX0NEX1NPVVJDRV9GQ0xLKQo+IC0JCXJldHVybiA4 MDAwMDA7Cj4gLQllbHNlIGlmIChJOTE1X1JFQUQoRlVTRV9TVFJBUCkgJiBIU1dfQ0RDTEtfTElN SVQpCj4gLQkJcmV0dXJuIDQ1MDAwMDsKPiAtCWVsc2UgaWYgKGZyZXEgPT0gTENQTExfQ0xLX0ZS RVFfNDUwKQo+IC0JCXJldHVybiA0NTAwMDA7Cj4gLQllbHNlIGlmIChmcmVxID09IExDUExMX0NM S19GUkVRXzU0T19CRFcpCj4gLQkJcmV0dXJuIDU0MDAwMDsKPiAtCWVsc2UgaWYgKGZyZXEgPT0g TENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRXKQo+IC0JCXJldHVybiAzMzc1MDA7Cj4gLQllbHNlCj4g LQkJcmV0dXJuIDY3NTAwMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBoYXN3ZWxsX2dldF9jZGNs ayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gLXsKPiAtCXVpbnQzMl90IGxj cGxsID0gSTkxNV9SRUFEKExDUExMX0NUTCk7Cj4gLQl1aW50MzJfdCBmcmVxID0gbGNwbGwgJiBM Q1BMTF9DTEtfRlJFUV9NQVNLOwo+IC0KPiAtCWlmIChsY3BsbCAmIExDUExMX0NEX1NPVVJDRV9G Q0xLKQo+IC0JCXJldHVybiA4MDAwMDA7Cj4gLQllbHNlIGlmIChJOTE1X1JFQUQoRlVTRV9TVFJB UCkgJiBIU1dfQ0RDTEtfTElNSVQpCj4gLQkJcmV0dXJuIDQ1MDAwMDsKPiAtCWVsc2UgaWYgKGZy ZXEgPT0gTENQTExfQ0xLX0ZSRVFfNDUwKQo+IC0JCXJldHVybiA0NTAwMDA7Cj4gLQllbHNlIGlm IChJU19IU1dfVUxUKGRldl9wcml2KSkKPiAtCQlyZXR1cm4gMzM3NTAwOwo+IC0JZWxzZQo+IC0J CXJldHVybiA1NDAwMDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgdmFsbGV5dmlld19nZXRfY2Rj bGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1cm4gdmx2 X2dldF9jY2tfY2xvY2tfaHBsbChkZXZfcHJpdiwgImNkY2xrIiwKPiAtCQkJCcKgwqDCoMKgwqDC oENDS19ESVNQTEFZX0NMT0NLX0NPTlRST0wpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZpeGVk XzQ1MG1oel9nZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17 Cj4gLQlyZXR1cm4gNDUwMDAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZpeGVkXzQwMG1oel9n ZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1 cm4gNDAwMDAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZpeGVkXzMzM21oel9nZXRfY2RjbGso c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1cm4gMzMzMzMz Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZpeGVkXzIwMG1oel9nZXRfY2RjbGsoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1cm4gMjAwMDAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IHBudl9nZXRfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KQo+IC17Cj4gLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRl djsKPiAtCXUxNiBnY2ZnYyA9IDA7Cj4gLQo+IC0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwg R0NGR0MsICZnY2ZnYyk7Cj4gLQo+IC0Jc3dpdGNoIChnY2ZnYyAmIEdDX0RJU1BMQVlfQ0xPQ0tf TUFTSykgewo+IC0JY2FzZSBHQ19ESVNQTEFZX0NMT0NLXzI2N19NSFpfUE5WOgo+IC0JCXJldHVy biAyNjY2Njc7Cj4gLQljYXNlIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWl9QTlY6Cj4gLQkJcmV0 dXJuIDMzMzMzMzsKPiAtCWNhc2UgR0NfRElTUExBWV9DTE9DS180NDRfTUhaX1BOVjoKPiAtCQly ZXR1cm4gNDQ0NDQ0Owo+IC0JY2FzZSBHQ19ESVNQTEFZX0NMT0NLXzIwMF9NSFpfUE5WOgo+IC0J CXJldHVybiAyMDAwMDA7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9FUlJPUigiVW5rbm93biBwbnYg ZGlzcGxheSBjb3JlIGNsb2NrIDB4JTA0eFxuIiwgZ2NmZ2MpOwo+IC0JY2FzZSBHQ19ESVNQTEFZ X0NMT0NLXzEzM19NSFpfUE5WOgo+IC0JCXJldHVybiAxMzMzMzM7Cj4gLQljYXNlIEdDX0RJU1BM QVlfQ0xPQ0tfMTY3X01IWl9QTlY6Cj4gLQkJcmV0dXJuIDE2NjY2NzsKPiAtCX0KPiAtfQo+IC0K PiAtc3RhdGljIGludCBpOTE1Z21fZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZHJtLnBk ZXY7Cj4gLQl1MTYgZ2NmZ2MgPSAwOwo+IC0KPiAtCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYs IEdDRkdDLCAmZ2NmZ2MpOwo+IC0KPiAtCWlmIChnY2ZnYyAmIEdDX0xPV19GUkVRVUVOQ1lfRU5B QkxFKQo+IC0JCXJldHVybiAxMzMzMzM7Cj4gLQllbHNlIHsKPiAtCQlzd2l0Y2ggKGdjZmdjICYg R0NfRElTUExBWV9DTE9DS19NQVNLKSB7Cj4gLQkJY2FzZSBHQ19ESVNQTEFZX0NMT0NLXzMzM19N SFo6Cj4gLQkJCXJldHVybiAzMzMzMzM7Cj4gLQkJZGVmYXVsdDoKPiAtCQljYXNlIEdDX0RJU1BM QVlfQ0xPQ0tfMTkwXzIwMF9NSFo6Cj4gLQkJCXJldHVybiAxOTAwMDA7Cj4gLQkJfQo+IC0JfQo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IGZpeGVkXzI2Nm1oel9nZXRfY2RjbGsoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IC17Cj4gLQlyZXR1cm4gMjY2NjY3Owo+ICsJaWYgKG5l ZWRzX3JlY29tcHV0ZSkKPiArCQlyZXR1cm4gUkVUUlk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiDC oH0KPiDCoAo+IC1zdGF0aWMgaW50IGk4NXhfZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiArc3RhdGljIGJvb2wgcGlwZV9jb25maWdfc3VwcG9ydHNfaXBzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJCcKgwqDCoMKgwqBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gwqB7Cj4gLQlzdHJ1Y3QgcGNpX2RldiAq cGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsKPiAtCXUxNiBocGxsY2MgPSAwOwo+IC0KPiAtCS8q Cj4gLQnCoCogODUyR00vODUyR01WIG9ubHkgc3VwcG9ydHMgMTMzIE1IeiBhbmQgdGhlIEhQTExD Qwo+IC0JwqAqIGVuY29kaW5nIGlzIGRpZmZlcmVudCA6KAo+IC0JwqAqIEZJWE1FIGlzIHRoaXMg dGhlIHJpZ2h0IHdheSB0byBkZXRlY3QgODUyR00vODUyR01WPwo+IC0JwqAqLwo+IC0JaWYgKHBk ZXYtPnJldmlzaW9uID09IDB4MSkKPiAtCQlyZXR1cm4gMTMzMzMzOwo+ICsJaWYgKHBpcGVfY29u ZmlnLT5waXBlX2JwcCA+IDI0KQo+ICsJCXJldHVybiBmYWxzZTsKPiDCoAo+IC0JcGNpX2J1c19y ZWFkX2NvbmZpZ193b3JkKHBkZXYtPmJ1cywKPiAtCQkJCcKgUENJX0RFVkZOKDAsIDMpLCBIUExM Q0MsICZocGxsY2MpOwo+ICsJLyogSFNXIGNhbiBoYW5kbGUgcGl4ZWwgcmF0ZSB1cCB0byBjZGNs az8gKi8KPiArCWlmIChJU19IQVNXRUxMKGRldl9wcml2KSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiDC oAo+IC0JLyogQXNzdW1lIHRoYXQgdGhlIGhhcmR3YXJlIGlzIGluIHRoZSBoaWdoIHNwZWVkIHN0 YXRlLsKgwqBUaGlzCj4gLQnCoCogc2hvdWxkIGJlIHRoZSBkZWZhdWx0Lgo+ICsJLyoKPiArCcKg KiBXZSBjb21wYXJlIGFnYWluc3QgbWF4IHdoaWNoIG1lYW5zIHdlIG11c3QgdGFrZQo+ICsJwqAq IHRoZSBpbmNyZWFzZWQgY2RjbGsgcmVxdWlyZW1lbnQgaW50byBhY2NvdW50IHdoZW4KPiArCcKg KiBjYWxjdWxhdGluZyB0aGUgbmV3IGNkY2xrLgo+ICsJwqAqCj4gKwnCoCogU2hvdWxkIG1lYXN1 cmUgd2hldGhlciB1c2luZyBhIGxvd2VyIGNkY2xrIHcvbyBJUFMKPiDCoAnCoCovCj4gLQlzd2l0 Y2ggKGhwbGxjYyAmIEdDX0NMT0NLX0NPTlRST0xfTUFTSykgewo+IC0JY2FzZSBHQ19DTE9DS18x MzNfMjAwOgo+IC0JY2FzZSBHQ19DTE9DS18xMzNfMjAwXzI6Cj4gLQljYXNlIEdDX0NMT0NLXzEw MF8yMDA6Cj4gLQkJcmV0dXJuIDIwMDAwMDsKPiAtCWNhc2UgR0NfQ0xPQ0tfMTY2XzI1MDoKPiAt CQlyZXR1cm4gMjUwMDAwOwo+IC0JY2FzZSBHQ19DTE9DS18xMDBfMTMzOgo+IC0JCXJldHVybiAx MzMzMzM7Cj4gLQljYXNlIEdDX0NMT0NLXzEzM18yNjY6Cj4gLQljYXNlIEdDX0NMT0NLXzEzM18y NjZfMjoKPiAtCWNhc2UgR0NfQ0xPQ0tfMTY2XzI2NjoKPiAtCQlyZXR1cm4gMjY2NjY3Owo+IC0J fQo+IC0KPiAtCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KPiAtCXJldHVybiAwOwo+ICsJcmV0dXJu IHBpcGVfY29uZmlnLT5waXhlbF9yYXRlIDw9Cj4gKwkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVx ICogOTUgLyAxMDA7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIGludCBmaXhlZF8xMzNtaHpfZ2V0X2Nk Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArc3RhdGljIHZvaWQgaHN3 X2NvbXB1dGVfaXBzX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCcKgwqDC oHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKPiDCoHsKPiAtCXJldHVybiAx MzMzMzM7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwo+ICsJ cGlwZV9jb25maWctPmlwc19lbmFibGVkID0gaTkxNS5lbmFibGVfaXBzICYmCj4gKwkJaHN3X2Ny dGNfc3VwcG9ydHNfaXBzKGNydGMpICYmCj4gKwkJcGlwZV9jb25maWdfc3VwcG9ydHNfaXBzKGRl dl9wcml2LCBwaXBlX2NvbmZpZyk7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHVuc2lnbmVkIGludCBp bnRlbF9ocGxsX3ZjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRp YyBib29sIGludGVsX2NydGNfc3VwcG9ydHNfZG91YmxlX3dpZGUoY29uc3Qgc3RydWN0IGludGVs X2NydGMgKmNydGMpCj4gwqB7Cj4gLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJsYl92Y29b OF0gPSB7Cj4gLQkJWzBdID0gMzIwMDAwMCwKPiAtCQlbMV0gPSA0MDAwMDAwLAo+IC0JCVsyXSA9 IDUzMzMzMzMsCj4gLQkJWzNdID0gNDgwMDAwMCwKPiAtCQlbNF0gPSA2NDAwMDAwLAo+IC0JfTsK PiAtCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcG52X3Zjb1s4XSA9IHsKPiAtCQlbMF0gPSAz MjAwMDAwLAo+IC0JCVsxXSA9IDQwMDAwMDAsCj4gLQkJWzJdID0gNTMzMzMzMywKPiAtCQlbM10g PSA0ODAwMDAwLAo+IC0JCVs0XSA9IDI2NjY2NjcsCj4gLQl9Owo+IC0Jc3RhdGljIGNvbnN0IHVu c2lnbmVkIGludCBjbF92Y29bOF0gPSB7Cj4gLQkJWzBdID0gMzIwMDAwMCwKPiAtCQlbMV0gPSA0 MDAwMDAwLAo+IC0JCVsyXSA9IDUzMzMzMzMsCj4gLQkJWzNdID0gNjQwMDAwMCwKPiAtCQlbNF0g PSAzMzMzMzMzLAo+IC0JCVs1XSA9IDM1NjY2NjcsCj4gLQkJWzZdID0gNDI2NjY2NywKPiAtCX07 Cj4gLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVsa192Y29bOF0gPSB7Cj4gLQkJWzBdID0g MzIwMDAwMCwKPiAtCQlbMV0gPSA0MDAwMDAwLAo+IC0JCVsyXSA9IDUzMzMzMzMsCj4gLQkJWzNd ID0gNDgwMDAwMCwKPiAtCX07Cj4gLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGN0Z192Y29b OF0gPSB7Cj4gLQkJWzBdID0gMzIwMDAwMCwKPiAtCQlbMV0gPSA0MDAwMDAwLAo+IC0JCVsyXSA9 IDUzMzMzMzMsCj4gLQkJWzNdID0gNjQwMDAwMCwKPiAtCQlbNF0gPSAyNjY2NjY3LAo+IC0JCVs1 XSA9IDQyNjY2NjcsCj4gLQl9Owo+IC0JY29uc3QgdW5zaWduZWQgaW50ICp2Y29fdGFibGU7Cj4g LQl1bnNpZ25lZCBpbnQgdmNvOwo+IC0JdWludDhfdCB0bXAgPSAwOwo+IC0KPiAtCS8qIEZJWE1F IG90aGVyIGNoaXBzZXRzPyAqLwo+IC0JaWYgKElTX0dNNDUoZGV2X3ByaXYpKQo+IC0JCXZjb190 YWJsZSA9IGN0Z192Y287Cj4gLQllbHNlIGlmIChJU19HNFgoZGV2X3ByaXYpKQo+IC0JCXZjb190 YWJsZSA9IGVsa192Y287Cj4gLQllbHNlIGlmIChJU19JOTY1R00oZGV2X3ByaXYpKQo+IC0JCXZj b190YWJsZSA9IGNsX3ZjbzsKPiAtCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkKPiAt CQl2Y29fdGFibGUgPSBwbnZfdmNvOwo+IC0JZWxzZSBpZiAoSVNfRzMzKGRldl9wcml2KSkKPiAt CQl2Y29fdGFibGUgPSBibGJfdmNvOwo+IC0JZWxzZQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXRt cCA9IEk5MTVfUkVBRChJU19NT0JJTEUoZGV2X3ByaXYpID8gSFBMTFZDT19NT0JJTEUgOiBIUExM VkNPKTsKPiAtCj4gLQl2Y28gPSB2Y29fdGFibGVbdG1wICYgMHg3XTsKPiAtCWlmICh2Y28gPT0g MCkKPiAtCQlEUk1fRVJST1IoIkJhZCBIUExMIFZDTyAoSFBMTFZDTz0weCUwMngpXG4iLCB0bXAp Owo+IC0JZWxzZQo+IC0JCURSTV9ERUJVR19LTVMoIkhQTEwgVkNPICV1IGtIelxuIiwgdmNvKTsK PiArCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Yy0+YmFzZS5kZXYpOwo+IMKgCj4gLQlyZXR1cm4gdmNvOwo+ICsJLyogR0RHIGRvdWJsZSB3aWRl IG9uIGVpdGhlciBwaXBlLCBvdGhlcndpc2UgcGlwZSBBIG9ubHkgKi8KPiArCXJldHVybiBJTlRF TF9JTkZPKGRldl9wcml2KS0+Z2VuIDwgNCAmJgo+ICsJCShjcnRjLT5waXBlID09IFBJUEVfQSB8 fCBJU19JOTE1RyhkZXZfcHJpdikpOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpbnQgZ200NV9nZXRf Y2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICtzdGF0aWMgdm9pZCBp bnRlbF9jcnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQo+ICpj cnRjX3N0YXRlKQo+IMKgewo+IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZHJt LnBkZXY7Cj4gLQl1bnNpZ25lZCBpbnQgY2RjbGtfc2VsLCB2Y28gPSBpbnRlbF9ocGxsX3Zjbyhk ZXZfcHJpdik7Cj4gLQl1aW50MTZfdCB0bXAgPSAwOwo+IC0KPiAtCXBjaV9yZWFkX2NvbmZpZ193 b3JkKHBkZXYsIEdDRkdDLCAmdG1wKTsKPiAtCj4gLQljZGNsa19zZWwgPSAodG1wID4+IDEyKSAm IDB4MTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0 Y19zdGF0ZS0+YmFzZS5jcnRjLQo+ID5kZXYpOwo+IMKgCj4gLQlzd2l0Y2ggKHZjbykgewo+IC0J Y2FzZSAyNjY2NjY3Ogo+IC0JY2FzZSA0MDAwMDAwOgo+IC0JY2FzZSA1MzMzMzMzOgo+IC0JCXJl dHVybiBjZGNsa19zZWwgPyAzMzMzMzMgOiAyMjIyMjI7Cj4gLQljYXNlIDMyMDAwMDA6Cj4gLQkJ cmV0dXJuIGNkY2xrX3NlbCA/IDMyMDAwMCA6IDIyODU3MTsKPiAtCWRlZmF1bHQ6Cj4gLQkJRFJN X0VSUk9SKCJVbmFibGUgdG8gZGV0ZXJtaW5lIENEQ0xLLiBIUExMIFZDTz0ldSwKPiBDRkdDPTB4 JTA0eFxuIiwgdmNvLCB0bXApOwo+IC0JCXJldHVybiAyMjIyMjI7Cj4gLQl9Cj4gKwlpZiAoSEFT X0dNQ0hfRElTUExBWShkZXZfcHJpdikpCj4gKwkJLyogRklYTUUgY2FsY3VsYXRlIHByb3BlciBw aXBlIHBpeGVsIHJhdGUgR01DSCBwZml0ICovCj4gKwkJY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZSA9 Cj4gKwkJCWNydGNfc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrOwo+ICsJZWxz ZQo+ICsJCWNydGNfc3RhdGUtPnBpeGVsX3JhdGUgPQo+ICsJCQlpbGtfcGlwZV9waXhlbF9yYXRl KGNydGNfc3RhdGUpOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpbnQgaTk2NWdtX2dldF9jZGNsayhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3N0YXRpYyBpbnQgaW50ZWxfY3J0 Y19jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCcKgwqDCoMKg wqBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCj4gwqB7Cj4gLQlzdHJ1Y3Qg cGNpX2RldiAqcGRldiA9IGRldl9wcml2LT5kcm0ucGRldjsKPiAtCXN0YXRpYyBjb25zdCB1aW50 OF90IGRpdl8zMjAwW10gPSB7IDE2LCAxMCzCoMKgOCB9Owo+IC0Jc3RhdGljIGNvbnN0IHVpbnQ4 X3QgZGl2XzQwMDBbXSA9IHsgMjAsIDEyLCAxMCB9Owo+IC0Jc3RhdGljIGNvbnN0IHVpbnQ4X3Qg ZGl2XzUzMzNbXSA9IHsgMjQsIDE2LCAxNCB9Owo+IC0JY29uc3QgdWludDhfdCAqZGl2X3RhYmxl Owo+IC0JdW5zaWduZWQgaW50IGNkY2xrX3NlbCwgdmNvID0gaW50ZWxfaHBsbF92Y28oZGV2X3By aXYpOwo+IC0JdWludDE2X3QgdG1wID0gMDsKPiAtCj4gLQlwY2lfcmVhZF9jb25maWdfd29yZChw ZGV2LCBHQ0ZHQywgJnRtcCk7Cj4gLQo+IC0JY2RjbGtfc2VsID0gKCh0bXAgPj4gOCkgJiAweDFm KSAtIDE7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwljb25z dCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0K PiA+YmFzZS5hZGp1c3RlZF9tb2RlOwo+ICsJaW50IGNsb2NrX2xpbWl0ID0gZGV2X3ByaXYtPm1h eF9kb3RjbGtfZnJlcTsKPiDCoAo+IC0JaWYgKGNkY2xrX3NlbCA+PSBBUlJBWV9TSVpFKGRpdl8z MjAwKSkKPiAtCQlnb3RvIGZhaWw7Cj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDQpIHsK PiArCQljbG9ja19saW1pdCA9IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSAqIDkgLyAxMDsKPiDC oAo+IC0Jc3dpdGNoICh2Y28pIHsKPiAtCWNhc2UgMzIwMDAwMDoKPiAtCQlkaXZfdGFibGUgPSBk aXZfMzIwMDsKPiAtCQlicmVhazsKPiAtCWNhc2UgNDAwMDAwMDoKPiAtCQlkaXZfdGFibGUgPSBk aXZfNDAwMDsKPiAtCQlicmVhazsKPiAtCWNhc2UgNTMzMzMzMzoKPiAtCQlkaXZfdGFibGUgPSBk aXZfNTMzMzsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJZ290byBmYWlsOwo+ICsJCS8q Cj4gKwkJwqAqIEVuYWJsZSBkb3VibGUgd2lkZSBtb2RlIHdoZW4gdGhlIGRvdCBjbG9jawo+ICsJ CcKgKiBpcyA+IDkwJSBvZiB0aGUgKGRpc3BsYXkpIGNvcmUgc3BlZWQuCj4gKwkJwqAqLwo+ICsJ CWlmIChpbnRlbF9jcnRjX3N1cHBvcnRzX2RvdWJsZV93aWRlKGNydGMpICYmCj4gKwkJwqDCoMKg wqBhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrID4gY2xvY2tfbGltaXQpIHsKPiArCQkJY2xvY2tf bGltaXQgPSBkZXZfcHJpdi0+bWF4X2RvdGNsa19mcmVxOwo+ICsJCQlwaXBlX2NvbmZpZy0+ZG91 YmxlX3dpZGUgPSB0cnVlOwo+ICsJCX0KPiDCoAl9Cj4gwqAKPiAtCXJldHVybiBESVZfUk9VTkRf Q0xPU0VTVCh2Y28sIGRpdl90YWJsZVtjZGNsa19zZWxdKTsKPiAtCj4gLWZhaWw6Cj4gLQlEUk1f RVJST1IoIlVuYWJsZSB0byBkZXRlcm1pbmUgQ0RDTEsuIEhQTEwgVkNPPSV1IGtIeiwKPiBDRkdD PTB4JTA0eFxuIiwgdmNvLCB0bXApOwo+IC0JcmV0dXJuIDIwMDAwMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBnMzNfZ2V0X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiAtewo+IC0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXZfcHJpdi0+ZHJtLnBkZXY7Cj4gLQlz dGF0aWMgY29uc3QgdWludDhfdCBkaXZfMzIwMFtdID0geyAxMiwgMTAswqDCoDgswqDCoDcsIDUs IDE2IH07Cj4gLQlzdGF0aWMgY29uc3QgdWludDhfdCBkaXZfNDAwMFtdID0geyAxNCwgMTIsIDEw LMKgwqA4LCA2LCAyMCB9Owo+IC0Jc3RhdGljIGNvbnN0IHVpbnQ4X3QgZGl2XzQ4MDBbXSA9IHsg MjAsIDE0LCAxMiwgMTAsIDgsIDI0IH07Cj4gLQlzdGF0aWMgY29uc3QgdWludDhfdCBkaXZfNTMz M1tdID0geyAyMCwgMTYsIDEyLCAxMiwgOCwgMjggfTsKPiAtCWNvbnN0IHVpbnQ4X3QgKmRpdl90 YWJsZTsKPiAtCXVuc2lnbmVkIGludCBjZGNsa19zZWwsIHZjbyA9IGludGVsX2hwbGxfdmNvKGRl dl9wcml2KTsKPiAtCXVpbnQxNl90IHRtcCA9IDA7Cj4gKwlpZiAoYWRqdXN0ZWRfbW9kZS0+Y3J0 Y19jbG9jayA+IGNsb2NrX2xpbWl0KSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygicmVxdWVzdGVkIHBp eGVsIGNsb2NrICglZCBrSHopIHRvbyBoaWdoIChtYXg6Cj4gJWQga0h6LCBkb3VibGUgd2lkZTog JXMpXG4iLAo+ICsJCQnCoMKgwqDCoMKgwqBhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLCBjbG9j a19saW1pdCwKPiArCQkJwqDCoMKgwqDCoMKgeWVzbm8ocGlwZV9jb25maWctPmRvdWJsZV93aWRl KSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gwqAKPiAtCXBjaV9yZWFkX2NvbmZpZ193 b3JkKHBkZXYsIEdDRkdDLCAmdG1wKTsKPiArCS8qCj4gKwnCoCogUGlwZSBob3Jpem9udGFsIHNp emUgbXVzdCBiZSBldmVuIGluOgo+ICsJwqAqIC0gRFZPIGdhbmdlZCBtb2RlCj4gKwnCoCogLSBM VkRTIGR1YWwgY2hhbm5lbCBtb2RlCj4gKwnCoCogLSBEb3VibGUgd2lkZSBwaXBlCj4gKwnCoCov Cj4gKwlpZiAoKGludGVsX2NydGNfaGFzX3R5cGUocGlwZV9jb25maWcsIElOVEVMX09VVFBVVF9M VkRTKSAmJgo+ICsJwqDCoMKgwqDCoGludGVsX2lzX2R1YWxfbGlua19sdmRzKGRldikpIHx8IHBp cGVfY29uZmlnLT5kb3VibGVfd2lkZSkKPiArCQlwaXBlX2NvbmZpZy0+cGlwZV9zcmNfdyAmPSB+ MTsKPiDCoAo+IC0JY2RjbGtfc2VsID0gKHRtcCA+PiA0KSAmIDB4NzsKPiArCS8qIENhbnRpZ2Er IGNhbm5vdCBoYW5kbGUgbW9kZXMgd2l0aCBhIGhzeW5jIGZyb250IHBvcmNoIG9mIDAuCj4gKwnC oCogV2FQcnVuZU1vZGVXaXRoSW5jb3JyZWN0SHN5bmNPZmZzZXQ6Y3RnLGVsayxpbGssc25iLGl2 Yix2bHYsaHN3Lgo+ICsJwqAqLwo+ICsJaWYgKChJTlRFTF9HRU4oZGV2X3ByaXYpID4gNCB8fCBJ U19HNFgoZGV2X3ByaXYpKSAmJgo+ICsJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQg PT0gYWRqdXN0ZWRfbW9kZS0KPiA+Y3J0Y19oZGlzcGxheSkKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiDCoAo+IC0JaWYgKGNkY2xrX3NlbCA+PSBBUlJBWV9TSVpFKGRpdl8zMjAwKSkKPiAtCQlnb3Rv IGZhaWw7Cj4gKwlpbnRlbF9jcnRjX2NvbXB1dGVfcGl4ZWxfcmF0ZShwaXBlX2NvbmZpZyk7Cj4g wqAKPiAtCXN3aXRjaCAodmNvKSB7Cj4gLQljYXNlIDMyMDAwMDA6Cj4gLQkJZGl2X3RhYmxlID0g ZGl2XzMyMDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDQwMDAwMDA6Cj4gLQkJZGl2X3RhYmxlID0g ZGl2XzQwMDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDQ4MDAwMDA6Cj4gLQkJZGl2X3RhYmxlID0g ZGl2XzQ4MDA7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDUzMzMzMzM6Cj4gLQkJZGl2X3RhYmxlID0g ZGl2XzUzMzM7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCWdvdG8gZmFpbDsKPiAtCX0K PiArCWlmIChIQVNfSVBTKGRldl9wcml2KSkKPiArCQloc3dfY29tcHV0ZV9pcHNfY29uZmlnKGNy dGMsIHBpcGVfY29uZmlnKTsKPiDCoAo+IC0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHZjbywg ZGl2X3RhYmxlW2NkY2xrX3NlbF0pOwo+ICsJaWYgKHBpcGVfY29uZmlnLT5oYXNfcGNoX2VuY29k ZXIpCj4gKwkJcmV0dXJuIGlyb25sYWtlX2ZkaV9jb21wdXRlX2NvbmZpZyhjcnRjLCBwaXBlX2Nv bmZpZyk7Cj4gwqAKPiAtZmFpbDoKPiAtCURSTV9FUlJPUigiVW5hYmxlIHRvIGRldGVybWluZSBD RENMSy4gSFBMTCBWQ089JXUga0h6LAo+IENGR0M9MHglMDh4XG4iLCB2Y28sIHRtcCk7Cj4gLQly ZXR1cm4gMTkwNDc2Owo+ICsJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkCj4g QEAgLTEwMjI1LDI0NSArODg2MSw2IEBAIHZvaWQgaHN3X2Rpc2FibGVfcGM4KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlCj4gKmRldl9wcml2KQo+IMKgCX0KPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9p ZCBieHRfbW9kZXNldF9jb21taXRfY2RjbGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9z dGF0ZSkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9sZF9zdGF0ZS0+ZGV2Owo+ IC0Jc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqb2xkX2ludGVsX3N0YXRlID0KPiAtCQl0b19p bnRlbF9hdG9taWNfc3RhdGUob2xkX3N0YXRlKTsKPiAtCXVuc2lnbmVkIGludCByZXFfY2RjbGsg PSBvbGRfaW50ZWxfc3RhdGUtPmRldl9jZGNsazsKPiAtCj4gLQlieHRfc2V0X2NkY2xrKHRvX2k5 MTUoZGV2KSwgcmVxX2NkY2xrKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBiZHdfYWRqdXN0X21p bl9waXBlX3BpeGVsX3JhdGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUKPiAqY3J0Y19zdGF0ZSwK PiAtCQkJCQnCoMKgaW50IHBpeGVsX3JhdGUpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLQo+ID5kZXYpOwo+ IC0KPiAtCS8qIHBpeGVsIHJhdGUgbXVzdG4ndCBleGNlZWQgOTUlIG9mIGNkY2xrIHdpdGggSVBT IG9uIEJEVyAqLwo+IC0JaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgJiYgY3J0Y19zdGF0ZS0+ aXBzX2VuYWJsZWQpCj4gLQkJcGl4ZWxfcmF0ZSA9IERJVl9ST1VORF9VUChwaXhlbF9yYXRlICog MTAwLCA5NSk7Cj4gLQo+IC0JLyogQlNwZWMgc2F5cyAiRG8gbm90IHVzZSBEaXNwbGF5UG9ydCB3 aXRoIENEQ0xLIGxlc3MgdGhhbgo+IC0JwqAqIDQzMiBNSHosIGF1ZGlvIGVuYWJsZWQsIHBvcnQg d2lkdGggeDQsIGFuZCBsaW5rIHJhdGUKPiAtCcKgKiBIQlIyICg1LjQgR0h6KSwgb3IgZWxzZSB0 aGVyZSBtYXkgYmUgYXVkaW8gY29ycnVwdGlvbiBvcgo+IC0JwqAqIHNjcmVlbiBjb3JydXB0aW9u LiIKPiAtCcKgKi8KPiAtCWlmIChpbnRlbF9jcnRjX2hhc19kcF9lbmNvZGVyKGNydGNfc3RhdGUp ICYmCj4gLQnCoMKgwqDCoGNydGNfc3RhdGUtPmhhc19hdWRpbyAmJgo+IC0JwqDCoMKgwqBjcnRj X3N0YXRlLT5wb3J0X2Nsb2NrID49IDU0MDAwMCAmJgo+IC0JwqDCoMKgwqBjcnRjX3N0YXRlLT5s YW5lX2NvdW50ID09IDQpCj4gLQkJcGl4ZWxfcmF0ZSA9IG1heCg0MzIwMDAsIHBpeGVsX3JhdGUp Owo+IC0KPiAtCXJldHVybiBwaXhlbF9yYXRlOwo+IC19Cj4gLQo+IC0vKiBjb21wdXRlIHRoZSBt YXggcmF0ZSBmb3IgbmV3IGNvbmZpZ3VyYXRpb24gKi8KPiAtc3RhdGljIGludCBpbnRlbF9tYXhf cGl4ZWxfcmF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gLXsKPiAtCXN0cnVj dCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiB0b19pbnRlbF9hdG9taWNfc3Rh dGUoc3RhdGUpOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShzdGF0ZS0+ZGV2KTsKPiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAtCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3N0YXRlOwo+IC0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Cj4gLQl1bnNpZ25lZCBtYXhfcGl4ZWxfcmF0ZSA9IDAsIGk7Cj4gLQllbnVtIHBpcGUgcGlw ZTsKPiAtCj4gLQltZW1jcHkoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGssIGRldl9wcml2LT5taW5f cGl4Y2xrLAo+IC0JwqDCoMKgwqDCoMKgwqBzaXplb2YoaW50ZWxfc3RhdGUtPm1pbl9waXhjbGsp KTsKPiAtCj4gLQlmb3JfZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjc3RhdGUsIGkp IHsKPiAtCQlpbnQgcGl4ZWxfcmF0ZTsKPiAtCj4gLQkJY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2Ny dGNfc3RhdGUoY3N0YXRlKTsKPiAtCQlpZiAoIWNydGNfc3RhdGUtPmJhc2UuZW5hYmxlKSB7Cj4g LQkJCWludGVsX3N0YXRlLT5taW5fcGl4Y2xrW2ldID0gMDsKPiAtCQkJY29udGludWU7Cj4gLQkJ fQo+IC0KPiAtCQlwaXhlbF9yYXRlID0gY3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKPiAtCj4gLQkJ aWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfR0VOOShkZXZfcHJpdikpCj4gLQkJCXBp eGVsX3JhdGUgPQo+IGJkd19hZGp1c3RfbWluX3BpcGVfcGl4ZWxfcmF0ZShjcnRjX3N0YXRlLAo+ IC0JCQkJCQkJCcKgwqDCoMKgcGl4ZWxfcmF0Cj4gZSk7Cj4gLQo+IC0JCWludGVsX3N0YXRlLT5t aW5fcGl4Y2xrW2ldID0gcGl4ZWxfcmF0ZTsKPiAtCX0KPiAtCj4gLQlmb3JfZWFjaF9waXBlKGRl dl9wcml2LCBwaXBlKQo+IC0JCW1heF9waXhlbF9yYXRlID0gbWF4KGludGVsX3N0YXRlLT5taW5f cGl4Y2xrW3BpcGVdLAo+IG1heF9waXhlbF9yYXRlKTsKPiAtCj4gLQlyZXR1cm4gbWF4X3BpeGVs X3JhdGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGJyb2Fkd2VsbF9zZXRfY2RjbGsoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgaW50IGNkY2xrKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLQl1aW50MzJfdCB2YWwsIGRhdGE7Cj4g LQlpbnQgcmV0Owo+IC0KPiAtCWlmIChXQVJOKChJOTE1X1JFQUQoTENQTExfQ1RMKSAmCj4gLQkJ wqDCoChMQ1BMTF9QTExfRElTQUJMRSB8IExDUExMX1BMTF9MT0NLIHwKPiAtCQnCoMKgwqBMQ1BM TF9DRF9DTE9DS19ESVNBQkxFIHwgTENQTExfUk9PVF9DRF9DTE9DS19ESVNBQkxFIHwKPiAtCQnC oMKgwqBMQ1BMTF9DRDJYX0NMT0NLX0RJU0FCTEUgfCBMQ1BMTF9QT1dFUl9ET1dOX0FMTE9XIHwK PiAtCQnCoMKgwqBMQ1BMTF9DRF9TT1VSQ0VfRkNMSykpICE9IExDUExMX1BMTF9MT0NLLAo+IC0J CcKgInRyeWluZyB0byBjaGFuZ2UgY2RjbGsgZnJlcXVlbmN5IHdpdGggY2RjbGsgbm90Cj4gZW5h YmxlZFxuIikpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5ycHMu aHdfbG9jayk7Cj4gLQlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV93cml0ZShkZXZfcHJpdiwKPiAt CQkJCcKgwqDCoMKgwqDCoEJEV19QQ09ERV9ESVNQTEFZX0ZSRVFfQ0hBTkdFX1JFUSwKPiAweDAp Owo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0JaWYgKHJldCkg ewo+IC0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGluZm9ybSBwY29kZSBhYm91dCBjZGNsayBjaGFu Z2VcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQl2YWwgPSBJOTE1X1JFQUQoTENQTExf Q1RMKTsKPiAtCXZhbCB8PSBMQ1BMTF9DRF9TT1VSQ0VfRkNMSzsKPiAtCUk5MTVfV1JJVEUoTENQ TExfQ1RMLCB2YWwpOwo+IC0KPiAtCWlmICh3YWl0X2Zvcl91cyhJOTE1X1JFQUQoTENQTExfQ1RM KSAmCj4gLQkJCUxDUExMX0NEX1NPVVJDRV9GQ0xLX0RPTkUsIDEpKQo+IC0JCURSTV9FUlJPUigi U3dpdGNoaW5nIHRvIEZDTEsgZmFpbGVkXG4iKTsKPiAtCj4gLQl2YWwgPSBJOTE1X1JFQUQoTENQ TExfQ1RMKTsKPiAtCXZhbCAmPSB+TENQTExfQ0xLX0ZSRVFfTUFTSzsKPiAtCj4gLQlzd2l0Y2gg KGNkY2xrKSB7Cj4gLQljYXNlIDQ1MDAwMDoKPiAtCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfNDUw Owo+IC0JCWRhdGEgPSAwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSA1NDAwMDA6Cj4gLQkJdmFsIHw9 IExDUExMX0NMS19GUkVRXzU0T19CRFc7Cj4gLQkJZGF0YSA9IDE7Cj4gLQkJYnJlYWs7Cj4gLQlj YXNlIDMzNzUwMDoKPiAtCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfMzM3XzVfQkRXOwo+IC0JCWRh dGEgPSAyOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSA2NzUwMDA6Cj4gLQkJdmFsIHw9IExDUExMX0NM S19GUkVRXzY3NV9CRFc7Cj4gLQkJZGF0YSA9IDM7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+ IC0JCVdBUk4oMSwgImludmFsaWQgY2RjbGsgZnJlcXVlbmN5XG4iKTsKPiAtCQlyZXR1cm47Cj4g LQl9Cj4gLQo+IC0JSTkxNV9XUklURShMQ1BMTF9DVEwsIHZhbCk7Cj4gLQo+IC0JdmFsID0gSTkx NV9SRUFEKExDUExMX0NUTCk7Cj4gLQl2YWwgJj0gfkxDUExMX0NEX1NPVVJDRV9GQ0xLOwo+IC0J STkxNV9XUklURShMQ1BMTF9DVEwsIHZhbCk7Cj4gLQo+IC0JaWYgKHdhaXRfZm9yX3VzKChJOTE1 X1JFQUQoTENQTExfQ1RMKSAmCj4gLQkJCUxDUExMX0NEX1NPVVJDRV9GQ0xLX0RPTkUpID09IDAs IDEpKQo+IC0JCURSTV9FUlJPUigiU3dpdGNoaW5nIGJhY2sgdG8gTENQTEwgZmFpbGVkXG4iKTsK PiAtCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cnBzLmh3X2xvY2spOwo+IC0Jc2FuZHlicmlk Z2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIEhTV19QQ09ERV9ERV9XUklURV9GUkVRX1JFUSwgZGF0 YSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7Cj4gLQo+IC0JSTkx NV9XUklURShDRENMS19GUkVRLCBESVZfUk9VTkRfQ0xPU0VTVChjZGNsaywgMTAwMCkgLSAxKTsK PiAtCj4gLQlpbnRlbF91cGRhdGVfY2RjbGsoZGV2X3ByaXYpOwo+IC0KPiAtCVdBUk4oY2RjbGsg IT0gZGV2X3ByaXYtPmNkY2xrX2ZyZXEsCj4gLQnCoMKgwqDCoMKgImNkY2xrIHJlcXVlc3RlZCAl ZCBrSHogYnV0IGdvdCAlZCBrSHpcbiIsCj4gLQnCoMKgwqDCoMKgY2RjbGssIGRldl9wcml2LT5j ZGNsa19mcmVxKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBicm9hZHdlbGxfY2FsY19jZGNsayhp bnQgbWF4X3BpeGNsaykKPiAtewo+IC0JaWYgKG1heF9waXhjbGsgPiA1NDAwMDApCj4gLQkJcmV0 dXJuIDY3NTAwMDsKPiAtCWVsc2UgaWYgKG1heF9waXhjbGsgPiA0NTAwMDApCj4gLQkJcmV0dXJu IDU0MDAwMDsKPiAtCWVsc2UgaWYgKG1heF9waXhjbGsgPiAzMzc1MDApCj4gLQkJcmV0dXJuIDQ1 MDAwMDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gMzM3NTAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IGJyb2Fkd2VsbF9tb2Rlc2V0X2NhbGNfY2RjbGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHN0YXRlLT5kZXYpOwo+IC0Jc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqaW50ZWxfc3RhdGUg PQo+IHRvX2ludGVsX2F0b21pY19zdGF0ZShzdGF0ZSk7Cj4gLQlpbnQgbWF4X3BpeGNsayA9IGlu dGVsX21heF9waXhlbF9yYXRlKHN0YXRlKTsKPiAtCWludCBjZGNsazsKPiAtCj4gLQkvKgo+IC0J wqAqIEZJWE1FIHNob3VsZCBhbHNvIGFjY291bnQgZm9yIHBsYW5lIHJhdGlvCj4gLQnCoCogb25j ZSA2NGJwcCBwaXhlbCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQuCj4gLQnCoCovCj4gLQljZGNsayA9 IGJyb2Fkd2VsbF9jYWxjX2NkY2xrKG1heF9waXhjbGspOwo+IC0KPiAtCWlmIChjZGNsayA+IGRl dl9wcml2LT5tYXhfY2RjbGtfZnJlcSkgewo+IC0JCURSTV9ERUJVR19LTVMoInJlcXVlc3RlZCBj ZGNsayAoJWQga0h6KSBleGNlZWRzIG1heCAoJWQKPiBrSHopXG4iLAo+IC0JCQnCoMKgwqDCoMKg wqBjZGNsaywgZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsK PiAtCX0KPiAtCj4gLQlpbnRlbF9zdGF0ZS0+Y2RjbGsgPSBpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xr ID0gY2RjbGs7Cj4gLQlpZiAoIWludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3MpCj4gLQkJaW50ZWxf c3RhdGUtPmRldl9jZGNsayA9IGJyb2Fkd2VsbF9jYWxjX2NkY2xrKDApOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBicm9hZHdlbGxfbW9kZXNldF9jb21taXRfY2Rj bGsoc3RydWN0IGRybV9hdG9taWNfc3RhdGUKPiAqb2xkX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gb2xkX3N0YXRlLT5kZXY7Cj4gLQlzdHJ1Y3QgaW50ZWxfYXRvbWlj X3N0YXRlICpvbGRfaW50ZWxfc3RhdGUgPQo+IC0JCXRvX2ludGVsX2F0b21pY19zdGF0ZShvbGRf c3RhdGUpOwo+IC0JdW5zaWduZWQgcmVxX2NkY2xrID0gb2xkX2ludGVsX3N0YXRlLT5kZXZfY2Rj bGs7Cj4gLQo+IC0JYnJvYWR3ZWxsX3NldF9jZGNsayhkZXYsIHJlcV9jZGNsayk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgc2tsX21vZGVzZXRfY2FsY19jZGNsayhzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0 YXRlID0KPiB0b19pbnRlbF9hdG9taWNfc3RhdGUoc3RhdGUpOwo+IC0Jc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKPiAtCWNvbnN0IGludCBt YXhfcGl4Y2xrID0gaW50ZWxfbWF4X3BpeGVsX3JhdGUoc3RhdGUpOwo+IC0JaW50IHZjbyA9IGlu dGVsX3N0YXRlLT5jZGNsa19wbGxfdmNvOwo+IC0JaW50IGNkY2xrOwo+IC0KPiAtCS8qCj4gLQnC oCogRklYTUUgc2hvdWxkIGFsc28gYWNjb3VudCBmb3IgcGxhbmUgcmF0aW8KPiAtCcKgKiBvbmNl IDY0YnBwIHBpeGVsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4KPiAtCcKgKi8KPiAtCWNkY2xrID0g c2tsX2NhbGNfY2RjbGsobWF4X3BpeGNsaywgdmNvKTsKPiAtCj4gLQkvKgo+IC0JwqAqIEZJWE1F IG1vdmUgdGhlIGNkY2xrIGNhY2x1bGF0aW9uIHRvCj4gLQnCoCogY29tcHV0ZV9jb25maWcoKSBz byB3ZSBjYW4gZmFpbCBncmFjZWd1bGx5Lgo+IC0JwqAqLwo+IC0JaWYgKGNkY2xrID4gZGV2X3By aXYtPm1heF9jZGNsa19mcmVxKSB7Cj4gLQkJRFJNX0VSUk9SKCJyZXF1ZXN0ZWQgY2RjbGsgKCVk IGtIeikgZXhjZWVkcyBtYXggKCVkIGtIeilcbiIsCj4gLQkJCcKgwqBjZGNsaywgZGV2X3ByaXYt Pm1heF9jZGNsa19mcmVxKTsKPiAtCQljZGNsayA9IGRldl9wcml2LT5tYXhfY2RjbGtfZnJlcTsK PiAtCX0KPiAtCj4gLQlpbnRlbF9zdGF0ZS0+Y2RjbGsgPSBpbnRlbF9zdGF0ZS0+ZGV2X2NkY2xr ID0gY2RjbGs7Cj4gLQlpZiAoIWludGVsX3N0YXRlLT5hY3RpdmVfY3J0Y3MpCj4gLQkJaW50ZWxf c3RhdGUtPmRldl9jZGNsayA9IHNrbF9jYWxjX2NkY2xrKDAsIHZjbyk7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHNrbF9tb2Rlc2V0X2NvbW1pdF9jZGNsayhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9sZF9zdGF0ZS0+ZGV2KTsKPiAtCXN0cnVjdCBp bnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0KPiB0b19pbnRlbF9hdG9taWNfc3RhdGUo b2xkX3N0YXRlKTsKPiAtCXVuc2lnbmVkIGludCByZXFfY2RjbGsgPSBpbnRlbF9zdGF0ZS0+ZGV2 X2NkY2xrOwo+IC0JdW5zaWduZWQgaW50IHJlcV92Y28gPSBpbnRlbF9zdGF0ZS0+Y2RjbGtfcGxs X3ZjbzsKPiAtCj4gLQlza2xfc2V0X2NkY2xrKGRldl9wcml2LCByZXFfY2RjbGssIHJlcV92Y28p Owo+IC19Cj4gLQo+IMKgc3RhdGljIGludCBoYXN3ZWxsX2NydGNfY29tcHV0ZV9jbG9jayhzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiDCoAkJCQnCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiDCoHsKPiBAQCAtMTYwMTksNiArMTQ0MTYsOCBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcwo+IGludGVsX21vZGVfZnVuY3Mg PSB7Cj4gwqAgKi8KPiDCoHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5X2hvb2tzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiDCoHsKPiArCWludGVsX2luaXRfY2RjbGtfaG9va3Mo ZGV2X3ByaXYpOwo+ICsKPiDCoAlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA5KSB7 Cj4gwqAJCWRldl9wcml2LT5kaXNwbGF5LmdldF9waXBlX2NvbmZpZyA9IGhhc3dlbGxfZ2V0X3Bp cGVfY29uZmlnOwo+IMKgCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25m aWcgPQo+IEBAIC0xNjA4Nyw1MiArMTQ0ODYsNiBAQCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9o b29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdikKPiDCoAkJZGV2X3ByaXYt PmRpc3BsYXkuY3J0Y19kaXNhYmxlID0gaTl4eF9jcnRjX2Rpc2FibGU7Cj4gwqAJfQo+IMKgCj4g LQkvKiBSZXR1cm5zIHRoZSBjb3JlIGRpc3BsYXkgY2xvY2sgc3BlZWQgKi8KPiAtCWlmIChJU19T S1lMQUtFKGRldl9wcml2KSB8fCBJU19LQUJZTEFLRShkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYt PmRpc3BsYXkuZ2V0X2NkY2xrID0gc2t5bGFrZV9nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19H RU45X0xQKGRldl9wcml2KSkKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBicm94 dG9uX2dldF9jZGNsazsKPiAtCWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXZfcHJpdikpCj4gLQkJ ZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gYnJvYWR3ZWxsX2dldF9jZGNsazsKPiAtCWVs c2UgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9j ZGNsayA9IGhhc3dlbGxfZ2V0X2NkY2xrOwo+IC0JZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZf cHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYtPmRpc3BsYXku Z2V0X2NkY2xrID0gdmFsbGV5dmlld19nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19HRU42KGRl dl9wcml2KSB8fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5 LmdldF9jZGNsayA9IGZpeGVkXzQwMG1oel9nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19HRU41 KGRldl9wcml2KSkKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhlZF80NTBt aHpfZ2V0X2NkY2xrOwo+IC0JZWxzZSBpZiAoSVNfR000NShkZXZfcHJpdikpCj4gLQkJZGV2X3By aXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZ200NV9nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19H NFgoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGczM19nZXRf Y2RjbGs7Cj4gLQllbHNlIGlmIChJU19JOTY1R00oZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5k aXNwbGF5LmdldF9jZGNsayA9IGk5NjVnbV9nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19JOTY1 RyhkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZml4ZWRfNDAw bWh6X2dldF9jZGNsazsKPiAtCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldl9wcml2KSkKPiAtCQlk ZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBwbnZfZ2V0X2NkY2xrOwo+IC0JZWxzZSBpZiAo SVNfRzMzKGRldl9wcml2KSkKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBnMzNf Z2V0X2NkY2xrOwo+IC0JZWxzZSBpZiAoSVNfSTk0NUdNKGRldl9wcml2KSkKPiAtCQlkZXZfcHJp di0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhlZF8yMDBtaHpfZ2V0X2NkY2xrOwo+IC0JZWxzZSBp ZiAoSVNfSTk0NUcoZGV2X3ByaXYpKQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9 IGZpeGVkXzQwMG1oel9nZXRfY2RjbGs7Cj4gLQllbHNlIGlmIChJU19JOTE1R00oZGV2X3ByaXYp KQo+IC0JCWRldl9wcml2LT5kaXNwbGF5LmdldF9jZGNsayA9IGk5MTVnbV9nZXRfY2RjbGs7Cj4g LQllbHNlIGlmIChJU19JOTE1RyhkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0 X2NkY2xrID0gZml4ZWRfMzMzbWh6X2dldF9jZGNsazsKPiAtCWVsc2UgaWYgKElTX0k4NjVHKGRl dl9wcml2KSkKPiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfY2RjbGsgPSBmaXhlZF8yNjZtaHpf Z2V0X2NkY2xrOwo+IC0JZWxzZSBpZiAoSVNfSTg1WChkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYt PmRpc3BsYXkuZ2V0X2NkY2xrID0gaTg1eF9nZXRfY2RjbGs7Cj4gLQllbHNlwqDCoGlmIChJU19J ODQ1RyhkZXZfcHJpdikpCj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZml4ZWRf MjAwbWh6X2dldF9jZGNsazsKPiAtCWVsc2UgeyAvKiA4MzAgKi8KPiAtCQlXQVJOKCFJU19JODMw KGRldl9wcml2KSwgIlVua25vd24gcGxhdGZvcm0uIEFzc3VtaW5nIDEzMyBNSHoKPiBDRENMS1xu Iik7Cj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0X2NkY2xrID0gZml4ZWRfMTMzbWh6X2dldF9j ZGNsazsKPiAtCX0KPiAtCj4gwqAJaWYgKElTX0dFTjUoZGV2X3ByaXYpKSB7Cj4gwqAJCWRldl9w cml2LT5kaXNwbGF5LmZkaV9saW5rX3RyYWluID0gaXJvbmxha2VfZmRpX2xpbmtfdHJhaW47Cj4g wqAJfSBlbHNlIGlmIChJU19HRU42KGRldl9wcml2KSkgewo+IEBAIC0xNjE0NCwyOCArMTQ0OTcs NiBAQCB2b2lkIGludGVsX2luaXRfZGlzcGxheV9ob29rcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZQo+ICpkZXZfcHJpdikKPiDCoAkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBo c3dfZmRpX2xpbmtfdHJhaW47Cj4gwqAJfQo+IMKgCj4gLQlpZiAoSVNfQlJPQURXRUxMKGRldl9w cml2KSkgewo+IC0JCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfY29tbWl0X2NkY2xrID0KPiAt CQkJYnJvYWR3ZWxsX21vZGVzZXRfY29tbWl0X2NkY2xrOwo+IC0JCWRldl9wcml2LT5kaXNwbGF5 Lm1vZGVzZXRfY2FsY19jZGNsayA9Cj4gLQkJCWJyb2Fkd2VsbF9tb2Rlc2V0X2NhbGNfY2RjbGs7 Cj4gLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpKSB7Cj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9jb21taXRfY2RjbGsg PQo+IC0JCQl2YWxsZXl2aWV3X21vZGVzZXRfY29tbWl0X2NkY2xrOwo+IC0JCWRldl9wcml2LT5k aXNwbGF5Lm1vZGVzZXRfY2FsY19jZGNsayA9Cj4gLQkJCXZhbGxleXZpZXdfbW9kZXNldF9jYWxj X2NkY2xrOwo+IC0JfSBlbHNlIGlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewo+IC0JCWRldl9w cml2LT5kaXNwbGF5Lm1vZGVzZXRfY29tbWl0X2NkY2xrID0KPiAtCQkJYnh0X21vZGVzZXRfY29t bWl0X2NkY2xrOwo+IC0JCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfY2FsY19jZGNsayA9Cj4g LQkJCWJ4dF9tb2Rlc2V0X2NhbGNfY2RjbGs7Cj4gLQl9IGVsc2UgaWYgKElTX1NLWUxBS0UoZGV2 X3ByaXYpIHx8IElTX0tBQllMQUtFKGRldl9wcml2KSkgewo+IC0JCWRldl9wcml2LT5kaXNwbGF5 Lm1vZGVzZXRfY29tbWl0X2NkY2xrID0KPiAtCQkJc2tsX21vZGVzZXRfY29tbWl0X2NkY2xrOwo+ IC0JCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfY2FsY19jZGNsayA9Cj4gLQkJCXNrbF9tb2Rl c2V0X2NhbGNfY2RjbGs7Cj4gLQl9Cj4gLQo+IMKgCWlmIChkZXZfcHJpdi0+aW5mby5nZW4gPj0g OSkKPiDCoAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX2NydGNzID0gc2tsX3VwZGF0ZV9jcnRj czsKPiDCoAllbHNlCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IDM5NjllNzg2 ZDU2Ni4uOGQ5M2I3YmRhM2ZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAt MTIyMCwxMiArMTIyMCwxOSBAQCB2b2lkIGludGVsX2F1ZGlvX2NvZGVjX2Rpc2FibGUoc3RydWN0 IGludGVsX2VuY29kZXIKPiAqZW5jb2Rlcik7Cj4gwqB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50 X2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiDCoHZvaWQgaTkxNV9h dWRpb19jb21wb25lbnRfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Owo+IMKgCj4gKy8qIGludGVsX2NkY2xrLmMgKi8KPiArdm9pZCBpbnRlbF9pbml0X2NkY2xrX2hv b2tzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gK3ZvaWQgaW50ZWxfdXBk YXRlX21heF9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICt2b2lk IGludGVsX3VwZGF0ZV9jZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ ICt2b2lkIGludGVsX3VwZGF0ZV9yYXdjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiArCj4gwqAvKiBpbnRlbF9kaXNwbGF5LmMgKi8KPiDCoGVudW0gdHJhbnNjb2RlciBp bnRlbF9jcnRjX3BjaF90cmFuc2NvZGVyKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsKPiAtdm9p ZCBza2xfc2V0X3ByZWZlcnJlZF9jZGNsa192Y28oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCBpbnQgdmNvKTsKPiDCoHZvaWQgaW50ZWxfdXBkYXRlX3Jhd2NsayhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+IMKgaW50IHZsdl9nZXRfY2NrX2Nsb2NrKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJwqDCoMKgwqDCoMKgY29uc3QgY2hh ciAqbmFtZSwgdTMyIHJlZywgaW50IHJlZl9mcmVxKTsKPiAraW50IHZsdl9nZXRfY2NrX2Nsb2Nr X2hwbGwoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQnCoMKgwqBjb25z dCBjaGFyICpuYW1lLCB1MzIgcmVnKTsKPiDCoHZvaWQgbHB0X2Rpc2FibGVfcGNoX3RyYW5zY29k ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiDCoHZvaWQgbHB0X2Rpc2Fi bGVfaWNsa2lwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gwqBleHRlcm4g Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9wbGFuZV9mdW5jczsKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==