Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1flVSS-0003VV-T8 for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Aug 2018 08:29:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1flVSR-0000e7-4D for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Aug 2018 08:29:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1flVSQ-0000cv-S9 for pgsql-hackers@lists.postgresql.org; Fri, 03 Aug 2018 08:29:10 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1flVSL-0006mJ-Lq for pgsql-hackers@postgresql.org; Fri, 03 Aug 2018 08:29:10 +0000 Received: from vc2.ecl.ntt.co.jp (vc2.ecl.ntt.co.jp [129.60.86.154]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id w738SsUs005732; Fri, 3 Aug 2018 17:28:54 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id 5861E638F19; Fri, 3 Aug 2018 17:28:54 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id 4C5F0638E3C; Fri, 3 Aug 2018 17:28:54 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id 44F1A4005EA; Fri, 3 Aug 2018 17:28:54 +0900 (JST) Subject: Re: partition tree inspection functions References: <8d00e51a-9a51-ad02-d53e-ba6bf50b2e52@lab.ntt.co.jp> <5a560c9c-3722-1914-f34b-1de0ff3310d1@lab.ntt.co.jp> <20180627121615.GF2667@paquier.xyz> <45e28062-976d-45bf-56f8-9746f551da02@lab.ntt.co.jp> <20180628034341.GH11054@paquier.xyz> <6baeb45a-6222-6b88-342d-37fc7d3cf89a@lab.ntt.co.jp> <4f4a2518-6c62-5463-6ac2-1241ae9d6041@redhat.com> <38183355-ea7c-9443-0c38-6124fcf5f38b@redhat.com> <5686970f-b4e8-bbe5-9109-b97763714c19@lab.ntt.co.jp> <3273a7af-3aca-eb86-cedb-f7b28be00831@lab.ntt.co.jp> From: Amit Langote Message-ID: <28d6f8eb-afda-1bfd-141d-ca489cffb0ee@lab.ntt.co.jp> Date: Fri, 3 Aug 2018 17:28:38 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------97874F56CD12F8FAC75EF483" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Robert Haas Cc: Jesper Pedersen , Michael Paquier , Jeevan Ladhe , Pg Hackers X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------97874F56CD12F8FAC75EF483 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 2018/08/01 22:21, Robert Haas wrote: > On Thu, Jul 26, 2018 at 4:47 AM, Amit Langote > wrote: >> Alright, I have replaced pg_partition_tree_tables with >> pg_partition_children with an 'include_all' argument, as you suggested, >> but I implemented it as an optional argument. So, one would use that >> argument only if need to get *all* partitions. I have also added a >> pg_partition_leaf_children() that returns just the leaf partitions, which >> wasn't there in the previous versions. >> >> Further, I've added a pg_partition_level that returns the level of a >> partition in the partition tree wrt to the root of the *whole* partition >> tree. But maybe we want this function to accept one more argument, >> 'rootoid', the OID of the root table against which to measure the level? > > I have another idea. Suppose we just have one function, and that > function a set of records, and each record contains (1) the OID of a > table, (2) the OID of the immediate parent or NULL for the root, and > (3) the level (0 = root, 1 = child, 2 = grandchild, etc.). > > So then to get the immediate children you would say: > > SELECT * FROM pg_whatever() WHERE level = 1 > > And to get everything you would just say: > > SELECT * FROM pg_whatever(); > > And if you wanted grandchildren or everything but the root or whatever > you could just adjust the WHERE clause. > > By including the OID of the immediate parent, there's enough > information for application code to draw an actual graph if it wants, > which doesn't work so well if you just know the levels. That's a good idea, thanks. Actually, by the time I sent the last version of the patch or maybe few versions before that, I too had started thinking if we shouldn't just have a SETOF RECORD function like you've outlined here, but wasn't sure of the fields it should have. (relid, parentid, level) seems like a good start, or maybe that's just what we need. I tried to implement such a function. Example usage: create table q (a int, b int, c int) partition by list (a); create table q1 partition of q for values in (1) partition by hash (b); create table q11 partition of q1 for values with (modulus 1, remainder 0) partition by hash (c); create table q111 partition of q11 for values with (modulus 1, remainder 0); create table q2 partition of q for values in (2); insert into q select i%2+1, i, i from generate_series(1, 1000) i; select * from pg_partition_children('q'); relid │ parentid │ level ───────┼──────────┼─────── q │ │ 0 q1 │ q │ 1 q2 │ q │ 1 q11 │ q1 │ 2 q111 │ q11 │ 3 (5 rows) select * from pg_partition_children('q') where level > 0; relid │ parentid │ level ───────┼──────────┼─────── q1 │ q │ 1 q2 │ q │ 1 q11 │ q1 │ 2 q111 │ q11 │ 3 (4 rows) select * from pg_partition_children('q') where level = 1; relid │ parentid │ level ───────┼──────────┼─────── q1 │ q │ 1 q2 │ q │ 1 (2 rows) select *, pg_relation_size(relid) as size from pg_partition_children('q'); relid │ parentid │ level │ size ───────┼──────────┼───────┼─────── q │ │ 0 │ 0 q1 │ q │ 1 │ 0 q2 │ q │ 1 │ 24576 q11 │ q1 │ 2 │ 0 q111 │ q11 │ 3 │ 24576 (5 rows) select sum(pg_relation_size(relid)) as size from pg_partition_children('q'); size ─────── 49152 (1 row) select *, pg_relation_size(relid) as size from pg_partition_children('q1'); relid │ parentid │ level │ size ───────┼──────────┼───────┼─────── q1 │ q │ 0 │ 0 q11 │ q1 │ 1 │ 0 q111 │ q11 │ 2 │ 24576 (3 rows) select *, pg_relation_size(relid) as size from pg_partition_children('q11'); relid │ parentid │ level │ size ───────┼──────────┼───────┼─────── q11 │ q1 │ 0 │ 0 q111 │ q11 │ 1 │ 24576 (2 rows) select *, pg_relation_size(relid) as size from pg_partition_children('q111'); relid │ parentid │ level │ size ───────┼──────────┼───────┼─────── q111 │ q11 │ 0 │ 24576 (1 row) Note that the level that's returned for each table is computed wrt the root table passed to the function and not the actual root partition. I have updated the patch to include just this one function, its documentation, and tests. Regards, Amit --------------97874F56CD12F8FAC75EF483 Content-Type: text/plain; charset=UTF-8; name="v9-0001-Add-pg_partition_children-to-report-partitions.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v9-0001-Add-pg_partition_children-to-report-partitions.patch" RnJvbSA1ZGVlMzVhMjRlYTk2YjhiYzYyNTc4ZjUzM2RlYzAwZGNkYzU2NDc2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzIEF1ZyAyMDE4IDE3OjA2OjA1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2 OV0gQWRkIHBnX3BhcnRpdGlvbl9jaGlsZHJlbiB0byByZXBvcnQgcGFydGl0aW9ucwoKSXQg cmV0dXJucyBzZXQgb2YgcmVjb3JkcyBvbmUgZm9yIGVhY2ggcGFydGl0aW9uIGNvbnRhaW5p bmcgdGhlCnBhcnRpdGlvbiBuYW1lLCBwYXJlbnQgbmFtZSwgYW5kIGxldmVsIGluIHRoZSBw YXJ0aXRpb24gdHJlZSB3aXRoCmdpdmVuIHRhYmxlIGFzIHJvb3QKLS0tCiBkb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICB8IDMzICsrKysrKysrKysrCiBz cmMvYmFja2VuZC9jYXRhbG9nL3BhcnRpdGlvbi5jICAgICAgICAgICAgICB8IDgzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgICAgICAgICAgICAgIHwgIDcgKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bh cnRpdGlvbl9pbmZvLm91dCB8IDc1ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgIHwgIDIgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlICAgICAgICAgICAgIHwgIDEgKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX2luZm8uc3FsICAgICAgfCAzMiArKysrKysrKysr KwogNyBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9u X2luZm8ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFy dGl0aW9uX2luZm8uc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBi L2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggZWRjOWJlOTJhNi4uYTZlNTI4MzdhYyAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sCkBAIC0xOTk5NSw2ICsxOTk5NSwzOSBAQCBwb3N0Z3Jlcz0jIFNFTEVDVCAq IEZST00gcGdfd2FsZmlsZV9uYW1lX29mZnNldChwZ19zdG9wX2JhY2t1cCgpKTsKICAgICBU aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5ldyBjb2xsYXRpb24gb2JqZWN0 cyBpdCBjcmVhdGVkLgogICAgPC9wYXJhPgogCisgICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1p bmZvLXBhcnRpdGlvbiI+CisgICAgPHRpdGxlPlBhcnRpdGlvbmluZyBJbmZvcm1hdGlvbiBG dW5jdGlvbnM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMyI+CisgICAgIDx0aGVhZD4K KyAgICAgIDxyb3c+PGVudHJ5Pk5hbWU8L2VudHJ5PiA8ZW50cnk+UmV0dXJuIFR5cGU8L2Vu dHJ5PiA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5Pjwvcm93PgorICAgICA8L3RoZWFkPgor CisgICAgIDx0Ym9keT4gCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT48bGl0ZXJhbD48 ZnVuY3Rpb24+cGdfcGFydGl0aW9uX2NoaWxkcmVuKDx0eXBlPnJlZ2NsYXNzPC90eXBlPik8 L2Z1bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgIDxlbnRyeT48dHlwZT5zZXRv ZiByZWNvcmQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+TGlzdCBuYW1lLCBwYXJl bnQgbmFtZSwgYW5kIGxldmVsIG9mIGVhY2ggcGFydGl0aW9uIGNvbnRhaW5lZCBpbiB0aGUg cGFydGl0aW9uIHRyZWUgd2l0aCBnaXZlbiByb290IHRhYmxlLCBpbmNsdWRpbmcgdGhlIHJv b3QgdGFibGUgaXRzZWxmPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3Rib2R5Pgor ICAgIDwvdGdyb3VwPgorICAgPC90YWJsZT4KKworICAgPHBhcmE+CisgICAgVG8gY2hlY2sg dGhlIHRvdGFsIHNpemUgb2YgdGhlIGRhdGEgY29udGFpbmVkIGluCisgICAgPHN0cnVjdG5h bWU+bWVhc3VyZW1lbnQ8L3N0cnVjdG5hbWU+IHRhYmxlIGRlc2NyaWJlZCBpbgorICAgIDx4 cmVmIGxpbmtlbmQ9ImRkbC1wYXJ0aXRpb25pbmctZGVjbGFyYXRpdmUtZXhhbXBsZSIvPiwg b25lIGNvdWxkIHVzZSB0aGUKKyAgICBmb2xsb3dpbmcgcXVlcnk6CisgICA8L3BhcmE+CisK Kzxwcm9ncmFtbGlzdGluZz4KK3NlbGVjdCBwZ19zaXplX3ByZXR0eShzdW0ocGdfcmVsYXRp b25fc2l6ZShyZWxpZCkpKSBhcyB0b3RhbF9zaXplIGZyb20gcGdfcGFydGl0aW9uX2NoaWxk cmVuKCdtZWFzdXJlbWVudCcpOworIHRvdGFsX3NpemUgCistLS0tLS0tLS0tLS0KKyAyNCBr QgorKDEgcm93KQorPC9wcm9ncmFtbGlzdGluZz4KKworCiAgIDwvc2VjdDI+CiAKICAgPHNl Y3QyIGlkPSJmdW5jdGlvbnMtYWRtaW4taW5kZXgiPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGFydGl0aW9u LmMKaW5kZXggNTU4MDIyNjQ3Yy4uOThhOWZiM2ZkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BhcnRp dGlvbi5jCkBAIC0yMywxMiArMjMsMTUgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlv bi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3ByZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdmFyLmgiCiAjaW5jbHVkZSAicGFydGl0 aW9uaW5nL3BhcnRib3VuZHMuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9p ZHMuaCIKICNpbmNsdWRlICJ1dGlscy9wYXJ0Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKQEAgLTM1NywzICszNjAsODMgQEAgZ2V0X3Byb3Bvc2VkX2RlZmF1bHRfY29uc3Ry YWludChMaXN0ICpuZXdfcGFydF9jb25zdHJhaW50cykKIAogCXJldHVybiBtYWtlX2FuZHNf aW1wbGljaXQoZGVmUGFydENvbnN0cmFpbnQpOwogfQorCitEYXR1bQorcGdfcGFydGl0aW9u X2NoaWxkcmVuKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQlyb290cmVsaWQgPSBQR19H RVRBUkdfT0lEKDApOworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N4dDsKKwlMaXN0Q2VsbCAq Km5leHQ7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisJCVR1cGxlRGVzYwl0dXBkZXNjOworCQlMaXN0ICAgKnBhcnRpdGlvbnM7 CisKKwkJZnVuY2N4dCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCQlvbGRjeHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oZnVuY2N4dC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKwor CQlwYXJ0aXRpb25zID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyb290cmVsaWQsIE5vTG9jaywg TlVMTCk7CisKKwkJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDMsIGZhbHNl KTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAicmVs aWQiLAorCQkJCQkJICAgUkVHQ0xBU1NPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVu dHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAyLCAicGFyZW50aWQiLAorCQkJCQkJICAgUkVH Q0xBU1NPSUQsIC0xLCAwKTsKKwkJVHVwbGVEZXNjSW5pdEVudHJ5KHR1cGRlc2MsIChBdHRy TnVtYmVyKSAzLCAibGV2ZWwiLAorCQkJCQkJICAgSU5UNE9JRCwgLTEsIDApOworCisJCW5l eHQgPSAoTGlzdENlbGwgKiopIHBhbGxvYyhzaXplb2YoTGlzdENlbGwgKikpOworCQkqbmV4 dCA9IGxpc3RfaGVhZChwYXJ0aXRpb25zKTsKKworCQlmdW5jY3h0LT5hdHRpbm1ldGEgPSBU dXBsZURlc2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOworCQlmdW5jY3h0LT51c2VyX2Zj dHggPSAodm9pZCAqKSBuZXh0OworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQp OworCX0KKworCWZ1bmNjeHQgPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCW5leHQgPSAoTGlz dENlbGwgKiopIGZ1bmNjeHQtPnVzZXJfZmN0eDsKKworCWlmICgqbmV4dCAhPSBOVUxMKQor CXsKKwkJSGVhcFR1cGxlCXR1cGxlOworCQljaGFyCSAgICp2YWx1ZXNbM107CisJCU9pZAkJ CXJlbGlkID0gbGZpcnN0X29pZCgqbmV4dCk7CisJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdl dF9wYXJ0aXRpb25fYW5jZXN0b3JzKGxmaXJzdF9vaWQoKm5leHQpKTsKKwkJT2lkCQkJcGFy ZW50ID0gSW52YWxpZE9pZDsKKwkJaW50CQkJbGV2ZWwgPSAwOworCQlMaXN0Q2VsbCAgICps YzsKKworCQkvKiByZWxpZCAqLworCQl2YWx1ZXNbMF0gPSBwc3ByaW50ZigiJXUiLCByZWxp ZCk7CisKKwkJLyogcGFyZW50aWQgKi8KKwkJaWYgKGFuY2VzdG9ycyAhPSBOSUwpCisJCQlw YXJlbnQgPSBsaW5pdGlhbF9vaWQoYW5jZXN0b3JzKTsKKwkJaWYgKE9pZElzVmFsaWQocGFy ZW50KSkKKwkJCXZhbHVlc1sxXSA9IHBzcHJpbnRmKCIldSIsIHBhcmVudCk7CisJCWVsc2UK KwkJCXZhbHVlc1sxXSA9IE5VTEw7CisKKwkJLyogbGV2ZWwgKi8KKwkJaWYgKHJlbGlkICE9 IHJvb3RyZWxpZCkKKwkJeworCQkJZm9yZWFjaChsYywgYW5jZXN0b3JzKQorCQkJeworCQkJ CWxldmVsKys7CisJCQkJaWYgKGxmaXJzdF9vaWQobGMpID09IHJvb3RyZWxpZCkKKwkJCQkJ YnJlYWs7CisJCQl9CisJCX0KKwkJdmFsdWVzWzJdID0gcHNwcmludGYoIiV1IiwgbGV2ZWwp OworCisJCXR1cGxlID0gQnVpbGRUdXBsZUZyb21DU3RyaW5ncyhmdW5jY3h0LT5hdHRpbm1l dGEsIHZhbHVlcyk7CisKKwkJKm5leHQgPSBsbmV4dCgqbmV4dCk7CisJCVNSRl9SRVRVUk5f TkVYVChmdW5jY3h0LCBIZWFwVHVwbGVHZXREYXR1bSh0dXBsZSkpOworCX0KKworCVNSRl9S RVRVUk5fRE9ORShmdW5jY3h0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IGExNDY1MTAxMGYuLmMxZGY3OTUwOGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtMTAyMDYsNCArMTAyMDYsMTEgQEAKICAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0 eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ29pZCBpbnQ0IGludDQgYW55JywKICAg cHJvYXJnbW9kZXMgPT4gJ3tpLGksaSx2fScsIHByb3NyYyA9PiAnc2F0aXNmaWVzX2hhc2hf cGFydGl0aW9uJyB9LAogCisjIGZ1bmN0aW9uIHRvIGdldCB0YWJsZXMgaW4gcGFydGl0aW9u IHRyZWUgb2YgYSBnaXZlbiByb290IHRhYmxlCit7IG9pZCA9PiAnMzQyMycsIGRlc2NyID0+ ICd2aWV3IHBhcnRpdGlvbiB0cmVlIHRhYmxlcycsCisgIHByb25hbWUgPT4gJ3BnX3BhcnRp dGlvbl9jaGlsZHJlbicsIHByb3Jvd3MgPT4gJzEwMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLAor ICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5 cGVzID0+ICdyZWdjbGFzcycsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7cmVnY2xhc3MscmVn Y2xhc3MscmVnY2xhc3MsaW50NH0nLCBwcm9hcmdtb2RlcyA9PiAne2ksbyxvLG99JywKKyAg cHJvYXJnbmFtZXMgPT4gJ3tyb290cmVsaWQscmVsaWQscGFyZW50aWQsbGV2ZWx9JywgcHJv c3JjID0+ICdwZ19wYXJ0aXRpb25fY2hpbGRyZW4nIH0KKwogXQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25faW5mby5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9pbmZvLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi40OTA4Y2JjNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25faW5mby5vdXQKQEAgLTAsMCArMSw3 NSBAQAorLS0KKy0tIFRlc3RzIGZvciBwZ19wYXJ0aXRpb25fY2hpbGRyZW4KKy0tCitjcmVh dGUgdGFibGUgcHRpZl90ZXN0IChhIGludCwgYiBpbnQpIHBhcnRpdGlvbiBieSByYW5nZSAo YSk7CitjcmVhdGUgdGFibGUgcHRpZl90ZXN0MCBwYXJ0aXRpb24gb2YgcHRpZl90ZXN0IGZv ciB2YWx1ZXMgZnJvbSAobWludmFsdWUpIHRvICgwKSBwYXJ0aXRpb24gYnkgbGlzdCAoYik7 CitjcmVhdGUgdGFibGUgcHRpZl90ZXN0MDEgcGFydGl0aW9uIG9mIHB0aWZfdGVzdDAgZm9y IHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgcHRpZl90ZXN0MSBwYXJ0aXRpb24gb2Yg cHRpZl90ZXN0IGZvciB2YWx1ZXMgZnJvbSAoMCkgdG8gKDEwMCkgcGFydGl0aW9uIGJ5IGxp c3QgKGIpOworY3JlYXRlIHRhYmxlIHB0aWZfdGVzdDExIHBhcnRpdGlvbiBvZiBwdGlmX3Rl c3QxIGZvciB2YWx1ZXMgaW4gKDEpOworY3JlYXRlIHRhYmxlIHB0aWZfdGVzdDIgcGFydGl0 aW9uIG9mIHB0aWZfdGVzdCBmb3IgdmFsdWVzIGZyb20gKDEwMCkgdG8gKG1heHZhbHVlKTsK K2luc2VydCBpbnRvIHB0aWZfdGVzdCBzZWxlY3QgaSwgMSBmcm9tIGdlbmVyYXRlX3Nlcmll cygtNTAwLCA1MDApIGk7CistLSBhbGwgdGFibGVzIGluIHRoZSB0cmVlCitzZWxlY3QgKiwg cGdfcmVsYXRpb25fc2l6ZShyZWxpZCkgYXMgc2l6ZSBmcm9tIHBnX3BhcnRpdGlvbl9jaGls ZHJlbigncHRpZl90ZXN0Jyk7CisgICAgcmVsaWQgICAgfCAgcGFyZW50aWQgIHwgbGV2ZWwg fCBzaXplICAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLQor IHB0aWZfdGVzdCAgIHwgICAgICAgICAgICB8ICAgICAwIHwgICAgIDAKKyBwdGlmX3Rlc3Qw ICB8IHB0aWZfdGVzdCAgfCAgICAgMSB8ICAgICAwCisgcHRpZl90ZXN0MSAgfCBwdGlmX3Rl c3QgIHwgICAgIDEgfCAgICAgMAorIHB0aWZfdGVzdDIgIHwgcHRpZl90ZXN0ICB8ICAgICAx IHwgMTYzODQKKyBwdGlmX3Rlc3QwMSB8IHB0aWZfdGVzdDAgfCAgICAgMiB8IDI0NTc2Cisg cHRpZl90ZXN0MTEgfCBwdGlmX3Rlc3QxIHwgICAgIDIgfCAgODE5MgorKDYgcm93cykKKwor LS0gYWxsIHRhYmxlIGV4Y2x1ZGluZyB0aGUgcm9vdAorc2VsZWN0ICosIHBnX3JlbGF0aW9u X3NpemUocmVsaWQpIGFzIHNpemUgZnJvbSBwZ19wYXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZf dGVzdCcpIHdoZXJlIGxldmVsID4gMDsKKyAgICByZWxpZCAgICB8ICBwYXJlbnRpZCAgfCBs ZXZlbCB8IHNpemUgIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tCisgcHRpZl90ZXN0MCAgfCBwdGlmX3Rlc3QgIHwgICAgIDEgfCAgICAgMAorIHB0aWZf dGVzdDEgIHwgcHRpZl90ZXN0ICB8ICAgICAxIHwgICAgIDAKKyBwdGlmX3Rlc3QyICB8IHB0 aWZfdGVzdCAgfCAgICAgMSB8IDE2Mzg0CisgcHRpZl90ZXN0MDEgfCBwdGlmX3Rlc3QwIHwg ICAgIDIgfCAyNDU3NgorIHB0aWZfdGVzdDExIHwgcHRpZl90ZXN0MSB8ICAgICAyIHwgIDgx OTIKKyg1IHJvd3MpCisKKy0tIHRvdGFsIHNpemUgb2YgYWxsIHBhcnRpdGlvbnMKK3NlbGVj dCBzdW0ocGdfcmVsYXRpb25fc2l6ZShyZWxpZCkpIGFzIHRvdGFsX3NpemUgZnJvbSBwZ19w YXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZfdGVzdCcpOworIHRvdGFsX3NpemUgCistLS0tLS0t LS0tLS0KKyAgICAgIDQ5MTUyCisoMSByb3cpCisKKy0tIHRvdGFsIHNpemUgb2YgZmlyc3Qg bGV2ZWwgcGFydGl0aW9ucworc2VsZWN0IHN1bShwZ19yZWxhdGlvbl9zaXplKHJlbGlkKSkg YXMgdG90YWxfc2l6ZSBmcm9tIHBnX3BhcnRpdGlvbl9jaGlsZHJlbigncHRpZl90ZXN0Jykg d2hlcmUgbGV2ZWwgPSAxOworIHRvdGFsX3NpemUgCistLS0tLS0tLS0tLS0KKyAgICAgIDE2 Mzg0CisoMSByb3cpCisKKy0tIGNoZWNrIHRoYXQgcGFzc2luZyBhIGxvd2VyLWxldmVsIHRh YmxlIHRvIHBnX3BhcnRpdGlvbl9jaGlsZHJlbiB3b3Jrcworc2VsZWN0ICosIHBnX3JlbGF0 aW9uX3NpemUocmVsaWQpIGFzIHNpemUgZnJvbSBwZ19wYXJ0aXRpb25fY2hpbGRyZW4oJ3B0 aWZfdGVzdDAnKTsKKyAgICByZWxpZCAgICB8ICBwYXJlbnRpZCAgfCBsZXZlbCB8IHNpemUg IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tCisgcHRpZl90 ZXN0MCAgfCBwdGlmX3Rlc3QgIHwgICAgIDAgfCAgICAgMAorIHB0aWZfdGVzdDAxIHwgcHRp Zl90ZXN0MCB8ICAgICAxIHwgMjQ1NzYKKygyIHJvd3MpCisKK3NlbGVjdCAqLCBwZ19yZWxh dGlvbl9zaXplKHJlbGlkKSBhcyBzaXplIGZyb20gcGdfcGFydGl0aW9uX2NoaWxkcmVuKCdw dGlmX3Rlc3QwMScpOworICAgIHJlbGlkICAgIHwgIHBhcmVudGlkICB8IGxldmVsIHwgc2l6 ZSAgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0KKyBwdGlm X3Rlc3QwMSB8IHB0aWZfdGVzdDAgfCAgICAgMCB8IDI0NTc2CisoMSByb3cpCisKK3NlbGVj dCBzdW0ocGdfcmVsYXRpb25fc2l6ZShyZWxpZCkpIGFzIHRvdGFsX3NpemUgZnJvbSBwZ19w YXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZfdGVzdDAxJyk7CisgdG90YWxfc2l6ZSAKKy0tLS0t LS0tLS0tLQorICAgICAgMjQ1NzYKKygxIHJvdykKKworLS0gdGhpcyBvbmUgc2hvdWxkIHJl c3VsdCBpbiBudWxsLCBhcyB0aGVyZSBhcmUgbm8gbGV2ZWwgMSBwYXJ0aXRpb25zIG9mIGEg bGVhZiBwYXJ0aXRpb24KK3NlbGVjdCBzdW0ocGdfcmVsYXRpb25fc2l6ZShyZWxpZCkpIGFz IHRvdGFsX3NpemUgZnJvbSBwZ19wYXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZfdGVzdDAxJykg d2hlcmUgbGV2ZWwgPSAxOworIHRvdGFsX3NpemUgCistLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgCisoMSByb3cpCisKK2Ryb3AgdGFibGUgcHRpZl90ZXN0OwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKaW5kZXggMTZmOTc5YzhkOS4uNmNiODIwYmJjNCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMTYsNyArMTE2LDcgQEAgdGVzdDogcGxh bmNhY2hlIGxpbWl0IHBscGdzcWwgY29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVw YXJlIHdpdGhvdXRfb2lkIGMKICMgLS0tLS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBh cmFsbGVsIHRlc3RzCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IGlkZW50aXR5IHBhcnRpdGlvbl9q b2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0 aXRpb25fYWdncmVnYXRlCit0ZXN0OiBpZGVudGl0eSBwYXJ0aXRpb25fam9pbiBwYXJ0aXRp b25fcHJ1bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2FnZ3Jl Z2F0ZSBwYXJ0aXRpb25faW5mbwogCiAjIGV2ZW50IHRyaWdnZXJzIGNhbm5vdCBydW4gY29u Y3VycmVudGx5IHdpdGggYW55IHRlc3QgdGhhdCBydW5zIERETAogdGVzdDogZXZlbnRfdHJp Z2dlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgYi9z cmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQppbmRleCA0MjYzMmJlNjc1Li43ZTM3 NGMyZGFhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQpAQCAtMTg4LDYgKzE4OCw3 IEBAIHRlc3Q6IHJlbG9wdGlvbnMKIHRlc3Q6IGhhc2hfcGFydAogdGVzdDogaW5kZXhpbmcK IHRlc3Q6IHBhcnRpdGlvbl9hZ2dyZWdhdGUKK3Rlc3Q6IHBhcnRpdGlvbl9pbmZvCiB0ZXN0 OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBmYXN0X2RlZmF1bHQKIHRlc3Q6IHN0YXRzCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25faW5mby5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25faW5mby5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uNDgxZDE2NWJlMAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9pbmZvLnNxbApAQCAtMCwwICsxLDMyIEBA CistLQorLS0gVGVzdHMgZm9yIHBnX3BhcnRpdGlvbl9jaGlsZHJlbgorLS0KK2NyZWF0ZSB0 YWJsZSBwdGlmX3Rlc3QgKGEgaW50LCBiIGludCkgcGFydGl0aW9uIGJ5IHJhbmdlIChhKTsK K2NyZWF0ZSB0YWJsZSBwdGlmX3Rlc3QwIHBhcnRpdGlvbiBvZiBwdGlmX3Rlc3QgZm9yIHZh bHVlcyBmcm9tIChtaW52YWx1ZSkgdG8gKDApIHBhcnRpdGlvbiBieSBsaXN0IChiKTsKK2Ny ZWF0ZSB0YWJsZSBwdGlmX3Rlc3QwMSBwYXJ0aXRpb24gb2YgcHRpZl90ZXN0MCBmb3IgdmFs dWVzIGluICgxKTsKK2NyZWF0ZSB0YWJsZSBwdGlmX3Rlc3QxIHBhcnRpdGlvbiBvZiBwdGlm X3Rlc3QgZm9yIHZhbHVlcyBmcm9tICgwKSB0byAoMTAwKSBwYXJ0aXRpb24gYnkgbGlzdCAo Yik7CitjcmVhdGUgdGFibGUgcHRpZl90ZXN0MTEgcGFydGl0aW9uIG9mIHB0aWZfdGVzdDEg Zm9yIHZhbHVlcyBpbiAoMSk7CitjcmVhdGUgdGFibGUgcHRpZl90ZXN0MiBwYXJ0aXRpb24g b2YgcHRpZl90ZXN0IGZvciB2YWx1ZXMgZnJvbSAoMTAwKSB0byAobWF4dmFsdWUpOworaW5z ZXJ0IGludG8gcHRpZl90ZXN0IHNlbGVjdCBpLCAxIGZyb20gZ2VuZXJhdGVfc2VyaWVzKC01 MDAsIDUwMCkgaTsKKworLS0gYWxsIHRhYmxlcyBpbiB0aGUgdHJlZQorc2VsZWN0ICosIHBn X3JlbGF0aW9uX3NpemUocmVsaWQpIGFzIHNpemUgZnJvbSBwZ19wYXJ0aXRpb25fY2hpbGRy ZW4oJ3B0aWZfdGVzdCcpOworCistLSBhbGwgdGFibGUgZXhjbHVkaW5nIHRoZSByb290Citz ZWxlY3QgKiwgcGdfcmVsYXRpb25fc2l6ZShyZWxpZCkgYXMgc2l6ZSBmcm9tIHBnX3BhcnRp dGlvbl9jaGlsZHJlbigncHRpZl90ZXN0Jykgd2hlcmUgbGV2ZWwgPiAwOworCistLSB0b3Rh bCBzaXplIG9mIGFsbCBwYXJ0aXRpb25zCitzZWxlY3Qgc3VtKHBnX3JlbGF0aW9uX3NpemUo cmVsaWQpKSBhcyB0b3RhbF9zaXplIGZyb20gcGdfcGFydGl0aW9uX2NoaWxkcmVuKCdwdGlm X3Rlc3QnKTsKKworLS0gdG90YWwgc2l6ZSBvZiBmaXJzdCBsZXZlbCBwYXJ0aXRpb25zCitz ZWxlY3Qgc3VtKHBnX3JlbGF0aW9uX3NpemUocmVsaWQpKSBhcyB0b3RhbF9zaXplIGZyb20g cGdfcGFydGl0aW9uX2NoaWxkcmVuKCdwdGlmX3Rlc3QnKSB3aGVyZSBsZXZlbCA9IDE7CisK Ky0tIGNoZWNrIHRoYXQgcGFzc2luZyBhIGxvd2VyLWxldmVsIHRhYmxlIHRvIHBnX3BhcnRp dGlvbl9jaGlsZHJlbiB3b3Jrcworc2VsZWN0ICosIHBnX3JlbGF0aW9uX3NpemUocmVsaWQp IGFzIHNpemUgZnJvbSBwZ19wYXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZfdGVzdDAnKTsKK3Nl bGVjdCAqLCBwZ19yZWxhdGlvbl9zaXplKHJlbGlkKSBhcyBzaXplIGZyb20gcGdfcGFydGl0 aW9uX2NoaWxkcmVuKCdwdGlmX3Rlc3QwMScpOworc2VsZWN0IHN1bShwZ19yZWxhdGlvbl9z aXplKHJlbGlkKSkgYXMgdG90YWxfc2l6ZSBmcm9tIHBnX3BhcnRpdGlvbl9jaGlsZHJlbign cHRpZl90ZXN0MDEnKTsKKworLS0gdGhpcyBvbmUgc2hvdWxkIHJlc3VsdCBpbiBudWxsLCBh cyB0aGVyZSBhcmUgbm8gbGV2ZWwgMSBwYXJ0aXRpb25zIG9mIGEgbGVhZiBwYXJ0aXRpb24K K3NlbGVjdCBzdW0ocGdfcmVsYXRpb25fc2l6ZShyZWxpZCkpIGFzIHRvdGFsX3NpemUgZnJv bSBwZ19wYXJ0aXRpb25fY2hpbGRyZW4oJ3B0aWZfdGVzdDAxJykgd2hlcmUgbGV2ZWwgPSAx OworCitkcm9wIHRhYmxlIHB0aWZfdGVzdDsKLS0gCjIuMTEuMAoK --------------97874F56CD12F8FAC75EF483--