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:18:59 +0200 Message-ID: <20160810091859.GR6232@phenom.ffwll.local> References: <1470764742-20323-1-git-send-email-noralf@tronnes.org> <1470764742-20323-3-git-send-email-noralf@tronnes.org> <20160810091529.GQ6232@phenom.ffwll.local> 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 67AF96E0BC for ; Wed, 10 Aug 2016 09:19:03 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id i5so8302780wmg.2 for ; Wed, 10 Aug 2016 02:19:03 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160810091529.GQ6232@phenom.ffwll.local> 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 T24gV2VkLCBBdWcgMTAsIDIwMTYgYXQgMTE6MTU6MjlBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBUdWUsIEF1ZyAwOSwgMjAxNiBhdCAwNzo0NTo0MVBNICswMjAwLCBOb3JhbGYg VHLDuG5uZXMgd3JvdGU6Cj4gPiBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igb3V0cHV0dGluZyBrZXJu ZWwgbWVzc2FnZXMgb24gcGFuaWMoKS4KPiA+IFRoZSBkcml2ZXJzIHRoYXQgc3VwcG9ydHMgaXQs IHByb3ZpZGVzIGEgZnJhbWVidWZmZXIgdGhhdCB0aGUKPiA+IG1lc3NhZ2VzIGNhbiBiZSByZW5k ZXJlZCBvbi4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZA dHJvbm5lcy5vcmc+Cj4gCj4gVGhpbmtpbmcgYWJvdXQgaG93IHdlIHNob3VsZCBpbXBsZW1lbnQg dGhpcyBpbiBhIGZ1bGwtYmxvd24gZHJpdmVyLCBJCj4gdGhpbmsgd2Ugd2lsbCBuZWVkIGEgYml0 IG1vcmUgdGhhbiB0aGlzLiBIZXJlJ3MgdGhlIGFkZGl0aW9uYWwKPiByZXF1aXJlbWVudHMgSSd2 ZSBjb21lIHVwIHRoYXQgYSBkcml2ZXIgbW9yZSBjb21wbGV4IHRoYW4gc2RybSB3b3VsZCBuZWVk Cj4gZm9yIHJlbGlhYmxlIHBhbmljIGhhbmRsaW5nOgo+IAo+IC0gTXVsdGlwbGUgb3V0cHV0cywg d2l0aCBtdWx0aXBsZSBmcmFtZWJ1ZmZlciAob3Igb25lIGZyYW1lYnVmZmVyIGFuZAo+ICAgbXVs dGlwbGUgb2Zmc2V0cyB3aXRoaW4pLiBBbmQgc2luY2Ugb25lIGRpc3BsYXkgbWlnaHQgYmUgZGVh ZCB3ZSBzaG91bGQKPiAgIHRyeSByZWFsbHkgaGFyZCB0byBzaG93IHRoZSBvb3BzIG9uIGFsbCBv ZiB0aGVtLiBDb25zZXF1ZW5jZTogSSB0aGluayB3ZQo+ICAgbmVlZCB0byBhbHNvIGxvb3Agb3Zl ciBhbGwgZHJtX2NydGMgaW4gYSBkcm1fZGV2aWNlLCB0byBiZSBhYmxlIHRvCj4gICBzdXBwb3J0 IHRoZW0gYWxsLgo+IAo+IC0gV2l0aCBkZXNrdG9wIGdwdXMgeW91IHByZXR0eSBtdWNoIGFsd2F5 cyBlbmQgdXAgd2l0aCBhIHRpbGVkCj4gICBmcmFtZWJ1ZmZlci4gQW5kIGZyb20gYW4gb29wcyBj b250ZXh0IGl0J3MgZ29pbmcgdG8gYmUgaW1wb3NzaWJsZSB0bwo+ICAgZGV0aWxlIHRoYXQgcXVp Y2tseS4gSSB0aGluayBmb3IgdGhpcyB3ZSBuZWVkIGEgaGVscGVyIHRvIGRyYXcgeC95Cj4gICBw aXhlbHMgKGl0J3MgZ29pbmcgdG8gYmUgZGVhZCBzbG93LCBidXQgbWVoKSwgd2l0aCBhIGRlZmF1 bHQKPiAgIGltcGxlbWVudGF0aW9uIHdoaWNoIGFzc3VtZXMgbGluZWFyIGxheW91dC4gRHJpdmVy cyBjb3VsZCB0aGVuIGZyb2IgeC95Cj4gICBjb29yZGluYXRlcyBmaXJzdCBpbiB0aGVpciBvd24g bG9naWMgYW5kIGNhbGwgaW50byB0aGF0IGZ1bmN0aW9uLgo+IAo+IC0gVGhlcmUncyBhIGdvb2Qg Y2hhbmNlIHlvdSdyZSBzaG93aW5nIGEgdmlkZW8gb24gYSB5dXYgYnVmZmVyCj4gICBmdWxsLXNj cmVlbi4gSWYgd2UgZG9uJ3QgYm90aGVyIHRvbyBtdWNoIHdpdGggd2hhdCBpdCBsb29rcyBsaWtl LCBidXQKPiAgIG9ubHkgY2FyZSBhYm91dCBhIGZvcmVncm91bmQvYmFja2dyb3VuZCBjb2xvciB0 aGVuIGl0J3MgYWxzbyBlYXN5IHRvCj4gICBpbXBsZW1lbnQgYSBkcmF3X3h5X3BpeGVsIGZvciB0 aGVzZSBmcmFtZWJ1ZmZlcnMuIFRoYXQgbWVhbnMgdGhvdWdoIHRoYXQKPiAgIHlvdSBjYW4ndCBj bGVhciB0aGluZ3Mgd2l0aCBtZW1zZXQsIGJ1dCB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgdGhlCj4g ICBpbnRlcmZhY2UgZnVuYyBmb3IgZWFjaCBwaXhlbC4gWWVzIHRoaXMgaXMgZ29pbmcgdG8gYmUg ZGVhZCBzbG93LCBidXQKPiAgIHdobyBjYXJlcyBhcyBsb25nIGFzIHRoZSBvb3BzIGV2ZW50dWFs bHkgc2hvd3MgdXAgOy0pCj4gCj4gLSBUaGUgZnJhbWVidWZmZXIgc2l6ZSBkb2Vzbid0IG5lY2Vz c2FyaWx5IG1hdGNoIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlCj4gICBwYXJ0LiBQcm9iYWJseSBi ZXN0IGlmIHdlIGRpZyB0aGlzIG91dCBmcm9tIHRoZSBwbGFuZV9zdGF0ZSBkaXJlY3RseQo+ICAg KGxlc3MgZnJhZ2lsZSBjb2RlIGluIGRyaXZlcnMpLiBSZWx5aW5nIG9uIGRybV9wbGFuZV9zdGF0 ZSBtZWFucyB0aGlzCj4gICB3aWxsIG9ubHkgd29yayBvbiBhdG9taWMgZHJpdmVycyAoaW4gbGVn YWN5IGRyaXZlcnMgdGhpcyBpbmZvcm1hdGlvbiBpcwo+ICAgaGlkZGVuIGluIGRyaXZlci1wcml2 YXRlIGNvcm5lcnMpLCBidXQgSSB0aGluayB0aGF0J3MgdG90YWxseSBvay4KPiAKPiAtIFdlIG5l ZWQgbG9ja2luZy4gT25lIG9mIHRoZSBiaWdnZXN0IHByb2JsZW1zIHdpdGggdGhlIG9sZCBvb3Bz IGhhbmRsaW5nCj4gICB3YXMgdGhhdCBpdCB3YXMgdmVyeSBnb29kIGF0IHRyYW1wbGluZyBvdmVy IGRyaXZlciBzdGF0ZSwgY2F1c2luZyBtb3JlCj4gICAodW5yZWxhdGVkKSBvb3BzZXMgaW4ga21z IGNvZGUgYW5kIG1ha2luZyBzdXJlIHRoZSBvcmlnaW5hbCBvb3BzIHdhcyBubwo+ICAgbG9uZ2Vy IHZpc2libGUuIEkgdGhpbmsgdGhlIHNoYXJlZCBjb2RlIG11c3QgdGFrZSBjYXJlIG9mIGFsbCB0 aGUKPiAgIGxvY2tpbmcgbmVlZHMgdG8gYXZvaWQgZnJhZ2lsZSBjb2RlIGluIGRyaXZlcnMuIHd3 X211dGV4X3RyeWxvY2sgb24gdGhlCj4gICBkcm1fY3J0YyBhbmQgZHJtX3BsYW5lIHNob3VsZCBi ZSBlbm91Z2ggKHdlIG5lZWQgYm90aCBmb3IgZHJpdmVycyB3aGVyZQo+ICAgcGxhbmVzIGNhbiBi ZSByZWFzc2lnbmVkIGJldHdlZW4gZHJpdmVycykuCj4gCj4gLSBNdWx0aXBsZSBwbGFuZXMgd2hp Y2ggbWlnaHQgb2NjbHVkZSB0aGUgcHJpbWFyeSBwbGFuZTogSSB0aGluayB3ZSBzaG91bGQKPiAg IGp1c3QgYm90aGVyIHdpdGggdGhlIHByaW1hcnkgcGxhbmUsIGFuZCBtYXliZSBnaXZlIGRyaXZl cnMgYQo+ICAgcGFuaWNfY29tbWl0IGhvb2sgd2hlcmUgdGhleSBjb3VsZCB0cnkgdG8gZGlzYWJs ZSBhbnkgYWRkaXRpb25hbCBwbGFuZXMuCj4gICBCdXQgdGhhdCdzIG5vdCBzb21ldGhpbmcgd2Ug bmVlZCBpbiB0aGUgZmlyc3QgdmVyc2lvbiBoZXJlIGF0IGFsbC4KPiAKPiAtIEkgdGhpbmsgc29t ZSBoZWxwZXJzIGZvciBjcmVhdGluZyB0aGUgdm1hcCB3b3VsZCBiZSBuaWNlLiBTaG91bGQgYmUK PiAgIHNpbXBsZSBmb3IgY21hLWJhY2tlZCBmcmFtZWJ1ZmZlcnMsIGFuZCBhbHNvIHNpbXBsZSBp ZiB5b3UgdXNlIGEgbm9ybWFsCj4gICBzaG1lbSBiYWNrZWQgZ2VtIGJ1ZmZlci4gRm9yIGNtYSBw cm9iYWJseSBiZXN0IGlmIGRyaXZlcnMgZG9uJ3QgZXZlbgo+ICAgbmVlZCB0byBib3RoZXIgd2l0 aCB0aGlzLgo+IAo+IC0gRm9yIGRyaXZlciBjb252ZW5pZW5jZSBJIHRoaW5rIHdlIGNvdWxkIGNo ZWNrIGEgZmV3IHRoaW5ncyBhYm91dAo+ICAgdmlzaWJpbGl0eSBvZiBlYWNoIHBsYW5lIChlLmcu IGNydGNfc3RhdGUtPmFjdGl2ZSksIGFuZCBza2lwIGlmIHRoZXJlJ3MKPiAgIG5vIGNoYW5jZSBp dCBjYW4gYmUgc2Vlbi4gRG9pbmcgbGVzcyBtZWFucyBsZXNzIGNoYW5jZXMgdG8gYmxvdyB1cCwg YW5kCj4gICBoaWdoZXIgY2hhbmNlcyB0aGF0IHRoZSBvbmUgc2NyZWVuIHdoaWNoIGlzIG9uIGFj dHVhbGx5IGVuZHMgdXAgd2l0aCB0aGUKPiAgIG9vcHMgb24gaXQuCj4gCj4gLSBNaW5pbWFsIGNs ZWFudXAuIEkgdGhpbmsgd2UgY2FuIGp1c3QgbGVhayB0aGUgdm1hcHBpbmcsIG5vIGhhcm0gaW4g dGhhdC4KPiAgIEJ1dCB0aGUga21zIGxvY2tzIG5lZWQgdG8gYmUgZHJvcHBlZCBhZ2Fpbi4gRHJv cHBpbmcgdGhlbSBhZ2FpbiBtaWdodAo+ICAgaW5jcmVhc2UgdGhlIG9kZHMgdGhhdCB0aGUgc3lz dGVtIGxpbXBzIGFsb25nIGxvbmcgZW5vdWdoIGZvciBsb2dzIHRvCj4gICBoaXQgdGhlIGRpc2tz Lgo+IAo+IFRha2luZyB0aGlzIGFsbCB0b2dldGhlciwgSSB0aGluayB0aGUgZHJpdmVyIGludGVy ZmFjZSBzaG91bGQgYmUKPiByZXN0cnVjdHVyZWQgYSBiaXQsIGFuZCB0aGF0IG1vc3Qgb2YgdGhl IGhhbmRsaW5nIHNob3VsZCBiZSBvbiB0aGUKPiBkcm1fZnJhbWVidWZmZXIgZGlyZWN0bHk6Cj4g Cj4gc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB7Cj4gCS8qIEZvciB2bWFwcGluZyB0aGUg c2VsZWN0ZWQgZnJhbWVidWZmZXIgaW4gYSBwYW5pYyBjb250ZXh0LiBNdXN0Cj4gCSAqIGJlIHN1 cGVyIGNhcmVmdWwgYWJvdXQgbG9ja2luZyAob25seSB0cnlsb2NraW5nIGFsbG93ZWQpLCBjYW4K PiAJICogcmV0dXJuIE5VTEwgaWYgaXQgZGlkbid0IHdvcmsgb3V0LiBUaGUgcmV0dXJuIHZhbHVl IGlzIGFuCj4gCSAqIG9wYXF1ZSBjb29raWUgd2hpY2ggaXMgcGFzc2VkIHRvIEBwYW5pY19kcmF3 X3h5LCBpdCBjYW4gYmUKPiAJICogYW55dGhpbmc6IHZtYXAgYXJlYSwgc3RydWN0dXJlIHdpdGgg bW9yZSBkZXRhaWxzLCBqdXN0IGEgZmV3Cj4gCSAqIGZsYWdzLCAuLi4KPiAJICovCj4gCXZvaWQg KihwYW5pY192bWFwKShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7Cj4gCj4gCS8qIEZvciBk cmF3aW5nIHBpeGVscyBvbnRvIGEgZnJhbWVidWZmZXIgbWFwcGluZyB3aXRoIEBwYW5pY192bWFw Lgo+IAkgKiBUaGlzIGlzIG9wdGlvbmFsLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhc3N1 bWVzIHRoYXQgdm1hcAo+IAkgKiBwb2ludHMgYXQgYSBsaW5lYXIgbWFwcGluZyBvZiB0aGUgZnJh bWVidWZmZXIuCj4gCSAqLwo+IAl2b2lkIChwYW5pY19kcmF3X3h5KShzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICpmYiwgdm9pZCAqdm1hcCwKPiAJCQkgICAgIGludCB4LCBpbnQgeSwgYm9vbCBmb3Jl Z3JvdW5kKTsKPiB9Owo+IAo+IE9mYyBjb21tZW50cyBuZWVkIHRvIGJlIGZsZXNoZWQgb3V0IHNv bWUgbW9yZSwgYnV0IHRoZSBpZGVhIGlzIHRoYXQgYWxsCj4gdGhlIGZiIHNlbGVjdGlvbiBhbmQg bG9va3VwIGlzIGhhbmRsZWQgaW4gc2hhcmVkIGNvZGUgKGFuZCB3aXRoIHByb3Blcgo+IGxvY2tp bmcsIGJ1dCBvbmx5IGZvciBhdG9taWMgZHJpdmVycykuCj4gCj4gVGhvdWdodHM/CgpPbmUgbW9y ZTogVGhpcyBpcyBxdWl0ZSBhIGJpdCBvZiB3b3JrIHRvIGdldCBnb2luZywgSSBlc3RpbWF0ZSB0 aGF0IGl0J3MKZ29vZCBlbm91Z2ggdG8gZmlsbCBhIGZ1bGwgZ3NvYyBpbnRlcm5zaGlwLCBzbyBh Ym91dCAyLTMgbW9udGhzIG9mIHdvcmssCmJ1dCBmb3Igc29tZW9uZSB1bmV4cGVyaWVuY2VkLCB1 bmxpa2UgeW91IDstKQotRGFuaWVsCgo+IC1EYW5pZWwKPiAKPiA+IC0tLQo+ID4gIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICB8ICAgMiArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f ZHJ2LmMgICAgICB8ICAgMyArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oIHwg ICA0ICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMgICAgfCA2MDYgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBpbmNsdWRlL2RybS9kcm1QLmgg ICAgICAgICAgICAgfCAgMjIgKysKPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDYzNiBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9kcm1fcGFuaWMuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiBpbmRleCBlYmEzMmFkLi5mZjA0ZTQx IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+IEBAIC0xMiw3ICsxMiw3IEBAIGRybS15ICAgICAgIDo9 CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCj4gPiAgCQlkcm1faW5mby5vIGRy bV9kZWJ1Z2ZzLm8gZHJtX2VuY29kZXJfc2xhdmUubyBcCj4gPiAgCQlkcm1fdHJhY2VfcG9pbnRz Lm8gZHJtX2dsb2JhbC5vIGRybV9wcmltZS5vIFwKPiA+ICAJCWRybV9yZWN0Lm8gZHJtX3ZtYV9t YW5hZ2VyLm8gZHJtX2ZsaXBfd29yay5vIFwKPiA+IC0JCWRybV9tb2Rlc2V0X2xvY2subyBkcm1f YXRvbWljLm8gZHJtX2JyaWRnZS5vCj4gPiArCQlkcm1fbW9kZXNldF9sb2NrLm8gZHJtX2F0b21p Yy5vIGRybV9icmlkZ2UubyBkcm1fcGFuaWMubwo+ID4gIAo+ID4gIGRybS0kKENPTkZJR19DT01Q QVQpICs9IGRybV9pb2MzMi5vCj4gPiAgZHJtLSQoQ09ORklHX0RSTV9HRU1fQ01BX0hFTFBFUikg Kz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gaW5kZXggM2IxNDM2Ni4u NDU3ZWU5MSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+IEBAIC04NjEsNiArODYxLDggQEAgc3Rh dGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKQo+ID4gIAkJZ290byBlcnJfcDM7Cj4g PiAgCX0KPiA+ICAKPiA+ICsJZHJtX3BhbmljX2luaXQoKTsKPiA+ICsKPiA+ICAJRFJNX0lORk8o IkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzXG4iLAo+ID4gIAkJIENPUkVfTkFNRSwgQ09SRV9N QUpPUiwgQ09SRV9NSU5PUiwgQ09SRV9QQVRDSExFVkVMLCBDT1JFX0RBVEUpOwo+ID4gIAlyZXR1 cm4gMDsKPiA+IEBAIC04NzYsNiArODc4LDcgQEAgZXJyX3AxOgo+ID4gIAo+ID4gIHN0YXRpYyB2 b2lkIF9fZXhpdCBkcm1fY29yZV9leGl0KHZvaWQpCj4gPiAgewo+ID4gKwlkcm1fcGFuaWNfZXhp dCgpOwo+ID4gIAlkZWJ1Z2ZzX3JlbW92ZShkcm1fZGVidWdmc19yb290KTsKPiA+ICAJZHJtX3N5 c2ZzX2Rlc3Ryb3koKTsKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2ludGVybmFsLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKPiA+IGluZGV4IGI4 NmRjOWIuLjc0NjNkOWQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVy bmFsLmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAo+ID4gQEAgLTkw LDYgKzkwLDEwIEBAIGludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKPiA+ICB2b2lkIGRybV9nZW1fb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7Cj4gPiAgdm9pZCBkcm1fZ2VtX3Jl bGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZh dGUpOwo+ID4gIAo+ID4gKy8qIGRybV9wYW5pYy5jICovCj4gPiArdm9pZCBkcm1fcGFuaWNfaW5p dCh2b2lkKTsKPiA+ICt2b2lkIGRybV9wYW5pY19leGl0KHZvaWQpOwo+ID4gKwo+ID4gIC8qIGRy bV9kZWJ1Z2ZzLmMgKi8KPiA+ICAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCj4gPiAgaW50 IGRybV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwK PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BhbmljLmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX3BhbmljLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAw MDAwLi5lMTg1YzlkCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3BhbmljLmMKPiA+IEBAIC0wLDAgKzEsNjA2IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmln aHQgMjAxNiBOb3JhbGYgVHLDuG5uZXMKPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPiA+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ID4gKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGFzbS91bmFs aWduZWQuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv Y29uc29sZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2ZvbnQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L3NlcV9maWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fcGFuaWNfZmIg ewo+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ICsJdm9pZCAqdm1lbTsKPiA+ ICsJY29uc3Qgc3RydWN0IGZvbnRfZGVzYyAqZm9udDsKPiA+ICsJdW5zaWduZWQgaW50IGNvbHM7 Cj4gPiArCXVuc2lnbmVkIGludCByb3dzOwo+ID4gKwl1bnNpZ25lZCBpbnQgeHBvczsKPiA+ICsJ dW5zaWduZWQgaW50IHlwb3M7Cj4gPiArfTsKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9QQU5JQ19N QVhfRkJTCTY0Cj4gPiArc3RhdGljIHN0cnVjdCBkcm1fcGFuaWNfZmIgZHJtX3BhbmljX2Zic1tE Uk1fUEFOSUNfTUFYX0ZCU107Cj4gPiArCj4gPiArI2RlZmluZSBEUk1fUEFOSUNfTUFYX0tNU0dT CVNaXzRLCj4gPiArc3RhdGljIGNoYXIgKmRybV9wYW5pY19rbXNnczsKPiA+ICtzdGF0aWMgc2l6 ZV90IGRybV9wYW5pY19rbXNnc19wb3M7Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgZHJtX3Bhbmlj X2FjdGl2ZTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nKGNvbnN0IGNoYXIg KmZtdCwgLi4uKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtX3BhbmljX2RyYXdf cGl4ZWwodTggKmRzdCwgdTMyIHBpeGVsX2Zvcm1hdCwgYm9vbCB2YWwpCj4gPiArewo+ID4gKwlz d2l0Y2ggKHBpeGVsX2Zvcm1hdCAmIH5EUk1fRk9STUFUX0JJR19FTkRJQU4pIHsKPiA+ICsKPiA+ ICsJY2FzZSBEUk1fRk9STUFUX0M4Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCMzMyOgo+ID4g KwljYXNlIERSTV9GT1JNQVRfQkdSMjMzOgo+ID4gKwkJKmRzdCA9IHZhbCA/IDB4ZmYgOiAweDAw Owo+ID4gKwkJYnJlYWs7Cj4gPiArCj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCNDQ0NDoKPiA+ ICsJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfWEJHUjQ0 NDQ6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSNDQ0NDoKPiA+ICsJCXB1dF91bmFsaWduZWQo dmFsID8gMHgwZmZmIDogMHgwMDAwLCAodTE2ICopZHN0KTsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDQ0NDQ6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JB NDQ0NDoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0JHUlg0NDQ0Ogo+ID4gKwljYXNlIERSTV9GT1JN QVRfQkdSQTQ0NDQ6Cj4gPiArCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4ZmZmMCA6IDB4MDAwMCwg KHUxNiAqKWRzdCk7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hS R0IxNTU1Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4gPiArCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSMTU1NToKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IxNTU1Ogo+ID4gKwkJcHV0 X3VuYWxpZ25lZCh2YWwgPyAweDdmZmYgOiAweDAwMDAsICh1MTYgKilkc3QpOwo+ID4gKwkJYnJl YWs7Cj4gPiArCj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNTU1MToKPiA+ICsJY2FzZSBEUk1f Rk9STUFUX1JHQkE1NTUxOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSWDU1NTE6Cj4gPiArCWNh c2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKPiA+ICsJCXB1dF91bmFsaWduZWQodmFsID8gMHhmZmZl IDogMHgwMDAwLCAodTE2ICopZHN0KTsKPiA+ICsJCWJyZWFrOwo+ID4gKwo+ID4gKwljYXNlIERS TV9GT1JNQVRfUkdCNTY1Ogo+ID4gKwljYXNlIERSTV9GT1JNQVRfQkdSNTY1Ogo+ID4gKwkJcHV0 X3VuYWxpZ25lZCh2YWwgPyAweGZmZmYgOiAweDAwMDAsICh1MTYgKilkc3QpOwo+ID4gKwkJYnJl YWs7Cj4gPiArCj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Cj4gPiArCWNhc2UgRFJNX0ZP Uk1BVF9CR1I4ODg6Cj4gPiArCQlkc3RbMF0gPSB2YWwgPyAweGZmIDogMHgwMDsKPiA+ICsJCWRz dFsxXSA9IHZhbCA/IDB4ZmYgOiAweDAwOwo+ID4gKwkJZHN0WzJdID0gdmFsID8gMHhmZiA6IDB4 MDA7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+ ID4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdS ODg4ODoKPiA+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ID4gKwkJcHV0X3VuYWxpZ25l ZCh2YWwgPyAweDAwZmZmZmZmIDogMHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7Cj4gPiArCQlicmVh azsKPiA+ICsKPiA+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4Ogo+ID4gKwljYXNlIERSTV9G T1JNQVRfUkdCQTg4ODg6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKPiA+ICsJY2Fz ZSBEUk1fRk9STUFUX0JHUkE4ODg4Ogo+ID4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZmZmZm ZjAwIDogMHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJ Y2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjIx MDEwMTA6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKPiA+ICsJY2FzZSBEUk1f Rk9STUFUX0FCR1IyMTAxMDEwOgo+ID4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweDNmZmZmZmZm IDogMHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7Cj4gPiArCQlicmVhazsKPiA+ICsKPiA+ICsJY2Fz ZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgo+ID4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAx MDI6Cj4gPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYMTAxMDEwMjoKPiA+ICsJY2FzZSBEUk1fRk9S TUFUX0JHUkExMDEwMTAyOgo+ID4gKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZmZmZmZmZjIDog MHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7Cj4gPiArCQlicmVhazsKPiA+ICsJfQo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfcmVuZGVyKHN0cnVjdCBkcm1fcGFuaWNfZmIg KnBmYiwKPiA+ICsJCQkgICAgIGNvbnN0IGNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBsZW4pCj4g PiArewo+ID4gKwljb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpmb250ID0gcGZiLT5mb250Owo+ID4g Kwl1bnNpZ25lZCBpbnQgcGl4X2RlcHRoLCBwaXhfYnBwLCBjcHA7Cj4gPiArCXVuc2lnbmVkIGlu dCBjb2wgPSBwZmItPnhwb3M7Cj4gPiArCXVuc2lnbmVkIGludCByb3cgPSBwZmItPnlwb3M7Cj4g PiArCXVuc2lnbmVkIGludCBpLCBoLCB3Owo+ID4gKwl2b2lkICpkc3QsICpwb3M7Cj4gPiArCXU4 IGZvbnRsaW5lOwo+ID4gKwo+ID4gKwlpZiAoKHJvdyArIDEpICogZm9udC0+aGVpZ2h0ID4gcGZi LT5mYi0+aGVpZ2h0KQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlpZiAoKGNvbCArIGxlbikg KiBmb250LT53aWR0aCA+IHBmYi0+ZmItPndpZHRoKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4g Kwlkcm1fZmJfZ2V0X2JwcF9kZXB0aChwZmItPmZiLT5waXhlbF9mb3JtYXQsICZwaXhfZGVwdGgs ICZwaXhfYnBwKTsKPiA+ICsJY3BwID0gRElWX1JPVU5EX1VQKHBpeF9icHAsIDgpOwo+ID4gKwo+ ID4gKwkvKiBUT0RPOiBzaG91bGQgZmItPm9mZnNldHNbMF0gYmUgYWRkZWQgaGVyZT8gKi8KPiA+ ICsJZHN0ID0gcGZiLT52bWVtICsgKHJvdyAqIGZvbnQtPmhlaWdodCAqIHBmYi0+ZmItPnBpdGNo ZXNbMF0pICsKPiA+ICsJICAgICAgKGNvbCAqIGZvbnQtPndpZHRoICogY3BwKTsKPiA+ICsKPiA+ ICsJZm9yIChoID0gMDsgaCA8IGZvbnQtPmhlaWdodDsgaCsrKSB7Cj4gPiArCQlwb3MgPSBkc3Q7 Cj4gPiArCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKPiA+ICsJCQlmb250bGlu ZSA9ICoodTggKikoZm9udC0+ZGF0YSArIHRleHRbaV0gKiBmb250LT5oZWlnaHQgKyBoKTsKPiA+ ICsKPiA+ICsJCQlmb3IgKHcgPSAwOyB3IDwgZm9udC0+d2lkdGg7IHcrKykgewo+ID4gKwkJCQlk cm1fcGFuaWNfZHJhd19waXhlbChwb3MsIHBmYi0+ZmItPnBpeGVsX2Zvcm1hdCwKPiA+ICsJCQkJ CQkgICAgIGZvbnRsaW5lICYgQklUKDcgLSB3KSk7Cj4gPiArCQkJCXBvcyArPSBjcHA7Cj4gPiAr CQkJfQo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZHN0ICs9IHBmYi0+ZmItPnBpdGNoZXNbMF07Cj4g PiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX3Njcm9sbF91cChz dHJ1Y3QgZHJtX3BhbmljX2ZiICpwZmIpCj4gPiArewo+ID4gKwl2b2lkICpzcmMgPSBwZmItPnZt ZW0gKyAocGZiLT5mb250LT5oZWlnaHQgKiBwZmItPmZiLT5waXRjaGVzWzBdKTsKPiA+ICsJc2l6 ZV90IGxlbiA9IChwZmItPmZiLT5oZWlnaHQgLSBwZmItPmZvbnQtPmhlaWdodCkgKgo+ID4gKwkJ ICAgICBwZmItPmZiLT5waXRjaGVzWzBdOwo+ID4gKwo+ID4gKwlkcm1fcGFuaWNfbG9nKCIlc1xu IiwgX19mdW5jX18pOwo+ID4gKwo+ID4gKwltZW1tb3ZlKHBmYi0+dm1lbSwgc3JjLCBsZW4pOwo+ ID4gKwltZW1zZXQocGZiLT52bWVtICsgbGVuLCAwLCBwZmItPmZvbnQtPmhlaWdodCAqIHBmYi0+ ZmItPnBpdGNoZXNbMF0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNf Y2xlYXJfc2NyZWVuKHN0cnVjdCBkcm1fcGFuaWNfZmIgKnBmYikKPiA+ICt7Cj4gPiArCW1lbXNl dChwZmItPnZtZW0sIDAsIHBmYi0+ZmItPmhlaWdodCAqIHBmYi0+ZmItPnBpdGNoZXNbMF0pOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nX21zZyhjaGFyICpwcmUs IGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikKPiA+ICt7Cj4gPiArCWNoYXIgYnVm WzUxMl07Cj4gPiArCj4gPiArCWlmIChsZW4gPiA1MTApCj4gPiArCQlsZW4gPSA1MTA7Cj4gPiAr Cj4gPiArCW1lbWNweShidWYsIHN0ciwgbGVuKTsKPiA+ICsJYnVmW2xlbl0gPSAnXG4nOwo+ID4g KwlidWZbbGVuICsgMV0gPSAnXDAnOwo+ID4gKwo+ID4gKwlkcm1fcGFuaWNfbG9nKCIlcyVzIiwg cHJlLCBidWYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBkcm1fcGFuaWNfcHV0Y3Nf bm9fbGYoc3RydWN0IGRybV9wYW5pY19mYiAqcGZiLAo+ID4gKwkJCQkgIGNvbnN0IGNoYXIgKnN0 ciwgdW5zaWduZWQgaW50IGxlbikKPiA+ICt7Cj4gPiArCWRybV9wYW5pY19sb2coIiVzKGxlbj0l dSkgeD0ldSwgeT0ldVxuIiwgX19mdW5jX18sIGxlbiwKPiA+ICsJCQlwZmItPnhwb3MsIHBmYi0+ eXBvcyk7Cj4gPiArCj4gPiArCWlmIChsZW4gPD0gMCkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ ICsJZHJtX3BhbmljX2xvZ19tc2coIiIsIHN0ciwgbGVuKTsKPiA+ICsKPiA+ICsJZHJtX3Bhbmlj X3JlbmRlcihwZmIsIHN0ciwgbGVuKTsKPiA+ICsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZv aWQgZHJtX3BhbmljX3B1dGNzKHN0cnVjdCBkcm1fcGFuaWNfZmIgKnBmYiwKPiA+ICsJCQkgICAg Y29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbnVtKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQg aW50IHNsZW47Cj4gPiArCWludCBsZW4gPSBudW07Cj4gPiArCWNoYXIgKmxmOwo+ID4gKwo+ID4g Kwlkcm1fcGFuaWNfbG9nKCIlcyhudW09JXUpXG4iLCBfX2Z1bmNfXywgbnVtKTsKPiA+ICsKPiA+ ICsJd2hpbGUgKGxlbiA+IDApIHsKPiA+ICsKPiA+ICsJCWlmIChwZmItPnlwb3MgPT0gcGZiLT5y b3dzKSB7Cj4gPiArCQkJcGZiLT55cG9zLS07Cj4gPiArCQkJZHJtX3BhbmljX3Njcm9sbF91cChw ZmIpOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJbGYgPSBzdHJwYnJrKHN0ciwgIlxuIik7Cj4gPiAr CQlpZiAobGYpCj4gPiArCQkJc2xlbiA9IGxmIC0gc3RyOwo+ID4gKwkJZWxzZQo+ID4gKwkJCXNs ZW4gPSBsZW47Cj4gPiArCj4gPiArCQlpZiAocGZiLT54cG9zICsgc2xlbiA+IHBmYi0+Y29scykK PiA+ICsJCQlzbGVuID0gcGZiLT5jb2xzIC0gcGZiLT54cG9zOwo+ID4gKwo+ID4gKwkJZHJtX3Bh bmljX3B1dGNzX25vX2xmKHBmYiwgc3RyLCBzbGVuKTsKPiA+ICsKPiA+ICsJCWxlbiAtPSBzbGVu Owo+ID4gKwkJc3RyICs9IHNsZW47Cj4gPiArCQlwZmItPnhwb3MgKz0gc2xlbjsKPiA+ICsKPiA+ ICsJCWlmIChsZikgewo+ID4gKwkJCXN0cisrOwo+ID4gKwkJCWxlbi0tOwo+ID4gKwkJCXBmYi0+ eHBvcyA9IDA7Cj4gPiArCQkJcGZiLT55cG9zKys7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX3dyaXRlKGNvbnN0IGNoYXIgKnN0ciwgdW5z aWduZWQgaW50IG51bSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gKwlp ZiAoIW51bSkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJZHJtX3BhbmljX2xvZygiJXMobnVt PSV1KVxuIiwgX19mdW5jX18sIG51bSk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBEUk1f UEFOSUNfTUFYX0ZCUzsgaSsrKSB7Cj4gPiArCQlpZiAoIWRybV9wYW5pY19mYnNbaV0uZmIpCj4g PiArCQkJYnJlYWs7Cj4gPiArCQlkcm1fcGFuaWNfcHV0Y3MoJmRybV9wYW5pY19mYnNbaV0sIHN0 ciwgbnVtKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICsvKiB0aGlzIG9uZSBpcyBzZXJpYWxp emVkIGJ5IGNvbnNvbGVfbG9jaygpICovCj4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX2NvbnNv bGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwKPiA+ICsJCQkJICAgIGNvbnN0IGNoYXIgKnN0 ciwgdW5zaWduZWQgaW50IG51bSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gKwo+ ID4gKwlkcm1fcGFuaWNfbG9nX21zZygiLT4iLCBzdHIsIG51bSk7Cj4gPiArCj4gPiArCS8qIEJ1 ZmZlciB1cCBtZXNzYWdlcyB0byBiZSByZXBsYXllZCBvbiBwYW5pYyAqLwo+ID4gKwlpZiAoIWRy bV9wYW5pY19hY3RpdmUpIHsKPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewo+ID4g KwkJCWRybV9wYW5pY19rbXNnc1tkcm1fcGFuaWNfa21zZ3NfcG9zKytdID0gKnN0cisrOwo+ID4g KwkJCWlmIChkcm1fcGFuaWNfa21zZ3NfcG9zID09IERSTV9QQU5JQ19NQVhfS01TR1MpCj4gPiAr CQkJCWRybV9wYW5pY19rbXNnc19wb3MgPSAwOwo+ID4gKwkJfQo+ID4gKwkJcmV0dXJuOwo+ID4g Kwl9Cj4gPiArCj4gPiArCWRybV9wYW5pY193cml0ZShzdHIsIG51bSk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBkcm1fcGFuaWNfY29uc29sZSA9IHsKPiA+ICsJLm5h bWUgPSAgICAgICAgICJkcm1wYW5pYyIsCj4gPiArCS53cml0ZSA9ICAgICAgICBkcm1fcGFuaWNf Y29uc29sZV93cml0ZSwKPiA+ICsJLmZsYWdzID0gICAgICAgIENPTl9QUklOVEJVRkZFUiB8IENP Tl9FTkFCTEVELAo+ID4gKwkuaW5kZXggPSAgICAgICAgMCwKPiA+ICt9Owo+ID4gKwo+ID4gKy8q Cj4gPiArICogVGhlIHBhbmljKCkgZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IG9ubHkgb25lIENQ VSBpcyBhbGxvd2VkIHRvIHJ1biBpdCdzCj4gPiArICogY29kZS4gU28gd2hlbiB0aGlzIGhhbmRs ZXIgaXMgY2FsbGVkLCB3ZSdyZSBhbG9uZS4gTm8gcmFjaW5nIHdpdGgKPiA+ICsgKiBjb25zb2xl LndyaXRlKCkgaXMgcG9zc2libGUuCj4gPiArICovCj4gPiArc3RhdGljIGludCBkcm1fcGFuaWNf aGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXYsCj4g PiArCQkJICAgICB2b2lkICpwdHIpCj4gPiArewo+ID4gKwljb25zdCBzdHJ1Y3QgZm9udF9kZXNj ICpmb250Owo+ID4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+ICsJc3RydWN0IGRy bV9wYW5pY19mYiAqcGZiOwo+ID4gKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKPiA+ICsJdW5z aWduZWQgaW50IGZicyA9IDA7Cj4gPiArCXZvaWQgKnZtZW07Cj4gPiArCWludCBpOwo+ID4gKwo+ ID4gKwlkcm1fcGFuaWNfbG9nKCIlc1xuIiwgX19mdW5jX18pOwo+ID4gKwo+ID4gKwlkcm1fcGFu aWNfYWN0aXZlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJZHJtX21pbm9yX2Zvcl9lYWNoKG1pbm9yLCBE Uk1fTUlOT1JfTEVHQUNZLCBpKSB7Cj4gPiArCQlkcm1fcGFuaWNfbG9nKCJGb3VuZCBtaW5vcj0l ZFxuIiwgbWlub3ItPmluZGV4KTsKPiA+ICsJCWlmICghbWlub3ItPmRldiB8fCAhbWlub3ItPmRl di0+ZHJpdmVyIHx8Cj4gPiArCQkgICAgIW1pbm9yLT5kZXYtPmRyaXZlci0+cGFuaWMpIHsKPiA+ ICsJCQlkcm1fcGFuaWNfbG9nKCJTa2lwcGluZzogTm8gcGFuaWMgaGFuZGxlclxuIik7Cj4gPiAr CQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlmYiA9IG1pbm9yLT5kZXYtPmRyaXZl ci0+cGFuaWMobWlub3ItPmRldiwgJnZtZW0pOwo+ID4gKwkJaWYgKCFmYikgewo+ID4gKwkJCWRy bV9wYW5pY19sb2coIlNraXBwaW5nOiBEcml2ZXIgcmV0dXJuZWQgTlVMTFxuIik7Cj4gPiArCQkJ Y29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoIWZiIHx8ICF2bWVtIHx8IGZiLT5k ZXYgIT0gbWlub3ItPmRldiB8fCAhZmItPnBpdGNoZXNbMF0pIHsKPiA+ICsJCQlkcm1fcGFuaWNf bG9nKCJTa2lwcGluZzogRmFpbGVkIGNoZWNrXG4iKTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJ CX0KPiA+ICsKPiA+ICsJCS8qIG9ubHkgOC1iaXQgd2lkZSBmb250cyBhcmUgc3VwcG9ydGVkICov Cj4gPiArCQlmb250ID0gZ2V0X2RlZmF1bHRfZm9udChmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIEJJ VCg3KSwgLTEpOwo+ID4gKwkJaWYgKCFmb250KSB7Cj4gPiArCQkJZHJtX3BhbmljX2xvZygiU2tp cHBpbmc6IE5vIGZvbnQgYXZhaWxhYmxlXG4iKTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0K PiA+ICsKPiA+ICsJCXBmYiA9ICZkcm1fcGFuaWNfZmJzW2ZicysrXTsKPiA+ICsKPiA+ICsJCXBm Yi0+ZmIgPSBmYjsKPiA+ICsJCXBmYi0+dm1lbSA9IHZtZW07Cj4gPiArCQlwZmItPmZvbnQgPSBm b250Owo+ID4gKwkJcGZiLT5jb2xzID0gZmItPndpZHRoIC8gZm9udC0+d2lkdGg7Cj4gPiArCQlw ZmItPnJvd3MgPSBmYi0+aGVpZ2h0IC8gZm9udC0+aGVpZ2h0Owo+ID4gKwo+ID4gKwkJZHJtX3Bh bmljX2NsZWFyX3NjcmVlbihwZmIpOwo+ID4gKwo+ID4gKwkJZHJtX3BhbmljX2xvZygiICAgICV1 eCV1IC0+ICV1eCV1LCAlcywgJXNcbiIsIGZiLT53aWR0aCwKPiA+ICsJCQkJZmItPmhlaWdodCwg cGZiLT5jb2xzLCBwZmItPnJvd3MsIGZvbnQtPm5hbWUsCj4gPiArCQkJCWRybV9nZXRfZm9ybWF0 X25hbWUoZmItPnBpeGVsX2Zvcm1hdCkpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChkcm1fcGFu aWNfa21zZ3NbMF0pIHsKPiA+ICsJCS8qIHNhZmVndWFyZCBpbiBjYXNlIHdlIGludGVycnVwdGVk IGRybV9wYW5pY19jb25zb2xlX3dyaXRlICovCj4gPiArCQlpZiAoZHJtX3BhbmljX2ttc2dzX3Bv cyA+PSBEUk1fUEFOSUNfTUFYX0tNU0dTKQo+ID4gKwkJCWRybV9wYW5pY19rbXNnc19wb3MgPSAw Owo+ID4gKwo+ID4gKwkJZHJtX3BhbmljX3dyaXRlKCZkcm1fcGFuaWNfa21zZ3NbZHJtX3Bhbmlj X2ttc2dzX3Bvc10sCj4gPiArCQkJCURSTV9QQU5JQ19NQVhfS01TR1MgLSBkcm1fcGFuaWNfa21z Z3NfcG9zKTsKPiA+ICsJCWRybV9wYW5pY193cml0ZShkcm1fcGFuaWNfa21zZ3MsIGRybV9wYW5p Y19rbXNnc19wb3MpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBOT1RJRllfRE9ORTsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcm1fcGFuaWNfYmxv Y2sgPSB7Cj4gPiArCS5ub3RpZmllcl9jYWxsID0gZHJtX3BhbmljX2hhbmRsZXIsCj4gPiArfTsK PiA+ICsKPiA+ICsKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gPiArCj4gPiAr LyogT3V0IG9mIGJhbmQgbG9nZ2luZyBpcyB1c2VmdWwgYXQgbGVhc3QgaW4gdGhlIGluaXRpYWwg ZGV2ZWxvcG1lbnQgcGhhc2UgKi8KPiA+ICsjZGVmaW5lIERSTV9QQU5JQ19MT0dfU0laRQlTWl82 NEsKPiA+ICsjZGVmaW5lIERSTV9QQU5JQ19MT0dfTElORQkxMjgKPiA+ICsjZGVmaW5lIERSTV9Q QU5JQ19MT0dfRU5UUklFUwkoRFJNX1BBTklDX0xPR19TSVpFIC8gRFJNX1BBTklDX0xPR19MSU5F KQo+ID4gKwo+ID4gK3N0YXRpYyBjaGFyICpsb2dfYnVmOwo+ID4gK3N0YXRpYyBzaXplX3QgbG9n X3BvczsKPiA+ICtzdGF0aWMgc3RydWN0IGRlbnRyeSAqZHJtX3BhbmljX2xvZ2ZzX3Jvb3Q7Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZyhjb25zdCBjaGFyICpmbXQsIC4uLikK PiA+ICt7Cj4gPiArCXZhX2xpc3QgYXJnczsKPiA+ICsJdTMyIHJlbV9uc2VjOwo+ID4gKwljaGFy ICp0ZXh0Owo+ID4gKwlzaXplX3QgbGVuOwo+ID4gKwl1NjQgc2VjOwo+ID4gKwo+ID4gKwlpZiAo IWxvZ19idWYgfHwgb29wc19pbl9wcm9ncmVzcykKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ICsJ dmFfc3RhcnQoYXJncywgZm10KTsKPiA+ICsKPiA+ICsJaWYgKGxvZ19wb3MgPj0gRFJNX1BBTklD X0xPR19FTlRSSUVTKQo+ID4gKwkJbG9nX3BvcyA9IDA7Cj4gPiArCj4gPiArCXRleHQgPSBsb2df YnVmICsgKGxvZ19wb3MrKyAqIERSTV9QQU5JQ19MT0dfTElORSk7Cj4gPiArCWlmIChsb2dfcG9z ID09IERSTV9QQU5JQ19MT0dfRU5UUklFUykKPiA+ICsJCWxvZ19wb3MgPSAwOwo+ID4gKwo+ID4g KwlzZWMgPSBkaXZfdTY0X3JlbShsb2NhbF9jbG9jaygpLCAxMDAwMDAwMDAwLCAmcmVtX25zZWMp Owo+ID4gKwo+ID4gKwlsZW4gPSBzY25wcmludGYodGV4dCwgRFJNX1BBTklDX0xPR19MSU5FLCAi WyU1bGx1LiUwNnVdICIsIHNlYywKPiA+ICsJCQlyZW1fbnNlYyAvIDEwMDApOwo+ID4gKwo+ID4g Kwl2c2NucHJpbnRmKHRleHQgKyBsZW4sIERSTV9QQU5JQ19MT0dfTElORSAtIGxlbiwgZm10LCBh cmdzKTsKPiA+ICsKPiA+ICsJLyogTWFrZSBzdXJlIHRvIGFsd2F5cyBoYXZlIGEgbmV3bGluZSBp biBjYXNlIG9mIG92ZXJmbG93ICovCj4gPiArCWlmICh0ZXh0W0RSTV9QQU5JQ19MT0dfTElORSAt IDJdICE9ICdcMCcpCj4gPiArCQl0ZXh0W0RSTV9QQU5JQ19MT0dfTElORSAtIDJdID0gJ1xuJzsK PiA+ICsKPiA+ICsJdmFfZW5kKGFyZ3MpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRy bV9wYW5pY19sb2dfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCj4gPiArewo+ID4g KwlzaXplX3QgcG9zID0gbG9nX3BvczsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCWNoYXIg KnRleHQ7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBEUk1fUEFOSUNfTE9HX0VOVFJJRVM7 IGkrKykgewo+ID4gKwkJdGV4dCA9IGxvZ19idWYgKyAocG9zKysgKiBEUk1fUEFOSUNfTE9HX0xJ TkUpOwo+ID4gKwkJaWYgKHBvcyA9PSBEUk1fUEFOSUNfTE9HX0VOVFJJRVMpCj4gPiArCQkJcG9z ID0gMDsKPiA+ICsJCWlmICgqdGV4dCA9PSAnXDAnKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJ c2VxX3B1dHMobSwgdGV4dCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgZHJtX3BhbmljX2xvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHNpbmdsZV9vcGVuKGZp bGUsIGRybV9wYW5pY19sb2dfc2hvdywgTlVMTCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV9wYW5pY19sb2dfb3BzID0gewo+ID4gKwku b3duZXIgICA9IFRISVNfTU9EVUxFLAo+ID4gKwkub3BlbiAgICA9IGRybV9wYW5pY19sb2dfb3Bl biwKPiA+ICsJLnJlYWQgICAgPSBzZXFfcmVhZCwKPiA+ICsJLmxsc2VlayAgPSBzZXFfbHNlZWss Cj4gPiArCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ ID4gKyAqIEZha2Uvc2ltdWxhdGUgcGFuaWMoKSBhdCBkaWZmZXJlbnQgbGV2ZWxzOgo+ID4gKyAq IDE6IG9ubHkgdHJpZ2dlciBwYW5pYyBoYW5kbGluZyBpbnRlcm5hbGx5Cj4gPiArICogMjogYWRk IGxvY2FsX2lycV9kaXNhYmxlKCkKPiA+ICsgKiAzOiBhZGQgYnVzdF9zcGlubG9ja3MoKTsKPiA+ ICsgKiAxMDA6IGRvbid0IGZha2UgaXQsIGRvIGNhbGwgcGFuaWMoKQo+ID4gKyAqLwo+ID4gK3N0 YXRpYyBpbnQgZHJtX3RleHRfZmFrZV9wYW5pYyh1bnNpZ25lZCBpbnQgbGV2ZWwpCj4gPiArewo+ ID4gKyNpZm5kZWYgTU9EVUxFCj4gPiArCWludCBvbGRfbG9nbGV2ZWwgPSBjb25zb2xlX2xvZ2xl dmVsOwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKwlpZiAoIWxldmVsICYmIGxldmVsICE9IDEwMCAm JiBsZXZlbCA+IDMpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJaWYgKGxldmVs ID09IDEwMCkKPiA+ICsJCXBhbmljKCJURVNUSU5HIik7Cj4gPiArCj4gPiArCWlmIChsZXZlbCA+ IDEpCj4gPiArCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwo+ID4gKwo+ID4gKyNpZm5kZWYgTU9EVUxF Cj4gPiArCWNvbnNvbGVfdmVyYm9zZSgpOwo+ID4gKyNlbmRpZgo+ID4gKwlpZiAobGV2ZWwgPiAy KQo+ID4gKwkJYnVzdF9zcGlubG9ja3MoMSk7Cj4gPiArCj4gPiArCXByX2VtZXJnKCJLZXJuZWwg cGFuaWMgLSBub3Qgc3luY2luZzogRkFLSU5HPSV1LCBvb3BzX2luX3Byb2dyZXNzPSVkXG4iLAo+ ID4gKwkJIGxldmVsLCBvb3BzX2luX3Byb2dyZXNzKTsKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklH X0RFQlVHX0JVR1ZFUkJPU0UKPiA+ICsJZHVtcF9zdGFjaygpOwo+ID4gKyNlbmRpZgo+ID4gKwkv KiBzaW11bGF0ZSBjYWxsaW5nIHBhbmljX25vdGlmaWVyX2xpc3QgKi8KPiA+ICsJZHJtX3Bhbmlj X2hhbmRsZXIoTlVMTCwgMCwgTlVMTCk7Cj4gPiArCj4gPiArCWlmIChsZXZlbCA+IDIpCj4gPiAr CQlidXN0X3NwaW5sb2NrcygwKTsKPiA+ICsKPiA+ICsjaWZuZGVmIE1PRFVMRQo+ID4gKwljb25z b2xlX2ZsdXNoX29uX3BhbmljKCk7Cj4gPiArI2VuZGlmCj4gPiArCXByX2VtZXJnKCItLS1bIGVu ZCBLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogRkFLSU5HXG4iKTsKPiA+ICsKPiA+ICsJaWYg KGxldmVsID4gMSkKPiA+ICsJCWxvY2FsX2lycV9lbmFibGUoKTsKPiA+ICsKPiA+ICsjaWZuZGVm IE1PRFVMRQo+ID4gKwljb25zb2xlX2xvZ2xldmVsID0gb2xkX2xvZ2xldmVsOwo+ID4gKyNlbmRp Zgo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3Qg ZHJtX3RleHRfcGFuaWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gPiArCQkJCSAgICBjb25z dCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCj4gPiArCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZf dCAqcHBvcykKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Cj4gPiArCXNzaXpl X3QgcmV0ID0gMDsKPiA+ICsJY2hhciBidWZbMjRdOwo+ID4gKwlzaXplX3Qgc2l6ZTsKPiA+ICsK PiA+ICsJc2l6ZSA9IG1pbihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKPiA+ICsJaWYgKGNvcHlf ZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIHNpemUpKQo+ID4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4g PiArCj4gPiArCWJ1ZltzaXplXSA9ICdcMCc7Cj4gPiArCXJldCA9IGtzdHJ0b3VsbChidWYsIDAs ICZ2YWwpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmV0 ID0gZHJtX3RleHRfZmFrZV9wYW5pYyh2YWwpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0IDwgMCA/ IHJldCA6IGNvdW50Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBkcm1fdGV4dF9wYW5pY19vcHMgPSB7Cj4gPiArCS53cml0ZSA9ICAgICAgICBk cm1fdGV4dF9wYW5pY193cml0ZSwKPiA+ICsJLm9wZW4gPSAgICAgICAgIHNpbXBsZV9vcGVuLAo+ ID4gKwkubGxzZWVrID0gICAgICAgZGVmYXVsdF9sbHNlZWssCj4gPiArfTsKPiA+ICsKPiA+ICtz dGF0aWMgaW50IGRybV9wYW5pY19sb2dmc19pbml0KHZvaWQpCj4gPiArewo+ID4gKwlkcm1fcGFu aWNfbG9nZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHJtLXBhbmljIiwgTlVMTCk7Cj4g PiArCWlmICghZHJtX3BhbmljX2xvZ2ZzX3Jvb3QpCj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ ICsKPiA+ICsJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsb2ciLCBTX0lSVUdPLCBkcm1fcGFu aWNfbG9nZnNfcm9vdCwgTlVMTCwKPiA+ICsJCQkgICAgJmRybV9wYW5pY19sb2dfb3BzKSkKPiA+ ICsJCWdvdG8gZXJyX3JlbW92ZTsKPiA+ICsKPiA+ICsJbG9nX2J1ZiA9IGt6YWxsb2MoRFJNX1BB TklDX0xPR19TSVpFLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFsb2dfYnVmKQo+ID4gKwkJZ290 byBlcnJfcmVtb3ZlOwo+ID4gKwo+ID4gKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwYW5pYyIsIFNf SVdVU1IsIGRybV9wYW5pY19sb2dmc19yb290LCBOVUxMLAo+ID4gKwkJCSAgICAmZHJtX3RleHRf cGFuaWNfb3BzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX3JlbW92ZToK PiA+ICsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRybV9wYW5pY19sb2dmc19yb290KTsKPiA+ ICsKPiA+ICsJcmV0dXJuIC1FTk9NRU07Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRy bV9wYW5pY19sb2dmc19leGl0KHZvaWQpCj4gPiArewo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1 cnNpdmUoZHJtX3BhbmljX2xvZ2ZzX3Jvb3QpOwo+ID4gKwlrZnJlZShsb2dfYnVmKTsKPiA+ICsJ bG9nX2J1ZiA9IE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gKyNlbHNlCj4gPiArCj4gPiArc3RhdGlj IGludCBkcm1fcGFuaWNfbG9nZnNfaW5pdCh2b2lkKQo+ID4gK3sKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZ2ZzX2V4aXQodm9pZCkKPiA+ICt7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIGRybV9wYW5pY19sb2coY29uc3QgY2hhciAqZm10LCAuLi4pCj4g PiArewo+ID4gK30KPiA+ICsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsKPiA+ICt2b2lkIF9faW5p dCBkcm1fcGFuaWNfaW5pdCh2b2lkKQo+ID4gK3sKPiA+ICsJZHJtX3BhbmljX2ttc2dzID0ga3ph bGxvYyhEUk1fUEFOSUNfTUFYX0tNU0dTLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFkcm1fcGFu aWNfa21zZ3MpIHsKPiA+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIHNldHVwIHBhbmljIGhhbmRs ZXJcbiIpOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9wYW5pY19sb2dm c19pbml0KCk7Cj4gPiArZHJtX3BhbmljX2xvZygiJXNcbiIsIF9fZnVuY19fKTsKPiA+ICsJcmVn aXN0ZXJfY29uc29sZSgmZHJtX3BhbmljX2NvbnNvbGUpOwo+ID4gKwlhdG9taWNfbm90aWZpZXJf Y2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCj4gPiArCQkJCSAgICAgICAmZHJt X3BhbmljX2Jsb2NrKTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBfX2V4aXQgZHJtX3BhbmljX2V4 aXQodm9pZCkKPiA+ICt7Cj4gPiArCWlmICghZHJtX3BhbmljX2ttc2dzKQo+ID4gKwkJcmV0dXJu Owo+ID4gKwo+ID4gKwlkcm1fcGFuaWNfbG9nZnNfZXhpdCgpOwo+ID4gKwlhdG9taWNfbm90aWZp ZXJfY2hhaW5fdW5yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKPiA+ICsJCQkJCSAmZHJt X3BhbmljX2Jsb2NrKTsKPiA+ICsJdW5yZWdpc3Rlcl9jb25zb2xlKCZkcm1fcGFuaWNfY29uc29s ZSk7Cj4gPiArCWtmcmVlKGRybV9wYW5pY19rbXNncyk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAo+ID4gaW5kZXggYmM3MDA2 ZS4uNGU4NDY1NCAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAo+ID4gKysrIGIv aW5jbHVkZS9kcm0vZHJtUC5oCj4gPiBAQCAtNTUwLDYgKzU1MCwyOCBAQCBzdHJ1Y3QgZHJtX2Ry aXZlciB7Cj4gPiAgCQkJICBib29sIGZyb21fb3Blbik7Cj4gPiAgCXZvaWQgKCptYXN0ZXJfZHJv cCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ ID4gIAo+ID4gKwkvKioKPiA+ICsJICogQHBhbmljOgo+ID4gKwkgKgo+ID4gKwkgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBvbiBwYW5pYygpIGFza2luZyBmb3IgYSBmcmFtZWJ1ZmZlciB0bwo+ ID4gKwkgKiBkaXNwbGF5IHRoZSBwYW5pYyBtZXNzYWdlcyBvbi4gSXQgYWxzbyBuZWVkcyB0aGUg dmlydHVhbCBhZGRyZXNzCj4gPiArCSAqIG9mIHRoZSBiYWNraW5nIGJ1ZmZlci4KPiA+ICsJICog VGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4KPiA+ICsJICoKPiA+ICsJICogTk9URToKPiA+ICsJ ICoKPiA+ICsJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYW4gYXRvbWljIG5vdGlmaWVy IGNoYWluIGFuZCBpdCBjYW5ub3QKPiA+ICsJICogc2xlZXAuIENhcmUgbXVzdCBiZSB0YWtlbiBz byB0aGUgbWFjaGluZSBpcyBub3Qga2lsbGVkIGV2ZW4gaGFyZGVyLAo+ID4gKwkgKiBwcmV2ZW50 aW5nIG91dHB1dCBmcm9tIGdvaW5nIG91dCBvbiBzZXJpYWwvbmV0Y29uc29sZS4KPiA+ICsJICoK PiA+ICsJICogUkVUVVJOUzoKPiA+ICsJICoKPiA+ICsJICogRnJhbWVidWZmZXIgdGhhdCBzaG91 bGQgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBwYW5pYyBtZXNzYWdlcywKPiA+ICsJICogYWxvbmdz aWRlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhY2tpbmcgYnVmZmVyLCBvciBOVUxMIGlm Cj4gPiArCSAqIHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIHByb3ZpZGUgdGhpcy4KPiA+ICsJICov Cj4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKigqcGFuaWMpKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKip2bWVtKTsKPiA+ICsKPiA+ICAJaW50ICgqZGVidWdmc19pbml0KShzdHJ1 Y3QgZHJtX21pbm9yICptaW5vcik7Cj4gPiAgCXZvaWQgKCpkZWJ1Z2ZzX2NsZWFudXApKHN0cnVj dCBkcm1fbWlub3IgKm1pbm9yKTsKPiA+ICAKPiA+IC0tIAo+ID4gMi44LjIKPiA+IAo+ID4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IGRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4g Cj4gLS0gCj4gRGFuaWVsIFZldHRlcgo+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgo+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==