From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v3 11/12] drm/client: Add bootsplash client Date: Tue, 6 Mar 2018 10:12:55 +0100 Message-ID: <20180306091254.GJ22212@phenom.ffwll.local> References: <20180222200653.19453-1-noralf@tronnes.org> <20180222200653.19453-12-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 374548982A for ; Tue, 6 Mar 2018 09:12:59 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id i3so20665267wmi.4 for ; Tue, 06 Mar 2018 01:12:59 -0800 (PST) Content-Disposition: inline In-Reply-To: <20180222200653.19453-12-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, oneukum@suse.com, tiwai@suse.com, dri-devel@lists.freedesktop.org, laurent.pinchart@ideasonboard.com, Max Staudt , dh.herrmann@gmail.com, sndirsch@suse.com List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMDk6MDY6NTJQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IEp1c3QgYSBoYWNrIHRvIHRlc3QgdGhlIGNsaWVudCBBUEkuCj4gCj4gU2lnbmVk LW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpBZGRpbmcgdGhl IHN1c2UgZm9sa3Mgd2hvIHN1Ym1pdHRlZCB0aGUgYm9vdHNwbGFzaCBhIHdoaWxlIGFnbywgd291 bGQgYmUKZ3JlYXQgaWYgdGhleSBjb3VsZCBwaWNrIHRoaXMgdXAgYW5kIHJ1biB3aXRoIGl0LgoK PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnICAgICAgICAgIHwgICA1ICsK PiAgZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAgZHJp dmVycy9ncHUvZHJtL2NsaWVudC9kcm1fYm9vdHNwbGFzaC5jIHwgMjA1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjExIGluc2VydGlvbnMoKykK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9jbGllbnQvZHJtX2Jvb3RzcGxh c2guYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcKPiBpbmRleCA3MzkwMmFiNDRjNzUuLjE2Y2Yx ZTE0NjIwYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcKPiBAQCAtMTcsNCArMTcsOSBAQCBj b25maWcgRFJNX0NMSUVOVF9GQkRFVgo+ICAJaGVscAo+ICAJICBHZW5lcmljIGZiZGV2IGVtdWxh dGlvbgo+ICAKPiArY29uZmlnIERSTV9DTElFTlRfQk9PVFNQTEFTSAo+ICsJdHJpc3RhdGUgIkRS TSBCb290c3BsYXNoIgo+ICsJaGVscAo+ICsJICBEUk0gQm9vdHNwbGFzaAo+ICsKPiAgZW5kbWVu dQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2NsaWVudC9NYWtlZmlsZQo+IGluZGV4IDNmZjY5NDQyOWRlYy4uODY2MDUzMGU0 NjQ2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9jbGllbnQvTWFrZWZpbGUKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxlCj4gQEAgLTEsMyArMSw0IEBACj4gICMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAgCj4gIG9iai0kKENPTkZJR19EUk1f Q0xJRU5UX0ZCREVWKSArPSBkcm1fZmJkZXYubwo+ICtvYmotJChDT05GSUdfRFJNX0NMSUVOVF9C T09UU1BMQVNIKSArPSBkcm1fYm9vdHNwbGFzaC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9jbGllbnQvZHJtX2Jvb3RzcGxhc2guYyBiL2RyaXZlcnMvZ3B1L2RybS9jbGllbnQvZHJt X2Jvb3RzcGxhc2guYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAw Li40M2M3MDM2MDZlNzQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ns aWVudC9kcm1fYm9vdHNwbGFzaC5jCj4gQEAgLTAsMCArMSwyMDUgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5o Pgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1fY2xpZW50Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2Rydi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fbW9kZXMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiArCj4gK3N0cnVjdCBk cm1fYm9vdHNwbGFzaCB7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudDsKPiArCXN0 cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9i dWZmZXIgKmJ1ZmZlclsyXTsKPiArCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrZXI7Cj4gKwlib29s IHN0b3A7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdTMyIGRybV9ib290c3BsYXNoX2NvbG9yX3RhYmxl WzNdID0gewo+ICsJMHgwMGZmMDAwMCwgMHgwMDAwZmYwMCwgMHgwMDAwMDBmZiwKPiArfTsKPiAr Cj4gKy8qIERyYXcgYSBib3ggd2l0aCBjaGFuZ2luZyBjb2xvcnMgKi8KPiArc3RhdGljIHZvaWQK PiArZHJtX2Jvb3RzcGxhc2hfZHJhdyhzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlciwg dW5zaWduZWQgaW50IHNlcXVlbmNlKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgeCwgeTsKPiArCXUz MiAqcGl4Owo+ICsKPiArCXBpeCA9IGJ1ZmZlci0+dmFkZHI7Cj4gKwlwaXggKz0gKChidWZmZXIt PmhlaWdodCAvIDIpIC0gNTApICogYnVmZmVyLT53aWR0aDsKPiArCXBpeCArPSAoYnVmZmVyLT53 aWR0aCAvIDIpIC0gNTA7Cj4gKwo+ICsJZm9yICh5ID0gMDsgeSA8IDEwMDsgeSsrKSB7Cj4gKwkJ Zm9yICh4ID0gMDsgeCA8IDEwMDsgeCsrKQo+ICsJCQkqcGl4KysgPSBkcm1fYm9vdHNwbGFzaF9j b2xvcl90YWJsZVtzZXF1ZW5jZV07Cj4gKwkJcGl4ICs9IGJ1ZmZlci0+d2lkdGggLSAxMDA7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9ib290c3BsYXNoX3dvcmtlcihzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBkcm1fYm9vdHNwbGFzaCAqc3BsYXNo ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fYm9vdHNwbGFzaCwKPiArCQkJCQkJICAg ICB3b3JrZXIpOwo+ICsJc3RydWN0IGRybV9ldmVudCAqZXZlbnQ7Cj4gKwl1bnNpZ25lZCBpbnQg aSA9IDAsIHNlcXVlbmNlID0gMCwgZmJfaWQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXdoaWxlICgh c3BsYXNoLT5zdG9wKSB7Cj4gKwkJLyogQXJlIHdlIHN0aWxsIGluIGNoYXJnZT8gKi8KPiArCQlm Yl9pZCA9IGRybV9jbGllbnRfZGlzcGxheV9jdXJyZW50X2ZiKHNwbGFzaC0+ZGlzcGxheSk7Cj4g KwkJaWYgKGZiX2lkICE9IHNwbGFzaC0+YnVmZmVyW2ldLT5mYl9pZHNbMF0pCj4gKwkJCWJyZWFr Owo+ICsKPiArCQkvKgo+ICsJCSAqIFdlIGNhbiByYWNlIHdpdGggdXNlcnNwYWNlIGhlcmUgYmV0 d2VlbiBjaGVja2luZyBhbmQgZG9pbmcKPiArCQkgKiB0aGUgcGFnZSBmbGlwLCBzbyBkb3VibGUg YnVmZmVyaW5nIGlzbid0IHN1Y2ggYSBnb29kIGlkZWEuCj4gKwkJICogVGVhcmluZyBwcm9iYWJs eSBpc24ndCBhIHByb2JsZW0gb24gYSBwcmVzdW1hYmx5IHNtYWxsIHNwbGFzaAo+ICsJCSAqIGFu aW1hdGlvbi4gSSd2ZSBrZXB0IGl0IHRvIHRlc3QgdGhlIHBhZ2UgZmxpcCBjb2RlLgo+ICsJCSAq LwoKSSB0aGluayBhIG11Y2ggY2xlYW5lciB3YXkgdG8gc29sdmUgYWxsIHRoaXMgaXMgdG8gdGll IGl0IGludG8gb3VyIG1hc3Rlcgp0cmFja2luZy4gSWYgdGhlcmUgaXMgYSBtYXN0ZXIgKGV2ZW4g aWYgaXQncyBub3QgZGlzcGxheWluZyBhbnl0aGluZyksCnRoZW4gbm9uZSBvZiB0aGUgaW4ta2Vy bmVsIGNsaWVudHMgc2hvdWxkIGRpc3BsYXkgYW55dGhpbmcuCgpJZiB0aGVyZSBpcyBub3QsIHRo ZW4gd2UgZ3JhYiBhIHRlbXBvcmFyeS93ZWFrIG1hc3RlciByZWZlcmVuY2Ugd2hpY2gKYmxvY2tz IG90aGVyIG1hc3RlcnMgZm9yIHRoZSB0aW1lIGJlaW5nLCBidXQgb25seSB1bnRpbCB3ZSd2ZSBj b21wbGV0ZSBvdXIKZHJhd2luZyBvcGVyYXRpb24uIFRoZW4gdGhlIGluLWtlcm5lbCBjbGllbnQg ZHJvcHMgdGhhdCB3ZWFrIHJlZmVyZW5jZQphZ2Fpbi4gQSB2ZXJ5IHNpbXBseSBzb2x1dGlvbiB3 b3VsZCBiZSB0byBzaW1wbHkgaG9sZCB0aGUgZGV2aWNlJ3MgbWFzdGVyCmxvY2sgKGJ1dCBJJ20g bm90IHN1cmUgd2hldGhlciB0aGF0IHdvdWxkIHJlc3VsdCBpbiBkZWFkbG9ja3MpLgoKVGhhdCB3 b3VsZCBtZWFuIHNvbWV0aGluZyBsaWtlCgoJCWlmICghZHJtX21hc3Rlcl90cnlfaW50ZXJuYWxf YWNxdWlyZSgpKQoJCQkvKiBzb21lb25lIGVsc2UgaXMgbWFzdGVyICovCgkJCWJyZWFrOwoKaGVy ZSBpbnN0ZWFkIG9mIHlvdXIgZmIgaWQgY2hlY2suCj4gKwo+ICsJCWkgPSAhaTsKPiArCQlkcm1f Ym9vdHNwbGFzaF9kcmF3KHNwbGFzaC0+YnVmZmVyW2ldLCBzZXF1ZW5jZSsrKTsKPiArCQlpZiAo c2VxdWVuY2UgPT0gMykKPiArCQkJc2VxdWVuY2UgPSAwOwo+ICsKPiArCQlyZXQgPSBkcm1fY2xp ZW50X2Rpc3BsYXlfcGFnZV9mbGlwKHNwbGFzaC0+ZGlzcGxheSwKPiArCQkJCQkJICAgc3BsYXNo LT5idWZmZXJbaV0tPmZiX2lkc1swXSwKPiArCQkJCQkJICAgdHJ1ZSk7Cj4gKwkJaWYgKCFyZXQp IHsKPiArCQkJZXZlbnQgPSBkcm1fY2xpZW50X3JlYWRfZXZlbnQoc3BsYXNoLT5jbGllbnQsIHRy dWUpOwo+ICsJCQlpZiAoIUlTX0VSUihldmVudCkpCj4gKwkJCQlrZnJlZShldmVudCk7Cj4gKwkJ fQoKQW5kCgkJZHJtX21hc3Rlcl9pbnRlcmFsX3JlbGFzZSgpCgpoZXJlIGJlZm9yZSB3ZSBzbGVl cCBhZ2Fpbi4gU2ltaWxhciBmb3IgYWxsIHRoZSBmYmRldiBpb2N0bHMgYW5kIGFsbCB0aGF0CnN0 dWZmLgoKSnVzdCBhbiBpZGVhLCBuYW1lcyBkZWZpbml0ZWx5IG5lZWQgaW1wcm92ZW1lbnRzLCBh bmQgSSBoYXZlIG5vIGlkZWEKd2hldGVyIGl0J2xsIHdvcmsuIEJ1dCB1c2luZyB0aGUgc2FtZSBs b2dpYyBpbiB0aGUgZXhpc3RpbmcgZmJkZXYKZW11bGF0aW9uIGNvZGUgd291bGQgYmUgcmVhbGx5 IGdvb2QgKHNpbmNlIHRoYXQncyB1c2VkIGEgbG90IG1vcmUsIGF0CmxlYXN0IHJpZ2h0IG5vdyku Ci1EYW5pZWwKCj4gKwkJbXNsZWVwKDUwMCk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IDI7IGkrKykKPiArCQlkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2RlbGV0ZShzcGxhc2gtPmJ1ZmZl cltpXSk7Cj4gKwlkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZShzcGxhc2gtPmRpc3BsYXkpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9ib290c3BsYXNoX3NldHVwKHN0cnVjdCBkcm1fYm9vdHNw bGFzaCAqc3BsYXNoKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9IHNw bGFzaC0+Y2xpZW50Owo+ICsJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXJbMl07Cj4g KwlzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5Owo+ICsJc3RydWN0IGRybV9tb2Rl X21vZGVpbmZvICptb2RlOwo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlkaXNwbGF5ID0gZHJtX2Ns aWVudF9kaXNwbGF5X2dldF9maXJzdF9lbmFibGVkKGNsaWVudCwgZmFsc2UpOwo+ICsJaWYgKElT X0VSUihkaXNwbGF5KSkKPiArCQlyZXR1cm4gUFRSX0VSUihkaXNwbGF5KTsKPiArCWlmICghZGlz cGxheSkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwltb2RlID0gZHJtX2NsaWVudF9kaXNw bGF5X2ZpcnN0X21vZGUoZGlzcGxheSk7Cj4gKwlpZiAoIW1vZGUpIHsKPiArCQlyZXQgPSAtRUlO VkFMOwo+ICsJCWdvdG8gZXJyX2ZyZWVfZGlzcGxheTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKSB7Cj4gKwkJYnVmZmVyW2ldID0gZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9j cmVhdGUoY2xpZW50LCBtb2RlLAo+ICsJCQkJCQkJICBEUk1fRk9STUFUX1hSR0I4ODg4KTsKPiAr CQlpZiAoSVNfRVJSKGJ1ZmZlcltpXSkpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihidWZmZXJbaV0p Owo+ICsJCQlnb3RvIGVycl9mcmVlX2J1ZmZlcjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g ZHJtX2NsaWVudF9kaXNwbGF5X2NvbW1pdF9tb2RlKGRpc3BsYXksIGJ1ZmZlclswXS0+ZmJfaWRz WzBdLCBtb2RlKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZnJlZV9idWZmZXI7Cj4gKwo+ ICsJc3BsYXNoLT5kaXNwbGF5ID0gZGlzcGxheTsKPiArCXNwbGFzaC0+YnVmZmVyWzBdID0gYnVm ZmVyWzBdOwo+ICsJc3BsYXNoLT5idWZmZXJbMV0gPSBidWZmZXJbMV07Cj4gKwo+ICsJc2NoZWR1 bGVfd29yaygmc3BsYXNoLT53b3JrZXIpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2Zy ZWVfYnVmZmVyOgo+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0tKQo+ICsJCWRybV9jbGllbnRfZnJh bWVidWZmZXJfZGVsZXRlKGJ1ZmZlcltpXSk7Cj4gK2Vycl9mcmVlX2Rpc3BsYXk6Cj4gKwlkcm1f Y2xpZW50X2Rpc3BsYXlfZnJlZShkaXNwbGF5KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRybV9ib290c3BsYXNoX2NsaWVudF9ob3RwbHVnKHN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Jvb3RzcGxhc2ggKnNwbGFz aCA9IGNsaWVudC0+cHJpdmF0ZTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghc3BsYXNo LT5kaXNwbGF5KQo+ICsJCXJldCA9IGRybV9ib290c3BsYXNoX3NldHVwKHNwbGFzaCk7Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fYm9vdHNwbGFzaF9jbGll bnRfbmV3KHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2Jvb3RzcGxhc2ggKnNwbGFzaDsKPiArCj4gKwlzcGxhc2ggPSBremFsbG9jKHNpemVvZigqc3Bs YXNoKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXNwbGFzaCkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlJTklUX1dPUksoJnNwbGFzaC0+d29ya2VyLCBkcm1fYm9vdHNwbGFzaF93b3JrZXIp Owo+ICsKPiArCXNwbGFzaC0+Y2xpZW50ID0gY2xpZW50Owo+ICsJY2xpZW50LT5wcml2YXRlID0g c3BsYXNoOwo+ICsKPiArCS8qCj4gKwkgKiB2YzQgaXNuJ3QgZG9uZSB3aXRoIGl0J3Mgc2V0dXAg d2hlbiBkcm1fZGV2X3JlZ2lzdGVyKCkgaXMgY2FsbGVkLgo+ICsJICogSXQgc2hvdWxkIGhhdmUg c2hvdWxkbid0IGl0Pwo+ICsJICogU28gdG8ga2VlcCBpdCBmcm9tIGNyYXNoaW5nIGRlZmVyIHNl dHVwIHRvIGhvdHBsdWcuLi4KPiArCSAqLwo+ICsJaWYgKGNsaWVudC0+ZGV2LT5tb2RlX2NvbmZp Zy5tYXhfd2lkdGgpCj4gKwkJZHJtX2Jvb3RzcGxhc2hfY2xpZW50X2hvdHBsdWcoY2xpZW50KTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcm1fYm9vdHNwbGFzaF9j bGllbnRfcmVtb3ZlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2Jvb3RzcGxhc2ggKnNwbGFzaCA9IGNsaWVudC0+cHJpdmF0ZTsKPiArCj4gKwlpZiAo c3BsYXNoLT5kaXNwbGF5KSB7Cj4gKwkJc3BsYXNoLT5zdG9wID0gdHJ1ZTsKPiArCQlmbHVzaF93 b3JrKCZzcGxhc2gtPndvcmtlcik7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUoc3BsYXNoKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzIGRybV9ib290c3BsYXNoX2NsaWVudF9mdW5jcyA9IHsKPiArCS5uYW1lCQk9ICJkcm1fYm9v dHNwbGFzaCIsCj4gKwkubmV3CQk9IGRybV9ib290c3BsYXNoX2NsaWVudF9uZXcsCj4gKwkucmVt b3ZlCQk9IGRybV9ib290c3BsYXNoX2NsaWVudF9yZW1vdmUsCj4gKwkuaG90cGx1Zwk9IGRybV9i b290c3BsYXNoX2NsaWVudF9ob3RwbHVnLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQg ZHJtX2Jvb3RzcGxhc2hfaW5pdCh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2NsaWVudF9yZWdp c3RlcigmZHJtX2Jvb3RzcGxhc2hfY2xpZW50X2Z1bmNzKTsKPiArfQo+ICttb2R1bGVfaW5pdChk cm1fYm9vdHNwbGFzaF9pbml0KTsKPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkcm1fYm9vdHNw bGFzaF9leGl0KHZvaWQpCj4gK3sKPiArCWRybV9jbGllbnRfdW5yZWdpc3RlcigmZHJtX2Jvb3Rz cGxhc2hfY2xpZW50X2Z1bmNzKTsKPiArfQo+ICttb2R1bGVfZXhpdChkcm1fYm9vdHNwbGFzaF9l eGl0KTsKPiArCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAtLSAKPiAyLjE1LjEKPiAKCi0t IApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRw Oi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK