From mboxrd@z Thu Jan 1 00:00:00 1970 From: "O'Rourke, Tom" Subject: Re: [PATCH 09/13 v4] drm/i915: Implementation of GuC client Date: Fri, 24 Jul 2015 19:31:07 -0700 Message-ID: <20150725023107.GE142616@torourke-desk1> References: <1436466554-24806-1-git-send-email-david.s.gordon@intel.com> <1436466554-24806-10-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id B3A8A6E06C for ; Fri, 24 Jul 2015 19:34:41 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1436466554-24806-10-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMDksIDIwMTUgYXQgMDc6Mjk6MTBQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gQSBHdUMgY2xpZW50IGhhcyBpdHMgb3duIGRvb3JiZWxsIGFuZCB3b3JrcXVldWUuIEl0 IG1haW50YWlucyB0aGUKPiBkb29yYmVsbCBjYWNoZSBsaW5lLCBwcm9jZXNzIGRlc2NyaXB0aW9u IG9iamVjdCBhbmQgd29yayBxdWV1ZSBpdGVtLgo+IAo+IEEgZGVmYXVsdCBndWNfY2xpZW50IGlz IGNyZWF0ZWQgZm9yIHRoZSBpOTE1IGRyaXZlciB0byB1c2UgZm9yCj4gbm9ybWFsLXByaW9yaXR5 IGluLW9yZGVyIHN1Ym1pc3Npb24uCj4gCj4gTm90ZSB0aGF0IHRoZSBjcmVhdGVkIGNsaWVudCBp cyBub3QgeWV0IHJlYWR5IGZvciB1c2U7IGRvb3JiZWxsCj4gYWxsb2NhdGlvbiB3aWxsIGZhaWwg YXMgd2UgaGF2ZW4ndCB5ZXQgbGlua2VkIHRoZSBHdUMncyBjb250ZXh0Cj4gZGVzY3JpcHRvciB0 byB0aGUgZGVmYXVsdCBjb250ZXh0cyBmb3IgZWFjaCByaW5nIChzZWUgbGF0ZXIgcGF0Y2gpLgo+ IAo+IHYyOgo+ICAgICBEZWZlciBhZGRpbmcgc3RydWN0dXJlIG1lbWJlcnMgdW50aWwgbmVlZGVk IFtDaHJpcyBXaWxzb25dCj4gICAgIFJhdGlvbmFsaXNlIHR5cGUgZGVjbGFyYXRpb25zIFtDaHJp cyBXaWxzb25dCj4gCj4gdjQ6Cj4gICAgIFJlYmFzZWQKPiAKPiBJc3N1ZTogVklaLTQ4ODQKPiBT aWduZWQtb2ZmLWJ5OiBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5 OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgoKW1RPUjpdIEkgaGFkIHNv bWUgbm9uLWNyaXRpY2FsIHF1ZXN0aW9ucyBiZWxvdy4KClJldmlld2VkLWJ5OiBUb20gTydSb3Vy a2UgPFRvbS5PJ1JvdXJrZUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyB8IDY0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAgICAgICAgICAgfCAgNDIgKysK PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jICAgIHwgIDEyICsKPiAg MyBmaWxlcyBjaGFuZ2VkLCA3MDMgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiBpbmRleCBlOWQ0NmQ2Li4yNWQ4ODA3IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+IEBAIC0yNyw2 ICsyNyw1MTIgQEAKPiAgI2luY2x1ZGUgImludGVsX2d1Yy5oIgo+ICAKPiAgLyoqCj4gKyAqIERP QzogR3VDIENsaWVudAo+ICsgKgo+ICsgKiBpOTE1X2d1Y19jbGllbnQ6Cj4gKyAqIFdlIHVzZSB0 aGUgdGVybSBjbGllbnQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggY29udGV4dHMuIEEgaTkxNV9n dWNfY2xpZW50IGlzCj4gKyAqIGVxdWl2YWxlbnQgdG8gR3VDIG9iamVjdCBndWNfY29udGV4dF9k ZXNjLiBUaGlzIGNvbnRleHQgZGVzY3JpcHRvciBpcwo+ICsgKiBhbGxvY2F0ZWQgZnJvbSBhIHBv b2wgb2YgMTAyNCBlbnRyaWVzLiBLZXJuZWwgZHJpdmVyIHdpbGwgYWxsb2NhdGUgZG9vcmJlbGwK PiArICogYW5kIHdvcmtxdWV1ZSBmb3IgaXQuIEFsc28gdGhlIHByb2Nlc3MgZGVzY3JpcHRvciAo Z3VjX3Byb2Nlc3NfZGVzYyksIHdoaWNoCj4gKyAqIGlzIG1hcHBlZCB0byBjbGllbnQgc3BhY2Uu IFNvIHRoZSBjbGllbnQgY2FuIHdyaXRlIFdvcmsgSXRlbSB0aGVuIHJpbmcgdGhlCj4gKyAqIGRv b3JiZWxsLgo+ICsgKgo+ICsgKiBUbyBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24sIHdlIGFs bG9jYXRlIG9uZSBnZW0gb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsCj4gKyAqIHBhZ2VzIGZvciBk b29yYmVsbCwgcHJvY2VzcyBkZXNjcmlwdG9yIGFuZCB3b3JrcXVldWUuCj4gKyAqCj4gKyAqIFRo ZSBTY3JhdGNoIHJlZ2lzdGVyczoKPiArICogVGhlcmUgYXJlIDE2IE1NSU8tYmFzZWQgcmVnaXN0 ZXJzIHN0YXJ0IGZyb20gMHhDMTgwLiBUaGUga2VybmVsIGRyaXZlciB3cml0ZXMKPiArICogYSB2 YWx1ZSB0byB0aGUgYWN0aW9uIHJlZ2lzdGVyIChTT0ZUX1NDUkFUQ0hfMCkgYWxvbmcgd2l0aCBh bnkgZGF0YS4gSXQgdGhlbgo+ICsgKiB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQgb24gdGhlIEd1QyB2 aWEgYW5vdGhlciByZWdpc3RlciB3cml0ZSAoMHhDNEM4KS4KPiArICogRmlybXdhcmUgd3JpdGVz IGEgc3VjY2Vzcy9mYWlsIGNvZGUgYmFjayB0byB0aGUgYWN0aW9uIHJlZ2lzdGVyIGFmdGVyCj4g KyAqIHByb2Nlc3NlcyB0aGUgcmVxdWVzdC4gVGhlIGtlcm5lbCBkcml2ZXIgcG9sbHMgd2FpdGlu ZyBmb3IgdGhpcyB1cGRhdGUgYW5kCj4gKyAqIHRoZW4gcHJvY2VlZHMuCj4gKyAqIFNlZSBob3N0 Mmd1Y19hY3Rpb24oKQo+ICsgKgo+ICsgKiBEb29yYmVsbHM6Cj4gKyAqIERvb3JiZWxscyBhcmUg aW50ZXJydXB0cyB0byB1S2VybmVsLiBBIGRvb3JiZWxsIGlzIGEgc2luZ2xlIGNhY2hlIGxpbmUg KFFXKQo+ICsgKiBtYXBwZWQgaW50byBwcm9jZXNzIHNwYWNlLgo+ICsgKgo+ICsgKiBXb3JrIEl0 ZW1zOgo+ICsgKiBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiB3b3JrIGl0ZW1zIHRoYXQgdGhl IGhvc3QgbWF5IHBsYWNlIGludG8gYQo+ICsgKiB3b3JrcXVldWUsIGVhY2ggd2l0aCBpdHMgb3du IHJlcXVpcmVtZW50cyBhbmQgbGltaXRhdGlvbnMuIEN1cnJlbnRseSBvbmx5Cj4gKyAqIFdRX1RZ UEVfSU5PUkRFUiBpcyBuZWVkZWQgdG8gc3VwcG9ydCBsZWdhY3kgc3VibWlzc2lvbiB2aWEgR3VD LCB3aGljaAo+ICsgKiByZXByZXNlbnRzIGluLW9yZGVyIHF1ZXVlLiBUaGUga2VybmVsIGRyaXZl ciBwYWNrcyByaW5nIHRhaWwgcG9pbnRlciBhbmQgYW4KPiArICogRUxTUCBjb250ZXh0IGRlc2Ny aXB0b3IgZHdvcmQgaW50byBXb3JrIEl0ZW0uCj4gKyAqIFNlZSBndWNfYWRkX3dvcmtxdWV1ZV9p dGVtKCkKPiArICoKPiArICovCj4gKwo+ICsvKgo+ICsgKiBSZWFkIEd1QyBjb21tYW5kL3N0YXR1 cyByZWdpc3RlciAoU09GVF9TQ1JBVENIXzApCj4gKyAqIFJldHVybiB0cnVlIGlmIGl0IGNvbnRh aW5zIGEgcmVzcG9uc2UgcmF0aGVyIHRoYW4gYSBjb21tYW5kCj4gKyAqLwo+ICtzdGF0aWMgaW5s aW5lIGJvb2wgaG9zdDJndWNfYWN0aW9uX3Jlc3BvbnNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiArCQkJCQkgICAgdTMyICpzdGF0dXMpCj4gK3sKPiArCXUzMiB2YWwgPSBJ OTE1X1JFQUQoU09GVF9TQ1JBVENIKDApKTsKPiArCSpzdGF0dXMgPSB2YWw7Cj4gKwlyZXR1cm4g R1VDMkhPU1RfSVNfUkVTUE9OU0UodmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBob3N0Mmd1 Y19hY3Rpb24oc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgKmRhdGEsIHUzMiBsZW4pCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7 Cj4gKwl1MzIgc3RhdHVzOwo+ICsJaW50IGk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChXQVJO X09OKGxlbiA8IDEgfHwgbGVuID4gMTUpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKCltUT1I6 XSBXb3VsZCBpdCBiZSBnb29kIGZvciBob3N0Mmd1Y19hY3Rpb24gdG8gdGFrZSBhIApmb3JjZXdh a2U/ICBUaGVyZSBhcmUgc2V2ZXJhbCB3cml0ZXMgYW5kIHBvbGxpbmcgcmVhZHMgCmZvciBjb21w bGV0aW9uLiAgVGFraW5nIGEgZm9yY2V3YWtlIGNvdWxkIGF2b2lkIHN1cnBsdXMgCmZvcmNld2Fr ZXMgZm9yIGVhY2ggcmVnaXN0ZXIgYWNjZXNzLgoKPiArCXNwaW5fbG9jaygmZGV2X3ByaXYtPmd1 Yy5ob3N0Mmd1Y19sb2NrKTsKPiArCj4gKwlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9jb3VudCArPSAx Owo+ICsJZGV2X3ByaXYtPmd1Yy5hY3Rpb25fY21kID0gZGF0YVswXTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCj4gKwkJSTkxNV9XUklURShTT0ZUX1NDUkFUQ0goaSksIGRhdGFb aV0pOwo+ICsKPiArCVBPU1RJTkdfUkVBRChTT0ZUX1NDUkFUQ0goaSAtIDEpKTsKPiArCj4gKwlJ OTE1X1dSSVRFKEhPU1QyR1VDX0lOVEVSUlVQVCwgSE9TVDJHVUNfVFJJR0dFUik7Cj4gKwo+ICsJ cmV0ID0gd2FpdF9mb3JfYXRvbWljKGhvc3QyZ3VjX2FjdGlvbl9yZXNwb25zZShkZXZfcHJpdiwg JnN0YXR1cyksIDEwKTsKW1RPUjpdIFdoeSAxMD8KCj4gKwlpZiAoc3RhdHVzICE9IEdVQzJIT1NU X1NUQVRVU19TVUNDRVNTKSB7Cj4gKwkJLyogZWl0aGVyIEd1QyBkb2Vzbid0IHJlc3BvbmQsIHdo aWNoIGlzIGEgVElNRU9VVCwKPiArCQkgKiBvciBhIGZhaWx1cmUgY29kZSBpcyByZXR1cm5lZC4g Ki8KPiArCQlpZiAocmV0ICE9IC1FVElNRURPVVQpCj4gKwkJCXJldCA9IC1FSU87Cj4gKwo+ICsJ CURSTV9FUlJPUigiR1VDOiBob3N0Mmd1YyBhY3Rpb24gMHglWCBmYWlsZWQuIHJldD0lZCAiCj4g KwkJCQkic3RhdHVzPTB4JTA4WCByZXNwb25zZT0weCUwOFhcbiIsCj4gKwkJCQlkYXRhWzBdLCBy ZXQsIHN0YXR1cywKPiArCQkJCUk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7Cj4gKwo+ICsJ CWRldl9wcml2LT5ndWMuYWN0aW9uX2ZhaWwgKz0gMTsKPiArCQlkZXZfcHJpdi0+Z3VjLmFjdGlv bl9lcnIgPSByZXQ7Cj4gKwl9Cj4gKwlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9zdGF0dXMgPSBzdGF0 dXM7Cj4gKwo+ICsJc3Bpbl91bmxvY2soJmRldl9wcml2LT5ndWMuaG9zdDJndWNfbG9jayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoKPiArICogVGVsbCB0aGUgR3VDIHRvIGFs bG9jYXRlIG9yIGRlYWxsb2NhdGUgYSBzcGVjaWZpYyBkb29yYmVsbAo+ICsgKi8KPiArCj4gK3N0 YXRpYyBpbnQgaG9zdDJndWNfYWxsb2NhdGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3Vj LAo+ICsJCQkJICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwl1 MzIgZGF0YVsyXTsKPiArCj4gKwlkYXRhWzBdID0gSE9TVDJHVUNfQUNUSU9OX0FMTE9DQVRFX0RP T1JCRUxMOwo+ICsJZGF0YVsxXSA9IGNsaWVudC0+Y3R4X2luZGV4Owo+ICsKPiArCXJldHVybiBo b3N0Mmd1Y19hY3Rpb24oZ3VjLCBkYXRhLCAyKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBob3N0 Mmd1Y19yZWxlYXNlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiArCQkJCSAgICAg c3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwl1MzIgZGF0YVsyXTsKPiAr Cj4gKwlkYXRhWzBdID0gSE9TVDJHVUNfQUNUSU9OX0RFQUxMT0NBVEVfRE9PUkJFTEw7Cj4gKwlk YXRhWzFdID0gY2xpZW50LT5jdHhfaW5kZXg7Cj4gKwo+ICsJcmV0dXJuIGhvc3QyZ3VjX2FjdGlv bihndWMsIGRhdGEsIDIpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBJbml0aWFsaXNlLCB1cGRhdGUs IG9yIGNsZWFyIGRvb3JiZWxsIGRhdGEgc2hhcmVkIHdpdGggdGhlIEd1Qwo+ICsgKgo+ICsgKiBU aGVzZSBmdW5jdGlvbnMgbW9kaWZ5IHNoYXJlZCBkYXRhIGFuZCBzbyBuZWVkIGFjY2VzcyB0byB0 aGUgbWFwcGVkCj4gKyAqIGNsaWVudCBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhlIHBhZ2UgYmVp bmcgdXNlZCBmb3IgdGhlIGRvb3JiZWxsCj4gKyAqLwo+ICsKPiArc3RhdGljIHZvaWQgZ3VjX2lu aXRfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICsJCQkgICAgICBzdHJ1Y3QgaTkx NV9ndWNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAq ZG9vcmJlbGw7Cj4gKwl2b2lkICpiYXNlOwo+ICsKPiArCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY2xpZW50LT5jbGllbnRfb2JqLCAwKSk7Cj4gKwlkb29yYmVs bCA9IGJhc2UgKyBjbGllbnQtPmRvb3JiZWxsX29mZnNldDsKPiArCj4gKwlkb29yYmVsbC0+ZGJf c3RhdHVzID0gMTsKPiArCWRvb3JiZWxsLT5jb29raWUgPSAwOwo+ICsKPiArCWt1bm1hcF9hdG9t aWMoYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3VjX3JpbmdfZG9vcmJlbGwoc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqZ2MpCj4gK3sKPiArCXN0cnVjdCBndWNfcHJvY2Vzc19kZXNjICpk ZXNjOwo+ICsJdW5pb24gZ3VjX2Rvb3JiZWxsX3F3IGRiX2NtcCwgZGJfZXhjLCBkYl9yZXQ7Cj4g Kwl1bmlvbiBndWNfZG9vcmJlbGxfcXcgKmRiOwo+ICsJdm9pZCAqYmFzZTsKPiArCWludCBhdHRl bXB0ID0gMiwgcmV0ID0gLUVBR0FJTjsKPiArCj4gKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9n ZW1fb2JqZWN0X2dldF9wYWdlKGdjLT5jbGllbnRfb2JqLCAwKSk7Cj4gKwlkZXNjID0gYmFzZSAr IGdjLT5wcm9jX2Rlc2Nfb2Zmc2V0Owo+ICsKPiArCS8qIFVwZGF0ZSB0aGUgdGFpbCBzbyBpdCBp cyB2aXNpYmxlIHRvIEd1QyAqLwo+ICsJZGVzYy0+dGFpbCA9IGdjLT53cV90YWlsOwo+ICsKPiAr CS8qIGN1cnJlbnQgY29va2llICovCj4gKwlkYl9jbXAuZGJfc3RhdHVzID0gR1VDX0RPT1JCRUxM X0VOQUJMRUQ7Cj4gKwlkYl9jbXAuY29va2llID0gZ2MtPmNvb2tpZTsKPiArCj4gKwkvKiBjb29r aWUgdG8gYmUgdXBkYXRlZCAqLwo+ICsJZGJfZXhjLmRiX3N0YXR1cyA9IEdVQ19ET09SQkVMTF9F TkFCTEVEOwo+ICsJZGJfZXhjLmNvb2tpZSA9IGdjLT5jb29raWUgKyAxOwo+ICsJaWYgKGRiX2V4 Yy5jb29raWUgPT0gMCkKPiArCQlkYl9leGMuY29va2llID0gMTsKPiArCj4gKwkvKiBwb2ludGVy IG9mIGN1cnJlbnQgZG9vcmJlbGwgY2FjaGVsaW5lICovCj4gKwlkYiA9IGJhc2UgKyBnYy0+ZG9v cmJlbGxfb2Zmc2V0Owo+ICsKPiArCXdoaWxlIChhdHRlbXB0LS0pIHsKPiArCQkvKiBsZXRzIHJp bmcgdGhlIGRvb3JiZWxsICovCj4gKwkJZGJfcmV0LnZhbHVlX3F3ID0gYXRvbWljNjRfY21weGNo ZygoYXRvbWljNjRfdCAqKWRiLAo+ICsJCQlkYl9jbXAudmFsdWVfcXcsIGRiX2V4Yy52YWx1ZV9x dyk7Cj4gKwo+ICsJCS8qIGlmIHRoZSBleGNoYW5nZSB3YXMgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVk ICovCj4gKwkJaWYgKGRiX3JldC52YWx1ZV9xdyA9PSBkYl9jbXAudmFsdWVfcXcpIHsKPiArCQkJ LyogZGIgd2FzIHN1Y2Nlc3NmdWxseSBydW5nICovCj4gKwkJCWdjLT5jb29raWUgPSBkYl9leGMu Y29va2llOwo+ICsJCQlyZXQgPSAwOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCS8qIFhY WDogZG9vcmJlbGwgd2FzIGxvc3QgYW5kIG5lZWQgdG8gYWNxdWlyZSBpdCBhZ2FpbiAqLwo+ICsJ CWlmIChkYl9yZXQuZGJfc3RhdHVzID09IEdVQ19ET09SQkVMTF9ESVNBQkxFRCkKPiArCQkJYnJl YWs7Cj4gKwo+ICsJCURSTV9FUlJPUigiQ29va2llIG1pc21hdGNoLiBFeHBlY3RlZCAlZCwgcmV0 dXJuZWQgJWRcbiIsCj4gKwkJCSAgZGJfY21wLmNvb2tpZSwgZGJfcmV0LmNvb2tpZSk7Cj4gKwo+ ICsJCS8qIHVwZGF0ZSB0aGUgY29va2llIHRvIG5ld2x5IHJlYWQgY29va2llIGZyb20gR3VDICov Cj4gKwkJZGJfY21wLmNvb2tpZSA9IGRiX3JldC5jb29raWU7Cj4gKwkJZGJfZXhjLmNvb2tpZSA9 IGRiX3JldC5jb29raWUgKyAxOwo+ICsJCWlmIChkYl9leGMuY29va2llID09IDApCj4gKwkJCWRi X2V4Yy5jb29raWUgPSAxOwo+ICsJfQo+ICsKPiArCWt1bm1hcF9hdG9taWMoYmFzZSk7Cj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBndWNfZGlzYWJsZV9kb29yYmVsbChz dHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gKwkJCQkgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xp ZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9f aTkxNShndWMpOwo+ICsJc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPiArCXZv aWQgKmJhc2U7Cj4gKwlpbnQgZHJicmVnID0gR0VOOF9EUkJSRUdMKGNsaWVudC0+ZG9vcmJlbGxf aWQpOwo+ICsJaW50IHZhbHVlOwo+ICsKPiArCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9v YmplY3RfZ2V0X3BhZ2UoY2xpZW50LT5jbGllbnRfb2JqLCAwKSk7Cj4gKwlkb29yYmVsbCA9IGJh c2UgKyBjbGllbnQtPmRvb3JiZWxsX29mZnNldDsKPiArCj4gKwlkb29yYmVsbC0+ZGJfc3RhdHVz ID0gMDsKPiArCj4gKwlrdW5tYXBfYXRvbWljKGJhc2UpOwo+ICsKPiArCUk5MTVfV1JJVEUoZHJi cmVnLCBJOTE1X1JFQUQoZHJicmVnKSAmIH5HRU44X0RSQl9WQUxJRCk7Cj4gKwo+ICsJdmFsdWUg PSBJOTE1X1JFQUQoZHJicmVnKTsKPiArCVdBUk5fT04oKHZhbHVlICYgR0VOOF9EUkJfVkFMSUQp ICE9IDApOwo+ICsKPiArCUk5MTVfV1JJVEUoR0VOOF9EUkJSRUdVKGNsaWVudC0+ZG9vcmJlbGxf aWQpLCAwKTsKPiArCUk5MTVfV1JJVEUoZHJicmVnLCAwKTsKPiArCj4gKwkvKiBYWFg6IHdhaXQg Zm9yIGFueSBpbnRlcnJ1cHRzICovCj4gKwkvKiBYWFg6IHdhaXQgZm9yIHdvcmtxdWV1ZSB0byBk cmFpbiAqLwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBTZWxlY3QsIGFzc2lnbiBhbmQgcmVsYXNlIGRv b3JiZWxsIGNhY2hlbGluZXMKPiArICoKPiArICogVGhlc2UgZnVuY3Rpb25zIHRyYWNrIHdoaWNo IGRvb3JiZWxsIGNhY2hlbGluZXMgYXJlIGluIHVzZS4KPiArICogVGhlIGRhdGEgdGhleSBtYW5p cHVsYXRlIGlzIHByb3RlY3RlZCBieSB0aGUgaG9zdDJndWMgbG9jay4KPiArICovCj4gKwo+ICtz dGF0aWMgdWludDMyX3Qgc2VsZWN0X2Rvb3JiZWxsX2NhY2hlbGluZShzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMpCj4gK3sKPiArCWNvbnN0IHVpbnQzMl90IGNhY2hlbGluZV9zaXplID0gYm9vdF9jcHVf ZGF0YS54ODZfY2xmbHVzaF9zaXplOwo+ICsJdWludDMyX3Qgb2Zmc2V0Owo+ICsKPiArCXNwaW5f bG9jaygmZ3VjLT5ob3N0Mmd1Y19sb2NrKTsKPiArCj4gKwkvKiBEb29yYmVsbCB1c2VzIGEgc2lu Z2xlIGNhY2hlIGxpbmUgd2l0aGluIGEgcGFnZSAqLwo+ICsJb2Zmc2V0ID0gZ3VjLT5kYl9jYWNo ZWxpbmUgJiBQQUdFX01BU0s7Cj4gKwo+ICsJLyogTW92aW5nIHRvIG5leHQgY2FjaGUgbGluZSB0 byByZWR1Y2UgY29udGVudGlvbiAqLwo+ICsJZ3VjLT5kYl9jYWNoZWxpbmUgKz0gY2FjaGVsaW5l X3NpemU7Cj4gKwo+ICsJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cj4gKwo+ICsJ cmV0dXJuIG9mZnNldDsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQxNl90IGFzc2lnbl9kb29yYmVs bChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQzMl90IHByaW9yaXR5KQo+ICt7Cj4gKwkvKiBU aGUgYml0bWFwIGlzIHNwbGl0IGludG8gdHdvIGhhbHZlcyAtIGhpZ2ggYW5kIG5vcm1hbCBwcmlv cml0eS4gKi8KPiArCWNvbnN0IHVpbnQxNl90IGhhbGYgPSBHVUNfTUFYX0RPT1JCRUxMUyAvIDI7 Cj4gKwljb25zdCB1aW50MTZfdCBzdGFydCA9IChwcmlvcml0eSA8PSBHVUNfQ1RYX1BSSU9SSVRZ X0hJR0gpID8gaGFsZiA6IDA7Cj4gKwljb25zdCB1aW50MTZfdCBlbmQgPSBzdGFydCArIGhhbGY7 Cj4gKwl1aW50MTZfdCBpZDsKPiArCj4gKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7 Cj4gKwlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChndWMtPmRvb3JiZWxsX2JpdG1hcCwgZW5kLCBz dGFydCk7Cj4gKwlpZiAoaWQgPT0gZW5kKQo+ICsJCWlkID0gR1VDX0lOVkFMSURfRE9PUkJFTExf SUQ7Cj4gKwllbHNlCj4gKwkJYml0bWFwX3NldChndWMtPmRvb3JiZWxsX2JpdG1hcCwgaWQsIDEp Owo+ICsJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGlk Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZWxlYXNlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9n dWMgKmd1YywgdWludDE2X3QgaWQpCj4gK3sKPiArCXNwaW5fbG9jaygmZ3VjLT5ob3N0Mmd1Y19s b2NrKTsKPiArCWJpdG1hcF9jbGVhcihndWMtPmRvb3JiZWxsX2JpdG1hcCwgaWQsIDEpOwo+ICsJ c3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIElu aXRpYWxpc2UgdGhlIHByb2Nlc3MgZGVzY3JpcHRvciBzaGFyZWQgd2l0aCB0aGUgR3VDIGZpcm13 YXJlLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ3VjX2luaXRfcHJvY19kZXNjKHN0cnVjdCBpbnRl bF9ndWMgKmd1YywKPiArCQkJICAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkK PiArewo+ICsJc3RydWN0IGd1Y19wcm9jZXNzX2Rlc2MgKmRlc2M7Cj4gKwl2b2lkICpiYXNlOwo+ ICsKPiArCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoY2xpZW50 LT5jbGllbnRfb2JqLCAwKSk7Cj4gKwlkZXNjID0gYmFzZSArIGNsaWVudC0+cHJvY19kZXNjX29m ZnNldDsKPiArCj4gKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Cj4gKwo+ICsJLyoK PiArCSAqIFhYWDogcERvb3JiZWxsIGFuZCBXUVZCYXNlQWRkcmVzcyBhcmUgcG9pbnRlcnMgaW4g cHJvY2VzcyBhZGRyZXNzCj4gKwkgKiBzcGFjZSBmb3IgcmluZzMgY2xpZW50cyAoc2V0IHRoZW0g YXMgaW4gbW1hcF9pb2N0bCkgb3Iga2VybmVsCj4gKwkgKiBzcGFjZSBmb3Iga2VybmVsIGNsaWVu dHMgKG1hcCBvbiBkZW1hbmQgaW5zdGVhZD8gTWF5IG1ha2UgZGVidWcKPiArCSAqIGVhc2llciB0 byBoYXZlIGl0IG1hcHBlZCkuCj4gKwkgKi8KPiArCWRlc2MtPndxX2Jhc2VfYWRkciA9IDA7Cj4g KwlkZXNjLT5kYl9iYXNlX2FkZHIgPSAwOwo+ICsKPiArCWRlc2MtPmNvbnRleHRfaWQgPSBjbGll bnQtPmN0eF9pbmRleDsKPiArCWRlc2MtPndxX3NpemVfYnl0ZXMgPSBjbGllbnQtPndxX3NpemU7 Cj4gKwlkZXNjLT53cV9zdGF0dXMgPSBXUV9TVEFUVVNfQUNUSVZFOwo+ICsJZGVzYy0+cHJpb3Jp dHkgPSBjbGllbnQtPnByaW9yaXR5Owo+ICsKPiArCWt1bm1hcF9hdG9taWMoYmFzZSk7Cj4gK30K PiArCj4gKy8qCj4gKyAqIEluaXRpYWxpc2UvY2xlYXIgdGhlIGNvbnRleHQgZGVzY3JpcHRvciBz aGFyZWQgd2l0aCB0aGUgR3VDIGZpcm13YXJlLgo+ICsgKgo+ICsgKiBUaGlzIGRlc2NyaXB0b3Ig dGVsbHMgdGhlIEd1QyB3aGVyZSAoaW4gR0dUVCBzcGFjZSkgdG8gZmluZCB0aGUgaW1wb3J0YW50 Cj4gKyAqIGRhdGEgc3RydWN0dXJlcyByZWxhdGluZyB0byB0aGlzIGNsaWVudCAoZG9vcmJlbGws IHByb2Nlc3MgZGVzY3JpcHRvciwKPiArICogd3JpdGUgcXVldWUsIGV0YykuCj4gKyAqLwo+ICsK PiArc3RhdGljIHZvaWQgZ3VjX2luaXRfY3R4X2Rlc2Moc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVj dCBndWNfY29udGV4dF9kZXNjIGRlc2M7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnOwo+ICsKPiAr CW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKPiArCj4gKwlkZXNjLmF0dHJpYnV0ZSA9 IEdVQ19DVFhfREVTQ19BVFRSX0FDVElWRSB8IEdVQ19DVFhfREVTQ19BVFRSX0tFUk5FTDsKPiAr CWRlc2MuY29udGV4dF9pZCA9IGNsaWVudC0+Y3R4X2luZGV4Owo+ICsJZGVzYy5wcmlvcml0eSA9 IGNsaWVudC0+cHJpb3JpdHk7Cj4gKwlkZXNjLmVuZ2luZXNfdXNlZCA9ICgxIDw8IFJDUykgfCAo MSA8PCBWQ1MpIHwgKDEgPDwgQkNTKSB8Cj4gKwkJCSAgICAoMSA8PCBWRUNTKSB8ICgxIDw8IFZD UzIpOyAvKiBhbGwgZW5naW5lcyAqLwo+ICsJZGVzYy5kYl9pZCA9IGNsaWVudC0+ZG9vcmJlbGxf aWQ7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBDUFUgYWRkcmVzcyBpcyBvbmx5IG5lZWRlZCBhdCBj ZXJ0YWluIHBvaW50cywgc28ga21hcF9hdG9taWMgb24KPiArCSAqIGRlbWFuZCBpbnN0ZWFkIG9m IHN0b3JpbmcgaXQgaW4gdGhlIGN0eCBkZXNjcmlwdG9yLgo+ICsJICogWFhYOiBNYXkgbWFrZSBk ZWJ1ZyBlYXNpZXIgdG8gaGF2ZSBpdCBtYXBwZWQKPiArCSAqLwo+ICsJZGVzYy5kYl90cmlnZ2Vy X2NwdSA9IDA7Cj4gKwlkZXNjLmRiX3RyaWdnZXJfdWsgPSBjbGllbnQtPmRvb3JiZWxsX29mZnNl dCArCj4gKwkJaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGNsaWVudC0+Y2xpZW50X29iaik7Cj4g KwlkZXNjLmRiX3RyaWdnZXJfcGh5ID0gY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgKwo+ICsJCXNn X2RtYV9hZGRyZXNzKGNsaWVudC0+Y2xpZW50X29iai0+cGFnZXMtPnNnbCk7Cj4gKwo+ICsJZGVz Yy5wcm9jZXNzX2Rlc2MgPSBjbGllbnQtPnByb2NfZGVzY19vZmZzZXQgKwo+ICsJCWk5MTVfZ2Vt X29ial9nZ3R0X29mZnNldChjbGllbnQtPmNsaWVudF9vYmopOwo+ICsKPiArCWRlc2Mud3FfYWRk ciA9IGNsaWVudC0+d3Ffb2Zmc2V0ICsKPiArCQlpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoY2xp ZW50LT5jbGllbnRfb2JqKTsKPiArCj4gKwlkZXNjLndxX3NpemUgPSBjbGllbnQtPndxX3NpemU7 Cj4gKwo+ICsJLyoKPiArCSAqIFhYWDogVGFrZSBMUkNzIGZyb20gYW4gZXhpc3RpbmcgaW50ZWxf Y29udGV4dCBpZiB0aGlzIGlzIG5vdCBhbgo+ICsJICogSXNLTURDcmVhdGVkQ29udGV4dCBjbGll bnQKPiArCSAqLwo+ICsJZGVzYy5kZXNjX3ByaXZhdGUgPSAodWludHB0cl90KWNsaWVudDsKPiAr Cj4gKwkvKiBQb29sIGNvbnRleHQgaXMgcGlubmVkIGFscmVhZHkgKi8KPiArCXNnID0gZ3VjLT5j dHhfcG9vbF9vYmotPnBhZ2VzOwo+ICsJc2dfcGNvcHlfZnJvbV9idWZmZXIoc2ctPnNnbCwgc2ct Pm5lbnRzLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAo+ICsJCQkgICAgIHNpemVvZihkZXNjKSAqIGNs aWVudC0+Y3R4X2luZGV4KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ3VjX2ZpbmlfY3R4X2Rl c2Moc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xp ZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBndWNfY29udGV4dF9kZXNjIGRlc2M7Cj4gKwlz dHJ1Y3Qgc2dfdGFibGUgKnNnOwo+ICsKPiArCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2Mp KTsKPiArCj4gKwlzZyA9IGd1Yy0+Y3R4X3Bvb2xfb2JqLT5wYWdlczsKPiArCXNnX3Bjb3B5X2Zy b21fYnVmZmVyKHNnLT5zZ2wsIHNnLT5uZW50cywgJmRlc2MsIHNpemVvZihkZXNjKSwKPiArCQkJ ICAgICBzaXplb2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRleCk7Cj4gK30KPiArCj4gKy8qIEdl dCB2YWxpZCB3b3JrcXVldWUgaXRlbSBhbmQgcmV0dXJuIGl0IGJhY2sgdG8gb2Zmc2V0ICovCj4g K3N0YXRpYyBpbnQgZ3VjX2dldF93b3JrcXVldWVfc3BhY2Uoc3RydWN0IGk5MTVfZ3VjX2NsaWVu dCAqZ2MsIHUzMiAqb2Zmc2V0KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3VjX3Byb2Nlc3NfZGVzYyAqZGVz YzsKPiArCXZvaWQgKmJhc2U7Cj4gKwl1MzIgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ3VjX3dxX2l0 ZW0pOwo+ICsJaW50IHJldCA9IDAsIHRpbWVvdXRfY291bnRlciA9IDIwMDsKPiArCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gKwo+ICsJYmFzZSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZShnYy0+Y2xpZW50X29iaiwgMCkpOwo+ICsJZGVzYyA9IGJhc2UgKyBnYy0+cHJvY19k ZXNjX29mZnNldDsKPiArCj4gKwl3aGlsZSAodGltZW91dF9jb3VudGVyLS0gPiAwKSB7Cj4gKwkJ c3Bpbl9sb2NrX2lycXNhdmUoJmdjLT53cV9sb2NrLCBmbGFncyk7Cj4gKwo+ICsJCXJldCA9IHdh aXRfZm9yX2F0b21pYyhDSVJDX1NQQUNFKGdjLT53cV90YWlsLCBkZXNjLT5oZWFkLAo+ICsJCQkJ Z2MtPndxX3NpemUpID49IHNpemUsIDEpOwo+ICsKPiArCQlpZiAoIXJldCkgewo+ICsJCQkqb2Zm c2V0ID0gZ2MtPndxX3RhaWw7Cj4gKwo+ICsJCQkvKiBhZHZhbmNlIHRoZSB0YWlsIGZvciBuZXh0 IHdvcmtxdWV1ZSBpdGVtICovCj4gKwkJCWdjLT53cV90YWlsICs9IHNpemU7Cj4gKwkJCWdjLT53 cV90YWlsICY9IGdjLT53cV9zaXplIC0gMTsKPiArCj4gKwkJCS8qIHRoaXMgd2lsbCBicmVhayB0 aGUgbG9vcCAqLwo+ICsJCQl0aW1lb3V0X2NvdW50ZXIgPSAwOwo+ICsJCX0KPiArCj4gKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZ2MtPndxX2xvY2ssIGZsYWdzKTsKPiArCX07Cj4gKwo+ICsJ a3VubWFwX2F0b21pYyhiYXNlKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZ2Ms Cj4gKwkJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCWVudW0g aW50ZWxfcmluZ19pZCByaW5nX2lkID0gcnEtPnJpbmctPmlkOwo+ICsJc3RydWN0IGd1Y193cV9p dGVtICp3cWk7Cj4gKwl2b2lkICpiYXNlOwo+ICsJdTMyIHRhaWwsIHdxX2xlbiwgd3Ffb2ZmID0g MDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZ3VjX2dldF93b3JrcXVldWVfc3BhY2UoZ2Ms ICZ3cV9vZmYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIEZvciBu b3cgd29ya3F1ZXVlIGl0ZW0gaXMgNCBEV3M7IHdvcmtxdWV1ZSBidWZmZXIgaXMgMiBwYWdlcy4g U28gd2UKPiArCSAqIHNob3VsZCBub3QgaGF2ZSB0aGUgY2FzZSB3aGVyZSBzdHJ1Y3R1cmUgd3Fp IGlzIGFjcm9zcyBwYWdlLCBuZWl0aGVyCj4gKwkgKiB3cmFwcGVkIHRvIHRoZSBiZWdpbm5pbmcu IFRoaXMgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gYmVsb3cuCj4gKwkgKgo+ICsJICog WFhYOiBpZiBub3QgdGhlIGNhc2UsIHdlIG5lZWQgc2F2ZSBkYXRhIHRvIGEgdGVtcCB3cWkgYW5k IGNvcHkgaXQgdG8KPiArCSAqIHdvcmtxdWV1ZSBidWZmZXIgZHcgYnkgZHcuCj4gKwkgKi8KPiAr CVdBUk5fT04oc2l6ZW9mKHN0cnVjdCBndWNfd3FfaXRlbSkgIT0gMTYpOwo+ICsJV0FSTl9PTih3 cV9vZmYgJiAzKTsKPiArCj4gKwkvKiB3cSBzdGFydHMgZnJvbSB0aGUgcGFnZSBhZnRlciBkb29y YmVsbCAvIHByb2Nlc3NfZGVzYyAqLwo+ICsJYmFzZSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZShnYy0+Y2xpZW50X29iaiwKPiArCQkJKHdxX29mZiArIEdVQ19EQl9TSVpF KSA+PiBQQUdFX1NISUZUKSk7Cj4gKwl3cV9vZmYgJj0gUEFHRV9TSVpFIC0gMTsKPiArCXdxaSA9 IChzdHJ1Y3QgZ3VjX3dxX2l0ZW0gKikoKGNoYXIgKiliYXNlICsgd3Ffb2ZmKTsKPiArCj4gKwkv KiBsZW4gZG9lcyBub3QgaW5jbHVkZSB0aGUgaGVhZGVyICovCj4gKwl3cV9sZW4gPSBzaXplb2Yo c3RydWN0IGd1Y193cV9pdGVtKSAvIHNpemVvZih1MzIpIC0gMTsKPiArCXdxaS0+aGVhZGVyID0g V1FfVFlQRV9JTk9SREVSIHwKPiArCQkJKHdxX2xlbiA8PCBXUV9MRU5fU0hJRlQpIHwKPiArCQkJ KHJpbmdfaWQgPDwgV1FfVEFSR0VUX1NISUZUKSB8Cj4gKwkJCVdRX05PX1dDRkxVU0hfV0FJVDsK PiArCj4gKwkvKiBUaGUgR3VDIHdhbnRzIG9ubHkgdGhlIGxvdy1vcmRlciB3b3JkIG9mIHRoZSBj b250ZXh0IGRlc2NyaXB0b3IgKi8KPiArCXdxaS0+Y29udGV4dF9kZXNjID0gKHUzMilpbnRlbF9s cl9jb250ZXh0X2Rlc2NyaXB0b3IocnEtPmN0eCwgcnEtPnJpbmcpOwo+ICsKPiArCS8qIFRoZSBH dUMgZmlybXdhcmUgd2FudHMgdGhlIHRhaWwgaW5kZXggaW4gUVdvcmRzLCBub3QgYnl0ZXMgKi8K PiArCXRhaWwgPSBycS0+cmluZ2J1Zi0+dGFpbCA+PiAzOwo+ICsJd3FpLT5yaW5nX3RhaWwgPSB0 YWlsIDw8IFdRX1JJTkdfVEFJTF9TSElGVDsKPiArCXdxaS0+ZmVuY2VfaWQgPSAwOyAvKlhYWDog d2hhdCBmZW5jZSB0byBiZSBoZXJlICovCj4gKwo+ICsJa3VubWFwX2F0b21pYyhiYXNlKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfZ3VjX3N1Ym1pdCgpIC0g U3VibWl0IGNvbW1hbmRzIHRocm91Z2ggR3VDCj4gKyAqIEBjbGllbnQ6CXRoZSBndWMgY2xpZW50 IHdoZXJlIGNvbW1hbmRzIHdpbGwgZ28gdGhyb3VnaAo+ICsgKiBAY3R4OglMUkMgd2hlcmUgY29t bWFuZHMgY29tZSBmcm9tCj4gKyAqIEByaW5nOglIVyBlbmdpbmUgdGhhdCB3aWxsIGV4Y3V0ZSB0 aGUgY29tbWFuZHMKPiArICoKPiArICogUmV0dXJuOgkwIGlmIHN1Y2NlZWQKPiArICovCj4gK2lu dCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAo+ICsJCSAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICsJaW50IHFfcmV0LCBiX3JldDsKPiArCj4gKwkvKiBOZWVkIHRoaXMgYmVjYXVz ZSBvZiB0aGUgZGVmZXJyZWQgcGluIGN0eCBhbmQgcmluZyAqLwo+ICsJLyogU2hhbGwgd2UgbW92 ZSB0aGlzIHJpZ2h0IGFmdGVyIHJpbmcgaXMgcGlubmVkPyAqLwo+ICsJaW50ZWxfbHJfY29udGV4 dF91cGRhdGUocnEpOwo+ICsKPiArCXFfcmV0ID0gZ3VjX2FkZF93b3JrcXVldWVfaXRlbShjbGll bnQsIHJxKTsKPiArCWlmIChxX3JldCA9PSAwKQo+ICsJCWJfcmV0ID0gZ3VjX3JpbmdfZG9vcmJl bGwoY2xpZW50KTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT53cV9sb2NrLCBm bGFncyk7Cj4gKwljbGllbnQtPnN1Ym1pc3Npb25zICs9IDE7Cj4gKwlpZiAocV9yZXQpIHsKPiAr CQljbGllbnQtPnFfZmFpbCArPSAxOwo+ICsJCWNsaWVudC0+cmV0Y29kZSA9IHFfcmV0Owo+ICsJ fSBlbHNlIGlmIChiX3JldCkgewo+ICsJCWNsaWVudC0+Yl9mYWlsICs9IDE7Cj4gKwkJY2xpZW50 LT5yZXRjb2RlID0gcV9yZXQgPSBiX3JldDsKPiArCX0gZWxzZSB7Cj4gKwkJY2xpZW50LT5yZXRj b2RlID0gMDsKPiArCX0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+d3FfbG9j aywgZmxhZ3MpOwo+ICsKPiArCXJldHVybiBxX3JldDsKPiArfQo+ICsKPiArLyoKPiArICogRXZl cnl0aGluZyBiZWxvdyBoZXJlIGlzIGNvbmNlcm5lZCB3aXRoIHNldHVwICYgdGVhcmRvd24sIGFu ZCBpcwo+ICsgKiB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhlIHNvbWV3aGF0IHRpbWUtY3JpdGlj YWwgYmF0Y2gtc3VibWlzc2lvbgo+ICsgKiBwYXRoIG9mIGk5MTVfZ3VjX3N1Ym1pdCgpIGFib3Zl Lgo+ICsgKi8KPiArCj4gKy8qKgo+ICAgKiBnZW1fYWxsb2NhdGVfZ3VjX29iaigpIC0gQWxsb2Nh dGUgZ2VtIG9iamVjdCBmb3IgR3VDIHVzYWdlCj4gICAqIEBkZXY6CWRybSBkZXZpY2UKPiAgICog QHNpemU6CXNpemUgb2Ygb2JqZWN0Cj4gQEAgLTc1LDYgKzU4MSwxMjEgQEAgc3RhdGljIHZvaWQg Z2VtX3JlbGVhc2VfZ3VjX29iaihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gIH0KPiAgCj4gK3N0YXRp YyB2b2lkIGd1Y19jbGllbnRfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgICAg c3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gKwo+ICsJaWYgKCFjbGllbnQpCj4gKwkJcmV0dXJu Owo+ICsKPiArCWlmIChjbGllbnQtPmRvb3JiZWxsX2lkICE9IEdVQ19JTlZBTElEX0RPT1JCRUxM X0lEKSB7Cj4gKwkJLyoKPiArCQkgKiBGaXJzdCBkaXNhYmxlIHRoZSBkb29yYmVsbCwgdGhlbiB0 ZWxsIHRoZSBHdUMgd2UndmUKPiArCQkgKiBmaW5pc2hlZCB3aXRoIGl0LCBmaW5hbGx5IGRlYWxs b2NhdGUgaXQgaW4gb3VyIGJpdG1hcAo+ICsJCSAqLwo+ICsJCWd1Y19kaXNhYmxlX2Rvb3JiZWxs KGd1YywgY2xpZW50KTsKPiArCQlob3N0Mmd1Y19yZWxlYXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50 KTsKPiArCQlyZWxlYXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5kb29yYmVsbF9pZCk7Cj4gKwl9 Cj4gKwo+ICsJLyoKPiArCSAqIFhYWDogd2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIHN1Ym1pc3Np b25zIGJlZm9yZSBmcmVlaW5nIG1lbW9yeS4KPiArCSAqIEJlIHN1cmUgdG8gZHJvcCBhbnkgbG9j a3MKPiArCSAqLwo+ICsKPiArCWdlbV9yZWxlYXNlX2d1Y19vYmooY2xpZW50LT5jbGllbnRfb2Jq KTsKPiArCj4gKwlpZiAoY2xpZW50LT5jdHhfaW5kZXggIT0gR1VDX0lOVkFMSURfQ1RYX0lEKSB7 Cj4gKwkJZ3VjX2ZpbmlfY3R4X2Rlc2MoZ3VjLCBjbGllbnQpOwo+ICsJCWlkYV9zaW1wbGVfcmVt b3ZlKCZndWMtPmN0eF9pZHMsIGNsaWVudC0+Y3R4X2luZGV4KTsKPiArCX0KPiArCj4gKwlrZnJl ZShjbGllbnQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZ3VjX2NsaWVudF9hbGxvYygpIC0gQWxs b2NhdGUgYW4gaTkxNV9ndWNfY2xpZW50Cj4gKyAqIEBkZXY6CWRybSBkZXZpY2UKPiArICogQHBy aW9yaXR5Oglmb3VyIGxldmVscyBwcmlvcml0eSBfQ1JJVElDQUwsIF9ISUdILCBfTk9STUFMIGFu ZCBfTE9XCj4gKyAqIAkJVGhlIGtlcm5lbCBjbGllbnQgdG8gcmVwbGFjZSBFeGVjTGlzdCBzdWJt aXNzaW9uIGlzIGNyZWF0ZWQgd2l0aAo+ICsgKiAJCU5PUk1BTCBwcmlvcml0eS4gUHJpb3JpdHkg b2YgYSBjbGllbnQgZm9yIHNjaGVkdWxlciBjYW4gYmUgSElHSCwKPiArICogCQl3aGlsZSBhIHBy ZWVtcHRpb24gY29udGV4dCBjYW4gdXNlIENSSVRJQ0FMLgo+ICsgKgo+ICsgKiBSZXR1cm46CUFu IGk5MTVfZ3VjX2NsaWVudCBvYmplY3QgaWYgc3VjY2Vzcy4KPiArICovCj4gK3N0YXRpYyBzdHJ1 Y3QgaTkxNV9ndWNfY2xpZW50ICpndWNfY2xpZW50X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4gKwkJCQkJCXVpbnQzMl90IHByaW9yaXR5KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9ndWNf Y2xpZW50ICpjbGllbnQ7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5n dWM7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsKPiArCWNsaWVudCA9 IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY2xpZW50KQo+ ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWNsaWVudC0+ZG9vcmJlbGxfaWQgPSBHVUNfSU5WQUxJ RF9ET09SQkVMTF9JRDsKPiArCWNsaWVudC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKPiArCj4gKwlj bGllbnQtPmN0eF9pbmRleCA9ICh1aW50MzJfdClpZGFfc2ltcGxlX2dldCgmZ3VjLT5jdHhfaWRz LCAwLAo+ICsJCQlHVUNfTUFYX0dQVV9DT05URVhUUywgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoY2xp ZW50LT5jdHhfaW5kZXggPj0gR1VDX01BWF9HUFVfQ09OVEVYVFMpIHsKPiArCQljbGllbnQtPmN0 eF9pbmRleCA9IEdVQ19JTlZBTElEX0NUWF9JRDsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4g KwkvKiBUaGUgZmlyc3QgcGFnZSBpcyBkb29yYmVsbC9wcm9jX2Rlc2MuIFR3byBmb2xsb3dlZCBw YWdlcyBhcmUgd3EuICovCj4gKwlvYmogPSBnZW1fYWxsb2NhdGVfZ3VjX29iaihkZXYsIEdVQ19E Ql9TSVpFICsgR1VDX1dRX1NJWkUpOwo+ICsJaWYgKCFvYmopCj4gKwkJZ290byBlcnI7Cj4gKwo+ ICsJY2xpZW50LT5jbGllbnRfb2JqID0gb2JqOwo+ICsJY2xpZW50LT53cV9vZmZzZXQgPSBHVUNf REJfU0laRTsKPiArCWNsaWVudC0+d3Ffc2l6ZSA9IEdVQ19XUV9TSVpFOwo+ICsJc3Bpbl9sb2Nr X2luaXQoJmNsaWVudC0+d3FfbG9jayk7Cj4gKwo+ICsJY2xpZW50LT5kb29yYmVsbF9vZmZzZXQg PSBzZWxlY3RfZG9vcmJlbGxfY2FjaGVsaW5lKGd1Yyk7Cj4gKwo+ICsJLyoKPiArCSAqIFNpbmNl IHRoZSBkb29yYmVsbCBvbmx5IHJlcXVpcmVzIGEgc2luZ2xlIGNhY2hlbGluZSwgd2UgY2FuIHNh dmUKPiArCSAqIHNwYWNlIGJ5IHB1dHRpbmcgdGhlIGFwcGxpY2F0aW9uIHByb2Nlc3MgZGVzY3Jp cHRvciBpbiB0aGUgc2FtZQo+ICsJICogcGFnZS4gVXNlIHRoZSBoYWxmIG9mIHRoZSBwYWdlIHRo YXQgZG9lc24ndCBpbmNsdWRlIHRoZSBkb29yYmVsbC4KPiArCSAqLwo+ICsJaWYgKGNsaWVudC0+ ZG9vcmJlbGxfb2Zmc2V0ID49IChHVUNfREJfU0laRSAvIDIpKQo+ICsJCWNsaWVudC0+cHJvY19k ZXNjX29mZnNldCA9IDA7Cj4gKwllbHNlCj4gKwkJY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0ID0g KEdVQ19EQl9TSVpFIC8gMik7Cj4gKwo+ICsJY2xpZW50LT5kb29yYmVsbF9pZCA9IGFzc2lnbl9k b29yYmVsbChndWMsIGNsaWVudC0+cHJpb3JpdHkpOwo+ICsJaWYgKGNsaWVudC0+ZG9vcmJlbGxf aWQgPT0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQpCj4gKwkJLyogWFhYOiBldmljdCBhIGRvb3Ji ZWxsIGluc3RlYWQgKi8KPiArCQlnb3RvIGVycjsKPiArCj4gKwlndWNfaW5pdF9wcm9jX2Rlc2Mo Z3VjLCBjbGllbnQpOwo+ICsJZ3VjX2luaXRfY3R4X2Rlc2MoZ3VjLCBjbGllbnQpOwo+ICsJZ3Vj X2luaXRfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ICsKPiArCS8qIEludmFsaWRhdGUgR3VDIFRM QiB0byBsZXQgR3VDIHRha2UgdGhlIGxhdGVzdCB1cGRhdGVzIHRvIEdUVC4gKi8KPiArCUk5MTVf V1JJVEUoR0VOOF9HVENSLCBHRU44X0dUQ1JfSU5WQUxJREFURSk7Cj4gKwo+ICsJLyogWFhYOiBB bnkgY2FjaGUgZmx1c2hlcyBuZWVkZWQ/IEdlbmVyYWwgZG9tYWluIG1nbXQgY2FsbHM/ICovCj4g Kwo+ICsJaWYgKGhvc3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1YywgY2xpZW50KSkKPiArCQln b3RvIGVycjsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJuZXcgcHJpb3JpdHkgJXUgY2xpZW50 ICVwOiBjdHhfaW5kZXggJXUgZGJfaWQgJXVcbiIsCj4gKwkJcHJpb3JpdHksIGNsaWVudCwgY2xp ZW50LT5jdHhfaW5kZXgsIGNsaWVudC0+ZG9vcmJlbGxfaWQpOwo+ICsKPiArCXJldHVybiBjbGll bnQ7Cj4gKwo+ICtlcnI6Cj4gKwlndWNfY2xpZW50X2ZyZWUoZGV2LCBjbGllbnQpOwo+ICsJcmV0 dXJuIE5VTEw7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkIGd1Y19jcmVhdGVfbG9nKHN0cnVjdCBp bnRlbF9ndWMgKmd1YykKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKPiBAQCAtMTM4LDYgKzc1OSw4IEBAIGludCBpOTE1X2d1Y19z dWJtaXNzaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCWlmICghZ3VjLT5jdHhf cG9vbF9vYmopCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICsJc3Bpbl9sb2NrX2luaXQoJmRl dl9wcml2LT5ndWMuaG9zdDJndWNfbG9jayk7Cj4gKwo+ICAJaWRhX2luaXQoJmd1Yy0+Y3R4X2lk cyk7Cj4gIAo+ICAJZ3VjX2NyZWF0ZV9sb2coZ3VjKTsKPiBAQCAtMTQ1LDYgKzc2OCwzMiBAQCBp bnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAly ZXR1cm4gMDsKPiAgfQo+ICAKPiAraW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2 X3ByaXYtPmd1YzsKPiArCXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudDsKPiArCj4gKwkv KiBjbGllbnQgZm9yIGV4ZWNidWYgc3VibWlzc2lvbiAqLwo+ICsJY2xpZW50ID0gZ3VjX2NsaWVu dF9hbGxvYyhkZXYsIEdVQ19DVFhfUFJJT1JJVFlfTk9STUFMKTsKPiArCWlmICghY2xpZW50KSB7 Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGV4ZWNidWYgZ3VjX2NsaWVudFxuIik7 Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJZ3VjLT5leGVjYnVmX2NsaWVudCA9 IGNsaWVudDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Np b25fZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGludGVs X2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gKwo+ICsJZ3VjX2NsaWVudF9mcmVlKGRldiwg Z3VjLT5leGVjYnVmX2NsaWVudCk7Cj4gKwlndWMtPmV4ZWNidWZfY2xpZW50ID0gTlVMTDsKPiAr fQo+ICsKPiAgdm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgewo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IGluZGV4IDViNTFiMDUuLmQy NDkzMjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IEBAIC0yNyw2ICsyNywzMCBA QAo+ICAjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3aWYuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ3VjX3Jl Zy5oIgo+ICAKPiArc3RydWN0IGk5MTVfZ3VjX2NsaWVudCB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqY2xpZW50X29iajsKPiArCXVpbnQzMl90IHByaW9yaXR5Owo+ICsJdWludDMy X3QgY3R4X2luZGV4Owo+ICsKPiArCXVpbnQzMl90IHByb2NfZGVzY19vZmZzZXQ7Cj4gKwl1aW50 MzJfdCBkb29yYmVsbF9vZmZzZXQ7Cj4gKwl1aW50MzJfdCBjb29raWU7Cj4gKwl1aW50MTZfdCBk b29yYmVsbF9pZDsKPiArCXVpbnQxNl90IHBhZGRpbmc7CQkvKiBNYWludGFpbiBhbGlnbm1lbnQJ CSovCj4gKwo+ICsJdWludDMyX3Qgd3Ffb2Zmc2V0Owo+ICsJdWludDMyX3Qgd3Ffc2l6ZTsKPiAr Cj4gKwlzcGlubG9ja190IHdxX2xvY2s7CQkvKiBQcm90ZWN0cyBhbGwgZGF0YSBiZWxvdwkqLwo+ ICsJdWludDMyX3Qgd3FfdGFpbDsKPiArCj4gKwkvKiBHdUMgc3VibWlzc2lvbiBzdGF0aXN0aWNz ICYgc3RhdHVzICovCj4gKwl1aW50NjRfdCBzdWJtaXNzaW9uczsKPiArCXVpbnQzMl90IHFfZmFp bDsKPiArCXVpbnQzMl90IGJfZmFpbDsKPiArCWludCByZXRjb2RlOwo+ICt9Owo+ICsKPiAgZW51 bSBpbnRlbF9ndWNfZndfc3RhdHVzIHsKPiAgCUdVQ19GSVJNV0FSRV9GQUlMID0gLTEsCj4gIAlH VUNfRklSTVdBUkVfTk9ORSA9IDAsCj4gQEAgLTYwLDYgKzg0LDIwIEBAIHN0cnVjdCBpbnRlbF9n dWMgewo+ICAKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfcG9vbF9vYmo7Cj4g IAlzdHJ1Y3QgaWRhIGN0eF9pZHM7Cj4gKwo+ICsJc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZXhl Y2J1Zl9jbGllbnQ7Cj4gKwo+ICsJc3BpbmxvY2tfdCBob3N0Mmd1Y19sb2NrOwkvKiBQcm90ZWN0 cyBhbGwgZGF0YSBiZWxvdwkqLwo+ICsKPiArCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxsX2JpdG1h cCwgR1VDX01BWF9ET09SQkVMTFMpOwo+ICsJaW50IGRiX2NhY2hlbGluZTsKPiArCj4gKwkvKiBB Y3Rpb24gc3RhdHVzICYgc3RhdGlzdGljcyAqLwo+ICsJdWludDY0X3QgYWN0aW9uX2NvdW50OwkJ LyogVG90YWwgY29tbWFuZHMgaXNzdWVkCSovCj4gKwl1aW50MzJfdCBhY3Rpb25fY21kOwkJLyog TGFzdCBjb21tYW5kIHdvcmQJCSovCj4gKwl1aW50MzJfdCBhY3Rpb25fc3RhdHVzOwkJLyogTGFz dCByZXR1cm4gc3RhdHVzCQkqLwo+ICsJdWludDMyX3QgYWN0aW9uX2ZhaWw7CQkvKiBUb3RhbCBu dW1iZXIgb2YgZmFpbHVyZXMJKi8KPiArCWludDMyX3QgYWN0aW9uX2VycjsJCS8qIExhc3QgZXJy b3IgY29kZQkJKi8KPiAgfTsKPiAgCj4gIC8qIGludGVsX2d1Y19sb2FkZXIuYyAqLwo+IEBAIC03 MCw2ICsxMDgsMTAgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmludGVsX2d1Y19md19zdGF0dXNfcmVw cihlbnVtIGludGVsX2d1Y19md19zdGF0dXMgc3RhdHVzKTsKPiAgCj4gIC8qIGk5MTVfZ3VjX3N1 Ym1pc3Npb24uYyAqLwo+ICBpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOwo+ICtpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gK2ludCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2Ns aWVudCAqY2xpZW50LAo+ICsJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKTsK PiArdm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7Cj4gIHZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICAKPiAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2d1Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIu Ywo+IGluZGV4IGU1ZDcxMzYuLjI1YmEyOWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZ3VjX2xvYWRlci5jCj4gQEAgLTQyNyw2ICs0MjcsOCBAQCBpbnQgaW50ZWxfZ3VjX3Vjb2Rl X2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCQlpbnRlbF9ndWNfZndfc3RhdHVzX3Jl cHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKPiAgCQlpbnRlbF9ndWNfZndfc3RhdHVz X3JlcHIoZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMpKTsKPiAgCj4gKwlpOTE1X2d1Y19zdWJt aXNzaW9uX2Rpc2FibGUoZGV2KTsKPiArCj4gIAlpZiAoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3Rh dHVzID09IEdVQ19GSVJNV0FSRV9OT05FKQo+ICAJCXJldHVybiAwOwo+ICAKPiBAQCAtNDc5LDEy ICs0ODEsMjAgQEAgaW50IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gIAkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0 YXR1cyksCj4gIAkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2xvYWRf c3RhdHVzKSk7Cj4gIAo+ICsJaWYgKGk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uKSB7Cj4gKwkJ ZXJyID0gaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoZGV2KTsKPiArCQlpZiAoZXJyKQo+ICsJ CQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gIAo+ICBmYWlsOgo+ICAJaWYg KGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzID09IEdVQ19GSVJNV0FSRV9QRU5ESU5HKQo+ICAJ CWd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX0ZBSUw7Cj4gIAo+ICsJ aTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKGRldik7Cj4gKwo+ICAJRFJNX0VSUk9SKCJGYWls ZWQgdG8gaW5pdGlhbGl6ZSBHdUMsIGVycm9yICVkXG4iLCBlcnIpOwo+ICAKPiAgCXJldHVybiBl cnI7Cj4gQEAgLTU0Nyw2ICs1NTcsOCBAQCB2b2lkIGludGVsX2d1Y191Y29kZV9maW5pKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkZXYtPmRldl9wcml2YXRlOwo+ICAJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0gJmRl dl9wcml2LT5ndWMuZ3VjX2Z3Owo+ICAKPiArCWk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShkZXYp Owo+ICsKPiAgCWlmIChndWNfZnctPmd1Y19md19vYmopCj4gIAkJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2UoJmd1Y19mdy0+Z3VjX2Z3X29iai0+YmFzZSk7Cj4gIAlndWNfZnctPmd1Y19md19v YmogPSBOVUxMOwo+IC0tIAo+IDEuOS4xCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==