From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: Re: Proposal: block-based vector allocator Date: Fri, 08 Jun 2012 09:50:15 +0400 Message-ID: <4FD19297.1060907@yandex.ru> References: <4EDDA68B.5050601@yandex.ru> <4FB4AFA4.7020601@yandex.ru> <4FBA32D9.5090704@yandex.ru> <4FC775B5.30904@yandex.ru> <4FC8709C.6000903@yandex.ru> <4FCF007F.7080104@yandex.ru> <4FCF701C.6070106@yandex.ru> <4FD07C54.8030701@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070006000006080809050304" X-Trace: dough.gmane.org 1339134494 12319 80.91.229.3 (8 Jun 2012 05:48:14 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 8 Jun 2012 05:48:14 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Jun 08 07:48:13 2012 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 1Scs3M-0001QP-QI for ged-emacs-devel@m.gmane.org; Fri, 08 Jun 2012 07:48:09 +0200 Original-Received: from localhost ([::1]:42758 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Scs3M-0001TJ-NS for ged-emacs-devel@m.gmane.org; Fri, 08 Jun 2012 01:48:08 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:60966) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Scs3H-0001So-Nz for emacs-devel@gnu.org; Fri, 08 Jun 2012 01:48:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Scs3E-0000fk-4q for emacs-devel@gnu.org; Fri, 08 Jun 2012 01:48:03 -0400 Original-Received: from forward12.mail.yandex.net ([95.108.130.94]:58408) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Scs3D-0000fC-8c for emacs-devel@gnu.org; Fri, 08 Jun 2012 01:48:00 -0400 Original-Received: from smtp12.mail.yandex.net (smtp12.mail.yandex.net [95.108.131.191]) by forward12.mail.yandex.net (Yandex) with ESMTP id 591BEC21EA1; Fri, 8 Jun 2012 09:47:57 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1339134477; bh=OFPeIRUG4eYz3892OP0Q1Lqa72AMmL23RA3qxkQeWdo=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type; b=esBhhPPulZwoAExDQskGijqvqbOE9GPppmVWx8ZA8Nyw6XmGM7momQVPPvgs54d5s PLl4GuczOe7SONEvS0k95qEUoJjJEsyYm49E2YLGUvGw1HdV7XU0026wswq1IxwPg2 zj4wQMO6tZcyzltNNfWS3sveA3+463WCkC80H2R8= Original-Received: from smtp12.mail.yandex.net (localhost [127.0.0.1]) by smtp12.mail.yandex.net (Yandex) with ESMTP id 38BD816A021C; Fri, 8 Jun 2012 09:47:57 +0400 (MSK) Original-Received: from antipov.client.gelicon.ru (antipov.client.gelicon.ru [78.153.153.8]) by smtp12.mail.yandex.net (nwsmtp/Yandex) with ESMTP id luUid9g1-luUmpcwM; Fri, 8 Jun 2012 09:47:56 +0400 X-Yandex-Rcpt-Suid: monnier@IRO.UMontreal.CA X-Yandex-Rcpt-Suid: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1339134477; bh=OFPeIRUG4eYz3892OP0Q1Lqa72AMmL23RA3qxkQeWdo=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type; b=AAVIf4uMJma3g59MuOAhOETDlm6W4W6qCA0960QMDgOGZYmptHXoY6FeBwT67hXl2 rvjESeg9+0EfMg1J1LlfWZ1aUhPBNytAnEhGEE3Qr5+AM4Hxy54AwgBZg20ES1HAK1 sB7HsZbGLbZgKbq3z3rKpWBcLk0lmiaHh3F+O5V0= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 95.108.130.94 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:150817 Archived-At: This is a multi-part message in MIME format. --------------070006000006080809050304 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06/07/2012 06:07 PM, Stefan Monnier wrote: > The rest looks good now. Feel free to install it OK, last call for comments, with internals.texi tweaks and ChangeLog entries... Dmitry --------------070006000006080809050304 Content-Type: text/plain; charset=UTF-8; name="vector_alloc_final.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vector_alloc_final.patch" PT09IG1vZGlmaWVkIGZpbGUgJ2RvYy9saXNwcmVmL0NoYW5nZUxvZycKLS0tIGRvYy9saXNw cmVmL0NoYW5nZUxvZwkyMDEyLTA2LTAzIDA5OjAzOjIzICswMDAwCisrKyBkb2MvbGlzcHJl Zi9DaGFuZ2VMb2cJMjAxMi0wNi0wOCAwNTo0ODoxMSArMDAwMApAQCAtMSwzICsxLDggQEAK KzIwMTItMDYtMDggIERtaXRyeSBBbnRpcG92ICA8ZG1hbnRpcG92QHlhbmRleC5ydT4KKwor CSogaW50ZXJuYWxzLnRleHQgKEdhcmJhZ2UgQ29sbGVjdGlvbik6IERvY3VtZW50IG5ldwor CXZlY3RvciBtYW5hZ2VtZW50IGNvZGUgYW5kIHZlY3Rvcmxpa2VfaGVhZGVyIHN0cnVjdHVy ZS4KKwogMjAxMi0wNi0wMyAgQ2hvbmcgWWlkb25nICA8Y3lkQGdudS5vcmc+CiAKIAkqIG1v ZGVzLnRleGkgKE1vZGUgTGluZSBEYXRhKTogVXNlICJtb2RlIGxpbmUgY29uc3RydWN0IgoK PT09IG1vZGlmaWVkIGZpbGUgJ2RvYy9saXNwcmVmL2ludGVybmFscy50ZXhpJwotLS0gZG9j L2xpc3ByZWYvaW50ZXJuYWxzLnRleGkJMjAxMi0wNS0yNyAwMTozNDoxNCArMDAwMAorKysg ZG9jL2xpc3ByZWYvaW50ZXJuYWxzLnRleGkJMjAxMi0wNi0wOCAwNTo0MDowMCArMDAwMApA QCAtMjE1LDEwICsyMTUsMjAgQEAKIChzdWNoIGFzIGJ5IGxvYWRpbmcgYSBsaWJyYXJ5KSwg dGhhdCBkYXRhIGlzIHBsYWNlZCBpbiBub3JtYWwgc3RvcmFnZS4KIElmIG5vcm1hbCBzdG9y YWdlIHJ1bnMgbG93LCB0aGVuIEVtYWNzIGFza3MgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8K IGFsbG9jYXRlIG1vcmUgbWVtb3J5LiAgRGlmZmVyZW50IHR5cGVzIG9mIExpc3Agb2JqZWN0 cywgc3VjaCBhcwotc3ltYm9scywgY29ucyBjZWxscywgbWFya2VycywgZXRjLiwgYXJlIHNl Z3JlZ2F0ZWQgaW4gZGlzdGluY3QgYmxvY2tzCi1pbiBtZW1vcnkuICAoVmVjdG9ycywgbG9u ZyBzdHJpbmdzLCBidWZmZXJzIGFuZCBjZXJ0YWluIG90aGVyIGVkaXRpbmcKLXR5cGVzLCB3 aGljaCBhcmUgZmFpcmx5IGxhcmdlLCBhcmUgYWxsb2NhdGVkIGluIGluZGl2aWR1YWwgYmxv Y2tzLCBvbmUKLXBlciBvYmplY3QsIHdoaWxlIHNtYWxsIHN0cmluZ3MgYXJlIHBhY2tlZCBp bnRvIGJsb2NrcyBvZiA4ayBieXRlcy4pCitzeW1ib2xzLCBjb25zIGNlbGxzLCBzbWFsbCB2 ZWN0b3JzLCBtYXJrZXJzLCBldGMuLCBhcmUgc2VncmVnYXRlZCBpbgorZGlzdGluY3QgYmxv Y2tzIGluIG1lbW9yeS4gIChMYXJnZSB2ZWN0b3JzLCBsb25nIHN0cmluZ3MsIGJ1ZmZlcnMg YW5kCitjZXJ0YWluIG90aGVyIGVkaXRpbmcgdHlwZXMsIHdoaWNoIGFyZSBmYWlybHkgbGFy Z2UsIGFyZSBhbGxvY2F0ZWQgaW4KK2luZGl2aWR1YWwgYmxvY2tzLCBvbmUgcGVyIG9iamVj dDsgc21hbGwgc3RyaW5ncyBhcmUgcGFja2VkIGludG8gYmxvY2tzCitvZiA4ayBieXRlcywg YW5kIHNtYWxsIHZlY3RvcnMgYXJlIHBhY2tlZCBpbnRvIGJsb2NrcyBvZiA0ayBieXRlcyku CisKK0BjaW5kZXggdmVjdG9ycyBhbmQgb2JqZWN0cyBsb29rcyBsaWtlIGEgdmVjdG9ycwor ICBCZXlvbmQgdGhlIGJhc2ljIHZlY3RvciwgYSBsb3Qgb2Ygb2JqZWN0cyBsaWtlIHdpbmRv dywgYnVmZmVyLCBhbmQKK2ZyYW1lIGFyZSBtYW5hZ2VkIGFzIGlmIHRoZXkncmUgdmVjdG9y cy4gIFNvLCBhbGwgY29ycmVzcG9uZGluZyBkYXRhCit0eXBlcyBpbmNsdWRlcyB0aGUgZmll bGQgQGNvZGV7c3RydWN0IHZlY3Rvcmxpa2VfaGVhZGVyfSwgd2hlcmUKK0Bjb2Rle2hlYWRl ci5uZXh0LmJ1ZmZlcn0gcG9pbnRzIHRvIHRoZSBuZXh0IGJ1ZmZlciwgaW4gdGhlIGNoYWlu IG9mIGFsbAorYnVmZmVycyAoaW5jbHVkaW5nIGtpbGxlZCBidWZmZXJzKSwgYW5kIEBjb2Rl e2hlYWRlci5uZXh0LnZlY3Rvcn0gcG9pbnRzCit0byB0aGUgbmV4dCB2ZWN0b3IgaW4gYSBm cmVlIGxpc3QuICBGb3Igc21hbGwgdmVjdG9ycyBhbGxvY2F0ZWQgZnJvbSB2ZWN0b3IKK2Js b2NrcywgQGNvZGV7aGVhZGVyLm5leHQubmJ5dGVzfSBpcyB0aGUgdmVjdG9yJ3MgbWVtb3J5 IGZvb3RwcmludC4KIAogQGNpbmRleCBnYXJiYWdlIGNvbGxlY3Rpb24KICAgSXQgaXMgcXVp dGUgY29tbW9uIHRvIHVzZSBzb21lIHN0b3JhZ2UgZm9yIGEgd2hpbGUsIHRoZW4gcmVsZWFz ZSBpdApAQCAtMjQzLDggKzI1MywxMiBAQAogICBUaGUgc3dlZXAgcGhhc2UgcHV0cyB1bnVz ZWQgY29ucyBjZWxscyBvbnRvIGEgQGRmbntmcmVlIGxpc3R9CiBmb3IgZnV0dXJlIGFsbG9j YXRpb247IGxpa2V3aXNlIGZvciBzeW1ib2xzIGFuZCBtYXJrZXJzLiAgSXQgY29tcGFjdHMK IHRoZSBhY2Nlc3NpYmxlIHN0cmluZ3Mgc28gdGhleSBvY2N1cHkgZmV3ZXIgOGsgYmxvY2tz OyB0aGVuIGl0IGZyZWVzIHRoZQotb3RoZXIgOGsgYmxvY2tzLiAgVmVjdG9ycywgYnVmZmVy cywgd2luZG93cywgYW5kIG90aGVyIGxhcmdlIG9iamVjdHMgYXJlCi1pbmRpdmlkdWFsbHkg YWxsb2NhdGVkIGFuZCBmcmVlZCB1c2luZyBAY29kZXttYWxsb2N9IGFuZCBAY29kZXtmcmVl fS4KK290aGVyIDhrIGJsb2Nrcy4gIFVucmVhY2hhYmxlIHZlY3RvcnMgZnJvbSB2ZWN0b3Ig YmxvY2tzIGFyZSBjb2FsZXNjZWQKK3RvIGNyZWF0ZSBsYXJnZXN0IHBvc3NpYmxlIGZyZWUg YXJlYXM7IGlmIGZyZWUgYXJlYSBvY2N1cGllcyB0aGUgd2hvbGUgNGsKK2Jsb2NrLCB0aGUg YmxvY2sgaXMgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBmcmVlIGFyZWEgaXMgcmVjb3JkZWQK K3RvIGEgZnJlZSBsaXN0IGFycmF5LCB3aGVyZSBlYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRv IGEgZnJlZSBsaXN0CitvZiBhcmVhcyBvZiB0aGUgc2FtZSBzaXplLiBMYXJnZSB2ZWN0b3Jz LCBidWZmZXJzLCBhbmQgb3RoZXIgbGFyZ2Ugb2JqZWN0cworYXJlIGluZGl2aWR1YWxseSBh bGxvY2F0ZWQgYW5kIGZyZWVkIHVzaW5nIEBjb2Rle21hbGxvY30gYW5kIEBjb2Rle2ZyZWV9 LgogCiBAY2luZGV4IENMIG5vdGUtLS1hbGxvY2F0ZSBtb3JlIHN0b3JhZ2UKIEBxdW90YXRp b24KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxv ZwkyMDEyLTA2LTA3IDA1OjExOjUxICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTItMDYt MDggMDQ6NTQ6MDcgKzAwMDAKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wNi0wOCAgRG1pdHJ5 IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgorCisJQmxvY2stYmFzZWQgdmVjdG9y IGFsbG9jYXRpb24gb2Ygc21hbGwgdmVjdG9ycy4KKwkqIGxpc3AuaCAoc3RydWN0IHZlY3Rv cmxpa2VfaGVhZGVyKTogTmV3IGZpZWxkIGBuYnl0ZXMnLAorCWFkanVzdCBjb21tZW50IGFj Y29yZGluZ2x5LgorCSogYWxsb2MuYyAoZW51bSBtZW1fdHlwZSk6IE5ldyB0eXBlIGBNRU1f VFlQRV9WRUNUT1JfQkxPQ0snCisJdG8gZGVub3RlIHZlY3RvciBibG9ja3MuIEFkanVzdCB1 c2VycyAobGl2ZV92ZWN0b3JfcCwKKwltYXJrX21heWJlX3BvaW50ZXIsIHZhbGlkX2xpc3Bf b2JqZWN0X3ApIGFjY29yZGluZ2x5LgorCShDT01NT05fTVVMVElQTEUpOiBNb3ZlIG91dHNp ZGUgI2lmIFVTRV9MU0JfVEFHLgorCShWRUNUT1JfQkxPQ0tfU0laRSwgdnJvdW5kdXAsIFZF Q1RPUl9CTE9DS19CWVRFUyksCisJKFZCTE9DS19CWVRFU19NSU4sIFZCTE9DS19CWVRFU19N QVgsIFZFQ1RPUl9NQVhfRlJFRV9MSVNUX0lOREVYKSwKKwkoVkVDVE9SX0ZSRUVfTElTVF9G TEFHLCBBRFZBTkNFLCBWSU5ERVgsIFNFVFVQX09OX0ZSRUVfTElTVCksCisJKFZFQ1RPUl9T SVpFLCBWRUNUT1JfSU5fQkxPQ0spOiBOZXcgbWFjcm9zLgorCShyb3VuZHVwX3NpemUpOiBO ZXcgY29uc3RhbnQuCisJKHN0cnVjdCB2ZWN0b3JfYmxvY2spOiBOZXcgZGF0YSB0eXBlLgor CSh2ZWN0b3JfYmxvY2tzLCB2ZWN0b3JfZnJlZV9saXN0cywgemVyb192ZWN0b3IpOiBOZXcg dmFyaWFibGVzLgorCShhbGxfdmVjdG9ycyk6IFJlbmFtZWQgdG8gYGxhcmdlX3ZlY3RvcnMn LgorCShhbGxvY2F0ZV92ZWN0b3JfZnJvbV9ibG9jaywgaW5pdF92ZWN0b3JzLCBhbGxvY2F0 ZV92ZWN0b3JfZnJvbV9ibG9jaykKKwkoc3dlZXBfdmVjdG9ycyk6IE5ldyBmdW5jdGlvbnMu CisJKGFsbG9jYXRlX3ZlY3Rvcmxpa2UpOiBSZXR1cm4gYHplcm9fdmVjdG9yJyBhcyB0aGUg b25seSB2ZWN0b3Igb2YKKwkwIGl0ZW1zLiBBbGxvY2F0ZSBuZXcgdmVjdG9yIGZyb20gYmxv Y2sgaWYgdmVjdG9yIHNpemUgaXMgbGVzcyB0aGFuCisJb3IgZXF1YWwgdG8gVkJMT0NLX0JZ VEVTX01BWC4KKwkoRmdhcmJhZ2VfY29sbGVjdCk6IE1vdmUgYWxsIHZlY3RvciBzd2VlcGlu ZyBjb2RlIHRvIHN3ZWVwX3ZlY3RvcnMuCisJKGluaXRfYWxsb2Nfb25jZSk6IEFkZCBjYWxs IHRvIGluaXRfdmVjdG9ycy4KKwogMjAxMi0wNi0wNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRA Y3MudWNsYS5lZHU+CiAKIAkqIGRvcHJudC5jIChkb3BybnQpOiBUcnVuY2F0ZSBtdWx0aWJ5 dGUgY2hhciBjb3JyZWN0bHkuCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2FsbG9jLmMnCi0t LSBzcmMvYWxsb2MuYwkyMDEyLTA2LTAyIDA4OjUyOjI3ICswMDAwCisrKyBzcmMvYWxsb2Mu YwkyMDEyLTA2LTA4IDAzOjQxOjI3ICswMDAwCkBAIC0zMDQsNyArMzA0LDkgQEAKICAgICAg cHJvY2VzcywgaGFzaF90YWJsZSwgZnJhbWUsIHRlcm1pbmFsLCBhbmQgd2luZG93LCBidXQg d2UgbmV2ZXIgbWFkZQogICAgICB1c2Ugb2YgdGhlIGRpc3RpbmN0aW9uLCBzbyBpdCBvbmx5 IGNhdXNlZCBzb3VyY2UtY29kZSBjb21wbGV4aXR5CiAgICAgIGFuZCBydW50aW1lIHNsb3dk b3duLiAgTWlub3IgYnV0IHBvaW50bGVzcy4gICovCi0gIE1FTV9UWVBFX1ZFQ1RPUkxJS0UK KyAgTUVNX1RZUEVfVkVDVE9STElLRSwKKyAgLyogU3BlY2lhbCB0eXBlIHRvIGRlbm90ZSB2 ZWN0b3IgYmxvY2tzLiAgKi8KKyAgTUVNX1RZUEVfVkVDVE9SX0JMT0NLCiB9OwogCiBzdGF0 aWMgdm9pZCAqbGlzcF9tYWxsb2MgKHNpemVfdCwgZW51bSBtZW1fdHlwZSk7CkBAIC00OTQs NiArNDk2LDExIEBACiAgIHhzaWduYWwgKFFuaWwsIFZtZW1vcnlfc2lnbmFsX2RhdGEpOwog fQogCisvKiBBIGNvbW1vbiBtdWx0aXBsZSBvZiB0aGUgcG9zaXRpdmUgaW50ZWdlcnMgQSBh bmQgQi4gIElkZWFsbHkgdGhpcworICAgd291bGQgYmUgdGhlIGxlYXN0IGNvbW1vbiBtdWx0 aXBsZSwgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGRvIHRoYXQKKyAgIGFzIGEgY29uc3RhbnQg ZXhwcmVzc2lvbiBpbiBDLCBzbyBkbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBlYXNpbHkgZG8u ICAqLworI2RlZmluZSBDT01NT05fTVVMVElQTEUoYSwgYikgXAorICAoKGEpICUgKGIpID09 IDAgPyAoYSkgOiAoYikgJSAoYSkgPT0gMCA/IChiKSA6IChhKSAqIChiKSkKIAogI2lmbmRl ZiBYTUFMTE9DX09WRVJSVU5fQ0hFQ0sKICNkZWZpbmUgWE1BTExPQ19PVkVSUlVOX0NIRUNL X09WRVJIRUFEIDAKQEAgLTUyNSwxMiArNTMyLDggQEAKICAgICAgIGNoYXIgYzsJCQkJCQlc CiAgICAgfSwJCQkJCQkJXAogICAgIGMpCisKICNpZmRlZiBVU0VfTFNCX1RBRwotLyogQSBj b21tb24gbXVsdGlwbGUgb2YgdGhlIHBvc2l0aXZlIGludGVnZXJzIEEgYW5kIEIuICBJZGVh bGx5IHRoaXMKLSAgIHdvdWxkIGJlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUsIGJ1dCB0 aGVyZSdzIG5vIHdheSB0byBkbyB0aGF0Ci0gICBhcyBhIGNvbnN0YW50IGV4cHJlc3Npb24g aW4gQywgc28gZG8gdGhlIGJlc3QgdGhhdCB3ZSBjYW4gZWFzaWx5IGRvLiAgKi8KLSMgZGVm aW5lIENPTU1PTl9NVUxUSVBMRShhLCBiKSBcCi0gICAgKChhKSAlIChiKSA9PSAwID8gKGEp IDogKGIpICUgKGEpID09IDAgPyAoYikgOiAoYSkgKiAoYikpCiAjIGRlZmluZSBYTUFMTE9D X0hFQURFUl9BTElHTk1FTlQgXAogICAgIENPTU1PTl9NVUxUSVBMRSAoMSA8PCBHQ1RZUEVC SVRTLCBYTUFMTE9DX0JBU0VfQUxJR05NRU5UKQogI2Vsc2UKQEAgLTI5MjgsMTcgKzI5MzEs MzExIEBACiAJCQkgICBWZWN0b3IgQWxsb2NhdGlvbgogICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwog Ci0vKiBTaW5nbHktbGlua2VkIGxpc3Qgb2YgYWxsIHZlY3RvcnMuICAqLworLyogVGhpcyB2 YWx1ZSBpcyBiYWxhbmNlZCB3ZWxsIGVub3VnaCB0byBhdm9pZCB0b28gbXVjaCBpbnRlcm5h bCBvdmVyaGVhZAorICAgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlczsgaXQncyBub3QgcmVx dWlyZWQgdG8gYmUgYSBwb3dlciBvZiB0d28sIGJ1dAorICAgaXQncyBleHBlY3RlZCB0byBi ZSBhIG11bHQtb2YtUk9VTkRVUF9TSVpFIChzZWUgYmVsb3cpLiAgKi8KIAotc3RhdGljIHN0 cnVjdCBMaXNwX1ZlY3RvciAqYWxsX3ZlY3RvcnM7CisjZGVmaW5lIFZFQ1RPUl9CTE9DS19T SVpFIDQwOTYKIAogLyogSGFuZHkgY29uc3RhbnRzIGZvciB2ZWN0b3JsaWtlIG9iamVjdHMu ICAqLwogZW51bQogICB7CiAgICAgaGVhZGVyX3NpemUgPSBvZmZzZXRvZiAoc3RydWN0IExp c3BfVmVjdG9yLCBjb250ZW50cyksCi0gICAgd29yZF9zaXplID0gc2l6ZW9mIChMaXNwX09i amVjdCkKKyAgICB3b3JkX3NpemUgPSBzaXplb2YgKExpc3BfT2JqZWN0KSwKKyAgICByb3Vu ZHVwX3NpemUgPSBDT01NT05fTVVMVElQTEUgKHNpemVvZiAoTGlzcF9PYmplY3QpLAorI2lm ZGVmIFVTRV9MU0JfVEFHCisgICAgOCAvKiBIZWxwcyB0byBtYWludGFpbiBhbGlnbm1lbnQg Y29uc3RyYWludHMgaW1wb3NlZCBieQorCSBhc3N1bXB0aW9uIHRoYXQgbGVhc3QgMyBiaXRz IG9mIHBvaW50ZXJzIGFyZSBhbHdheXMgMC4gICovCisjZWxzZQorICAgIDEgLyogSWYgYWxp Z25tZW50IGRvZXNuJ3QgbWF0dGVyLCBzaG91bGQgcm91bmQgdXAKKwkgdG8gc2l6ZW9mIChM aXNwX09iamVjdCkgYXQgbGVhc3QuICAqLworI2VuZGlmCisgICAgKQogICB9OwogCisvKiBS b3VuZCB1cCBYIHRvIG5lYXJlc3QgbXVsdC1vZi1ST1VORFVQX1NJWkUsCisgICBhc3N1bWlu ZyBST1VORFVQX1NJWkUgaXMgYSBwb3dlciBvZiAyLiAgKi8KKworI2RlZmluZSB2cm91bmR1 cCh4KSAoKCh4KSArIChyb3VuZHVwX3NpemUgLSAxKSkgJiB+KHJvdW5kdXBfc2l6ZSAtIDEp KQorCisvKiBSb3VuZGluZyBoZWxwcyB0byBtYWludGFpbiBhbGlnbm1lbnQgY29uc3RyYWlu dHMgaWYgVVNFX0xTQl9UQUcuICAqLworCisjZGVmaW5lIFZFQ1RPUl9CTE9DS19CWVRFUyAo VkVDVE9SX0JMT0NLX1NJWkUgLSB2cm91bmR1cCAoc2l6ZW9mICh2b2lkICopKSkKKworLyog U2l6ZSBvZiB0aGUgbWluaW1hbCB2ZWN0b3IgYWxsb2NhdGVkIGZyb20gYmxvY2suICAqLwor CisjZGVmaW5lIFZCTE9DS19CWVRFU19NSU4gKHZyb3VuZHVwIChzaXplb2YgKHN0cnVjdCBM aXNwX1ZlY3RvcikpKQorCisvKiBTaXplIG9mIHRoZSBsYXJnZXN0IHZlY3RvciBhbGxvY2F0 ZWQgZnJvbSBibG9jay4gICovCisKKyNkZWZpbmUgVkJMT0NLX0JZVEVTX01BWAkJCQkJXAor ICAodnJvdW5kdXAgKChWRUNUT1JfQkxPQ0tfQllURVMgLyAyKSAtIHNpemVvZiAoTGlzcF9P YmplY3QpKSkKKworLyogV2UgbWFpbnRhaW4gb25lIGZyZWUgbGlzdCBmb3IgZWFjaCBwb3Nz aWJsZSBibG9jay1hbGxvY2F0ZWQKKyAgIHZlY3RvciBzaXplLCBhbmQgdGhpcyBpcyB0aGUg bnVtYmVyIG9mIGZyZWUgbGlzdHMgd2UgaGF2ZS4gICovCisKKyNkZWZpbmUgVkVDVE9SX01B WF9GUkVFX0xJU1RfSU5ERVgJCQkJXAorICAoKFZFQ1RPUl9CTE9DS19CWVRFUyAtIFZCTE9D S19CWVRFU19NSU4pIC8gcm91bmR1cF9zaXplICsgMSkKKworLyogV2hlbiB0aGUgdmVjdG9y IGlzIG9uIGEgZnJlZSBsaXN0LCB2ZWN0b3JsaWtlX2hlYWRlci5TSVpFIGlzIHNldCB0bwor ICAgdGhpcyBzcGVjaWFsIHZhbHVlIE9SZWQgd2l0aCB2ZWN0b3IncyBtZW1vcnkgZm9vdHBy aW50IHNpemUuICAqLworCisjZGVmaW5lIFZFQ1RPUl9GUkVFX0xJU1RfRkxBRwkJCQlcCisg ICgofjApICYgfihBUlJBWV9NQVJLX0ZMQUcgfCBQU0VVRE9WRUNUT1JfRkxBRwkJXAorCSAg ICB8IChWRUNUT1JfQkxPQ0tfU0laRSAtIDEpKSkKKworLyogQ29tbW9uIHNob3J0Y3V0IHRv IGFkdmFuY2UgdmVjdG9yIHBvaW50ZXIgb3ZlciBhIGJsb2NrIGRhdGEuICAqLworCisjZGVm aW5lIEFEVkFOQ0UodixuYnl0ZXMpIChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgKChjaGFyICop ICh2KSArIChuYnl0ZXMpKQorCisvKiBDb21tb24gc2hvcnRjdXQgdG8gY2FsY3VsYXRlIE5C WVRFUy12ZWN0b3IgaW5kZXggaW4gVkVDVE9SX0ZSRUVfTElTVFMuICAqLworCisjZGVmaW5l IFZJTkRFWChuYnl0ZXMpICgoKG5ieXRlcykgLSBWQkxPQ0tfQllURVNfTUlOKSAvIHJvdW5k dXBfc2l6ZSkKKworLyogQ29tbW9uIHNob3J0Y3V0IHRvIHNldHVwIHZlY3RvciBvbiBhIGZy ZWUgbGlzdC4gICovCisKKyNkZWZpbmUgU0VUVVBfT05fRlJFRV9MSVNUKHYsbmJ5dGVzLGlu ZGV4KQkJCVwKKyAgZG8gewkJCQkJCQkJXAorICAgICh2KS0+aGVhZGVyLnNpemUgPSBWRUNU T1JfRlJFRV9MSVNUX0ZMQUcgfCAobmJ5dGVzKTsJXAorICAgIGVhc3NlcnQgKChuYnl0ZXMp ICUgcm91bmR1cF9zaXplID09IDApOwkJCVwKKyAgICAoaW5kZXgpID0gVklOREVYIChuYnl0 ZXMpOwkJCQkJXAorICAgIGVhc3NlcnQgKChpbmRleCkgPCBWRUNUT1JfTUFYX0ZSRUVfTElT VF9JTkRFWCk7CQlcCisgICAgKHYpLT5oZWFkZXIubmV4dC52ZWN0b3IgPSB2ZWN0b3JfZnJl ZV9saXN0c1tpbmRleF07CQlcCisgICAgdmVjdG9yX2ZyZWVfbGlzdHNbaW5kZXhdID0gKHYp OwkJCQlcCisgIH0gd2hpbGUgKDApCisKK3N0cnVjdCB2ZWN0b3JfYmxvY2sKK3sKKyAgY2hh ciBkYXRhW1ZFQ1RPUl9CTE9DS19CWVRFU107CisgIHN0cnVjdCB2ZWN0b3JfYmxvY2sgKm5l eHQ7Cit9OworCisvKiBDaGFpbiBvZiB2ZWN0b3IgYmxvY2tzLiAgKi8KKworc3RhdGljIHN0 cnVjdCB2ZWN0b3JfYmxvY2sgKnZlY3Rvcl9ibG9ja3M7CisKKy8qIFZlY3RvciBmcmVlIGxp c3RzLCB3aGVyZSBOVEggaXRlbSBwb2ludHMgdG8gYSBjaGFpbiBvZiBmcmVlCisgICB2ZWN0 b3JzIG9mIHRoZSBzYW1lIE5CWVRFUyBzaXplLCBzbyBOVEggPT0gVklOREVYIChOQllURVMp LiAgKi8KKworc3RhdGljIHN0cnVjdCBMaXNwX1ZlY3RvciAqdmVjdG9yX2ZyZWVfbGlzdHNb VkVDVE9SX01BWF9GUkVFX0xJU1RfSU5ERVhdOworCisvKiBTaW5nbHktbGlua2VkIGxpc3Qg b2YgbGFyZ2UgdmVjdG9ycy4gICovCisKK3N0YXRpYyBzdHJ1Y3QgTGlzcF9WZWN0b3IgKmxh cmdlX3ZlY3RvcnM7CisKKy8qIFRoZSBvbmx5IHZlY3RvciB3aXRoIDAgc2xvdHMsIGFsbG9j YXRlZCBmcm9tIHB1cmUgc3BhY2UuICAqLworCitzdGF0aWMgc3RydWN0IExpc3BfVmVjdG9y ICp6ZXJvX3ZlY3RvcjsKKworLyogR2V0IGEgbmV3IHZlY3RvciBibG9jay4gICovCisKK3N0 YXRpYyBzdHJ1Y3QgdmVjdG9yX2Jsb2NrICoKK2FsbG9jYXRlX3ZlY3Rvcl9ibG9jayAodm9p ZCkKK3sKKyAgc3RydWN0IHZlY3Rvcl9ibG9jayAqYmxvY2s7CisKKyNpZmRlZiBET1VHX0xF QV9NQUxMT0MKKyAgbWFsbG9wdCAoTV9NTUFQX01BWCwgMCk7CisjZW5kaWYKKworICBibG9j ayA9IHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IHZlY3Rvcl9ibG9jaykpOworICBpZiAoIWJs b2NrKQorICAgIG1lbW9yeV9mdWxsIChzaXplb2YgKHN0cnVjdCB2ZWN0b3JfYmxvY2spKTsK KworI2lmZGVmIERPVUdfTEVBX01BTExPQworICBtYWxsb3B0IChNX01NQVBfTUFYLCBNTUFQ X01BWF9BUkVBUyk7CisjZW5kaWYKKworI2lmIEdDX01BUktfU1RBQ0sgJiYgIWRlZmluZWQg R0NfTUFMTE9DX0NIRUNLCisgIG1lbV9pbnNlcnQgKGJsb2NrLT5kYXRhLCBibG9jay0+ZGF0 YSArIFZFQ1RPUl9CTE9DS19CWVRFUywKKwkgICAgICBNRU1fVFlQRV9WRUNUT1JfQkxPQ0sp OworI2VuZGlmCisKKyAgYmxvY2stPm5leHQgPSB2ZWN0b3JfYmxvY2tzOworICB2ZWN0b3Jf YmxvY2tzID0gYmxvY2s7CisgIHJldHVybiBibG9jazsKK30KKworLyogQ2FsbGVkIG9uY2Ug dG8gaW5pdGlhbGl6ZSB2ZWN0b3IgYWxsb2NhdGlvbi4gICovCisKK3N0YXRpYyB2b2lkCitp bml0X3ZlY3RvcnMgKHZvaWQpCit7CisgIHplcm9fdmVjdG9yID0gKHN0cnVjdCBMaXNwX1Zl Y3RvciAqKQorICAgIHB1cmVfYWxsb2MgKGhlYWRlcl9zaXplLCBMaXNwX1ZlY3Rvcmxpa2Up OworICB6ZXJvX3ZlY3Rvci0+aGVhZGVyLnNpemUgPSAwOworfQorCisvKiBBbGxvY2F0ZSB2 ZWN0b3IgZnJvbSBhIHZlY3RvciBibG9jay4gICovCisKK3N0YXRpYyBzdHJ1Y3QgTGlzcF9W ZWN0b3IgKgorYWxsb2NhdGVfdmVjdG9yX2Zyb21fYmxvY2sgKHNpemVfdCBuYnl0ZXMpCit7 CisgIHN0cnVjdCBMaXNwX1ZlY3RvciAqdmVjdG9yLCAqcmVzdDsKKyAgc3RydWN0IHZlY3Rv cl9ibG9jayAqYmxvY2s7CisgIHNpemVfdCBpbmRleCwgcmVzdGJ5dGVzOworCisgIGVhc3Nl cnQgKFZCTE9DS19CWVRFU19NSU4gPD0gbmJ5dGVzICYmIG5ieXRlcyA8PSBWQkxPQ0tfQllU RVNfTUFYKTsKKyAgZWFzc2VydCAobmJ5dGVzICUgcm91bmR1cF9zaXplID09IDApOworCisg IC8qIEZpcnN0LCB0cnkgdG8gYWxsb2NhdGUgZnJvbSBhIGZyZWUgbGlzdAorICAgICBjb250 YWluaW5nIHZlY3RvcnMgb2YgdGhlIHJlcXVlc3RlZCBzaXplLiAgKi8KKyAgaW5kZXggPSBW SU5ERVggKG5ieXRlcyk7CisgIGlmICh2ZWN0b3JfZnJlZV9saXN0c1tpbmRleF0pCisgICAg eworICAgICAgdmVjdG9yID0gdmVjdG9yX2ZyZWVfbGlzdHNbaW5kZXhdOworICAgICAgdmVj dG9yX2ZyZWVfbGlzdHNbaW5kZXhdID0gdmVjdG9yLT5oZWFkZXIubmV4dC52ZWN0b3I7Cisg ICAgICB2ZWN0b3ItPmhlYWRlci5uZXh0Lm5ieXRlcyA9IG5ieXRlczsKKyAgICAgIHJldHVy biB2ZWN0b3I7CisgICAgfQorCisgIC8qIE5leHQsIGNoZWNrIGZyZWUgbGlzdHMgY29udGFp bmluZyBsYXJnZXIgdmVjdG9ycy4gIFNpbmNlCisgICAgIHdlIHdpbGwgc3BsaXQgdGhlIHJl c3VsdCwgd2Ugc2hvdWxkIGhhdmUgcmVtYWluaW5nIHNwYWNlCisgICAgIGxhcmdlIGVub3Vn aCB0byB1c2UgZm9yIG9uZS1zbG90IHZlY3RvciBhdCBsZWFzdC4gICovCisgIGZvciAoaW5k ZXggPSBWSU5ERVggKG5ieXRlcyArIFZCTE9DS19CWVRFU19NSU4pOworICAgICAgIGluZGV4 IDwgVkVDVE9SX01BWF9GUkVFX0xJU1RfSU5ERVg7IGluZGV4KyspCisgICAgaWYgKHZlY3Rv cl9mcmVlX2xpc3RzW2luZGV4XSkKKyAgICAgIHsKKwkvKiBUaGlzIHZlY3RvciBpcyBsYXJn ZXIgdGhhbiByZXF1ZXN0ZWQuICAqLworCXZlY3RvciA9IHZlY3Rvcl9mcmVlX2xpc3RzW2lu ZGV4XTsKKwl2ZWN0b3JfZnJlZV9saXN0c1tpbmRleF0gPSB2ZWN0b3ItPmhlYWRlci5uZXh0 LnZlY3RvcjsKKwl2ZWN0b3ItPmhlYWRlci5uZXh0Lm5ieXRlcyA9IG5ieXRlczsKKworCS8q IEV4Y2VzcyBieXRlcyBhcmUgdXNlZCBmb3IgdGhlIHNtYWxsZXIgdmVjdG9yLAorCSAgIHdo aWNoIHNob3VsZCBiZSBzZXQgb24gYW4gYXBwcm9wcmlhdGUgZnJlZSBsaXN0LiAgKi8KKwly ZXN0Ynl0ZXMgPSBpbmRleCAqIHJvdW5kdXBfc2l6ZSArIFZCTE9DS19CWVRFU19NSU4gLSBu Ynl0ZXM7CisJZWFzc2VydCAocmVzdGJ5dGVzICUgcm91bmR1cF9zaXplID09IDApOworCXJl c3QgPSBBRFZBTkNFICh2ZWN0b3IsIG5ieXRlcyk7CisJU0VUVVBfT05fRlJFRV9MSVNUIChy ZXN0LCByZXN0Ynl0ZXMsIGluZGV4KTsKKwlyZXR1cm4gdmVjdG9yOworICAgICAgfQorCisg IC8qIEZpbmFsbHksIG5lZWQgYSBuZXcgdmVjdG9yIGJsb2NrLiAgKi8KKyAgYmxvY2sgPSBh bGxvY2F0ZV92ZWN0b3JfYmxvY2sgKCk7CisKKyAgLyogTmV3IHZlY3RvciB3aWxsIGJlIGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBibG9jay4gICovCisgIHZlY3RvciA9IChzdHJ1Y3Qg TGlzcF9WZWN0b3IgKikgYmxvY2stPmRhdGE7CisgIHZlY3Rvci0+aGVhZGVyLm5leHQubmJ5 dGVzID0gbmJ5dGVzOworCisgIC8qIElmIHRoZSByZXN0IG9mIHNwYWNlIGZyb20gdGhpcyBi bG9jayBpcyBsYXJnZSBlbm91Z2gKKyAgICAgZm9yIG9uZS1zbG90IHZlY3RvciBhdCBsZWFz dCwgc2V0IHVwIGl0IG9uIGEgZnJlZSBsaXN0LiAgKi8KKyAgcmVzdGJ5dGVzID0gVkVDVE9S X0JMT0NLX0JZVEVTIC0gbmJ5dGVzOworICBpZiAocmVzdGJ5dGVzID49IFZCTE9DS19CWVRF U19NSU4pCisgICAgeworICAgICAgZWFzc2VydCAocmVzdGJ5dGVzICUgcm91bmR1cF9zaXpl ID09IDApOworICAgICAgcmVzdCA9IEFEVkFOQ0UgKHZlY3RvciwgbmJ5dGVzKTsKKyAgICAg IFNFVFVQX09OX0ZSRUVfTElTVCAocmVzdCwgcmVzdGJ5dGVzLCBpbmRleCk7CisgICAgfQor ICByZXR1cm4gdmVjdG9yOworIH0KKworLyogUmV0dXJuIGhvdyBtYW55IExpc3BfT2JqZWN0 cyBjYW4gYmUgc3RvcmVkIGluIFYuICAqLworCisjZGVmaW5lIFZFQ1RPUl9TSVpFKHYpICgo diktPmhlYWRlci5zaXplICYgUFNFVURPVkVDVE9SX0ZMQUcgPwkJXAorCQkJKFBTRVVET1ZF Q1RPUl9TSVpFX01BU0sgJiAodiktPmhlYWRlci5zaXplKSA6CVwKKwkJCSh2KS0+aGVhZGVy LnNpemUpCisKKy8qIE5vbnplcm8gaWYgVkVDVE9SIHBvaW50ZXIgaXMgdmFsaWQgcG9pbnRl ciBpbnNpZGUgQkxPQ0suICAqLworCisjZGVmaW5lIFZFQ1RPUl9JTl9CTE9DSyh2ZWN0b3Is YmxvY2spCQlcCisgICgoY2hhciAqKSAodmVjdG9yKSA8PSAoYmxvY2spLT5kYXRhCQlcCisg ICArIFZFQ1RPUl9CTE9DS19CWVRFUyAtIFZCTE9DS19CWVRFU19NSU4pCisKKy8qIFJlY2xh aW0gc3BhY2UgdXNlZCBieSB1bm1hcmtlZCB2ZWN0b3JzLiAgKi8KKworc3RhdGljIHZvaWQK K3N3ZWVwX3ZlY3RvcnMgKHZvaWQpCit7CisgIHN0cnVjdCB2ZWN0b3JfYmxvY2sgKmJsb2Nr ID0gdmVjdG9yX2Jsb2NrcywgKipicHJldiA9ICZ2ZWN0b3JfYmxvY2tzOworICBzdHJ1Y3Qg TGlzcF9WZWN0b3IgKnZlY3RvciwgKm5leHQsICoqdnByZXYgPSAmbGFyZ2VfdmVjdG9yczsK KworICB0b3RhbF92ZWN0b3Jfc2l6ZSA9IDA7CisgIG1lbXNldCAodmVjdG9yX2ZyZWVfbGlz dHMsIDAsIHNpemVvZiAodmVjdG9yX2ZyZWVfbGlzdHMpKTsKKworICAvKiBMb29raW5nIHRo cm91Z2ggdmVjdG9yIGJsb2Nrcy4gICovCisKKyAgZm9yIChibG9jayA9IHZlY3Rvcl9ibG9j a3M7IGJsb2NrOyBibG9jayA9ICpicHJldikKKyAgICB7CisgICAgICBpbnQgZnJlZV90aGlz X2Jsb2NrID0gMDsKKworICAgICAgZm9yICh2ZWN0b3IgPSAoc3RydWN0IExpc3BfVmVjdG9y ICopIGJsb2NrLT5kYXRhOworCSAgIFZFQ1RPUl9JTl9CTE9DSyAodmVjdG9yLCBibG9jayk7 IHZlY3RvciA9IG5leHQpCisJeworCSAgaWYgKFZFQ1RPUl9NQVJLRURfUCAodmVjdG9yKSkK KwkgICAgeworCSAgICAgIFZFQ1RPUl9VTk1BUksgKHZlY3Rvcik7CisJICAgICAgdG90YWxf dmVjdG9yX3NpemUgKz0gVkVDVE9SX1NJWkUgKHZlY3Rvcik7CisJICAgICAgbmV4dCA9IEFE VkFOQ0UgKHZlY3RvciwgdmVjdG9yLT5oZWFkZXIubmV4dC5uYnl0ZXMpOworCSAgICB9CisJ ICBlbHNlCisJICAgIHsKKwkgICAgICBwdHJkaWZmX3QgbmJ5dGVzOworCisJICAgICAgaWYg KCh2ZWN0b3ItPmhlYWRlci5zaXplICYgVkVDVE9SX0ZSRUVfTElTVF9GTEFHKQorCQkgID09 IFZFQ1RPUl9GUkVFX0xJU1RfRkxBRykKKwkJdmVjdG9yLT5oZWFkZXIubmV4dC5uYnl0ZXMg PQorCQkgIHZlY3Rvci0+aGVhZGVyLnNpemUgJiAoVkVDVE9SX0JMT0NLX1NJWkUgLSAxKTsK KwkgICAgICAKKwkgICAgICBuZXh0ID0gQURWQU5DRSAodmVjdG9yLCB2ZWN0b3ItPmhlYWRl ci5uZXh0Lm5ieXRlcyk7CisKKwkgICAgICAvKiBXaGlsZSBORVhUIGlzIG5vdCBtYXJrZWQs IHRyeSB0byBjb2FsZXNjZSB3aXRoIFZFQ1RPUiwKKwkJIHRodXMgbWFraW5nIFZFQ1RPUiBv ZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzaXplLiAgKi8KKworCSAgICAgIHdoaWxlIChWRUNU T1JfSU5fQkxPQ0sgKG5leHQsIGJsb2NrKSkKKwkJeworCQkgIGlmIChWRUNUT1JfTUFSS0VE X1AgKG5leHQpKQorCQkgICAgYnJlYWs7CisJCSAgaWYgKChuZXh0LT5oZWFkZXIuc2l6ZSAm IFZFQ1RPUl9GUkVFX0xJU1RfRkxBRykKKwkJICAgICAgPT0gVkVDVE9SX0ZSRUVfTElTVF9G TEFHKQorCQkgICAgbmJ5dGVzID0gbmV4dC0+aGVhZGVyLnNpemUgJiAoVkVDVE9SX0JMT0NL X1NJWkUgLSAxKTsKKwkJICBlbHNlCisJCSAgICBuYnl0ZXMgPSBuZXh0LT5oZWFkZXIubmV4 dC5uYnl0ZXM7CisJCSAgdmVjdG9yLT5oZWFkZXIubmV4dC5uYnl0ZXMgKz0gbmJ5dGVzOwor CQkgIG5leHQgPSBBRFZBTkNFIChuZXh0LCBuYnl0ZXMpOworCQl9CisJICAgICAgCisJICAg ICAgZWFzc2VydCAodmVjdG9yLT5oZWFkZXIubmV4dC5uYnl0ZXMgJSByb3VuZHVwX3NpemUg PT0gMCk7CisKKwkgICAgICBpZiAodmVjdG9yID09IChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikg YmxvY2stPmRhdGEKKwkJICAmJiAhVkVDVE9SX0lOX0JMT0NLIChuZXh0LCBibG9jaykpCisJ CS8qIFRoaXMgYmxvY2sgc2hvdWxkIGJlIGZyZWVkIGJlY2F1c2UgYWxsIG9mIGl0J3MKKwkJ ICAgc3BhY2Ugd2FzIGNvYWxlc2NlZCBpbnRvIHRoZSBvbmx5IGZyZWUgdmVjdG9yLiAgKi8K KwkJZnJlZV90aGlzX2Jsb2NrID0gMTsKKwkgICAgICBlbHNlCisJCVNFVFVQX09OX0ZSRUVf TElTVCAodmVjdG9yLCB2ZWN0b3ItPmhlYWRlci5uZXh0Lm5ieXRlcywgbmJ5dGVzKTsKKwkg ICAgfQorCX0KKworICAgICAgaWYgKGZyZWVfdGhpc19ibG9jaykKKwl7CisJICAqYnByZXYg PSBibG9jay0+bmV4dDsKKyNpZiBHQ19NQVJLX1NUQUNLICYmICFkZWZpbmVkIEdDX01BTExP Q19DSEVDSworCSAgbWVtX2RlbGV0ZSAobWVtX2ZpbmQgKGJsb2NrLT5kYXRhKSk7CisjZW5k aWYKKwkgIHhmcmVlIChibG9jayk7CisJfQorICAgICAgZWxzZQorCWJwcmV2ID0gJmJsb2Nr LT5uZXh0OworICAgIH0KKworICAvKiBTd2VlcCBsYXJnZSB2ZWN0b3JzLiAgKi8KKworICBm b3IgKHZlY3RvciA9IGxhcmdlX3ZlY3RvcnM7IHZlY3RvcjsgdmVjdG9yID0gKnZwcmV2KQor ICAgIHsKKyAgICAgIGlmIChWRUNUT1JfTUFSS0VEX1AgKHZlY3RvcikpCisJeworCSAgVkVD VE9SX1VOTUFSSyAodmVjdG9yKTsKKwkgIHRvdGFsX3ZlY3Rvcl9zaXplICs9IFZFQ1RPUl9T SVpFICh2ZWN0b3IpOworCSAgdnByZXYgPSAmdmVjdG9yLT5oZWFkZXIubmV4dC52ZWN0b3I7 CisJfQorICAgICAgZWxzZQorCXsKKwkgICp2cHJldiA9IHZlY3Rvci0+aGVhZGVyLm5leHQu dmVjdG9yOworCSAgbGlzcF9mcmVlICh2ZWN0b3IpOworCX0KKyAgICB9Cit9CisKIC8qIFZh bHVlIGlzIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBMaXNwX1ZlY3RvciBzdHJ1 Y3R1cmUKICAgIHdpdGggcm9vbSBmb3IgTEVOIExpc3BfT2JqZWN0cy4gICovCiAKQEAgLTI5 NjAsOCArMzI1NywxOSBAQAogICAvKiBUaGlzIGdldHMgdHJpZ2dlcmVkIGJ5IGNvZGUgd2hp Y2ggSSBoYXZlbid0IGJvdGhlcmVkIHRvIGZpeC4gIC0tU3RlZiAgKi8KICAgLyogZWFzc2Vy dCAoIWhhbmRsaW5nX3NpZ25hbCk7ICovCiAKKyAgaWYgKGxlbiA9PSAwKQorICAgIHJldHVy biB6ZXJvX3ZlY3RvcjsKKwogICBuYnl0ZXMgPSBoZWFkZXJfc2l6ZSArIGxlbiAqIHdvcmRf c2l6ZTsKLSAgcCA9IChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgbGlzcF9tYWxsb2MgKG5ieXRl cywgTUVNX1RZUEVfVkVDVE9STElLRSk7CisKKyAgaWYgKG5ieXRlcyA8PSBWQkxPQ0tfQllU RVNfTUFYKQorICAgIHAgPSBhbGxvY2F0ZV92ZWN0b3JfZnJvbV9ibG9jayAodnJvdW5kdXAg KG5ieXRlcykpOworICBlbHNlCisgICAgeworICAgICAgcCA9IChzdHJ1Y3QgTGlzcF9WZWN0 b3IgKikgbGlzcF9tYWxsb2MgKG5ieXRlcywgTUVNX1RZUEVfVkVDVE9STElLRSk7CisgICAg ICBwLT5oZWFkZXIubmV4dC52ZWN0b3IgPSBsYXJnZV92ZWN0b3JzOworICAgICAgbGFyZ2Vf dmVjdG9ycyA9IHA7CisgICAgfQogCiAjaWZkZWYgRE9VR19MRUFfTUFMTE9DCiAgIC8qIEJh Y2sgdG8gYSByZWFzb25hYmxlIG1heGltdW0gb2YgbW1hcCdlZCBhcmVhcy4gICovCkBAIC0y OTcxLDkgKzMyNzksNiBAQAogICBjb25zaW5nX3NpbmNlX2djICs9IG5ieXRlczsKICAgdmVj dG9yX2NlbGxzX2NvbnNlZCArPSBsZW47CiAKLSAgcC0+aGVhZGVyLm5leHQudmVjdG9yID0g YWxsX3ZlY3RvcnM7Ci0gIGFsbF92ZWN0b3JzID0gcDsKLQogICBNQUxMT0NfVU5CTE9DS19J TlBVVDsKIAogICByZXR1cm4gcDsKQEAgLTQwNzIsNyArNDM3NywzNCBAQAogc3RhdGljIGlu bGluZSBpbnQKIGxpdmVfdmVjdG9yX3AgKHN0cnVjdCBtZW1fbm9kZSAqbSwgdm9pZCAqcCkK IHsKLSAgcmV0dXJuIChwID09IG0tPnN0YXJ0ICYmIG0tPnR5cGUgPT0gTUVNX1RZUEVfVkVD VE9STElLRSk7CisgIGlmIChtLT50eXBlID09IE1FTV9UWVBFX1ZFQ1RPUl9CTE9DSykKKyAg ICB7CisgICAgICAvKiBUaGlzIG1lbW9yeSBub2RlIGNvcnJlc3BvbmRzIHRvIGEgdmVjdG9y IGJsb2NrLiAgKi8KKyAgICAgIHN0cnVjdCB2ZWN0b3JfYmxvY2sgKmJsb2NrID0gKHN0cnVj dCB2ZWN0b3JfYmxvY2sgKikgbS0+c3RhcnQ7CisgICAgICBzdHJ1Y3QgTGlzcF9WZWN0b3Ig KnZlY3RvciA9IChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgYmxvY2stPmRhdGE7CisKKyAgICAg IC8qIFAgaXMgaW4gdGhlIGJsb2NrJ3MgYWxsb2NhdGlvbiByYW5nZS4gIFNjYW4gdGhlIGJs b2NrCisJIHVwIHRvIFAgYW5kIHNlZSB3aGV0aGVyIFAgcG9pbnRzIHRvIHRoZSBzdGFydCBv ZiBzb21lCisJIHZlY3RvciB3aGljaCBpcyBub3Qgb24gYSBmcmVlIGxpc3QuICBGSVhNRTog Y2hlY2sgd2hldGhlcgorCSBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMgKHByb2JhYmx5IGEg bG90IG9mIHNob3J0IHZlY3RvcnMpCisJIG1heSBjYXVzZSBhIHN1YnN0YW50aWFsIG92ZXJo ZWFkIG9mIHRoaXMgbG9vcC4gICovCisgICAgICB3aGlsZSAoVkVDVE9SX0lOX0JMT0NLICh2 ZWN0b3IsIGJsb2NrKQorCSAgICAgJiYgdmVjdG9yIDw9IChzdHJ1Y3QgTGlzcF9WZWN0b3Ig KikgcCkKKwl7CisJICBpZiAoKHZlY3Rvci0+aGVhZGVyLnNpemUgJiBWRUNUT1JfRlJFRV9M SVNUX0ZMQUcpCisJICAgICAgPT0gVkVDVE9SX0ZSRUVfTElTVF9GTEFHKQorCSAgICB2ZWN0 b3IgPSBBRFZBTkNFICh2ZWN0b3IsICh2ZWN0b3ItPmhlYWRlci5zaXplCisJCQkJICAgICAg ICYgKFZFQ1RPUl9CTE9DS19TSVpFIC0gMSkpKTsKKwkgIGVsc2UgaWYgKHZlY3RvciA9PSBw KQorCSAgICByZXR1cm4gMTsKKwkgIGVsc2UKKwkgICAgdmVjdG9yID0gQURWQU5DRSAodmVj dG9yLCB2ZWN0b3ItPmhlYWRlci5uZXh0Lm5ieXRlcyk7CisJfQorICAgIH0KKyAgZWxzZSBp ZiAobS0+dHlwZSA9PSBNRU1fVFlQRV9WRUNUT1JMSUtFICYmIHAgPT0gbS0+c3RhcnQpCisg ICAgLyogVGhpcyBtZW1vcnkgbm9kZSBjb3JyZXNwb25kcyB0byBhIGxhcmdlIHZlY3Rvci4g ICovCisgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOwogfQogCiAKQEAgLTQyNzIsNiArNDYw NCw3IEBACiAJICBicmVhazsKIAogCWNhc2UgTUVNX1RZUEVfVkVDVE9STElLRToKKwljYXNl IE1FTV9UWVBFX1ZFQ1RPUl9CTE9DSzoKIAkgIGlmIChsaXZlX3ZlY3Rvcl9wIChtLCBwKSkK IAkgICAgewogCSAgICAgIExpc3BfT2JqZWN0IHRlbTsKQEAgLTQ3MDUsNiArNTAzOCw3IEBA CiAgICAgICByZXR1cm4gbGl2ZV9mbG9hdF9wIChtLCBwKTsKIAogICAgIGNhc2UgTUVNX1RZ UEVfVkVDVE9STElLRToKKyAgICBjYXNlIE1FTV9UWVBFX1ZFQ1RPUl9CTE9DSzoKICAgICAg IHJldHVybiBsaXZlX3ZlY3Rvcl9wIChtLCBwKTsKIAogICAgIGRlZmF1bHQ6CkBAIC02MjQx LDMzICs2NTc1LDcgQEAKIAl9CiAgIH0KIAotICAvKiBGcmVlIGFsbCB1bm1hcmtlZCB2ZWN0 b3JzICovCi0gIHsKLSAgICByZWdpc3RlciBzdHJ1Y3QgTGlzcF9WZWN0b3IgKnZlY3RvciA9 IGFsbF92ZWN0b3JzLCAqcHJldiA9IDAsICpuZXh0OwotICAgIHRvdGFsX3ZlY3Rvcl9zaXpl ID0gMDsKLQotICAgIHdoaWxlICh2ZWN0b3IpCi0gICAgICBpZiAoIVZFQ1RPUl9NQVJLRURf UCAodmVjdG9yKSkKLQl7Ci0JICBpZiAocHJldikKLQkgICAgcHJldi0+aGVhZGVyLm5leHQg PSB2ZWN0b3ItPmhlYWRlci5uZXh0OwotCSAgZWxzZQotCSAgICBhbGxfdmVjdG9ycyA9IHZl Y3Rvci0+aGVhZGVyLm5leHQudmVjdG9yOwotCSAgbmV4dCA9IHZlY3Rvci0+aGVhZGVyLm5l eHQudmVjdG9yOwotCSAgbGlzcF9mcmVlICh2ZWN0b3IpOwotCSAgdmVjdG9yID0gbmV4dDsK LQotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBWRUNUT1JfVU5NQVJLICh2ZWN0b3IpOwotCSAg aWYgKHZlY3Rvci0+aGVhZGVyLnNpemUgJiBQU0VVRE9WRUNUT1JfRkxBRykKLQkgICAgdG90 YWxfdmVjdG9yX3NpemUgKz0gUFNFVURPVkVDVE9SX1NJWkVfTUFTSyAmIHZlY3Rvci0+aGVh ZGVyLnNpemU7Ci0JICBlbHNlCi0JICAgIHRvdGFsX3ZlY3Rvcl9zaXplICs9IHZlY3Rvci0+ aGVhZGVyLnNpemU7Ci0JICBwcmV2ID0gdmVjdG9yLCB2ZWN0b3IgPSB2ZWN0b3ItPmhlYWRl ci5uZXh0LnZlY3RvcjsKLQl9Ci0gIH0KKyAgc3dlZXBfdmVjdG9ycyAoKTsKIAogI2lmZGVm IEdDX0NIRUNLX1NUUklOR19CWVRFUwogICBpZiAoIW5vbmludGVyYWN0aXZlKQpAQCAtNjQw NCw3ICs2NzEyLDYgQEAKICAgVmRlYWQgPSBtYWtlX3B1cmVfc3RyaW5nICgiREVBRCIsIDQs IDQsIDApOwogI2VuZGlmCiAKLSAgYWxsX3ZlY3RvcnMgPSAwOwogICBpZ25vcmVfd2Fybmlu Z3MgPSAxOwogI2lmZGVmIERPVUdfTEVBX01BTExPQwogICBtYWxsb3B0IChNX1RSSU1fVEhS RVNIT0xELCAxMjgqMTAyNCk7IC8qIHRyaW0gdGhyZXNob2xkICovCkBAIC02NDE3LDYgKzY3 MjQsNyBAQAogICBpbml0X21hcmtlciAoKTsKICAgaW5pdF9mbG9hdCAoKTsKICAgaW5pdF9p bnRlcnZhbHMgKCk7CisgIGluaXRfdmVjdG9ycyAoKTsKICAgaW5pdF93ZWFrX2hhc2hfdGFi bGVzICgpOwogCiAjaWZkZWYgUkVMX0FMTE9DCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xp c3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMi0wNS0zMCAxOToyMzozNyArMDAwMAorKysgc3Jj L2xpc3AuaAkyMDEyLTA2LTA4IDAzOjQxOjI3ICswMDAwCkBAIC05MTYsMTEgKzkxNiwxNSBA QAogICB7CiAgICAgcHRyZGlmZl90IHNpemU7CiAKLSAgICAvKiBQb2ludGVyIHRvIHRoZSBu ZXh0IHZlY3Rvci1saWtlIG9iamVjdC4gIEl0IGlzIGdlbmVyYWxseSBhIGJ1ZmZlciBvciBh CisgICAgLyogV2hlbiB0aGUgdmVjdG9yIGlzIGFsbG9jYXRlZCBmcm9tIGEgdmVjdG9yIGJs b2NrLCBOQllURVMgaXMgdXNlZAorICAgICAgIGlmIHRoZSB2ZWN0b3IgaXMgbm90IG9uIGEg ZnJlZSBsaXN0LCBhbmQgVkVDVE9SIGlzIHVzZWQgb3RoZXJ3aXNlLgorICAgICAgIEZvciBs YXJnZSB2ZWN0b3ItbGlrZSBvYmplY3RzLCBCVUZGRVIgb3IgVkVDVE9SIGlzIHVzZWQgYXMg YSBwb2ludGVyCisgICAgICAgdG8gdGhlIG5leHQgdmVjdG9yLWxpa2Ugb2JqZWN0LiAgSXQg aXMgZ2VuZXJhbGx5IGEgYnVmZmVyIG9yIGEgCiAgICAgICAgTGlzcF9WZWN0b3IgYWxpYXMs IHNvIGZvciBjb252ZW5pZW5jZSBpdCBpcyBhIHVuaW9uIGluc3RlYWQgb2YgYQogICAgICAg IHBvaW50ZXI6IHRoaXMgd2F5LCBvbmUgY2FuIHdyaXRlIFAtPm5leHQudmVjdG9yIGluc3Rl YWQgb2YgKChzdHJ1Y3QKICAgICAgICBMaXNwX1ZlY3RvciAqKSBQLT5uZXh0KS4gICovCiAg ICAgdW5pb24geworICAgICAgcHRyZGlmZl90IG5ieXRlczsKICAgICAgIHN0cnVjdCBidWZm ZXIgKmJ1ZmZlcjsKICAgICAgIHN0cnVjdCBMaXNwX1ZlY3RvciAqdmVjdG9yOwogICAgIH0g bmV4dDsKCg== --------------070006000006080809050304--