From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 2/9] drm/i915: Move GEM request routines to i915_gem_request.c Date: Fri, 15 Jul 2016 13:43:25 +0300 Message-ID: <87furbp4fm.fsf@gaia.fi.intel.com> References: <1468577481-4798-1-git-send-email-chris@chris-wilson.co.uk> <1468577481-4798-3-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 1BAD86E9A9 for ; Fri, 15 Jul 2016 10:44:09 +0000 (UTC) In-Reply-To: <1468577481-4798-3-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gTWlncmF0 ZSB0aGUgcmVxdWVzdCBvcGVyYXRpb25zIG91dCBvZiB0aGUgbWFpbiBib2R5IG9mIGk5MTVfZ2Vt LmMgYW5kCj4gaW50byB0aGVpciBvd24gQyBmaWxlIGZvciBlYXNpZXIgZXhwYW5zaW9uLgo+Cj4g djI6IE1vdmUgX19pOTE1X2FkZF9yZXF1ZXN0KCkgYWNyb3NzIGFzIHdlbGwKPgo+IFNpZ25lZC1v ZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgoKQWNrZWQtYnk6 IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgoKPiAtLS0KPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgMjA5ICstLS0tLS0tLS0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgNjU1ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jIHwg NjU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX3JlcXVlc3QuaCB8IDIzOCArKysrKysrKysrKysKPiAgNSBmaWxlcyBjaGFu Z2VkLCA5MDUgaW5zZXJ0aW9ucygrKSwgODU2IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKPgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4gaW5kZXggNzUzMThlYmI4ZDI1Li42MDkyZjBlYTI0ZGYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC0zMyw2ICszMyw3IEBAIGk5MTUteSArPSBpOTE1X2Nt ZF9wYXJzZXIubyBcCj4gIAkgIGk5MTVfZ2VtX2d0dC5vIFwKPiAgCSAgaTkxNV9nZW0ubyBcCj4g IAkgIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5vIFwKPiArCSAgaTkxNV9nZW1fcmVxdWVzdC5vIFwK PiAgCSAgaTkxNV9nZW1fc2hyaW5rZXIubyBcCj4gIAkgIGk5MTVfZ2VtX3N0b2xlbi5vIFwKPiAg CSAgaTkxNV9nZW1fdGlsaW5nLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IGU3 M2MwZmM4NGM3My4uYTQ3NjdjMTk4NDEzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g QEAgLTYxLDYgKzYxLDcgQEAKPiAgI2luY2x1ZGUgImk5MTVfZ2VtLmgiCj4gICNpbmNsdWRlICJp OTE1X2dlbV9ndHQuaCIKPiAgI2luY2x1ZGUgImk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5oIgo+ICsj aW5jbHVkZSAiaTkxNV9nZW1fcmVxdWVzdC5oIgo+ICAKPiAgI2luY2x1ZGUgImludGVsX2d2dC5o Igo+ICAKPiBAQCAtMjM2NSwxNzEgKzIzNjYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0 dGVybGlzdCAqX19zZ19uZXh0KHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCj4gIAkgICAgICgoKF9f aXRlcikuY3VyciArPSBQQUdFX1NJWkUpIDwgKF9faXRlcikubWF4KSB8fAkJXAo+ICAJICAgICAo KF9faXRlcikgPSBfX3NndF9pdGVyKF9fc2dfbmV4dCgoX19pdGVyKS5zZ3ApLCBmYWxzZSksIDAp KQo+ICAKPiAtLyoqCj4gLSAqIFJlcXVlc3QgcXVldWUgc3RydWN0dXJlLgo+IC0gKgo+IC0gKiBU aGUgcmVxdWVzdCBxdWV1ZSBhbGxvd3MgdXMgdG8gbm90ZSBzZXF1ZW5jZSBudW1iZXJzIHRoYXQg aGF2ZSBiZWVuIGVtaXR0ZWQKPiAtICogYW5kIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYWN0aXZl IGJ1ZmZlcnMgdG8gYmUgcmV0aXJlZC4KPiAtICoKPiAtICogQnkga2VlcGluZyB0aGlzIGxpc3Qs IHdlIGNhbiBhdm9pZCBoYXZpbmcgdG8gZG8gcXVlc3Rpb25hYmxlIHNlcXVlbmNlCj4gLSAqIG51 bWJlciBjb21wYXJpc29ucyBvbiBidWZmZXIgbGFzdF9yZWFkfHdyaXRlX3NlcW5vLiBJdCBhbHNv IGFsbG93cyBhbgo+IC0gKiBlbWlzc2lvbiB0aW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUg cmVxdWVzdCBmb3IgdHJhY2tpbmcgaG93IGZhciBhaGVhZAo+IC0gKiBvZiB0aGUgR1BVIHRoZSBz dWJtaXNzaW9uIGlzLgo+IC0gKgo+IC0gKiBUaGUgcmVxdWVzdHMgYXJlIHJlZmVyZW5jZSBjb3Vu dGVkLCBzbyB1cG9uIGNyZWF0aW9uIHRoZXkgc2hvdWxkIGhhdmUgYW4KPiAtICogaW5pdGlhbCBy ZWZlcmVuY2UgdGFrZW4gdXNpbmcga3JlZl9pbml0Cj4gLSAqLwo+IC1zdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3Qgewo+IC0Jc3RydWN0IGtyZWYgcmVmOwo+IC0KPiAtCS8qKiBPbiBXaGljaCBy aW5nIHRoaXMgcmVxdWVzdCB3YXMgZ2VuZXJhdGVkICovCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNTsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCXN0cnVj dCBpbnRlbF9zaWduYWxfbm9kZSBzaWduYWxpbmc7Cj4gLQo+IC0JIC8qKiBHRU0gc2VxdWVuY2Ug bnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCwKPiAtCSAgKiB3aGVu IHRoZSBIV1MgYnJlYWRjcnVtYiBpcyBlcXVhbCB0byB0aGlzIHRoZSBHUFUgaXMgcHJvY2Vzc2lu Zwo+IC0JICAqIHRoaXMgcmVxdWVzdC4KPiAtCSAgKi8KPiAtCXUzMiBwcmV2aW91c19zZXFubzsK PiAtCj4gLQkgLyoqIEdFTSBzZXF1ZW5jZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVx dWVzdCwKPiAtCSAgKiB3aGVuIHRoZSBIV1MgYnJlYWRjcnVtYiBpcyBlcXVhbCBvciBncmVhdGVy IHRoYW4gdGhpcyB0aGUgR1BVCj4gLQkgICogaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhpcyBy ZXF1ZXN0Lgo+IC0JICAqLwo+IC0JdTMyIHNlcW5vOwo+IC0KPiAtCS8qKiBQb3NpdGlvbiBpbiB0 aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QgKi8KPiAtCXUzMiBoZWFk Owo+IC0KPiAtCS8qKgo+IC0JICogUG9zaXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhlIHN0 YXJ0IG9mIHRoZSBwb3N0Zml4Lgo+IC0JICogVGhpcyBpcyByZXF1aXJlZCB0byBjYWxjdWxhdGUg dGhlIG1heGltdW0gYXZhaWxhYmxlIHJpbmdidWZmZXIKPiAtCSAqIHNwYWNlIHdpdGhvdXQgb3Zl cndyaXRpbmcgdGhlIHBvc3RmaXguCj4gLQkgKi8KPiAtCSB1MzIgcG9zdGZpeDsKPiAtCj4gLQkv KiogUG9zaXRpb24gaW4gdGhlIHJpbmdidWZmZXIgb2YgdGhlIGVuZCBvZiB0aGUgd2hvbGUgcmVx dWVzdCAqLwo+IC0JdTMyIHRhaWw7Cj4gLQo+IC0JLyoqIFByZWFsbG9jYXRlIHNwYWNlIGluIHRo ZSByaW5nYnVmZmVyIGZvciB0aGUgZW1pdHRpbmcgdGhlIHJlcXVlc3QgKi8KPiAtCXUzMiByZXNl cnZlZF9zcGFjZTsKPiAtCj4gLQkvKioKPiAtCSAqIENvbnRleHQgYW5kIHJpbmcgYnVmZmVyIHJl bGF0ZWQgdG8gdGhpcyByZXF1ZXN0Cj4gLQkgKiBDb250ZXh0cyBhcmUgcmVmY291bnRlZCwgc28g d2hlbiB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEKPiAtCSAqIGNvbnRleHQsIHdl IG11c3QgaW5jcmVtZW50IHRoZSBjb250ZXh0J3MgcmVmY291bnQsIHRvIGd1YXJhbnRlZSB0aGF0 Cj4gLQkgKiBpdCBwZXJzaXN0cyB3aGlsZSBhbnkgcmVxdWVzdCBpcyBsaW5rZWQgdG8gaXQuIFJl cXVlc3RzIHRoZW1zZWx2ZXMKPiAtCSAqIGFyZSBhbHNvIHJlZmNvdW50ZWQsIHNvIHRoZSByZXF1 ZXN0IHdpbGwgb25seSBiZSBmcmVlZCB3aGVuIHRoZSBsYXN0Cj4gLQkgKiByZWZlcmVuY2UgdG8g aXQgaXMgZGlzbWlzc2VkLCBhbmQgdGhlIGNvZGUgaW4KPiAtCSAqIGk5MTVfZ2VtX3JlcXVlc3Rf ZnJlZSgpIHdpbGwgdGhlbiBkZWNyZW1lbnQgdGhlIHJlZmNvdW50IG9uIHRoZQo+IC0JICogY29u dGV4dC4KPiAtCSAqLwo+IC0Jc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPiAtCXN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+IC0KPiAtCS8qKgo+IC0JICogQ29udGV4dCBy ZWxhdGVkIHRvIHRoZSBwcmV2aW91cyByZXF1ZXN0Lgo+IC0JICogQXMgdGhlIGNvbnRleHRzIGFy ZSBhY2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUgdW50aWwgdGhlIHN3aXRjaCBpcwo+IC0JICogY29t cGxldGVkIHRvIGEgbmV3IGNvbnRleHQsIHRoZSBoYXJkd2FyZSBtYXkgc3RpbGwgYmUgd3JpdGlu Zwo+IC0JICogdG8gdGhlIGNvbnRleHQgb2JqZWN0IGFmdGVyIHRoZSBicmVhZGNydW1iIGlzIHZp c2libGUuIFdlIG11c3QKPiAtCSAqIG5vdCB1bnBpbi91bmJpbmQvcHJ1bmUgdGhhdCBvYmplY3Qg d2hpbHN0IHN0aWxsIGFjdGl2ZSBhbmQgc28KPiAtCSAqIHdlIGtlZXAgdGhlIHByZXZpb3VzIGNv bnRleHQgcGlubmVkIHVudGlsIHRoZSBmb2xsb3dpbmcgKHRoaXMpCj4gLQkgKiByZXF1ZXN0IGlz IHJldGlyZWQuCj4gLQkgKi8KPiAtCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpwcmV2aW91c19j b250ZXh0Owo+IC0KPiAtCS8qKiBCYXRjaCBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3Qg aWYgYW55ICh1c2VkIGZvcgo+IC0JICAgIGVycm9yIHN0YXRlIGR1bXAgb25seSkgKi8KPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7Cj4gLQo+IC0JLyoqIFRpbWUgYXQg d2hpY2ggdGhpcyByZXF1ZXN0IHdhcyBlbWl0dGVkLCBpbiBqaWZmaWVzLiAqLwo+IC0JdW5zaWdu ZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7Cj4gLQo+IC0JLyoqIGdsb2JhbCBsaXN0IGVudHJ5IGZv ciB0aGlzIHJlcXVlc3QgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAtCj4gLQlzdHJ1 Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXY7Cj4gLQkvKiogZmlsZV9wcml2IGxp c3QgZW50cnkgZm9yIHRoaXMgcmVxdWVzdCAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBjbGllbnRf bGlzdDsKPiAtCj4gLQkvKiogcHJvY2VzcyBpZGVudGlmaWVyIHN1Ym1pdHRpbmcgdGhpcyByZXF1 ZXN0ICovCj4gLQlzdHJ1Y3QgcGlkICpwaWQ7Cj4gLQo+IC0JLyoqCj4gLQkgKiBUaGUgRUxTUCBv bmx5IGFjY2VwdHMgdHdvIGVsZW1lbnRzIGF0IGEgdGltZSwgc28gd2UgcXVldWUKPiAtCSAqIGNv bnRleHQvdGFpbCBwYWlycyBvbiBhIGdpdmVuIHF1ZXVlIChyaW5nLT5leGVjbGlzdF9xdWV1ZSkg dW50aWwgdGhlCj4gLQkgKiBoYXJkd2FyZSBpcyBhdmFpbGFibGUuIFRoZSBxdWV1ZSBzZXJ2ZXMg YSBkb3VibGUgcHVycG9zZTogd2UgYWxzbyB1c2UKPiAtCSAqIGl0IHRvIGtlZXAgdHJhY2sgb2Yg dGhlIHVwIHRvIDIgY29udGV4dHMgY3VycmVudGx5IGluIHRoZSBoYXJkd2FyZQo+IC0JICogKHVz dWFsbHkgb25lIGluIGV4ZWN1dGlvbiBhbmQgdGhlIG90aGVyIHF1ZXVlZCB1cCBieSB0aGUgR1BV KTogV2UKPiAtCSAqIG9ubHkgcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHF1 ZXVlIHdoZW4gdGhlIGhhcmR3YXJlCj4gLQkgKiBpbmZvcm1zIHVzIHRoYXQgYW4gZWxlbWVudCBo YXMgYmVlbiBjb21wbGV0ZWQuCj4gLQkgKgo+IC0JICogQWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1 ZSBhcmUgbWVkaWF0ZWQgYnkgYSBzcGlubG9jawo+IC0JICogKHJpbmctPmV4ZWNsaXN0X2xvY2sp Lgo+IC0JICovCj4gLQo+IC0JLyoqIEV4ZWNsaXN0IGxpbmsgaW4gdGhlIHN1Ym1pc3Npb24gcXVl dWUuKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgZXhlY2xpc3RfbGluazsKPiAtCj4gLQkvKiogRXhl Y2xpc3RzIG5vLiBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gc2VudCB0byB0aGUgRUxT UCAqLwo+IC0JaW50IGVsc3Bfc3VibWl0dGVkOwo+IC0KPiAtCS8qKiBFeGVjbGlzdHMgY29udGV4 dCBoYXJkd2FyZSBpZC4gKi8KPiAtCXVuc2lnbmVkIGN0eF9od19pZDsKPiAtfTsKPiAtCj4gLXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqIF9fbXVzdF9jaGVjawo+IC1pOTE1X2dlbV9yZXF1 ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkgICAgICAgc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCk7Cj4gLXZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVl KHN0cnVjdCBrcmVmICpyZXFfcmVmKTsKPiAtaW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRkX3RvX2Ns aWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAtCQkJCSAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSk7Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHVpbnQzMl90Cj4gLWk5MTVfZ2Vt X3JlcXVlc3RfZ2V0X3NlcW5vKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+IC17 Cj4gLQlyZXR1cm4gcmVxID8gcmVxLT5zZXFubyA6IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxp bmUgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCj4gLWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X2VuZ2lu ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAtewo+IC0JcmV0dXJuIHJlcSA/ IHJlcS0+ZW5naW5lIDogTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKgo+IC1pOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAtewo+IC0JaWYgKHJlcSkKPiAtCQlrcmVmX2dl dCgmcmVxLT5yZWYpOwo+IC0JcmV0dXJuIHJlcTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2 b2lkCj4gLWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCWtyZWZfcHV0KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVz dF9mcmVlKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX3JlcXVlc3Rf YXNzaWduKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqKnBkc3QsCj4gLQkJCQkJICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpzcmMpCj4gLXsKPiAtCWlmIChzcmMpCj4gLQkJaTkx NV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uoc3JjKTsKPiAtCj4gLQlpZiAoKnBkc3QpCj4gLQkJaTkx NV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZSgqcGRzdCk7Cj4gLQo+IC0JKnBkc3QgPSBzcmM7Cj4g LX0KPiAtCj4gLS8qCj4gLSAqIFhYWDogaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQgc2hvdWxk IGJlIGhlcmUgYnV0IGN1cnJlbnRseSBuZWVkcyB0aGUKPiAtICogZGVmaW5pdGlvbiBvZiBpOTE1 X3NlcW5vX3Bhc3NlZCgpIHdoaWNoIGlzIGJlbG93LiBJdCB3aWxsIGJlIG1vdmVkIGluCj4gLSAq IGEgbGF0ZXIgcGF0Y2ggd2hlbiB0aGUgY2FsbCB0byBpOTE1X3NlcW5vX3Bhc3NlZCgpIGlzIG9i c29sZXRlZC4uLgo+IC0gKi8KPiAtCj4gIC8qCj4gICAqIEEgY29tbWFuZCB0aGF0IHJlcXVpcmVz IHNwZWNpYWwgaGFuZGxpbmcgYnkgdGhlIGNvbW1hbmQgcGFyc2VyLgo+ICAgKi8KPiBAQCAtMzI5 NywzNyArMzEzMyw2IEBAIHZvaWQgaTkxNV9nZW1fdHJhY2tfZmIoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9sZCwKPiAgCQkgICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm5l dywKPiAgCQkgICAgICAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cyk7Cj4gIAo+IC0vKioKPiAt ICogUmV0dXJucyB0cnVlIGlmIHNlcTEgaXMgbGF0ZXIgdGhhbiBzZXEyLgo+IC0gKi8KPiAtc3Rh dGljIGlubGluZSBib29sCj4gLWk5MTVfc2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVpbnQz Ml90IHNlcTIpCj4gLXsKPiAtCXJldHVybiAoaW50MzJfdCkoc2VxMSAtIHNlcTIpID49IDA7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQoY29u c3Qgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gLXsKPiAtCXJldHVybiBpOTE1 X3NlcW5vX3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHJlcS0+ZW5naW5lKSwKPiAtCQkJ CSByZXEtPnByZXZpb3VzX3NlcW5vKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sIGk5 MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxKQo+IC17Cj4gLQlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dl dF9zZXFubyhyZXEtPmVuZ2luZSksCj4gLQkJCQkgcmVxLT5zZXFubyk7Cj4gLX0KPiAtCj4gLWJv b2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcXVlc3QsCj4gLQkJCSBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dF91cyk7Cj4g LXN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsCj4gLQkJCQkgICAgIGludCBzdGF0ZSwgdW5zaWduZWQg bG9uZyB0aW1lb3V0X3VzKQo+IC17Cj4gLQlyZXR1cm4gKGk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRl ZChyZXF1ZXN0KSAmJgo+IC0JCV9faTkxNV9zcGluX3JlcXVlc3QocmVxdWVzdCwgc3RhdGUsIHRp bWVvdXRfdXMpKTsKPiAtfQo+IC0KPiAtaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9nZXRfc2Vx bm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgKnNlcW5vKTsKPiAgaW50 IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9zZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dTMyIHNlcW5vKTsKPiAgCj4gIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqCj4gQEAgLTMz ODUsMTggKzMxOTAsNiBAQCB2b2lkIGk5MTVfZ2VtX2NsZWFudXBfZW5naW5lcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV93YWl0X2Zvcl9pZGxl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGludCBfX211c3RfY2hlY2sg aTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgdm9pZCBpOTE1X2dl bV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gLXZvaWQgX19pOTE1X2FkZF9yZXF1 ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+IC0JCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+IC0JCQlib29sIGZsdXNoX2NhY2hlcyk7Cj4gLSNk ZWZpbmUgaTkxNV9hZGRfcmVxdWVzdChyZXEpIFwKPiAtCV9faTkxNV9hZGRfcmVxdWVzdChyZXEs IE5VTEwsIHRydWUpCj4gLSNkZWZpbmUgaTkxNV9hZGRfcmVxdWVzdF9ub19mbHVzaChyZXEpIFwK PiAtCV9faTkxNV9hZGRfcmVxdWVzdChyZXEsIE5VTEwsIGZhbHNlKQo+IC1pbnQgX19pOTE1X3dh aXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAtCQkJYm9vbCBp bnRlcnJ1cHRpYmxlLAo+IC0JCQlzNjQgKnRpbWVvdXQsCj4gLQkJCXN0cnVjdCBpbnRlbF9ycHNf Y2xpZW50ICpycHMpOwo+IC1pbnQgX19tdXN0X2NoZWNrIGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKTsKPiAgaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Cj4gIGludCBfX211 c3RfY2hlY2sKPiAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gaW5kZXggOGI0MmE1 MTAxZjExLi4xMGU1ZGIzZjI5NGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAt MTMyNSwzNjUgKzEzMjUsNiBAQCBwdXRfcnBtOgo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAt c3RhdGljIGludAo+IC1pOTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCByZXNldF9jb3VudGVy LCBib29sIGludGVycnVwdGlibGUpCj4gLXsKPiAtCWlmIChfX2k5MTVfdGVybWluYWxseV93ZWRn ZWQocmVzZXRfY291bnRlcikpCj4gLQkJcmV0dXJuIC1FSU87Cj4gLQo+IC0JaWYgKF9faTkxNV9y ZXNldF9pbl9wcm9ncmVzcyhyZXNldF9jb3VudGVyKSkgewo+IC0JCS8qIE5vbi1pbnRlcnJ1cHRp YmxlIGNhbGxlcnMgY2FuJ3QgaGFuZGxlIC1FQUdBSU4sIGhlbmNlIHJldHVybgo+IC0JCSAqIC1F SU8gdW5jb25kaXRpb25hbGx5IGZvciB0aGVzZS4gKi8KPiAtCQlpZiAoIWludGVycnVwdGlibGUp Cj4gLQkJCXJldHVybiAtRUlPOwo+IC0KPiAtCQlyZXR1cm4gLUVBR0FJTjsKPiAtCX0KPiAtCj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9jYWxfY2xvY2tf dXModW5zaWduZWQgKmNwdSkKPiAtewo+IC0JdW5zaWduZWQgbG9uZyB0Owo+IC0KPiAtCS8qIENo ZWFwbHkgYW5kIGFwcHJveGltYXRlbHkgY29udmVydCBmcm9tIG5hbm9zZWNvbmRzIHRvIG1pY3Jv c2Vjb25kcy4KPiAtCSAqIFRoZSByZXN1bHQgYW5kIHN1YnNlcXVlbnQgY2FsY3VsYXRpb25zIGFy ZSBhbHNvIGRlZmluZWQgaW4gdGhlIHNhbWUKPiAtCSAqIGFwcHJveGltYXRlIG1pY3Jvc2Vjb25k cyB1bml0cy4gVGhlIHByaW5jaXBhbCBzb3VyY2Ugb2YgdGltaW5nCj4gLQkgKiBlcnJvciBoZXJl IGlzIGZyb20gdGhlIHNpbXBsZSB0cnVuY2F0aW9uLgo+IC0JICoKPiAtCSAqIE5vdGUgdGhhdCBs b2NhbF9jbG9jaygpIGlzIG9ubHkgZGVmaW5lZCB3cnQgdG8gdGhlIGN1cnJlbnQgQ1BVOwo+IC0J ICogdGhlIGNvbXBhcmlzb25zIGFyZSBubyBsb25nZXIgdmFsaWQgaWYgd2Ugc3dpdGNoIENQVXMu IEluc3RlYWQgb2YKPiAtCSAqIGJsb2NraW5nIHByZWVtcHRpb24gZm9yIHRoZSBlbnRpcmUgYnVz eXdhaXQsIHdlIGNhbiBkZXRlY3QgdGhlIENQVQo+IC0JICogc3dpdGNoIGFuZCB1c2UgdGhhdCBh cyBpbmRpY2F0b3Igb2Ygc3lzdGVtIGxvYWQgYW5kIGEgcmVhc29uIHRvCj4gLQkgKiBzdG9wIGJ1 c3l3YWl0aW5nLCBzZWUgYnVzeXdhaXRfc3RvcCgpLgo+IC0JICovCj4gLQkqY3B1ID0gZ2V0X2Nw dSgpOwo+IC0JdCA9IGxvY2FsX2Nsb2NrKCkgPj4gMTA7Cj4gLQlwdXRfY3B1KCk7Cj4gLQo+IC0J cmV0dXJuIHQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGJ1c3l3YWl0X3N0b3AodW5zaWduZWQg bG9uZyB0aW1lb3V0LCB1bnNpZ25lZCBjcHUpCj4gLXsKPiAtCXVuc2lnbmVkIHRoaXNfY3B1Owo+ IC0KPiAtCWlmICh0aW1lX2FmdGVyKGxvY2FsX2Nsb2NrX3VzKCZ0aGlzX2NwdSksIHRpbWVvdXQp KQo+IC0JCXJldHVybiB0cnVlOwo+IC0KPiAtCXJldHVybiB0aGlzX2NwdSAhPSBjcHU7Cj4gLX0K PiAtCj4gLWJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3JlcXVlc3QgKnJlcSwKPiAtCQkJIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0X3Vz KQo+IC17Cj4gLQl1bnNpZ25lZCBjcHU7Cj4gLQo+IC0JLyogV2hlbiB3YWl0aW5nIGZvciBoaWdo IGZyZXF1ZW5jeSByZXF1ZXN0cywgZS5nLiBkdXJpbmcgc3luY2hyb25vdXMKPiAtCSAqIHJlbmRl cmluZyBzcGxpdCBiZXR3ZWVuIHRoZSBDUFUgYW5kIEdQVSwgdGhlIGZpbml0ZSBhbW91bnQgb2Yg dGltZQo+IC0JICogcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBpcnEgYW5kIHdhaXQgdXBvbiBpdCBs aW1pdHMgdGhlIHJlc3BvbnNlCj4gLQkgKiByYXRlLiBCeSBidXN5d2FpdGluZyBvbiB0aGUgcmVx dWVzdCBjb21wbGV0aW9uIGZvciBhIHNob3J0IHdoaWxlIHdlCj4gLQkgKiBjYW4gc2VydmljZSB0 aGUgaGlnaCBmcmVxdWVuY3kgd2FpdHMgYXMgcXVpY2sgYXMgcG9zc2libGUuIEhvd2V2ZXIsCj4g LQkgKiBpZiBpdCBpcyBhIHNsb3cgcmVxdWVzdCwgd2Ugd2FudCB0byBzbGVlcCBhcyBxdWlja2x5 IGFzIHBvc3NpYmxlLgo+IC0JICogVGhlIHRyYWRlb2ZmIGJldHdlZW4gd2FpdGluZyBhbmQgc2xl ZXBpbmcgaXMgcm91Z2hseSB0aGUgdGltZSBpdAo+IC0JICogdGFrZXMgdG8gc2xlZXAgb24gYSBy ZXF1ZXN0LCBvbiB0aGUgb3JkZXIgb2YgYSBtaWNyb3NlY29uZC4KPiAtCSAqLwo+IC0KPiAtCXRp bWVvdXRfdXMgKz0gbG9jYWxfY2xvY2tfdXMoJmNwdSk7Cj4gLQlkbyB7Cj4gLQkJaWYgKGk5MTVf Z2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCj4gLQkJCXJldHVybiB0cnVlOwo+IC0KPiAtCQlp ZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKQo+IC0JCQlicmVhazsKPiAt Cj4gLQkJaWYgKGJ1c3l3YWl0X3N0b3AodGltZW91dF91cywgY3B1KSkKPiAtCQkJYnJlYWs7Cj4g LQo+IC0JCWNwdV9yZWxheF9sb3dsYXRlbmN5KCk7Cj4gLQl9IHdoaWxlICghbmVlZF9yZXNjaGVk KCkpOwo+IC0KPiAtCXJldHVybiBmYWxzZTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIF9faTkxNV93 YWl0X3JlcXVlc3QgLSB3YWl0IHVudGlsIGV4ZWN1dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hl ZAo+IC0gKiBAcmVxOiBkdWghCj4gLSAqIEBpbnRlcnJ1cHRpYmxlOiBkbyBhbiBpbnRlcnJ1cHRp YmxlIHdhaXQgKG5vcm1hbGx5IHllcykKPiAtICogQHRpbWVvdXQ6IGluIC0gaG93IGxvbmcgdG8g d2FpdCAoTlVMTCBmb3JldmVyKTsgb3V0IC0gaG93IG11Y2ggdGltZSByZW1haW5pbmcKPiAtICog QHJwczogUlBTIGNsaWVudAo+IC0gKgo+IC0gKiBOb3RlOiBJdCBpcyBvZiB1dG1vc3QgaW1wb3J0 YW5jZSB0aGF0IHRoZSBwYXNzZWQgaW4gc2Vxbm8gYW5kIHJlc2V0X2NvdW50ZXIKPiAtICogdmFs dWVzIGhhdmUgYmVlbiByZWFkIGJ5IHRoZSBjYWxsZXIgaW4gYW4gc21wIHNhZmUgbWFubmVyLiBX aGVyZSByZWFkLXNpZGUKPiAtICogbG9ja3MgYXJlIGludm9sdmVkLCBpdCBpcyBzdWZmaWNpZW50 IHRvIHJlYWQgdGhlIHJlc2V0X2NvdW50ZXIgYmVmb3JlCj4gLSAqIHVubG9ja2luZyB0aGUgbG9j ayB0aGF0IHByb3RlY3RzIHRoZSBzZXFuby4gRm9yIGxvY2tsZXNzIHRyaWNrcywgdGhlCj4gLSAq IHJlc2V0X2NvdW50ZXIgX211c3RfIGJlIHJlYWQgYmVmb3JlLCBhbmQgYW4gYXBwcm9wcmlhdGUg c21wX3JtYiBtdXN0IGJlCj4gLSAqIGluc2VydGVkLgo+IC0gKgo+IC0gKiBSZXR1cm5zIDAgaWYg dGhlIHJlcXVlc3Qgd2FzIGZvdW5kIHdpdGhpbiB0aGUgYWxsb3RlZCB0aW1lLiBFbHNlIHJldHVy bnMgdGhlCj4gLSAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRpbWVvdXQg YXJndW1lbnQuCj4gLSAqLwo+IC1pbnQgX19pOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiAtCQkJYm9vbCBpbnRlcnJ1cHRpYmxlLAo+IC0JCQlzNjQg KnRpbWVvdXQsCj4gLQkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCj4gLXsKPiAtCWlu dCBzdGF0ZSA9IGludGVycnVwdGlibGUgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5U RVJSVVBUSUJMRTsKPiAtCURFRklORV9XQUlUKHJlc2V0KTsKPiAtCXN0cnVjdCBpbnRlbF93YWl0 IHdhaXQ7Cj4gLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfcmVtYWluOwo+IC0JczY0IGJlZm9yZSA9 IDA7IC8qIE9ubHkgdG8gc2lsZW5jZSBhIGNvbXBpbGVyIHdhcm5pbmcuICovCj4gLQlpbnQgcmV0 ID0gMDsKPiAtCj4gLQltaWdodF9zbGVlcCgpOwo+IC0KPiAtCWlmIChsaXN0X2VtcHR5KCZyZXEt Pmxpc3QpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBs ZXRlZChyZXEpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCXRpbWVvdXRfcmVtYWluID0gTUFYX1ND SEVEVUxFX1RJTUVPVVQ7Cj4gLQlpZiAodGltZW91dCkgewo+IC0JCWlmIChXQVJOX09OKCp0aW1l b3V0IDwgMCkpCj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCQlpZiAoKnRpbWVvdXQgPT0g MCkKPiAtCQkJcmV0dXJuIC1FVElNRTsKPiAtCj4gLQkJdGltZW91dF9yZW1haW4gPSBuc2Vjc190 b19qaWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOwo+IC0KPiAtCQkvKgo+IC0JCSAqIFJlY29yZCBj dXJyZW50IHRpbWUgaW4gY2FzZSBpbnRlcnJ1cHRlZCBieSBzaWduYWwsIG9yIHdlZGdlZC4KPiAt CQkgKi8KPiAtCQliZWZvcmUgPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4gLQl9Cj4gLQo+IC0JdHJh Y2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luKHJlcSk7Cj4gLQo+IC0JLyogVGhpcyBjbGll bnQgaXMgYWJvdXQgdG8gc3RhbGwgd2FpdGluZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBjYXNlcwo+ IC0JICogdGhpcyBpcyB1bmRlc2lyYWJsZSBhbmQgbGltaXRzIHRoZSB0aHJvdWdocHV0IG9mIHRo ZSBzeXN0ZW0sIGFzCj4gLQkgKiBtYW55IGNsaWVudHMgY2Fubm90IGNvbnRpbnVlIHByb2Nlc3Np bmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0Cj4gLQkgKiBibG9ja2VkLiBSUFMgYXV0b3R1bmlu ZyBtYXkgdGFrZSB0ZW5zIG9mIG1pbGxpc2Vjb25kcyB0byByZXNwb25kCj4gLQkgKiB0byB0aGUg R1BVIGxvYWQgYW5kIHRodXMgaW5jdXJzIGFkZGl0aW9uYWwgbGF0ZW5jeSBmb3IgdGhlIGNsaWVu dC4KPiAtCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90aW5nIHRoZSBHUFUgZnJl cXVlbmN5IHRvIG1heGltdW0KPiAtCSAqIGJlZm9yZSB3ZSB3YWl0LiBUaGlzIG1ha2VzIHRoZSBH UFUgdGhyb3R0bGUgdXAgbXVjaCBtb3JlIHF1aWNrbHkKPiAtCSAqIChnb29kIGZvciBiZW5jaG1h cmtzIGFuZCB1c2VyIGV4cGVyaWVuY2UsIGUuZy4gd2luZG93IGFuaW1hdGlvbnMpLAo+IC0JICog YnV0IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3NpbmcgdGhlIHdvcmts b2FkCj4gLQkgKiAoYmFkIGZvciBiYXR0ZXJ5KS4gTm90IGFsbCBjbGllbnRzIGV2ZW4gd2FudCB0 aGVpciByZXN1bHRzCj4gLQkgKiBpbW1lZGlhdGVseSBhbmQgZm9yIHRoZW0gd2Ugc2hvdWxkIGp1 c3QgbGV0IHRoZSBHUFUgc2VsZWN0IGl0cyBvd24KPiAtCSAqIGZyZXF1ZW5jeSB0byBtYXhpbWlz ZSBlZmZpY2llbmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCj4gLQkgKiBmb3Jj aW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2ggZm9yIHRoZSB3aG9sZSBzeXN0ZW0sIHdlIG9ubHkgYWxs b3cKPiAtCSAqIGVhY2ggY2xpZW50IHRvIHdhaXRib29zdCBvbmNlIGluIGEgYnVzeSBwZXJpb2Qu Cj4gLQkgKi8KPiAtCWlmIChJTlRFTF9JTkZPKHJlcS0+aTkxNSktPmdlbiA+PSA2KQo+IC0JCWdl bjZfcnBzX2Jvb3N0KHJlcS0+aTkxNSwgcnBzLCByZXEtPmVtaXR0ZWRfamlmZmllcyk7Cj4gLQo+ IC0JLyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4dCB+amlmZmllIGJlZm9yZSB0b3VjaGlu ZyBJUlFzICovCj4gLQlpZiAoaTkxNV9zcGluX3JlcXVlc3QocmVxLCBzdGF0ZSwgNSkpCj4gLQkJ Z290byBjb21wbGV0ZTsKPiAtCj4gLQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Cj4gLQlhZGRf d2FpdF9xdWV1ZSgmcmVxLT5pOTE1LT5ncHVfZXJyb3Iud2FpdF9xdWV1ZSwgJnJlc2V0KTsKPiAt Cj4gLQlpbnRlbF93YWl0X2luaXQoJndhaXQsIHJlcS0+c2Vxbm8pOwo+IC0JaWYgKGludGVsX2Vu Z2luZV9hZGRfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpKQo+IC0JCS8qIEluIG9yZGVyIHRvIGNo ZWNrIHRoYXQgd2UgaGF2ZW4ndCBtaXNzZWQgdGhlIGludGVycnVwdAo+IC0JCSAqIGFzIHdlIGVu YWJsZWQgaXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8gYQo+IC0JCSAqIGNvaGVy ZW50IGNoZWNrIG9uIHRoZSBzZXFubyBiZWZvcmUgd2Ugc2xlZXAuCj4gLQkJICovCj4gLQkJZ290 byB3YWtldXA7Cj4gLQo+IC0JZm9yICg7Oykgewo+IC0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0 ZShzdGF0ZSwgY3VycmVudCkpIHsKPiAtCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwo+IC0JCQlicmVh azsKPiAtCQl9Cj4gLQo+IC0JCXRpbWVvdXRfcmVtYWluID0gaW9fc2NoZWR1bGVfdGltZW91dCh0 aW1lb3V0X3JlbWFpbik7Cj4gLQkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKPiAtCQkJcmV0 ID0gLUVUSU1FOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCWlmIChpbnRlbF93YWl0X2Nv bXBsZXRlKCZ3YWl0KSkKPiAtCQkJYnJlYWs7Cj4gLQo+IC0JCXNldF9jdXJyZW50X3N0YXRlKHN0 YXRlKTsKPiAtCj4gLXdha2V1cDoKPiAtCQkvKiBDYXJlZnVsbHkgY2hlY2sgaWYgdGhlIHJlcXVl c3QgaXMgY29tcGxldGUsIGdpdmluZyB0aW1lCj4gLQkJICogZm9yIHRoZSBzZXFubyB0byBiZSB2 aXNpYmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0Lgo+IC0JCSAqIFdlIGFsc28gaGF2ZSB0byBj aGVjayBpbiBjYXNlIHdlIGFyZSBraWNrZWQgYnkgdGhlIEdQVQo+IC0JCSAqIHJlc2V0IGluIG9y ZGVyIHRvIGRyb3AgdGhlIHN0cnVjdF9tdXRleC4KPiAtCQkgKi8KPiAtCQlpZiAoX19pOTE1X3Jl cXVlc3RfaXJxX2NvbXBsZXRlKHJlcSkpCj4gLQkJCWJyZWFrOwo+IC0KPiAtCQkvKiBPbmx5IHNw aW4gaWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0ICovCj4gLQkJ aWYgKGk5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUsIDIpKQo+IC0JCQlicmVhazsKPiAtCX0K PiAtCXJlbW92ZV93YWl0X3F1ZXVlKCZyZXEtPmk5MTUtPmdwdV9lcnJvci53YWl0X3F1ZXVlLCAm cmVzZXQpOwo+IC0KPiAtCWludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChyZXEtPmVuZ2luZSwgJndh aXQpOwo+IC0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwo+IC1jb21wbGV0ZToK PiAtCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQocmVxKTsKPiAtCj4gLQlpZiAodGlt ZW91dCkgewo+IC0JCXM2NCB0cmVzID0gKnRpbWVvdXQgLSAoa3RpbWVfZ2V0X3Jhd19ucygpIC0g YmVmb3JlKTsKPiAtCj4gLQkJKnRpbWVvdXQgPSB0cmVzIDwgMCA/IDAgOiB0cmVzOwo+IC0KPiAt CQkvKgo+IC0JCSAqIEFwcGFyZW50bHkga3RpbWUgaXNuJ3QgYWNjdXJhdGUgZW5vdWdoIGFuZCBv Y2Nhc2lvbmFsbHkgaGFzIGEKPiAtCQkgKiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8 LT5uc2VjczwtPmt0aW1lIGxvb3AuIFNvIHBhdGNoCj4gLQkJICogdGhpbmdzIHVwIHRvIG1ha2Ug dGhlIHRlc3QgaGFwcHkuIFdlIGFsbG93IHVwIHRvIDEgamlmZnkuCj4gLQkJICoKPiAtCQkgKiBU aGlzIGlzIGEgcmVncnNzaW9uIGZyb20gdGhlIHRpbWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgo+ IC0JCSAqLwo+IC0JCWlmIChyZXQgPT0gLUVUSU1FICYmICp0aW1lb3V0IDwgamlmZmllc190b191 c2VjcygxKSoxMDAwKQo+IC0JCQkqdGltZW91dCA9IDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJwcyAm JiByZXEtPnNlcW5vID09IHJlcS0+ZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgewo+IC0J CS8qIFRoZSBHUFUgaXMgbm93IGlkbGUgYW5kIHRoaXMgY2xpZW50IGhhcyBzdGFsbGVkLgo+IC0J CSAqIFNpbmNlIG5vIG90aGVyIGNsaWVudCBoYXMgc3VibWl0dGVkIGEgcmVxdWVzdCBpbiB0aGUK PiAtCQkgKiBtZWFudGltZSwgYXNzdW1lIHRoYXQgdGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25l Cj4gLQkJICogc3VwcGx5aW5nIHdvcmsgdG8gdGhlIEdQVSBidXQgaXMgdW5hYmxlIHRvIGtlZXAg dGhhdAo+IC0JCSAqIHdvcmsgc3VwcGxpZWQgYmVjYXVzZSBpdCBpcyB3YWl0aW5nLiBTaW5jZSB0 aGUgR1BVIGlzCj4gLQkJICogdGhlbiBuZXZlciBrZXB0IGZ1bGx5IGJ1c3ksIFJQUyBhdXRvY2xv Y2tpbmcgd2lsbAo+IC0JCSAqIGtlZXAgdGhlIGNsb2NrcyByZWxhdGl2ZWx5IGxvdywgY2F1c2lu ZyBmdXJ0aGVyIGRlbGF5cy4KPiAtCQkgKiBDb21wZW5zYXRlIGJ5IGdpdmluZyB0aGUgc3luY2hy b25vdXMgY2xpZW50IGNyZWRpdCBmb3IKPiAtCQkgKiBhIHdhaXRib29zdCBuZXh0IHRpbWUuCj4g LQkJICovCj4gLQkJc3Bpbl9sb2NrKCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Cj4gLQkJ bGlzdF9kZWxfaW5pdCgmcnBzLT5saW5rKTsKPiAtCQlzcGluX3VubG9jaygmcmVxLT5pOTE1LT5y cHMuY2xpZW50X2xvY2spOwo+IC0JfQo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLWlu dCBpOTE1X2dlbV9yZXF1ZXN0X2FkZF90b19jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXEsCj4gLQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gLXsKPiAtCXN0cnVj dCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKPiAtCj4gLQlXQVJOX09OKCFyZXEg fHwgIWZpbGUgfHwgcmVxLT5maWxlX3ByaXYpOwo+IC0KPiAtCWlmICghcmVxIHx8ICFmaWxlKQo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWlmIChyZXEtPmZpbGVfcHJpdikKPiAtCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCj4gLQlmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiAtCj4g LQlzcGluX2xvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gLQlyZXEtPmZpbGVfcHJpdiA9IGZp bGVfcHJpdjsKPiAtCWxpc3RfYWRkX3RhaWwoJnJlcS0+Y2xpZW50X2xpc3QsICZmaWxlX3ByaXYt Pm1tLnJlcXVlc3RfbGlzdCk7Cj4gLQlzcGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsK PiAtCj4gLQlyZXEtPnBpZCA9IGdldF9waWQodGFza19waWQoY3VycmVudCkpOwo+IC0KPiAtCXJl dHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQKPiAtaTkxNV9nZW1fcmVxdWVz dF9yZW1vdmVfZnJvbV9jbGllbnQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0 KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSByZXF1 ZXN0LT5maWxlX3ByaXY7Cj4gLQo+IC0JaWYgKCFmaWxlX3ByaXYpCj4gLQkJcmV0dXJuOwo+IC0K PiAtCXNwaW5fbG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtCWxpc3RfZGVsKCZyZXF1ZXN0 LT5jbGllbnRfbGlzdCk7Cj4gLQlyZXF1ZXN0LT5maWxlX3ByaXYgPSBOVUxMOwo+IC0Jc3Bpbl91 bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gLQo+IC0JcHV0X3BpZChyZXF1ZXN0LT5waWQp Owo+IC0JcmVxdWVzdC0+cGlkID0gTlVMTDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaTkxNV9n ZW1fcmVxdWVzdF9yZXRpcmUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ IC17Cj4gLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiAtCj4gLQkv KiBXZSBrbm93IHRoZSBHUFUgbXVzdCBoYXZlIHJlYWQgdGhlIHJlcXVlc3QgdG8gaGF2ZQo+IC0J ICogc2VudCB1cyB0aGUgc2Vxbm8gKyBpbnRlcnJ1cHQsIHNvIHVzZSB0aGUgcG9zaXRpb24KPiAt CSAqIG9mIHRhaWwgb2YgdGhlIHJlcXVlc3QgdG8gdXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0 aW9uCj4gLQkgKiBvZiB0aGUgR1BVIGhlYWQuCj4gLQkgKgo+IC0JICogTm90ZSB0aGlzIHJlcXVp cmVzIHRoYXQgd2UgYXJlIGFsd2F5cyBjYWxsZWQgaW4gcmVxdWVzdAo+IC0JICogY29tcGxldGlv biBvcmRlci4KPiAtCSAqLwo+IC0JcmVxdWVzdC0+cmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hlYWQg PSByZXF1ZXN0LT5wb3N0Zml4Owo+IC0KPiAtCWxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpc3Qp Owo+IC0JaTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQocmVxdWVzdCk7Cj4gLQo+ IC0JaWYgKHJlcXVlc3QtPnByZXZpb3VzX2NvbnRleHQpIHsKPiAtCQlpZiAoaTkxNS5lbmFibGVf ZXhlY2xpc3RzKQo+IC0JCQlpbnRlbF9scl9jb250ZXh0X3VucGluKHJlcXVlc3QtPnByZXZpb3Vz X2NvbnRleHQsCj4gLQkJCQkJICAgICAgIHJlcXVlc3QtPmVuZ2luZSk7Cj4gLQl9Cj4gLQo+IC0J aTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShyZXF1ZXN0LT5jdHgpOwo+IC0JaTkxNV9nZW1f cmVxdWVzdF91bnJlZmVyZW5jZShyZXF1ZXN0KTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQKPiAt X19pOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSkKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxLT5l bmdpbmU7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRtcDsKPiAtCj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZlbmdpbmUtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IC0KPiAt CWlmIChsaXN0X2VtcHR5KCZyZXEtPmxpc3QpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlkbyB7Cj4g LQkJdG1wID0gbGlzdF9maXJzdF9lbnRyeSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCj4gLQkJCQkg ICAgICAgdHlwZW9mKCp0bXApLCBsaXN0KTsKPiAtCj4gLQkJaTkxNV9nZW1fcmVxdWVzdF9yZXRp cmUodG1wKTsKPiAtCX0gd2hpbGUgKHRtcCAhPSByZXEpOwo+IC0KPiAtCVdBUk5fT04oaTkxNV92 ZXJpZnlfbGlzdHMoZW5naW5lLT5kZXYpKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIFdhaXRzIGZv ciBhIHJlcXVlc3QgdG8gYmUgc2lnbmFsZWQsIGFuZCBjbGVhbnMgdXAgdGhlCj4gLSAqIHJlcXVl c3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50Lgo+IC0gKiBA cmVxOiByZXF1ZXN0IHRvIHdhaXQgb24KPiAtICovCj4gLWludAo+IC1pOTE1X3dhaXRfcmVxdWVz dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAtewo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcmVxLT5pOTE1Owo+IC0JYm9vbCBpbnRlcnJ1cHRpYmxl Owo+IC0JaW50IHJldDsKPiAtCj4gLQlpbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPm1tLmludGVy cnVwdGlibGU7Cj4gLQo+IC0JQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KSk7Cj4gLQo+IC0JcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsIGlu dGVycnVwdGlibGUsIE5VTEwsIE5VTEwpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+ IC0KPiAtCS8qIElmIHRoZSBHUFUgaHVuZywgd2Ugd2FudCB0byBrZWVwIHRoZSByZXF1ZXN0cyB0 byBmaW5kIHRoZSBndWlsdHkuICovCj4gLQlpZiAoIWk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoJmRl dl9wcml2LT5ncHVfZXJyb3IpKQo+IC0JCV9faTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfX3VwdG8o cmVxKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgLyoqCj4gICAqIEVuc3VyZXMgdGhh dCBhbGwgcmVuZGVyaW5nIHRvIHRoZSBvYmplY3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIG9iamVj dCBpcwo+ICAgKiBzYWZlIHRvIHVuYmluZCBmcm9tIHRoZSBHVFQgb3IgYWNjZXNzIGZyb20gdGhl IENQVS4KPiBAQCAtMTc0MCw3ICsxMzgxLDcgQEAgaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9yZXF1 ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gIAkJaTkxNV9nZW1fb2JqZWN0 X3JldGlyZV9fd3JpdGUob2JqKTsKPiAgCj4gIAlpZiAoIWk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3Mo JnJlcS0+aTkxNS0+Z3B1X2Vycm9yKSkKPiAtCQlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191 cHRvKHJlcSk7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhyZXEpOwo+ICB9Cj4g IAo+ICAvKiBBIG5vbmJsb2NraW5nIHZhcmlhbnQgb2YgdGhlIGFib3ZlIHdhaXQuIFRoaXMgaXMg YSBoaWdobHkgZGFuZ2Vyb3VzIHJvdXRpbmUKPiBAQCAtMjc2MSwxOTMgKzI0MDIsNiBAQCBpOTE1 X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos IGludCByaW5nKQo+ICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4g IH0KPiAgCj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1faW5pdF9zZXFubyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBzZXFubykKPiAtewo+IC0Jc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lOwo+IC0JaW50IHJldDsKPiAtCj4gLQkvKiBDYXJlZnVsbHkgcmV0aXJl IGFsbCByZXF1ZXN0cyB3aXRob3V0IHdyaXRpbmcgdG8gdGhlIHJpbmdzICovCj4gLQlmb3JfZWFj aF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdikgewo+IC0JCXJldCA9IGludGVsX2VuZ2luZV9pZGxl KGVuZ2luZSk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCWk5MTVf Z2VtX3JldGlyZV9yZXF1ZXN0cyhkZXZfcHJpdik7Cj4gLQo+IC0JLyogSWYgdGhlIHNlcW5vIHdy YXBzIGFyb3VuZCwgd2UgbmVlZCB0byBjbGVhciB0aGUgYnJlYWRjcnVtYiByYnRyZWUgKi8KPiAt CWlmICghaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIGRldl9wcml2LT5uZXh0X3NlcW5vKSkgewo+ IC0JCXdoaWxlIChpbnRlbF9raWNrX3dhaXRlcnMoZGV2X3ByaXYpIHx8Cj4gLQkJICAgICAgIGlu dGVsX2tpY2tfc2lnbmFsZXJzKGRldl9wcml2KSkKPiAtCQkJeWllbGQoKTsKPiAtCX0KPiAtCj4g LQkvKiBGaW5hbGx5IHJlc2V0IGh3IHN0YXRlICovCj4gLQlmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBkZXZfcHJpdikKPiAtCQlpbnRlbF9yaW5nX2luaXRfc2Vxbm8oZW5naW5lLCBzZXFubyk7Cj4g LQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLWludCBpOTE1X2dlbV9zZXRfc2Vxbm8oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdTMyIHNlcW5vKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlmIChz ZXFubyA9PSAwKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCS8qIEhXUyBwYWdlIG5lZWRz IHRvIGJlIHNldCBsZXNzIHRoYW4gd2hhdCB3ZQo+IC0JICogd2lsbCBpbmplY3QgdG8gcmluZwo+ IC0JICovCj4gLQlyZXQgPSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldl9wcml2LCBzZXFubyAtIDEp Owo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCS8qIENhcmVmdWxseSBzZXQg dGhlIGxhc3Rfc2Vxbm8gdmFsdWUgc28gdGhhdCB3cmFwCj4gLQkgKiBkZXRlY3Rpb24gc3RpbGwg d29ya3MKPiAtCSAqLwo+IC0JZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSBzZXFubzsKPiAtCWRldl9w cml2LT5sYXN0X3NlcW5vID0gc2Vxbm8gLSAxOwo+IC0JaWYgKGRldl9wcml2LT5sYXN0X3NlcW5v ID09IDApCj4gLQkJZGV2X3ByaXYtPmxhc3Rfc2Vxbm8tLTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAt fQo+IC0KPiAtaW50Cj4gLWk5MTVfZ2VtX2dldF9zZXFubyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIHUzMiAqc2Vxbm8pCj4gLXsKPiAtCS8qIHJlc2VydmUgMCBmb3Igbm9uLXNl cW5vICovCj4gLQlpZiAoZGV2X3ByaXYtPm5leHRfc2Vxbm8gPT0gMCkgewo+IC0JCWludCByZXQg PSBpOTE1X2dlbV9pbml0X3NlcW5vKGRldl9wcml2LCAwKTsKPiAtCQlpZiAocmV0KQo+IC0JCQly ZXR1cm4gcmV0Owo+IC0KPiAtCQlkZXZfcHJpdi0+bmV4dF9zZXFubyA9IDE7Cj4gLQl9Cj4gLQo+ IC0JKnNlcW5vID0gZGV2X3ByaXYtPmxhc3Rfc2Vxbm8gPSBkZXZfcHJpdi0+bmV4dF9zZXFubysr Owo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGk5MTVfZ2VtX21hcmtfYnVz eShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiAtCj4gLQlkZXZfcHJp di0+Z3QuYWN0aXZlX2VuZ2luZXMgfD0gaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKPiAtCWlm IChkZXZfcHJpdi0+Z3QuYXdha2UpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWludGVsX3J1bnRpbWVf cG1fZ2V0X25vcmVzdW1lKGRldl9wcml2KTsKPiAtCWRldl9wcml2LT5ndC5hd2FrZSA9IHRydWU7 Cj4gLQo+IC0JaW50ZWxfZW5hYmxlX2d0X3Bvd2Vyc2F2ZShkZXZfcHJpdik7Cj4gLQlpOTE1X3Vw ZGF0ZV9nZnhfdmFsKGRldl9wcml2KTsKPiAtCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDYp Cj4gLQkJZ2VuNl9ycHNfYnVzeShkZXZfcHJpdik7Cj4gLQo+IC0JcXVldWVfZGVsYXllZF93b3Jr KGRldl9wcml2LT53cSwKPiAtCQkJICAgJmRldl9wcml2LT5ndC5yZXRpcmVfd29yaywKPiAtCQkJ ICAgcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShIWikpOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBO QjogVGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBmYWlsLiBEb2luZyBzbyB3b3VsZCBt ZWFuIHRoZSB0aGUKPiAtICogcmVxdWVzdCBpcyBub3QgYmVpbmcgdHJhY2tlZCBmb3IgY29tcGxl dGlvbiBidXQgdGhlIHdvcmsgaXRzZWxmIGlzCj4gLSAqIGdvaW5nIHRvIGhhcHBlbiBvbiB0aGUg aGFyZHdhcmUuIFRoaXMgd291bGQgYmUgYSBCYWQgVGhpbmcodG0pLgo+IC0gKi8KPiAtdm9pZCBf X2k5MTVfYWRkX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0LAo+ IC0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0JCQlib29sIGZsdXNoX2Nh Y2hlcykKPiAtewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0Jc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7Cj4gLQl1MzIgcmVxdWVzdF9zdGFydDsKPiAtCXUz MiByZXNlcnZlZF90YWlsOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoV0FSTl9PTihyZXF1ZXN0 ID09IE5VTEwpKQo+IC0JCXJldHVybjsKPiAtCj4gLQllbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7 Cj4gLQlyaW5nYnVmID0gcmVxdWVzdC0+cmluZ2J1ZjsKPiAtCj4gLQkvKgo+IC0JICogVG8gZW5z dXJlIHRoYXQgdGhpcyBjYWxsIHdpbGwgbm90IGZhaWwsIHNwYWNlIGZvciBpdHMgZW1pc3Npb25z Cj4gLQkgKiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gdGhlIHJpbmcgYnVm ZmVyLiBMZXQgdGhlIHJpbmcKPiAtCSAqIGtub3cgdGhhdCBpdCBpcyB0aW1lIHRvIHVzZSB0aGF0 IHNwYWNlIHVwLgo+IC0JICovCj4gLQlyZXF1ZXN0X3N0YXJ0ID0gaW50ZWxfcmluZ19nZXRfdGFp bChyaW5nYnVmKTsKPiAtCXJlc2VydmVkX3RhaWwgPSByZXF1ZXN0LT5yZXNlcnZlZF9zcGFjZTsK PiAtCXJlcXVlc3QtPnJlc2VydmVkX3NwYWNlID0gMDsKPiAtCj4gLQkvKgo+IC0JICogRW1pdCBh bnkgb3V0c3RhbmRpbmcgZmx1c2hlcyAtIGV4ZWNidWYgY2FuIGZhaWwgdG8gZW1pdCB0aGUgZmx1 c2gKPiAtCSAqIGFmdGVyIGhhdmluZyBlbWl0dGVkIHRoZSBiYXRjaGJ1ZmZlciBjb21tYW5kLiBI ZW5jZSB3ZSBuZWVkIHRvIGZpeAo+IC0JICogdGhpbmdzIHVwIHNpbWlsYXIgdG8gZW1pdHRpbmcg dGhlIGxhenkgcmVxdWVzdC4gVGhlIGRpZmZlcmVuY2UgaGVyZQo+IC0JICogaXMgdGhhdCB0aGUg Zmx1c2ggX211c3RfIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCwgbm8gbWF0dGVyCj4g LQkgKiB3aGF0Lgo+IC0JICovCj4gLQlpZiAoZmx1c2hfY2FjaGVzKSB7Cj4gLQkJaWYgKGk5MTUu ZW5hYmxlX2V4ZWNsaXN0cykKPiAtCQkJcmV0ID0gbG9naWNhbF9yaW5nX2ZsdXNoX2FsbF9jYWNo ZXMocmVxdWVzdCk7Cj4gLQkJZWxzZQo+IC0JCQlyZXQgPSBpbnRlbF9yaW5nX2ZsdXNoX2FsbF9j YWNoZXMocmVxdWVzdCk7Cj4gLQkJLyogTm90IGFsbG93ZWQgdG8gZmFpbCEgKi8KPiAtCQlXQVJO KHJldCwgIipfcmluZ19mbHVzaF9hbGxfY2FjaGVzIGZhaWxlZDogJWQhXG4iLCByZXQpOwo+IC0J fQo+IC0KPiAtCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfYWRkKHJlcXVlc3QpOwo+IC0KPiAtCXJl cXVlc3QtPmhlYWQgPSByZXF1ZXN0X3N0YXJ0Owo+IC0KPiAtCS8qIFdoaWxzdCB0aGlzIHJlcXVl c3QgZXhpc3RzLCBiYXRjaF9vYmogd2lsbCBiZSBvbiB0aGUKPiAtCSAqIGFjdGl2ZV9saXN0LCBh bmQgc28gd2lsbCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5IHdoZW4gdGhpcwo+IC0J ICogcmVxdWVzdCBpcyByZXRpcmVkIHdpbGwgdGhlIHRoZSBiYXRjaF9vYmogYmUgbW92ZWQgb250 byB0aGUKPiAtCSAqIGluYWN0aXZlX2xpc3QgYW5kIGxvc2UgaXRzIGFjdGl2ZSByZWZlcmVuY2Uu IEhlbmNlIHdlIGRvIG5vdCBuZWVkCj4gLQkgKiB0byBleHBsaWNpdGx5IGhvbGQgYW5vdGhlciBy ZWZlcmVuY2UgaGVyZS4KPiAtCSAqLwo+IC0JcmVxdWVzdC0+YmF0Y2hfb2JqID0gb2JqOwo+IC0K PiAtCS8qIFNlYWwgdGhlIHJlcXVlc3QgYW5kIG1hcmsgaXQgYXMgcGVuZGluZyBleGVjdXRpb24u IE5vdGUgdGhhdAo+IC0JICogd2UgbWF5IGluc3BlY3QgdGhpcyBzdGF0ZSwgd2l0aG91dCBob2xk aW5nIGFueSBsb2NrcywgZHVyaW5nCj4gLQkgKiBoYW5nY2hlY2suIEhlbmNlIHdlIGFwcGx5IHRo ZSBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdAo+IC0JICogc2VlIGEgbW9yZSByZWNl bnQgdmFsdWUgaW4gdGhlIGh3cyB0aGFuIHdlIGFyZSB0cmFja2luZy4KPiAtCSAqLwo+IC0JcmVx dWVzdC0+ZW1pdHRlZF9qaWZmaWVzID0gamlmZmllczsKPiAtCXJlcXVlc3QtPnByZXZpb3VzX3Nl cW5vID0gZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubzsKPiAtCXNtcF9zdG9yZV9tYihlbmdp bmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vLCByZXF1ZXN0LT5zZXFubyk7Cj4gLQlsaXN0X2FkZF90 YWlsKCZyZXF1ZXN0LT5saXN0LCAmZW5naW5lLT5yZXF1ZXN0X2xpc3QpOwo+IC0KPiAtCS8qIFJl Y29yZCB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0IHNvIHRoYXQKPiAt CSAqIHNob3VsZCB3ZSBkZXRlY3QgdGhlIHVwZGF0ZWQgc2Vxbm8gcGFydC13YXkgdGhyb3VnaCB0 aGUKPiAtCSAqIEdQVSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LCB3ZSBuZXZlciBvdmVyLWVzdGlt YXRlIHRoZQo+IC0JICogcG9zaXRpb24gb2YgdGhlIGhlYWQuCj4gLQkgKi8KPiAtCXJlcXVlc3Qt PnBvc3RmaXggPSBpbnRlbF9yaW5nX2dldF90YWlsKHJpbmdidWYpOwo+IC0KPiAtCWlmIChpOTE1 LmVuYWJsZV9leGVjbGlzdHMpCj4gLQkJcmV0ID0gZW5naW5lLT5lbWl0X3JlcXVlc3QocmVxdWVz dCk7Cj4gLQllbHNlIHsKPiAtCQlyZXQgPSBlbmdpbmUtPmFkZF9yZXF1ZXN0KHJlcXVlc3QpOwo+ IC0KPiAtCQlyZXF1ZXN0LT50YWlsID0gaW50ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKTsKPiAt CX0KPiAtCS8qIE5vdCBhbGxvd2VkIHRvIGZhaWwhICovCj4gLQlXQVJOKHJldCwgImVtaXR8YWRk X3JlcXVlc3QgZmFpbGVkOiAlZCFcbiIsIHJldCk7Cj4gLQkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0 aGUgcmVzZXJ2ZWQgc2l6ZSB3YXMgbGFyZ2UgZW5vdWdoLiAqLwo+IC0JcmV0ID0gaW50ZWxfcmlu Z19nZXRfdGFpbChyaW5nYnVmKSAtIHJlcXVlc3Rfc3RhcnQ7Cj4gLQlpZiAocmV0IDwgMCkKPiAt CQlyZXQgKz0gcmluZ2J1Zi0+c2l6ZTsKPiAtCVdBUk5fT05DRShyZXQgPiByZXNlcnZlZF90YWls LAo+IC0JCSAgIk5vdCBlbm91Z2ggc3BhY2UgcmVzZXJ2ZWQgKCVkIGJ5dGVzKSAiCj4gLQkJICAi Zm9yIGFkZGluZyB0aGUgcmVxdWVzdCAoJWQgYnl0ZXMpXG4iLAo+IC0JCSAgcmVzZXJ2ZWRfdGFp bCwgcmV0KTsKPiAtCj4gLQlpOTE1X2dlbV9tYXJrX2J1c3koZW5naW5lKTsKPiAtfQo+IC0KPiAg c3RhdGljIGJvb2wgaTkxNV9jb250ZXh0X2lzX2Jhbm5lZChjb25zdCBzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqY3R4KQo+ICB7Cj4gIAl1bnNpZ25lZCBsb25nIGVsYXBzZWQ7Cj4gQEAgLTI5Nzks MTAxICsyNDMzLDYgQEAgc3RhdGljIHZvaWQgaTkxNV9zZXRfcmVzZXRfc3RhdHVzKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAl9Cj4gIH0KPiAgCj4gLXZvaWQgaTkxNV9nZW1fcmVx dWVzdF9mcmVlKHN0cnVjdCBrcmVmICpyZXFfcmVmKQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSA9IGNvbnRhaW5lcl9vZihyZXFfcmVmLAo+IC0JCQkJCQkgdHlwZW9m KCpyZXEpLCByZWYpOwo+IC0Ja21lbV9jYWNoZV9mcmVlKHJlcS0+aTkxNS0+cmVxdWVzdHMsIHJl cSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50Cj4gLV9faTkxNV9nZW1fcmVxdWVzdF9h bGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCSBzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4LAo+IC0JCQkgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoqcmVx X291dCkKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5l LT5pOTE1Owo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRlciA9IGk5MTVfcmVzZXRfY291bnRlcigm ZGV2X3ByaXYtPmdwdV9lcnJvcik7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKCFyZXFfb3V0KQo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0KPiAtCSpyZXFfb3V0ID0gTlVMTDsKPiAtCj4gLQkvKiBBQkk6IEJlZm9yZSB1c2Vyc3Bh Y2UgYWNjZXNzZXMgdGhlIEdQVSAoZS5nLiBleGVjYnVmZmVyKSwgcmVwb3J0Cj4gLQkgKiBFSU8g aWYgdGhlIEdQVSBpcyBhbHJlYWR5IHdlZGdlZCwgb3IgRUFHQUlOIHRvIGRyb3AgdGhlIHN0cnVj dF9tdXRleAo+IC0JICogYW5kIHJlc3RhcnQuCj4gLQkgKi8KPiAtCXJldCA9IGk5MTVfZ2VtX2No ZWNrX3dlZGdlKHJlc2V0X2NvdW50ZXIsIGRldl9wcml2LT5tbS5pbnRlcnJ1cHRpYmxlKTsKPiAt CWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXEgPSBrbWVtX2NhY2hlX3phbGxv YyhkZXZfcHJpdi0+cmVxdWVzdHMsIEdGUF9LRVJORUwpOwo+IC0JaWYgKHJlcSA9PSBOVUxMKQo+ IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXJldCA9IGk5MTVfZ2VtX2dldF9zZXFubyhlbmdp bmUtPmk5MTUsICZyZXEtPnNlcW5vKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnI7Cj4gLQo+ IC0Ja3JlZl9pbml0KCZyZXEtPnJlZik7Cj4gLQlyZXEtPmk5MTUgPSBkZXZfcHJpdjsKPiAtCXJl cS0+ZW5naW5lID0gZW5naW5lOwo+IC0JcmVxLT5jdHggID0gY3R4Owo+IC0JaTkxNV9nZW1fY29u dGV4dF9yZWZlcmVuY2UocmVxLT5jdHgpOwo+IC0KPiAtCS8qCj4gLQkgKiBSZXNlcnZlIHNwYWNl IGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5kcyByZXF1aXJlZCB0bwo+IC0J ICogZXZlbnR1YWxseSBlbWl0IHRoaXMgcmVxdWVzdC4gVGhpcyBpcyB0byBndWFyYW50ZWUgdGhh dCB0aGUKPiAtCSAqIGk5MTVfYWRkX3JlcXVlc3QoKSBjYWxsIGNhbid0IGZhaWwuIE5vdGUgdGhh dCB0aGUgcmVzZXJ2ZSBtYXkgbmVlZAo+IC0JICogdG8gYmUgcmVkb25lIGlmIHRoZSByZXF1ZXN0 IGlzIG5vdCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQKPiAtCSAqIGF3YXksIGUuZy4gYmVj YXVzZSBhIEdQVSBzY2hlZHVsZXIgaGFzIGRlZmVycmVkIGl0Lgo+IC0JICovCj4gLQlyZXEtPnJl c2VydmVkX3NwYWNlID0gTUlOX1NQQUNFX0ZPUl9BRERfUkVRVUVTVDsKPiAtCj4gLQlpZiAoaTkx NS5lbmFibGVfZXhlY2xpc3RzKQo+IC0JCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19hbGxvY19y ZXF1ZXN0X2V4dHJhcyhyZXEpOwo+IC0JZWxzZQo+IC0JCXJldCA9IGludGVsX3JpbmdfYWxsb2Nf cmVxdWVzdF9leHRyYXMocmVxKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnJfY3R4Owo+IC0K PiAtCSpyZXFfb3V0ID0gcmVxOwo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1lcnJfY3R4Ogo+IC0JaTkx NV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShjdHgpOwo+IC1lcnI6Cj4gLQlrbWVtX2NhY2hlX2Zy ZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAt LyoqCj4gLSAqIGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MgLSBhbGxvY2F0ZSBhIHJlcXVlc3Qgc3Ry dWN0dXJlCj4gLSAqCj4gLSAqIEBlbmdpbmU6IGVuZ2luZSB0aGF0IHdlIHdpc2ggdG8gaXNzdWUg dGhlIHJlcXVlc3Qgb24uCj4gLSAqIEBjdHg6IGNvbnRleHQgdGhhdCB0aGUgcmVxdWVzdCB3aWxs IGJlIGFzc29jaWF0ZWQgd2l0aC4KPiAtICogICAgICAgVGhpcyBjYW4gYmUgTlVMTCBpZiB0aGUg cmVxdWVzdCBpcyBub3QgZGlyZWN0bHkgcmVsYXRlZCB0bwo+IC0gKiAgICAgICBhbnkgc3BlY2lm aWMgdXNlciBjb250ZXh0LCBpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbAo+IC0gKiAg ICAgICBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgY29udGV4dCB0byB1c2UuCj4gLSAqCj4gLSAqIFJl dHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgcmVxdWVzdCBpZiBzdWNjZXNzZnVsLAo+ IC0gKiBvciBhbiBlcnJvciBjb2RlIGlmIG5vdC4KPiAtICovCj4gLXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqCj4gLWk5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+IC0JCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiAtCWludCBlcnI7Cj4g LQo+IC0JaWYgKGN0eCA9PSBOVUxMKQo+IC0JCWN0eCA9IGVuZ2luZS0+aTkxNS0+a2VybmVsX2Nv bnRleHQ7Cj4gLQllcnIgPSBfX2k5MTVfZ2VtX3JlcXVlc3RfYWxsb2MoZW5naW5lLCBjdHgsICZy ZXEpOwo+IC0JcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IHJlcTsKPiAtfQo+IC0KPiAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICoKPiAgaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVxdWVz dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiBAQCAtMzE0NywxNCArMjUw NiwxNCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9yZXNldF9lbmdpbmVfY2xlYW51cChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkgKiBpbXBsaWNpdCByZWZlcmVuY2VzIG9uIHRo aW5ncyBsaWtlIGUuZy4gcHBndHQgYWRkcmVzcyBzcGFjZXMgdGhyb3VnaAo+ICAJICogdGhlIHJl cXVlc3QuCj4gIAkgKi8KPiAtCXdoaWxlICghbGlzdF9lbXB0eSgmZW5naW5lLT5yZXF1ZXN0X2xp c3QpKSB7Cj4gKwlpZiAoIWxpc3RfZW1wdHkoJmVuZ2luZS0+cmVxdWVzdF9saXN0KSkgewo+ICAJ CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiAgCj4gLQkJcmVxdWVzdCA9 IGxpc3RfZmlyc3RfZW50cnkoJmVuZ2luZS0+cmVxdWVzdF9saXN0LAo+IC0JCQkJCSAgIHN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCwKPiAtCQkJCQkgICBsaXN0KTsKPiArCQlyZXF1ZXN0ID0g bGlzdF9sYXN0X2VudHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCwKPiArCQkJCQkgIHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCwKPiArCQkJCQkgIGxpc3QpOwo+ICAKPiAtCQlpOTE1X2dlbV9y ZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRv KHJlcXVlc3QpOwo+ICAJfQo+ICAKPiAgCS8qIEhhdmluZyBmbHVzaGVkIGFsbCByZXF1ZXN0cyBm cm9tIGFsbCBxdWV1ZXMsIHdlIGtub3cgdGhhdCBhbGwKPiBAQCAtMzIyMiw3ICsyNTgxLDcgQEAg aTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICAJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCj4gIAkJ CWJyZWFrOwo+ICAKPiAtCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiArCQlp OTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcXVlc3QpOwo+ICAJfQo+ICAKPiAgCS8qIE1v dmUgYW55IGJ1ZmZlcnMgb24gdGhlIGFjdGl2ZSBsaXN0IHRoYXQgYXJlIG5vIGxvbmdlciByZWZl cmVuY2VkCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVl c3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZTlhYTZiNzI1ZjcKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCj4g QEAgLTAsMCArMSw2NTggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMDgtMjAxNSBJbnRl bCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsKPiAraW50IGk5MTVfZ2VtX3JlcXVlc3RfYWRk X3RvX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiArCQkJCSAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2Owo+ ICsKPiArCVdBUk5fT04oIXJlcSB8fCAhZmlsZSB8fCByZXEtPmZpbGVfcHJpdik7Cj4gKwo+ICsJ aWYgKCFyZXEgfHwgIWZpbGUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHJlcS0+ ZmlsZV9wcml2KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRldl9wcml2YXRlID0gcmVx LT5pOTE1Owo+ICsJZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gKwo+ICsJc3Bpbl9s b2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ICsJcmVxLT5maWxlX3ByaXYgPSBmaWxlX3ByaXY7 Cj4gKwlsaXN0X2FkZF90YWlsKCZyZXEtPmNsaWVudF9saXN0LCAmZmlsZV9wcml2LT5tbS5yZXF1 ZXN0X2xpc3QpOwo+ICsJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gKwo+ICsJ cmVxLT5waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2k5MTVfZ2VtX3JlcXVlc3RfcmVtb3Zl X2Zyb21fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2ID0gcmVxdWVzdC0+Zmls ZV9wcml2Owo+ICsKPiArCWlmICghZmlsZV9wcml2KQo+ICsJCXJldHVybjsKPiArCj4gKwlzcGlu X2xvY2soJmZpbGVfcHJpdi0+bW0ubG9jayk7Cj4gKwlsaXN0X2RlbCgmcmVxdWVzdC0+Y2xpZW50 X2xpc3QpOwo+ICsJcmVxdWVzdC0+ZmlsZV9wcml2ID0gTlVMTDsKPiArCXNwaW5fdW5sb2NrKCZm aWxlX3ByaXYtPm1tLmxvY2spOwo+ICsKPiArCXB1dF9waWQocmVxdWVzdC0+cGlkKTsKPiArCXJl cXVlc3QtPnBpZCA9IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX3JlcXVl c3RfcmV0aXJlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPiArewo+ICsJ dHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Cj4gKwlsaXN0X2RlbF9pbml0 KCZyZXF1ZXN0LT5saXN0KTsKPiArCj4gKwkvKiBXZSBrbm93IHRoZSBHUFUgbXVzdCBoYXZlIHJl YWQgdGhlIHJlcXVlc3QgdG8gaGF2ZQo+ICsJICogc2VudCB1cyB0aGUgc2Vxbm8gKyBpbnRlcnJ1 cHQsIHNvIHVzZSB0aGUgcG9zaXRpb24KPiArCSAqIG9mIHRhaWwgb2YgdGhlIHJlcXVlc3QgdG8g dXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uCj4gKwkgKiBvZiB0aGUgR1BVIGhlYWQuCj4g KwkgKgo+ICsJICogTm90ZSB0aGlzIHJlcXVpcmVzIHRoYXQgd2UgYXJlIGFsd2F5cyBjYWxsZWQg aW4gcmVxdWVzdAo+ICsJICogY29tcGxldGlvbiBvcmRlci4KPiArCSAqLwo+ICsJcmVxdWVzdC0+ cmluZ2J1Zi0+bGFzdF9yZXRpcmVkX2hlYWQgPSByZXF1ZXN0LT5wb3N0Zml4Owo+ICsKPiArCWk5 MTVfZ2VtX3JlcXVlc3RfcmVtb3ZlX2Zyb21fY2xpZW50KHJlcXVlc3QpOwo+ICsKPiArCWlmIChy ZXF1ZXN0LT5wcmV2aW91c19jb250ZXh0KSB7Cj4gKwkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0 cykKPiArCQkJaW50ZWxfbHJfY29udGV4dF91bnBpbihyZXF1ZXN0LT5wcmV2aW91c19jb250ZXh0 LAo+ICsJCQkJCSAgICAgICByZXF1ZXN0LT5lbmdpbmUpOwo+ICsJfQo+ICsKPiArCWk5MTVfZ2Vt X2NvbnRleHRfdW5yZWZlcmVuY2UocmVxdWVzdC0+Y3R4KTsKPiArCWk5MTVfZ2VtX3JlcXVlc3Rf dW5yZWZlcmVuY2UocmVxdWVzdCk7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9y ZXRpcmVfdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxLT5lbmdpbmU7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnRtcDsKPiArCj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZyZXEt Pmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWlmIChsaXN0X2VtcHR5KCZyZXEtPmxp c3QpKQo+ICsJCXJldHVybjsKPiArCj4gKwlkbyB7Cj4gKwkJdG1wID0gbGlzdF9maXJzdF9lbnRy eSgmZW5naW5lLT5yZXF1ZXN0X2xpc3QsCj4gKwkJCQkgICAgICAgdHlwZW9mKCp0bXApLCBsaXN0 KTsKPiArCj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUodG1wKTsKPiArCX0gd2hpbGUgKHRt cCAhPSByZXEpOwo+ICsKPiArCVdBUk5fT04oaTkxNV92ZXJpZnlfbGlzdHMoZW5naW5lLT5kZXYp KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X2dlbV9jaGVja193ZWRnZSh1bnNpZ25lZCBp bnQgcmVzZXRfY291bnRlciwgYm9vbCBpbnRlcnJ1cHRpYmxlKQo+ICt7Cj4gKwlpZiAoX19pOTE1 X3Rlcm1pbmFsbHlfd2VkZ2VkKHJlc2V0X2NvdW50ZXIpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsK PiArCWlmIChfX2k5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MocmVzZXRfY291bnRlcikpIHsKPiArCQkv KiBOb24taW50ZXJydXB0aWJsZSBjYWxsZXJzIGNhbid0IGhhbmRsZSAtRUFHQUlOLCBoZW5jZSBy ZXR1cm4KPiArCQkgKiAtRUlPIHVuY29uZGl0aW9uYWxseSBmb3IgdGhlc2UuCj4gKwkJICovCj4g KwkJaWYgKCFpbnRlcnJ1cHRpYmxlKQo+ICsJCQlyZXR1cm4gLUVJTzsKPiArCj4gKwkJcmV0dXJu IC1FQUdBSU47Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aTkxNV9nZW1faW5pdF9zZXFubyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUz MiBzZXFubykKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJaW50 IHJldDsKPiArCj4gKwkvKiBDYXJlZnVsbHkgcmV0aXJlIGFsbCByZXF1ZXN0cyB3aXRob3V0IHdy aXRpbmcgdG8gdGhlIHJpbmdzICovCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJp dikgewo+ICsJCXJldCA9IGludGVsX2VuZ2luZV9pZGxlKGVuZ2luZSk7Cj4gKwkJaWYgKHJldCkK PiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXZf cHJpdik7Cj4gKwo+ICsJLyogSWYgdGhlIHNlcW5vIHdyYXBzIGFyb3VuZCwgd2UgbmVlZCB0byBj bGVhciB0aGUgYnJlYWRjcnVtYiByYnRyZWUgKi8KPiArCWlmICghaTkxNV9zZXFub19wYXNzZWQo c2Vxbm8sIGRldl9wcml2LT5uZXh0X3NlcW5vKSkgewo+ICsJCXdoaWxlIChpbnRlbF9raWNrX3dh aXRlcnMoZGV2X3ByaXYpIHx8Cj4gKwkJICAgICAgIGludGVsX2tpY2tfc2lnbmFsZXJzKGRldl9w cml2KSkKPiArCQkJeWllbGQoKTsKPiArCX0KPiArCj4gKwkvKiBGaW5hbGx5IHJlc2V0IGh3IHN0 YXRlICovCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBkZXZfcHJpdikKPiArCQlpbnRlbF9y aW5nX2luaXRfc2Vxbm8oZW5naW5lLCBzZXFubyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK2ludCBpOTE1X2dlbV9zZXRfc2Vxbm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNl cW5vKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChzZXFubyA9PSAwKQo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsKPiArCS8qIEhXUyBwYWdlIG5lZWRzIHRvIGJlIHNldCBsZXNzIHRoYW4gd2hh dCB3ZQo+ICsJICogd2lsbCBpbmplY3QgdG8gcmluZwo+ICsJICovCj4gKwlyZXQgPSBpOTE1X2dl bV9pbml0X3NlcW5vKGRldl9wcml2LCBzZXFubyAtIDEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1 cm4gcmV0Owo+ICsKPiArCS8qIENhcmVmdWxseSBzZXQgdGhlIGxhc3Rfc2Vxbm8gdmFsdWUgc28g dGhhdCB3cmFwCj4gKwkgKiBkZXRlY3Rpb24gc3RpbGwgd29ya3MKPiArCSAqLwo+ICsJZGV2X3By aXYtPm5leHRfc2Vxbm8gPSBzZXFubzsKPiArCWRldl9wcml2LT5sYXN0X3NlcW5vID0gc2Vxbm8g LSAxOwo+ICsJaWYgKGRldl9wcml2LT5sYXN0X3NlcW5vID09IDApCj4gKwkJZGV2X3ByaXYtPmxh c3Rfc2Vxbm8tLTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1 X2dlbV9nZXRfc2Vxbm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgKnNl cW5vKQo+ICt7Cj4gKwkvKiByZXNlcnZlIDAgZm9yIG5vbi1zZXFubyAqLwo+ICsJaWYgKHVubGlr ZWx5KGRldl9wcml2LT5uZXh0X3NlcW5vID09IDApKSB7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJ cmV0ID0gaTkxNV9nZW1faW5pdF9zZXFubyhkZXZfcHJpdiwgMCk7Cj4gKwkJaWYgKHJldCkKPiAr CQkJcmV0dXJuIHJldDsKPiArCj4gKwkJZGV2X3ByaXYtPm5leHRfc2Vxbm8gPSAxOwo+ICsJfQo+ ICsKPiArCSpzZXFubyA9IGRldl9wcml2LT5sYXN0X3NlcW5vID0gZGV2X3ByaXYtPm5leHRfc2Vx bm8rKzsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludAo+ICtfX2k5 MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJ CQkgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiArCQkJIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqKnJlcV9vdXQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXVuc2lnbmVkIGludCByZXNldF9jb3VudGVyID0g aTkxNV9yZXNldF9jb3VudGVyKCZkZXZfcHJpdi0+Z3B1X2Vycm9yKTsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXJlcV9vdXQp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJKnJlcV9vdXQgPSBOVUxMOwo+ICsKPiArCS8q IEFCSTogQmVmb3JlIHVzZXJzcGFjZSBhY2Nlc3NlcyB0aGUgR1BVIChlLmcuIGV4ZWNidWZmZXIp LCByZXBvcnQKPiArCSAqIEVJTyBpZiB0aGUgR1BVIGlzIGFscmVhZHkgd2VkZ2VkLCBvciBFQUdB SU4gdG8gZHJvcCB0aGUgc3RydWN0X211dGV4Cj4gKwkgKiBhbmQgcmVzdGFydC4KPiArCSAqLwo+ ICsJcmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UocmVzZXRfY291bnRlciwgZGV2X3ByaXYtPm1t LmludGVycnVwdGlibGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJl cSA9IGttZW1fY2FjaGVfemFsbG9jKGRldl9wcml2LT5yZXF1ZXN0cywgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIXJlcSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9n ZXRfc2Vxbm8oZGV2X3ByaXYsICZyZXEtPnNlcW5vKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnI7Cj4gKwo+ICsJa3JlZl9pbml0KCZyZXEtPnJlZik7Cj4gKwlyZXEtPmk5MTUgPSBkZXZfcHJp djsKPiArCXJlcS0+ZW5naW5lID0gZW5naW5lOwo+ICsJcmVxLT5jdHggPSBjdHg7Cj4gKwlpOTE1 X2dlbV9jb250ZXh0X3JlZmVyZW5jZShjdHgpOwo+ICsKPiArCS8qCj4gKwkgKiBSZXNlcnZlIHNw YWNlIGluIHRoZSByaW5nIGJ1ZmZlciBmb3IgYWxsIHRoZSBjb21tYW5kcyByZXF1aXJlZCB0bwo+ ICsJICogZXZlbnR1YWxseSBlbWl0IHRoaXMgcmVxdWVzdC4gVGhpcyBpcyB0byBndWFyYW50ZWUg dGhhdCB0aGUKPiArCSAqIGk5MTVfYWRkX3JlcXVlc3QoKSBjYWxsIGNhbid0IGZhaWwuIE5vdGUg dGhhdCB0aGUgcmVzZXJ2ZSBtYXkgbmVlZAo+ICsJICogdG8gYmUgcmVkb25lIGlmIHRoZSByZXF1 ZXN0IGlzIG5vdCBhY3R1YWxseSBzdWJtaXR0ZWQgc3RyYWlnaHQKPiArCSAqIGF3YXksIGUuZy4g YmVjYXVzZSBhIEdQVSBzY2hlZHVsZXIgaGFzIGRlZmVycmVkIGl0Lgo+ICsJICovCj4gKwlyZXEt PnJlc2VydmVkX3NwYWNlID0gTUlOX1NQQUNFX0ZPUl9BRERfUkVRVUVTVDsKPiArCj4gKwlpZiAo aTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+ICsJCXJldCA9IGludGVsX2xvZ2ljYWxfcmluZ19hbGxv Y19yZXF1ZXN0X2V4dHJhcyhyZXEpOwo+ICsJZWxzZQo+ICsJCXJldCA9IGludGVsX3JpbmdfYWxs b2NfcmVxdWVzdF9leHRyYXMocmVxKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY3R4Owo+ ICsKPiArCSpyZXFfb3V0ID0gcmVxOwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY3R4Ogo+ICsJ aTkxNV9nZW1fY29udGV4dF91bnJlZmVyZW5jZShjdHgpOwo+ICtlcnI6Cj4gKwlrbWVtX2NhY2hl X2ZyZWUoZGV2X3ByaXYtPnJlcXVlc3RzLCByZXEpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArLyoqCj4gKyAqIGk5MTVfZ2VtX3JlcXVlc3RfYWxsb2MgLSBhbGxvY2F0ZSBhIHJlcXVlc3Qg c3RydWN0dXJlCj4gKyAqCj4gKyAqIEBlbmdpbmU6IGVuZ2luZSB0aGF0IHdlIHdpc2ggdG8gaXNz dWUgdGhlIHJlcXVlc3Qgb24uCj4gKyAqIEBjdHg6IGNvbnRleHQgdGhhdCB0aGUgcmVxdWVzdCB3 aWxsIGJlIGFzc29jaWF0ZWQgd2l0aC4KPiArICogICAgICAgVGhpcyBjYW4gYmUgTlVMTCBpZiB0 aGUgcmVxdWVzdCBpcyBub3QgZGlyZWN0bHkgcmVsYXRlZCB0bwo+ICsgKiAgICAgICBhbnkgc3Bl Y2lmaWMgdXNlciBjb250ZXh0LCBpbiB3aGljaCBjYXNlIHRoaXMgZnVuY3Rpb24gd2lsbAo+ICsg KiAgICAgICBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgY29udGV4dCB0byB1c2UuCj4gKyAqCj4gKyAq IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgcmVxdWVzdCBpZiBzdWNjZXNzZnVs LAo+ICsgKiBvciBhbiBlcnJvciBjb2RlIGlmIG5vdC4KPiArICovCj4gK3N0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqCj4gK2k5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICsJCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiArCWludCBlcnI7 Cj4gKwo+ICsJaWYgKCFjdHgpCj4gKwkJY3R4ID0gZW5naW5lLT5pOTE1LT5rZXJuZWxfY29udGV4 dDsKPiArCWVyciA9IF9faTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCwgJnJlcSk7 Cj4gKwlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogcmVxOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpOTE1X2dlbV9tYXJrX2J1c3koY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUt Pmk5MTU7Cj4gKwo+ICsJZGV2X3ByaXYtPmd0LmFjdGl2ZV9lbmdpbmVzIHw9IGludGVsX2VuZ2lu ZV9mbGFnKGVuZ2luZSk7Cj4gKwlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlKQo+ICsJCXJldHVybjsK PiArCj4gKwlpbnRlbF9ydW50aW1lX3BtX2dldF9ub3Jlc3VtZShkZXZfcHJpdik7Cj4gKwlkZXZf cHJpdi0+Z3QuYXdha2UgPSB0cnVlOwo+ICsKPiArCWludGVsX2VuYWJsZV9ndF9wb3dlcnNhdmUo ZGV2X3ByaXYpOwo+ICsJaTkxNV91cGRhdGVfZ2Z4X3ZhbChkZXZfcHJpdik7Cj4gKwlpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA+PSA2KQo+ICsJCWdlbjZfcnBzX2J1c3koZGV2X3ByaXYpOwo+ICsK PiArCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXZfcHJpdi0+d3EsCj4gKwkJCSAgICZkZXZfcHJpdi0+ Z3QucmV0aXJlX3dvcmssCj4gKwkJCSAgIHJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoSFopKTsK PiArfQo+ICsKPiArLyoKPiArICogTkI6IFRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8g ZmFpbC4gRG9pbmcgc28gd291bGQgbWVhbiB0aGUgdGhlCj4gKyAqIHJlcXVlc3QgaXMgbm90IGJl aW5nIHRyYWNrZWQgZm9yIGNvbXBsZXRpb24gYnV0IHRoZSB3b3JrIGl0c2VsZiBpcwo+ICsgKiBn b2luZyB0byBoYXBwZW4gb24gdGhlIGhhcmR3YXJlLiBUaGlzIHdvdWxkIGJlIGEgQmFkIFRoaW5n KHRtKS4KPiArICovCj4gK3ZvaWQgX19pOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdCwKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiArCQkJYm9vbCBmbHVzaF9jYWNoZXMpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZTsKPiArCXN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmOwo+ICsJdTMy IHJlcXVlc3Rfc3RhcnQ7Cj4gKwl1MzIgcmVzZXJ2ZWRfdGFpbDsKPiArCWludCByZXQ7Cj4gKwo+ ICsJaWYgKFdBUk5fT04oIXJlcXVlc3QpKQo+ICsJCXJldHVybjsKPiArCj4gKwllbmdpbmUgPSBy ZXF1ZXN0LT5lbmdpbmU7Cj4gKwlyaW5nYnVmID0gcmVxdWVzdC0+cmluZ2J1ZjsKPiArCj4gKwkv Kgo+ICsJICogVG8gZW5zdXJlIHRoYXQgdGhpcyBjYWxsIHdpbGwgbm90IGZhaWwsIHNwYWNlIGZv ciBpdHMgZW1pc3Npb25zCj4gKwkgKiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gcmVzZXJ2ZWQg aW4gdGhlIHJpbmcgYnVmZmVyLiBMZXQgdGhlIHJpbmcKPiArCSAqIGtub3cgdGhhdCBpdCBpcyB0 aW1lIHRvIHVzZSB0aGF0IHNwYWNlIHVwLgo+ICsJICovCj4gKwlyZXF1ZXN0X3N0YXJ0ID0gaW50 ZWxfcmluZ19nZXRfdGFpbChyaW5nYnVmKTsKPiArCXJlc2VydmVkX3RhaWwgPSByZXF1ZXN0LT5y ZXNlcnZlZF9zcGFjZTsKPiArCXJlcXVlc3QtPnJlc2VydmVkX3NwYWNlID0gMDsKPiArCj4gKwkv Kgo+ICsJICogRW1pdCBhbnkgb3V0c3RhbmRpbmcgZmx1c2hlcyAtIGV4ZWNidWYgY2FuIGZhaWwg dG8gZW1pdCB0aGUgZmx1c2gKPiArCSAqIGFmdGVyIGhhdmluZyBlbWl0dGVkIHRoZSBiYXRjaGJ1 ZmZlciBjb21tYW5kLiBIZW5jZSB3ZSBuZWVkIHRvIGZpeAo+ICsJICogdGhpbmdzIHVwIHNpbWls YXIgdG8gZW1pdHRpbmcgdGhlIGxhenkgcmVxdWVzdC4gVGhlIGRpZmZlcmVuY2UgaGVyZQo+ICsJ ICogaXMgdGhhdCB0aGUgZmx1c2ggX211c3RfIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgcmVxdWVz dCwgbm8gbWF0dGVyCj4gKwkgKiB3aGF0Lgo+ICsJICovCj4gKwlpZiAoZmx1c2hfY2FjaGVzKSB7 Cj4gKwkJaWYgKGk5MTUuZW5hYmxlX2V4ZWNsaXN0cykKPiArCQkJcmV0ID0gbG9naWNhbF9yaW5n X2ZsdXNoX2FsbF9jYWNoZXMocmVxdWVzdCk7Cj4gKwkJZWxzZQo+ICsJCQlyZXQgPSBpbnRlbF9y aW5nX2ZsdXNoX2FsbF9jYWNoZXMocmVxdWVzdCk7Cj4gKwkJLyogTm90IGFsbG93ZWQgdG8gZmFp bCEgKi8KPiArCQlXQVJOKHJldCwgIipfcmluZ19mbHVzaF9hbGxfY2FjaGVzIGZhaWxlZDogJWQh XG4iLCByZXQpOwo+ICsJfQo+ICsKPiArCXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3RfYWRkKHJlcXVl c3QpOwo+ICsKPiArCXJlcXVlc3QtPmhlYWQgPSByZXF1ZXN0X3N0YXJ0Owo+ICsKPiArCS8qIFdo aWxzdCB0aGlzIHJlcXVlc3QgZXhpc3RzLCBiYXRjaF9vYmogd2lsbCBiZSBvbiB0aGUKPiArCSAq IGFjdGl2ZV9saXN0LCBhbmQgc28gd2lsbCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlLiBPbmx5 IHdoZW4gdGhpcwo+ICsJICogcmVxdWVzdCBpcyByZXRpcmVkIHdpbGwgdGhlIHRoZSBiYXRjaF9v YmogYmUgbW92ZWQgb250byB0aGUKPiArCSAqIGluYWN0aXZlX2xpc3QgYW5kIGxvc2UgaXRzIGFj dGl2ZSByZWZlcmVuY2UuIEhlbmNlIHdlIGRvIG5vdCBuZWVkCj4gKwkgKiB0byBleHBsaWNpdGx5 IGhvbGQgYW5vdGhlciByZWZlcmVuY2UgaGVyZS4KPiArCSAqLwo+ICsJcmVxdWVzdC0+YmF0Y2hf b2JqID0gb2JqOwo+ICsKPiArCS8qIFNlYWwgdGhlIHJlcXVlc3QgYW5kIG1hcmsgaXQgYXMgcGVu ZGluZyBleGVjdXRpb24uIE5vdGUgdGhhdAo+ICsJICogd2UgbWF5IGluc3BlY3QgdGhpcyBzdGF0 ZSwgd2l0aG91dCBob2xkaW5nIGFueSBsb2NrcywgZHVyaW5nCj4gKwkgKiBoYW5nY2hlY2suIEhl bmNlIHdlIGFwcGx5IHRoZSBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdAo+ICsJICog c2VlIGEgbW9yZSByZWNlbnQgdmFsdWUgaW4gdGhlIGh3cyB0aGFuIHdlIGFyZSB0cmFja2luZy4K PiArCSAqLwo+ICsJcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzID0gamlmZmllczsKPiArCXJlcXVl c3QtPnByZXZpb3VzX3NlcW5vID0gZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubzsKPiArCXNt cF9zdG9yZV9tYihlbmdpbmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vLCByZXF1ZXN0LT5zZXFubyk7 Cj4gKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmZW5naW5lLT5yZXF1ZXN0X2xpc3Qp Owo+ICsKPiArCS8qIFJlY29yZCB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSByZXF1 ZXN0IHNvIHRoYXQKPiArCSAqIHNob3VsZCB3ZSBkZXRlY3QgdGhlIHVwZGF0ZWQgc2Vxbm8gcGFy dC13YXkgdGhyb3VnaCB0aGUKPiArCSAqIEdQVSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LCB3ZSBu ZXZlciBvdmVyLWVzdGltYXRlIHRoZQo+ICsJICogcG9zaXRpb24gb2YgdGhlIGhlYWQuCj4gKwkg Ki8KPiArCXJlcXVlc3QtPnBvc3RmaXggPSBpbnRlbF9yaW5nX2dldF90YWlsKHJpbmdidWYpOwo+ ICsKPiArCWlmIChpOTE1LmVuYWJsZV9leGVjbGlzdHMpIHsKPiArCQlyZXQgPSBlbmdpbmUtPmVt aXRfcmVxdWVzdChyZXF1ZXN0KTsKPiArCX0gZWxzZSB7Cj4gKwkJcmV0ID0gZW5naW5lLT5hZGRf cmVxdWVzdChyZXF1ZXN0KTsKPiArCj4gKwkJcmVxdWVzdC0+dGFpbCA9IGludGVsX3JpbmdfZ2V0 X3RhaWwocmluZ2J1Zik7Cj4gKwl9Cj4gKwkvKiBOb3QgYWxsb3dlZCB0byBmYWlsISAqLwo+ICsJ V0FSTihyZXQsICJlbWl0fGFkZF9yZXF1ZXN0IGZhaWxlZDogJWQhXG4iLCByZXQpOwo+ICsJLyog U2FuaXR5IGNoZWNrIHRoYXQgdGhlIHJlc2VydmVkIHNpemUgd2FzIGxhcmdlIGVub3VnaC4gKi8K PiArCXJldCA9IGludGVsX3JpbmdfZ2V0X3RhaWwocmluZ2J1ZikgLSByZXF1ZXN0X3N0YXJ0Owo+ ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0ICs9IHJpbmdidWYtPnNpemU7Cj4gKwlXQVJOX09OQ0Uo cmV0ID4gcmVzZXJ2ZWRfdGFpbCwKPiArCQkgICJOb3QgZW5vdWdoIHNwYWNlIHJlc2VydmVkICgl ZCBieXRlcykgIgo+ICsJCSAgImZvciBhZGRpbmcgdGhlIHJlcXVlc3QgKCVkIGJ5dGVzKVxuIiwK PiArCQkgIHJlc2VydmVkX3RhaWwsIHJldCk7Cj4gKwo+ICsJaTkxNV9nZW1fbWFya19idXN5KGVu Z2luZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvY2FsX2Nsb2NrX3VzKHVu c2lnbmVkIGludCAqY3B1KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHQ7Cj4gKwo+ICsJLyogQ2hl YXBseSBhbmQgYXBwcm94aW1hdGVseSBjb252ZXJ0IGZyb20gbmFub3NlY29uZHMgdG8gbWljcm9z ZWNvbmRzLgo+ICsJICogVGhlIHJlc3VsdCBhbmQgc3Vic2VxdWVudCBjYWxjdWxhdGlvbnMgYXJl IGFsc28gZGVmaW5lZCBpbiB0aGUgc2FtZQo+ICsJICogYXBwcm94aW1hdGUgbWljcm9zZWNvbmRz IHVuaXRzLiBUaGUgcHJpbmNpcGFsIHNvdXJjZSBvZiB0aW1pbmcKPiArCSAqIGVycm9yIGhlcmUg aXMgZnJvbSB0aGUgc2ltcGxlIHRydW5jYXRpb24uCj4gKwkgKgo+ICsJICogTm90ZSB0aGF0IGxv Y2FsX2Nsb2NrKCkgaXMgb25seSBkZWZpbmVkIHdydCB0byB0aGUgY3VycmVudCBDUFU7Cj4gKwkg KiB0aGUgY29tcGFyaXNvbnMgYXJlIG5vIGxvbmdlciB2YWxpZCBpZiB3ZSBzd2l0Y2ggQ1BVcy4g SW5zdGVhZCBvZgo+ICsJICogYmxvY2tpbmcgcHJlZW1wdGlvbiBmb3IgdGhlIGVudGlyZSBidXN5 d2FpdCwgd2UgY2FuIGRldGVjdCB0aGUgQ1BVCj4gKwkgKiBzd2l0Y2ggYW5kIHVzZSB0aGF0IGFz IGluZGljYXRvciBvZiBzeXN0ZW0gbG9hZCBhbmQgYSByZWFzb24gdG8KPiArCSAqIHN0b3AgYnVz eXdhaXRpbmcsIHNlZSBidXN5d2FpdF9zdG9wKCkuCj4gKwkgKi8KPiArCSpjcHUgPSBnZXRfY3B1 KCk7Cj4gKwl0ID0gbG9jYWxfY2xvY2soKSA+PiAxMDsKPiArCXB1dF9jcHUoKTsKPiArCj4gKwly ZXR1cm4gdDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1bnNpZ25lZCBs b25nIHRpbWVvdXQsIHVuc2lnbmVkIGludCBjcHUpCj4gK3sKPiArCXVuc2lnbmVkIGludCB0aGlz X2NwdTsKPiArCj4gKwlpZiAodGltZV9hZnRlcihsb2NhbF9jbG9ja191cygmdGhpc19jcHUpLCB0 aW1lb3V0KSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gdGhpc19jcHUgIT0gY3B1 Owo+ICt9Cj4gKwo+ICtib29sIF9faTkxNV9zcGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGRybV9p OTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4gKwkJCSBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGlt ZW91dF91cykKPiArewo+ICsJdW5zaWduZWQgaW50IGNwdTsKPiArCj4gKwkvKiBXaGVuIHdhaXRp bmcgZm9yIGhpZ2ggZnJlcXVlbmN5IHJlcXVlc3RzLCBlLmcuIGR1cmluZyBzeW5jaHJvbm91cwo+ ICsJICogcmVuZGVyaW5nIHNwbGl0IGJldHdlZW4gdGhlIENQVSBhbmQgR1BVLCB0aGUgZmluaXRl IGFtb3VudCBvZiB0aW1lCj4gKwkgKiByZXF1aXJlZCB0byBzZXQgdXAgdGhlIGlycSBhbmQgd2Fp dCB1cG9uIGl0IGxpbWl0cyB0aGUgcmVzcG9uc2UKPiArCSAqIHJhdGUuIEJ5IGJ1c3l3YWl0aW5n IG9uIHRoZSByZXF1ZXN0IGNvbXBsZXRpb24gZm9yIGEgc2hvcnQgd2hpbGUgd2UKPiArCSAqIGNh biBzZXJ2aWNlIHRoZSBoaWdoIGZyZXF1ZW5jeSB3YWl0cyBhcyBxdWljayBhcyBwb3NzaWJsZS4g SG93ZXZlciwKPiArCSAqIGlmIGl0IGlzIGEgc2xvdyByZXF1ZXN0LCB3ZSB3YW50IHRvIHNsZWVw IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCj4gKwkgKiBUaGUgdHJhZGVvZmYgYmV0d2VlbiB3YWl0 aW5nIGFuZCBzbGVlcGluZyBpcyByb3VnaGx5IHRoZSB0aW1lIGl0Cj4gKwkgKiB0YWtlcyB0byBz bGVlcCBvbiBhIHJlcXVlc3QsIG9uIHRoZSBvcmRlciBvZiBhIG1pY3Jvc2Vjb25kLgo+ICsJICov Cj4gKwo+ICsJdGltZW91dF91cyArPSBsb2NhbF9jbG9ja191cygmY3B1KTsKPiArCWRvIHsKPiAr CQlpZiAoaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxKSkKPiArCQkJcmV0dXJuIHRydWU7 Cj4gKwo+ICsJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpCj4gKwkJ CWJyZWFrOwo+ICsKPiArCQlpZiAoYnVzeXdhaXRfc3RvcCh0aW1lb3V0X3VzLCBjcHUpKQo+ICsJ CQlicmVhazsKPiArCj4gKwkJY3B1X3JlbGF4X2xvd2xhdGVuY3koKTsKPiArCX0gd2hpbGUgKCFu ZWVkX3Jlc2NoZWQoKSk7Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogX19pOTE1X3dhaXRfcmVxdWVzdCAtIHdhaXQgdW50aWwgZXhlY3V0aW9uIG9mIHJlcXVlc3Qg aGFzIGZpbmlzaGVkCj4gKyAqIEByZXE6IGR1aCEKPiArICogQGludGVycnVwdGlibGU6IGRvIGFu IGludGVycnVwdGlibGUgd2FpdCAobm9ybWFsbHkgeWVzKQo+ICsgKiBAdGltZW91dDogaW4gLSBo b3cgbG9uZyB0byB3YWl0IChOVUxMIGZvcmV2ZXIpOyBvdXQgLSBob3cgbXVjaCB0aW1lIHJlbWFp bmluZwo+ICsgKiBAcnBzOiBjbGllbnQgdG8gY2hhcmdlIGZvciBSUFMgYm9vc3RpbmcKPiArICoK PiArICogTm90ZTogSXQgaXMgb2YgdXRtb3N0IGltcG9ydGFuY2UgdGhhdCB0aGUgcGFzc2VkIGlu IHNlcW5vIGFuZCByZXNldF9jb3VudGVyCj4gKyAqIHZhbHVlcyBoYXZlIGJlZW4gcmVhZCBieSB0 aGUgY2FsbGVyIGluIGFuIHNtcCBzYWZlIG1hbm5lci4gV2hlcmUgcmVhZC1zaWRlCj4gKyAqIGxv Y2tzIGFyZSBpbnZvbHZlZCwgaXQgaXMgc3VmZmljaWVudCB0byByZWFkIHRoZSByZXNldF9jb3Vu dGVyIGJlZm9yZQo+ICsgKiB1bmxvY2tpbmcgdGhlIGxvY2sgdGhhdCBwcm90ZWN0cyB0aGUgc2Vx bm8uIEZvciBsb2NrbGVzcyB0cmlja3MsIHRoZQo+ICsgKiByZXNldF9jb3VudGVyIF9tdXN0XyBi ZSByZWFkIGJlZm9yZSwgYW5kIGFuIGFwcHJvcHJpYXRlIHNtcF9ybWIgbXVzdCBiZQo+ICsgKiBp bnNlcnRlZC4KPiArICoKPiArICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBmb3VuZCB3 aXRoaW4gdGhlIGFsbG90ZWQgdGltZS4gRWxzZSByZXR1cm5zIHRoZQo+ICsgKiBlcnJubyB3aXRo IHJlbWFpbmluZyB0aW1lIGZpbGxlZCBpbiB0aW1lb3V0IGFyZ3VtZW50Lgo+ICsgKi8KPiAraW50 IF9faTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4g KwkJCWJvb2wgaW50ZXJydXB0aWJsZSwKPiArCQkJczY0ICp0aW1lb3V0LAo+ICsJCQlzdHJ1Y3Qg aW50ZWxfcnBzX2NsaWVudCAqcnBzKQo+ICt7Cj4gKwlpbnQgc3RhdGUgPSBpbnRlcnJ1cHRpYmxl ID8gVEFTS19JTlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEU7Cj4gKwlERUZJTkVf V0FJVChyZXNldCk7Cj4gKwlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0Owo+ICsJdW5zaWduZWQgbG9u ZyB0aW1lb3V0X3JlbWFpbjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW1pZ2h0X3NsZWVwKCk7 Cj4gKwo+ICsJaWYgKGxpc3RfZW1wdHkoJnJlcS0+bGlzdCkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSkpCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJdGltZW91dF9yZW1haW4gPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKPiArCWlmICh0aW1l b3V0KSB7Cj4gKwkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJCWlmICgqdGltZW91dCA9PSAwKQo+ICsJCQlyZXR1cm4gLUVUSU1FOwo+ICsK PiArCQkvKiBSZWNvcmQgY3VycmVudCB0aW1lIGluIGNhc2UgaW50ZXJydXB0ZWQsIG9yIHdlZGdl ZCAqLwo+ICsJCXRpbWVvdXRfcmVtYWluID0gbnNlY3NfdG9famlmZmllc190aW1lb3V0KCp0aW1l b3V0KTsKPiArCQkqdGltZW91dCArPSBrdGltZV9nZXRfcmF3X25zKCk7Cj4gKwl9Cj4gKwo+ICsJ dHJhY2VfaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luKHJlcSk7Cj4gKwo+ICsJLyogVGhpcyBj bGllbnQgaXMgYWJvdXQgdG8gc3RhbGwgd2FpdGluZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBjYXNl cwo+ICsJICogdGhpcyBpcyB1bmRlc2lyYWJsZSBhbmQgbGltaXRzIHRoZSB0aHJvdWdocHV0IG9m IHRoZSBzeXN0ZW0sIGFzCj4gKwkgKiBtYW55IGNsaWVudHMgY2Fubm90IGNvbnRpbnVlIHByb2Nl c3NpbmcgdXNlciBpbnB1dC9vdXRwdXQgd2hpbHN0Cj4gKwkgKiBibG9ja2VkLiBSUFMgYXV0b3R1 bmluZyBtYXkgdGFrZSB0ZW5zIG9mIG1pbGxpc2Vjb25kcyB0byByZXNwb25kCj4gKwkgKiB0byB0 aGUgR1BVIGxvYWQgYW5kIHRodXMgaW5jdXJzIGFkZGl0aW9uYWwgbGF0ZW5jeSBmb3IgdGhlIGNs aWVudC4KPiArCSAqIFdlIGNhbiBjaXJjdW12ZW50IHRoYXQgYnkgcHJvbW90aW5nIHRoZSBHUFUg ZnJlcXVlbmN5IHRvIG1heGltdW0KPiArCSAqIGJlZm9yZSB3ZSB3YWl0LiBUaGlzIG1ha2VzIHRo ZSBHUFUgdGhyb3R0bGUgdXAgbXVjaCBtb3JlIHF1aWNrbHkKPiArCSAqIChnb29kIGZvciBiZW5j aG1hcmtzIGFuZCB1c2VyIGV4cGVyaWVuY2UsIGUuZy4gd2luZG93IGFuaW1hdGlvbnMpLAo+ICsJ ICogYnV0IGF0IGEgY29zdCBvZiBzcGVuZGluZyBtb3JlIHBvd2VyIHByb2Nlc3NpbmcgdGhlIHdv cmtsb2FkCj4gKwkgKiAoYmFkIGZvciBiYXR0ZXJ5KS4gTm90IGFsbCBjbGllbnRzIGV2ZW4gd2Fu dCB0aGVpciByZXN1bHRzCj4gKwkgKiBpbW1lZGlhdGVseSBhbmQgZm9yIHRoZW0gd2Ugc2hvdWxk IGp1c3QgbGV0IHRoZSBHUFUgc2VsZWN0IGl0cyBvd24KPiArCSAqIGZyZXF1ZW5jeSB0byBtYXhp bWlzZSBlZmZpY2llbmN5LiBUbyBwcmV2ZW50IGEgc2luZ2xlIGNsaWVudCBmcm9tCj4gKwkgKiBm b3JjaW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2ggZm9yIHRoZSB3aG9sZSBzeXN0ZW0sIHdlIG9ubHkg YWxsb3cKPiArCSAqIGVhY2ggY2xpZW50IHRvIHdhaXRib29zdCBvbmNlIGluIGEgYnVzeSBwZXJp b2QuCj4gKwkgKi8KPiArCWlmIChJTlRFTF9HRU4ocmVxLT5pOTE1KSA+PSA2KQo+ICsJCWdlbjZf cnBzX2Jvb3N0KHJlcS0+aTkxNSwgcnBzLCByZXEtPmVtaXR0ZWRfamlmZmllcyk7Cj4gKwo+ICsJ LyogT3B0aW1pc3RpYyBzcGluIGZvciB0aGUgbmV4dCB+amlmZmllIGJlZm9yZSB0b3VjaGluZyBJ UlFzICovCj4gKwlpZiAoaTkxNV9zcGluX3JlcXVlc3QocmVxLCBzdGF0ZSwgNSkpCj4gKwkJZ290 byBjb21wbGV0ZTsKPiArCj4gKwlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Cj4gKwlhZGRfd2Fp dF9xdWV1ZSgmcmVxLT5pOTE1LT5ncHVfZXJyb3Iud2FpdF9xdWV1ZSwgJnJlc2V0KTsKPiArCj4g KwlpbnRlbF93YWl0X2luaXQoJndhaXQsIHJlcS0+c2Vxbm8pOwo+ICsJaWYgKGludGVsX2VuZ2lu ZV9hZGRfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQpKQo+ICsJCS8qIEluIG9yZGVyIHRvIGNoZWNr IHRoYXQgd2UgaGF2ZW4ndCBtaXNzZWQgdGhlIGludGVycnVwdAo+ICsJCSAqIGFzIHdlIGVuYWJs ZWQgaXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8gYQo+ICsJCSAqIGNvaGVyZW50 IGNoZWNrIG9uIHRoZSBzZXFubyBiZWZvcmUgd2Ugc2xlZXAuCj4gKwkJICovCj4gKwkJZ290byB3 YWtldXA7Cj4gKwo+ICsJZm9yICg7Oykgewo+ICsJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShz dGF0ZSwgY3VycmVudCkpIHsKPiArCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwo+ICsJCQlicmVhazsK PiArCQl9Cj4gKwo+ICsJCXRpbWVvdXRfcmVtYWluID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1l b3V0X3JlbWFpbik7Cj4gKwkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKPiArCQkJcmV0ID0g LUVUSU1FOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChpbnRlbF93YWl0X2NvbXBs ZXRlKCZ3YWl0KSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXNldF9jdXJyZW50X3N0YXRlKHN0YXRl KTsKPiArCj4gK3dha2V1cDoKPiArCQkvKiBDYXJlZnVsbHkgY2hlY2sgaWYgdGhlIHJlcXVlc3Qg aXMgY29tcGxldGUsIGdpdmluZyB0aW1lCj4gKwkJICogZm9yIHRoZSBzZXFubyB0byBiZSB2aXNp YmxlIGZvbGxvd2luZyB0aGUgaW50ZXJydXB0Lgo+ICsJCSAqIFdlIGFsc28gaGF2ZSB0byBjaGVj ayBpbiBjYXNlIHdlIGFyZSBraWNrZWQgYnkgdGhlIEdQVQo+ICsJCSAqIHJlc2V0IGluIG9yZGVy IHRvIGRyb3AgdGhlIHN0cnVjdF9tdXRleC4KPiArCQkgKi8KPiArCQlpZiAoX19pOTE1X3JlcXVl c3RfaXJxX2NvbXBsZXRlKHJlcSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQkvKiBPbmx5IHNwaW4g aWYgd2Uga25vdyB0aGUgR1BVIGlzIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0ICovCj4gKwkJaWYg KGk5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUsIDIpKQo+ICsJCQlicmVhazsKPiArCX0KPiAr CXJlbW92ZV93YWl0X3F1ZXVlKCZyZXEtPmk5MTUtPmdwdV9lcnJvci53YWl0X3F1ZXVlLCAmcmVz ZXQpOwo+ICsKPiArCWludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChyZXEtPmVuZ2luZSwgJndhaXQp Owo+ICsJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwo+ICtjb21wbGV0ZToKPiAr CXRyYWNlX2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQocmVxKTsKPiArCj4gKwlpZiAodGltZW91 dCkgewo+ICsJCSp0aW1lb3V0IC09IGt0aW1lX2dldF9yYXdfbnMoKTsKPiArCQlpZiAoKnRpbWVv dXQgPCAwKQo+ICsJCQkqdGltZW91dCA9IDA7Cj4gKwo+ICsJCS8qCj4gKwkJICogQXBwYXJlbnRs eSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMgYQo+ICsJ CSAqIGJpdCBvZiBtaXNtYXRjaCBpbiB0aGUgamlmZmllczwtPm5zZWNzPC0+a3RpbWUgbG9vcC4g U28gcGF0Y2gKPiArCQkgKiB0aGluZ3MgdXAgdG8gbWFrZSB0aGUgdGVzdCBoYXBweS4gV2UgYWxs b3cgdXAgdG8gMSBqaWZmeS4KPiArCQkgKgo+ICsJCSAqIFRoaXMgaXMgYSByZWdyc3Npb24gZnJv bSB0aGUgdGltZXNwZWMtPmt0aW1lIGNvbnZlcnNpb24uCj4gKwkJICovCj4gKwkJaWYgKHJldCA9 PSAtRVRJTUUgJiYgKnRpbWVvdXQgPCBqaWZmaWVzX3RvX3VzZWNzKDEpKjEwMDApCj4gKwkJCSp0 aW1lb3V0ID0gMDsKPiArCX0KPiArCj4gKwlpZiAocnBzICYmIHJlcS0+c2Vxbm8gPT0gcmVxLT5l bmdpbmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vKSB7Cj4gKwkJLyogVGhlIEdQVSBpcyBub3cgaWRs ZSBhbmQgdGhpcyBjbGllbnQgaGFzIHN0YWxsZWQuCj4gKwkJICogU2luY2Ugbm8gb3RoZXIgY2xp ZW50IGhhcyBzdWJtaXR0ZWQgYSByZXF1ZXN0IGluIHRoZQo+ICsJCSAqIG1lYW50aW1lLCBhc3N1 bWUgdGhhdCB0aGlzIGNsaWVudCBpcyB0aGUgb25seSBvbmUKPiArCQkgKiBzdXBwbHlpbmcgd29y ayB0byB0aGUgR1BVIGJ1dCBpcyB1bmFibGUgdG8ga2VlcCB0aGF0Cj4gKwkJICogd29yayBzdXBw bGllZCBiZWNhdXNlIGl0IGlzIHdhaXRpbmcuIFNpbmNlIHRoZSBHUFUgaXMKPiArCQkgKiB0aGVu IG5ldmVyIGtlcHQgZnVsbHkgYnVzeSwgUlBTIGF1dG9jbG9ja2luZyB3aWxsCj4gKwkJICoga2Vl cCB0aGUgY2xvY2tzIHJlbGF0aXZlbHkgbG93LCBjYXVzaW5nIGZ1cnRoZXIgZGVsYXlzLgo+ICsJ CSAqIENvbXBlbnNhdGUgYnkgZ2l2aW5nIHRoZSBzeW5jaHJvbm91cyBjbGllbnQgY3JlZGl0IGZv cgo+ICsJCSAqIGEgd2FpdGJvb3N0IG5leHQgdGltZS4KPiArCQkgKi8KPiArCQlzcGluX2xvY2so JnJlcS0+aTkxNS0+cnBzLmNsaWVudF9sb2NrKTsKPiArCQlsaXN0X2RlbF9pbml0KCZycHMtPmxp bmspOwo+ICsJCXNwaW5fdW5sb2NrKCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFdhaXRzIGZvciBhIHJl cXVlc3QgdG8gYmUgc2lnbmFsZWQsIGFuZCBjbGVhbnMgdXAgdGhlCj4gKyAqIHJlcXVlc3QgYW5k IG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50Lgo+ICsgKi8KPiAraW50 IGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICt7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCUdFTV9CVUdfT04oIXJlcSk7Cj4gKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZyZXEtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCXJldCA9IF9faTkx NV93YWl0X3JlcXVlc3QocmVxLCByZXEtPmk5MTUtPm1tLmludGVycnVwdGlibGUsIE5VTEwsIE5V TEwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIElmIHRoZSBHUFUg aHVuZywgd2Ugd2FudCB0byBrZWVwIHRoZSByZXF1ZXN0cyB0byBmaW5kIHRoZSBndWlsdHkuICov Cj4gKwlpZiAoIWk5MTVfcmVzZXRfaW5fcHJvZ3Jlc3MoJnJlcS0+aTkxNS0+Z3B1X2Vycm9yKSkK PiArCQlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHJlcSk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKHN0cnVjdCBrcmVmICpyZXFf cmVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSA9Cj4gKwkJY29u dGFpbmVyX29mKHJlcV9yZWYsIHR5cGVvZigqcmVxKSwgcmVmKTsKPiArCWttZW1fY2FjaGVfZnJl ZShyZXEtPmk5MTUtPnJlcXVlc3RzLCByZXEpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi5lYTcwMGJlZmNjMjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCj4gQEAgLTAsMCArMSwyMzggQEAKPiArLyoKPiArICog Q29weXJpZ2h0IMKpIDIwMDgtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4g KyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4g KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhF IFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgSTkxNV9HRU1fUkVRVUVTVF9I Cj4gKyNkZWZpbmUgSTkxNV9HRU1fUkVRVUVTVF9ICj4gKwo+ICsvKioKPiArICogUmVxdWVzdCBx dWV1ZSBzdHJ1Y3R1cmUuCj4gKyAqCj4gKyAqIFRoZSByZXF1ZXN0IHF1ZXVlIGFsbG93cyB1cyB0 byBub3RlIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBoYXZlIGJlZW4gZW1pdHRlZAo+ICsgKiBhbmQg bWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBhY3RpdmUgYnVmZmVycyB0byBiZSByZXRpcmVkLgo+ICsg Kgo+ICsgKiBCeSBrZWVwaW5nIHRoaXMgbGlzdCwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBkbyBx dWVzdGlvbmFibGUgc2VxdWVuY2UKPiArICogbnVtYmVyIGNvbXBhcmlzb25zIG9uIGJ1ZmZlciBs YXN0X3JlYWR8d3JpdGVfc2Vxbm8uIEl0IGFsc28gYWxsb3dzIGFuCj4gKyAqIGVtaXNzaW9uIHRp bWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0IGZvciB0cmFja2luZyBob3cgZmFy IGFoZWFkCj4gKyAqIG9mIHRoZSBHUFUgdGhlIHN1Ym1pc3Npb24gaXMuCj4gKyAqCj4gKyAqIFRo ZSByZXF1ZXN0cyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQsIHNvIHVwb24gY3JlYXRpb24gdGhleSBz aG91bGQgaGF2ZSBhbgo+ICsgKiBpbml0aWFsIHJlZmVyZW5jZSB0YWtlbiB1c2luZyBrcmVmX2lu aXQKPiArICovCj4gK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCB7Cj4gKwlzdHJ1Y3Qga3Jl ZiByZWY7Cj4gKwo+ICsJLyoqIE9uIFdoaWNoIHJpbmcgdGhpcyByZXF1ZXN0IHdhcyBnZW5lcmF0 ZWQgKi8KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+ICsKPiArCS8qKgo+ICsJ ICogQ29udGV4dCBhbmQgcmluZyBidWZmZXIgcmVsYXRlZCB0byB0aGlzIHJlcXVlc3QKPiArCSAq IENvbnRleHRzIGFyZSByZWZjb3VudGVkLCBzbyB3aGVuIHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lh dGVkIHdpdGggYQo+ICsJICogY29udGV4dCwgd2UgbXVzdCBpbmNyZW1lbnQgdGhlIGNvbnRleHQn cyByZWZjb3VudCwgdG8gZ3VhcmFudGVlIHRoYXQKPiArCSAqIGl0IHBlcnNpc3RzIHdoaWxlIGFu eSByZXF1ZXN0IGlzIGxpbmtlZCB0byBpdC4gUmVxdWVzdHMgdGhlbXNlbHZlcwo+ICsJICogYXJl IGFsc28gcmVmY291bnRlZCwgc28gdGhlIHJlcXVlc3Qgd2lsbCBvbmx5IGJlIGZyZWVkIHdoZW4g dGhlIGxhc3QKPiArCSAqIHJlZmVyZW5jZSB0byBpdCBpcyBkaXNtaXNzZWQsIGFuZCB0aGUgY29k ZSBpbgo+ICsJICogaTkxNV9nZW1fcmVxdWVzdF9mcmVlKCkgd2lsbCB0aGVuIGRlY3JlbWVudCB0 aGUgcmVmY291bnQgb24gdGhlCj4gKwkgKiBjb250ZXh0Lgo+ICsJICovCj4gKwlzdHJ1Y3QgaTkx NV9nZW1fY29udGV4dCAqY3R4Owo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ ICsJc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWY7Cj4gKwlzdHJ1Y3QgaW50ZWxfc2ln bmFsX25vZGUgc2lnbmFsaW5nOwo+ICsKPiArCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29j aWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdCwKPiArCSAqIHdoZW4gdGhlIEhXUyBicmVh ZGNydW1iIGlzIGVxdWFsIHRvIHRoaXMgdGhlIEdQVSBpcyBwcm9jZXNzaW5nCj4gKwkgKiB0aGlz IHJlcXVlc3QuCj4gKwkgKi8KPiArCXUzMiBwcmV2aW91c19zZXFubzsKPiArCj4gKwkvKiogR0VN IHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0LAo+ICsJICogd2hl biB0aGUgSFdTIGJyZWFkY3J1bWIgaXMgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoaXMgdGhlIEdQ VQo+ICsJICogaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0Lgo+ICsJICovCj4g Kwl1MzIgc2Vxbm87Cj4gKwo+ICsJLyoqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRo ZSBzdGFydCBvZiB0aGUgcmVxdWVzdCAqLwo+ICsJdTMyIGhlYWQ7Cj4gKwo+ICsJLyoqCj4gKwkg KiBQb3NpdGlvbiBpbiB0aGUgcmluZ2J1ZmZlciBvZiB0aGUgc3RhcnQgb2YgdGhlIHBvc3RmaXgu Cj4gKwkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBhdmFpbGFi bGUgcmluZ2J1ZmZlcgo+ICsJICogc3BhY2Ugd2l0aG91dCBvdmVyd3JpdGluZyB0aGUgcG9zdGZp eC4KPiArCSAqLwo+ICsJdTMyIHBvc3RmaXg7Cj4gKwo+ICsJLyoqIFBvc2l0aW9uIGluIHRoZSBy aW5nYnVmZmVyIG9mIHRoZSBlbmQgb2YgdGhlIHdob2xlIHJlcXVlc3QgKi8KPiArCXUzMiB0YWls Owo+ICsKPiArCS8qKiBQcmVhbGxvY2F0ZSBzcGFjZSBpbiB0aGUgcmluZ2J1ZmZlciBmb3IgdGhl IGVtaXR0aW5nIHRoZSByZXF1ZXN0ICovCj4gKwl1MzIgcmVzZXJ2ZWRfc3BhY2U7Cj4gKwo+ICsJ LyoqCj4gKwkgKiBDb250ZXh0IHJlbGF0ZWQgdG8gdGhlIHByZXZpb3VzIHJlcXVlc3QuCj4gKwkg KiBBcyB0aGUgY29udGV4dHMgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZSB1bnRpbCB0aGUg c3dpdGNoIGlzCj4gKwkgKiBjb21wbGV0ZWQgdG8gYSBuZXcgY29udGV4dCwgdGhlIGhhcmR3YXJl IG1heSBzdGlsbCBiZSB3cml0aW5nCj4gKwkgKiB0byB0aGUgY29udGV4dCBvYmplY3QgYWZ0ZXIg dGhlIGJyZWFkY3J1bWIgaXMgdmlzaWJsZS4gV2UgbXVzdAo+ICsJICogbm90IHVucGluL3VuYmlu ZC9wcnVuZSB0aGF0IG9iamVjdCB3aGlsc3Qgc3RpbGwgYWN0aXZlIGFuZCBzbwo+ICsJICogd2Ug a2VlcCB0aGUgcHJldmlvdXMgY29udGV4dCBwaW5uZWQgdW50aWwgdGhlIGZvbGxvd2luZyAodGhp cykKPiArCSAqIHJlcXVlc3QgaXMgcmV0aXJlZC4KPiArCSAqLwo+ICsJc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKnByZXZpb3VzX2NvbnRleHQ7Cj4gKwo+ICsJLyoqIEJhdGNoIGJ1ZmZlciByZWxh dGVkIHRvIHRoaXMgcmVxdWVzdCBpZiBhbnkgKHVzZWQgZm9yCj4gKwkgKiBlcnJvciBzdGF0ZSBk dW1wIG9ubHkpLgo+ICsJICovCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hf b2JqOwo+ICsKPiArCS8qKiBUaW1lIGF0IHdoaWNoIHRoaXMgcmVxdWVzdCB3YXMgZW1pdHRlZCwg aW4gamlmZmllcy4gKi8KPiArCXVuc2lnbmVkIGxvbmcgZW1pdHRlZF9qaWZmaWVzOwo+ICsKPiAr CS8qKiBnbG9iYWwgbGlzdCBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCj4gKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7Cj4gKwo+ICsJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9w cml2Owo+ICsJLyoqIGZpbGVfcHJpdiBsaXN0IGVudHJ5IGZvciB0aGlzIHJlcXVlc3QgKi8KPiAr CXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7Cj4gKwo+ICsJLyoqIHByb2Nlc3MgaWRlbnRp ZmllciBzdWJtaXR0aW5nIHRoaXMgcmVxdWVzdCAqLwo+ICsJc3RydWN0IHBpZCAqcGlkOwo+ICsK PiArCS8qKgo+ICsJICogVGhlIEVMU1Agb25seSBhY2NlcHRzIHR3byBlbGVtZW50cyBhdCBhIHRp bWUsIHNvIHdlIHF1ZXVlCj4gKwkgKiBjb250ZXh0L3RhaWwgcGFpcnMgb24gYSBnaXZlbiBxdWV1 ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQo+ICsJICogaGFyZHdhcmUgaXMgYXZh aWxhYmxlLiBUaGUgcXVldWUgc2VydmVzIGEgZG91YmxlIHB1cnBvc2U6IHdlIGFsc28gdXNlCj4g KwkgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHRoZSB1cCB0byAyIGNvbnRleHRzIGN1cnJlbnRseSBp biB0aGUgaGFyZHdhcmUKPiArCSAqICh1c3VhbGx5IG9uZSBpbiBleGVjdXRpb24gYW5kIHRoZSBv dGhlciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCj4gKwkgKiBvbmx5IHJlbW92ZSBlbGVtZW50 cyBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHRoZSBoYXJkd2FyZQo+ICsJICogaW5m b3JtcyB1cyB0aGF0IGFuIGVsZW1lbnQgaGFzIGJlZW4gY29tcGxldGVkLgo+ICsJICoKPiArCSAq IEFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgYXJlIG1lZGlhdGVkIGJ5IGEgc3BpbmxvY2sKPiAr CSAqIChyaW5nLT5leGVjbGlzdF9sb2NrKS4KPiArCSAqLwo+ICsKPiArCS8qKiBFeGVjbGlzdCBs aW5rIGluIHRoZSBzdWJtaXNzaW9uIHF1ZXVlLiovCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGV4ZWNs aXN0X2xpbms7Cj4gKwo+ICsJLyoqIEV4ZWNsaXN0cyBuby4gb2YgdGltZXMgdGhpcyByZXF1ZXN0 IGhhcyBiZWVuIHNlbnQgdG8gdGhlIEVMU1AgKi8KPiArCWludCBlbHNwX3N1Ym1pdHRlZDsKPiAr Cj4gKwkvKiogRXhlY2xpc3RzIGNvbnRleHQgaGFyZHdhcmUgaWQuICovCj4gKwl1bnNpZ25lZCBp bnQgY3R4X2h3X2lkOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICog X19tdXN0X2NoZWNrCj4gK2k5MTVfZ2VtX3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lLAo+ICsJCSAgICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KTsK PiArdm9pZCBpOTE1X2dlbV9yZXF1ZXN0X2ZyZWUoc3RydWN0IGtyZWYgKnJlcV9yZWYpOwo+ICtp bnQgaTkxNV9nZW1fcmVxdWVzdF9hZGRfdG9fY2xpZW50KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLAo+ICsJCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiArdm9pZCBpOTE1 X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVx KTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyCj4gK2k5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5v KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ICt7Cj4gKwlyZXR1cm4gcmVxID8g cmVxLT5zZXFubyA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqCj4gK2k5MTVfZ2VtX3JlcXVlc3RfZ2V0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJcmV0dXJuIHJlcSA/IHJlcS0+ZW5naW5lIDogTlVM TDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg Kgo+ICtpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcSkKPiArewo+ICsJaWYgKHJlcSkKPiArCQlrcmVmX2dldCgmcmVxLT5yZWYpOwo+ICsJ cmV0dXJuIHJlcTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkCj4gK2k5MTVfZ2VtX3Jl cXVlc3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sK PiArCWtyZWZfcHV0KCZyZXEtPnJlZiwgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKTsKPiArfQo+ICsK PiArc3RhdGljIGlubGluZSB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqKnBkc3QsCj4gKwkJCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpzcmMpCj4gK3sKPiArCWlmIChzcmMpCj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZWZl cmVuY2Uoc3JjKTsKPiArCj4gKwlpZiAoKnBkc3QpCj4gKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJl ZmVyZW5jZSgqcGRzdCk7Cj4gKwo+ICsJKnBkc3QgPSBzcmM7Cj4gK30KPiArCj4gK3ZvaWQgX19p OTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICsJCQlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+ICsJCQlib29sIGZsdXNoX2Nh Y2hlcyk7Cj4gKyNkZWZpbmUgaTkxNV9hZGRfcmVxdWVzdChyZXEpIFwKPiArCV9faTkxNV9hZGRf cmVxdWVzdChyZXEsIE5VTEwsIHRydWUpCj4gKyNkZWZpbmUgaTkxNV9hZGRfcmVxdWVzdF9ub19m bHVzaChyZXEpIFwKPiArCV9faTkxNV9hZGRfcmVxdWVzdChyZXEsIE5VTEwsIGZhbHNlKQo+ICsK PiArc3RydWN0IGludGVsX3Jwc19jbGllbnQ7Cj4gKwo+ICtpbnQgX19pOTE1X3dhaXRfcmVxdWVz dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKPiArCQkJYm9vbCBpbnRlcnJ1cHRp YmxlLAo+ICsJCQlzNjQgKnRpbWVvdXQsCj4gKwkJCXN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpy cHMpOwo+ICtpbnQgX19tdXN0X2NoZWNrIGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxKTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGludGVsX2VuZ2lu ZV9nZXRfc2Vxbm8oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gKy8qKgo+ ICsgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCj4gKyAqLwo+ICtz dGF0aWMgaW5saW5lIGJvb2wgaTkxNV9zZXFub19wYXNzZWQodTMyIHNlcTEsIHUzMiBzZXEyKQo+ ICt7Cj4gKwlyZXR1cm4gKHMzMikoc2VxMSAtIHNlcTIpID49IDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgYm9vbAo+ICtpOTE1X2dlbV9yZXF1ZXN0X3N0YXJ0ZWQoY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCXJldHVybiBpOTE1X3NlcW5vX3Bhc3Nl ZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHJlcS0+ZW5naW5lKSwKPiArCQkJCSByZXEtPnByZXZp b3VzX3NlcW5vKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sCj4gK2k5MTVfZ2VtX3Jl cXVlc3RfY29tcGxldGVkKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxKQo+ ICt7Cj4gKwlyZXR1cm4gaTkxNV9zZXFub19wYXNzZWQoaW50ZWxfZW5naW5lX2dldF9zZXFubyhy ZXEtPmVuZ2luZSksCj4gKwkJCQkgcmVxLT5zZXFubyk7Cj4gK30KPiArCj4gK2Jvb2wgX19pOTE1 X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Qs Cj4gKwkJCSBpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dF91cyk7Cj4gK3N0YXRpYyBp bmxpbmUgYm9vbCBpOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3QsCj4gKwkJCQkgICAgIGludCBzdGF0ZSwgdW5zaWduZWQgbG9uZyB0aW1l b3V0X3VzKQo+ICt7Cj4gKwlyZXR1cm4gKGk5MTVfZ2VtX3JlcXVlc3Rfc3RhcnRlZChyZXF1ZXN0 KSAmJgo+ICsJCV9faTkxNV9zcGluX3JlcXVlc3QocmVxdWVzdCwgc3RhdGUsIHRpbWVvdXRfdXMp KTsKPiArfQo+ICsKPiArI2VuZGlmIC8qIEk5MTVfR0VNX1JFUVVFU1RfSCAqLwo+IC0tIAo+IDIu OC4xCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==