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 1vCCXp-00AQ0C-TV for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Oct 2025 07:49:05 +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 1vCCXo-00Ej1z-Lk for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Oct 2025 07:49:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vCCXo-00Ej1q-7t for pgsql-hackers@lists.postgresql.org; Fri, 24 Oct 2025 07:49:03 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vCCXk-003x5X-2h for pgsql-hackers@lists.postgresql.org; Fri, 24 Oct 2025 07:49:02 +0000 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-63c0e774250so289547a12.1 for ; Fri, 24 Oct 2025 00:49:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761292139; x=1761896939; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wfJSxxl6EUpgE3fewlIdn1RQJL2+yzPO3/bJQOIb3Fw=; b=AD2kYIlUwGYDSVBieApNTFaOecxb3eDw1QmpGpkSDlK75O4f5WPqdOL3zRvDcXwiDP aTP0mN2A7jtGj2oXjcFTnfFzQQz+mqA2TmAP2geaxBsoZOEjVbnCMASLK0QR3gjLGzPq TZUvm71F845MvtLPiJ4m6EYuG4ivGMlsYJNlRWWWqUbvujOWc6zgpprEZX0F7dz3LIPR WU57DbqZQDcbvlmeaarxbq4xhydSZ4bsTkdpn+sSSXRsX0TN3wfyE7yt3890c5U0aHrC i2o793K4692wLSTGYETvhdI1ifotZryn0KAI0oWbDX1C9NLLgYqFUvNEx8HhwVbmYzLv zJGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761292139; x=1761896939; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wfJSxxl6EUpgE3fewlIdn1RQJL2+yzPO3/bJQOIb3Fw=; b=KsV0gobGYnCgxvrF52tvfncHN7564Cbs11TN+BCqx/NztGy4aKvIwBvYqrk6jiTnjN G2gGWgeAPQpaB1hNlVlq4gjYaR/THcxGCtNu/tLxfssvuLinJSsD+/ra/iFdCeAFsoiX nv98yhyXWJAnvcJAlNS34RH62HgcLg0ehKD+YDekcmClkAcDSFF3YPWAcd81597lS0Fk dM9e0ucm1sPnQNyXnNMTrvJsPlcrRE/XID7geIFy1iA607NbmMQ8vVaTRYYUv7XuqBoo 8+5dyaY7O0rAlpE1DD63R7EscSlfNO9hlMlintTlWB9wD7qc1qkJIKiGd/n+zLcnRncP WbVw== X-Gm-Message-State: AOJu0Ywv/yp8hwdb293wVzaE5etyr3M2gQG4CDRi2JnIgtWtWoXlw2bD F5jOBunAh8pqp78QViSegcAAo+zc41Ii2EKyoQV3c16qM1ELoXd3/1Z14QNQgB7KOHKWev6MenX eaa+Sk+dRZeuRZIo+AJZZdyosxyTlWoDlhwlw X-Gm-Gg: ASbGncsoKVQjatR+/ui631G39tAiZtXMH+dXw3gxYXnMHo9yc4zv1EJyXU8SjFh44u1 PNHCp9SHITm/YAmwm54oLbFrj6ZBjkTyZv8LnkKliFgcUoXX6r0AgHvxZ7uG6uo/YT97t10Ove3 DKQ83YuNNVEqD9f2KLJyPigTJs5/2ce8V7pDZ9aCKzy0j8IQgRCwahFiD+JAiJIs8TQCgnarsWY h86Vtj1kroB7K9g7K8oMlFfL51VaCkNcQsg5Ns2yDGKJzsaKgHL7EBRpXtGgNI2ykFcCQ== X-Google-Smtp-Source: AGHT+IGA8GEUHoOnBZZisWytiFry9xn0z7BKoVHXYm+TNNFmky+txgiZi/LDANQ+IfQr6YYG+4NuySgKHuuZt6meq3w= X-Received: by 2002:a05:6402:5189:b0:63c:11cd:be5f with SMTP id 4fb4d7f45d1cf-63d24014022mr7544942a12.4.1761292138954; Fri, 24 Oct 2025 00:48:58 -0700 (PDT) MIME-Version: 1.0 References: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> In-Reply-To: From: Andrew Kim Date: Fri, 24 Oct 2025 00:48:45 -0700 X-Gm-Features: AWmQ_bnfDwBFflTmfuidDUY58GqbaQHRYmAa5dLcvBcs2W9m-TnK-8qQ_6TBJ9o Message-ID: Subject: Re: Proposal for enabling auto-vectorization for checksum calculations To: John Naylor Cc: pgsql-hackers@lists.postgresql.org, Oleg Tselebrovskiy Content-Type: multipart/mixed; boundary="0000000000004a02200641e2c8aa" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004a02200641e2c8aa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi John, Thank you for your review on the previous patch versions. I've carefully addressed your concerns and those raised by Oleg, specifically focusing on patch separation and simplification of the configure tests. I am submitting the new version (V8) as two distinct patches: V8-0001: Pure refactoring (moving files, updating includes). V8-0002: Adding the AVX2 feature (detection, dispatch, and optimization). As requested, I've used in-line responses below to clarify how each point was handled. On Mon, Oct 20, 2025 at 8:30=E2=80=AFPM John Naylor wrote: > > On Fri, Oct 17, 2025 at 2:15=E2=80=AFPM Andrew Kim wrote: > > > > Hi John, > > > > Thank you for your detailed and constructive feedback on the checksum > > AVX2 optimization patch. > > I've carefully addressed all of your concerns and am pleased to share > > the updated V6 implementation. > > Great! I know we're on v7 now, but I'm going to make a request for > next time you respond to a review: Respond in-line to each point. As I > mentioned before, > > > On Wed, Oct 1, 2025 at 10:26=E2=80=AFPM John Naylor wrote: > > > (BTW, we discourage top-posting and prefer to cut to size and > > > use inline responses) > > Please don't top-post again, as it clutters our archives in addition > to making it easy to forget things. I'm now going to copy the things > that were either not addressed or misunderstood: > I apologize for the top-posting in the previous response. I've switched to the preferred in-line response format for this and all future correspondence. > > > I think a good first refactoring patch would be to move > > > src/backend/storage/checksum.c (which your patch doesn't even touch) > > > to src/port (and src/include/storage/checksum.h to src/include/port) > > > and have all callers use that. With that, I imagine only that > > > checksum.c file would include checksum_impl.h. > > > > > > If that poses a problem, let us know -- we may have to further juggle > > > things. If that works without issue, we can proceed with the > > > specialization. > > That means the first patch moves things around without adding any > platform-specific code, and the next patch adds the specialization. I > think that would be a lot easier to review and test, especially to > avoid breaking external programs (see below for more on this). A > committer can always squash things together if it make sense to do so. > Patch V8-0001 (Move-checksum-functions...): This is now a pure refactoring patch. It simply moves checksum.c and its headers from storage/ to port/ and updates the #include paths in all callers (rawpage.c, pg_checksums.c, etc.). It contains no AVX2 or ISA-specific code. Patch V8-0002 (Add-AVX2-optimization...): This patch builds upon the first, adding all the new AVX2 functionality, detection, and dispatch logic. > > > + #if defined(__has_attribute) && __has_attribute (target) > > > + __attribute__((target("avx2"))) > > > + #endif > > > + static int avx2_test(void) > > > + { > > > + const char buf@<:@sizeof(__m256i)@:>@; > > > + __m256i accum =3D _mm256_loadu_si256((const __m256i *) buf); > > > + accum =3D _mm256_add_epi32(accum, accum); > > > + int result =3D _mm256_extract_epi32(accum, 0); > > > + return (int) result; > > > + }], > > > > > > If we're just testing if the target works, we can just use an empty > > > function, right? > > Oleg mentioned the same thing later. It's a waste of time for us to > repeat ourselves. I said you didn't have to worry about it yet, > because I was hoping to see the refactoring first. > I have implemented this simplification in Patch V8-0002. The test in config/c-compiler.m4 is now a simple, empty function with only the __attribute__((target("avx2"))) to verify compiler support for the attribute, as suggested. > Now, aside from that I looked further into this: > > > > The top of the checksum_impl.h has this: > > > > > > * This file exists for the benefit of external programs that may wis= h to > > > * check Postgres page checksums. They can #include this to get the = code > > > * referenced by storage/checksum.h. (Note: you may need to redefine > > > * Assert() as empty to compile this successfully externally.) > > > > > > It's going to be a bit tricky to preserve this ability while allowing > > > the core server and client programs to dispatch to a specialized > > > implementation, but we should at least try. That means keeping > > > pg_checksum_block() and pg_checksum_page() where they live now. > > Looking at commit f04216341dd1, we have at least one example of an > external program, pg_filedump. If we can keep this working with > minimal fuss, it should be fine everywhere. The v8 patch series preserves external compatibility. External programs like pg_filedump will only need to update their include paths: /* OLD */ #include "storage/checksum.h" #include "storage/checksum_impl.h" /* NEW */ #include "port/checksum.h" #include "port/checksum_impl.h" The function signatures (pg_checksum_block, pg_checksum_page) remain identical, and checksum_impl.h still contains the complete implementation that external programs can include. The runtime dispatch only affects internal PostgreSQL usage. /* OLD */#include "storage/checksum.h"#include "storage/checksum_impl.h"/* NEW */ #include "port/checksum.h"#include "port/checksum_impl.h" > https://github.com/df7cb/pg_filedump/blob/master/pg_filedump.c#L29 > > ``` > /* checksum_impl.h uses Assert, which doesn't work outside the server */ > #undef Assert > #define Assert(X) > > #include "storage/checksum.h" > #include "storage/checksum_impl.h" > ``` > > Elsewhere they already have to do things like > > ``` > #if PG_VERSION_NUM < 110000 > " Previous Checkpoint Record: Log File (%u) Offset (0x%08x)\n" > #endif > ``` > > ...so it's probably okay if they have to adjust for a new #include > path, but I want to verify that actually works, and I don't want to > make it any more invasive than that. As we proceed, I can volunteer to > do the work to test that pg_filedump still builds fine with small > changes. Feel free to try building it yourself, but I'm happy to do > it. I appreciate your offer to test pg_filedump compatibility. The changes in v8 should be minimal for external programs - just the include path updates. If you're willing to test this, it would be very valuable validation. > > Oleg posted another review recently, so I won't complicate things > further, but from a brief glance I will suggest for next time not to > change any comments that haven't been invalidated by the patch. > In v8, I've been much more conservative about comment changes. I only updated comments that were directly invalidated by the code changes (like file path references that changed from storage/ to port/). Other comments remain untouched unless they were factually incorrect due to the refactoring. > -- > John Naylor > Amazon Web Services --0000000000004a02200641e2c8aa Content-Type: application/octet-stream; name="v8-0001-Move-checksum-functions-from-backend-storage-to-port.patch" Content-Disposition: attachment; filename="v8-0001-Move-checksum-functions-from-backend-storage-to-port.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh4jun7u0 RnJvbSBhZGI5OTgxZWFlNzg2ZWQ3YmUwZTRmNzhkNTFkNTI3ZGEyNTI3NDAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogVGh1LCAyMyBPY3QgMjAyNSAxMDo0MjoyNCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIE1vdmUg Y2hlY2tzdW0gZnVuY3Rpb25zIGZyb20gYmFja2VuZCBzdG9yYWdlIHRvIHBvcnQKClRoaXMgcmVm YWN0b3JpbmcgbW92ZXMgY2hlY2tzdW0gaW1wbGVtZW50YXRpb24gZnJvbSBzcmMvYmFja2VuZC9z dG9yYWdlL3BhZ2UvCnRvIHNyYy9wb3J0LwotLS0KIGNvbnRyaWIvcGFnZWluc3BlY3QvcmF3cGFn ZS5jICAgICAgICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3Vw LmMgICAgICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtlZmls ZSAgICAgICAgICAgICB8IDYgKy0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFn ZS5jICAgICAgICAgICAgfCAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvbWVzb24uYnVp bGQgICAgICAgICAgfCA5IC0tLS0tLS0tLQogc3JjL2Jpbi9wZ19jaGVja3N1bXMvcGdfY2hlY2tz dW1zLmMgICAgICAgICAgIHwgMyArLS0KIHNyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgICAgICAg ICAgICAgICAgICAgICB8IDMgKy0tCiBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVj a3N1bS5oICAgICAgfCAyICstCiBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVja3N1 bV9pbXBsLmggfCA0ICsrLS0KIHNyYy9wb3J0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IDYgKysrKysrCiBzcmMve2JhY2tlbmQvc3RvcmFnZS9wYWdlID0+IHBvcnR9L2No ZWNrc3VtLmMgfCA4ICsrKystLS0tCiBzcmMvcG9ydC9tZXNvbi5idWlsZCAgICAgICAgICAgICAg ICAgICAgICAgICAgfCA0ICsrLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8u YyAgICAgICAgICB8IDIgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDMx IGRlbGV0aW9ucygtKQogcmVuYW1lIHNyYy9pbmNsdWRlL3tzdG9yYWdlID0+IHBvcnR9L2NoZWNr c3VtLmggKDk0JSkKIHJlbmFtZSBzcmMvaW5jbHVkZS97c3RvcmFnZSA9PiBwb3J0fS9jaGVja3N1 bV9pbXBsLmggKDk4JSkKIHJlbmFtZSBzcmMve2JhY2tlbmQvc3RvcmFnZS9wYWdlID0+IHBvcnR9 L2NoZWNrc3VtLmMgKDczJSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BhZ2VpbnNwZWN0L3Jhd3Bh Z2UuYyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvcmF3cGFnZS5jCmluZGV4IGFlZjQ0MmI1ZGIzLi43 YmViNzc2NWRhOSAxMDA2NDQKLS0tIGEvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMKKysr IGIvY29udHJpYi9wYWdlaW5zcGVjdC9yYXdwYWdlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYWdlaW5zcGVjdC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgorI2luY2x1ZGUg InBvcnQvY2hlY2tzdW0uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwLmMKaW5kZXggYmI3ZDkwYWE1ZDkuLmQ4NGNlZDRiNDdjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmcGFnZS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNpbmNs dWRlICJwb3J0L2NoZWNrc3VtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc21faW1wbC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWluaXQuaCIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvcGFnZS9NYWtlZmlsZQppbmRleCBkYTUzOWIxMTNhNi4uNzg4ZmVlNDAzZjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9NYWtlZmlsZQorKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL3BhZ2UvTWFrZWZpbGUKQEAgLTEyLDEyICsxMiw4IEBAIHN1YmRpciA9IHNyYy9i YWNrZW5kL3N0b3JhZ2UvcGFnZQogdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUg JCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAotT0JKUyA9ICBcCitPQkpTID0g XAogCWJ1ZnBhZ2UubyBcCi0JY2hlY2tzdW0ubyBcCiAJaXRlbXB0ci5vCiAKIGluY2x1ZGUgJCh0 b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKLQotIyBQcm92aWRlIHNwZWNpYWwgb3B0 aW1pemF0aW9uIGZsYWdzIGZvciBjaGVja3N1bS5jCi1jaGVja3N1bS5vOiBDRkxBR1MgKz0gJHtD RkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFHU19WRUNUT1JJWkV9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L2J1ZnBhZ2UuYwppbmRleCBkYmI0OWVkOTE5Ny4uYjhmODg5ZWZiODggMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9wYWdlL2J1ZnBhZ2UuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9pdHVw LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKLSNpbmNs dWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkCmluZGV4IDExMmYwMGZmMzY1Li5jZjkyYThm NTVmMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9tZXNvbi5idWlsZApAQCAtMSwxNCArMSw1IEBA CiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAogCi1jaGVja3N1bV9iYWNrZW5kX2xpYiA9IHN0YXRpY19saWJyYXJ5KCdjaGVja3N1 bV9iYWNrZW5kX2xpYicsCi0gICdjaGVja3N1bS5jJywKLSAgZGVwZW5kZW5jaWVzOiBiYWNrZW5k X2J1aWxkX2RlcHMsCi0gIGt3YXJnczogaW50ZXJuYWxfbGliX2FyZ3MsCi0gIGNfYXJnczogdmVj dG9yaXplX2NmbGFncyArIHVucm9sbF9sb29wc19jZmxhZ3MsCi0pCi0KLWJhY2tlbmRfbGlua193 aXRoICs9IGNoZWNrc3VtX2JhY2tlbmRfbGliCi0KIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygK ICAgJ2J1ZnBhZ2UuYycsCiAgICdpdGVtcHRyLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19j aGVja3N1bXMvcGdfY2hlY2tzdW1zLmMgYi9zcmMvYmluL3BnX2NoZWNrc3Vtcy9wZ19jaGVja3N1 bXMuYwppbmRleCA0NmNiMmYzNmVmYS4uMmUwMjEyYzAyOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfY2hlY2tzdW1zL3BnX2NoZWNrc3Vtcy5jCisrKyBiL3NyYy9iaW4vcGdfY2hlY2tzdW1zL3Bn X2NoZWNrc3Vtcy5jCkBAIC0yOSw4ICsyOSw3IEBACiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIK ICNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKLSNp bmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bV9p bXBsLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogCiAKIHN0YXRpYyBpbnQ2NCBmaWxl c19zY2FubmVkID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMgYi9z cmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jCmluZGV4IDkxZWQxNmFjYjA4Li5mOWE1ZWQwMmVlNCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYworKysgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvZmlsZS5jCkBAIC0yNCw4ICsyNCw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVy bS5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2Uu aCIKLSNpbmNsdWRlICJzdG9yYWdlL2NoZWNrc3VtLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVj a3N1bV9pbXBsLmgiCisjaW5jbHVkZSAicG9ydC9jaGVja3N1bS5oIgogCiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2NoZWNrc3VtLmggYi9zcmMvaW5jbHVkZS9wb3J0L2No ZWNrc3VtLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUvc3Rv cmFnZS9jaGVja3N1bS5oCnJlbmFtZSB0byBzcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtLmgKaW5k ZXggMjVkMTNhNzk4ZDEuLmMyZmFlZDgzZWRlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2NoZWNrc3VtLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5oCkBAIC02LDcg KzYsNyBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKLSAqIHNyYy9pbmNs dWRlL3N0b3JhZ2UvY2hlY2tzdW0uaAorICogc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bS5oCiAg KgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvY2hlY2tzdW1faW1wbC5oIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgKc2lt aWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1 bV9pbXBsLmgKcmVuYW1lIHRvIHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oCmluZGV4 IGRhODdkNjFiYTUyLi4wMGNiMDU0OWYyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9jaGVja3N1bV9pbXBsLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgK QEAgLTUsMTMgKzUsMTMgQEAKICAqCiAgKiBUaGlzIGZpbGUgZXhpc3RzIGZvciB0aGUgYmVuZWZp dCBvZiBleHRlcm5hbCBwcm9ncmFtcyB0aGF0IG1heSB3aXNoIHRvCiAgKiBjaGVjayBQb3N0Z3Jl cyBwYWdlIGNoZWNrc3Vtcy4gIFRoZXkgY2FuICNpbmNsdWRlIHRoaXMgdG8gZ2V0IHRoZSBjb2Rl Ci0gKiByZWZlcmVuY2VkIGJ5IHN0b3JhZ2UvY2hlY2tzdW0uaC4gIChOb3RlOiB5b3UgbWF5IG5l ZWQgdG8gcmVkZWZpbmUKKyAqIHJlZmVyZW5jZWQgYnkgcG9ydC9jaGVja3N1bS5oLiAgKE5vdGU6 IHlvdSBtYXkgbmVlZCB0byByZWRlZmluZQogICogQXNzZXJ0KCkgYXMgZW1wdHkgdG8gY29tcGls ZSB0aGlzIHN1Y2Nlc3NmdWxseSBleHRlcm5hbGx5LikKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCiAgKgotICogc3JjL2luY2x1ZGUvc3RvcmFnZS9jaGVja3N1bV9pbXBsLmgK KyAqIHNyYy9pbmNsdWRlL3BvcnQvY2hlY2tzdW1faW1wbC5oCiAgKgogICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wb3J0L01ha2VmaWxlIGIvc3JjL3BvcnQvTWFrZWZp bGUKaW5kZXggNDI3NDk0OWRmYTQuLjRmMWY0NjBiZmYyIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9N YWtlZmlsZQorKysgYi9zcmMvcG9ydC9NYWtlZmlsZQpAQCAtMzksNiArMzksNyBAQCBPQkpTID0g XAogCSQoTElCT0JKUykgXAogCSQoUEdfQ1JDMzJDX09CSlMpIFwKIAlic2VhcmNoX2FyZy5vIFwK KwljaGVja3N1bS5vIFwKIAljaGtsb2NhbGUubyBcCiAJaW5ldF9uZXRfbnRvcC5vIFwKIAlub2Js b2NrLm8gXApAQCAtOTAsNiArOTEsMTEgQEAgcGdfY3JjMzJjX2FybXY4Lm86IENGTEFHUys9JChD RkxBR1NfQ1JDKQogcGdfY3JjMzJjX2FybXY4X3NobGliLm86IENGTEFHUys9JChDRkxBR1NfQ1JD KQogcGdfY3JjMzJjX2FybXY4X3Nydi5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIAorIyBQcm92 aWRlIHNwZWNpYWwgb3B0aW1pemF0aW9uIGZsYWdzIGZvciBjaGVja3N1bS5jCitjaGVja3N1bS5v OiBDRkxBR1MgKz0gJHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFHU19WRUNUT1JJWkV9Citj aGVja3N1bV9zaGxpYi5vOiBDRkxBR1MgKz0gJHtDRkxBR1NfVU5ST0xMX0xPT1BTfSAke0NGTEFH U19WRUNUT1JJWkV9CitjaGVja3N1bV9zcnYubzogQ0ZMQUdTICs9ICR7Q0ZMQUdTX1VOUk9MTF9M T09QU30gJHtDRkxBR1NfVkVDVE9SSVpFfQorCiAjCiAjIFNoYXJlZCBsaWJyYXJ5IHZlcnNpb25z IG9mIG9iamVjdCBmaWxlcwogIwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdl L2NoZWNrc3VtLmMgYi9zcmMvcG9ydC9jaGVja3N1bS5jCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJl bmFtZSBmcm9tIHNyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9jaGVja3N1bS5jCnJlbmFtZSB0byBz cmMvcG9ydC9jaGVja3N1bS5jCmluZGV4IGM5MTM0NTliNWEzLi5kZTYxYTQ2MjMxZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2NoZWNrc3VtLmMKKysrIGIvc3JjL3BvcnQv Y2hlY2tzdW0uYwpAQCAtNywxNiArNywxNiBAQAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCiAgKiBJREVO VElGSUNBVElPTgotICoJICBzcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvY2hlY2tzdW0uYworICoJ ICBzcmMvcG9ydC9jaGVja3N1bS5jCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCi0jaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1bS5oIgorI2luY2x1 ZGUgInBvcnQvY2hlY2tzdW0uaCIKIC8qCi0gKiBUaGUgYWN0dWFsIGNvZGUgaXMgaW4gc3RvcmFn ZS9jaGVja3N1bV9pbXBsLmguICBUaGlzIGlzIGRvbmUgc28gdGhhdAorICogVGhlIGFjdHVhbCBj b2RlIGlzIGluIHBvcnQvY2hlY2tzdW1faW1wbC5oLiAgVGhpcyBpcyBkb25lIHNvIHRoYXQKICAq IGV4dGVybmFsIHByb2dyYW1zIGNhbiBpbmNvcnBvcmF0ZSB0aGUgY2hlY2tzdW0gY29kZSBieSAj aW5jbHVkZSdpbmcKICAqIHRoYXQgZmlsZSBmcm9tIHRoZSBleHBvcnRlZCBQb3N0Z3JlcyBoZWFk ZXJzLiAgKENvbXBhcmUgb3VyIENSQyBjb2RlLikKICAqLwotI2luY2x1ZGUgInN0b3JhZ2UvY2hl Y2tzdW1faW1wbC5oIgkvKiBJV1lVIHByYWdtYToga2VlcCAqLworI2luY2x1ZGUgInBvcnQvY2hl Y2tzdW1faW1wbC5oIgkJLyogSVdZVSBwcmFnbWE6IGtlZXAgKi8KZGlmZiAtLWdpdCBhL3NyYy9w b3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQKaW5kZXggZmM3YjA1OWZlZTUu LmQzZTYzYmNlOWU3IDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNvbi5idWlsZAorKysgYi9zcmMv cG9ydC9tZXNvbi5idWlsZApAQCAtMTA0LDggKzEwNCw4IEBAIHJlcGxhY2VfZnVuY3NfcG9zID0g WwogICBbJ3BnX2NyYzMyY19zYjgnLCAnVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMnXSwKIF0KIAot cGdwb3J0X2NmbGFncyA9IHsnY3JjJzogY2ZsYWdzX2NyY30KLXBncG9ydF9zb3VyY2VzX2NmbGFn cyA9IHsnY3JjJzogW119CitwZ3BvcnRfY2ZsYWdzID0geydjcmMnOiBjZmxhZ3NfY3JjLCAnY2hl Y2tzdW0nOiB2ZWN0b3JpemVfY2ZsYWdzICsgdW5yb2xsX2xvb3BzX2NmbGFnc30KK3BncG9ydF9z b3VyY2VzX2NmbGFncyA9IHsnY3JjJzogW10sICdjaGVja3N1bSc6IFtmaWxlcygnY2hlY2tzdW0u YycpXX0KIAogZm9yZWFjaCBmIDogcmVwbGFjZV9mdW5jc19uZWcKICAgZnVuYyA9IGYuZ2V0KDAp CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKaW5kZXggYzU1Y2Y2YzBhYWMuLjE3NWU0 OTFjMGJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC0yNCw3ICsyNCw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9haW9faW50ZXJuYWwuaCIKICNpbmNsdWRlICJzdG9yYWdl L2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUg InN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJwb3J0L2NoZWNrc3VtLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCi0tIAoyLjQzLjAKCg== --0000000000004a02200641e2c8aa Content-Type: application/octet-stream; name="v8-0002-Add-AVX2-optimization-for-page-checksum-calculation.patch" Content-Disposition: attachment; filename="v8-0002-Add-AVX2-optimization-for-page-checksum-calculation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh4jun871 RnJvbSA4YTMzZTM3MzczNjAxNTZiODYyZmM3NTY2NjYzMGY4MDQzZjdkMjg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogVGh1LCAyMyBPY3QgMjAyNSAxNjozNToyMiAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMS8xXSBB ZGQgQVZYMiBvcHRpbWl6YXRpb24gZm9yIHBhZ2UgY2hlY2tzdW0gY2FsY3VsYXRpb24KClRoaXMg cGF0Y2ggYWRkcyBydW50aW1lIEFWWDIgZGV0ZWN0aW9uIGFuZCBvcHRpbWl6YXRpb24gZm9yIFBv c3RncmVTUUwncwpwYWdlIGNoZWNrc3VtIGFsZ29yaXRobSB3aGlsZSBtYWludGFpbmluZyBmdWxs IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCgpLZXkgY2hhbmdlczoKLSBBZGQgY3Jvc3MtcGxhdGZv cm0gQVZYMiBDUFUgZGV0ZWN0aW9uIHdpdGggWFNBVkUvWU1NIHJlZ2lzdGVyIGNoZWNrcwotIElt cGxlbWVudCBmdW5jdGlvbiBwb2ludGVyIGRpc3BhdGNoIHBhdHRlcm4gZm9sbG93aW5nIFBvc3Rn cmVTUUwgY29udmVudGlvbnMKLSBVc2UgY29tcGlsZXIgYXV0by12ZWN0b3JpemF0aW9uIHdpdGgg cGdfYXR0cmlidXRlX3RhcmdldCgiYXZ4MiIpCi0gQWRkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0IGlu IGJvdGggYXV0b3Rvb2xzIGFuZCBtZXNvbgotIE1haW50YWluIGV4dGVybmFsIHByb2dyYW0gY29t cGF0aWJpbGl0eSAocGdfZmlsZWR1bXAsIGV0Yy4pCgpUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0 aGUgc2FtZSBhbGdvcml0aG0gZm9yIGJvdGggZGVmYXVsdCBhbmQgQVZYMiBwYXRocywKYWxsb3dp bmcgdGhlIGNvbXBpbGVyIHRvIGF1dG9tYXRpY2FsbHkgdmVjdG9yaXplIHRoZSBBVlgyIHZlcnNp b24gd2hpbGUKcHJlc2VydmluZyBpZGVudGljYWwgcmVzdWx0cy4gUnVudGltZSBkZXRlY3Rpb24g ZW5zdXJlcyBvcHRpbWFsIHBlcmZvcm1hbmNlCm9uIHN1cHBvcnRlZCBoYXJkd2FyZSB3aXRoIGdy YWNlZnVsIGZhbGxiYWNrIG9uIG9sZGVyIHN5c3RlbXMuCgpBZGRyZXNzZXMgcmV2aWV3ZXIgZmVl ZGJhY2sgb24gY29uZmlndXJlIHRlc3Qgc2ltcGxpZmljYXRpb24sIFdpbmRvd3MKY29tcGF0aWJp bGl0eSwgYW5kIFBvc3RncmVTUUwgY29kaW5nIGNvbnZlbnRpb25zLgotLS0KIGNvbmZpZy9jLWNv bXBpbGVyLm00ICAgICAgICAgICAgIHwgIDI2ICsrKysrKwogY29uZmlndXJlICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNTIgKysrKysrKysrKysKIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAg ICAgICAgIHwgICA5ICsrCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICB8ICAzMCAr KysrKysrCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiAgICAgICB8ICAgMyArCiBzcmMvaW5j bHVkZS9wb3J0L2NoZWNrc3VtX2ltcGwuaCB8IDE0MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKystCiA2IGZpbGVzIGNoYW5nZWQsIDI2MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvY29uZmlnL2MtY29tcGlsZXIubTQgYi9jb25maWcvYy1jb21waWxlci5t NAppbmRleCAyMzZhNTllODUzNi4uNDA5MjdkNTZlNmEgMTAwNjQ0Ci0tLSBhL2NvbmZpZy9jLWNv bXBpbGVyLm00CisrKyBiL2NvbmZpZy9jLWNvbXBpbGVyLm00CkBAIC01ODEsNiArNTgxLDMyIEBA IGZpCiB1bmRlZmluZShbQWNfY2FjaGV2YXJdKWRubAogXSkjIFBHQUNfU1NFNDJfQ1JDMzJfSU5U UklOU0lDUwogCisjIFBHQUNfQVZYMl9TVVBQT1JUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIyBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgQVZYMiB0YXJnZXQgYXR0cmli dXRlLgorIyBUaGlzIGlzIHVzZWQgZm9yIG9wdGltaXplZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMg d2l0aCBydW50aW1lIGRldGVjdGlvbi4KKyMKKyMgSWYgQVZYMiB0YXJnZXQgYXR0cmlidXRlIGlz IHN1cHBvcnRlZCwgc2V0cyBwZ2FjX2F2eDJfc3VwcG9ydC4KK0FDX0RFRlVOKFtQR0FDX0FWWDJf U1VQUE9SVF0sCitbZGVmaW5lKFtBY19jYWNoZXZhcl0sIFtBU19UUl9TSChbcGdhY19jdl9hdngy X3N1cHBvcnRdKV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIEFWWDIgdGFyZ2V0IGF0dHJpYnV0 ZSBzdXBwb3J0XSwgW0FjX2NhY2hldmFyXSwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKFsjaW5jbHVkZSA8c3RkaW50Lmg+CisgICAgI2lmIGRlZmluZWQoX19oYXNfYXR0cmli dXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKKyAgICBfX2F0dHJpYnV0ZV9fKCh0YXJn ZXQoImF2eDIiKSkpCisgICAgc3RhdGljIGludCBhdngyX3Rlc3Qodm9pZCkKKyAgICB7CisgICAg ICByZXR1cm4gMDsKKyAgICB9CisgICAgI2VuZGlmXSwKKyAgW3JldHVybiBhdngyX3Rlc3QoKTtd KV0sCisgIFtBY19jYWNoZXZhcj15ZXNdLAorICBbQWNfY2FjaGV2YXI9bm9dKV0pCitpZiB0ZXN0 IHgiJEFjX2NhY2hldmFyIiA9IHgieWVzIjsgdGhlbgorICBwZ2FjX2F2eDJfc3VwcG9ydD15ZXMK K2ZpCit1bmRlZmluZShbQWNfY2FjaGV2YXJdKWRubAorXSkjIFBHQUNfQVZYMl9TVVBQT1JUCisK ICMgUEdBQ19BVlg1MTJfUENMTVVMX0lOVFJJTlNJQ1MKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAjIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBBVlgtNTEyIGNhcnJ5bGVz cyBtdWx0aXBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4 IDIyY2Q4NjYxNDdiLi4yMDk4NDljNzczYyAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2Nv bmZpZ3VyZQpAQCAtMTc1NjIsNiArMTc1NjIsNTggQEAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9Y U0FWRV9JTlRSSU5TSUNTIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCisjIENoZWNrIGZvciBBVlgy IHRhcmdldCBhbmQgaW50cmluc2ljIHN1cHBvcnQKKyMKK2lmIHRlc3QgeCIkaG9zdF9jcHUiID0g eCJ4ODZfNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIEFWWDIgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBm b3IgQVZYMiBzdXBwb3J0Li4uICIgPiY2OyB9CitpZiAke3BnYWNfY3ZfYXZ4Ml9zdXBwb3J0Kzp9 IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZz LmguICAqLworI2luY2x1ZGUgPGltbWludHJpbi5oPgorICAgICNpbmNsdWRlIDxzdGRpbnQuaD4K KyAgICAjaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpICYmIF9faGFzX2F0dHJpYnV0ZSAodGFy Z2V0KQorICAgIF9fYXR0cmlidXRlX18oKHRhcmdldCgiYXZ4MiIpKSkKKyAgICAjZW5kaWYKKyAg ICBzdGF0aWMgaW50IGF2eDJfdGVzdCh2b2lkKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgYnVm W3NpemVvZihfX20yNTZpKV07CisgICAgICBfX20yNTZpIGFjY3VtID0gX21tMjU2X2xvYWR1X3Np MjU2KChjb25zdCBfX20yNTZpICopIGJ1Zik7CisJICBhY2N1bSA9IF9tbTI1Nl9hZGRfZXBpMzIo YWNjdW0sIGFjY3VtKTsKKyAgICAgIGludCByZXN1bHQgPSBfbW0yNTZfZXh0cmFjdF9lcGkzMihh Y2N1bSwgMCk7CisgICAgICByZXR1cm4gKGludCkgcmVzdWx0OworICAgIH0KK2ludAorbWFpbiAo KQoreworcmV0dXJuIGF2eDJfdGVzdCgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitp ZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHBnYWNfY3ZfYXZ4Ml9zdXBw b3J0PXllcworZWxzZQorICBwZ2FjX2N2X2F2eDJfc3VwcG9ydD1ubworZmkKK3JtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4 dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRwZ2FjX2N2X2F2eDJfc3VwcG9ydCIgPiY1CiskYXNfZWNobyAiJHBn YWNfY3ZfYXZ4Ml9zdXBwb3J0IiA+JjY7IH0KK2lmIHRlc3QgeCIkcGdhY19jdl9hdngyX3N1cHBv cnQiID0geCJ5ZXMiOyB0aGVuCisgIHBnYWNfYXZ4Ml9zdXBwb3J0PXllcworZmkKKworICBpZiB0 ZXN0IHgiJHBnYWNfYXZ4Ml9zdXBwb3J0IiA9IHgieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2Rl ZmluZSBVU0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hFQ0sgMSIgPj5jb25mZGVmcy5oCisKKyAgZmkK K2ZpCisKICMgQ2hlY2sgZm9yIEFWWC01MTIgcG9wY291bnQgaW50cmluc2ljcwogIwogaWYgdGVz dCB4IiRob3N0X2NwdSIgPSB4Ing4Nl82NCI7IHRoZW4KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5h YyBiL2NvbmZpZ3VyZS5hYwppbmRleCBlNDQ5NDNhYTZmZS4uY2E3MjA1ZDkwYWMgMTAwNjQ0Ci0t LSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTIwODQsNiArMjA4NCwxNSBA QCBlbHNlCiAgIGZpCiBmaQogCisjIENoZWNrIGZvciBBVlgyIHRhcmdldCBhbmQgaW50cmluc2lj IHN1cHBvcnQKKyMKK2lmIHRlc3QgeCIkaG9zdF9jcHUiID0geCJ4ODZfNjQiOyB0aGVuCisgIFBH QUNfQVZYMl9TVVBQT1JUKCkKKyAgaWYgdGVzdCB4IiRwZ2FjX2F2eDJfc3VwcG9ydCIgPSB4Inll cyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNLLCAxLCBb RGVmaW5lIHRvIDEgdG8gdXNlIEFWWDIgaW5zdHJ1Y3Rpb25zIHdpdGggYSBydW50aW1lIGNoZWNr Ll0pCisgIGZpCitmaQorCiAjIENoZWNrIGZvciBYU0FWRSBpbnRyaW5zaWNzCiAjCiBQR0FDX1hT QVZFX0lOVFJJTlNJQ1MoKQpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZApp bmRleCAzOTU0MTZhNjA2MC4uNTY3MDcyMjk0NGUgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisr KyBiL21lc29uLmJ1aWxkCkBAIC0yMjkzLDYgKzIyOTMsMzYgQEAgaW50IG1haW4odm9pZCkKIGVu ZGlmCiAKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIEFWWDIgc3Vw cG9ydAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisKK2lmIGhvc3RfY3B1ID09ICd4ODZfNjQnCisKKyAgcHJvZyA9ICcnJwor I2luY2x1ZGUgPGltbWludHJpbi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2lmIGRlZmluZWQo X19oYXNfYXR0cmlidXRlKSAmJiBfX2hhc19hdHRyaWJ1dGUgKHRhcmdldCkKK19fYXR0cmlidXRl X18oKHRhcmdldCgiYXZ4MiIpKSkKKyNlbmRpZgorc3RhdGljIGludCBhdngyX3Rlc3Qodm9pZCkK K3sKKyAgICByZXR1cm4gMDsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgICByZXR1cm4gYXZ4 Ml90ZXN0KCk7Cit9CisnJycKKworICBpZiBjYy5saW5rcyhwcm9nLCBuYW1lOiAnQVZYMiBzdXBw b3J0JywgYXJnczogdGVzdF9jX2FyZ3MpCisgICAgY2RhdGEuc2V0KCdVU0VfQVZYMl9XSVRIX1JV TlRJTUVfQ0hFQ0snLCAxKQorICBlbmRpZgorCitlbmRpZgorCisKICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDaGVjayBm b3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBBVlgtNTEyIHBvcGNvdW50IGludHJpbnNpY3MuCiAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluIGIvc3JjL2luY2x1ZGUv cGdfY29uZmlnLmguaW4KaW5kZXggYzRkYzVkNzJiZGIuLjk4N2Y5YjVjNzdjIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25maWcu aC5pbgpAQCAtNjc1LDYgKzY3NSw5IEBACiAvKiBEZWZpbmUgdG8gMSB0byB1c2UgQVZYLTUxMiBD UkMgYWxnb3JpdGhtcyB3aXRoIGEgcnVudGltZSBjaGVjay4gKi8KICN1bmRlZiBVU0VfQVZYNTEy X0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0sKIAorLyogRGVmaW5lIHRvIDEgdG8gdXNlIEFWWDIg aW5zdHJ1Y3Rpb25zIHdpdGggYSBydW50aW1lIGNoZWNrLiAqLworI3VuZGVmIFVTRV9BVlgyX1dJ VEhfUlVOVElNRV9DSEVDSworCiAvKiBEZWZpbmUgdG8gMSB0byB1c2UgQVZYLTUxMiBwb3Bjb3Vu dCBpbnN0cnVjdGlvbnMgd2l0aCBhIHJ1bnRpbWUgY2hlY2suICovCiAjdW5kZWYgVVNFX0FWWDUx Ml9QT1BDTlRfV0lUSF9SVU5USU1FX0NIRUNLCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bv cnQvY2hlY2tzdW1faW1wbC5oIGIvc3JjL2luY2x1ZGUvcG9ydC9jaGVja3N1bV9pbXBsLmgKaW5k ZXggMDBjYjA1NDlmMjQuLjBlMWVlZjQ1MjQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0 L2NoZWNrc3VtX2ltcGwuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L2NoZWNrc3VtX2ltcGwuaApA QCAtMTAwLDggKzEwMCwyMyBAQAogICogbWFudWFsbHkgdW5yb2xsIHRoZSBpbm5lciBsb29wLgog ICovCiAKKyNpbmNsdWRlICJwZ19jb25maWcuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2Uu aCIKIAorI2lmZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworCisjaWYgZGVmaW5lZChI QVZFX19HRVRfQ1BVSUQpIHx8IGRlZmluZWQoSEFWRV9fR0VUX0NQVUlEX0NPVU5UKQorI2luY2x1 ZGUgPGNwdWlkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGltbWludHJpbi5oPgorCisjaWYgZGVm aW5lZChIQVZFX19DUFVJRCkgfHwgZGVmaW5lZChIQVZFX19DUFVJREVYKQorI2luY2x1ZGUgPGlu dHJpbi5oPgorI2VuZGlmCisKKyNlbmRpZgorCiAvKiBudW1iZXIgb2YgY2hlY2tzdW1zIHRvIGNh bGN1bGF0ZSBpbiBwYXJhbGxlbCAqLwogI2RlZmluZSBOX1NVTVMgMzIKIC8qIHByaW1lIG11bHRp cGxpZXIgb2YgRk5WLTFhIGhhc2ggKi8KQEAgLTExNCw2ICsxMjksOSBAQCB0eXBlZGVmIHVuaW9u CiAJdWludDMyCQlkYXRhW0JMQ0tTWiAvIChzaXplb2YodWludDMyKSAqIE5fU1VNUyldW05fU1VN U107CiB9IFBHQ2hlY2tzdW1tYWJsZVBhZ2U7CiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8K K3N0YXRpYyB1aW50MzIgcGdfY2hlY2tzdW1fYmxvY2tfY2hvb3NlKGNvbnN0IFBHQ2hlY2tzdW1t YWJsZVBhZ2UgKnBhZ2UpOworCiAvKgogICogQmFzZSBvZmZzZXRzIHRvIGluaXRpYWxpemUgZWFj aCBvZiB0aGUgcGFyYWxsZWwgRk5WIGhhc2hlcyBpbnRvIGEKICAqIGRpZmZlcmVudCBpbml0aWFs IHN0YXRlLgpAQCAtMTI5LDYgKzE0Nyw3MSBAQCBzdGF0aWMgY29uc3QgdWludDMyIGNoZWNrc3Vt QmFzZU9mZnNldHNbTl9TVU1TXSA9IHsKIAkweDlGQkY4Qzc2LCAweDE1Q0EyMEJFLCAweEYyQ0E5 RkQzLCAweDk1OUJENzU2CiB9OwogCisjaWZkZWYgVVNFX0FWWDJfV0lUSF9SVU5USU1FX0NIRUNL CisKKy8qCisgKiBEb2VzIENQVUlEIHNheSB0aGVyZSdzIHN1cHBvcnQgZm9yIFhTQVZFIGluc3Ry dWN0aW9ucz8KKyAqLworc3RhdGljIGlubGluZSBib29sCit4c2F2ZV9hdmFpbGFibGUodm9pZCkK K3sKKwl1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9OworCisjaWYgZGVmaW5lZChI QVZFX19HRVRfQ1BVSUQpCisJX19nZXRfY3B1aWQoMSwgJmV4eFswXSwgJmV4eFsxXSwgJmV4eFsy XSwgJmV4eFszXSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0NQVUlEKQorCV9fY3B1aWQoZXh4LCAx KTsKKyNlbHNlCisjZXJyb3IgY3B1aWQgaW5zdHJ1Y3Rpb24gbm90IGF2YWlsYWJsZQorI2VuZGlm CisJcmV0dXJuIChleHhbMl0gJiAoMSA8PCAyNykpICE9IDA7CS8qIG9zeHNhdmUgKi8KK30KKwor LyoKKyAqIERvZXMgWEdFVEJWIHNheSB0aGUgWU1NIHJlZ2lzdGVycyBhcmUgZW5hYmxlZD8KKyAq CisgKiBOQjogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgdGhhdCB4c2F2ZV9h dmFpbGFibGUoKSByZXR1cm5zIHRydWUKKyAqIGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgKi8KKyNp ZmRlZiBIQVZFX1hTQVZFX0lOVFJJTlNJQ1MKK3BnX2F0dHJpYnV0ZV90YXJnZXQoInhzYXZlIikK KyNlbmRpZgorc3RhdGljIGlubGluZSBib29sCit5bW1fcmVnc19hdmFpbGFibGUodm9pZCkKK3sK KyNpZmRlZiBIQVZFX1hTQVZFX0lOVFJJTlNJQ1MKKwlyZXR1cm4gKF94Z2V0YnYoMCkgJiAweDA2 KSA9PSAweDA2OworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworLyoKKyAqIENo ZWNrIGZvciBBVlgyIHN1cHBvcnQgdXNpbmcgbWFudWFsIENQVUlEIGRldGVjdGlvbgorICovCitz dGF0aWMgaW5saW5lIGJvb2wKK2F2eDJfYXZhaWxhYmxlKHZvaWQpCit7CisjaWZkZWYgVVNFX0FW WDJfV0lUSF9SVU5USU1FX0NIRUNLCisJdW5zaWduZWQgaW50IGV4eFs0XSA9IHswLCAwLCAwLCAw fTsKKworCWlmICgheHNhdmVfYXZhaWxhYmxlKCkgfHwgIXltbV9yZWdzX2F2YWlsYWJsZSgpKQor CQlyZXR1cm4gZmFsc2U7CisKKyNpZiBkZWZpbmVkKEhBVkVfX0dFVF9DUFVJRF9DT1VOVCkKKwlf X2dldF9jcHVpZF9jb3VudCg3LCAwLCAmZXh4WzBdLCAmZXh4WzFdLCAmZXh4WzJdLCAmZXh4WzNd KTsKKyNlbGlmIGRlZmluZWQoSEFWRV9fQ1BVSURFWCkKKwlfX2NwdWlkZXgoZXh4LCA3LCAwKTsK KyNlbHNlCisjZXJyb3IgY3B1aWQgaW5zdHJ1Y3Rpb24gbm90IGF2YWlsYWJsZQorI2VuZGlmCisJ cmV0dXJuIChleHhbMV0gJiAoMSA8PCA1KSkgIT0gMDsgLyogYXZ4MiAqLworI2Vsc2UKKwlyZXR1 cm4gZmFsc2U7CisjZW5kaWYKK30KKyNlbmRpZiAvKiBVU0VfQVZYMl9XSVRIX1JVTlRJTUVfQ0hF Q0sgKi8KKwogLyoKICAqIENhbGN1bGF0ZSBvbmUgcm91bmQgb2YgdGhlIGNoZWNrc3VtLgogICov CkBAIC0xNDMsNyArMjI2LDcgQEAgZG8geyBcCiAgKiAoYXQgbGVhc3Qgb24gNC1ieXRlIGJvdW5k YXJ5KS4KICAqLwogc3RhdGljIHVpbnQzMgotcGdfY2hlY2tzdW1fYmxvY2soY29uc3QgUEdDaGVj a3N1bW1hYmxlUGFnZSAqcGFnZSkKK3BnX2NoZWNrc3VtX2Jsb2NrX2RlZmF1bHQoY29uc3QgUEdD aGVja3N1bW1hYmxlUGFnZSAqcGFnZSkKIHsKIAl1aW50MzIJCXN1bXNbTl9TVU1TXTsKIAl1aW50 MzIJCXJlc3VsdCA9IDA7CkBAIC0xNzMsNiArMjU2LDYzIEBAIHBnX2NoZWNrc3VtX2Jsb2NrKGNv bnN0IFBHQ2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lm ZGVmIFVTRV9BVlgyX1dJVEhfUlVOVElNRV9DSEVDSworLyoKKyAqIEFWWDItb3B0aW1pemVkIGJs b2NrIGNoZWNrc3VtIGFsZ29yaXRobS4KKyAqIFNhbWUgYWxnb3JpdGhtIGFzIGRlZmF1bHQsIGJ1 dCBjb21waWxlZCB3aXRoIEFWWDIgdGFyZ2V0IGZvciBhdXRvLXZlY3Rvcml6YXRpb24uCisgKi8K K3BnX2F0dHJpYnV0ZV90YXJnZXQoImF2eDIiKQorc3RhdGljIHVpbnQzMgorcGdfY2hlY2tzdW1f YmxvY2tfYXZ4Mihjb25zdCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKQoreworCXVpbnQzMgkJ c3Vtc1tOX1NVTVNdOworCXVpbnQzMgkJcmVzdWx0ID0gMDsKKwl1aW50MzIJCWksCisJCQkJajsK KworCS8qIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYWxnb3Jp dGhtICovCisJQXNzZXJ0KHNpemVvZihQR0NoZWNrc3VtbWFibGVQYWdlKSA9PSBCTENLU1opOwor CisJLyogaW5pdGlhbGl6ZSBwYXJ0aWFsIGNoZWNrc3VtcyB0byB0aGVpciBjb3JyZXNwb25kaW5n IG9mZnNldHMgKi8KKwltZW1jcHkoc3VtcywgY2hlY2tzdW1CYXNlT2Zmc2V0cywgc2l6ZW9mKGNo ZWNrc3VtQmFzZU9mZnNldHMpKTsKKworCS8qIG1haW4gY2hlY2tzdW0gY2FsY3VsYXRpb24gKi8K Kwlmb3IgKGkgPSAwOyBpIDwgKHVpbnQzMikgKEJMQ0tTWiAvIChzaXplb2YodWludDMyKSAqIE5f U1VNUykpOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBOX1NVTVM7IGorKykKKwkJCUNIRUNLU1VN X0NPTVAoc3Vtc1tqXSwgcGFnZS0+ZGF0YVtpXVtqXSk7CisKKwkvKiBmaW5hbGx5IGFkZCBpbiB0 d28gcm91bmRzIG9mIHplcm9lcyBmb3IgYWRkaXRpb25hbCBtaXhpbmcgKi8KKwlmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgTl9TVU1TOyBqKyspCisJCQlDSEVDS1NV TV9DT01QKHN1bXNbal0sIDApOworCisJLyogeG9yIGZvbGQgcGFydGlhbCBjaGVja3N1bXMgdG9n ZXRoZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTl9TVU1TOyBpKyspCisJCXJlc3VsdCBePSBzdW1z W2ldOworCisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisvKiBGdW5jdGlvbiBwb2ludGVy IC0gZXh0ZXJuYWwgbGlua2FnZSAqLworc3RhdGljIHVpbnQzMiAoKnBnX2NoZWNrc3VtX2Jsb2Nr KShjb25zdCBQR0NoZWNrc3VtbWFibGVQYWdlICpwYWdlKSA9IHBnX2NoZWNrc3VtX2Jsb2NrX2No b29zZTsKKworLyogQ2hvb3NlIHRoZSBiZXN0IGF2YWlsYWJsZSBjaGVja3N1bSBpbXBsZW1lbnRh dGlvbiAqLworc3RhdGljIHVpbnQzMgorcGdfY2hlY2tzdW1fYmxvY2tfY2hvb3NlKGNvbnN0IFBH Q2hlY2tzdW1tYWJsZVBhZ2UgKnBhZ2UpCit7CisjaWZkZWYgVVNFX0FWWDJfV0lUSF9SVU5USU1F X0NIRUNLCisJaWYgKGF2eDJfYXZhaWxhYmxlKCkpCisJeworCQlwZ19jaGVja3N1bV9ibG9jayA9 IHBnX2NoZWNrc3VtX2Jsb2NrX2F2eDI7CisJCXJldHVybiBwZ19jaGVja3N1bV9ibG9jayhwYWdl KTsKKwl9CisjZW5kaWYKKwkvKiBmYWxsYmFjayB0byBkZWZhdWx0IGltcGxlbWVudGF0aW9uICov CisJcGdfY2hlY2tzdW1fYmxvY2sgPSBwZ19jaGVja3N1bV9ibG9ja19kZWZhdWx0OworCXJldHVy biBwZ19jaGVja3N1bV9ibG9jayhwYWdlKTsKK30KKwogLyoKICAqIENvbXB1dGUgdGhlIGNoZWNr c3VtIGZvciBhIFBvc3RncmVzIHBhZ2UuCiAgKgotLSAKMi40My4wCgo= --0000000000004a02200641e2c8aa Content-Type: application/octet-stream; name="v8-0003-Benchmark-code-for-pg_checksum_bench-performance-tes.patch" Content-Disposition: attachment; filename="v8-0003-Benchmark-code-for-pg_checksum_bench-performance-tes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh4jun8a2 RnJvbSBkOGM5OGUwMTExZWFkZDFjZDY5ODQ2NWY2M2IzOWU3MWJjYzQ5OTg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2ltIDxhbmRyZXcua2ltQGludGVsLmNvbT4KRGF0 ZTogVGh1LCAyMyBPY3QgMjAyNSAxNjo1MzowMCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMS8xXSBC ZW5jaG1hcmsgY29kZSBmb3IgcGdfY2hlY2tzdW1fYmVuY2ggcGVyZm9ybWFuY2UgdGVzdGluZwoK VGhpcyBleHRlbnNpb24gcHJvdmlkZXMgYmVuY2htYXJraW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGFu ZCBjb21wYXJlCnRoZSBwZXJmb3JtYW5jZSBvZiBkaWZmZXJlbnQgY2hlY2tzdW0gaW1wbGVtZW50 YXRpb25zCi0tLQogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDEgKwogY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZCAgICAgICAgIHwg MjMgKysrKysrKysrKysrKwogLi4uL3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsICAgICAgICAg ICAgICAgIHwgIDggKysrKysKIGNvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1f YmVuY2guYyB8IDM0ICsrKysrKysrKysrKysrKysrKysKIC4uLi9wZ19jaGVja3N1bV9iZW5jaC5j b250cm9sICAgICAgICAgICAgICAgICB8ICA0ICsrKwogLi4uL3NxbC9wZ19jaGVja3N1bV9iZW5j aC5zcWwgICAgICAgICAgICAgICAgIHwgMTcgKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA4 NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jaGVja3N1bV9i ZW5jaC9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY2hlY2tzdW1f YmVuY2gvcGdfY2hlY2tzdW1fYmVuY2gtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3NxbC9wZ19jaGVj a3N1bV9iZW5jaC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL21lc29uLmJ1aWxkIGIvY29udHJp Yi9tZXNvbi5idWlsZAppbmRleCBlZDMwZWU3ZDYzOS4uZmU1MTQ5YWFkZmYgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9tZXNvbi5idWlsZApAQCAtMTIsNiAr MTIsNyBAQCBjb250cmliX2RvY19hcmdzID0gewogICAnaW5zdGFsbF9kaXInOiBjb250cmliX2Rv Y19kaXIsCiB9CiAKK3N1YmRpcigncGdfY2hlY2tzdW1fYmVuY2gnKQogc3ViZGlyKCdhbWNoZWNr JykKIHN1YmRpcignYXV0aF9kZWxheScpCiBzdWJkaXIoJ2F1dG9fZXhwbGFpbicpCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19j aGVja3N1bV9iZW5jaC9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMzJjY2Q5ZWZhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNr c3VtX2JlbmNoL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJpZ2h0IChjKSAy MDIyLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX2NoZWNr c3VtX2JlbmNoX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3BnX2NoZWNrc3VtX2JlbmNoLmMnLAorKQor CitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY2hlY2tzdW1fYmVuY2hfc291cmNl cyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAn LS1OQU1FJywgJ3BnX2NoZWNrc3VtX2JlbmNoJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19jaGVj a3N1bV9iZW5jaCcsXSkKK2VuZGlmCisKK3BnX2NoZWNrc3VtX2JlbmNoID0gc2hhcmVkX21vZHVs ZSgncGdfY2hlY2tzdW1fYmVuY2gnLAorICBwZ19jaGVja3N1bV9iZW5jaF9zb3VyY2VzLAorICBr d2FyZ3M6IGNvbnRyaWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfY2hlY2tz dW1fYmVuY2gKKworaW5zdGFsbF9kYXRhKAorICAncGdfY2hlY2tzdW1fYmVuY2gtLTEuMC5zcWwn LAorICAncGdfY2hlY2tzdW1fYmVuY2guY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRh X2FyZ3MsCispCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNoL3BnX2NoZWNr c3VtX2JlbmNoLS0xLjAuc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1 bV9iZW5jaC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NWYxM2NiZTNjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3VtX2JlbmNo L3BnX2NoZWNrc3VtX2JlbmNoLS0xLjAuc3FsCkBAIC0wLDAgKzEsOCBAQAorLyogY29udHJpYi9w Z19jaGVja3N1bV9iZW5jaC9wZ19jaGVja3N1bV9iZW5jaC0tMS4wLnNxbCAqLworCistLSBjb21w bGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRF IEVYVEVOU0lPTgorLS0gXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX2NoZWNrc3VtX2Jl bmNoIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRyaXZlX3Bn X2NoZWNrc3VtKHBhZ2VfY291bnQgaW50KQorCVJFVFVSTlMgcGdfY2F0YWxvZy52b2lkCisJQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY2hl Y2tzdW1fYmVuY2gvcGdfY2hlY2tzdW1fYmVuY2guYyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVu Y2gvcGdfY2hlY2tzdW1fYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZTViMTUwZTZiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNrc3Vt X2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgInBv c3RncmVzLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgInBvcnQvY2hlY2tzdW1faW1w bC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworUEdfTU9E VUxFX01BR0lDOworCisjZGVmaW5lIFJFUEVBVFMgMTAwMDAwMAorCitQR19GVU5DVElPTl9JTkZP X1YxKGRyaXZlX3BnX2NoZWNrc3VtKTsKK0RhdHVtCitkcml2ZV9wZ19jaGVja3N1bShQR19GVU5D VElPTl9BUkdTKQoreworCWludCBwYWdlX2NvdW50ID0gUEdfR0VUQVJHX0lOVDMyKDApOworCisJ UEdDaGVja3N1bW1hYmxlUGFnZSAqIHBhZ2VzID0gcGFsbG9jKHBhZ2VfY291bnQgKiBzaXplb2Yo UEdDaGVja3N1bW1hYmxlUGFnZSkpOworCXNyYW5kKDApOworCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgcGFnZV9jb3VudCAqIHNpemVvZihQR0NoZWNrc3VtbWFibGVQYWdlKTsgaSsrKXsKKwkJY2hh ciAqIGJ5dGVfcHRyID0gKGNoYXIgKikgcGFnZXM7CisJCWJ5dGVfcHRyW2ldID0gcmFuZCgpICUg MjU2OworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgUkVQRUFUUzsgaSsrKXsKKwkJY29uc3Qg UEdDaGVja3N1bW1hYmxlUGFnZSAqIHRlc3RfcGFnZSA9IHBhZ2VzICsgKGkgJSBwYWdlX2NvdW50 KTsKKwkJdm9sYXRpbGUgdWludDMyIHJlc3VsdCA9IHBnX2NoZWNrc3VtX2Jsb2NrKHRlc3RfcGFn ZSk7CisJCSh2b2lkKSByZXN1bHQ7CisJfQorCisJcGZyZWUoKHZvaWQgKikgcGFnZXMpOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVu Y2gvcGdfY2hlY2tzdW1fYmVuY2guY29udHJvbCBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gv cGdfY2hlY2tzdW1fYmVuY2guY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNGE0ZTJjOTM2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NoZWNr c3VtX2JlbmNoL3BnX2NoZWNrc3VtX2JlbmNoLmNvbnRyb2wKQEAgLTAsMCArMSw0IEBACitjb21t ZW50ID0gJ3BnX2NoZWNrc3VtIGJlbmNobWFyaycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCitt b2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jaGVja3N1bV9iZW5jaCcKK3JlbG9jYXRhYmxl ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9zcWwvcGdfY2hl Y2tzdW1fYmVuY2guc3FsIGIvY29udHJpYi9wZ19jaGVja3N1bV9iZW5jaC9zcWwvcGdfY2hlY2tz dW1fYmVuY2guc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YjM0 NzY5OTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY2hlY2tzdW1fYmVuY2gvc3Fs L3BnX2NoZWNrc3VtX2JlbmNoLnNxbApAQCAtMCwwICsxLDE3IEBACitDUkVBVEUgRVhURU5TSU9O IHBnX2NoZWNrc3VtX2JlbmNoOworCitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oLTEpOworCitc dGltaW5nIG9uCisKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxKTsKK1NFTEVDVCBkcml2ZV9w Z19jaGVja3N1bSgyKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSg0KTsKK1NFTEVDVCBkcml2 ZV9wZ19jaGVja3N1bSg4KTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxNik7CitTRUxFQ1Qg ZHJpdmVfcGdfY2hlY2tzdW0oMzIpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDY0KTsKK1NF TEVDVCBkcml2ZV9wZ19jaGVja3N1bSgxMjgpOworU0VMRUNUIGRyaXZlX3BnX2NoZWNrc3VtKDI1 Nik7CitTRUxFQ1QgZHJpdmVfcGdfY2hlY2tzdW0oNTEyKTsKK1NFTEVDVCBkcml2ZV9wZ19jaGVj a3N1bSgxMDI0KTsKLS0gCjIuNDMuMAoK --0000000000004a02200641e2c8aa--