From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH v2 1/3] drm/fourcc: Add 'bpp' field for formats with non-integer bytes-per-pixel Date: Mon, 10 Sep 2018 21:53:25 +0200 Message-ID: <20180910195325.GC19774@phenom.ffwll.local> References: <20180823152343.6474-1-brian.starkey@arm.com> <20180823152343.6474-2-brian.starkey@arm.com> <20180831081730.GM21634@phenom.ffwll.local> <20180907124535.GA3461@DESKTOP-E1NTVVP.localdomain> <20180907192626.GA7176@phenom.ffwll.local> <20180910085003.GA36@DESKTOP-E1NTVVP.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id D35116E2E1 for ; Mon, 10 Sep 2018 19:53:29 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id a20-v6so17468404edd.4 for ; Mon, 10 Sep 2018 12:53:29 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180910085003.GA36@DESKTOP-E1NTVVP.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Brian Starkey Cc: airlied@linux.ie, alexandru-cosmin.gheorghe@arm.com, linux-kernel@vger.kernel.org, tfiga@chromium.org, seanpaul@chromium.org, dri-devel@lists.freedesktop.org, liviu.dudau@arm.com, ayan.halder@arm.com, hoegsberg@chromium.org List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBTZXAgMTAsIDIwMTggYXQgMDk6NTA6MDNBTSArMDEwMCwgQnJpYW4gU3RhcmtleSB3 cm90ZToKPiBIaSwKPiAKPiBPbiBGcmksIFNlcCAwNywgMjAxOCBhdCAwOToyODo0NFBNICswMjAw LCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gT24gRnJpLCBTZXAgMDcsIDIwMTggYXQgMDE6NDU6 MzZQTSArMDEwMCwgQnJpYW4gU3RhcmtleSB3cm90ZToKPiA+ID4gSGkgRGFuaWVsLAo+ID4gPiAK PiA+ID4gT24gRnJpLCBBdWcgMzEsIDIwMTggYXQgMTA6MTc6MzBBTSArMDIwMCwgRGFuaWVsIFZl dHRlciB3cm90ZToKPiA+ID4gPiBPbiBUaHUsIEF1ZyAyMywgMjAxOCBhdCAwNDoyMzo0MVBNICsw MTAwLCBCcmlhbiBTdGFya2V5IHdyb3RlOgo+ID4gPiA+ID4gU29tZSBmb3JtYXRzIGhhdmUgYSBu b24taW50ZWdlciBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLCB3aGljaCBjYW4ndAo+ID4gPiA+ ID4gYmUgaGFuZGxlZCB3aXRoIHRoZSBleGlzdGluZyAnY3BwJyBmaWVsZCBpbiBkcm1fZm9ybWF0 X2luZm8uIFRvIGhhbmRsZQo+ID4gPiA+ID4gdGhlc2UgZm9ybWF0cywgYWRkIGEgJ2JwcCcgZmll bGQsIHdoaWNoIGlzIG9ubHkgdXNlZCBpZiBjcHBbMF0gPT0gMC4KPiA+ID4gPiA+Cj4gPiA+ID4g PiBUaGlzIHVwZGF0ZXMgYWxsIHRoZSB1c2VycyBvZiBmb3JtYXQtPmNwcCBpbiB0aGUgY29yZSBE Uk0gY29kZSwKPiA+ID4gPiA+IGNvbnZlcnRpbmcgdGhlbSB0byB1c2UgYSBuZXcgZnVuY3Rpb24g dG8gZ2V0IHRoZSBiaXRzLXBlci1waXhlbCBmb3IgYW55Cj4gPiA+ID4gPiBmb3JtYXQuCj4gPiA+ ID4gPgo+ID4gPiA+ID4gSXQncyBhc3N1bWVkIHRoYXQgZHJpdmVycyB3aWxsIHVzZSB0aGUgJ2Jw cCcgZmllbGQgd2hlbiB0aGV5IGFkZCBzdXBwb3J0Cj4gPiA+ID4gPiBmb3IgcGl4ZWwgZm9ybWF0 cyB3aXRoIG5vbi1pbnRlZ2VyIGJ5dGVzLXBlci1waXhlbC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBT aWduZWQtb2ZmLWJ5OiBCcmlhbiBTdGFya2V5IDxicmlhbi5zdGFya2V5QGFybS5jb20+Cj4gPiA+ ID4KPiA+ID4gPiBJIGFzc3VtZSB5b3Ugc3RpbGwgcmVxdWlyZSB0aGF0IHN0dWZmIGlzIGV2ZW50 dWFsbHkgYWxpZ25lZCB0byBieXRlcz8gSW4KPiA+ID4gPiB0aGF0IGNhc2UsIGNhbiB3ZSBzdWJz dW1lIHRoaXMgaW50byB0aGUgdGlsZSB3b3JrIEFsZXggaXMgZG9pbmc/IEl0J3MKPiA+ID4gPiBl c3NlbnRpYWxseSBqdXN0IGFub3RoZXIgc3BlY2lhbCBjYXNlIG9mIGhhdmluZyBzdG9yYWdlLXNp emUgdW5pdHMKPiA+ID4gPiBtZWFzdXJlZCBpbiBieXRlcyB3aGljaCBzcGFuIG1vcmUgdGhhbiAx eDEgcGl4ZWwuIEFuZCBJIGtpbmRhIGRvbid0IHdhbnQgYQo+ID4gPiA+IG1ldHJpYyBwaWxlIG9m IHNwZWNpYWwgY2FzZXMgaGVyZSBpbiB0aGUgZm9ybWF0IGNvZGUsIGJlY2F1c2UgdGhhdCBqdXN0 Cj4gPiA+ID4gbWVhbnMgZXZlcnkgZHJpdmVyIGhhbmRsZXMgYSBkaWZmZXJlbnQgc3Vic2V0LCB3 aXRoIGRpZmZlcmVudCBidWdzLgo+ID4gPiA+IC1EYW5pZWwKPiA+ID4gCj4gPiA+IFNvcnJ5IGZv ciB0aGUgZGVsYXksIGJlZW4gc3RydWdnbGluZyB0byBmcmVlIHNvbWUgY3ljbGVzIHRvIHRoaW5r Cj4gPiA+IGFib3V0IHRoaXMuCj4gPiA+IAo+ID4gPiBJJ20gbm90IHN1cmUgaG93IHRvIHB1bGwg dGhpcyBpbiB3aXRoIHRoZSB0aWxpbmcgc3R1ZmYuIEluIHRoZSBBRkJDCj4gPiA+IGNhc2UgdGhl biBvdXIgQUZCQyBzdXBlcmJsb2NrcyBhcmUgYWx3YXlzIG5pY2Ugcm91bmQgbnVtYmVycyAoMjU2 Cj4gPiA+IHBpeGVscyksIGFuZCBzbyBpdCBkb2VzIGVuZCB1cCBiZWluZyBhIG11bHRpcGxlIG9m IGJ5dGVzLgo+ID4gPiAKPiA+ID4gSG93ZXZlciwgQUZCQyBzdXBwb3J0cyBkaWZmZXJlbnQgc3Vw ZXJibG9jayBzaXplcywgc28gcGlja2luZyBqdXN0IG9uZQo+ID4gPiBkb2Vzbid0IHJlYWxseSB3 b3JrIG91dCwgYW5kIHB1dHRpbmcgQUZCQyBpbiB0aGUgY29yZSBmb3JtYXQgdGFibGUKPiA+ID4g d2hpY2ggcmVmbGVjdHMgQUZCQyBkb2Vzbid0IHNlZW0gZ29vZC4KPiA+ID4gCj4gPiA+IFdlIGNv dWxkIG1ha2Ugc29tZXRoaW5nIHVwIChlLmcuIGNhbGwgdGhlc2UgZm9ybWF0cyAidGlsZWQiIHdp dGggMng0Cj4gPiA+IHRpbGVzLCB3aGljaCBndWFyYW50ZWVzIGEgbXVsdGlwbGUgb2YgOCksIGJ1 dCBpdCB3b3VsZCBiZSBhbgo+ID4gPiBhcmJpdHJhcmlseS1zZWxlY3RlZCBsaWUsIHdoaWNoIG9m dGVuIHNlZW1zIHRvIHNwZWxsIHRyb3VibGUuIElmIHdlCj4gPiA+IGRpZCBkbyB0aGF0LCB3b3Vs ZCB5b3UgcmUtZGVmaW5lIGNwcCBhcyAiYnl0ZXMtcGVyLXRpbGUiPyBPdGhlcndpc2UKPiA+ID4g d2Ugc3RpbGwgbmVlZCB0byBhZGQgYSBuZXcgZmllbGQgYW55d2F5Lgo+ID4gPiAKPiA+ID4gV2hh dCdzIHRoZSBwaWxlIG9mIHNwZWNpYWwgY2FzZXMgeW91J3JlIHdvcnJpZWQgYWJvdXQ/IFRoZSBo ZWxwZXIgSSd2ZQo+ID4gPiBhZGRlZCBoZXJlIG1lYW5zIHRoYXQgZHJpdmVycyB3aGljaCBuZWVk IHRvIGNhcmUgY2FuIHVzZSBvbmUgQVBJIGFuZAo+ID4gPiBub3QgaW1wbGVtZW50IHRoZWlyIG93 biBidWdzLgo+ID4gCj4gPiBJJ20gY29uZnVzZWQgLi4uIHRoZSBuZXcgYml0cy1wZXItcGl4ZWwg c3R1ZmYgeW91J3JlIGFkZGluZyBoZXJlIGlzIGZvcgo+ID4geXV2IGZvcm1hdHMsIG5vdCBhZmJj LiBJJ20ganVzdCBzdWdnZXN0aW5nIHdlIGhhdmUgb25seSAxIHdheSBvZgo+ID4gZGVzY3JpYmlu ZyBzdWNoIGZvcm1hdHMgdGhhdCBuZWVkIG1vcmUgZGVzY3JpcHRpdmUgcG93ZXIgdGhhbiBjcHAs IHdoZXRoZXIKPiA+IHRoZXkgaGF2ZSBzb21lIGtpbmQgb2YgcGl4ZWwtZ3JvdXBzIG9yIHNtYWxs IHRpbGVzLgo+IAo+IFdlbGwsIG5vdCByZWFsbHkuIFRoZSB0aHJlZSBmb3JtYXRzIHdoaWNoIGhh dmUgbm9uLWludGVnZXIgY3BwIGFyZToKPiBEUk1fRk9STUFUX1ZVWTEwMTAxMCwgRFJNX0ZPUk1B VF9ZVVY0MjBfOEJJVCBhbmQKPiBEUk1fRk9STUFUX1lVVjQyMF8xMEJJVC4gVGhlc2UgZm9ybWF0 cyBhcmUgb25seSB2YWxpZCB3aXRoIG5vbi1saW5lYXIKPiBtb2RpZmllcnMgKG5vIGxpbmVhciBl bmNvZGluZyBpcyBkZWZpbmVkKS4gTWFsaSBvbmx5IHN1cHBvcnRzIHRoZW0KPiB3aXRoIEFGQkMu Cj4gCj4gVGhlIGZvcm1hdHMgdGhlbXNlbHZlcyBoYXZlIG5vIG5vdGlvbiBvZiB0aWxpbmcgb3Ig Z3JvdXBpbmcgLSB0aGUKPiBtb2RpZmllciBhZGRzIHRoYXQuIEknbSBub3QgYXdhcmUgb2YgYW55 IG5vbi1BRkJDIHVzZXMgb2YgdGhlc2UKPiBmb3JtYXRzLCBzbyBJIGRvbid0IHdhbnQgdG8gIm1h a2UgdXAiIGEgc21hbGwtdGlsZSBsYXlvdXQgcmVzdHJpY3Rpb24KPiBmb3IgdGhlbS4KCkFoLCBJ IG1pc3NlZCB0aGF0LgoKPiA+IEZvciB2ZXJ5IHNwZWNpYWwgc3R1ZmYgbGlrZSBhZmJjIHlvdSBu ZWVkIHRvIHZhbGlkYXRlIGluIHRoZSBkcml2ZXIKPiA+IGFueXdheSwgdG9vIGNvbXBsaWNhdGVk LiBTbyBJIGhhdmUgbm8gaWRlYSB3aHkgeW91IGJyaW5nIHRoaXMgdXAgaGVyZT8KPiAKPiBTdXJl LCB3ZSBjYW4ganVzdCBsZXQgZHJpdmVycyBwcm92aWRlIHRoZWlyIG93biBmb3JtYXRfaW5mbydz IGZvcgo+IHRoZXNlLCBpZiB0aGF0J3Mgd2hhdCB5b3UgcHJlZmVyLiBUaGUgY29yZSBmb3JtYXQg Y2hlY2tpbmcgY29kZSBjYW4KPiBlcnJvciBvdXQgaWYgaXQgZXZlciBlbmNvdW50ZXJzIHRoZW0u CgpJdCdzIGZvcm1hdF9pbmZvIHdlJ3JlIHRhbGtpbmcgYWJvdXQuIFdoYXQgSSBtZWFuIGlzIHRo YXQgeW91IGp1c3Qgc2V0IGFsbAp0aGVzZSB0byAwIGFuZCBsZXQgdGhlIGZvcm1hdF9pbmZvIGNv ZGUgaWdub3JlIGl0LiBBbmQgdGhlbiBoYXZpbmcgYQpiZXNwb2tlIGRybV9mb3JtYXRfY2hlY2tf YWZiYyBoZWxwZXIgZnVuY3Rpb24gb3Igc2ltaWxhciwgd2hpY2ggY2hlY2tzIGFsbAp0aGUgbGF5 b3V0IHJlc3RyaWN0aW9ucyBvZiBhZmJjLgoKSSBzdGlsbCBtYWludGFpbiB0aGF0IGJwcCBhbmQg dGlsZV9zaXplIGFyZSBlcXVhdmFsZW50LCBhbmQgd2UgcmVhbGx5CmRvbid0IG5lZWQgYm90aC4g Qm90aCBhcmUgZGVmYWN0byBhIGZvcm0gb2YgbnVtZXJhdG9yL2RlbnVtZXJhdG9yLiBJZiB5b3UK ZG9uJ3QgbGlrZSB0aGF0IHlvdSBoYXZlIHRvIGludHJvZHVjZSAiZmFrZSIgdGlsZXMgZm9yIGFm YmMsIHRoZW4gd2UgY2FuCnJlbmFtZSB0aWxlX3NpemUgdG8gbnVtZXJhdG9yIGFuZCB0aWxlX2gv dyB0byBkZW51bWVyYXRvcl9oL3cuIERvZXNuJ3QKY2hhbmdlIG9uZSBiaXQgb2YgdGhlIG1hdGgu IGJwcCBzaW1wbHkgaGFyZGNvZGVzIGEgZGVudW1lcmF0b3Igb2YgOCwgYW5kIEkKZG9uJ3Qgc2Vl IHdoeSB3ZSBuZWVkIHRoYXQgc3BlY2lhbCBjYXNlLiBFeGNlcHQgaWYgeW91IGxvdmUgdG8gd3Jp dGUKcmVkdW5kYW50IHNlbGYgdGVzdHMgZm9yIGFsbCB0aGUgbWF0aCA6LSkKClNvIHR3byBvcHRp b25zIHRoYXQgSSB0aGluayBhcmUgcmVhc29uYWJsZToKLSBvbmUgY29tbW9uIG51bWVyYXRvci9k ZW51bWVyYXRvci4gSSBkb24ndCBjYXJlIGhvdyB5b3UgY2FsbCB0aGF0CiAgYmlrZXNoZWQuCi0g ZG9uJ3QgY2hlY2sgYWZiYyB1c2luZyBmb3JtYXRfaW5mbywgaGF2ZSB5b3VyIG93biBoZWxwZXIg dGhhdCBkb2VzIHRoYXQKICB1c2luZyBjdXN0b20gY29kZS4KCkNoZWVycywgRGFuaWVsCgo+IENo ZWVycywKPiAtQnJpYW4KPiAKPiA+IC1EYW5pZWwKPiA+IAo+ID4gPiAKPiA+ID4gQ2hlZXJzLAo+ ID4gPiAtQnJpYW4KPiA+ID4gCj4gPiA+ID4KPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5jICAgICAgICAgIHwgIDYgKysrLQo+ID4gPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgICAgICAgICAgICAgIHwgIDggKysr LS0KPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jICAgICAgICAgICAgICAg ICB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dw dS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgICAgICAgICAgICB8ICA4ICsrLS0tCj4gPiA+ID4gPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmMgfCAgMyArLQo+ID4g PiA+ID4gIGluY2x1ZGUvZHJtL2RybV9mb3VyY2MuaCAgICAgICAgICAgICAgICAgICAgIHwgIDQg KysrCj4gPiA+ID4gPiAgNiBmaWxlcyBjaGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCA5IGRlbGV0 aW9ucygtKQo+ID4gPiA+ID4KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2ZiX2NtYV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5j Cj4gPiA+ID4gPiBpbmRleCAxODZkMDBhZGZiNWYuLmUyNzlkNzBkM2U2MCAxMDA2NDQKPiA+ID4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfY21hX2hlbHBlci5jCj4gPiA+ID4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2NtYV9oZWxwZXIuYwo+ID4gPiA+ID4gQEAgLTEx OCwxMyArMTE4LDE3IEBAIGRtYV9hZGRyX3QgZHJtX2ZiX2NtYV9nZXRfZ2VtX2FkZHIoc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJt X2dlbV9jbWFfb2JqZWN0ICpvYmo7Cj4gPiA+ID4gPiAgCWRtYV9hZGRyX3QgcGFkZHI7Cj4gPiA+ ID4gPiArCXU4IGJwcCA9IGRybV9mb3JtYXRfaW5mb19wbGFuZV9icHAoZmItPmZvcm1hdCwgcGxh bmUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiBUaGlzIGNhbid0IHdvcmsgZm9yIG5vbi1p bnRlZ2VyIGJ5dGVzLXBlci1waXhlbCAqLwo+ID4gPiA+ID4gKwlXQVJOX09OKGJwcCAlIDgpOwo+ ID4gPiA+ID4KPiA+ID4gPiA+ICAJb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgcGxh bmUpOwo+ID4gPiA+ID4gIAlpZiAoIW9iaikKPiA+ID4gPiA+ICAJCXJldHVybiAwOwo+ID4gPiA+ ID4KPiA+ID4gPiA+ICAJcGFkZHIgPSBvYmotPnBhZGRyICsgZmItPm9mZnNldHNbcGxhbmVdOwo+ ID4gPiA+ID4gLQlwYWRkciArPSBmYi0+Zm9ybWF0LT5jcHBbcGxhbmVdICogKHN0YXRlLT5zcmNf eCA+PiAxNik7Cj4gPiA+ID4gPiArCXBhZGRyICs9IChicHAgLyA4KSAqIChzdGF0ZS0+c3JjX3gg Pj4gMTYpOwo+ID4gPiA+ID4gIAlwYWRkciArPSBmYi0+cGl0Y2hlc1twbGFuZV0gKiAoc3RhdGUt PnNyY195ID4+IDE2KTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgCXJldHVybiBwYWRkcjsKPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+ID4gPiA+ID4gaW5kZXggMDY0NmIxMDgwMzBiLi5h YjM2OWYyNTBhZjQgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Zi X2hlbHBlci5jCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5j Cj4gPiA+ID4gPiBAQCAtMTU3Miw2ICsxNTcyLDcgQEAgaW50IGRybV9mYl9oZWxwZXJfY2hlY2tf dmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7Cj4gPiA+ID4gPiAgCWludCBkZXB0aDsK PiA+ID4gPiA+ICsJdTggYnBwID0gZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2JwcChmYi0+Zm9ybWF0 LCAwKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgCWlmICh2YXItPnBpeGNsb2NrICE9IDAgfHwgaW5f ZGJnX21hc3RlcigpKQo+ID4gPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiBAQCAt MTU4MCwxNCArMTU4MSwxNCBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9jaGVja192YXIoc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICp2YXIsCj4gPiA+ID4gPiAgCSAqIENoYW5nZXMgc3RydWN0IGZiX3Zh cl9zY3JlZW5pbmZvIGFyZSBjdXJyZW50bHkgbm90IHB1c2hlZCBiYWNrCj4gPiA+ID4gPiAgCSAq IHRvIEtNUywgaGVuY2UgZmFpbCBpZiBkaWZmZXJlbnQgc2V0dGluZ3MgYXJlIHJlcXVlc3RlZC4K PiA+ID4gPiA+ICAJICovCj4gPiA+ID4gPiAtCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IGZi LT5mb3JtYXQtPmNwcFswXSAqIDggfHwKPiA+ID4gPiA+ICsJaWYgKHZhci0+Yml0c19wZXJfcGl4 ZWwgIT0gYnBwIHx8Cj4gPiA+ID4gPiAgCSAgICB2YXItPnhyZXMgPiBmYi0+d2lkdGggfHwgdmFy LT55cmVzID4gZmItPmhlaWdodCB8fAo+ID4gPiA+ID4gIAkgICAgdmFyLT54cmVzX3ZpcnR1YWwg PiBmYi0+d2lkdGggfHwgdmFyLT55cmVzX3ZpcnR1YWwgPiBmYi0+aGVpZ2h0KSB7Cj4gPiA+ID4g PiAgCQlEUk1fREVCVUcoImZiIHJlcXVlc3RlZCB3aWR0aC9oZWlnaHQvYnBwIGNhbid0IGZpdCBp biBjdXJyZW50IGZiICIKPiA+ID4gPiA+ICAJCQkgICJyZXF1ZXN0ICVkeCVkLSVkICh2aXJ0dWFs ICVkeCVkKSA+ICVkeCVkLSVkXG4iLAo+ID4gPiA+ID4gIAkJCSAgdmFyLT54cmVzLCB2YXItPnly ZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwsCj4gPiA+ID4gPiAgCQkJICB2YXItPnhyZXNfdmlydHVh bCwgdmFyLT55cmVzX3ZpcnR1YWwsCj4gPiA+ID4gPiAtCQkJICBmYi0+d2lkdGgsIGZiLT5oZWln aHQsIGZiLT5mb3JtYXQtPmNwcFswXSAqIDgpOwo+ID4gPiA+ID4gKwkJCSAgZmItPndpZHRoLCBm Yi0+aGVpZ2h0LCBicHApOwo+ID4gPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAg CX0KPiA+ID4gPiA+Cj4gPiA+ID4gPiBAQCAtMTk0OSwxMSArMTk1MCwxMiBAQCB2b2lkIGRybV9m Yl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZQo+ID4gPiA+ID4gIAkJCSAgICB1aW50MzJfdCBmYl93aWR0aCwgdWludDMy X3QgZmJfaGVpZ2h0KQo+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ICAJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOwo+ID4gPiA+ID4gKwl1OCBicHAgPSBkcm1fZm9ybWF0 X2luZm9fcGxhbmVfYnBwKGZiLT5mb3JtYXQsIDApOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICAJaW5m by0+cHNldWRvX3BhbGV0dGUgPSBmYl9oZWxwZXItPnBzZXVkb19wYWxldHRlOwo+ID4gPiA+ID4g IAlpbmZvLT52YXIueHJlc192aXJ0dWFsID0gZmItPndpZHRoOwo+ID4gPiA+ID4gIAlpbmZvLT52 YXIueXJlc192aXJ0dWFsID0gZmItPmhlaWdodDsKPiA+ID4gPiA+IC0JaW5mby0+dmFyLmJpdHNf cGVyX3BpeGVsID0gZmItPmZvcm1hdC0+Y3BwWzBdICogODsKPiA+ID4gPiA+ICsJaW5mby0+dmFy LmJpdHNfcGVyX3BpeGVsID0gYnBwOwo+ID4gPiA+ID4gIAlpbmZvLT52YXIuYWNjZWxfZmxhZ3Mg PSBGQl9BQ0NFTEZfVEVYVDsKPiA+ID4gPiA+ICAJaW5mby0+dmFyLnhvZmZzZXQgPSAwOwo+ID4g PiA+ID4gIAlpbmZvLT52YXIueW9mZnNldCA9IDA7Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMK PiA+ID4gPiA+IGluZGV4IDNiNDJjMjViZDU4ZC4uYmIyODkxOWMzMmYzIDEwMDY0NAo+ID4gPiA+ ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+ID4gPiA+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+ID4gPiA+ID4gQEAgLTI3MiwxMCArMjcyLDYwIEBA IGludCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKPiA+ ID4gPiA+ICAJaWYgKCFpbmZvIHx8IHBsYW5lID49IGluZm8tPm51bV9wbGFuZXMpCj4gPiA+ID4g PiAgCQlyZXR1cm4gMDsKPiA+ID4gPiA+Cj4gPiA+ID4gPiArCS8qCj4gPiA+ID4gPiArCSAqIE5v dCB2YWxpZCBmb3IgZm9ybWF0cyB3aXRoIG5vbi1pbnRlZ2VyIGNwcCwKPiA+ID4gPiA+ICsJICog dXNlIGRybV9mb3JtYXR7X2luZm99X3BsYW5lX2JwcCBpbnN0ZWFkCj4gPiA+ID4gPiArCSAqLwo+ ID4gPiA+ID4gKwlXQVJOX09OKCFpbmZvLT5jcHBbMF0pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g IAlyZXR1cm4gaW5mby0+Y3BwW3BsYW5lXTsKPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiAgRVhQT1JU X1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2NwcCk7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gKy8qKgo+ ID4gPiA+ID4gKyAqIGRybV9mb3JtYXRfcGxhbmVfYnBwIC0gZGV0ZXJtaW5lIHRoZSBiaXRzIHBl ciBwaXhlbCB2YWx1ZQo+ID4gPiA+ID4gKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZP Uk1BVF8qKQo+ID4gPiA+ID4gKyAqIEBwbGFuZTogcGxhbmUgaW5kZXgKPiA+ID4gPiA+ICsgKgo+ ID4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiArICogVGhlIGJpdHMgcGVyIHBpeGVsIHZh bHVlIGZvciB0aGUgc3BlY2lmaWVkIHBsYW5lLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gK2lu dCBkcm1fZm9ybWF0X3BsYW5lX2JwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSkKPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCWluZm8gPSBkcm1fZm9ybWF0X2luZm8oZm9ybWF0KTsKPiA+ ID4gPiA+ICsJaWYgKCFpbmZvKQo+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCXJldHVybiBkcm1fZm9ybWF0X2luZm9fcGxhbmVfYnBwKGluZm8sIHBsYW5lKTsK PiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2Jw cCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogZHJtX2Zvcm1hdF9p bmZvX3BsYW5lX2JwcCAtIGRldGVybWluZSB0aGUgYml0cyBwZXIgcGl4ZWwgdmFsdWUKPiA+ID4g PiA+ICsgKgo+ID4gPiA+ID4gKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMg Zm9ybWF0cyB3aXRoIGJvdGggaW50ZWdlcgo+ID4gPiA+ID4gKyAqIGFuZCBub24taW50ZWdlciBi eXRlcy1wZXItcGl4ZWwuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBAZm9ybWF0OiBwaXhl bCBmb3JtYXQgaW5mbyBzdHJ1Y3R1cmUKPiA+ID4gPiA+ICsgKiBAcGxhbmU6IHBsYW5lIGluZGV4 Cj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ID4gKyAqIFRoZSBi aXRzIHBlciBwaXhlbCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBwbGFuZS4KPiA+ID4gPiA+ICsg Ki8KPiA+ID4gPiA+ICtpbnQgZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2JwcChjb25zdCBzdHJ1Y3Qg ZHJtX2Zvcm1hdF9pbmZvICppbmZvLCBpbnQgcGxhbmUpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4g KwlpZiAocGxhbmUgPj0gaW5mby0+bnVtX3BsYW5lcykKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoaW5mby0+Y3BwWzBdKQo+ID4gPiA+ID4gKwkJcmV0 dXJuIGluZm8tPmNwcFtwbGFuZV0gKiA4Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4g aW5mby0+YnBwW3BsYW5lXTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChk cm1fZm9ybWF0X2luZm9fcGxhbmVfYnBwKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICAvKioKPiA+ ID4gPiA+ICAgKiBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nIC0gZ2V0IHRoZSBo b3Jpem9udGFsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0b3IKPiA+ID4gPiA+ICAgKiBAZm9ybWF0 OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1l YnVmZmVyLmMKPiA+ID4gPiA+IGluZGV4IDhjNGQzMmFkY2MxNy4uN2UwMDM2MGZmNzBkIDEwMDY0 NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mcmFtZWJ1ZmZlci5jCj4gPiA+ ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKPiA+ID4gPiA+IEBA IC0xODUsMjAgKzE4NSwyMCBAQCBzdGF0aWMgaW50IGZyYW1lYnVmZmVyX2NoZWNrKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gPiA+ID4gPiAgCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcGxh bmVzOyBpKyspIHsKPiA+ID4gPiA+ICAJCXVuc2lnbmVkIGludCB3aWR0aCA9IGZiX3BsYW5lX3dp ZHRoKHItPndpZHRoLCBpbmZvLCBpKTsKPiA+ID4gPiA+ICAJCXVuc2lnbmVkIGludCBoZWlnaHQg PSBmYl9wbGFuZV9oZWlnaHQoci0+aGVpZ2h0LCBpbmZvLCBpKTsKPiA+ID4gPiA+IC0JCXVuc2ln bmVkIGludCBjcHAgPSBpbmZvLT5jcHBbaV07Cj4gPiA+ID4gPiArCQl1bnNpZ25lZCBpbnQgYnBw ID0gZHJtX2Zvcm1hdF9pbmZvX3BsYW5lX2JwcChpbmZvLCBpKTsKPiA+ID4gPiA+Cj4gPiA+ID4g PiAgCQlpZiAoIXItPmhhbmRsZXNbaV0pIHsKPiA+ID4gPiA+ICAJCQlEUk1fREVCVUdfS01TKCJu byBidWZmZXIgb2JqZWN0IGhhbmRsZSBmb3IgcGxhbmUgJWRcbiIsIGkpOwo+ID4gPiA+ID4gIAkJ CXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gIAkJfQo+ID4gPiA+ID4KPiA+ID4gPiA+IC0JCWlm ICgodWludDY0X3QpIHdpZHRoICogY3BwID4gVUlOVF9NQVgpCj4gPiA+ID4gPiArCQlpZiAoKHVp bnQ2NF90KSBESVZfUk9VTkRfVVAod2lkdGggKiBicHAsIDgpID4gVUlOVF9NQVgpCj4gPiA+ID4g PiAgCQkJcmV0dXJuIC1FUkFOR0U7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIAkJaWYgKCh1aW50NjRf dCkgaGVpZ2h0ICogci0+cGl0Y2hlc1tpXSArIHItPm9mZnNldHNbaV0gPiBVSU5UX01BWCkKPiA+ ID4gPiA+ICAJCQlyZXR1cm4gLUVSQU5HRTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAtCQlpZiAoci0+ cGl0Y2hlc1tpXSA8IHdpZHRoICogY3BwKSB7Cj4gPiA+ID4gPiArCQlpZiAoKHVpbnQ2NF90KSBy LT5waXRjaGVzW2ldICogOCA8ICh1aW50NjRfdCkgd2lkdGggKiBicHApIHsKPiA+ID4gPiA+ICAJ CQlEUk1fREVCVUdfS01TKCJiYWQgcGl0Y2ggJXUgZm9yIHBsYW5lICVkXG4iLCByLT5waXRjaGVz W2ldLCBpKTsKPiA+ID4gPiA+ICAJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICAJCX0KPiA+ ID4gPiA+IEBAIC00NzYsNyArNDc2LDcgQEAgaW50IGRybV9tb2RlX2dldGZiKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gPiA+ID4gPiAgCXItPmhlaWdodCA9IGZiLT5oZWlnaHQ7Cj4gPiA+ID4g PiAgCXItPndpZHRoID0gZmItPndpZHRoOwo+ID4gPiA+ID4gIAlyLT5kZXB0aCA9IGZiLT5mb3Jt YXQtPmRlcHRoOwo+ID4gPiA+ID4gLQlyLT5icHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF0gKiA4Owo+ ID4gPiA+ID4gKwlyLT5icHAgPSBkcm1fZm9ybWF0X2luZm9fcGxhbmVfYnBwKGZiLT5mb3JtYXQs IDApOwo+ID4gPiA+ID4gIAlyLT5waXRjaCA9IGZiLT5waXRjaGVzWzBdOwo+ID4gPiA+ID4KPiA+ ID4gPiA+ICAJLyogR0VUX0ZCKCkgaXMgYW4gdW5wcml2aWxlZ2VkIGlvY3RsIHNvIHdlIG11c3Qg bm90IHJldHVybiBhCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9n ZW1fZnJhbWVidWZmZXJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1 ZmZlcl9oZWxwZXIuYwo+ID4gPiA+ID4gaW5kZXggYWNmYmMwNjQxYTA2Li5kZmUyMjRjY2FlYmEg MTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZl cl9oZWxwZXIuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZnJhbWVi dWZmZXJfaGVscGVyLmMKPiA+ID4gPiA+IEBAIC0xNjEsNiArMTYxLDcgQEAgZHJtX2dlbV9mYl9j cmVhdGVfd2l0aF9mdW5jcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsCj4gPiA+ID4gPiAgCQl1bnNpZ25lZCBpbnQgd2lkdGggPSBtb2RlX2NtZC0+d2lkdGgg LyAoaSA/IGluZm8tPmhzdWIgOiAxKTsKPiA+ID4gPiA+ICAJCXVuc2lnbmVkIGludCBoZWlnaHQg PSBtb2RlX2NtZC0+aGVpZ2h0IC8gKGkgPyBpbmZvLT52c3ViIDogMSk7Cj4gPiA+ID4gPiAgCQl1 bnNpZ25lZCBpbnQgbWluX3NpemU7Cj4gPiA+ID4gPiArCQl1OCBicHAgPSBkcm1fZm9ybWF0X2lu Zm9fcGxhbmVfYnBwKGZiLT5mb3JtYXQsIGkpOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICAJCW9ianNb aV0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgbW9kZV9jbWQtPmhhbmRsZXNbaV0pOwo+ ID4gPiA+ID4gIAkJaWYgKCFvYmpzW2ldKSB7Cj4gPiA+ID4gPiBAQCAtMTcwLDcgKzE3MSw3IEBA IGRybV9nZW1fZmJfY3JlYXRlX3dpdGhfZnVuY3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IGRybV9maWxlICpmaWxlLAo+ID4gPiA+ID4gIAkJfQo+ID4gPiA+ID4KPiA+ID4gPiA+ICAJ CW1pbl9zaXplID0gKGhlaWdodCAtIDEpICogbW9kZV9jbWQtPnBpdGNoZXNbaV0KPiA+ID4gPiA+ IC0JCQkgKyB3aWR0aCAqIGluZm8tPmNwcFtpXQo+ID4gPiA+ID4gKwkJCSArIERJVl9ST1VORF9V UCh3aWR0aCAqIGJwcCwgOCkKPiA+ID4gPiA+ICAJCQkgKyBtb2RlX2NtZC0+b2Zmc2V0c1tpXTsK PiA+ID4gPiA+Cj4gPiA+ID4gPiAgCQlpZiAob2Jqc1tpXS0+c2l6ZSA8IG1pbl9zaXplKSB7Cj4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oIGIvaW5jbHVkZS9k cm0vZHJtX2ZvdXJjYy5oCj4gPiA+ID4gPiBpbmRleCAzZTg2NDA4ZGFjOWYuLmQ0YWY0ZGFiMTYy MyAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaAo+ID4gPiA+ ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCj4gPiA+ID4gPiBAQCAtMzYsNiArMzYs NyBAQCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMjsKPiA+ID4gPiA+ICAgKgl1c2UgaW4gbmV3IGNv ZGUgYW5kIHNldCB0byAwIGZvciBuZXcgZm9ybWF0cy4KPiA+ID4gPiA+ICAgKiBAbnVtX3BsYW5l czogTnVtYmVyIG9mIGNvbG9yIHBsYW5lcyAoMSB0byAzKQo+ID4gPiA+ID4gICAqIEBjcHA6IE51 bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwgKHBlciBwbGFuZSkKPiA+ID4gPiA+ICsgKiBAYnBwOiBO dW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwgKHBlciBwbGFuZSksIG9ubHkgdmFsaWQgaWYgY3BwWzBd ID09IDAuCj4gPiA+ID4gPiAgICogQGhzdWI6IEhvcml6b250YWwgY2hyb21hIHN1YnNhbXBsaW5n IGZhY3Rvcgo+ID4gPiA+ID4gICAqIEB2c3ViOiBWZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcg ZmFjdG9yCj4gPiA+ID4gPiAgICogQGhhc19hbHBoYTogRG9lcyB0aGUgZm9ybWF0IGVtYmVkcyBh biBhbHBoYSBjb21wb25lbnQ/Cj4gPiA+ID4gPiBAQCAtNDUsNiArNDYsNyBAQCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvIHsKPiA+ID4gPiA+ICAJdTggZGVwdGg7Cj4gPiA+ID4gPiAgCXU4IG51bV9w bGFuZXM7Cj4gPiA+ID4gPiAgCXU4IGNwcFszXTsKPiA+ID4gPiA+ICsJdTggYnBwWzNdOwo+ID4g PiA+ID4gIAl1OCBoc3ViOwo+ID4gPiA+ID4gIAl1OCB2c3ViOwo+ID4gPiA+ID4gIAlib29sIGhh c19hbHBoYTsKPiA+ID4gPiA+IEBAIC02Niw2ICs2OCw4IEBAIGRybV9nZXRfZm9ybWF0X2luZm8o c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ID4gPiA+ICB1aW50MzJfdCBkcm1fbW9kZV9sZWdh Y3lfZmJfZm9ybWF0KHVpbnQzMl90IGJwcCwgdWludDMyX3QgZGVwdGgpOwo+ID4gPiA+ID4gIGlu dCBkcm1fZm9ybWF0X251bV9wbGFuZXModWludDMyX3QgZm9ybWF0KTsKPiA+ID4gPiA+ICBpbnQg ZHJtX2Zvcm1hdF9wbGFuZV9jcHAodWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOwo+ID4gPiA+ ID4gK2ludCBkcm1fZm9ybWF0X3BsYW5lX2JwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7 Cj4gPiA+ID4gPiAraW50IGRybV9mb3JtYXRfaW5mb19wbGFuZV9icHAoY29uc3Qgc3RydWN0IGRy bV9mb3JtYXRfaW5mbyAqZm9ybWF0LCBpbnQgcGxhbmUpOwo+ID4gPiA+ID4gIGludCBkcm1fZm9y bWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4gPiA+ID4gPiAg aW50IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KTsK PiA+ID4gPiA+ICBpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90 IGZvcm1hdCwgaW50IHBsYW5lKTsKPiA+ID4gPiA+IC0tCj4gPiA+ID4gPiAyLjE2LjEKPiA+ID4g PiA+Cj4gPiA+ID4KPiA+ID4gPiAtLQo+ID4gPiA+IERhbmllbCBWZXR0ZXIKPiA+ID4gPiBTb2Z0 d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiA+ID4gPiBodHRwOi8vYmxvZy5mZnds bC5jaAo+ID4gCj4gPiAtLSAKPiA+IERhbmllbCBWZXR0ZXIKPiA+IFNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK