From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Gix, Brian" To: "marcel@holtmann.org" CC: "johan.hedberg@gmail.com" , "linux-bluetooth@vger.kernel.org" , "Stotland, Inga" Subject: Re: [PATCH BlueZ v5 03/14] mesh: Infrastructure for Mesh daemon Date: Sun, 8 Jul 2018 15:05:49 +0000 Message-ID: <1531062347.7346.18.camel@intel.com> References: <20180706171306.13501-1-brian.gix@intel.com> <20180706171306.13501-4-brian.gix@intel.com> <62AEAA3E-B88E-4D53-A113-3680C1F86047@holtmann.org> In-Reply-To: <62AEAA3E-B88E-4D53-A113-3680C1F86047@holtmann.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 List-ID: SGkgTWFyY2VsLA0KDQpPbiBGcmksIDIwMTgtMDctMDYgYXQgMjA6MjAgKzAyMDAsIE1hcmNlbCBI b2x0bWFubiB3cm90ZToNCj4gSGkgQnJpYW4sDQo+IA0KPiA+IC0tLQ0KPiA+IG1lc2gvZGlzcGxh eS5jICAgICAgICAgfCAgNjcgKysrKysNCj4gPiBtZXNoL2hjaS5jICAgICAgICAgICAgIHwgNjk5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiBt ZXNoL21lc2gtaW8tZ2VuZXJpYy5jIHwgNjYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gPiBtZXNoL21lc2gtaW8uYyAgICAgICAgIHwgMTg3ICsrKysr KysrKysrKysNCj4gPiA0IGZpbGVzIGNoYW5nZWQsIDE2MTMgaW5zZXJ0aW9ucygrKQ0KPiA+IGNy ZWF0ZSBtb2RlIDEwMDY0NCBtZXNoL2Rpc3BsYXkuYw0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBt ZXNoL2hjaS5jDQo+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IG1lc2gvbWVzaC1pby1nZW5lcmljLmMN Cj4gPiBjcmVhdGUgbW9kZSAxMDA2NDQgbWVzaC9tZXNoLWlvLmMNCj4gPiANCj4gPiBkaWZmIC0t Z2l0IGEvbWVzaC9kaXNwbGF5LmMgYi9tZXNoL2Rpc3BsYXkuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwLi5hZGY5MmNhZTANCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvbWVzaC9kaXNwbGF5LmMNCj4gPiBAQCAtMCwwICsxLDY3IEBADQo+ID4gKy8q DQo+ID4gKyAqDQo+ID4gKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3Ig TGludXgNCj4gPiArICoNCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxOCAgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuKysrKw0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsg KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4g PiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V DQo+ID4gKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+ID4gKyNpbmNsdWRlIDx0ZXJtaW9zLmg+DQo+ID4gKyNp bmNsdWRlIDxzeXMvaW9jdGwuaD4NCj4gPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+DQo+ID4gKyNp bmNsdWRlIDxlbGwvZWxsLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiZGlzcGxheS5oIg0KPiA+ ICsNCj4gPiArI2RlZmluZSBsaWtlbHkoeCkgICBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQ0K PiA+ICsjZGVmaW5lIHVubGlrZWx5KHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApDQo+IA0K PiBJIGhpZ2hseSBkb3VidCB3ZSB3aWxsIG1ha2UgZ29vZCB1c2Ugb2YgbGlrZWx5IGFuZCB1bmxp a2VseS4gSnVzdCByZW1vdmUgdGhhdC4gV2UgY2FuIG1lYXN1cmUgdGhhdCBhdCBzb21lDQo+IHBv aW50LCBidXQgcmlnaHQgbm93IGl0IHNlZW1zIHVzZWxlc3MuIE9uIGEgc2lkZSBub3RlLCBJIGFt IG5vdCBjb252aW5jZWQgdGhhdCBvdXIgdXNhZ2UgaW4gRUxMIGlzIGFjdHVhbGx5DQo+IHdvcnRo IHdoaWxlIGRvaW5nLg0KDQpUaGlzIHdpbGwgYmUgcmVtb3ZlZCBmb3IgdjYgb2YgcGF0Y2gtc2V0 DQoNCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9udW1fY29sdW1u czsNCj4gPiArDQo+ID4gK3Vuc2lnbmVkIGludCBudW1fY29sdW1ucyh2b2lkKQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3Qgd2luc2l6ZSB3czsNCj4gPiArDQo+ID4gKwlpZiAobGlrZWx5KGNhY2hlZF9u dW1fY29sdW1ucyA+IDApKQ0KPiA+ICsJCXJldHVybiBjYWNoZWRfbnVtX2NvbHVtbnM7DQo+ID4g Kw0KPiA+ICsJaWYgKGlvY3RsKFNURE9VVF9GSUxFTk8sIFRJT0NHV0lOU1osICZ3cykgPCAwIHx8 IHdzLndzX2NvbCA9PSAwKQ0KPiA+ICsJCWNhY2hlZF9udW1fY29sdW1ucyA9IDgwOw0KPiA+ICsJ ZWxzZQ0KPiA+ICsJCWNhY2hlZF9udW1fY29sdW1ucyA9IHdzLndzX2NvbDsNCj4gPiArDQo+ID4g KwlyZXR1cm4gY2FjaGVkX251bV9jb2x1bW5zOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHBy aW50X3BhY2tldChjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgdm9pZCAqZGF0YSwgdWludDE2X3Qg c2l6ZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IHRpbWV2YWwgcGt0X3RpbWU7DQo+ID4gKw0KPiA+ ICsJZ2V0dGltZW9mZGF5KCZwa3RfdGltZSwgTlVMTCk7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUg PiAwKSB7DQo+ID4gKwkJY2hhciAqc3RyOw0KPiA+ICsNCj4gPiArCQlzdHIgPSBsX3V0aWxfaGV4 c3RyaW5nKGRhdGEsIHNpemUpOw0KPiA+ICsJCWxfaW5mbygiJTA1ZC4lMDNkICVzOiAlcyIsDQo+ ID4gKwkJCQkodWludDMyX3QpIHBrdF90aW1lLnR2X3NlYyAlIDEwMDAwMCwNCj4gPiArCQkJCSh1 aW50MzJfdCkgcGt0X3RpbWUudHZfdXNlYy8xMDAwLCBsYWJlbCwgc3RyKTsNCj4gPiArCQlsX2Zy ZWUoc3RyKTsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWxfaW5mbygiJTA1ZC4lMDNkICVzOiBlbXB0 eSIsDQo+ID4gKwkJCQkodWludDMyX3QpIHBrdF90aW1lLnR2X3NlYyAlIDEwMDAwMCwNCj4gPiAr CQkJCSh1aW50MzJfdCkgcGt0X3RpbWUudHZfdXNlYy8xMDAwLCBsYWJlbCk7DQo+ID4gK30NCj4g DQo+IEkgaGF2ZSBubyBpZGVhIHdoeSB3ZSBhcmUgbm90IHVzaW5nIHV0aWxfaGV4ZHVtcCgpIG9y IGxfdXRpbF9oZXhkdW1wKCkgc2luY2UgdGhleSBhcmUgaG9va2VkIHVwIHByb3Blcmx5IHdpdGgN Cj4gZGVidWcgZGVmaW5lcyBldGMuDQoNCmxfdXRpbF9oZXhkdW1wIGRvZXMgbm90IGNyZWF0ZSBz dHJpbmdzIGluIHRoZSBmb3JtYXQgd2UgbW9zdCB1c2UsIHdoaWNoIGlzIGEgZm9ybSB0aGF0IGNh biBiZSBmZWQgYmFjayBpbnRvDQpsX3V0aWxfZnJvbV9oZXhzdHJpbmcuIGxfdXRpbF9oZXhkdW1w IGFkZHMgd2hpdGVzcGFjZSBiZXR3ZWVuIGVhY2ggb2N0ZXQsIGFuZCBhc2NpaSBnb3JwIGF0IHRo ZSBlbmQgb2YgdGhlDQpsaW5lLCB3aGlsZSBsX3V0aWxfaGV4c3RyaW5nIHJldHVybnMgYSB0aWdo dGx5IHBhY2tlZCBvY3RldHMtdG8tYXNjaWloZXguDQoNCldlIGNhbiB0aGVuIHVzZSB0aGUgb3V0 cHV0IGZyb20gdGhpcyBmdW5jdGlvbiB0byBjb3B5L3Bhc3RlIHN0cmluZ3MgYmV0d2VlbiBpbnN0 YW5jZXMgZm9yIGV4YW1wbGUgdG86DQoxLiBzaW11bGF0ZSAiT3V0IE9mIEJhbmQiIHB1YmxpYyBh bmQgc3RhdGljIGtleSBleGNoYW5nZQ0KMi4gdHJhZGUgdmlhIGVtYWlsIGxvbmcgYXNjaWktaGV4 IHN0cmluZ3MgdG8gSU9QIGFuZCBVUEYgcGFydG5lcnMNCjMuIHBhc3RlIHJlcGVhdGVkIG92ZXIt dGhlLWFpciBwYWNrZXRzIHRvIHJlcGVhdCBleGFjdCB0ZXN0IHJ1bnMgd2l0aG91dCBwcmVjb25k aXRpb25pbmcgc2VxdWVuY2UgbnVtYmVycyBhbmQNCklWIEluZGV4cyBldGMuDQoNCklmIHlvdSBs aWtlLCBJIGNhbiByZXdvcmsgdGhpcyB0byB1c2UgbF9kZWJ1ZywgYnV0IHRoZSBjdXJyZW50IG91 dHB1dCBmb3JtYXQgb2YgdGhlIGRhdGEgaXMgbW9yZSB1c2VmdWwgaW4gdGhpcw0KZm9ybSwgdGhh biBpdCBpcyBpbiBoZXhkdW1wIGZvcm1hdC4NCg0KDQo+ID4gZGlmZiAtLWdpdCBhL21lc2gvaGNp LmMgYi9tZXNoL2hjaS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAw MDAwMDAuLmRhNjgzOGE1NQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9tZXNoL2hjaS5j DQo+ID4gQEAgLTAsMCArMSw2OTkgQEANCj4gPiArLyoNCj4gPiArICoNCj4gPiArICogIEJsdWVa IC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eA0KPiA+ICsgKg0KPiA+ICsgKiAg Q29weXJpZ2h0IChDKSAyMDE4ICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCj4gPiArICoNCj4gPiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gPiArICogIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gPiArICog IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcg0KPiA+ICsgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ID4gKyAqDQo+ID4gKyAqICBUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gPiAr ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mDQo+ID4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KPiA+ICsgKiAgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0K PiA+ICsjaWZkZWYgSEFWRV9DT05GSUdfSA0KPiA+ICsjaW5jbHVkZSA8Y29uZmlnLmg+DQo+ID4g KyNlbmRpZg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiA+ICsjaW5jbHVkZSA8 c3RkbGliLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMvdWlvLmg+DQo+ID4gKyNpbmNsdWRlIDxzeXMv c29ja2V0Lmg+DQo+ID4gKyNpbmNsdWRlIDxlbGwvZWxsLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVk ZSAibW9uaXRvci9idC5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvaGNpLmgiDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIEJUUFJPVE9fSENJCTENCj4gPiArc3RydWN0IHNvY2thZGRyX2hjaSB7 DQo+ID4gKwlzYV9mYW1pbHlfdAloY2lfZmFtaWx5Ow0KPiA+ICsJdW5zaWduZWQgc2hvcnQJaGNp X2RldjsNCj4gPiArCXVuc2lnbmVkIHNob3J0ICBoY2lfY2hhbm5lbDsNCj4gPiArfTsNCj4gPiAr I2RlZmluZSBIQ0lfQ0hBTk5FTF9VU0VSCTENCj4gPiArDQo+ID4gK3N0cnVjdCBidF9oY2kgew0K PiA+ICsJaW50IHJlZl9jb3VudDsNCj4gPiArCXN0cnVjdCBsX2lvICppbzsNCj4gPiArCWJvb2wg aXNfc3RyZWFtOw0KPiA+ICsJYm9vbCB3cml0ZXJfYWN0aXZlOw0KPiA+ICsJdWludDhfdCBudW1f Y21kczsNCj4gPiArCXVpbnQ4X3QgbnVtX3BrdHM7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbmV4dF9j bWRfaWQ7DQo+ID4gKwl1bnNpZ25lZCBpbnQgbmV4dF9ldnRfaWQ7DQo+ID4gKwlzdHJ1Y3QgbF9x dWV1ZSAqY21kX3F1ZXVlOw0KPiA+ICsJc3RydWN0IGxfcXVldWUgKnJzcF9xdWV1ZTsNCj4gPiAr CXN0cnVjdCBsX3F1ZXVlICpldnRfbGlzdDsNCj4gPiArCXN0cnVjdCBsX3F1ZXVlICpwa3RfcXVl dWU7DQo+ID4gKwlidF9oY2lfcmVjZWl2ZV9mdW5jX3QgcmVjZWl2ZV9jYWxsYmFjazsNCj4gPiAr CWJ0X2hjaV9kZXN0cm95X2Z1bmNfdCByZWNlaXZlX2Rlc3Ryb3k7DQo+ID4gKwl2b2lkICpyZWNl aXZlX2RhdGE7DQo+ID4gK307DQo+IA0KPiBXaGF0IGlzIHdyb25nIHdpdGggc3JjL3NoYXJlZC9o Y2kuW2NoXSBpbnN0ZWFkIGhhdmluZyBhIGNvcHkgaGVyZT8NCg0KVGhlIG1haW4gYmFycmllciB0 byB0aGlzIGlzIHRoYXQgdGhlIHNyYy9zaGFyZWQvaGNpLltjaF0gdXNlcyBnbGliIGNvbnZlbnRp b25zLCBhbmQgdGhlIG1lc2ggdmVyc2lvbnMgdXNlIEVMTC4NCkkgYWdyZWUgdGhhdCB0aGVzZSBz aG91bGQgYmUgYSBzaW5nbGUgaGNpLltjaF0sIGJ1dCBpdCBtYXkgbmVlZCB0byB3YWl0IHVudGls IHRoZSByZXN0IG9mIGJsdWV6IGlzIHRyYW5zaXRpb25lZA0KdG8gRUxMLg0KDQpJIGNhbiBhZGQg YSAvKiBUT0RPICovIHRvIHRoZSBtZXNoIHZlcnNpb24gdG8gZW5zdXJlIHRoYXQgdGhpcyBpcyBl dmVudHVhbGx5IGFkZHJlc3NlZCAoPykuDQogDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY21kIHsNCj4g PiArCXVuc2lnbmVkIGludCBpZDsNCj4gPiArCXVpbnQxNl90IG9wY29kZTsNCj4gPiArCXZvaWQg KmRhdGE7DQo+ID4gKwl1aW50OF90IHNpemU7DQo+ID4gKwlidF9oY2lfY2FsbGJhY2tfZnVuY190 IGNhbGxiYWNrOw0KPiA+ICsJYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3k7DQo+ID4gKwl2 b2lkICp1c2VyX2RhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgZXZ0IHsNCj4gPiAr CXVuc2lnbmVkIGludCBpZDsNCj4gPiArCXVpbnQ4X3QgZXZlbnQ7DQo+ID4gKwlidF9oY2lfY2Fs bGJhY2tfZnVuY190IGNhbGxiYWNrOw0KPiA+ICsJYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ry b3k7DQo+ID4gKwl2b2lkICp1c2VyX2RhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg cGt0IHsNCj4gPiArCXVpbnQxNl90IGhhbmRsZTsNCj4gPiArCXVpbnQ4X3QgZmxhZ3M7DQo+ID4g Kwl2b2lkICpkYXRhOw0KPiA+ICsJdWludDE2X3Qgc2l6ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIGNtZF9mcmVlKHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBj bWQgKmNtZCA9IGRhdGE7DQo+ID4gKw0KPiA+ICsJaWYgKGNtZC0+ZGVzdHJveSkNCj4gPiArCQlj bWQtPmRlc3Ryb3koY21kLT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWxfZnJlZShjbWQtPmRh dGEpOw0KPiA+ICsJbF9mcmVlKGNtZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IGV2dF9mcmVlKHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBldnQgKmV2dCA9IGRh dGE7DQo+ID4gKw0KPiA+ICsJaWYgKGV2dC0+ZGVzdHJveSkNCj4gPiArCQlldnQtPmRlc3Ryb3ko ZXZ0LT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWxfZnJlZShldnQpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBwa3RfZnJlZSh2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgcGt0ICpwa3QgPSBkYXRhOw0KPiA+ICsNCj4gPiArCWxfZnJlZShwa3QtPmRhdGEpOw0K PiA+ICsJbF9mcmVlKHBrdCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNlbmRf Y29tbWFuZChzdHJ1Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90IG9wY29kZSwNCj4gPiArCQkJCQkJ dm9pZCAqZGF0YSwgdWludDhfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl1aW50OF90IHR5cGUgPSBC VF9INF9DTURfUEtUOw0KPiA+ICsJc3RydWN0IGJ0X2hjaV9jbWRfaGRyIGhkcjsNCj4gPiArCXN0 cnVjdCBpb3ZlYyBpb3ZbM107DQo+ID4gKwlpbnQgZmQsIGlvdmNudDsNCj4gPiArDQo+ID4gKwlo ZHIub3Bjb2RlID0gTF9DUFVfVE9fTEUxNihvcGNvZGUpOw0KPiA+ICsJaGRyLnBsZW4gPSBzaXpl Ow0KPiA+ICsNCj4gPiArCWlvdlswXS5pb3ZfYmFzZSA9ICZ0eXBlOw0KPiA+ICsJaW92WzBdLmlv dl9sZW4gID0gMTsNCj4gPiArCWlvdlsxXS5pb3ZfYmFzZSA9ICZoZHI7DQo+ID4gKwlpb3ZbMV0u aW92X2xlbiAgPSBzaXplb2YoaGRyKTsNCj4gPiArDQo+ID4gKwlpZiAoc2l6ZSA+IDApIHsNCj4g PiArCQlpb3ZbMl0uaW92X2Jhc2UgPSBkYXRhOw0KPiA+ICsJCWlvdlsyXS5pb3ZfbGVuICA9IHNp emU7DQo+ID4gKwkJaW92Y250ID0gMzsNCj4gPiArCX0gZWxzZQ0KPiA+ICsJCWlvdmNudCA9IDI7 DQo+ID4gKw0KPiA+ICsJZmQgPSBsX2lvX2dldF9mZChoY2ktPmlvKTsNCj4gPiArCWlmIChmZCA8 IDApIHsNCj4gPiArCQlsX2Vycm9yKCJoY2ktPmlvIEJhZCIpOw0KPiA+ICsJCXJldHVybjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlpZiAod3JpdGV2KGZkLCBpb3YsIGlvdmNudCkgPCAwKSB7DQo+ ID4gKwkJbF9lcnJvcigid3JpdGV2IEJhZCIpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwloY2ktPm51bV9jbWRzLS07DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIHNlbmRfcGFja2V0KHN0cnVjdCBidF9oY2kgKmhjaSwgdWludDE2X3QgaGFuZGxlLCB1aW50 OF90IGZsYWdzLA0KPiA+ICsJCQkJCQl2b2lkICpkYXRhLCB1aW50OF90IHNpemUpDQo+ID4gK3sN Cj4gPiArCXVpbnQ4X3QgdHlwZSA9IEJUX0g0X0FDTF9QS1Q7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNp X2FjbF9oZHIgaGRyOw0KPiA+ICsJc3RydWN0IGlvdmVjIGlvdlszXTsNCj4gPiArCWludCBmZCwg aW92Y250Ow0KPiA+ICsNCj4gPiArCWhkci5oYW5kbGUgPSBMX0NQVV9UT19MRTE2KGZsYWdzIDw8 IDEyIHwgaGFuZGxlKTsNCj4gPiArCWhkci5kbGVuID0gTF9DUFVfVE9fTEUxNihzaXplKTsNCj4g PiArDQo+ID4gKwlpb3ZbMF0uaW92X2Jhc2UgPSAmdHlwZTsNCj4gPiArCWlvdlswXS5pb3ZfbGVu ICA9IDE7DQo+ID4gKwlpb3ZbMV0uaW92X2Jhc2UgPSAmaGRyOw0KPiA+ICsJaW92WzFdLmlvdl9s ZW4gID0gc2l6ZW9mKGhkcik7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUgPiAwKSB7DQo+ID4gKwkJ aW92WzJdLmlvdl9iYXNlID0gZGF0YTsNCj4gPiArCQlpb3ZbMl0uaW92X2xlbiAgPSBzaXplOw0K PiA+ICsJCWlvdmNudCA9IDM7DQo+ID4gKwl9IGVsc2UNCj4gPiArCQlpb3ZjbnQgPSAyOw0KPiA+ ICsNCj4gPiArCWZkID0gbF9pb19nZXRfZmQoaGNpLT5pbyk7DQo+ID4gKwlpZiAoZmQgPCAwKSB7 DQo+ID4gKwkJbF9lcnJvcigiaGNpLT5pbyBCYWQiKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJaWYgKHdyaXRldihmZCwgaW92LCBpb3ZjbnQpIDwgMCkgew0KPiA+ICsJ CWxfZXJyb3IoIndyaXRldiBCYWQiKTsNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaGNpLT5udW1fcGt0cy0tOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBp b193cml0ZV9jYWxsYmFjayhzdHJ1Y3QgbF9pbyAqaW8sIHZvaWQgKnVzZXJfZGF0YSkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGJ0X2hjaSAqaGNpID0gdXNlcl9kYXRhOw0KPiA+ICsJc3RydWN0IGNt ZCAqY21kOw0KPiA+ICsNCj4gPiArCWlmIChoY2ktPm51bV9jbWRzID4gMCkNCj4gPiArCQljbWQg PSBsX3F1ZXVlX3BvcF9oZWFkKGhjaS0+Y21kX3F1ZXVlKTsNCj4gPiArCWVsc2UNCj4gPiArCQlj bWQgPSBOVUxMOw0KPiA+ICsNCj4gPiArCWlmIChjbWQpIHsNCj4gPiArCQlzZW5kX2NvbW1hbmQo aGNpLCBjbWQtPm9wY29kZSwgY21kLT5kYXRhLCBjbWQtPnNpemUpOw0KPiA+ICsJCWxfcXVldWVf cHVzaF90YWlsKGhjaS0+cnNwX3F1ZXVlLCBjbWQpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlz dHJ1Y3QgcGt0ICpwa3Q7DQo+ID4gKw0KPiA+ICsJCWlmIChoY2ktPm51bV9wa3RzIDwgMSkNCj4g PiArCQkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCQlwa3QgPSBsX3F1ZXVlX3BvcF9oZWFkKGhj aS0+cGt0X3F1ZXVlKTsNCj4gPiArCQlpZiAocGt0KSB7DQo+ID4gKwkJCXNlbmRfcGFja2V0KGhj aSwgcGt0LT5oYW5kbGUsIHBrdC0+ZmxhZ3MsDQo+ID4gKwkJCQkJCQlwa3QtPmRhdGEsIHBrdC0+ c2l6ZSk7DQo+ID4gKwkJCXBrdF9mcmVlKHBrdCk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmICghbF9xdWV1ZV9pc2VtcHR5KGhjaS0+cGt0X3F1ZXVlKSkNCj4gPiArCQlyZXR1 cm4gdHJ1ZTsNCj4gPiArDQo+ID4gK2RvbmU6DQo+ID4gKwloY2ktPndyaXRlcl9hY3RpdmUgPSBm YWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIHdha2V1cF93cml0ZXIoc3RydWN0IGJ0X2hjaSAqaGNpKQ0KPiA+ICt7DQo+ID4g KwlpZiAoaGNpLT53cml0ZXJfYWN0aXZlKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlp ZiAobF9xdWV1ZV9pc2VtcHR5KGhjaS0+Y21kX3F1ZXVlKSAmJiBsX3F1ZXVlX2lzZW1wdHkoaGNp LT5wa3RfcXVldWUpKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoIWxfaW9fc2V0 X3dyaXRlX2hhbmRsZXIoaGNpLT5pbywgaW9fd3JpdGVfY2FsbGJhY2ssIGhjaSwgTlVMTCkpDQo+ ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWhjaS0+d3JpdGVyX2FjdGl2ZSA9IHRydWU7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIG1hdGNoX2NtZF9vcGNvZGUoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IGNtZCAqY21k ID0gYTsNCj4gPiArCXVpbnQxNl90IG9wY29kZSA9IExfUFRSX1RPX1VJTlQoYik7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIGNtZC0+b3Bjb2RlID09IG9wY29kZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgcHJvY2Vzc19yZXNwb25zZShzdHJ1Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90 IG9wY29kZSwNCj4gPiArCQkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGNtZCAqY21kOw0KPiA+ICsNCj4gPiArCWlmIChvcGNvZGUgPT0gQlRf SENJX0NNRF9OT1ApDQo+ID4gKwkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCWNtZCA9IGxfcXVl dWVfcmVtb3ZlX2lmKGhjaS0+cnNwX3F1ZXVlLCBtYXRjaF9jbWRfb3Bjb2RlLA0KPiA+ICsJCQkJ CQlMX1VJTlRfVE9fUFRSKG9wY29kZSkpOw0KPiA+ICsJaWYgKCFjbWQpDQo+ID4gKwkJZ290byBk b25lOw0KPiA+ICsNCj4gPiArCWlmIChjbWQtPmNhbGxiYWNrKQ0KPiA+ICsJCWNtZC0+Y2FsbGJh Y2soZGF0YSwgc2l6ZSwgY21kLT51c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCWNtZF9mcmVlKGNt ZCk7DQo+ID4gKw0KPiA+ICtkb25lOg0KPiA+ICsJd2FrZXVwX3dyaXRlcihoY2kpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwcm9jZXNzX25vdGlmeSh2b2lkICpkYXRhLCB2b2lk ICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lfZXZ0X2hkciAqaGRyID0g dXNlcl9kYXRhOw0KPiA+ICsJc3RydWN0IGV2dCAqZXZ0ID0gZGF0YTsNCj4gPiArDQo+ID4gKwlp ZiAoZXZ0LT5ldmVudCA9PSBoZHItPmV2dCkNCj4gPiArCQlldnQtPmNhbGxiYWNrKHVzZXJfZGF0 YSArIHNpemVvZihzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIpLA0KPiA+ICsJCQkJCQloZHItPnBsZW4s IGV2dC0+dXNlcl9kYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHJvY2Vz c19ldmVudChzdHJ1Y3QgYnRfaGNpICpoY2ksIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXpl KQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIgKmhkciA9IGRhdGE7 DQo+ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9jbWRfY29tcGxldGUgKmNjOw0KPiA+ICsJ Y29uc3Qgc3RydWN0IGJ0X2hjaV9ldnRfY21kX3N0YXR1cyAqY3M7DQo+ID4gKwljb25zdCBzdHJ1 Y3QgYnRfaGNpX2V2dF9udW1fY29tcGxldGVkX3BhY2tldHMgKmNwOw0KPiA+ICsNCj4gPiArCWlm IChzaXplIDwgc2l6ZW9mKHN0cnVjdCBidF9oY2lfZXZ0X2hkcikpDQo+ID4gKwkJcmV0dXJuOw0K PiA+ICsNCj4gPiArCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBidF9oY2lfZXZ0X2hkcik7DQo+ID4g KwlzaXplIC09IHNpemVvZihzdHJ1Y3QgYnRfaGNpX2V2dF9oZHIpOw0KPiA+ICsNCj4gPiArCWlm IChoZHItPnBsZW4gIT0gc2l6ZSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJc3dpdGNo IChoZHItPmV2dCkgew0KPiA+ICsJY2FzZSBCVF9IQ0lfRVZUX0NNRF9DT01QTEVURToNCj4gPiAr CQlpZiAoc2l6ZSA8IHNpemVvZigqY2MpKQ0KPiA+ICsJCQlyZXR1cm47DQo+ID4gKwkJY2MgPSBk YXRhOw0KPiA+ICsJCWhjaS0+bnVtX2NtZHMgPSBjYy0+bmNtZDsNCj4gPiArCQlwcm9jZXNzX3Jl c3BvbnNlKGhjaSwgTF9MRTE2X1RPX0NQVShjYy0+b3Bjb2RlKSwNCj4gPiArCQkJCQkJZGF0YSAr IHNpemVvZigqY2MpLA0KPiA+ICsJCQkJCQlzaXplIC0gc2l6ZW9mKCpjYykpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgQlRfSENJX0VWVF9DTURfU1RBVFVTOg0KPiA+ICsJCWlm IChzaXplIDwgc2l6ZW9mKCpjcykpDQo+ID4gKwkJCXJldHVybjsNCj4gPiArCQljcyA9IGRhdGE7 DQo+ID4gKwkJaGNpLT5udW1fY21kcyA9IGNzLT5uY21kOw0KPiA+ICsJCXByb2Nlc3NfcmVzcG9u c2UoaGNpLCBMX0xFMTZfVE9fQ1BVKGNzLT5vcGNvZGUpLA0KPiA+ICsJCQkJCQkJJmNzLT5zdGF0 dXMsIDEpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgQlRfSENJX0VWVF9OVU1f Q09NUExFVEVEX1BBQ0tFVFM6DQo+ID4gKwkJaWYgKHNpemUgPCBzaXplb2YoKmNwKSkNCj4gPiAr CQkJcmV0dXJuOw0KPiA+ICsJCWNwID0gZGF0YTsNCj4gPiArCQlsX2RlYnVnKCJCVF9IQ0lfRVZU X05VTV9DT01QTEVURURfUEFDS0VUUzolZCIsIGNwLT5jb3VudCk7DQo+ID4gKwkJLyogSWdub3Jp bmcgaGFuZGxlIGluZm9ybWF0aW9uIGZvciBub3cgKi8NCj4gPiArCQloY2ktPm51bV9wa3RzID0g Y3AtPmNvdW50Ow0KPiA+ICsJCXdha2V1cF93cml0ZXIoaGNpKTsNCj4gPiArCQlicmVhazsNCj4g PiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCWxfcXVldWVfZm9yZWFjaChoY2ktPmV2dF9saXN0 LCBwcm9jZXNzX25vdGlmeSwgKHZvaWQgKikgaGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHJvY2Vzc19hY2woc3RydWN0IGJ0X2hj aSAqaGNpLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkNCj4gPiArew0KPiA+ICsJY29u c3Qgc3RydWN0IGJ0X2hjaV9hY2xfaGRyICpoZHIgPSBkYXRhOw0KPiA+ICsJdWludDE2X3QgaGFu ZGxlOw0KPiA+ICsNCj4gPiArCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBidF9oY2lfYWNsX2hk cikpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBi dF9oY2lfYWNsX2hkcik7DQo+ID4gKwlzaXplIC09IHNpemVvZihzdHJ1Y3QgYnRfaGNpX2FjbF9o ZHIpOw0KPiA+ICsNCj4gPiArCWlmIChMX0xFMTZfVE9fQ1BVKGhkci0+ZGxlbikgIT0gc2l6ZSkN Cj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaGFuZGxlID0gTF9MRTE2X1RPX0NQVShoZHIt PmhhbmRsZSk7DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+cmVjZWl2ZV9jYWxsYmFjaykNCj4gPiAr CQloY2ktPnJlY2VpdmVfY2FsbGJhY2soaGFuZGxlICYgMHgwZmZmLCBoYW5kbGUgPj4gMTIsDQo+ ID4gKwkJCQkJZGF0YSwgc2l6ZSwgaGNpLT5yZWNlaXZlX2RhdGEpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgYm9vbCBpb19yZWFkX2NhbGxiYWNrKHN0cnVjdCBsX2lvICppbywgdm9pZCAq dXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpICpoY2kgPSB1c2VyX2RhdGE7 DQo+ID4gKwl1aW50OF90IGJ1Zls1MTJdOw0KPiA+ICsJc3NpemVfdCBsZW47DQo+ID4gKwlpbnQg ZmQ7DQo+ID4gKw0KPiA+ICsJZmQgPSBsX2lvX2dldF9mZChoY2ktPmlvKTsNCj4gPiArCWlmIChm ZCA8IDApDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmIChoY2ktPmlzX3N0 cmVhbSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJbGVuID0gcmVhZChmZCwg YnVmLCBzaXplb2YoYnVmKSk7DQo+ID4gKwlpZiAobGVuIDwgMCkNCj4gPiArCQlyZXR1cm4gZmFs c2U7DQo+ID4gKw0KPiA+ICsJaWYgKGxlbiA8IDEpDQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4g Kw0KPiA+ICsJc3dpdGNoIChidWZbMF0pIHsNCj4gPiArCWNhc2UgQlRfSDRfRVZUX1BLVDoNCj4g PiArCQlwcm9jZXNzX2V2ZW50KGhjaSwgYnVmICsgMSwgbGVuIC0gMSk7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwljYXNlIEJUX0g0X0FDTF9QS1Q6DQo+ID4gKwkJcHJvY2Vzc19hY2woaGNpLCBidWYg KyAxLCBsZW4gLSAxKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJbF9p bmZvKCIlMi4yeC1SWGVkIiwgYnVmWzBdKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g dHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBidF9oY2kgKmNyZWF0ZV9o Y2koaW50IGZkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpICpoY2k7DQo+ID4gKw0KPiA+ ICsJaWYgKGZkIDwgMCkNCj4gPiArCQlyZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKwloY2kgPSBs X25ldyhzdHJ1Y3QgYnRfaGNpLCAxKTsNCj4gPiArDQo+ID4gKwloY2ktPmlvID0gbF9pb19uZXco ZmQpOw0KPiA+ICsNCj4gPiArCWhjaS0+aXNfc3RyZWFtID0gdHJ1ZTsNCj4gPiArCWhjaS0+d3Jp dGVyX2FjdGl2ZSA9IGZhbHNlOw0KPiA+ICsJaGNpLT5udW1fY21kcyA9IDE7DQo+ID4gKwloY2kt Pm51bV9wa3RzID0gMTsNCj4gPiArCWhjaS0+bmV4dF9jbWRfaWQgPSAxOw0KPiA+ICsJaGNpLT5u ZXh0X2V2dF9pZCA9IDE7DQo+ID4gKw0KPiA+ICsJaGNpLT5jbWRfcXVldWUgPSBsX3F1ZXVlX25l dygpOw0KPiA+ICsJaGNpLT5yc3BfcXVldWUgPSBsX3F1ZXVlX25ldygpOw0KPiA+ICsJaGNpLT5l dnRfbGlzdCA9IGxfcXVldWVfbmV3KCk7DQo+ID4gKwloY2ktPnBrdF9xdWV1ZSA9IGxfcXVldWVf bmV3KCk7DQo+ID4gKw0KPiA+ICsJaWYgKCFsX2lvX3NldF9yZWFkX2hhbmRsZXIoaGNpLT5pbywg aW9fcmVhZF9jYWxsYmFjaywgaGNpLCBOVUxMKSkgew0KPiA+ICsJCWxfcXVldWVfZGVzdHJveSho Y2ktPnBrdF9xdWV1ZSwgTlVMTCk7DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGhjaS0+ZXZ0X2xp c3QsIE5VTEwpOw0KPiA+ICsJCWxfcXVldWVfZGVzdHJveShoY2ktPnJzcF9xdWV1ZSwgTlVMTCk7 DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGhjaS0+Y21kX3F1ZXVlLCBOVUxMKTsNCj4gPiArCQls X2lvX2Rlc3Ryb3koaGNpLT5pbyk7DQo+ID4gKwkJbF9mcmVlKGhjaSk7DQo+ID4gKwkJcmV0dXJu IE5VTEw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGJ0X2hjaV9yZWYoaGNpKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IGJ0X2hjaSAqYnRfaGNpX25ldyhpbnQgZmQpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBidF9oY2kgKmhjaTsNCj4gPiArDQo+ID4gKwloY2kgPSBjcmVhdGVf aGNpKGZkKTsNCj4gPiArCWlmICghaGNpKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsNCj4g PiArCXJldHVybiBoY2k7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY3JlYXRlX3Nv Y2tldCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgY2hhbm5lbCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IHNvY2thZGRyX2hjaSBhZGRyOw0KPiA+ICsJaW50IGZkOw0KPiA+ICsNCj4gPiArCWZkID0g c29ja2V0KFBGX0JMVUVUT09USCwgU09DS19SQVcgfCBTT0NLX0NMT0VYRUMgfCBTT0NLX05PTkJM T0NLLA0KPiA+ICsJCQkJCQkJCUJUUFJPVE9fSENJKTsNCj4gPiArCWlmIChmZCA8IDApDQo+ID4g KwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIp KTsNCj4gPiArCWFkZHIuaGNpX2ZhbWlseSA9IEFGX0JMVUVUT09USDsNCj4gPiArCWFkZHIuaGNp X2RldiA9IGluZGV4Ow0KPiA+ICsJYWRkci5oY2lfY2hhbm5lbCA9IGNoYW5uZWw7DQo+ID4gKw0K PiA+ICsJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRy KSkgPCAwKSB7DQo+ID4gKwkJY2xvc2UoZmQpOw0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlyZXR1cm4gZmQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCBidF9o Y2kgKmJ0X2hjaV9uZXdfdXNlcl9jaGFubmVsKHVpbnQxNl90IGluZGV4KQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgYnRfaGNpICpoY2k7DQo+ID4gKwlpbnQgZmQ7DQo+ID4gKw0KPiA+ICsJZmQgPSBj cmVhdGVfc29ja2V0KGluZGV4LCBIQ0lfQ0hBTk5FTF9VU0VSKTsNCj4gPiArCWlmIChmZCA8IDAp DQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJaGNpID0gY3JlYXRlX2hjaShmZCk7 DQo+ID4gKwlpZiAoIWhjaSkgew0KPiA+ICsJCWNsb3NlKGZkKTsNCj4gPiArCQlyZXR1cm4gTlVM TDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwloY2ktPmlzX3N0cmVhbSA9IGZhbHNlOw0KPiA+ICsN Cj4gPiArCWJ0X2hjaV9zZXRfY2xvc2Vfb25fdW5yZWYoaGNpLCB0cnVlKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gaGNpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYnRfaGNpICpidF9oY2lf cmVmKHN0cnVjdCBidF9oY2kgKmhjaSkNCj4gPiArew0KPiA+ICsJaWYgKCFoY2kpDQo+ID4gKwkJ cmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmhjaS0+cmVm X2NvdW50LCAxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaGNpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICt2b2lkIGJ0X2hjaV91bnJlZihzdHJ1Y3QgYnRfaGNpICpoY2kpDQo+ID4gK3sNCj4gPiArCWlm ICghaGNpKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlpZiAoX19zeW5jX3N1Yl9hbmRf ZmV0Y2goJmhjaS0+cmVmX2NvdW50LCAxKSkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJ aWYgKGhjaS0+cmVjZWl2ZV9kZXN0cm95KQ0KPiA+ICsJCWhjaS0+cmVjZWl2ZV9kZXN0cm95KGhj aS0+cmVjZWl2ZV9kYXRhKTsNCj4gPiArDQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3koaGNpLT5wa3Rf cXVldWUsIHBrdF9mcmVlKTsNCj4gPiArCWxfcXVldWVfZGVzdHJveShoY2ktPmV2dF9saXN0LCBl dnRfZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3koaGNpLT5jbWRfcXVldWUsIGNtZF9mcmVl KTsNCj4gPiArCWxfcXVldWVfZGVzdHJveShoY2ktPnJzcF9xdWV1ZSwgY21kX2ZyZWUpOw0KPiA+ ICsNCj4gPiArCWxfaW9fZGVzdHJveShoY2ktPmlvKTsNCj4gPiArDQo+ID4gKwlsX2ZyZWUoaGNp KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBidF9oY2lfc2V0X2Nsb3NlX29uX3VucmVmKHN0 cnVjdCBidF9oY2kgKmhjaSwgYm9vbCBkb19jbG9zZSkNCj4gPiArew0KPiA+ICsJaWYgKCFoY2kp DQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXJldHVybiBsX2lvX3NldF9jbG9z ZV9vbl9kZXN0cm95KGhjaS0+aW8sIGRvX2Nsb3NlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdW5z aWduZWQgaW50IGJ0X2hjaV9zZW5kKHN0cnVjdCBidF9oY2kgKmhjaSwgdWludDE2X3Qgb3Bjb2Rl LA0KPiA+ICsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgdWludDhfdCBzaXplLA0KPiA+ICsJCQkJYnRf aGNpX2NhbGxiYWNrX2Z1bmNfdCBjYWxsYmFjaywNCj4gPiArCQkJCXZvaWQgKnVzZXJfZGF0YSwg YnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjbWQg KmNtZDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ ID4gKwljbWQgPSBsX25ldyhzdHJ1Y3QgY21kLCAxKTsNCj4gPiArDQo+ID4gKwljbWQtPm9wY29k ZSA9IG9wY29kZTsNCj4gPiArCWNtZC0+c2l6ZSA9IHNpemU7DQo+ID4gKw0KPiA+ICsJaWYgKGNt ZC0+c2l6ZSA+IDApDQo+ID4gKwkJY21kLT5kYXRhID0gbF9tZW1kdXAoZGF0YSwgY21kLT5zaXpl KTsNCj4gPiArDQo+ID4gKwlpZiAoaGNpLT5uZXh0X2NtZF9pZCA8IDEpDQo+ID4gKwkJaGNpLT5u ZXh0X2NtZF9pZCA9IDE7DQo+ID4gKw0KPiA+ICsJY21kLT5pZCA9IGhjaS0+bmV4dF9jbWRfaWQr KzsNCj4gPiArDQo+ID4gKwljbWQtPmNhbGxiYWNrID0gY2FsbGJhY2s7DQo+ID4gKwljbWQtPmRl c3Ryb3kgPSBkZXN0cm95Ow0KPiA+ICsJY21kLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7DQo+ID4g Kw0KPiA+ICsJaWYgKCFsX3F1ZXVlX3B1c2hfdGFpbChoY2ktPmNtZF9xdWV1ZSwgY21kKSkgew0K PiA+ICsJCWxfZnJlZShjbWQtPmRhdGEpOw0KPiA+ICsJCWxfZnJlZShjbWQpOw0KPiA+ICsJCXJl dHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXdha2V1cF93cml0ZXIoaGNpKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gY21kLT5pZDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wg bWF0Y2hfY21kX2lkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpDQo+ID4gK3sNCj4gPiAr CWNvbnN0IHN0cnVjdCBjbWQgKmNtZCA9IGE7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaWQgPSBMX1BU Ul9UT19VSU5UKGIpOw0KPiA+ICsNCj4gPiArCXJldHVybiBjbWQtPmlkID09IGlkOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV9jYW5jZWwoc3RydWN0IGJ0X2hjaSAqaGNpLCB1bnNp Z25lZCBpbnQgaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBjbWQgKmNtZDsNCj4gPiArDQo+ID4g KwlpZiAoIWhjaSB8fCAhaWQpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWNt ZCA9IGxfcXVldWVfcmVtb3ZlX2lmKGhjaS0+Y21kX3F1ZXVlLCBtYXRjaF9jbWRfaWQsDQo+ID4g KwkJCQkJCUxfVUlOVF9UT19QVFIoaWQpKTsNCj4gPiArCWlmICghY21kKSB7DQo+ID4gKwkJY21k ID0gbF9xdWV1ZV9yZW1vdmVfaWYoaGNpLT5yc3BfcXVldWUsIG1hdGNoX2NtZF9pZCwNCj4gPiAr CQkJCQkJCUxfVUlOVF9UT19QVFIoaWQpKTsNCj4gPiArCQlpZiAoIWNtZCkNCj4gPiArCQkJcmV0 dXJuIGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNtZF9mcmVlKGNtZCk7DQo+ID4gKw0K PiA+ICsJd2FrZXVwX3dyaXRlcihoY2kpOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV9mbHVzaChzdHJ1Y3QgYnRfaGNpICpoY2kpDQo+ ID4gK3sNCj4gPiArCWlmICghaGNpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4g KwlpZiAoaGNpLT53cml0ZXJfYWN0aXZlKSB7DQo+ID4gKwkJbF9pb19zZXRfd3JpdGVfaGFuZGxl cihoY2ktPmlvLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArCQloY2ktPndyaXRlcl9hY3RpdmUg PSBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlsX3F1ZXVlX2NsZWFyKGhjaS0+Y21kX3F1 ZXVlLCBjbWRfZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2NsZWFyKGhjaS0+cnNwX3F1ZXVlLCBjbWRf ZnJlZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3Vu c2lnbmVkIGludCBidF9oY2lfcmVnaXN0ZXIoc3RydWN0IGJ0X2hjaSAqaGNpLCB1aW50OF90IGV2 ZW50LA0KPiA+ICsJCQkJYnRfaGNpX2NhbGxiYWNrX2Z1bmNfdCBjYWxsYmFjaywNCj4gPiArCQkJ CXZvaWQgKnVzZXJfZGF0YSwgYnRfaGNpX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpDQo+ID4gK3sN Cj4gPiArCXN0cnVjdCBldnQgKmV2dDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQly ZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlldnQgPSBsX25ldyhzdHJ1Y3QgZXZ0LCAxKTsNCj4gPiAr DQo+ID4gKwlldnQtPmV2ZW50ID0gZXZlbnQ7DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+bmV4dF9l dnRfaWQgPCAxKQ0KPiA+ICsJCWhjaS0+bmV4dF9ldnRfaWQgPSAxOw0KPiA+ICsNCj4gPiArCWV2 dC0+aWQgPSBoY2ktPm5leHRfZXZ0X2lkKys7DQo+ID4gKw0KPiA+ICsJZXZ0LT5jYWxsYmFjayA9 IGNhbGxiYWNrOw0KPiA+ICsJZXZ0LT5kZXN0cm95ID0gZGVzdHJveTsNCj4gPiArCWV2dC0+dXNl cl9kYXRhID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiArCWlmICghbF9xdWV1ZV9wdXNoX3RhaWwo aGNpLT5ldnRfbGlzdCwgZXZ0KSkgew0KPiA+ICsJCWxfZnJlZShldnQpOw0KPiA+ICsJCXJldHVy biAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBldnQtPmlkOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgYm9vbCBtYXRjaF9ldnRfaWQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IGV2dCAqZXZ0ID0gYTsNCj4gPiArCXVu c2lnbmVkIGludCBpZCA9IExfUFRSX1RPX1VJTlQoYik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGV2 dC0+aWQgPT0gaWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgYnRfaGNpX3VucmVnaXN0ZXIo c3RydWN0IGJ0X2hjaSAqaGNpLCB1bnNpZ25lZCBpbnQgaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBldnQgKmV2dDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSB8fCAhaWQpDQo+ID4gKwkJcmV0dXJu IGZhbHNlOw0KPiA+ICsNCj4gPiArCWV2dCA9IGxfcXVldWVfcmVtb3ZlX2lmKGhjaS0+ZXZ0X2xp c3QsIG1hdGNoX2V2dF9pZCwNCj4gPiArCQkJCQkJTF9VSU5UX1RPX1BUUihpZCkpOw0KPiA+ICsJ aWYgKCFldnQpDQo+ID4gKwkJcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWV2dF9mcmVlKGV2 dCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wg YnRfaGNpX3JlY2VpdmUoc3RydWN0IGJ0X2hjaSAqaGNpLCBidF9oY2lfcmVjZWl2ZV9mdW5jX3Qg Y2FsbGJhY2ssDQo+ID4gKwkJCQl2b2lkICp1c2VyX2RhdGEsIGJ0X2hjaV9kZXN0cm95X2Z1bmNf dCBkZXN0cm95KQ0KPiA+ICt7DQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7 DQo+ID4gKw0KPiA+ICsJaWYgKGhjaS0+cmVjZWl2ZV9kZXN0cm95KQ0KPiA+ICsJCWhjaS0+cmVj ZWl2ZV9kZXN0cm95KGhjaS0+cmVjZWl2ZV9kYXRhKTsNCj4gPiArDQo+ID4gKwloY2ktPnJlY2Vp dmVfY2FsbGJhY2sgPSBjYWxsYmFjazsNCj4gPiArCWhjaS0+cmVjZWl2ZV9kZXN0cm95ID0gZGVz dHJveTsNCj4gPiArCWhjaS0+cmVjZWl2ZV9kYXRhID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiAr CXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIGJ0X2hjaV93cml0ZShzdHJ1 Y3QgYnRfaGNpICpoY2ksIHVpbnQxNl90IGhhbmRsZSwgdWludDhfdCBmbGFncywNCj4gPiArCQkJ CWNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IHNpemUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBw a3QgKnBrdDsNCj4gPiArDQo+ID4gKwlpZiAoIWhjaSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ ID4gKw0KPiA+ICsJcGt0ID0gbF9uZXcoc3RydWN0IHBrdCwgMSk7DQo+ID4gKw0KPiA+ICsJcGt0 LT5oYW5kbGUgPSBoYW5kbGU7DQo+ID4gKwlwa3QtPmZsYWdzID0gZmxhZ3M7DQo+ID4gKwlwa3Qt PnNpemUgPSBzaXplOw0KPiA+ICsNCj4gPiArCWlmIChwa3QtPnNpemUgPiAwKQ0KPiA+ICsJCXBr dC0+ZGF0YSA9IGxfbWVtZHVwKGRhdGEsIHBrdC0+c2l6ZSk7DQo+ID4gKw0KPiA+ICsJaWYgKCFs X3F1ZXVlX3B1c2hfdGFpbChoY2ktPnBrdF9xdWV1ZSwgcGt0KSkgew0KPiA+ICsJCWxfZnJlZShw a3QtPmRhdGEpOw0KPiA+ICsJCWxfZnJlZShwa3QpOw0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwl3YWtldXBfd3JpdGVyKGhjaSk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIHRydWU7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvbWVzaC9tZXNoLWlvLWdlbmVyaWMu YyBiL21lc2gvbWVzaC1pby1nZW5lcmljLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ IGluZGV4IDAwMDAwMDAwMC4uN2E5NzRjZmYzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi L21lc2gvbWVzaC1pby1nZW5lcmljLmMNCj4gPiBAQCAtMCwwICsxLDY2MCBAQA0KPiA+ICsvKg0K PiA+ICsgKg0KPiA+ICsgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExp bnV4DQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTggIEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsgKiAgVGhp cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gPiArICoN Cj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQo+ID4g KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiA+ ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZmRlZiBIQVZFX0NPTkZJR19IDQo+ID4gKyNp bmNsdWRlIDxjb25maWcuaD4NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3lz L3RpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGVsbC9lbGwuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRl ICJsaWIvYmx1ZXRvb3RoLmgiDQo+ID4gKyNpbmNsdWRlICJsaWIvaGNpLmgiDQo+ID4gKw0KPiA+ ICsjaW5jbHVkZSAibW9uaXRvci9idC5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvaGNp LmgiDQo+ID4gKyNpbmNsdWRlICJtZXNoL2Rpc3BsYXkuaCINCj4gPiArI2luY2x1ZGUgIm1lc2gv bWVzaC1pby5oIg0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLWlvLWFwaS5oIg0KPiA+ICsNCj4g PiArI2luY2x1ZGUgIm1lc2gvbWVzaC1pby1nZW5lcmljLmgiDQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg bWVzaF9pb19wcml2YXRlIHsNCj4gPiArCXVpbnQxNl90IGluZGV4Ow0KPiA+ICsJc3RydWN0IGJ0 X2hjaSAqaGNpOw0KPiA+ICsJc3RydWN0IGxfdGltZW91dCAqdHhfdGltZW91dDsNCj4gPiArCXN0 cnVjdCBsX3F1ZXVlICpyeF9yZWdzOw0KPiA+ICsJc3RydWN0IGxfcXVldWUgKnR4X3BrdHM7DQo+ ID4gKwl1aW50OF90IGZpbHRlcnNbM107IC8qIFNpbXBsZSBmaWx0ZXJpbmcgb24gQUQgdHlwZSBv bmx5ICovDQo+ID4gKwlib29sIHNlbmRpbmc7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4g PiArCXVpbnQxNl90IGludGVydmFsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHB2dF9y eF9yZWcgew0KPiA+ICsJdWludDhfdCBmaWx0ZXJfaWQ7DQo+ID4gKwltZXNoX2lvX3JlY3ZfZnVu Y190IGNiOw0KPiA+ICsJdm9pZCAqdXNlcl9kYXRhOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Ry dWN0IHByb2Nlc3NfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlCQkqcHZ0Ow0K PiA+ICsJY29uc3QgdWludDhfdAkJCSpkYXRhOw0KPiA+ICsJdWludDhfdAkJCQlsZW47DQo+ID4g KwlzdHJ1Y3QgbWVzaF9pb19yZWN2X2luZm8JaW5mbzsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 cnVjdCB0eF9wa3Qgew0KPiA+ICsJc3RydWN0IG1lc2hfaW9fc2VuZF9pbmZvCWluZm87DQo+ID4g Kwlib29sCQkJCWRlbGV0ZTsNCj4gPiArCXVpbnQ4X3QJCQkJbGVuOw0KPiA+ICsJdWludDhfdAkJ CQlwa3RbMzBdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHR4X3BhdHRlcm4gew0KPiA+ ICsJY29uc3QgdWludDhfdAkJCSpkYXRhOw0KPiA+ICsJdWludDhfdAkJCQlsZW47DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdWludDMyX3QgZ2V0X2luc3RhbnQodm9pZCkNCj4gPiArew0K PiA+ICsJc3RydWN0IHRpbWV2YWwgdG07DQo+ID4gKwl1aW50MzJfdCBpbnN0YW50Ow0KPiA+ICsN Cj4gPiArCWdldHRpbWVvZmRheSgmdG0sIE5VTEwpOw0KPiA+ICsJaW5zdGFudCA9IHRtLnR2X3Nl YyAqIDEwMDA7DQo+ID4gKwlpbnN0YW50ICs9IHRtLnR2X3VzZWMgLyAxMDAwOw0KPiA+ICsNCj4g PiArCXJldHVybiBpbnN0YW50Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdWludDMyX3Qg aW5zdGFudF9yZW1haW5pbmdfbXModWludDMyX3QgaW5zdGFudCkNCj4gPiArew0KPiA+ICsJaW5z dGFudCAtPSBnZXRfaW5zdGFudCgpOw0KPiA+ICsJcmV0dXJuIGluc3RhbnQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfcnhfY2FsbGJhY2tzKHZvaWQgKnZfcngsIHZv aWQgKnZfcmVnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcHZ0X3J4X3JlZyAqcnhfcmVnID0gdl9y eDsNCj4gPiArCXN0cnVjdCBwcm9jZXNzX2RhdGEgKnJ4ID0gdl9yZWc7DQo+ID4gKwl1aW50OF90 IGFkX3R5cGU7DQo+ID4gKw0KPiA+ICsJYWRfdHlwZSA9IHJ4LT5wdnQtPmZpbHRlcnNbcnhfcmVn LT5maWx0ZXJfaWQgLSAxXTsNCj4gPiArDQo+ID4gKwlpZiAocngtPmRhdGFbMF0gPT0gYWRfdHlw ZSAmJiByeF9yZWctPmNiKQ0KPiA+ICsJCXJ4X3JlZy0+Y2IocnhfcmVnLT51c2VyX2RhdGEsICZy eC0+aW5mbywgcngtPmRhdGEsIHJ4LT5sZW4pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBwcm9jZXNzX3J4KHN0cnVjdCBtZXNoX2lvX3ByaXZhdGUgKnB2dCwgaW50OF90IHJzc2ks DQo+ID4gKwkJCQkJdWludDMyX3QgaW5zdGFudCwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICpk YXRhLCB1aW50OF90IGxlbikNCj4gPiArew0KPiA+ICsJc3RydWN0IHByb2Nlc3NfZGF0YSByeCA9 IHsNCj4gPiArCQkucHZ0ID0gcHZ0LA0KPiA+ICsJCS5kYXRhID0gZGF0YSwNCj4gPiArCQkubGVu ID0gbGVuLA0KPiA+ICsJCS5pbmZvLmluc3RhbnQgPSBpbnN0YW50LA0KPiA+ICsJCS5pbmZvLmNo YW4gPSA3LA0KPiA+ICsJCS5pbmZvLnJzc2kgPSByc3NpLA0KPiA+ICsJfTsNCj4gPiArDQo+ID4g KwlsX3F1ZXVlX2ZvcmVhY2gocHZ0LT5yeF9yZWdzLCBwcm9jZXNzX3J4X2NhbGxiYWNrcywgJnJ4 KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgZXZlbnRfYWR2X3JlcG9ydChzdHJ1 Y3QgbWVzaF9pbyAqaW8sIGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplKQ0KPiA+ICt7DQo+ ID4gKwljb25zdCBzdHJ1Y3QgYnRfaGNpX2V2dF9sZV9hZHZfcmVwb3J0ICpldnQgPSBidWY7DQo+ ID4gKwljb25zdCB1aW50OF90ICphZHY7DQo+ID4gKwl1aW50MzJfdCBpbnN0YW50Ow0KPiA+ICsJ dWludDhfdCBhZHZfbGVuOw0KPiA+ICsJdWludDE2X3QgbGVuID0gMDsNCj4gPiArCWludDhfdCBy c3NpOw0KPiA+ICsNCj4gPiArCWlmIChldnQtPmV2ZW50X3R5cGUgIT0gMHgwMykNCj4gPiArCQly ZXR1cm47DQo+ID4gKw0KPiA+ICsJaWYgKGV2dC0+YWRkcl90eXBlICE9IEJEQUREUl9MRV9QVUJM SUMgJiYNCj4gPiArCQkJZXZ0LT5hZGRyX3R5cGUgIT0gQkRBRERSX0xFX1JBTkRPTSkNCj4gPiAr CQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaW5zdGFudCA9IGdldF9pbnN0YW50KCk7DQo+ID4gKwlh ZHYgPSBldnQtPmRhdGE7DQo+ID4gKwlhZHZfbGVuID0gZXZ0LT5kYXRhX2xlbjsNCj4gPiArDQo+ ID4gKwkvKiByc3NpIGlzIGp1c3QgYmV5b25kIGxhc3QgYnl0ZSBvZiBkYXRhICovDQo+ID4gKwly c3NpID0gKGludDhfdCkgYWR2W2Fkdl9sZW5dOw0KPiA+ICsNCj4gPiArCXdoaWxlIChsZW4gPCBh ZHZfbGVuIC0gMSkgew0KPiA+ICsJCXVpbnQ4X3QgZmllbGRfbGVuID0gYWR2WzBdOw0KPiA+ICsN Cj4gPiArCQkvKiBDaGVjayBmb3IgdGhlIGVuZCBvZiBhZHZlcnRpc2luZyBkYXRhICovDQo+ID4g KwkJaWYgKGZpZWxkX2xlbiA9PSAwKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJbGVu ICs9IGZpZWxkX2xlbiArIDE7DQo+ID4gKw0KPiA+ICsJCS8qIERvIG5vdCBjb250aW51ZSBkYXRh IHBhcnNpbmcgaWYgZ290IGluY29ycmVjdCBsZW5ndGggKi8NCj4gPiArCQlpZiAobGVuID4gYWR2 X2xlbikNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCS8qIFRPRE86IENyZWF0ZSBhbiBJ bnN0YW50IHRvIHVzZSAqLw0KPiA+ICsJCXByb2Nlc3NfcngoaW8tPnB2dCwgcnNzaSwgaW5zdGFu dCwgYWR2ICsgMSwgYWR2WzBdKTsNCj4gPiArDQo+ID4gKwkJYWR2ICs9IGZpZWxkX2xlbiArIDE7 DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGV2ZW50X2NhbGxiYWNr KGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplLCB2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sN Cj4gPiArCXVpbnQ4X3QgZXZlbnQgPSBsX2dldF91OChidWYpOw0KPiA+ICsJc3RydWN0IG1lc2hf aW8gKmlvID0gdXNlcl9kYXRhOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoZXZlbnQpIHsNCj4gPiAr CWNhc2UgQlRfSENJX0VWVF9MRV9BRFZfUkVQT1JUOg0KPiA+ICsJCWV2ZW50X2Fkdl9yZXBvcnQo aW8sIGJ1ZiArIDEsIHNpemUgLSAxKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZh dWx0Og0KPiA+ICsJCWxfaW5mbygiT3RoZXIgTWV0YSBFdnQgLSAlZCIsIGV2ZW50KTsNCj4gPiAr CX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgZGV2X2luaXQodWludDE2X3QgaW5k ZXgsIHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+ICsJc3RydWN0IG1lc2hfaW9fcHJp dmF0ZSAqdG1wOw0KPiA+ICsNCj4gPiArCWlmICghaW8gfHwgaW8tPnB2dCkNCj4gPiArCQlyZXR1 cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsJdG1wID0gbF9uZXcoc3RydWN0IG1lc2hfaW9fcHJpdmF0 ZSwgMSk7DQo+ID4gKw0KPiA+ICsJaWYgKHRtcCA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiBmYWxz ZTsNCj4gPiArDQo+ID4gKwl0bXAtPnJ4X3JlZ3MgPSBsX3F1ZXVlX25ldygpOw0KPiA+ICsJdG1w LT50eF9wa3RzID0gbF9xdWV1ZV9uZXcoKTsNCj4gPiArCWlmICghdG1wLT5yeF9yZWdzIHx8ICF0 bXAtPnR4X3BrdHMpDQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsNCj4gPiArCXRtcC0+aGNpID0g YnRfaGNpX25ld191c2VyX2NoYW5uZWwoaW5kZXgpOw0KPiA+ICsJaWYgKCF0bXAtPmhjaSkNCj4g PiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3JlZ2lzdGVyKHRtcC0+aGNpLCBC VF9IQ0lfRVZUX0xFX01FVEFfRVZFTlQsDQo+ID4gKwkJCQkJCWV2ZW50X2NhbGxiYWNrLCBpbywg TlVMTCk7DQo+ID4gKw0KPiA+ICsJaW8tPnB2dCA9IHRtcDsNCj4gPiArCXJldHVybiB0cnVlOw0K PiA+ICsNCj4gPiArZmFpbDoNCj4gPiArCWxfcXVldWVfZGVzdHJveSh0bXAtPnJ4X3JlZ3MsIGxf ZnJlZSk7DQo+ID4gKwlsX3F1ZXVlX2Rlc3Ryb3kodG1wLT50eF9wa3RzLCBsX2ZyZWUpOw0KPiA+ ICsJbF9mcmVlKHRtcCk7DQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBib29sIGRldl9kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+ ICsJc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0ID0gaW8tPnB2dDsNCj4gPiArDQo+ID4gKwlp ZiAoIXB2dCkNCj4gPiArCQlyZXR1cm4gdHJ1ZTsNCj4gPiArDQo+ID4gKwlidF9oY2lfdW5yZWYo cHZ0LT5oY2kpOw0KPiA+ICsJbF90aW1lb3V0X3JlbW92ZShwdnQtPnR4X3RpbWVvdXQpOw0KPiA+ ICsJbF9xdWV1ZV9kZXN0cm95KHB2dC0+cnhfcmVncywgbF9mcmVlKTsNCj4gPiArCWxfcXVldWVf ZGVzdHJveShwdnQtPnR4X3BrdHMsIGxfZnJlZSk7DQo+ID4gKwlsX2ZyZWUocHZ0KTsNCj4gPiAr CWlvLT5wdnQgPSBOVUxMOw0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgYm9vbCBkZXZfY2FwcyhzdHJ1Y3QgbWVzaF9pbyAqaW8sIHN0cnVjdCBt ZXNoX2lvX2NhcHMgKmNhcHMpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUg KnB2dCA9IGlvLT5wdnQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFwdnQgfHwgIWNhcHMpDQo+ID4gKwkJ cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCWNhcHMtPm1heF9udW1fZmlsdGVycyA9IHNpemVv ZihwdnQtPmZpbHRlcnMpOw0KPiA+ICsJY2Fwcy0+d2luZG93X2FjY3VyYWN5ID0gNTA7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNl bmRfY2FuY2VsX2RvbmUoY29uc3Qgdm9pZCAqYnVmLCB1aW50OF90IHNpemUsDQo+ID4gKwkJCQkJ CQl2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUg KnB2dCA9IHVzZXJfZGF0YTsNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9yYW5kb21f YWRkcmVzcyBjbWQ7DQo+ID4gKw0KPiA+ICsJaWYgKCFwdnQpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ ICsNCj4gPiArCXB2dC0+c2VuZGluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCS8qIEF0IGVuZCBv ZiBhbnkgYnVyc3Qgb2YgQURWcywgY2hhbmdlIHJhbmRvbSBhZGRyZXNzICovDQo+ID4gKwlsX2dl dHJhbmRvbShjbWQuYWRkciwgNik7DQo+ID4gKwljbWQuYWRkcls1XSB8PSAweGMwOw0KPiA+ICsJ YnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX1JBTkRPTV9BRERSRVNTLA0K PiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIE5VTEwsIE5VTEwpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzZW5kX2NhbmNlbChzdHJ1Y3QgbWVzaF9pb19wcml2YXRl ICpwdnQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9hZHZfZW5hYmxl IGNtZDsNCj4gPiArDQo+ID4gKwlpZiAoIXB2dCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ ICsJaWYgKCFwdnQtPnNlbmRpbmcpIHsNCj4gPiArCQlzZW5kX2NhbmNlbF9kb25lKE5VTEwsIDAs IHB2dCk7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNtZC5lbmFibGUg PSAweDAwOwkvKiBEaXNhYmxlIGFkdmVydGlzaW5nICovDQo+ID4gKwlidF9oY2lfc2VuZChwdnQt PmhjaSwgQlRfSENJX0NNRF9MRV9TRVRfQURWX0VOQUJMRSwNCj4gPiArCQkJCSZjbWQsIHNpemVv ZihjbWQpLA0KPiA+ICsJCQkJc2VuZF9jYW5jZWxfZG9uZSwgcHZ0LCBOVUxMKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc2V0X3NlbmRfYWR2X2VuYWJsZShjb25zdCB2b2lkICpi dWYsIHVpbnQ4X3Qgc2l6ZSwNCj4gPiArCQkJCQkJCXZvaWQgKnVzZXJfZGF0YSkNCj4gPiArew0K PiA+ICsJc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0ID0gdXNlcl9kYXRhOw0KPiA+ICsJc3Ry dWN0IGJ0X2hjaV9jbWRfbGVfc2V0X2Fkdl9lbmFibGUgY21kOw0KPiA+ICsNCj4gPiArCWlmICgh cHZ0KQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwlwdnQtPnNlbmRpbmcgPSB0cnVlOw0K PiA+ICsJY21kLmVuYWJsZSA9IDB4MDE7CS8qIEVuYWJsZSBhZHZlcnRpc2luZyAqLw0KPiA+ICsJ YnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX0FEVl9FTkFCTEUsDQo+ID4g KwkJCQkmY21kLCBzaXplb2YoY21kKSwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIHNldF9zZW5kX2Fkdl9kYXRhKGNvbnN0IHZvaWQgKmJ1ZiwgdWlu dDhfdCBzaXplLA0KPiA+ICsJCQkJCQkJdm9pZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlz dHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhf cGt0ICp0eDsNCj4gPiArCXN0cnVjdCBidF9oY2lfY21kX2xlX3NldF9hZHZfZGF0YSBjbWQ7DQo+ ID4gKw0KPiA+ICsJaWYgKCFwdnQgfHwgIXB2dC0+dHgpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsN Cj4gPiArCXR4ID0gcHZ0LT50eDsNCj4gPiArCWlmICh0eC0+bGVuID49IHNpemVvZihjbWQuZGF0 YSkpDQo+ID4gKwkJZ290byBkb25lOw0KPiA+ICsNCj4gPiArCW1lbXNldCgmY21kLCAwLCBzaXpl b2YoY21kKSk7DQo+ID4gKw0KPiA+ICsJY21kLmxlbiA9IHR4LT5sZW4gKyAxOw0KPiA+ICsJY21k LmRhdGFbMF0gPSB0eC0+bGVuOw0KPiA+ICsJbWVtY3B5KGNtZC5kYXRhICsgMSwgdHgtPnBrdCwg dHgtPmxlbik7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURf TEVfU0VUX0FEVl9EQVRBLA0KPiA+ICsJCQkJCSZjbWQsIHNpemVvZihjbWQpLA0KPiA+ICsJCQkJ CXNldF9zZW5kX2Fkdl9lbmFibGUsIHB2dCwgTlVMTCk7DQo+ID4gK2RvbmU6DQo+ID4gKwlpZiAo dHgtPmRlbGV0ZSkNCj4gPiArCQlsX2ZyZWUodHgpOw0KPiA+ICsNCj4gPiArCXB2dC0+dHggPSBO VUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzZXRfc2VuZF9hZHZfcGFyYW1z KGNvbnN0IHZvaWQgKmJ1ZiwgdWludDhfdCBzaXplLA0KPiA+ICsJCQkJCQkJdm9pZCAqdXNlcl9k YXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2Rh dGE7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9zZXRfYWR2X3BhcmFtZXRlcnMgY21kOw0K PiA+ICsJdWludDE2X3QgaGNpX2ludGVydmFsOw0KPiA+ICsNCj4gPiArCWlmICghcHZ0KQ0KPiA+ ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwloY2lfaW50ZXJ2YWwgPSAocHZ0LT5pbnRlcnZhbCAq IDE2KSAvIDEwOw0KPiA+ICsJY21kLm1pbl9pbnRlcnZhbCA9IExfQ1BVX1RPX0xFMTYoaGNpX2lu dGVydmFsKTsNCj4gPiArCWNtZC5tYXhfaW50ZXJ2YWwgPSBMX0NQVV9UT19MRTE2KGhjaV9pbnRl cnZhbCk7DQo+ID4gKwljbWQudHlwZSA9IDB4MDM7IC8qIEFEVl9OT05DT05OX0lORCAqLw0KPiA+ ICsJY21kLm93bl9hZGRyX3R5cGUgPSAweDAxOyAvKiBBRERSX1RZUEVfUkFORE9NICovDQo+ID4g KwljbWQuZGlyZWN0X2FkZHJfdHlwZSA9IDB4MDA7DQo+ID4gKwltZW1zZXQoY21kLmRpcmVjdF9h ZGRyLCAwLCA2KTsNCj4gPiArCWNtZC5jaGFubmVsX21hcCA9IDB4MDc7DQo+ID4gKwljbWQuZmls dGVyX3BvbGljeSA9IDB4MDM7DQo+ID4gKw0KPiA+ICsJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJU X0hDSV9DTURfTEVfU0VUX0FEVl9QQVJBTUVURVJTLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNt ZCksDQo+ID4gKwkJCQlzZXRfc2VuZF9hZHZfZGF0YSwgcHZ0LCBOVUxMKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgc2VuZF9wa3Qoc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSAqcHZ0 LCBzdHJ1Y3QgdHhfcGt0ICp0eCwNCj4gPiArCQkJCQkJCXVpbnQxNl90IGludGVydmFsKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9zZXRfYWR2X2VuYWJsZSBjbWQ7DQo+ID4g Kw0KPiA+ICsJcHZ0LT50eCA9IHR4Ow0KPiA+ICsJcHZ0LT5pbnRlcnZhbCA9IGludGVydmFsOw0K PiA+ICsNCj4gPiArCWlmICghcHZ0LT5zZW5kaW5nKSB7DQo+ID4gKwkJc2V0X3NlbmRfYWR2X3Bh cmFtcyhOVUxMLCAwLCBwdnQpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwljbWQuZW5hYmxlID0gMHgwMDsJLyogRGlzYWJsZSBhZHZlcnRpc2luZyAqLw0KPiA+ICsJYnRf aGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VUX0FEVl9FTkFCTEUsDQo+ID4gKwkJ CQkmY21kLCBzaXplb2YoY21kKSwNCj4gPiArCQkJCXNldF9zZW5kX2Fkdl9wYXJhbXMsIHB2dCwg TlVMTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHR4X3RpbWVvdXQoc3RydWN0 IGxfdGltZW91dCAqdGltZW91dCwgdm9pZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgbWVzaF9pb19wcml2YXRlICpwdnQgPSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0 ICp0eDsNCj4gPiArCXVpbnQxNl90IG1zOw0KPiA+ICsJdWludDhfdCBjb3VudDsNCj4gPiArDQo+ ID4gKwlpZiAoIXB2dCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJdHggPSBsX3F1ZXVl X3BvcF9oZWFkKHB2dC0+dHhfcGt0cyk7DQo+ID4gKwlpZiAoIXR4KSB7DQo+ID4gKwkJbF90aW1l b3V0X3JlbW92ZSh0aW1lb3V0KTsNCj4gPiArCQlwdnQtPnR4X3RpbWVvdXQgPSBOVUxMOw0KPiA+ ICsJCXNlbmRfY2FuY2VsKHB2dCk7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWlmICh0eC0+aW5mby50eXBlID09IE1FU0hfSU9fVElNSU5HX1RZUEVfR0VORVJBTCkgew0K PiA+ICsJCW1zID0gdHgtPmluZm8udS5nZW4uaW50ZXJ2YWw7DQo+ID4gKwkJY291bnQgPSB0eC0+ aW5mby51Lmdlbi5jbnQ7DQo+ID4gKwkJaWYgKGNvdW50ICE9IE1FU0hfSU9fVFhfQ09VTlRfVU5M SU1JVEVEKQ0KPiA+ICsJCQl0eC0+aW5mby51Lmdlbi5jbnQtLTsNCj4gPiArCX0gZWxzZSB7DQo+ ID4gKwkJbXMgPSAyNTsNCj4gPiArCQljb3VudCA9IDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ dHgtPmRlbGV0ZSA9ICEhKGNvdW50ID09IDEpOw0KPiA+ICsNCj4gPiArCXNlbmRfcGt0KHB2dCwg dHgsIG1zKTsNCj4gPiArDQo+ID4gKwlpZiAoY291bnQgPT0gMSkgew0KPiA+ICsJCS8qIHNlbmRf cGt0IHdpbGwgZGVsZXRlIHdoZW4gZG9uZSAqLw0KPiA+ICsJCXR4ID0gbF9xdWV1ZV9wZWVrX2hl YWQocHZ0LT50eF9wa3RzKTsNCj4gPiArCQlpZiAodHggJiYgdHgtPmluZm8udHlwZSA9PSBNRVNI X0lPX1RJTUlOR19UWVBFX1BPTExfUlNQKSB7DQo+ID4gKwkJCW1zID0gaW5zdGFudF9yZW1haW5p bmdfbXModHgtPmluZm8udS5wb2xsX3JzcC5pbnN0YW50ICsNCj4gPiArCQkJCQkJdHgtPmluZm8u dS5wb2xsX3JzcC5kZWxheSk7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlDQo+ID4gKwkJbF9xdWV1 ZV9wdXNoX3RhaWwocHZ0LT50eF9wa3RzLCB0eCk7DQo+ID4gKw0KPiA+ICsJaWYgKHRpbWVvdXQp IHsNCj4gPiArCQlwdnQtPnR4X3RpbWVvdXQgPSB0aW1lb3V0Ow0KPiA+ICsJCWxfdGltZW91dF9t b2RpZnlfbXModGltZW91dCwgbXMpOw0KPiA+ICsJfSBlbHNlDQo+ID4gKwkJcHZ0LT50eF90aW1l b3V0ID0gbF90aW1lb3V0X2NyZWF0ZV9tcyhtcywgdHhfdGltZW91dCwNCj4gPiArCQkJCQkJCQlw dnQsIE5VTEwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0eF93b3JrZXIodm9p ZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQg PSB1c2VyX2RhdGE7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4gPiArCXVpbnQzMl90IGRl bGF5Ow0KPiA+ICsNCj4gPiArCXR4ID0gbF9xdWV1ZV9wZWVrX2hlYWQocHZ0LT50eF9wa3RzKTsN Cj4gPiArCWlmICghdHgpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAodHgt PmluZm8udHlwZSkgew0KPiA+ICsJY2FzZSBNRVNIX0lPX1RJTUlOR19UWVBFX0dFTkVSQUw6DQo+ ID4gKwkJaWYgKHR4LT5pbmZvLnUuZ2VuLm1pbl9kZWxheSA9PSB0eC0+aW5mby51Lmdlbi5tYXhf ZGVsYXkpDQo+ID4gKwkJCWRlbGF5ID0gdHgtPmluZm8udS5nZW4ubWluX2RlbGF5Ow0KPiA+ICsJ CWVsc2Ugew0KPiA+ICsJCQlsX2dldHJhbmRvbSgmZGVsYXksIHNpemVvZihkZWxheSkpOw0KPiA+ ICsJCQlkZWxheSAlPSB0eC0+aW5mby51Lmdlbi5tYXhfZGVsYXkgLQ0KPiA+ICsJCQkJCQl0eC0+ aW5mby51Lmdlbi5taW5fZGVsYXk7DQo+ID4gKwkJCWRlbGF5ICs9IHR4LT5pbmZvLnUuZ2VuLm1p bl9kZWxheTsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBNRVNI X0lPX1RJTUlOR19UWVBFX1BPTEw6DQo+ID4gKwkJaWYgKHR4LT5pbmZvLnUucG9sbC5taW5fZGVs YXkgPT0gdHgtPmluZm8udS5wb2xsLm1heF9kZWxheSkNCj4gPiArCQkJZGVsYXkgPSB0eC0+aW5m by51LnBvbGwubWluX2RlbGF5Ow0KPiA+ICsJCWVsc2Ugew0KPiA+ICsJCQlsX2dldHJhbmRvbSgm ZGVsYXksIHNpemVvZihkZWxheSkpOw0KPiA+ICsJCQlkZWxheSAlPSB0eC0+aW5mby51LnBvbGwu bWF4X2RlbGF5IC0NCj4gPiArCQkJCQkJdHgtPmluZm8udS5wb2xsLm1pbl9kZWxheTsNCj4gPiAr CQkJZGVsYXkgKz0gdHgtPmluZm8udS5wb2xsLm1pbl9kZWxheTsNCj4gPiArCQl9DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBNRVNIX0lPX1RJTUlOR19UWVBFX1BPTExfUlNQOg0K PiA+ICsJCS8qIERlbGF5IHVudGlsIEluc3RhbnQgKyBEZWxheSAqLw0KPiA+ICsJCWRlbGF5ID0g aW5zdGFudF9yZW1haW5pbmdfbXModHgtPmluZm8udS5wb2xsX3JzcC5pbnN0YW50ICsNCj4gPiAr CQkJCQkJdHgtPmluZm8udS5wb2xsX3JzcC5kZWxheSk7DQo+ID4gKwkJaWYgKGRlbGF5ID4gMjU1 KQ0KPiA+ICsJCQlkZWxheSA9IDA7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQlyZXR1cm47DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFkZWxheSkNCj4g PiArCQl0eF90aW1lb3V0KHB2dC0+dHhfdGltZW91dCwgcHZ0KTsNCj4gPiArCWVsc2UgaWYgKHB2 dC0+dHhfdGltZW91dCkNCj4gPiArCQlsX3RpbWVvdXRfbW9kaWZ5X21zKHB2dC0+dHhfdGltZW91 dCwgZGVsYXkpOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXB2dC0+dHhfdGltZW91dCA9IGxfdGltZW91 dF9jcmVhdGVfbXMoZGVsYXksIHR4X3RpbWVvdXQsDQo+ID4gKwkJCQkJCQkJcHZ0LCBOVUxMKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgc2VuZF90eChzdHJ1Y3QgbWVzaF9pbyAq aW8sIHN0cnVjdCBtZXNoX2lvX3NlbmRfaW5mbyAqaW5mbywNCj4gPiArCQkJCQljb25zdCB1aW50 OF90ICpkYXRhLCB1aW50MTZfdCBsZW4pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3By aXZhdGUgKnB2dCA9IGlvLT5wdnQ7DQo+ID4gKwlzdHJ1Y3QgdHhfcGt0ICp0eDsNCj4gPiArCWJv b2wgc2VuZGluZyA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCWlmICghaW5mbyB8fCAhZGF0YSB8fCAh bGVuIHx8IGxlbiA+IHNpemVvZih0eC0+cGt0KSkNCj4gPiArCQlyZXR1cm4gZmFsc2U7DQo+ID4g Kw0KPiA+ICsNCj4gPiArCXR4ID0gbF9uZXcoc3RydWN0IHR4X3BrdCwgMSk7DQo+ID4gKwlpZiAo IXR4KQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwltZW1jcHkoJnR4LT5pbmZv LCBpbmZvLCBzaXplb2YodHgtPmluZm8pKTsNCj4gPiArCW1lbWNweSgmdHgtPnBrdCwgZGF0YSwg bGVuKTsNCj4gPiArCXR4LT5sZW4gPSBsZW47DQo+ID4gKw0KPiA+ICsJaWYgKGluZm8tPnR5cGUg PT0gTUVTSF9JT19USU1JTkdfVFlQRV9QT0xMX1JTUCkNCj4gPiArCQlsX3F1ZXVlX3B1c2hfaGVh ZChwdnQtPnR4X3BrdHMsIHR4KTsNCj4gPiArCWVsc2Ugew0KPiA+ICsJCXNlbmRpbmcgPSAhbF9x dWV1ZV9pc2VtcHR5KHB2dC0+dHhfcGt0cyk7DQo+ID4gKwkJbF9xdWV1ZV9wdXNoX3RhaWwocHZ0 LT50eF9wa3RzLCB0eCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFzZW5kaW5nKSB7DQo+ ID4gKwkJbF90aW1lb3V0X3JlbW92ZShwdnQtPnR4X3RpbWVvdXQpOw0KPiA+ICsJCXB2dC0+dHhf dGltZW91dCA9IE5VTEw7DQo+ID4gKwkJbF9pZGxlX29uZXNob3QodHhfd29ya2VyLCBwdnQsIE5V TEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgYm9vbCBmaW5kX2J5X2FkX3R5cGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IHR4X3BrdCAqdHggPSBhOw0KPiA+ICsJ dWludDhfdCBhZF90eXBlID0gTF9QVFJfVE9fVUlOVChiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g IWFkX3R5cGUgfHwgYWRfdHlwZSA9PSB0eC0+cGt0WzBdOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgYm9vbCBmaW5kX2J5X3BhdHRlcm4oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikN Cj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0IHR4X3BrdCAqdHggPSBhOw0KPiA+ICsJY29uc3Qg c3RydWN0IHR4X3BhdHRlcm4gKnBhdHRlcm4gPSBiOw0KPiA+ICsNCj4gPiArCWlmICh0eC0+bGVu IDwgcGF0dGVybi0+bGVuKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gKCFtZW1jbXAodHgtPnBrdCwgcGF0dGVybi0+ZGF0YSwgcGF0dGVybi0+bGVuKSk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHR4X2NhbmNlbChzdHJ1Y3QgbWVzaF9pbyAqaW8s IHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgbGVuKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9p b19wcml2YXRlICpwdnQgPSBpby0+cHZ0Ow0KPiA+ICsJc3RydWN0IHR4X3BrdCAqdHg7DQo+ID4g Kw0KPiA+ICsJaWYgKCFkYXRhKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwlp ZiAobGVuID09IDEpIHsNCj4gPiArCQlkbyB7DQo+ID4gKwkJCXR4ID0gbF9xdWV1ZV9yZW1vdmVf aWYocHZ0LT50eF9wa3RzLCBmaW5kX2J5X2FkX3R5cGUsDQo+ID4gKwkJCQkJCQlMX1VJTlRfVE9f UFRSKGRhdGFbMF0pKTsNCj4gPiArCQkJbF9mcmVlKHR4KTsNCj4gPiArCQl9IHdoaWxlICh0eCk7 DQo+ID4gKwl9ICBlbHNlIHsNCj4gPiArCQlzdHJ1Y3QgdHhfcGF0dGVybiBwYXR0ZXJuID0gew0K PiA+ICsJCQkuZGF0YSA9IGRhdGEsDQo+ID4gKwkJCS5sZW4gPSBsZW4NCj4gPiArCQl9Ow0KPiA+ ICsNCj4gPiArCQlkbyB7DQo+ID4gKwkJCXR4ID0gbF9xdWV1ZV9yZW1vdmVfaWYocHZ0LT50eF9w a3RzLCBmaW5kX2J5X3BhdHRlcm4sDQo+ID4gKwkJCQkJCQkJJnBhdHRlcm4pOw0KPiA+ICsJCQls X2ZyZWUodHgpOw0KPiA+ICsJCX0gd2hpbGUgKHR4KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp ZiAobF9xdWV1ZV9pc2VtcHR5KHB2dC0+dHhfcGt0cykpIHsNCj4gPiArCQlzZW5kX2NhbmNlbChw dnQpOw0KPiA+ICsJCWxfdGltZW91dF9yZW1vdmUocHZ0LT50eF90aW1lb3V0KTsNCj4gPiArCQlw dnQtPnR4X3RpbWVvdXQgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVl Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBmaW5kX2J5X2ZpbHRlcl9pZChjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKQ0KPiA+ICt7DQo+ID4gKwljb25zdCBzdHJ1Y3QgcHZ0 X3J4X3JlZyAqcnhfcmVnID0gYTsNCj4gPiArCXVpbnQ4X3QgZmlsdGVyX2lkID0gTF9QVFJfVE9f VUlOVChiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcnhfcmVnLT5maWx0ZXJfaWQgPT0gZmlsdGVy X2lkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCByZWN2X3JlZ2lzdGVyKHN0cnVj dCBtZXNoX2lvICppbywgdWludDhfdCBmaWx0ZXJfaWQsDQo+ID4gKwkJCQltZXNoX2lvX3JlY3Zf ZnVuY190IGNiLCB2b2lkICp1c2VyX2RhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBidF9oY2lf Y21kX2xlX3NldF9zY2FuX2VuYWJsZSBjbWQ7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRl ICpwdnQgPSBpby0+cHZ0Ow0KPiA+ICsJc3RydWN0IHB2dF9yeF9yZWcgKnJ4X3JlZzsNCj4gPiAr CWJvb2wgc2Nhbm5pbmc7DQo+ID4gKw0KPiA+ICsJbF9pbmZvKCIlcyAlZCIsIF9fZnVuY19fLCBm aWx0ZXJfaWQpOw0KPiA+ICsJaWYgKCFjYiB8fCAhZmlsdGVyX2lkIHx8IGZpbHRlcl9pZCA+IHNp emVvZihwdnQtPmZpbHRlcnMpKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKwly eF9yZWcgPSBsX3F1ZXVlX3JlbW92ZV9pZihwdnQtPnJ4X3JlZ3MsIGZpbmRfYnlfZmlsdGVyX2lk LA0KPiA+ICsJCQkJCQlMX1VJTlRfVE9fUFRSKGZpbHRlcl9pZCkpOw0KPiA+ICsNCj4gPiArCWlm ICghcnhfcmVnKSB7DQo+ID4gKwkJcnhfcmVnID0gbF9uZXcoc3RydWN0IHB2dF9yeF9yZWcsIDEp Ow0KPiA+ICsJCWlmICghcnhfcmVnKQ0KPiA+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcnhfcmVnLT5maWx0ZXJfaWQgPSBmaWx0ZXJfaWQ7DQo+ID4gKwlyeF9yZWct PmNiID0gY2I7DQo+ID4gKwlyeF9yZWctPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsNCj4gPiArDQo+ ID4gKwlzY2FubmluZyA9ICFsX3F1ZXVlX2lzZW1wdHkocHZ0LT5yeF9yZWdzKTsNCj4gPiArDQo+ ID4gKwlsX3F1ZXVlX3B1c2hfaGVhZChwdnQtPnJ4X3JlZ3MsIHJ4X3JlZyk7DQo+ID4gKw0KPiA+ ICsJaWYgKCFzY2FubmluZykgew0KPiA+ICsJCWNtZC5lbmFibGUgPSAweDAxOwkvKiBFbmFibGUg c2Nhbm5pbmcgKi8NCj4gPiArCQljbWQuZmlsdGVyX2R1cCA9IDB4MDA7CS8qIFJlcG9ydCBkdXBs aWNhdGVzICovDQo+ID4gKwkJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hDSV9DTURfTEVfU0VU X1NDQU5fRU5BQkxFLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5VTEwsIE5VTEwsIE5V TEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgYm9vbCByZWN2X2RlcmVnaXN0ZXIoc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50 OF90IGZpbHRlcl9pZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGJ0X2hjaV9jbWRfbGVfc2V0X3Nj YW5fZW5hYmxlIGNtZDsNCj4gPiArCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUgKnB2dCA9IGlvLT5w dnQ7DQo+ID4gKw0KPiA+ICsJc3RydWN0IHB2dF9yeF9yZWcgKnJ4X3JlZzsNCj4gPiArDQo+ID4g KwlyeF9yZWcgPSBsX3F1ZXVlX3JlbW92ZV9pZihwdnQtPnJ4X3JlZ3MsIGZpbmRfYnlfZmlsdGVy X2lkLA0KPiA+ICsJCQkJCQlMX1VJTlRfVE9fUFRSKGZpbHRlcl9pZCkpOw0KPiA+ICsNCj4gPiAr CWlmIChyeF9yZWcpDQo+ID4gKwkJbF9mcmVlKHJ4X3JlZyk7DQo+ID4gKw0KPiA+ICsJaWYgKGxf cXVldWVfaXNlbXB0eShwdnQtPnJ4X3JlZ3MpKSB7DQo+ID4gKwkJY21kLmVuYWJsZSA9IDB4MDA7 CS8qIERpc2FibGUgc2Nhbm5pbmcgKi8NCj4gPiArCQljbWQuZmlsdGVyX2R1cCA9IDB4MDA7CS8q IFJlcG9ydCBkdXBsaWNhdGVzICovDQo+ID4gKwkJYnRfaGNpX3NlbmQocHZ0LT5oY2ksIEJUX0hD SV9DTURfTEVfU0VUX1NDQU5fRU5BQkxFLA0KPiA+ICsJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIE5V TEwsIE5VTEwsIE5VTEwpOw0KPiA+ICsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gdHJ1 ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgZmlsdGVyX3NldChzdHJ1Y3QgbWVz aF9pbyAqaW8sDQo+ID4gKwkJdWludDhfdCBmaWx0ZXJfaWQsIGNvbnN0IHVpbnQ4X3QgKmRhdGEs IHVpbnQ4X3QgbGVuLA0KPiA+ICsJCW1lc2hfaW9fc3RhdHVzX2Z1bmNfdCBjYWxsYmFjaywgdm9p ZCAqdXNlcl9kYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbWVzaF9pb19wcml2YXRlICpwdnQg PSBpby0+cHZ0Ow0KPiA+ICsNCj4gPiArCWxfaW5mbygiJXMgaWQ6ICVkLCAtLT4gJTIuMngiLCBf X2Z1bmNfXywgZmlsdGVyX2lkLCBkYXRhWzBdKTsNCj4gPiArCWlmICghZGF0YSB8fCAhbGVuIHx8 ICFmaWx0ZXJfaWQgfHwgZmlsdGVyX2lkID4gc2l6ZW9mKHB2dC0+ZmlsdGVycykpDQo+ID4gKwkJ cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArCXB2dC0+ZmlsdGVyc1tmaWx0ZXJfaWQgLSAxXSA9 IGRhdGFbMF07DQo+ID4gKw0KPiA+ICsJLyogVE9ETzogRGVsYXllZCBDYWxsIHRvIHN1Y2Nlc3Nm dWwgc3RhdHVzICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ ID4gK2NvbnN0IHN0cnVjdCBtZXNoX2lvX2FwaSBtZXNoX2lvX2dlbmVyaWMgPSB7DQo+ID4gKwku aW5pdCA9IGRldl9pbml0LA0KPiA+ICsJLmRlc3Ryb3kgPSBkZXZfZGVzdHJveSwNCj4gPiArCS5j YXBzID0gZGV2X2NhcHMsDQo+ID4gKwkuc2VuZCA9IHNlbmRfdHgsDQo+ID4gKwkucmVnID0gcmVj dl9yZWdpc3RlciwNCj4gPiArCS5kZXJlZyA9IHJlY3ZfZGVyZWdpc3RlciwNCj4gPiArCS5zZXQg PSBmaWx0ZXJfc2V0LA0KPiA+ICsJLmNhbmNlbCA9IHR4X2NhbmNlbCwNCj4gPiArfTsNCj4gPiBk aWZmIC0tZ2l0IGEvbWVzaC9tZXNoLWlvLmMgYi9tZXNoL21lc2gtaW8uYw0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwLi43NjJlYjJjNmYNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvbWVzaC9tZXNoLWlvLmMNCj4gPiBAQCAtMCwwICsxLDE4NyBAQA0K PiA+ICsvKg0KPiA+ICsgKg0KPiA+ICsgKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3Rh Y2sgZm9yIExpbnV4DQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTggIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ ICsgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcg0KPiA+ICsgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiA+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ID4gKyAqICB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N Cj4gPiArICoNCj4gPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VDQo+ID4gKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZmRlZiBIQVZFX0NPTkZJR19I DQo+ID4gKyNpbmNsdWRlIDxjb25maWcuaD4NCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaW5j bHVkZSA8ZWxsL2VsbC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImxpYi9ibHVldG9vdGguaCIN Cj4gPiArI2luY2x1ZGUgImxpYi9oY2kuaCINCj4gPiArDQo+ID4gKyNpbmNsdWRlICJtZXNoL21l c2gtZGVmcy5oIg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm1lc2gvbWVzaC1pby5oIg0KPiA+ICsj aW5jbHVkZSAibWVzaC9tZXNoLWlvLWFwaS5oIg0KPiA+ICsNCj4gPiArLyogTGlzdCBvZiBNZXNo LUlPIFR5cGUgaGVhZGVycyAqLw0KPiA+ICsjaW5jbHVkZSAibWVzaC9tZXNoLWlvLWdlbmVyaWMu aCINCj4gPiArDQo+ID4gKy8qIExpc3Qgb2YgU3VwcG9ydGVkIE1lc2gtSU8gVHlwZXMgKi8NCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZXNoX2lvX3RhYmxlIHRhYmxlW10gPSB7DQo+ID4gKwl7 TUVTSF9JT19UWVBFX0dFTkVSSUMsCSZtZXNoX2lvX2dlbmVyaWN9LA0KPiA+ICt9Ow0KPiANCj4g CXsgTUVTSC4uLCAmbWVzaC4uIH0NCg0KRml4ZWQgaW4gdjYNCg0KPiA+ICsNCj4gPiArc3RhdGlj IHN0cnVjdCBsX3F1ZXVlICppb19saXN0Ow0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbWF0Y2hf YnlfaW8oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJcmV0dXJu IGEgPT0gYjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbWF0Y2hfYnlfaW5kZXgo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikNCj4gPiArew0KPiA+ICsJY29uc3Qgc3RydWN0 IG1lc2hfaW8gKmlvID0gYTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaW8tPmluZGV4ID09IExfUFRS X1RPX1VJTlQoYik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCBtZXNoX2lvICptZXNoX2lv X25ldyh1aW50MTZfdCBpbmRleCwgZW51bSBtZXNoX2lvX3R5cGUgdHlwZSkNCj4gPiArew0KPiA+ ICsJY29uc3Qgc3RydWN0IG1lc2hfaW9fYXBpCSphcGkgPSBOVUxMOw0KPiA+ICsJc3RydWN0IG1l c2hfaW8JCQkqaW87DQo+ID4gKwl1aW50MTZfdAkJCWk7DQo+IA0KPiBObyBhbGlnbm1lbnQgb2Yg dmFyaWFibGUgbmFtZXMgcGxlYXNlLg0KDQpGaXhlZCBpbiB2Ng0KDQo+ID4gKw0KPiA+ICsJbF9p bmZvKCIlcyAlZFxuIiwgX19mdW5jX18sIHR5cGUpOw0KPiANCj4gRW1wdHkgbGluZSBoZXJlLg0K DQpGaXhlZCBpbiB2Ng0KDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgTF9BUlJBWV9TSVpFKHRhYmxl KTsgaSsrKSB7DQo+ID4gKwkJaWYgKHRhYmxlW2ldLnR5cGUgPT0gdHlwZSkgew0KPiA+ICsJCQlh cGkgPSB0YWJsZVtpXS5hcGk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChpb19saXN0LCBtYXRjaF9ieV9pbmRleCwgTF9V SU5UX1RPX1BUUihpbmRleCkpOw0KPiA+ICsNCj4gPiArCWlmIChhcGkgPT0gTlVMTCB8fCBhcGkt PmluaXQgPT0gTlVMTCB8fCBpbyAhPSBOVUxMKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiA+ICsN Cj4gPiArCWlvID0gbF9uZXcoc3RydWN0IG1lc2hfaW8sIDEpOw0KPiA+ICsNCj4gPiArCWlmIChp byA9PSBOVUxMKQ0KPiA+ICsJCXJldHVybiBOVUxMOw0KPiANCj4gVXNlIGlmICghaW8pLg0KDQpG aXhlZCBpbiB2Ng0KDQo+ID4gKw0KPiA+ICsJaW8tPnR5cGUgPSB0eXBlOw0KPiA+ICsJaW8tPmlu ZGV4ID0gaW5kZXg7DQo+ID4gKwlpby0+YXBpID0gYXBpOw0KPiA+ICsJaWYgKCFhcGktPmluaXQo aW5kZXgsIGlvKSkNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4gKw0KPiA+ICsJaWYgKGlvX2xpc3Qg PT0gTlVMTCkNCj4gPiArCQlpb19saXN0ID0gbF9xdWV1ZV9uZXcoKTsNCj4gPiArDQo+ID4gKwlp ZiAoYXBpLT5zZXQpIHsNCj4gPiArCQl1aW50OF90IHBrdCA9IE1FU0hfQURfVFlQRV9ORVRXT1JL Ow0KPiA+ICsJCXVpbnQ4X3QgYmVjID0gTUVTSF9BRF9UWVBFX0JFQUNPTjsNCj4gPiArCQl1aW50 OF90IHBydiA9IE1FU0hfQURfVFlQRV9QUk9WSVNJT047DQo+ID4gKw0KPiA+ICsJCWFwaS0+c2V0 KGlvLCAxLCAmYmVjLCAxLCBOVUxMLCBOVUxMKTsNCj4gPiArCQlhcGktPnNldChpbywgMiwgJnBy diwgMSwgTlVMTCwgTlVMTCk7DQo+ID4gKwkJYXBpLT5zZXQoaW8sIDMsICZwa3QsIDEsIE5VTEws IE5VTEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChsX3F1ZXVlX3B1c2hfaGVhZChpb19s aXN0LCBpbykpDQo+ID4gKwkJcmV0dXJuIGlvOw0KPiA+ICsNCj4gPiArZmFpbDoNCj4gPiArCWlm IChhcGktPmRlc3Ryb3kpDQo+ID4gKwkJYXBpLT5kZXN0cm95KGlvKTsNCj4gPiArDQo+ID4gKwls X2ZyZWUoaW8pOw0KPiA+ICsJcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQg bWVzaF9pb19kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbykNCj4gPiArew0KPiA+ICsJaW8gPSBs X3F1ZXVlX3JlbW92ZV9pZihpb19saXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiAr CWlmIChpbyAmJiBpby0+YXBpICYmIGlvLT5hcGktPmRlc3Ryb3kpDQo+ID4gKwkJaW8tPmFwaS0+ ZGVzdHJveShpbyk7DQo+ID4gKw0KPiA+ICsJbF9mcmVlKGlvKTsNCj4gPiArDQo+ID4gKwlpZiAo bF9xdWV1ZV9pc2VtcHR5KGlvX2xpc3QpKSB7DQo+ID4gKwkJbF9xdWV1ZV9kZXN0cm95KGlvX2xp c3QsIE5VTEwpOw0KPiA+ICsJCWlvX2xpc3QgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtib29sIG1lc2hfaW9fZ2V0X2NhcHMoc3RydWN0IG1lc2hfaW8gKmlvLCBzdHJ1Y3Qg bWVzaF9pb19jYXBzICpjYXBzKQ0KPiA+ICt7DQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChpb19s aXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiArCWlmIChpbyAmJiBpby0+YXBpICYm IGlvLT5hcGktPmNhcHMpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPmNhcHMoaW8sIGNhcHMpOw0K PiA+ICsNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNo X2lvX3JlZ2lzdGVyX3JlY3ZfY2Ioc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90IGZpbHRlcl9p ZCwNCj4gPiArCQkJCW1lc2hfaW9fcmVjdl9mdW5jX3QgY2IsIHZvaWQgKnVzZXJfZGF0YSkNCj4g PiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsN Cj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAmJiBpby0+YXBpLT5yZWcpDQo+ID4gKwkJ cmV0dXJuIGlvLT5hcGktPnJlZyhpbywgZmlsdGVyX2lkLCBjYiwgdXNlcl9kYXRhKTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgbWVzaF9pb19k ZXJlZ2lzdGVyX3JlY3ZfY2Ioc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90IGZpbHRlcl9pZCkN Cj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlv KTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAmJiBpby0+YXBpLT5kZXJlZykNCj4g PiArCQlyZXR1cm4gaW8tPmFwaS0+ZGVyZWcoaW8sIGZpbHRlcl9pZCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtib29sIG1lc2hfc2V0X2ZpbHRlcihz dHJ1Y3QgbWVzaF9pbyAqaW8sIHVpbnQ4X3QgZmlsdGVyX2lkLA0KPiA+ICsJCQkJY29uc3QgdWlu dDhfdCAqZGF0YSwgdWludDhfdCBsZW4sDQo+ID4gKwkJCQltZXNoX2lvX3N0YXR1c19mdW5jX3Qg Y2IsIHZvaWQgKnVzZXJfZGF0YSkNCj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQoaW9f bGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFwaSAm JiBpby0+YXBpLT5zZXQpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPnNldChpbywgZmlsdGVyX2lk LCBkYXRhLCBsZW4sIGNiLCB1c2VyX2RhdGEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBmYWxzZTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArYm9vbCBtZXNoX2lvX3NlbmQoc3RydWN0IG1lc2hfaW8gKmlv LCBzdHJ1Y3QgbWVzaF9pb19zZW5kX2luZm8gKmluZm8sDQo+ID4gKwkJCQkJY29uc3QgdWludDhf dCAqZGF0YSwgdWludDE2X3QgbGVuKQ0KPiA+ICt7DQo+ID4gKwlpbyA9IGxfcXVldWVfZmluZChp b19saXN0LCBtYXRjaF9ieV9pbywgaW8pOw0KPiA+ICsNCj4gPiArCWlmIChpbyAmJiBpby0+YXBp ICYmIGlvLT5hcGktPnNlbmQpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPnNlbmQoaW8sIGluZm8s IGRhdGEsIGxlbik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtib29sIG1lc2hfaW9fc2VuZF9jYW5jZWwoc3RydWN0IG1lc2hfaW8gKmlvLCB1aW50OF90 ICpwYXR0ZXJuLCB1aW50OF90IGxlbikNCj4gPiArew0KPiA+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQo aW9fbGlzdCwgbWF0Y2hfYnlfaW8sIGlvKTsNCj4gPiArDQo+ID4gKwlpZiAoaW8gJiYgaW8tPmFw aSAmJiBpby0+YXBpLT5jYW5jZWwpDQo+ID4gKwkJcmV0dXJuIGlvLT5hcGktPmNhbmNlbChpbywg cGF0dGVybiwgbGVuKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gDQo+ IFJlZ2FyZHMNCj4gDQo+IE1hcmNlbA0KPiA=