From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juanma Barranquero Newsgroups: gmane.emacs.devel Subject: Re: stop using P_, __P in header files Date: Mon, 5 Jul 2010 03:25:55 +0200 Message-ID: References: <4C2DB1E0.7010305@swipnet.se> <83aaqa9ml7.fsf@gnu.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d99ce6a19572048a99d216 X-Trace: dough.gmane.org 1278298604 27710 80.91.229.12 (5 Jul 2010 02:56:44 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 5 Jul 2010 02:56:44 +0000 (UTC) Cc: Eli Zaretskii , =?UTF-8?Q?Jan_Dj=C3=A4rv?= , emacs-devel@gnu.org To: Dan Nicolaescu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jul 05 04:56:37 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OVbne-0003Dl-Id for ged-emacs-devel@m.gmane.org; Mon, 05 Jul 2010 04:56:37 +0200 Original-Received: from localhost ([127.0.0.1]:45905 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OVbnb-0004Xb-TR for ged-emacs-devel@m.gmane.org; Sun, 04 Jul 2010 22:52:47 -0400 Original-Received: from [140.186.70.92] (port=41359 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OVaSF-0007c9-9s for emacs-devel@gnu.org; Sun, 04 Jul 2010 21:26:49 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OVaS5-0007rr-U1 for emacs-devel@gnu.org; Sun, 04 Jul 2010 21:26:39 -0400 Original-Received: from mail-bw0-f41.google.com ([209.85.214.41]:50200) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OVaRs-0007pq-NG; Sun, 04 Jul 2010 21:26:17 -0400 Original-Received: by bwz9 with SMTP id 9so3163624bwz.0 for ; Sun, 04 Jul 2010 18:26:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:cc:content-type; bh=WagA89lZr4Qo4u7T30UPudzGEzBF4a95ejIKmSJ8/v4=; b=EC/ZdiFNs5M+on7mFZUe2rHnlzCm+EQjxAl2DJ9VddZ2NtQRbpFzVAuxxm32UrCN03 2xZYIcXe1PC7uRW98CoYFGwxmziZ4cagS3NoG/r+V1DumVbcRXsV5+8TcnU2cwsVoE6C HwJBPosjihHm9vd4nUEdSY4U2KHSDNLMEc0h4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; b=V8afe0ARXSbXsLhhfzGhbolSzo1gQqmD+qS6OoCKYXCYzlCTdY45PV6F2qc88QNSCG vOCW9BJHcKE1DeOXFW0MUucTWBWOeqb6g2W76UYp+IJx6Qz8zV0fzvHgkxAIYJifQ2Dm KxIxXD+VykTQvZ5lcy3Qwxd5BoETQHOyM0zww= Original-Received: by 10.204.178.68 with SMTP id bl4mr1791978bkb.119.1278293175275; Sun, 04 Jul 2010 18:26:15 -0700 (PDT) Original-Received: by 10.204.53.204 with HTTP; Sun, 4 Jul 2010 18:25:55 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Mailman-Approved-At: Sun, 04 Jul 2010 22:52:38 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:126776 Archived-At: --0016e6d99ce6a19572048a99d216 Content-Type: text/plain; charset=UTF-8 On Mon, Jul 5, 2010 at 02:28, Juanma Barranquero wrote: > Finally: cm.c, image.c and vm-limit.c do not cause any trouble on > Windows (cm.c is not used, in fact). I'll try on Ubuntu To summarize, I'm attaching a new patch will all pending files, including cm.c, image.c and vm-limit.c. It fixes (or works around) all problems I see on Windows or Ubuntu. Notes: - keymap.c:keyremap_step() has now an argument with the volatile specifier, which is unclean but apparently necessary. - variadic error functions in eval.c and term.c have been reverted to their previous K&R state. - cm.c:cmputc() has now arg of type int (as tputs expects) instead of char. If that causes trouble with signed/unsigned conversion, casting will be required. Enjoy, Juanma --0016e6d99ce6a19572048a99d216 Content-Type: text/x-patch; charset=US-ASCII; name="remaining-fixed.diff" Content-Disposition: attachment; filename="remaining-fixed.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gb8mnt531 PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9idWZmZXIuYycKLS0tIHNyYy9idWZmZXIuYwkyMDEwLTA3 LTAyIDEyOjE5OjUzICswMDAwCisrKyBzcmMvYnVmZmVyLmMJMjAxMC0wNy0wNSAwMToxNzoyMiAr MDAwMApAQCAtMTgwLDggKzE4MCw3IEBACiAvKiBMaXNwX09iamVjdCBRbGlzcF9tb2RlLCBWY2hl Y2tfc3ltYm9sOyAqLwogCiB2b2lkCi1uc2JlcnJvciAoc3BlYykKLSAgICAgTGlzcF9PYmplY3Qg c3BlYzsKK25zYmVycm9yIChMaXNwX09iamVjdCBzcGVjKQogewogICBpZiAoU1RSSU5HUCAoc3Bl YykpCiAgICAgZXJyb3IgKCJObyBidWZmZXIgbmFtZWQgJXMiLCBTREFUQSAoc3BlYykpOwpAQCAt MjQ4LDkgKzI0Nyw3IEBACiAgICBhbmQgZG9uJ3QgZXZlciBRVUlULiAgKi8KIAogc3RhdGljIExp c3BfT2JqZWN0Ci1hc3NvY19pZ25vcmVfdGV4dF9wcm9wZXJ0aWVzIChrZXksIGxpc3QpCi0gICAg IHJlZ2lzdGVyIExpc3BfT2JqZWN0IGtleTsKLSAgICAgTGlzcF9PYmplY3QgbGlzdDsKK2Fzc29j X2lnbm9yZV90ZXh0X3Byb3BlcnRpZXMgKHJlZ2lzdGVyIExpc3BfT2JqZWN0IGtleSwgTGlzcF9P YmplY3QgbGlzdCkKIHsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgdGFpbDsKICAgZm9yICh0YWls ID0gbGlzdDsgQ09OU1AgKHRhaWwpOyB0YWlsID0gWENEUiAodGFpbCkpCkBAIC0zMTIsOCArMzA5 LDcgQEAKIH0KIAogTGlzcF9PYmplY3QKLWdldF90cnVlbmFtZV9idWZmZXIgKGZpbGVuYW1lKQot ICAgICByZWdpc3RlciBMaXNwX09iamVjdCBmaWxlbmFtZTsKK2dldF90cnVlbmFtZV9idWZmZXIg KHJlZ2lzdGVyIExpc3BfT2JqZWN0IGZpbGVuYW1lKQogewogICByZWdpc3RlciBMaXNwX09iamVj dCB0YWlsLCBidWYsIHRlbTsKIApAQCAtNDM3LDkgKzQzMyw3IEBACiAgICBMSVNULCBidXQgZm9y IGJ1ZmZlciBCLiAgKi8KIAogc3RhdGljIHN0cnVjdCBMaXNwX092ZXJsYXkgKgotY29weV9vdmVy bGF5cyAoYiwgbGlzdCkKLSAgICAgc3RydWN0IGJ1ZmZlciAqYjsKLSAgICAgc3RydWN0IExpc3Bf T3ZlcmxheSAqbGlzdDsKK2NvcHlfb3ZlcmxheXMgKHN0cnVjdCBidWZmZXIgKmIsIHN0cnVjdCBM aXNwX092ZXJsYXkgKmxpc3QpCiB7CiAgIExpc3BfT2JqZWN0IGJ1ZmZlcjsKICAgc3RydWN0IExp c3BfT3ZlcmxheSAqcmVzdWx0ID0gTlVMTCwgKnRhaWwgPSBOVUxMOwpAQCAtNDg5LDggKzQ4Myw3 IEBACiAgICBjb3BpZWQuICAqLwogCiBzdGF0aWMgdm9pZAotY2xvbmVfcGVyX2J1ZmZlcl92YWx1 ZXMgKGZyb20sIHRvKQotICAgICBzdHJ1Y3QgYnVmZmVyICpmcm9tLCAqdG87CitjbG9uZV9wZXJf YnVmZmVyX3ZhbHVlcyAoc3RydWN0IGJ1ZmZlciAqZnJvbSwgc3RydWN0IGJ1ZmZlciAqdG8pCiB7 CiAgIExpc3BfT2JqZWN0IHRvX2J1ZmZlcjsKICAgaW50IG9mZnNldDsKQEAgLTY1OCw4ICs2NTEs NyBAQAogfQogCiB2b2lkCi1kZWxldGVfYWxsX292ZXJsYXlzIChiKQotICAgICBzdHJ1Y3QgYnVm ZmVyICpiOworZGVsZXRlX2FsbF9vdmVybGF5cyAoc3RydWN0IGJ1ZmZlciAqYikKIHsKICAgTGlz cF9PYmplY3Qgb3ZlcmxheTsKIApAQCAtNjg5LDggKzY4MSw3IEBACiAgICBjbGFpbXMgaXQgZG9l c24ndCBiZWxvbmcgdG8gaXQuICAqLwogCiB2b2lkCi1yZXNldF9idWZmZXIgKGIpCi0gICAgIHJl Z2lzdGVyIHN0cnVjdCBidWZmZXIgKmI7CityZXNldF9idWZmZXIgKHJlZ2lzdGVyIHN0cnVjdCBi dWZmZXIgKmIpCiB7CiAgIGItPmZpbGVuYW1lID0gUW5pbDsKICAgYi0+ZmlsZV90cnVlbmFtZSA9 IFFuaWw7CkBAIC03MzQsOSArNzI1LDcgQEAKICAgIHdlIHByZXNlcnZlIHRob3NlLiAgKi8KIAog c3RhdGljIHZvaWQKLXJlc2V0X2J1ZmZlcl9sb2NhbF92YXJpYWJsZXMgKGIsIHBlcm1hbmVudF90 b28pCi0gICAgIHJlZ2lzdGVyIHN0cnVjdCBidWZmZXIgKmI7Ci0gICAgIGludCBwZXJtYW5lbnRf dG9vOworcmVzZXRfYnVmZmVyX2xvY2FsX3ZhcmlhYmxlcyAocmVnaXN0ZXIgc3RydWN0IGJ1ZmZl ciAqYiwgaW50IHBlcm1hbmVudF90b28pCiB7CiAgIHJlZ2lzdGVyIGludCBvZmZzZXQ7CiAgIGlu dCBpOwpAQCAtOTkzLDggKzk4Miw3IEBACiAgICBpbiBzcGVjaWFsIHNsb3RzIGluIHRoZSBidWZm ZXIgb2JqZWN0LiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1idWZmZXJfbGlzcF9sb2NhbF92 YXJpYWJsZXMgKGJ1ZikKLSAgICAgc3RydWN0IGJ1ZmZlciAqYnVmOworYnVmZmVyX2xpc3BfbG9j YWxfdmFyaWFibGVzIChzdHJ1Y3QgYnVmZmVyICpidWYpCiB7CiAgIExpc3BfT2JqZWN0IHJlc3Vs dCA9IFFuaWw7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHRhaWw7CkBAIC0xMjkzLDcgKzEyODEs NyBAQAogICAgICAoYnVmZmVyLCB2aXNpYmxlX29rLCBmcmFtZSkKICAgICAgcmVnaXN0ZXIgTGlz cF9PYmplY3QgYnVmZmVyLCB2aXNpYmxlX29rLCBmcmFtZTsKIHsKLSAgTGlzcF9PYmplY3QgRnNl dF9idWZmZXJfbWFqb3JfbW9kZSAoKTsKKyAgTGlzcF9PYmplY3QgRnNldF9idWZmZXJfbWFqb3Jf bW9kZSAoTGlzcF9PYmplY3QgYnVmZmVyKTsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgdGFpbCwg YnVmLCBub3Rzb2dvb2QsIHRlbSwgcHJlZCwgYWRkX29uczsKICAgbm90c29nb29kID0gUW5pbDsK IApAQCAtMTYxOCw4ICsxNjA2LDcgQEAKICAgIG1lYW5zIHRoYXQgb3RoZXJfYnVmZmVyIGlzIG1v cmUgbGlrZWx5IHRvIGNob29zZSBhIHJlbGV2YW50IGJ1ZmZlci4gICovCiAKIHZvaWQKLXJlY29y ZF9idWZmZXIgKGJ1ZikKLSAgICAgTGlzcF9PYmplY3QgYnVmOworcmVjb3JkX2J1ZmZlciAoTGlz cF9PYmplY3QgYnVmKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCBsaW5rLCBwcmV2OwogICBM aXNwX09iamVjdCBmcmFtZTsKQEAgLTE3MzQsOCArMTcyMSw3IEBACiAgICBJZiBOT1JFQ09SRCBp cyBub24tbmlsLCBkb24ndCBjYWxsIHJlY29yZF9idWZmZXIuICAqLwogCiBMaXNwX09iamVjdAot c3dpdGNoX3RvX2J1ZmZlcl8xIChidWZmZXJfb3JfbmFtZSwgbm9yZWNvcmQpCi0gICAgIExpc3Bf T2JqZWN0IGJ1ZmZlcl9vcl9uYW1lLCBub3JlY29yZDsKK3N3aXRjaF90b19idWZmZXJfMSAoTGlz cF9PYmplY3QgYnVmZmVyX29yX25hbWUsIExpc3BfT2JqZWN0IG5vcmVjb3JkKQogewogICByZWdp c3RlciBMaXNwX09iamVjdCBidWZmZXI7CiAKQEAgLTE4MzEsOCArMTgxNyw3IEBACiAgICB0aW1l LCBhbmQgdGhhdCBpbmNyZW1lbnRzIHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkLiAgKi8KIAog dm9pZAotc2V0X2J1ZmZlcl9pbnRlcm5hbCAoYikKLSAgICAgcmVnaXN0ZXIgc3RydWN0IGJ1ZmZl ciAqYjsKK3NldF9idWZmZXJfaW50ZXJuYWwgKHJlZ2lzdGVyIHN0cnVjdCBidWZmZXIgKmIpCiB7 CiAgIGlmIChjdXJyZW50X2J1ZmZlciAhPSBiKQogICAgIHNldF9idWZmZXJfaW50ZXJuYWxfMSAo Yik7CkBAIC0xODQyLDggKzE4MjcsNyBAQAogICAgVGhpcyBpcyB1c2VkIGJ5IHJlZGlzcGxheS4g ICovCiAKIHZvaWQKLXNldF9idWZmZXJfaW50ZXJuYWxfMSAoYikKLSAgICAgcmVnaXN0ZXIgc3Ry dWN0IGJ1ZmZlciAqYjsKK3NldF9idWZmZXJfaW50ZXJuYWxfMSAocmVnaXN0ZXIgc3RydWN0IGJ1 ZmZlciAqYikKIHsKICAgcmVnaXN0ZXIgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZjsKICAgcmVnaXN0 ZXIgTGlzcF9PYmplY3QgdGFpbDsKQEAgLTE5MzksOCArMTkyMyw3IEBACiAgICBUaGlzIGF2b2lk cyBjZXJ0YWluIHRoaW5ncyB0aGF0IGRvbid0IG5lZWQgdG8gYmUgZG9uZSB3aXRoaW4gcmVkaXNw bGF5LiAgKi8KIAogdm9pZAotc2V0X2J1ZmZlcl90ZW1wIChiKQotICAgICBzdHJ1Y3QgYnVmZmVy ICpiOworc2V0X2J1ZmZlcl90ZW1wIChzdHJ1Y3QgYnVmZmVyICpiKQogewogICByZWdpc3RlciBz dHJ1Y3QgYnVmZmVyICpvbGRfYnVmOwogCkBAIC0yMDE5LDggKzIwMDIsNyBAQAogLyogU2V0IHRo ZSBjdXJyZW50IGJ1ZmZlciB0byBCVUZGRVIgcHJvdmlkZWQgaXQgaXMgYWxpdmUuICAqLwogCiBM aXNwX09iamVjdAotc2V0X2J1ZmZlcl9pZl9saXZlIChidWZmZXIpCi0gICAgIExpc3BfT2JqZWN0 IGJ1ZmZlcjsKK3NldF9idWZmZXJfaWZfbGl2ZSAoTGlzcF9PYmplY3QgYnVmZmVyKQogewogICBp ZiAoISBOSUxQIChYQlVGRkVSIChidWZmZXIpLT5uYW1lKSkKICAgICBGc2V0X2J1ZmZlciAoYnVm ZmVyKTsKQEAgLTIxMjAsOCArMjEwMiw3IEBACiB9CiAKIHZvaWQKLXZhbGlkYXRlX3JlZ2lvbiAo YiwgZSkKLSAgICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmIsICplOwordmFsaWRhdGVfcmVnaW9u IChyZWdpc3RlciBMaXNwX09iamVjdCAqYiwgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmUpCiB7CiAg IENIRUNLX05VTUJFUl9DT0VSQ0VfTUFSS0VSICgqYik7CiAgIENIRUNLX05VTUJFUl9DT0VSQ0Vf TUFSS0VSICgqZSk7CkBAIC0yMTQxLDggKzIxMjIsNyBAQAogICAgYW5kIHJldHVybiB0aGUgYWRq dXN0ZWQgcG9zaXRpb24uICAqLwogCiBzdGF0aWMgaW50Ci1hZHZhbmNlX3RvX2NoYXJfYm91bmRh cnkgKGJ5dGVfcG9zKQotICAgICBpbnQgYnl0ZV9wb3M7CithZHZhbmNlX3RvX2NoYXJfYm91bmRh cnkgKGludCBieXRlX3BvcykKIHsKICAgaW50IGM7CiAKQEAgLTI2NDQsOCArMjYyNCw3IEBACiAg ICBmb3IgdGhlaXIgY3VycmVudCB2YWx1ZXMuICAqLwogCiBzdGF0aWMgdm9pZAotc3dhcF9vdXRf YnVmZmVyX2xvY2FsX3ZhcmlhYmxlcyAoYikKLSAgICAgc3RydWN0IGJ1ZmZlciAqYjsKK3N3YXBf b3V0X2J1ZmZlcl9sb2NhbF92YXJpYWJsZXMgKHN0cnVjdCBidWZmZXIgKmIpCiB7CiAgIExpc3Bf T2JqZWN0IG9hbGlzdCwgYWxpc3QsIGJ1ZmZlcjsKIApAQCAtMjY5MCwxNCArMjY2OSw3IEBACiAg ICBkZWZhdWx0IChCRUdWIG9yIFpWKS4gICovCiAKIGludAotb3ZlcmxheXNfYXQgKHBvcywgZXh0 ZW5kLCB2ZWNfcHRyLCBsZW5fcHRyLCBuZXh0X3B0ciwgcHJldl9wdHIsIGNoYW5nZV9yZXEpCi0g ICAgIEVNQUNTX0lOVCBwb3M7Ci0gICAgIGludCBleHRlbmQ7Ci0gICAgIExpc3BfT2JqZWN0ICoq dmVjX3B0cjsKLSAgICAgaW50ICpsZW5fcHRyOwotICAgICBFTUFDU19JTlQgKm5leHRfcHRyOwot ICAgICBFTUFDU19JTlQgKnByZXZfcHRyOwotICAgICBpbnQgY2hhbmdlX3JlcTsKK292ZXJsYXlz X2F0IChFTUFDU19JTlQgcG9zLCBpbnQgZXh0ZW5kLCBMaXNwX09iamVjdCAqKnZlY19wdHIsIGlu dCAqbGVuX3B0ciwgRU1BQ1NfSU5UICpuZXh0X3B0ciwgRU1BQ1NfSU5UICpwcmV2X3B0ciwgaW50 IGNoYW5nZV9yZXEpCiB7CiAgIExpc3BfT2JqZWN0IG92ZXJsYXksIHN0YXJ0LCBlbmQ7CiAgIHN0 cnVjdCBMaXNwX092ZXJsYXkgKnRhaWw7CkBAIC0yODM1LDEzICsyODA3LDcgQEAKICAgIEJ1dCB3 ZSBzdGlsbCByZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBvdmVybGF5cy4gICovCiAKIHN0YXRp YyBpbnQKLW92ZXJsYXlzX2luIChiZWcsIGVuZCwgZXh0ZW5kLCB2ZWNfcHRyLCBsZW5fcHRyLCBu ZXh0X3B0ciwgcHJldl9wdHIpCi0gICAgIGludCBiZWcsIGVuZDsKLSAgICAgaW50IGV4dGVuZDsK LSAgICAgTGlzcF9PYmplY3QgKip2ZWNfcHRyOwotICAgICBpbnQgKmxlbl9wdHI7Ci0gICAgIGlu dCAqbmV4dF9wdHI7Ci0gICAgIGludCAqcHJldl9wdHI7CitvdmVybGF5c19pbiAoaW50IGJlZywg aW50IGVuZCwgaW50IGV4dGVuZCwgTGlzcF9PYmplY3QgKip2ZWNfcHRyLCBpbnQgKmxlbl9wdHIs IGludCAqbmV4dF9wdHIsIGludCAqcHJldl9wdHIpCiB7CiAgIExpc3BfT2JqZWN0IG92ZXJsYXks IG9zdGFydCwgb2VuZDsKICAgc3RydWN0IExpc3BfT3ZlcmxheSAqdGFpbDsKQEAgLTI5NjIsOCAr MjkyOCw3IEBACiAgICBgbW91c2UtZmFjZScgcHJvcGVydHkgb3ZlcmxhcHBpbmcgT1ZFUkxBWS4g ICovCiAKIGludAotbW91c2VfZmFjZV9vdmVybGF5X292ZXJsYXBzIChvdmVybGF5KQotICAgICBM aXNwX09iamVjdCBvdmVybGF5OworbW91c2VfZmFjZV9vdmVybGF5X292ZXJsYXBzIChMaXNwX09i amVjdCBvdmVybGF5KQogewogICBpbnQgc3RhcnQgPSBPVkVSTEFZX1BPU0lUSU9OIChPVkVSTEFZ X1NUQVJUIChvdmVybGF5KSk7CiAgIGludCBlbmQgPSBPVkVSTEFZX1BPU0lUSU9OIChPVkVSTEFZ X0VORCAob3ZlcmxheSkpOwpAQCAtMjk5Miw4ICsyOTU3LDcgQEAKIAwKIC8qIEZhc3QgZnVuY3Rp b24gdG8ganVzdCB0ZXN0IGlmIHdlJ3JlIGF0IGFuIG92ZXJsYXkgYm91bmRhcnkuICAqLwogaW50 Ci1vdmVybGF5X3RvdWNoZXNfcCAocG9zKQotICAgICBpbnQgcG9zOworb3ZlcmxheV90b3VjaGVz X3AgKGludCBwb3MpCiB7CiAgIExpc3BfT2JqZWN0IG92ZXJsYXk7CiAgIHN0cnVjdCBMaXNwX092 ZXJsYXkgKnRhaWw7CkBAIC0zMDM4LDggKzMwMDIsNyBAQAogfTsKIAogc3RhdGljIGludAotY29t cGFyZV9vdmVybGF5cyAodjEsIHYyKQotICAgICBjb25zdCB2b2lkICp2MSwgKnYyOworY29tcGFy ZV9vdmVybGF5cyAoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQogewogICBjb25zdCBz dHJ1Y3Qgc29ydHZlYyAqczEgPSAoY29uc3Qgc3RydWN0IHNvcnR2ZWMgKikgdjE7CiAgIGNvbnN0 IHN0cnVjdCBzb3J0dmVjICpzMiA9IChjb25zdCBzdHJ1Y3Qgc29ydHZlYyAqKSB2MjsKQEAgLTMw NTYsMTAgKzMwMTksNyBAQAogICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbmV3IHNpemU7IHRo aXMgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwKICAgIHNpemUgaWYgc29tZSBvZiB0 aGUgb3ZlcmxheXMgd2VyZSBpbnZhbGlkIG9yIHdlcmUgd2luZG93LXNwZWNpZmljLiAgKi8KIGlu dAotc29ydF9vdmVybGF5cyAob3ZlcmxheV92ZWMsIG5vdmVybGF5cywgdykKLSAgICAgTGlzcF9P YmplY3QgKm92ZXJsYXlfdmVjOwotICAgICBpbnQgbm92ZXJsYXlzOwotICAgICBzdHJ1Y3Qgd2lu ZG93ICp3Oworc29ydF9vdmVybGF5cyAoTGlzcF9PYmplY3QgKm92ZXJsYXlfdmVjLCBpbnQgbm92 ZXJsYXlzLCBzdHJ1Y3Qgd2luZG93ICp3KQogewogICBpbnQgaSwgajsKICAgc3RydWN0IHNvcnR2 ZWMgKnNvcnR2ZWM7CkBAIC0zMTM5LDggKzMwOTksNyBAQAogCiAvKiBBIGNvbXBhcmlzb24gZnVu Y3Rpb24gc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gcXNvcnQuICAqLwogc3RhdGljIGludAotY21w X2Zvcl9zdHJpbmdzIChhczEsIGFzMikKLSAgICAgY2hhciAqYXMxLCAqYXMyOworY21wX2Zvcl9z dHJpbmdzIChjb25zdCB2b2lkICphczEsIGNvbnN0IHZvaWQgKmFzMikKIHsKICAgc3RydWN0IHNv cnRzdHIgKnMxID0gKHN0cnVjdCBzb3J0c3RyICopYXMxOwogICBzdHJ1Y3Qgc29ydHN0ciAqczIg PSAoc3RydWN0IHNvcnRzdHIgKilhczI7CkBAIC0zMTUyLDEwICszMTExLDcgQEAKIH0KIAogc3Rh dGljIHZvaWQKLXJlY29yZF9vdmVybGF5X3N0cmluZyAoc3NsLCBzdHIsIHN0cjIsIHByaSwgc2l6 ZSkKLSAgICAgc3RydWN0IHNvcnRzdHJsaXN0ICpzc2w7Ci0gICAgIExpc3BfT2JqZWN0IHN0ciwg c3RyMiwgcHJpOwotICAgICBpbnQgc2l6ZTsKK3JlY29yZF9vdmVybGF5X3N0cmluZyAoc3RydWN0 IHNvcnRzdHJsaXN0ICpzc2wsIExpc3BfT2JqZWN0IHN0ciwgTGlzcF9PYmplY3Qgc3RyMiwgTGlz cF9PYmplY3QgcHJpLCBpbnQgc2l6ZSkKIHsKICAgaW50IG5ieXRlczsKIApAQCAtMzIxMSwxMCAr MzE2Nyw3IEBACiAgICBzdWJzZXF1ZW50IGNhbGxzLiAgKi8KIAogaW50Ci1vdmVybGF5X3N0cmlu Z3MgKHBvcywgdywgcHN0cikKLSAgICAgRU1BQ1NfSU5UIHBvczsKLSAgICAgc3RydWN0IHdpbmRv dyAqdzsKLSAgICAgdW5zaWduZWQgY2hhciAqKnBzdHI7CitvdmVybGF5X3N0cmluZ3MgKEVNQUNT X0lOVCBwb3MsIHN0cnVjdCB3aW5kb3cgKncsIHVuc2lnbmVkIGNoYXIgKipwc3RyKQogewogICBM aXNwX09iamVjdCBvdmVybGF5LCB3aW5kb3csIHN0cjsKICAgc3RydWN0IExpc3BfT3ZlcmxheSAq b3Y7CkBAIC0zMzM3LDkgKzMyOTAsNyBAQAogLyogU2hpZnQgb3ZlcmxheXMgaW4gQlVGJ3Mgb3Zl cmxheSBsaXN0cywgdG8gY2VudGVyIHRoZSBsaXN0cyBhdCBQT1MuICAqLwogCiB2b2lkCi1yZWNl bnRlcl9vdmVybGF5X2xpc3RzIChidWYsIHBvcykKLSAgICAgc3RydWN0IGJ1ZmZlciAqYnVmOwot ICAgICBFTUFDU19JTlQgcG9zOworcmVjZW50ZXJfb3ZlcmxheV9saXN0cyAoc3RydWN0IGJ1ZmZl ciAqYnVmLCBFTUFDU19JTlQgcG9zKQogewogICBMaXNwX09iamVjdCBvdmVybGF5LCBiZWcsIGVu ZDsKICAgc3RydWN0IExpc3BfT3ZlcmxheSAqcHJldiwgKnRhaWwsICpuZXh0OwpAQCAtMzQ4OCw5 ICszNDM5LDcgQEAKIH0KIAogdm9pZAotYWRqdXN0X292ZXJsYXlzX2Zvcl9pbnNlcnQgKHBvcywg bGVuZ3RoKQotICAgICBFTUFDU19JTlQgcG9zOwotICAgICBFTUFDU19JTlQgbGVuZ3RoOworYWRq dXN0X292ZXJsYXlzX2Zvcl9pbnNlcnQgKEVNQUNTX0lOVCBwb3MsIEVNQUNTX0lOVCBsZW5ndGgp CiB7CiAgIC8qIEFmdGVyIGFuIGluc2VydGlvbiwgdGhlIGxpc3RzIGFyZSBzdGlsbCBzb3J0ZWQg cHJvcGVybHksCiAgICAgIGJ1dCB3ZSBtYXkgbmVlZCB0byB1cGRhdGUgdGhlIHZhbHVlIG9mIHRo ZSBvdmVybGF5IGNlbnRlci4gICovCkBAIC0zNDk5LDkgKzM0NDgsNyBAQAogfQogCiB2b2lkCi1h ZGp1c3Rfb3ZlcmxheXNfZm9yX2RlbGV0ZSAocG9zLCBsZW5ndGgpCi0gICAgIEVNQUNTX0lOVCBw b3M7Ci0gICAgIEVNQUNTX0lOVCBsZW5ndGg7CithZGp1c3Rfb3ZlcmxheXNfZm9yX2RlbGV0ZSAo RU1BQ1NfSU5UIHBvcywgRU1BQ1NfSU5UIGxlbmd0aCkKIHsKICAgaWYgKGN1cnJlbnRfYnVmZmVy LT5vdmVybGF5X2NlbnRlciA8IHBvcykKICAgICAvKiBUaGUgZGVsZXRpb24gd2FzIHRvIG91ciBy aWdodC4gIE5vIGNoYW5nZSBuZWVkZWQ7IHRoZSBiZWZvcmUtIGFuZApAQCAtMzUyNiw4ICszNDcz LDcgQEAKICAgIFN1Y2ggYW4gb3ZlcmxheSBtaWdodCBldmVuIGhhdmUgbmVnYXRpdmUgc2l6ZSBh dCB0aGlzIHBvaW50LgogICAgSWYgc28sIHdlJ2xsIG1ha2UgdGhlIG92ZXJsYXkgZW1wdHkuICov CiB2b2lkCi1maXhfc3RhcnRfZW5kX2luX292ZXJsYXlzIChzdGFydCwgZW5kKQotICAgICByZWdp c3RlciBpbnQgc3RhcnQsIGVuZDsKK2ZpeF9zdGFydF9lbmRfaW5fb3ZlcmxheXMgKHJlZ2lzdGVy IGludCBzdGFydCwgcmVnaXN0ZXIgaW50IGVuZCkKIHsKICAgTGlzcF9PYmplY3Qgb3ZlcmxheTsK ICAgc3RydWN0IExpc3BfT3ZlcmxheSAqYmVmb3JlX2xpc3QsICphZnRlcl9saXN0OwpAQCAtMzY3 Myw5ICszNjE5LDcgQEAKICAgIHdhcyBhdCBQUkVWLCBhbmQgbm93IGlzIGF0IFBPUy4gICovCiAK IHZvaWQKLWZpeF9vdmVybGF5c19iZWZvcmUgKGJwLCBwcmV2LCBwb3MpCi0gICAgIHN0cnVjdCBi dWZmZXIgKmJwOwotICAgICBFTUFDU19JTlQgcHJldiwgcG9zOworZml4X292ZXJsYXlzX2JlZm9y ZSAoc3RydWN0IGJ1ZmZlciAqYnAsIEVNQUNTX0lOVCBwcmV2LCBFTUFDU19JTlQgcG9zKQogewog ICAvKiBJZiBwYXJlbnQgaXMgbmlsLCByZXBsYWNlIG92ZXJsYXlzX2JlZm9yZTsgb3RoZXJ3aXNl LCBwYXJlbnQtPm5leHQuICAqLwogICBzdHJ1Y3QgTGlzcF9PdmVybGF5ICp0YWlsID0gYnAtPm92 ZXJsYXlzX2JlZm9yZSwgKnBhcmVudCA9IE5VTEwsICpyaWdodF9wYWlyOwpAQCAtMzg0MSw5ICsz Nzg1LDcgQEAKIC8qIE1hcmsgYSBzZWN0aW9uIG9mIEJVRiBhcyBuZWVkaW5nIHJlZGlzcGxheSBi ZWNhdXNlIG9mIG92ZXJsYXlzIGNoYW5nZXMuICAqLwogCiBzdGF0aWMgdm9pZAotbW9kaWZ5X292 ZXJsYXkgKGJ1Ziwgc3RhcnQsIGVuZCkKLSAgICAgc3RydWN0IGJ1ZmZlciAqYnVmOwotICAgICBF TUFDU19JTlQgc3RhcnQsIGVuZDsKK21vZGlmeV9vdmVybGF5IChzdHJ1Y3QgYnVmZmVyICpidWYs IEVNQUNTX0lOVCBzdGFydCwgRU1BQ1NfSU5UIGVuZCkKIHsKICAgaWYgKHN0YXJ0ID4gZW5kKQog ICAgIHsKQEAgLTM4NzAsMTEgKzM4MTIsMTAgQEAKIH0KIAogDAotTGlzcF9PYmplY3QgRmRlbGV0 ZV9vdmVybGF5ICgpOworTGlzcF9PYmplY3QgRmRlbGV0ZV9vdmVybGF5IChMaXNwX09iamVjdCBv dmVybGF5KTsKIAogc3RhdGljIHN0cnVjdCBMaXNwX092ZXJsYXkgKgotdW5jaGFpbl9vdmVybGF5 IChsaXN0LCBvdmVybGF5KQotICAgICBzdHJ1Y3QgTGlzcF9PdmVybGF5ICpsaXN0LCAqb3Zlcmxh eTsKK3VuY2hhaW5fb3ZlcmxheSAoc3RydWN0IExpc3BfT3ZlcmxheSAqbGlzdCwgc3RydWN0IExp c3BfT3ZlcmxheSAqb3ZlcmxheSkKIHsKICAgc3RydWN0IExpc3BfT3ZlcmxheSAqdG1wLCAqcHJl djsKICAgZm9yICh0bXAgPSBsaXN0LCBwcmV2ID0gTlVMTDsgdG1wOyBwcmV2ID0gdG1wLCB0bXAg PSB0bXAtPm5leHQpCkBAIC00MzMzLDggKzQyNzQsNyBAQAogICAgdG8gdGhlIGVuZCBvZiBsYXN0 X292ZXJsYXlfbW9kaWZpY2F0aW9uX2hvb2tzLiAgKi8KIAogc3RhdGljIHZvaWQKLWFkZF9vdmVy bGF5X21vZF9ob29rbGlzdCAoZnVuY3Rpb25saXN0LCBvdmVybGF5KQotICAgICBMaXNwX09iamVj dCBmdW5jdGlvbmxpc3QsIG92ZXJsYXk7CithZGRfb3ZlcmxheV9tb2RfaG9va2xpc3QgKExpc3Bf T2JqZWN0IGZ1bmN0aW9ubGlzdCwgTGlzcF9PYmplY3Qgb3ZlcmxheSkKIHsKICAgaW50IG9sZHNp emUgPSBYVkVDVE9SIChsYXN0X292ZXJsYXlfbW9kaWZpY2F0aW9uX2hvb2tzKS0+c2l6ZTsKIApA QCAtNDM2MiwxMCArNDMwMiw3IEBACiAgICBhbmQgdGhlIGxlbmd0aCBvZiBkZWxldGVkIG9yIHJl cGxhY2VkIG9sZCB0ZXh0LiAgKi8KIAogdm9pZAotcmVwb3J0X292ZXJsYXlfbW9kaWZpY2F0aW9u IChzdGFydCwgZW5kLCBhZnRlciwgYXJnMSwgYXJnMiwgYXJnMykKLSAgICAgTGlzcF9PYmplY3Qg c3RhcnQsIGVuZDsKLSAgICAgaW50IGFmdGVyOwotICAgICBMaXNwX09iamVjdCBhcmcxLCBhcmcy LCBhcmczOworcmVwb3J0X292ZXJsYXlfbW9kaWZpY2F0aW9uIChMaXNwX09iamVjdCBzdGFydCwg TGlzcF9PYmplY3QgZW5kLCBpbnQgYWZ0ZXIsIExpc3BfT2JqZWN0IGFyZzEsIExpc3BfT2JqZWN0 IGFyZzIsIExpc3BfT2JqZWN0IGFyZzMpCiB7CiAgIExpc3BfT2JqZWN0IHByb3AsIG92ZXJsYXk7 CiAgIHN0cnVjdCBMaXNwX092ZXJsYXkgKnRhaWw7CkBAIC00NDkwLDEwICs0NDI3LDcgQEAKIH0K IAogc3RhdGljIHZvaWQKLWNhbGxfb3ZlcmxheV9tb2RfaG9va3MgKGxpc3QsIG92ZXJsYXksIGFm dGVyLCBhcmcxLCBhcmcyLCBhcmczKQotICAgICBMaXNwX09iamVjdCBsaXN0LCBvdmVybGF5Owot ICAgICBpbnQgYWZ0ZXI7Ci0gICAgIExpc3BfT2JqZWN0IGFyZzEsIGFyZzIsIGFyZzM7CitjYWxs X292ZXJsYXlfbW9kX2hvb2tzIChMaXNwX09iamVjdCBsaXN0LCBMaXNwX09iamVjdCBvdmVybGF5 LCBpbnQgYWZ0ZXIsIExpc3BfT2JqZWN0IGFyZzEsIExpc3BfT2JqZWN0IGFyZzIsIExpc3BfT2Jq ZWN0IGFyZzMpCiB7CiAgIHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3By bzQ7CiAKQEAgLTQ1MTMsOCArNDQ0Nyw3IEBACiAvKiBEZWxldGUgYW55IHplcm8tc2l6ZWQgb3Zl cmxheXMgYXQgcG9zaXRpb24gUE9TLCBpZiB0aGUgYGV2YXBvcmF0ZScKICAgIHByb3BlcnR5IGlz IHNldC4gICovCiB2b2lkCi1ldmFwb3JhdGVfb3ZlcmxheXMgKHBvcykKLSAgICAgRU1BQ1NfSU5U IHBvczsKK2V2YXBvcmF0ZV9vdmVybGF5cyAoRU1BQ1NfSU5UIHBvcykKIHsKICAgTGlzcF9PYmpl Y3Qgb3ZlcmxheSwgaGl0X2xpc3Q7CiAgIHN0cnVjdCBMaXNwX092ZXJsYXkgKnRhaWw7CkBAIC00 NTUyLDkgKzQ0ODUsNyBAQAogICAgaW4gdGhlIHNsb3Qgd2l0aCBvZmZzZXQgT0ZGU0VULiAgKi8K IAogdm9pZAotYnVmZmVyX3Nsb3RfdHlwZV9taXNtYXRjaCAobmV3dmFsLCB0eXBlKQotICAgICBM aXNwX09iamVjdCBuZXd2YWw7Ci0gICAgIGludCB0eXBlOworYnVmZmVyX3Nsb3RfdHlwZV9taXNt YXRjaCAoTGlzcF9PYmplY3QgbmV3dmFsLCBpbnQgdHlwZSkKIHsKICAgTGlzcF9PYmplY3QgcHJl ZGljYXRlOwogCkBAIC01MDQxLDkgKzQ5NzIsNyBAQAogLyogQWxsb2NhdGUgTkJZVEVTIGJ5dGVz IGZvciBidWZmZXIgQidzIHRleHQgYnVmZmVyLiAgKi8KIAogc3RhdGljIHZvaWQKLWFsbG9jX2J1 ZmZlcl90ZXh0IChiLCBuYnl0ZXMpCi0gICAgIHN0cnVjdCBidWZmZXIgKmI7Ci0gICAgIHNpemVf dCBuYnl0ZXM7CithbGxvY19idWZmZXJfdGV4dCAoc3RydWN0IGJ1ZmZlciAqYiwgc2l6ZV90IG5i eXRlcykKIHsKICAgUE9JTlRFUl9UWVBFICpwOwogCkBAIC01MDk4LDggKzUwMjcsNyBAQAogLyog RnJlZSBidWZmZXIgQidzIHRleHQgYnVmZmVyLiAgKi8KIAogc3RhdGljIHZvaWQKLWZyZWVfYnVm ZmVyX3RleHQgKGIpCi0gICAgIHN0cnVjdCBidWZmZXIgKmI7CitmcmVlX2J1ZmZlcl90ZXh0IChz dHJ1Y3QgYnVmZmVyICpiKQogewogICBCTE9DS19JTlBVVDsKIApAQCAtNTEyMiw3ICs1MDUwLDcg QEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KIAogdm9pZAotaW5pdF9idWZmZXJfb25jZSAoKQoraW5pdF9i dWZmZXJfb25jZSAodm9pZCkKIHsKICAgaW50IGlkeDsKIApAQCAtNTMxOCw3ICs1MjQ2LDcgQEAK IH0KIAogdm9pZAotaW5pdF9idWZmZXIgKCkKK2luaXRfYnVmZmVyICh2b2lkKQogewogICBjaGFy ICpwd2Q7CiAgIExpc3BfT2JqZWN0IHRlbXA7CkBAIC01NDAyLDEyICs1MzMwLDcgQEAKICAgfSB3 aGlsZSAoMCkKIAogc3RhdGljIHZvaWQKLWRlZnZhcl9wZXJfYnVmZmVyIChib19md2QsIG5hbWVz dHJpbmcsIGFkZHJlc3MsIHR5cGUsIGRvYykKLSAgICAgc3RydWN0IExpc3BfQnVmZmVyX09iamZ3 ZCAqYm9fZndkOwotICAgICBjaGFyICpuYW1lc3RyaW5nOwotICAgICBMaXNwX09iamVjdCAqYWRk cmVzczsKLSAgICAgTGlzcF9PYmplY3QgdHlwZTsKLSAgICAgY2hhciAqZG9jOworZGVmdmFyX3Bl cl9idWZmZXIgKHN0cnVjdCBMaXNwX0J1ZmZlcl9PYmpmd2QgKmJvX2Z3ZCwgY2hhciAqbmFtZXN0 cmluZywgTGlzcF9PYmplY3QgKmFkZHJlc3MsIExpc3BfT2JqZWN0IHR5cGUsIGNoYXIgKmRvYykK IHsKICAgc3RydWN0IExpc3BfU3ltYm9sICpzeW07CiAgIGludCBvZmZzZXQ7CkBAIC01NDM1LDcg KzUzNTgsNyBAQAogCiAvKiBpbml0aWFsaXplIHRoZSBidWZmZXIgcm91dGluZXMgKi8KIHZvaWQK LXN5bXNfb2ZfYnVmZmVyICgpCitzeW1zX29mX2J1ZmZlciAodm9pZCkKIHsKICAgc3RhdGljcHJv ICgmbGFzdF9vdmVybGF5X21vZGlmaWNhdGlvbl9ob29rcyk7CiAgIGxhc3Rfb3ZlcmxheV9tb2Rp ZmljYXRpb25faG9va3MKQEAgLTYzMzgsNyArNjI2MSw3IEBACiB9CiAKIHZvaWQKLWtleXNfb2Zf YnVmZmVyICgpCitrZXlzX29mX2J1ZmZlciAodm9pZCkKIHsKICAgaW5pdGlhbF9kZWZpbmVfa2V5 IChjb250cm9sX3hfbWFwLCAnYicsICJzd2l0Y2gtdG8tYnVmZmVyIik7CiAgIGluaXRpYWxfZGVm aW5lX2tleSAoY29udHJvbF94X21hcCwgJ2snLCAia2lsbC1idWZmZXIiKTsKCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvY20uYycKLS0tIHNyYy9jbS5jCTIwMTAtMDctMDMgMDc6NDQ6MTcgKzAwMDAK KysrIHNyYy9jbS5jCTIwMTAtMDctMDUgMDE6MTc6MjggKzAwMDAKQEAgLTQ1LDggKzQ1LDcgQEAK IAogLyogQVJHU1VTRUQgKi8KIGludAotZXZhbGNvc3QgKGMpCi0gICAgIGludCBjOworZXZhbGNv c3QgKGludCBjKQogewogICBjb3N0Kys7CiAgIHJldHVybiBjOwpAQCAtNTYsOCArNTUsNyBAQAog c3RydWN0IHR0eV9kaXNwbGF5X2luZm8gKmN1cnJlbnRfdHR5OwogCiBpbnQKLWNtcHV0YyAoYykK LSAgICAgY2hhciBjOworY21wdXRjIChpbnQgYykKIHsKICAgaWYgKGN1cnJlbnRfdHR5LT50ZXJt c2NyaXB0KQogICAgIHB1dGMgKGMgJiAwMTc3LCBjdXJyZW50X3R0eS0+dGVybXNjcmlwdCk7CkBA IC0zMjYsOSArMzI0LDcgQEAKICNkZWZpbmUJVVNFQ1IJMwogCiB2b2lkCi1jbWdvdG8gKHR0eSwg cm93LCBjb2wpCi0gICAgIHN0cnVjdCB0dHlfZGlzcGxheV9pbmZvICp0dHk7Ci0gICAgIGludCBy b3csIGNvbDsKK2NtZ290byAoc3RydWN0IHR0eV9kaXNwbGF5X2luZm8gKnR0eSwgaW50IHJvdywg aW50IGNvbCkKIHsKICAgICBpbnQgICAgIGhvbWVjb3N0LAogICAgICAgICAgICAgY3Jjb3N0LAoK PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9ldmFsLmMnCi0tLSBzcmMvZXZhbC5jCTIwMTAtMDctMDIg MTI6MTk6NTMgKzAwMDAKKysrIHNyYy9ldmFsLmMJMjAxMC0wNy0wNSAwMToxNzoyNiArMDAwMApA QCAtMTc3LDEyICsxNzcsMTIgQEAKIC8qICJnY2MgLU8zIiBlbmFibGVzIGF1dG9tYXRpYyBmdW5j dGlvbiBpbmxpbmluZywgd2hpY2ggb3B0aW1pemVzIG91dAogICAgdGhlIGFyZ3VtZW50cyBmb3Ig dGhlIGludm9jYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucywgd2hlcmVhcyB0aGV5CiAgICBleHBl Y3QgdGhlc2UgdmFsdWVzIG9uIHRoZSBzdGFjay4gICovCi1MaXNwX09iamVjdCBhcHBseTEgKCkg X19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsKLUxpc3BfT2JqZWN0IGNhbGwyICgpIF9fYXR0cmli dXRlX18oKG5vaW5saW5lKSk7CitMaXNwX09iamVjdCBhcHBseTEgKExpc3BfT2JqZWN0IGZuLCBM aXNwX09iamVjdCBhcmcpIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSk7CitMaXNwX09iamVjdCBj YWxsMiAoTGlzcF9PYmplY3QgZm4sIExpc3BfT2JqZWN0IGFyZzEsIExpc3BfT2JqZWN0IGFyZzIp IF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSk7CiAjZW5kaWYKIAwKIHZvaWQKLWluaXRfZXZhbF9v bmNlICgpCitpbml0X2V2YWxfb25jZSAodm9pZCkKIHsKICAgc3BlY3BkbF9zaXplID0gNTA7CiAg IHNwZWNwZGwgPSAoc3RydWN0IHNwZWNiaW5kaW5nICopIHhtYWxsb2MgKHNwZWNwZGxfc2l6ZSAq IHNpemVvZiAoc3RydWN0IHNwZWNiaW5kaW5nKSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIH0KIAog dm9pZAotaW5pdF9ldmFsICgpCitpbml0X2V2YWwgKHZvaWQpCiB7CiAgIHNwZWNwZGxfcHRyID0g c3BlY3BkbDsKICAgY2F0Y2hsaXN0ID0gMDsKQEAgLTIxNCw4ICsyMTQsNyBAQAogLyogdW53aW5k LXByb3RlY3QgZnVuY3Rpb24gdXNlZCBieSBjYWxsX2RlYnVnZ2VyLiAgKi8KIAogc3RhdGljIExp c3BfT2JqZWN0Ci1yZXN0b3JlX3N0YWNrX2xpbWl0cyAoZGF0YSkKLSAgICAgTGlzcF9PYmplY3Qg ZGF0YTsKK3Jlc3RvcmVfc3RhY2tfbGltaXRzIChMaXNwX09iamVjdCBkYXRhKQogewogICBtYXhf c3BlY3BkbF9zaXplID0gWElOVCAoWENBUiAoZGF0YSkpOwogICBtYXhfbGlzcF9ldmFsX2RlcHRo ID0gWElOVCAoWENEUiAoZGF0YSkpOwpAQCAtMjI1LDggKzIyNCw3IEBACiAvKiBDYWxsIHRoZSBM aXNwIGRlYnVnZ2VyLCBnaXZpbmcgaXQgYXJndW1lbnQgQVJHLiAgKi8KIAogTGlzcF9PYmplY3QK LWNhbGxfZGVidWdnZXIgKGFyZykKLSAgICAgTGlzcF9PYmplY3QgYXJnOworY2FsbF9kZWJ1Z2dl ciAoTGlzcF9PYmplY3QgYXJnKQogewogICBpbnQgZGVidWdfd2hpbGVfcmVkaXNwbGF5aW5nOwog ICBpbnQgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwpAQCAtMjgyLDggKzI4MCw3IEBACiB9CiAK IHZvaWQKLWRvX2RlYnVnX29uX2NhbGwgKGNvZGUpCi0gICAgIExpc3BfT2JqZWN0IGNvZGU7Citk b19kZWJ1Z19vbl9jYWxsIChMaXNwX09iamVjdCBjb2RlKQogewogICBkZWJ1Z19vbl9uZXh0X2Nh bGwgPSAwOwogICBiYWNrdHJhY2VfbGlzdC0+ZGVidWdfb25fZXhpdCA9IDE7CkBAIC02MDksOCAr NjA2LDcgQEAKICAgICBjYWxsZWQgaXMgYSBidWlsdC1pbi4gICovCiAKIGludAotaW50ZXJhY3Rp dmVfcCAoZXhjbHVkZV9zdWJyc19wKQotICAgICBpbnQgZXhjbHVkZV9zdWJyc19wOworaW50ZXJh Y3RpdmVfcCAoaW50IGV4Y2x1ZGVfc3VicnNfcCkKIHsKICAgc3RydWN0IGJhY2t0cmFjZSAqYnRw OwogICBMaXNwX09iamVjdCBmdW47CkBAIC05MzIsOCArOTI4LDcgQEAKIAogLyogRXJyb3IgaGFu ZGxlciB1c2VkIGluIEZ1c2VyX3ZhcmlhYmxlX3AuICAqLwogc3RhdGljIExpc3BfT2JqZWN0Ci11 c2VyX3ZhcmlhYmxlX3BfZWggKGlnbm9yZSkKLSAgICAgTGlzcF9PYmplY3QgaWdub3JlOwordXNl cl92YXJpYWJsZV9wX2VoIChMaXNwX09iamVjdCBpZ25vcmUpCiB7CiAgIHJldHVybiBRbmlsOwog fQpAQCAtMTIxOSwxMCArMTIxNCw3IEBACiAgICBUaGlzIGlzIGhvdyBjYXRjaGVzIGFyZSBkb25l IGZyb20gd2l0aGluIEMgY29kZS4gKi8KIAogTGlzcF9PYmplY3QKLWludGVybmFsX2NhdGNoICh0 YWcsIGZ1bmMsIGFyZykKLSAgICAgTGlzcF9PYmplY3QgdGFnOwotICAgICBMaXNwX09iamVjdCAo KmZ1bmMpICgpOwotICAgICBMaXNwX09iamVjdCBhcmc7CitpbnRlcm5hbF9jYXRjaCAoTGlzcF9P YmplY3QgdGFnLCBMaXNwX09iamVjdCAoKmZ1bmMpIChMaXNwX09iamVjdCksIExpc3BfT2JqZWN0 IGFyZykKIHsKICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWFkZSBwYXJ0IG9mIHRoZSBjaGFpbiBg Y2F0Y2hsaXN0Jy4gICovCiAgIHN0cnVjdCBjYXRjaHRhZyBjOwpAQCAtMTI2Nyw5ICsxMjU5LDcg QEAKICAgIFRoaXMgaXMgdXNlZCBmb3IgY29ycmVjdCB1bndpbmRpbmcgaW4gRnRocm93IGFuZCBG c2lnbmFsLiAgKi8KIAogc3RhdGljIHZvaWQKLXVud2luZF90b19jYXRjaCAoY2F0Y2gsIHZhbHVl KQotICAgICBzdHJ1Y3QgY2F0Y2h0YWcgKmNhdGNoOwotICAgICBMaXNwX09iamVjdCB2YWx1ZTsK K3Vud2luZF90b19jYXRjaCAoc3RydWN0IGNhdGNodGFnICpjYXRjaCwgTGlzcF9PYmplY3QgdmFs dWUpCiB7CiAgIHJlZ2lzdGVyIGludCBsYXN0X3RpbWU7CiAKQEAgLTE0MDAsOSArMTM5MCw3IEBA CiAgICByYXRoZXIgdGhhbiBwYXNzZWQgaW4gYSBsaXN0LiAgVXNlZCBieSBGYnl0ZV9jb2RlLiAg Ki8KIAogTGlzcF9PYmplY3QKLWludGVybmFsX2xpc3BfY29uZGl0aW9uX2Nhc2UgKHZhciwgYm9k eWZvcm0sIGhhbmRsZXJzKQotICAgICB2b2xhdGlsZSBMaXNwX09iamVjdCB2YXI7Ci0gICAgIExp c3BfT2JqZWN0IGJvZHlmb3JtLCBoYW5kbGVyczsKK2ludGVybmFsX2xpc3BfY29uZGl0aW9uX2Nh c2UgKHZvbGF0aWxlIHZvbGF0aWxlIExpc3BfT2JqZWN0IHZhciwgTGlzcF9PYmplY3QgYm9keWZv cm0sIExpc3BfT2JqZWN0IGhhbmRsZXJzKQogewogICBMaXNwX09iamVjdCB2YWw7CiAgIHN0cnVj dCBjYXRjaHRhZyBjOwpAQCAtMTQ2OSwxMCArMTQ1Nyw4IEBACiAgICBidXQgYWxsb3cgdGhlIGRl YnVnZ2VyIHRvIHJ1biBpZiB0aGF0IGlzIGVuYWJsZWQuICAqLwogCiBMaXNwX09iamVjdAotaW50 ZXJuYWxfY29uZGl0aW9uX2Nhc2UgKGJmdW4sIGhhbmRsZXJzLCBoZnVuKQotICAgICBMaXNwX09i amVjdCAoKmJmdW4pICgpOwotICAgICBMaXNwX09iamVjdCBoYW5kbGVyczsKLSAgICAgTGlzcF9P YmplY3QgKCpoZnVuKSAoKTsKK2ludGVybmFsX2NvbmRpdGlvbl9jYXNlIChMaXNwX09iamVjdCAo KmJmdW4pICh2b2lkKSwgTGlzcF9PYmplY3QgaGFuZGxlcnMsCisJCQkgTGlzcF9PYmplY3QgKCpo ZnVuKSAoTGlzcF9PYmplY3QpKQogewogICBMaXNwX09iamVjdCB2YWw7CiAgIHN0cnVjdCBjYXRj aHRhZyBjOwpAQCAtMTUxNiwxMSArMTUwMiw4IEBACiAvKiBMaWtlIGludGVybmFsX2NvbmRpdGlv bl9jYXNlIGJ1dCBjYWxsIEJGVU4gd2l0aCBBUkcgYXMgaXRzIGFyZ3VtZW50LiAgKi8KIAogTGlz cF9PYmplY3QKLWludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKGJmdW4sIGFyZywgaGFuZGxlcnMs IGhmdW4pCi0gICAgIExpc3BfT2JqZWN0ICgqYmZ1bikgKCk7Ci0gICAgIExpc3BfT2JqZWN0IGFy ZzsKLSAgICAgTGlzcF9PYmplY3QgaGFuZGxlcnM7Ci0gICAgIExpc3BfT2JqZWN0ICgqaGZ1bikg KCk7CitpbnRlcm5hbF9jb25kaXRpb25fY2FzZV8xIChMaXNwX09iamVjdCAoKmJmdW4pIChMaXNw X09iamVjdCksIExpc3BfT2JqZWN0IGFyZywKKwkJCSAgIExpc3BfT2JqZWN0IGhhbmRsZXJzLCBM aXNwX09iamVjdCAoKmhmdW4pIChMaXNwX09iamVjdCkpCiB7CiAgIExpc3BfT2JqZWN0IHZhbDsK ICAgc3RydWN0IGNhdGNodGFnIGM7CkBAIC0xNzkwLDggKzE3NzMsNyBAQAogICAgVXNlZCBmb3Ig YW55dGhpbmcgYnV0IFFxdWl0ICh3aGljaCBjYW4gcmV0dXJuIGZyb20gRnNpZ25hbCkuICAqLwog CiB2b2lkCi14c2lnbmFsIChlcnJvcl9zeW1ib2wsIGRhdGEpCi0gICAgIExpc3BfT2JqZWN0IGVy cm9yX3N5bWJvbCwgZGF0YTsKK3hzaWduYWwgKExpc3BfT2JqZWN0IGVycm9yX3N5bWJvbCwgTGlz cF9PYmplY3QgZGF0YSkKIHsKICAgRnNpZ25hbCAoZXJyb3Jfc3ltYm9sLCBkYXRhKTsKICAgYWJv cnQgKCk7CkBAIC0xODAwLDI5ICsxNzgyLDI1IEBACiAvKiBMaWtlIHhzaWduYWwsIGJ1dCB0YWtl cyAwLCAxLCAyLCBvciAzIGFyZ3MgaW5zdGVhZCBvZiBhIGxpc3QuICAqLwogCiB2b2lkCi14c2ln bmFsMCAoZXJyb3Jfc3ltYm9sKQotICAgICBMaXNwX09iamVjdCBlcnJvcl9zeW1ib2w7Cit4c2ln bmFsMCAoTGlzcF9PYmplY3QgZXJyb3Jfc3ltYm9sKQogewogICB4c2lnbmFsIChlcnJvcl9zeW1i b2wsIFFuaWwpOwogfQogCiB2b2lkCi14c2lnbmFsMSAoZXJyb3Jfc3ltYm9sLCBhcmcpCi0gICAg IExpc3BfT2JqZWN0IGVycm9yX3N5bWJvbCwgYXJnOworeHNpZ25hbDEgKExpc3BfT2JqZWN0IGVy cm9yX3N5bWJvbCwgTGlzcF9PYmplY3QgYXJnKQogewogICB4c2lnbmFsIChlcnJvcl9zeW1ib2ws IGxpc3QxIChhcmcpKTsKIH0KIAogdm9pZAoteHNpZ25hbDIgKGVycm9yX3N5bWJvbCwgYXJnMSwg YXJnMikKLSAgICAgTGlzcF9PYmplY3QgZXJyb3Jfc3ltYm9sLCBhcmcxLCBhcmcyOworeHNpZ25h bDIgKExpc3BfT2JqZWN0IGVycm9yX3N5bWJvbCwgTGlzcF9PYmplY3QgYXJnMSwgTGlzcF9PYmpl Y3QgYXJnMikKIHsKICAgeHNpZ25hbCAoZXJyb3Jfc3ltYm9sLCBsaXN0MiAoYXJnMSwgYXJnMikp OwogfQogCiB2b2lkCi14c2lnbmFsMyAoZXJyb3Jfc3ltYm9sLCBhcmcxLCBhcmcyLCBhcmczKQot ICAgICBMaXNwX09iamVjdCBlcnJvcl9zeW1ib2wsIGFyZzEsIGFyZzIsIGFyZzM7Cit4c2lnbmFs MyAoTGlzcF9PYmplY3QgZXJyb3Jfc3ltYm9sLCBMaXNwX09iamVjdCBhcmcxLCBMaXNwX09iamVj dCBhcmcyLCBMaXNwX09iamVjdCBhcmczKQogewogICB4c2lnbmFsIChlcnJvcl9zeW1ib2wsIGxp c3QzIChhcmcxLCBhcmcyLCBhcmczKSk7CiB9CkBAIC0xODMxLDkgKzE4MDksNyBAQAogICAgSWYg QVJHIGlzIG5vdCBhIGdlbnVpbmUgbGlzdCwgbWFrZSBpdCBhIG9uZS1lbGVtZW50IGxpc3QuICAq LwogCiB2b2lkCi1zaWduYWxfZXJyb3IgKHMsIGFyZykKLSAgICAgY2hhciAqczsKLSAgICAgTGlz cF9PYmplY3QgYXJnOworc2lnbmFsX2Vycm9yIChjaGFyICpzLCBMaXNwX09iamVjdCBhcmcpCiB7 CiAgIExpc3BfT2JqZWN0IHRvcnRvaXNlLCBoYXJlOwogCkBAIC0xODYyLDggKzE4MzgsNyBAQAog ICAgYSBsaXN0IGNvbnRhaW5pbmcgb25lIG9mIENPTkRJVElPTlMuICAqLwogCiBzdGF0aWMgaW50 Ci13YW50c19kZWJ1Z2dlciAobGlzdCwgY29uZGl0aW9ucykKLSAgICAgTGlzcF9PYmplY3QgbGlz dCwgY29uZGl0aW9uczsKK3dhbnRzX2RlYnVnZ2VyIChMaXNwX09iamVjdCBsaXN0LCBMaXNwX09i amVjdCBjb25kaXRpb25zKQogewogICBpZiAoTklMUCAobGlzdCkpCiAgICAgcmV0dXJuIDA7CkBA IC0xODg3LDggKzE4NjIsNyBAQAogICAgYWNjb3JkaW5nIHRvIGRlYnVnZ2VyLWlnbm9yZWQtZXJy b3JzLiAgKi8KIAogc3RhdGljIGludAotc2tpcF9kZWJ1Z2dlciAoY29uZGl0aW9ucywgZGF0YSkK LSAgICAgTGlzcF9PYmplY3QgY29uZGl0aW9ucywgZGF0YTsKK3NraXBfZGVidWdnZXIgKExpc3Bf T2JqZWN0IGNvbmRpdGlvbnMsIExpc3BfT2JqZWN0IGRhdGEpCiB7CiAgIExpc3BfT2JqZWN0IHRh aWw7CiAgIGludCBmaXJzdF9zdHJpbmcgPSAxOwpAQCAtMTkyNSw4ICsxODk5LDcgQEAKICAgIFNJ RyBhbmQgREFUQSBkZXNjcmliZSB0aGUgc2lnbmFsLCBhcyBpbiBmaW5kX2hhbmRsZXJfY2xhdXNl LiAgKi8KIAogc3RhdGljIGludAotbWF5YmVfY2FsbF9kZWJ1Z2dlciAoY29uZGl0aW9ucywgc2ln LCBkYXRhKQotICAgICBMaXNwX09iamVjdCBjb25kaXRpb25zLCBzaWcsIGRhdGE7CittYXliZV9j YWxsX2RlYnVnZ2VyIChMaXNwX09iamVjdCBjb25kaXRpb25zLCBMaXNwX09iamVjdCBzaWcsIExp c3BfT2JqZWN0IGRhdGEpCiB7CiAgIExpc3BfT2JqZWN0IGNvbWJpbmVkX2RhdGE7CiAKQEAgLTE5 NjIsOCArMTkzNSw3IEBACiAgICBhIHNlY29uZCBlcnJvciBoZXJlIGluIGNhc2Ugd2UncmUgaGFu ZGxpbmcgc3BlY3BkbCBvdmVyZmxvdy4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotZmluZF9o YW5kbGVyX2NsYXVzZSAoaGFuZGxlcnMsIGNvbmRpdGlvbnMsIHNpZywgZGF0YSkKLSAgICAgTGlz cF9PYmplY3QgaGFuZGxlcnMsIGNvbmRpdGlvbnMsIHNpZywgZGF0YTsKK2ZpbmRfaGFuZGxlcl9j bGF1c2UgKExpc3BfT2JqZWN0IGhhbmRsZXJzLCBMaXNwX09iamVjdCBjb25kaXRpb25zLCBMaXNw X09iamVjdCBzaWcsIExpc3BfT2JqZWN0IGRhdGEpCiB7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0 IGg7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHRlbTsKQEAgLTIyMDUsOCArMjE3Nyw3IEBACiB9 CiAKIExpc3BfT2JqZWN0Ci11bl9hdXRvbG9hZCAob2xkcXVldWUpCi0gICAgIExpc3BfT2JqZWN0 IG9sZHF1ZXVlOwordW5fYXV0b2xvYWQgKExpc3BfT2JqZWN0IG9sZHF1ZXVlKQogewogICByZWdp c3RlciBMaXNwX09iamVjdCBxdWV1ZSwgZmlyc3QsIHNlY29uZDsKIApAQCAtMjIzMyw4ICsyMjA0 LDcgQEAKICAgIEZVTkRFRiBpcyB0aGUgYXV0b2xvYWQgZGVmaW5pdGlvbiAoYSBsaXN0KS4gICov CiAKIHZvaWQKLWRvX2F1dG9sb2FkIChmdW5kZWYsIGZ1bm5hbWUpCi0gICAgIExpc3BfT2JqZWN0 IGZ1bmRlZiwgZnVubmFtZTsKK2RvX2F1dG9sb2FkIChMaXNwX09iamVjdCBmdW5kZWYsIExpc3Bf T2JqZWN0IGZ1bm5hbWUpCiB7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAgIExp c3BfT2JqZWN0IGZ1bjsKQEAgLTI2ODIsMTAgKzI2NTIsNyBAQAogICAgZXhjZXB0IHRoYXQgaXQg aXNuJ3QgbmVjZXNzYXJ5IHRvIGdjcHJvIEFSR1NbMF0uICAqLwogCiBzdGF0aWMgTGlzcF9PYmpl Y3QKLXJ1bl9ob29rX3dpdGhfYXJncyAobmFyZ3MsIGFyZ3MsIGNvbmQpCi0gICAgIGludCBuYXJn czsKLSAgICAgTGlzcF9PYmplY3QgKmFyZ3M7Ci0gICAgIGVudW0gcnVuX2hvb2tzX2NvbmRpdGlv biBjb25kOworcnVuX2hvb2tfd2l0aF9hcmdzIChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdz LCBlbnVtIHJ1bl9ob29rc19jb25kaXRpb24gY29uZCkKIHsKICAgTGlzcF9PYmplY3Qgc3ltLCB2 YWwsIHJldDsKICAgc3RydWN0IGdjcHJvIGdjcHJvMSwgZ2Nwcm8yLCBnY3BybzM7CkBAIC0yNzY1 LDEwICsyNzMyLDcgQEAKICAgIGV4Y2VwdCB0aGF0IGl0IGlzbid0IG5lY2Vzc2FyeSB0byBnY3By byBBUkdTWzBdLiAgKi8KIAogTGlzcF9PYmplY3QKLXJ1bl9ob29rX2xpc3Rfd2l0aF9hcmdzIChm dW5saXN0LCBuYXJncywgYXJncykKLSAgICAgTGlzcF9PYmplY3QgZnVubGlzdDsKLSAgICAgaW50 IG5hcmdzOwotICAgICBMaXNwX09iamVjdCAqYXJnczsKK3J1bl9ob29rX2xpc3Rfd2l0aF9hcmdz IChMaXNwX09iamVjdCBmdW5saXN0LCBpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewog ICBMaXNwX09iamVjdCBzeW07CiAgIExpc3BfT2JqZWN0IHZhbDsKQEAgLTI4MTAsOCArMjc3NCw3 IEBACiAvKiBSdW4gdGhlIGhvb2sgSE9PSywgZ2l2aW5nIGVhY2ggZnVuY3Rpb24gdGhlIHR3byBh cmdzIEFSRzEgYW5kIEFSRzIuICAqLwogCiB2b2lkCi1ydW5faG9va193aXRoX2FyZ3NfMiAoaG9v aywgYXJnMSwgYXJnMikKLSAgICAgTGlzcF9PYmplY3QgaG9vaywgYXJnMSwgYXJnMjsKK3J1bl9o b29rX3dpdGhfYXJnc18yIChMaXNwX09iamVjdCBob29rLCBMaXNwX09iamVjdCBhcmcxLCBMaXNw X09iamVjdCBhcmcyKQogewogICBMaXNwX09iamVjdCB0ZW1wWzNdOwogICB0ZW1wWzBdID0gaG9v azsKQEAgLTI4MjMsOCArMjc4Niw3IEBACiAMCiAvKiBBcHBseSBmbiB0byBhcmcgKi8KIExpc3Bf T2JqZWN0Ci1hcHBseTEgKGZuLCBhcmcpCi0gICAgIExpc3BfT2JqZWN0IGZuLCBhcmc7CithcHBs eTEgKExpc3BfT2JqZWN0IGZuLCBMaXNwX09iamVjdCBhcmcpCiB7CiAgIHN0cnVjdCBnY3BybyBn Y3BybzE7CiAKQEAgLTI4NDMsOCArMjgwNSw3IEBACiAKIC8qIENhbGwgZnVuY3Rpb24gZm4gb24g bm8gYXJndW1lbnRzICovCiBMaXNwX09iamVjdAotY2FsbDAgKGZuKQotICAgICBMaXNwX09iamVj dCBmbjsKK2NhbGwwIChMaXNwX09iamVjdCBmbikKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsK IApAQCAtMjg1NSw4ICsyODE2LDcgQEAKIC8qIENhbGwgZnVuY3Rpb24gZm4gd2l0aCAxIGFyZ3Vt ZW50IGFyZzEgKi8KIC8qIEFSR1NVU0VEICovCiBMaXNwX09iamVjdAotY2FsbDEgKGZuLCBhcmcx KQotICAgICBMaXNwX09iamVjdCBmbiwgYXJnMTsKK2NhbGwxIChMaXNwX09iamVjdCBmbiwgTGlz cF9PYmplY3QgYXJnMSkKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKICAgTGlzcF9PYmplY3Qg YXJnc1syXTsKQEAgLTI4NzEsOCArMjgzMSw3IEBACiAvKiBDYWxsIGZ1bmN0aW9uIGZuIHdpdGgg MiBhcmd1bWVudHMgYXJnMSwgYXJnMiAqLwogLyogQVJHU1VTRUQgKi8KIExpc3BfT2JqZWN0Ci1j YWxsMiAoZm4sIGFyZzEsIGFyZzIpCi0gICAgIExpc3BfT2JqZWN0IGZuLCBhcmcxLCBhcmcyOwor Y2FsbDIgKExpc3BfT2JqZWN0IGZuLCBMaXNwX09iamVjdCBhcmcxLCBMaXNwX09iamVjdCBhcmcy KQogewogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwogICBMaXNwX09iamVjdCBhcmdzWzNdOwpAQCAt Mjg4Nyw4ICsyODQ2LDcgQEAKIC8qIENhbGwgZnVuY3Rpb24gZm4gd2l0aCAzIGFyZ3VtZW50cyBh cmcxLCBhcmcyLCBhcmczICovCiAvKiBBUkdTVVNFRCAqLwogTGlzcF9PYmplY3QKLWNhbGwzIChm biwgYXJnMSwgYXJnMiwgYXJnMykKLSAgICAgTGlzcF9PYmplY3QgZm4sIGFyZzEsIGFyZzIsIGFy ZzM7CitjYWxsMyAoTGlzcF9PYmplY3QgZm4sIExpc3BfT2JqZWN0IGFyZzEsIExpc3BfT2JqZWN0 IGFyZzIsIExpc3BfT2JqZWN0IGFyZzMpCiB7CiAgIHN0cnVjdCBnY3BybyBnY3BybzE7CiAgIExp c3BfT2JqZWN0IGFyZ3NbNF07CkBAIC0yOTA0LDggKzI4NjIsOCBAQAogLyogQ2FsbCBmdW5jdGlv biBmbiB3aXRoIDQgYXJndW1lbnRzIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQgKi8KIC8qIEFSR1NV U0VEICovCiBMaXNwX09iamVjdAotY2FsbDQgKGZuLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQot ICAgICBMaXNwX09iamVjdCBmbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNDsKK2NhbGw0IChMaXNw X09iamVjdCBmbiwgTGlzcF9PYmplY3QgYXJnMSwgTGlzcF9PYmplY3QgYXJnMiwgTGlzcF9PYmpl Y3QgYXJnMywKKyAgICAgICBMaXNwX09iamVjdCBhcmc0KQogewogICBzdHJ1Y3QgZ2Nwcm8gZ2Nw cm8xOwogICBMaXNwX09iamVjdCBhcmdzWzVdOwpAQCAtMjkyMiw4ICsyODgwLDggQEAKIC8qIENh bGwgZnVuY3Rpb24gZm4gd2l0aCA1IGFyZ3VtZW50cyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBh cmc1ICovCiAvKiBBUkdTVVNFRCAqLwogTGlzcF9PYmplY3QKLWNhbGw1IChmbiwgYXJnMSwgYXJn MiwgYXJnMywgYXJnNCwgYXJnNSkKLSAgICAgTGlzcF9PYmplY3QgZm4sIGFyZzEsIGFyZzIsIGFy ZzMsIGFyZzQsIGFyZzU7CitjYWxsNSAoTGlzcF9PYmplY3QgZm4sIExpc3BfT2JqZWN0IGFyZzEs IExpc3BfT2JqZWN0IGFyZzIsIExpc3BfT2JqZWN0IGFyZzMsCisgICAgICAgTGlzcF9PYmplY3Qg YXJnNCwgTGlzcF9PYmplY3QgYXJnNSkKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKICAgTGlz cF9PYmplY3QgYXJnc1s2XTsKQEAgLTI5NDEsOCArMjg5OSw4IEBACiAvKiBDYWxsIGZ1bmN0aW9u IGZuIHdpdGggNiBhcmd1bWVudHMgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiAq LwogLyogQVJHU1VTRUQgKi8KIExpc3BfT2JqZWN0Ci1jYWxsNiAoZm4sIGFyZzEsIGFyZzIsIGFy ZzMsIGFyZzQsIGFyZzUsIGFyZzYpCi0gICAgIExpc3BfT2JqZWN0IGZuLCBhcmcxLCBhcmcyLCBh cmczLCBhcmc0LCBhcmc1LCBhcmc2OworY2FsbDYgKExpc3BfT2JqZWN0IGZuLCBMaXNwX09iamVj dCBhcmcxLCBMaXNwX09iamVjdCBhcmcyLCBMaXNwX09iamVjdCBhcmczLAorICAgICAgIExpc3Bf T2JqZWN0IGFyZzQsIExpc3BfT2JqZWN0IGFyZzUsIExpc3BfT2JqZWN0IGFyZzYpCiB7CiAgIHN0 cnVjdCBnY3BybyBnY3BybzE7CiAgIExpc3BfT2JqZWN0IGFyZ3NbN107CkBAIC0yOTYxLDggKzI5 MTksOCBAQAogLyogQ2FsbCBmdW5jdGlvbiBmbiB3aXRoIDcgYXJndW1lbnRzIGFyZzEsIGFyZzIs IGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcgKi8KIC8qIEFSR1NVU0VEICovCiBMaXNwX09i amVjdAotY2FsbDcgKGZuLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3 KQotICAgICBMaXNwX09iamVjdCBmbiwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJn NiwgYXJnNzsKK2NhbGw3IChMaXNwX09iamVjdCBmbiwgTGlzcF9PYmplY3QgYXJnMSwgTGlzcF9P YmplY3QgYXJnMiwgTGlzcF9PYmplY3QgYXJnMywKKyAgICAgICBMaXNwX09iamVjdCBhcmc0LCBM aXNwX09iamVjdCBhcmc1LCBMaXNwX09iamVjdCBhcmc2LCBMaXNwX09iamVjdCBhcmc3KQogewog ICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwogICBMaXNwX09iamVjdCBhcmdzWzhdOwpAQCAtMzE0Nyw5 ICszMTA1LDcgQEAKIH0KIAwKIExpc3BfT2JqZWN0Ci1hcHBseV9sYW1iZGEgKGZ1biwgYXJncywg ZXZhbF9mbGFnKQotICAgICBMaXNwX09iamVjdCBmdW4sIGFyZ3M7Ci0gICAgIGludCBldmFsX2Zs YWc7CithcHBseV9sYW1iZGEgKExpc3BfT2JqZWN0IGZ1biwgTGlzcF9PYmplY3QgYXJncywgaW50 IGV2YWxfZmxhZykKIHsKICAgTGlzcF9PYmplY3QgYXJnc19sZWZ0OwogICBMaXNwX09iamVjdCBu dW1hcmdzOwpAQCAtMzE5NiwxMCArMzE1Miw3IEBACiAgICBGVU4gbXVzdCBiZSBlaXRoZXIgYSBs YW1iZGEtZXhwcmVzc2lvbiBvciBhIGNvbXBpbGVkLWNvZGUgb2JqZWN0LiAgKi8KIAogc3RhdGlj IExpc3BfT2JqZWN0Ci1mdW5jYWxsX2xhbWJkYSAoZnVuLCBuYXJncywgYXJnX3ZlY3RvcikKLSAg ICAgTGlzcF9PYmplY3QgZnVuOwotICAgICBpbnQgbmFyZ3M7Ci0gICAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0ICphcmdfdmVjdG9yOworZnVuY2FsbF9sYW1iZGEgKExpc3BfT2JqZWN0IGZ1biwgaW50 IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJnX3ZlY3RvcikKIHsKICAgTGlzcF9PYmpl Y3QgdmFsLCBzeW1zX2xlZnQsIG5leHQ7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7 CkBAIC0zMjkxLDcgKzMyNDQsNyBAQAogfQogDAogdm9pZAotZ3Jvd19zcGVjcGRsICgpCitncm93 X3NwZWNwZGwgKHZvaWQpCiB7CiAgIHJlZ2lzdGVyIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVgg KCk7CiAgIGlmIChzcGVjcGRsX3NpemUgPj0gbWF4X3NwZWNwZGxfc2l6ZSkKQEAgLTMzMjQsOCAr MzI3Nyw3IEBACiAgICAgIEJVRkZFUiBkaWQgbm90IHlldCBoYXZlIGEgYnVmZmVyLWxvY2FsIHZh bHVlKS4gICovCiAKIHZvaWQKLXNwZWNiaW5kIChzeW1ib2wsIHZhbHVlKQotICAgICBMaXNwX09i amVjdCBzeW1ib2wsIHZhbHVlOworc3BlY2JpbmQgKExpc3BfT2JqZWN0IHN5bWJvbCwgTGlzcF9P YmplY3QgdmFsdWUpCiB7CiAgIHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltOwogCkBAIC0zNDIzLDkg KzMzNzUsNyBAQAogfQogCiB2b2lkCi1yZWNvcmRfdW53aW5kX3Byb3RlY3QgKGZ1bmN0aW9uLCBh cmcpCi0gICAgIExpc3BfT2JqZWN0ICgqZnVuY3Rpb24pIChMaXNwX09iamVjdCk7Ci0gICAgIExp c3BfT2JqZWN0IGFyZzsKK3JlY29yZF91bndpbmRfcHJvdGVjdCAoTGlzcF9PYmplY3QgKCpmdW5j dGlvbikgKExpc3BfT2JqZWN0KSwgTGlzcF9PYmplY3QgYXJnKQogewogICBlYXNzZXJ0ICghaGFu ZGxpbmdfc2lnbmFsKTsKIApAQCAtMzQzOCw5ICszMzg4LDcgQEAKIH0KIAogTGlzcF9PYmplY3QK LXVuYmluZF90byAoY291bnQsIHZhbHVlKQotICAgICBpbnQgY291bnQ7Ci0gICAgIExpc3BfT2Jq ZWN0IHZhbHVlOwordW5iaW5kX3RvIChpbnQgY291bnQsIExpc3BfT2JqZWN0IHZhbHVlKQogewog ICBMaXNwX09iamVjdCBxdWl0ZiA9IFZxdWl0X2ZsYWc7CiAgIHN0cnVjdCBnY3BybyBnY3BybzEs IGdjcHJvMjsKQEAgLTM2MjMsNyArMzU3MSw3IEBACiAKIAwKIHZvaWQKLW1hcmtfYmFja3RyYWNl ICgpCittYXJrX2JhY2t0cmFjZSAodm9pZCkKIHsKICAgcmVnaXN0ZXIgc3RydWN0IGJhY2t0cmFj ZSAqYmFja2xpc3Q7CiAgIHJlZ2lzdGVyIGludCBpOwpAQCAtMzY0Miw3ICszNTkwLDcgQEAKIH0K IAogdm9pZAotc3ltc19vZl9ldmFsICgpCitzeW1zX29mX2V2YWwgKHZvaWQpCiB7CiAgIERFRlZB Ul9JTlQgKCJtYXgtc3BlY3BkbC1zaXplIiwgJm1heF9zcGVjcGRsX3NpemUsCiAJICAgICAgZG9j OiAvKiAqTGltaXQgb24gbnVtYmVyIG9mIExpc3AgdmFyaWFibGUgYmluZGluZ3MgYW5kIGB1bndp bmQtcHJvdGVjdCdzLgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9pbWFnZS5jJwotLS0gc3JjL2lt YWdlLmMJMjAxMC0wNy0wMiAxMjoxOTo1MyArMDAwMAorKysgc3JjL2ltYWdlLmMJMjAxMC0wNy0w NSAwMToxNzoyOCArMDAwMApAQCAtMTgxLDI2ICsxODEsMjAgQEAKIC8qIEZ1bmN0aW9ucyB0byBh Y2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgYml0bWFwLCBnaXZlbiBhbiBpZC4gICovCiAKIGludAot eF9iaXRtYXBfaGVpZ2h0IChmLCBpZCkKLSAgICAgRlJBTUVfUFRSIGY7Ci0gICAgIGludCBpZDsK K3hfYml0bWFwX2hlaWdodCAoRlJBTUVfUFRSIGYsIGludCBpZCkKIHsKICAgcmV0dXJuIEZSQU1F X1hfRElTUExBWV9JTkZPIChmKS0+Yml0bWFwc1tpZCAtIDFdLmhlaWdodDsKIH0KIAogaW50Ci14 X2JpdG1hcF93aWR0aCAoZiwgaWQpCi0gICAgIEZSQU1FX1BUUiBmOwotICAgICBpbnQgaWQ7Cit4 X2JpdG1hcF93aWR0aCAoRlJBTUVfUFRSIGYsIGludCBpZCkKIHsKICAgcmV0dXJuIEZSQU1FX1hf RElTUExBWV9JTkZPIChmKS0+Yml0bWFwc1tpZCAtIDFdLndpZHRoOwogfQogCiAjaWYgZGVmaW5l ZCAoSEFWRV9YX1dJTkRPV1MpIHx8IGRlZmluZWQgKEhBVkVfTlRHVUkpCiBpbnQKLXhfYml0bWFw X3BpeG1hcCAoZiwgaWQpCi0gICAgIEZSQU1FX1BUUiBmOwotICAgICBpbnQgaWQ7Cit4X2JpdG1h cF9waXhtYXAgKEZSQU1FX1BUUiBmLCBpbnQgaWQpCiB7CiAgIHJldHVybiAoaW50KSBGUkFNRV9Y X0RJU1BMQVlfSU5GTyAoZiktPmJpdG1hcHNbaWQgLSAxXS5waXhtYXA7CiB9CkBAIC0yMDgsOSAr MjAyLDcgQEAKIAogI2lmZGVmIEhBVkVfWF9XSU5ET1dTCiBpbnQKLXhfYml0bWFwX21hc2sgKGYs IGlkKQotICAgICBGUkFNRV9QVFIgZjsKLSAgICAgaW50IGlkOworeF9iaXRtYXBfbWFzayAoRlJB TUVfUFRSIGYsIGludCBpZCkKIHsKICAgcmV0dXJuIEZSQU1FX1hfRElTUExBWV9JTkZPIChmKS0+ Yml0bWFwc1tpZCAtIDFdLm1hc2s7CiB9CkBAIC0yMTksOCArMjExLDcgQEAKIC8qIEFsbG9jYXRl IGEgbmV3IGJpdG1hcCByZWNvcmQuICBSZXR1cm5zIGluZGV4IG9mIG5ldyByZWNvcmQuICAqLwog CiBzdGF0aWMgaW50Ci14X2FsbG9jYXRlX2JpdG1hcF9yZWNvcmQgKGYpCi0gICAgIEZSQU1FX1BU UiBmOworeF9hbGxvY2F0ZV9iaXRtYXBfcmVjb3JkIChGUkFNRV9QVFIgZikKIHsKICAgRGlzcGxh eV9JbmZvICpkcHlpbmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwogICBpbnQgaTsKQEAg LTI1MSw5ICsyNDIsNyBAQAogLyogQWRkIG9uZSByZWZlcmVuY2UgdG8gdGhlIHJlZmVyZW5jZSBj b3VudCBvZiB0aGUgYml0bWFwIHdpdGggaWQgSUQuICAqLwogCiB2b2lkCi14X3JlZmVyZW5jZV9i aXRtYXAgKGYsIGlkKQotICAgICBGUkFNRV9QVFIgZjsKLSAgICAgaW50IGlkOworeF9yZWZlcmVu Y2VfYml0bWFwIChGUkFNRV9QVFIgZiwgaW50IGlkKQogewogICArK0ZSQU1FX1hfRElTUExBWV9J TkZPIChmKS0+Yml0bWFwc1tpZCAtIDFdLnJlZmNvdW50OwogfQpAQCAtMjYxLDEwICsyNTAsNyBA QAogLyogQ3JlYXRlIGEgYml0bWFwIGZvciBmcmFtZSBGIGZyb20gYSBIRUlHSFQgeCBXSURUSCBh cnJheSBvZiBiaXRzIGF0IEJJVFMuICAqLwogCiBpbnQKLXhfY3JlYXRlX2JpdG1hcF9mcm9tX2Rh dGEgKGYsIGJpdHMsIHdpZHRoLCBoZWlnaHQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAg Y2hhciAqYml0czsKLSAgICAgdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Cit4X2NyZWF0ZV9i aXRtYXBfZnJvbV9kYXRhIChzdHJ1Y3QgZnJhbWUgKmYsIGNoYXIgKmJpdHMsIHVuc2lnbmVkIGlu dCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCkKIHsKICAgRGlzcGxheV9JbmZvICpkcHlpbmZv ID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwogICBpbnQgaWQ7CkBAIC0zMjMsOSArMzA5LDcg QEAKIC8qIENyZWF0ZSBiaXRtYXAgZnJvbSBmaWxlIEZJTEUgZm9yIGZyYW1lIEYuICAqLwogCiBp bnQKLXhfY3JlYXRlX2JpdG1hcF9mcm9tX2ZpbGUgKGYsIGZpbGUpCi0gICAgIHN0cnVjdCBmcmFt ZSAqZjsKLSAgICAgTGlzcF9PYmplY3QgZmlsZTsKK3hfY3JlYXRlX2JpdG1hcF9mcm9tX2ZpbGUg KHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgZmlsZSkKIHsKICAgRGlzcGxheV9JbmZvICpk cHlpbmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwogCkBAIC00MDIsOSArMzg2LDcgQEAK IC8qIEZyZWUgYml0bWFwIEIuICAqLwogCiBzdGF0aWMgdm9pZAotZnJlZV9iaXRtYXBfcmVjb3Jk IChkcHlpbmZvLCBibSkKLSAgICAgRGlzcGxheV9JbmZvICpkcHlpbmZvOwotICAgICBCaXRtYXBf UmVjb3JkICpibTsKK2ZyZWVfYml0bWFwX3JlY29yZCAoRGlzcGxheV9JbmZvICpkcHlpbmZvLCBC aXRtYXBfUmVjb3JkICpibSkKIHsKICNpZmRlZiBIQVZFX1hfV0lORE9XUwogICBYRnJlZVBpeG1h cCAoZHB5aW5mby0+ZGlzcGxheSwgYm0tPnBpeG1hcCk7CkBAIC00MzAsOSArNDEyLDcgQEAKIC8q IFJlbW92ZSByZWZlcmVuY2UgdG8gYml0bWFwIHdpdGggaWQgbnVtYmVyIElELiAgKi8KIAogdm9p ZAoteF9kZXN0cm95X2JpdG1hcCAoZiwgaWQpCi0gICAgIEZSQU1FX1BUUiBmOwotICAgICBpbnQg aWQ7Cit4X2Rlc3Ryb3lfYml0bWFwIChGUkFNRV9QVFIgZiwgaW50IGlkKQogewogICBEaXNwbGF5 X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BMQVlfSU5GTyAoZik7CiAKQEAgLTQ1Miw4ICs0 MzIsNyBAQAogLyogRnJlZSBhbGwgdGhlIGJpdG1hcHMgZm9yIHRoZSBkaXNwbGF5IHNwZWNpZmll ZCBieSBEUFlJTkZPLiAgKi8KIAogdm9pZAoteF9kZXN0cm95X2FsbF9iaXRtYXBzIChkcHlpbmZv KQotICAgICBEaXNwbGF5X0luZm8gKmRweWluZm87Cit4X2Rlc3Ryb3lfYWxsX2JpdG1hcHMgKERp c3BsYXlfSW5mbyAqZHB5aW5mbykKIHsKICAgaW50IGk7CiAgIEJpdG1hcF9SZWNvcmQgKmJtID0g ZHB5aW5mby0+Yml0bWFwczsKQEAgLTQ4Nyw5ICs0NjYsNyBAQAogICAgSXQncyBuaWNlciB3aXRo IHNvbWUgYm9yZGVycyBpbiB0aGlzIGNvbnRleHQgKi8KIAogaW50Ci14X2NyZWF0ZV9iaXRtYXBf bWFzayAoZiwgaWQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IGlkOworeF9jcmVh dGVfYml0bWFwX21hc2sgKHN0cnVjdCBmcmFtZSAqZiwgaW50IGlkKQogewogICBQaXhtYXAgcGl4 bWFwLCBtYXNrOwogICBYSW1hZ2VQdHIgeGltZywgbWFza19pbWc7CkBAIC02MzcsOSArNjE0LDcg QEAKICAgIGltYWdlX3R5cGVzIGFuZCBjYWNoZXMgdGhlIGxvYWRpbmcgc3RhdHVzIG9mIFRZUEUu ICAqLwogCiBzdGF0aWMgTGlzcF9PYmplY3QKLWRlZmluZV9pbWFnZV90eXBlICh0eXBlLCBsb2Fk ZWQpCi0gICAgIHN0cnVjdCBpbWFnZV90eXBlICp0eXBlOwotICAgICBpbnQgbG9hZGVkOworZGVm aW5lX2ltYWdlX3R5cGUgKHN0cnVjdCBpbWFnZV90eXBlICp0eXBlLCBpbnQgbG9hZGVkKQogewog ICBMaXNwX09iamVjdCBzdWNjZXNzOwogCkBAIC02NjUsOCArNjQwLDcgQEAKICAgIHN0cnVjdHVy ZS4gIFZhbHVlIGlzIG51bGwgaWYgU1lNQk9MIGlzIG5vdCBhIGtub3duIGltYWdlIHR5cGUuICAq LwogCiBzdGF0aWMgSU5MSU5FIHN0cnVjdCBpbWFnZV90eXBlICoKLWxvb2t1cF9pbWFnZV90eXBl IChzeW1ib2wpCi0gICAgIExpc3BfT2JqZWN0IHN5bWJvbDsKK2xvb2t1cF9pbWFnZV90eXBlIChM aXNwX09iamVjdCBzeW1ib2wpCiB7CiAgIHN0cnVjdCBpbWFnZV90eXBlICp0eXBlOwogCkBAIC02 OTAsOCArNjY0LDcgQEAKICAgIGltYWdlIHR5cGUuICAqLwogCiBpbnQKLXZhbGlkX2ltYWdlX3Ag KG9iamVjdCkKLSAgICAgTGlzcF9PYmplY3Qgb2JqZWN0OwordmFsaWRfaW1hZ2VfcCAoTGlzcF9P YmplY3Qgb2JqZWN0KQogewogICBpbnQgdmFsaWRfcCA9IDA7CiAKQEAgLTcyNiw5ICs2OTksNyBA QAogICAgdGhlcmVmb3JlIHNpbXBseSBkaXNwbGF5cyBhIG1lc3NhZ2UuICAqLwogCiBzdGF0aWMg dm9pZAotaW1hZ2VfZXJyb3IgKGZvcm1hdCwgYXJnMSwgYXJnMikKLSAgICAgY2hhciAqZm9ybWF0 OwotICAgICBMaXNwX09iamVjdCBhcmcxLCBhcmcyOworaW1hZ2VfZXJyb3IgKGNoYXIgKmZvcm1h dCwgTGlzcF9PYmplY3QgYXJnMSwgTGlzcF9PYmplY3QgYXJnMikKIHsKICAgYWRkX3RvX2xvZyAo Zm9ybWF0LCBhcmcxLCBhcmcyKTsKIH0KQEAgLTc4OCwxMSArNzU5LDcgQEAKICAgIGFsbG93ZWQg a2V5d29yZC92YWx1ZSBwYWlycy4gIFZhbHVlIGlzIG5vbi16ZXJvIGlmIFNQRUMgaXMgdmFsaWQu ICAqLwogCiBzdGF0aWMgaW50Ci1wYXJzZV9pbWFnZV9zcGVjIChzcGVjLCBrZXl3b3Jkcywgbmtl eXdvcmRzLCB0eXBlKQotICAgICBMaXNwX09iamVjdCBzcGVjOwotICAgICBzdHJ1Y3QgaW1hZ2Vf a2V5d29yZCAqa2V5d29yZHM7Ci0gICAgIGludCBua2V5d29yZHM7Ci0gICAgIExpc3BfT2JqZWN0 IHR5cGU7CitwYXJzZV9pbWFnZV9zcGVjIChMaXNwX09iamVjdCBzcGVjLCBzdHJ1Y3QgaW1hZ2Vf a2V5d29yZCAqa2V5d29yZHMsIGludCBua2V5d29yZHMsIExpc3BfT2JqZWN0IHR5cGUpCiB7CiAg IGludCBpOwogICBMaXNwX09iamVjdCBwbGlzdDsKQEAgLTkyOCw5ICs4OTUsNyBAQAogICAgdG8g MSBpZiBLRVkgd2FzIGZvdW5kIGluIFNQRUMsIHNldCBpdCB0byAwIG90aGVyd2lzZS4gICovCiAK IHN0YXRpYyBMaXNwX09iamVjdAotaW1hZ2Vfc3BlY192YWx1ZSAoc3BlYywga2V5LCBmb3VuZCkK LSAgICAgTGlzcF9PYmplY3Qgc3BlYywga2V5OwotICAgICBpbnQgKmZvdW5kOworaW1hZ2Vfc3Bl Y192YWx1ZSAoTGlzcF9PYmplY3Qgc3BlYywgTGlzcF9PYmplY3Qga2V5LCBpbnQgKmZvdW5kKQog ewogICBMaXNwX09iamVjdCB0YWlsOwogCkBAIC0xMDQ4LDkgKzEwMTMsNyBAQAogICAgU1BFQy4g IFNQRUMgaGFzIGEgaGFzaCB2YWx1ZSBvZiBIQVNILiAgKi8KIAogc3RhdGljIHN0cnVjdCBpbWFn ZSAqCi1tYWtlX2ltYWdlIChzcGVjLCBoYXNoKQotICAgICBMaXNwX09iamVjdCBzcGVjOwotICAg ICB1bnNpZ25lZCBoYXNoOworbWFrZV9pbWFnZSAoTGlzcF9PYmplY3Qgc3BlYywgdW5zaWduZWQg aW50IGhhc2gpCiB7CiAgIHN0cnVjdCBpbWFnZSAqaW1nID0gKHN0cnVjdCBpbWFnZSAqKSB4bWFs bG9jIChzaXplb2YgKmltZyk7CiAgIExpc3BfT2JqZWN0IGZpbGUgPSBpbWFnZV9zcGVjX3ZhbHVl IChzcGVjLCBRQ2ZpbGUsIE5VTEwpOwpAQCAtMTA3Miw5ICsxMDM1LDcgQEAKIC8qIEZyZWUgaW1h Z2UgSU1HIHdoaWNoIHdhcyB1c2VkIG9uIGZyYW1lIEYsIGluY2x1ZGluZyBpdHMgcmVzb3VyY2Vz LiAgKi8KIAogc3RhdGljIHZvaWQKLWZyZWVfaW1hZ2UgKGYsIGltZykKLSAgICAgc3RydWN0IGZy YW1lICpmOwotICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKK2ZyZWVfaW1hZ2UgKHN0cnVjdCBmcmFt ZSAqZiwgc3RydWN0IGltYWdlICppbWcpCiB7CiAgIGlmIChpbWcpCiAgICAgewpAQCAtMTEwMSwx MCArMTA2Miw3IEBACiAgICBvdGhlcndpc2UsIHJldHVybiAwLiAqLwogCiBpbnQKLWNoZWNrX2lt YWdlX3NpemUgKGYsIHdpZHRoLCBoZWlnaHQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAg aW50IHdpZHRoOwotICAgICBpbnQgaGVpZ2h0OworY2hlY2tfaW1hZ2Vfc2l6ZSAoc3RydWN0IGZy YW1lICpmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgIGludCB3LCBoOwogCkBAIC0xMTM1 LDkgKzEwOTMsNyBAQAogICAgZHJhd2luZyBhbiBpbWFnZS4gICovCiAKIHZvaWQKLXByZXBhcmVf aW1hZ2VfZm9yX2Rpc3BsYXkgKGYsIGltZykKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBz dHJ1Y3QgaW1hZ2UgKmltZzsKK3ByZXBhcmVfaW1hZ2VfZm9yX2Rpc3BsYXkgKHN0cnVjdCBmcmFt ZSAqZiwgc3RydWN0IGltYWdlICppbWcpCiB7CiAgIEVNQUNTX1RJTUUgdDsKIApAQCAtMTE1Nywx MCArMTExMyw3IEBACiAgICBkcmF3biBpbiBmYWNlIEZBQ0UuICAqLwogCiBpbnQKLWltYWdlX2Fz Y2VudCAoaW1nLCBmYWNlLCBzbGljZSkKLSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0gICAgIHN0 cnVjdCBmYWNlICpmYWNlOwotICAgICBzdHJ1Y3QgZ2x5cGhfc2xpY2UgKnNsaWNlOworaW1hZ2Vf YXNjZW50IChzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IGZhY2UgKmZhY2UsIHN0cnVjdCBnbHlw aF9zbGljZSAqc2xpY2UpCiB7CiAgIGludCBoZWlnaHQ7CiAgIGludCBhc2NlbnQ7CkBAIC0xMjA2 LDEwICsxMTU5LDcgQEAKICAgIE9uIFczMiwgWElNRyBpcyBhc3N1bWVkIHRvIGEgZGV2aWNlIGNv bnRleHQgd2l0aCB0aGUgYml0bWFwIHNlbGVjdGVkLiAgKi8KIAogc3RhdGljIFJHQl9QSVhFTF9D T0xPUgotZm91cl9jb3JuZXJzX2Jlc3QgKHhpbWcsIGNvcm5lcnMsIHdpZHRoLCBoZWlnaHQpCi0g ICAgIFhJbWFnZVB0cl9vcl9EQyB4aW1nOwotICAgICBpbnQgKmNvcm5lcnM7Ci0gICAgIHVuc2ln bmVkIGxvbmcgd2lkdGgsIGhlaWdodDsKK2ZvdXJfY29ybmVyc19iZXN0IChYSW1hZ2VQdHJfb3Jf REMgeGltZywgaW50ICpjb3JuZXJzLCBsb25nIHVuc2lnbmVkIGludCB3aWR0aCwgbG9uZyB1bnNp Z25lZCBpbnQgaGVpZ2h0KQogewogICBSR0JfUElYRUxfQ09MT1IgY29ybmVyX3BpeGVsc1s0XSwg YmVzdDsKICAgaW50IGksIGJlc3RfY291bnQ7CkBAIC0xMjgxLDEwICsxMjMxLDcgQEAKICAgIHVz ZSBmb3IgdGhlIGhldXJpc3RpYy4gICovCiAKIFJHQl9QSVhFTF9DT0xPUgotaW1hZ2VfYmFja2dy b3VuZCAoaW1nLCBmLCB4aW1nKQotICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKLSAgICAgc3RydWN0 IGZyYW1lICpmOwotICAgICBYSW1hZ2VQdHJfb3JfREMgeGltZzsKK2ltYWdlX2JhY2tncm91bmQg KHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgZnJhbWUgKmYsIFhJbWFnZVB0cl9vcl9EQyB4aW1n KQogewogICBpZiAoISBpbWctPmJhY2tncm91bmRfdmFsaWQpCiAgICAgLyogSU1HIGRvZXNuJ3Qg aGF2ZSBhIGJhY2tncm91bmQgeWV0LCB0cnkgdG8gZ3Vlc3MgYSByZWFzb25hYmxlIHZhbHVlLiAg Ki8KQEAgLTEzMjMsMTAgKzEyNzAsNyBAQAogICAgZXhpc3RpbmcgWEltYWdlIG9iamVjdCB0byB1 c2UgZm9yIHRoZSBoZXVyaXN0aWMuICAqLwogCiBpbnQKLWltYWdlX2JhY2tncm91bmRfdHJhbnNw YXJlbnQgKGltZywgZiwgbWFzaykKLSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0gICAgIHN0cnVj dCBmcmFtZSAqZjsKLSAgICAgWEltYWdlUHRyX29yX0RDIG1hc2s7CitpbWFnZV9iYWNrZ3JvdW5k X3RyYW5zcGFyZW50IChzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IGZyYW1lICpmLCBYSW1hZ2VQ dHJfb3JfREMgbWFzaykKIHsKICAgaWYgKCEgaW1nLT5iYWNrZ3JvdW5kX3RyYW5zcGFyZW50X3Zh bGlkKQogICAgIC8qIElNRyBkb2Vzbid0IGhhdmUgYSBiYWNrZ3JvdW5kIHlldCwgdHJ5IHRvIGd1 ZXNzIGEgcmVhc29uYWJsZSB2YWx1ZS4gICovCkBAIC0xMzg2LDEwICsxMzMwLDcgQEAKICAgIHRo ZSBpbWFnZSwgaWYgYW55LiAgKi8KIAogc3RhdGljIHZvaWQKLXhfY2xlYXJfaW1hZ2VfMSAoZiwg aW1nLCBwaXhtYXBfcCwgbWFza19wLCBjb2xvcnNfcCkKLSAgICAgc3RydWN0IGZyYW1lICpmOwot ICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKLSAgICAgaW50IHBpeG1hcF9wLCBtYXNrX3AsIGNvbG9y c19wOworeF9jbGVhcl9pbWFnZV8xIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVjdCBpbWFnZSAqaW1n LCBpbnQgcGl4bWFwX3AsIGludCBtYXNrX3AsIGludCBjb2xvcnNfcCkKIHsKICAgaWYgKHBpeG1h cF9wICYmIGltZy0+cGl4bWFwKQogICAgIHsKQEAgLTE0MjIsOSArMTM2Myw3IEBACiAvKiBGcmVl IFggcmVzb3VyY2VzIG9mIGltYWdlIElNRyB3aGljaCBpcyB1c2VkIG9uIGZyYW1lIEYuICAqLwog CiBzdGF0aWMgdm9pZAoteF9jbGVhcl9pbWFnZSAoZiwgaW1nKQotICAgICBzdHJ1Y3QgZnJhbWUg KmY7Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOworeF9jbGVhcl9pbWFnZSAoc3RydWN0IGZyYW1l ICpmLCBzdHJ1Y3QgaW1hZ2UgKmltZykKIHsKICAgQkxPQ0tfSU5QVVQ7CiAgIHhfY2xlYXJfaW1h Z2VfMSAoZiwgaW1nLCAxLCAxLCAxKTsKQEAgLTE0MzgsMTEgKzEzNzcsNyBAQAogICAgY29sb3Iu ICAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwoteF9hbGxvY19pbWFnZV9jb2xvciAoZiwgaW1n LCBjb2xvcl9uYW1lLCBkZmx0KQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0cnVjdCBp bWFnZSAqaW1nOwotICAgICBMaXNwX09iamVjdCBjb2xvcl9uYW1lOwotICAgICB1bnNpZ25lZCBs b25nIGRmbHQ7Cit4X2FsbG9jX2ltYWdlX2NvbG9yIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVjdCBp bWFnZSAqaW1nLCBMaXNwX09iamVjdCBjb2xvcl9uYW1lLCBsb25nIHVuc2lnbmVkIGludCBkZmx0 KQogewogICBYQ29sb3IgY29sb3I7CiAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0OwpAQCAtMTQ4MCw3 ICsxNDE1LDcgQEAKICAgIGhlYXAuICBDYWxsIGZyZWVfaW1hZ2VfY2FjaGUgdG8gZnJlZSBhbiBp bWFnZSBjYWNoZS4gICovCiAKIHN0cnVjdCBpbWFnZV9jYWNoZSAqCi1tYWtlX2ltYWdlX2NhY2hl ICgpCittYWtlX2ltYWdlX2NhY2hlICh2b2lkKQogewogICBzdHJ1Y3QgaW1hZ2VfY2FjaGUgKmMg PSAoc3RydWN0IGltYWdlX2NhY2hlICopIHhtYWxsb2MgKHNpemVvZiAqYyk7CiAgIGludCBzaXpl OwpAQCAtMTQ5OCwxMCArMTQzMyw3IEBACiAvKiBGaW5kIGFuIGltYWdlIG1hdGNoaW5nIFNQRUMg aW4gdGhlIGNhY2hlLCBhbmQgcmV0dXJuIGl0LiAgSWYgbm8KICAgIGltYWdlIGlzIGZvdW5kLCBy ZXR1cm4gTlVMTC4gICovCiBzdGF0aWMgc3RydWN0IGltYWdlICoKLXNlYXJjaF9pbWFnZV9jYWNo ZSAoZiwgc3BlYywgaGFzaCkKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBMaXNwX09iamVj dCBzcGVjOwotICAgICB1bnNpZ25lZCBoYXNoOworc2VhcmNoX2ltYWdlX2NhY2hlIChzdHJ1Y3Qg ZnJhbWUgKmYsIExpc3BfT2JqZWN0IHNwZWMsIHVuc2lnbmVkIGludCBoYXNoKQogewogICBzdHJ1 Y3QgaW1hZ2UgKmltZzsKICAgc3RydWN0IGltYWdlX2NhY2hlICpjID0gRlJBTUVfSU1BR0VfQ0FD SEUgKGYpOwpAQCAtMTUzNCw5ICsxNDY2LDcgQEAKIC8qIFNlYXJjaCBmcmFtZSBGIGZvciBhbiBp bWFnZSB3aXRoIHNwZWMgU1BFQywgYW5kIGZyZWUgaXQuICAqLwogCiBzdGF0aWMgdm9pZAotdW5j YWNoZV9pbWFnZSAoZiwgc3BlYykKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBMaXNwX09i amVjdCBzcGVjOwordW5jYWNoZV9pbWFnZSAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBz cGVjKQogewogICBzdHJ1Y3QgaW1hZ2UgKmltZyA9IHNlYXJjaF9pbWFnZV9jYWNoZSAoZiwgc3Bl Yywgc3hoYXNoIChzcGVjLCAwKSk7CiAgIGlmIChpbWcpCkBAIC0xNTQ4LDggKzE0NzgsNyBAQAog ICAgY2FjaGVzLiAgKi8KIAogdm9pZAotZnJlZV9pbWFnZV9jYWNoZSAoZikKLSAgICAgc3RydWN0 IGZyYW1lICpmOworZnJlZV9pbWFnZV9jYWNoZSAoc3RydWN0IGZyYW1lICpmKQogewogICBzdHJ1 Y3QgaW1hZ2VfY2FjaGUgKmMgPSBGUkFNRV9JTUFHRV9DQUNIRSAoZik7CiAgIGlmIChjKQpAQCAt MTcyNSw5ICsxNjU0LDcgQEAKICAgIGJ5IHRoZSBpbWFnZSdzIHNwZWNpZmljYXRpb24sICAqLwog CiBzdGF0aWMgdm9pZAotcG9zdHByb2Nlc3NfaW1hZ2UgKGYsIGltZykKLSAgICAgc3RydWN0IGZy YW1lICpmOwotICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKK3Bvc3Rwcm9jZXNzX2ltYWdlIChzdHJ1 Y3QgZnJhbWUgKmYsIHN0cnVjdCBpbWFnZSAqaW1nKQogewogICAvKiBNYW5pcHVsYXRpb24gb2Yg dGhlIGltYWdlJ3MgbWFzay4gICovCiAgIGlmIChpbWctPnBpeG1hcCkKQEAgLTE4MDAsOSArMTcy Nyw3IEBACiAgICBTUEVDIG11c3QgYmUgYSB2YWxpZCBMaXNwIGltYWdlIHNwZWNpZmljYXRpb24g KHNlZSB2YWxpZF9pbWFnZV9wKS4gICovCiAKIGludAotbG9va3VwX2ltYWdlIChmLCBzcGVjKQot ICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIExpc3BfT2JqZWN0IHNwZWM7Citsb29rdXBfaW1h Z2UgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3Qgc3BlYykKIHsKICAgc3RydWN0IGltYWdl X2NhY2hlICpjOwogICBzdHJ1Y3QgaW1hZ2UgKmltZzsKQEAgLTE5MjIsOSArMTg0Nyw3IEBACiAv KiBDYWNoZSBpbWFnZSBJTUcgaW4gdGhlIGltYWdlIGNhY2hlIG9mIGZyYW1lIEYuICAqLwogCiBz dGF0aWMgdm9pZAotY2FjaGVfaW1hZ2UgKGYsIGltZykKLSAgICAgc3RydWN0IGZyYW1lICpmOwot ICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKK2NhY2hlX2ltYWdlIChzdHJ1Y3QgZnJhbWUgKmYsIHN0 cnVjdCBpbWFnZSAqaW1nKQogewogICBzdHJ1Y3QgaW1hZ2VfY2FjaGUgKmMgPSBGUkFNRV9JTUFH RV9DQUNIRSAoZik7CiAgIGludCBpOwpAQCAtMTk2NCw4ICsxODg3LDcgQEAKIC8qIE1hcmsgTGlz cCBvYmplY3RzIGluIGltYWdlIElNRy4gICovCiAKIHN0YXRpYyB2b2lkCi1tYXJrX2ltYWdlIChp bWcpCi0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOworbWFya19pbWFnZSAoc3RydWN0IGltYWdlICpp bWcpCiB7CiAgIG1hcmtfb2JqZWN0IChpbWctPnNwZWMpOwogICBtYXJrX29iamVjdCAoaW1nLT5k ZXBlbmRlbmNpZXMpOwpAQCAtMjA0OSwxMSArMTk3MSw3IEBACiAgICBzaG91bGQgaW5kaWNhdGUg dGhlIGJpdCBkZXB0aCBvZiB0aGUgaW1hZ2UuICAqLwogCiBzdGF0aWMgaW50Ci14X2NyZWF0ZV94 X2ltYWdlX2FuZF9waXhtYXAgKGYsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB4aW1nLCBwaXhtYXAp Ci0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IHdpZHRoLCBoZWlnaHQsIGRlcHRoOwot ICAgICBYSW1hZ2VQdHIgKnhpbWc7Ci0gICAgIFBpeG1hcCAqcGl4bWFwOworeF9jcmVhdGVfeF9p bWFnZV9hbmRfcGl4bWFwIChzdHJ1Y3QgZnJhbWUgKmYsIGludCB3aWR0aCwgaW50IGhlaWdodCwg aW50IGRlcHRoLCBYSW1hZ2VQdHIgKnhpbWcsIFBpeG1hcCAqcGl4bWFwKQogewogI2lmZGVmIEhB VkVfWF9XSU5ET1dTCiAgIERpc3BsYXkgKmRpc3BsYXkgPSBGUkFNRV9YX0RJU1BMQVkgKGYpOwpA QCAtMjE5Miw4ICsyMTEwLDcgQEAKIC8qIERlc3Ryb3kgWEltYWdlIFhJTUcuICBGcmVlIFhJTUct PmRhdGEuICAqLwogCiBzdGF0aWMgdm9pZAoteF9kZXN0cm95X3hfaW1hZ2UgKHhpbWcpCi0gICAg IFhJbWFnZVB0ciB4aW1nOworeF9kZXN0cm95X3hfaW1hZ2UgKFhJbWFnZVB0ciB4aW1nKQogewog ICB4YXNzZXJ0IChpbnRlcnJ1cHRfaW5wdXRfYmxvY2tlZCk7CiAgIGlmICh4aW1nKQpAQCAtMjIx OSwxMSArMjEzNiw3IEBACiAgICBhcmUgd2lkdGggYW5kIGhlaWdodCBvZiBib3RoIHRoZSBpbWFn ZSBhbmQgcGl4bWFwLiAgKi8KIAogc3RhdGljIHZvaWQKLXhfcHV0X3hfaW1hZ2UgKGYsIHhpbWcs IHBpeG1hcCwgd2lkdGgsIGhlaWdodCkKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBYSW1h Z2VQdHIgeGltZzsKLSAgICAgUGl4bWFwIHBpeG1hcDsKLSAgICAgaW50IHdpZHRoLCBoZWlnaHQ7 Cit4X3B1dF94X2ltYWdlIChzdHJ1Y3QgZnJhbWUgKmYsIFhJbWFnZVB0ciB4aW1nLCBQaXhtYXAg cGl4bWFwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAjaWZkZWYgSEFWRV9YX1dJTkRPV1MK ICAgR0MgZ2M7CkBAIC0yMjYxLDggKzIxNzQsNyBAQAogICAgZm91bmQsIG9yIG5pbCBpZiBub3Qg Zm91bmQuICAqLwogCiBMaXNwX09iamVjdAoteF9maW5kX2ltYWdlX2ZpbGUgKGZpbGUpCi0gICAg IExpc3BfT2JqZWN0IGZpbGU7Cit4X2ZpbmRfaW1hZ2VfZmlsZSAoTGlzcF9PYmplY3QgZmlsZSkK IHsKICAgTGlzcF9PYmplY3QgZmlsZV9mb3VuZCwgc2VhcmNoX3BhdGg7CiAgIHN0cnVjdCBnY3By byBnY3BybzEsIGdjcHJvMjsKQEAgLTIyOTcsOSArMjIwOSw3IEBACiAgICBvY2N1cnJlZC4gICpT SVpFIGlzIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gICovCiAKIHN0YXRpYyB1bnNpZ25l ZCBjaGFyICoKLXNsdXJwX2ZpbGUgKGZpbGUsIHNpemUpCi0gICAgIGNoYXIgKmZpbGU7Ci0gICAg IGludCAqc2l6ZTsKK3NsdXJwX2ZpbGUgKGNoYXIgKmZpbGUsIGludCAqc2l6ZSkKIHsKICAgRklM RSAqZnAgPSBOVUxMOwogICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwpAQCAtMjQzNCw4ICsy MzQ0LDcgQEAKICAgIGRpc3BsYXllZCBpcyB1c2VkLiAgKi8KIAogc3RhdGljIGludAoteGJtX2lt YWdlX3AgKG9iamVjdCkKLSAgICAgTGlzcF9PYmplY3Qgb2JqZWN0OworeGJtX2ltYWdlX3AgKExp c3BfT2JqZWN0IG9iamVjdCkKIHsKICAgc3RydWN0IGltYWdlX2tleXdvcmQga3dbWEJNX0xBU1Rd OwogCkBAIC0yNTI4LDEwICsyNDM3LDcgQEAKICAgIHNjYW5uaW5nIGEgbnVtYmVyLCBzdG9yZSBp dHMgdmFsdWUgaW4gKklWQUwuICAqLwogCiBzdGF0aWMgaW50Ci14Ym1fc2NhbiAocywgZW5kLCBz dmFsLCBpdmFsKQotICAgICB1bnNpZ25lZCBjaGFyICoqcywgKmVuZDsKLSAgICAgY2hhciAqc3Zh bDsKLSAgICAgaW50ICppdmFsOworeGJtX3NjYW4gKHVuc2lnbmVkIGNoYXIgKipzLCB1bnNpZ25l ZCBjaGFyICplbmQsIGNoYXIgKnN2YWwsIGludCAqaXZhbCkKIHsKICAgdW5zaWduZWQgaW50IGM7 CiAKQEAgLTI2OTUsMTIgKzI2MDEsOSBAQAogCiAKIHN0YXRpYyB2b2lkCi1DcmVhdGVfUGl4bWFw X0Zyb21fQml0bWFwX0RhdGEgKGYsIGltZywgZGF0YSwgZmcsIGJnLCBub25fZGVmYXVsdF9jb2xv cnMpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0gICAg IGNoYXIgKmRhdGE7Ci0gICAgIFJHQl9QSVhFTF9DT0xPUiBmZywgYmc7Ci0gICAgIGludCBub25f ZGVmYXVsdF9jb2xvcnM7CitDcmVhdGVfUGl4bWFwX0Zyb21fQml0bWFwX0RhdGEgKHN0cnVjdCBm cmFtZSAqZiwgc3RydWN0IGltYWdlICppbWcsIGNoYXIgKmRhdGEsCisJCQkJUkdCX1BJWEVMX0NP TE9SIGZnLCBSR0JfUElYRUxfQ09MT1IgYmcsCisJCQkJaW50IG5vbl9kZWZhdWx0X2NvbG9ycykK IHsKICNpZmRlZiBIQVZFX05UR1VJCiAgIGltZy0+cGl4bWFwCkBAIC0yNzM2LDEyICsyNjM5LDcg QEAKICAgIGludmFsaWQgKHRoZSBiaXRtYXAgcmVtYWlucyB1bnJlYWQpLiAgKi8KIAogc3RhdGlj IGludAoteGJtX3JlYWRfYml0bWFwX2RhdGEgKGYsIGNvbnRlbnRzLCBlbmQsIHdpZHRoLCBoZWln aHQsIGRhdGEsIGluaGliaXRfaW1hZ2VfZXJyb3IpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAg ICAgdW5zaWduZWQgY2hhciAqY29udGVudHMsICplbmQ7Ci0gICAgIGludCAqd2lkdGgsICpoZWln aHQ7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhOwotICAgICBpbnQgaW5oaWJpdF9pbWFnZV9l cnJvcjsKK3hibV9yZWFkX2JpdG1hcF9kYXRhIChzdHJ1Y3QgZnJhbWUgKmYsIHVuc2lnbmVkIGNo YXIgKmNvbnRlbnRzLCB1bnNpZ25lZCBjaGFyICplbmQsIGludCAqd2lkdGgsIGludCAqaGVpZ2h0 LCB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGluaGliaXRfaW1hZ2VfZXJyb3IpCiB7CiAgIHVu c2lnbmVkIGNoYXIgKnMgPSBjb250ZW50czsKICAgY2hhciBidWZmZXJbQlVGU0laXTsKQEAgLTI4 OTAsMTAgKzI3ODgsNyBAQAogICAgc3VjY2Vzc2Z1bC4gICovCiAKIHN0YXRpYyBpbnQKLXhibV9s b2FkX2ltYWdlIChmLCBpbWcsIGNvbnRlbnRzLCBlbmQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsK LSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKmNvbnRlbnRzLCAq ZW5kOworeGJtX2xvYWRfaW1hZ2UgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGltYWdlICppbWcs IHVuc2lnbmVkIGNoYXIgKmNvbnRlbnRzLCB1bnNpZ25lZCBjaGFyICplbmQpCiB7CiAgIGludCBy YzsKICAgdW5zaWduZWQgY2hhciAqZGF0YTsKQEAgLTI5NDksOCArMjg0NCw3IEBACiAvKiBWYWx1 ZSBpcyBub24temVybyBpZiBEQVRBIGxvb2tzIGxpa2UgYW4gaW4tbWVtb3J5IFhCTSBmaWxlLiAg Ki8KIAogc3RhdGljIGludAoteGJtX2ZpbGVfcCAoZGF0YSkKLSAgICAgTGlzcF9PYmplY3QgZGF0 YTsKK3hibV9maWxlX3AgKExpc3BfT2JqZWN0IGRhdGEpCiB7CiAgIGludCB3LCBoOwogICByZXR1 cm4gKFNUUklOR1AgKGRhdGEpCkBAIC0yOTY0LDkgKzI4NTgsNyBAQAogICAgbm9uLXplcm8gaWYg c3VjY2Vzc2Z1bC4gICovCiAKIHN0YXRpYyBpbnQKLXhibV9sb2FkIChmLCBpbWcpCi0gICAgIHN0 cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Cit4Ym1fbG9hZCAoc3RydWN0 IGZyYW1lICpmLCBzdHJ1Y3QgaW1hZ2UgKmltZykKIHsKICAgaW50IHN1Y2Nlc3NfcCA9IDA7CiAg IExpc3BfT2JqZWN0IGZpbGVfbmFtZTsKQEAgLTMyNDAsOSArMzEzMiw3IEBACiAvKiBJbml0aWFs aXplIHRoZSBjb2xvciBjYWNoZS4gICovCiAKIHN0YXRpYyB2b2lkCi14cG1faW5pdF9jb2xvcl9j YWNoZSAoZiwgYXR0cnMpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgWHBtQXR0cmlidXRl cyAqYXR0cnM7Cit4cG1faW5pdF9jb2xvcl9jYWNoZSAoc3RydWN0IGZyYW1lICpmLCBYcG1BdHRy aWJ1dGVzICphdHRycykKIHsKICAgc2l6ZV90IG5ieXRlcyA9IFhQTV9DT0xPUl9DQUNIRV9CVUNL RVRTICogc2l6ZW9mICp4cG1fY29sb3JfY2FjaGU7CiAgIHhwbV9jb2xvcl9jYWNoZSA9IChzdHJ1 Y3QgeHBtX2NhY2hlZF9jb2xvciAqKikgeG1hbGxvYyAobmJ5dGVzKTsKQEAgLTMyNjgsNyArMzE1 OCw3IEBACiAvKiBGcmVlIHRoZSBjb2xvciBjYWNoZS4gICovCiAKIHN0YXRpYyB2b2lkCi14cG1f ZnJlZV9jb2xvcl9jYWNoZSAoKQoreHBtX2ZyZWVfY29sb3JfY2FjaGUgKHZvaWQpCiB7CiAgIHN0 cnVjdCB4cG1fY2FjaGVkX2NvbG9yICpwLCAqbmV4dDsKICAgaW50IGk7CkBAIC0zMjg5LDggKzMx NzksNyBAQAogICAgY2FjaGUuICAqLwogCiBzdGF0aWMgaW50Ci14cG1fY29sb3JfYnVja2V0IChj b2xvcl9uYW1lKQotICAgICBjaGFyICpjb2xvcl9uYW1lOworeHBtX2NvbG9yX2J1Y2tldCAoY2hh ciAqY29sb3JfbmFtZSkKIHsKICAgdW5zaWduZWQgaCA9IDA7CiAgIGNoYXIgKnM7CkBAIC0zMzA2 LDExICszMTk1LDcgQEAKICAgIGVudHJ5IGFkZGVkLiAgKi8KIAogc3RhdGljIHN0cnVjdCB4cG1f Y2FjaGVkX2NvbG9yICoKLXhwbV9jYWNoZV9jb2xvciAoZiwgY29sb3JfbmFtZSwgY29sb3IsIGJ1 Y2tldCkKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBjaGFyICpjb2xvcl9uYW1lOwotICAg ICBYQ29sb3IgKmNvbG9yOwotICAgICBpbnQgYnVja2V0OworeHBtX2NhY2hlX2NvbG9yIChzdHJ1 Y3QgZnJhbWUgKmYsIGNoYXIgKmNvbG9yX25hbWUsIFhDb2xvciAqY29sb3IsIGludCBidWNrZXQp CiB7CiAgIHNpemVfdCBuYnl0ZXM7CiAgIHN0cnVjdCB4cG1fY2FjaGVkX2NvbG9yICpwOwpAQCAt MzMzMywxMCArMzIxOCw3IEBACiAgICBhbGxvY2F0aW9uIGZhaWxlZC4gICovCiAKIHN0YXRpYyBp bnQKLXhwbV9sb29rdXBfY29sb3IgKGYsIGNvbG9yX25hbWUsIGNvbG9yKQotICAgICBzdHJ1Y3Qg ZnJhbWUgKmY7Ci0gICAgIGNoYXIgKmNvbG9yX25hbWU7Ci0gICAgIFhDb2xvciAqY29sb3I7Cit4 cG1fbG9va3VwX2NvbG9yIChzdHJ1Y3QgZnJhbWUgKmYsIGNoYXIgKmNvbG9yX25hbWUsIFhDb2xv ciAqY29sb3IpCiB7CiAgIHN0cnVjdCB4cG1fY2FjaGVkX2NvbG9yICpwOwogICBpbnQgaCA9IHhw bV9jb2xvcl9idWNrZXQgKGNvbG9yX25hbWUpOwpAQCAtMzM3MywxMiArMzI1NSw3IEBACiAgICBp ZiBzdWNjZXNzZnVsLiAgKi8KIAogc3RhdGljIGludAoteHBtX2FsbG9jX2NvbG9yIChkcHksIGNt YXAsIGNvbG9yX25hbWUsIGNvbG9yLCBjbG9zdXJlKQotICAgICBEaXNwbGF5ICpkcHk7Ci0gICAg IENvbG9ybWFwIGNtYXA7Ci0gICAgIGNoYXIgKmNvbG9yX25hbWU7Ci0gICAgIFhDb2xvciAqY29s b3I7Ci0gICAgIHZvaWQgKmNsb3N1cmU7Cit4cG1fYWxsb2NfY29sb3IgKERpc3BsYXkgKmRweSwg Q29sb3JtYXAgY21hcCwgY2hhciAqY29sb3JfbmFtZSwgWENvbG9yICpjb2xvciwgdm9pZCAqY2xv c3VyZSkKIHsKICAgcmV0dXJuIHhwbV9sb29rdXBfY29sb3IgKChzdHJ1Y3QgZnJhbWUgKikgY2xv c3VyZSwgY29sb3JfbmFtZSwgY29sb3IpOwogfQpAQCAtMzM4OSwxMiArMzI2Niw3IEBACiAgICBu b24temVybyBpZiBzdWNjZXNzZnVsLiAgKi8KIAogc3RhdGljIGludAoteHBtX2ZyZWVfY29sb3Jz IChkcHksIGNtYXAsIHBpeGVscywgbnBpeGVscywgY2xvc3VyZSkKLSAgICAgRGlzcGxheSAqZHB5 OwotICAgICBDb2xvcm1hcCBjbWFwOwotICAgICBQaXhlbCAqcGl4ZWxzOwotICAgICBpbnQgbnBp eGVsczsKLSAgICAgdm9pZCAqY2xvc3VyZTsKK3hwbV9mcmVlX2NvbG9ycyAoRGlzcGxheSAqZHB5 LCBDb2xvcm1hcCBjbWFwLCBQaXhlbCAqcGl4ZWxzLCBpbnQgbnBpeGVscywgdm9pZCAqY2xvc3Vy ZSkKIHsKICAgcmV0dXJuIDE7CiB9CkBAIC0zNDM0LDggKzMzMDYsNyBAQAogICAgY2RyIGFyZSBz dHJpbmdzLiAgKi8KIAogc3RhdGljIGludAoteHBtX3ZhbGlkX2NvbG9yX3N5bWJvbHNfcCAoY29s b3Jfc3ltYm9scykKLSAgICAgTGlzcF9PYmplY3QgY29sb3Jfc3ltYm9sczsKK3hwbV92YWxpZF9j b2xvcl9zeW1ib2xzX3AgKExpc3BfT2JqZWN0IGNvbG9yX3N5bWJvbHMpCiB7CiAgIHdoaWxlIChD T05TUCAoY29sb3Jfc3ltYm9scykpCiAgICAgewpAQCAtMzQ1NCw4ICszMzI1LDcgQEAKIC8qIFZh bHVlIGlzIG5vbi16ZXJvIGlmIE9CSkVDVCBpcyBhIHZhbGlkIFhQTSBpbWFnZSBzcGVjaWZpY2F0 aW9uLiAgKi8KIAogc3RhdGljIGludAoteHBtX2ltYWdlX3AgKG9iamVjdCkKLSAgICAgTGlzcF9P YmplY3Qgb2JqZWN0OworeHBtX2ltYWdlX3AgKExpc3BfT2JqZWN0IG9iamVjdCkKIHsKICAgc3Ry dWN0IGltYWdlX2tleXdvcmQgZm10W1hQTV9MQVNUXTsKICAgYmNvcHkgKHhwbV9mb3JtYXQsIGZt dCwgc2l6ZW9mIGZtdCk7CkBAIC0zNDcyLDkgKzMzNDIsNyBAQAogCiAjaWYgZGVmaW5lZCAoSEFW RV9YUE0pICYmIGRlZmluZWQgKEhBVkVfWF9XSU5ET1dTKQogaW50Ci14X2NyZWF0ZV9iaXRtYXBf ZnJvbV94cG1fZGF0YSAoZiwgYml0cykKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBjaGFy ICoqYml0czsKK3hfY3JlYXRlX2JpdG1hcF9mcm9tX3hwbV9kYXRhIChzdHJ1Y3QgZnJhbWUgKmYs IGNoYXIgKipiaXRzKQogewogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BM QVlfSU5GTyAoZik7CiAgIGludCBpZCwgcmM7CkBAIC0zNTE3LDkgKzMzODUsNyBAQAogI2lmZGVm IEhBVkVfWFBNCiAKIHN0YXRpYyBpbnQKLXhwbV9sb2FkIChmLCBpbWcpCi0gICAgIHN0cnVjdCBm cmFtZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Cit4cG1fbG9hZCAoc3RydWN0IGZyYW1l ICpmLCBzdHJ1Y3QgaW1hZ2UgKmltZykKIHsKICAgaW50IHJjOwogICBYcG1BdHRyaWJ1dGVzIGF0 dHJzOwpAQCAtNDI3Myw3ICs0MTM5LDcgQEAKIC8qIEluaXRpYWxpemUgdGhlIGNvbG9yIHRhYmxl LiAgKi8KIAogc3RhdGljIHZvaWQKLWluaXRfY29sb3JfdGFibGUgKCkKK2luaXRfY29sb3JfdGFi bGUgKHZvaWQpCiB7CiAgIGludCBzaXplID0gQ1RfU0laRSAqIHNpemVvZiAoKmN0X3RhYmxlKTsK ICAgY3RfdGFibGUgPSAoc3RydWN0IGN0X2NvbG9yICoqKSB4bWFsbG9jIChzaXplKTsKQEAgLTQy ODUsNyArNDE1MSw3IEBACiAvKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbG9y IHRhYmxlLiAgKi8KIAogc3RhdGljIHZvaWQKLWZyZWVfY29sb3JfdGFibGUgKCkKK2ZyZWVfY29s b3JfdGFibGUgKHZvaWQpCiB7CiAgIGludCBpOwogICBzdHJ1Y3QgY3RfY29sb3IgKnAsICpuZXh0 OwpAQCAtNDMwOCw5ICs0MTc0LDcgQEAKICAgIEcsIEIsIGFuZCBtYWtlIGFuIGVudHJ5IGluIHRo ZSBjb2xvciB0YWJsZS4gICovCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1sb29rdXBfcmdiX2Nv bG9yIChmLCByLCBnLCBiKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIGludCByLCBnLCBi OworbG9va3VwX3JnYl9jb2xvciAoc3RydWN0IGZyYW1lICpmLCBpbnQgciwgaW50IGcsIGludCBi KQogewogICB1bnNpZ25lZCBoYXNoID0gQ1RfSEFTSF9SR0IgKHIsIGcsIGIpOwogICBpbnQgaSA9 IGhhc2ggJSBDVF9TSVpFOwpAQCAtNDQwNSw5ICs0MjY5LDcgQEAKICAgIHRhYmxlLiAgSWYgbm90 IGFscmVhZHkgcHJlc2VudCwgYWxsb2NhdGUgaXQuICBWYWx1ZSBpcyBQSVhFTC4gICovCiAKIHN0 YXRpYyB1bnNpZ25lZCBsb25nCi1sb29rdXBfcGl4ZWxfY29sb3IgKGYsIHBpeGVsKQotICAgICBz dHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHVuc2lnbmVkIGxvbmcgcGl4ZWw7Citsb29rdXBfcGl4ZWxf Y29sb3IgKHN0cnVjdCBmcmFtZSAqZiwgbG9uZyB1bnNpZ25lZCBpbnQgcGl4ZWwpCiB7CiAgIGlu dCBpID0gcGl4ZWwgJSBDVF9TSVpFOwogICBzdHJ1Y3QgY3RfY29sb3IgKnA7CkBAIC00NDU5LDgg KzQzMjEsNyBAQAogICAgYWxsb2NhdGVkIHZpYSB4bWFsbG9jLiAgU2V0ICpOIHRvIHRoZSBudW1i ZXIgb2YgY29sb3JzLiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgKgotY29sb3JzX2luX2Nv bG9yX3RhYmxlIChuKQotICAgICBpbnQgKm47Citjb2xvcnNfaW5fY29sb3JfdGFibGUgKGludCAq bikKIHsKICAgaW50IGksIGo7CiAgIHN0cnVjdCBjdF9jb2xvciAqcDsKQEAgLTQ1NTgsMTAgKzQ0 MTksNyBAQAogICAgYWxsb2NhdGVkIHdpdGggeG1hbGxvYzsgaXQgbXVzdCBiZSBmcmVlZCBieSB0 aGUgY2FsbGVyLiAgKi8KIAogc3RhdGljIFhDb2xvciAqCi14X3RvX3hjb2xvcnMgKGYsIGltZywg cmdiX3ApCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0g ICAgIGludCByZ2JfcDsKK3hfdG9feGNvbG9ycyAoc3RydWN0IGZyYW1lICpmLCBzdHJ1Y3QgaW1h Z2UgKmltZywgaW50IHJnYl9wKQogewogICBpbnQgeCwgeTsKICAgWENvbG9yICpjb2xvcnMsICpw OwpAQCAtNDY3NCwxMCArNDUzMiw3IEBACiAgICBDT0xPUlMgd2lsbCBiZSBmcmVlZDsgYW4gZXhp c3RpbmcgSU1HLT5waXhtYXAgd2lsbCBiZSBmcmVlZCwgdG9vLiAgKi8KIAogc3RhdGljIHZvaWQK LXhfZnJvbV94Y29sb3JzIChmLCBpbWcsIGNvbG9ycykKLSAgICAgc3RydWN0IGZyYW1lICpmOwot ICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKLSAgICAgWENvbG9yICpjb2xvcnM7Cit4X2Zyb21feGNv bG9ycyAoc3RydWN0IGZyYW1lICpmLCBzdHJ1Y3QgaW1hZ2UgKmltZywgWENvbG9yICpjb2xvcnMp CiB7CiAgIGludCB4LCB5OwogICBYSW1hZ2VQdHIgb2ltZyA9IE5VTEw7CkBAIC00NzE5LDEwICs0 NTc0LDcgQEAKICAgIG91dGdvaW5nIGltYWdlLiAgKi8KIAogc3RhdGljIHZvaWQKLXhfZGV0ZWN0 X2VkZ2VzIChmLCBpbWcsIG1hdHJpeCwgY29sb3JfYWRqdXN0KQotICAgICBzdHJ1Y3QgZnJhbWUg KmY7Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOwotICAgICBpbnQgbWF0cml4WzldLCBjb2xvcl9h ZGp1c3Q7Cit4X2RldGVjdF9lZGdlcyAoc3RydWN0IGZyYW1lICpmLCBzdHJ1Y3QgaW1hZ2UgKmlt ZywgaW50ICptYXRyaXgsIGludCBjb2xvcl9hZGp1c3QpCiB7CiAgIFhDb2xvciAqY29sb3JzID0g eF90b194Y29sb3JzIChmLCBpbWcsIDEpOwogICBYQ29sb3IgKm5ldywgKnA7CkBAIC00Nzg4LDkg KzQ2NDAsNyBAQAogICAgb24gZnJhbWUgRi4gICovCiAKIHN0YXRpYyB2b2lkCi14X2VtYm9zcyAo ZiwgaW1nKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOwor eF9lbWJvc3MgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGltYWdlICppbWcpCiB7CiAgIHhfZGV0 ZWN0X2VkZ2VzIChmLCBpbWcsIGVtYm9zc19tYXRyaXgsIDB4ZmZmZiAvIDIpOwogfQpAQCAtNDgw MSw5ICs0NjUxLDcgQEAKICAgIHRvIGRyYXcgZGlzYWJsZWQgYnV0dG9ucywgZm9yIGV4YW1wbGUu ICAqLwogCiBzdGF0aWMgdm9pZAoteF9sYXBsYWNlIChmLCBpbWcpCi0gICAgIHN0cnVjdCBmcmFt ZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Cit4X2xhcGxhY2UgKHN0cnVjdCBmcmFtZSAq Ziwgc3RydWN0IGltYWdlICppbWcpCiB7CiAgIHhfZGV0ZWN0X2VkZ2VzIChmLCBpbWcsIGxhcGxh Y2VfbWF0cml4LCA0NTAwMCk7CiB9CkBAIC00ODIxLDEwICs0NjY5LDggQEAKICAgIG51bWJlci4g ICovCiAKIHN0YXRpYyB2b2lkCi14X2VkZ2VfZGV0ZWN0aW9uIChmLCBpbWcsIG1hdHJpeCwgY29s b3JfYWRqdXN0KQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1n OwotICAgICBMaXNwX09iamVjdCBtYXRyaXgsIGNvbG9yX2FkanVzdDsKK3hfZWRnZV9kZXRlY3Rp b24gKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGltYWdlICppbWcsIExpc3BfT2JqZWN0IG1hdHJp eCwKKwkJICBMaXNwX09iamVjdCBjb2xvcl9hZGp1c3QpCiB7CiAgIGludCBpID0gMDsKICAgaW50 IHRyYW5zWzldOwpAQCAtNDg1Myw5ICs0Njk5LDcgQEAKIC8qIFRyYW5zZm9ybSBpbWFnZSBJTUcg b24gZnJhbWUgRiBzbyB0aGF0IGl0IGxvb2tzIGRpc2FibGVkLiAgKi8KIAogc3RhdGljIHZvaWQK LXhfZGlzYWJsZV9pbWFnZSAoZiwgaW1nKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0 cnVjdCBpbWFnZSAqaW1nOworeF9kaXNhYmxlX2ltYWdlIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVj dCBpbWFnZSAqaW1nKQogewogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BM QVlfSU5GTyAoZik7CiAjaWZkZWYgSEFWRV9OVEdVSQpAQCAtNDk1NywxMCArNDgwMSw3IEBACiAg ICBoZXVyaXN0aWNhbGx5LiAgVmFsdWUgaXMgbm9uLXplcm8gaWYgc3VjY2Vzc2Z1bC4gKi8KIAog c3RhdGljIGludAoteF9idWlsZF9oZXVyaXN0aWNfbWFzayAoZiwgaW1nLCBob3cpCi0gICAgIHN0 cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7Ci0gICAgIExpc3BfT2JqZWN0 IGhvdzsKK3hfYnVpbGRfaGV1cmlzdGljX21hc2sgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGlt YWdlICppbWcsIExpc3BfT2JqZWN0IGhvdykKIHsKICAgWEltYWdlUHRyX29yX0RDIHhpbWc7CiAj aWZuZGVmIEhBVkVfTlRHVUkKQEAgLTUxNDYsOCArNDk4Nyw3IEBACiAvKiBSZXR1cm4gbm9uLXpl cm8gaWYgT0JKRUNUIGlzIGEgdmFsaWQgUEJNIGltYWdlIHNwZWNpZmljYXRpb24uICAqLwogCiBz dGF0aWMgaW50Ci1wYm1faW1hZ2VfcCAob2JqZWN0KQotICAgICBMaXNwX09iamVjdCBvYmplY3Q7 CitwYm1faW1hZ2VfcCAoTGlzcF9PYmplY3Qgb2JqZWN0KQogewogICBzdHJ1Y3QgaW1hZ2Vfa2V5 d29yZCBmbXRbUEJNX0xBU1RdOwogCkBAIC01MTY2LDggKzUwMDYsNyBAQAogICAgZW5kIG9mIGlu cHV0LiAgKi8KIAogc3RhdGljIGludAotcGJtX3NjYW5fbnVtYmVyIChzLCBlbmQpCi0gICAgIHVu c2lnbmVkIGNoYXIgKipzLCAqZW5kOworcGJtX3NjYW5fbnVtYmVyICh1bnNpZ25lZCBjaGFyICoq cywgdW5zaWduZWQgY2hhciAqZW5kKQogewogICBpbnQgYyA9IDAsIHZhbCA9IC0xOwogCkBAIC01 MjQyLDkgKzUwODEsNyBAQAogLyogTG9hZCBQQk0gaW1hZ2UgSU1HIGZvciB1c2Ugb24gZnJhbWUg Ri4gICovCiAKIHN0YXRpYyBpbnQKLXBibV9sb2FkIChmLCBpbWcpCi0gICAgIHN0cnVjdCBmcmFt ZSAqZjsKLSAgICAgc3RydWN0IGltYWdlICppbWc7CitwYm1fbG9hZCAoc3RydWN0IGZyYW1lICpm LCBzdHJ1Y3QgaW1hZ2UgKmltZykKIHsKICAgaW50IHJhd19wLCB4LCB5OwogICBpbnQgd2lkdGgs IGhlaWdodCwgbWF4X2NvbG9yX2lkeCA9IDA7CkBAIC01NTY2LDggKzU0MDMsNyBAQAogLyogUmV0 dXJuIG5vbi16ZXJvIGlmIE9CSkVDVCBpcyBhIHZhbGlkIFBORyBpbWFnZSBzcGVjaWZpY2F0aW9u LiAgKi8KIAogc3RhdGljIGludAotcG5nX2ltYWdlX3AgKG9iamVjdCkKLSAgICAgTGlzcF9PYmpl Y3Qgb2JqZWN0OworcG5nX2ltYWdlX3AgKExpc3BfT2JqZWN0IG9iamVjdCkKIHsKICAgc3RydWN0 IGltYWdlX2tleXdvcmQgZm10W1BOR19MQVNUXTsKICAgYmNvcHkgKHBuZ19mb3JtYXQsIGZtdCwg c2l6ZW9mIGZtdCk7CkBAIC01NjcxLDkgKzU1MDcsNyBAQAogICAgaXMgaW5pdGlhbGl6ZWQuICAq LwogCiBzdGF0aWMgdm9pZAotbXlfcG5nX2Vycm9yIChwbmdfcHRyLCBtc2cpCi0gICAgIHBuZ19z dHJ1Y3QgKnBuZ19wdHI7Ci0gICAgIGNoYXIgKm1zZzsKK215X3BuZ19lcnJvciAocG5nX3N0cnVj dCAqcG5nX3B0ciwgY29uc3QgY2hhciAqbXNnKQogewogICB4YXNzZXJ0IChwbmdfcHRyICE9IE5V TEwpOwogICBpbWFnZV9lcnJvciAoIlBORyBlcnJvcjogJXMiLCBidWlsZF9zdHJpbmcgKG1zZyks IFFuaWwpOwpAQCAtNTY4Miw5ICs1NTE2LDcgQEAKIAogCiBzdGF0aWMgdm9pZAotbXlfcG5nX3dh cm5pbmcgKHBuZ19wdHIsIG1zZykKLSAgICAgcG5nX3N0cnVjdCAqcG5nX3B0cjsKLSAgICAgY2hh ciAqbXNnOworbXlfcG5nX3dhcm5pbmcgKHBuZ19zdHJ1Y3QgKnBuZ19wdHIsIGNvbnN0IGNoYXIg Km1zZykKIHsKICAgeGFzc2VydCAocG5nX3B0ciAhPSBOVUxMKTsKICAgaW1hZ2VfZXJyb3IgKCJQ Tkcgd2FybmluZzogJXMiLCBidWlsZF9zdHJpbmcgKG1zZyksIFFuaWwpOwpAQCAtNTcwNSwxMCAr NTUzNyw3IEBACiAgICBieXRlcyBmcm9tIHRoZSBpbnB1dCB0byBEQVRBLiAgKi8KIAogc3RhdGlj IHZvaWQKLXBuZ19yZWFkX2Zyb21fbWVtb3J5IChwbmdfcHRyLCBkYXRhLCBsZW5ndGgpCi0gICAg IHBuZ19zdHJ1Y3RwIHBuZ19wdHI7Ci0gICAgIHBuZ19ieXRlcCBkYXRhOwotICAgICBwbmdfc2l6 ZV90IGxlbmd0aDsKK3BuZ19yZWFkX2Zyb21fbWVtb3J5IChwbmdfc3RydWN0cCBwbmdfcHRyLCBw bmdfYnl0ZXAgZGF0YSwgcG5nX3NpemVfdCBsZW5ndGgpCiB7CiAgIHN0cnVjdCBwbmdfbWVtb3J5 X3N0b3JhZ2UgKnRicgogICAgID0gKHN0cnVjdCBwbmdfbWVtb3J5X3N0b3JhZ2UgKikgZm5fcG5n X2dldF9pb19wdHIgKHBuZ19wdHIpOwpAQCAtNTcyNiwxMCArNTU1NSw3IEBACiAgICBieXRlcyBm cm9tIHRoZSBpbnB1dCB0byBEQVRBLiAgKi8KIAogc3RhdGljIHZvaWQKLXBuZ19yZWFkX2Zyb21f ZmlsZSAocG5nX3B0ciwgZGF0YSwgbGVuZ3RoKQotICAgICBwbmdfc3RydWN0cCBwbmdfcHRyOwot ICAgICBwbmdfYnl0ZXAgZGF0YTsKLSAgICAgcG5nX3NpemVfdCBsZW5ndGg7CitwbmdfcmVhZF9m cm9tX2ZpbGUgKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19ieXRlcCBkYXRhLCBwbmdfc2l6ZV90 IGxlbmd0aCkKIHsKICAgRklMRSAqZnAgPSAoRklMRSAqKSBmbl9wbmdfZ2V0X2lvX3B0ciAocG5n X3B0cik7CiAKQEAgLTU3NDIsOSArNTU2OCw3IEBACiAgICBzdWNjZXNzZnVsLiAgKi8KIAogc3Rh dGljIGludAotcG5nX2xvYWQgKGYsIGltZykKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBz dHJ1Y3QgaW1hZ2UgKmltZzsKK3BuZ19sb2FkIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVjdCBpbWFn ZSAqaW1nKQogewogICBMaXNwX09iamVjdCBmaWxlLCBzcGVjaWZpZWRfZmlsZTsKICAgTGlzcF9P YmplY3Qgc3BlY2lmaWVkX2RhdGE7CkBAIC02MTY4LDggKzU5OTIsNyBAQAogLyogUmV0dXJuIG5v bi16ZXJvIGlmIE9CSkVDVCBpcyBhIHZhbGlkIEpQRUcgaW1hZ2Ugc3BlY2lmaWNhdGlvbi4gICov CiAKIHN0YXRpYyBpbnQKLWpwZWdfaW1hZ2VfcCAob2JqZWN0KQotICAgICBMaXNwX09iamVjdCBv YmplY3Q7CitqcGVnX2ltYWdlX3AgKExpc3BfT2JqZWN0IG9iamVjdCkKIHsKICAgc3RydWN0IGlt YWdlX2tleXdvcmQgZm10W0pQRUdfTEFTVF07CiAKQEAgLTYyNjgsOCArNjA5MSw3IEBACiAKIAog c3RhdGljIHZvaWQKLW15X2Vycm9yX2V4aXQgKGNpbmZvKQotICAgICBqX2NvbW1vbl9wdHIgY2lu Zm87CitteV9lcnJvcl9leGl0IChqX2NvbW1vbl9wdHIgY2luZm8pCiB7CiAgIHN0cnVjdCBteV9q cGVnX2Vycm9yX21nciAqbWdyID0gKHN0cnVjdCBteV9qcGVnX2Vycm9yX21nciAqKSBjaW5mby0+ ZXJyOwogICBsb25nam1wIChtZ3ItPnNldGptcF9idWZmZXIsIDEpOwpAQCAtNjI4MSw4ICs2MTAz LDcgQEAKICAgIGxpYmpwZWcuZG9jIGZyb20gdGhlIEpQRUcgbGliIGRpc3RyaWJ1dGlvbi4gICov CiAKIHN0YXRpYyB2b2lkCi1vdXJfY29tbW9uX2luaXRfc291cmNlIChjaW5mbykKLSAgICAgal9k ZWNvbXByZXNzX3B0ciBjaW5mbzsKK291cl9jb21tb25faW5pdF9zb3VyY2UgKGpfZGVjb21wcmVz c19wdHIgY2luZm8pCiB7CiB9CiAKQEAgLTYyOTEsOCArNjExMiw3IEBACiAgICBqcGVnX2Zpbmlz aF9kZWNvbXByZXNzKCkgYWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgKi8KIAog c3RhdGljIHZvaWQKLW91cl9jb21tb25fdGVybV9zb3VyY2UgKGNpbmZvKQotICAgICBqX2RlY29t cHJlc3NfcHRyIGNpbmZvOworb3VyX2NvbW1vbl90ZXJtX3NvdXJjZSAoal9kZWNvbXByZXNzX3B0 ciBjaW5mbykKIHsKIH0KIApAQCAtNjMwNCw4ICs2MTI0LDcgQEAKIHN0YXRpYyBKT0NURVQgb3Vy X21lbW9yeV9idWZmZXJbMl07CiAKIHN0YXRpYyBib29sZWFuCi1vdXJfbWVtb3J5X2ZpbGxfaW5w dXRfYnVmZmVyIChjaW5mbykKLSAgICAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsKK291cl9tZW1v cnlfZmlsbF9pbnB1dF9idWZmZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCiB7CiAgIC8qIElu c2VydCBhIGZha2UgRU9JIG1hcmtlci4gICovCiAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKnNy YyA9IGNpbmZvLT5zcmM7CkBAIC02MzIzLDkgKzYxNDIsNyBAQAogICAgaXMgdGhlIEpQRUcgZGF0 YSBzb3VyY2UgbWFuYWdlci4gICovCiAKIHN0YXRpYyB2b2lkCi1vdXJfbWVtb3J5X3NraXBfaW5w dXRfZGF0YSAoY2luZm8sIG51bV9ieXRlcykKLSAgICAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsK LSAgICAgbG9uZyBudW1fYnl0ZXM7CitvdXJfbWVtb3J5X3NraXBfaW5wdXRfZGF0YSAoal9kZWNv bXByZXNzX3B0ciBjaW5mbywgbG9uZyBpbnQgbnVtX2J5dGVzKQogewogICBzdHJ1Y3QganBlZ19z b3VyY2VfbWdyICpzcmMgPSAoc3RydWN0IGpwZWdfc291cmNlX21nciAqKSBjaW5mby0+c3JjOwog CkBAIC02MzQ1LDEwICs2MTYyLDcgQEAKICAgIHJlYWRpbmcgdGhlIGltYWdlLiAgKi8KIAogc3Rh dGljIHZvaWQKLWpwZWdfbWVtb3J5X3NyYyAoY2luZm8sIGRhdGEsIGxlbikKLSAgICAgal9kZWNv bXByZXNzX3B0ciBjaW5mbzsKLSAgICAgSk9DVEVUICpkYXRhOwotICAgICB1bnNpZ25lZCBpbnQg bGVuOworanBlZ19tZW1vcnlfc3JjIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKT0NURVQgKmRh dGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKnNyYzsK IApAQCAtNjM5MSw4ICs2MjA1LDcgQEAKICAgIHdoZW5ldmVyIG1vcmUgZGF0YSBpcyBuZWVkZWQu ICBUaGUgZGF0YSBpcyByZWFkIGZyb20gYSBGSUxFICouICAqLwogCiBzdGF0aWMgYm9vbGVhbgot b3VyX3N0ZGlvX2ZpbGxfaW5wdXRfYnVmZmVyIChjaW5mbykKLSAgICAgal9kZWNvbXByZXNzX3B0 ciBjaW5mbzsKK291cl9zdGRpb19maWxsX2lucHV0X2J1ZmZlciAoal9kZWNvbXByZXNzX3B0ciBj aW5mbykKIHsKICAgc3RydWN0IGpwZWdfc3RkaW9fbWdyICpzcmM7CiAKQEAgLTY0MjMsOSArNjIz Niw3IEBACiAgICBpcyB0aGUgSlBFRyBkYXRhIHNvdXJjZSBtYW5hZ2VyLiAgKi8KIAogc3RhdGlj IHZvaWQKLW91cl9zdGRpb19za2lwX2lucHV0X2RhdGEgKGNpbmZvLCBudW1fYnl0ZXMpCi0gICAg IGpfZGVjb21wcmVzc19wdHIgY2luZm87Ci0gICAgIGxvbmcgbnVtX2J5dGVzOworb3VyX3N0ZGlv X3NraXBfaW5wdXRfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgbG9uZyBpbnQgbnVtX2J5 dGVzKQogewogICBzdHJ1Y3QganBlZ19zdGRpb19tZ3IgKnNyYzsKICAgc3JjID0gKHN0cnVjdCBq cGVnX3N0ZGlvX21nciAqKSBjaW5mby0+c3JjOwpAQCAtNjQ1NSw5ICs2MjY2LDcgQEAKICAgIHJl YWRpbmcgdGhlIGltYWdlLiAgKi8KIAogc3RhdGljIHZvaWQKLWpwZWdfZmlsZV9zcmMgKGNpbmZv LCBmcCkKLSAgICAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsKLSAgICAgRklMRSAqZnA7CitqcGVn X2ZpbGVfc3JjIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICpmcCkKIHsKICAgc3RydWN0 IGpwZWdfc3RkaW9fbWdyICpzcmM7CiAKQEAgLTY0OTEsOSArNjMwMCw3IEBACiAgICBmcm9tIHRo ZSBKUEVHIGxpYi4gICovCiAKIHN0YXRpYyBpbnQKLWpwZWdfbG9hZCAoZiwgaW1nKQotICAgICBz dHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOworanBlZ19sb2FkIChzdHJ1 Y3QgZnJhbWUgKmYsIHN0cnVjdCBpbWFnZSAqaW1nKQogewogICBzdHJ1Y3QganBlZ19kZWNvbXBy ZXNzX3N0cnVjdCBjaW5mbzsKICAgc3RydWN0IG15X2pwZWdfZXJyb3JfbWdyIG1ncjsKQEAgLTY3 NDIsOCArNjU0OSw3IEBACiAvKiBSZXR1cm4gbm9uLXplcm8gaWYgT0JKRUNUIGlzIGEgdmFsaWQg VElGRiBpbWFnZSBzcGVjaWZpY2F0aW9uLiAgKi8KIAogc3RhdGljIGludAotdGlmZl9pbWFnZV9w IChvYmplY3QpCi0gICAgIExpc3BfT2JqZWN0IG9iamVjdDsKK3RpZmZfaW1hZ2VfcCAoTGlzcF9P YmplY3Qgb2JqZWN0KQogewogICBzdHJ1Y3QgaW1hZ2Vfa2V5d29yZCBmbXRbVElGRl9MQVNUXTsK ICAgYmNvcHkgKHRpZmZfZm9ybWF0LCBmbXQsIHNpemVvZiBmbXQpOwpAQCAtNjgyMywxMCArNjYy OSw3IEBACiB0aWZmX21lbW9yeV9zb3VyY2U7CiAKIHN0YXRpYyBzaXplX3QKLXRpZmZfcmVhZF9m cm9tX21lbW9yeSAoZGF0YSwgYnVmLCBzaXplKQotICAgICB0aGFuZGxlX3QgZGF0YTsKLSAgICAg dGRhdGFfdCBidWY7Ci0gICAgIHRzaXplX3Qgc2l6ZTsKK3RpZmZfcmVhZF9mcm9tX21lbW9yeSAo dGhhbmRsZV90IGRhdGEsIHRkYXRhX3QgYnVmLCB0c2l6ZV90IHNpemUpCiB7CiAgIHRpZmZfbWVt b3J5X3NvdXJjZSAqc3JjID0gKHRpZmZfbWVtb3J5X3NvdXJjZSAqKSBkYXRhOwogCkBAIC02ODM4 LDE5ICs2NjQxLDEzIEBACiB9CiAKIHN0YXRpYyBzaXplX3QKLXRpZmZfd3JpdGVfZnJvbV9tZW1v cnkgKGRhdGEsIGJ1Ziwgc2l6ZSkKLSAgICAgdGhhbmRsZV90IGRhdGE7Ci0gICAgIHRkYXRhX3Qg YnVmOwotICAgICB0c2l6ZV90IHNpemU7Cit0aWZmX3dyaXRlX2Zyb21fbWVtb3J5ICh0aGFuZGxl X3QgZGF0YSwgdGRhdGFfdCBidWYsIHRzaXplX3Qgc2l6ZSkKIHsKICAgcmV0dXJuIChzaXplX3Qp IC0xOwogfQogCiBzdGF0aWMgdG9mZl90Ci10aWZmX3NlZWtfaW5fbWVtb3J5IChkYXRhLCBvZmYs IHdoZW5jZSkKLSAgICAgdGhhbmRsZV90IGRhdGE7Ci0gICAgIHRvZmZfdCBvZmY7Ci0gICAgIGlu dCB3aGVuY2U7Cit0aWZmX3NlZWtfaW5fbWVtb3J5ICh0aGFuZGxlX3QgZGF0YSwgdG9mZl90IG9m ZiwgaW50IHdoZW5jZSkKIHsKICAgdGlmZl9tZW1vcnlfc291cmNlICpzcmMgPSAodGlmZl9tZW1v cnlfc291cmNlICopIGRhdGE7CiAgIGludCBpZHg7CkBAIC02ODgxLDQ0ICs2Njc4LDM0IEBACiB9 CiAKIHN0YXRpYyBpbnQKLXRpZmZfY2xvc2VfbWVtb3J5IChkYXRhKQotICAgICB0aGFuZGxlX3Qg ZGF0YTsKK3RpZmZfY2xvc2VfbWVtb3J5ICh0aGFuZGxlX3QgZGF0YSkKIHsKICAgLyogTk9PUCAq LwogICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotdGlmZl9tbWFwX21lbW9yeSAoZGF0YSwg cGJhc2UsIHBzaXplKQotICAgICB0aGFuZGxlX3QgZGF0YTsKLSAgICAgdGRhdGFfdCAqcGJhc2U7 Ci0gICAgIHRvZmZfdCAqcHNpemU7Cit0aWZmX21tYXBfbWVtb3J5ICh0aGFuZGxlX3QgZGF0YSwg dGRhdGFfdCAqcGJhc2UsIHRvZmZfdCAqcHNpemUpCiB7CiAgIC8qIEl0IGlzIGFscmVhZHkgX0lO XyBtZW1vcnkuICovCiAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAotdGlmZl91bm1hcF9t ZW1vcnkgKGRhdGEsIGJhc2UsIHNpemUpCi0gICAgIHRoYW5kbGVfdCBkYXRhOwotICAgICB0ZGF0 YV90IGJhc2U7Ci0gICAgIHRvZmZfdCBzaXplOwordGlmZl91bm1hcF9tZW1vcnkgKHRoYW5kbGVf dCBkYXRhLCB0ZGF0YV90IGJhc2UsIHRvZmZfdCBzaXplKQogewogICAvKiBXZSBkb24ndCBuZWVk IHRvIGRvIHRoaXMuICovCiB9CiAKIHN0YXRpYyB0b2ZmX3QKLXRpZmZfc2l6ZV9vZl9tZW1vcnkg KGRhdGEpCi0gICAgIHRoYW5kbGVfdCBkYXRhOwordGlmZl9zaXplX29mX21lbW9yeSAodGhhbmRs ZV90IGRhdGEpCiB7CiAgIHJldHVybiAoKHRpZmZfbWVtb3J5X3NvdXJjZSAqKSBkYXRhKS0+bGVu OwogfQogCiAKIHN0YXRpYyB2b2lkCi10aWZmX2Vycm9yX2hhbmRsZXIgKHRpdGxlLCBmb3JtYXQs IGFwKQotICAgICBjb25zdCBjaGFyICp0aXRsZSwgKmZvcm1hdDsKLSAgICAgdmFfbGlzdCBhcDsK K3RpZmZfZXJyb3JfaGFuZGxlciAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKmZvcm1h dCwgdmFfbGlzdCBhcCkKIHsKICAgY2hhciBidWZbNTEyXTsKICAgaW50IGxlbjsKQEAgLTY5MzAs OSArNjcxNyw3IEBACiAKIAogc3RhdGljIHZvaWQKLXRpZmZfd2FybmluZ19oYW5kbGVyICh0aXRs ZSwgZm9ybWF0LCBhcCkKLSAgICAgY29uc3QgY2hhciAqdGl0bGUsICpmb3JtYXQ7Ci0gICAgIHZh X2xpc3QgYXA7Cit0aWZmX3dhcm5pbmdfaGFuZGxlciAoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKIHsKICAgY2hhciBidWZbNTEyXTsKICAgaW50IGxl bjsKQEAgLTY5NDcsOSArNjczMiw3IEBACiAgICBzdWNjZXNzZnVsLiAgKi8KIAogc3RhdGljIGlu dAotdGlmZl9sb2FkIChmLCBpbWcpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0 IGltYWdlICppbWc7Cit0aWZmX2xvYWQgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGltYWdlICpp bWcpCiB7CiAgIExpc3BfT2JqZWN0IGZpbGUsIHNwZWNpZmllZF9maWxlOwogICBMaXNwX09iamVj dCBzcGVjaWZpZWRfZGF0YTsKQEAgLTcxOTQsOSArNjk3Nyw3IEBACiAvKiBGcmVlIFggcmVzb3Vy Y2VzIG9mIEdJRiBpbWFnZSBJTUcgd2hpY2ggaXMgdXNlZCBvbiBmcmFtZSBGLiAgKi8KIAogc3Rh dGljIHZvaWQKLWdpZl9jbGVhcl9pbWFnZSAoZiwgaW1nKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7 Ci0gICAgIHN0cnVjdCBpbWFnZSAqaW1nOworZ2lmX2NsZWFyX2ltYWdlIChzdHJ1Y3QgZnJhbWUg KmYsIHN0cnVjdCBpbWFnZSAqaW1nKQogewogICAvKiBJTUctPmRhdGEucHRyX3ZhbCBtYXkgY29u dGFpbiBtZXRhZGF0YSB3aXRoIGV4dGVuc2lvbiBkYXRhLiAgKi8KICAgaW1nLT5kYXRhLmxpc3Bf dmFsID0gUW5pbDsKQEAgLTcyMDYsOCArNjk4Nyw3IEBACiAvKiBSZXR1cm4gbm9uLXplcm8gaWYg T0JKRUNUIGlzIGEgdmFsaWQgR0lGIGltYWdlIHNwZWNpZmljYXRpb24uICAqLwogCiBzdGF0aWMg aW50Ci1naWZfaW1hZ2VfcCAob2JqZWN0KQotICAgICBMaXNwX09iamVjdCBvYmplY3Q7CitnaWZf aW1hZ2VfcCAoTGlzcF9PYmplY3Qgb2JqZWN0KQogewogICBzdHJ1Y3QgaW1hZ2Vfa2V5d29yZCBm bXRbR0lGX0xBU1RdOwogICBiY29weSAoZ2lmX2Zvcm1hdCwgZm10LCBzaXplb2YgZm10KTsKQEAg LTcyOTAsMTAgKzcwNzAsNyBAQAogc3RhdGljIGdpZl9tZW1vcnlfc291cmNlICpjdXJyZW50X2dp Zl9tZW1vcnlfc3JjOwogCiBzdGF0aWMgaW50Ci1naWZfcmVhZF9mcm9tX21lbW9yeSAoZmlsZSwg YnVmLCBsZW4pCi0gICAgIEdpZkZpbGVUeXBlICpmaWxlOwotICAgICBHaWZCeXRlVHlwZSAqYnVm OwotICAgICBpbnQgbGVuOworZ2lmX3JlYWRfZnJvbV9tZW1vcnkgKEdpZkZpbGVUeXBlICpmaWxl LCBHaWZCeXRlVHlwZSAqYnVmLCBpbnQgbGVuKQogewogICBnaWZfbWVtb3J5X3NvdXJjZSAqc3Jj ID0gY3VycmVudF9naWZfbWVtb3J5X3NyYzsKIApAQCAtNzMxMyw5ICs3MDkwLDcgQEAKIHN0YXRp YyBjb25zdCBpbnQgaW50ZXJsYWNlX2luY3JlbWVudFtdID0gezgsIDgsIDQsIDJ9OwogCiBzdGF0 aWMgaW50Ci1naWZfbG9hZCAoZiwgaW1nKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHN0 cnVjdCBpbWFnZSAqaW1nOworZ2lmX2xvYWQgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGltYWdl ICppbWcpCiB7CiAgIExpc3BfT2JqZWN0IGZpbGUsIHNwZWNpZmllZF9maWxlOwogICBMaXNwX09i amVjdCBzcGVjaWZpZWRfZGF0YTsKQEAgLTc2NDUsOCArNzQyMCw3IEBACiAgICBpZGVudGlmeSB0 aGUgU1ZHIGZvcm1hdC4gICAqLwogCiBzdGF0aWMgaW50Ci1zdmdfaW1hZ2VfcCAob2JqZWN0KQot ICAgICBMaXNwX09iamVjdCBvYmplY3Q7CitzdmdfaW1hZ2VfcCAoTGlzcF9PYmplY3Qgb2JqZWN0 KQogewogICBzdHJ1Y3QgaW1hZ2Vfa2V5d29yZCBmbXRbU1ZHX0xBU1RdOwogICBiY29weSAoc3Zn X2Zvcm1hdCwgZm10LCBzaXplb2YgZm10KTsKQEAgLTc3NDgsOSArNzUyMiw3IEBACiAgICB0aGUg cHJvdG90eXBlIHRodXMgbmVlZHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoYXQgc3RydWN0dXJl LiAgKi8KIAogc3RhdGljIGludAotc3ZnX2xvYWQgKGYsIGltZykKLSAgICAgc3RydWN0IGZyYW1l ICpmOwotICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKK3N2Z19sb2FkIChzdHJ1Y3QgZnJhbWUgKmYs IHN0cnVjdCBpbWFnZSAqaW1nKQogewogICBpbnQgc3VjY2Vzc19wID0gMDsKICAgTGlzcF9PYmpl Y3QgZmlsZV9uYW1lOwpAQCAtNzgwNywxNSArNzU3OSwxMCBAQAogCiAgICBSZXR1cm5zIG5vbi16 ZXJvIHdoZW4gc3VjY2Vzc2Z1bC4gICovCiBzdGF0aWMgaW50Ci1zdmdfbG9hZF9pbWFnZSAoZiwg aW1nLCBjb250ZW50cywgc2l6ZSkKLSAgICAvKiBQb2ludGVyIHRvIGVtYWNzIGZyYW1lIHN0cnVj dHVyZS4gICovCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgLyogUG9pbnRlciB0byBlbWFj cyBpbWFnZSBzdHJ1Y3R1cmUuICAqLwotICAgICBzdHJ1Y3QgaW1hZ2UgKmltZzsKLSAgICAgLyog U3RyaW5nIGNvbnRhaW5pbmcgdGhlIFNWRyBYTUwgZGF0YSB0byBiZSBwYXJzZWQuICAqLwotICAg ICB1bnNpZ25lZCBjaGFyICpjb250ZW50czsKLSAgICAgLyogU2l6ZSBvZiBkYXRhIGluIGJ5dGVz LiAgKi8KLSAgICAgdW5zaWduZWQgaW50IHNpemU7CitzdmdfbG9hZF9pbWFnZSAoc3RydWN0IGZy YW1lICpmLCAgICAgICAgIC8qIFBvaW50ZXIgdG8gZW1hY3MgZnJhbWUgc3RydWN0dXJlLiAgKi8K KwkJc3RydWN0IGltYWdlICppbWcsICAgICAgIC8qIFBvaW50ZXIgdG8gZW1hY3MgaW1hZ2Ugc3Ry dWN0dXJlLiAgKi8KKwkJdW5zaWduZWQgY2hhciAqY29udGVudHMsIC8qIFN0cmluZyBjb250YWlu aW5nIHRoZSBTVkcgWE1MIGRhdGEgdG8gYmUgcGFyc2VkLiAgKi8KKwkJdW5zaWduZWQgaW50IHNp emUpICAgICAgIC8qIFNpemUgb2YgZGF0YSBpbiBieXRlcy4gICovCiB7CiAgIFJzdmdIYW5kbGUg KnJzdmdfaGFuZGxlOwogICBSc3ZnRGltZW5zaW9uRGF0YSBkaW1lbnNpb25fZGF0YTsKQEAgLTgw NDUsOSArNzgxMiw3IEBACiAvKiBGcmVlIFggcmVzb3VyY2VzIG9mIEdob3N0c2NyaXB0IGltYWdl IElNRyB3aGljaCBpcyB1c2VkIG9uIGZyYW1lIEYuICAqLwogCiBzdGF0aWMgdm9pZAotZ3NfY2xl YXJfaW1hZ2UgKGYsIGltZykKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBzdHJ1Y3QgaW1h Z2UgKmltZzsKK2dzX2NsZWFyX2ltYWdlIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVjdCBpbWFnZSAq aW1nKQogewogICAvKiBJTUctPmRhdGEucHRyX3ZhbCBtYXkgY29udGFpbiBhIHJlY29yZGVkIGNv bG9ybWFwLiAgKi8KICAgeGZyZWUgKGltZy0+ZGF0YS5wdHJfdmFsKTsKQEAgLTgwNTksOCArNzgy NCw3IEBACiAgICBzcGVjaWZpY2F0aW9uLiAgKi8KIAogc3RhdGljIGludAotZ3NfaW1hZ2VfcCAo b2JqZWN0KQotICAgICBMaXNwX09iamVjdCBvYmplY3Q7Citnc19pbWFnZV9wIChMaXNwX09iamVj dCBvYmplY3QpCiB7CiAgIHN0cnVjdCBpbWFnZV9rZXl3b3JkIGZtdFtHU19MQVNUXTsKICAgTGlz cF9PYmplY3QgdGVtOwpAQCAtODEwMCw5ICs3ODY0LDcgQEAKICAgIGlmIHN1Y2Nlc3NmdWwuICAq LwogCiBzdGF0aWMgaW50Ci1nc19sb2FkIChmLCBpbWcpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsK LSAgICAgc3RydWN0IGltYWdlICppbWc7Citnc19sb2FkIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVj dCBpbWFnZSAqaW1nKQogewogICBjaGFyIGJ1ZmZlclsxMDBdOwogICBMaXNwX09iamVjdCB3aW5k b3dfYW5kX3BpeG1hcF9pZCA9IFFuaWwsIGxvYWRlciwgcHRfaGVpZ2h0LCBwdF93aWR0aDsKQEAg LTgxODAsOSArNzk0Miw3IEBACiAgICB0ZWxsaW5nIEVtYWNzIHRoYXQgR2hvc3RzY3JpcHQgaGFz IGZpbmlzaGVkIGRyYXdpbmcuICAqLwogCiB2b2lkCi14X2tpbGxfZ3NfcHJvY2VzcyAocGl4bWFw LCBmKQotICAgICBQaXhtYXAgcGl4bWFwOwotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Cit4X2tpbGxf Z3NfcHJvY2VzcyAoUGl4bWFwIHBpeG1hcCwgc3RydWN0IGZyYW1lICpmKQogewogICBzdHJ1Y3Qg aW1hZ2VfY2FjaGUgKmMgPSBGUkFNRV9JTUFHRV9DQUNIRSAoZik7CiAgIGludCBjbGFzcywgaTsK QEAgLTgzNzUsNyArODEzNSw3IEBACiB9CiAKIHZvaWQKLXN5bXNfb2ZfaW1hZ2UgKCkKK3N5bXNf b2ZfaW1hZ2UgKHZvaWQpCiB7CiAgIGV4dGVybiBMaXNwX09iamVjdCBRcmlza3lfbG9jYWxfdmFy aWFibGU7ICAgLyogU3ltc19vZl94ZGlzcCBoYXMgYWxyZWFkeSBydW4uICAqLwogCkBAIC04NTYw LDcgKzgzMjAsNyBAQAogfQogCiB2b2lkCi1pbml0X2ltYWdlICgpCitpbml0X2ltYWdlICh2b2lk KQogewogfQogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2tleWJvYXJkLmMnCi0tLSBzcmMva2V5 Ym9hcmQuYwkyMDEwLTA3LTAyIDEyOjE5OjUzICswMDAwCisrKyBzcmMva2V5Ym9hcmQuYwkyMDEw LTA3LTA1IDAxOjE3OjIzICswMDAwCkBAIC01MjEsMTcgKzUyMSwxNyBAQAogZXh0ZXJuIExpc3Bf T2JqZWN0IFFsZWZ0X2ZyaW5nZSwgUXJpZ2h0X2ZyaW5nZTsKIGV4dGVybiBMaXNwX09iamVjdCBR Q21hcDsKIAotTGlzcF9PYmplY3QgcmVjdXJzaXZlX2VkaXRfdW53aW5kICgpLCBjb21tYW5kX2xv b3AgKCk7Ci1MaXNwX09iamVjdCBGdGhpc19jb21tYW5kX2tleXMgKCk7CitMaXNwX09iamVjdCBy ZWN1cnNpdmVfZWRpdF91bndpbmQgKExpc3BfT2JqZWN0IGJ1ZmZlciksIGNvbW1hbmRfbG9vcCAo dm9pZCk7CitMaXNwX09iamVjdCBGdGhpc19jb21tYW5kX2tleXMgKHZvaWQpOwogTGlzcF9PYmpl Y3QgUWV4dGVuZGVkX2NvbW1hbmRfaGlzdG9yeTsKLUVNQUNTX1RJTUUgdGltZXJfY2hlY2sgKCk7 CitFTUFDU19USU1FIHRpbWVyX2NoZWNrIChpbnQgZG9faXRfbm93KTsKIAogZXh0ZXJuIExpc3Bf T2JqZWN0IFZoaXN0b3J5X2xlbmd0aCwgVnRyYW5zbGF0aW9uX3RhYmxlX2Zvcl9pbnB1dDsKIAog ZXh0ZXJuIGNoYXIgKnhfZ2V0X2tleXN5bV9uYW1lICgpOwogCi1zdGF0aWMgdm9pZCByZWNvcmRf bWVudV9rZXkgKCk7Ci1zdGF0aWMgaW50IGVjaG9fbGVuZ3RoICgpOworc3RhdGljIHZvaWQgcmVj b3JkX21lbnVfa2V5IChMaXNwX09iamVjdCBjKTsKK3N0YXRpYyBpbnQgZWNob19sZW5ndGggKHZv aWQpOwogCiBMaXNwX09iamVjdCBRcG9sbGluZ19wZXJpb2Q7CiAKQEAgLTYxOCw3ICs2MTgsNyBA QAogc3RhdGljIGludCByZWFkYWJsZV9ldmVudHMgKGludCk7CiBzdGF0aWMgTGlzcF9PYmplY3Qg cmVhZF9jaGFyX3hfbWVudV9wcm9tcHQgKGludCwgTGlzcF9PYmplY3QgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QsIGludCAqKTsKLXN0 YXRpYyBMaXNwX09iamVjdCByZWFkX2NoYXJfeF9tZW51X3Byb21wdCAoKTsKK3N0YXRpYyBMaXNw X09iamVjdCByZWFkX2NoYXJfeF9tZW51X3Byb21wdCAoaW50IG5tYXBzLCBMaXNwX09iamVjdCAq bWFwcywgTGlzcF9PYmplY3QgcHJldl9ldmVudCwgaW50ICp1c2VkX21vdXNlX21lbnUpOwogc3Rh dGljIExpc3BfT2JqZWN0IHJlYWRfY2hhcl9taW5pYnVmX21lbnVfcHJvbXB0IChpbnQsIGludCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9P YmplY3QgKik7CiBzdGF0aWMgTGlzcF9PYmplY3QgbWFrZV9saXNweV9ldmVudCAoc3RydWN0IGlu cHV0X2V2ZW50ICopOwpAQCAtNjMzLDcgKzYzMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgKiwgdW5zaWduZWQpOwogc3RhdGljIExpc3Bf T2JqZWN0IG1ha2VfbGlzcHlfc3dpdGNoX2ZyYW1lIChMaXNwX09iamVjdCk7CiBzdGF0aWMgdm9p ZCBzYXZlX2dldGNqbXAgKGptcF9idWYpOwotc3RhdGljIHZvaWQgc2F2ZV9nZXRjam1wICgpOwog c3RhdGljIHZvaWQgcmVzdG9yZV9nZXRjam1wIChqbXBfYnVmKTsKIHN0YXRpYyBMaXNwX09iamVj dCBhcHBseV9tb2RpZmllcnMgKGludCwgTGlzcF9PYmplY3QpOwogc3RhdGljIHZvaWQgY2xlYXJf ZXZlbnQgKHN0cnVjdCBpbnB1dF9ldmVudCAqKTsKQEAgLTY1OCw4ICs2NTcsNyBAQAogICAgQWxz byBzdGFydCBlY2hvaW5nLiAgKi8KIAogdm9pZAotZWNob19wcm9tcHQgKHN0cikKLSAgICAgTGlz cF9PYmplY3Qgc3RyOworZWNob19wcm9tcHQgKExpc3BfT2JqZWN0IHN0cikKIHsKICAgY3VycmVu dF9rYm9hcmQtPmVjaG9fc3RyaW5nID0gc3RyOwogICBjdXJyZW50X2tib2FyZC0+ZWNob19hZnRl cl9wcm9tcHQgPSBTQ0hBUlMgKHN0cik7CkBAIC02NzEsOCArNjY5LDcgQEAKICAgIGphenopLCBv ciBhIHN5bWJvbCwgd2hvc2UgbmFtZSBpcyBwcmludGVkLiAgKi8KIAogdm9pZAotZWNob19jaGFy IChjKQotICAgICBMaXNwX09iamVjdCBjOworZWNob19jaGFyIChMaXNwX09iamVjdCBjKQogewog ICBpZiAoY3VycmVudF9rYm9hcmQtPmltbWVkaWF0ZV9lY2hvKQogICAgIHsKQEAgLTc1OSw3ICs3 NTYsNyBAQAogICAgZW1wdHksIHNvIHRoYXQgaXQgc2VydmVzIGFzIGEgbWluaS1wcm9tcHQgZm9y IHRoZSB2ZXJ5IG5leHQgY2hhcmFjdGVyLiAgKi8KIAogdm9pZAotZWNob19kYXNoICgpCitlY2hv X2Rhc2ggKHZvaWQpCiB7CiAgIC8qIERvIG5vdGhpbmcgaWYgbm90IGVjaG9pbmcgYXQgYWxsLiAg Ki8KICAgaWYgKE5JTFAgKGN1cnJlbnRfa2JvYXJkLT5lY2hvX3N0cmluZykpCkBAIC04MDAsNyAr Nzk3LDcgQEAKICAgIGRvaW5nIHNvLiAgKi8KIAogdm9pZAotZWNob19ub3cgKCkKK2VjaG9fbm93 ICh2b2lkKQogewogICBpZiAoIWN1cnJlbnRfa2JvYXJkLT5pbW1lZGlhdGVfZWNobykKICAgICB7 CkBAIC04NTAsNyArODQ3LDcgQEAKIC8qIFR1cm4gb2ZmIGVjaG9pbmcsIGZvciB0aGUgc3RhcnQg b2YgYSBuZXcgY29tbWFuZC4gICovCiAKIHZvaWQKLWNhbmNlbF9lY2hvaW5nICgpCitjYW5jZWxf ZWNob2luZyAodm9pZCkKIHsKICAgY3VycmVudF9rYm9hcmQtPmltbWVkaWF0ZV9lY2hvID0gMDsK ICAgY3VycmVudF9rYm9hcmQtPmVjaG9fYWZ0ZXJfcHJvbXB0ID0gLTE7CkBAIC04NjMsNyArODYw LDcgQEAKIC8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGVjaG8gc3RyaW5nLiAg Ki8KIAogc3RhdGljIGludAotZWNob19sZW5ndGggKCkKK2VjaG9fbGVuZ3RoICh2b2lkKQogewog ICByZXR1cm4gKFNUUklOR1AgKGN1cnJlbnRfa2JvYXJkLT5lY2hvX3N0cmluZykKIAkgID8gU0NI QVJTIChjdXJyZW50X2tib2FyZC0+ZWNob19zdHJpbmcpCkBAIC04NzUsOCArODcyLDcgQEAKICAg IHN3aXRjaGVzIGZyYW1lcyB3aGlsZSBlbnRlcmluZyBhIGtleSBzZXF1ZW5jZS4gICovCiAKIHN0 YXRpYyB2b2lkCi1lY2hvX3RydW5jYXRlIChuY2hhcnMpCi0gICAgIGludCBuY2hhcnM7CitlY2hv X3RydW5jYXRlIChpbnQgbmNoYXJzKQogewogICBpZiAoU1RSSU5HUCAoY3VycmVudF9rYm9hcmQt PmVjaG9fc3RyaW5nKSkKICAgICBjdXJyZW50X2tib2FyZC0+ZWNob19zdHJpbmcKQEAgLTg4OCw4 ICs4ODQsNyBAQAogDAogLyogRnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdGhpc19jb21tYW5k X2tleXMuICAqLwogc3RhdGljIHZvaWQKLWFkZF9jb21tYW5kX2tleSAoa2V5KQotICAgICBMaXNw X09iamVjdCBrZXk7CithZGRfY29tbWFuZF9rZXkgKExpc3BfT2JqZWN0IGtleSkKIHsKICNpZiAw IC8qIE5vdCBuZWVkZWQgYWZ0ZXIgd2UgbWFkZSBGcmVzZXRfdGhpc19jb21tYW5kX2xlbmd0aHMK IAkgZG8gdGhlIGpvYiBpbW1lZGlhdGVseS4gICovCkBAIC05MTYsNyArOTExLDcgQEAKIAogDAog TGlzcF9PYmplY3QKLXJlY3Vyc2l2ZV9lZGl0XzEgKCkKK3JlY3Vyc2l2ZV9lZGl0XzEgKHZvaWQp CiB7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAgIExpc3BfT2JqZWN0IHZhbDsK QEAgLTk2MSw3ICs5NTYsNyBAQAogLyogV2hlbiBhbiBhdXRvLXNhdmUgaGFwcGVucywgcmVjb3Jk IHRoZSAidGltZSIsIGFuZCBkb24ndCBkbyBhZ2FpbiBzb29uLiAgKi8KIAogdm9pZAotcmVjb3Jk X2F1dG9fc2F2ZSAoKQorcmVjb3JkX2F1dG9fc2F2ZSAodm9pZCkKIHsKICAgbGFzdF9hdXRvX3Nh dmUgPSBudW1fbm9ubWFjcm9faW5wdXRfZXZlbnRzOwogfQpAQCAtOTY5LDcgKzk2NCw3IEBACiAv KiBNYWtlIGFuIGF1dG8gc2F2ZSBoYXBwZW4gYXMgc29vbiBhcyBwb3NzaWJsZSBhdCBjb21tYW5k IGxldmVsLiAgKi8KIAogdm9pZAotZm9yY2VfYXV0b19zYXZlX3Nvb24gKCkKK2ZvcmNlX2F1dG9f c2F2ZV9zb29uICh2b2lkKQogewogICBsYXN0X2F1dG9fc2F2ZSA9IC0gYXV0b19zYXZlX2ludGVy dmFsIC0gMTsKIApAQCAtMTAxNCw4ICsxMDA5LDcgQEAKIH0KIAogTGlzcF9PYmplY3QKLXJlY3Vy c2l2ZV9lZGl0X3Vud2luZCAoYnVmZmVyKQotICAgICBMaXNwX09iamVjdCBidWZmZXI7CityZWN1 cnNpdmVfZWRpdF91bndpbmQgKExpc3BfT2JqZWN0IGJ1ZmZlcikKIHsKICAgaWYgKEJVRkZFUlAg KGJ1ZmZlcikpCiAgICAgRnNldF9idWZmZXIgKGJ1ZmZlcik7CkBAIC0xMDYwLDggKzEwNTQsNyBA QAogICAgZ2V0IG91dCBvZiBpdC4gICovCiAKIHZvaWQKLW5vdF9zaW5nbGVfa2JvYXJkX3N0YXRl IChrYm9hcmQpCi0gICAgIEtCT0FSRCAqa2JvYXJkOworbm90X3NpbmdsZV9rYm9hcmRfc3RhdGUg KEtCT0FSRCAqa2JvYXJkKQogewogICBpZiAoa2JvYXJkID09IGN1cnJlbnRfa2JvYXJkKQogICAg IHNpbmdsZV9rYm9hcmQgPSAwOwpAQCAtMTA4MCw4ICsxMDczLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qg a2JvYXJkX3N0YWNrICprYm9hcmRfc3RhY2s7CiAKIHZvaWQKLXB1c2hfa2JvYXJkIChrKQotICAg ICBzdHJ1Y3Qga2JvYXJkICprOworcHVzaF9rYm9hcmQgKHN0cnVjdCBrYm9hcmQgKmspCiB7CiAg IHN0cnVjdCBrYm9hcmRfc3RhY2sgKnAKICAgICA9IChzdHJ1Y3Qga2JvYXJkX3N0YWNrICopIHht YWxsb2MgKHNpemVvZiAoc3RydWN0IGtib2FyZF9zdGFjaykpOwpAQCAtMTA5NCw3ICsxMDg2LDcg QEAKIH0KIAogdm9pZAotcG9wX2tib2FyZCAoKQorcG9wX2tib2FyZCAodm9pZCkKIHsKICAgc3Ry dWN0IHRlcm1pbmFsICp0OwogICBzdHJ1Y3Qga2JvYXJkX3N0YWNrICpwID0ga2JvYXJkX3N0YWNr OwpAQCAtMTEyOSw4ICsxMTIxLDcgQEAKICAgbG9ja2VkLCB0aGVuIHRoaXMgZnVuY3Rpb24gd2ls bCB0aHJvdyBhbiBlcnJvdy4gICovCiAKIHZvaWQKLXRlbXBvcmFyaWx5X3N3aXRjaF90b19zaW5n bGVfa2JvYXJkIChmKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Cit0ZW1wb3JhcmlseV9zd2l0Y2hf dG9fc2luZ2xlX2tib2FyZCAoc3RydWN0IGZyYW1lICpmKQogewogICBpbnQgd2FzX2xvY2tlZCA9 IHNpbmdsZV9rYm9hcmQ7CiAgIGlmICh3YXNfbG9ja2VkKQpAQCAtMTE3MCw4ICsxMTYxLDcgQEAK ICNlbmRpZgogCiBzdGF0aWMgTGlzcF9PYmplY3QKLXJlc3RvcmVfa2JvYXJkX2NvbmZpZ3VyYXRp b24gKHdhc19sb2NrZWQpCi0gICAgIExpc3BfT2JqZWN0IHdhc19sb2NrZWQ7CityZXN0b3JlX2ti b2FyZF9jb25maWd1cmF0aW9uIChMaXNwX09iamVjdCB3YXNfbG9ja2VkKQogewogICBpZiAoTklM UCAod2FzX2xvY2tlZCkpCiAgICAgc2luZ2xlX2tib2FyZCA9IDA7CkBAIC0xMTkyLDggKzExODIs NyBAQAogICAgYnkgcHJpbnRpbmcgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuaW5nIHRvIHRo ZSBlZGl0b3IgY29tbWFuZCBsb29wLiAgKi8KIAogTGlzcF9PYmplY3QKLWNtZF9lcnJvciAoZGF0 YSkKLSAgICAgTGlzcF9PYmplY3QgZGF0YTsKK2NtZF9lcnJvciAoTGlzcF9PYmplY3QgZGF0YSkK IHsKICAgTGlzcF9PYmplY3Qgb2xkX2xldmVsLCBvbGRfbGVuZ3RoOwogICBjaGFyIG1hY3JvZXJy b3JbNTBdOwpAQCAtMTI1MSw5ICsxMjQwLDcgQEAKICAgIHN0cmluZy4gICovCiAKIHZvaWQKLWNt ZF9lcnJvcl9pbnRlcm5hbCAoZGF0YSwgY29udGV4dCkKLSAgICAgTGlzcF9PYmplY3QgZGF0YTsK LSAgICAgY2hhciAqY29udGV4dDsKK2NtZF9lcnJvcl9pbnRlcm5hbCAoTGlzcF9PYmplY3QgZGF0 YSwgY2hhciAqY29udGV4dCkKIHsKICAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1F ICgpOwogCkBAIC0xMzA0LDE2ICsxMjkxLDE2IEBACiAgIFZzaWduYWxpbmdfZnVuY3Rpb24gPSBR bmlsOwogfQogDAotTGlzcF9PYmplY3QgY29tbWFuZF9sb29wXzEgKCk7Ci1MaXNwX09iamVjdCBj b21tYW5kX2xvb3BfMiAoKTsKLUxpc3BfT2JqZWN0IHRvcF9sZXZlbF8xICgpOworTGlzcF9PYmpl Y3QgY29tbWFuZF9sb29wXzEgKHZvaWQpOworTGlzcF9PYmplY3QgY29tbWFuZF9sb29wXzIgKExp c3BfT2JqZWN0KTsKK0xpc3BfT2JqZWN0IHRvcF9sZXZlbF8xIChMaXNwX09iamVjdCk7CiAKIC8q IEVudHJ5IHRvIGVkaXRvci1jb21tYW5kLWxvb3AuCiAgICBUaGlzIGxldmVsIGhhcyB0aGUgY2F0 Y2hlcyBmb3IgZXhpdGluZy9yZXR1cm5pbmcgdG8gZWRpdG9yIGNvbW1hbmQgbG9vcC4KICAgIEl0 IHJldHVybnMgbmlsIHRvIGV4aXQgcmVjdXJzaXZlIGVkaXQsIHQgdG8gYWJvcnQgaXQuICAqLwog CiBMaXNwX09iamVjdAotY29tbWFuZF9sb29wICgpCitjb21tYW5kX2xvb3AgKHZvaWQpCiB7CiAg IGlmIChjb21tYW5kX2xvb3BfbGV2ZWwgPiAwIHx8IG1pbmlidWZfbGV2ZWwgPiAwKQogICAgIHsK QEAgLTEzNDgsNyArMTMzNSw3IEBACiAgICByZXR1cm5lZCBkdWUgdG8gZW5kIG9mIGZpbGUgKG9y IGVuZCBvZiBrYmQgbWFjcm8pLiAgKi8KIAogTGlzcF9PYmplY3QKLWNvbW1hbmRfbG9vcF8yICgp Citjb21tYW5kX2xvb3BfMiAoTGlzcF9PYmplY3QgaWdub3JlKQogewogICByZWdpc3RlciBMaXNw X09iamVjdCB2YWw7CiAKQEAgLTEzNjAsMTMgKzEzNDcsMTMgQEAKIH0KIAogTGlzcF9PYmplY3QK LXRvcF9sZXZlbF8yICgpCit0b3BfbGV2ZWxfMiAodm9pZCkKIHsKICAgcmV0dXJuIEZldmFsIChW dG9wX2xldmVsKTsKIH0KIAogTGlzcF9PYmplY3QKLXRvcF9sZXZlbF8xICgpCit0b3BfbGV2ZWxf MSAoTGlzcF9PYmplY3QgaWdub3JlKQogewogICAvKiBPbiBlbnRyeSB0byB0aGUgb3V0ZXIgbGV2 ZWwsIHJ1biB0aGUgc3RhcnR1cCBmaWxlICovCiAgIGlmICghTklMUCAoVnRvcF9sZXZlbCkpCkBA IC0xNDI0LDggKzE0MTEsNyBAQAogICAgb2YgdGhpcyBmdW5jdGlvbi4gICovCiAKIHN0YXRpYyBM aXNwX09iamVjdAotdHJhY2tpbmdfb2ZmIChvbGRfdmFsdWUpCi0gICAgIExpc3BfT2JqZWN0IG9s ZF92YWx1ZTsKK3RyYWNraW5nX29mZiAoTGlzcF9PYmplY3Qgb2xkX3ZhbHVlKQogewogICBkb19t b3VzZV90cmFja2luZyA9IG9sZF92YWx1ZTsKICAgaWYgKE5JTFAgKG9sZF92YWx1ZSkpCkBAIC0x NDc1LDcgKzE0NjEsNyBAQAogaW50IGlnbm9yZV9tb3VzZV9kcmFnX3A7CiAKIHN0YXRpYyBGUkFN RV9QVFIKLXNvbWVfbW91c2VfbW92ZWQgKCkKK3NvbWVfbW91c2VfbW92ZWQgKHZvaWQpCiB7CiAg IExpc3BfT2JqZWN0IHRhaWwsIGZyYW1lOwogCkBAIC0xNTA4LDggKzE0OTQsNyBAQAogICAgQVJH IGlzIG5vdCB1c2VkLiAgKi8KICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KIHN0YXRpYyBMaXNw X09iamVjdAotY2FuY2VsX2hvdXJnbGFzc191bndpbmQgKGFyZykKLSAgICAgTGlzcF9PYmplY3Qg YXJnOworY2FuY2VsX2hvdXJnbGFzc191bndpbmQgKExpc3BfT2JqZWN0IGFyZykKIHsKICAgY2Fu Y2VsX2hvdXJnbGFzcyAoKTsKICAgcmV0dXJuIFFuaWw7CkBAIC0xNTE3LDcgKzE1MDIsNyBAQAog I2VuZGlmCiAKIExpc3BfT2JqZWN0Ci1jb21tYW5kX2xvb3BfMSAoKQorY29tbWFuZF9sb29wXzEg KHZvaWQpCiB7CiAgIExpc3BfT2JqZWN0IGNtZDsKICAgTGlzcF9PYmplY3Qga2V5YnVmWzMwXTsK QEAgLTE4NjUsOSArMTg1MCw3IEBACiBleHRlcm4gTGlzcF9PYmplY3QgZ2V0X3Bvc19wcm9wZXJ0 eSAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiAKIHN0YXRpYyB2b2lk Ci1hZGp1c3RfcG9pbnRfZm9yX3Byb3BlcnR5IChsYXN0X3B0LCBtb2RpZmllZCkKLSAgICAgaW50 IGxhc3RfcHQ7Ci0gICAgIGludCBtb2RpZmllZDsKK2FkanVzdF9wb2ludF9mb3JfcHJvcGVydHkg KGludCBsYXN0X3B0LCBpbnQgbW9kaWZpZWQpCiB7CiAgIEVNQUNTX0lOVCBiZWcsIGVuZDsKICAg TGlzcF9PYmplY3QgdmFsLCBvdmVybGF5LCB0bXA7CkBAIC0yMDE3LDggKzIwMDAsNyBAQAogLyog U3Vicm91dGluZSBmb3Igc2FmZV9ydW5faG9va3M6IHJ1biB0aGUgaG9vayBIT09LLiAgKi8KIAog c3RhdGljIExpc3BfT2JqZWN0Ci1zYWZlX3J1bl9ob29rc18xIChob29rKQotICAgICBMaXNwX09i amVjdCBob29rOworc2FmZV9ydW5faG9va3NfMSAodm9pZCkKIHsKICAgaWYgKE5JTFAgKFZydW5f aG9va3MpKQogICAgIHJldHVybiBRbmlsOwpAQCAtMjAyOCw4ICsyMDEwLDcgQEAKIC8qIFN1YnJv dXRpbmUgZm9yIHNhZmVfcnVuX2hvb2tzOiBoYW5kbGUgYW4gZXJyb3IgYnkgY2xlYXJpbmcgb3V0 IHRoZSBob29rLiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1zYWZlX3J1bl9ob29rc19lcnJv ciAoZGF0YSkKLSAgICAgTGlzcF9PYmplY3QgZGF0YTsKK3NhZmVfcnVuX2hvb2tzX2Vycm9yIChM aXNwX09iamVjdCBkYXRhKQogewogICBMaXNwX09iamVjdCBhcmdzWzNdOwogICBhcmdzWzBdID0g YnVpbGRfc3RyaW5nICgiRXJyb3IgaW4gJXM6ICVzIik7CkBAIC0yMDQ0LDggKzIwMjUsNyBAQAog ICAgdG8gbXlzdGVyaW91c2x5IGV2YXBvcmF0ZS4gICovCiAKIHZvaWQKLXNhZmVfcnVuX2hvb2tz IChob29rKQotICAgICBMaXNwX09iamVjdCBob29rOworc2FmZV9ydW5faG9va3MgKExpc3BfT2Jq ZWN0IGhvb2spCiB7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAgIHNwZWNiaW5k IChRaW5oaWJpdF9xdWl0LCBob29rKTsKQEAgLTIwNzcsNyArMjA1Nyw3IEBACiAgICB0aGVyZS4g ICovCiAKIHZvaWQKLXBvbGxfZm9yX2lucHV0XzEgKCkKK3BvbGxfZm9yX2lucHV0XzEgKHZvaWQp CiB7CiAvKiBUZWxsIG5zX3JlYWRfc29ja2V0KCkgaXQgaXMgYmVpbmcgY2FsbGVkIGFzeW5jaHJv bm91c2x5IHNvIGl0IGNhbiBhdm9pZAogICAgZG9pbmcgYW55dGhpbmcgZGFuZ2Vyb3VzLiAqLwpA QCAtMjA5Niw4ICsyMDc2LDcgQEAKICAgIHBvbGxfdGltZXIuICAqLwogCiB2b2lkCi1wb2xsX2Zv cl9pbnB1dCAodGltZXIpCi0gICAgIHN0cnVjdCBhdGltZXIgKnRpbWVyOworcG9sbF9mb3JfaW5w dXQgKHN0cnVjdCBhdGltZXIgKnRpbWVyKQogewogICBpZiAocG9sbF9zdXBwcmVzc19jb3VudCA9 PSAwKQogICAgIHsKQEAgLTIxMTYsNyArMjA5NSw3IEBACiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNh bGxlZCB1bmNvbmRpdGlvbmFsbHkgZnJvbSB2YXJpb3VzIHBsYWNlcy4gICovCiAKIHZvaWQKLXN0 YXJ0X3BvbGxpbmcgKCkKK3N0YXJ0X3BvbGxpbmcgKHZvaWQpCiB7CiAjaWZkZWYgUE9MTF9GT1Jf SU5QVVQKICAgLyogWFhYIFRoaXMgY29uZGl0aW9uIHdhcyAocmVhZF9zb2NrZXRfaG9vayAmJiAh aW50ZXJydXB0X2lucHV0KSwKQEAgLTIxNTMsNyArMjEzMiw3IEBACiAvKiBOb256ZXJvIGlmIHdl IGFyZSB1c2luZyBwb2xsaW5nIHRvIGhhbmRsZSBpbnB1dCBhc3luY2hyb25vdXNseS4gICovCiAK IGludAotaW5wdXRfcG9sbGluZ191c2VkICgpCitpbnB1dF9wb2xsaW5nX3VzZWQgKHZvaWQpCiB7 CiAjaWZkZWYgUE9MTF9GT1JfSU5QVVQKICAgLyogWFhYIFRoaXMgY29uZGl0aW9uIHdhcyAocmVh ZF9zb2NrZXRfaG9vayAmJiAhaW50ZXJydXB0X2lucHV0KSwKQEAgLTIxNjgsNyArMjE0Nyw3IEBA CiAvKiBUdXJuIG9mZiBwb2xsaW5nLiAgKi8KIAogdm9pZAotc3RvcF9wb2xsaW5nICgpCitzdG9w X3BvbGxpbmcgKHZvaWQpCiB7CiAjaWZkZWYgUE9MTF9GT1JfSU5QVVQKICAgLyogWFhYIFRoaXMg Y29uZGl0aW9uIHdhcyAocmVhZF9zb2NrZXRfaG9vayAmJiAhaW50ZXJydXB0X2lucHV0KSwKQEAg LTIxODMsOCArMjE2Miw3IEBACiAgICBhbmQgc3RhcnQgb3Igc3RvcCBwb2xsaW5nIGFjY29yZGlu Z2x5LiAgKi8KIAogdm9pZAotc2V0X3BvbGxfc3VwcHJlc3NfY291bnQgKGNvdW50KQotICAgICBp bnQgY291bnQ7CitzZXRfcG9sbF9zdXBwcmVzc19jb3VudCAoaW50IGNvdW50KQogewogI2lmZGVm IFBPTExfRk9SX0lOUFVUCiAgIGlmIChjb3VudCA9PSAwICYmIHBvbGxfc3VwcHJlc3NfY291bnQg IT0gMCkKQEAgLTIyMDQsOCArMjE4Miw3IEBACiAgICBCdXQgZG9uJ3QgZGVjcmVhc2UgaXQuICAq LwogCiB2b2lkCi1iaW5kX3BvbGxpbmdfcGVyaW9kIChuKQotICAgICBpbnQgbjsKK2JpbmRfcG9s bGluZ19wZXJpb2QgKGludCBuKQogewogI2lmZGVmIFBPTExfRk9SX0lOUFVUCiAgIGludCBuZXcg PSBwb2xsaW5nX3BlcmlvZDsKQEAgLTIyMjQsOCArMjIwMSw3IEBACiAvKiBBcHBseSB0aGUgY29u dHJvbCBtb2RpZmllciB0byBDSEFSQUNURVIuICAqLwogCiBpbnQKLW1ha2VfY3RybF9jaGFyIChj KQotICAgICBpbnQgYzsKK21ha2VfY3RybF9jaGFyIChpbnQgYykKIHsKICAgLyogU2F2ZSB0aGUg dXBwZXIgYml0cyBoZXJlLiAgKi8KICAgaW50IHVwcGVyID0gYyAmIH4wMTc3OwpAQCAtMjI5NCw5 ICsyMjcwLDcgQEAKICAgIGZyb20gWCBjb2RlIHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkuICAqLwog CiB2b2lkCi1zaG93X2hlbHBfZWNobyAoaGVscCwgd2luZG93LCBvYmplY3QsIHBvcywgb2tfdG9f b3ZlcndyaXRlX2tleXN0cm9rZV9lY2hvKQotICAgICBMaXNwX09iamVjdCBoZWxwLCB3aW5kb3cs IG9iamVjdCwgcG9zOwotICAgICBpbnQgb2tfdG9fb3ZlcndyaXRlX2tleXN0cm9rZV9lY2hvOwor c2hvd19oZWxwX2VjaG8gKExpc3BfT2JqZWN0IGhlbHAsIExpc3BfT2JqZWN0IHdpbmRvdywgTGlz cF9PYmplY3Qgb2JqZWN0LCBMaXNwX09iamVjdCBwb3MsIGludCBva190b19vdmVyd3JpdGVfa2V5 c3Ryb2tlX2VjaG8pCiB7CiAgIGlmICghTklMUCAoaGVscCkgJiYgIVNUUklOR1AgKGhlbHApKQog ICAgIHsKQEAgLTIzNDMsOSArMjMxNyw5IEBACiAMCiAvKiBJbnB1dCBvZiBzaW5nbGUgY2hhcmFj dGVycyBmcm9tIGtleWJvYXJkICovCiAKLUxpc3BfT2JqZWN0IHByaW50X2hlbHAgKCk7Ci1zdGF0 aWMgTGlzcF9PYmplY3Qga2JkX2J1ZmZlcl9nZXRfZXZlbnQgKCk7Ci1zdGF0aWMgdm9pZCByZWNv cmRfY2hhciAoKTsKK0xpc3BfT2JqZWN0IHByaW50X2hlbHAgKExpc3BfT2JqZWN0IG9iamVjdCk7 CitzdGF0aWMgTGlzcF9PYmplY3Qga2JkX2J1ZmZlcl9nZXRfZXZlbnQgKEtCT0FSRCAqKmticCwg aW50ICp1c2VkX21vdXNlX21lbnUsIHN0cnVjdCB0aW1ldmFsICplbmRfdGltZSk7CitzdGF0aWMg dm9pZCByZWNvcmRfY2hhciAoTGlzcF9PYmplY3QgYyk7CiAKIHN0YXRpYyBMaXNwX09iamVjdCBo ZWxwX2Zvcm1fc2F2ZWRfd2luZG93X2NvbmZpZ3M7CiBzdGF0aWMgTGlzcF9PYmplY3QKQEAgLTIz OTQsMTMgKzIzNjgsNyBAQAogICAgVmFsdWUgaXMgdCBpZiB3ZSBzaG93ZWQgYSBtZW51IGFuZCB0 aGUgdXNlciByZWplY3RlZCBpdC4gICovCiAKIExpc3BfT2JqZWN0Ci1yZWFkX2NoYXIgKGNvbW1h bmRmbGFnLCBubWFwcywgbWFwcywgcHJldl9ldmVudCwgdXNlZF9tb3VzZV9tZW51LCBlbmRfdGlt ZSkKLSAgICAgaW50IGNvbW1hbmRmbGFnOwotICAgICBpbnQgbm1hcHM7Ci0gICAgIExpc3BfT2Jq ZWN0ICptYXBzOwotICAgICBMaXNwX09iamVjdCBwcmV2X2V2ZW50OwotICAgICBpbnQgKnVzZWRf bW91c2VfbWVudTsKLSAgICAgRU1BQ1NfVElNRSAqZW5kX3RpbWU7CityZWFkX2NoYXIgKGludCBj b21tYW5kZmxhZywgaW50IG5tYXBzLCBMaXNwX09iamVjdCAqbWFwcywgTGlzcF9PYmplY3QgcHJl dl9ldmVudCwgaW50ICp1c2VkX21vdXNlX21lbnUsIHN0cnVjdCB0aW1ldmFsICplbmRfdGltZSkK IHsKICAgdm9sYXRpbGUgTGlzcF9PYmplY3QgYzsKICAgaW50IGNvdW50LCBqbXBjb3VudDsKQEAg LTMzMTEsOCArMzI3OSw3IEBACiAgICBSZWNvcmQgaXQgZm9yIGVjaG9pbmcsIGZvciB0aGlzLWNv bW1hbmQta2V5cywgYW5kIHNvIG9uLiAgKi8KIAogc3RhdGljIHZvaWQKLXJlY29yZF9tZW51X2tl eSAoYykKLSAgICAgTGlzcF9PYmplY3QgYzsKK3JlY29yZF9tZW51X2tleSAoTGlzcF9PYmplY3Qg YykKIHsKICAgLyogV2lwZSB0aGUgZWNobyBhcmVhLiAgKi8KICAgY2xlYXJfbWVzc2FnZSAoMSwg MCk7CkBAIC0zMzQ2LDggKzMzMTMsNyBAQAogLyogUmV0dXJuIDEgaWYgc2hvdWxkIHJlY29nbml6 ZSBDIGFzICJ0aGUgaGVscCBjaGFyYWN0ZXIiLiAgKi8KIAogaW50Ci1oZWxwX2NoYXJfcCAoYykK LSAgICAgTGlzcF9PYmplY3QgYzsKK2hlbHBfY2hhcl9wIChMaXNwX09iamVjdCBjKQogewogICBM aXNwX09iamVjdCB0YWlsOwogCkBAIC0zMzYyLDggKzMzMjgsNyBAQAogLyogUmVjb3JkIHRoZSBp bnB1dCBldmVudCBDIGluIHZhcmlvdXMgd2F5cy4gICovCiAKIHN0YXRpYyB2b2lkCi1yZWNvcmRf Y2hhciAoYykKLSAgICAgTGlzcF9PYmplY3QgYzsKK3JlY29yZF9jaGFyIChMaXNwX09iamVjdCBj KQogewogICBpbnQgcmVjb3JkZWQgPSAwOwogCkBAIC0zNDk3LDggKzM0NjIsNyBAQAogfQogCiBM aXNwX09iamVjdAotcHJpbnRfaGVscCAob2JqZWN0KQotICAgICBMaXNwX09iamVjdCBvYmplY3Q7 CitwcmludF9oZWxwIChMaXNwX09iamVjdCBvYmplY3QpCiB7CiAgIHN0cnVjdCBidWZmZXIgKm9s ZCA9IGN1cnJlbnRfYnVmZmVyOwogICBGcHJpbmMgKG9iamVjdCwgUW5pbCk7CkBAIC0zNTE0LDE1 ICszNDc4LDEzIEBACiAgICBTZWUgcmVhZF9wcm9jZXNzX291dHB1dC4gICovCiAKIHN0YXRpYyB2 b2lkCi1zYXZlX2dldGNqbXAgKHRlbXApCi0gICAgIGptcF9idWYgdGVtcDsKK3NhdmVfZ2V0Y2pt cCAoam1wX2J1ZiB0ZW1wKQogewogICBiY29weSAoZ2V0Y2ptcCwgdGVtcCwgc2l6ZW9mIGdldGNq bXApOwogfQogCiBzdGF0aWMgdm9pZAotcmVzdG9yZV9nZXRjam1wICh0ZW1wKQotICAgICBqbXBf YnVmIHRlbXA7CityZXN0b3JlX2dldGNqbXAgKGptcF9idWYgdGVtcCkKIHsKICAgYmNvcHkgKHRl bXAsIGdldGNqbXAsIHNpemVvZiBnZXRjam1wKTsKIH0KQEAgLTM1MzQsOCArMzQ5Niw3IEBACiAv KiBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGV2ZW50cyBpbiB0aGUgcXVldWUgdGhhdCBy ZWFkLWNoYXIKICAgIHdvdWxkIHJldHVybi4gIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgYSByZWFk LWNoYXIgd291bGQgYmxvY2suICAqLwogc3RhdGljIGludAotcmVhZGFibGVfZXZlbnRzIChmbGFn cykKLSAgICAgaW50IGZsYWdzOworcmVhZGFibGVfZXZlbnRzIChpbnQgZmxhZ3MpCiB7CiAjaWZk ZWYgSEFWRV9EQlVTCiAgIC8qIENoZWNrIHdoZXRoZXIgYSBELUJ1cyBtZXNzYWdlIGhhcyBhcnJp dmVkLiAgKi8KQEAgLTM2MTEsOCArMzU3Miw3IEBACiBpbnQgc3RvcF9jaGFyYWN0ZXI7CiAKIHN0 YXRpYyBLQk9BUkQgKgotZXZlbnRfdG9fa2JvYXJkIChldmVudCkKLSAgICAgc3RydWN0IGlucHV0 X2V2ZW50ICpldmVudDsKK2V2ZW50X3RvX2tib2FyZCAoc3RydWN0IGlucHV0X2V2ZW50ICpldmVu dCkKIHsKICAgTGlzcF9PYmplY3QgZnJhbWU7CiAgIGZyYW1lID0gZXZlbnQtPmZyYW1lX29yX3dp bmRvdzsKQEAgLTM2MzYsOCArMzU5Niw3IEBACiAvKiBTdG9yZSBhbiBldmVudCBvYnRhaW5lZCBh dCBpbnRlcnJ1cHQgbGV2ZWwgaW50byBrYmRfYnVmZmVyLCBmaWZvICovCiAKIHZvaWQKLWtiZF9i dWZmZXJfc3RvcmVfZXZlbnQgKGV2ZW50KQotICAgICByZWdpc3RlciBzdHJ1Y3QgaW5wdXRfZXZl bnQgKmV2ZW50Owora2JkX2J1ZmZlcl9zdG9yZV9ldmVudCAocmVnaXN0ZXIgc3RydWN0IGlucHV0 X2V2ZW50ICpldmVudCkKIHsKICAga2JkX2J1ZmZlcl9zdG9yZV9ldmVudF9ob2xkIChldmVudCwg MCk7CiB9CkBAIC0zNjU1LDkgKzM2MTQsNyBAQAogICovCiAKIHZvaWQKLWtiZF9idWZmZXJfc3Rv cmVfZXZlbnRfaG9sZCAoZXZlbnQsIGhvbGRfcXVpdCkKLSAgICAgcmVnaXN0ZXIgc3RydWN0IGlu cHV0X2V2ZW50ICpldmVudDsKLSAgICAgc3RydWN0IGlucHV0X2V2ZW50ICpob2xkX3F1aXQ7Citr YmRfYnVmZmVyX3N0b3JlX2V2ZW50X2hvbGQgKHJlZ2lzdGVyIHN0cnVjdCBpbnB1dF9ldmVudCAq ZXZlbnQsIHN0cnVjdCBpbnB1dF9ldmVudCAqaG9sZF9xdWl0KQogewogICBpZiAoZXZlbnQtPmtp bmQgPT0gTk9fRVZFTlQpCiAgICAgYWJvcnQgKCk7CkBAIC0zNzc4LDggKzM3MzUsNyBAQAogLyog UHV0IGFuIGlucHV0IGV2ZW50IGJhY2sgaW4gdGhlIGhlYWQgb2YgdGhlIGV2ZW50IHF1ZXVlLiAg Ki8KIAogdm9pZAota2JkX2J1ZmZlcl91bmdldF9ldmVudCAoZXZlbnQpCi0gICAgIHJlZ2lzdGVy IHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQ7CitrYmRfYnVmZmVyX3VuZ2V0X2V2ZW50IChyZWdp c3RlciBzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50KQogewogICBpZiAoa2JkX2ZldGNoX3B0ciA9 PSBrYmRfYnVmZmVyKQogICAgIGtiZF9mZXRjaF9wdHIgPSBrYmRfYnVmZmVyICsgS0JEX0JVRkZF Ul9TSVpFOwpAQCAtMzgwNyw5ICszNzYzLDcgQEAKICAgIFZhbHVlIGlzIHRoZSBudW1iZXIgb2Yg aW5wdXRfZXZlbnRzIGdlbmVyYXRlZC4gICovCiAKIHZvaWQKLWdlbl9oZWxwX2V2ZW50IChoZWxw LCBmcmFtZSwgd2luZG93LCBvYmplY3QsIHBvcykKLSAgICAgTGlzcF9PYmplY3QgaGVscCwgZnJh bWUsIG9iamVjdCwgd2luZG93OwotICAgICBpbnQgcG9zOworZ2VuX2hlbHBfZXZlbnQgKExpc3Bf T2JqZWN0IGhlbHAsIExpc3BfT2JqZWN0IGZyYW1lLCBMaXNwX09iamVjdCB3aW5kb3csIExpc3Bf T2JqZWN0IG9iamVjdCwgaW50IHBvcykKIHsKICAgc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50Owog CkBAIC0zODI4LDggKzM3ODIsNyBAQAogLyogU3RvcmUgSEVMUF9FVkVOVHMgZm9yIEhFTFAgb24g RlJBTUUgaW4gdGhlIGlucHV0IHF1ZXVlLiAgKi8KIAogdm9pZAota2JkX2J1ZmZlcl9zdG9yZV9o ZWxwX2V2ZW50IChmcmFtZSwgaGVscCkKLSAgICAgTGlzcF9PYmplY3QgZnJhbWUsIGhlbHA7Citr YmRfYnVmZmVyX3N0b3JlX2hlbHBfZXZlbnQgKExpc3BfT2JqZWN0IGZyYW1lLCBMaXNwX09iamVj dCBoZWxwKQogewogICBzdHJ1Y3QgaW5wdXRfZXZlbnQgZXZlbnQ7CiAKQEAgLTM4NDYsNyArMzc5 OSw3IEBACiAvKiBEaXNjYXJkIGFueSBtb3VzZSBldmVudHMgaW4gdGhlIGV2ZW50IGJ1ZmZlciBi eSBzZXR0aW5nIHRoZW0gdG8KICAgIE5PX0VWRU5ULiAgKi8KIHZvaWQKLWRpc2NhcmRfbW91c2Vf ZXZlbnRzICgpCitkaXNjYXJkX21vdXNlX2V2ZW50cyAodm9pZCkKIHsKICAgc3RydWN0IGlucHV0 X2V2ZW50ICpzcDsKICAgZm9yIChzcCA9IGtiZF9mZXRjaF9wdHI7IHNwICE9IGtiZF9zdG9yZV9w dHI7IHNwKyspCkBAIC0zODc2LDggKzM4MjksNyBAQAogICAgYXJlIG5vIHJlYWwgaW5wdXQgZXZl bnRzLiAgKi8KIAogaW50Ci1rYmRfYnVmZmVyX2V2ZW50c193YWl0aW5nIChkaXNjYXJkKQotICAg ICBpbnQgZGlzY2FyZDsKK2tiZF9idWZmZXJfZXZlbnRzX3dhaXRpbmcgKGludCBkaXNjYXJkKQog ewogICBzdHJ1Y3QgaW5wdXRfZXZlbnQgKnNwOwogCkBAIC0zODk5LDggKzM4NTEsNyBAQAogLyog Q2xlYXIgaW5wdXQgZXZlbnQgRVZFTlQuICAqLwogCiBzdGF0aWMgSU5MSU5FIHZvaWQKLWNsZWFy X2V2ZW50IChldmVudCkKLSAgICAgc3RydWN0IGlucHV0X2V2ZW50ICpldmVudDsKK2NsZWFyX2V2 ZW50IChzdHJ1Y3QgaW5wdXRfZXZlbnQgKmV2ZW50KQogewogICBldmVudC0+a2luZCA9IE5PX0VW RU5UOwogfQpAQCAtMzkxMywxMCArMzg2NCw3IEBACiAgICBXZSBhbHdheXMgcmVhZCBhbmQgZGlz Y2FyZCBvbmUgZXZlbnQuICAqLwogCiBzdGF0aWMgTGlzcF9PYmplY3QKLWtiZF9idWZmZXJfZ2V0 X2V2ZW50IChrYnAsIHVzZWRfbW91c2VfbWVudSwgZW5kX3RpbWUpCi0gICAgIEtCT0FSRCAqKmti cDsKLSAgICAgaW50ICp1c2VkX21vdXNlX21lbnU7Ci0gICAgIEVNQUNTX1RJTUUgKmVuZF90aW1l Owora2JkX2J1ZmZlcl9nZXRfZXZlbnQgKEtCT0FSRCAqKmticCwgaW50ICp1c2VkX21vdXNlX21l bnUsIHN0cnVjdCB0aW1ldmFsICplbmRfdGltZSkKIHsKICAgcmVnaXN0ZXIgaW50IGM7CiAgIExp c3BfT2JqZWN0IG9iajsKQEAgLTQyODMsOCArNDIzMSw3IEBACiAgICB0aGVuIHJldHVybiwgd2l0 aG91dCByZWFkaW5nIGFueSB1c2VyLXZpc2libGUgZXZlbnRzLiAgKi8KIAogdm9pZAotc3dhbGxv d19ldmVudHMgKGRvX2Rpc3BsYXkpCi0gICAgIGludCBkb19kaXNwbGF5Oworc3dhbGxvd19ldmVu dHMgKGludCBkb19kaXNwbGF5KQogewogICBpbnQgb2xkX3RpbWVyc19ydW47CiAKQEAgLTQzMzQs NyArNDI4MSw3IEBACiAgICBmb3IgdGhlIHNha2Ugb2YgcnVubmluZyBpZGxlLXRpbWUgdGltZXJz LiAgKi8KIAogc3RhdGljIHZvaWQKLXRpbWVyX3N0YXJ0X2lkbGUgKCkKK3RpbWVyX3N0YXJ0X2lk bGUgKHZvaWQpCiB7CiAgIExpc3BfT2JqZWN0IHRpbWVyczsKIApAQCAtNDM2Miw3ICs0MzA5LDcg QEAKIC8qIFJlY29yZCB0aGF0IEVtYWNzIGlzIG5vIGxvbmdlciBpZGxlLCBzbyBzdG9wIHJ1bm5p bmcgaWRsZS10aW1lIHRpbWVycy4gICovCiAKIHN0YXRpYyB2b2lkCi10aW1lcl9zdG9wX2lkbGUg KCkKK3RpbWVyX3N0b3BfaWRsZSAodm9pZCkKIHsKICAgRU1BQ1NfU0VUX1NFQ1NfVVNFQ1MgKHRp bWVyX2lkbGVuZXNzX3N0YXJ0X3RpbWUsIC0xLCAtMSk7CiB9CkBAIC00MzcwLDcgKzQzMTcsNyBA QAogLyogUmVzdW1lIGlkbGUgdGltZXIgZnJvbSBsYXN0IGlkbGUgc3RhcnQgdGltZS4gICovCiAK IHN0YXRpYyB2b2lkCi10aW1lcl9yZXN1bWVfaWRsZSAoKQordGltZXJfcmVzdW1lX2lkbGUgKHZv aWQpCiB7CiAgIGlmICghIEVNQUNTX1RJTUVfTkVHX1AgKHRpbWVyX2lkbGVuZXNzX3N0YXJ0X3Rp bWUpKQogICAgIHJldHVybjsKQEAgLTQ0MDEsNyArNDM0OCw3IEBACiAgICBzaG91bGQgYmUgZG9u ZS4gICovCiAKIHN0YXRpYyBFTUFDU19USU1FCi10aW1lcl9jaGVja18yICgpCit0aW1lcl9jaGVj a18yICh2b2lkKQogewogICBFTUFDU19USU1FIG5leHR0aW1lOwogICBFTUFDU19USU1FIG5vdywg aWRsZW5lc3Nfbm93OwpAQCAtNDYwMiw4ICs0NTQ5LDcgQEAKICAgIE5vdyB3ZSBhbHdheXMgcnVu IHRpbWVycyBkaXJlY3RseS4gICovCiAKIEVNQUNTX1RJTUUKLXRpbWVyX2NoZWNrIChkb19pdF9u b3cpCi0gICAgIGludCBkb19pdF9ub3c7Cit0aW1lcl9jaGVjayAoaW50IGRvX2l0X25vdykKIHsK ICAgRU1BQ1NfVElNRSBuZXh0dGltZTsKIApAQCAtNTI1NCwxMCArNTIwMCw3IEBACiAvKiBSZXR1 cm4gcG9zaXRpb24gb2YgYSBtb3VzZSBjbGljayBvciB3aGVlbCBldmVudCAqLwogCiBzdGF0aWMg TGlzcF9PYmplY3QKLW1ha2VfbGlzcHlfcG9zaXRpb24gKGYsIHgsIHksIHRpbWUpCi0gICAgIHN0 cnVjdCBmcmFtZSAqZjsKLSAgICAgTGlzcF9PYmplY3QgKngsICp5OwotICAgICB1bnNpZ25lZCBs b25nIHRpbWU7CittYWtlX2xpc3B5X3Bvc2l0aW9uIChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2Jq ZWN0ICp4LCBMaXNwX09iamVjdCAqeSwgbG9uZyB1bnNpZ25lZCBpbnQgdGltZSkKIHsKICAgTGlz cF9PYmplY3Qgd2luZG93OwogICBlbnVtIHdpbmRvd19wYXJ0IHBhcnQ7CkBAIC01NDQ0LDggKzUz ODcsNyBAQAogICAgaW4gb3JkZXIgdG8gYnVpbGQgZHJhZyBldmVudHMgd2hlbiB0aGUgYnV0dG9u IGlzIHJlbGVhc2VkLiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1tYWtlX2xpc3B5X2V2ZW50 IChldmVudCkKLSAgICAgc3RydWN0IGlucHV0X2V2ZW50ICpldmVudDsKK21ha2VfbGlzcHlfZXZl bnQgKHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQpCiB7CiAgIGludCBpOwogCkBAIC02MTUyLDEy ICs2MDk0LDcgQEAKICNpZiBkZWZpbmVkKEhBVkVfTU9VU0UpIHx8IGRlZmluZWQoSEFWRV9HUE0p CiAKIHN0YXRpYyBMaXNwX09iamVjdAotbWFrZV9saXNweV9tb3ZlbWVudCAoZnJhbWUsIGJhcl93 aW5kb3csIHBhcnQsIHgsIHksIHRpbWUpCi0gICAgIEZSQU1FX1BUUiBmcmFtZTsKLSAgICAgTGlz cF9PYmplY3QgYmFyX3dpbmRvdzsKLSAgICAgZW51bSBzY3JvbGxfYmFyX3BhcnQgcGFydDsKLSAg ICAgTGlzcF9PYmplY3QgeCwgeTsKLSAgICAgdW5zaWduZWQgbG9uZyB0aW1lOworbWFrZV9saXNw eV9tb3ZlbWVudCAoRlJBTUVfUFRSIGZyYW1lLCBMaXNwX09iamVjdCBiYXJfd2luZG93LCBlbnVt IHNjcm9sbF9iYXJfcGFydCBwYXJ0LCBMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCB5LCBsb25n IHVuc2lnbmVkIGludCB0aW1lKQogewogICAvKiBJcyBpdCBhIHNjcm9sbCBiYXIgbW92ZW1lbnQ/ ICAqLwogICBpZiAoZnJhbWUgJiYgISBOSUxQIChiYXJfd2luZG93KSkKQEAgLTYxOTIsOCArNjEy OSw3IEBACiAKIC8qIENvbnN0cnVjdCBhIHN3aXRjaCBmcmFtZSBldmVudC4gICovCiBzdGF0aWMg TGlzcF9PYmplY3QKLW1ha2VfbGlzcHlfc3dpdGNoX2ZyYW1lIChmcmFtZSkKLSAgICAgTGlzcF9P YmplY3QgZnJhbWU7CittYWtlX2xpc3B5X3N3aXRjaF9mcmFtZSAoTGlzcF9PYmplY3QgZnJhbWUp CiB7CiAgIHJldHVybiBGY29ucyAoUXN3aXRjaF9mcmFtZSwgRmNvbnMgKGZyYW1lLCBRbmlsKSk7 CiB9CkBAIC02MjA5LDkgKzYxNDUsNyBAQAogICAgVGhpcyBkb2Vzbid0IHVzZSBhbnkgY2FjaGVz LiAgKi8KIAogc3RhdGljIGludAotcGFyc2VfbW9kaWZpZXJzX3VuY2FjaGVkIChzeW1ib2wsIG1v ZGlmaWVyX2VuZCkKLSAgICAgTGlzcF9PYmplY3Qgc3ltYm9sOwotICAgICBpbnQgKm1vZGlmaWVy X2VuZDsKK3BhcnNlX21vZGlmaWVyc191bmNhY2hlZCAoTGlzcF9PYmplY3Qgc3ltYm9sLCBpbnQg Km1vZGlmaWVyX2VuZCkKIHsKICAgTGlzcF9PYmplY3QgbmFtZTsKICAgaW50IGk7CkBAIC02MzIx LDEwICs2MjU1LDcgQEAKICAgIHByZXBlbmRlZCB0byB0aGUgc3RyaW5nIEJBU0VbMC4uQkFTRV9M RU4tMV0uCiAgICBUaGlzIGRvZXNuJ3QgdXNlIGFueSBjYWNoZXMuICAqLwogc3RhdGljIExpc3Bf T2JqZWN0Ci1hcHBseV9tb2RpZmllcnNfdW5jYWNoZWQgKG1vZGlmaWVycywgYmFzZSwgYmFzZV9s ZW4sIGJhc2VfbGVuX2J5dGUpCi0gICAgIGludCBtb2RpZmllcnM7Ci0gICAgIGNoYXIgKmJhc2U7 Ci0gICAgIGludCBiYXNlX2xlbiwgYmFzZV9sZW5fYnl0ZTsKK2FwcGx5X21vZGlmaWVyc191bmNh Y2hlZCAoaW50IG1vZGlmaWVycywgY2hhciAqYmFzZSwgaW50IGJhc2VfbGVuLCBpbnQgYmFzZV9s ZW5fYnl0ZSkKIHsKICAgLyogU2luY2UgQkFTRSBjb3VsZCBjb250YWluIG51bGxzLCB3ZSBjYW4n dCB1c2UgaW50ZXJuIGhlcmU7IHdlIGhhdmUKICAgICAgdG8gdXNlIEZpbnRlcm4sIHdoaWNoIGV4 cGVjdHMgYSBnZW51aW5lIExpc3BfU3RyaW5nLCBhbmQga2VlcHMgYQpAQCAtNjM4Myw4ICs2MzE0 LDcgQEAKIAogLyogUmV0dXJuIHRoZSBsaXN0IG9mIG1vZGlmaWVyIHN5bWJvbHMgY29ycmVzcG9u ZGluZyB0byB0aGUgbWFzayBNT0RJRklFUlMuICAqLwogc3RhdGljIExpc3BfT2JqZWN0Ci1saXNw eV9tb2RpZmllcl9saXN0IChtb2RpZmllcnMpCi0gICAgIGludCBtb2RpZmllcnM7CitsaXNweV9t b2RpZmllcl9saXN0IChpbnQgbW9kaWZpZXJzKQogewogICBMaXNwX09iamVjdCBtb2RpZmllcl9s aXN0OwogICBpbnQgaTsKQEAgLTY0MDksOCArNjMzOSw3IEBACiAjZGVmaW5lIEtFWV9UT19DSEFS KGspIChYSU5UIChrKSAmICgoMSA8PCBDSEFSQUNURVJCSVRTKSAtIDEpKQogCiBMaXNwX09iamVj dAotcGFyc2VfbW9kaWZpZXJzIChzeW1ib2wpCi0gICAgIExpc3BfT2JqZWN0IHN5bWJvbDsKK3Bh cnNlX21vZGlmaWVycyAoTGlzcF9PYmplY3Qgc3ltYm9sKQogewogICBMaXNwX09iamVjdCBlbGVt ZW50czsKIApAQCAtNjQ3OSw5ICs2NDA4LDcgQEAKICAgIGFwcGx5X21vZGlmaWVycyBjb3BpZXMg dGhlIHZhbHVlIG9mIEJBU0UncyBRZXZlbnRfa2luZCBwcm9wZXJ0eSB0bwogICAgdGhlIG1vZGlm aWVkIHN5bWJvbC4gICovCiBzdGF0aWMgTGlzcF9PYmplY3QKLWFwcGx5X21vZGlmaWVycyAobW9k aWZpZXJzLCBiYXNlKQotICAgICBpbnQgbW9kaWZpZXJzOwotICAgICBMaXNwX09iamVjdCBiYXNl OworYXBwbHlfbW9kaWZpZXJzIChpbnQgbW9kaWZpZXJzLCBMaXNwX09iamVjdCBiYXNlKQogewog ICBMaXNwX09iamVjdCBjYWNoZSwgaW5kZXgsIGVudHJ5LCBuZXdfc3ltYm9sOwogCkBAIC02NTUw LDggKzY0NzcsNyBAQAogICAgYW5kIE0tQy1mb28gZW5kIHVwIGJlaW5nIGVxdWl2YWxlbnQgaW4g dGhlIGtleW1hcC4gICovCiAKIExpc3BfT2JqZWN0Ci1yZW9yZGVyX21vZGlmaWVycyAoc3ltYm9s KQotICAgICBMaXNwX09iamVjdCBzeW1ib2w7CityZW9yZGVyX21vZGlmaWVycyAoTGlzcF9PYmpl Y3Qgc3ltYm9sKQogewogICAvKiBJdCdzIGhvcGVmdWxseSBva2F5IHRvIHdyaXRlIHRoZSBjb2Rl IHRoaXMgd2F5LCBzaW5jZSBldmVyeXRoaW5nCiAgICAgIHdpbGwgc29vbiBiZSBpbiBjYWNoZXMs IGFuZCBubyBjb25zaW5nIHdpbGwgYmUgZG9uZSBhdCBhbGwuICAqLwpAQCAtNjU5NiwxNSArNjUy Miw3IEBACiAgICBpbiB0aGUgc3ltYm9sJ3MgbmFtZS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVj dAotbW9kaWZ5X2V2ZW50X3N5bWJvbCAoc3ltYm9sX251bSwgbW9kaWZpZXJzLCBzeW1ib2xfa2lu ZCwgbmFtZV9hbGlzdF9vcl9zdGVtLAotICAgICAgICAgICAgICAgICAgICAgbmFtZV90YWJsZSwg c3ltYm9sX3RhYmxlLCB0YWJsZV9zaXplKQotICAgICBpbnQgc3ltYm9sX251bTsKLSAgICAgdW5z aWduZWQgbW9kaWZpZXJzOwotICAgICBMaXNwX09iamVjdCBzeW1ib2xfa2luZDsKLSAgICAgTGlz cF9PYmplY3QgbmFtZV9hbGlzdF9vcl9zdGVtOwotICAgICBjaGFyICoqbmFtZV90YWJsZTsKLSAg ICAgTGlzcF9PYmplY3QgKnN5bWJvbF90YWJsZTsKLSAgICAgdW5zaWduZWQgaW50IHRhYmxlX3Np emU7Cittb2RpZnlfZXZlbnRfc3ltYm9sIChpbnQgc3ltYm9sX251bSwgdW5zaWduZWQgaW50IG1v ZGlmaWVycywgTGlzcF9PYmplY3Qgc3ltYm9sX2tpbmQsIExpc3BfT2JqZWN0IG5hbWVfYWxpc3Rf b3Jfc3RlbSwgY2hhciAqKm5hbWVfdGFibGUsIExpc3BfT2JqZWN0ICpzeW1ib2xfdGFibGUsIHVu c2lnbmVkIGludCB0YWJsZV9zaXplKQogewogICBMaXNwX09iamVjdCB2YWx1ZTsKICAgTGlzcF9P YmplY3Qgc3ltYm9sX2ludDsKQEAgLTY4NDEsOCArNjc1OSw3IEBACiAgICBidXQgaXQgY2FuIGJl IGEgTHVjaWQtc3R5bGUgZXZlbnQgdHlwZSBsaXN0LiAgKi8KIAogaW50Ci1sdWNpZF9ldmVudF90 eXBlX2xpc3RfcCAob2JqZWN0KQotICAgICBMaXNwX09iamVjdCBvYmplY3Q7CitsdWNpZF9ldmVu dF90eXBlX2xpc3RfcCAoTGlzcF9PYmplY3Qgb2JqZWN0KQogewogICBMaXNwX09iamVjdCB0YWls OwogCkBAIC02ODc5LDkgKzY3OTYsNyBAQAogICAgbW92ZW1lbnRzIGFuZCB0b29sa2l0IHNjcm9s bCBiYXIgdGh1bWIgZHJhZ3MuICovCiAKIHN0YXRpYyB2b2lkCi1nZXRfaW5wdXRfcGVuZGluZyAo YWRkciwgZmxhZ3MpCi0gICAgIGludCAqYWRkcjsKLSAgICAgaW50IGZsYWdzOworZ2V0X2lucHV0 X3BlbmRpbmcgKGludCAqYWRkciwgaW50IGZsYWdzKQogewogICAvKiBGaXJzdCBvZiBhbGwsIGhh dmUgd2UgYWxyZWFkeSBjb3VudGVkIHNvbWUgaW5wdXQ/ICAqLwogICAqYWRkciA9ICghTklMUCAo VnF1aXRfZmxhZykgfHwgcmVhZGFibGVfZXZlbnRzIChmbGFncykpOwpAQCAtNjg5OCw4ICs2ODEz LDcgQEAKIC8qIEludGVyZmFjZSB0byByZWFkX2F2YWlsX2lucHV0LCBibG9ja2luZyBTSUdJTyBv ciBTSUdBTFJNIGlmIG5lY2Vzc2FyeS4gICovCiAKIHZvaWQKLWdvYmJsZV9pbnB1dCAoZXhwZWN0 ZWQpCi0gICAgIGludCBleHBlY3RlZDsKK2dvYmJsZV9pbnB1dCAoaW50IGV4cGVjdGVkKQogewog I2lmZGVmIEhBVkVfREJVUwogICAvKiBSZWFkIEQtQnVzIG1lc3NhZ2VzLiAgKi8KQEAgLTY5MzYs NyArNjg1MCw3IEBACiAgICBzbyB0aGF0IHJlYWRfa2V5X3NlcXVlbmNlIHdpbGwgbm90aWNlIHRo ZSBuZXcgY3VycmVudCBidWZmZXIuICAqLwogCiB2b2lkCi1yZWNvcmRfYXN5bmNoX2J1ZmZlcl9j aGFuZ2UgKCkKK3JlY29yZF9hc3luY2hfYnVmZmVyX2NoYW5nZSAodm9pZCkKIHsKICAgc3RydWN0 IGlucHV0X2V2ZW50IGV2ZW50OwogICBMaXNwX09iamVjdCB0ZW07CkBAIC02OTg2LDggKzY5MDAs NyBAQAogICAgdGhpcyBpcyBhIGJhZCB0aW1lIHRvIHRyeSB0byByZWFkIGlucHV0LiAgKi8KIAog c3RhdGljIGludAotcmVhZF9hdmFpbF9pbnB1dCAoZXhwZWN0ZWQpCi0gICAgIGludCBleHBlY3Rl ZDsKK3JlYWRfYXZhaWxfaW5wdXQgKGludCBleHBlY3RlZCkKIHsKICAgaW50IG5yZWFkID0gMDsK ICAgaW50IGVyciA9IDA7CkBAIC03MzEzLDcgKzcyMjYsNyBAQAogfQogDAogdm9pZAotaGFuZGxl X2FzeW5jX2lucHV0ICgpCitoYW5kbGVfYXN5bmNfaW5wdXQgKHZvaWQpCiB7CiAgIGludGVycnVw dF9pbnB1dF9wZW5kaW5nID0gMDsKICNpZmRlZiBTWU5DX0lOUFVUCkBAIC03MzQwLDcgKzcyNTMs NyBAQAogfQogCiB2b2lkCi1wcm9jZXNzX3BlbmRpbmdfc2lnbmFscyAoKQorcHJvY2Vzc19wZW5k aW5nX3NpZ25hbHMgKHZvaWQpCiB7CiAgIGlmIChpbnRlcnJ1cHRfaW5wdXRfcGVuZGluZykKICAg ICBoYW5kbGVfYXN5bmNfaW5wdXQgKCk7CkBAIC03MzUxLDggKzcyNjQsNyBAQAogLyogTm90ZSBT SUdJTyBoYXMgYmVlbiB1bmRlZidkIGlmIEZJT05SRUFEIGlzIG1pc3NpbmcuICAqLwogCiBzdGF0 aWMgU0lHVFlQRQotaW5wdXRfYXZhaWxhYmxlX3NpZ25hbCAoc2lnbm8pCi0gICAgIGludCBzaWdu bzsKK2lucHV0X2F2YWlsYWJsZV9zaWduYWwgKGludCBzaWdubykKIHsKICAgLyogTXVzdCBwcmVz ZXJ2ZSBtYWluIHByb2dyYW0ncyB2YWx1ZSBvZiBlcnJuby4gICovCiAgIGludCBvbGRfZXJybm8g PSBlcnJubzsKQEAgLTczODEsNyArNzI5Myw3IEBACiAgICBkZWFsaW5nIHdpdGgsIHdpdGhvdXQg YXNzdW1pbmcgdGhhdCBldmVyeSBmaWxlIHdoaWNoIHVzZXMKICAgIFVOQkxPQ0tfSU5QVVQgYWxz byBoYXMgI2luY2x1ZGVkIHRoZSBmaWxlcyBuZWNlc3NhcnkgdG8gZ2V0IFNJR0lPLiAqLwogdm9p ZAotcmVpbnZva2VfaW5wdXRfc2lnbmFsICgpCityZWludm9rZV9pbnB1dF9zaWduYWwgKHZvaWQp CiB7CiAjaWZkZWYgU0lHSU8KICAgaGFuZGxlX2FzeW5jX2lucHV0ICgpOwpAQCAtNzQxMCw5ICs3 MzIyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNlcl9zaWduYWxfaW5mbyAqdXNlcl9zaWduYWxzID0g TlVMTDsKIAogdm9pZAotYWRkX3VzZXJfc2lnbmFsIChzaWcsIG5hbWUpCi0gICAgIGludCBzaWc7 Ci0gICAgIGNvbnN0IGNoYXIgKm5hbWU7CithZGRfdXNlcl9zaWduYWwgKGludCBzaWcsIGNvbnN0 IGNoYXIgKm5hbWUpCiB7CiAgIHN0cnVjdCB1c2VyX3NpZ25hbF9pbmZvICpwOwogCkBAIC03NDMy LDggKzczNDIsNyBAQAogfQogCiBzdGF0aWMgU0lHVFlQRQotaGFuZGxlX3VzZXJfc2lnbmFsIChz aWcpCi0gICAgIGludCBzaWc7CitoYW5kbGVfdXNlcl9zaWduYWwgKGludCBzaWcpCiB7CiAgIGlu dCBvbGRfZXJybm8gPSBlcnJubzsKICAgc3RydWN0IHVzZXJfc2lnbmFsX2luZm8gKnA7CkBAIC03 NDYyLDggKzczNzEsNyBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1maW5kX3VzZXJfc2lnbmFsX25h bWUgKHNpZykKLSAgICAgaW50IHNpZzsKK2ZpbmRfdXNlcl9zaWduYWxfbmFtZSAoaW50IHNpZykK IHsKICAgc3RydWN0IHVzZXJfc2lnbmFsX2luZm8gKnA7CiAKQEAgLTc0NzUsNyArNzM4Myw3IEBA CiB9CiAKIHN0YXRpYyBpbnQKLXN0b3JlX3VzZXJfc2lnbmFsX2V2ZW50cyAoKQorc3RvcmVfdXNl cl9zaWduYWxfZXZlbnRzICh2b2lkKQogewogICBzdHJ1Y3QgdXNlcl9zaWduYWxfaW5mbyAqcDsK ICAgc3RydWN0IGlucHV0X2V2ZW50IGJ1ZjsKQEAgLTc1MjUsOCArNzQzMyw3IEBACiAgICBPTEQg aXMgYW4gb2xkIHZlY3RvciB3ZSBjYW4gb3B0aW9uYWxseSByZXVzZSwgb3IgbmlsLiAgKi8KIAog TGlzcF9PYmplY3QKLW1lbnVfYmFyX2l0ZW1zIChvbGQpCi0gICAgIExpc3BfT2JqZWN0IG9sZDsK K21lbnVfYmFyX2l0ZW1zIChMaXNwX09iamVjdCBvbGQpCiB7CiAgIC8qIFRoZSBudW1iZXIgb2Yg a2V5bWFwcyB3ZSdyZSBzY2FubmluZyByaWdodCBub3csIGFuZCB0aGUgbnVtYmVyIG9mCiAgICAg IGtleW1hcHMgd2UgaGF2ZSBhbGxvY2F0ZWQgc3BhY2UgZm9yLiAgKi8KQEAgLTc2NjYsOSArNzU3 Myw3IEBACiBMaXNwX09iamVjdCBpdGVtX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyB2b2lkCi1tZW51 X2Jhcl9pdGVtIChrZXksIGl0ZW0sIGR1bW15MSwgZHVtbXkyKQotICAgICBMaXNwX09iamVjdCBr ZXksIGl0ZW0sIGR1bW15MTsKLSAgICAgdm9pZCAqZHVtbXkyOworbWVudV9iYXJfaXRlbSAoTGlz cF9PYmplY3Qga2V5LCBMaXNwX09iamVjdCBpdGVtLCBMaXNwX09iamVjdCBkdW1teTEsIHZvaWQg KmR1bW15MikKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKICAgaW50IGk7CkBAIC03NzQzLDgg Kzc2NDgsNyBAQAogDAogIC8qIFRoaXMgaXMgdXNlZCBhcyB0aGUgaGFuZGxlciB3aGVuIGNhbGxp bmcgbWVudV9pdGVtX2V2YWxfcHJvcGVydHkuICAqLwogc3RhdGljIExpc3BfT2JqZWN0Ci1tZW51 X2l0ZW1fZXZhbF9wcm9wZXJ0eV8xIChhcmcpCi0gICAgIExpc3BfT2JqZWN0IGFyZzsKK21lbnVf aXRlbV9ldmFsX3Byb3BlcnR5XzEgKExpc3BfT2JqZWN0IGFyZykKIHsKICAgLyogSWYgd2UgZ290 IGEgcXVpdCBmcm9tIHdpdGhpbiB0aGUgbWVudSBjb21wdXRhdGlvbiwKICAgICAgcXVpdCBhbGwg dGhlIHdheSBvdXQgb2YgaXQuICBUaGlzIHRha2VzIGNhcmUgb2YgQy1dIGluIHRoZSBkZWJ1Z2dl ci4gICovCkBAIC03NzU3LDggKzc2NjEsNyBAQAogLyogRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBh bmQgcmV0dXJuIHRoZSByZXN1bHQgKG9yIG5pbCBpZiBzb21ldGhpbmcKICAgIHdlbnQgd3Jvbmcp LiAgVXNlZCB0byBldmFsdWF0ZSBkeW5hbWljIHBhcnRzIG9mIG1lbnUgaXRlbXMuICAqLwogTGlz cF9PYmplY3QKLW1lbnVfaXRlbV9ldmFsX3Byb3BlcnR5IChzZXhwcikKLSAgICAgTGlzcF9PYmpl Y3Qgc2V4cHI7CittZW51X2l0ZW1fZXZhbF9wcm9wZXJ0eSAoTGlzcF9PYmplY3Qgc2V4cHIpCiB7 CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAgIExpc3BfT2JqZWN0IHZhbDsKQEAg LTc3NzgsOSArNzY4MSw3IEBACiAgICBvdGhlcndpc2UuICAqLwogCiBpbnQKLXBhcnNlX21lbnVf aXRlbSAoaXRlbSwgaW5tZW51YmFyKQotICAgICBMaXNwX09iamVjdCBpdGVtOwotICAgICBpbnQg aW5tZW51YmFyOworcGFyc2VfbWVudV9pdGVtIChMaXNwX09iamVjdCBpdGVtLCBpbnQgaW5tZW51 YmFyKQogewogICBMaXNwX09iamVjdCBkZWYsIHRlbSwgaXRlbV9zdHJpbmcsIHN0YXJ0OwogICBM aXNwX09iamVjdCBmaWx0ZXI7CkBAIC04MDg4LDkgKzc5ODksNyBAQAogICAgdG9vbCBiYXIgaXRl bXMgZm91bmQuICAqLwogCiBMaXNwX09iamVjdAotdG9vbF9iYXJfaXRlbXMgKHJldXNlLCBuaXRl bXMpCi0gICAgIExpc3BfT2JqZWN0IHJldXNlOwotICAgICBpbnQgKm5pdGVtczsKK3Rvb2xfYmFy X2l0ZW1zIChMaXNwX09iamVjdCByZXVzZSwgaW50ICpuaXRlbXMpCiB7CiAgIExpc3BfT2JqZWN0 ICptYXBzOwogICBpbnQgbm1hcHMsIGk7CkBAIC04MTY4LDkgKzgwNjcsNyBAQAogLyogUHJvY2Vz cyB0aGUgZGVmaW5pdGlvbiBvZiBLRVkgd2hpY2ggaXMgREVGLiAgKi8KIAogc3RhdGljIHZvaWQK LXByb2Nlc3NfdG9vbF9iYXJfaXRlbSAoa2V5LCBkZWYsIGRhdGEsIGFyZ3MpCi0gICAgIExpc3Bf T2JqZWN0IGtleSwgZGVmLCBkYXRhOwotICAgICB2b2lkICphcmdzOworcHJvY2Vzc190b29sX2Jh cl9pdGVtIChMaXNwX09iamVjdCBrZXksIExpc3BfT2JqZWN0IGRlZiwgTGlzcF9PYmplY3QgZGF0 YSwgdm9pZCAqYXJncykKIHsKICAgaW50IGk7CiAgIGV4dGVybiBMaXNwX09iamVjdCBRdW5kZWZp bmVkOwpAQCAtODI1NSw4ICs4MTUyLDcgQEAKICAgIEEgdGV4dCBsYWJlbCB0byBzaG93IHdpdGgg dGhlIHRvb2wgYmFyIGJ1dHRvbiBpZiBsYWJlbHMgYXJlIGVuYWJsZWQuICAqLwogCiBzdGF0aWMg aW50Ci1wYXJzZV90b29sX2Jhcl9pdGVtIChrZXksIGl0ZW0pCi0gICAgIExpc3BfT2JqZWN0IGtl eSwgaXRlbTsKK3BhcnNlX3Rvb2xfYmFyX2l0ZW0gKExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmpl Y3QgaXRlbSkKIHsKICAgLyogQWNjZXNzIHNsb3Qgd2l0aCBpbmRleCBJRFggb2YgdmVjdG9yIHRv b2xfYmFyX2l0ZW1fcHJvcGVydGllcy4gICovCiAjZGVmaW5lIFBST1AoSURYKSBYVkVDVE9SICh0 b29sX2Jhcl9pdGVtX3Byb3BlcnRpZXMpLT5jb250ZW50c1tJRFhdCkBAIC04NDQ4LDggKzgzNDQs NyBAQAogICAgdGhhdCBjYW4gYmUgcmV1c2VkLiAgKi8KIAogc3RhdGljIHZvaWQKLWluaXRfdG9v bF9iYXJfaXRlbXMgKHJldXNlKQotICAgICBMaXNwX09iamVjdCByZXVzZTsKK2luaXRfdG9vbF9i YXJfaXRlbXMgKExpc3BfT2JqZWN0IHJldXNlKQogewogICBpZiAoVkVDVE9SUCAocmV1c2UpKQog ICAgIHRvb2xfYmFyX2l0ZW1zX3ZlY3RvciA9IHJldXNlOwpAQCAtODQ2Myw3ICs4MzU4LDcgQEAK ICAgIHRvb2xfYmFyX2l0ZW1fcHJvcGVydGllcyAqLwogCiBzdGF0aWMgdm9pZAotYXBwZW5kX3Rv b2xfYmFyX2l0ZW0gKCkKK2FwcGVuZF90b29sX2Jhcl9pdGVtICh2b2lkKQogewogICBMaXNwX09i amVjdCAqdG8sICpmcm9tOwogCkBAIC04NTA3LDExICs4NDAyLDcgQEAKICAgIGFuZCBkbyBhdXRv LXNhdmluZyBpbiB0aGUgaW5uZXIgY2FsbCBvZiByZWFkX2NoYXIuICovCiAKIHN0YXRpYyBMaXNw X09iamVjdAotcmVhZF9jaGFyX3hfbWVudV9wcm9tcHQgKG5tYXBzLCBtYXBzLCBwcmV2X2V2ZW50 LCB1c2VkX21vdXNlX21lbnUpCi0gICAgIGludCBubWFwczsKLSAgICAgTGlzcF9PYmplY3QgKm1h cHM7Ci0gICAgIExpc3BfT2JqZWN0IHByZXZfZXZlbnQ7Ci0gICAgIGludCAqdXNlZF9tb3VzZV9t ZW51OworcmVhZF9jaGFyX3hfbWVudV9wcm9tcHQgKGludCBubWFwcywgTGlzcF9PYmplY3QgKm1h cHMsIExpc3BfT2JqZWN0IHByZXZfZXZlbnQsIGludCAqdXNlZF9tb3VzZV9tZW51KQogewogICBp bnQgbWFwbm87CiAKQEAgLTg1OTUsMTAgKzg0ODYsNyBAQAogc3RhdGljIGludCByZWFkX2NoYXJf bWluaWJ1Zl9tZW51X3dpZHRoOwogCiBzdGF0aWMgTGlzcF9PYmplY3QKLXJlYWRfY2hhcl9taW5p YnVmX21lbnVfcHJvbXB0IChjb21tYW5kZmxhZywgbm1hcHMsIG1hcHMpCi0gICAgIGludCBjb21t YW5kZmxhZyA7Ci0gICAgIGludCBubWFwczsKLSAgICAgTGlzcF9PYmplY3QgKm1hcHM7CityZWFk X2NoYXJfbWluaWJ1Zl9tZW51X3Byb21wdCAoaW50IGNvbW1hbmRmbGFnLCBpbnQgbm1hcHMsIExp c3BfT2JqZWN0ICptYXBzKQogewogICBpbnQgbWFwbm87CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0 IG5hbWU7CkBAIC04ODYzLDEwICs4NzUxLDcgQEAKICAgIE5FWFQgbWF5IGJlIHRoZSBzYW1lIGFy cmF5IGFzIENVUlJFTlQuICAqLwogCiBzdGF0aWMgaW50Ci1mb2xsb3dfa2V5IChrZXksIG5tYXBz LCBjdXJyZW50LCBkZWZzLCBuZXh0KQotICAgICBMaXNwX09iamVjdCBrZXk7Ci0gICAgIExpc3Bf T2JqZWN0ICpjdXJyZW50LCAqZGVmcywgKm5leHQ7Ci0gICAgIGludCBubWFwczsKK2ZvbGxvd19r ZXkgKExpc3BfT2JqZWN0IGtleSwgaW50IG5tYXBzLCBMaXNwX09iamVjdCAqY3VycmVudCwgTGlz cF9PYmplY3QgKmRlZnMsIExpc3BfT2JqZWN0ICpuZXh0KQogewogICBpbnQgaSwgZmlyc3RfYmlu ZGluZzsKIApAQCAtODkxNSw5ICs4ODAwLDcgQEAKICAgIHRoYXQgaXQgaXMgaW5kZWVkIGEgdmVj dG9yKS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotYWNjZXNzX2tleW1hcF9rZXlyZW1hcCAo bWFwLCBrZXksIHByb21wdCwgZG9fZnVuY2FsbCkKLSAgICAgTGlzcF9PYmplY3QgbWFwLCBrZXks IHByb21wdDsKLSAgICAgaW50IGRvX2Z1bmNhbGw7CithY2Nlc3Nfa2V5bWFwX2tleXJlbWFwIChM aXNwX09iamVjdCBtYXAsIExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgcHJvbXB0LCBpbnQg ZG9fZnVuY2FsbCkKIHsKICAgTGlzcF9PYmplY3QgbmV4dDsKIApAQCAtODk2OCwxMCArODg1MSw4 IEBACiAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZW1hcHBpbmcgYWN0 dWFsbHkgdG9vayBwbGFjZS4gICovCiAKIHN0YXRpYyBpbnQKLWtleXJlbWFwX3N0ZXAgKGtleWJ1 ZiwgYnVmc2l6ZSwgZmtleSwgaW5wdXQsIGRvaXQsIGRpZmYsIHByb21wdCkKLSAgICAgTGlzcF9P YmplY3QgKmtleWJ1ZiwgcHJvbXB0OwotICAgICBrZXlyZW1hcCAqZmtleTsKLSAgICAgaW50IGlu cHV0LCBkb2l0LCAqZGlmZiwgYnVmc2l6ZTsKK2tleXJlbWFwX3N0ZXAgKExpc3BfT2JqZWN0ICpr ZXlidWYsIGludCBidWZzaXplLCB2b2xhdGlsZSBrZXlyZW1hcCAqZmtleSwKKwkgICAgICAgaW50 IGlucHV0LCBpbnQgZG9pdCwgaW50ICpkaWZmLCBMaXNwX09iamVjdCBwcm9tcHQpCiB7CiAgIExp c3BfT2JqZWN0IG5leHQsIGtleTsKIApAQCAtOTA2MywxNCArODk0NCw3IEBACiAgICBmcm9tIHRo ZSBzZWxlY3RlZCB3aW5kb3cncyBidWZmZXIuICAqLwogCiBzdGF0aWMgaW50Ci1yZWFkX2tleV9z ZXF1ZW5jZSAoa2V5YnVmLCBidWZzaXplLCBwcm9tcHQsIGRvbnRfZG93bmNhc2VfbGFzdCwKLQkJ ICAgY2FuX3JldHVybl9zd2l0Y2hfZnJhbWUsIGZpeF9jdXJyZW50X2J1ZmZlcikKLSAgICAgTGlz cF9PYmplY3QgKmtleWJ1ZjsKLSAgICAgaW50IGJ1ZnNpemU7Ci0gICAgIExpc3BfT2JqZWN0IHBy b21wdDsKLSAgICAgaW50IGRvbnRfZG93bmNhc2VfbGFzdDsKLSAgICAgaW50IGNhbl9yZXR1cm5f c3dpdGNoX2ZyYW1lOwotICAgICBpbnQgZml4X2N1cnJlbnRfYnVmZmVyOworcmVhZF9rZXlfc2Vx dWVuY2UgKExpc3BfT2JqZWN0ICprZXlidWYsIGludCBidWZzaXplLCBMaXNwX09iamVjdCBwcm9t cHQsIGludCBkb250X2Rvd25jYXNlX2xhc3QsIGludCBjYW5fcmV0dXJuX3N3aXRjaF9mcmFtZSwg aW50IGZpeF9jdXJyZW50X2J1ZmZlcikKIHsKICAgdm9sYXRpbGUgTGlzcF9PYmplY3QgZnJvbV9z dHJpbmc7CiAgIHZvbGF0aWxlIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CkBAIC0xMDU2 NSw3ICsxMDQzOSw3IEBACiAvKiBSZXR1cm4gbm9uemVybyBpZiBpbnB1dCBldmVudHMgYXJlIHBl bmRpbmcuICAqLwogCiBpbnQKLWRldGVjdF9pbnB1dF9wZW5kaW5nICgpCitkZXRlY3RfaW5wdXRf cGVuZGluZyAodm9pZCkKIHsKICAgaWYgKCFpbnB1dF9wZW5kaW5nKQogICAgIGdldF9pbnB1dF9w ZW5kaW5nICgmaW5wdXRfcGVuZGluZywgMCk7CkBAIC0xMDU3Nyw3ICsxMDQ1MSw3IEBACiAgICBw ZW5kaW5nLiAgKi8KIAogaW50Ci1kZXRlY3RfaW5wdXRfcGVuZGluZ19pZ25vcmVfc3F1ZWV6YWJs ZXMgKCkKK2RldGVjdF9pbnB1dF9wZW5kaW5nX2lnbm9yZV9zcXVlZXphYmxlcyAodm9pZCkKIHsK ICAgaWYgKCFpbnB1dF9wZW5kaW5nKQogICAgIGdldF9pbnB1dF9wZW5kaW5nICgmaW5wdXRfcGVu ZGluZywgUkVBREFCTEVfRVZFTlRTX0lHTk9SRV9TUVVFRVpBQkxFUyk7CkBAIC0xMDU4OCw4ICsx MDQ2Miw3IEBACiAvKiBSZXR1cm4gbm9uemVybyBpZiBpbnB1dCBldmVudHMgYXJlIHBlbmRpbmcs IGFuZCBydW4gYW55IHBlbmRpbmcgdGltZXJzLiAgKi8KIAogaW50Ci1kZXRlY3RfaW5wdXRfcGVu ZGluZ19ydW5fdGltZXJzIChkb19kaXNwbGF5KQotICAgICBpbnQgZG9fZGlzcGxheTsKK2RldGVj dF9pbnB1dF9wZW5kaW5nX3J1bl90aW1lcnMgKGludCBkb19kaXNwbGF5KQogewogICBpbnQgb2xk X3RpbWVyc19ydW4gPSB0aW1lcnNfcnVuOwogCkBAIC0xMDYyMCw3ICsxMDQ5Myw3IEBACiAgICBT byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdW5uZWNlc3NhcmlseSBjYW4ndCBkbyBhbnkgaGFybS4g ICovCiAKIHZvaWQKLWNsZWFyX2lucHV0X3BlbmRpbmcgKCkKK2NsZWFyX2lucHV0X3BlbmRpbmcg KHZvaWQpCiB7CiAgIGlucHV0X3BlbmRpbmcgPSAwOwogfQpAQCAtMTA2MzIsNyArMTA1MDUsNyBA QAogICAgdG8gZG8gaW4gdGhhdCBjYXNlLiAgSXQgaXNuJ3QgdHJpdmlhbC4gICovCiAKIGludAot cmVxdWV1ZWRfZXZlbnRzX3BlbmRpbmdfcCAoKQorcmVxdWV1ZWRfZXZlbnRzX3BlbmRpbmdfcCAo dm9pZCkKIHsKICAgcmV0dXJuICghTklMUCAoVnVucmVhZF9jb21tYW5kX2V2ZW50cykgfHwgdW5y ZWFkX2NvbW1hbmRfY2hhciAhPSAtMSk7CiB9CkBAIC0xMDkwNCw4ICsxMDc3Nyw3IEBACiAgICBU aGVuIGluIGFueSBjYXNlIHN0dWZmIGFueXRoaW5nIEVtYWNzIGhhcyByZWFkIGFoZWFkIGFuZCBu b3QgdXNlZC4gICovCiAKIHZvaWQKLXN0dWZmX2J1ZmZlcmVkX2lucHV0IChzdHVmZnN0cmluZykK LSAgICAgTGlzcF9PYmplY3Qgc3R1ZmZzdHJpbmc7CitzdHVmZl9idWZmZXJlZF9pbnB1dCAoTGlz cF9PYmplY3Qgc3R1ZmZzdHJpbmcpCiB7CiAjaWZkZWYgU0lHVFNUUCAgLyogc3R1ZmZfY2hhciBp cyBkZWZpbmVkIGlmIFNJR1RTVFAuICAqLwogICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwOwpA QCAtMTA5NDMsOCArMTA4MTUsNyBAQAogfQogDAogdm9pZAotc2V0X3dhaXRpbmdfZm9yX2lucHV0 ICh0aW1lX3RvX2NsZWFyKQotICAgICBFTUFDU19USU1FICp0aW1lX3RvX2NsZWFyOworc2V0X3dh aXRpbmdfZm9yX2lucHV0IChzdHJ1Y3QgdGltZXZhbCAqdGltZV90b19jbGVhcikKIHsKICAgaW5w dXRfYXZhaWxhYmxlX2NsZWFyX3RpbWUgPSB0aW1lX3RvX2NsZWFyOwogCkBAIC0xMDk1OCw3ICsx MDgyOSw3IEBACiB9CiAKIHZvaWQKLWNsZWFyX3dhaXRpbmdfZm9yX2lucHV0ICgpCitjbGVhcl93 YWl0aW5nX2Zvcl9pbnB1dCAodm9pZCkKIHsKICAgLyogVGVsbCBoYW5kbGVfaW50ZXJydXB0IG5v dCB0byB0aHJvdyBiYWNrIHRvIHJlYWRfY2hhciwgICovCiAgIHdhaXRpbmdfZm9yX2lucHV0ID0g MDsKQEAgLTEwOTcyLDggKzEwODQzLDggQEAKICAgIE90aGVyd2lzZSwgdGhlIGhhbmRsZXIga2ls bHMgRW1hY3MuICAqLwogCiBzdGF0aWMgU0lHVFlQRQotaW50ZXJydXB0X3NpZ25hbCAoc2lnbmFs bnVtKQkvKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGFyZ3VtZW50LCAqLwotICAgICBpbnQgc2lnbmFs bnVtOwkJLyogc29tZSBjb21waWxlcnMgY29tcGxhaW4gaW4gc2lnbmFsIGNhbGxzLiAqLworaW50 ZXJydXB0X3NpZ25hbCAoaW50IHNpZ25hbG51bSkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBhcmd1 bWVudCwgKi8KKyAgICAgICAgICAgICAgICAgICAJCS8qIHNvbWUgY29tcGlsZXJzIGNvbXBsYWlu IGluIHNpZ25hbCBjYWxscy4gKi8KIHsKICAgLyogTXVzdCBwcmVzZXJ2ZSBtYWluIHByb2dyYW0n cyB2YWx1ZSBvZiBlcnJuby4gICovCiAgIGludCBvbGRfZXJybm8gPSBlcnJubzsKQEAgLTExMDE3 LDcgKzEwODg4LDcgQEAKICAgIG5vbi1uaWwsIGl0IHN0b3BzIHRoZSBqb2IgcmlnaHQgYXdheS4g Ki8KIAogc3RhdGljIHZvaWQKLWhhbmRsZV9pbnRlcnJ1cHQgKCkKK2hhbmRsZV9pbnRlcnJ1cHQg KHZvaWQpCiB7CiAgIGNoYXIgYzsKIApAQCAtMTExNDMsNyArMTEwMTQsNyBAQAogLyogSGFuZGxl IGEgQy1nIGJ5IG1ha2luZyByZWFkX2NoYXIgcmV0dXJuIEMtZy4gICovCiAKIHZvaWQKLXF1aXRf dGhyb3dfdG9fcmVhZF9jaGFyICgpCitxdWl0X3Rocm93X3RvX3JlYWRfY2hhciAodm9pZCkKIHsK ICAgc2lnZnJlZSAoKTsKICAgLyogUHJldmVudCBhbm90aGVyIHNpZ25hbCBmcm9tIGRvaW5nIHRo aXMgYmVmb3JlIHdlIGZpbmlzaC4gICovCkBAIC0xMTQ3OCw4ICsxMTM0OSw3IEBACiAgKiBTZXQg dXAgYSBuZXcga2JvYXJkIG9iamVjdCB3aXRoIHJlYXNvbmFibGUgaW5pdGlhbCB2YWx1ZXMuCiAg Ki8KIHZvaWQKLWluaXRfa2JvYXJkIChrYikKLSAgICAgS0JPQVJEICprYjsKK2luaXRfa2JvYXJk IChLQk9BUkQgKmtiKQogewogICBrYi0+Vm92ZXJyaWRpbmdfdGVybWluYWxfbG9jYWxfbWFwID0g UW5pbDsKICAga2ItPlZsYXN0X2NvbW1hbmQgPSBRbmlsOwpAQCAtMTE1MTMsOCArMTEzODMsNyBA QAogICogaXQgYSBzZWNvbmQgdGltZS4KICAqLwogc3RhdGljIHZvaWQKLXdpcGVfa2JvYXJkIChr YikKLSAgICAgS0JPQVJEICprYjsKK3dpcGVfa2JvYXJkIChLQk9BUkQgKmtiKQogewogICB4ZnJl ZSAoa2ItPmtiZF9tYWNyb19idWZmZXIpOwogfQpAQCAtMTE1MjIsOCArMTEzOTEsNyBAQAogLyog RnJlZSBLQiBhbmQgbWVtb3J5IHJlZmVyZW5jZWQgZnJvbSBpdC4gICovCiAKIHZvaWQKLWRlbGV0 ZV9rYm9hcmQgKGtiKQotICAgICBLQk9BUkQgKmtiOworZGVsZXRlX2tib2FyZCAoS0JPQVJEICpr YikKIHsKICAgS0JPQVJEICoqa2JwOwogCkBAIC0xMTU0OCw3ICsxMTQxNiw3IEBACiB9CiAKIHZv aWQKLWluaXRfa2V5Ym9hcmQgKCkKK2luaXRfa2V5Ym9hcmQgKHZvaWQpCiB7CiAgIC8qIFRoaXMg aXMgY29ycmVjdCBiZWZvcmUgb3V0ZXJtb3N0IGludm9jYXRpb24gb2YgdGhlIGVkaXRvciBsb29w ICovCiAgIGNvbW1hbmRfbG9vcF9sZXZlbCA9IC0xOwpAQCAtMTE2NDgsNyArMTE1MTYsNyBAQAog fTsKIAogdm9pZAotc3ltc19vZl9rZXlib2FyZCAoKQorc3ltc19vZl9rZXlib2FyZCAodm9pZCkK IHsKICAgcGVuZGluZ19mdW5jYWxscyA9IFFuaWw7CiAgIHN0YXRpY3BybyAoJnBlbmRpbmdfZnVu Y2FsbHMpOwpAQCAtMTI0MjQsNyArMTIyOTIsNyBAQAogfQogCiB2b2lkCi1rZXlzX29mX2tleWJv YXJkICgpCitrZXlzX29mX2tleWJvYXJkICh2b2lkKQogewogICBpbml0aWFsX2RlZmluZV9rZXkg KGdsb2JhbF9tYXAsIEN0bCAoJ1onKSwgInN1c3BlbmQtZW1hY3MiKTsKICAgaW5pdGlhbF9kZWZp bmVfa2V5IChjb250cm9sX3hfbWFwLCBDdGwgKCdaJyksICJzdXNwZW5kLWVtYWNzIik7CkBAIC0x MjQ4NCw3ICsxMjM1Miw3IEBACiAvKiBNYXJrIHRoZSBwb2ludGVycyBpbiB0aGUga2JvYXJkIG9i amVjdHMuCiAgICBDYWxsZWQgYnkgdGhlIEZnYXJiYWdlX2NvbGxlY3Rvci4gICovCiB2b2lkCi1t YXJrX2tib2FyZHMgKCkKK21hcmtfa2JvYXJkcyAodm9pZCkKIHsKICAgS0JPQVJEICprYjsKICAg TGlzcF9PYmplY3QgKnA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3Byb2Nlc3MuYycKLS0tIHNy Yy9wcm9jZXNzLmMJMjAxMC0wNy0wMiAxMjoxOTo1MyArMDAwMAorKysgc3JjL3Byb2Nlc3MuYwky MDEwLTA3LTA1IDAxOjE3OjIzICswMDAwCkBAIC0yOTcsOCArMjk3LDggQEAKICNkZWZpbmUgUE9M TF9GT1JfSU5QVVQKICNlbmRpZgogCi1zdGF0aWMgTGlzcF9PYmplY3QgZ2V0X3Byb2Nlc3MgKCk7 Ci1zdGF0aWMgdm9pZCBleGVjX3NlbnRpbmVsICgpOworc3RhdGljIExpc3BfT2JqZWN0IGdldF9w cm9jZXNzIChyZWdpc3RlciBMaXNwX09iamVjdCBuYW1lKTsKK3N0YXRpYyB2b2lkIGV4ZWNfc2Vu dGluZWwgKExpc3BfT2JqZWN0IHByb2MsIExpc3BfT2JqZWN0IHJlYXNvbik7CiAKIGV4dGVybiBp bnQgdGltZXJzX3J1bjsKIAwKQEAgLTM5OSw4ICszOTksNyBAQAogc3RhdGljIExpc3BfT2JqZWN0 IHN0YXR1c19jb252ZXJ0IChpbnQpOwogCiBzdGF0aWMgdm9pZAotdXBkYXRlX3N0YXR1cyAocCkK LSAgICAgc3RydWN0IExpc3BfUHJvY2VzcyAqcDsKK3VwZGF0ZV9zdGF0dXMgKHN0cnVjdCBMaXNw X1Byb2Nlc3MgKnApCiB7CiAgIGVhc3NlcnQgKHAtPnJhd19zdGF0dXNfbmV3KTsKICAgcC0+c3Rh dHVzID0gc3RhdHVzX2NvbnZlcnQgKHAtPnJhd19zdGF0dXMpOwpAQCAtNDI5LDExICs0MjgsNyBA QAogICAgYW5kIHN0b3JlIHRoZW0gaW5kaXZpZHVhbGx5IHRocm91Z2ggdGhlIHRocmVlIHBvaW50 ZXJzLiAgKi8KIAogc3RhdGljIHZvaWQKLWRlY29kZV9zdGF0dXMgKGwsIHN5bWJvbCwgY29kZSwg Y29yZWR1bXApCi0gICAgIExpc3BfT2JqZWN0IGw7Ci0gICAgIExpc3BfT2JqZWN0ICpzeW1ib2w7 Ci0gICAgIGludCAqY29kZTsKLSAgICAgaW50ICpjb3JlZHVtcDsKK2RlY29kZV9zdGF0dXMgKExp c3BfT2JqZWN0IGwsIExpc3BfT2JqZWN0ICpzeW1ib2wsIGludCAqY29kZSwgaW50ICpjb3JlZHVt cCkKIHsKICAgTGlzcF9PYmplY3QgdGVtOwogCkBAIC00NTYsOCArNDUxLDcgQEAKIC8qIFJldHVy biBhIHN0cmluZyBkZXNjcmliaW5nIGEgcHJvY2VzcyBzdGF0dXMgbGlzdC4gICovCiAKIHN0YXRp YyBMaXNwX09iamVjdAotc3RhdHVzX21lc3NhZ2UgKHApCi0gICAgIHN0cnVjdCBMaXNwX1Byb2Nl c3MgKnA7CitzdGF0dXNfbWVzc2FnZSAoc3RydWN0IExpc3BfUHJvY2VzcyAqcCkKIHsKICAgTGlz cF9PYmplY3Qgc3RhdHVzID0gcC0+c3RhdHVzOwogICBMaXNwX09iamVjdCBzeW1ib2w7CkBAIC01 MTksNyArNTEzLDcgQEAKICAgIGlzIGxlZnQgaW4gdGhlIHZhcmlhYmxlIHB0eV9uYW1lLiAgKi8K IAogc3RhdGljIGludAotYWxsb2NhdGVfcHR5ICgpCithbGxvY2F0ZV9wdHkgKHZvaWQpCiB7CiAg IHJlZ2lzdGVyIGludCBjLCBpOwogICBpbnQgZmQ7CkBAIC01OTMsOCArNTg3LDcgQEAKICNlbmRp ZiAvKiBIQVZFX1BUWVMgKi8KIAwKIHN0YXRpYyBMaXNwX09iamVjdAotbWFrZV9wcm9jZXNzIChu YW1lKQotICAgICBMaXNwX09iamVjdCBuYW1lOworbWFrZV9wcm9jZXNzIChMaXNwX09iamVjdCBu YW1lKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCB2YWwsIHRlbSwgbmFtZTE7CiAgIHJlZ2lz dGVyIHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnA7CkBAIC02MzgsOCArNjMxLDcgQEAKIH0KIAogc3Rh dGljIHZvaWQKLXJlbW92ZV9wcm9jZXNzIChwcm9jKQotICAgICByZWdpc3RlciBMaXNwX09iamVj dCBwcm9jOworcmVtb3ZlX3Byb2Nlc3MgKHJlZ2lzdGVyIExpc3BfT2JqZWN0IHByb2MpCiB7CiAg IHJlZ2lzdGVyIExpc3BfT2JqZWN0IHBhaXI7CiAKQEAgLTY1Miw4ICs2NDQsNyBAQAogLyogU2V0 dXAgY29kaW5nIHN5c3RlbXMgb2YgUFJPQ0VTUy4gICovCiAKIHZvaWQKLXNldHVwX3Byb2Nlc3Nf Y29kaW5nX3N5c3RlbXMgKHByb2Nlc3MpCi0gICAgIExpc3BfT2JqZWN0IHByb2Nlc3M7CitzZXR1 cF9wcm9jZXNzX2NvZGluZ19zeXN0ZW1zIChMaXNwX09iamVjdCBwcm9jZXNzKQogewogICBzdHJ1 Y3QgTGlzcF9Qcm9jZXNzICpwID0gWFBST0NFU1MgKHByb2Nlc3MpOwogICBpbnQgaW5jaCA9IHAt PmluZmQ7CkBAIC03MjksOCArNzIwLDcgQEAKICAgIGN1cnJlbnQgYnVmZmVyLiAgKi8KIAogc3Rh dGljIExpc3BfT2JqZWN0Ci1nZXRfcHJvY2VzcyAobmFtZSkKLSAgICAgcmVnaXN0ZXIgTGlzcF9P YmplY3QgbmFtZTsKK2dldF9wcm9jZXNzIChyZWdpc3RlciBMaXNwX09iamVjdCBuYW1lKQogewog ICByZWdpc3RlciBMaXNwX09iamVjdCBwcm9jLCBvYmo7CiAgIGlmIChTVFJJTkdQIChuYW1lKSkK QEAgLTExNjEsNyArMTE1MSw3IEBACiB9CiAKICNpZmRlZiBEQVRBR1JBTV9TT0NLRVRTCi1MaXNw X09iamVjdCBGcHJvY2Vzc19kYXRhZ3JhbV9hZGRyZXNzICgpOworTGlzcF9PYmplY3QgRnByb2Nl c3NfZGF0YWdyYW1fYWRkcmVzcyAoTGlzcF9PYmplY3QgcHJvY2Vzcyk7CiAjZW5kaWYKIAogREVG VU4gKCJwcm9jZXNzLWNvbnRhY3QiLCBGcHJvY2Vzc19jb250YWN0LCBTcHJvY2Vzc19jb250YWN0 LApAQCAtMTMyNyw4ICsxMzE3LDcgQEAKICNlbmRpZgogDAogc3RhdGljIExpc3BfT2JqZWN0Ci1s aXN0X3Byb2Nlc3Nlc18xIChxdWVyeV9vbmx5KQotICAgICBMaXNwX09iamVjdCBxdWVyeV9vbmx5 OworbGlzdF9wcm9jZXNzZXNfMSAoTGlzcF9PYmplY3QgcXVlcnlfb25seSkKIHsKICAgcmVnaXN0 ZXIgTGlzcF9PYmplY3QgdGFpbCwgdGVtOwogICBMaXNwX09iamVjdCBwcm9jLCBtaW5zcGFjZSwg dGVtMTsKQEAgLTE1NzksNyArMTU2OCw3IEBACiAMCiAvKiBTdGFydGluZyBhc3luY2hyb25vdXMg aW5mZXJpb3IgcHJvY2Vzc2VzLiAgKi8KIAotc3RhdGljIExpc3BfT2JqZWN0IHN0YXJ0X3Byb2Nl c3NfdW53aW5kICgpOworc3RhdGljIExpc3BfT2JqZWN0IHN0YXJ0X3Byb2Nlc3NfdW53aW5kIChM aXNwX09iamVjdCBwcm9jKTsKIAogREVGVU4gKCJzdGFydC1wcm9jZXNzIiwgRnN0YXJ0X3Byb2Nl c3MsIFNzdGFydF9wcm9jZXNzLCAzLCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogU3RhcnQgYSBw cm9ncmFtIGluIGEgc3VicHJvY2Vzcy4gIFJldHVybiB0aGUgcHJvY2VzcyBvYmplY3QgZm9yIGl0 LgpAQCAtMTgxNCw4ICsxODAzLDcgQEAKICAgIGFuIGVycm9yIGFuZCB0aGUgcHJvY2VzcyB3YXNu J3Qgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHNvIHdlIHNob3VsZAogICAgcmVtb3ZlIGl0IGZyb20g dGhlIHByb2Nlc3MgbGlzdC4gICovCiBzdGF0aWMgTGlzcF9PYmplY3QKLXN0YXJ0X3Byb2Nlc3Nf dW53aW5kIChwcm9jKQotICAgICBMaXNwX09iamVjdCBwcm9jOworc3RhcnRfcHJvY2Vzc191bndp bmQgKExpc3BfT2JqZWN0IHByb2MpCiB7CiAgIGlmICghUFJPQ0VTU1AgKHByb2MpKQogICAgIGFi b3J0ICgpOwpAQCAtMTgyOCw4ICsxODE2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWNyZWF0ZV9w cm9jZXNzXzEgKHRpbWVyKQotICAgICBzdHJ1Y3QgYXRpbWVyICp0aW1lcjsKK2NyZWF0ZV9wcm9j ZXNzXzEgKHN0cnVjdCBhdGltZXIgKnRpbWVyKQogewogICAvKiBOb3RoaW5nIHRvIGRvLiAgKi8K IH0KQEAgLTE4NTUsMTAgKzE4NDIsNyBAQAogI2VuZGlmCiAKIHZvaWQKLWNyZWF0ZV9wcm9jZXNz IChwcm9jZXNzLCBuZXdfYXJndiwgY3VycmVudF9kaXIpCi0gICAgIExpc3BfT2JqZWN0IHByb2Nl c3M7Ci0gICAgIGNoYXIgKipuZXdfYXJndjsKLSAgICAgTGlzcF9PYmplY3QgY3VycmVudF9kaXI7 CitjcmVhdGVfcHJvY2VzcyAoTGlzcF9PYmplY3QgcHJvY2VzcywgY2hhciAqKm5ld19hcmd2LCBM aXNwX09iamVjdCBjdXJyZW50X2RpcikKIHsKICAgaW50IGluY2hhbm5lbCwgb3V0Y2hhbm5lbDsK ICAgcGlkX3QgcGlkOwpAQCAtMjI0NSw4ICsyMjI5LDcgQEAKIH0KIAogdm9pZAotY3JlYXRlX3B0 eSAocHJvY2VzcykKLSAgICAgTGlzcF9PYmplY3QgcHJvY2VzczsKK2NyZWF0ZV9wdHkgKExpc3Bf T2JqZWN0IHByb2Nlc3MpCiB7CiAgIGludCBpbmNoYW5uZWwsIG91dGNoYW5uZWw7CiAKQEAgLTIz MzMsOSArMjMxNiw3IEBACiAgICBUaGUgYWRkcmVzcyBmYW1pbHkgb2Ygc2EgaXMgbm90IGluY2x1 ZGVkIGluIHRoZSByZXN1bHQuICAqLwogCiBzdGF0aWMgTGlzcF9PYmplY3QKLWNvbnZfc29ja2Fk ZHJfdG9fbGlzcCAoc2EsIGxlbikKLSAgICAgc3RydWN0IHNvY2thZGRyICpzYTsKLSAgICAgaW50 IGxlbjsKK2NvbnZfc29ja2FkZHJfdG9fbGlzcCAoc3RydWN0IHNvY2thZGRyICpzYSwgaW50IGxl bikKIHsKICAgTGlzcF9PYmplY3QgYWRkcmVzczsKICAgaW50IGk7CkBAIC0yNDA0LDkgKzIzODUs NyBAQAogLyogR2V0IGZhbWlseSBhbmQgcmVxdWlyZWQgc2l6ZSBmb3Igc29ja2FkZHIgc3RydWN0 dXJlIHRvIGhvbGQgQUREUkVTUy4gICovCiAKIHN0YXRpYyBpbnQKLWdldF9saXNwX3RvX3NvY2th ZGRyX3NpemUgKGFkZHJlc3MsIGZhbWlseXApCi0gICAgIExpc3BfT2JqZWN0IGFkZHJlc3M7Ci0g ICAgIGludCAqZmFtaWx5cDsKK2dldF9saXNwX3RvX3NvY2thZGRyX3NpemUgKExpc3BfT2JqZWN0 IGFkZHJlc3MsIGludCAqZmFtaWx5cCkKIHsKICAgcmVnaXN0ZXIgc3RydWN0IExpc3BfVmVjdG9y ICpwOwogCkBAIC0yNDUxLDExICsyNDMwLDcgQEAKICAgIHdlIHJldHVybiBhZnRlciB6ZXJvaW5n ICpTQS4gICovCiAKIHN0YXRpYyB2b2lkCi1jb252X2xpc3BfdG9fc29ja2FkZHIgKGZhbWlseSwg YWRkcmVzcywgc2EsIGxlbikKLSAgICAgaW50IGZhbWlseTsKLSAgICAgTGlzcF9PYmplY3QgYWRk cmVzczsKLSAgICAgc3RydWN0IHNvY2thZGRyICpzYTsKLSAgICAgaW50IGxlbjsKK2NvbnZfbGlz cF90b19zb2NrYWRkciAoaW50IGZhbWlseSwgTGlzcF9PYmplY3QgYWRkcmVzcywgc3RydWN0IHNv Y2thZGRyICpzYSwgaW50IGxlbikKIHsKICAgcmVnaXN0ZXIgc3RydWN0IExpc3BfVmVjdG9yICpw OwogICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7CkBAIC0yNjEyLDkgKzI1ODcs NyBAQAogKi8KIAogc3RhdGljIGludAotc2V0X3NvY2tldF9vcHRpb24gKHMsIG9wdCwgdmFsKQot ICAgICBpbnQgczsKLSAgICAgTGlzcF9PYmplY3Qgb3B0LCB2YWw7CitzZXRfc29ja2V0X29wdGlv biAoaW50IHMsIExpc3BfT2JqZWN0IG9wdCwgTGlzcF9PYmplY3QgdmFsKQogewogICBjaGFyICpu YW1lOwogICBjb25zdCBzdHJ1Y3Qgc29ja2V0X29wdGlvbnMgKnNvcHQ7CkBAIC0zNzAxLDcgKzM2 NzQsNyBAQAogCSAgaW50IGxlbjEgPSBzaXplb2YgKHNhMSk7CiAJICBpZiAoZ2V0c29ja25hbWUg KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2ExLCAmbGVuMSkgPT0gMCkKIAkgICAgY29udGFjdCA9 IEZwbGlzdF9wdXQgKGNvbnRhY3QsIFFDbG9jYWwsCi0JCQkJICBjb252X3NvY2thZGRyX3RvX2xp c3AgKCZzYTEsIGxlbjEpKTsKKwkJCQkgIGNvbnZfc29ja2FkZHJfdG9fbGlzcCAoKHN0cnVjdCBz b2NrYWRkciAqKSZzYTEsIGxlbjEpKTsKIAl9CiAjZW5kaWYKICAgICB9CkBAIC00MTU0LDggKzQx MjcsNyBAQAogLyogVHVybiBvZmYgaW5wdXQgYW5kIG91dHB1dCBmb3IgcHJvY2VzcyBQUk9DLiAg Ki8KIAogdm9pZAotZGVhY3RpdmF0ZV9wcm9jZXNzIChwcm9jKQotICAgICBMaXNwX09iamVjdCBw cm9jOworZGVhY3RpdmF0ZV9wcm9jZXNzIChMaXNwX09iamVjdCBwcm9jKQogewogICByZWdpc3Rl ciBpbnQgaW5jaGFubmVsLCBvdXRjaGFubmVsOwogICByZWdpc3RlciBzdHJ1Y3QgTGlzcF9Qcm9j ZXNzICpwID0gWFBST0NFU1MgKHByb2MpOwpAQCAtNDIyMCw3ICs0MTkyLDcgQEAKICAgIHRvIGdl dCByaWQgb2YgaXJyZWxldmFudCBkZXNjcmlwdG9ycy4gICovCiAKIHZvaWQKLWNsb3NlX3Byb2Nl c3NfZGVzY3MgKCkKK2Nsb3NlX3Byb2Nlc3NfZGVzY3MgKHZvaWQpCiB7CiAjaWZuZGVmIFdJTkRP V1NOVAogICBpbnQgaTsKQEAgLTQzMTMsOSArNDI4NSw3IEBACiBzdGF0aWMgaW50IGNvbm5lY3Rf Y291bnRlciA9IDA7CiAKIHN0YXRpYyB2b2lkCi1zZXJ2ZXJfYWNjZXB0X2Nvbm5lY3Rpb24gKHNl cnZlciwgY2hhbm5lbCkKLSAgICAgTGlzcF9PYmplY3Qgc2VydmVyOwotICAgICBpbnQgY2hhbm5l bDsKK3NlcnZlcl9hY2NlcHRfY29ubmVjdGlvbiAoTGlzcF9PYmplY3Qgc2VydmVyLCBpbnQgY2hh bm5lbCkKIHsKICAgTGlzcF9PYmplY3QgcHJvYywgY2FsbGVyLCBuYW1lLCBidWZmZXI7CiAgIExp c3BfT2JqZWN0IGNvbnRhY3QsIGhvc3QsIHNlcnZpY2U7CkBAIC00NTMxLDggKzQ1MDEsNyBAQAog c3RhdGljIGludCB3YWl0aW5nX2Zvcl91c2VyX2lucHV0X3A7CiAKIHN0YXRpYyBMaXNwX09iamVj dAotd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0X3Vud2luZCAoZGF0YSkKLSAgICAgTGlzcF9P YmplY3QgZGF0YTsKK3dhaXRfcmVhZGluZ19wcm9jZXNzX291dHB1dF91bndpbmQgKExpc3BfT2Jq ZWN0IGRhdGEpCiB7CiAgIHdhaXRpbmdfZm9yX3VzZXJfaW5wdXRfcCA9IFhJTlQgKGRhdGEpOwog ICByZXR1cm4gUW5pbDsKQEAgLTQ1NDAsNyArNDUwOSw3IEBACiAKIC8qIFRoaXMgaXMgaGVyZSBz byBicmVha3BvaW50cyBjYW4gYmUgcHV0IG9uIGl0LiAgKi8KIHN0YXRpYyB2b2lkCi13YWl0X3Jl YWRpbmdfcHJvY2Vzc19vdXRwdXRfMSAoKQord2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0XzEg KHZvaWQpCiB7CiB9CiAKQEAgLTQ1NTMsMTAgKzQ1MjIsNyBAQAogCiAjaWZuZGVmIHNlbGVjdAog c3RhdGljIElOTElORSBpbnQKLXNlbGVjdF93cmFwcGVyIChuLCByZmQsIHdmZCwgeGZkLCB0bW8p Ci0gIGludCBuOwotICBTRUxFQ1RfVFlQRSAqcmZkLCAqd2ZkLCAqeGZkOwotICBFTUFDU19USU1F ICp0bW87CitzZWxlY3Rfd3JhcHBlciAoaW50IG4sIGZkX3NldCAqcmZkLCBmZF9zZXQgKndmZCwg ZmRfc2V0ICp4ZmQsIHN0cnVjdCB0aW1ldmFsICp0bW8pCiB7CiAgIHJldHVybiBzZWxlY3QgKG4s IHJmZCwgd2ZkLCB4ZmQsIHRtbyk7CiB9CkBAIC01MjYxLDE1ICs1MjI3LDEzIEBACiAvKiBHaXZl biBhIGxpc3QgKEZVTkNUSU9OIEFSR1MuLi4pLCBhcHBseSBGVU5DVElPTiB0byB0aGUgQVJHUy4g ICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotcmVhZF9wcm9jZXNzX291dHB1dF9jYWxsIChmdW5f YW5kX2FyZ3MpCi0gICAgIExpc3BfT2JqZWN0IGZ1bl9hbmRfYXJnczsKK3JlYWRfcHJvY2Vzc19v dXRwdXRfY2FsbCAoTGlzcF9PYmplY3QgZnVuX2FuZF9hcmdzKQogewogICByZXR1cm4gYXBwbHkx IChYQ0FSIChmdW5fYW5kX2FyZ3MpLCBYQ0RSIChmdW5fYW5kX2FyZ3MpKTsKIH0KIAogc3RhdGlj IExpc3BfT2JqZWN0Ci1yZWFkX3Byb2Nlc3Nfb3V0cHV0X2Vycm9yX2hhbmRsZXIgKGVycm9yKQot ICAgICBMaXNwX09iamVjdCBlcnJvcjsKK3JlYWRfcHJvY2Vzc19vdXRwdXRfZXJyb3JfaGFuZGxl ciAoTGlzcF9PYmplY3QgZXJyb3IpCiB7CiAgIGNtZF9lcnJvcl9pbnRlcm5hbCAoZXJyb3IsICJl cnJvciBpbiBwcm9jZXNzIGZpbHRlcjogIik7CiAgIFZpbmhpYml0X3F1aXQgPSBRdDsKQEAgLTUy OTAsOSArNTI1NCw3IEBACiAgICBmb3IgZGVjb2RpbmcuICAqLwogCiBzdGF0aWMgaW50Ci1yZWFk X3Byb2Nlc3Nfb3V0cHV0IChwcm9jLCBjaGFubmVsKQotICAgICBMaXNwX09iamVjdCBwcm9jOwot ICAgICByZWdpc3RlciBpbnQgY2hhbm5lbDsKK3JlYWRfcHJvY2Vzc19vdXRwdXQgKExpc3BfT2Jq ZWN0IHByb2MsIHJlZ2lzdGVyIGludCBjaGFubmVsKQogewogICByZWdpc3RlciBpbnQgbmJ5dGVz OwogICBjaGFyICpjaGFyczsKQEAgLTU2MTgsNyArNTU4MCw3IEBACiBMaXNwX09iamVjdCBwcm9j ZXNzX3NlbnRfdG87CiAKIFNJR1RZUEUKLXNlbmRfcHJvY2Vzc190cmFwICgpCitzZW5kX3Byb2Nl c3NfdHJhcCAoaW50IGlnbm9yZSkKIHsKICAgU0lHTkFMX1RIUkVBRF9DSEVDSyAoU0lHUElQRSk7 CiAgIHNpZ3VuYmxvY2sgKHNpZ21hc2sgKFNJR1BJUEUpKTsKQEAgLTU2MzYsMTEgKzU1OTgsNyBA QAogICAgVGhpcyBmdW5jdGlvbiBjYW4gZXZhbHVhdGUgTGlzcCBjb2RlIGFuZCBjYW4gZ2FyYmFn ZSBjb2xsZWN0LiAgKi8KIAogc3RhdGljIHZvaWQKLXNlbmRfcHJvY2VzcyAocHJvYywgYnVmLCBs ZW4sIG9iamVjdCkKLSAgICAgdm9sYXRpbGUgTGlzcF9PYmplY3QgcHJvYzsKLSAgICAgdW5zaWdu ZWQgY2hhciAqdm9sYXRpbGUgYnVmOwotICAgICB2b2xhdGlsZSBpbnQgbGVuOwotICAgICB2b2xh dGlsZSBMaXNwX09iamVjdCBvYmplY3Q7CitzZW5kX3Byb2Nlc3MgKHZvbGF0aWxlIHZvbGF0aWxl IExpc3BfT2JqZWN0IHByb2MsIHVuc2lnbmVkIGNoYXIgKnZvbGF0aWxlIHZvbGF0aWxlIGJ1Ziwg dm9sYXRpbGUgdm9sYXRpbGUgaW50IGxlbiwgdm9sYXRpbGUgdm9sYXRpbGUgTGlzcF9PYmplY3Qg b2JqZWN0KQogewogICAvKiBVc2Ugdm9sYXRpbGUgdG8gcHJvdGVjdCB2YXJpYWJsZXMgZnJvbSBi ZWluZyBjbG9iYmVyZWQgYnkgbG9uZ2ptcC4gICovCiAgIHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnAg PSBYUFJPQ0VTUyAocHJvYyk7CkBAIC01OTI3LDggKzU4ODUsNyBAQAogLyogUmV0dXJuIHRoZSBm b3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgZm9yIHRoZSB0dHkvcHR5IHRoYXQKICAgIHRoZSBwcm9j ZXNzIFAgdXNlcy4gICovCiBzdGF0aWMgaW50Ci1lbWFjc19nZXRfdHR5X3BncnAgKHApCi0gICAg IHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnA7CitlbWFjc19nZXRfdHR5X3BncnAgKHN0cnVjdCBMaXNw X1Byb2Nlc3MgKnApCiB7CiAgIGludCBnaWQgPSAtMTsKIApAQCAtNTk5NywxMSArNTk1NCw3IEBA CiAgICB0aGVpciB1aWQsIGZvciB3aGljaCBraWxscGcgd291bGQgcmV0dXJuIGFuIEVQRVJNIGVy cm9yLiAgKi8KIAogc3RhdGljIHZvaWQKLXByb2Nlc3Nfc2VuZF9zaWduYWwgKHByb2Nlc3MsIHNp Z25vLCBjdXJyZW50X2dyb3VwLCBub21zZykKLSAgICAgTGlzcF9PYmplY3QgcHJvY2VzczsKLSAg ICAgaW50IHNpZ25vOwotICAgICBMaXNwX09iamVjdCBjdXJyZW50X2dyb3VwOwotICAgICBpbnQg bm9tc2c7Citwcm9jZXNzX3NlbmRfc2lnbmFsIChMaXNwX09iamVjdCBwcm9jZXNzLCBpbnQgc2ln bm8sIExpc3BfT2JqZWN0IGN1cnJlbnRfZ3JvdXAsIGludCBub21zZykKIHsKICAgTGlzcF9PYmpl Y3QgcHJvYzsKICAgcmVnaXN0ZXIgc3RydWN0IExpc3BfUHJvY2VzcyAqcDsKQEAgLTY1NzAsOCAr NjUyMyw3IEBACiAgICBJZiBgYnVmZmVyJyBpcyBuaWwsIGtpbGwgYWxsIHByb2Nlc3NlcyAgKi8K IAogdm9pZAota2lsbF9idWZmZXJfcHJvY2Vzc2VzIChidWZmZXIpCi0gICAgIExpc3BfT2JqZWN0 IGJ1ZmZlcjsKK2tpbGxfYnVmZmVyX3Byb2Nlc3NlcyAoTGlzcF9PYmplY3QgYnVmZmVyKQogewog ICBMaXNwX09iamVjdCB0YWlsLCBwcm9jOwogCkBAIC02NjE2LDggKzY1NjgsNyBAQAogCiAjaWZk ZWYgU0lHQ0hMRAogU0lHVFlQRQotc2lnY2hsZF9oYW5kbGVyIChzaWdubykKLSAgICAgaW50IHNp Z25vOworc2lnY2hsZF9oYW5kbGVyIChpbnQgc2lnbm8pCiB7CiAgIGludCBvbGRfZXJybm8gPSBl cnJubzsKICAgTGlzcF9PYmplY3QgcHJvYzsKQEAgLTY3NTgsMTYgKzY3MDksMTQgQEAKIAwKIAog c3RhdGljIExpc3BfT2JqZWN0Ci1leGVjX3NlbnRpbmVsX3Vud2luZCAoZGF0YSkKLSAgICAgTGlz cF9PYmplY3QgZGF0YTsKK2V4ZWNfc2VudGluZWxfdW53aW5kIChMaXNwX09iamVjdCBkYXRhKQog ewogICBYUFJPQ0VTUyAoWENBUiAoZGF0YSkpLT5zZW50aW5lbCA9IFhDRFIgKGRhdGEpOwogICBy ZXR1cm4gUW5pbDsKIH0KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1leGVjX3NlbnRpbmVsX2Vycm9y X2hhbmRsZXIgKGVycm9yKQotICAgICBMaXNwX09iamVjdCBlcnJvcjsKK2V4ZWNfc2VudGluZWxf ZXJyb3JfaGFuZGxlciAoTGlzcF9PYmplY3QgZXJyb3IpCiB7CiAgIGNtZF9lcnJvcl9pbnRlcm5h bCAoZXJyb3IsICJlcnJvciBpbiBwcm9jZXNzIHNlbnRpbmVsOiAiKTsKICAgVmluaGliaXRfcXVp dCA9IFF0OwpAQCAtNjc3Nyw4ICs2NzI2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWV4ZWNfc2Vu dGluZWwgKHByb2MsIHJlYXNvbikKLSAgICAgTGlzcF9PYmplY3QgcHJvYywgcmVhc29uOworZXhl Y19zZW50aW5lbCAoTGlzcF9PYmplY3QgcHJvYywgTGlzcF9PYmplY3QgcmVhc29uKQogewogICBM aXNwX09iamVjdCBzZW50aW5lbCwgb2J1ZmZlciwgb2RlYWN0aXZhdGUsIG9rZXltYXA7CiAgIHJl Z2lzdGVyIHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnAgPSBYUFJPQ0VTUyAocHJvYyk7CkBAIC02ODYz LDggKzY4MTEsNyBAQAogICAgYnV0IGNhbiBiZSBkb25lIGF0IG90aGVyIHRpbWVzLiAgKi8KIAog c3RhdGljIHZvaWQKLXN0YXR1c19ub3RpZnkgKGRlbGV0aW5nX3Byb2Nlc3MpCi0gICAgIHN0cnVj dCBMaXNwX1Byb2Nlc3MgKmRlbGV0aW5nX3Byb2Nlc3M7CitzdGF0dXNfbm90aWZ5IChzdHJ1Y3Qg TGlzcF9Qcm9jZXNzICpkZWxldGluZ19wcm9jZXNzKQogewogICByZWdpc3RlciBMaXNwX09iamVj dCBwcm9jLCBidWZmZXI7CiAgIExpc3BfT2JqZWN0IHRhaWwsIG1zZzsKQEAgLTcwNjQsOCArNzAx MSw3IEBACiAvKiBBZGQgREVTQyB0byB0aGUgc2V0IG9mIGtleWJvYXJkIGlucHV0IGRlc2NyaXB0 b3JzLiAgKi8KIAogdm9pZAotYWRkX2tleWJvYXJkX3dhaXRfZGVzY3JpcHRvciAoZGVzYykKLSAg ICAgaW50IGRlc2M7CithZGRfa2V5Ym9hcmRfd2FpdF9kZXNjcmlwdG9yIChpbnQgZGVzYykKIHsK ICAgRkRfU0VUIChkZXNjLCAmaW5wdXRfd2FpdF9tYXNrKTsKICAgRkRfU0VUIChkZXNjLCAmbm9u X3Byb2Nlc3Nfd2FpdF9tYXNrKTsKQEAgLTcwNzYsOCArNzAyMiw3IEBACiBzdGF0aWMgaW50IGFk ZF9ncG1fd2FpdF9kZXNjcmlwdG9yX2NhbGxlZF9mbGFnOwogCiB2b2lkCi1hZGRfZ3BtX3dhaXRf ZGVzY3JpcHRvciAoZGVzYykKLSAgICAgaW50IGRlc2M7CithZGRfZ3BtX3dhaXRfZGVzY3JpcHRv ciAoaW50IGRlc2MpCiB7CiAgIGlmICghIGFkZF9ncG1fd2FpdF9kZXNjcmlwdG9yX2NhbGxlZF9m bGFnKQogICAgIEZEX0NMUiAoMCwgJmlucHV0X3dhaXRfbWFzayk7CkBAIC03MDkxLDggKzcwMzYs NyBAQAogLyogRnJvbSBub3cgb24sIGRvIG5vdCBleHBlY3QgREVTQyB0byBnaXZlIGtleWJvYXJk IGlucHV0LiAgKi8KIAogdm9pZAotZGVsZXRlX2tleWJvYXJkX3dhaXRfZGVzY3JpcHRvciAoZGVz YykKLSAgICAgaW50IGRlc2M7CitkZWxldGVfa2V5Ym9hcmRfd2FpdF9kZXNjcmlwdG9yIChpbnQg ZGVzYykKIHsKICAgaW50IGZkOwogICBpbnQgbGltID0gbWF4X2tleWJvYXJkX2Rlc2M7CkBAIC03 MTA5LDggKzcwNTMsNyBAQAogfQogCiB2b2lkCi1kZWxldGVfZ3BtX3dhaXRfZGVzY3JpcHRvciAo ZGVzYykKLSAgICAgaW50IGRlc2M7CitkZWxldGVfZ3BtX3dhaXRfZGVzY3JpcHRvciAoaW50IGRl c2MpCiB7CiAgIGludCBmZDsKICAgaW50IGxpbSA9IG1heF9ncG1fZGVzYzsKQEAgLTcxMzAsOCAr NzA3Myw3IEBACiAgICB0aGF0IGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUga2V5Ym9hcmQgaW5w dXQgZGVzY3JpcHRvcnMuICAqLwogCiBzdGF0aWMgaW50Ci1rZXlib2FyZF9iaXRfc2V0IChtYXNr KQotICAgICBTRUxFQ1RfVFlQRSAqbWFzazsKK2tleWJvYXJkX2JpdF9zZXQgKGZkX3NldCAqbWFz aykKIHsKICAgaW50IGZkOwogCkBAIC03MjE1LDcgKzcxNTcsNyBAQAogfQogDAogdm9pZAotaW5p dF9wcm9jZXNzICgpCitpbml0X3Byb2Nlc3MgKHZvaWQpCiB7CiAgIHJlZ2lzdGVyIGludCBpOwog CkBAIC03MzE4LDcgKzcyNjAsNyBAQAogfQogCiB2b2lkCi1zeW1zX29mX3Byb2Nlc3MgKCkKK3N5 bXNfb2ZfcHJvY2VzcyAodm9pZCkKIHsKICAgUXByb2Nlc3NwID0gaW50ZXJuX2Nfc3RyaW5nICgi cHJvY2Vzc3AiKTsKICAgc3RhdGljcHJvICgmUXByb2Nlc3NwKTsKCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvdGVybS5jJwotLS0gc3JjL3Rlcm0uYwkyMDEwLTA3LTAyIDIyOjE4OjI4ICswMDAwCisr KyBzcmMvdGVybS5jCTIwMTAtMDctMDUgMDE6MTc6MjYgKzAwMDAKQEAgLTE4MSw3ICsxODEsNyBA QAogCiBjaGFyICp0cGFyYW0gKCk7CiAKLWV4dGVybiBjaGFyICp0Z2V0c3RyICgpOworZXh0ZXJu IGNoYXIgKnRnZXRzdHIgKGNoYXIgKiwgY2hhciAqKik7CiAMCiAKICNpZmRlZiBIQVZFX0dQTQpA QCAtNTU4LDEwICs1NTgsNyBAQAogICAgc2VxdWVuY2UsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRv IHRoYXQgYnl0ZSBzZXF1ZW5jZS4gICovCiAKIHVuc2lnbmVkIGNoYXIgKgotZW5jb2RlX3Rlcm1p bmFsX2NvZGUgKHNyYywgc3JjX2xlbiwgY29kaW5nKQotICAgICBzdHJ1Y3QgZ2x5cGggKnNyYzsK LSAgICAgaW50IHNyY19sZW47Ci0gICAgIHN0cnVjdCBjb2Rpbmdfc3lzdGVtICpjb2Rpbmc7Citl bmNvZGVfdGVybWluYWxfY29kZSAoc3RydWN0IGdseXBoICpzcmMsIGludCBzcmNfbGVuLCBzdHJ1 Y3QgY29kaW5nX3N5c3RlbSAqY29kaW5nKQogewogICBzdHJ1Y3QgZ2x5cGggKnNyY19lbmQgPSBz cmMgKyBzcmNfbGVuOwogICB1bnNpZ25lZCBjaGFyICpidWY7CkBAIC04MzYsMTAgKzgzMyw4IEBA CiAjaWZkZWYgSEFWRV9HUE0JCQkvKiBPbmx5IHVzZWQgYnkgR1BNIGNvZGUuICAqLwogCiBzdGF0 aWMgdm9pZAotdHR5X3dyaXRlX2dseXBoc193aXRoX2ZhY2UgKGYsIHN0cmluZywgbGVuLCBmYWNl X2lkKQotICAgICByZWdpc3RlciBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIHJlZ2lzdGVyIHN0cnVj dCBnbHlwaCAqc3RyaW5nOwotICAgICByZWdpc3RlciBpbnQgbGVuLCBmYWNlX2lkOwordHR5X3dy aXRlX2dseXBoc193aXRoX2ZhY2UgKHJlZ2lzdGVyIHN0cnVjdCBmcmFtZSAqZiwgcmVnaXN0ZXIg c3RydWN0IGdseXBoICpzdHJpbmcsCisJCQkgICAgcmVnaXN0ZXIgaW50IGxlbiwgcmVnaXN0ZXIg aW50IGZhY2VfaWQpCiB7CiAgIHVuc2lnbmVkIGNoYXIgKmNvbnZlcnNpb25fYnVmZmVyOwogICBz dHJ1Y3QgY29kaW5nX3N5c3RlbSAqY29kaW5nOwpAQCAtMTM2NiwxNiArMTM2MSwxNCBAQAogCiBz dGF0aWMgY2hhciAqKnRlcm1fZ2V0X2ZrZXlzX2FkZHJlc3M7CiBzdGF0aWMgS0JPQVJEICp0ZXJt X2dldF9ma2V5c19rYm9hcmQ7Ci1zdGF0aWMgTGlzcF9PYmplY3QgdGVybV9nZXRfZmtleXNfMSAo KTsKK3N0YXRpYyBMaXNwX09iamVjdCB0ZXJtX2dldF9ma2V5c18xICh2b2lkKTsKIAogLyogRmlu ZCB0aGUgZXNjYXBlIGNvZGVzIHNlbnQgYnkgdGhlIGZ1bmN0aW9uIGtleXMgZm9yIFZpbnB1dF9k ZWNvZGVfbWFwLgogICAgVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgdGVybWNhcCBmdW5jdGlvbiBr ZXkgc2VxdWVuY2UgZW50cmllcywgYW5kCiAgICBhZGRzIGVudHJpZXMgdG8gVmlucHV0X2RlY29k ZV9tYXAgZm9yIGVhY2ggZnVuY3Rpb24ga2V5IGl0IGZpbmRzLiAgKi8KIAogc3RhdGljIHZvaWQK LXRlcm1fZ2V0X2ZrZXlzIChhZGRyZXNzLCBrYm9hcmQpCi0gICAgIGNoYXIgKiphZGRyZXNzOwot ICAgICBLQk9BUkQgKmtib2FyZDsKK3Rlcm1fZ2V0X2ZrZXlzIChjaGFyICoqYWRkcmVzcywgS0JP QVJEICprYm9hcmQpCiB7CiAgIC8qIFdlIHJ1biB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24gKHRl cm1fZ2V0X2ZrZXlzXzEpIGFuZCBpZ25vcmUgYWxsIExpc3AKICAgICAgZXJyb3JzIGR1cmluZyB0 aGUgY2FsbC4gIFRoZSBvbmx5IGVycm9ycyBzaG91bGQgYmUgZnJvbSBGZGVmaW5lX2tleQpAQCAt MTM5Miw3ICsxMzg1LDcgQEAKIH0KIAogc3RhdGljIExpc3BfT2JqZWN0Ci10ZXJtX2dldF9ma2V5 c18xICgpCit0ZXJtX2dldF9ma2V5c18xICh2b2lkKQogewogICBpbnQgaTsKIApAQCAtMTUyOSw4 ICsxNTIyLDcgQEAKICAgIElULT5waXhlbF93aWR0aCA+IDEuICAqLwogCiBzdGF0aWMgdm9pZAot YXBwZW5kX2dseXBoIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK2FwcGVuZF9nbHlwaCAoc3Ry dWN0IGl0ICppdCkKIHsKICAgc3RydWN0IGdseXBoICpnbHlwaCwgKmVuZDsKICAgaW50IGk7CkBA IC0xNjA5LDggKzE2MDEsNyBAQAogICAgaW5zdGVhZCB0aGV5IHVzZSB0aGUgbWFjcm8gUFJPRFVD RV9HTFlQSFMuICAqLwogCiB2b2lkCi1wcm9kdWNlX2dseXBocyAoaXQpCi0gICAgIHN0cnVjdCBp dCAqaXQ7Citwcm9kdWNlX2dseXBocyAoc3RydWN0IGl0ICppdCkKIHsKICAgLyogSWYgYSBob29r IGlzIGluc3RhbGxlZCwgbGV0IGl0IGRvIHRoZSB3b3JrLiAgKi8KIApAQCAtMTcyOCw4ICsxNzE5 LDcgQEAKICAgIHRvIHJlYWNoIEhQT1MsIGEgdmFsdWUgaW4gY2Fub25pY2FsIGNoYXJhY3RlciB1 bml0cy4gICovCiAKIHN0YXRpYyB2b2lkCi1wcm9kdWNlX3N0cmV0Y2hfZ2x5cGggKGl0KQotICAg ICBzdHJ1Y3QgaXQgKml0OworcHJvZHVjZV9zdHJldGNoX2dseXBoIChzdHJ1Y3QgaXQgKml0KQog ewogICAvKiAoc3BhY2UgOndpZHRoIFdJRFRIIC4uLikgICovCiAgIExpc3BfT2JqZWN0IHByb3As IHBsaXN0OwpAQCAtMTc5OCw4ICsxNzg4LDcgQEAKICAgIGZhY2UuICAqLwogCiBzdGF0aWMgdm9p ZAotYXBwZW5kX2NvbXBvc2l0ZV9nbHlwaCAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7CithcHBl bmRfY29tcG9zaXRlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogewogICBzdHJ1Y3QgZ2x5cGggKmds eXBoOwogCkBAIC0xODYzLDggKzE4NTIsNyBAQAogICAgY29ycmVjdGx5LiAgKi8KIAogc3RhdGlj IHZvaWQKLXByb2R1Y2VfY29tcG9zaXRlX2dseXBoIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsK K3Byb2R1Y2VfY29tcG9zaXRlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogewogICBpbnQgYzsKIApA QCAtMTg5NCw5ICsxODgyLDcgQEAKICAgIGZhY2VfaWQsIGMsIGxlbiBvZiBJVCBhcmUgbGVmdCB1 bnRvdWNoZWQuICAqLwogCiB2b2lkCi1wcm9kdWNlX3NwZWNpYWxfZ2x5cGhzIChpdCwgd2hhdCkK LSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgZW51bSBkaXNwbGF5X2VsZW1lbnRfdHlwZSB3aGF0 OworcHJvZHVjZV9zcGVjaWFsX2dseXBocyAoc3RydWN0IGl0ICppdCwgZW51bSBkaXNwbGF5X2Vs ZW1lbnRfdHlwZSB3aGF0KQogewogICBzdHJ1Y3QgaXQgdGVtcF9pdDsKICAgTGlzcF9PYmplY3Qg Z2M7CkBAIC0xOTcwLDkgKzE5NTYsNyBAQAogICAgRkFDRV9JRCBpcyBhIHJlYWxpemVkIGZhY2Ug SUQgbnVtYmVyLCBpbiB0aGUgZmFjZSBjYWNoZS4gICovCiAKIHN0YXRpYyB2b2lkCi10dXJuX29u X2ZhY2UgKGYsIGZhY2VfaWQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IGZhY2Vf aWQ7Cit0dXJuX29uX2ZhY2UgKHN0cnVjdCBmcmFtZSAqZiwgaW50IGZhY2VfaWQpCiB7CiAgIHN0 cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKICAgbG9uZyBmZyA9 IGZhY2UtPmZvcmVncm91bmQ7CkBAIC0yMDY5LDkgKzIwNTMsNyBAQAogLyogVHVybiBvZmYgYXBw ZWFyYW5jZXMgb2YgZmFjZSBGQUNFX0lEIG9uIHR0eSBmcmFtZSBGLiAgKi8KIAogc3RhdGljIHZv aWQKLXR1cm5fb2ZmX2ZhY2UgKGYsIGZhY2VfaWQpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAg ICAgaW50IGZhY2VfaWQ7Cit0dXJuX29mZl9mYWNlIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBmYWNl X2lkKQogewogICBzdHJ1Y3QgZmFjZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwgZmFjZV9pZCk7 CiAgIHN0cnVjdCB0dHlfZGlzcGxheV9pbmZvICp0dHkgPSBGUkFNRV9UVFkgKGYpOwpAQCAtMjEy NCwxMCArMjEwNiw4IEBACiAgICBjb2xvcnMgRkcgYW5kIEJHLiAgKi8KIAogaW50Ci10dHlfY2Fw YWJsZV9wICh0dHksIGNhcHMsIGZnLCBiZykKLSAgICAgc3RydWN0IHR0eV9kaXNwbGF5X2luZm8g KnR0eTsKLSAgICAgdW5zaWduZWQgY2FwczsKLSAgICAgdW5zaWduZWQgbG9uZyBmZywgYmc7Cit0 dHlfY2FwYWJsZV9wIChzdHJ1Y3QgdHR5X2Rpc3BsYXlfaW5mbyAqdHR5LCB1bnNpZ25lZCBpbnQg Y2FwcywKKwkgICAgICAgbG9uZyB1bnNpZ25lZCBpbnQgZmcsIGxvbmcgdW5zaWduZWQgaW50IGJn KQogewogI2RlZmluZSBUVFlfQ0FQQUJMRV9QX1RSWSh0dHksIGNhcCwgVFMsIE5DX2JpdCkJCQkJ XAogICBpZiAoKGNhcHMgJiAoY2FwKSkgJiYgKCEoVFMpIHx8ICFNQVlfVVNFX1dJVEhfQ09MT1JT X1AodHR5LCBOQ19iaXQpKSkJXApAQCAtMjI2Nyw5ICsyMjQ3LDcgQEAKIH0KIAogdm9pZAotc2V0 X3R0eV9jb2xvcl9tb2RlICh0dHksIGYpCi0gICAgIHN0cnVjdCB0dHlfZGlzcGxheV9pbmZvICp0 dHk7Ci0gICAgIHN0cnVjdCBmcmFtZSAqZjsKK3NldF90dHlfY29sb3JfbW9kZSAoc3RydWN0IHR0 eV9kaXNwbGF5X2luZm8gKnR0eSwgc3RydWN0IGZyYW1lICpmKQogewogICBMaXNwX09iamVjdCB0 ZW0sIHZhbDsKICAgTGlzcF9PYmplY3QgY29sb3JfbW9kZTsKQEAgLTIzMzMsOCArMjMxMSw3IEBA CiAgICBSZXR1cm5zIE5VTEwgaWYgdGhlIG5hbWVkIHRlcm1pbmFsIGRldmljZSBpcyBub3Qgb3Bl bmVkLiAgKi8KIAogc3RydWN0IHRlcm1pbmFsICoKLWdldF9uYW1lZF90dHkgKG5hbWUpCi0gICAg IGNoYXIgKm5hbWU7CitnZXRfbmFtZWRfdHR5IChjaGFyICpuYW1lKQogewogICBzdHJ1Y3QgdGVy bWluYWwgKnQ7CiAKQEAgLTI2NjQsNyArMjY0MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi10ZXJt X2NsZWFyX21vdXNlX2ZhY2UgKCkKK3Rlcm1fY2xlYXJfbW91c2VfZmFjZSAodm9pZCkKIHsKICAg aWYgKCFOSUxQIChtb3VzZV9mYWNlX3dpbmRvdykpCiAgICAgdGVybV9zaG93X21vdXNlX2ZhY2Ug KERSQVdfTk9STUFMX1RFWFQpOwpAQCAtNDA3Miw3ICs0MDQ5LDcgQEAKIAwKIAogdm9pZAotc3lt c19vZl90ZXJtICgpCitzeW1zX29mX3Rlcm0gKHZvaWQpCiB7CiAgIERFRlZBUl9CT09MICgic3lz dGVtLXVzZXMtdGVybWluZm8iLCAmc3lzdGVtX3VzZXNfdGVybWluZm8sCiAgICAgZG9jOiAvKiBO b24tbmlsIG1lYW5zIHRoZSBzeXN0ZW0gdXNlcyB0ZXJtaW5mbyByYXRoZXIgdGhhbiB0ZXJtY2Fw LgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy92bS1saW1pdC5jJwotLS0gc3JjL3ZtLWxpbWl0LmMJ MjAxMC0wNy0wMiAwNzowNTowOSArMDAwMAorKysgc3JjL3ZtLWxpbWl0LmMJMjAxMC0wNy0wNSAw MToxNzoyOCArMDAwMApAQCAtNDIsNyArNDIsNyBAQAogCiAvKiBGdW5jdGlvbiB0byBjYWxsIHRv IGlzc3VlIGEgd2FybmluZzsKICAgIDAgbWVhbnMgZG9uJ3QgaXNzdWUgdGhlbS4gICovCi1zdGF0 aWMgdm9pZCAoKndhcm5fZnVuY3Rpb24pICgpOworc3RhdGljIHZvaWQgKCp3YXJuX2Z1bmN0aW9u KSAoY2hhciAqKTsKIAogLyogU3RhcnQgb2YgZGF0YSBzcGFjZTsgY2FuIGJlIGNoYW5nZWQgYnkg Y2FsbGluZyBtYWxsb2NfaW5pdC4gICovCiBzdGF0aWMgUE9JTlRFUiBkYXRhX3NwYWNlX3N0YXJ0 OwpAQCAtNTMsNyArNTMsNyBAQAogCiAjaWYgZGVmaW5lZCAoSEFWRV9HRVRSTElNSVQpICYmIGRl ZmluZWQgKFJMSU1JVF9BUykKIHN0YXRpYyB2b2lkCi1nZXRfbGltX2RhdGEgKCkKK2dldF9saW1f ZGF0YSAodm9pZCkKIHsKICAgc3RydWN0IHJsaW1pdCBybGltaXQ7CiAKQEAgLTE3MCw3ICsxNzAs NyBAQAogLyogVmVyaWZ5IGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlLCBjb21wbGFpbmluZyBp ZiB3ZSdyZSBuZWFyIHRoZSBlbmQuICovCiAKIHN0YXRpYyB2b2lkCi1jaGVja19tZW1vcnlfbGlt aXRzICgpCitjaGVja19tZW1vcnlfbGltaXRzICh2b2lkKQogewogI2lmZGVmIFJFTF9BTExPQwog ICBleHRlcm4gUE9JTlRFUiAoKnJlYWxfbW9yZWNvcmUpICgpOwpAQCAtMjQ5LDkgKzI0OSw3IEBA CiAgICBXQVJORlVOIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gdG8gY2FsbCB0byBpc3N1ZSBhIHdh cm5pbmcuICAqLwogCiB2b2lkCi1tZW1vcnlfd2FybmluZ3MgKHN0YXJ0LCB3YXJuZnVuKQotICAg ICBQT0lOVEVSIHN0YXJ0OwotICAgICB2b2lkICgqd2FybmZ1bikgKCk7CittZW1vcnlfd2Fybmlu Z3MgKFBPSU5URVIgc3RhcnQsIHZvaWQgKCp3YXJuZnVuKSAoY2hhciAqKSkKIHsKICAgZXh0ZXJu IHZvaWQgKCogX19hZnRlcl9tb3JlY29yZV9ob29rKSAoKTsgICAgIC8qIEZyb20gZ21hbGxvYy5j ICovCiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMveGRpc3AuYycKLS0tIHNyYy94ZGlzcC5jCTIw MTAtMDctMDIgMTI6MTk6NTMgKzAwMDAKKysrIHNyYy94ZGlzcC5jCTIwMTAtMDctMDUgMDE6MTc6 MjMgKzAwMDAKQEAgLTEwMTEsNyArMTAxMSw3IEBACiBzdGF0aWMgaW50IGVjaG9fYXJlYV9kaXNw bGF5IChpbnQpOwogc3RhdGljIHZvaWQgcmVkaXNwbGF5X3dpbmRvd3MgKExpc3BfT2JqZWN0KTsK IHN0YXRpYyB2b2lkIHJlZGlzcGxheV93aW5kb3cgKExpc3BfT2JqZWN0LCBpbnQpOwotc3RhdGlj IExpc3BfT2JqZWN0IHJlZGlzcGxheV93aW5kb3dfZXJyb3IgKCk7CitzdGF0aWMgTGlzcF9PYmpl Y3QgcmVkaXNwbGF5X3dpbmRvd19lcnJvciAoTGlzcF9PYmplY3QpOwogc3RhdGljIExpc3BfT2Jq ZWN0IHJlZGlzcGxheV93aW5kb3dfMCAoTGlzcF9PYmplY3QpOwogc3RhdGljIExpc3BfT2JqZWN0 IHJlZGlzcGxheV93aW5kb3dfMSAoTGlzcF9PYmplY3QpOwogc3RhdGljIGludCB1cGRhdGVfbWVu dV9iYXIgKHN0cnVjdCBmcmFtZSAqLCBpbnQsIGludCk7CkBAIC0xMTA5LDggKzExMDksNyBAQAog ICAgVGhpcyBpcyB0aGUgaGVpZ2h0IG9mIFcgbWludXMgdGhlIGhlaWdodCBvZiBhIG1vZGUgbGlu ZSwgaWYgYW55LiAgKi8KIAogSU5MSU5FIGludAotd2luZG93X3RleHRfYm90dG9tX3kgKHcpCi0g ICAgIHN0cnVjdCB3aW5kb3cgKnc7Cit3aW5kb3dfdGV4dF9ib3R0b21feSAoc3RydWN0IHdpbmRv dyAqdykKIHsKICAgaW50IGhlaWdodCA9IFdJTkRPV19UT1RBTF9IRUlHSFQgKHcpOwogCkBAIC0x MTI0LDkgKzExMjMsNyBAQAogICAgdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSB3aW5kb3cuICAq LwogCiBJTkxJTkUgaW50Ci13aW5kb3dfYm94X3dpZHRoICh3LCBhcmVhKQotICAgICBzdHJ1Y3Qg d2luZG93ICp3OwotICAgICBpbnQgYXJlYTsKK3dpbmRvd19ib3hfd2lkdGggKHN0cnVjdCB3aW5k b3cgKncsIGludCBhcmVhKQogewogICBpbnQgY29scyA9IFhGQVNUSU5UICh3LT50b3RhbF9jb2xz KTsKICAgaW50IHBpeGVscyA9IDA7CkBAIC0xMTY1LDggKzExNjIsNyBAQAogICAgaW5jbHVkaW5n IG1vZGUgbGluZXMgb2YgVywgaWYgYW55LiAgKi8KIAogSU5MSU5FIGludAotd2luZG93X2JveF9o ZWlnaHQgKHcpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Cit3aW5kb3dfYm94X2hlaWdodCAoc3Ry dWN0IHdpbmRvdyAqdykKIHsKICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7 CiAgIGludCBoZWlnaHQgPSBXSU5ET1dfVE9UQUxfSEVJR0hUICh3KTsKQEAgLTEyMTMsOSArMTIw OSw3IEBACiAgICB3aG9sZSB3aW5kb3csIHRvIHRoZSByaWdodCBvZiB0aGUgbGVmdCBmcmluZ2Ug b2YgVy4gICovCiAKIElOTElORSBpbnQKLXdpbmRvd19ib3hfbGVmdF9vZmZzZXQgKHcsIGFyZWEp Ci0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGludCBhcmVhOword2luZG93X2JveF9sZWZ0 X29mZnNldCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGFyZWEpCiB7CiAgIGludCB4OwogCkBAIC0x MjQ3LDkgKzEyNDEsNyBAQAogICAgd2hvbGUgd2luZG93LCB0byB0aGUgbGVmdCBvZiB0aGUgcmln aHQgZnJpbmdlIG9mIFcuICAqLwogCiBJTkxJTkUgaW50Ci13aW5kb3dfYm94X3JpZ2h0X29mZnNl dCAodywgYXJlYSkKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgaW50IGFyZWE7Cit3aW5k b3dfYm94X3JpZ2h0X29mZnNldCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGFyZWEpCiB7CiAgIHJl dHVybiB3aW5kb3dfYm94X2xlZnRfb2Zmc2V0ICh3LCBhcmVhKSArIHdpbmRvd19ib3hfd2lkdGgg KHcsIGFyZWEpOwogfQpAQCAtMTI1OSw5ICsxMjUxLDcgQEAKICAgIHdob2xlIHdpbmRvdywgdG8g dGhlIHJpZ2h0IG9mIHRoZSBsZWZ0IGZyaW5nZSBvZiBXLiAgKi8KIAogSU5MSU5FIGludAotd2lu ZG93X2JveF9sZWZ0ICh3LCBhcmVhKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQg YXJlYTsKK3dpbmRvd19ib3hfbGVmdCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGFyZWEpCiB7CiAg IHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOwogICBpbnQgeDsKQEAgLTEyODEs OSArMTI3MSw3IEBACiAgICB3aG9sZSB3aW5kb3csIHRvIHRoZSBsZWZ0IG9mIHRoZSByaWdodCBm cmluZ2Ugb2YgVy4gICovCiAKIElOTElORSBpbnQKLXdpbmRvd19ib3hfcmlnaHQgKHcsIGFyZWEp Ci0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGludCBhcmVhOword2luZG93X2JveF9yaWdo dCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGFyZWEpCiB7CiAgIHJldHVybiB3aW5kb3dfYm94X2xl ZnQgKHcsIGFyZWEpICsgd2luZG93X2JveF93aWR0aCAodywgYXJlYSk7CiB9CkBAIC0xMjk2LDEw ICsxMjg0LDcgQEAKICAgICpCT1hfV0lEVEgsIGFuZCAqQk9YX0hFSUdIVCB0aGUgcGl4ZWwgd2lk dGggYW5kIGhlaWdodCBvZiB0aGUgYm94LiAgKi8KIAogSU5MSU5FIHZvaWQKLXdpbmRvd19ib3gg KHcsIGFyZWEsIGJveF94LCBib3hfeSwgYm94X3dpZHRoLCBib3hfaGVpZ2h0KQotICAgICBzdHJ1 Y3Qgd2luZG93ICp3OwotICAgICBpbnQgYXJlYTsKLSAgICAgaW50ICpib3hfeCwgKmJveF95LCAq Ym94X3dpZHRoLCAqYm94X2hlaWdodDsKK3dpbmRvd19ib3ggKHN0cnVjdCB3aW5kb3cgKncsIGlu dCBhcmVhLCBpbnQgKmJveF94LCBpbnQgKmJveF95LCBpbnQgKmJveF93aWR0aCwgaW50ICpib3hf aGVpZ2h0KQogewogICBpZiAoYm94X3dpZHRoKQogICAgICpib3hfd2lkdGggPSB3aW5kb3dfYm94 X3dpZHRoICh3LCBhcmVhKTsKQEAgLTEzNDcsOCArMTMzMiw3IEBACiAgICBUaGlzIGNhbiBtb2Rp ZnkgSVQncyBzZXR0aW5ncy4gICovCiAKIGludAotbGluZV9ib3R0b21feSAoaXQpCi0gICAgIHN0 cnVjdCBpdCAqaXQ7CitsaW5lX2JvdHRvbV95IChzdHJ1Y3QgaXQgKml0KQogewogICBpbnQgbGlu ZV9oZWlnaHQgPSBpdC0+bWF4X2FzY2VudCArIGl0LT5tYXhfZGVzY2VudDsKICAgaW50IGxpbmVf dG9wX3kgPSBpdC0+Y3VycmVudF95OwpAQCAtMTM5MCw5ICsxMzc0LDcgQEAKICAgIFNldCAqUk9X SCBhbmQgKlZQT1MgdG8gcm93J3MgdmlzaWJsZSBoZWlnaHQgYW5kIFZQT1MgKHJvdyBudW1iZXIp LiAgKi8KIAogaW50Ci1wb3NfdmlzaWJsZV9wICh3LCBjaGFycG9zLCB4LCB5LCBydG9wLCByYm90 LCByb3doLCB2cG9zKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQgY2hhcnBvcywg KngsICp5LCAqcnRvcCwgKnJib3QsICpyb3doLCAqdnBvczsKK3Bvc192aXNpYmxlX3AgKHN0cnVj dCB3aW5kb3cgKncsIGludCBjaGFycG9zLCBpbnQgKngsIGludCAqeSwgaW50ICpydG9wLCBpbnQg KnJib3QsIGludCAqcm93aCwgaW50ICp2cG9zKQogewogICBzdHJ1Y3QgaXQgaXQ7CiAgIHN0cnVj dCB0ZXh0X3BvcyB0b3A7CkBAIC0xNTMxLDkgKzE1MTMsNyBAQAogICAgY2hhcmFjdGVyLiAgKi8K IAogc3RhdGljIElOTElORSBpbnQKLXN0cmluZ19jaGFyX2FuZF9sZW5ndGggKHN0ciwgbGVuKQot ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzdHI7Ci0gICAgIGludCAqbGVuOworc3RyaW5nX2No YXJfYW5kX2xlbmd0aCAoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgKmxlbikKIHsKICAg aW50IGM7CiAKQEAgLTE1NTMsMTAgKzE1MzMsNyBAQAogICAgaW4gU1RSSU5HLCByZXR1cm4gdGhl IHBvc2l0aW9uIE5DSEFSUyBhaGVhZCAoTkNIQVJTID49IDApLiAgKi8KIAogc3RhdGljIHN0cnVj dCB0ZXh0X3Bvcwotc3RyaW5nX3Bvc19uY2hhcnNfYWhlYWQgKHBvcywgc3RyaW5nLCBuY2hhcnMp Ci0gICAgIHN0cnVjdCB0ZXh0X3BvcyBwb3M7Ci0gICAgIExpc3BfT2JqZWN0IHN0cmluZzsKLSAg ICAgaW50IG5jaGFyczsKK3N0cmluZ19wb3NfbmNoYXJzX2FoZWFkIChzdHJ1Y3QgdGV4dF9wb3Mg cG9zLCBMaXNwX09iamVjdCBzdHJpbmcsIGludCBuY2hhcnMpCiB7CiAgIHhhc3NlcnQgKFNUUklO R1AgKHN0cmluZykgJiYgbmNoYXJzID49IDApOwogCkBAIC0xNTg2LDkgKzE1NjMsNyBAQAogICAg Zm9yIGNoYXJhY3RlciBwb3NpdGlvbiBDSEFSUE9TIGluIFNUUklORy4gICovCiAKIHN0YXRpYyBJ TkxJTkUgc3RydWN0IHRleHRfcG9zCi1zdHJpbmdfcG9zIChjaGFycG9zLCBzdHJpbmcpCi0gICAg IGludCBjaGFycG9zOwotICAgICBMaXNwX09iamVjdCBzdHJpbmc7CitzdHJpbmdfcG9zIChpbnQg Y2hhcnBvcywgTGlzcF9PYmplY3Qgc3RyaW5nKQogewogICBzdHJ1Y3QgdGV4dF9wb3MgcG9zOwog ICB4YXNzZXJ0IChTVFJJTkdQIChzdHJpbmcpKTsKQEAgLTE2MDMsMTAgKzE1NzgsNyBAQAogICAg bWVhbnMgcmVjb2duaXplIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KIAogc3RhdGljIHN0cnVj dCB0ZXh0X3BvcwotY19zdHJpbmdfcG9zIChjaGFycG9zLCBzLCBtdWx0aWJ5dGVfcCkKLSAgICAg aW50IGNoYXJwb3M7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKnM7Ci0gICAgIGludCBtdWx0aWJ5dGVf cDsKK2Nfc3RyaW5nX3BvcyAoaW50IGNoYXJwb3MsIHVuc2lnbmVkIGNoYXIgKnMsIGludCBtdWx0 aWJ5dGVfcCkKIHsKICAgc3RydWN0IHRleHRfcG9zIHBvczsKIApAQCAtMTYzOCw5ICsxNjEwLDcg QEAKICAgIG5vbi16ZXJvIG1lYW5zIHJlY29nbml6ZSBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gICov CiAKIHN0YXRpYyBpbnQKLW51bWJlcl9vZl9jaGFycyAocywgbXVsdGlieXRlX3ApCi0gICAgIHVu c2lnbmVkIGNoYXIgKnM7Ci0gICAgIGludCBtdWx0aWJ5dGVfcDsKK251bWJlcl9vZl9jaGFycyAo dW5zaWduZWQgY2hhciAqcywgaW50IG11bHRpYnl0ZV9wKQogewogICBpbnQgbmNoYXJzOwogCkBA IC0xNjY3LDkgKzE2MzcsNyBAQAogICAgTkVXUE9TLT5jaGFycG9zIG11c3QgYmUgPj0gUE9TLmNo YXJwb3MuICAqLwogCiBzdGF0aWMgdm9pZAotY29tcHV0ZV9zdHJpbmdfcG9zIChuZXdwb3MsIHBv cywgc3RyaW5nKQotICAgICBzdHJ1Y3QgdGV4dF9wb3MgKm5ld3BvcywgcG9zOwotICAgICBMaXNw X09iamVjdCBzdHJpbmc7Citjb21wdXRlX3N0cmluZ19wb3MgKHN0cnVjdCB0ZXh0X3BvcyAqbmV3 cG9zLCBzdHJ1Y3QgdGV4dF9wb3MgcG9zLCBMaXNwX09iamVjdCBzdHJpbmcpCiB7CiAgIHhhc3Nl cnQgKFNUUklOR1AgKHN0cmluZykpOwogICB4YXNzZXJ0IChDSEFSUE9TICgqbmV3cG9zKSA+PSBD SEFSUE9TIChwb3MpKTsKQEAgLTE2ODYsOSArMTY1NCw3IEBACiAgICBmcmFtZSBGLiAgRkFDRV9J RCBzcGVjaWZpZXMgd2hhdCBsaW5lJ3MgaGVpZ2h0IHRvIGVzdGltYXRlLiAgKi8KIAogaW50Ci1l c3RpbWF0ZV9tb2RlX2xpbmVfaGVpZ2h0IChmLCBmYWNlX2lkKQotICAgICBzdHJ1Y3QgZnJhbWUg KmY7Ci0gICAgIGVudW0gZmFjZV9pZCBmYWNlX2lkOworZXN0aW1hdGVfbW9kZV9saW5lX2hlaWdo dCAoc3RydWN0IGZyYW1lICpmLCBlbnVtIGZhY2VfaWQgZmFjZV9pZCkKIHsKICNpZmRlZiBIQVZF X1dJTkRPV19TWVNURU0KICAgaWYgKEZSQU1FX1dJTkRPV19QIChmKSkKQEAgLTE3MjIsMTIgKzE2 ODgsOCBAQAogICAgbm90IGZvcmNlIHRoZSB2YWx1ZSBpbnRvIHJhbmdlLiAgKi8KIAogdm9pZAot cGl4ZWxfdG9fZ2x5cGhfY29vcmRzIChmLCBwaXhfeCwgcGl4X3ksIHgsIHksIGJvdW5kcywgbm9j bGlwKQotICAgICBGUkFNRV9QVFIgZjsKLSAgICAgcmVnaXN0ZXIgaW50IHBpeF94LCBwaXhfeTsK LSAgICAgaW50ICp4LCAqeTsKLSAgICAgTmF0aXZlUmVjdGFuZ2xlICpib3VuZHM7Ci0gICAgIGlu dCBub2NsaXA7CitwaXhlbF90b19nbHlwaF9jb29yZHMgKEZSQU1FX1BUUiBmLCByZWdpc3RlciBp bnQgcGl4X3gsIHJlZ2lzdGVyIGludCBwaXhfeSwKKwkJICAgICAgIGludCAqeCwgaW50ICp5LCBO YXRpdmVSZWN0YW5nbGUgKmJvdW5kcywgaW50IG5vY2xpcCkKIHsKIAogI2lmZGVmIEhBVkVfV0lO RE9XX1NZU1RFTQpAQCAtMTc3NiwxMCArMTczOCw3IEBACiAgICByZXR1cm4gMC4gICovCiAKIGlu dAotZ2x5cGhfdG9fcGl4ZWxfY29vcmRzICh3LCBocG9zLCB2cG9zLCBmcmFtZV94LCBmcmFtZV95 KQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQgaHBvcywgdnBvczsKLSAgICAgaW50 ICpmcmFtZV94LCAqZnJhbWVfeTsKK2dseXBoX3RvX3BpeGVsX2Nvb3JkcyAoc3RydWN0IHdpbmRv dyAqdywgaW50IGhwb3MsIGludCB2cG9zLCBpbnQgKmZyYW1lX3gsIGludCAqZnJhbWVfeSkKIHsK ICNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KICAgaWYgKEZSQU1FX1dJTkRPV19QIChYRlJBTUUg KFdJTkRPV19GUkFNRSAodykpKSkKQEAgLTE4MzksMTAgKzE3OTgsNyBAQAogCiBzdGF0aWMKIHN0 cnVjdCBnbHlwaCAqCi14X3lfdG9faHBvc192cG9zICh3LCB4LCB5LCBocG9zLCB2cG9zLCBkeCwg ZHksIGFyZWEpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGludCB4LCB5OwotICAgICBp bnQgKmhwb3MsICp2cG9zLCAqZHgsICpkeSwgKmFyZWE7Cit4X3lfdG9faHBvc192cG9zIChzdHJ1 Y3Qgd2luZG93ICp3LCBpbnQgeCwgaW50IHksIGludCAqaHBvcywgaW50ICp2cG9zLCBpbnQgKmR4 LCBpbnQgKmR5LCBpbnQgKmFyZWEpCiB7CiAgIHN0cnVjdCBnbHlwaCAqZ2x5cGgsICplbmQ7CiAg IHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IE5VTEw7CkBAIC0xOTE5LDkgKzE4NzUsNyBAQAogICAg VGFrZXMgcHNldWRvLXdpbmRvd3MgaW50byBhY2NvdW50LiAgKi8KIAogdm9pZAotZnJhbWVfdG9f d2luZG93X3BpeGVsX3h5ICh3LCB4LCB5KQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBp bnQgKngsICp5OworZnJhbWVfdG9fd2luZG93X3BpeGVsX3h5IChzdHJ1Y3Qgd2luZG93ICp3LCBp bnQgKngsIGludCAqeSkKIHsKICAgaWYgKHctPnBzZXVkb193aW5kb3dfcCkKICAgICB7CkBAIC0x OTQzLDEwICsxODk3LDcgQEAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHN0b3JlZCByZWN0YW5n bGVzLiAgKi8KIAogaW50Ci1nZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdHMgKHMsIHJlY3RzLCBu KQotICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOwotICAgICBOYXRpdmVSZWN0YW5nbGUgKnJl Y3RzOwotICAgICBpbnQgbjsKK2dldF9nbHlwaF9zdHJpbmdfY2xpcF9yZWN0cyAoc3RydWN0IGds eXBoX3N0cmluZyAqcywgTmF0aXZlUmVjdGFuZ2xlICpyZWN0cywgaW50IG4pCiB7CiAgIFhSZWN0 YW5nbGUgcjsKIApAQCAtMjE0MCw5ICsyMDkxLDcgQEAKICAgIFJldHVybiBpbiAqTlIgdGhlIGNs aXBwaW5nIHJlY3RhbmdsZSBmb3IgZ2x5cGggc3RyaW5nIFMuICAqLwogCiB2b2lkCi1nZXRfZ2x5 cGhfc3RyaW5nX2NsaXBfcmVjdCAocywgbnIpCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnM7 Ci0gICAgIE5hdGl2ZVJlY3RhbmdsZSAqbnI7CitnZXRfZ2x5cGhfc3RyaW5nX2NsaXBfcmVjdCAo c3RydWN0IGdseXBoX3N0cmluZyAqcywgTmF0aXZlUmVjdGFuZ2xlICpucikKIHsKICAgZ2V0X2ds eXBoX3N0cmluZ19jbGlwX3JlY3RzIChzLCBuciwgMSk7CiB9CkBAIC0yMTU0LDExICsyMTAzLDcg QEAKICovCiAKIHZvaWQKLWdldF9waHlzX2N1cnNvcl9nZW9tZXRyeSAodywgcm93LCBnbHlwaCwg eHAsIHlwLCBoZWlnaHRwKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICpyb3c7Ci0gICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7Ci0gICAgIGludCAqeHAsICp5 cCwgKmhlaWdodHA7CitnZXRfcGh5c19jdXJzb3JfZ2VvbWV0cnkgKHN0cnVjdCB3aW5kb3cgKncs IHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgc3RydWN0IGdseXBoICpnbHlwaCwgaW50ICp4cCwgaW50 ICp5cCwgaW50ICpoZWlnaHRwKQogewogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRP V19GUkFNRSAodykpOwogICBpbnQgeCwgeSwgd2QsIGgsIGgwLCB5MDsKQEAgLTIyMTgsMTAgKzIx NjMsNyBAQAogICovCiAKIHZvaWQKLXJlbWVtYmVyX21vdXNlX2dseXBoIChmLCBneCwgZ3ksIHJl Y3QpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IGd4LCBneTsKLSAgICAgTmF0aXZl UmVjdGFuZ2xlICpyZWN0OworcmVtZW1iZXJfbW91c2VfZ2x5cGggKHN0cnVjdCBmcmFtZSAqZiwg aW50IGd4LCBpbnQgZ3ksIE5hdGl2ZVJlY3RhbmdsZSAqcmVjdCkKIHsKICAgTGlzcF9PYmplY3Qg d2luZG93OwogICBzdHJ1Y3Qgd2luZG93ICp3OwpAQCAtMjQxNyw4ICsyMzU5LDcgQEAKIC8qIEVy cm9yIGhhbmRsZXIgZm9yIHNhZmVfZXZhbCBhbmQgc2FmZV9jYWxsLiAgKi8KIAogc3RhdGljIExp c3BfT2JqZWN0Ci1zYWZlX2V2YWxfaGFuZGxlciAoYXJnKQotICAgICBMaXNwX09iamVjdCBhcmc7 CitzYWZlX2V2YWxfaGFuZGxlciAoTGlzcF9PYmplY3QgYXJnKQogewogICBhZGRfdG9fbG9nICgi RXJyb3IgZHVyaW5nIHJlZGlzcGxheTogJXMiLCBhcmcsIFFuaWwpOwogICByZXR1cm4gUW5pbDsK QEAgLTI0MzMsOSArMjM3NCw3IEBACiAgICByZWRpc3BsYXkgZHVyaW5nIHRoZSBldmFsdWF0aW9u LiAgKi8KIAogTGlzcF9PYmplY3QKLXNhZmVfY2FsbCAobmFyZ3MsIGFyZ3MpCi0gICAgIGludCBu YXJnczsKLSAgICAgTGlzcF9PYmplY3QgKmFyZ3M7CitzYWZlX2NhbGwgKGludCBuYXJncywgTGlz cF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHZhbDsKIApAQCAtMjQ2NSw4ICsyNDA0 LDcgQEAKICAgIFJldHVybiB0aGUgcmVzdWx0LCBvciBuaWwgaWYgc29tZXRoaW5nIHdlbnQgd3Jv bmcuICAqLwogCiBMaXNwX09iamVjdAotc2FmZV9jYWxsMSAoZm4sIGFyZykKLSAgICAgTGlzcF9P YmplY3QgZm4sIGFyZzsKK3NhZmVfY2FsbDEgKExpc3BfT2JqZWN0IGZuLCBMaXNwX09iamVjdCBh cmcpCiB7CiAgIExpc3BfT2JqZWN0IGFyZ3NbMl07CiAgIGFyZ3NbMF0gPSBmbjsKQEAgLTI1OTUs MTIgKzI1MzMsOCBAQAogICAgdGhlIGRlc2lyZWQgbWF0cml4IG9mIFcuICAqLwogCiB2b2lkCi1p bml0X2l0ZXJhdG9yIChpdCwgdywgY2hhcnBvcywgYnl0ZXBvcywgcm93LCBiYXNlX2ZhY2VfaWQp Ci0gICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIEVNQUNT X0lOVCBjaGFycG9zLCBieXRlcG9zOwotICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7Ci0gICAg IGVudW0gZmFjZV9pZCBiYXNlX2ZhY2VfaWQ7Citpbml0X2l0ZXJhdG9yIChzdHJ1Y3QgaXQgKml0 LCBzdHJ1Y3Qgd2luZG93ICp3LCBFTUFDU19JTlQgY2hhcnBvcywgRU1BQ1NfSU5UIGJ5dGVwb3Ms CisJICAgICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgZW51bSBmYWNlX2lkIGJhc2VfZmFjZV9p ZCkKIHsKICAgaW50IGhpZ2hsaWdodF9yZWdpb25fcDsKICAgZW51bSBmYWNlX2lkIHJlbWFwcGVk X2Jhc2VfZmFjZV9pZCA9IGJhc2VfZmFjZV9pZDsKQEAgLTI4OTYsMTAgKzI4MzAsNyBAQAogLyog SW5pdGlhbGl6ZSBJVCBmb3IgdGhlIGRpc3BsYXkgb2Ygd2luZG93IFcgd2l0aCB3aW5kb3cgc3Rh cnQgUE9TLiAgKi8KIAogdm9pZAotc3RhcnRfZGlzcGxheSAoaXQsIHcsIHBvcykKLSAgICAgc3Ry dWN0IGl0ICppdDsKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgc3RydWN0IHRleHRfcG9z IHBvczsKK3N0YXJ0X2Rpc3BsYXkgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB3aW5kb3cgKncsIHN0 cnVjdCB0ZXh0X3BvcyBwb3MpCiB7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKICAgaW50IGZp cnN0X3Zwb3MgPSBXSU5ET1dfV0FOVFNfSEVBREVSX0xJTkVfUCAodykgPyAxIDogMDsKQEAgLTI5 NzEsOSArMjkwMiw3IEBACiAgICB0ZXh0LiAgVyBpcyB0aGUgd2luZG93IHdlIGRpc3BsYXksIGZv ciB0ZXh0IHByb3BlcnR5IGxvb2t1cC4gICovCiAKIHN0YXRpYyBpbnQKLWluX2VsbGlwc2VzX2Zv cl9pbnZpc2libGVfdGV4dF9wIChwb3MsIHcpCi0gICAgIHN0cnVjdCBkaXNwbGF5X3BvcyAqcG9z OwotICAgICBzdHJ1Y3Qgd2luZG93ICp3OworaW5fZWxsaXBzZXNfZm9yX2ludmlzaWJsZV90ZXh0 X3AgKHN0cnVjdCBkaXNwbGF5X3BvcyAqcG9zLCBzdHJ1Y3Qgd2luZG93ICp3KQogewogICBMaXNw X09iamVjdCBwcm9wLCB3aW5kb3c7CiAgIGludCBlbGxpcHNlc19wID0gMDsKQEAgLTMwMDcsMTAg KzI5MzYsNyBAQAogICAgaXMgemVybyBpZiB0aGVyZSBhcmUgb3ZlcmxheSBzdHJpbmdzIHdpdGgg bmV3bGluZXMgYXQgUE9TLiAgKi8KIAogc3RhdGljIGludAotaW5pdF9mcm9tX2Rpc3BsYXlfcG9z IChpdCwgdywgcG9zKQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBzdHJ1Y3Qgd2luZG93ICp3 OwotICAgICBzdHJ1Y3QgZGlzcGxheV9wb3MgKnBvczsKK2luaXRfZnJvbV9kaXNwbGF5X3BvcyAo c3RydWN0IGl0ICppdCwgc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGRpc3BsYXlfcG9zICpwb3Mp CiB7CiAgIEVNQUNTX0lOVCBjaGFycG9zID0gQ0hBUlBPUyAocG9zLT5wb3MpLCBieXRlcG9zID0g QllURVBPUyAocG9zLT5wb3MpOwogICBpbnQgaSwgb3ZlcmxheV9zdHJpbmdzX3dpdGhfbmV3bGlu ZXMgPSAwOwpAQCAtMzExOCwxMCArMzA0NCw3IEBACiAgICBzdGFydGluZyBhdCBST1ctPnN0YXJ0 LiAgKi8KIAogc3RhdGljIHZvaWQKLWluaXRfdG9fcm93X3N0YXJ0IChpdCwgdywgcm93KQotICAg ICBzdHJ1Y3QgaXQgKml0OwotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICpyb3c7Citpbml0X3RvX3Jvd19zdGFydCAoc3RydWN0IGl0ICppdCwgc3RydWN0IHdp bmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqcm93KQogewogICBpbml0X2Zyb21fZGlzcGxheV9w b3MgKGl0LCB3LCAmcm93LT5zdGFydCk7CiAgIGl0LT5zdGFydCA9IHJvdy0+c3RhcnQ7CkBAIC0z MTM2LDEwICszMDU5LDcgQEAKICAgIGVuZCBwb3NpdGlvbi4gICovCiAKIHN0YXRpYyBpbnQKLWlu aXRfdG9fcm93X2VuZCAoaXQsIHcsIHJvdykKLSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgc3Ry dWN0IHdpbmRvdyAqdzsKLSAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93OworaW5pdF90b19yb3df ZW5kIChzdHJ1Y3QgaXQgKml0LCBzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpy b3cpCiB7CiAgIGludCBzdWNjZXNzID0gMDsKIApAQCAtMzE2Nyw4ICszMDg3LDcgQEAKICAgIHRv IHN0b3AuICAqLwogCiBzdGF0aWMgdm9pZAotaGFuZGxlX3N0b3AgKGl0KQotICAgICBzdHJ1Y3Qg aXQgKml0OworaGFuZGxlX3N0b3AgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIGVudW0gcHJvcF9oYW5k bGVkIGhhbmRsZWQ7CiAgIGludCBoYW5kbGVfb3ZlcmxheV9jaGFuZ2VfcDsKQEAgLTMyNjEsOCAr MzE4MCw3IEBACiAgICBpbmZvcm1hdGlvbiBmb3IgSVQncyBjdXJyZW50IHBvc2l0aW9uLiAgKi8K IAogc3RhdGljIHZvaWQKLWNvbXB1dGVfc3RvcF9wb3MgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0 OworY29tcHV0ZV9zdG9wX3BvcyAoc3RydWN0IGl0ICppdCkKIHsKICAgcmVnaXN0ZXIgSU5URVJW QUwgaXYsIG5leHRfaXY7CiAgIExpc3BfT2JqZWN0IG9iamVjdCwgbGltaXQsIHBvc2l0aW9uOwpA QCAtMzM3MSw4ICszMjg5LDcgQEAKICAgIHhtYWxsb2MuICAqLwogCiBzdGF0aWMgRU1BQ1NfSU5U Ci1uZXh0X292ZXJsYXlfY2hhbmdlIChwb3MpCi0gICAgIEVNQUNTX0lOVCBwb3M7CituZXh0X292 ZXJsYXlfY2hhbmdlIChFTUFDU19JTlQgcG9zKQogewogICBpbnQgbm92ZXJsYXlzOwogICBFTUFD U19JTlQgZW5kcG9zOwpAQCAtMzQwOCw4ICszMzI1LDcgQEAKICAgIHJlZ2lvbnMgb2YgdGV4dC4g ICovCiAKIHN0YXRpYyBlbnVtIHByb3BfaGFuZGxlZAotaGFuZGxlX2ZvbnRpZmllZF9wcm9wIChp dCkKLSAgICAgc3RydWN0IGl0ICppdDsKK2hhbmRsZV9mb250aWZpZWRfcHJvcCAoc3RydWN0IGl0 ICppdCkKIHsKICAgTGlzcF9PYmplY3QgcHJvcCwgcG9zOwogICBlbnVtIHByb3BfaGFuZGxlZCBo YW5kbGVkID0gSEFORExFRF9OT1JNQUxMWTsKQEAgLTM0OTYsOCArMzQxMiw3IEBACiAgICBDYWxs ZWQgZnJvbSBoYW5kbGVfc3RvcC4gICovCiAKIHN0YXRpYyBlbnVtIHByb3BfaGFuZGxlZAotaGFu ZGxlX2ZhY2VfcHJvcCAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7CitoYW5kbGVfZmFjZV9wcm9w IChzdHJ1Y3QgaXQgKml0KQogewogICBpbnQgbmV3X2ZhY2VfaWQ7CiAgIEVNQUNTX0lOVCBuZXh0 X3N0b3A7CkBAIC0zNjM1LDggKzM1NTAsNyBAQAogICAgT3RoZXJ3aXNlLCB1c2UgdGhlIGl0ZXJh dG9yJ3MgYmFzZV9mYWNlX2lkLiAgKi8KIAogc3RhdGljIGludAotdW5kZXJseWluZ19mYWNlX2lk IChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK3VuZGVybHlpbmdfZmFjZV9pZCAoc3RydWN0IGl0 ICppdCkKIHsKICAgaW50IGZhY2VfaWQgPSBpdC0+YmFzZV9mYWNlX2lkLCBpOwogCkBAIC0zNjU1 LDkgKzM1NjksNyBAQAogICAgcG9zaXRpb24uICBWYWx1ZSBpcyB0aGUgaWQgb2YgdGhlIGZhY2Uu ICAqLwogCiBzdGF0aWMgaW50Ci1mYWNlX2JlZm9yZV9vcl9hZnRlcl9pdF9wb3MgKGl0LCBiZWZv cmVfcCkKLSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgaW50IGJlZm9yZV9wOworZmFjZV9iZWZv cmVfb3JfYWZ0ZXJfaXRfcG9zIChzdHJ1Y3QgaXQgKml0LCBpbnQgYmVmb3JlX3ApCiB7CiAgIGlu dCBmYWNlX2lkLCBsaW1pdDsKICAgRU1BQ1NfSU5UIG5leHRfY2hlY2tfY2hhcnBvczsKQEAgLTM3 NzEsOCArMzY4Myw3IEBACiAgICBwb3NpdGlvbi4gIENhbGxlZCBmcm9tIGhhbmRsZV9zdG9wLiAg Ki8KIAogc3RhdGljIGVudW0gcHJvcF9oYW5kbGVkCi1oYW5kbGVfaW52aXNpYmxlX3Byb3AgKGl0 KQotICAgICBzdHJ1Y3QgaXQgKml0OworaGFuZGxlX2ludmlzaWJsZV9wcm9wIChzdHJ1Y3QgaXQg Kml0KQogewogICBlbnVtIHByb3BfaGFuZGxlZCBoYW5kbGVkID0gSEFORExFRF9OT1JNQUxMWTsK IApAQCAtMzk4NSw5ICszODk2LDcgQEAKICAgIFJlcGxhY2VzIExFTiBjaGFyYWN0ZXJzIGZyb20g YnVmZmVyLiAgKi8KIAogc3RhdGljIHZvaWQKLXNldHVwX2Zvcl9lbGxpcHNpcyAoaXQsIGxlbikK LSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgaW50IGxlbjsKK3NldHVwX2Zvcl9lbGxpcHNpcyAo c3RydWN0IGl0ICppdCwgaW50IGxlbikKIHsKICAgLyogVXNlIHRoZSBkaXNwbGF5IHRhYmxlIGRl ZmluaXRpb24gZm9yIGAuLi4nLiAgSW52YWxpZCBnbHlwaHMKICAgICAgd2lsbCBiZSBoYW5kbGVk IGJ5IHRoZSBtZXRob2QgcmV0dXJuaW5nIGVsZW1lbnRzIGZyb20gZHB2ZWMuICAqLwpAQCAtNDAz MSw4ICszOTQwLDcgQEAKICAgIE90aGVyd2lzZSB3ZSByZXR1cm4gSEFORExFRF9OT1JNQUxMWS4g ICovCiAKIHN0YXRpYyBlbnVtIHByb3BfaGFuZGxlZAotaGFuZGxlX2Rpc3BsYXlfcHJvcCAoaXQp Ci0gICAgIHN0cnVjdCBpdCAqaXQ7CitoYW5kbGVfZGlzcGxheV9wcm9wIChzdHJ1Y3QgaXQgKml0 KQogewogICBMaXNwX09iamVjdCBwcm9wLCBvYmplY3QsIG92ZXJsYXk7CiAgIHN0cnVjdCB0ZXh0 X3BvcyAqcG9zaXRpb247CkBAIC00MTI5LDEwICs0MDM3LDcgQEAKICAgIGF0IFNUQVJUX1BPUyBp biBPQkpFQ1QuICAqLwogCiBzdGF0aWMgc3RydWN0IHRleHRfcG9zCi1kaXNwbGF5X3Byb3BfZW5k IChpdCwgb2JqZWN0LCBzdGFydF9wb3MpCi0gICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAgIExpc3Bf T2JqZWN0IG9iamVjdDsKLSAgICAgc3RydWN0IHRleHRfcG9zIHN0YXJ0X3BvczsKK2Rpc3BsYXlf cHJvcF9lbmQgKHN0cnVjdCBpdCAqaXQsIExpc3BfT2JqZWN0IG9iamVjdCwgc3RydWN0IHRleHRf cG9zIHN0YXJ0X3BvcykKIHsKICAgTGlzcF9PYmplY3QgZW5kOwogICBzdHJ1Y3QgdGV4dF9wb3Mg ZW5kX3BvczsKQEAgLTQ1MzksOCArNDQ0NCw3IEBACiAgICB0cmVhdGVkIGFzIGludGFuZ2libGUu ICAqLwogCiBzdGF0aWMgaW50Ci1zaW5nbGVfZGlzcGxheV9zcGVjX2ludGFuZ2libGVfcCAocHJv cCkKLSAgICAgTGlzcF9PYmplY3QgcHJvcDsKK3NpbmdsZV9kaXNwbGF5X3NwZWNfaW50YW5naWJs ZV9wIChMaXNwX09iamVjdCBwcm9wKQogewogICAvKiBTa2lwIG92ZXIgYHdoZW4gRk9STScuICAq LwogICBpZiAoQ09OU1AgKHByb3ApICYmIEVRIChYQ0FSIChwcm9wKSwgUXdoZW4pKQpAQCAtNDU4 Miw4ICs0NDg2LDcgQEAKICAgIHRyZWF0ZWQgYXMgaW50YW5naWJsZS4gICovCiAKIGludAotZGlz cGxheV9wcm9wX2ludGFuZ2libGVfcCAocHJvcCkKLSAgICAgTGlzcF9PYmplY3QgcHJvcDsKK2Rp c3BsYXlfcHJvcF9pbnRhbmdpYmxlX3AgKExpc3BfT2JqZWN0IHByb3ApCiB7CiAgIGlmIChDT05T UCAocHJvcCkKICAgICAgICYmIENPTlNQIChYQ0FSIChwcm9wKSkKQEAgLTQ2MTUsOCArNDUxOCw3 IEBACiAvKiBSZXR1cm4gMSBpZiBQUk9QIGlzIGEgZGlzcGxheSBzdWItcHJvcGVydHkgdmFsdWUg Y29udGFpbmluZyBTVFJJTkcuICAqLwogCiBzdGF0aWMgaW50Ci1zaW5nbGVfZGlzcGxheV9zcGVj X3N0cmluZ19wIChwcm9wLCBzdHJpbmcpCi0gICAgIExpc3BfT2JqZWN0IHByb3AsIHN0cmluZzsK K3NpbmdsZV9kaXNwbGF5X3NwZWNfc3RyaW5nX3AgKExpc3BfT2JqZWN0IHByb3AsIExpc3BfT2Jq ZWN0IHN0cmluZykKIHsKICAgaWYgKEVRIChzdHJpbmcsIHByb3ApKQogICAgIHJldHVybiAxOwpA QCAtNDY1MCw4ICs0NTUyLDcgQEAKIC8qIFJldHVybiAxIGlmIFNUUklORyBhcHBlYXJzIGluIHRo ZSBgZGlzcGxheScgcHJvcGVydHkgUFJPUC4gICovCiAKIHN0YXRpYyBpbnQKLWRpc3BsYXlfcHJv cF9zdHJpbmdfcCAocHJvcCwgc3RyaW5nKQotICAgICBMaXNwX09iamVjdCBwcm9wLCBzdHJpbmc7 CitkaXNwbGF5X3Byb3Bfc3RyaW5nX3AgKExpc3BfT2JqZWN0IHByb3AsIExpc3BfT2JqZWN0IHN0 cmluZykKIHsKICAgaWYgKENPTlNQIChwcm9wKQogICAgICAgJiYgQ09OU1AgKFhDQVIgKHByb3Ap KQpAQCAtNDY5MiwxMSArNDU5Myw4IEBACiAgICBjYWxsZWQgYXN5bmNocm9ub3VzbHkgZnJvbSBu b3RlX21vdXNlX2hpZ2hsaWdodC4gICovCiAKIHN0YXRpYyBFTUFDU19JTlQKLXN0cmluZ19idWZm ZXJfcG9zaXRpb25fbGltICh3LCBzdHJpbmcsIGZyb20sIHRvLCBiYWNrX3ApCi0gICAgIHN0cnVj dCB3aW5kb3cgKnc7Ci0gICAgIExpc3BfT2JqZWN0IHN0cmluZzsKLSAgICAgRU1BQ1NfSU5UIGZy b20sIHRvOwotICAgICBpbnQgYmFja19wOworc3RyaW5nX2J1ZmZlcl9wb3NpdGlvbl9saW0gKHN0 cnVjdCB3aW5kb3cgKncsIExpc3BfT2JqZWN0IHN0cmluZywgRU1BQ1NfSU5UIGZyb20sCisJCQkg ICAgRU1BQ1NfSU5UIHRvLCBpbnQgYmFja19wKQogewogICBMaXNwX09iamVjdCBsaW1pdCwgcHJv cCwgcG9zOwogICBpbnQgZm91bmQgPSAwOwpAQCAtNDc0NSwxMCArNDY0Myw3IEBACiAgICBjYWxs ZWQgYXN5bmNocm9ub3VzbHkgZnJvbSBub3RlX21vdXNlX2hpZ2hsaWdodC4gICovCiAKIEVNQUNT X0lOVAotc3RyaW5nX2J1ZmZlcl9wb3NpdGlvbiAodywgc3RyaW5nLCBhcm91bmRfY2hhcnBvcykK LSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgTGlzcF9PYmplY3Qgc3RyaW5nOwotICAgICBF TUFDU19JTlQgYXJvdW5kX2NoYXJwb3M7CitzdHJpbmdfYnVmZmVyX3Bvc2l0aW9uIChzdHJ1Y3Qg d2luZG93ICp3LCBMaXNwX09iamVjdCBzdHJpbmcsIEVNQUNTX0lOVCBhcm91bmRfY2hhcnBvcykK IHsKICAgTGlzcF9PYmplY3QgbGltaXQsIHByb3AsIHBvczsKICAgY29uc3QgaW50IE1BWF9ESVNU QU5DRSA9IDEwMDA7CkBAIC00NzcyLDggKzQ2NjcsNyBAQAogICAgcG9zaXRpb24uICBDYWxsZWQg ZnJvbSBoYW5kbGVfc3RvcC4gICovCiAKIHN0YXRpYyBlbnVtIHByb3BfaGFuZGxlZAotaGFuZGxl X2NvbXBvc2l0aW9uX3Byb3AgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworaGFuZGxlX2NvbXBv c2l0aW9uX3Byb3AgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIExpc3BfT2JqZWN0IHByb3AsIHN0cmlu ZzsKICAgRU1BQ1NfSU5UIHBvcywgcG9zX2J5dGUsIHN0YXJ0LCBlbmQ7CkBAIC00ODQ2LDggKzQ3 NDAsNyBAQAogICAgQ2FsbGVkIGZyb20gaGFuZGxlX3N0b3AuICAqLwogCiBzdGF0aWMgZW51bSBw cm9wX2hhbmRsZWQKLWhhbmRsZV9vdmVybGF5X2NoYW5nZSAoaXQpCi0gICAgIHN0cnVjdCBpdCAq aXQ7CitoYW5kbGVfb3ZlcmxheV9jaGFuZ2UgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIGlmICghU1RS SU5HUCAoaXQtPnN0cmluZykgJiYgZ2V0X292ZXJsYXlfc3RyaW5ncyAoaXQsIDApKQogICAgIHJl dHVybiBIQU5ETEVEX1JFQ09NUFVURV9QUk9QUzsKQEAgLTQ4NjQsOCArNDc1Nyw3IEBACiAgICBP dGhlcndpc2UgSVQtPnN0cmluZyBpcyBzZXQgdG8gbmlsLiAgKi8KIAogc3RhdGljIHZvaWQKLW5l eHRfb3ZlcmxheV9zdHJpbmcgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworbmV4dF9vdmVybGF5 X3N0cmluZyAoc3RydWN0IGl0ICppdCkKIHsKICAgKytpdC0+Y3VycmVudC5vdmVybGF5X3N0cmlu Z19pbmRleDsKICAgaWYgKGl0LT5jdXJyZW50Lm92ZXJsYXlfc3RyaW5nX2luZGV4ID09IGl0LT5u X292ZXJsYXlfc3RyaW5ncykKQEAgLTQ5MzMsOCArNDgyNSw3IEBACiAKIAogc3RhdGljIGludAot Y29tcGFyZV9vdmVybGF5X2VudHJpZXMgKGUxLCBlMikKLSAgICAgdm9pZCAqZTEsICplMjsKK2Nv bXBhcmVfb3ZlcmxheV9lbnRyaWVzIChjb25zdCB2b2lkICplMSwgY29uc3Qgdm9pZCAqZTIpCiB7 CiAgIHN0cnVjdCBvdmVybGF5X2VudHJ5ICplbnRyeTEgPSAoc3RydWN0IG92ZXJsYXlfZW50cnkg KikgZTE7CiAgIHN0cnVjdCBvdmVybGF5X2VudHJ5ICplbnRyeTIgPSAoc3RydWN0IG92ZXJsYXlf ZW50cnkgKikgZTI7CkBAIC00OTg1LDkgKzQ4NzYsNyBAQAogICAgY29tcGFyZV9vdmVybGF5X2Vu dHJpZXMuICAqLwogCiBzdGF0aWMgdm9pZAotbG9hZF9vdmVybGF5X3N0cmluZ3MgKGl0LCBjaGFy cG9zKQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBpbnQgY2hhcnBvczsKK2xvYWRfb3Zlcmxh eV9zdHJpbmdzIChzdHJ1Y3QgaXQgKml0LCBpbnQgY2hhcnBvcykKIHsKICAgZXh0ZXJuIExpc3Bf T2JqZWN0IFF3aW5kb3csIFFwcmlvcml0eTsKICAgTGlzcF9PYmplY3Qgb3ZlcmxheSwgd2luZG93 LCBzdHIsIGludmlzaWJsZTsKQEAgLTUxMzgsMTAgKzUwMjcsNyBAQAogICAgbGVhc3Qgb25lIG92 ZXJsYXkgc3RyaW5nIHdhcyBmb3VuZC4gICovCiAKIHN0YXRpYyBpbnQKLWdldF9vdmVybGF5X3N0 cmluZ3NfMSAoaXQsIGNoYXJwb3MsIGNvbXB1dGVfc3RvcF9wKQotICAgICBzdHJ1Y3QgaXQgKml0 OwotICAgICBpbnQgY2hhcnBvczsKLSAgICAgaW50IGNvbXB1dGVfc3RvcF9wOworZ2V0X292ZXJs YXlfc3RyaW5nc18xIChzdHJ1Y3QgaXQgKml0LCBpbnQgY2hhcnBvcywgaW50IGNvbXB1dGVfc3Rv cF9wKQogewogICAvKiBHZXQgdGhlIGZpcnN0IE9WRVJMQVlfU1RSSU5HX0NIVU5LX1NJWkUgb3Zl cmxheSBzdHJpbmdzIHRvCiAgICAgIHByb2Nlc3MuICBUaGlzIGZpbGxzIElULT5vdmVybGF5X3N0 cmluZ3Mgd2l0aCBzdHJpbmdzLCBhbmQgc2V0cwpAQCAtNTE5Miw5ICs1MDc4LDcgQEAKIH0KIAog c3RhdGljIGludAotZ2V0X292ZXJsYXlfc3RyaW5ncyAoaXQsIGNoYXJwb3MpCi0gICAgIHN0cnVj dCBpdCAqaXQ7Ci0gICAgIGludCBjaGFycG9zOworZ2V0X292ZXJsYXlfc3RyaW5ncyAoc3RydWN0 IGl0ICppdCwgaW50IGNoYXJwb3MpCiB7CiAgIGl0LT5zdHJpbmcgPSBRbmlsOwogICBpdC0+bWV0 aG9kID0gR0VUX0ZST01fQlVGRkVSOwpAQCAtNTIxOSw4ICs1MTAzLDcgQEAKICAgIHByb2Nlc3Nl ZC4gICovCiAKIHN0YXRpYyB2b2lkCi1wdXNoX2l0IChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsK K3B1c2hfaXQgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIHN0cnVjdCBpdGVyYXRvcl9zdGFja19lbnRy eSAqcDsKIApAQCAtNTI2NCw4ICs1MTQ3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWl0ZXJhdGVf b3V0X29mX2Rpc3BsYXlfcHJvcGVydHkgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworaXRlcmF0 ZV9vdXRfb2ZfZGlzcGxheV9wcm9wZXJ0eSAoc3RydWN0IGl0ICppdCkKIHsKICAgLyogTWF5YmUg aW5pdGlhbGl6ZSBwYXJhZ3JhcGggZGlyZWN0aW9uLiAgSWYgd2UgYXJlIGF0IHRoZSBiZWdpbm5p bmcKICAgICAgb2YgYSBuZXcgcGFyYWdyYXBoLCBuZXh0X2VsZW1lbnRfZnJvbV9idWZmZXIgbWF5 IG5vdCBoYXZlIGEKQEAgLTUyOTgsOCArNTE4MCw3IEBACiAgICBlbGVtZW50cyBmcm9tIGFuIG92 ZXJsYXkgc3RyaW5nLCBvciBmcm9tIGEgYnVmZmVyLiAgKi8KIAogc3RhdGljIHZvaWQKLXBvcF9p dCAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7Citwb3BfaXQgKHN0cnVjdCBpdCAqaXQpCiB7CiAg IHN0cnVjdCBpdGVyYXRvcl9zdGFja19lbnRyeSAqcDsKIApAQCAtNTM3OCw4ICs1MjU5LDcgQEAK IC8qIFNldCBJVCdzIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIGxpbmUgc3RhcnQu ICAqLwogCiBzdGF0aWMgdm9pZAotYmFja190b19wcmV2aW91c19saW5lX3N0YXJ0IChpdCkKLSAg ICAgc3RydWN0IGl0ICppdDsKK2JhY2tfdG9fcHJldmlvdXNfbGluZV9zdGFydCAoc3RydWN0IGl0 ICppdCkKIHsKICAgSVRfQ0hBUlBPUyAoKml0KSA9IGZpbmRfbmV4dF9uZXdsaW5lX25vX3F1aXQg KElUX0NIQVJQT1MgKCppdCkgLSAxLCAtMSk7CiAgIElUX0JZVEVQT1MgKCppdCkgPSBDSEFSX1RP X0JZVEUgKElUX0NIQVJQT1MgKCppdCkpOwpAQCAtNTQwNSw5ICs1Mjg1LDcgQEAKICAgIGxlYWRz IHRvIHdyb25nIGN1cnNvciBtb3Rpb24uICAqLwogCiBzdGF0aWMgaW50Ci1mb3J3YXJkX3RvX25l eHRfbGluZV9zdGFydCAoaXQsIHNraXBwZWRfcCkKLSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAg aW50ICpza2lwcGVkX3A7Citmb3J3YXJkX3RvX25leHRfbGluZV9zdGFydCAoc3RydWN0IGl0ICpp dCwgaW50ICpza2lwcGVkX3ApCiB7CiAgIGludCBvbGRfc2VsZWN0aXZlLCBuZXdsaW5lX2ZvdW5k X3AsIG47CiAgIGNvbnN0IGludCBNQVhfTkVXTElORV9ESVNUQU5DRSA9IDUwMDsKQEAgLTU0ODgs OCArNTM2Niw3IEBACiAgICBJVC0+aHBvcy4gICovCiAKIHN0YXRpYyB2b2lkCi1iYWNrX3RvX3By ZXZpb3VzX3Zpc2libGVfbGluZV9zdGFydCAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7CitiYWNr X3RvX3ByZXZpb3VzX3Zpc2libGVfbGluZV9zdGFydCAoc3RydWN0IGl0ICppdCkKIHsKICAgd2hp bGUgKElUX0NIQVJQT1MgKCppdCkgPiBCRUdWKQogICAgIHsKQEAgLTU1NjksOCArNTQ0Niw3IEBA CiAgICBmYWNlIGluZm9ybWF0aW9uIGV0Yy4gICovCiAKIHZvaWQKLXJlc2VhdF9hdF9wcmV2aW91 c192aXNpYmxlX2xpbmVfc3RhcnQgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworcmVzZWF0X2F0 X3ByZXZpb3VzX3Zpc2libGVfbGluZV9zdGFydCAoc3RydWN0IGl0ICppdCkKIHsKICAgYmFja190 b19wcmV2aW91c192aXNpYmxlX2xpbmVfc3RhcnQgKGl0KTsKICAgcmVzZWF0IChpdCwgaXQtPmN1 cnJlbnQucG9zLCAxKTsKQEAgLTU1ODYsOSArNTQ2Miw3IEBACiAgICBpcyBpbnZpc2libGUgYmVj YXVzZSBvZiB0ZXh0IHByb3BlcnRpZXMuICAqLwogCiBzdGF0aWMgdm9pZAotcmVzZWF0X2F0X25l eHRfdmlzaWJsZV9saW5lX3N0YXJ0IChpdCwgb25fbmV3bGluZV9wKQotICAgICBzdHJ1Y3QgaXQg Kml0OwotICAgICBpbnQgb25fbmV3bGluZV9wOworcmVzZWF0X2F0X25leHRfdmlzaWJsZV9saW5l X3N0YXJ0IChzdHJ1Y3QgaXQgKml0LCBpbnQgb25fbmV3bGluZV9wKQogewogICBpbnQgbmV3bGlu ZV9mb3VuZF9wLCBza2lwcGVkX3AgPSAwOwogCkBAIC01NjQyLDEwICs1NTE2LDcgQEAKICAgIElU LT5jaGVja19jaGFycG9zIG9mIGEgcHJvcGVydHkuICAqLwogCiBzdGF0aWMgdm9pZAotcmVzZWF0 IChpdCwgcG9zLCBmb3JjZV9wKQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBzdHJ1Y3QgdGV4 dF9wb3MgcG9zOwotICAgICBpbnQgZm9yY2VfcDsKK3Jlc2VhdCAoc3RydWN0IGl0ICppdCwgc3Ry dWN0IHRleHRfcG9zIHBvcywgaW50IGZvcmNlX3ApCiB7CiAgIGludCBvcmlnaW5hbF9wb3MgPSBJ VF9DSEFSUE9TICgqaXQpOwogCkBAIC01Njg5LDEwICs1NTYwLDcgQEAKICAgIElULT5zdG9wX3Bv cyB0byBQT1MsIGFsc28uICAqLwogCiBzdGF0aWMgdm9pZAotcmVzZWF0XzEgKGl0LCBwb3MsIHNl dF9zdG9wX3ApCi0gICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAgIHN0cnVjdCB0ZXh0X3BvcyBwb3M7 Ci0gICAgIGludCBzZXRfc3RvcF9wOworcmVzZWF0XzEgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB0 ZXh0X3BvcyBwb3MsIGludCBzZXRfc3RvcF9wKQogewogICAvKiBEb24ndCBjYWxsIHRoaXMgZnVu Y3Rpb24gd2hlbiBzY2FubmluZyBhIEMgc3RyaW5nLiAgKi8KICAgeGFzc2VydCAoaXQtPnMgPT0g TlVMTCk7CkBAIC01NzQ2LDEyICs1NjE0LDcgQEAKICAgIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4g ICovCiAKIHN0YXRpYyB2b2lkCi1yZXNlYXRfdG9fc3RyaW5nIChpdCwgcywgc3RyaW5nLCBjaGFy cG9zLCBwcmVjaXNpb24sIGZpZWxkX3dpZHRoLCBtdWx0aWJ5dGUpCi0gICAgIHN0cnVjdCBpdCAq aXQ7Ci0gICAgIHVuc2lnbmVkIGNoYXIgKnM7Ci0gICAgIExpc3BfT2JqZWN0IHN0cmluZzsKLSAg ICAgaW50IGNoYXJwb3M7Ci0gICAgIGludCBwcmVjaXNpb24sIGZpZWxkX3dpZHRoLCBtdWx0aWJ5 dGU7CityZXNlYXRfdG9fc3RyaW5nIChzdHJ1Y3QgaXQgKml0LCB1bnNpZ25lZCBjaGFyICpzLCBM aXNwX09iamVjdCBzdHJpbmcsIGludCBjaGFycG9zLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmllbGRf d2lkdGgsIGludCBtdWx0aWJ5dGUpCiB7CiAgIC8qIE5vIHJlZ2lvbiBpbiBzdHJpbmdzLiAgKi8K ICAgaXQtPnJlZ2lvbl9iZWdfY2hhcnBvcyA9IGl0LT5yZWdpb25fZW5kX2NoYXJwb3MgPSAtMTsK QEAgLTU4NzMsOCArNTczNiw3IEBACiBzdGF0aWMgaW50IGxhc3RfZXNjYXBlX2dseXBoX21lcmdl ZF9mYWNlX2lkID0gMDsKIAogaW50Ci1nZXRfbmV4dF9kaXNwbGF5X2VsZW1lbnQgKGl0KQotICAg ICBzdHJ1Y3QgaXQgKml0OworZ2V0X25leHRfZGlzcGxheV9lbGVtZW50IChzdHJ1Y3QgaXQgKml0 KQogewogICAvKiBOb24temVybyBtZWFucyB0aGF0IHdlIGZvdW5kIGEgZGlzcGxheSBlbGVtZW50 LiAgWmVybyBtZWFucyB0aGF0CiAgICAgIHdlIGhpdCB0aGUgZW5kIG9mIHdoYXQgd2UgaXRlcmF0 ZSBvdmVyLiAgUGVyZm9ybWFuY2Ugbm90ZTogdGhlCkBAIC02MjY2LDkgKzYxMjgsNyBAQAogICAg ZGVjcmVtZW50IHBvc2l0aW9uIGZ1bmN0aW9uIHdoaWNoIHdvdWxkIG5vdCBiZSBlYXN5IHRvIHdy aXRlLiAgKi8KIAogdm9pZAotc2V0X2l0ZXJhdG9yX3RvX25leHQgKGl0LCByZXNlYXRfcCkKLSAg ICAgc3RydWN0IGl0ICppdDsKLSAgICAgaW50IHJlc2VhdF9wOworc2V0X2l0ZXJhdG9yX3RvX25l eHQgKHN0cnVjdCBpdCAqaXQsIGludCByZXNlYXRfcCkKIHsKICAgLyogUmVzZXQgZmxhZ3MgaW5k aWNhdGluZyBzdGFydCBhbmQgZW5kIG9mIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycwogICAgICB3 aXRoIGJveC4gIFJlc2V0IHRoZW0gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVz ZQpAQCAtNjUzMyw4ICs2MzkzLDcgQEAKICAgIGlzIHJlc3RvcmVkIGludG8gSVQtPmZhY2VfaWQg aW4gc2V0X2l0ZXJhdG9yX3RvX25leHQuICAqLwogCiBzdGF0aWMgaW50Ci1uZXh0X2VsZW1lbnRf ZnJvbV9kaXNwbGF5X3ZlY3RvciAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7CituZXh0X2VsZW1l bnRfZnJvbV9kaXNwbGF5X3ZlY3RvciAoc3RydWN0IGl0ICppdCkKIHsKICAgTGlzcF9PYmplY3Qg Z2M7CiAKQEAgLTY1ODMsOCArNjQ0Miw3IEBACiAgICBvdmVybGF5IHN0cmluZy4gICovCiAKIHN0 YXRpYyBpbnQKLW5leHRfZWxlbWVudF9mcm9tX3N0cmluZyAoaXQpCi0gICAgIHN0cnVjdCBpdCAq aXQ7CituZXh0X2VsZW1lbnRfZnJvbV9zdHJpbmcgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIHN0cnVj dCB0ZXh0X3BvcyBwb3NpdGlvbjsKIApAQCAtNjY4NSw4ICs2NTQzLDcgQEAKICAgIHJlYWNoZWQs IGluY2x1ZGluZyBwYWRkaW5nIHNwYWNlcy4gICovCiAKIHN0YXRpYyBpbnQKLW5leHRfZWxlbWVu dF9mcm9tX2Nfc3RyaW5nIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK25leHRfZWxlbWVudF9m cm9tX2Nfc3RyaW5nIChzdHJ1Y3QgaXQgKml0KQogewogICBpbnQgc3VjY2Vzc19wID0gMTsKIApA QCAtNjczMSw4ICs2NTg4LDcgQEAKICAgIGVsbGlwc2lzIGlmIGFuIGVsbGlwc2lzIGlzIHRvIGJl IGRpc3BsYXllZC4gICovCiAKIHN0YXRpYyBpbnQKLW5leHRfZWxlbWVudF9mcm9tX2VsbGlwc2lz IChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK25leHRfZWxlbWVudF9mcm9tX2VsbGlwc2lzIChz dHJ1Y3QgaXQgKml0KQogewogICBpZiAoaXQtPnNlbGVjdGl2ZV9kaXNwbGF5X2VsbGlwc2lzX3Ap CiAgICAgc2V0dXBfZm9yX2VsbGlwc2lzIChpdCwgaXQtPmxlbik7CkBAIC02NzU5LDggKzY2MTUs NyBAQAogCiAKIHN0YXRpYyBpbnQKLW5leHRfZWxlbWVudF9mcm9tX2ltYWdlIChpdCkKLSAgICAg c3RydWN0IGl0ICppdDsKK25leHRfZWxlbWVudF9mcm9tX2ltYWdlIChzdHJ1Y3QgaXQgKml0KQog ewogICBpdC0+d2hhdCA9IElUX0lNQUdFOwogICByZXR1cm4gMTsKQEAgLTY3NzIsOCArNjYyNyw3 IEBACiAgICBhbHdheXMgMS4gICovCiAKIHN0YXRpYyBpbnQKLW5leHRfZWxlbWVudF9mcm9tX3N0 cmV0Y2ggKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworbmV4dF9lbGVtZW50X2Zyb21fc3RyZXRj aCAoc3RydWN0IGl0ICppdCkKIHsKICAgaXQtPndoYXQgPSBJVF9TVFJFVENIOwogICByZXR1cm4g MTsKQEAgLTY3ODgsOSArNjY0Miw3IEBACiAgICBwb3NpdGlvbi4gICovCiAKIHN0YXRpYyB2b2lk Ci1oYW5kbGVfc3RvcF9iYWNrd2FyZHMgKGl0LCBjaGFycG9zKQotICAgICBzdHJ1Y3QgaXQgKml0 OwotICAgICBFTUFDU19JTlQgY2hhcnBvczsKK2hhbmRsZV9zdG9wX2JhY2t3YXJkcyAoc3RydWN0 IGl0ICppdCwgRU1BQ1NfSU5UIGNoYXJwb3MpCiB7CiAgIEVNQUNTX0lOVCB3aGVyZV93ZV9hcmUg PSBJVF9DSEFSUE9TICgqaXQpOwogICBzdHJ1Y3QgZGlzcGxheV9wb3Mgc2F2ZV9jdXJyZW50ID0g aXQtPmN1cnJlbnQ7CkBAIC02ODI4LDggKzY2ODAsNyBAQAogICAgZW5kLiAgKi8KIAogc3RhdGlj IGludAotbmV4dF9lbGVtZW50X2Zyb21fYnVmZmVyIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsK K25leHRfZWxlbWVudF9mcm9tX2J1ZmZlciAoc3RydWN0IGl0ICppdCkKIHsKICAgaW50IHN1Y2Nl c3NfcCA9IDE7CiAKQEAgLTcwMzgsOCArNjg4OSw3IEBACiAvKiBSdW4gdGhlIHJlZGlzcGxheSBl bmQgdHJpZ2dlciBob29rIGZvciBJVC4gICovCiAKIHN0YXRpYyB2b2lkCi1ydW5fcmVkaXNwbGF5 X2VuZF90cmlnZ2VyX2hvb2sgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworcnVuX3JlZGlzcGxh eV9lbmRfdHJpZ2dlcl9ob29rIChzdHJ1Y3QgaXQgKml0KQogewogICBMaXNwX09iamVjdCBhcmdz WzNdOwogCkBAIC03MDY5LDggKzY5MTksNyBAQAogICAgbmV4dF9lbGVtZW50X2Zyb21fc3RyaW5n IHdoZW4gbmVjZXNzYXJ5LiAgKi8KIAogc3RhdGljIGludAotbmV4dF9lbGVtZW50X2Zyb21fY29t cG9zaXRpb24gKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0OworbmV4dF9lbGVtZW50X2Zyb21fY29t cG9zaXRpb24gKHN0cnVjdCBpdCAqaXQpCiB7CiAgIGl0LT53aGF0ID0gSVRfQ09NUE9TSVRJT047 CiAgIGl0LT5sZW4gPSBpdC0+Y21wX2l0Lm5ieXRlczsKQEAgLTc1OTMsMTAgKzc0NDIsNyBAQAog ICAgVE9fQ0hBUlBPUy4gICovCiAKIHZvaWQKLW1vdmVfaXRfdG8gKGl0LCB0b19jaGFycG9zLCB0 b194LCB0b195LCB0b192cG9zLCBvcCkKLSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgaW50IHRv X2NoYXJwb3MsIHRvX3gsIHRvX3ksIHRvX3Zwb3M7Ci0gICAgIGludCBvcDsKK21vdmVfaXRfdG8g KHN0cnVjdCBpdCAqaXQsIGludCB0b19jaGFycG9zLCBpbnQgdG9feCwgaW50IHRvX3ksIGludCB0 b192cG9zLCBpbnQgb3ApCiB7CiAgIGVudW0gbW92ZV9pdF9yZXN1bHQgc2tpcCwgc2tpcDIgPSBN T1ZFX1hfUkVBQ0hFRDsKICAgaW50IGxpbmVfaGVpZ2h0LCBsaW5lX3N0YXJ0X3ggPSAwLCByZWFj aGVkID0gMDsKQEAgLTc4NDcsOSArNzY5Myw3IEBACiAgICBzZXQgdG8gdGhlIHRvcCBvZiB0aGUg bGluZSBtb3ZlZCB0by4gICovCiAKIHZvaWQKLW1vdmVfaXRfdmVydGljYWxseV9iYWNrd2FyZCAo aXQsIGR5KQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBpbnQgZHk7Cittb3ZlX2l0X3ZlcnRp Y2FsbHlfYmFja3dhcmQgKHN0cnVjdCBpdCAqaXQsIGludCBkeSkKIHsKICAgaW50IG5saW5lcywg aDsKICAgc3RydWN0IGl0IGl0MiwgaXQzOwpAQCAtNzk2OCw5ICs3ODEyLDcgQEAKICAgIGVuZCwg SVQgd2lsbCBiZSBvbiB0aGUgc3RhcnQgb2YgYSBzY3JlZW4gbGluZS4gICovCiAKIHZvaWQKLW1v dmVfaXRfdmVydGljYWxseSAoaXQsIGR5KQotICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAgaW50IGR5 OworbW92ZV9pdF92ZXJ0aWNhbGx5IChzdHJ1Y3QgaXQgKml0LCBpbnQgZHkpCiB7CiAgIGlmIChk eSA8PSAwKQogICAgIG1vdmVfaXRfdmVydGljYWxseV9iYWNrd2FyZCAoaXQsIC1keSk7CkBAIC03 OTk0LDggKzc4MzYsNyBAQAogLyogTW92ZSBpdGVyYXRvciBJVCBwYXN0IHRoZSBlbmQgb2YgdGhl IHRleHQgbGluZSBpdCBpcyBpbi4gICovCiAKIHZvaWQKLW1vdmVfaXRfcGFzdF9lb2wgKGl0KQot ICAgICBzdHJ1Y3QgaXQgKml0OworbW92ZV9pdF9wYXN0X2VvbCAoc3RydWN0IGl0ICppdCkKIHsK ICAgZW51bSBtb3ZlX2l0X3Jlc3VsdCByYzsKIApAQCAtODAxNSw5ICs3ODU2LDcgQEAKICAgIHRy dW5jYXRlLWxpbmVzIG5pbC4gICovCiAKIHZvaWQKLW1vdmVfaXRfYnlfbGluZXMgKGl0LCBkdnBv cywgbmVlZF95X3ApCi0gICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAgIGludCBkdnBvcywgbmVlZF95 X3A7Cittb3ZlX2l0X2J5X2xpbmVzIChzdHJ1Y3QgaXQgKml0LCBpbnQgZHZwb3MsIGludCBuZWVk X3lfcCkKIHsKICAgc3RydWN0IHBvc2l0aW9uIHBvczsKIApAQCAtODExMSw4ICs3OTUwLDcgQEAK IC8qIFJldHVybiAxIGlmIElUIHBvaW50cyBpbnRvIHRoZSBtaWRkbGUgb2YgYSBkaXNwbGF5IHZl Y3Rvci4gICovCiAKIGludAotaW5fZGlzcGxheV92ZWN0b3JfcCAoaXQpCi0gICAgIHN0cnVjdCBp dCAqaXQ7Citpbl9kaXNwbGF5X3ZlY3Rvcl9wIChzdHJ1Y3QgaXQgKml0KQogewogICByZXR1cm4g KGl0LT5tZXRob2QgPT0gR0VUX0ZST01fRElTUExBWV9WRUNUT1IKIAkgICYmIGl0LT5jdXJyZW50 LmRwdmVjX2luZGV4ID4gMApAQCAtODEyOSw5ICs3OTY3LDcgQEAKICAgIHRvICpNZXNzYWdlcyou ICAqLwogCiB2b2lkCi1hZGRfdG9fbG9nIChmb3JtYXQsIGFyZzEsIGFyZzIpCi0gICAgIGNoYXIg KmZvcm1hdDsKLSAgICAgTGlzcF9PYmplY3QgYXJnMSwgYXJnMjsKK2FkZF90b19sb2cgKGNoYXIg KmZvcm1hdCwgTGlzcF9PYmplY3QgYXJnMSwgTGlzcF9PYmplY3QgYXJnMikKIHsKICAgTGlzcF9P YmplY3QgYXJnc1szXTsKICAgTGlzcF9PYmplY3QgbXNnLCBmbXQ7CkBAIC04MTY4LDcgKzgwMDQs NyBAQAogLyogT3V0cHV0IGEgbmV3bGluZSBpbiB0aGUgKk1lc3NhZ2VzKiBidWZmZXIgaWYgIm5l ZWRzIiBvbmUuICAqLwogCiB2b2lkCi1tZXNzYWdlX2xvZ19tYXliZV9uZXdsaW5lICgpCittZXNz YWdlX2xvZ19tYXliZV9uZXdsaW5lICh2b2lkKQogewogICBpZiAobWVzc2FnZV9sb2dfbmVlZF9u ZXdsaW5lKQogICAgIG1lc3NhZ2VfZG9sb2cgKCIiLCAwLCAxLCAwKTsKQEAgLTgxODUsOSArODAy MSw3IEBACiAgICBzbyB0aGUgYnVmZmVyIE0gbXVzdCBOT1QgcG9pbnQgdG8gYSBMaXNwIHN0cmlu Zy4gICovCiAKIHZvaWQKLW1lc3NhZ2VfZG9sb2cgKG0sIG5ieXRlcywgbmxmbGFnLCBtdWx0aWJ5 dGUpCi0gICAgIGNvbnN0IGNoYXIgKm07Ci0gICAgIGludCBuYnl0ZXMsIG5sZmxhZywgbXVsdGli eXRlOworbWVzc2FnZV9kb2xvZyAoY29uc3QgY2hhciAqbSwgaW50IG5ieXRlcywgaW50IG5sZmxh ZywgaW50IG11bHRpYnl0ZSkKIHsKICAgaWYgKCFOSUxQIChWbWVtb3J5X2Z1bGwpKQogICAgIHJl dHVybjsKQEAgLTgzNTcsOSArODE5MSw3IEBACiAgICB2YWx1ZSBOID4gMSBpZiB3ZSBzaG91bGQg YWxzbyBhcHBlbmQgIiBbTiB0aW1lc10iLiAgKi8KIAogc3RhdGljIGludAotbWVzc2FnZV9sb2df Y2hlY2tfZHVwbGljYXRlIChwcmV2X2JvbCwgcHJldl9ib2xfYnl0ZSwgdGhpc19ib2wsIHRoaXNf Ym9sX2J5dGUpCi0gICAgIGludCBwcmV2X2JvbCwgdGhpc19ib2w7Ci0gICAgIGludCBwcmV2X2Jv bF9ieXRlLCB0aGlzX2JvbF9ieXRlOworbWVzc2FnZV9sb2dfY2hlY2tfZHVwbGljYXRlIChpbnQg cHJldl9ib2wsIGludCBwcmV2X2JvbF9ieXRlLCBpbnQgdGhpc19ib2wsIGludCB0aGlzX2JvbF9i eXRlKQogewogICBpbnQgaTsKICAgaW50IGxlbiA9IFpfQllURSAtIDEgLSB0aGlzX2JvbF9ieXRl OwpAQCAtODM5NywxMCArODIyOSw3IEBACiAgICBUaGlzIG1heSBHQywgc28gdGhlIGJ1ZmZlciBN IG11c3QgTk9UIHBvaW50IHRvIGEgTGlzcCBzdHJpbmcuICAqLwogCiB2b2lkCi1tZXNzYWdlMiAo bSwgbmJ5dGVzLCBtdWx0aWJ5dGUpCi0gICAgIGNvbnN0IGNoYXIgKm07Ci0gICAgIGludCBuYnl0 ZXM7Ci0gICAgIGludCBtdWx0aWJ5dGU7CittZXNzYWdlMiAoY29uc3QgY2hhciAqbSwgaW50IG5i eXRlcywgaW50IG11bHRpYnl0ZSkKIHsKICAgLyogRmlyc3QgZmx1c2ggb3V0IGFueSBwYXJ0aWFs IGxpbmUgd3JpdHRlbiB3aXRoIHByaW50LiAgKi8KICAgbWVzc2FnZV9sb2dfbWF5YmVfbmV3bGlu ZSAoKTsKQEAgLTg0MTMsOSArODI0Miw3IEBACiAvKiBUaGUgbm9uLWxvZ2dpbmcgY291bnRlcnBh cnQgb2YgbWVzc2FnZTIuICAqLwogCiB2b2lkCi1tZXNzYWdlMl9ub2xvZyAobSwgbmJ5dGVzLCBt dWx0aWJ5dGUpCi0gICAgIGNvbnN0IGNoYXIgKm07Ci0gICAgIGludCBuYnl0ZXMsIG11bHRpYnl0 ZTsKK21lc3NhZ2UyX25vbG9nIChjb25zdCBjaGFyICptLCBpbnQgbmJ5dGVzLCBpbnQgbXVsdGli eXRlKQogewogICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7CiAgIG1lc3Nh Z2VfZW5hYmxlX211bHRpYnl0ZSA9IG11bHRpYnl0ZTsKQEAgLTg0NzcsMTAgKzgzMDQsNyBAQAog ICAgVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGVjaG9pbmcuICAqLwogCiB2b2lkCi1tZXNzYWdlMyAo bSwgbmJ5dGVzLCBtdWx0aWJ5dGUpCi0gICAgIExpc3BfT2JqZWN0IG07Ci0gICAgIGludCBuYnl0 ZXM7Ci0gICAgIGludCBtdWx0aWJ5dGU7CittZXNzYWdlMyAoTGlzcF9PYmplY3QgbSwgaW50IG5i eXRlcywgaW50IG11bHRpYnl0ZSkKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKIApAQCAtODUx Miw5ICs4MzM2LDcgQEAKICAgIGFuZCBtYWtlIHRoaXMgY2FuY2VsIGVjaG9pbmcuICAqLwogCiB2 b2lkCi1tZXNzYWdlM19ub2xvZyAobSwgbmJ5dGVzLCBtdWx0aWJ5dGUpCi0gICAgIExpc3BfT2Jq ZWN0IG07Ci0gICAgIGludCBuYnl0ZXMsIG11bHRpYnl0ZTsKK21lc3NhZ2UzX25vbG9nIChMaXNw X09iamVjdCBtLCBpbnQgbmJ5dGVzLCBpbnQgbXVsdGlieXRlKQogewogICBzdHJ1Y3QgZnJhbWUg KnNmID0gU0VMRUNURURfRlJBTUUgKCk7CiAgIG1lc3NhZ2VfZW5hYmxlX211bHRpYnl0ZSA9IG11 bHRpYnl0ZTsKQEAgLTg1ODIsOCArODQwNCw3IEBACiAgICB0aGF0IHdhcyBhbGxvY2EnZC4gICov CiAKIHZvaWQKLW1lc3NhZ2UxIChtKQotICAgICBjaGFyICptOworbWVzc2FnZTEgKGNoYXIgKm0p CiB7CiAgIG1lc3NhZ2UyIChtLCAobSA/IHN0cmxlbiAobSkgOiAwKSwgMCk7CiB9CkBAIC04NTky LDggKzg0MTMsNyBAQAogLyogVGhlIG5vbi1sb2dnaW5nIGNvdW50ZXJwYXJ0IG9mIG1lc3NhZ2Ux LiAgKi8KIAogdm9pZAotbWVzc2FnZTFfbm9sb2cgKG0pCi0gICAgIGNoYXIgKm07CittZXNzYWdl MV9ub2xvZyAoY2hhciAqbSkKIHsKICAgbWVzc2FnZTJfbm9sb2cgKG0sIChtID8gc3RybGVuICht KSA6IDApLCAwKTsKIH0KQEAgLTg2MDIsMTAgKzg0MjIsNyBAQAogICAgd2hpY2ggZ2V0cyByZXBs YWNlZCB3aXRoIFNUUklORy4gICovCiAKIHZvaWQKLW1lc3NhZ2Vfd2l0aF9zdHJpbmcgKG0sIHN0 cmluZywgbG9nKQotICAgICBjaGFyICptOwotICAgICBMaXNwX09iamVjdCBzdHJpbmc7Ci0gICAg IGludCBsb2c7CittZXNzYWdlX3dpdGhfc3RyaW5nIChjaGFyICptLCBMaXNwX09iamVjdCBzdHJp bmcsIGludCBsb2cpCiB7CiAgIENIRUNLX1NUUklORyAoc3RyaW5nKTsKIApAQCAtODY3MCw5ICs4 NDg3LDcgQEAKIAogLyogVkFSQVJHUyAxICovCiB2b2lkCi1tZXNzYWdlIChtLCBhMSwgYTIsIGEz KQotICAgICBjaGFyICptOwotICAgICBFTUFDU19JTlQgYTEsIGEyLCBhMzsKK21lc3NhZ2UgKGNo YXIgKm0sIEVNQUNTX0lOVCBhMSwgRU1BQ1NfSU5UIGEyLCBFTUFDU19JTlQgYTMpCiB7CiAgIGlm IChub25pbnRlcmFjdGl2ZSkKICAgICB7CkBAIC04NzMzLDkgKzg1NDgsNyBAQAogLyogVGhlIG5v bi1sb2dnaW5nIHZlcnNpb24gb2YgbWVzc2FnZS4gICovCiAKIHZvaWQKLW1lc3NhZ2Vfbm9sb2cg KG0sIGExLCBhMiwgYTMpCi0gICAgIGNoYXIgKm07Ci0gICAgIEVNQUNTX0lOVCBhMSwgYTIsIGEz OworbWVzc2FnZV9ub2xvZyAoY2hhciAqbSwgRU1BQ1NfSU5UIGExLCBFTUFDU19JTlQgYTIsIEVN QUNTX0lOVCBhMykKIHsKICAgTGlzcF9PYmplY3Qgb2xkX2xvZ19tYXg7CiAgIG9sZF9sb2dfbWF4 ID0gVm1lc3NhZ2VfbG9nX21heDsKQEAgLTg3NTAsNyArODU2Myw3IEBACiAgICBjcml0aWNhbC4g ICovCiAKIHZvaWQKLXVwZGF0ZV9lY2hvX2FyZWEgKCkKK3VwZGF0ZV9lY2hvX2FyZWEgKHZvaWQp CiB7CiAgIGlmICghTklMUCAoZWNob19hcmVhX2J1ZmZlclswXSkpCiAgICAgewpAQCAtODc2Niw3 ICs4NTc5LDcgQEAKICAgIElmIHRoZXkgYXJlbid0LCBtYWtlIG5ldyBvbmVzLiAgKi8KIAogc3Rh dGljIHZvaWQKLWVuc3VyZV9lY2hvX2FyZWFfYnVmZmVycyAoKQorZW5zdXJlX2VjaG9fYXJlYV9i dWZmZXJzICh2b2lkKQogewogICBpbnQgaTsKIApAQCAtODgxMCwxMyArODYyMyw5IEBACiAgICBW YWx1ZSBpcyB3aGF0IEZOIHJldHVybnMuICAqLwogCiBzdGF0aWMgaW50Ci13aXRoX2VjaG9fYXJl YV9idWZmZXIgKHcsIHdoaWNoLCBmbiwgYTEsIGEyLCBhMywgYTQpCi0gICAgIHN0cnVjdCB3aW5k b3cgKnc7Ci0gICAgIGludCB3aGljaDsKLSAgICAgaW50ICgqZm4pIChFTUFDU19JTlQsIExpc3Bf T2JqZWN0LCBFTUFDU19JTlQsIEVNQUNTX0lOVCk7Ci0gICAgIEVNQUNTX0lOVCBhMTsKLSAgICAg TGlzcF9PYmplY3QgYTI7Ci0gICAgIEVNQUNTX0lOVCBhMywgYTQ7Cit3aXRoX2VjaG9fYXJlYV9i dWZmZXIgKHN0cnVjdCB3aW5kb3cgKncsIGludCB3aGljaCwKKwkJICAgICAgIGludCAoKmZuKSAo RU1BQ1NfSU5ULCBMaXNwX09iamVjdCwgRU1BQ1NfSU5ULCBFTUFDU19JTlQpLAorCQkgICAgICAg RU1BQ1NfSU5UIGExLCBMaXNwX09iamVjdCBhMiwgRU1BQ1NfSU5UIGEzLCBFTUFDU19JTlQgYTQp CiB7CiAgIExpc3BfT2JqZWN0IGJ1ZmZlcjsKICAgaW50IHRoaXNfb25lLCB0aGVfb3RoZXIsIGNs ZWFyX2J1ZmZlcl9wLCByYzsKQEAgLTg5MDMsOCArODcxMiw3IEBACiAgICBGTiBjYWxsZWQgaW4g d2l0aF9lY2hvX2FyZWFfYnVmZmVyLiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci13aXRoX2Vj aG9fYXJlYV9idWZmZXJfdW53aW5kX2RhdGEgKHcpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Cit3 aXRoX2VjaG9fYXJlYV9idWZmZXJfdW53aW5kX2RhdGEgKHN0cnVjdCB3aW5kb3cgKncpCiB7CiAg IGludCBpID0gMDsKICAgTGlzcF9PYmplY3QgdmVjdG9yLCB0bXA7CkBAIC04OTQ0LDggKzg3NTIs NyBAQAogICAgd2l0aF9lY2hvX2FyZWFfYnVmZmVyX3Vud2luZF9kYXRhLiAgKi8KIAogc3RhdGlj IExpc3BfT2JqZWN0Ci11bndpbmRfd2l0aF9lY2hvX2FyZWFfYnVmZmVyICh2ZWN0b3IpCi0gICAg IExpc3BfT2JqZWN0IHZlY3RvcjsKK3Vud2luZF93aXRoX2VjaG9fYXJlYV9idWZmZXIgKExpc3Bf T2JqZWN0IHZlY3RvcikKIHsKICAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChYQlVGRkVSIChBUkVG ICh2ZWN0b3IsIDApKSk7CiAgIFZkZWFjdGl2YXRlX21hcmsgPSBBUkVGICh2ZWN0b3IsIDEpOwpA QCAtODk3NSw4ICs4NzgyLDcgQEAKICAgIG5vbi16ZXJvIG1lYW5zIHdlIHdpbGwgcHJpbnQgbXVs dGlieXRlLiAgKi8KIAogdm9pZAotc2V0dXBfZWNob19hcmVhX2Zvcl9wcmludGluZyAobXVsdGli eXRlX3ApCi0gICAgIGludCBtdWx0aWJ5dGVfcDsKK3NldHVwX2VjaG9fYXJlYV9mb3JfcHJpbnRp bmcgKGludCBtdWx0aWJ5dGVfcCkKIHsKICAgLyogSWYgd2UgY2FuJ3QgZmluZCBhbiBlY2hvIGFy ZWEgYW55IG1vcmUsIGV4aXQuICAqLwogICBpZiAoISBGUkFNRV9MSVZFX1AgKFhGUkFNRSAoc2Vs ZWN0ZWRfZnJhbWUpKSkKQEAgLTkwNTAsOCArODg1Niw3IEBACiAgICBkaXNwbGF5IHRoZSBjdXJy ZW50IG1lc3NhZ2UuICAqLwogCiBzdGF0aWMgaW50Ci1kaXNwbGF5X2VjaG9fYXJlYSAodykKLSAg ICAgc3RydWN0IHdpbmRvdyAqdzsKK2Rpc3BsYXlfZWNob19hcmVhIChzdHJ1Y3Qgd2luZG93ICp3 KQogewogICBpbnQgaSwgbm9fbWVzc2FnZV9wLCB3aW5kb3dfaGVpZ2h0X2NoYW5nZWRfcCwgY291 bnQ7CiAKQEAgLTkwODksMTAgKzg4OTQsNyBAQAogICAgVmFsdWUgaXMgbm9uLXplcm8gaWYgaGVp Z2h0IG9mIFcgd2FzIGNoYW5nZWQuICAqLwogCiBzdGF0aWMgaW50Ci1kaXNwbGF5X2VjaG9fYXJl YV8xIChhMSwgYTIsIGEzLCBhNCkKLSAgICAgRU1BQ1NfSU5UIGExOwotICAgICBMaXNwX09iamVj dCBhMjsKLSAgICAgRU1BQ1NfSU5UIGEzLCBhNDsKK2Rpc3BsYXlfZWNob19hcmVhXzEgKEVNQUNT X0lOVCBhMSwgTGlzcF9PYmplY3QgYTIsIEVNQUNTX0lOVCBhMywgRU1BQ1NfSU5UIGE0KQogewog ICBzdHJ1Y3Qgd2luZG93ICp3ID0gKHN0cnVjdCB3aW5kb3cgKikgYTE7CiAgIExpc3BfT2JqZWN0 IHdpbmRvdzsKQEAgLTkxMjEsNyArODkyMyw3IEBACiAgICBpcyBhY3RpdmUsIGRvbid0IHNocmlu ayBpdC4gICovCiAKIHZvaWQKLXJlc2l6ZV9lY2hvX2FyZWFfZXhhY3RseSAoKQorcmVzaXplX2Vj aG9fYXJlYV9leGFjdGx5ICh2b2lkKQogewogICBpZiAoQlVGRkVSUCAoZWNob19hcmVhX2J1ZmZl clswXSkKICAgICAgICYmIFdJTkRPV1AgKGVjaG9fYXJlYV93aW5kb3cpKQpAQCAtOTE1NCwxMCAr ODk1Niw3IEBACiAgICByZXNpemVfbWluaV93aW5kb3cgcmV0dXJucy4gICovCiAKIHN0YXRpYyBp bnQKLXJlc2l6ZV9taW5pX3dpbmRvd18xIChhMSwgZXhhY3RseSwgYTMsIGE0KQotICAgICBFTUFD U19JTlQgYTE7Ci0gICAgIExpc3BfT2JqZWN0IGV4YWN0bHk7Ci0gICAgIEVNQUNTX0lOVCBhMywg YTQ7CityZXNpemVfbWluaV93aW5kb3dfMSAoRU1BQ1NfSU5UIGExLCBMaXNwX09iamVjdCBleGFj dGx5LCBFTUFDU19JTlQgYTMsIEVNQUNTX0lOVCBhNCkKIHsKICAgcmV0dXJuIHJlc2l6ZV9taW5p X3dpbmRvdyAoKHN0cnVjdCB3aW5kb3cgKikgYTEsICFOSUxQIChleGFjdGx5KSk7CiB9CkBAIC05 MTc1LDkgKzg5NzQsNyBAQAogICAgVmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHdpbmRvdyBoZWln aHQgaGFzIGJlZW4gY2hhbmdlZC4gICovCiAKIGludAotcmVzaXplX21pbmlfd2luZG93ICh3LCBl eGFjdF9wKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQgZXhhY3RfcDsKK3Jlc2l6 ZV9taW5pX3dpbmRvdyAoc3RydWN0IHdpbmRvdyAqdywgaW50IGV4YWN0X3ApCiB7CiAgIHN0cnVj dCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOwogICBpbnQgd2luZG93X2hlaWdodF9jaGFu Z2VkX3AgPSAwOwpAQCAtOTMxOCw3ICs5MTE1LDcgQEAKICAgIGN1cnJlbnQgbWVzc2FnZS4gICov CiAKIExpc3BfT2JqZWN0Ci1jdXJyZW50X21lc3NhZ2UgKCkKK2N1cnJlbnRfbWVzc2FnZSAodm9p ZCkKIHsKICAgTGlzcF9PYmplY3QgbXNnOwogCkBAIC05MzM3LDEwICs5MTM0LDcgQEAKIAogCiBz dGF0aWMgaW50Ci1jdXJyZW50X21lc3NhZ2VfMSAoYTEsIGEyLCBhMywgYTQpCi0gICAgIEVNQUNT X0lOVCBhMTsKLSAgICAgTGlzcF9PYmplY3QgYTI7Ci0gICAgIEVNQUNTX0lOVCBhMywgYTQ7Citj dXJyZW50X21lc3NhZ2VfMSAoRU1BQ1NfSU5UIGExLCBMaXNwX09iamVjdCBhMiwgRU1BQ1NfSU5U IGEzLCBFTUFDU19JTlQgYTQpCiB7CiAgIExpc3BfT2JqZWN0ICptc2cgPSAoTGlzcF9PYmplY3Qg KikgYTE7CiAKQEAgLTkzNTgsNyArOTE1Miw3IEBACiAgICB3b3J0aCBvcHRpbWl6aW5nLiAgKi8K IAogaW50Ci1wdXNoX21lc3NhZ2UgKCkKK3B1c2hfbWVzc2FnZSAodm9pZCkKIHsKICAgTGlzcF9P YmplY3QgbXNnOwogICBtc2cgPSBjdXJyZW50X21lc3NhZ2UgKCk7CkBAIC05MzcwLDcgKzkxNjQs NyBAQAogLyogUmVzdG9yZSBtZXNzYWdlIGRpc3BsYXkgZnJvbSB0aGUgdG9wIG9mIFZtZXNzYWdl X3N0YWNrLiAgKi8KIAogdm9pZAotcmVzdG9yZV9tZXNzYWdlICgpCityZXN0b3JlX21lc3NhZ2Ug KHZvaWQpCiB7CiAgIExpc3BfT2JqZWN0IG1zZzsKIApAQCAtOTM4Niw4ICs5MTgwLDcgQEAKIC8q IEhhbmRsZXIgZm9yIHJlY29yZF91bndpbmRfcHJvdGVjdCBjYWxsaW5nIHBvcF9tZXNzYWdlLiAg Ki8KIAogTGlzcF9PYmplY3QKLXBvcF9tZXNzYWdlX3Vud2luZCAoZHVtbXkpCi0gICAgIExpc3Bf T2JqZWN0IGR1bW15OworcG9wX21lc3NhZ2VfdW53aW5kIChMaXNwX09iamVjdCBkdW1teSkKIHsK ICAgcG9wX21lc3NhZ2UgKCk7CiAgIHJldHVybiBRbmlsOwpAQCAtOTM5Niw3ICs5MTg5LDcgQEAK IC8qIFBvcCB0aGUgdG9wLW1vc3QgZW50cnkgb2ZmIFZtZXNzYWdlX3N0YWNrLiAgKi8KIAogdm9p ZAotcG9wX21lc3NhZ2UgKCkKK3BvcF9tZXNzYWdlICh2b2lkKQogewogICB4YXNzZXJ0IChDT05T UCAoVm1lc3NhZ2Vfc3RhY2spKTsKICAgVm1lc3NhZ2Vfc3RhY2sgPSBYQ0RSIChWbWVzc2FnZV9z dGFjayk7CkBAIC05NDA4LDcgKzkyMDEsNyBAQAogICAgc29tZXdoZXJlLiAgKi8KIAogdm9pZAot Y2hlY2tfbWVzc2FnZV9zdGFjayAoKQorY2hlY2tfbWVzc2FnZV9zdGFjayAodm9pZCkKIHsKICAg aWYgKCFOSUxQIChWbWVzc2FnZV9zdGFjaykpCiAgICAgYWJvcnQgKCk7CkBAIC05NDE5LDggKzky MTIsNyBAQAogICAgdGltZSB3ZSBkaXNwbGF5IGl0LS0tYnV0IGRvbid0IHJlZGlzcGxheSBpdCBu b3cuICAqLwogCiB2b2lkCi10cnVuY2F0ZV9lY2hvX2FyZWEgKG5jaGFycykKLSAgICAgaW50IG5j aGFyczsKK3RydW5jYXRlX2VjaG9fYXJlYSAoaW50IG5jaGFycykKIHsKICAgaWYgKG5jaGFycyA9 PSAwKQogICAgIGVjaG9fYXJlYV9idWZmZXJbMF0gPSBRbmlsOwpAQCAtOTQ0MiwxMCArOTIzNCw3 IEBACiAgICBtZXNzYWdlIHRvIGF0IG1vc3QgTkNIQVJTIGNoYXJhY3RlcnMuICAqLwogCiBzdGF0 aWMgaW50Ci10cnVuY2F0ZV9tZXNzYWdlXzEgKG5jaGFycywgYTIsIGEzLCBhNCkKLSAgICAgRU1B Q1NfSU5UIG5jaGFyczsKLSAgICAgTGlzcF9PYmplY3QgYTI7Ci0gICAgIEVNQUNTX0lOVCBhMywg YTQ7Cit0cnVuY2F0ZV9tZXNzYWdlXzEgKEVNQUNTX0lOVCBuY2hhcnMsIExpc3BfT2JqZWN0IGEy LCBFTUFDU19JTlQgYTMsIEVNQUNTX0lOVCBhNCkKIHsKICAgaWYgKEJFRyArIG5jaGFycyA8IFop CiAgICAgZGVsX3JhbmdlIChCRUcgKyBuY2hhcnMsIFopOwpAQCAtOTQ3MCwxMCArOTI1OSw3IEBA CiAgICovCiAKIHZvaWQKLXNldF9tZXNzYWdlIChzLCBzdHJpbmcsIG5ieXRlcywgbXVsdGlieXRl X3ApCi0gICAgIGNvbnN0IGNoYXIgKnM7Ci0gICAgIExpc3BfT2JqZWN0IHN0cmluZzsKLSAgICAg aW50IG5ieXRlcywgbXVsdGlieXRlX3A7CitzZXRfbWVzc2FnZSAoY29uc3QgY2hhciAqcywgTGlz cF9PYmplY3Qgc3RyaW5nLCBpbnQgbmJ5dGVzLCBpbnQgbXVsdGlieXRlX3ApCiB7CiAgIG1lc3Nh Z2VfZW5hYmxlX211bHRpYnl0ZQogICAgID0gKChzICYmIG11bHRpYnl0ZV9wKQpAQCAtOTQ5Miwx MCArOTI3OCw3IEBACiAgICBjdXJyZW50LiAgKi8KIAogc3RhdGljIGludAotc2V0X21lc3NhZ2Vf MSAoYTEsIGEyLCBuYnl0ZXMsIG11bHRpYnl0ZV9wKQotICAgICBFTUFDU19JTlQgYTE7Ci0gICAg IExpc3BfT2JqZWN0IGEyOwotICAgICBFTUFDU19JTlQgbmJ5dGVzLCBtdWx0aWJ5dGVfcDsKK3Nl dF9tZXNzYWdlXzEgKEVNQUNTX0lOVCBhMSwgTGlzcF9PYmplY3QgYTIsIEVNQUNTX0lOVCBuYnl0 ZXMsIEVNQUNTX0lOVCBtdWx0aWJ5dGVfcCkKIHsKICAgY29uc3QgY2hhciAqcyA9IChjb25zdCBj aGFyICopIGExOwogICBMaXNwX09iamVjdCBzdHJpbmcgPSBhMjsKQEAgLTk1NzQsOCArOTM1Nyw3 IEBACiAgICBsYXN0IGRpc3BsYXllZC4gICovCiAKIHZvaWQKLWNsZWFyX21lc3NhZ2UgKGN1cnJl bnRfcCwgbGFzdF9kaXNwbGF5ZWRfcCkKLSAgICAgaW50IGN1cnJlbnRfcCwgbGFzdF9kaXNwbGF5 ZWRfcDsKK2NsZWFyX21lc3NhZ2UgKGludCBjdXJyZW50X3AsIGludCBsYXN0X2Rpc3BsYXllZF9w KQogewogICBpZiAoY3VycmVudF9wKQogICAgIHsKQEAgLTk1OTksNyArOTM4MSw3IEBACiAgICBh bmQgZW5zdXJlIGEgY29tcGxldGUgcmVkaXNwbGF5IG9mIGFsbCB3aW5kb3dzLiAgKi8KIAogc3Rh dGljIHZvaWQKLWNsZWFyX2dhcmJhZ2VkX2ZyYW1lcyAoKQorY2xlYXJfZ2FyYmFnZWRfZnJhbWVz ICh2b2lkKQogewogICBpZiAoZnJhbWVfZ2FyYmFnZWQpCiAgICAgewpAQCAtOTYzNiw4ICs5NDE4 LDcgQEAKICAgIG1pbmktd2luZG93cyBoZWlnaHQgaGFzIGJlZW4gY2hhbmdlZC4gICovCiAKIHN0 YXRpYyBpbnQKLWVjaG9fYXJlYV9kaXNwbGF5ICh1cGRhdGVfZnJhbWVfcCkKLSAgICAgaW50IHVw ZGF0ZV9mcmFtZV9wOworZWNob19hcmVhX2Rpc3BsYXkgKGludCB1cGRhdGVfZnJhbWVfcCkKIHsK ICAgTGlzcF9PYmplY3QgbWluaV93aW5kb3c7CiAgIHN0cnVjdCB3aW5kb3cgKnc7CkBAIC05ODEy LDggKzk1OTMsNyBAQAogfQogCiBzdGF0aWMgTGlzcF9PYmplY3QKLXVud2luZF9mb3JtYXRfbW9k ZV9saW5lICh2ZWN0b3IpCi0gICAgIExpc3BfT2JqZWN0IHZlY3RvcjsKK3Vud2luZF9mb3JtYXRf bW9kZV9saW5lIChMaXNwX09iamVjdCB2ZWN0b3IpCiB7CiAgIG1vZGVfbGluZV90YXJnZXQgPSBY SU5UIChBUkVGICh2ZWN0b3IsIDApKTsKICAgbW9kZV9saW5lX25vcHJvcF9wdHIgPSBtb2RlX2xp bmVfbm9wcm9wX2J1ZiArIFhJTlQgKEFSRUYgKHZlY3RvciwgMSkpOwpAQCAtOTg3Myw5ICs5NjUz LDcgQEAKICAgIGZyYW1lIHRpdGxlLiAgKi8KIAogc3RhdGljIGludAotc3RvcmVfbW9kZV9saW5l X25vcHJvcCAoc3RyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uKQotICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpzdHI7Ci0gICAgIGludCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uOworc3RvcmVfbW9k ZV9saW5lX25vcHJvcCAoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgZmllbGRfd2lkdGgs IGludCBwcmVjaXNpb24pCiB7CiAgIGludCBuID0gMDsKICAgaW50IGR1bW15LCBuYnl0ZXM7CkBA IC05OTA4LDggKzk2ODYsNyBAQAogICAgZnJhbWVfdGl0bGVfZm9ybWF0LiAgKi8KIAogc3RhdGlj IHZvaWQKLXhfY29uc2lkZXJfZnJhbWVfdGl0bGUgKGZyYW1lKQotICAgICBMaXNwX09iamVjdCBm cmFtZTsKK3hfY29uc2lkZXJfZnJhbWVfdGl0bGUgKExpc3BfT2JqZWN0IGZyYW1lKQogewogICBz dHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKGZyYW1lKTsKIApAQCAtOTk4OCw3ICs5NzY1LDcgQEAK ICAgIGFwcHJvcHJpYXRlLiAgVGhpcyBjYW4gY2FsbCBldmFsLiAgKi8KIAogdm9pZAotcHJlcGFy ZV9tZW51X2JhcnMgKCkKK3ByZXBhcmVfbWVudV9iYXJzICh2b2lkKQogewogICBpbnQgYWxsX3dp bmRvd3M7CiAgIHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMjsKQEAgLTEwMTA3LDEwICs5ODg0 LDcgQEAKICAgIHVwZGF0ZWQgdmFsdWUgb2YgdGhpcyBmbGFnLCB0byBwYXNzIHRvIHRoZSBuZXh0 IGNhbGwuICAqLwogCiBzdGF0aWMgaW50Ci11cGRhdGVfbWVudV9iYXIgKGYsIHNhdmVfbWF0Y2hf ZGF0YSwgaG9va3NfcnVuKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIGludCBzYXZlX21h dGNoX2RhdGE7Ci0gICAgIGludCBob29rc19ydW47Cit1cGRhdGVfbWVudV9iYXIgKHN0cnVjdCBm cmFtZSAqZiwgaW50IHNhdmVfbWF0Y2hfZGF0YSwgaW50IGhvb2tzX3J1bikKIHsKICAgTGlzcF9P YmplY3Qgd2luZG93OwogICByZWdpc3RlciBzdHJ1Y3Qgd2luZG93ICp3OwpAQCAtMTAyMzUsOCAr MTAwMDksNyBAQAogICAgcG9zaXRpb25zIGFyZSByZWxhdGl2ZSB0byB1cGRhdGVkX3dpbmRvdy4g ICovCiAKIHZvaWQKLXNldF9vdXRwdXRfY3Vyc29yIChjdXJzb3IpCi0gICAgc3RydWN0IGN1cnNv cl9wb3MgKmN1cnNvcjsKK3NldF9vdXRwdXRfY3Vyc29yIChzdHJ1Y3QgY3Vyc29yX3BvcyAqY3Vy c29yKQogewogICBvdXRwdXRfY3Vyc29yLmhwb3MgPSBjdXJzb3ItPmhwb3M7CiAgIG91dHB1dF9j dXJzb3IudnBvcyA9IGN1cnNvci0+dnBvczsKQEAgLTEwMjU3LDggKzEwMDMwLDcgQEAKICAgIHNl bGVjdGVkX3dpbmRvdyBhbmQgZGlzcGxheSB0aGUgY3Vyc29yIGF0IHRoZSBnaXZlbiBwb3NpdGlv bi4gICovCiAKIHZvaWQKLXhfY3Vyc29yX3RvICh2cG9zLCBocG9zLCB5LCB4KQotICAgICBpbnQg dnBvcywgaHBvcywgeSwgeDsKK3hfY3Vyc29yX3RvIChpbnQgdnBvcywgaW50IGhwb3MsIGludCB5 LCBpbnQgeCkKIHsKICAgc3RydWN0IHdpbmRvdyAqdzsKIApAQCAtMTAzMDYsOCArMTAwNzgsNyBA QAogCiAKIHN0YXRpYyBMaXNwX09iamVjdAotdXBkYXRlX3Rvb2xfYmFyX3Vud2luZCAoZnJhbWUp Ci0gICAgIExpc3BfT2JqZWN0IGZyYW1lOwordXBkYXRlX3Rvb2xfYmFyX3Vud2luZCAoTGlzcF9P YmplY3QgZnJhbWUpCiB7CiAgIHNlbGVjdGVkX2ZyYW1lID0gZnJhbWU7CiAgIHJldHVybiBRbmls OwpAQCAtMTAzMTksOSArMTAwOTAsNyBAQAogICAgYW5kIHJlc3RvcmUgaXQgaGVyZS4gICovCiAK IHN0YXRpYyB2b2lkCi11cGRhdGVfdG9vbF9iYXIgKGYsIHNhdmVfbWF0Y2hfZGF0YSkKLSAgICAg c3RydWN0IGZyYW1lICpmOwotICAgICBpbnQgc2F2ZV9tYXRjaF9kYXRhOwordXBkYXRlX3Rvb2xf YmFyIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBzYXZlX21hdGNoX2RhdGEpCiB7CiAjaWYgZGVmaW5l ZCAoVVNFX0dUSykgfHwgZGVmaW5lZCAoSEFWRV9OUykKICAgaW50IGRvX3VwZGF0ZSA9IEZSQU1F X0VYVEVSTkFMX1RPT0xfQkFSIChmKTsKQEAgLTEwNDE5LDggKzEwMTg4LDcgQEAKICAgIGJlZW4g c2V0IHVwIHByZXZpb3VzbHkgYnkgY2FsbGluZyBwcmVwYXJlX21lbnVfYmFycy4gICovCiAKIHN0 YXRpYyB2b2lkCi1idWlsZF9kZXNpcmVkX3Rvb2xfYmFyX3N0cmluZyAoZikKLSAgICAgc3RydWN0 IGZyYW1lICpmOworYnVpbGRfZGVzaXJlZF90b29sX2Jhcl9zdHJpbmcgKHN0cnVjdCBmcmFtZSAq ZikKIHsKICAgaW50IGksIHNpemUsIHNpemVfbmVlZGVkOwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8x LCBnY3BybzIsIGdjcHJvMzsKQEAgLTEwNTkxLDkgKzEwMzU5LDcgQEAKICovCiAKIHN0YXRpYyB2 b2lkCi1kaXNwbGF5X3Rvb2xfYmFyX2xpbmUgKGl0LCBoZWlnaHQpCi0gICAgIHN0cnVjdCBpdCAq aXQ7Ci0gICAgIGludCBoZWlnaHQ7CitkaXNwbGF5X3Rvb2xfYmFyX2xpbmUgKHN0cnVjdCBpdCAq aXQsIGludCBoZWlnaHQpCiB7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9IGl0LT5nbHlwaF9y b3c7CiAgIGludCBtYXhfeCA9IGl0LT5sYXN0X3Zpc2libGVfeDsKQEAgLTEwNzIwLDkgKzEwNDg2 LDcgQEAKICAgIHJldHVybmVkIGluICpOX1JPV1MgaWYgbm9uLU5VTEwuICAqLwogCiBzdGF0aWMg aW50Ci10b29sX2Jhcl9saW5lc19uZWVkZWQgKGYsIG5fcm93cykKLSAgICAgc3RydWN0IGZyYW1l ICpmOwotICAgICBpbnQgKm5fcm93czsKK3Rvb2xfYmFyX2xpbmVzX25lZWRlZCAoc3RydWN0IGZy YW1lICpmLCBpbnQgKm5fcm93cykKIHsKICAgc3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKGYt PnRvb2xfYmFyX3dpbmRvdyk7CiAgIHN0cnVjdCBpdCBpdDsKQEAgLTEwNzkwLDggKzEwNTU0LDcg QEAKICAgIGhlaWdodCBzaG91bGQgYmUgY2hhbmdlZC4gICovCiAKIHN0YXRpYyBpbnQKLXJlZGlz cGxheV90b29sX2JhciAoZikKLSAgICAgc3RydWN0IGZyYW1lICpmOworcmVkaXNwbGF5X3Rvb2xf YmFyIChzdHJ1Y3QgZnJhbWUgKmYpCiB7CiAgIHN0cnVjdCB3aW5kb3cgKnc7CiAgIHN0cnVjdCBp dCBpdDsKQEAgLTEwOTYyLDEwICsxMDcyNSw3IEBACiAgICBHTFlQSCBkb2Vzbid0IGRpc3BsYXkg YSB0b29sLWJhciBpdGVtLiAgKi8KIAogc3RhdGljIGludAotdG9vbF9iYXJfaXRlbV9pbmZvIChm LCBnbHlwaCwgcHJvcF9pZHgpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGds eXBoICpnbHlwaDsKLSAgICAgaW50ICpwcm9wX2lkeDsKK3Rvb2xfYmFyX2l0ZW1faW5mbyAoc3Ry dWN0IGZyYW1lICpmLCBzdHJ1Y3QgZ2x5cGggKmdseXBoLCBpbnQgKnByb3BfaWR4KQogewogICBM aXNwX09iamVjdCBwcm9wOwogICBpbnQgc3VjY2Vzc19wOwpAQCAtMTEwMDUsMTEgKzEwNzY1LDcg QEAKICAgIDEJb3RoZXJ3aXNlLiAgKi8KIAogc3RhdGljIGludAotZ2V0X3Rvb2xfYmFyX2l0ZW0g KGYsIHgsIHksIGdseXBoLCBocG9zLCB2cG9zLCBwcm9wX2lkeCkKLSAgICAgc3RydWN0IGZyYW1l ICpmOwotICAgICBpbnQgeCwgeTsKLSAgICAgc3RydWN0IGdseXBoICoqZ2x5cGg7Ci0gICAgIGlu dCAqaHBvcywgKnZwb3MsICpwcm9wX2lkeDsKK2dldF90b29sX2Jhcl9pdGVtIChzdHJ1Y3QgZnJh bWUgKmYsIGludCB4LCBpbnQgeSwgc3RydWN0IGdseXBoICoqZ2x5cGgsIGludCAqaHBvcywgaW50 ICp2cG9zLCBpbnQgKnByb3BfaWR4KQogewogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFN RV9YX0RJU1BMQVlfSU5GTyAoZik7CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChmLT50 b29sX2Jhcl93aW5kb3cpOwpAQCAtMTEwNDcsMTAgKzEwODAzLDcgQEAKICAgIHJlbGVhc2UuICAq LwogCiB2b2lkCi1oYW5kbGVfdG9vbF9iYXJfY2xpY2sgKGYsIHgsIHksIGRvd25fcCwgbW9kaWZp ZXJzKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIGludCB4LCB5LCBkb3duX3A7Ci0gICAg IHVuc2lnbmVkIGludCBtb2RpZmllcnM7CitoYW5kbGVfdG9vbF9iYXJfY2xpY2sgKHN0cnVjdCBm cmFtZSAqZiwgaW50IHgsIGludCB5LCBpbnQgZG93bl9wLCB1bnNpZ25lZCBpbnQgbW9kaWZpZXJz KQogewogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BMQVlfSU5GTyAoZik7 CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChmLT50b29sX2Jhcl93aW5kb3cpOwpAQCAt MTExMDgsOSArMTA4NjEsNyBAQAogICAgbm90ZV9tb3VzZV9oaWdobGlnaHQuICAqLwogCiBzdGF0 aWMgdm9pZAotbm90ZV90b29sX2Jhcl9oaWdobGlnaHQgKGYsIHgsIHkpCi0gICAgIHN0cnVjdCBm cmFtZSAqZjsKLSAgICAgaW50IHgsIHk7Citub3RlX3Rvb2xfYmFyX2hpZ2hsaWdodCAoc3RydWN0 IGZyYW1lICpmLCBpbnQgeCwgaW50IHkpCiB7CiAgIExpc3BfT2JqZWN0IHdpbmRvdyA9IGYtPnRv b2xfYmFyX3dpbmRvdzsKICAgc3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKHdpbmRvdyk7CkBA IC0xMTIxNCw4ICsxMDk2NSw3IEBACiAgICBjaGFuZ2VkLiAgKi8KIAogc3RhdGljIGludAotaHNj cm9sbF93aW5kb3dfdHJlZSAod2luZG93KQotICAgICBMaXNwX09iamVjdCB3aW5kb3c7Citoc2Ny b2xsX3dpbmRvd190cmVlIChMaXNwX09iamVjdCB3aW5kb3cpCiB7CiAgIGludCBoc2Nyb2xsZWRf cCA9IDA7CiAgIGludCBoc2Nyb2xsX3JlbGF0aXZlX3AgPSBGTE9BVFAgKFZoc2Nyb2xsX3N0ZXAp OwpAQCAtMTEzNTgsOCArMTExMDgsNyBAQAogICAgb2YgV0lORE9XIGFyZSBjbGVhcmVkLiAgKi8K IAogc3RhdGljIGludAotaHNjcm9sbF93aW5kb3dzICh3aW5kb3cpCi0gICAgIExpc3BfT2JqZWN0 IHdpbmRvdzsKK2hzY3JvbGxfd2luZG93cyAoTGlzcF9PYmplY3Qgd2luZG93KQogewogICBpbnQg aHNjcm9sbGVkX3AgPSBoc2Nyb2xsX3dpbmRvd190cmVlICh3aW5kb3cpOwogICBpZiAoaHNjcm9s bGVkX3ApCkBAIC0xMTQ0Miw5ICsxMTE5MSw3IEBACiAgICByZWRpc3BsYXlfaW50ZXJuYWwgZm9y IGRpc3BsYXkgb3B0aW1pemF0aW9uLiAgKi8KIAogc3RhdGljIElOTElORSBpbnQKLXRleHRfb3V0 c2lkZV9saW5lX3VuY2hhbmdlZF9wICh3LCBzdGFydCwgZW5kKQotICAgICBzdHJ1Y3Qgd2luZG93 ICp3OwotICAgICBpbnQgc3RhcnQsIGVuZDsKK3RleHRfb3V0c2lkZV9saW5lX3VuY2hhbmdlZF9w IChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CiAgIGludCB1bmNoYW5n ZWRfcCA9IDE7CiAKQEAgLTExNTExLDE1ICsxMTI1OCwxNCBAQAogICAgbWluaS1idWZmZXIgaWYg dGhhdCBpcyBpbiB1c2UuICAqLwogCiB2b2lkCi1yZWRpc3BsYXkgKCkKK3JlZGlzcGxheSAodm9p ZCkKIHsKICAgcmVkaXNwbGF5X2ludGVybmFsICgwKTsKIH0KIAogCiBzdGF0aWMgTGlzcF9PYmpl Y3QKLW92ZXJsYXlfYXJyb3dfc3RyaW5nX29yX3Byb3BlcnR5ICh2YXIpCi0gICAgIExpc3BfT2Jq ZWN0IHZhcjsKK292ZXJsYXlfYXJyb3dfc3RyaW5nX29yX3Byb3BlcnR5IChMaXNwX09iamVjdCB2 YXIpCiB7CiAgIExpc3BfT2JqZWN0IHZhbDsKIApAQCAtMTE1MzEsNyArMTEyNzcsNyBAQAogCiAv KiBSZXR1cm4gMSBpZiB0aGVyZSBhcmUgYW55IG92ZXJsYXktYXJyb3dzIGluIGN1cnJlbnRfYnVm ZmVyLiAgKi8KIHN0YXRpYyBpbnQKLW92ZXJsYXlfYXJyb3dfaW5fY3VycmVudF9idWZmZXJfcCAo KQorb3ZlcmxheV9hcnJvd19pbl9jdXJyZW50X2J1ZmZlcl9wICh2b2lkKQogewogICBMaXNwX09i amVjdCB2bGlzdDsKIApAQCAtMTE1NTcsNyArMTEzMDMsNyBAQAogICAgaGFzIGNoYW5nZWQuICAq LwogCiBzdGF0aWMgaW50Ci1vdmVybGF5X2Fycm93c19jaGFuZ2VkX3AgKCkKK292ZXJsYXlfYXJy b3dzX2NoYW5nZWRfcCAodm9pZCkKIHsKICAgTGlzcF9PYmplY3Qgdmxpc3Q7CiAKQEAgLTExNTg1 LDggKzExMzMxLDcgQEAKIC8qIE1hcmsgb3ZlcmxheSBhcnJvd3MgdG8gYmUgdXBkYXRlZCBvbiBu ZXh0IHJlZGlzcGxheS4gICovCiAKIHN0YXRpYyB2b2lkCi11cGRhdGVfb3ZlcmxheV9hcnJvd3Mg KHVwX3RvX2RhdGUpCi0gICAgIGludCB1cF90b19kYXRlOwordXBkYXRlX292ZXJsYXlfYXJyb3dz IChpbnQgdXBfdG9fZGF0ZSkKIHsKICAgTGlzcF9PYmplY3Qgdmxpc3Q7CiAKQEAgLTExNjIyLDkg KzExMzY3LDcgQEAKICAgIFJldHVybiBuaWwgaWYgbm8gb3ZlcmxheSBhcnJvdy4gICovCiAKIHN0 YXRpYyBMaXNwX09iamVjdAotb3ZlcmxheV9hcnJvd19hdF9yb3cgKGl0LCByb3cpCi0gICAgIHN0 cnVjdCBpdCAqaXQ7Ci0gICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKK292ZXJsYXlfYXJyb3df YXRfcm93IChzdHJ1Y3QgaXQgKml0LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cpCiB7CiAgIExpc3Bf T2JqZWN0IHZsaXN0OwogCkBAIC0xMTY2OSw5ICsxMTQxMiw4IEBACiAgICBwb3NpdGlvbi4gIEJV RiBhbmQgUFQgYXJlIHRoZSBjdXJyZW50IHBvaW50IGJ1ZmZlciBhbmQgcG9zaXRpb24uICAqLwog CiBpbnQKLWNoZWNrX3BvaW50X2luX2NvbXBvc2l0aW9uIChwcmV2X2J1ZiwgcHJldl9wdCwgYnVm LCBwdCkKLSAgICAgc3RydWN0IGJ1ZmZlciAqcHJldl9idWYsICpidWY7Ci0gICAgIGludCBwcmV2 X3B0LCBwdDsKK2NoZWNrX3BvaW50X2luX2NvbXBvc2l0aW9uIChzdHJ1Y3QgYnVmZmVyICpwcmV2 X2J1ZiwgaW50IHByZXZfcHQsCisJCQkgICAgc3RydWN0IGJ1ZmZlciAqYnVmLCBpbnQgcHQpCiB7 CiAgIEVNQUNTX0lOVCBzdGFydCwgZW5kOwogICBMaXNwX09iamVjdCBwcm9wOwpAQCAtMTE3MDcs OSArMTE0NDksNyBAQAogICAgaW4gd2luZG93IFcuICAqLwogCiBzdGF0aWMgSU5MSU5FIHZvaWQK LXJlY29uc2lkZXJfY2xpcF9jaGFuZ2VzICh3LCBiKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3Owot ICAgICBzdHJ1Y3QgYnVmZmVyICpiOworcmVjb25zaWRlcl9jbGlwX2NoYW5nZXMgKHN0cnVjdCB3 aW5kb3cgKncsIHN0cnVjdCBidWZmZXIgKmIpCiB7CiAgIGlmIChiLT5jbGlwX2NoYW5nZWQKIAkg ICAmJiAhTklMUCAody0+d2luZG93X2VuZF92YWxpZCkKQEAgLTExNzQ4LDggKzExNDg4LDcgQEAK ICAgIGRpcmVjdGx5LiAgKi8KIAogc3RhdGljIHZvaWQKLXNlbGVjdF9mcmFtZV9mb3JfcmVkaXNw bGF5IChmcmFtZSkKLSAgICAgTGlzcF9PYmplY3QgZnJhbWU7CitzZWxlY3RfZnJhbWVfZm9yX3Jl ZGlzcGxheSAoTGlzcF9PYmplY3QgZnJhbWUpCiB7CiAgIExpc3BfT2JqZWN0IHRhaWwsIHRlbTsK ICAgTGlzcF9PYmplY3Qgb2xkID0gc2VsZWN0ZWRfZnJhbWU7CkBAIC0xMTc5MCw4ICsxMTUyOSw3 IEBACiAgICBjYXVzZXMgc29tZSBwcm9ibGVtcy4gICovCiAKIHN0YXRpYyB2b2lkCi1yZWRpc3Bs YXlfaW50ZXJuYWwgKHByZXNlcnZlX2VjaG9fYXJlYSkKLSAgICAgaW50IHByZXNlcnZlX2VjaG9f YXJlYTsKK3JlZGlzcGxheV9pbnRlcm5hbCAoaW50IHByZXNlcnZlX2VjaG9fYXJlYSkKIHsKICAg c3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKHNlbGVjdGVkX3dpbmRvdyk7CiAgIHN0cnVjdCBm cmFtZSAqZjsKQEAgLTEyNTI0LDggKzEyMjYyLDcgQEAKICAgIGNhbGxlZC4gIFRoaXMgaXMgdXNl ZnVsIGZvciBkZWJ1Z2dpbmcuICAqLwogCiB2b2lkCi1yZWRpc3BsYXlfcHJlc2VydmVfZWNob19h cmVhIChmcm9tX3doZXJlKQotICAgICBpbnQgZnJvbV93aGVyZTsKK3JlZGlzcGxheV9wcmVzZXJ2 ZV9lY2hvX2FyZWEgKGludCBmcm9tX3doZXJlKQogewogICBUUkFDRSAoKHN0ZGVyciwgInJlZGlz cGxheV9wcmVzZXJ2ZV9lY2hvX2FyZWEgKCVkKVxuIiwgZnJvbV93aGVyZSkpOwogCkBAIC0xMjU1 NCw4ICsxMjI5MSw3IEBACiAgICBmYWlsdXJlIGR1cmluZyByZWRpc3BsYXksIGZvciBleGFtcGxl KS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotdW53aW5kX3JlZGlzcGxheSAodmFsKQotICAg ICBMaXNwX09iamVjdCB2YWw7Cit1bndpbmRfcmVkaXNwbGF5IChMaXNwX09iamVjdCB2YWwpCiB7 CiAgIExpc3BfT2JqZWN0IG9sZF9yZWRpc3BsYXlpbmdfcCwgb2xkX2ZyYW1lOwogCkBAIC0xMjU3 NSw5ICsxMjMxMSw3IEBACiAgICByZWRpc3BsYXlfaW50ZXJuYWwgaXMgY2FsbGVkLiAgKi8KIAog c3RhdGljIHZvaWQKLW1hcmtfd2luZG93X2Rpc3BsYXlfYWNjdXJhdGVfMSAodywgYWNjdXJhdGVf cCkKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgaW50IGFjY3VyYXRlX3A7CittYXJrX3dp bmRvd19kaXNwbGF5X2FjY3VyYXRlXzEgKHN0cnVjdCB3aW5kb3cgKncsIGludCBhY2N1cmF0ZV9w KQogewogICBpZiAoQlVGRkVSUCAody0+YnVmZmVyKSkKICAgICB7CkBAIC0xMjYyOCw5ICsxMjM2 Miw3IEBACiAgICBiZSByZWRpc3BsYXllZCB0aGUgbmV4dCB0aW1lIHJlZGlzcGxheV9pbnRlcm5h bCBpcyBjYWxsZWQuICAqLwogCiB2b2lkCi1tYXJrX3dpbmRvd19kaXNwbGF5X2FjY3VyYXRlICh3 aW5kb3csIGFjY3VyYXRlX3ApCi0gICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKLSAgICAgaW50IGFj Y3VyYXRlX3A7CittYXJrX3dpbmRvd19kaXNwbGF5X2FjY3VyYXRlIChMaXNwX09iamVjdCB3aW5k b3csIGludCBhY2N1cmF0ZV9wKQogewogICBzdHJ1Y3Qgd2luZG93ICp3OwogCkBAIC0xMjY2NSw5 ICsxMjM5Nyw3IEBACiAgICBtYWNybyBESVNQX0NIQVJfVkVDVE9SLiAgKi8KIAogTGlzcF9PYmpl Y3QKLWRpc3BfY2hhcl92ZWN0b3IgKGRwLCBjKQotICAgICBzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxl ICpkcDsKLSAgICAgaW50IGM7CitkaXNwX2NoYXJfdmVjdG9yIChzdHJ1Y3QgTGlzcF9DaGFyX1Rh YmxlICpkcCwgaW50IGMpCiB7CiAgIExpc3BfT2JqZWN0IHZhbDsKIApAQCAtMTI2OTgsOCArMTI0 MjgsNyBAQAogLyogUmVkaXNwbGF5IGFsbCBsZWFmIHdpbmRvd3MgaW4gdGhlIHdpbmRvdyB0cmVl IHJvb3RlZCBhdCBXSU5ET1cuICAqLwogCiBzdGF0aWMgdm9pZAotcmVkaXNwbGF5X3dpbmRvd3Mg KHdpbmRvdykKLSAgICAgTGlzcF9PYmplY3Qgd2luZG93OworcmVkaXNwbGF5X3dpbmRvd3MgKExp c3BfT2JqZWN0IHdpbmRvdykKIHsKICAgd2hpbGUgKCFOSUxQICh3aW5kb3cpKQogICAgIHsKQEAg LTEyNzI0LDE1ICsxMjQ1MywxNCBAQAogfQogCiBzdGF0aWMgTGlzcF9PYmplY3QKLXJlZGlzcGxh eV93aW5kb3dfZXJyb3IgKCkKK3JlZGlzcGxheV93aW5kb3dfZXJyb3IgKExpc3BfT2JqZWN0IGln bm9yZSkKIHsKICAgZGlzcGxheWVkX2J1ZmZlci0+ZGlzcGxheV9lcnJvcl9tb2RpZmYgPSBCVUZf TU9ESUZGIChkaXNwbGF5ZWRfYnVmZmVyKTsKICAgcmV0dXJuIFFuaWw7CiB9CiAKIHN0YXRpYyBM aXNwX09iamVjdAotcmVkaXNwbGF5X3dpbmRvd18wICh3aW5kb3cpCi0gICAgIExpc3BfT2JqZWN0 IHdpbmRvdzsKK3JlZGlzcGxheV93aW5kb3dfMCAoTGlzcF9PYmplY3Qgd2luZG93KQogewogICBp ZiAoZGlzcGxheWVkX2J1ZmZlci0+ZGlzcGxheV9lcnJvcl9tb2RpZmYgPCBCVUZfTU9ESUZGIChk aXNwbGF5ZWRfYnVmZmVyKSkKICAgICByZWRpc3BsYXlfd2luZG93ICh3aW5kb3csIDApOwpAQCAt MTI3NDAsOCArMTI0NjgsNyBAQAogfQogCiBzdGF0aWMgTGlzcF9PYmplY3QKLXJlZGlzcGxheV93 aW5kb3dfMSAod2luZG93KQotICAgICBMaXNwX09iamVjdCB3aW5kb3c7CityZWRpc3BsYXlfd2lu ZG93XzEgKExpc3BfT2JqZWN0IHdpbmRvdykKIHsKICAgaWYgKGRpc3BsYXllZF9idWZmZXItPmRp c3BsYXlfZXJyb3JfbW9kaWZmIDwgQlVGX01PRElGRiAoZGlzcGxheWVkX2J1ZmZlcikpCiAgICAg cmVkaXNwbGF5X3dpbmRvdyAod2luZG93LCAxKTsKQEAgLTEyNzY5LDExICsxMjQ5Niw5IEBACiAg ICBSZXR1cm4gMCBpZiBjdXJzb3IgaXMgbm90IG9uIHRoaXMgcm93LCAxIG90aGVyd2lzZS4gICov CiAKIGludAotc2V0X2N1cnNvcl9mcm9tX3JvdyAodywgcm93LCBtYXRyaXgsIGRlbHRhLCBkZWx0 YV9ieXRlcywgZHksIGR2cG9zKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBzdHJ1Y3Qg Z2x5cGhfcm93ICpyb3c7Ci0gICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeDsKLSAgICAg aW50IGRlbHRhLCBkZWx0YV9ieXRlcywgZHksIGR2cG9zOworc2V0X2N1cnNvcl9mcm9tX3JvdyAo c3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGdseXBoX3JvdyAqcm93LAorCQkgICAgIHN0cnVjdCBn bHlwaF9tYXRyaXggKm1hdHJpeCwgaW50IGRlbHRhLCBpbnQgZGVsdGFfYnl0ZXMsCisJCSAgICAg aW50IGR5LCBpbnQgZHZwb3MpCiB7CiAgIHN0cnVjdCBnbHlwaCAqZ2x5cGggPSByb3ctPmdseXBo c1tURVhUX0FSRUFdOwogICBzdHJ1Y3QgZ2x5cGggKmVuZCA9IGdseXBoICsgcm93LT51c2VkW1RF WFRfQVJFQV07CkBAIC0xMzI1OSw5ICsxMjk4NCw3IEBACiAgICBXZSBhc3N1bWUgdGhhdCB0aGUg d2luZG93J3MgYnVmZmVyIGlzIHJlYWxseSBjdXJyZW50LiAgKi8KIAogc3RhdGljIElOTElORSBz dHJ1Y3QgdGV4dF9wb3MKLXJ1bl93aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucyAod2luZG93LCBzdGFy dHApCi0gICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKLSAgICAgc3RydWN0IHRleHRfcG9zIHN0YXJ0 cDsKK3J1bl93aW5kb3dfc2Nyb2xsX2Z1bmN0aW9ucyAoTGlzcF9PYmplY3Qgd2luZG93LCBzdHJ1 Y3QgdGV4dF9wb3Mgc3RhcnRwKQogewogICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAod2lu ZG93KTsKICAgU0VUX01BUktFUl9GUk9NX1RFWFRfUE9TICh3LT5zdGFydCwgc3RhcnRwKTsKQEAg LTEzMjk1LDEwICsxMzAxOCw3IEBACiAgICBhcyBpZiBwb2ludCBoYWQgZ29uZSBvZmYgdGhlIHNj cmVlbi4gICovCiAKIHN0YXRpYyBpbnQKLWN1cnNvcl9yb3dfZnVsbHlfdmlzaWJsZV9wICh3LCBm b3JjZV9wLCBjdXJyZW50X21hdHJpeF9wKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBp bnQgZm9yY2VfcDsKLSAgICAgaW50IGN1cnJlbnRfbWF0cml4X3A7CitjdXJzb3Jfcm93X2Z1bGx5 X3Zpc2libGVfcCAoc3RydWN0IHdpbmRvdyAqdywgaW50IGZvcmNlX3AsIGludCBjdXJyZW50X21h dHJpeF9wKQogewogICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXg7CiAgIHN0cnVjdCBnbHlw aF9yb3cgKnJvdzsKQEAgLTEzNjE3LDggKzEzMzM3LDcgQEAKICAgIHNjcmVlbiBsaW5lIHdpdGgg dGhlIG1pbmltdW0gZGlzdGFuY2UgZnJvbSB0aGUgb2xkIHN0YXJ0IFctPnN0YXJ0LiAgKi8KIAog c3RhdGljIGludAotY29tcHV0ZV93aW5kb3dfc3RhcnRfb25fY29udGludWF0aW9uX2xpbmUgKHcp Ci0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Citjb21wdXRlX3dpbmRvd19zdGFydF9vbl9jb250aW51 YXRpb25fbGluZSAoc3RydWN0IHdpbmRvdyAqdykKIHsKICAgc3RydWN0IHRleHRfcG9zIHBvcywg c3RhcnRfcG9zOwogICBpbnQgd2luZG93X3N0YXJ0X2NoYW5nZWRfcCA9IDA7CkBAIC0xMzcwNCwx MCArMTM0MjMsNyBAQAogfTsKIAogc3RhdGljIGludAotdHJ5X2N1cnNvcl9tb3ZlbWVudCAod2lu ZG93LCBzdGFydHAsIHNjcm9sbF9zdGVwKQotICAgICBMaXNwX09iamVjdCB3aW5kb3c7Ci0gICAg IHN0cnVjdCB0ZXh0X3BvcyBzdGFydHA7Ci0gICAgIGludCAqc2Nyb2xsX3N0ZXA7Cit0cnlfY3Vy c29yX21vdmVtZW50IChMaXNwX09iamVjdCB3aW5kb3csIHN0cnVjdCB0ZXh0X3BvcyBzdGFydHAs IGludCAqc2Nyb2xsX3N0ZXApCiB7CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XICh3aW5k b3cpOwogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKQEAgLTE0MDExLDgg KzEzNzI3LDcgQEAKIH0KIAogdm9pZAotc2V0X3ZlcnRpY2FsX3Njcm9sbF9iYXIgKHcpCi0gICAg IHN0cnVjdCB3aW5kb3cgKnc7CitzZXRfdmVydGljYWxfc2Nyb2xsX2JhciAoc3RydWN0IHdpbmRv dyAqdykKIHsKICAgaW50IHN0YXJ0LCBlbmQsIHdob2xlOwogCkBAIC0xNDA1Nyw5ICsxMzc3Miw3 IEBACiAgICByZXRyeS4gICovCiAKIHN0YXRpYyB2b2lkCi1yZWRpc3BsYXlfd2luZG93ICh3aW5k b3csIGp1c3RfdGhpc19vbmVfcCkKLSAgICAgTGlzcF9PYmplY3Qgd2luZG93OwotICAgICBpbnQg anVzdF90aGlzX29uZV9wOworcmVkaXNwbGF5X3dpbmRvdyAoTGlzcF9PYmplY3Qgd2luZG93LCBp bnQganVzdF90aGlzX29uZV9wKQogewogICBzdHJ1Y3Qgd2luZG93ICp3ID0gWFdJTkRPVyAod2lu ZG93KTsKICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CkBAIC0xNDg1Mywx MCArMTQ1NjYsNyBAQAogICAgc2V0IGluIEZMQUdTLikgICovCiAKIGludAotdHJ5X3dpbmRvdyAo d2luZG93LCBwb3MsIGZsYWdzKQotICAgICBMaXNwX09iamVjdCB3aW5kb3c7Ci0gICAgIHN0cnVj dCB0ZXh0X3BvcyBwb3M7Ci0gICAgIGludCBmbGFnczsKK3RyeV93aW5kb3cgKExpc3BfT2JqZWN0 IHdpbmRvdywgc3RydWN0IHRleHRfcG9zIHBvcywgaW50IGZsYWdzKQogewogICBzdHJ1Y3Qgd2lu ZG93ICp3ID0gWFdJTkRPVyAod2luZG93KTsKICAgc3RydWN0IGl0IGl0OwpAQCAtMTQ5NTYsOCAr MTQ2NjYsNyBAQAogICAgVy0+c3RhcnQgaXMgdGhlIG5ldyB3aW5kb3cgc3RhcnQuICAqLwogCiBz dGF0aWMgaW50Ci10cnlfd2luZG93X3JldXNpbmdfY3VycmVudF9tYXRyaXggKHcpCi0gICAgIHN0 cnVjdCB3aW5kb3cgKnc7Cit0cnlfd2luZG93X3JldXNpbmdfY3VycmVudF9tYXRyaXggKHN0cnVj dCB3aW5kb3cgKncpCiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOwog ICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csICpib3R0b21fcm93OwpAQCAtMTUzOTgsMTAgKzE1MTA3 LDcgQEAKICAgIGEgcG9pbnRlciB0byB0aGUgcm93IGZvdW5kLiAgKi8KIAogc3RhdGljIHN0cnVj dCBnbHlwaF9yb3cgKgotZmluZF9sYXN0X3Jvd19kaXNwbGF5aW5nX3RleHQgKG1hdHJpeCwgaXQs IHN0YXJ0KQotICAgICBzdHJ1Y3QgZ2x5cGhfbWF0cml4ICptYXRyaXg7Ci0gICAgIHN0cnVjdCBp dCAqaXQ7Ci0gICAgIHN0cnVjdCBnbHlwaF9yb3cgKnN0YXJ0OworZmluZF9sYXN0X3Jvd19kaXNw bGF5aW5nX3RleHQgKHN0cnVjdCBnbHlwaF9tYXRyaXggKm1hdHJpeCwgc3RydWN0IGl0ICppdCwg c3RydWN0IGdseXBoX3JvdyAqc3RhcnQpCiB7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgKnJv d19mb3VuZDsKIApAQCAtMTU0MzQsOCArMTUxNDAsNyBAQAogICAgd2hlbiB0aGUgY3VycmVudCBt YXRyaXggd2FzIGJ1aWx0LiAgKi8KIAogc3RhdGljIHN0cnVjdCBnbHlwaF9yb3cgKgotZmluZF9s YXN0X3VuY2hhbmdlZF9hdF9iZWdfcm93ICh3KQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OworZmlu ZF9sYXN0X3VuY2hhbmdlZF9hdF9iZWdfcm93IChzdHJ1Y3Qgd2luZG93ICp3KQogewogICBpbnQg Zmlyc3RfY2hhbmdlZF9wb3MgPSBCRUcgKyBCRUdfVU5DSEFOR0VEOwogICBzdHJ1Y3QgZ2x5cGhf cm93ICpyb3c7CkBAIC0xNTQ4NCw5ICsxNTE4OSw3IEBACiAgICBjaGFuZ2VzLiAgKi8KIAogc3Rh dGljIHN0cnVjdCBnbHlwaF9yb3cgKgotZmluZF9maXJzdF91bmNoYW5nZWRfYXRfZW5kX3JvdyAo dywgZGVsdGEsIGRlbHRhX2J5dGVzKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQg KmRlbHRhLCAqZGVsdGFfYnl0ZXM7CitmaW5kX2ZpcnN0X3VuY2hhbmdlZF9hdF9lbmRfcm93IChz dHJ1Y3Qgd2luZG93ICp3LCBpbnQgKmRlbHRhLCBpbnQgKmRlbHRhX2J5dGVzKQogewogICBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3c7CiAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvd19mb3VuZCA9IE5VTEw7 CkBAIC0xNTU1OSw4ICsxNTI2Miw3IEBACiAgICB0cnlfd2luZG93X3JldXNpbmdfY3VycmVudF9t YXRyaXguICAqLwogCiBzdGF0aWMgdm9pZAotc3luY19mcmFtZV93aXRoX3dpbmRvd19tYXRyaXhf cm93cyAodykKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKK3N5bmNfZnJhbWVfd2l0aF93aW5kb3df bWF0cml4X3Jvd3MgKHN0cnVjdCB3aW5kb3cgKncpCiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhG UkFNRSAody0+ZnJhbWUpOwogICBzdHJ1Y3QgZ2x5cGhfcm93ICp3aW5kb3dfcm93LCAqd2luZG93 X3Jvd19lbmQsICpmcmFtZV9yb3c7CkBAIC0xNTYwNCwxMSArMTUzMDYsOCBAQAogICAgY29udGFp bmluZyBDSEFSUE9TIG9yIG51bGwuICAqLwogCiBzdHJ1Y3QgZ2x5cGhfcm93ICoKLXJvd19jb250 YWluaW5nX3BvcyAodywgY2hhcnBvcywgc3RhcnQsIGVuZCwgZHkpCi0gICAgIHN0cnVjdCB3aW5k b3cgKnc7Ci0gICAgIGludCBjaGFycG9zOwotICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpzdGFydCwg KmVuZDsKLSAgICAgaW50IGR5Oworcm93X2NvbnRhaW5pbmdfcG9zIChzdHJ1Y3Qgd2luZG93ICp3 LCBpbnQgY2hhcnBvcywgc3RydWN0IGdseXBoX3JvdyAqc3RhcnQsCisJCSAgICBzdHJ1Y3QgZ2x5 cGhfcm93ICplbmQsIGludCBkeSkKIHsKICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gc3RhcnQ7 CiAgIHN0cnVjdCBnbHlwaF9yb3cgKmJlc3Rfcm93ID0gTlVMTDsKQEAgLTE1NzEwLDggKzE1NDA5 LDcgQEAKICAgIDcuIFVwZGF0ZSBXJ3Mgd2luZG93IGVuZCBpbmZvcm1hdGlvbi4gICovCiAKIHN0 YXRpYyBpbnQKLXRyeV93aW5kb3dfaWQgKHcpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Cit0cnlf d2luZG93X2lkIChzdHJ1Y3Qgd2luZG93ICp3KQogewogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJB TUUgKHctPmZyYW1lKTsKICAgc3RydWN0IGdseXBoX21hdHJpeCAqY3VycmVudF9tYXRyaXggPSB3 LT5jdXJyZW50X21hdHJpeDsKQEAgLTE2Nzc4LDkgKzE2NDc2LDcgQEAKICAgIFVzZWQgZm9yIG5v bi13aW5kb3ctcmVkaXNwbGF5IHdpbmRvd3MsIGFuZCBmb3Igd2luZG93cyB3L28gbGVmdCBmcmlu Z2UuICAqLwogCiBzdGF0aWMgc3RydWN0IGdseXBoX3JvdyAqCi1nZXRfb3ZlcmxheV9hcnJvd19n bHlwaF9yb3cgKHcsIG92ZXJsYXlfYXJyb3dfc3RyaW5nKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3 OwotICAgICBMaXNwX09iamVjdCBvdmVybGF5X2Fycm93X3N0cmluZzsKK2dldF9vdmVybGF5X2Fy cm93X2dseXBoX3JvdyAoc3RydWN0IHdpbmRvdyAqdywgTGlzcF9PYmplY3Qgb3ZlcmxheV9hcnJv d19zdHJpbmcpCiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3 KSk7CiAgIHN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IFhCVUZGRVIgKHctPmJ1ZmZlcik7CkBAIC0x Njg0Miw4ICsxNjUzOCw3IEBACiAgICBwcm9kdWNlX3NwZWNpYWxfZ2x5cGhzLiAgKi8KIAogc3Rh dGljIHZvaWQKLWluc2VydF9sZWZ0X3RydW5jX2dseXBocyAoaXQpCi0gICAgIHN0cnVjdCBpdCAq aXQ7CitpbnNlcnRfbGVmdF90cnVuY19nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIHN0cnVj dCBpdCB0cnVuY2F0ZV9pdDsKICAgc3RydWN0IGdseXBoICpmcm9tLCAqZW5kLCAqdG8sICp0b2Vu ZDsKQEAgLTE2OTM3LDggKzE2NjMyLDcgQEAKICAgIG11c3Qgbm90IGJlIHplcm8uICAqLwogCiBz dGF0aWMgdm9pZAotY29tcHV0ZV9saW5lX21ldHJpY3MgKGl0KQotICAgICBzdHJ1Y3QgaXQgKml0 OworY29tcHV0ZV9saW5lX21ldHJpY3MgKHN0cnVjdCBpdCAqaXQpCiB7CiAgIHN0cnVjdCBnbHlw aF9yb3cgKnJvdyA9IGl0LT5nbHlwaF9yb3c7CiAgIGludCBhcmVhLCBpOwpAQCAtMTcwMzMsOSAr MTY3MjcsNyBAQAogICAgZW5kIG9mIHRoZSBsaW5lIGlmIHRoZSByb3cgZW5kcyBpbiBpdGFsaWMg dGV4dC4gICovCiAKIHN0YXRpYyBpbnQKLWFwcGVuZF9zcGFjZV9mb3JfbmV3bGluZSAoaXQsIGRl ZmF1bHRfZmFjZV9wKQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBpbnQgZGVmYXVsdF9mYWNl X3A7CithcHBlbmRfc3BhY2VfZm9yX25ld2xpbmUgKHN0cnVjdCBpdCAqaXQsIGludCBkZWZhdWx0 X2ZhY2VfcCkKIHsKICAgaWYgKEZSQU1FX1dJTkRPV19QIChpdC0+ZikpCiAgICAgewpAQCAtMTcw OTksOCArMTY3OTEsNyBAQAogICAgbGVmdCBvZiB0aGUgbGVmdG1vc3QgZ2x5cGguICAqLwogCiBz dGF0aWMgdm9pZAotZXh0ZW5kX2ZhY2VfdG9fZW5kX29mX2xpbmUgKGl0KQotICAgICBzdHJ1Y3Qg aXQgKml0OworZXh0ZW5kX2ZhY2VfdG9fZW5kX29mX2xpbmUgKHN0cnVjdCBpdCAqaXQpCiB7CiAg IHN0cnVjdCBmYWNlICpmYWNlOwogICBzdHJ1Y3QgZnJhbWUgKmYgPSBpdC0+ZjsKQEAgLTE3MjQ2 LDggKzE2OTM3LDcgQEAKICAgIHRyYWlsaW5nIHdoaXRlc3BhY2UuICAqLwogCiBzdGF0aWMgaW50 Ci10cmFpbGluZ193aGl0ZXNwYWNlX3AgKGNoYXJwb3MpCi0gICAgIGludCBjaGFycG9zOwordHJh aWxpbmdfd2hpdGVzcGFjZV9wIChpbnQgY2hhcnBvcykKIHsKICAgaW50IGJ5dGVwb3MgPSBDSEFS X1RPX0JZVEUgKGNoYXJwb3MpOwogICBpbnQgYyA9IDA7CkBAIC0xNzI2OSw5ICsxNjk1OSw3IEBA CiAvKiBIaWdobGlnaHQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgaWYgYW55LCBpbiBST1cuICAqLwog CiB2b2lkCi1oaWdobGlnaHRfdHJhaWxpbmdfd2hpdGVzcGFjZSAoZiwgcm93KQotICAgICBzdHJ1 Y3QgZnJhbWUgKmY7Ci0gICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKK2hpZ2hsaWdodF90cmFp bGluZ193aGl0ZXNwYWNlIChzdHJ1Y3QgZnJhbWUgKmYsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdykK IHsKICAgaW50IHVzZWQgPSByb3ctPnVzZWRbVEVYVF9BUkVBXTsKIApAQCAtMTczNDgsOSArMTcw MzYsNyBAQAogICAgdXNlZCB0byBob2xkIHRoZSBjdXJzb3IuICAqLwogCiBzdGF0aWMgaW50Ci1j dXJzb3Jfcm93X3AgKHcsIHJvdykKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgc3RydWN0 IGdseXBoX3JvdyAqcm93OworY3Vyc29yX3Jvd19wIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3Qg Z2x5cGhfcm93ICpyb3cpCiB7CiAgIGludCBjdXJzb3Jfcm93X3AgPSAxOwogCkBAIC0xNzQ2NSw5 ICsxNzE1MSw3IEBACiAvKiBSZXR1cm4gdGhlIGNoYXJhY3Rlci1wcm9wZXJ0eSBQUk9QIGF0IHRo ZSBjdXJyZW50IHBvc2l0aW9uIGluIElULiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1nZXRf aXRfcHJvcGVydHkgKGl0LCBwcm9wKQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBMaXNwX09i amVjdCBwcm9wOworZ2V0X2l0X3Byb3BlcnR5IChzdHJ1Y3QgaXQgKml0LCBMaXNwX09iamVjdCBw cm9wKQogewogICBMaXNwX09iamVjdCBwb3NpdGlvbjsKIApAQCAtMTc1MTYsOSArMTcyMDAsNyBA QAogICAgZ2x5cGhzIHdlcmUgcHJvZHVjZWQgYnkgUFJPRFVDRV9HTFlQSFMsIGFuZCB0aGUgbGlu ZSBuZWVkcyB0byBiZQogICAgY29udGludWVkLiAgKi8KIHN0YXRpYyB2b2lkCi11bnByb2R1Y2Vf Z2x5cGhzIChpdCwgbikKLSAgICAgc3RydWN0IGl0ICppdDsKLSAgICAgaW50IG47Cit1bnByb2R1 Y2VfZ2x5cGhzIChzdHJ1Y3QgaXQgKml0LCBpbnQgbikKIHsKICAgc3RydWN0IGdseXBoICpnbHlw aCwgKmVuZDsKIApAQCAtMTc1MzgsMTAgKzE3MjIwLDggQEAKIC8qIEZpbmQgdGhlIHBvc2l0aW9u cyBpbiBhIGJpZGktcmVvcmRlcmVkIFJPVyB0byBzZXJ2ZSBhcyBST1ctPm1pbnBvcwogICAgYW5k IFJPVy0+bWF4cG9zLiAgKi8KIHN0YXRpYyB2b2lkCi1maW5kX3Jvd19lZGdlcyAoaXQsIHJvdywg bWluX3BvcywgbWluX2Jwb3MsIG1heF9wb3MsIG1heF9icG9zKQotICAgICBzdHJ1Y3QgaXQgKml0 OwotICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7Ci0gICAgIEVNQUNTX0lOVCBtaW5fcG9zLCBt aW5fYnBvcywgbWF4X3BvcywgbWF4X2Jwb3M7CitmaW5kX3Jvd19lZGdlcyAoc3RydWN0IGl0ICpp dCwgc3RydWN0IGdseXBoX3JvdyAqcm93LCBFTUFDU19JTlQgbWluX3BvcywKKwkJRU1BQ1NfSU5U IG1pbl9icG9zLCBFTUFDU19JTlQgbWF4X3BvcywgRU1BQ1NfSU5UIG1heF9icG9zKQogewogICAv KiBGSVhNRTogUmV2aXNpdCB0aGlzIHdoZW4gZ2x5cGggYGBzcGlsbGluZycnIGluIGNvbnRpbnVh dGlvbgogICAgICBsaW5lcycgcm93cyBpcyBpbXBsZW1lbnRlZCBmb3IgYmlkaS1yZW9yZGVyZWQg cm93cy4gICovCkBAIC0xNzYyNSw4ICsxNzMwNSw3IEBACiAgICBvbmx5LiAgKi8KIAogc3RhdGlj IGludAotZGlzcGxheV9saW5lIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK2Rpc3BsYXlfbGlu ZSAoc3RydWN0IGl0ICppdCkKIHsKICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gaXQtPmdseXBo X3JvdzsKICAgTGlzcF9PYmplY3Qgb3ZlcmxheV9hcnJvd19zdHJpbmc7CkBAIC0xODM3OSw4ICsx ODA1OCw3IEBACiAgICBmb3IgdGhlIG1lbnUgYmFyLiAgKi8KIAogc3RhdGljIHZvaWQKLWRpc3Bs YXlfbWVudV9iYXIgKHcpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7CitkaXNwbGF5X21lbnVfYmFy IChzdHJ1Y3Qgd2luZG93ICp3KQogewogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRP V19GUkFNRSAodykpOwogICBzdHJ1Y3QgaXQgaXQ7CkBAIC0xODQ4NCw5ICsxODE2Miw3IEBACiAg ICB0aGUgbnVtYmVyIG9mIHdpbmRvd3Mgd2hvc2UgbW9kZSBsaW5lcyB3ZXJlIHJlZGlzcGxheWVk LiAgKi8KIAogc3RhdGljIGludAotcmVkaXNwbGF5X21vZGVfbGluZXMgKHdpbmRvdywgZm9yY2Up Ci0gICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKLSAgICAgaW50IGZvcmNlOworcmVkaXNwbGF5X21v ZGVfbGluZXMgKExpc3BfT2JqZWN0IHdpbmRvdywgaW50IGZvcmNlKQogewogICBpbnQgbndpbmRv d3MgPSAwOwogCkBAIC0xODU0OCw4ICsxODIyNCw3IEBACiAgICBzdW0gbnVtYmVyIG9mIG1vZGUg bGluZXMgYW5kIGhlYWRlciBsaW5lcyBkaXNwbGF5ZWQuICAqLwogCiBzdGF0aWMgaW50Ci1kaXNw bGF5X21vZGVfbGluZXMgKHcpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7CitkaXNwbGF5X21vZGVf bGluZXMgKHN0cnVjdCB3aW5kb3cgKncpCiB7CiAgIExpc3BfT2JqZWN0IG9sZF9zZWxlY3RlZF93 aW5kb3csIG9sZF9zZWxlY3RlZF9mcmFtZTsKICAgaW50IG4gPSAwOwpAQCAtMTg1OTMsMTAgKzE4 MjY4LDcgQEAKICAgIGRpc3BsYXllZC4gICovCiAKIHN0YXRpYyBpbnQKLWRpc3BsYXlfbW9kZV9s aW5lICh3LCBmYWNlX2lkLCBmb3JtYXQpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGVu dW0gZmFjZV9pZCBmYWNlX2lkOwotICAgICBMaXNwX09iamVjdCBmb3JtYXQ7CitkaXNwbGF5X21v ZGVfbGluZSAoc3RydWN0IHdpbmRvdyAqdywgZW51bSBmYWNlX2lkIGZhY2VfaWQsIExpc3BfT2Jq ZWN0IGZvcm1hdCkKIHsKICAgc3RydWN0IGl0IGl0OwogICBzdHJ1Y3QgZmFjZSAqZmFjZTsKQEAg LTE4NjU1LDggKzE4MzI3LDcgQEAKICAgIFJldHVybiB0aGUgdXBkYXRlZCBsaXN0LiAgKi8KIAog c3RhdGljIExpc3BfT2JqZWN0Ci1tb3ZlX2VsdF90b19mcm9udCAoZWx0LCBsaXN0KQotICAgICBM aXNwX09iamVjdCBlbHQsIGxpc3Q7Cittb3ZlX2VsdF90b19mcm9udCAoTGlzcF9PYmplY3QgZWx0 LCBMaXNwX09iamVjdCBsaXN0KQogewogICByZWdpc3RlciBMaXNwX09iamVjdCB0YWlsLCBwcmV2 OwogICByZWdpc3RlciBMaXNwX09iamVjdCB0ZW07CkBAIC0xODcxNCwxMiArMTgzODUsNyBAQAog ICAgYHN0b3JlX21vZGVfbGluZV9zdHJpbmcnLCBvciBgZGlzcGxheV9zdHJpbmcnLiAgKi8KIAog c3RhdGljIGludAotZGlzcGxheV9tb2RlX2VsZW1lbnQgKGl0LCBkZXB0aCwgZmllbGRfd2lkdGgs IHByZWNpc2lvbiwgZWx0LCBwcm9wcywgcmlza3kpCi0gICAgIHN0cnVjdCBpdCAqaXQ7Ci0gICAg IGludCBkZXB0aDsKLSAgICAgaW50IGZpZWxkX3dpZHRoLCBwcmVjaXNpb247Ci0gICAgIExpc3Bf T2JqZWN0IGVsdCwgcHJvcHM7Ci0gICAgIGludCByaXNreTsKK2Rpc3BsYXlfbW9kZV9lbGVtZW50 IChzdHJ1Y3QgaXQgKml0LCBpbnQgZGVwdGgsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lv biwgTGlzcF9PYmplY3QgZWx0LCBMaXNwX09iamVjdCBwcm9wcywgaW50IHJpc2t5KQogewogICBp bnQgbiA9IDAsIGZpZWxkLCBwcmVjOwogICBpbnQgbGl0ZXJhbCA9IDA7CkBAIC0xOTE4MSwxMyAr MTg4NDcsNyBAQAogICovCiAKIHN0YXRpYyBpbnQKLXN0b3JlX21vZGVfbGluZV9zdHJpbmcgKHN0 cmluZywgbGlzcF9zdHJpbmcsIGNvcHlfc3RyaW5nLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBw cm9wcykKLSAgICAgY2hhciAqc3RyaW5nOwotICAgICBMaXNwX09iamVjdCBsaXNwX3N0cmluZzsK LSAgICAgaW50IGNvcHlfc3RyaW5nOwotICAgICBpbnQgZmllbGRfd2lkdGg7Ci0gICAgIGludCBw cmVjaXNpb247Ci0gICAgIExpc3BfT2JqZWN0IHByb3BzOworc3RvcmVfbW9kZV9saW5lX3N0cmlu ZyAoY2hhciAqc3RyaW5nLCBMaXNwX09iamVjdCBsaXNwX3N0cmluZywgaW50IGNvcHlfc3RyaW5n LCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIExpc3BfT2JqZWN0IHByb3BzKQogewog ICBpbnQgbGVuOwogICBpbnQgbiA9IDA7CkBAIC0xOTM3NCwxMCArMTkwMzQsNyBAQAogICAgdGhl IHBvc2l0aXZlIGludGVnZXIgRCB0byBCVUYgdXNpbmcgYSBtaW5pbWFsIGZpZWxkIHdpZHRoIFdJ RFRILiAgKi8KIAogc3RhdGljIHZvaWQKLXBpbnQyc3RyIChidWYsIHdpZHRoLCBkKQotICAgICBy ZWdpc3RlciBjaGFyICpidWY7Ci0gICAgIHJlZ2lzdGVyIGludCB3aWR0aDsKLSAgICAgcmVnaXN0 ZXIgaW50IGQ7CitwaW50MnN0ciAocmVnaXN0ZXIgY2hhciAqYnVmLCByZWdpc3RlciBpbnQgd2lk dGgsIHJlZ2lzdGVyIGludCBkKQogewogICByZWdpc3RlciBjaGFyICpwID0gYnVmOwogCkBAIC0x OTQyMSwxMCArMTkwNzgsNyBAQAogICB9OwogCiBzdGF0aWMgdm9pZAotcGludDJocnN0ciAoYnVm LCB3aWR0aCwgZCkKLSAgICAgY2hhciAqYnVmOwotICAgICBpbnQgd2lkdGg7Ci0gICAgIGludCBk OworcGludDJocnN0ciAoY2hhciAqYnVmLCBpbnQgd2lkdGgsIGludCBkKQogewogICAvKiBXZSBh aW0gdG8gcmVwcmVzZW50IHRoZSBub25uZWdhdGl2ZSBpbnRlZ2VyIEQgYXMKICAgICAgUVVPVElF TlQuVEVOVEhTICogMTAgXiAoMyAqIEVYUE9ORU5UKS4gKi8KQEAgLTE5NTI1LDEwICsxOTE3OSw3 IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBpbnZhbGlkX2VvbF90eXBlW10gPSAiKCppbnZhbGlk KikiOwogCiBzdGF0aWMgY2hhciAqCi1kZWNvZGVfbW9kZV9zcGVjX2NvZGluZyAoY29kaW5nX3N5 c3RlbSwgYnVmLCBlb2xfZmxhZykKLSAgICAgTGlzcF9PYmplY3QgY29kaW5nX3N5c3RlbTsKLSAg ICAgcmVnaXN0ZXIgY2hhciAqYnVmOwotICAgICBpbnQgZW9sX2ZsYWc7CitkZWNvZGVfbW9kZV9z cGVjX2NvZGluZyAoTGlzcF9PYmplY3QgY29kaW5nX3N5c3RlbSwgcmVnaXN0ZXIgY2hhciAqYnVm LCBpbnQgZW9sX2ZsYWcpCiB7CiAgIExpc3BfT2JqZWN0IHZhbDsKICAgaW50IG11bHRpYnl0ZSA9 ICFOSUxQIChjdXJyZW50X2J1ZmZlci0+ZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKTsKQEAg LTE5NjEzLDExICsxOTI2NCw3IEBACiBzdGF0aWMgY2hhciBsb3RzX29mX2Rhc2hlc1tdID0gIi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsKIAogc3RhdGljIGNoYXIgKgotZGVjb2RlX21vZGVf c3BlYyAodywgYywgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgc3RyaW5nKQotICAgICBzdHJ1Y3Qg d2luZG93ICp3OwotICAgICByZWdpc3RlciBpbnQgYzsKLSAgICAgaW50IGZpZWxkX3dpZHRoLCBw cmVjaXNpb247Ci0gICAgIExpc3BfT2JqZWN0ICpzdHJpbmc7CitkZWNvZGVfbW9kZV9zcGVjIChz dHJ1Y3Qgd2luZG93ICp3LCByZWdpc3RlciBpbnQgYywgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJl Y2lzaW9uLCBMaXNwX09iamVjdCAqc3RyaW5nKQogewogICBMaXNwX09iamVjdCBvYmo7CiAgIHN0 cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CkBAIC0yMDAzNCw5ICsx OTY4MSw3IEBACiAgICBTZXQgKkJZVEVfUE9TX1BUUiB0byAxIGlmIHdlIGZvdW5kIENPVU5UIGxp bmVzLCAwIGlmIHdlIGhpdCBMSU1JVC4gICovCiAKIHN0YXRpYyBpbnQKLWRpc3BsYXlfY291bnRf bGluZXMgKHN0YXJ0LCBzdGFydF9ieXRlLCBsaW1pdF9ieXRlLCBjb3VudCwgYnl0ZV9wb3NfcHRy KQotICAgICBpbnQgc3RhcnQsIHN0YXJ0X2J5dGUsIGxpbWl0X2J5dGUsIGNvdW50OwotICAgICBp bnQgKmJ5dGVfcG9zX3B0cjsKK2Rpc3BsYXlfY291bnRfbGluZXMgKGludCBzdGFydCwgaW50IHN0 YXJ0X2J5dGUsIGludCBsaW1pdF9ieXRlLCBpbnQgY291bnQsIGludCAqYnl0ZV9wb3NfcHRyKQog ewogICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpjdXJzb3I7CiAgIHVuc2lnbmVkIGNoYXIgKmJh c2U7CkBAIC0yMDM2OSw5ICsyMDAxNCw3IEBACiAgICBhbmQgMSBpZiBpdCdzIGludmlzaWJsZSBh bmQgd2l0aG91dCBhbiBlbGxpcHNpcy4gICovCiAKIGludAotaW52aXNpYmxlX3AgKHByb3B2YWws IGxpc3QpCi0gICAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHByb3B2YWw7Ci0gICAgIExpc3BfT2Jq ZWN0IGxpc3Q7CitpbnZpc2libGVfcCAocmVnaXN0ZXIgTGlzcF9PYmplY3QgcHJvcHZhbCwgTGlz cF9PYmplY3QgbGlzdCkKIHsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgdGFpbCwgcHJvcHRhaWw7 CiAKQEAgLTIwNTAwLDEyICsyMDE0Myw3IEBACiAgICAgICA6IC0gMSkKIAogaW50Ci1jYWxjX3Bp eGVsX3dpZHRoX29yX2hlaWdodCAocmVzLCBpdCwgcHJvcCwgZm9udCwgd2lkdGhfcCwgYWxpZ25f dG8pCi0gICAgIGRvdWJsZSAqcmVzOwotICAgICBzdHJ1Y3QgaXQgKml0OwotICAgICBMaXNwX09i amVjdCBwcm9wOwotICAgICBzdHJ1Y3QgZm9udCAqZm9udDsKLSAgICAgaW50IHdpZHRoX3AsICph bGlnbl90bzsKK2NhbGNfcGl4ZWxfd2lkdGhfb3JfaGVpZ2h0IChkb3VibGUgKnJlcywgc3RydWN0 IGl0ICppdCwgTGlzcF9PYmplY3QgcHJvcCwgc3RydWN0IGZvbnQgKmZvbnQsIGludCB3aWR0aF9w LCBpbnQgKmFsaWduX3RvKQogewogICBkb3VibGUgcGl4ZWxzOwogCkBAIC0yMDcyMyw3ICsyMDM2 MSw3IEBACiAgICBmYWNlLW92ZXJyaWRlIGZvciBkcmF3aW5nIFMuICAqLwogCiAjaWZkZWYgSEFW RV9OVEdVSQotI2RlZmluZSBPUFRJT05BTF9IREMoaGRjKSAgaGRjLAorI2RlZmluZSBPUFRJT05B TF9IREMoaGRjKSAgSERDIGhkYywKICNkZWZpbmUgREVDTEFSRV9IREMoaGRjKSAgIEhEQyBoZGM7 CiAjZGVmaW5lIEFMTE9DQVRFX0hEQyhoZGMsIGYpIGhkYyA9IGdldF9mcmFtZV9kYyAoKGYpKQog I2RlZmluZSBSRUxFQVNFX0hEQyhoZGMsIGYpICByZWxlYXNlX2ZyYW1lX2RjICgoZiksIChoZGMp KQpAQCAtMjA3MzcsMTUgKzIwMzc1LDEwIEBACiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLWluaXRf Z2x5cGhfc3RyaW5nIChzLCBPUFRJT05BTF9IREMgKGhkYykgY2hhcjJiLCB3LCByb3csIGFyZWEs IHN0YXJ0LCBobCkKLSAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqczsKLSAgICAgREVDTEFSRV9I REMgKGhkYykKLSAgICAgWENoYXIyYiAqY2hhcjJiOwotICAgICBzdHJ1Y3Qgd2luZG93ICp3Owot ICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7Ci0gICAgIGVudW0gZ2x5cGhfcm93X2FyZWEgYXJl YTsKLSAgICAgaW50IHN0YXJ0OwotICAgICBlbnVtIGRyYXdfZ2x5cGhzX2ZhY2UgaGw7Citpbml0 X2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqcywKKwkJICAgT1BUSU9OQUxfSERD IChoZGMpCisJCSAgIFhDaGFyMmIgKmNoYXIyYiwgc3RydWN0IHdpbmRvdyAqdywgc3RydWN0IGds eXBoX3JvdyAqcm93LAorCQkgICBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEsIGludCBzdGFydCwg ZW51bSBkcmF3X2dseXBoc19mYWNlIGhsKQogewogICBiemVybyAocywgc2l6ZW9mICpzKTsKICAg cy0+dyA9IHc7CkBAIC0yMDc3MCw5ICsyMDQwMyw4IEBACiAgICB3aXRoIGhlYWQgKkhFQUQgYW5k IHRhaWwgKlRBSUwuICBTZXQgKkhFQUQgYW5kICpUQUlMIHRvIHRoZSByZXN1bHQuICAqLwogCiBz dGF0aWMgSU5MSU5FIHZvaWQKLWFwcGVuZF9nbHlwaF9zdHJpbmdfbGlzdHMgKGhlYWQsIHRhaWws IGgsIHQpCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKipoZWFkLCAqKnRhaWw7Ci0gICAgIHN0 cnVjdCBnbHlwaF9zdHJpbmcgKmgsICp0OworYXBwZW5kX2dseXBoX3N0cmluZ19saXN0cyAoc3Ry dWN0IGdseXBoX3N0cmluZyAqKmhlYWQsIHN0cnVjdCBnbHlwaF9zdHJpbmcgKip0YWlsLAorCQkJ ICAgc3RydWN0IGdseXBoX3N0cmluZyAqaCwgc3RydWN0IGdseXBoX3N0cmluZyAqdCkKIHsKICAg aWYgKGgpCiAgICAgewpAQCAtMjA3OTEsOSArMjA0MjMsOCBAQAogICAgcmVzdWx0LiAgKi8KIAog c3RhdGljIElOTElORSB2b2lkCi1wcmVwZW5kX2dseXBoX3N0cmluZ19saXN0cyAoaGVhZCwgdGFp bCwgaCwgdCkKLSAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqKmhlYWQsICoqdGFpbDsKLSAgICAg c3RydWN0IGdseXBoX3N0cmluZyAqaCwgKnQ7CitwcmVwZW5kX2dseXBoX3N0cmluZ19saXN0cyAo c3RydWN0IGdseXBoX3N0cmluZyAqKmhlYWQsIHN0cnVjdCBnbHlwaF9zdHJpbmcgKip0YWlsLAor CQkJICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKmgsIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnQpCiB7 CiAgIGlmIChoKQogICAgIHsKQEAgLTIwODExLDkgKzIwNDQyLDcgQEAKICAgIFNldCAqSEVBRCBh bmQgKlRBSUwgdG8gdGhlIHJlc3VsdGluZyBsaXN0LiAgKi8KIAogc3RhdGljIElOTElORSB2b2lk Ci1hcHBlbmRfZ2x5cGhfc3RyaW5nIChoZWFkLCB0YWlsLCBzKQotICAgICBzdHJ1Y3QgZ2x5cGhf c3RyaW5nICoqaGVhZCwgKip0YWlsOwotICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOworYXBw ZW5kX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqKmhlYWQsIHN0cnVjdCBnbHlw aF9zdHJpbmcgKip0YWlsLCBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzKQogewogICBzLT5uZXh0ID0g cy0+cHJldiA9IE5VTEw7CiAgIGFwcGVuZF9nbHlwaF9zdHJpbmdfbGlzdHMgKGhlYWQsIHRhaWws IHMsIHMpOwpAQCAtMjA4MjgsMTEgKzIwNDU3LDggQEAKICAgIERJU1BMQVlfUCBpcyBub24temVy by4gICovCiAKIHN0YXRpYyBJTkxJTkUgc3RydWN0IGZhY2UgKgotZ2V0X2NoYXJfZmFjZV9hbmRf ZW5jb2RpbmcgKGYsIGMsIGZhY2VfaWQsIGNoYXIyYiwgbXVsdGlieXRlX3AsIGRpc3BsYXlfcCkK LSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBpbnQgYywgZmFjZV9pZDsKLSAgICAgWENoYXIy YiAqY2hhcjJiOwotICAgICBpbnQgbXVsdGlieXRlX3AsIGRpc3BsYXlfcDsKK2dldF9jaGFyX2Zh Y2VfYW5kX2VuY29kaW5nIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBjLCBpbnQgZmFjZV9pZCwKKwkJ CSAgICBYQ2hhcjJiICpjaGFyMmIsIGludCBtdWx0aWJ5dGVfcCwgaW50IGRpc3BsYXlfcCkKIHsK ICAgc3RydWN0IGZhY2UgKmZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQpOwogCkBAIC0y MDg2NCwxMSArMjA0OTAsOCBAQAogICAgYSBwb2ludGVyIHRvIGEgcmVhbGl6ZWQgZmFjZSB0aGF0 IGlzIHJlYWR5IGZvciBkaXNwbGF5LiAgKi8KIAogc3RhdGljIElOTElORSBzdHJ1Y3QgZmFjZSAq Ci1nZXRfZ2x5cGhfZmFjZV9hbmRfZW5jb2RpbmcgKGYsIGdseXBoLCBjaGFyMmIsIHR3b19ieXRl X3ApCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGdseXBoICpnbHlwaDsKLSAg ICAgWENoYXIyYiAqY2hhcjJiOwotICAgICBpbnQgKnR3b19ieXRlX3A7CitnZXRfZ2x5cGhfZmFj ZV9hbmRfZW5jb2RpbmcgKHN0cnVjdCBmcmFtZSAqZiwgc3RydWN0IGdseXBoICpnbHlwaCwKKwkJ CSAgICAgWENoYXIyYiAqY2hhcjJiLCBpbnQgKnR3b19ieXRlX3ApCiB7CiAgIHN0cnVjdCBmYWNl ICpmYWNlOwogCkBAIC0yMDkwNiwxMCArMjA1MjksOCBAQAogICAgVmFsdWUgaXMgdGhlIGluZGV4 IG9mIGEgY29tcG9uZW50IG5vdCBpbiBTLiAgKi8KIAogc3RhdGljIGludAotZmlsbF9jb21wb3Np dGVfZ2x5cGhfc3RyaW5nIChzLCBiYXNlX2ZhY2UsIG92ZXJsYXBzKQotICAgICBzdHJ1Y3QgZ2x5 cGhfc3RyaW5nICpzOwotICAgICBzdHJ1Y3QgZmFjZSAqYmFzZV9mYWNlOwotICAgICBpbnQgb3Zl cmxhcHM7CitmaWxsX2NvbXBvc2l0ZV9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcg KnMsIHN0cnVjdCBmYWNlICpiYXNlX2ZhY2UsCisJCQkgICAgIGludCBvdmVybGFwcykKIHsKICAg aW50IGk7CiAgIC8qIEZvciBhbGwgZ2x5cGhzIG9mIHRoaXMgY29tcG9zaXRpb24sIHN0YXJ0aW5n IGF0IHRoZSBvZmZzZXQKQEAgLTIwOTcyLDEwICsyMDU5Myw4IEBACiB9CiAKIHN0YXRpYyBpbnQK LWZpbGxfZ3N0cmluZ19nbHlwaF9zdHJpbmcgKHMsIGZhY2VfaWQsIHN0YXJ0LCBlbmQsIG92ZXJs YXBzKQotICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOwotICAgICBpbnQgZmFjZV9pZDsKLSAg ICAgaW50IHN0YXJ0LCBlbmQsIG92ZXJsYXBzOworZmlsbF9nc3RyaW5nX2dseXBoX3N0cmluZyAo c3RydWN0IGdseXBoX3N0cmluZyAqcywgaW50IGZhY2VfaWQsCisJCQkgICBpbnQgc3RhcnQsIGlu dCBlbmQsIGludCBvdmVybGFwcykKIHsKICAgc3RydWN0IGdseXBoICpnbHlwaCwgKmxhc3Q7CiAg IExpc3BfT2JqZWN0IGxnc3RyaW5nOwpAQCAtMjEwMTksMTAgKzIwNjM4LDggQEAKICAgIFZhbHVl IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZ2x5cGggbm90IGluIFMuICAqLwogCiBzdGF0aWMg aW50Ci1maWxsX2dseXBoX3N0cmluZyAocywgZmFjZV9pZCwgc3RhcnQsIGVuZCwgb3ZlcmxhcHMp Ci0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnM7Ci0gICAgIGludCBmYWNlX2lkOwotICAgICBp bnQgc3RhcnQsIGVuZCwgb3ZlcmxhcHM7CitmaWxsX2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBo X3N0cmluZyAqcywgaW50IGZhY2VfaWQsCisJCSAgIGludCBzdGFydCwgaW50IGVuZCwgaW50IG92 ZXJsYXBzKQogewogICBzdHJ1Y3QgZ2x5cGggKmdseXBoLCAqbGFzdDsKICAgaW50IHZvZmZzZXQ7 CkBAIC0yMTA4Miw4ICsyMDY5OSw3IEBACiAvKiBGaWxsIGdseXBoIHN0cmluZyBTIGZyb20gaW1h Z2UgZ2x5cGggUy0+Zmlyc3RfZ2x5cGguICAqLwogCiBzdGF0aWMgdm9pZAotZmlsbF9pbWFnZV9n bHlwaF9zdHJpbmcgKHMpCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnM7CitmaWxsX2ltYWdl X2dseXBoX3N0cmluZyAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIHsKICAgeGFzc2VydCAocy0+ Zmlyc3RfZ2x5cGgtPnR5cGUgPT0gSU1BR0VfR0xZUEgpOwogICBzLT5pbWcgPSBJTUFHRV9GUk9N X0lEIChzLT5mLCBzLT5maXJzdF9nbHlwaC0+dS5pbWdfaWQpOwpAQCAtMjExMDcsMTEgKzIwNzIz LDggQEAKICAgIFZhbHVlIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZ2x5cGggbm90IGluIFMu ICAqLwogCiBzdGF0aWMgaW50Ci1maWxsX3N0cmV0Y2hfZ2x5cGhfc3RyaW5nIChzLCByb3csIGFy ZWEsIHN0YXJ0LCBlbmQpCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnM7Ci0gICAgIHN0cnVj dCBnbHlwaF9yb3cgKnJvdzsKLSAgICAgZW51bSBnbHlwaF9yb3dfYXJlYSBhcmVhOwotICAgICBp bnQgc3RhcnQsIGVuZDsKK2ZpbGxfc3RyZXRjaF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9z dHJpbmcgKnMsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywKKwkJCSAgIGVudW0gZ2x5cGhfcm93X2Fy ZWEgYXJlYSwgaW50IHN0YXJ0LCBpbnQgZW5kKQogewogICBzdHJ1Y3QgZ2x5cGggKmdseXBoLCAq bGFzdDsKICAgaW50IHZvZmZzZXQsIGZhY2VfaWQ7CkBAIC0yMTE0NSwxMCArMjA3NTgsNyBAQAog fQogCiBzdGF0aWMgc3RydWN0IGZvbnRfbWV0cmljcyAqCi1nZXRfcGVyX2NoYXJfbWV0cmljIChm LCBmb250LCBjaGFyMmIpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgc3RydWN0IGZvbnQg KmZvbnQ7Ci0gICAgIFhDaGFyMmIgKmNoYXIyYjsKK2dldF9wZXJfY2hhcl9tZXRyaWMgKHN0cnVj dCBmcmFtZSAqZiwgc3RydWN0IGZvbnQgKmZvbnQsIFhDaGFyMmIgKmNoYXIyYikKIHsKICAgc3Rh dGljIHN0cnVjdCBmb250X21ldHJpY3MgbWV0cmljczsKICAgdW5zaWduZWQgY29kZSA9IChYQ0hB UjJCX0JZVEUxIChjaGFyMmIpIDw8IDgpIHwgWENIQVIyQl9CWVRFMiAoY2hhcjJiKTsKQEAgLTIx MTY1LDEwICsyMDc3NSw3IEBACiAgICBhc3N1bWVkIHRvIGJlIHplcm8uICAqLwogCiB2b2lkCi14 X2dldF9nbHlwaF9vdmVyaGFuZ3MgKGdseXBoLCBmLCBsZWZ0LCByaWdodCkKLSAgICAgc3RydWN0 IGdseXBoICpnbHlwaDsKLSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBpbnQgKmxlZnQsICpy aWdodDsKK3hfZ2V0X2dseXBoX292ZXJoYW5ncyAoc3RydWN0IGdseXBoICpnbHlwaCwgc3RydWN0 IGZyYW1lICpmLCBpbnQgKmxlZnQsIGludCAqcmlnaHQpCiB7CiAgICpsZWZ0ID0gKnJpZ2h0ID0g MDsKIApAQCAtMjEyMTksOCArMjA4MjYsNyBAQAogICAgaWYgbm8gZ2x5cGhzIGFyZSBvdmVyd3Jp dHRlbi4gICovCiAKIHN0YXRpYyBpbnQKLWxlZnRfb3ZlcndyaXR0ZW4gKHMpCi0gICAgIHN0cnVj dCBnbHlwaF9zdHJpbmcgKnM7CitsZWZ0X292ZXJ3cml0dGVuIChzdHJ1Y3QgZ2x5cGhfc3RyaW5n ICpzKQogewogICBpbnQgazsKIApAQCAtMjEyNDcsOCArMjA4NTMsNyBAQAogICAgZ2x5cGggaW4g ZnJvbnQgb2YgUyBvdmVyd3JpdGVzIFMuICAqLwogCiBzdGF0aWMgaW50Ci1sZWZ0X292ZXJ3cml0 aW5nIChzKQotICAgICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzOworbGVmdF9vdmVyd3JpdGluZyAo c3RydWN0IGdseXBoX3N0cmluZyAqcykKIHsKICAgaW50IGksIGssIHg7CiAgIHN0cnVjdCBnbHlw aCAqZ2x5cGhzID0gcy0+cm93LT5nbHlwaHNbcy0+YXJlYV07CkBAIC0yMTI3NCw4ICsyMDg3OSw3 IEBACiAgICBubyBzdWNoIGdseXBoIGlzIGZvdW5kLiAgKi8KIAogc3RhdGljIGludAotcmlnaHRf b3ZlcndyaXR0ZW4gKHMpCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcgKnM7CityaWdodF9vdmVy d3JpdHRlbiAoc3RydWN0IGdseXBoX3N0cmluZyAqcykKIHsKICAgaW50IGsgPSAtMTsKIApAQCAt MjEzMDEsOCArMjA5MDUsNyBAQAogICAgaWYgbm8gc3VjaCBnbHlwaCBpcyBmb3VuZC4gICovCiAK IHN0YXRpYyBpbnQKLXJpZ2h0X292ZXJ3cml0aW5nIChzKQotICAgICBzdHJ1Y3QgZ2x5cGhfc3Ry aW5nICpzOworcmlnaHRfb3ZlcndyaXRpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiB7CiAg IGludCBpLCBrLCB4OwogICBpbnQgZW5kID0gcy0+cm93LT51c2VkW3MtPmFyZWFdOwpAQCAtMjEz MjksMTAgKzIwOTMyLDcgQEAKICAgIGluIHRoZSBkcmF3aW5nIGFyZWEuICAqLwogCiBzdGF0aWMg SU5MSU5FIHZvaWQKLXNldF9nbHlwaF9zdHJpbmdfYmFja2dyb3VuZF93aWR0aCAocywgc3RhcnQs IGxhc3RfeCkKLSAgICAgc3RydWN0IGdseXBoX3N0cmluZyAqczsKLSAgICAgaW50IHN0YXJ0Owot ICAgICBpbnQgbGFzdF94Oworc2V0X2dseXBoX3N0cmluZ19iYWNrZ3JvdW5kX3dpZHRoIChzdHJ1 Y3QgZ2x5cGhfc3RyaW5nICpzLCBpbnQgc3RhcnQsIGludCBsYXN0X3gpCiB7CiAgIC8qIElmIHRo ZSBmYWNlIG9mIHRoaXMgZ2x5cGggc3RyaW5nIGhhcyB0byBiZSBkcmF3biB0byB0aGUgZW5kIG9m CiAgICAgIHRoZSBkcmF3aW5nIGFyZWEsIHNldCBTLT5leHRlbmRzX3RvX2VuZF9vZl9saW5lX3Au ICAqLwpAQCAtMjEzNjEsMTAgKzIwOTYxLDcgQEAKICAgIEJBQ0tXQVJEX1Agbm9uLXplcm8gbWVh bnMgcHJvY2VzcyBwcmVkZWNlc3NvcnMuICAqLwogCiBzdGF0aWMgdm9pZAotY29tcHV0ZV9vdmVy aGFuZ3NfYW5kX3ggKHMsIHgsIGJhY2t3YXJkX3ApCi0gICAgIHN0cnVjdCBnbHlwaF9zdHJpbmcg KnM7Ci0gICAgIGludCB4OwotICAgICBpbnQgYmFja3dhcmRfcDsKK2NvbXB1dGVfb3Zlcmhhbmdz X2FuZF94IChzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpzLCBpbnQgeCwgaW50IGJhY2t3YXJkX3ApCiB7 CiAgIGlmIChiYWNrd2FyZF9wKQogICAgIHsKQEAgLTIxNjIwLDE0ICsyMTIxNyw5IEBACiAgICBW YWx1ZSBpcyB0aGUgeC1wb3NpdGlvbiByZWFjaGVkLCByZWxhdGl2ZSB0byBBUkVBIG9mIFcuICAq LwogCiBzdGF0aWMgaW50Ci1kcmF3X2dseXBocyAodywgeCwgcm93LCBhcmVhLCBzdGFydCwgZW5k LCBobCwgb3ZlcmxhcHMpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGludCB4OwotICAg ICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3c7Ci0gICAgIGVudW0gZ2x5cGhfcm93X2FyZWEgYXJlYTsK LSAgICAgRU1BQ1NfSU5UIHN0YXJ0LCBlbmQ7Ci0gICAgIGVudW0gZHJhd19nbHlwaHNfZmFjZSBo bDsKLSAgICAgaW50IG92ZXJsYXBzOworZHJhd19nbHlwaHMgKHN0cnVjdCB3aW5kb3cgKncsIGlu dCB4LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisJICAgICBlbnVtIGdseXBoX3Jvd19hcmVhIGFy ZWEsIEVNQUNTX0lOVCBzdGFydCwgRU1BQ1NfSU5UIGVuZCwKKwkgICAgIGVudW0gZHJhd19nbHlw aHNfZmFjZSBobCwgaW50IG92ZXJsYXBzKQogewogICBzdHJ1Y3QgZ2x5cGhfc3RyaW5nICpoZWFk LCAqdGFpbDsKICAgc3RydWN0IGdseXBoX3N0cmluZyAqczsKQEAgLTIxODc1LDggKzIxNDY3LDcg QEAKICAgIENhbGxlZCBmcm9tIHhfcHJvZHVjZV9nbHlwaHMgd2hlbiBJVC0+Z2x5cGhfcm93IGlz IG5vbi1udWxsLiAgKi8KIAogc3RhdGljIElOTElORSB2b2lkCi1hcHBlbmRfZ2x5cGggKGl0KQot ICAgICBzdHJ1Y3QgaXQgKml0OworYXBwZW5kX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogewogICBz dHJ1Y3QgZ2x5cGggKmdseXBoOwogICBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEgPSBpdC0+YXJl YTsKQEAgLTIxOTUwLDggKzIxNTQxLDcgQEAKICAgIG5vbi1udWxsLiAgKi8KIAogc3RhdGljIElO TElORSB2b2lkCi1hcHBlbmRfY29tcG9zaXRlX2dseXBoIChpdCkKLSAgICAgc3RydWN0IGl0ICpp dDsKK2FwcGVuZF9jb21wb3NpdGVfZ2x5cGggKHN0cnVjdCBpdCAqaXQpCiB7CiAgIHN0cnVjdCBn bHlwaCAqZ2x5cGg7CiAgIGVudW0gZ2x5cGhfcm93X2FyZWEgYXJlYSA9IGl0LT5hcmVhOwpAQCAt MjIwMjAsOCArMjE2MTAsNyBAQAogICAgSVQtPnZvZmZzZXQuICAqLwogCiBzdGF0aWMgSU5MSU5F IHZvaWQKLXRha2VfdmVydGljYWxfcG9zaXRpb25faW50b19hY2NvdW50IChpdCkKLSAgICAgc3Ry dWN0IGl0ICppdDsKK3Rha2VfdmVydGljYWxfcG9zaXRpb25faW50b19hY2NvdW50IChzdHJ1Y3Qg aXQgKml0KQogewogICBpZiAoaXQtPnZvZmZzZXQpCiAgICAgewpAQCAtMjIwNDIsOCArMjE2MzEs NyBAQAogICAgYW4gb3ZlcnZpZXcgb2Ygc3RydWN0IGRpc3BsYXlfaXRlcmF0b3IuICAqLwogCiBz dGF0aWMgdm9pZAotcHJvZHVjZV9pbWFnZV9nbHlwaCAoaXQpCi0gICAgIHN0cnVjdCBpdCAqaXQ7 Citwcm9kdWNlX2ltYWdlX2dseXBoIChzdHJ1Y3QgaXQgKml0KQogewogICBzdHJ1Y3QgaW1hZ2Ug KmltZzsKICAgc3RydWN0IGZhY2UgKmZhY2U7CkBAIC0yMjIwMywxMSArMjE3OTEsOCBAQAogICAg c3RyZXRjaC4gIEFTQ0VOVCBpcyB0aGUgYXNjZW50IG9mIHRoZSBnbHlwaCAoMCA8PSBBU0NFTlQg PD0gSEVJR0hUKS4gICovCiAKIHN0YXRpYyB2b2lkCi1hcHBlbmRfc3RyZXRjaF9nbHlwaCAoaXQs IG9iamVjdCwgd2lkdGgsIGhlaWdodCwgYXNjZW50KQotICAgICBzdHJ1Y3QgaXQgKml0OwotICAg ICBMaXNwX09iamVjdCBvYmplY3Q7Ci0gICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgICBpbnQg YXNjZW50OworYXBwZW5kX3N0cmV0Y2hfZ2x5cGggKHN0cnVjdCBpdCAqaXQsIExpc3BfT2JqZWN0 IG9iamVjdCwKKwkJICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYXNjZW50KQogewog ICBzdHJ1Y3QgZ2x5cGggKmdseXBoOwogICBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEgPSBpdC0+ YXJlYTsKQEAgLTIyMjk4LDggKzIxODgzLDcgQEAKICAgIEFTQ0VOVCBtdXN0IGJlIGluIHRoZSBy YW5nZSAwIDw9IEFTQ0VOVCA8PSAxMDAuICAqLwogCiBzdGF0aWMgdm9pZAotcHJvZHVjZV9zdHJl dGNoX2dseXBoIChpdCkKLSAgICAgc3RydWN0IGl0ICppdDsKK3Byb2R1Y2Vfc3RyZXRjaF9nbHlw aCAoc3RydWN0IGl0ICppdCkKIHsKICAgLyogKHNwYWNlIDp3aWR0aCBXSURUSCA6aGVpZ2h0IEhF SUdIVCAuLi4pICAqLwogICBMaXNwX09iamVjdCBwcm9wLCBwbGlzdDsKQEAgLTIyNDI1LDExICsy MjAwOSw4IEBACiAKIAogc3RhdGljIExpc3BfT2JqZWN0Ci1jYWxjX2xpbmVfaGVpZ2h0X3Byb3Bl cnR5IChpdCwgdmFsLCBmb250LCBib2ZmLCBvdmVycmlkZSkKLSAgICAgc3RydWN0IGl0ICppdDsK LSAgICAgTGlzcF9PYmplY3QgdmFsOwotICAgICBzdHJ1Y3QgZm9udCAqZm9udDsKLSAgICAgaW50 IGJvZmYsIG92ZXJyaWRlOworY2FsY19saW5lX2hlaWdodF9wcm9wZXJ0eSAoc3RydWN0IGl0ICpp dCwgTGlzcF9PYmplY3QgdmFsLCBzdHJ1Y3QgZm9udCAqZm9udCwKKwkJCSAgIGludCBib2ZmLCBp bnQgb3ZlcnJpZGUpCiB7CiAgIExpc3BfT2JqZWN0IGZhY2VfbmFtZSA9IFFuaWw7CiAgIGludCBh c2NlbnQsIGRlc2NlbnQsIGhlaWdodDsKQEAgLTIyNTA1LDggKzIyMDg2LDcgQEAKICAgIGZvciBh biBvdmVydmlldyBvZiBzdHJ1Y3QgaXQuICAqLwogCiB2b2lkCi14X3Byb2R1Y2VfZ2x5cGhzIChp dCkKLSAgICAgc3RydWN0IGl0ICppdDsKK3hfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQp CiB7CiAgIGludCBleHRyYV9saW5lX3NwYWNpbmcgPSBpdC0+ZXh0cmFfbGluZV9zcGFjaW5nOwog CkBAIC0yMzI5Miw5ICsyMjg3Miw3IEBACiAgICByb3cgYmVpbmcgdXBkYXRlZC4gICovCiAKIHZv aWQKLXhfd3JpdGVfZ2x5cGhzIChzdGFydCwgbGVuKQotICAgICBzdHJ1Y3QgZ2x5cGggKnN0YXJ0 OwotICAgICBpbnQgbGVuOworeF93cml0ZV9nbHlwaHMgKHN0cnVjdCBnbHlwaCAqc3RhcnQsIGlu dCBsZW4pCiB7CiAgIGludCB4LCBocG9zOwogCkBAIC0yMzMyOSw5ICsyMjkwNyw3IEBACiAgICBJ bnNlcnQgTEVOIGdseXBocyBmcm9tIFNUQVJUIGF0IHRoZSBub21pbmFsIGN1cnNvciBwb3NpdGlv bi4gICovCiAKIHZvaWQKLXhfaW5zZXJ0X2dseXBocyAoc3RhcnQsIGxlbikKLSAgICAgc3RydWN0 IGdseXBoICpzdGFydDsKLSAgICAgaW50IGxlbjsKK3hfaW5zZXJ0X2dseXBocyAoc3RydWN0IGds eXBoICpzdGFydCwgaW50IGxlbikKIHsKICAgc3RydWN0IGZyYW1lICpmOwogICBzdHJ1Y3Qgd2lu ZG93ICp3OwpAQCAtMjMzODksOCArMjI5NjUsNyBAQAogICAgdXBkYXRlZF93aW5kb3cuICBUT19Y ID09IC0xIG1lYW5zIGNsZWFyIHRvIHRoZSBlbmQgb2YgdGhpcyBhcmVhLiAgKi8KIAogdm9pZAot eF9jbGVhcl9lbmRfb2ZfbGluZSAodG9feCkKLSAgICAgaW50IHRvX3g7Cit4X2NsZWFyX2VuZF9v Zl9saW5lIChpbnQgdG9feCkKIHsKICAgc3RydWN0IGZyYW1lICpmOwogICBzdHJ1Y3Qgd2luZG93 ICp3ID0gdXBkYXRlZF93aW5kb3c7CkBAIC0yMzQ2Niw5ICsyMzA0MSw3IEBACiAgICBvZiB0aGUg YmFyIGN1cnNvci4gICovCiAKIHN0YXRpYyBlbnVtIHRleHRfY3Vyc29yX2tpbmRzCi1nZXRfc3Bl Y2lmaWVkX2N1cnNvcl90eXBlIChhcmcsIHdpZHRoKQotICAgICBMaXNwX09iamVjdCBhcmc7Ci0g ICAgIGludCAqd2lkdGg7CitnZXRfc3BlY2lmaWVkX2N1cnNvcl90eXBlIChMaXNwX09iamVjdCBh cmcsIGludCAqd2lkdGgpCiB7CiAgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgdHlwZTsKIApAQCAt MjM1MjEsOSArMjMwOTQsNyBAQAogCiAvKiBTZXQgdGhlIGRlZmF1bHQgY3Vyc29yIHR5cGVzIGZv ciBzcGVjaWZpZWQgZnJhbWUuICAqLwogdm9pZAotc2V0X2ZyYW1lX2N1cnNvcl90eXBlcyAoZiwg YXJnKQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIExpc3BfT2JqZWN0IGFyZzsKK3NldF9m cmFtZV9jdXJzb3JfdHlwZXMgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgYXJnKQogewog ICBpbnQgd2lkdGg7CiAgIExpc3BfT2JqZWN0IHRlbTsKQEAgLTIzNTU3LDExICsyMzEyOCw4IEBA CiAgICBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIHdhbnQgYSBob2xsb3cgYm94IGN1cnNvci4gICov CiAKIHN0YXRpYyBlbnVtIHRleHRfY3Vyc29yX2tpbmRzCi1nZXRfd2luZG93X2N1cnNvcl90eXBl ICh3LCBnbHlwaCwgd2lkdGgsIGFjdGl2ZV9jdXJzb3IpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7 Ci0gICAgIHN0cnVjdCBnbHlwaCAqZ2x5cGg7Ci0gICAgIGludCAqd2lkdGg7Ci0gICAgIGludCAq YWN0aXZlX2N1cnNvcjsKK2dldF93aW5kb3dfY3Vyc29yX3R5cGUgKHN0cnVjdCB3aW5kb3cgKncs IHN0cnVjdCBnbHlwaCAqZ2x5cGgsIGludCAqd2lkdGgsCisJCQlpbnQgKmFjdGl2ZV9jdXJzb3Ip CiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOwogICBzdHJ1Y3QgYnVm ZmVyICpiID0gWEJVRkZFUiAody0+YnVmZmVyKTsKQEAgLTIzNzE3LDEwICsyMzI4NSw4IEBACiAg ICBhcmUgd2luZG93LXJlbGF0aXZlLiAgKi8KIAogc3RhdGljIHZvaWQKLW5vdGljZV9vdmVyd3Jp dHRlbl9jdXJzb3IgKHcsIGFyZWEsIHgwLCB4MSwgeTAsIHkxKQotICAgICBzdHJ1Y3Qgd2luZG93 ICp3OwotICAgICBlbnVtIGdseXBoX3Jvd19hcmVhIGFyZWE7Ci0gICAgIGludCB4MCwgeTAsIHgx LCB5MTsKK25vdGljZV9vdmVyd3JpdHRlbl9jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncsIGVudW0g Z2x5cGhfcm93X2FyZWEgYXJlYSwKKwkJCSAgIGludCB4MCwgaW50IHgxLCBpbnQgeTAsIGludCB5 MSkKIHsKICAgaW50IGN4MCwgY3gxLCBjeTAsIGN5MTsKICAgc3RydWN0IGdseXBoX3JvdyAqcm93 OwpAQCAtMjM3ODcsMTEgKzIzMzUzLDggQEAKICAgIHdpdGggcmVzcGVjdCB0byB0aGUgb3Zlcmxh cHBpbmcgcGFydCBPVkVSTEFQUy4gICovCiAKIHZvaWQKLXhfZml4X292ZXJsYXBwaW5nX2FyZWEg KHcsIHJvdywgYXJlYSwgb3ZlcmxhcHMpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIHN0 cnVjdCBnbHlwaF9yb3cgKnJvdzsKLSAgICAgZW51bSBnbHlwaF9yb3dfYXJlYSBhcmVhOwotICAg ICBpbnQgb3ZlcmxhcHM7Cit4X2ZpeF9vdmVybGFwcGluZ19hcmVhIChzdHJ1Y3Qgd2luZG93ICp3 LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCisJCQllbnVtIGdseXBoX3Jvd19hcmVhIGFyZWEsIGlu dCBvdmVybGFwcykKIHsKICAgaW50IGksIHg7CiAKQEAgLTIzODMyLDEwICsyMzM5NSw4IEBACiAg ICBjb21tZW50IG9mIGRyYXdfZ2x5cGhzIGZvciB0aGUgbWVhbmluZyBvZiBITC4gICovCiAKIHZv aWQKLWRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIHJvdywgaGwpCi0gICAgIHN0cnVjdCB3aW5k b3cgKnc7Ci0gICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKLSAgICAgZW51bSBkcmF3X2dseXBo c19mYWNlIGhsOworZHJhd19waHlzX2N1cnNvcl9nbHlwaCAoc3RydWN0IHdpbmRvdyAqdywgc3Ry dWN0IGdseXBoX3JvdyAqcm93LAorCQkJZW51bSBkcmF3X2dseXBoc19mYWNlIGhsKQogewogICAv KiBJZiBjdXJzb3IgaHBvcyBpcyBvdXQgb2YgYm91bmRzLCBkb24ndCBkcmF3IGdhcmJhZ2UuICBU aGlzIGNhbgogICAgICBoYXBwZW4gaW4gbWluaS1idWZmZXIgd2luZG93cyB3aGVuIHN3aXRjaGlu ZyBiZXR3ZWVuIGVjaG8gYXJlYQpAQCAtMjM4NzgsOCArMjM0MzksNyBAQAogICAgRXJhc2UgdGhl IGltYWdlIG9mIGEgY3Vyc29yIG9mIHdpbmRvdyBXIGZyb20gdGhlIHNjcmVlbi4gICovCiAKIHZv aWQKLWVyYXNlX3BoeXNfY3Vyc29yICh3KQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OworZXJhc2Vf cGh5c19jdXJzb3IgKHN0cnVjdCB3aW5kb3cgKncpCiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhG UkFNRSAody0+ZnJhbWUpOwogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BM QVlfSU5GTyAoZik7CkBAIC0yMzk5NSw5ICsyMzU1NSw4IEBACiAgICB3aGVyZSB0byBwdXQgdGhl IGN1cnNvciBpcyBzcGVjaWZpZWQgYnkgSFBPUywgVlBPUywgWCBhbmQgWS4gICovCiAKIHZvaWQK LWRpc3BsYXlfYW5kX3NldF9jdXJzb3IgKHcsIG9uLCBocG9zLCB2cG9zLCB4LCB5KQotICAgICBz dHJ1Y3Qgd2luZG93ICp3OwotICAgICBpbnQgb24sIGhwb3MsIHZwb3MsIHgsIHk7CitkaXNwbGF5 X2FuZF9zZXRfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBpbnQgb24sIGludCBocG9zLCBpbnQg dnBvcywKKwkJCWludCB4LCBpbnQgeSkKIHsKICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3 LT5mcmFtZSk7CiAgIGludCBuZXdfY3Vyc29yX3R5cGU7CkBAIC0yNDA4MCw5ICsyMzYzOSw3IEBA CiAgICBvZiBPTi4gICovCiAKIHZvaWQKLXVwZGF0ZV93aW5kb3dfY3Vyc29yICh3LCBvbikKLSAg ICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAgaW50IG9uOwordXBkYXRlX3dpbmRvd19jdXJzb3Ig KHN0cnVjdCB3aW5kb3cgKncsIGludCBvbikKIHsKICAgLyogRG9uJ3QgdXBkYXRlIGN1cnNvciBp biB3aW5kb3dzIHdob3NlIGZyYW1lIGlzIGluIHRoZSBwcm9jZXNzCiAgICAgIG9mIGJlaW5nIGRl bGV0ZWQuICAqLwpAQCAtMjQxMDAsOSArMjM2NTcsNyBAQAogICAgaW4gdGhlIHdpbmRvdyB0cmVl IHJvb3RlZCBhdCBXLiAgKi8KIAogc3RhdGljIHZvaWQKLXVwZGF0ZV9jdXJzb3JfaW5fd2luZG93 X3RyZWUgKHcsIG9uX3ApCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIGludCBvbl9wOwor dXBkYXRlX2N1cnNvcl9pbl93aW5kb3dfdHJlZSAoc3RydWN0IHdpbmRvdyAqdywgaW50IG9uX3Ap CiB7CiAgIHdoaWxlICh3KQogICAgIHsKQEAgLTI0MTIzLDkgKzIzNjc4LDcgQEAKICAgIERvbid0 IGNoYW5nZSB0aGUgY3Vyc29yJ3MgcG9zaXRpb24uICAqLwogCiB2b2lkCi14X3VwZGF0ZV9jdXJz b3IgKGYsIG9uX3ApCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IG9uX3A7Cit4X3Vw ZGF0ZV9jdXJzb3IgKHN0cnVjdCBmcmFtZSAqZiwgaW50IG9uX3ApCiB7CiAgIHVwZGF0ZV9jdXJz b3JfaW5fd2luZG93X3RyZWUgKFhXSU5ET1cgKGYtPnJvb3Rfd2luZG93KSwgb25fcCk7CiB9CkBA IC0yNDEzNyw4ICsyMzY5MCw3IEBACiAgICBpcyBhYm91dCB0byBiZSByZXdyaXR0ZW4uICAqLwog CiB2b2lkCi14X2NsZWFyX2N1cnNvciAodykKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKK3hfY2xl YXJfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3KQogewogICBpZiAoRlJBTUVfVklTSUJMRV9QIChY RlJBTUUgKHctPmZyYW1lKSkgJiYgdy0+cGh5c19jdXJzb3Jfb25fcCkKICAgICB1cGRhdGVfd2lu ZG93X2N1cnNvciAodywgMCk7CkBAIC0yNDE0OSw5ICsyMzcwMSw3IEBACiAgICBEaXNwbGF5IHRo ZSBhY3RpdmUgcmVnaW9uIGRlc2NyaWJlZCBieSBtb3VzZV9mYWNlXyogYWNjb3JkaW5nIHRvIERS QVcuICAqLwogCiB2b2lkCi1zaG93X21vdXNlX2ZhY2UgKGRweWluZm8sIGRyYXcpCi0gICAgIERp c3BsYXlfSW5mbyAqZHB5aW5mbzsKLSAgICAgZW51bSBkcmF3X2dseXBoc19mYWNlIGRyYXc7Citz aG93X21vdXNlX2ZhY2UgKERpc3BsYXlfSW5mbyAqZHB5aW5mbywgZW51bSBkcmF3X2dseXBoc19m YWNlIGRyYXcpCiB7CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChkcHlpbmZvLT5tb3Vz ZV9mYWNlX3dpbmRvdyk7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1F ICh3KSk7CkBAIC0yNDIzNCw4ICsyMzc4NCw3IEBACiAgICBmYWNlIHdhcyBhY3R1YWxseSBkcmF3 biB1bmhpZ2hsaWdodGVkLiAgKi8KIAogaW50Ci1jbGVhcl9tb3VzZV9mYWNlIChkcHlpbmZvKQot ICAgICBEaXNwbGF5X0luZm8gKmRweWluZm87CitjbGVhcl9tb3VzZV9mYWNlIChEaXNwbGF5X0lu Zm8gKmRweWluZm8pCiB7CiAgIGludCBjbGVhcmVkID0gMDsKIApAQCAtMjQyNTcsOCArMjM4MDYs NyBAQAogICAgTm9uLXplcm8gaWYgcGh5c2ljYWwgY3Vyc29yIG9mIHdpbmRvdyBXIGlzIHdpdGhp biBtb3VzZSBmYWNlLiAgKi8KIAogaW50Ci1jdXJzb3JfaW5fbW91c2VfZmFjZV9wICh3KQotICAg ICBzdHJ1Y3Qgd2luZG93ICp3OworY3Vyc29yX2luX21vdXNlX2ZhY2VfcCAoc3RydWN0IHdpbmRv dyAqdykKIHsKICAgRGlzcGxheV9JbmZvICpkcHlpbmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8g KFhGUkFNRSAody0+ZnJhbWUpKTsKICAgaW50IGluX21vdXNlX2ZhY2UgPSAwOwpAQCAtMjQ0ODMs MTIgKzI0MDMxLDggQEAKICAgIFZhbHVlIGlzIG5vbi16ZXJvIGlmIGEgZ2x5cGggd2FzIGZvdW5k LiAgKi8KIAogc3RhdGljIGludAotZmFzdF9maW5kX3N0cmluZ19wb3MgKHcsIHBvcywgb2JqZWN0 LCBocG9zLCB2cG9zLCB4LCB5LCByaWdodF9wKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAg ICBFTUFDU19JTlQgcG9zOwotICAgICBMaXNwX09iamVjdCBvYmplY3Q7Ci0gICAgIGludCAqaHBv cywgKnZwb3MsICp4LCAqeTsKLSAgICAgaW50IHJpZ2h0X3A7CitmYXN0X2ZpbmRfc3RyaW5nX3Bv cyAoc3RydWN0IHdpbmRvdyAqdywgRU1BQ1NfSU5UIHBvcywgTGlzcF9PYmplY3Qgb2JqZWN0LAor CQkgICAgICBpbnQgKmhwb3MsIGludCAqdnBvcywgaW50ICp4LCBpbnQgKnksIGludCByaWdodF9w KQogewogICBpbnQgeWIgPSB3aW5kb3dfdGV4dF9ib3R0b21feSAodyk7CiAgIHN0cnVjdCBnbHlw aF9yb3cgKnI7CkBAIC0yNDU1Miw5ICsyNDA5Niw3IEBACiAvKiBTZWUgaWYgcG9zaXRpb24gWCwg WSBpcyB3aXRoaW4gYSBob3Qtc3BvdCBvZiBhbiBpbWFnZS4gICovCiAKIHN0YXRpYyBpbnQKLW9u X2hvdF9zcG90X3AgKGhvdF9zcG90LCB4LCB5KQotICAgICBMaXNwX09iamVjdCBob3Rfc3BvdDsK LSAgICAgaW50IHgsIHk7Citvbl9ob3Rfc3BvdF9wIChMaXNwX09iamVjdCBob3Rfc3BvdCwgaW50 IHgsIGludCB5KQogewogICBpZiAoIUNPTlNQIChob3Rfc3BvdCkpCiAgICAgcmV0dXJuIDA7CkBA IC0yNDY1MCw5ICsyNDE5Miw3IEBACiB9CiAKIExpc3BfT2JqZWN0Ci1maW5kX2hvdF9zcG90ICht YXAsIHgsIHkpCi0gICAgIExpc3BfT2JqZWN0IG1hcDsKLSAgICAgaW50IHgsIHk7CitmaW5kX2hv dF9zcG90IChMaXNwX09iamVjdCBtYXAsIGludCB4LCBpbnQgeSkKIHsKICAgd2hpbGUgKENPTlNQ IChtYXApKQogICAgIHsKQEAgLTI0NjkzLDEwICsyNDIzMyw3IEBACiAKIC8qIERpc3BsYXkgZnJh bWUgQ1VSU09SLCBvcHRpb25hbGx5IHVzaW5nIHNoYXBlIGRlZmluZWQgYnkgUE9JTlRFUi4gICov CiBzdGF0aWMgdm9pZAotZGVmaW5lX2ZyYW1lX2N1cnNvcjEgKGYsIGN1cnNvciwgcG9pbnRlcikK LSAgICAgc3RydWN0IGZyYW1lICpmOwotICAgICBDdXJzb3IgY3Vyc29yOwotICAgICBMaXNwX09i amVjdCBwb2ludGVyOworZGVmaW5lX2ZyYW1lX2N1cnNvcjEgKHN0cnVjdCBmcmFtZSAqZiwgQ3Vy c29yIGN1cnNvciwgTGlzcF9PYmplY3QgcG9pbnRlcikKIHsKICAgLyogRG8gbm90IGNoYW5nZSBj dXJzb3Igc2hhcGUgd2hpbGUgZHJhZ2dpbmcgbW91c2UuICAqLwogICBpZiAoIU5JTFAgKGRvX21v dXNlX3RyYWNraW5nKSkKQEAgLTI0NzM1LDEwICsyNDI3Miw4IEBACiAgICBwb3NpdGlvbiByZWxh dGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIG1vZGUgbGluZS4gICovCiAKIHN0YXRpYyB2b2lkCi1u b3RlX21vZGVfbGluZV9vcl9tYXJnaW5faGlnaGxpZ2h0ICh3aW5kb3csIHgsIHksIGFyZWEpCi0g ICAgIExpc3BfT2JqZWN0IHdpbmRvdzsKLSAgICAgaW50IHgsIHk7Ci0gICAgIGVudW0gd2luZG93 X3BhcnQgYXJlYTsKK25vdGVfbW9kZV9saW5lX29yX21hcmdpbl9oaWdobGlnaHQgKExpc3BfT2Jq ZWN0IHdpbmRvdywgaW50IHgsIGludCB5LAorCQkJCSAgICBlbnVtIHdpbmRvd19wYXJ0IGFyZWEp CiB7CiAgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XICh3aW5kb3cpOwogICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKQEAgLTI0OTc4LDkgKzI0NTEzLDcgQEAKICAgIFgg YW5kIFkgY2FuIGJlIG5lZ2F0aXZlIG9yIG91dCBvZiByYW5nZS4gICovCiAKIHZvaWQKLW5vdGVf bW91c2VfaGlnaGxpZ2h0IChmLCB4LCB5KQotICAgICBzdHJ1Y3QgZnJhbWUgKmY7Ci0gICAgIGlu dCB4LCB5Oworbm90ZV9tb3VzZV9oaWdobGlnaHQgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHgsIGlu dCB5KQogewogICBEaXNwbGF5X0luZm8gKmRweWluZm8gPSBGUkFNRV9YX0RJU1BMQVlfSU5GTyAo Zik7CiAgIGVudW0gd2luZG93X3BhcnQgcGFydDsKQEAgLTI1NDQ2LDggKzI0OTc5LDcgQEAKICAg IGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhlIG1vdXNlLWhpZ2hsaWdodCBpcyBvZmYuICAqLwogCiB2 b2lkCi14X2NsZWFyX3dpbmRvd19tb3VzZV9mYWNlICh3KQotICAgICBzdHJ1Y3Qgd2luZG93ICp3 OworeF9jbGVhcl93aW5kb3dfbW91c2VfZmFjZSAoc3RydWN0IHdpbmRvdyAqdykKIHsKICAgRGlz cGxheV9JbmZvICpkcHlpbmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKFhGUkFNRSAody0+ZnJh bWUpKTsKICAgTGlzcF9PYmplY3Qgd2luZG93OwpAQCAtMjU0NjUsOCArMjQ5OTcsNyBAQAogICAg VGhpcyBpcyB1c2VkIHdoZW4gdGhlIHNpemUgb2YgRiBpcyBjaGFuZ2VkLiAgKi8KIAogdm9pZAot Y2FuY2VsX21vdXNlX2ZhY2UgKGYpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKK2NhbmNlbF9tb3Vz ZV9mYWNlIChzdHJ1Y3QgZnJhbWUgKmYpCiB7CiAgIExpc3BfT2JqZWN0IHdpbmRvdzsKICAgRGlz cGxheV9JbmZvICpkcHlpbmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwpAQCAtMjU0OTQs MTEgKzI1MDI1LDggQEAKICAgIHdoaWNoIGludGVyc2VjdHMgcmVjdGFuZ2xlIFIuICBSIGlzIGlu IHdpbmRvdy1yZWxhdGl2ZSBjb29yZGluYXRlcy4gICovCiAKIHN0YXRpYyB2b2lkCi1leHBvc2Vf YXJlYSAodywgcm93LCByLCBhcmVhKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAgICBzdHJ1 Y3QgZ2x5cGhfcm93ICpyb3c7Ci0gICAgIFhSZWN0YW5nbGUgKnI7Ci0gICAgIGVudW0gZ2x5cGhf cm93X2FyZWEgYXJlYTsKK2V4cG9zZV9hcmVhIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5 cGhfcm93ICpyb3csIFhSZWN0YW5nbGUgKnIsCisJICAgICBlbnVtIGdseXBoX3Jvd19hcmVhIGFy ZWEpCiB7CiAgIHN0cnVjdCBnbHlwaCAqZmlyc3QgPSByb3ctPmdseXBoc1thcmVhXTsKICAgc3Ry dWN0IGdseXBoICplbmQgPSByb3ctPmdseXBoc1thcmVhXSArIHJvdy0+dXNlZFthcmVhXTsKQEAg LTI1NTUyLDEwICsyNTA4MCw3IEBACiAgICBub24temVybyBpZiBtb3VzZS1mYWNlIHdhcyBvdmVy d3JpdHRlbi4gICovCiAKIHN0YXRpYyBpbnQKLWV4cG9zZV9saW5lICh3LCByb3csIHIpCi0gICAg IHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdzsKLSAgICAgWFJl Y3RhbmdsZSAqcjsKK2V4cG9zZV9saW5lIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhf cm93ICpyb3csIFhSZWN0YW5nbGUgKnIpCiB7CiAgIHhhc3NlcnQgKHJvdy0+ZW5hYmxlZF9wKTsK IApAQCAtMjU1ODcsMTEgKzI1MTEyLDggQEAKICAgIExBU1RfT1ZFUkxBUFBJTkdfUk9XIGlzIHRo ZSBsYXN0IHN1Y2ggcm93LiAgKi8KIAogc3RhdGljIHZvaWQKLWV4cG9zZV9vdmVybGFwcyAodywg Zmlyc3Rfb3ZlcmxhcHBpbmdfcm93LCBsYXN0X292ZXJsYXBwaW5nX3JvdywgcikKLSAgICAgc3Ry dWN0IHdpbmRvdyAqdzsKLSAgICAgc3RydWN0IGdseXBoX3JvdyAqZmlyc3Rfb3ZlcmxhcHBpbmdf cm93OwotICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpsYXN0X292ZXJsYXBwaW5nX3JvdzsKLSAgICAg WFJlY3RhbmdsZSAqcjsKK2V4cG9zZV9vdmVybGFwcyAoc3RydWN0IHdpbmRvdyAqdywgc3RydWN0 IGdseXBoX3JvdyAqZmlyc3Rfb3ZlcmxhcHBpbmdfcm93LAorCQkgc3RydWN0IGdseXBoX3JvdyAq bGFzdF9vdmVybGFwcGluZ19yb3csIFhSZWN0YW5nbGUgKnIpCiB7CiAgIHN0cnVjdCBnbHlwaF9y b3cgKnJvdzsKIApAQCAtMjU2MTcsOSArMjUxMzksNyBAQAogLyogUmV0dXJuIG5vbi16ZXJvIGlm IFcncyBjdXJzb3IgaW50ZXJzZWN0cyByZWN0YW5nbGUgUi4gICovCiAKIHN0YXRpYyBpbnQKLXBo eXNfY3Vyc29yX2luX3JlY3RfcCAodywgcikKLSAgICAgc3RydWN0IHdpbmRvdyAqdzsKLSAgICAg WFJlY3RhbmdsZSAqcjsKK3BoeXNfY3Vyc29yX2luX3JlY3RfcCAoc3RydWN0IHdpbmRvdyAqdywg WFJlY3RhbmdsZSAqcikKIHsKICAgWFJlY3RhbmdsZSBjciwgcmVzdWx0OwogICBzdHJ1Y3QgZ2x5 cGggKmN1cnNvcl9nbHlwaDsKQEAgLTI1NjY1LDggKzI1MTg1LDcgQEAKICAgIGhhdmUgdmVydGlj YWwgc2Nyb2xsIGJhcnMuICAqLwogCiB2b2lkCi14X2RyYXdfdmVydGljYWxfYm9yZGVyICh3KQot ICAgICBzdHJ1Y3Qgd2luZG93ICp3OworeF9kcmF3X3ZlcnRpY2FsX2JvcmRlciAoc3RydWN0IHdp bmRvdyAqdykKIHsKICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcp KTsKIApAQCAtMjU3MTYsOSArMjUyMzUsNyBAQAogICAgbW91c2UtZmFjZS4gICovCiAKIHN0YXRp YyBpbnQKLWV4cG9zZV93aW5kb3cgKHcsIGZyKQotICAgICBzdHJ1Y3Qgd2luZG93ICp3OwotICAg ICBYUmVjdGFuZ2xlICpmcjsKK2V4cG9zZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cgKncsIFhSZWN0 YW5nbGUgKmZyKQogewogICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1lKTsKICAg WFJlY3RhbmdsZSB3ciwgcjsKQEAgLTI1ODUxLDkgKzI1MzY4LDcgQEAKICAgIG5vbi16ZXJvIGlm IHRoZSBleHBvc3VyZSBvdmVyd3JpdGVzIG1vdXNlLWZhY2UuICAqLwogCiBzdGF0aWMgaW50Ci1l eHBvc2Vfd2luZG93X3RyZWUgKHcsIHIpCi0gICAgIHN0cnVjdCB3aW5kb3cgKnc7Ci0gICAgIFhS ZWN0YW5nbGUgKnI7CitleHBvc2Vfd2luZG93X3RyZWUgKHN0cnVjdCB3aW5kb3cgKncsIFhSZWN0 YW5nbGUgKnIpCiB7CiAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOwogICBp bnQgbW91c2VfZmFjZV9vdmVyd3JpdHRlbl9wID0gMDsKQEAgLTI1ODgzLDkgKzI1Mzk4LDcgQEAK ICAgIHRoZSBlbnRpcmUgZnJhbWUuICAqLwogCiB2b2lkCi1leHBvc2VfZnJhbWUgKGYsIHgsIHks IHcsIGgpCi0gICAgIHN0cnVjdCBmcmFtZSAqZjsKLSAgICAgaW50IHgsIHksIHcsIGg7CitleHBv c2VfZnJhbWUgKHN0cnVjdCBmcmFtZSAqZiwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7 CiAgIFhSZWN0YW5nbGUgcjsKICAgaW50IG1vdXNlX2ZhY2Vfb3ZlcndyaXR0ZW5fcCA9IDA7CkBA IC0yNTk3Myw4ICsyNTQ4Niw3IEBACiAgICBlbXB0eS4gICovCiAKIGludAoteF9pbnRlcnNlY3Rf cmVjdGFuZ2xlcyAocjEsIHIyLCByZXN1bHQpCi0gICAgIFhSZWN0YW5nbGUgKnIxLCAqcjIsICpy ZXN1bHQ7Cit4X2ludGVyc2VjdF9yZWN0YW5nbGVzIChYUmVjdGFuZ2xlICpyMSwgWFJlY3Rhbmds ZSAqcjIsIFhSZWN0YW5nbGUgKnJlc3VsdCkKIHsKICAgWFJlY3RhbmdsZSAqbGVmdCwgKnJpZ2h0 OwogICBYUmVjdGFuZ2xlICp1cHBlciwgKmxvd2VyOwpAQCAtMjYwMjksNyArMjU1NDEsNyBAQAog ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwogCiB2b2lkCi1zeW1zX29mX3hkaXNwICgpCitzeW1zX29mX3hkaXNw ICh2b2lkKQogewogICBWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IgPSBRbmlsOwogICBzdGF0 aWNwcm8gKCZWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IpOwpAQCAtMjY2NzYsNyArMjYxODgs NyBAQAogLyogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZSB3aGVuIEVtYWNzIHN0YXJ0cy4gICovCiAK IHZvaWQKLWluaXRfeGRpc3AgKCkKK2luaXRfeGRpc3AgKHZvaWQpCiB7CiAgIExpc3BfT2JqZWN0 IHJvb3Rfd2luZG93OwogICBzdHJ1Y3Qgd2luZG93ICptaW5pX3c7CkBAIC0yNjczMywxNCArMjYy NDUsMTQgQEAKIAogLyogUmV0dXJuIG5vbi16ZXJvIGlmIGhvdWdsYXNzIHRpbWVyIGhhcyBiZWVu IHN0YXJ0ZWQgb3IgaG91cmdsYXNzIGlzIHNob3duLiAgKi8KIGludAotaG91cmdsYXNzX3N0YXJ0 ZWQgKCkKK2hvdXJnbGFzc19zdGFydGVkICh2b2lkKQogewogICByZXR1cm4gaG91cmdsYXNzX3No b3duX3AgfHwgaG91cmdsYXNzX2F0aW1lciAhPSBOVUxMOwogfQogCiAvKiBDYW5jZWwgYSBjdXJy ZW50bHkgYWN0aXZlIGhvdXJnbGFzcyB0aW1lciwgYW5kIHN0YXJ0IGEgbmV3IG9uZS4gICovCiB2 b2lkCi1zdGFydF9ob3VyZ2xhc3MgKCkKK3N0YXJ0X2hvdXJnbGFzcyAodm9pZCkKIHsKICNpZiBk ZWZpbmVkIChIQVZFX1dJTkRPV19TWVNURU0pCiAgIEVNQUNTX1RJTUUgZGVsYXk7CkBAIC0yNjc3 Miw3ICsyNjI4NCw3IEBACiAvKiBDYW5jZWwgdGhlIGhvdXJnbGFzcyBjdXJzb3IgdGltZXIgaWYg YWN0aXZlLCBoaWRlIGEgYnVzeSBjdXJzb3IgaWYKICAgIHNob3duLiAgKi8KIHZvaWQKLWNhbmNl bF9ob3VyZ2xhc3MgKCkKK2NhbmNlbF9ob3VyZ2xhc3MgKHZvaWQpCiB7CiAjaWYgZGVmaW5lZCAo SEFWRV9XSU5ET1dfU1lTVEVNKQogICBpZiAoaG91cmdsYXNzX2F0aW1lcikKCg== --0016e6d99ce6a19572048a99d216--