From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#8344: (substring ...) crashes on large vectors Date: Sat, 26 Mar 2011 19:18:59 -0700 Organization: UCLA Computer Science Department Message-ID: <4D8E9E93.80303@cs.ucla.edu> References: <4D8CDC3A.4010705@cs.ucla.edu> <4D8D0DB6.4040206@cs.ucla.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020900030601050503010800" X-Trace: dough.gmane.org 1301193498 5574 80.91.229.12 (27 Mar 2011 02:38:18 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 27 Mar 2011 02:38:18 +0000 (UTC) To: 8344@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Mar 27 04:38:11 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3fr1-0003rg-ET for geb-bug-gnu-emacs@m.gmane.org; Sun, 27 Mar 2011 04:38:08 +0200 Original-Received: from localhost ([127.0.0.1]:34335 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3fqz-0002Zn-AM for geb-bug-gnu-emacs@m.gmane.org; Sat, 26 Mar 2011 22:37:21 -0400 Original-Received: from [140.186.70.92] (port=52850 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3fqr-0002Zc-A3 for bug-gnu-emacs@gnu.org; Sat, 26 Mar 2011 22:37:16 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q3fqn-0002nP-3X for bug-gnu-emacs@gnu.org; Sat, 26 Mar 2011 22:37:13 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:33172) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q3fqn-0002nL-05 for bug-gnu-emacs@gnu.org; Sat, 26 Mar 2011 22:37:09 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1Q3faF-00045h-Iq; Sat, 26 Mar 2011 22:20:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 27 Mar 2011 02:20:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 8344 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 8344-submit@debbugs.gnu.org id=B8344.130119235715663 (code B ref 8344); Sun, 27 Mar 2011 02:20:03 +0000 Original-Received: (at 8344) by debbugs.gnu.org; 27 Mar 2011 02:19:17 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3fZS-00044Z-Qb for submit@debbugs.gnu.org; Sat, 26 Mar 2011 22:19:17 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3fZN-00044K-La for 8344@debbugs.gnu.org; Sat, 26 Mar 2011 22:19:13 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id ACB6239E80F2 for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:03 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 95e1cbUd8W9g for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:00 -0700 (PDT) Original-Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 57E5839E80E0 for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:00 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8 In-Reply-To: <4D8D0DB6.4040206@cs.ucla.edu> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Sat, 26 Mar 2011 22:20:03 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.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: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:45388 Archived-At: This is a multi-part message in MIME format. --------------020900030601050503010800 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Here's the full patch for this, which I mentioned earlier, to give you a feel for what's needed. It's tedious, but is pretty straightforward. I'll test it more before committing. --------------020900030601050503010800 Content-Type: text/plain; name="patch.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch.txt" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIw MTEtMDMtMjYgMDQ6MTc6MzggKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMS0wMy0yNyAw MjoxMjozNiArMDAwMApAQCAtMSwzICsxLDIyIEBACisyMDExLTAzLTI3ICBQYXVsIEVnZ2Vy dCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVZhcmlhZGljIEMgZnVuY3Rpb25zIG5vdyBj b3VudCBhcmd1bWVudHMgd2l0aCBzaXplX3QsIG5vdCBpbnQuCisJVGhpcyBhdm9pZHMgYW4g dW5uZWNlc3NhcnkgbGltaXRhdGlvbiBvbiA2NC1iaXQgbWFjaGluZXMsIHdoaWNoCisJY2F1 c2VkIChzdWJzdHJpbmcgLi4uKSB0byBjcmFzaCBvbiBsYXJnZSB2ZWN0b3JzIChCdWcjODM0 NCkuCisJKiBsaXNwLmggKHN0cnVjdCBMaXNwX1N1YnIuZnVuY3Rpb24uYU1BTlkpOiBOb3cg dGFrZXMgc2l6ZV90LCBub3QgaW50LgorCShERUZVTl9BUkdTX01BTlksIGludGVybmFsX2Nv bmRpdGlvbl9jYXNlX24sIHNhZmVfY2FsbCk6IExpa2V3aXNlLgorCUFsbCB2YXJpYWRpYyBm dW5jdGlvbnMgY2hhbmdlZCBhY2NvcmRpbmdseS4KKwkoc3RydWN0IGdjcHJvLm52YXJzKTog Tm93IHNpemVfdCwgbm90IGludC4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiBkYXRhLmMgKGFy aXRoX2RyaXZlciwgZmxvYXRfYXJpdGhfZHJpdmVyKTogTGlrZXdpc2UuCisJKiBlZGl0Zm5z LmMgKGdlbmVyYWxfaW5zZXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiBldmFsLmMgKHN0 cnVjdCBiYWNrdHJhY2UubmFyZ3MsIGludGVyYWN0aXZlX3ApCisJKGludGVybmFsX2NvbmRp dGlvbl9jYXNlX24sIHJ1bl9ob29rX3dpdGhfYXJncywgYXBwbHlfbGFtYmRhKQorCShmdW5j YWxsX2xhbWJkYSwgbWFya19iYWNrdHJhY2UpOiBMaWtld2lzZS4KKwkqIGZucy5jIChjb25j YXQpOiBMaWtld2lzZS4KKwkqIGZyYW1lLmMgKHhfc2V0X2ZyYW1lX3BhcmFtZXRlcnMpOiBM aWtld2lzZS4KKwkqIGZucy5jIChnZXRfa2V5X2FyZyk6IE5vdyBhY2NlcHRzIGFuZCByZXR1 cm5zIHNpemVfdCwgYW5kIHJldHVybnMKKwkwIGlmIG5vdCBmb3VuZCwgbm90IC0xLiAgQWxs IGNhbGxlcnMgY2hhbmdlZC4KKwogMjAxMS0wMy0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRA Y3MudWNsYS5lZHU+CiAKIAkqIGFsbG9jLmMgKGdhcmJhZ2VfY29sbGVjdCk6IERvbid0IGFz c3VtZSBzdGFjayBzaXplIGZpdHMgaW4gaW50LgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9h bGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMS0wMy0yNiAwNDoxNzozOCArMDAwMAorKysg c3JjL2FsbG9jLmMJMjAxMS0wMy0yNyAwMjoxMjozNiArMDAwMApAQCAtMjcwNyw3ICsyNzA3 LDcgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBhIG5ld2x5IGNyZWF0ZWQgbGlzdCB3aXRo IHNwZWNpZmllZCBhcmd1bWVudHMgYXMgZWxlbWVudHMuCiBBbnkgbnVtYmVyIG9mIGFyZ3Vt ZW50cywgZXZlbiB6ZXJvIGFyZ3VtZW50cywgYXJlIGFsbG93ZWQuCiB1c2FnZTogKGxpc3Qg JnJlc3QgT0JKRUNUUykgICovKQotICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3Mp CiB7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHZhbDsKICAgdmFsID0gUW5pbDsKQEAgLTI5 MjMsMTAgKzI5MjMsMTAgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBhIG5ld2x5IGNyZWF0 ZWQgdmVjdG9yIHdpdGggc3BlY2lmaWVkIGFyZ3VtZW50cyBhcyBlbGVtZW50cy4KIEFueSBu dW1iZXIgb2YgYXJndW1lbnRzLCBldmVuIHplcm8gYXJndW1lbnRzLCBhcmUgYWxsb3dlZC4K IHVzYWdlOiAodmVjdG9yICZyZXN0IE9CSkVDVFMpICAqLykKLSAgKHJlZ2lzdGVyIGludCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChyZWdpc3RlciBzaXplX3QgbmFyZ3MsIExp c3BfT2JqZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCBsZW4sIHZhbDsK LSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICByZWdpc3RlciBz dHJ1Y3QgTGlzcF9WZWN0b3IgKnA7CiAKICAgWFNFVEZBU1RJTlQgKGxlbiwgbmFyZ3MpOwpA QCAtMjk0NSwxMCArMjk0NSwxMCBAQAogVGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIGFyZSBy ZXF1aXJlZDsgYXQgbW9zdCBzaXggaGF2ZSBhbnkKIHNpZ25pZmljYW5jZS4KIHVzYWdlOiAo bWFrZS1ieXRlLWNvZGUgQVJHTElTVCBCWVRFLUNPREUgQ09OU1RBTlRTIERFUFRIICZvcHRp b25hbCBET0NTVFJJTkcgSU5URVJBQ1RJVkUtU1BFQyAmcmVzdCBFTEVNRU5UUykgICovKQot ICAocmVnaXN0ZXIgaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHJlZ2lzdGVy IHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0IGxlbiwgdmFsOwotICByZWdpc3RlciBpbnQgaTsKKyAgcmVnaXN0ZXIgc2l6ZV90 IGk7CiAgIHJlZ2lzdGVyIHN0cnVjdCBMaXNwX1ZlY3RvciAqcDsKIAogICBYU0VURkFTVElO VCAobGVuLCBuYXJncyk7CkBAIC00MjMwLDcgKzQyMzAsNyBAQAogY2hlY2tfZ2Nwcm9zICh2 b2lkKQogewogICBzdHJ1Y3QgZ2Nwcm8gKnA7Ci0gIGludCBpOworICBzaXplX3QgaTsKIAog ICBmb3IgKHAgPSBnY3Byb2xpc3Q7IHA7IHAgPSBwLT5uZXh0KQogICAgIGZvciAoaSA9IDA7 IGkgPCBwLT5udmFyczsgKytpKQpAQCAtNDgzOSw3ICs0ODM5LDcgQEAKIHsKICAgcmVnaXN0 ZXIgc3RydWN0IHNwZWNiaW5kaW5nICpiaW5kOwogICBjaGFyIHN0YWNrX3RvcF92YXJpYWJs ZTsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICBpbnQgbWVz c2FnZV9wOwogICBMaXNwX09iamVjdCB0b3RhbFs4XTsKICAgaW50IGNvdW50ID0gU1BFQ1BE TF9JTkRFWCAoKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvY2FsbGludC5jJwotLS0gc3Jj L2NhbGxpbnQuYwkyMDExLTAzLTIzIDEwOjA2OjU3ICswMDAwCisrKyBzcmMvY2FsbGludC5j CTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTI2NSw4ICsyNjUsOSBAQAogICAgICBy ZWNvcmRlZCBhcyBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIG5hbWVkIGNhbGxpbnRfYXJnZnVu c1t2YXJpZXNbaV1dLiAgKi8KICAgaW50ICp2YXJpZXM7CiAKLSAgcmVnaXN0ZXIgaW50IGks IGo7Ci0gIGludCBjb3VudCwgZm9vOworICByZWdpc3RlciBzaXplX3QgaSwgajsKKyAgc2l6 ZV90IGNvdW50OworICBpbnQgZm9vOwogICBjaGFyIHByb21wdDFbMTAwXTsKICAgY2hhciAq dGVtMTsKICAgaW50IGFyZ19mcm9tX3R0eSA9IDA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L2NhbGxwcm9jLmMnCi0tLSBzcmMvY2FsbHByb2MuYwkyMDExLTAzLTE4IDA1OjU2OjQ2ICsw MDAwCisrKyBzcmMvY2FsbHByb2MuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0x NzcsNyArMTc3LDcgQEAKIElmIHlvdSBxdWl0LCB0aGUgcHJvY2VzcyBpcyBraWxsZWQgd2l0 aCBTSUdJTlQsIG9yIFNJR0tJTEwgaWYgeW91IHF1aXQgYWdhaW4uCiAKIHVzYWdlOiAoY2Fs bC1wcm9jZXNzIFBST0dSQU0gJm9wdGlvbmFsIElORklMRSBCVUZGRVIgRElTUExBWSAmcmVz dCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdz KQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAg TGlzcF9PYmplY3QgaW5maWxlLCBidWZmZXIsIGN1cnJlbnRfZGlyLCBwYXRoOwogICB2b2xh dGlsZSBpbnQgZGlzcGxheV9wX3ZvbGF0aWxlOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgIC8q IERlY2lkZSB0aGUgY29kaW5nLXN5c3RlbSBmb3IgZ2l2aW5nIGFyZ3VtZW50cy4gICovCiAg IHsKICAgICBMaXNwX09iamVjdCB2YWwsICphcmdzMjsKLSAgICBpbnQgaTsKKyAgICBzaXpl X3QgaTsKIAogICAgIC8qIElmIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQsIHdlIG1heSBoYXZl IHRvIGVuY29kZSB0aGVtLiAgKi8KICAgICBpZiAobmFyZ3MgPj0gNSkKQEAgLTM3MywxMCAr MzczLDEwIEBACiAgICAgcGF0aCA9IEZzdWJzdHJpbmcgKHBhdGgsIG1ha2VfbnVtYmVyICgy KSwgUW5pbCk7CiAKICAgbmV3X2FyZ3Zfdm9sYXRpbGUgPSBuZXdfYXJndiA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICoqKQotICAgIGFsbG9jYSAobWF4ICgyLCBuYXJncyAtIDIpICogc2l6 ZW9mIChjaGFyICopKTsKKyAgICBhbGxvY2EgKChuYXJncyA+IDQgPyBuYXJncyAtIDIgOiAy KSAqIHNpemVvZiAoY2hhciAqKSk7CiAgIGlmIChuYXJncyA+IDQpCiAgICAgewotICAgICAg cmVnaXN0ZXIgaW50IGk7CisgICAgICByZWdpc3RlciBzaXplX3QgaTsKICAgICAgIHN0cnVj dCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNTsKIAogICAg ICAgR0NQUk81IChpbmZpbGUsIGJ1ZmZlciwgY3VycmVudF9kaXIsIHBhdGgsIGVycm9yX2Zp bGUpOwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJewogCSAgaWYgKEVRIChjb2Rpbmdfc3lzdGVt cywgUXQpKQogCSAgICB7Ci0JICAgICAgaW50IGk7CisJICAgICAgc2l6ZV90IGk7CiAKIAkg ICAgICBhcmdzMiA9IChMaXNwX09iamVjdCAqKSBhbGxvY2EgKChuYXJncyArIDEpICogc2l6 ZW9mICphcmdzMik7CiAJICAgICAgYXJnczJbMF0gPSBRY2FsbF9wcm9jZXNzOwpAQCAtODY0 LDcgKzg2NCw3IEBACiBJZiB5b3UgcXVpdCwgdGhlIHByb2Nlc3MgaXMga2lsbGVkIHdpdGgg U0lHSU5ULCBvciBTSUdLSUxMIGlmIHlvdSBxdWl0IGFnYWluLgogCiB1c2FnZTogKGNhbGwt cHJvY2Vzcy1yZWdpb24gU1RBUlQgRU5EIFBST0dSQU0gJm9wdGlvbmFsIERFTEVURSBCVUZG RVIgRElTUExBWSAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKICAgTGlzcF9PYmplY3QgZmls ZW5hbWVfc3RyaW5nOwpAQCAtODczLDcgKzg3Myw3IEBACiAgIC8qIFF0IGRlbm90ZXMgd2Ug aGF2ZSBub3QgeWV0IGNhbGxlZCBGZmluZF9vcGVyYXRpb25fY29kaW5nX3N5c3RlbS4gICov CiAgIExpc3BfT2JqZWN0IGNvZGluZ19zeXN0ZW1zOwogICBMaXNwX09iamVjdCB2YWwsICph cmdzMjsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogICBjaGFyICp0ZW1wZmlsZTsKICAgTGlz cF9PYmplY3QgdG1wZGlyLCBwYXR0ZXJuOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2No YXJhY3Rlci5jJwotLS0gc3JjL2NoYXJhY3Rlci5jCTIwMTEtMDMtMDggMDc6NDk6NDEgKzAw MDAKKysrIHNyYy9jaGFyYWN0ZXIuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC04 OTMsOSArODkzLDEwIEBACiAgICAgICAgZG9jOiAvKgogQ29uY2F0ZW5hdGUgYWxsIHRoZSBh cmd1bWVudCBjaGFyYWN0ZXJzIGFuZCBtYWtlIHRoZSByZXN1bHQgYSBzdHJpbmcuCiB1c2Fn ZTogKHN0cmluZyAmcmVzdCBDSEFSQUNURVJTKSAgKi8pCi0gIChpbnQgbiwgTGlzcF9PYmpl Y3QgKmFyZ3MpCisgIChzaXplX3QgbiwgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBp LCBjOworICBzaXplX3QgaTsKKyAgaW50IGM7CiAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnA7 CiAgIExpc3BfT2JqZWN0IHN0cjsKICAgVVNFX1NBRkVfQUxMT0NBOwpAQCAtOTE4LDkgKzkx OSwxMCBAQAogREVGVU4gKCJ1bmlieXRlLXN0cmluZyIsIEZ1bmlieXRlX3N0cmluZywgU3Vu aWJ5dGVfc3RyaW5nLCAwLCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogQ29uY2F0ZW5hdGUg YWxsIHRoZSBhcmd1bWVudCBieXRlcyBhbmQgbWFrZSB0aGUgcmVzdWx0IGEgdW5pYnl0ZSBz dHJpbmcuCiB1c2FnZTogKHVuaWJ5dGUtc3RyaW5nICZyZXN0IEJZVEVTKSAgKi8pCi0gIChp bnQgbiwgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbiwgTGlzcF9PYmplY3QgKmFy Z3MpCiB7Ci0gIGludCBpLCBjOworICBzaXplX3QgaTsKKyAgaW50IGM7CiAgIHVuc2lnbmVk IGNoYXIgKmJ1ZiwgKnA7CiAgIExpc3BfT2JqZWN0IHN0cjsKICAgVVNFX1NBRkVfQUxMT0NB OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyc2V0LmMnCi0tLSBzcmMvY2hhcnNldC5j CTIwMTEtMDMtMDggMDA6NDY6MjMgKzAwMDAKKysrIHNyYy9jaGFyc2V0LmMJMjAxMS0wMy0y NyAwMjoxMjozNiArMDAwMApAQCAtODQ1LDcgKzg0NSw3IEBACiAgICAgICAgU2RlZmluZV9j aGFyc2V0X2ludGVybmFsLCBjaGFyc2V0X2FyZ19tYXgsIE1BTlksIDAsCiAgICAgICAgZG9j OiAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiB1c2FnZTogKGRlZmluZS1jaGFyc2V0LWlu dGVybmFsIC4uLikgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAg KHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIC8qIENoYXJzZXQgYXR0 ciB2ZWN0b3IuICAqLwogICBMaXNwX09iamVjdCBhdHRyczsKQEAgLTIxNzEsMTEgKzIxNzEs MTIgQEAKICAgICAgICAxLCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogQXNzaWduIGhpZ2hl ciBwcmlvcml0eSB0byB0aGUgY2hhcnNldHMgZ2l2ZW4gYXMgYXJndW1lbnRzLgogdXNhZ2U6 IChzZXQtY2hhcnNldC1wcmlvcml0eSAmcmVzdCBjaGFyc2V0cykgICovKQotICAoaW50IG5h cmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3Qg KmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IG5ld19oZWFkLCBvbGRfbGlzdCwgYXJnbGlzdFsy XTsKICAgTGlzcF9PYmplY3QgbGlzdF8yMDIyLCBsaXN0X2VtYWNzX211bGU7Ci0gIGludCBp LCBpZDsKKyAgc2l6ZV90IGk7CisgIGludCBpZDsKIAogICBvbGRfbGlzdCA9IEZjb3B5X3Nl cXVlbmNlIChWY2hhcnNldF9vcmRlcmVkX2xpc3QpOwogICBuZXdfaGVhZCA9IFFuaWw7Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvZGluZy5jJwotLS0gc3JjL2NvZGluZy5jCTIwMTEt MDMtMjIgMTY6MjA6NDUgKzAwMDAKKysrIHNyYy9jb2RpbmcuYwkyMDExLTAzLTI3IDAyOjEy OjM2ICswMDAwCkBAIC05MzAwLDcgKzkzMDAsNyBAQAogY29udGVudHMgb2YgQlVGRkVSIGlu c3RlYWQgb2YgcmVhZGluZyB0aGUgZmlsZS4KIAogdXNhZ2U6IChmaW5kLW9wZXJhdGlvbi1j b2Rpbmctc3lzdGVtIE9QRVJBVElPTiBBUkdVTUVOVFMuLi4pICAqLykKLSAgKGludCBuYXJn cywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICph cmdzKQogewogICBMaXNwX09iamVjdCBvcGVyYXRpb24sIHRhcmdldF9pZHgsIHRhcmdldCwg dmFsOwogICByZWdpc3RlciBMaXNwX09iamVjdCBjaGFpbjsKQEAgLTkzMDksMTcgKzkzMDks MTcgQEAKICAgICBlcnJvciAoIlRvbyBmZXcgYXJndW1lbnRzIik7CiAgIG9wZXJhdGlvbiA9 IGFyZ3NbMF07CiAgIGlmICghU1lNQk9MUCAob3BlcmF0aW9uKQotICAgICAgfHwgIUlOVEVH RVJQICh0YXJnZXRfaWR4ID0gRmdldCAob3BlcmF0aW9uLCBRdGFyZ2V0X2lkeCkpKQorICAg ICAgfHwgIU5BVE5VTVAgKHRhcmdldF9pZHggPSBGZ2V0IChvcGVyYXRpb24sIFF0YXJnZXRf aWR4KSkpCiAgICAgZXJyb3IgKCJJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7Ci0gIGlmIChu YXJncyA8IDEgKyBYSU5UICh0YXJnZXRfaWR4KSkKKyAgaWYgKG5hcmdzIDwgMSArIFhGQVNU SU5UICh0YXJnZXRfaWR4KSkKICAgICBlcnJvciAoIlRvbyBmZXcgYXJndW1lbnRzIGZvciBv cGVyYXRpb246ICVzIiwKIAkgICBTREFUQSAoU1lNQk9MX05BTUUgKG9wZXJhdGlvbikpKTsK LSAgdGFyZ2V0ID0gYXJnc1tYSU5UICh0YXJnZXRfaWR4KSArIDFdOworICB0YXJnZXQgPSBh cmdzW1hGQVNUSU5UICh0YXJnZXRfaWR4KSArIDFdOwogICBpZiAoIShTVFJJTkdQICh0YXJn ZXQpCiAJfHwgKEVRIChvcGVyYXRpb24sIFFpbnNlcnRfZmlsZV9jb250ZW50cykgJiYgQ09O U1AgKHRhcmdldCkKIAkgICAgJiYgU1RSSU5HUCAoWENBUiAodGFyZ2V0KSkgJiYgQlVGRkVS UCAoWENEUiAodGFyZ2V0KSkpCiAJfHwgKEVRIChvcGVyYXRpb24sIFFvcGVuX25ldHdvcmtf c3RyZWFtKSAmJiBJTlRFR0VSUCAodGFyZ2V0KSkpKQotICAgIGVycm9yICgiSW52YWxpZCAl ZHRoIGFyZ3VtZW50IiwgWElOVCAodGFyZ2V0X2lkeCkgKyAxKTsKKyAgICBlcnJvciAoIklu dmFsaWQgJWR0aCBhcmd1bWVudCIsIFhGQVNUSU5UICh0YXJnZXRfaWR4KSArIDEpOwogICBp ZiAoQ09OU1AgKHRhcmdldCkpCiAgICAgdGFyZ2V0ID0gWENBUiAodGFyZ2V0KTsKIApAQCAt OTM3Niw5ICs5Mzc2LDkgQEAKIGFsbCBidXQgdGhlIGZpcnN0IG9uZSBhcmUgaWdub3JlZC4K IAogdXNhZ2U6IChzZXQtY29kaW5nLXN5c3RlbS1wcmlvcml0eSAmcmVzdCBjb2Rpbmctc3lz dGVtcykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVf dCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBpLCBqOworICBzaXplX3Qg aSwgajsKICAgaW50IGNoYW5nZWRbY29kaW5nX2NhdGVnb3J5X21heF07CiAgIGVudW0gY29k aW5nX2NhdGVnb3J5IHByaW9yaXRpZXNbY29kaW5nX2NhdGVnb3J5X21heF07CiAKQEAgLTk0 MjEsNyArOTQyMSw3IEBACiAKICAgLyogVXBkYXRlIGBjb2RpbmctY2F0ZWdvcnktbGlzdCcu ICAqLwogICBWY29kaW5nX2NhdGVnb3J5X2xpc3QgPSBRbmlsOwotICBmb3IgKGkgPSBjb2Rp bmdfY2F0ZWdvcnlfbWF4IC0gMTsgaSA+PSAwOyBpLS0pCisgIGZvciAoaSA9IGNvZGluZ19j YXRlZ29yeV9tYXg7IGktLSA+IDA7ICkKICAgICBWY29kaW5nX2NhdGVnb3J5X2xpc3QKICAg ICAgID0gRmNvbnMgKEFSRUYgKFZjb2RpbmdfY2F0ZWdvcnlfdGFibGUsIHByaW9yaXRpZXNb aV0pLAogCSAgICAgICBWY29kaW5nX2NhdGVnb3J5X2xpc3QpOwpAQCAtOTQ4Miw3ICs5NDgy LDcgQEAKICAgICAgICBTZGVmaW5lX2NvZGluZ19zeXN0ZW1faW50ZXJuYWwsIGNvZGluZ19h cmdfbWF4LCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogRm9yIGludGVybmFsIHVzZSBvbmx5 LgogdXNhZ2U6IChkZWZpbmUtY29kaW5nLXN5c3RlbS1pbnRlcm5hbCAuLi4pICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBuYW1lOwogICBMaXNwX09iamVjdCBz cGVjX3ZlYzsJCS8qIFsgQVRUUlMgQUxJQVNFIEVPTF9UWVBFIF0gKi8KCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvZGF0YS5jJwotLS0gc3JjL2RhdGEuYwkyMDExLTAzLTE1IDIzOjIyOjM4 ICswMDAwCisrKyBzcmMvZGF0YS5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTI0 NzQsMTMgKzI0NzQsMTMgQEAKICAgICBBbWluCiAgIH07CiAKLXN0YXRpYyBMaXNwX09iamVj dCBmbG9hdF9hcml0aF9kcml2ZXIgKGRvdWJsZSwgaW50LCBlbnVtIGFyaXRob3AsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIExpc3BfT2JqZWN0ICop Oworc3RhdGljIExpc3BfT2JqZWN0IGZsb2F0X2FyaXRoX2RyaXZlciAoZG91YmxlLCBzaXpl X3QsIGVudW0gYXJpdGhvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCwgTGlzcF9PYmplY3QgKik7CiBzdGF0aWMgTGlzcF9PYmplY3QKLWFyaXRo X2RyaXZlciAoZW51bSBhcml0aG9wIGNvZGUsIGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9P YmplY3QgKmFyZ3MpCithcml0aF9kcml2ZXIgKGVudW0gYXJpdGhvcCBjb2RlLCBzaXplX3Qg bmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNw X09iamVjdCB2YWw7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJlZ2lzdGVyIHNpemVf dCBhcmdudW07CiAgIHJlZ2lzdGVyIEVNQUNTX0lOVCBhY2N1bSA9IDA7CiAgIHJlZ2lzdGVy IEVNQUNTX0lOVCBuZXh0OwogCkBAIC0yNTYyLDcgKzI1NjIsOCBAQAogI2RlZmluZSBpc25h bih4KSAoKHgpICE9ICh4KSkKIAogc3RhdGljIExpc3BfT2JqZWN0Ci1mbG9hdF9hcml0aF9k cml2ZXIgKGRvdWJsZSBhY2N1bSwgcmVnaXN0ZXIgaW50IGFyZ251bSwgZW51bSBhcml0aG9w IGNvZGUsIGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCitmbG9hdF9h cml0aF9kcml2ZXIgKGRvdWJsZSBhY2N1bSwgcmVnaXN0ZXIgc2l6ZV90IGFyZ251bSwgZW51 bSBhcml0aG9wIGNvZGUsCisJCSAgICBzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2Jq ZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCB2YWw7CiAgIGRvdWJsZSBu ZXh0OwpAQCAtMjYyNCw3ICsyNjI1LDcgQEAKIERFRlVOICgiKyIsIEZwbHVzLCBTcGx1cywg MCwgTUFOWSwgMCwKICAgICAgICBkb2M6IC8qIFJldHVybiBzdW0gb2YgYW55IG51bWJlciBv ZiBhcmd1bWVudHMsIHdoaWNoIGFyZSBudW1iZXJzIG9yIG1hcmtlcnMuCiB1c2FnZTogKCsg JnJlc3QgTlVNQkVSUy1PUi1NQVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAg cmV0dXJuIGFyaXRoX2RyaXZlciAoQWFkZCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjYzNCw3 ICsyNjM1LDcgQEAKIFdpdGggb25lIGFyZywgbmVnYXRlcyBpdC4gIFdpdGggbW9yZSB0aGFu IG9uZSBhcmcsCiBzdWJ0cmFjdHMgYWxsIGJ1dCB0aGUgZmlyc3QgZnJvbSB0aGUgZmlyc3Qu CiB1c2FnZTogKC0gJm9wdGlvbmFsIE5VTUJFUi1PUi1NQVJLRVIgJnJlc3QgTU9SRS1OVU1C RVJTLU9SLU1BUktFUlMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJp dGhfZHJpdmVyIChBc3ViLCBuYXJncywgYXJncyk7CiB9CkBAIC0yNjQyLDcgKzI2NDMsNyBA QAogREVGVU4gKCIqIiwgRnRpbWVzLCBTdGltZXMsIDAsIE1BTlksIDAsCiAgICAgICAgZG9j OiAvKiBSZXR1cm4gcHJvZHVjdCBvZiBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgd2hpY2gg YXJlIG51bWJlcnMgb3IgbWFya2Vycy4KIHVzYWdlOiAoKiAmcmVzdCBOVU1CRVJTLU9SLU1B UktFUlMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXpl X3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVy IChBbXVsdCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjY1MSw5ICsyNjUyLDkgQEAKICAgICAg ICBkb2M6IC8qIFJldHVybiBmaXJzdCBhcmd1bWVudCBkaXZpZGVkIGJ5IGFsbCB0aGUgcmVt YWluaW5nIGFyZ3VtZW50cy4KIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBudW1iZXJzIG9yIG1h cmtlcnMuCiB1c2FnZTogKC8gRElWSURFTkQgRElWSVNPUiAmcmVzdCBESVZJU09SUykgICov KQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywg TGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBhcmdudW07CisgIHNpemVfdCBhcmdudW07 CiAgIGZvciAoYXJnbnVtID0gMjsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQogICAgIGlm IChGTE9BVFAgKGFyZ3NbYXJnbnVtXSkpCiAgICAgICByZXR1cm4gZmxvYXRfYXJpdGhfZHJp dmVyICgwLCAwLCBBZGl2LCBuYXJncywgYXJncyk7CkBAIC0yNzM1LDcgKzI3MzYsNyBAQAog ICAgICAgIGRvYzogLyogUmV0dXJuIGxhcmdlc3Qgb2YgYWxsIHRoZSBhcmd1bWVudHMgKHdo aWNoIG11c3QgYmUgbnVtYmVycyBvciBtYXJrZXJzKS4KIFRoZSB2YWx1ZSBpcyBhbHdheXMg YSBudW1iZXI7IG1hcmtlcnMgYXJlIGNvbnZlcnRlZCB0byBudW1iZXJzLgogdXNhZ2U6ICht YXggTlVNQkVSLU9SLU1BUktFUiAmcmVzdCBOVU1CRVJTLU9SLU1BUktFUlMpICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbWF4LCBuYXJncywg YXJncyk7CiB9CkBAIC0yNzQ0LDcgKzI3NDUsNyBAQAogICAgICAgIGRvYzogLyogUmV0dXJu IHNtYWxsZXN0IG9mIGFsbCB0aGUgYXJndW1lbnRzICh3aGljaCBtdXN0IGJlIG51bWJlcnMg b3IgbWFya2VycykuCiBUaGUgdmFsdWUgaXMgYWx3YXlzIGEgbnVtYmVyOyBtYXJrZXJzIGFy ZSBjb252ZXJ0ZWQgdG8gbnVtYmVycy4KIHVzYWdlOiAobWluIE5VTUJFUi1PUi1NQVJLRVIg JnJlc3QgTlVNQkVSUy1PUi1NQVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAg cmV0dXJuIGFyaXRoX2RyaXZlciAoQW1pbiwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjc1Myw3 ICsyNzU0LDcgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBiaXR3aXNlLWFuZCBvZiBhbGwg dGhlIGFyZ3VtZW50cy4KIEFyZ3VtZW50cyBtYXkgYmUgaW50ZWdlcnMsIG9yIG1hcmtlcnMg Y29udmVydGVkIHRvIGludGVnZXJzLgogdXNhZ2U6IChsb2dhbmQgJnJlc3QgSU5UUy1PUi1N QVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6 ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAgcmV0dXJuIGFyaXRoX2RyaXZl ciAoQWxvZ2FuZCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjc2Miw3ICsyNzYzLDcgQEAKICAg ICAgICBkb2M6IC8qIFJldHVybiBiaXR3aXNlLW9yIG9mIGFsbCB0aGUgYXJndW1lbnRzLgog QXJndW1lbnRzIG1heSBiZSBpbnRlZ2Vycywgb3IgbWFya2VycyBjb252ZXJ0ZWQgdG8gaW50 ZWdlcnMuCiB1c2FnZTogKGxvZ2lvciAmcmVzdCBJTlRTLU9SLU1BUktFUlMpICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbG9naW9yLCBuYXJn cywgYXJncyk7CiB9CkBAIC0yNzcxLDcgKzI3NzIsNyBAQAogICAgICAgIGRvYzogLyogUmV0 dXJuIGJpdHdpc2UtZXhjbHVzaXZlLW9yIG9mIGFsbCB0aGUgYXJndW1lbnRzLgogQXJndW1l bnRzIG1heSBiZSBpbnRlZ2Vycywgb3IgbWFya2VycyBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMu CiB1c2FnZTogKGxvZ3hvciAmcmVzdCBJTlRTLU9SLU1BUktFUlMpICAqLykKLSAgKGludCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0 ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbG9neG9yLCBuYXJncywgYXJn cyk7CiB9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2RidXNiaW5kLmMnCi0tLSBzcmMvZGJ1 c2JpbmQuYwkyMDExLTAzLTE0IDAzOjI1OjUxICswMDAwCisrKyBzcmMvZGJ1c2JpbmQuYwky MDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogICA9PiAi aTY4NiIKIAogdXNhZ2U6IChkYnVzLWNhbGwtbWV0aG9kIEJVUyBTRVJWSUNFIFBBVEggSU5U RVJGQUNFIE1FVEhPRCAmb3B0aW9uYWwgOnRpbWVvdXQgVElNRU9VVCAmcmVzdCBBUkdTKSAg Ki8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6 ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgTGlzcF9PYmpl Y3QgYnVzLCBzZXJ2aWNlLCBwYXRoLCBpbnRlcmZhY2UsIG1ldGhvZDsKICAgTGlzcF9PYmpl Y3QgcmVzdWx0OwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKICAgREJ1c0Vycm9yIGRlcnJvcjsK ICAgdW5zaWduZWQgaW50IGR0eXBlOwogICBpbnQgdGltZW91dCA9IC0xOwotICBpbnQgaSA9 IDU7CisgIHNpemVfdCBpID0gNTsKICAgY2hhciBzaWduYXR1cmVbREJVU19NQVhJTVVNX1NJ R05BVFVSRV9MRU5HVEhdOwogCiAgIC8qIENoZWNrIHBhcmFtZXRlcnMuICAqLwpAQCAtMTEx Niw3ICsxMTE2LDcgQEAKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09CSkVDVF9QIChh cmdzW2ldKTsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaSsxXSk7 Ci0JICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMgJXMiLCBpLTQsCisJICBY RF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWx1ICVzICVzIiwgKHVuc2lnbmVkIGxvbmcp IChpLTQpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSks CiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaSsxXSwgUW5pbCkpKTsKIAkg ICsraTsKQEAgLTExMjQsNyArMTEyNCw3IEBACiAgICAgICBlbHNlCiAJewogCSAgWERfREVC VUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7Ci0JICBYRF9ERUJVR19NRVNTQUdF ICgiUGFyYW1ldGVyJWQgJXMiLCBpLTQsCisJICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1l dGVyJWx1ICVzIiwgKHVuc2lnbmVkIGxvbmcpIChpLTQpLAogCQkJICAgIFNEQVRBIChmb3Jt YXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSkpOwogCX0KIApAQCAtMTIzMyw3ICsxMjMzLDcg QEAKICAgLXwgaTY4NgogCiB1c2FnZTogKGRidXMtY2FsbC1tZXRob2QtYXN5bmNocm9ub3Vz bHkgQlVTIFNFUlZJQ0UgUEFUSCBJTlRFUkZBQ0UgTUVUSE9EIEhBTkRMRVIgJm9wdGlvbmFs IDp0aW1lb3V0IFRJTUVPVVQgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCByZWdp c3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlz cF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1cywgc2VydmljZSwgcGF0aCwg aW50ZXJmYWNlLCBtZXRob2QsIGhhbmRsZXI7CiAgIExpc3BfT2JqZWN0IHJlc3VsdDsKQEAg LTEyNDMsNyArMTI0Myw3IEBACiAgIERCdXNNZXNzYWdlSXRlciBpdGVyOwogICB1bnNpZ25l ZCBpbnQgZHR5cGU7CiAgIGludCB0aW1lb3V0ID0gLTE7Ci0gIGludCBpID0gNjsKKyAgc2l6 ZV90IGkgPSA2OwogICBjaGFyIHNpZ25hdHVyZVtEQlVTX01BWElNVU1fU0lHTkFUVVJFX0xF TkdUSF07CiAKICAgLyogQ2hlY2sgcGFyYW1ldGVycy4gICovCkBAIC0xMjk4LDcgKzEyOTgs NyBAQAogCXsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaV0pOwog CSAgWERfREVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpKzFdKTsKLQkgIFhEX0RF QlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlZCAlcyAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01F U1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMgJXMiLCAodW5zaWduZWQgbG9uZykgKGktNCksCiAJ CQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwpKSwKIAkJCSAgICBT REFUQSAoZm9ybWF0MiAoIiVzIiwgYXJnc1tpKzFdLCBRbmlsKSkpOwogCSAgKytpOwpAQCAt MTMwNiw3ICsxMzA2LDcgQEAKICAgICAgIGVsc2UKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9M SVNQX09CSkVDVF9QIChhcmdzW2ldKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0 ZXIlZCAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMi LCAodW5zaWduZWQgbG9uZykgKGkgLSA0KSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAoIiVz IiwgYXJnc1tpXSwgUW5pbCkpKTsKIAl9CiAKQEAgLTEzNTcsNyArMTM1Nyw3IEBACiBUaGlz IGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBpdCBzaGFsbCBub3QgYmUgdXNlZCBvdXRzaWRl IGRidXMuZWwuCiAKIHVzYWdlOiAoZGJ1cy1tZXRob2QtcmV0dXJuLWludGVybmFsIEJVUyBT RVJJQUwgU0VSVklDRSAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVy IExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09i amVjdCAqYXJncykKIHsKICAgTGlzcF9PYmplY3QgYnVzLCBzZXJpYWwsIHNlcnZpY2U7CiAg IHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zOwpAQCAtMTM2NSw3ICsxMzY1 LDcgQEAKICAgREJ1c01lc3NhZ2UgKmRtZXNzYWdlOwogICBEQnVzTWVzc2FnZUl0ZXIgaXRl cjsKICAgdW5zaWduZWQgaW50IGR0eXBlOwotICBpbnQgaTsKKyAgc2l6ZV90IGk7CiAgIGNo YXIgc2lnbmF0dXJlW0RCVVNfTUFYSU1VTV9TSUdOQVRVUkVfTEVOR1RIXTsKIAogICAvKiBD aGVjayBwYXJhbWV0ZXJzLiAgKi8KQEAgLTE0MDUsNyArMTQwNSw3IEBACiAJewogCSAgWERf REVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7CiAJICBYRF9ERUJVR19WQUxJ RF9MSVNQX09CSkVDVF9QIChhcmdzW2krMV0pOwotCSAgWERfREVCVUdfTUVTU0FHRSAoIlBh cmFtZXRlciVkICVzICVzIiwgaS0yLAorCSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRl ciVsdSAlcyAlcyIsICh1bnNpZ25lZCBsb25nKSAoaS0yKSwKIAkJCSAgICBTREFUQSAoZm9y bWF0MiAoIiVzIiwgYXJnc1tpXSwgUW5pbCkpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgi JXMiLCBhcmdzW2krMV0sIFFuaWwpKSk7CiAJICArK2k7CkBAIC0xNDEzLDcgKzE0MTMsNyBA QAogICAgICAgZWxzZQogCXsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFy Z3NbaV0pOwotCSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRlciVkICVzIiwgaS0yLAor CSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRlciVsdSAlcyIsICh1bnNpZ25lZCBsb25n KSAoaS0yKSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAoIiVzIiwgYXJnc1tpXSwgUW5pbCkp KTsKIAl9CiAKQEAgLTE0NDUsNyArMTQ0NSw3IEBACiBUaGlzIGlzIGFuIGludGVybmFsIGZ1 bmN0aW9uLCBpdCBzaGFsbCBub3QgYmUgdXNlZCBvdXRzaWRlIGRidXMuZWwuCiAKIHVzYWdl OiAoZGJ1cy1tZXRob2QtZXJyb3ItaW50ZXJuYWwgQlVTIFNFUklBTCBTRVJWSUNFICZyZXN0 IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICBM aXNwX09iamVjdCBidXMsIHNlcmlhbCwgc2VydmljZTsKICAgc3RydWN0IGdjcHJvIGdjcHJv MSwgZ2Nwcm8yLCBnY3BybzM7CkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogICBEQnVzTWVzc2Fn ZSAqZG1lc3NhZ2U7CiAgIERCdXNNZXNzYWdlSXRlciBpdGVyOwogICB1bnNpZ25lZCBpbnQg ZHR5cGU7Ci0gIGludCBpOworICBzaXplX3QgaTsKICAgY2hhciBzaWduYXR1cmVbREJVU19N QVhJTVVNX1NJR05BVFVSRV9MRU5HVEhdOwogCiAgIC8qIENoZWNrIHBhcmFtZXRlcnMuICAq LwpAQCAtMTQ5NCw3ICsxNDk0LDcgQEAKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09C SkVDVF9QIChhcmdzW2ldKTsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFy Z3NbaSsxXSk7Ci0JICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMgJXMiLCBp LTIsCisJICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWx1ICVzICVzIiwgKHVuc2ln bmVkIGxvbmcpIChpLTIpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ld LCBRbmlsKSksCiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaSsxXSwgUW5p bCkpKTsKIAkgICsraTsKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAgICAgICBlbHNlCiAJewog CSAgWERfREVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7Ci0JICBYRF9ERUJV R19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMiLCBpLTIsCisJICBYRF9ERUJVR19NRVNTQUdF ICgiUGFyYW1ldGVyJWx1ICVzIiwgKHVuc2lnbmVkIGxvbmcpIChpLTIpLAogCQkJICAgIFNE QVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSkpOwogCX0KIApAQCAtMTU1Nyw3 ICsxNTU3LDcgQEAKICAgIm9yZy5nbnUuRW1hY3MuRmlsZU1hbmFnZXIiICJGaWxlTW9kaWZp ZWQiICIvaG9tZS9hbGJpbnVzLy5lbWFjcyIpCiAKIHVzYWdlOiAoZGJ1cy1zZW5kLXNpZ25h bCBCVVMgU0VSVklDRSBQQVRIIElOVEVSRkFDRSBTSUdOQUwgJnJlc3QgQVJHUykgICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1 cywgc2VydmljZSwgcGF0aCwgaW50ZXJmYWNlLCBzaWduYWw7CiAgIHN0cnVjdCBnY3BybyBn Y3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNTsKQEAgLTE1NjUsNyArMTU2 NSw3IEBACiAgIERCdXNNZXNzYWdlICpkbWVzc2FnZTsKICAgREJ1c01lc3NhZ2VJdGVyIGl0 ZXI7CiAgIHVuc2lnbmVkIGludCBkdHlwZTsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogICBj aGFyIHNpZ25hdHVyZVtEQlVTX01BWElNVU1fU0lHTkFUVVJFX0xFTkdUSF07CiAKICAgLyog Q2hlY2sgcGFyYW1ldGVycy4gICovCkBAIC0xNjA5LDcgKzE2MDksNyBAQAogCXsKIAkgIFhE X0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaV0pOwogCSAgWERfREVCVUdfVkFM SURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpKzFdKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQ YXJhbWV0ZXIlZCAlcyAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0 ZXIlbHUgJXMgJXMiLCAodW5zaWduZWQgbG9uZykgKGktNCksCiAJCQkgICAgU0RBVEEgKGZv cm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwpKSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAo IiVzIiwgYXJnc1tpKzFdLCBRbmlsKSkpOwogCSAgKytpOwpAQCAtMTYxNyw3ICsxNjE3LDcg QEAKICAgICAgIGVsc2UKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09CSkVDVF9QIChh cmdzW2ldKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlZCAlcyIsIGktNCwK KwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMiLCAodW5zaWduZWQgbG9u ZykgKGktNCksCiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwp KSk7CiAJfQogCkBAIC0xODg1LDExICsxODg1LDExIEBACiAgID0+IDphbHJlYWR5LW93bmVy LgogCiB1c2FnZTogKGRidXMtcmVnaXN0ZXItc2VydmljZSBCVVMgU0VSVklDRSAmcmVzdCBG TEFHUykgICovKQotICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykK KyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExp c3BfT2JqZWN0IGJ1cywgc2VydmljZTsKICAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247 Ci0gIHVuc2lnbmVkIGludCBpOworICBzaXplX3QgaTsKICAgdW5zaWduZWQgaW50IHZhbHVl OwogICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwogICBpbnQgcmVzdWx0OwpAQCAtMTk4NSwx MyArMTk4NSwxMyBAQAogYGRidXMtdW5yZWdpc3Rlci1vYmplY3QnIGZvciByZW1vdmluZyB0 aGUgcmVnaXN0cmF0aW9uLgogCiB1c2FnZTogKGRidXMtcmVnaXN0ZXItc2lnbmFsIEJVUyBT RVJWSUNFIFBBVEggSU5URVJGQUNFIFNJR05BTCBIQU5ETEVSICZyZXN0IEFSR1MpICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1 cywgc2VydmljZSwgcGF0aCwgaW50ZXJmYWNlLCBzaWduYWwsIGhhbmRsZXI7CiAgIHN0cnVj dCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNSwgZ2Nwcm82 OwogICBMaXNwX09iamVjdCB1bmFtZSwga2V5LCBrZXkxLCB2YWx1ZTsKICAgREJ1c0Nvbm5l Y3Rpb24gKmNvbm5lY3Rpb247Ci0gIGludCBpOworICBzaXplX3QgaTsKICAgY2hhciBydWxl W0RCVVNfTUFYSU1VTV9NQVRDSF9SVUxFX0xFTkdUSF07CiAgIGNoYXIgeFtEQlVTX01BWElN VU1fTUFUQ0hfUlVMRV9MRU5HVEhdOwogICBEQnVzRXJyb3IgZGVycm9yOwpAQCAtMjA2MSw3 ICsyMDYxLDggQEAKIAlpZiAoIU5JTFAgKGFyZ3NbaV0pKQogCSAgewogCSAgICBDSEVDS19T VFJJTkcgKGFyZ3NbaV0pOwotCSAgICBzcHJpbnRmICh4LCAiLGFyZyVkPSclcyciLCBpLTYs IFNEQVRBIChhcmdzW2ldKSk7CisJICAgIHNwcmludGYgKHgsICIsYXJnJWx1PSclcyciLCAo dW5zaWduZWQgbG9uZykgKGktNiksCisJCSAgICAgU0RBVEEgKGFyZ3NbaV0pKTsKIAkgICAg c3RyY2F0IChydWxlLCB4KTsKIAkgIH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9lZGl0 Zm5zLmMnCi0tLSBzcmMvZWRpdGZucy5jCTIwMTEtMDMtMjMgMTA6MDY6NTcgKzAwMDAKKysr IHNyYy9lZGl0Zm5zLmMJMjAxMS0wMy0yNyAwMjoxMjozNiArMDAwMApAQCAtMTAxLDcgKzEw MSw3IEBACiAJCQkJICAgICB2b2lkICgqKSAoTGlzcF9PYmplY3QsIEVNQUNTX0lOVCwKIAkJ CQkJICAgICAgIEVNQUNTX0lOVCwgRU1BQ1NfSU5ULAogCQkJCQkgICAgICAgRU1BQ1NfSU5U LCBpbnQpLAotCQkJCSAgICAgaW50LCBpbnQsIExpc3BfT2JqZWN0ICopOworCQkJCSAgICAg aW50LCBzaXplX3QsIExpc3BfT2JqZWN0ICopOwogc3RhdGljIExpc3BfT2JqZWN0IHN1YnN0 X2NoYXJfaW5fcmVnaW9uX3Vud2luZCAoTGlzcF9PYmplY3QpOwogc3RhdGljIExpc3BfT2Jq ZWN0IHN1YnN0X2NoYXJfaW5fcmVnaW9uX3Vud2luZF8xIChMaXNwX09iamVjdCk7CiBzdGF0 aWMgdm9pZCB0cmFuc3Bvc2VfbWFya2VycyAoRU1BQ1NfSU5ULCBFTUFDU19JTlQsIEVNQUNT X0lOVCwgRU1BQ1NfSU5ULApAQCAtMTg3MSw3ICsxODcxLDcgQEAKIHllYXIgdmFsdWVzIGFz IGxvdyBhcyAxOTAxIGRvIHdvcmsuCiAKIHVzYWdlOiAoZW5jb2RlLXRpbWUgU0VDT05EIE1J TlVURSBIT1VSIERBWSBNT05USCBZRUFSICZvcHRpb25hbCBaT05FKSAgKi8pCi0gIChpbnQg bmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBy ZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgdGltZV90IHZhbHVlOwogICBzdHJ1 Y3QgdG0gdG07CkBAIC0yMjA3LDkgKzIyMDcsOSBAQAogCQkJIHZvaWQgKCppbnNlcnRfZnJv bV9zdHJpbmdfZnVuYykKIAkJCSAgICAgIChMaXNwX09iamVjdCwgRU1BQ1NfSU5ULCBFTUFD U19JTlQsCiAJCQkgICAgICAgRU1BQ1NfSU5ULCBFTUFDU19JTlQsIGludCksCi0JCQkgaW50 IGluaGVyaXQsIGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisJCQkgaW50IGluaGVy aXQsIHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGlu dCBhcmdudW07CisgIHJlZ2lzdGVyIHNpemVfdCBhcmdudW07CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0IHZhbDsKIAogICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdu dW0rKykKQEAgLTIyNzIsNyArMjI3Miw3IEBACiBhbmQgaW5zZXJ0IHRoZSByZXN1bHQuCiAK IHVzYWdlOiAoaW5zZXJ0ICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0 ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3Bf T2JqZWN0ICphcmdzKQogewogICBnZW5lcmFsX2luc2VydF9mdW5jdGlvbiAoaW5zZXJ0LCBp bnNlcnRfZnJvbV9zdHJpbmcsIDAsIG5hcmdzLCBhcmdzKTsKICAgcmV0dXJuIFFuaWw7CkBA IC0yMjkxLDcgKzIyOTEsNyBAQAogdG8gdW5pYnl0ZSBmb3IgaW5zZXJ0aW9uLgogCiB1c2Fn ZTogKGluc2VydC1hbmQtaW5oZXJpdCAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3Ms IHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3Rl ciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgZ2VuZXJhbF9pbnNlcnRfZnVuY3Rpb24gKGlu c2VydF9hbmRfaW5oZXJpdCwgaW5zZXJ0X2Zyb21fc3RyaW5nLCAxLAogCQkJICAgbmFyZ3Ms IGFyZ3MpOwpAQCAtMjMwOCw3ICsyMzA4LDcgQEAKIHRvIHVuaWJ5dGUgZm9yIGluc2VydGlv bi4KIAogdXNhZ2U6IChpbnNlcnQtYmVmb3JlLW1hcmtlcnMgJnJlc3QgQVJHUykgICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIGdlbmVyYWxfaW5zZXJ0 X2Z1bmN0aW9uIChpbnNlcnRfYmVmb3JlX21hcmtlcnMsCiAJCQkgICBpbnNlcnRfZnJvbV9z dHJpbmdfYmVmb3JlX21hcmtlcnMsIDAsCkBAIC0yMzI3LDcgKzIzMjcsNyBAQAogdG8gdW5p Ynl0ZSBmb3IgaW5zZXJ0aW9uLgogCiB1c2FnZTogKGluc2VydC1iZWZvcmUtbWFya2Vycy1h bmQtaW5oZXJpdCAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKIHsKICAgZ2VuZXJhbF9pbnNlcnRfZnVuY3Rpb24gKGluc2VydF9iZWZvcmVf bWFya2Vyc19hbmRfaW5oZXJpdCwKIAkJCSAgIGluc2VydF9mcm9tX3N0cmluZ19iZWZvcmVf bWFya2VycywgMSwKQEAgLTMzOTksNyArMzM5OSw3IEBACiBhbHNvIGBjdXJyZW50LW1lc3Nh Z2UnLgogCiB1c2FnZTogKG1lc3NhZ2UgRk9STUFULVNUUklORyAmcmVzdCBBUkdTKSAgKi8p Ci0gIChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBM aXNwX09iamVjdCAqYXJncykKIHsKICAgaWYgKE5JTFAgKGFyZ3NbMF0pCiAgICAgICB8fCAo U1RSSU5HUCAoYXJnc1swXSkKQEAgLTM0MjcsNyArMzQyNyw3IEBACiBtZXNzYWdlOyBsZXQg dGhlIG1pbmlidWZmZXIgY29udGVudHMgc2hvdy4KIAogdXNhZ2U6IChtZXNzYWdlLWJveCBG T1JNQVQtU1RSSU5HICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmpl Y3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBp ZiAoTklMUCAoYXJnc1swXSkpCiAgICAgewpAQCAtMzQ4NCw3ICszNDg0LDcgQEAKIG1lc3Nh Z2U7IGxldCB0aGUgbWluaWJ1ZmZlciBjb250ZW50cyBzaG93LgogCiB1c2FnZTogKG1lc3Nh Z2Utb3ItYm94IEZPUk1BVC1TVFJJTkcgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdz LCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFy Z3MpCiB7CiAjaWZkZWYgSEFWRV9NRU5VUwogICBpZiAoKE5JTFAgKGxhc3Rfbm9ubWVudV9l dmVudCkgfHwgQ09OU1AgKGxhc3Rfbm9ubWVudV9ldmVudCkpCkBAIC0zNTA4LDE0ICszNTA4 LDE0IEBACiBSZW1haW5pbmcgYXJndW1lbnRzIGZvcm0gYSBzZXF1ZW5jZSBvZiBQUk9QRVJU WSBWQUxVRSBwYWlycyBmb3IgdGV4dAogcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHJlc3Vs dC4KIHVzYWdlOiAocHJvcGVydGl6ZSBTVFJJTkcgJnJlc3QgUFJPUEVSVElFUykgICovKQot ICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlz cF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHByb3BlcnRpZXMsIHN0cmluZzsK ICAgc3RydWN0IGdjcHJvIGdjcHJvMSwgZ2Nwcm8yOwotICBpbnQgaTsKKyAgc2l6ZV90IGk7 CiAKICAgLyogTnVtYmVyIG9mIGFyZ3MgbXVzdCBiZSBvZGQuICAqLwotICBpZiAoKG5hcmdz ICYgMSkgPT0gMCB8fCBuYXJncyA8IDEpCisgIGlmICgobmFyZ3MgJiAxKSA9PSAwKQogICAg IGVycm9yICgiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCiAgIHByb3BlcnRpZXMg PSBzdHJpbmcgPSBRbmlsOwpAQCAtMzU5MCwxMCArMzU5MCwxMCBAQAogc3BlY2lmaWVyIHRy dW5jYXRlcyB0aGUgc3RyaW5nIHRvIHRoZSBnaXZlbiB3aWR0aC4KIAogdXNhZ2U6IChmb3Jt YXQgU1RSSU5HICZyZXN0IE9CSkVDVFMpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIg TGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2Jq ZWN0ICphcmdzKQogewotICByZWdpc3RlciBpbnQgbjsJCS8qIFRoZSBudW1iZXIgb2YgdGhl IG5leHQgYXJnIHRvIHN1YnN0aXR1dGUgKi8KLSAgcmVnaXN0ZXIgRU1BQ1NfSU5UIHRvdGFs OwkvKiBBbiBlc3RpbWF0ZSBvZiB0aGUgZmluYWwgbGVuZ3RoICovCisgIHJlZ2lzdGVyIHNp emVfdCBuOwkJLyogVGhlIG51bWJlciBvZiB0aGUgbmV4dCBhcmcgdG8gc3Vic3RpdHV0ZSAq LworICByZWdpc3RlciBzaXplX3QgdG90YWw7CS8qIEFuIGVzdGltYXRlIG9mIHRoZSBmaW5h bCBsZW5ndGggKi8KICAgY2hhciAqYnVmLCAqcDsKICAgcmVnaXN0ZXIgY2hhciAqZm9ybWF0 LCAqZW5kLCAqZm9ybWF0X3N0YXJ0OwogICBpbnQgbmNoYXJzOwpAQCAtMzY2OSw4ICszNjY5 LDggQEAKIAogICAvKiBBbGxvY2F0ZSB0aGUgaW5mbyBhbmQgZGlzY2FyZGVkIHRhYmxlcy4g ICovCiAgIHsKLSAgICBpbnQgbmJ5dGVzID0gKG5hcmdzKzEpICogc2l6ZW9mICppbmZvOwot ICAgIGludCBpOworICAgIHNpemVfdCBuYnl0ZXMgPSAobmFyZ3MrMSkgKiBzaXplb2YgKmlu Zm87CisgICAgc2l6ZV90IGk7CiAgICAgaWYgKCFpbmZvKQogICAgICAgaW5mbyA9IChzdHJ1 Y3QgaW5mbyAqKSBhbGxvY2EgKG5ieXRlcyk7CiAgICAgbWVtc2V0IChpbmZvLCAwLCBuYnl0 ZXMpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9ldmFsLmMnCi0tLSBzcmMvZXZhbC5jCTIw MTEtMDMtMTYgMDc6NDQ6MTkgKzAwMDAKKysrIHNyYy9ldmFsLmMJMjAxMS0wMy0yNyAwMjox MjozNiArMDAwMApAQCAtMzgsOSArMzgsOSBAQAogICBzdHJ1Y3QgYmFja3RyYWNlICpuZXh0 OwogICBMaXNwX09iamVjdCAqZnVuY3Rpb247CiAgIExpc3BfT2JqZWN0ICphcmdzOwkvKiBQ b2ludHMgdG8gdmVjdG9yIG9mIGFyZ3MuICovCi0gIGludCBuYXJnczsJCS8qIExlbmd0aCBv ZiB2ZWN0b3IuCi0JCQkgICBJZiBuYXJncyBpcyBVTkVWQUxMRUQsIGFyZ3MgcG9pbnRzIHRv IHNsb3QgaG9sZGluZwotCQkJICAgbGlzdCBvZiB1bmV2YWxsZWQgYXJncyAqLworICBzaXpl X3QgbmFyZ3M7CQkvKiBMZW5ndGggb2YgdmVjdG9yLgorCQkJICAgSWYgbmFyZ3MgaXMgKHNp emVfdCkgVU5FVkFMTEVELCBhcmdzIHBvaW50cworCQkJICAgdG8gc2xvdCBob2xkaW5nIGxp c3Qgb2YgdW5ldmFsbGVkIGFyZ3MgKi8KICAgY2hhciBldmFsYXJnczsKICAgLyogTm9uemVy byBtZWFucyBjYWxsIHZhbHVlIG9mIGRlYnVnZ2VyIHdoZW4gZG9uZSB3aXRoIHRoaXMgb3Bl cmF0aW9uLiAqLwogICBjaGFyIGRlYnVnX29uX2V4aXQ7CkBAIC0xMTEsNyArMTExLDcgQEAK IAogaW50IGhhbmRsaW5nX3NpZ25hbDsKIAotc3RhdGljIExpc3BfT2JqZWN0IGZ1bmNhbGxf bGFtYmRhIChMaXNwX09iamVjdCwgaW50LCBMaXNwX09iamVjdCopOworc3RhdGljIExpc3Bf T2JqZWN0IGZ1bmNhbGxfbGFtYmRhIChMaXNwX09iamVjdCwgc2l6ZV90LCBMaXNwX09iamVj dCopOwogc3RhdGljIHZvaWQgdW53aW5kX3RvX2NhdGNoIChzdHJ1Y3QgY2F0Y2h0YWcgKiwg TGlzcF9PYmplY3QpIE5PX1JFVFVSTjsKIHN0YXRpYyBpbnQgaW50ZXJhY3RpdmVfcCAoaW50 KTsKIHN0YXRpYyBMaXNwX09iamVjdCBhcHBseV9sYW1iZGEgKExpc3BfT2JqZWN0LCBMaXNw X09iamVjdCwgaW50KTsKQEAgLTU1Myw3ICs1NTMsNyBAQAogICAgICBsb29raW5nIGF0IHNl dmVyYWwgZnJhbWVzIGZvciBzcGVjaWFsIGZvcm1zLiAgU2tpcCBwYXN0IHRoZW0uICAqLwog ICB3aGlsZSAoYnRwCiAJICYmIChFUSAoKmJ0cC0+ZnVuY3Rpb24sIFFieXRlY29kZSkKLQkg ICAgIHx8IGJ0cC0+bmFyZ3MgPT0gVU5FVkFMTEVEKSkKKwkgICAgIHx8IGJ0cC0+bmFyZ3Mg PT0gKHNpemVfdCkgVU5FVkFMTEVEKSkKICAgICBidHAgPSBidHAtPm5leHQ7CiAKICAgLyog YnRwIG5vdyBwb2ludHMgYXQgdGhlIGZyYW1lIG9mIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24g dGhhdCBpc24ndApAQCAtOTU5LDcgKzk1OSw3IEBACiAgIExpc3BfT2JqZWN0ICp0ZW1wcywg dGVtOwogICByZWdpc3RlciBMaXNwX09iamVjdCBlbHQsIHZhcmxpc3Q7CiAgIGludCBjb3Vu dCA9IFNQRUNQRExfSU5ERVggKCk7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJlZ2lz dGVyIHNpemVfdCBhcmdudW07CiAgIHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMjsKICAg VVNFX1NBRkVfQUxMT0NBOwogCkBAIC0xNTExLDggKzE1MTEsOCBAQAogICAgYW5kIEFSR1Mg YXMgc2Vjb25kIGFyZ3VtZW50LiAgKi8KIAogTGlzcF9PYmplY3QKLWludGVybmFsX2NvbmRp dGlvbl9jYXNlX24gKExpc3BfT2JqZWN0ICgqYmZ1bikgKGludCwgTGlzcF9PYmplY3QqKSwK LQkJCSAgIGludCBuYXJncywKK2ludGVybmFsX2NvbmRpdGlvbl9jYXNlX24gKExpc3BfT2Jq ZWN0ICgqYmZ1bikgKHNpemVfdCwgTGlzcF9PYmplY3QgKiksCisJCQkgICBzaXplX3QgbmFy Z3MsCiAJCQkgICBMaXNwX09iamVjdCAqYXJncywKIAkJCSAgIExpc3BfT2JqZWN0IGhhbmRs ZXJzLAogCQkJICAgTGlzcF9PYmplY3QgKCpoZnVuKSAoTGlzcF9PYmplY3QpKQpAQCAtMjIw Myw3ICsyMjAzLDcgQEAKIAl7CiAJICAvKiBQYXNzIGEgdmVjdG9yIG9mIGV2YWx1YXRlZCBh cmd1bWVudHMgKi8KIAkgIExpc3BfT2JqZWN0ICp2YWxzOwotCSAgcmVnaXN0ZXIgaW50IGFy Z251bSA9IDA7CisJICByZWdpc3RlciBzaXplX3QgYXJnbnVtID0gMDsKIAkgIFVTRV9TQUZF X0FMTE9DQTsKIAogCSAgU0FGRV9BTExPQ0FfTElTUCAodmFscywgWElOVCAobnVtYXJncykp OwpAQCAtMjMzMiw5ICsyMzMyLDkgQEAKIFRoZW4gcmV0dXJuIHRoZSB2YWx1ZSBGVU5DVElP TiByZXR1cm5zLgogVGh1cywgKGFwcGx5ICcrIDEgMiAnKDMgNCkpIHJldHVybnMgMTAuCiB1 c2FnZTogKGFwcGx5IEZVTkNUSU9OICZyZXN0IEFSR1VNRU5UUykgICovKQotICAoaW50IG5h cmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3Qg KmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGludCBpLCBudW1hcmdzOworICByZWdpc3RlciBzaXpl X3QgaSwgbnVtYXJnczsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3Qgc3ByZWFkX2FyZzsKICAg cmVnaXN0ZXIgTGlzcF9PYmplY3QgKmZ1bmNhbGxfYXJnczsKICAgTGlzcF9PYmplY3QgZnVu LCByZXR2YWw7CkBAIC0yMzc0LDcgKzIzNzQsNyBAQAogICAgICAgaWYgKG51bWFyZ3MgPCBY U1VCUiAoZnVuKS0+bWluX2FyZ3MKIAkgIHx8IChYU1VCUiAoZnVuKS0+bWF4X2FyZ3MgPj0g MCAmJiBYU1VCUiAoZnVuKS0+bWF4X2FyZ3MgPCBudW1hcmdzKSkKIAlnb3RvIGZ1bmNhbGw7 CQkvKiBMZXQgZnVuY2FsbCBnZXQgdGhlIGVycm9yICovCi0gICAgICBlbHNlIGlmIChYU1VC UiAoZnVuKS0+bWF4X2FyZ3MgPiBudW1hcmdzKQorICAgICAgZWxzZSBpZiAoWFNVQlIgKGZ1 biktPm1heF9hcmdzID49IDAgJiYgWFNVQlIgKGZ1biktPm1heF9hcmdzID4gbnVtYXJncykK IAl7CiAJICAvKiBBdm9pZCBtYWtpbmcgZnVuY2FsbCBjb25zIHVwIGEgeWV0IGFub3RoZXIg bmV3IHZlY3RvciBvZiBhcmd1bWVudHMKIAkgICAgIGJ5IGV4cGxpY2l0bHkgc3VwcGx5aW5n IG5pbCdzIGZvciBvcHRpb25hbCB2YWx1ZXMgKi8KQEAgLTI0MTYsNyArMjQxNiw3IEBACiAv KiBSdW4gaG9vayB2YXJpYWJsZXMgaW4gdmFyaW91cyB3YXlzLiAgKi8KIAogZW51bSBydW5f aG9va3NfY29uZGl0aW9uIHt0b19jb21wbGV0aW9uLCB1bnRpbF9zdWNjZXNzLCB1bnRpbF9m YWlsdXJlfTsKLXN0YXRpYyBMaXNwX09iamVjdCBydW5faG9va193aXRoX2FyZ3MgKGludCwg TGlzcF9PYmplY3QgKiwKK3N0YXRpYyBMaXNwX09iamVjdCBydW5faG9va193aXRoX2FyZ3Mg KHNpemVfdCwgTGlzcF9PYmplY3QgKiwKIAkJCQkgICAgICAgZW51bSBydW5faG9va3NfY29u ZGl0aW9uKTsKIAogREVGVU4gKCJydW4taG9va3MiLCBGcnVuX2hvb2tzLCBTcnVuX2hvb2tz LCAwLCBNQU5ZLCAwLApAQCAtMjQzNCwxMCArMjQzNCwxMCBAQAogRG8gbm90IHVzZSBgbWFr ZS1sb2NhbC12YXJpYWJsZScgdG8gbWFrZSBhIGhvb2sgdmFyaWFibGUgYnVmZmVyLWxvY2Fs LgogSW5zdGVhZCwgdXNlIGBhZGQtaG9vaycgYW5kIHNwZWNpZnkgdCBmb3IgdGhlIExPQ0FM IGFyZ3VtZW50LgogdXNhZ2U6IChydW4taG9va3MgJnJlc3QgSE9PS1MpICAqLykKLSAgKGlu dCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBob29rWzFdOwotICByZWdpc3RlciBpbnQg aTsKKyAgcmVnaXN0ZXIgc2l6ZV90IGk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBp KyspCiAgICAgewpAQCAtMjQ2Myw3ICsyNDYzLDcgQEAKIERvIG5vdCB1c2UgYG1ha2UtbG9j YWwtdmFyaWFibGUnIHRvIG1ha2UgYSBob29rIHZhcmlhYmxlIGJ1ZmZlci1sb2NhbC4KIElu c3RlYWQsIHVzZSBgYWRkLWhvb2snIGFuZCBzcGVjaWZ5IHQgZm9yIHRoZSBMT0NBTCBhcmd1 bWVudC4KIHVzYWdlOiAocnVuLWhvb2std2l0aC1hcmdzIEhPT0sgJnJlc3QgQVJHUykgICov KQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywg TGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJldHVybiBydW5faG9va193aXRoX2FyZ3MgKG5h cmdzLCBhcmdzLCB0b19jb21wbGV0aW9uKTsKIH0KQEAgLTI0ODMsNyArMjQ4Myw3IEBACiBE byBub3QgdXNlIGBtYWtlLWxvY2FsLXZhcmlhYmxlJyB0byBtYWtlIGEgaG9vayB2YXJpYWJs ZSBidWZmZXItbG9jYWwuCiBJbnN0ZWFkLCB1c2UgYGFkZC1ob29rJyBhbmQgc3BlY2lmeSB0 IGZvciB0aGUgTE9DQUwgYXJndW1lbnQuCiB1c2FnZTogKHJ1bi1ob29rLXdpdGgtYXJncy11 bnRpbC1zdWNjZXNzIEhPT0sgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCBMaXNw X09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7 CiAgIHJldHVybiBydW5faG9va193aXRoX2FyZ3MgKG5hcmdzLCBhcmdzLCB1bnRpbF9zdWNj ZXNzKTsKIH0KQEAgLTI1MDIsNyArMjUwMiw3IEBACiBEbyBub3QgdXNlIGBtYWtlLWxvY2Fs LXZhcmlhYmxlJyB0byBtYWtlIGEgaG9vayB2YXJpYWJsZSBidWZmZXItbG9jYWwuCiBJbnN0 ZWFkLCB1c2UgYGFkZC1ob29rJyBhbmQgc3BlY2lmeSB0IGZvciB0aGUgTE9DQUwgYXJndW1l bnQuCiB1c2FnZTogKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1mYWlsdXJlIEhPT0sgJnJl c3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNp emVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJldHVybiBydW5faG9va193 aXRoX2FyZ3MgKG5hcmdzLCBhcmdzLCB1bnRpbF9mYWlsdXJlKTsKIH0KQEAgLTI1MTYsNyAr MjUxNiw4IEBACiAgICBleGNlcHQgdGhhdCBpdCBpc24ndCBuZWNlc3NhcnkgdG8gZ2Nwcm8g QVJHU1swXS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotcnVuX2hvb2tfd2l0aF9hcmdz IChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzLCBlbnVtIHJ1bl9ob29rc19jb25kaXRp b24gY29uZCkKK3J1bl9ob29rX3dpdGhfYXJncyAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVj dCAqYXJncywKKwkJICAgIGVudW0gcnVuX2hvb2tzX2NvbmRpdGlvbiBjb25kKQogewogICBM aXNwX09iamVjdCBzeW0sIHZhbCwgcmV0OwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3By bzIsIGdjcHJvMzsKQEAgLTI3NjMsMTYgKzI3NjQsMTYgQEAKIFJldHVybiB0aGUgdmFsdWUg dGhhdCBmdW5jdGlvbiByZXR1cm5zLgogVGh1cywgKGZ1bmNhbGwgJ2NvbnMgJ3ggJ3kpIHJl dHVybnMgKHggLiB5KS4KIHVzYWdlOiAoZnVuY2FsbCBGVU5DVElPTiAmcmVzdCBBUkdVTUVO VFMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3Qg bmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBmdW4sIG9yaWdp bmFsX2Z1bjsKICAgTGlzcF9PYmplY3QgZnVuY2FyOwotICBpbnQgbnVtYXJncyA9IG5hcmdz IC0gMTsKKyAgc2l6ZV90IG51bWFyZ3MgPSBuYXJncyAtIDE7CiAgIExpc3BfT2JqZWN0IGxp c3BfbnVtYXJnczsKICAgTGlzcF9PYmplY3QgdmFsOwogICBzdHJ1Y3QgYmFja3RyYWNlIGJh Y2t0cmFjZTsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmludGVybmFsX2FyZ3M7Ci0gIHJl Z2lzdGVyIGludCBpOworICByZWdpc3RlciBzaXplX3QgaTsKIAogICBRVUlUOwogICBpZiAo KGNvbnNpbmdfc2luY2VfZ2MgPiBnY19jb25zX3RocmVzaG9sZApAQCAtMjkyNSwyMSArMjky NiwyMSBAQAogYXBwbHlfbGFtYmRhIChMaXNwX09iamVjdCBmdW4sIExpc3BfT2JqZWN0IGFy Z3MsIGludCBldmFsX2ZsYWcpCiB7CiAgIExpc3BfT2JqZWN0IGFyZ3NfbGVmdDsKLSAgTGlz cF9PYmplY3QgbnVtYXJnczsKKyAgc2l6ZV90IG51bWFyZ3M7CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0ICphcmdfdmVjdG9yOwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzIsIGdj cHJvMzsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICByZWdp c3RlciBMaXNwX09iamVjdCB0ZW07CiAgIFVTRV9TQUZFX0FMTE9DQTsKIAotICBudW1hcmdz ID0gRmxlbmd0aCAoYXJncyk7Ci0gIFNBRkVfQUxMT0NBX0xJU1AgKGFyZ192ZWN0b3IsIFhJ TlQgKG51bWFyZ3MpKTsKKyAgbnVtYXJncyA9IFhJTlQgKEZsZW5ndGggKGFyZ3MpKTsKKyAg U0FGRV9BTExPQ0FfTElTUCAoYXJnX3ZlY3RvciwgbnVtYXJncyk7CiAgIGFyZ3NfbGVmdCA9 IGFyZ3M7CiAKICAgR0NQUk8zICgqYXJnX3ZlY3RvciwgYXJnc19sZWZ0LCBmdW4pOwogICBn Y3BybzEubnZhcnMgPSAwOwogCi0gIGZvciAoaSA9IDA7IGkgPCBYSU5UIChudW1hcmdzKTsp CisgIGZvciAoaSA9IDA7IGkgPCBudW1hcmdzOyApCiAgICAgewogICAgICAgdGVtID0gRmNh ciAoYXJnc19sZWZ0KSwgYXJnc19sZWZ0ID0gRmNkciAoYXJnc19sZWZ0KTsKICAgICAgIGlm IChldmFsX2ZsYWcpIHRlbSA9IEZldmFsICh0ZW0pOwpAQCAtMjk1NSw3ICsyOTU2LDcgQEAK ICAgICAgIGJhY2t0cmFjZV9saXN0LT5uYXJncyA9IGk7CiAgICAgfQogICBiYWNrdHJhY2Vf bGlzdC0+ZXZhbGFyZ3MgPSAwOwotICB0ZW0gPSBmdW5jYWxsX2xhbWJkYSAoZnVuLCBYSU5U IChudW1hcmdzKSwgYXJnX3ZlY3Rvcik7CisgIHRlbSA9IGZ1bmNhbGxfbGFtYmRhIChmdW4s IG51bWFyZ3MsIGFyZ192ZWN0b3IpOwogCiAgIC8qIERvIHRoZSBkZWJ1Zy1vbi1leGl0IG5v dywgd2hpbGUgYXJnX3ZlY3RvciBzdGlsbCBleGlzdHMuICAqLwogICBpZiAoYmFja3RyYWNl X2xpc3QtPmRlYnVnX29uX2V4aXQpCkBAIC0yOTcxLDExICsyOTcyLDEzIEBACiAgICBGVU4g bXVzdCBiZSBlaXRoZXIgYSBsYW1iZGEtZXhwcmVzc2lvbiBvciBhIGNvbXBpbGVkLWNvZGUg b2JqZWN0LiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1mdW5jYWxsX2xhbWJkYSAoTGlz cF9PYmplY3QgZnVuLCBpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdfdmVj dG9yKQorZnVuY2FsbF9sYW1iZGEgKExpc3BfT2JqZWN0IGZ1biwgc2l6ZV90IG5hcmdzLAor CQlyZWdpc3RlciBMaXNwX09iamVjdCAqYXJnX3ZlY3RvcikKIHsKICAgTGlzcF9PYmplY3Qg dmFsLCBzeW1zX2xlZnQsIG5leHQ7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7 Ci0gIGludCBpLCBvcHRpb25hbCwgcmVzdDsKKyAgc2l6ZV90IGk7CisgIGludCBvcHRpb25h bCwgcmVzdDsKIAogICBpZiAoQ09OU1AgKGZ1bikpCiAgICAgewpAQCAtMzMxMCw3ICszMzEz LDcgQEAKICAgd2hpbGUgKGJhY2tsaXN0KQogICAgIHsKICAgICAgIHdyaXRlX3N0cmluZyAo YmFja2xpc3QtPmRlYnVnX29uX2V4aXQgPyAiKiAiIDogIiAgIiwgMik7Ci0gICAgICBpZiAo YmFja2xpc3QtPm5hcmdzID09IFVORVZBTExFRCkKKyAgICAgIGlmIChiYWNrbGlzdC0+bmFy Z3MgPT0gKHNpemVfdCkgVU5FVkFMTEVEKQogCXsKIAkgIEZwcmluMSAoRmNvbnMgKCpiYWNr bGlzdC0+ZnVuY3Rpb24sICpiYWNrbGlzdC0+YXJncyksIFFuaWwpOwogCSAgd3JpdGVfc3Ry aW5nICgiXG4iLCAtMSk7CkBAIC0zMzIwLDcgKzMzMjMsNyBAQAogCSAgdGVtID0gKmJhY2ts aXN0LT5mdW5jdGlvbjsKIAkgIEZwcmluMSAodGVtLCBRbmlsKTsJLyogVGhpcyBjYW4gUVVJ VCAqLwogCSAgd3JpdGVfc3RyaW5nICgiKCIsIC0xKTsKLQkgIGlmIChiYWNrbGlzdC0+bmFy Z3MgPT0gTUFOWSkKKwkgIGlmIChiYWNrbGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgTUFOWSkK IAkgICAgewogCSAgICAgIGZvciAodGFpbCA9ICpiYWNrbGlzdC0+YXJncywgaSA9IDA7CiAJ CSAgICFOSUxQICh0YWlsKTsKQEAgLTMzNzIsMTEgKzMzNzUsMTEgQEAKIAogICBpZiAoIWJh Y2tsaXN0KQogICAgIHJldHVybiBRbmlsOwotICBpZiAoYmFja2xpc3QtPm5hcmdzID09IFVO RVZBTExFRCkKKyAgaWYgKGJhY2tsaXN0LT5uYXJncyA9PSAoc2l6ZV90KSBVTkVWQUxMRUQp CiAgICAgcmV0dXJuIEZjb25zIChRbmlsLCBGY29ucyAoKmJhY2tsaXN0LT5mdW5jdGlvbiwg KmJhY2tsaXN0LT5hcmdzKSk7CiAgIGVsc2UKICAgICB7Ci0gICAgICBpZiAoYmFja2xpc3Qt Pm5hcmdzID09IE1BTlkpCisgICAgICBpZiAoYmFja2xpc3QtPm5hcmdzID09IChzaXplX3Qp IE1BTlkpCiAJdGVtID0gKmJhY2tsaXN0LT5hcmdzOwogICAgICAgZWxzZQogCXRlbSA9IEZs aXN0IChiYWNrbGlzdC0+bmFyZ3MsIGJhY2tsaXN0LT5hcmdzKTsKQEAgLTMzOTAsMTcgKzMz OTMsMTggQEAKIG1hcmtfYmFja3RyYWNlICh2b2lkKQogewogICByZWdpc3RlciBzdHJ1Y3Qg YmFja3RyYWNlICpiYWNrbGlzdDsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNp emVfdCBpOwogCiAgIGZvciAoYmFja2xpc3QgPSBiYWNrdHJhY2VfbGlzdDsgYmFja2xpc3Q7 IGJhY2tsaXN0ID0gYmFja2xpc3QtPm5leHQpCiAgICAgewogICAgICAgbWFya19vYmplY3Qg KCpiYWNrbGlzdC0+ZnVuY3Rpb24pOwogCi0gICAgICBpZiAoYmFja2xpc3QtPm5hcmdzID09 IFVORVZBTExFRCB8fCBiYWNrbGlzdC0+bmFyZ3MgPT0gTUFOWSkKLQlpID0gMDsKKyAgICAg IGlmIChiYWNrbGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgVU5FVkFMTEVECisJICB8fCBiYWNr bGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgTUFOWSkKKwlpID0gMTsKICAgICAgIGVsc2UKLQlp ID0gYmFja2xpc3QtPm5hcmdzIC0gMTsKLSAgICAgIGZvciAoOyBpID49IDA7IGktLSkKKwlp ID0gYmFja2xpc3QtPm5hcmdzOworICAgICAgd2hpbGUgKGktLSkKIAltYXJrX29iamVjdCAo YmFja2xpc3QtPmFyZ3NbaV0pOwogICAgIH0KIH0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMv Zm5zLmMnCi0tLSBzcmMvZm5zLmMJMjAxMS0wMy0xNiAwNzo0OTo1NCArMDAwMAorKysgc3Jj L2Zucy5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTM0OCw3ICszNDgsNyBAQAog ICByZXR1cm4gaTEgPCBTQ0hBUlMgKHMyKSA/IFF0IDogUW5pbDsKIH0KIAwKLXN0YXRpYyBM aXNwX09iamVjdCBjb25jYXQgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsCitzdGF0 aWMgTGlzcF9PYmplY3QgY29uY2F0IChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdz LAogCQkJICAgZW51bSBMaXNwX1R5cGUgdGFyZ2V0X3R5cGUsIGludCBsYXN0X3NwZWNpYWwp OwogCiAvKiBBUkdTVVNFRCAqLwpAQCAtMzc4LDcgKzM3OCw3IEBACiBFYWNoIGFyZ3VtZW50 IG1heSBiZSBhIGxpc3QsIHZlY3RvciBvciBzdHJpbmcuCiBUaGUgbGFzdCBhcmd1bWVudCBp cyBub3QgY29waWVkLCBqdXN0IHVzZWQgYXMgdGhlIHRhaWwgb2YgdGhlIG5ldyBsaXN0Lgog dXNhZ2U6IChhcHBlbmQgJnJlc3QgU0VRVUVOQ0VTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykK IHsKICAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIExpc3BfQ29ucywgMSk7CiB9CkBA IC0zODgsNyArMzg4LDcgQEAKIFRoZSByZXN1bHQgaXMgYSBzdHJpbmcgd2hvc2UgZWxlbWVu dHMgYXJlIHRoZSBlbGVtZW50cyBvZiBhbGwgdGhlIGFyZ3VtZW50cy4KIEVhY2ggYXJndW1l bnQgbWF5IGJlIGEgc3RyaW5nIG9yIGEgbGlzdCBvciB2ZWN0b3Igb2YgY2hhcmFjdGVycyAo aW50ZWdlcnMpLgogdXNhZ2U6IChjb25jYXQgJnJlc3QgU0VRVUVOQ0VTKSAgKi8pCi0gIChp bnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09i amVjdCAqYXJncykKIHsKICAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIExpc3BfU3Ry aW5nLCAwKTsKIH0KQEAgLTM5OCw3ICszOTgsNyBAQAogVGhlIHJlc3VsdCBpcyBhIHZlY3Rv ciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRz LgogRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3Igb3Igc3RyaW5nLgogdXNh Z2U6ICh2Y29uY2F0ICZyZXN0IFNFUVVFTkNFUykgICAqLykKLSAgKGludCBuYXJncywgTGlz cF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQog ewogICByZXR1cm4gY29uY2F0IChuYXJncywgYXJncywgTGlzcF9WZWN0b3JsaWtlLCAwKTsK IH0KQEAgLTQ0Niw3ICs0NDYsOCBAQAogfTsKIAogc3RhdGljIExpc3BfT2JqZWN0Ci1jb25j YXQgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsIGVudW0gTGlzcF9UeXBlIHRhcmdl dF90eXBlLCBpbnQgbGFzdF9zcGVjaWFsKQorY29uY2F0IChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzLAorCWVudW0gTGlzcF9UeXBlIHRhcmdldF90eXBlLCBpbnQgbGFzdF9z cGVjaWFsKQogewogICBMaXNwX09iamVjdCB2YWw7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0 IHRhaWw7CkBAIC00NTUsNyArNDU2LDcgQEAKICAgRU1BQ1NfSU5UIHRvaW5kZXhfYnl0ZSA9 IDA7CiAgIHJlZ2lzdGVyIEVNQUNTX0lOVCByZXN1bHRfbGVuOwogICByZWdpc3RlciBFTUFD U19JTlQgcmVzdWx0X2xlbl9ieXRlOwotICByZWdpc3RlciBpbnQgYXJnbnVtOworICByZWdp c3RlciBzaXplX3QgYXJnbnVtOwogICBMaXNwX09iamVjdCBsYXN0X3RhaWw7CiAgIExpc3Bf T2JqZWN0IHByZXY7CiAgIGludCBzb21lX211bHRpYnl0ZTsKQEAgLTIyMzIsOSArMjIzMyw5 IEBACiAgICAgICAgZG9jOiAvKiBDb25jYXRlbmF0ZSBhbnkgbnVtYmVyIG9mIGxpc3RzIGJ5 IGFsdGVyaW5nIHRoZW0uCiBPbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBhbHRlcmVk LCBhbmQgbmVlZCBub3QgYmUgYSBsaXN0LgogdXNhZ2U6IChuY29uYyAmcmVzdCBMSVNUUykg ICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJn cywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJl Z2lzdGVyIHNpemVfdCBhcmdudW07CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHRhaWwsIHRl bSwgdmFsOwogCiAgIHZhbCA9IHRhaWwgPSBRbmlsOwpAQCAtMjc2Myw3ICsyNzY0LDcgQEAK ICAgICAgICBkb2M6IC8qIEFwcGx5IHRoZSB2YWx1ZSBvZiBXSURHRVQncyBQUk9QRVJUWSB0 byB0aGUgd2lkZ2V0IGl0c2VsZi4KIEFSR1MgYXJlIHBhc3NlZCBhcyBleHRyYSBhcmd1bWVu dHMgdG8gdGhlIGZ1bmN0aW9uLgogdXNhZ2U6ICh3aWRnZXQtYXBwbHkgV0lER0VUIFBST1BF UlRZICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICAvKiBUaGlzIGZ1 bmN0aW9uIGNhbiBHQy4gKi8KICAgTGlzcF9PYmplY3QgbmV3YXJnc1szXTsKQEAgLTMzNjcs NyArMzM2OCw3IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAgKi8KIAogc3RhdGljIHN0 cnVjdCBMaXNwX0hhc2hfVGFibGUgKmNoZWNrX2hhc2hfdGFibGUgKExpc3BfT2JqZWN0KTsK LXN0YXRpYyBpbnQgZ2V0X2tleV9hcmcgKExpc3BfT2JqZWN0LCBpbnQsIExpc3BfT2JqZWN0 ICosIGNoYXIgKik7CitzdGF0aWMgc2l6ZV90IGdldF9rZXlfYXJnIChMaXNwX09iamVjdCwg c2l6ZV90LCBMaXNwX09iamVjdCAqLCBjaGFyICopOwogc3RhdGljIHZvaWQgbWF5YmVfcmVz aXplX2hhc2hfdGFibGUgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKik7CiBzdGF0aWMgaW50 IGNtcGZuX2VxbCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqLCBMaXNwX09iamVjdCwgdW5z aWduZWQsCiAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QsIHVuc2lnbmVkKTsK QEAgLTM0MjIsMjcgKzM0MjMsMjMgQEAKIC8qIEZpbmQgS0VZIGluIEFSR1Mgd2hpY2ggaGFz IHNpemUgTkFSR1MuICBEb24ndCBjb25zaWRlciBpbmRpY2VzIGZvcgogICAgd2hpY2ggVVNF RFtJXSBpcyBub24temVyby4gIElmIGZvdW5kIGF0IGluZGV4IEkgaW4gQVJHUywgc2V0CiAg ICBVU0VEW0ldIGFuZCBVU0VEW0kgKyAxXSB0byAxLCBhbmQgcmV0dXJuIEkgKyAxLiAgT3Ro ZXJ3aXNlIHJldHVybgotICAgLTEuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXh0cmFj dCBhIGtleXdvcmQvYXJndW1lbnQgcGFpciBmcm9tCisgICAwLiAgVGhpcyBmdW5jdGlvbiBp cyB1c2VkIHRvIGV4dHJhY3QgYSBrZXl3b3JkL2FyZ3VtZW50IHBhaXIgZnJvbQogICAgYSBE RUZVTiBwYXJhbWV0ZXIgbGlzdC4gICovCiAKLXN0YXRpYyBpbnQKLWdldF9rZXlfYXJnIChM aXNwX09iamVjdCBrZXksIGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsIGNoYXIgKnVz ZWQpCitzdGF0aWMgc2l6ZV90CitnZXRfa2V5X2FyZyAoTGlzcF9PYmplY3Qga2V5LCBzaXpl X3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzLCBjaGFyICp1c2VkKQogewotICBpbnQgaTsK LQotICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3MgLSAxOyArK2kpCi0gICAgaWYgKCF1c2VkW2ld ICYmIEVRIChhcmdzW2ldLCBrZXkpKQotICAgICAgYnJlYWs7Ci0KLSAgaWYgKGkgPj0gbmFy Z3MgLSAxKQotICAgIGkgPSAtMTsKLSAgZWxzZQotICAgIHsKLSAgICAgIHVzZWRbaSsrXSA9 IDE7Ci0gICAgICB1c2VkW2ldID0gMTsKLSAgICB9Ci0KLSAgcmV0dXJuIGk7CisgIHNpemVf dCBpOworCisgIGZvciAoaSA9IDE7IGkgPCBuYXJnczsgaSsrKQorICAgIGlmICghdXNlZFtp IC0gMV0gJiYgRVEgKGFyZ3NbaSAtIDFdLCBrZXkpKQorICAgICAgeworCXVzZWRbaSAtIDFd ID0gMTsKKwl1c2VkW2ldID0gMTsKKwlyZXR1cm4gaTsKKyAgICAgIH0KKworICByZXR1cm4g MDsKIH0KIAogCkBAIC00MjkwLDEyICs0Mjg3LDEyIEBACiBpcyBuaWwuCiAKIHVzYWdlOiAo bWFrZS1oYXNoLXRhYmxlICZyZXN0IEtFWVdPUkQtQVJHUykgICovKQotICAoaW50IG5hcmdz LCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFy Z3MpCiB7CiAgIExpc3BfT2JqZWN0IHRlc3QsIHNpemUsIHJlaGFzaF9zaXplLCByZWhhc2hf dGhyZXNob2xkLCB3ZWFrOwogICBMaXNwX09iamVjdCB1c2VyX3Rlc3QsIHVzZXJfaGFzaDsK ICAgY2hhciAqdXNlZDsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogCiAgIC8qIFRoZSB2ZWN0 b3IgYHVzZWQnIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhcmd1bWVudHMgdGhhdAogICAg ICBoYXZlIGJlZW4gY29uc3VtZWQuICAqLwpAQCAtNDMwNCw3ICs0MzAxLDcgQEAKIAogICAv KiBTZWUgaWYgdGhlcmUncyBhIGA6dGVzdCBURVNUJyBhbW9uZyB0aGUgYXJndW1lbnRzLiAg Ki8KICAgaSA9IGdldF9rZXlfYXJnIChRQ3Rlc3QsIG5hcmdzLCBhcmdzLCB1c2VkKTsKLSAg dGVzdCA9IGkgPCAwID8gUWVxbCA6IGFyZ3NbaV07CisgIHRlc3QgPSBpID8gYXJnc1tpXSA6 IFFlcWw7CiAgIGlmICghRVEgKHRlc3QsIFFlcSkgJiYgIUVRICh0ZXN0LCBRZXFsKSAmJiAh RVEgKHRlc3QsIFFlcXVhbCkpCiAgICAgewogICAgICAgLyogU2VlIGlmIGl0IGlzIGEgdXNl ci1kZWZpbmVkIHRlc3QuICAqLwpAQCAtNDMyMSw3ICs0MzE4LDcgQEAKIAogICAvKiBTZWUg aWYgdGhlcmUncyBhIGA6c2l6ZSBTSVpFJyBhcmd1bWVudC4gICovCiAgIGkgPSBnZXRfa2V5 X2FyZyAoUUNzaXplLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHNpemUgPSBpIDwgMCA/IFFu aWwgOiBhcmdzW2ldOworICBzaXplID0gaSA/IGFyZ3NbaV0gOiBRbmlsOwogICBpZiAoTklM UCAoc2l6ZSkpCiAgICAgc2l6ZSA9IG1ha2VfbnVtYmVyIChERUZBVUxUX0hBU0hfU0laRSk7 CiAgIGVsc2UgaWYgKCFJTlRFR0VSUCAoc2l6ZSkgfHwgWElOVCAoc2l6ZSkgPCAwKQpAQCAt NDMyOSw3ICs0MzI2LDcgQEAKIAogICAvKiBMb29rIGZvciBgOnJlaGFzaC1zaXplIFNJWkUn LiAgKi8KICAgaSA9IGdldF9rZXlfYXJnIChRQ3JlaGFzaF9zaXplLCBuYXJncywgYXJncywg dXNlZCk7Ci0gIHJlaGFzaF9zaXplID0gaSA8IDAgPyBtYWtlX2Zsb2F0IChERUZBVUxUX1JF SEFTSF9TSVpFKSA6IGFyZ3NbaV07CisgIHJlaGFzaF9zaXplID0gaSA/IGFyZ3NbaV0gOiBt YWtlX2Zsb2F0IChERUZBVUxUX1JFSEFTSF9TSVpFKTsKICAgaWYgKCFOVU1CRVJQIChyZWhh c2hfc2l6ZSkKICAgICAgIHx8IChJTlRFR0VSUCAocmVoYXNoX3NpemUpICYmIFhJTlQgKHJl aGFzaF9zaXplKSA8PSAwKQogICAgICAgfHwgWEZMT0FUSU5UIChyZWhhc2hfc2l6ZSkgPD0g MS4wKQpAQCAtNDMzNyw3ICs0MzM0LDcgQEAKIAogICAvKiBMb29rIGZvciBgOnJlaGFzaC10 aHJlc2hvbGQgVEhSRVNIT0xEJy4gICovCiAgIGkgPSBnZXRfa2V5X2FyZyAoUUNyZWhhc2hf dGhyZXNob2xkLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHJlaGFzaF90aHJlc2hvbGQgPSBp IDwgMCA/IG1ha2VfZmxvYXQgKERFRkFVTFRfUkVIQVNIX1RIUkVTSE9MRCkgOiBhcmdzW2ld OworICByZWhhc2hfdGhyZXNob2xkID0gaSA/IGFyZ3NbaV0gOiBtYWtlX2Zsb2F0IChERUZB VUxUX1JFSEFTSF9USFJFU0hPTEQpOwogICBpZiAoIUZMT0FUUCAocmVoYXNoX3RocmVzaG9s ZCkKICAgICAgIHx8IFhGTE9BVElOVCAocmVoYXNoX3RocmVzaG9sZCkgPD0gMC4wCiAgICAg ICB8fCBYRkxPQVRJTlQgKHJlaGFzaF90aHJlc2hvbGQpID4gMS4wKQpAQCAtNDM0NSw3ICs0 MzQyLDcgQEAKIAogICAvKiBMb29rIGZvciBgOndlYWtuZXNzIFdFQUsnLiAgKi8KICAgaSA9 IGdldF9rZXlfYXJnIChRQ3dlYWtuZXNzLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHdlYWsg PSBpIDwgMCA/IFFuaWwgOiBhcmdzW2ldOworICB3ZWFrID0gaSA/IGFyZ3NbaV0gOiBRbmls OwogICBpZiAoRVEgKHdlYWssIFF0KSkKICAgICB3ZWFrID0gUWtleV9hbmRfdmFsdWU7CiAg IGlmICghTklMUCAod2VhaykKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZm9udC5jJwotLS0g c3JjL2ZvbnQuYwkyMDExLTAzLTE2IDIxOjIzOjM3ICswMDAwCisrKyBzcmMvZm9udC5jCTIw MTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTM4MzEsMTAgKzM4MzEsMTAgQEAKIGxhbmd1 YWdlIHN5c3RlbSBtdXN0IGNvbnRhaW4gYG1hcmsnIGZlYXR1cmUuCiAKIHVzYWdlOiAoZm9u dC1zcGVjIEFSR1MuLi4pICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVj dCBzcGVjID0gZm9udF9tYWtlX3NwZWMgKCk7Ci0gIGludCBpOworICBzaXplX3QgaTsKIAog ICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkgKz0gMikKICAgICB7Cgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2ZyYW1lLmMnCi0tLSBzcmMvZnJhbWUuYwkyMDExLTAzLTIzIDEwOjA2OjU3 ICswMDAwCisrKyBzcmMvZnJhbWUuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0y OTAyLDcgKzI5MDIsNyBAQAogICAvKiBSZWNvcmQgaW4gdGhlc2UgdmVjdG9ycyBhbGwgdGhl IHBhcm1zIHNwZWNpZmllZC4gICovCiAgIExpc3BfT2JqZWN0ICpwYXJtczsKICAgTGlzcF9P YmplY3QgKnZhbHVlczsKLSAgaW50IGksIHA7CisgIHNpemVfdCBpLCBwOwogICBpbnQgbGVm dF9ub19jaGFuZ2UgPSAwLCB0b3Bfbm9fY2hhbmdlID0gMDsKICAgaW50IGljb25fbGVmdF9u b19jaGFuZ2UgPSAwLCBpY29uX3RvcF9ub19jaGFuZ2UgPSAwOwogICBpbnQgc2l6ZV9jaGFu Z2VkID0gMDsKQEAgLTI5NzUsNyArMjk3NSw3IEBACiAgICAgfQogCiAgIC8qIE5vdyBwcm9j ZXNzIHRoZW0gaW4gcmV2ZXJzZSBvZiBzcGVjaWZpZWQgb3JkZXIuICAqLwotICBmb3IgKGkt LTsgaSA+PSAwOyBpLS0pCisgIHdoaWxlIChpLS0gIT0gMCkKICAgICB7CiAgICAgICBMaXNw X09iamVjdCBwcm9wLCB2YWw7CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwot LS0gc3JjL2xpc3AuaAkyMDExLTAzLTIyIDA5OjA4OjExICswMDAwCisrKyBzcmMvbGlzcC5o CTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTk2NCw3ICs5NjQsNyBAQAogICAgICAg TGlzcF9PYmplY3QgKCphNykgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmpl Y3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 KTsKICAgICAgIExpc3BfT2JqZWN0ICgqYTgpIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3Qs IExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBM aXNwX09iamVjdCwgTGlzcF9PYmplY3QpOwogICAgICAgTGlzcF9PYmplY3QgKCphVU5FVkFM TEVEKSAoTGlzcF9PYmplY3QgYXJncyk7Ci0gICAgICBMaXNwX09iamVjdCAoKmFNQU5ZKSAo aW50LCBMaXNwX09iamVjdCAqKTsKKyAgICAgIExpc3BfT2JqZWN0ICgqYU1BTlkpIChzaXpl X3QsIExpc3BfT2JqZWN0ICopOwogICAgIH0gZnVuY3Rpb247CiAgICAgc2hvcnQgbWluX2Fy Z3MsIG1heF9hcmdzOwogICAgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lOwpAQCAtMTgwOSw3 ICsxODA5LDcgQEAKIAogLyogTm90ZSB0aGF0IHRoZSB3ZWlyZCB0b2tlbi1zdWJzdGl0dXRp b24gc2VtYW50aWNzIG9mIEFOU0kgQyBtYWtlcwogICAgdGhpcyB3b3JrIGZvciBNQU5ZIGFu ZCBVTkVWQUxMRUQuICAqLwotI2RlZmluZSBERUZVTl9BUkdTX01BTlkJCShpbnQsIExpc3Bf T2JqZWN0ICopCisjZGVmaW5lIERFRlVOX0FSR1NfTUFOWQkJKHNpemVfdCwgTGlzcF9PYmpl Y3QgKikKICNkZWZpbmUgREVGVU5fQVJHU19VTkVWQUxMRUQJKExpc3BfT2JqZWN0KQogI2Rl ZmluZSBERUZVTl9BUkdTXzAJKHZvaWQpCiAjZGVmaW5lIERFRlVOX0FSR1NfMQkoTGlzcF9P YmplY3QpCkBAIC0yMDc5LDcgKzIwNzksNyBAQAogICB2b2xhdGlsZSBMaXNwX09iamVjdCAq dmFyOwogCiAgIC8qIE51bWJlciBvZiBjb25zZWN1dGl2ZSBwcm90ZWN0ZWQgdmFyaWFibGVz LiAgKi8KLSAgaW50IG52YXJzOworICBzaXplX3QgbnZhcnM7CiAKICNpZmRlZiBERUJVR19H Q1BSTwogICBpbnQgbGV2ZWw7CkBAIC0yODYwLDcgKzI4NjAsNyBAQAogZXh0ZXJuIExpc3Bf T2JqZWN0IGludGVybmFsX2NvbmRpdGlvbl9jYXNlIChMaXNwX09iamVjdCAoKikgKHZvaWQp LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QgKCopIChMaXNwX09iamVjdCkpOwogZXh0ZXJu IExpc3BfT2JqZWN0IGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKExpc3BfT2JqZWN0ICgq KSAoTGlzcF9PYmplY3QpLCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 ICgqKSAoTGlzcF9PYmplY3QpKTsKIGV4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25k aXRpb25fY2FzZV8yIChMaXNwX09iamVjdCAoKikgKExpc3BfT2JqZWN0LCBMaXNwX09iamVj dCksIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 ICgqKSAoTGlzcF9PYmplY3QpKTsKLWV4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25k aXRpb25fY2FzZV9uIChMaXNwX09iamVjdCAoKikgKGludCwgTGlzcF9PYmplY3QgKiksIGlu dCwgTGlzcF9PYmplY3QgKiwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0ICgqKSAoTGlzcF9P YmplY3QpKTsKK2V4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25kaXRpb25fY2FzZV9u IChMaXNwX09iamVjdCAoKikgKHNpemVfdCwgTGlzcF9PYmplY3QgKiksIHNpemVfdCwgTGlz cF9PYmplY3QgKiwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0ICgqKSAoTGlzcF9PYmplY3Qp KTsKIGV4dGVybiB2b2lkIHNwZWNiaW5kIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QpOwog ZXh0ZXJuIHZvaWQgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChMaXNwX09iamVjdCAoKikgKExp c3BfT2JqZWN0KSwgTGlzcF9PYmplY3QpOwogZXh0ZXJuIExpc3BfT2JqZWN0IHVuYmluZF90 byAoaW50LCBMaXNwX09iamVjdCk7CkBAIC0yODcwLDcgKzI4NzAsNyBAQAogZXh0ZXJuIExp c3BfT2JqZWN0IHVuX2F1dG9sb2FkIChMaXNwX09iamVjdCk7CiBFWEZVTiAoRmZldGNoX2J5 dGVjb2RlLCAxKTsKIGV4dGVybiB2b2lkIGluaXRfZXZhbF9vbmNlICh2b2lkKTsKLWV4dGVy biBMaXNwX09iamVjdCBzYWZlX2NhbGwgKGludCwgTGlzcF9PYmplY3QgKik7CitleHRlcm4g TGlzcF9PYmplY3Qgc2FmZV9jYWxsIChzaXplX3QsIExpc3BfT2JqZWN0ICopOwogZXh0ZXJu IExpc3BfT2JqZWN0IHNhZmVfY2FsbDEgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiBl eHRlcm4gTGlzcF9PYmplY3Qgc2FmZV9jYWxsMiAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 LCBMaXNwX09iamVjdCk7CiBleHRlcm4gdm9pZCBpbml0X2V2YWwgKHZvaWQpOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9wcm9jZXNzLmMnCi0tLSBzcmMvcHJvY2Vzcy5jCTIwMTEtMDMt MjYgMDE6MjM6MTUgKzAwMDAKKysrIHNyYy9wcm9jZXNzLmMJMjAxMS0wMy0yNyAwMjoxMjoz NiArMDAwMApAQCAtMTUxMiwxMSArMTUxMiwxMSBAQAogc3ludGF4LgogCiB1c2FnZTogKHN0 YXJ0LXByb2Nlc3MgTkFNRSBCVUZGRVIgUFJPR1JBTSAmcmVzdCBQUk9HUkFNLUFSR1MpICAq LykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXpl X3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVj dCBidWZmZXIsIG5hbWUsIHByb2dyYW0sIHByb2MsIGN1cnJlbnRfZGlyLCB0ZW07CiAgIHJl Z2lzdGVyIHVuc2lnbmVkIGNoYXIgKipuZXdfYXJndjsKLSAgcmVnaXN0ZXIgaW50IGk7Cisg IHJlZ2lzdGVyIHNpemVfdCBpOwogICBpbnQgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwog CiAgIGJ1ZmZlciA9IGFyZ3NbMV07CkBAIC0xNzIyLDcgKzE3MjIsNyBAQAogICAgICAgbmV3 X2FyZ3YgPSAodW5zaWduZWQgY2hhciAqKikgYWxsb2NhICgobmFyZ3MgLSAxKSAqIHNpemVv ZiAoY2hhciAqKSk7CiAgICAgICBuZXdfYXJndltuYXJncyAtIDJdID0gMDsKIAotICAgICAg Zm9yIChpID0gbmFyZ3MgLSAzOyBpID49IDA7IGktLSkKKyAgICAgIGZvciAoaSA9IG5hcmdz IC0gMjsgaS0tICE9IDA7ICkKIAl7CiAJICBuZXdfYXJndltpXSA9IFNEQVRBIChYQ0FSICh0 ZW0pKTsKIAkgIHRlbSA9IFhDRFIgKHRlbSk7CkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogXChz ZXJpYWwtcHJvY2Vzcy1jb25maWd1cmUgOnBvcnQgIlxcXFwuXFxDT00xMyIgOmJ5dGVzaXpl IDcpCiAKIHVzYWdlOiAoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlICZyZXN0IEFSR1MpICAq LykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3Ms IExpc3BfT2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3QgTGlzcF9Qcm9jZXNzICpwOwogICBM aXNwX09iamVjdCBjb250YWN0ID0gUW5pbDsKQEAgLTI3OTksNyArMjc5OSw3IEBACiBcKG1h a2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIi9kZXYvdHR5LkJsdWVDb25zb2xlLVNQUC0xIiA6 c3BlZWQgbmlsKQogCiB1c2FnZTogIChtYWtlLXNlcmlhbC1wcm9jZXNzICZyZXN0IEFSR1Mp ICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFy Z3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBpbnQgZmQgPSAtMTsKICAgTGlzcF9PYmpl Y3QgcHJvYywgY29udGFjdCwgcG9ydDsKQEAgLTMwNzcsNyArMzA3Nyw3IEBACiBpbmZvcm1h dGlvbiwgaXMgYXZhaWxhYmxlIHZpYSB0aGUgYHByb2Nlc3MtY29udGFjdCcgZnVuY3Rpb24u CiAKIHVzYWdlOiAobWFrZS1uZXR3b3JrLXByb2Nlc3MgJnJlc3QgQVJHUykgICovKQotICAo aW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9P YmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHByb2M7CiAgIExpc3BfT2JqZWN0IGNv bnRhY3Q7CkBAIC0zMzkzLDcgKzMzOTMsOCBAQAogCiAgIGZvciAobHJlcyA9IHJlczsgbHJl czsgbHJlcyA9IGxyZXMtPmFpX25leHQpCiAgICAgewotICAgICAgaW50IG9wdG4sIG9wdGJp dHM7CisgICAgICBzaXplX3Qgb3B0bjsKKyAgICAgIGludCBvcHRiaXRzOwogCiAjaWZkZWYg V0lORE9XU05UCiAgICAgcmV0cnlfY29ubmVjdDoKCj09PSBtb2RpZmllZCBmaWxlICdzcmMv eGRpc3AuYycKLS0tIHNyYy94ZGlzcC5jCTIwMTEtMDMtMjUgMjA6MDA6MjUgKzAwMDAKKysr IHNyYy94ZGlzcC5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTIxODEsNyArMjE4 MSw3IEBACiAgICByZWRpc3BsYXkgZHVyaW5nIHRoZSBldmFsdWF0aW9uLiAgKi8KIAogTGlz cF9PYmplY3QKLXNhZmVfY2FsbCAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKK3Nh ZmVfY2FsbCAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAgTGlzcF9P YmplY3QgdmFsOwogCkBAIC0xNjM4OSw3ICsxNjM4OSw3IEBACiBERUZVTiAoInRyYWNlLXRv LXN0ZGVyciIsIEZ0cmFjZV90b19zdGRlcnIsIFN0cmFjZV90b19zdGRlcnIsIDEsIE1BTlks ICIiLAogICAgICAgIGRvYzogLyogTGlrZSBgZm9ybWF0JywgYnV0IHByaW50IHJlc3VsdCB0 byBzdGRlcnIuCiB1c2FnZTogKHRyYWNlLXRvLXN0ZGVyciBTVFJJTkcgJnJlc3QgT0JKRUNU UykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHMgPSBGZm9ybWF0 IChuYXJncywgYXJncyk7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzIiwgU0RBVEEgKHMpKTsK Cg== --------------020900030601050503010800--