From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex =?utf-8?Q?Benn=C3=A9e?= Subject: Re: [PATCH v3 1/4] VSOCK: Introduce virtio-vsock-common.ko Date: Thu, 10 Dec 2015 10:17:07 +0000 Message-ID: <87k2omppzw.fsf@linaro.org> References: <1449662633-26623-1-git-send-email-stefanha@redhat.com> <1449662633-26623-2-git-send-email-stefanha@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" , netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Matt Benjamin , Asias He , Christoffer Dall , matt.ma@linaro.org To: Stefan Hajnoczi Return-path: In-reply-to: <1449662633-26623-2-git-send-email-stefanha@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org ClN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4gd3JpdGVzOgoKPiBGcm9tOiBB c2lhcyBIZSA8YXNpYXNAcmVkaGF0LmNvbT4KPgo+IFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBj b21tb24gY29kZSBhbmQgaGVhZGVyIGZpbGVzIGZvciB0aGUgZm9sbG93aW5nCj4gdmlydGlvLXZz b2NrIGFuZCB2aXJ0aW8tdmhvc3Qga2VybmVsIG1vZHVsZXMuCgpHZW5lcmFsIGNvbW1lbnQgY2hl Y2twYXRjaCBoYXMgYSBidW5jaCBvZiB3YXJuaW5ncyBhYm91dCA4MCBjaGFyYWN0ZXIKbGltaXRz LCBleHRyYSBicmFjZXMgYW5kIEJVR19PTiB1c2FnZS4KCj4KPiBTaWduZWQtb2ZmLWJ5OiBBc2lh cyBIZSA8YXNpYXNAcmVkaGF0LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFqbm9jemkg PHN0ZWZhbmhhQHJlZGhhdC5jb20+Cj4gLS0tCj4gdjM6Cj4gICogUmVtb3ZlIHVubmVjZXNzYXJ5 IDMtd2F5IGhhbmRzaGFrZSwganVzdCBkbyBSRVFVRVNUL1JFU1BPTlNFIGluc3RlYWQKPiAgICBv ZiBSRVFVRVNUL1JFU1BPTlNFL0FDSwo+ICAqIFJlbW92ZSBTT0NLX0RHUkFNIHN1cHBvcnQgYW5k IGZvY3VzIG9uIFNPQ0tfU1RSRUFNIGZpcnN0Cj4gICogT25seSBhbGxvdyBob3N0LT5ndWVzdCBj b25uZWN0aW9ucyAoc2FtZSBzZWN1cml0eSBtb2RlbCBhcyBsYXRlc3QKPiAgICBWTXdhcmUpCj4g djI6Cj4gICogRml4IHBlZXJfYnVmX2FsbG9jIGluaGVyaXRhbmNlIG9uIGNoaWxkIHNvY2tldAo+ ICAqIE5vdGlmeSBvdGhlciBzaWRlIG9mIFNPQ0tfU1RSRUFNIGRpc2Nvbm5lY3QgKGZpeGVzIHNo dXRkb3duCj4gICAgc2VtYW50aWNzKQo+ICAqIEF2b2lkIHJlY3Vyc2l2ZSBtdXRleF9sb2NrKHR4 X2xvY2spIGZvciB3cml0ZV9zcGFjZSAoZml4ZXMgZGVhZGxvY2spCj4gICogRGVmaW5lIFZJUlRJ T19WU09DS19UWVBFX1NUUkVBTS9ER1JBTSBoYXJkd2FyZSBpbnRlcmZhY2UgY29uc3RhbnRzCj4g ICogRGVmaW5lIFZJUlRJT19WU09DS19TSFVURE9XTl9SQ1YvU0VORCBoYXJkd2FyZSBpbnRlcmZh Y2UgY29uc3RhbnRzCj4gLS0tCj4gIGluY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmggICAgICAg ICAgICB8IDIwMyArKysrKysrKwo+ICBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5oICAg ICAgICAgfCAgIDEgKwo+ICBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3Zzb2NrLmggICAgICAg fCAgODcgKysrKwo+ICBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgfCA4 NTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAx MTQ1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvdmly dGlvX3Zzb2NrLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC92aXJ0 aW9fdnNvY2suaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L3Ztd192c29jay92aXJ0aW9fdHJh bnNwb3J0X2NvbW1vbi5jCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fdnNv Y2suaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLmU1NGViNDUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVk ZS9saW51eC92aXJ0aW9fdnNvY2suaAo+IEBAIC0wLDAgKzEsMjAzIEBACj4gKy8qCj4gKyAqIFRo aXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBs aWNlbnNlZCBzbwo+ICsgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVt ZW50IGNvbXBhdGlibGUKPiBkcml2ZXJzL3NlcnZlcnM6CgpJcyBhbnl0aGluZyBpbiBoZXJlIGFj dHVhbGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHRoZSBndWVzdD8gVGhlCiNpZmRlZiBfX0tF Uk5FTF9fIHN0YXRlbWVudCBzZWVtcyByZWR1bmRhbnQgZm9yIHRoaXMgZmlsZSBhdCBsZWFzdC4K Cj4gKyAqCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1l dDoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5h bWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwo+ICsgKiAgICBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUKPiArICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE RVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiAr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQo+ICsgKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAo+ICsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUwo+ICsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKPiArICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKPiArICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQo+ICsgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCj4gKyAq IFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIw MTMtMjAxNQo+ICsgKiBDb3B5cmlnaHQgKEMpIEFzaWFzIEhlIDxhc2lhc0ByZWRoYXQuY29tPiwg MjAxMwo+ICsgKiBDb3B5cmlnaHQgKEMpIFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0 LmNvbT4sIDIwMTUKPiArICovCj4gKwo+ICsjaWZuZGVmIF9MSU5VWF9WSVJUSU9fVlNPQ0tfSAo+ ICsjZGVmaW5lIF9MSU5VWF9WSVJUSU9fVlNPQ0tfSAo+ICsKPiArI2luY2x1ZGUgPHVhcGkvbGlu dXgvdmlydGlvX3Zzb2NrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KPiArI2luY2x1 ZGUgPG5ldC9zb2NrLmg+Cj4gKwo+ICsjZGVmaW5lIFZJUlRJT19WU09DS19ERUZBVUxUX01JTl9C VUZfU0laRQkxMjgKPiArI2RlZmluZSBWSVJUSU9fVlNPQ0tfREVGQVVMVF9CVUZfU0laRQkJKDEw MjQgKiAyNTYpCj4gKyNkZWZpbmUgVklSVElPX1ZTT0NLX0RFRkFVTFRfTUFYX0JVRl9TSVpFCSgx MDI0ICogMjU2KQo+ICsjZGVmaW5lIFZJUlRJT19WU09DS19ERUZBVUxUX1JYX0JVRl9TSVpFCSgx MDI0ICogNCkKPiArI2RlZmluZSBWSVJUSU9fVlNPQ0tfTUFYX0JVRl9TSVpFCQkweEZGRkZGRkZG VUwKPiArI2RlZmluZSBWSVJUSU9fVlNPQ0tfTUFYX1BLVF9CVUZfU0laRQkJKDEwMjQgKiA2NCkK PiArI2RlZmluZSBWSVJUSU9fVlNPQ0tfTUFYX1RYX0JVRl9TSVpFCQkoMTAyNCAqIDEwMjQgKiAx NikKPiArI2RlZmluZSBWSVJUSU9fVlNPQ0tfTUFYX0RHUkFNX1NJWkUJCSgxMDI0ICogNjQpCj4g Kwo+ICtzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90aWZ5X2RhdGE7Cj4gK3N0cnVjdCB2 c29ja190cmFuc3BvcnRfc2VuZF9ub3RpZnlfZGF0YTsKPiArc3RydWN0IHNvY2thZGRyX3ZtOwo+ ICtzdHJ1Y3QgdnNvY2tfc29jazsKPiArCj4gK2VudW0gewo+ICsJVlNPQ0tfVlFfQ1RSTAk9IDAs Cj4gKwlWU09DS19WUV9SWAk9IDEsIC8qIGZvciBob3N0IHRvIGd1ZXN0IGRhdGEgKi8KPiArCVZT T0NLX1ZRX1RYCT0gMiwgLyogZm9yIGd1ZXN0IHRvIGhvc3QgZGF0YSAqLwo+ICsJVlNPQ0tfVlFf TUFYCT0gMywKPiArfTsKPiArCj4gKy8qIHZpcnRpbyB0cmFuc3BvcnQgc29ja2V0IHN0YXRlICov Cj4gK3N0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0IHsKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0 X3BrdF9vcHMJKm9wczsKPiArCXN0cnVjdCB2c29ja19zb2NrICp2c2s7Cj4gKwo+ICsJdTMyIGJ1 Zl9zaXplOwo+ICsJdTMyIGJ1Zl9zaXplX21pbjsKPiArCXUzMiBidWZfc2l6ZV9tYXg7Cj4gKwo+ ICsJc3RydWN0IG11dGV4IHR4X2xvY2s7Cj4gKwlzdHJ1Y3QgbXV0ZXggcnhfbG9jazsKPiArCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3F1ZXVlOwo+ICsJdTMyIHJ4X2J5dGVzOwo+ICsKPiArCS8q IFByb3RlY3RlZCBieSB0cmFucy0+dHhfbG9jayAqLwo+ICsJdTMyIHR4X2NudDsKPiArCXUzMiBi dWZfYWxsb2M7Cj4gKwl1MzIgcGVlcl9md2RfY250Owo+ICsJdTMyIHBlZXJfYnVmX2FsbG9jOwo+ ICsJLyogUHJvdGVjdGVkIGJ5IHRyYW5zLT5yeF9sb2NrICovCj4gKwl1MzIgZndkX2NudDsKPiAr fTsKPiArCj4gK3N0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0IHsKPiArCXN0cnVjdCB2aXJ0aW9fdnNv Y2tfaGRyCWhkcjsKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0CSp0cmFuczsKPiArCXN0cnVj dCB3b3JrX3N0cnVjdCB3b3JrOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJdm9pZCAq YnVmOwo+ICsJdTMyIGxlbjsKPiArCXUzMiBvZmY7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlv X3Zzb2NrX3BrdF9pbmZvIHsKPiArCXUzMiByZW1vdGVfY2lkLCByZW1vdGVfcG9ydDsKPiArCXN0 cnVjdCBtc2doZHIgKm1zZzsKPiArCXUzMiBwa3RfbGVuOwo+ICsJdTE2IHR5cGU7Cj4gKwl1MTYg b3A7Cj4gKwl1MzIgZmxhZ3M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydF9w a3Rfb3BzIHsKPiArCWludCAoKnNlbmRfcGt0KShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJ CQlzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvICppbmZvKTsKPiArfTsKPiArCj4gK3ZvaWQg dmlydGlvX3Zzb2NrX2R1bXBwa3QoY29uc3QgY2hhciAqZnVuYywKPiArCQkJICBjb25zdCBzdHJ1 Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0KTsKPiArCj4gK3N0cnVjdCBzb2NrICoKPiArdmlydGlv X3RyYW5zcG9ydF9nZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqbGlzdGVuZXIsCj4gKwkJCSAgICAg c3RydWN0IHZpcnRpb192c29ja19wa3QgKnBrdCk7Cj4gK3N0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0 ICoKPiArdmlydGlvX3RyYW5zcG9ydF9hbGxvY19wa3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywK PiArCQkJICAgc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyAqaW5mbywKPiArCQkJICAgc2l6 ZV90IGxlbiwKPiArCQkJICAgdTMyIHNyY19jaWQsCj4gKwkJCSAgIHUzMiBzcmNfcG9ydCwKPiAr CQkJICAgdTMyIGRzdF9jaWQsCj4gKwkJCSAgIHUzMiBkc3RfcG9ydCk7Cj4gK3NzaXplX3QKPiAr dmlydGlvX3RyYW5zcG9ydF9zdHJlYW1fZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ ICsJCQkJc3RydWN0IG1zZ2hkciAqbXNnLAo+ICsJCQkJc2l6ZV90IGxlbiwKPiArCQkJCWludCB0 eXBlKTsKPiAraW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfZGdyYW1fZGVxdWV1ZShzdHJ1Y3QgdnNv Y2tfc29jayAqdnNrLAo+ICsJCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLAo+ICsJCQkgICAg ICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsKPiArCj4gK3M2NCB2aXJ0aW9fdHJhbnNwb3J0X3N0 cmVhbV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiArczY0IHZpcnRpb190cmFu c3BvcnRfc3RyZWFtX2hhc19zcGFjZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiArCj4gK2lu dCB2aXJ0aW9fdHJhbnNwb3J0X2RvX3NvY2tldF9pbml0KHN0cnVjdCB2c29ja19zb2NrICp2c2ss Cj4gKwkJCQkgc3RydWN0IHZzb2NrX3NvY2sgKnBzayk7Cj4gK3U2NCB2aXJ0aW9fdHJhbnNwb3J0 X2dldF9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiArdTY0IHZpcnRpb190 cmFuc3BvcnRfZ2V0X21pbl9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiAr dTY0IHZpcnRpb190cmFuc3BvcnRfZ2V0X21heF9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29j ayAqdnNrKTsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3NldF9idWZmZXJfc2l6ZShzdHJ1Y3Qg dnNvY2tfc29jayAqdnNrLCB1NjQgdmFsKTsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3NldF9t aW5fYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTY0IHZhbCk7Cj4gK3ZvaWQg dmlydGlvX3RyYW5zcG9ydF9zZXRfbWF4X2J1ZmZlcl9zaXplKHN0cnVjdCB2c29ja19zb2NrICp2 cywgdTY0IHZhbCk7Cj4gK2ludAo+ICt2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9wb2xsX2luKHN0 cnVjdCB2c29ja19zb2NrICp2c2ssCj4gKwkJCQlzaXplX3QgdGFyZ2V0LAo+ICsJCQkJYm9vbCAq ZGF0YV9yZWFkeV9ub3cpOwo+ICtpbnQKPiArdmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcG9sbF9v dXQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKPiArCQkJCSBzaXplX3QgdGFyZ2V0LAo+ICsJCQkJ IGJvb2wgKnNwYWNlX2F2YWlsYWJsZV9ub3cpOwo+ICsKPiAraW50IHZpcnRpb190cmFuc3BvcnRf bm90aWZ5X3JlY3ZfaW5pdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJc2l6ZV90IHRhcmdl dCwgc3RydWN0IHZzb2NrX3RyYW5zcG9ydF9yZWN2X25vdGlmeV9kYXRhICpkYXRhKTsKPiAraW50 IHZpcnRpb190cmFuc3BvcnRfbm90aWZ5X3JlY3ZfcHJlX2Jsb2NrKHN0cnVjdCB2c29ja19zb2Nr ICp2c2ssCj4gKwlzaXplX3QgdGFyZ2V0LCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90 aWZ5X2RhdGEgKmRhdGEpOwo+ICtpbnQgdmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcmVjdl9wcmVf ZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJc2l6ZV90IHRhcmdldCwgc3RydWN0 IHZzb2NrX3RyYW5zcG9ydF9yZWN2X25vdGlmeV9kYXRhICpkYXRhKTsKPiAraW50IHZpcnRpb190 cmFuc3BvcnRfbm90aWZ5X3JlY3ZfcG9zdF9kZXF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ss Cj4gKwlzaXplX3QgdGFyZ2V0LCBzc2l6ZV90IGNvcGllZCwgYm9vbCBkYXRhX3JlYWQsCj4gKwlz dHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90aWZ5X2RhdGEgKmRhdGEpOwo+ICtpbnQgdmly dGlvX3RyYW5zcG9ydF9ub3RpZnlfc2VuZF9pbml0KHN0cnVjdCB2c29ja19zb2NrICp2c2ssCj4g KwlzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3NlbmRfbm90aWZ5X2RhdGEgKmRhdGEpOwo+ICtpbnQg dmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfc2VuZF9wcmVfYmxvY2soc3RydWN0IHZzb2NrX3NvY2sg KnZzaywKPiArCXN0cnVjdCB2c29ja190cmFuc3BvcnRfc2VuZF9ub3RpZnlfZGF0YSAqZGF0YSk7 Cj4gK2ludCB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9zZW5kX3ByZV9lbnF1ZXVlKHN0cnVjdCB2 c29ja19zb2NrICp2c2ssCj4gKwlzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3NlbmRfbm90aWZ5X2Rh dGEgKmRhdGEpOwo+ICtpbnQgdmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfc2VuZF9wb3N0X2VucXVl dWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKPiArCXNzaXplX3Qgd3JpdHRlbiwgc3RydWN0IHZz b2NrX3RyYW5zcG9ydF9zZW5kX25vdGlmeV9kYXRhICpkYXRhKTsKPiArCj4gK3U2NCB2aXJ0aW9f dHJhbnNwb3J0X3N0cmVhbV9yY3ZoaXdhdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiArYm9v bCB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUoc3RydWN0IHZzb2NrX3NvY2sgKnZz ayk7Cj4gK2Jvb2wgdmlydGlvX3RyYW5zcG9ydF9zdHJlYW1fYWxsb3codTMyIGNpZCwgdTMyIHBv cnQpOwo+ICtpbnQgdmlydGlvX3RyYW5zcG9ydF9kZ3JhbV9iaW5kKHN0cnVjdCB2c29ja19zb2Nr ICp2c2ssCj4gKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpOwo+ICtib29sIHZpcnRpb190 cmFuc3BvcnRfZGdyYW1fYWxsb3codTMyIGNpZCwgdTMyIHBvcnQpOwo+ICsKPiAraW50IHZpcnRp b190cmFuc3BvcnRfY29ubmVjdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsKPiArCj4gK2ludCB2 aXJ0aW9fdHJhbnNwb3J0X3NodXRkb3duKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIGludCBtb2Rl KTsKPiArCj4gK3ZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWxlYXNlKHN0cnVjdCB2c29ja19zb2Nr ICp2c2spOwo+ICsKPiArc3NpemVfdAo+ICt2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9lbnF1ZXVl KHN0cnVjdCB2c29ja19zb2NrICp2c2ssCj4gKwkJCQlzdHJ1Y3QgbXNnaGRyICptc2csCj4gKwkJ CQlzaXplX3QgbGVuKTsKPiAraW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfZGdyYW1fZW5xdWV1ZShz dHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJCQkgICAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpy ZW1vdGVfYWRkciwKPiArCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywKPiArCQkJICAgICAg IHNpemVfdCBsZW4pOwo+ICsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2Rlc3RydWN0KHN0cnVj dCB2c29ja19zb2NrICp2c2spOwo+ICsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0 KHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpOwo+ICt2b2lkIHZpcnRpb190cmFuc3BvcnRf ZnJlZV9wa3Qoc3RydWN0IHZpcnRpb192c29ja19wa3QgKnBrdCk7Cj4gK3ZvaWQgdmlydGlvX3Ry YW5zcG9ydF9pbmNfdHhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpOwo+ICt2b2lk IHZpcnRpb190cmFuc3BvcnRfZGVjX3R4X3BrdChzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0 KTsKPiArdTMyIHZpcnRpb190cmFuc3BvcnRfZ2V0X2NyZWRpdChzdHJ1Y3QgdmlydGlvX3RyYW5z cG9ydCAqdHJhbnMsIHUzMiB3YW50ZWQpOwo+ICt2b2lkIHZpcnRpb190cmFuc3BvcnRfcHV0X2Ny ZWRpdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMsIHUzMiBjcmVkaXQpOwo+ICsjZW5k aWYgLyogX0xJTlVYX1ZJUlRJT19WU09DS19IICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC92aXJ0aW9faWRzLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5oCj4g aW5kZXggNzc5MjVmNS4uMTZkY2Y1ZCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgv dmlydGlvX2lkcy5oCj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaAo+IEBA IC0zOSw2ICszOSw3IEBACj4gICNkZWZpbmUgVklSVElPX0lEXzlQCQk5IC8qIDlwIHZpcnRpbyBj b25zb2xlICovCj4gICNkZWZpbmUgVklSVElPX0lEX1JQUk9DX1NFUklBTCAxMSAvKiB2aXJ0aW8g cmVtb3RlcHJvYyBzZXJpYWwgbGluayAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAgICAg ICAxMiAvKiBWaXJ0aW8gY2FpZiAqLwo+ICsjZGVmaW5lIFZJUlRJT19JRF9WU09DSyAgICAgICAg MTMgLyogdmlydGlvIHZzb2NrIHRyYW5zcG9ydCAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9HUFUg ICAgICAgICAgMTYgLyogdmlydGlvIEdQVSAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9JTlBVVCAg ICAgICAgMTggLyogdmlydGlvIGlucHV0ICovCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L3ZpcnRpb192c29jay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb192c29jay5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hYzY0ODNkCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fdnNvY2suaAo+IEBAIC0w LDAgKzEsODcgQEAKPiArLyoKPiArICogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVm IF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCj4gKyAqIGFueW9uZSBjYW4gdXNl IHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnM6 Cj4gKyAqCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1l dDoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5h bWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwo+ICsgKiAgICBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUKPiArICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE RVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiAr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBJQk0gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQo+ICsgKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAo+ICsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUwo+ICsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKPiArICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKPiArICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQo+ICsgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCj4gKyAq IFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIw MTMtMjAxNQo+ICsgKiBDb3B5cmlnaHQgKEMpIEFzaWFzIEhlIDxhc2lhc0ByZWRoYXQuY29tPiwg MjAxMwo+ICsgKiBDb3B5cmlnaHQgKEMpIFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0 LmNvbT4sIDIwMTUKPiArICovCj4gKwo+ICsjaWZuZGVmIF9VQVBJX0xJTlVYX1ZJUlRJT19WU09D S19ICj4gKyNkZWZpbmUgX1VBUElfTElOVVhfVklSVElPX1ZPU0NLX0gKPiArCj4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgo+ICsKPiArc3RydWN0IHZpcnRpb192c29ja19j b25maWcgewo+ICsJX19sZTMyIGd1ZXN0X2NpZDsKPiArCV9fbGUzMiBtYXhfdmlydHF1ZXVlX3Bh aXJzOwo+ICt9Owo+ICsKPiArc3RydWN0IHZpcnRpb192c29ja19oZHIgewo+ICsJX19sZTMyCXNy Y19jaWQ7Cj4gKwlfX2xlMzIJc3JjX3BvcnQ7Cj4gKwlfX2xlMzIJZHN0X2NpZDsKPiArCV9fbGUz Mglkc3RfcG9ydDsKPiArCV9fbGUzMglsZW47Cj4gKwlfX2xlMTYJdHlwZTsJCS8qIGVudW0gdmly dGlvX3Zzb2NrX3R5cGUgKi8KPiArCV9fbGUxNglvcDsJCS8qIGVudW0gdmlydGlvX3Zzb2NrX29w ICovCj4gKwlfX2xlMzIJZmxhZ3M7Cj4gKwlfX2xlMzIJYnVmX2FsbG9jOwo+ICsJX19sZTMyCWZ3 ZF9jbnQ7Cj4gK307Cj4gKwo+ICtlbnVtIHZpcnRpb192c29ja190eXBlIHsKPiArCVZJUlRJT19W U09DS19UWVBFX1NUUkVBTSA9IDEsCj4gK307Cj4gKwo+ICtlbnVtIHZpcnRpb192c29ja19vcCB7 Cj4gKwlWSVJUSU9fVlNPQ0tfT1BfSU5WQUxJRCA9IDAsCj4gKwo+ICsJLyogQ29ubmVjdCBvcGVy YXRpb25zICovCj4gKwlWSVJUSU9fVlNPQ0tfT1BfUkVRVUVTVCA9IDEsCj4gKwlWSVJUSU9fVlNP Q0tfT1BfUkVTUE9OU0UgPSAyLAo+ICsJVklSVElPX1ZTT0NLX09QX1JTVCA9IDMsCj4gKwlWSVJU SU9fVlNPQ0tfT1BfU0hVVERPV04gPSA0LAo+ICsKPiArCS8qIFRvIHNlbmQgcGF5bG9hZCAqLwo+ ICsJVklSVElPX1ZTT0NLX09QX1JXID0gNSwKPiArCj4gKwkvKiBUZWxsIHRoZSBwZWVyIG91ciBj cmVkaXQgaW5mbyAqLwo+ICsJVklSVElPX1ZTT0NLX09QX0NSRURJVF9VUERBVEUgPSA2LAo+ICsJ LyogUmVxdWVzdCB0aGUgcGVlciB0byBzZW5kIHRoZSBjcmVkaXQgaW5mbyB0byB1cyAqLwo+ICsJ VklSVElPX1ZTT0NLX09QX0NSRURJVF9SRVFVRVNUID0gNywKPiArfTsKPiArCj4gKy8qIFZJUlRJ T19WU09DS19PUF9TSFVURE9XTiBmbGFncyB2YWx1ZXMgKi8KPiArZW51bSB2aXJ0aW9fdnNvY2tf c2h1dGRvd24gewo+ICsJVklSVElPX1ZTT0NLX1NIVVRET1dOX1JDViA9IDEsCj4gKwlWSVJUSU9f VlNPQ0tfU0hVVERPV05fU0VORCA9IDIsCj4gK307Cj4gKwo+ICsjZW5kaWYgLyogX1VBUElfTElO VVhfVklSVElPX1ZTT0NLX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9f dHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1v bi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wMjVhMzIzCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24u Ywo+IEBAIC0wLDAgKzEsODU0IEBACj4gKy8qCj4gKyAqIGNvbW1vbiBjb2RlIGZvciB2aXJ0aW8g dnNvY2sKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgUmVkIEhhdCwgSW5jLgo+ ICsgKiBBdXRob3I6IEFzaWFzIEhlIDxhc2lhc0ByZWRoYXQuY29tPgo+ICsgKiAgICAgICAgIFN0 ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4KPiArICoKPiArICogVGhpcyB3b3Jr IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLgo+ ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvY3R5 cGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRp by5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgo+ICsjaW5jbHVkZSA8bGludXgv dmlydGlvX2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlydGlvX3Zzb2NrLmg+Cj4gKwo+ ICsjaW5jbHVkZSA8bmV0L3NvY2suaD4KPiArI2luY2x1ZGUgPG5ldC9hZl92c29jay5oPgo+ICsK PiArdm9pZCB2aXJ0aW9fdnNvY2tfZHVtcHBrdChjb25zdCBjaGFyICpmdW5jLCAgY29uc3Qgc3Ry dWN0IHZpcnRpb192c29ja19wa3QgKnBrdCkKPiArewo+ICsJcHJfZGVidWcoIiVzOiBwa3Q9JXAs IG9wPSVkLCBsZW49JWQsICVkOiVkLS0tJWQ6JWQsIGxlbj0lZFxuIiwKPiArCQkgZnVuYywgcGt0 LAo+ICsJCSBsZTE2X3RvX2NwdShwa3QtPmhkci5vcCksCj4gKwkJIGxlMzJfdG9fY3B1KHBrdC0+ aGRyLmxlbiksCj4gKwkJIGxlMzJfdG9fY3B1KHBrdC0+aGRyLnNyY19jaWQpLAo+ICsJCSBsZTMy X3RvX2NwdShwa3QtPmhkci5zcmNfcG9ydCksCj4gKwkJIGxlMzJfdG9fY3B1KHBrdC0+aGRyLmRz dF9jaWQpLAo+ICsJCSBsZTMyX3RvX2NwdShwa3QtPmhkci5kc3RfcG9ydCksCj4gKwkJIHBrdC0+ bGVuKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdnNvY2tfZHVtcHBrdCk7CgpX aHkgZXhwb3J0IHRoaXMgYXQgYWxsPyBUaGUgb25seSB1c2VycyBhcmUgaW4gdGhpcyBmaWxlIHNv IHlvdSBjb3VsZAptYWtlIGl0IHN0YXRpYy4KCj4gKwo+ICtzdHJ1Y3QgdmlydGlvX3Zzb2NrX3Br dCAqCj4gK3ZpcnRpb190cmFuc3BvcnRfYWxsb2NfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2ss Cj4gKwkJCSAgIHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0X2luZm8gKmluZm8sCj4gKwkJCSAgIHNp emVfdCBsZW4sCj4gKwkJCSAgIHUzMiBzcmNfY2lkLAo+ICsJCQkgICB1MzIgc3JjX3BvcnQsCj4g KwkJCSAgIHUzMiBkc3RfY2lkLAo+ICsJCQkgICB1MzIgZHN0X3BvcnQpCgpjLmYuIGNoZWNrcGF0 Y2gKCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7 Cj4gKwlzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0Owo+ICsJaW50IGVycjsKPiArCj4gKwlC VUdfT04oIXRyYW5zKTsKClNvIGNoZWNrcGF0Y2ggZmxhZ3MgdXAgQlVHX09OIHVzYWdlIGFzIGEg cG90ZW50aWFsIHByb2JsZW0uIFNob3VsZCBhCmJhZGx5IGNvbmZpZ3VyZWQgcmVhbGx5IHRha2Ug b3V0IHRoZSBrZXJuZWwgcmF0aGVyIHRoYW4gZ3JhY2VmdWxseSB3YXJuCmFuZCBmYWlsPwoKPiAr Cj4gKwlwa3QgPSBremFsbG9jKHNpemVvZigqcGt0KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBr dCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlwa3QtPmhkci50eXBlCQk9IGNwdV90b19sZTE2 KGluZm8tPnR5cGUpOwo+ICsJcGt0LT5oZHIub3AJCT0gY3B1X3RvX2xlMTYoaW5mby0+b3ApOwo+ ICsJcGt0LT5oZHIuc3JjX2NpZAk9IGNwdV90b19sZTMyKHNyY19jaWQpOwo+ICsJcGt0LT5oZHIu c3JjX3BvcnQJPSBjcHVfdG9fbGUzMihzcmNfcG9ydCk7Cj4gKwlwa3QtPmhkci5kc3RfY2lkCT0g Y3B1X3RvX2xlMzIoZHN0X2NpZCk7Cj4gKwlwa3QtPmhkci5kc3RfcG9ydAk9IGNwdV90b19sZTMy KGRzdF9wb3J0KTsKPiArCXBrdC0+aGRyLmZsYWdzCQk9IGNwdV90b19sZTMyKGluZm8tPmZsYWdz KTsKPiArCXBrdC0+bGVuCQk9IGxlbjsKPiArCXBrdC0+dHJhbnMJCT0gdHJhbnM7Cj4gKwlwa3Qt Pmhkci5sZW4JCT0gY3B1X3RvX2xlMzIobGVuKTsKPiArCj4gKwlpZiAoaW5mby0+bXNnICYmIGxl biA+IDApIHsKPiArCQlwa3QtPmJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKPiArCQlp ZiAoIXBrdC0+YnVmKQo+ICsJCQlnb3RvIG91dF9wa3Q7Cj4gKwkJZXJyID0gbWVtY3B5X2Zyb21f bXNnKHBrdC0+YnVmLCBpbmZvLT5tc2csIGxlbik7Cj4gKwkJaWYgKGVycikKPiArCQkJZ290byBv dXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHBrdDsKPiArCj4gK291dDoKPiArCWtmcmVlKHBrdC0+ YnVmKTsKPiArb3V0X3BrdDoKPiArCWtmcmVlKHBrdCk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X2FsbG9jX3BrdCk7Cj4gKwo+ICtz dHJ1Y3Qgc29jayAqCj4gK3ZpcnRpb190cmFuc3BvcnRfZ2V0X3BlbmRpbmcoc3RydWN0IHNvY2sg Kmxpc3RlbmVyLAo+ICsJCQkgICAgIHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpCj4gK3sK PiArCXN0cnVjdCB2c29ja19zb2NrICp2bGlzdGVuZXI7Cj4gKwlzdHJ1Y3QgdnNvY2tfc29jayAq dnBlbmRpbmc7Cj4gKwlzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjOwo+ICsJc3RydWN0IHNvY2thZGRy X3ZtIGRzdDsKPiArCXN0cnVjdCBzb2NrICpwZW5kaW5nOwo+ICsKPiArCXZzb2NrX2FkZHJfaW5p dCgmc3JjLCBsZTMyX3RvX2NwdShwa3QtPmhkci5zcmNfY2lkKSwgbGUzMl90b19jcHUocGt0LT5o ZHIuc3JjX3BvcnQpKTsKPiArCXZzb2NrX2FkZHJfaW5pdCgmZHN0LCBsZTMyX3RvX2NwdShwa3Qt Pmhkci5kc3RfY2lkKSwgbGUzMl90b19jcHUocGt0LT5oZHIuZHN0X3BvcnQpKTsKPiArCj4gKwl2 bGlzdGVuZXIgPSB2c29ja19zayhsaXN0ZW5lcik7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZw ZW5kaW5nLCAmdmxpc3RlbmVyLT5wZW5kaW5nX2xpbmtzLAo+ICsJCQkgICAgcGVuZGluZ19saW5r cykgewo+ICsJCWlmICh2c29ja19hZGRyX2VxdWFsc19hZGRyKCZzcmMsICZ2cGVuZGluZy0+cmVt b3RlX2FkZHIpICYmCj4gKwkJICAgIHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoJmRzdCwgJnZwZW5k aW5nLT5sb2NhbF9hZGRyKSkgewo+ICsJCQlwZW5kaW5nID0gc2tfdnNvY2sodnBlbmRpbmcpOwo+ ICsJCQlzb2NrX2hvbGQocGVuZGluZyk7Cj4gKwkJCXJldHVybiBwZW5kaW5nOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9f dHJhbnNwb3J0X2dldF9wZW5kaW5nKTsKPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb190cmFuc3Bv cnRfaW5jX3J4X3BrdChzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0KQo+ICt7Cj4gKwlwa3Qt PnRyYW5zLT5yeF9ieXRlcyArPSBwa3QtPmxlbjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmly dGlvX3RyYW5zcG9ydF9kZWNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpCj4g K3sKPiArCXBrdC0+dHJhbnMtPnJ4X2J5dGVzIC09IHBrdC0+bGVuOwo+ICsJcGt0LT50cmFucy0+ ZndkX2NudCArPSBwa3QtPmxlbjsKPiArfQo+ICsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2lu Y190eF9wa3Qoc3RydWN0IHZpcnRpb192c29ja19wa3QgKnBrdCkKPiArewo+ICsJbXV0ZXhfbG9j aygmcGt0LT50cmFucy0+dHhfbG9jayk7Cj4gKwlwa3QtPmhkci5md2RfY250ID0gY3B1X3RvX2xl MzIocGt0LT50cmFucy0+ZndkX2NudCk7Cj4gKwlwa3QtPmhkci5idWZfYWxsb2MgPSBjcHVfdG9f bGUzMihwa3QtPnRyYW5zLT5idWZfYWxsb2MpOwo+ICsJbXV0ZXhfdW5sb2NrKCZwa3QtPnRyYW5z LT50eF9sb2NrKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X2lu Y190eF9wa3QpOwo+ICsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2RlY190eF9wa3Qoc3RydWN0 IHZpcnRpb192c29ja19wa3QgKnBrdCkKPiArewo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZp cnRpb190cmFuc3BvcnRfZGVjX3R4X3BrdCk7Cj4gKwo+ICt1MzIgdmlydGlvX3RyYW5zcG9ydF9n ZXRfY3JlZGl0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucywgdTMyIGNyZWRpdCkKPiAr ewo+ICsJdTMyIHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZ0cmFucy0+dHhfbG9jayk7Cj4gKwly ZXQgPSB0cmFucy0+cGVlcl9idWZfYWxsb2MgLSAodHJhbnMtPnR4X2NudCAtIHRyYW5zLT5wZWVy X2Z3ZF9jbnQpOwo+ICsJaWYgKHJldCA+IGNyZWRpdCkKPiArCQlyZXQgPSBjcmVkaXQ7Cj4gKwl0 cmFucy0+dHhfY250ICs9IHJldDsKPiArCW11dGV4X3VubG9jaygmdHJhbnMtPnR4X2xvY2spOwo+ ICsKPiArCXByX2RlYnVnKCIlczogcmV0PSVkLCBidWZfYWxsb2M9JWQsIHBlZXJfYnVmX2FsbG9j PSVkLCIKPiArCQkgInR4X2NudD0lZCwgZndkX2NudD0lZCwgcGVlcl9md2RfY250PSVkXG4iLCBf X2Z1bmNfXywKCkkgdGhpbmsgX19mdW5jX18gaXMgc3VwZXJmbHVvdXMgaGVyZSBhcyB0aGUgZHlu YW1pYyBwcmludCBjb2RlIGFscmVhZHkKaGFzIGl0IGFuZCBjYW4gcHJpbnQgaXQgd2hlbiByZXF1 aXJlZC4gSGF2aW5nIHNhaWQgdGhhdCB0aGVyZSBzZWVtcyB0bwpiZSBwbGVudHkgb2YgY29kZSBh bHJlYWR5IGluIHRoZSBrZXJuZWwgdGhhdCB1c2VzIF9fZnVuY19fIDotLwoKPiArCQkgcmV0LCB0 cmFucy0+YnVmX2FsbG9jLCB0cmFucy0+cGVlcl9idWZfYWxsb2MsCj4gKwkJIHRyYW5zLT50eF9j bnQsIHRyYW5zLT5md2RfY250LCB0cmFucy0+cGVlcl9md2RfY250KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfZ2V0X2NyZWRp dCk7Cj4gKwo+ICt2b2lkIHZpcnRpb190cmFuc3BvcnRfcHV0X2NyZWRpdChzdHJ1Y3QgdmlydGlv X3RyYW5zcG9ydCAqdHJhbnMsIHUzMiBjcmVkaXQpCj4gK3sKPiArCW11dGV4X2xvY2soJnRyYW5z LT50eF9sb2NrKTsKPiArCXRyYW5zLT50eF9jbnQgLT0gY3JlZGl0Owo+ICsJbXV0ZXhfdW5sb2Nr KCZ0cmFucy0+dHhfbG9jayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5z cG9ydF9wdXRfY3JlZGl0KTsKPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvX3RyYW5zcG9ydF9zZW5k X2NyZWRpdF91cGRhdGUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgaW50IHR5cGUsIHN0cnVjdCB2 aXJ0aW9fdnNvY2tfaGRyICpoZHIpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0 cmFucyA9IHZzay0+dHJhbnM7Cj4gKwlzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvIGluZm8g PSB7Cj4gKwkJLm9wID0gVklSVElPX1ZTT0NLX09QX0NSRURJVF9VUERBVEUsCj4gKwkJLnR5cGUg PSB0eXBlLAo+ICsJfTsKPiArCj4gKwlwcl9kZWJ1ZygiJXM6IHNrPSVwIHNlbmRfY3JlZGl0X3Vw ZGF0ZVxuIiwgX19mdW5jX18sIHZzayk7CgpBZ2FpbiBzdXBlcmZsdW91cyBfX2Z1bmNfXwoKPiAr CXJldHVybiB0cmFucy0+b3BzLT5zZW5kX3BrdCh2c2ssICZpbmZvKTsKPiArfQo+ICsKPiArc3Rh dGljIHNzaXplX3QKPiArdmlydGlvX3RyYW5zcG9ydF9zdHJlYW1fZG9fZGVxdWV1ZShzdHJ1Y3Qg dnNvY2tfc29jayAqdnNrLAo+ICsJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLAo+ICsJCQkJICAg c2l6ZV90IGxlbikKPiArewo+ICsJc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zID0gdnNr LT50cmFuczsKPiArCXN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3Q7Cj4gKwlzaXplX3QgYnl0 ZXMsIHRvdGFsID0gMDsKPiArCWludCBlcnIgPSAtRUZBVUxUOwo+ICsKPiArCW11dGV4X2xvY2so JnRyYW5zLT5yeF9sb2NrKTsKPiArCXdoaWxlICh0b3RhbCA8IGxlbiAmJiB0cmFucy0+cnhfYnl0 ZXMgPiAwICAmJgo+ICsJCQkhbGlzdF9lbXB0eSgmdHJhbnMtPnJ4X3F1ZXVlKSkgewo+ICsJCXBr dCA9IGxpc3RfZmlyc3RfZW50cnkoJnRyYW5zLT5yeF9xdWV1ZSwKPiArCQkJCSAgICAgICBzdHJ1 Y3QgdmlydGlvX3Zzb2NrX3BrdCwgbGlzdCk7Cj4gKwo+ICsJCWJ5dGVzID0gbGVuIC0gdG90YWw7 Cj4gKwkJaWYgKGJ5dGVzID4gcGt0LT5sZW4gLSBwa3QtPm9mZikKPiArCQkJYnl0ZXMgPSBwa3Qt PmxlbiAtIHBrdC0+b2ZmOwo+ICsKPiArCQllcnIgPSBtZW1jcHlfdG9fbXNnKG1zZywgcGt0LT5i dWYgKyBwa3QtPm9mZiwgYnl0ZXMpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gb3V0Owo+ICsJ CXRvdGFsICs9IGJ5dGVzOwo+ICsJCXBrdC0+b2ZmICs9IGJ5dGVzOwo+ICsJCWlmIChwa3QtPm9m ZiA9PSBwa3QtPmxlbikgewo+ICsJCQl2aXJ0aW9fdHJhbnNwb3J0X2RlY19yeF9wa3QocGt0KTsK PiArCQkJbGlzdF9kZWwoJnBrdC0+bGlzdCk7Cj4gKwkJCXZpcnRpb190cmFuc3BvcnRfZnJlZV9w a3QocGt0KTsKPiArCQl9Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJnRyYW5zLT5yeF9sb2NrKTsK PiArCj4gKwkvKiBTZW5kIGEgY3JlZGl0IHBrdCB0byBwZWVyICovCj4gKwl2aXJ0aW9fdHJhbnNw b3J0X3NlbmRfY3JlZGl0X3VwZGF0ZSh2c2ssIFZJUlRJT19WU09DS19UWVBFX1NUUkVBTSwKPiAr CQkJCQkgICAgTlVMTCk7Cj4gKwo+ICsJcmV0dXJuIHRvdGFsOwo+ICsKPiArb3V0Ogo+ICsJbXV0 ZXhfdW5sb2NrKCZ0cmFucy0+cnhfbG9jayk7Cj4gKwlpZiAodG90YWwpCj4gKwkJZXJyID0gdG90 YWw7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzc2l6ZV90Cj4gK3ZpcnRpb190cmFuc3Bv cnRfc3RyZWFtX2RlcXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKPiArCQkJCXN0cnVjdCBt c2doZHIgKm1zZywKPiArCQkJCXNpemVfdCBsZW4sIGludCBmbGFncykKPiArewo+ICsJaWYgKGZs YWdzICYgTVNHX1BFRUspCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsKPiArCXJldHVybiB2 aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9kb19kZXF1ZXVlKHZzaywgbXNnLCBsZW4pOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfc3RyZWFtX2RlcXVldWUpOwo+ICsK PiAraW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfZGdyYW1fZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29j ayAqdnNrLAo+ICsJCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLAo+ICsJCQkgICAgICAgc2l6 ZV90IGxlbiwgaW50IGZsYWdzKQo+ICt7Cj4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9kZ3JhbV9kZXF1ZXVlKTsKPiArCj4g K3M2NCB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAq dnNrKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2stPnRyYW5z Owo+ICsJczY0IGJ5dGVzOwo+ICsKPiArCW11dGV4X2xvY2soJnRyYW5zLT5yeF9sb2NrKTsKPiAr CWJ5dGVzID0gdHJhbnMtPnJ4X2J5dGVzOwo+ICsJbXV0ZXhfdW5sb2NrKCZ0cmFucy0+cnhfbG9j ayk7Cj4gKwo+ICsJcmV0dXJuIGJ5dGVzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRp b190cmFuc3BvcnRfc3RyZWFtX2hhc19kYXRhKTsKPiArCj4gK3N0YXRpYyBzNjQgdmlydGlvX3Ry YW5zcG9ydF9oYXNfc3BhY2Uoc3RydWN0IHZzb2NrX3NvY2sgKnZzaykKPiArewo+ICsJc3RydWN0 IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCXM2NCBieXRlczsKPiAr Cj4gKwlieXRlcyA9IHRyYW5zLT5wZWVyX2J1Zl9hbGxvYyAtICh0cmFucy0+dHhfY250IC0gdHJh bnMtPnBlZXJfZndkX2NudCk7Cj4gKwlpZiAoYnl0ZXMgPCAwKQo+ICsJCWJ5dGVzID0gMDsKPiAr Cj4gKwlyZXR1cm4gYnl0ZXM7Cj4gK30KPiArCj4gK3M2NCB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVh bV9oYXNfc3BhY2Uoc3RydWN0IHZzb2NrX3NvY2sgKnZzaykKPiArewo+ICsJc3RydWN0IHZpcnRp b190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCXM2NCBieXRlczsKPiArCj4gKwlt dXRleF9sb2NrKCZ0cmFucy0+dHhfbG9jayk7Cj4gKwlieXRlcyA9IHZpcnRpb190cmFuc3BvcnRf aGFzX3NwYWNlKHZzayk7Cj4gKwltdXRleF91bmxvY2soJnRyYW5zLT50eF9sb2NrKTsKPiArCj4g Kwlwcl9kZWJ1ZygiJXM6IGJ5dGVzPSVsbGRcbiIsIF9fZnVuY19fLCBieXRlcyk7Cj4gKwo+ICsJ cmV0dXJuIGJ5dGVzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRf c3RyZWFtX2hhc19zcGFjZSk7Cj4gKwo+ICtpbnQgdmlydGlvX3RyYW5zcG9ydF9kb19zb2NrZXRf aW5pdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJCQkJICAgIHN0cnVjdCB2c29ja19zb2Nr ICpwc2spCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFuczsKPiArCj4gKwl0 cmFucyA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFucyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF0cmFu cykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl2c2stPnRyYW5zID0gdHJhbnM7Cj4gKwl0 cmFucy0+dnNrID0gdnNrOwo+ICsJaWYgKHBzaykgewo+ICsJCXN0cnVjdCB2aXJ0aW9fdHJhbnNw b3J0ICpwdHJhbnMgPSBwc2stPnRyYW5zOwo+ICsJCXRyYW5zLT5idWZfc2l6ZQk9IHB0cmFucy0+ YnVmX3NpemU7Cj4gKwkJdHJhbnMtPmJ1Zl9zaXplX21pbiA9IHB0cmFucy0+YnVmX3NpemVfbWlu Owo+ICsJCXRyYW5zLT5idWZfc2l6ZV9tYXggPSBwdHJhbnMtPmJ1Zl9zaXplX21heDsKPiArCQl0 cmFucy0+cGVlcl9idWZfYWxsb2MgPSBwdHJhbnMtPnBlZXJfYnVmX2FsbG9jOwo+ICsJfSBlbHNl IHsKPiArCQl0cmFucy0+YnVmX3NpemUgPSBWSVJUSU9fVlNPQ0tfREVGQVVMVF9CVUZfU0laRTsK PiArCQl0cmFucy0+YnVmX3NpemVfbWluID0gVklSVElPX1ZTT0NLX0RFRkFVTFRfTUlOX0JVRl9T SVpFOwo+ICsJCXRyYW5zLT5idWZfc2l6ZV9tYXggPSBWSVJUSU9fVlNPQ0tfREVGQVVMVF9NQVhf QlVGX1NJWkU7Cj4gKwl9Cj4gKwo+ICsJdHJhbnMtPmJ1Zl9hbGxvYyA9IHRyYW5zLT5idWZfc2l6 ZTsKPiArCj4gKwlwcl9kZWJ1ZygiJXM6IHRyYW5zLT5idWZfYWxsb2M9JWRcbiIsIF9fZnVuY19f LCB0cmFucy0+YnVmX2FsbG9jKTsKPiArCj4gKwltdXRleF9pbml0KCZ0cmFucy0+cnhfbG9jayk7 Cj4gKwltdXRleF9pbml0KCZ0cmFucy0+dHhfbG9jayk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmdHJh bnMtPnJ4X3F1ZXVlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQ TCh2aXJ0aW9fdHJhbnNwb3J0X2RvX3NvY2tldF9pbml0KTsKPiArCj4gK3U2NCB2aXJ0aW9fdHJh bnNwb3J0X2dldF9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQo+ICt7Cj4gKwlz dHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2stPnRyYW5zOwo+ICsKPiArCXJldHVy biB0cmFucy0+YnVmX3NpemU7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5z cG9ydF9nZXRfYnVmZmVyX3NpemUpOwo+ICsKPiArdTY0IHZpcnRpb190cmFuc3BvcnRfZ2V0X21p bl9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQo+ICt7Cj4gKwlzdHJ1Y3Qgdmly dGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2stPnRyYW5zOwo+ICsKPiArCXJldHVybiB0cmFucy0+ YnVmX3NpemVfbWluOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRf Z2V0X21pbl9idWZmZXJfc2l6ZSk7Cj4gKwo+ICt1NjQgdmlydGlvX3RyYW5zcG9ydF9nZXRfbWF4 X2J1ZmZlcl9zaXplKHN0cnVjdCB2c29ja19zb2NrICp2c2spCj4gK3sKPiArCXN0cnVjdCB2aXJ0 aW9fdHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7Cj4gKwo+ICsJcmV0dXJuIHRyYW5zLT5i dWZfc2l6ZV9tYXg7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9n ZXRfbWF4X2J1ZmZlcl9zaXplKTsKCkFsbCB0aGVzZSBhY2Nlc3NlcyBmdW5jdGlvbnMgc2VlbSBw cmV0dHkgc2ltcGxlLiBNYXliZSB0aGV5IHNob3VsZCBiZQppbmxpbmUgaGVhZGVyIGZ1bmN0aW9u cyBvciBldmVuICNkZWZpbmUgbWFjcm9zPwoKPiArCj4gK3ZvaWQgdmlydGlvX3RyYW5zcG9ydF9z ZXRfYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTY0IHZhbCkKPiArewo+ICsJ c3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCj4gKwlpZiAo dmFsID4gVklSVElPX1ZTT0NLX01BWF9CVUZfU0laRSkKPiArCQl2YWwgPSBWSVJUSU9fVlNPQ0tf TUFYX0JVRl9TSVpFOwo+ICsJaWYgKHZhbCA8IHRyYW5zLT5idWZfc2l6ZV9taW4pCj4gKwkJdHJh bnMtPmJ1Zl9zaXplX21pbiA9IHZhbDsKPiArCWlmICh2YWwgPiB0cmFucy0+YnVmX3NpemVfbWF4 KQo+ICsJCXRyYW5zLT5idWZfc2l6ZV9tYXggPSB2YWw7Cj4gKwl0cmFucy0+YnVmX3NpemUgPSB2 YWw7Cj4gKwl0cmFucy0+YnVmX2FsbG9jID0gdmFsOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BM KHZpcnRpb190cmFuc3BvcnRfc2V0X2J1ZmZlcl9zaXplKTsKPiArCj4gK3ZvaWQgdmlydGlvX3Ry YW5zcG9ydF9zZXRfbWluX2J1ZmZlcl9zaXplKHN0cnVjdCB2c29ja19zb2NrICp2c2ssIHU2NCB2 YWwpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7 Cj4gKwo+ICsJaWYgKHZhbCA+IFZJUlRJT19WU09DS19NQVhfQlVGX1NJWkUpCj4gKwkJdmFsID0g VklSVElPX1ZTT0NLX01BWF9CVUZfU0laRTsKPiArCWlmICh2YWwgPiB0cmFucy0+YnVmX3NpemUp Cj4gKwkJdHJhbnMtPmJ1Zl9zaXplID0gdmFsOwo+ICsJdHJhbnMtPmJ1Zl9zaXplX21pbiA9IHZh bDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3NldF9taW5fYnVm ZmVyX3NpemUpOwo+ICsKPiArdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3NldF9tYXhfYnVmZmVyX3Np emUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgdTY0IHZhbCkKPiArewo+ICsJc3RydWN0IHZpcnRp b190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCj4gKwlpZiAodmFsID4gVklSVElP X1ZTT0NLX01BWF9CVUZfU0laRSkKPiArCQl2YWwgPSBWSVJUSU9fVlNPQ0tfTUFYX0JVRl9TSVpF Owo+ICsJaWYgKHZhbCA8IHRyYW5zLT5idWZfc2l6ZSkKPiArCQl0cmFucy0+YnVmX3NpemUgPSB2 YWw7Cj4gKwl0cmFucy0+YnVmX3NpemVfbWF4ID0gdmFsOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xf R1BMKHZpcnRpb190cmFuc3BvcnRfc2V0X21heF9idWZmZXJfc2l6ZSk7Cj4gKwo+ICtpbnQKPiAr dmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcG9sbF9pbihzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ ICsJCQkJc2l6ZV90IHRhcmdldCwKPiArCQkJCWJvb2wgKmRhdGFfcmVhZHlfbm93KQoKYy5mLiBj aGVja3BhdGNoIGluZGVudGF0aW9uCgo+ICt7Cj4gKwlpZiAodnNvY2tfc3RyZWFtX2hhc19kYXRh KHZzaykpCj4gKwkJKmRhdGFfcmVhZHlfbm93ID0gdHJ1ZTsKPiArCWVsc2UKPiArCQkqZGF0YV9y ZWFkeV9ub3cgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9M X0dQTCh2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9wb2xsX2luKTsKPiArCj4gK2ludAo+ICt2aXJ0 aW9fdHJhbnNwb3J0X25vdGlmeV9wb2xsX291dChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJ CQkJIHNpemVfdCB0YXJnZXQsCj4gKwkJCQkgYm9vbCAqc3BhY2VfYXZhaWxfbm93KQoKY2hlY2tw YXRjaAoKPiArewo+ICsJczY0IGZyZWVfc3BhY2U7Cj4gKwo+ICsJZnJlZV9zcGFjZSA9IHZzb2Nr X3N0cmVhbV9oYXNfc3BhY2UodnNrKTsKPiArCWlmIChmcmVlX3NwYWNlID4gMCkKPiArCQkqc3Bh Y2VfYXZhaWxfbm93ID0gdHJ1ZTsKPiArCWVsc2UgaWYgKGZyZWVfc3BhY2UgPT0gMCkKPiArCQkq c3BhY2VfYXZhaWxfbm93ID0gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfcG9sbF9vdXQpOwo+ICsKPiAraW50 IHZpcnRpb190cmFuc3BvcnRfbm90aWZ5X3JlY3ZfaW5pdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNr LAo+ICsJc2l6ZV90IHRhcmdldCwgc3RydWN0IHZzb2NrX3RyYW5zcG9ydF9yZWN2X25vdGlmeV9k YXRhICpkYXRhKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2 aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9yZWN2X2luaXQpOwo+ICsKPiAraW50IHZpcnRpb190cmFu c3BvcnRfbm90aWZ5X3JlY3ZfcHJlX2Jsb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2ssCj4gKwlz aXplX3QgdGFyZ2V0LCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90aWZ5X2RhdGEgKmRh dGEpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190 cmFuc3BvcnRfbm90aWZ5X3JlY3ZfcHJlX2Jsb2NrKTsKPiArCj4gK2ludCB2aXJ0aW9fdHJhbnNw b3J0X25vdGlmeV9yZWN2X3ByZV9kZXF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssCj4gKwlz aXplX3QgdGFyZ2V0LCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90aWZ5X2RhdGEgKmRh dGEpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190 cmFuc3BvcnRfbm90aWZ5X3JlY3ZfcHJlX2RlcXVldWUpOwo+ICsKPiAraW50IHZpcnRpb190cmFu c3BvcnRfbm90aWZ5X3JlY3ZfcG9zdF9kZXF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssCj4g KwlzaXplX3QgdGFyZ2V0LCBzc2l6ZV90IGNvcGllZCwgYm9vbCBkYXRhX3JlYWQsCj4gKwlzdHJ1 Y3QgdnNvY2tfdHJhbnNwb3J0X3JlY3Zfbm90aWZ5X2RhdGEgKmRhdGEpCj4gK3sKPiArCXJldHVy biAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfbm90aWZ5X3Jl Y3ZfcG9zdF9kZXF1ZXVlKTsKPiArCj4gK2ludCB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9zZW5k X2luaXQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKPiArCXN0cnVjdCB2c29ja190cmFuc3BvcnRf c2VuZF9ub3RpZnlfZGF0YSAqZGF0YSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JU X1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9ub3RpZnlfc2VuZF9pbml0KTsKPiArCj4gK2lu dCB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9zZW5kX3ByZV9ibG9jayhzdHJ1Y3QgdnNvY2tfc29j ayAqdnNrLAo+ICsJc3RydWN0IHZzb2NrX3RyYW5zcG9ydF9zZW5kX25vdGlmeV9kYXRhICpkYXRh KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJh bnNwb3J0X25vdGlmeV9zZW5kX3ByZV9ibG9jayk7Cj4gKwo+ICtpbnQgdmlydGlvX3RyYW5zcG9y dF9ub3RpZnlfc2VuZF9wcmVfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJc3Ry dWN0IHZzb2NrX3RyYW5zcG9ydF9zZW5kX25vdGlmeV9kYXRhICpkYXRhKQo+ICt7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9z ZW5kX3ByZV9lbnF1ZXVlKTsKPiArCj4gK2ludCB2aXJ0aW9fdHJhbnNwb3J0X25vdGlmeV9zZW5k X3Bvc3RfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJc3NpemVfdCB3cml0dGVu LCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0X3NlbmRfbm90aWZ5X2RhdGEgKmRhdGEpCj4gK3sKPiAr CXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfbm90 aWZ5X3NlbmRfcG9zdF9lbnF1ZXVlKTsKClRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIHRoZSBjYWxs aW5nIGNvZGUgc2hvdWxkIGJlIGhhdmluZwppZih0cmFuc3BvcnQtPmZuKSBjaGVja3MgcmF0aGVy IHRoYW4gZmlsbGluZyBzdHVmZiBvdXQgd2lsbCBudWxsCmltcGxlbWVudGF0aW9ucyBidXQgSSBn dWVzcyB0aGF0J3MgYSBxdWVzdGlvbiBiZXR0ZXIgYWltZWQgYXQgdGhlCm1haW50YWluZXJzLgoK PiArCj4gK3U2NCB2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9yY3ZoaXdhdChzdHJ1Y3QgdnNvY2tf c29jayAqdnNrKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2st PnRyYW5zOwo+ICsKPiArCXJldHVybiB0cmFucy0+YnVmX3NpemU7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9zdHJlYW1fcmN2aGl3YXQpOwo+ICsKPiArYm9vbCB2 aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9pc19hY3RpdmUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaykK PiArewo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3Ry YW5zcG9ydF9zdHJlYW1faXNfYWN0aXZlKTsKPiArCj4gK2Jvb2wgdmlydGlvX3RyYW5zcG9ydF9z dHJlYW1fYWxsb3codTMyIGNpZCwgdTMyIHBvcnQpCj4gK3sKPiArCS8qIE9ubHkgYWxsb3cgZ3Vl c3QtPmhvc3QgY29ubmVjdGlvbnMgKi8KPiArCXJldHVybiBjaWQgIT0gVk1BRERSX0NJRF9IT1NU Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfc3RyZWFtX2FsbG93 KTsKPiArCj4gK2ludCB2aXJ0aW9fdHJhbnNwb3J0X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3Nv Y2sgKnZzaywKPiArCQkJCXN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcikKPiArewo+ICsJcmV0dXJu IC1FT1BOT1RTVVBQOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRf ZGdyYW1fYmluZCk7Cj4gKwo+ICtib29sIHZpcnRpb190cmFuc3BvcnRfZGdyYW1fYWxsb3codTMy IGNpZCwgdTMyIHBvcnQpCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICtFWFBPUlRfU1lN Qk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X2RncmFtX2FsbG93KTsKPiArCj4gK2ludCB2aXJ0aW9f dHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaykKPiArewo+ICsJc3RydWN0 IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCXN0cnVjdCB2aXJ0aW9f dnNvY2tfcGt0X2luZm8gaW5mbyA9IHsKPiArCQkub3AgPSBWSVJUSU9fVlNPQ0tfT1BfUkVRVUVT VCwKPiArCQkudHlwZSA9IFZJUlRJT19WU09DS19UWVBFX1NUUkVBTSwKPiArCX07Cj4gKwo+ICsJ cHJfZGVidWcoIiVzOiB2c2s9JXAgc2VuZF9yZXF1ZXN0XG4iLCBfX2Z1bmNfXywgdnNrKTsKPiAr CXJldHVybiB0cmFucy0+b3BzLT5zZW5kX3BrdCh2c2ssICZpbmZvKTsKPiArfQo+ICtFWFBPUlRf U1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X2Nvbm5lY3QpOwo+ICsKPiAraW50IHZpcnRpb190 cmFuc3BvcnRfc2h1dGRvd24oc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgaW50IG1vZGUpCj4gK3sK PiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7Cj4gKwlzdHJ1 Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvIGluZm8gPSB7Cj4gKwkJLm9wID0gVklSVElPX1ZTT0NL X09QX1NIVVRET1dOLAo+ICsJCS50eXBlID0gVklSVElPX1ZTT0NLX1RZUEVfU1RSRUFNLAo+ICsJ CS5mbGFncyA9IChtb2RlICYgUkNWX1NIVVRET1dOID8KPiArCQkJICBWSVJUSU9fVlNPQ0tfU0hV VERPV05fUkNWIDogMCkgfAo+ICsJCQkgKG1vZGUgJiBTRU5EX1NIVVRET1dOID8KPiArCQkJICBW SVJUSU9fVlNPQ0tfU0hVVERPV05fU0VORCA6IDApLAo+ICsJfTsKPiArCj4gKwlwcl9kZWJ1Zygi JXM6IHZzaz0lcDogc2VuZF9zaHV0ZG93blxuIiwgX19mdW5jX18sIHZzayk7Cj4gKwlyZXR1cm4g dHJhbnMtPm9wcy0+c2VuZF9wa3QodnNrLCAmaW5mbyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwodmlydGlvX3RyYW5zcG9ydF9zaHV0ZG93bik7Cj4gKwo+ICt2b2lkIHZpcnRpb190cmFuc3Bv cnRfcmVsZWFzZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQo+ICt7Cj4gKwlzdHJ1Y3Qgc29jayAq c2sgPSAmdnNrLT5zazsKPiArCj4gKwlwcl9kZWJ1ZygiJXM6IHZzaz0lcFxuIiwgX19mdW5jX18s IHZzayk7Cj4gKwo+ICsJLyogVGVsbCBvdGhlciBzaWRlIHRvIHRlcm1pbmF0ZSBjb25uZWN0aW9u ICovCj4gKwlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYgc2stPnNrX3N0YXRlID09 IFNTX0NPTk5FQ1RFRCkgewo+ICsJCXZpcnRpb190cmFuc3BvcnRfc2h1dGRvd24odnNrLCBTSFVU RE9XTl9NQVNLKTsKPiArCX0KPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNw b3J0X3JlbGVhc2UpOwo+ICsKPiAraW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfZGdyYW1fZW5xdWV1 ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAo+ICsJCQkgICAgICAgc3RydWN0IHNvY2thZGRyX3Zt ICpyZW1vdGVfYWRkciwKPiArCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywKPiArCQkJICAg ICAgIHNpemVfdCBkZ3JhbV9sZW4pCj4gK3sKPiArCXJldHVybiAtRU9QTk9UU1VQUDsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X2RncmFtX2VucXVldWUpOwo+ICsK PiArc3NpemVfdAo+ICt2aXJ0aW9fdHJhbnNwb3J0X3N0cmVhbV9lbnF1ZXVlKHN0cnVjdCB2c29j a19zb2NrICp2c2ssCj4gKwkJCQlzdHJ1Y3QgbXNnaGRyICptc2csCj4gKwkJCQlzaXplX3QgbGVu KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2stPnRyYW5zOwo+ ICsJc3RydWN0IHZpcnRpb192c29ja19wa3RfaW5mbyBpbmZvID0gewo+ICsJCS5vcCA9IFZJUlRJ T19WU09DS19PUF9SVywKPiArCQkudHlwZSA9IFZJUlRJT19WU09DS19UWVBFX1NUUkVBTSwKPiAr CQkubXNnID0gbXNnLAo+ICsJCS5wa3RfbGVuID0gbGVuLAo+ICsJfTsKPiArCj4gKwlyZXR1cm4g dHJhbnMtPm9wcy0+c2VuZF9wa3QodnNrLCAmaW5mbyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwodmlydGlvX3RyYW5zcG9ydF9zdHJlYW1fZW5xdWV1ZSk7Cj4gKwo+ICt2b2lkIHZpcnRpb190 cmFuc3BvcnRfZGVzdHJ1Y3Qoc3RydWN0IHZzb2NrX3NvY2sgKnZzaykKPiArewo+ICsJc3RydWN0 IHZpcnRpb190cmFuc3BvcnQgKnRyYW5zID0gdnNrLT50cmFuczsKPiArCj4gKwlwcl9kZWJ1Zygi JXM6IHZzaz0lcFxuIiwgX19mdW5jX18sIHZzayk7Cj4gKwlrZnJlZSh0cmFucyk7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9kZXN0cnVjdCk7Cj4gKwo+ICtzdGF0 aWMgaW50IHZpcnRpb190cmFuc3BvcnRfc2VuZF9yZXNldChzdHJ1Y3QgdnNvY2tfc29jayAqdnNr LAo+ICsJCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpCj4gK3sKPiArCXN0 cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7Cj4gKwlzdHJ1Y3Qgdmly dGlvX3Zzb2NrX3BrdF9pbmZvIGluZm8gPSB7Cj4gKwkJLm9wID0gVklSVElPX1ZTT0NLX09QX1JT VCwKPiArCQkudHlwZSA9IFZJUlRJT19WU09DS19UWVBFX1NUUkVBTSwKPiArCX07Cj4gKwo+ICsJ cHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJLyogU2VuZCBSU1Qgb25seSBpZiB0 aGUgb3JpZ2luYWwgcGt0IGlzIG5vdCBhIFJTVCBwa3QgKi8KPiArCWlmIChsZTE2X3RvX2NwdShw a3QtPmhkci5vcCkgPT0gVklSVElPX1ZTT0NLX09QX1JTVCkKPiArCQlyZXR1cm4gMDsKPiArCj4g KwlyZXR1cm4gdHJhbnMtPm9wcy0+c2VuZF9wa3QodnNrLCAmaW5mbyk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQKPiArdmlydGlvX3RyYW5zcG9ydF9yZWN2X2Nvbm5lY3Rpbmcoc3RydWN0IHNvY2sg KnNrLAo+ICsJCQkJIHN0cnVjdCB2aXJ0aW9fdnNvY2tfcGt0ICpwa3QpCj4gK3sKPiArCXN0cnVj dCB2c29ja19zb2NrICp2c2sgPSB2c29ja19zayhzayk7Cj4gKwlpbnQgZXJyOwo+ICsJaW50IHNr ZXJyOwo+ICsKPiArCXByX2RlYnVnKCIlczogdnNrPSVwXG4iLCBfX2Z1bmNfXywgdnNrKTsKPiAr CXN3aXRjaCAobGUxNl90b19jcHUocGt0LT5oZHIub3ApKSB7Cj4gKwljYXNlIFZJUlRJT19WU09D S19PUF9SRVNQT05TRToKPiArCQlwcl9kZWJ1ZygiJXM6IGdvdCBSRVNQT05TRVxuIiwgX19mdW5j X18pOwo+ICsJCXNrLT5za19zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKPiArCQlzay0+c2tfc29ja2V0 LT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKPiArCQl2c29ja19pbnNlcnRfY29ubmVjdGVkKHZzayk7 Cj4gKwkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFZJUlRJ T19WU09DS19PUF9JTlZBTElEOgo+ICsJCXByX2RlYnVnKCIlczogZ290IGludmFsaWRcbiIsIF9f ZnVuY19fKTsKPiArCQlicmVhazsKPiArCWNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDoKPiArCQlw cl9kZWJ1ZygiJXM6IGdvdCByc3RcbiIsIF9fZnVuY19fKTsKPiArCQlza2VyciA9IEVDT05OUkVT RVQ7Cj4gKwkJZXJyID0gMDsKPiArCQlnb3RvIGRlc3Ryb3k7Cj4gKwlkZWZhdWx0Ogo+ICsJCXBy X2RlYnVnKCIlczogZ290IGRlZlxuIiwgX19mdW5jX18pOwo+ICsJCXNrZXJyID0gRVBST1RPOwo+ ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwkJZ290byBkZXN0cm95Owo+ICsJfQo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtkZXN0cm95Ogo+ICsJdmlydGlvX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHZzaywgcGt0 KTsKPiArCXNrLT5za19zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwo+ICsJc2stPnNrX2VyciA9IHNr ZXJyOwo+ICsJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50Cj4gK3ZpcnRpb190cmFuc3BvcnRfcmVjdl9jb25uZWN0ZWQoc3RydWN0 IHNvY2sgKnNrLAo+ICsJCQkJc3RydWN0IHZpcnRpb192c29ja19wa3QgKnBrdCkKPiArewo+ICsJ c3RydWN0IHZzb2NrX3NvY2sgKnZzayA9IHZzb2NrX3NrKHNrKTsKPiArCXN0cnVjdCB2aXJ0aW9f dHJhbnNwb3J0ICp0cmFucyA9IHZzay0+dHJhbnM7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlz d2l0Y2ggKGxlMTZfdG9fY3B1KHBrdC0+aGRyLm9wKSkgewo+ICsJY2FzZSBWSVJUSU9fVlNPQ0tf T1BfUlc6Cj4gKwkJcGt0LT5sZW4gPSBsZTMyX3RvX2NwdShwa3QtPmhkci5sZW4pOwo+ICsJCXBr dC0+b2ZmID0gMDsKPiArCQlwa3QtPnRyYW5zID0gdHJhbnM7Cj4gKwo+ICsJCW11dGV4X2xvY2so JnRyYW5zLT5yeF9sb2NrKTsKPiArCQl2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QocGt0KTsK PiArCQlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsICZ0cmFucy0+cnhfcXVldWUpOwo+ICsJCW11 dGV4X3VubG9jaygmdHJhbnMtPnJ4X2xvY2spOwo+ICsKPiArCQlzay0+c2tfZGF0YV9yZWFkeShz ayk7Cj4gKwkJcmV0dXJuIGVycjsKPiArCWNhc2UgVklSVElPX1ZTT0NLX09QX0NSRURJVF9VUERB VEU6Cj4gKwkJc2stPnNrX3dyaXRlX3NwYWNlKHNrKTsKPiArCQlicmVhazsKPiArCWNhc2UgVklS VElPX1ZTT0NLX09QX1NIVVRET1dOOgo+ICsJCXByX2RlYnVnKCIlczogZ290IHNodXRkb3duXG4i LCBfX2Z1bmNfXyk7Cj4gKwkJaWYgKGxlMzJfdG9fY3B1KHBrdC0+aGRyLmZsYWdzKSAmIFZJUlRJ T19WU09DS19TSFVURE9XTl9SQ1YpCj4gKwkJCXZzay0+cGVlcl9zaHV0ZG93biB8PSBSQ1ZfU0hV VERPV047Cj4gKwkJaWYgKGxlMzJfdG9fY3B1KHBrdC0+aGRyLmZsYWdzKSAmIFZJUlRJT19WU09D S19TSFVURE9XTl9TRU5EKQo+ICsJCQl2c2stPnBlZXJfc2h1dGRvd24gfD0gU0VORF9TSFVURE9X TjsKPiArCQlpZiAobGUzMl90b19jcHUocGt0LT5oZHIuZmxhZ3MpKQo+ICsJCQlzay0+c2tfc3Rh dGVfY2hhbmdlKHNrKTsKPiArCQlicmVhazsKPiArCWNhc2UgVklSVElPX1ZTT0NLX09QX1JTVDoK PiArCQlwcl9kZWJ1ZygiJXM6IGdvdCByc3RcbiIsIF9fZnVuY19fKTsKPiArCQlzb2NrX3NldF9m bGFnKHNrLCBTT0NLX0RPTkUpOwo+ICsJCXZzay0+cGVlcl9zaHV0ZG93biA9IFNIVVRET1dOX01B U0s7Cj4gKwkJaWYgKHZzb2NrX3N0cmVhbV9oYXNfZGF0YSh2c2spIDw9IDApCj4gKwkJCXNrLT5z a19zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7Cj4gKwkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwkJYnJlYWs7 Cj4gKwl9Cj4gKwo+ICsJdmlydGlvX3RyYW5zcG9ydF9mcmVlX3BrdChwa3QpOwo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICt2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcmVz cG9uc2Uoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKPiArCQkJICAgICAgIHN0cnVjdCB2aXJ0aW9f dnNvY2tfcGt0ICpwa3QpCj4gK3sKPiArCXN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0cmFucyA9 IHZzay0+dHJhbnM7Cj4gKwlzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdF9pbmZvIGluZm8gPSB7Cj4g KwkJLm9wID0gVklSVElPX1ZTT0NLX09QX1JFU1BPTlNFLAo+ICsJCS50eXBlID0gVklSVElPX1ZT T0NLX1RZUEVfU1RSRUFNLAo+ICsJCS5yZW1vdGVfY2lkID0gbGUzMl90b19jcHUocGt0LT5oZHIu c3JjX2NpZCksCj4gKwkJLnJlbW90ZV9wb3J0ID0gbGUzMl90b19jcHUocGt0LT5oZHIuc3JjX3Bv cnQpLAo+ICsJfTsKPiArCj4gKwlwcl9kZWJ1ZygiJXM6IHNlbmRfcmVzcG9uc2VcbiIsIF9fZnVu Y19fKTsKPiArCj4gKwlyZXR1cm4gdHJhbnMtPm9wcy0+c2VuZF9wa3QodnNrLCAmaW5mbyk7Cj4g K30KPiArCj4gKy8qIEhhbmRsZSBzZXJ2ZXIgc29ja2V0ICovCj4gK3N0YXRpYyBpbnQKPiArdmly dGlvX3RyYW5zcG9ydF9yZWN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB2aXJ0aW9f dnNvY2tfcGt0ICpwa3QpCj4gK3sKPiArCXN0cnVjdCB2c29ja19zb2NrICp2c2sgPSB2c29ja19z ayhzayk7Cj4gKwlzdHJ1Y3QgdnNvY2tfc29jayAqdmNoaWxkOwo+ICsJc3RydWN0IHNvY2sgKmNo aWxkOwo+ICsKPiArCWlmIChsZTE2X3RvX2NwdShwa3QtPmhkci5vcCkgIT0gVklSVElPX1ZTT0NL X09QX1JFUVVFU1QpIHsKPiArCQl2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcmVzZXQodnNrLCBwa3Qp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmIChza19hY2NlcHRxX2lzX2Z1 bGwoc2spKSB7Cj4gKwkJdmlydGlvX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHZzaywgcGt0KTsKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiJXM6IGNyZWF0ZSBwZW5k aW5nXG4iLCBfX2Z1bmNfXyk7Cj4gKwljaGlsZCA9IF9fdnNvY2tfY3JlYXRlKHNvY2tfbmV0KHNr KSwgTlVMTCwgc2ssIEdGUF9LRVJORUwsCj4gKwkJCSAgICAgICBzay0+c2tfdHlwZSwgMCk7Cj4g KwlpZiAoIWNoaWxkKSB7Cj4gKwkJdmlydGlvX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHZzaywgcGt0 KTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlzay0+c2tfYWNrX2JhY2tsb2cr KzsKPiArCj4gKwlsb2NrX3NvY2soY2hpbGQpOwo+ICsKPiArCWNoaWxkLT5za19zdGF0ZSA9IFNT X0NPTk5FQ1RFRDsKPiArCj4gKwl2Y2hpbGQgPSB2c29ja19zayhjaGlsZCk7Cj4gKwl2c29ja19h ZGRyX2luaXQoJnZjaGlsZC0+bG9jYWxfYWRkciwgbGUzMl90b19jcHUocGt0LT5oZHIuZHN0X2Np ZCksCj4gKwkJCWxlMzJfdG9fY3B1KHBrdC0+aGRyLmRzdF9wb3J0KSk7Cj4gKwl2c29ja19hZGRy X2luaXQoJnZjaGlsZC0+cmVtb3RlX2FkZHIsIGxlMzJfdG9fY3B1KHBrdC0+aGRyLnNyY19jaWQp LAo+ICsJCQlsZTMyX3RvX2NwdShwa3QtPmhkci5zcmNfcG9ydCkpOwo+ICsKPiArCXZzb2NrX2lu c2VydF9jb25uZWN0ZWQodmNoaWxkKTsKPiArCXZzb2NrX2VucXVldWVfYWNjZXB0KHNrLCBjaGls ZCk7Cj4gKwl2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcmVzcG9uc2UodmNoaWxkLCBwa3QpOwo+ICsK PiArCXJlbGVhc2Vfc29jayhjaGlsZCk7Cj4gKwo+ICsJc2stPnNrX2RhdGFfcmVhZHkoc2spOwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfc3Bh Y2VfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywKPiArCQkJCQkgIHN0cnVjdCB2aXJ0aW9fdnNvY2tf cGt0ICpwa3QpCj4gK3sKPiArCXN0cnVjdCB2c29ja19zb2NrICp2c2sgPSB2c29ja19zayhzayk7 Cj4gKwlzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdHJhbnMgPSB2c2stPnRyYW5zOwo+ICsJYm9v bCBzcGFjZV9hdmFpbGFibGU7Cj4gKwo+ICsJLyogYnVmX2FsbG9jIGFuZCBmd2RfY250IGlzIGFs d2F5cyBpbmNsdWRlZCBpbiB0aGUgaGRyICovCj4gKwltdXRleF9sb2NrKCZ0cmFucy0+dHhfbG9j ayk7Cj4gKwl0cmFucy0+cGVlcl9idWZfYWxsb2MgPSBsZTMyX3RvX2NwdShwa3QtPmhkci5idWZf YWxsb2MpOwo+ICsJdHJhbnMtPnBlZXJfZndkX2NudCA9IGxlMzJfdG9fY3B1KHBrdC0+aGRyLmZ3 ZF9jbnQpOwo+ICsJc3BhY2VfYXZhaWxhYmxlID0gdmlydGlvX3RyYW5zcG9ydF9oYXNfc3BhY2Uo dnNrKTsKPiArCW11dGV4X3VubG9jaygmdHJhbnMtPnR4X2xvY2spOwo+ICsKPiArCWlmIChzcGFj ZV9hdmFpbGFibGUpCj4gKwkJc2stPnNrX3dyaXRlX3NwYWNlKHNrKTsKPiArfQo+ICsKPiArLyog V2UgYXJlIHVuZGVyIHRoZSB2aXJ0aW8tdnNvY2sncyB2c29jay0+cnhfbG9jayBvcgo+ICsgKiB2 aG9zdC12c29jaydzIHZxLT5tdXRleCBsb2NrICovCj4gK3ZvaWQgdmlydGlvX3RyYW5zcG9ydF9y ZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0KQo+ICt7Cj4gKwlzdHJ1Y3Qgdmly dGlvX3RyYW5zcG9ydCAqdHJhbnM7Cj4gKwlzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjLCBkc3Q7Cj4g KwlzdHJ1Y3QgdnNvY2tfc29jayAqdnNrOwo+ICsJc3RydWN0IHNvY2sgKnNrOwo+ICsKPiArCXZz b2NrX2FkZHJfaW5pdCgmc3JjLCBsZTMyX3RvX2NwdShwa3QtPmhkci5zcmNfY2lkKSwgbGUzMl90 b19jcHUocGt0LT5oZHIuc3JjX3BvcnQpKTsKPiArCXZzb2NrX2FkZHJfaW5pdCgmZHN0LCBsZTMy X3RvX2NwdShwa3QtPmhkci5kc3RfY2lkKSwgbGUzMl90b19jcHUocGt0LT5oZHIuZHN0X3BvcnQp KTsKPiArCj4gKwl2aXJ0aW9fdnNvY2tfZHVtcHBrdChfX2Z1bmNfXywgcGt0KTsKPiArCj4gKwlp ZiAobGUxNl90b19jcHUocGt0LT5oZHIudHlwZSkgIT0gVklSVElPX1ZTT0NLX1RZUEVfU1RSRUFN KSB7Cj4gKwkJLyogVE9ETyBzZW5kIFJTVCAqLwoKVE9ETydzIHNob3VsZG4ndCBtYWtlIGl0IGlu dG8gZmluYWwgc3VibWlzc2lvbnMuCgo+ICsJCWdvdG8gZnJlZV9wa3Q7Cj4gKwl9Cj4gKwo+ICsJ LyogVGhlIHNvY2tldCBtdXN0IGJlIGluIGNvbm5lY3RlZCBvciBib3VuZCB0YWJsZQo+ICsJICog b3RoZXJ3aXNlIHNlbmQgcmVzZXQgYmFjawo+ICsJICovCj4gKwlzayA9IHZzb2NrX2ZpbmRfY29u bmVjdGVkX3NvY2tldCgmc3JjLCAmZHN0KTsKPiArCWlmICghc2spIHsKPiArCQlzayA9IHZzb2Nr X2ZpbmRfYm91bmRfc29ja2V0KCZkc3QpOwo+ICsJCWlmICghc2spIHsKPiArCQkJcHJfZGVidWco IiVzOiBjYW4gbm90IGZpbmQgYm91bmRfc29ja2V0XG4iLCBfX2Z1bmNfXyk7Cj4gKwkJCXZpcnRp b192c29ja19kdW1wcGt0KF9fZnVuY19fLCBwa3QpOwo+ICsJCQkvKiBJZ25vcmUgdGhpcyBwa3Qg aW5zdGVhZCBvZiBzZW5kaW5nIHJlc2V0IGJhY2sgKi8KPiArCQkJLyogVE9ETyBzZW5kIGEgUlNU IHVubGVzcyB0aGlzIHBhY2tldCBpcyBhIFJTVAo+ICh0byBhdm9pZCBpbmZpbml0ZSBsb29wcykg Ki8KCkRpdHRvLgoKPiArCQkJZ290byBmcmVlX3BrdDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJdnNr ID0gdnNvY2tfc2soc2spOwo+ICsJdHJhbnMgPSB2c2stPnRyYW5zOwo+ICsJQlVHX09OKCF0cmFu cyk7CgpTZWUgYWJvdmUgcmU6IEJVR19PTgoKPiArCj4gKwl2aXJ0aW9fdHJhbnNwb3J0X3NwYWNl X3VwZGF0ZShzaywgcGt0KTsKPiArCj4gKwlsb2NrX3NvY2soc2spOwo+ICsJc3dpdGNoIChzay0+ c2tfc3RhdGUpIHsKPiArCWNhc2UgVlNPQ0tfU1NfTElTVEVOOgo+ICsJCXZpcnRpb190cmFuc3Bv cnRfcmVjdl9saXN0ZW4oc2ssIHBrdCk7Cj4gKwkJdmlydGlvX3RyYW5zcG9ydF9mcmVlX3BrdChw a3QpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBTU19DT05ORUNUSU5HOgo+ICsJCXZpcnRpb190cmFu c3BvcnRfcmVjdl9jb25uZWN0aW5nKHNrLCBwa3QpOwo+ICsJCXZpcnRpb190cmFuc3BvcnRfZnJl ZV9wa3QocGt0KTsKPiArCQlicmVhazsKPiArCWNhc2UgU1NfQ09OTkVDVEVEOgo+ICsJCXZpcnRp b190cmFuc3BvcnRfcmVjdl9jb25uZWN0ZWQoc2ssIHBrdCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCXZpcnRpb190cmFuc3BvcnRfZnJlZV9wa3QocGt0KTsKPiArCQlicmVhazsKPiAr CX0KPiArCXJlbGVhc2Vfc29jayhzayk7Cj4gKwo+ICsJLyogUmVsZWFzZSByZWZjbnQgb2J0YWlu ZWQgd2hlbiB3ZSBmZXRjaGVkIHRoaXMgc29ja2V0IG91dCBvZiB0aGUKPiArCSAqIGJvdW5kIG9y IGNvbm5lY3RlZCBsaXN0Lgo+ICsJICovCj4gKwlzb2NrX3B1dChzayk7Cj4gKwlyZXR1cm47Cj4g Kwo+ICtmcmVlX3BrdDoKPiArCXZpcnRpb190cmFuc3BvcnRfZnJlZV9wa3QocGt0KTsKPiArfQo+ ICtFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KTsKPiArCj4gK3Zv aWQgdmlydGlvX3RyYW5zcG9ydF9mcmVlX3BrdChzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0 KQo+ICt7Cj4gKwlrZnJlZShwa3QtPmJ1Zik7Cj4gKwlrZnJlZShwa3QpOwo+ICt9Cj4gK0VYUE9S VF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfZnJlZV9wa3QpOwo+ICsKPiArTU9EVUxFX0xJ Q0VOU0UoIkdQTCB2MiIpOwo+ICtNT0RVTEVfQVVUSE9SKCJBc2lhcyBIZSIpOwo+ICtNT0RVTEVf REVTQ1JJUFRJT04oImNvbW1vbiBjb2RlIGZvciB2aXJ0aW8gdnNvY2siKTsKPiAtLQo+IDIuNS4w CgoKLS0KQWxleCBCZW5uw6llCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0 cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcv bWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==