From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 2/3] drm: Add panic handling Date: Wed, 10 Aug 2016 11:15:29 +0200 Message-ID: <20160810091529.GQ6232@phenom.ffwll.local> References: <1470764742-20323-1-git-send-email-noralf@tronnes.org> <1470764742-20323-3-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A2A26E023 for ; Wed, 10 Aug 2016 09:15:34 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id q128so8285273wma.1 for ; Wed, 10 Aug 2016 02:15:34 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1470764742-20323-3-git-send-email-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBBdWcgMDksIDIwMTYgYXQgMDc6NDU6NDFQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBvdXRwdXR0aW5nIGtlcm5lbCBtZXNzYWdl cyBvbiBwYW5pYygpLgo+IFRoZSBkcml2ZXJzIHRoYXQgc3VwcG9ydHMgaXQsIHByb3ZpZGVzIGEg ZnJhbWVidWZmZXIgdGhhdCB0aGUKPiBtZXNzYWdlcyBjYW4gYmUgcmVuZGVyZWQgb24uCj4gCj4g U2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpUaGlu a2luZyBhYm91dCBob3cgd2Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIGluIGEgZnVsbC1ibG93biBk cml2ZXIsIEkKdGhpbmsgd2Ugd2lsbCBuZWVkIGEgYml0IG1vcmUgdGhhbiB0aGlzLiBIZXJlJ3Mg dGhlIGFkZGl0aW9uYWwKcmVxdWlyZW1lbnRzIEkndmUgY29tZSB1cCB0aGF0IGEgZHJpdmVyIG1v cmUgY29tcGxleCB0aGFuIHNkcm0gd291bGQgbmVlZApmb3IgcmVsaWFibGUgcGFuaWMgaGFuZGxp bmc6CgotIE11bHRpcGxlIG91dHB1dHMsIHdpdGggbXVsdGlwbGUgZnJhbWVidWZmZXIgKG9yIG9u ZSBmcmFtZWJ1ZmZlciBhbmQKICBtdWx0aXBsZSBvZmZzZXRzIHdpdGhpbikuIEFuZCBzaW5jZSBv bmUgZGlzcGxheSBtaWdodCBiZSBkZWFkIHdlIHNob3VsZAogIHRyeSByZWFsbHkgaGFyZCB0byBz aG93IHRoZSBvb3BzIG9uIGFsbCBvZiB0aGVtLiBDb25zZXF1ZW5jZTogSSB0aGluayB3ZQogIG5l ZWQgdG8gYWxzbyBsb29wIG92ZXIgYWxsIGRybV9jcnRjIGluIGEgZHJtX2RldmljZSwgdG8gYmUg YWJsZSB0bwogIHN1cHBvcnQgdGhlbSBhbGwuCgotIFdpdGggZGVza3RvcCBncHVzIHlvdSBwcmV0 dHkgbXVjaCBhbHdheXMgZW5kIHVwIHdpdGggYSB0aWxlZAogIGZyYW1lYnVmZmVyLiBBbmQgZnJv bSBhbiBvb3BzIGNvbnRleHQgaXQncyBnb2luZyB0byBiZSBpbXBvc3NpYmxlIHRvCiAgZGV0aWxl IHRoYXQgcXVpY2tseS4gSSB0aGluayBmb3IgdGhpcyB3ZSBuZWVkIGEgaGVscGVyIHRvIGRyYXcg eC95CiAgcGl4ZWxzIChpdCdzIGdvaW5nIHRvIGJlIGRlYWQgc2xvdywgYnV0IG1laCksIHdpdGgg YSBkZWZhdWx0CiAgaW1wbGVtZW50YXRpb24gd2hpY2ggYXNzdW1lcyBsaW5lYXIgbGF5b3V0LiBE cml2ZXJzIGNvdWxkIHRoZW4gZnJvYiB4L3kKICBjb29yZGluYXRlcyBmaXJzdCBpbiB0aGVpciBv d24gbG9naWMgYW5kIGNhbGwgaW50byB0aGF0IGZ1bmN0aW9uLgoKLSBUaGVyZSdzIGEgZ29vZCBj aGFuY2UgeW91J3JlIHNob3dpbmcgYSB2aWRlbyBvbiBhIHl1diBidWZmZXIKICBmdWxsLXNjcmVl bi4gSWYgd2UgZG9uJ3QgYm90aGVyIHRvbyBtdWNoIHdpdGggd2hhdCBpdCBsb29rcyBsaWtlLCBi dXQKICBvbmx5IGNhcmUgYWJvdXQgYSBmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29sb3IgdGhlbiBp dCdzIGFsc28gZWFzeSB0bwogIGltcGxlbWVudCBhIGRyYXdfeHlfcGl4ZWwgZm9yIHRoZXNlIGZy YW1lYnVmZmVycy4gVGhhdCBtZWFucyB0aG91Z2ggdGhhdAogIHlvdSBjYW4ndCBjbGVhciB0aGlu Z3Mgd2l0aCBtZW1zZXQsIGJ1dCB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgdGhlCiAgaW50ZXJmYWNl IGZ1bmMgZm9yIGVhY2ggcGl4ZWwuIFllcyB0aGlzIGlzIGdvaW5nIHRvIGJlIGRlYWQgc2xvdywg YnV0CiAgd2hvIGNhcmVzIGFzIGxvbmcgYXMgdGhlIG9vcHMgZXZlbnR1YWxseSBzaG93cyB1cCA7 LSkKCi0gVGhlIGZyYW1lYnVmZmVyIHNpemUgZG9lc24ndCBuZWNlc3NhcmlseSBtYXRjaCB0aGUg c2l6ZSBvZiB0aGUgdmlzaWJsZQogIHBhcnQuIFByb2JhYmx5IGJlc3QgaWYgd2UgZGlnIHRoaXMg b3V0IGZyb20gdGhlIHBsYW5lX3N0YXRlIGRpcmVjdGx5CiAgKGxlc3MgZnJhZ2lsZSBjb2RlIGlu IGRyaXZlcnMpLiBSZWx5aW5nIG9uIGRybV9wbGFuZV9zdGF0ZSBtZWFucyB0aGlzCiAgd2lsbCBv bmx5IHdvcmsgb24gYXRvbWljIGRyaXZlcnMgKGluIGxlZ2FjeSBkcml2ZXJzIHRoaXMgaW5mb3Jt YXRpb24gaXMKICBoaWRkZW4gaW4gZHJpdmVyLXByaXZhdGUgY29ybmVycyksIGJ1dCBJIHRoaW5r IHRoYXQncyB0b3RhbGx5IG9rLgoKLSBXZSBuZWVkIGxvY2tpbmcuIE9uZSBvZiB0aGUgYmlnZ2Vz dCBwcm9ibGVtcyB3aXRoIHRoZSBvbGQgb29wcyBoYW5kbGluZwogIHdhcyB0aGF0IGl0IHdhcyB2 ZXJ5IGdvb2QgYXQgdHJhbXBsaW5nIG92ZXIgZHJpdmVyIHN0YXRlLCBjYXVzaW5nIG1vcmUKICAo dW5yZWxhdGVkKSBvb3BzZXMgaW4ga21zIGNvZGUgYW5kIG1ha2luZyBzdXJlIHRoZSBvcmlnaW5h bCBvb3BzIHdhcyBubwogIGxvbmdlciB2aXNpYmxlLiBJIHRoaW5rIHRoZSBzaGFyZWQgY29kZSBt dXN0IHRha2UgY2FyZSBvZiBhbGwgdGhlCiAgbG9ja2luZyBuZWVkcyB0byBhdm9pZCBmcmFnaWxl IGNvZGUgaW4gZHJpdmVycy4gd3dfbXV0ZXhfdHJ5bG9jayBvbiB0aGUKICBkcm1fY3J0YyBhbmQg ZHJtX3BsYW5lIHNob3VsZCBiZSBlbm91Z2ggKHdlIG5lZWQgYm90aCBmb3IgZHJpdmVycyB3aGVy ZQogIHBsYW5lcyBjYW4gYmUgcmVhc3NpZ25lZCBiZXR3ZWVuIGRyaXZlcnMpLgoKLSBNdWx0aXBs ZSBwbGFuZXMgd2hpY2ggbWlnaHQgb2NjbHVkZSB0aGUgcHJpbWFyeSBwbGFuZTogSSB0aGluayB3 ZSBzaG91bGQKICBqdXN0IGJvdGhlciB3aXRoIHRoZSBwcmltYXJ5IHBsYW5lLCBhbmQgbWF5YmUg Z2l2ZSBkcml2ZXJzIGEKICBwYW5pY19jb21taXQgaG9vayB3aGVyZSB0aGV5IGNvdWxkIHRyeSB0 byBkaXNhYmxlIGFueSBhZGRpdGlvbmFsIHBsYW5lcy4KICBCdXQgdGhhdCdzIG5vdCBzb21ldGhp bmcgd2UgbmVlZCBpbiB0aGUgZmlyc3QgdmVyc2lvbiBoZXJlIGF0IGFsbC4KCi0gSSB0aGluayBz b21lIGhlbHBlcnMgZm9yIGNyZWF0aW5nIHRoZSB2bWFwIHdvdWxkIGJlIG5pY2UuIFNob3VsZCBi ZQogIHNpbXBsZSBmb3IgY21hLWJhY2tlZCBmcmFtZWJ1ZmZlcnMsIGFuZCBhbHNvIHNpbXBsZSBp ZiB5b3UgdXNlIGEgbm9ybWFsCiAgc2htZW0gYmFja2VkIGdlbSBidWZmZXIuIEZvciBjbWEgcHJv YmFibHkgYmVzdCBpZiBkcml2ZXJzIGRvbid0IGV2ZW4KICBuZWVkIHRvIGJvdGhlciB3aXRoIHRo aXMuCgotIEZvciBkcml2ZXIgY29udmVuaWVuY2UgSSB0aGluayB3ZSBjb3VsZCBjaGVjayBhIGZl dyB0aGluZ3MgYWJvdXQKICB2aXNpYmlsaXR5IG9mIGVhY2ggcGxhbmUgKGUuZy4gY3J0Y19zdGF0 ZS0+YWN0aXZlKSwgYW5kIHNraXAgaWYgdGhlcmUncwogIG5vIGNoYW5jZSBpdCBjYW4gYmUgc2Vl bi4gRG9pbmcgbGVzcyBtZWFucyBsZXNzIGNoYW5jZXMgdG8gYmxvdyB1cCwgYW5kCiAgaGlnaGVy IGNoYW5jZXMgdGhhdCB0aGUgb25lIHNjcmVlbiB3aGljaCBpcyBvbiBhY3R1YWxseSBlbmRzIHVw IHdpdGggdGhlCiAgb29wcyBvbiBpdC4KCi0gTWluaW1hbCBjbGVhbnVwLiBJIHRoaW5rIHdlIGNh biBqdXN0IGxlYWsgdGhlIHZtYXBwaW5nLCBubyBoYXJtIGluIHRoYXQuCiAgQnV0IHRoZSBrbXMg bG9ja3MgbmVlZCB0byBiZSBkcm9wcGVkIGFnYWluLiBEcm9wcGluZyB0aGVtIGFnYWluIG1pZ2h0 CiAgaW5jcmVhc2UgdGhlIG9kZHMgdGhhdCB0aGUgc3lzdGVtIGxpbXBzIGFsb25nIGxvbmcgZW5v dWdoIGZvciBsb2dzIHRvCiAgaGl0IHRoZSBkaXNrcy4KClRha2luZyB0aGlzIGFsbCB0b2dldGhl ciwgSSB0aGluayB0aGUgZHJpdmVyIGludGVyZmFjZSBzaG91bGQgYmUKcmVzdHJ1Y3R1cmVkIGEg Yml0LCBhbmQgdGhhdCBtb3N0IG9mIHRoZSBoYW5kbGluZyBzaG91bGQgYmUgb24gdGhlCmRybV9m cmFtZWJ1ZmZlciBkaXJlY3RseToKCnN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgewoJLyog Rm9yIHZtYXBwaW5nIHRoZSBzZWxlY3RlZCBmcmFtZWJ1ZmZlciBpbiBhIHBhbmljIGNvbnRleHQu IE11c3QKCSAqIGJlIHN1cGVyIGNhcmVmdWwgYWJvdXQgbG9ja2luZyAob25seSB0cnlsb2NraW5n IGFsbG93ZWQpLCBjYW4KCSAqIHJldHVybiBOVUxMIGlmIGl0IGRpZG4ndCB3b3JrIG91dC4gVGhl IHJldHVybiB2YWx1ZSBpcyBhbgoJICogb3BhcXVlIGNvb2tpZSB3aGljaCBpcyBwYXNzZWQgdG8g QHBhbmljX2RyYXdfeHksIGl0IGNhbiBiZQoJICogYW55dGhpbmc6IHZtYXAgYXJlYSwgc3RydWN0 dXJlIHdpdGggbW9yZSBkZXRhaWxzLCBqdXN0IGEgZmV3CgkgKiBmbGFncywgLi4uCgkgKi8KCXZv aWQgKihwYW5pY192bWFwKShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CgoJLyogRm9yIGRy YXdpbmcgcGl4ZWxzIG9udG8gYSBmcmFtZWJ1ZmZlciBtYXBwaW5nIHdpdGggQHBhbmljX3ZtYXAu CgkgKiBUaGlzIGlzIG9wdGlvbmFsLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVz IHRoYXQgdm1hcAoJICogcG9pbnRzIGF0IGEgbGluZWFyIG1hcHBpbmcgb2YgdGhlIGZyYW1lYnVm ZmVyLgoJICovCgl2b2lkIChwYW5pY19kcmF3X3h5KShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm Yiwgdm9pZCAqdm1hcCwKCQkJICAgICBpbnQgeCwgaW50IHksIGJvb2wgZm9yZWdyb3VuZCk7Cn07 CgpPZmMgY29tbWVudHMgbmVlZCB0byBiZSBmbGVzaGVkIG91dCBzb21lIG1vcmUsIGJ1dCB0aGUg aWRlYSBpcyB0aGF0IGFsbAp0aGUgZmIgc2VsZWN0aW9uIGFuZCBsb29rdXAgaXMgaGFuZGxlZCBp biBzaGFyZWQgY29kZSAoYW5kIHdpdGggcHJvcGVyCmxvY2tpbmcsIGJ1dCBvbmx5IGZvciBhdG9t aWMgZHJpdmVycykuCgpUaG91Z2h0cz8KLURhbmllbAoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgICAg ICB8ICAgMyArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCB8ICAgNCArCj4gIGRy aXZlcnMvZ3B1L2RybS9kcm1fcGFuaWMuYyAgICB8IDYwNiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2RybS9kcm1QLmggICAgICAgICAgICAgfCAg MjIgKysKPiAgNSBmaWxlcyBjaGFuZ2VkLCA2MzYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQo+IGluZGV4IGViYTMyYWQuLmZmMDRlNDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTEy LDcgKzEyLDcgQEAgZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNo ZS5vIFwKPiAgCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8gZHJtX2VuY29kZXJfc2xhdmUubyBc Cj4gIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwubyBkcm1fcHJpbWUubyBcCj4gIAkJ ZHJtX3JlY3QubyBkcm1fdm1hX21hbmFnZXIubyBkcm1fZmxpcF93b3JrLm8gXAo+IC0JCWRybV9t b2Rlc2V0X2xvY2subyBkcm1fYXRvbWljLm8gZHJtX2JyaWRnZS5vCj4gKwkJZHJtX21vZGVzZXRf bG9jay5vIGRybV9hdG9taWMubyBkcm1fYnJpZGdlLm8gZHJtX3BhbmljLm8KPiAgCj4gIGRybS0k KENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCj4gIGRybS0kKENPTkZJR19EUk1fR0VNX0NN QV9IRUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gaW5kZXggM2Ix NDM2Ni4uNDU3ZWU5MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+IEBAIC04NjEsNiArODYxLDggQEAgc3Rh dGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKQo+ICAJCWdvdG8gZXJyX3AzOwo+ICAJ fQo+ICAKPiArCWRybV9wYW5pY19pbml0KCk7Cj4gKwo+ICAJRFJNX0lORk8oIkluaXRpYWxpemVk ICVzICVkLiVkLiVkICVzXG4iLAo+ICAJCSBDT1JFX05BTUUsIENPUkVfTUFKT1IsIENPUkVfTUlO T1IsIENPUkVfUEFUQ0hMRVZFTCwgQ09SRV9EQVRFKTsKPiAgCXJldHVybiAwOwo+IEBAIC04NzYs NiArODc4LDcgQEAgZXJyX3AxOgo+ICAKPiAgc3RhdGljIHZvaWQgX19leGl0IGRybV9jb3JlX2V4 aXQodm9pZCkKPiAgewo+ICsJZHJtX3BhbmljX2V4aXQoKTsKPiAgCWRlYnVnZnNfcmVtb3ZlKGRy bV9kZWJ1Z2ZzX3Jvb3QpOwo+ICAJZHJtX3N5c2ZzX2Rlc3Ryb3koKTsKPiAgCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f aW50ZXJuYWwuaAo+IGluZGV4IGI4NmRjOWIuLjc0NjNkOWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbnRl cm5hbC5oCj4gQEAgLTkwLDYgKzkwLDEwIEBAIGludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgdm9pZCBkcm1fZ2VtX29wZW4oc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwo+ICB2b2lk IGRybV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdmF0ZSk7Cj4gIAo+ICsvKiBkcm1fcGFuaWMuYyAqLwo+ICt2b2lkIGRybV9wYW5p Y19pbml0KHZvaWQpOwo+ICt2b2lkIGRybV9wYW5pY19leGl0KHZvaWQpOwo+ICsKPiAgLyogZHJt X2RlYnVnZnMuYyAqLwo+ICAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCj4gIGludCBkcm1f ZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBpbnQgbWlub3JfaWQsCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFuaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fcGFuaWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZTE4NWM5 ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMKPiBA QCAtMCwwICsxLDYwNiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBOb3JhbGYgVHLDuG5u ZXMKPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiArCj4gK3N0cnVjdCBkcm1fcGFuaWNfZmIg ewo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwl2b2lkICp2bWVtOwo+ICsJY29u c3Qgc3RydWN0IGZvbnRfZGVzYyAqZm9udDsKPiArCXVuc2lnbmVkIGludCBjb2xzOwo+ICsJdW5z aWduZWQgaW50IHJvd3M7Cj4gKwl1bnNpZ25lZCBpbnQgeHBvczsKPiArCXVuc2lnbmVkIGludCB5 cG9zOwo+ICt9Owo+ICsKPiArI2RlZmluZSBEUk1fUEFOSUNfTUFYX0ZCUwk2NAo+ICtzdGF0aWMg c3RydWN0IGRybV9wYW5pY19mYiBkcm1fcGFuaWNfZmJzW0RSTV9QQU5JQ19NQVhfRkJTXTsKPiAr Cj4gKyNkZWZpbmUgRFJNX1BBTklDX01BWF9LTVNHUwlTWl80Swo+ICtzdGF0aWMgY2hhciAqZHJt X3BhbmljX2ttc2dzOwo+ICtzdGF0aWMgc2l6ZV90IGRybV9wYW5pY19rbXNnc19wb3M7Cj4gKwo+ ICtzdGF0aWMgYm9vbCBkcm1fcGFuaWNfYWN0aXZlOwo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3Bh bmljX2xvZyhjb25zdCBjaGFyICpmbXQsIC4uLik7Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQg ZHJtX3BhbmljX2RyYXdfcGl4ZWwodTggKmRzdCwgdTMyIHBpeGVsX2Zvcm1hdCwgYm9vbCB2YWwp Cj4gK3sKPiArCXN3aXRjaCAocGl4ZWxfZm9ybWF0ICYgfkRSTV9GT1JNQVRfQklHX0VORElBTikg ewo+ICsKPiArCWNhc2UgRFJNX0ZPUk1BVF9DODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0IzMzI6 Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSMjMzOgo+ICsJCSpkc3QgPSB2YWwgPyAweGZmIDogMHgw MDsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjQ0NDQ6Cj4gKwljYXNl IERSTV9GT1JNQVRfQVJHQjQ0NDQ6Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjQ0NDQ6Cj4gKwlj YXNlIERSTV9GT1JNQVRfQUJHUjQ0NDQ6Cj4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweDBmZmYg OiAweDAwMDAsICh1MTYgKilkc3QpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZPUk1B VF9SR0JYNDQ0NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JBNDQ0NDoKPiArCWNhc2UgRFJNX0ZP Uk1BVF9CR1JYNDQ0NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKPiArCQlwdXRfdW5h bGlnbmVkKHZhbCA/IDB4ZmZmMCA6IDB4MDAwMCwgKHUxNiAqKWRzdCk7Cj4gKwkJYnJlYWs7Cj4g Kwo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IxNTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0Ix NTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0FC R1IxNTU1Ogo+ICsJCXB1dF91bmFsaWduZWQodmFsID8gMHg3ZmZmIDogMHgwMDAwLCAodTE2ICop ZHN0KTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDU1NTE6Cj4gKwlj YXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6Cj4g KwljYXNlIERSTV9GT1JNQVRfQkdSQTU1NTE6Cj4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZm ZmUgOiAweDAwMDAsICh1MTYgKilkc3QpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1Ogo+ICsJCXB1dF91bmFsaWdu ZWQodmFsID8gMHhmZmZmIDogMHgwMDAwLCAodTE2ICopZHN0KTsKPiArCQlicmVhazsKPiArCj4g KwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKPiAr CQlkc3RbMF0gPSB2YWwgPyAweGZmIDogMHgwMDsKPiArCQlkc3RbMV0gPSB2YWwgPyAweGZmIDog MHgwMDsKPiArCQlkc3RbMl0gPSB2YWwgPyAweGZmIDogMHgwMDsKPiArCQlicmVhazsKPiArCj4g KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6 Cj4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4 ODg6Cj4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweDAwZmZmZmZmIDogMHgwMDAwMDAwMCwgKHUz MiAqKWRzdCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4 Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ICsJCXB1dF91bmFsaWduZWQodmFsID8g MHhmZmZmZmYwMCA6IDB4MDAwMDAwMDAsICh1MzIgKilkc3QpOwo+ICsJCWJyZWFrOwo+ICsKPiAr CWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEw MTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiArCWNhc2UgRFJNX0ZPUk1B VF9BQkdSMjEwMTAxMDoKPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4M2ZmZmZmZmYgOiAweDAw MDAwMDAwLCAodTMyICopZHN0KTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIERSTV9GT1JNQVRf UkdCWDEwMTAxMDI6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Cj4gKwljYXNlIERS TV9GT1JNQVRfQkdSWDEwMTAxMDI6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAxMDI6Cj4g KwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZmZmZmZmZjIDogMHgwMDAwMDAwMCwgKHUzMiAqKWRz dCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19y ZW5kZXIoc3RydWN0IGRybV9wYW5pY19mYiAqcGZiLAo+ICsJCQkgICAgIGNvbnN0IGNoYXIgKnRl eHQsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKmZv bnQgPSBwZmItPmZvbnQ7Cj4gKwl1bnNpZ25lZCBpbnQgcGl4X2RlcHRoLCBwaXhfYnBwLCBjcHA7 Cj4gKwl1bnNpZ25lZCBpbnQgY29sID0gcGZiLT54cG9zOwo+ICsJdW5zaWduZWQgaW50IHJvdyA9 IHBmYi0+eXBvczsKPiArCXVuc2lnbmVkIGludCBpLCBoLCB3Owo+ICsJdm9pZCAqZHN0LCAqcG9z Owo+ICsJdTggZm9udGxpbmU7Cj4gKwo+ICsJaWYgKChyb3cgKyAxKSAqIGZvbnQtPmhlaWdodCA+ IHBmYi0+ZmItPmhlaWdodCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKChjb2wgKyBsZW4pICog Zm9udC0+d2lkdGggPiBwZmItPmZiLT53aWR0aCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZHJtX2Zi X2dldF9icHBfZGVwdGgocGZiLT5mYi0+cGl4ZWxfZm9ybWF0LCAmcGl4X2RlcHRoLCAmcGl4X2Jw cCk7Cj4gKwljcHAgPSBESVZfUk9VTkRfVVAocGl4X2JwcCwgOCk7Cj4gKwo+ICsJLyogVE9ETzog c2hvdWxkIGZiLT5vZmZzZXRzWzBdIGJlIGFkZGVkIGhlcmU/ICovCj4gKwlkc3QgPSBwZmItPnZt ZW0gKyAocm93ICogZm9udC0+aGVpZ2h0ICogcGZiLT5mYi0+cGl0Y2hlc1swXSkgKwo+ICsJICAg ICAgKGNvbCAqIGZvbnQtPndpZHRoICogY3BwKTsKPiArCj4gKwlmb3IgKGggPSAwOyBoIDwgZm9u dC0+aGVpZ2h0OyBoKyspIHsKPiArCQlwb3MgPSBkc3Q7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykgewo+ICsJCQlmb250bGluZSA9ICoodTggKikoZm9udC0+ZGF0YSArIHRleHRb aV0gKiBmb250LT5oZWlnaHQgKyBoKTsKPiArCj4gKwkJCWZvciAodyA9IDA7IHcgPCBmb250LT53 aWR0aDsgdysrKSB7Cj4gKwkJCQlkcm1fcGFuaWNfZHJhd19waXhlbChwb3MsIHBmYi0+ZmItPnBp eGVsX2Zvcm1hdCwKPiArCQkJCQkJICAgICBmb250bGluZSAmIEJJVCg3IC0gdykpOwo+ICsJCQkJ cG9zICs9IGNwcDsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJZHN0ICs9IHBmYi0+ZmItPnBpdGNo ZXNbMF07Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19zY3JvbGxfdXAo c3RydWN0IGRybV9wYW5pY19mYiAqcGZiKQo+ICt7Cj4gKwl2b2lkICpzcmMgPSBwZmItPnZtZW0g KyAocGZiLT5mb250LT5oZWlnaHQgKiBwZmItPmZiLT5waXRjaGVzWzBdKTsKPiArCXNpemVfdCBs ZW4gPSAocGZiLT5mYi0+aGVpZ2h0IC0gcGZiLT5mb250LT5oZWlnaHQpICoKPiArCQkgICAgIHBm Yi0+ZmItPnBpdGNoZXNbMF07Cj4gKwo+ICsJZHJtX3BhbmljX2xvZygiJXNcbiIsIF9fZnVuY19f KTsKPiArCj4gKwltZW1tb3ZlKHBmYi0+dm1lbSwgc3JjLCBsZW4pOwo+ICsJbWVtc2V0KHBmYi0+ dm1lbSArIGxlbiwgMCwgcGZiLT5mb250LT5oZWlnaHQgKiBwZmItPmZiLT5waXRjaGVzWzBdKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX2NsZWFyX3NjcmVlbihzdHJ1Y3QgZHJt X3BhbmljX2ZiICpwZmIpCj4gK3sKPiArCW1lbXNldChwZmItPnZtZW0sIDAsIHBmYi0+ZmItPmhl aWdodCAqIHBmYi0+ZmItPnBpdGNoZXNbMF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1f cGFuaWNfbG9nX21zZyhjaGFyICpwcmUsIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxl bikKPiArewo+ICsJY2hhciBidWZbNTEyXTsKPiArCj4gKwlpZiAobGVuID4gNTEwKQo+ICsJCWxl biA9IDUxMDsKPiArCj4gKwltZW1jcHkoYnVmLCBzdHIsIGxlbik7Cj4gKwlidWZbbGVuXSA9ICdc bic7Cj4gKwlidWZbbGVuICsgMV0gPSAnXDAnOwo+ICsKPiArCWRybV9wYW5pY19sb2coIiVzJXMi LCBwcmUsIGJ1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19wdXRjc19ub19s ZihzdHJ1Y3QgZHJtX3BhbmljX2ZiICpwZmIsCj4gKwkJCQkgIGNvbnN0IGNoYXIgKnN0ciwgdW5z aWduZWQgaW50IGxlbikKPiArewo+ICsJZHJtX3BhbmljX2xvZygiJXMobGVuPSV1KSB4PSV1LCB5 PSV1XG4iLCBfX2Z1bmNfXywgbGVuLAo+ICsJCQlwZmItPnhwb3MsIHBmYi0+eXBvcyk7Cj4gKwo+ ICsJaWYgKGxlbiA8PSAwKQo+ICsJCXJldHVybjsKPiArCj4gKwlkcm1fcGFuaWNfbG9nX21zZygi Iiwgc3RyLCBsZW4pOwo+ICsKPiArCWRybV9wYW5pY19yZW5kZXIocGZiLCBzdHIsIGxlbik7Cj4g Kwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfcHV0Y3Moc3RydWN0IGRybV9wYW5p Y19mYiAqcGZiLAo+ICsJCQkgICAgY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbnVtKQo+ ICt7Cj4gKwl1bnNpZ25lZCBpbnQgc2xlbjsKPiArCWludCBsZW4gPSBudW07Cj4gKwljaGFyICps ZjsKPiArCj4gKwlkcm1fcGFuaWNfbG9nKCIlcyhudW09JXUpXG4iLCBfX2Z1bmNfXywgbnVtKTsK PiArCj4gKwl3aGlsZSAobGVuID4gMCkgewo+ICsKPiArCQlpZiAocGZiLT55cG9zID09IHBmYi0+ cm93cykgewo+ICsJCQlwZmItPnlwb3MtLTsKPiArCQkJZHJtX3BhbmljX3Njcm9sbF91cChwZmIp Owo+ICsJCX0KPiArCj4gKwkJbGYgPSBzdHJwYnJrKHN0ciwgIlxuIik7Cj4gKwkJaWYgKGxmKQo+ ICsJCQlzbGVuID0gbGYgLSBzdHI7Cj4gKwkJZWxzZQo+ICsJCQlzbGVuID0gbGVuOwo+ICsKPiAr CQlpZiAocGZiLT54cG9zICsgc2xlbiA+IHBmYi0+Y29scykKPiArCQkJc2xlbiA9IHBmYi0+Y29s cyAtIHBmYi0+eHBvczsKPiArCj4gKwkJZHJtX3BhbmljX3B1dGNzX25vX2xmKHBmYiwgc3RyLCBz bGVuKTsKPiArCj4gKwkJbGVuIC09IHNsZW47Cj4gKwkJc3RyICs9IHNsZW47Cj4gKwkJcGZiLT54 cG9zICs9IHNsZW47Cj4gKwo+ICsJCWlmIChsZikgewo+ICsJCQlzdHIrKzsKPiArCQkJbGVuLS07 Cj4gKwkJCXBmYi0+eHBvcyA9IDA7Cj4gKwkJCXBmYi0+eXBvcysrOwo+ICsJCX0KPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX3dyaXRlKGNvbnN0IGNoYXIgKnN0ciwgdW5z aWduZWQgaW50IG51bSkKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJaWYgKCFudW0p Cj4gKwkJcmV0dXJuOwo+ICsKPiArCWRybV9wYW5pY19sb2coIiVzKG51bT0ldSlcbiIsIF9fZnVu Y19fLCBudW0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBEUk1fUEFOSUNfTUFYX0ZCUzsgaSsr KSB7Cj4gKwkJaWYgKCFkcm1fcGFuaWNfZmJzW2ldLmZiKQo+ICsJCQlicmVhazsKPiArCQlkcm1f cGFuaWNfcHV0Y3MoJmRybV9wYW5pY19mYnNbaV0sIHN0ciwgbnVtKTsKPiArCX0KPiArfQo+ICsK PiArLyogdGhpcyBvbmUgaXMgc2VyaWFsaXplZCBieSBjb25zb2xlX2xvY2soKSAqLwo+ICtzdGF0 aWMgdm9pZCBkcm1fcGFuaWNfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLAo+ICsJ CQkJICAgIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IG51bSkKPiArewo+ICsJdW5zaWdu ZWQgaW50IGk7Cj4gKwo+ICsJZHJtX3BhbmljX2xvZ19tc2coIi0+Iiwgc3RyLCBudW0pOwo+ICsK PiArCS8qIEJ1ZmZlciB1cCBtZXNzYWdlcyB0byBiZSByZXBsYXllZCBvbiBwYW5pYyAqLwo+ICsJ aWYgKCFkcm1fcGFuaWNfYWN0aXZlKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7 Cj4gKwkJCWRybV9wYW5pY19rbXNnc1tkcm1fcGFuaWNfa21zZ3NfcG9zKytdID0gKnN0cisrOwo+ ICsJCQlpZiAoZHJtX3BhbmljX2ttc2dzX3BvcyA9PSBEUk1fUEFOSUNfTUFYX0tNU0dTKQo+ICsJ CQkJZHJtX3BhbmljX2ttc2dzX3BvcyA9IDA7Cj4gKwkJfQo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlkcm1fcGFuaWNfd3JpdGUoc3RyLCBudW0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGNvbnNvbGUgZHJtX3BhbmljX2NvbnNvbGUgPSB7Cj4gKwkubmFtZSA9ICAgICAgICAgImRybXBh bmljIiwKPiArCS53cml0ZSA9ICAgICAgICBkcm1fcGFuaWNfY29uc29sZV93cml0ZSwKPiArCS5m bGFncyA9ICAgICAgICBDT05fUFJJTlRCVUZGRVIgfCBDT05fRU5BQkxFRCwKPiArCS5pbmRleCA9 ICAgICAgICAwLAo+ICt9Owo+ICsKPiArLyoKPiArICogVGhlIHBhbmljKCkgZnVuY3Rpb24gbWFr ZXMgc3VyZSB0aGF0IG9ubHkgb25lIENQVSBpcyBhbGxvd2VkIHRvIHJ1biBpdCdzCj4gKyAqIGNv ZGUuIFNvIHdoZW4gdGhpcyBoYW5kbGVyIGlzIGNhbGxlZCwgd2UncmUgYWxvbmUuIE5vIHJhY2lu ZyB3aXRoCj4gKyAqIGNvbnNvbGUud3JpdGUoKSBpcyBwb3NzaWJsZS4KPiArICovCj4gK3N0YXRp YyBpbnQgZHJtX3BhbmljX2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNp Z25lZCBsb25nIGV2LAo+ICsJCQkgICAgIHZvaWQgKnB0cikKPiArewo+ICsJY29uc3Qgc3RydWN0 IGZvbnRfZGVzYyAqZm9udDsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ICsJc3Ry dWN0IGRybV9wYW5pY19mYiAqcGZiOwo+ICsJc3RydWN0IGRybV9taW5vciAqbWlub3I7Cj4gKwl1 bnNpZ25lZCBpbnQgZmJzID0gMDsKPiArCXZvaWQgKnZtZW07Cj4gKwlpbnQgaTsKPiArCj4gKwlk cm1fcGFuaWNfbG9nKCIlc1xuIiwgX19mdW5jX18pOwo+ICsKPiArCWRybV9wYW5pY19hY3RpdmUg PSB0cnVlOwo+ICsKPiArCWRybV9taW5vcl9mb3JfZWFjaChtaW5vciwgRFJNX01JTk9SX0xFR0FD WSwgaSkgewo+ICsJCWRybV9wYW5pY19sb2coIkZvdW5kIG1pbm9yPSVkXG4iLCBtaW5vci0+aW5k ZXgpOwo+ICsJCWlmICghbWlub3ItPmRldiB8fCAhbWlub3ItPmRldi0+ZHJpdmVyIHx8Cj4gKwkJ ICAgICFtaW5vci0+ZGV2LT5kcml2ZXItPnBhbmljKSB7Cj4gKwkJCWRybV9wYW5pY19sb2coIlNr aXBwaW5nOiBObyBwYW5pYyBoYW5kbGVyXG4iKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsK PiArCQlmYiA9IG1pbm9yLT5kZXYtPmRyaXZlci0+cGFuaWMobWlub3ItPmRldiwgJnZtZW0pOwo+ ICsJCWlmICghZmIpIHsKPiArCQkJZHJtX3BhbmljX2xvZygiU2tpcHBpbmc6IERyaXZlciByZXR1 cm5lZCBOVUxMXG4iKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIWZiIHx8 ICF2bWVtIHx8IGZiLT5kZXYgIT0gbWlub3ItPmRldiB8fCAhZmItPnBpdGNoZXNbMF0pIHsKPiAr CQkJZHJtX3BhbmljX2xvZygiU2tpcHBpbmc6IEZhaWxlZCBjaGVja1xuIik7Cj4gKwkJCWNvbnRp bnVlOwo+ICsJCX0KPiArCj4gKwkJLyogb25seSA4LWJpdCB3aWRlIGZvbnRzIGFyZSBzdXBwb3J0 ZWQgKi8KPiArCQlmb250ID0gZ2V0X2RlZmF1bHRfZm9udChmYi0+d2lkdGgsIGZiLT5oZWlnaHQs IEJJVCg3KSwgLTEpOwo+ICsJCWlmICghZm9udCkgewo+ICsJCQlkcm1fcGFuaWNfbG9nKCJTa2lw cGluZzogTm8gZm9udCBhdmFpbGFibGVcbiIpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ ICsJCXBmYiA9ICZkcm1fcGFuaWNfZmJzW2ZicysrXTsKPiArCj4gKwkJcGZiLT5mYiA9IGZiOwo+ ICsJCXBmYi0+dm1lbSA9IHZtZW07Cj4gKwkJcGZiLT5mb250ID0gZm9udDsKPiArCQlwZmItPmNv bHMgPSBmYi0+d2lkdGggLyBmb250LT53aWR0aDsKPiArCQlwZmItPnJvd3MgPSBmYi0+aGVpZ2h0 IC8gZm9udC0+aGVpZ2h0Owo+ICsKPiArCQlkcm1fcGFuaWNfY2xlYXJfc2NyZWVuKHBmYik7Cj4g Kwo+ICsJCWRybV9wYW5pY19sb2coIiAgICAldXgldSAtPiAldXgldSwgJXMsICVzXG4iLCBmYi0+ d2lkdGgsCj4gKwkJCQlmYi0+aGVpZ2h0LCBwZmItPmNvbHMsIHBmYi0+cm93cywgZm9udC0+bmFt ZSwKPiArCQkJCWRybV9nZXRfZm9ybWF0X25hbWUoZmItPnBpeGVsX2Zvcm1hdCkpOwo+ICsJfQo+ ICsKPiArCWlmIChkcm1fcGFuaWNfa21zZ3NbMF0pIHsKPiArCQkvKiBzYWZlZ3VhcmQgaW4gY2Fz ZSB3ZSBpbnRlcnJ1cHRlZCBkcm1fcGFuaWNfY29uc29sZV93cml0ZSAqLwo+ICsJCWlmIChkcm1f cGFuaWNfa21zZ3NfcG9zID49IERSTV9QQU5JQ19NQVhfS01TR1MpCj4gKwkJCWRybV9wYW5pY19r bXNnc19wb3MgPSAwOwo+ICsKPiArCQlkcm1fcGFuaWNfd3JpdGUoJmRybV9wYW5pY19rbXNnc1tk cm1fcGFuaWNfa21zZ3NfcG9zXSwKPiArCQkJCURSTV9QQU5JQ19NQVhfS01TR1MgLSBkcm1fcGFu aWNfa21zZ3NfcG9zKTsKPiArCQlkcm1fcGFuaWNfd3JpdGUoZHJtX3BhbmljX2ttc2dzLCBkcm1f cGFuaWNfa21zZ3NfcG9zKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZHJtX3BhbmljX2Jsb2NrID0gewo+ ICsJLm5vdGlmaWVyX2NhbGwgPSBkcm1fcGFuaWNfaGFuZGxlciwKPiArfTsKPiArCj4gKwo+ICsK PiArI2lmZGVmIENPTkZJR19ERUJVR19GUwo+ICsKPiArLyogT3V0IG9mIGJhbmQgbG9nZ2luZyBp cyB1c2VmdWwgYXQgbGVhc3QgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgcGhhc2UgKi8KPiAr I2RlZmluZSBEUk1fUEFOSUNfTE9HX1NJWkUJU1pfNjRLCj4gKyNkZWZpbmUgRFJNX1BBTklDX0xP R19MSU5FCTEyOAo+ICsjZGVmaW5lIERSTV9QQU5JQ19MT0dfRU5UUklFUwkoRFJNX1BBTklDX0xP R19TSVpFIC8gRFJNX1BBTklDX0xPR19MSU5FKQo+ICsKPiArc3RhdGljIGNoYXIgKmxvZ19idWY7 Cj4gK3N0YXRpYyBzaXplX3QgbG9nX3BvczsKPiArc3RhdGljIHN0cnVjdCBkZW50cnkgKmRybV9w YW5pY19sb2dmc19yb290Owo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZyhjb25zdCBj aGFyICpmbXQsIC4uLikKPiArewo+ICsJdmFfbGlzdCBhcmdzOwo+ICsJdTMyIHJlbV9uc2VjOwo+ ICsJY2hhciAqdGV4dDsKPiArCXNpemVfdCBsZW47Cj4gKwl1NjQgc2VjOwo+ICsKPiArCWlmICgh bG9nX2J1ZiB8fCBvb3BzX2luX3Byb2dyZXNzKQo+ICsJCXJldHVybjsKPiArCj4gKwl2YV9zdGFy dChhcmdzLCBmbXQpOwo+ICsKPiArCWlmIChsb2dfcG9zID49IERSTV9QQU5JQ19MT0dfRU5UUklF UykKPiArCQlsb2dfcG9zID0gMDsKPiArCj4gKwl0ZXh0ID0gbG9nX2J1ZiArIChsb2dfcG9zKysg KiBEUk1fUEFOSUNfTE9HX0xJTkUpOwo+ICsJaWYgKGxvZ19wb3MgPT0gRFJNX1BBTklDX0xPR19F TlRSSUVTKQo+ICsJCWxvZ19wb3MgPSAwOwo+ICsKPiArCXNlYyA9IGRpdl91NjRfcmVtKGxvY2Fs X2Nsb2NrKCksIDEwMDAwMDAwMDAsICZyZW1fbnNlYyk7Cj4gKwo+ICsJbGVuID0gc2NucHJpbnRm KHRleHQsIERSTV9QQU5JQ19MT0dfTElORSwgIlslNWxsdS4lMDZ1XSAiLCBzZWMsCj4gKwkJCXJl bV9uc2VjIC8gMTAwMCk7Cj4gKwo+ICsJdnNjbnByaW50Zih0ZXh0ICsgbGVuLCBEUk1fUEFOSUNf TE9HX0xJTkUgLSBsZW4sIGZtdCwgYXJncyk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHRvIGFsd2F5 cyBoYXZlIGEgbmV3bGluZSBpbiBjYXNlIG9mIG92ZXJmbG93ICovCj4gKwlpZiAodGV4dFtEUk1f UEFOSUNfTE9HX0xJTkUgLSAyXSAhPSAnXDAnKQo+ICsJCXRleHRbRFJNX1BBTklDX0xPR19MSU5F IC0gMl0gPSAnXG4nOwo+ICsKPiArCXZhX2VuZChhcmdzKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBkcm1fcGFuaWNfbG9nX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQo+ICt7Cj4g KwlzaXplX3QgcG9zID0gbG9nX3BvczsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJY2hhciAqdGV4 dDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFJNX1BBTklDX0xPR19FTlRSSUVTOyBpKyspIHsK PiArCQl0ZXh0ID0gbG9nX2J1ZiArIChwb3MrKyAqIERSTV9QQU5JQ19MT0dfTElORSk7Cj4gKwkJ aWYgKHBvcyA9PSBEUk1fUEFOSUNfTE9HX0VOVFJJRVMpCj4gKwkJCXBvcyA9IDA7Cj4gKwkJaWYg KCp0ZXh0ID09ICdcMCcpCj4gKwkJCWNvbnRpbnVlOwo+ICsJCXNlcV9wdXRzKG0sIHRleHQpOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9wYW5pY19s b2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJ cmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRybV9wYW5pY19sb2dfc2hvdywgTlVMTCk7Cj4gK30K PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9wYW5pY19sb2df b3BzID0gewo+ICsJLm93bmVyICAgPSBUSElTX01PRFVMRSwKPiArCS5vcGVuICAgID0gZHJtX3Bh bmljX2xvZ19vcGVuLAo+ICsJLnJlYWQgICAgPSBzZXFfcmVhZCwKPiArCS5sbHNlZWsgID0gc2Vx X2xzZWVrLAo+ICsJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKPiArfTsKPiArCj4gKy8qCj4g KyAqIEZha2Uvc2ltdWxhdGUgcGFuaWMoKSBhdCBkaWZmZXJlbnQgbGV2ZWxzOgo+ICsgKiAxOiBv bmx5IHRyaWdnZXIgcGFuaWMgaGFuZGxpbmcgaW50ZXJuYWxseQo+ICsgKiAyOiBhZGQgbG9jYWxf aXJxX2Rpc2FibGUoKQo+ICsgKiAzOiBhZGQgYnVzdF9zcGlubG9ja3MoKTsKPiArICogMTAwOiBk b24ndCBmYWtlIGl0LCBkbyBjYWxsIHBhbmljKCkKPiArICovCj4gK3N0YXRpYyBpbnQgZHJtX3Rl eHRfZmFrZV9wYW5pYyh1bnNpZ25lZCBpbnQgbGV2ZWwpCj4gK3sKPiArI2lmbmRlZiBNT0RVTEUK PiArCWludCBvbGRfbG9nbGV2ZWwgPSBjb25zb2xlX2xvZ2xldmVsOwo+ICsjZW5kaWYKPiArCj4g KwlpZiAoIWxldmVsICYmIGxldmVsICE9IDEwMCAmJiBsZXZlbCA+IDMpCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsJaWYgKGxldmVsID09IDEwMCkKPiArCQlwYW5pYygiVEVTVElORyIpOwo+ ICsKPiArCWlmIChsZXZlbCA+IDEpCj4gKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKPiArCj4gKyNp Zm5kZWYgTU9EVUxFCj4gKwljb25zb2xlX3ZlcmJvc2UoKTsKPiArI2VuZGlmCj4gKwlpZiAobGV2 ZWwgPiAyKQo+ICsJCWJ1c3Rfc3BpbmxvY2tzKDEpOwo+ICsKPiArCXByX2VtZXJnKCJLZXJuZWwg cGFuaWMgLSBub3Qgc3luY2luZzogRkFLSU5HPSV1LCBvb3BzX2luX3Byb2dyZXNzPSVkXG4iLAo+ ICsJCSBsZXZlbCwgb29wc19pbl9wcm9ncmVzcyk7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RFQlVH X0JVR1ZFUkJPU0UKPiArCWR1bXBfc3RhY2soKTsKPiArI2VuZGlmCj4gKwkvKiBzaW11bGF0ZSBj YWxsaW5nIHBhbmljX25vdGlmaWVyX2xpc3QgKi8KPiArCWRybV9wYW5pY19oYW5kbGVyKE5VTEws IDAsIE5VTEwpOwo+ICsKPiArCWlmIChsZXZlbCA+IDIpCj4gKwkJYnVzdF9zcGlubG9ja3MoMCk7 Cj4gKwo+ICsjaWZuZGVmIE1PRFVMRQo+ICsJY29uc29sZV9mbHVzaF9vbl9wYW5pYygpOwo+ICsj ZW5kaWYKPiArCXByX2VtZXJnKCItLS1bIGVuZCBLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzog RkFLSU5HXG4iKTsKPiArCj4gKwlpZiAobGV2ZWwgPiAxKQo+ICsJCWxvY2FsX2lycV9lbmFibGUo KTsKPiArCj4gKyNpZm5kZWYgTU9EVUxFCj4gKwljb25zb2xlX2xvZ2xldmVsID0gb2xkX2xvZ2xl dmVsOwo+ICsjZW5kaWYKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXpl X3QgZHJtX3RleHRfcGFuaWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gKwkJCQkgICAgY29u c3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAo+ICsJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90 ICpwcG9zKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwo+ICsJc3NpemVfdCByZXQg PSAwOwo+ICsJY2hhciBidWZbMjRdOwo+ICsJc2l6ZV90IHNpemU7Cj4gKwo+ICsJc2l6ZSA9IG1p bihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKPiArCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVz ZXJfYnVmLCBzaXplKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCj4gKwlidWZbc2l6ZV0gPSAn XDAnOwo+ICsJcmV0ID0ga3N0cnRvdWxsKGJ1ZiwgMCwgJnZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX3RleHRfZmFrZV9wYW5pYyh2YWwpOwo+ICsK PiArCXJldHVybiByZXQgPCAwID8gcmV0IDogY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV90ZXh0X3BhbmljX29wcyA9IHsKPiArCS53cml0 ZSA9ICAgICAgICBkcm1fdGV4dF9wYW5pY193cml0ZSwKPiArCS5vcGVuID0gICAgICAgICBzaW1w bGVfb3BlbiwKPiArCS5sbHNlZWsgPSAgICAgICBkZWZhdWx0X2xsc2VlaywKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgZHJtX3BhbmljX2xvZ2ZzX2luaXQodm9pZCkKPiArewo+ICsJZHJtX3Bhbmlj X2xvZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRybS1wYW5pYyIsIE5VTEwpOwo+ICsJ aWYgKCFkcm1fcGFuaWNfbG9nZnNfcm9vdCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlp ZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImxvZyIsIFNfSVJVR08sIGRybV9wYW5pY19sb2dmc19y b290LCBOVUxMLAo+ICsJCQkgICAgJmRybV9wYW5pY19sb2dfb3BzKSkKPiArCQlnb3RvIGVycl9y ZW1vdmU7Cj4gKwo+ICsJbG9nX2J1ZiA9IGt6YWxsb2MoRFJNX1BBTklDX0xPR19TSVpFLCBHRlBf S0VSTkVMKTsKPiArCWlmICghbG9nX2J1ZikKPiArCQlnb3RvIGVycl9yZW1vdmU7Cj4gKwo+ICsJ ZGVidWdmc19jcmVhdGVfZmlsZSgicGFuaWMiLCBTX0lXVVNSLCBkcm1fcGFuaWNfbG9nZnNfcm9v dCwgTlVMTCwKPiArCQkJICAgICZkcm1fdGV4dF9wYW5pY19vcHMpOwo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArZXJyX3JlbW92ZToKPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkcm1fcGFu aWNfbG9nZnNfcm9vdCk7Cj4gKwo+ICsJcmV0dXJuIC1FTk9NRU07Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRybV9wYW5pY19sb2dmc19leGl0KHZvaWQpCj4gK3sKPiArCWRlYnVnZnNfcmVtb3Zl X3JlY3Vyc2l2ZShkcm1fcGFuaWNfbG9nZnNfcm9vdCk7Cj4gKwlrZnJlZShsb2dfYnVmKTsKPiAr CWxvZ19idWYgPSBOVUxMOwo+ICt9Cj4gKwo+ICsjZWxzZQo+ICsKPiArc3RhdGljIGludCBkcm1f cGFuaWNfbG9nZnNfaW5pdCh2b2lkKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRybV9w YW5pY19sb2dmc19leGl0KHZvaWQpCj4gK3sKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX3Bh bmljX2xvZyhjb25zdCBjaGFyICpmbXQsIC4uLikKPiArewo+ICt9Cj4gKwo+ICsjZW5kaWYKPiAr Cj4gKwo+ICt2b2lkIF9faW5pdCBkcm1fcGFuaWNfaW5pdCh2b2lkKQo+ICt7Cj4gKwlkcm1fcGFu aWNfa21zZ3MgPSBremFsbG9jKERSTV9QQU5JQ19NQVhfS01TR1MsIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFkcm1fcGFuaWNfa21zZ3MpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZXR1cCBw YW5pYyBoYW5kbGVyXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHJtX3BhbmljX2xv Z2ZzX2luaXQoKTsKPiArZHJtX3BhbmljX2xvZygiJXNcbiIsIF9fZnVuY19fKTsKPiArCXJlZ2lz dGVyX2NvbnNvbGUoJmRybV9wYW5pY19jb25zb2xlKTsKPiArCWF0b21pY19ub3RpZmllcl9jaGFp bl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiArCQkJCSAgICAgICAmZHJtX3Bhbmlj X2Jsb2NrKTsKPiArfQo+ICsKPiArdm9pZCBfX2V4aXQgZHJtX3BhbmljX2V4aXQodm9pZCkKPiAr ewo+ICsJaWYgKCFkcm1fcGFuaWNfa21zZ3MpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRybV9wYW5p Y19sb2dmc19leGl0KCk7Cj4gKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFu aWNfbm90aWZpZXJfbGlzdCwKPiArCQkJCQkgJmRybV9wYW5pY19ibG9jayk7Cj4gKwl1bnJlZ2lz dGVyX2NvbnNvbGUoJmRybV9wYW5pY19jb25zb2xlKTsKPiArCWtmcmVlKGRybV9wYW5pY19rbXNn cyk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0v ZHJtUC5oCj4gaW5kZXggYmM3MDA2ZS4uNGU4NDY1NCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS9kcm1QLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKPiBAQCAtNTUwLDYgKzU1MCwyOCBA QCBzdHJ1Y3QgZHJtX2RyaXZlciB7Cj4gIAkJCSAgYm9vbCBmcm9tX29wZW4pOwo+ICAJdm9pZCAo Km1hc3Rlcl9kcm9wKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdik7Cj4gIAo+ICsJLyoqCj4gKwkgKiBAcGFuaWM6Cj4gKwkgKgo+ICsJICogVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgb24gcGFuaWMoKSBhc2tpbmcgZm9yIGEgZnJhbWVidWZmZXIgdG8K PiArCSAqIGRpc3BsYXkgdGhlIHBhbmljIG1lc3NhZ2VzIG9uLiBJdCBhbHNvIG5lZWRzIHRoZSB2 aXJ0dWFsIGFkZHJlc3MKPiArCSAqIG9mIHRoZSBiYWNraW5nIGJ1ZmZlci4KPiArCSAqIFRoaXMg ZnVuY3Rpb24gaXMgb3B0aW9uYWwuCj4gKwkgKgo+ICsJICogTk9URToKPiArCSAqCj4gKwkgKiBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW4gYW5kIGl0 IGNhbm5vdAo+ICsJICogc2xlZXAuIENhcmUgbXVzdCBiZSB0YWtlbiBzbyB0aGUgbWFjaGluZSBp cyBub3Qga2lsbGVkIGV2ZW4gaGFyZGVyLAo+ICsJICogcHJldmVudGluZyBvdXRwdXQgZnJvbSBn b2luZyBvdXQgb24gc2VyaWFsL25ldGNvbnNvbGUuCj4gKwkgKgo+ICsJICogUkVUVVJOUzoKPiAr CSAqCj4gKwkgKiBGcmFtZWJ1ZmZlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhl IHBhbmljIG1lc3NhZ2VzLAo+ICsJICogYWxvbmdzaWRlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2Yg dGhlIGJhY2tpbmcgYnVmZmVyLCBvciBOVUxMIGlmCj4gKwkgKiB0aGUgZHJpdmVyIGlzIHVuYWJs ZSB0byBwcm92aWRlIHRoaXMuCj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKigq cGFuaWMpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKip2bWVtKTsKPiArCj4gIAlpbnQg KCpkZWJ1Z2ZzX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiAgCXZvaWQgKCpkZWJ1 Z2ZzX2NsZWFudXApKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKPiAgCj4gLS0gCj4gMi44LjIK PiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK Ci0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpo dHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK