From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFC 01/29] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Fri, 29 Jan 2016 15:57:09 +0200 Message-ID: <1454075829.11299.48.camel@linux.intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> <1453976511-27322-2-git-send-email-zhi.a.wang@intel.com> 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 74A1A6E999 for ; Fri, 29 Jan 2016 05:55:56 -0800 (PST) In-Reply-To: <1453976511-27322-2-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org SGksCgpUTDtEUiBPdmVyYWxsLCB3ZSBoYXZlIHNhbWUgcHJvYmxlbSBhcyB3aXRoIHRoZSBzY2hl ZHVsZXIgc2VyaWVzLCB0aGVyZQppcyB0b28gbXVjaCBwbGFjZWhvbGRlciBzdHVmZiBmb3IgZWFz eSByZXZpZXcuIEp1c3Qgc3F1YXNoIGVub3VnaCBjb2RlCmludG8gb25lIGNvbW1pdCBzbyBpdCBh Y3R1YWxseSBkb2VzIHNvbWV0aGluZyBsb2dpY2FsIHRoYXQgY2FuIGJlCnJldmlld2VkIGFuZCB0 aGVuIGV4dGVuZCBpdCBsYXRlci4gVGhlbiBpdCBjYW4gYmUgcmV2aWV3ZWQgYW5kIHB1c2hlZC4K SnVzdCBzcGxpdHRpbmcgdGhlIGNvZGUgZG93biB0byBhY2hpZXZlIHNtYWxsZXIgcGF0Y2hlcyBp cyBub3QgdGhlCnJpZ2h0IHRoaW5nIHRvIGRvLgoKQ29tbWVudHMgb24gdGhlIG92ZXJhbGwgY29k ZTogWW91IG5lZWQgdG8gZG9jdW1lbnQgYWxsIGhlYWRlciBmaWxlCmZ1bmN0aW9ucyAoaW4gdGhl IHNvdXJjZSBmaWxlcyksIGFuZCBpdCBpcyBnb29kIHRvIGRvY3VtZW50IHRoZSBzdGF0aWMKZnVu Y3Rpb25zIHdpdGhpbiBhIGZpbGUgdG9vLCB0byBtYWtlIGZ1dHVyZSBtYWludGVuYW5jZSBlYXNp ZXIuCgpJdCBpcyBub3QgYWJvdXQgc3BsaXR0aW5nIHRoZSBjb2RlIGRvd24gdG8gc21hbGwgY2h1 bmtzLCBidXQgc3BsaXR0aW5nCml0IGRvd24gdG8gc21hbGwgKmxvZ2ljYWwqIGNodW5rcy4gSXQg ZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNvbW1pdApkb3plbnMgb2YgZW1wdHkgYm9kaWVkIGZ1bmN0 aW9ucyBmb3IgcmV2aWV3LCBhbmQgdGhlbiBsYXRlciBhZGQgdGhlaXIKY29kZS4KCklmIHlvdSBh ZGQgZnVuY3Rpb25zLCBvbmx5IGFkZCB0aGVtIGF0IGEgcGF0Y2ggdGhhdCB0YWtlcyB0aGVtIGlu dG8gdXNlCnRvbywgdW5sZXNzIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZ2VuZXJhbCBwdXJwb3NlIHNo YXJlZCBjb2RlLiBBbmQgYWxzbwpyZW1lbWJlciB0byBhZGQgdGhlIGZ1bmN0aW9uIGJvZHkgYW5k IGRvY3VtZW50YXRpb24gaGVhZGVyLiBJZiB5b3UKc2ltcGx5IGFkZCBhICJyZXR1cm4gMDsiIG9y IHNpbWlsYXIgZnVuY3Rpb24gYm9keSwgZG8gYWRkIGEgY29tbWVudCB0bwp3aHkgdGhlIGZ1bmN0 aW9uIGRvZXMgbm90IGV4aXN0IGFuZCB3aGVuIGl0IHdpbGwuCgpUaGVuLCB0aGVyZSBpcyBhIHRy ZW5kIG9mIGhhdmluZyBhIGJvb2xlYW4gcmV0dXJuIHZhbHVlcyBpbiB0aGUgY29kZS4KV2hlbiBw b3NzaWJsZSwgaXQgc2hvdWxkIHJhdGhlciBiZSBpbnQgYW5kIHRoZSBjYXVzZSBmb3IgZmFpbHVy ZSBzaG91bGQKYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSBsYXN0IGxldmVsIGFsbCB0aGUgd2F5IHRv IHVwICgtRU5PTUVOIGV0Yy4pLgpUaGlzIHdheSBkZWJ1Z2dpbmcgYmVjb21lcyBlYXNpZXIgYW5k IGlmIG5ldyBlcnJvciBjb25kaXRpb25zIGFwcGVhciwKdGhlcmUgaXMgbGVzcyBvZiBhIG1haW50 ZW5hbmNlIGJ1cmRlbiB0byBhZGQgdGhlIHByb3BhZ2F0aW9uIGxhdGVyLgoKRmluYWxseSwgbWFr ZSBzdXJlIHRvIGxvb2sgYXQgdGhlIGV4aXN0aW5nIGRyaXZlciBwYXJ0cyBhbmQKCWh0dHBzOi8v d3d3Lmtlcm5lbC5vcmcvZG9jL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKZm9yIHByb3BlciBj b2Rpbmcgc3R5bGUuIFRoZXJlIGFyZSBsb3RzIG9mIHdoaXRlc3BhY2UgZml4ZXMgbmVlZGVkIGlu CnRoaXMgc2VyaWVzLCBsaWtlIGFycmF5IGluaXRpYWxpemF0aW9ucy4KCkkgaG9wZSB0byBzZWUg dGhpcyBmaXJzdCBwYXRjaCByZXJvbGxlZCBzbyB0aGF0IHlvdSBzcXVhc2ggc29tZSBvZiB0aGUK bGF0ZXIgY29tbWl0cyBpbnRvIGl0IHNvIHRoYXQgYWxsIGZ1bmN0aW9ucyBoYXZlIGEgYm9keSBh bmQgeW91IGFkZApkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIHNvIEkgY2FuIGJvdGgg c2VlIHdoYXQgaXQgc2hvdWxkIGRvIGFuZAp3aGF0IGl0IGFjdHVhbGx5IGRvZXMuIE9ubHkgcmVy b2xsIHRoZSBmaXJzdCBwYXRjaCwgdG8ga2VlcCB0aGUKaXRlcmF0aXZlIHN0ZXAgc21hbGxlci4g TGV0cyBvbmx5IHRoZW4gY29udGludWUgd2l0aCB0aGUgcmVzdCBvZiB0aGUKc2VyaWVzIG9uY2Ug d2UndmUgcmVhY2hlZCBhIGNvbnNlbnN1cyBvbiB0aGUgZm9ybWF0dGluZyBhbmQgc3R5bGUKYmFz aWNzLgoKU2VlIG1vcmUgY29tbWVudHMgYmVsb3cuCgpPbiB0bywgMjAxNi0wMS0yOCBhdCAxODoy MSArMDgwMCwgWmhpIFdhbmcgd3JvdGU6Cj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSB2ZXJ5 IGJhc2ljIGZyYW1ld29yayBvZiBHVlQtZyBkZXZpY2UgbW9kZWwsCj4gaW5jbHVkZXMgYmFzaWMg cHJvdG90eXBlcywgZGVmaW5pdGlvbnMsIGluaXRpYWxpemF0aW9uLgo+IC0tLQo+IMKgYXJjaC94 ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5owqDCoHzCoMKgwqAzICsKPiDCoGRyaXZlcnMv Z3B1L2RybS9pOTE1L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTYgKysKPiDCoGRy aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKwo+ IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlwqDCoMKgwqDCoHzCoMKgwqA1ICsK PiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5owqDCoMKgwqDCoMKgfMKgwqA3MiAr KysrKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5jIHzCoMKgMzQg KysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2ZiX2RlY29kZXIuaCB8IDExMCArKysr KysrKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmPCoMKgwqDCoMKgwqDCoMKg fCAzNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5owqDCoMKgwqDCoMKgwqDCoHwgMTMwICsrKysrKysrKysrKwo+IMKg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5owqDCoHzCoMKgMzAgKysrCj4gwqBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmjCoMKgwqDCoMKgwqDCoMKgfMKgwqA5NyArKysr KysrKysKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuY8KgwqDCoMKgwqB8wqDC oDI5ICsrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5owqDCoMKgwqDCoHzC oMKgMzQgKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5owqDCoMKgwqDCoMKg wqDCoHzCoMKgMzQgKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuY8KgwqDC oMKgwqDCoMKgfMKgwqAxOSArKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKg wqDCoMKgwqDCoMKgfMKgwqDCoDYgKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92Z3B1 LmjCoMKgwqDCoMKgwqB8wqDCoMKgMyArCj4gwqBpbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmjC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDEgKwo+IMKgMTggZmlsZXMgY2hhbmdlZCwgOTkx IGluc2VydGlvbnMoKykKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvTWFrZWZpbGUKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZGVidWcuaAo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9mYl9kZWNvZGVyLmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZmJfZGVjb2Rlci5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2d2dC5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d2dC5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2h5cGVyY2FsbC5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L21wdC5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L3BhcmFtcy5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L3BhcmFtcy5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L3JlZy5oCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9p bnRlcmZhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAo+IGluZGV4 IDYyY2EwM2UuLjZmZjQ5ODYgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVu L2ludGVyZmFjZS5oCj4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5o Cj4gQEAgLTczLDYgKzczLDkgQEAKPiDCoCNlbmRpZgo+IMKgCj4gwqAjaWZuZGVmIF9fQVNTRU1C TFlfXwo+ICsKPiArI2luY2x1ZGUgCj4gKwoKSSBkb24ndCBmb2xsb3cgd2h5IHRoaXMgd291bGQg bmVlZCB0byBiZSBhZGRlZCBpZiB0aGUgZmlsZSBpcyBub3QKbW9kaWZpZWQgb3RoZXJ3aXNlLiBF YWNoIGhlYWRlciBzaG91bGQgb25seSBpbmNsdWRlIHdoYXQgdGhleSB1c2UuCgpJZiB0aGlzIGlz IGFuIGV4aXN0aW5nIGJ1ZyAodGhhdCB4ZW4vaW50ZXJmYWNlLmggY2FuIG5vdCBiZSBpbmNsdWRl ZAp3aXRob3V0IGluY2x1ZGluZyBsaW51eC90eXBlcy5oKSwgaXQgc2hvdWxkIGJlIHNwbGl0IHRv IGEgc2VwYXJhdGUKcGF0Y2ggYW5kIHNlbnQgdG8gWGVuIHRlYW0uIFNhbWUgZm9ywqBpbmNsdWRl L3hlbi9pbnRlcmZhY2UveGVuLmguCgo+IMKgLyogRXhwbGljaXRseSBzaXplIGludGVnZXJzIHRo YXQgcmVwcmVzZW50IHBmbnMgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UKPiDCoCAqIHdpdGggWGVu IHNvIHRoYXQgb24gQVJNIHdlIGNhbiBoYXZlIG9uZSBBQkkgdGhhdCB3b3JrcyBmb3IgMzIgYW5k IDY0Cj4gwqAgKiBiaXQgZ3Vlc3RzLiAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+IGluZGV4IDA1MWVh YjMuLjg5ZmY3MjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKPiBAQCAtNDcsMyArNDcsMTkgQEAg Y29uZmlnIERSTV9JOTE1X1BSRUxJTUlOQVJZX0hXX1NVUFBPUlQKPiDCoAnCoMKgb3B0aW9uIGNo YW5nZXMgdGhlIGRlZmF1bHQgZm9yIHRoYXQgbW9kdWxlIG9wdGlvbi4KPiDCoAo+IMKgCcKgwqBJ ZiBpbiBkb3VidCwgc2F5ICJOIi4KPiArCj4gK2NvbmZpZyBJOTE1X0dWVAo+ICvCoMKgwqDCoMKg wqDCoMKgdHJpc3RhdGUgIkdWVC1nIGhvc3QgZHJpdmVyIgo+ICvCoMKgwqDCoMKgwqDCoMKgZGVw ZW5kcyBvbiBEUk1fSTkxNQo+ICvCoMKgwqDCoMKgwqDCoMKgc2VsZWN0IElSUV9XT1JLCj4gK8Kg wqDCoMKgwqDCoMKgwqBkZWZhdWx0IHkKCkRlZmF1bHRpbmcgdG8gIm4iIHdvdWxkIG1ha2Ugc2Vu c2UgaW5pdGlhbGx5LgoKPiArwqDCoMKgwqDCoMKgwqDCoGhlbHAKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqBFbmFibGluZyBHVlQtZyBtZWRpYXRlZCBncmFwaGljcyBwYXNzdGhyb3VnaCB0ZWNobmlx dWUgZm9yIEludGVsIGk5MTUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBiYXNlZCBpbnRlZ3JhdGVk IGdyYXBoaWNzIGNhcmQuIFdpdGggR1ZULWcsIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBvbmUKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlZ3JhdGVkIGk5MTUgZGV2aWNlIHNoYXJlZCBieSBtdWx0 aXBsZSBWTXMuIFBlcmZvcm1hbmNlIGNyaXRpY2FsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgb3B0 ZXJhdGlvbnMgc3VjaCBhcyBhcHBlcnR1cmUgYWNjZXNzZXMgYW5kIHJpbmcgYnVmZmVyIG9wZXJh dGlvbnMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmUgcGFzcy10aHJvdWdoZWQgdG8gVk0sIHdp dGggYSBtaW5pbWFsIHNldCBvZiBjb25mbGljdGluZyByZXNvdXJjZXMKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqAoZS5nLiBkaXNwbGF5IHNldHRpbmdzKSBtZWRpYXRlZCBieSB2R1QgZHJpdmVyLiBU aGUgYmVuZWZpdCBvZiB2R1QKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBpcyBvbiBib3RoIHRoZSBw ZXJmb3JtYW5jZSwgZ2l2ZW4gdGhhdCBlYWNoIFZNIGNvdWxkIGRpcmVjdGx5IG9wZXJhdGUKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqBpdHMgYXBlcnR1cmUgc3BhY2UgYW5kIHN1Ym1pdCBjb21tYW5k cyBsaWtlIHJ1bm5pbmcgb24gbmF0aXZlLCBhbmQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqB0aGUg ZmVhdHVyZSBjb21wbGV0ZW5lc3MsIGdpdmVuIHRoYXQgYSB0cnVlIEdFTiBoYXJkd2FyZSBpcyBl eHBvc2VkLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggMDg1MWRlMDcuLmQ0ZGY0MTAgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC05MSw2ICs5MSw4IEBAIGk5MTUteSArPSBkdm9f Y2g3MDE3Lm8gXAo+IMKgCcKgwqBpbnRlbF9zZHZvLm8gXAo+IMKgCcKgwqBpbnRlbF90di5vCj4g wqAKPiArb2JqLSQoQ09ORklHX0k5MTVfR1ZUKcKgwqArPSBndnQvCj4gKwo+IMKgIyB2aXJ0dWFs IGdwdSBjb2RlCj4gwqBpOTE1LXkgKz0gaTkxNV92Z3B1Lm8KPiDCoAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjY5MzVi NzgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2Vm aWxlCj4gQEAgLTAsMCArMSw1IEBACj4gK0dWVF9TT1VSQ0UgOj0gZ3Z0Lm8gcGFyYW1zLm8gZmJf ZGVjb2Rlci5vCj4gKwo+ICtjY2ZsYWdzLXkJCQkrPSAtSSQoc3JjKSAtSSQoc3JjKS8uLiAtV2Fs bCAtV2Vycm9yIC1Xbm8tdW51c2VkLWZ1bmN0aW9uCj4gK2k5MTVfZ3Z0LXkJCQk6PSAkKEdWVF9T T1VSQ0UpCj4gK29iai0kKENPTkZJR19JOTE1X0dWVCkJCSs9IGk5MTVfZ3Z0Lm8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZGVidWcuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u MThlMTQ2Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv ZGVidWcuaAo+IEBAIC0wLDAgKzEsNzIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEt MjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF Cj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19HVlRfREVCVUdfSF9fCj4g KyNkZWZpbmUgX19HVlRfREVCVUdfSF9fCj4gKwo+ICsjZGVmaW5lIEFTU0VSVCh4KcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ICvCoMKgwqDC oMKgwqDCoMKgZG8ge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoISh4KSkge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpbnRrKCJBc3NlcnQgYXQg JXMgbGluZSAlZFxuIizCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oF9fRklMRV9fLCBfX0xJTkVfXyk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gK8KgwqDCoMKgwqDCoMKg wqB9IHdoaWxlICgwKTsKPiArCj4gKyNkZWZpbmUgQVNTRVJUX05VTSh4LCB5KcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiArwqDCoMKgwqDCoMKgwqDCoGRvIHvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCEoeCkpIHvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW50aygiQXNzZXJ0IGF0ICVzIGxpbmUgJWQgcGFyYSAw eCVsbHhcbiIswqDCoMKgwqBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX0ZJTEVfXywgX19MSU5FX18sICh1NjQpeSk7 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oFwKPiArwqDCoMKgwqDCoMKgwqDCoH0gd2hpbGUgKDApOwo+ICsKClRoZXJlIGFscmVhZHkgaXMg V0FSTl9PTiAoYW5kIGk5MTVfZHJ2LmggbW9kaWZpZXMgaXQgYSBsaXR0bGUpLiBEbyBub3QKaW50 cm9kdWNlIGN1c3RvbSBmdW5jdGlvbnMgbGlrZSB0aGlzLCBpZiB0aGUgZXhpc3Rpbmcgb25lcyBu ZWVkCmltcHJvdmVtZW50LCBpbXByb3ZlIHRoZW0uCgo+ICsjZGVmaW5lIGd2dF9pbmZvKGZtdCwg YXJncy4uLikgXAo+ICsJcHJpbnRrKEtFUk5fSU5GTyJbR1ZULWddICJmbXQiXG4iLCAjI2FyZ3Mp Cj4gKwo+ICsjZGVmaW5lIGd2dF9lcnIoZm10LCBhcmdzLi4uKSBcCj4gKwlwcmludGsoS0VSTl9F UlIiJXMoKSAtICVkOiAiZm10IlxuIiwgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpCj4gKwo+ ICsjZGVmaW5lIGd2dF93YXJuKGZtdCwgYXJncy4uLikgXAo+ICsJcHJpbnRrKEtFUk5fV0FSTklO RyIlcygpIC0gJWQ6ICJmbXQiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sICMjYXJncykKPiArCj4g KyNkZWZpbmUgZ3Z0X2RiZyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7IFwKPiArCQlpZiAoZ3Z0 LmRlYnVnICYgbGV2ZWwpIFwKPiArCQkJcHJpbnRrKEtFUk5fREVCVUciJXMoKSAtICVkOiAiZm10 IlxuIiwgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpOyBcCj4gKwl9d2hpbGUoMCkKPiArCj4g K2VudW0gewo+ICsJR1ZUX0RCR19DT1JFID0gKDEgPDwgMCksCj4gKwlHVlRfREJHX01NID0gKDEg PDwgMSksCj4gKwlHVlRfREJHX0lSUSA9ICgxIDw8IDIpLAo+ICt9Owo+ICsKPiArI2RlZmluZSBn dnRfZGJnX2NvcmUoZm10LCBhcmdzLi4uKSBcCj4gKwlndnRfZGJnKEdWVF9EQkdfQ09SRSwgZm10 LCAjI2FyZ3MpCj4gKwo+ICsjZGVmaW5lIGd2dF9kYmdfbW0oZm10LCBhcmdzLi4uKSBcCj4gKwln dnRfZGJnKEdWVF9EQkdfTU0sIGZtdCwgIyNhcmdzKQo+ICsKPiArI2RlZmluZSBndnRfZGJnX2ly cShmbXQsIGFyZ3MuLi4pIFwKPiArCWd2dF9kYmcoR1ZUX0RCR19JUlEsIGZtdCwgIyNhcmdzKQo+ ICsKPiArI2VuZGlmCgpUaGlzIHNob3VsZCBiZSBpbnRlZ3JhdGVkIGJldHRlciB0byBEUk0gZGVi dWdnaW5nIG9wdGlvbnMsIGN1c3RvbQpkZWJ1Z2dpbmcgY29kZSBvbmx5IGZvciBpOTE1IHdhcyBy ZWplY3RlZCBhIHdoaWxlIGFnby4KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9mYl9kZWNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hMjE5ODE5Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9mYl9kZWNvZGVyLmMKPiBA QCAtMCwwICsxLDM0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZU V0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiZ3Z0LmgiCj4gKwo+ICtpbnQgZ3Z0X2RlY29k ZV9mYl9mb3JtYXQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYsIGludCB2bWlkLCBzdHJ1Y3QgZ3Z0 X2ZiX2Zvcm1hdCAqZmIpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgZ3Z0X2Zi X25vdGlmaWVyX2NhbGxfY2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCj4gK3sK PiArCXJldHVybiAwOwo+ICt9CgpLZXJuZWxkb2MgbWlzc2luZyBmb3IgdGhlc2UgZnVuY3Rpb25z LiBJdCBpcyBhbGwgdGhlIHNhbWUgdG8gc3F1YXNoCmxhdGVyIHBhdGNoZXMgdG8gaW50cm9kdWNl IHRoZSBjb2RlIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbHJlYWR5LApyZXZpZXdpbmcgdXRpbGl0eSBm dW5jdGlvbnMgd2l0aCBubyBrZXJuZWxkb2MgYW5kIG5vIGJvZHkgbWFrZXMgaXQKc29tZXdoYXQg ZGlmZmljdWx0IHRvIHNlZSB0aGUgYmlnIHBpY3R1cmUuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZmJfZGVjb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L2ZiX2RlY29kZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMmMy OWVkNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZmJf ZGVjb2Rlci5oCj4gQEAgLTAsMCArMSwxMTAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIw MTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4g VEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dWVF9GQl9ERUNPREVS X0hfCj4gKyNkZWZpbmUgX0dWVF9GQl9ERUNPREVSX0hfCj4gKwo+ICt0eXBlZGVmIGVudW0gewo+ ICsJRkJfTU9ERV9TRVRfU1RBUlQgPSAxLAo+ICsJRkJfTU9ERV9TRVRfRU5ELAo+ICsJRkJfRElT UExBWV9GTElQLAo+ICt9Z3Z0X2ZiX2V2ZW50X3Q7Cj4gKwo+ICt0eXBlZGVmIGVudW0gewo+ICsJ RERJX1BPUlRfTk9ORQk9IDAsCj4gKwlERElfUE9SVF9CCT0gMSwKPiArCURESV9QT1JUX0MJPSAy LAo+ICsJRERJX1BPUlRfRAk9IDMsCj4gKwlERElfUE9SVF9FCT0gNAo+ICt9IGRkaV9wb3J0X3Q7 Cj4gKwo+ICtzdHJ1Y3QgcGd0X2RldmljZTsKPiArCj4gK3N0cnVjdCBndnRfZmJfbm90aWZ5X21z ZyB7Cj4gKwl1bnNpZ25lZCB2bV9pZDsKPiArCXVuc2lnbmVkIHBpcGVfaWQ7IC8qIGlkIHN0YXJ0 aW5nIGZyb20gMCAqLwo+ICsJdW5zaWduZWQgcGxhbmVfaWQ7IC8qIHByaW1hcnksIGN1cnNvciwg b3Igc3ByaXRlICovCj4gK307Cj4gKwo+ICsvKiBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFuZCBn YW1tYSBjb3JyZWN0aW9uIGFyZSBub3QgaW5jbHVkZWQgKi8KPiArc3RydWN0IGd2dF9wcmltYXJ5 X3BsYW5lX2Zvcm1hdCB7Cj4gKwl1OAllbmFibGVkOwkvKiBwbGFuZSBpcyBlbmFibGVkICovCj4g Kwl1OAl0aWxlZDsJCS8qIFgtdGlsZWQgKi8KPiArCXU4CWJwcDsJCS8qIGJpdHMgcGVyIHBpeGVs ICovCj4gKwl1MzIJaHdfZm9ybWF0OwkvKiBmb3JtYXQgZmllbGQgaW4gdGhlIFBSSV9DVEwgcmVn aXN0ZXIgKi8KPiArCXUzMglkcm1fZm9ybWF0OwkvKiBmb3JtYXQgaW4gRFJNIGRlZmluaXRpb24g Ki8KPiArCXUzMgliYXNlOwkJLyogZnJhbWVidWZmZXIgYmFzZSBpbiBncmFwaGljcyBtZW1vcnkg Ki8KPiArCXUzMgl4X29mZnNldDsJLyogaW4gcGl4ZWxzICovCj4gKwl1MzIJeV9vZmZzZXQ7CS8q IGluIGxpbmVzICovCj4gKwl1MzIJd2lkdGg7CQkvKiBpbiBwaXhlbHMgKi8KPiArCXUzMgloZWln aHQ7CQkvKiBpbiBsaW5lcyAqLwo+ICsJdTMyCXN0cmlkZTsJCS8qIGluIGJ5dGVzICovCj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZ3Z0X3Nwcml0ZV9wbGFuZV9mb3JtYXQgewo+ICsJdTgJZW5hYmxlZDsJ LyogcGxhbmUgaXMgZW5hYmxlZCAqLwo+ICsJdTgJdGlsZWQ7CQkvKiBYLXRpbGVkICovCj4gKwl1 OAlicHA7CQkvKiBiaXRzIHBlciBwaXhlbCAqLwo+ICsJdTMyCWh3X2Zvcm1hdDsJLyogZm9ybWF0 IGZpZWxkIGluIHRoZSBTUFJfQ1RMIHJlZ2lzdGVyICovCj4gKwl1MzIJZHJtX2Zvcm1hdDsJLyog Zm9ybWF0IGluIERSTSBkZWZpbml0aW9uICovCj4gKwl1MzIJYmFzZTsJCS8qIHNwcml0ZSBiYXNl IGluIGdyYXBoaWNzIG1lbW9yeSAqLwo+ICsJdTMyCXhfcG9zOwkJLyogaW4gcGl4ZWxzICovCj4g Kwl1MzIJeV9wb3M7CQkvKiBpbiBsaW5lcyAqLwo+ICsJdTMyCXhfb2Zmc2V0OwkvKiBpbiBwaXhl bHMgKi8KPiArCXUzMgl5X29mZnNldDsJLyogaW4gbGluZXMgKi8KPiArCXUzMgl3aWR0aDsJCS8q IGluIHBpeGVscyAqLwo+ICsJdTMyCWhlaWdodDsJCS8qIGluIGxpbmVzICovCj4gK307Cj4gKwo+ ICtzdHJ1Y3QgZ3Z0X2N1cnNvcl9wbGFuZV9mb3JtYXQgewo+ICsJdTgJZW5hYmxlZDsKPiArCXU4 CW1vZGU7CQkvKiBjdXJzb3IgbW9kZSBzZWxlY3QgKi8KPiArCXU4CWJwcDsJCS8qIGJpdHMgcGVy IHBpeGVsICovCj4gKwl1MzIJZHJtX2Zvcm1hdDsJLyogZm9ybWF0IGluIERSTSBkZWZpbml0aW9u ICovCj4gKwl1MzIJYmFzZTsJCS8qIGN1cnNvciBiYXNlIGluIGdyYXBoaWNzIG1lbW9yeSAqLwo+ ICsJdTMyCXhfcG9zOwkJLyogaW4gcGl4ZWxzICovCj4gKwl1MzIJeV9wb3M7CQkvKiBpbiBsaW5l cyAqLwo+ICsJdTgJeF9zaWduOwkJLyogWCBQb3NpdGlvbiBTaWduICovCj4gKwl1OAl5X3NpZ247 CQkvKiBZIFBvc2l0aW9uIFNpZ24gKi8KPiArCXUzMgl3aWR0aDsJCS8qIGluIHBpeGVscyAqLwo+ ICsJdTMyCWhlaWdodDsJCS8qIGluIGxpbmVzICovCj4gKwl1MzIJeF9ob3Q7CQkvKiBpbiBwaXhl bHMgKi8KPiArCXUzMgl5X2hvdDsJCS8qIGluIHBpeGVscyAqLwo+ICt9Owo+ICsKClRoZSBhYm92 ZSBzdHJ1Y3RzIGhhdmUgYSBsb3QgaW4gY29tbW9uLCB3b3VsZCBpdCBtYWtlIHNlbnNlIHRvIGhh dmUgdGhlCmNvbW1vbiBtZW1iZXJzICsgcGxhbmUgdHlwZSBhbmQgdGhlbiB1bmlvbiBmb3IgdGhl IHBsYW5lIHR5cGUgc3BlY2lmaWMKZGF0YS4gSSBzdXNwZWN0IGhhdmluZyBpdCBhbGwgc3BsaXQg dGhpcyB3YXkgd2lsbCBsZWFkIHRvIG1vcmUgdXRpbGl0eQpmdW5jdGlvbnMgc29tZXdoZXJlLgoK PiArc3RydWN0IGd2dF9waXBlX2Zvcm1hdCB7Cj4gKwlzdHJ1Y3QgZ3Z0X3ByaW1hcnlfcGxhbmVf Zm9ybWF0CXByaW1hcnk7Cj4gKwlzdHJ1Y3QgZ3Z0X3Nwcml0ZV9wbGFuZV9mb3JtYXQJc3ByaXRl Owo+ICsJc3RydWN0IGd2dF9jdXJzb3JfcGxhbmVfZm9ybWF0CWN1cnNvcjsKPiArCWRkaV9wb3J0 X3QgZGRpX3BvcnQ7wqDCoC8qIHRoZSBEREkgcG9ydCB0aGF0IHRoZSBwaXBlIGlzIGNvbm5lY3Rl ZCB0byAqLwo+ICt9Owo+ICsKPiArc3RydWN0IGd2dF9mYl9mb3JtYXR7Cj4gKwlzdHJ1Y3QgZ3Z0 X3BpcGVfZm9ybWF0CXBpcGVzW0k5MTVfTUFYX1BJUEVTXTsKPiArfTsKPiArCj4gK2V4dGVybiBp bnQgZ3Z0X2ZiX25vdGlmaWVyX2NhbGxfY2hhaW4odW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRh dGEpOwo+ICtleHRlcm4gaW50IGd2dF9kZWNvZGVfZmJfZm9ybWF0KHN0cnVjdCBwZ3RfZGV2aWNl ICpwZGV2LCBpbnQgdm1pZCwKPiArCQkJCXN0cnVjdCBndnRfZmJfZm9ybWF0ICpmYik7Cj4gKwo+ ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi4wNDFkMTBmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9ndnQuYwo+IEBAIC0wLDAgKzEsMzY2IEBACj4gKy8qCj4gKyAqIENvcHly aWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAKPiAr I2luY2x1ZGUgCj4gKwo+ICsjaW5jbHVkZSAiZ3Z0LmgiCj4gKwo+ICtzdHJ1Y3QgZ3Z0X2hvc3Qg Z3Z0X2hvc3Q7Cj4gKwo+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0geGVuZ3Rfa2RtOwo+ ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0ga3ZtZ3Rfa2RtOwo+ICsKPiArc3RhdGljIGNv bnN0IGNoYXIgKnN1cHBvcnRlZF9oeXBlcnZpc29yc1tdID0gewoKc2hvdWxkIGJlICJzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0Ii4KCj4gKwlbR1ZUX0hZUEVSVklTT1JfVFlQRV9YRU5dID0gIlhl biBIeXBlcnZpc29yIiwKPiArCVtHVlRfSFlQRVJWSVNPUl9UWVBFX0tWTV0gPSAiS1ZNIiwKPiAr fTsKPiArCj4gK3N0YXRpYyBib29sIGd2dF9pbml0X2hvc3Qodm9pZCkKPiArewo+ICsJc3RydWN0 IGd2dF9ob3N0ICpob3N0ID0gJmd2dF9ob3N0Owo+ICsKPiArCWlmICghZ3Z0LmVuYWJsZSkgewo+ ICsJCWd2dF9kYmdfY29yZSgiR1ZULWcgaGFzIGJlZW4gZGlzYWJsZWQgYnkga2VybmVsIHBhcmFt ZXRlciIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoaG9zdC0+aW5pdGlh bGl6ZWQpIHsKPiArCQlndnRfZXJyKCJHVlQtZyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVk ISIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoeGVuX2luaXRpYWxfZG9t YWluKCkpIHsKClNob3VsZG4ndCBYZW4gY29kZSBiZcKgQ09ORklHX1hFTl9ET00wIGFuZCBDT05G SUdfWEVOICNpZmRlZiBwcm90ZWN0ZWQ/Cgo+ICsJCS8qIFhlbiBEb20wICovCj4gKwkJaG9zdC0+ a2RtID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoc3ltYm9sX2dldCh4ZW5ndF9rZG0pLCAieGVu Z3QiKTsKPiArCQlob3N0LT5oeXBlcnZpc29yX3R5cGUgPSBHVlRfSFlQRVJWSVNPUl9UWVBFX1hF TjsKPiArCX0gZWxzZSBpZih4ZW5fZG9tYWluKCkpIHsKPiArCQkvKiBYZW4gRG9tVSAqLwo+ICsJ CXJldHVybiBmYWxzZTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogbm90IGluIFhlbi4gVHJ5IEtWTUdU ICovCj4gKwkJaG9zdC0+a2RtID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoc3ltYm9sX2dldChr dm1ndF9rZG0pLCAia3ZtIik7Cj4gKwkJaG9zdC0+aHlwZXJ2aXNvcl90eXBlID0gR1ZUX0hZUEVS VklTT1JfVFlQRV9LVk07Cj4gKwl9Cj4gKwoKV2h5IGRvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBv ZiBoeXBlcnZpc29yIHR5cGUsIGFyZSB0aGVyZSBwbGVudHkgb2YKaHlwZXJ2aXNvciBzcGVjaWZp YyBiZWhhdmlvdXIgZGlmZmVyZW5jZXM/IElmIGl0IGlzIGp1c3QgZm9yIHByaW50aW5nCnRoZSBi ZWxvdyBkZWJ1ZywgSSB0aGluayBpdCdzIGJldHRlciB0byBtb3ZlIHRoZSBkZWJ1ZyBpbnRvIGFi b3ZlIGNvZGUKdGhhdCBkZXRlY3RzIHRoZSBoeXBlcnZpc29yLCB3cmFwIHRoZW0gd2l0aCBhcHBy b3ByaWF0ZSBDT05GSUcgI2lmZGVmcy4KCj4gKwlpZiAoIWhvc3QtPmtkbSkKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwo+ICsJaWYgKCFoeXBlcnZpc29yX2RldGVjdF9ob3N0KCkpCj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsKPiArCWd2dF9pbmZvKCJSdW5uaW5nIHdpdGggaHlwZXJ2aXNvciAlcyBpbiBo b3N0IG1vZGUiLAo+ICsJCQlzdXBwb3J0ZWRfaHlwZXJ2aXNvcnNbaG9zdC0+aHlwZXJ2aXNvcl90 eXBlXSk7Cj4gKwo+ICsJaWRyX2luaXQoJmhvc3QtPmRldmljZV9pZHIpOwo+ICsJbXV0ZXhfaW5p dCgmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPiArCj4gKwlob3N0LT5pbml0aWFsaXplZCA9IHRy dWU7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaW5pdF9kZXZpY2Vf aW5mbyhzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGd2dF9kZXZpY2Vf aW5mbyAqaW5mbyA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKPiArCj4gKwlpZiAoIUlTX0JST0FEV0VM TChwZGV2LT5kZXZfcHJpdikpIHsKPiArCQlndnRfZXJyKCJVbnN1cHBvcnRlZCBHRU4gZGV2aWNl Iik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCWlmIChJU19CUk9BRFdFTEwocGRl di0+ZGV2X3ByaXYpKSB7Cj4gKwkJaW5mby0+bWF4X2d0dF9nbV9zeiA9ICgxVUwgPDwgMzIpOwo+ ICsJCS8qCj4gKwkJwqAqIFRoZSBsYXlvdXQgb2YgQkFSMCBpbiBCRFc6Cj4gKwkJwqAqIHw8IC0g TU1JTyAyTUIgLT58PC0gUmVzZXJ2ZWQgNk1CIC0+fDwtIE1BWCBHVFQgOE1CLT58Cj4gKwkJwqAq Cj4gKwkJwqAqIEdUVCBvZmZzZXQgaW4gQkFSMCBzdGFydHMgZnJvbSA4TUIgdG8gMTZNQiwgYW5k Cj4gKwkJwqAqIFdoYXRldmVyIEdUVCBzaXplIGlzIGNvbmZpZ3VyZWQgaW4gQklPUywKPiArCQnC oCogdGhlIHNpemUgb2YgQkFSMCBpcyBhbHdheXMgMTZNQi4gVGhlIGFjdHVhbCBjb25maWd1cmVk Cj4gKwkJwqAqIEdUVCBzaXplIGNhbiBiZSBmb3VuZCBpbiBHTUNIX0NUUkwuCj4gKwkJwqAqLwo+ ICsJCWluZm8tPmd0dF9zdGFydF9vZmZzZXQgPSAoMVVMIDw8IDIzKTsKPiArCQlpbmZvLT5tYXhf Z3R0X3NpemUgPSAoMVVMIDw8IDIzKTsKPiArCQlpbmZvLT5ndHRfZW50cnlfc2l6ZSA9IDg7Cj4g KwkJaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQgPSAzOwo+ICsJCWluZm8tPmdtYWRyX2J5dGVz X2luX2NtZCA9IDg7CgpXb3VsZCB0aGlzIGluZm9ybWF0aW9uIGJlIHVzZWZ1bCBpbiBhIGhlYWRl ciBhcyAjZGVmaW5lcyB0b28/Cgo+ICsJfQo+ICsKPiArCWd2dF9pbmZvKCJEZXZpY2UgaW5mbzoi KTsKPiArCXByaW50aygiwqDCoMKgwqDCoMKgwqDCoG1heF9ndHRfZ21fc3o6ICVsbHhcbiIsIGlu Zm8tPm1heF9ndHRfZ21fc3opOwo+ICsJcHJpbnRrKCLCoMKgwqDCoMKgwqDCoMKgbWF4X2d0dF9z aXplOiAleFxuIiwgaW5mby0+bWF4X2d0dF9zaXplKTsKPiArCXByaW50aygiwqDCoMKgwqDCoMKg wqDCoGd0dF9zaXplX2VudHJ5OiAleFxuIiwgaW5mby0+Z3R0X2VudHJ5X3NpemUpOwo+ICsJcHJp bnRrKCLCoMKgwqDCoMKgwqDCoMKgZ3R0X2VudHJ5X3NpemVfc2hpZnQ6ICV4XG4iLCBpbmZvLT5n dHRfZW50cnlfc2l6ZV9zaGlmdCk7Cj4gKwlwcmludGsoIsKgwqDCoMKgwqDCoMKgwqBndHRfc3Rh cnRfb2Zmc2V0OiAleFxuIiwgaW5mby0+Z3R0X3N0YXJ0X29mZnNldCk7Cj4gKwlwcmludGsoIsKg wqDCoMKgwqDCoMKgwqBndHRfZW5kX29mZnNldDogJXhcbiIsIGluZm8tPmd0dF9lbmRfb2Zmc2V0 KTsKPiArCgpKdXN0IHB1dCB0aGlzIHRvIGtpbmQgb2Ygc3R1ZmYgdG8gaTkxNV9kZWJ1Z2ZzLmMu Cgo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGluaXRfaW5pdGlhbF9j Zmdfc3BhY2Vfc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBw Y2lfZGV2ICpwY2lfZGV2ID0gcGRldi0+ZGV2X3ByaXYtPmRldi0+cGRldjsKPiArCWludCBpOwo+ ICsKPiArCWd2dF9kYmdfY29yZSgiaW5pdCBpbml0aWFsIGNmZyBzcGFjZSwgaWQgJWQiLCBwZGV2 LT5pZCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEdWVF9DRkdfU1BBQ0VfU1o7IGkgKz0gNCkK Cis9IHNpemVvZiguLi4pCgo+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LCBpLAo+ ICsJCQkJKHUzMiAqKSZwZGV2LT5pbml0aWFsX2NmZ19zcGFjZVtpXSk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IDM7IGkrKykgewoKTm8gbWFnaWMgbnVtYmVycyBtYWtlIGEgI2RlZmluZSBmb3Ig MyBhbmQgZ2l2ZSBpdCBhIGRlc2NyaXB0aXZlIG5hbWUuCgo+ICsJCXBkZXYtPmJhcl9zaXplW2ld ID0gcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCBpICogMik7Cj4gKwkJZ3Z0X2luZm8oImJhciAl ZCBzaXplOiAlbGx4IiwgaSwgcGRldi0+YmFyX3NpemVbaV0pOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjbGVhbl9pbml0aWFsX21taW9fc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCWlmIChwZGV2LT5ndHRtbWlvX3ZhKSB7Cj4gKwkJaW91bm1hcChwZGV2LT5n dHRtbWlvX3ZhKTsKPiArCQlwZGV2LT5ndHRtbWlvX3ZhID0gTlVMTDsKPiArCX0KPiArCj4gKwlp ZiAocGRldi0+Z21hZHJfdmEpIHsKPiArCQlpb3VubWFwKHBkZXYtPmdtYWRyX3ZhKTsKPiArCQlw ZGV2LT5nbWFkcl92YSA9IE5VTEw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGluaXRf aW5pdGlhbF9tbWlvX3N0YXRlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwl1NjQg YmFyMCwgYmFyMTsKPiArCj4gKwlndnRfZGJnX2NvcmUoImluaXQgaW5pdGlhbCBtbWlvIHN0YXRl LCBpZCAlZCIsIHBkZXYtPmlkKTsKPiArCj4gKwliYXIwID0gKih1NjQgKikmcGRldi0+aW5pdGlh bF9jZmdfc3BhY2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMF07Cj4gKwliYXIxID0gKih1NjQgKikm cGRldi0+aW5pdGlhbF9jZmdfc3BhY2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMV07Cj4gKwo+ICsJ cGRldi0+Z3R0bW1pb19iYXNlID0gYmFyMCAmIH4weGY7Cj4gKwlwZGV2LT5tbWlvX3NpemUgPSAy ICogMTAyNCAqIDEwMjQ7Cj4gKwlwZGV2LT5yZWdfbnVtID0gcGRldi0+bW1pb19zaXplIC8gNDsK PiArCXBkZXYtPmdtYWRyX2Jhc2UgPSBiYXIxICYgfjB4ZjsKPiArCgpNYW55IG1hZ2ljIG51bWJl cnMuCgo+ICsJcGRldi0+Z3R0bW1pb192YSA9IGlvcmVtYXAocGRldi0+Z3R0bW1pb19iYXNlLCBw ZGV2LT5iYXJfc2l6ZVswXSk7Cj4gKwlpZiAoIXBkZXYtPmd0dG1taW9fdmEpIHsKPiArCQlndnRf ZXJyKCJmYWlsIHRvIG1hcCBHVFRNTUlPIEJBUi4iKTsKClRoZXNlIHNob3VsZCBiZSBpZihXQVJO X09OKC4uLikpCgo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlwZGV2LT5nbWFkcl92 YSA9IGlvcmVtYXAocGRldi0+Z21hZHJfYmFzZSwgcGRldi0+YmFyX3NpemVbMl0pOwo+ICsJaWYg KCFwZGV2LT5nbWFkcl92YSkgewo+ICsJCWd2dF9lcnIoImZhaWwgdG8gbWFwIEdNQURSIEJBUi4i KTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlndnRfaW5mbygiYmFyMDogMHglbGx4LCBi YXIxOiAweCVsbHgiLCBiYXIwLCBiYXIxKTsKPiArCWd2dF9pbmZvKCJtbWlvIHNpemU6ICV4Iiwg cGRldi0+bW1pb19zaXplKTsKPiArCWd2dF9pbmZvKCJndHRtbWlvOiAweCVsbHgsIGdtYWRyOiAw eCVsbHgiLCBwZGV2LT5ndHRtbWlvX2Jhc2UsIHBkZXYtPmdtYWRyX2Jhc2UpOwo+ICsJZ3Z0X2lu Zm8oImd0dG1taW9fdmE6ICVwIiwgcGRldi0+Z3R0bW1pb192YSk7Cj4gKwlndnRfaW5mbygiZ21h ZHJfdmE6ICVwIiwgcGRldi0+Z21hZHJfdmEpOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICtlcnI6 Cj4gKwljbGVhbl9pbml0aWFsX21taW9fc3RhdGUocGRldik7Cj4gKwlyZXR1cm4gZmFsc2U7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZ3Z0X3NlcnZpY2VfdGhyZWFkKHZvaWQgKmRhdGEpCj4gK3sK PiArCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwZ3RfZGV2aWNlICopZGF0YTsK PiArCWludCByOwo+ICsKPiArCWd2dF9kYmdfY29yZSgic2VydmljZSB0aHJlYWQgc3RhcnQsIHBn dCAlZCIsIHBkZXYtPmlkKTsKPiArCj4gKwl3aGlsZSgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7 Cj4gKwkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwZGV2LT5zZXJ2aWNlX3RocmVhZF93 cSwKPiArCQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBwZGV2LT5zZXJ2aWNlX3JlcXVlc3Qp Owo+ICsKPiArCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQo+ICsJCQlicmVhazsKPiArCj4g KwkJaWYgKHIpIHsKPiArCQkJZ3Z0X3dhcm4oInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5 IHVuZXhwZWN0ZWQgc2lnbmFsLiIpOwoKU2hvdWxkIGJlIFdBUk5fT05DRSwgdG8gYXZvaWQgZnV0 dXJlIGRpc2FzdGVycyB3aXRoIENJLgoKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsJfQo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFuX3NlcnZpY2VfdGhyZWFkKHN0 cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlpZiAocGRldi0+c2VydmljZV90aHJlYWQp IHsKPiArCQlrdGhyZWFkX3N0b3AocGRldi0+c2VydmljZV90aHJlYWQpOwo+ICsJCXBkZXYtPnNl cnZpY2VfdGhyZWFkID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaW5pdF9z ZXJ2aWNlX3RocmVhZChzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJaW5pdF93YWl0 cXVldWVfaGVhZCgmcGRldi0+c2VydmljZV90aHJlYWRfd3EpOwo+ICsKPiArCXBkZXYtPnNlcnZp Y2VfdGhyZWFkID0ga3RocmVhZF9ydW4oZ3Z0X3NlcnZpY2VfdGhyZWFkLAo+ICsJCQlwZGV2LCAi Z3Z0X3NlcnZpY2VfdGhyZWFkJWQiLCBwZGV2LT5pZCk7Cj4gKwo+ICsJaWYgKCFwZGV2LT5zZXJ2 aWNlX3RocmVhZCkgewo+ICsJCWd2dF9lcnIoImZhaWwgdG8gc3RhcnQgc2VydmljZSB0aHJlYWQu Iik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBjbGVhbl9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2 KQo+ICt7Cj4gKwljbGVhbl9zZXJ2aWNlX3RocmVhZChwZGV2KTsKPiArCWNsZWFuX2luaXRpYWxf bW1pb19zdGF0ZShwZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaW5pdF9wZ3RfZGV2aWNl KHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCWlmICghaW5pdF9kZXZpY2VfaW5mbyhwZGV2KSkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJaW5pdF9pbml0aWFsX2NmZ19zcGFjZV9zdGF0ZShwZGV2KTsKPiArCj4gKwlp ZiAoIWluaXRfaW5pdGlhbF9tbWlvX3N0YXRlKHBkZXYpKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiAr CWlmICghaW5pdF9zZXJ2aWNlX3RocmVhZChwZGV2KSkKPiArCQlnb3RvIGVycjsKPiArCj4gKwly ZXR1cm4gdHJ1ZTsKPiArZXJyOgo+ICsJY2xlYW5fcGd0X2RldmljZShwZGV2KTsKPiArCXJldHVy biBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcG9zdF9pbml0X3BndF9kZXZpY2Uoc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBmcmVlX3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sK PiArCXN0cnVjdCBndnRfaG9zdCAqaG9zdCA9ICZndnRfaG9zdDsKPiArCj4gKwltdXRleF9sb2Nr KCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ICsJaWRyX3JlbW92ZSgmaG9zdC0+ZGV2aWNlX2lk ciwgcGRldi0+aWQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ ICsKPiArCXZmcmVlKHBkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBndF9kZXZpY2Ug KmFsbG9jX3BndF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gKwlzdHJ1Y3QgcGd0X2Rl dmljZSAqcGRldiA9IE5VTEw7Cj4gKwo+ICsJcGRldiA9IHZ6YWxsb2Moc2l6ZW9mKCpwZGV2KSk7 Cj4gKwlpZiAoIXBkZXYpIHsKPiArCQlndnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBm b3IgcGd0IGRldmljZS4iKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwltdXRleF9s b2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ICsJcGRldi0+aWQgPSBpZHJfYWxsb2MoJmhv c3QtPmRldmljZV9pZHIsIHBkZXYsIDAsIDAsIEdGUF9LRVJORUwpOwo+ICsJbXV0ZXhfdW5sb2Nr KCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ICsKPiArCWlmIChwZGV2LT5pZCA8IDApIHsKPiAr CQlndnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIHBndCBkZXZpY2UgaWQuIik7Cj4gKwkJZ290byBl cnI7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmcGRldi0+bG9jayk7Cj4gKwlwZGV2LT5kZXZf cHJpdiA9IGRldl9wcml2Owo+ICsJaWRyX2luaXQoJnBkZXYtPmluc3RhbmNlX2lkcik7Cj4gKwo+ ICsJcmV0dXJuIHBkZXY7Cj4gK2VycjoKPiArCWZyZWVfcGd0X2RldmljZShwZGV2KTsKPiArCXJl dHVybiBOVUxMOwo+ICt9Cj4gKwo+ICt2b2lkIGd2dF9kZXN0cm95X3BndF9kZXZpY2Uodm9pZCAq cHJpdmF0ZV9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IChzdHJ1Y3Qg cGd0X2RldmljZSAqKXByaXZhdGVfZGF0YTsKPiArCj4gKwljbGVhbl9wZ3RfZGV2aWNlKHBkZXYp Owo+ICsJZnJlZV9wZ3RfZGV2aWNlKHBkZXYpOwo+ICt9Cj4gKwo+ICt2b2lkICpndnRfY3JlYXRl X3BndF9kZXZpY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlz dHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3Qg PSAmZ3Z0X2hvc3Q7Cj4gKwo+ICsJaWYgKCFob3N0LT5pbml0aWFsaXplZCAmJiAhZ3Z0X2luaXRf aG9zdCgpKSB7Cj4gKwkJZ3Z0X2VycigiZ3Z0X2luaXRfaG9zdCBmYWlsIik7Cj4gKwkJcmV0dXJu IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJjcmVhdGUgbmV3IHBndCBkZXZpY2Us IGk5MTUgZGV2X3ByaXY6ICVwIiwgZGV2X3ByaXYpOwo+ICsKPiArCXBkZXYgPSBhbGxvY19wZ3Rf ZGV2aWNlKGRldl9wcml2KTsKPiArCWlmICghcGRldikgewo+ICsJCWd2dF9lcnIoImZhaWwgdG8g YWxsb2NhdGUgbWVtb3J5IGZvciBwZ3QgZGV2aWNlLiIpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ ICsKPiArCWd2dF9kYmdfY29yZSgiaW5pdCBwZ3QgZGV2aWNlLCBpZCAlZCIsIHBkZXYtPmlkKTsK PiArCj4gKwlpZiAoIWluaXRfcGd0X2RldmljZShwZGV2LCBkZXZfcHJpdikpIHsKPiArCQlndnRf ZXJyKCJmYWlsIHRvIGluaXQgcGh5c2ljYWwgZGV2aWNlIHN0YXRlLiIpOwo+ICsJCWdvdG8gZXJy Owo+ICsJfQo+ICsKPiArCWd2dF9kYmdfY29yZSgicGd0IGRldmljZSBjcmVhdGlvbiBkb25lLCBp ZCAlZCIsIHBkZXYtPmlkKTsKPiArCj4gKwlyZXR1cm4gcGRldjsKPiArZXJyOgo+ICsJaWYgKHBk ZXYpIHsKPiArCQlndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHBkZXYpOwo+ICsJCXBkZXYgPSBOVUxM Owo+ICsJfQo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK2Jvb2wgZ3Z0X3Bvc3RfaW5pdF9w Z3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0YSkKPiArewo+ICsJc3RydWN0IHBndF9kZXZpY2Ug KnBkZXYgPSAoc3RydWN0IHBndF9kZXZpY2UgKilwcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgZ3Z0 X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gKwo+ICsJaWYgKCFob3N0LT5pbml0aWFsaXplZCkg ewo+ICsJCWd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZC4iKTsKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJwb3N0IGluaXQgcGd0 IGRldmljZSAlZCIsIHBkZXYtPmlkKTsKPiArCj4gKwlpZiAoIXBvc3RfaW5pdF9wZ3RfZGV2aWNl KHBkZXYpKSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBwb3N0IGluaXQgcGh5c2ljYWwgZGV2aWNl IHN0YXRlLiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsK PiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjZjODViYmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L2d2dC5oCj4gQEAgLTAsMCArMSwxMzAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAr ICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dWVF9IXwo+ ICsjZGVmaW5lIF9HVlRfSF8KPiArCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVk ZSAiaTkxNV92Z3B1LmgiCj4gKwo+ICsjaW5jbHVkZSAiZGVidWcuaCIKPiArI2luY2x1ZGUgInBh cmFtcy5oIgo+ICsjaW5jbHVkZSAicmVnLmgiCj4gKyNpbmNsdWRlICJoeXBlcmNhbGwuaCIKPiAr I2luY2x1ZGUgIm1wdC5oIgo+ICsjaW5jbHVkZSAiZmJfZGVjb2Rlci5oIgo+ICsKPiArI2RlZmlu ZSBHVlRfTUFYX1ZHUFUgOAo+ICsKPiArZW51bSB7Cj4gKwlHVlRfSFlQRVJWSVNPUl9UWVBFX1hF TiA9IDAsCj4gKwlHVlRfSFlQRVJWSVNPUl9UWVBFX0tWTSwKPiArfTsKPiArCj4gK3N0cnVjdCBn dnRfaG9zdCB7Cj4gKwlib29sIGluaXRpYWxpemVkOwo+ICsJaW50IGh5cGVydmlzb3JfdHlwZTsK PiArCXN0cnVjdCBtdXRleCBkZXZpY2VfaWRyX2xvY2s7Cj4gKwlzdHJ1Y3QgaWRyIGRldmljZV9p ZHI7Cj4gKwlzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSAqa2RtOwo+ICt9Owo+ICsKPiArZXh0ZXJuIHN0 cnVjdCBndnRfaG9zdCBndnRfaG9zdDsKPiArCj4gKy8qIERlc2NyaWJlIHRoZSBsaW1pdGF0aW9u IG9mIEhXLiovCj4gK3N0cnVjdCBndnRfZGV2aWNlX2luZm8gewo+ICsJdTY0IG1heF9ndHRfZ21f c3o7Cj4gKwl1MzIgZ3R0X3N0YXJ0X29mZnNldDsKPiArCXUzMiBndHRfZW5kX29mZnNldDsKPiAr CXUzMiBtYXhfZ3R0X3NpemU7Cj4gKwl1MzIgZ3R0X2VudHJ5X3NpemU7Cj4gKwl1MzIgZ3R0X2Vu dHJ5X3NpemVfc2hpZnQ7Cj4gKwl1MzIgZ21hZHJfYnl0ZXNfaW5fY21kOwo+ICt9Owo+ICsKPiAr c3RydWN0IHZndF9kZXZpY2Ugewo+ICsJaW50IGlkOwo+ICsJaW50IHZtX2lkOwo+ICsJc3RydWN0 IHBndF9kZXZpY2UgKnBkZXY7Cj4gKwlib29sIHdhcm5fdW50cmFjazsKPiArfTsKPiArCj4gK3N0 cnVjdCBwZ3RfZGV2aWNlIHsKPiArCXN0cnVjdCBtdXRleCBsb2NrOwo+ICsJaW50IGlkOwo+ICsK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKPiArCXN0cnVjdCBpZHIgaW5z dGFuY2VfaWRyOwo+ICsKPiArCXN0cnVjdCBndnRfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87Cj4g Kwo+ICsJdTggaW5pdGlhbF9jZmdfc3BhY2VbR1ZUX0NGR19TUEFDRV9TWl07Cj4gKwl1NjQgYmFy X3NpemVbR1ZUX0JBUl9OVU1dOwo+ICsKPiArCXU2NCBndHRtbWlvX2Jhc2U7Cj4gKwl2b2lkICpn dHRtbWlvX3ZhOwo+ICsKPiArCXU2NCBnbWFkcl9iYXNlOwo+ICsJdm9pZCAqZ21hZHJfdmE7Cj4g Kwo+ICsJdTMyIG1taW9fc2l6ZTsKPiArCXUzMiByZWdfbnVtOwo+ICsKPiArCXdhaXRfcXVldWVf aGVhZF90IHNlcnZpY2VfdGhyZWFkX3dxOwo+ICsJc3RydWN0IHRhc2tfc3RydWN0ICpzZXJ2aWNl X3RocmVhZDsKPiArCXVuc2lnbmVkIGxvbmcgc2VydmljZV9yZXF1ZXN0Owo+ICt9Owo+ICsKCkhl cmUtLT4KCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGd2dF9tbWlvX3JlYWQoc3RydWN0IHBndF9kZXZp Y2UgKnBkZXYsCj4gKwkJdTMyIHJlZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gcGRldi0+ZGV2X3ByaXY7Cj4gKwlpOTE1X3JlZ190IHRtcCA9IHsucmVnID0g cmVnfTsKPiArCXJldHVybiBJOTE1X1JFQUQodG1wKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSB2b2lkIGd2dF9tbWlvX3dyaXRlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAo+ICsJCXUzMiBy ZWcsIHUzMiB2YWwpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHBkZXYtPmRldl9wcml2Owo+ICsJaTkxNV9yZWdfdCB0bXAgPSB7LnJlZyA9IHJlZ307Cj4gKwlJ OTE1X1dSSVRFKHRtcCwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1NjQgZ3Z0X21t aW9fcmVhZDY0KHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2LAo+ICsJCXUzMiByZWcpCj4gK3sKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHBkZXYtPmRldl9wcml2Owo+ICsJ aTkxNV9yZWdfdCB0bXAgPSB7LnJlZyA9IHJlZ307Cj4gKwlyZXR1cm4gSTkxNV9SRUFENjQodG1w KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGd2dF9tbWlvX3dyaXRlNjQoc3RydWN0 IHBndF9kZXZpY2UgKnBkZXYsCj4gKwkJdTMyIHJlZywgdTY0IHZhbCkKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcGRldi0+ZGV2X3ByaXY7Cj4gKwlpOTE1X3Jl Z190IHRtcCA9IHsucmVnID0gcmVnfTsKPiArCUk5MTVfV1JJVEU2NCh0bXAsIHZhbCk7Cj4gK30K PiArCgo8LS0gV2h5PyBUaGXCoGk5MTVfcmVnX3QgdHlwZSB3YXMgYWRkZWQgdG8gYXZvaWQgcHJv YmxlbXMsIHRoaXMgY29kZSBpcwpub3QgdXNlZCBhbnl3aGVyZSwgYW5kIGl0IGhhcyBubyBkb2N1 bWVudGF0aW9uLCBzbyBJIGNhbiBub3QgcmV2aWV3IGl0LgoKSSB3cm90ZSBjb21tZW50cyBhdCB0 aGUgdG9wIG9mIHRoZSBwb3N0LgoKUmVnYXJkcywgSm9vbmFzCgo+ICsjZW5kaWYKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi4wYTQxODc0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d2dC9oeXBlcmNhbGwuaAo+IEBAIC0wLDAgKzEsMzAgQEAKPiArLyoKPiArICogQ29weXJp Z2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dWVF9I WVBFUkNBTExfSF8KPiArI2RlZmluZSBfR1ZUX0hZUEVSQ0FMTF9IXwo+ICsKPiArc3RydWN0IGd2 dF9rZXJuZWxfZG0gewo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIF9HVlRfSFlQRVJDQUxMX0hfICov Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tcHQuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9tcHQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uYmJlNDQ2NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvbXB0LmgKPiBAQCAtMCwwICsxLDk3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAy MDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElO IFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9HVlRfTVBUX0hfCj4g KyNkZWZpbmUgX0dWVF9NUFRfSF8KPiArCj4gK3N0cnVjdCB2Z3RfZGV2aWNlOwo+ICsKPiArc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh5cGVydmlzb3JfZzJtX3BmbihzdHJ1Y3Qgdmd0X2Rl dmljZSAqdmd0LAo+ICsJdW5zaWduZWQgbG9uZyBnX3BmbikKPiArewo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGh5cGVydmlzb3JfcGF1c2VfZG9tYWluKHN0cnVj dCB2Z3RfZGV2aWNlICp2Z3QpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIGludCBoeXBlcnZpc29yX3NodXRkb3duX2RvbWFpbihzdHJ1Y3Qgdmd0X2RldmljZSAq dmd0KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgaHlw ZXJ2aXNvcl9zZXRfdHJhcF9hcmVhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCj4gKwl1aW50NjRf dCBzdGFydCwgdWludDY0X3QgZW5kLCBib29sIG1hcCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBoeXBlcnZpc29yX2RldGVjdF9ob3N0KHZvaWQpCj4g K3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2 aXNvcl92aXJ0X3RvX21mbih2b2lkICphZGRyKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGlubGluZSB2b2lkICpoeXBlcnZpc29yX21mbl90b192aXJ0KGludCBtZm4pCj4g K3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgaHlwZXJ2 aXNvcl9pbmplY3RfbXNpKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4gK3sKPiArCXJldHVybjsK PiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgaHlwZXJ2aXNvcl9odm1faW5pdChzdHJ1Y3Qg dmd0X2RldmljZSAqdmd0KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSB2b2lkIGh5cGVydmlzb3JfaHZtX2V4aXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKPiAr ewo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgKmh5cGVydmlzb3JfZ3BhX3RvX3ZhKHN0 cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVkIGxvbmcgZ3BhKQo+ICt7Cj4gKwlyZXR1cm4g TlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIGh5cGVydmlzb3JfcmVhZF92YShz dHJ1Y3Qgdmd0X2RldmljZSAqdmd0LCB2b2lkICp2YSwKPiArCQl2b2lkICp2YWwsIGludCBsZW4s IGludCBhdG9taWMpCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSBib29sIGh5cGVydmlzb3Jfd3JpdGVfdmEoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdm9p ZCAqdmEsCj4gKwkJdm9pZCAqdmFsLCBpbnQgbGVuLCBpbnQgYXRvbWljKQo+ICt7Cj4gKwlyZXR1 cm4gZmFsc2U7Cj4gK30KPiArCj4gKyNlbmRpZiAvKiBfR1ZUX01QVF9IXyAqLwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvcGFyYW1zLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LmRmYzMzYzMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3BhcmFtcy5jCj4gQEAgLTAsMCArMSwyOSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAx MS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU SEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImd2dC5oIgo+ICsKPiAr c3RydWN0IGd2dF9rZXJuZWxfcGFyYW1zIGd2dCA9IHsKPiArCS5lbmFibGUgPSB0cnVlLAo+ICsJ LmRlYnVnID0gMCwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L3BhcmFtcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kMjk1NWI5Cj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+IEBAIC0wLDAgKzEsMzQgQEAK PiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiAr ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS T00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiAr Cj4gKyNpZm5kZWYgX0dWVF9QQVJBTVNfSF8KPiArI2RlZmluZSBfR1ZUX1BBUkFNU19IXwo+ICsK PiArc3RydWN0IGd2dF9rZXJuZWxfcGFyYW1zIHsKPiArCWJvb2wgZW5hYmxlOwo+ICsJaW50IGRl YnVnOwo+ICt9Owo+ICsKPiArZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVsX3BhcmFtcyBndnQ7Cj4g Kwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi5kMzYzYjc0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9yZWcuaAo+IEBAIC0wLDAgKzEsMzQgQEAKPiArLyoKPiArICogQ29w eXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dW VF9SRUdfSAo+ICsjZGVmaW5lIF9HVlRfUkVHX0gKPiArCj4gKyNkZWZpbmUgR1ZUX0NGR19TUEFD RV9TWgkyNTYKPiArI2RlZmluZSBHVlRfQkFSX05VTQkJNAo+ICsKPiArI2RlZmluZSBHVlRfUkVH X0NGR19TUEFDRV9CQVIwCTB4MTAKPiArI2RlZmluZSBHVlRfUkVHX0NGR19TUEFDRV9CQVIxCTB4 MTgKPiArI2RlZmluZSBHVlRfUkVHX0NGR19TUEFDRV9CQVIyCTB4MjAKPiArCj4gKyNlbmRpZgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IGluZGV4IDQ3MjVlOGQuLmVjYThlNTAgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBAQCAtOTQzLDYgKzk0MywxMCBAQCBpbnQgaTkxNV9kcml2 ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+IMKg Cj4gwqAJaW50ZWxfdW5jb3JlX2luaXQoZGV2KTsKPiDCoAo+ICsJZGV2X3ByaXYtPnZncHUuaG9z dF9wcml2YXRlX2RhdGEgPSBndnRfY3JlYXRlX3BndF9kZXZpY2UoZGV2X3ByaXYpOwo+ICsJaWYo aW50ZWxfZ3Z0X2hvc3RfYWN0aXZlKGRldikpCj4gKwkJRFJNX0lORk8oIkdWVC1nIGlzIHJ1bm5p bmcgaW4gaG9zdCBtb2RlXG4iKTsKPiArCj4gwqAJcmV0ID0gaTkxNV9nZW1fZ3R0X2luaXQoZGV2 KTsKPiDCoAlpZiAocmV0KQo+IMKgCQlnb3RvIG91dF9mcmVlY3NyOwo+IEBAIC0xMDY3LDYgKzEw NzEsMTMgQEAgaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgbG9uZyBmbGFncykKPiDCoAkJZ290byBvdXRfcG93ZXJfd2VsbDsKPiDCoAl9Cj4gwqAK PiArCWlmIChpbnRlbF9ndnRfaG9zdF9hY3RpdmUoZGV2KSkgewo+ICsJCWlmICghZ3Z0X3Bvc3Rf aW5pdF9wZ3RfZGV2aWNlKGRldl9wcml2LT52Z3B1Lmhvc3RfcHJpdmF0ZV9kYXRhKSkgewo+ICsJ CQlEUk1fRVJST1IoImZhaWxlZCB0byBwb3N0IGluaXQgcGd0IGRldmljZVxuIik7Cj4gKwkJCWdv dG8gb3V0X3Bvd2VyX3dlbGw7Cj4gKwkJfQo+ICsJfQo+ICsKPiDCoAkvKgo+IMKgCcKgKiBOb3Rp ZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5nLAo+IMKgCcKgKiB3aGVuIHJ1bm5p bmcgaW5zaWRlIGEgVk0uCj4gQEAgLTExMTcsNiArMTEyOCwxMCBAQCBvdXRfZ3R0Ogo+IMKgCWk5 MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKGRldik7Cj4gwqBvdXRfZnJlZWNzcjoKPiDCoAlpbnRlbF9j c3JfdWNvZGVfZmluaShkZXZfcHJpdik7Cj4gKwlpZiAoaW50ZWxfZ3Z0X2hvc3RfYWN0aXZlKGRl dikpIHsKPiArCQlndnRfZGVzdHJveV9wZ3RfZGV2aWNlKGRldl9wcml2LT52Z3B1Lmhvc3RfcHJp dmF0ZV9kYXRhKTsKPiArCQlkZXZfcHJpdi0+dmdwdS5ob3N0X3ByaXZhdGVfZGF0YSA9IE5VTEw7 Cj4gKwl9Cj4gwqAJaW50ZWxfdW5jb3JlX2ZpbmkoZGV2KTsKPiDCoAlwY2lfaW91bm1hcChkZXYt PnBkZXYsIGRldl9wcml2LT5yZWdzKTsKPiDCoHB1dF9icmlkZ2U6Cj4gQEAgLTExNjUsNiArMTE4 MCwxMCBAQCBpbnQgaTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4g wqAKPiDCoAlpbnRlbF9tb2Rlc2V0X2NsZWFudXAoZGV2KTsKPiDCoAo+ICsJaWYgKGludGVsX2d2 dF9ob3N0X2FjdGl2ZShkZXYpKSB7Cj4gKwkJZ3Z0X2Rlc3Ryb3lfcGd0X2RldmljZShkZXZfcHJp di0+dmdwdS5ob3N0X3ByaXZhdGVfZGF0YSk7Cj4gKwkJZGV2X3ByaXYtPnZncHUuaG9zdF9wcml2 YXRlX2RhdGEgPSBOVUxMOwo+ICsJfQo+IMKgCS8qCj4gwqAJwqAqIGZyZWUgdGhlIG1lbW9yeSBz cGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBjaGlsZCBkZXZpY2UKPiDCoAnCoCogY29uZmlnIHBhcnNl ZCBmcm9tIFZCVAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDAxY2M5ODIuLmRiM2M3 OWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTY3Myw2ICsxNjczLDcgQEAg c3RydWN0IGk5MTVfd29ya2Fyb3VuZHMgewo+IMKgCj4gwqBzdHJ1Y3QgaTkxNV92aXJ0dWFsX2dw dSB7Cj4gwqAJYm9vbCBhY3RpdmU7Cj4gKwl2b2lkICpob3N0X3ByaXZhdGVfZGF0YTsKPiDCoH07 Cj4gwqAKPiDCoHN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zIHsKPiBAQCAtMjc0Nyw2ICsy NzQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF92Z3B1X2FjdGl2ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+IMKgCXJldHVybiB0b19pOTE1KGRldiktPnZncHUuYWN0aXZlOwo+IMKg fQo+IMKgCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9ndnRfaG9zdF9hY3RpdmUoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJuIHRvX2k5MTUoZGV2KS0+dmdwdS5ob3N0 X3ByaXZhdGVfZGF0YSA/IHRydWUgOiBmYWxzZTsKPiArfQo+ICsKPiDCoHZvaWQKPiDCoGk5MTVf ZW5hYmxlX3BpcGVzdGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBw aXBlIHBpcGUsCj4gwqAJCcKgwqDCoMKgwqB1MzIgc3RhdHVzX21hc2spOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdmdwdS5oCj4gaW5kZXggM2M4M2I0Ny4uOTQyNDkwYSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZncHUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfdmdwdS5oCj4gQEAgLTExMyw1ICsxMTMsOCBAQCBzdHJ1Y3Qgdmd0X2lmIHsKPiDCoGV4 dGVybiB2b2lkIGk5MTVfY2hlY2tfdmdwdShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiDCoGV4 dGVybiBpbnQgaW50ZWxfdmd0X2JhbGxvb24oc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gwqBl eHRlcm4gdm9pZCBpbnRlbF92Z3RfZGViYWxsb29uKHZvaWQpOwo+ICtleHRlcm4gdm9pZCAqZ3Z0 X2NyZWF0ZV9wZ3RfZGV2aWNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4g K2V4dGVybiBib29sIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEp Owo+ICtleHRlcm4gdm9pZCBndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0 YSk7Cj4gwqAKPiDCoCNlbmRpZiAvKiBfSTkxNV9WR1BVX0hfICovCj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaAo+ IGluZGV4IGQxMzMxMTIuLjc4YTM4ZjEgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS94ZW4vaW50ZXJm YWNlL3hlbi5oCj4gKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oCj4gQEAgLTI4LDYg KzI4LDcgQEAKPiDCoCNkZWZpbmUgX19YRU5fUFVCTElDX1hFTl9IX18KPiDCoAo+IMKgI2luY2x1 ZGUgCj4gKyNpbmNsdWRlIAo+IMKgCj4gwqAvKgo+IMKgICogWEVOICJTWVNURU0gQ0FMTFMiIChh LmsuYS4gSFlQRVJDQUxMUykuCi0tIApKb29uYXMgTGFodGluZW4KT3BlbiBTb3VyY2UgVGVjaG5v bG9neSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK