From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFCv2 02/14] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Tue, 23 Feb 2016 14:42:12 +0200 Message-ID: <1456231332.7789.63.camel@linux.intel.com> References: <1455795741-3487-1-git-send-email-zhi.a.wang@intel.com> <1455795741-3487-3-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A9516E50C for ; Tue, 23 Feb 2016 12:42:21 +0000 (UTC) In-Reply-To: <1455795741-3487-3-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, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org SGksCgpDb2RlIGlzIGxvb2tpbmcgYSBsb3QgYmV0dGVyLgoKQSBnZW5lcmFsIHF1ZXN0aW9uIHN0 aWxsOyB3aHkgeW91IHNlZW0gdG8gYmUgcHJlZmVycmluZyBtdWx0aS1zdGFnZQphbGxvYyBhbmQg ZGVzdHJveT8KCkFyZSB0aGVyZSBnb2luZyB0byBiZSBzY2VuYXJpb3Mgd2hlbiB0aGluZ3Mgd2ls bCBiZSBhbGxvY2F0ZWQgYnV0IG5vdAppbml0aWFsaXplZD8gSSBkb24ndCBzZWUgYSBzdWNoIHVz ZSBzY2VuYXJpby4KCkkgd291bGRuJ3Qgc3BsaXQgdGhlIGluaXQgZnVuY3Rpb25zIGRvd24gYXMg bXVjaCBhcyB5b3UgY3VycmVudGx5IGRvCmJlY2F1c2UgdGhhdCdsbCByZXF1aXJlIGEgbG90IG9m IGJvaWxlcnBsYXRlIGNvZGUgdG8gcHJvcGFnYXRlIHRoZQplcnJvcnMgdXAsIHdoaWNoIGlzIGN1 cnJlbnRseSBub3QgZG9uZS4gVGhlIGJvaWxlcnBsYXRlIGZvciBwcm9wYWdhdGlvbgpiZWNvbWVz IG5lY2Vzc2FyeSB3aGVuIHRoZSB0ZWFyZG93biBmdW5jdGlvbiBpcyBjb21wbGV4LCBidXQgY3Vy cmVudGx5CnRoZSB0ZWFyZG93biBpdHNlbGYgaXMgbGVzcyBsaW5lcyBvZiBjb2RlIHRoYW4gdGhl IGZ1bmN0aW9uCmJvaWxlcnBsYXRlLgoKU28ganVzdCBzcXVhc2ggdGhvc2UgaW50byBndnRfZGV2 aWNlX2NyZWF0ZSgpIGFuZCBndnRfZGV2aWNlX2Rlc3Ryb3koKQp3aGVyZSBfY3JlYXRlKCkgd2ls bCBwcm9wYWdhdGUgYW55IGxvd2VyIGxldmVsIGVycm9ycyB1cCBhbmQgdGVhciBkb3duCmEgcGFy dGlhbGx5IGluaXRpYWxpemVkIHN0cnVjdC4gX2Rlc3Ryb3koKSBjYW4gdGhlbiBleHBlY3QgdG8g anVzdCB0ZWFyCnRoZSB3aG9sZSBzdHJ1Y3QgZG93biB3aXRoIG5vIGlmcy4KClJlZ2FyZHMsIEpv b25hcwoKT24gdG8sIDIwMTYtMDItMTggYXQgMTk6NDIgKzA4MDAsIFpoaSBXYW5nIHdyb3RlOgo+ IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgdmVyeSBiYXNpYyBmcmFtZXdvcmsgb2YgR1ZULWcg ZGV2aWNlIG1vZGVsLAo+IGluY2x1ZGVzIGJhc2ljIHByb3RvdHlwZXMsIGRlZmluaXRpb25zLCBp bml0aWFsaXphdGlvbi4KPiAKPiB2MjoKPiAtIEludHJvZHVjZSBpOTE1X2d2dC5jLgo+IEl0J3Mg bmVjZXNzYXJ5IHRvIGludHJvZHVjZSB0aGUgc3R1YnMgYmV0d2VlbiBpOTE1IGRyaXZlciBhbmQg R1ZULWcgaG9zdCwKPiBhcyBHVlQtZyBjb21wb25lbnRzIGlzIGNvbmZpZ3VyYWJsZSBpbiBrZXJu ZWwgY29uZmlnLiBXaGVuIGRpc2FibGVkLCB0aGUKPiBzdHVicyBoZXJlIGRvIG5vdGhpbmcuCj4g Cj4gVGFrZSBKb29uYXMncyBjb21tZW50czoKPiAtIFJlcGxhY2UgYm9vbGVhbiByZXR1cm4gdmFs dWUgd2l0aCBpbnQuCj4gLSBSZXBsYWNlIGN1c3RvbWl6ZWQgaW5mby93YXJuL2RlYnVnIG1hY3Jv cyB3aXRoIERSTSBtYWNyb3MuCj4gLSBEb2N1bWVudCBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMg bGlrZSBpOTE1Lgo+IC0gUmVtb3ZlIGVtcHR5IGFuZCB1bnVzZWQgZnVuY3Rpb25zLgo+IC0gUmVw bGFjZSBtYWdpYyBudW1iZXIgd2l0aCBtYXJjb3MuCj4gLSBTZXQgR1ZULWcgaW4ga2VybmVsIGNv bmZpZyB0byAibiIgYnkgZGVmYXVsdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBaaGkgV2FuZyA8emhp LmEud2FuZ0BpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmln wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxNSArKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGXCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3Z0L01ha2VmaWxlwqDCoMKgwqB8wqDCoMKgNSArCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZGVidWcuaMKgwqDCoMKgwqB8wqDCoDU3ICsrKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZ3Z0LmPCoMKgwqDCoMKgwqDCoHwgMzkzICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmjCoMKgwqDCoMKgwqDC oHwgMTAwICsrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2h5cGVyY2FsbC5o IHzCoMKgMzAgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmjCoMKgwqDCoMKg wqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmPCoMKg wqDCoHzCoMKgMzIgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmjCoMKg wqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcmVnLmjCoMKgwqDC oMKgwqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jwqDC oMKgwqDCoMKgfMKgwqAxNCArKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKg wqDCoMKgwqDCoHzCoMKgMTIgKysKPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3Z0LmPC oMKgwqDCoMKgwqB8wqDCoDkzICsrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ndnQuaMKgwqDCoMKgwqDCoHzCoMKgNDkgKysrKysKPiDCoDE1IGZpbGVzIGNoYW5nZWQsIDkw NCBpbnNlcnRpb25zKCspCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L01ha2VmaWxlCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2RlYnVnLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZ3Z0LmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZ3Z0LmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv aHlwZXJjYWxsLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvbXB0LmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv cGFyYW1zLmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv cGFyYW1zLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv cmVnLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2 dC5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndnQu aAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+IGluZGV4IDRjNTk3OTMuLjA4MmU3N2QgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L0tjb25maWcKPiBAQCAtNDUsMyArNDUsMTggQEAgY29uZmlnIERSTV9JOTE1X1BSRUxJ TUlOQVJZX0hXX1NVUFBPUlQKPiDCoAnCoMKgb3B0aW9uIGNoYW5nZXMgdGhlIGRlZmF1bHQgZm9y IHRoYXQgbW9kdWxlIG9wdGlvbi4KPiDCoAo+IMKgCcKgwqBJZiBpbiBkb3VidCwgc2F5ICJOIi4K PiArCj4gK2NvbmZpZyBEUk1fSTkxNV9HVlQKPiArwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJH VlQtZyBob3N0IGRyaXZlciIKPiArwqDCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gRFJNX0k5MTUK PiArwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQgbgo+ICvCoMKgwqDCoMKgwqDCoMKgaGVscAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoEVuYWJsaW5nIEdWVC1nIG1lZGlhdGVkIGdyYXBoaWNzIHBhc3N0 aHJvdWdoIHRlY2huaXF1ZSBmb3IgSW50ZWwgaTkxNQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGJh c2VkIGludGVncmF0ZWQgZ3JhcGhpY3MgY2FyZC4gV2l0aCBHVlQtZywgaXQncyBwb3NzaWJsZSB0 byBoYXZlIG9uZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVncmF0ZWQgaTkxNSBkZXZpY2Ug c2hhcmVkIGJ5IG11bHRpcGxlIFZNcy4gUGVyZm9ybWFuY2UgY3JpdGljYWwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqBvcHRlcmF0aW9ucyBzdWNoIGFzIGFwcGVydHVyZSBhY2Nlc3NlcyBhbmQgcmlu ZyBidWZmZXIgb3BlcmF0aW9ucwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGFyZSBwYXNzLXRocm91 Z2hlZCB0byBWTSwgd2l0aCBhIG1pbmltYWwgc2V0IG9mIGNvbmZsaWN0aW5nIHJlc291cmNlcwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoChlLmcuIGRpc3BsYXkgc2V0dGluZ3MpIG1lZGlhdGVkIGJ5 IHZHVCBkcml2ZXIuIFRoZSBiZW5lZml0IG9mIHZHVAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGlz IG9uIGJvdGggdGhlIHBlcmZvcm1hbmNlLCBnaXZlbiB0aGF0IGVhY2ggVk0gY291bGQgZGlyZWN0 bHkgb3BlcmF0ZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGl0cyBhcGVydHVyZSBzcGFjZSBhbmQg c3VibWl0IGNvbW1hbmRzIGxpa2UgcnVubmluZyBvbiBuYXRpdmUsIGFuZAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoHRoZSBmZWF0dXJlIGNvbXBsZXRlbmVzcywgZ2l2ZW4gdGhhdCBhIHRydWUgR0VO IGhhcmR3YXJlIGlzIGV4cG9zZWQuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCAwODUxZGUw Ny4uYzY1MDI2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTkxLDYgKzkxLDggQEAg aTkxNS15ICs9IGR2b19jaDcwMTcubyBcCj4gwqAJwqDCoGludGVsX3Nkdm8ubyBcCj4gwqAJwqDC oGludGVsX3R2Lm8KPiDCoAo+ICtvYmotJChDT05GSUdfRFJNX0k5MTVfR1ZUKcKgwqArPSBpOTE1 X2d2dC5vIGd2dC8KPiArCj4gwqAjIHZpcnR1YWwgZ3B1IGNvZGUKPiDCoGk5MTUteSArPSBpOTE1 X3ZncHUubwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOTU5MzA1Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDUgQEAKPiArR1ZU X1NPVVJDRSA6PSBndnQubyBwYXJhbXMubwo+ICsKPiArY2NmbGFncy15wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArPSAtSSQoc3JjKSAtSSQoc3JjKS8uLiAtV2Fs bCAtV2Vycm9yIC1Xbm8tdW51c2VkLWZ1bmN0aW9uCj4gK2k5MTVfZ3Z0LXnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6PSAkKEdWVF9TT1VSQ0UpCj4gK29iai0kKENP TkZJR19EUk1fSTkxNV9HVlQpwqDCoMKgwqDCoCs9IGk5MTVfZ3Z0Lm8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZGVidWcuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMDc0N2Yy OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcu aAo+IEBAIC0wLDAgKzEsNTcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4g KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4gKyAq IFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19HVlRfREVCVUdfSF9fCj4gKyNkZWZp bmUgX19HVlRfREVCVUdfSF9fCj4gKwo+ICsjZGVmaW5lIGd2dF9pbmZvKGZtdCwgYXJncy4uLikg XAo+ICsJRFJNX0lORk8oImd2dDogImZtdCJcbiIsICMjYXJncykKPiArCgpKdXN0OwoKCURSTV9J TkZPKCJndnQ6ICIgZm10LCAjI2FyZ3MpCgpEbyBub3QgYXV0b21hdGljYWxseSBhZGQgbmV3bGlu ZXMsIGl0IHdpbGwgY29uZnVzZSBkZXZlbG9wZXJzLiBBcHBsaWVzCnRvIGFsbCBwcmludGluZy4K Cj4gKyNkZWZpbmUgZ3Z0X2VycihmbXQsIGFyZ3MuLi4pIFwKPiArCURSTV9FUlJPUigiZ3Z0OiAi Zm10IlxuIiwgIyNhcmdzKQo+ICsKClNhbWUgaGVyZS4KCj4gKyNkZWZpbmUgZ3Z0X3dhcm4oY29u ZGl0aW9uLCBmbXQsIGFyZ3MuLi4pIFwKPiArCVdBUk4oKGNvbmRpdGlvbiksICJndnQ6ICJmbXQi XG4iLCAjI2FyZ3MpCj4gKwo+ICsjZGVmaW5lIGd2dF93YXJuX29uY2UoY29uZGl0aW9uLCBmbXQs IGFyZ3MuLi4pIFwKPiArCVdBUk5fT05DRSgoY29uZGl0aW9uKSwgImd2dDogImZtdCJcbiIsICMj YXJncykKCldBUk4gYW5kIFdBUk5fT05DRSB3aWxsIGluY2x1ZGUgYmFja3RyYWNlIHNvIHByZWZp eGluZyBpcyB1bm5lY2Vzc2FyeS4KSSB3b3VsZCBub3QgcHJlZml4IHRoZW0gYXQgYWxsLiBKdXN0 IHVzZSB3aGF0IGk5MTUga2VybmVsIG1vZHVsZQphbHJlYWR5IHVzZXMuIElmIG5lZWRlZCwgc3Bs aXQgdGhlbSB0byB0aGVpciBvd24gZmlsZSBmaXJzdCwKaTkxNV9kZWJ1Zy5oLgo+ICsKPiArI2Rl ZmluZSBndnRfZGJnKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKPiArCURSTV9ERUJVR19EUklWRVIo Imd2dDogImZtdCJcbiIsICMjYXJncykKPiArCj4gK2VudW0gewo+ICsJR1ZUX0RCR19DT1JFID0g KDEgPDwgMCksCj4gKwlHVlRfREJHX01NID0gKDEgPDwgMSksCj4gKwlHVlRfREJHX0lSUSA9ICgx IDw8IDIpLAo+ICt9OwoKVGhpcyBlbnVtIGlzIG5vdCBvZiB1c2UuCgo+ICsKPiArI2RlZmluZSBn dnRfZGJnX2NvcmUoZm10LCBhcmdzLi4uKSBcCj4gKwlndnRfZGJnKEdWVF9EQkdfQ09SRSwgZm10 LCAjI2FyZ3MpCj4gKwoKUmFodGVyIGxpa2UgdGhpcyAobm90IHRvIGxvc2UgdGhlIHRvcGljKT8K CWd2dF9kYmcoImNvcmU6ICIgZm10LCAjI2FyZ3MpCgo+ICsjZGVmaW5lIGd2dF9kYmdfbW0oZm10 LCBhcmdzLi4uKSBcCj4gKwlndnRfZGJnKEdWVF9EQkdfTU0sIGZtdCwgIyNhcmdzKQo+ICsKPiAr I2RlZmluZSBndnRfZGJnX2lycShmbXQsIGFyZ3MuLi4pIFwKPiArCWd2dF9kYmcoR1ZUX0RCR19J UlEsIGZtdCwgIyNhcmdzKQo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9ndnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTJjZmEzMgo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPiBAQCAtMCwwICsxLDM5 MyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsg Kgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4g Tk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgCj4gKyNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiArCj4gKyNpbmNs dWRlICJndnQuaCIKPiArCj4gK3N0cnVjdCBndnRfaG9zdCBndnRfaG9zdDsKPiArCj4gK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3Qgc3VwcG9ydGVkX2h5cGVydmlzb3JzW10gPSB7Cj4gKwlbR1ZU X0hZUEVSVklTT1JfVFlQRV9YRU5dID0gIlhlbiBIeXBlcnZpc29yIiwKPiArCVtHVlRfSFlQRVJW SVNPUl9UWVBFX0tWTV0gPSAiS1ZNIiwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ3Z0X2luaXRf aG9zdCh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4g KwoKSXMgaXQgcmVhbGx5IHRoYXQgbXVjaCBtb3JlIHRvIHdyaXRlIGd2dF9ob3N0LmluaXRpYWxp emVkPyBDb3VudGluZyB0aGUKIi0+IiB2cyAiLiIgaXQncyB0aHJlZSBsZXR0ZXJzLi4uCgo+ICsJ aWYgKCFndnQuZW5hYmxlKSB7Cj4gKwkJZ3Z0X2RiZ19jb3JlKCJHVlQtZyBoYXMgYmVlbiBkaXNh YmxlZCBieSBrZXJuZWwgcGFyYW1ldGVyIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJaWYgKGhvc3QtPmluaXRpYWxpemVkKSB7Cj4gKwkJZ3Z0X2VycigiR1ZULWcgaGFzIGFs cmVhZHkgYmVlbiBpbml0aWFsaXplZCEiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiAr Cj4gKwkvKiBYZW4gRE9NIFUgKi8KPiArCWlmICh4ZW5fZG9tYWluKCkgJiYgIXhlbl9pbml0aWFs X2RvbWFpbigpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmICh4ZW5faW5pdGlhbF9k b21haW4oKSkgewo+ICsJCS8qIFhlbiBEb20wICovCj4gKwkJaG9zdC0+a2RtID0gdHJ5X3RoZW5f cmVxdWVzdF9tb2R1bGUoCj4gKwkJCQlzeW1ib2xfZ2V0KHhlbmd0X2tkbSksICJ4ZW5ndCIpOwo+ ICsJCWhvc3QtPmh5cGVydmlzb3JfdHlwZSA9IEdWVF9IWVBFUlZJU09SX1RZUEVfWEVOOwo+ICsJ fSBlbHNlIHsKPiArCQkvKiBub3QgaW4gWGVuLiBUcnkgS1ZNR1QgKi8KPiArCQlob3N0LT5rZG0g PSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSgKPiArCQkJCXN5bWJvbF9nZXQoa3ZtZ3Rfa2RtKSwg Imt2bSIpOwo+ICsJCWhvc3QtPmh5cGVydmlzb3JfdHlwZSA9IEdWVF9IWVBFUlZJU09SX1RZUEVf S1ZNOwo+ICsJfQo+ICsKPiArCWlmICghaG9zdC0+a2RtKQo+ICsJCXJldHVybiAtRUlOVkFMOwoK SSB0aGluayB0aGlzIGVycm9yIHNob3VsZCBiZSByZXBvcnRlZCwgdG8gYWlkIGRldGVjdGluZyBw cm9ibGVtcyBpbgptb2R1bGUgbG9hZGluZy4KCj4gKwo+ICsJaWYgKCFoeXBlcnZpc29yX2RldGVj dF9ob3N0KCkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwoKVGhpcyBmdW5jIHNob3VsZCBiZSBw cmVmaXhlZCBndnRfLCBhcyBpdCBpcyBub3QgbG9jYWwgdG8gdGhpcyBmaWxlLgoKPiArCWd2dF9p bmZvKCJSdW5uaW5nIHdpdGggaHlwZXJ2aXNvciAlcyBpbiBob3N0IG1vZGUiLAo+ICsJCQlzdXBw b3J0ZWRfaHlwZXJ2aXNvcnNbaG9zdC0+aHlwZXJ2aXNvcl90eXBlXSk7Cj4gKwo+ICsJaWRyX2lu aXQoJmhvc3QtPmRldmljZV9pZHIpOwo+ICsJbXV0ZXhfaW5pdCgmaG9zdC0+ZGV2aWNlX2lkcl9s b2NrKTsKPiArCj4gKwlob3N0LT5pbml0aWFsaXplZCA9IHRydWU7Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBpbml0X2RldmljZV9pbmZvKHN0cnVjdCBwZ3RfZGV2aWNlICpw ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnBkZXYtPmRldmlj ZV9pbmZvOwo+ICsKPiArCWlmICghSVNfQlJPQURXRUxMKHBkZXYtPmRldl9wcml2KSkgewo+ICsJ CURSTV9ERUJVR19EUklWRVIoIlVuc3VwcG9ydGVkIEdFTiBkZXZpY2UiKTsKPiArCQlyZXR1cm4g LUVOT0RFVjsKPiArCX0KClRoaXMgY291bGQgYmUgImVsc2UiIGNsYXVzZSBvbiB0aGUgbmV4dCBp ZiBhbmQgd2lsbCBhbGxvdyBlYXNpZXIgYWRkaW5nCm9mIGZ1dHVyZSBwbGF0Zm9ybXMuCgo+ICsK PiArCWlmIChJU19CUk9BRFdFTEwocGRldi0+ZGV2X3ByaXYpKSB7Cj4gKwkJaW5mby0+bWF4X2d0 dF9nbV9zeiA9ICgxVUxMIDw8IDMyKTsgLyogNEdCICovCj4gKwkJLyoKPiArCQnCoCogVGhlIGxh eW91dCBvZiBCQVIwIGluIEJEVzoKPiArCQnCoCogfDwgLSBNTUlPIDJNQiAtPnw8LSBSZXNlcnZl ZCA2TUIgLT58PC0gTUFYIEdUVCA4TUItPnwKPiArCQnCoCoKPiArCQnCoCogR1RUIG9mZnNldCBp biBCQVIwIHN0YXJ0cyBmcm9tIDhNQiB0byAxNk1CLCBhbmQKPiArCQnCoCogV2hhdGV2ZXIgR1RU IHNpemUgaXMgY29uZmlndXJlZCBpbiBCSU9TLAo+ICsJCcKgKiB0aGUgc2l6ZSBvZiBCQVIwIGlz IGFsd2F5cyAxNk1CLiBUaGUgYWN0dWFsIGNvbmZpZ3VyZWQKPiArCQnCoCogR1RUIHNpemUgY2Fu IGJlIGZvdW5kIGluIEdNQ0hfQ1RSTC4KPiArCQnCoCovCj4gKwkJaW5mby0+Z3R0X3N0YXJ0X29m ZnNldCA9ICgxVUwgPDwgMjMpOyAvKiA4TUIgKi8KPiArCQlpbmZvLT5tYXhfZ3R0X3NpemUgPSAo MVVMIDw8IDIzKTsgLyogOE1CICovCj4gKwkJaW5mby0+Z3R0X2VudHJ5X3NpemUgPSA4Owo+ICsJ CWluZm8tPmd0dF9lbnRyeV9zaXplX3NoaWZ0ID0gMzsKPiArCQlpbmZvLT5nbWFkcl9ieXRlc19p bl9jbWQgPSA4Owo+ICsJCWluZm8tPm1taW9fc2l6ZSA9IDIgKiAxMDI0ICogMTAyNDsgLyogMk1C ICovCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGluaXRf aW5pdGlhbF9jZmdfc3BhY2Vfc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiAr CXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gcGRldi0+ZGV2X3ByaXYtPmRldi0+cGRldjsKPiAr CWludCBpOwo+ICsKPiArCWd2dF9kYmdfY29yZSgiaW5pdCBpbml0aWFsIGNmZyBzcGFjZSwgaWQg JWQiLCBwZGV2LT5pZCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEdWVF9DRkdfU1BBQ0VfU1o7 IGkgKz0gNCkKPiArCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgaSwKPiArCQkJCSh1 MzIgKikmcGRldi0+aW5pdGlhbF9jZmdfc3BhY2VbaV0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBHVlRfQkFSX05VTTsgaSsrKSB7Cj4gKwkJcGRldi0+YmFyX3NpemVbaV0gPSBwY2lfcmVzb3Vy Y2VfbGVuKHBjaV9kZXYsIGkgKiAyKTsKPiArCQlndnRfZGJnX2NvcmUoImJhciAlZCBzaXplOiAl bGx4IiwgaSwgcGRldi0+YmFyX3NpemVbaV0pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBjbGVhbl9pbml0aWFsX21taW9fc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sK PiArCWlmIChwZGV2LT5ndHRtbWlvX3ZhKSB7Cj4gKwkJaW91bm1hcChwZGV2LT5ndHRtbWlvX3Zh KTsKPiArCQlwZGV2LT5ndHRtbWlvX3ZhID0gTlVMTDsKPiArCX0KPiArCj4gKwlpZiAocGRldi0+ Z21hZHJfdmEpIHsKPiArCQlpb3VubWFwKHBkZXYtPmdtYWRyX3ZhKTsKPiArCQlwZGV2LT5nbWFk cl92YSA9IE5VTEw7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW5pdF9pbml0aWFsX21t aW9fc3RhdGUoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBndnRfZGV2 aWNlX2luZm8gKmluZm8gPSAmcGRldi0+ZGV2aWNlX2luZm87Cj4gKwo+ICsJdTY0IGJhcjAsIGJh cjE7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJpbml0IGluaXRpYWwgbW1pbyBz dGF0ZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4gKwo+ICsJYmFyMCA9ICoodTY0ICopJnBkZXYtPmlu aXRpYWxfY2ZnX3NwYWNlW0dWVF9SRUdfQ0ZHX1NQQUNFX0JBUjBdOwo+ICsJYmFyMSA9ICoodTY0 ICopJnBkZXYtPmluaXRpYWxfY2ZnX3NwYWNlW0dWVF9SRUdfQ0ZHX1NQQUNFX0JBUjFdOwo+ICsK PiArCXBkZXYtPmd0dG1taW9fYmFzZSA9IGJhcjAgJiB+MHhmOwo+ICsJcGRldi0+cmVnX251bSA9 IGluZm8tPm1taW9fc2l6ZSAvIDQ7Cj4gKwlwZGV2LT5nbWFkcl9iYXNlID0gYmFyMSAmIH4weGY7 CgpNYWdpYyBudW1iZXJzIHN0aWxsLgoKPiArCj4gKwlwZGV2LT5ndHRtbWlvX3ZhID0gaW9yZW1h cChwZGV2LT5ndHRtbWlvX2Jhc2UsIHBkZXYtPmJhcl9zaXplWzBdKTsKPiArCWlmICghcGRldi0+ Z3R0bW1pb192YSkgewo+ICsJCWd2dF9lcnIoImZhaWwgdG8gbWFwIEdUVE1NSU8gQkFSLiIpOwo+ ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCXBkZXYtPmdtYWRyX3ZhID0gaW9yZW1h cChwZGV2LT5nbWFkcl9iYXNlLCBwZGV2LT5iYXJfc2l6ZVsyXSk7Cj4gKwlpZiAoIXBkZXYtPmdt YWRyX3ZhKSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBtYXAgR01BRFIgQkFSLiIpOwo+ICsJCXJj ID0gLUVGQVVMVDsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlndnRfZGJnX2NvcmUoImJh cjA6IDB4JWxseCwgYmFyMTogMHglbGx4IiwgYmFyMCwgYmFyMSk7Cj4gKwlndnRfZGJnX2NvcmUo Im1taW8gc2l6ZTogJXgiLCBwZGV2LT5tbWlvX3NpemUpOwo+ICsJZ3Z0X2RiZ19jb3JlKCJndHRt bWlvOiAweCVsbHgsIGdtYWRyOiAweCVsbHgiLCBwZGV2LT5ndHRtbWlvX2Jhc2UsCj4gKwkJCXBk ZXYtPmdtYWRyX2Jhc2UpOwo+ICsJZ3Z0X2RiZ19jb3JlKCJndHRtbWlvX3ZhOiAlcCIsIHBkZXYt Pmd0dG1taW9fdmEpOwo+ICsJZ3Z0X2RiZ19jb3JlKCJnbWFkcl92YTogJXAiLCBwZGV2LT5nbWFk cl92YSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2VycjoKPiArCWNsZWFuX2luaXRpYWxfbW1pb19z dGF0ZShwZGV2KTsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBndnRfc2Vy dmljZV90aHJlYWQodm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYg PSAoc3RydWN0IHBndF9kZXZpY2UgKilkYXRhOwo+ICsJaW50IHI7Cj4gKwo+ICsJZ3Z0X2RiZ19j b3JlKCJzZXJ2aWNlIHRocmVhZCBzdGFydCwgcGd0ICVkIiwgcGRldi0+aWQpOwo+ICsKPiArCXdo aWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Cj4gKwkJciA9IHdhaXRfZXZlbnRfaW50ZXJy dXB0aWJsZShwZGV2LT5zZXJ2aWNlX3RocmVhZF93cSwKPiArCQkJCWt0aHJlYWRfc2hvdWxkX3N0 b3AoKSB8fCBwZGV2LT5zZXJ2aWNlX3JlcXVlc3QpOwo+ICsKPiArCQlpZiAoa3RocmVhZF9zaG91 bGRfc3RvcCgpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYgKGd2dF93YXJuX29uY2UociwKPiAr CQkJInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5IHVuZXhwZWN0ZWQgc2lnbmFsLiIpKQo+ ICsJCQljb250aW51ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgY2xlYW5fc2VydmljZV90aHJlYWQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sK PiArCWlmIChwZGV2LT5zZXJ2aWNlX3RocmVhZCkgewo+ICsJCWt0aHJlYWRfc3RvcChwZGV2LT5z ZXJ2aWNlX3RocmVhZCk7Cj4gKwkJcGRldi0+c2VydmljZV90aHJlYWQgPSBOVUxMOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfc2VydmljZV90aHJlYWQoc3RydWN0IHBndF9kZXZp Y2UgKnBkZXYpCj4gK3sKPiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBkZXYtPnNlcnZpY2VfdGhy ZWFkX3dxKTsKPiArCj4gKwlwZGV2LT5zZXJ2aWNlX3RocmVhZCA9IGt0aHJlYWRfcnVuKGd2dF9z ZXJ2aWNlX3RocmVhZCwKPiArCQkJcGRldiwgImd2dF9zZXJ2aWNlX3RocmVhZCVkIiwgcGRldi0+ aWQpOwo+ICsKPiArCWlmICghcGRldi0+c2VydmljZV90aHJlYWQpIHsKPiArCQlndnRfZXJyKCJm YWlsIHRvIHN0YXJ0IHNlcnZpY2UgdGhyZWFkLiIpOwo+ICsJCXJldHVybiAtRU5PU1BDOwo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjbGVhbl9wZ3RfZGV2 aWNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljbGVhbl9zZXJ2aWNlX3RocmVh ZChwZGV2KTsKPiArCWNsZWFuX2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpbml0X3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYsCj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWludCByYzsKCglpbnQg cmV0OwoKPiArCj4gKwlyYyA9IGluaXRfZGV2aWNlX2luZm8ocGRldik7Cj4gKwlpZiAocmMpCj4g KwkJcmV0dXJuIHJjOwo+ICsKPiArCWluaXRfaW5pdGlhbF9jZmdfc3BhY2Vfc3RhdGUocGRldik7 Cj4gKwo+ICsJcmMgPSBpbml0X2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKPiArCWlmIChyYykK PiArCQlnb3RvIGVycjsKPiArCj4gKwlyYyA9IGluaXRfc2VydmljZV90aHJlYWQocGRldik7Cj4g KwlpZiAocmMpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2VycjoKPiArCWNs ZWFuX3BndF9kZXZpY2UocGRldik7CgpBZGQgdGVhcmRvd24gcGF0aCwgc2VlIGJlbG93LgoKPiAr CXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBwb3N0X2luaXRfcGd0X2RldmljZShz dHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGZyZWVfcGd0X2RldmljZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ ICsJc3RydWN0IGd2dF9ob3N0ICpob3N0ID0gJmd2dF9ob3N0Owo+ICsKPiArCW11dGV4X2xvY2so Jmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4gKwlpZHJfcmVtb3ZlKCZob3N0LT5kZXZpY2VfaWRy LCBwZGV2LT5pZCk7Cj4gKwltdXRleF91bmxvY2soJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4g Kwo+ICsJdmZyZWUocGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGd0X2RldmljZSAq YWxsb2NfcGd0X2RldmljZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sK PiArCXN0cnVjdCBndnRfaG9zdCAqaG9zdCA9ICZndnRfaG9zdDsKPiArCXN0cnVjdCBwZ3RfZGV2 aWNlICpwZGV2ID0gTlVMTDsKPiArCj4gKwlwZGV2ID0gdnphbGxvYyhzaXplb2YoKnBkZXYpKTsK PiArCWlmICghcGRldikKPiArCQlyZXR1cm4gTlVMTDsKClRoaXMgaXMgYSBtZW1vcnkgZXJyb3Is IHdvdWxkIGxpa2UgdG8gc2VlIHRoaXMgcHJvcGFnYXRlZCB1cCBhcwoKCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwoKPiArCj4gKwltdXRleF9sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ ICsJcGRldi0+aWQgPSBpZHJfYWxsb2MoJmhvc3QtPmRldmljZV9pZHIsIHBkZXYsIDAsIDAsIEdG UF9LRVJORUwpOwo+ICsJbXV0ZXhfdW5sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ICsK PiArCWlmIChwZGV2LT5pZCA8IDApIHsKPiArCQlndnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIHBn dCBkZXZpY2UgaWQuIik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwoKU2FtZSBoZXJlLCBwcm9w YWdhdGUgdGhlIGVycm9yLgoKPiArCW11dGV4X2luaXQoJnBkZXYtPmxvY2spOwo+ICsJcGRldi0+ ZGV2X3ByaXYgPSBkZXZfcHJpdjsKPiArCWlkcl9pbml0KCZwZGV2LT5pbnN0YW5jZV9pZHIpOwo+ ICsKPiArCXJldHVybiBwZGV2Owo+ICtlcnI6Cj4gKwlmcmVlX3BndF9kZXZpY2UocGRldik7CgpJ J2QgbGlrZSB0byBzZWUgYSB0ZWFyZG93biBwYXRoIGhlcmUuIFRoZW4gZnJlZV9wZ3RfZGV2aWNl KCkgKG9yIHJhdGhlcgpkZXN0cm95X3BndF9kZXZpY2UoKSBjYW4gZXhwZWN0IGV2ZXJ5dGhpbmcg dG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHdoZW4KaXQgaXQgaXMgY2FsbGVkLCBpdCBkb2Vzbid0IG5l ZWQgaWZzLiBUaGlzIG1ha2VzIHRoZSBkcml2ZXIgY29kZSBtb3JlCnJvYnVzdC4KCk9yIGFyZSB3 ZSBleHBlY3Rpbmcgb25seSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0cyBmb3Igc29tZSBy ZWFzb24/Cgo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3ZvaWQgZ3Z0X2Rlc3Ryb3lfcGd0 X2RldmljZSh2b2lkICpwcml2YXRlX2RhdGEpCj4gK3sKPiArCXN0cnVjdCBwZ3RfZGV2aWNlICpw ZGV2ID0gKHN0cnVjdCBwZ3RfZGV2aWNlICopcHJpdmF0ZV9kYXRhOwo+ICsKPiArCWNsZWFuX3Bn dF9kZXZpY2UocGRldik7Cj4gKwlmcmVlX3BndF9kZXZpY2UocGRldik7CgpXaHkgbXVsdGlwbGUg Y2FsbHMgdG8gZGVzdHJveSBhIGRldmljZSwgdGhlcmUncyBvbmx5IG9uZSBhbGxvYyBzdGlsbD8K Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBndnRfY3JlYXRlX3BndF9kZXZpY2UgLSBjcmVhdGUgYSBH VlQgcGh5c2ljYWwgZGV2aWNlCj4gKyAqIEBkZXY6IGRybSBkZXZpY2UKPiArICoKPiArICogVGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIHN0YWdlLCB0byBjcmVh dGUgYSBwaHlzaWNhbAo+ICsgKiBHVlQgZGV2aWNlIGFuZCBpbml0aWFsaXplIG5lY2Vzc2FyeSBH VlQgY29tcG9uZW50cyBmb3IgaXQuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIHBvaW50ZXIg dG8gdGhlIHBndF9kZXZpY2Ugc3RydWN0dXJlLCBOVUxMIGlmIGZhaWxlZC4KPiArICovCj4gK3Zv aWQgKmd2dF9jcmVhdGVfcGd0X2RldmljZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4gK3sKPiArCXN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2ID0gTlVMTDsKPiArCXN0cnVjdCBn dnRfaG9zdCAqaG9zdCA9ICZndnRfaG9zdDsKPiArCWludCByYzsKPiArCj4gKwlpZiAoIWhvc3Qt PmluaXRpYWxpemVkICYmICFndnRfaW5pdF9ob3N0KCkpIHsKPiArCQlndnRfZXJyKCJndnRfaW5p dF9ob3N0IGZhaWwiKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlndnRfZGJnX2Nv cmUoImNyZWF0ZSBuZXcgcGd0IGRldmljZSwgaTkxNSBkZXZfcHJpdjogJXAiLCBkZXZfcHJpdik7 Cj4gKwo+ICsJcGRldiA9IGFsbG9jX3BndF9kZXZpY2UoZGV2X3ByaXYpOwo+ICsJaWYgKCFwZGV2 KSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBndCBkZXZpY2Uu Iik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJpbml0IHBndCBk ZXZpY2UsIGlkICVkIiwgcGRldi0+aWQpOwo+ICsKPiArCXJjID0gaW5pdF9wZ3RfZGV2aWNlKHBk ZXYsIGRldl9wcml2KTsKPiArCWlmIChyYykgewoKSnVzdCBjYWxsIHRoZSByZXR1cm4gdmFsdWUg dmFyaWFibGUgcmV0IGxpa2UgZXZlcnl3aGVyZS4KCj4gKwkJZ3Z0X2VycigiZmFpbCB0byBpbml0 IHBoeXNpY2FsIGRldmljZSBzdGF0ZS4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwln dnRfZGJnX2NvcmUoInBndCBkZXZpY2UgY3JlYXRpb24gZG9uZSwgaWQgJWQiLCBwZGV2LT5pZCk7 Cj4gKwo+ICsJcmV0dXJuIHBkZXY7Cj4gK2VycjoKPiArCWlmIChwZGV2KSB7Cj4gKwkJZ3Z0X2Rl c3Ryb3lfcGd0X2RldmljZShwZGV2KTsKPiArCQlwZGV2ID0gTlVMTDsKPiArCX0KClByb3BlciBn b3RvIGxhYmVsIGJhc2VkIHRlYXJkb3duIHBhdGggc2hvdWxkIGJlIHVzZWQuCgplcnJfZGVzdHJv eV9wZ3Q6CglndnRfZGVzdHJveV9wZ3RfZGV2aWNlKHBkZXYpOwplcnI6Cj4gKwlyZXR1cm4gTlVM TDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZSAtIHBvc3Qg aW5pdCBhIEdWVCBwaHlzaWNhbCBkZXZpY2UKPiArICogQGRldjogZHJtIGRldmljZQoKRG91Ymxl IGNoZWNrIHRoZSBrZXJuZWxkb2NzIHRvIGJlIGNvcnJlY3QgcGVyIGFyZ3VtZW50cyBvZiBmdW5j dGlvbi4KCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2Yg dGhlIGluaXRpYWxpemF0aW9uIHN0YWdlLCB0bwo+ICsgKiBwb3N0LWluaXRpYWxpemUgYSBwaHlz aWNhbCBHVlQgZGV2aWNlIGFuZCBpbml0aWFsaXplIG5lY2Vzc2FyeQo+ICsgKiBHVlQgY29tcG9u ZW50cyByZWx5IG9uIGk5MTUgY29tcG9uZW50cy4KPiArICoKPiArICogUmV0dXJuczoKPiArICog emVybyBvbiBzdWNjZXNzLCBub24temVybyBpZiBmYWlsZWQuCj4gKyAqLwo+ICtpbnQgZ3Z0X3Bv c3RfaW5pdF9wZ3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0YSkKPiArewo+ICsJc3RydWN0IHBn dF9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBndF9kZXZpY2UgKilwcml2YXRlX2RhdGE7Cj4gKwlz dHJ1Y3QgZ3Z0X2hvc3QgKmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJaWYg KCFob3N0LT5pbml0aWFsaXplZCkgewo+ICsJCWd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVl biBpbml0aWFsaXplZC4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlndnRf ZGJnX2NvcmUoInBvc3QgaW5pdCBwZ3QgZGV2aWNlICVkIiwgcGRldi0+aWQpOwo+ICsKPiArCXJj ID0gcG9zdF9pbml0X3BndF9kZXZpY2UocGRldik7Cj4gKwlpZiAocmMpIHsKPiArCQlndnRfZXJy KCJmYWlsIHRvIHBvc3QgaW5pdCBwaHlzaWNhbCBkZXZpY2Ugc3RhdGUuIik7Cj4gKwkJcmV0dXJu IHJjOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9ndnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDQ1MDE5OAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBAQCAtMCwwICsx LDEwMCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKg SU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4g KyAqLwo+ICsKPiArI2lmbmRlZiBfR1ZUX0hfCj4gKyNkZWZpbmUgX0dWVF9IXwo+ICsKPiArI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiArCj4gKyNpbmNs dWRlICJkZWJ1Zy5oIgo+ICsjaW5jbHVkZSAicGFyYW1zLmgiCj4gKyNpbmNsdWRlICJyZWcuaCIK PiArI2luY2x1ZGUgImh5cGVyY2FsbC5oIgo+ICsjaW5jbHVkZSAibXB0LmgiCj4gKwo+ICsjZGVm aW5lIEdWVF9NQVhfVkdQVSA4Cj4gKwo+ICtlbnVtIHsKPiArCUdWVF9IWVBFUlZJU09SX1RZUEVf WEVOID0gMCwKPiArCUdWVF9IWVBFUlZJU09SX1RZUEVfS1ZNLAo+ICt9Owo+ICsKPiArc3RydWN0 IGd2dF9ob3N0IHsKPiArCWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gKwlpbnQgaHlwZXJ2aXNvcl90eXBl Owo+ICsJc3RydWN0IG11dGV4IGRldmljZV9pZHJfbG9jazsKPiArCXN0cnVjdCBpZHIgZGV2aWNl X2lkcjsKPiArCXN0cnVjdCBndnRfa2VybmVsX2RtICprZG07Cj4gK307Cj4gKwo+ICtleHRlcm4g c3RydWN0IGd2dF9ob3N0IGd2dF9ob3N0OwoKLS0+Cgo+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJu ZWxfZG0geGVuZ3Rfa2RtOwo+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0ga3ZtZ3Rfa2Rt OwoKPC0tIFRoZXNlIHNob3VsZCBsaWtlbHkgYmUgZGVjbGFyZWQgc29tZXdoZXJlIGluIGluY2x1 ZGUvIHJhdGhlciB0aGFuCmhlcmUuCgo+ICsKPiArLyogRGVzY3JpYmUgdGhlIGxpbWl0YXRpb24g b2YgSFcuKi8KPiArc3RydWN0IGd2dF9kZXZpY2VfaW5mbyB7Cj4gKwl1NjQgbWF4X2d0dF9nbV9z ejsKPiArCXUzMiBndHRfc3RhcnRfb2Zmc2V0Owo+ICsJdTMyIGd0dF9lbmRfb2Zmc2V0Owo+ICsJ dTMyIG1heF9ndHRfc2l6ZTsKPiArCXUzMiBndHRfZW50cnlfc2l6ZTsKPiArCXUzMiBndHRfZW50 cnlfc2l6ZV9zaGlmdDsKPiArCXUzMiBnbWFkcl9ieXRlc19pbl9jbWQ7Cj4gKwl1MzIgbW1pb19z aXplOwo+ICt9Owo+ICsKPiArc3RydWN0IHZndF9kZXZpY2Ugewo+ICsJaW50IGlkOwo+ICsJaW50 IHZtX2lkOwo+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXY7Cj4gKwlib29sIHdhcm5fdW50cmFj azsKPiArfTsKPiArCj4gK3N0cnVjdCBwZ3RfZGV2aWNlIHsKCkNvbW1lbnRzIHRvIHRoaXMgYW5k IG90aGVyIHN0cnVjdHMgYWJvdXQgd2hhdCB0aGUgbWVtZWJlcnMgYXJlLgoKPiArCXN0cnVjdCBt dXRleCBsb2NrOwo+ICsJaW50IGlkOwo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdjsKPiArCXN0cnVjdCBpZHIgaW5zdGFuY2VfaWRyOwo+ICsKPiArCXN0cnVjdCBndnRf ZGV2aWNlX2luZm8gZGV2aWNlX2luZm87Cj4gKwo+ICsJdTggaW5pdGlhbF9jZmdfc3BhY2VbR1ZU X0NGR19TUEFDRV9TWl07Cj4gKwl1NjQgYmFyX3NpemVbR1ZUX0JBUl9OVU1dOwo+ICsKPiArCXU2 NCBndHRtbWlvX2Jhc2U7Cj4gKwl2b2lkICpndHRtbWlvX3ZhOwo+ICsKPiArCXU2NCBnbWFkcl9i YXNlOwo+ICsJdm9pZCAqZ21hZHJfdmE7Cj4gKwo+ICsJdTMyIG1taW9fc2l6ZTsKPiArCXUzMiBy ZWdfbnVtOwo+ICsKPiArCXdhaXRfcXVldWVfaGVhZF90IHNlcnZpY2VfdGhyZWFkX3dxOwo+ICsJ c3RydWN0IHRhc2tfc3RydWN0ICpzZXJ2aWNlX3RocmVhZDsKPiArCXVuc2lnbmVkIGxvbmcgc2Vy dmljZV9yZXF1ZXN0Owo+ICt9Owo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9o eXBlcmNhbGwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMGE0MTg3 NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaHlwZXJj YWxsLmgKPiBAQCAtMCwwICsxLDMwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIw MTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9HVlRfSFlQRVJDQUxMX0hfCj4g KyNkZWZpbmUgX0dWVF9IWVBFUkNBTExfSF8KPiArCj4gK3N0cnVjdCBndnRfa2VybmVsX2RtIHsK PiArfTsKCkkgd291bGQgcHJlZmVyIG1vcmUgY29kZSBpbnRyb2R1Y2VkIGhlcmUgaW4gdGhlIGlu aXRpYWwgcGF0Y2gsIG9yIHRoaXMKY2FuIGJlIGludHJvZHVjZWQgbGF0ZXIgaW4gdGhlIHNlcmll cyBhcyB3aG9sZS4KCkl0IHVubmVjZXNzYXJpbHkgY29tcGxpY2F0ZXMgdGhlIHJldmlldyBpZiBz b21lIGZpbGVzIGFuZCBjYWxscyBhcmUKaW50cm9kdWNlZCB3aXRoIG5vIGRvY3VtZW50YXRpb24g YW5kIGltcGxlbWVudGF0aW9uIGFuZCBvbmx5IGxhdGVyCnRoZWlyIGltcGxlbWVudGF0aW9uIGlz IGFkZGVkLgoKSSBjYW4ndCByZWFsbHkgcmV2aWV3IGlmIHVzaW5nIGEgc3RydWN0dXJlIGlzIGEg Z29vZCBpZGVhIGlmIEkgY2FuJ3QKc2VlIHRoZSBjb250ZXh0IG9yIGltcGxlbWVudGF0aW9uIG9m IHRoZWlyIHVzZS4KCj4gKwo+ICsjZW5kaWYgLyogX0dWVF9IWVBFUkNBTExfSF8gKi8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21wdC5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Z0L21wdC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5l NTk0YmI4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9t cHQuaAo+IEBAIC0wLDAgKzEsMzQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS Cj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4g KyAqIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0dWVF9NUFRfSF8KPiArI2RlZmlu ZSBfR1ZUX01QVF9IXwo+ICsKPiArc3RydWN0IHZndF9kZXZpY2U7Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIGJvb2wgaHlwZXJ2aXNvcl9kZXRlY3RfaG9zdCh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gZmFs c2U7Cj4gK30KClRoaXMgaXMgYWxzbyBub3QgdmVyeSByZXZpZXdhYmxlIGFuZCB0aGVyZSdzIGFu IHVubmVjZXNzYXJ5IGZvcndhcmQKZGVjbGFyYXRpb24uCgo+ICsKPiArI2VuZGlmIC8qIF9HVlRf TVBUX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDM4MWQxNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKPiBAQCAtMCwwICsxLDMyIEBACj4gKy8qCj4g KyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFM TAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5j bHVkZSAiZ3Z0LmgiCj4gKwo+ICtzdHJ1Y3QgZ3Z0X2tlcm5lbF9wYXJhbXMgZ3Z0ID0gewo+ICsJ LmVuYWJsZSA9IGZhbHNlLAo+ICsJLmRlYnVnID0gMCwKPiArfTsKPiArCj4gK21vZHVsZV9wYXJh bV9uYW1lZChndnRfZW5hYmxlLCBndnQuZW5hYmxlLCBib29sLCAwNjAwKTsKClRoaXMgc2hvdWxk IGp1c3QgYmUKCgltb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlLCBndnQuZW5hYmxlLCBib29sLCAu Li4pCgpvdGhlcndpc2UgcGFyYW1ldGVyIGhhcyB0byBiZSBwYXNzZWQgYXQgYm9vdCB0aW1lIGxp a2UgdGhpczoKCQoJZ3Z0Lmd2dF9lbmFibGU9MQoKV2hlcmUgd2Ugd2FudAoKCWd2dC5lbmFibGU9 MQoKUmlnaHQ/Cgo+ICtNT0RVTEVfUEFSTV9ERVNDKGd2dF9lbmFibGUsICJFbmFibGUgSW50ZWwg R1ZULWcgaG9zdCBzdXBwb3J0Iik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9wYXJhbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDI5NTViOQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgKPiBAQCAtMCwwICsxLDM0 IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAq Cj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBO TyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICov Cj4gKwo+ICsjaWZuZGVmIF9HVlRfUEFSQU1TX0hfCj4gKyNkZWZpbmUgX0dWVF9QQVJBTVNfSF8K PiArCj4gK3N0cnVjdCBndnRfa2VybmVsX3BhcmFtcyB7Cj4gKwlib29sIGVuYWJsZTsKPiArCWlu dCBkZWJ1ZzsKClRoaXMgbWVtYmVyIGlzIHVudXNlZCBjdXJyZW50bHksIGNhbiBiZSBkcm9wcGVk LgoKPiArfTsKPiArCj4gK2V4dGVybiBzdHJ1Y3QgZ3Z0X2tlcm5lbF9wYXJhbXMgZ3Z0Owo+ICsK PiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9yZWcuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uZDM2M2I3NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndnQvcmVnLmgKPiBAQCAtMCwwICsxLDM0IEBACj4gKy8qCj4gKyAqIENvcHly 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+ICsjaWZuZGVmIF9HVlRf UkVHX0gKPiArI2RlZmluZSBfR1ZUX1JFR19ICj4gKwo+ICsjZGVmaW5lIEdWVF9DRkdfU1BBQ0Vf U1oJMjU2Cj4gKyNkZWZpbmUgR1ZUX0JBUl9OVU0JCTQKPiArCj4gKyNkZWZpbmUgR1ZUX1JFR19D RkdfU1BBQ0VfQkFSMAkweDEwCj4gKyNkZWZpbmUgR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMQkweDE4 Cj4gKyNkZWZpbmUgR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMgkweDIwCgpTb21lIGRvY3VtZW50YXRp b24gaGVyZSB3b3VsZCBiZSBncmVhdC4KCj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZG1hLmMKPiBpbmRleCAxYzZkMjI3Li5mM2JlZDM3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZG1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rt YS5jCj4gQEAgLTM1LDYgKzM1LDcgQEAKPiDCoCNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiDCoCNp bmNsdWRlIAo+IMKgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gKyNpbmNsdWRlICJpOTE1X2d2dC5o Igo+IMKgI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+IMKgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIK PiDCoCNpbmNsdWRlIAo+IEBAIC0xMDQ1LDYgKzEwNDYsMTAgQEAgaW50IGk5MTVfZHJpdmVyX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiDCoAo+IMKg CWludGVsX3VuY29yZV9pbml0KGRldik7Cj4gwqAKPiArCXJldCA9IGludGVsX2d2dF9pbml0KGRl dik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3VuY29yZV9maW5pOwo+ICsKPiDCoAlyZXQg PSBpOTE1X2dlbV9ndHRfaW5pdChkZXYpOwo+IMKgCWlmIChyZXQpCj4gwqAJCWdvdG8gb3V0X3Vu Y29yZV9maW5pOwoKVGhpcyBuZWVkcyB0byBiZWNvbWUgImdvdG8gb3V0X2d2dF9jbGVhbnVwOyIK Cj4gQEAgLTExMzUsNiArMTE0MCwxMiBAQCBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+IMKgCQlnb3RvIG91dF9wb3dlcl93 ZWxsOwo+IMKgCX0KPiDCoAo+ICsJcmV0ID0gaW50ZWxfZ3Z0X3Bvc3RfaW5pdChkZXYpOwo+ICsJ aWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBvc3QgaW5pdCBwZ3QgZGV2aWNl XG4iKTsKPiArCQlnb3RvIG91dF9wb3dlcl93ZWxsOwo+ICsJfQo+ICsKPiDCoAkvKgo+IMKgCcKg KiBOb3RpZnkgYSB2YWxpZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5nLAo+IMKgCcKgKiB3aGVu IHJ1bm5pbmcgaW5zaWRlIGEgVk0uCj4gQEAgLTExNzcsNiArMTE4OCw3IEBAIG91dF9nZW1fdW5s b2FkOgo+IMKgb3V0X2d0dDoKPiDCoAlpOTE1X2dsb2JhbF9ndHRfY2xlYW51cChkZXYpOwoKb3V0 X2d2dF9jbGVhbnVwOgoKPiDCoG91dF91bmNvcmVfZmluaToKPiAKPiArCWludGVsX2d2dF9jbGVh bnVwKGRldik7CgpUaGlzIG5lZWRzIHRvIGJlIGxpZnRlZCB1cCB0byBpdHMgb3duIGxhYmVsIGVu c3VyZSBwcm9wZXIgdGVhcmRvd24gaWYKaTkxNV9nZW1fZ3R0X2luaXQoKcKgZmFpbHMuCgo+IMKg CWludGVsX3VuY29yZV9maW5pKGRldik7Cj4gwqAJaTkxNV9tbWlvX2NsZWFudXAoZGV2KTsKPiDC oHB1dF9icmlkZ2U6Cj4gQEAgLTEyMjMsNiArMTIzNSw4IEBAIGludCBpOTE1X2RyaXZlcl91bmxv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiDCoAo+IMKgCWludGVsX21vZGVzZXRfY2xlYW51 cChkZXYpOwo+IMKgCj4gKwlpbnRlbF9ndnRfY2xlYW51cChkZXYpOwo+ICsKPiDCoAkvKgo+IMKg CcKgKiBmcmVlIHRoZSBtZW1vcnkgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgY2hpbGQgZGV2aWNl Cj4gwqAJwqAqIGNvbmZpZyBwYXJzZWQgZnJvbSBWQlQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBpbmRleCAyMGQ5ZGJkLi4yZjg5N2MzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g QEAgLTE3MDUsNiArMTcwNSwxMCBAQCBzdHJ1Y3QgaTkxNV93b3JrYXJvdW5kcyB7Cj4gwqAJdTMy IGh3X3doaXRlbGlzdF9jb3VudFtJOTE1X05VTV9SSU5HU107Cj4gwqB9Owo+IMKgCj4gK3N0cnVj dCBpOTE1X2d2dCB7Cj4gKwl2b2lkICpwZ3RfZGV2aWNlOwo+ICt9Owo+ICsKPiDCoHN0cnVjdCBp OTE1X3ZpcnR1YWxfZ3B1IHsKPiDCoAlib29sIGFjdGl2ZTsKPiDCoH07Cj4gQEAgLTE3NDQsNiAr MTc0OCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiDCoAo+IMKgCXN0cnVjdCBpOTE1 X3ZpcnR1YWxfZ3B1IHZncHU7Cj4gwqAKPiArCXN0cnVjdCBpOTE1X2d2dCBndnQ7Cj4gKwo+IMKg CXN0cnVjdCBpbnRlbF9ndWMgZ3VjOwo+IMKgCj4gwqAJc3RydWN0IGludGVsX2NzciBjc3I7Cj4g QEAgLTI3ODAsNiArMjc4NiwxMiBAQCB2b2lkIGludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0X19s b2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IMKgdm9pZCBpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dF9fbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiDCoAkJCQkJZW51bSBmb3JjZXdha2VfZG9tYWlucyBkb21haW5zKTsKPiDCoHZvaWQg YXNzZXJ0X2ZvcmNld2FrZXNfaW5hY3RpdmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9ndnRfYWN0aXZlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiB0b19pOTE1KGRldiktPmd2dC5wZ3RfZGV2 aWNlID8gdHJ1ZSA6IGZhbHNlOwo+ICt9Cj4gKwo+IMKgc3RhdGljIGlubGluZSBib29sIGludGVs X3ZncHVfYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gwqB7Cj4gwqAJcmV0dXJuIHRv X2k5MTUoZGV2KS0+dmdwdS5hY3RpdmU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3Z0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4zY2E3MjMyCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3Z0LmMKPiBAQCAtMCwwICsxLDkzIEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBF VkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG Uk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfZ3Z0LmgiCj4gKwo+ ICsvKioKPiArICogRE9DOiBJbnRlbCBHVlQtZyBob3N0IHN1cHBvcnQKPiArICoKPiArICogSW50 ZWwgR1ZULWcgaXMgYSBncmFwaGljcyB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5IHdoaWNoIHNo YXJlcyB0aGUKPiArICogR1BVIGFtb25nIG11bHRpcGxlIHZpcnR1YWwgbWFjaGluZXMgb24gYSB0 aW1lLXNoYXJpbmcgYmFzaXMuIEVhY2gKPiArICogdmlydHVhbCBtYWNoaW5lIGlzIHByZXNlbnRl ZCBhIHZpcnR1YWwgR1BVICh2R1BVKSwgd2hpY2ggaGFzIGVxdWl2YWxlbnQKPiArICogZmVhdHVy ZXMgYXMgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgR1BVIChwR1BVKSwgc28gaTkxNSBkcml2ZXIg Y2FuIHJ1bgo+ICsgKiBzZWFtbGVzc2x5IGluIGEgdmlydHVhbCBtYWNoaW5lLiBUaGlzIGZpbGUg cHJvdmlkZXMgdGhlIGVuZ2xpZ2h0bWVudHMKPiArICogb2YgR1ZUIGFuZCB0aGUgbmVjZXNzYXJ5 IGNvbXBvbmVudHMgdXNlZCBieSBHVlQgaW4gaTkxNSBkcml2ZXIuCj4gKyAqLwo+ICsKPiArLyoq Cj4gKyAqIGludGVsX2d2dF9pbml0IC0gaW5pdGlhbGl6ZSBHVlQgY29tcG9uZW50cyBhdCB0aGUg YmVnaW5uaW5nIG9mIGk5MTUKPiArICogZHJpdmVyIGxvYWRpbmcuCj4gKyAqIEBkZXY6IGRybSBk ZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5u aW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwKPiArICogdG8gaW5pdGlhbGl6ZSB0aGUg R1ZUIGNvbXBvbmVudHMgdGhhdCBoYXZlIHRvIGJlIGluaXRpYWxpemVkCj4gKyAqIGJlZm9yZSBI VyBnZXRzIHRvdWNoZWQgYnkgb3RoZXIgaTkxNSBjb21wb25lbnRzLgo+ICsgKi8KPiAraW50IGlu dGVsX2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCj4gKwlkZXZfcHJpdi0+ Z3Z0LnBndF9kZXZpY2UgPSBndnRfY3JlYXRlX3BndF9kZXZpY2UoZGV2X3ByaXYpOwo+ICsJaWYg KGludGVsX2d2dF9hY3RpdmUoZGV2KSkKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJHVlQtZyBpcyBy dW5uaW5nIGluIGhvc3QgbW9kZVxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8q Kgo+ICsgKiBpbnRlbF9ndnRfcG9zdF9pbml0IC0gaW5pdGlhbGl6ZSBHVlQgY29tcG9uZW50cyBh dCB0aGUgZW5kIG9mIGk5MTUKPiArICogZHJpdmVyIGxvYWRpbmcuCj4gKyAqIEBkZXY6IGRybSBk ZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9m IHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwKPiArICogdG8gaW5pdGlhbGl6ZSB0aGUgR1ZUIGNv bXBvbmVudHMgdGhhdCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIGFmdGVyCj4gKyAqIG90aGVyIGk5 MTUgY29tcG9uZW50cyBhcmUgcmVhZHkuCj4gKyAqLwo+ICtpbnQgaW50ZWxfZ3Z0X3Bvc3RfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwo+ICsJaWYgKCFpbnRlbF9ndnRfYWN0aXZl KGRldikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGd2dF9wb3N0X2luaXRfcGd0X2Rl dmljZShkZXZfcHJpdi0+Z3Z0LnBndF9kZXZpY2UpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50 ZWxfZ3Z0X2NsZWFudXAgLSBjbGVhbnVwIEdWVCBjb21wb25lbnRzIHdoZW4gaTkxNSBkcml2ZXIg aXMgdW5sb2FkaW5nCj4gKyAqIEBkZXY6IGRybSBkZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgaTkxNSBkcml2ZXIgdW5sb2FkaW5nIHN0YWdlLCB0byBz aHV0ZG93bgo+ICsgKiBHVlQgY29tcG9uZW50cyBhbmQgcmVsZWFzZSB0aGUgcmVsYXRlZCByZXNv dXJjZXMuCj4gKyAqLwo+ICt2b2lkIGludGVsX2d2dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKPiArCj4gKwlpZiAoIWludGVsX2d2dF9hY3RpdmUoZGV2KSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJZ3Z0X2Rlc3Ryb3lfcGd0X2RldmljZShkZXZfcHJpdi0+Z3Z0LnBndF9kZXZpY2Up Owo+ICsJZGV2X3ByaXYtPmd2dC5wZ3RfZGV2aWNlID0gTlVMTDsKPiArfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ndnQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzBjYzIw Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5o Cj4gQEAgLTAsMCArMSw0OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK PiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAq IFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICog U09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSTkxNV9HVlRfSF8KPiArI2RlZmluZSBf STkxNV9HVlRfSF8KCkkgdGhpbmsgdGhpcyBmaWxlIGNvdWxkIGJlIGludGVsX2d2dC5oIChhbGwg cmVtYWluaW5nIGZ1bmN0aW9ucyBhcmUKaW50ZWxfZ3Z0KSwgYW5kIGhhdmUgcmVzcGVjdGl2ZSBp bnRlbF9ndnQuYyBmaWxlLgoKPiArCj4gKyNpZmRlZiBDT05GSUdfRFJNX0k5MTVfR1ZUCgpTdGFy dGluZyBoZXJlIC0tLT4KCj4gK2V4dGVybiB2b2lkICpndnRfY3JlYXRlX3BndF9kZXZpY2Uoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArZXh0ZXJuIGludCBndnRfcG9zdF9p bml0X3BndF9kZXZpY2Uodm9pZCAqZGF0YSk7Cj4gK2V4dGVybiB2b2lkIGd2dF9kZXN0cm95X3Bn dF9kZXZpY2Uodm9pZCAqZGF0YSk7Cj4gKwoKPC0tIHRvIGhlcmUsIHRoZXNlIHNob3VsZCBnbyB0 byB0aGVpciBvd24gaW5jbHVkZSBmaWxlIGF0CmluY2x1ZGUvZHJtL2k5MTVfZ3Z0LmggRm9yIGFu IGV4YW1wbGUsIHNlZSBpbmNsdWRlL2RybS9pOTE1X2RybS5oCgpUaGUgcmVzcGVjdGl2ZSBleHBv cnQgc3ltYm9scyB0aGVuIG5lZWQgdG8gYmUgZXhwb3J0ZWQsIEZvciBhbiBleGFtcGxlCnNlZTsK CglFWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dwdV9yYWlzZSk7Cgo+ICtleHRlcm4gaW50IGludGVs X2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICtleHRlcm4gaW50IGludGVsX2d2 dF9wb3N0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2V4dGVybiB2b2lkIGludGVs X2d2dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICsjZWxzZQo+ICtleHRlcm4g aW50IGludGVsX2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCgpUaGVzZSBzaG91bGQs IGJ5IGNvbnZlbnRpb24sIHJhdGhlciBiZSBzdGF0aWMgaW5saW5lOwoKc3RhdGljIGlubGluZSBp bnQgaW50ZWxfZ3Z0X2luaXQoLi4uKQoKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArZXh0ZXJu IGludCBpbnRlbF9ndnRfcG9zdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiAr CXJldHVybiAwOwo+ICt9Cj4gK2V4dGVybiB2b2lkIGludGVsX2d2dF9jbGVhbnVwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArfQo+ICsjZW5kaWYKPiArCj4gKyNlbmRpZiAvKiBfSTkx NV9HVlRfSF8gKi8KLS0gCkpvb25hcyBMYWh0aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENl bnRlcgpJbnRlbCBDb3Jwb3JhdGlvbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK