From mboxrd@z Thu Jan 1 00:00:00 1970 From: sourab gupta Subject: Re: [RFC 1/3] fs: Introduce drmfs pseudo filesystem interfaces Date: Sat, 03 Dec 2016 06:23:20 +0530 Message-ID: <1480726400.12046.30.camel@sourab-desktop> References: <1480580057-27548-1-git-send-email-swati.dhingra@intel.com> <1480580057-27548-2-git-send-email-swati.dhingra@intel.com> <20161202224054.GH2617@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2B8989EBB for ; Sat, 3 Dec 2016 00:51:04 +0000 (UTC) In-Reply-To: <20161202224054.GH2617@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Roper, Matthew D" Cc: "intel-gfx@lists.freedesktop.org" , "Dhingra, Swati" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCAyMDE2LTEyLTAyIGF0IDE0OjQwIC0wODAwLCBSb3BlciwgTWF0dGhldyBEIHdyb3Rl Ogo+IE9uIFRodSwgRGVjIDAxLCAyMDE2IGF0IDAxOjQ0OjE1UE0gKzA1MzAsIHN3YXRpLmRoaW5n cmFAaW50ZWwuY29tIHdyb3RlOgo+ID4gRnJvbTogU3dhdGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdy YUBpbnRlbC5jb20+Cj4gPiAKPiA+IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBzZXVkbyBm aWxlc3lzdGVtIHR5cGUsIG5hbWVkICdkcm1mcycgd2hpY2ggaXMKPiA+IGludGVuZGVkIHRvIGhv dXNlIHRoZSBmaWxlcyBmb3IgdGhlIGRhdGEgZ2VuZXJhdGVkIGJ5IGRybSBzdWJzeXN0ZW0gdGhh dAo+ID4gY2Fubm90IGJlIGFjY29tbW9kYXRlZCBieSBhbnkgb2YgdGhlIGV4aXN0aW5nIGZpbGVz eXN0ZW1zLgo+ID4gVGhlIGZpbGVzeXN0ZW0gaXMgbW9kZWxsZWQgb24gdGhlIGxpbmVzIG9mIGV4 aXN0aW5nIHBzZXVkby1maWxlc3lzdGVtcyBzdWNoCj4gPiBhcyBkZWJ1Z2ZzL3RyYWNlZnMsIGFu ZCBib3Jyb3dzIGlkZWFzIGZyb20gdGhlaXIgaW1wbGVtZW50YXRpb24uCj4gPiBUaGlzIGZpbGVz eXN0ZW0gd2lsbCBiZSBhcHBlYXJpbmcgYXQgc3lzL2tlcm5lbC9kcm0uCj4gPiAKPiA+IEEgbmV3 IGNvbmZpZyAnQ09ORklHX0RSTUZTJyBpcyBpbnRyb2R1Y2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRo ZSBmaWxlc3lzdGVtLAo+ID4gd2hpY2ggaXMgZGVwZW5kZW50IG9uIENPTkZJR19EUk0uCj4gPiBU aGUgZmlsZXN5c3RlbSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIHN0YW5kYWxvbmUgZHVyaW5nIGtl cm5lbCBpbml0IHRpbWUsCj4gPiBpbnN0ZWFkIGl0IGlzIGludGVuZGVkIHRvIGJlIGluaXRpYWxp emVkL3JlZ2lzdGVyZWQgZHVyaW5nIGRybSBpbml0aWFsaXphdGlvbi4KPiA+IAo+ID4gVGhlIGlu dGVudCBmb3IgaW50cm9kdWN0aW9uIG9mIHRoZSBmaWxlc3lzdGVtIGlzIHRvIGFjdCBhcyBhIGxv Y2F0aW9uIHRvIGhvbGQKPiA+IHZhcmlvdXMga2luZHMgb2YgZGF0YSBvdXRwdXQgZnJvbSBMaW51 eCBEUk0gc3Vic3lzdGVtcywgd2hpY2ggY2FuJ3QgcmVhbGx5IGZpdAo+ID4gYW55d2hlcmUgZWxz ZSBpbnRvIHRoZSBleGlzdGluZyBmaWxlc3lzdGVtcyBzdWNoIGFzIGRlYnVnZnMvc3lzZnMgZXRj LiBBbGwgdGhlc2UKPiA+IGZpbGVzeXN0ZW1zIGhhdmUgdGhlaXIgb3duIGNvbnN0cmFpbnRzIGFu ZCBhcmUgaW50ZW5kZWQgdG8gb3V0cHV0IGEgcGFydGljdWxhcgo+ID4gdHlwZSBvZiBkYXRhIHN1 Y2ggYXMgYXR0cmlidXRlcyBhbmQgc21hbGwgZGVidWcgcGFyYW1ldGVyIGRhdGEuIER1ZSB0byB0 aGVzZQo+ID4gY29uc3RyYWludHMsIHRoZXJlIGlzIGEgbmVlZCBmb3IgYSBuZXcgcHNldWRvIGZp bGVzeXRlbSwgY3VzdG9taXphYmxlIHRvIERSTQo+ID4gc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGFu ZCBjYXRlcmluZyB0byB0aGUgbmVlZHMgdG8gRFJNIHN1YnN5c3RlbSBjb21wb25lbnRzCj4gCj4g QW0gSSBjb3JyZWN0IGluIGFzc3VtaW5nIHRoZSBkYXRhIG1hZGUgYXZhaWxhYmxlIHZpYSBkcm1m cyBpcyBub3QKPiBjb25zaWRlcmVkIEFCST8gIElmIHdlJ3JlIG5vdCBnb2luZyB0byBndWFyYW50 ZWUgYSBzdGFibGUgQUJJIGFuZAo+IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yZXZlciBmb3Ig dGhlIGl0ZW1zIGV4cG9zZWQgaGVyZSwgdGhlbiBpdCdzCj4gaW1wb3J0YW50IHRvIHN0YXRlIHRo YXQgdmVyeSBleHBsaWNpdGx5IHVwIGZyb250IHNvIHRoYXQgbm8gdXNlcnNwYWNlCj4gc29mdHdh cmUgZ2V0cyB3cml0dGVuIHdpdGggdGhlIHdyb25nIGFzc3VtcHRpb24uICBJJ2Qgc3VnZ2VzdCBt YWtpbmcgYW4KPiBleHBsaWNpdCBub3RlIG9uZSB3YXkgb3IgdGhlIG90aGVyIGluIHRoZSBjb21t aXQgbWVzc2FnZSBoZXJlIGFuZAo+IHByb2JhYmx5IGluIHRoZSBLY29uZmlnIGhlbHAgdGV4dCBh cyB3ZWxsLgo+IAo+IAo+IE1hdHQKPiAKCldlJ3ZlIGludGVuZGVkIGZvciBkcm1mcyB0byBiZSBB QkkgYXMgQ2hyaXMgbWVudGlvbmVkIGhlcmU6Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L2FyY2hpdmVzL2ludGVsLWdmeC8yMDE2LURlY2VtYmVyLzExMzI0NS5odG1sClRoZSBpbnRlbnQg aXMgZm9yIGRybWZzIHRvIGJlIGEgc3RhYmxlIEFCSSBmb3IgdGhlIGZpbGVzIGl0J3MgaG9sZGlu Zy4KVGhpcyBjYW4gYmUgZW5zdXJlZCBtb3Jlc29ldmVyIHNpbmNlIGl0J2xsIGJlIHVuZGVyIHNv bGUgY29udHJvbCBvZiBkcm0uCkNocmlzLCBjYW4geW91IGNvcnJlY3QgbWUgaWYgaSdtIHdyb25n LgoKLXNvdXJhYgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBTb3VyYWIgR3VwdGEgPHNvdXJhYi5n dXB0YUBpbnRlbC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBTd2F0aSBEaGluZ3JhIDxzd2F0aS5k aGluZ3JhQGludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMg IHwgICAxICsKPiA+ICBmcy9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgOSArCj4gPiAgZnMv TWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwo+ID4gIGZzL2RybWZzL01ha2VmaWxlICAg ICAgICAgIHwgICAzICsKPiA+ICBmcy9kcm1mcy9pbm9kZS5jICAgICAgICAgICB8IDU2MSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICBpbmNsdWRlL2xp bnV4L2RybWZzLmggICAgICB8ICA1NiArKysrKwo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC9tYWdp Yy5oIHwgICAzICsKPiA+ICA3IGZpbGVzIGNoYW5nZWQsIDYzNCBpbnNlcnRpb25zKCspCj4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGZzL2RybWZzL01ha2VmaWxlCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGZzL2RybWZzL2lub2RlLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51 eC9kcm1mcy5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gaW5kZXggNmRiYjk4Ni4uODRmY2ZjYiAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+IEBAIC0yNyw2ICsyNyw3IEBACj4gPiAgICovCj4gPiAg Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZHJt ZnMuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvZnMuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Cj4gPiBkaWZmIC0tZ2l0 IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKPiA+IGluZGV4IDRiZDAzYTIuLjdkMGFjMjAgMTAw NjQ0Cj4gPiAtLS0gYS9mcy9LY29uZmlnCj4gPiArKysgYi9mcy9LY29uZmlnCj4gPiBAQCAtMjAw LDYgKzIwMCwxNSBAQCBjb25maWcgSFVHRVRMQkZTCj4gPiAgY29uZmlnIEhVR0VUTEJfUEFHRQo+ ID4gIAlkZWZfYm9vbCBIVUdFVExCRlMKPiA+ICAKPiA+ICtjb25maWcgRFJNRlMKPiA+ICsJYm9v bCAiRHJtZnMgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKPiA+ICsJZGVwZW5kcyBvbiBEUk0KPiA+ICsJ aGVscAo+ID4gKwkgIERybWZzIGlzIGEgcHNldWRvIGZpbGUgc3lzdGVtIGZvciBkcm0gc3Vic3lz dGVtIG91dHB1dCBkYXRhLgo+ID4gKwo+ID4gKwkgIGRybWZzIGlzIGEgZmlsZXN5c3RlbSB0byBo b2xkIG1pc2NlbGxhbmVvdXMgb3V0cHV0IGRhdGEgZnJvbSBkcm0KPiA+ICsJICBzdWJzeXN0ZW1z Lgo+ID4gKwo+ID4gIGNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFCj4gPiAgCWJvb2wKPiA+ ICAKPiA+IGRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCj4gPiBpbmRleCBl ZDJiNjMyLi5iMzRhOTZlIDEwMDY0NAo+ID4gLS0tIGEvZnMvTWFrZWZpbGUKPiA+ICsrKyBiL2Zz L01ha2VmaWxlCj4gPiBAQCAtMTIwLDYgKzEyMCw3IEBAIG9iai0kKENPTkZJR19CRUZTX0ZTKQkJ Kz0gYmVmcy8KPiA+ICBvYmotJChDT05GSUdfSE9TVEZTKQkJKz0gaG9zdGZzLwo+ID4gIG9iai0k KENPTkZJR19DQUNIRUZJTEVTKQkrPSBjYWNoZWZpbGVzLwo+ID4gIG9iai0kKENPTkZJR19ERUJV R19GUykJCSs9IGRlYnVnZnMvCj4gPiArb2JqLSQoQ09ORklHX0RSTUZTKQkJKz0gZHJtZnMvCj4g PiAgb2JqLSQoQ09ORklHX1RSQUNJTkcpCQkrPSB0cmFjZWZzLwo+ID4gIG9iai0kKENPTkZJR19P Q0ZTMl9GUykJCSs9IG9jZnMyLwo+ID4gIG9iai0kKENPTkZJR19CVFJGU19GUykJCSs9IGJ0cmZz Lwo+ID4gZGlmZiAtLWdpdCBhL2ZzL2RybWZzL01ha2VmaWxlIGIvZnMvZHJtZnMvTWFrZWZpbGUK PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5hYzg3ZTQ5Nwo+ID4g LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZnMvZHJtZnMvTWFrZWZpbGUKPiA+IEBAIC0wLDAgKzEs MyBAQAo+ID4gK2RybWZzLW9ianMJOj0gaW5vZGUubwo+ID4gKwo+ID4gK29iai0kKENPTkZJR19E Uk1GUykJKz0gZHJtZnMubwo+ID4gZGlmZiAtLWdpdCBhL2ZzL2RybWZzL2lub2RlLmMgYi9mcy9k cm1mcy9pbm9kZS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4u OTIyMDcwNQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZnMvZHJtZnMvaW5vZGUuYwo+ID4g QEAgLTAsMCArMSw1NjEgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVs IENvcnBvcmF0aW9uCj4gPiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ID4gKyAqIFNv ZnR3YXJlLgo+ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+ID4gKyAqIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICoJU3dh dGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBpbnRlbC5jb20+Cj4gPiArICoJU291cmFiIEd1cHRh IDxzb3VyYWIuZ3VwdGFAaW50ZWwuY29tPgo+ID4gKyAqCUFrYXNoIEdvZWwgPGFrYXNoLmdvZWxA aW50ZWwuY29tPgo+ID4gKyAqLwo+ID4gKwo+ID4gKy8qCj4gPiArICogZHJtZnMgaXMgdGhlIGZp bGVzeXN0ZW0gdXNlZCBmb3Igb3V0cHV0IG9mIGRybSBzdWJzeXN0ZW0gZGF0YQo+ID4gKyAqLwo+ ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZnMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv a29iamVjdC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9kcm1mcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9zZXFfZmlsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ ID4gKwo+ID4gKyNkZWZpbmUgRFJNRlNfREVGQVVMVF9NT0RFCTA3MDAKPiA+ICsKPiA+ICtzdGF0 aWMgc3RydWN0IHZmc21vdW50ICpkcm1mc19tb3VudDsKPiA+ICtzdGF0aWMgaW50IGRybWZzX21v dW50X2NvdW50Owo+ID4gK3N0YXRpYyBib29sIGRybWZzX3JlZ2lzdGVyZWQ7Cj4gPiArCj4gPiAr c3RhdGljIHNzaXplX3QgZGVmYXVsdF9yZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIg X191c2VyICpidWYsCj4gPiArCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ID4gK3sK PiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGRlZmF1bHRf d3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKPiA+ ICsJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4gPiArewo+ID4gKwlyZXR1cm4gY291 bnQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGRybWZzX2RlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0gewo+ID4gKwkucmVhZCA9CQlkZWZhdWx0 X3JlYWRfZmlsZSwKPiA+ICsJLndyaXRlID0JZGVmYXVsdF93cml0ZV9maWxlLAo+ID4gKwkub3Bl biA9CQlzaW1wbGVfb3BlbiwKPiA+ICsJLmxsc2VlayA9CW5vb3BfbGxzZWVrLAo+ID4gK307Cj4g PiArCj4gPiArc3RhdGljIHN0cnVjdCBpbm9kZSAqZHJtZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2Rl KHNiKTsKPiA+ICsKPiA+ICsJaWYgKGlub2RlKSB7Cj4gPiArCQlpbm9kZS0+aV9pbm8gPSBnZXRf bmV4dF9pbm8oKTsKPiA+ICsJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9k ZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKPiA+ICsJfQo+ID4gKwlyZXR1cm4gaW5vZGU7Cj4g PiArfQo+ID4gKwo+ID4gK3N0cnVjdCBkcm1mc19tb3VudF9vcHRzIHsKPiA+ICsJa3VpZF90IHVp ZDsKPiA+ICsJa2dpZF90IGdpZDsKPiA+ICsJdW1vZGVfdCBtb2RlOwo+ID4gK307Cj4gPiArCj4g PiArZW51bSB7Cj4gPiArCU9wdF91aWQsCj4gPiArCU9wdF9naWQsCj4gPiArCU9wdF9tb2RlLAo+ ID4gKwlPcHRfZXJyCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVf dCB0b2tlbnMgPSB7Cj4gPiArCXtPcHRfdWlkLCAidWlkPSV1In0sCj4gPiArCXtPcHRfZ2lkLCAi Z2lkPSV1In0sCj4gPiArCXtPcHRfbW9kZSwgIm1vZGU9JW8ifSwKPiA+ICsJe09wdF9lcnIsIE5V TEx9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtZnNfZnNfaW5mbyB7Cj4gPiArCXN0cnVj dCBkcm1mc19tb3VudF9vcHRzIG1vdW50X29wdHM7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMg aW50IGRybWZzX3BhcnNlX29wdGlvbnMoY2hhciAqZGF0YSwgc3RydWN0IGRybWZzX21vdW50X29w dHMgKm9wdHMpCj4gPiArewo+ID4gKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107Cj4g PiArCWludCBvcHRpb247Cj4gPiArCWludCB0b2tlbjsKPiA+ICsJa3VpZF90IHVpZDsKPiA+ICsJ a2dpZF90IGdpZDsKPiA+ICsJY2hhciAqcDsKPiA+ICsKPiA+ICsJb3B0cy0+bW9kZSA9IERSTUZT X0RFRkFVTFRfTU9ERTsKPiA+ICsKPiA+ICsJd2hpbGUgKChwID0gc3Ryc2VwKCZkYXRhLCAiLCIp KSAhPSBOVUxMKSB7Cj4gPiArCQlpZiAoISpwKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4g KwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOwo+ID4gKwkJc3dpdGNoICh0 b2tlbikgewo+ID4gKwkJY2FzZSBPcHRfdWlkOgo+ID4gKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3Nb MF0sICZvcHRpb24pKQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCQl1aWQgPSBtYWtl X2t1aWQoY3VycmVudF91c2VyX25zKCksIG9wdGlvbik7Cj4gPiArCQkJaWYgKCF1aWRfdmFsaWQo dWlkKSkKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQkJb3B0cy0+dWlkID0gdWlkOwo+ ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSBPcHRfZ2lkOgo+ID4gKwkJCWlmIChtYXRjaF9pbnQo JmFyZ3NbMF0sICZvcHRpb24pKQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJCQlnaWQg PSBtYWtlX2tnaWQoY3VycmVudF91c2VyX25zKCksIG9wdGlvbik7Cj4gPiArCQkJaWYgKCFnaWRf dmFsaWQoZ2lkKSkKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQkJb3B0cy0+Z2lkID0g Z2lkOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJY2FzZSBPcHRfbW9kZToKPiA+ICsJCQlpZiAobWF0 Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ICsJCQlvcHRzLT5tb2RlID0gb3B0aW9uICYgU19JQUxMVUdPOwo+ID4gKwkJCWJyZWFrOwo+ID4g KwkJLyoKPiA+ICsJCSAqIFdlIG1pZ2h0IGxpa2UgdG8gcmVwb3J0IGJhZCBtb3VudCBvcHRpb25z IGhlcmUKPiA+ICsJCSAqLwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybWZzX2FwcGx5X29wdGlvbnMoc3RydWN0IHN1 cGVyX2Jsb2NrICpzYikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1mc19mc19pbmZvICpmc2kgPSBz Yi0+c19mc19pbmZvOwo+ID4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc2ItPnNfcm9vdC0+ZF9p bm9kZTsKPiA+ICsJc3RydWN0IGRybWZzX21vdW50X29wdHMgKm9wdHMgPSAmZnNpLT5tb3VudF9v cHRzOwo+ID4gKwo+ID4gKwlpbm9kZS0+aV9tb2RlICY9IH5TX0lBTExVR087Cj4gPiArCWlub2Rl LT5pX21vZGUgfD0gb3B0cy0+bW9kZTsKPiA+ICsKPiA+ICsJaW5vZGUtPmlfdWlkID0gb3B0cy0+ dWlkOwo+ID4gKwlpbm9kZS0+aV9naWQgPSBvcHRzLT5naWQ7Cj4gPiArCj4gPiArCXJldHVybiAw Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybWZzX3JlbW91bnQoc3RydWN0IHN1cGVy X2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKPiA+ICt7Cj4gPiArCWludCBlcnI7 Cj4gPiArCXN0cnVjdCBkcm1mc19mc19pbmZvICpmc2kgPSBzYi0+c19mc19pbmZvOwo+ID4gKwo+ ID4gKwlzeW5jX2ZpbGVzeXN0ZW0oc2IpOwo+ID4gKwllcnIgPSBkcm1mc19wYXJzZV9vcHRpb25z KGRhdGEsICZmc2ktPm1vdW50X29wdHMpOwo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJZ290byBmYWls Owo+ID4gKwo+ID4gKwlkcm1mc19hcHBseV9vcHRpb25zKHNiKTsKPiA+ICsKPiA+ICtmYWlsOgo+ ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybWZzX3Nob3df b3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHJtZnNfZnNfaW5mbyAqZnNpID0gcm9vdC0+ZF9zYi0+c19mc19pbmZvOwo+ ID4gKwlzdHJ1Y3QgZHJtZnNfbW91bnRfb3B0cyAqb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7Cj4g PiArCj4gPiArCWlmICghdWlkX2VxKG9wdHMtPnVpZCwgR0xPQkFMX1JPT1RfVUlEKSkKPiA+ICsJ CXNlcV9wcmludGYobSwgIix1aWQ9JXUiLAo+ID4gKwkJCSAgIGZyb21fa3VpZF9tdW5nZWQoJmlu aXRfdXNlcl9ucywgb3B0cy0+dWlkKSk7Cj4gPiArCWlmICghZ2lkX2VxKG9wdHMtPmdpZCwgR0xP QkFMX1JPT1RfR0lEKSkKPiA+ICsJCXNlcV9wcmludGYobSwgIixnaWQ9JXUiLAo+ID4gKwkJCSAg IGZyb21fa2dpZF9tdW5nZWQoJmluaXRfdXNlcl9ucywgb3B0cy0+Z2lkKSk7Cj4gPiArCWlmIChv cHRzLT5tb2RlICE9IERSTUZTX0RFRkFVTFRfTU9ERSkKPiA+ICsJCXNlcV9wcmludGYobSwgIixt b2RlPSVvIiwgb3B0cy0+bW9kZSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZHJtZnNfc3VwZXJfb3Bl cmF0aW9ucyA9IHsKPiA+ICsJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAo+ID4gKwkucmVtb3Vu dF9mcwk9IGRybWZzX3JlbW91bnQsCj4gPiArCS5zaG93X29wdGlvbnMJPSBkcm1mc19zaG93X29w dGlvbnMsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGRybV9maWxsX3N1cGVyKHN0cnVj dCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCj4gPiArewo+ID4gKwlz dGF0aWMgc3RydWN0IHRyZWVfZGVzY3IgZHJtX2ZpbGVzW10gPSB7IHsiIn0gfTsKPiA+ICsJc3Ry dWN0IGRybWZzX2ZzX2luZm8gKmZzaTsKPiA+ICsJaW50IGVycjsKPiA+ICsKPiA+ICsJc2F2ZV9t b3VudF9vcHRpb25zKHNiLCBkYXRhKTsKPiA+ICsKPiA+ICsJZnNpID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IGRybWZzX2ZzX2luZm8pLCBHRlBfS0VSTkVMKTsKPiA+ICsJc2ItPnNfZnNfaW5mbyA9 IGZzaTsKPiA+ICsJaWYgKCFmc2kpIHsKPiA+ICsJCWVyciA9IC1FTk9NRU07Cj4gPiArCQlnb3Rv IGZhaWw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZXJyID0gZHJtZnNfcGFyc2Vfb3B0aW9ucyhkYXRh LCAmZnNpLT5tb3VudF9vcHRzKTsKPiA+ICsJaWYgKGVycikKPiA+ICsJCWdvdG8gZmFpbDsKPiA+ ICsKPiA+ICsJZXJyICA9ICBzaW1wbGVfZmlsbF9zdXBlcihzYiwgRFJNRlNfTUFHSUMsIGRybV9m aWxlcyk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGZhaWw7Cj4gPiArCj4gPiArCXNiLT5z X29wID0gJmRybWZzX3N1cGVyX29wZXJhdGlvbnM7Cj4gPiArCj4gPiArCWRybWZzX2FwcGx5X29w dGlvbnMoc2IpOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtmYWlsOgo+ID4gKwlr ZnJlZShmc2kpOwo+ID4gKwlzYi0+c19mc19pbmZvID0gTlVMTDsKPiA+ICsJcmV0dXJuIGVycjsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkZW50cnkgKmRybV9tb3VudChzdHJ1Y3Qg ZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKPiA+ICsJCQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIg KmRldl9uYW1lLAo+ID4gKwkJCXZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlyZXR1cm4gbW91bnRf c2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBkcm1fZmlsbF9zdXBlcik7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkcm1fZnNfdHlwZSA9IHsKPiA+ ICsJLm93bmVyID0JVEhJU19NT0RVTEUsCj4gPiArCS5uYW1lID0JCSJkcm1mcyIsCj4gPiArCS5t b3VudCA9CWRybV9tb3VudCwKPiA+ICsJLmtpbGxfc2IgPQlraWxsX2xpdHRlcl9zdXBlciwKPiA+ ICt9Owo+ID4gK01PRFVMRV9BTElBU19GUygiZHJtZnMiKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3Ry dWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmcoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRy eSAqcGFyZW50KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRlbnRyeSAqZGVudHJ5Owo+ID4gKwlpbnQg ZXJyb3I7Cj4gPiArCj4gPiArCXByX2RlYnVnKCJkcm1mczogY3JlYXRpbmcgZmlsZSAnJXMnXG4i LCBuYW1lKTsKPiA+ICsKPiA+ICsJZXJyb3IgPSBzaW1wbGVfcGluX2ZzKCZkcm1fZnNfdHlwZSwg JmRybWZzX21vdW50LAo+ID4gKwkJCSAgICAgICZkcm1mc19tb3VudF9jb3VudCk7Cj4gPiArCWlm IChlcnJvcikKPiA+ICsJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKPiA+ICsKPiA+ICsJLyogSWYg dGhlIHBhcmVudCBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBjcmVhdGUgaXQgaW4gdGhlIHJvb3QuCj4g PiArCSAqIFdlIG5lZWQgdGhlIHJvb3QgZGVudHJ5IHRvIGRvIHRoaXMsIHdoaWNoIGlzIGluIHRo ZSBzdXBlcgo+ID4gKwkgKiBibG9jay4gQSBwb2ludGVyIHRvIHRoYXQgaXMgaW4gdGhlIHN0cnVj dCB2ZnNtb3VudCB0aGF0IHdlCj4gPiArCSAqIGhhdmUgYXJvdW5kLgo+ID4gKwkgKi8KPiA+ICsJ aWYgKCFwYXJlbnQpCj4gPiArCQlwYXJlbnQgPSBkcm1mc19tb3VudC0+bW50X3Jvb3Q7Cj4gPiAr Cj4gPiArCWlub2RlX2xvY2socGFyZW50LT5kX2lub2RlKTsKPiA+ICsJZGVudHJ5ID0gbG9va3Vw X29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOwo+ID4gKwlpZiAoIUlTX0VSUihk ZW50cnkpICYmIGRlbnRyeS0+ZF9pbm9kZSkgewo+ID4gKwkJZHB1dChkZW50cnkpOwo+ID4gKwkJ ZGVudHJ5ID0gRVJSX1BUUigtRUVYSVNUKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAoSVNfRVJS KGRlbnRyeSkpIHsKPiA+ICsJCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOwo+ID4gKwkJ c2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAmZHJtZnNfbW91bnRfY291bnQpOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXJldHVybiBkZW50cnk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBz dHJ1Y3QgZGVudHJ5ICpmYWlsZWRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQo+ID4g K3sKPiA+ICsJaW5vZGVfdW5sb2NrKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUpOwo+ID4gKwlk cHV0KGRlbnRyeSk7Cj4gPiArCXNpbXBsZV9yZWxlYXNlX2ZzKCZkcm1mc19tb3VudCwgJmRybWZz X21vdW50X2NvdW50KTsKPiA+ICsJcmV0dXJuIE5VTEw7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBzdHJ1Y3QgZGVudHJ5ICplbmRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQo+ID4g K3sKPiA+ICsJaW5vZGVfdW5sb2NrKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUpOwo+ID4gKwly ZXR1cm4gZGVudHJ5Owo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1mc19jcmVhdGVf ZmlsZSAtIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIGRybWZzIGZpbGVzeXN0ZW0KPiA+ICsgKiBAbmFt ZTogYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUg dG8gY3JlYXRlLgo+ID4gKyAqIEBtb2RlOiB0aGUgcGVybWlzc2lvbiB0aGF0IHRoZSBmaWxlIHNo b3VsZCBoYXZlLgo+ID4gKyAqIEBwYXJlbnQ6IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRlbnRy eSBmb3IgdGhpcyBmaWxlLiAgVGhpcyBzaG91bGQgYmUgYQo+ID4gKyAqICAgICAgICAgIGRpcmVj dG9yeSBkZW50cnkgaWYgc2V0LiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgTlVMTCwgdGhlbiB0aGUK PiA+ICsgKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUg ZHJtZnMgZmlsZXN5c3RlbS4KPiA+ICsgKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0 aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlcgo+ID4gKyAqICAgICAgICBv bi4gIFRoZSBpbm9kZS5pX3ByaXZhdGUgcG9pbnRlciB3aWxsIHBvaW50IHRvIHRoaXMgdmFsdWUg b24KPiA+ICsgKiAgICAgICAgdGhlIG9wZW4oKSBjYWxsLgo+ID4gKyAqIEBmb3BzOiBhIHBvaW50 ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCj4g PiArICogICAgICAgIHRoaXMgZmlsZS4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIGJhc2lj ICJjcmVhdGUgYSBmaWxlIiBmdW5jdGlvbiBmb3IgZHJtZnMuICBJdCBhbGxvd3MgZm9yIGEKPiA+ ICsgKiB3aWRlIHJhbmdlIG9mIGZsZXhpYmlsaXR5IGluIGNyZWF0aW5nIGEgZmlsZSwgb3IgYSBk aXJlY3RvcnkgKGlmIHlvdSB3YW50Cj4gPiArICogdG8gY3JlYXRlIGEgZGlyZWN0b3J5LCB0aGUg ZHJtZnNfY3JlYXRlX2RpcigpIGZ1bmN0aW9uIGlzCj4gPiArICogcmVjb21tZW5kZWQgdG8gYmUg dXNlZCBpbnN0ZWFkLikKPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4g YSBwb2ludGVyIHRvIGEgZGVudHJ5IGlmIGl0IHN1Y2NlZWRzLiAgVGhpcwo+ID4gKyAqIHBvaW50 ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGRybWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhl IGZpbGUgaXMKPiA+ICsgKiB0byBiZSByZW1vdmVkIChubyBhdXRvbWF0aWMgY2xlYW51cCBoYXBw ZW5zIGlmIHlvdXIgbW9kdWxlIGlzIHVubG9hZGVkLAo+ID4gKyAqIHlvdSBhcmUgcmVzcG9uc2li bGUgaGVyZS4pICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCj4g PiArICoKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZGVudHJ5ICpkcm1mc19jcmVhdGVfZmlsZShjb25z dCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsCj4gPiArCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBh cmVudCwgdm9pZCAqZGF0YSwKPiA+ICsJCQkJICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyAqZm9wcykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKPiA+ICsJc3RydWN0 IGlub2RlICppbm9kZTsKPiA+ICsKPiA+ICsJaWYgKCEobW9kZSAmIFNfSUZNVCkpCj4gPiArCQlt b2RlIHw9IFNfSUZSRUc7Cj4gPiArCj4gPiArCWlmIChXQVJOX09OKCFTX0lTUkVHKG1vZGUpKSkK PiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwo+ID4gKwlkZW50cnkgPSBzdGFydF9jcmVhdGluZyhu YW1lLCBwYXJlbnQpOwo+ID4gKwo+ID4gKwlpZiAoSVNfRVJSKGRlbnRyeSkpCj4gPiArCQlyZXR1 cm4gTlVMTDsKPiA+ICsKPiA+ICsJaW5vZGUgPSBkcm1mc19nZXRfaW5vZGUoZGVudHJ5LT5kX3Ni KTsKPiA+ICsJaWYgKHVubGlrZWx5KCFpbm9kZSkpCj4gPiArCQlyZXR1cm4gZmFpbGVkX2NyZWF0 aW5nKGRlbnRyeSk7Cj4gPiArCj4gPiArCWlub2RlLT5pX21vZGUgPSBtb2RlOwo+ID4gKwlpbm9k ZS0+aV9mb3AgPSBmb3BzID8gZm9wcyA6ICZkcm1mc19kZWZhdWx0X2ZpbGVfb3BlcmF0aW9uczsK PiA+ICsJaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7Cj4gPiArCWRfaW5zdGFudGlhdGUoZGVudHJ5 LCBpbm9kZSk7Cj4gPiArCWZzbm90aWZ5X2NyZWF0ZShkZW50cnktPmRfcGFyZW50LT5kX2lub2Rl LCBkZW50cnkpOwo+ID4gKwlyZXR1cm4gZW5kX2NyZWF0aW5nKGRlbnRyeSk7Cj4gPiArfQo+ID4g K0VYUE9SVF9TWU1CT0woZHJtZnNfY3JlYXRlX2ZpbGUpOwo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1 Y3QgZGVudHJ5ICpfX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAq cGFyZW50LAo+ID4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqb3BzKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc3RhcnRfY3JlYXRpbmcobmFtZSwg cGFyZW50KTsKPiA+ICsJc3RydWN0IGlub2RlICppbm9kZTsKPiA+ICsKPiA+ICsJaWYgKElTX0VS UihkZW50cnkpKQo+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiArCj4gPiArCWlub2RlID0gZHJtZnNf Z2V0X2lub2RlKGRlbnRyeS0+ZF9zYik7Cj4gPiArCWlmICh1bmxpa2VseSghaW5vZGUpKQo+ID4g KwkJcmV0dXJuIGZhaWxlZF9jcmVhdGluZyhkZW50cnkpOwo+ID4gKwo+ID4gKwlpbm9kZS0+aV9t b2RlID0gU19JRkRJUiB8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTzsKPiA+ICsJaW5vZGUt Pmlfb3AgPSBvcHM7Cj4gPiArCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7 Cj4gPiArCj4gPiArCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9 PSAyIChmb3IgIi4iIGVudHJ5KSAqLwo+ID4gKwlpbmNfbmxpbmsoaW5vZGUpOwo+ID4gKwlkX2lu c3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwo+ID4gKwlpbmNfbmxpbmsoZGVudHJ5LT5kX3BhcmVu dC0+ZF9pbm9kZSk7Cj4gPiArCWZzbm90aWZ5X21rZGlyKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5v ZGUsIGRlbnRyeSk7Cj4gPiArCXJldHVybiBlbmRfY3JlYXRpbmcoZGVudHJ5KTsKPiA+ICt9Cj4g PiArCj4gPiArLyoqCj4gPiArICogZHJtZnNfY3JlYXRlX2RpciAtIGNyZWF0ZSBhIGRpcmVjdG9y eSBpbiB0aGUgZHJtZnMgZmlsZXN5c3RlbQo+ID4gKyAqIEBuYW1lOiBhIHBvaW50ZXIgdG8gYSBz dHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvCj4gPiArICogICAg ICAgIGNyZWF0ZS4KPiA+ICsgKiBAcGFyZW50OiBhIHBvaW50ZXIgdG8gdGhlIHBhcmVudCBkZW50 cnkgZm9yIHRoaXMgZmlsZS4gIFRoaXMgc2hvdWxkIGJlIGEKPiA+ICsgKiAgICAgICAgICBkaXJl Y3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhl Cj4gPiArICogICAgICAgICAgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBv ZiB0aGUgZHJtZnMgZmlsZXN5c3RlbS4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY3Jl YXRlcyBhIGRpcmVjdG9yeSBpbiBkcm1mcyB3aXRoIHRoZSBnaXZlbiBuYW1lLgo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYg aXQgc3VjY2VlZHMuICBUaGlzCj4gPiArICogcG9pbnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUg ZHJtZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcwo+ID4gKyAqIHRvIGJlIHJl bW92ZWQuIElmIGFuIGVycm9yIG9jY3VycywgJU5VTEwgd2lsbCBiZSByZXR1cm5lZC4KPiA+ICsg Kgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkZW50cnkgKmRybWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hh ciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KQo+ID4gK3sKPiA+ICsJcmV0dXJuIF9fY3Jl YXRlX2RpcihuYW1lLCBwYXJlbnQsICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnMpOwo+ID4g K30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybWZzX2NyZWF0ZV9kaXIpOwo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgX19kcm1mc19yZW1vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZGVudHJ5 ICpwYXJlbnQpCj4gPiArewo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJaWYgKHNpbXBs ZV9wb3NpdGl2ZShkZW50cnkpKSB7Cj4gPiArCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7Cj4gPiAr CQkJZGdldChkZW50cnkpOwo+ID4gKwkJCXN3aXRjaCAoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUg JiBTX0lGTVQpIHsKPiA+ICsJCQljYXNlIFNfSUZESVI6Cj4gPiArCQkJCXJldCA9IHNpbXBsZV9y bWRpcihwYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSk7Cj4gPiArCQkJCWJyZWFrOwo+ID4gKwkJCWRl ZmF1bHQ6Cj4gPiArCQkJCXNpbXBsZV91bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOwo+ ID4gKwkJCQlicmVhazsKPiA+ICsJCQl9Cj4gPiArCQkJaWYgKCFyZXQpCj4gPiArCQkJCWRfZGVs ZXRlKGRlbnRyeSk7Cj4gPiArCQkJZHB1dChkZW50cnkpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybWZzX3Jl bW92ZSAtIHJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIHRoZSBkcm1mcyBmaWxlc3lz dGVtCj4gPiArICogQGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhlIGRlbnRyeSBvZiB0aGUgZmls ZSBvciBkaXJlY3RvcnkgdG8gYmUKPiA+ICsgKiAgICAgICAgICByZW1vdmVkLgo+ID4gKyAqCj4g PiArICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4gZHJtZnMg dGhhdCB3YXMgcHJldmlvdXNseQo+ID4gKyAqIGNyZWF0ZWQgd2l0aCBhIGNhbGwgdG8gYW5vdGhl ciBkcm1mcyBmdW5jdGlvbiAobGlrZQo+ID4gKyAqIGRybWZzX2NyZWF0ZV9maWxlKCkgb3IgdmFy aWFudHMgdGhlcmVvZi4pCj4gPiArICovCj4gPiArdm9pZCBkcm1mc19yZW1vdmUoc3RydWN0IGRl bnRyeSAqZGVudHJ5KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRlbnRyeSAqcGFyZW50Owo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwlpZiAoSVNfRVJSX09SX05VTEwoZGVudHJ5KSkKPiA+ICsJCXJl dHVybjsKPiA+ICsKPiA+ICsJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKPiA+ICsJaW5vZGVf bG9jayhwYXJlbnQtPmRfaW5vZGUpOwo+ID4gKwlyZXQgPSBfX2RybWZzX3JlbW92ZShkZW50cnks IHBhcmVudCk7Cj4gPiArCWlub2RlX3VubG9jayhwYXJlbnQtPmRfaW5vZGUpOwo+ID4gKwlpZiAo IXJldCkKPiA+ICsJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkcm1mc19tb3VudCwgJmRybWZzX21vdW50 X2NvdW50KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1mc19yZW1vdmUpOwo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybWZzX3JlbW92ZV9yZWN1cnNpdmUgLSByZWN1cnNpdmVseSByZW1v dmVzIGEgZGlyZWN0b3J5Cj4gPiArICogQGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhlIGRlbnRy eSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQuCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1 bmN0aW9uIHJlY3Vyc2l2ZWx5IHJlbW92ZXMgYSBkaXJlY3RvcnkgdHJlZSBpbiBkcm1mcyB0aGF0 Cj4gPiArICogd2FzIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoIGEgY2FsbCB0byBhbm90aGVyIGRy bWZzIGZ1bmN0aW9uCj4gPiArICogKGxpa2UgZHJtZnNfY3JlYXRlX2ZpbGUoKSBvciB2YXJpYW50 cyB0aGVyZW9mLikKPiA+ICsgKi8KPiA+ICt2b2lkIGRybWZzX3JlbW92ZV9yZWN1cnNpdmUoc3Ry dWN0IGRlbnRyeSAqZGVudHJ5KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRlbnRyeSAqY2hpbGQsICpw YXJlbnQ7Cj4gPiArCj4gPiArCWlmIChJU19FUlJfT1JfTlVMTChkZW50cnkpKQo+ID4gKwkJcmV0 dXJuOwo+ID4gKwo+ID4gKwlwYXJlbnQgPSBkZW50cnk7Cj4gPiArIGRvd246Cj4gPiArCWlub2Rl X2xvY2socGFyZW50LT5kX2lub2RlKTsKPiA+ICsgbG9vcDoKPiA+ICsJLyoKPiA+ICsJICogVGhl IHBhcmVudC0+ZF9zdWJkaXJzIGlzIHByb3RlY3RlZCBieSB0aGUgZF9sb2NrLiBPdXRzaWRlIHRo YXQKPiA+ICsJICogbG9jaywgdGhlIGNoaWxkIGNhbiBiZSB1bmxpbmtlZCBhbmQgc2V0IHRvIGJl IGZyZWVkIHdoaWNoIGNhbgo+ID4gKwkgKiB1c2UgdGhlIGRfdS5kX2NoaWxkIGFzIHRoZSByY3Ug aGVhZCBhbmQgY29ycnVwdCB0aGlzIGxpc3QuCj4gPiArCSAqLwo+ID4gKwlzcGluX2xvY2soJnBh cmVudC0+ZF9sb2NrKTsKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnBhcmVudC0+ ZF9zdWJkaXJzLCBkX2NoaWxkKSB7Cj4gPiArCQlpZiAoIXNpbXBsZV9wb3NpdGl2ZShjaGlsZCkp Cj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQkvKiBwZXJoYXBzIHNpbXBsZV9lbXB0eShj aGlsZCkgbWFrZXMgbW9yZSBzZW5zZSAqLwo+ID4gKwkJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZC0+ ZF9zdWJkaXJzKSkgewo+ID4gKwkJCXNwaW5fdW5sb2NrKCZwYXJlbnQtPmRfbG9jayk7Cj4gPiAr CQkJaW5vZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9kZSk7Cj4gPiArCQkJcGFyZW50ID0gY2hpbGQ7 Cj4gPiArCQkJZ290byBkb3duOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJc3Bpbl91bmxvY2soJnBh cmVudC0+ZF9sb2NrKTsKPiA+ICsKPiA+ICsJCWlmICghX19kcm1mc19yZW1vdmUoY2hpbGQsIHBh cmVudCkpCj4gPiArCQkJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAmZHJtZnNfbW91 bnRfY291bnQpOwo+ID4gKwo+ID4gKwkJLyoKPiA+ICsJCSAqIFRoZSBwYXJlbnQtPmRfbG9jayBw cm90ZWN0cyBhZ2FpbnN0IGNoaWxkIGZyb20gdW5saW5raW5nCj4gPiArCQkgKiBmcm9tIGRfc3Vi ZGlycy4gV2hlbiByZWxlYXNpbmcgdGhlIHBhcmVudC0+ZF9sb2NrIHdlIGNhbgo+ID4gKwkJICog bm8gbG9uZ2VyIHRydXN0IHRoYXQgdGhlIG5leHQgcG9pbnRlciBpcyB2YWxpZC4KPiA+ICsJCSAq IFJlc3RhcnQgdGhlIGxvb3AuIFdlJ2xsIHNraXAgdGhpcyBvbmUgd2l0aCB0aGUKPiA+ICsJCSAq IHNpbXBsZV9wb3NpdGl2ZSgpIGNoZWNrLgo+ID4gKwkJICovCj4gPiArCQlnb3RvIGxvb3A7Cj4g PiArCX0KPiA+ICsJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKPiA+ICsKPiA+ICsJaW5v ZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9kZSk7Cj4gPiArCWNoaWxkID0gcGFyZW50Owo+ID4gKwlw YXJlbnQgPSBwYXJlbnQtPmRfcGFyZW50Owo+ID4gKwlpbm9kZV9sb2NrKHBhcmVudC0+ZF9pbm9k ZSk7Cj4gPiArCj4gPiArCWlmIChjaGlsZCAhPSBkZW50cnkpCj4gPiArCQkvKiBnbyB1cCAqLwo+ ID4gKwkJZ290byBsb29wOwo+ID4gKwo+ID4gKwlpZiAoIV9fZHJtZnNfcmVtb3ZlKGNoaWxkLCBw YXJlbnQpKQo+ID4gKwkJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAmZHJtZnNfbW91 bnRfY291bnQpOwo+ID4gKwlpbm9kZV91bmxvY2socGFyZW50LT5kX2lub2RlKTsKPiA+ICt9Cj4g PiArRVhQT1JUX1NZTUJPTChkcm1mc19yZW1vdmVfcmVjdXJzaXZlKTsKPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBkcm1mc19pbml0aWFsaXplZCAtIFRlbGxzIHdoZXRoZXIgZHJtZnMgaGFzIGJlZW4g cmVnaXN0ZXJlZAo+ID4gKyAqLwo+ID4gK2Jvb2wgZHJtZnNfaW5pdGlhbGl6ZWQodm9pZCkKPiA+ ICt7Cj4gPiArCXJldHVybiBkcm1mc19yZWdpc3RlcmVkOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lN Qk9MKGRybWZzX2luaXRpYWxpemVkKTsKPiA+ICsKPiA+ICtpbnQgZHJtZnNfaW5pdCh2b2lkKQo+ ID4gK3sKPiA+ICsJaW50IHJldHZhbDsKPiA+ICsKPiA+ICsJcmV0dmFsID0gc3lzZnNfY3JlYXRl X21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCAiZHJtIik7Cj4gPiArCWlmIChyZXR2YWwpCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJcmV0dmFsID0gcmVnaXN0ZXJfZmlsZXN5c3Rl bSgmZHJtX2ZzX3R5cGUpOwo+ID4gKwlpZiAoIXJldHZhbCkKPiA+ICsJCWRybWZzX3JlZ2lzdGVy ZWQgPSB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0dmFsOwo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MKGRybWZzX2luaXQpOwo+ID4gKwo+ID4gK2ludCBkcm1mc19maW5pKHZvaWQpCj4gPiAr ewo+ID4gKwlpbnQgcmV0dmFsOwo+ID4gKwo+ID4gKwlyZXR2YWwgPSB1bnJlZ2lzdGVyX2ZpbGVz eXN0ZW0oJmRybV9mc190eXBlKTsKPiA+ICsJaWYgKHJldHZhbCkKPiA+ICsJCXJldHVybiByZXR2 YWw7Cj4gPiArCj4gPiArCWRybWZzX3JlZ2lzdGVyZWQgPSBmYWxzZTsKPiA+ICsKPiA+ICsJc3lz ZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCAiZHJtIik7Cj4gPiArfQo+ID4gK0VY UE9SVF9TWU1CT0woZHJtZnNfZmluaSk7Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9k cm1mcy5oIGIvaW5jbHVkZS9saW51eC9kcm1mcy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ ID4gaW5kZXggMDAwMDAwMC4uMzA5MTQ4MAo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvaW5j bHVkZS9saW51eC9kcm1mcy5oCj4gPiBAQCAtMCwwICsxLDU2IEBACj4gPiArLyoKPiA+ICsgKiBD b3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4g PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIKPiA+ICsgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gPiArICoKPiA+ICsg KiBBdXRob3JzOgo+ID4gKyAqCVN3YXRpIERoaW5ncmEgPHN3YXRpLmRoaW5ncmFAaW50ZWwuY29t Pgo+ID4gKyAqCVNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNvbT4KPiA+ICsgKglB a2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZu ZGVmIF9EUk1GU19IXwo+ID4gKyNkZWZpbmUgX0RSTUZTX0hfCj4gPiArCj4gPiArI2luY2x1ZGUg PGxpbnV4L2ZzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Cj4gPiArCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiArCj4gPiArc3RydWN0IGZpbGVfb3BlcmF0aW9u czsKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX0RSTUZTCj4gPiArCj4gPiArc3RydWN0IGRlbnRy eSAqZHJtZnNfY3JlYXRlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW1vZGVfdCBtb2RlLAo+ID4g KwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCj4gPiArCQkJCSAgIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpOwo+ID4gKwo+ID4gK3N0cnVjdCBkZW50 cnkgKmRybWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFy ZW50KTsKPiA+ICsKPiA+ICt2b2lkIGRybWZzX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkp Owo+ID4gK3ZvaWQgZHJtZnNfcmVtb3ZlX3JlY3Vyc2l2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkp Owo+ID4gKwo+ID4gK2Jvb2wgZHJtZnNfaW5pdGlhbGl6ZWQodm9pZCk7Cj4gPiAraW50IGRybWZz X2luaXQodm9pZCk7Cj4gPiAraW50IGRybWZzX2Zpbmkodm9pZCk7Cj4gPiArCj4gPiArI2VuZGlm IC8qIENPTkZJR19EUk1GUyAqLwo+ID4gKwo+ID4gKyNlbmRpZgo+ID4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKPiA+ IGluZGV4IDliZDU1OTQuLmVmMDFlYjcgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGlu dXgvbWFnaWMuaAo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKPiA+IEBAIC02 MSw2ICs2MSw5IEBACj4gPiAgI2RlZmluZSBTVEFDS19FTkRfTUFHSUMJCTB4NTdBQzZFOUQKPiA+ ICAKPiA+ICAjZGVmaW5lIFRSQUNFRlNfTUFHSUMgICAgICAgICAgMHg3NDcyNjE2Mwo+ID4gKyNk ZWZpbmUgRFJNRlNfTUFHSUMJICAgICAgIDB4ODQ3MjQxNDMgICAgICAvKiBzb21lIHJhbmRvbSBu dW1iZXIuCj4gPiArCQkJCQkJKiBJcyB0aGVyZSBhIGJldHRlciB3YXk/Cj4gPiArCQkJCQkJKi8K PiA+ICAKPiA+ICAjZGVmaW5lIFY5RlNfTUFHSUMJCTB4MDEwMjE5OTcKPiA+ICAKPiA+IC0tIAo+ ID4gMi43LjQKPiA+IAo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiA+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiA+IEludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==