From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [RFC 1/3] fs: Introduce drmfs pseudo filesystem interfaces Date: Fri, 2 Dec 2016 14:40:54 -0800 Message-ID: <20161202224054.GH2617@intel.com> References: <1480580057-27548-1-git-send-email-swati.dhingra@intel.com> <1480580057-27548-2-git-send-email-swati.dhingra@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3618F6EA2A for ; Fri, 2 Dec 2016 22:40:55 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1480580057-27548-2-git-send-email-swati.dhingra@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: swati.dhingra@intel.com Cc: intel-gfx@lists.freedesktop.org, Sourab Gupta List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBEZWMgMDEsIDIwMTYgYXQgMDE6NDQ6MTVQTSArMDUzMCwgc3dhdGkuZGhpbmdyYUBp bnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogU3dhdGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBpbnRl bC5jb20+Cj4gCj4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcHNldWRvIGZpbGVzeXN0ZW0g dHlwZSwgbmFtZWQgJ2RybWZzJyB3aGljaCBpcwo+IGludGVuZGVkIHRvIGhvdXNlIHRoZSBmaWxl cyBmb3IgdGhlIGRhdGEgZ2VuZXJhdGVkIGJ5IGRybSBzdWJzeXN0ZW0gdGhhdAo+IGNhbm5vdCBi ZSBhY2NvbW1vZGF0ZWQgYnkgYW55IG9mIHRoZSBleGlzdGluZyBmaWxlc3lzdGVtcy4KPiBUaGUg ZmlsZXN5c3RlbSBpcyBtb2RlbGxlZCBvbiB0aGUgbGluZXMgb2YgZXhpc3RpbmcgcHNldWRvLWZp bGVzeXN0ZW1zIHN1Y2gKPiBhcyBkZWJ1Z2ZzL3RyYWNlZnMsIGFuZCBib3Jyb3dzIGlkZWFzIGZy b20gdGhlaXIgaW1wbGVtZW50YXRpb24uCj4gVGhpcyBmaWxlc3lzdGVtIHdpbGwgYmUgYXBwZWFy aW5nIGF0IHN5cy9rZXJuZWwvZHJtLgo+IAo+IEEgbmV3IGNvbmZpZyAnQ09ORklHX0RSTUZTJyBp cyBpbnRyb2R1Y2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBmaWxlc3lzdGVtLAo+IHdoaWNoIGlz IGRlcGVuZGVudCBvbiBDT05GSUdfRFJNLgo+IFRoZSBmaWxlc3lzdGVtIHdpbGwgbm90IGJlIHJl Z2lzdGVyZWQgc3RhbmRhbG9uZSBkdXJpbmcga2VybmVsIGluaXQgdGltZSwKPiBpbnN0ZWFkIGl0 IGlzIGludGVuZGVkIHRvIGJlIGluaXRpYWxpemVkL3JlZ2lzdGVyZWQgZHVyaW5nIGRybSBpbml0 aWFsaXphdGlvbi4KPiAKPiBUaGUgaW50ZW50IGZvciBpbnRyb2R1Y3Rpb24gb2YgdGhlIGZpbGVz eXN0ZW0gaXMgdG8gYWN0IGFzIGEgbG9jYXRpb24gdG8gaG9sZAo+IHZhcmlvdXMga2luZHMgb2Yg ZGF0YSBvdXRwdXQgZnJvbSBMaW51eCBEUk0gc3Vic3lzdGVtcywgd2hpY2ggY2FuJ3QgcmVhbGx5 IGZpdAo+IGFueXdoZXJlIGVsc2UgaW50byB0aGUgZXhpc3RpbmcgZmlsZXN5c3RlbXMgc3VjaCBh cyBkZWJ1Z2ZzL3N5c2ZzIGV0Yy4gQWxsIHRoZXNlCj4gZmlsZXN5c3RlbXMgaGF2ZSB0aGVpciBv d24gY29uc3RyYWludHMgYW5kIGFyZSBpbnRlbmRlZCB0byBvdXRwdXQgYSBwYXJ0aWN1bGFyCj4g dHlwZSBvZiBkYXRhIHN1Y2ggYXMgYXR0cmlidXRlcyBhbmQgc21hbGwgZGVidWcgcGFyYW1ldGVy IGRhdGEuIER1ZSB0byB0aGVzZQo+IGNvbnN0cmFpbnRzLCB0aGVyZSBpcyBhIG5lZWQgZm9yIGEg bmV3IHBzZXVkbyBmaWxlc3l0ZW0sIGN1c3RvbWl6YWJsZSB0byBEUk0KPiBzcGVjaWZpYyByZXF1 aXJlbWVudHMgYW5kIGNhdGVyaW5nIHRvIHRoZSBuZWVkcyB0byBEUk0gc3Vic3lzdGVtIGNvbXBv bmVudHMKCkFtIEkgY29ycmVjdCBpbiBhc3N1bWluZyB0aGUgZGF0YSBtYWRlIGF2YWlsYWJsZSB2 aWEgZHJtZnMgaXMgbm90CmNvbnNpZGVyZWQgQUJJPyAgSWYgd2UncmUgbm90IGdvaW5nIHRvIGd1 YXJhbnRlZSBhIHN0YWJsZSBBQkkgYW5kCmJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yZXZlciBm b3IgdGhlIGl0ZW1zIGV4cG9zZWQgaGVyZSwgdGhlbiBpdCdzCmltcG9ydGFudCB0byBzdGF0ZSB0 aGF0IHZlcnkgZXhwbGljaXRseSB1cCBmcm9udCBzbyB0aGF0IG5vIHVzZXJzcGFjZQpzb2Z0d2Fy ZSBnZXRzIHdyaXR0ZW4gd2l0aCB0aGUgd3JvbmcgYXNzdW1wdGlvbi4gIEknZCBzdWdnZXN0IG1h a2luZyBhbgpleHBsaWNpdCBub3RlIG9uZSB3YXkgb3IgdGhlIG90aGVyIGluIHRoZSBjb21taXQg bWVzc2FnZSBoZXJlIGFuZApwcm9iYWJseSBpbiB0aGUgS2NvbmZpZyBoZWxwIHRleHQgYXMgd2Vs bC4KCgpNYXR0Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRh QGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBTd2F0aSBEaGluZ3JhIDxzd2F0aS5kaGluZ3Jh QGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyAgfCAgIDEgKwo+ ICBmcy9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgOSArCj4gIGZzL01ha2VmaWxlICAgICAg ICAgICAgICAgIHwgICAxICsKPiAgZnMvZHJtZnMvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKwo+ ICBmcy9kcm1mcy9pbm9kZS5jICAgICAgICAgICB8IDU2MSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9saW51eC9kcm1mcy5oICAgICAgfCAg NTYgKysrKysKPiAgaW5jbHVkZS91YXBpL2xpbnV4L21hZ2ljLmggfCAgIDMgKwo+ICA3IGZpbGVz IGNoYW5nZWQsIDYzNCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcy9kcm1m cy9NYWtlZmlsZQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZnMvZHJtZnMvaW5vZGUuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9kcm1mcy5oCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gaW5k ZXggNmRiYjk4Ni4uODRmY2ZjYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Ry di5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwo+IEBAIC0yNyw2ICsyNyw3IEBA Cj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2RybWZzLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ICAjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgo+IGRpZmYgLS1naXQg YS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwo+IGluZGV4IDRiZDAzYTIuLjdkMGFjMjAgMTAwNjQ0 Cj4gLS0tIGEvZnMvS2NvbmZpZwo+ICsrKyBiL2ZzL0tjb25maWcKPiBAQCAtMjAwLDYgKzIwMCwx NSBAQCBjb25maWcgSFVHRVRMQkZTCj4gIGNvbmZpZyBIVUdFVExCX1BBR0UKPiAgCWRlZl9ib29s IEhVR0VUTEJGUwo+ICAKPiArY29uZmlnIERSTUZTCj4gKwlib29sICJEcm1mcyBmaWxlIHN5c3Rl bSBzdXBwb3J0Igo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCWhlbHAKPiArCSAgRHJtZnMgaXMgYSBw c2V1ZG8gZmlsZSBzeXN0ZW0gZm9yIGRybSBzdWJzeXN0ZW0gb3V0cHV0IGRhdGEuCj4gKwo+ICsJ ICBkcm1mcyBpcyBhIGZpbGVzeXN0ZW0gdG8gaG9sZCBtaXNjZWxsYW5lb3VzIG91dHB1dCBkYXRh IGZyb20gZHJtCj4gKwkgIHN1YnN5c3RlbXMuCj4gKwo+ICBjb25maWcgQVJDSF9IQVNfR0lHQU5U SUNfUEFHRQo+ICAJYm9vbAo+ICAKPiBkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtl ZmlsZQo+IGluZGV4IGVkMmI2MzIuLmIzNGE5NmUgMTAwNjQ0Cj4gLS0tIGEvZnMvTWFrZWZpbGUK PiArKysgYi9mcy9NYWtlZmlsZQo+IEBAIC0xMjAsNiArMTIwLDcgQEAgb2JqLSQoQ09ORklHX0JF RlNfRlMpCQkrPSBiZWZzLwo+ICBvYmotJChDT05GSUdfSE9TVEZTKQkJKz0gaG9zdGZzLwo+ICBv YmotJChDT05GSUdfQ0FDSEVGSUxFUykJKz0gY2FjaGVmaWxlcy8KPiAgb2JqLSQoQ09ORklHX0RF QlVHX0ZTKQkJKz0gZGVidWdmcy8KPiArb2JqLSQoQ09ORklHX0RSTUZTKQkJKz0gZHJtZnMvCj4g IG9iai0kKENPTkZJR19UUkFDSU5HKQkJKz0gdHJhY2Vmcy8KPiAgb2JqLSQoQ09ORklHX09DRlMy X0ZTKQkJKz0gb2NmczIvCj4gIG9iai0kKENPTkZJR19CVFJGU19GUykJCSs9IGJ0cmZzLwo+IGRp ZmYgLS1naXQgYS9mcy9kcm1mcy9NYWtlZmlsZSBiL2ZzL2RybWZzL01ha2VmaWxlCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hYzg3ZTQ5Nwo+IC0tLSAvZGV2L251bGwK PiArKysgYi9mcy9kcm1mcy9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMyBAQAo+ICtkcm1mcy1vYmpz CTo9IGlub2RlLm8KPiArCj4gK29iai0kKENPTkZJR19EUk1GUykJKz0gZHJtZnMubwo+IGRpZmYg LS1naXQgYS9mcy9kcm1mcy9pbm9kZS5jIGIvZnMvZHJtZnMvaW5vZGUuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOTIyMDcwNQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9mcy9kcm1mcy9pbm9kZS5jCj4gQEAgLTAsMCArMSw1NjEgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCj4gKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICogQXV0aG9yczoKPiArICoJU3dhdGkgRGhpbmdyYSA8c3dhdGkuZGhpbmdyYUBp bnRlbC5jb20+Cj4gKyAqCVNvdXJhYiBHdXB0YSA8c291cmFiLmd1cHRhQGludGVsLmNvbT4KPiAr ICoJQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+Cj4gKyAqLwo+ICsKPiArLyoKPiAr ICogZHJtZnMgaXMgdGhlIGZpbGVzeXN0ZW0gdXNlZCBmb3Igb3V0cHV0IG9mIGRybSBzdWJzeXN0 ZW0gZGF0YQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgo+ICsjaW5jbHVkZSA8 bGludXgva29iamVjdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RybWZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvc2VxX2ZpbGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgo+ICsjaW5j bHVkZSA8bGludXgvbWFnaWMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4gKyNk ZWZpbmUgRFJNRlNfREVGQVVMVF9NT0RFCTA3MDAKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmZzbW91 bnQgKmRybWZzX21vdW50Owo+ICtzdGF0aWMgaW50IGRybWZzX21vdW50X2NvdW50Owo+ICtzdGF0 aWMgYm9vbCBkcm1mc19yZWdpc3RlcmVkOwo+ICsKPiArc3RhdGljIHNzaXplX3QgZGVmYXVsdF9y ZWFkX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCj4gKwkJCQlzaXpl X3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBzc2l6ZV90IGRlZmF1bHRfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qg Y2hhciBfX3VzZXIgKmJ1ZiwKPiArCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ICt7 Cj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGRybWZzX2RlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0gewo+ICsJLnJlYWQgPQkJ ZGVmYXVsdF9yZWFkX2ZpbGUsCj4gKwkud3JpdGUgPQlkZWZhdWx0X3dyaXRlX2ZpbGUsCj4gKwku b3BlbiA9CQlzaW1wbGVfb3BlbiwKPiArCS5sbHNlZWsgPQlub29wX2xsc2VlaywKPiArfTsKPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRybWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiKQo+ICt7Cj4gKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKPiAr Cj4gKwlpZiAoaW5vZGUpIHsKPiArCQlpbm9kZS0+aV9pbm8gPSBnZXRfbmV4dF9pbm8oKTsKPiAr CQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJS RU5UX1RJTUU7Cj4gKwl9Cj4gKwlyZXR1cm4gaW5vZGU7Cj4gK30KPiArCj4gK3N0cnVjdCBkcm1m c19tb3VudF9vcHRzIHsKPiArCWt1aWRfdCB1aWQ7Cj4gKwlrZ2lkX3QgZ2lkOwo+ICsJdW1vZGVf dCBtb2RlOwo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlPcHRfdWlkLAo+ICsJT3B0X2dpZCwKPiAr CU9wdF9tb2RlLAo+ICsJT3B0X2Vycgo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IG1hdGNoX3Rh YmxlX3QgdG9rZW5zID0gewo+ICsJe09wdF91aWQsICJ1aWQ9JXUifSwKPiArCXtPcHRfZ2lkLCAi Z2lkPSV1In0sCj4gKwl7T3B0X21vZGUsICJtb2RlPSVvIn0sCj4gKwl7T3B0X2VyciwgTlVMTH0K PiArfTsKPiArCj4gK3N0cnVjdCBkcm1mc19mc19pbmZvIHsKPiArCXN0cnVjdCBkcm1mc19tb3Vu dF9vcHRzIG1vdW50X29wdHM7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGRybWZzX3BhcnNlX29w dGlvbnMoY2hhciAqZGF0YSwgc3RydWN0IGRybWZzX21vdW50X29wdHMgKm9wdHMpCj4gK3sKPiAr CXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKPiArCWludCBvcHRpb247Cj4gKwlpbnQg dG9rZW47Cj4gKwlrdWlkX3QgdWlkOwo+ICsJa2dpZF90IGdpZDsKPiArCWNoYXIgKnA7Cj4gKwo+ ICsJb3B0cy0+bW9kZSA9IERSTUZTX0RFRkFVTFRfTU9ERTsKPiArCj4gKwl3aGlsZSAoKHAgPSBz dHJzZXAoJmRhdGEsICIsIikpICE9IE5VTEwpIHsKPiArCQlpZiAoISpwKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOwo+ICsJCXN3 aXRjaCAodG9rZW4pIHsKPiArCQljYXNlIE9wdF91aWQ6Cj4gKwkJCWlmIChtYXRjaF9pbnQoJmFy Z3NbMF0sICZvcHRpb24pKQo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCXVpZCA9IG1ha2Vf a3VpZChjdXJyZW50X3VzZXJfbnMoKSwgb3B0aW9uKTsKPiArCQkJaWYgKCF1aWRfdmFsaWQodWlk KSkKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQlvcHRzLT51aWQgPSB1aWQ7Cj4gKwkJCWJy ZWFrOwo+ICsJCWNhc2UgT3B0X2dpZDoKPiArCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9w dGlvbikpCj4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQkJZ2lkID0gbWFrZV9rZ2lkKGN1cnJl bnRfdXNlcl9ucygpLCBvcHRpb24pOwo+ICsJCQlpZiAoIWdpZF92YWxpZChnaWQpKQo+ICsJCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJCW9wdHMtPmdpZCA9IGdpZDsKPiArCQkJYnJlYWs7Cj4gKwkJ Y2FzZSBPcHRfbW9kZToKPiArCQkJaWYgKG1hdGNoX29jdGFsKCZhcmdzWzBdLCAmb3B0aW9uKSkK PiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQlvcHRzLT5tb2RlID0gb3B0aW9uICYgU19JQUxM VUdPOwo+ICsJCQlicmVhazsKPiArCQkvKgo+ICsJCSAqIFdlIG1pZ2h0IGxpa2UgdG8gcmVwb3J0 IGJhZCBtb3VudCBvcHRpb25zIGhlcmUKPiArCQkgKi8KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtZnNfYXBwbHlfb3B0aW9ucyhzdHJ1Y3Qg c3VwZXJfYmxvY2sgKnNiKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtZnNfZnNfaW5mbyAqZnNpID0gc2It PnNfZnNfaW5mbzsKPiArCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzYi0+c19yb290LT5kX2lub2Rl Owo+ICsJc3RydWN0IGRybWZzX21vdW50X29wdHMgKm9wdHMgPSAmZnNpLT5tb3VudF9vcHRzOwo+ ICsKPiArCWlub2RlLT5pX21vZGUgJj0gflNfSUFMTFVHTzsKPiArCWlub2RlLT5pX21vZGUgfD0g b3B0cy0+bW9kZTsKPiArCj4gKwlpbm9kZS0+aV91aWQgPSBvcHRzLT51aWQ7Cj4gKwlpbm9kZS0+ aV9naWQgPSBvcHRzLT5naWQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZHJtZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFy ICpkYXRhKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRybWZzX2ZzX2luZm8gKmZzaSA9 IHNiLT5zX2ZzX2luZm87Cj4gKwo+ICsJc3luY19maWxlc3lzdGVtKHNiKTsKPiArCWVyciA9IGRy bWZzX3BhcnNlX29wdGlvbnMoZGF0YSwgJmZzaS0+bW91bnRfb3B0cyk7Cj4gKwlpZiAoZXJyKQo+ ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlkcm1mc19hcHBseV9vcHRpb25zKHNiKTsKPiArCj4gK2Zh aWw6Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybWZzX3Nob3dfb3B0 aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpCj4gK3sKPiArCXN0 cnVjdCBkcm1mc19mc19pbmZvICpmc2kgPSByb290LT5kX3NiLT5zX2ZzX2luZm87Cj4gKwlzdHJ1 Y3QgZHJtZnNfbW91bnRfb3B0cyAqb3B0cyA9ICZmc2ktPm1vdW50X29wdHM7Cj4gKwo+ICsJaWYg KCF1aWRfZXEob3B0cy0+dWlkLCBHTE9CQUxfUk9PVF9VSUQpKQo+ICsJCXNlcV9wcmludGYobSwg Iix1aWQ9JXUiLAo+ICsJCQkgICBmcm9tX2t1aWRfbXVuZ2VkKCZpbml0X3VzZXJfbnMsIG9wdHMt PnVpZCkpOwo+ICsJaWYgKCFnaWRfZXEob3B0cy0+Z2lkLCBHTE9CQUxfUk9PVF9HSUQpKQo+ICsJ CXNlcV9wcmludGYobSwgIixnaWQ9JXUiLAo+ICsJCQkgICBmcm9tX2tnaWRfbXVuZ2VkKCZpbml0 X3VzZXJfbnMsIG9wdHMtPmdpZCkpOwo+ICsJaWYgKG9wdHMtPm1vZGUgIT0gRFJNRlNfREVGQVVM VF9NT0RFKQo+ICsJCXNlcV9wcmludGYobSwgIixtb2RlPSVvIiwgb3B0cy0+bW9kZSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0 aW9ucyBkcm1mc19zdXBlcl9vcGVyYXRpb25zID0gewo+ICsJLnN0YXRmcwkJPSBzaW1wbGVfc3Rh dGZzLAo+ICsJLnJlbW91bnRfZnMJPSBkcm1mc19yZW1vdW50LAo+ICsJLnNob3dfb3B0aW9ucwk9 IGRybWZzX3Nob3dfb3B0aW9ucywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZHJtX2ZpbGxfc3Vw ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKPiArewo+ ICsJc3RhdGljIHN0cnVjdCB0cmVlX2Rlc2NyIGRybV9maWxlc1tdID0geyB7IiJ9IH07Cj4gKwlz dHJ1Y3QgZHJtZnNfZnNfaW5mbyAqZnNpOwo+ICsJaW50IGVycjsKPiArCj4gKwlzYXZlX21vdW50 X29wdGlvbnMoc2IsIGRhdGEpOwo+ICsKPiArCWZzaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBk cm1mc19mc19pbmZvKSwgR0ZQX0tFUk5FTCk7Cj4gKwlzYi0+c19mc19pbmZvID0gZnNpOwo+ICsJ aWYgKCFmc2kpIHsKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiAr Cj4gKwllcnIgPSBkcm1mc19wYXJzZV9vcHRpb25zKGRhdGEsICZmc2ktPm1vdW50X29wdHMpOwo+ ICsJaWYgKGVycikKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJZXJyICA9ICBzaW1wbGVfZmlsbF9z dXBlcihzYiwgRFJNRlNfTUFHSUMsIGRybV9maWxlcyk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8g ZmFpbDsKPiArCj4gKwlzYi0+c19vcCA9ICZkcm1mc19zdXBlcl9vcGVyYXRpb25zOwo+ICsKPiAr CWRybWZzX2FwcGx5X29wdGlvbnMoc2IpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZmFpbDoK PiArCWtmcmVlKGZzaSk7Cj4gKwlzYi0+c19mc19pbmZvID0gTlVMTDsKPiArCXJldHVybiBlcnI7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkcm1fbW91bnQoc3RydWN0IGZpbGVf c3lzdGVtX3R5cGUgKmZzX3R5cGUsCj4gKwkJCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25h bWUsCj4gKwkJCXZvaWQgKmRhdGEpCj4gK3sKPiArCXJldHVybiBtb3VudF9zaW5nbGUoZnNfdHlw ZSwgZmxhZ3MsIGRhdGEsIGRybV9maWxsX3N1cGVyKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBmaWxlX3N5c3RlbV90eXBlIGRybV9mc190eXBlID0gewo+ICsJLm93bmVyID0JVEhJU19NT0RV TEUsCj4gKwkubmFtZSA9CQkiZHJtZnMiLAo+ICsJLm1vdW50ID0JZHJtX21vdW50LAo+ICsJLmtp bGxfc2IgPQlraWxsX2xpdHRlcl9zdXBlciwKPiArfTsKPiArTU9EVUxFX0FMSUFTX0ZTKCJkcm1m cyIpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBkZW50cnkgKnN0YXJ0X2NyZWF0aW5nKGNvbnN0IGNo YXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKPiArewo+ICsJc3RydWN0IGRlbnRyeSAq ZGVudHJ5Owo+ICsJaW50IGVycm9yOwo+ICsKPiArCXByX2RlYnVnKCJkcm1mczogY3JlYXRpbmcg ZmlsZSAnJXMnXG4iLCBuYW1lKTsKPiArCj4gKwllcnJvciA9IHNpbXBsZV9waW5fZnMoJmRybV9m c190eXBlLCAmZHJtZnNfbW91bnQsCj4gKwkJCSAgICAgICZkcm1mc19tb3VudF9jb3VudCk7Cj4g KwlpZiAoZXJyb3IpCj4gKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwo+ICsKPiArCS8qIElmIHRo ZSBwYXJlbnQgaXMgbm90IHNwZWNpZmllZCwgd2UgY3JlYXRlIGl0IGluIHRoZSByb290Lgo+ICsJ ICogV2UgbmVlZCB0aGUgcm9vdCBkZW50cnkgdG8gZG8gdGhpcywgd2hpY2ggaXMgaW4gdGhlIHN1 cGVyCj4gKwkgKiBibG9jay4gQSBwb2ludGVyIHRvIHRoYXQgaXMgaW4gdGhlIHN0cnVjdCB2ZnNt b3VudCB0aGF0IHdlCj4gKwkgKiBoYXZlIGFyb3VuZC4KPiArCSAqLwo+ICsJaWYgKCFwYXJlbnQp Cj4gKwkJcGFyZW50ID0gZHJtZnNfbW91bnQtPm1udF9yb290Owo+ICsKPiArCWlub2RlX2xvY2so cGFyZW50LT5kX2lub2RlKTsKPiArCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVu dCwgc3RybGVuKG5hbWUpKTsKPiArCWlmICghSVNfRVJSKGRlbnRyeSkgJiYgZGVudHJ5LT5kX2lu b2RlKSB7Cj4gKwkJZHB1dChkZW50cnkpOwo+ICsJCWRlbnRyeSA9IEVSUl9QVFIoLUVFWElTVCk7 Cj4gKwl9Cj4gKwo+ICsJaWYgKElTX0VSUihkZW50cnkpKSB7Cj4gKwkJaW5vZGVfdW5sb2NrKHBh cmVudC0+ZF9pbm9kZSk7Cj4gKwkJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAmZHJt ZnNfbW91bnRfY291bnQpOwo+ICsJfQo+ICsKPiArCXJldHVybiBkZW50cnk7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYWlsZWRfY3JlYXRpbmcoc3RydWN0IGRlbnRyeSAqZGVu dHJ5KQo+ICt7Cj4gKwlpbm9kZV91bmxvY2soZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSk7Cj4g KwlkcHV0KGRlbnRyeSk7Cj4gKwlzaW1wbGVfcmVsZWFzZV9mcygmZHJtZnNfbW91bnQsICZkcm1m c19tb3VudF9jb3VudCk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBkZW50cnkgKmVuZF9jcmVhdGluZyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCj4gK3sKPiArCWlu b2RlX3VubG9jayhkZW50cnktPmRfcGFyZW50LT5kX2lub2RlKTsKPiArCXJldHVybiBkZW50cnk7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1mc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhIGZpbGUg aW4gdGhlIGRybWZzIGZpbGVzeXN0ZW0KPiArICogQG5hbWU6IGEgcG9pbnRlciB0byBhIHN0cmlu ZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS4KPiArICogQG1vZGU6 IHRoZSBwZXJtaXNzaW9uIHRoYXQgdGhlIGZpbGUgc2hvdWxkIGhhdmUuCj4gKyAqIEBwYXJlbnQ6 IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRlbnRyeSBmb3IgdGhpcyBmaWxlLiAgVGhpcyBzaG91 bGQgYmUgYQo+ICsgKiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMg cGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhlCj4gKyAqICAgICAgICAgIGZpbGUgd2lsbCBiZSBj cmVhdGVkIGluIHRoZSByb290IG9mIHRoZSBkcm1mcyBmaWxlc3lzdGVtLgo+ICsgKiBAZGF0YTog YSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0 byBsYXRlcgo+ICsgKiAgICAgICAgb24uICBUaGUgaW5vZGUuaV9wcml2YXRlIHBvaW50ZXIgd2ls bCBwb2ludCB0byB0aGlzIHZhbHVlIG9uCj4gKyAqICAgICAgICB0aGUgb3BlbigpIGNhbGwuCj4g KyAqIEBmb3BzOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRoYXQgc2hv dWxkIGJlIHVzZWQgZm9yCj4gKyAqICAgICAgICB0aGlzIGZpbGUuCj4gKyAqCj4gKyAqIFRoaXMg aXMgdGhlIGJhc2ljICJjcmVhdGUgYSBmaWxlIiBmdW5jdGlvbiBmb3IgZHJtZnMuICBJdCBhbGxv d3MgZm9yIGEKPiArICogd2lkZSByYW5nZSBvZiBmbGV4aWJpbGl0eSBpbiBjcmVhdGluZyBhIGZp bGUsIG9yIGEgZGlyZWN0b3J5IChpZiB5b3Ugd2FudAo+ICsgKiB0byBjcmVhdGUgYSBkaXJlY3Rv cnksIHRoZSBkcm1mc19jcmVhdGVfZGlyKCkgZnVuY3Rpb24gaXMKPiArICogcmVjb21tZW5kZWQg dG8gYmUgdXNlZCBpbnN0ZWFkLikKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVy biBhIHBvaW50ZXIgdG8gYSBkZW50cnkgaWYgaXQgc3VjY2VlZHMuICBUaGlzCj4gKyAqIHBvaW50 ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGRybWZzX3JlbW92ZSgpIGZ1bmN0aW9uIHdoZW4gdGhl IGZpbGUgaXMKPiArICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVu cyBpZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKPiArICogeW91IGFyZSByZXNwb25zaWJsZSBo ZXJlLikgIElmIGFuIGVycm9yIG9jY3VycywgJU5VTEwgd2lsbCBiZSByZXR1cm5lZC4KPiArICoK PiArICovCj4gK3N0cnVjdCBkZW50cnkgKmRybWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5h bWUsIHVtb2RlX3QgbW9kZSwKPiArCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAq ZGF0YSwKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCj4gK3sK PiArCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKPiArCXN0cnVjdCBpbm9kZSAqaW5vZGU7Cj4gKwo+ ICsJaWYgKCEobW9kZSAmIFNfSUZNVCkpCj4gKwkJbW9kZSB8PSBTX0lGUkVHOwo+ICsKPiArCWlm IChXQVJOX09OKCFTX0lTUkVHKG1vZGUpKSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlkZW50 cnkgPSBzdGFydF9jcmVhdGluZyhuYW1lLCBwYXJlbnQpOwo+ICsKPiArCWlmIChJU19FUlIoZGVu dHJ5KSkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlpbm9kZSA9IGRybWZzX2dldF9pbm9kZShk ZW50cnktPmRfc2IpOwo+ICsJaWYgKHVubGlrZWx5KCFpbm9kZSkpCj4gKwkJcmV0dXJuIGZhaWxl ZF9jcmVhdGluZyhkZW50cnkpOwo+ICsKPiArCWlub2RlLT5pX21vZGUgPSBtb2RlOwo+ICsJaW5v ZGUtPmlfZm9wID0gZm9wcyA/IGZvcHMgOiAmZHJtZnNfZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7 Cj4gKwlpbm9kZS0+aV9wcml2YXRlID0gZGF0YTsKPiArCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBp bm9kZSk7Cj4gKwlmc25vdGlmeV9jcmVhdGUoZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwgZGVu dHJ5KTsKPiArCXJldHVybiBlbmRfY3JlYXRpbmcoZGVudHJ5KTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MKGRybWZzX2NyZWF0ZV9maWxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Ny ZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50LAo+ICsJCQkJ ICAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKm9wcykKPiArewo+ICsJc3RydWN0IGRl bnRyeSAqZGVudHJ5ID0gc3RhcnRfY3JlYXRpbmcobmFtZSwgcGFyZW50KTsKPiArCXN0cnVjdCBp bm9kZSAqaW5vZGU7Cj4gKwo+ICsJaWYgKElTX0VSUihkZW50cnkpKQo+ICsJCXJldHVybiBOVUxM Owo+ICsKPiArCWlub2RlID0gZHJtZnNfZ2V0X2lub2RlKGRlbnRyeS0+ZF9zYik7Cj4gKwlpZiAo dW5saWtlbHkoIWlub2RlKSkKPiArCQlyZXR1cm4gZmFpbGVkX2NyZWF0aW5nKGRlbnRyeSk7Cj4g Kwo+ICsJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhV R087Cj4gKwlpbm9kZS0+aV9vcCA9IG9wczsKPiArCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGly X29wZXJhdGlvbnM7Cj4gKwo+ICsJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBp X25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCj4gKwlpbmNfbmxpbmsoaW5vZGUpOwo+ICsJ ZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKPiArCWluY19ubGluayhkZW50cnktPmRfcGFy ZW50LT5kX2lub2RlKTsKPiArCWZzbm90aWZ5X21rZGlyKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5v ZGUsIGRlbnRyeSk7Cj4gKwlyZXR1cm4gZW5kX2NyZWF0aW5nKGRlbnRyeSk7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBkcm1mc19jcmVhdGVfZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5IGluIHRoZSBk cm1mcyBmaWxlc3lzdGVtCj4gKyAqIEBuYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFp bmluZyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvCj4gKyAqICAgICAgICBjcmVhdGUuCj4g KyAqIEBwYXJlbnQ6IGEgcG9pbnRlciB0byB0aGUgcGFyZW50IGRlbnRyeSBmb3IgdGhpcyBmaWxl LiAgVGhpcyBzaG91bGQgYmUgYQo+ICsgKiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNl dC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIHRoZW4gdGhlCj4gKyAqICAgICAgICAgIGRp cmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHJvb3Qgb2YgdGhlIGRybWZzIGZpbGVzeXN0 ZW0uCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGRpcmVjdG9yeSBpbiBkcm1m cyB3aXRoIHRoZSBnaXZlbiBuYW1lLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0 dXJuIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKPiArICogcG9p bnRlciBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZHJtZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0 aGUgZmlsZSBpcwo+ICsgKiB0byBiZSByZW1vdmVkLiBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxM IHdpbGwgYmUgcmV0dXJuZWQuCj4gKyAqCj4gKyAqLwo+ICtzdHJ1Y3QgZGVudHJ5ICpkcm1mc19j cmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKPiArewo+ ICsJcmV0dXJuIF9fY3JlYXRlX2RpcihuYW1lLCBwYXJlbnQsICZzaW1wbGVfZGlyX2lub2RlX29w ZXJhdGlvbnMpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtZnNfY3JlYXRlX2Rpcik7Cj4gKwo+ ICtzdGF0aWMgaW50IF9fZHJtZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0 IGRlbnRyeSAqcGFyZW50KQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoc2ltcGxl X3Bvc2l0aXZlKGRlbnRyeSkpIHsKPiArCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7Cj4gKwkJCWRn ZXQoZGVudHJ5KTsKPiArCQkJc3dpdGNoIChkZW50cnktPmRfaW5vZGUtPmlfbW9kZSAmIFNfSUZN VCkgewo+ICsJCQljYXNlIFNfSUZESVI6Cj4gKwkJCQlyZXQgPSBzaW1wbGVfcm1kaXIocGFyZW50 LT5kX2lub2RlLCBkZW50cnkpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCWRlZmF1bHQ6Cj4gKwkJCQlz aW1wbGVfdW5saW5rKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKPiArCQkJCWJyZWFrOwo+ICsJ CQl9Cj4gKwkJCWlmICghcmV0KQo+ICsJCQkJZF9kZWxldGUoZGVudHJ5KTsKPiArCQkJZHB1dChk ZW50cnkpOwo+ICsJCX0KPiArCX0KPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKwo+ICsvKioK PiArICogZHJtZnNfcmVtb3ZlIC0gcmVtb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGZyb20gdGhl IGRybWZzIGZpbGVzeXN0ZW0KPiArICogQGRlbnRyeTogYSBwb2ludGVyIHRvIGEgdGhlIGRlbnRy eSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gYmUKPiArICogICAgICAgICAgcmVtb3ZlZC4K PiArICoKPiArICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgaW4g ZHJtZnMgdGhhdCB3YXMgcHJldmlvdXNseQo+ICsgKiBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIGFu b3RoZXIgZHJtZnMgZnVuY3Rpb24gKGxpa2UKPiArICogZHJtZnNfY3JlYXRlX2ZpbGUoKSBvciB2 YXJpYW50cyB0aGVyZW9mLikKPiArICovCj4gK3ZvaWQgZHJtZnNfcmVtb3ZlKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSkKPiArewo+ICsJc3RydWN0IGRlbnRyeSAqcGFyZW50Owo+ICsJaW50IHJldDsK PiArCj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZGVudHJ5KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ cGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKPiArCWlub2RlX2xvY2socGFyZW50LT5kX2lub2Rl KTsKPiArCXJldCA9IF9fZHJtZnNfcmVtb3ZlKGRlbnRyeSwgcGFyZW50KTsKPiArCWlub2RlX3Vu bG9jayhwYXJlbnQtPmRfaW5vZGUpOwo+ICsJaWYgKCFyZXQpCj4gKwkJc2ltcGxlX3JlbGVhc2Vf ZnMoJmRybWZzX21vdW50LCAmZHJtZnNfbW91bnRfY291bnQpOwo+ICt9Cj4gK0VYUE9SVF9TWU1C T0woZHJtZnNfcmVtb3ZlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1mc19yZW1vdmVfcmVjdXJzaXZl IC0gcmVjdXJzaXZlbHkgcmVtb3ZlcyBhIGRpcmVjdG9yeQo+ICsgKiBAZGVudHJ5OiBhIHBvaW50 ZXIgdG8gYSB0aGUgZGVudHJ5IG9mIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZC4KPiArICoK PiArICogVGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSByZW1vdmVzIGEgZGlyZWN0b3J5IHRyZWUg aW4gZHJtZnMgdGhhdAo+ICsgKiB3YXMgcHJldmlvdXNseSBjcmVhdGVkIHdpdGggYSBjYWxsIHRv IGFub3RoZXIgZHJtZnMgZnVuY3Rpb24KPiArICogKGxpa2UgZHJtZnNfY3JlYXRlX2ZpbGUoKSBv ciB2YXJpYW50cyB0aGVyZW9mLikKPiArICovCj4gK3ZvaWQgZHJtZnNfcmVtb3ZlX3JlY3Vyc2l2 ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCj4gK3sKPiArCXN0cnVjdCBkZW50cnkgKmNoaWxkLCAq cGFyZW50Owo+ICsKPiArCWlmIChJU19FUlJfT1JfTlVMTChkZW50cnkpKQo+ICsJCXJldHVybjsK PiArCj4gKwlwYXJlbnQgPSBkZW50cnk7Cj4gKyBkb3duOgo+ICsJaW5vZGVfbG9jayhwYXJlbnQt PmRfaW5vZGUpOwo+ICsgbG9vcDoKPiArCS8qCj4gKwkgKiBUaGUgcGFyZW50LT5kX3N1YmRpcnMg aXMgcHJvdGVjdGVkIGJ5IHRoZSBkX2xvY2suIE91dHNpZGUgdGhhdAo+ICsJICogbG9jaywgdGhl IGNoaWxkIGNhbiBiZSB1bmxpbmtlZCBhbmQgc2V0IHRvIGJlIGZyZWVkIHdoaWNoIGNhbgo+ICsJ ICogdXNlIHRoZSBkX3UuZF9jaGlsZCBhcyB0aGUgcmN1IGhlYWQgYW5kIGNvcnJ1cHQgdGhpcyBs aXN0Lgo+ICsJICovCj4gKwlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKPiArCWxpc3RfZm9y X2VhY2hfZW50cnkoY2hpbGQsICZwYXJlbnQtPmRfc3ViZGlycywgZF9jaGlsZCkgewo+ICsJCWlm ICghc2ltcGxlX3Bvc2l0aXZlKGNoaWxkKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIHBl cmhhcHMgc2ltcGxlX2VtcHR5KGNoaWxkKSBtYWtlcyBtb3JlIHNlbnNlICovCj4gKwkJaWYgKCFs aXN0X2VtcHR5KCZjaGlsZC0+ZF9zdWJkaXJzKSkgewo+ICsJCQlzcGluX3VubG9jaygmcGFyZW50 LT5kX2xvY2spOwo+ICsJCQlpbm9kZV91bmxvY2socGFyZW50LT5kX2lub2RlKTsKPiArCQkJcGFy ZW50ID0gY2hpbGQ7Cj4gKwkJCWdvdG8gZG93bjsKPiArCQl9Cj4gKwo+ICsJCXNwaW5fdW5sb2Nr KCZwYXJlbnQtPmRfbG9jayk7Cj4gKwo+ICsJCWlmICghX19kcm1mc19yZW1vdmUoY2hpbGQsIHBh cmVudCkpCj4gKwkJCXNpbXBsZV9yZWxlYXNlX2ZzKCZkcm1mc19tb3VudCwgJmRybWZzX21vdW50 X2NvdW50KTsKPiArCj4gKwkJLyoKPiArCQkgKiBUaGUgcGFyZW50LT5kX2xvY2sgcHJvdGVjdHMg YWdhaW5zdCBjaGlsZCBmcm9tIHVubGlua2luZwo+ICsJCSAqIGZyb20gZF9zdWJkaXJzLiBXaGVu IHJlbGVhc2luZyB0aGUgcGFyZW50LT5kX2xvY2sgd2UgY2FuCj4gKwkJICogbm8gbG9uZ2VyIHRy dXN0IHRoYXQgdGhlIG5leHQgcG9pbnRlciBpcyB2YWxpZC4KPiArCQkgKiBSZXN0YXJ0IHRoZSBs b29wLiBXZSdsbCBza2lwIHRoaXMgb25lIHdpdGggdGhlCj4gKwkJICogc2ltcGxlX3Bvc2l0aXZl KCkgY2hlY2suCj4gKwkJICovCj4gKwkJZ290byBsb29wOwo+ICsJfQo+ICsJc3Bpbl91bmxvY2so JnBhcmVudC0+ZF9sb2NrKTsKPiArCj4gKwlpbm9kZV91bmxvY2socGFyZW50LT5kX2lub2RlKTsK PiArCWNoaWxkID0gcGFyZW50Owo+ICsJcGFyZW50ID0gcGFyZW50LT5kX3BhcmVudDsKPiArCWlu b2RlX2xvY2socGFyZW50LT5kX2lub2RlKTsKPiArCj4gKwlpZiAoY2hpbGQgIT0gZGVudHJ5KQo+ ICsJCS8qIGdvIHVwICovCj4gKwkJZ290byBsb29wOwo+ICsKPiArCWlmICghX19kcm1mc19yZW1v dmUoY2hpbGQsIHBhcmVudCkpCj4gKwkJc2ltcGxlX3JlbGVhc2VfZnMoJmRybWZzX21vdW50LCAm ZHJtZnNfbW91bnRfY291bnQpOwo+ICsJaW5vZGVfdW5sb2NrKHBhcmVudC0+ZF9pbm9kZSk7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChkcm1mc19yZW1vdmVfcmVjdXJzaXZlKTsKPiArCj4gKy8qKgo+ ICsgKiBkcm1mc19pbml0aWFsaXplZCAtIFRlbGxzIHdoZXRoZXIgZHJtZnMgaGFzIGJlZW4gcmVn aXN0ZXJlZAo+ICsgKi8KPiArYm9vbCBkcm1mc19pbml0aWFsaXplZCh2b2lkKQo+ICt7Cj4gKwly ZXR1cm4gZHJtZnNfcmVnaXN0ZXJlZDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybWZzX2luaXRp YWxpemVkKTsKPiArCj4gK2ludCBkcm1mc19pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXR2YWw7 Cj4gKwo+ICsJcmV0dmFsID0gc3lzZnNfY3JlYXRlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCAi ZHJtIik7Cj4gKwlpZiAocmV0dmFsKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHZh bCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRybV9mc190eXBlKTsKPiArCWlmICghcmV0dmFsKQo+ ICsJCWRybWZzX3JlZ2lzdGVyZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiByZXR2YWw7Cj4gK30K PiArRVhQT1JUX1NZTUJPTChkcm1mc19pbml0KTsKPiArCj4gK2ludCBkcm1mc19maW5pKHZvaWQp Cj4gK3sKPiArCWludCByZXR2YWw7Cj4gKwo+ICsJcmV0dmFsID0gdW5yZWdpc3Rlcl9maWxlc3lz dGVtKCZkcm1fZnNfdHlwZSk7Cj4gKwlpZiAocmV0dmFsKQo+ICsJCXJldHVybiByZXR2YWw7Cj4g Kwo+ICsJZHJtZnNfcmVnaXN0ZXJlZCA9IGZhbHNlOwo+ICsKPiArCXN5c2ZzX3JlbW92ZV9tb3Vu dF9wb2ludChrZXJuZWxfa29iaiwgImRybSIpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtZnNf ZmluaSk7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHJtZnMuaCBiL2luY2x1ZGUvbGlu dXgvZHJtZnMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzA5MTQ4 MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2xpbnV4L2RybWZzLmgKPiBAQCAtMCww ICsxLDU2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+ICsg KiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqCVN3 YXRpIERoaW5ncmEgPHN3YXRpLmRoaW5ncmFAaW50ZWwuY29tPgo+ICsgKglTb3VyYWIgR3VwdGEg PHNvdXJhYi5ndXB0YUBpbnRlbC5jb20+Cj4gKyAqCUFrYXNoIEdvZWwgPGFrYXNoLmdvZWxAaW50 ZWwuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RSTUZTX0hfCj4gKyNkZWZpbmUgX0RSTUZT X0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9m aWxlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gK3N0cnVjdCBmaWxl X29wZXJhdGlvbnM7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RSTUZTCj4gKwo+ICtzdHJ1Y3QgZGVu dHJ5ICpkcm1mc19jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsCj4g KwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCj4gKwkJCQkgICBjb25z dCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKTsKPiArCj4gK3N0cnVjdCBkZW50cnkgKmRy bWZzX2NyZWF0ZV9kaXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqcGFyZW50KTsK PiArCj4gK3ZvaWQgZHJtZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Cj4gK3ZvaWQg ZHJtZnNfcmVtb3ZlX3JlY3Vyc2l2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwo+ICsKPiArYm9v bCBkcm1mc19pbml0aWFsaXplZCh2b2lkKTsKPiAraW50IGRybWZzX2luaXQodm9pZCk7Cj4gK2lu dCBkcm1mc19maW5pKHZvaWQpOwo+ICsKPiArI2VuZGlmIC8qIENPTkZJR19EUk1GUyAqLwo+ICsK PiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oIGIvaW5j bHVkZS91YXBpL2xpbnV4L21hZ2ljLmgKPiBpbmRleCA5YmQ1NTk0Li5lZjAxZWI3IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tYWdpYy5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2xp bnV4L21hZ2ljLmgKPiBAQCAtNjEsNiArNjEsOSBAQAo+ICAjZGVmaW5lIFNUQUNLX0VORF9NQUdJ QwkJMHg1N0FDNkU5RAo+ICAKPiAgI2RlZmluZSBUUkFDRUZTX01BR0lDICAgICAgICAgIDB4NzQ3 MjYxNjMKPiArI2RlZmluZSBEUk1GU19NQUdJQwkgICAgICAgMHg4NDcyNDE0MyAgICAgIC8qIHNv bWUgcmFuZG9tIG51bWJlci4KPiArCQkJCQkJKiBJcyB0aGVyZSBhIGJldHRlciB3YXk/Cj4gKwkJ CQkJCSovCj4gIAo+ICAjZGVmaW5lIFY5RlNfTUFHSUMJCTB4MDEwMjE5OTcKPiAgCj4gLS0gCj4g Mi43LjQKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngKCi0tIApNYXR0IFJvcGVyCkdyYXBoaWNzIFNvZnR3YXJlIEVuZ2luZWVyCklvVEcgUGxh dGZvcm0gRW5hYmxpbmcgJiBEZXZlbG9wbWVudApJbnRlbCBDb3Jwb3JhdGlvbgooOTE2KSAzNTYt Mjc5NQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK