From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#26102: movemail can't connect mail server Date: Wed, 15 Mar 2017 15:48:50 -0700 Organization: UCLA Computer Science Department Message-ID: References: <76a96737-f780-00a2-9fd4-70c0e95f0101@cs.ucla.edu> <8360ja1ldi.fsf@gnu.org> <834lyu1jws.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------BB4EC6E66081D231E04EDF6E" X-Trace: blaine.gmane.org 1489618216 19686 195.159.176.226 (15 Mar 2017 22:50:16 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 15 Mar 2017 22:50:16 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 Cc: hengaini2055@qq.com, 26102@debbugs.gnu.org To: Eli Zaretskii , Glenn Morris Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Mar 15 23:50:12 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coHk9-0004SV-MO for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 Mar 2017 23:50:10 +0100 Original-Received: from localhost ([::1]:39899 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1coHkF-0005qp-Hp for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 Mar 2017 18:50:15 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48941) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1coHk6-0005pJ-1B for bug-gnu-emacs@gnu.org; Wed, 15 Mar 2017 18:50:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1coHk2-0001SD-Uk for bug-gnu-emacs@gnu.org; Wed, 15 Mar 2017 18:50:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:59461) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1coHk2-0001Rw-PF for bug-gnu-emacs@gnu.org; Wed, 15 Mar 2017 18:50:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1coHk2-0002gc-5t for bug-gnu-emacs@gnu.org; Wed, 15 Mar 2017 18:50:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 15 Mar 2017 22:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 26102 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: notabug Original-Received: via spool by 26102-submit@debbugs.gnu.org id=B26102.148961814310252 (code B ref 26102); Wed, 15 Mar 2017 22:50:02 +0000 Original-Received: (at 26102) by debbugs.gnu.org; 15 Mar 2017 22:49:03 +0000 Original-Received: from localhost ([127.0.0.1]:57661 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coHj5-0002fI-EW for submit@debbugs.gnu.org; Wed, 15 Mar 2017 18:49:03 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:56492) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coHj2-0002eo-QX for 26102@debbugs.gnu.org; Wed, 15 Mar 2017 18:49:01 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id CFC9B16008C; Wed, 15 Mar 2017 15:48:54 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id B-IQYMBTIbXh; Wed, 15 Mar 2017 15:48:51 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 89A9416008E; Wed, 15 Mar 2017 15:48:51 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id hVI_87fVYWzh; Wed, 15 Mar 2017 15:48:51 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 5586B16008C; Wed, 15 Mar 2017 15:48:51 -0700 (PDT) In-Reply-To: <834lyu1jws.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:130629 Archived-At: This is a multi-part message in MIME format. --------------BB4EC6E66081D231E04EDF6E Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 03/15/2017 11:20 AM, Eli Zaretskii wrote: > I'm against removing features for no good reason. Sure, but there is a good reason here: Emacs movemail supports only unencrypted POP3 connections, which has real security problems in typical network environments today. Also, as can be seen earlier in this thread, having two 'movemail' commands confuses users and can trip them up. I take your point that there is a backwards-compatibility argument for installing a movemail program that converts mailboxes from system format to Emacs format, when GNU Mailutils is not available. However, we should not distribute a movemail program that encourages users to read their mail unencrypted over a network -- although that may have been OK in the 1980s when POP support was added to movemail, it's a grave disservice to users in typical environments today. Attached are two proposed patches to try to improve the current situation. The first removes unencrypted POP3 support from Emacs movemail, as it's a significant security blunder to insist on unencrypted network connections these days. The second changes the Emacs build procedure so that there is a configure-time option for whether to install the substitute 'movemail' program instead of relying on GNU Mailutils 'movemail'; the idea is to let distributors decide whether to make GNU Mailutils be a prerequisite for reading email in Emacs. --------------BB4EC6E66081D231E04EDF6E Content-Type: application/x-patch; name="0001-Drop-POP-from-movemail.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Drop-POP-from-movemail.patch" RnJvbSA5OGRiMDQxODVjM2E1M2JkMzU0ZTI5NDgxNWM1NDZjZmYyMTVmMTY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBXZWQsIDE1IE1hciAyMDE3IDEyOjQzOjQ4IC0wNzAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIERyb3AgUE9QIGZyb20gbW92ZW1haWwKClRoZXNlIGRheXMgaXQncyBhbG1vc3Qg bWFscHJhY3RpY2UgdG8gc2hpcCBhbiBlbWFpbCBjbGllbnQKdGhhdCBzdXBwb3J0cyBvbmx5 IHVuZW5jcnlwdGVkIHByb3RvY29scy4gIEFzayBQT1AzIHVzZXJzCnRvIHVzZSBHTlUgTWFp bHV0aWxzIG1vdmVtYWlsIGluc3RlYWQsIGFzIGl0IHN1cHBvcnRzIFRMUy4KKiBJTlNUQUxM OiBNZW50aW9uIE1haWx1dGlscy4KKiBhZG1pbi9DUFAtREVGSU5FUzogUmVtb3ZlIHN5bWJv bHMgbm8gbG9uZ2VyIG5lZWRlZC4KKiBjb25maWd1cmUuYWMgKC0td2l0aC1wb3AsIC0td2l0 aC1rZXJiZXJvcywgLS13aXRoLWtlcmJlcm9zNSkKKC0td2l0aC1oZXNpb2QsIC0td2l0aC1t YWlsaG9zdCwgTUFJTF9VU0VfUE9QLCBLRVJCRVJPUywgS0VSQkVST1M1KQooSEVTSU9ELCBN QUlMSE9TVCwgTElCSEVTSU9ELCBMSUJSRVNPTFYsIFJFU09MVkxJQiwgQ09NX0VSUkxPSUIp CihDUllQVE9MSUIsIEtSQjVMSUIsIERFU0xJQiwgS1JCNExJQiwgSEFWRV9LRVJCRVJPU0lW X0tSQl9IKQooSEFWRV9LRVJCRVJPU19LUkJfSCwgSEFWRV9LUkI1X0VSUk9SX0VfVEVYVCkK KEhBVkVfS1JCNV9FUlJPUl9URVhULCBIQVZFX0tSQjVfSCwgSEFWRV9LUkJfSCk6ClJlbW92 ZS4gIEFsbCB1c2VzIHJlbW92ZWQuCiogZG9jL2VtYWNzL3JtYWlsLnRleGkgKE1vdmVtYWls LCBSZW1vdmUgTWFpbGJveGVzKToKUmVtb3ZlIGRvY3VtZW50YXRpb24gb2YgUE9QMyB3aXRo IEVtYWNzIG1vdmVtYWlsLCBzaW5jZSBzdWNoCnVzYWdlIG5vdyByZXF1aXJlcyBNYWlsdXRp bHMgbW92ZW1haWwuCiogZXRjL05FV1M6IE1lbnRpb24gdGhpcyBpbnN0YWxsYXRpb24gY2hh bmdlLgoqIGV0Yy9QUk9CTEVNUzogU2ltcGxpZnkuCiogbGliLXNyYy9NYWtlZmlsZS5pbiAo S1JCNExJQiwgREVTTElCLCBLUkI1TElCLCBDUllQVE9MSUIpCihDT01fRVJSTElCLCBMSUJI RVNJT0QsIExJQlJFU09MViwgcG9wLm8pOgpSZW1vdmUuICBBbGwgdXNlcyByZW1vdmVkLgoq IGxpYi1zcmMvbW92ZW1haWwuYyBbTUFJTF9VU0VfUE9QXToKUmVtb3ZlIGFsbCBjb2RlIGRl cGVuZGluZyBvbiB0aGlzIHN5bWJvbC4KKiBsaWItc3JjL3BvcC5jLCBsaWItc3JjL3BvcC5o OiBSZW1vdmUuCiogbGlzcC9tYWlsL3JtYWlsLmVsIChybWFpbC1wYXJzZS11cmwpOgpEbyBu b3QgYXNzdW1lIHRoYXQgRW1hY3MgbW92ZW1haWwgc3VwcG9ydHMgUE9QMy4KLS0tCiBJTlNU QUxMICAgICAgICAgICAgICB8ICAgIDkgKy0KIGFkbWluL0NQUC1ERUZJTkVTICAgIHwgICAg NyAtCiBjb25maWd1cmUuYWMgICAgICAgICB8ICAxMzQgLS0tLQogZG9jL2VtYWNzL3JtYWls LnRleGkgfCAgIDI0ICstCiBldGMvTkVXUyAgICAgICAgICAgICB8ICAgIDYgKwogZXRjL1BS T0JMRU1TICAgICAgICAgfCAgICA5IC0KIGxpYi1zcmMvTWFrZWZpbGUuaW4gIHwgICAyNCAr LQogbGliLXNyYy9tb3ZlbWFpbC5jICAgfCAgMzYzICstLS0tLS0tLS0tCiBsaWItc3JjL3Bv cC5jICAgICAgICB8IDE2OTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGxpYi1zcmMvcG9wLmggICAgICAgIHwgICA3NSAtLS0KIGxpc3Av bWFpbC9ybWFpbC5lbCAgIHwgICAgNyArLQogMTEgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0 aW9ucygrKSwgMjMzNSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWItc3Jj L3BvcC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliLXNyYy9wb3AuaAoKZGlmZiAtLWdpdCBh L0lOU1RBTEwgYi9JTlNUQUxMCmluZGV4IDEwYjE3NTYuLjY0N2Y3MmUgMTAwNjQ0Ci0tLSBh L0lOU1RBTEwKKysrIGIvSU5TVEFMTApAQCAtMjU5LDEyICsyNTksOSBAQCBpbmNvbnZlbmll bnQgZm9yIEVtYWNzIHdoZW4gcnVubmluZyBhcyBkYWVtb24gb3IgcnVubmluZyB2aWEgYSBy ZW1vdGUKIHNzaCBjb25uZWN0aW9uLiAgSW4gb3JkZXIgdG8gY29tcGxldGVseSBwcmV2ZW50 IHRoZSB1c2Ugb2YgRC1CdXMsIGNvbmZpZ3VyZQogRW1hY3Mgd2l0aCB0aGUgb3B0aW9ucyAn LS13aXRob3V0LWRidXMgLS13aXRob3V0LWdjb25mIC0td2l0aG91dC1nc2V0dGluZ3MnLgog Ci1UaGUgRW1hY3MgbWFpbCByZWFkZXIgUk1BSUwgaXMgY29uZmlndXJlZCB0byBiZSBhYmxl IHRvIHJlYWQgbWFpbCBmcm9tCi1hIFBPUDMgc2VydmVyIGJ5IGRlZmF1bHQuICBWZXJzaW9u cyBvZiB0aGUgUE9QIHByb3RvY29sIG9sZGVyIHRoYW4KLVBPUDMgYXJlIG5vdCBzdXBwb3J0 ZWQuICBGb3IgS2VyYmVyb3MtYXV0aGVudGljYXRlZCBQT1AgYWRkCi0nLS13aXRoLWtlcmJl cm9zJywgZm9yIEhlc2lvZCBzdXBwb3J0IGFkZCAnLS13aXRoLWhlc2lvZCcuICBXaGlsZSBQ T1AzCi1pcyBhbHdheXMgZW5hYmxlZCwgd2hldGhlciBFbWFjcyBhY3R1YWxseSB1c2VzIFBP UCBpcyBjb250cm9sbGVkIGJ5Ci1pbmRpdmlkdWFsIHVzZXJzLS1zZWUgdGhlIFJtYWlsIGNo YXB0ZXIgb2YgdGhlIEVtYWNzIG1hbnVhbC4KK1RvIHJlYWQgZW1haWwgdmlhIGEgbmV0d29y ayBwcm90b2NvbCBsaWtlIElNQVAgb3IgUE9QLCB5b3UgY2FuCitkb3dubG9hZCwgYnVpbGQs IGFuZCBpbnN0YWxsIHRoZSBHTlUgTWFpbHV0aWxzIHBhY2thZ2UsIHNvIHRoYXQgRW1hY3MK K2NhbiB1c2UgTWFpbHV0aWxzICdtb3ZlbWFpbCcgcHJvZ3JhbSB0byByZXRyaWV2ZSBtYWls LgogCiBGb3IgaW1hZ2Ugc3VwcG9ydCB5b3UgbWF5IGhhdmUgdG8gZG93bmxvYWQsIGJ1aWxk LCBhbmQgaW5zdGFsbCB0aGUKIGFwcHJvcHJpYXRlIGltYWdlIHN1cHBvcnQgbGlicmFyaWVz IGZvciBpbWFnZSB0eXBlcyBvdGhlciB0aGFuIFhCTSBhbmQKZGlmZiAtLWdpdCBhL2FkbWlu L0NQUC1ERUZJTkVTIGIvYWRtaW4vQ1BQLURFRklORVMKaW5kZXggY2VhZDMwNS4uYzE0NmUw YiAxMDA2NDQKLS0tIGEvYWRtaW4vQ1BQLURFRklORVMKKysrIGIvYWRtaW4vQ1BQLURFRklO RVMKQEAgLTE4NiwxMiArMTg2LDYgQEAgSEFWRV9JTUFHRU1BR0lDSwogSEFWRV9JTkVUX1NP Q0tFVFMKIEhBVkVfSU5UVFlQRVNfSAogSEFWRV9KUEVHCi1IQVZFX0tFUkJFUk9TSVZfS1JC X0gKLUhBVkVfS0VSQkVST1NfS1JCX0gKLUhBVkVfS1JCNV9FUlJPUl9FX1RFWFQKLUhBVkVf S1JCNV9FUlJPUl9URVhUCi1IQVZFX0tSQjVfSAotSEFWRV9LUkJfSAogSEFWRV9MQU5HSU5G T19DT0RFU0VUCiBIQVZFX0xJQkRHQwogSEFWRV9MSUJLU1RBVApAQCAtMzY0LDcgKzM1OCw2 IEBAIElTX0FOWV9TRVAKIElTX0RJUkVDVE9SWV9TRVAKIE1BSUxfVVNFX0ZMT0NLCiBNQUlM X1VTRV9MT0NLRgotTUFJTF9VU0VfUE9QCiBNQUlMX1VTRV9TWVNURU1fTE9DSwogTUFYUEFU SExFTgogTkxJU1RfU1RSVUNUCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1 cmUuYWMKaW5kZXggNGQ5YmE5Ni4uZjdkNDRkZiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFj CisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjQwLDQ0ICsyNDAsMTEgQEAgQUNfREVGVU4KICAg IG00X2JwYXRzdWJzdChbd2l0aF8kMV0sIFtbXjAtOWEtel1dLCBbX10pPSR3aXRoX2ZlYXR1 cmVzXSlkbmwKIF0pZG5sCiAKLU9QVElPTl9ERUZBVUxUX09OKFtwb3BdLFtkb24ndCBzdXBw b3J0IFBPUCBtYWlsIHJldHJpZXZhbCB3aXRoIG1vdmVtYWlsXSkKLWlmIHRlc3QgIiR3aXRo X3BvcCIgPSB5ZXM7IHRoZW4KLSAgIEFDX0RFRklORShNQUlMX1VTRV9QT1ApCi1maQotQUhf VEVNUExBVEUoTUFJTF9VU0VfUE9QLCBbRGVmaW5lIHRvIHN1cHBvcnQgUE9QIG1haWwgcmV0 cmlldmFsLl0pZG5sCi0KLU9QVElPTl9ERUZBVUxUX09GRihba2VyYmVyb3NdLFtzdXBwb3J0 IEtlcmJlcm9zLWF1dGhlbnRpY2F0ZWQgUE9QXSkKLWlmIHRlc3QgIiR3aXRoX2tlcmJlcm9z IiAhPSBubzsgdGhlbgotICAgQUNfREVGSU5FKEtFUkJFUk9TKQotZmkKLUFIX1RFTVBMQVRF KEtFUkJFUk9TLAotCSAgICBbRGVmaW5lIHRvIHN1cHBvcnQgS2VyYmVyb3MtYXV0aGVudGlj YXRlZCBQT1AgbWFpbCByZXRyaWV2YWwuXSlkbmwKLQotT1BUSU9OX0RFRkFVTFRfT0ZGKFtr ZXJiZXJvczVdLFtzdXBwb3J0IEtlcmJlcm9zIHZlcnNpb24gNSBhdXRoZW50aWNhdGVkIFBP UF0pCi1pZiB0ZXN0ICIke3dpdGhfa2VyYmVyb3M1fSIgIT0gbm87IHRoZW4KLSAgaWYgdGVz dCAiJHt3aXRoX2tlcmJlcm9zfSIgPSBubzsgdGhlbgotICAgIHdpdGhfa2VyYmVyb3M9eWVz Ci0gICAgQUNfREVGSU5FKEtFUkJFUk9TKQotICBmaQotICBBQ19ERUZJTkUoS0VSQkVST1M1 LCAxLCBbRGVmaW5lIHRvIHVzZSBLZXJiZXJvcyA1IGluc3RlYWQgb2YgS2VyYmVyb3MgNC5d KQotZmkKLQotT1BUSU9OX0RFRkFVTFRfT0ZGKFtoZXNpb2RdLFtzdXBwb3J0IEhlc2lvZCB0 byBnZXQgdGhlIFBPUCBzZXJ2ZXIgaG9zdF0pCi1kbmwgRklYTUUgaGVzaW9kIHN1cHBvcnQg bWF5IG5vdCBiZSBwcmVzZW50LCBzbyBpdCBzZWVtcyBsaWtlIGFuIGVycm9yCi1kbmwgdG8g ZGVmaW5lLCBvciBhdCBsZWFzdCB1c2UsIHRoaXMgdW5jb25kaXRpb25hbGx5LgotaWYgdGVz dCAiJHdpdGhfaGVzaW9kIiAhPSBubzsgdGhlbgotICBBQ19ERUZJTkUoSEVTSU9ELCAxLCBb RGVmaW5lIHRvIHN1cHBvcnQgdXNpbmcgYSBIZXNpb2QgZGF0YWJhc2UgdG8gZmluZCB0aGUg UE9QIHNlcnZlci5dKQotZmkKLQogT1BUSU9OX0RFRkFVTFRfT0ZGKFttYWlsLXVubGlua10s W3VubGluaywgcmF0aGVyIHRoYW4gZW1wdHksIG1haWwgc3Bvb2wgYWZ0ZXIgcmVhZGluZ10p CiBpZiB0ZXN0ICIkd2l0aF9tYWlsX3VubGluayIgIT0gbm87IHRoZW4KICAgIEFDX0RFRklO RShNQUlMX1VOTElOS19TUE9PTCwgMSwgW0RlZmluZSB0byB1bmxpbmssIHJhdGhlciB0aGFu IGVtcHR5LCBtYWlsIHNwb29sIGFmdGVyIHJlYWRpbmcuXSkKIGZpCiAKLUFDX0FSR19XSVRI KFttYWlsaG9zdF0sW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbWFpbGhvc3Q9SE9TVE5BTUVd LAotICAgIFtzdHJpbmcgZ2l2aW5nIGRlZmF1bHQgUE9QIG1haWwgaG9zdF0pXSwKLSAgICBB Q19ERUZJTkVfVU5RVU9URUQoTUFJTEhPU1QsIFsiJHdpdGh2YWwiXSwgW1N0cmluZyBnaXZp bmcgZmFsbGJhY2sgUE9QIG1haWwgaG9zdC5dKSkKLQogQUNfQVJHX1dJVEgoW3NvdW5kXSxb QVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zb3VuZD1WQUxVRV0sCiAgIFtjb21waWxlIHdpdGgg c291bmQgc3VwcG9ydCAoVkFMVUUgb25lIG9mOiB5ZXMsIGFsc2EsIG9zcywgYnNkLW9zc2F1 ZGlvLCBubzsKIGRlZmF1bHQgeWVzKS4gIE9ubHkgZm9yIEdOVS9MaW51eCwgRnJlZUJTRCwg TmV0QlNELCBNaW5HVywgQ3lnd2luLl0pXSwKQEAgLTQwNjQsMTA3ICs0MDMxLDYgQEAgQUNf REVGVU4KICAgICAgW2VtYWNzX2N2X2FsdGVybmF0ZV9zdGFjaz15ZXNdLAogICAgICBbZW1h Y3NfY3ZfYWx0ZXJuYXRlX3N0YWNrPW5vXSldKQogCi0jIERvIHdlIG5lZWQgdGhlIEhlc2lv ZCBsaWJyYXJ5IHRvIHByb3ZpZGUgdGhlIHN1cHBvcnQgcm91dGluZXM/Ci1kbmwgRklYTUU/ ICBTaG91bGQgd2UgYmUgc2tpcHBpbmcgdGhpcyBvbiBEYXJ3aW4gdG9vPwotTElCSEVTSU9E PQotTElCUkVTT0xWPQotaWYgdGVzdCAiJHdpdGhfaGVzaW9kIiAhPSBubyA7IHRoZW4KLSAg IyBEb24ndCBzZXQgJExJQlMgaGVyZSAtLSBzZWUgY29tbWVudHMgYWJvdmUuICBGSVhNRSB3 aGljaCBjb21tZW50cz8KLSAgcmVzb2x2PW5vCi0gIEFDX0NIRUNLX0ZVTkMocmVzX3NlbmQs ICwgW0FDX0NIRUNLX0ZVTkMoX19yZXNfc2VuZCwgLAotICAgICBbQUNfQ0hFQ0tfTElCKHJl c29sdiwgcmVzX3NlbmQsIHJlc29sdj15ZXMsCi0JCSAgW0FDX0NIRUNLX0xJQihyZXNvbHYs IF9fcmVzX3NlbmQsIHJlc29sdj15ZXMpXSldKV0pCi0gIGlmIHRlc3QgIiRyZXNvbHYiID0g eWVzIDsgdGhlbgotICAgIFJFU09MVkxJQj0tbHJlc29sdgotICBlbHNlCi0gICAgUkVTT0xW TElCPQotICBmaQotICBoZXNpb2Q9bm8KLSAgQUNfQ0hFQ0tfRlVOQyhoZXNfZ2V0bWFpbGhv c3QsICwgW0FDX0NIRUNLX0xJQihoZXNpb2QsIGhlc19nZXRtYWlsaG9zdCwKLQloZXNpb2Q9 eWVzLCA6LCAkUkVTT0xWTElCKV0pCi0KLSAgaWYgdGVzdCB4IiRoZXNpb2QiID0geHllczsg dGhlbgotICAgIExJQkhFU0lPRD0tbGhlc2lvZAotICAgIExJQlJFU09MVj0kUkVTT0xWTElC Ci0gIGZpCi1maQotQUNfU1VCU1QoTElCSEVTSU9EKQotQUNfU1VCU1QoTElCUkVTT0xWKQot Ci0jIFRoZXNlIHRlbGwgdXMgd2hpY2ggS2VyYmVyb3MtcmVsYXRlZCBsaWJyYXJpZXMgdG8g dXNlLgotQ09NX0VSUkxJQj0KLUNSWVBUT0xJQj0KLUtSQjVMSUI9Ci1ERVNMSUI9Ci1LUkI0 TElCPQotCi1pZiB0ZXN0ICIke3dpdGhfa2VyYmVyb3N9IiAhPSBubzsgdGhlbgotICBPTERf TElCUz0kTElCUwotICBBQ19DSEVDS19MSUIoY29tX2VyciwgY29tX2VyciwgaGF2ZV9jb21f ZXJyPXllcywgaGF2ZV9jb21fZXJyPW5vKQotICBpZiB0ZXN0ICRoYXZlX2NvbV9lcnIgPSB5 ZXM7IHRoZW4KLSAgICBDT01fRVJSTElCPS1sY29tX2VycgotICAgIExJQlM9IiRDT01fRVJS TElCICRMSUJTIgotICBmaQotICBBQ19DSEVDS19MSUIoY3J5cHRvLCBtaXRfZGVzX2NiY19l bmNyeXB0LCBoYXZlX2NyeXB0bz15ZXMsIGhhdmVfY3J5cHRvPW5vKQotICBpZiB0ZXN0ICRo YXZlX2NyeXB0byA9IHllczsgdGhlbgotICAgIENSWVBUT0xJQj0tbGNyeXB0bwotICAgIExJ QlM9IiRDUllQVE9MSUIgJExJQlMiCi0gIGZpCi0gIEFDX0NIRUNLX0xJQihrNWNyeXB0bywg bWl0X2Rlc19jYmNfZW5jcnlwdCwgaGF2ZV9rNWNyeXB0bz15ZXMsIGhhdmVfazVjcnlwdG89 bm8pCi0gIGlmIHRlc3QgJGhhdmVfazVjcnlwdG8gPSB5ZXM7IHRoZW4KLSAgICBDUllQVE9M SUI9LWxrNWNyeXB0bwotICAgIExJQlM9IiRDUllQVE9MSUIgJExJQlMiCi0gIGZpCi0gIEFD X0NIRUNLX0xJQihrcmI1LCBrcmI1X2luaXRfY29udGV4dCwgaGF2ZV9rcmI1PXllcywgaGF2 ZV9rcmI1PW5vKQotICBpZiB0ZXN0ICRoYXZlX2tyYjU9eWVzOyB0aGVuCi0gICAgS1JCNUxJ Qj0tbGtyYjUKLSAgICBMSUJTPSIkS1JCNUxJQiAkTElCUyIKLSAgZmkKLSAgZG5sIEZJWE1F IFNpbXBsaWZ5LiAgRG9lcyBub3QgbWF0Y2ggMjIgbG9naWMsIHRoYW5rcyB0byBkZWZhdWx0 X29mZj8KLSAgaWYgdGVzdCAiJHt3aXRoX2tlcmJlcm9zNX0iID0gbm87IHRoZW4KLSAgICBB Q19DSEVDS19MSUIoZGVzNDI1LCBkZXNfY2JjX2VuY3J5cHQsIGhhdmVfZGVzNDI1PXllcywg aGF2ZV9kZXM0MjU9bm8gKQotICAgIGlmIHRlc3QgJGhhdmVfZGVzNDI1ID0geWVzOyB0aGVu Ci0gICAgICBERVNMSUI9LWxkZXM0MjUKLSAgICAgIExJQlM9IiRERVNMSUIgJExJQlMiCi0g ICAgZWxzZQotICAgICAgQUNfQ0hFQ0tfTElCKGRlcywgZGVzX2NiY19lbmNyeXB0LCBoYXZl X2Rlcz15ZXMsIGhhdmVfZGVzPW5vKQotICAgICAgaWYgdGVzdCAkaGF2ZV9kZXMgPSB5ZXM7 IHRoZW4KLSAgICAgICAgREVTTElCPS1sZGVzCi0gICAgICAgIExJQlM9IiRERVNMSUIgJExJ QlMiCi0gICAgICBmaQotICAgIGZpCi0gICAgQUNfQ0hFQ0tfTElCKGtyYjQsIGtyYl9nZXRf Y3JlZCwgaGF2ZV9rcmI0PXllcywgaGF2ZV9rcmI0PW5vKQotICAgIGlmIHRlc3QgJGhhdmVf a3JiNCA9IHllczsgdGhlbgotICAgICAgS1JCNExJQj0tbGtyYjQKLSAgICAgIExJQlM9IiRL UkI0TElCICRMSUJTIgotICAgIGVsc2UKLSAgICAgIEFDX0NIRUNLX0xJQihrcmIsIGtyYl9n ZXRfY3JlZCwgaGF2ZV9rcmI9eWVzLCBoYXZlX2tyYj1ubykKLSAgICAgIGlmIHRlc3QgJGhh dmVfa3JiID0geWVzOyB0aGVuCi0gICAgICAgIEtSQjRMSUI9LWxrcmIKLSAgICAgICAgTElC Uz0iJEtSQjRMSUIgJExJQlMiCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVz dCAiJHt3aXRoX2tlcmJlcm9zNX0iICE9IG5vOyB0aGVuCi0gICAgQUNfQ0hFQ0tfSEVBREVS UyhrcmI1LmgsCi0gICAgICBbQUNfQ0hFQ0tfTUVNQkVSUyhba3JiNV9lcnJvci50ZXh0LCBr cmI1X2Vycm9yLmVfdGV4dF0sLCwKLQkJICAgICAgICBbI2luY2x1ZGUgPGtyYjUuaD5dKV0p Ci0gIGVsc2UKLSAgICBBQ19DSEVDS19IRUFERVJTKGtyYi5oLCwKLQkJICAgICBbQUNfQ0hF Q0tfSEVBREVSUyhrZXJiZXJvc0lWL2tyYi5oLCwKLQkJCQkgICAgICAgW0FDX0NIRUNLX0hF QURFUlMoa2VyYmVyb3Mva3JiLmgpXSldKQotICBmaQotICBBQ19DSEVDS19IRUFERVJTKGNv bV9lcnIuaCkKLSAgTElCUz0kT0xEX0xJQlMKLWZpCi0KLUFDX1NVQlNUKENPTV9FUlJMSUIp Ci1BQ19TVUJTVChDUllQVE9MSUIpCi1BQ19TVUJTVChLUkI1TElCKQotQUNfU1VCU1QoREVT TElCKQotQUNfU1VCU1QoS1JCNExJQikKLQogQUNfQ0hFQ0tfSEVBREVSUyh2YWxncmluZC92 YWxncmluZC5oKQogCiBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdW5pcGFpci51bmljb2Rl XSwgW10sIFtdLCBbWyNpbmNsdWRlIDxsaW51eC9rZC5oPl1dKQpkaWZmIC0tZ2l0IGEvZG9j L2VtYWNzL3JtYWlsLnRleGkgYi9kb2MvZW1hY3Mvcm1haWwudGV4aQppbmRleCBkNDYzOTgy Li5hODEwZWFjIDEwMDY0NAotLS0gYS9kb2MvZW1hY3Mvcm1haWwudGV4aQorKysgYi9kb2Mv ZW1hY3Mvcm1haWwudGV4aQpAQCAtMTM4Nyw4ICsxMzg3LDcgQEAgTW92ZW1haWwKIE1haWx1 dGlscyB2ZXJzaW9uIG9mZmVycyBhZGRpdGlvbmFsIGZlYXR1cmVzLgogCiAgIFRoZSBFbWFj cyB2ZXJzaW9uIG9mIEBjb2Rle21vdmVtYWlsfSBpcyBhYmxlIHRvIHJldHJpZXZlIG1haWwg ZnJvbQotdGhlIHVzdWFsIFVuaXggbWFpbGJveCBmb3JtYXRzIGFuZCBmcm9tIHJlbW90ZSBt YWlsYm94ZXMgdXNpbmcgdGhlCi1QT1AzIHByb3RvY29sLgordGhlIHVzdWFsIFVuaXggbWFp bGJveCBmb3JtYXRzLgogCiAgIFRoZSBNYWlsdXRpbHMgdmVyc2lvbiBpcyBhYmxlIHRvIGhh bmRsZSBhIHdpZGUgc2V0IG9mIG1haWxib3gKIGZvcm1hdHMsIHN1Y2ggYXMgcGxhaW4gVW5p eCBtYWlsYm94ZXMsIEBjb2Rle21haWxkaXJ9IGFuZCBAY29kZXtNSH0KQEAgLTE0ODMsMTkg KzE0ODIsMTQgQEAgUmVtb3RlIE1haWxib3hlcwogQHBpbmRleCBtb3ZlbWFpbAogCiAgIFNv bWUgc2l0ZXMgdXNlIGEgbWV0aG9kIGNhbGxlZCBQT1AgZm9yIGFjY2Vzc2luZyB1c2Vycycg aW5ib3ggZGF0YQotaW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBkYXRhIGluIGluYm94IGZpbGVz LiAgQnkgZGVmYXVsdCwgdGhlIEBjb2Rle0VtYWNzCi1tb3ZlbWFpbH0gY2FuIHdvcmsgd2l0 aCBQT1AgKHVubGVzcyB0aGUgRW1hY3MgQGNvZGV7Y29uZmlndXJlfSBzY3JpcHQKLXdhcyBy dW4gd2l0aCB0aGUgb3B0aW9uIEBzYW1wey0td2l0aG91dC1wb3B9KS4KLQotU2ltaWxhcmx5 LCB0aGUgTWFpbHV0aWxzIEBjb2Rle21vdmVtYWlsfSBieSBkZWZhdWx0IHN1cHBvcnRzIFBP UCwgdW5sZXNzCi1pdCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBAc2FtcHstLWRpc2FibGUt cG9wfSBvcHRpb24uCi0KLUJvdGggdmVyc2lvbnMgb2YgQGNvZGV7bW92ZW1haWx9IG9ubHkg d29yayB3aXRoIFBPUDMsIG5vdCB3aXRoIG9sZGVyCi12ZXJzaW9ucyBvZiBQT1AuCitpbnN0 ZWFkIG9mIHN0b3JpbmcgdGhlIGRhdGEgaW4gaW5ib3ggZmlsZXMuICBUaGUgTWFpbHV0aWxz CitAY29kZXttb3ZlbWFpbH0gYnkgZGVmYXVsdCBzdXBwb3J0cyBQT1AsIHVubGVzcyBpdCB3 YXMgY29uZmlndXJlZCB3aXRoCit0aGUgQHNhbXB7LS1kaXNhYmxlLXBvcH0gb3B0aW9uLiAg SXQgd29ya3Mgb25seSB3aXRoIFBPUDMsIG5vdCB3aXRoCitvbGRlciB2ZXJzaW9ucyBvZiBQ T1AuCiAKIEBjaW5kZXggQGVudntNQUlMSE9TVH0gZW52aXJvbm1lbnQgdmFyaWFibGUKIEBj aW5kZXggUE9QIG1haWxib3hlcwotICBObyBtYXR0ZXIgd2hpY2ggZmxhdm9yIG9mIEBjb2Rl e21vdmVtYWlsfSB5b3UgdXNlLCB5b3UgY2FuIHNwZWNpZnkKKyAgWW91IGNhbiBzcGVjaWZ5 CiBhIFBPUCBpbmJveCBieSB1c2luZyBhIFBPUCBAZGZue1VSTH0gKEBweHJlZntNb3ZlbWFp bH0pLiAgQSBQT1AKIEBhY3Jvbnlte1VSTH0gaXMgb2YgdGhlIGZvcm0KIEBzYW1we3BvcDov L0B2YXJ7dXNlcm5hbWV9QEBAdmFye2hvc3RuYW1lfX0sIHdoZXJlCkBAIC0xNTE0LDggKzE1 MDgsNiBAQCBSZW1vdGUgTWFpbGJveGVzCiBAdmFyezpob3N0bmFtZX0gcGFydCwgdGhlIEBl bnZ7TUFJTEhPU1R9IGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcwogdGhlIG1hY2hp bmUgb24gd2hpY2ggdG8gbG9vayBmb3IgdGhlIFBPUCBzZXJ2ZXIuCiAKLUBjIEZJWE1FIG1l bnRpb24gLS13aXRoLWhlc2lvZCAic3VwcG9ydCBIZXNpb2QgdG8gZ2V0IHRoZSBQT1Agc2Vy dmVyIGhvc3QiPwotCiBAY2luZGV4IElNQVAgbWFpbGJveGVzCiAgIEFub3RoZXIgbWV0aG9k IGZvciBhY2Nlc3NpbmcgcmVtb3RlIG1haWxib3hlcyBpcyBJTUFQQC4gIFRoaXMgbWV0aG9k IGlzCiBzdXBwb3J0ZWQgb25seSBieSB0aGUgTWFpbHV0aWxzIEBjb2Rle21vdmVtYWlsfS4g IFRvIHNwZWNpZnkgYW4gSU1BUApAQCAtMTU1MCw5ICsxNTQyLDcgQEAgUmVtb3RlIE1haWxi b3hlcwogCiBAY2luZGV4IEtlcmJlcm9zIFBPUCBhdXRoZW50aWNhdGlvbgogICBUaGUgQGNv ZGV7bW92ZW1haWx9IHByb2dyYW0gaW5zdGFsbGVkIGF0IHlvdXIgc2l0ZSBtYXkgc3VwcG9y dAotS2VyYmVyb3MgYXV0aGVudGljYXRpb24gKHRoZSBFbWFjcyBAY29kZXttb3ZlbWFpbH0g ZG9lcyBzbyBpZiBFbWFjcyB3YXMKLWNvbmZpZ3VyZWQgd2l0aCB0aGUgb3B0aW9uIEBjb2Rl ey0td2l0aC1rZXJiZXJvc30gb3IKLUBjb2Rley0td2l0aC1rZXJiZXJvczV9KS4gIElmIGl0 IGlzIHN1cHBvcnRlZCwgaXQgaXMgdXNlZCBieSBkZWZhdWx0CitLZXJiZXJvcyBhdXRoZW50 aWNhdGlvbi4gIElmIGl0IGlzIHN1cHBvcnRlZCwgaXQgaXMgdXNlZCBieSBkZWZhdWx0CiB3 aGVuZXZlciB5b3UgYXR0ZW1wdCB0byByZXRyaWV2ZSBQT1AgbWFpbCB3aGVuCiBAY29kZXty bWFpbC1yZW1vdGUtcGFzc3dvcmR9IGFuZCBAY29kZXtybWFpbC1yZW1vdGUtcGFzc3dvcmQt cmVxdWlyZWR9CiBhcmUgdW5zZXQuCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdT CmluZGV4IGUxYjYyNDkuLjUwZWZhYzkgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0 Yy9ORVdTCkBAIC0zNyw2ICszNywxMiBAQCBVc2UgJ2NvbmZpZ3VyZSAtLXdpdGgtZ251dGxz PW5vJyB0byBidWlsZCBldmVuIHdoZW4gR251VExTIGlzIG1pc3NpbmcuCiAqKiBHbnVUTFMg dmVyc2lvbiAyLjEyLjIgb3IgbGF0ZXIgaXMgbm93IHJlcXVpcmVkLCBpbnN0ZWFkIG9mIG1l cmVseQogdmVyc2lvbiAyLjYuNiBvciBsYXRlci4KIAorKiogVGhlIEVtYWNzLXN1cHBsaWVk ICdtb3ZlbWFpbCcgcHJvZ3JhbSBubyBsb25nZXIgc3VwcG9ydHMgdGhlCit1bmVuY3J5cHRl ZCBQT1AzIHByb3RvY29sLCBhcyBpdCB0b28gb2Z0ZW4gaXMgYSBzZWN1cml0eSByaXNrLiAg VG8KK3JlYWQgbWFpbCB2aWEgUE9QMywgcGxlYXNlIHVzZSBHTlUgTWFpbHV0aWxzICdtb3Zl bWFpbCcgaW5zdGVhZDsgaXQKK3N1cHBvcnRzIFBPUDMgdmlhIFRyYW5zcG9ydCBMYXllciBT ZWN1cml0eSAoVExTKSwgd2hpY2ggaXMgZ2VuZXJhbGx5CityZWNvbW1lbmRlZCBvdmVyIHVu ZW5jcnlwdGVkIFBPUDMuCisKICoqIFRoZSBuZXcgb3B0aW9uICdjb25maWd1cmUgLS1lbmFi bGUtZ2NjLXdhcm5pbmdzPXdhcm4tb25seScgY2F1c2VzCiBHQ0MgdG8gaXNzdWUgd2Fybmlu Z3Mgd2l0aG91dCBzdG9wcGluZyB0aGUgYnVpbGQuICBUaGlzIGJlaGF2aW9yIGlzCiBub3cg dGhlIGRlZmF1bHQgaW4gZGV2ZWxvcGVyIGJ1aWxkcy4gIEFzIGJlZm9yZSwgdXNlCmRpZmYg LS1naXQgYS9ldGMvUFJPQkxFTVMgYi9ldGMvUFJPQkxFTVMKaW5kZXggYjg5MjMyMC4uZDM3 YjM2NCAxMDA2NDQKLS0tIGEvZXRjL1BST0JMRU1TCisrKyBiL2V0Yy9QUk9CTEVNUwpAQCAt MzIxLDE1ICszMjEsNiBAQCBvciBzZXQgdGhlIHZhcmlhYmxlICdjYW5ub3Qtc3VzcGVuZCcg dG8gYSBub24tbmlsIHZhbHVlLgogCiAqKiBNYWlsZXJzIGFuZCBvdGhlciBoZWxwZXIgcHJv Z3JhbXMKIAotKioqIG1vdmVtYWlsIGNvbXBpbGVkIHdpdGggUE9QIHN1cHBvcnQgY2FuJ3Qg Y29ubmVjdCB0byB0aGUgUE9QIHNlcnZlci4KLQotTWFrZSBzdXJlIHRoYXQgdGhlICdwb3An IGVudHJ5IGluIC9ldGMvc2VydmljZXMsIG9yIGluIHRoZSBzZXJ2aWNlcwotTklTIG1hcCBp ZiB5b3VyIG1hY2hpbmUgdXNlcyBOSVMsIGhhcyB0aGUgc2FtZSBwb3J0IG51bWJlciBhcyB0 aGUKLWVudHJ5IG9uIHRoZSBQT1Agc2VydmVyLiAgQSBjb21tb24gZXJyb3IgaXMgZm9yIHRo ZSBQT1Agc2VydmVyIHRvIGJlCi1saXN0ZW5pbmcgb24gcG9ydCAxMTAsIHRoZSBhc3NpZ25l ZCBwb3J0IGZvciB0aGUgUE9QMyBwcm90b2NvbCwgd2hpbGUKLXRoZSBjbGllbnQgaXMgdHJ5 aW5nIHRvIGNvbm5lY3Qgb24gcG9ydCAxMDksIHRoZSBhc3NpZ25lZCBwb3J0IGZvciB0aGUK LW9sZCBQT1AgcHJvdG9jb2wuCi0KICoqKiBSTUFJTCBnZXRzIGVycm9yIGdldHRpbmcgbmV3 IG1haWwuCiAKIFJNQUlMIGdldHMgbmV3IG1haWwgZnJvbSAvdXNyL3Nwb29sL21haWwvJFVT RVIgdXNpbmcgYSBwcm9ncmFtCmRpZmYgLS1naXQgYS9saWItc3JjL01ha2VmaWxlLmluIGIv bGliLXNyYy9NYWtlZmlsZS5pbgppbmRleCBkMGFhOWNjLi5kNzhlMjBlIDEwMDY0NAotLS0g YS9saWItc3JjL01ha2VmaWxlLmluCisrKyBiL2xpYi1zcmMvTWFrZWZpbGUuaW4KQEAgLTE4 MiwyMCArMTgyLDYgQEAgTU9WRV9GTEFHUz0KICMjIEVtcHR5IGlmIGVpdGhlciBNQUlMX1VT RV9GTE9DSyBvciBNQUlMX1VTRV9MT0NLRiwgZWxzZSBuZWVkLWJsZXNzbWFpbC4KIEJMRVNT TUFJTF9UQVJHRVQ9QEJMRVNTTUFJTF9UQVJHRVRACiAKLSMjIC1sa3JiIG9yIC1sa3JiNCBp ZiBuZWVkZWQKLUtSQjRMSUI9QEtSQjRMSUJACi0jIyAtbGRlcyBvciAtbGRlczQyNSBpZiBu ZWVkZWQKLURFU0xJQj1AREVTTElCQAotIyMgLWxrcmI1IGlmIG5lZWRlZAotS1JCNUxJQj1A S1JCNUxJQkAKLSMjIC1sazVjcnlwdG8gb3IgLWxjcnlwdG8gaWYgbmVlZGVkCi1DUllQVE9M SUI9QENSWVBUT0xJQkAKLSMjIC1sY29tX2VyciBpZiBuZWVkZWQKLUNPTV9FUlJMSUI9QENP TV9FUlJMSUJACi0jIyAtbGhlc2lvZCBpZiBuZWVkZWQKLUxJQkhFU0lPRD1ATElCSEVTSU9E QAotIyMgLWxyZXNvbHYgaWYgSEFWRV9MSUJSRVNPTFYKLUxJQlJFU09MVj1ATElCUkVTT0xW QAogIyMgLWxsb2NrZmlsZSBpZiBIQVZFX0xJQkxPQ0tGSUxFIG9yIC1sbWFpbCBpZiBIQVZF X0xJQk1BSUwKIExJQlNfTUFJTD1ATElCU19NQUlMQAogIyMgZW1wdHkgb3IgLWxydCBvciAt bHBvc2l4NCBpZiBIQVZFX0NMT0NLX0dFVFRJTUUKQEAgLTIwNiw4ICsxOTIsNyBAQCBMSUJf RkRBVEFTWU5DID0KIExJQl9XU09DSzMyPUBMSUJfV1NPQ0szMkAKIAogIyMgRXh0cmEgbGli cmFyaWVzIHRvIHVzZSB3aGVuIGxpbmtpbmcgbW92ZW1haWwuCi1MSUJTX01PVkUgPSAkKExJ QlNfTUFJTCkgJChLUkI0TElCKSAkKERFU0xJQikgJChLUkI1TElCKSAkKENSWVBUT0xJQikg XAotICAgICAgICAgICAgJChDT01fRVJSTElCKSAkKExJQkhFU0lPRCkgJChMSUJSRVNPTFYp ICQoTElCX1dTT0NLMzIpCitMSUJTX01PVkUgPSAkKExJQlNfTUFJTCkKIAogIyMgRXh0cmEg bGlicmFyaWVzIHdoZW4gbGlua2luZyBlbWFjc2NsaWVudAogIyMgKGVtcHR5IG9yIC1sY29t Y3RsMzIgZm9yIE1pbkdXKQpAQCAtMzgxLDEzICszNjYsMTAgQEAgcHJvZmlsZSR7RVhFRVhU fToKIG1ha2UtZG9jZmlsZSR7RVhFRVhUfTogJHtzcmNkaXJ9L21ha2UtZG9jZmlsZS5jICQo TlRMSUIpICQoY29uZmlnX2gpCiAJJChBTV9WX0NDTEQpJChDQykgJHtBTExfQ0ZMQUdTfSAk PCAkKE5UTElCKSAkKExPQURMSUJFUykgLW8gJEAKIAotbW92ZW1haWwke0VYRUVYVH06ICR7 c3JjZGlyfS9tb3ZlbWFpbC5jIHBvcC5vICQoTlRMSUIpICQoY29uZmlnX2gpCi0JJChBTV9W X0NDTEQpJChDQykgJHtBTExfQ0ZMQUdTfSAke01PVkVfRkxBR1N9ICQ8IHBvcC5vIFwKK21v dmVtYWlsJHtFWEVFWFR9OiAke3NyY2Rpcn0vbW92ZW1haWwuYyAkKE5UTElCKSAkKGNvbmZp Z19oKQorCSQoQU1fVl9DQ0xEKSQoQ0MpICR7QUxMX0NGTEFHU30gJHtNT1ZFX0ZMQUdTfSAk PCBcCiAJICAkKE5UTElCKSAkKExPQURMSUJFUykgJChMSUJTX01PVkUpIC1vICRACiAKLXBv cC5vOiAke3NyY2Rpcn0vcG9wLmMgJHtzcmNkaXJ9L3BvcC5oICR7c3JjZGlyfS8uLi9saWIv bWluLW1heC5oICQoY29uZmlnX2gpCi0JJChBTV9WX0NDKSQoQ0MpIC1jICR7Q1BQX0NGTEFH U30gJHtNT1ZFX0ZMQUdTfSAkPAotCiBlbWFjc2NsaWVudCR7RVhFRVhUfTogJHtzcmNkaXJ9 L2VtYWNzY2xpZW50LmMgJChOVExJQikgJChjb25maWdfaCkKIAkkKEFNX1ZfQ0NMRCkkKEND KSAke0FMTF9DRkxBR1N9ICQ8IFwKIAkgICAtRFZFUlNJT049IlwiJHt2ZXJzaW9ufVwiIiAk KE5UTElCKSAkKExPQURMSUJFUykgJChMSUJfRkRBVEFTWU5DKSBcCmRpZmYgLS1naXQgYS9s aWItc3JjL21vdmVtYWlsLmMgYi9saWItc3JjL21vdmVtYWlsLmMKaW5kZXggY2QxMmM0OC4u NWRlM2NmMyAxMDA2NDQKLS0tIGEvbGliLXNyYy9tb3ZlbWFpbC5jCisrKyBiL2xpYi1zcmMv bW92ZW1haWwuYwpAQCAtMzIsMjkgKzMyLDYgQEAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogICAgdGhh dCBwZXJtaXQgZXZlcnlvbmUgdG8gd3JpdGUgbG9ja2ZpbGVzIGluIGl0LCBvciB5b3UgbXVz dCBtYWtlIG1vdmVtYWlsCiAgICBhIHNldHVpZCBvciBzZXRnaWQgcHJvZ3JhbS4gICovCiAK LS8qCi0gKiBNb2RpZmllZCBKYW51YXJ5LCAxOTg2IGJ5IE1pY2hhZWwgUi4gR3JldHppbmdl ciAoUHJvamVjdCBBdGhlbmEpCi0gKgotICogQWRkZWQgUE9QIChQb3N0IE9mZmljZSBQcm90 b2NvbCkgc2VydmljZS4gIFdoZW4gY29tcGlsZWQgLURNQUlMX1VTRV9QT1AKLSAqIG1vdmVt YWlsIHdpbGwgYWNjZXB0IGlucHV0IGZpbGVuYW1lIGFyZ3VtZW50cyBvZiB0aGUgZm9ybQot ICogInBvOnVzZXJuYW1lIi4gIFRoaXMgd2lsbCBjYXVzZSBtb3ZlbWFpbCB0byBvcGVuIGEg Y29ubmVjdGlvbiB0bwotICogYSBwb3Agc2VydmVyIHJ1bm5pbmcgb24gJE1BSUxIT1NUIChl bnZpcm9ubWVudCB2YXJpYWJsZSkuICBNb3ZlbWFpbAotICogbXVzdCBiZSBzZXR1aWQgdG8g cm9vdCBpbiBvcmRlciB0byB3b3JrIHdpdGggUE9QLgotICoKLSAqIE5ldyBtb2R1bGU6IHBv cG1haWwuYwotICogTW9kaWZpZWQgcm91dGluZXM6Ci0gKgltYWluIC0gYWRkZWQgY29kZSB3 aXRoaW4gI2lmZGVmIE1BSUxfVVNFX1BPUDsgYWRkZWQgc2V0dWlkIChnZXR1aWQgKCkpCi0g KgkJYWZ0ZXIgUE9QIGNvZGUuCi0gKiBOZXcgcm91dGluZXMgaW4gbW92ZW1haWwuYzoKLSAq CWdldF9lcnJtc2cgLSByZXR1cm4gcG9pbnRlciB0byBzeXN0ZW0gZXJyb3IgbWVzc2FnZQot ICoKLSAqIE1vZGlmaWVkIEF1Z3VzdCwgMTk5MyBieSBKb25hdGhhbiBLYW1lbnMgKE9wZW5W aXNpb24gVGVjaG5vbG9naWVzKQotICoKLSAqIE1vdmUgYWxsIG9mIHRoZSBQT1AgY29kZSBp bnRvIGEgc2VwYXJhdGUgZmlsZSwgInBvcC5jIi4KLSAqIFVzZSBzdHJlcnJvciBpbnN0ZWFk IG9mIGdldF9lcnJtc2cuCi0gKgotICovCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtNzAsOSArNDcs NiBAQCBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8 c3RyaW5nLmg+CiAjaW5jbHVkZSAic3lzd2FpdC5oIgotI2lmZGVmIE1BSUxfVVNFX1BPUAot I2luY2x1ZGUgInBvcC5oIgotI2VuZGlmCiAKICNpZmRlZiBNU0RPUwogI3VuZGVmIGFjY2Vz cwpAQCAtMTMxLDEzICsxMDUsNiBAQCBzdGF0aWMgX05vcmV0dXJuIHZvaWQgZmF0YWwgKGNv bnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY29uc3QgY2hhciAqczMpOwogc3RhdGlj IHZvaWQgZXJyb3IgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY29uc3QgY2hh ciAqczMpOwogc3RhdGljIF9Ob3JldHVybiB2b2lkIHBmYXRhbF93aXRoX25hbWUgKGNoYXIg Km5hbWUpOwogc3RhdGljIF9Ob3JldHVybiB2b2lkIHBmYXRhbF9hbmRfZGVsZXRlIChjaGFy ICpuYW1lKTsKLSNpZmRlZiBNQUlMX1VTRV9QT1AKLXN0YXRpYyBpbnQgcG9wbWFpbCAoY2hh ciAqLCBjaGFyICosIGJvb2wsIGNoYXIgKiwgYm9vbCk7Ci1zdGF0aWMgYm9vbCBwb3BfcmV0 ciAocG9wc2VydmVyLCBpbnQsIEZJTEUgKik7Ci1zdGF0aWMgYm9vbCBtYnhfd3JpdGUgKGNo YXIgKiwgaW50LCBGSUxFICopOwotc3RhdGljIGJvb2wgbWJ4X2RlbGltaXRfYmVnaW4gKEZJ TEUgKik7Ci1zdGF0aWMgYm9vbCBtYnhfZGVsaW1pdF9lbmQgKEZJTEUgKik7Ci0jZW5kaWYK IAogI2lmIChkZWZpbmVkIE1BSUxfVVNFX01BSUxMT0NLCQkJCQkJXAogICAgICB8fCAoIWRl ZmluZWQgRElTQUJMRV9ESVJFQ1RfQUNDRVNTICYmICFkZWZpbmVkIE1BSUxfVVNFX1NZU1RF TV9MT0NLKSkKQEAgLTE3NCwyNiArMTQxLDE0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoq YXJndikKICAgaW50IGRlc2M7CiAjZW5kaWYgLyogbm90IE1BSUxfVVNFX1NZU1RFTV9MT0NL ICovCiAKLSNpZmRlZiBNQUlMX1VTRV9QT1AKLSAgYm9vbCBwb3BfcmV2ZXJzZV9vcmRlciA9 IGZhbHNlOwotIyBkZWZpbmUgQVJHU1RSICJwciIKLSNlbHNlIC8qICEgTUFJTF9VU0VfUE9Q ICovCi0jIGRlZmluZSBBUkdTVFIgInAiCi0jZW5kaWYgLyogTUFJTF9VU0VfUE9QICovCi0K ICAgdWlkX3QgcmVhbF9naWQgPSBnZXRnaWQgKCk7CiAgIHVpZF90IHByaXZfZ2lkID0gZ2V0 ZWdpZCAoKTsKIAogICBkZWxldGVfbG9ja25hbWUgPSAwOwogCi0gIHdoaWxlICgwIDw9IChj ID0gZ2V0b3B0IChhcmdjLCBhcmd2LCBBUkdTVFIpKSkKKyAgd2hpbGUgKDAgPD0gKGMgPSBn ZXRvcHQgKGFyZ2MsIGFyZ3YsICJwIikpKQogICAgIHsKICAgICAgIHN3aXRjaCAoYykgewot I2lmZGVmIE1BSUxfVVNFX1BPUAotICAgICAgY2FzZSAncic6Ci0JcG9wX3JldmVyc2Vfb3Jk ZXIgPSB0cnVlOwotCWJyZWFrOwotI2VuZGlmCiAgICAgICBjYXNlICdwJzoKIAlwcmVzZXJ2 ZV9tYWlsID0gdHJ1ZTsKIAlicmVhazsKQEAgLTIwMiwyMCArMTU3LDkgQEAgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgICAgfQogICAgIH0KIAotICBpZiAoCi0jaWZkZWYg TUFJTF9VU0VfUE9QCi0gICAgICAoYXJnYyAtIG9wdGluZCA8IDIpIHx8IChhcmdjIC0gb3B0 aW5kID4gMykKLSNlbHNlCi0gICAgICAoYXJnYyAtIG9wdGluZCAhPSAyKQotI2VuZGlmCi0g ICAgICApCisgIGlmIChhcmdjIC0gb3B0aW5kICE9IDIpCiAgICAgewotI2lmZGVmIE1BSUxf VVNFX1BPUAotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6IG1vdmVtYWlsIFstcF0g Wy1yXSBpbmJveCBkZXN0ZmlsZSVzXG4iLAotCSAgICAgICAiIFtQT1AtcGFzc3dvcmRdIik7 Ci0jZWxzZQogICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVXNhZ2U6IG1vdmVtYWlsIFstcF0g aW5ib3ggZGVzdGZpbGUlc1xuIiwgIiIpOwotI2VuZGlmCiAgICAgICByZXR1cm4gRVhJVF9G QUlMVVJFOwogICAgIH0KIApAQCAtMjI1LDIyICsxNjksNiBAQCBtYWluIChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAgIGlmICgqb3V0bmFtZSA9PSAwKQogICAgIGZhdGFsICgiRGVzdGlu YXRpb24gZmlsZSBuYW1lIGlzIGVtcHR5IiwgMCwgMCk7CiAKLSNpZmRlZiBNQUlMX1VTRV9Q T1AKLSAgaWYgKCFzdHJuY21wIChpbm5hbWUsICJwbzoiLCAzKSkKLSAgICB7Ci0gICAgICBp bnQgc3RhdHVzOwotCi0gICAgICBzdGF0dXMgPSBwb3BtYWlsIChpbm5hbWUgKyAzLCBvdXRu YW1lLCBwcmVzZXJ2ZV9tYWlsLAotCQkJKGFyZ2MgLSBvcHRpbmQgPT0gMykgPyBhcmd2W29w dGluZCsyXSA6IE5VTEwsCi0JCQlwb3BfcmV2ZXJzZV9vcmRlcik7Ci0gICAgICByZXR1cm4g c3RhdHVzOwotICAgIH0KLQotICBpZiAoc2V0dWlkIChnZXR1aWQgKCkpIDwgMCkKLSAgICBm YXRhbCAoIkZhaWxlZCB0byBkcm9wIHByaXZpbGVnZXMiLCAwLCAwKTsKLQotI2VuZGlmIC8q IE1BSUxfVVNFX1BPUCAqLwotCiAjaWZuZGVmIERJU0FCTEVfRElSRUNUX0FDQ0VTUwogCiAg IGNoYXIgKmxvY2tuYW1lID0gMDsKQEAgLTU4MiwyOTAgKzUxMCwzIEBAIHBmYXRhbF9hbmRf ZGVsZXRlIChjaGFyICpuYW1lKQogICB1bmxpbmsgKG5hbWUpOwogICBmYXRhbCAoIiVzIGZv ciAlcyIsIHMsIG5hbWUpOwogfQotDAotLyogVGhpcyBpcyB0aGUgZ3V0cyBvZiB0aGUgaW50 ZXJmYWNlIHRvIHRoZSBQb3N0IE9mZmljZSBQcm90b2NvbC4gICovCi0KLSNpZmRlZiBNQUlM X1VTRV9QT1AKLQotI2lmbmRlZiBXSU5ET1dTTlQKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+ Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jZWxzZQot I3VuZGVmIF9XSU5TT0NLQVBJXwotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotI2lu Y2x1ZGUgPHB3ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKgotICogVGhlIGZ1bGwg dmFsaWQgc3ludGF4IGZvciBhIFBPUCBtYWlsYm94IHNwZWNpZmljYXRpb24gZm9yIG1vdmVt YWlsCi0gKiBpcyAicG86dXNlcm5hbWU6aG9zdG5hbWUiLiAgVGhlICI6aG9zdG5hbWUiIGlz IG9wdGlvbmFsOyBpZiBpdCBpcwotICogb21pdHRlZCwgdGhlIE1BSUxIT1NUIGVudmlyb25t ZW50IHZhcmlhYmxlIHdpbGwgYmUgY29uc3VsdGVkLiAgTm90ZQotICogdGhhdCBieSB0aGUg dGltZSBwb3BtYWlsKCkgaXMgY2FsbGVkIHRoZSAicG86IiBoYXMgYmVlbiBzdHJpcHBlZAot ICogb2ZmIG9mIHRoZSBmcm9udCBvZiB0aGUgbWFpbGJveCBuYW1lLgotICoKLSAqIElmIHRo ZSBtYWlsYm94IGlzIGluIHRoZSBmb3JtICJwbzp1c2VybmFtZTpob3N0bmFtZSIsIHRoZW4g aXQgaXMKLSAqIG1vZGlmaWVkIGJ5IHRoaXMgZnVuY3Rpb24gLS0gdGhlIHNlY29uZCBjb2xv biBpcyByZXBsYWNlZCBieSBhCi0gKiBudWxsLgotICoKLSAqIFJldHVybiBhIHZhbHVlIHN1 aXRhYmxlIGZvciBwYXNzaW5nIHRvIGBleGl0Jy4KLSAqLwotCi1zdGF0aWMgaW50Ci1wb3Bt YWlsIChjaGFyICptYWlsYm94LCBjaGFyICpvdXRmaWxlLCBib29sIHByZXNlcnZlLCBjaGFy ICpwYXNzd29yZCwKLQkgYm9vbCByZXZlcnNlX29yZGVyKQotewotICBpbnQgbm1zZ3MsIG5i eXRlczsKLSAgaW50IGk7Ci0gIGludCBtYmZpOwotICBGSUxFICptYmY7Ci0gIHBvcHNlcnZl ciBzZXJ2ZXI7Ci0gIGludCBzdGFydCwgZW5kLCBpbmNyZW1lbnQ7Ci0gIGNoYXIgKnVzZXIs ICpob3N0bmFtZTsKLQotICB1c2VyID0gbWFpbGJveDsKLSAgaWYgKChob3N0bmFtZSA9IHN0 cmNociAobWFpbGJveCwgJzonKSkpCi0gICAgKmhvc3RuYW1lKysgPSAnXDAnOwotCi0gIHNl cnZlciA9IHBvcF9vcGVuIChob3N0bmFtZSwgdXNlciwgcGFzc3dvcmQsIFBPUF9OT19HRVRQ QVNTKTsKLSAgaWYgKCEgc2VydmVyKQotICAgIHsKLSAgICAgIGVycm9yICgiRXJyb3IgY29u bmVjdGluZyB0byBQT1Agc2VydmVyOiAlcyIsIHBvcF9lcnJvciwgMCk7Ci0gICAgICByZXR1 cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICBpZiAocG9wX3N0YXQgKHNlcnZlciwgJm5t c2dzLCAmbmJ5dGVzKSkKLSAgICB7Ci0gICAgICBlcnJvciAoIkVycm9yIGdldHRpbmcgbWVz c2FnZSBjb3VudCBmcm9tIFBPUCBzZXJ2ZXI6ICVzIiwgcG9wX2Vycm9yLCAwKTsKLSAgICAg IHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gIGlmICghbm1zZ3MpCi0gICAgewot ICAgICAgcG9wX2Nsb3NlIChzZXJ2ZXIpOwotICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsK LSAgICB9Ci0KLSAgbWJmaSA9IG9wZW4gKG91dGZpbGUsIE9fV1JPTkxZIHwgT19CSU5BUlkg fCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLSAgaWYgKG1iZmkgPCAwKQotICAgIHsKLSAg ICAgIHBvcF9jbG9zZSAoc2VydmVyKTsKLSAgICAgIGVycm9yICgiRXJyb3IgaW4gb3Blbjog JXMsICVzIiwgc3RyZXJyb3IgKGVycm5vKSwgb3V0ZmlsZSk7Ci0gICAgICByZXR1cm4gRVhJ VF9GQUlMVVJFOwotICAgIH0KLQotICBpZiAoZmNob3duIChtYmZpLCBnZXR1aWQgKCksIC0x KSAhPSAwKQotICAgIHsKLSAgICAgIGludCBmY2hvd25fZXJybm8gPSBlcnJubzsKLSAgICAg IHN0cnVjdCBzdGF0IHN0OwotICAgICAgaWYgKGZzdGF0IChtYmZpLCAmc3QpICE9IDAgfHwg c3Quc3RfdWlkICE9IGdldHVpZCAoKSkKLQl7Ci0JICBwb3BfY2xvc2UgKHNlcnZlcik7Ci0J ICBlcnJvciAoIkVycm9yIGluIGZjaG93bjogJXMsICVzIiwgc3RyZXJyb3IgKGZjaG93bl9l cnJubyksIG91dGZpbGUpOwotCSAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQl9Ci0gICAgfQot Ci0gIG1iZiA9IGZkb3BlbiAobWJmaSwgIndiIik7Ci0gIGlmICghbWJmKQotICAgIHsKLSAg ICAgIHBvcF9jbG9zZSAoc2VydmVyKTsKLSAgICAgIGVycm9yICgiRXJyb3IgaW4gZmRvcGVu OiAlcyIsIHN0cmVycm9yIChlcnJubyksIDApOwotICAgICAgY2xvc2UgKG1iZmkpOwotICAg ICAgdW5saW5rIChvdXRmaWxlKTsKLSAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAg fQotCi0gIGlmIChyZXZlcnNlX29yZGVyKQotICAgIHsKLSAgICAgIHN0YXJ0ID0gbm1zZ3M7 Ci0gICAgICBlbmQgPSAxOwotICAgICAgaW5jcmVtZW50ID0gLTE7Ci0gICAgfQotICBlbHNl Ci0gICAgewotICAgICAgc3RhcnQgPSAxOwotICAgICAgZW5kID0gbm1zZ3M7Ci0gICAgICBp bmNyZW1lbnQgPSAxOwotICAgIH0KLQotICBmb3IgKGkgPSBzdGFydDsgaSAqIGluY3JlbWVu dCA8PSBlbmQgKiBpbmNyZW1lbnQ7IGkgKz0gaW5jcmVtZW50KQotICAgIGlmICghIChtYnhf ZGVsaW1pdF9iZWdpbiAobWJmKQotCSAgICYmIHBvcF9yZXRyIChzZXJ2ZXIsIGksIG1iZikK LQkgICAmJiBtYnhfZGVsaW1pdF9lbmQgKG1iZikKLQkgICAmJiBmZmx1c2ggKG1iZikgPT0g MCkpCi0gICAgICB7Ci0JaWYgKGVycm5vKQotCSAgZXJyb3IgKCJFcnJvciBpbiBQT1AgcmV0 cmlldmluZzogJXMiLCBzdHJlcnJvciAoZXJybm8pLCAwKTsKLQlwb3BfY2xvc2UgKHNlcnZl cik7Ci0JZmNsb3NlIChtYmYpOwotCXJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICB9Ci0K LSAgaWYgKGZzeW5jIChtYmZpKSAhPSAwICYmIGVycm5vICE9IEVJTlZBTCkKLSAgICB7Ci0g ICAgICBlcnJvciAoIkVycm9yIGluIGZzeW5jOiAlcyIsIHN0cmVycm9yIChlcnJubyksIDAp OwotICAgICAgZmNsb3NlIChtYmYpOwotICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAg ICB9Ci0KLSAgaWYgKGZjbG9zZSAobWJmKSAhPSAwKQotICAgIHsKLSAgICAgIGVycm9yICgi RXJyb3IgaW4gZmNsb3NlOiAlcyIsIHN0cmVycm9yIChlcnJubyksIDApOwotICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgaWYgKCEgcHJlc2VydmUpCi0gICAgZm9y IChpID0gMTsgaSA8PSBubXNnczsgaSsrKQotICAgICAgewotCWlmIChwb3BfZGVsZXRlIChz ZXJ2ZXIsIGkpKQotCSAgewotCSAgICBlcnJvciAoIkVycm9yIGZyb20gUE9QIHNlcnZlcjog JXMiLCBwb3BfZXJyb3IsIDApOwotCSAgICBwb3BfY2xvc2UgKHNlcnZlcik7Ci0JICAgIHJl dHVybiBFWElUX0ZBSUxVUkU7Ci0JICB9Ci0gICAgICB9Ci0KLSAgaWYgKHBvcF9xdWl0IChz ZXJ2ZXIpKQotICAgIHsKLSAgICAgIGVycm9yICgiRXJyb3IgZnJvbSBQT1Agc2VydmVyOiAl cyIsIHBvcF9lcnJvciwgMCk7Ci0gICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0K LQotICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbAotcG9wX3JldHIg KHBvcHNlcnZlciBzZXJ2ZXIsIGludCBtc2dubywgRklMRSAqYXJnKQotewotICBjaGFyICps aW5lOwotICBpbnQgcmV0OwotCi0gIGlmIChwb3BfcmV0cmlldmVfZmlyc3QgKHNlcnZlciwg bXNnbm8sICZsaW5lKSkKLSAgICB7Ci0gICAgICBlcnJvciAoIkVycm9yIGZyb20gUE9QIHNl cnZlcjogJXMiLCBwb3BfZXJyb3IsIDApOwotICAgICAgZXJybm8gPSAwOwotICAgICAgcmV0 dXJuIGZhbHNlOwotICAgIH0KLQotICB3aGlsZSAoKHJldCA9IHBvcF9yZXRyaWV2ZV9uZXh0 IChzZXJ2ZXIsICZsaW5lKSkgPj0gMCkKLSAgICB7Ci0gICAgICBpZiAoISBsaW5lKQotCWJy ZWFrOwotCi0gICAgICBpZiAoISBtYnhfd3JpdGUgKGxpbmUsIHJldCwgYXJnKSkKLQl7Ci0J ICBpbnQgd3JpdGVfZXJybm8gPSBlcnJubzsKLQkgIHBvcF9jbG9zZSAoc2VydmVyKTsKLQkg IGVycm5vID0gd3JpdGVfZXJybm87Ci0JICByZXR1cm4gZmFsc2U7Ci0JfQotICAgIH0KLQot ICBpZiAocmV0KQotICAgIHsKLSAgICAgIGVycm9yICgiRXJyb3IgZnJvbSBQT1Agc2VydmVy OiAlcyIsIHBvcF9lcnJvciwgMCk7Ci0gICAgICBlcnJubyA9IDA7Ci0gICAgICByZXR1cm4g ZmFsc2U7Ci0gICAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotbWJ4 X3dyaXRlIChjaGFyICpsaW5lLCBpbnQgbGVuLCBGSUxFICptYmYpCi17Ci0jaWZkZWYgTU9W RU1BSUxfUVVPVEVfUE9QX0ZST01fTElORVMKLSAgLyogRG8gdGhpcyBhcyBhIG1hY3JvIGlu c3RlYWQgb2YgdXNpbmcgc3RyY21wIHRvIHNhdmUgb24gZXhlY3V0aW9uIHRpbWUuICovCi0g ICMgZGVmaW5lIElTX0ZST01fTElORShhKSAoKGFbMF0gPT0gJ0YnKQlcCi0JCQkgICAgJiYg KGFbMV0gPT0gJ3InKQlcCi0JCQkgICAgJiYgKGFbMl0gPT0gJ28nKQlcCi0JCQkgICAgJiYg KGFbM10gPT0gJ20nKQlcCi0JCQkgICAgJiYgKGFbNF0gPT0gJyAnKSkKLSAgaWYgKElTX0ZS T01fTElORSAobGluZSkpCi0gICAgewotICAgICAgaWYgKGZwdXRjICgnPicsIG1iZikgPCAw KQotCXJldHVybiBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLSAgaWYgKGxpbmVbMF0gPT0gJ1ww MzcnKQotICAgIHsKLSAgICAgIGlmIChmcHV0cyAoIl5fIiwgbWJmKSA8IDApCi0JcmV0dXJu IGZhbHNlOwotICAgICAgbGluZSsrOwotICAgICAgbGVuLS07Ci0gICAgfQotICByZXR1cm4g ZndyaXRlIChsaW5lLCAxLCBsZW4sIG1iZikgPT0gbGVuICYmIDAgPD0gZnB1dGMgKCdcbics IG1iZik7Ci19Ci0KLSNpZmRlZiBXSU5ET1dTTlQKLS8qIFdvcmsgYXJvdW5kIE1TLVdpbmRv d3MgbGFjayBvZiBzdXBwb3J0IGZvciAlZSBvciAlVCB3aXRoIGEKLSAgIHNwZWNpYWwtcHVy cG9zZSBzdHJmdGltZSB0aGF0IGFzc3VtZXMgdGhlIGV4YWN0IGZvcm1hdCB0aGF0Ci0gICBt b3ZlbWFpbCB1c2VzLiAgKi8KLXN0YXRpYyBzaXplX3QKLW1vdmVtYWlsX3N0cmZ0aW1lIChj aGFyICpzLCBzaXplX3Qgc2l6ZSwgY2hhciBjb25zdCAqZm9ybWF0LAotCQkgICBzdHJ1Y3Qg dG0gY29uc3QgKnRtKQotewotICBjaGFyIGZtdFtzaXplICsgNl0sICpxOwotICBjb25zdCBj aGFyICpwOwotCi0gIGZvciAocCA9IGZvcm1hdCwgcSA9ICZmbXRbMF07ICpwOyApCi0gICAg ewotICAgICAgaWYgKCpwID09ICclJyAmJiBwWzFdID09ICdlJykKLQl7Ci0JICBtZW1jcHkg KHEsICIlZCIsIDIpOwotCSAgcSArPSAyOwotCSAgcCArPSAyOwotCX0KLSAgICAgIGVsc2Ug aWYgKCpwID09ICclJyAmJiBwWzFdID09ICdUJykKLQl7Ci0JICBtZW1jcHkgKHEsICIlSDol TTolUyIsIDgpOwotCSAgcSArPSA4OwotCSAgcCArPSAyOwotCX0KLSAgICAgIGVsc2UgaWYg KCpwID09ICclJyAmJiBwWzFdID09ICclJykKLQl7Ci0JICBtZW1jcHkgKHEsIHAsIDIpOwot CSAgcSArPSAyOwotCSAgcCArPSAyOwotCX0KLSAgICAgIGVsc2UKLQkqcSsrID0gKnArKzsK LSAgICB9Ci0KLSAgc2l6ZV90IG4gPSBzdHJmdGltZSAocywgc2l6ZSwgZm10LCB0bSk7Ci0g IGNoYXIgKm1kYXkgPSBzICsgc2l6ZW9mICJGcm9tIG1vdmVtYWlsIFN1biBKYW4gIiAtIDE7 Ci0gIGlmICgqbWRheSA9PSAnMCcpCi0gICAgKm1kYXkgPSAnICc7Ci0gIHJldHVybiBuOwot fQotIyB1bmRlZiBzdHJmdGltZQotIyBkZWZpbmUgc3RyZnRpbWUgbW92ZW1haWxfc3RyZnRp bWUKLSNlbmRpZgotCi1zdGF0aWMgYm9vbAotbWJ4X2RlbGltaXRfYmVnaW4gKEZJTEUgKm1i ZikKLXsKLSAgdGltZV90IG5vdyA9IHRpbWUgKE5VTEwpOwotICBzdHJ1Y3QgdG0gKmx0aW1l ID0gbG9jYWx0aW1lICgmbm93KTsKLSAgaWYgKCFsdGltZSkKLSAgICByZXR1cm4gZmFsc2U7 Ci0KLSAgY2hhciBmcm9tbGluZVsxMDBdOwotICBpZiAoISBzdHJmdGltZSAoZnJvbWxpbmUs IHNpemVvZiBmcm9tbGluZSwKLQkJICAiRnJvbSBtb3ZlbWFpbCAlYSAlYiAlZSAlVCAlWVxu IiwgbHRpbWUpKQotICAgIHsKLSAgICAgIGVycm5vID0gRU9WRVJGTE9XOwotICAgICAgcmV0 dXJuIGZhbHNlOwotICAgIH0KLSAgcmV0dXJuIDAgPD0gZnB1dHMgKGZyb21saW5lLCBtYmYp OwotfQotCi1zdGF0aWMgYm9vbAotbWJ4X2RlbGltaXRfZW5kIChGSUxFICptYmYpCi17Ci0g IHJldHVybiAwIDw9IHB1dGMgKCdcbicsIG1iZik7Ci19Ci0KLSNlbmRpZiAvKiBNQUlMX1VT RV9QT1AgKi8KZGlmZiAtLWdpdCBhL2xpYi1zcmMvcG9wLmMgYi9saWItc3JjL3BvcC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTg1YmQyLi4wMDAwMDAwCi0tLSBhL2xp Yi1zcmMvcG9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjk5ICswLDAgQEAKLS8qIHBvcC5j OiBjbGllbnQgcm91dGluZXMgZm9yIHRhbGtpbmcgdG8gYSBQT1AzLXByb3RvY29sIHBvc3Qt b2ZmaWNlIHNlcnZlcgotCi1Db3B5cmlnaHQgKEMpIDE5OTEsIDE5OTMsIDE5OTYtMTk5Nywg MTk5OSwgMjAwMS0yMDE3IEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24sIEluYy4KLQotQXV0 aG9yOiBKb25hdGhhbiBLYW1lbnMgPGppa0BzZWN1cml0eS5vdi5jb20+Ci0KLVRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQKLXlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot R05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggR05VIEVtYWNz LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQot Ci0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpZmRlZiBNQUlMX1VTRV9QT1AKLQotI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIFdJTkRPV1NOVAotI2luY2x1ZGUgIm50bGliLmgi Ci0jdW5kZWYgX1dJTjMyX1dJTk5UCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDEJLyog Zm9yIGdldGFkZHJpbmZvIHN0dWZmICovCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNs dWRlIDx3czJ0Y3BpcC5oPgotI3VuZGVmIGdldGFkZHJpbmZvCi0jZGVmaW5lIGdldGFkZHJp bmZvICBzeXNfZ2V0YWRkcmluZm8KLSN1bmRlZiBmcmVlYWRkcmluZm8KLSNkZWZpbmUgZnJl ZWFkZHJpbmZvIHN5c19mcmVlYWRkcmluZm8KLWludCBzeXNfZ2V0YWRkcmluZm8gKGNvbnN0 IGNoYXIgKiBub2RlLCBjb25zdCBjaGFyICogc2VydmljZSwKLQkJICAgICBjb25zdCBzdHJ1 Y3QgYWRkcmluZm8gKiBoaW50cywgc3RydWN0IGFkZHJpbmZvICoqIHJlcyk7Ci12b2lkIHN5 c19mcmVlYWRkcmluZm8gKHN0cnVjdCBhZGRyaW5mbyAqIGFpKTsKLSN1bmRlZiBTT0NLRVRf RVJST1IKLSNkZWZpbmUgUkVDVihzLGJ1ZixsZW4sZmxhZ3MpIHJlY3YgKHMsYnVmLGxlbixm bGFncykKLSNkZWZpbmUgU0VORChzLGJ1ZixsZW4sZmxhZ3MpIHNlbmQgKHMsYnVmLGxlbixm bGFncykKLSNkZWZpbmUgQ0xPU0VTT0NLRVQocykgY2xvc2Vzb2NrZXQgKHMpCi0jZWxzZQot I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZGVm aW5lIFJFQ1YocyxidWYsbGVuLGZsYWdzKSByZWFkIChzLGJ1ZixsZW4pCi0jZGVmaW5lIFNF TkQocyxidWYsbGVuLGZsYWdzKSB3cml0ZSAocyxidWYsbGVuKQotI2RlZmluZSBDTE9TRVNP Q0tFVChzKSBjbG9zZSAocykKLSNlbmRpZgotI2luY2x1ZGUgPHBvcC5oPgotCi0jaWZkZWYg SEVTSU9ECi0jaW5jbHVkZSA8aGVzaW9kLmg+Ci0vKgotICogSXQgcmVhbGx5IHNob3VsZG4n dCBiZSBuZWNlc3NhcnkgdG8gcHV0IHRoaXMgZGVjbGFyYXRpb24gaGVyZSwgYnV0Ci0gKiB0 aGUgdmVyc2lvbiBvZiBoZXNpb2QuaCB0aGF0IEF0aGVuYSBoYXMgaW5zdGFsbGVkIGluIHJl bGVhc2UgNy4yCi0gKiBkb2Vzbid0IGRlY2xhcmUgdGhpcyBmdW5jdGlvbjsgSSBkb24ndCBr bm93IGlmIHRoZSA3LjMgdmVyc2lvbiBvZgotICogaGVzaW9kLmggZG9lcy4KLSAqLwotZXh0 ZXJuIHN0cnVjdCBzZXJ2ZW50ICpoZXNfZ2V0c2VydmJ5bmFtZSAoLyogY2hhciAqLCBjaGFy ICogKi8pOwotI2VuZGlmCi0KLSNpbmNsdWRlIDxhbGxvY2EuaD4KLSNpbmNsdWRlIDxwd2Qu aD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8 c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp bmNsdWRlIDx1bmlzdGQuaD4KLQotI2lmZGVmIEtFUkJFUk9TCi0jIGlmZGVmIEhBVkVfS1JC NV9ICi0jICBpbmNsdWRlIDxrcmI1Lmg+Ci0jIGVuZGlmCi0jIGlmZGVmIEhBVkVfS1JCX0gK LSMgIGluY2x1ZGUgPGtyYi5oPgotIyBlbHNlCi0jICBpZmRlZiBIQVZFX0tFUkJFUk9TSVZf S1JCX0gKLSMgICBpbmNsdWRlIDxrZXJiZXJvc0lWL2tyYi5oPgotIyAgZWxzZQotIyAgIGlm ZGVmIEhBVkVfS0VSQkVST1NfS1JCX0gKLSMgICAgaW5jbHVkZSA8a2VyYmVyb3Mva3JiLmg+ Ci0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmZGVmIEhBVkVfQ09NX0VSUl9I Ci0jICBpbmNsdWRlIDxjb21fZXJyLmg+Ci0jIGVuZGlmCi0jZW5kaWYgLyogS0VSQkVST1Mg Ki8KLQotI2luY2x1ZGUgPGMtY3R5cGUuaD4KLSNpbmNsdWRlIDxtaW4tbWF4Lmg+Ci0KLSNp ZmRlZiBLRVJCRVJPUwotI2lmbmRlZiBLRVJCRVJPUzUKLWV4dGVybiBpbnQga3JiX3NlbmRh dXRoICgvKiBsb25nLCBpbnQsIEtURVhULCBjaGFyICosIGNoYXIgKiwgY2hhciAqLAotCQkJ ICAgIHVfbG9uZywgTVNHX0RBVCAqLCBDUkVERU5USUFMUyAqLCBLZXlfc2NoZWR1bGUsCi0J CQkgICAgc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbiAqLAotCQkJ ICAgIGNoYXIgKiAqLyk7Ci1leHRlcm4gY2hhciAqa3JiX3JlYWxtb2Zob3N0ICgvKiBjaGFy ICogKi8pOwotI2VuZGlmIC8qICEgS0VSQkVST1M1ICovCi0jZW5kaWYgLyogS0VSQkVST1Mg Ki8KLQotc3RhdGljIGludCBzb2NrZXRfY29ubmVjdGlvbiAoY2hhciAqLCBpbnQpOwotc3Rh dGljIGludCBwb3BfZ2V0bGluZSAocG9wc2VydmVyLCBjaGFyICoqKTsKLXN0YXRpYyBpbnQg c2VuZGxpbmUgKHBvcHNlcnZlciwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyBpbnQgZnVsbHdy aXRlIChpbnQsIGNoYXIgKiwgaW50KTsKLXN0YXRpYyBpbnQgZ2V0b2sgKHBvcHNlcnZlcik7 Ci0jaWYgMAotc3RhdGljIGludCBnZXR0ZXJtaW5hdGlvbiAocG9wc2VydmVyKTsKLSNlbmRp Zgotc3RhdGljIHZvaWQgcG9wX3RyYXNoIChwb3BzZXJ2ZXIpOwotc3RhdGljIGNoYXIgKmZp bmRfY3JsZiAoY2hhciAqLCBpbnQpOwotCi0jZGVmaW5lIEVSUk9SX01BWCAxNjAJCS8qIGEg cHJldHR5IGFyYml0cmFyeSBzaXplLCBidXQgbmVlZHMKLQkJCQkgICB0byBiZSBiaWdnZXIg dGhhbiB0aGUgb3JpZ2luYWwKLQkJCQkgICB2YWx1ZSBvZiA4MCAqLwotI2RlZmluZSBQT1Bf UE9SVCAxMTAKLSNkZWZpbmUgUE9QX1NFUlZJQ0UgInBvcDMiCS8qIHdlIGRvbid0IHdhbnQg dGhlIFBPUDIgcG9ydCEgKi8KLSNpZmRlZiBLRVJCRVJPUwotI2RlZmluZSBLUE9QX1BPUlQg MTEwOQotI2RlZmluZSBLUE9QX1NFUlZJQ0UgImtwb3AiCS8qIG5ldmVyIHVzZWQ6IGxvb2sg Zm9yIDIwMDYwNTE1IHRvIHNlZSB3aHkgKi8KLSNlbmRpZgotCi1jaGFyIHBvcF9lcnJvcltF UlJPUl9NQVhdOwotYm9vbCBwb3BfZGVidWcgPSBmYWxzZTsKLQotLyoKLSAqIEZ1bmN0aW9u OiBwb3Bfb3BlbiAoY2hhciAqaG9zdCwgY2hhciAqdXNlcm5hbWUsIGNoYXIgKnBhc3N3b3Jk LAotICogCQkgICAgICAgaW50IGZsYWdzKQotICoKLSAqIFB1cnBvc2U6IEVzdGFibGlzaGVz IGEgY29ubmVjdGlvbiB3aXRoIGEgcG9zdC1vZmZpY2Ugc2VydmVyLCBhbmQKLSAqIAljb21w bGV0ZXMgdGhlIGF1dGhvcml6YXRpb24gcG9ydGlvbiBvZiB0aGUgc2Vzc2lvbi4KLSAqCi0g KiBBcmd1bWVudHM6Ci0gKiAJaG9zdAlUaGUgc2VydmVyIGhvc3Qgd2l0aCB3aGljaCB0aGUg Y29ubmVjdGlvbiBzaG91bGQgYmUKLSAqIAkJZXN0YWJsaXNoZWQuICBPcHRpb25hbC4gIElm IG9taXR0ZWQsIGludGVybmFsCi0gKiAJCWhldXJpc3RpY3Mgd2lsbCBiZSB1c2VkIHRvIGRl dGVybWluZSB0aGUgc2VydmVyIGhvc3QsCi0gKiAJCWlmIHBvc3NpYmxlLgotICogCXVzZXJu YW1lCi0gKiAJCVRoZSB1c2VybmFtZSBvZiB0aGUgbWFpbC1kcm9wIHRvIGFjY2Vzcy4gIE9w dGlvbmFsLgotICogCQlJZiBvbWl0dGVkLCBpbnRlcm5hbCBoZXVyaXN0aWNzIHdpbGwgYmUg dXNlZCB0bwotICogCQlkZXRlcm1pbmUgdGhlIHVzZXJuYW1lLCBpZiBwb3NzaWJsZS4KLSAq IAlwYXNzd29yZAotICogCQlUaGUgcGFzc3dvcmQgdG8gdXNlIGZvciBhdXRob3JpemF0aW9u LiAgSWYgb21pdHRlZCwKLSAqIAkJaW50ZXJuYWwgaGV1cmlzdGljcyB3aWxsIGJlIHVzZWQg dG8gZGV0ZXJtaW5lIHRoZQotICogCQlwYXNzd29yZCwgaWYgcG9zc2libGUuCi0gKiAJZmxh Z3MJQSBiaXQgbWFzayBjb250YWluaW5nIGZsYWdzIGNvbnRyb2xsaW5nIGNlcnRhaW4KLSAq IAkJZnVuY3Rpb25zIG9mIHRoZSByb3V0aW5lLiAgVmFsaWQgZmxhZ3MgYXJlIGRlZmluZWQg aW4KLSAqIAkJdGhlIGZpbGUgcG9wLmgKLSAqCi0gKiBSZXR1cm4gdmFsdWU6IFVwb24gc3Vj Y2Vzc2Z1bCBlc3RhYmxpc2htZW50IG9mIGEgY29ubmVjdGlvbiwgYQotICogCW5vbi1udWxs IHBvcHNlcnZlciB3aWxsIGJlIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBudWxsIHdpbGwgYmUK LSAqIAlyZXR1cm5lZCwgYW5kIHRoZSBzdHJpbmcgdmFyaWFibGUgcG9wX2Vycm9yIHdpbGwg Y29udGFpbiBhbgotICogCWV4cGxhbmF0aW9uIG9mIHRoZSBlcnJvci4KLSAqLwotcG9wc2Vy dmVyCi1wb3Bfb3BlbiAoY2hhciAqaG9zdCwgY2hhciAqdXNlcm5hbWUsIGNoYXIgKnBhc3N3 b3JkLCBpbnQgZmxhZ3MpCi17Ci0gIGludCBzb2NrOwotICBwb3BzZXJ2ZXIgc2VydmVyOwot Ci0gIC8qIERldGVybWluZSB0aGUgdXNlciBuYW1lICovCi0gIGlmICghIHVzZXJuYW1lKQot ICAgIHsKLSAgICAgIHVzZXJuYW1lID0gZ2V0ZW52ICgiVVNFUiIpOwotICAgICAgaWYgKCEg KHVzZXJuYW1lICYmICp1c2VybmFtZSkpCi0JewotCSAgdXNlcm5hbWUgPSBnZXRsb2dpbiAo KTsKLQkgIGlmICghICh1c2VybmFtZSAmJiAqdXNlcm5hbWUpKQotCSAgICB7Ci0JICAgICAg c3RydWN0IHBhc3N3ZCAqcGFzc3dkOwotCSAgICAgIHBhc3N3ZCA9IGdldHB3dWlkIChnZXR1 aWQgKCkpOwotCSAgICAgIGlmIChwYXNzd2QgJiYgcGFzc3dkLT5wd19uYW1lICYmICpwYXNz d2QtPnB3X25hbWUpCi0JCXsKLQkJICB1c2VybmFtZSA9IHBhc3N3ZC0+cHdfbmFtZTsKLQkJ fQotCSAgICAgIGVsc2UKLQkJewotCQkgIHN0cmNweSAocG9wX2Vycm9yLCAiQ291bGQgbm90 IGRldGVybWluZSB1c2VybmFtZSIpOwotCQkgIHJldHVybiAoMCk7Ci0JCX0KLQkgICAgfQot CX0KLSAgICB9Ci0KLSAgLyoKLSAgICogIERldGVybWluZSB0aGUgbWFpbCBob3N0LgotICAg Ki8KLQotICBpZiAoISBob3N0KQotICAgIHsKLSAgICAgIGhvc3QgPSBnZXRlbnYgKCJNQUlM SE9TVCIpOwotICAgIH0KLQotI2lmZGVmIEhFU0lPRAotICBpZiAoKCEgaG9zdCkgJiYgKCEg KGZsYWdzICYgUE9QX05PX0hFU0lPRCkpKQotICAgIHsKLSAgICAgIHN0cnVjdCBoZXNfcG9z dG9mZmljZSAqb2ZmaWNlOwotICAgICAgb2ZmaWNlID0gaGVzX2dldG1haWxob3N0ICh1c2Vy bmFtZSk7Ci0gICAgICBpZiAob2ZmaWNlICYmIG9mZmljZS0+cG9fdHlwZSAmJiAoISBzdHJj bXAgKG9mZmljZS0+cG9fdHlwZSwgIlBPUCIpKQotCSAgJiYgb2ZmaWNlLT5wb19uYW1lICYm ICpvZmZpY2UtPnBvX25hbWUgJiYgb2ZmaWNlLT5wb19ob3N0Ci0JICAmJiAqb2ZmaWNlLT5w b19ob3N0KQotCXsKLQkgIGhvc3QgPSBvZmZpY2UtPnBvX2hvc3Q7Ci0JICB1c2VybmFtZSA9 IG9mZmljZS0+cG9fbmFtZTsKLQl9Ci0gICAgfQotI2VuZGlmCi0KLSNpZmRlZiBNQUlMSE9T VAotICBpZiAoISBob3N0KQotICAgIHsKLSAgICAgIGhvc3QgPSBNQUlMSE9TVDsKLSAgICB9 Ci0jZW5kaWYKLQotICBpZiAoISBob3N0KQotICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vy cm9yLCAiQ291bGQgbm90IGRldGVybWluZSBQT1Agc2VydmVyIik7Ci0gICAgICByZXR1cm4g KDApOwotICAgIH0KLQotICAvKiBEZXRlcm1pbmUgdGhlIHBhc3N3b3JkICovCi0jaWZkZWYg S0VSQkVST1MKLSNkZWZpbmUgRE9OVF9ORUVEX1BBU1NXT1JEICghIChmbGFncyAmIFBPUF9O T19LRVJCRVJPUykpCi0jZWxzZQotI2RlZmluZSBET05UX05FRURfUEFTU1dPUkQgMAotI2Vu ZGlmCi0KLSAgaWYgKCghIHBhc3N3b3JkKSAmJiAoISBET05UX05FRURfUEFTU1dPUkQpKQot ICAgIHsKLSAgICAgIGlmICghIChmbGFncyAmIFBPUF9OT19HRVRQQVNTKSkKLQl7Ci0JICBw YXNzd29yZCA9IGdldHBhc3MgKCJFbnRlciBQT1AgcGFzc3dvcmQ6Iik7Ci0JfQotICAgICAg aWYgKCEgcGFzc3dvcmQpCi0JewotCSAgc3RyY3B5IChwb3BfZXJyb3IsICJDb3VsZCBub3Qg ZGV0ZXJtaW5lIFBPUCBwYXNzd29yZCIpOwotCSAgcmV0dXJuICgwKTsKLQl9Ci0gICAgfQot ICBpZiAocGFzc3dvcmQpCQkJLyogYWx3YXlzIHRydWUsIGRldGVjdGVkIDIwMDYwNTE1ICov Ci0gICAgZmxhZ3MgfD0gUE9QX05PX0tFUkJFUk9TOwotICBlbHNlCi0gICAgcGFzc3dvcmQg PSB1c2VybmFtZTsJLyogZGVhZCBjb2RlLCBkZXRlY3RlZCAyMDA2MDUxNSAqLwotICAvKiog Imtwb3AiIHNlcnZpY2UgaXMgIG5ldmVyIHVzZWQ6IGxvb2sgZm9yIDIwMDYwNTE1IHRvIHNl ZSB3aHkgKiovCi0KLSAgc29jayA9IHNvY2tldF9jb25uZWN0aW9uIChob3N0LCBmbGFncyk7 Ci0gIGlmIChzb2NrID09IC0xKQotICAgIHJldHVybiAoMCk7Ci0KLSAgc2VydmVyID0gKHBv cHNlcnZlcikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBfcG9wc2VydmVyKSk7Ci0gIGlmICgh IHNlcnZlcikKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBvcF9lcnJvciwgIk91dCBvZiBtZW1v cnkgaW4gcG9wX29wZW4iKTsKLSAgICAgIHJldHVybiAoMCk7Ci0gICAgfQotICBzZXJ2ZXIt PmJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyAoR0VUTElORV9NSU4pOwotICBpZiAoISBzZXJ2 ZXItPmJ1ZmZlcikKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBvcF9lcnJvciwgIk91dCBvZiBt ZW1vcnkgaW4gcG9wX29wZW4iKTsKLSAgICAgIGZyZWUgKChjaGFyICopIHNlcnZlcik7Ci0g ICAgICByZXR1cm4gKDApOwotICAgIH0KLQotICBzZXJ2ZXItPmZpbGUgPSBzb2NrOwotICBz ZXJ2ZXItPmRhdGEgPSAwOwotICBzZXJ2ZXItPmJ1ZmZlcl9pbmRleCA9IDA7Ci0gIHNlcnZl ci0+YnVmZmVyX3NpemUgPSBHRVRMSU5FX01JTjsKLSAgc2VydmVyLT5pbl9tdWx0aSA9IGZh bHNlOwotICBzZXJ2ZXItPnRyYXNoX3N0YXJ0ZWQgPSBmYWxzZTsKLQotICBpZiAoZ2V0b2sg KHNlcnZlcikpCi0gICAgcmV0dXJuICgwKTsKLQotICAvKgotICAgKiBJIHJlYWxseSBzaG91 bGRuJ3QgdXNlIHRoZSBwb3BfZXJyb3IgdmFyaWFibGUgbGlrZSB0aGlzLCBidXQuLi4uCi0g ICAqLwotICBpZiAoc3RybGVuICh1c2VybmFtZSkgPiBFUlJPUl9NQVggLSA2KQotICAgIHsK LSAgICAgIHBvcF9jbG9zZSAoc2VydmVyKTsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLAot CSAgICAgICJVc2VybmFtZSB0b28gbG9uZzsgcmVjb21waWxlIHBvcC5jIHdpdGggbGFyZ2Vy IEVSUk9SX01BWCIpOwotICAgICAgcmV0dXJuICgwKTsKLSAgICB9Ci0gIHNwcmludGYgKHBv cF9lcnJvciwgIlVTRVIgJXMiLCB1c2VybmFtZSk7Ci0KLSAgaWYgKHNlbmRsaW5lIChzZXJ2 ZXIsIHBvcF9lcnJvcikgfHwgZ2V0b2sgKHNlcnZlcikpCi0gICAgewotICAgICAgcmV0dXJu ICgwKTsKLSAgICB9Ci0KLSAgaWYgKHN0cmxlbiAocGFzc3dvcmQpID4gRVJST1JfTUFYIC0g NikKLSAgICB7Ci0gICAgICBwb3BfY2xvc2UgKHNlcnZlcik7Ci0gICAgICBzdHJjcHkgKHBv cF9lcnJvciwKLQkgICAgICAiUGFzc3dvcmQgdG9vIGxvbmc7IHJlY29tcGlsZSBwb3AuYyB3 aXRoIGxhcmdlciBFUlJPUl9NQVgiKTsKLSAgICAgIHJldHVybiAoMCk7Ci0gICAgfQotICBz cHJpbnRmIChwb3BfZXJyb3IsICJQQVNTICVzIiwgcGFzc3dvcmQpOwotCi0gIGlmIChzZW5k bGluZSAoc2VydmVyLCBwb3BfZXJyb3IpIHx8IGdldG9rIChzZXJ2ZXIpKQotICAgIHsKLSAg ICAgIHJldHVybiAoMCk7Ci0gICAgfQotCi0gIHJldHVybiAoc2VydmVyKTsKLX0KLQotLyoK LSAqIEZ1bmN0aW9uOiBwb3Bfc3RhdAotICoKLSAqIFB1cnBvc2U6IElzc3VlIHRoZSBTVEFU IGNvbW1hbmQgdG8gdGhlIHNlcnZlciBhbmQgcmV0dXJuIChpbiB0aGUKLSAqIAl2YWx1ZSBw YXJhbWV0ZXJzKSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBtYWlsZHJvcCBhbmQK LSAqIAl0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbWFpbGRyb3AuCi0gKgotICogUmV0dXJuIHZh bHVlOiAwIG9uIHN1Y2Nlc3MsIG9yIG5vbi16ZXJvIHdpdGggYW4gZXJyb3IgaW4gcG9wX2Vy cm9yCi0gKiAJaW4gZmFpbHVyZS4KLSAqCi0gKiBTaWRlIGVmZmVjdHM6IE9uIGZhaWx1cmUs IG1heSBtYWtlIGZ1cnRoZXIgb3BlcmF0aW9ucyBvbiB0aGUKLSAqIAljb25uZWN0aW9uIGlt cG9zc2libGUuCi0gKi8KLWludAotcG9wX3N0YXQgKHBvcHNlcnZlciBzZXJ2ZXIsIGludCAq Y291bnQsIGludCAqc2l6ZSkKLXsKLSAgY2hhciAqZnJvbXNlcnZlcjsKLSAgY2hhciAqZW5k X3B0cjsKLQotICBpZiAoc2VydmVyLT5pbl9tdWx0aSkKLSAgICB7Ci0gICAgICBzdHJjcHkg KHBvcF9lcnJvciwgIkluIG11bHRpLWxpbmUgcXVlcnkgaW4gcG9wX3N0YXQiKTsKLSAgICAg IHJldHVybiAoLTEpOwotICAgIH0KLQotICBpZiAoc2VuZGxpbmUgKHNlcnZlciwgIlNUQVQi KSB8fCAocG9wX2dldGxpbmUgKHNlcnZlciwgJmZyb21zZXJ2ZXIpIDwgMCkpCi0gICAgcmV0 dXJuICgtMSk7Ci0KLSAgaWYgKHN0cm5jbXAgKGZyb21zZXJ2ZXIsICIrT0sgIiwgNCkpCi0g ICAgewotICAgICAgaWYgKDAgPT0gc3RybmNtcCAoZnJvbXNlcnZlciwgIi1FUlIiLCA0KSkK LQlzbnByaW50ZiAocG9wX2Vycm9yLCBFUlJPUl9NQVgsICIlcyIsIGZyb21zZXJ2ZXIpOwot ICAgICAgZWxzZQotCXsKLQkgIHN0cmNweSAocG9wX2Vycm9yLAotCQkgICJVbmV4cGVjdGVk IHJlc3BvbnNlIGZyb20gUE9QIHNlcnZlciBpbiBwb3Bfc3RhdCIpOwotCSAgcG9wX3RyYXNo IChzZXJ2ZXIpOwotCX0KLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLQotICBlcnJubyA9 IDA7Ci0gICpjb3VudCA9IHN0cnRvbCAoJmZyb21zZXJ2ZXJbNF0sICZlbmRfcHRyLCAxMCk7 Ci0gIC8qIENoZWNrIHZhbGlkaXR5IG9mIHN0cmluZy10by1pbnRlZ2VyIGNvbnZlcnNpb24u ICovCi0gIGlmIChmcm9tc2VydmVyICsgNCA9PSBlbmRfcHRyIHx8ICplbmRfcHRyICE9ICcg JyB8fCBlcnJubykKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBvcF9lcnJvciwgIlVuZXhwZWN0 ZWQgcmVzcG9uc2UgZnJvbSBQT1Agc2VydmVyIGluIHBvcF9zdGF0Iik7Ci0gICAgICBwb3Bf dHJhc2ggKHNlcnZlcik7Ci0gICAgICByZXR1cm4gKC0xKTsKLSAgICB9Ci0KLSAgZnJvbXNl cnZlciA9IGVuZF9wdHI7Ci0KLSAgZXJybm8gPSAwOwotICAqc2l6ZSA9IHN0cnRvbCAoZnJv bXNlcnZlciArIDEsICZlbmRfcHRyLCAxMCk7Ci0gIGlmIChmcm9tc2VydmVyICsgMSA9PSBl bmRfcHRyIHx8IGVycm5vKQotICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLCAiVW5l eHBlY3RlZCByZXNwb25zZSBmcm9tIFBPUCBzZXJ2ZXIgaW4gcG9wX3N0YXQiKTsKLSAgICAg IHBvcF90cmFzaCAoc2VydmVyKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLQotICBy ZXR1cm4gKDApOwotfQotCi0vKgotICogRnVuY3Rpb246IHBvcF9saXN0Ci0gKgotICogUHVy cG9zZTogUGVyZm9ybXMgdGhlIFBPUCAibGlzdCIgY29tbWFuZCBhbmQgcmV0dXJucyAoaW4g dmFsdWUKLSAqIAlwYXJhbWV0ZXJzKSB0d28gbWFsbG9jJ2QgemVyby10ZXJtaW5hdGVkIGFy cmF5cyAtLSBvbmUgb2YKLSAqIAltZXNzYWdlIElEcywgYW5kIGEgcGFyYWxsZWwgb25lIG9m IHNpemVzLgotICoKLSAqIEFyZ3VtZW50czoKLSAqIAlzZXJ2ZXIJVGhlIHBvcCBjb25uZWN0 aW9uIHRvIHRhbGsgdG8uCi0gKiAJbWVzc2FnZQlUaGUgbnVtYmVyIG9mIHRoZSBvbmUgbWVz c2FnZSBhYm91dCB3aGljaCB0byBnZXQKLSAqIAkJaW5mb3JtYXRpb24sIG9yIDAgdG8gZ2V0 IGluZm9ybWF0aW9uIGFib3V0IGFsbAotICogCQltZXNzYWdlcy4KLSAqCi0gKiBSZXR1cm4g dmFsdWU6IDAgb24gc3VjY2Vzcywgbm9uLXplcm8gd2l0aCBlcnJvciBpbiBwb3BfZXJyb3Ig b24KLSAqIAlmYWlsdXJlLgotICoKLSAqIFNpZGUgZWZmZWN0czogT24gZmFpbHVyZSwgbWF5 IG1ha2UgZnVydGhlciBvcGVyYXRpb25zIG9uIHRoZQotICogCWNvbm5lY3Rpb24gaW1wb3Nz aWJsZS4KLSAqLwotaW50Ci1wb3BfbGlzdCAocG9wc2VydmVyIHNlcnZlciwgaW50IG1lc3Nh Z2UsIGludCAqKklEcywgaW50ICoqc2l6ZXMpCi17Ci0gIGludCBob3dfbWFueSwgaTsKLSAg Y2hhciAqZnJvbXNlcnZlcjsKLQotICBpZiAoc2VydmVyLT5pbl9tdWx0aSkKLSAgICB7Ci0g ICAgICBzdHJjcHkgKHBvcF9lcnJvciwgIkluIG11bHRpLWxpbmUgcXVlcnkgaW4gcG9wX2xp c3QiKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLQotICBpZiAobWVzc2FnZSkKLSAg ICBob3dfbWFueSA9IDE7Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpbnQgY291bnQsIHNpemU7 Ci0gICAgICBpZiAocG9wX3N0YXQgKHNlcnZlciwgJmNvdW50LCAmc2l6ZSkpCi0JcmV0dXJu ICgtMSk7Ci0gICAgICBob3dfbWFueSA9IGNvdW50OwotICAgIH0KLQotICAqSURzID0gKGlu dCAqKSBtYWxsb2MgKChob3dfbWFueSArIDEpICogc2l6ZW9mIChpbnQpKTsKLSAgKnNpemVz ID0gKGludCAqKSBtYWxsb2MgKChob3dfbWFueSArIDEpICogc2l6ZW9mIChpbnQpKTsKLSAg aWYgKCEgKCpJRHMgJiYgKnNpemVzKSkKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBvcF9lcnJv ciwgIk91dCBvZiBtZW1vcnkgaW4gcG9wX2xpc3QiKTsKLSAgICAgIHJldHVybiAoLTEpOwot ICAgIH0KLQotICBpZiAobWVzc2FnZSkKLSAgICB7Ci0gICAgICBzcHJpbnRmIChwb3BfZXJy b3IsICJMSVNUICVkIiwgbWVzc2FnZSk7Ci0gICAgICBpZiAoc2VuZGxpbmUgKHNlcnZlciwg cG9wX2Vycm9yKSkKLQl7Ci0JICBmcmVlICgoY2hhciAqKSAqSURzKTsKLQkgIGZyZWUgKChj aGFyICopICpzaXplcyk7Ci0JICByZXR1cm4gKC0xKTsKLQl9Ci0gICAgICBpZiAocG9wX2dl dGxpbmUgKHNlcnZlciwgJmZyb21zZXJ2ZXIpIDwgMCkKLQl7Ci0JICBmcmVlICgoY2hhciAq KSAqSURzKTsKLQkgIGZyZWUgKChjaGFyICopICpzaXplcyk7Ci0JICByZXR1cm4gKC0xKTsK LQl9Ci0gICAgICBpZiAoc3RybmNtcCAoZnJvbXNlcnZlciwgIitPSyAiLCA0KSkKLQl7Ci0J ICBpZiAoISBzdHJuY21wIChmcm9tc2VydmVyLCAiLUVSUiIsIDQpKQotCSAgICBzbnByaW50 ZiAocG9wX2Vycm9yLCBFUlJPUl9NQVgsICIlcyIsIGZyb21zZXJ2ZXIpOwotCSAgZWxzZQot CSAgICB7Ci0JICAgICAgc3RyY3B5IChwb3BfZXJyb3IsCi0JCSAgICAgICJVbmV4cGVjdGVk IHJlc3BvbnNlIGZyb20gc2VydmVyIGluIHBvcF9saXN0Iik7Ci0JICAgICAgcG9wX3RyYXNo IChzZXJ2ZXIpOwotCSAgICB9Ci0JICBmcmVlICgoY2hhciAqKSAqSURzKTsKLQkgIGZyZWUg KChjaGFyICopICpzaXplcyk7Ci0JICByZXR1cm4gKC0xKTsKLQl9Ci0gICAgICAoKklEcylb MF0gPSBhdG9pICgmZnJvbXNlcnZlcls0XSk7Ci0gICAgICBmcm9tc2VydmVyID0gc3RyY2hy ICgmZnJvbXNlcnZlcls0XSwgJyAnKTsKLSAgICAgIGlmICghIGZyb21zZXJ2ZXIpCi0Jewot CSAgc3RyY3B5IChwb3BfZXJyb3IsCi0JCSAgIkJhZGx5IGZvcm1hdHRlZCByZXNwb25zZSBm cm9tIHNlcnZlciBpbiBwb3BfbGlzdCIpOwotCSAgcG9wX3RyYXNoIChzZXJ2ZXIpOwotCSAg ZnJlZSAoKGNoYXIgKikgKklEcyk7Ci0JICBmcmVlICgoY2hhciAqKSAqc2l6ZXMpOwotCSAg cmV0dXJuICgtMSk7Ci0JfQotICAgICAgKCpzaXplcylbMF0gPSBhdG9pIChmcm9tc2VydmVy KTsKLSAgICAgICgqSURzKVsxXSA9ICgqc2l6ZXMpWzFdID0gMDsKLSAgICAgIHJldHVybiAo MCk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgaWYgKHBvcF9tdWx0aV9maXJzdCAo c2VydmVyLCAiTElTVCIsICZmcm9tc2VydmVyKSkKLQl7Ci0JICBmcmVlICgoY2hhciAqKSAq SURzKTsKLQkgIGZyZWUgKChjaGFyICopICpzaXplcyk7Ci0JICByZXR1cm4gKC0xKTsKLQl9 Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgaG93X21hbnk7IGkrKykKLQl7Ci0JICBpZiAocG9w X211bHRpX25leHQgKHNlcnZlciwgJmZyb21zZXJ2ZXIpIDw9IDApCi0JICAgIHsKLQkgICAg ICBmcmVlICgoY2hhciAqKSAqSURzKTsKLQkgICAgICBmcmVlICgoY2hhciAqKSAqc2l6ZXMp OwotCSAgICAgIHJldHVybiAoLTEpOwotCSAgICB9Ci0JICAoKklEcylbaV0gPSBhdG9pIChm cm9tc2VydmVyKTsKLQkgIGZyb21zZXJ2ZXIgPSBzdHJjaHIgKGZyb21zZXJ2ZXIsICcgJyk7 Ci0JICBpZiAoISBmcm9tc2VydmVyKQotCSAgICB7Ci0JICAgICAgc3RyY3B5IChwb3BfZXJy b3IsCi0JCSAgICAgICJCYWRseSBmb3JtYXR0ZWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgaW4g cG9wX2xpc3QiKTsKLQkgICAgICBmcmVlICgoY2hhciAqKSAqSURzKTsKLQkgICAgICBmcmVl ICgoY2hhciAqKSAqc2l6ZXMpOwotCSAgICAgIHBvcF90cmFzaCAoc2VydmVyKTsKLQkgICAg ICByZXR1cm4gKC0xKTsKLQkgICAgfQotCSAgKCpzaXplcylbaV0gPSBhdG9pIChmcm9tc2Vy dmVyKTsKLQl9Ci0gICAgICBpZiAocG9wX211bHRpX25leHQgKHNlcnZlciwgJmZyb21zZXJ2 ZXIpIDwgMCkKLQl7Ci0JICBmcmVlICgoY2hhciAqKSAqSURzKTsKLQkgIGZyZWUgKChjaGFy ICopICpzaXplcyk7Ci0JICByZXR1cm4gKC0xKTsKLQl9Ci0gICAgICBlbHNlIGlmIChmcm9t c2VydmVyKQotCXsKLQkgIHN0cmNweSAocG9wX2Vycm9yLAotCQkgICJUb28gbWFueSByZXNw b25zZSBsaW5lcyBmcm9tIHNlcnZlciBpbiBwb3BfbGlzdCIpOwotCSAgZnJlZSAoKGNoYXIg KikgKklEcyk7Ci0JICBmcmVlICgoY2hhciAqKSAqc2l6ZXMpOwotCSAgcmV0dXJuICgtMSk7 Ci0JfQotICAgICAgKCpJRHMpW2ldID0gKCpzaXplcylbaV0gPSAwOwotICAgICAgcmV0dXJu ICgwKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjogcG9wX3JldHJpZXZlCi0gKgot ICogUHVycG9zZTogUmV0cmlldmUgYSBzcGVjaWZpZWQgbWVzc2FnZSBmcm9tIHRoZSBtYWls ZHJvcC4KLSAqCi0gKiBBcmd1bWVudHM6Ci0gKiAJc2VydmVyCVRoZSBzZXJ2ZXIgdG8gcmV0 cmlldmUgZnJvbS4KLSAqIAltZXNzYWdlCVRoZSBtZXNzYWdlIG51bWJlciB0byByZXRyaWV2 ZS4KLSAqCW1hcmtmcm9tCi0gKiAJCUlmIHRydWUsIHRoZW4gbWFyayB0aGUgc3RyaW5nICJG cm9tICIgYXQgdGhlIGJlZ2lubmluZwotICogCQlvZiBsaW5lcyB3aXRoICc+Jy4KLSAqCW1z Z19idWYJT3V0cHV0IHBhcmFtZXRlciB0byB3aGljaCBhIGJ1ZmZlciBjb250YWluaW5nIHRo ZQotICogCQltZXNzYWdlIGlzIGFzc2lnbmVkLgotICoKLSAqIFJldHVybiB2YWx1ZTogVGhl IG51bWJlciBvZiBieXRlcyBpbiBtc2dfYnVmLCB3aGljaCBtYXkgY29udGFpbgotICogCWVt YmVkZGVkIG51bGxzLCBub3QgaW5jbHVkaW5nIGl0cyBmaW5hbCBudWxsLCBvciAtMSBvbiBl cnJvcgotICogCXdpdGggcG9wX2Vycm9yIHNldC4KLSAqCi0gKiBTaWRlIGVmZmVjdHM6IE1h eSBraWxsIGNvbm5lY3Rpb24gb24gZXJyb3IuCi0gKi8KLWludAotcG9wX3JldHJpZXZlIChw b3BzZXJ2ZXIgc2VydmVyLCBpbnQgbWVzc2FnZSwgaW50IG1hcmtmcm9tLCBjaGFyICoqbXNn X2J1ZikKLXsKLSAgaW50ICpJRHMsICpzaXplcywgYnVmc2l6ZSwgZnJvbWNvdW50ID0gMCwg Y3AgPSAwOwotICBjaGFyICpwdHIsICpmcm9tc2VydmVyOwotICBpbnQgcmV0OwotCi0gIGlm IChzZXJ2ZXItPmluX211bHRpKQotICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLCAi SW4gbXVsdGktbGluZSBxdWVyeSBpbiBwb3BfcmV0cmlldmUiKTsKLSAgICAgIHJldHVybiAo LTEpOwotICAgIH0KLQotICBpZiAocG9wX2xpc3QgKHNlcnZlciwgbWVzc2FnZSwgJklEcywg JnNpemVzKSkKLSAgICByZXR1cm4gKC0xKTsKLQotICBpZiAocG9wX3JldHJpZXZlX2ZpcnN0 IChzZXJ2ZXIsIG1lc3NhZ2UsICZmcm9tc2VydmVyKSkKLSAgICB7Ci0gICAgICByZXR1cm4g KC0xKTsKLSAgICB9Ci0KLSAgLyoKLSAgICogVGhlICI1IiBiZWxvdyBpcyBhbiBhcmJpdHJh cnkgY29uc3RhbnQgLS0gSSBhc3N1bWUgdGhhdCBpZgotICAgKiB0aGVyZSBhcmUgIkZyb20i IGxpbmVzIGluIHRoZSB0ZXh0IHRvIGJlIG1hcmtlZCwgdGhlcmUKLSAgICogcHJvYmFibHkg d29uJ3QgYmUgbW9yZSB0aGFuIDUgb2YgdGhlbS4gIElmIHRoZXJlIGFyZSwgSQotICAgKiBh bGxvY2F0ZSBtb3JlIHNwYWNlIGZvciB0aGVtIGJlbG93LgotICAgKi8KLSAgYnVmc2l6ZSA9 IHNpemVzWzBdICsgKG1hcmtmcm9tID8gNSA6IDApOwotICBwdHIgPSAoY2hhciAqKW1hbGxv YyAoYnVmc2l6ZSk7Ci0gIGZyZWUgKChjaGFyICopIElEcyk7Ci0gIGZyZWUgKChjaGFyICop IHNpemVzKTsKLQotICBpZiAoISBwdHIpCi0gICAgewotICAgICAgc3RyY3B5IChwb3BfZXJy b3IsICJPdXQgb2YgbWVtb3J5IGluIHBvcF9yZXRyaWV2ZSIpOwotICAgICAgcG9wX3JldHJp ZXZlX2ZsdXNoIChzZXJ2ZXIpOwotICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotCi0gIHdo aWxlICgocmV0ID0gcG9wX3JldHJpZXZlX25leHQgKHNlcnZlciwgJmZyb21zZXJ2ZXIpKSA+ PSAwKQotICAgIHsKLSAgICAgIGlmICghIGZyb21zZXJ2ZXIpCi0JewotCSAgcHRyW2NwXSA9 ICdcMCc7Ci0JICAqbXNnX2J1ZiA9IHB0cjsKLQkgIHJldHVybiAoY3ApOwotCX0KLSAgICAg IGlmIChtYXJrZnJvbSAmJiBmcm9tc2VydmVyWzBdID09ICdGJyAmJiBmcm9tc2VydmVyWzFd ID09ICdyJyAmJgotCSAgZnJvbXNlcnZlclsyXSA9PSAnbycgJiYgZnJvbXNlcnZlclszXSA9 PSAnbScgJiYKLQkgIGZyb21zZXJ2ZXJbNF0gPT0gJyAnKQotCXsKLQkgIGlmICgrK2Zyb21j b3VudCA9PSA1KQotCSAgICB7Ci0JICAgICAgYnVmc2l6ZSArPSA1OwotCSAgICAgIHB0ciA9 IChjaGFyICopcmVhbGxvYyAocHRyLCBidWZzaXplKTsKLQkgICAgICBpZiAoISBwdHIpCi0J CXsKLQkJICBzdHJjcHkgKHBvcF9lcnJvciwgIk91dCBvZiBtZW1vcnkgaW4gcG9wX3JldHJp ZXZlIik7Ci0JCSAgcG9wX3JldHJpZXZlX2ZsdXNoIChzZXJ2ZXIpOwotCQkgIHJldHVybiAo LTEpOwotCQl9Ci0JICAgICAgZnJvbWNvdW50ID0gMDsKLQkgICAgfQotCSAgcHRyW2NwKytd ID0gJz4nOwotCX0KLSAgICAgIG1lbWNweSAoJnB0cltjcF0sIGZyb21zZXJ2ZXIsIHJldCk7 Ci0gICAgICBjcCArPSByZXQ7Ci0gICAgICBwdHJbY3ArK10gPSAnXG4nOwotICAgIH0KLQot ICBmcmVlIChwdHIpOwotICByZXR1cm4gKC0xKTsKLX0KLQotaW50Ci1wb3BfcmV0cmlldmVf Zmlyc3QgKHBvcHNlcnZlciBzZXJ2ZXIsIGludCBtZXNzYWdlLCBjaGFyICoqcmVzcG9uc2Up Ci17Ci0gIHNwcmludGYgKHBvcF9lcnJvciwgIlJFVFIgJWQiLCBtZXNzYWdlKTsKLSAgcmV0 dXJuIChwb3BfbXVsdGlfZmlyc3QgKHNlcnZlciwgcG9wX2Vycm9yLCByZXNwb25zZSkpOwot fQotCi0vKgotICBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGVycm9yLCAwIHRvIGlu ZGljYXRlIHRoYXQgdGhlIGRhdGEgaGFzCi0gIGFsbCBiZWVuIHJlYWQgKGkuZS4sIHRoZSBz ZXJ2ZXIgaGFzIHJldHVybmVkIGEgIi4iIHRlcm1pbmF0aW9uCi0gIGxpbmUpLCBvciBhIHBv c2l0aXZlIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0g IHJldHVybmVkIGJ1ZmZlciAod2hpY2ggaXMgbnVsbC10ZXJtaW5hdGVkIGFuZCBtYXkgY29u dGFpbiBlbWJlZGRlZAotICBudWxscywgYnV0IHRoZSByZXR1cm5lZCBieXRlY291bnQgZG9l c24ndCBpbmNsdWRlIHRoZSBmaW5hbCBudWxsKS4KLSAgKi8KLQotaW50Ci1wb3BfcmV0cmll dmVfbmV4dCAocG9wc2VydmVyIHNlcnZlciwgY2hhciAqKmxpbmUpCi17Ci0gIHJldHVybiAo cG9wX211bHRpX25leHQgKHNlcnZlciwgbGluZSkpOwotfQotCi1pbnQKLXBvcF9yZXRyaWV2 ZV9mbHVzaCAocG9wc2VydmVyIHNlcnZlcikKLXsKLSAgcmV0dXJuIChwb3BfbXVsdGlfZmx1 c2ggKHNlcnZlcikpOwotfQotCi1pbnQKLXBvcF90b3BfZmlyc3QgKHBvcHNlcnZlciBzZXJ2 ZXIsIGludCBtZXNzYWdlLCBpbnQgbGluZXMsIGNoYXIgKipyZXNwb25zZSkKLXsKLSAgc3By aW50ZiAocG9wX2Vycm9yLCAiVE9QICVkICVkIiwgbWVzc2FnZSwgbGluZXMpOwotICByZXR1 cm4gKHBvcF9tdWx0aV9maXJzdCAoc2VydmVyLCBwb3BfZXJyb3IsIHJlc3BvbnNlKSk7Ci19 Ci0KLS8qCi0gIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgb24gZXJyb3IsIDAgdG8gaW5k aWNhdGUgdGhhdCB0aGUgZGF0YSBoYXMKLSAgYWxsIGJlZW4gcmVhZCAoaS5lLiwgdGhlIHNl cnZlciBoYXMgcmV0dXJuZWQgYSAiLiIgdGVybWluYXRpb24KLSAgbGluZSksIG9yIGEgcG9z aXRpdmUgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAg cmV0dXJuZWQgYnVmZmVyICh3aGljaCBpcyBudWxsLXRlcm1pbmF0ZWQgYW5kIG1heSBjb250 YWluIGVtYmVkZGVkCi0gIG51bGxzLCBidXQgdGhlIHJldHVybmVkIGJ5dGVjb3VudCBkb2Vz bid0IGluY2x1ZGUgdGhlIGZpbmFsIG51bGwpLgotICAqLwotCi1pbnQKLXBvcF90b3BfbmV4 dCAocG9wc2VydmVyIHNlcnZlciwgY2hhciAqKmxpbmUpCi17Ci0gIHJldHVybiAocG9wX211 bHRpX25leHQgKHNlcnZlciwgbGluZSkpOwotfQotCi1pbnQKLXBvcF90b3BfZmx1c2ggKHBv cHNlcnZlciBzZXJ2ZXIpCi17Ci0gIHJldHVybiAocG9wX211bHRpX2ZsdXNoIChzZXJ2ZXIp KTsKLX0KLQotaW50Ci1wb3BfbXVsdGlfZmlyc3QgKHBvcHNlcnZlciBzZXJ2ZXIsIGNvbnN0 IGNoYXIgKmNvbW1hbmQsIGNoYXIgKipyZXNwb25zZSkKLXsKLSAgaWYgKHNlcnZlci0+aW5f bXVsdGkpCi0gICAgewotICAgICAgc3RyY3B5IChwb3BfZXJyb3IsCi0JICAgICAgIkFscmVh ZHkgaW4gbXVsdGktbGluZSBxdWVyeSBpbiBwb3BfbXVsdGlfZmlyc3QiKTsKLSAgICAgIHJl dHVybiAoLTEpOwotICAgIH0KLQotICBpZiAoc2VuZGxpbmUgKHNlcnZlciwgY29tbWFuZCkg fHwgKHBvcF9nZXRsaW5lIChzZXJ2ZXIsIHJlc3BvbnNlKSA8IDApKQotICAgIHsKLSAgICAg IHJldHVybiAoLTEpOwotICAgIH0KLQotICBpZiAoMCA9PSBzdHJuY21wICgqcmVzcG9uc2Us ICItRVJSIiwgNCkpCi0gICAgewotICAgICAgc25wcmludGYgKHBvcF9lcnJvciwgRVJST1Jf TUFYLCAiJXMiLCAqcmVzcG9uc2UpOwotICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotICBl bHNlIGlmICgwID09IHN0cm5jbXAgKCpyZXNwb25zZSwgIitPSyIsIDMpKQotICAgIHsKLSAg ICAgIGZvciAoKnJlc3BvbnNlICs9IDM7ICoqcmVzcG9uc2UgPT0gJyAnOyAoKnJlc3BvbnNl KSsrKSAvKiBlbXB0eSAqLzsKLSAgICAgIHNlcnZlci0+aW5fbXVsdGkgPSB0cnVlOwotICAg ICAgcmV0dXJuICgwKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBv cF9lcnJvciwKLQkgICAgICAiVW5leHBlY3RlZCByZXNwb25zZSBmcm9tIHNlcnZlciBpbiBw b3BfbXVsdGlfZmlyc3QiKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLX0KLQotLyoK LSAgUmVhZCB0aGUgbmV4dCBsaW5lIG9mIGRhdGEgZnJvbSBTRVJWRVIgYW5kIHBsYWNlIGEg cG9pbnRlciB0byBpdAotICBpbnRvIExJTkUuICBSZXR1cm4gLTEgb24gZXJyb3IsIDAgaWYg dGhlcmUgYXJlIG5vIG1vcmUgbGluZXMgdG8gcmVhZAotICAoaS5lLiwgdGhlIHNlcnZlciBo YXMgcmV0dXJuZWQgYSBsaW5lIGNvbnRhaW5pbmcgb25seSAiLiIpLCBvciBhCi0gIHBvc2l0 aXZlIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIExJTkUg YnVmZmVyCi0gIChub3QgaW5jbHVkaW5nIHRoZSBmaW5hbCBudWxsKS4gIFRoZSBkYXRhIGlu IHRoYXQgYnVmZmVyIG1heSBjb250YWluCi0gIGVtYmVkZGVkIG51bGxzLCBidXQgZG9lcyBu b3QgY29udGFpbiB0aGUgZmluYWwgQ1JMRi4gV2hlbiByZXR1cm5pbmcKLSAgMCwgTElORSBp cyBzZXQgdG8gbnVsbC4gKi8KLQotaW50Ci1wb3BfbXVsdGlfbmV4dCAocG9wc2VydmVyIHNl cnZlciwgY2hhciAqKmxpbmUpCi17Ci0gIGNoYXIgKmZyb21zZXJ2ZXI7Ci0gIGludCByZXQ7 Ci0KLSAgaWYgKCEgc2VydmVyLT5pbl9tdWx0aSkKLSAgICB7Ci0gICAgICBzdHJjcHkgKHBv cF9lcnJvciwgIk5vdCBpbiBtdWx0aS1saW5lIHF1ZXJ5IGluIHBvcF9tdWx0aV9uZXh0Iik7 Ci0gICAgICByZXR1cm4gKC0xKTsKLSAgICB9Ci0KLSAgcmV0ID0gcG9wX2dldGxpbmUgKHNl cnZlciwgJmZyb21zZXJ2ZXIpOwotICBpZiAocmV0IDwgMCkKLSAgICB7Ci0gICAgICByZXR1 cm4gKC0xKTsKLSAgICB9Ci0KLSAgaWYgKGZyb21zZXJ2ZXJbMF0gPT0gJy4nKQotICAgIHsK LSAgICAgIGlmICghIGZyb21zZXJ2ZXJbMV0pCi0JewotCSAgKmxpbmUgPSAwOwotCSAgc2Vy dmVyLT5pbl9tdWx0aSA9IGZhbHNlOwotCSAgcmV0dXJuICgwKTsKLQl9Ci0gICAgICBlbHNl Ci0JewotCSAgKmxpbmUgPSBmcm9tc2VydmVyICsgMTsKLQkgIHJldHVybiAocmV0IC0gMSk7 Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgICpsaW5lID0gZnJvbXNlcnZlcjsK LSAgICAgIHJldHVybiAocmV0KTsKLSAgICB9Ci19Ci0KLWludAotcG9wX211bHRpX2ZsdXNo IChwb3BzZXJ2ZXIgc2VydmVyKQotewotICBjaGFyICpsaW5lOwotICBpbnQgcmV0OwotCi0g IGlmICghIHNlcnZlci0+aW5fbXVsdGkpCi0gICAgewotICAgICAgcmV0dXJuICgwKTsKLSAg ICB9Ci0KLSAgd2hpbGUgKChyZXQgPSBwb3BfbXVsdGlfbmV4dCAoc2VydmVyLCAmbGluZSkp KQotICAgIHsKLSAgICAgIGlmIChyZXQgPCAwKQotCXJldHVybiAoLTEpOwotICAgIH0KLQot ICByZXR1cm4gKDApOwotfQotCi0vKiBGdW5jdGlvbjogcG9wX2RlbGV0ZQotICoKLSAqIFB1 cnBvc2U6IERlbGV0ZSBhIHNwZWNpZmllZCBtZXNzYWdlLgotICoKLSAqIEFyZ3VtZW50czoK LSAqIAlzZXJ2ZXIJU2VydmVyIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBtZXNzYWdlLgot ICogCW1lc3NhZ2UJTWVzc2FnZSB0byBkZWxldGUuCi0gKgotICogUmV0dXJuIHZhbHVlOiAw IG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIHdpdGggZXJyb3IgaW4gcG9wX2Vycm9yCi0gKiAJb3Ro ZXJ3aXNlLgotICovCi1pbnQKLXBvcF9kZWxldGUgKHBvcHNlcnZlciBzZXJ2ZXIsIGludCBt ZXNzYWdlKQotewotICBpZiAoc2VydmVyLT5pbl9tdWx0aSkKLSAgICB7Ci0gICAgICBzdHJj cHkgKHBvcF9lcnJvciwgIkluIG11bHRpLWxpbmUgcXVlcnkgaW4gcG9wX2RlbGV0ZSIpOwot ICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotCi0gIHNwcmludGYgKHBvcF9lcnJvciwgIkRF TEUgJWQiLCBtZXNzYWdlKTsKLQotICBpZiAoc2VuZGxpbmUgKHNlcnZlciwgcG9wX2Vycm9y KSB8fCBnZXRvayAoc2VydmVyKSkKLSAgICByZXR1cm4gKC0xKTsKLQotICByZXR1cm4gKDAp OwotfQotCi0vKgotICogRnVuY3Rpb246IHBvcF9ub29wCi0gKgotICogUHVycG9zZTogU2Vu ZCBhIG5vb3AgY29tbWFuZCB0byB0aGUgc2VydmVyLgotICoKLSAqIEFyZ3VtZW50OgotICog CXNlcnZlcglUaGUgc2VydmVyIHRvIHNlbmQgdG8uCi0gKgotICogUmV0dXJuIHZhbHVlOiAw IG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIHdpdGggZXJyb3IgaW4gcG9wX2Vycm9yCi0gKiAJb3Ro ZXJ3aXNlLgotICoKLSAqIFNpZGUgZWZmZWN0czogQ2xvc2VzIGNvbm5lY3Rpb24gb24gZXJy b3IuCi0gKi8KLWludAotcG9wX25vb3AgKHBvcHNlcnZlciBzZXJ2ZXIpCi17Ci0gIGlmIChz ZXJ2ZXItPmluX211bHRpKQotICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLCAiSW4g bXVsdGktbGluZSBxdWVyeSBpbiBwb3Bfbm9vcCIpOwotICAgICAgcmV0dXJuICgtMSk7Ci0g ICAgfQotCi0gIGlmIChzZW5kbGluZSAoc2VydmVyLCAiTk9PUCIpIHx8IGdldG9rIChzZXJ2 ZXIpKQotICAgIHJldHVybiAoLTEpOwotCi0gIHJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBG dW5jdGlvbjogcG9wX2xhc3QKLSAqCi0gKiBQdXJwb3NlOiBGaW5kIG91dCB0aGUgaGlnaGVz dCBzZWVuIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLgotICoKLSAqIEFyZ3VtZW50czoKLSAq IAlzZXJ2ZXIJVGhlIHNlcnZlci4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IElmIHN1Y2Nlc3Nm dWwsIHRoZSBoaWdoZXN0IHNlZW4gbWVzc2FnZSwgd2hpY2ggaXMKLSAqIAlncmVhdGVyIHRo YW4gb3IgZXF1YWwgdG8gMC4gIE90aGVyd2lzZSwgYSBuZWdhdGl2ZSBudW1iZXIgd2l0aAot ICogCXRoZSBlcnJvciBleHBsYWluZWQgaW4gcG9wX2Vycm9yLgotICoKLSAqIFNpZGUgZWZm ZWN0czogQ2xvc2VzIHRoZSBjb25uZWN0aW9uIG9uIGVycm9yLgotICovCi1pbnQKLXBvcF9s YXN0IChwb3BzZXJ2ZXIgc2VydmVyKQotewotICBjaGFyICpmcm9tc2VydmVyOwotCi0gIGlm IChzZXJ2ZXItPmluX211bHRpKQotICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLCAi SW4gbXVsdGktbGluZSBxdWVyeSBpbiBwb3BfbGFzdCIpOwotICAgICAgcmV0dXJuICgtMSk7 Ci0gICAgfQotCi0gIGlmIChzZW5kbGluZSAoc2VydmVyLCAiTEFTVCIpKQotICAgIHJldHVy biAoLTEpOwotCi0gIGlmIChwb3BfZ2V0bGluZSAoc2VydmVyLCAmZnJvbXNlcnZlcikgPCAw KQotICAgIHJldHVybiAoLTEpOwotCi0gIGlmICghIHN0cm5jbXAgKGZyb21zZXJ2ZXIsICIt RVJSIiwgNCkpCi0gICAgewotICAgICAgc25wcmludGYgKHBvcF9lcnJvciwgRVJST1JfTUFY LCAiJXMiLCBmcm9tc2VydmVyKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgZWxz ZSBpZiAoc3RybmNtcCAoZnJvbXNlcnZlciwgIitPSyAiLCA0KSkKLSAgICB7Ci0gICAgICBz dHJjcHkgKHBvcF9lcnJvciwgIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgaW4g cG9wX2xhc3QiKTsKLSAgICAgIHBvcF90cmFzaCAoc2VydmVyKTsKLSAgICAgIHJldHVybiAo LTEpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGNoYXIgKmVuZF9wdHI7Ci0gICAg ICBpbnQgY291bnQ7Ci0gICAgICBlcnJubyA9IDA7Ci0gICAgICBjb3VudCA9IHN0cnRvbCAo JmZyb21zZXJ2ZXJbNF0sICZlbmRfcHRyLCAxMCk7Ci0gICAgICBpZiAoZnJvbXNlcnZlciAr IDQgPT0gZW5kX3B0ciB8fCBlcnJubykKLQl7Ci0JICBzdHJjcHkgKHBvcF9lcnJvciwgIlVu ZXhwZWN0ZWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgaW4gcG9wX2xhc3QiKTsKLQkgIHBvcF90 cmFzaCAoc2VydmVyKTsKLQkgIHJldHVybiAoLTEpOwotCX0KLSAgICAgIHJldHVybiBjb3Vu dDsKLSAgICB9Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbjogcG9wX3Jlc2V0Ci0gKgotICogUHVy cG9zZTogUmVzZXQgdGhlIHNlcnZlciB0byBpdHMgaW5pdGlhbCBjb25uZWN0IHN0YXRlCi0g KgotICogQXJndW1lbnRzOgotICogCXNlcnZlcglUaGUgc2VydmVyLgotICoKLSAqIFJldHVy biB2YWx1ZTogMCBmb3Igc3VjY2Vzcywgbm9uLTAgd2l0aCBlcnJvciBpbiBwb3BfZXJyb3IK LSAqIAlvdGhlcndpc2UuCi0gKgotICogU2lkZSBlZmZlY3RzOiBDbG9zZXMgdGhlIGNvbm5l Y3Rpb24gb24gZXJyb3IuCi0gKi8KLWludAotcG9wX3Jlc2V0IChwb3BzZXJ2ZXIgc2VydmVy KQotewotICBpZiAocG9wX3JldHJpZXZlX2ZsdXNoIChzZXJ2ZXIpKQotICAgIHsKLSAgICAg IHJldHVybiAoLTEpOwotICAgIH0KLQotICBpZiAoc2VuZGxpbmUgKHNlcnZlciwgIlJTRVQi KSB8fCBnZXRvayAoc2VydmVyKSkKLSAgICByZXR1cm4gKC0xKTsKLQotICByZXR1cm4gKDAp OwotfQotCi0vKgotICogRnVuY3Rpb246IHBvcF9xdWl0Ci0gKgotICogUHVycG9zZTogUXVp dCB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyLAotICoKLSAqIEFyZ3VtZW50czoKLSAq IAlzZXJ2ZXIJVGhlIHNlcnZlciB0byBxdWl0LgotICoKLSAqIFJldHVybiB2YWx1ZTogMCBm b3Igc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlIHdpdGggZXJyb3IgaW4KLSAqIAlwb3Bf ZXJyb3IuCi0gKgotICogU2lkZSBFZmZlY3RzOiBUaGUgcG9wc2VydmVyIHBhc3NlZCBpbiBp cyB1bnVzYWJsZSBhZnRlciB0aGlzCi0gKiAJZnVuY3Rpb24gaXMgY2FsbGVkLCBldmVuIGlm IGFuIGVycm9yIG9jY3Vycy4KLSAqLwotaW50Ci1wb3BfcXVpdCAocG9wc2VydmVyIHNlcnZl cikKLXsKLSAgaW50IHJldCA9IDA7Ci0KLSAgaWYgKHNlcnZlci0+ZmlsZSA+PSAwKQotICAg IHsKLSAgICAgIGlmIChwb3BfcmV0cmlldmVfZmx1c2ggKHNlcnZlcikpCi0JewotCSAgcmV0 ID0gLTE7Ci0JfQotCi0gICAgICBpZiAoc2VuZGxpbmUgKHNlcnZlciwgIlFVSVQiKSB8fCBn ZXRvayAoc2VydmVyKSkKLQl7Ci0JICByZXQgPSAtMTsKLQl9Ci0KLSAgICAgIGNsb3NlIChz ZXJ2ZXItPmZpbGUpOwotICAgIH0KLQotICBmcmVlIChzZXJ2ZXItPmJ1ZmZlcik7Ci0gIGZy ZWUgKChjaGFyICopIHNlcnZlcik7Ci0KLSAgcmV0dXJuIChyZXQpOwotfQotCi0jaWZkZWYg V0lORE9XU05UCi1zdGF0aWMgaW50IGhhdmVfd2luc29jayA9IDA7Ci0jZW5kaWYKLQotLyoK LSAqIEZ1bmN0aW9uOiBzb2NrZXRfY29ubmVjdGlvbgotICoKLSAqIFB1cnBvc2U6IE9wZW5z IHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gd2l0aCB0aGUgbWFpbCBob3N0LCB3aXRob3V0Ci0g KiAJZG9pbmcgYW55IHNvcnQgb2YgSS9PIHdpdGggaXQgb3IgYW55dGhpbmcuCi0gKgotICog QXJndW1lbnRzOgotICogCWhvc3QJVGhlIGhvc3QgdG8gd2hpY2ggdG8gY29ubmVjdC4KLSAq CWZsYWdzCU9wdGlvbiBmbGFncy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IEEgZmlsZSBkZXNj cmlwdG9yIGluZGljYXRpbmcgdGhlIGNvbm5lY3Rpb24sIG9yIC0xCi0gKiAJaW5kaWNhdGlu ZyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFuIGVycm9yIGhhcyBiZWVuIGNvcGllZAotICog CWludG8gcG9wX2Vycm9yLgotICovCi1zdGF0aWMgaW50Ci1zb2NrZXRfY29ubmVjdGlvbiAo Y2hhciAqaG9zdCwgaW50IGZsYWdzKQotewotICBzdHJ1Y3QgYWRkcmluZm8gKnJlcywgKml0 OwotICBzdHJ1Y3QgYWRkcmluZm8gaGludHM7Ci0gIGludCByZXQ7Ci0gIHN0cnVjdCBzZXJ2 ZW50ICpzZXJ2ZW50OwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLSAgY2hhciBmb3Vu ZF9wb3J0ID0gMDsKLSAgY29uc3QgY2hhciAqc2VydmljZTsKLSAgaW50IHNvY2s7Ci0gIGNo YXIgKnJlYWxob3N0OwotI2lmZGVmIEtFUkJFUk9TCi0jaWZkZWYgS0VSQkVST1M1Ci0gIGty YjVfZXJyb3JfY29kZSByZW07Ci0gIGtyYjVfY29udGV4dCBrY29udGV4dCA9IDA7Ci0gIGty YjVfYXV0aF9jb250ZXh0IGF1dGhfY29udGV4dCA9IDA7Ci0gIGtyYjVfY2NhY2hlIGNjZGVm OwotICBrcmI1X3ByaW5jaXBhbCBjbGllbnQsIHNlcnZlcjsKLSAga3JiNV9lcnJvciAqZXJy X3JldDsKLSAgcmVnaXN0ZXIgY2hhciAqY3A7Ci0jZWxzZQotICBLVEVYVCB0aWNrZXQ7Ci0g IE1TR19EQVQgbXNnX2RhdGE7Ci0gIENSRURFTlRJQUxTIGNyZWQ7Ci0gIEtleV9zY2hlZHVs ZSBzY2hlZHVsZTsKLSAgaW50IHJlbTsKLSNlbmRpZiAvKiBLRVJCRVJPUzUgKi8KLSNlbmRp ZiAvKiBLRVJCRVJPUyAqLwotCi0gIGludCB0cnlfY291bnQgPSAwOwotICBpbnQgY29ubmVj dF9vazsKLQotI2lmZGVmIFdJTkRPV1NOVAotICB7Ci0gICAgV1NBREFUQSB3aW5zb2NrRGF0 YTsKLSAgICBpZiAoV1NBU3RhcnR1cCAoMHgxMDEsICZ3aW5zb2NrRGF0YSkgPT0gMCkKLSAg ICAgIGhhdmVfd2luc29jayA9IDE7Ci0gIH0KLSNlbmRpZgotCi0gIG1lbXNldCAoJmFkZHIs IDAsIHNpemVvZiAoYWRkcikpOwotICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCi0g IC8qKiAia3BvcCIgc2VydmljZSBpcyAgbmV2ZXIgdXNlZDogbG9vayBmb3IgMjAwNjA1MTUg dG8gc2VlIHdoeSAqKi8KLSNpZmRlZiBLRVJCRVJPUwotICBzZXJ2aWNlID0gKGZsYWdzICYg UE9QX05PX0tFUkJFUk9TKSA/IFBPUF9TRVJWSUNFIDogS1BPUF9TRVJWSUNFOwotI2Vsc2UK LSAgc2VydmljZSA9IFBPUF9TRVJWSUNFOwotI2VuZGlmCi0KLSNpZmRlZiBIRVNJT0QKLSAg aWYgKCEgKGZsYWdzICYgUE9QX05PX0hFU0lPRCkpCi0gICAgewotICAgICAgc2VydmVudCA9 IGhlc19nZXRzZXJ2YnluYW1lIChzZXJ2aWNlLCAidGNwIik7Ci0gICAgICBpZiAoc2VydmVu dCkKLQl7Ci0JICBhZGRyLnNpbl9wb3J0ID0gc2VydmVudC0+c19wb3J0OwotCSAgZm91bmRf cG9ydCA9IDE7Ci0JfQotICAgIH0KLSNlbmRpZgotICBpZiAoISBmb3VuZF9wb3J0KQotICAg IHsKLSAgICAgIHNlcnZlbnQgPSBnZXRzZXJ2YnluYW1lIChzZXJ2aWNlLCAidGNwIik7Ci0g ICAgICBpZiAoc2VydmVudCkKLQl7Ci0JICBhZGRyLnNpbl9wb3J0ID0gc2VydmVudC0+c19w b3J0OwotCX0KLSAgICAgIGVsc2UKLQl7Ci0gIC8qKiAia3BvcCIgc2VydmljZSBpcyAgbmV2 ZXIgdXNlZDogbG9vayBmb3IgMjAwNjA1MTUgdG8gc2VlIHdoeSAqKi8KLSNpZmRlZiBLRVJC RVJPUwotCSAgYWRkci5zaW5fcG9ydCA9IGh0b25zICgoZmxhZ3MgJiBQT1BfTk9fS0VSQkVS T1MpID8KLQkJCQlQT1BfUE9SVCA6IEtQT1BfUE9SVCk7Ci0jZWxzZQotCSAgYWRkci5zaW5f cG9ydCA9IGh0b25zIChQT1BfUE9SVCk7Ci0jZW5kaWYKLQl9Ci0gICAgfQotCi0jZGVmaW5l IFBPUF9TT0NLRVRfRVJST1IgIkNvdWxkIG5vdCBjcmVhdGUgc29ja2V0IGZvciBQT1AgY29u bmVjdGlvbjogIgotCi0gIHNvY2sgPSBzb2NrZXQgKFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAw KTsKLSAgaWYgKHNvY2sgPCAwKQotICAgIHsKLSAgICAgIHNucHJpbnRmIChwb3BfZXJyb3Is IEVSUk9SX01BWCwgIiVzJXMiLAotCQlQT1BfU09DS0VUX0VSUk9SLCBzdHJlcnJvciAoZXJy bm8pKTsKLSAgICAgIHJldHVybiAoLTEpOwotCi0gICAgfQotCi0gIG1lbXNldCAoJmhpbnRz LCAwLCBzaXplb2YgKGhpbnRzKSk7Ci0gIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJF QU07Ci0gIGhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOwotICBoaW50cy5haV9mYW1p bHkgPSBBRl9JTkVUOwotICBkbwotICAgIHsKLSAgICAgIHJldCA9IGdldGFkZHJpbmZvICho b3N0LCBzZXJ2aWNlLCAmaGludHMsICZyZXMpOwotICAgICAgdHJ5X2NvdW50Kys7Ci0gICAg ICBpZiAocmV0ICE9IDAgJiYgKHJldCAhPSBFQUlfQUdBSU4gfHwgdHJ5X2NvdW50ID09IDUp KQotCXsKLQkgIHN0cmNweSAocG9wX2Vycm9yLCAiQ291bGQgbm90IGRldGVybWluZSBQT1Ag c2VydmVyJ3MgYWRkcmVzcyIpOwotCSAgcmV0dXJuICgtMSk7Ci0JfQotICAgIH0gd2hpbGUg KHJldCAhPSAwKTsKLQotICBmb3IgKGl0ID0gcmVzOyBpdDsgaXQgPSBpdC0+YWlfbmV4dCkK LSAgICBpZiAoaXQtPmFpX2FkZHJsZW4gPT0gc2l6ZW9mIGFkZHIpCi0gICAgICB7Ci0Jc3Ry dWN0IHNvY2thZGRyX2luICppbl9hID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBpdC0+YWlf YWRkcjsKLQlhZGRyLnNpbl9hZGRyID0gaW5fYS0+c2luX2FkZHI7Ci0JaWYgKCEgY29ubmVj dCAoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mIGFkZHIpKQotCSAg YnJlYWs7Ci0gICAgICB9Ci0gIGNvbm5lY3Rfb2sgPSBpdCAhPSBOVUxMOwotICBpZiAoY29u bmVjdF9vaykKLSAgICB7Ci0gICAgICByZWFsaG9zdCA9IGFsbG9jYSAoc3RybGVuIChpdC0+ YWlfY2Fub25uYW1lKSArIDEpOwotICAgICAgc3RyY3B5IChyZWFsaG9zdCwgaXQtPmFpX2Nh bm9ubmFtZSk7Ci0gICAgfQotICBmcmVlYWRkcmluZm8gKHJlcyk7Ci0KLSNkZWZpbmUgQ09O TkVDVF9FUlJPUiAiQ291bGQgbm90IGNvbm5lY3QgdG8gUE9QIHNlcnZlcjogIgotCi0gIGlm ICghIGNvbm5lY3Rfb2spCi0gICAgewotICAgICAgQ0xPU0VTT0NLRVQgKHNvY2spOwotICAg ICAgc25wcmludGYgKHBvcF9lcnJvciwgRVJST1JfTUFYLCAiJXMlcyIsIENPTk5FQ1RfRVJS T1IsIHN0cmVycm9yIChlcnJubykpOwotICAgICAgcmV0dXJuICgtMSk7Ci0KLSAgICB9Ci0K LSNpZmRlZiBLRVJCRVJPUwotCi0jZGVmaW5lIEtSQl9FUlJPUiAiS2VyYmVyb3MgZXJyb3Ig Y29ubmVjdGluZyB0byBQT1Agc2VydmVyOiAiCi0gIGlmICghIChmbGFncyAmIFBPUF9OT19L RVJCRVJPUykpCi0gICAgewotI2lmZGVmIEtFUkJFUk9TNQotICAgICAgcmVtID0ga3JiNV9p bml0X2NvbnRleHQgKCZrY29udGV4dCk7Ci0gICAgICBpZiAocmVtKQotCXsKLQlrcmI1ZXJy b3I6Ci0JICBpZiAoYXV0aF9jb250ZXh0KQotCSAgICBrcmI1X2F1dGhfY29uX2ZyZWUgKGtj b250ZXh0LCBhdXRoX2NvbnRleHQpOwotCSAgaWYgKGtjb250ZXh0KQotCSAgICBrcmI1X2Zy ZWVfY29udGV4dCAoa2NvbnRleHQpOwotCSAgc25wcmludGYgKHBvcF9lcnJvciwgRVJST1Jf TUFYLCAiJXMlcyIsCi0JCSAgICBLUkJfRVJST1IsIGVycm9yX21lc3NhZ2UgKHJlbSkpOwot CSAgQ0xPU0VTT0NLRVQgKHNvY2spOwotCSAgcmV0dXJuICgtMSk7Ci0JfQotCi0gICAgICBy ZW0gPSBrcmI1X2F1dGhfY29uX2luaXQgKGtjb250ZXh0LCAmYXV0aF9jb250ZXh0KTsKLSAg ICAgIGlmIChyZW0pCi0JZ290byBrcmI1ZXJyb3I7Ci0KLSAgICAgIHJlbSA9IGtyYjVfY2Nf ZGVmYXVsdCAoa2NvbnRleHQsICZjY2RlZik7Ci0gICAgICBpZiAocmVtKQotCWdvdG8ga3Ji NWVycm9yOwotCi0gICAgICByZW0gPSBrcmI1X2NjX2dldF9wcmluY2lwYWwgKGtjb250ZXh0 LCBjY2RlZiwgJmNsaWVudCk7Ci0gICAgICBpZiAocmVtKQotCWdvdG8ga3JiNWVycm9yOwot Ci0gICAgICBmb3IgKGNwID0gcmVhbGhvc3Q7ICpjcDsgY3ArKykKLQkqY3AgPSBjX3RvbG93 ZXIgKCpjcCk7Ci0KLSAgICAgIHJlbSA9IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsIChrY29u dGV4dCwgcmVhbGhvc3QsCi0JCQkJICAgICBQT1BfU0VSVklDRSwgRkFMU0UsICZzZXJ2ZXIp OwotICAgICAgaWYgKHJlbSkKLQlnb3RvIGtyYjVlcnJvcjsKLQotICAgICAgcmVtID0ga3Ji NV9zZW5kYXV0aCAoa2NvbnRleHQsICZhdXRoX2NvbnRleHQsCi0JCQkgICAoa3JiNV9wb2lu dGVyKSAmc29jaywgKGNoYXIgKikgIktQT1BWMS4wIiwKLQkJCSAgIGNsaWVudCwgc2VydmVy LAotCQkJICBBUF9PUFRTX01VVFVBTF9SRVFVSVJFRCwKLQkJCSAgMCwJLyogbm8gY2hlY2tz dW0gKi8KLQkJCSAgMCwJLyogbm8gY3JlZHMsIHVzZSBjY2FjaGUgaW5zdGVhZCAqLwotCQkJ ICBjY2RlZiwKLQkJCSAgJmVycl9yZXQsCi0JCQkgIDAsCS8qIGRvbid0IG5lZWQgc3Vic2Vz c2lvbiBrZXkgKi8KLQkJCSAgMCk7CS8qIGRvbid0IG5lZWQgcmVwbHkgKi8KLSAgICAgIGty YjVfZnJlZV9wcmluY2lwYWwgKGtjb250ZXh0LCBzZXJ2ZXIpOwotICAgICAgaWYgKHJlbSkK LQl7Ci0JICBpbnQgcG9wX2Vycm9yX2xlbiA9IHNucHJpbnRmIChwb3BfZXJyb3IsIEVSUk9S X01BWCwgIiVzJXMiLAotCQkJCQlLUkJfRVJST1IsIGVycm9yX21lc3NhZ2UgKHJlbSkpOwot I2lmIGRlZmluZWQgSEFWRV9LUkI1X0VSUk9SX1RFWFQKLQkgIGlmIChlcnJfcmV0ICYmIGVy cl9yZXQtPnRleHQubGVuZ3RoKQotCSAgICB7Ci0JICAgICAgaW50IGVycmxlbiA9IGVycl9y ZXQtPnRleHQubGVuZ3RoOwotCSAgICAgIHNucHJpbnRmIChwb3BfZXJyb3IgKyBwb3BfZXJy b3JfbGVuLCBFUlJPUl9NQVggLSBwb3BfZXJyb3JfbGVuLAotCQkJIiBbc2VydmVyIHNheXMg JyUuKnMnXSIsIGVycmxlbiwgZXJyX3JldC0+dGV4dC5kYXRhKTsKLQkgICAgfQotI2VsaWYg ZGVmaW5lZCBIQVZFX0tSQjVfRVJST1JfRV9URVhUCi0JICBpZiAoZXJyX3JldCAmJiBlcnJf cmV0LT5lX3RleHQgJiYgKiplcnJfcmV0LT5lX3RleHQpCi0JICAgIHNucHJpbnRmIChwb3Bf ZXJyb3IgKyBwb3BfZXJyb3JfbGVuLCBFUlJPUl9NQVggLSBwb3BfZXJyb3JfbGVuLAotCQkg ICAgICAiIFtzZXJ2ZXIgc2F5cyAnJXMnXSIsICplcnJfcmV0LT5lX3RleHQpOwotI2VuZGlm Ci0JICBpZiAoZXJyX3JldCkKLQkgICAga3JiNV9mcmVlX2Vycm9yIChrY29udGV4dCwgZXJy X3JldCk7Ci0JICBrcmI1X2F1dGhfY29uX2ZyZWUgKGtjb250ZXh0LCBhdXRoX2NvbnRleHQp OwotCSAga3JiNV9mcmVlX2NvbnRleHQgKGtjb250ZXh0KTsKLQotCSAgQ0xPU0VTT0NLRVQg KHNvY2spOwotCSAgcmV0dXJuICgtMSk7Ci0JfQotI2Vsc2UgIC8qICEgS0VSQkVST1M1ICov Ci0gICAgICB0aWNrZXQgPSAoS1RFWFQpIG1hbGxvYyAoc2l6ZW9mIChLVEVYVF9TVCkpOwot ICAgICAgcmVtID0ga3JiX3NlbmRhdXRoICgwTCwgc29jaywgdGlja2V0LCAicG9wIiwgcmVh bGhvc3QsCi0JCQkgIChjaGFyICopIGtyYl9yZWFsbW9maG9zdCAocmVhbGhvc3QpLAotCQkJ ICAodW5zaWduZWQgbG9uZykgMCwgJm1zZ19kYXRhLCAmY3JlZCwgc2NoZWR1bGUsCi0JCQkg IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgMCwKLQkJCSAgKHN0cnVjdCBzb2NrYWRkcl9pbiAq KSAwLAotCQkJICAiS1BPUFYwLjEiKTsKLSAgICAgIGZyZWUgKChjaGFyICopIHRpY2tldCk7 Ci0gICAgICBpZiAocmVtICE9IEtTVUNDRVNTKQotCXsKLQkgIHNucHJpbnRmIChwb3BfZXJy b3IsIEVSUk9SX01BWCwgIiVzJXMiLCBLUkJfRVJST1IsIGtyYl9lcnJfdHh0W3JlbV0pOwot CSAgQ0xPU0VTT0NLRVQgKHNvY2spOwotCSAgcmV0dXJuICgtMSk7Ci0JfQotI2VuZGlmIC8q IEtFUkJFUk9TNSAqLwotICAgIH0KLSNlbmRpZiAvKiBLRVJCRVJPUyAqLwotCi0gIHJldHVy biAoc29jayk7Ci19IC8qIHNvY2tldF9jb25uZWN0aW9uICovCi0KLS8qCi0gKiBGdW5jdGlv bjogcG9wX2dldGxpbmUKLSAqCi0gKiBQdXJwb3NlOiBHZXQgYSBsaW5lIG9mIHRleHQgZnJv bSB0aGUgY29ubmVjdGlvbiBhbmQgcmV0dXJuIGEKLSAqIAlwb2ludGVyIHRvIGl0LiAgVGhl IGNhcnJpYWdlIHJldHVybiBhbmQgbGluZWZlZWQgYXQgdGhlIGVuZCBvZgotICogCXRoZSBs aW5lIGFyZSBzdHJpcHBlZCwgYnV0IHBlcmlvZHMgYXQgdGhlIGJlZ2lubmluZ3Mgb2YgbGlu ZXMKLSAqIAlhcmUgTk9UIGRlYWx0IHdpdGggaW4gYW55IHNwZWNpYWwgd2F5LgotICoKLSAq IEFyZ3VtZW50czoKLSAqIAlzZXJ2ZXIJVGhlIHNlcnZlciBmcm9tIHdoaWNoIHRvIGdldCB0 aGUgbGluZSBvZiB0ZXh0LgotICoKLSAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgY2hhcmFj dGVycyBpbiB0aGUgbGluZSwgd2hpY2ggaXMgcmV0dXJuZWQgaW4KLSAqIAlMSU5FLCBub3Qg aW5jbHVkaW5nIHRoZSBmaW5hbCBudWxsLiAgQSByZXR1cm4gdmFsdWUgb2YgMAotICogCWlu ZGljYXRlcyBhIGJsYW5rIGxpbmUuICBBIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgYW4KLSAqIAllcnJvciAoaW4gd2hpY2ggY2FzZSB0aGUgY29udGVudHMgb2YgTElORSBh cmUgdW5kZWZpbmVkLiAgSW4KLSAqIAljYXNlIG9mIGVycm9yLCBhbiBlcnJvciBtZXNzYWdl IGlzIGNvcGllZCBpbnRvIHBvcF9lcnJvci4KLSAqCi0gKiBOb3RlczogVGhlIGxpbmUgcmV0 dXJuZWQgaXMgb3ZlcndyaXR0ZW4gd2l0aCBlYWNoIGNhbGwgdG8gcG9wX2dldGxpbmUuCi0g KgotICogU2lkZSBlZmZlY3RzOiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gb24gZXJyb3IuCi0g KgotICogVEhFIFJFVFVSTkVEIExJTkUgTUFZIENPTlRBSU4gRU1CRURERUQgTlVMTFMhCi0g Ki8KLXN0YXRpYyBpbnQKLXBvcF9nZXRsaW5lIChwb3BzZXJ2ZXIgc2VydmVyLCBjaGFyICoq bGluZSkKLXsKLSNkZWZpbmUgR0VUTElORV9FUlJPUiAiRXJyb3IgcmVhZGluZyBmcm9tIHNl cnZlcjogIgotCi0gIGludCByZXQ7Ci0gIGludCBzZWFyY2hfb2Zmc2V0ID0gMDsKLQotICBp ZiAoc2VydmVyLT5kYXRhKQotICAgIHsKLSAgICAgIGNoYXIgKmNwID0gZmluZF9jcmxmIChz ZXJ2ZXItPmJ1ZmZlciArIHNlcnZlci0+YnVmZmVyX2luZGV4LAotCQkJICAgIHNlcnZlci0+ ZGF0YSk7Ci0gICAgICBpZiAoY3ApCi0JewotCSAgaW50IGZvdW5kOwotCSAgaW50IGRhdGFf dXNlZDsKLQotCSAgZm91bmQgPSBzZXJ2ZXItPmJ1ZmZlcl9pbmRleDsKLQkgIGRhdGFfdXNl ZCA9IChjcCArIDIpIC0gc2VydmVyLT5idWZmZXIgLSBmb3VuZDsKLQotCSAgKmNwID0gJ1ww JzsJCS8qIHRlcm1pbmF0ZSB0aGUgc3RyaW5nIHRvIGJlIHJldHVybmVkICovCi0JICBzZXJ2 ZXItPmRhdGEgLT0gZGF0YV91c2VkOwotCSAgc2VydmVyLT5idWZmZXJfaW5kZXggKz0gZGF0 YV91c2VkOwotCi0JICBpZiAocG9wX2RlYnVnKQotCSAgICAvKiBFbWJlZGRlZCBudWxscyB3 aWxsIHRydW5jYXRlIHRoaXMgb3V0cHV0IHByZW1hdHVyZWx5LAotCSAgICAgICBidXQgdGhh dCdzIE9LIGJlY2F1c2UgaXQncyBqdXN0IGZvciBkZWJ1Z2dpbmcgYW55d2F5LiAqLwotCSAg ICBmcHJpbnRmIChzdGRlcnIsICI8PDwgJXNcbiIsIHNlcnZlci0+YnVmZmVyICsgZm91bmQp OwotCSAgKmxpbmUgPSBzZXJ2ZXItPmJ1ZmZlciArIGZvdW5kOwotCSAgcmV0dXJuIChkYXRh X3VzZWQgLSAyKTsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgbWVtbW92ZSAoc2VydmVyLT5i dWZmZXIsIHNlcnZlci0+YnVmZmVyICsgc2VydmVyLT5idWZmZXJfaW5kZXgsCi0JCSAgIHNl cnZlci0+ZGF0YSk7Ci0JICAvKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBzZWFyY2hl ZCB0aGUgZGF0YSBhbHJlYWR5IGluCi0gICAgICAgICAgICAgdGhlIGJ1ZmZlciBmb3IgYSBD UkxGLCBzbyB0aGF0IHdoZW4gd2Ugc2VhcmNoIGJlbG93LCB3ZQotICAgICAgICAgICAgIGRv bid0IGhhdmUgdG8gc2VhcmNoIHRoZSBzYW1lIGRhdGEgdHdpY2UuICBUaGVyZSdzIGEgIi0K LSAgICAgICAgICAgICAxIiBoZXJlIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgdGhl IGxhc3QgY2hhcmFjdGVyCi0gICAgICAgICAgICAgb2YgdGhlIGRhdGEgd2UgaGF2ZSBtYXkg YmUgdGhlIENSIG9mIGEgQ1JMRiBwYWlyLCBvZgotICAgICAgICAgICAgIHdoaWNoIHdlIGhh dmVuJ3QgcmVhZCB0aGUgc2Vjb25kIGhhbGYgeWV0LCBzbyB3ZSBtYXkgaGF2ZQotICAgICAg ICAgICAgIHRvIHNlYXJjaCBpdCBhZ2FpbiB3aGVuIHdlIHJlYWQgbW9yZSBkYXRhLiAqLwot CSAgc2VhcmNoX29mZnNldCA9IHNlcnZlci0+ZGF0YSAtIDE7Ci0JICBzZXJ2ZXItPmJ1ZmZl cl9pbmRleCA9IDA7Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHNlcnZlci0+ YnVmZmVyX2luZGV4ID0gMDsKLSAgICB9Ci0KLSAgd2hpbGUgKDEpCi0gICAgewotICAgICAg LyogVGhlcmUncyBhICItIDEiIGhlcmUgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIG51bGwgdGhh dCB3ZSBwdXQKLSAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIHJlYWQgZGF0YSBiZWxvdy4g IFdlIHB1dCB0aGUgbnVsbCB0aGVyZSBzbwotICAgICAgICAgdGhhdCBmaW5kX2NybGYga25v d3Mgd2hlcmUgdG8gc3RvcCB3aGVuIHdlIGNhbGwgaXQuICovCi0gICAgICBpZiAoc2VydmVy LT5kYXRhID09IHNlcnZlci0+YnVmZmVyX3NpemUgLSAxKQotCXsKLQkgIHNlcnZlci0+YnVm ZmVyX3NpemUgKz0gR0VUTElORV9JTkNSOwotCSAgc2VydmVyLT5idWZmZXIgPSAoY2hhciAq KXJlYWxsb2MgKHNlcnZlci0+YnVmZmVyLCBzZXJ2ZXItPmJ1ZmZlcl9zaXplKTsKLQkgIGlm ICghIHNlcnZlci0+YnVmZmVyKQotCSAgICB7Ci0JICAgICAgc3RyY3B5IChwb3BfZXJyb3Is ICJPdXQgb2YgbWVtb3J5IGluIHBvcF9nZXRsaW5lIik7Ci0JICAgICAgcG9wX3RyYXNoIChz ZXJ2ZXIpOwotCSAgICAgIHJldHVybiAoLTEpOwotCSAgICB9Ci0JfQotICAgICAgcmV0ID0g UkVDViAoc2VydmVyLT5maWxlLCBzZXJ2ZXItPmJ1ZmZlciArIHNlcnZlci0+ZGF0YSwKLQkJ ICBzZXJ2ZXItPmJ1ZmZlcl9zaXplIC0gc2VydmVyLT5kYXRhIC0gMSwgMCk7Ci0gICAgICBp ZiAocmV0IDwgMCkKLQl7Ci0JICBzbnByaW50ZiAocG9wX2Vycm9yLCBFUlJPUl9NQVgsICIl cyVzIiwKLQkJICAgIEdFVExJTkVfRVJST1IsIHN0cmVycm9yIChlcnJubykpOwotCSAgcG9w X3RyYXNoIChzZXJ2ZXIpOwotCSAgcmV0dXJuICgtMSk7Ci0JfQotICAgICAgZWxzZSBpZiAo cmV0ID09IDApCi0JewotCSAgc3RyY3B5IChwb3BfZXJyb3IsICJVbmV4cGVjdGVkIEVPRiBm cm9tIHNlcnZlciBpbiBwb3BfZ2V0bGluZSIpOwotCSAgcG9wX3RyYXNoIChzZXJ2ZXIpOwot CSAgcmV0dXJuICgtMSk7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIGNoYXIgKmNwOwotCSAg c2VydmVyLT5kYXRhICs9IHJldDsKLQkgIHNlcnZlci0+YnVmZmVyW3NlcnZlci0+ZGF0YV0g PSAnXDAnOwotCi0JICBjcCA9IGZpbmRfY3JsZiAoc2VydmVyLT5idWZmZXIgKyBzZWFyY2hf b2Zmc2V0LAotCQkJICBzZXJ2ZXItPmRhdGEgLSBzZWFyY2hfb2Zmc2V0KTsKLQkgIGlmIChj cCkKLQkgICAgewotCSAgICAgIGludCBkYXRhX3VzZWQgPSAoY3AgKyAyKSAtIHNlcnZlci0+ YnVmZmVyOwotCSAgICAgICpjcCA9ICdcMCc7Ci0JICAgICAgc2VydmVyLT5kYXRhIC09IGRh dGFfdXNlZDsKLQkgICAgICBzZXJ2ZXItPmJ1ZmZlcl9pbmRleCA9IGRhdGFfdXNlZDsKLQot CSAgICAgIGlmIChwb3BfZGVidWcpCi0JCWZwcmludGYgKHN0ZGVyciwgIjw8PCAlc1xuIiwg c2VydmVyLT5idWZmZXIpOwotCSAgICAgICpsaW5lID0gc2VydmVyLT5idWZmZXI7Ci0JICAg ICAgcmV0dXJuIChkYXRhX3VzZWQgLSAyKTsKLQkgICAgfQotCSAgLyogQXMgYWJvdmUsIHRo ZSAiLSAxIiBoZXJlIGlzIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQKLQkgICAgIHdl IG1heSBoYXZlIHJlYWQgYSBDUiB3aXRob3V0IGl0cyBhY2NvbXBhbnlpbmcgTEYuICovCi0J ICBzZWFyY2hfb2Zmc2V0ICs9IHJldCAtIDE7Ci0JfQotICAgIH0KLQotICAvKiBOT1RSRUFD SEVEICovCi19Ci0KLS8qCi0gKiBGdW5jdGlvbjogc2VuZGxpbmUKLSAqCi0gKiBQdXJwb3Nl OiBTZW5kcyBhIGxpbmUgb2YgdGV4dCB0byB0aGUgUE9QIHNlcnZlci4gIFRoZSBsaW5lIG9m IHRleHQKLSAqIAlwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBOT1QgaGF2ZSB0 aGUgY2FycmlhZ2UgcmV0dXJuCi0gKiAJYW5kIGxpbmVmZWVkIG9uIHRoZSBlbmQgb2YgaXQu ICBQZXJpb2RzIGF0IGJlZ2lubmluZ3Mgb2YgbGluZXMKLSAqIAl3aWxsIE5PVCBiZSB0cmVh dGVkIHNwZWNpYWxseSBieSB0aGlzIGZ1bmN0aW9uLgotICoKLSAqIEFyZ3VtZW50czoKLSAq IAlzZXJ2ZXIJVGhlIHNlcnZlciB0byB3aGljaCB0byBzZW5kIHRoZSB0ZXh0LgotICogCWxp bmUJVGhlIGxpbmUgb2YgdGV4dCB0byBzZW5kLgotICoKLSAqIFJldHVybiB2YWx1ZTogVXBv biBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGEgdmFsdWUgb2YgMCB3aWxsIGJlCi0gKiAJcmV0 dXJuZWQuICBPdGhlcndpc2UsIGEgbm9uLXplcm8gdmFsdWUgd2lsbCBiZSByZXR1cm5lZCwg YW5kCi0gKiAJYW4gZXJyb3Igd2lsbCBiZSBjb3BpZWQgaW50byBwb3BfZXJyb3IuCi0gKgot ICogU2lkZSBlZmZlY3RzOiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gb24gZXJyb3IuCi0gKi8K LXN0YXRpYyBpbnQKLXNlbmRsaW5lIChwb3BzZXJ2ZXIgc2VydmVyLCBjb25zdCBjaGFyICps aW5lKQotewotI2RlZmluZSBTRU5ETElORV9FUlJPUiAiRXJyb3Igd3JpdGluZyB0byBQT1Ag c2VydmVyOiAiCi0gIGludCByZXQ7Ci0gIGNoYXIgKmJ1ZjsKLQotICAvKiBDb21iaW5lIHRo ZSBzdHJpbmcgYW5kIHRoZSBDUi1MRiBpbnRvIG9uZSBidWZmZXIuICBPdGhlcndpc2UsIHR3 bwotICAgICByZWFzb25hYmxlIG5ldHdvcmsgc3RhY2sgb3B0aW1pemF0aW9ucywgTmFnbGUn cyBhbGdvcml0aG0gYW5kCi0gICAgIGRlbGF5ZWQgYWNrcywgY29tYmluZSB0byBkZWxheSB1 cyBhIGZyYWN0aW9uIG9mIGEgc2Vjb25kIG9uIGV2ZXJ5Ci0gICAgIG1lc3NhZ2Ugd2Ugc2Vu ZC4gIChNb3ZlbWFpbCB3cml0ZXMgbGluZSB3aXRob3V0IFxyXG4sIGNsaWVudAotICAgICBr ZXJuZWwgc2VuZHMgcGFja2V0LCBzZXJ2ZXIga2VybmVsIGRlbGF5cyB0aGUgYWNrIHRvIHNl ZSBpZiBpdAotICAgICBjYW4gY29tYmluZSBpdCB3aXRoIGRhdGEsIG1vdmVtYWlsIHdyaXRl cyBcclxuLCBjbGllbnQga2VybmVsCi0gICAgIHdhaXRzIGJlY2F1c2UgaXQgaGFzIHVuYWNr ZWQgZGF0YSBhbHJlYWR5IGluIGl0cyBvdXRnb2luZyBxdWV1ZSwKLSAgICAgY2xpZW50IGtl cm5lbCBldmVudHVhbGx5IHRpbWVzIG91dCBhbmQgc2VuZHMuKQotCi0gICAgIFRoaXMgY2Fu IGJlIHNvbWV0aGluZyBsaWtlIDAuMnMgcGVyIGNvbW1hbmQsIHdoaWNoIGNhbiBhZGQgdXAK LSAgICAgb3ZlciBhIGZldyBkb3plbiBtZXNzYWdlcywgYW5kIGlzIGEgYmlnIGNodW5rIG9m IHRoZSB0aW1lIHdlCi0gICAgIHNwZW5kIGZldGNoaW5nIG1haWwgZnJvbSBhIHNlcnZlciBj bG9zZSBieS4gICovCi0gIGJ1ZiA9IGFsbG9jYSAoc3RybGVuIChsaW5lKSArIDMpOwotICBz dHJjcHkgKHN0cGNweSAoYnVmLCBsaW5lKSwgIlxyXG4iKTsKLSAgcmV0ID0gZnVsbHdyaXRl IChzZXJ2ZXItPmZpbGUsIGJ1Ziwgc3RybGVuIChidWYpKTsKLQotICBpZiAocmV0IDwgMCkK LSAgICB7Ci0gICAgICBwb3BfdHJhc2ggKHNlcnZlcik7Ci0gICAgICBzbnByaW50ZiAocG9w X2Vycm9yLCBFUlJPUl9NQVgsICIlcyVzIiwgU0VORExJTkVfRVJST1IsIHN0cmVycm9yIChl cnJubykpOwotICAgICAgcmV0dXJuIChyZXQpOwotICAgIH0KLQotICBpZiAocG9wX2RlYnVn KQotICAgIGZwcmludGYgKHN0ZGVyciwgIj4+PiAlc1xuIiwgbGluZSk7Ci0KLSAgcmV0dXJu ICgwKTsKLX0KLQotLyoKLSAqIFByb2NlZHVyZTogZnVsbHdyaXRlCi0gKgotICogUHVycG9z ZTogSnVzdCBsaWtlIHdyaXRlLCBidXQga2VlcHMgdHJ5aW5nIHVudGlsIHRoZSBlbnRpcmUg c3RyaW5nCi0gKiAJaGFzIGJlZW4gd3JpdHRlbi4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IFNh bWUgYXMgd3JpdGUuICBQb3BfZXJyb3IgaXMgbm90IHNldC4KLSAqLwotc3RhdGljIGludAot ZnVsbHdyaXRlIChpbnQgZmQsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykKLXsKLSAgY2hhciAq Y3A7Ci0gIGludCByZXQgPSAwOwotCi0gIGNwID0gYnVmOwotICB3aGlsZSAobmJ5dGVzICYm ICgocmV0ID0gU0VORCAoZmQsIGNwLCBuYnl0ZXMsIDApKSA+IDApKQotICAgIHsKLSAgICAg IGNwICs9IHJldDsKLSAgICAgIG5ieXRlcyAtPSByZXQ7Ci0gICAgfQotCi0gIHJldHVybiAo cmV0KTsKLX0KLQotLyoKLSAqIFByb2NlZHVyZSBnZXRvawotICoKLSAqIFB1cnBvc2U6IFJl YWRzIGEgbGluZSBmcm9tIHRoZSBzZXJ2ZXIuICBJZiB0aGUgcmV0dXJuIGluZGljYXRvciBp cwotICogCXBvc2l0aXZlLCByZXR1cm4gd2l0aCBhIHplcm8gZXhpdCBzdGF0dXMuICBJZiBu b3QsIHJldHVybiB3aXRoCi0gKiAJYSBuZWdhdGl2ZSBleGl0IHN0YXR1cy4KLSAqCi0gKiBB cmd1bWVudHM6Ci0gKiAJc2VydmVyCVRoZSBzZXJ2ZXIgdG8gcmVhZCBmcm9tLgotICoKLSAq IFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MsIGVsc2UgZm9yIGZhaWx1cmUgYW5kIHB1dHMgZXJy b3IgaW4gcG9wX2Vycm9yLgotICoKLSAqIFNpZGUgZWZmZWN0czogT24gZmFpbHVyZSwgbWF5 IG1ha2UgdGhlIGNvbm5lY3Rpb24gdW51c2FibGUuCi0gKi8KLXN0YXRpYyBpbnQKLWdldG9r IChwb3BzZXJ2ZXIgc2VydmVyKQotewotICBjaGFyICpmcm9tbGluZTsKLQotICBpZiAocG9w X2dldGxpbmUgKHNlcnZlciwgJmZyb21saW5lKSA8IDApCi0gICAgewotICAgICAgcmV0dXJu ICgtMSk7Ci0gICAgfQotCi0gIGlmICghIHN0cm5jbXAgKGZyb21saW5lLCAiK09LIiwgMykp Ci0gICAgcmV0dXJuICgwKTsKLSAgZWxzZSBpZiAoISBzdHJuY21wIChmcm9tbGluZSwgIi1F UlIiLCA0KSkKLSAgICB7Ci0gICAgICBzbnByaW50ZiAocG9wX2Vycm9yLCBFUlJPUl9NQVgs ICIlcyIsIGZyb21saW5lKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgZWxzZQot ICAgIHsKLSAgICAgIHN0cmNweSAocG9wX2Vycm9yLAotCSAgICAgICJVbmV4cGVjdGVkIHJl c3BvbnNlIGZyb20gc2VydmVyOyBleHBlY3RpbmcgK09LIG9yIC1FUlIiKTsKLSAgICAgIHBv cF90cmFzaCAoc2VydmVyKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLX0KLQotI2lm IDAKLS8qCi0gKiBGdW5jdGlvbjogZ2V0dGVybWluYXRpb24KLSAqCi0gKiBQdXJwb3NlOiBH ZXRzIHRoZSBuZXh0IGxpbmUgYW5kIHZlcmlmaWVzIHRoYXQgaXQgaXMgYSB0ZXJtaW5hdGlv bgotICogCWxpbmUgKG5vdGhpbmcgYnV0IGEgZG90KS4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6 IDAgb24gc3VjY2Vzcywgbm9uLXplcm8gd2l0aCBwb3BfZXJyb3Igc2V0IG9uIGVycm9yLgot ICoKLSAqIFNpZGUgZWZmZWN0czogQ2xvc2VzIHRoZSBjb25uZWN0aW9uIG9uIGVycm9yLgot ICovCi1zdGF0aWMgaW50Ci1nZXR0ZXJtaW5hdGlvbiAoc2VydmVyKQotICAgICBwb3BzZXJ2 ZXIgc2VydmVyOwotewotICBjaGFyICpmcm9tc2VydmVyOwotCi0gIGlmIChwb3BfZ2V0bGlu ZSAoc2VydmVyLCAmZnJvbXNlcnZlcikgPCAwKQotICAgIHJldHVybiAoLTEpOwotCi0gIGlm IChzdHJjbXAgKGZyb21zZXJ2ZXIsICIuIikpCi0gICAgewotICAgICAgc3RyY3B5IChwb3Bf ZXJyb3IsCi0JICAgICAgIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgaW4gZ2V0 dGVybWluYXRpb24iKTsKLSAgICAgIHBvcF90cmFzaCAoc2VydmVyKTsKLSAgICAgIHJldHVy biAoLTEpOwotICAgIH0KLQotICByZXR1cm4gKDApOwotfQotI2VuZGlmCi0KLS8qCi0gKiBG dW5jdGlvbiBwb3BfY2xvc2UKLSAqCi0gKiBQdXJwb3NlOiBDbG9zZSBhIHBvcCBjb25uZWN0 aW9uLCBzZW5kaW5nIGEgIlJTRVQiIGNvbW1hbmQgdG8gdHJ5IHRvCi0gKiAJcHJlc2VydmUg YW55IGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgYW5kIGEgIlFVSVQiIGNvbW1hbmQgdG8KLSAq IAl0cnkgdG8gZ2V0IHRoZSBzZXJ2ZXIgdG8gcXVpdCwgYnV0IGlnbm9yaW5nIGFueSByZXNw b25zZXMgdGhhdAotICogCWFyZSByZWNlaXZlZC4KLSAqCi0gKiBTaWRlIGVmZmVjdHM6IFRo ZSBzZXJ2ZXIgaXMgdW51c2FibGUgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICog CUNoYW5nZXMgbWFkZSB0byB0aGUgbWFpbGRyb3Agc2luY2UgdGhlIHNlc3Npb24gd2FzIHN0 YXJ0ZWQgKG9yCi0gKiAJc2luY2UgdGhlIGxhc3QgcG9wX3Jlc2V0KSBtYXkgYmUgbG9zdC4K LSAqLwotdm9pZAotcG9wX2Nsb3NlIChwb3BzZXJ2ZXIgc2VydmVyKQotewotICBwb3BfdHJh c2ggKHNlcnZlcik7Ci0gIGZyZWUgKChjaGFyICopIHNlcnZlcik7Ci0KLSAgcmV0dXJuOwot fQotCi0vKgotICogRnVuY3Rpb246IHBvcF90cmFzaAotICoKLSAqIFB1cnBvc2U6IExpa2Ug cG9wX2Nsb3NlIG9yIHBvcF9xdWl0LCBidXQgZG9lc24ndCBkZWFsbG9jYXRlIHRoZQotICog CW1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlcnZlci4gIEl0IGlzIHZhbGlkIHRvIGNh bGwKLSAqIAlwb3BfY2xvc2Ugb3IgcG9wX3F1aXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBoYXMg YmVlbiBjYWxsZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1wb3BfdHJhc2ggKHBvcHNlcnZlciBz ZXJ2ZXIpCi17Ci0gIGlmIChzZXJ2ZXItPmZpbGUgPj0gMCkKLSAgICB7Ci0gICAgICAvKiBh dm9pZCByZWN1cnNpb247IHNlbmRsaW5lIGNhbiBjYWxsIHBvcF90cmFzaCAqLwotICAgICAg aWYgKHNlcnZlci0+dHJhc2hfc3RhcnRlZCkKLQlyZXR1cm47Ci0gICAgICBzZXJ2ZXItPnRy YXNoX3N0YXJ0ZWQgPSB0cnVlOwotCi0gICAgICBzZW5kbGluZSAoc2VydmVyLCAiUlNFVCIp OwotICAgICAgc2VuZGxpbmUgKHNlcnZlciwgIlFVSVQiKTsKLQotICAgICAgQ0xPU0VTT0NL RVQgKHNlcnZlci0+ZmlsZSk7Ci0gICAgICBzZXJ2ZXItPmZpbGUgPSAtMTsKLSAgICAgIGlm IChzZXJ2ZXItPmJ1ZmZlcikKLQl7Ci0JICBmcmVlIChzZXJ2ZXItPmJ1ZmZlcik7Ci0JICBz ZXJ2ZXItPmJ1ZmZlciA9IDA7Ci0JfQotICAgIH0KLQotI2lmZGVmIFdJTkRPV1NOVAotICBp ZiAoaGF2ZV93aW5zb2NrKQotICAgIFdTQUNsZWFudXAgKCk7Ci0jZW5kaWYKLX0KLQotLyog UmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgQ1JMRiBpbiBJTl9TVFJJTkcsIHdoaWNo IGNhbiBjb250YWluCi0gICBlbWJlZGRlZCBudWxscyBhbmQgaGFzIExFTiBjaGFyYWN0ZXJz IGluIGl0IG5vdCBpbmNsdWRpbmcgdGhlIGZpbmFsCi0gICBudWxsLCBvciAwIGlmIGl0IGRv ZXMgbm90IGNvbnRhaW4gb25lLiAgKi8KLQotc3RhdGljIGNoYXIgKgotZmluZF9jcmxmIChj aGFyICppbl9zdHJpbmcsIGludCBsZW4pCi17Ci0gIHdoaWxlIChsZW4tLSkKLSAgICB7Ci0g ICAgICBpZiAoKmluX3N0cmluZyA9PSAnXHInKQotCXsKLQkgIGlmICgqKytpbl9zdHJpbmcg PT0gJ1xuJykKLQkgICAgcmV0dXJuIChpbl9zdHJpbmcgLSAxKTsKLQl9Ci0gICAgICBlbHNl Ci0JaW5fc3RyaW5nKys7Ci0gICAgfQotICByZXR1cm4gKDApOwotfQotCi0jaWZkZWYgV0lO RE9XU05UCi0vKiBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJs ZSBzaW5jZSBYUCwgc28gd2UgbG9hZAotICAgdGhlbSBkeW5hbWljYWxseSBhbmQgcHJvdmlk ZSBmYWxsYmFja3MuICAqLwotCi1pbnQgKFdJTkFQSSAqcGZuX2dldGFkZHJpbmZvKSAoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGFkZHJp bmZvICosIHN0cnVjdCBhZGRyaW5mbyAqKik7Ci12b2lkIChXSU5BUEkgKnBmbl9mcmVlYWRk cmluZm8pIChzdHJ1Y3QgYWRkcmluZm8gKik7Ci0KLXN0YXRpYyBpbnQKLWxvYWRfd3MyICh2 b2lkKQotewotICBzdGF0aWMgaW50IHdzMl9sb2FkZWQgPSAwOwotCi0gIGlmICghd3MyX2xv YWRlZCkKLSAgICB7Ci0gICAgICBIQU5ETEUgd3MyX2xpYiA9IExvYWRMaWJyYXJ5ICgiV3My XzMyLmRsbCIpOwotCi0gICAgICBpZiAod3MyX2xpYiAhPSBOVUxMKQotCXsKLQkgIHdzMl9s b2FkZWQgPSAxOwotCSAgcGZuX2dldGFkZHJpbmZvID0gKHZvaWQgKikgR2V0UHJvY0FkZHJl c3MgKHdzMl9saWIsICJnZXRhZGRyaW5mbyIpOwotCSAgcGZuX2ZyZWVhZGRyaW5mbyA9ICh2 b2lkICopIEdldFByb2NBZGRyZXNzICh3czJfbGliLCAiZnJlZWFkZHJpbmZvIik7Ci0JICAv KiBQYXJhbm9pYTogdGhlc2UgdHdvIGZ1bmN0aW9ucyBzaG91bGQgZ28gdG9nZXRoZXIsIHNv IGlmCi0JICAgICBvbmUgaXMgYWJzZW50LCB3ZSBjYW5ub3QgdXNlIHRoZSBvdGhlci4gICov Ci0JICBpZiAocGZuX2dldGFkZHJpbmZvID09IE5VTEwpCi0JICAgIHBmbl9mcmVlYWRkcmlu Zm8gPSBOVUxMOwotCSAgZWxzZSBpZiAocGZuX2ZyZWVhZGRyaW5mbyA9PSBOVUxMKQotCSAg ICBwZm5fZ2V0YWRkcmluZm8gPSBOVUxMOwotCX0KLSAgICB9Ci0gIGlmICghd3MyX2xvYWRl ZCkKLSAgICB7Ci0gICAgICBlcnJubyA9IEVORVRET1dOOwotICAgICAgcmV0dXJuIC0xOwot ICAgIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLQotaW50Ci1zeXNfZ2V0YWRkcmluZm8gKGNvbnN0 IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCi0JCSBjb25zdCBzdHJ1Y3QgYWRk cmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCi17Ci0gIGludCByYzsKLQot ICBpZiAobG9hZF93czIgKCkgIT0gMCkKLSAgICB7Ci0gICAgICBlcnJubyA9IEVORVRET1dO OwotICAgICAgcmV0dXJuIFdTQU5PX1JFQ09WRVJZOwotICAgIH0KLQotICBpZiAocGZuX2dl dGFkZHJpbmZvKQotICAgIHJjID0gcGZuX2dldGFkZHJpbmZvIChub2RlLCBzZXJ2aWNlLCBo aW50cywgcmVzKTsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCBwb3J0ID0gMDsKLSAgICAg IHN0cnVjdCBob3N0ZW50ICpob3N0X2luZm87Ci0gICAgICBzdHJ1Y3QgZ2FpX3N0b3JhZ2Ug ewotCXN0cnVjdCBhZGRyaW5mbyBhZGRyaW5mbzsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc29j a2FkZHJfaW47Ci0gICAgICB9ICpnYWlfc3RvcmFnZTsKLQotICAgICAgLyogV2UgZG9uJ3Qg c3VwcG9ydCBhbnkgZmxhZ3MgYmVzaWRlcyBBSV9DQU5PTk5BTUUuICAqLwotICAgICAgaWYg KGhpbnRzICYmIChoaW50cy0+YWlfZmxhZ3MgJiB+KEFJX0NBTk9OTkFNRSkpICE9IDApCi0J cmV0dXJuIFdTQUVJTlZBTDsKLSAgICAgIC8qIE5PREUgY2Fubm90IGJlIE5VTEwsIHNpbmNl IHBvcC5jIGhhcyBmYWxsYmFja3MgZm9yIHRoYXQuICAqLwotICAgICAgaWYgKCFub2RlKQot CXJldHVybiBXU0FIT1NUX05PVF9GT1VORDsKLQotICAgICAgaWYgKHNlcnZpY2UpCi0Jewot CSAgY29uc3QgY2hhciAqcHJvdG9jb2wgPQotCSAgICAoaGludHMgJiYgaGludHMtPmFpX3Nv Y2t0eXBlID09IFNPQ0tfREdSQU0pID8gInVkcCIgOiAidGNwIjsKLQkgIHN0cnVjdCBzZXJ2 ZW50ICpzcnYgPSBnZXRzZXJ2YnluYW1lIChzZXJ2aWNlLCBwcm90b2NvbCk7Ci0KLQkgIGlm IChzcnYpCi0JICAgIHBvcnQgPSBzcnYtPnNfcG9ydDsKLQkgIGVsc2UKLQkgICAgcmV0dXJu IFdTQUhPU1RfTk9UX0ZPVU5EOwotCX0KLQotICAgICAgZ2FpX3N0b3JhZ2UgPSBjYWxsb2Mg KDEsIHNpemVvZiAqZ2FpX3N0b3JhZ2UpOwotICAgICAgZ2FpX3N0b3JhZ2UtPnNvY2thZGRy X2luLnNpbl9wb3J0ID0gcG9ydDsKLSAgICAgIGhvc3RfaW5mbyA9IGdldGhvc3RieW5hbWUg KG5vZGUpOwotICAgICAgaWYgKGhvc3RfaW5mbykKLQl7Ci0JICBtZW1jcHkgKCZnYWlfc3Rv cmFnZS0+c29ja2FkZHJfaW4uc2luX2FkZHIsCi0JCSAgaG9zdF9pbmZvLT5oX2FkZHIsIGhv c3RfaW5mby0+aF9sZW5ndGgpOwotCSAgZ2FpX3N0b3JhZ2UtPnNvY2thZGRyX2luLnNpbl9m YW1pbHkgPSBob3N0X2luZm8tPmhfYWRkcnR5cGU7Ci0JfQotICAgICAgZWxzZQotCXsKLQkg IGZyZWUgKGdhaV9zdG9yYWdlKTsKLQkgIHJldHVybiBXU0FIT1NUX05PVF9GT1VORDsKLQl9 Ci0KLSAgICAgIGdhaV9zdG9yYWdlLT5hZGRyaW5mby5haV9hZGRyID0KLQkoc3RydWN0IHNv Y2thZGRyICopJmdhaV9zdG9yYWdlLT5zb2NrYWRkcl9pbjsKLSAgICAgIGdhaV9zdG9yYWdl LT5hZGRyaW5mby5haV9hZGRybGVuID0gc2l6ZW9mIChnYWlfc3RvcmFnZS0+c29ja2FkZHJf aW4pOwotICAgICAgaWYgKGhpbnRzICYmIChoaW50cy0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5B TUUpICE9IDApCi0JewotCSAgZ2FpX3N0b3JhZ2UtPmFkZHJpbmZvLmFpX2Nhbm9ubmFtZSA9 IHN0cmR1cCAoaG9zdF9pbmZvLT5oX25hbWUpOwotCSAgaWYgKCFnYWlfc3RvcmFnZS0+YWRk cmluZm8uYWlfY2Fub25uYW1lKQotCSAgICB7Ci0JICAgICAgZnJlZSAoZ2FpX3N0b3JhZ2Up OwotCSAgICAgIHJldHVybiBXU0FfTk9UX0VOT1VHSF9NRU1PUlk7Ci0JICAgIH0KLQl9Ci0g ICAgICBnYWlfc3RvcmFnZS0+YWRkcmluZm8uYWlfcHJvdG9jb2wgPSAoaGludHMpID8gaGlu dHMtPmFpX3Byb3RvY29sIDogMDsKLSAgICAgIGdhaV9zdG9yYWdlLT5hZGRyaW5mby5haV9z b2NrdHlwZSA9IChoaW50cykgPyBoaW50cy0+YWlfc29ja3R5cGUgOiAwOwotICAgICAgZ2Fp X3N0b3JhZ2UtPmFkZHJpbmZvLmFpX2ZhbWlseSA9IGdhaV9zdG9yYWdlLT5zb2NrYWRkcl9p bi5zaW5fZmFtaWx5OwotICAgICAgZ2FpX3N0b3JhZ2UtPmFkZHJpbmZvLmFpX25leHQgPSBO VUxMOwotCi0gICAgICAqcmVzID0gJmdhaV9zdG9yYWdlLT5hZGRyaW5mbzsKLSAgICAgIHJj ID0gMDsKLSAgICB9Ci0KLSAgcmV0dXJuIHJjOwotfQotCi12b2lkCi1zeXNfZnJlZWFkZHJp bmZvIChzdHJ1Y3QgYWRkcmluZm8gKmFpKQotewotICBpZiAobG9hZF93czIgKCkgIT0gMCkK LSAgICB7Ci0gICAgICBlcnJubyA9IEVORVRET1dOOwotICAgICAgcmV0dXJuOwotICAgIH0K LQotICBpZiAocGZuX2ZyZWVhZGRyaW5mbykKLSAgICBwZm5fZnJlZWFkZHJpbmZvIChhaSk7 Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoYWktPmFpX2Nhbm9ubmFtZSkKLQlmcmVlIChh aS0+YWlfY2Fub25uYW1lKTsKLSAgICAgIGZyZWUgKGFpKTsKLSAgICB9Ci19Ci0jZW5kaWYJ LyogV0lORE9XU05UICovCi0jZW5kaWYgLyogTUFJTF9VU0VfUE9QICovCmRpZmYgLS1naXQg YS9saWItc3JjL3BvcC5oIGIvbGliLXNyYy9wb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNDc0Y2YxYS4uMDAwMDAwMAotLS0gYS9saWItc3JjL3BvcC5oCisrKyAvZGV2 L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyogcG9wLmg6IEhlYWRlciBmaWxlIGZvciB0aGUg InBvcC5jIiBjbGllbnQgUE9QMyBwcm90b2NvbC4KLSAgIENvcHlyaWdodCAoQykgMTk5MSwg MTk5MywgMjAwMS0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi1BdXRo b3I6ICBKb25hdGhhbiBLYW1lbnMgPGppa0BzZWN1cml0eS5vdi5jb20+Ci0KLVRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQKLXlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot R05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggR05VIEVtYWNz LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQot Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2RlZmluZSBHRVRMSU5FX01JTiAxMDI0CS8qIHRo ZSBnZXRsaW5lIGJ1ZmZlciBzdGFydHMgb3V0IHRoaXMgKi8KLQkJCQkvKiBzaXplICovCi0j ZGVmaW5lIEdFVExJTkVfSU5DUiAxMDI0CS8qIHRoZSBnZXRsaW5lIGJ1ZmZlciBpcyBncm93 biBieSB0aGlzICovCi0JCQkJLyogc2l6ZSB3aGVuIGl0IG5lZWRzIHRvIGdyb3cgKi8KLQot ZXh0ZXJuIGNoYXIgcG9wX2Vycm9yW107Ci1leHRlcm4gYm9vbCBwb3BfZGVidWc7Ci0KLXN0 cnVjdCBfcG9wc2VydmVyCi17Ci0gIGludCBmaWxlLCBkYXRhOwotICBjaGFyICpidWZmZXI7 Ci0gIGludCBidWZmZXJfc2l6ZSwgYnVmZmVyX2luZGV4OwotICBib29sX2JmIGluX211bHRp IDogMTsKLSAgYm9vbF9iZiB0cmFzaF9zdGFydGVkIDogMTsKLX07Ci0KLXR5cGVkZWYgc3Ry dWN0IF9wb3BzZXJ2ZXIgKnBvcHNlcnZlcjsKLQotLyoKLSAqIFZhbGlkIGZsYWdzIGZvciB0 aGUgcG9wX29wZW4gZnVuY3Rpb24uCi0gKi8KLQotI2RlZmluZSBQT1BfTk9fS0VSQkVST1MJ KDE8PDApCi0jZGVmaW5lIFBPUF9OT19IRVNJT0QJKDE8PDEpCi0jZGVmaW5lIFBPUF9OT19H RVRQQVNTIAkoMTw8MikKLQotZXh0ZXJuIHBvcHNlcnZlciBwb3Bfb3BlbiAoY2hhciAqaG9z dCwgY2hhciAqdXNlcm5hbWUsIGNoYXIgKnBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZsYWdzKTsKLWV4dGVybiBpbnQgcG9wX3N0YXQgKHBvcHNlcnZlciBz ZXJ2ZXIsIGludCAqY291bnQsIGludCAqc2l6ZSk7Ci1leHRlcm4gaW50IHBvcF9saXN0IChw b3BzZXJ2ZXIgc2VydmVyLCBpbnQgbWVzc2FnZSwgaW50ICoqSURzLAotICAgICAgICAgICAg ICAgICAgICAgaW50ICoqc2l6ZSk7Ci1leHRlcm4gaW50IHBvcF9yZXRyaWV2ZSAocG9wc2Vy dmVyIHNlcnZlciwgaW50IG1lc3NhZ2UsIGludCBtYXJrZnJvbSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqKTsKLWV4dGVybiBpbnQgcG9wX3JldHJpZXZlX2ZpcnN0IChw b3BzZXJ2ZXIgc2VydmVyLCBpbnQgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqcmVzcG9uc2UpOwotZXh0ZXJuIGludCBwb3BfcmV0cmlldmVfbmV4 dCAocG9wc2VydmVyIHNlcnZlciwgY2hhciAqKmxpbmUpOwotZXh0ZXJuIGludCBwb3BfcmV0 cmlldmVfZmx1c2ggKHBvcHNlcnZlciBzZXJ2ZXIpOwotZXh0ZXJuIGludCBwb3BfdG9wX2Zp cnN0IChwb3BzZXJ2ZXIgc2VydmVyLCBpbnQgbWVzc2FnZSwgaW50IGxpbmVzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzcG9uc2UpOwotZXh0ZXJuIGludCBwb3Bf dG9wX25leHQgKHBvcHNlcnZlciBzZXJ2ZXIsIGNoYXIgKipsaW5lKTsKLWV4dGVybiBpbnQg cG9wX3RvcF9mbHVzaCAocG9wc2VydmVyIHNlcnZlcik7Ci1leHRlcm4gaW50IHBvcF9tdWx0 aV9maXJzdCAocG9wc2VydmVyIHNlcnZlciwgY29uc3QgY2hhciAqY29tbWFuZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzcG9uc2UpOwotZXh0ZXJuIGludCBw b3BfbXVsdGlfbmV4dCAocG9wc2VydmVyIHNlcnZlciwgY2hhciAqKmxpbmUpOwotZXh0ZXJu IGludCBwb3BfbXVsdGlfZmx1c2ggKHBvcHNlcnZlciBzZXJ2ZXIpOwotZXh0ZXJuIGludCBw b3BfZGVsZXRlIChwb3BzZXJ2ZXIgc2VydmVyLCBpbnQgbWVzc2FnZSk7Ci1leHRlcm4gaW50 IHBvcF9ub29wIChwb3BzZXJ2ZXIgc2VydmVyKTsKLWV4dGVybiBpbnQgcG9wX2xhc3QgKHBv cHNlcnZlciBzZXJ2ZXIpOwotZXh0ZXJuIGludCBwb3BfcmVzZXQgKHBvcHNlcnZlciBzZXJ2 ZXIpOwotZXh0ZXJuIGludCBwb3BfcXVpdCAocG9wc2VydmVyIHNlcnZlcik7Ci1leHRlcm4g dm9pZCBwb3BfY2xvc2UgKHBvcHNlcnZlcik7CmRpZmYgLS1naXQgYS9saXNwL21haWwvcm1h aWwuZWwgYi9saXNwL21haWwvcm1haWwuZWwKaW5kZXggNGI3MmIzNS4uYjkxYjI1NiAxMDA2 NDQKLS0tIGEvbGlzcC9tYWlsL3JtYWlsLmVsCisrKyBiL2xpc3AvbWFpbC9ybWFpbC5lbApA QCAtMTkxMSwxMiArMTkxMSw3IEBAIHJtYWlsLXBhcnNlLXVybAogCSAgKHNldHEgZmlsZSAo Y29uY2F0IHByb3RvICI6Ly8iIHVzZXIgIkAiIGhvc3QpKSkKIAogCShpZiAocm1haWwtbW92 ZW1haWwtdmFyaWFudC1wICdlbWFjcykKLQkgICAgKGlmIChzdHJpbmctZXF1YWwgcHJvdG8g InBvcCIpCi0JCShsaXN0IChjb25jYXQgInBvOiIgdXNlciAiOiIgaG9zdCkKLQkJICAgICAg dAotCQkgICAgICAob3IgcGFzcyBzdXBwbGllZC1wYXNzd29yZCkKLQkJICAgICAgZ290LXBh c3N3b3JkKQotCSAgICAgIChlcnJvciAiRW1hY3MgbW92ZW1haWwgZG9lcyBub3Qgc3VwcG9y dCAlcyBwcm90b2NvbCIgcHJvdG8pKQorICAgICAgICAgICAgKGVycm9yICJFbWFjcyBtb3Zl bWFpbCBkb2VzIG5vdCBzdXBwb3J0ICVzIHByb3RvY29sIiBwcm90bykKIAkgIChsaXN0IGZp bGUKIAkJKG9yIChzdHJpbmctZXF1YWwgcHJvdG8gInBvcCIpIChzdHJpbmctZXF1YWwgcHJv dG8gImltYXAiKSkKIAkJKG9yIHN1cHBsaWVkLXBhc3N3b3JkIHBhc3MpCi0tIAoyLjkuMwoK --------------BB4EC6E66081D231E04EDF6E Content-Type: application/x-patch; name="0002-Emacs-movemail-is-now-a-configure-time-option.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Emacs-movemail-is-now-a-configure-time-option.patch" RnJvbSAyODg4MTM2OGYyZjM5MzBkNGJhY2JmNTY5MGM4NWRkYjAyYTc3YzQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBXZWQsIDE1IE1hciAyMDE3IDE1OjM2OjAyIC0wNzAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIEVtYWNzICdtb3ZlbWFpbCcgaXMgbm93IGEgY29uZmlndXJlLXRpbWUgb3B0aW9u CgpUaGUgbmV3IGNvbmZpZ3VyZSBvcHRpb24gLS13aXRob3V0LW1haWx1dGlscyBsZXRzIHRo ZSBidWlsZGVyCnNheSB0aGF0IEVtYWNzIHNob3VsZCBjb250aW51ZSB0byBidWlsZCBhbmQg aW5zdGFsbCBpdHMgb3duCmxpbWl0ZWQgc3Vic3RpdHV0ZSBmb3IgJ21vdmVtYWlsJywgaW5z dGVhZCBvZiBhc3N1bWluZyB0aGF0CkdOVSBNYWlsdXRpbHMgaXMgaW5zdGFsbGVkLgoqIElO U1RBTEwsIGV0Yy9ORVdTOiBNZW50aW9uIC0td2l0aG91dC1tYWlsdXRpbHMuCiogY29uZmln dXJlLmFjOiBBZGQgLS13aXRob3V0LW1haWx1dGlscyBvcHRpb24uCkRvIG5vdCBib3RoZXIg Y29uZmlndXJpbmcgJ21vdmVtYWlsJyB3aGVuIG5vdCBidWlsZGluZyBpdC4KKHdpdGhfbWFp bHV0aWxzKTogTmV3IHZhcmlhYmxlLgoqIGRvYy9lbWFjcy9ybWFpbC50ZXhpIChNb3ZlbWFp bCk6IFNheSB0aGF0IEVtYWNzICdtb3ZlbWFpbCcKaXMgbm93IGFuIG9wdGlvbmFsIHByb2dy YW0uCiogbGliLXNyYy9NYWtlZmlsZS5pbiAod2l0aF9tYWlsdXRpbHMpOiBOZXcgbWFjcm8u CihVVElMSVRJRVMpOiBVc2UgaXQuCi0tLQogSU5TVEFMTCAgICAgICAgICAgICAgfCAgMTAg KysrLQogY29uZmlndXJlLmFjICAgICAgICAgfCAxNTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkb2MvZW1hY3Mvcm1haWwudGV4aSB8 ICAgNyArKy0KIGV0Yy9ORVdTICAgICAgICAgICAgIHwgICA1ICsrCiBsaWItc3JjL01ha2Vm aWxlLmluICB8ICAgNiArLQogNSBmaWxlcyBjaGFuZ2VkLCAxMDMgaW5zZXJ0aW9ucygrKSwg NzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXgg NjQ3ZjcyZS4uZGU4YjhhNiAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBA IC0yNjEsNyArMjYxLDEwIEBAIEVtYWNzIHdpdGggdGhlIG9wdGlvbnMgJy0td2l0aG91dC1k YnVzIC0td2l0aG91dC1nY29uZiAtLXdpdGhvdXQtZ3NldHRpbmdzJy4KIAogVG8gcmVhZCBl bWFpbCB2aWEgYSBuZXR3b3JrIHByb3RvY29sIGxpa2UgSU1BUCBvciBQT1AsIHlvdSBjYW4K IGRvd25sb2FkLCBidWlsZCwgYW5kIGluc3RhbGwgdGhlIEdOVSBNYWlsdXRpbHMgcGFja2Fn ZSwgc28gdGhhdCBFbWFjcwotY2FuIHVzZSBNYWlsdXRpbHMgJ21vdmVtYWlsJyBwcm9ncmFt IHRvIHJldHJpZXZlIG1haWwuCitjYW4gdXNlIHRoYXQgcGFja2FnZSdzICdtb3ZlbWFpbCcg cHJvZ3JhbSB0byByZXRyaWV2ZSBtYWlsLiAgSWYgeW91Citjb25maWd1cmUgRW1hY3Mgd2l0 aCAtLXdpdGhvdXQtbWFpbHV0aWxzLCB0aGUgRW1hY3MgYnVpbGQgcHJvY2VkdXJlCitpbnN0 YWxscyBhbiBhdXhpbGlhcnkgJ21vdmVtYWlsJyBwcm9ncmFtIHRoYXQgaXMgYSBsaW1pdGVk IHN1YnN0aXR1dGUKK2ZvciBHTlUgTWFpbHV0aWxzICdtYWlsdXRpbCcuCiAKIEZvciBpbWFn ZSBzdXBwb3J0IHlvdSBtYXkgaGF2ZSB0byBkb3dubG9hZCwgYnVpbGQsIGFuZCBpbnN0YWxs IHRoZQogYXBwcm9wcmlhdGUgaW1hZ2Ugc3VwcG9ydCBsaWJyYXJpZXMgZm9yIGltYWdlIHR5 cGVzIG90aGVyIHRoYW4gWEJNIGFuZApAQCAtNTM1LDggKzUzOCw5IEBAIGluZm9ybWF0aW9u IG9uIHRoaXMuCiBFbWFjcyBpbmZvIGZpbGVzLgogCiA4KSBJZiB5b3VyIHN5c3RlbSB1c2Vz IGxvY2sgZmlsZXMgdG8gaW50ZXJsb2NrIGFjY2VzcyB0byBtYWlsZXIgaW5ib3ggZmlsZXMs Ci10aGVuIHlvdSBtaWdodCBuZWVkIHRvIG1ha2UgdGhlIG1vdmVtYWlsIHByb2dyYW0gc2V0 dWlkIG9yIHNldGdpZAotdG8gZW5hYmxlIGl0IHRvIHdyaXRlIHRoZSBsb2NrIGZpbGVzLiAg V2UgYmVsaWV2ZSB0aGlzIGlzIHNhZmUuCithbmQgaWYgeW91IGFyZSBpbnN0YWxsaW5nIHRo ZSBFbWFjcy1zcGVjaWZpYyAnbW92ZW1haWwnIHByb2dyYW0sIHRoZW4KK3lvdSBtaWdodCBu ZWVkIHRvIG1ha2UgJ21vdmVtYWlsJyBzZXR1aWQgb3Igc2V0Z2lkIHRvIGVuYWJsZSBpdCB0 bword3JpdGUgdGhlIGxvY2sgZmlsZXMuICBXZSBiZWxpZXZlIHRoaXMgaXMgc2FmZS4KIAog OSkgWW91IGFyZSBkb25lISAgWW91IGNhbiByZW1vdmUgZXhlY3V0YWJsZXMgYW5kIG9iamVj dCBmaWxlcyBmcm9tCiB0aGUgYnVpbGQgZGlyZWN0b3J5IGJ5IHR5cGluZyAnbWFrZSBjbGVh bicuICBUbyBhbHNvIHJlbW92ZSB0aGUgZmlsZXMKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5h YyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmN2Q0NGRmLi5iMzUzNDQ4IDEwMDY0NAotLS0gYS9j b25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yNDAsNiArMjQwLDEyIEBAIEFD X0RFRlVOCiAgICBtNF9icGF0c3Vic3QoW3dpdGhfJDFdLCBbW14wLTlhLXpdXSwgW19dKT0k d2l0aF9mZWF0dXJlc10pZG5sCiBdKWRubAogCitPUFRJT05fREVGQVVMVF9PTihbbWFpbHV0 aWxzXSwgW0Rvbid0IHJlbHkgb24gR05VIE1haWx1dGlscyBiZWluZyBpbnN0YWxsZWRdKQor aWYgdGVzdCAiJHdpdGhfbWFpbHV0aWxzIiA9IG5vOyB0aGVuCisgIHdpdGhfbWFpbHV0aWxz PQorZmkKK0FDX1NVQlNUKFt3aXRoX21haWx1dGlsc10pCisKIE9QVElPTl9ERUZBVUxUX09G RihbbWFpbC11bmxpbmtdLFt1bmxpbmssIHJhdGhlciB0aGFuIGVtcHR5LCBtYWlsIHNwb29s IGFmdGVyIHJlYWRpbmddKQogaWYgdGVzdCAiJHdpdGhfbWFpbF91bmxpbmsiICE9IG5vOyB0 aGVuCiAgICBBQ19ERUZJTkUoTUFJTF9VTkxJTktfU1BPT0wsIDEsIFtEZWZpbmUgdG8gdW5s aW5rLCByYXRoZXIgdGhhbiBlbXB0eSwgbWFpbCBzcG9vbCBhZnRlciByZWFkaW5nLl0pCkBA IC0zNzU2LDg3ICszNzYyLDkxIEBAIEFDX0RFRlVOCiBBQ19TVUJTVChMSUJYTUwyX0xJQlMp CiBBQ19TVUJTVChMSUJYTUwyX0NGTEFHUykKIAotIyBDaGVjayBmb3IgbWFpbC1sb2NraW5n IGZ1bmN0aW9ucyBpbiBhICJtYWlsIiBsaWJyYXJ5LiAgUHJvYmFibHkgdGhpcyBzaG91bGQK LSMgaGF2ZSB0aGUgc2FtZSBjaGVjayBhcyBmb3IgbGlibG9ja2ZpbGUgYmVsb3cuCi1BQ19D SEVDS19MSUIobWFpbCwgbWFpbGxvY2ssIGhhdmVfbWFpbD15ZXMsIGhhdmVfbWFpbD1ubykK LWlmIHRlc3QgJGhhdmVfbWFpbCA9IHllczsgdGhlbgotICBMSUJTX01BSUw9LWxtYWlsCi0g IEFDX0RFRklORShIQVZFX0xJQk1BSUwsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0 aGUgJ21haWwnIGxpYnJhcnkgKC1sbWFpbCkuXSkKLQotICBPTERfTElCUz0kTElCUwotICBM SUJTPSIkTElCU19NQUlMICRMSUJTIgotICBBQ19DSEVDS19GVU5DUyh0b3VjaGxvY2spCi0g IExJQlM9JE9MRF9MSUJTCi1lbHNlCi0gIExJQlNfTUFJTD0KLWZpCi1kbmwgRGViaWFuLCBh dCBsZWFzdDoKLUFDX0NIRUNLX0xJQihsb2NrZmlsZSwgbWFpbGxvY2ssIGhhdmVfbG9ja2Zp bGU9eWVzLCBoYXZlX2xvY2tmaWxlPW5vKQotaWYgdGVzdCAkaGF2ZV9sb2NrZmlsZSA9IHll czsgdGhlbgotICAgTElCU19NQUlMPS1sbG9ja2ZpbGUKLSAgIEFDX0RFRklORShIQVZFX0xJ QkxPQ0tGSUxFLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlICdsb2NrZmlsZScg bGlicmFyeSAoLWxsb2NrZmlsZSkuXSkKLWVsc2UKLSMgSWYgd2UgaGF2ZSB0aGUgc2hhcmVk IGxpYmxvY2tmaWxlLCBhc3N1bWUgd2UgbXVzdCB1c2UgaXQgZm9yIG1haWwKLSMgbG9ja2lu ZyAoZS5nLiBEZWJpYW4pLiAgSWYgd2UgY291bGRuJ3QgbGluayBhZ2FpbnN0IGxpYmxvY2tm aWxlCi0jIChubyBsaWJsb2NrZmlsZS5hIGluc3RhbGxlZCksIGVuc3VyZSB0aGF0IHdlIGRv bid0IG5lZWQgdG8uCi0gIGRubCBUaGlzIHdvcmtzIGZvciBmaWxlcyBnZW5lcmFsbHksIG5v dCBqdXN0IGV4ZWN1dGFibGVzLgotICBkbmwgU2hvdWxkIHdlIGxvb2sgZWxzZXdoZXJlIGZv ciBpdD8gIE1heWJlIGV4YW1pbmUgL2V0Yy9sZC5zby5jb25mPwotICBBQ19DSEVDS19QUk9H KGxpYmxvY2tmaWxlLCBsaWJsb2NrZmlsZS5zbywgeWVzLCBubywKLSAgICAgICAgICAgICAg ICAvdXNyL2xpYjovbGliOi91c3IvbG9jYWwvbGliOiRMRF9MSUJSQVJZX1BBVEgpCi0gIGlm IHRlc3QgJGFjX2N2X3Byb2dfbGlibG9ja2ZpbGUgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0df RVJST1IoW1NoYXJlZCBsaWJsb2NrZmlsZSBmb3VuZCBidXQgY2FuJ3QgbGluayBhZ2FpbnN0 IGl0LgorQkxFU1NNQUlMX1RBUkdFVD0KK0xJQlNfTUFJTD0KK2lmIHRlc3QgLXogIiR3aXRo X21haWx1dGlscyI7IHRoZW4KKyAgIyBDaGVjayBmb3IgbWFpbC1sb2NraW5nIGZ1bmN0aW9u cyBpbiBhICJtYWlsIiBsaWJyYXJ5LiAgUHJvYmFibHkgdGhpcyBzaG91bGQKKyAgIyBoYXZl IHRoZSBzYW1lIGNoZWNrIGFzIGZvciBsaWJsb2NrZmlsZSBiZWxvdy4KKyAgQUNfQ0hFQ0tf TElCKFttYWlsXSwgW21haWxsb2NrXSwgW2hhdmVfbWFpbD15ZXNdLCBbaGF2ZV9tYWlsPW5v XSkKKyAgaWYgdGVzdCAkaGF2ZV9tYWlsID0geWVzOyB0aGVuCisgICAgTElCU19NQUlMPS1s bWFpbAorICAgIEFDX0RFRklORShbSEFWRV9MSUJNQUlMXSwgMSwKKyAgICAgIFtEZWZpbmUg dG8gMSBpZiB5b3UgaGF2ZSB0aGUgJ21haWwnIGxpYnJhcnkgKC1sbWFpbCkuXSkKKworICAg IE9MRF9MSUJTPSRMSUJTCisgICAgTElCUz0iJExJQlNfTUFJTCAkTElCUyIKKyAgICBBQ19D SEVDS19GVU5DUyhbdG91Y2hsb2NrXSkKKyAgICBMSUJTPSRPTERfTElCUworICBmaQorICBk bmwgRGViaWFuLCBhdCBsZWFzdDoKKyAgQUNfQ0hFQ0tfTElCKFtsb2NrZmlsZV0sIFttYWls bG9ja10sIFtoYXZlX2xvY2tmaWxlPXllc10sIFtoYXZlX2xvY2tmaWxlPW5vXSkKKyAgaWYg dGVzdCAkaGF2ZV9sb2NrZmlsZSA9IHllczsgdGhlbgorICAgICBMSUJTX01BSUw9LWxsb2Nr ZmlsZQorICAgICBBQ19ERUZJTkUoW0hBVkVfTElCTE9DS0ZJTEVdLCAxLAorICAgICAgIFtE ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgJ2xvY2tmaWxlJyBsaWJyYXJ5ICgtbGxvY2tm aWxlKS5dKQorICBlbHNlCisgICMgSWYgd2UgaGF2ZSB0aGUgc2hhcmVkIGxpYmxvY2tmaWxl LCBhc3N1bWUgd2UgbXVzdCB1c2UgaXQgZm9yIG1haWwKKyAgIyBsb2NraW5nIChlLmcuIERl YmlhbikuICBJZiB3ZSBjb3VsZG4ndCBsaW5rIGFnYWluc3QgbGlibG9ja2ZpbGUKKyAgIyAo bm8gbGlibG9ja2ZpbGUuYSBpbnN0YWxsZWQpLCBlbnN1cmUgdGhhdCB3ZSBkb24ndCBuZWVk IHRvLgorICAgIGRubCBUaGlzIHdvcmtzIGZvciBmaWxlcyBnZW5lcmFsbHksIG5vdCBqdXN0 IGV4ZWN1dGFibGVzLgorICAgIGRubCBTaG91bGQgd2UgbG9vayBlbHNld2hlcmUgZm9yIGl0 PyAgTWF5YmUgZXhhbWluZSAvZXRjL2xkLnNvLmNvbmY/CisgICAgQUNfQ0hFQ0tfUFJPRyhb bGlibG9ja2ZpbGVdLCBbbGlibG9ja2ZpbGUuc29dLCBbeWVzXSwgW25vXSwKKwkJICBbL3Vz ci9saWI6L2xpYjovdXNyL2xvY2FsL2xpYjokTERfTElCUkFSWV9QQVRIXSkKKyAgICBpZiB0 ZXN0ICIkYWNfY3ZfcHJvZ19saWJsb2NrZmlsZSIgPSB5ZXM7IHRoZW4KKyAgICAgIEFDX01T R19FUlJPUihbU2hhcmVkIGxpYmxvY2tmaWxlIGZvdW5kIGJ1dCBjYW4ndCBsaW5rIGFnYWlu c3QgaXQuCiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgbW92ZW1haWwgY291bGQgbG9zZSBt YWlsLgogVGhlcmUgbWF5IGJlIGEgJ2RldmVsb3BtZW50JyBwYWNrYWdlIHRvIGluc3RhbGwg Y29udGFpbmluZyBsaWJsb2NrZmlsZS5dKQorICAgIGZpCiAgIGZpCi1maQotQUNfQ0hFQ0tf SEVBREVSU19PTkNFKG1haWxsb2NrLmgpCi1BQ19TVUJTVChMSUJTX01BSUwpCisgIEFDX0NI RUNLX0hFQURFUlMoW21haWxsb2NrLmhdKQogCi0jIyBEZWZpbmUgTUFJTF9VU0VfRkxPQ0sg KG9yIExPQ0tGKSBpZiB0aGUgbWFpbGVyIHVzZXMgZmxvY2sgKG9yIGxvY2tmKSB0bwotIyMg aW50ZXJsb2NrIGFjY2VzcyB0byB0aGUgbWFpbCBzcG9vbC4gIFRoZSBhbHRlcm5hdGl2ZSBp cyBhIGxvY2sgZmlsZSBuYW1lZAotIyMgL3Vzci9zcG9vbC9tYWlsLyRVU0VSLmxvY2suCi1t YWlsX2xvY2s9bm8KLWNhc2UgIiRvcHN5cyIgaW4KLSAgYWl4NC0yKSBtYWlsX2xvY2s9Imxv Y2tmIiA7OwotCi0gIGdudXxmcmVlYnNkfGRyYWdvbmZseXxuZXRic2R8b3BlbmJzZHxkYXJ3 aW4pIG1haWxfbG9jaz0iZmxvY2siIDs7Ci0KLSAgIyMgT24gR05VL0xpbnV4IHN5c3RlbXMs IGJvdGggbWV0aG9kcyBhcmUgdXNlZCBieSB2YXJpb3VzIG1haWwgcHJvZ3JhbXMuCi0gICMj IEkgYXNzdW1lIG1vc3QgcGVvcGxlIGFyZSB1c2luZyBuZXdlciBtYWlsZXJzIHRoYXQgaGF2 ZSBoZWFyZCBvZiBmbG9jay4KLSAgIyMgQ2hhbmdlIHRoaXMgaWYgeW91IG5lZWQgdG8uCi0g ICMjIERlYmlhbiBjb250YWlucyBhIHBhdGNoIHdoaWNoIHNheXM6ICJPbiBEZWJpYW4vR05V L0xpbnV4IHN5c3RlbXMsCi0gICMjIGNvbmZpZ3VyZSBnZXRzIHRoZSByaWdodCBhbnN3ZXJz LCBhbmQgdGhhdCBtZWFucyAqTk9UKiB1c2luZyBmbG9jay4KLSAgIyMgVXNpbmcgZmxvY2sg aXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgd3JvbmcgdGhpbmcuIFNlZSBEZWJpYW4gUG9saWN5 Ci0gICMjIGZvciBkZXRhaWxzLiIgYW5kIHRoZW4gdXNlcyAnI2lmZGVmIERFQklBTicuICBV bmZvcnR1bmF0ZWx5IHRoZQotICAjIyBEZWJpYW4gbWFpbnRhaW5lciBoYXNuJ3QgcHJvdmlk ZWQgYSBjbGVhbiBmaXggZm9yIEVtYWNzLgotICAjIyBtb3ZlbWFpbC5jIHdpbGwgdXNlICdt YWlsbG9jaycgd2hlbiBNQUlMRElSLCBIQVZFX0xJQk1BSUwgYW5kCi0gICMjIEhBVkVfTUFJ TExPQ0tfSCBhcmUgZGVmaW5lZCwgc28gdGhlIGZvbGxvd2luZyBhcHBlYXJzIHRvIGJlIHRo ZQotICAjIyBjb3JyZWN0IGxvZ2ljLiAgLS0gZngKLSAgIyMgV2UgbXVzdCBjaGVjayBmb3Ig SEFWRV9MSUJMT0NLRklMRSB0b28sIGFzIG1vdmVtYWlsIGRvZXMuCi0gICMjIGxpYmxvY2tm aWxlIGlzIGEgRnJlZSBTb2Z0d2FyZSByZXBsYWNlbWVudCBmb3IgbGlibWFpbCwgdXNlZCBv bgotICAjIyBEZWJpYW4gc3lzdGVtcyBhbmQgZWxzZXdoZXJlLiAtcmZyLgotICBnbnUtKikK LSAgICBtYWlsX2xvY2s9ImZsb2NrIgotICAgIGlmIHRlc3QgJGhhdmVfbWFpbCA9IHllcyB8 fCB0ZXN0ICRoYXZlX2xvY2tmaWxlID0geWVzOyB0aGVuCi0gICAgICB0ZXN0ICRhY19jdl9o ZWFkZXJfbWFpbGxvY2tfaCA9IHllcyAmJiBtYWlsX2xvY2s9bm8KLSAgICBmaQotICAgIDs7 CisgICMjIERlZmluZSBNQUlMX1VTRV9GTE9DSyAob3IgTE9DS0YpIGlmIHRoZSBtYWlsZXIg dXNlcyBmbG9jayAob3IgbG9ja2YpIHRvCisgICMjIGludGVybG9jayBhY2Nlc3MgdG8gdGhl IG1haWwgc3Bvb2wuICBUaGUgYWx0ZXJuYXRpdmUgaXMgYSBsb2NrIGZpbGUgbmFtZWQKKyAg IyMgL3Vzci9zcG9vbC9tYWlsLyRVU0VSLmxvY2suCisgIG1haWxfbG9jaz1ubworICBjYXNl ICIkb3BzeXMiIGluCisgICAgYWl4NC0yKSBtYWlsX2xvY2s9ImxvY2tmIiA7OworCisgICAg Z251fGZyZWVic2R8ZHJhZ29uZmx5fG5ldGJzZHxvcGVuYnNkfGRhcndpbikgbWFpbF9sb2Nr PSJmbG9jayIgOzsKKworICAgICMjIE9uIEdOVS9MaW51eCBzeXN0ZW1zLCBib3RoIG1ldGhv ZHMgYXJlIHVzZWQgYnkgdmFyaW91cyBtYWlsIHByb2dyYW1zLgorICAgICMjIEkgYXNzdW1l IG1vc3QgcGVvcGxlIGFyZSB1c2luZyBuZXdlciBtYWlsZXJzIHRoYXQgaGF2ZSBoZWFyZCBv ZiBmbG9jay4KKyAgICAjIyBDaGFuZ2UgdGhpcyBpZiB5b3UgbmVlZCB0by4KKyAgICAjIyBE ZWJpYW4gY29udGFpbnMgYSBwYXRjaCB3aGljaCBzYXlzOiAiT24gRGViaWFuL0dOVS9MaW51 eCBzeXN0ZW1zLAorICAgICMjIGNvbmZpZ3VyZSBnZXRzIHRoZSByaWdodCBhbnN3ZXJzLCBh bmQgdGhhdCBtZWFucyAqTk9UKiB1c2luZyBmbG9jay4KKyAgICAjIyBVc2luZyBmbG9jayBp cyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3cm9uZyB0aGluZy4gU2VlIERlYmlhbiBQb2xpY3kK KyAgICAjIyBmb3IgZGV0YWlscy4iIGFuZCB0aGVuIHVzZXMgJyNpZmRlZiBERUJJQU4nLiAg VW5mb3J0dW5hdGVseSB0aGUKKyAgICAjIyBEZWJpYW4gbWFpbnRhaW5lciBoYXNuJ3QgcHJv dmlkZWQgYSBjbGVhbiBmaXggZm9yIEVtYWNzLgorICAgICMjIG1vdmVtYWlsLmMgd2lsbCB1 c2UgJ21haWxsb2NrJyB3aGVuIE1BSUxESVIsIEhBVkVfTElCTUFJTCBhbmQKKyAgICAjIyBI QVZFX01BSUxMT0NLX0ggYXJlIGRlZmluZWQsIHNvIHRoZSBmb2xsb3dpbmcgYXBwZWFycyB0 byBiZSB0aGUKKyAgICAjIyBjb3JyZWN0IGxvZ2ljLiAgLS0gZngKKyAgICAjIyBXZSBtdXN0 IGNoZWNrIGZvciBIQVZFX0xJQkxPQ0tGSUxFIHRvbywgYXMgbW92ZW1haWwgZG9lcy4KKyAg ICAjIyBsaWJsb2NrZmlsZSBpcyBhIEZyZWUgU29mdHdhcmUgcmVwbGFjZW1lbnQgZm9yIGxp Ym1haWwsIHVzZWQgb24KKyAgICAjIyBEZWJpYW4gc3lzdGVtcyBhbmQgZWxzZXdoZXJlLiAt cmZyLgorICAgIGdudS0qKQorICAgICAgbWFpbF9sb2NrPSJmbG9jayIKKyAgICAgIGlmIHRl c3QgJGhhdmVfbWFpbCA9IHllcyB8fCB0ZXN0ICRoYXZlX2xvY2tmaWxlID0geWVzOyB0aGVu CisJdGVzdCAkYWNfY3ZfaGVhZGVyX21haWxsb2NrX2ggPSB5ZXMgJiYgbWFpbF9sb2NrPW5v CisgICAgICBmaSA7OwogCi0gIG1pbmd3MzIpCi0gICAgbWFpbF9sb2NrPSJub25lLW5lZWRl ZCIgOzsKLWVzYWMKKyAgICBtaW5ndzMyKQorICAgICAgbWFpbF9sb2NrPSJub25lLW5lZWRl ZCIgOzsKKyAgZXNhYwogCi1CTEVTU01BSUxfVEFSR0VUPQotY2FzZSAiJG1haWxfbG9jayIg aW4KLSAgZmxvY2spIEFDX0RFRklORShNQUlMX1VTRV9GTE9DSywgMSwgW0RlZmluZSBpZiB0 aGUgbWFpbGVyIHVzZXMgZmxvY2sgdG8gaW50ZXJsb2NrIHRoZSBtYWlsIHNwb29sLl0pIDs7 CisgIGNhc2UgIiRtYWlsX2xvY2siIGluCisgICAgZmxvY2spIEFDX0RFRklORShbTUFJTF9V U0VfRkxPQ0tdLCBbMV0sCisJICAgICBbRGVmaW5lIGlmIHRoZSBtYWlsZXIgdXNlcyBmbG9j ayB0byBpbnRlcmxvY2sgdGhlIG1haWwgc3Bvb2wuXSk7OwogCi0gIGxvY2tmKSBBQ19ERUZJ TkUoTUFJTF9VU0VfTE9DS0YsIDEsIFtEZWZpbmUgaWYgdGhlIG1haWxlciB1c2VzIGxvY2tm IHRvIGludGVybG9jayB0aGUgbWFpbCBzcG9vbC5dKSA7OworICAgIGxvY2tmKSBBQ19ERUZJ TkUoW01BSUxfVVNFX0xPQ0tGXSwgWzFdLAorCSAgICAgW0RlZmluZSBpZiB0aGUgbWFpbGVy IHVzZXMgbG9ja2YgdG8gaW50ZXJsb2NrIHRoZSBtYWlsIHNwb29sLl0pOzsKIAotICBub25l LW5lZWRlZCkgOzsKKyAgICBub25lLW5lZWRlZCkgOzsKIAotICAqKSBCTEVTU01BSUxfVEFS R0VUPSJuZWVkLWJsZXNzbWFpbCIgOzsKLWVzYWMKLUFDX1NVQlNUKEJMRVNTTUFJTF9UQVJH RVQpCisgICAgKikgQkxFU1NNQUlMX1RBUkdFVD0ibmVlZC1ibGVzc21haWwiIDs7CisgIGVz YWMKK2ZpCitBQ19TVUJTVChbQkxFU1NNQUlMX1RBUkdFVF0pCitBQ19TVUJTVChbTElCU19N QUlMXSkKIAogT0xEX0xJQlM9JExJQlMKIExJQlM9IiRMSUJfUFRIUkVBRCAkTElCX01BVEgg JExJQlMiCmRpZmYgLS1naXQgYS9kb2MvZW1hY3Mvcm1haWwudGV4aSBiL2RvYy9lbWFjcy9y bWFpbC50ZXhpCmluZGV4IGE4MTBlYWMuLjAyMDBiY2YgMTAwNjQ0Ci0tLSBhL2RvYy9lbWFj cy9ybWFpbC50ZXhpCisrKyBiL2RvYy9lbWFjcy9ybWFpbC50ZXhpCkBAIC0xMzgwLDkgKzEz ODAsMTAgQEAgTW92ZW1haWwKIHlvdXIgUm1haWwgZmlsZSAoQHB4cmVme1JtYWlsIEluYm94 fSkuICBXaGVuIGxvYWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUsCiBSbWFpbCBhdHRlbXB0cyB0 byBsb2NhdGUgdGhlIEBjb2Rle21vdmVtYWlsfSBwcm9ncmFtIGFuZCBkZXRlcm1pbmUgaXRz CiB2ZXJzaW9uLiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGUgQGNvZGV7bW92ZW1h aWx9IHByb2dyYW06IHRoZQotbmF0aXZlIG9uZSwgc2hpcHBlZCB3aXRoIEdOVSBFbWFjcyAo dGhlIEVtYWNzIHZlcnNpb24pIGFuZCB0aGUgb25lCi1pbmNsdWRlZCBpbiBHTlUgbWFpbHV0 aWxzICh0aGUgbWFpbHV0aWxzIHZlcnNpb24sCi1AcHhyZWZ7bW92ZW1haWwsLCxtYWlsdXRp bHMsR05VIG1haWx1dGlsc30pLiAgVGhleSBzdXBwb3J0IHRoZSBzYW1lCittYWluIHZlcnNp b24gaXMgcGFydCBvZiBHTlUgbWFpbHV0aWxzICh0aGUgbWFpbHV0aWxzIHZlcnNpb24sCitA cHhyZWZ7bW92ZW1haWwsLCxtYWlsdXRpbHMsR05VIG1haWx1dGlsc30pLCBhbmQgYW4gRW1h Y3Mtc3BlY2lmaWMKK3ZlcnNpb24gaXMgaW5zdGFsbGVkIGlmIEVtYWNzIHdhcyBjb25maWd1 cmVkIHVzaW5nIHRoZQorQG9wdGlvbnstLXdpdGhvdXQtbWFpbHV0aWxzfSBvcHRpb24uICBU aGV5IHN1cHBvcnQgdGhlIHNhbWUKIGNvbW1hbmQgbGluZSBzeW50YXggYW5kIHRoZSBzYW1l IGJhc2ljIHN1YnNldCBvZiBvcHRpb25zLiAgSG93ZXZlciwgdGhlCiBNYWlsdXRpbHMgdmVy c2lvbiBvZmZlcnMgYWRkaXRpb25hbCBmZWF0dXJlcy4KIApkaWZmIC0tZ2l0IGEvZXRjL05F V1MgYi9ldGMvTkVXUwppbmRleCA1MGVmYWM5Li41ODI5N2IzIDEwMDY0NAotLS0gYS9ldGMv TkVXUworKysgYi9ldGMvTkVXUwpAQCAtMzcsNiArMzcsMTEgQEAgVXNlICdjb25maWd1cmUg LS13aXRoLWdudXRscz1ubycgdG8gYnVpbGQgZXZlbiB3aGVuIEdudVRMUyBpcyBtaXNzaW5n LgogKiogR251VExTIHZlcnNpb24gMi4xMi4yIG9yIGxhdGVyIGlzIG5vdyByZXF1aXJlZCwg aW5zdGVhZCBvZiBtZXJlbHkKIHZlcnNpb24gMi42LjYgb3IgbGF0ZXIuCiAKKyoqIEJ5IGRl ZmF1bHQsIEVtYWNzIG5vdyByZWxpZXMgb24gdGhlIEdOVSBNYWlsdXRpbHMgJ21vdmVtYWls JworcHJvZ3JhbSBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIGEgbGltaXRl ZCBzdWJzdGl0dXRlLiAgVXNlCisnY29uZmlndXJlIC0td2l0aG91dC1tYWlsdXRpbHMnIHRv IGNhdXNlIEVtYWNzIHRvIHN1cHBseSBhIHN1YnN0aXR1dGUKKydtb3ZlbWFpbCcgcHJvZ3Jh bSwgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIEVtYWNzIGluc3RhbGxhdGlvbnMuCisK ICoqIFRoZSBFbWFjcy1zdXBwbGllZCAnbW92ZW1haWwnIHByb2dyYW0gbm8gbG9uZ2VyIHN1 cHBvcnRzIHRoZQogdW5lbmNyeXB0ZWQgUE9QMyBwcm90b2NvbCwgYXMgaXQgdG9vIG9mdGVu IGlzIGEgc2VjdXJpdHkgcmlzay4gIFRvCiByZWFkIG1haWwgdmlhIFBPUDMsIHBsZWFzZSB1 c2UgR05VIE1haWx1dGlscyAnbW92ZW1haWwnIGluc3RlYWQ7IGl0CmRpZmYgLS1naXQgYS9s aWItc3JjL01ha2VmaWxlLmluIGIvbGliLXNyYy9NYWtlZmlsZS5pbgppbmRleCBkNzhlMjBl Li4zMjg3YzA2IDEwMDY0NAotLS0gYS9saWItc3JjL01ha2VmaWxlLmluCisrKyBiL2xpYi1z cmMvTWFrZWZpbGUuaW4KQEAgLTEwMCw2ICsxMDAsOSBAQCBiaW5kaXI9CiAjIC0tbGliZXhl Y2RpciBvcHRpb24gdG8gJy4uL2NvbmZpZ3VyZScuCiBsaWJleGVjZGlyPUBsaWJleGVjZGly QAogCisjIE5vbmVtcHR5IGlmIEVtYWNzIGNhbiBhc3N1bWUgbWFpbHV0aWxzIGlzIGluc3Rh bGxlZC4KK3dpdGhfbWFpbHV0aWxzPUB3aXRoX21haWx1dGlsc0AKKwogIyBEaXJlY3Rvcnkg Zm9yIGxvY2FsIHN0YXRlIGZpbGVzIGZvciBhbGwgcHJvZ3JhbXMuCiBsb2NhbHN0YXRlZGly PUBsb2NhbHN0YXRlZGlyQAogCkBAIC0xNjAsNyArMTYzLDggQEAgSU5TVEFMTEFCTEVTID0K IAogIyBUaGluZ3MgdGhhdCBFbWFjcyBydW5zIGludGVybmFsbHksIG9yIGR1cmluZyB0aGUg YnVpbGQgcHJvY2VzcywKICMgIHdoaWNoIHNob3VsZCBub3QgYmUgaW5zdGFsbGVkIGluIGJp bmRpci4KLVVUSUxJVElFUyA9IHByb2ZpbGUke0VYRUVYVH0gbW92ZW1haWwke0VYRUVYVH0g aGV4bCR7RVhFRVhUfSBcCitVVElMSVRJRVMgPSBwcm9maWxlJHtFWEVFWFR9IGhleGwke0VY RUVYVH0gXAorCSAgICAkKGlmICQod2l0aF9tYWlsdXRpbHMpLCAsIG1vdmVtYWlsJHtFWEVF WFR9KSBcCiAgICAgICAgICAgICAkKGFuZCAkKHVzZV9nYW1lZGlyKSwgdXBkYXRlLWdhbWUt c2NvcmUke0VYRUVYVH0pCiAKIERPTlRfSU5TVEFMTD0gbWFrZS1kb2NmaWxlJHtFWEVFWFR9 Ci0tIAoyLjkuMwoK --------------BB4EC6E66081D231E04EDF6E--