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 1rxa0y-009ojn-5U for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Apr 2024 22:13:56 +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 1rxa0w-00Ayxz-P3 for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Apr 2024 22:13:54 +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 1rxa0w-00Ayxr-6h for pgsql-hackers@lists.postgresql.org; Thu, 18 Apr 2024 22:13:54 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rxa0s-003W9k-50 for pgsql-hackers@postgresql.org; Thu, 18 Apr 2024 22:13:52 +0000 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-a557044f2ddso135868066b.2 for ; Thu, 18 Apr 2024 15:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1713478428; x=1714083228; darn=postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=QHjtDEtt3uSns+PSiIoM9Fl+kRjjp5+pWoM/Vvstzjk=; b=Si3qd4Vs50WYV2TKxYmbBQp8/YJNUrg/VWM9K2NJCGdMRXgFhm20+RrEeyeW8Ujm4O WxWsAptwpamO5z6PC8Q1V5j6J4zOjtdt2x/qrGOaiNhuDvmNeffaVawVvv6Yr+7sKiJn 7gKJ7RyJVdPOWyAKqbPIlMYgREvqdP54311ramTuOevx/wo8Wd6U4BbmtTN7AG3T4iBK ebCeHUqQAWULAen7PHvPeHn7iX4ONmg2e5i6nS2PAM0CjCredHk0vLWbBbi9V6J+74Iu CVHdiPyJhlOIhiE+rZqkpf/OD6Bmu4pMZQjGIG+WupR2wvTXdEwLr3Js0sWXEYWCbmPw DWXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713478428; x=1714083228; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QHjtDEtt3uSns+PSiIoM9Fl+kRjjp5+pWoM/Vvstzjk=; b=NSuelqMisgOrCpwHdv1OMOpGaXYIKJy+vZtwU3aQMiec6TSvEiYaeVXO+ui5dsZJCy 9BUuZNiKKvaipGUoYOrGXlxkEGd7k2vVCIkTdlyLnNG9TCFjChS9cBEsvy9tBvBHvdDB vmq15MH1Vr+eJS3IQOdeEZRJcZH4VGt6W4XdtICxaskZjLFz/Cz5XdukkOJlfUWMcJQv tV471MqDQH8cEgZDPmDVMfHFN4tRbE6Npl6JZeAs6Ej4uOHKnKTdKlkIYR394DDdjfJe Z0sCq3PyBG6jEKIRxrLn8GrWHch7o6Cv+mtr2ZRC7X/frAWutXAgVwShXj7+uJjt77og Hkeg== X-Forwarded-Encrypted: i=1; AJvYcCWvQF9ryVMTRiEJqnTMOt59nksMJHhiZ/gmeIeLLc4M90NS1YVVgEtSQnLld9Cp9u2x/3fPf4g/kguoj9WoJsG27R8C7itzErEcKWe8 X-Gm-Message-State: AOJu0YzTTgbC7oM2O0tRuJMFVohwjwdHilKZjgY9JZDBcBeMiFf8PL+u LQSUVgZML2cmouP2vCEip1uOvDtqicYriUGzRkMyhXlFuOgHqW50K9TOb83Omg== X-Google-Smtp-Source: AGHT+IEyMR7hlLgRg/6iwr2vckVNj2krBCV+QTfyY9+OLa9Rusu1OXSQIcq7fckfAViYUy/ddf8k7A== X-Received: by 2002:a17:906:615:b0:a52:3623:f498 with SMTP id s21-20020a170906061500b00a523623f498mr264959ejb.31.1713478428368; Thu, 18 Apr 2024 15:13:48 -0700 (PDT) Received: from [10.137.0.18] (ip-86-49-229-30.bb.vodafone.cz. [86.49.229.30]) by smtp.gmail.com with ESMTPSA id wp9-20020a170907060900b00a55759ee502sm1102682ejb.179.2024.04.18.15.13.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 18 Apr 2024 15:13:47 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------P0B3CqQ0ez7Wor5mCjwOr7PW" Message-ID: <7ea7a161-b28a-4c68-8241-ac513d5e0569@enterprisedb.com> Date: Fri, 19 Apr 2024 00:13:46 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: brininsert optimization opportunity From: Tomas Vondra To: Michael Paquier , Alvaro Herrera Cc: Alexander Lakhin , Soumyadeep Chakraborty , Matthias van de Meent , pgsql-hackers , Ashwin Agrawal References: <202402291220.gmjxa5wohzsh@alvherre.pgsql> <14e52b46-a802-4035-b33a-627968e14375@enterprisedb.com> Content-Language: en-US In-Reply-To: <14e52b46-a802-4035-b33a-627968e14375@enterprisedb.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------P0B3CqQ0ez7Wor5mCjwOr7PW Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's two patched to deal with this open item. 0001 is a trivial fix of typos and wording, I moved it into a separate commit for clarity. 0002 does the actual fix - adding the index_insert_cleanup(). It's 99% the patch Alvaro shared some time ago, with only some minor formatting tweaks by me. I've also returned to this Alvaro's comment: > Lastly, I kinda disagree with the notion that only some of the callers > of aminsert should call aminsertcleanup, even though btree doesn't > have an aminsertcleanup and thus it can't affect TOAST or catalogs. which was a reaction to my earlier statement about places calling index_insert(): > There's a call in toast_internals.c, but that seems OK because that > only deals with btree indexes (and those don't need any cleanup). The > same logic applies to unique_key_recheck(). The rest goes through > execIndexing.c, which should do the cleanup in ExecCloseIndices(). I think Alvaro is right, so I went through all index_insert() callers and checked which need the cleanup. Luckily there's not that many of them, only 5 in total call index_insert() directly: 1) toast_save_datum (src/backend/access/common/toast_internals.c) This is safe, because the index_insert() passes indexInfo=NULL, so there can't possibly be any cache. If we ever decide to pass a valid indexInfo, we can add the cleanup, now it seems pointless. Note: If someone created a BRIN index on a TOAST table, that'd already crash, because BRIN blindly dereferences the indexInfo. Maybe that should be fixed, but we don't support CREATE INDEX on TOAST tables. 2) heapam_index_validate_scan (src/backend/access/heap/heapam_handler.c) Covered by the committed fix, adding cleanup to validate_index. 3) CatalogIndexInsert (src/backend/catalog/indexing.c) Covered by all callers also calling CatalogCloseIndexes, which in turn calls ExecCloseIndices and cleanup. 4) unique_key_recheck (src/backend/commands/constraint.c) This seems like the only place missing the cleanup call. 5) ExecInsertIndexTuples (src/backend/executor/execIndexing.c) Should be covered by ExecCloseIndices, called after the insertions. So it seems only (4) unique_key_recheck needs the extra call (it can't really happen higher because the indexInfo is a local variable). So the 0002 patch adds the call. The patch also adds a test for this (or rather tweaks an existing one). It's a bit too late for me to push this now, I'll do so early tomorrow. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------P0B3CqQ0ez7Wor5mCjwOr7PW Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-a-couple-typos-in-BRIN-code.patch" Content-Disposition: attachment; filename="0001-Fix-a-couple-typos-in-BRIN-code.patch" Content-Transfer-Encoding: base64 RnJvbSAwZjg5Njc3Yjk5YjRiNzBkZGZjYzZjMmNkMDhmNDMzNTg0YmY2NWFhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxOCBBcHIgMjAyNCAyMjoyMjozNyArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBGaXggYSBjb3VwbGUgdHlwb3MgaW4gQlJJTiBjb2RlCgpUeXBv cyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdHMgYzFlYzAyYmUxZDc5LCBiNDM3NTcxNzE0NzAgYW5k IGRhZTc2MWE4N2VkYS4KCkF1dGhvcjogQWx2YXJvIEhlcnJlcmEKUmVwb3J0ZWQtYnk6IEFs ZXhhbmRlciBMYWtoaW4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDI0MDEw OTEwNDMuZTNucnFpYWQ2Z2I3QGFsdmhlcnJlLnBnc3FsCi0tLQogZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbCAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YyB8IDEwICsrKysrLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDc2YWMwZmNkZGQ3Li4xOGNmMjMy OTZmMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0zNzAsNyArMzcwLDcgQEAgYW1pbnNlcnQgKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICBpbml0aWFsbHkpLiBBZnRlciB0aGUgaW5kZXgg aW5zZXJ0aW9ucyBjb21wbGV0ZSwgdGhlIG1lbW9yeSB3aWxsIGJlIGZyZWVkCiAgICBhdXRv bWF0aWNhbGx5LiBJZiBhZGRpdGlvbmFsIGNsZWFudXAgaXMgcmVxdWlyZWQgKGUuZy4gaWYg dGhlIGNhY2hlIGNvbnRhaW5zCiAgICBidWZmZXJzIGFuZCB0dXBsZSBkZXNjcmlwdG9ycyks IHRoZSBBTSBtYXkgZGVmaW5lIGFuIG9wdGlvbmFsIGZ1bmN0aW9uCi0gICA8bGl0ZXJhbD5p bmRleGluc2VydGNsZWFudXA8L2xpdGVyYWw+LCBjYWxsZWQgYmVmb3JlIHRoZSBtZW1vcnkg aXMgcmVsZWFzZWQuCisgICA8bGl0ZXJhbD5hbWluc2VydGNsZWFudXA8L2xpdGVyYWw+LCBj YWxsZWQgYmVmb3JlIHRoZSBtZW1vcnkgaXMgcmVsZWFzZWQuCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCAzMjcyMmYwOTYxYi4uNGY3MDhi YmE2NTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTIyMiw3ICsyMjIsNyBAQCBz dGF0aWMgYm9vbCBhZGRfdmFsdWVzX3RvX3JhbmdlKFJlbGF0aW9uIGlkeFJlbCwgQnJpbkRl c2MgKmJkZXNjLAogCQkJCQkJCQlCcmluTWVtVHVwbGUgKmR0dXAsIGNvbnN0IERhdHVtICp2 YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzKTsKIHN0YXRpYyBib29sIGNoZWNrX251bGxfa2V5 cyhCcmluVmFsdWVzICpidmFsLCBTY2FuS2V5ICpudWxsa2V5cywgaW50IG5udWxsa2V5cyk7 CiBzdGF0aWMgdm9pZCBicmluX2ZpbGxfZW1wdHlfcmFuZ2VzKEJyaW5CdWlsZFN0YXRlICpz dGF0ZSwKLQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgcHJldlJhbmdlLCBCbG9ja051bWJlciBt YXhSYW5nZSk7CisJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIHByZXZSYW5nZSwgQmxvY2tOdW1i ZXIgbmV4dFJhbmdlKTsKIAogLyogcGFyYWxsZWwgaW5kZXggYnVpbGRzICovCiBzdGF0aWMg dm9pZCBfYnJpbl9iZWdpbl9wYXJhbGxlbChCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwg UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCkBAIC0xMTUxLDggKzExNTEsOCBAQCBi cmluYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5k ZXhJbmZvKQogCSAqCiAJICogWFhYIHBsYW5fY3JlYXRlX2luZGV4X3dvcmtlcnMgbWFrZXMg dGhlIG51bWJlciBvZiB3b3JrZXJzIGRlcGVuZGVudCBvbgogCSAqIG1haW50ZW5hbmNlX3dv cmtfbWVtLCByZXF1aXJpbmcgMzJNQiBmb3IgZWFjaCB3b3JrZXIuIFRoYXQgbWFrZXMgc2Vu c2UKLQkgKiBmb3IgYnRyZWUsIGJ1dCBub3QgZm9yIEJSSU4sIHdoaWNoIGNhbiBkbyBhd2F5 IHdpdGggbXVjaCBsZXNzIG1lbW9yeS4KLQkgKiBTbyBtYXliZSBtYWtlIHRoYXQgc29tZWhv dyBsZXNzIHN0cmljdCwgb3B0aW9uYWxseT8KKwkgKiBmb3IgYnRyZWUsIGJ1dCBub3QgZm9y IEJSSU4sIHdoaWNoIGNhbiBkbyB3aXRoIG11Y2ggbGVzcyBtZW1vcnkuIFNvCisJICogbWF5 YmUgbWFrZSB0aGF0IHNvbWVob3cgbGVzcyBzdHJpY3QsIG9wdGlvbmFsbHk/CiAJICovCiAJ aWYgKGluZGV4SW5mby0+aWlfUGFyYWxsZWxXb3JrZXJzID4gMCkKIAkJX2JyaW5fYmVnaW5f cGFyYWxsZWwoc3RhdGUsIGhlYXAsIGluZGV4LCBpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQs CkBAIC0yNjIxLDcgKzI2MjEsNyBAQCBfYnJpbl9wYXJhbGxlbF9tZXJnZShCcmluQnVpbGRT dGF0ZSAqc3RhdGUpCiAKIAkvKgogCSAqIEluaXRpYWxpemUgQnJpbk1lbVR1cGxlIHdlJ2xs IHVzZSB0byB1bmlvbiBzdW1tYXJpZXMgZnJvbSB3b3JrZXJzIChpbgotCSAqIGNhc2UgdGhl eSBoYXBwZW5lZCB0byBwcm9kdWNlIHBhcnRzIG9mIHRoZSBzYW1lIHBhZ2EgcmFuZ2UpLgor CSAqIGNhc2UgdGhleSBoYXBwZW5lZCB0byBwcm9kdWNlIHBhcnRzIG9mIHRoZSBzYW1lIHBh Z2UgcmFuZ2UpLgogCSAqLwogCW1lbXR1cGxlID0gYnJpbl9uZXdfbWVtdHVwbGUoc3RhdGUt PmJzX2JkZXNjKTsKIApAQCAtMjkzMiw3ICsyOTMyLDcgQEAgX2JyaW5fcGFyYWxsZWxfYnVp bGRfbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCiAgKiBzcGVjaWZpZWQg YmxvY2sgbnVtYmVyLiBUaGUgZW1wdHkgdHVwbGUgaXMgaW5pdGlhbGl6ZWQgb25seSBvbmNl LCB3aGVuIGl0J3MKICAqIG5lZWRlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHN0b3JlZCBpbiB0 aGUgbWVtb3J5IGNvbnRleHQgYnNfY29udGV4dCB0byBlbnN1cmUKICAqIHByb3BlciBsaWZl IHNwYW4sIGFuZCByZXVzZWQgb24gZm9sbG93aW5nIGNhbGxzLiBBbGwgZW1wdHkgdHVwbGVz IGFyZQotICogZXhhY3RseSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBic19ibGtubyBmaWVs ZCwgd2hpY2ggaXMgc2V0IHRvIHRoZSB2YWx1ZQorICogZXhhY3RseSB0aGUgc2FtZSBleGNl cHQgZm9yIHRoZSBidF9ibGtubyBmaWVsZCwgd2hpY2ggaXMgc2V0IHRvIHRoZSB2YWx1ZQog ICogaW4gYmxrbm8gcGFyYW1ldGVyLgogICovCiBzdGF0aWMgdm9pZAotLSAKMi40NC4wCgo= --------------P0B3CqQ0ez7Wor5mCjwOr7PW Content-Type: text/x-patch; charset=UTF-8; name="0002-Add-index_insert_cleanup-call-to-validate_index.patch" Content-Disposition: attachment; filename*0="0002-Add-index_insert_cleanup-call-to-validate_index.patch" Content-Transfer-Encoding: base64 RnJvbSBiOWY5M2YwNWZiMDA2MDEzNWVkZGI3ZjY4Zjc1NDc5M2Q2MWZlMDhiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxOCBBcHIgMjAyNCAyMzo1ODozMCArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSBBZGQgaW5kZXhfaW5zZXJ0X2NsZWFudXAgY2FsbCB0byB2YWxp ZGF0ZV9pbmRleAoKVGhlIG9wdGltaXphdGlvbiBmb3IgaW5zZXJ0cyBpbnRvIEJSSU4gaW5k ZXhlcyBhZGRlZCBieSBjb21taXQKYzFlYzAyYmUxZDc5IHJlbGllcyBvbiBhIGNhY2hlIHRo YXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSByZWxlYXNlZAphZnRlciBjYWxsaW5nIGluZGV4 X2luc2VydCgpLiBUaGUgY29tbWl0IGhvd2V2ZXIgZmFpbGVkIHRvIGNhbGwgdGhlCmNsZWFu dXAgaW4gdmFsaWRhdGVfaW5kZXgoKSwgYXMgaXQgY2FsbHMgaW5kZXhfaW5zZXJ0KCkgaW5k aXJlY3RseQp0aHJvdWdoIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oKS4KCkZpeGVkIGJ5 IGFkZGluZyB0aGUgbWlzc2luZyBjYWxsIHRvIHZhbGlkYXRlX2luZGV4KCksIGFuZCBhbHNv IHRvCnVuaXF1ZV9rZXlfcmVjaGVjaygpLgoKVGhlIGNvbW1pdCBkb2VzIHR3byBhZGRpdGlv bmFsIGltcHJvdmVtZW50cy4gSXQgYWRkcyB0aGUgaW5kZXggYXMgdGhlCmZpcnN0IGFyZ3Vt ZW50cyB0byBhbWluc2VydGNsZWFudXAoKSwgdG8gbWFrZSBpdCBtb3JlIGxpa2UgdGhlIG90 aGVyIEFNCmNhbGxiYWNrcy4gQW5kIGl0IGNhbGxzIHRoZSBhbWluc2VydGNsZWFudXAoKSBh bHdheXMsIGV2ZW4gaWYgdGhlCmlpX0FtQ2FjaGUgaXMgTlVMTCAtIHRoaXMgbWVhbnMgaXQn cyB1cCB0byB0aGUgQU0gY2FsbGJhY2sgdG8gZGVjaWRlIGlmCmNsZWFudXAgaXMgbmVlZGVk LgoKQXV0aG9yOiBBbHZhcm8gSGVycmVyYSwgVG9tYXMgVm9uZHJhClJlcG9ydGVkLWJ5OiBB bGV4YW5kZXIgTGFraGluCi0tLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAg ICB8IDE0ICsrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMg ICAgIHwgIDYgKysrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIHwg IDUgKystLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgfCAgMyArKysK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0cmFpbnQuYyAgfCAgMiArKwogc3JjL2luY2x1 ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICB8ICAzICsrLQogc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW5faW50ZXJuYWwuaCB8ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Jy aW4ub3V0IHwgIDMgKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9icmluLnNxbCAgICAgIHwg IDMgKystCiA5IGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDE4Y2YyMzI5NmYyLi5lM2MxNTM5YTFlMyAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sCkBAIC0zNjcsMjEgKzM2NywyMSBAQCBhbWluc2VydCAoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKICAgIHdpdGhpbiBhbiBTUUwgc3RhdGVtZW50LCBpdCBjYW4gYWxs b2NhdGUgc3BhY2UKICAgIGluIDxsaXRlcmFsPmluZGV4SW5mby0mZ3Q7aWlfQ29udGV4dDwv bGl0ZXJhbD4gYW5kIHN0b3JlIGEgcG9pbnRlciB0byB0aGUKICAgIGRhdGEgaW4gPGxpdGVy YWw+aW5kZXhJbmZvLSZndDtpaV9BbUNhY2hlPC9saXRlcmFsPiAod2hpY2ggd2lsbCBiZSBO VUxMCi0gICBpbml0aWFsbHkpLiBBZnRlciB0aGUgaW5kZXggaW5zZXJ0aW9ucyBjb21wbGV0 ZSwgdGhlIG1lbW9yeSB3aWxsIGJlIGZyZWVkCi0gICBhdXRvbWF0aWNhbGx5LiBJZiBhZGRp dGlvbmFsIGNsZWFudXAgaXMgcmVxdWlyZWQgKGUuZy4gaWYgdGhlIGNhY2hlIGNvbnRhaW5z Ci0gICBidWZmZXJzIGFuZCB0dXBsZSBkZXNjcmlwdG9ycyksIHRoZSBBTSBtYXkgZGVmaW5l IGFuIG9wdGlvbmFsIGZ1bmN0aW9uCi0gICA8bGl0ZXJhbD5hbWluc2VydGNsZWFudXA8L2xp dGVyYWw+LCBjYWxsZWQgYmVmb3JlIHRoZSBtZW1vcnkgaXMgcmVsZWFzZWQuCisgICBpbml0 aWFsbHkpLiAgSWYgcmVzb3VyY2VzIG90aGVyIHRoYW4gbWVtb3J5IGhhdmUgdG8gYmUgcmVs ZWFzZWQgYWZ0ZXIKKyAgIGluZGV4IGluc2VydGlvbnMsIDxmdW5jdGlvbj5hbWluc2VydGNs ZWFudXA8L2Z1bmN0aW9uPiBtYXkgYmUgcHJvdmlkZWQsCisgICB3aGljaCB3aWxsIGJlIGNh bGxlZCBiZWZvcmUgdGhlIG1lbW9yeSBpcyByZWxlYXNlZC4KICAgPC9wYXJhPgogCiAgIDxw YXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZAotYW1pbnNlcnRjbGVhbnVwIChJbmRleElu Zm8gKmluZGV4SW5mbyk7CithbWluc2VydGNsZWFudXAgKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCisgICAgICAgICAgICAgICAgIEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKIDwvcHJvZ3Jh bWxpc3Rpbmc+CiAgICBDbGVhbiB1cCBzdGF0ZSB0aGF0IHdhcyBtYWludGFpbmVkIGFjcm9z cyBzdWNjZXNzaXZlIGluc2VydHMgaW4KICAgIDxsaXRlcmFsPmluZGV4SW5mby0mZ3Q7aWlf QW1DYWNoZTwvbGl0ZXJhbD4uIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBkYXRhCi0gICByZXF1 aXJlcyBhZGRpdGlvbmFsIGNsZWFudXAgc3RlcHMsIGFuZCBzaW1wbHkgcmVsZWFzaW5nIHRo ZSBtZW1vcnkgaXMgbm90Ci0gICBzdWZmaWNpZW50LgorICAgcmVxdWlyZXMgYWRkaXRpb25h bCBjbGVhbnVwIHN0ZXBzIChlLmcuLCByZWxlYXNpbmcgcGlubmVkIGJ1ZmZlcnMpLCBhbmQK KyAgIHNpbXBseSByZWxlYXNpbmcgdGhlIG1lbW9yeSBpcyBub3Qgc3VmZmljaWVudC4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDRmNzA4 YmJhNjU4Li5iZjI4NDAwZGQ4NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtNTAw LDExICs1MDAsMTMgQEAgYnJpbmluc2VydChSZWxhdGlvbiBpZHhSZWwsIERhdHVtICp2YWx1 ZXMsIGJvb2wgKm51bGxzLAogICogQ2FsbGJhY2sgdG8gY2xlYW4gdXAgdGhlIEJyaW5JbnNl cnRTdGF0ZSBvbmNlIGFsbCB0dXBsZSBpbnNlcnRzIGFyZSBkb25lLgogICovCiB2b2lkCi1i cmluaW5zZXJ0Y2xlYW51cChJbmRleEluZm8gKmluZGV4SW5mbykKK2JyaW5pbnNlcnRjbGVh bnVwKFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5mbykKIHsKIAlCcmluSW5z ZXJ0U3RhdGUgKmJpc3RhdGUgPSAoQnJpbkluc2VydFN0YXRlICopIGluZGV4SW5mby0+aWlf QW1DYWNoZTsKIAotCUFzc2VydChiaXN0YXRlKTsKKwkvKiBiYWlsIG91dCBpZiBjYWNoZSBu b3QgaW5pdGlhbGl6ZWQgKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9BbUNhY2hlID09IE5VTEwp CisJCXJldHVybjsKIAogCS8qCiAJICogQ2xlYW4gdXAgdGhlIHJldm1hcC4gTm90ZSB0aGF0 IHRoZSBicmluRGVzYyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQgdXAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDc1MTAxNTlmYzhkLi5kY2QwNGI4MTNkOCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0yNDIsMTAgKzI0Miw5IEBAIGlu ZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCSBJbmRl eEluZm8gKmluZGV4SW5mbykKIHsKIAlSRUxBVElPTl9DSEVDS1M7Ci0JQXNzZXJ0KGluZGV4 SW5mbyk7CiAKLQlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtaW5zZXJ0Y2xlYW51 cCAmJiBpbmRleEluZm8tPmlpX0FtQ2FjaGUpCi0JCWluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWluc2VydGNsZWFudXAoaW5kZXhJbmZvKTsKKwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtaW5zZXJ0Y2xlYW51cCkKKwkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt aW5zZXJ0Y2xlYW51cChpbmRleFJlbGF0aW9uLCBpbmRleEluZm8pOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCmluZGV4IDliN2VmNzFkNmZlLi41YTg1NjhjNTVjOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYwpAQCAtMzQwMiw2ICszNDAyLDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhl YXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCS8qIERvbmUgd2l0aCB0 dXBsZXNvcnQgb2JqZWN0ICovCiAJdHVwbGVzb3J0X2VuZChzdGF0ZS50dXBsZXNvcnQpOwog CisJLyogTWFrZSBzdXJlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGNhY2hlZCBpbiBpbmRleElu Zm8gKGlmIG5lZWRlZCkuICovCisJaW5kZXhfaW5zZXJ0X2NsZWFudXAoaW5kZXhSZWxhdGlv biwgaW5kZXhJbmZvKTsKKwogCWVsb2coREVCVUcyLAogCQkgInZhbGlkYXRlX2luZGV4IGZv dW5kICUuMGYgaGVhcCB0dXBsZXMsICUuMGYgaW5kZXggdHVwbGVzOyBpbnNlcnRlZCAlLjBm IG1pc3NpbmcgdHVwbGVzIiwKIAkJIHN0YXRlLmh0dXBzLCBzdGF0ZS5pdHVwcywgc3RhdGUu dHVwc19pbnNlcnRlZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25z dHJhaW50LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKaW5kZXggOTRk NDkxYjc1NDEuLjAwODgwNDQ2YzQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5j CkBAIC0xOTcsNiArMTk3LDggQEAgdW5pcXVlX2tleV9yZWNoZWNrKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCisJaW5kZXhf aW5zZXJ0X2NsZWFudXAoaW5kZXhSZWwsIGluZGV4SW5mbyk7CisKIAlpbmRleF9jbG9zZShp bmRleFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCAwMDMwMGRkNzIwZS4uZjI1YzlkNThhN2Qg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xMTQsNyArMTE0LDggQEAgdHlwZWRlZiBib29sICgq YW1pbnNlcnRfZnVuY3Rpb24pIChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQkJCQkJCQkg ICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogCiAvKiBjbGVhbnVwIGFmdGVyIGlu c2VydCAqLwotdHlwZWRlZiB2b2lkICgqYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uKSAoc3Ry dWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKmFtaW5zZXJ0Y2xl YW51cF9mdW5jdGlvbikgKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkJICBz dHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwogCiAvKiBidWxrIGRlbGV0ZSAqLwogdHlw ZWRlZiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKigqYW1idWxrZGVsZXRlX2Z1bmN0aW9uKSAo SW5kZXhWYWN1dW1JbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2JyaW5faW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluX2ludGVybmFsLmgK aW5kZXggMWM3ZWFiZTYwNDEuLmE1YTk3NzI2MjFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvYnJpbl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmlu X2ludGVybmFsLmgKQEAgLTk2LDcgKzk2LDcgQEAgZXh0ZXJuIGJvb2wgYnJpbmluc2VydChS ZWxhdGlvbiBpZHhSZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLAogCQkJCQkgICBJ bmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAogCQkJCQkgICBib29sIGluZGV4VW5jaGFu Z2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pOwotZXh0ZXJuIHZv aWQgYnJpbmluc2VydGNsZWFudXAoc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4 dGVybiB2b2lkIGJyaW5pbnNlcnRjbGVhbnVwKFJlbGF0aW9uIGluZGV4LCBzdHJ1Y3QgSW5k ZXhJbmZvICppbmRleEluZm8pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnJpbmJlZ2luc2Nh bihSZWxhdGlvbiByLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIGludDY0 IGJyaW5nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBl eHRlcm4gdm9pZCBicmlucmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fu a2V5LCBpbnQgbnNjYW5rZXlzLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9icmluLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnJpbi5vdXQKaW5k ZXggMjY2MmJiNmVkNDMuLmQ2Nzc5ZDhjN2QyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2JyaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YnJpbi5vdXQKQEAgLTU3NSw2ICs1NzUsNyBAQCBEUk9QIFRBQkxFIGJyaW50ZXN0X3VubG9n Z2VkOwogLS0gdGVzdCB0aGF0IHRoZSBpbnNlcnQgb3B0aW1pemF0aW9uIHdvcmtzIGlmIG5v IHJvd3MgZW5kIHVwIGluc2VydGVkCiBDUkVBVEUgVEFCTEUgYnJpbl9pbnNlcnRfb3B0aW1p emF0aW9uIChhIGludCk7CiBJTlNFUlQgSU5UTyBicmluX2luc2VydF9vcHRpbWl6YXRpb24g VkFMVUVTICgxKTsKLUNSRUFURSBJTkRFWCBPTiBicmluX2luc2VydF9vcHRpbWl6YXRpb24g VVNJTkcgYnJpbiAoYSk7CitDUkVBVEUgSU5ERVggYnJpbl9pbnNlcnRfb3B0aW1pemF0aW9u X2lkeCBPTiBicmluX2luc2VydF9vcHRpbWl6YXRpb24gVVNJTkcgYnJpbiAoYSk7CiBVUERB VEUgYnJpbl9pbnNlcnRfb3B0aW1pemF0aW9uIFNFVCBhID0gYTsKK1JFSU5ERVggSU5ERVgg Q09OQ1VSUkVOVExZIGJyaW5faW5zZXJ0X29wdGltaXphdGlvbl9pZHg7CiBEUk9QIFRBQkxF IGJyaW5faW5zZXJ0X29wdGltaXphdGlvbjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2JyaW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnJpbi5zcWwKaW5kZXgg MGQzYmVhYmIzZDcuLjY5NWNmYWQ0YmVhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9icmluLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9icmluLnNxbApAQCAt NTE5LDYgKzUxOSw3IEBAIERST1AgVEFCTEUgYnJpbnRlc3RfdW5sb2dnZWQ7CiAtLSB0ZXN0 IHRoYXQgdGhlIGluc2VydCBvcHRpbWl6YXRpb24gd29ya3MgaWYgbm8gcm93cyBlbmQgdXAg aW5zZXJ0ZWQKIENSRUFURSBUQUJMRSBicmluX2luc2VydF9vcHRpbWl6YXRpb24gKGEgaW50 KTsKIElOU0VSVCBJTlRPIGJyaW5faW5zZXJ0X29wdGltaXphdGlvbiBWQUxVRVMgKDEpOwot Q1JFQVRFIElOREVYIE9OIGJyaW5faW5zZXJ0X29wdGltaXphdGlvbiBVU0lORyBicmluIChh KTsKK0NSRUFURSBJTkRFWCBicmluX2luc2VydF9vcHRpbWl6YXRpb25faWR4IE9OIGJyaW5f aW5zZXJ0X29wdGltaXphdGlvbiBVU0lORyBicmluIChhKTsKIFVQREFURSBicmluX2luc2Vy dF9vcHRpbWl6YXRpb24gU0VUIGEgPSBhOworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkg YnJpbl9pbnNlcnRfb3B0aW1pemF0aW9uX2lkeDsKIERST1AgVEFCTEUgYnJpbl9pbnNlcnRf b3B0aW1pemF0aW9uOwotLSAKMi40NC4wCgo= --------------P0B3CqQ0ez7Wor5mCjwOr7PW--