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#12632: file permissions checking mishandled when setuid Date: Sun, 21 Oct 2012 23:03:30 -0700 Organization: UCLA Computer Science Department Message-ID: <5084E1B2.2020105@cs.ucla.edu> References: <5078CAB6.7020509@cs.ucla.edu> <83fw5h5yo6.fsf@gnu.org> <507B010F.20105@cs.ucla.edu> <831uh06gqd.fsf@gnu.org> <507B15B0.2040802@cs.ucla.edu> <83txtw4xmk.fsf@gnu.org> <507B2354.3030408@cs.ucla.edu> <83sj9g4vy7.fsf@gnu.org> <507BAA6C.2000601@cs.ucla.edu> <83lif74p78.fsf@gnu.org> <507C823D.40304@cs.ucla.edu> <83d30j3wqg.fsf@gnu.org> <507CF802.6000305@cs.ucla.edu> <83a9vm4bmv.fsf@gnu.org> <50818763.80501@cs.ucla.edu> <83wqymz4me.fsf@gnu.org> <5081A1DF.9000009@cs.ucla.edu> <5081ABD6.9060002@cs.ucla.edu> <23r4osd2f9.fsf@fencepost.gnu.org> <50836366.6080600@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060907030404090208060400" X-Trace: ger.gmane.org 1350885879 14919 80.91.229.3 (22 Oct 2012 06:04:39 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 22 Oct 2012 06:04:39 +0000 (UTC) Cc: 12632@debbugs.gnu.org To: Glenn Morris Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Oct 22 08:04:45 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TQB80-00060C-AP for geb-bug-gnu-emacs@m.gmane.org; Mon, 22 Oct 2012 08:04:44 +0200 Original-Received: from localhost ([::1]:57335 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TQB7s-0001Z7-PU for geb-bug-gnu-emacs@m.gmane.org; Mon, 22 Oct 2012 02:04:36 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:54769) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TQB7h-0001YX-Od for bug-gnu-emacs@gnu.org; Mon, 22 Oct 2012 02:04:34 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TQB7a-0006Zf-0y for bug-gnu-emacs@gnu.org; Mon, 22 Oct 2012 02:04:25 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:44590) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TQB7Z-0006Za-Rf for bug-gnu-emacs@gnu.org; Mon, 22 Oct 2012 02:04:17 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TQB9G-0000Xq-47 for bug-gnu-emacs@gnu.org; Mon, 22 Oct 2012 02:06:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 22 Oct 2012 06:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12632 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: security patch Original-Received: via spool by 12632-submit@debbugs.gnu.org id=B12632.13508859382056 (code B ref 12632); Mon, 22 Oct 2012 06:06:02 +0000 Original-Received: (at 12632) by debbugs.gnu.org; 22 Oct 2012 06:05:38 +0000 Original-Received: from localhost ([127.0.0.1]:54841 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TQB8m-0000X0-0p for submit@debbugs.gnu.org; Mon, 22 Oct 2012 02:05:38 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:36075) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TQB8b-0000Wf-I0 for 12632@debbugs.gnu.org; Mon, 22 Oct 2012 02:05:30 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id AA5CBA60008; Sun, 21 Oct 2012 23:03:30 -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 FkhwaMZkhzzD; Sun, 21 Oct 2012 23:03:27 -0700 (PDT) Original-Received: from [192.168.1.3] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id B3584A60002; Sun, 21 Oct 2012 23:03:26 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) 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: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:65834 Archived-At: This is a multi-part message in MIME format. --------------060907030404090208060400 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/20/2012 09:24 PM, Glenn Morris wrote: > I really can't see how this is something that "People do [...] all the > time, often unwittingly" Yes, you're right, I was exaggerating -- it used to be more common, but it's rarer nowadays. Anyway, now that this patch is waiting until after the feature freeze, it can accommodate some cleanup changes. I've attached the revised version. It speeds up file-accessible-directory-p by doing it with one system call rather than two, avoids the unnecessary NILP check in file-writable-p that we discussed earlier, fixes a bug where file-writable-p thinks that one can create a file in a directory even when one cannot, does a better job of checking whether directories are searchable rather than merely whether they exist, and closes a couple more races related to permissions checking. None of this is urgent but I figured I'd write it up while I was thinking about it. This patch is relative to trunk bzr 110616. --------------060907030404090208060400 Content-Type: text/plain; charset=UTF-8; name="euidaccess.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="euidaccess.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTItMTAt MTkgMTk6MjU6MTggKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMi0xMC0yMCAwMToxMzozNSAr MDAwMApAQCAtODgsNiArODgsNyBAQAogbGliL2FyZy1ub25udWxsLmgKIGxpYi9jKytkZWZz LmgKIGxpYi9leGVjaW5mby5oCitsaWIvZmNudGwuaAogbGliL2dldG9wdC5oCiBsaWIvaW50 dHlwZXMuaAogbGliL3N0ZGFsaWduLmgKCj09PSBtb2RpZmllZCBmaWxlICdDaGFuZ2VMb2cn Ci0tLSBDaGFuZ2VMb2cJMjAxMi0xMC0yMSAwMTozNTo0NiArMDAwMAorKysgQ2hhbmdlTG9n CTIwMTItMTAtMjIgMDI6NDM6MTYgKzAwMDAKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0y MiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVc2UgZmFjY2Vzc2F0 LCBub3QgYWNjZXNzLCB3aGVuIGNoZWNraW5nIGZpbGUgcGVybWlzc2lvbnMgKEJ1ZyMxMjYz MikuCisJKiAuYnpyaWdub3JlOiBBZGQgbGliL2ZjbnRsLmguCisJKiBjb25maWd1cmUuYWMg KGV1aWRhY2Nlc3MpOiBSZW1vdmUgY2hlY2s7IGdudWxpYiBkb2VzIHRoaXMgZm9yIHVzIG5v dy4KKwkoZ2xfRkNOVExfT19GTEFHUyk6IERlZmluZSBhIGR1bW15IHZlcnNpb24uCisJKiBs aWIvYXQtZnVuYy5jLCBsaWIvZXVpZGFjY2Vzcy5jLCBsaWIvZmFjY2Vzc2F0LmMsIGxpYi9m Y250bC5pbi5oOgorCSogbGliL2dldGdyb3Vwcy5jLCBsaWIvZ3JvdXAtbWVtYmVyLmMsIGxp Yi9yb290LXVpZC5oOgorCSogbGliL3hhbGxvYy1vdmVyc2l6ZWQuaCwgbTQvZXVpZGFjY2Vz cy5tNCwgbTQvZmFjY2Vzc2F0Lm00OgorCSogbTQvZmNudGxfaC5tNCwgbTQvZ2V0Z3JvdXBz Lm00LCBtNC9ncm91cC1tZW1iZXIubTQ6CisJTmV3IGZpbGVzLCBmcm9tIGdudWxpYi4KKwkq IGxpYi9nbnVsaWIubWssIG00L2dudWxpYi1jb21wLm00OiBSZWdlbmVyYXRlLgorCiAyMDEy LTEwLTIxICBHbGVubiBNb3JyaXMgIDxyZ21AZ251Lm9yZz4KIAogCSogTWFrZWZpbGUuaW4g KGluc3RhbGwtZXRjKTogRG9uJ3QgaW5zdGFsbCBlbWFjczIyIGljb25zLgoKPT09IG1vZGlm aWVkIGZpbGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0NoYW5nZUxvZwkyMDEyLTEw LTE5IDE5OjI1OjE4ICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJMjAxMi0xMC0yMiAwMjo0 MzoxNiArMDAwMApAQCAtMSwzICsxLDExIEBACisyMDEyLTEwLTIyICBQYXVsIEVnZ2VydCAg PGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBmYWNjZXNzYXQsIG5vdCBhY2Nlc3MsIHdo ZW4gY2hlY2tpbmcgZmlsZSBwZXJtaXNzaW9ucyAoQnVnIzEyNjMyKS4KKwkqIG1lcmdlLWdu dWxpYiAoR05VTElCX01PRFVMRVMpOiBBZGQgZmFjY2Vzc2F0LgorCShHTlVMSUJfVE9PTF9G TEFHUyk6IEF2b2lkIGF0LWludGVybmFsLCBmY2hkaXIsIG1hbGxvYy1wb3NpeCwKKwlvcGVu YXQtZGllLCBvcGVuYXQtaCwgc2F2ZS1jd2QuICBEbyBub3QgYXZvaWQgZmNudGwtaC4KKwlP bWl0IGdudWxpYidzIG00L2ZjbnRsLW8ubTQuCisKIDIwMTItMTAtMTIgIEtlbmljaGkgSGFu ZGEgIDxoYW5kYUBnbnUub3JnPgogCiAJKiBjaGFyc2V0cy9NYWtlZmlsZSAoSklTQzYyMjYu bWFwKTogQWRkIG1pc3NpbmcgbWFwcGluZ3MuCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4v bWVyZ2UtZ251bGliJwotLS0gYWRtaW4vbWVyZ2UtZ251bGliCTIwMTItMTAtMTkgMTk6MjU6 MTggKzAwMDAKKysrIGFkbWluL21lcmdlLWdudWxpYgkyMDEyLTEwLTIwIDAxOjEzOjM1ICsw MDAwCkBAIC0yOCw3ICsyOCw3IEBACiBHTlVMSUJfTU9EVUxFUz0nCiAgIGFsbG9jYS1vcHQg Yy1jdHlwZSBjLXN0cmNhc2UKICAgY2FyZWFkbGlua2F0IGNyeXB0by9tZDUgY3J5cHRvL3No YTEgY3J5cHRvL3NoYTI1NiBjcnlwdG8vc2hhNTEyCi0gIGR0b2FzdHIgZHRvdGltZXNwZWMg ZHVwMiBlbnZpcm9uIGV4ZWNpbmZvCisgIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZp cm9uIGV4ZWNpbmZvIGZhY2Nlc3NhdAogICBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1n bnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkKICAgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdl ZmlsZSBsc3RhdAogICBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdt YXNrIHJlYWRsaW5rCkBAIC0zOSw5ICszOSwxMiBAQAogJwogCiBHTlVMSUJfVE9PTF9GTEFH Uz0nCi0gIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY250bCAtLWF2b2lkPWZjbnRsLWggLS1h dm9pZD1mc3RhdAotICAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cK LSAgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0t YXZvaWQ9c3lzX3R5cGVzCisgIC0tYXZvaWQ9YXQtaW50ZXJuYWwKKyAgLS1hdm9pZD1lcnJu byAtLWF2b2lkPWZjaGRpciAtLWF2b2lkPWZjbnRsIC0tYXZvaWQ9ZnN0YXQKKyAgLS1hdm9p ZD1tYWxsb2MtcG9zaXggLS1hdm9pZD1tc3ZjLWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93 CisgIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5hdC1oCisgIC0tYXZvaWQ9cmFp c2UKKyAgLS1hdm9pZD1zYXZlLWN3ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2Nt YXNrIC0tYXZvaWQ9c3lzX3R5cGVzCiAgIC0tYXZvaWQ9dGhyZWFkbGliCiAgIC0tY29uZGl0 aW9uYWwtZGVwZW5kZW5jaWVzIC0taW1wb3J0IC0tbm8tY2hhbmdlbG9nIC0tbm8tdmMtZmls ZXMKICAgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tawpAQCAtODUsNyArODgsNyBAQAogfQog CiAiJGdudWxpYl9zcmNkaXIiL2dudWxpYi10b29sIC0tZGlyPSIkc3JjIiAkR05VTElCX1RP T0xfRkxBR1MgJEdOVUxJQl9NT0RVTEVTICYmCi1ybSAtLSAiJHNyYyJtNC9nbnVsaWItY2Fj aGUubTQgIiRzcmMibTQvd2Fybi1vbi11c2UubTQgJiYKK3JtIC0tICIkc3JjIm00L2ZjbnRs LW8ubTQgIiRzcmMibTQvZ251bGliLWNhY2hlLm00ICIkc3JjIm00L3dhcm4tb24tdXNlLm00 ICYmCiBjcCAtLSAiJGdudWxpYl9zcmNkaXIiL2J1aWxkLWF1eC90ZXhpbmZvLnRleCAiJHNy YyJkb2MvbWlzYyAmJgogY3AgLS0gIiRnbnVsaWJfc3JjZGlyIi9idWlsZC1hdXgvbW92ZS1p Zi1jaGFuZ2UgIiRzcmMiYnVpbGQtYXV4ICYmCiBhdXRvcmVjb25mIC1pIC1JIG00IC0tICR7 c3JjOisiJHNyYyJ9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0gY29u ZmlndXJlLmFjCTIwMTItMTAtMjEgMDc6MjM6MzQgKzAwMDAKKysrIGNvbmZpZ3VyZS5hYwky MDEyLTEwLTIyIDAyOjQzOjE2ICswMDAwCkBAIC01NzIsNiArNTcyLDggQEAKICAgdGVzdCAi eCROT05fR0NDX1RFU1RfT1BUSU9OUyIgIT0geCAmJiBDQz0iJENDICROT05fR0NDX1RFU1Rf T1BUSU9OUyIKIGZpCiAKKyMgQXZvaWQgZ251bGliJ3MgdGVzdHMgZm9yIE9fTk9BVElNRSBh bmQgT19OT0ZPTExPVywgYXMgd2UgZG9uJ3QgdXNlIHRoZW0uCitBQ19ERUZVTihbZ2xfRkNO VExfT19GTEFHU10pCiAjIEF2b2lkIGdudWxpYidzIHRocmVhZGxpYiBtb2R1bGUsIGFzIHdl IGRvIHRocmVhZHMgb3VyIG93biB3YXkuCiBBQ19ERUZVTihbZ2xfVEhSRUFETElCXSkKIApA QCAtMjg3Miw3ICsyODc0LDcgQEAKIEFDX0NIRUNLX0ZVTkNTKGdldGhvc3RuYW1lIFwKIGNs b3NlZGlyIGdldHJ1c2FnZSBnZXRfY3VycmVudF9kaXJfbmFtZSBcCiBscmFuZDQ4IHNldHNp ZCBcCi1mcGF0aGNvbmYgc2VsZWN0IGV1aWRhY2Nlc3MgZ2V0cGFnZXNpemUgc2V0bG9jYWxl IFwKK2ZwYXRoY29uZiBzZWxlY3QgZ2V0cGFnZXNpemUgc2V0bG9jYWxlIFwKIHV0aW1lcyBn ZXRybGltaXQgc2V0cmxpbWl0IHNldHBnaWQgZ2V0Y3dkIHNodXRkb3duIGdldGFkZHJpbmZv IFwKIF9fZnBlbmRpbmcgc3Ryc2lnbmFsIHNldGl0aW1lciBcCiBzZW5kdG8gcmVjdmZyb20g Z2V0c29ja25hbWUgZ2V0cGVlcm5hbWUgZ2V0aWZhZGRycyBmcmVlaWZhZGRycyBcCgo9PT0g YWRkZWQgZmlsZSAnbGliL2F0LWZ1bmMuYycKLS0tIGxpYi9hdC1mdW5jLmMJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMAorKysgbGliL2F0LWZ1bmMuYwkyMDEyLTEwLTE1IDA2OjA1OjQ2 ICswMDAwCkBAIC0wLDAgKzEsMTQ2IEBACisvKiBEZWZpbmUgYXQtc3R5bGUgZnVuY3Rpb25z IGxpa2UgZnN0YXRhdCwgdW5saW5rYXQsIGZjaG93bmF0LCBldGMuCisgICBDb3B5cmlnaHQg KEMpIDIwMDYsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKworI2luY2x1ZGUg ImRvc25hbWUuaCIgLyogc29sZWx5IGZvciBkZWZpbml0aW9uIG9mIElTX0FCU09MVVRFX0ZJ TEVfTkFNRSAqLworCisjaWZkZWYgR05VTElCX1NVUFBPUlRfT05MWV9BVF9GRENXRAorIyBp bmNsdWRlIDxlcnJuby5oPgorIyBpZm5kZWYgRU5PVFNVUAorIyAgZGVmaW5lIEVOT1RTVVAg RUlOVkFMCisjIGVuZGlmCisjZWxzZQorIyBpbmNsdWRlICJvcGVuYXQuaCIKKyMgaW5jbHVk ZSAib3BlbmF0LXByaXYuaCIKKyMgaW5jbHVkZSAic2F2ZS1jd2QuaCIKKyNlbmRpZgorCisj aWZkZWYgQVRfRlVOQ19VU0VfRjFfQ09ORAorIyBkZWZpbmUgQ0FMTF9GVU5DKEYpICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAoZmxhZyA9PSBBVF9GVU5DX1VTRV9GMV9DT05E ICAgICAgICAgICAgICAgICAgXAorICAgID8gQVRfRlVOQ19GMSAoRiBBVF9GVU5DX1BPU1Rf RklMRV9BUkdTKSAgICAgXAorICAgIDogQVRfRlVOQ19GMiAoRiBBVF9GVU5DX1BPU1RfRklM RV9BUkdTKSkKKyMgZGVmaW5lIFZBTElEQVRFX0ZMQUcoRikgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgaWYgKGZsYWcgJiB+QVRfRlVOQ19VU0VfRjFfQ09ORCkgICAgICAgICAgICAg IFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgIGVycm5vID0gRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgIHJldHVybiBGVU5DX0ZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9 CisjZWxzZQorIyBkZWZpbmUgQ0FMTF9GVU5DKEYpIChBVF9GVU5DX0YxIChGIEFUX0ZVTkNf UE9TVF9GSUxFX0FSR1MpKQorIyBkZWZpbmUgVkFMSURBVEVfRkxBRyhGKSAvKiBlbXB0eSAq LworI2VuZGlmCisKKyNpZmRlZiBBVF9GVU5DX1JFU1VMVAorIyBkZWZpbmUgRlVOQ19SRVNV TFQgQVRfRlVOQ19SRVNVTFQKKyNlbHNlCisjIGRlZmluZSBGVU5DX1JFU1VMVCBpbnQKKyNl bmRpZgorCisjaWZkZWYgQVRfRlVOQ19GQUlMCisjIGRlZmluZSBGVU5DX0ZBSUwgQVRfRlVO Q19GQUlMCisjZWxzZQorIyBkZWZpbmUgRlVOQ19GQUlMIC0xCisjZW5kaWYKKworLyogQ2Fs bCBBVF9GVU5DX0YxIHRvIG9wZXJhdGUgb24gRklMRSwgd2hpY2ggaXMgaW4gdGhlIGRpcmVj dG9yeQorICAgb3BlbiBvbiBkZXNjcmlwdG9yIEZELiAgSWYgQVRfRlVOQ19VU0VfRjFfQ09O RCBpcyBkZWZpbmVkIHRvIGEgdmFsdWUsCisgICBBVF9GVU5DX1BPU1RfRklMRV9QQVJBTV9E RUNMUyBtdXN0IGluY2x1ZGUgYSBwYXJhbWV0ZXIgbmFtZWQgZmxhZzsKKyAgIGNhbGwgQVRf RlVOQ19GMiBpZiBGTEFHIGlzIDAgb3IgZmFpbCBpZiBGTEFHIGNvbnRhaW5zIG1vcmUgYml0 cyB0aGFuCisgICBBVF9GVU5DX1VTRV9GMV9DT05ELiAgUmV0dXJuIGludCBhbmQgZmFpbCB3 aXRoIC0xIHVubGVzcyBBVF9GVU5DX1JFU1VMVAorICAgb3IgQVRfRlVOQ19GQUlMIGFyZSBk ZWZpbmVkLiAgSWYgcG9zc2libGUsIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcgdGhlCisgICB3 b3JraW5nIGRpcmVjdG9yeS4gIE90aGVyd2lzZSwgcmVzb3J0IHRvIHVzaW5nIHNhdmVfY3dk L2ZjaGRpciwKKyAgIHRoZW4gQVRfRlVOQ19GPy9yZXN0b3JlX2N3ZC4gIElmIGVpdGhlciB0 aGUgc2F2ZV9jd2Qgb3IgdGhlIHJlc3RvcmVfY3dkCisgICBmYWlscywgdGhlbiBnaXZlIGEg ZGlhZ25vc3RpYyBhbmQgZXhpdCBub256ZXJvLiAgKi8KK0ZVTkNfUkVTVUxUCitBVF9GVU5D X05BTUUgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSBBVF9GVU5DX1BPU1RfRklMRV9QQVJB TV9ERUNMUykKK3sKKyAgVkFMSURBVEVfRkxBRyAoZmxhZyk7CisKKyAgaWYgKGZkID09IEFU X0ZEQ1dEIHx8IElTX0FCU09MVVRFX0ZJTEVfTkFNRSAoZmlsZSkpCisgICAgcmV0dXJuIENB TExfRlVOQyAoZmlsZSk7CisKKyNpZmRlZiBHTlVMSUJfU1VQUE9SVF9PTkxZX0FUX0ZEQ1dE CisgIGVycm5vID0gRU5PVFNVUDsKKyAgcmV0dXJuIEZVTkNfRkFJTDsKKyNlbHNlCisgIHsK KyAgLyogQmUgY2FyZWZ1bCB0byBjaG9vc2UgbmFtZXMgdW5saWtlbHkgdG8gY29uZmxpY3Qg d2l0aAorICAgICBBVF9GVU5DX1BPU1RfRklMRV9QQVJBTV9ERUNMUy4gICovCisgIHN0cnVj dCBzYXZlZF9jd2Qgc2F2ZWRfY3dkOworICBpbnQgc2F2ZWRfZXJybm87CisgIEZVTkNfUkVT VUxUIGVycjsKKworICB7CisgICAgY2hhciBwcm9jX2J1ZltPUEVOQVRfQlVGRkVSX1NJWkVd OworICAgIGNoYXIgKnByb2NfZmlsZSA9IG9wZW5hdF9wcm9jX25hbWUgKHByb2NfYnVmLCBm ZCwgZmlsZSk7CisgICAgaWYgKHByb2NfZmlsZSkKKyAgICAgIHsKKyAgICAgICAgRlVOQ19S RVNVTFQgcHJvY19yZXN1bHQgPSBDQUxMX0ZVTkMgKHByb2NfZmlsZSk7CisgICAgICAgIGlu dCBwcm9jX2Vycm5vID0gZXJybm87CisgICAgICAgIGlmIChwcm9jX2ZpbGUgIT0gcHJvY19i dWYpCisgICAgICAgICAgZnJlZSAocHJvY19maWxlKTsKKyAgICAgICAgLyogSWYgdGhlIHN5 c2NhbGwgc3VjY2VlZHMsIG9yIGlmIGl0IGZhaWxzIHdpdGggYW4gdW5leHBlY3RlZAorICAg ICAgICAgICBlcnJubyB2YWx1ZSwgdGhlbiByZXR1cm4gcmlnaHQgYXdheS4gIE90aGVyd2lz ZSwgZmFsbCB0aHJvdWdoCisgICAgICAgICAgIGFuZCByZXNvcnQgdG8gdXNpbmcgc2F2ZV9j d2QvcmVzdG9yZV9jd2QuICAqLworICAgICAgICBpZiAoRlVOQ19GQUlMICE9IHByb2NfcmVz dWx0KQorICAgICAgICAgIHJldHVybiBwcm9jX3Jlc3VsdDsKKyAgICAgICAgaWYgKCEgRVhQ RUNURURfRVJSTk8gKHByb2NfZXJybm8pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVy cm5vID0gcHJvY19lcnJubzsKKyAgICAgICAgICAgIHJldHVybiBwcm9jX3Jlc3VsdDsKKyAg ICAgICAgICB9CisgICAgICB9CisgIH0KKworICBpZiAoc2F2ZV9jd2QgKCZzYXZlZF9jd2Qp ICE9IDApCisgICAgb3BlbmF0X3NhdmVfZmFpbCAoZXJybm8pOworICBpZiAoMCA8PSBmZCAm JiBmZCA9PSBzYXZlZF9jd2QuZGVzYykKKyAgICB7CisgICAgICAvKiBJZiBzYXZpbmcgdGhl IHdvcmtpbmcgZGlyZWN0b3J5IGNvbGxpZGVzIHdpdGggdGhlIHVzZXIncworICAgICAgICAg cmVxdWVzdGVkIGZkLCB0aGVuIHRoZSB1c2VyJ3MgZmQgbXVzdCBoYXZlIGJlZW4gY2xvc2Vk IHRvCisgICAgICAgICBiZWdpbiB3aXRoLiAgKi8KKyAgICAgIGZyZWVfY3dkICgmc2F2ZWRf Y3dkKTsKKyAgICAgIGVycm5vID0gRUJBREY7CisgICAgICByZXR1cm4gRlVOQ19GQUlMOwor ICAgIH0KKworICBpZiAoZmNoZGlyIChmZCkgIT0gMCkKKyAgICB7CisgICAgICBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgZnJlZV9jd2QgKCZzYXZlZF9jd2QpOworICAgICAgZXJy bm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiBGVU5DX0ZBSUw7CisgICAgfQorCisg IGVyciA9IENBTExfRlVOQyAoZmlsZSk7CisgIHNhdmVkX2Vycm5vID0gKGVyciA9PSBGVU5D X0ZBSUwgPyBlcnJubyA6IDApOworCisgIGlmIChyZXN0b3JlX2N3ZCAoJnNhdmVkX2N3ZCkg IT0gMCkKKyAgICBvcGVuYXRfcmVzdG9yZV9mYWlsIChlcnJubyk7CisKKyAgZnJlZV9jd2Qg KCZzYXZlZF9jd2QpOworCisgIGlmIChzYXZlZF9lcnJubykKKyAgICBlcnJubyA9IHNhdmVk X2Vycm5vOworICByZXR1cm4gZXJyOworICB9CisjZW5kaWYKK30KKyN1bmRlZiBDQUxMX0ZV TkMKKyN1bmRlZiBGVU5DX1JFU1VMVAorI3VuZGVmIEZVTkNfRkFJTAoKPT09IGFkZGVkIGZp bGUgJ2xpYi9ldWlkYWNjZXNzLmMnCi0tLSBsaWIvZXVpZGFjY2Vzcy5jCTE5NzAtMDEtMDEg MDA6MDA6MDAgKzAwMDAKKysrIGxpYi9ldWlkYWNjZXNzLmMJMjAxMi0xMC0xMiAyMzoyODoz MSArMDAwMApAQCAtMCwwICsxLDIyMSBAQAorLyogZXVpZGFjY2VzcyAtLSBjaGVjayBpZiBl ZmZlY3RpdmUgdXNlciBpZCBjYW4gYWNjZXNzIGZpbGUKKworICAgQ29weXJpZ2h0IChDKSAx OTkwLTE5OTEsIDE5OTUsIDE5OTgsIDIwMDAsIDIwMDMtMjAwNiwgMjAwOC0yMDEyIEZyZWUK KyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdOVSBDIExpYnJhcnkuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgRGF2 aWQgTWFjS2VuemllIGFuZCBUb3Jiam9ybiBHcmFubHVuZC4KKyAgIEFkYXB0ZWQgZm9yIEdO VSBDIGxpYnJhcnkgYnkgUm9sYW5kIE1jR3JhdGguICAqLworCisjaWZuZGVmIF9MSUJDCisj IGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8 dW5pc3RkLmg+CisKKyNpbmNsdWRlICJyb290LXVpZC5oIgorCisjaWYgSEFWRV9MSUJHRU5f SAorIyBpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpZm5kZWYgX19zZXRfZXJybm8KKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8g PSAodmFsKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIEVBQ0NFUyAmJiAhZGVmaW5lZCBFQUND RVNTCisjIGRlZmluZSBFQUNDRVNTIEVBQ0NFUworI2VuZGlmCisKKyNpZm5kZWYgRl9PSwor IyBkZWZpbmUgRl9PSyAwCisjIGRlZmluZSBYX09LIDEKKyMgZGVmaW5lIFdfT0sgMgorIyBk ZWZpbmUgUl9PSyA0CisjZW5kaWYKKworCisjaWZkZWYgX0xJQkMKKworIyBkZWZpbmUgYWNj ZXNzIF9fYWNjZXNzCisjIGRlZmluZSBnZXR1aWQgX19nZXR1aWQKKyMgZGVmaW5lIGdldGdp ZCBfX2dldGdpZAorIyBkZWZpbmUgZ2V0ZXVpZCBfX2dldGV1aWQKKyMgZGVmaW5lIGdldGVn aWQgX19nZXRlZ2lkCisjIGRlZmluZSBncm91cF9tZW1iZXIgX19ncm91cF9tZW1iZXIKKyMg ZGVmaW5lIGV1aWRhY2Nlc3MgX19ldWlkYWNjZXNzCisjIHVuZGVmIHN0YXQKKyMgZGVmaW5l IHN0YXQgc3RhdDY0CisKKyNlbmRpZgorCisvKiBSZXR1cm4gMCBpZiB0aGUgdXNlciBoYXMg cGVybWlzc2lvbiBvZiB0eXBlIE1PREUgb24gRklMRTsKKyAgIG90aGVyd2lzZSwgcmV0dXJu IC0xIGFuZCBzZXQgJ2Vycm5vJy4KKyAgIExpa2UgYWNjZXNzLCBleGNlcHQgdGhhdCBpdCB1 c2VzIHRoZSBlZmZlY3RpdmUgdXNlciBhbmQgZ3JvdXAKKyAgIGlkJ3MgaW5zdGVhZCBvZiB0 aGUgcmVhbCBvbmVzLCBhbmQgaXQgZG9lcyBub3QgYWx3YXlzIGNoZWNrIGZvciByZWFkLW9u bHkKKyAgIGZpbGUgc3lzdGVtLCB0ZXh0IGJ1c3ksIGV0Yy4gICovCisKK2ludAorZXVpZGFj Y2VzcyAoY29uc3QgY2hhciAqZmlsZSwgaW50IG1vZGUpCit7CisjaWYgSEFWRV9GQUNDRVNT QVQgICAgICAgICAgICAgICAgICAgLyogZ2xpYmMsIEFJWCA3LCBTb2xhcmlzIDExLCBDeWd3 aW4gMS43ICovCisgIHJldHVybiBmYWNjZXNzYXQgKEFUX0ZEQ1dELCBmaWxlLCBtb2RlLCBB VF9FQUNDRVNTKTsKKyNlbGlmIGRlZmluZWQgRUZGX09OTFlfT0sgICAgICAgICAgICAgICAv KiBJUklYLCBPU0YvMSwgSW50ZXJpeCAqLworICByZXR1cm4gYWNjZXNzIChmaWxlLCBtb2Rl IHwgRUZGX09OTFlfT0spOworI2VsaWYgZGVmaW5lZCBBQ0NfU0VMRiAgICAgICAgICAgICAg ICAgIC8qIEFJWCAqLworICByZXR1cm4gYWNjZXNzeCAoZmlsZSwgbW9kZSwgQUNDX1NFTEYp OworI2VsaWYgSEFWRV9FQUNDRVNTICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWVCU0Qg Ki8KKyAgcmV0dXJuIGVhY2Nlc3MgKGZpbGUsIG1vZGUpOworI2Vsc2UgICAgICAgLyogTWFj IE9TIFgsIE5ldEJTRCwgT3BlbkJTRCwgSFAtVVgsIFNvbGFyaXMsIEN5Z3dpbiwgbWluZ3cs IEJlT1MgKi8KKworICB1aWRfdCB1aWQgPSBnZXR1aWQgKCk7CisgIGdpZF90IGdpZCA9IGdl dGdpZCAoKTsKKyAgdWlkX3QgZXVpZCA9IGdldGV1aWQgKCk7CisgIGdpZF90IGVnaWQgPSBn ZXRlZ2lkICgpOworICBzdHJ1Y3Qgc3RhdCBzdGF0czsKKworIyBpZiBIQVZFX0RFQ0xfU0VU UkVHSUQgJiYgUFJFRkVSX05PTlJFRU5UUkFOVF9FVUlEQUNDRVNTCisKKyAgLyogRGVmaW5l IFBSRUZFUl9OT05SRUVOVFJBTlRfRVVJREFDQ0VTUyBpZiB5b3UgcHJlZmVyIGV1aWRhY2Nl c3MgdG8KKyAgICAgcmV0dXJuIHRoZSBjb3JyZWN0IHJlc3VsdCBldmVuIGlmIHRoaXMgd291 bGQgbWFrZSBpdAorICAgICBub25yZWVudHJhbnQuICBEZWZpbmUgdGhpcyBvbmx5IGlmIHlv dXIgZW50aXJlIGFwcGxpY2F0aW9uIGlzCisgICAgIHNhZmUgZXZlbiBpZiB0aGUgdWlkIG9y IGdpZCBtaWdodCB0ZW1wb3JhcmlseSBjaGFuZ2UuICBJZiB5b3VyCisgICAgIGFwcGxpY2F0 aW9uIHVzZXMgc2lnbmFsIGhhbmRsZXJzIG9yIHRocmVhZHMgaXQgaXMgcHJvYmFibHkgbm90 CisgICAgIHNhZmUuICAqLworCisgIGlmIChtb2RlID09IEZfT0spCisgICAgcmV0dXJuIHN0 YXQgKGZpbGUsICZzdGF0cyk7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgcmVzdWx0Owor ICAgICAgaW50IHNhdmVkX2Vycm5vOworCisgICAgICBpZiAodWlkICE9IGV1aWQpCisgICAg ICAgIHNldHJldWlkIChldWlkLCB1aWQpOworICAgICAgaWYgKGdpZCAhPSBlZ2lkKQorICAg ICAgICBzZXRyZWdpZCAoZWdpZCwgZ2lkKTsKKworICAgICAgcmVzdWx0ID0gYWNjZXNzIChm aWxlLCBtb2RlKTsKKyAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisKKyAgICAgIC8qIFJl c3RvcmUgdGhlbS4gICovCisgICAgICBpZiAodWlkICE9IGV1aWQpCisgICAgICAgIHNldHJl dWlkICh1aWQsIGV1aWQpOworICAgICAgaWYgKGdpZCAhPSBlZ2lkKQorICAgICAgICBzZXRy ZWdpZCAoZ2lkLCBlZ2lkKTsKKworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAg IHJldHVybiByZXN1bHQ7CisgICAgfQorCisjIGVsc2UKKworICAvKiBUaGUgZm9sbG93aW5n IGNvZGUgYXNzdW1lcyB0aGUgdHJhZGl0aW9uYWwgVW5peCBtb2RlbCwgYW5kIGlzIG5vdAor ICAgICBjb3JyZWN0IG9uIHN5c3RlbXMgdGhhdCBoYXZlIEFDTHMgb3IgdGhlIGxpa2UuICBI b3dldmVyLCBpdCdzCisgICAgIGJldHRlciB0aGFuIG5vdGhpbmcsIGFuZCBpdCBpcyByZWVu dHJhbnQuICAqLworCisgIHVuc2lnbmVkIGludCBncmFudGVkOworICBpZiAodWlkID09IGV1 aWQgJiYgZ2lkID09IGVnaWQpCisgICAgLyogSWYgd2UgYXJlIG5vdCBzZXQtdWlkIG9yIHNl dC1naWQsIGFjY2VzcyBkb2VzIHRoZSBzYW1lLiAgKi8KKyAgICByZXR1cm4gYWNjZXNzIChm aWxlLCBtb2RlKTsKKworICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzKSAhPSAwKQorICAgIHJl dHVybiAtMTsKKworICAvKiBUaGUgc3VwZXItdXNlciBjYW4gcmVhZCBhbmQgd3JpdGUgYW55 IGZpbGUsIGFuZCBleGVjdXRlIGFueSBmaWxlCisgICAgIHRoYXQgYW55b25lIGNhbiBleGVj dXRlLiAgKi8KKyAgaWYgKGV1aWQgPT0gUk9PVF9VSUQKKyAgICAgICYmICgobW9kZSAmIFhf T0spID09IDAKKyAgICAgICAgICB8fCAoc3RhdHMuc3RfbW9kZSAmIChTX0lYVVNSIHwgU19J WEdSUCB8IFNfSVhPVEgpKSkpCisgICAgcmV0dXJuIDA7CisKKyAgLyogQ29udmVydCB0aGUg bW9kZSB0byB0cmFkaXRpb25hbCBmb3JtLCBjbGVhcmluZyBhbnkgYm9ndXMgYml0cy4gICov CisgIGlmIChSX09LID09IDQgJiYgV19PSyA9PSAyICYmIFhfT0sgPT0gMSAmJiBGX09LID09 IDApCisgICAgbW9kZSAmPSA3OworICBlbHNlCisgICAgbW9kZSA9ICgobW9kZSAmIFJfT0sg PyA0IDogMCkKKyAgICAgICAgICAgICsgKG1vZGUgJiBXX09LID8gMiA6IDApCisgICAgICAg ICAgICArIChtb2RlICYgWF9PSyA/IDEgOiAwKSk7CisKKyAgaWYgKG1vZGUgPT0gMCkKKyAg ICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogVGhlIGZpbGUgZXhpc3RzLiAgKi8K KworICAvKiBDb252ZXJ0IHRoZSBmaWxlJ3MgcGVybWlzc2lvbiBiaXRzIHRvIHRyYWRpdGlv bmFsIGZvcm0uICAqLworICBpZiAoU19JUlVTUiA9PSAoNCA8PCA2KSAmJiBTX0lXVVNSID09 ICgyIDw8IDYpICYmIFNfSVhVU1IgPT0gKDEgPDwgNikKKyAgICAgICYmIFNfSVJHUlAgPT0g KDQgPDwgMykgJiYgU19JV0dSUCA9PSAoMiA8PCAzKSAmJiBTX0lYR1JQID09ICgxIDw8IDMp CisgICAgICAmJiBTX0lST1RIID09ICg0IDw8IDApICYmIFNfSVdPVEggPT0gKDIgPDwgMCkg JiYgU19JWE9USCA9PSAoMSA8PCAwKSkKKyAgICBncmFudGVkID0gc3RhdHMuc3RfbW9kZTsK KyAgZWxzZQorICAgIGdyYW50ZWQgPSAoKHN0YXRzLnN0X21vZGUgJiBTX0lSVVNSID8gNCA8 PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBTX0lXVVNSID8g MiA8PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBTX0lYVVNS ID8gMSA8PCA2IDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBTX0lS R1JQID8gNCA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUgJiBT X0lXR1JQID8gMiA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21vZGUg JiBTX0lYR1JQID8gMSA8PCAzIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0X21v ZGUgJiBTX0lST1RIID8gNCA8PCAwIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRzLnN0 X21vZGUgJiBTX0lXT1RIID8gMiA8PCAwIDogMCkKKyAgICAgICAgICAgICAgICsgKHN0YXRz LnN0X21vZGUgJiBTX0lYT1RIID8gMSA8PCAwIDogMCkpOworCisgIGlmIChldWlkID09IHN0 YXRzLnN0X3VpZCkKKyAgICBncmFudGVkID4+PSA2OworICBlbHNlIGlmIChlZ2lkID09IHN0 YXRzLnN0X2dpZCB8fCBncm91cF9tZW1iZXIgKHN0YXRzLnN0X2dpZCkpCisgICAgZ3JhbnRl ZCA+Pj0gMzsKKworICBpZiAoKG1vZGUgJiB+Z3JhbnRlZCkgPT0gMCkKKyAgICByZXR1cm4g MDsKKyAgX19zZXRfZXJybm8gKEVBQ0NFU1MpOworICByZXR1cm4gLTE7CisKKyMgZW5kaWYK KyNlbmRpZgorfQorI3VuZGVmIGV1aWRhY2Nlc3MKKyNpZmRlZiB3ZWFrX2FsaWFzCit3ZWFr X2FsaWFzIChfX2V1aWRhY2Nlc3MsIGV1aWRhY2Nlc3MpCisjZW5kaWYKKwwKKyNpZmRlZiBU RVNUCisjIGluY2x1ZGUgPGVycm9yLmg+CisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1 ZGUgPHN0ZGxpYi5oPgorCitjaGFyICpwcm9ncmFtX25hbWU7CisKK2ludAorbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBjaGFyICpmaWxlOworICBpbnQgbW9kZTsKKyAg aW50IGVycjsKKworICBwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworICBpZiAoYXJnYyA8IDMp CisgICAgYWJvcnQgKCk7CisgIGZpbGUgPSBhcmd2WzFdOworICBtb2RlID0gYXRvaSAoYXJn dlsyXSk7CisKKyAgZXJyID0gZXVpZGFjY2VzcyAoZmlsZSwgbW9kZSk7CisgIHByaW50ZiAo IiVkXG4iLCBlcnIpOworICBpZiAoZXJyICE9IDApCisgICAgZXJyb3IgKDAsIGVycm5vLCAi JXMiLCBmaWxlKTsKKyAgZXhpdCAoMCk7Cit9CisjZW5kaWYKCj09PSBhZGRlZCBmaWxlICds aWIvZmFjY2Vzc2F0LmMnCi0tLSBsaWIvZmFjY2Vzc2F0LmMJMTk3MC0wMS0wMSAwMDowMDow MCArMDAwMAorKysgbGliL2ZhY2Nlc3NhdC5jCTIwMTItMTAtMTUgMDY6MDU6NDYgKzAwMDAK QEAgLTAsMCArMSw0NSBAQAorLyogQ2hlY2sgdGhlIGFjY2VzcyByaWdodHMgb2YgYSBmaWxl IHJlbGF0aXZlIHRvIGFuIG9wZW4gZGlyZWN0b3J5LgorICAgQ29weXJpZ2h0IChDKSAyMDA5 LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8q IHdyaXR0ZW4gYnkgRXJpYyBCbGFrZSAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNp bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaWZuZGVmIEhBVkVf QUNDRVNTCisvKiBNaW5ndyBsYWNrcyBhY2Nlc3MsIGJ1dCBpdCBhbHNvIGxhY2tzIHJlYWwg dnMuIGVmZmVjdGl2ZSBpZHMsIHNvCisgICB0aGUgZ251bGliIGV1aWRhY2Nlc3MgbW9kdWxl IGlzIGdvb2QgZW5vdWdoLiAgKi8KKyMgdW5kZWYgYWNjZXNzCisjIGRlZmluZSBhY2Nlc3Mg ZXVpZGFjY2VzcworI2VuZGlmCisKKy8qIEludm9rZSBhY2Nlc3Mgb3IgZXVpZGFjY2VzcyBv biBmaWxlLCBGSUxFLCB1c2luZyBtb2RlIE1PREUsIGluIHRoZSBkaXJlY3RvcnkKKyAgIG9w ZW4gb24gZGVzY3JpcHRvciBGRC4gIElmIHBvc3NpYmxlLCBkbyBpdCB3aXRob3V0IGNoYW5n aW5nIHRoZQorICAgd29ya2luZyBkaXJlY3RvcnkuICBPdGhlcndpc2UsIHJlc29ydCB0byB1 c2luZyBzYXZlX2N3ZC9mY2hkaXIsIHRoZW4KKyAgIChhY2Nlc3N8ZXVpZGFjY2VzcykvcmVz dG9yZV9jd2QuICBJZiBlaXRoZXIgdGhlIHNhdmVfY3dkIG9yIHRoZQorICAgcmVzdG9yZV9j d2QgZmFpbHMsIHRoZW4gZ2l2ZSBhIGRpYWdub3N0aWMgYW5kIGV4aXQgbm9uemVyby4KKyAg IE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgQVRfRUFDQ0VT UywgYWx0aG91Z2ggc29tZQorICAgbmF0aXZlIHZlcnNpb25zIGFsc28gc3VwcG9ydCBBVF9T WU1MSU5LX05PRk9MTE9XLiAgKi8KKworI2RlZmluZSBBVF9GVU5DX05BTUUgZmFjY2Vzc2F0 CisjZGVmaW5lIEFUX0ZVTkNfRjEgZXVpZGFjY2VzcworI2RlZmluZSBBVF9GVU5DX0YyIGFj Y2VzcworI2RlZmluZSBBVF9GVU5DX1VTRV9GMV9DT05EIEFUX0VBQ0NFU1MKKyNkZWZpbmUg QVRfRlVOQ19QT1NUX0ZJTEVfUEFSQU1fREVDTFMgLCBpbnQgbW9kZSwgaW50IGZsYWcKKyNk ZWZpbmUgQVRfRlVOQ19QT1NUX0ZJTEVfQVJHUyAgICAgICAgLCBtb2RlCisjaW5jbHVkZSAi YXQtZnVuYy5jIgoKPT09IGFkZGVkIGZpbGUgJ2xpYi9mY250bC5pbi5oJwotLS0gbGliL2Zj bnRsLmluLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2ZjbnRsLmluLmgJ MjAxMi0xMC0xNiAwMTowNzowOCArMDAwMApAQCAtMCwwICsxLDM0NyBAQAorLyogTGlrZSA8 ZmNudGwuaD4sIGJ1dCB3aXRoIG5vbi13b3JraW5nIGZsYWdzIGRlZmluZWQgdG8gMC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgKi8KKworI2lm IF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdN QV9DT0xVTU5TQAorCisjaWYgZGVmaW5lZCBfX25lZWRfc3lzdGVtX2ZjbnRsX2gKKy8qIFNw ZWNpYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKworLyogTmVlZGVkIGJlZm9yZSA8 c3lzL3N0YXQuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUgb2ZmX3QgdG8gYSA2NC1iaXQgdHlw ZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisvKiBP biBzb21lIHN5c3RlbXMgb3RoZXIgdGhhbiBnbGliYywgPHN5cy9zdGF0Lmg+IGlzIGEgcHJl cmVxdWlzaXRlIG9mCisgICA8ZmNudGwuaD4uICBPbiBnbGliYyBzeXN0ZW1zLCB3ZSB3b3Vs ZCBsaWtlIHRvIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24uCisgICBCdXQgb24gZ2xpYmMg c3lzdGVtcywgPGZjbnRsLmg+IGluY2x1ZGVzIDxzeXMvc3RhdC5oPiBpbnNpZGUgYW4KKyAg IGV4dGVybiAiQyIgeyAuLi4gfSBibG9jaywgd2hpY2ggbGVhZHMgdG8gZXJyb3JzIGluIEMr KyBtb2RlIHdpdGggdGhlCisgICBvdmVycmlkZGVuIDxzeXMvc3RhdC5oPiBmcm9tIGdudWxp Yi4gIFRoZXNlIGVycm9ycyBhcmUga25vd24gdG8gYmUgZ29uZQorICAgd2l0aCBnKysgdmVy c2lvbiA+PSA0LjMuICAqLworI2lmICEoZGVmaW5lZCBfX0dMSUJDX18gfHwgZGVmaW5lZCBf X1VDTElCQ19fKSB8fCAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9O QU1FU1BBQ0UgJiYgIShfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVD X01JTk9SX18gPj0gMykpKQorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjQElO Q0xVREVfTkVYVEAgQE5FWFRfRkNOVExfSEAKKworI2Vsc2UKKy8qIE5vcm1hbCBpbnZvY2F0 aW9uIGNvbnZlbnRpb24uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9I CisKKy8qIE5lZWRlZCBiZWZvcmUgPHN5cy9zdGF0Lmg+LgorICAgTWF5IGFsc28gZGVmaW5l IG9mZl90IHRvIGEgNjQtYml0IHR5cGUgb24gbmF0aXZlIFdpbmRvd3MuICAqLworI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMs IDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorICAgPGZjbnRsLmg+LiAgT24g Z2xpYmMgc3lzdGVtcywgd2Ugd291bGQgbGlrZSB0byBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0 aW9uLgorICAgQnV0IG9uIGdsaWJjIHN5c3RlbXMsIDxmY250bC5oPiBpbmNsdWRlcyA8c3lz L3N0YXQuaD4gaW5zaWRlIGFuCisgICBleHRlcm4gIkMiIHsgLi4uIH0gYmxvY2ssIHdoaWNo IGxlYWRzIHRvIGVycm9ycyBpbiBDKysgbW9kZSB3aXRoIHRoZQorICAgb3ZlcnJpZGRlbiA8 c3lzL3N0YXQuaD4gZnJvbSBnbnVsaWIuICBUaGVzZSBlcnJvcnMgYXJlIGtub3duIHRvIGJl IGdvbmUKKyAgIHdpdGggZysrIHZlcnNpb24gPj0gNC4zLiAgKi8KKyNpZiAhKGRlZmluZWQg X19HTElCQ19fIHx8IGRlZmluZWQgX19VQ0xJQkNfXykgfHwgKGRlZmluZWQgX19jcGx1c3Bs dXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYmICEoX19HTlVDX18gPiA0IHx8IChf X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDMpKSkKKyMgaW5jbHVkZSA8c3lz L3N0YXQuaD4KKyNlbmRpZgorLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0 IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworI0BJTkNMVURFX05FWFRAIEBORVhUX0ZD TlRMX0hACisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKyNkZWZpbmUgX0BH VUFSRF9QUkVGSVhAX0ZDTlRMX0gKKworI2lmbmRlZiBfX0dMSUJDX18gLyogQXZvaWQgbmFt ZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyMgaW5jbHVkZSA8dW5p c3RkLmg+CisjZW5kaWYKKworLyogTmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zIGRlY2xhcmUg b3BlbigpLCBjcmVhdCgpIGluIDxpby5oPi4gICovCisjaWYgKEBHTlVMSUJfT1BFTkAgfHwg ZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorICAgICYmICgoZGVmaW5lZCBfV0lOMzIg fHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKQorIyBpbmNs dWRlIDxpby5oPgorI2VuZGlmCisKKworLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5D REVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVmaW5pdGlv biBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLworCisvKiBUaGUgZGVm aW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworCisKKy8q IERlY2xhcmUgb3ZlcnJpZGRlbiBmdW5jdGlvbnMuICAqLworCisjaWYgQEdOVUxJQl9GQ05U TEAKKyMgaWYgQFJFUExBQ0VfRkNOVExACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMg JiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZjbnRsCisjICAgZGVm aW5lIGZjbnRsIHJwbF9mY250bAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKGZjbnRs LCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworX0dMX0NYWEFMSUFTX1JQTCAo ZmNudGwsIGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjIGVsc2UKKyMgIGlm ICFASEFWRV9GQ05UTEAKK19HTF9GVU5DREVDTF9TWVMgKGZjbnRsLCBpbnQsIChpbnQgZmQs IGludCBhY3Rpb24sIC4uLikpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZjbnRs LCBpbnQsIChpbnQgZmQsIGludCBhY3Rpb24sIC4uLikpOworIyBlbmRpZgorX0dMX0NYWEFM SUFTV0FSTiAoZmNudGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1 bmRlZiBmY250bAorIyBpZiBIQVZFX1JBV19ERUNMX0ZDTlRMCitfR0xfV0FSTl9PTl9VU0Ug KGZjbnRsLCAiZmNudGwgaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAiCisgICAg ICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmY250bCBmb3IgcG9ydGFiaWxpdHki KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9PUEVOQAorIyBpZiBAUkVQTEFD RV9PUEVOQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElC X05BTUVTUEFDRSkKKyMgICB1bmRlZiBvcGVuCisjICAgZGVmaW5lIG9wZW4gcnBsX29wZW4K KyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpm aWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQs IChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKyMgZWxzZQorX0dM X0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBm bGFncywgLi4uKSk7CisjIGVuZGlmCisvKiBPbiBIUC1VWCAxMSwgaW4gQysrIG1vZGUsIG9w ZW4oKSBpcyBkZWZpbmVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiB3aXRoIGEKKyAgIGRlZmF1 bHQgYXJndW1lbnQuICBfR0xfQ1hYQUxJQVNXQVJOIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBj YXNlLiAgKi8KKyMgaWYgIWRlZmluZWQgX19ocHV4CitfR0xfQ1hYQUxJQVNXQVJOIChvcGVu KTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYg b3BlbgorLyogQXNzdW1lIG9wZW4gaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9XQVJO X09OX1VTRSAob3BlbiwgIm9wZW4gaXMgbm90IGFsd2F5cyBQT1NJWCBjb21wbGlhbnQgLSAi CisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuIGZvciBwb3J0YWJp bGl0eSIpOworI2VuZGlmCisKKyNpZiBAR05VTElCX09QRU5BVEAKKyMgaWYgQFJFUExBQ0Vf T1BFTkFUQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElC X05BTUVTUEFDRSkKKyMgICB1bmRlZiBvcGVuYXQKKyMgICBkZWZpbmUgb3BlbmF0IHJwbF9v cGVuYXQKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuYXQsIGludCwKKyAgICAg ICAgICAgICAgICAgIChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUsIGludCBmbGFncywgLyog bW9kZV90IG1vZGUgKi8gLi4uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxM ICgoMikpKTsKK19HTF9DWFhBTElBU19SUEwgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAg ICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3Qg bW9kZSAqLyAuLi4pKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX09QRU5BVEAKK19HTF9GVU5D REVDTF9TWVMgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwgY2hh ciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pCisgICAg ICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9D WFhBTElBU19TWVMgKG9wZW5hdCwgaW50LAorICAgICAgICAgICAgICAgICAgKGludCBmZCwg Y2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBtb2RlX3QgbW9kZSAqLyAuLi4pKTsK KyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG9wZW5hdCk7CisjZWxpZiBkZWZpbmVkIEdO VUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG9wZW5hdAorIyBpZiBIQVZFX1JBV19ERUNMX09Q RU5BVAorX0dMX1dBUk5fT05fVVNFIChvcGVuYXQsICJvcGVuYXQgaXMgbm90IHBvcnRhYmxl IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgb3BlbmF0IGZvciBw b3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKworLyogRml4IHVwIHRoZSBGRF8q IG1hY3Jvcywgb25seSBrbm93biB0byBiZSBtaXNzaW5nIG9uIG1pbmd3LiAgKi8KKworI2lm bmRlZiBGRF9DTE9FWEVDCisjIGRlZmluZSBGRF9DTE9FWEVDIDEKKyNlbmRpZgorCisvKiBG aXggdXAgdGhlIHN1cHBvcnRlZCBGXyogbWFjcm9zLiAgSW50ZW50aW9uYWxseSBsZWF2ZSBv dGhlciBGXyoKKyAgIG1hY3JvcyB1bmRlZmluZWQuICBPbmx5IGtub3duIHRvIGJlIG1pc3Np bmcgb24gbWluZ3cuICAqLworCisjaWZuZGVmIEZfRFVQRkRfQ0xPRVhFQworIyBkZWZpbmUg Rl9EVVBGRF9DTE9FWEVDIDB4NDAwMDAwMDAKKy8qIFdpdG5lc3MgdmFyaWFibGU6IDEgaWYg Z251bGliIGRlZmluZWQgRl9EVVBGRF9DTE9FWEVDLCAwIG90aGVyd2lzZS4gICovCisjIGRl ZmluZSBHTlVMSUJfZGVmaW5lZF9GX0RVUEZEX0NMT0VYRUMgMQorI2Vsc2UKKyMgZGVmaW5l IEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyAwCisjZW5kaWYKKworI2lmbmRlZiBG X0RVUEZECisjIGRlZmluZSBGX0RVUEZEIDEKKyNlbmRpZgorCisjaWZuZGVmIEZfR0VURkQK KyMgZGVmaW5lIEZfR0VURkQgMgorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgT18qIG1hY3Jv cy4gICovCisKKyNpZiAhZGVmaW5lZCBPX0RJUkVDVCAmJiBkZWZpbmVkIE9fRElSRUNUSU8K Ky8qIFRydTY0IHNwZWxscyBpdCAnT19ESVJFQ1RJTycuICAqLworIyBkZWZpbmUgT19ESVJF Q1QgT19ESVJFQ1RJTworI2VuZGlmCisKKyNpZiAhZGVmaW5lZCBPX0NMT0VYRUMgJiYgZGVm aW5lZCBPX05PSU5IRVJJVAorLyogTWluZ3cgc3BlbGxzIGl0ICdPX05PSU5IRVJJVCcuICAq LworIyBkZWZpbmUgT19DTE9FWEVDIE9fTk9JTkhFUklUCisjZW5kaWYKKworI2lmbmRlZiBP X0NMT0VYRUMKKyMgZGVmaW5lIE9fQ0xPRVhFQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX0RJ UkVDVAorIyBkZWZpbmUgT19ESVJFQ1QgMAorI2VuZGlmCisKKyNpZm5kZWYgT19ESVJFQ1RP UlkKKyMgZGVmaW5lIE9fRElSRUNUT1JZIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRFNZTkMK KyMgZGVmaW5lIE9fRFNZTkMgMAorI2VuZGlmCisKKyNpZm5kZWYgT19FWEVDCisjIGRlZmlu ZSBPX0VYRUMgT19SRE9OTFkgLyogVGhpcyBpcyBvZnRlbiBjbG9zZSBlbm91Z2ggaW4gb2xk ZXIgc3lzdGVtcy4gICovCisjZW5kaWYKKworI2lmbmRlZiBPX0lHTk9SRV9DVFRZCisjIGRl ZmluZSBPX0lHTk9SRV9DVFRZIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTkRFTEFZCisjIGRl ZmluZSBPX05ERUxBWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PQVRJTUUKKyMgZGVmaW5l IE9fTk9BVElNRSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTkJMT0NLCisjIGRlZmluZSBP X05PTkJMT0NLIE9fTkRFTEFZCisjZW5kaWYKKworLyogSWYgdGhlIGdudWxpYiBtb2R1bGUg J25vbmJsb2NraW5nJyBpcyBpbiB1c2UsIGd1YXJhbnRlZSBhIHdvcmtpbmcgbm9uLXplcm8K KyAgIHZhbHVlIG9mIE9fTk9OQkxPQ0suICBPdGhlcndpc2UsIE9fTk9OQkxPQ0sgaXMgZGVm aW5lZCAoYWJvdmUpIHRvIE9fTkRFTEFZCisgICBvciB0byAwIGFzIGZhbGxiYWNrLiAgKi8K KyNpZiBAR05VTElCX05PTkJMT0NLSU5HQAorIyBpZiBPX05PTkJMT0NLCisjICBkZWZpbmUg R05VTElCX2RlZmluZWRfT19OT05CTE9DSyAwCisjIGVsc2UKKyMgIGRlZmluZSBHTlVMSUJf ZGVmaW5lZF9PX05PTkJMT0NLIDEKKyMgIHVuZGVmIE9fTk9OQkxPQ0sKKyMgIGRlZmluZSBP X05PTkJMT0NLIDB4NDAwMDAwMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9D VFRZCisjIGRlZmluZSBPX05PQ1RUWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PRk9MTE9X CisjIGRlZmluZSBPX05PRk9MTE9XIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9MSU5LCisj IGRlZmluZSBPX05PTElOSyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTElOS1MKKyMgZGVm aW5lIE9fTk9MSU5LUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PVFJBTlMKKyMgZGVmaW5l IE9fTk9UUkFOUyAwCisjZW5kaWYKKworI2lmbmRlZiBPX1JTWU5DCisjIGRlZmluZSBPX1JT WU5DIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fU0VBUkNICisjIGRlZmluZSBPX1NFQVJDSCBP X1JET05MWSAvKiBUaGlzIGlzIG9mdGVuIGNsb3NlIGVub3VnaCBpbiBvbGRlciBzeXN0ZW1z LiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE9fU1lOQworIyBkZWZpbmUgT19TWU5DIDAKKyNl bmRpZgorCisjaWZuZGVmIE9fVFRZX0lOSVQKKyMgZGVmaW5lIE9fVFRZX0lOSVQgMAorI2Vu ZGlmCisKKyNpZiBPX0FDQ01PREUgIT0gKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1Ig fCBPX0VYRUMgfCBPX1NFQVJDSCkKKyMgdW5kZWYgT19BQ0NNT0RFCisjIGRlZmluZSBPX0FD Q01PREUgKE9fUkRPTkxZIHwgT19XUk9OTFkgfCBPX1JEV1IgfCBPX0VYRUMgfCBPX1NFQVJD SCkKKyNlbmRpZgorCisvKiBGb3Igc3lzdGVtcyB0aGF0IGRpc3Rpbmd1aXNoIGJldHdlZW4g dGV4dCBhbmQgYmluYXJ5IEkvTy4KKyAgIE9fQklOQVJZIGlzIHVzdWFsbHkgZGVjbGFyZWQg aW4gZmNudGwuaCAgKi8KKyNpZiAhZGVmaW5lZCBPX0JJTkFSWSAmJiBkZWZpbmVkIF9PX0JJ TkFSWQorICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKyMgZGVmaW5l IE9fQklOQVJZIF9PX0JJTkFSWQorIyBkZWZpbmUgT19URVhUIF9PX1RFWFQKKyNlbmRpZgor CisjaWYgZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fSEFJS1VfXworICAvKiBCZU9T IDUgYW5kIEhhaWt1IGhhdmUgT19CSU5BUlkgYW5kIE9fVEVYVCwgYnV0IHRoZXkgaGF2ZSBu byBlZmZlY3QuICAqLworIyB1bmRlZiBPX0JJTkFSWQorIyB1bmRlZiBPX1RFWFQKKyNlbmRp ZgorCisjaWZuZGVmIE9fQklOQVJZCisjIGRlZmluZSBPX0JJTkFSWSAwCisjIGRlZmluZSBP X1RFWFQgMAorI2VuZGlmCisKKy8qIEZpeCB1cCB0aGUgQVRfKiBtYWNyb3MuICAqLworCisv KiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBTb2xhcmlzIDkgYW5kIDEwOiBBVF9GRENXRCBpcyBw b3NpdGl2ZS4gIEl0cworICAgdmFsdWUgZXhjZWVkcyBJTlRfTUFYLCBzbyBpdHMgdXNlIGFz IGFuIGludCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlCisgICBDIHN0YW5kYXJkLCBhbmQgR0ND IGFuZCBTdW4gQyBjb21wbGFpbiBpbiBzb21lIGNhc2VzLiAgSWYgdGhlIGJ1ZworICAgaXMg cHJlc2VudCwgdW5kZWYgQVRfRkRDV0QgaGVyZSwgc28gaXQgY2FuIGJlIHJlZGVmaW5lZCBi ZWxvdy4gICovCisjaWYgMCA8IEFUX0ZEQ1dEICYmIEFUX0ZEQ1dEID09IDB4ZmZkMTk1NTMK KyMgdW5kZWYgQVRfRkRDV0QKKyNlbmRpZgorCisvKiBVc2UgdGhlIHNhbWUgYml0IHBhdHRl cm4gYXMgU29sYXJpcyA5LCBidXQgd2l0aCB0aGUgcHJvcGVyCisgICBzaWduZWRuZXNzLiAg VGhlIGJpdCBwYXR0ZXJuIGlzIGltcG9ydGFudCwgaW4gY2FzZSB0aGlzIGFjdHVhbGx5IGlz CisgICBTb2xhcmlzIHdpdGggdGhlIGFib3ZlIHdvcmthcm91bmQuICAqLworI2lmbmRlZiBB VF9GRENXRAorIyBkZWZpbmUgQVRfRkRDV0QgKC0zMDQxOTY1KQorI2VuZGlmCisKKy8qIFVz ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgU29sYXJpcyA5LiAgVGhpcyBzaG91bGRuJ3QgbWF0dGVy LCBidXQKKyAgIHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gZGlmZmVyLiAgKi8KKyNpZm5k ZWYgQVRfU1lNTElOS19OT0ZPTExPVworIyBkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyA0 MDk2CisjZW5kaWYKKworI2lmbmRlZiBBVF9SRU1PVkVESVIKKyMgZGVmaW5lIEFUX1JFTU9W RURJUiAxCisjZW5kaWYKKworLyogU29sYXJpcyA5IGxhY2tzIHRoZXNlIHR3bywgc28ganVz dCBwaWNrIHVuaXF1ZSB2YWx1ZXMuICAqLworI2lmbmRlZiBBVF9TWU1MSU5LX0ZPTExPVwor IyBkZWZpbmUgQVRfU1lNTElOS19GT0xMT1cgMgorI2VuZGlmCisKKyNpZm5kZWYgQVRfRUFD Q0VTUworIyBkZWZpbmUgQVRfRUFDQ0VTUyA0CisjZW5kaWYKKworCisjZW5kaWYgLyogX0BH VUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfRkNO VExfSCAqLworI2VuZGlmCgo9PT0gYWRkZWQgZmlsZSAnbGliL2dldGdyb3Vwcy5jJwotLS0g bGliL2dldGdyb3Vwcy5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9nZXRn cm91cHMuYwkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0wLDAgKzEsMTE2IEBACisv KiBwcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIGdldGdyb3VwcyBmb3Igc3lzdGVt cyB0aGF0IGRvbid0IGFsbG93IE49PTAKKworICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5 LCAyMDAzLCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nICovCisKKyNpbmNsdWRlIDxj b25maWcuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFIQVZF X0dFVEdST1VQUworCisvKiBQcm92aWRlIGEgc3R1YiB0aGF0IGZhaWxzIHdpdGggRU5PU1lT LCBzaW5jZSB0aGVyZSBpcyBubyBncm91cAorICAgaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9u IG1pbmd3LiAgKi8KK2ludAorZ2V0Z3JvdXBzIChpbnQgbiBfR0xfVU5VU0VELCBHRVRHUk9V UFNfVCAqZ3JvdXBzIF9HTF9VTlVTRUQpCit7CisgIGVycm5vID0gRU5PU1lTOworICByZXR1 cm4gLTE7Cit9CisKKyNlbHNlIC8qIEhBVkVfR0VUR1JPVVBTICovCisKKyMgdW5kZWYgZ2V0 Z3JvdXBzCisjIGlmbmRlZiBHRVRHUk9VUFNfWkVST19CVUcKKyMgIGRlZmluZSBHRVRHUk9V UFNfWkVST19CVUcgMAorIyBlbmRpZgorCisvKiBPbiBhdCBsZWFzdCBVbHRyaXggNC4zIGFu ZCBOZXh0U3RlcCAzLjIsIGdldGdyb3VwcyAoMCwgTlVMTCkgYWx3YXlzCisgICBmYWlscy4g IE9uIG90aGVyIHN5c3RlbXMsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBzdXBwbGVtZW50 YWwKKyAgIGdyb3VwcyBmb3IgdGhlIHByb2Nlc3MuICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMg dGhhdCBzcGVjaWFsIGNhc2UKKyAgIGFuZCBsZXRzIHRoZSBzeXN0ZW0tcHJvdmlkZWQgZnVu Y3Rpb24gaGFuZGxlIGFsbCBvdGhlcnMuICBIb3dldmVyLAorICAgaXQgY2FuIGZhaWwgd2l0 aCBFTk9NRU0gaWYgbWVtb3J5IGlzIHRpZ2h0LiAgSXQgaXMgdW5zcGVjaWZpZWQKKyAgIHdo ZXRoZXIgdGhlIGVmZmVjdGl2ZSBncm91cCBpZCBpcyBpbmNsdWRlZCBpbiB0aGUgbGlzdC4g ICovCisKK2ludAorcnBsX2dldGdyb3VwcyAoaW50IG4sIGdpZF90ICpncm91cCkKK3sKKyAg aW50IG5fZ3JvdXBzOworICBHRVRHUk9VUFNfVCAqZ2J1ZjsKKyAgaW50IHNhdmVkX2Vycm5v OworCisgIGlmIChuIDwgMCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKG4gIT0gMCB8fCAhR0VUR1JPVVBTX1pFUk9f QlVHKQorICAgIHsKKyAgICAgIGludCByZXN1bHQ7CisgICAgICBpZiAoc2l6ZW9mICpncm91 cCA9PSBzaXplb2YgKmdidWYpCisgICAgICAgIHJldHVybiBnZXRncm91cHMgKG4sIChHRVRH Uk9VUFNfVCAqKSBncm91cCk7CisKKyAgICAgIGlmIChTSVpFX01BWCAvIHNpemVvZiAqZ2J1 ZiA8PSBuKQorICAgICAgICB7CisgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBnYnVmID0gbWFsbG9jIChuICogc2l6 ZW9mICpnYnVmKTsKKyAgICAgIGlmICghZ2J1ZikKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgcmVzdWx0ID0gZ2V0Z3JvdXBzIChuLCBnYnVmKTsKKyAgICAgIGlmICgwIDw9IHJlc3Vs dCkKKyAgICAgICAgeworICAgICAgICAgIG4gPSByZXN1bHQ7CisgICAgICAgICAgd2hpbGUg KG4tLSkKKyAgICAgICAgICAgIGdyb3VwW25dID0gZ2J1ZltuXTsKKyAgICAgICAgfQorICAg ICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgIGZyZWUgKGdidWYpOworICAgICAgZXJy bm8gPT0gc2F2ZWRfZXJybm87CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICBu ID0gMjA7CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIC8qIE5vIG5lZWQgdG8gd29ycnkg YWJvdXQgYWRkcmVzcyBhcml0aG1ldGljIG92ZXJmbG93IGhlcmUsCisgICAgICAgICBzaW5j ZSB0aGUgYW5jaWVudCBzeXN0ZW1zIHRoYXQgd2UncmUgcnVubmluZyBvbiBoYXZlIGxvdwor ICAgICAgICAgbGltaXRzIG9uIHRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IGdyb3Vwcy4gICov CisgICAgICBnYnVmID0gbWFsbG9jIChuICogc2l6ZW9mICpnYnVmKTsKKyAgICAgIGlmICgh Z2J1ZikKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgbl9ncm91cHMgPSBnZXRncm91cHMg KG4sIGdidWYpOworICAgICAgaWYgKG5fZ3JvdXBzID09IC0xID8gZXJybm8gIT0gRUlOVkFM IDogbl9ncm91cHMgPCBuKQorICAgICAgICBicmVhazsKKyAgICAgIGZyZWUgKGdidWYpOwor ICAgICAgbiAqPSAyOworICAgIH0KKworICBzYXZlZF9lcnJubyA9IGVycm5vOworICBmcmVl IChnYnVmKTsKKyAgZXJybm8gPSBzYXZlZF9lcnJubzsKKworICByZXR1cm4gbl9ncm91cHM7 Cit9CisKKyNlbmRpZiAvKiBIQVZFX0dFVEdST1VQUyAqLwoKPT09IG1vZGlmaWVkIGZpbGUg J2xpYi9nbnVsaWIubWsnCi0tLSBsaWIvZ251bGliLm1rCTIwMTItMTAtMTkgMTk6MjU6MTgg KzAwMDAKKysrIGxpYi9nbnVsaWIubWsJMjAxMi0xMC0yMCAwMToxMzozNSArMDAwMApAQCAt MjEsNyArMjEsNyBAQAogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJl c3Qgb2YgdGhhdCBwcm9ncmFtLgogIwogIyBHZW5lcmF0ZWQgYnkgZ251bGliLXRvb2wuCi0j IFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJn bnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVz dHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZXJybm8gLS1hdm9p ZD1mY250bCAtLWF2b2lkPWZjbnRsLWggLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1zdmMtaW52 YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNlbGVjdCAt LWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVzIC0tYXZvaWQ9dGhyZWFkbGli IC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsgLS1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMg LS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYWxsb2NhLW9w dCBjLWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRsaW5rYXQgY3J5cHRvL21kNSBjcnlwdG8vc2hh MSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAy IGVudmlyb24gZXhlY2luZm8gZmlsZW1vZGUgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRp bWUgZ2V0dGltZW9mZGF5IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQg bWFueXdhcm5pbmdzIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayByZWFkbGluayBz b2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbyBzdHJmdGlt ZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0 aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdXRpbWVucyB3YXJuaW5ncwor IyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGli Z251IC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRl c3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWF0LWludGVybmFs IC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZz dGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1z dmMtbm90aHJvdyAtLWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuYXQtaCAtLWF2b2lk PXJhaXNlIC0tYXZvaWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9j bWFzayAtLWF2b2lkPXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5h bWU9Z251bGliLm1rIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAt LW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0 cmNhc2UgY2FyZWFkbGlua2F0IGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1 NiBjcnlwdG8vc2hhNTEyIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNp bmZvIGZhY2Nlc3NhdCBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBn ZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdCBtYW55 d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHJlYWRsaW5rIHNvY2ts ZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0 cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVy LXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1dGltZW5zIHdhcm5pbmdzCiAKIAog TU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCkBAIC0xNTAsNiArMTUwLDE3 IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZHVwMgogCisjIyBiZWdpbiBnbnVsaWIg bW9kdWxlIGV1aWRhY2Nlc3MKKworaWYgZ2xfR05VTElCX0VOQUJMRURfZXVpZGFjY2Vzcwor CitlbmRpZgorRVhUUkFfRElTVCArPSBldWlkYWNjZXNzLmMKKworRVhUUkFfbGliZ251X2Ff U09VUkNFUyArPSBldWlkYWNjZXNzLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBldWlk YWNjZXNzCisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZXhlY2luZm8KIAogQlVJTFRfU09V UkNFUyArPSAkKEVYRUNJTkZPX0gpCkBAIC0xNzUsNiArMTg2LDUwIEBACiAKICMjIGVuZCAg IGdudWxpYiBtb2R1bGUgZXhlY2luZm8KIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmYWNj ZXNzYXQKKworCitFWFRSQV9ESVNUICs9IGF0LWZ1bmMuYyBmYWNjZXNzYXQuYworCitFWFRS QV9saWJnbnVfYV9TT1VSQ0VTICs9IGF0LWZ1bmMuYyBmYWNjZXNzYXQuYworCisjIyBlbmQg ICBnbnVsaWIgbW9kdWxlIGZhY2Nlc3NhdAorCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZj bnRsLWgKKworQlVJTFRfU09VUkNFUyArPSBmY250bC5oCisKKyMgV2UgbmVlZCB0aGUgZm9s bG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZmNudGwuaD4gd2hlbiB0aGUgc3lzdGVtCisj IGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4K K2ZjbnRsLmg6IGZjbnRsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChD WFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorCSQoQU1fVl9H RU4pcm0gLWYgJEAtdCAkQCAmJiBcCisJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJB VEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJ WCcnQHxHTHxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVE RV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8 QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NP TFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9G Q05UTF9IJydAfCQoTkVYVF9GQ05UTF9IKXxnJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElC X0ZDTlRMJydALyQoR05VTElCX0ZDTlRMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElC X05PTkJMT0NLSU5HJydALyQoR05VTElCX05PTkJMT0NLSU5HKS9nJyBcCisJICAgICAgLWUg J3MvQCcnR05VTElCX09QRU4nJ0AvJChHTlVMSUJfT1BFTikvZycgXAorCSAgICAgIC1lICdz L0AnJ0dOVUxJQl9PUEVOQVQnJ0AvJChHTlVMSUJfT1BFTkFUKS9nJyBcCisJICAgICAgLWUg J3N8QCcnSEFWRV9GQ05UTCcnQHwkKEhBVkVfRkNOVEwpfGcnIFwKKwkgICAgICAtZSAnc3xA JydIQVZFX09QRU5BVCcnQHwkKEhBVkVfT1BFTkFUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcn UkVQTEFDRV9GQ05UTCcnQHwkKFJFUExBQ0VfRkNOVEwpfGcnIFwKKwkgICAgICAtZSAnc3xA JydSRVBMQUNFX09QRU4nJ0B8JChSRVBMQUNFX09QRU4pfGcnIFwKKwkgICAgICAtZSAnc3xA JydSRVBMQUNFX09QRU5BVCcnQHwkKFJFUExBQ0VfT1BFTkFUKXxnJyBcCisJICAgICAgLWUg Jy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJ ICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5V TExfSCknIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3Ig JChXQVJOX09OX1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2ZjbnRsLmluLmg7IFwK Kwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBmY250 bC5oIGZjbnRsLmgtdAorCitFWFRSQV9ESVNUICs9IGZjbnRsLmluLmgKKworIyMgZW5kICAg Z251bGliIG1vZHVsZSBmY250bC1oCisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmlsZW1v ZGUKIAogbGliZ251X2FfU09VUkNFUyArPSBmaWxlbW9kZS5jCkBAIC0xODMsNiArMjM4LDE3 IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZmlsZW1vZGUKIAorIyMgYmVnaW4gZ251 bGliIG1vZHVsZSBnZXRncm91cHMKKworaWYgZ2xfR05VTElCX0VOQUJMRURfZ2V0Z3JvdXBz CisKK2VuZGlmCitFWFRSQV9ESVNUICs9IGdldGdyb3Vwcy5jCisKK0VYVFJBX2xpYmdudV9h X1NPVVJDRVMgKz0gZ2V0Z3JvdXBzLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBnZXRn cm91cHMKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnZXRsb2FkYXZnCiAKIApAQCAtMjQy LDYgKzMwOCwxNyBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGdldHRpbWVvZmRheQog CisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdyb3VwLW1lbWJlcgorCitpZiBnbF9HTlVMSUJf RU5BQkxFRF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMQorCitlbmRpZgorRVhU UkFfRElTVCArPSBncm91cC1tZW1iZXIuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9 IGdyb3VwLW1lbWJlci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ3JvdXAtbWVtYmVy CisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgaWdub3JlLXZhbHVlCiAKIApAQCAtMzU0LDYg KzQzMSwxNSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHJlYWRsaW5rCiAKKyMjIGJl Z2luIGdudWxpYiBtb2R1bGUgcm9vdC11aWQKKworaWYgZ2xfR05VTElCX0VOQUJMRURfNjA5 OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGMKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0g cm9vdC11aWQuaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHJvb3QtdWlkCisKICMjIGJl Z2luIGdudWxpYiBtb2R1bGUgc2lnbmFsLWgKIAogQlVJTFRfU09VUkNFUyArPSBzaWduYWwu aApAQCAtMTMxMiw2ICsxMzk4LDE1IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgdmVy aWZ5CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jLW92ZXJzaXplZAorCitpZiBn bF9HTlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYworCitl bmRpZgorRVhUUkFfRElTVCArPSB4YWxsb2Mtb3ZlcnNpemVkLmgKKworIyMgZW5kICAgZ251 bGliIG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkCisKIAogbW9zdGx5Y2xlYW4tbG9jYWw6IG1v c3RseWNsZWFuLWdlbmVyaWMKIAlAZm9yIGRpciBpbiAnJyAkKE1PU1RMWUNMRUFORElSUyk7 IGRvIFwKCj09PSBhZGRlZCBmaWxlICdsaWIvZ3JvdXAtbWVtYmVyLmMnCi0tLSBsaWIvZ3Jv dXAtbWVtYmVyLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2dyb3VwLW1l bWJlci5jCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTAsMCArMSwxMTkgQEAKKy8q IGdyb3VwLW1lbWJlci5jIC0tIGRldGVybWluZSB3aGV0aGVyIGdyb3VwIGlkIGlzIGluIGNh bGxpbmcgdXNlcidzIGdyb3VwIGxpc3QKKworICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk3 LTE5OTgsIDIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUKKyAgIEZv dW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisv KiBTcGVjaWZpY2F0aW9uLiAgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisKKyNpbmNsdWRlICJ4YWxsb2Mtb3ZlcnNpemVkLmgiCisKKy8qIE1vc3QgcHJvY2Vzc2Vz IGhhdmUgbm8gbW9yZSB0aGFuIHRoaXMgbWFueSBncm91cHMsIGFuZCBmb3IgdGhlc2UKKyAg IHByb2Nlc3NlcyB3ZSBjYW4gYXZvaWQgdXNpbmcgbWFsbG9jLiAgKi8KK2VudW0geyBHUk9V UEJVRl9TSVpFID0gMTAwIH07CisKK3N0cnVjdCBncm91cF9pbmZvCisgIHsKKyAgICBnaWRf dCAqZ3JvdXA7CisgICAgZ2lkX3QgZ3JvdXBidWZbR1JPVVBCVUZfU0laRV07CisgIH07CisK K3N0YXRpYyB2b2lkCitmcmVlX2dyb3VwX2luZm8gKHN0cnVjdCBncm91cF9pbmZvIGNvbnN0 ICpnKQoreworICBpZiAoZy0+Z3JvdXAgIT0gZy0+Z3JvdXBidWYpCisgICAgZnJlZSAoZy0+ Z3JvdXApOworfQorCitzdGF0aWMgaW50CitnZXRfZ3JvdXBfaW5mbyAoc3RydWN0IGdyb3Vw X2luZm8gKmdpKQoreworICBpbnQgbl9ncm91cHMgPSBnZXRncm91cHMgKEdST1VQQlVGX1NJ WkUsIGdpLT5ncm91cGJ1Zik7CisgIGdpLT5ncm91cCA9IGdpLT5ncm91cGJ1ZjsKKworICBp ZiAobl9ncm91cHMgPCAwKQorICAgIHsKKyAgICAgIGludCBuX2dyb3VwX3Nsb3RzID0gZ2V0 Z3JvdXBzICgwLCBOVUxMKTsKKyAgICAgIGlmICgwIDw9IG5fZ3JvdXBfc2xvdHMKKyAgICAg ICAgICAmJiAhIHhhbGxvY19vdmVyc2l6ZWQgKG5fZ3JvdXBfc2xvdHMsIHNpemVvZiAqZ2kt Pmdyb3VwKSkKKyAgICAgICAgeworICAgICAgICAgIGdpLT5ncm91cCA9IG1hbGxvYyAobl9n cm91cF9zbG90cyAqIHNpemVvZiAqZ2ktPmdyb3VwKTsKKyAgICAgICAgICBpZiAoZ2ktPmdy b3VwKQorICAgICAgICAgICAgbl9ncm91cHMgPSBnZXRncm91cHMgKG5fZ3JvdXBfc2xvdHMs IGdpLT5ncm91cCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogSW4gY2FzZSBvZiBlcnJv ciwgdGhlIHVzZXIgbG9zZXMuICAqLworICByZXR1cm4gbl9ncm91cHM7Cit9CisKKy8qIFJl dHVybiBub24temVybyBpZiBHSUQgaXMgb25lIHRoYXQgd2UgaGF2ZSBpbiBvdXIgZ3JvdXBz IGxpc3QuCisgICBOb3RlIHRoYXQgdGhlIGdyb3VwcyBsaXN0IGlzIG5vdCBndWFyYW50ZWVk IHRvIGNvbnRhaW4gdGhlIGN1cnJlbnQKKyAgIG9yIGVmZmVjdGl2ZSBncm91cCBJRCwgc28g dGhleSBzaG91bGQgZ2VuZXJhbGx5IGJlIGNoZWNrZWQKKyAgIHNlcGFyYXRlbHkuICAqLwor CitpbnQKK2dyb3VwX21lbWJlciAoZ2lkX3QgZ2lkKQoreworICBpbnQgaTsKKyAgaW50IGZv dW5kOworICBzdHJ1Y3QgZ3JvdXBfaW5mbyBnaTsKKyAgaW50IG5fZ3JvdXBzID0gZ2V0X2dy b3VwX2luZm8gKCZnaSk7CisKKyAgLyogU2VhcmNoIHRocm91Z2ggdGhlIGxpc3QgbG9va2lu ZyBmb3IgR0lELiAqLworICBmb3VuZCA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBuX2dyb3Vw czsgaSsrKQorICAgIHsKKyAgICAgIGlmIChnaWQgPT0gZ2kuZ3JvdXBbaV0pCisgICAgICAg IHsKKyAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9CisKKyAgZnJlZV9ncm91cF9pbmZvICgmZ2kpOworCisgIHJldHVybiBmb3VuZDsK K30KKworI2lmZGVmIFRFU1QKKworY2hhciAqcHJvZ3JhbV9uYW1lOworCitpbnQKK21haW4g KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1l ID0gYXJndlswXTsKKworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAg ICAgIGdpZF90IGdpZDsKKworICAgICAgZ2lkID0gYXRvaSAoYXJndltpXSk7CisgICAgICBw cmludGYgKCIlZDogJXNcbiIsIGdpZCwgZ3JvdXBfbWVtYmVyIChnaWQpID8gInllcyIgOiAi bm8iKTsKKyAgICB9CisgIGV4aXQgKDApOworfQorCisjZW5kaWYgLyogVEVTVCAqLwoKPT09 IGFkZGVkIGZpbGUgJ2xpYi9yb290LXVpZC5oJwotLS0gbGliL3Jvb3QtdWlkLmgJMTk3MC0w MS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL3Jvb3QtdWlkLmgJMjAxMi0xMC0xMiAyMzoy ODozMSArMDAwMApAQCAtMCwwICsxLDMwIEBACisvKiBUaGUgdXNlciBJRCB0aGF0IGFsd2F5 cyBoYXMgYXBwcm9wcmlhdGUgcHJpdmlsZWdlcyBpbiB0aGUgUE9TSVggc2Vuc2UuCisKKyAg IENvcHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisjaWZuZGVmIFJPT1RfVUlE X0hfCisjZGVmaW5lIFJPT1RfVUlEX0hfCisKKy8qIFRoZSB1c2VyIElEIHRoYXQgYWx3YXlz IGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIGluIHRoZSBQT1NJWCBzZW5zZS4gICovCisj aWZkZWYgX19UQU5ERU0KKyMgZGVmaW5lIFJPT1RfVUlEIDY1NTM1CisjZWxzZQorIyBkZWZp bmUgUk9PVF9VSUQgMAorI2VuZGlmCisKKyNlbmRpZgoKPT09IGFkZGVkIGZpbGUgJ2xpYi94 YWxsb2Mtb3ZlcnNpemVkLmgnCi0tLSBsaWIveGFsbG9jLW92ZXJzaXplZC5oCTE5NzAtMDEt MDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgJMjAxMi0xMC0x MiAyMzoyODozMSArMDAwMApAQCAtMCwwICsxLDM4IEBACisvKiB4YWxsb2Mtb3ZlcnNpemVk LmggLS0gbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBjaGVja2luZworCisgICBDb3B5cmlnaHQg KEMpIDE5OTAtMjAwMCwgMjAwMy0yMDA0LCAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgWEFMTE9DX09WRVJTSVpFRF9I XworIyBkZWZpbmUgWEFMTE9DX09WRVJTSVpFRF9IXworCisjIGluY2x1ZGUgPHN0ZGRlZi5o PgorCisvKiBSZXR1cm4gMSBpZiBhbiBhcnJheSBvZiBOIG9iamVjdHMsIGVhY2ggb2Ygc2l6 ZSBTLCBjYW5ub3QgZXhpc3QgZHVlCisgICB0byBzaXplIGFyaXRobWV0aWMgb3ZlcmZsb3cu ICBTIG11c3QgYmUgcG9zaXRpdmUgYW5kIE4gbXVzdCBiZQorICAgbm9ubmVnYXRpdmUuICBU aGlzIGlzIGEgbWFjcm8sIG5vdCBhIGZ1bmN0aW9uLCBzbyB0aGF0IGl0CisgICB3b3JrcyBj b3JyZWN0bHkgZXZlbiB3aGVuIFNJWkVfTUFYIDwgTi4KKworICAgQnkgZ251bGliIGNvbnZl bnRpb24sIFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cgaW4gc2l6ZQorICAgY2FsY3Vs YXRpb25zLCBzbyB0aGUgY29uc2VydmF0aXZlIGRpdmlkZW5kIHRvIHVzZSBoZXJlIGlzCisg ICBTSVpFX01BWCAtIDEsIHNpbmNlIFNJWkVfTUFYIG1pZ2h0IHJlcHJlc2VudCBhbiBvdmVy Zmxvd2VkIHZhbHVlLgorICAgSG93ZXZlciwgbWFsbG9jIChTSVpFX01BWCkgZmFpbHMgb24g YWxsIGtub3duIGhvc3RzIHdoZXJlCisgICBzaXplb2YgKHB0cmRpZmZfdCkgPD0gc2l6ZW9m IChzaXplX3QpLCBzbyBkbyBub3QgYm90aGVyIHRvIHRlc3QgZm9yCisgICBleGFjdGx5LVNJ WkVfTUFYIGFsbG9jYXRpb25zIG9uIHN1Y2ggaG9zdHM7IHRoaXMgYXZvaWRzIGEgdGVzdCBh bmQKKyAgIGJyYW5jaCB3aGVuIFMgaXMga25vd24gdG8gYmUgMS4gICovCisjIGRlZmluZSB4 YWxsb2Nfb3ZlcnNpemVkKG4sIHMpIFwKKyAgICAoKHNpemVfdCkgKHNpemVvZiAocHRyZGlm Zl90KSA8PSBzaXplb2YgKHNpemVfdCkgPyAtMSA6IC0yKSAvIChzKSA8IChuKSkKKworI2Vu ZGlmIC8qICFYQUxMT0NfT1ZFUlNJWkVEX0hfICovCgo9PT0gYWRkZWQgZmlsZSAnbTQvZXVp ZGFjY2Vzcy5tNCcKLS0tIG00L2V1aWRhY2Nlc3MubTQJMTk3MC0wMS0wMSAwMDowMDowMCAr MDAwMAorKysgbTQvZXVpZGFjY2Vzcy5tNAkyMDEyLTEwLTE3IDAyOjExOjIyICswMDAwCkBA IC0wLDAgKzEsNTIgQEAKKyMgZXVpZGFjY2Vzcy5tNCBzZXJpYWwgMTUKK2RubCBDb3B5cmln aHQgKEMpIDIwMDItMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBU aGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3Ry aWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcg YXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitBQ19ERUZVTihbZ2xfRlVOQ19OT05S RUVOVFJBTlRfRVVJREFDQ0VTU10sCitbCisgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfRVVJREFD Q0VTU10pCisgIEFDX0NIRUNLX0RFQ0xTKFtzZXRyZWdpZF0pCisgIEFDX0RFRklORShbUFJF RkVSX05PTlJFRU5UUkFOVF9FVUlEQUNDRVNTXSwgWzFdLAorICAgIFtEZWZpbmUgdGhpcyBp ZiB5b3UgcHJlZmVyIGV1aWRhY2Nlc3MgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHJlc3VsdAor ICAgICBldmVuIGlmIHRoaXMgd291bGQgbWFrZSBpdCBub25yZWVudHJhbnQuICBEZWZpbmUg dGhpcyBvbmx5IGlmIHlvdXIKKyAgICAgZW50aXJlIGFwcGxpY2F0aW9uIGlzIHNhZmUgZXZl biBpZiB0aGUgdWlkIG9yIGdpZCBtaWdodCB0ZW1wb3JhcmlseQorICAgICBjaGFuZ2UuICBJ ZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgc2lnbmFsIGhhbmRsZXJzIG9yIHRocmVhZHMgaXQK KyAgICAgaXMgcHJvYmFibHkgbm90IHNhZmUuXSkKK10pCisKK0FDX0RFRlVOKFtnbF9GVU5D X0VVSURBQ0NFU1NdLAorWworICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10p CisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDx1bmlzdGQuaD4gdG8gZGVjbGFyZSBldWlkYWNj ZXNzKCkuCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAg QUNfQ0hFQ0tfRlVOQ1MoW2V1aWRhY2Nlc3NdKQorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2V1 aWRhY2Nlc3MgPSBubzsgdGhlbgorICAgIEhBVkVfRVVJREFDQ0VTUz0wCisgIGZpCitdKQor CisjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2V1aWRhY2Nlc3MuYy4KK0FDX0RFRlVOKFtnbF9Q UkVSRVFfRVVJREFDQ0VTU10sIFsKKyAgZG5sIFByZWZlciBQT1NJWCBmYWNjZXNzYXQgb3Zl ciBub24tc3RhbmRhcmQgZXVpZGFjY2Vzcy4KKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbZmFj Y2Vzc2F0XSkKKyAgZG5sIFRyeSB2YXJpb3VzIG90aGVyIG5vbi1zdGFuZGFyZCBmYWxsYmFj a3MuCisgIEFDX0NIRUNLX0hFQURFUlMoW2xpYmdlbi5oXSkKKyAgQUNfRlVOQ19HRVRHUk9V UFMKKworICAjIFNvbGFyaXMgOSBhbmQgMTAgbmVlZCAtbGdlbiB0byBnZXQgdGhlIGVhY2Nl c3MgZnVuY3Rpb24uCisgICMgU2F2ZSBhbmQgcmVzdG9yZSBMSUJTIHNvIC1sZ2VuIGlzbid0 IGFkZGVkIHRvIGl0LiAgT3RoZXJ3aXNlLCAqYWxsKgorICAjIHByb2dyYW1zIGluIHRoZSBw YWNrYWdlIHdvdWxkIGVuZCB1cCBsaW5rZWQgd2l0aCB0aGF0IHBvdGVudGlhbGx5LXNoYXJl ZAorICAjIGxpYnJhcnksIGluZHVjaW5nIHVubmVjZXNzYXJ5IHJ1bi10aW1lIG92ZXJoZWFk LgorICBMSUJfRUFDQ0VTUz0KKyAgQUNfU1VCU1QoW0xJQl9FQUNDRVNTXSkKKyAgZ2xfc2F2 ZWRfbGlicz0kTElCUworICAgIEFDX1NFQVJDSF9MSUJTKFtlYWNjZXNzXSwgW2dlbl0sCisg ICAgICAgICAgICAgICAgICAgW3Rlc3QgIiRhY19jdl9zZWFyY2hfZWFjY2VzcyIgPSAibm9u ZSByZXF1aXJlZCIgfHwKKyAgICAgICAgICAgICAgICAgICAgTElCX0VBQ0NFU1M9JGFjX2N2 X3NlYXJjaF9lYWNjZXNzXSkKKyAgICBBQ19DSEVDS19GVU5DUyhbZWFjY2Vzc10pCisgIExJ QlM9JGdsX3NhdmVkX2xpYnMKK10pCgo9PT0gYWRkZWQgZmlsZSAnbTQvZmFjY2Vzc2F0Lm00 JwotLS0gbTQvZmFjY2Vzc2F0Lm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00 L2ZhY2Nlc3NhdC5tNAkyMDEyLTEwLTE1IDA2OjA1OjQ2ICswMDAwCkBAIC0wLDAgKzEsMjgg QEAKKyMgc2VyaWFsIDYKKyMgU2VlIGlmIHdlIG5lZWQgdG8gcHJvdmlkZSBmYWNjZXNzYXQg cmVwbGFjZW1lbnQuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJt aXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRo b3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVk LgorCisjIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4KKworQUNfREVGVU4oW2dsX0ZVTkNfRkFD Q0VTU0FUXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorCisg IGRubCBQZXJzdWFkZSBnbGliYyA8dW5pc3RkLmg+IHRvIGRlY2xhcmUgZmFjY2Vzc2F0KCku CisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisKKyAgQUNfQ0hF Q0tfRlVOQ1NfT05DRShbZmFjY2Vzc2F0XSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mYWNj ZXNzYXQgPSBubzsgdGhlbgorICAgIEhBVkVfRkFDQ0VTU0FUPTAKKyAgZmkKK10pCisKKyMg UHJlcmVxdWlzaXRlcyBvZiBsaWIvZmFjY2Vzc2F0Lm00LgorQUNfREVGVU4oW2dsX1BSRVJF UV9GQUNDRVNTQVRdLAorWworICBBQ19DSEVDS19GVU5DUyhbYWNjZXNzXSkKK10pCgo9PT0g YWRkZWQgZmlsZSAnbTQvZmNudGxfaC5tNCcKLS0tIG00L2ZjbnRsX2gubTQJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMAorKysgbTQvZmNudGxfaC5tNAkyMDEyLTEwLTE1IDA2OjA1OjQ2 ICswMDAwCkBAIC0wLDAgKzEsNTAgQEAKKyMgc2VyaWFsIDE1CisjIENvbmZpZ3VyZSBmY250 bC5oLgorZG5sIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDA5LTIwMTIgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVy bWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0 aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZl ZC4KKworZG5sIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuCisKK0FDX0RFRlVOKFtnbF9GQ05U TF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRkNOVExfSF9ERUZBVUxUU10pCisgIEFDX1JF UVVJUkUoW2dsX0ZDTlRMX09fRkxBR1NdKQorICBnbF9ORVhUX0hFQURFUlMoW2ZjbnRsLmhd KQorCisgIGRubCBFbnN1cmUgdGhlIHR5cGUgcGlkX3QgZ2V0cyBkZWZpbmVkLgorICBBQ19S RVFVSVJFKFtBQ19UWVBFX1BJRF9UXSkKKworICBkbmwgRW5zdXJlIHRoZSB0eXBlIG1vZGVf dCBnZXRzIGRlZmluZWQuCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTU9ERV9UXSkKKworICBk bmwgQ2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBvZiBhbnl0aGluZyB3ZSB3YW50IHRvIHBvaXNv biBpZiB0aGUKKyAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4g dXNlLCBpZiBpdCBpcyBub3QgY29tbW9uCisgIGRubCBlbm91Z2ggdG8gYmUgZGVjbGFyZWQg ZXZlcnl3aGVyZS4KKyAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxmY250 bC5oPgorICAgIF1dLCBbZmNudGwgb3BlbmF0XSkKK10pCisKK0FDX0RFRlVOKFtnbF9GQ05U TF9NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNv IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAg QUNfUkVRVUlSRShbZ2xfRkNOVExfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FU T1JfU0VUX1ZBUklBQkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFj cm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lO RElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9GQ05UTF9IX0RF RkFVTFRTXSwKK1sKKyAgR05VTElCX0ZDTlRMPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElC X0ZDTlRMXSkKKyAgR05VTElCX05PTkJMT0NLSU5HPTA7ICBBQ19TVUJTVChbR05VTElCX05P TkJMT0NLSU5HXSkKKyAgR05VTElCX09QRU49MDsgICAgICAgICBBQ19TVUJTVChbR05VTElC X09QRU5dKQorICBHTlVMSUJfT1BFTkFUPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfT1BF TkFUXSkKKyAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVy IG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgSEFWRV9GQ05UTD0xOyAgICAgICAgICBBQ19T VUJTVChbSEFWRV9GQ05UTF0pCisgIEhBVkVfT1BFTkFUPTE7ICAgICAgICAgQUNfU1VCU1Qo W0hBVkVfT1BFTkFUXSkKKyAgUkVQTEFDRV9GQ05UTD0wOyAgICAgICBBQ19TVUJTVChbUkVQ TEFDRV9GQ05UTF0pCisgIFJFUExBQ0VfT1BFTj0wOyAgICAgICAgQUNfU1VCU1QoW1JFUExB Q0VfT1BFTl0pCisgIFJFUExBQ0VfT1BFTkFUPTA7ICAgICAgQUNfU1VCU1QoW1JFUExBQ0Vf T1BFTkFUXSkKK10pCgo9PT0gYWRkZWQgZmlsZSAnbTQvZ2V0Z3JvdXBzLm00JwotLS0gbTQv Z2V0Z3JvdXBzLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L2dldGdyb3Vw cy5tNAkyMDEyLTEwLTEyIDIzOjI4OjMxICswMDAwCkBAIC0wLDAgKzEsMTA3IEBACisjIHNl cmlhbCAxOAorCitkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCitkbmwgQSB3cmFwcGVyIGFyb3Vu ZCBBQ19GVU5DX0dFVEdST1VQUy4KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5NywgMTk5 OS0yMDA0LCAyMDA4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisj IFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3Ry aWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFz IHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfdmVyc2lvbl9wcmVyZXEoWzIuNzBd LCBbXSAsWworCisjIFRoaXMgaXMgdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5nIEF1dG9jb25m IHBhdGNoOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWF1dG9j b25mLmdpdDthPWNvbW1pdGRpZmY7aD03ZmJiNTUzNzI3ZWQ3ZTBlNjg5YTE3NTk0YjU4NTU5 ZWNmM2VhNmU5CitBQ19ERUZVTihbQUNfRlVOQ19HRVRHUk9VUFNdLAorWworICBBQ19SRVFV SVJFKFtBQ19UWVBFX0dFVEdST1VQU10pZG5sCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfU0la RV9UXSlkbmwKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubCBmb3IgY3Jv c3MtY29tcGlsZXMKKyAgQUNfQ0hFQ0tfRlVOQyhbZ2V0Z3JvdXBzXSkKKworICAjIElmIHdl IGRvbid0IHlldCBoYXZlIGdldGdyb3Vwcywgc2VlIGlmIGl0J3MgaW4gLWxic2QuCisgICMg VGhpcyBpcyByZXBvcnRlZCB0byBiZSBuZWNlc3Nhcnkgb24gYW4gSVRPUyAzMDAwV1MgcnVu bmluZyBTRUlVWCAzLjEuCisgIGFjX3NhdmVfTElCUz0kTElCUworICBpZiB0ZXN0ICRhY19j dl9mdW5jX2dldGdyb3VwcyA9IG5vOyB0aGVuCisgICAgQUNfQ0hFQ0tfTElCKGJzZCwgZ2V0 Z3JvdXBzLCBbR0VUR1JPVVBTX0xJQj0tbGJzZF0pCisgIGZpCisKKyAgIyBSdW4gdGhlIHBy b2dyYW0gdG8gdGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgc3lzdGVtLXN1cHBsaWVk CisgICMgZ2V0Z3JvdXBzIGZ1bmN0aW9uIG9ubHkgaWYgdGhlcmUgaXMgc3VjaCBhIGZ1bmN0 aW9uLgorICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGdyb3VwcyA9IHllczsgdGhlbgorICAg IEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBnZXRncm91cHNdLCBbYWNfY3ZfZnVuY19n ZXRncm91cHNfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNf TEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorICAg ICAgICAgICAgW1svKiBPbiBVbHRyaXggNC4zLCBnZXRncm91cHMgKDAsIDApIGFsd2F5cyBm YWlscy4gICovCisgICAgICAgICAgICAgIHJldHVybiBnZXRncm91cHMgKDAsIDApID09IC0x O11dKQorICAgICAgICAgXSwKKyAgICAgICAgIFthY19jdl9mdW5jX2dldGdyb3Vwc193b3Jr cz15ZXNdLAorICAgICAgICAgW2FjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vXSwKKyAg ICAgICAgIFtjYXNlICIkaG9zdF9vcyIgaW4gIyAoKAorICAgICAgICAgICAgICAgICAgICAj IEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0ZW1zLgorICAgICAgICAgICAgKi1nbnUqKSBhY19j dl9mdW5jX2dldGdyb3Vwc193b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAg ICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAg ICAgICAqKSAgICAgIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPSJndWVzc2luZyBubyIg OzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICBdKQorICAgICAgXSkKKyAgZWxzZQorICAg IGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vCisgIGZpCisgIGNhc2UgIiRhY19jdl9m dW5jX2dldGdyb3Vwc193b3JrcyIgaW4KKyAgICAqeWVzKQorICAgICAgQUNfREVGSU5FKFtI QVZFX0dFVEdST1VQU10sIFsxXSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdXIgc3lz dGVtIGhhcyBhIHdvcmtpbmcgYGdldGdyb3VwcycgZnVuY3Rpb24uXSkKKyAgICAgIDs7Cisg IGVzYWMKKyAgTElCUz0kYWNfc2F2ZV9MSUJTCitdKSMgQUNfRlVOQ19HRVRHUk9VUFMKKwor XSkKKworQUNfREVGVU4oW2dsX0ZVTkNfR0VUR1JPVVBTXSwKK1sKKyAgQUNfUkVRVUlSRShb QUNfVFlQRV9HRVRHUk9VUFNdKQorICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxU U10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1j b21waWxlcworCisgIEFDX0ZVTkNfR0VUR1JPVVBTCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNf Z2V0Z3JvdXBzICE9IHllczsgdGhlbgorICAgIEhBVkVfR0VUR1JPVVBTPTAKKyAgZWxzZQor ICAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2dldGdyb3VwcyIgIT0gZ2lkX3QgXAorICAgICAg IHx8IHsgY2FzZSAiJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzIiBpbgorICAgICAgICAg ICAgICAqeWVzKSBmYWxzZTs7CisgICAgICAgICAgICAgICopIHRydWU7OworICAgICAgICAg ICAgZXNhYworICAgICAgICAgIH07IHRoZW4KKyAgICAgIFJFUExBQ0VfR0VUR1JPVVBTPTEK KyAgICAgIEFDX0RFRklORShbR0VUR1JPVVBTX1pFUk9fQlVHXSwgWzFdLCBbRGVmaW5lIHRo aXMgdG8gMSBpZgorICAgICAgICBnZXRncm91cHMoMCxOVUxMKSBkb2VzIG5vdCByZXR1cm4g dGhlIG51bWJlciBvZiBncm91cHMuXSkKKyAgICBlbHNlCisgICAgICBkbmwgRGV0ZWN0IEZy ZWVCU0QgYnVnOyBQT1NJWCByZXF1aXJlcyBnZXRncm91cHMoLTEscHRyKSB0byBmYWlsLgor ICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgZ2V0Z3JvdXBzIGhhbmRsZXMgbmVnYXRp dmUgdmFsdWVzXSwKKyAgICAgICAgW2dsX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzXSwKKyAg ICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVG QVVMVF0sCisgICAgICAgICAgW1tpbnQgc2l6ZSA9IGdldGdyb3VwcyAoMCwgMCk7CisgICAg ICAgICAgICBnaWRfdCAqbGlzdCA9IG1hbGxvYyAoc2l6ZSAqIHNpemVvZiAqbGlzdCk7Cisg ICAgICAgICAgICByZXR1cm4gZ2V0Z3JvdXBzICgtMSwgbGlzdCkgIT0gLTE7XV0pXSwKKyAg ICAgICAgICBbZ2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9eWVzXSwKKyAgICAgICAgICBb Z2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9bm9dLAorICAgICAgICAgIFtjYXNlICIkaG9z dF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5 c3RlbXMuCisgICAgICAgICAgICAgKi1nbnUqKSBnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jr cz0iZ3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24n dCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAgICopICAgICAgZ2xfY3Zf ZnVuY19nZXRncm91cHNfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgICBlc2Fj CisgICAgICAgICAgXSldKQorICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dv cmtzIiBpbgorICAgICAgICAqeWVzKSA7OworICAgICAgICAqKSBSRVBMQUNFX0dFVEdST1VQ Uz0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgdGVzdCAtbiAiJEdFVEdST1VQ U19MSUIiICYmIExJQlM9IiRHRVRHUk9VUFNfTElCICRMSUJTIgorXSkKCj09PSBtb2RpZmll ZCBmaWxlICdtNC9nbnVsaWItY29tcC5tNCcKLS0tIG00L2dudWxpYi1jb21wLm00CTIwMTIt MTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIG00L2dudWxpYi1jb21wLm00CTIwMTItMTAtMjAg MDE6MTM6MzUgKzAwMDAKQEAgLTUzLDE3ICs1MywyMiBAQAogICAjIENvZGUgZnJvbSBtb2R1 bGUgZHRvdGltZXNwZWM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdXAyOgogICAjIENvZGUg ZnJvbSBtb2R1bGUgZW52aXJvbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGV1aWRhY2Nlc3M6 CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBleGVjaW5mbzoKICAgIyBDb2RlIGZyb20gbW9kdWxl IGV4dGVuc2lvbnM6CiAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10p CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlcm4taW5saW5lOgorICAjIENvZGUgZnJvbSBt b2R1bGUgZmFjY2Vzc2F0OgorICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGwtaDoKICAgIyBD b2RlIGZyb20gbW9kdWxlIGZpbGVtb2RlOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0Z3Jv dXBzOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0bG9hZGF2ZzoKICAgIyBDb2RlIGZyb20g bW9kdWxlIGdldG9wdC1nbnU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtcG9zaXg6 CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBnZXR0ZXh0LWg6CiAgICMgQ29kZSBmcm9tIG1vZHVs ZSBnZXR0aW1lOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0dGltZW9mZGF5OgorICAjIENv ZGUgZnJvbSBtb2R1bGUgZ3JvdXAtbWVtYmVyOgogICAjIENvZGUgZnJvbSBtb2R1bGUgaWdu b3JlLXZhbHVlOgogICAjIENvZGUgZnJvbSBtb2R1bGUgaW5jbHVkZV9uZXh0OgogICAjIENv ZGUgZnJvbSBtb2R1bGUgaW50cHJvcHM6CkBAIC03OSw2ICs4NCw3IEBACiAgICMgQ29kZSBm cm9tIG1vZHVsZSBwc2VsZWN0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgcHRocmVhZF9zaWdt YXNrOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbms6CisgICMgQ29kZSBmcm9tIG1v ZHVsZSByb290LXVpZDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbC1oOgogICAjIENv ZGUgZnJvbSBtb2R1bGUgc25pcHBldC9fTm9yZXR1cm46CiAgICMgQ29kZSBmcm9tIG1vZHVs ZSBzbmlwcGV0L2FyZy1ub25udWxsOgpAQCAtMTIwLDYgKzEyNiw3IEBACiAgICMgQ29kZSBm cm9tIG1vZHVsZSB1dGltZW5zOgogICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyaWZ5OgogICAj IENvZGUgZnJvbSBtb2R1bGUgd2FybmluZ3M6CisgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxs b2Mtb3ZlcnNpemVkOgogXSkKIAogIyBUaGlzIG1hY3JvIHNob3VsZCBiZSBpbnZva2VkIGZy b20gLi9jb25maWd1cmUuYWMsIGluIHRoZSBzZWN0aW9uCkBAIC0xNTYsNiArMTYzLDE0IEBA CiAgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKICAgZ2xfRVhFQ0lO Rk9fSAogICBBQ19SRVFVSVJFKFtnbF9FWFRFUk5fSU5MSU5FXSkKKyAgZ2xfRlVOQ19GQUND RVNTQVQKKyAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0aGVuCisgICAgQUNfTElC T0JKKFtmYWNjZXNzYXRdKQorICAgIGdsX1BSRVJFUV9GQUNDRVNTQVQKKyAgZmkKKyAgZ2xf TU9EVUxFX0lORElDQVRPUihbZmFjY2Vzc2F0XSkKKyAgZ2xfVU5JU1REX01PRFVMRV9JTkRJ Q0FUT1IoW2ZhY2Nlc3NhdF0pCisgIGdsX0ZDTlRMX0gKICAgZ2xfRklMRU1PREUKICAgZ2xf R0VUTE9BREFWRwogICBpZiB0ZXN0ICRIQVZFX0dFVExPQURBVkcgPSAwOyB0aGVuCkBAIC0y NjksMTggKzI4NCw1MyBAQAogICBnbF9VTklTVERfSAogICBnbF9VVElNRU5TCiAgIGdsX2du dWxpYl9lbmFibGVkX2Rvc25hbWU9ZmFsc2UKKyAgZ2xfZ251bGliX2VuYWJsZWRfZXVpZGFj Y2Vzcz1mYWxzZQorICBnbF9nbnVsaWJfZW5hYmxlZF9nZXRncm91cHM9ZmFsc2UKICAgZ2xf Z251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzY9ZmFsc2UK KyAgZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDE9 ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heD1mYWxzZQorICBnbF9nbnVsaWJf ZW5hYmxlZF82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4Yz1mYWxzZQogICBnbF9n bnVsaWJfZW5hYmxlZF9zdGF0PWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX3N0cnRvbGw9 ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfc3RydG91bGw9ZmFsc2UKICAgZ2xfZ251bGli X2VuYWJsZWRfdmVyaWZ5PWZhbHNlCisgIGdsX2dudWxpYl9lbmFibGVkXzY4MmU2MDk2MDRj Y2FhYzZiZTM4MmU0ZWUzYTRlYWVjPWZhbHNlCiAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9k b3NuYW1lICgpCiAgIHsKICAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9kb3NuYW1lOyB0 aGVuCiAgICAgICBnbF9nbnVsaWJfZW5hYmxlZF9kb3NuYW1lPXRydWUKICAgICBmaQogICB9 CisgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9ldWlkYWNjZXNzICgpCisgIHsKKyAgICBpZiAh ICRnbF9nbnVsaWJfZW5hYmxlZF9ldWlkYWNjZXNzOyB0aGVuCisgICAgICBnbF9GVU5DX0VV SURBQ0NFU1MKKyAgICAgIGlmIHRlc3QgJEhBVkVfRVVJREFDQ0VTUyA9IDA7IHRoZW4KKyAg ICAgICAgQUNfTElCT0JKKFtldWlkYWNjZXNzXSkKKyAgICAgICAgZ2xfUFJFUkVRX0VVSURB Q0NFU1MKKyAgICAgIGZpCisgICAgICBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbZXVp ZGFjY2Vzc10pCisgICAgICBnbF9nbnVsaWJfZW5hYmxlZF9ldWlkYWNjZXNzPXRydWUKKyAg ICAgIGlmIHRlc3QgJEhBVkVfRVVJREFDQ0VTUyA9IDA7IHRoZW4KKyAgICAgICAgZnVuY19n bF9nbnVsaWJfbTRjb2RlX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxCisgICAg ICBmaQorICAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzYwOTllOTczN2Y3NTdkYjM2YzQ3 ZmE5ZDlmMDJlODhjCisgICAgICBpZiB0ZXN0ICRIQVZFX0VVSURBQ0NFU1MgPSAwOyB0aGVu CisgICAgICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9zdGF0CisgICAgICBmaQorICAgIGZp CisgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2dldGdyb3VwcyAoKQorICB7CisgICAg aWYgISAkZ2xfZ251bGliX2VuYWJsZWRfZ2V0Z3JvdXBzOyB0aGVuCisgICAgICBnbF9GVU5D X0dFVEdST1VQUworICAgICAgaWYgdGVzdCAkSEFWRV9HRVRHUk9VUFMgPSAwIHx8IHRlc3Qg JFJFUExBQ0VfR0VUR1JPVVBTID0gMTsgdGhlbgorICAgICAgICBBQ19MSUJPQkooW2dldGdy b3Vwc10pCisgICAgICBmaQorICAgICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2dl dGdyb3Vwc10pCisgICAgICBnbF9nbnVsaWJfZW5hYmxlZF9nZXRncm91cHM9dHJ1ZQorICAg IGZpCisgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2JlNDUzY2VjNWVlY2Y1NzMxYTI3 NGYyZGU3ZjJkYjM2ICgpCiAgIHsKICAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1 M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNjsgdGhlbgpAQCAtMjg5LDYgKzMzOSwyNCBA QAogICAgICAgZ2xfZ251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdm MmRiMzY9dHJ1ZQogICAgIGZpCiAgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2E5Nzg2 ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxICgpCisgIHsKKyAgICBpZiAhICRnbF9nbnVs aWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMTsgdGhlbgorICAg ICAgZ2xfRlVOQ19HUk9VUF9NRU1CRVIKKyAgICAgIGlmIHRlc3QgJEhBVkVfR1JPVVBfTUVN QkVSID0gMDsgdGhlbgorICAgICAgICBBQ19MSUJPQkooW2dyb3VwLW1lbWJlcl0pCisgICAg ICAgIGdsX1BSRVJFUV9HUk9VUF9NRU1CRVIKKyAgICAgIGZpCisgICAgICBnbF9VTklTVERf TU9EVUxFX0lORElDQVRPUihbZ3JvdXAtbWVtYmVyXSkKKyAgICAgIGdsX2dudWxpYl9lbmFi bGVkX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxPXRydWUKKyAgICAgIGlmIHRl c3QgJEhBVkVfR1JPVVBfTUVNQkVSID0gMDsgdGhlbgorICAgICAgICBmdW5jX2dsX2dudWxp Yl9tNGNvZGVfZ2V0Z3JvdXBzCisgICAgICBmaQorICAgICAgaWYgdGVzdCAkSEFWRV9HUk9V UF9NRU1CRVIgPSAwOyB0aGVuCisgICAgICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV82ODJl NjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYworICAgICAgZmkKKyAgICBmaQorICB9CiAg IGZ1bmNfZ2xfZ251bGliX200Y29kZV9wYXRobWF4ICgpCiAgIHsKICAgICBpZiAhICRnbF9n bnVsaWJfZW5hYmxlZF9wYXRobWF4OyB0aGVuCkBAIC0yOTYsNiArMzY0LDEyIEBACiAgICAg ICBnbF9nbnVsaWJfZW5hYmxlZF9wYXRobWF4PXRydWUKICAgICBmaQogICB9CisgIGZ1bmNf Z2xfZ251bGliX200Y29kZV82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4YyAoKQor ICB7CisgICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfNjA5OWU5NzM3Zjc1N2RiMzZjNDdm YTlkOWYwMmU4OGM7IHRoZW4KKyAgICAgIGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3 NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjPXRydWUKKyAgICBmaQorICB9CiAgIGZ1bmNfZ2xfZ251 bGliX200Y29kZV9zdGF0ICgpCiAgIHsKICAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9z dGF0OyB0aGVuCkBAIC0zNDcsNiArNDIxLDE4IEBACiAgICAgICBnbF9nbnVsaWJfZW5hYmxl ZF92ZXJpZnk9dHJ1ZQogICAgIGZpCiAgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzY4 MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVjICgpCisgIHsKKyAgICBpZiAhICRnbF9n bnVsaWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYzsgdGhlbgor ICAgICAgZ2xfZ251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVh ZWM9dHJ1ZQorICAgIGZpCisgIH0KKyAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0 aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUKKyAgZmkKKyAgaWYgdGVz dCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2Rl X2V1aWRhY2Nlc3MKKyAgZmkKICAgaWYgdGVzdCAkUkVQTEFDRV9HRVRPUFQgPSAxOyB0aGVu CiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3 ZjJkYjM2CiAgIGZpCkBAIC0zNzMsMTIgKzQ1OSwxNyBAQAogICBmaQogICBtNF9wYXR0ZXJu X2FsbG93KFteZ2xfR05VTElCX0VOQUJMRURfXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dO VUxJQl9FTkFCTEVEX2Rvc25hbWVdLCBbJGdsX2dudWxpYl9lbmFibGVkX2Rvc25hbWVdKQor ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfZXVpZGFjY2Vzc10sIFskZ2xf Z251bGliX2VuYWJsZWRfZXVpZGFjY2Vzc10pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVM SUJfRU5BQkxFRF9nZXRncm91cHNdLCBbJGdsX2dudWxpYl9lbmFibGVkX2dldGdyb3Vwc10p CiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9iZTQ1M2NlYzVlZWNmNTcz MWEyNzRmMmRlN2YyZGIzNl0sIFskZ2xfZ251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3 MzFhMjc0ZjJkZTdmMmRiMzZdKQorICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJM RURfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDFdLCBbJGdsX2dudWxpYl9lbmFi bGVkX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxXSkKICAgQU1fQ09ORElUSU9O QUwoW2dsX0dOVUxJQl9FTkFCTEVEX3BhdGhtYXhdLCBbJGdsX2dudWxpYl9lbmFibGVkX3Bh dGhtYXhdKQorICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5NzM3 Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTcz N2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJ Ql9FTkFCTEVEX3N0YXRdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0YXRdKQogICBBTV9DT05E SVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfc3RydG9sbF0sIFskZ2xfZ251bGliX2VuYWJs ZWRfc3RydG9sbF0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9zdHJ0 b3VsbF0sIFskZ2xfZ251bGliX2VuYWJsZWRfc3RydG91bGxdKQogICBBTV9DT05ESVRJT05B TChbZ2xfR05VTElCX0VOQUJMRURfdmVyaWZ5XSwgWyRnbF9nbnVsaWJfZW5hYmxlZF92ZXJp ZnldKQorICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjgyZTYwOTYwNGNj YWFjNmJlMzgyZTRlZTNhNGVhZWNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzY4MmU2MDk2MDRj Y2FhYzZiZTM4MmU0ZWUzYTRlYWVjXSkKICAgIyBFbmQgb2YgY29kZSBmcm9tIG1vZHVsZXMK ICAgbTRfaWZ2YWwoZ2xfTElCU09VUkNFU19MSVNULCBbCiAgICAgbTRfc3lzY21kKFt0ZXN0 ICEgLWQgXW00X2RlZm4oW2dsX0xJQlNPVVJDRVNfRElSXSlbIHx8CkBAIC01MjcsNiArNjE4 LDcgQEAKICAgbGliL2FsbG9jYS5pbi5oCiAgIGxpYi9hbGxvY2F0b3IuYwogICBsaWIvYWxs b2NhdG9yLmgKKyAgbGliL2F0LWZ1bmMuYwogICBsaWIvYy1jdHlwZS5jCiAgIGxpYi9jLWN0 eXBlLmgKICAgbGliL2Mtc3RyY2FzZS5oCkBAIC01MzgsMTIgKzYzMCwxNiBAQAogICBsaWIv ZHRvYXN0ci5jCiAgIGxpYi9kdG90aW1lc3BlYy5jCiAgIGxpYi9kdXAyLmMKKyAgbGliL2V1 aWRhY2Nlc3MuYwogICBsaWIvZXhlY2luZm8uYwogICBsaWIvZXhlY2luZm8uaW4uaAorICBs aWIvZmFjY2Vzc2F0LmMKKyAgbGliL2ZjbnRsLmluLmgKICAgbGliL2ZpbGVtb2RlLmMKICAg bGliL2ZpbGVtb2RlLmgKICAgbGliL2Z0b2FzdHIuYwogICBsaWIvZnRvYXN0ci5oCisgIGxp Yi9nZXRncm91cHMuYwogICBsaWIvZ2V0bG9hZGF2Zy5jCiAgIGxpYi9nZXRvcHQuYwogICBs aWIvZ2V0b3B0LmluLmgKQEAgLTU1Miw2ICs2NDgsNyBAQAogICBsaWIvZ2V0dGV4dC5oCiAg IGxpYi9nZXR0aW1lLmMKICAgbGliL2dldHRpbWVvZmRheS5jCisgIGxpYi9ncm91cC1tZW1i ZXIuYwogICBsaWIvaWdub3JlLXZhbHVlLmgKICAgbGliL2ludHByb3BzLmgKICAgbGliL2lu dHR5cGVzLmluLmgKQEAgLTU2NCw2ICs2NjEsNyBAQAogICBsaWIvcHNlbGVjdC5jCiAgIGxp Yi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIvcmVhZGxpbmsuYworICBsaWIvcm9vdC11aWQu aAogICBsaWIvc2hhMS5jCiAgIGxpYi9zaGExLmgKICAgbGliL3NoYTI1Ni5jCkBAIC02MDUs MjEgKzcwMywyOCBAQAogICBsaWIvdXRpbWVucy5jCiAgIGxpYi91dGltZW5zLmgKICAgbGli L3ZlcmlmeS5oCisgIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgKICAgbTQvMDBnbnVsaWIubTQK ICAgbTQvYWxsb2NhLm00CiAgIG00L2Mtc3RydG9kLm00CiAgIG00L2Nsb2NrX3RpbWUubTQK ICAgbTQvZHVwMi5tNAogICBtNC9lbnZpcm9uLm00CisgIG00L2V1aWRhY2Nlc3MubTQKICAg bTQvZXhlY2luZm8ubTQKICAgbTQvZXh0ZW5zaW9ucy5tNAogICBtNC9leHRlcm4taW5saW5l Lm00CisgIG00L2ZhY2Nlc3NhdC5tNAorICBtNC9mY250bC1vLm00CisgIG00L2ZjbnRsX2gu bTQKICAgbTQvZmlsZW1vZGUubTQKKyAgbTQvZ2V0Z3JvdXBzLm00CiAgIG00L2dldGxvYWRh dmcubTQKICAgbTQvZ2V0b3B0Lm00CiAgIG00L2dldHRpbWUubTQKICAgbTQvZ2V0dGltZW9m ZGF5Lm00CiAgIG00L2dudWxpYi1jb21tb24ubTQKKyAgbTQvZ3JvdXAtbWVtYmVyLm00CiAg IG00L2luY2x1ZGVfbmV4dC5tNAogICBtNC9pbnR0eXBlcy5tNAogICBtNC9sYXJnZWZpbGUu bTQKCj09PSBhZGRlZCBmaWxlICdtNC9ncm91cC1tZW1iZXIubTQnCi0tLSBtNC9ncm91cC1t ZW1iZXIubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbTQvZ3JvdXAtbWVtYmVy Lm00CTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTAsMCArMSwyOSBAQAorIyBzZXJp YWwgMTQKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSwgMjAwMy0yMDA3LCAyMDA5LTIw MTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBmaWxlIGlzIGZy ZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5s aW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0 aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMg cHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcKKworQUNfREVGVU4o W2dsX0ZVTkNfR1JPVVBfTUVNQkVSXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hf REVGQVVMVFNdKQorCisgIGRubCBQZXJzdWFkZSBnbGliYyA8dW5pc3RkLmg+IHRvIGRlY2xh cmUgZ3JvdXBfbWVtYmVyKCkuCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5T SU9OU10pCisKKyAgZG5sIERvIHRoaXMgcmVwbGFjZW1lbnQgY2hlY2sgbWFudWFsbHkgYmVj YXVzZSBJIHdhbnQgdGhlIGh5cGhlbgorICBkbmwgKG5vdCB0aGUgdW5kZXJzY29yZSkgaW4g dGhlIGZpbGVuYW1lLgorICBBQ19DSEVDS19GVU5DKFtncm91cF9tZW1iZXJdLCAsIFsKKyAg ICBIQVZFX0dST1VQX01FTUJFUj0wCisgIF0pCitdKQorCisjIFByZXJlcXVpc2l0ZXMgb2Yg bGliL2dyb3VwLW1lbWJlci5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9HUk9VUF9NRU1CRVJd LAorWworICBBQ19SRVFVSVJFKFtBQ19GVU5DX0dFVEdST1VQU10pCitdKQoKPT09IG1vZGlm aWVkIGZpbGUgJ250L0NoYW5nZUxvZycKLS0tIG50L0NoYW5nZUxvZwkyMDEyLTEwLTE5IDE5 OjI1OjE4ICswMDAwCisrKyBudC9DaGFuZ2VMb2cJMjAxMi0xMC0yMiAwMjo0MzoxNiArMDAw MApAQCAtMSwzICsxLDEwIEBACisyMDEyLTEwLTIyICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KKworCVVzZSBmYWNjZXNzYXQsIG5vdCBhY2Nlc3MsIHdoZW4gY2hlY2tp bmcgZmlsZSBwZXJtaXNzaW9ucyAoQnVnIzEyNjMyKS4KKwkqIGluYy9tcy13MzIuaCAoQVRf RkRDV0QsIEFUX0VBQ0NFU1MpOiBOZXcgc3ltYm9scy4KKwkoYWNjZXNzKTogUmVtb3ZlLgor CShmYWNjZXNzYXQpOiBOZXcgbWFjcm8uCisKIDIwMTItMTAtMTcgIEVsaSBaYXJldHNraWkg IDxlbGl6QGdudS5vcmc+CiAKIAkqIGluYy9wd2QuaCAoZ2V0dWlkLCBnZXRldWlkKTogQWRk IHByb3RvdHlwZXMuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvaW5jL21zLXczMi5oJwotLS0g bnQvaW5jL21zLXczMi5oCTIwMTItMTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIG50L2luYy9t cy13MzIuaAkyMDEyLTEwLTIwIDAxOjEzOjM1ICswMDAwCkBAIC0xMjQsNiArMTI0LDEwIEBA CiAjZGVmaW5lIE1BWFBBVEhMRU4gICAgICBfTUFYX1BBVEgKICNlbmRpZgogCisvKiBVc2Ug dmFsdWVzIGNvbXBhdGlibGUgd2l0aCBnbnVsaWIsIGFzIHRoZXJlJ3Mgbm8gcmVhc29uIHRv IGRpZmZlci4gICovCisjZGVmaW5lIEFUX0ZEQ1dEICgtMzA0MTk2NSkKKyNkZWZpbmUgQVRf RUFDQ0VTUyA0CisKICNpZmRlZiBIQVZFX05UR1VJCiAjZGVmaW5lIEhBVkVfV0lORE9XX1NZ U1RFTSAxCiAjZGVmaW5lIEhBVkVfTUVOVVMgMQpAQCAtMTQ1LDggKzE0OSw2IEBACiAjZW5k aWYKIAogLyogQ2FsbHMgdGhhdCBhcmUgZW11bGF0ZWQgb3Igc2hhZG93ZWQuICAqLwotI3Vu ZGVmIGFjY2VzcwotI2RlZmluZSBhY2Nlc3MgIHN5c19hY2Nlc3MKICN1bmRlZiBjaGRpcgog I2RlZmluZSBjaGRpciAgIHN5c19jaGRpcgogI3VuZGVmIGNobW9kCkBAIC0xNjEsNiArMTYz LDcgQEAKICNkZWZpbmUgZHVwICAgICBzeXNfZHVwCiAjdW5kZWYgZHVwMgogI2RlZmluZSBk dXAyICAgIHN5c19kdXAyCisjZGVmaW5lIGZhY2Nlc3NhdCAgc3lzX2ZhY2Nlc3NhdAogI2Rl ZmluZSBmb3BlbiAgIHN5c19mb3BlbgogI2RlZmluZSBsaW5rICAgIHN5c19saW5rCiAjZGVm aW5lIGxvY2FsdGltZSBzeXNfbG9jYWx0aW1lCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0No YW5nZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAxMi0xMC0yMSAxODo0ODoxMSArMDAwMAor Kysgc3JjL0NoYW5nZUxvZwkyMDEyLTEwLTIyIDA2OjAwOjU0ICswMDAwCkBAIC0xLDMgKzEs NjggQEAKKzIwMTItMTAtMjIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1Pgor CisJVXNlIGZhY2Nlc3NhdCwgbm90IGFjY2Vzcywgd2hlbiBjaGVja2luZyBmaWxlIHBlcm1p c3Npb25zIChCdWcjMTI2MzIpLgorCVRoaXMgZml4ZXMgYSBidWcgdGhhdCBoYXMgYmVlbiBw cmVzZW50IGluIEVtYWNzIHNpbmNlIGl0cyBjcmVhdGlvbi4KKwlJdCB3YXMgcmVwb3J0ZWQg YnkgQ2hyaXMgVG9yZWsgaW4gMTk4MyBldmVuIGJlZm9yZSBHTlUgRW1hY3MgZXhpc3RlZCwK Kwl3aGljaCBtdXN0IHNldCBzb21lIHNvcnQgb2YgcmVjb3JkLiAgKFRvcmVrJ3MgYnVnIHJl cG9ydCB3YXMgYWdhaW5zdAorCWEgcHJlZGVjZXNzb3Igb2YgR05VIEVtYWNzLCBidXQgR05V IEVtYWNzIGhhcHBlbmVkIHRvIGhhdmUgdGhlCisJc2FtZSBjb21tb24gZmxhdy4pICBTZWUg VG9yZWsncyBVc2VuZXQgcG9zdGluZworCSJzZXR1aWQvc2V0Z2lkIHByb2dyYW1zICYgRW1h Y3MiIEFydGljbGUtSS5ELjogc3JpLWFycGEuODU4CisJUG9zdGVkOiBGcmkgQXByICA4IDE0 OjE4OjU2IDE5ODMuCisJKExJQkVTKTogVXNlIGl0LgorCSogY2FsbHByb2MuYyAoaW5pdF9j YWxscHJvYyk6CisJKiBjaGFyc2V0LmMgKGluaXRfY2hhcnNldCk6CisJKiBmaWxlaW8uYyAo Y2hlY2tfZXhpc3RpbmcsIGNoZWNrX2V4ZWN1dGFibGUsIGNoZWNrX3dyaXRhYmxlKQorCShG ZmlsZV9yZWFkYWJsZV9wKToKKwkqIGxyZWFkLmMgKG9wZW5wLCBsb2FkX3BhdGhfY2hlY2sp OgorCSogcHJvY2Vzcy5jIChhbGxvY2F0ZV9wdHkpOgorCSogeHJkYi5jIChmaWxlX3ApOgor CVVzZSBlZmZlY3RpdmUgVUlEIHdoZW4gY2hlY2tpbmcgcGVybWlzc2lvbnMsIG5vdCByZWFs IFVJRC4KKwkqIGNhbGxwcm9jLmMgKGluaXRfY2FsbHByb2MpOgorCSogY2hhcnNldC5jIChp bml0X2NoYXJzZXQpOgorCSogbHJlYWQuYyAobG9hZF9wYXRoX2NoZWNrLCBpbml0X2xyZWFk KToKKwlUZXN0IHdoZXRoZXIgZGlyZWN0b3JpZXMgYXJlIGFjY2Vzc2libGUsIG5vdCBtZXJl bHkgd2hldGhlciB0aGV5IGV4aXN0LgorCSogY29uZl9wb3N0LmggKEdOVUxJQl9TVVBQT1JU X09OTFlfQVRfRkRDV0QpOiBOZXcgbWFjcm8uCisJKiBmaWxlaW8uYyAoY2hlY2tfZXhpc3Rp bmcsIGNoZWNrX2V4ZWN1dGFibGUsIGNoZWNrX3dyaXRhYmxlKQorCShGZmlsZV9yZWFkYWJs ZV9wKToKKwlVc2Ugc3ltYm9saWMgbmFtZXMgaW5zdGVhZCBvZiBpbnRlZ2VycyBmb3IgdGhl IGZsYWdzLCBhcyB0aGV5J3JlCisJcG9ydGFibGUgbm93LgorCShjaGVja193cml0YWJsZSk6 IFNldCBlcnJubyBvbiBmYWlsdXJlLgorCShGZmlsZV9yZWFkYWJsZV9wKTogVXNlIGZhY2Nl c3NhdCwgbm90IHN0YXQgKyBvcGVuICsgY2xvc2UuCisJKEZmaWxlX3dyaXRhYmxlX3ApOiBO byBuZWVkIHRvIGNhbGwgY2hlY2tfZXhpc3RpbmcgKyBjaGVja193cml0YWJsZS4KKwlKdXN0 IGNhbGwgY2hlY2tfd3JpdGFibGUgYW5kIHRoZW4gbG9vayBhdCBlcnJuby4gIFRoaXMgc2F2 ZXMgYSBzeXNjYWxsLgorCWRpciBzaG91bGQgbmV2ZXIgYmUgbmlsOyByZXBsYWNlIGFuIHVu bmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sKKwl3aXRoIGFuIGVhc3NlcnQuICBXaGVuIGNoZWNr aW5nIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIGEgbm9uZXhpc3RlbnQKKwlmaWxlLCBjaGVj ayB0aGF0IHRoZSBkaXJlY3RvcnkgaXMgc2VhcmNoYWJsZSBhcyB3ZWxsIGFzIHdyaXRhYmxl LCBhcworCXdlIGNhbid0IGNyZWF0ZSBmaWxlcyBpbiB1bnNlYXJjaGFibGUgZGlyZWN0b3Jp ZXMuCisJKGZpbGVfZGlyZWN0b3J5X3ApOiBOZXcgZnVuY3Rpb24sIHdoaWNoIHVzZXMgJ3N0 YXQnIG9uIG1vc3QgcGxhdGZvcm1zCisJYnV0IGZhY2Nlc3NhdCB3aXRoIERfT0sgKGZvciBl ZmZpY2llbmN5KSBpZiBXSU5ET1dTTlQuCisJKEZmaWxlX2RpcmVjdG9yeV9wLCBGc2V0X2Zp bGVfdGltZXMpOiBVc2UgaXQuCisJKGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCk6IE5l dyBmdW5jdGlvbiwgd2hpY2ggdXNlcyBhIHNpbmdsZQorCXN5c2NhbGwgZm9yIGVmZmljaWVu Y3kuCisJKEZmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3ApOiBVc2UgaXQuCisJKiB4cmRi LmMgKGZpbGVfcCk6IFVzZSBmaWxlX2RpcmVjdG9yeV9wLgorCSogbGlzcC5oIChmaWxlX2Rp cmVjdG9yeV9wLCBmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3ApOiBOZXcgZGVjbHMuCisJ KiBscmVhZC5jIChvcGVucCk6IFdoZW4gb3BlbmluZyBhIGZpbGUsIHVzZSBmc3RhdCByYXRo ZXIgdGhhbgorCXN0YXQsIGFzIHRoYXQgYXZvaWRzIGEgcGVybWlzc2lvbnMgcmFjZS4gIFdo ZW4gbm90IG9wZW5pbmcgYSBmaWxlLAorCXVzZSBmaWxlX2RpcmVjdG9yeV9wIHJhdGhlciB0 aGFuIHN0YXQuCisJKGRpcl93YXJuaW5nKTogRmlyc3QgYXJnIGlzIG5vdyBhIHVzYWdlIHN0 cmluZywgbm90IGEgZm9ybWF0LgorCVVzZSBlcnJuby4gIEFsbCB1c2VzIGNoYW5nZWQuCisJ KiBuc3Rlcm0ubSAobnNfdGVybV9pbml0KTogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8g ZmlsZS1yZWFkYWJsZQorCXRoYXQgbWVyZWx5IGludHJvZHVjZWQgYSByYWNlLgorCSogcHJv Y2Vzcy5jLCBzeXNkZXAuYywgdGVybS5jOiBBbGwgdXNlcyBvZiAnI2lmZGVmIE9fTk9OQkxP Q0snCisJY2hhbmdlZCB0byAnI2lmIE9fTk9OQkxPQ0snLCB0byBhY2NvbW1vZGF0ZSBnbnVs aWIgT18qIHN0eWxlLAorCWFuZCBzaW1pbGFybHkgZm9yIHRoZSBvdGhlciBPXyogZmxhZ3Mu CisJKiB3MzIuYyAoc3lzX2ZhY2Nlc3NhdCk6IFJlbmFtZSBmcm9tIHN5c19hY2Nlc3MgYW5k IHN3aXRjaCB0bworCWZhY2Nlc3NhdCdzIEFQSS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiB4 cmRiLmM6IERvIG5vdCBpbmNsdWRlIDxzeXMvc3RhdC5oPjsgbm8gbG9uZ2VyIG5lZWRlZC4K KwkobWFnaWNfZGIpOiBSZW5hbWUgZnJvbSBtYWdpY19maWxlX3AuCisJKG1hZ2ljX2RiLCBz ZWFyY2hfbWFnaWNfcGF0aCk6IFJldHVybiBhbiBYcm1EYXRhYmFzZSByYXRoZXIgdGhhbiBh CisJY2hhciAqLCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gdGVzdCBmb3IgZmlsZSBleGlz dGVuY2UKKwlzZXBhcmF0ZWx5IGZyb20gb3BlbmluZyB0aGUgZmlsZSBmb3IgcmVhZGluZy4g IFRoaXMgcmVtb3ZlcyBhIHJhY2UKKwlmaXhlcyBhIHBlcm1pc3Npb24tY2hlY2tpbmcgcHJv YmxlbSwgYW5kIHNpbXBsaWZpZXMgdGhlIGNvZGUuCisJQWxsIHVzZXMgY2hhbmdlZC4KKwko ZmlsZV9wKTogUmVtb3ZlOyBubyBsb25nZXIgbmVlZGVkLgorCiAyMDEyLTEwLTIxICBKYW4g RGrDpHJ2ICA8amFuLmguZEBzd2lwbmV0LnNlPgogCiAJKiBuc2ZvbnQubSAobnNmb250X29w ZW4sIG5zX2dseXBoX21ldHJpY3MpOiBGb3JjZSBpbnRlZ2VyIGFkdmFuY2VtZW50Cgo9PT0g bW9kaWZpZWQgZmlsZSAnc3JjL01ha2VmaWxlLmluJwotLS0gc3JjL01ha2VmaWxlLmluCTIw MTItMTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIHNyYy9NYWtlZmlsZS5pbgkyMDEyLTEwLTIw IDAxOjEzOjM1ICswMDAwCkBAIC0xNTAsNiArMTUwLDcgQEAKIE0xN05fRkxUX0xJQlMgPSBA TTE3Tl9GTFRfTElCU0AKIAogTElCX0NMT0NLX0dFVFRJTUU9QExJQl9DTE9DS19HRVRUSU1F QAorTElCX0VBQ0NFU1M9QExJQl9FQUNDRVNTQAogTElCX1RJTUVSX1RJTUU9QExJQl9USU1F Ul9USU1FQAogCiBEQlVTX0NGTEFHUyA9IEBEQlVTX0NGTEFHU0AKQEAgLTM5Miw3ICszOTMs NyBAQAogTElCRVMgPSAkKExJQlMpICQoVzMyX0xJQlMpICQoTElCWF9CQVNFKSAkKExJQklN QUdFKSBcCiAgICAkKExJQlhfT1RIRVIpICQoTElCU09VTkQpIFwKICAgICQoUlNWR19MSUJT KSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0NMT0NLX0dFVFRJTUUpIFwKLSAgICQoTElC X1RJTUVSX1RJTUUpICQoREJVU19MSUJTKSBcCisgICAkKExJQl9FQUNDRVNTKSAkKExJQl9U SU1FUl9USU1FKSAkKERCVVNfTElCUykgXAogICAgJChMSUJfRVhFQ0lORk8pIFwKICAgICQo TElCWE1MMl9MSUJTKSAkKExJQkdQTSkgJChMSUJSRVNPTFYpICQoTElCU19TWVNURU0pIFwK ICAgICQoTElCU19URVJNQ0FQKSAkKEdFVExPQURBVkdfTElCUykgJChTRVRUSU5HU19MSUJT KSAkKExJQlNFTElOVVhfTElCUykgXAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jYWxscHJv Yy5jJwotLS0gc3JjL2NhbGxwcm9jLmMJMjAxMi0xMC0xOSAxOToyNToxOCArMDAwMAorKysg c3JjL2NhbGxwcm9jLmMJMjAxMi0xMC0yMiAwMjozNjoxNyArMDAwMApAQCAtMTU5NywxNSAr MTU5NywxMyBAQAogI2VuZGlmCiAgICAgewogICAgICAgdGVtcGRpciA9IEZkaXJlY3Rvcnlf ZmlsZV9uYW1lIChWZXhlY19kaXJlY3RvcnkpOwotICAgICAgaWYgKGFjY2VzcyAoU1NEQVRB ICh0ZW1wZGlyKSwgMCkgPCAwKQotCWRpcl93YXJuaW5nICgiV2FybmluZzogYXJjaC1kZXBl bmRlbnQgZGF0YSBkaXIgKCVzKSBkb2VzIG5vdCBleGlzdC5cbiIsCi0JCSAgICAgVmV4ZWNf ZGlyZWN0b3J5KTsKKyAgICAgIGlmICghIGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAo U1NEQVRBICh0ZW1wZGlyKSkpCisJZGlyX3dhcm5pbmcgKCJhcmNoLWRlcGVuZGVudCBkYXRh IGRpciIsIFZleGVjX2RpcmVjdG9yeSk7CiAgICAgfQogCiAgIHRlbXBkaXIgPSBGZGlyZWN0 b3J5X2ZpbGVfbmFtZSAoVmRhdGFfZGlyZWN0b3J5KTsKLSAgaWYgKGFjY2VzcyAoU1NEQVRB ICh0ZW1wZGlyKSwgMCkgPCAwKQotICAgIGRpcl93YXJuaW5nICgiV2FybmluZzogYXJjaC1p bmRlcGVuZGVudCBkYXRhIGRpciAoJXMpIGRvZXMgbm90IGV4aXN0LlxuIiwKLQkJIFZkYXRh X2RpcmVjdG9yeSk7CisgIGlmICghIGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAoU1NE QVRBICh0ZW1wZGlyKSkpCisgICAgZGlyX3dhcm5pbmcgKCJhcmNoLWluZGVwZW5kZW50IGRh dGEgZGlyIiwgVmRhdGFfZGlyZWN0b3J5KTsKIAogICBzaCA9IChjaGFyICopIGdldGVudiAo IlNIRUxMIik7CiAgIFZzaGVsbF9maWxlX25hbWUgPSBidWlsZF9zdHJpbmcgKHNoID8gc2gg OiAiL2Jpbi9zaCIpOwpAQCAtMTYxNCw3ICsxNjEyLDcgQEAKICAgVnNoYXJlZF9nYW1lX3Nj b3JlX2RpcmVjdG9yeSA9IFFuaWw7CiAjZWxzZQogICBWc2hhcmVkX2dhbWVfc2NvcmVfZGly ZWN0b3J5ID0gYnVpbGRfc3RyaW5nIChQQVRIX0dBTUUpOwotICBpZiAoTklMUCAoRmZpbGVf ZGlyZWN0b3J5X3AgKFZzaGFyZWRfZ2FtZV9zY29yZV9kaXJlY3RvcnkpKSkKKyAgaWYgKE5J TFAgKEZmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AgKFZzaGFyZWRfZ2FtZV9zY29yZV9k aXJlY3RvcnkpKSkKICAgICBWc2hhcmVkX2dhbWVfc2NvcmVfZGlyZWN0b3J5ID0gUW5pbDsK ICNlbmRpZgogfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyc2V0LmMnCi0tLSBzcmMv Y2hhcnNldC5jCTIwMTItMTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIHNyYy9jaGFyc2V0LmMJ MjAxMi0xMC0yMiAwNDo1MzozMiArMDAwMApAQCAtMjI5Myw3ICsyMjkzLDcgQEAKIHsKICAg TGlzcF9PYmplY3QgdGVtcGRpcjsKICAgdGVtcGRpciA9IEZleHBhbmRfZmlsZV9uYW1lIChi dWlsZF9zdHJpbmcgKCJjaGFyc2V0cyIpLCBWZGF0YV9kaXJlY3RvcnkpOwotICBpZiAoYWNj ZXNzIChTU0RBVEEgKHRlbXBkaXIpLCAwKSA8IDApCisgIGlmICghIGZpbGVfYWNjZXNzaWJs ZV9kaXJlY3RvcnlfcCAoU1NEQVRBICh0ZW1wZGlyKSkpCiAgICAgewogICAgICAgLyogVGhp cyB1c2VkIHRvIGJlIG5vbi1mYXRhbCAoZGlyX3dhcm5pbmcpLCBidXQgaXQgc2hvdWxkIG5v dAogICAgICAgICAgaGFwcGVuLCBhbmQgaWYgaXQgZG9lcyBzb29uZXIgb3IgbGF0ZXIgaXQg d2lsbCBjYXVzZSBzb21lCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvbmZfcG9zdC5oJwot LS0gc3JjL2NvbmZfcG9zdC5oCTIwMTItMTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIHNyYy9j b25mX3Bvc3QuaAkyMDEyLTEwLTIwIDAxOjEzOjM1ICswMDAwCkBAIC0xNjksNiArMTY5LDEw IEBACiAjZW5kaWYKICNlbmRpZgogCisvKiBUZWxsIGdudWxpYiB0byBvbWl0IHN1cHBvcnQg Zm9yIG9wZW5hdC1yZWxhdGVkIGZ1bmN0aW9ucyBoYXZpbmcgYQorICAgZmlyc3QgYXJndW1l bnQgb3RoZXIgdGhhbiBBVF9GRENXRC4gICovCisjZGVmaW5lIEdOVUxJQl9TVVBQT1JUX09O TFlfQVRfRkRDV0QKKwogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5o PgogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVpby5jJwotLS0gc3JjL2ZpbGVpby5j CTIwMTItMTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIHNyYy9maWxlaW8uYwkyMDEyLTEwLTIy IDAyOjM2OjE3ICswMDAwCkBAIC0yNDI1LDE1ICsyNDI1LDcgQEAKIGJvb2wKIGNoZWNrX2V4 aXN0aW5nIChjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSNpZmRlZiBET1NfTlQKLSAgLyog VGhlIGZ1bGwgZW11bGF0aW9uIG9mIFBvc2l4ICdzdGF0JyBpcyB0b28gZXhwZW5zaXZlIG9u Ci0gICAgIERPUy9XaW5kb3dzLCB3aGVuIGFsbCB3ZSB3YW50IHRvIGtub3cgaXMgd2hldGhl ciB0aGUgZmlsZSBleGlzdHMuCi0gICAgIFNvIHdlIHVzZSAnYWNjZXNzJyBpbnN0ZWFkLCB3 aGljaCBpcyBtdWNoIG1vcmUgbGlnaHR3ZWlnaHQuICAqLwotICByZXR1cm4gKGFjY2VzcyAo ZmlsZW5hbWUsIEZfT0spID49IDApOwotI2Vsc2UKLSAgc3RydWN0IHN0YXQgc3Q7Ci0gIHJl dHVybiAoc3RhdCAoZmlsZW5hbWUsICZzdCkgPj0gMCk7Ci0jZW5kaWYKKyAgcmV0dXJuIGZh Y2Nlc3NhdCAoQVRfRkRDV0QsIGZpbGVuYW1lLCBGX09LLCBBVF9FQUNDRVNTKSA9PSAwOwog fQogCiAvKiBSZXR1cm4gdHJ1ZSBpZiBmaWxlIEZJTEVOQU1FIGV4aXN0cyBhbmQgY2FuIGJl IGV4ZWN1dGVkLiAgKi8KQEAgLTI0NDEsNTYgKzI0MzMsNDAgQEAKIHN0YXRpYyBib29sCiBj aGVja19leGVjdXRhYmxlIChjaGFyICpmaWxlbmFtZSkKIHsKLSNpZmRlZiBET1NfTlQKLSAg c3RydWN0IHN0YXQgc3Q7Ci0gIGlmIChzdGF0IChmaWxlbmFtZSwgJnN0KSA8IDApCi0gICAg cmV0dXJuIDA7Ci0gIHJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lFWEVDKSAhPSAwKTsKLSNl bHNlIC8qIG5vdCBET1NfTlQgKi8KLSNpZmRlZiBIQVZFX0VVSURBQ0NFU1MKLSAgcmV0dXJu IChldWlkYWNjZXNzIChmaWxlbmFtZSwgMSkgPj0gMCk7Ci0jZWxzZQotICAvKiBBY2Nlc3Mg aXNuJ3QgcXVpdGUgcmlnaHQgYmVjYXVzZSBpdCB1c2VzIHRoZSByZWFsIHVpZAotICAgICBh bmQgd2UgcmVhbGx5IHdhbnQgdG8gdGVzdCB3aXRoIHRoZSBlZmZlY3RpdmUgdWlkLgotICAg ICBCdXQgVW5peCBkb2Vzbid0IGdpdmUgdXMgYSByaWdodCB3YXkgdG8gZG8gaXQuICAqLwot ICByZXR1cm4gKGFjY2VzcyAoZmlsZW5hbWUsIDEpID49IDApOwotI2VuZGlmCi0jZW5kaWYg Lyogbm90IERPU19OVCAqLworICByZXR1cm4gZmFjY2Vzc2F0IChBVF9GRENXRCwgZmlsZW5h bWUsIFhfT0ssIEFUX0VBQ0NFU1MpID09IDA7CiB9CiAKLS8qIFJldHVybiB0cnVlIGlmIGZp bGUgRklMRU5BTUUgZXhpc3RzIGFuZCBjYW4gYmUgd3JpdHRlbi4gICovCisvKiBSZXR1cm4g dHJ1ZSBpZiBmaWxlIEZJTEVOQU1FIGV4aXN0cyBhbmQgY2FuIGJlIGFjY2Vzc2VkCisgICBh Y2NvcmRpbmcgdG8gQU1PREUsIHdoaWNoIHNob3VsZCBpbmNsdWRlIFdfT0suCisgICBPbiBm YWlsdXJlLCByZXR1cm4gZmFsc2UgYW5kIHNldCBlcnJuby4gICovCiAKIHN0YXRpYyBib29s Ci1jaGVja193cml0YWJsZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpCitjaGVja193cml0YWJs ZSAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBhbW9kZSkKIHsKICNpZmRlZiBNU0RPUwor ICAvKiBGSVhNRTogYW4gZmFjY2Vzc2F0IGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBhZGRl ZCB0byB0aGUKKyAgICAgRE9TL1dpbmRvd3MgcG9ydHMgYW5kIHRoaXMgI2lmZGVmIGJyYW5j aCBzaG91bGQgYmUgcmVtb3ZlZC4gICovCiAgIHN0cnVjdCBzdGF0IHN0OwogICBpZiAoc3Rh dCAoZmlsZW5hbWUsICZzdCkgPCAwKQogICAgIHJldHVybiAwOworICBlcnJubyA9IEVQRVJN OwogICByZXR1cm4gKHN0LnN0X21vZGUgJiBTX0lXUklURSB8fCBTX0lTRElSIChzdC5zdF9t b2RlKSk7CiAjZWxzZSAvKiBub3QgTVNET1MgKi8KLSNpZmRlZiBIQVZFX0VVSURBQ0NFU1MK LSAgYm9vbCByZXMgPSAoZXVpZGFjY2VzcyAoZmlsZW5hbWUsIDIpID49IDApOworICBib29s IHJlcyA9IGZhY2Nlc3NhdCAoQVRfRkRDV0QsIGZpbGVuYW1lLCBhbW9kZSwgQVRfRUFDQ0VT UykgPT0gMDsKICNpZmRlZiBDWUdXSU4KLSAgLyogZXVpZGFjY2VzcyBtYXkgaGF2ZSByZXR1 cm5lZCBmYWlsdXJlIGJlY2F1c2UgQ3lnd2luIGNvdWxkbid0CisgIC8qIGZhY2Nlc3NhdCBt YXkgaGF2ZSByZXR1cm5lZCBmYWlsdXJlIGJlY2F1c2UgQ3lnd2luIGNvdWxkbid0CiAgICAg IGRldGVybWluZSB0aGUgZmlsZSdzIFVJRCBvciBHSUQ7IGlmIHNvLCB3ZSByZXR1cm4gc3Vj Y2Vzcy4gKi8KICAgaWYgKCFyZXMpCiAgICAgeworICAgICAgaW50IGZhY2Nlc3NhdF9lcnJu byA9IGVycm5vOwogICAgICAgc3RydWN0IHN0YXQgc3Q7CiAgICAgICBpZiAoc3RhdCAoZmls ZW5hbWUsICZzdCkgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICAgIHJlcyA9IChzdC5z dF91aWQgPT0gLTEgfHwgc3Quc3RfZ2lkID09IC0xKTsKKyAgICAgIGVycm5vID0gZmFjY2Vz c2F0X2Vycm5vOwogICAgIH0KICNlbmRpZiAvKiBDWUdXSU4gKi8KICAgcmV0dXJuIHJlczsK LSNlbHNlIC8qIG5vdCBIQVZFX0VVSURBQ0NFU1MgKi8KLSAgLyogQWNjZXNzIGlzbid0IHF1 aXRlIHJpZ2h0IGJlY2F1c2UgaXQgdXNlcyB0aGUgcmVhbCB1aWQKLSAgICAgYW5kIHdlIHJl YWxseSB3YW50IHRvIHRlc3Qgd2l0aCB0aGUgZWZmZWN0aXZlIHVpZC4KLSAgICAgQnV0IFVu aXggZG9lc24ndCBnaXZlIHVzIGEgcmlnaHQgd2F5IHRvIGRvIGl0LgotICAgICBPcGVuaW5n IHdpdGggT19XUk9OTFkgY291bGQgd29yayBmb3IgYW4gb3JkaW5hcnkgZmlsZSwKLSAgICAg YnV0IHdvdWxkIGxvc2UgZm9yIGRpcmVjdG9yaWVzLiAgKi8KLSAgcmV0dXJuIChhY2Nlc3Mg KGZpbGVuYW1lLCAyKSA+PSAwKTsKLSNlbmRpZiAvKiBub3QgSEFWRV9FVUlEQUNDRVNTICov CiAjZW5kaWYgLyogbm90IE1TRE9TICovCiB9CiAKQEAgLTI1NDcsOSArMjUyMyw2IEBACiB7 CiAgIExpc3BfT2JqZWN0IGFic25hbWU7CiAgIExpc3BfT2JqZWN0IGhhbmRsZXI7Ci0gIGlu dCBkZXNjOwotICBpbnQgZmxhZ3M7Ci0gIHN0cnVjdCBzdGF0IHN0YXRidWY7CiAKICAgQ0hF Q0tfU1RSSU5HIChmaWxlbmFtZSk7CiAgIGFic25hbWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAo ZmlsZW5hbWUsIFFuaWwpOwpAQCAtMjU2MSwzNSArMjUzNCwxMCBAQAogICAgIHJldHVybiBj YWxsMiAoaGFuZGxlciwgUWZpbGVfcmVhZGFibGVfcCwgYWJzbmFtZSk7CiAKICAgYWJzbmFt ZSA9IEVOQ09ERV9GSUxFIChhYnNuYW1lKTsKLQotI2lmIGRlZmluZWQgKERPU19OVCkgfHwg ZGVmaW5lZCAobWFjaW50b3NoKQotICAvKiBVbmRlciBNUy1ET1MsIFdpbmRvd3MsIGFuZCBN YWNpbnRvc2gsIG9wZW4gZG9lcyBub3Qgd29yayBmb3IKLSAgICAgZGlyZWN0b3JpZXMuICAq LwotICBpZiAoYWNjZXNzIChTREFUQSAoYWJzbmFtZSksIDApID09IDApCi0gICAgcmV0dXJu IFF0OwotICByZXR1cm4gUW5pbDsKLSNlbHNlIC8qIG5vdCBET1NfTlQgYW5kIG5vdCBtYWNp bnRvc2ggKi8KLSAgZmxhZ3MgPSBPX1JET05MWTsKLSNpZmRlZiBPX05PTkJMT0NLCi0gIC8q IE9wZW5pbmcgYSBmaWZvIHdpdGhvdXQgT19OT05CTE9DSyBjYW4gd2FpdC4KLSAgICAgV2Ug ZG9uJ3Qgd2FudCB0byB3YWl0LiAgQnV0IHdlIGRvbid0IHdhbnQgdG8gbWVzcyB3dGggT19O T05CTE9DSwotICAgICBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYSBmaWZvLCBvbiBhIHN5c3Rl bSB3aGljaCBoYW5kbGVzIGl0LiAgKi8KLSAgZGVzYyA9IHN0YXQgKFNTREFUQSAoYWJzbmFt ZSksICZzdGF0YnVmKTsKLSAgaWYgKGRlc2MgPCAwKQotICAgIHJldHVybiBRbmlsOwotICBp ZiAoU19JU0ZJRk8gKHN0YXRidWYuc3RfbW9kZSkpCi0gICAgZmxhZ3MgfD0gT19OT05CTE9D SzsKLSNlbmRpZgotICBkZXNjID0gZW1hY3Nfb3BlbiAoU1NEQVRBIChhYnNuYW1lKSwgZmxh Z3MsIDApOwotICBpZiAoZGVzYyA8IDApCi0gICAgcmV0dXJuIFFuaWw7Ci0gIGVtYWNzX2Ns b3NlIChkZXNjKTsKLSAgcmV0dXJuIFF0OwotI2VuZGlmIC8qIG5vdCBET1NfTlQgYW5kIG5v dCBtYWNpbnRvc2ggKi8KKyAgcmV0dXJuIChmYWNjZXNzYXQgKEFUX0ZEQ1dELCBTU0RBVEEg KGFic25hbWUpLCBSX09LLCBBVF9FQUNDRVNTKSA9PSAwCisJICA/IFF0IDogUW5pbCk7CiB9 CiAKLS8qIEhhdmluZyB0aGlzIGJlZm9yZSBmaWxlLXN5bWxpbmstcCBteXN0ZXJpb3VzbHkg Y2F1c2VkIGl0IHRvIGJlIGZvcmdvdHRlbgotICAgb24gdGhlIFJUL1BDLiAgKi8KIERFRlVO ICgiZmlsZS13cml0YWJsZS1wIiwgRmZpbGVfd3JpdGFibGVfcCwgU2ZpbGVfd3JpdGFibGVf cCwgMSwgMSwgMCwKICAgICAgICBkb2M6IC8qIFJldHVybiB0IGlmIGZpbGUgRklMRU5BTUUg Y2FuIGJlIHdyaXR0ZW4gb3IgY3JlYXRlZCBieSB5b3UuICAqLykKICAgKExpc3BfT2JqZWN0 IGZpbGVuYW1lKQpAQCAtMjYwNywxNCArMjU1NSwxNSBAQAogICAgIHJldHVybiBjYWxsMiAo aGFuZGxlciwgUWZpbGVfd3JpdGFibGVfcCwgYWJzbmFtZSk7CiAKICAgZW5jb2RlZCA9IEVO Q09ERV9GSUxFIChhYnNuYW1lKTsKLSAgaWYgKGNoZWNrX2V4aXN0aW5nIChTU0RBVEEgKGVu Y29kZWQpKSkKLSAgICByZXR1cm4gKGNoZWNrX3dyaXRhYmxlIChTU0RBVEEgKGVuY29kZWQp KQotCSAgICA/IFF0IDogUW5pbCk7CisgIGlmIChjaGVja193cml0YWJsZSAoU1NEQVRBIChl bmNvZGVkKSwgV19PSykpCisgICAgcmV0dXJuIFF0OworICBpZiAoZXJybm8gIT0gRU5PRU5U KQorICAgIHJldHVybiBRbmlsOwogCiAgIGRpciA9IEZmaWxlX25hbWVfZGlyZWN0b3J5IChh YnNuYW1lKTsKKyAgZWFzc2VydCAoIU5JTFAgKGRpcikpOwogI2lmZGVmIE1TRE9TCi0gIGlm ICghTklMUCAoZGlyKSkKLSAgICBkaXIgPSBGZGlyZWN0b3J5X2ZpbGVfbmFtZSAoZGlyKTsK KyAgZGlyID0gRmRpcmVjdG9yeV9maWxlX25hbWUgKGRpcik7CiAjZW5kaWYgLyogTVNET1Mg Ki8KIAogICBkaXIgPSBFTkNPREVfRklMRSAoZGlyKTsKQEAgLTI2MjIsMTAgKzI1NzEsOSBA QAogICAvKiBUaGUgcmVhZC1vbmx5IGF0dHJpYnV0ZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9y eSBkb2Vzbid0IGFmZmVjdAogICAgICB3aGV0aGVyIGEgZmlsZSBvciBkaXJlY3RvcnkgY2Fu IGJlIGNyZWF0ZWQgd2l0aGluIGl0LiAgU29tZSBkYXkgd2UKICAgICAgc2hvdWxkIGNoZWNr IEFDTHMgdGhvdWdoLCB3aGljaCBkbyBhZmZlY3QgdGhpcy4gICovCi0gIHJldHVybiAoYWNj ZXNzIChTREFUQSAoZGlyKSwgRF9PSykgPCAwKSA/IFFuaWwgOiBRdDsKKyAgcmV0dXJuIGZp bGVfZGlyZWN0b3J5X3AgKFNEQVRBIChkaXIpKSA/IFF0IDogUW5pbDsKICNlbHNlCi0gIHJl dHVybiAoY2hlY2tfd3JpdGFibGUgKCFOSUxQIChkaXIpID8gU1NEQVRBIChkaXIpIDogIiIp Ci0JICA/IFF0IDogUW5pbCk7CisgIHJldHVybiBjaGVja193cml0YWJsZSAoU1NEQVRBIChk aXIpLCBXX09LIHwgWF9PSykgPyBRdCA6IFFuaWw7CiAjZW5kaWYKIH0KIAwKQEAgLTI3MDMs OCArMjY1MSw3IEBACiBTZWUgYGZpbGUtc3ltbGluay1wJyB0byBkaXN0aW5ndWlzaCBzeW1s aW5rcy4gICovKQogICAoTGlzcF9PYmplY3QgZmlsZW5hbWUpCiB7Ci0gIHJlZ2lzdGVyIExp c3BfT2JqZWN0IGFic25hbWU7Ci0gIHN0cnVjdCBzdGF0IHN0OworICBMaXNwX09iamVjdCBh YnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwogCiAgIGFic25hbWUgPSBleHBhbmRf YW5kX2Rpcl90b19maWxlIChmaWxlbmFtZSwgQlZBUiAoY3VycmVudF9idWZmZXIsIGRpcmVj dG9yeSkpOwpAQCAtMjcxNyw5ICsyNjY0LDIwIEBACiAKICAgYWJzbmFtZSA9IEVOQ09ERV9G SUxFIChhYnNuYW1lKTsKIAotICBpZiAoc3RhdCAoU1NEQVRBIChhYnNuYW1lKSwgJnN0KSA8 IDApCi0gICAgcmV0dXJuIFFuaWw7Ci0gIHJldHVybiBTX0lTRElSIChzdC5zdF9tb2RlKSA/ IFF0IDogUW5pbDsKKyAgcmV0dXJuIGZpbGVfZGlyZWN0b3J5X3AgKFNTREFUQSAoYWJzbmFt ZSkpID8gUXQgOiBRbmlsOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBGSUxFIGlzIGEgZGly ZWN0b3J5IG9yIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeS4gICovCitib29sCitmaWxlX2Rp cmVjdG9yeV9wIChjaGFyIGNvbnN0ICpmaWxlKQoreworI2lmZGVmIFdJTkRPV1NOVAorICAv KiBUaGlzIGlzIGNoZWFwZXIgdGhhbiAnc3RhdCcuICAqLworICByZXR1cm4gZmFjY2Vzc2F0 IChBVF9GRENXRCwgZmlsZSwgRF9PSywgQVRfRUFDQ0VTUykgPT0gMDsKKyNlbHNlCisgIHN0 cnVjdCBzdGF0IHN0OworICByZXR1cm4gc3RhdCAoZmlsZSwgJnN0KSA9PSAwICYmIFNfSVNE SVIgKHN0LnN0X21vZGUpOworI2VuZGlmCiB9CiAKIERFRlVOICgiZmlsZS1hY2Nlc3NpYmxl LWRpcmVjdG9yeS1wIiwgRmZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCwKQEAgLTI3MzMs MjEgKzI2OTEsNDkgQEAKIHNlYXJjaGFibGUgZGlyZWN0b3J5LiAgKi8pCiAgIChMaXNwX09i amVjdCBmaWxlbmFtZSkKIHsKKyAgTGlzcF9PYmplY3QgYWJzbmFtZTsKICAgTGlzcF9PYmpl Y3QgaGFuZGxlcjsKLSAgYm9vbCB0ZW07Ci0gIHN0cnVjdCBnY3BybyBnY3BybzE7CisKKyAg Q0hFQ0tfU1RSSU5HIChmaWxlbmFtZSk7CisgIGFic25hbWUgPSBGZXhwYW5kX2ZpbGVfbmFt ZSAoZmlsZW5hbWUsIFFuaWwpOwogCiAgIC8qIElmIHRoZSBmaWxlIG5hbWUgaGFzIHNwZWNp YWwgY29uc3RydWN0cyBpbiBpdCwKICAgICAgY2FsbCB0aGUgY29ycmVzcG9uZGluZyBmaWxl IGhhbmRsZXIuICAqLwotICBoYW5kbGVyID0gRmZpbmRfZmlsZV9uYW1lX2hhbmRsZXIgKGZp bGVuYW1lLCBRZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9wKTsKKyAgaGFuZGxlciA9IEZm aW5kX2ZpbGVfbmFtZV9oYW5kbGVyIChhYnNuYW1lLCBRZmlsZV9hY2Nlc3NpYmxlX2RpcmVj dG9yeV9wKTsKICAgaWYgKCFOSUxQIChoYW5kbGVyKSkKLSAgICByZXR1cm4gY2FsbDIgKGhh bmRsZXIsIFFmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AsIGZpbGVuYW1lKTsKLQotICBH Q1BSTzEgKGZpbGVuYW1lKTsKLSAgdGVtID0gKE5JTFAgKEZmaWxlX2RpcmVjdG9yeV9wIChm aWxlbmFtZSkpCi0JIHx8IE5JTFAgKEZmaWxlX2V4ZWN1dGFibGVfcCAoZmlsZW5hbWUpKSk7 Ci0gIFVOR0NQUk87Ci0gIHJldHVybiB0ZW0gPyBRbmlsIDogUXQ7CisgICAgcmV0dXJuIGNh bGwyIChoYW5kbGVyLCBRZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9wLCBhYnNuYW1lKTsK KworICBhYnNuYW1lID0gRU5DT0RFX0ZJTEUgKGFic25hbWUpOworICByZXR1cm4gZmlsZV9h Y2Nlc3NpYmxlX2RpcmVjdG9yeV9wIChTU0RBVEEgKGFic25hbWUpKSA/IFF0IDogUW5pbDsK K30KKworLyogSWYgRklMRSBpcyBhIHNlYXJjaGFibGUgZGlyZWN0b3J5IG9yIGEgc3ltbGlu ayB0byBhCisgICBzZWFyY2hhYmxlIGRpcmVjdG9yeSwgcmV0dXJuIHRydWUuICBPdGhlcndp c2UgcmV0dXJuCisgICBmYWxzZSBhbmQgc2V0IGVycm5vIHRvIGFuIGVycm9yIG51bWJlci4g ICovCitib29sCitmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AgKGNoYXIgY29uc3QgKmZp bGUpCit7CisgIHB0cmRpZmZfdCBsZW4gPSBzdHJsZW4gKGZpbGUpOworICBib29sIG9rOwor ICBpbnQgZmFjY2Vzc2F0X2Vycm5vOworICBVU0VfU0FGRV9BTExPQ0E7CisKKyAgLyogTm9y bWFsbHkgYSBmaWxlIEYgaXMgYW4gYWNjZXNzaWJsZSBkaXJlY3RvcnkgaWYgRi8uIGlzIGFj Y2Vzc2libGUuCisgICAgIEJ1dCBvbWl0IHRoZSAiLy4iIGlmIEYgaXMgZW1wdHksIGFzICIi IGlzIG5vdCAiLy4iOyBhbmQgb21pdCB0aGUKKyAgICAgIi8iIGlmIEYgZW5kcyBpbiAiLyIs IGFzIG9uIHNvbWUgcGxhdGZvcm1zICIvIiAhPSAiLy8iLiAgKi8KKyAgaWYgKGxlbikKKyAg ICB7CisgICAgICBjaGFyICpidWYgPSBTQUZFX0FMTE9DQSAobGVuICsgMyk7CisgICAgICBt ZW1jcHkgKGJ1ZiwgZmlsZSwgbGVuKTsKKyAgICAgIHN0cmNweSAoYnVmICsgbGVuLCAiLy4i ICsgKGZpbGVbbGVuIC0gMV0gPT0gJy8nKSk7CisgICAgICBmaWxlID0gYnVmOworICAgIH0K KworICBvayA9IGZhY2Nlc3NhdCAoQVRfRkRDV0QsIGZpbGUsIEZfT0ssIEFUX0VBQ0NFU1Mp ID09IDA7CisgIGZhY2Nlc3NhdF9lcnJubyA9IGVycm5vOworICBTQUZFX0ZSRUUgKCk7Cisg IGVycm5vID0gZmFjY2Vzc2F0X2Vycm5vOworICByZXR1cm4gb2s7CiB9CiAKIERFRlVOICgi ZmlsZS1yZWd1bGFyLXAiLCBGZmlsZV9yZWd1bGFyX3AsIFNmaWxlX3JlZ3VsYXJfcCwgMSwg MSwgMCwKQEAgLTMwNDQsMTAgKzMwMzAsOCBAQAogICAgIGlmIChzZXRfZmlsZV90aW1lcyAo LTEsIFNTREFUQSAoZW5jb2RlZF9hYnNuYW1lKSwgdCwgdCkpCiAgICAgICB7CiAjaWZkZWYg TVNET1MKLSAgICAgICAgc3RydWN0IHN0YXQgc3Q7Ci0KICAgICAgICAgLyogU2V0dGluZyB0 aW1lcyBvbiBhIGRpcmVjdG9yeSBhbHdheXMgZmFpbHMuICAqLwotICAgICAgICBpZiAoc3Rh dCAoU1NEQVRBIChlbmNvZGVkX2Fic25hbWUpLCAmc3QpID09IDAgJiYgU19JU0RJUiAoc3Qu c3RfbW9kZSkpCisgICAgICAgIGlmIChmaWxlX2RpcmVjdG9yeV9wIChTU0RBVEEgKGVuY29k ZWRfYWJzbmFtZSkpKQogICAgICAgICAgIHJldHVybiBRbmlsOwogI2VuZGlmCiAgICAgICAg IHJlcG9ydF9maWxlX2Vycm9yICgiU2V0dGluZyBmaWxlIHRpbWVzIiwgRmNvbnMgKGFic25h bWUsIFFuaWwpKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwotLS0gc3JjL2xp c3AuaAkyMDEyLTEwLTIxIDA3OjIzOjM0ICswMDAwCisrKyBzcmMvbGlzcC5oCTIwMTItMTAt MjIgMDI6NDM6MTYgKzAwMDAKQEAgLTMyMjcsNiArMzIyNyw4IEBACiBleHRlcm4gTGlzcF9P YmplY3QgcmVzdG9yZV9wb2ludF91bndpbmQgKExpc3BfT2JqZWN0KTsKIGV4dGVybiBfTm9y ZXR1cm4gdm9pZCByZXBvcnRfZmlsZV9lcnJvciAoY29uc3QgY2hhciAqLCBMaXNwX09iamVj dCk7CiBleHRlcm4gdm9pZCBpbnRlcm5hbF9kZWxldGVfZmlsZSAoTGlzcF9PYmplY3QpOwor ZXh0ZXJuIGJvb2wgZmlsZV9kaXJlY3RvcnlfcCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBi b29sIGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAoY29uc3QgY2hhciAqKTsKIGV4dGVy biB2b2lkIHN5bXNfb2ZfZmlsZWlvICh2b2lkKTsKIGV4dGVybiBMaXNwX09iamVjdCBtYWtl X3RlbXBfbmFtZSAoTGlzcF9PYmplY3QsIGJvb2wpOwogZXh0ZXJuIExpc3BfT2JqZWN0IFFk ZWxldGVfZmlsZTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbHJlYWQuYycKLS0tIHNyYy9s cmVhZC5jCTIwMTItMTAtMjAgMTI6NTA6NDkgKzAwMDAKKysrIHNyYy9scmVhZC5jCTIwMTIt MTAtMjIgMDI6NDM6MTYgKzAwMDAKQEAgLTE0MDMsNyArMTQwMyw3IEBACiBJZiBTVUZGSVhF UyBpcyBub24tbmlsLCBpdCBzaG91bGQgYmUgYSBsaXN0IG9mIHN1ZmZpeGVzIHRvIGFwcGVu ZCB0bwogZmlsZSBuYW1lIHdoZW4gc2VhcmNoaW5nLgogSWYgbm9uLW5pbCwgUFJFRElDQVRF IGlzIHVzZWQgaW5zdGVhZCBvZiBgZmlsZS1yZWFkYWJsZS1wJy4KLVBSRURJQ0FURSBjYW4g YWxzbyBiZSBhbiBpbnRlZ2VyIHRvIHBhc3MgdG8gdGhlIGFjY2VzcygyKSBmdW5jdGlvbiwK K1BSRURJQ0FURSBjYW4gYWxzbyBiZSBhbiBpbnRlZ2VyIHRvIHBhc3MgdG8gdGhlIGZhY2Nl c3NhdCgyKSBmdW5jdGlvbiwKIGluIHdoaWNoIGNhc2UgZmlsZS1uYW1lLWhhbmRsZXJzIGFy ZSBpZ25vcmVkLgogVGhpcyBmdW5jdGlvbiB3aWxsIG5vcm1hbGx5IHNraXAgZGlyZWN0b3Jp ZXMsIHNvIGlmIHlvdSB3YW50IGl0IHRvIGZpbmQKIGRpcmVjdG9yaWVzLCBtYWtlIHN1cmUg dGhlIFBSRURJQ0FURSBmdW5jdGlvbiByZXR1cm5zIGBkaXItb2snIGZvciB0aGVtLiAgKi8p CkBAIC0xNDQxLDcgKzE0NDEsNiBAQAogaW50CiBvcGVucCAoTGlzcF9PYmplY3QgcGF0aCwg TGlzcF9PYmplY3Qgc3RyLCBMaXNwX09iamVjdCBzdWZmaXhlcywgTGlzcF9PYmplY3QgKnN0 b3JlcHRyLCBMaXNwX09iamVjdCBwcmVkaWNhdGUpCiB7Ci0gIGludCBmZDsKICAgcHRyZGlm Zl90IGZuX3NpemUgPSAxMDA7CiAgIGNoYXIgYnVmWzEwMF07CiAgIGNoYXIgKmZuID0gYnVm OwpAQCAtMTQ5Niw3ICsxNDk1LDYgQEAKIAl7CiAJICBwdHJkaWZmX3QgZm5sZW4sIGxzdWZm aXggPSBTQllURVMgKFhDQVIgKHRhaWwpKTsKIAkgIExpc3BfT2JqZWN0IGhhbmRsZXI7Ci0J ICBib29sIGV4aXN0czsKIAogCSAgLyogQ29uY2F0ZW5hdGUgcGF0aCBlbGVtZW50L3NwZWNp ZmllZCBuYW1lIHdpdGggdGhlIHN1ZmZpeC4KIAkgICAgIElmIHRoZSBkaXJlY3Rvcnkgc3Rh cnRzIHdpdGggLzosIHJlbW92ZSB0aGF0LiAgKi8KQEAgLTE1MjAsNiArMTUxOCw3IEBACiAJ ICBoYW5kbGVyID0gRmZpbmRfZmlsZV9uYW1lX2hhbmRsZXIgKHN0cmluZywgUWZpbGVfZXhp c3RzX3ApOwogCSAgaWYgKCghTklMUCAoaGFuZGxlcikgfHwgIU5JTFAgKHByZWRpY2F0ZSkp ICYmICFOQVROVU1QIChwcmVkaWNhdGUpKQogICAgICAgICAgICAgeworCSAgICAgIGJvb2wg ZXhpc3RzOwogCSAgICAgIGlmIChOSUxQIChwcmVkaWNhdGUpKQogCQlleGlzdHMgPSAhTklM UCAoRmZpbGVfcmVhZGFibGVfcCAoc3RyaW5nKSk7CiAJICAgICAgZWxzZQpAQCAtMTU0MSwz NyArMTU0MCw0MCBAQAogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKLSNpZm5kZWYgV0lORE9X U05UCi0JICAgICAgc3RydWN0IHN0YXQgc3Q7Ci0jZW5kaWYKKwkgICAgICBpbnQgZmQ7CiAJ ICAgICAgY29uc3QgY2hhciAqcGZuOwogCiAJICAgICAgZW5jb2RlZF9mbiA9IEVOQ09ERV9G SUxFIChzdHJpbmcpOwogCSAgICAgIHBmbiA9IFNTREFUQSAoZW5jb2RlZF9mbik7Ci0jaWZk ZWYgV0lORE9XU05UCi0JICAgICAgZXhpc3RzID0gYWNjZXNzIChwZm4sIEZfT0spID09IDAg JiYgYWNjZXNzIChwZm4sIERfT0spIDwgMDsKLSNlbHNlCi0JICAgICAgZXhpc3RzID0gKHN0 YXQgKHBmbiwgJnN0KSA9PSAwICYmICEgU19JU0RJUiAoc3Quc3RfbW9kZSkpOwotI2VuZGlm Ci0JICAgICAgaWYgKGV4aXN0cykKKworCSAgICAgIC8qIENoZWNrIHRoYXQgd2UgY2FuIGFj Y2VzcyBvciBvcGVuIGl0LiAgKi8KKwkgICAgICBpZiAoTkFUTlVNUCAocHJlZGljYXRlKSkK KwkJZmQgPSAoKChYRkFTVElOVCAocHJlZGljYXRlKSAmIH5JTlRfTUFYKSA9PSAwCisJCSAg ICAgICAmJiAoZmFjY2Vzc2F0IChBVF9GRENXRCwgcGZuLCBYRkFTVElOVCAocHJlZGljYXRl KSwKKwkJCQkgICAgICBBVF9FQUNDRVNTKQorCQkJICAgPT0gMCkKKwkJICAgICAgICYmICEg ZmlsZV9kaXJlY3RvcnlfcCAocGZuKSkKKwkJICAgICAgPyAxIDogLTEpOworCSAgICAgIGVs c2UKIAkJewotCQkgIC8qIENoZWNrIHRoYXQgd2UgY2FuIGFjY2VzcyBvciBvcGVuIGl0LiAg Ki8KLQkJICBpZiAoTkFUTlVNUCAocHJlZGljYXRlKSkKLQkJICAgIGZkID0gKCgoWEZBU1RJ TlQgKHByZWRpY2F0ZSkgJiB+SU5UX01BWCkgPT0gMAotCQkJICAgJiYgYWNjZXNzIChwZm4s IFhGQVNUSU5UIChwcmVkaWNhdGUpKSA9PSAwKQotCQkJICA/IDEgOiAtMSk7Ci0JCSAgZWxz ZQotCQkgICAgZmQgPSBlbWFjc19vcGVuIChwZm4sIE9fUkRPTkxZLCAwKTsKLQotCQkgIGlm IChmZCA+PSAwKQorCQkgIHN0cnVjdCBzdGF0IHN0OworCQkgIGZkID0gZW1hY3Nfb3BlbiAo cGZuLCBPX1JET05MWSwgMCk7CisJCSAgaWYgKDAgPD0gZmQKKwkJICAgICAgJiYgKGZzdGF0 IChmZCwgJnN0KSAhPSAwIHx8IFNfSVNESVIgKHN0LnN0X21vZGUpKSkKIAkJICAgIHsKLQkJ ICAgICAgLyogV2Ugc3VjY2VlZGVkOyByZXR1cm4gdGhpcyBkZXNjcmlwdG9yIGFuZCBmaWxl bmFtZS4gICovCi0JCSAgICAgIGlmIChzdG9yZXB0cikKLQkJCSpzdG9yZXB0ciA9IHN0cmlu ZzsKLQkJICAgICAgVU5HQ1BSTzsKLQkJICAgICAgcmV0dXJuIGZkOworCQkgICAgICBlbWFj c19jbG9zZSAoZmQpOworCQkgICAgICBmZCA9IC0xOwogCQkgICAgfQogCQl9CisKKwkgICAg ICBpZiAoZmQgPj0gMCkKKwkJeworCQkgIC8qIFdlIHN1Y2NlZWRlZDsgcmV0dXJuIHRoaXMg ZGVzY3JpcHRvciBhbmQgZmlsZW5hbWUuICAqLworCQkgIGlmIChzdG9yZXB0cikKKwkJICAg ICpzdG9yZXB0ciA9IHN0cmluZzsKKwkJICBVTkdDUFJPOworCQkgIHJldHVybiBmZDsKKwkJ fQogCSAgICB9CiAJfQogICAgICAgaWYgKGFic29sdXRlKQpAQCAtNDA4Nyw5ICs0MDg5LDgg QEAKICAgICAgIGlmIChTVFJJTkdQIChkaXJmaWxlKSkKICAgICAgICAgewogICAgICAgICAg IGRpcmZpbGUgPSBGZGlyZWN0b3J5X2ZpbGVfbmFtZSAoZGlyZmlsZSk7Ci0gICAgICAgICAg aWYgKGFjY2VzcyAoU1NEQVRBIChkaXJmaWxlKSwgMCkgPCAwKQotICAgICAgICAgICAgZGly X3dhcm5pbmcgKCJXYXJuaW5nOiBMaXNwIGRpcmVjdG9yeSBgJXMnIGRvZXMgbm90IGV4aXN0 LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBYQ0FSIChwYXRoX3RhaWwpKTsKKyAg ICAgICAgICBpZiAoISBmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AgKFNTREFUQSAoZGly ZmlsZSkpKQorICAgICAgICAgICAgZGlyX3dhcm5pbmcgKCJMaXNwIGRpcmVjdG9yeSIsIFhD QVIgKHBhdGhfdGFpbCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDIwMSwxMSArNDIw MiwxMSBAQAogCSAgICAgIExpc3BfT2JqZWN0IHRlbSwgdGVtMTsKIAogICAgICAgICAgICAg ICAvKiBBZGQgdG8gdGhlIHBhdGggdGhlIGxpc3Agc3ViZGlyIG9mIHRoZSBpbnN0YWxsYXRp b24KLSAgICAgICAgICAgICAgICAgZGlyLCBpZiBpdCBleGlzdHMuICBOb3RlOiBpbiBvdXQt b2YtdHJlZSBidWlsZHMsCisgICAgICAgICAgICAgICAgIGRpciwgaWYgaXQgaXMgYWNjZXNz aWJsZS4gIE5vdGU6IGluIG91dC1vZi10cmVlIGJ1aWxkcywKICAgICAgICAgICAgICAgICAg dGhpcyBkaXJlY3RvcnkgaXMgZW1wdHkgc2F2ZSBmb3IgTWFrZWZpbGUuICAqLwogICAgICAg ICAgICAgICB0ZW0gPSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgibGlzcCIp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmluc3RhbGxhdGlv bl9kaXJlY3RvcnkpOwotICAgICAgICAgICAgICB0ZW0xID0gRmZpbGVfZXhpc3RzX3AgKHRl bSk7CisgICAgICAgICAgICAgIHRlbTEgPSBGZmlsZV9hY2Nlc3NpYmxlX2RpcmVjdG9yeV9w ICh0ZW0pOwogICAgICAgICAgICAgICBpZiAoIU5JTFAgKHRlbTEpKQogICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgIGlmIChOSUxQIChGbWVtYmVyICh0ZW0sIFZsb2Fk X3BhdGgpKSkKQEAgLTQyMjIsMTAgKzQyMjMsMTAgQEAKICAgICAgICAgICAgICAgICAgICBM aXNwIGRpcnMgaW5zdGVhZC4gICovCiAgICAgICAgICAgICAgICAgVmxvYWRfcGF0aCA9IG5j b25jMiAoVmxvYWRfcGF0aCwgZHVtcF9wYXRoKTsKIAotICAgICAgICAgICAgICAvKiBBZGQg bGVpbSB1bmRlciB0aGUgaW5zdGFsbGF0aW9uIGRpciwgaWYgaXQgZXhpc3RzLiAqLworICAg ICAgICAgICAgICAvKiBBZGQgbGVpbSB1bmRlciB0aGUgaW5zdGFsbGF0aW9uIGRpciwgaWYg aXQgaXMgYWNjZXNzaWJsZS4gKi8KICAgICAgICAgICAgICAgdGVtID0gRmV4cGFuZF9maWxl X25hbWUgKGJ1aWxkX3N0cmluZyAoImxlaW0iKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5KTsKLSAgICAgICAgICAg ICAgdGVtMSA9IEZmaWxlX2V4aXN0c19wICh0ZW0pOworICAgICAgICAgICAgICB0ZW0xID0g RmZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAodGVtKTsKICAgICAgICAgICAgICAgaWYg KCFOSUxQICh0ZW0xKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBp ZiAoTklMUCAoRm1lbWJlciAodGVtLCBWbG9hZF9wYXRoKSkpCkBAIC00MjM3LDcgKzQyMzgs NyBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIHRlbSA9IEZleHBh bmRfZmlsZV9uYW1lIChidWlsZF9zdHJpbmcgKCJzaXRlLWxpc3AiKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaW5zdGFsbGF0aW9uX2RpcmVjdG9y eSk7Ci0gICAgICAgICAgICAgICAgICB0ZW0xID0gRmZpbGVfZXhpc3RzX3AgKHRlbSk7Cisg ICAgICAgICAgICAgICAgICB0ZW0xID0gRmZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAo dGVtKTsKICAgICAgICAgICAgICAgICAgIGlmICghTklMUCAodGVtMSkpCiAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBpZiAoTklMUCAoRm1lbWJlciAo dGVtLCBWbG9hZF9wYXRoKSkpCkBAIC00MjgyLDcgKzQyODMsNyBAQAogICAgICAgICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW0gPSBGZXhwYW5k X2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgic2l0ZS1saXNwIiksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWc291cmNlX2RpcmVjdG9y eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHRlbTEgPSBGZmlsZV9leGlzdHNfcCAo dGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtMSA9IEZmaWxlX2FjY2Vzc2li bGVfZGlyZWN0b3J5X3AgKHRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh TklMUCAodGVtMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKE5JTFAgKEZtZW1iZXIgKHRlbSwgVmxvYWRfcGF0 aCkpKQpAQCAtNDMzOCwyMSArNDMzOSwyNyBAQAogICBWbG9hZHNfaW5fcHJvZ3Jlc3MgPSBR bmlsOwogfQogCi0vKiBQcmludCBhIHdhcm5pbmcsIHVzaW5nIGZvcm1hdCBzdHJpbmcgRk9S TUFULCB0aGF0IGRpcmVjdG9yeSBESVJOQU1FCi0gICBkb2VzIG5vdCBleGlzdC4gIFByaW50 IGl0IG9uIHN0ZGVyciBhbmQgcHV0IGl0IGluICpNZXNzYWdlcyouICAqLworLyogUHJpbnQg YSB3YXJuaW5nIHRoYXQgZGlyZWN0b3J5IGludGVuZGVkIGZvciB1c2UgVVNFIGFuZCB3aXRo IG5hbWUKKyAgIERJUk5BTUUgY2Fubm90IGJlIGFjY2Vzc2VkLiAgT24gZW50cnksIGVycm5v IHNob3VsZCBjb3JyZXNwb25kIHRvCisgICB0aGUgYWNjZXNzIGZhaWx1cmUuICBQcmludCB0 aGUgd2FybmluZyBvbiBzdGRlcnIgYW5kIHB1dCBpdCBpbgorICAgKk1lc3NhZ2VzKi4gICov CiAKIHZvaWQKLWRpcl93YXJuaW5nIChjb25zdCBjaGFyICpmb3JtYXQsIExpc3BfT2JqZWN0 IGRpcm5hbWUpCitkaXJfd2FybmluZyAoY2hhciBjb25zdCAqdXNlLCBMaXNwX09iamVjdCBk aXJuYW1lKQogewotICBmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgU0RBVEEgKGRpcm5hbWUp KTsKKyAgc3RhdGljIGNoYXIgY29uc3QgZm9ybWF0W10gPSAiV2FybmluZzogJXMgYCVzJzog JXNcbiI7CisgIGNoYXIgY29uc3QgKmRpYWdub3N0aWMgPSBzdHJlcnJvciAoZXJybm8pOwor ICBmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgdXNlLCBTU0RBVEEgKGRpcm5hbWUpLCBkaWFn bm9zdGljKTsKIAogICAvKiBEb24ndCBsb2cgdGhlIHdhcm5pbmcgYmVmb3JlIHdlJ3ZlIGlu aXRpYWxpemVkISEgICovCiAgIGlmIChpbml0aWFsaXplZCkKICAgICB7CiAgICAgICBVU0Vf U0FGRV9BTExPQ0E7Ci0gICAgICBjaGFyICpidWZmZXIgPSBTQUZFX0FMTE9DQSAoU0JZVEVT IChkaXJuYW1lKQotCQkJCSAgKyBzdHJsZW4gKGZvcm1hdCkgLSAoc2l6ZW9mICIlcyIgLSAx KSArIDEpOwotICAgICAgcHRyZGlmZl90IG1lc3NhZ2VfbGVuID0gZXNwcmludGYgKGJ1ZmZl ciwgZm9ybWF0LCBTREFUQSAoZGlybmFtZSkpOworICAgICAgY2hhciAqYnVmZmVyID0gU0FG RV9BTExPQ0EgKHNpemVvZiBmb3JtYXQgLSAzICogKHNpemVvZiAiJXMiIC0gMSkKKwkJCQkg ICsgc3RybGVuICh1c2UpICsgU0JZVEVTIChkaXJuYW1lKQorCQkJCSAgKyBzdHJsZW4gKGRp YWdub3N0aWMpKTsKKyAgICAgIHB0cmRpZmZfdCBtZXNzYWdlX2xlbiA9IGVzcHJpbnRmIChi dWZmZXIsIGZvcm1hdCwgdXNlLCBTU0RBVEEgKGRpcm5hbWUpLAorCQkJCQlkaWFnbm9zdGlj KTsKICAgICAgIG1lc3NhZ2VfZG9sb2cgKGJ1ZmZlciwgbWVzc2FnZV9sZW4sIDAsIFNUUklO R19NVUxUSUJZVEUgKGRpcm5hbWUpKTsKICAgICAgIFNBRkVfRlJFRSAoKTsKICAgICB9Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL25zdGVybS5tJwotLS0gc3JjL25zdGVybS5tCTIwMTIt MTAtMTggMTg6NTQ6MzcgKzAwMDAKKysrIHNyYy9uc3Rlcm0ubQkyMDEyLTEwLTIyIDAyOjM2 OjE3ICswMDAwCkBAIC00MDk5LDggKzQwOTksNiBAQAogCiAgICAgICAgIGNvbG9yX2ZpbGUg PSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgicmdiLnR4dCIpLAogICAgICAg ICAgICAgICAgICAgICAgICAgIEZzeW1ib2xfdmFsdWUgKGludGVybiAoImRhdGEtZGlyZWN0 b3J5IikpKTsKLSAgICAgICAgaWYgKE5JTFAgKEZmaWxlX3JlYWRhYmxlX3AgKGNvbG9yX2Zp bGUpKSkKLSAgICAgICAgICBmYXRhbCAoIkNvdWxkIG5vdCBmaW5kICVzLlxuIiwgU0RBVEEg KGNvbG9yX2ZpbGUpKTsKIAogICAgICAgICBjb2xvcl9tYXAgPSBGeF9sb2FkX2NvbG9yX2Zp bGUgKGNvbG9yX2ZpbGUpOwogICAgICAgICBpZiAoTklMUCAoY29sb3JfbWFwKSkKCj09PSBt b2RpZmllZCBmaWxlICdzcmMvcHJvY2Vzcy5jJwotLS0gc3JjL3Byb2Nlc3MuYwkyMDEyLTEw LTE5IDE5OjI1OjE4ICswMDAwCisrKyBzcmMvcHJvY2Vzcy5jCTIwMTItMTAtMjAgMDE6MTM6 MzUgKzAwMDAKQEAgLTIwNCw3ICsyMDQsNyBAQAogI2lmbmRlZiBOT05fQkxPQ0tJTkdfQ09O TkVDVAogI2lmZGVmIEhBVkVfU0VMRUNUCiAjaWYgZGVmaW5lZCAoSEFWRV9HRVRQRUVSTkFN RSkgfHwgZGVmaW5lZCAoR05VX0xJTlVYKQotI2lmIGRlZmluZWQgKE9fTk9OQkxPQ0spIHx8 IGRlZmluZWQgKE9fTkRFTEFZKQorI2lmIE9fTk9OQkxPQ0sgfHwgT19OREVMQVkKICNpZiBk ZWZpbmVkIChFV09VTERCTE9DSykgfHwgZGVmaW5lZCAoRUlOUFJPR1JFU1MpCiAjZGVmaW5l IE5PTl9CTE9DS0lOR19DT05ORUNUCiAjZW5kaWYgLyogRVdPVUxEQkxPQ0sgfHwgRUlOUFJP R1JFU1MgKi8KQEAgLTY1MSw3ICs2NTEsNyBAQAogCVBUWV9PUEVOOwogI2Vsc2UgLyogbm8g UFRZX09QRU4gKi8KIAl7Ci0jICBpZmRlZiBPX05PTkJMT0NLCisjICBpZiBPX05PTkJMT0NL CiAJICBmZCA9IGVtYWNzX29wZW4gKHB0eV9uYW1lLCBPX1JEV1IgfCBPX05PTkJMT0NLLCAw KTsKICMgIGVsc2UKIAkgIGZkID0gZW1hY3Nfb3BlbiAocHR5X25hbWUsIE9fUkRXUiB8IE9f TkRFTEFZLCAwKTsKQEAgLTY2OCw3ICs2NjgsNyBAQAogI2Vsc2UKIAkgICAgc3ByaW50ZiAo cHR5X25hbWUsICIvZGV2L3R0eSVjJXgiLCBjLCBpKTsKICNlbmRpZiAvKiBubyBQVFlfVFRZ X05BTUVfU1BSSU5URiAqLwotCSAgICBpZiAoYWNjZXNzIChwdHlfbmFtZSwgNikgIT0gMCkK KwkgICAgaWYgKGZhY2Nlc3NhdCAoQVRfRkRDV0QsIHB0eV9uYW1lLCBSX09LIHwgV19PSywg QVRfRUFDQ0VTUykgIT0gMCkKIAkgICAgICB7CiAJCWVtYWNzX2Nsb3NlIChmZCk7CiAjIGlm bmRlZiBfX3NnaQpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKICNpZiAhIGRlZmluZWQgKFVTRykg fHwgZGVmaW5lZCAoVVNHX1NVQlRUWV9XT1JLUykKICAgICAgIC8qIE9uIG1vc3QgVVNHIHN5 c3RlbXMgaXQgZG9lcyBub3Qgd29yayB0byBvcGVuIHRoZSBwdHkncyB0dHkgaGVyZSwKIAkg dGhlbiBjbG9zZSBpdCBhbmQgcmVvcGVuIGl0IGluIHRoZSBjaGlsZC4gICovCi0jaWZkZWYg T19OT0NUVFkKKyNpZiBPX05PQ1RUWQogICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgdGVybWlu YWwgYmVjb21lIG91ciBjb250cm9sbGluZyB0ZXJtaW5hbAogCSAoaW4gY2FzZSB3ZSBkb24n dCBoYXZlIG9uZSkuICAqLwogICAgICAgZm9ya291dCA9IGZvcmtpbiA9IGVtYWNzX29wZW4g KHB0eV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSwgMCk7CkBAIC0xNjc1LDExICsxNjc1LDEx IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBPX05PTkJMT0NLCisjaWYgT19OT05CTE9D SwogICBmY250bCAoaW5jaGFubmVsLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKICAgZmNudGwg KG91dGNoYW5uZWwsIEZfU0VURkwsIE9fTk9OQkxPQ0spOwogI2Vsc2UKLSNpZmRlZiBPX05E RUxBWQorI2lmIE9fTkRFTEFZCiAgIGZjbnRsIChpbmNoYW5uZWwsIEZfU0VURkwsIE9fTkRF TEFZKTsKICAgZmNudGwgKG91dGNoYW5uZWwsIEZfU0VURkwsIE9fTkRFTEFZKTsKICNlbmRp ZgpAQCAtMTk2Nyw3ICsxOTY3LDcgQEAKICNpZiAhIGRlZmluZWQgKFVTRykgfHwgZGVmaW5l ZCAoVVNHX1NVQlRUWV9XT1JLUykKICAgICAgIC8qIE9uIG1vc3QgVVNHIHN5c3RlbXMgaXQg ZG9lcyBub3Qgd29yayB0byBvcGVuIHRoZSBwdHkncyB0dHkgaGVyZSwKIAkgdGhlbiBjbG9z ZSBpdCBhbmQgcmVvcGVuIGl0IGluIHRoZSBjaGlsZC4gICovCi0jaWZkZWYgT19OT0NUVFkK KyNpZiBPX05PQ1RUWQogICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgdGVybWluYWwgYmVjb21l IG91ciBjb250cm9sbGluZyB0ZXJtaW5hbAogCSAoaW4gY2FzZSB3ZSBkb24ndCBoYXZlIG9u ZSkuICAqLwogICAgICAgaW50IGZvcmtvdXQgPSBlbWFjc19vcGVuIChwdHlfbmFtZSwgT19S RFdSIHwgT19OT0NUVFksIDApOwpAQCAtMTk4NywxMSArMTk4NywxMSBAQAogICAgIH0KICNl bmRpZiAvKiBIQVZFX1BUWVMgKi8KIAotI2lmZGVmIE9fTk9OQkxPQ0sKKyNpZiBPX05PTkJM T0NLCiAgIGZjbnRsIChpbmNoYW5uZWwsIEZfU0VURkwsIE9fTk9OQkxPQ0spOwogICBmY250 bCAob3V0Y2hhbm5lbCwgRl9TRVRGTCwgT19OT05CTE9DSyk7CiAjZWxzZQotI2lmZGVmIE9f TkRFTEFZCisjaWYgT19OREVMQVkKICAgZmNudGwgKGluY2hhbm5lbCwgRl9TRVRGTCwgT19O REVMQVkpOwogICBmY250bCAob3V0Y2hhbm5lbCwgRl9TRVRGTCwgT19OREVMQVkpOwogI2Vu ZGlmCkBAIC0yOTUxLDcgKzI5NTEsNyBAQAogICAgIHsKICAgICAgIC8qIERvbid0IHN1cHBv cnQgbmV0d29yayBzb2NrZXRzIHdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMKIAkgbm90IGF2 YWlsYWJsZSwgc2luY2UgYSBibG9ja2VkIEVtYWNzIGlzIG5vdCB1c2VmdWwuICAqLwotI2lm ICFkZWZpbmVkIChPX05PTkJMT0NLKSAmJiAhZGVmaW5lZCAoT19OREVMQVkpCisjaWYgIU9f Tk9OQkxPQ0sgJiYgIU9fTkRFTEFZCiAgICAgICBlcnJvciAoIk5ldHdvcmsgc2VydmVycyBu b3Qgc3VwcG9ydGVkIik7CiAjZWxzZQogICAgICAgaXNfc2VydmVyID0gMTsKQEAgLTMyMTcs NyArMzIxNyw3IEBACiAjaWZkZWYgTk9OX0JMT0NLSU5HX0NPTk5FQ1QKICAgICAgIGlmIChp c19ub25fYmxvY2tpbmdfY2xpZW50KQogCXsKLSNpZmRlZiBPX05PTkJMT0NLCisjaWYgT19O T05CTE9DSwogCSAgcmV0ID0gZmNudGwgKHMsIEZfU0VURkwsIE9fTk9OQkxPQ0spOwogI2Vs c2UKIAkgIHJldCA9IGZjbnRsIChzLCBGX1NFVEZMLCBPX05ERUxBWSk7CkBAIC0zNDM0LDEw ICszNDM0LDEwIEBACiAKICAgY2hhbl9wcm9jZXNzW2luY2hdID0gcHJvYzsKIAotI2lmZGVm IE9fTk9OQkxPQ0sKKyNpZiBPX05PTkJMT0NLCiAgIGZjbnRsIChpbmNoLCBGX1NFVEZMLCBP X05PTkJMT0NLKTsKICNlbHNlCi0jaWZkZWYgT19OREVMQVkKKyNpZiBPX05ERUxBWQogICBm Y250bCAoaW5jaCwgRl9TRVRGTCwgT19OREVMQVkpOwogI2VuZGlmCiAjZW5kaWYKQEAgLTQx NjksMTAgKzQxNjksMTAgQEAKIAogICBjaGFuX3Byb2Nlc3Nbc10gPSBwcm9jOwogCi0jaWZk ZWYgT19OT05CTE9DSworI2lmIE9fTk9OQkxPQ0sKICAgZmNudGwgKHMsIEZfU0VURkwsIE9f Tk9OQkxPQ0spOwogI2Vsc2UKLSNpZmRlZiBPX05ERUxBWQorI2lmIE9fTkRFTEFZCiAgIGZj bnRsIChzLCBGX1NFVEZMLCBPX05ERUxBWSk7CiAjZW5kaWYKICNlbmRpZgpAQCAtNDg3Mywx MSArNDg3MywxMSBAQAogI2VuZGlmCiAJICAgICAgLyogSVNDIDQuMSBkZWZpbmVzIGJvdGgg RVdPVUxEQkxPQ0sgYW5kIE9fTk9OQkxPQ0ssCiAJCSBhbmQgRW1hY3MgdXNlcyBPX05PTkJM T0NLLCBzbyB3aGF0IHdlIGdldCBpcyBFQUdBSU4uICAqLwotI2lmZGVmIE9fTk9OQkxPQ0sK KyNpZiBPX05PTkJMT0NLCiAJICAgICAgZWxzZSBpZiAobnJlYWQgPT0gLTEgJiYgZXJybm8g PT0gRUFHQUlOKQogCQk7CiAjZWxzZQotI2lmZGVmIE9fTkRFTEFZCisjaWYgT19OREVMQVkK IAkgICAgICBlbHNlIGlmIChucmVhZCA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pCiAJCTsK IAkgICAgICAvKiBOb3RlIHRoYXQgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gbm8g aW5wdXQKQEAgLTczNjMsNyArNzM2Myw3IEBACiAjaWZkZWYgSEFWRV9HRVRTT0NLTkFNRQog ICAgQUREX1NVQkZFQVRVUkUgKFFDc2VydmljZSwgUXQpOwogI2VuZGlmCi0jaWYgZGVmaW5l ZCAoT19OT05CTE9DSykgfHwgZGVmaW5lZCAoT19OREVMQVkpCisjaWYgT19OT05CTE9DSyB8 fCBPX05ERUxBWQogICAgQUREX1NVQkZFQVRVUkUgKFFDc2VydmVyLCBRdCk7CiAjZW5kaWYK IAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9zeXNkZXAuYycKLS0tIHNyYy9zeXNkZXAuYwky MDEyLTEwLTE5IDE5OjI1OjE4ICswMDAwCisrKyBzcmMvc3lzZGVwLmMJMjAxMi0xMC0yMCAw MToxMzozNSArMDAwMApAQCAtMTIxNiw3ICsxMjE2LDcgQEAKICAgICAgICAgICAgICBvbGRf ZmNudGxfb3duZXJbZmlsZW5vICh0dHlfb3V0LT5pbnB1dCldKTsKICAgICB9CiAjZW5kaWYg LyogRl9TRVRPV04gKi8KLSNpZmRlZiBPX05ERUxBWQorI2lmIE9fTkRFTEFZCiAgIGZjbnRs IChmaWxlbm8gKHR0eV9vdXQtPmlucHV0KSwgRl9TRVRGTCwKICAgICAgICAgIGZjbnRsIChm aWxlbm8gKHR0eV9vdXQtPmlucHV0KSwgRl9HRVRGTCwgMCkgJiB+T19OREVMQVkpOwogI2Vu ZGlmCkBAIC0yMzEyLDEyICsyMzEyLDEyIEBACiAKICAgZmQgPSBlbWFjc19vcGVuICgoY2hh ciopIHBvcnQsCiAJCSAgIE9fUkRXUgotI2lmZGVmIE9fTk9OQkxPQ0sKKyNpZiBPX05PTkJM T0NLCiAJCSAgIHwgT19OT05CTE9DSwogI2Vsc2UKIAkJICAgfCBPX05ERUxBWQogI2VuZGlm Ci0jaWZkZWYgT19OT0NUVFkKKyNpZiBPX05PQ1RUWQogCQkgICB8IE9fTk9DVFRZCiAjZW5k aWYKIAkJICAgLCAwKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdGVybS5jJwotLS0gc3Jj L3Rlcm0uYwkyMDEyLTEwLTE5IDE5OjI1OjE4ICswMDAwCisrKyBzcmMvdGVybS5jCTIwMTIt MTAtMjAgMDE6MTM6MzUgKzAwMDAKQEAgLTMwMjMsNyArMzAyMyw3IEBACiAgICAgaW50IGZk OwogICAgIEZJTEUgKmZpbGU7CiAKLSNpZmRlZiBPX0lHTk9SRV9DVFRZCisjaWYgT19JR05P UkVfQ1RUWQogICAgIGlmICghY3R0eSkKICAgICAgIC8qIE9wZW4gdGhlIHRlcm1pbmFsIGRl dmljZS4gIERvbid0IHJlY29nbml6ZSBpdCBhcyBvdXIKICAgICAgICAgIGNvbnRyb2xsaW5n IHRlcm1pbmFsLCBhbmQgZG9uJ3QgbWFrZSBpdCB0aGUgY29udHJvbGxpbmcgdHR5CkBAIC0z MDU0LDcgKzMwNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICB9 CiAKLSNpZm5kZWYgT19JR05PUkVfQ1RUWQorI2lmICFPX0lHTk9SRV9DVFRZCiAgICAgaWYg KCFjdHR5KQogICAgICAgZGlzc29jaWF0ZV9pZl9jb250cm9sbGluZ190dHkgKGZkKTsKICNl bmRpZgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzIuYycKLS0tIHNyYy93MzIuYwkyMDEy LTEwLTE5IDE5OjI1OjE4ICswMDAwCisrKyBzcmMvdzMyLmMJMjAxMi0xMC0yMCAwMToxMzoz NSArMDAwMApAQCAtMTU5Nyw3ICsxNTk3LDcgQEAKIAkgc2VlIGlmIGl0IHN1Y2NlZWRzLiAg QnV0IEkgdGhpbmsgdGhhdCdzIHRvbyBtdWNoIHRvIGFzay4gICovCiAKICAgICAgIC8qIE1T VkNSVCdzIF9hY2Nlc3MgY3Jhc2hlcyB3aXRoIERfT0suICAqLwotICAgICAgaWYgKHRtcCAm JiBzeXNfYWNjZXNzICh0bXAsIERfT0spID09IDApCisgICAgICBpZiAodG1wICYmIHN5c19m YWNjZXNzYXQgKEFUX0ZEQ1dELCB0bXAsIERfT0ssIEFUX0VBQ0NFU1MpID09IDApCiAJewog CSAgY2hhciAqIHZhciA9IGFsbG9jYSAoc3RybGVuICh0bXApICsgOCk7CiAJICBzcHJpbnRm ICh2YXIsICJUTVBESVI9JXMiLCB0bXApOwpAQCAtMjcxNCwxMCArMjcxNCwxNiBAQAogICAg bG9uZyBmaWxlIG5hbWVzLiAgKi8KIAogaW50Ci1zeXNfYWNjZXNzIChjb25zdCBjaGFyICog cGF0aCwgaW50IG1vZGUpCitzeXNfZmFjY2Vzc2F0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIg KiBwYXRoLCBpbnQgbW9kZSwgaW50IGZsYWdzKQogewogICBEV09SRCBhdHRyaWJ1dGVzOwog CisgIGlmIChkaXJmZCAhPSBBVF9GRENXRCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZB TDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgLyogTVNWQ1JUIGltcGxlbWVudGF0 aW9uIG9mICdhY2Nlc3MnIGRvZXNuJ3QgcmVjb2duaXplIERfT0ssIGFuZCBpdHMKICAgICAg bmV3ZXIgdmVyc2lvbnMgYmxvdyB1cCB3aGVuIHBhc3NlZCBEX09LLiAgKi8KICAgcGF0aCA9 IG1hcF93MzJfZmlsZW5hbWUgKHBhdGgsIE5VTEwpOwpAQCAtMjk2MCw3ICsyOTY2LDcgQEAK IAl7CiAJICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwogCSAgcFswXSA9IGZpcnN0X2NoYXJb aV07Ci0JICBpZiAoc3lzX2FjY2VzcyAodGVtcGxhdGUsIDApIDwgMCkKKwkgIGlmIChzeXNf ZmFjY2Vzc2F0IChBVF9GRENXRCwgdGVtcGxhdGUsIEZfT0ssIEFUX0VBQ0NFU1MpIDwgMCkK IAkgICAgewogCSAgICAgIGVycm5vID0gc2F2ZV9lcnJubzsKIAkgICAgICByZXR1cm4gdGVt cGxhdGU7CkBAIC00MDExLDcgKzQwMTcsNyBAQAogICAgIHsKICAgICAgIC8qIE5vbi1hYnNv bHV0ZSBGSUxFTkFNRSBpcyB1bmRlcnN0b29kIGFzIGJlaW5nIHJlbGF0aXZlIHRvCiAJIExJ TktOQU1FJ3MgZGlyZWN0b3J5LiAgV2UgbmVlZCB0byBwcmVwZW5kIHRoYXQgZGlyZWN0b3J5 IHRvCi0JIEZJTEVOQU1FIHRvIGdldCBjb3JyZWN0IHJlc3VsdHMgZnJvbSBzeXNfYWNjZXNz IGJlbG93LCBzaW5jZQorCSBGSUxFTkFNRSB0byBnZXQgY29ycmVjdCByZXN1bHRzIGZyb20g c3lzX2ZhY2Nlc3NhdCBiZWxvdywgc2luY2UKIAkgb3RoZXJ3aXNlIGl0IHdpbGwgaW50ZXJw cmV0IEZJTEVOQU1FIHJlbGF0aXZlIHRvIHRoZQogCSBkaXJlY3Rvcnkgd2hlcmUgdGhlIEVt YWNzIHByb2Nlc3MgcnVucy4gIE5vdGUgdGhhdAogCSBtYWtlLXN5bWJvbGljLWxpbmsgYWx3 YXlzIG1ha2VzIHN1cmUgTElOS05BTUUgaXMgYSBmdWxseQpAQCAtNDAyNSwxMCArNDAzMSwx MCBAQAogCXN0cm5jcHkgKHRlbSwgbGlua2ZuLCBwIC0gbGlua2ZuKTsKICAgICAgIHRlbVtw IC0gbGlua2ZuXSA9ICdcMCc7CiAgICAgICBzdHJjYXQgKHRlbSwgZmlsZW5hbWUpOwotICAg ICAgZGlyX2FjY2VzcyA9IHN5c19hY2Nlc3MgKHRlbSwgRF9PSyk7CisgICAgICBkaXJfYWNj ZXNzID0gc3lzX2ZhY2Nlc3NhdCAoQVRfRkRDV0QsIHRlbSwgRF9PSywgQVRfRUFDQ0VTUyk7 CiAgICAgfQogICBlbHNlCi0gICAgZGlyX2FjY2VzcyA9IHN5c19hY2Nlc3MgKGZpbGVuYW1l LCBEX09LKTsKKyAgICBkaXJfYWNjZXNzID0gc3lzX2ZhY2Nlc3NhdCAoQVRfRkRDV0QsIGZp bGVuYW1lLCBEX09LLCBBVF9FQUNDRVNTKTsKIAogICAvKiBTaW5jZSBXaW5kb3dzIGRpc3Rp bmd1aXNoZXMgYmV0d2VlbiBzeW1saW5rcyB0byBkaXJlY3RvcmllcyBhbmQKICAgICAgdG8g ZmlsZXMsIHdlIHByb3ZpZGUgYSBrbHVkZ3kgZmVhdHVyZTogaWYgRklMRU5BTUUgZG9lc24n dAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94cmRiLmMnCi0tLSBzcmMveHJkYi5jCTIwMTIt MTAtMTkgMTk6MjU6MTggKzAwMDAKKysrIHNyYy94cmRiLmMJMjAxMi0xMC0yMiAwNToyOTox NSArMDAwMApAQCAtNDEsNyArNDEsNiBAQAogI2lmZGVmIEhBVkVfUFdEX0gKICNpbmNsdWRl IDxwd2QuaD4KICNlbmRpZgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKICNpZmRlZiBVU0Vf TU9USUYKIC8qIEZvciBWZG91YmxlX2NsaWNrX3RpbWUuICAqLwpAQCAtNTAsNyArNDksNiBA QAogCiBjaGFyICp4X2dldF9zdHJpbmdfcmVzb3VyY2UgKFhybURhdGFiYXNlIHJkYiwgY29u c3QgY2hhciAqbmFtZSwKIAkJCSAgICAgY29uc3QgY2hhciAqY2xhc3MpOwotc3RhdGljIGlu dCBmaWxlX3AgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKIAogDAogLyogWCBmaWxlIHNlYXJj aCBwYXRoIHByb2Nlc3NpbmcuICAqLwpAQCAtMTA4LDcgKzEwNiw3IEBACiAJCWRhdGFiYXNl IGFzc29jaWF0ZWQgd2l0aCBkaXNwbGF5LgogCQkoVGhpcyBpcyB4X2N1c3RvbWl6YXRpb25f c3RyaW5nLikKIAotICAgUmV0dXJuIHRoZSBleHBhbmRlZCBmaWxlIG5hbWUgaWYgaXQgZXhp c3RzIGFuZCBpcyByZWFkYWJsZSwgYW5kCisgICBSZXR1cm4gdGhlIHJlc291cmNlIGRhdGFi YXNlIGlmIGl0cyBmaWxlIHdhcyByZWFkIHN1Y2Nlc3NmdWxseSwgYW5kCiAgICByZWZlcnMg dG8gJUwgb25seSB3aGVuIHRoZSBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwg b3IKICAgIG90aGVyd2lzZSBwcm92aWRlZCBieSBYLgogCkBAIC0xMTcsMTAgKzExNSwxMSBA QAogCiAgICBSZXR1cm4gTlVMTCBvdGhlcndpc2UuICAqLwogCi1zdGF0aWMgY2hhciAqCi1t YWdpY19maWxlX3AgKGNvbnN0IGNoYXIgKnN0cmluZywgcHRyZGlmZl90IHN0cmluZ19sZW4s IGNvbnN0IGNoYXIgKmNsYXNzLAotCSAgICAgIGNvbnN0IGNoYXIgKmVzY2FwZWRfc3VmZml4 KQorc3RhdGljIFhybURhdGFiYXNlCittYWdpY19kYiAoY29uc3QgY2hhciAqc3RyaW5nLCBw dHJkaWZmX3Qgc3RyaW5nX2xlbiwgY29uc3QgY2hhciAqY2xhc3MsCisJICBjb25zdCBjaGFy ICplc2NhcGVkX3N1ZmZpeCkKIHsKKyAgWHJtRGF0YWJhc2UgZGI7CiAgIGNoYXIgKmxhbmcg PSBnZXRlbnYgKCJMQU5HIik7CiAKICAgcHRyZGlmZl90IHBhdGhfc2l6ZSA9IDEwMDsKQEAg LTIxNywxNCArMjE2LDkgQEAKICAgICB9CiAKICAgcGF0aFtwYXRoX2xlbl0gPSAnXDAnOwot Ci0gIGlmICghIGZpbGVfcCAocGF0aCkpCi0gICAgewotICAgICAgeGZyZWUgKHBhdGgpOwot ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gIHJldHVybiBwYXRoOworICBkYiA9IFhy bUdldEZpbGVEYXRhYmFzZSAocGF0aCk7CisgIHhmcmVlIChwYXRoKTsKKyAgcmV0dXJuIGRi OwogfQogCiAKQEAgLTI1OCwyMiArMjUyLDExIEBACiB9CiAKIAotc3RhdGljIGludAotZmls ZV9wIChjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgc3RydWN0IHN0YXQgc3RhdHVzOwot Ci0gIHJldHVybiAoYWNjZXNzIChmaWxlbmFtZSwgNCkgPT0gMCAgICAgICAgICAgICAvKiBl eGlzdHMgYW5kIGlzIHJlYWRhYmxlICovCi0JICAmJiBzdGF0IChmaWxlbmFtZSwgJnN0YXR1 cykgPT0gMAkvKiBnZXQgdGhlIHN0YXR1cyAqLwotCSAgJiYgKFNfSVNESVIgKHN0YXR1cy5z dF9tb2RlKSkgPT0gMCk7CS8qIG5vdCBhIGRpcmVjdG9yeSAqLwotfQotCi0KIC8qIEZpbmQg dGhlIGZpcnN0IGVsZW1lbnQgb2YgU0VBUkNIX1BBVEggd2hpY2ggZXhpc3RzIGFuZCBpcyBy ZWFkYWJsZSwKICAgIGFmdGVyIGV4cGFuZGluZyB0aGUgJS1lc2NhcGVzLiAgUmV0dXJuIDAg aWYgd2UgZGlkbid0IGZpbmQgYW55LCBhbmQKICAgIHRoZSBwYXRoIG5hbWUgb2YgdGhlIG9u ZSB3ZSBmb3VuZCBvdGhlcndpc2UuICAqLwogCi1zdGF0aWMgY2hhciAqCitzdGF0aWMgWHJt RGF0YWJhc2UKIHNlYXJjaF9tYWdpY19wYXRoIChjb25zdCBjaGFyICpzZWFyY2hfcGF0aCwg Y29uc3QgY2hhciAqY2xhc3MsCiAJCSAgIGNvbnN0IGNoYXIgKmVzY2FwZWRfc3VmZml4KQog ewpAQCAtMjg2LDE4ICsyNjksMTYgQEAKIAogICAgICAgaWYgKHAgPiBzKQogCXsKLQkgIGNo YXIgKnBhdGggPSBtYWdpY19maWxlX3AgKHMsIHAgLSBzLCBjbGFzcywgZXNjYXBlZF9zdWZm aXgpOwotCSAgaWYgKHBhdGgpCi0JICAgIHJldHVybiBwYXRoOworCSAgWHJtRGF0YWJhc2Ug ZGIgPSBtYWdpY19kYiAocywgcCAtIHMsIGNsYXNzLCBlc2NhcGVkX3N1ZmZpeCk7CisJICBp ZiAoZGIpCisJICAgIHJldHVybiBkYjsKIAl9CiAgICAgICBlbHNlIGlmICgqcCA9PSAnOicp CiAJewotCSAgY2hhciAqcGF0aDsKLQotCSAgcyA9ICIlTiVTIjsKLQkgIHBhdGggPSBtYWdp Y19maWxlX3AgKHMsIHN0cmxlbiAocyksIGNsYXNzLCBlc2NhcGVkX3N1ZmZpeCk7Ci0JICBp ZiAocGF0aCkKLQkgICAgcmV0dXJuIHBhdGg7CisJICBzdGF0aWMgY2hhciBjb25zdCBuc1td ID0gIiVOJVMiOworCSAgWHJtRGF0YWJhc2UgZGIgPSBtYWdpY19kYiAobnMsIHN0cmxlbiAo bnMpLCBjbGFzcywgZXNjYXBlZF9zdWZmaXgpOworCSAgaWYgKGRiKQorCSAgICByZXR1cm4g ZGI7CiAJfQogCiAgICAgICBpZiAoKnAgPT0gJzonKQpAQCAtMzEyLDIxICsyOTMsMTIgQEAK IHN0YXRpYyBYcm1EYXRhYmFzZQogZ2V0X3N5c3RlbV9hcHAgKGNvbnN0IGNoYXIgKmNsYXNz KQogewotICBYcm1EYXRhYmFzZSBkYiA9IE5VTEw7CiAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0g IGNoYXIgKnA7CiAKICAgcGF0aCA9IGdldGVudiAoIlhGSUxFU0VBUkNIUEFUSCIpOwogICBp ZiAoISBwYXRoKSBwYXRoID0gUEFUSF9YX0RFRkFVTFRTOwogCi0gIHAgPSBzZWFyY2hfbWFn aWNfcGF0aCAocGF0aCwgY2xhc3MsIDApOwotICBpZiAocCkKLSAgICB7Ci0gICAgICBkYiA9 IFhybUdldEZpbGVEYXRhYmFzZSAocCk7Ci0gICAgICB4ZnJlZSAocCk7Ci0gICAgfQotCi0g IHJldHVybiBkYjsKKyAgcmV0dXJuIHNlYXJjaF9tYWdpY19wYXRoIChwYXRoLCBjbGFzcywg MCk7CiB9CiAKIApAQCAtMzQwLDM1ICszMTIsNDAgQEAKIHN0YXRpYyBYcm1EYXRhYmFzZQog Z2V0X3VzZXJfYXBwIChjb25zdCBjaGFyICpjbGFzcykKIHsKKyAgWHJtRGF0YWJhc2UgZGIg PSAwOwogICBjb25zdCBjaGFyICpwYXRoOwotICBjaGFyICpmaWxlID0gMDsKLSAgY2hhciAq ZnJlZV9pdCA9IDA7CiAKICAgLyogQ2hlY2sgZm9yIFhVU0VSRklMRVNFQVJDSFBBVEguICBJ dCBpcyBhIHBhdGggb2YgY29tcGxldGUgZmlsZQogICAgICBuYW1lcywgbm90IGRpcmVjdG9y aWVzLiAgKi8KLSAgaWYgKCgocGF0aCA9IGdldGVudiAoIlhVU0VSRklMRVNFQVJDSFBBVEgi KSkKLSAgICAgICAmJiAoZmlsZSA9IHNlYXJjaF9tYWdpY19wYXRoIChwYXRoLCBjbGFzcywg MCkpKQorICBwYXRoID0gZ2V0ZW52ICgiWFVTRVJGSUxFU0VBUkNIUEFUSCIpOworICBpZiAo cGF0aCkKKyAgICBkYiA9IHNlYXJjaF9tYWdpY19wYXRoIChwYXRoLCBjbGFzcywgMCk7CiAK KyAgaWYgKCEgZGIpCisgICAgewogICAgICAgLyogQ2hlY2sgZm9yIEFQUExSRVNESVI7IGl0 IGlzIGEgcGF0aCBvZiBkaXJlY3Rvcmllcy4gIEluIGVhY2gsCiAJIHdlIGhhdmUgdG8gc2Vh cmNoIGZvciBMQU5HL0NMQVNTIGFuZCB0aGVuIENMQVNTLiAgKi8KLSAgICAgIHx8ICgocGF0 aCA9IGdldGVudiAoIlhBUFBMUkVTRElSIikpCi0JICAmJiAoKGZpbGUgPSBzZWFyY2hfbWFn aWNfcGF0aCAocGF0aCwgY2xhc3MsICIvJUwvJU4iKSkKLQkgICAgICB8fCAoZmlsZSA9IHNl YXJjaF9tYWdpY19wYXRoIChwYXRoLCBjbGFzcywgIi8lTiIpKSkpCisgICAgICBwYXRoID0g Z2V0ZW52ICgiWEFQUExSRVNESVIiKTsKKyAgICAgIGlmIChwYXRoKQorCXsKKwkgIGRiID0g c2VhcmNoX21hZ2ljX3BhdGggKHBhdGgsIGNsYXNzLCAiLyVMLyVOIik7CisJICBpZiAoIWRi KQorCSAgICBkYiA9IHNlYXJjaF9tYWdpY19wYXRoIChwYXRoLCBjbGFzcywgIi8lTiIpOwor CX0KKyAgICB9CiAKKyAgaWYgKCEgZGIpCisgICAgewogICAgICAgLyogQ2hlY2sgaW4gdGhl IGhvbWUgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2s7IGxldCdzCiAJIGhv cGUgb25lJ3MgaG9tZSBkaXJlY3RvcnkgZG9lc24ndCBjb250YWluIGFueSAlLWVzY2FwZXMu ICAqLwotICAgICAgfHwgKGZyZWVfaXQgPSBnZXRob21lZGlyICgpLAotCSAgKChmaWxlID0g c2VhcmNoX21hZ2ljX3BhdGggKGZyZWVfaXQsIGNsYXNzLCAiJUwvJU4iKSkKLQkgICB8fCAo ZmlsZSA9IHNlYXJjaF9tYWdpY19wYXRoIChmcmVlX2l0LCBjbGFzcywgIiVOIikpKSkpCi0g ICAgewotICAgICAgWHJtRGF0YWJhc2UgZGIgPSBYcm1HZXRGaWxlRGF0YWJhc2UgKGZpbGUp OwotICAgICAgeGZyZWUgKGZpbGUpOwotICAgICAgeGZyZWUgKGZyZWVfaXQpOwotICAgICAg cmV0dXJuIGRiOworICAgICAgY2hhciAqaG9tZSA9IGdldGhvbWVkaXIgKCk7CisgICAgICBk YiA9IHNlYXJjaF9tYWdpY19wYXRoIChob21lLCBjbGFzcywgIiVMLyVOIik7CisgICAgICBp ZiAoISBkYikKKwlkYiA9IHNlYXJjaF9tYWdpY19wYXRoIChob21lLCBjbGFzcywgIiVOIik7 CisgICAgICB4ZnJlZSAoaG9tZSk7CiAgICAgfQogCi0gIHhmcmVlIChmcmVlX2l0KTsKLSAg cmV0dXJuIE5VTEw7CisgIHJldHVybiBkYjsKIH0KIAogCgo= --------------060907030404090208060400--