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: immediate strings Date: Tue, 29 May 2012 10:55:34 +0400 Message-ID: <4FC472E6.5020005@yandex.ru> References: <4FBB51E7.6080601@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070408010901090900010107" X-Trace: dough.gmane.org 1338274419 30752 80.91.229.3 (29 May 2012 06:53:39 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 29 May 2012 06:53:39 +0000 (UTC) Cc: Stefan Monnier To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue May 29 08:53:38 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 1SZGJC-0004rj-9O for ged-emacs-devel@m.gmane.org; Tue, 29 May 2012 08:53:34 +0200 Original-Received: from localhost ([::1]:55265 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SZGJB-0002Mz-RM for ged-emacs-devel@m.gmane.org; Tue, 29 May 2012 02:53:33 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:39580) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SZGJ3-0002Mu-Mo for emacs-devel@gnu.org; Tue, 29 May 2012 02:53:31 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SZGJ0-0003F2-4s for emacs-devel@gnu.org; Tue, 29 May 2012 02:53:25 -0400 Original-Received: from forward15.mail.yandex.net ([95.108.130.119]:59639) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SZGIz-0003El-9A for emacs-devel@gnu.org; Tue, 29 May 2012 02:53:22 -0400 Original-Received: from smtp14.mail.yandex.net (smtp14.mail.yandex.net [95.108.131.192]) by forward15.mail.yandex.net (Yandex) with ESMTP id 135BE9E11FB; Tue, 29 May 2012 10:53:19 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1338274399; bh=atG/NnjUZjvjwRp+EFYCiKHlXCGh/2p7FJmExUhISOE=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type; b=Td8PhhJAu1X9M1onbSN3qnEek99wrAgXzZrWE/SckgVhPsj7GKrceiYflgDVB+1CC rCRld55N/XJ0cb+ZCkRAAF0WGVqWmdx48tbbnyb4QmO9BPM3vrP7VIEd9hWNT7V2eU RyvKV1wps4cfyjV7zEPPAmHq7sACIW5T+ksa1Hq8= Original-Received: from smtp14.mail.yandex.net (localhost [127.0.0.1]) by smtp14.mail.yandex.net (Yandex) with ESMTP id DF79E1B60482; Tue, 29 May 2012 10:53:18 +0400 (MSK) Original-Received: from antipov.client.gelicon.ru (antipov.client.gelicon.ru [78.153.153.8]) by smtp14.mail.yandex.net (nwsmtp/Yandex) with ESMTP id rIAiCK4P-rIAuY9DL; Tue, 29 May 2012 10:53:18 +0400 X-Yandex-Rcpt-Suid: emacs-devel@gnu.org X-Yandex-Rcpt-Suid: monnier@iro.umontreal.ca DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1338274398; bh=atG/NnjUZjvjwRp+EFYCiKHlXCGh/2p7FJmExUhISOE=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type; b=rffLO/dzK5mqeYB8i+V6yf5yJve94MjChC+TEC2ClqMzMX3JsNO1FaiSrRTywi+pD Cq7/Bify4FMD+ghhZJBEi281UJvmJRZCbqxVxoe6uOmlfnQNZmwUkSSXlTvxMdyJef Jh4Gi8Uppy1onNaGcAUdSjV/hbYlDQoSpKcVMXnY= 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.119 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:150674 Archived-At: This is a multi-part message in MIME format. --------------070408010901090900010107 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 05/24/2012 09:17 AM, Stefan Monnier wrote: >> +#if __GNUC__> 1 /* Any GCC still in use should support this. */ >> +#define PACKED __attribute__((packed)) >> +#else >> +#define PACKED >> +#endif > > Let's not use "packed" structures: too much trouble. To avoid using 'packed' attribute and speedup an inefficient access to u.dat.size field, it's possible to use 'ptrdiff_t X : BITS_PER_PTRDIFF_T - 2' bitfields - it's still wide enough to hold the values up to STRING_BYTES_BOUND. > Actually, we can allocate all the pure strings as "immediate strings" > (within the limits of imm.nbytes, of course), in which case we'd have > strings with more bytes than STRING_IMM_MAX, so while this assertion may > have been useful for debugging, we'll want to get rid of it. I'm not sure it's worth making string code even more complicated with this. > Is that really 100% reliable? Why not use the `intervals' field with > a 0xdeadbeef pointer instead? Better solutions are welcome, never seen a crash with this; 'intervals' field can't be used because NEXT_FREE_LISP_STRING (X) = Y will overwrite X->intervals. Dmitry --------------070408010901090900010107 Content-Type: text/plain; charset=UTF-8; name="immstr.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="immstr.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMi0w NS0yNSAxODoxOToyNCArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMi0wNS0yOSAwNTo1MTox MCArMDAwMApAQCAtMTQ3LDIwICsxNDcsMTQgQEAKIC8qIE1hcmssIHVubWFyaywgcXVlcnkg bWFyayBiaXQgb2YgYSBMaXNwIHN0cmluZy4gIFMgbXVzdCBiZSBhIHBvaW50ZXIKICAgIHRv IGEgc3RydWN0IExpc3BfU3RyaW5nLiAgKi8KIAotI2RlZmluZSBNQVJLX1NUUklORyhTKQkJ KChTKS0+c2l6ZSB8PSBBUlJBWV9NQVJLX0ZMQUcpCi0jZGVmaW5lIFVOTUFSS19TVFJJTkco UykJKChTKS0+c2l6ZSAmPSB+QVJSQVlfTUFSS19GTEFHKQotI2RlZmluZSBTVFJJTkdfTUFS S0VEX1AoUykJKCgoUyktPnNpemUgJiBBUlJBWV9NQVJLX0ZMQUcpICE9IDApCisjZGVmaW5l IE1BUktfU1RSSU5HKFMpCQkoKFMpLT51LmltbS5nY21hcmtiaXQgPSAxKQorI2RlZmluZSBV Tk1BUktfU1RSSU5HKFMpCSgoUyktPnUuaW1tLmdjbWFya2JpdCA9IDApCisjZGVmaW5lIFNU UklOR19NQVJLRURfUChTKQkoKFMpLT51LmltbS5nY21hcmtiaXQpCiAKICNkZWZpbmUgVkVD VE9SX01BUksoVikJCSgoViktPmhlYWRlci5zaXplIHw9IEFSUkFZX01BUktfRkxBRykKICNk ZWZpbmUgVkVDVE9SX1VOTUFSSyhWKQkoKFYpLT5oZWFkZXIuc2l6ZSAmPSB+QVJSQVlfTUFS S19GTEFHKQogI2RlZmluZSBWRUNUT1JfTUFSS0VEX1AoVikJKCgoViktPmhlYWRlci5zaXpl ICYgQVJSQVlfTUFSS19GTEFHKSAhPSAwKQogCi0vKiBWYWx1ZSBpcyB0aGUgbnVtYmVyIG9m IGJ5dGVzIG9mIFMsIGEgcG9pbnRlciB0byBhIHN0cnVjdCBMaXNwX1N0cmluZy4KLSAgIEJl IGNhcmVmdWwgZHVyaW5nIEdDLCBiZWNhdXNlIFMtPnNpemUgY29udGFpbnMgdGhlIG1hcmsg Yml0IGZvcgotICAgc3RyaW5ncy4gICovCi0KLSNkZWZpbmUgR0NfU1RSSU5HX0JZVEVTKFMp CShTVFJJTkdfQllURVMgKFMpKQotCiAvKiBHbG9iYWwgdmFyaWFibGVzLiAgKi8KIHN0cnVj dCBlbWFjc19nbG9iYWxzIGdsb2JhbHM7CiAKQEAgLTM5Miw2ICszODYsNyBAQAogc3RhdGlj IHZvaWQgbWFya19zdGFjayAodm9pZCk7CiBzdGF0aWMgaW50IGxpdmVfdmVjdG9yX3AgKHN0 cnVjdCBtZW1fbm9kZSAqLCB2b2lkICopOwogc3RhdGljIGludCBsaXZlX2J1ZmZlcl9wIChz dHJ1Y3QgbWVtX25vZGUgKiwgdm9pZCAqKTsKK3N0YXRpYyBpbnQgbGl2ZV9zdHJpbmdfZGF0 YV9wIChzdHJ1Y3QgTGlzcF9TdHJpbmcgKik7CiBzdGF0aWMgaW50IGxpdmVfc3RyaW5nX3Ag KHN0cnVjdCBtZW1fbm9kZSAqLCB2b2lkICopOwogc3RhdGljIGludCBsaXZlX2NvbnNfcCAo c3RydWN0IG1lbV9ub2RlICosIHZvaWQgKik7CiBzdGF0aWMgaW50IGxpdmVfc3ltYm9sX3Ag KHN0cnVjdCBtZW1fbm9kZSAqLCB2b2lkICopOwpAQCAtMTc2MSw3ICsxNzU2LDggQEAKICAg IGEgcG9pbnRlciB0byB0aGUgYHUuZGF0YScgbWVtYmVyIG9mIGl0cyBzZGF0YSBzdHJ1Y3R1 cmU7IHRoZQogICAgc3RydWN0dXJlIHN0YXJ0cyBhdCBhIGNvbnN0YW50IG9mZnNldCBpbiBm cm9udCBvZiB0aGF0LiAgKi8KIAotI2RlZmluZSBTREFUQV9PRl9TVFJJTkcoUykgKChzdHJ1 Y3Qgc2RhdGEgKikgKChTKS0+ZGF0YSAtIFNEQVRBX0RBVEFfT0ZGU0VUKSkKKyNkZWZpbmUg U0RBVEFfT0ZfU1RSSU5HKFMpICgoUyktPnUuaW1tLmltbWJpdCA/IChzdHJ1Y3Qgc2RhdGEg KikgTlVMTCBcCisgIDogKChzdHJ1Y3Qgc2RhdGEgKikgKChTKS0+dS5kYXQuZGF0YSAtIFNE QVRBX0RBVEFfT0ZGU0VUKSkpCiAKIAogI2lmZGVmIEdDX0NIRUNLX1NUUklOR19PVkVSUlVO CkBAIC0xODQzLDIxICsxODM5LDI4IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfc3RyaW5nX2J5 dGVzX2NvdW50OwogCi0jZGVmaW5lIENIRUNLX1NUUklOR19CWVRFUyhTKQlTVFJJTkdfQllU RVMgKFMpCi0KLQotLyogTGlrZSBHQ19TVFJJTkdfQllURVMsIGJ1dCB3aXRoIGRlYnVnZ2lu ZyBjaGVjay4gICovCisjZGVmaW5lIENIRUNLX1NUUklOR19CWVRFUyhTKSBzdHJpbmdfYnl0 ZXMgKFMpCiAKIHB0cmRpZmZfdAogc3RyaW5nX2J5dGVzIChzdHJ1Y3QgTGlzcF9TdHJpbmcg KnMpCiB7Ci0gIHB0cmRpZmZfdCBuYnl0ZXMgPQotICAgIChzLT5zaXplX2J5dGUgPCAwID8g cy0+c2l6ZSAmIH5BUlJBWV9NQVJLX0ZMQUcgOiBzLT5zaXplX2J5dGUpOwotCi0gIGlmICgh UFVSRV9QT0lOVEVSX1AgKHMpCi0gICAgICAmJiBzLT5kYXRhCi0gICAgICAmJiBuYnl0ZXMg IT0gU0RBVEFfTkJZVEVTIChTREFUQV9PRl9TVFJJTkcgKHMpKSkKLSAgICBhYm9ydCAoKTsK KyAgcHRyZGlmZl90IG5ieXRlczsKKworICBpZiAocy0+dS5pbW0uaW1tYml0KQorICAgIHsK KyAgICAgIG5ieXRlcyA9IHMtPnUuaW1tLnNpemVfYnl0ZSA8IDAgPyBzLT51LmltbS5zaXpl IDogcy0+dS5pbW0uc2l6ZV9ieXRlOworICAgICAgZWFzc2VydCAobmJ5dGVzIDwgU1RSSU5H X0lNTV9NQVgpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ieXRlcyA9IHMtPnUu ZGF0LnNpemVfYnl0ZSA8IDAgPyBzLT51LmRhdC5zaXplIDogcy0+dS5kYXQuc2l6ZV9ieXRl OworICAgICAgZWFzc2VydCAobmJ5dGVzID49IFNUUklOR19JTU1fTUFYKTsKKyAgICAgIGlm ICghUFVSRV9QT0lOVEVSX1AgKHMpICYmIHMtPnUuZGF0LmRhdGEgJiYKKwkgIG5ieXRlcyAh PSBTREFUQV9OQllURVMgKFNEQVRBX09GX1NUUklORyAocykpKQorCS8qIE5vcm1hbCBub24t cHVyZSBzdHJpbmcgd2l0aCBzaXplIG1pc21hdGNoLiAgKi8KKwlhYm9ydCAoKTsKKyAgICB9 CisKICAgcmV0dXJuIG5ieXRlczsKIH0KIApAQCAtMTg4Miw3ICsxODg1LDcgQEAKIAlDSEVD S19TVFJJTkdfQllURVMgKGZyb20tPnN0cmluZyk7CiAKICAgICAgIGlmIChmcm9tLT5zdHJp bmcpCi0JbmJ5dGVzID0gR0NfU1RSSU5HX0JZVEVTIChmcm9tLT5zdHJpbmcpOworCW5ieXRl cyA9IHN0cmluZ19ieXRlcyAoZnJvbS0+c3RyaW5nKTsKICAgICAgIGVsc2UKIAluYnl0ZXMg PSBTREFUQV9OQllURVMgKGZyb20pOwogCkBAIC0yMDI4LDggKzIwMzEsOCBAQAogICAvKiBE ZXRlcm1pbmUgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gc3RvcmUgTkJZVEVTIGJ5 dGVzCiAgICAgIG9mIHN0cmluZyBkYXRhLiAgKi8KICAgbmVlZGVkID0gU0RBVEFfU0laRSAo bmJ5dGVzKTsKLSAgb2xkX2RhdGEgPSBzLT5kYXRhID8gU0RBVEFfT0ZfU1RSSU5HIChzKSA6 IE5VTEw7Ci0gIG9sZF9uYnl0ZXMgPSBHQ19TVFJJTkdfQllURVMgKHMpOworICBvbGRfZGF0 YSA9IHMtPnUuZGF0LmRhdGEgPyBTREFUQV9PRl9TVFJJTkcgKHMpIDogTlVMTDsKKyAgb2xk X25ieXRlcyA9IHN0cmluZ19ieXRlcyAocyk7CiAKICAgTUFMTE9DX0JMT0NLX0lOUFVUOwog CkBAIC0yMDg4LDEzICsyMDkxLDExIEBACiAgIE1BTExPQ19VTkJMT0NLX0lOUFVUOwogCiAg IGRhdGEtPnN0cmluZyA9IHM7Ci0gIHMtPmRhdGEgPSBTREFUQV9EQVRBIChkYXRhKTsKKyAg cy0+dS5kYXQuZGF0YSA9IFNEQVRBX0RBVEEgKGRhdGEpOwogI2lmZGVmIEdDX0NIRUNLX1NU UklOR19CWVRFUwogICBTREFUQV9OQllURVMgKGRhdGEpID0gbmJ5dGVzOwogI2VuZGlmCi0g IHMtPnNpemUgPSBuY2hhcnM7Ci0gIHMtPnNpemVfYnl0ZSA9IG5ieXRlczsKLSAgcy0+ZGF0 YVtuYnl0ZXNdID0gJ1wwJzsKKyAgcy0+dS5kYXQuZGF0YVtuYnl0ZXNdID0gJ1wwJzsKICNp ZmRlZiBHQ19DSEVDS19TVFJJTkdfT1ZFUlJVTgogICBtZW1jcHkgKChjaGFyICopIGRhdGEg KyBuZWVkZWQsIHN0cmluZ19vdmVycnVuX2Nvb2tpZSwKIAkgIEdDX1NUUklOR19PVkVSUlVO X0NPT0tJRV9TSVpFKTsKQEAgLTIxMTIsNiArMjExMywxMiBAQAogICBjb25zaW5nX3NpbmNl X2djICs9IG5lZWRlZDsKIH0KIAorI2lmZGVmIEdDX1NUUklOR19TVEFUUworCitzdGF0aWMg RU1BQ1NfSU5UIHRvdGFsX2ltbV9zdHJpbmdzLCB0b3RhbF9kYXRfc3RyaW5ncywgdG90YWxf aW1tX2ludGVydmFsczsKK3N0YXRpYyBFTUFDU19JTlQgdG90YWxfaW1tX2J5dGVzLCB0b3Rh bF9kYXRfYnl0ZXMsIHRvdGFsX2RhdF9pbnRlcnZhbHM7CisKKyNlbmRpZgogCiAvKiBTd2Vl cCBhbmQgY29tcGFjdCBzdHJpbmdzLiAgKi8KIApAQCAtMjEyNSw2ICsyMTMyLDEyIEBACiAg IHRvdGFsX3N0cmluZ3MgPSB0b3RhbF9mcmVlX3N0cmluZ3MgPSAwOwogICB0b3RhbF9zdHJp bmdfc2l6ZSA9IDA7CiAKKyNpZmRlZiBHQ19TVFJJTkdfU1RBVFMKKyAgdG90YWxfaW1tX3N0 cmluZ3MgPSB0b3RhbF9kYXRfc3RyaW5ncyA9IDA7CisgIHRvdGFsX2ltbV9ieXRlcyA9IHRv dGFsX2RhdF9ieXRlcyA9IDA7CisgIHRvdGFsX2ltbV9pbnRlcnZhbHMgPSB0b3RhbF9kYXRf aW50ZXJ2YWxzID0gMDsKKyNlbmRpZgorCiAgIC8qIFNjYW4gc3RyaW5nc19ibG9ja3MsIGZy ZWUgTGlzcF9TdHJpbmdzIHRoYXQgYXJlbid0IG1hcmtlZC4gICovCiAgIGZvciAoYiA9IHN0 cmluZ19ibG9ja3M7IGI7IGIgPSBuZXh0KQogICAgIHsKQEAgLTIxMzcsNDkgKzIxNTAsNjQg QEAKIAl7CiAJICBzdHJ1Y3QgTGlzcF9TdHJpbmcgKnMgPSBiLT5zdHJpbmdzICsgaTsKIAot CSAgaWYgKHMtPmRhdGEpCisJICBpZiAoU1RSSU5HX01BUktFRF9QIChzKSkKKwkgICAgewkg ICAgICAKKwkgICAgICAvKiBTdHJpbmcgaXMgbGl2ZTsgdW5tYXJrIGl0IGFuZCBpdHMgaW50 ZXJ2YWxzLiAgKi8KKwkgICAgICBVTk1BUktfU1RSSU5HIChzKTsKKworCSAgICAgIGlmICgh TlVMTF9JTlRFUlZBTF9QIChzLT5pbnRlcnZhbHMpKQorCQlVTk1BUktfQkFMQU5DRV9JTlRF UlZBTFMgKHMtPmludGVydmFscyk7CisKKwkgICAgICArK3RvdGFsX3N0cmluZ3M7CisJICAg ICAgdG90YWxfc3RyaW5nX3NpemUgKz0gc3RyaW5nX2J5dGVzIChzKTsKKyNpZmRlZiBHQ19T VFJJTkdfU1RBVFMKKwkgICAgICBpZiAocy0+dS5pbW0uaW1tYml0KQorCQl7CisJCSAgdG90 YWxfaW1tX3N0cmluZ3MrKzsKKwkJICB0b3RhbF9pbW1fYnl0ZXMgKz0gc3RyaW5nX2J5dGVz IChzKTsKKwkJICBpZiAoIU5VTExfSU5URVJWQUxfUCAocy0+aW50ZXJ2YWxzKSkKKwkJICAg IHRvdGFsX2ltbV9pbnRlcnZhbHMrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHRv dGFsX2RhdF9zdHJpbmdzKys7CisJCSAgdG90YWxfZGF0X2J5dGVzICs9IHN0cmluZ19ieXRl cyAocyk7CisJCSAgaWYgKCFOVUxMX0lOVEVSVkFMX1AgKHMtPmludGVydmFscykpCisJCSAg ICB0b3RhbF9kYXRfaW50ZXJ2YWxzKys7CisJCX0KKyNlbmRpZiAvKiBHQ19TVFJJTkdfU1RB VFMgKi8KKwkgICAgfQorCSAgZWxzZQogCSAgICB7Ci0JICAgICAgLyogU3RyaW5nIHdhcyBu b3Qgb24gZnJlZS1saXN0IGJlZm9yZS4gICovCi0JICAgICAgaWYgKFNUUklOR19NQVJLRURf UCAocykpCi0JCXsKLQkJICAvKiBTdHJpbmcgaXMgbGl2ZTsgdW5tYXJrIGl0IGFuZCBpdHMg aW50ZXJ2YWxzLiAgKi8KLQkJICBVTk1BUktfU1RSSU5HIChzKTsKLQotCQkgIGlmICghTlVM TF9JTlRFUlZBTF9QIChzLT5pbnRlcnZhbHMpKQotCQkgICAgVU5NQVJLX0JBTEFOQ0VfSU5U RVJWQUxTIChzLT5pbnRlcnZhbHMpOwotCi0JCSAgKyt0b3RhbF9zdHJpbmdzOwotCQkgIHRv dGFsX3N0cmluZ19zaXplICs9IFNUUklOR19CWVRFUyAocyk7Ci0JCX0KKwkgICAgICBpZiAo cy0+dS5pbW0uaW1tYml0KQorCQkvKiBGaWxsIGRhdGEgd2l0aCBzcGVjaWFsIHBhdHRlcm4u IFVzZWQgYnkKKwkJICAgR0MgdG8gZmluZCBkZWFkIGltbWVkaWF0ZSBzdHJpbmdzLiAgKi8K KwkJbWVtc2V0IChzLT51LmltbS5kYXRhLCAweGZmLCBTVFJJTkdfSU1NX01BWCk7CiAJICAg ICAgZWxzZQogCQl7Ci0JCSAgLyogU3RyaW5nIGlzIGRlYWQuICBQdXQgaXQgb24gdGhlIGZy ZWUtbGlzdC4gICovCi0JCSAgc3RydWN0IHNkYXRhICpkYXRhID0gU0RBVEFfT0ZfU1RSSU5H IChzKTsKKwkJICBpZiAocy0+dS5kYXQuZGF0YSkKKwkJICAgIHsKKwkJICAgICAgLyogU3Ry aW5nIGlzIGRlYWQuICBQdXQgaXQgb24gdGhlIGZyZWUtbGlzdC4gICovCisJCSAgICAgIHN0 cnVjdCBzZGF0YSAqZGF0YSA9IFNEQVRBX09GX1NUUklORyAocyk7CiAKLQkJICAvKiBTYXZl IHRoZSBzaXplIG9mIFMgaW4gaXRzIHNkYXRhIHNvIHRoYXQgd2Uga25vdwotCQkgICAgIGhv dyBsYXJnZSB0aGF0IGlzLiAgUmVzZXQgdGhlIHNkYXRhJ3Mgc3RyaW5nCi0JCSAgICAgYmFj ay1wb2ludGVyIHNvIHRoYXQgd2Uga25vdyBpdCdzIGZyZWUuICAqLworCQkgICAgICAvKiBT YXZlIHRoZSBzaXplIG9mIFMgaW4gaXRzIHNkYXRhIHNvIHRoYXQgd2Uga25vdworCQkJIGhv dyBsYXJnZSB0aGF0IGlzLiAgUmVzZXQgdGhlIHNkYXRhJ3Mgc3RyaW5nCisJCQkgYmFjay1w b2ludGVyIHNvIHRoYXQgd2Uga25vdyBpdCdzIGZyZWUuICAqLwogI2lmZGVmIEdDX0NIRUNL X1NUUklOR19CWVRFUwotCQkgIGlmIChHQ19TVFJJTkdfQllURVMgKHMpICE9IFNEQVRBX05C WVRFUyAoZGF0YSkpCi0JCSAgICBhYm9ydCAoKTsKKwkJICAgICAgaWYgKHN0cmluZ19ieXRl cyAocykgIT0gU0RBVEFfTkJZVEVTIChkYXRhKSkKKwkJCWFib3J0ICgpOwogI2Vsc2UKLQkJ ICBkYXRhLT51Lm5ieXRlcyA9IEdDX1NUUklOR19CWVRFUyAocyk7CisJCSAgICAgIGRhdGEt PnUubmJ5dGVzID0gc3RyaW5nX2J5dGVzIChzKTsKICNlbmRpZgotCQkgIGRhdGEtPnN0cmlu ZyA9IE5VTEw7Ci0KLQkJICAvKiBSZXNldCB0aGUgc3RyaW5ncydzIGBkYXRhJyBtZW1iZXIg c28gdGhhdCB3ZQotCQkgICAgIGtub3cgaXQncyBmcmVlLiAgKi8KLQkJICBzLT5kYXRhID0g TlVMTDsKLQotCQkgIC8qIFB1dCB0aGUgc3RyaW5nIG9uIHRoZSBmcmVlLWxpc3QuICAqLwot CQkgIE5FWFRfRlJFRV9MSVNQX1NUUklORyAocykgPSBzdHJpbmdfZnJlZV9saXN0OwotCQkg IHN0cmluZ19mcmVlX2xpc3QgPSBzOwotCQkgICsrbmZyZWU7CisJCSAgICAgIGRhdGEtPnN0 cmluZyA9IE5VTEw7CisKKwkJICAgICAgLyogUmVzZXQgdGhlIHN0cmluZ3MncyBgZGF0YScg bWVtYmVyIHNvIHRoYXQgd2UKKwkJCSBrbm93IGl0J3MgZnJlZS4gICovCisJCSAgICAgIHMt PnUuZGF0LmRhdGEgPSBOVUxMOworCQkgICAgfQogCQl9Ci0JICAgIH0KLQkgIGVsc2UKLQkg ICAgewotCSAgICAgIC8qIFMgd2FzIG9uIHRoZSBmcmVlLWxpc3QgYmVmb3JlLiAgUHV0IGl0 IHRoZXJlIGFnYWluLiAgKi8KKworCSAgICAgIC8qIFB1dCB0aGUgc3RyaW5nIG9uIHRoZSBm cmVlLWxpc3QuICAqLwogCSAgICAgIE5FWFRfRlJFRV9MSVNQX1NUUklORyAocykgPSBzdHJp bmdfZnJlZV9saXN0OwogCSAgICAgIHN0cmluZ19mcmVlX2xpc3QgPSBzOwogCSAgICAgICsr bmZyZWU7CkBAIC0yMjcxLDEyICsyMjk5LDEyIEBACiAJICAvKiBDaGVjayB0aGF0IHRoZSBz dHJpbmcgc2l6ZSByZWNvcmRlZCBpbiB0aGUgc3RyaW5nIGlzIHRoZQogCSAgICAgc2FtZSBh cyB0aGUgb25lIHJlY29yZGVkIGluIHRoZSBzZGF0YSBzdHJ1Y3R1cmUuICovCiAJICBpZiAo ZnJvbS0+c3RyaW5nCi0JICAgICAgJiYgR0NfU1RSSU5HX0JZVEVTIChmcm9tLT5zdHJpbmcp ICE9IFNEQVRBX05CWVRFUyAoZnJvbSkpCisJICAgICAgJiYgc3RyaW5nX2J5dGVzIChmcm9t LT5zdHJpbmcpICE9IFNEQVRBX05CWVRFUyAoZnJvbSkpCiAJICAgIGFib3J0ICgpOwogI2Vu ZGlmIC8qIEdDX0NIRUNLX1NUUklOR19CWVRFUyAqLwogCiAJICBpZiAoZnJvbS0+c3RyaW5n KQotCSAgICBuYnl0ZXMgPSBHQ19TVFJJTkdfQllURVMgKGZyb20tPnN0cmluZyk7CisJICAg IG5ieXRlcyA9IHN0cmluZ19ieXRlcyAoZnJvbS0+c3RyaW5nKTsKIAkgIGVsc2UKIAkgICAg bmJ5dGVzID0gU0RBVEFfTkJZVEVTIChmcm9tKTsKIApAQCAtMjMxMiw3ICsyMzQwLDcgQEAK IAkJewogCQkgIHhhc3NlcnQgKHRiICE9IGIgfHwgdG8gPCBmcm9tKTsKIAkJICBtZW1tb3Zl ICh0bywgZnJvbSwgbmJ5dGVzICsgR0NfU1RSSU5HX0VYVFJBKTsKLQkJICB0by0+c3RyaW5n LT5kYXRhID0gU0RBVEFfREFUQSAodG8pOworCQkgIHRvLT5zdHJpbmctPnUuZGF0LmRhdGEg PSBTREFUQV9EQVRBICh0byk7CiAJCX0KIAogCSAgICAgIC8qIEFkdmFuY2UgcGFzdCB0aGUg c2RhdGEgd2UgY29waWVkIHRvLiAgKi8KQEAgLTI1NjIsMTMgKzI1OTAsMjQgQEAKICAgICBy ZXR1cm4gZW1wdHlfbXVsdGlieXRlX3N0cmluZzsKIAogICBzID0gYWxsb2NhdGVfc3RyaW5n ICgpOwotICBhbGxvY2F0ZV9zdHJpbmdfZGF0YSAocywgbmNoYXJzLCBuYnl0ZXMpOworICBp ZiAobmJ5dGVzIDwgU1RSSU5HX0lNTV9NQVgpCisgICAgeworICAgICAgcy0+dS5pbW0uaW1t Yml0ID0gMTsKKyAgICAgIHMtPnUuaW1tLnNpemUgPSBuY2hhcnM7CisgICAgICBzLT51Lmlt bS5zaXplX2J5dGUgPSBuYnl0ZXM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcy0+ dS5pbW0uaW1tYml0ID0gMDsKKyAgICAgIHMtPnUuZGF0LnNpemUgPSBuY2hhcnM7CisgICAg ICBzLT51LmRhdC5zaXplX2J5dGUgPSBuYnl0ZXM7CisgICAgICBhbGxvY2F0ZV9zdHJpbmdf ZGF0YSAocywgbmNoYXJzLCBuYnl0ZXMpOworICAgIH0KICAgWFNFVFNUUklORyAoc3RyaW5n LCBzKTsKICAgc3RyaW5nX2NoYXJzX2NvbnNlZCArPSBuYnl0ZXM7CiAgIHJldHVybiBzdHJp bmc7CiB9CiAKLQogDAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCQkgICBGbG9hdCBBbGxvY2F0 aW9uCkBAIC0zOTM3LDYgKzM5NzYsMjIgQEAKICAgeC0+Y29sb3IgPSBNRU1fQkxBQ0s7CiB9 CiAKKy8qIE5vbi16ZXJvIGlmIGRhdGEgb2YgUyBpcyB2YWxpZC4gICovCisKK3N0YXRpYyBp bmxpbmUgaW50CitsaXZlX3N0cmluZ19kYXRhX3AgKHN0cnVjdCBMaXNwX1N0cmluZyAqcykK K3sKKyAgaWYgKHMtPnUuaW1tLmltbWJpdCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFy ICpwOworCisgICAgICBmb3IgKHAgPSBzLT51LmltbS5kYXRhOyBwIDwgcy0+dS5pbW0uZGF0 YSArIFNUUklOR19JTU1fTUFYOyBwKyspCisJaWYgKCpwICE9IDB4ZmYpCisJICByZXR1cm4g MTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgcmV0dXJuIHMtPnUuZGF0LmRhdGEgIT0g TlVMTDsKK30KIAogLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgUCBpcyBhIHBvaW50ZXIgdG8g YSBsaXZlIExpc3Agc3RyaW5nIG9uCiAgICB0aGUgaGVhcC4gIE0gaXMgYSBwb2ludGVyIHRv IHRoZSBtZW1fYmxvY2sgZm9yIFAuICAqLwpAQCAtMzk1NCw3ICs0MDA5LDcgQEAKICAgICAg IHJldHVybiAob2Zmc2V0ID49IDAKIAkgICAgICAmJiBvZmZzZXQgJSBzaXplb2YgYi0+c3Ry aW5nc1swXSA9PSAwCiAJICAgICAgJiYgb2Zmc2V0IDwgKFNUUklOR19CTE9DS19TSVpFICog c2l6ZW9mIGItPnN0cmluZ3NbMF0pCi0JICAgICAgJiYgKChzdHJ1Y3QgTGlzcF9TdHJpbmcg KikgcCktPmRhdGEgIT0gTlVMTCk7CisJICAgICAgJiYgbGl2ZV9zdHJpbmdfZGF0YV9wICgo c3RydWN0IExpc3BfU3RyaW5nICopIHApKTsKICAgICB9CiAgIGVsc2UKICAgICByZXR1cm4g MDsKQEAgLTQ4NjksMTUgKzQ5MjQsMjkgQEAKICAgc3RydWN0IExpc3BfU3RyaW5nICpzOwog CiAgIHMgPSAoc3RydWN0IExpc3BfU3RyaW5nICopIHB1cmVfYWxsb2MgKHNpemVvZiAqcywg TGlzcF9TdHJpbmcpOwotICBzLT5kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgZmluZF9zdHJp bmdfZGF0YV9pbl9wdXJlIChkYXRhLCBuYnl0ZXMpOwotICBpZiAocy0+ZGF0YSA9PSBOVUxM KQotICAgIHsKLSAgICAgIHMtPmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBwdXJlX2FsbG9j IChuYnl0ZXMgKyAxLCAtMSk7Ci0gICAgICBtZW1jcHkgKHMtPmRhdGEsIGRhdGEsIG5ieXRl cyk7Ci0gICAgICBzLT5kYXRhW25ieXRlc10gPSAnXDAnOwotICAgIH0KLSAgcy0+c2l6ZSA9 IG5jaGFyczsKLSAgcy0+c2l6ZV9ieXRlID0gbXVsdGlieXRlID8gbmJ5dGVzIDogLTE7CisK KyAgaWYgKG5ieXRlcyA8IFNUUklOR19JTU1fTUFYKQorICAgIHsKKyAgICAgIG1lbWNweSAo cy0+dS5pbW0uZGF0YSwgZGF0YSwgbmJ5dGVzKTsKKyAgICAgIHMtPnUuaW1tLmRhdGFbbmJ5 dGVzXSA9ICdcMCc7CisgICAgICBzLT51LmltbS5pbW1iaXQgPSAxOworICAgICAgcy0+dS5p bW0uc2l6ZSA9IG5jaGFyczsKKyAgICAgIHMtPnUuaW1tLnNpemVfYnl0ZSA9IG11bHRpYnl0 ZSA/IG5ieXRlcyA6IC0xOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHMtPnUuZGF0 LmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBmaW5kX3N0cmluZ19kYXRhX2luX3B1cmUgKGRh dGEsIG5ieXRlcyk7CisgICAgICBpZiAocy0+dS5kYXQuZGF0YSA9PSBOVUxMKQorCXsKKwkg IHMtPnUuZGF0LmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBwdXJlX2FsbG9jIChuYnl0ZXMg KyAxLCAtMSk7CisJICBtZW1jcHkgKHMtPnUuZGF0LmRhdGEsIGRhdGEsIG5ieXRlcyk7CisJ ICBzLT51LmRhdC5kYXRhW25ieXRlc10gPSAnXDAnOworCX0KKyAgICAgIHMtPnUuaW1tLmlt bWJpdCA9IDA7CisgICAgICBzLT51LmRhdC5zaXplID0gbmNoYXJzOworICAgICAgcy0+dS5k YXQuc2l6ZV9ieXRlID0gbXVsdGlieXRlID8gbmJ5dGVzIDogLTE7CisgICAgfQorCiAgIHMt PmludGVydmFscyA9IE5VTExfSU5URVJWQUw7CiAgIFhTRVRTVFJJTkcgKHN0cmluZywgcyk7 CiAgIHJldHVybiBzdHJpbmc7CkBAIC00ODk0LDkgKzQ5NjMsMjMgQEAKICAgcHRyZGlmZl90 IG5jaGFycyA9IHN0cmxlbiAoZGF0YSk7CiAKICAgcyA9IChzdHJ1Y3QgTGlzcF9TdHJpbmcg KikgcHVyZV9hbGxvYyAoc2l6ZW9mICpzLCBMaXNwX1N0cmluZyk7Ci0gIHMtPnNpemUgPSBu Y2hhcnM7Ci0gIHMtPnNpemVfYnl0ZSA9IC0xOwotICBzLT5kYXRhID0gKHVuc2lnbmVkIGNo YXIgKikgZGF0YTsKKworICBpZiAobmNoYXJzIDwgU1RSSU5HX0lNTV9NQVgpCisgICAgewor ICAgICAgbWVtY3B5IChzLT51LmltbS5kYXRhLCBkYXRhLCBuY2hhcnMpOworICAgICAgcy0+ dS5pbW0uZGF0YVtuY2hhcnNdID0gJ1wwJzsKKyAgICAgIHMtPnUuaW1tLmltbWJpdCA9IDE7 CisgICAgICBzLT51LmltbS5zaXplID0gbmNoYXJzOworICAgICAgcy0+dS5pbW0uc2l6ZV9i eXRlID0gLTE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcy0+dS5kYXQuZGF0YSA9 ICh1bnNpZ25lZCBjaGFyICopIGRhdGE7CisgICAgICBzLT51LmltbS5pbW1iaXQgPSAwOwor ICAgICAgcy0+dS5kYXQuc2l6ZSA9IG5jaGFyczsKKyAgICAgIHMtPnUuZGF0LnNpemVfYnl0 ZSA9IC0xOworICAgIH0KKwogICBzLT5pbnRlcnZhbHMgPSBOVUxMX0lOVEVSVkFMOwogICBY U0VUU1RSSU5HIChzdHJpbmcsIHMpOwogICByZXR1cm4gc3RyaW5nOwpAQCAtNjMxOSw2ICs2 NDAyLDM0IEBACiAgIHJldHVybiBGbGlzdCAoOCwgY29uc2VkKTsKIH0KIAorI2lmZGVmIEdD X1NUUklOR19TVEFUUworCitERUZVTiAoInN0cmluZy1zdGF0cyIsIEZzdHJpbmdfc3RhdHMs IFNzdHJpbmdfc3RhdHMsIDAsIDAsIDAsCisgICAgICAgZG9jOiAvKiBSZXR1cm4gYSBsaXN0 IG9mIGNvdW50ZXJzIHRoYXQgbWVhc3VyZXMgaG93IG11Y2gKK3N0cmluZ3Mgb2YgYSBwYXJ0 aWN1bGFyIGludGVybmFsIHN0cnVjdHVyZSBhcmUgYWxpdmUgYWZ0ZXIgbGFzdAorZ2FyYmFn ZSBjb2xsZWN0aW9uLCBhbmQgaG93IG1hbnkgYnl0ZXMgYXJlIGluIHRoZW0uCitUaGUgZWxl bWVudHMgb2YgdGhlIHZhbHVlIGFyZSBhcmUgYXMgZm9sbG93czoKKyAgKElNTS1TVFJJTkdT IElNTS1CWVRFUyBJTU0tSU5URVJWQUxTIERBVC1TVFJJTkdTIERBVC1CWVRFUyBEQVQtSU5U RVJWQUxTKQord2hlcmUgSU1NLVNUUklOR1MgaXMgdGhlIG51bWJlciBvZiBpbW1lZGlhdGUg c3RyaW5ncywgSU1NLUJZVEVTIGlzIHRoZSB0b3RhbAorbnVtYmVyIG9mIGJ5dGVzIGluIHRo ZW0sIGFuZCBJTU0tSU5URVJWQUxTIGlzIHRoZSBudW1iZXIgb2YgaW1tZWRpYXRlIHN0cmlu Zword2l0aCBub24tbmlsIHRleHQgcHJvcGVydGllcy4gVGhlIHJlc3QgdGhyZWUgbnVtYmVy cyBoYXMgdGhlIHNhbWUgbWVhbmluZworZm9yIG5vcm1hbCBzdHJpbmdzLCByZXNwZWN0aXZl bHkuICAqLykKKyAgKHZvaWQpCit7CisgIExpc3BfT2JqZWN0IGRhdGFbNl07CisKKyAgZGF0 YVswXSA9IG1ha2VfbnVtYmVyIChtaW4gKE1PU1RfUE9TSVRJVkVfRklYTlVNLCB0b3RhbF9p bW1fc3RyaW5ncykpOworICBkYXRhWzFdID0gbWFrZV9udW1iZXIgKG1pbiAoTU9TVF9QT1NJ VElWRV9GSVhOVU0sIHRvdGFsX2ltbV9ieXRlcykpOworICBkYXRhWzJdID0gbWFrZV9udW1i ZXIgKG1pbiAoTU9TVF9QT1NJVElWRV9GSVhOVU0sIHRvdGFsX2ltbV9pbnRlcnZhbHMpKTsK KyAgZGF0YVszXSA9IG1ha2VfbnVtYmVyIChtaW4gKE1PU1RfUE9TSVRJVkVfRklYTlVNLCB0 b3RhbF9kYXRfc3RyaW5ncykpOworICBkYXRhWzRdID0gbWFrZV9udW1iZXIgKG1pbiAoTU9T VF9QT1NJVElWRV9GSVhOVU0sIHRvdGFsX2RhdF9ieXRlcykpOworICBkYXRhWzVdID0gbWFr ZV9udW1iZXIgKG1pbiAoTU9TVF9QT1NJVElWRV9GSVhOVU0sIHRvdGFsX2RhdF9pbnRlcnZh bHMpKTsKKworICByZXR1cm4gRmxpc3QgKDYsIGRhdGEpOworfQorCisjZW5kaWYgLyogR0Nf U1RSSU5HX1NUQVRTICovCisKIC8qIEZpbmQgYXQgbW9zdCBGSU5EX01BWCBzeW1ib2xzIHdo aWNoIGhhdmUgT0JKIGFzIHRoZWlyIHZhbHVlIG9yCiAgICBmdW5jdGlvbi4gIFRoaXMgaXMg dXNlZCBpbiBnZGJpbml0J3MgYHh3aGljaHN5bWJvbHMnIGNvbW1hbmQuICAqLwogCkBAIC02 NTQ3LDcgKzY2NTgsOSBAQAogICBkZWZzdWJyICgmU2dhcmJhZ2VfY29sbGVjdCk7CiAgIGRl ZnN1YnIgKCZTbWVtb3J5X2xpbWl0KTsKICAgZGVmc3ViciAoJlNtZW1vcnlfdXNlX2NvdW50 cyk7Ci0KKyNpZmRlZiBHQ19TVFJJTkdfU1RBVFMKKyAgZGVmc3ViciAoJlNzdHJpbmdfc3Rh dHMpOworI2VuZGlmCiAjaWYgR0NfTUFSS19TVEFDSyA9PSBHQ19VU0VfR0NQUk9TX0NIRUNL X1pPTUJJRVMKICAgZGVmc3ViciAoJlNnY19zdGF0dXMpOwogI2VuZGlmCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL2Zucy5jJwotLS0gc3JjL2Zucy5jCTIwMTItMDUtMjUgMTg6MTk6MjQg KzAwMDAKKysrIHNyYy9mbnMuYwkyMDEyLTA1LTI4IDE1OjAzOjU4ICswMDAwCkBAIC0yMTY2 LDggKzIxNjYsOCBAQAogCSAgaW50IGxlbiA9IENIQVJfU1RSSU5HIChjaGFydmFsLCBzdHIp OwogCSAgcHRyZGlmZl90IHNpemVfYnl0ZSA9IFNCWVRFUyAoYXJyYXkpOwogCi0JICBpZiAo SU5UX01VTFRJUExZX09WRVJGTE9XIChTQ0hBUlMgKGFycmF5KSwgbGVuKQotCSAgICAgIHx8 IFNDSEFSUyAoYXJyYXkpICogbGVuICE9IHNpemVfYnl0ZSkKKwkgIGlmIChJTlRfTVVMVElQ TFlfT1ZFUkZMT1cgKHNpemUsIGxlbikKKwkgICAgICB8fCBzaXplICogbGVuICE9IHNpemVf Ynl0ZSkKIAkgICAgZXJyb3IgKCJBdHRlbXB0IHRvIGNoYW5nZSBieXRlIGxlbmd0aCBvZiBh IHN0cmluZyIpOwogCSAgZm9yIChpZHggPSAwOyBpZHggPCBzaXplX2J5dGU7IGlkeCsrKQog CSAgICAqcCsrID0gc3RyW2lkeCAlIGxlbl07Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xp c3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMi0wNS0yNyAwNzo1MTowOSArMDAwMAorKysgc3Jj L2xpc3AuaAkyMDEyLTA1LTI5IDA1OjU0OjAzICswMDAwCkBAIC02OSw3ICs2OSw4IEBACiAg ICAgQklUU19QRVJfU0hPUlQgICAgID0gQ0hBUl9CSVQgKiBzaXplb2YgKHNob3J0KSwKICAg ICBCSVRTX1BFUl9JTlQgICAgICAgPSBDSEFSX0JJVCAqIHNpemVvZiAoaW50KSwKICAgICBC SVRTX1BFUl9MT05HICAgICAgPSBDSEFSX0JJVCAqIHNpemVvZiAobG9uZyBpbnQpLAotICAg IEJJVFNfUEVSX0VNQUNTX0lOVCA9IENIQVJfQklUICogc2l6ZW9mIChFTUFDU19JTlQpCisg ICAgQklUU19QRVJfRU1BQ1NfSU5UID0gQ0hBUl9CSVQgKiBzaXplb2YgKEVNQUNTX0lOVCks CisgICAgQklUU19QRVJfUFRSRElGRl9UID0gQ0hBUl9CSVQgKiBzaXplb2YgKHB0cmRpZmZf dCkKICAgfTsKIAogLyogcHJpbnRtYXhfdCBhbmQgdXByaW50bWF4X3QgYXJlIHR5cGVzIGZv ciBwcmludGluZyBsYXJnZSBpbnRlZ2Vycy4KQEAgLTc0MywxNyArNzQ0LDIzIEBACiAKIC8q IENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIExpc3Agc3RyaW5ncy4gICov CiAKLSNkZWZpbmUgU0RBVEEoc3RyaW5nKQkJKFhTVFJJTkcgKHN0cmluZyktPmRhdGEgKyAw KQorI2RlZmluZSBTREFUQShzdHJpbmcpCQkoWFNUUklORyAoc3RyaW5nKS0+dS5pbW0uaW1t Yml0ID8gXAorCQkJCSAoWFNUUklORyAoc3RyaW5nKS0+dS5pbW0uZGF0YSkgOiBcCisJCQkJ IChYU1RSSU5HIChzdHJpbmcpLT51LmRhdC5kYXRhKSkKICNkZWZpbmUgU1JFRihzdHJpbmcs IGluZGV4KQkoU0RBVEEgKHN0cmluZylbaW5kZXhdICsgMCkKICNkZWZpbmUgU1NFVChzdHJp bmcsIGluZGV4LCBuZXcpIChTREFUQSAoc3RyaW5nKVtpbmRleF0gPSAobmV3KSkKLSNkZWZp bmUgU0NIQVJTKHN0cmluZykJCShYU1RSSU5HIChzdHJpbmcpLT5zaXplICsgMCkKLSNkZWZp bmUgU0JZVEVTKHN0cmluZykJCShTVFJJTkdfQllURVMgKFhTVFJJTkcgKHN0cmluZykpICsg MCkKKyNkZWZpbmUgU0NIQVJTKHN0cmluZykJCShYU1RSSU5HIChzdHJpbmcpLT51LmltbS5p bW1iaXQgPyBcCisJCQkJIChYU1RSSU5HIChzdHJpbmcpLT51LmltbS5zaXplKSA6IFwKKwkJ CQkgKFhTVFJJTkcgKHN0cmluZyktPnUuZGF0LnNpemUpKQorI2RlZmluZSBTQllURVMoc3Ry aW5nKQkJKHN0cmluZ19ieXRlcyAoWFNUUklORyAoc3RyaW5nKSkpCiAKIC8qIEF2b2lkICJk aWZmZXIgaW4gc2lnbiIgd2FybmluZ3MuICAqLwogI2RlZmluZSBTU0RBVEEoeCkgICgoY2hh ciAqKSBTREFUQSAoeCkpCiAKLSNkZWZpbmUgU1RSSU5HX1NFVF9DSEFSUyhzdHJpbmcsIG5l d3NpemUpIFwKLSAgICAoWFNUUklORyAoc3RyaW5nKS0+c2l6ZSA9IChuZXdzaXplKSkKKyNk ZWZpbmUgU1RSSU5HX1NFVF9DSEFSUyhzdHJpbmcsIG5ld3NpemUpCVwKKyAgKFhTVFJJTkcg KHN0cmluZyktPnUuaW1tLmltbWJpdCA/CQlcCisgICAoWFNUUklORyAoc3RyaW5nKS0+dS5p bW0uc2l6ZSA9IChuZXdzaXplKSkgOiBcCisgICAoWFNUUklORyAoc3RyaW5nKS0+dS5kYXQu c2l6ZSA9IChuZXdzaXplKSkpCiAKICNkZWZpbmUgU1RSSU5HX0NPUFlJTihzdHJpbmcsIGlu ZGV4LCBuZXcsIGNvdW50KSBcCiAgICAgbWVtY3B5IChTREFUQSAoc3RyaW5nKSArIGluZGV4 LCBuZXcsIGNvdW50KQpAQCAtODQzLDI0ICs4NTAsMTIgQEAKICNkZWZpbmUgQ0RSX1NBRkUo YykJCQkJXAogICAoQ09OU1AgKChjKSkgPyBYQ0RSICgoYykpIDogUW5pbCkKIAorI2RlZmlu ZSBTVFJJTkdfU0laRV9CWVRFKHN0cmluZykgKFhTVFJJTkcgKHN0cmluZyktPnUuaW1tLmlt bWJpdCA/ICAgIFwKKwkJCQkgIFhTVFJJTkcgKHN0cmluZyktPnUuaW1tLnNpemVfYnl0ZSA6 IFwKKwkJCQkgIFhTVFJJTkcgKHN0cmluZyktPnUuZGF0LnNpemVfYnl0ZSkKKwogLyogTm9u emVybyBpZiBTVFIgaXMgYSBtdWx0aWJ5dGUgc3RyaW5nLiAgKi8KLSNkZWZpbmUgU1RSSU5H X01VTFRJQllURShTVFIpICBcCi0gIChYU1RSSU5HIChTVFIpLT5zaXplX2J5dGUgPj0gMCkK LQotLyogUmV0dXJuIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgU1RSLiAgKi8KLQotI2lmZGVm IEdDX0NIRUNLX1NUUklOR19CWVRFUwotCi1zdHJ1Y3QgTGlzcF9TdHJpbmc7Ci1leHRlcm4g cHRyZGlmZl90IHN0cmluZ19ieXRlcyAoc3RydWN0IExpc3BfU3RyaW5nICopOwotI2RlZmlu ZSBTVFJJTkdfQllURVMoUykgc3RyaW5nX2J5dGVzICgoUykpCi0KLSNlbHNlIC8qIG5vdCBH Q19DSEVDS19TVFJJTkdfQllURVMgKi8KLQotI2RlZmluZSBTVFJJTkdfQllURVMoU1RSKSAg XAotICAoKFNUUiktPnNpemVfYnl0ZSA8IDAgPyAoU1RSKS0+c2l6ZSA6IChTVFIpLT5zaXpl X2J5dGUpCi0KLSNlbmRpZiAvKiBub3QgR0NfQ0hFQ0tfU1RSSU5HX0JZVEVTICovCisjZGVm aW5lIFNUUklOR19NVUxUSUJZVEUoc3RyaW5nKSAoU1RSSU5HX1NJWkVfQllURSAoc3RyaW5n KSA+IDApCiAKIC8qIEFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4g YSBMaXNwIHN0cmluZywgbm90CiAgICBjb3VudGluZyB0aGUgdGVybWluYXRpbmcgbnVsbC4g IFRoaXMgYSB0aWdodCBlbm91Z2ggYm91bmQgdG8KQEAgLTg3NiwxOCArODcxLDI4IEBACiAj ZGVmaW5lIFNUUklOR19CWVRFU19CT1VORCAgXAogICBtaW4gKE1PU1RfUE9TSVRJVkVfRklY TlVNLCAocHRyZGlmZl90KSBtaW4gKFNJWkVfTUFYLCBQVFJESUZGX01BWCkgLSAxKQogCisv KiBNYXhpbXVtIGFtb3VudCBvZiBieXRlcywgaW5jbHVkaW5nICdcMCcsIGluIGFuIGltbWVk aWF0ZSBzdHJpbmcuICAqLworI2RlZmluZSBTVFJJTkdfSU1NX01BWCAoMyAqIHNpemVvZiAo cHRyZGlmZl90KSAtIDIpCisKIC8qIE1hcmsgU1RSIGFzIGEgdW5pYnl0ZSBzdHJpbmcuICAq LwogI2RlZmluZSBTVFJJTkdfU0VUX1VOSUJZVEUoU1RSKSAgXAotICBkbyB7IGlmIChFUSAo U1RSLCBlbXB0eV9tdWx0aWJ5dGVfc3RyaW5nKSkgIFwKLSAgICAgIChTVFIpID0gZW1wdHlf dW5pYnl0ZV9zdHJpbmc7ICBcCi0gICAgZWxzZSBYU1RSSU5HIChTVFIpLT5zaXplX2J5dGUg PSAtMTsgfSB3aGlsZSAoMCkKKyAgZG8geyBpZiAoRVEgKFNUUiwgZW1wdHlfbXVsdGlieXRl X3N0cmluZykpCQlcCisgICAgICAoU1RSKSA9IGVtcHR5X3VuaWJ5dGVfc3RyaW5nOwkJCVwK KyAgICBlbHNlIGlmIChYU1RSSU5HIChTVFIpLT51LmltbS5pbW1iaXQpCQlcCisgICAgICBY U1RSSU5HIChTVFIpLT51LmltbS5zaXplX2J5dGUgPSAtMTsJCVwKKyAgICBlbHNlCQkJCQkJ XAorICAgICAgWFNUUklORyAoU1RSKS0+dS5kYXQuc2l6ZV9ieXRlID0gLTE7IH0gd2hpbGUg KDApCiAKIC8qIE1hcmsgU1RSIGFzIGEgbXVsdGlieXRlIHN0cmluZy4gIEFzc3VyZSB0aGF0 IFNUUiBjb250YWlucyBvbmx5CiAgICBBU0NJSSBjaGFyYWN0ZXJzIGluIGFkdmFuY2UuICAq LwotI2RlZmluZSBTVFJJTkdfU0VUX01VTFRJQllURShTVFIpICBcCi0gIGRvIHsgaWYgKEVR IChTVFIsIGVtcHR5X3VuaWJ5dGVfc3RyaW5nKSkgIFwKLSAgICAgIChTVFIpID0gZW1wdHlf bXVsdGlieXRlX3N0cmluZzsgIFwKLSAgICBlbHNlIFhTVFJJTkcgKFNUUiktPnNpemVfYnl0 ZSA9IFhTVFJJTkcgKFNUUiktPnNpemU7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNUUklOR19T RVRfTVVMVElCWVRFKFNUUikJCQkJICBcCisgIGRvIHsgaWYgKEVRIChTVFIsIGVtcHR5X3Vu aWJ5dGVfc3RyaW5nKSkJCQkgIFwKKyAgICAgIChTVFIpID0gZW1wdHlfbXVsdGlieXRlX3N0 cmluZzsJCQkJICBcCisgICAgZWxzZSBpZiAoWFNUUklORyAoU1RSKS0+dS5pbW0uaW1tYml0 KQkJCSAgXAorICAgICAgWFNUUklORyAoU1RSKS0+dS5pbW0uc2l6ZV9ieXRlID0gWFNUUklO RyAoU1RSKS0+dS5pbW0uc2l6ZTsgXAorICAgIGVsc2UJCQkJCQkJICBcCisgICAgICBYU1RS SU5HIChTVFIpLT51LmRhdC5zaXplX2J5dGUgPSBYU1RSSU5HIChTVFIpLT51LmRhdC5zaXpl OyBcCisgIH0gd2hpbGUgKDApCiAKIC8qIEdldCB0ZXh0IHByb3BlcnRpZXMuICAqLwogI2Rl ZmluZSBTVFJJTkdfSU5URVJWQUxTKFNUUikgIChYU1RSSU5HIChTVFIpLT5pbnRlcnZhbHMg KyAwKQpAQCAtODk4LDEyICs5MDMsNTUgQEAKIC8qIEluIGEgc3RyaW5nIG9yIHZlY3Rvciwg dGhlIHNpZ24gYml0IG9mIHRoZSBgc2l6ZScgaXMgdGhlIGdjIG1hcmsgYml0ICovCiAKIHN0 cnVjdCBMaXNwX1N0cmluZwotICB7Ci0gICAgcHRyZGlmZl90IHNpemU7Ci0gICAgcHRyZGlm Zl90IHNpemVfYnl0ZTsKLSAgICBJTlRFUlZBTCBpbnRlcnZhbHM7CQkvKiB0ZXh0IHByb3Bl cnRpZXMgaW4gdGhpcyBzdHJpbmcgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICB9 OworeworICAvKiBUZXh0IHByb3BlcnRpZXMgaW4gdGhpcyBzdHJpbmcuICBTaG91bGQgYmUg dGhlIGZpcnN0CisgICAgIG1lbWJlciBzaW5jZSBORVhUX0ZSRUVfTElTUF9TVFJJTkcgZnJv bSBhbGxvYy5jIHVzZXMgaXQuICAqLworICBJTlRFUlZBTCBpbnRlcnZhbHM7CisKKyAgdW5p b24geworICAgIC8qIEdDIG1hcmsgYml0IGFuZCBzdWJ0eXBlIGJpdCBhcmUgaW4gSU1NIGp1 c3QgYnkgY29udmVudGlvbiAtIHdoZW4KKyAgICAgICBJTU1CSVQgaXMgMCwgdGhlIERBVCBm aWVsZCBpcyB1c2VkIGV4Y2VwdCBpdCdzIFVOVVNFRCBmaWVsZC4gICovCisgICAgc3RydWN0 IHsKKyAgICAgIHVuc2lnbmVkIGdjbWFya2JpdCA6IDE7CisgICAgICB1bnNpZ25lZCBpbW1i aXQgOiAxOworICAgICAgcHRyZGlmZl90IHNpemUgOiA3OworICAgICAgcHRyZGlmZl90IHNp emVfYnl0ZSA6IDc7CisgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbU1RSSU5HX0lNTV9NQVhd OworICAgIH0gaW1tOworCisgICAgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIHVudXNlZCA6 IDI7IC8qIERvIG5vdCBhY2Nlc3MgdGhpcyBwbGFjZWhvbGRlci4gICovCisgICAgICBwdHJk aWZmX3Qgc2l6ZSA6IEJJVFNfUEVSX1BUUkRJRkZfVCAtIDI7CisgICAgICBwdHJkaWZmX3Qg c2l6ZV9ieXRlIDogQklUU19QRVJfUFRSRElGRl9UIC0gMjsKKyAgICAgIHVuc2lnbmVkIGNo YXIgKmRhdGE7CisgICAgfSBkYXQ7CisgIH0gdTsKK307CisKKy8qIFJldHVybiB0aGUgbGVu Z3RoIGluIGJ5dGVzIG9mIFNUUi4gICovCisKKyNpZmRlZiBHQ19DSEVDS19TVFJJTkdfQllU RVMKKworc3RydWN0IExpc3BfU3RyaW5nOworZXh0ZXJuIHB0cmRpZmZfdCBzdHJpbmdfYnl0 ZXMgKHN0cnVjdCBMaXNwX1N0cmluZyAqKTsKKyNkZWZpbmUgU1RSSU5HX0JZVEVTKFMpIHN0 cmluZ19ieXRlcyAoKFMpKQorCisjZWxzZSAvKiBub3QgR0NfQ0hFQ0tfU1RSSU5HX0JZVEVT ICovCisKK3N0YXRpYyBpbmxpbmUKK3B0cmRpZmZfdCBzdHJpbmdfYnl0ZXMgKHN0cnVjdCBM aXNwX1N0cmluZyAqcykKK3sKKyAgcHRyZGlmZl90IHNpemUsIHNpemVfYnl0ZTsKKworICBp ZiAocy0+dS5pbW0uaW1tYml0KQorICAgIHNpemUgPSBzLT51LmltbS5zaXplLCBzaXplX2J5 dGUgPSBzLT51LmltbS5zaXplX2J5dGU7CisgIGVsc2UKKyAgICBzaXplID0gcy0+dS5kYXQu c2l6ZSwgc2l6ZV9ieXRlID0gcy0+dS5kYXQuc2l6ZV9ieXRlOworCisgIHJldHVybiBzaXpl X2J5dGUgPCAwID8gc2l6ZSA6IHNpemVfYnl0ZTsKK30KKworI2VuZGlmIC8qIG5vdCBHQ19D SEVDS19TVFJJTkdfQllURVMgKi8KIAogLyogSGVhZGVyIG9mIHZlY3Rvci1saWtlIG9iamVj dHMuICBUaGlzIGRvY3VtZW50cyB0aGUgbGF5b3V0IGNvbnN0cmFpbnRzIG9uCiAgICB2ZWN0 b3JzIGFuZCBwc2V1ZG92ZWN0b3JzIG90aGVyIHRoYW4gc3RydWN0IExpc3BfU3Vici4gIEl0 IGFsc28gcHJldmVudHMKCg== --------------070408010901090900010107--