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 1uPxvT-001ekb-Os for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Jun 2025 06:30:07 +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 1uPxvQ-001Vuh-6x for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Jun 2025 06:30:04 +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 1uPxvP-001VuZ-S8 for pgsql-hackers@lists.postgresql.org; Fri, 13 Jun 2025 06:30:04 +0000 Received: from mail-vs1-xe32.google.com ([2607:f8b0:4864:20::e32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uPxvO-001mAP-0F for pgsql-hackers@lists.postgresql.org; Fri, 13 Jun 2025 06:30:04 +0000 Received: by mail-vs1-xe32.google.com with SMTP id ada2fe7eead31-4c4fa0bfca2so520347137.0 for ; Thu, 12 Jun 2025 23:30:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749796200; x=1750401000; 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=9a7oTCFMvDPWV1K6+RCoD9Y2seswBOBpffg7oCSu4YQ=; b=fnwIDofp7UXubaxlUPRqqqwsH+7jecs2v8U2pkKQsuZ2utDAvl0yn2DHVZnbMHNljC PG1zUpE7wR/pc4aaJrQ2Ba6MGm0QL08m3xxkBMaBGF2NlG68qqOdFn3zD69T/8rc3CKn XiGuE0XVwyPd1OmClSo6HC/+cd7an7gAujrhend5xl2gk7+ZcsmSBCcbsVAzMSfbpdR4 7xIgxsx627CIJ+0CIFnuBRFaDhiAhI6eWfXfiVB02KYZviEwGa6esi7x2dnYuKBmJGmU sxbfLPXM0PiQQVThdlQBFqcuCO4tSgSDu1H6TfWJUADafYnab8UaRgm0VMDbCx/soDnL Fqig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749796200; x=1750401000; 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=9a7oTCFMvDPWV1K6+RCoD9Y2seswBOBpffg7oCSu4YQ=; b=uzvf6k16/GBP+mgagWte+exhVjtmMKQ9Zh42hfRZczXP3AHxHT0rxPaLfF8ujea0Zu Q14dQXvDQRzqm2UF0L4fcqh98rZOIxyAmxOK9DPIUaGkybqyhIGnVnKNhQja4IsX6Dxk a95jBDeQ1mHExLKiUnk8UI1scncL53AlFf0twCSJ3h4gOC4CUf8339Cj9rLcjUEe0bgL Lj8mfm5Wg9x+YtaqwolTc6FUnI58buNLqCvl8tK89Od2g/5VokIFbPj/75OFQcfZKT4d ZiTSox14KjJ6TMdM9f3GkaDcnJN2BWYAFQMZiHPKy+EzMzxwXRoaOlQmwL5h3AMxjarj gcqg== X-Gm-Message-State: AOJu0YxpTPsvI078WYqA0uRPRYwDeeCcO8nrjnao+BwBg5B/KPw3qnLZ A7RZFgWPWaLppjNLR8vQ5fXQaBt8+pNhkQcHZQNeAVhmQMDzXcuBHKXrTvRWHopjJBMvP7/Ucfx 014J1+AVG4+oYyEkKlRVxWYxOyM0KcYHS+IdrDBVDCw== X-Gm-Gg: ASbGnctHjA83fPWF9cC7atlJOQVCTvR+A9+x4W4k0YIqsKvZUDwrjxpNQ6bBXhZXtYY IYgKTuMfF3f2+G9KV+HWPAoaoqjjwXiT5vDxPA+EzQiTJRcWkP9OS5zq8QVUUw62SKUCpmNagQe 43jKHe8h0pX3A0vpcsBepNAcJJSRDonvlhcXzGx43ejOdPa6oVQJGA17a9q6ON+pn6YmJnNfa4c 5IgrCeeDgHrQg== X-Google-Smtp-Source: AGHT+IFgzrlp9kMnGkFprGaF1U0NICAf5Vvw1ZPlUk1rO1FNKaQjnpDsNIf1s8NvksHErFpD4hIk3CLcqyY3397UaFk= X-Received: by 2002:a05:6102:3ed4:b0:4c5:1c2e:79f5 with SMTP id ada2fe7eead31-4e7e3bf8147mr1163184137.16.1749796200296; Thu, 12 Jun 2025 23:30:00 -0700 (PDT) MIME-Version: 1.0 References: <171085360143.2046436.7217841141682511557.pgcf@coridan.postgresql.org> <7fdaf3e8-4c05-4739-bee6-98acc068d1c7@postgrespro.ru> <4433b492-9e97-4334-96d9-ddaaa5083099@postgrespro.ru> <67ecf5fb-e63d-4284-be75-d0479eef81aa@postgrespro.ru> <884bcf9e-d6e3-4b0c-8dcb-7f2110070ac9@postgrespro.ru> <1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru> <9c1b75f1-5c40-4a86-9a61-a4b3f1d7ec60@postgrespro.ru> In-Reply-To: <9c1b75f1-5c40-4a86-9a61-a4b3f1d7ec60@postgrespro.ru> From: jian he Date: Fri, 13 Jun 2025 14:29:23 +0800 X-Gm-Features: AX0GCFvQEMaw00U2wTW4CO8v7r2SpYXLuwOyDp4KRmTnJ36Gp0c0TSRKg0xyeT0 Message-ID: Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands To: Dmitry Koval Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000f2f82e06376e2c0e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f2f82e06376e2c0e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jun 13, 2025 at 4:36=E2=80=AFAM Dmitry Koval wrote: > > Hi, Jian He! > > Thanks for the notes and patches (again). > I read a part of emails, I hope to read the rest emails tomorrow. > hi. in doc/src/sgml/ref/alter_table.sgml Parameters section, we also need explain partition_name1 and partition_name2 ? + + This form merges several partitions into the one partition of the target table. + Hash-partitioning is not supported. maybe we can change to + + This form merges several partitions of the target table into a new one partition. + Hash-partitioned target table is not supported + + This command acquires an ACCESS EXCLUSIVE lock. + This is a significant limitation, which limits the usage of this + command with large partitioned tables under a high load. + would be better mentioning that the parent table and to be merged partition will all take ACCESS EXCLUSIVE lock. for example, other places we have word like: Attaching a partition acquires a SHARE UPDATE EXCLUSIVE lock on the parent table, in addition to the ACCESS EXCLUSIVE locks on the t= able being attached and on the default partition (if any). ---------------------------------------------------------------------------= ------ + + For range- and list-partitioned tables the ranges and lists of va= lues + of the merged partitions can be any. + we can change it to For range-partitioned and list-partitioned tables, the partition bounds specification can be arbitrary. + + For range-partitioned tables it is necessary that the ranges + of the partitions partition_name1, + partition_name2 [, ...] can + be merged into one range without spaces and overlaps (otherwise an error + will be generated). "without spaces and overlaps" seems not ideal, I think I found out the perfect word for it: adjacent. in [1], we have description like: anyrange -|- anyrange =E2=86=92 boolean Are the ranges adjacent? [1] https://www.postgresql.org/docs/current/functions-range.html so we can change the above to For range-partitioned tables, the ranges of the partitions partition_name1, partition_name2, [...] must be adjacent in order to be merged. Otherwise, a= n error will be raised. The resulting combined range will be the new partition bound for the partition partition_name. + The new partition will have the same table access method as the pare= nt. + If the parent table is persistent then the new partition is created + persistent. If the parent table is temporary then the new partition + is also created temporary. The new partition will also be created i= n + the same tablespace as the parent. + we can simplify the above as " The new partition will inherit the same table access method, persistence type, and tablespace as the parent table. " + + If merged partitions have different owners, an error will be generat= ed. + The owner of the merged partitions will be the owner of the new partition. + It is the user's responsibility to setup ACL on t= he + new partition. + I think we also need to mention that individual ACL on the merged partition will be dropped. We have function signature static void RemoveInheritance(Relation child_rel, Relation parent_rel, bool expect_detached) I found that "child_rel", "parent_rel" naming improves code readability a lot for partitioned table contexts. so we can change +static void +detachPartitionTable(Relation partRel, Relation rel, Oid defaultPartOid) to +static void +detachPartitionTable(Relation partRel, Relation rel, Oid defaultPartOid) We can also rename the ATExecMergePartitions argument (Relation rel) to (Relation parent_rel), I think it will improve code reliability. The attached patch is mainly documentation refactoring and renaming function detachPartitionTable argument, it is based on v44. --000000000000f2f82e06376e2c0e Content-Type: application/octet-stream; name="v44-0001-documentation-refactoring-based-on-v44.no-cfbot" Content-Disposition: attachment; filename="v44-0001-documentation-refactoring-based-on-v44.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mbuffz0i0 RnJvbSBjNzUyYjFjNWU1NTVmYjAzOTdiOWMzYTJhYzkxOGZhNjY1ODRlNjE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTMgSnVuIDIwMjUgMTQ6MjQ6MTEgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NCAxLzFdIGRvY3VtZW50YXRpb24gcmVmYWN0b3JpbmcgYmFzZWQgb24gdjQ0CgotLS0KIGRvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCB8IDM4ICsrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICB8IDEwICsrKystLS0t CiAyIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWx0ZXJfdGFibGUuc2dtbAppbmRleCA4NTVkMmNhNDRkYi4uZTQ5ZTMzNjJiNTUgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKQEAgLTExNTUsMjcgKzExNTUsMjggQEAgV0lUSCAo IE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwv cmVwbGFjZWFibGU+LCBSRU0KIAogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+Ci0gICAgICBU aGlzIGZvcm0gbWVyZ2VzIHNldmVyYWwgcGFydGl0aW9ucyBpbnRvIHRoZSBvbmUgcGFydGl0aW9u IG9mIHRoZSB0YXJnZXQgdGFibGUuCi0gICAgICBIYXNoLXBhcnRpdGlvbmluZyBpcyBub3Qgc3Vw cG9ydGVkLiAgSWYgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gcGFydGl0aW9uIGlzIG5vdCBp biB0aGUKKyAgICAgIFRoaXMgZm9ybSBtZXJnZXMgc2V2ZXJhbCBwYXJ0aXRpb25zIG9mIHRoZSB0 YXJnZXQgdGFibGUgaW50byBhIG5ldyBwYXJ0aXRpb24uCisgICAgICBIYXNoLXBhcnRpdGlvbmVk IHRhcmdldCB0YWJsZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgSWYgPGxpdGVyYWw+REVGQVVM VDwvbGl0ZXJhbD4gcGFydGl0aW9uIGlzIG5vdCBpbiB0aGUKICAgICAgIGxpc3Qgb2YgcGFydGl0 aW9ucyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0aW9uX25hbWUxPC9yZXBs YWNlYWJsZT4sCiAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0aW9u X25hbWUyPC9yZXBsYWNlYWJsZT4gWywgLi4uXToKICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAg ICAgPGxpc3RpdGVtPgogICAgICAgICA8cGFyYT4KLSAgICAgICAgIEZvciByYW5nZS1wYXJ0aXRp b25lZCB0YWJsZXMgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIHJhbmdlcwotICAgICAgICAgb2Yg dGhlIHBhcnRpdGlvbnMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9u YW1lMTwvcmVwbGFjZWFibGU+LAotICAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnBhcnRpdGlvbl9uYW1lMjwvcmVwbGFjZWFibGU+IFssIC4uLl0gY2FuCi0gICAgICAgICBi ZSBtZXJnZWQgaW50byBvbmUgcmFuZ2Ugd2l0aG91dCBzcGFjZXMgYW5kIG92ZXJsYXBzIChvdGhl cndpc2UgYW4gZXJyb3IKLSAgICAgICAgIHdpbGwgYmUgZ2VuZXJhdGVkKS4gIFRoZSBjb21iaW5l ZCByYW5nZSB3aWxsIGJlIHRoZSByYW5nZSBmb3IgdGhlIHBhcnRpdGlvbgotICAgICAgICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4u CisgICAgICAgICBGb3IgcmFuZ2UtcGFydGl0aW9uZWQgdGFibGVzLCB0aGUgcmFuZ2VzIG9mIHRo ZSBwYXJ0aXRpb25zCisgICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFy dGl0aW9uX25hbWUxPC9yZXBsYWNlYWJsZT4sCisgICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cGFydGl0aW9uX25hbWUyPC9yZXBsYWNlYWJsZT4sIFsuLi5dCisgICAgICAg ICBtdXN0IGJlIGFkamFjZW50IGluIG9yZGVyIHRvIGJlIG1lcmdlZC4gT3RoZXJ3aXNlLCBhbiBl cnJvciB3aWxsIGJlCisgICAgICAgICByYWlzZWQuIFRoZSByZXN1bHRpbmcgY29tYmluZWQgcmFu Z2Ugd2lsbCBiZSB0aGUgbmV3IHBhcnRpdGlvbiBib3VuZAorICAgICAgICAgZm9yIHRoZSBwYXJ0 aXRpb24gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9uYW1lPC9yZXBs YWNlYWJsZT4uCiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDxs aXN0aXRlbT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICBGb3IgbGlzdC1wYXJ0aXRpb25lZCB0 YWJsZXMgdGhlIHZhbHVlIGxpc3RzIG9mIGFsbCBwYXJ0aXRpb25zCisgICAgICAgICBGb3IgbGlz dC1wYXJ0aXRpb25lZCB0YWJsZXMsIHRoZSBwYXJ0aXRpb24gYm91bmRzIG9mCiAgICAgICAgICA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0aW9uX25hbWUxPC9yZXBsYWNlYWJs ZT4sCi0gICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0aW9uX25h bWUyPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBhcmUKLSAgICAgICAgIGNvbWJpbmVkIGFuZCBmb3Jt IHRoZSBsaXN0IG9mIHZhbHVlcyBvZiBwYXJ0aXRpb24KKyAgICAgICAgIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5wYXJ0aXRpb25fbmFtZTI8L3JlcGxhY2VhYmxlPiwgWy4uLl0KKyAg ICAgICAgIGFyZSBjb21iaW5lZCB0byBmb3JtIHRoZSBuZXcgcGFydGl0aW9uIGJvdW5kIGZvcgog ICAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9uYW1lPC9y ZXBsYWNlYWJsZT4uCiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVtPgpAQCAtMTE4 NiwxMyArMTE4NywxNSBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICAgIDxsaXN0aXRl bT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgcGFydGl0aW9uIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5wYXJ0aXRpb25fbmFtZTwvcmVwbGFjZWFibGU+Ci0gICAgICAgICB3 aWxsIGJlIHRoZSA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiBwYXJ0aXRpb24uCisgICAgICAg ICB3aWxsIGJlIHRoZSBuZXcgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gcGFydGl0aW9uIG9m IHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVtPgog ICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgPHBhcmE+Ci0gICAgICAgICBGb3IgcmFuZ2UtIGFu ZCBsaXN0LXBhcnRpdGlvbmVkIHRhYmxlcyB0aGUgcmFuZ2VzIGFuZCBsaXN0cyBvZiB2YWx1ZXMK LSAgICAgICAgIG9mIHRoZSBtZXJnZWQgcGFydGl0aW9ucyBjYW4gYmUgYW55LgorICAgICAgICAg VGhlIHBhcnRpdGlvbiBib3VuZCBzcGVjaWZpY2F0aW9ucyBmb3IgYWxsIHBhcnRpdGlvbnMtCisg ICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0aW9uX25hbWUxPC9y ZXBsYWNlYWJsZT4sCisgICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFy dGl0aW9uX25hbWUyPC9yZXBsYWNlYWJsZT4sIFsuLi5dCisgICAgICAgICBjYW4gYmUgYXJiaXRy YXJ5LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvaXRlbWl6 ZWRsaXN0PgpAQCAtMTIxMSwxMSArMTIxNCw4IEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAg ICAgICBpbnRvIHRoZSBuZXcgcGFydGl0aW9uLgogICAgICAgRXh0ZW5kZWQgc3RhdGlzdGljcyBh cmVuJ3QgY29waWVkIGZyb20gdGhlIHBhcmVudCB0YWJsZSwgZm9yIGNvbnNpc3RlbmN5IHdpdGgK ICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRSBQQVJUSVRJT04gT0Y8L2NvbW1hbmQ+LgotICAg ICAgVGhlIG5ldyBwYXJ0aXRpb24gd2lsbCBoYXZlIHRoZSBzYW1lIHRhYmxlIGFjY2VzcyBtZXRo b2QgYXMgdGhlIHBhcmVudC4KLSAgICAgIElmIHRoZSBwYXJlbnQgdGFibGUgaXMgcGVyc2lzdGVu dCB0aGVuIHRoZSBuZXcgcGFydGl0aW9uIGlzIGNyZWF0ZWQKLSAgICAgIHBlcnNpc3RlbnQuICBJ ZiB0aGUgcGFyZW50IHRhYmxlIGlzIHRlbXBvcmFyeSB0aGVuIHRoZSBuZXcgcGFydGl0aW9uCi0g ICAgICBpcyBhbHNvIGNyZWF0ZWQgdGVtcG9yYXJ5LiAgVGhlIG5ldyBwYXJ0aXRpb24gd2lsbCBh bHNvIGJlIGNyZWF0ZWQgaW4KLSAgICAgIHRoZSBzYW1lIHRhYmxlc3BhY2UgYXMgdGhlIHBhcmVu dC4KKyAgICAgIFRoZSBuZXcgcGFydGl0aW9uIHdpbGwgaW5oZXJpdCB0aGUgc2FtZSB0YWJsZSBh Y2Nlc3MgbWV0aG9kLCBwZXJzaXN0ZW5jZQorICAgICAgdHlwZSwgYW5kIHRhYmxlc3BhY2UgYXMg dGhlIHBhcmVudCB0YWJsZS4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIFdoZW4g cGFydGl0aW9ucyBhcmUgbWVyZ2VkLCBhbnkgaW5kaXZpZHVhbCBvYmplY3RzIGJlbG9uZ2luZyB0 byB0aG9zZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAxOTBjZTk1MmFkZS4uYzU2YjQz YzdmZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0yMjY2MCwxNCArMjI2NjAsMTQg QEAgbW92ZU1lcmdlZFRhYmxlc1Jvd3MoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLAogfQog CiAvKgotICogZGV0YWNoUGFydGl0aW9uVGFibGU6IGRldGFjaCBwYXJ0aXRpb24gInBhcnRSZWwi IGZyb20gcGFydGl0aW9uZWQgdGFibGUKLSAqICJyZWwiIHdpdGggZGVmYXVsdCBwYXJ0aXRpb24g aWRlbnRpZmllciAiZGVmYXVsdFBhcnRPaWQiCisgKiBkZXRhY2hQYXJ0aXRpb25UYWJsZTogZGV0 YWNoIHBhcnRpdGlvbiAiY2hpbGRfcmVsIiBmcm9tIHBhcnRpdGlvbmVkIHRhYmxlCisgKiAicGFy ZW50X3JlbCIgd2l0aCBkZWZhdWx0IHBhcnRpdGlvbiBpZGVudGlmaWVyICJkZWZhdWx0UGFydE9p ZCIKICAqLwogc3RhdGljIHZvaWQKLWRldGFjaFBhcnRpdGlvblRhYmxlKFJlbGF0aW9uIHBhcnRS ZWwsIFJlbGF0aW9uIHJlbCwgT2lkIGRlZmF1bHRQYXJ0T2lkKQorZGV0YWNoUGFydGl0aW9uVGFi bGUoUmVsYXRpb24gY2hpbGRfcmVsLCBSZWxhdGlvbiBwYXJlbnRfcmVsLCBPaWQgZGVmYXVsdFBh cnRPaWQpCiB7CiAJLyogUmVtb3ZlIHRoZSBwZ19pbmhlcml0cyByb3cgZmlyc3QuICovCi0JUmVt b3ZlSW5oZXJpdGFuY2UocGFydFJlbCwgcmVsLCBmYWxzZSk7CisJUmVtb3ZlSW5oZXJpdGFuY2Uo Y2hpbGRfcmVsLCBwYXJlbnRfcmVsLCBmYWxzZSk7CiAKIAkvKgogCSAqIERldGFjaGluZyB0aGUg cGFydGl0aW9uIG1pZ2h0IGludm9sdmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UK QEAgLTIyNjc2LDcgKzIyNjc2LDcgQEAgZGV0YWNoUGFydGl0aW9uVGFibGUoUmVsYXRpb24gcGFy dFJlbCwgUmVsYXRpb24gcmVsLCBPaWQgZGVmYXVsdFBhcnRPaWQpCiAJUHVzaEFjdGl2ZVNuYXBz aG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAKIAkvKiBEbyB0aGUgZmluYWwgcGFydCBv ZiBkZXRhY2hpbmcuICovCi0JRGV0YWNoUGFydGl0aW9uRmluYWxpemUocmVsLCBwYXJ0UmVsLCBm YWxzZSwgZGVmYXVsdFBhcnRPaWQpOworCURldGFjaFBhcnRpdGlvbkZpbmFsaXplKHBhcmVudF9y ZWwsIGNoaWxkX3JlbCwgZmFsc2UsIGRlZmF1bHRQYXJ0T2lkKTsKIAogCVBvcEFjdGl2ZVNuYXBz aG90KCk7CiB9Ci0tIAoyLjM0LjEKCg== --000000000000f2f82e06376e2c0e--