From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1ImxOn-0002C0-BV for qemu-devel@nongnu.org; Tue, 30 Oct 2007 16:09:17 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1ImxOk-0002Ba-Ew for qemu-devel@nongnu.org; Tue, 30 Oct 2007 16:09:16 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ImxOk-0002BX-A0 for qemu-devel@nongnu.org; Tue, 30 Oct 2007 16:09:14 -0400 Received: from ik-out-1112.google.com ([66.249.90.179]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1ImxOj-0002Po-Oc for qemu-devel@nongnu.org; Tue, 30 Oct 2007 16:09:14 -0400 Received: by ik-out-1112.google.com with SMTP id c29so1158588ika for ; Tue, 30 Oct 2007 13:09:10 -0700 (PDT) Message-ID: Date: Tue, 30 Oct 2007 22:09:10 +0200 From: "Blue Swirl" Subject: Re: [Qemu-devel] Faster, generic IO/DMA model with vectored AIO? In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_4945_1818771.1193774950470" References: <200710280129.10640.paul@codesourcery.com> <20071028191028.GF14076@mail.shareable.org> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paul Brook ------=_Part_4945_1818771.1193774950470 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 10/29/07, Blue Swirl wrote: > We could cache the resolved addresses to overcome the additional setup > overhead. Each stage should install cache invalidation callbacks or a > method to call for recalculation of the addresses. For example IOMMU > or ESPDMA mappings change very often. I meant to write "don't change very often." This version actually resolves the host memory address so that scsi-disk could (with some additional plumbing) write directly to final destination. I think both pre- and postprocessing hooks may be needed, but those are not implemented yet. What about error handling? For example, first page is OK but second is not. Truncate all further blocks and install a post-processing hook that raises a bus error? Example output: esp DMADriverAIOCB 0x27433f0 IO ranges: base 0000000000000000 len 0000000000000800 Prehooks: Posthooks: espdma DMADriverAIOCB 0x27433f0 IO ranges: base 00000000fe00000a len 0000000000000800 Prehooks: Posthooks: iommu DMADriverAIOCB 0x27433f0 IO ranges: base 0000000007fe100a len 0000000000000800 Prehooks: Posthooks: physical DMADriverAIOCB 0x27433f0 IO ranges: base 00002b8e6f82200a len 0000000000000800 Prehooks: Posthooks: ------=_Part_4945_1818771.1193774950470 Content-Type: text/x-diff; name=gdma_aiov.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_f8eulozm Content-Disposition: attachment; filename=gdma_aiov.diff SW5kZXg6IHFlbXUvdmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvdmwuaAkyMDA3LTEwLTI5 IDE2OjU5OjM3LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS92bC5oCTIwMDctMTAtMzAgMTk6MDg6 MzUuMDAwMDAwMDAwICswMDAwCkBAIC03NDYsNiArNzQ2LDEwOSBAQAogCiAjaW5jbHVkZSAiaHcv aXJxLmgiCiAKKy8qIEdlbmVyaWMgRE1BIEFQSSAqLworCit0eXBlZGVmIHZvaWQgRE1BRHJpdmVy Q29tcGxldGlvbkZ1bmModm9pZCAqb3BhcXVlLCBpbnQgcmV0KTsKKwordHlwZWRlZiBzdHJ1Y3Qg cWVtdV9pb2xpc3QgeworICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb3ZfYmFzZTsKKyAgICB0YXJn ZXRfcGh5c19hZGRyX3QgaW92X2xlbjsKKyAgICBzdHJ1Y3QgcWVtdV9pb2xpc3QgKm5leHQ7Cit9 IHFlbXVfaW9saXN0OworCit0eXBlZGVmIHN0cnVjdCBETUFEcml2ZXJBSU9DQiBETUFEcml2ZXJB SU9DQjsKKwordHlwZWRlZiBETUFEcml2ZXJBSU9DQiAqCitETUFUcmFuc2xhdGlvbkhhbmRsZXIo dm9pZCAqb3BhcXVlLCBETUFEcml2ZXJBSU9DQiAqcmVxdWVzdCwgaW50IGlzX3dyaXRlKTsKKwor dHlwZWRlZiBzdHJ1Y3QgRE1BQ29tcGxldGlvbkVudHJ5IHsKKyAgICBETUFUcmFuc2xhdGlvbkhh bmRsZXIgKmZ1bmM7CisgICAgdm9pZCAqb3BhcXVlOworICAgIHN0cnVjdCBETUFDb21wbGV0aW9u RW50cnkgKm5leHQ7Cit9IERNQUNvbXBsZXRpb25FbnRyeTsKKworc3RydWN0IERNQURyaXZlckFJ T0NCIHsKKyAgICBxZW11X2lvbGlzdCAqaW9saXN0OworICAgIERNQUNvbXBsZXRpb25FbnRyeSAq cHJlaG9vazsKKyAgICBETUFDb21wbGV0aW9uRW50cnkgKnBvc3Rob29rOworICAgIHN0cnVjdCBE TUFEcml2ZXJBSU9DQiAqbmV4dDsKK307CisKK3R5cGVkZWYgc3RydWN0IHFlbXVfYnVzIHsKKyAg ICB1bnNpZ25lZCBpbnQgYnVzX2JpdHM7CisgICAgRE1BVHJhbnNsYXRpb25IYW5kbGVyICpub3J0 aF9oYW5kbGVyOworICAgIHZvaWQgKm5vcnRoX2hhbmRsZXJfb3BhcXVlOworICAgIERNQVRyYW5z bGF0aW9uSGFuZGxlciAqc291dGhfaGFuZGxlcjsKKyAgICB2b2lkICpzb3V0aF9oYW5kbGVyX29w YXF1ZTsKK30gcWVtdV9idXM7CisKK3N0YXRpYyBpbmxpbmUgcWVtdV9idXMgKgorYnVzX2luaXQo dW5zaWduZWQgaW50IGJ1c19iaXRzLAorICAgICAgICAgRE1BVHJhbnNsYXRpb25IYW5kbGVyIG5v cnRoX2hhbmRsZXIsCisgICAgICAgICB2b2lkICpub3J0aF9oYW5kbGVyX29wYXF1ZSwKKyAgICAg ICAgIERNQVRyYW5zbGF0aW9uSGFuZGxlciBzb3V0aF9oYW5kbGVyLAorICAgICAgICAgdm9pZCAq c291dGhfaGFuZGxlcl9vcGFxdWUpCit7CisgICAgcWVtdV9idXMgKmJ1czsKKworICAgIGJ1cyA9 IHFlbXVfbWFsbG9jeihzaXplb2YocWVtdV9idXMpKTsKKyAgICBidXMtPmJ1c19iaXRzID0gYnVz X2JpdHM7CisgICAgYnVzLT5ub3J0aF9oYW5kbGVyID0gbm9ydGhfaGFuZGxlcjsKKyAgICBidXMt Pm5vcnRoX2hhbmRsZXJfb3BhcXVlID0gbm9ydGhfaGFuZGxlcl9vcGFxdWU7CisgICAgYnVzLT5z b3V0aF9oYW5kbGVyID0gc291dGhfaGFuZGxlcjsKKyAgICBidXMtPnNvdXRoX2hhbmRsZXJfb3Bh cXVlID0gc291dGhfaGFuZGxlcl9vcGFxdWU7CisgICAgcmV0dXJuIGJ1czsKK30KKworLyogRGly ZWN0aW9uIENQVS0+YnJpZGdlLT5kZXZpY2UvbWVtb3J5ICovCitzdGF0aWMgaW5saW5lIERNQURy aXZlckFJT0NCICoKK2J1c190cmFuc2xhdGVfc291dGgocWVtdV9idXMgKmJ1cywgRE1BRHJpdmVy QUlPQ0IgKnJlcXVlc3QsIGludCBpc193cml0ZSkKK3sKKyAgICByZXR1cm4gYnVzLT5zb3V0aF9o YW5kbGVyKGJ1cy0+c291dGhfaGFuZGxlcl9vcGFxdWUsIHJlcXVlc3QsIGlzX3dyaXRlKTsKK30K KworLyogRnJvbSBkZXZpY2UgdG93YXJkcyBDUFUvbWVtb3J5IChETUEpICovCitzdGF0aWMgaW5s aW5lIERNQURyaXZlckFJT0NCICoKK2J1c190cmFuc2xhdGVfbm9ydGgocWVtdV9idXMgKmJ1cywg RE1BRHJpdmVyQUlPQ0IgKnJlcXVlc3QsIGludCBpc193cml0ZSkKK3sKKyAgICByZXR1cm4gYnVz LT5ub3J0aF9oYW5kbGVyKGJ1cy0+bm9ydGhfaGFuZGxlcl9vcGFxdWUsIHJlcXVlc3QsIGlzX3dy aXRlKTsKK30KKworc3RhdGljIGlubGluZSBETUFEcml2ZXJBSU9DQiAqCitidXNfYnVpbGRfYWlv Y2IodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHRhcmdldF9waHlzX2FkZHJfdCBsZW4pCit7Cisg ICAgRE1BRHJpdmVyQUlPQ0IgKmQ7CisKKyAgICBkID0gcWVtdV9tYWxsb2N6KHNpemVvZihETUFE cml2ZXJBSU9DQikpOworICAgIGQtPmlvbGlzdCA9IHFlbXVfbWFsbG9jeihzaXplb2YocWVtdV9p b2xpc3QpKTsKKyAgICBkLT5pb2xpc3QtPmlvdl9iYXNlID0gYWRkcjsKKyAgICBkLT5pb2xpc3Qt Pmlvdl9sZW4gPSBsZW47CisgICAgcmV0dXJuIGQ7Cit9CisKKyNpZiAxIHx8IERFQlVHX0dETUEK K3N0YXRpYyBpbmxpbmUgdm9pZAorYnVzX2R1bXBfYWlvY2IoRE1BRHJpdmVyQUlPQ0IgKmQpCit7 CisgICAgcWVtdV9pb2xpc3QgKmlvOworICAgIERNQUNvbXBsZXRpb25FbnRyeSAqZTsKKworICAg IGZwcmludGYoc3RkZXJyLCAiRE1BRHJpdmVyQUlPQ0IgJXBcbklPIHJhbmdlczpcbiIsIGQpOwor ICAgIGZvciAoaW8gPSBkLT5pb2xpc3Q7IGlvICE9IE5VTEw7IGlvID0gaW8tPm5leHQpIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJiYXNlICIgVEFSR0VUX0ZNVF9wbHggIiBsZW4gIiBUQVJH RVRfRk1UX3BseCAiXG4iLAorICAgICAgICAgICAgICAgIGlvLT5pb3ZfYmFzZSwgaW8tPmlvdl9s ZW4pOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlByZWhvb2tzOlxuIik7CisgICAgZm9y IChlID0gZC0+cHJlaG9vazsgZSAhPSBOVUxMOyBlID0gZS0+bmV4dCkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImZ1bmMgJXAgb3BhcXVlICVwXG4iLCBlLT5mdW5jLCBlLT5vcGFxdWUpOwor ICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc3Rob29rczpcbiIpOworICAgIGZvciAoZSA9 IGQtPnBvc3Rob29rOyBlICE9IE5VTEw7IGUgPSBlLT5uZXh0KSB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAiZnVuYyAlcCBvcGFxdWUgJXBcbiIsIGUtPmZ1bmMsIGUtPm9wYXF1ZSk7CisgICAg fQorfQorI2VuZGlmCisKIC8qIElTQSBidXMgKi8KIAogZXh0ZXJuIHRhcmdldF9waHlzX2FkZHJf dCBpc2FfbWVtX2Jhc2U7CkBAIC0xMjUzLDcgKzEzNTYsOCBAQAogZXh0ZXJuIFFFTVVNYWNoaW5l IHNzNV9tYWNoaW5lLCBzczEwX21hY2hpbmU7CiAKIC8qIGlvbW11LmMgKi8KLXZvaWQgKmlvbW11 X2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpOwordm9pZCAqaW9tbXVfaW5pdCh0YXJnZXRf cGh5c19hZGRyX3QgYWRkciwgcWVtdV9idXMgKnBhcmVudF9idXMsCisgICAgICAgICAgICAgICAg IHFlbXVfYnVzICoqYnVzKTsKIHZvaWQgc3BhcmNfaW9tbXVfbWVtb3J5X3J3KHZvaWQgKm9wYXF1 ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90ICpidWYsIGludCBsZW4sIGludCBpc193cml0ZSk7CiBzdGF0aWMgaW5saW5l IHZvaWQgc3BhcmNfaW9tbXVfbWVtb3J5X3JlYWQodm9pZCAqb3BhcXVlLApAQCAtMTMwOCwxMSAr MTQxMiwxMyBAQAogLyogZXNwLmMgKi8KIHZvaWQgZXNwX3Njc2lfYXR0YWNoKHZvaWQgKm9wYXF1 ZSwgQmxvY2tEcml2ZXJTdGF0ZSAqYmQsIGludCBpZCk7CiB2b2lkICplc3BfaW5pdChCbG9ja0Ry aXZlclN0YXRlICoqYmQsIHRhcmdldF9waHlzX2FkZHJfdCBlc3BhZGRyLAotICAgICAgICAgICAg ICAgdm9pZCAqZG1hX29wYXF1ZSwgcWVtdV9pcnEgaXJxLCBxZW11X2lycSAqcmVzZXQpOworICAg ICAgICAgICAgICAgdm9pZCAqZG1hX29wYXF1ZSwgcWVtdV9pcnEgaXJxLCBxZW11X2lycSAqcmVz ZXQsCisgICAgICAgICAgICAgICBxZW11X2J1cyAqcGFyZW50X2J1cywgcWVtdV9idXMgKipidXMp OwogCiAvKiBzcGFyYzMyX2RtYS5jICovCiB2b2lkICpzcGFyYzMyX2RtYV9pbml0KHRhcmdldF9w aHlzX2FkZHJfdCBkYWRkciwgcWVtdV9pcnEgcGFyZW50X2lycSwKLSAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqaW9tbXUsIHFlbXVfaXJxICoqZGV2X2lycSwgcWVtdV9pcnEgKipyZXNldCk7 CisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmlvbW11LCBxZW11X2lycSAqKmRldl9pcnEs IHFlbXVfaXJxICoqcmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHFlbXVfYnVzICpwYXJl bnRfYnVzLCBxZW11X2J1cyAqKmJ1cyk7CiB2b2lkIGxlZG1hX21lbW9yeV9yZWFkKHZvaWQgKm9w YXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmJ1ZiwgaW50IGxlbiwgaW50IGRvX2Jzd2FwKTsKIHZvaWQgbGVkbWFfbWVtb3J5X3dy aXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCkBAIC0xNDI4LDYgKzE1 MzQsOCBAQAogICAgc2NzaV97cmVhZCx3cml0ZX1fZGF0YS4gICovCiB2b2lkIHNjc2lfcmVhZF9k YXRhKFNDU0lEZXZpY2UgKnMsIHVpbnQzMl90IHRhZyk7CiBpbnQgc2NzaV93cml0ZV9kYXRhKFND U0lEZXZpY2UgKnMsIHVpbnQzMl90IHRhZyk7Cit2b2lkIHNjc2lfcmVhZF9kYXRhX2FpbyhTQ1NJ RGV2aWNlICpzLCB1aW50MzJfdCB0YWcsIERNQURyaXZlckFJT0NCICpkKTsKK2ludCBzY3NpX3dy aXRlX2RhdGFfYWlvKFNDU0lEZXZpY2UgKnMsIHVpbnQzMl90IHRhZywgRE1BRHJpdmVyQUlPQ0Ig KmQpOwogdm9pZCBzY3NpX2NhbmNlbF9pbyhTQ1NJRGV2aWNlICpzLCB1aW50MzJfdCB0YWcpOwog dWludDhfdCAqc2NzaV9nZXRfYnVmKFNDU0lEZXZpY2UgKnMsIHVpbnQzMl90IHRhZyk7CiAKSW5k ZXg6IHFlbXUvaHcvc3VuNG0uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvaHcvc3VuNG0uYwky MDA3LTEwLTI5IDE2OjU5OjM3LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9ody9zdW40bS5jCTIw MDctMTAtMzAgMTk6MDk6MTIuMDAwMDAwMDAwICswMDAwCkBAIC0zMDYsNiArMzA2LDMyIEBACiAg ICAgZW52LT5oYWx0ZWQgPSAxOwogfQogCitzdGF0aWMgRE1BRHJpdmVyQUlPQ0IgKgorcGh5c2lj YWxfbWVtb3J5X2J1c190cmFuc2xhdGVfbm9ydGgodm9pZCAqb3BhcXVlLCBETUFEcml2ZXJBSU9D QiAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc193 cml0ZSkKK3sKKyAgICBxZW11X2lvbGlzdCAqaW87CisKKyAgICBmb3IgKGlvID0gcmVxdWVzdC0+ aW9saXN0OyBpbyAhPSBOVUxMOyBpbyA9IGlvLT5uZXh0KSB7CisgICAgICAgIGlmIChpby0+aW92 X2Jhc2UgPCBwaHlzX3JhbV9zaXplKQorICAgICAgICAgICAgaW8tPmlvdl9iYXNlICs9ICh1bnNp Z25lZCBsb25nKXBoeXNfcmFtX2Jhc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlvLT5p b3ZfbGVuID0gMDsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJwaHlzaWNhbFxuIik7Cisg ICAgYnVzX2R1bXBfYWlvY2IocmVxdWVzdCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3N0 YXRpYyBETUFEcml2ZXJBSU9DQiAqCitwaHlzaWNhbF9tZW1vcnlfYnVzX3RyYW5zbGF0ZV9zb3V0 aCh2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFE cml2ZXJBSU9DQiAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBpc193cml0ZSkKK3sKKyAgICAvLyBEb2VzIG5vdCBleGlzdD8KKyAgICByZXR1cm4gcmVx dWVzdDsKK30KKwogc3RhdGljIHZvaWQgKnN1bjRtX2h3X2luaXQoY29uc3Qgc3RydWN0IGh3ZGVm ICpod2RlZiwgaW50IFJBTV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh eVN0YXRlICpkcywgY29uc3QgY2hhciAqY3B1X21vZGVsKQogCkBAIC0zMTcsNiArMzQzLDggQEAK ICAgICBxZW11X2lycSAqY3B1X2lycXNbTUFYX0NQVVNdLCAqc2xhdmlvX2lycSwgKnNsYXZpb19j cHVfaXJxLAogICAgICAgICAqZXNwZG1hX2lycSwgKmxlZG1hX2lycTsKICAgICBxZW11X2lycSAq ZXNwX3Jlc2V0LCAqbGVfcmVzZXQ7CisgICAgcWVtdV9idXMgKm1lbW9yeV9idXMsICppb21tdV9i dXMsICplc3BkbWFfYnVzLCAqbGVkbWFfYnVzLCAqZXNwX2J1cywKKyAgICAgICAgKnNjc2lfYnVz OwogCiAgICAgLyogaW5pdCBDUFVzICovCiAgICAgc3BhcmNfZmluZF9ieV9uYW1lKGNwdV9tb2Rl bCwgJmRlZik7CkBAIC0zNDUsNyArMzczLDEyIEBACiAgICAgLyogYWxsb2NhdGUgUkFNICovCiAg ICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeSgwLCBSQU1fc2l6ZSwgMCk7CiAKLSAgICBp b21tdSA9IGlvbW11X2luaXQoaHdkZWYtPmlvbW11X2Jhc2UpOworICAgIG1lbW9yeV9idXMgPSBi dXNfaW5pdChUQVJHRVRfUEhZU19BRERSX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHBoeXNpY2FsX21lbW9yeV9idXNfdHJhbnNsYXRlX25vcnRoLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbF9tZW1vcnlf YnVzX3RyYW5zbGF0ZV9zb3V0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cisg ICAgaW9tbXUgPSBpb21tdV9pbml0KGh3ZGVmLT5pb21tdV9iYXNlLCBtZW1vcnlfYnVzLCAmaW9t bXVfYnVzKTsKICAgICBzbGF2aW9faW50Y3RsID0gc2xhdmlvX2ludGN0bF9pbml0KGh3ZGVmLT5p bnRjdGxfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3ZGVm LT5pbnRjdGxfYmFzZSArIDB4MTAwMDBVTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmaHdkZWYtPmludGJpdF90b19sZXZlbFswXSwKQEAgLTM1NCwxMSArMzg3LDEy IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2RlZi0+Y2xvY2tf aXJxKTsKIAogICAgIGVzcGRtYSA9IHNwYXJjMzJfZG1hX2luaXQoaHdkZWYtPmRtYV9iYXNlLCBz bGF2aW9faXJxW2h3ZGVmLT5lc3BfaXJxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlvbW11LCAmZXNwZG1hX2lycSwgJmVzcF9yZXNldCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpb21tdSwgJmVzcGRtYV9pcnEsICZlc3BfcmVzZXQsIGlvbW11X2J1cywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZlc3BkbWFfYnVzKTsKIAogICAgIGxlZG1hID0gc3Bh cmMzMl9kbWFfaW5pdChod2RlZi0+ZG1hX2Jhc2UgKyAxNlVMTCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2xhdmlvX2lycVtod2RlZi0+bGVfaXJxXSwgaW9tbXUsICZsZWRtYV9pcnEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZV9yZXNldCk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZsZV9yZXNldCwgaW9tbXVfYnVzLCAmbGVkbWFfYnVzKTsKIAogICAg IGlmIChncmFwaGljX2RlcHRoICE9IDggJiYgZ3JhcGhpY19kZXB0aCAhPSAyNCkgewogICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IFVuc3VwcG9ydGVkIGRlcHRoOiAlZFxuIiwgZ3JhcGhp Y19kZXB0aCk7CkBAIC0zOTIsNyArNDI2LDcgQEAKICAgICBmZGN0cmxfaW5pdChzbGF2aW9faXJx W2h3ZGVmLT5mZF9pcnFdLCAwLCAxLCBod2RlZi0+ZmRfYmFzZSwgZmRfdGFibGUpOwogCiAgICAg bWFpbl9lc3AgPSBlc3BfaW5pdChic190YWJsZSwgaHdkZWYtPmVzcF9iYXNlLCBlc3BkbWEsICpl c3BkbWFfaXJxLAotICAgICAgICAgICAgICAgICAgICAgICAgZXNwX3Jlc2V0KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGVzcF9yZXNldCwgZXNwZG1hX2J1cywgJmVzcF9idXMpOwogCiAgICAg Zm9yIChpID0gMDsgaSA8IE1BWF9ESVNLUzsgaSsrKSB7CiAgICAgICAgIGlmIChic190YWJsZVtp XSkgewpJbmRleDogcWVtdS9ody9pb21tdS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9p b21tdS5jCTIwMDctMTAtMjkgMTY6NTk6MzcuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L2lv bW11LmMJMjAwNy0xMC0zMCAxOTo0MDoxNS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEwNCw2ICsxMDQs NyBAQAogICAgIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyOwogICAgIHVpbnQzMl90IHJlZ3NbSU9N TVVfTlJFR1NdOwogICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb3N0YXJ0OworICAgIHFlbXVfYnVz ICpidXM7CiB9IElPTU1VU3RhdGU7CiAKIHN0YXRpYyB1aW50MzJfdCBpb21tdV9tZW1fcmVhZHco dm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKQEAgLTI0NCw2ICsyNDUsNjQg QEAKICAgICBzLT5yZWdzW0lPTU1VX0FGQVJdID0gYWRkcjsKIH0KIAorc3RhdGljIERNQURyaXZl ckFJT0NCICoKK2lvbW11X2J1c190cmFuc2xhdGVfbm9ydGgodm9pZCAqb3BhcXVlLCBETUFEcml2 ZXJBSU9DQiAqcmVxdWVzdCwgaW50IGlzX3dyaXRlKQoreworICAgIElPTU1VU3RhdGUgKnMgPSBv cGFxdWU7CisgICAgcWVtdV9pb2xpc3QgKmlvLCAqbmV3X2lvLCAqbmV4dF9pbzsKKyAgICB1aW50 MzJfdCBmbGFnczsKKyAgICBpbnQgbCwgZmlyc3Q7CisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsIHByZXZfYWRkciwgbGVuLCBwYWdlLCBwaHlzX2FkZHI7CisKKyAgICBmb3IgKGlvID0gcmVx dWVzdC0+aW9saXN0OyBpbyAhPSBOVUxMOyBpbyA9IG5leHRfaW8pIHsKKyAgICAgICAgYWRkciA9 IGlvLT5pb3ZfYmFzZTsKKyAgICAgICAgbGVuID0gaW8tPmlvdl9sZW47CisgICAgICAgIG5leHRf aW8gPSBpby0+bmV4dDsKKyAgICAgICAgZmlyc3QgPSAxOworICAgICAgICB3aGlsZSAobGVuID4g MCkgeworICAgICAgICAgICAgcGFnZSA9IGFkZHIgJiBUQVJHRVRfUEFHRV9NQVNLOworICAgICAg ICAgICAgbCA9IChwYWdlICsgVEFSR0VUX1BBR0VfU0laRSkgLSBhZGRyOworICAgICAgICAgICAg aWYgKGwgPiBsZW4pCisgICAgICAgICAgICAgICAgbCA9IGxlbjsKKyAgICAgICAgICAgIGZsYWdz ID0gaW9tbXVfcGFnZV9nZXRfZmxhZ3MocywgcGFnZSk7CisgICAgICAgICAgICBpZiAoIShmbGFn cyAmIElPUFRFX1ZBTElEKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGlzX3dyaXRlKSB7CisgICAgICAgICAgICAgICAgaWYg KCEoZmxhZ3MgJiBJT1BURV9XUklURSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5V TEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGh5c19h ZGRyID0gaW9tbXVfdHJhbnNsYXRlX3BhKHMsIGFkZHIsIGZsYWdzKTsKKyAgICAgICAgICAgIGlm ICghZmlyc3QgJiYgYWRkciAhPSAocHJldl9hZGRyICsgVEFSR0VUX1BBR0VfU0laRSkpIHsKKyAg ICAgICAgICAgICAgICBuZXdfaW8gPSBxZW11X21hbGxvY3ooc2l6ZW9mKHFlbXVfaW9saXN0KSk7 CisgICAgICAgICAgICAgICAgbmV3X2lvLT5pb3ZfYmFzZSA9IHBoeXNfYWRkcjsKKyAgICAgICAg ICAgICAgICBuZXdfaW8tPmlvdl9sZW4gPSBsZW47CisgICAgICAgICAgICAgICAgbmV3X2lvLT5u ZXh0ID0gaW8tPm5leHQ7CisgICAgICAgICAgICAgICAgaW8tPm5leHQgPSBuZXdfaW87CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlvLT5pb3ZfYmFzZSA9IHBoeXNfYWRk cjsKKyAgICAgICAgICAgICAgICBpby0+aW92X2xlbiA9IGxlbjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHByZXZfYWRkciA9IHBhZ2U7CisgICAgICAgICAgICBsZW4gLT0gbDsKKyAgICAg ICAgICAgIGFkZHIgKz0gbDsKKyAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgfQorICAg IH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgImlvbW11XG4iKTsKKyAgICBidXNfZHVtcF9haW9jYihy ZXF1ZXN0KTsKKyAgICBidXNfdHJhbnNsYXRlX25vcnRoKHMtPmJ1cywgcmVxdWVzdCwgaXNfd3Jp dGUpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzdGF0aWMgRE1BRHJpdmVyQUlPQ0IgKgor aW9tbXVfYnVzX3RyYW5zbGF0ZV9zb3V0aCh2b2lkICpvcGFxdWUsIERNQURyaXZlckFJT0NCICpy ZXF1ZXN0LCBpbnQgaXNfd3JpdGUpCit7CisgICAgLy8gMToxIG1hcHBpbmcKKyAgICByZXR1cm4g cmVxdWVzdDsKK30KKwogdm9pZCBzcGFyY19pb21tdV9tZW1vcnlfcncodm9pZCAqb3BhcXVlLCB0 YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3QgKmJ1ZiwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQogewpAQCAtMzExLDcgKzM3MCw3IEBACiAg ICAgcy0+cmVnc1tJT01NVV9DVFJMXSA9IElPTU1VX1ZFUlNJT047CiB9CiAKLXZvaWQgKmlvbW11 X2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit2b2lkICppb21tdV9pbml0KHRhcmdldF9w aHlzX2FkZHJfdCBhZGRyLCBxZW11X2J1cyAqcGFyZW50X2J1cywgcWVtdV9idXMgKipidXMpCiB7 CiAgICAgSU9NTVVTdGF0ZSAqczsKICAgICBpbnQgaW9tbXVfaW9fbWVtb3J5OwpAQCAtMzIxLDkg KzM4MCwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHMtPmFkZHIgPSBhZGRyOwor ICAgIHMtPmJ1cyA9IHBhcmVudF9idXM7CiAKICAgICBpb21tdV9pb19tZW1vcnkgPSBjcHVfcmVn aXN0ZXJfaW9fbWVtb3J5KDAsIGlvbW11X21lbV9yZWFkLCBpb21tdV9tZW1fd3JpdGUsIHMpOwog ICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkoYWRkciwgSU9NTVVfTlJFR1MgKiA0LCBp b21tdV9pb19tZW1vcnkpOworICAgICpidXMgPSBidXNfaW5pdCgzMiwgaW9tbXVfYnVzX3RyYW5z bGF0ZV9ub3J0aCwgcywKKyAgICAgICAgICAgICAgICAgICAgaW9tbXVfYnVzX3RyYW5zbGF0ZV9z b3V0aCwgcyk7CiAKICAgICByZWdpc3Rlcl9zYXZldm0oImlvbW11IiwgYWRkciwgMiwgaW9tbXVf c2F2ZSwgaW9tbXVfbG9hZCwgcyk7CiAgICAgcWVtdV9yZWdpc3Rlcl9yZXNldChpb21tdV9yZXNl dCwgcyk7CkluZGV4OiBxZW11L2h3L3NwYXJjMzJfZG1hLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5v cmlnL2h3L3NwYXJjMzJfZG1hLmMJMjAwNy0xMC0yOSAxNjo1OTozNy4wMDAwMDAwMDAgKzAwMDAK KysrIHFlbXUvaHcvc3BhcmMzMl9kbWEuYwkyMDA3LTEwLTMwIDE5OjI5OjA2LjAwMDAwMDAwMCAr MDAwMApAQCAtNjAsNiArNjAsNyBAQAogICAgIHFlbXVfaXJxIGlycTsKICAgICB2b2lkICppb21t dTsKICAgICBxZW11X2lycSBkZXZfcmVzZXQ7CisgICAgcWVtdV9idXMgKmJ1czsKIH07CiAKIC8q IE5vdGU6IG9uIHNwYXJjLCB0aGUgbGFuY2UgMTYgYml0IGJ1cyBpcyBzd2FwcGVkICovCkBAIC0x MjgsNiArMTI5LDI3IEBACiAgICAgfQogfQogCitzdGF0aWMgRE1BRHJpdmVyQUlPQ0IgKgorZXNw ZG1hX2J1c190cmFuc2xhdGVfbm9ydGgodm9pZCAqb3BhcXVlLCBETUFEcml2ZXJBSU9DQiAqcmVx dWVzdCwgaW50IGlzX3dyaXRlKQoreworICAgIERNQVN0YXRlICpzID0gb3BhcXVlOworICAgIHFl bXVfaW9saXN0ICppbzsKKworICAgIGZvciAoaW8gPSByZXF1ZXN0LT5pb2xpc3Q7IGlvICE9IE5V TEw7IGlvID0gaW8tPm5leHQpCisgICAgICAgIGlvLT5pb3ZfYmFzZSA9ICh0YXJnZXRfcGh5c19h ZGRyX3Qpcy0+ZG1hcmVnc1sxXTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImVzcGRtYVxuIik7Cisg ICAgYnVzX2R1bXBfYWlvY2IocmVxdWVzdCk7CisgICAgYnVzX3RyYW5zbGF0ZV9ub3J0aChzLT5i dXMsIHJlcXVlc3QsIGlzX3dyaXRlKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworc3RhdGlj IERNQURyaXZlckFJT0NCICoKK2VzcGRtYV9idXNfdHJhbnNsYXRlX3NvdXRoKHZvaWQgKm9wYXF1 ZSwgRE1BRHJpdmVyQUlPQ0IgKnJlcXVlc3QsIGludCBpc193cml0ZSkKK3sKKyAgICAvLyAxOjEg bWFwcGluZworICAgIHJldHVybiByZXF1ZXN0OworfQorCiB2b2lkIGVzcGRtYV9tZW1vcnlfcmVh ZCh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKICAgICBETUFTdGF0ZSAq cyA9IG9wYXF1ZTsKQEAgLTIzOCw3ICsyNjAsOCBAQAogfQogCiB2b2lkICpzcGFyYzMyX2RtYV9p bml0KHRhcmdldF9waHlzX2FkZHJfdCBkYWRkciwgcWVtdV9pcnEgcGFyZW50X2lycSwKLSAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqaW9tbXUsIHFlbXVfaXJxICoqZGV2X2lycSwgcWVtdV9p cnEgKipyZXNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaW9tbXUsIHFlbXVfaXJx ICoqZGV2X2lycSwgcWVtdV9pcnEgKipyZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgcWVt dV9idXMgKnBhcmVudF9idXMsIHFlbXVfYnVzICoqYnVzKQogewogICAgIERNQVN0YXRlICpzOwog ICAgIGludCBkbWFfaW9fbWVtb3J5OwpAQCAtMjU4LDYgKzI4MSw5IEBACiAgICAgKmRldl9pcnEg PSBxZW11X2FsbG9jYXRlX2lycXMoZG1hX3NldF9pcnEsIHMsIDEpOwogCiAgICAgKnJlc2V0ID0g JnMtPmRldl9yZXNldDsKKyAgICBzLT5idXMgPSBwYXJlbnRfYnVzOworICAgICpidXMgPSBidXNf aW5pdCgzMiwgZXNwZG1hX2J1c190cmFuc2xhdGVfbm9ydGgsIHMsCisgICAgICAgICAgICAgICAg ICAgIGVzcGRtYV9idXNfdHJhbnNsYXRlX3NvdXRoLCBzKTsKIAogICAgIHJldHVybiBzOwogfQpJ bmRleDogcWVtdS9ody9lc3AuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvaHcvZXNwLmMJMjAw Ny0xMC0yOSAxNjo1OTozNy4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvaHcvZXNwLmMJMjAwNy0x MC0zMCAxOToyNzo0Ni4wMDAwMDAwMDAgKzAwMDAKQEAgLTc0LDYgKzc0LDcgQEAKICAgICB1aW50 OF90ICphc3luY19idWY7CiAgICAgdWludDMyX3QgYXN5bmNfbGVuOwogICAgIHZvaWQgKmRtYV9v cGFxdWU7CisgICAgcWVtdV9idXMgKmJ1czsKIH07CiAKICNkZWZpbmUgU1RBVF9ETyAweDAwCkBA IC0xNDQsMTUgKzE0NSwyNSBAQAogICAgIGRhdGFsZW4gPSBzY3NpX3NlbmRfY29tbWFuZChzLT5j dXJyZW50X2RldiwgMCwgJmJ1ZlsxXSwgbHVuKTsKICAgICBzLT50aV9zaXplID0gZGF0YWxlbjsK ICAgICBpZiAoZGF0YWxlbiAhPSAwKSB7CisgICAgICAgIERNQURyaXZlckFJT0NCICpkOworCiAg ICAgICAgIHMtPnJyZWdzWzRdID0gU1RBVF9JTiB8IFNUQVRfVEM7CiAgICAgICAgIHMtPmRtYV9s ZWZ0ID0gMDsKICAgICAgICAgcy0+ZG1hX2NvdW50ZXIgPSAwOwogICAgICAgICBpZiAoZGF0YWxl biA+IDApIHsKKyAgICAgICAgICAgIGQgPSBidXNfYnVpbGRfYWlvY2IoMCwgZGF0YWxlbik7Cisg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVzcFxuIik7CisgICAgICAgICAgICBidXNfZHVt cF9haW9jYihkKTsKKyAgICAgICAgICAgIGJ1c190cmFuc2xhdGVfbm9ydGgocy0+YnVzLCBkLCAx KTsKICAgICAgICAgICAgIHMtPnJyZWdzWzRdIHw9IFNUQVRfREk7Ci0gICAgICAgICAgICBzY3Np X3JlYWRfZGF0YShzLT5jdXJyZW50X2RldiwgMCk7CisgICAgICAgICAgICBzY3NpX3JlYWRfZGF0 YV9haW8ocy0+Y3VycmVudF9kZXYsIDAsIGQpOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZCA9IGJ1c19idWlsZF9haW9jYigwLCAtZGF0YWxlbik7CisgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgImVzcFxuIik7CisgICAgICAgICAgICBidXNfZHVtcF9haW9jYihkKTsKKyAgICAg ICAgICAgIGJ1c190cmFuc2xhdGVfbm9ydGgocy0+YnVzLCBkLCAwKTsKICAgICAgICAgICAgIHMt PnJyZWdzWzRdIHw9IFNUQVRfRE87Ci0gICAgICAgICAgICBzY3NpX3dyaXRlX2RhdGEocy0+Y3Vy cmVudF9kZXYsIDApOworICAgICAgICAgICAgc2NzaV93cml0ZV9kYXRhX2FpbyhzLT5jdXJyZW50 X2RldiwgMCwgZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcy0+cnJlZ3NbNV0gPSBJTlRSX0JT IHwgSU5UUl9GQzsKQEAgLTMzMCw2ICszNDEsMjIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyBETUFE cml2ZXJBSU9DQiAqCitlc3BfYnVzX3RyYW5zbGF0ZV9ub3J0aCh2b2lkICpvcGFxdWUsIERNQURy aXZlckFJT0NCICpyZXF1ZXN0LCBpbnQgaXNfd3JpdGUpCit7CisgICAgLy8gMToxIG1hcHBpbmc/ CisgICAgZnByaW50ZihzdGRlcnIsICJlc3BcbiIpOworICAgIGJ1c19kdW1wX2Fpb2NiKHJlcXVl c3QpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitzdGF0aWMgRE1BRHJpdmVyQUlPQ0IgKgor ZXNwX2J1c190cmFuc2xhdGVfc291dGgodm9pZCAqb3BhcXVlLCBETUFEcml2ZXJBSU9DQiAqcmVx dWVzdCwgaW50IGlzX3dyaXRlKQoreworICAgIC8vIDE6MSBtYXBwaW5nCisgICAgcmV0dXJuIHJl cXVlc3Q7Cit9CisKIHN0YXRpYyB2b2lkIGVzcF9yZXNldCh2b2lkICpvcGFxdWUpCiB7CiAgICAg RVNQU3RhdGUgKnMgPSBvcGFxdWU7CkBAIC01NzUsNyArNjAyLDggQEAKIH0KIAogdm9pZCAqZXNw X2luaXQoQmxvY2tEcml2ZXJTdGF0ZSAqKmJkLCB0YXJnZXRfcGh5c19hZGRyX3QgZXNwYWRkciwK LSAgICAgICAgICAgICAgIHZvaWQgKmRtYV9vcGFxdWUsIHFlbXVfaXJxIGlycSwgcWVtdV9pcnEg KnJlc2V0KQorICAgICAgICAgICAgICAgdm9pZCAqZG1hX29wYXF1ZSwgcWVtdV9pcnEgaXJxLCBx ZW11X2lycSAqcmVzZXQsCisgICAgICAgICAgICAgICBxZW11X2J1cyAqcGFyZW50X2J1cywgcWVt dV9idXMgKipidXMpCiB7CiAgICAgRVNQU3RhdGUgKnM7CiAgICAgaW50IGVzcF9pb19tZW1vcnk7 CkBAIC01ODcsOSArNjE1LDExIEBACiAgICAgcy0+YmQgPSBiZDsKICAgICBzLT5pcnEgPSBpcnE7 CiAgICAgcy0+ZG1hX29wYXF1ZSA9IGRtYV9vcGFxdWU7Ci0KKyAgICBzLT5idXMgPSBwYXJlbnRf YnVzOwogICAgIGVzcF9pb19tZW1vcnkgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIGVzcF9t ZW1fcmVhZCwgZXNwX21lbV93cml0ZSwgcyk7CiAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21l bW9yeShlc3BhZGRyLCBFU1BfU0laRSwgZXNwX2lvX21lbW9yeSk7CisgICAgKmJ1cyA9IGJ1c19p bml0KDMyLCBlc3BfYnVzX3RyYW5zbGF0ZV9ub3J0aCwgcywKKyAgICAgICAgICAgICAgICAgICAg ZXNwX2J1c190cmFuc2xhdGVfc291dGgsIHMpOwogCiAgICAgZXNwX3Jlc2V0KHMpOwogCkluZGV4 OiBxZW11L2h3L3Njc2ktZGlzay5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9zY3NpLWRp c2suYwkyMDA3LTEwLTI5IDE2OjU5OjM3LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9ody9zY3Np LWRpc2suYwkyMDA3LTEwLTMwIDE4OjU1OjE5LjAwMDAwMDAwMCArMDAwMApAQCAtMTk5LDYgKzE5 OSwxNiBAQAogICAgIHItPnNlY3Rvcl9jb3VudCAtPSBuOwogfQogCit2b2lkIHNjc2lfcmVhZF9k YXRhX2FpbyhTQ1NJRGV2aWNlICpzLCB1aW50MzJfdCB0YWcsIERNQURyaXZlckFJT0NCICpkKQor eworICAgIHNjc2lfcmVhZF9kYXRhKHMsIHRhZyk7Cit9CisKK2ludCBzY3NpX3dyaXRlX2RhdGFf YWlvKFNDU0lEZXZpY2UgKnMsIHVpbnQzMl90IHRhZywgRE1BRHJpdmVyQUlPQ0IgKmQpCit7Cisg ICAgcmV0dXJuIHNjc2lfd3JpdGVfZGF0YShzLCB0YWcpOworfQorCiBzdGF0aWMgdm9pZCBzY3Np X3dyaXRlX2NvbXBsZXRlKHZvaWQgKiBvcGFxdWUsIGludCByZXQpCiB7CiAgICAgU0NTSVJlcXVl c3QgKnIgPSAoU0NTSVJlcXVlc3QgKilvcGFxdWU7Cg== ------=_Part_4945_1818771.1193774950470--