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 1sW04L-00Cj2W-G7 for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jul 2024 20:55:41 +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 1sW04J-006pWu-Dg for pgsql-hackers@arkaria.postgresql.org; Mon, 22 Jul 2024 20:55:39 +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 1sW04I-006pWm-TC for pgsql-hackers@lists.postgresql.org; Mon, 22 Jul 2024 20:55:39 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sW04F-000wdq-D7 for pgsql-hackers@postgresql.org; Mon, 22 Jul 2024 20:55:37 +0000 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-70d2e68f5a8so803866b3a.3 for ; Mon, 22 Jul 2024 13:55:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgguru-net.20230601.gappssmtp.com; s=20230601; t=1721681733; x=1722286533; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=gIjexIDBGXpTV4Lb8QiGZoIuB9m48Q8qmQ3EFZPSP+Q=; b=AiWKB9ruVWoFvhjRWF5kVzOXgpgbagkhrAAQGfFm6Nd/8pBo/qb90Wx3qLuYBqAgt2 ey1SoxSCZp+USr8ad7q5Qsacw4MejHbIfoHwMoi8Q2Wsd3RGtuq5HBSgofJCnl/hRZi/ R2mLz3Rb1L07Edorn+NKI2d5UX/5/2BFdfPHd7ER0CjThh/eYApzz8UwNgcrATOx3Hbu noc4l1b5JYY4dI2MdkQrT9TuMLAQssFh/EnhWW5PrP9PQtx81b84lOmCPFLRVjUc7aCh TRrbe1+bnPB4v3QGaY7V43Hgm16SD3CJerQe4/WxGIAOycPxQ8QEgJxagkYy5tZfGoxa CjqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721681733; x=1722286533; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=gIjexIDBGXpTV4Lb8QiGZoIuB9m48Q8qmQ3EFZPSP+Q=; b=hngToTQ/ZwG5sApBDVkSBpgvVHeFDDfD9ZnqU2/CrB9VO52d6TMHk7tg+R/A/+O18o nXwvaTxyn675eHdXiLy39FHH19X1xNoQKymMvAjjnwlWnnkFEfXPi3XaDi9h6eZapFRi wSeMM0k7xxCQH+xJppbQw47wQwpktrhmOfr3izxevBaOxopO28Xz1sSiqc7kYidUF+Qp Hy2f/oDoVaNVyaKQKFJjReTRUlCoX/dwmWvQ7HGTHwoDd+CUvaBP0QpcWPq4at+vgI8w uhSCG4FBL8ZykPxWp+mNygaAb1fG3u1wDP8Ns4DqJC15CsBa4JTdluVzGyD/ET5RbLa9 yHUw== X-Gm-Message-State: AOJu0YxbY3qA2nNPCgs+C1SIioYTrx8qKWWuFvC/eOrLCSl2/UkJaYn0 Q9/PGxS4rwabPj2/+VsYXRxe//FKmrOptw7dLWs15tJ8f0PbVoHNoocFXS0a5tBjjPGnKN5qT2r Mx5u9yqk5Lpci5LIXz4i/3R560vJukq/H9CjKjIbjvJ4o4rgC X-Google-Smtp-Source: AGHT+IHsOOyDtLUg08jbcqTpCgzHE5pRk3HvWf6Kc0EP7OLAuOvwTdw1i8kFrlXIk2or8xXYzx0XhoCMspSnArsSS6s= X-Received: by 2002:a05:6a20:9186:b0:1c3:a55e:6199 with SMTP id adf61e73a8af0-1c422997a27mr13467663637.44.1721681732918; Mon, 22 Jul 2024 13:55:32 -0700 (PDT) MIME-Version: 1.0 From: David Christensen Date: Mon, 22 Jul 2024 15:55:20 -0500 Message-ID: Subject: [PATCH] GROUP BY ALL To: pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000001ba0de061ddc4473" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001ba0de061ddc4473 Content-Type: text/plain; charset="UTF-8" I see that there'd been some chatter but not a lot of discussion about a GROUP BY ALL feature/functionality. There certainly is utility in such a construct IMHO. The grammar is unambiguous, so can support this construct in lieu of the traditional GROUP BY clause. Enclosed is a patch which adds this via just scanning the TargetEntry list and adding anything that is not an aggregate function call to the groupList. Still need some docs; just throwing this out there and getting some feedback. Thanks, David --0000000000001ba0de061ddc4473 Content-Type: application/octet-stream; name="0001-WIP-groupAll-to-automatically-add-columns-to-the-gro.patch" Content-Disposition: attachment; filename="0001-WIP-groupAll-to-automatically-add-columns-to-the-gro.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lyxgsayr0 RnJvbSBmOWQ3ZWU0MTBiMWQ2Y2VkNjQzODM5MzRiZTAxMmZmNWVjN2U0ZDNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBNb24sIDExIE1hciAyMDI0IDEwOjM3OjA1IC0wNDAwClN1 YmplY3Q6IFtQQVRDSF0gV0lQOiBncm91cEFsbCB0byBhdXRvbWF0aWNhbGx5IGFkZCBjb2x1bW5z IHRvIHRoZSBncm91cENsYXVzZQogbGlzdAoKLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6 ZS5jICAgICAgICAgICAgIHwgMzAgKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkgICAgICAgICAgICAgICAgfCAxNiArKysrKysrLQogc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2NsYXVzZS5jICAgICAgICB8ICA3ICsrLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYyAgICAgICAgfCA1MSArKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAgMiArCiBzcmMvaW5jbHVkZS9wYXJzZXIv cGFyc2VfY2xhdXNlLmggICAgICAgIHwgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGVzLm91dCB8IDQ2ICsrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVz cy9zcWwvYWdncmVnYXRlcy5zcWwgICAgICB8IDMyICsrKysrKysrKysrKysrKwogOCBmaWxlcyBj aGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXpl LmMKaW5kZXggMjhmZWQ5ZDg3Zi4uYWIzOGE0ZjNmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCkBAIC0x MzcxLDYgKzEzNzEsMjAgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0YXRlICpwc3RhdGUs IFNlbGVjdFN0bXQgKnN0bXQpCiAJcXJ5LT50YXJnZXRMaXN0ID0gdHJhbnNmb3JtVGFyZ2V0TGlz dChwc3RhdGUsIHN0bXQtPnRhcmdldExpc3QsCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRfU0VMRUNU X1RBUkdFVCk7CiAKKwkvKiBpZiBncm91cEJ5QWxsLCBleHBhbmQgdGFyZ2V0TGlzdCBpbnRvIGdy b3VwQ2xhdXNlLiBJbiB0aGlzIGNhc2UsIHdlIGNhbm5vdCBoYXZlIGFueSBvdGhlciBncm91cCBj bGF1c2VzLCBzbyB0aGlzIGlzIHNhZmUgKi8KKworCWlmIChzdG10LT5ncm91cEFsbCkKKwl7CisJ CUxpc3RDZWxsICpsMTsKKwkJLyogaXRlcmF0ZSBvdmVyIHRhcmdldHMsIGFueSBub24tYWdncmVn YXRlIGdldHMgYWRkZWQgYXMgYSBUYXJnZXQgKi8KKwkJZm9yZWFjaCAobDEscXJ5LT50YXJnZXRM aXN0KQorCQl7CisJCQlUYXJnZXRFbnRyeSAqbiA9IChUYXJnZXRFbnRyeSopbGZpcnN0KGwxKTsK KwkJCWlmICghSXNBKG4tPmV4cHIsQWdncmVmKSkKKwkJCQlxcnktPmdyb3VwQ2xhdXNlID0gYWRk VGFyZ2V0VG9Hcm91cExpc3QocHN0YXRlLCBuLCBxcnktPmdyb3VwQ2xhdXNlLCBxcnktPnRhcmdl dExpc3QsIDApOworCQl9CisJfQorCiAJLyogbWFyayBjb2x1bW4gb3JpZ2lucyAqLwogCW1hcmtU YXJnZXRMaXN0T3JpZ2lucyhwc3RhdGUsIHFyeS0+dGFyZ2V0TGlzdCk7CiAKQEAgLTEzOTQsMTQg KzE0MDgsMTYgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIFNlbGVj dFN0bXQgKnN0bXQpCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRfT1JERVJfQlksCiAJCQkJCQkJCQkJ ICBmYWxzZSAvKiBhbGxvdyBTUUw5MiBydWxlcyAqLyApOwogCi0JcXJ5LT5ncm91cENsYXVzZSA9 IHRyYW5zZm9ybUdyb3VwQ2xhdXNlKHBzdGF0ZSwKLQkJCQkJCQkJCQkJc3RtdC0+Z3JvdXBDbGF1 c2UsCi0JCQkJCQkJCQkJCSZxcnktPmdyb3VwaW5nU2V0cywKLQkJCQkJCQkJCQkJJnFyeS0+dGFy Z2V0TGlzdCwKLQkJCQkJCQkJCQkJcXJ5LT5zb3J0Q2xhdXNlLAotCQkJCQkJCQkJCQlFWFBSX0tJ TkRfR1JPVVBfQlksCi0JCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93IFNRTDkyIHJ1bGVzICovICk7 CisJaWYgKCFzdG10LT5ncm91cEFsbCkKKwkJcXJ5LT5ncm91cENsYXVzZSA9IHRyYW5zZm9ybUdy b3VwQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCXN0bXQtPmdyb3VwQ2xhdXNlLAorCQkJCQkJ CQkJCQkJJnFyeS0+Z3JvdXBpbmdTZXRzLAorCQkJCQkJCQkJCQkJJnFyeS0+dGFyZ2V0TGlzdCwK KwkJCQkJCQkJCQkJCXFyeS0+c29ydENsYXVzZSwKKwkJCQkJCQkJCQkJCUVYUFJfS0lORF9HUk9V UF9CWSwKKwkJCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93IFNRTDkyIHJ1bGVzICovICk7CiAJcXJ5 LT5ncm91cERpc3RpbmN0ID0gc3RtdC0+Z3JvdXBEaXN0aW5jdDsKKwlxcnktPmdyb3VwQWxsID0g c3RtdC0+Z3JvdXBBbGw7CiAKIAlpZiAoc3RtdC0+ZGlzdGluY3RDbGF1c2UgPT0gTklMKQogCXsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CmluZGV4IGEwNDNmZDRjNjYuLjdhOTY4ZDc1NjggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAt MTM1LDYgKzEzNSw3IEBAIHR5cGVkZWYgc3RydWN0IFNlbGVjdExpbWl0CiB0eXBlZGVmIHN0cnVj dCBHcm91cENsYXVzZQogewogCWJvb2wJCWRpc3RpbmN0OworCWJvb2wJCWFsbDsKIAlMaXN0CSAg ICpsaXN0OwogfSBHcm91cENsYXVzZTsKIApAQCAtMTI4NDUsNiArMTI4NDYsNyBAQCBzaW1wbGVf c2VsZWN0OgogCQkJCQluLT53aGVyZUNsYXVzZSA9ICQ2OwogCQkJCQluLT5ncm91cENsYXVzZSA9 ICgkNyktPmxpc3Q7CiAJCQkJCW4tPmdyb3VwRGlzdGluY3QgPSAoJDcpLT5kaXN0aW5jdDsKKwkJ CQkJbi0+Z3JvdXBBbGwgPSAoJDcpLT5hbGw7CiAJCQkJCW4tPmhhdmluZ0NsYXVzZSA9ICQ4Owog CQkJCQluLT53aW5kb3dDbGF1c2UgPSAkOTsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwpAQCAtMTI4 NjIsNiArMTI4NjQsNyBAQCBzaW1wbGVfc2VsZWN0OgogCQkJCQluLT53aGVyZUNsYXVzZSA9ICQ2 OwogCQkJCQluLT5ncm91cENsYXVzZSA9ICgkNyktPmxpc3Q7CiAJCQkJCW4tPmdyb3VwRGlzdGlu Y3QgPSAoJDcpLT5kaXN0aW5jdDsKKwkJCQkJbi0+Z3JvdXBBbGwgPSAoJDcpLT5hbGw7CiAJCQkJ CW4tPmhhdmluZ0NsYXVzZSA9ICQ4OwogCQkJCQluLT53aW5kb3dDbGF1c2UgPSAkOTsKIAkJCQkJ JCQgPSAoTm9kZSAqKSBuOwpAQCAtMTMzMzQsMTIgKzEzMzM3LDIxIEBAIGZpcnN0X29yX25leHQ6 IEZJUlNUX1AJCQkJCQkJCXsgJCQgPSAwOyB9CiAgKiBHcm91cGluZ1NldCBub2RlIG9mIHNvbWUg dHlwZS4KICAqLwogZ3JvdXBfY2xhdXNlOgotCQkJR1JPVVBfUCBCWSBzZXRfcXVhbnRpZmllciBn cm91cF9ieV9saXN0CisJCQlHUk9VUF9QIEJZIEFMTAorCQkJCXsKKwkJCQkJR3JvdXBDbGF1c2Ug Km4gPSAoR3JvdXBDbGF1c2UgKikgcGFsbG9jKHNpemVvZihHcm91cENsYXVzZSkpOworCQkJCQlu LT5kaXN0aW5jdCA9IGZhbHNlOworCQkJCQluLT5saXN0ID0gTklMOworCQkJCQluLT5hbGwgPSB0 cnVlOworCQkJCQkkJCA9IG47CisJCQkJfQorCQkJfCBHUk9VUF9QIEJZIHNldF9xdWFudGlmaWVy IGdyb3VwX2J5X2xpc3QKIAkJCQl7CiAJCQkJCUdyb3VwQ2xhdXNlICpuID0gKEdyb3VwQ2xhdXNl ICopIHBhbGxvYyhzaXplb2YoR3JvdXBDbGF1c2UpKTsKIAogCQkJCQluLT5kaXN0aW5jdCA9ICQz ID09IFNFVF9RVUFOVElGSUVSX0RJU1RJTkNUOwogCQkJCQluLT5saXN0ID0gJDQ7CisJCQkJCW4t PmFsbCA9IGZhbHNlOwogCQkJCQkkJCA9IG47CiAJCQkJfQogCQkJfCAvKkVNUFRZKi8KQEAgLTEz MzQ4LDYgKzEzMzYwLDcgQEAgZ3JvdXBfY2xhdXNlOgogCiAJCQkJCW4tPmRpc3RpbmN0ID0gZmFs c2U7CiAJCQkJCW4tPmxpc3QgPSBOSUw7CisJCQkJCW4tPmFsbCA9IGZhbHNlOwogCQkJCQkkJCA9 IG47CiAJCQkJfQogCQk7CkBAIC0xNzQ1Miw2ICsxNzQ2NSw3IEBAIFBMcGdTUUxfRXhwcjogb3B0 X2Rpc3RpbmN0X2NsYXVzZSBvcHRfdGFyZ2V0X2xpc3QKIAkJCQkJbi0+d2hlcmVDbGF1c2UgPSAk NDsKIAkJCQkJbi0+Z3JvdXBDbGF1c2UgPSAoJDUpLT5saXN0OwogCQkJCQluLT5ncm91cERpc3Rp bmN0ID0gKCQ1KS0+ZGlzdGluY3Q7CisJCQkJCW4tPmdyb3VwQWxsID0gKCQ1KS0+YWxsOwogCQkJ CQluLT5oYXZpbmdDbGF1c2UgPSAkNjsKIAkJCQkJbi0+d2luZG93Q2xhdXNlID0gJDc7CiAJCQkJ CW4tPnNvcnRDbGF1c2UgPSAkODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9jbGF1c2UuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwppbmRleCA4MTE4 MDM2NDk1Li5mZDk5MjljZWNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf Y2xhdXNlLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCkBAIC05Miw4 ICs5Miw2IEBAIHN0YXRpYyBpbnQJZ2V0X21hdGNoaW5nX2xvY2F0aW9uKGludCBzb3J0Z3JvdXBy ZWYsCiAJCQkJCQkJCSAgTGlzdCAqc29ydGdyb3VwcmVmcywgTGlzdCAqZXhwcnMpOwogc3RhdGlj IExpc3QgKnJlc29sdmVfdW5pcXVlX2luZGV4X2V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBJbmZl ckNsYXVzZSAqaW5mZXIsCiAJCQkJCQkJCQkgICBSZWxhdGlvbiBoZWFwUmVsKTsKLXN0YXRpYyBM aXN0ICphZGRUYXJnZXRUb0dyb3VwTGlzdChQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdldEVudHJ5 ICp0bGUsCi0JCQkJCQkJCSAgTGlzdCAqZ3JvdXBsaXN0LCBMaXN0ICp0YXJnZXRsaXN0LCBpbnQg bG9jYXRpb24pOwogc3RhdGljIFdpbmRvd0NsYXVzZSAqZmluZFdpbmRvd0NsYXVzZShMaXN0ICp3 Y2xpc3QsIGNvbnN0IGNoYXIgKm5hbWUpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUZyYW1lT2Zm c2V0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgaW50IGZyYW1lT3B0aW9ucywKIAkJCQkJCQkJICBPaWQg cmFuZ2VvcGZhbWlseSwgT2lkIHJhbmdlb3BjaW50eXBlLCBPaWQgKmluUmFuZ2VGdW5jLApAQCAt MjU5OCw2ICsyNTk2LDkgQEAgdHJhbnNmb3JtR3JvdXBpbmdTZXQoTGlzdCAqKmZsYXRyZXN1bHQs CiAgKiBHUk9VUCBCWSBpdGVtcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0YXJnZXRsaXN0IChhcyBy ZXNqdW5rIGNvbHVtbnMpCiAgKiBpZiBub3QgYWxyZWFkeSBwcmVzZW50LCBzbyB0aGUgdGFyZ2V0 bGlzdCBtdXN0IGJlIHBhc3NlZCBieSByZWZlcmVuY2UuCiAgKgorICogSWYgR1JPVVAgQlkgQUxM IGlzIHNwZWNpZmllZCwgdGhlIGdyb3VwQ2xhdXNlIHdpbGwgYmUgaW5mZXJyZWQgdG8gYmUgYWxs CisgKiBub24tYWdncmVnYXRlIGV4cHJlc3Npb25zIGluIHRoZSB0YXJnZXRMaXN0LgorICoKICAq IFRoaXMgaXMgYWxzbyB1c2VkIGZvciB3aW5kb3cgUEFSVElUSU9OIEJZIGNsYXVzZXMgKHdoaWNo IGFjdCBhbG1vc3QgdGhlCiAgKiBzYW1lLCBidXQgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCBwZXIg U1FMOTkgcnVsZXMpLgogICoKQEAgLTM1MzIsNyArMzUzMyw3IEBAIGFkZFRhcmdldFRvU29ydExp c3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAogICoKICAqIFJldHVybnMg dGhlIHVwZGF0ZWQgU29ydEdyb3VwQ2xhdXNlIGxpc3QuCiAgKi8KLXN0YXRpYyBMaXN0ICoKK0xp c3QgKgogYWRkVGFyZ2V0VG9Hcm91cExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRy eSAqdGxlLAogCQkJCQkgTGlzdCAqZ3JvdXBsaXN0LCBMaXN0ICp0YXJnZXRsaXN0LCBpbnQgbG9j YXRpb24pCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNjUzNjg1YmZmYy4uOWEw Njc0NzlkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtNTk2NSwzOCArNTk2NSw0 MyBAQCBnZXRfYmFzaWNfc2VsZWN0X3F1ZXJ5KFF1ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0LAogCiAJCWFwcGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIgR1JPVVAgQlkg IiwKIAkJCQkJCQkgLVBSRVRUWUlOREVOVF9TVEQsIFBSRVRUWUlOREVOVF9TVEQsIDEpOwotCQlp ZiAocXVlcnktPmdyb3VwRGlzdGluY3QpCi0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IkRJU1RJTkNUICIpOworCQlpZiAocXVlcnktPmdyb3VwQWxsKQorCQkJYXBwZW5kQ29udGV4dEtl eXdvcmQoY29udGV4dCwgIiBBTEwgIiwKKwkJCQkJCQkJIC1QUkVUVFlJTkRFTlRfU1RELCBQUkVU VFlJTkRFTlRfU1RELCAxKTsKKwkJZWxzZQorCQl7CisJCQlpZiAocXVlcnktPmdyb3VwRGlzdGlu Y3QpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJESVNUSU5DVCAiKTsKIAotCQlz YXZlX2V4cHJraW5kID0gY29udGV4dC0+c3BlY2lhbF9leHBya2luZDsKLQkJY29udGV4dC0+c3Bl Y2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9HUk9VUF9CWTsKKwkJCXNhdmVfZXhwcmtpbmQgPSBj b250ZXh0LT5zcGVjaWFsX2V4cHJraW5kOworCQkJY29udGV4dC0+c3BlY2lhbF9leHBya2luZCA9 IEVYUFJfS0lORF9HUk9VUF9CWTsKIAotCQlpZiAocXVlcnktPmdyb3VwaW5nU2V0cyA9PSBOSUwp Ci0JCXsKLQkJCXNlcCA9ICIiOwotCQkJZm9yZWFjaChsLCBxdWVyeS0+Z3JvdXBDbGF1c2UpCisJ CQlpZiAocXVlcnktPmdyb3VwaW5nU2V0cyA9PSBOSUwpCiAJCQl7Ci0JCQkJU29ydEdyb3VwQ2xh dXNlICpncnAgPSAoU29ydEdyb3VwQ2xhdXNlICopIGxmaXJzdChsKTsKKwkJCQlzZXAgPSAiIjsK KwkJCQlmb3JlYWNoKGwsIHF1ZXJ5LT5ncm91cENsYXVzZSkKKwkJCQl7CisJCQkJCVNvcnRHcm91 cENsYXVzZSAqZ3JwID0gKFNvcnRHcm91cENsYXVzZSAqKSBsZmlyc3QobCk7CiAKLQkJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgc2VwKTsKLQkJCQlnZXRfcnVsZV9zb3J0Z3JvdXBjbGF1 c2UoZ3JwLT50bGVTb3J0R3JvdXBSZWYsIHF1ZXJ5LT50YXJnZXRMaXN0LAotCQkJCQkJCQkJCSBm YWxzZSwgY29udGV4dCk7Ci0JCQkJc2VwID0gIiwgIjsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHNlcCk7CisJCQkJCWdldF9ydWxlX3NvcnRncm91cGNsYXVzZShncnAtPnRsZVNv cnRHcm91cFJlZiwgcXVlcnktPnRhcmdldExpc3QsCisJCQkJCQkJCQkJCSBmYWxzZSwgY29udGV4 dCk7CisJCQkJCXNlcCA9ICIsICI7CisJCQkJfQogCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJ c2VwID0gIiI7Ci0JCQlmb3JlYWNoKGwsIHF1ZXJ5LT5ncm91cGluZ1NldHMpCisJCQllbHNlCiAJ CQl7Ci0JCQkJR3JvdXBpbmdTZXQgKmdycCA9IGxmaXJzdChsKTsKKwkJCQlzZXAgPSAiIjsKKwkJ CQlmb3JlYWNoKGwsIHF1ZXJ5LT5ncm91cGluZ1NldHMpCisJCQkJeworCQkJCQlHcm91cGluZ1Nl dCAqZ3JwID0gbGZpcnN0KGwpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHNl cCk7Ci0JCQkJZ2V0X3J1bGVfZ3JvdXBpbmdzZXQoZ3JwLCBxdWVyeS0+dGFyZ2V0TGlzdCwgdHJ1 ZSwgY29udGV4dCk7Ci0JCQkJc2VwID0gIiwgIjsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIHNlcCk7CisJCQkJCWdldF9ydWxlX2dyb3VwaW5nc2V0KGdycCwgcXVlcnktPnRhcmdl dExpc3QsIHRydWUsIGNvbnRleHQpOworCQkJCQlzZXAgPSAiLCAiOworCQkJCX0KIAkJCX0KIAkJ fQotCiAJCWNvbnRleHQtPnNwZWNpYWxfZXhwcmtpbmQgPSBzYXZlX2V4cHJraW5kOwogCX0KIApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDg1YTYyYjUzOGUuLjVjZDM1MDhkNjMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKQEAgLTE5OSw2ICsxOTksNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeQog CiAJTGlzdAkgICAqZ3JvdXBDbGF1c2U7CS8qIGEgbGlzdCBvZiBTb3J0R3JvdXBDbGF1c2UncyAq LwogCWJvb2wJCWdyb3VwRGlzdGluY3Q7CS8qIGlzIHRoZSBncm91cCBieSBjbGF1c2UgZGlzdGlu Y3Q/ICovCisJYm9vbAkJZ3JvdXBBbGw7CS8qIGlzIHRoZSBncm91cCBieSBjbGF1c2UgZGlzdGlu Y3Q/ICovCiAKIAlMaXN0CSAgICpncm91cGluZ1NldHM7CS8qIGEgbGlzdCBvZiBHcm91cGluZ1Nl dCdzIGlmIHByZXNlbnQgKi8KIApAQCAtMjEzMSw2ICsyMTMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg U2VsZWN0U3RtdAogCU5vZGUJICAgKndoZXJlQ2xhdXNlOwkvKiBXSEVSRSBxdWFsaWZpY2F0aW9u ICovCiAJTGlzdAkgICAqZ3JvdXBDbGF1c2U7CS8qIEdST1VQIEJZIGNsYXVzZXMgKi8KIAlib29s CQlncm91cERpc3RpbmN0OwkvKiBJcyB0aGlzIEdST1VQIEJZIERJU1RJTkNUPyAqLworCWJvb2wJ CWdyb3VwQWxsOwkJLyogSXMgdGhpcyBHUk9VUCBCWSBBTEw/ICovCiAJTm9kZQkgICAqaGF2aW5n Q2xhdXNlOwkvKiBIQVZJTkcgY29uZGl0aW9uYWwtZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKndp bmRvd0NsYXVzZTsJLyogV0lORE9XIHdpbmRvd19uYW1lIEFTICguLi4pLCAuLi4gKi8KIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oIGIvc3JjL2luY2x1ZGUv cGFyc2VyL3BhcnNlX2NsYXVzZS5oCmluZGV4IGU3MTc2MmIxMGMuLjdkMzg2OTEyZjQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9jbGF1c2UuaAorKysgYi9zcmMvaW5jbHVk ZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKQEAgLTUwLDYgKzUwLDggQEAgZXh0ZXJuIExpc3QgKmFk ZFRhcmdldFRvU29ydExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAog CQkJCQkJCQkgTGlzdCAqc29ydGxpc3QsIExpc3QgKnRhcmdldGxpc3QsIFNvcnRCeSAqc29ydGJ5 KTsKIGV4dGVybiBJbmRleCBhc3NpZ25Tb3J0R3JvdXBSZWYoVGFyZ2V0RW50cnkgKnRsZSwgTGlz dCAqdGxpc3QpOwogZXh0ZXJuIGJvb2wgdGFyZ2V0SXNJblNvcnRMaXN0KFRhcmdldEVudHJ5ICp0 bGUsIE9pZCBzb3J0b3AsIExpc3QgKnNvcnRMaXN0KTsKK2V4dGVybiBMaXN0ICphZGRUYXJnZXRU b0dyb3VwTGlzdChQYXJzZVN0YXRlICpwc3RhdGUsIFRhcmdldEVudHJ5ICp0bGUsCisJCQkJCQkJ CSAgTGlzdCAqZ3JvdXBsaXN0LCBMaXN0ICp0YXJnZXRsaXN0LCBpbnQgbG9jYXRpb24pOwogCiAv KiBmdW5jdGlvbnMgaW4gcGFyc2VfanNvbnRhYmxlLmMgKi8KIGV4dGVybiBQYXJzZU5hbWVzcGFj ZUl0ZW0gKnRyYW5zZm9ybUpzb25UYWJsZShQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25UYWJsZSAq anQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKaW5kZXggYTU1OTZh YjIxMC4uM2UyZWJjNzZkNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMu b3V0CkBAIC0xNDU0LDYgKzE0NTQsNTIgQEAgZHJvcCB0YWJsZSB0MjsKIGRyb3AgdGFibGUgdDM7 CiBkcm9wIHRhYmxlIHBfdDE7CiAtLQorLS0gVGVzdCBHUk9VUCBCWSBBTEwKKy0tCitDUkVBVEUg VEVNUCBUQUJMRSB0MSAoCisgIGEgaW50LAorICBiIGludAorKTsKK0NPUFkgdDEgRlJPTSBTVERJ TjsKKy0tIGJhc2ljIGZpZWxkIGNoZWNrCitTRUxFQ1QgYiwgQ09VTlQoKikgRlJPTSB0MSBHUk9V UCBCWSBBTEw7CisgYiB8IGNvdW50IAorLS0tKy0tLS0tLS0KKyAzIHwgICAgIDIKKyAyIHwgICAg IDIKKyAxIHwgICAgIDEKKygzIHJvd3MpCisKKy0tIHRocm93IGEgbnVsbCBpbiB0aGUgdmFsdWVz IHRvbworU0VMRUNUIGEsIENPVU5UKGEpIEZST00gdDEgR1JPVVAgQlkgQUxMOworIGEgfCBjb3Vu dCAKKy0tLSstLS0tLS0tCisgICB8ICAgICAwCisgMSB8ICAgICA0CisoMiByb3dzKQorCistLSBt dWx0aXBsZSBjb2x1bW5zLCBub24tY29uc2VjdXRpdmUgb3JkZXIKK1NFTEVDVCBhLCBTVU0oYiks IGIgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgYSB8IHN1bSB8IGIgCistLS0rLS0tLS0rLS0tCisg MSB8ICAgMSB8IDEKKyAxIHwgICA2IHwgMworIDEgfCAgIDIgfCAyCisgICB8ICAgMiB8IDIKKyg0 IHJvd3MpCisKKy0tIG11bHRpIGNvbHVtbnMsIG5vIGFnZ3JlZ2F0ZQorU0VMRUNUIGEgKyBiIEZS T00gdDEgR1JPVVAgQlkgQUxMOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAgCisg ICAgICAgIDMKKyAgICAgICAgNAorICAgICAgICAyCisoNCByb3dzKQorCitEUk9QIFRBQkxFIHQx OworLS0KIC0tIFRlc3QgR1JPVVAgQlkgbWF0Y2hpbmcgb2Ygam9pbiBjb2x1bW5zIHRoYXQgYXJl IHR5cGUtY29lcmNlZCBkdWUgdG8gVVNJTkcKIC0tCiBjcmVhdGUgdGVtcCB0YWJsZSB0MShmMSBp bnQsIGYyIGludCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVz LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCmluZGV4IGNhNmQxYmNm YjcuLjQ2YjlkZjMzODkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0 ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCkBAIC01MTIs NiArNTEyLDM4IEBAIGRyb3AgdGFibGUgdDI7CiBkcm9wIHRhYmxlIHQzOwogZHJvcCB0YWJsZSBw X3QxOwogCisKKy0tCistLSBUZXN0IEdST1VQIEJZIEFMTAorLS0KKworQ1JFQVRFIFRFTVAgVEFC TEUgdDEgKAorICBhIGludCwKKyAgYiBpbnQKKyk7CisKK0NPUFkgdDEgRlJPTSBTVERJTjsKKzEJ MQorMQkyCisxCTMKK1xOCTIKKzEJMworXC4KKworLS0gYmFzaWMgZmllbGQgY2hlY2sKK1NFTEVD VCBiLCBDT1VOVCgqKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKworLS0gdGhyb3cgYSBudWxsIGlu IHRoZSB2YWx1ZXMgdG9vCitTRUxFQ1QgYSwgQ09VTlQoYSkgRlJPTSB0MSBHUk9VUCBCWSBBTEw7 CisKKy0tIG11bHRpcGxlIGNvbHVtbnMsIG5vbi1jb25zZWN1dGl2ZSBvcmRlcgorU0VMRUNUIGEs IFNVTShiKSwgYiBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKworLS0gbXVsdGkgY29sdW1ucywgbm8g YWdncmVnYXRlCitTRUxFQ1QgYSArIGIgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisKK0RST1AgVEFC TEUgdDE7CisKIC0tCiAtLSBUZXN0IEdST1VQIEJZIG1hdGNoaW5nIG9mIGpvaW4gY29sdW1ucyB0 aGF0IGFyZSB0eXBlLWNvZXJjZWQgZHVlIHRvIFVTSU5HCiAtLQotLSAKMi40MC4xCgo= --0000000000001ba0de061ddc4473--