From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: Long lines and bidi Date: Sun, 10 Feb 2013 18:33:56 -0800 Organization: UCLA Computer Science Department Message-ID: <51185894.1050305@cs.ucla.edu> References: <877gmp5a04.fsf@ed.ac.uk> <83vca89izh.fsf@gnu.org> <5110906D.7020406@yandex.ru> <83fw1aac3d.fsf@gnu.org> <51120360.4060104@yandex.ru> <51127363.5030203@yandex.ru> <834nhp9u9j.fsf@gnu.org> <5114FEBB.8020201@yandex.ru> <838v6y99wk.fsf@gnu.org> <836222983u.fsf@gnu.org> <51152A00.6070101@yandex.ru> <83y5ey7npl.fsf@gnu.org> <5115C3BC.8020203@cs.ucla.edu> <83txpl7u3w.fsf@gnu.org> <5116113D.5070707@cs.ucla.edu> <83obft7rxa.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070805080702030009060308" X-Trace: ger.gmane.org 1360550076 14908 80.91.229.3 (11 Feb 2013 02:34:36 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 11 Feb 2013 02:34:36 +0000 (UTC) Cc: dmantipov@yandex.ru, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Feb 11 03:34:54 2013 Return-path: Envelope-to: ged-emacs-devel@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 1U4jEG-0006iZ-5V for ged-emacs-devel@m.gmane.org; Mon, 11 Feb 2013 03:34:48 +0100 Original-Received: from localhost ([::1]:34416 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U4jDw-0007cy-Q6 for ged-emacs-devel@m.gmane.org; Sun, 10 Feb 2013 21:34:28 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:40710) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U4jDn-0007bt-4A for emacs-devel@gnu.org; Sun, 10 Feb 2013 21:34:25 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U4jDf-0005dF-PY for emacs-devel@gnu.org; Sun, 10 Feb 2013 21:34:19 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:53189) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U4jDW-0005cJ-7x; Sun, 10 Feb 2013 21:34:02 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id BAF7F39E8105; Sun, 10 Feb 2013 18:34:00 -0800 (PST) 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 FWneclLw+yh4; Sun, 10 Feb 2013 18:33:56 -0800 (PST) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id B21BA39E8008; Sun, 10 Feb 2013 18:33:56 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 In-Reply-To: <83obft7rxa.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 131.179.128.62 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:156952 Archived-At: This is a multi-part message in MIME format. --------------070805080702030009060308 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 02/09/2013 01:33 AM, Eli Zaretskii wrote: > I'd use find_newline, since 2 out of 3 of its callers are > find_next_newline_no_quit and find_before_next_newline. OK, thanks, attached is a revised patch to do that. It also removes the confusing comments about carriage return, and identifies two or three more places where it's clearer to use memchr. --------------070805080702030009060308 Content-Type: text/plain; charset=UTF-8; name="memchr.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="memchr.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTMtMDIt MDEgMDY6MzA6NTEgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMy0wMi0wOSAwMzoxMjo0OCAr MDAwMApAQCAtOTcsNiArOTcsNyBAQAogbGliL3N0ZGlvLmgKIGxpYi9zdGRpbnQuaAogbGli L3N0ZGxpYi5oCitsaWIvc3RyaW5nLmgKIGxpYi9zeXMvCiBsaWIvU1lTCiBsaWIvdGltZS5o Cgo9PT0gbW9kaWZpZWQgZmlsZSAnQ2hhbmdlTG9nJwotLS0gQ2hhbmdlTG9nCTIwMTMtMDIt MTEgMDA6NTU6MjYgKzAwMDAKKysrIENoYW5nZUxvZwkyMDEzLTAyLTExIDAxOjI4OjEzICsw MDAwCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTMtMDItMTEgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0 QGNzLnVjbGEuZWR1PgorCisJVHVuZSBieSB1c2luZyBtZW1jaHIgYW5kIG1lbXJjaHIuCisJ KiAuYnpyaWdub3JlOiBBZGQgc3RyaW5nLmguCisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVs aWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwkqIGxpYi9tZW1yY2hyLmMsIGxpYi9zdHJpbmcu aW4uaCwgbTQvbWVtcmNoci5tNCwgbTQvc3RyaW5nX2gubTQ6CisJTmV3IGZpbGVzLCBmcm9t IGdudWxpYi4KKwogMjAxMy0wMi0xMSAgR2xlbm4gTW9ycmlzICA8cmdtQGdudS5vcmc+CiAK IAkqIGNvbmZpZ3VyZS5hYyAoZW1hY3NfY29uZmlnX29wdGlvbnMpOiBSZWNvcmQgc29tZSBl bnYgdmFycy4KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9DaGFuZ2VMb2cnCi0tLSBhZG1p bi9DaGFuZ2VMb2cJMjAxMy0wMi0wMSAwNjozMDo1MSArMDAwMAorKysgYWRtaW4vQ2hhbmdl TG9nCTIwMTMtMDItMTEgMDE6Mjg6NTkgKzAwMDAKQEAgLTEsMyArMSw4IEBACisyMDEzLTAy LTA5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVR1bmUgYnkgdXNp bmcgbWVtY2hyIGFuZCBtZW1yY2hyLgorCSogbWVyZ2UtZ251bGliIChHTlVMSUJfTU9EVUxF Uyk6IEFkZCBtZW1yY2hyLgorCiAyMDEzLTAyLTAxICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAogCVVzZSBmZG9wZW5kaXIsIGZzdGF0YXQgYW5kIHJlYWRsaW5rYXQs IGZvciBlZmZpY2llbmN5IChCdWcjMTM1MzkpLgoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWlu L21lcmdlLWdudWxpYicKLS0tIGFkbWluL21lcmdlLWdudWxpYgkyMDEzLTAyLTAxIDA2OjMw OjUxICswMDAwCisrKyBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0wMi0wOSAwMzoxMjo0OCAr MDAwMApAQCAtMzEsNyArMzEsOCBAQAogICBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52 aXJvbiBleGVjaW5mbyBmYWNjZXNzYXQKICAgZmNudGwtaCBmZG9wZW5kaXIgZmlsZW1vZGUg ZnN0YXRhdCBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkKICAg aWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3RhdAotICBtYW55d2FybmluZ3Mg bWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiByZWFkbGluayByZWFkbGlu a2F0CisgIG1hbnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZQorICBwc2VsZWN0IHB0aHJlYWRf c2lnbWFzayBwdXRlbnYgcmVhZGxpbmsgcmVhZGxpbmthdAogICBzaWcyc3RyIHNvY2tsZW4g c3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvCiAgIHN0cmZ0aW1lIHN0 cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdAogICBzeXNfdGltZSB0aW1lIHRp bWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zCgo9 PT0gbW9kaWZpZWQgZmlsZSAnbGliL2dudWxpYi5taycKLS0tIGxpYi9nbnVsaWIubWsJMjAx My0wMi0wOCAyMzozNzoxNyArMDAwMAorKysgbGliL2dudWxpYi5tawkyMDEzLTAyLTA5IDAz OjEyOjQ4ICswMDAwCkBAIC0yMSw3ICsyMSw3IEBACiAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlv biB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAjCiAjIEdlbmVyYXRlZCBi eSBnbnVsaWItdG9vbC4KLSMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAt LWRpcj0uIC0tbGliPWxpYmdudSAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9bTQgLS1k b2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1h dm9pZD1kdXAgLS1hdm9pZD1lcnJubyAtLWF2b2lkPWZjaGRpciAtLWF2b2lkPWZjbnRsIC0t YXZvaWQ9ZnN0YXQgLS1hdm9pZD1tYWxsb2MtcG9zaXggLS1hdm9pZD1tc3ZjLWludmFsIC0t YXZvaWQ9bXN2Yy1ub3Rocm93IC0tYXZvaWQ9b3BlbiAtLWF2b2lkPW9wZW5hdC1kaWUgLS1h dm9pZD1vcGVuZGlyIC0tYXZvaWQ9cmFpc2UgLS1hdm9pZD1zYXZlLWN3ZCAtLWF2b2lkPXNl bGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVzIC0tYXZvaWQ9dGhy ZWFkbGliIC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsgLS1jb25kaXRpb25hbC1kZXBlbmRl bmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYWxs b2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRsaW5rYXQgY2xvc2Utc3RyZWFtIGNy eXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1NiBjcnlwdG8vc2hhNTEyIGR0b2Fz dHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNpbmZvIGZhY2Nlc3NhdCBmY250bC1o IGZkb3BlbmRpciBmaWxlbW9kZSBmc3RhdGF0IGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0 aW1lIGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0 IG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJl YWRsaW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBz dGRhcmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxp bmsgc3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1l c3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncworIyBSZXByb2R1Y2UgYnk6IGdu dWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9 bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1h dXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5vIC0tYXZvaWQ9ZmNo ZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1hbGxvYy1wb3NpeCAt LWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1vcGVuIC0t YXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1yYWlzZSAtLWF2b2lk PXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1z eXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAt LWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9 Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxp bmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2 IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2lu Zm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRvcGVuZGlyIGZpbGVtb2RlIGZzdGF0YXQgZ2V0bG9h ZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5IGlnbm9yZS12YWx1ZSBpbnRw cm9wcyBsYXJnZWZpbGUgbHN0YXQgbWFueXdhcm5pbmdzIG1lbXJjaHIgbWt0aW1lIHBzZWxl Y3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiByZWFkbGluayByZWFkbGlua2F0IHNpZzJzdHIg c29ja2xlbiBzdGF0LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8gc3RyZnRp bWUgc3RydG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1lIHRpbWUg dGltZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0ZW52IHV0aW1lbnMg d2FybmluZ3MKIAogCiBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKQEAg LTQ4MCw2ICs0ODAsMTUgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBsc3RhdAogCisj IyBiZWdpbiBnbnVsaWIgbW9kdWxlIG1lbXJjaHIKKworCitFWFRSQV9ESVNUICs9IG1lbXJj aHIuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IG1lbXJjaHIuYworCisjIyBlbmQg ICBnbnVsaWIgbW9kdWxlIG1lbXJjaHIKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBta3Rp bWUKIAogCkBAIC0xMTA1LDYgKzExMTQsMTA2IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1 bGUgc3RyZnRpbWUKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJpbmcKKworQlVJTFRf U09VUkNFUyArPSBzdHJpbmcuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRl ciB0byBjcmVhdGUgPHN0cmluZy5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZl IG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorc3RyaW5nLmg6IHN0 cmluZy5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAk KEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VOKXJtIC1mICRA LXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFU SUNBTExZISAqLycgJiYgXAorCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxn JyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxn JyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9T WVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8 QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9TVFJJTkdfSCcn QHwkKE5FWFRfU1RSSU5HX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTCcn QC8kKEdOVUxJQl9GRlNMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0xMJydA LyQoR05VTElCX0ZGU0xMKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0xFTicn QC8kKEdOVUxJQl9NQlNMRU4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTTkxF TicnQC8kKEdOVUxJQl9NQlNOTEVOKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01C U0NIUicnQC8kKEdOVUxJQl9NQlNDSFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJf TUJTUkNIUicnQC8kKEdOVUxJQl9NQlNSQ0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05V TElCX01CU1NUUicnQC8kKEdOVUxJQl9NQlNTVFIpL2cnIFwKKwkgICAgICAtZSAncy9AJydH TlVMSUJfTUJTQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNDQVNFQ01QKS9nJyBcCisJICAgICAg LWUgJ3MvQCcnR05VTElCX01CU05DQVNFQ01QJydALyQoR05VTElCX01CU05DQVNFQ01QKS9n JyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1BDQVNFQ01QJydALyQoR05VTElCX01C U1BDQVNFQ01QKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VTVFInJ0Av JChHTlVMSUJfTUJTQ0FTRVNUUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlND U1BOJydALyQoR05VTElCX01CU0NTUE4pL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJf TUJTUEJSSycnQC8kKEdOVUxJQl9NQlNQQlJLKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05V TElCX01CU1NQTicnQC8kKEdOVUxJQl9NQlNTUE4pL2cnIFwKKwkgICAgICAtZSAncy9AJydH TlVMSUJfTUJTU0VQJydALyQoR05VTElCX01CU1NFUCkvZycgXAorCSAgICAgIC1lICdzL0An J0dOVUxJQl9NQlNUT0tfUicnQC8kKEdOVUxJQl9NQlNUT0tfUikvZycgXAorCSAgICAgIC1l ICdzL0AnJ0dOVUxJQl9NRU1DSFInJ0AvJChHTlVMSUJfTUVNQ0hSKS9nJyBcCisJICAgICAg LWUgJ3MvQCcnR05VTElCX01FTU1FTScnQC8kKEdOVUxJQl9NRU1NRU0pL2cnIFwKKwkgICAg ICAtZSAncy9AJydHTlVMSUJfTUVNUENQWScnQC8kKEdOVUxJQl9NRU1QQ1BZKS9nJyBcCisJ ICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVJDSFInJ0AvJChHTlVMSUJfTUVNUkNIUikvZycg XAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQVdNRU1DSFInJ0AvJChHTlVMSUJfUkFXTUVN Q0hSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUENQWScnQC8kKEdOVUxJQl9T VFBDUFkpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQTkNQWScnQC8kKEdOVUxJ Ql9TVFBOQ1BZKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNIUk5VTCcnQC8k KEdOVUxJQl9TVFJDSFJOVUwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRFVQ JydALyQoR05VTElCX1NUUkRVUCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJO Q0FUJydALyQoR05VTElCX1NUUk5DQVQpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJf U1RSTkRVUCcnQC8kKEdOVUxJQl9TVFJORFVQKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05V TElCX1NUUk5MRU4nJ0AvJChHTlVMSUJfU1RSTkxFTikvZycgXAorCSAgICAgIC1lICdzL0An J0dOVUxJQl9TVFJQQlJLJydALyQoR05VTElCX1NUUlBCUkspL2cnIFwKKwkgICAgICAtZSAn cy9AJydHTlVMSUJfU1RSU0VQJydALyQoR05VTElCX1NUUlNFUCkvZycgXAorCSAgICAgIC1l ICdzL0AnJ0dOVUxJQl9TVFJTVFInJ0AvJChHTlVMSUJfU1RSU1RSKS9nJyBcCisJICAgICAg LWUgJ3MvQCcnR05VTElCX1NUUkNBU0VTVFInJ0AvJChHTlVMSUJfU1RSQ0FTRVNUUikvZycg XAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0tfUicnQC8kKEdOVUxJQl9TVFJUT0tf UikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUicnQC8kKEdOVUxJQl9T VFJFUlJPUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUl9SJydALyQo R05VTElCX1NUUkVSUk9SX1IpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU0lH TkFMJydALyQoR05VTElCX1NUUlNJR05BTCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJ Ql9TVFJWRVJTQ01QJydALyQoR05VTElCX1NUUlZFUlNDTVApL2cnIFwKKwkgICAgICA8ICQo c3JjZGlyKS9zdHJpbmcuaW4uaCB8IFwKKwkgIHNlZCAtZSAnc3xAJydIQVZFX0ZGU0wnJ0B8 JChIQVZFX0ZGU0wpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0ZGU0xMJydAfCQoSEFW RV9GRlNMTCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9N QlNMRU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01FTUNIUicnQHwkKEhBVkVfTUVN Q0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX01FTU1FTScnQHwkKEhBVkVf REVDTF9NRU1NRU0pfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX01FTVBDUFknJ0B8JChI QVZFX01FTVBDUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNUkNIUicn QHwkKEhBVkVfREVDTF9NRU1SQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9SQVdN RU1DSFInJ0B8JChIQVZFX1JBV01FTUNIUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVf U1RQQ1BZJydAfCQoSEFWRV9TVFBDUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NU UE5DUFknJ0B8JChIQVZFX1NUUE5DUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NU UkNIUk5VTCcnQHwkKEhBVkVfU1RSQ0hSTlVMKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSEFW RV9ERUNMX1NUUkRVUCcnQHwkKEhBVkVfREVDTF9TVFJEVVApfGcnIFwKKwkgICAgICAtZSAn c3xAJydIQVZFX0RFQ0xfU1RSTkRVUCcnQHwkKEhBVkVfREVDTF9TVFJORFVQKXxnJyBcCisJ ICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX1NUUk5MRU4nJ0B8JChIQVZFX0RFQ0xfU1RSTkxF Til8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSUEJSSycnQHwkKEhBVkVfU1RSUEJS Syl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSU0VQJydAfCQoSEFWRV9TVFJTRVAp fGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX1NUUkNBU0VTVFInJ0B8JChIQVZFX1NUUkNB U0VTVFIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RSVE9LX1InJ0B8JChI QVZFX0RFQ0xfU1RSVE9LX1IpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfU1RS RVJST1JfUicnQHwkKEhBVkVfREVDTF9TVFJFUlJPUl9SKXxnJyBcCisJICAgICAgLWUgJ3N8 QCcnSEFWRV9ERUNMX1NUUlNJR05BTCcnQHwkKEhBVkVfREVDTF9TVFJTSUdOQUwpfGcnIFwK KwkgICAgICAtZSAnc3xAJydIQVZFX1NUUlZFUlNDTVAnJ0B8JChIQVZFX1NUUlZFUlNDTVAp fGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX1NUUE5DUFknJ0B8JChSRVBMQUNFX1NU UE5DUFkpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX01FTUNIUicnQHwkKFJFUExB Q0VfTUVNQ0hSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9NRU1NRU0nJ0B8JChS RVBMQUNFX01FTU1FTSl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSQ0FTRVNU UicnQHwkKFJFUExBQ0VfU1RSQ0FTRVNUUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExB Q0VfU1RSQ0hSTlVMJydAfCQoUkVQTEFDRV9TVFJDSFJOVUwpfGcnIFwKKwkgICAgICAtZSAn c3xAJydSRVBMQUNFX1NUUkRVUCcnQHwkKFJFUExBQ0VfU1RSRFVQKXxnJyBcCisJICAgICAg LWUgJ3N8QCcnUkVQTEFDRV9TVFJTVFInJ0B8JChSRVBMQUNFX1NUUlNUUil8ZycgXAorCSAg ICAgIC1lICdzfEAnJ1JFUExBQ0VfU1RSRVJST1InJ0B8JChSRVBMQUNFX1NUUkVSUk9SKXxn JyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJFUlJPUl9SJydAfCQoUkVQTEFDRV9T VFJFUlJPUl9SKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJOQ0FUJydAfCQo UkVQTEFDRV9TVFJOQ0FUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9TVFJORFVQ JydAfCQoUkVQTEFDRV9TVFJORFVQKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9T VFJOTEVOJydAfCQoUkVQTEFDRV9TVFJOTEVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQ TEFDRV9TVFJTSUdOQUwnJ0B8JChSRVBMQUNFX1NUUlNJR05BTCl8ZycgXAorCSAgICAgIC1l ICdzfEAnJ1JFUExBQ0VfU1RSVE9LX1InJ0B8JChSRVBMQUNFX1NUUlRPS19SKXxnJyBcCisJ ICAgICAgLWUgJ3N8QCcnVU5ERUZJTkVfU1RSVE9LX1InJ0B8JChVTkRFRklORV9TVFJUT0tf Uil8ZycgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9y ICQoQ1hYREVGU19IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05P Tk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisJICAgICAgLWUgJy9kZWZpbml0aW9uIG9m IF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknOyBcCisJICAgICAgPCAkKHNy Y2Rpcikvc3RyaW5nLmluLmg7IFwKKwl9ID4gJEAtdCAmJiBcCisJbXYgJEAtdCAkQAorTU9T VExZQ0xFQU5GSUxFUyArPSBzdHJpbmcuaCBzdHJpbmcuaC10CisKK0VYVFJBX0RJU1QgKz0g c3RyaW5nLmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJpbmcKKwogIyMgYmVn aW4gZ251bGliIG1vZHVsZSBzdHJ0b2ltYXgKIAogCgo9PT0gYWRkZWQgZmlsZSAnbGliL21l bXJjaHIuYycKLS0tIGxpYi9tZW1yY2hyLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgbGliL21lbXJjaHIuYwkyMDEzLTAyLTA5IDAzOjEyOjQ4ICswMDAwCkBAIC0wLDAgKzEs MTYxIEBACisvKiBtZW1yY2hyIC0tIGZpbmQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGJ5 dGUgaW4gYSBtZW1vcnkgYmxvY2sKKworICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkzLCAx OTk2LTE5OTcsIDE5OTktMjAwMCwgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k YXRpb24sIEluYy4KKworICAgQmFzZWQgb24gc3RybGVuIGltcGxlbWVudGF0aW9uIGJ5IFRv cmJqb3JuIEdyYW5sdW5kICh0ZWdlQHNpY3Muc2UpLAorICAgd2l0aCBoZWxwIGZyb20gRGFu IFNhaGxpbiAoZGFuQHNpY3Muc2UpIGFuZAorICAgY29tbWVudGFyeSBieSBKaW0gQmxhbmR5 IChqaW1iQGFpLm1pdC5lZHUpOworICAgYWRhcHRhdGlvbiB0byBtZW1jaHIgc3VnZ2VzdGVk IGJ5IERpY2sgS2FycGluc2tpIChkaWNrQGNjYS51Y3NmLmVkdSksCisgICBhbmQgaW1wbGVt ZW50ZWQgYnkgUm9sYW5kIE1jR3JhdGggKHJvbGFuZEBhaS5taXQuZWR1KS4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2lmIGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bWVtY29weS5oPgorI2Vsc2UK KyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjIGRlZmluZSByZWdfY2hhciBjaGFyCisjZW5kaWYK KworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjdW5kZWYg X19tZW1yY2hyCisjaWZkZWYgX0xJQkMKKyMgdW5kZWYgbWVtcmNocgorI2VuZGlmCisKKyNp Zm5kZWYgd2Vha19hbGlhcworIyBkZWZpbmUgX19tZW1yY2hyIG1lbXJjaHIKKyNlbmRpZgor CisvKiBTZWFyY2ggbm8gbW9yZSB0aGFuIE4gYnl0ZXMgb2YgUyBmb3IgQy4gICovCit2b2lk ICoKK19fbWVtcmNociAodm9pZCBjb25zdCAqcywgaW50IGNfaW4sIHNpemVfdCBuKQorewor ICAvKiBPbiAzMi1iaXQgaGFyZHdhcmUsIGNob29zaW5nIGxvbmd3b3JkIHRvIGJlIGEgMzIt Yml0IHVuc2lnbmVkCisgICAgIGxvbmcgaW5zdGVhZCBvZiBhIDY0LWJpdCB1aW50bWF4X3Qg dGVuZHMgdG8gZ2l2ZSBiZXR0ZXIKKyAgICAgcGVyZm9ybWFuY2UuICBPbiA2NC1iaXQgaGFy ZHdhcmUsIHVuc2lnbmVkIGxvbmcgaXMgZ2VuZXJhbGx5IDY0CisgICAgIGJpdHMgYWxyZWFk eS4gIENoYW5nZSB0aGlzIHR5cGVkZWYgdG8gZXhwZXJpbWVudCB3aXRoCisgICAgIHBlcmZv cm1hbmNlLiAgKi8KKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBsb25nd29yZDsKKwor ICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFyX3B0cjsKKyAgY29uc3QgbG9uZ3dvcmQgKmxv bmd3b3JkX3B0cjsKKyAgbG9uZ3dvcmQgcmVwZWF0ZWRfb25lOworICBsb25nd29yZCByZXBl YXRlZF9jOworICB1bnNpZ25lZCByZWdfY2hhciBjOworCisgIGMgPSAodW5zaWduZWQgY2hh cikgY19pbjsKKworICAvKiBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIGJ5IHJlYWRpbmcg b25lIGJ5dGUgYXQgYSB0aW1lLgorICAgICBEbyB0aGlzIHVudGlsIENIQVJfUFRSIGlzIGFs aWduZWQgb24gYSBsb25nd29yZCBib3VuZGFyeS4gICovCisgIGZvciAoY2hhcl9wdHIgPSAo Y29uc3QgdW5zaWduZWQgY2hhciAqKSBzICsgbjsKKyAgICAgICBuID4gMCAmJiAoc2l6ZV90 KSBjaGFyX3B0ciAlIHNpemVvZiAobG9uZ3dvcmQpICE9IDA7CisgICAgICAgLS1uKQorICAg IGlmICgqLS1jaGFyX3B0ciA9PSBjKQorICAgICAgcmV0dXJuICh2b2lkICopIGNoYXJfcHRy OworCisgIGxvbmd3b3JkX3B0ciA9IChjb25zdCBsb25nd29yZCAqKSBjaGFyX3B0cjsKKwor ICAvKiBBbGwgdGhlc2UgZWx1Y2lkYXRvcnkgY29tbWVudHMgcmVmZXIgdG8gNC1ieXRlIGxv bmd3b3JkcywKKyAgICAgYnV0IHRoZSB0aGVvcnkgYXBwbGllcyBlcXVhbGx5IHdlbGwgdG8g YW55IHNpemUgbG9uZ3dvcmRzLiAgKi8KKworICAvKiBDb21wdXRlIGF1eGlsaWFyeSBsb25n d29yZCB2YWx1ZXM6CisgICAgIHJlcGVhdGVkX29uZSBpcyBhIHZhbHVlIHdoaWNoIGhhcyBh IDEgaW4gZXZlcnkgYnl0ZS4KKyAgICAgcmVwZWF0ZWRfYyBoYXMgYyBpbiBldmVyeSBieXRl LiAgKi8KKyAgcmVwZWF0ZWRfb25lID0gMHgwMTAxMDEwMTsKKyAgcmVwZWF0ZWRfYyA9IGMg fCAoYyA8PCA4KTsKKyAgcmVwZWF0ZWRfYyB8PSByZXBlYXRlZF9jIDw8IDE2OworICBpZiAo MHhmZmZmZmZmZlUgPCAobG9uZ3dvcmQpIC0xKQorICAgIHsKKyAgICAgIHJlcGVhdGVkX29u ZSB8PSByZXBlYXRlZF9vbmUgPDwgMzEgPDwgMTsKKyAgICAgIHJlcGVhdGVkX2MgfD0gcmVw ZWF0ZWRfYyA8PCAzMSA8PCAxOworICAgICAgaWYgKDggPCBzaXplb2YgKGxvbmd3b3JkKSkK KyAgICAgICAgeworICAgICAgICAgIHNpemVfdCBpOworCisgICAgICAgICAgZm9yIChpID0g NjQ7IGkgPCBzaXplb2YgKGxvbmd3b3JkKSAqIDg7IGkgKj0gMikKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgcmVwZWF0ZWRfb25lIHw9IHJlcGVhdGVkX29uZSA8PCBpOworICAg ICAgICAgICAgICByZXBlYXRlZF9jIHw9IHJlcGVhdGVkX2MgPDwgaTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworICAvKiBJbnN0ZWFkIG9mIHRoZSB0cmFkaXRpb25h bCBsb29wIHdoaWNoIHRlc3RzIGVhY2ggYnl0ZSwgd2Ugd2lsbCB0ZXN0IGEKKyAgICAgbG9u Z3dvcmQgYXQgYSB0aW1lLiAgVGhlIHRyaWNreSBwYXJ0IGlzIHRlc3RpbmcgaWYgKmFueSBv ZiB0aGUgZm91cioKKyAgICAgYnl0ZXMgaW4gdGhlIGxvbmd3b3JkIGluIHF1ZXN0aW9uIGFy ZSBlcXVhbCB0byBjLiAgV2UgZmlyc3QgdXNlIGFuIHhvcgorICAgICB3aXRoIHJlcGVhdGVk X2MuICBUaGlzIHJlZHVjZXMgdGhlIHRhc2sgdG8gdGVzdGluZyB3aGV0aGVyICphbnkgb2Yg dGhlCisgICAgIGZvdXIqIGJ5dGVzIGluIGxvbmd3b3JkMSBpcyB6ZXJvLgorCisgICAgIFdl IGNvbXB1dGUgdG1wID0KKyAgICAgICAoKGxvbmd3b3JkMSAtIHJlcGVhdGVkX29uZSkgJiB+ bG9uZ3dvcmQxKSAmIChyZXBlYXRlZF9vbmUgPDwgNykuCisgICAgIFRoYXQgaXMsIHdlIHBl cmZvcm0gdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgorICAgICAgIDEuIFN1YnRyYWN0IHJl cGVhdGVkX29uZS4KKyAgICAgICAyLiAmIH5sb25nd29yZDEuCisgICAgICAgMy4gJiBhIG1h c2sgY29uc2lzdGluZyBvZiAweDgwIGluIGV2ZXJ5IGJ5dGUuCisgICAgIENvbnNpZGVyIHdo YXQgaGFwcGVucyBpbiBlYWNoIGJ5dGU6CisgICAgICAgLSBJZiBhIGJ5dGUgb2YgbG9uZ3dv cmQxIGlzIHplcm8sIHN0ZXAgMSBhbmQgMiB0cmFuc2Zvcm0gaXQgaW50byAweGZmLAorICAg ICAgICAgYW5kIHN0ZXAgMyB0cmFuc2Zvcm1zIGl0IGludG8gMHg4MC4gIEEgY2FycnkgY2Fu IGFsc28gYmUgcHJvcGFnYXRlZAorICAgICAgICAgdG8gbW9yZSBzaWduaWZpY2FudCBieXRl cy4KKyAgICAgICAtIElmIGEgYnl0ZSBvZiBsb25nd29yZDEgaXMgbm9uemVybywgbGV0IGl0 cyBsb3dlc3QgMSBiaXQgYmUgYXQKKyAgICAgICAgIHBvc2l0aW9uIGsgKDAgPD0gayA8PSA3 KTsgc28gdGhlIGxvd2VzdCBrIGJpdHMgYXJlIDAuICBBZnRlciBzdGVwIDEsCisgICAgICAg ICB0aGUgYnl0ZSBlbmRzIGluIGEgc2luZ2xlIGJpdCBvZiB2YWx1ZSAwIGFuZCBrIGJpdHMg b2YgdmFsdWUgMS4KKyAgICAgICAgIEFmdGVyIHN0ZXAgMiwgdGhlIHJlc3VsdCBpcyBqdXN0 IGsgYml0cyBvZiB2YWx1ZSAxOiAyXmsgLSAxLiAgQWZ0ZXIKKyAgICAgICAgIHN0ZXAgMywg dGhlIHJlc3VsdCBpcyAwLiAgQW5kIG5vIGNhcnJ5IGlzIHByb2R1Y2VkLgorICAgICBTbywg aWYgbG9uZ3dvcmQxIGhhcyBvbmx5IG5vbi16ZXJvIGJ5dGVzLCB0bXAgaXMgemVyby4KKyAg ICAgV2hlcmVhcyBpZiBsb25nd29yZDEgaGFzIGEgemVybyBieXRlLCBjYWxsIGogdGhlIHBv c2l0aW9uIG9mIHRoZSBsZWFzdAorICAgICBzaWduaWZpY2FudCB6ZXJvIGJ5dGUuICBUaGVu IHRoZSByZXN1bHQgaGFzIGEgemVybyBhdCBwb3NpdGlvbnMgMCwgLi4uLAorICAgICBqLTEg YW5kIGEgMHg4MCBhdCBwb3NpdGlvbiBqLiAgV2UgY2Fubm90IHByZWRpY3QgdGhlIHJlc3Vs dCBhdCB0aGUgbW9yZQorICAgICBzaWduaWZpY2FudCBieXRlcyAocG9zaXRpb25zIGorMS4u MyksIGJ1dCBpdCBkb2VzIG5vdCBtYXR0ZXIgc2luY2Ugd2UKKyAgICAgYWxyZWFkeSBoYXZl IGEgbm9uLXplcm8gYml0IGF0IHBvc2l0aW9uIDgqais3LgorCisgICAgIFNvLCB0aGUgdGVz dCB3aGV0aGVyIGFueSBieXRlIGluIGxvbmd3b3JkMSBpcyB6ZXJvIGlzIGVxdWl2YWxlbnQg dG8KKyAgICAgdGVzdGluZyB3aGV0aGVyIHRtcCBpcyBub256ZXJvLiAgKi8KKworICB3aGls ZSAobiA+PSBzaXplb2YgKGxvbmd3b3JkKSkKKyAgICB7CisgICAgICBsb25nd29yZCBsb25n d29yZDEgPSAqLS1sb25nd29yZF9wdHIgXiByZXBlYXRlZF9jOworCisgICAgICBpZiAoKCgo bG9uZ3dvcmQxIC0gcmVwZWF0ZWRfb25lKSAmIH5sb25nd29yZDEpCisgICAgICAgICAgICYg KHJlcGVhdGVkX29uZSA8PCA3KSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGxvbmd3 b3JkX3B0cisrOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBuIC09IHNp emVvZiAobG9uZ3dvcmQpOworICAgIH0KKworICBjaGFyX3B0ciA9IChjb25zdCB1bnNpZ25l ZCBjaGFyICopIGxvbmd3b3JkX3B0cjsKKworICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93 IHRoYXQgZWl0aGVyIG4gPCBzaXplb2YgKGxvbmd3b3JkKSwgb3Igb25lIG9mIHRoZQorICAg ICBzaXplb2YgKGxvbmd3b3JkKSBieXRlcyBzdGFydGluZyBhdCBjaGFyX3B0ciBpcyA9PSBj LiAgT24gbGl0dGxlLWVuZGlhbgorICAgICBtYWNoaW5lcywgd2UgY291bGQgZGV0ZXJtaW5l IHRoZSBmaXJzdCBzdWNoIGJ5dGUgd2l0aG91dCBhbnkgZnVydGhlcgorICAgICBtZW1vcnkg YWNjZXNzZXMsIGp1c3QgYnkgbG9va2luZyBhdCB0aGUgdG1wIHJlc3VsdCBmcm9tIHRoZSBs YXN0IGxvb3AKKyAgICAgaXRlcmF0aW9uLiAgQnV0IHRoaXMgZG9lcyBub3Qgd29yayBvbiBi aWctZW5kaWFuIG1hY2hpbmVzLiAgQ2hvb3NlIGNvZGUKKyAgICAgdGhhdCB3b3JrcyBpbiBi b3RoIGNhc2VzLiAgKi8KKworICB3aGlsZSAobi0tID4gMCkKKyAgICB7CisgICAgICBpZiAo Ki0tY2hhcl9wdHIgPT0gYykKKyAgICAgICAgcmV0dXJuICh2b2lkICopIGNoYXJfcHRyOwor ICAgIH0KKworICByZXR1cm4gTlVMTDsKK30KKyNpZmRlZiB3ZWFrX2FsaWFzCit3ZWFrX2Fs aWFzIChfX21lbXJjaHIsIG1lbXJjaHIpCisjZW5kaWYKCj09PSBhZGRlZCBmaWxlICdsaWIv c3RyaW5nLmluLmgnCi0tLSBsaWIvc3RyaW5nLmluLmgJMTk3MC0wMS0wMSAwMDowMDowMCAr MDAwMAorKysgbGliL3N0cmluZy5pbi5oCTIwMTMtMDItMDkgMDM6MTI6NDggKzAwMDAKQEAg LTAsMCArMSwxMDI5IEBACisvKiBBIEdOVS1saWtlIDxzdHJpbmcuaD4uCisKKyAgIENvcHly aWdodCAoQykgMTk5NS0xOTk2LCAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlv dXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKworI2lmIF9fR05VQ19f ID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNlbmRpZgorQFBSQUdNQV9DT0xVTU5T QAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1 c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RSSU5HX0hACisKKyNp Zm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklY QF9TVFJJTkdfSAorCisvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworI2lu Y2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBNaXJCU0QgZGVmaW5lcyBtYnNsZW4gYXMgYSBtYWNy by4gICovCisjaWYgQEdOVUxJQl9NQlNMRU5AICYmIGRlZmluZWQgX19NaXJCU0RfXworIyBp bmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1 cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhl IGF0dHJpYnV0ZSBfX3B1cmVfXyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9f R05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikK KyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KQorI2Vsc2UKKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2Vu ZGlmCisKKy8qIE5ldEJTRCA1LjAgZGVjbGFyZXMgc3Ryc2lnbmFsIGluIDx1bmlzdGQuaD4s IG5vdCBpbiA8c3RyaW5nLmg+LiAgKi8KKy8qIEJ1dCBpbiBhbnkgY2FzZSBhdm9pZCBuYW1l c3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworI2lmIChAR05VTElCX1NU UlNJR05BTEAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgJiYgZGVmaW5lZCBfX05l dEJTRF9fIFwKKyAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCisjIGluY2x1ZGUgPHVuaXN0 ZC5oPgorI2VuZGlmCisKKy8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBM IGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dM X0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJlLiAgKi8KKworLyogVGhlIGRlZmluaXRpb24g b2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKworCisvKiBGaW5kIHRo ZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCisjaWYgQEdO VUxJQl9GRlNMQAorIyBpZiAhQEhBVkVfRkZTTEAKK19HTF9GVU5DREVDTF9TWVMgKGZmc2ws IGludCwgKGxvbmcgaW50IGkpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGZmc2ws IGludCwgKGxvbmcgaW50IGkpKTsKK19HTF9DWFhBTElBU1dBUk4gKGZmc2wpOworI2VsaWYg ZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZnNsCisjIGlmIEhBVkVfUkFX X0RFQ0xfRkZTTAorX0dMX1dBUk5fT05fVVNFIChmZnNsLCAiZmZzbCBpcyBub3QgcG9ydGFi bGUgLSB1c2UgdGhlIGZmc2wgbW9kdWxlIik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBG aW5kIHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgc2V0IGJpdC4gICovCisj aWYgQEdOVUxJQl9GRlNMTEAKKyMgaWYgIUBIQVZFX0ZGU0xMQAorX0dMX0ZVTkNERUNMX1NZ UyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworIyBlbmRpZgorX0dMX0NYWEFM SUFTX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworX0dMX0NYWEFMSUFT V0FSTiAoZmZzbGwpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRl ZiBmZnNsbAorIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0xMCitfR0xfV0FSTl9PTl9VU0UgKGZm c2xsLCAiZmZzbGwgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsbCBtb2R1bGUiKTsK KyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFJldHVybiB0aGUgZmlyc3QgaW5zdGFuY2Ugb2Yg QyB3aXRoaW4gTiBieXRlcyBvZiBTLCBvciBOVUxMLiAgKi8KKyNpZiBAR05VTElCX01FTUNI UkAKKyMgaWYgQFJFUExBQ0VfTUVNQ0hSQAorIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVz ICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUgbWVtY2hyIHJwbF9t ZW1jaHIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtZW1jaHIsIHZvaWQgKiwgKHZv aWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFT X1JQTCAobWVtY2hyLCB2b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2MsIHNpemVf dCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9NRU1DSFJACitfR0xfRlVOQ0RFQ0xf U1lTIChtZW1jaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKl9fcywgaW50IF9fYywgc2l6ZV90 IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRF X1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5V TEwgKCgxKSkpOworIyAgZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0 aW9uIGlzIGRlZmluZWQgYXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRl cm4gIkMiIHsgY29uc3Qgdm9pZCAqIHN0ZDo6bWVtY2hyIChjb25zdCB2b2lkICosIGludCwg c2l6ZV90KTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IHZvaWQgKiBzdGQ6Om1lbWNociAo dm9pZCAqLCBpbnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyICht ZW1jaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosICh2b2lkIGNvbnN0ICpf X3MsIGludCBfX2MsIHNpemVfdCBfX24pLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCBjb25zdCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSk7Cisj IGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEw KSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwg KF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNX QVJOMSAobWVtY2hyLCB2b2lkICosICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p KTsKK19HTF9DWFhBTElBU1dBUk4xIChtZW1jaHIsIHZvaWQgY29uc3QgKiwKKyAgICAgICAg ICAgICAgICAgICAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSk7Cisj IGVsc2UKK19HTF9DWFhBTElBU1dBUk4gKG1lbWNocik7CisjIGVuZGlmCisjZWxpZiBkZWZp bmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG1lbWNocgorLyogQXNzdW1lIG1lbWNo ciBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChtZW1jaHIsICJt ZW1jaHIgaGFzIHBsYXRmb3JtLXNwZWNpZmljIGJ1Z3MgLSAiCisgICAgICAgICAgICAgICAg ICJ1c2UgZ251bGliIG1vZHVsZSBtZW1jaHIgZm9yIHBvcnRhYmlsaXR5IiApOworI2VuZGlm CisKKy8qIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBORUVETEUgaW4gSEFZU1RB Q0suICAqLworI2lmIEBHTlVMSUJfTUVNTUVNQAorIyBpZiBAUkVQTEFDRV9NRU1NRU1ACisj ICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNF KQorIyAgIGRlZmluZSBtZW1tZW0gcnBsX21lbW1lbQorIyAgZW5kaWYKK19HTF9GVU5DREVD TF9SUEwgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3Qg Kl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAg ICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikKKyAgICAgICAg ICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dMX0FS R19OT05OVUxMICgoMSwgMykpKTsKK19HTF9DWFhBTElBU19SUEwgKG1lbW1lbSwgdm9pZCAq LAorICAgICAgICAgICAgICAgICAgKHZvaWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBf X2hheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRs ZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX0RFQ0xf TUVNTUVNQAorX0dMX0ZVTkNERUNMX1NZUyAobWVtbWVtLCB2b2lkICosCisgICAgICAgICAg ICAgICAgICAodm9pZCBjb25zdCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tfbGVu LAorICAgICAgICAgICAgICAgICAgIHZvaWQgY29uc3QgKl9fbmVlZGxlLCBzaXplX3QgX19u ZWVkbGVfbGVuKQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAg ICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAzKSkpOworIyAgZW5kaWYKK19H TF9DWFhBTElBU19TWVMgKG1lbW1lbSwgdm9pZCAqLAorICAgICAgICAgICAgICAgICAgKHZv aWQgY29uc3QgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrX2xlbiwKKyAgICAgICAg ICAgICAgICAgICB2b2lkIGNvbnN0ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlX2xlbikp OworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWVtbWVtKTsKKyNlbGlmIGRlZmluZWQg R05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgbWVtbWVtCisjIGlmIEhBVkVfUkFXX0RFQ0xf TUVNTUVNCitfR0xfV0FSTl9PTl9VU0UgKG1lbW1lbSwgIm1lbW1lbSBpcyB1bnBvcnRhYmxl IGFuZCBvZnRlbiBxdWFkcmF0aWMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGli IG1vZHVsZSBtZW1tZW0tc2ltcGxlIGZvciBwb3J0YWJpbGl0eSwgIgorICAgICAgICAgICAg ICAgICAiYW5kIG1vZHVsZSBtZW1tZW0gZm9yIHNwZWVkIiApOworIyBlbmRpZgorI2VuZGlm CisKKy8qIENvcHkgTiBieXRlcyBvZiBTUkMgdG8gREVTVCwgcmV0dXJuIHBvaW50ZXIgdG8g Ynl0ZXMgYWZ0ZXIgdGhlCisgICBsYXN0IHdyaXR0ZW4gYnl0ZS4gICovCisjaWYgQEdOVUxJ Ql9NRU1QQ1BZQAorIyBpZiAhIEBIQVZFX01FTVBDUFlACitfR0xfRlVOQ0RFQ0xfU1lTICht ZW1wY3B5LCB2b2lkICosCisgICAgICAgICAgICAgICAgICAodm9pZCAqcmVzdHJpY3QgX19k ZXN0LCB2b2lkIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikp KTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKG1lbXBjcHksIHZvaWQgKiwKKyAgICAg ICAgICAgICAgICAgICh2b2lkICpyZXN0cmljdCBfX2Rlc3QsIHZvaWQgY29uc3QgKnJlc3Ry aWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKK19HTF9DWFhB TElBU1dBUk4gKG1lbXBjcHkpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSwor IyB1bmRlZiBtZW1wY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfTUVNUENQWQorX0dMX1dBUk5f T05fVVNFIChtZW1wY3B5LCAibWVtcGNweSBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAg ICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgbWVtcGNweSBmb3IgcG9ydGFiaWxpdHkiKTsK KyMgZW5kaWYKKyNlbmRpZgorCisvKiBTZWFyY2ggYmFja3dhcmRzIHRocm91Z2ggYSBibG9j ayBmb3IgYSBieXRlIChzcGVjaWZpZWQgYXMgYW4gaW50KS4gICovCisjaWYgQEdOVUxJQl9N RU1SQ0hSQAorIyBpZiAhIEBIQVZFX0RFQ0xfTUVNUkNIUkAKK19HTF9GVU5DREVDTF9TWVMg KG1lbXJjaHIsIHZvaWQgKiwgKHZvaWQgY29uc3QgKiwgaW50LCBzaXplX3QpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOwor IyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5l ZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNv bnN0IHZvaWQgKiBzdGQ6Om1lbXJjaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOyB9 CisgICAgICAgZXh0ZXJuICJDKysiIHsgdm9pZCAqIHN0ZDo6bWVtcmNociAodm9pZCAqLCBp bnQsIHNpemVfdCk7IH0gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChtZW1yY2hyLAor ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCAodm9pZCBjb25zdCAqLCBpbnQsIHNp emVfdCksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICosICh2b2lkIGNv bnN0ICosIGludCwgc2l6ZV90KSk7CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElC Q19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChf X0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkp CitfR0xfQ1hYQUxJQVNXQVJOMSAobWVtcmNociwgdm9pZCAqLCAodm9pZCAqLCBpbnQsIHNp emVfdCkpOworX0dMX0NYWEFMSUFTV0FSTjEgKG1lbXJjaHIsIHZvaWQgY29uc3QgKiwgKHZv aWQgY29uc3QgKiwgaW50LCBzaXplX3QpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAo bWVtcmNocik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisj IHVuZGVmIG1lbXJjaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9NRU1SQ0hSCitfR0xfV0FSTl9P Tl9VU0UgKG1lbXJjaHIsICJtZW1yY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAg ICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBtZW1yY2hyIGZvciBwb3J0YWJpbGl0eSIpOwor IyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgQyBp biBTLiAgTW9yZSBlZmZpY2llbnQgdGhhbgorICAgbWVtY2hyKFMsQyxOKSwgYXQgdGhlIGV4 cGVuc2Ugb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIEMgZG9lcyBub3QKKyAgIG9jY3VyIHdp dGhpbiBOIGJ5dGVzLiAgKi8KKyNpZiBAR05VTElCX1JBV01FTUNIUkAKKyMgaWYgISBASEFW RV9SQVdNRU1DSFJACitfR0xfRlVOQ0RFQ0xfU1lTIChyYXdtZW1jaHIsIHZvaWQgKiwgKHZv aWQgY29uc3QgKl9fcywgaW50IF9fY19pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyBlbmRpZgorICAvKiBP biBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhbiBvdmVybG9h ZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQysrIiB7IGNvbnN0IHZvaWQgKiBzdGQ6 OnJhd21lbWNociAoY29uc3Qgdm9pZCAqLCBpbnQpOyB9CisgICAgICAgZXh0ZXJuICJDKysi IHsgdm9pZCAqIHN0ZDo6cmF3bWVtY2hyICh2b2lkICosIGludCk7IH0gICovCitfR0xfQ1hY QUxJQVNfU1lTX0NBU1QyIChyYXdtZW1jaHIsCisgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICosICh2b2lkIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pLAorICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCBjb25zdCAqLCAodm9pZCBjb25zdCAqX19zLCBpbnQgX19jX2luKSk7 CisjIGlmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAh ZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05V Q19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAo cmF3bWVtY2hyLCB2b2lkICosICh2b2lkICpfX3MsIGludCBfX2NfaW4pKTsKK19HTF9DWFhB TElBU1dBUk4xIChyYXdtZW1jaHIsIHZvaWQgY29uc3QgKiwgKHZvaWQgY29uc3QgKl9fcywg aW50IF9fY19pbikpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNXQVJOIChyYXdtZW1jaHIpOwor IyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByYXdt ZW1jaHIKKyMgaWYgSEFWRV9SQVdfREVDTF9SQVdNRU1DSFIKK19HTF9XQVJOX09OX1VTRSAo cmF3bWVtY2hyLCAicmF3bWVtY2hyIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAg ICAgICJ1c2UgZ251bGliIG1vZHVsZSByYXdtZW1jaHIgZm9yIHBvcnRhYmlsaXR5Iik7Cisj IGVuZGlmCisjZW5kaWYKKworLyogQ29weSBTUkMgdG8gRFNULCByZXR1cm5pbmcgdGhlIGFk ZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4gRFNULiAgKi8KKyNpZiBAR05VTElC X1NUUENQWUAKKyMgaWYgISBASEFWRV9TVFBDUFlACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHBj cHksIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwg Y2hhciBjb25zdCAqcmVzdHJpY3QgX19zcmMpCisgICAgICAgICAgICAgICAgICBfR0xfQVJH X05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoc3RwY3B5 LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNo YXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChzdHBjcHkp OworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBjcHkKKyMg aWYgSEFWRV9SQVdfREVDTF9TVFBDUFkKK19HTF9XQVJOX09OX1VTRSAoc3RwY3B5LCAic3Rw Y3B5IGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1v ZHVsZSBzdHBjcHkgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyog Q29weSBubyBtb3JlIHRoYW4gTiBieXRlcyBvZiBTUkMgdG8gRFNULCByZXR1cm5pbmcgYSBw b2ludGVyIHBhc3QgdGhlCisgICBsYXN0IG5vbi1OVUwgYnl0ZSB3cml0dGVuIGludG8gRFNU LiAgKi8KKyNpZiBAR05VTElCX1NUUE5DUFlACisjIGlmIEBSRVBMQUNFX1NUUE5DUFlACisj ICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNF KQorIyAgIHVuZGVmIHN0cG5jcHkKKyMgICBkZWZpbmUgc3RwbmNweSBycGxfc3RwbmNweQor IyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cG5jcHksIGNoYXIgKiwKKyAgICAgICAg ICAgICAgICAgIChjaGFyICpyZXN0cmljdCBfX2RzdCwgY2hhciBjb25zdCAqcmVzdHJpY3Qg X19zcmMsCisgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAg ICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHBu Y3B5LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3Qs IGNoYXIgY29uc3QgKnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9TVFBOQ1BZQAorX0dMX0ZVTkNERUNM X1NZUyAoc3RwbmNweSwgY2hhciAqLAorICAgICAgICAgICAgICAgICAgKGNoYXIgKnJlc3Ry aWN0IF9fZHN0LCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX3NyYywKKyAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgo MSwgMikpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChzdHBuY3B5LCBjaGFyICos CisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgX19kc3QsIGNoYXIgY29uc3Qg KnJlc3RyaWN0IF9fc3JjLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pKTsKKyMg ZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKHN0cG5jcHkpOworI2VsaWYgZGVmaW5lZCBHTlVM SUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHBuY3B5CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RQ TkNQWQorX0dMX1dBUk5fT05fVVNFIChzdHBuY3B5LCAic3RwbmNweSBpcyB1bnBvcnRhYmxl IC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RwbmNweSBmb3Ig cG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJf UE9TSVhDSEVDSworLyogc3RyY2hyKCkgZG9lcyBub3Qgd29yayB3aXRoIG11bHRpYnl0ZSBz dHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBj aGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNo cgorLyogQXNzdW1lIHN0cmNociBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5f T05fVVNFIChzdHJjaHIsICJzdHJjaHIgY2Fubm90IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJh Y3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIHNvbWUgbXVsdGlieXRlIGxv Y2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2hyIGlmIHlvdSBjYXJlIGFi b3V0IGludGVybmF0aW9uYWxpemF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmly c3Qgb2NjdXJyZW5jZSBvZiBDIGluIFMgb3IgdGhlIGZpbmFsIE5VTCBieXRlLiAgKi8KKyNp ZiBAR05VTElCX1NUUkNIUk5VTEAKKyMgaWYgQFJFUExBQ0VfU1RSQ0hSTlVMQAorIyAgaWYg IShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMg ICBkZWZpbmUgc3RyY2hybnVsIHJwbF9zdHJjaHJudWwKKyMgIGVuZGlmCitfR0xfRlVOQ0RF Q0xfUlBMIChzdHJjaHJudWwsIGNoYXIgKiwgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fY19p bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRF X1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05P Tk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3RyY2hybnVsLCBjaGFyICosCisg ICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqc3RyLCBpbnQgY2gpKTsKKyMgZWxzZQor IyAgaWYgISBASEFWRV9TVFJDSFJOVUxACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJjaHJudWws IGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fcywgaW50IF9fY19pbikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAg ZW5kaWYKKyAgLyogT24gc29tZSBzeXN0ZW1zLCB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQg YXMgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbjoKKyAgICAgICBleHRlcm4gIkMrKyIgeyBjb25z dCBjaGFyICogc3RkOjpzdHJjaHJudWwgKGNvbnN0IGNoYXIgKiwgaW50KTsgfQorICAgICAg IGV4dGVybiAiQysrIiB7IGNoYXIgKiBzdGQ6OnN0cmNocm51bCAoY2hhciAqLCBpbnQpOyB9 ICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoc3RyY2hybnVsLAorICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqLCAoY2hhciBjb25zdCAqX19zLCBpbnQgX19jX2luKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKiwgKGNoYXIgY29uc3QgKl9fcywg aW50IF9fY19pbikpOworIyBlbmRpZgorIyBpZiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJ QkNfTUlOT1JfXyA+PSAxMCkgJiYgIWRlZmluZWQgX19VQ0xJQkNfXykgXAorICAgICAmJiAo X19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49IDQp KQorX0dMX0NYWEFMSUFTV0FSTjEgKHN0cmNocm51bCwgY2hhciAqLCAoY2hhciAqX19zLCBp bnQgX19jX2luKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2hybnVsLCBjaGFyIGNvbnN0 ICosIChjaGFyIGNvbnN0ICpfX3MsIGludCBfX2NfaW4pKTsKKyMgZWxzZQorX0dMX0NYWEFM SUFTV0FSTiAoc3RyY2hybnVsKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BP U0lYQ0hFQ0sKKyMgdW5kZWYgc3RyY2hybnVsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSQ0hS TlVMCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNocm51bCwgInN0cmNocm51bCBpcyB1bnBvcnRh YmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyY2hybnVs IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIER1cGxpY2F0ZSBT LCByZXR1cm5pbmcgYW4gaWRlbnRpY2FsIG1hbGxvYydkIHN0cmluZy4gICovCisjaWYgQEdO VUxJQl9TVFJEVVBACisjIGlmIEBSRVBMQUNFX1NUUkRVUEAKKyMgIGlmICEoZGVmaW5lZCBf X2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3Ry ZHVwCisjICAgZGVmaW5lIHN0cmR1cCBycGxfc3RyZHVwCisjICBlbmRpZgorX0dMX0ZVTkNE RUNMX1JQTCAoc3RyZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MpIF9HTF9BUkdfTk9O TlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJkdXAsIGNoYXIgKiwgKGNoYXIg Y29uc3QgKl9fcykpOworIyBlbHNlCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRl ZmluZWQgR05VTElCX05BTUVTUEFDRSAmJiBkZWZpbmVkIHN0cmR1cAorICAgIC8qIHN0cmR1 cCBleGlzdHMgYXMgYSBmdW5jdGlvbiBhbmQgYXMgYSBtYWNyby4gIEdldCByaWQgb2YgdGhl IG1hY3JvLiAgKi8KKyMgICB1bmRlZiBzdHJkdXAKKyMgIGVuZGlmCisjICBpZiAhKEBIQVZF X0RFQ0xfU1RSRFVQQCB8fCBkZWZpbmVkIHN0cmR1cCkKK19HTF9GVU5DREVDTF9TWVMgKHN0 cmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19zKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkp OworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cmR1cCwgY2hhciAqLCAoY2hhciBj b25zdCAqX19zKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJkdXApOworI2Vs aWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJkdXAKKyMgaWYgSEFW RV9SQVdfREVDTF9TVFJEVVAKK19HTF9XQVJOX09OX1VTRSAoc3RyZHVwLCAic3RyZHVwIGlz IHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBz dHJkdXAgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworLyogQXBwZW5k IG5vIG1vcmUgdGhhbiBOIGNoYXJhY3RlcnMgZnJvbSBTUkMgb250byBERVNULiAgKi8KKyNp ZiBAR05VTElCX1NUUk5DQVRACisjIGlmIEBSRVBMQUNFX1NUUk5DQVRACisjICBpZiAhKGRl ZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVu ZGVmIHN0cm5jYXQKKyMgICBkZWZpbmUgc3RybmNhdCBycGxfc3RybmNhdAorIyAgZW5kaWYK K19HTF9GVU5DREVDTF9SUEwgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRlc3QsIGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJu Y2F0LCBjaGFyICosIChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKSk7 CisjIGVsc2UKK19HTF9DWFhBTElBU19TWVMgKHN0cm5jYXQsIGNoYXIgKiwgKGNoYXIgKmRl c3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElB U1dBUk4gKHN0cm5jYXQpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1 bmRlZiBzdHJuY2F0CisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkNBVAorX0dMX1dBUk5fT05f VVNFIChzdHJuY2F0LCAic3RybmNhdCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAg ICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmNhdCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMg ZW5kaWYKKyNlbmRpZgorCisvKiBSZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgY29weSBvZiBh dCBtb3N0IE4gYnl0ZXMgb2YgU1RSSU5HLiAgKi8KKyNpZiBAR05VTElCX1NUUk5EVVBACisj IGlmIEBSRVBMQUNFX1NUUk5EVVBACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYg ZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5kdXAKKyMgICBkZWZp bmUgc3RybmR1cCBycGxfc3RybmR1cAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0 cm5kdXAsIGNoYXIgKiwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19uKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkp OworX0dMX0NYWEFMSUFTX1JQTCAoc3RybmR1cCwgY2hhciAqLCAoY2hhciBjb25zdCAqX19z dHJpbmcsIHNpemVfdCBfX24pKTsKKyMgZWxzZQorIyAgaWYgISBASEFWRV9ERUNMX1NUUk5E VVBACitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpf X3N0cmluZywgc2l6ZV90IF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lT IChzdHJuZHVwLCBjaGFyICosIChjaGFyIGNvbnN0ICpfX3N0cmluZywgc2l6ZV90IF9fbikp OworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoc3RybmR1cCk7CisjZWxpZiBkZWZpbmVk IEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cm5kdXAKKyMgaWYgSEFWRV9SQVdfREVD TF9TVFJORFVQCitfR0xfV0FSTl9PTl9VU0UgKHN0cm5kdXAsICJzdHJuZHVwIGlzIHVucG9y dGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBzdHJuZHVw IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEZpbmQgdGhlIGxl bmd0aCAobnVtYmVyIG9mIGJ5dGVzKSBvZiBTVFJJTkcsIGJ1dCBzY2FuIGF0IG1vc3QKKyAg IE1BWExFTiBieXRlcy4gIElmIG5vICdcMCcgdGVybWluYXRvciBpcyBmb3VuZCBpbiB0aGF0 IG1hbnkgYnl0ZXMsCisgICByZXR1cm4gTUFYTEVOLiAgKi8KKyNpZiBAR05VTElCX1NUUk5M RU5ACisjIGlmIEBSRVBMQUNFX1NUUk5MRU5ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3Bs dXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cm5sZW4KKyMg ICBkZWZpbmUgc3RybmxlbiBycGxfc3RybmxlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9S UEwgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19t YXhsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJV VEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05P Tk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Rybmxlbiwgc2l6ZV90LCAoY2hh ciBjb25zdCAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikpOworIyBlbHNlCisjICBpZiAh IEBIQVZFX0RFQ0xfU1RSTkxFTkAKK19HTF9GVU5DREVDTF9TWVMgKHN0cm5sZW4sIHNpemVf dCwgKGNoYXIgY29uc3QgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAg ZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHN0cm5sZW4sIHNpemVfdCwgKGNoYXIgY29uc3Qg Kl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dB Uk4gKHN0cm5sZW4pOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRl ZiBzdHJubGVuCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSTkxFTgorX0dMX1dBUk5fT05fVVNF IChzdHJubGVuLCAic3RybmxlbiBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAg ICAidXNlIGdudWxpYiBtb2R1bGUgc3RybmxlbiBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5k aWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLyogc3RyY3Nw bigpIGFzc3VtZXMgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5 dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4gaW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgZG9lcyBu b3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZQorICAgbG9jYWxlIGVuY29k aW5nIGlzIEdCMTgwMzAgYW5kIG9uZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBzZWFyY2hl ZCBpcyBhCisgICBkaWdpdC4gICovCisjIHVuZGVmIHN0cmNzcG4KKy8qIEFzc3VtZSBzdHJj c3BuIGlzIGFsd2F5cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cmNzcG4s ICJzdHJjc3BuIGNhbm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAi CisgICAgICAgICAgICAgICAgICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAg ICAgICAgICAgInVzZSBtYnNjc3BuIGlmIHlvdSBjYXJlIGFib3V0IGludGVybmF0aW9uYWxp emF0aW9uIik7CisjZW5kaWYKKworLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBT IG9mIGFueSBjaGFyYWN0ZXIgaW4gQUNDRVBULiAgKi8KKyNpZiBAR05VTElCX1NUUlBCUktA CisjIGlmICEgQEhBVkVfU1RSUEJSS0AKK19HTF9GVU5DREVDTF9TWVMgKHN0cnBicmssIGNo YXIgKiwgKGNoYXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkp OworIyBlbmRpZgorICAvKiBPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZGVm aW5lZCBhcyBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uOgorICAgICAgIGV4dGVybiAiQyIgeyBj b25zdCBjaGFyICogc3RycGJyayAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9Cisg ICAgICAgZXh0ZXJuICJDKysiIHsgY2hhciAqIHN0cnBicmsgKGNoYXIgKiwgY29uc3QgY2hh ciAqKTsgfSAgKi8KK19HTF9DWFhBTElBU19TWVNfQ0FTVDIgKHN0cnBicmssCisgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICosIChjaGFyIGNvbnN0ICpfX3MsIGNoYXIgY29uc3Qg Kl9fYWNjZXB0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgKGNo YXIgY29uc3QgKl9fcywgY2hhciBjb25zdCAqX19hY2NlcHQpKTsKKyMgaWYgKChfX0dMSUJD X18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMTApICYmICFkZWZpbmVkIF9fVUNMSUJD X18pIFwKKyAgICAgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dO VUNfTUlOT1JfXyA+PSA0KSkKK19HTF9DWFhBTElBU1dBUk4xIChzdHJwYnJrLCBjaGFyICos IChjaGFyICpfX3MsIGNoYXIgY29uc3QgKl9fYWNjZXB0KSk7CitfR0xfQ1hYQUxJQVNXQVJO MSAoc3RycGJyaywgY2hhciBjb25zdCAqLAorICAgICAgICAgICAgICAgICAgIChjaGFyIGNv bnN0ICpfX3MsIGNoYXIgY29uc3QgKl9fYWNjZXB0KSk7CisjIGVsc2UKK19HTF9DWFhBTElB U1dBUk4gKHN0cnBicmspOworIyBlbmRpZgorIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENI RUNLCisvKiBzdHJwYnJrKCkgYXNzdW1lcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlz dCBvZiBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzLgorICAgRXZlbiBpbiB0aGlzIHNpbXBsZSBj YXNlLCBpdCBkb2VzIG5vdCB3b3JrIHdpdGggbXVsdGlieXRlIHN0cmluZ3MgaWYgdGhlCisg ICBsb2NhbGUgZW5jb2RpbmcgaXMgR0IxODAzMCBhbmQgb25lIG9mIHRoZSBjaGFyYWN0ZXJz IHRvIGJlIHNlYXJjaGVkIGlzIGEKKyAgIGRpZ2l0LiAgKi8KKyMgIHVuZGVmIHN0cnBicmsK K19HTF9XQVJOX09OX1VTRSAoc3RycGJyaywgInN0cnBicmsgY2Fubm90IHdvcmsgY29ycmVj dGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAgICAgImluIG11bHRp Ynl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1ic3BicmsgaWYgeW91 IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYKKyNlbGlmIGRl ZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RycGJyaworIyBpZiBIQVZFX1JB V19ERUNMX1NUUlBCUksKK19HTF9XQVJOX09OX1VTRSAoc3RycGJyaywgInN0cnBicmsgaXMg dW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHN0 cnBicmsgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmlu ZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8qIHN0cnNwbigpIGFzc3VtZXMgdGhlIHNlY29uZCBh cmd1bWVudCBpcyBhIGxpc3Qgb2Ygc2luZ2xlLWJ5dGUgY2hhcmFjdGVycy4KKyAgIEV2ZW4g aW4gdGhpcyBzaW1wbGUgY2FzZSwgaXQgY2Fubm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3Ry aW5ncy4gICovCisjIHVuZGVmIHN0cnNwbgorLyogQXNzdW1lIHN0cnNwbiBpcyBhbHdheXMg ZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJzcG4sICJzdHJzcG4gY2Fubm90 IHdvcmsgY29ycmVjdGx5IG9uIGNoYXJhY3RlciBzdHJpbmdzICIKKyAgICAgICAgICAgICAg ICAgImluIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAgICAidXNlIG1i c3NwbiBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiIpOworI2VuZGlm CisKKyNpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisvKiBzdHJyY2hyKCkgZG9lcyBu b3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIGlmIHRoZSBsb2NhbGUgZW5jb2Rpbmcg aXMKKyAgIEdCMTgwMzAgYW5kIHRoZSBjaGFyYWN0ZXIgdG8gYmUgc2VhcmNoZWQgaXMgYSBk aWdpdC4gICovCisjIHVuZGVmIHN0cnJjaHIKKy8qIEFzc3VtZSBzdHJyY2hyIGlzIGFsd2F5 cyBkZWNsYXJlZC4gICovCitfR0xfV0FSTl9PTl9VU0UgKHN0cnJjaHIsICJzdHJyY2hyIGNh bm5vdCB3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAg ICAgICAgICJpbiBzb21lIG11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAg ICAidXNlIG1ic3JjaHIgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24i KTsKKyNlbmRpZgorCisvKiBTZWFyY2ggdGhlIG5leHQgZGVsaW1pdGVyIChjaGFyIGxpc3Rl ZCBpbiBERUxJTSkgc3RhcnRpbmcgYXQgKlNUUklOR1AuCisgICBJZiBvbmUgaXMgZm91bmQs IG92ZXJ3cml0ZSBpdCB3aXRoIGEgTlVMLCBhbmQgYWR2YW5jZSAqU1RSSU5HUAorICAgdG8g cG9pbnQgdG8gdGhlIG5leHQgY2hhciBhZnRlciBpdC4gIE90aGVyd2lzZSwgc2V0ICpTVFJJ TkdQIHRvIE5VTEwuCisgICBJZiAqU1RSSU5HUCB3YXMgYWxyZWFkeSBOVUxMLCBub3RoaW5n IGhhcHBlbnMuCisgICBSZXR1cm4gdGhlIG9sZCB2YWx1ZSBvZiAqU1RSSU5HUC4KKworICAg VGhpcyBpcyBhIHZhcmlhbnQgb2Ygc3RydG9rKCkgdGhhdCBpcyBtdWx0aXRocmVhZC1zYWZl IGFuZCBzdXBwb3J0cworICAgZW1wdHkgZmllbGRzLgorCisgICBDYXZlYXQ6IEl0IG1vZGlm aWVzIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBj YW5ub3QgYmUgdXNlZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRl bnRpdHkgb2YgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisgICBDYXZlYXQ6 IEl0IGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpYnl0ZSBzdHJpbmdzIHVubGVzcyBhbGwgb2Yg dGhlIGRlbGltaXRlcgorICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSBBU0NJSSBjaGFyYWN0 ZXJzIDwgMHgzMC4KKworICAgU2VlIGFsc28gc3RydG9rX3IoKS4gICovCisjaWYgQEdOVUxJ Ql9TVFJTRVBACisjIGlmICEgQEhBVkVfU1RSU0VQQAorX0dMX0ZVTkNERUNMX1NZUyAoc3Ry c2VwLCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqKnJlc3RyaWN0IF9fc3Ry aW5ncCwgY2hhciBjb25zdCAqcmVzdHJpY3QgX19kZWxpbSkKKyAgICAgICAgICAgICAgICAg IF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lT IChzdHJzZXAsIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgIChjaGFyICoqcmVzdHJpY3Qg X19zdHJpbmdwLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBfX2RlbGltKSk7CitfR0xfQ1hYQUxJ QVNXQVJOIChzdHJzZXApOworIyBpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjICB1 bmRlZiBzdHJzZXAKK19HTF9XQVJOX09OX1VTRSAoc3Ryc2VwLCAic3Ryc2VwIGNhbm5vdCB3 b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyAiCisgICAgICAgICAgICAgICAg ICJpbiBtdWx0aWJ5dGUgbG9jYWxlcyAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBtYnNz ZXAgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYK KyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3Ryc2VwCisjIGlm IEhBVkVfUkFXX0RFQ0xfU1RSU0VQCitfR0xfV0FSTl9PTl9VU0UgKHN0cnNlcCwgInN0cnNl cCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1 bGUgc3Ryc2VwIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBA R05VTElCX1NUUlNUUkAKKyMgaWYgQFJFUExBQ0VfU1RSU1RSQAorIyAgaWYgIShkZWZpbmVk IF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICBkZWZpbmUg c3Ryc3RyIHJwbF9zdHJzdHIKKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChzdHJzdHIs IGNoYXIgKiwgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwg MikpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnN0ciwgY2hhciAqLCAoY29uc3QgY2hhciAq aGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisgIC8qIE9uIHNvbWUg c3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVu Y3Rpb246CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0cnN0ciAoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOyB9CisgICAgICAgZXh0ZXJuICJDKysiIHsgY2hh ciAqIHN0cnN0ciAoY2hhciAqLCBjb25zdCBjaGFyICopOyB9ICAqLworX0dMX0NYWEFMSUFT X1NZU19DQVNUMiAoc3Ryc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCAo Y29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSksCisgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29u c3QgY2hhciAqbmVlZGxlKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09IDIgJiYg X19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBcCisgICAg ICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18g Pj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAoc3Ryc3RyLCBjaGFyICosIChjaGFyICpoYXlz dGFjaywgY29uc3QgY2hhciAqbmVlZGxlKSk7CitfR0xfQ1hYQUxJQVNXQVJOMSAoc3Ryc3Ry LCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKmhheXN0 YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpKTsKKyMgZWxzZQorX0dMX0NYWEFMSUFTV0FSTiAo c3Ryc3RyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy8q IHN0cnN0cigpIGRvZXMgbm90IHdvcmsgd2l0aCBtdWx0aWJ5dGUgc3RyaW5ncyBpZiB0aGUg bG9jYWxlIGVuY29kaW5nIGlzCisgICBkaWZmZXJlbnQgZnJvbSBVVEYtODoKKyAgIFBPU0lY IHNheXMgdGhhdCBpdCBvcGVyYXRlcyBvbiAic3RyaW5ncyIsIGFuZCAic3RyaW5nIiBpbiBQ T1NJWCBpcyBkZWZpbmVkCisgICBhcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLCBub3Qgb2YgY2hh cmFjdGVycy4gICovCisjIHVuZGVmIHN0cnN0cgorLyogQXNzdW1lIHN0cnN0ciBpcyBhbHdh eXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5fT05fVVNFIChzdHJzdHIsICJzdHJzdHIgaXMg cXVhZHJhdGljIG9uIG1hbnkgc3lzdGVtcywgYW5kIGNhbm5vdCAiCisgICAgICAgICAgICAg ICAgICJ3b3JrIGNvcnJlY3RseSBvbiBjaGFyYWN0ZXIgc3RyaW5ncyBpbiBtb3N0ICIKKyAg ICAgICAgICAgICAgICAgIm11bHRpYnl0ZSBsb2NhbGVzIC0gIgorICAgICAgICAgICAgICAg ICAidXNlIG1ic3N0ciBpZiB5b3UgY2FyZSBhYm91dCBpbnRlcm5hdGlvbmFsaXphdGlvbiwg IgorICAgICAgICAgICAgICAgICAib3IgdXNlIHN0cnN0ciBpZiB5b3UgY2FyZSBhYm91dCBz cGVlZCIpOworI2VuZGlmCisKKy8qIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgTkVF RExFIGluIEhBWVNUQUNLLCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlCisgICBjb21wYXJpc29u LiAgKi8KKyNpZiBAR05VTElCX1NUUkNBU0VTVFJACisjIGlmIEBSRVBMQUNFX1NUUkNBU0VT VFJACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFN RVNQQUNFKQorIyAgIGRlZmluZSBzdHJjYXNlc3RyIHJwbF9zdHJjYXNlc3RyCisjICBlbmRp ZgorX0dMX0ZVTkNERUNMX1JQTCAoc3RyY2FzZXN0ciwgY2hhciAqLAorICAgICAgICAgICAg ICAgICAgKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpCisgICAg ICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgIF9H TF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChzdHJjYXNlc3Ry LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNv bnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCisjICBpZiAhIEBIQVZFX1NUUkNBU0VTVFJA CitfR0xfRlVOQ0RFQ0xfU1lTIChzdHJjYXNlc3RyLCBjaGFyICosCisgICAgICAgICAgICAg ICAgICAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKKyAgICAg ICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgX0dM X0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgIGVuZGlmCisgIC8qIE9uIHNvbWUgc3lzdGVt cywgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb246 CisgICAgICAgZXh0ZXJuICJDKysiIHsgY29uc3QgY2hhciAqIHN0cmNhc2VzdHIgKGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsgfQorICAgICAgIGV4dGVybiAiQysrIiB7IGNoYXIg KiBzdHJjYXNlc3RyIChjaGFyICosIGNvbnN0IGNoYXIgKik7IH0gICovCitfR0xfQ1hYQUxJ QVNfU1lTX0NBU1QyIChzdHJjYXNlc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqLCAoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSksCisgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIChjb25zdCBjaGFyICpoYXlzdGFj aywgY29uc3QgY2hhciAqbmVlZGxlKSk7CisjIGVuZGlmCisjIGlmICgoX19HTElCQ19fID09 IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEwKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fKSBc CisgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01J Tk9SX18gPj0gNCkpCitfR0xfQ1hYQUxJQVNXQVJOMSAoc3RyY2FzZXN0ciwgY2hhciAqLCAo Y2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworX0dMX0NYWEFMSUFTV0FS TjEgKHN0cmNhc2VzdHIsIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAoY29u c3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkpOworIyBlbHNlCitfR0xf Q1hYQUxJQVNXQVJOIChzdHJjYXNlc3RyKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQgR05V TElCX1BPU0lYQ0hFQ0sKKy8qIHN0cmNhc2VzdHIoKSBkb2VzIG5vdCB3b3JrIHdpdGggbXVs dGlieXRlIHN0cmluZ3M6CisgICBJdCBpcyBhIGdsaWJjIGV4dGVuc2lvbiwgYW5kIGdsaWJj IGltcGxlbWVudHMgaXQgb25seSBmb3IgdW5pYnl0ZQorICAgbG9jYWxlcy4gICovCisjIHVu ZGVmIHN0cmNhc2VzdHIKKyMgaWYgSEFWRV9SQVdfREVDTF9TVFJDQVNFU1RSCitfR0xfV0FS Tl9PTl9VU0UgKHN0cmNhc2VzdHIsICJzdHJjYXNlc3RyIGRvZXMgd29yayBjb3JyZWN0bHkg b24gY2hhcmFjdGVyICIKKyAgICAgICAgICAgICAgICAgInN0cmluZ3MgaW4gbXVsdGlieXRl IGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzY2FzZXN0ciBpZiB5b3Ug Y2FyZSBhYm91dCAiCisgICAgICAgICAgICAgICAgICJpbnRlcm5hdGlvbmFsaXphdGlvbiwg b3IgdXNlIGMtc3RyY2FzZXN0ciBpZiB5b3Ugd2FudCAiCisgICAgICAgICAgICAgICAgICJh IGxvY2FsZSBpbmRlcGVuZGVudCBmdW5jdGlvbiIpOworIyBlbmRpZgorI2VuZGlmCisKKy8q IFBhcnNlIFMgaW50byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4gREVMSU0u CisgICBJZiBTIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVyIGluIFNBVkVfUFRSIGlzIHVz ZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAgRm9yIGV4YW1wbGU6CisgICAg ICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAgICBjaGFyICpzcDsKKyAgICAg ICAgeCA9IHN0cnRva19yKHMsICItIiwgJnNwKTsgICAgICAvLyB4ID0gImFiYyIsIHNwID0g Ij0tZGVmIgorICAgICAgICB4ID0gc3RydG9rX3IoTlVMTCwgIi09IiwgJnNwKTsgIC8vIHgg PSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBzdHJ0b2tfcihOVUxMLCAiPSIsICZz cCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAvLyBzID0gImFiY1wwLWRlZlww IgorCisgICBUaGlzIGlzIGEgdmFyaWFudCBvZiBzdHJ0b2soKSB0aGF0IGlzIG11bHRpdGhy ZWFkLXNhZmUuCisKKyAgIEZvciB0aGUgUE9TSVggZG9jdW1lbnRhdGlvbiBmb3IgdGhpcyBm dW5jdGlvbiwgc2VlOgorICAgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeHNoL3N0 cnRvay5odG1sCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmlu Zy4KKyAgIENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0 YW50IHN0cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGlu ZyBjaGFyYWN0ZXIgaXMgbG9zdC4KKyAgIENhdmVhdDogSXQgZG9lc24ndCB3b3JrIHdpdGgg bXVsdGlieXRlIHN0cmluZ3MgdW5sZXNzIGFsbCBvZiB0aGUgZGVsaW1pdGVyCisgICAgICAg ICAgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGNoYXJhY3RlcnMgPCAweDMwLgorCisgICBTZWUg YWxzbyBzdHJzZXAoKS4gICovCisjaWYgQEdOVUxJQl9TVFJUT0tfUkAKKyMgaWYgQFJFUExB Q0VfU1RSVE9LX1JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBH TlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cnRva19yCisjICAgZGVmaW5lIHN0cnRv a19yIHJwbF9zdHJ0b2tfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cnRva19y LCBjaGFyICosCisgICAgICAgICAgICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBj b25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3Ry aWN0IHNhdmVfcHRyKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMiwg MykpKTsKK19HTF9DWFhBTElBU19SUEwgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAg ICAgICAgICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0s CisgICAgICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKSk7CisjIGVs c2UKKyMgIGlmIEBVTkRFRklORV9TVFJUT0tfUkAgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhD SEVDSworIyAgIHVuZGVmIHN0cnRva19yCisjICBlbmRpZgorIyAgaWYgISBASEFWRV9ERUNM X1NUUlRPS19SQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydG9rX3IsIGNoYXIgKiwKKyAgICAg ICAgICAgICAgICAgIChjaGFyICpyZXN0cmljdCBzLCBjaGFyIGNvbnN0ICpyZXN0cmljdCBk ZWxpbSwKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdHJpY3Qgc2F2ZV9wdHIpCisg ICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyLCAzKSkpOworIyAgZW5kaWYK K19HTF9DWFhBTElBU19TWVMgKHN0cnRva19yLCBjaGFyICosCisgICAgICAgICAgICAgICAg ICAoY2hhciAqcmVzdHJpY3QgcywgY2hhciBjb25zdCAqcmVzdHJpY3QgZGVsaW0sCisgICAg ICAgICAgICAgICAgICAgY2hhciAqKnJlc3RyaWN0IHNhdmVfcHRyKSk7CisjIGVuZGlmCitf R0xfQ1hYQUxJQVNXQVJOIChzdHJ0b2tfcik7CisjIGlmIGRlZmluZWQgR05VTElCX1BPU0lY Q0hFQ0sKK19HTF9XQVJOX09OX1VTRSAoc3RydG9rX3IsICJzdHJ0b2tfciBjYW5ub3Qgd29y ayBjb3JyZWN0bHkgb24gY2hhcmFjdGVyICIKKyAgICAgICAgICAgICAgICAgInN0cmluZ3Mg aW4gbXVsdGlieXRlIGxvY2FsZXMgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgbWJzdG9r X3IgaWYgeW91IGNhcmUgYWJvdXQgaW50ZXJuYXRpb25hbGl6YXRpb24iKTsKKyMgZW5kaWYK KyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RydG9rX3IKKyMg aWYgSEFWRV9SQVdfREVDTF9TVFJUT0tfUgorX0dMX1dBUk5fT05fVVNFIChzdHJ0b2tfciwg InN0cnRva19yIGlzIHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251 bGliIG1vZHVsZSBzdHJ0b2tfciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRp ZgorCisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBub3Qgc3BlY2lmaWVkIGJ5 IFBPU0lYLiAgVGhleSBhcmUgZ251bGliCisgICBleHRlbnNpb25zLiAgKi8KKworI2lmIEBH TlVMSUJfTUJTTEVOQAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbXVsdGlieXRlIGNoYXJh Y3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLgorICAgVGhpcyBjb25zaWRl cnMgbXVsdGlieXRlIGNoYXJhY3RlcnMsIHVubGlrZSBzdHJsZW4sIHdoaWNoIGNvdW50cyBi eXRlcy4gICovCisjIGlmZGVmIF9fTWlyQlNEX18gIC8qIE1pckJTRCBkZWZpbmVzIG1ic2xl biBhcyBhIG1hY3JvLiAgT3ZlcnJpZGUgaXQuICAqLworIyAgdW5kZWYgbWJzbGVuCisjIGVu ZGlmCisjIGlmIEBIQVZFX01CU0xFTkAgIC8qIEFJWCwgT1NGLzEsIE1pckJTRCBkZWZpbmUg bWJzbGVuIGFscmVhZHkgaW4gbGliYy4gICovCisjICBpZiAhKGRlZmluZWQgX19jcGx1c3Bs dXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNsZW4gcnBs X21ic2xlbgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2xlbiwgc2l6ZV90LCAo Y29uc3QgY2hhciAqc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNsZW4sIHNp emVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lT IChtYnNsZW4sIHNpemVfdCwgKGNvbnN0IGNoYXIgKnN0cmluZykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFM SUFTX1NZUyAobWJzbGVuLCBzaXplX3QsIChjb25zdCBjaGFyICpzdHJpbmcpKTsKKyMgZW5k aWYKK19HTF9DWFhBTElBU1dBUk4gKG1ic2xlbik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJf TUJTTkxFTkAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJz IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIHN0YXJ0aW5nCisgICBhdCBTVFJJTkcgYW5kIGVu ZGluZyBhdCBTVFJJTkcgKyBMRU4uICAqLworX0dMX0VYVEVSTl9DIHNpemVfdCBtYnNubGVu IChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW4pCisgICAgIF9HTF9BVFRSSUJVVEVf UFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSk7CisjZW5kaWYKKworI2lmIEBHTlVM SUJfTUJTQ0hSQAorLyogTG9jYXRlIHRoZSBmaXJzdCBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIg QyBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcsCisgICBhbmQgcmV0dXJuIGEgcG9p bnRlciB0byBpdC4gIFJldHVybiBOVUxMIGlmIEMgaXMgbm90IGZvdW5kIGluIFNUUklORy4K KyAgIFVubGlrZSBzdHJjaHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4g bXVsdGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIHN1Y2ggYXMgR0IxODAzMC4g ICovCisjIGlmIGRlZmluZWQgX19ocHV4CisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMg JiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIGRlZmluZSBtYnNjaHIgcnBsX21i c2NociAvKiBhdm9pZCBjb2xsaXNpb24gd2l0aCBIUC1VWCBmdW5jdGlvbiAqLworIyAgZW5k aWYKK19HTF9GVU5DREVDTF9SUEwgKG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3Ry aW5nLCBpbnQgYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRU UklCVVRFX1BVUkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJH X05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAobWJzY2hyLCBjaGFyICosIChj b25zdCBjaGFyICpzdHJpbmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMg KG1ic2NociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dM X0NYWEFMSUFTX1NZUyAobWJzY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGlu dCBjKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChtYnNjaHIpOworI2VuZGlmCisK KyNpZiBAR05VTElCX01CU1JDSFJACisvKiBMb2NhdGUgdGhlIGxhc3Qgc2luZ2xlLWJ5dGUg Y2hhcmFjdGVyIEMgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HLAorICAgYW5kIHJl dHVybiBhIHBvaW50ZXIgdG8gaXQuICBSZXR1cm4gTlVMTCBpZiBDIGlzIG5vdCBmb3VuZCBp biBTVFJJTkcuCisgICBVbmxpa2Ugc3RycmNocigpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNv cnJlY3RseSBpbiBtdWx0aWJ5dGUgbG9jYWxlcyB3aXRoCisgICBlbmNvZGluZ3Mgc3VjaCBh cyBHQjE4MDMwLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX0lOVEVS SVgKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1F U1BBQ0UpCisjICAgZGVmaW5lIG1ic3JjaHIgcnBsX21ic3JjaHIgLyogYXZvaWQgY29sbGlz aW9uIHdpdGggc3lzdGVtIGZ1bmN0aW9uICovCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQ TCAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7 CitfR0xfQ1hYQUxJQVNfUlBMIChtYnNyY2hyLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJp bmcsIGludCBjKSk7CisjIGVsc2UKK19HTF9GVU5DREVDTF9TWVMgKG1ic3JjaHIsIGNoYXIg KiwgKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1NZ UyAobWJzcmNociwgY2hhciAqLCAoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgYykpOworIyBl bmRpZgorX0dMX0NYWEFMSUFTV0FSTiAobWJzcmNocik7CisjZW5kaWYKKworI2lmIEBHTlVM SUJfTUJTU1RSQAorLyogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY2hhcmFj dGVyIHN0cmluZyBORUVETEUgaW4gdGhlIGNoYXJhY3RlcgorICAgc3RyaW5nIEhBWVNUQUNL LiAgUmV0dXJuIE5VTEwgaWYgTkVFRExFIGlzIG5vdCBmb3VuZCBpbiBIQVlTVEFDSy4KKyAg IFVubGlrZSBzdHJzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVs dGlieXRlIGxvY2FsZXMgd2l0aAorICAgZW5jb2RpbmdzIGRpZmZlcmVudCBmcm9tIFVURi04 LiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzc3RyIChjb25zdCBjaGFyICpoYXlzdGFj aywgY29uc3QgY2hhciAqbmVlZGxlKQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAg X0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NB U0VDTVBACisvKiBDb21wYXJlIHRoZSBjaGFyYWN0ZXIgc3RyaW5ncyBTMSBhbmQgUzIsIGln bm9yaW5nIGNhc2UsIHJldHVybmluZyBsZXNzIHRoYW4sCisgICBlcXVhbCB0byBvciBncmVh dGVyIHRoYW4gemVybyBpZiBTMSBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4sIGVx dWFsIHRvCisgICBvciBncmVhdGVyIHRoYW4gUzIuCisgICBOb3RlOiBUaGlzIGZ1bmN0aW9u IG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBzdHJpbmdzIG9mCisg ICBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJjYXNlY21wKCksIHRoaXMgZnVu Y3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9F WFRFUk5fQyBpbnQgbWJzY2FzZWNtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMy KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwg MikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU05DQVNFQ01QQAorLyogQ29tcGFyZSB0 aGUgaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFMxIGNvbnNpc3Rp bmcgb2YgYXQgbW9zdAorICAgTiBjaGFyYWN0ZXJzIHdpdGggdGhlIGluaXRpYWwgc2VnbWVu dCBvZiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTMiBjb25zaXN0aW5nCisgICBvZiBhdCBtb3N0 IE4gY2hhcmFjdGVycywgaWdub3JpbmcgY2FzZSwgcmV0dXJuaW5nIGxlc3MgdGhhbiwgZXF1 YWwgdG8gb3IKKyAgIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBpbml0aWFsIHNlZ21lbnQg b2YgUzEgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcworICAgdGhhbiwgZXF1YWwgdG8gb3Ig Z3JlYXRlciB0aGFuIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgUzIuCisgICBOb3RlOiBUaGlz IGZ1bmN0aW9uIG1heSwgaW4gbXVsdGlieXRlIGxvY2FsZXMsIHJldHVybiAwIGZvciBpbml0 aWFsIHNlZ21lbnRzCisgICBvZiBkaWZmZXJlbnQgbGVuZ3RocyEKKyAgIFVubGlrZSBzdHJu Y2FzZWNtcCgpLCB0aGlzIGZ1bmN0aW9uIHdvcmtzIGNvcnJlY3RseSBpbiBtdWx0aWJ5dGUg bG9jYWxlcy4KKyAgIEJ1dCBiZXdhcmUgdGhhdCBOIGlzIG5vdCBhIGJ5dGUgY291bnQgYnV0 IGEgY2hhcmFjdGVyIGNvdW50ISAgKi8KK19HTF9FWFRFUk5fQyBpbnQgbWJzbmNhc2VjbXAg KGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCisgICAgIF9HTF9B VFRSSUJVVEVfUFVSRQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYK KworI2lmIEBHTlVMSUJfTUJTUENBU0VDTVBACisvKiBDb21wYXJlIHRoZSBpbml0aWFsIHNl Z21lbnQgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmcgU1RSSU5HIGNvbnNpc3Rpbmcgb2YKKyAg IGF0IG1vc3QgbWJzbGVuIChQUkVGSVgpIGNoYXJhY3RlcnMgd2l0aCB0aGUgY2hhcmFjdGVy IHN0cmluZyBQUkVGSVgsCisgICBpZ25vcmluZyBjYXNlLiAgSWYgdGhlIHR3byBtYXRjaCwg cmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZQorICAgYWZ0ZXIgdGhpcyBwcmVm aXggaW4gU1RSSU5HLiAgT3RoZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAgIE5vdGU6IFRoaXMg ZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0dXJuIG5vbi1OVUxMIGlm IFNUUklORworICAgaXMgb2Ygc21hbGxlciBsZW5ndGggdGhhbiBQUkVGSVghCisgICBVbmxp a2Ugc3RybmNhc2VjbXAoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkgaW4gbXVs dGlieXRlCisgICBsb2NhbGVzLiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzcGNhc2Vj bXAgKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqcHJlZml4KQorICAgICBfR0xf QVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpOworI2VuZGlm CisKKyNpZiBAR05VTElCX01CU0NBU0VTVFJACisvKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJl bmNlIG9mIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIE5FRURMRSBpbiB0aGUgY2hhcmFjdGVyCisg ICBzdHJpbmcgSEFZU1RBQ0ssIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4K KyAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5LCBpbiBtdWx0aWJ5dGUgbG9jYWxlcywgcmV0 dXJuIHN1Y2Nlc3MgZXZlbiBpZgorICAgc3RybGVuIChoYXlzdGFjaykgPCBzdHJsZW4gKG5l ZWRsZSkgIQorICAgVW5saWtlIHN0cmNhc2VzdHIoKSwgdGhpcyBmdW5jdGlvbiB3b3JrcyBj b3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIGNoYXIg KiBtYnNjYXNlc3RyIChjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxl KQorICAgICBfR0xfQVRUUklCVVRFX1BVUkUKKyAgICAgX0dMX0FSR19OT05OVUxMICgoMSwg MikpOworI2VuZGlmCisKKyNpZiBAR05VTElCX01CU0NTUE5ACisvKiBGaW5kIHRoZSBmaXJz dCBvY2N1cnJlbmNlIGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORyBvZiBhbnkgY2hh cmFjdGVyCisgICBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBBQ0NFUFQuICBSZXR1cm4gdGhl IG51bWJlciBvZiBieXRlcyBmcm9tIHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcg dG8gdGhpcyBvY2N1cnJlbmNlLCBvciB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgIGlm IG5vbmUgZXhpc3RzLgorICAgVW5saWtlIHN0cmNzcG4oKSwgdGhpcyBmdW5jdGlvbiB3b3Jr cyBjb3JyZWN0bHkgaW4gbXVsdGlieXRlIGxvY2FsZXMuICAqLworX0dMX0VYVEVSTl9DIHNp emVfdCBtYnNjc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkK KyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIp KTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNQQlJLQAorLyogRmluZCB0aGUgZmlyc3Qg b2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2YgYW55IGNoYXJh Y3RlcgorICAgaW4gdGhlIGNoYXJhY3RlciBzdHJpbmcgQUNDRVBULiAgUmV0dXJuIHRoZSBw b2ludGVyIHRvIGl0LCBvciBOVUxMIGlmIG5vbmUKKyAgIGV4aXN0cy4KKyAgIFVubGlrZSBz dHJwYnJrKCksIHRoaXMgZnVuY3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBs b2NhbGVzLiAgKi8KKyMgaWYgZGVmaW5lZCBfX2hwdXgKKyMgIGlmICEoZGVmaW5lZCBfX2Nw bHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgZGVmaW5lIG1ic3Bi cmsgcnBsX21ic3BicmsgLyogYXZvaWQgY29sbGlzaW9uIHdpdGggSFAtVVggZnVuY3Rpb24g Ki8KKyMgIGVuZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChtYnNwYnJrLCBjaGFyICosIChjb25z dCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIpKSk7CitfR0xfQ1hY QUxJQVNfUlBMIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0 IGNoYXIgKmFjY2VwdCkpOworIyBlbHNlCitfR0xfRlVOQ0RFQ0xfU1lTIChtYnNwYnJrLCBj aGFyICosIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEsIDIp KSk7CitfR0xfQ1hYQUxJQVNfU1lTIChtYnNwYnJrLCBjaGFyICosIChjb25zdCBjaGFyICpz dHJpbmcsIGNvbnN0IGNoYXIgKmFjY2VwdCkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FS TiAobWJzcGJyayk7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfTUJTU1BOQAorLyogRmluZCB0 aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgb2Yg YW55IGNoYXJhY3RlcgorICAgbm90IGluIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFJFSkVDVC4g IFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlCisgICBiZWdpbm5pbmcgb2Yg dGhlIHN0cmluZyB0byB0aGlzIG9jY3VycmVuY2UsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN0 cmluZworICAgaWYgbm9uZSBleGlzdHMuCisgICBVbmxpa2Ugc3Ryc3BuKCksIHRoaXMgZnVu Y3Rpb24gd29ya3MgY29ycmVjdGx5IGluIG11bHRpYnl0ZSBsb2NhbGVzLiAgKi8KK19HTF9F WFRFUk5fQyBzaXplX3QgbWJzc3BuIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIg KnJlamVjdCkKKyAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgIF9HTF9BUkdfTk9OTlVM TCAoKDEsIDIpKTsKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9NQlNTRVBACisvKiBTZWFyY2gg dGhlIG5leHQgZGVsaW1pdGVyIChtdWx0aWJ5dGUgY2hhcmFjdGVyIGxpc3RlZCBpbiB0aGUg Y2hhcmFjdGVyCisgICBzdHJpbmcgREVMSU0pIHN0YXJ0aW5nIGF0IHRoZSBjaGFyYWN0ZXIg c3RyaW5nICpTVFJJTkdQLgorICAgSWYgb25lIGlzIGZvdW5kLCBvdmVyd3JpdGUgaXQgd2l0 aCBhIE5VTCwgYW5kIGFkdmFuY2UgKlNUUklOR1AgdG8gcG9pbnQKKyAgIHRvIHRoZSBuZXh0 IG11bHRpYnl0ZSBjaGFyYWN0ZXIgYWZ0ZXIgaXQuICBPdGhlcndpc2UsIHNldCAqU1RSSU5H UCB0byBOVUxMLgorICAgSWYgKlNUUklOR1Agd2FzIGFscmVhZHkgTlVMTCwgbm90aGluZyBo YXBwZW5zLgorICAgUmV0dXJuIHRoZSBvbGQgdmFsdWUgb2YgKlNUUklOR1AuCisKKyAgIFRo aXMgaXMgYSB2YXJpYW50IG9mIG1ic3Rva19yKCkgdGhhdCBzdXBwb3J0cyBlbXB0eSBmaWVs ZHMuCisKKyAgIENhdmVhdDogSXQgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAg IENhdmVhdDogVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIG9uIGNvbnN0YW50IHN0 cmluZ3MuCisgICBDYXZlYXQ6IFRoZSBpZGVudGl0eSBvZiB0aGUgZGVsaW1pdGluZyBjaGFy YWN0ZXIgaXMgbG9zdC4KKworICAgU2VlIGFsc28gbWJzdG9rX3IoKS4gICovCitfR0xfRVhU RVJOX0MgY2hhciAqIG1ic3NlcCAoY2hhciAqKnN0cmluZ3AsIGNvbnN0IGNoYXIgKmRlbGlt KQorICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSk7CisjZW5kaWYKKworI2lmIEBHTlVM SUJfTUJTVE9LX1JACisvKiBQYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBTVFJJTkcgaW50 byB0b2tlbnMgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgaW4KKyAgIHRoZSBjaGFyYWN0ZXIg c3RyaW5nIERFTElNLgorICAgSWYgU1RSSU5HIGlzIE5VTEwsIHRoZSBzYXZlZCBwb2ludGVy IGluIFNBVkVfUFRSIGlzIHVzZWQgYXMKKyAgIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50LiAg Rm9yIGV4YW1wbGU6CisgICAgICAgIGNoYXIgc1tdID0gIi1hYmMtPS1kZWYiOworICAgICAg ICBjaGFyICpzcDsKKyAgICAgICAgeCA9IG1ic3Rva19yKHMsICItIiwgJnNwKTsgICAgICAv LyB4ID0gImFiYyIsIHNwID0gIj0tZGVmIgorICAgICAgICB4ID0gbWJzdG9rX3IoTlVMTCwg Ii09IiwgJnNwKTsgIC8vIHggPSAiZGVmIiwgc3AgPSBOVUxMCisgICAgICAgIHggPSBtYnN0 b2tfcihOVUxMLCAiPSIsICZzcCk7ICAgLy8geCA9IE5VTEwKKyAgICAgICAgICAgICAgICAv LyBzID0gImFiY1wwLWRlZlwwIgorCisgICBDYXZlYXQ6IEl0IG1vZGlmaWVzIHRoZSBvcmln aW5hbCBzdHJpbmcuCisgICBDYXZlYXQ6IFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNl ZCBvbiBjb25zdGFudCBzdHJpbmdzLgorICAgQ2F2ZWF0OiBUaGUgaWRlbnRpdHkgb2YgdGhl IGRlbGltaXRpbmcgY2hhcmFjdGVyIGlzIGxvc3QuCisKKyAgIFNlZSBhbHNvIG1ic3NlcCgp LiAgKi8KK19HTF9FWFRFUk5fQyBjaGFyICogbWJzdG9rX3IgKGNoYXIgKnN0cmluZywgY29u c3QgY2hhciAqZGVsaW0sIGNoYXIgKipzYXZlX3B0cikKKyAgICAgX0dMX0FSR19OT05OVUxM ICgoMiwgMykpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2FsbHkgZnJvbSBl cnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKyNpZiBAR05VTElCX1NUUkVSUk9S QAorIyBpZiBAUkVQTEFDRV9TVFJFUlJPUkAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1 cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgc3RyZXJyb3IKKyMg ICBkZWZpbmUgc3RyZXJyb3IgcnBsX3N0cmVycm9yCisjICBlbmRpZgorX0dMX0ZVTkNERUNM X1JQTCAoc3RyZXJyb3IsIGNoYXIgKiwgKGludCkpOworX0dMX0NYWEFMSUFTX1JQTCAoc3Ry ZXJyb3IsIGNoYXIgKiwgKGludCkpOworIyBlbHNlCitfR0xfQ1hYQUxJQVNfU1lTIChzdHJl cnJvciwgY2hhciAqLCAoaW50KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChzdHJl cnJvcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHN0cmVy cm9yCisvKiBBc3N1bWUgc3RyZXJyb3IgaXMgYWx3YXlzIGRlY2xhcmVkLiAgKi8KK19HTF9X QVJOX09OX1VTRSAoc3RyZXJyb3IsICJzdHJlcnJvciBpcyB1bnBvcnRhYmxlIC0gIgorICAg ICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IgdG8gZ3VhcmFudGVl IG5vbi1OVUxMIHJlc3VsdCIpOworI2VuZGlmCisKKy8qIE1hcCBhbnkgaW50LCB0eXBpY2Fs bHkgZnJvbSBlcnJubywgaW50byBhbiBlcnJvciBtZXNzYWdlLiAgTXVsdGl0aHJlYWQtc2Fm ZS4KKyAgIFVzZXMgdGhlIFBPU0lYIGRlY2xhcmF0aW9uLCBub3QgdGhlIGdsaWJjIGRlY2xh cmF0aW9uLiAgKi8KKyNpZiBAR05VTElCX1NUUkVSUk9SX1JACisjIGlmIEBSRVBMQUNFX1NU UkVSUk9SX1JACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVM SUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIHN0cmVycm9yX3IKKyMgICBkZWZpbmUgc3RyZXJy b3JfciBycGxfc3RyZXJyb3JfcgorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKHN0cmVy cm9yX3IsIGludCwgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMikp KTsKK19HTF9DWFhBTElBU19SUEwgKHN0cmVycm9yX3IsIGludCwgKGludCBlcnJudW0sIGNo YXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfREVDTF9T VFJFUlJPUl9SQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RyZXJyb3JfciwgaW50LCAoaW50IGVy cm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgyKSkpOworIyAgZW5kaWYKK19HTF9D WFhBTElBU19TWVMgKHN0cmVycm9yX3IsIGludCwgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwg c2l6ZV90IGJ1ZmxlbikpOworIyBlbmRpZgorIyBpZiBASEFWRV9ERUNMX1NUUkVSUk9SX1JA CitfR0xfQ1hYQUxJQVNXQVJOIChzdHJlcnJvcl9yKTsKKyMgZW5kaWYKKyNlbGlmIGRlZmlu ZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgc3RyZXJyb3JfcgorIyBpZiBIQVZFX1JB V19ERUNMX1NUUkVSUk9SX1IKK19HTF9XQVJOX09OX1VTRSAoc3RyZXJyb3JfciwgInN0cmVy cm9yX3IgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIg bW9kdWxlIHN0cmVycm9yX3ItcG9zaXggZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisj ZW5kaWYKKworI2lmIEBHTlVMSUJfU1RSU0lHTkFMQAorIyBpZiBAUkVQTEFDRV9TVFJTSUdO QUxACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFN RVNQQUNFKQorIyAgIGRlZmluZSBzdHJzaWduYWwgcnBsX3N0cnNpZ25hbAorIyAgZW5kaWYK K19HTF9GVU5DREVDTF9SUEwgKHN0cnNpZ25hbCwgY2hhciAqLCAoaW50IF9fc2lnKSk7Citf R0xfQ1hYQUxJQVNfUlBMIChzdHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBl bHNlCisjICBpZiAhIEBIQVZFX0RFQ0xfU1RSU0lHTkFMQAorX0dMX0ZVTkNERUNMX1NZUyAo c3Ryc2lnbmFsLCBjaGFyICosIChpbnQgX19zaWcpKTsKKyMgIGVuZGlmCisvKiBOZWVkIHRv IGNhc3QsIGJlY2F1c2Ugb24gQ3lnd2luIDEuNS54IHN5c3RlbXMsIHRoZSByZXR1cm4gdHlw ZSBpcworICAgJ2NvbnN0IGNoYXIgKicuICAqLworX0dMX0NYWEFMSUFTX1NZU19DQVNUIChz dHJzaWduYWwsIGNoYXIgKiwgKGludCBfX3NpZykpOworIyBlbmRpZgorX0dMX0NYWEFMSUFT V0FSTiAoc3Ryc2lnbmFsKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMg dW5kZWYgc3Ryc2lnbmFsCisjIGlmIEhBVkVfUkFXX0RFQ0xfU1RSU0lHTkFMCitfR0xfV0FS Tl9PTl9VU0UgKHN0cnNpZ25hbCwgInN0cnNpZ25hbCBpcyB1bnBvcnRhYmxlIC0gIgorICAg ICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgc3Ryc2lnbmFsIGZvciBwb3J0YWJp bGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX1NUUlZFUlNDTVBACisj IGlmICFASEFWRV9TVFJWRVJTQ01QQAorX0dMX0ZVTkNERUNMX1NZUyAoc3RydmVyc2NtcCwg aW50LCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgor X0dMX0NYWEFMSUFTX1NZUyAoc3RydmVyc2NtcCwgaW50LCAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICopKTsKK19HTF9DWFhBTElBU1dBUk4gKHN0cnZlcnNjbXApOworI2VsaWYgZGVm aW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzdHJ2ZXJzY21wCisjIGlmIEhBVkVf UkFXX0RFQ0xfU1RSVkVSU0NNUAorX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3Ry dmVyc2NtcCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxp YiBtb2R1bGUgc3RydmVyc2NtcCBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRp ZgorCisKKyNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KKyNlbmRpZiAv KiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KCj09PSBtb2RpZmllZCBmaWxlICdtNC9n bnVsaWItY29tcC5tNCcKLS0tIG00L2dudWxpYi1jb21wLm00CTIwMTMtMDItMDEgMDY6MzA6 NTEgKzAwMDAKKysrIG00L2dudWxpYi1jb21wLm00CTIwMTMtMDItMDkgMDM6MTI6NDggKzAw MDAKQEAgLTgzLDYgKzgzLDcgQEAKICAgQUNfUkVRVUlSRShbQUNfU1lTX0xBUkdFRklMRV0p CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBsc3RhdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIG1h bnl3YXJuaW5nczoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIG1lbXJjaHI6CiAgICMgQ29kZSBm cm9tIG1vZHVsZSBta3RpbWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBtdWx0aWFyY2g6CiAg ICMgQ29kZSBmcm9tIG1vZHVsZSBub2NyYXNoOgpAQCAtMTE3LDYgKzExOCw3IEBACiAgICMg Q29kZSBmcm9tIG1vZHVsZSBzdGRpbzoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGxpYjoK ICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cmZ0aW1lOgorICAjIENvZGUgZnJvbSBtb2R1bGUg c3RyaW5nOgogICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG9pbWF4OgogICAjIENvZGUgZnJv bSBtb2R1bGUgc3RydG9sbDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnRvdWxsOgpAQCAt MjQyLDYgKzI0NCwxMiBAQAogICAgIGdsX1BSRVJFUV9MU1RBVAogICBmaQogICBnbF9TWVNf U1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtsc3RhdF0pCisgIGdsX0ZVTkNfTUVNUkNIUgorICBp ZiB0ZXN0ICRhY19jdl9mdW5jX21lbXJjaHIgPSBubzsgdGhlbgorICAgIEFDX0xJQk9CSihb bWVtcmNocl0pCisgICAgZ2xfUFJFUkVRX01FTVJDSFIKKyAgZmkKKyAgZ2xfU1RSSU5HX01P RFVMRV9JTkRJQ0FUT1IoW21lbXJjaHJdKQogICBnbF9GVU5DX01LVElNRQogICBpZiB0ZXN0 ICRSRVBMQUNFX01LVElNRSA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW21rdGltZV0pCkBA IC0yOTQsNiArMzAyLDcgQEAKICAgZ2xfU1RESU9fSAogICBnbF9TVERMSUJfSAogICBnbF9G VU5DX0dOVV9TVFJGVElNRQorICBnbF9IRUFERVJfU1RSSU5HX0gKICAgZ2xfRlVOQ19TVFJU T0lNQVgKICAgaWYgdGVzdCAkSEFWRV9TVFJUT0lNQVggPSAwIHx8IHRlc3QgJFJFUExBQ0Vf U1RSVE9JTUFYID0gMTsgdGhlbgogICAgIEFDX0xJQk9CSihbc3RydG9pbWF4XSkKQEAgLTc1 Nyw2ICs3NjYsNyBAQAogICBsaWIvbHN0YXQuYwogICBsaWIvbWQ1LmMKICAgbGliL21kNS5o CisgIGxpYi9tZW1yY2hyLmMKICAgbGliL21rdGltZS1pbnRlcm5hbC5oCiAgIGxpYi9ta3Rp bWUuYwogICBsaWIvb3BlbmF0LXByaXYuaApAQCAtNzkwLDYgKzgwMCw3IEBACiAgIGxpYi9z dGRsaWIuaW4uaAogICBsaWIvc3RyZnRpbWUuYwogICBsaWIvc3RyZnRpbWUuaAorICBsaWIv c3RyaW5nLmluLmgKICAgbGliL3N0cnRvaW1heC5jCiAgIGxpYi9zdHJ0b2wuYwogICBsaWIv c3RydG9sbC5jCkBAIC04NDgsNiArODU5LDcgQEAKICAgbTQvbHN0YXQubTQKICAgbTQvbWFu eXdhcm5pbmdzLm00CiAgIG00L21kNS5tNAorICBtNC9tZW1yY2hyLm00CiAgIG00L21rdGlt ZS5tNAogICBtNC9tdWx0aWFyY2gubTQKICAgbTQvbm9jcmFzaC5tNApAQCAtODc3LDYgKzg4 OSw3IEBACiAgIG00L3N0ZGlvX2gubTQKICAgbTQvc3RkbGliX2gubTQKICAgbTQvc3RyZnRp bWUubTQKKyAgbTQvc3RyaW5nX2gubTQKICAgbTQvc3RydG9pbWF4Lm00CiAgIG00L3N0cnRv bGwubTQKICAgbTQvc3RydG91bGwubTQKCj09PSBhZGRlZCBmaWxlICdtNC9tZW1yY2hyLm00 JwotLS0gbTQvbWVtcmNoci5tNAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9t ZW1yY2hyLm00CTIwMTMtMDItMDkgMDM6MTI6NDggKzAwMDAKQEAgLTAsMCArMSwyMyBAQAor IyBtZW1yY2hyLm00IHNlcmlhbCAxMAorZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAy MDA1LTIwMDcsIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitkbmwgSW5j LgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQv b3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg YXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9G VU5DX01FTVJDSFJdLAorWworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBk ZWNsYXJlIG1lbXJjaHIoKS4KKyAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJ T05TXSkKKworICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdKQor ICBBQ19DSEVDS19ERUNMU19PTkNFKFttZW1yY2hyXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGF2 ZV9kZWNsX21lbXJjaHIgPSBubzsgdGhlbgorICAgIEhBVkVfREVDTF9NRU1SQ0hSPTAKKyAg ZmkKKworICBBQ19DSEVDS19GVU5DUyhbbWVtcmNocl0pCitdKQorCisjIFByZXJlcXVpc2l0 ZXMgb2YgbGliL21lbXJjaHIuYy4KK0FDX0RFRlVOKFtnbF9QUkVSRVFfTUVNUkNIUl0sIFs6 XSkKCj09PSBhZGRlZCBmaWxlICdtNC9zdHJpbmdfaC5tNCcKLS0tIG00L3N0cmluZ19oLm00 CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L3N0cmluZ19oLm00CTIwMTMtMDIt MDkgMDM6MTI6NDggKzAwMDAKQEAgLTAsMCArMSwxMjAgQEAKKyMgQ29uZmlndXJlIGEgR05V LWxpa2UgcmVwbGFjZW1lbnQgZm9yIDxzdHJpbmcuaD4uCisKKyMgQ29weXJpZ2h0IChDKSAy MDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBp cyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVz IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisj IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNl IGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMjEKKworIyBXcml0dGVuIGJ5IFBhdWwgRWdn ZXJ0LgorCitBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IXSwKK1sKKyAgZG5sIFVzZSBB Q19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYmVsb3cgaXMg ZXhwYW5kZWQKKyAgZG5sIG9uY2Ugb25seSwgYmVmb3JlIGFsbCBzdGF0ZW1lbnRzIHRoYXQg b2NjdXIgaW4gb3RoZXIgbWFjcm9zLgorICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfU1RSSU5H X0hfQk9EWV0pCitdKQorCitBQ19ERUZVTihbZ2xfSEVBREVSX1NUUklOR19IX0JPRFldLAor WworICBBQ19SRVFVSVJFKFtBQ19DX1JFU1RSSUNUXSkKKyAgQUNfUkVRVUlSRShbZ2xfSEVB REVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgZ2xfTkVYVF9IRUFERVJTKFtzdHJpbmcuaF0p CisKKyAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0 byBwb2lzb24gaWYgdGhlCisgIGRubCBjb3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMg bm90IGluIHVzZSwgYW5kIHdoaWNoIGlzIG5vdAorICBkbmwgZ3VhcmFudGVlZCBieSBDODku CisgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAg XV0sCisgICAgW2Zmc2wgZmZzbGwgbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIg c3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsCisgICAgIHN0cmR1cCBzdHJuY2F0IHN0cm5kdXAg c3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yCisgICAgIHN0cmVy cm9yX3Igc3Ryc2lnbmFsIHN0cnZlcnNjbXBdKQorXSkKKworQUNfREVGVU4oW2dsX1NUUklO R19NT0RVTEVfSU5ESUNBVE9SXSwKK1sKKyAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNv IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKyAg QUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxF X0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFz IGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9N T0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkKKworQUNfREVGVU4oW2dsX0hF QURFUl9TVFJJTkdfSF9ERUZBVUxUU10sCitbCisgIEdOVUxJQl9GRlNMPTA7ICAgICAgICBB Q19TVUJTVChbR05VTElCX0ZGU0xdKQorICBHTlVMSUJfRkZTTEw9MDsgICAgICAgQUNfU1VC U1QoW0dOVUxJQl9GRlNMTF0pCisgIEdOVUxJQl9NRU1DSFI9MDsgICAgICBBQ19TVUJTVChb R05VTElCX01FTUNIUl0pCisgIEdOVUxJQl9NRU1NRU09MDsgICAgICBBQ19TVUJTVChbR05V TElCX01FTU1FTV0pCisgIEdOVUxJQl9NRU1QQ1BZPTA7ICAgICBBQ19TVUJTVChbR05VTElC X01FTVBDUFldKQorICBHTlVMSUJfTUVNUkNIUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9N RU1SQ0hSXSkKKyAgR05VTElCX1JBV01FTUNIUj0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfUkFX TUVNQ0hSXSkKKyAgR05VTElCX1NUUENQWT0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RQ Q1BZXSkKKyAgR05VTElCX1NUUE5DUFk9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RQTkNQ WV0pCisgIEdOVUxJQl9TVFJDSFJOVUw9MDsgICBBQ19TVUJTVChbR05VTElCX1NUUkNIUk5V TF0pCisgIEdOVUxJQl9TVFJEVVA9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NUUkRVUF0p CisgIEdOVUxJQl9TVFJOQ0FUPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUk5DQVRdKQor ICBHTlVMSUJfU1RSTkRVUD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJORFVQXSkKKyAg R05VTElCX1NUUk5MRU49MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSTkxFTl0pCisgIEdO VUxJQl9TVFJQQlJLPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NUUlBCUktdKQorICBHTlVM SUJfU1RSU0VQPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJTRVBdKQorICBHTlVMSUJf U1RSU1RSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TVFJTVFJdKQorICBHTlVMSUJfU1RS Q0FTRVNUUj0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TVFJDQVNFU1RSXSkKKyAgR05VTElCX1NU UlRPS19SPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVE9LX1JdKQorICBHTlVMSUJfTUJT TEVOPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNMRU5dKQorICBHTlVMSUJfTUJTTkxF Tj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNOTEVOXSkKKyAgR05VTElCX01CU0NIUj0w OyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ0hSXSkKKyAgR05VTElCX01CU1JDSFI9MDsg ICAgIEFDX1NVQlNUKFtHTlVMSUJfTUJTUkNIUl0pCisgIEdOVUxJQl9NQlNTVFI9MDsgICAg ICBBQ19TVUJTVChbR05VTElCX01CU1NUUl0pCisgIEdOVUxJQl9NQlNDQVNFQ01QPTA7ICBB Q19TVUJTVChbR05VTElCX01CU0NBU0VDTVBdKQorICBHTlVMSUJfTUJTTkNBU0VDTVA9MDsg QUNfU1VCU1QoW0dOVUxJQl9NQlNOQ0FTRUNNUF0pCisgIEdOVUxJQl9NQlNQQ0FTRUNNUD0w OyBBQ19TVUJTVChbR05VTElCX01CU1BDQVNFQ01QXSkKKyAgR05VTElCX01CU0NBU0VTVFI9 MDsgIEFDX1NVQlNUKFtHTlVMSUJfTUJTQ0FTRVNUUl0pCisgIEdOVUxJQl9NQlNDU1BOPTA7 ICAgICBBQ19TVUJTVChbR05VTElCX01CU0NTUE5dKQorICBHTlVMSUJfTUJTUEJSSz0wOyAg ICAgQUNfU1VCU1QoW0dOVUxJQl9NQlNQQlJLXSkKKyAgR05VTElCX01CU1NQTj0wOyAgICAg IEFDX1NVQlNUKFtHTlVMSUJfTUJTU1BOXSkKKyAgR05VTElCX01CU1NFUD0wOyAgICAgIEFD X1NVQlNUKFtHTlVMSUJfTUJTU0VQXSkKKyAgR05VTElCX01CU1RPS19SPTA7ICAgIEFDX1NV QlNUKFtHTlVMSUJfTUJTVE9LX1JdKQorICBHTlVMSUJfU1RSRVJST1I9MDsgICAgQUNfU1VC U1QoW0dOVUxJQl9TVFJFUlJPUl0pCisgIEdOVUxJQl9TVFJFUlJPUl9SPTA7ICBBQ19TVUJT VChbR05VTElCX1NUUkVSUk9SX1JdKQorICBHTlVMSUJfU1RSU0lHTkFMPTA7ICAgQUNfU1VC U1QoW0dOVUxJQl9TVFJTSUdOQUxdKQorICBHTlVMSUJfU1RSVkVSU0NNUD0wOyAgQUNfU1VC U1QoW0dOVUxJQl9TVFJWRVJTQ01QXSkKKyAgSEFWRV9NQlNMRU49MDsgICAgICAgIEFDX1NV QlNUKFtIQVZFX01CU0xFTl0pCisgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1 bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCisgIEhBVkVfRkZTTD0xOyAg ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xdKQorICBIQVZFX0ZGU0xMPTE7 ICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMTF0pCisgIEhBVkVfTUVNQ0hS PTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTUNIUl0pCisgIEhBVkVfREVD TF9NRU1NRU09MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfTUVNTUVNXSkKKyAg SEFWRV9NRU1QQ1BZPTE7ICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNUENQWV0p CisgIEhBVkVfREVDTF9NRU1SQ0hSPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xf TUVNUkNIUl0pCisgIEhBVkVfUkFXTUVNQ0hSPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtI QVZFX1JBV01FTUNIUl0pCisgIEhBVkVfU1RQQ1BZPTE7ICAgICAgICAgICAgICAgIEFDX1NV QlNUKFtIQVZFX1NUUENQWV0pCisgIEhBVkVfU1RQTkNQWT0xOyAgICAgICAgICAgICAgIEFD X1NVQlNUKFtIQVZFX1NUUE5DUFldKQorICBIQVZFX1NUUkNIUk5VTD0xOyAgICAgICAgICAg ICBBQ19TVUJTVChbSEFWRV9TVFJDSFJOVUxdKQorICBIQVZFX0RFQ0xfU1RSRFVQPTE7ICAg ICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX1NUUkRVUF0pCisgIEhBVkVfREVDTF9TVFJO RFVQPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSTkRVUF0pCisgIEhBVkVf REVDTF9TVFJOTEVOPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSTkxFTl0p CisgIEhBVkVfU1RSUEJSSz0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NUUlBC UktdKQorICBIQVZFX1NUUlNFUD0xOyAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9T VFJTRVBdKQorICBIQVZFX1NUUkNBU0VTVFI9MTsgICAgICAgICAgICBBQ19TVUJTVChbSEFW RV9TVFJDQVNFU1RSXSkKKyAgSEFWRV9ERUNMX1NUUlRPS19SPTE7ICAgICAgICAgQUNfU1VC U1QoW0hBVkVfREVDTF9TVFJUT0tfUl0pCisgIEhBVkVfREVDTF9TVFJFUlJPUl9SPTE7ICAg ICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSRVJST1JfUl0pCisgIEhBVkVfREVDTF9TVFJT SUdOQUw9MTsgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfU1RSU0lHTkFMXSkKKyAgSEFW RV9TVFJWRVJTQ01QPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSVkVSU0NNUF0p CisgIFJFUExBQ0VfTUVNQ0hSPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX01F TUNIUl0pCisgIFJFUExBQ0VfTUVNTUVNPTA7ICAgICAgICAgICAgIEFDX1NVQlNUKFtSRVBM QUNFX01FTU1FTV0pCisgIFJFUExBQ0VfU1RQTkNQWT0wOyAgICAgICAgICAgIEFDX1NVQlNU KFtSRVBMQUNFX1NUUE5DUFldKQorICBSRVBMQUNFX1NUUkRVUD0wOyAgICAgICAgICAgICBB Q19TVUJTVChbUkVQTEFDRV9TVFJEVVBdKQorICBSRVBMQUNFX1NUUlNUUj0wOyAgICAgICAg ICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJTVFJdKQorICBSRVBMQUNFX1NUUkNBU0VTVFI9 MDsgICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJDQVNFU1RSXSkKKyAgUkVQTEFDRV9T VFJDSFJOVUw9MDsgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSQ0hSTlVMXSkKKyAg UkVQTEFDRV9TVFJFUlJPUj0wOyAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSRVJS T1JdKQorICBSRVBMQUNFX1NUUkVSUk9SX1I9MDsgICAgICAgICBBQ19TVUJTVChbUkVQTEFD RV9TVFJFUlJPUl9SXSkKKyAgUkVQTEFDRV9TVFJOQ0FUPTA7ICAgICAgICAgICAgQUNfU1VC U1QoW1JFUExBQ0VfU1RSTkNBVF0pCisgIFJFUExBQ0VfU1RSTkRVUD0wOyAgICAgICAgICAg IEFDX1NVQlNUKFtSRVBMQUNFX1NUUk5EVVBdKQorICBSRVBMQUNFX1NUUk5MRU49MDsgICAg ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9TVFJOTEVOXSkKKyAgUkVQTEFDRV9TVFJTSUdO QUw9MDsgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSU0lHTkFMXSkKKyAgUkVQTEFD RV9TVFJUT0tfUj0wOyAgICAgICAgICAgQUNfU1VCU1QoW1JFUExBQ0VfU1RSVE9LX1JdKQor ICBVTkRFRklORV9TVFJUT0tfUj0wOyAgICAgICAgICBBQ19TVUJTVChbVU5ERUZJTkVfU1RS VE9LX1JdKQorXSkKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3Jj L0NoYW5nZUxvZwkyMDEzLTAyLTEwIDE2OjQ5OjA5ICswMDAwCisrKyBzcmMvQ2hhbmdlTG9n CTIwMTMtMDItMTEgMDE6Mjg6MTMgKzAwMDAKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMi0x MSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlUdW5lIGJ5IHVzaW5n IG1lbWNociBhbmQgbWVtcmNoci4KKwkqIGRvYy5jIChGc25hcmZfZG9jdW1lbnRhdGlvbik6 CisJKiBmaWxlaW8uYyAoRnN1YnN0aXR1dGVfaW5fZmlsZV9uYW1lKToKKwkqIHNlYXJjaC5j IChmaW5kX25ld2xpbmUsIHNjYW5fbmV3bGluZSk6CisJKiB4ZGlzcC5jIChwb3NfdmlzaWJs ZV9wLCBkaXNwbGF5X2NvdW50X2xpbmVzKToKKwlVc2UgbWVtY2hyIGFuZCBtZW1yY2hyIHJh dGhlciB0aGFuIHNjYW5uaW5nIGJ5dGUtYnktYnl0ZS4KKwkqIHNlYXJjaC5jIChmaW5kX25l d2xpbmUpOiBSZW5hbWUgZnJvbSBzY2FuX2J1ZmZlci4KKwlPbWl0IGZpcnN0IGFyZyBUQVJH RVQsIGFzIGl0J3MgYWx3YXlzICdcbicuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCiAyMDEz LTAyLTEwICBFbGkgWmFyZXRza2lpICA8ZWxpekBnbnUub3JnPgogCiAJKiB4ZGlzcC5jICht b3ZlX2l0X3ZlcnRpY2FsbHlfYmFja3dhcmQsIG1vdmVfaXRfYnlfbGluZXMpOiBXaGVuCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2RvYy5jJwotLS0gc3JjL2RvYy5jCTIwMTMtMDItMDgg MTc6NDI6MDkgKzAwMDAKKysrIHNyYy9kb2MuYwkyMDEzLTAyLTExIDAxOjUxOjI1ICswMDAw CkBAIC02MzAsMTEgKzYzMCwxMCBAQAogCWJyZWFrOwogCiAgICAgICBidWZbZmlsbGVkXSA9 IDA7Ci0gICAgICBwID0gYnVmOwogICAgICAgZW5kID0gYnVmICsgKGZpbGxlZCA8IDUxMiA/ IGZpbGxlZCA6IGZpbGxlZCAtIDEyOCk7Ci0gICAgICB3aGlsZSAocCAhPSBlbmQgJiYgKnAg IT0gJ1wwMzcnKSBwKys7CisgICAgICBwID0gbWVtY2hyIChidWYsICdcMDM3JywgZW5kIC0g YnVmKTsKICAgICAgIC8qIHAgcG9pbnRzIHRvIF5fRmZ1bmN0aW9ubmFtZVxuIG9yIF5fVnZh cm5hbWVcbiBvciBeX1NmaWxlbmFtZVxuLiAgKi8KLSAgICAgIGlmIChwICE9IGVuZCkKKyAg ICAgIGlmIChwKQogCXsKIAkgIGVuZCA9IHN0cmNociAocCwgJ1xuJyk7CiAKCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMvZWRpdGZucy5jJwotLS0gc3JjL2VkaXRmbnMuYwkyMDEzLTAxLTIz IDIwOjA3OjI4ICswMDAwCisrKyBzcmMvZWRpdGZucy5jCTIwMTMtMDItMTEgMDE6MjY6NTkg KzAwMDAKQEAgLTczNSw5ICs3MzUsOCBAQAogCSAgICAgIC8qIFRoaXMgaXMgdGhlIE9OTFlf SU5fTElORSBjYXNlLCBjaGVjayB0aGF0IE5FV19QT1MgYW5kCiAJCSBGSUVMRF9CT1VORCBh cmUgb24gdGhlIHNhbWUgbGluZSBieSBzZWVpbmcgd2hldGhlcgogCQkgdGhlcmUncyBhbiBp bnRlcnZlbmluZyBuZXdsaW5lIG9yIG5vdC4gICovCi0JICAgICAgfHwgKHNjYW5fYnVmZmVy ICgnXG4nLAotCQkJICAgICAgIFhGQVNUSU5UIChuZXdfcG9zKSwgWEZBU1RJTlQgKGZpZWxk X2JvdW5kKSwKLQkJCSAgICAgICBmd2QgPyAtMSA6IDEsICZzaG9ydGFnZSwgMSksCisJICAg ICAgfHwgKGZpbmRfbmV3bGluZSAoWEZBU1RJTlQgKG5ld19wb3MpLCBYRkFTVElOVCAoZmll bGRfYm91bmQpLAorCQkJCWZ3ZCA/IC0xIDogMSwgJnNob3J0YWdlLCAxKSwKIAkJICBzaG9y dGFnZSAhPSAwKSkpCiAJLyogQ29uc3RyYWluIE5FV19QT1MgdG8gRklFTERfQk9VTkQuICAq LwogCW5ld19wb3MgPSBmaWVsZF9ib3VuZDsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmls ZWlvLmMnCi0tLSBzcmMvZmlsZWlvLmMJMjAxMy0wMi0xMSAwMDozNTozNyArMDAwMAorKysg c3JjL2ZpbGVpby5jCTIwMTMtMDItMTEgMDE6Mjg6MTMgKzAwMDAKQEAgLTE3MTAsOCArMTcx MCw5IEBACiAJZWxzZSBpZiAoKnAgPT0gJ3snKQogCSAgewogCSAgICBvID0gKytwOwotCSAg ICB3aGlsZSAocCAhPSBlbmRwICYmICpwICE9ICd9JykgcCsrOwotCSAgICBpZiAoKnAgIT0g J30nKSBnb3RvIG1pc3NpbmdjbG9zZTsKKwkgICAgcCA9IG1lbWNociAocCwgJ30nLCBlbmRw IC0gcCk7CisJICAgIGlmICghIHApCisJICAgICAgZ290byBtaXNzaW5nY2xvc2U7CiAJICAg IHMgPSBwOwogCSAgfQogCWVsc2UKQEAgLTE3NzksOCArMTc4MCw5IEBACiAJZWxzZSBpZiAo KnAgPT0gJ3snKQogCSAgewogCSAgICBvID0gKytwOwotCSAgICB3aGlsZSAocCAhPSBlbmRw ICYmICpwICE9ICd9JykgcCsrOwotCSAgICBpZiAoKnAgIT0gJ30nKSBnb3RvIG1pc3Npbmdj bG9zZTsKKwkgICAgcCA9IG1lbWNociAocCwgJ30nLCBlbmRwIC0gcCk7CisJICAgIGlmICgh IHApCisJICAgICAgZ290byBtaXNzaW5nY2xvc2U7CiAJICAgIHMgPSBwKys7CiAJICB9CiAJ ZWxzZQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9saXNwLmgnCi0tLSBzcmMvbGlzcC5oCTIw MTMtMDItMDkgMjI6NDI6MzMgKzAwMDAKKysrIHNyYy9saXNwLmgJMjAxMy0wMi0xMSAwMToy ODoxMyArMDAwMApAQCAtMzM0Niw4ICszMzQ2LDggQEAKIGV4dGVybiBwdHJkaWZmX3QgZmFz dF9zdHJpbmdfbWF0Y2hfaWdub3JlX2Nhc2UgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7 CiBleHRlcm4gcHRyZGlmZl90IGZhc3RfbG9va2luZ19hdCAoTGlzcF9PYmplY3QsIHB0cmRp ZmZfdCwgcHRyZGlmZl90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 cmRpZmZfdCwgcHRyZGlmZl90LCBMaXNwX09iamVjdCk7Ci1leHRlcm4gcHRyZGlmZl90IHNj YW5fYnVmZmVyIChpbnQsIHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJkaWZmX3QsCi0JCQkg ICAgICBwdHJkaWZmX3QgKiwgYm9vbCk7CitleHRlcm4gcHRyZGlmZl90IGZpbmRfbmV3bGlu ZSAocHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwKKwkJCSAgICAgICBwdHJkaWZm X3QgKiwgYm9vbCk7CiBleHRlcm4gRU1BQ1NfSU5UIHNjYW5fbmV3bGluZSAocHRyZGlmZl90 LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwgcHRyZGlmZl90LAogCQkJICAgICAgIEVNQUNTX0lO VCwgYm9vbCk7CiBleHRlcm4gcHRyZGlmZl90IGZpbmRfbmV4dF9uZXdsaW5lIChwdHJkaWZm X3QsIGludCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3JlZ2lvbi1jYWNoZS5oJwotLS0g c3JjL3JlZ2lvbi1jYWNoZS5oCTIwMTMtMDEtMDEgMDk6MTE6MDUgKzAwMDAKKysrIHNyYy9y ZWdpb24tY2FjaGUuaAkyMDEzLTAyLTExIDAxOjI2OjU5ICswMDAwCkBAIC00MCw3ICs0MCw3 IEBACiAgICBleGlzdGluZyBkYXRhIHN0cnVjdHVyZSwgYW5kIGRpc3R1cmIgYXMgbGl0dGxl IG9mIHRoZSBleGlzdGluZyBjb2RlCiAgICBhcyBwb3NzaWJsZS4KIAotICAgU28gaGVyZSdz IHRoZSB0YWNrLiAgV2UgYWRkIHNvbWUgY2FjaGluZyB0byB0aGUgc2Nhbl9idWZmZXIKKyAg IFNvIGhlcmUncyB0aGUgdGFjay4gIFdlIGFkZCBzb21lIGNhY2hpbmcgdG8gdGhlIGZpbmRf bmV3bGluZQogICAgZnVuY3Rpb24sIHNvIHRoYXQgd2hlbiBpdCBzZWFyY2hlcyBmb3IgYSBu ZXdsaW5lLCBpdCBub3RlcyB0aGF0IHRoZQogICAgcmVnaW9uIGJldHdlZW4gdGhlIHN0YXJ0 IGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBjb250YWluZWQgbm8KICAgIG5ld2xpbmVzOyB0aGVu LCB0aGUgbmV4dCB0aW1lIGFyb3VuZCwgaXQgY29uc3VsdHMgdGhpcyBjYWNoZSB0byBzZWUK Cj09PSBtb2RpZmllZCBmaWxlICdzcmMvc2VhcmNoLmMnCi0tLSBzcmMvc2VhcmNoLmMJMjAx My0wMi0wOCAxNDo0NDo1MyArMDAwMAorKysgc3JjL3NlYXJjaC5jCTIwMTMtMDItMTEgMDI6 MzE6MzkgKzAwMDAKQEAgLTYxOSw3ICs2MTksNyBAQAogfQogCiAMCi0vKiBTZWFyY2ggZm9y IENPVU5UIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVyIFRBUkdFVCBiZXR3ZWVuIFNUQVJU IGFuZCBFTkQuCisvKiBTZWFyY2ggZm9yIENPVU5UIG5ld2xpbmVzIGJldHdlZW4gU1RBUlQg YW5kIEVORC4KIAogICAgSWYgQ09VTlQgaXMgcG9zaXRpdmUsIHNlYXJjaCBmb3J3YXJkczsg RU5EIG11c3QgYmUgPj0gU1RBUlQuCiAgICBJZiBDT1VOVCBpcyBuZWdhdGl2ZSwgc2VhcmNo IGJhY2t3YXJkcyBmb3IgdGhlIC1DT1VOVHRoIGluc3RhbmNlOwpAQCAtNjM0LDE0ICs2MzQs MTQgQEAKICAgIHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB1c3VhbCBjb252ZW50aW9u IGZvciBFbWFjcyBtb3Rpb24gY29tbWFuZHMuCiAKICAgIElmIHdlIGRvbid0IGZpbmQgQ09V TlQgaW5zdGFuY2VzIGJlZm9yZSByZWFjaGluZyBFTkQsIHNldCAqU0hPUlRBR0UKLSAgIHRv IHRoZSBudW1iZXIgb2YgVEFSR0VUcyBsZWZ0IHVuZm91bmQsIGFuZCByZXR1cm4gRU5ELgor ICAgdG8gdGhlIG51bWJlciBvZiBuZXdsaW5lcyBsZWZ0IHVuZm91bmQsIGFuZCByZXR1cm4g RU5ELgogCiAgICBJZiBBTExPV19RVUlULCBzZXQgaW1tZWRpYXRlX3F1aXQuICBUaGF0J3Mg Z29vZCB0byBkbwogICAgZXhjZXB0IHdoZW4gaW5zaWRlIHJlZGlzcGxheS4gICovCiAKIHB0 cmRpZmZfdAotc2Nhbl9idWZmZXIgKGludCB0YXJnZXQsIHB0cmRpZmZfdCBzdGFydCwgcHRy ZGlmZl90IGVuZCwKLQkgICAgIHB0cmRpZmZfdCBjb3VudCwgcHRyZGlmZl90ICpzaG9ydGFn ZSwgYm9vbCBhbGxvd19xdWl0KQorZmluZF9uZXdsaW5lIChwdHJkaWZmX3Qgc3RhcnQsIHB0 cmRpZmZfdCBlbmQsCisJICAgICAgcHRyZGlmZl90IGNvdW50LCBwdHJkaWZmX3QgKnNob3J0 YWdlLCBib29sIGFsbG93X3F1aXQpCiB7CiAgIHN0cnVjdCByZWdpb25fY2FjaGUgKm5ld2xp bmVfY2FjaGU7CiAgIHB0cmRpZmZfdCBlbmRfYnl0ZSA9IC0xOwpAQCAtNjU2LDcgKzY1Niw3 IEBACiAgIGVsc2UKICAgICB7CiAgICAgICBkaXJlY3Rpb24gPSAtMTsKLSAgICAgIGlmICgh ZW5kKSAKKyAgICAgIGlmICghZW5kKQogCWVuZCA9IEJFR1YsIGVuZF9ieXRlID0gQkVHVl9C WVRFOwogICAgIH0KICAgaWYgKGVuZF9ieXRlID09IC0xKQpAQCAtNjg0LDcgKzY4NCw3IEBA CiAKICAgICAgICAgLyogSWYgd2UncmUgbG9va2luZyBmb3IgYSBuZXdsaW5lLCBjb25zdWx0 IHRoZSBuZXdsaW5lIGNhY2hlCiAgICAgICAgICAgIHRvIHNlZSB3aGVyZSB3ZSBjYW4gYXZv aWQgc29tZSBzY2FubmluZy4gICovCi0gICAgICAgIGlmICh0YXJnZXQgPT0gJ1xuJyAmJiBu ZXdsaW5lX2NhY2hlKQorICAgICAgICBpZiAobmV3bGluZV9jYWNoZSkKICAgICAgICAgICB7 CiAgICAgICAgICAgICBwdHJkaWZmX3QgbmV4dF9jaGFuZ2U7CiAgICAgICAgICAgICBpbW1l ZGlhdGVfcXVpdCA9IDA7CkBAIC03MjMsMzIgKzcyMywzMiBAQAogCiAgICAgICAgICAgd2hp bGUgKGN1cnNvciA8IGNlaWxpbmdfYWRkcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqc2Nhbl9zdGFydCA9IGN1cnNvcjsKLQogICAgICAgICAgICAg ICAvKiBUaGUgZHVtYiBsb29wLiAgKi8KLSAgICAgICAgICAgICAgd2hpbGUgKCpjdXJzb3Ig IT0gdGFyZ2V0ICYmICsrY3Vyc29yIDwgY2VpbGluZ19hZGRyKQotICAgICAgICAgICAgICAg IDsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpubCA9IG1lbWNociAoY3Vyc29yLCAnXG4nLCBj ZWlsaW5nX2FkZHIgLSBjdXJzb3IpOwogCiAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIGxv b2tpbmcgZm9yIG5ld2xpbmVzLCBjYWNoZSB0aGUgZmFjdCB0aGF0CiAgICAgICAgICAgICAg ICAgIHRoZSByZWdpb24gZnJvbSBzdGFydCB0byBjdXJzb3IgaXMgZnJlZSBvZiB0aGVtLiAq LwotICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09ICdcbicgJiYgbmV3bGluZV9jYWNoZSkK LSAgICAgICAgICAgICAgICBrbm93X3JlZ2lvbl9jYWNoZSAoY3VycmVudF9idWZmZXIsIG5l d2xpbmVfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVf VE9fQ0hBUiAoc3RhcnRfYnl0ZSArIHNjYW5fc3RhcnQgLSBiYXNlKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQllURV9UT19DSEFSIChzdGFydF9ieXRlICsgY3Vy c29yIC0gYmFzZSkpOwotCi0gICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5kIHRoZSB0YXJn ZXQgY2hhcmFjdGVyPyAgKi8KLSAgICAgICAgICAgICAgaWYgKGN1cnNvciA8IGNlaWxpbmdf YWRkcikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAoLS1jb3Vu dCA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg aW1tZWRpYXRlX3F1aXQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCWVRF X1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyBjdXJzb3IgLSBiYXNlICsgMSk7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGN1cnNvcisrOwotICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgaWYgKG5ld2xpbmVfY2FjaGUpCisJCXsKKwkJICB1bnNp Z25lZCBjaGFyICpsb3cgPSBjdXJzb3I7CisJCSAgdW5zaWduZWQgY2hhciAqbGltID0gbmwg PyBubCA6IGNlaWxpbmdfYWRkcjsKKwkJICBrbm93X3JlZ2lvbl9jYWNoZSAoY3VycmVudF9i dWZmZXIsIG5ld2xpbmVfY2FjaGUsCisJCQkJICAgICBCWVRFX1RPX0NIQVIgKGxvdyAtIGJh c2UgKyBzdGFydF9ieXRlKSwKKwkJCQkgICAgIEJZVEVfVE9fQ0hBUiAobGltIC0gYmFzZSAr IHN0YXJ0X2J5dGUpKTsKKwkJfQorCisgICAgICAgICAgICAgIGlmICghIG5sKQorCQlicmVh azsKKworCSAgICAgIGlmICgtLWNvdW50ID09IDApCisJCXsKKwkJICBpbW1lZGlhdGVfcXVp dCA9IDA7CisJCSAgcmV0dXJuIEJZVEVfVE9fQ0hBUiAobmwgKyAxIC0gYmFzZSArIHN0YXJ0 X2J5dGUpOworCQl9CisJICAgICAgY3Vyc29yID0gbmwgKyAxOwogICAgICAgICAgICAgfQog Ci0gICAgICAgICAgc3RhcnQgPSBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUgKyBjdXJzb3Ig LSBiYXNlKTsKKyAgICAgICAgICBzdGFydCA9IEJZVEVfVE9fQ0hBUiAoY2VpbGluZ19hZGRy IC0gYmFzZSArIHN0YXJ0X2J5dGUpOwogICAgICAgICB9CiAgICAgICB9CiAgIGVsc2UKQEAg LTc2MCw3ICs3NjAsNyBAQAogCXB0cmRpZmZfdCB0ZW07CiAKICAgICAgICAgLyogQ29uc3Vs dCB0aGUgbmV3bGluZSBjYWNoZSwgaWYgYXBwcm9wcmlhdGUuICAqLwotICAgICAgICBpZiAo dGFyZ2V0ID09ICdcbicgJiYgbmV3bGluZV9jYWNoZSkKKyAgICAgICAgaWYgKG5ld2xpbmVf Y2FjaGUpCiAgICAgICAgICAgewogICAgICAgICAgICAgcHRyZGlmZl90IG5leHRfY2hhbmdl OwogICAgICAgICAgICAgaW1tZWRpYXRlX3F1aXQgPSAwOwpAQCAtNzk0LDMxICs3OTQsMzIg QEAKIAogICAgICAgICAgIHdoaWxlIChjdXJzb3IgPj0gY2VpbGluZ19hZGRyKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzY2FuX3N0YXJ0ID0gY3Vy c29yOwotCi0gICAgICAgICAgICAgIHdoaWxlICgqY3Vyc29yICE9IHRhcmdldCAmJiAtLWN1 cnNvciA+PSBjZWlsaW5nX2FkZHIpCi0gICAgICAgICAgICAgICAgOworCSAgICAgIHVuc2ln bmVkIGNoYXIgKm5sID0gbWVtcmNociAoY2VpbGluZ19hZGRyLCAnXG4nLAorCQkJCQkgICBj dXJzb3IgKyAxIC0gY2VpbGluZ19hZGRyKTsKIAogICAgICAgICAgICAgICAvKiBJZiB3ZSdy ZSBsb29raW5nIGZvciBuZXdsaW5lcywgY2FjaGUgdGhlIGZhY3QgdGhhdAogICAgICAgICAg ICAgICAgICB0aGUgcmVnaW9uIGZyb20gYWZ0ZXIgdGhlIGN1cnNvciB0byBzdGFydCBpcyBm cmVlIG9mIHRoZW0uICAqLwotICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09ICdcbicgJiYg bmV3bGluZV9jYWNoZSkKLSAgICAgICAgICAgICAgICBrbm93X3JlZ2lvbl9jYWNoZSAoY3Vy cmVudF9idWZmZXIsIG5ld2xpbmVfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJZVEVfVE9fQ0hBUiAoc3RhcnRfYnl0ZSArIGN1cnNvciAtIGJhc2UpLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFX1RPX0NIQVIgKHN0YXJ0 X2J5dGUgKyBzY2FuX3N0YXJ0IC0gYmFzZSkpOwotCi0gICAgICAgICAgICAgIC8qIERpZCB3 ZSBmaW5kIHRoZSB0YXJnZXQgY2hhcmFjdGVyPyAgKi8KLSAgICAgICAgICAgICAgaWYgKGN1 cnNvciA+PSBjZWlsaW5nX2FkZHIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgICAgaWYgKCsrY291bnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgICAgICAgIGltbWVkaWF0ZV9xdWl0ID0gMDsKLSAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gQllURV9UT19DSEFSIChzdGFydF9ieXRlICsgY3Vyc29yIC0gYmFzZSk7 Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGN1cnNvci0tOwot ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKG5ld2xpbmVfY2FjaGUpCisJ CXsKKwkJICB1bnNpZ25lZCBjaGFyICpsb3cgPSBubCA/IG5sIDogY2VpbGluZ19hZGRyIC0g MTsKKwkJICB1bnNpZ25lZCBjaGFyICpsaW0gPSBjdXJzb3I7CisJCSAga25vd19yZWdpb25f Y2FjaGUgKGN1cnJlbnRfYnVmZmVyLCBuZXdsaW5lX2NhY2hlLAorCQkJCSAgICAgQllURV9U T19DSEFSIChsb3cgLSBiYXNlICsgc3RhcnRfYnl0ZSksCisJCQkJICAgICBCWVRFX1RPX0NI QVIgKGxpbSAtIGJhc2UgKyBzdGFydF9ieXRlKSk7CisJCX0KKworICAgICAgICAgICAgICBp ZiAoISBubCkKKwkJYnJlYWs7CisKKwkgICAgICBpZiAoKytjb3VudCA+PSAwKQorCQl7CisJ CSAgaW1tZWRpYXRlX3F1aXQgPSAwOworCQkgIHJldHVybiBCWVRFX1RPX0NIQVIgKG5sIC0g YmFzZSArIHN0YXJ0X2J5dGUpOworCQl9CisJICAgICAgY3Vyc29yID0gbmwgLSAxOwogICAg ICAgICAgICAgfQogCi0JICBzdGFydCA9IEJZVEVfVE9fQ0hBUiAoc3RhcnRfYnl0ZSArIGN1 cnNvciAtIGJhc2UpOworCSAgc3RhcnQgPSBCWVRFX1RPX0NIQVIgKGNlaWxpbmdfYWRkciAt IDEgLSBiYXNlICsgc3RhcnRfYnl0ZSk7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtODI4 LDggKzgyOSw3IEBACiAgIHJldHVybiBzdGFydDsKIH0KIAwKLS8qIFNlYXJjaCBmb3IgQ09V TlQgaW5zdGFuY2VzIG9mIGEgbGluZSBib3VuZGFyeSwgd2hpY2ggbWVhbnMgZWl0aGVyIGEK LSAgIG5ld2xpbmUgb3IgKGlmIHNlbGVjdGl2ZSBkaXNwbGF5IGVuYWJsZWQpIGEgY2Fycmlh Z2UgcmV0dXJuLgorLyogU2VhcmNoIGZvciBDT1VOVCBpbnN0YW5jZXMgb2YgYSBsaW5lIGJv dW5kYXJ5LgogICAgU3RhcnQgYXQgU1RBUlQuICBJZiBDT1VOVCBpcyBuZWdhdGl2ZSwgc2Vh cmNoIGJhY2t3YXJkcy4KIAogICAgV2UgcmVwb3J0IHRoZSByZXN1bHRpbmcgcG9zaXRpb24g YnkgY2FsbGluZyBURU1QX1NFVF9QVF9CT1RILgpAQCAtODYwLDkgKzg2MCw2IEBACiAKICAg Ym9vbCBvbGRfaW1tZWRpYXRlX3F1aXQgPSBpbW1lZGlhdGVfcXVpdDsKIAotICAvKiBUaGUg Y29kZSB0aGF0IGZvbGxvd3MgaXMgbGlrZSBzY2FuX2J1ZmZlcgotICAgICBidXQgY2hlY2tz IGZvciBlaXRoZXIgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4uICAqLwotCiAgIGlmIChh bGxvd19xdWl0KQogICAgIGltbWVkaWF0ZV9xdWl0Kys7CiAKQEAgLTg3NCwyOSArODcxLDI1 IEBACiAJICBjZWlsaW5nID0gbWluIChsaW1pdF9ieXRlIC0gMSwgY2VpbGluZyk7CiAJICBj ZWlsaW5nX2FkZHIgPSBCWVRFX1BPU19BRERSIChjZWlsaW5nKSArIDE7CiAJICBiYXNlID0g KGN1cnNvciA9IEJZVEVfUE9TX0FERFIgKHN0YXJ0X2J5dGUpKTsKLQkgIHdoaWxlICgxKQor CisJICBkbwogCSAgICB7Ci0JICAgICAgd2hpbGUgKCpjdXJzb3IgIT0gJ1xuJyAmJiArK2N1 cnNvciAhPSBjZWlsaW5nX2FkZHIpCi0JCTsKLQotCSAgICAgIGlmIChjdXJzb3IgIT0gY2Vp bGluZ19hZGRyKQorCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5sID0gbWVtY2hyIChjdXJzb3Is ICdcbicsIGNlaWxpbmdfYWRkciAtIGN1cnNvcik7CisJICAgICAgaWYgKCEgbmwpCisJCWJy ZWFrOworCSAgICAgIGlmICgtLWNvdW50ID09IDApCiAJCXsKLQkJICBpZiAoLS1jb3VudCA9 PSAwKQotCQkgICAgewotCQkgICAgICBpbW1lZGlhdGVfcXVpdCA9IG9sZF9pbW1lZGlhdGVf cXVpdDsKLQkJICAgICAgc3RhcnRfYnl0ZSA9IHN0YXJ0X2J5dGUgKyBjdXJzb3IgLSBiYXNl ICsgMTsKLQkJICAgICAgc3RhcnQgPSBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUpOwotCQkg ICAgICBURU1QX1NFVF9QVF9CT1RIIChzdGFydCwgc3RhcnRfYnl0ZSk7Ci0JCSAgICAgIHJl dHVybiAwOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIGlmICgrK2N1cnNvciA9PSBjZWls aW5nX2FkZHIpCi0JCSAgICAgIGJyZWFrOworCQkgIGltbWVkaWF0ZV9xdWl0ID0gb2xkX2lt bWVkaWF0ZV9xdWl0OworCQkgIHN0YXJ0X2J5dGUgKz0gbmwgLSBiYXNlICsgMTsKKwkJICBz dGFydCA9IEJZVEVfVE9fQ0hBUiAoc3RhcnRfYnl0ZSk7CisJCSAgVEVNUF9TRVRfUFRfQk9U SCAoc3RhcnQsIHN0YXJ0X2J5dGUpOworCQkgIHJldHVybiAwOwogCQl9Ci0JICAgICAgZWxz ZQotCQlicmVhazsKKwkgICAgICBjdXJzb3IgPSBubCArIDE7CiAJICAgIH0KLQkgIHN0YXJ0 X2J5dGUgKz0gY3Vyc29yIC0gYmFzZTsKKwkgIHdoaWxlIChjdXJzb3IgPCBjZWlsaW5nX2Fk ZHIpOworCisJICBzdGFydF9ieXRlICs9IGNlaWxpbmdfYWRkciAtIGJhc2U7CiAJfQogICAg IH0KICAgZWxzZQpAQCAtOTA1LDMxICs4OTgsMjggQEAKIAl7CiAJICBjZWlsaW5nID0gQlVG RkVSX0ZMT09SX09GIChzdGFydF9ieXRlIC0gMSk7CiAJICBjZWlsaW5nID0gbWF4IChsaW1p dF9ieXRlLCBjZWlsaW5nKTsKLQkgIGNlaWxpbmdfYWRkciA9IEJZVEVfUE9TX0FERFIgKGNl aWxpbmcpIC0gMTsKKwkgIGNlaWxpbmdfYWRkciA9IEJZVEVfUE9TX0FERFIgKGNlaWxpbmcp OwogCSAgYmFzZSA9IChjdXJzb3IgPSBCWVRFX1BPU19BRERSIChzdGFydF9ieXRlIC0gMSkg KyAxKTsKIAkgIHdoaWxlICgxKQogCSAgICB7Ci0JICAgICAgd2hpbGUgKC0tY3Vyc29yICE9 IGNlaWxpbmdfYWRkciAmJiAqY3Vyc29yICE9ICdcbicpCi0JCTsKKwkgICAgICB1bnNpZ25l ZCBjaGFyICpubCA9IG1lbXJjaHIgKGNlaWxpbmdfYWRkciwgJ1xuJywKKwkJCQkJICAgY3Vy c29yIC0gY2VpbGluZ19hZGRyKTsKKwkgICAgICBpZiAoISBubCkKKwkJYnJlYWs7CiAKLQkg ICAgICBpZiAoY3Vyc29yICE9IGNlaWxpbmdfYWRkcikKKwkgICAgICBpZiAoKytjb3VudCA9 PSAwKQogCQl7Ci0JCSAgaWYgKCsrY291bnQgPT0gMCkKLQkJICAgIHsKLQkJICAgICAgaW1t ZWRpYXRlX3F1aXQgPSBvbGRfaW1tZWRpYXRlX3F1aXQ7Ci0JCSAgICAgIC8qIFJldHVybiB0 aGUgcG9zaXRpb24gQUZURVIgdGhlIG1hdGNoIHdlIGZvdW5kLiAgKi8KLQkJICAgICAgc3Rh cnRfYnl0ZSA9IHN0YXJ0X2J5dGUgKyBjdXJzb3IgLSBiYXNlICsgMTsKLQkJICAgICAgc3Rh cnQgPSBCWVRFX1RPX0NIQVIgKHN0YXJ0X2J5dGUpOwotCQkgICAgICBURU1QX1NFVF9QVF9C T1RIIChzdGFydCwgc3RhcnRfYnl0ZSk7Ci0JCSAgICAgIHJldHVybiAwOwotCQkgICAgfQor CQkgIGltbWVkaWF0ZV9xdWl0ID0gb2xkX2ltbWVkaWF0ZV9xdWl0OworCQkgIC8qIFJldHVy biB0aGUgcG9zaXRpb24gQUZURVIgdGhlIG1hdGNoIHdlIGZvdW5kLiAgKi8KKwkJICBzdGFy dF9ieXRlICs9IG5sIC0gYmFzZSArIDE7CisJCSAgc3RhcnQgPSBCWVRFX1RPX0NIQVIgKHN0 YXJ0X2J5dGUpOworCQkgIFRFTVBfU0VUX1BUX0JPVEggKHN0YXJ0LCBzdGFydF9ieXRlKTsK KwkJICByZXR1cm4gMDsKIAkJfQotCSAgICAgIGVsc2UKLQkJYnJlYWs7CisKKwkgICAgICBj dXJzb3IgPSBubDsKIAkgICAgfQotCSAgLyogSGVyZSB3ZSBhZGQgMSB0byBjb21wZW5zYXRl IGZvciB0aGUgbGFzdCBkZWNyZW1lbnQKLQkgICAgIG9mIENVUlNPUiwgd2hpY2ggdG9vayBp dCBwYXN0IHRoZSB2YWxpZCByYW5nZS4gICovCi0JICBzdGFydF9ieXRlICs9IGN1cnNvciAt IGJhc2UgKyAxOworCSAgc3RhcnRfYnl0ZSArPSBjZWlsaW5nX2FkZHIgLSBiYXNlOwogCX0K ICAgICB9CiAKQEAgLTk0Miw3ICs5MzIsNyBAQAogcHRyZGlmZl90CiBmaW5kX25leHRfbmV3 bGluZV9ub19xdWl0IChwdHJkaWZmX3QgZnJvbSwgcHRyZGlmZl90IGNudCkKIHsKLSAgcmV0 dXJuIHNjYW5fYnVmZmVyICgnXG4nLCBmcm9tLCAwLCBjbnQsIChwdHJkaWZmX3QgKikgMCwg MCk7CisgIHJldHVybiBmaW5kX25ld2xpbmUgKGZyb20sIDAsIGNudCwgKHB0cmRpZmZfdCAq KSAwLCAwKTsKIH0KIAogLyogTGlrZSBmaW5kX25leHRfbmV3bGluZSwgYnV0IHJldHVybnMg cG9zaXRpb24gYmVmb3JlIHRoZSBuZXdsaW5lLApAQCAtOTUzLDcgKzk0Myw3IEBACiBmaW5k X2JlZm9yZV9uZXh0X25ld2xpbmUgKHB0cmRpZmZfdCBmcm9tLCBwdHJkaWZmX3QgdG8sIHB0 cmRpZmZfdCBjbnQpCiB7CiAgIHB0cmRpZmZfdCBzaG9ydGFnZTsKLSAgcHRyZGlmZl90IHBv cyA9IHNjYW5fYnVmZmVyICgnXG4nLCBmcm9tLCB0bywgY250LCAmc2hvcnRhZ2UsIDEpOwor ICBwdHJkaWZmX3QgcG9zID0gZmluZF9uZXdsaW5lIChmcm9tLCB0bywgY250LCAmc2hvcnRh Z2UsIDEpOwogCiAgIGlmIChzaG9ydGFnZSA9PSAwKQogICAgIHBvcy0tOwoKPT09IG1vZGlm aWVkIGZpbGUgJ3NyYy94ZGlzcC5jJwotLS0gc3JjL3hkaXNwLmMJMjAxMy0wMi0xMCAxNjo0 OTowOSArMDAwMAorKysgc3JjL3hkaXNwLmMJMjAxMy0wMi0xMSAwMToyODoxMyArMDAwMApA QCAtMTM5MiwyMSArMTM5Miw5IEBACiAJICAgICAgTGlzcF9PYmplY3QgY3BvcyA9IG1ha2Vf bnVtYmVyIChjaGFycG9zKTsKIAkgICAgICBMaXNwX09iamVjdCBzcGVjID0gRmdldF9jaGFy X3Byb3BlcnR5IChjcG9zLCBRZGlzcGxheSwgUW5pbCk7CiAJICAgICAgTGlzcF9PYmplY3Qg c3RyaW5nID0gc3RyaW5nX2Zyb21fZGlzcGxheV9zcGVjIChzcGVjKTsKLQkgICAgICBpbnQg bmV3bGluZV9pbl9zdHJpbmcgPSAwOwotCi0JICAgICAgaWYgKFNUUklOR1AgKHN0cmluZykp Ci0JCXsKLQkJICBjb25zdCBjaGFyICpzID0gU1NEQVRBIChzdHJpbmcpOwotCQkgIGNvbnN0 IGNoYXIgKmUgPSBzICsgU0JZVEVTIChzdHJpbmcpOwotCQkgIHdoaWxlIChzIDwgZSkKLQkJ ICAgIHsKLQkJICAgICAgaWYgKCpzKysgPT0gJ1xuJykKLQkJCXsKLQkJCSAgbmV3bGluZV9p bl9zdHJpbmcgPSAxOwotCQkJICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJfQorCSAgICAg IGJvb2wgbmV3bGluZV9pbl9zdHJpbmcKKwkJPSAoU1RSSU5HUCAoc3RyaW5nKQorCQkgICAm JiBtZW1jaHIgKFNEQVRBIChzdHJpbmcpLCAnXG4nLCBTQllURVMgKHN0cmluZykpKTsKIAkg ICAgICAvKiBUaGUgdHJpY2t5IGNvZGUgYmVsb3cgaXMgbmVlZGVkIGJlY2F1c2UgdGhlcmUn cyBhCiAJCSBkaXNjcmVwYW5jeSBiZXR3ZWVuIG1vdmVfaXRfdG8gYW5kIGhvdyB3ZSBzZXQg Y3Vyc29yCiAJCSB3aGVuIHRoZSBkaXNwbGF5IGxpbmUgZW5kcyBpbiBhIG5ld2xpbmUgZnJv bSBhCkBAIC0xNDc1Myw3ICsxNDc0MSw3IEBACiAJU0VUX1RFWFRfUE9TIChzdGFydF9wb3Ms IFpWLCBaVl9CWVRFKTsKIAogICAgICAgLyogRmluZCB0aGUgc3RhcnQgb2YgdGhlIGNvbnRp bnVlZCBsaW5lLiAgVGhpcyBzaG91bGQgYmUgZmFzdAotCSBiZWNhdXNlIHNjYW5fYnVmZmVy IGlzIGZhc3QgKG5ld2xpbmUgY2FjaGUpLiAgKi8KKwkgYmVjYXVzZSBmaW5kX25ld2xpbmUg aXMgZmFzdCAobmV3bGluZSBjYWNoZSkuICAqLwogICAgICAgcm93ID0gdy0+ZGVzaXJlZF9t YXRyaXgtPnJvd3MgKyAoV0lORE9XX1dBTlRTX0hFQURFUl9MSU5FX1AgKHcpID8gMSA6IDAp OwogICAgICAgaW5pdF9pdGVyYXRvciAoJml0LCB3LCBDSEFSUE9TIChzdGFydF9wb3MpLCBC WVRFUE9TIChzdGFydF9wb3MpLAogCQkgICAgIHJvdywgREVGQVVMVF9GQUNFX0lEKTsKQEAg LTIxNjIwLDMxICsyMTYwOCwzNiBAQAogCSAgY2VpbGluZyA9IG1pbiAobGltaXRfYnl0ZSAt IDEsIGNlaWxpbmcpOwogCSAgY2VpbGluZ19hZGRyID0gQllURV9QT1NfQUREUiAoY2VpbGlu ZykgKyAxOwogCSAgYmFzZSA9IChjdXJzb3IgPSBCWVRFX1BPU19BRERSIChzdGFydF9ieXRl KSk7Ci0JICB3aGlsZSAoMSkKKworCSAgZG8KIAkgICAgewogCSAgICAgIGlmIChzZWxlY3Rp dmVfZGlzcGxheSkKLQkJd2hpbGUgKCpjdXJzb3IgIT0gJ1xuJyAmJiAqY3Vyc29yICE9IDAx NSAmJiArK2N1cnNvciAhPSBjZWlsaW5nX2FkZHIpCi0JCSAgOwotCSAgICAgIGVsc2UKLQkJ d2hpbGUgKCpjdXJzb3IgIT0gJ1xuJyAmJiArK2N1cnNvciAhPSBjZWlsaW5nX2FkZHIpCi0J CSAgOwotCi0JICAgICAgaWYgKGN1cnNvciAhPSBjZWlsaW5nX2FkZHIpCi0JCXsKLQkJICBp ZiAoLS1jb3VudCA9PSAwKQotCQkgICAgewotCQkgICAgICBzdGFydF9ieXRlICs9IGN1cnNv ciAtIGJhc2UgKyAxOwotCQkgICAgICAqYnl0ZV9wb3NfcHRyID0gc3RhcnRfYnl0ZTsKLQkJ ICAgICAgcmV0dXJuIG9yaWdfY291bnQ7Ci0JCSAgICB9Ci0JCSAgZWxzZQotCQkgICAgaWYg KCsrY3Vyc29yID09IGNlaWxpbmdfYWRkcikKLQkJICAgICAgYnJlYWs7Ci0JCX0KLQkgICAg ICBlbHNlCi0JCWJyZWFrOworCQl7CisJCSAgd2hpbGUgKCpjdXJzb3IgIT0gJ1xuJyAmJiAq Y3Vyc29yICE9IDAxNQorCQkJICYmICsrY3Vyc29yICE9IGNlaWxpbmdfYWRkcikKKwkJICAg IGNvbnRpbnVlOworCQkgIGlmIChjdXJzb3IgPT0gY2VpbGluZ19hZGRyKQorCQkgICAgYnJl YWs7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjdXJzb3IgPSBtZW1jaHIgKGN1cnNv ciwgJ1xuJywgY2VpbGluZ19hZGRyIC0gY3Vyc29yKTsKKwkJICBpZiAoISBjdXJzb3IpCisJ CSAgICBicmVhazsKKwkJfQorCisJICAgICAgY3Vyc29yKys7CisKKwkgICAgICBpZiAoLS1j b3VudCA9PSAwKQorCQl7CisJCSAgc3RhcnRfYnl0ZSArPSBjdXJzb3IgLSBiYXNlOworCQkg ICpieXRlX3Bvc19wdHIgPSBzdGFydF9ieXRlOworCQkgIHJldHVybiBvcmlnX2NvdW50Owor CQl9CiAJICAgIH0KLQkgIHN0YXJ0X2J5dGUgKz0gY3Vyc29yIC0gYmFzZTsKKwkgIHdoaWxl IChjdXJzb3IgPCBjZWlsaW5nX2FkZHIpOworCisJICBzdGFydF9ieXRlICs9IGNlaWxpbmdf YWRkciAtIGJhc2U7CiAJfQogICAgIH0KICAgZWxzZQpAQCAtMjE2NTMsMzUgKzIxNjQ2LDM1 IEBACiAJewogCSAgY2VpbGluZyA9IEJVRkZFUl9GTE9PUl9PRiAoc3RhcnRfYnl0ZSAtIDEp OwogCSAgY2VpbGluZyA9IG1heCAobGltaXRfYnl0ZSwgY2VpbGluZyk7Ci0JICBjZWlsaW5n X2FkZHIgPSBCWVRFX1BPU19BRERSIChjZWlsaW5nKSAtIDE7CisJICBjZWlsaW5nX2FkZHIg PSBCWVRFX1BPU19BRERSIChjZWlsaW5nKTsKIAkgIGJhc2UgPSAoY3Vyc29yID0gQllURV9Q T1NfQUREUiAoc3RhcnRfYnl0ZSAtIDEpICsgMSk7CiAJICB3aGlsZSAoMSkKIAkgICAgewog CSAgICAgIGlmIChzZWxlY3RpdmVfZGlzcGxheSkKLQkJd2hpbGUgKC0tY3Vyc29yICE9IGNl aWxpbmdfYWRkcgotCQkgICAgICAgJiYgKmN1cnNvciAhPSAnXG4nICYmICpjdXJzb3IgIT0g MDE1KQotCQkgIDsKKwkJeworCQkgIHdoaWxlICgtLWN1cnNvciA+PSBjZWlsaW5nX2FkZHIK KwkJCSAmJiAqY3Vyc29yICE9ICdcbicgJiYgKmN1cnNvciAhPSAwMTUpCisJCSAgICBjb250 aW51ZTsKKwkJICBpZiAoY3Vyc29yIDwgY2VpbGluZ19hZGRyKQorCQkgICAgYnJlYWs7CisJ CX0KIAkgICAgICBlbHNlCi0JCXdoaWxlICgtLWN1cnNvciAhPSBjZWlsaW5nX2FkZHIgJiYg KmN1cnNvciAhPSAnXG4nKQotCQkgIDsKKwkJeworCQkgIGN1cnNvciA9IG1lbXJjaHIgKGNl aWxpbmdfYWRkciwgJ1xuJywgY3Vyc29yIC0gY2VpbGluZ19hZGRyKTsKKwkJICBpZiAoISBj dXJzb3IpCisJCSAgICBicmVhazsKKwkJfQogCi0JICAgICAgaWYgKGN1cnNvciAhPSBjZWls aW5nX2FkZHIpCisJICAgICAgaWYgKCsrY291bnQgPT0gMCkKIAkJewotCQkgIGlmICgrK2Nv dW50ID09IDApCi0JCSAgICB7Ci0JCSAgICAgIHN0YXJ0X2J5dGUgKz0gY3Vyc29yIC0gYmFz ZSArIDE7Ci0JCSAgICAgICpieXRlX3Bvc19wdHIgPSBzdGFydF9ieXRlOwotCQkgICAgICAv KiBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcywgd2Ugc2hvdWxkCi0JCQkgbm90IGNvdW50IHRo ZSBuZXdsaW5lIHBvc3RlcmlvciB0byB3aGljaCB3ZSBzdG9wLiAgKi8KLQkJICAgICAgcmV0 dXJuIC0gb3JpZ19jb3VudCAtIDE7Ci0JCSAgICB9CisJCSAgc3RhcnRfYnl0ZSArPSBjdXJz b3IgLSBiYXNlICsgMTsKKwkJICAqYnl0ZV9wb3NfcHRyID0gc3RhcnRfYnl0ZTsKKwkJICAv KiBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcywgd2Ugc2hvdWxkCisJCSAgICAgbm90IGNvdW50 IHRoZSBuZXdsaW5lIHBvc3RlcmlvciB0byB3aGljaCB3ZSBzdG9wLiAgKi8KKwkJICByZXR1 cm4gLSBvcmlnX2NvdW50IC0gMTsKIAkJfQotCSAgICAgIGVsc2UKLQkJYnJlYWs7CiAJICAg IH0KLQkgIC8qIEhlcmUgd2UgYWRkIDEgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGxhc3QgZGVj cmVtZW50Ci0JICAgICBvZiBDVVJTT1IsIHdoaWNoIHRvb2sgaXQgcGFzdCB0aGUgdmFsaWQg cmFuZ2UuICAqLwotCSAgc3RhcnRfYnl0ZSArPSBjdXJzb3IgLSBiYXNlICsgMTsKKwkgIHN0 YXJ0X2J5dGUgKz0gY2VpbGluZ19hZGRyIC0gYmFzZTsKIAl9CiAgICAgfQogCgo= --------------070805080702030009060308--