Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkqG8-00073b-MH for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2019 13:34:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hkqG6-0000FN-NO for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jul 2019 13:34:14 +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_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkqEK-00048R-Dq for pgsql-hackers@lists.postgresql.org; Tue, 09 Jul 2019 13:32:24 +0000 Received: from mail-qt1-f196.google.com ([209.85.160.196]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkqEH-00071T-4D for pgsql-hackers@postgresql.org; Tue, 09 Jul 2019 13:32:23 +0000 Received: by mail-qt1-f196.google.com with SMTP id d23so21647334qto.2 for ; Tue, 09 Jul 2019 06:32:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:subject:to:cc:references:from :organization:message-id:date:user-agent:mime-version:in-reply-to :content-language; bh=1aUfJGXYhQz8G3o133EaGdqF7kSvruujdaC53exSdNc=; b=NxlMni/uXm0k3XrcGpyXMbpf9siI/4ewz9o9uNbj14mKweQWCnx46/uZByUBlidy31 MQVfa5pgmxnJd/Y0lOqVg+tFNGFf63NkW87CLGChV0rKYocCIuiyPBwsIWuS+6aj6eu4 HbaCmABU4MEf1B3vPoYT3Wl1EXrQLvW1+Dhw8gciOYO/BtYZ2+XgNPOUUrOvm+DUX6OS V5JehvyapRTxMlR7/XklnOXJwDxQThjwx4KP4FaPoTw+mcp148jGlhnuqtDj6QO6DPj9 8i4Du8gl58u0ZyA/i7XdwFybSesyfAHuCKTUknNWPyEidUdlON8gR4AioWPQ1csTUhKj Ffrw== X-Gm-Message-State: APjAAAWF9jsNAZF7EIgKUuECJN/drRj49sRszyX61uFj0mvRXFA+nbZ1 et/1KK+eKfUGCnu9CZ4IR2WW1Q== X-Google-Smtp-Source: APXvYqy76gqifuedIWFRt/bmHDmPz+zNFIyyfU6rgMg3gjSCy5Fr49uZsjITCi9/D8WrQc5VFvlP6w== X-Received: by 2002:a0c:9e27:: with SMTP id p39mr19504715qve.151.1562679139083; Tue, 09 Jul 2019 06:32:19 -0700 (PDT) Received: from localhost.localdomain (c-24-61-8-151.hsd1.ma.comcast.net. [24.61.8.151]) by smtp.gmail.com with ESMTPSA id e8sm9244847qkn.95.2019.07.09.06.32.17 (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Tue, 09 Jul 2019 06:32:18 -0700 (PDT) Reply-To: jesper.pedersen@redhat.com Subject: Re: Index Skip Scan To: Thomas Munro , David Rowley Cc: Dmitry Dolgov <9erthalion6@gmail.com>, Floris Van Nee , James Coleman , Rafia Sabih , Jeff Janes , Peter Geoghegan , Tomas Vondra , Thomas Munro , Bhushan Uparkar , PostgreSQL-development , Alexander Korotkov References: <2685f020-f302-9bf6-1b5c-ebc2bcebc635@2ndquadrant.com> <1559361698401.22864@Optiver.com> <1559362223126.18661@Optiver.com> <988b7763-5c55-1be1-b7b6-f3a68eff0d40@redhat.com> <1559763453006.85615@Optiver.com> <1559763570329.85227@Optiver.com> <4d469bf2-49ff-bc3d-a428-6c7b5d87d526@redhat.com> From: Jesper Pedersen Organization: Red Hat Message-ID: <3e5f8a7d-67a4-46c8-e113-0a7e2dad2db6@redhat.com> Date: Tue, 9 Jul 2019 09:32:16 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------FDF608F806D62E6E21DCCA98" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------FDF608F806D62E6E21DCCA98 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 7/4/19 6:59 AM, Thomas Munro wrote: >> For the MIN query you just need a path with Pathkeys: { i ASC, j ASC >> }, UniqueKeys: { i, j }, doing the MAX query you just need j DESC. > David, are you thinking about something like the attached ? Some questions. * Do you see UniqueKey as a "complete" planner node ? - I didn't update the nodes/*.c files for this yet * Is a UniqueKey with a list of EquivalenceClass best, or a list of UniqueKey with a single EquivalenceClass Likely more questions around this coming -- should this be a separate thread ? Based on this I'll start to update the v21 patch to use UniqueKey, and post a new version. > While updating the Loose Index Scan wiki page with links to other > products' terminology on this subject, I noticed that MySQL can > skip-scan MIN() and MAX() in the same query. Hmm. That seems quite > desirable. I think it requires a new kind of skipping: I think you > have to be able to skip to the first AND last key that has each > distinct prefix, and then stick a regular agg on top to collapse them > into one row. Such a path would not be so neatly describable by > UniqueKeys, or indeed by the amskip() interface in the current patch. > I mention all this stuff not because I want us to run before we can > walk, but because to be ready to commit the basic distinct skip scan > feature, I think we should know approximately how it'll handle the > future stuff we'll need. > Thomas, do you have any ideas for this ? I can see that MySQL did the functionality in two change sets (base and function support), but like you said we shouldn't paint ourselves into a corner. Feedback greatly appreciated. Best regards, Jesper --------------FDF608F806D62E6E21DCCA98 Content-Type: text/plain; charset=UTF-8; name="uniquekey.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="uniquekey.txt" ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3ByaW50LmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9wcmludC5jCmluZGV4IDRiOWUxNDE0MDQuLjJlMDdkYjJlNmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL25vZGVzL3ByaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcHJp bnQuYwpAQCAtNDU5LDYgKzQ1OSw0NCBAQCBwcmludF9wYXRoa2V5cyhjb25zdCBMaXN0ICpw YXRoa2V5cywgY29uc3QgTGlzdCAqcnRhYmxlKQogCXByaW50ZigiKVxuIik7CiB9CiAKKy8q CisgKiBwcmludF91bmlxdWVfa2V5IC0KKyAqCSAgdW5pcXVlX2tleSBhbiBVbmlxdWVLZXkK KyAqLwordm9pZAorcHJpbnRfdW5pcXVlX2tleShjb25zdCBVbmlxdWVLZXkgKnVuaXF1ZV9r ZXksIGNvbnN0IExpc3QgKnJ0YWJsZSkKK3sKKwlMaXN0Q2VsbCAgICpsOworCisJcHJpbnRm KCIoIik7CisJZm9yZWFjaChsLCB1bmlxdWVfa2V5LT5lcV9jbGF1c2VzKQorCXsKKwkJRXF1 aXZhbGVuY2VDbGFzcyAqZWNsYXNzID0gKEVxdWl2YWxlbmNlQ2xhc3MgKikgbGZpcnN0KGwp OworCQlMaXN0Q2VsbCAgICprOworCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJLyogY2hh c2UgdXAgKi8KKwkJd2hpbGUgKGVjbGFzcy0+ZWNfbWVyZ2VkKQorCQkJZWNsYXNzID0gZWNs YXNzLT5lY19tZXJnZWQ7CisKKwkJcHJpbnRmKCIoIik7CisJCWZvcmVhY2goaywgZWNsYXNz LT5lY19tZW1iZXJzKQorCQl7CisJCQlFcXVpdmFsZW5jZU1lbWJlciAqbWVtID0gKEVxdWl2 YWxlbmNlTWVtYmVyICopIGxmaXJzdChrKTsKKworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0 ID0gZmFsc2U7CisJCQllbHNlCisJCQkJcHJpbnRmKCIsICIpOworCQkJcHJpbnRfZXhwcigo Tm9kZSAqKSBtZW0tPmVtX2V4cHIsIHJ0YWJsZSk7CisJCX0KKwkJcHJpbnRmKCIpIik7CisJ CWlmIChsbmV4dChsKSkKKwkJCXByaW50ZigiLCAiKTsKKwl9CisJcHJpbnRmKCIpXG4iKTsK K30KKwogLyoKICAqIHByaW50X3RsCiAgKgkgIHByaW50IHRhcmdldGxpc3QgaW4gYSBtb3Jl IGxlZ2libGUgd2F5LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9NYWtlZmlsZQppbmRleCA2 ODY0YTYyMTMyLi44MjQ5YTZiNmRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9NYWtl ZmlsZQpAQCAtMTMsNiArMTMsNiBAQCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgogaW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBPQkpTID0gYWxs cGF0aHMubyBjbGF1c2VzZWwubyBjb3N0c2l6ZS5vIGVxdWl2Y2xhc3MubyBpbmR4cGF0aC5v IFwKLSAgICAgICBqb2lucGF0aC5vIGpvaW5yZWxzLm8gcGF0aGtleXMubyB0aWRwYXRoLm8K KyAgICAgICBqb2lucGF0aC5vIGpvaW5yZWxzLm8gcGF0aGtleXMubyB0aWRwYXRoLm8gdW5p cXVla2V5Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5t awpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggYjc3MjM0ODFi MC4uYThjOGZlOGEzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j CkBAIC0zOTU3LDYgKzM5NTcsMTQgQEAgcHJpbnRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwg UGF0aCAqcGF0aCwgaW50IGluZGVudCkKIAkJcHJpbnRfcGF0aGtleXMocGF0aC0+cGF0aGtl eXMsIHJvb3QtPnBhcnNlLT5ydGFibGUpOwogCX0KIAorCWlmIChwYXRoLT51bmlxdWVfa2V5 KQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGluZGVudDsgaSsrKQorCQkJcHJpbnRmKCJcdCIp OworCQlwcmludGYoIiAgdW5pcXVlX2tleTogIik7CisJCXByaW50X3VuaXF1ZV9rZXkocGF0 aC0+dW5pcXVlX2tleSwgcm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisJfQorCiAJaWYgKGpvaW4p CiAJewogCQlKb2luUGF0aCAgICpqcCA9IChKb2luUGF0aCAqKSBwYXRoOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYTJhOWIxZjdiZS4uZGJkMGJiZjNk YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC03MDUsNiAr NzA1LDExIEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9v dCwgZG91YmxlIGxvb3BfY291bnQsCiAJCXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSB0 cnVlOwogCX0KIAorCS8qIENvbnNpZGVyIGNvc3QgYmFzZWQgb24gdW5pcXVlIGtleSAqLwor CWlmIChwYXRoLT5wYXRoLnVuaXF1ZV9rZXkpCisJeworCX0KKwogCS8qCiAJICogTm93IGlu dGVycG9sYXRlIGJhc2VkIG9uIGVzdGltYXRlZCBpbmRleCBvcmRlciBjb3JyZWxhdGlvbiB0 byBnZXQgdG90YWwKIAkgKiBkaXNrIEkvTyBjb3N0IGZvciBtYWluIHRhYmxlIGFjY2Vzc2Vz LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5LmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC91bmlxdWVrZXkuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iNGI5NDMyY2U1Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5LmMKQEAgLTAsMCArMSw2 NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdW5pcXVla2V5LmMKKyAqCSAg VXRpbGl0aWVzIGZvciBtYXRjaGluZyBhbmQgYnVpbGRpbmcgdW5pcXVlIGtleXMKKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxOSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklD QVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdW5pcXVla2V5LmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisK KyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aHMuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCisKKy8qCisgKiBCdWlsZCBh IHVuaXF1ZSBrZXksIGlmIHRoZSBpbmRleCBxdWVyeSBoYXMgc29tZSBkZWZpbmVkCisgKi8K K1VuaXF1ZUtleSoKK2J1aWxkX2luZGV4X3VuaXF1ZWtleShQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqcGF0aGtleXMpCit7CisJVW5pcXVlS2V5ICp1bmlxdWVfa2V5ID0gTlVMTDsKKwlM aXN0Q2VsbCAqbDsKKworCWlmIChwYXRoa2V5cykKKwl7CisJCS8qIEZpbmQgdW5pcXVlIGtl eXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBsaXN0ICovCisJCWZvcmVhY2gobCwgcGF0aGtleXMp CisJCXsKKwkJCUxpc3RDZWxsICprOworCQkJUGF0aEtleSAqcGsgPSAoUGF0aEtleSAqKSBs Zmlyc3QobCk7CisJCQlFcXVpdmFsZW5jZUNsYXNzICplYyA9IChFcXVpdmFsZW5jZUNsYXNz ICopIHBrLT5wa19lY2xhc3M7CisKKwkJCXdoaWxlIChlYy0+ZWNfbWVyZ2VkKQorCQkJCWVj ID0gZWMtPmVjX21lcmdlZDsKKworCQkJaWYgKHJvb3QtPmRpc3RpbmN0X3BhdGhrZXlzKQor CQkJeworCQkJCWZvcmVhY2goaywgcm9vdC0+ZGlzdGluY3RfcGF0aGtleXMpCisJCQkJewor CQkJCQlQYXRoS2V5ICpwayA9IChQYXRoS2V5ICopIGxmaXJzdChrKTsKKwkJCQkJRXF1aXZh bGVuY2VDbGFzcyAqZGVjID0gcGstPnBrX2VjbGFzczsKKworCQkJCQl3aGlsZSAoZGVjLT5l Y19tZXJnZWQpCisJCQkJCQlkZWMgPSBkZWMtPmVjX21lcmdlZDsKKworCQkJCQlpZiAoZWMg PT0gZGVjKQorCQkJCQl7CisJCQkJCQlpZiAoIXVuaXF1ZV9rZXkpCisJCQkJCQkJdW5pcXVl X2tleSA9IG1ha2VOb2RlKFVuaXF1ZUtleSk7CisKKwkJCQkJCXVuaXF1ZV9rZXktPmVxX2Ns YXVzZXMgPSBsYXBwZW5kKHVuaXF1ZV9rZXktPmVxX2NsYXVzZXMsIGVjKTsKKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB1bmlxdWVfa2V5OworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggZDg4NGQyYmIwMC4uM2YzYWE2 ZTU3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC05NjYs NiArOTY2LDcgQEAgY3JlYXRlX3NlcXNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCXBhdGhub2RlLT5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRl cl9wYXJhbGxlbDsKIAlwYXRobm9kZS0+cGFyYWxsZWxfd29ya2VycyA9IHBhcmFsbGVsX3dv cmtlcnM7CiAJcGF0aG5vZGUtPnBhdGhrZXlzID0gTklMOwkvKiBzZXFzY2FuIGhhcyB1bm9y ZGVyZWQgcmVzdWx0ICovCisJcGF0aG5vZGUtPnVuaXF1ZV9rZXkgPSBOVUxMOwogCiAJY29z dF9zZXFzY2FuKHBhdGhub2RlLCByb290LCByZWwsIHBhdGhub2RlLT5wYXJhbV9pbmZvKTsK IApAQCAtOTkwLDYgKzk5MSw3IEBAIGNyZWF0ZV9zYW1wbGVzY2FuX3BhdGgoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmVsaWRzIHJlcXVpcmVkX291dGVyCiAJcGF0 aG5vZGUtPnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCXBhdGhu b2RlLT5wYXJhbGxlbF93b3JrZXJzID0gMDsKIAlwYXRobm9kZS0+cGF0aGtleXMgPSBOSUw7 CS8qIHNhbXBsZXNjYW4gaGFzIHVub3JkZXJlZCByZXN1bHQgKi8KKwlwYXRobm9kZS0+dW5p cXVlX2tleSA9IE5VTEw7CiAKIAljb3N0X3NhbXBsZXNjYW4ocGF0aG5vZGUsIHJvb3QsIHJl bCwgcGF0aG5vZGUtPnBhcmFtX2luZm8pOwogCkBAIC0xMDQ0LDYgKzEwNDYsNyBAQCBjcmVh dGVfaW5kZXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJh bGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXJhbGxlbF93b3JrZXJzID0gMDsKIAlwYXRobm9kZS0+cGF0aC5wYXRoa2V5cyA9IHBhdGhr ZXlzOworCXBhdGhub2RlLT5wYXRoLnVuaXF1ZV9rZXkgPSBidWlsZF9pbmRleF91bmlxdWVr ZXkocm9vdCwgcGF0aGtleXMpOwogCiAJcGF0aG5vZGUtPmluZGV4aW5mbyA9IGluZGV4Owog CXBhdGhub2RlLT5pbmRleGNsYXVzZXMgPSBpbmRleGNsYXVzZXM7CkBAIC0xMDg3LDYgKzEw OTAsNyBAQCBjcmVhdGVfYml0bWFwX2hlYXBfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlw YXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsK IAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID0gcGFyYWxsZWxfZGVncmVlOwog CXBhdGhub2RlLT5wYXRoLnBhdGhrZXlzID0gTklMOwkvKiBhbHdheXMgdW5vcmRlcmVkICov CisJcGF0aG5vZGUtPnBhdGgudW5pcXVlX2tleSA9IE5VTEw7CiAKIAlwYXRobm9kZS0+Yml0 bWFwcXVhbCA9IGJpdG1hcHF1YWw7CiAKQEAgLTE5NDcsNiArMTk1MSw3IEBAIGNyZWF0ZV9m dW5jdGlvbnNjYW5fcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CXBhdGhub2RlLT5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlw YXRobm9kZS0+cGFyYWxsZWxfd29ya2VycyA9IDA7CiAJcGF0aG5vZGUtPnBhdGhrZXlzID0g cGF0aGtleXM7CisJcGF0aG5vZGUtPnVuaXF1ZV9rZXkgPSBOVUxMOwogCiAJY29zdF9mdW5j dGlvbnNjYW4ocGF0aG5vZGUsIHJvb3QsIHJlbCwgcGF0aG5vZGUtPnBhcmFtX2luZm8pOwog CkBAIC0xOTczLDYgKzE5NzgsNyBAQCBjcmVhdGVfdGFibGVmdW5jc2Nhbl9wYXRoKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJcGF0aG5vZGUtPnBhcmFsbGVsX3Nh ZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCXBhdGhub2RlLT5wYXJhbGxlbF93b3Jr ZXJzID0gMDsKIAlwYXRobm9kZS0+cGF0aGtleXMgPSBOSUw7CS8qIHJlc3VsdCBpcyBhbHdh eXMgdW5vcmRlcmVkICovCisJcGF0aG5vZGUtPnVuaXF1ZV9rZXkgPSBOVUxMOwogCiAJY29z dF90YWJsZWZ1bmNzY2FuKHBhdGhub2RlLCByb290LCByZWwsIHBhdGhub2RlLT5wYXJhbV9p bmZvKTsKIApAQCAtMTk5OSw2ICsyMDA1LDcgQEAgY3JlYXRlX3ZhbHVlc3NjYW5fcGF0aChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXBhdGhub2RlLT5wYXJhbGxl bF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlwYXRobm9kZS0+cGFyYWxsZWxf d29ya2VycyA9IDA7CiAJcGF0aG5vZGUtPnBhdGhrZXlzID0gTklMOwkvKiByZXN1bHQgaXMg YWx3YXlzIHVub3JkZXJlZCAqLworCXBhdGhub2RlLT51bmlxdWVfa2V5ID0gTlVMTDsKIAog CWNvc3RfdmFsdWVzc2NhbihwYXRobm9kZSwgcm9vdCwgcmVsLCBwYXRobm9kZS0+cGFyYW1f aW5mbyk7CiAKQEAgLTIwMjQsNiArMjAzMSw3IEBAIGNyZWF0ZV9jdGVzY2FuX3BhdGgoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmVsaWRzIHJlcXVpcmVkX291dGVy KQogCXBhdGhub2RlLT5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsK IAlwYXRobm9kZS0+cGFyYWxsZWxfd29ya2VycyA9IDA7CiAJcGF0aG5vZGUtPnBhdGhrZXlz ID0gTklMOwkvKiBYWFggZm9yIG5vdywgcmVzdWx0IGlzIGFsd2F5cyB1bm9yZGVyZWQgKi8K KwlwYXRobm9kZS0+dW5pcXVlX2tleSA9IE5VTEw7CiAKIAljb3N0X2N0ZXNjYW4ocGF0aG5v ZGUsIHJvb3QsIHJlbCwgcGF0aG5vZGUtPnBhcmFtX2luZm8pOwogCkBAIC0yMDUwLDYgKzIw NTgsNyBAQCBjcmVhdGVfbmFtZWR0dXBsZXN0b3Jlc2Nhbl9wYXRoKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwsCiAJcGF0aG5vZGUtPnBhcmFsbGVsX3NhZmUgPSByZWwt PmNvbnNpZGVyX3BhcmFsbGVsOwogCXBhdGhub2RlLT5wYXJhbGxlbF93b3JrZXJzID0gMDsK IAlwYXRobm9kZS0+cGF0aGtleXMgPSBOSUw7CS8qIHJlc3VsdCBpcyBhbHdheXMgdW5vcmRl cmVkICovCisJcGF0aG5vZGUtPnVuaXF1ZV9rZXkgPSBOVUxMOwogCiAJY29zdF9uYW1lZHR1 cGxlc3RvcmVzY2FuKHBhdGhub2RlLCByb290LCByZWwsIHBhdGhub2RlLT5wYXJhbV9pbmZv KTsKIApAQCAtMjA3Niw2ICsyMDg1LDcgQEAgY3JlYXRlX3Jlc3VsdHNjYW5fcGF0aChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXBhdGhub2RlLT5wYXJhbGxlbF9z YWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbDsKIAlwYXRobm9kZS0+cGFyYWxsZWxfd29y a2VycyA9IDA7CiAJcGF0aG5vZGUtPnBhdGhrZXlzID0gTklMOwkvKiByZXN1bHQgaXMgYWx3 YXlzIHVub3JkZXJlZCAqLworCXBhdGhub2RlLT51bmlxdWVfa2V5ID0gTlVMTDsKIAogCWNv c3RfcmVzdWx0c2NhbihwYXRobm9kZSwgcm9vdCwgcmVsLCBwYXRobm9kZS0+cGFyYW1faW5m byk7CiAKQEAgLTIxMDIsNiArMjExMiw3IEBAIGNyZWF0ZV93b3JrdGFibGVzY2FuX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlwYXRobm9kZS0+cGFyYWxs ZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAJcGF0aG5vZGUtPnBhcmFsbGVs X3dvcmtlcnMgPSAwOwogCXBhdGhub2RlLT5wYXRoa2V5cyA9IE5JTDsJLyogcmVzdWx0IGlz IGFsd2F5cyB1bm9yZGVyZWQgKi8KKwlwYXRobm9kZS0+dW5pcXVlX2tleSA9IE5VTEw7CiAK IAkvKiBDb3N0IGlzIHRoZSBzYW1lIGFzIGZvciBhIHJlZ3VsYXIgQ1RFIHNjYW4gKi8KIAlj b3N0X2N0ZXNjYW4ocGF0aG5vZGUsIHJvb3QsIHJlbCwgcGF0aG5vZGUtPnBhcmFtX2luZm8p OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL25vZGVzLmgKaW5kZXggNGUyZmIzOTEwNS4uYTliNjdjNjRmOCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9u b2Rlcy5oCkBAIC0yNjEsNiArMjYxLDcgQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX0Vx dWl2YWxlbmNlTWVtYmVyLAogCVRfUGF0aEtleSwKIAlUX1BhdGhUYXJnZXQsCisJVF9Vbmlx dWVLZXksCiAJVF9SZXN0cmljdEluZm8sCiAJVF9JbmRleENsYXVzZSwKIAlUX1BsYWNlSG9s ZGVyVmFyLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA0NDFlNjRlY2E5Li40YWM2MjA3 NzA1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTA3MSw2ICsxMDcxLDE1IEBAIHR5 cGVkZWYgc3RydWN0IFBhcmFtUGF0aEluZm8KIAlMaXN0CSAgICpwcGlfY2xhdXNlczsJLyog am9pbiBjbGF1c2VzIGF2YWlsYWJsZSBmcm9tIG91dGVyIHJlbHMgKi8KIH0gUGFyYW1QYXRo SW5mbzsKIAorLyoKKyAqIFVuaXF1ZUtleQorICovCit0eXBlZGVmIHN0cnVjdCBVbmlxdWVL ZXkKK3sKKwlOb2RlVGFnCQl0eXBlOworCisJTGlzdAkgICAqZXFfY2xhdXNlczsJLyogZXF1 aXZhbGVuY2UgY2xhc3MgKi8KK30gVW5pcXVlS2V5OwogCiAvKgogICogVHlwZSAiUGF0aCIg aXMgdXNlZCBhcy1pcyBmb3Igc2VxdWVudGlhbC1zY2FuIHBhdGhzLCBhcyB3ZWxsIGFzIHNv bWUgb3RoZXIKQEAgLTExMDAsNiArMTEwOSw5IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFtUGF0 aEluZm8KICAqCiAgKiAicGF0aGtleXMiIGlzIGEgTGlzdCBvZiBQYXRoS2V5IG5vZGVzIChz ZWUgYWJvdmUpLCBkZXNjcmliaW5nIHRoZSBzb3J0CiAgKiBvcmRlcmluZyBvZiB0aGUgcGF0 aCdzIG91dHB1dCByb3dzLgorICoKKyAqICJ1bmlxdWVfa2V5IiwgaWYgbm90IE5VTEwsIGlz IGEgVW5pcXVlS2V5IG5vZGUgKHNlZSBhYm92ZSksCisgKiBkZXNjcmliaW5nIHRoZSBYWFgu CiAgKi8KIHR5cGVkZWYgc3RydWN0IFBhdGgKIHsKQEAgLTExMjMsNiArMTEzNSw4IEBAIHR5 cGVkZWYgc3RydWN0IFBhdGgKIAogCUxpc3QJICAgKnBhdGhrZXlzOwkJLyogc29ydCBvcmRl cmluZyBvZiBwYXRoJ3Mgb3V0cHV0ICovCiAJLyogcGF0aGtleXMgaXMgYSBMaXN0IG9mIFBh dGhLZXkgbm9kZXM7IHNlZSBhYm92ZSAqLworCisJVW5pcXVlS2V5ICAqdW5pcXVlX2tleTsJ CS8qIHRoZSB1bmlxdWUga2V5LCBvciBOVUxMIGlmIG5vbmUgKi8KIH0gUGF0aDsKIAogLyog TWFjcm8gZm9yIGV4dHJhY3RpbmcgYSBwYXRoJ3MgcGFyYW1ldGVyaXphdGlvbiByZWxpZHM7 IGJld2FyZSBkb3VibGUgZXZhbCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbnQuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW50LmgKaW5kZXggY2JmZjU2YTcyNC4u NGFjMzU5YTUwZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbnQuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmludC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5l IFBSSU5UX0gKIAogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCiAKIAogI2RlZmluZSBub2RlRGlzcGxheSh4KQkJcHByaW50 KHgpCkBAIC0yOCw2ICsyOSw3IEBAIGV4dGVybiBjaGFyICpwcmV0dHlfZm9ybWF0X25vZGVf ZHVtcChjb25zdCBjaGFyICpkdW1wKTsKIGV4dGVybiB2b2lkIHByaW50X3J0KGNvbnN0IExp c3QgKnJ0YWJsZSk7CiBleHRlcm4gdm9pZCBwcmludF9leHByKGNvbnN0IE5vZGUgKmV4cHIs IGNvbnN0IExpc3QgKnJ0YWJsZSk7CiBleHRlcm4gdm9pZCBwcmludF9wYXRoa2V5cyhjb25z dCBMaXN0ICpwYXRoa2V5cywgY29uc3QgTGlzdCAqcnRhYmxlKTsKK2V4dGVybiB2b2lkIHBy aW50X3VuaXF1ZV9rZXkoY29uc3QgVW5pcXVlS2V5ICp1bmlxdWVfa2V5LCBjb25zdCBMaXN0 ICpydGFibGUpOwogZXh0ZXJuIHZvaWQgcHJpbnRfdGwoY29uc3QgTGlzdCAqdGxpc3QsIGNv bnN0IExpc3QgKnJ0YWJsZSk7CiBleHRlcm4gdm9pZCBwcmludF9zbG90KFR1cGxlVGFibGVT bG90ICpzbG90KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhz LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCA3MzQ1MTM3ZDFkLi5m MTNkODI2NzE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAor KysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjM1LDQgKzIzNSwxMCBA QCBleHRlcm4gUGF0aEtleSAqbWFrZV9jYW5vbmljYWxfcGF0aGtleShQbGFubmVySW5mbyAq cm9vdCwKIGV4dGVybiB2b2lkIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQlMaXN0ICpsaXZlX2NoaWxkcmVs cyk7CiAKKy8qCisgKiB1bmlxdWVrZXkuYworICoJICBVdGlsaXRpZXMgZm9yIG1hdGNoaW5n IGFuZCBidWlsZGluZyBhIHVuaXF1ZSBrZXkKKyAqLworZXh0ZXJuIFVuaXF1ZUtleSAqYnVp bGRfaW5kZXhfdW5pcXVla2V5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpwYXRoa2V5cyk7 CisKICNlbmRpZgkJCQkJCQkvKiBQQVRIU19IICovCg== --------------FDF608F806D62E6E21DCCA98--