From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [RFC v5 2/5] virtio_ring: support creating packed ring Date: Tue, 29 May 2018 10:49:11 +0800 Message-ID: <654feee2-3414-e304-0aec-2bb19a7e0c87@redhat.com> References: <20180522081648.14768-1-tiwei.bie@intel.com> <20180522081648.14768-3-tiwei.bie@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: wexu@redhat.com, Cornelia Huck To: Tiwei Bie , mst@redhat.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Return-path: In-Reply-To: <20180522081648.14768-3-tiwei.bie@intel.com> Content-Language: en-US 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 CgpPbiAyMDE45bm0MDXmnIgyMuaXpSAxNjoxNiwgVGl3ZWkgQmllIHdyb3RlOgo+IFRoaXMgY29t bWl0IGludHJvZHVjZXMgdGhlIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHBhY2tlZCByaW5nLgo+IEFs bCBzcGxpdCByaW5nIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgYWRkZWQgX3NwbGl0IHN1ZmZpeC4K PiBTb21lIG5lY2Vzc2FyeSBzdHVicyBmb3IgcGFja2VkIHJpbmcgYXJlIGFsc28gYWRkZWQuCj4K PiBTaWduZWQtb2ZmLWJ5OiBUaXdlaSBCaWUgPHRpd2VpLmJpZUBpbnRlbC5jb20+Cj4gLS0tCj4g ICBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIHwgODAxICsrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tCj4gICBpbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmggIHwgICA4ICst Cj4gICAyIGZpbGVzIGNoYW5nZWQsIDU0NiBpbnNlcnRpb25zKCspLCAyNjMgZGVsZXRpb25zKC0p Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMv dmlydGlvL3ZpcnRpb19yaW5nLmMKPiBpbmRleCA3MTQ1OGY0OTNjZjguLmY1ZWY1ZjQyYTdjZiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gKysrIGIvZHJpdmVy cy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+IEBAIC02MSwxMSArNjEsMTUgQEAgc3RydWN0IHZyaW5n X2Rlc2Nfc3RhdGUgewo+ICAgCXN0cnVjdCB2cmluZ19kZXNjICppbmRpcl9kZXNjOwkvKiBJbmRp cmVjdCBkZXNjcmlwdG9yLCBpZiBhbnkuICovCj4gICB9Owo+ICAgCj4gK3N0cnVjdCB2cmluZ19k ZXNjX3N0YXRlX3BhY2tlZCB7Cj4gKwlpbnQgbmV4dDsJCQkvKiBUaGUgbmV4dCBkZXNjIHN0YXRl LiAqLwo+ICt9Owo+ICsKPiAgIHN0cnVjdCB2cmluZ192aXJ0cXVldWUgewo+ICAgCXN0cnVjdCB2 aXJ0cXVldWUgdnE7Cj4gICAKPiAtCS8qIEFjdHVhbCBtZW1vcnkgbGF5b3V0IGZvciB0aGlzIHF1 ZXVlICovCj4gLQlzdHJ1Y3QgdnJpbmcgdnJpbmc7Cj4gKwkvKiBJcyB0aGlzIGEgcGFja2VkIHJp bmc/ICovCj4gKwlib29sIHBhY2tlZDsKPiAgIAo+ICAgCS8qIENhbiB3ZSB1c2Ugd2VhayBiYXJy aWVycz8gKi8KPiAgIAlib29sIHdlYWtfYmFycmllcnM7Cj4gQEAgLTg3LDExICs5MSwzOSBAQCBz dHJ1Y3QgdnJpbmdfdmlydHF1ZXVlIHsKPiAgIAkvKiBMYXN0IHVzZWQgaW5kZXggd2UndmUgc2Vl bi4gKi8KPiAgIAl1MTYgbGFzdF91c2VkX2lkeDsKPiAgIAo+IC0JLyogTGFzdCB3cml0dGVuIHZh bHVlIHRvIGF2YWlsLT5mbGFncyAqLwo+IC0JdTE2IGF2YWlsX2ZsYWdzX3NoYWRvdzsKPiArCXVu aW9uIHsKPiArCQkvKiBBdmFpbGFibGUgZm9yIHNwbGl0IHJpbmcgKi8KPiArCQlzdHJ1Y3Qgewo+ ICsJCQkvKiBBY3R1YWwgbWVtb3J5IGxheW91dCBmb3IgdGhpcyBxdWV1ZS4gKi8KPiArCQkJc3Ry dWN0IHZyaW5nIHZyaW5nOwo+ICAgCj4gLQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUgdG8gYXZhaWwt PmlkeCBpbiBndWVzdCBieXRlIG9yZGVyICovCj4gLQl1MTYgYXZhaWxfaWR4X3NoYWRvdzsKPiAr CQkJLyogTGFzdCB3cml0dGVuIHZhbHVlIHRvIGF2YWlsLT5mbGFncyAqLwo+ICsJCQl1MTYgYXZh aWxfZmxhZ3Nfc2hhZG93Owo+ICsKPiArCQkJLyogTGFzdCB3cml0dGVuIHZhbHVlIHRvIGF2YWls LT5pZHggaW4KPiArCQkJICogZ3Vlc3QgYnl0ZSBvcmRlci4gKi8KPiArCQkJdTE2IGF2YWlsX2lk eF9zaGFkb3c7Cj4gKwkJfTsKPiArCj4gKwkJLyogQXZhaWxhYmxlIGZvciBwYWNrZWQgcmluZyAq Lwo+ICsJCXN0cnVjdCB7Cj4gKwkJCS8qIEFjdHVhbCBtZW1vcnkgbGF5b3V0IGZvciB0aGlzIHF1 ZXVlLiAqLwo+ICsJCQlzdHJ1Y3QgdnJpbmdfcGFja2VkIHZyaW5nX3BhY2tlZDsKPiArCj4gKwkJ CS8qIERyaXZlciByaW5nIHdyYXAgY291bnRlci4gKi8KPiArCQkJdTggYXZhaWxfd3JhcF9jb3Vu dGVyOwo+ICsKPiArCQkJLyogRGV2aWNlIHJpbmcgd3JhcCBjb3VudGVyLiAqLwo+ICsJCQl1OCB1 c2VkX3dyYXBfY291bnRlcjsKCkhvdyBhYm91dCBqdXN0IHVzZSBib29sZWFuPwoKPiArCj4gKwkJ CS8qIEluZGV4IG9mIHRoZSBuZXh0IGF2YWlsIGRlc2NyaXB0b3IuICovCj4gKwkJCXUxNiBuZXh0 X2F2YWlsX2lkeDsKPiArCj4gKwkJCS8qIExhc3Qgd3JpdHRlbiB2YWx1ZSB0byBkcml2ZXItPmZs YWdzIGluCj4gKwkJCSAqIGd1ZXN0IGJ5dGUgb3JkZXIuICovCj4gKwkJCXUxNiBldmVudF9mbGFn c19zaGFkb3c7Cj4gKwkJfTsKPiArCX07Cj4gICAKPiAgIAkvKiBIb3cgdG8gbm90aWZ5IG90aGVy IHNpZGUuIEZJWE1FOiBjb21tb25hbGl6ZSBoY2FsbHMhICovCj4gICAJYm9vbCAoKm5vdGlmeSko c3RydWN0IHZpcnRxdWV1ZSAqdnEpOwo+IEBAIC0xMTEsMTEgKzE0MywyNCBAQCBzdHJ1Y3QgdnJp bmdfdmlydHF1ZXVlIHsKPiAgICNlbmRpZgo+ICAgCj4gICAJLyogUGVyLWRlc2NyaXB0b3Igc3Rh dGUuICovCj4gLQlzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZSBkZXNjX3N0YXRlW107Cj4gKwl1bmlv biB7Cj4gKwkJc3RydWN0IHZyaW5nX2Rlc2Nfc3RhdGUgZGVzY19zdGF0ZVsxXTsKPiArCQlzdHJ1 Y3QgdnJpbmdfZGVzY19zdGF0ZV9wYWNrZWQgZGVzY19zdGF0ZV9wYWNrZWRbMV07Cj4gKwl9Owo+ ICAgfTsKPiAgIAo+ICAgI2RlZmluZSB0b192dnEoX3ZxKSBjb250YWluZXJfb2YoX3ZxLCBzdHJ1 Y3QgdnJpbmdfdmlydHF1ZXVlLCB2cSkKPiAgIAo+ICtzdGF0aWMgaW5saW5lIGJvb2wgdmlydHF1 ZXVlX3VzZV9pbmRpcmVjdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gKwkJCQkJICB1bnNpZ25l ZCBpbnQgdG90YWxfc2cpCj4gK3sKPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9f dnZxKF92cSk7Cj4gKwo+ICsJLyogSWYgdGhlIGhvc3Qgc3VwcG9ydHMgaW5kaXJlY3QgZGVzY3Jp cHRvciB0YWJsZXMsIGFuZCB3ZSBoYXZlIG11bHRpcGxlCj4gKwkgKiBidWZmZXJzLCB0aGVuIGdv IGluZGlyZWN0LiBGSVhNRTogdHVuZSB0aGlzIHRocmVzaG9sZCAqLwo+ICsJcmV0dXJuICh2cS0+ aW5kaXJlY3QgJiYgdG90YWxfc2cgPiAxICYmIHZxLT52cS5udW1fZnJlZSk7Cj4gK30KPiArCj4g ICAvKgo+ICAgICogTW9kZXJuIHZpcnRpbyBkZXZpY2VzIGhhdmUgZmVhdHVyZSBiaXRzIHRvIHNw ZWNpZnkgd2hldGhlciB0aGV5IG5lZWQgYQo+ICAgICogcXVpcmsgYW5kIGJ5cGFzcyB0aGUgSU9N TVUuIElmIG5vdCB0aGVyZSwganVzdCB1c2UgdGhlIERNQSBBUEkuCj4gQEAgLTIwMSw4ICsyNDYs MTcgQEAgc3RhdGljIGRtYV9hZGRyX3QgdnJpbmdfbWFwX3NpbmdsZShjb25zdCBzdHJ1Y3QgdnJp bmdfdmlydHF1ZXVlICp2cSwKPiAgIAkJCSAgICAgIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24p Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIHZyaW5nX3VubWFwX29uZShjb25zdCBzdHJ1Y3Qg dnJpbmdfdmlydHF1ZXVlICp2cSwKPiAtCQkJICAgIHN0cnVjdCB2cmluZ19kZXNjICpkZXNjKQo+ ICtzdGF0aWMgaW50IHZyaW5nX21hcHBpbmdfZXJyb3IoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRx dWV1ZSAqdnEsCj4gKwkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIpCj4gK3sKPiArCWlmICghdnJp bmdfdXNlX2RtYV9hcGkodnEtPnZxLnZkZXYpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVy biBkbWFfbWFwcGluZ19lcnJvcih2cmluZ19kbWFfZGV2KHZxKSwgYWRkcik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHZyaW5nX3VubWFwX29uZV9zcGxpdChjb25zdCBzdHJ1Y3QgdnJpbmdfdmly dHF1ZXVlICp2cSwKPiArCQkJCSAgc3RydWN0IHZyaW5nX2Rlc2MgKmRlc2MpCj4gICB7Cj4gICAJ dTE2IGZsYWdzOwo+ICAgCj4gQEAgLTIyNiwxNyArMjgwLDkgQEAgc3RhdGljIHZvaWQgdnJpbmdf dW5tYXBfb25lKGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLAo+ICAgCX0KPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50IHZyaW5nX21hcHBpbmdfZXJyb3IoY29uc3Qgc3RydWN0IHZyaW5n X3ZpcnRxdWV1ZSAqdnEsCj4gLQkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIpCj4gLXsKPiAtCWlm ICghdnJpbmdfdXNlX2RtYV9hcGkodnEtPnZxLnZkZXYpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAt CXJldHVybiBkbWFfbWFwcGluZ19lcnJvcih2cmluZ19kbWFfZGV2KHZxKSwgYWRkcik7Cj4gLX0K Ckl0IGxvb2tzIHRvIG1lIGlmIHlvdSBrZWVwIHZyaW5nX21hcHBpbmdfZXJyb3IgYmVoaW5kIAp2 cmluZ191bm1hcF9vbmVfc3BsaXQoKSwgbG90cyBvZiBjaGFuZ2VzIHdlcmUgdW5uY2Vzc2FyeS4K Cj4gLQo+IC1zdGF0aWMgc3RydWN0IHZyaW5nX2Rlc2MgKmFsbG9jX2luZGlyZWN0KHN0cnVjdCB2 aXJ0cXVldWUgKl92cSwKPiAtCQkJCQkgdW5zaWduZWQgaW50IHRvdGFsX3NnLCBnZnBfdCBnZnAp Cj4gK3N0YXRpYyBzdHJ1Y3QgdnJpbmdfZGVzYyAqYWxsb2NfaW5kaXJlY3Rfc3BsaXQoc3RydWN0 IHZpcnRxdWV1ZSAqX3ZxLAo+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG90YWxfc2csCj4g KwkJCQkJICAgICAgIGdmcF90IGdmcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVz YzsKPiAgIAl1bnNpZ25lZCBpbnQgaTsKPiBAQCAtMjU3LDE0ICszMDMsMTQgQEAgc3RhdGljIHN0 cnVjdCB2cmluZ19kZXNjICphbGxvY19pbmRpcmVjdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4g ICAJcmV0dXJuIGRlc2M7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGlubGluZSBpbnQgdmlydHF1ZXVl X2FkZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn c1tdLAo+IC0JCQkJdW5zaWduZWQgaW50IHRvdGFsX3NnLAo+IC0JCQkJdW5zaWduZWQgaW50IG91 dF9zZ3MsCj4gLQkJCQl1bnNpZ25lZCBpbnQgaW5fc2dzLAo+IC0JCQkJdm9pZCAqZGF0YSwKPiAt CQkJCXZvaWQgKmN0eCwKPiAtCQkJCWdmcF90IGdmcCkKPiArc3RhdGljIGlubGluZSBpbnQgdmly dHF1ZXVlX2FkZF9zcGxpdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gKwkJCQkgICAgICBzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnNnc1tdLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHRvdGFsX3Nn LAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IG91dF9zZ3MsCj4gKwkJCQkgICAgICB1bnNpZ25l ZCBpbnQgaW5fc2dzLAo+ICsJCQkJICAgICAgdm9pZCAqZGF0YSwKPiArCQkJCSAgICAgIHZvaWQg KmN0eCwKPiArCQkJCSAgICAgIGdmcF90IGdmcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdnJpbmdfdmly dHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ICAgCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cj4g QEAgLTMwMCwxMCArMzQ2LDggQEAgc3RhdGljIGlubGluZSBpbnQgdmlydHF1ZXVlX2FkZChzdHJ1 Y3QgdmlydHF1ZXVlICpfdnEsCj4gICAKPiAgIAloZWFkID0gdnEtPmZyZWVfaGVhZDsKPiAgIAo+ IC0JLyogSWYgdGhlIGhvc3Qgc3VwcG9ydHMgaW5kaXJlY3QgZGVzY3JpcHRvciB0YWJsZXMsIGFu ZCB3ZSBoYXZlIG11bHRpcGxlCj4gLQkgKiBidWZmZXJzLCB0aGVuIGdvIGluZGlyZWN0LiBGSVhN RTogdHVuZSB0aGlzIHRocmVzaG9sZCAqLwo+IC0JaWYgKHZxLT5pbmRpcmVjdCAmJiB0b3RhbF9z ZyA+IDEgJiYgdnEtPnZxLm51bV9mcmVlKQo+IC0JCWRlc2MgPSBhbGxvY19pbmRpcmVjdChfdnEs IHRvdGFsX3NnLCBnZnApOwo+ICsJaWYgKHZpcnRxdWV1ZV91c2VfaW5kaXJlY3QoX3ZxLCB0b3Rh bF9zZykpCj4gKwkJZGVzYyA9IGFsbG9jX2luZGlyZWN0X3NwbGl0KF92cSwgdG90YWxfc2csIGdm cCk7Cj4gICAJZWxzZSB7Cj4gICAJCWRlc2MgPSBOVUxMOwo+ICAgCQlXQVJOX09OX09OQ0UodG90 YWxfc2cgPiB2cS0+dnJpbmcubnVtICYmICF2cS0+aW5kaXJlY3QpOwo+IEBAIC00MjQsNyArNDY4 LDcgQEAgc3RhdGljIGlubGluZSBpbnQgdmlydHF1ZXVlX2FkZChzdHJ1Y3QgdmlydHF1ZXVlICpf dnEsCj4gICAJZm9yIChuID0gMDsgbiA8IHRvdGFsX3NnOyBuKyspIHsKPiAgIAkJaWYgKGkgPT0g ZXJyX2lkeCkKPiAgIAkJCWJyZWFrOwo+IC0JCXZyaW5nX3VubWFwX29uZSh2cSwgJmRlc2NbaV0p Owo+ICsJCXZyaW5nX3VubWFwX29uZV9zcGxpdCh2cSwgJmRlc2NbaV0pOwo+ICAgCQlpID0gdmly dGlvMTZfdG9fY3B1KF92cS0+dmRldiwgdnEtPnZyaW5nLmRlc2NbaV0ubmV4dCk7Cj4gICAJfQo+ ICAgCj4gQEAgLTQzNSw2ICs0NzksMzU1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZpcnRxdWV1ZV9h ZGQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLAo+ICAgCXJldHVybiAtRUlPOwo+ICAgfQo+ICAgCj4g K3N0YXRpYyBib29sIHZpcnRxdWV1ZV9raWNrX3ByZXBhcmVfc3BsaXQoc3RydWN0IHZpcnRxdWV1 ZSAqX3ZxKQo+ICt7Cj4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEp Owo+ICsJdTE2IG5ldywgb2xkOwo+ICsJYm9vbCBuZWVkc19raWNrOwo+ICsKPiArCVNUQVJUX1VT RSh2cSk7Cj4gKwkvKiBXZSBuZWVkIHRvIGV4cG9zZSBhdmFpbGFibGUgYXJyYXkgZW50cmllcyBi ZWZvcmUgY2hlY2tpbmcgYXZhaWwKPiArCSAqIGV2ZW50LiAqLwo+ICsJdmlydGlvX21iKHZxLT53 ZWFrX2JhcnJpZXJzKTsKPiArCj4gKwlvbGQgPSB2cS0+YXZhaWxfaWR4X3NoYWRvdyAtIHZxLT5u dW1fYWRkZWQ7Cj4gKwluZXcgPSB2cS0+YXZhaWxfaWR4X3NoYWRvdzsKPiArCXZxLT5udW1fYWRk ZWQgPSAwOwo+ICsKPiArI2lmZGVmIERFQlVHCj4gKwlpZiAodnEtPmxhc3RfYWRkX3RpbWVfdmFs aWQpIHsKPiArCQlXQVJOX09OKGt0aW1lX3RvX21zKGt0aW1lX3N1YihrdGltZV9nZXQoKSwKPiAr CQkJCQkgICAgICB2cS0+bGFzdF9hZGRfdGltZSkpID4gMTAwKTsKPiArCX0KPiArCXZxLT5sYXN0 X2FkZF90aW1lX3ZhbGlkID0gZmFsc2U7Cj4gKyNlbmRpZgo+ICsKPiArCWlmICh2cS0+ZXZlbnQp IHsKPiArCQluZWVkc19raWNrID0gdnJpbmdfbmVlZF9ldmVudCh2aXJ0aW8xNl90b19jcHUoX3Zx LT52ZGV2LCB2cmluZ19hdmFpbF9ldmVudCgmdnEtPnZyaW5nKSksCj4gKwkJCQkJICAgICAgbmV3 LCBvbGQpOwo+ICsJfSBlbHNlIHsKPiArCQluZWVkc19raWNrID0gISh2cS0+dnJpbmcudXNlZC0+ ZmxhZ3MgJiBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCBWUklOR19VU0VEX0ZfTk9fTk9USUZZ KSk7Cj4gKwl9Cj4gKwlFTkRfVVNFKHZxKTsKPiArCXJldHVybiBuZWVkc19raWNrOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkZXRhY2hfYnVmX3NwbGl0KHN0cnVjdCB2cmluZ192aXJ0cXVldWUg KnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwKPiArCQkJICAgICB2b2lkICoqY3R4KQo+ICt7Cj4gKwl1 bnNpZ25lZCBpbnQgaSwgajsKPiArCV9fdmlydGlvMTYgbmV4dGZsYWcgPSBjcHVfdG9fdmlydGlv MTYodnEtPnZxLnZkZXYsIFZSSU5HX0RFU0NfRl9ORVhUKTsKPiArCj4gKwkvKiBDbGVhciBkYXRh IHB0ci4gKi8KPiArCXZxLT5kZXNjX3N0YXRlW2hlYWRdLmRhdGEgPSBOVUxMOwo+ICsKPiArCS8q IFB1dCBiYWNrIG9uIGZyZWUgbGlzdDogdW5tYXAgZmlyc3QtbGV2ZWwgZGVzY3JpcHRvcnMgYW5k IGZpbmQgZW5kICovCj4gKwlpID0gaGVhZDsKPiArCj4gKwl3aGlsZSAodnEtPnZyaW5nLmRlc2Nb aV0uZmxhZ3MgJiBuZXh0ZmxhZykgewo+ICsJCXZyaW5nX3VubWFwX29uZV9zcGxpdCh2cSwgJnZx LT52cmluZy5kZXNjW2ldKTsKPiArCQlpID0gdmlydGlvMTZfdG9fY3B1KHZxLT52cS52ZGV2LCB2 cS0+dnJpbmcuZGVzY1tpXS5uZXh0KTsKPiArCQl2cS0+dnEubnVtX2ZyZWUrKzsKPiArCX0KPiAr Cj4gKwl2cmluZ191bm1hcF9vbmVfc3BsaXQodnEsICZ2cS0+dnJpbmcuZGVzY1tpXSk7Cj4gKwl2 cS0+dnJpbmcuZGVzY1tpXS5uZXh0ID0gY3B1X3RvX3ZpcnRpbzE2KHZxLT52cS52ZGV2LCB2cS0+ ZnJlZV9oZWFkKTsKPiArCXZxLT5mcmVlX2hlYWQgPSBoZWFkOwo+ICsKPiArCS8qIFBsdXMgZmlu YWwgZGVzY3JpcHRvciAqLwo+ICsJdnEtPnZxLm51bV9mcmVlKys7Cj4gKwo+ICsJaWYgKHZxLT5p bmRpcmVjdCkgewo+ICsJCXN0cnVjdCB2cmluZ19kZXNjICppbmRpcl9kZXNjID0gdnEtPmRlc2Nf c3RhdGVbaGVhZF0uaW5kaXJfZGVzYzsKPiArCQl1MzIgbGVuOwo+ICsKPiArCQkvKiBGcmVlIHRo ZSBpbmRpcmVjdCB0YWJsZSwgaWYgYW55LCBub3cgdGhhdCBpdCdzIHVubWFwcGVkLiAqLwo+ICsJ CWlmICghaW5kaXJfZGVzYykKPiArCQkJcmV0dXJuOwo+ICsKPiArCQlsZW4gPSB2aXJ0aW8zMl90 b19jcHUodnEtPnZxLnZkZXYsIHZxLT52cmluZy5kZXNjW2hlYWRdLmxlbik7Cj4gKwo+ICsJCUJV R19PTighKHZxLT52cmluZy5kZXNjW2hlYWRdLmZsYWdzICYKPiArCQkJIGNwdV90b192aXJ0aW8x Nih2cS0+dnEudmRldiwgVlJJTkdfREVTQ19GX0lORElSRUNUKSkpOwo+ICsJCUJVR19PTihsZW4g PT0gMCB8fCBsZW4gJSBzaXplb2Yoc3RydWN0IHZyaW5nX2Rlc2MpKTsKPiArCj4gKwkJZm9yIChq ID0gMDsgaiA8IGxlbiAvIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyk7IGorKykKPiArCQkJdnJp bmdfdW5tYXBfb25lX3NwbGl0KHZxLCAmaW5kaXJfZGVzY1tqXSk7Cj4gKwo+ICsJCWtmcmVlKGlu ZGlyX2Rlc2MpOwo+ICsJCXZxLT5kZXNjX3N0YXRlW2hlYWRdLmluZGlyX2Rlc2MgPSBOVUxMOwo+ ICsJfSBlbHNlIGlmIChjdHgpIHsKPiArCQkqY3R4ID0gdnEtPmRlc2Nfc3RhdGVbaGVhZF0uaW5k aXJfZGVzYzsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29sIG1vcmVfdXNlZF9z cGxpdChjb25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSkKPiArewo+ICsJcmV0dXJuIHZx LT5sYXN0X3VzZWRfaWR4ICE9IHZpcnRpbzE2X3RvX2NwdSh2cS0+dnEudmRldiwgdnEtPnZyaW5n LnVzZWQtPmlkeCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9j dHhfc3BsaXQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLAo+ICsJCQkJCSB1bnNpZ25lZCBpbnQgKmxl biwKPiArCQkJCQkgdm9pZCAqKmN0eCkKPiArewo+ICsJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAq dnEgPSB0b192dnEoX3ZxKTsKPiArCXZvaWQgKnJldDsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJ dTE2IGxhc3RfdXNlZDsKPiArCj4gKwlTVEFSVF9VU0UodnEpOwo+ICsKPiArCWlmICh1bmxpa2Vs eSh2cS0+YnJva2VuKSkgewo+ICsJCUVORF9VU0UodnEpOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJ fQo+ICsKPiArCWlmICghbW9yZV91c2VkX3NwbGl0KHZxKSkgewo+ICsJCXByX2RlYnVnKCJObyBt b3JlIGJ1ZmZlcnMgaW4gcXVldWVcbiIpOwo+ICsJCUVORF9VU0UodnEpOwo+ICsJCXJldHVybiBO VUxMOwo+ICsJfQo+ICsKPiArCS8qIE9ubHkgZ2V0IHVzZWQgYXJyYXkgZW50cmllcyBhZnRlciB0 aGV5IGhhdmUgYmVlbiBleHBvc2VkIGJ5IGhvc3QuICovCj4gKwl2aXJ0aW9fcm1iKHZxLT53ZWFr X2JhcnJpZXJzKTsKPiArCj4gKwlsYXN0X3VzZWQgPSAodnEtPmxhc3RfdXNlZF9pZHggJiAodnEt PnZyaW5nLm51bSAtIDEpKTsKPiArCWkgPSB2aXJ0aW8zMl90b19jcHUoX3ZxLT52ZGV2LCB2cS0+ dnJpbmcudXNlZC0+cmluZ1tsYXN0X3VzZWRdLmlkKTsKPiArCSpsZW4gPSB2aXJ0aW8zMl90b19j cHUoX3ZxLT52ZGV2LCB2cS0+dnJpbmcudXNlZC0+cmluZ1tsYXN0X3VzZWRdLmxlbik7Cj4gKwo+ ICsJaWYgKHVubGlrZWx5KGkgPj0gdnEtPnZyaW5nLm51bSkpIHsKPiArCQlCQURfUklORyh2cSwg ImlkICV1IG91dCBvZiByYW5nZVxuIiwgaSk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwlp ZiAodW5saWtlbHkoIXZxLT5kZXNjX3N0YXRlW2ldLmRhdGEpKSB7Cj4gKwkJQkFEX1JJTkcodnEs ICJpZCAldSBpcyBub3QgYSBoZWFkIVxuIiwgaSk7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4g Kwo+ICsJLyogZGV0YWNoX2J1Zl9zcGxpdCBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICov Cj4gKwlyZXQgPSB2cS0+ZGVzY19zdGF0ZVtpXS5kYXRhOwo+ICsJZGV0YWNoX2J1Zl9zcGxpdCh2 cSwgaSwgY3R4KTsKPiArCXZxLT5sYXN0X3VzZWRfaWR4Kys7Cj4gKwkvKiBJZiB3ZSBleHBlY3Qg YW4gaW50ZXJydXB0IGZvciB0aGUgbmV4dCBlbnRyeSwgdGVsbCBob3N0Cj4gKwkgKiBieSB3cml0 aW5nIGV2ZW50IGluZGV4IGFuZCBmbHVzaCBvdXQgdGhlIHdyaXRlIGJlZm9yZQo+ICsJICogdGhl IHJlYWQgaW4gdGhlIG5leHQgZ2V0X2J1ZiBjYWxsLiAqLwo+ICsJaWYgKCEodnEtPmF2YWlsX2Zs YWdzX3NoYWRvdyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSkKPiArCQl2aXJ0aW9fc3Rv cmVfbWIodnEtPndlYWtfYmFycmllcnMsCj4gKwkJCQkmdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZy aW5nKSwKPiArCQkJCWNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5sYXN0X3VzZWRfaWR4 KSk7Cj4gKwo+ICsjaWZkZWYgREVCVUcKPiArCXZxLT5sYXN0X2FkZF90aW1lX3ZhbGlkID0gZmFs c2U7Cj4gKyNlbmRpZgo+ICsKPiArCUVORF9VU0UodnEpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgdmlydHF1ZXVlX2Rpc2FibGVfY2Jfc3BsaXQoc3RydWN0IHZpcnRx dWV1ZSAqX3ZxKQo+ICt7Cj4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShf dnEpOwo+ICsKPiArCWlmICghKHZxLT5hdmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9G X05PX0lOVEVSUlVQVCkpIHsKPiArCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93IHw9IFZSSU5HX0FW QUlMX0ZfTk9fSU5URVJSVVBUOwo+ICsJCWlmICghdnEtPmV2ZW50KQo+ICsJCQl2cS0+dnJpbmcu YXZhaWwtPmZsYWdzID0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgdnEtPmF2YWlsX2ZsYWdz X3NoYWRvdyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCB2aXJ0cXVldWVfZW5h YmxlX2NiX3ByZXBhcmVfc3BsaXQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICt7Cj4gKwlzdHJ1 Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ICsJdTE2IGxhc3RfdXNlZF9p ZHg7Cj4gKwo+ICsJU1RBUlRfVVNFKHZxKTsKPiArCj4gKwkvKiBXZSBvcHRpbWlzdGljYWxseSB0 dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhlbiBjaGVjayBpZiB0aGVyZSB3YXMKPiArCSAqIG1v cmUgdG8gZG8uICovCj4gKwkvKiBEZXBlbmRpbmcgb24gdGhlIFZJUlRJT19SSU5HX0ZfRVZFTlRf SURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KPiArCSAqIGVpdGhlciBjbGVhciB0aGUgZmxhZ3MgYml0 IG9yIHBvaW50IHRoZSBldmVudCBpbmRleCBhdCB0aGUgbmV4dAo+ICsJICogZW50cnkuIEFsd2F5 cyBkbyBib3RoIHRvIGtlZXAgY29kZSBzaW1wbGUuICovCj4gKwlpZiAodnEtPmF2YWlsX2ZsYWdz X3NoYWRvdyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSB7Cj4gKwkJdnEtPmF2YWlsX2Zs YWdzX3NoYWRvdyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Cj4gKwkJaWYgKCF2cS0+ ZXZlbnQpCj4gKwkJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYoX3Zx LT52ZGV2LCB2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93KTsKPiArCX0KPiArCXZyaW5nX3VzZWRfZXZl bnQoJnZxLT52cmluZykgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCBsYXN0X3VzZWRfaWR4 ID0gdnEtPmxhc3RfdXNlZF9pZHgpOwo+ICsJRU5EX1VTRSh2cSk7Cj4gKwlyZXR1cm4gbGFzdF91 c2VkX2lkeDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmlydHF1ZXVlX3BvbGxfc3BsaXQoc3Ry dWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBsYXN0X3VzZWRfaWR4KQo+ICt7Cj4gKwlzdHJ1 Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ICsKPiArCXZpcnRpb19tYih2 cS0+d2Vha19iYXJyaWVycyk7Cj4gKwlyZXR1cm4gKHUxNilsYXN0X3VzZWRfaWR4ICE9IHZpcnRp bzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51c2VkLT5pZHgpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCB2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWRfc3BsaXQoc3RydWN0IHZpcnRx dWV1ZSAqX3ZxKQo+ICt7Cj4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShf dnEpOwo+ICsJdTE2IGJ1ZnM7Cj4gKwo+ICsJU1RBUlRfVVNFKHZxKTsKPiArCj4gKwkvKiBXZSBv cHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhlbiBjaGVjayBpZiB0aGVy ZSB3YXMKPiArCSAqIG1vcmUgdG8gZG8uICovCj4gKwkvKiBEZXBlbmRpbmcgb24gdGhlIFZJUlRJ T19SSU5HX0ZfVVNFRF9FVkVOVF9JRFggZmVhdHVyZSwgd2UgbmVlZCB0bwo+ICsJICogZWl0aGVy IGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50IGluZGV4IGF0IHRoZSBuZXh0 Cj4gKwkgKiBlbnRyeS4gQWx3YXlzIHVwZGF0ZSB0aGUgZXZlbnQgaW5kZXggdG8ga2VlcCBjb2Rl IHNpbXBsZS4gKi8KPiArCWlmICh2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICYgVlJJTkdfQVZBSUxf Rl9OT19JTlRFUlJVUFQpIHsKPiArCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICY9IH5WUklOR19B VkFJTF9GX05PX0lOVEVSUlVQVDsKPiArCQlpZiAoIXZxLT5ldmVudCkKPiArCQkJdnEtPnZyaW5n LmF2YWlsLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5hdmFpbF9mbGFn c19zaGFkb3cpOwo+ICsJfQo+ICsJLyogVE9ETzogdHVuZSB0aGlzIHRocmVzaG9sZCAqLwo+ICsJ YnVmcyA9ICh1MTYpKHZxLT5hdmFpbF9pZHhfc2hhZG93IC0gdnEtPmxhc3RfdXNlZF9pZHgpICog MyAvIDQ7Cj4gKwo+ICsJdmlydGlvX3N0b3JlX21iKHZxLT53ZWFrX2JhcnJpZXJzLAo+ICsJCQkm dnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSwKPiArCQkJY3B1X3RvX3ZpcnRpbzE2KF92cS0+ dmRldiwgdnEtPmxhc3RfdXNlZF9pZHggKyBidWZzKSk7Cj4gKwo+ICsJaWYgKHVubGlrZWx5KCh1 MTYpKHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51c2VkLT5pZHgpIC0gdnEt Pmxhc3RfdXNlZF9pZHgpID4gYnVmcykpIHsKPiArCQlFTkRfVVNFKHZxKTsKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJRU5EX1VTRSh2cSk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgKnZpcnRxdWV1ZV9kZXRhY2hfdW51c2VkX2J1Zl9zcGxpdChzdHJ1 Y3QgdmlydHF1ZXVlICpfdnEpCj4gK3sKPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0g dG9fdnZxKF92cSk7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCXZvaWQgKmJ1ZjsKPiArCj4gKwlT VEFSVF9VU0UodnEpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCB2cS0+dnJpbmcubnVtOyBpKysp IHsKPiArCQlpZiAoIXZxLT5kZXNjX3N0YXRlW2ldLmRhdGEpCj4gKwkJCWNvbnRpbnVlOwo+ICsJ CS8qIGRldGFjaF9idWYgY2xlYXJzIGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLwo+ICsJCWJ1ZiA9 IHZxLT5kZXNjX3N0YXRlW2ldLmRhdGE7Cj4gKwkJZGV0YWNoX2J1Zl9zcGxpdCh2cSwgaSwgTlVM TCk7Cj4gKwkJdnEtPmF2YWlsX2lkeF9zaGFkb3ctLTsKPiArCQl2cS0+dnJpbmcuYXZhaWwtPmlk eCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIHZxLT5hdmFpbF9pZHhfc2hhZG93KTsKPiAr CQlFTkRfVVNFKHZxKTsKPiArCQlyZXR1cm4gYnVmOwo+ICsJfQo+ICsJLyogVGhhdCBzaG91bGQg aGF2ZSBmcmVlZCBldmVyeXRoaW5nLiAqLwo+ICsJQlVHX09OKHZxLT52cS5udW1fZnJlZSAhPSB2 cS0+dnJpbmcubnVtKTsKPiArCj4gKwlFTkRfVVNFKHZxKTsKPiArCXJldHVybiBOVUxMOwo+ICt9 CgpJIHRoaW5rIHRoZSB0aG9zZSBjb3B5LWFuZC1wYXN0ZSBodW5rcyBjb3VsZCBiZSBhdm9pZGVk IGFuZCB0aGUgZGlmZiAKc2hvdWxkIG9ubHkgY29udGFpbnMgcmVuYW1pbmcgb2YgdGhlIGZ1bmN0 aW9uLiBJZiB5ZXMsIGl0IHdvdWxkIGJlIHZlcnkgCndlbGNvbWVkIHNpbmNlIGl0IHJlcXVpcmVz IHRvIGNvbXBhcmUgdGhlIGNoYW5nZXMgdmVyYmF0aW0gb3RoZXJ3aXNlLgoKPiArCj4gKy8qCj4g KyAqIFRoZSBsYXlvdXQgZm9yIHRoZSBwYWNrZWQgcmluZyBpcyBhIGNvbnRpbnVvdXMgY2h1bmsg b2YgbWVtb3J5Cj4gKyAqIHdoaWNoIGxvb2tzIGxpa2UgdGhpcy4KPiArICoKPiArICogc3RydWN0 IHZyaW5nX3BhY2tlZCB7Cj4gKyAqCS8vIFRoZSBhY3R1YWwgZGVzY3JpcHRvcnMgKDE2IGJ5dGVz IGVhY2gpCj4gKyAqCXN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyBkZXNjW251bV07Cj4gKyAqCj4g KyAqCS8vIFBhZGRpbmcgdG8gdGhlIG5leHQgYWxpZ24gYm91bmRhcnkuCj4gKyAqCWNoYXIgcGFk W107Cj4gKyAqCj4gKyAqCS8vIERyaXZlciBFdmVudCBTdXBwcmVzc2lvbgo+ICsgKglzdHJ1Y3Qg dnJpbmdfcGFja2VkX2Rlc2NfZXZlbnQgZHJpdmVyOwo+ICsgKgo+ICsgKgkvLyBEZXZpY2UgRXZl bnQgU3VwcHJlc3Npb24KPiArICoJc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjX2V2ZW50IGRldmlj ZTsKPiArICogfTsKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB2cmluZ19pbml0X3BhY2tl ZChzdHJ1Y3QgdnJpbmdfcGFja2VkICp2ciwgdW5zaWduZWQgaW50IG51bSwKPiArCQkJCSAgICAg dm9pZCAqcCwgdW5zaWduZWQgbG9uZyBhbGlnbikKPiArewo+ICsJdnItPm51bSA9IG51bTsKPiAr CXZyLT5kZXNjID0gcDsKPiArCXZyLT5kcml2ZXIgPSAodm9pZCAqKSgoKHVpbnRwdHJfdClwICsg c2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYykKPiArCQkqIG51bSArIGFsaWduIC0gMSkg JiB+KGFsaWduIC0gMSkpOwoKSWYgd2UgY2hvb3NlIG5vdCB0byBnbyB1YXBpLCBtYXliZSB3ZSBj YW4gdXNlIEFMSUdOKCkgbWFjcm8gaGVyZT8KCj4gKwl2ci0+ZGV2aWNlID0gdnItPmRyaXZlciAr IDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdnJpbmdfc2l6ZV9wYWNrZWQo dW5zaWduZWQgaW50IG51bSwgdW5zaWduZWQgbG9uZyBhbGlnbikKPiArewo+ICsJcmV0dXJuICgo c2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYykgKiBudW0gKyBhbGlnbiAtIDEpCj4gKwkJ JiB+KGFsaWduIC0gMSkpICsgc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzY19ldmVudCkg KiAyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkX3BhY2tlZChz dHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z3NbXSwKPiArCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG90YWxfc2csCj4gKwkJCQkgICAgICAg dW5zaWduZWQgaW50IG91dF9zZ3MsCj4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGluX3NncywK PiArCQkJCSAgICAgICB2b2lkICpkYXRhLAo+ICsJCQkJICAgICAgIHZvaWQgKmN0eCwKPiArCQkJ CSAgICAgICBnZnBfdCBnZnApCj4gK3sKPiArCXJldHVybiAtRUlPOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCB2aXJ0cXVldWVfa2lja19wcmVwYXJlX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpf dnEpCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBib29s IG1vcmVfdXNlZF9wYWNrZWQoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEpCj4gK3sK PiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKnZpcnRxdWV1ZV9nZXRf YnVmX2N0eF9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLAo+ICsJCQkJCSAgdW5zaWduZWQg aW50ICpsZW4sCj4gKwkJCQkJICB2b2lkICoqY3R4KQo+ICt7Cj4gKwlyZXR1cm4gTlVMTDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdmlydHF1ZXVlX2Rpc2FibGVfY2JfcGFja2VkKHN0cnVjdCB2 aXJ0cXVldWUgKl92cSkKPiArewo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgdmlydHF1ZXVl X2VuYWJsZV9jYl9wcmVwYXJlX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gK3sKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2aXJ0cXVldWVfcG9sbF9wYWNrZWQo c3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBsYXN0X3VzZWRfaWR4KQo+ICt7Cj4gKwly ZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHZpcnRxdWV1ZV9lbmFibGVfY2Jf ZGVsYXllZF9wYWNrZWQoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICt7Cj4gKwlyZXR1cm4gZmFs c2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWZf cGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiArewo+ICsJcmV0dXJuIE5VTEw7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRxdWV1ZV9hZGQoc3RydWN0IHZpcnRxdWV1ZSAq X3ZxLAo+ICsJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ3NbXSwKPiArCQkJCXVuc2lnbmVkIGlu dCB0b3RhbF9zZywKPiArCQkJCXVuc2lnbmVkIGludCBvdXRfc2dzLAo+ICsJCQkJdW5zaWduZWQg aW50IGluX3NncywKPiArCQkJCXZvaWQgKmRhdGEsCj4gKwkJCQl2b2lkICpjdHgsCj4gKwkJCQln ZnBfdCBnZnApCj4gK3sKPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92 cSk7Cj4gKwo+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2aXJ0cXVldWVfYWRkX3BhY2tlZChfdnEs IHNncywgdG90YWxfc2csIG91dF9zZ3MsCj4gKwkJCQkJCSBpbl9zZ3MsIGRhdGEsIGN0eCwgZ2Zw KSA6Cj4gKwkJCSAgICB2aXJ0cXVldWVfYWRkX3NwbGl0KF92cSwgc2dzLCB0b3RhbF9zZywgb3V0 X3NncywKPiArCQkJCQkJaW5fc2dzLCBkYXRhLCBjdHgsIGdmcCk7Cj4gK30KPiArCj4gICAvKioK PiAgICAqIHZpcnRxdWV1ZV9hZGRfc2dzIC0gZXhwb3NlIGJ1ZmZlcnMgdG8gb3RoZXIgZW5kCj4g ICAgKiBAdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCj4gQEAg LTU1MSwzNCArOTQ0LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2FkZF9pbmJ1Zl9j dHgpOwo+ICAgYm9vbCB2aXJ0cXVldWVfa2lja19wcmVwYXJlKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSkKPiAgIHsKPiAgIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ IC0JdTE2IG5ldywgb2xkOwo+IC0JYm9vbCBuZWVkc19raWNrOwo+ICAgCj4gLQlTVEFSVF9VU0Uo dnEpOwo+IC0JLyogV2UgbmVlZCB0byBleHBvc2UgYXZhaWxhYmxlIGFycmF5IGVudHJpZXMgYmVm b3JlIGNoZWNraW5nIGF2YWlsCj4gLQkgKiBldmVudC4gKi8KPiAtCXZpcnRpb19tYih2cS0+d2Vh a19iYXJyaWVycyk7Cj4gLQo+IC0Jb2xkID0gdnEtPmF2YWlsX2lkeF9zaGFkb3cgLSB2cS0+bnVt X2FkZGVkOwo+IC0JbmV3ID0gdnEtPmF2YWlsX2lkeF9zaGFkb3c7Cj4gLQl2cS0+bnVtX2FkZGVk ID0gMDsKPiAtCj4gLSNpZmRlZiBERUJVRwo+IC0JaWYgKHZxLT5sYXN0X2FkZF90aW1lX3ZhbGlk KSB7Cj4gLQkJV0FSTl9PTihrdGltZV90b19tcyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksCj4gLQkJ CQkJICAgICAgdnEtPmxhc3RfYWRkX3RpbWUpKSA+IDEwMCk7Cj4gLQl9Cj4gLQl2cS0+bGFzdF9h ZGRfdGltZV92YWxpZCA9IGZhbHNlOwo+IC0jZW5kaWYKPiAtCj4gLQlpZiAodnEtPmV2ZW50KSB7 Cj4gLQkJbmVlZHNfa2ljayA9IHZyaW5nX25lZWRfZXZlbnQodmlydGlvMTZfdG9fY3B1KF92cS0+ dmRldiwgdnJpbmdfYXZhaWxfZXZlbnQoJnZxLT52cmluZykpLAo+IC0JCQkJCSAgICAgIG5ldywg b2xkKTsKPiAtCX0gZWxzZSB7Cj4gLQkJbmVlZHNfa2ljayA9ICEodnEtPnZyaW5nLnVzZWQtPmZs YWdzICYgY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgVlJJTkdfVVNFRF9GX05PX05PVElGWSkp Owo+IC0JfQo+IC0JRU5EX1VTRSh2cSk7Cj4gLQlyZXR1cm4gbmVlZHNfa2ljazsKPiArCXJldHVy biB2cS0+cGFja2VkID8gdmlydHF1ZXVlX2tpY2tfcHJlcGFyZV9wYWNrZWQoX3ZxKSA6Cj4gKwkJ CSAgICB2aXJ0cXVldWVfa2lja19wcmVwYXJlX3NwbGl0KF92cSk7Cj4gICB9Cj4gICBFWFBPUlRf U1lNQk9MX0dQTCh2aXJ0cXVldWVfa2lja19wcmVwYXJlKTsKPiAgIAo+IEBAIC02MjYsNTggKzk5 NCw5IEBAIGJvb2wgdmlydHF1ZXVlX2tpY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gICB9Cj4g ICBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfa2ljayk7Cj4gICAKPiAtc3RhdGljIHZvaWQg ZGV0YWNoX2J1ZihzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQgaW50IGhlYWQs Cj4gLQkJICAgICAgIHZvaWQgKipjdHgpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBpLCBqOwo+IC0J X192aXJ0aW8xNiBuZXh0ZmxhZyA9IGNwdV90b192aXJ0aW8xNih2cS0+dnEudmRldiwgVlJJTkdf REVTQ19GX05FWFQpOwo+IC0KPiAtCS8qIENsZWFyIGRhdGEgcHRyLiAqLwo+IC0JdnEtPmRlc2Nf c3RhdGVbaGVhZF0uZGF0YSA9IE5VTEw7Cj4gLQo+IC0JLyogUHV0IGJhY2sgb24gZnJlZSBsaXN0 OiB1bm1hcCBmaXJzdC1sZXZlbCBkZXNjcmlwdG9ycyBhbmQgZmluZCBlbmQgKi8KPiAtCWkgPSBo ZWFkOwo+IC0KPiAtCXdoaWxlICh2cS0+dnJpbmcuZGVzY1tpXS5mbGFncyAmIG5leHRmbGFnKSB7 Cj4gLQkJdnJpbmdfdW5tYXBfb25lKHZxLCAmdnEtPnZyaW5nLmRlc2NbaV0pOwo+IC0JCWkgPSB2 aXJ0aW8xNl90b19jcHUodnEtPnZxLnZkZXYsIHZxLT52cmluZy5kZXNjW2ldLm5leHQpOwo+IC0J CXZxLT52cS5udW1fZnJlZSsrOwo+IC0JfQo+IC0KPiAtCXZyaW5nX3VubWFwX29uZSh2cSwgJnZx LT52cmluZy5kZXNjW2ldKTsKPiAtCXZxLT52cmluZy5kZXNjW2ldLm5leHQgPSBjcHVfdG9fdmly dGlvMTYodnEtPnZxLnZkZXYsIHZxLT5mcmVlX2hlYWQpOwo+IC0JdnEtPmZyZWVfaGVhZCA9IGhl YWQ7Cj4gLQo+IC0JLyogUGx1cyBmaW5hbCBkZXNjcmlwdG9yICovCj4gLQl2cS0+dnEubnVtX2Zy ZWUrKzsKPiAtCj4gLQlpZiAodnEtPmluZGlyZWN0KSB7Cj4gLQkJc3RydWN0IHZyaW5nX2Rlc2Mg KmluZGlyX2Rlc2MgPSB2cS0+ZGVzY19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjOwo+IC0JCXUzMiBs ZW47Cj4gLQo+IC0JCS8qIEZyZWUgdGhlIGluZGlyZWN0IHRhYmxlLCBpZiBhbnksIG5vdyB0aGF0 IGl0J3MgdW5tYXBwZWQuICovCj4gLQkJaWYgKCFpbmRpcl9kZXNjKQo+IC0JCQlyZXR1cm47Cj4g LQo+IC0JCWxlbiA9IHZpcnRpbzMyX3RvX2NwdSh2cS0+dnEudmRldiwgdnEtPnZyaW5nLmRlc2Nb aGVhZF0ubGVuKTsKPiAtCj4gLQkJQlVHX09OKCEodnEtPnZyaW5nLmRlc2NbaGVhZF0uZmxhZ3Mg Jgo+IC0JCQkgY3B1X3RvX3ZpcnRpbzE2KHZxLT52cS52ZGV2LCBWUklOR19ERVNDX0ZfSU5ESVJF Q1QpKSk7Cj4gLQkJQlVHX09OKGxlbiA9PSAwIHx8IGxlbiAlIHNpemVvZihzdHJ1Y3QgdnJpbmdf ZGVzYykpOwo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgbGVuIC8gc2l6ZW9mKHN0cnVjdCB2cmlu Z19kZXNjKTsgaisrKQo+IC0JCQl2cmluZ191bm1hcF9vbmUodnEsICZpbmRpcl9kZXNjW2pdKTsK PiAtCj4gLQkJa2ZyZWUoaW5kaXJfZGVzYyk7Cj4gLQkJdnEtPmRlc2Nfc3RhdGVbaGVhZF0uaW5k aXJfZGVzYyA9IE5VTEw7Cj4gLQl9IGVsc2UgaWYgKGN0eCkgewo+IC0JCSpjdHggPSB2cS0+ZGVz Y19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjOwo+IC0JfQo+IC19Cj4gLQo+ICAgc3RhdGljIGlubGlu ZSBib29sIG1vcmVfdXNlZChjb25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSkKPiAgIHsK PiAtCXJldHVybiB2cS0+bGFzdF91c2VkX2lkeCAhPSB2aXJ0aW8xNl90b19jcHUodnEtPnZxLnZk ZXYsIHZxLT52cmluZy51c2VkLT5pZHgpOwo+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyBtb3JlX3Vz ZWRfcGFja2VkKHZxKSA6IG1vcmVfdXNlZF9zcGxpdCh2cSk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+ IEBAIC03MDAsNTcgKzEwMTksOSBAQCB2b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9jdHgoc3RydWN0 IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBpbnQgKmxlbiwKPiAgIAkJCSAgICB2b2lkICoqY3R4 KQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4g LQl2b2lkICpyZXQ7Cj4gLQl1bnNpZ25lZCBpbnQgaTsKPiAtCXUxNiBsYXN0X3VzZWQ7Cj4gICAK PiAtCVNUQVJUX1VTRSh2cSk7Cj4gLQo+IC0JaWYgKHVubGlrZWx5KHZxLT5icm9rZW4pKSB7Cj4g LQkJRU5EX1VTRSh2cSk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFtb3Jl X3VzZWQodnEpKSB7Cj4gLQkJcHJfZGVidWcoIk5vIG1vcmUgYnVmZmVycyBpbiBxdWV1ZVxuIik7 Cj4gLQkJRU5EX1VTRSh2cSk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+IC0JLyogT25s eSBnZXQgdXNlZCBhcnJheSBlbnRyaWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGV4cG9zZWQgYnkg aG9zdC4gKi8KPiAtCXZpcnRpb19ybWIodnEtPndlYWtfYmFycmllcnMpOwo+IC0KPiAtCWxhc3Rf dXNlZCA9ICh2cS0+bGFzdF91c2VkX2lkeCAmICh2cS0+dnJpbmcubnVtIC0gMSkpOwo+IC0JaSA9 IHZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51c2VkLT5yaW5nW2xhc3RfdXNl ZF0uaWQpOwo+IC0JKmxlbiA9IHZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51 c2VkLT5yaW5nW2xhc3RfdXNlZF0ubGVuKTsKPiAtCj4gLQlpZiAodW5saWtlbHkoaSA+PSB2cS0+ dnJpbmcubnVtKSkgewo+IC0JCUJBRF9SSU5HKHZxLCAiaWQgJXUgb3V0IG9mIHJhbmdlXG4iLCBp KTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCWlmICh1bmxpa2VseSghdnEtPmRlc2Nfc3Rh dGVbaV0uZGF0YSkpIHsKPiAtCQlCQURfUklORyh2cSwgImlkICV1IGlzIG5vdCBhIGhlYWQhXG4i LCBpKTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCj4gLQkvKiBkZXRhY2hfYnVmIGNsZWFy cyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KPiAtCXJldCA9IHZxLT5kZXNjX3N0YXRlW2ldLmRh dGE7Cj4gLQlkZXRhY2hfYnVmKHZxLCBpLCBjdHgpOwo+IC0JdnEtPmxhc3RfdXNlZF9pZHgrKzsK PiAtCS8qIElmIHdlIGV4cGVjdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBuZXh0IGVudHJ5LCB0ZWxs IGhvc3QKPiAtCSAqIGJ5IHdyaXRpbmcgZXZlbnQgaW5kZXggYW5kIGZsdXNoIG91dCB0aGUgd3Jp dGUgYmVmb3JlCj4gLQkgKiB0aGUgcmVhZCBpbiB0aGUgbmV4dCBnZXRfYnVmIGNhbGwuICovCj4g LQlpZiAoISh2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJV UFQpKQo+IC0JCXZpcnRpb19zdG9yZV9tYih2cS0+d2Vha19iYXJyaWVycywKPiAtCQkJCSZ2cmlu Z191c2VkX2V2ZW50KCZ2cS0+dnJpbmcpLAo+IC0JCQkJY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRl diwgdnEtPmxhc3RfdXNlZF9pZHgpKTsKPiAtCj4gLSNpZmRlZiBERUJVRwo+IC0JdnEtPmxhc3Rf YWRkX3RpbWVfdmFsaWQgPSBmYWxzZTsKPiAtI2VuZGlmCj4gLQo+IC0JRU5EX1VTRSh2cSk7Cj4g LQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2aXJ0cXVldWVfZ2V0X2J1Zl9j dHhfcGFja2VkKF92cSwgbGVuLCBjdHgpIDoKPiArCQkJICAgIHZpcnRxdWV1ZV9nZXRfYnVmX2N0 eF9zcGxpdChfdnEsIGxlbiwgY3R4KTsKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRx dWV1ZV9nZXRfYnVmX2N0eCk7Cj4gICAKPiBAQCAtNzcyLDEyICsxMDQzLDEwIEBAIHZvaWQgdmly dHF1ZXVlX2Rpc2FibGVfY2Ioc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICAgewo+ICAgCXN0cnVj dCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gICAKPiAtCWlmICghKHZxLT5h dmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKPiAtCQl2 cS0+YXZhaWxfZmxhZ3Nfc2hhZG93IHw9IFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUOwo+IC0J CWlmICghdnEtPmV2ZW50KQo+IC0JCQl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzID0gY3B1X3RvX3Zp cnRpbzE2KF92cS0+dmRldiwgdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyk7Cj4gLQl9Cj4gLQo+ICsJ aWYgKHZxLT5wYWNrZWQpCj4gKwkJdmlydHF1ZXVlX2Rpc2FibGVfY2JfcGFja2VkKF92cSk7Cj4g KwllbHNlCj4gKwkJdmlydHF1ZXVlX2Rpc2FibGVfY2Jfc3BsaXQoX3ZxKTsKPiAgIH0KPiAgIEVY UE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9kaXNhYmxlX2NiKTsKPiAgIAo+IEBAIC03OTYsMjMg KzEwNjUsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfZGlzYWJsZV9jYik7Cj4gICB1 bnNpZ25lZCB2aXJ0cXVldWVfZW5hYmxlX2NiX3ByZXBhcmUoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx KQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4g LQl1MTYgbGFzdF91c2VkX2lkeDsKPiAgIAo+IC0JU1RBUlRfVVNFKHZxKTsKPiAtCj4gLQkvKiBX ZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhlbiBjaGVjayBpZiB0 aGVyZSB3YXMKPiAtCSAqIG1vcmUgdG8gZG8uICovCj4gLQkvKiBEZXBlbmRpbmcgb24gdGhlIFZJ UlRJT19SSU5HX0ZfRVZFTlRfSURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KPiAtCSAqIGVpdGhlciBj bGVhciB0aGUgZmxhZ3MgYml0IG9yIHBvaW50IHRoZSBldmVudCBpbmRleCBhdCB0aGUgbmV4dAo+ IC0JICogZW50cnkuIEFsd2F5cyBkbyBib3RoIHRvIGtlZXAgY29kZSBzaW1wbGUuICovCj4gLQlp ZiAodnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKSB7 Cj4gLQkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyAmPSB+VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJV UFQ7Cj4gLQkJaWYgKCF2cS0+ZXZlbnQpCj4gLQkJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBj cHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93KTsKPiAtCX0K PiAtCXZyaW5nX3VzZWRfZXZlbnQoJnZxLT52cmluZykgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52 ZGV2LCBsYXN0X3VzZWRfaWR4ID0gdnEtPmxhc3RfdXNlZF9pZHgpOwo+IC0JRU5EX1VTRSh2cSk7 Cj4gLQlyZXR1cm4gbGFzdF91c2VkX2lkeDsKPiArCXJldHVybiB2cS0+cGFja2VkID8gdmlydHF1 ZXVlX2VuYWJsZV9jYl9wcmVwYXJlX3BhY2tlZChfdnEpIDoKPiArCQkJICAgIHZpcnRxdWV1ZV9l bmFibGVfY2JfcHJlcGFyZV9zcGxpdChfdnEpOwo+ICAgfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwo dmlydHF1ZXVlX2VuYWJsZV9jYl9wcmVwYXJlKTsKPiAgIAo+IEBAIC04MjksOCArMTA4NCw4IEBA IGJvb2wgdmlydHF1ZXVlX3BvbGwoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBsYXN0 X3VzZWRfaWR4KQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZx KF92cSk7Cj4gICAKPiAtCXZpcnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7Cj4gLQlyZXR1cm4g KHUxNilsYXN0X3VzZWRfaWR4ICE9IHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmlu Zy51c2VkLT5pZHgpOwo+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2aXJ0cXVldWVfcG9sbF9wYWNr ZWQoX3ZxLCBsYXN0X3VzZWRfaWR4KSA6Cj4gKwkJCSAgICB2aXJ0cXVldWVfcG9sbF9zcGxpdChf dnEsIGxhc3RfdXNlZF9pZHgpOwo+ICAgfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVl X3BvbGwpOwo+ICAgCj4gQEAgLTg2OCwzNCArMTEyMyw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHZp cnRxdWV1ZV9lbmFibGVfY2IpOwo+ICAgYm9vbCB2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQo c3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ICAgewo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUg KnZxID0gdG9fdnZxKF92cSk7Cj4gLQl1MTYgYnVmczsKPiAgIAo+IC0JU1RBUlRfVVNFKHZxKTsK PiAtCj4gLQkvKiBXZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhl biBjaGVjayBpZiB0aGVyZSB3YXMKPiAtCSAqIG1vcmUgdG8gZG8uICovCj4gLQkvKiBEZXBlbmRp bmcgb24gdGhlIFZJUlRJT19SSU5HX0ZfVVNFRF9FVkVOVF9JRFggZmVhdHVyZSwgd2UgbmVlZCB0 bwo+IC0JICogZWl0aGVyIGNsZWFyIHRoZSBmbGFncyBiaXQgb3IgcG9pbnQgdGhlIGV2ZW50IGlu ZGV4IGF0IHRoZSBuZXh0Cj4gLQkgKiBlbnRyeS4gQWx3YXlzIHVwZGF0ZSB0aGUgZXZlbnQgaW5k ZXggdG8ga2VlcCBjb2RlIHNpbXBsZS4gKi8KPiAtCWlmICh2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93 ICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpIHsKPiAtCQl2cS0+YXZhaWxfZmxhZ3Nfc2hh ZG93ICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKPiAtCQlpZiAoIXZxLT5ldmVudCkK PiAtCQkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYs IHZxLT5hdmFpbF9mbGFnc19zaGFkb3cpOwo+IC0JfQo+IC0JLyogVE9ETzogdHVuZSB0aGlzIHRo cmVzaG9sZCAqLwo+IC0JYnVmcyA9ICh1MTYpKHZxLT5hdmFpbF9pZHhfc2hhZG93IC0gdnEtPmxh c3RfdXNlZF9pZHgpICogMyAvIDQ7Cj4gLQo+IC0JdmlydGlvX3N0b3JlX21iKHZxLT53ZWFrX2Jh cnJpZXJzLAo+IC0JCQkmdnJpbmdfdXNlZF9ldmVudCgmdnEtPnZyaW5nKSwKPiAtCQkJY3B1X3Rv X3ZpcnRpbzE2KF92cS0+dmRldiwgdnEtPmxhc3RfdXNlZF9pZHggKyBidWZzKSk7Cj4gLQo+IC0J aWYgKHVubGlrZWx5KCh1MTYpKHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZy51 c2VkLT5pZHgpIC0gdnEtPmxhc3RfdXNlZF9pZHgpID4gYnVmcykpIHsKPiAtCQlFTkRfVVNFKHZx KTsKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQl9Cj4gLQo+IC0JRU5EX1VTRSh2cSk7Cj4gLQlyZXR1 cm4gdHJ1ZTsKPiArCXJldHVybiB2cS0+cGFja2VkID8gdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxh eWVkX3BhY2tlZChfdnEpIDoKPiArCQkJICAgIHZpcnRxdWV1ZV9lbmFibGVfY2JfZGVsYXllZF9z cGxpdChfdnEpOwo+ICAgfQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2VuYWJsZV9j Yl9kZWxheWVkKTsKPiAgIAo+IEBAIC05MTAsMjcgKzExNDAsOSBAQCBFWFBPUlRfU1lNQk9MX0dQ TCh2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQpOwo+ICAgdm9pZCAqdmlydHF1ZXVlX2RldGFj aF91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiAgIHsKPiAgIAlzdHJ1Y3QgdnJp bmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+IC0JdW5zaWduZWQgaW50IGk7Cj4gLQl2 b2lkICpidWY7Cj4gICAKPiAtCVNUQVJUX1VTRSh2cSk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8 IHZxLT52cmluZy5udW07IGkrKykgewo+IC0JCWlmICghdnEtPmRlc2Nfc3RhdGVbaV0uZGF0YSkK PiAtCQkJY29udGludWU7Cj4gLQkJLyogZGV0YWNoX2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBp dCBub3cuICovCj4gLQkJYnVmID0gdnEtPmRlc2Nfc3RhdGVbaV0uZGF0YTsKPiAtCQlkZXRhY2hf YnVmKHZxLCBpLCBOVUxMKTsKPiAtCQl2cS0+YXZhaWxfaWR4X3NoYWRvdy0tOwo+IC0JCXZxLT52 cmluZy5hdmFpbC0+aWR4ID0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwgdnEtPmF2YWlsX2lk eF9zaGFkb3cpOwo+IC0JCUVORF9VU0UodnEpOwo+IC0JCXJldHVybiBidWY7Cj4gLQl9Cj4gLQkv KiBUaGF0IHNob3VsZCBoYXZlIGZyZWVkIGV2ZXJ5dGhpbmcuICovCj4gLQlCVUdfT04odnEtPnZx Lm51bV9mcmVlICE9IHZxLT52cmluZy5udW0pOwo+IC0KPiAtCUVORF9VU0UodnEpOwo+IC0JcmV0 dXJuIE5VTEw7Cj4gKwlyZXR1cm4gdnEtPnBhY2tlZCA/IHZpcnRxdWV1ZV9kZXRhY2hfdW51c2Vk X2J1Zl9wYWNrZWQoX3ZxKSA6Cj4gKwkJCSAgICB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWZf c3BsaXQoX3ZxKTsKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRxdWV1ZV9kZXRhY2hf dW51c2VkX2J1Zik7Cj4gICAKPiBAQCAtOTU1LDcgKzExNjcsOCBAQCBpcnFyZXR1cm5fdCB2cmlu Z19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX3ZxKQo+ICAgRVhQT1JUX1NZTUJPTF9HUEwodnJp bmdfaW50ZXJydXB0KTsKPiAgIAo+ICAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19uZXdfdmly dHF1ZXVlKHVuc2lnbmVkIGludCBpbmRleCwKPiAtCQkJCQlzdHJ1Y3QgdnJpbmcgdnJpbmcsCj4g KwkJCQkJdW5pb24gdnJpbmdfdW5pb24gdnJpbmcsCj4gKwkJCQkJYm9vbCBwYWNrZWQsCj4gICAJ CQkJCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAo+ICAgCQkJCQlib29sIHdlYWtfYmFycmll cnMsCj4gICAJCQkJCWJvb2wgY29udGV4dCwKPiBAQCAtOTYzLDE5ICsxMTc2LDIyIEBAIHN0cnVj dCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5kZXgsCj4g ICAJCQkJCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHZpcnRxdWV1ZSAqKSwKPiAgIAkJCQkJY29u c3QgY2hhciAqbmFtZSkKPiAgIHsKPiAtCXVuc2lnbmVkIGludCBpOwo+ICAgCXN0cnVjdCB2cmlu Z192aXJ0cXVldWUgKnZxOwo+ICsJdW5zaWduZWQgaW50IG51bSwgaTsKPiArCXNpemVfdCBzaXpl Owo+ICAgCj4gLQl2cSA9IGttYWxsb2Moc2l6ZW9mKCp2cSkgKyB2cmluZy5udW0gKiBzaXplb2Yo c3RydWN0IHZyaW5nX2Rlc2Nfc3RhdGUpLAo+IC0JCSAgICAgR0ZQX0tFUk5FTCk7Cj4gKwludW0g PSBwYWNrZWQgPyB2cmluZy52cmluZ19wYWNrZWQubnVtIDogdnJpbmcudnJpbmdfc3BsaXQubnVt Owo+ICsJc2l6ZSA9IHBhY2tlZCA/IG51bSAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0 ZV9wYWNrZWQpIDoKPiArCQkJbnVtICogc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlKTsK PiArCj4gKwl2cSA9IGttYWxsb2Moc2l6ZW9mKCp2cSkgKyBzaXplLCBHRlBfS0VSTkVMKTsKPiAg IAlpZiAoIXZxKQo+ICAgCQlyZXR1cm4gTlVMTDsKPiAgIAo+IC0JdnEtPnZyaW5nID0gdnJpbmc7 Cj4gICAJdnEtPnZxLmNhbGxiYWNrID0gY2FsbGJhY2s7Cj4gICAJdnEtPnZxLnZkZXYgPSB2ZGV2 Owo+ICAgCXZxLT52cS5uYW1lID0gbmFtZTsKPiAtCXZxLT52cS5udW1fZnJlZSA9IHZyaW5nLm51 bTsKPiArCXZxLT52cS5udW1fZnJlZSA9IG51bTsKPiAgIAl2cS0+dnEuaW5kZXggPSBpbmRleDsK PiAgIAl2cS0+d2Vfb3duX3JpbmcgPSBmYWxzZTsKPiAgIAl2cS0+cXVldWVfZG1hX2FkZHIgPSAw Owo+IEBAIC05ODQsOSArMTIwMCw4IEBAIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3Zp cnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5kZXgsCj4gICAJdnEtPndlYWtfYmFycmllcnMgPSB3ZWFr X2JhcnJpZXJzOwo+ICAgCXZxLT5icm9rZW4gPSBmYWxzZTsKPiAgIAl2cS0+bGFzdF91c2VkX2lk eCA9IDA7Cj4gLQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ID0gMDsKPiAtCXZxLT5hdmFpbF9pZHhf c2hhZG93ID0gMDsKPiAgIAl2cS0+bnVtX2FkZGVkID0gMDsKPiArCXZxLT5wYWNrZWQgPSBwYWNr ZWQ7Cj4gICAJbGlzdF9hZGRfdGFpbCgmdnEtPnZxLmxpc3QsICZ2ZGV2LT52cXMpOwo+ICAgI2lm ZGVmIERFQlVHCj4gICAJdnEtPmluX3VzZSA9IGZhbHNlOwo+IEBAIC05OTcsMTkgKzEyMTIsNDgg QEAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVlKHVuc2lnbmVkIGludCBp bmRleCwKPiAgIAkJIWNvbnRleHQ7Cj4gICAJdnEtPmV2ZW50ID0gdmlydGlvX2hhc19mZWF0dXJl KHZkZXYsIFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYKTsKPiAgIAo+ICsJaWYgKHZxLT5wYWNrZWQp IHsKPiArCQl2cS0+dnJpbmdfcGFja2VkID0gdnJpbmcudnJpbmdfcGFja2VkOwo+ICsJCXZxLT5u ZXh0X2F2YWlsX2lkeCA9IDA7Cj4gKwkJdnEtPmF2YWlsX3dyYXBfY291bnRlciA9IDE7Cj4gKwkJ dnEtPnVzZWRfd3JhcF9jb3VudGVyID0gMTsKPiArCQl2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID0g MDsKPiArCj4gKwkJbWVtc2V0KHZxLT5kZXNjX3N0YXRlX3BhY2tlZCwgMCwKPiArCQkJbnVtICog c2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlX3BhY2tlZCkpOwo+ICsKPiB4Cj4gKwkJdnEt PmZyZWVfaGVhZCA9IDA7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51bS0xOyBpKyspCj4gKwkJCXZx LT5kZXNjX3N0YXRlX3BhY2tlZFtpXS5uZXh0ID0gaSArIDE7Cj4gKwl9IGVsc2Ugewo+ICsJCXZx LT52cmluZyA9IHZyaW5nLnZyaW5nX3NwbGl0Owo+ICsJCXZxLT5hdmFpbF9mbGFnc19zaGFkb3cg PSAwOwo+ICsJCXZxLT5hdmFpbF9pZHhfc2hhZG93ID0gMDsKPiArCj4gKwkJLyogUHV0IGV2ZXJ5 dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiArCQl2cS0+ZnJlZV9oZWFkID0gMDsKPiArCQlmb3Ig KGkgPSAwOyBpIDwgbnVtLTE7IGkrKykKPiArCQkJdnEtPnZyaW5nLmRlc2NbaV0ubmV4dCA9IGNw dV90b192aXJ0aW8xNih2ZGV2LCBpICsgMSk7Cj4gKwo+ICsJCW1lbXNldCh2cS0+ZGVzY19zdGF0 ZSwgMCwKPiArCQkJbnVtICogc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlKSk7Cj4gKwl9 Cj4gKwo+ICAgCS8qIE5vIGNhbGxiYWNrPyAgVGVsbCBvdGhlciBzaWRlIG5vdCB0byBib3RoZXIg dXMuICovCj4gICAJaWYgKCFjYWxsYmFjaykgewo+IC0JCXZxLT5hdmFpbF9mbGFnc19zaGFkb3cg fD0gVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Cj4gLQkJaWYgKCF2cS0+ZXZlbnQpCj4gLQkJ CXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwgdnEtPmF2YWls X2ZsYWdzX3NoYWRvdyk7Cj4gKwkJaWYgKHBhY2tlZCkgewo+ICsJCQl2cS0+ZXZlbnRfZmxhZ3Nf c2hhZG93ID0gVlJJTkdfRVZFTlRfRl9ESVNBQkxFOwo+ICsJCQl2cS0+dnJpbmdfcGFja2VkLmRy aXZlci0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwKPiArCQkJCQkJdnEtPmV2ZW50X2Zs YWdzX3NoYWRvdyk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyB8 PSBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKPiArCQkJaWYgKCF2cS0+ZXZlbnQpCj4gKwkJ CQl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzID0gY3B1X3RvX3ZpcnRpbzE2KHZkZXYsCj4gKwkJCQkJ CXZxLT5hdmFpbF9mbGFnc19zaGFkb3cpOwo+ICsJCX0KPiAgIAl9Cj4gICAKPiAtCS8qIFB1dCBl dmVyeXRoaW5nIGluIGZyZWUgbGlzdHMuICovCj4gLQl2cS0+ZnJlZV9oZWFkID0gMDsKPiAtCWZv ciAoaSA9IDA7IGkgPCB2cmluZy5udW0tMTsgaSsrKQo+IC0JCXZxLT52cmluZy5kZXNjW2ldLm5l eHQgPSBjcHVfdG9fdmlydGlvMTYodmRldiwgaSArIDEpOwo+IC0JbWVtc2V0KHZxLT5kZXNjX3N0 YXRlLCAwLCB2cmluZy5udW0gKiBzaXplb2Yoc3RydWN0IHZyaW5nX2Rlc2Nfc3RhdGUpKTsKPiAt Cj4gICAJcmV0dXJuICZ2cS0+dnE7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTChfX3ZyaW5n X25ld192aXJ0cXVldWUpOwo+IEBAIC0xMDU2LDYgKzEzMDAsMTIgQEAgc3RhdGljIHZvaWQgdnJp bmdfZnJlZV9xdWV1ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc2l6ZV90IHNpemUsCj4g ICAJfQo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gK19fdnJpbmdfc2l6ZSh1bnNp Z25lZCBpbnQgbnVtLCB1bnNpZ25lZCBsb25nIGFsaWduLCBib29sIHBhY2tlZCkKPiArewo+ICsJ cmV0dXJuIHBhY2tlZCA/IHZyaW5nX3NpemVfcGFja2VkKG51bSwgYWxpZ24pIDogdnJpbmdfc2l6 ZShudW0sIGFsaWduKTsKPiArfQo+ICsKPiAgIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0 ZV92aXJ0cXVldWUoCj4gICAJdW5zaWduZWQgaW50IGluZGV4LAo+ICAgCXVuc2lnbmVkIGludCBu dW0sCj4gQEAgLTEwNzIsNyArMTMyMiw4IEBAIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0 ZV92aXJ0cXVldWUoCj4gICAJdm9pZCAqcXVldWUgPSBOVUxMOwo+ICAgCWRtYV9hZGRyX3QgZG1h X2FkZHI7Cj4gICAJc2l6ZV90IHF1ZXVlX3NpemVfaW5fYnl0ZXM7Cj4gLQlzdHJ1Y3QgdnJpbmcg dnJpbmc7Cj4gKwl1bmlvbiB2cmluZ191bmlvbiB2cmluZzsKPiArCWJvb2wgcGFja2VkOwo+ICAg Cj4gICAJLyogV2UgYXNzdW1lIG51bSBpcyBhIHBvd2VyIG9mIDIuICovCj4gICAJaWYgKG51bSAm IChudW0gLSAxKSkgewo+IEBAIC0xMDgwLDkgKzEzMzEsMTMgQEAgc3RydWN0IHZpcnRxdWV1ZSAq dnJpbmdfY3JlYXRlX3ZpcnRxdWV1ZSgKPiAgIAkJcmV0dXJuIE5VTEw7Cj4gICAJfQo+ICAgCj4g KwlwYWNrZWQgPSB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19QQUNLRUQp Owo+ICsKPiAgIAkvKiBUT0RPOiBhbGxvY2F0ZSBlYWNoIHF1ZXVlIGNodW5rIGluZGl2aWR1YWxs eSAqLwo+IC0JZm9yICg7IG51bSAmJiB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24pID4gUEFH RV9TSVpFOyBudW0gLz0gMikgewo+IC0JCXF1ZXVlID0gdnJpbmdfYWxsb2NfcXVldWUodmRldiwg dnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWduKSwKPiArCWZvciAoOyBudW0gJiYgX192cmluZ19z aXplKG51bSwgdnJpbmdfYWxpZ24sIHBhY2tlZCkgPiBQQUdFX1NJWkU7Cj4gKwkJCW51bSAvPSAy KSB7Cj4gKwkJcXVldWUgPSB2cmluZ19hbGxvY19xdWV1ZSh2ZGV2LCBfX3ZyaW5nX3NpemUobnVt LCB2cmluZ19hbGlnbiwKPiArCQkJCQkJCSAgICAgcGFja2VkKSwKPiAgIAkJCQkJICAmZG1hX2Fk ZHIsCj4gICAJCQkJCSAgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk58X19HRlBfWkVSTyk7Cj4gICAJ CWlmIChxdWV1ZSkKPiBAQCAtMTA5NCwxNyArMTM0OSwyMSBAQCBzdHJ1Y3QgdmlydHF1ZXVlICp2 cmluZ19jcmVhdGVfdmlydHF1ZXVlKAo+ICAgCj4gICAJaWYgKCFxdWV1ZSkgewo+ICAgCQkvKiBU cnkgdG8gZ2V0IGEgc2luZ2xlIHBhZ2UuIFlvdSBhcmUgbXkgb25seSBob3BlISAqLwo+IC0JCXF1 ZXVlID0gdnJpbmdfYWxsb2NfcXVldWUodmRldiwgdnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWdu KSwKPiArCQlxdWV1ZSA9IHZyaW5nX2FsbG9jX3F1ZXVlKHZkZXYsIF9fdnJpbmdfc2l6ZShudW0s IHZyaW5nX2FsaWduLAo+ICsJCQkJCQkJICAgICBwYWNrZWQpLAo+ICAgCQkJCQkgICZkbWFfYWRk ciwgR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKPiAgIAl9Cj4gICAJaWYgKCFxdWV1ZSkKPiAgIAkJ cmV0dXJuIE5VTEw7Cj4gICAKPiAtCXF1ZXVlX3NpemVfaW5fYnl0ZXMgPSB2cmluZ19zaXplKG51 bSwgdnJpbmdfYWxpZ24pOwo+IC0JdnJpbmdfaW5pdCgmdnJpbmcsIG51bSwgcXVldWUsIHZyaW5n X2FsaWduKTsKPiArCXF1ZXVlX3NpemVfaW5fYnl0ZXMgPSBfX3ZyaW5nX3NpemUobnVtLCB2cmlu Z19hbGlnbiwgcGFja2VkKTsKPiArCWlmIChwYWNrZWQpCj4gKwkJdnJpbmdfaW5pdF9wYWNrZWQo JnZyaW5nLnZyaW5nX3BhY2tlZCwgbnVtLCBxdWV1ZSwgdnJpbmdfYWxpZ24pOwo+ICsJZWxzZQo+ ICsJCXZyaW5nX2luaXQoJnZyaW5nLnZyaW5nX3NwbGl0LCBudW0sIHF1ZXVlLCB2cmluZ19hbGln bik7Cj4gICAKPiAtCXZxID0gX192cmluZ19uZXdfdmlydHF1ZXVlKGluZGV4LCB2cmluZywgdmRl diwgd2Vha19iYXJyaWVycywgY29udGV4dCwKPiAtCQkJCSAgIG5vdGlmeSwgY2FsbGJhY2ssIG5h bWUpOwo+ICsJdnEgPSBfX3ZyaW5nX25ld192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCBwYWNrZWQs IHZkZXYsIHdlYWtfYmFycmllcnMsCj4gKwkJCQkgICBjb250ZXh0LCBub3RpZnksIGNhbGxiYWNr LCBuYW1lKTsKPiAgIAlpZiAoIXZxKSB7Cj4gICAJCXZyaW5nX2ZyZWVfcXVldWUodmRldiwgcXVl dWVfc2l6ZV9pbl9ieXRlcywgcXVldWUsCj4gICAJCQkJIGRtYV9hZGRyKTsKPiBAQCAtMTEzMCwx MCArMTM4OSwxNyBAQCBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19uZXdfdmlydHF1ZXVlKHVuc2ln bmVkIGludCBpbmRleCwKPiAgIAkJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0 cXVldWUgKnZxKSwKPiAgIAkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQo+ICAgewo+IC0Jc3Ry dWN0IHZyaW5nIHZyaW5nOwo+IC0JdnJpbmdfaW5pdCgmdnJpbmcsIG51bSwgcGFnZXMsIHZyaW5n X2FsaWduKTsKPiAtCXJldHVybiBfX3ZyaW5nX25ld192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCB2 ZGV2LCB3ZWFrX2JhcnJpZXJzLCBjb250ZXh0LAo+IC0JCQkJICAgICBub3RpZnksIGNhbGxiYWNr LCBuYW1lKTsKPiArCXVuaW9uIHZyaW5nX3VuaW9uIHZyaW5nOwo+ICsJYm9vbCBwYWNrZWQ7Cj4g Kwo+ICsJcGFja2VkID0gdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX1JJTkdfUEFD S0VEKTsKPiArCWlmIChwYWNrZWQpCj4gKwkJdnJpbmdfaW5pdF9wYWNrZWQoJnZyaW5nLnZyaW5n X3BhY2tlZCwgbnVtLCBwYWdlcywgdnJpbmdfYWxpZ24pOwo+ICsJZWxzZQo+ICsJCXZyaW5nX2lu aXQoJnZyaW5nLnZyaW5nX3NwbGl0LCBudW0sIHBhZ2VzLCB2cmluZ19hbGlnbik7Cj4gKwo+ICsJ cmV0dXJuIF9fdnJpbmdfbmV3X3ZpcnRxdWV1ZShpbmRleCwgdnJpbmcsIHBhY2tlZCwgdmRldiwg d2Vha19iYXJyaWVycywKPiArCQkJCSAgICAgY29udGV4dCwgbm90aWZ5LCBjYWxsYmFjaywgbmFt ZSk7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTCh2cmluZ19uZXdfdmlydHF1ZXVlKTsKPiAg IAo+IEBAIC0xMTQzLDcgKzE0MDksOSBAQCB2b2lkIHZyaW5nX2RlbF92aXJ0cXVldWUoc3RydWN0 IHZpcnRxdWV1ZSAqX3ZxKQo+ICAgCj4gICAJaWYgKHZxLT53ZV9vd25fcmluZykgewo+ICAgCQl2 cmluZ19mcmVlX3F1ZXVlKHZxLT52cS52ZGV2LCB2cS0+cXVldWVfc2l6ZV9pbl9ieXRlcywKPiAt CQkJCSB2cS0+dnJpbmcuZGVzYywgdnEtPnF1ZXVlX2RtYV9hZGRyKTsKPiArCQkJCSB2cS0+cGFj a2VkID8gKHZvaWQgKil2cS0+dnJpbmdfcGFja2VkLmRlc2MgOgo+ICsJCQkJCSAgICAgICh2b2lk ICopdnEtPnZyaW5nLmRlc2MsCj4gKwkJCQkgdnEtPnF1ZXVlX2RtYV9hZGRyKTsKPiAgIAl9Cj4g ICAJbGlzdF9kZWwoJl92cS0+bGlzdCk7Cj4gICAJa2ZyZWUodnEpOwo+IEBAIC0xMTg1LDcgKzE0 NTMsNyBAQCB1bnNpZ25lZCBpbnQgdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHN0cnVjdCB2aXJ0 cXVldWUgKl92cSkKPiAgIAo+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZx KF92cSk7Cj4gICAKPiAtCXJldHVybiB2cS0+dnJpbmcubnVtOwo+ICsJcmV0dXJuIHZxLT5wYWNr ZWQgPyB2cS0+dnJpbmdfcGFja2VkLm51bSA6IHZxLT52cmluZy5udW07Cj4gICB9Cj4gICBFWFBP UlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfZ2V0X3ZyaW5nX3NpemUpOwo+ICAgCj4gQEAgLTEyMjgs NiArMTQ5NiwxMCBAQCBkbWFfYWRkcl90IHZpcnRxdWV1ZV9nZXRfYXZhaWxfYWRkcihzdHJ1Y3Qg dmlydHF1ZXVlICpfdnEpCj4gICAKPiAgIAlCVUdfT04oIXZxLT53ZV9vd25fcmluZyk7Cj4gICAK PiArCWlmICh2cS0+cGFja2VkKQo+ICsJCXJldHVybiB2cS0+cXVldWVfZG1hX2FkZHIgKyAoKGNo YXIgKil2cS0+dnJpbmdfcGFja2VkLmRyaXZlciAtCj4gKwkJCQkoY2hhciAqKXZxLT52cmluZ19w YWNrZWQuZGVzYyk7Cj4gKwo+ICAgCXJldHVybiB2cS0+cXVldWVfZG1hX2FkZHIgKwo+ICAgCQko KGNoYXIgKil2cS0+dnJpbmcuYXZhaWwgLSAoY2hhciAqKXZxLT52cmluZy5kZXNjKTsKPiAgIH0K PiBAQCAtMTIzOSwxMSArMTUxMSwxNiBAQCBkbWFfYWRkcl90IHZpcnRxdWV1ZV9nZXRfdXNlZF9h ZGRyKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiAgIAo+ICAgCUJVR19PTighdnEtPndlX293bl9y aW5nKTsKPiAgIAo+ICsJaWYgKHZxLT5wYWNrZWQpCj4gKwkJcmV0dXJuIHZxLT5xdWV1ZV9kbWFf YWRkciArICgoY2hhciAqKXZxLT52cmluZ19wYWNrZWQuZGV2aWNlIC0KPiArCQkJCShjaGFyICop dnEtPnZyaW5nX3BhY2tlZC5kZXNjKTsKPiArCj4gICAJcmV0dXJuIHZxLT5xdWV1ZV9kbWFfYWRk ciArCj4gICAJCSgoY2hhciAqKXZxLT52cmluZy51c2VkIC0gKGNoYXIgKil2cS0+dnJpbmcuZGVz Yyk7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0cXVldWVfZ2V0X3VzZWRfYWRkcik7 Cj4gICAKPiArLyogT25seSBhdmFpbGFibGUgZm9yIHNwbGl0IHJpbmcgKi8KPiAgIGNvbnN0IHN0 cnVjdCB2cmluZyAqdmlydHF1ZXVlX2dldF92cmluZyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiAg IHsKCkEgcG9zc2libGUgaXNzdWUgd2l0aCB0aGlzIGlzOgoKQWZ0ZXIgY29tbWl0IGQ0Njc0MjQw ZjMxZjhjNDI4OWFiYmEwN2Q2NDI5MWM2ZGRjZTUxYmMgKCJLVk06IHMzOTA6IAp2aXJ0aW8tY2N3 IHJldmlzaW9uIDEgU0VUX1ZRIikuIENDVyB0cmllcyB0byB1c2UgCnZpcnRxdWV1ZV9nZXRfYXZh aWwoKS92aXJ0cXVldWVfZ2V0X3VzZWQoKS4gTG9va3MgbGlrZSBhIGJ1ZyBlaXRoZXIgaGVyZSAK b3IgY2N3IGNvZGUuCgpUaGFua3MKCj4gICAJcmV0dXJuICZ0b192dnEodnEpLT52cmluZzsKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oIGIvaW5jbHVkZS9saW51eC92 aXJ0aW9fcmluZy5oCj4gaW5kZXggYmJmMzI1MjRhYjI3Li5hMDA3NTg5NGFkMTYgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5oCj4gKysrIGIvaW5jbHVkZS9saW51eC92 aXJ0aW9fcmluZy5oCj4gQEAgLTYwLDYgKzYwLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2aXJ0 aW9fc3RvcmVfbWIoYm9vbCB3ZWFrX2JhcnJpZXJzLAo+ICAgc3RydWN0IHZpcnRpb19kZXZpY2U7 Cj4gICBzdHJ1Y3QgdmlydHF1ZXVlOwo+ICAgCj4gK3VuaW9uIHZyaW5nX3VuaW9uIHsKPiArCXN0 cnVjdCB2cmluZyB2cmluZ19zcGxpdDsKPiArCXN0cnVjdCB2cmluZ19wYWNrZWQgdnJpbmdfcGFj a2VkOwo+ICt9Owo+ICsKPiAgIC8qCj4gICAgKiBDcmVhdGVzIGEgdmlydHF1ZXVlIGFuZCBhbGxv Y2F0ZXMgdGhlIGRlc2NyaXB0b3IgcmluZy4gIElmCj4gICAgKiBtYXlfcmVkdWNlX251bSBpcyBz ZXQsIHRoZW4gdGhpcyBtYXkgYWxsb2NhdGUgYSBzbWFsbGVyIHJpbmcgdGhhbgo+IEBAIC03OSw3 ICs4NCw4IEBAIHN0cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0ZV92aXJ0cXVldWUodW5zaWdu ZWQgaW50IGluZGV4LAo+ICAgCj4gICAvKiBDcmVhdGVzIGEgdmlydHF1ZXVlIHdpdGggYSBjdXN0 b20gbGF5b3V0LiAqLwo+ICAgc3RydWN0IHZpcnRxdWV1ZSAqX192cmluZ19uZXdfdmlydHF1ZXVl KHVuc2lnbmVkIGludCBpbmRleCwKPiAtCQkJCQlzdHJ1Y3QgdnJpbmcgdnJpbmcsCj4gKwkJCQkJ dW5pb24gdnJpbmdfdW5pb24gdnJpbmcsCj4gKwkJCQkJYm9vbCBwYWNrZWQsCj4gICAJCQkJCXN0 cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAo+ICAgCQkJCQlib29sIHdlYWtfYmFycmllcnMsCj4g ICAJCQkJCWJvb2wgY3R4LAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3Rz LmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9t YWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u