Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sLHDe-00ED0k-EC for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Jun 2024 07:00:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sLHDc-0064ac-Hd for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Jun 2024 07:00:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sLHDb-0064aT-VI for pgsql-hackers@lists.postgresql.org; Sun, 23 Jun 2024 07:00:56 +0000 Received: from wfout5-smtp.messagingengine.com ([64.147.123.148]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sLHDZ-002gb6-HC for pgsql-hackers@lists.postgresql.org; Sun, 23 Jun 2024 07:00:55 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfout.west.internal (Postfix) with ESMTP id DA3191C00185; Sun, 23 Jun 2024 03:00:51 -0400 (EDT) Received: from imap48 ([10.202.2.98]) by compute6.internal (MEProxy); Sun, 23 Jun 2024 03:00:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1719126051; x=1719212451; bh=qIoiCNXlX/ RLOkh5cGb2/6uox7YP5BBNbXYLPqoDc+U=; b=OaQOmNaEG/e1KciGHMG0JWwFNh lKAjBf6ff4r4fQIvAJtC1AupNu/Fwqz3Hm+b74GaccFKQ10L/qPX8pJaN/2A9t+i uS6bn3teaM47sDgE2tfYS+1378Sy0K7pnBxa6wDsUN+Svy5tu5zEy/MsxcA2nq7v HTEwdfgSeaNCTfjq86hD/M7/sbMxRRDOMjKxdPpENbTQaDuE6yWZEYQ3YaETwu1z lK+svHhQKSIaBvCd/UA1As5lLOyY/8gewl6K4lepYZgyTgy8xzmAmvQkGZFvza7u R9Mii70S5HBDXACqjvQC04i0eiTE0+Q9TvJTr7KOLhT6ZuAP45ej5B6mGaVg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; t=1719126051; x=1719212451; bh=qIoiCNXlX/RLOkh5cGb2/6uox7YP 5BBNbXYLPqoDc+U=; b=tT9Nkq206v7g2EV4hDfBFTs0gsPZBebUFq9IkE/IIiAc sNzoJ/noZUFpKx9xKaO0ik+RryCoOLJhDPcYucvaANhgngNiMDd2vomfuLWPxSIN rgZUr44vhlALa1EfcHG5RHYW0Iak8f0tXk21tjtgGGBloJPYWncxPsIKn3xESshS p75i2Y/1Qmbt4XiZRrYzAFhmfSbVg1vZ44xZg2VwnFwa+csZz4kUoJRHpy3+RY7o cIHS8aRGVDMunSVv031WDzM4dZltBf8c68GLrt47tWyo5+IgmArQ3e+W6ofyc4qh 876CUGLK8f6sve2ZAYwPmpN1k2RZ3NKj0aj3fETWQA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrfeefkedgkeeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvffutgesmhdtreerreertdenucfhrhhomhepfdflohgv lhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhpihhlvghrrdhorhhgqeenucggtf frrghtthgvrhhnpefhgfekveeiudduvedvteetheejgedvudfhveelieelleffhfelveet heeuheehvdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehjohgvlhestghomhhpihhlvghrrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id D0C0831A0065; Sun, 23 Jun 2024 03:00:50 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.11.0-alpha0-522-ga39cca1d5-fm-20240610.002-ga39cca1d MIME-Version: 1.0 Message-Id: In-Reply-To: <171832724172.156537.15821392522000571944.pgcf@coridan.postgresql.org> References: <7f95163f-2019-4416-a042-6e2141619e5d@app.fastmail.com> <171832724172.156537.15821392522000571944.pgcf@coridan.postgresql.org> Date: Sun, 23 Jun 2024 09:00:29 +0200 From: "Joel Jacobson" To: "Aaron Altman" , pgsql-hackers@lists.postgresql.org Subject: Re: Optimize numeric.c mul_var() using the Karatsuba algorithm Content-Type: multipart/mixed; boundary=8922e8b98b364c84aac561e918786480 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --8922e8b98b364c84aac561e918786480 Content-Type: text/plain On Fri, Jun 14, 2024, at 03:07, Aaron Altman wrote: > Thanks for the detailed background and comments, Joel! > > The new status of this patch is: Ready for Committer Thanks for reviewing. Attached, rebased version of the patch that implements the Karatsuba algorithm in numeric.c's mul_var(). /Joel --8922e8b98b364c84aac561e918786480 Content-Disposition: attachment; filename="0001-numeric-mul_var-karatsuba.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-numeric-mul=5Fvar-karatsuba.patch?=" Content-Transfer-Encoding: BASE64 RnJvbSAyODNlYWZlOWI2ZjlkNzU1NmUxZmU3ZGU3MDg1YTA2YmI1YjNmZGM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEpha29ic3NvbiA8Z2l0aHViQGNvbXBpbGVy Lm9yZz4KRGF0ZTogU3VuLCAyMyBKdW4gMjAyNCAwODo1NDo1NCArMDIwMApTdWJqZWN0OiBb UEFUQ0hdIG51bWVyaWMuYyBtdWxfdmFyKCk6IEltcGxlbWVudCBLYXJhdHN1YmEgQWxnb3Jp dGhtCgpUaGlzIHNwZWVkcyB1cCBtdWx0aXBsaWNhdGlvbnMgZm9yIHZlcnkgbGFyZ2UgZmFj dG9ycy4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jIHwgMjU3ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjU3IGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYwppbmRleCA1NTEwYTIwM2IwLi4w ZDhhY2U5Yzk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMKQEAgLTQ1OSw2ICs0NTks MzAgQEAgc3RhdGljIGNvbnN0IE51bWVyaWNWYXIgY29uc3RfbmluZiA9CiBzdGF0aWMgY29u c3QgaW50IHJvdW5kX3Bvd2Vyc1s0XSA9IHswLCAxMDAwLCAxMDAsIDEwfTsKICNlbmRpZgog CisjZGVmaW5lIEtBUkFUU1VCQV9CQVNFX0xJTUlUIDM4NAorI2RlZmluZSBLQVJBVFNVQkFf VkFSMV9NSU4xIDEyOAorI2RlZmluZSBLQVJBVFNVQkFfVkFSMV9NSU4yIDIwMDAKKyNkZWZp bmUgS0FSQVRTVUJBX1ZBUjJfTUlOMSAyNTAwCisjZGVmaW5lIEtBUkFUU1VCQV9WQVIyX01J TjIgOTAwMAorI2RlZmluZSBLQVJBVFNVQkFfU0xPUEUgMC43NjQKKyNkZWZpbmUgS0FSQVRT VUJBX0lOVEVSQ0VQVCA5MC43MzcKKworI2RlZmluZSBLQVJBVFNVQkFfTE9XX1JBTkdFX0NP TkRJVElPTih2YXIxbmRpZ2l0cywgdmFyMm5kaWdpdHMpIFwKKwkoKHZhcjFuZGlnaXRzKSA+ IChLQVJBVFNVQkFfU0xPUEUpICogKHZhcjJuZGlnaXRzKSArIEtBUkFUU1VCQV9JTlRFUkNF UFQpCisKKyNkZWZpbmUgS0FSQVRTVUJBX01JRERMRV9SQU5HRV9DT05ESVRJT04odmFyMW5k aWdpdHMsIHZhcjJuZGlnaXRzKSBcCisJKCh2YXIybmRpZ2l0cykgPiBLQVJBVFNVQkFfVkFS Ml9NSU4xICYmIFwKKwkgKHZhcjFuZGlnaXRzKSA+IEtBUkFUU1VCQV9WQVIxX01JTjIpCisK KyNkZWZpbmUgS0FSQVRTVUJBX0hJR0hfUkFOR0VfQ09ORElUSU9OKHZhcjFuZGlnaXRzLCB2 YXIybmRpZ2l0cykgXAorCSgodmFyMm5kaWdpdHMpID4gS0FSQVRTVUJBX1ZBUjJfTUlOMiAm JiBcCisJICh2YXIxbmRpZ2l0cykgPiBLQVJBVFNVQkFfVkFSMV9NSU4xKQorCisjZGVmaW5l IEtBUkFUU1VCQV9DT05ESVRJT04odmFyMW5kaWdpdHMsIHZhcjJuZGlnaXRzKSBcCisJKCh2 YXIybmRpZ2l0cykgPj0gS0FSQVRTVUJBX0JBU0VfTElNSVQgJiYgXAorCSAoS0FSQVRTVUJB X0xPV19SQU5HRV9DT05ESVRJT04odmFyMW5kaWdpdHMsIHZhcjJuZGlnaXRzKSB8fCBcCisJ ICBLQVJBVFNVQkFfTUlERExFX1JBTkdFX0NPTkRJVElPTih2YXIxbmRpZ2l0cywgdmFyMm5k aWdpdHMpIHx8IFwKKwkgIEtBUkFUU1VCQV9ISUdIX1JBTkdFX0NPTkRJVElPTih2YXIxbmRp Z2l0cywgdmFyMm5kaWdpdHMpKSkKIAogLyogLS0tLS0tLS0tLQogICogTG9jYWwgZnVuY3Rp b25zCkBAIC01NDgsNiArNTcyLDE0IEBAIHN0YXRpYyB2b2lkIGFkZF92YXIoY29uc3QgTnVt ZXJpY1ZhciAqdmFyMSwgY29uc3QgTnVtZXJpY1ZhciAqdmFyMiwKIAkJCQkJTnVtZXJpY1Zh ciAqcmVzdWx0KTsKIHN0YXRpYyB2b2lkIHN1Yl92YXIoY29uc3QgTnVtZXJpY1ZhciAqdmFy MSwgY29uc3QgTnVtZXJpY1ZhciAqdmFyMiwKIAkJCQkJTnVtZXJpY1ZhciAqcmVzdWx0KTsK K2lubGluZSBzdGF0aWMgdm9pZCBzcGxpdF92YXJfYXQoY29uc3QgTnVtZXJpY1ZhciAqdmFy LCBpbnQgc3BsaXRfcG9pbnQsCisJCQkJCQkJCU51bWVyaWNWYXIgKmxvdywgTnVtZXJpY1Zh ciAqaGlnaCk7CitzdGF0aWMgdm9pZCBtdWxfdmFyX2thcmF0c3ViYV9mdWxsKGNvbnN0IE51 bWVyaWNWYXIgKnZhcjEsIGNvbnN0IE51bWVyaWNWYXIgKnZhcjIsCisJCQkJCU51bWVyaWNW YXIgKnJlc3VsdCwKKwkJCQkJaW50IHJzY2FsZSk7CitzdGF0aWMgdm9pZCBtdWxfdmFyX2th cmF0c3ViYV9oYWxmKGNvbnN0IE51bWVyaWNWYXIgKnZhcjEsIGNvbnN0IE51bWVyaWNWYXIg KnZhcjIsCisJCQkJCU51bWVyaWNWYXIgKnJlc3VsdCwKKwkJCQkJaW50IHJzY2FsZSk7CiBz dGF0aWMgdm9pZCBtdWxfdmFyKGNvbnN0IE51bWVyaWNWYXIgKnZhcjEsIGNvbnN0IE51bWVy aWNWYXIgKnZhcjIsCiAJCQkJCU51bWVyaWNWYXIgKnJlc3VsdCwKIAkJCQkJaW50IHJzY2Fs ZSk7CkBAIC04NjU5LDYgKzg2OTEsMjE5IEBAIHN1Yl92YXIoY29uc3QgTnVtZXJpY1ZhciAq dmFyMSwgY29uc3QgTnVtZXJpY1ZhciAqdmFyMiwgTnVtZXJpY1ZhciAqcmVzdWx0KQogfQog CiAKKy8qCisgKiBzcGxpdF92YXJfYXQoKSAtCisgKgorICogU3BsaXQgYSBOdW1lcmljVmFy IGludG8gdHdvIHBhcnRzIGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uLgorICovCitpbmxpbmUg c3RhdGljIHZvaWQKK3NwbGl0X3Zhcl9hdChjb25zdCBOdW1lcmljVmFyICp2YXIsIGludCBz cGxpdF9wb2ludCwKKwkJCSBOdW1lcmljVmFyICpsb3csIE51bWVyaWNWYXIgKmhpZ2gpCit7 CisJaW50IGhpZ2hfbmRpZ2l0cyA9IHZhci0+bmRpZ2l0cyAtIHNwbGl0X3BvaW50OworCWlu dCBsb3dfbmRpZ2l0cyA9IHNwbGl0X3BvaW50OworCisJaW5pdF92YXIoaGlnaCk7CisJaW5p dF92YXIobG93KTsKKworCWhpZ2gtPm5kaWdpdHMgPSBoaWdoX25kaWdpdHM7CisJaGlnaC0+ ZGlnaXRzID0gdmFyLT5kaWdpdHM7CisJaGlnaC0+YnVmID0gTlVMTDsKKwloaWdoLT53ZWln aHQgPSB2YXItPndlaWdodCAtIGxvd19uZGlnaXRzOworCWhpZ2gtPnNpZ24gPSB2YXItPnNp Z247CisJaGlnaC0+ZHNjYWxlID0gKHZhci0+bmRpZ2l0cyAtIHZhci0+d2VpZ2h0IC0gMSkg KiBERUNfRElHSVRTOworCisJbG93LT5uZGlnaXRzID0gbG93X25kaWdpdHM7CisJbG93LT5k aWdpdHMgPSB2YXItPmRpZ2l0cyArIGhpZ2hfbmRpZ2l0czsKKwlsb3ctPmJ1ZiA9IE5VTEw7 CisJbG93LT53ZWlnaHQgPSB2YXItPndlaWdodCAtIGhpZ2hfbmRpZ2l0czsKKwlsb3ctPnNp Z24gPSB2YXItPnNpZ247CisJbG93LT5kc2NhbGUgPSB2YXItPmRzY2FsZTsKK30KKworCisv KgorICogbXVsX3Zhcl9rYXJhdHN1YmFfZnVsbCgpIC0KKyAqCisgKglNdWx0aXBsaWNhdGlv biB1c2luZyB0aGUgS2FyYXRzdWJhIGFsZ29yaXRobS4KKyAqCisgKglUaGUgYWxnb3JpdGht IG5vcm1hbGx5IHN0YXJ0cyBieSBjaGVja2luZyBpZiBhbnkgb2YgdGhlIGlucHV0cworICoJ YXJlIHNtYWxsZXIgdGhhbiB0aGUgTkJBU0UsIHRoZSBiYXNlIGNhc2UgZm9yIHRoZSByZWN1 cnNpb24sCisgKglhbmQgaWYgc28sIGZhbGwgYmFjayB0byB0cmFkaXRpb25hbCBtdWx0aXBs aWNhdGlvbi4KKyAqCisgKglUaGF0IHBhcnQgaXMgaGFuZGxlZCBieSB0aGUgY2FsbGVyIGlu IG91ciBjb2RlLCBzbyB3aGVuIHRoaXMgZnVuY3Rpb24KKyAqCWlzIGNhbGxlZCwgd2Uga25v dyB0aGF0IHZhcjEgYW5kIHZhcjIgYXJlIGxhcmdlIGVub3VnaCBmb3IgS2FyYXRzdWJhCisg Kgl0byBiZSB1c2VkLiBXZSBhbHNvIGtub3cgdGhhdCB2YXIxIGlzIHNob3J0ZXIgb3Igb2Yg ZXF1YWwgbGVuZ3RoIGFzIHZhcjIsCisgKgl3aGljaCBoYXMgYmVlbiBhcnJhbmdlZCBieSB0 aGUgY2FsbGVyIGJ5IHN3YXBwaW5nIHRoZW0gaWYgbmVjZXNzYXJ5LgorICoKKyAqCVRoZSBh bGdvcml0aG0gdGhlbiBwcm9jZWVkcyBieSBzcGxpdHRpbmcgdmFyMSBhbmQgdmFyMiBpbnRv CisgKgl0d28gaGlnaCBhbmQgbG93IHBhcnRzLCBhdCBoYWxmIHRoZSBsZW5ndGggb2YgdGhl IGxvbmdlciBpbnB1dDoKKyAqCisgKgkJbSA9IG1heChzaXplX05CQVNFKHZhcjEpLCBzaXpl X05CQVNFKHZhcjIpKQorICoJCW0yID0gZmxvb3IobSAvIDIpCisgKgorICoJCWhpZ2gxLCBs b3cxID0gc3BsaXRfdmFyX2F0KHZhcjEsIG0yKQorICoJCWhpZ2gyLCBsb3cyID0gc3BsaXRf dmFyX2F0KHZhcjIsIG0yKQorICoKKyAqCQl6MCA9IChsb3cxICogbG93MikKKyAqCQl6MSA9 ICgobG93MSArIGhpZ2gxKSAqIChsb3cyICsgaGlnaDIpKQorICoJCXoyID0gKGhpZ2gxICog aGlnaDIpCisgKgorICoJCXJldHVybiAoejIgKiBOQkFTRSBeIChtMiDDlyAyKSkgKyAoKHox IC0gejIgLSB6MCkgKiBOQkFTRSBeIG0yKSArIHowCisgKi8KK3N0YXRpYyB2b2lkCittdWxf dmFyX2thcmF0c3ViYV9mdWxsKGNvbnN0IE51bWVyaWNWYXIgKnZhcjEsIGNvbnN0IE51bWVy aWNWYXIgKnZhcjIsCisJCU51bWVyaWNWYXIgKnJlc3VsdCwgaW50IHJzY2FsZSkKK3sKKwkJ TnVtZXJpY1ZhcgloaWdoMSwgbG93MTsKKwkJTnVtZXJpY1ZhcgloaWdoMiwgbG93MjsKKwkJ TnVtZXJpY1Zhcgl6MCwgejEsIHoyOworCQlOdW1lcmljVmFyCXRlbXAxLCB0ZW1wMjsKKwkJ aW50CQkJbTIgPSB2YXIyLT5uZGlnaXRzIC8gMjsKKworCQlpbml0X3ZhcigmbG93MSk7CisJ CWluaXRfdmFyKCZsb3cyKTsKKwkJaW5pdF92YXIoJmhpZ2gxKTsKKwkJaW5pdF92YXIoJmhp Z2gyKTsKKwkJaW5pdF92YXIoJnowKTsKKwkJaW5pdF92YXIoJnoxKTsKKwkJaW5pdF92YXIo JnoyKTsKKwkJaW5pdF92YXIoJnRlbXAxKTsKKwkJaW5pdF92YXIoJnRlbXAyKTsKKworCQlz cGxpdF92YXJfYXQodmFyMSwgbTIsICZsb3cxLCAmaGlnaDEpOworCQlzcGxpdF92YXJfYXQo dmFyMiwgbTIsICZsb3cyLCAmaGlnaDIpOworCisJCW11bF92YXIoJmxvdzEsICZsb3cyLCAm ejAsIGxvdzEuZHNjYWxlICsgbG93Mi5kc2NhbGUpOworCisJCWFkZF92YXIoJmxvdzEsICZo aWdoMSwgJnRlbXAxKTsKKwkJYWRkX3ZhcigmbG93MiwgJmhpZ2gyLCAmdGVtcDIpOworCQlt dWxfdmFyKCZ0ZW1wMSwgJnRlbXAyLCAmejEsIHRlbXAxLmRzY2FsZSArIHRlbXAyLmRzY2Fs ZSk7CisKKwkJbXVsX3ZhcigmaGlnaDEsICZoaWdoMiwgJnoyLCBoaWdoMS5kc2NhbGUgKyBo aWdoMi5kc2NhbGUpOworCisJCXNldF92YXJfZnJvbV92YXIoJnoyLCAmdGVtcDEpOworCQl0 ZW1wMS53ZWlnaHQgKz0gbTIgKiAyOworCisJCXN1Yl92YXIoJnoxLCAmejIsICZ6MSk7CisJ CXN1Yl92YXIoJnoxLCAmejAsICZ0ZW1wMik7CisJCXRlbXAyLndlaWdodCArPSBtMjsKKwor CQlhZGRfdmFyKCZ0ZW1wMSwgJnRlbXAyLCAmdGVtcDIpOworCQlhZGRfdmFyKCZ0ZW1wMiwg JnowLCByZXN1bHQpOworCisJCWZyZWVfdmFyKCZsb3cxKTsKKwkJZnJlZV92YXIoJmxvdzIp OworCQlmcmVlX3ZhcigmaGlnaDEpOworCQlmcmVlX3ZhcigmaGlnaDIpOworCQlmcmVlX3Zh cigmejApOworCQlmcmVlX3ZhcigmejEpOworCQlmcmVlX3ZhcigmejIpOworCQlmcmVlX3Zh cigmdGVtcDEpOworCQlmcmVlX3ZhcigmdGVtcDIpOworCisJCS8qIFJvdW5kIHRvIHRhcmdl dCByc2NhbGUgKGFuZCBzZXQgcmVzdWx0LT5kc2NhbGUpICovCisJCXJvdW5kX3ZhcihyZXN1 bHQsIHJzY2FsZSk7CisKKwkJLyogU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgemVyb2Vz ICovCisJCXN0cmlwX3ZhcihyZXN1bHQpOworCisJCXJldHVybjsKK30KKworCisvKgorICog bXVsX3Zhcl9rYXJhdHN1YmFfaGFsZigpIC0KKyAqCisgKglLYXJhdHN1YmEgTXVsdGlwbGlj YXRpb24gZm9yIGZhY3RvcnMgd2l0aCBzaWduaWZpY2FudCBsZW5ndGggZGlzcGFyaXR5Lgor ICoKKyAqCVRoZSBIYWxmLUthcmF0c3ViYSBNdWx0aXBsaWNhdGlvbiBBbGdvcml0aG0gaXMg YSBzcGVjaWFsaXplZCBjYXNlIG9mCisgKgl0aGUgbm9ybWFsIEthcmF0c3ViYSBtdWx0aXBs aWNhdGlvbiBhbGdvcml0aG0sIGRlc2lnbmVkIGZvciB0aGUgc2NlbmFyaW8KKyAqCXdoZXJl IHZhcjIgaGFzIGF0IGxlYXN0IHR3aWNlIGFzIG1hbnkgYmFzZSBkaWdpdHMgYXMgdmFyMS4K KyAqCisgKglJbiB0aGlzIGNhc2UgdmFyMiAodGhlIGxvbmdlciBpbnB1dCkgaXMgc3BsaXQg aW50byBoaWdoMiBhbmQgbG93MSwKKyAqCWF0IG0yIChoYWxmIHRoZSBsZW5ndGggb2YgdmFy MikgYW5kIHZhcjEgKHRoZSBzaG9ydGVyIGlucHV0KSwKKyAqCWlzIHVzZWQgZGlyZWN0bHkg d2l0aG91dCBzcGxpdHRpbmcuCisgKgorICoJVGhlIGFsZ29yaXRobSB0aGVuIHByb2NlZWRz IGFzIGZvbGxvd3M6CisgKgorICoJMS4gQ29tcHV0ZSB0aGUgcHJvZHVjdCB6MCA9IHZhcjEg KiBsb3cyLgorICoJMi4gQ29tcHV0ZSB0aGUgcHJvZHVjdCB0ZW1wMiA9IHZhcjEgKiBoaWdo Mi4KKyAqCTMuIEFkanVzdCB0aGUgd2VpZ2h0IG9mIHRlbXAyIGJ5IGFkZGluZyBtMiAoKiBO QkFTRSBeIG0yKQorICoJNC4gQWRkIHRlbXAyIGFuZCB6MCB0byBvYnRhaW4gdGhlIGZpbmFs IHJlc3VsdC4KKyAqCisgKglQcm9vZjoKKyAqCisgKglUaGUgYWxnb3JpdGhtIGNhbiBiZSBk ZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIEthcmF0c3ViYSBhbGdvcml0aG0gYnkKKyAqCXNp bXBsaWZ5aW5nIHRoZSBmb3JtdWxhIHdoZW4gdGhlIHNob3J0ZXIgZmFjdG9yIHZhcjEgaXMg bm90IHNwbGl0IGludG8KKyAqCWhpZ2ggYW5kIGxvdyBwYXJ0cywgYXMgc2hvd24gYmVsb3cu CisgKgorICoJT3JpZ2luYWwgS2FyYXRzdWJhIGZvcm11bGE6CisgKgorICoJCXJlc3VsdCA9 ICh6MiAqIE5CQVNFIF4gKG0yIMOXIDIpKSArICgoejEgLSB6MiAtIHowKSAqIE5CQVNFIF4g bTIpICsgejAKKyAqCisgKglTdWJzdGl0dXRpb25zOgorICoKKyAqCQlsb3cxID0gdmFyMQor ICoJCWhpZ2gxID0gMAorICoKKyAqCUFwcGx5aW5nIHN1YnN0aXR1dGlvbnM6CisgKgorICoJ CXowID0gKGxvdzEgKiBsb3cyKQorICoJCSAgID0gKHZhcjEgKiBsb3cyKQorICoKKyAqCQl6 MSA9ICgobG93MSArIGhpZ2gxKSAqIChsb3cyICsgaGlnaDIpKQorICoJCSAgID0gKCh2YXIx ICsgMCkgKiAobG93MiArIGhpZ2gyKSkKKyAqCQkgICA9ICh2YXIxICogbG93MikgKyAodmFy MSAqIGhpZ2gyKQorICoKKyAqCQl6MiA9IChoaWdoMSAqIGhpZ2gyKQorICoJCSAgID0gKDAg KiBoaWdoMikKKyAqCQkgICA9IDAKKyAqCisgKglTaW1wbGlmaWVkIHVzaW5nIHRoZSBhYm92 ZSBzdWJzdGl0dXRpb25zOgorICoKKyAqCQlyZXN1bHQgPSAoejIgKiBOQkFTRSBeIChtMiDD lyAyKSkgKyAoKHoxIC0gejIgLSB6MCkgKiBOQkFTRSBeIG0yKSArIHowCisgKgkJCSAgID0g KDAgKiBOQkFTRSBeIChtMiDDlyAyKSkgKyAoKHoxIC0gMCAtIHowKSAqIE5CQVNFIF4gbTIp ICsgejAKKyAqCQkJICAgPSAoKHoxIC0gejApICogTkJBU0UgXiBtMikgKyB6MAorICoJCQkg ICA9ICgoejEgLSB6MCkgKiBOQkFTRSBeIG0yKSArIHowCisgKgkJCSAgID0gKHZhcjEgKiBo aWdoMikgKiBOQkFTRSBeIG0yICsgejAKKyAqLworc3RhdGljIHZvaWQKK211bF92YXJfa2Fy YXRzdWJhX2hhbGYoY29uc3QgTnVtZXJpY1ZhciAqdmFyMSwgY29uc3QgTnVtZXJpY1ZhciAq dmFyMiwKKwkJTnVtZXJpY1ZhciAqcmVzdWx0LCBpbnQgcnNjYWxlKQoreworCU51bWVyaWNW YXIJaGlnaDIsIGxvdzI7CisJTnVtZXJpY1Zhcgl6MDsKKwlOdW1lcmljVmFyCXRlbXAyOwor CWludAkJCW0yID0gdmFyMi0+bmRpZ2l0cyAvIDI7CisKKwlpbml0X3ZhcigmaGlnaDIpOwor CWluaXRfdmFyKCZsb3cyKTsKKwlpbml0X3ZhcigmejApOworCWluaXRfdmFyKCZ0ZW1wMik7 CisKKwlzcGxpdF92YXJfYXQodmFyMiwgbTIsICZsb3cyLCAmaGlnaDIpOworCisJbXVsX3Zh cih2YXIxLCAmbG93MiwgJnowLCB2YXIxLT5kc2NhbGUgKyBsb3cyLmRzY2FsZSk7CisJbXVs X3Zhcih2YXIxLCAmaGlnaDIsICZ0ZW1wMiwgdmFyMS0+ZHNjYWxlICsgaGlnaDIuZHNjYWxl KTsKKwl0ZW1wMi53ZWlnaHQgKz0gbTI7CisJYWRkX3ZhcigmdGVtcDIsICZ6MCwgcmVzdWx0 KTsKKworCWZyZWVfdmFyKCZoaWdoMik7CisJZnJlZV92YXIoJmxvdzIpOworCWZyZWVfdmFy KCZ6MCk7CisJZnJlZV92YXIoJnRlbXAyKTsKKworCS8qIFJvdW5kIHRvIHRhcmdldCByc2Nh bGUgKGFuZCBzZXQgcmVzdWx0LT5kc2NhbGUpICovCisJcm91bmRfdmFyKHJlc3VsdCwgcnNj YWxlKTsKKworCS8qIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHplcm9lcyAqLworCXN0 cmlwX3ZhcihyZXN1bHQpOworCisJcmV0dXJuOworfQorCisKIC8qCiAgKiBtdWxfdmFyKCkg LQogICoKQEAgLTg3NDcsNiArODk5MiwxOCBAQCBtdWxfdmFyKGNvbnN0IE51bWVyaWNWYXIg KnZhcjEsIGNvbnN0IE51bWVyaWNWYXIgKnZhcjIsIE51bWVyaWNWYXIgKnJlc3VsdCwKIAkJ cmV0dXJuOwogCX0KIAorCS8qCisJICogVXNlIHRoZSBLYXJhdHN1YmEgYWxnb3JpdGhtIGZv ciBzdWZmaWNpZW50bHkgbGFyZ2UgZmFjdG9ycy4KKwkgKi8KKwlpZiAoS0FSQVRTVUJBX0NP TkRJVElPTih2YXIxbmRpZ2l0cywgdmFyMm5kaWdpdHMpKQorCXsKKwkJaWYgKHZhcjFuZGln aXRzICogMiA+IHZhcjJuZGlnaXRzKQorCQkJbXVsX3Zhcl9rYXJhdHN1YmFfZnVsbCh2YXIx LCB2YXIyLCByZXN1bHQsIHJzY2FsZSk7CisJCWVsc2UKKwkJCW11bF92YXJfa2FyYXRzdWJh X2hhbGYodmFyMSwgdmFyMiwgcmVzdWx0LCByc2NhbGUpOworCQlyZXR1cm47CisJfQorCiAJ LyoKIAkgKiBXZSBkbyB0aGUgYXJpdGhtZXRpYyBpbiBhbiBhcnJheSAiZGlnW10iIG9mIHNp Z25lZCBpbnQncy4gIFNpbmNlCiAJICogSU5UX01BWCBpcyBub3RpY2VhYmx5IGxhcmdlciB0 aGFuIE5CQVNFKk5CQVNFLCB0aGlzIGdpdmVzIHVzIGhlYWRyb29tCi0tIAoyLjQ1LjEKCg== --8922e8b98b364c84aac561e918786480--