From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/7] drm/vc4: Add KMS support for Raspberry Pi. Date: Thu, 13 Aug 2015 23:17:55 +0200 Message-ID: <20150813211755.GE17734@phenom.ffwll.local> References: <1439427380-2436-1-git-send-email-eric@anholt.net> <1439427380-2436-4-git-send-email-eric@anholt.net> <20150813075141.GX17734@phenom.ffwll.local> <87d1yqq5po.fsf@eliezer.anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <87d1yqq5po.fsf@eliezer.anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: devicetree@vger.kernel.org, Stephen Warren , Lee Jones , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org T24gVGh1LCBBdWcgMTMsIDIwMTUgYXQgMDE6NDQ6MDNQTSAtMDcwMCwgRXJpYyBBbmhvbHQgd3Jv dGU6Cj4gRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cml0ZXM6Cj4gCj4gPiBPbiBX ZWQsIEF1ZyAxMiwgMjAxNSBhdCAwNTo1NjoxNlBNIC0wNzAwLCBFcmljIEFuaG9sdCB3cm90ZToK PiA+PiBUaGlzIGlzIHRoZSBzdGFydCBvZiBhIGZ1bGwgVkM0IGRyaXZlci4gIFJpZ2h0IG5vdyB0 aGlzIGp1c3Qgc3VwcG9ydHMKPiA+PiBjb25maWd1cmluZyB0aGUgZGlzcGxheSB1c2luZyBhIHBy ZS1leGlzdGluZyB2aWRlbyBtb2RlIChiZWNhdXNlCj4gPj4gY2hhbmdpbmcgdGhlIHBpeGVsIGNs b2NrIGlzbid0IGF2YWlsYWJsZSB5ZXQsIGFuZCBkb2Vzbid0IHdvcmsgd2hlbiBpdAo+ID4+IGlz KS4gIEhvd2V2ZXIsIHRoaXMgaXMgZW5vdWdoIGZvciBmYmNvbiBhbmQgYnJpbmdpbmcgdXAgWCB1 c2luZwo+ID4+IHhmODYtdmlkZW8tbW9kZXNldHRpbmcuCj4gPj4gCj4gPj4gU2lnbmVkLW9mZi1i eTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy9n cHUvZHJtL0tjb25maWcgICAgICAgICAgIHwgICAyICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgICAgICAgIHwgICAxICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmln ICAgICAgIHwgIDE0ICsKPiA+PiAgZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSAgICAgIHwg IDE4ICsrCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2JvLmMgICAgICB8ICA1NCArKysr Cj4gPj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYyAgICB8IDU4MyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rl YnVnZnMuYyB8ICAzOCArKysKPiA+PiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMgICAg IHwgMjQ5ICsrKysrKysrKysrKysrKwo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYu aCAgICAgfCAxMjMgKysrKysrKwo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9oZG1pLmMg ICAgfCA2NTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+PiAgZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMgICAgIHwgMTcyICsrKysrKysrKysKPiA+PiAgZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMgICAgIHwgIDg0ICsrKysrCj4gPj4gIGRyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3BsYW5lLmMgICB8IDMyMCArKysrKysrKysrKysrKysrKysrCj4gPj4g IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3JlZ3MuaCAgICB8IDU2MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4+ICAxNCBmaWxlcyBjaGFuZ2VkLCAyODcxIGluc2VydGlvbnMo KykKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZwo+ ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZQo+ID4+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+ID4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jCj4gPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kZWJ1Z2ZzLmMKPiA+PiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCj4gPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+ID4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaGRtaS5jCj4gPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYwo+ID4+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKPiA+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKPiA+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3JlZ3MuaAo+ID4KPiA+IE1hZGUgYSBx dWljayBwYXNzIGFuZCBmb3VuZCBhIGZldyB0aGluZ3MgdG8gdXBkYXRlIHRvIGxhdGVzdCBkcm0K PiA+IGRldmVsb3BtZW50cy4gT2YgY291cnNlIGRpZG4ndCBsb29rIGF0IHRoZSBoYXJkd2FyZSBk ZXRhaWxzIHNpbmNlIG5vIGNsdWUsCj4gPiBidXQgbG9va3MgcmVhbGx5IG5pY2Ugb3ZlcmFsbC4K PiAKPiBJZiB5b3UgaGF2ZSBhbnl0aGluZyBhYm91dCB0aGUgaGFyZHdhcmUgdGhhdCB5b3Ugd2Vy ZSBjdXJpb3VzIGFib3V0LCBJJ2QKPiBiZSBpbnRlcmVzdGVkIGluIHRyeWluZyB0byBleHBsYWlu IHRoZW0gaW4gdGhlIGNvbW1lbnRzIHRvIHRoZSBleHRlbnQKPiB0aGF0IEkgY2FuLiAgSXQncyB1 bmZvcnR1bmF0ZSB0aGF0IHdlIGhhdmVuJ3Qgc2hpcHBlZCBkb2NzIGZvciB0aGUKPiBkaXNwbGF5 IHNpZGUgb2YgdGhpbmdzLCBidXQgaGFkIHRvIGRvIGEgbG90IG9mIHJlYWRpbmcgb2YgdGhlIHZl cmlsb2cKPiBqdXN0IHRvIGdldCB0aGlzIGZhciwgYW55d2F5LgoKVGhlIG9ubHkgdGhpbmcgSSBz cG90dGVkIGlzIHRoYXQgeW91IHJpZ2h0IG5vdyBvbmx5IHJlZ2lzdGVyIGEgcHJpbWFyeSBhbmQK Y3Vyc29yIHBsYW5lLiBJIGd1ZXNzIHRoZSBwbGFuIHdlIG9uY2UgZGlzY3Vzc2VkIGFib3V0IGV4 cG9zaW5nIHBpbGVzIG9mCnBsYW5lcyBmb3IgLW1vZGVzZXR0aW5nIGFjY2VsIGlzbid0IHRoZXJl IHlldD8KCkJ1dCBvdGhlcndpc2UgSSByZWFsbHkgZGlkbid0IGdvIGludG8gdGhlIGhhcmR3YXJl IGRldGFpbHMuCgo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPj4gaW5kZXggYzQ2Y2EzMS4uMTczMGE3NiAxMDA2NDQK PiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCj4gPj4gQEAgLTI0MCwzICsyNDAsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1 L2RybS9zdGkvS2NvbmZpZyIKPiA+PiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9LY29uZmlnIgo+ID4+ICAKPiA+PiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25m aWciCj4gPj4gKwo+ID4+ICtzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyIKPiA+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCj4gPj4gaW5kZXggNTcxM2QwNS4uYjk5MWFjNSAxMDA2NDQKPiA+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiA+PiBAQCAtNDIsNiArNDIsNyBAQCBvYmotJChDT05GSUdfRFJNX01HQSkJKz0gbWdhLwo+ ID4+ICBvYmotJChDT05GSUdfRFJNX0k4MTApCSs9IGk4MTAvCj4gPj4gIG9iai0kKENPTkZJR19E Uk1fSTkxNSkgICs9IGk5MTUvCj4gPj4gIG9iai0kKENPTkZJR19EUk1fTUdBRzIwMCkgKz0gbWdh ZzIwMC8KPiA+PiArb2JqLSQoQ09ORklHX0RSTV9WQzQpICArPSB2YzQvCj4gPj4gIG9iai0kKENP TkZJR19EUk1fQ0lSUlVTX1FFTVUpICs9IGNpcnJ1cy8KPiA+PiAgb2JqLSQoQ09ORklHX0RSTV9T SVMpICAgKz0gc2lzLwo+ID4+ICBvYmotJChDT05GSUdfRFJNX1NBVkFHRSkrPSBzYXZhZ2UvCj4g Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1 L2RybS92YzQvS2NvbmZpZwo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5kZXggMDAw MDAwMC4uMTMwY2M5NAo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L0tjb25maWcKPiA+PiBAQCAtMCwwICsxLDE0IEBACj4gPj4gK2NvbmZpZyBEUk1fVkM0 Cj4gPj4gKwl0cmlzdGF0ZSAiQnJvYWRjb20gVkM0IEdyYXBoaWNzIgo+ID4+ICsJZGVwZW5kcyBv biBBUkNIX0JDTTI4MzUKPiA+PiArCWRlcGVuZHMgb24gRFJNCj4gPj4gKwlzZWxlY3QgRFJNX0tN U19IRUxQRVIKPiA+PiArCXNlbGVjdCBEUk1fS01TX0ZCX0hFTFBFUgo+ID4+ICsJc2VsZWN0IERS TV9LTVNfQ01BX0hFTFBFUgo+ID4KPiA+IGRybS1taXNjL2xpbnV4LW5leHQgYWxyZWFkeSBoYXMg QXJjaGl0J3MgcGF0Y2hlcyB0byBlbmFibGUvZGlzYWJsZSBmYmRldgo+ID4gaW4gdGhlIGNvcmUg Y29kZSwgc28geW91IGRvbid0IG5lZWQgdG8gYm90aGVyIGFib3V0IHRoZXNlIHNlbGVjdHMgaGVy ZSBhbnkKPiA+IG1vcmUsIGl0J2xsIG5vLW9wIG91dCBpZiBkcm0gZmJkZXYgZW11bGF0aW9uIGlz bid0IGVuYWJsZWQuIFNpbmNlIHlvdSdyZQo+ID4gcmV1c2luZyBjbWEgZmJkZXYgaGVscGVycyBJ IGRvbid0IHRoaW5rIHRoZXJlJ3MgYW55IG5lZWQgZm9yIG90aGVyIGNoYW5nZXMKPiA+IGJlY2F1 c2Ugb2YgdGhpcy4KPiAKPiBJdCBzb3VuZHMgbGlrZSBJIHNob3VsZCByZWJhc2Ugb24gdGhhdCwg dGhlbj8KClllYWggcHJvYmFibHkgc2ltcGxlc3QuIEkgbWFkZSBhIHB1bGwgcmVxdWVzdCBmb3Ig ZHJtLW1pc2MgYW5kIGEgdGFnIGFuZApjYydlZCB5b3Ugb24gaXQgc28geW91IGhhdmUgYSBiYXNl bGluZS4KCj4gPj4gKwloZWxwCj4gPj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2 ZSBhIHN5c3RlbSB0aGF0IGhhcyBhIEJyb2FkY29tCj4gPj4gKwkgIFZDNCBHUFUsIHN1Y2ggYXMg dGhlIFJhc3BiZXJyeSBQaSBvciBvdGhlciBCQ00yNzA4L0JDTTI4MzUuCj4gPj4gKwo+ID4+ICsJ ICBUaGlzIGRyaXZlciByZXF1aXJlcyB0aGF0ICJhdm9pZF93YXJuaW5ncz0yIiBiZSBwcmVzZW50 IGluCj4gPj4gKwkgIHRoZSBjb25maWcudHh0IGZvciB0aGUgZmlybXdhcmUsIHRvIGtlZXAgaXQg ZnJvbSBzbWFzaGluZwo+ID4+ICsJICBvdXIgZGlzcGxheSBzZXR1cC4KPiA+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFr ZWZpbGUKPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+IGluZGV4IDAwMDAwMDAuLjRhYTA3 Y2EKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC9NYWtl ZmlsZQo+ID4+IEBAIC0wLDAgKzEsMTggQEAKPiA+PiArY2NmbGFncy15IDo9IC1JaW5jbHVkZS9k cm0KPiA+PiArCj4gPj4gKyMgUGxlYXNlIGtlZXAgdGhlc2UgYnVpbGQgbGlzdHMgc29ydGVkIQo+ ID4+ICsKPiA+PiArIyBjb3JlIGRyaXZlciBjb2RlCj4gPj4gK3ZjNC15IDo9IFwKPiA+PiArCXZj NF9iby5vIFwKPiA+PiArCXZjNF9jcnRjLm8gXAo+ID4+ICsJdmM0X2Rydi5vIFwKPiA+PiArCXZj NF9rbXMubyBcCj4gPj4gKwl2YzRfaGRtaS5vIFwKPiA+PiArCXZjNF9odnMubyBcCj4gPj4gKwl2 YzRfcGxhbmUubyBcCj4gPj4gKwkkKCkKPiA+PiArCj4gPj4gK3ZjNC0kKENPTkZJR19ERUJVR19G UykgKz0gdmM0X2RlYnVnZnMubwo+ID4+ICsKPiA+PiArb2JqLSQoQ09ORklHX0RSTV9WQzQpICAr PSB2YzQubwo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jIGIv ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfYm8uYwo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g Pj4gaW5kZXggMDAwMDAwMC4uZmVlOGNhYwo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCj4gPj4gQEAgLTAsMCArMSw1NCBAQAo+ID4+ICsv Kgo+ID4+ICsgKiAgQ29weXJpZ2h0IMKpIDIwMTUgQnJvYWRjb20KPiA+PiArICoKPiA+PiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKPiA+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiA+PiArICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArLyogRE9DOiBW QzQgR0VNIEJPIG1hbmFnZW1lbnQgc3VwcG9ydC4KPiA+PiArICoKPiA+PiArICogVGhlIFZDNCBH UFUgYXJjaGl0ZWN0dXJlIChib3RoIHNjYW5vdXQgYW5kIHJlbmRlcmluZykgaGFzIGRpcmVjdAo+ ID4+ICsgKiBhY2Nlc3MgdG8gc3lzdGVtIG1lbW9yeSB3aXRoIG5vIE1NVSBpbiBiZXR3ZWVuLiAg VG8gc3VwcG9ydCBpdCwgd2UKPiA+PiArICogdXNlIHRoZSBHRU0gQ01BIGhlbHBlciBmdW5jdGlv bnMgdG8gYWxsb2NhdGUgY29udGlndW91cyByYW5nZXMgb2YKPiA+PiArICogcGh5c2ljYWwgbWVt b3J5IGZvciBvdXIgQk9zLgo+ID4+ICsgKi8KPiA+Cj4gPiBTaW5jZSB5b3UncmUgZG9pbmcga2Vy bmVsZG9jIGNvbnNpZGVyZWQgcHVsbGluZyBpdCBhbGwgaW50byBhIG5ldyB2YzQKPiA+IHNlY3Rp b24gaW4gdGhlIGRybSBkb2Nib29rIHRlbXBsYXRlPwo+IAo+IEkgaGFkbid0IGZvdW5kIHRoZSBk b2Nib29rIHRlbXBsYXRlLiAgSW50ZXJlc3RpbmcuICBJJ2xsIHRyeSB0byBjb29rIHVwCj4gc29t ZSBnZW5lcmFsIHZjNCBkb2NzIGZvciB0aGF0LiAgSSB0aGluayB0aGF0IGNvdWxkIGJlIGEgc2Vw YXJhdGUKPiBjb21taXQsIHRob3VnaD8KClN1cmUuIFJlYWxseSBqdXN0IGZvciB5b3Vyc2VsZiBh bmQgb3RoZXIgcGVvcGxlIGhhY2tpbmcgb24gdGhpcy4gYnR3CnRoZXJlJ3Mgc29tZSB3b3JrIGlu dGVsIHNwb25zb3JzIGZyb20gY29sbGFib3JhIHRvIGltcHJvdmUga2VybmVsZG9jCmNvbW1lbnRz IHdpdGggYXV0b21hdGVkIGh5cGVybGlua2luZywgbWFya2Rvd24gYW5kIGEgZmV3IG90aGVyIHRo aW5ncy4gQnV0CnVuZm9ydHVuYXRlbHkgbm90IHlldCBtZXJnZWQuCgo+ID4+ICsKPiA+PiArI2lu Y2x1ZGUgInZjNF9kcnYuaCIKPiA+PiArCj4gPj4gK3N0cnVjdCB2YzRfYm8gKnZjNF9ib19jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCj4gPj4gK3sKPiA+PiArCXN0 cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7Cj4gPj4gKwo+ID4+ICsJY21hX29iaiA9 IGRybV9nZW1fY21hX2NyZWF0ZShkZXYsIHNpemUpOwo+ID4+ICsJaWYgKElTX0VSUihjbWFfb2Jq KSkKPiA+PiArCQlyZXR1cm4gTlVMTDsKPiA+PiArCWVsc2UKPiA+PiArCQlyZXR1cm4gdG9fdmM0 X2JvKCZjbWFfb2JqLT5iYXNlKTsKPiA+PiArfQo+ID4+ICsKPiA+PiAraW50IHZjNF9kdW1iX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKPiA+PiArCQkgICAgc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+PiArCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdz KQo+ID4+ICt7Cj4gPj4gKwlpbnQgbWluX3BpdGNoID0gRElWX1JPVU5EX1VQKGFyZ3MtPndpZHRo ICogYXJncy0+YnBwLCA4KTsKPiA+PiArCXN0cnVjdCB2YzRfYm8gKmJvID0gTlVMTDsKPiA+PiAr CWludCByZXQ7Cj4gPj4gKwo+ID4+ICsJaWYgKGFyZ3MtPnBpdGNoIDwgbWluX3BpdGNoKQo+ID4+ ICsJCWFyZ3MtPnBpdGNoID0gbWluX3BpdGNoOwo+ID4+ICsKPiA+PiArCWlmIChhcmdzLT5zaXpl IDwgYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQpCj4gPj4gKwkJYXJncy0+c2l6ZSA9IGFyZ3Mt PnBpdGNoICogYXJncy0+aGVpZ2h0Owo+ID4+ICsKPiA+PiArCW11dGV4X2xvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPiA+PiArCWJvID0gdmM0X2JvX2NyZWF0ZShkZXYsIHJvdW5kdXAoYXJncy0+ c2l6ZSwgUEFHRV9TSVpFKSk7Cj4gPj4gKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4 KTsKPiA+Cj4gPiBJJ20gb24gYSBzdHJ1Y3RfbXV0ZXggY3J1c2FkZSAodHJ5aW5nIHRvIGdldCBy aWQgb2YgaXQgaW4gY29yZSBhbmQgYWxsb3cKPiA+IGRyaXZlcnMgdG8gbGl2ZSB3aXRob3V0IGl0 KS4gT24gYSBxdWljayBsb29rIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZQo+ID4gYW55dGhpbmcg dGhhdCBuZWVkcyBzdHJ1Y3RfbXV0ZXggaGVyZSwgc28gcGxlYXNlIGp1c3QgcmVtb3ZlIGl0LiBJ ZiB0aGVyZQo+ID4gaXMgaW5kZWVkIHNvbWV0aGluZyB2YzQtaW50ZXJuYWwgeW91IHdhbnQgdG8g cHJvdGVjdCwgcGxlYXNlIHVzZSB5b3VyIG93bgo+ID4gZHJpdmVyLWludGVybmFsIG11dGV4IChl LmcuIGZvciBkcm1fbW0gb3IgY29tbWFuZCBzdWJtaXNzaW9uIG9yIHdoYXRldmVyKS4KPiA+Cj4g PiBidHcgdGhlIGxhc3QgYml0IGluIHRoZSBkcm0gY29yZSBmb3IgbW9kZXJuIGRyaXZlcnMgdGhh dCBuZWVkcwo+ID4gc3RydWN0X211dGV4IGlzIG1tYXBfb2Zmc2V0IGdlbSBvYmplY3QgbG9va3Vw LiBJIHBsYW4gdG8gcmVwbGFjZSB0aGF0IHdpdGgKPiA+IGtyZWZfZ2V0X3VubGVzc196ZXJvIHRy aWNrZXJ5LCB3aGljaCB3b3VsZCBtYWtlIHRoZSBjb3JlIGFuZCBhIGxvdCBvZgo+ID4gZHJpdmVy cyBzdHJ1Y3RfbXV0ZXggZnJlZSBhbmQgc28gcmVsZWdhdGUgaXQgbW9zdGx5IHRvIGEgbGVnYWN5 IHJvbGUgKGFuZAo+ID4gY2FuIGJlIGZvcmdvdHRlbikuCj4gCj4gU3RydWN0IG11dGV4IGlzIGhl cmUgYmVjYXVzZSB0aGlzIGNvZGUgaXMgZnJvbSB0aGUgVjNEIHNlcmllcywgd2l0aCB0aGUKPiBp bi1rZXJuZWwgQk8gY2FjaGUgcmlwcGVkIG91dCAoaXQgdHVybnMgb3V0IHRoYXQgdGhlIENNQSBh bGxvY2F0b3IgaXMKPiBzbG93LCBhbmQgeW91IGNhbid0IGp1c3QgdXNlcnNwYWNlIGNhY2hlIHNp bmNlIHdlIGhhdmUgdG8gZG8gYWxsb2NhdGlvbnMKPiB3aXRoaW4gdGhlIGtlcm5lbCB0byB0aGUg dHVuZSBvZiBhIGNvdXBsZSBwZXIgZHJhdyBhbmQgdGhhdCdzIHRvbyBtdWNoKS4KPiAKPiBJJ2xs IHB1bGwgdGhlIG11dGV4IGNhbGxzIG91dCBmb3Igbm93IHVudGlsIHRoZSBjYWNoZSBzdHVmZiBp cwo+IHN1Ym1pdHRlZC4KClllYWggSSBzdXNwZWN0ZWQgdGhhdCdzIGZvciBsYXRlci4gSWYgZmVh c2libGUgaXQnZCBiZSBncmVhdCBpZiB5b3UgY291bGQKcmVhcmNodGVjdCBpdCB0byB1c2UgYSBk cml2ZXItcHJpdmF0ZSBsb2NrLCBqdXN0IHRvIG5vdCBncm93IGFub3RoZXIgcGxhY2UKdXNpbmcg aXQuCgo+ID4+ICtzdGF0aWMgYm9vbCB2YzRfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKPiA+PiArCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ ID4+ICsJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCj4gPj4gK3sK PiA+PiArCXJldHVybiB0cnVlOwo+ID4+ICt9Cj4gPgo+ID4gbW9kZV9maXh1cCBvbiBjcnRjcyBp cyBvcHRpb25hbCBzaW5jZSA4NDBiZmU5NTMzODRhIGFuZCBJIGp1c3QgbWVyZ2VkIGEKPiA+IHBh dGNoIHRvIG1ha2UgaXQgb3B0aW9uYWwgZm9yIGVuY29kZXJzIHRvbyAod2hlbiB1c2luZyBhdG9t aWMgaGVscGVycwo+ID4gd2hpY2ggeW91IGRvKS4gWW91IGNhbiByZW1vdmUgdGhlbSBib3RoLgo+ IAo+IEdyZWF0ISAgSXQgZmVsdCBsaWtlIHRoZXJlIHdhcyBhICpsb3QqIG9mIGJvaWxlcnBsYXRl IHdoZW4gSSB3YXMgZmlyc3QKPiB3cml0aW5nIHRoaXMgc3R1ZmYsIGFuZCB0aGluZ3MgYXJlIHdh eSBiZXR0ZXIgdGhhbiB0aGV5IHVzZWQgdG8gYmUuCgpKdXN0IG5vdGljZWQgdGhhdCBjcnRjLT5h dG9taWNfYmVnaW4gaXMgb3B0aW9uYWwgdG9vLiBidHcgaWYgeW91IHNwb3QKYm9pbGVycGxhdGUg c29tZXdoZXJlIGVsc2UgcGxlYXNlIHJhaXNlIGl0IG9uIGlyYywgdGhlcmUncyBzdGlsbCBhIGxv dCBvZgpyb29tIGZvciBpbXByb3ZlbWVudCBmb3IgYXRvbWljIGhlbHBlcnMuCi1EYW5pZWwKLS0g CkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6 Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==