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.96) (envelope-from ) id 1wK4Z6-000YPr-06 for pgsql-performance@arkaria.postgresql.org; Tue, 05 May 2026 01:27:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wK4Z4-009UGX-2W for pgsql-performance@arkaria.postgresql.org; Tue, 05 May 2026 01:27:10 +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.96) (envelope-from ) id 1wK4Z3-009UGP-2u for pgsql-performance@lists.postgresql.org; Tue, 05 May 2026 01:27:10 +0000 Received: from mail-dy1-x1330.google.com ([2607:f8b0:4864:20::1330]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wK4Yz-00000000EU1-2Z4M for pgsql-performance@lists.postgresql.org; Tue, 05 May 2026 01:27:08 +0000 Received: by mail-dy1-x1330.google.com with SMTP id 5a478bee46e88-2ba9c484e5eso5181479eec.1 for ; Mon, 04 May 2026 18:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1777944425; x=1778549225; darn=lists.postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=qufwk+9vmxw8lyzIBnAD/Vvq+/wgU7KJEie2eZiaSxQ=; b=T6IUe0oExf7z4LZFnZHqQtGjUEl7tYW8IfskGVebbofVyb3g3yZzaIAaEfdSbEWwKZ gEv/Wcw7IlTj7E3EpVr3lyCzQFgXGr1So13Gx5ceMMonsOJoML259C5TtB1zav15WfJR icBqOO7JBj+HOK0y2b2WuqEcik/O+PGogN/cw2Rr1jSPQQCfC6+PXaIeUINRJUR7zvc2 txevuHSUwIQ9Tc4gNK01dDW4krsNTZVmzWGe/I6MS5lELmlowSc6F/Dcip23fa0zcnCp BgcquN9LzQUqJ2Nd7X3cQQWjYyIC2Ff9bWSV477+oks81pH20t23mUY7yGfQH0G7FyN/ EOwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777944425; x=1778549225; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=qufwk+9vmxw8lyzIBnAD/Vvq+/wgU7KJEie2eZiaSxQ=; b=KMAlir417F+DgH51om56SdBdW+oSz2EMR62/8cGy3Q06KAUFt3xl+k1ZeZif+dNn0F 29CKw+gS45gr0l8cGnbwR5rYfy5w5xjd/PimZKzqrT4A1bzK+2GF1pFZt+T/s65valCE XJw9PS4QOwqJBxWvVRImdgKSp3Ko02LXh4STNIKIs+6nbBVx5dQ6JVoB4bIPtZ0iyHPc i2M+BY5ZmoUpSqDMD42AD8s2dmYRJp/TDakqRtV1Mbdel1251JWkfpVVue8SFYRnwM3I R/5il5ZoKbMCyyOGnJzxQl3IcDDuVhodQGDZy5CuVcVRHegTPJUOFhP0lHWwBdeV26Xx EkHg== X-Forwarded-Encrypted: i=1; AFNElJ9t87B7t1Y++KEotfKgfDC+CQsNs6feBwly0YV5gPT3bbthkwmWr2cvavPbwZueZOERh4g7rEOlFVoFLeOLy6vduQ==@lists.postgresql.org X-Gm-Message-State: AOJu0YyGMdbnHBZj6K2jMFq+ho2NyjWEDcneXIYxvDedv16tEWBPhHsd Lu4C3XmoRAY2ebGuu+3wKDmpN6CxrnZJg85hTbhsxiWAzIYV7KEgRtw7pcZ0b1ZfeA== X-Gm-Gg: AeBDievq5P3odafH+5qVgXXnWSe2xzj+NDpoqWdAf2rppKI9aAjUtDpvUsVQ+g519gA pBx0eSWSEW9y5J3nNr7m4fwXXyyJSAfSf5Oz82fhd4pSeL044485BoUKHREIzAJTpUEuJ2YoAjP Ywk0Hn5EsJL0lVwA3C3SxZkY3DT3Xk/btTWgDwkYf8ltFZ8Eqpi7qYR9mv69+j+Y8cJ30NhTJ2E c5orViVsMUT2BBxrKDk7XlpkCge7606mluk4GIk5S0udtPSKmIxASSCF58SBXpVTSRpdB/+RTN9 N4LZWZW5UBuX0eOAiMvop45utzW+UwKlk5Cngn1afuHOWBqorCxFP6/qOvzOvd18hSBSNphZ8mg tr35GZ58LY2oKE+dKULuhgPYhi9k1FMhGIuoNvFP5sCGkioJJWRvZ09XDZ1aAZAXPb1X3zJoPKH 522rqhBVuxwhm5JzymDjFbYJ2gJLOH6kT99A== X-Received: by 2002:a05:7300:2392:b0:2ef:9961:27f5 with SMTP id 5a478bee46e88-2f40823124amr558231eec.12.1777944424946; Mon, 04 May 2026 18:27:04 -0700 (PDT) Received: from [10.10.247.240] ([12.63.242.122]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f3bf67cf8dsm2989721eec.6.2026.05.04.18.27.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 18:27:03 -0700 (PDT) Message-ID: <8179bf4b80956ffc983d48e127980ea84b0fe0da.camel@j-davis.com> Subject: Re: Significant performance issues with array_agg() + HashAggregate plans on Postgres 17 From: Jeff Davis To: David Rowley Cc: Tom Lane , Scott Carey , pgsql-performance@lists.postgresql.org Date: Mon, 04 May 2026 18:27:03 -0700 In-Reply-To: References: <2764544.1774985169@sss.pgh.pa.us> <2897039.1775051081@sss.pgh.pa.us> <3579239.1775151498@sss.pgh.pa.us> <3671092.1775167393@sss.pgh.pa.us> <3825075.1775244255@sss.pgh.pa.us> <3b569609adc36db30aacbf05e487b472fa8edc84.camel@j-davis.com> <3829071.1775246182@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="=-3PAvSoWO1KLQ3b7DMHKq" User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-3PAvSoWO1KLQ3b7DMHKq Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 2026-04-20 at 16:40 +1200, David Rowley wrote: > I was maybe wrong about just not bothering to handle > MemoryContextSetParent(), but I'm not all that sure where the > complexity is. Shouldn't it just be a matter of: >=20 > If the context has a MemoryPool set, check if the parent has one too, > =C2=A0=C2=A0 if not just swap parents out as the pool belongs to the cont= ext > that's changing parent. > =C2=A0=C2=A0 Else, gather memory totals for the swapping context and subt= ract > from the MemoryPool, set the context being reparented's pool to NULL > and change parent. > else (no pool is set), just swap parent... I think. >=20 > I think there might also need to be a check to see if the new parent > has a pool and ERROR if it does. Maybe that's the messy part? Patches attached. I implemented everything, such that we don't need to ERROR. It feels slightly over-engineered, but I just didn't like the idea of erroring on what seem to be valid operations. Given the inheritance behavior, you may not even be trying to use memory pools, and then SetParent can still fail, and then what do you do? Notes: * It adds 3 extra fields to MemoryContextData inline. The out of line approaches are not very clean: if we allocate in the context itself reset will throw it away; if we allocate in the parent context then we would need to move the allocation on SetParent(); allocating in the caller means the caller needs to track it even though it has the same lifetime; and I'm not sure it's a good idea to use malloc() directly. * The "limit" terminology is a bit awkward because it doesn't really enforce anything it just adjusts the max block size. Maybe there's a better term for that? * allocChunkLimit is not recalculated after SetParent(). I don't think that's a correctness issue, but I might need to add some more comments. I like the idea that memory contexts can inherit some information about work_mem. I've wanted that to be possible for a while, and if we think this is a good approach then we can expand it to other places in the executor. Regards, Jeff Davis --=-3PAvSoWO1KLQ3b7DMHKq Content-Disposition: attachment; filename="v4-0001-Refactor-memory-accounting-into-inline-function.patch" Content-Type: text/x-patch; name="v4-0001-Refactor-memory-accounting-into-inline-function.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5M2FiMGZmN2U4NTdhY2VjZGVmYzBhOWMwMWIyZDZkODA1YzkwNTU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDI5IEFwciAyMDI2IDExOjE5OjUzIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NCAxLzNdIFJl ZmFjdG9yIG1lbW9yeSBhY2NvdW50aW5nIGludG8gaW5saW5lIGZ1bmN0aW9uLgoKLS0tCiBzcmMv YmFja2VuZC91dGlscy9tbWdyL2FzZXQuYyAgICAgICAgIHwgMjEgKysrKysrKysrKy0tLS0tLS0t LS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL2J1bXAuYyAgICAgICAgIHwgIDggKysrKy0tLS0K IHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlvbi5jICAgfCAgNiArKystLS0KIHNyYy9i YWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jICAgICAgICAgfCAgOCArKysrLS0tLQogc3JjL2luY2x1 ZGUvdXRpbHMvbWVtdXRpbHNfaW50ZXJuYWwuaCB8IDEyICsrKysrKysrKysrKwogNSBmaWxlcyBj aGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNl dC5jCmluZGV4IDZhOWVhMzY3MTA3Li4zZGRlZjI2YTNkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9hc2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMK QEAgLTQyMiw4ICs0MjIsOCBAQCBBbGxvY1NldENvbnRleHRDcmVhdGVJbnRlcm5hbChNZW1vcnlD b250ZXh0IHBhcmVudCwKIAkJCQkJCQkJcGFyZW50LAogCQkJCQkJCQluYW1lKTsKIAotCQkJKChN ZW1vcnlDb250ZXh0KSBzZXQpLT5tZW1fYWxsb2NhdGVkID0KLQkJCQlLZWVwZXJCbG9jayhzZXQp LT5lbmRwdHIgLSAoKGNoYXIgKikgc2V0KTsKKwkJCU1lbW9yeUNvbnRleHRVcGRhdGVBbGxvYygo TWVtb3J5Q29udGV4dCkgc2V0LAorCQkJCQkJCQkJIEtlZXBlckJsb2NrKHNldCktPmVuZHB0ciAt ICgoY2hhciAqKSBzZXQpKTsKIAogCQkJcmV0dXJuIChNZW1vcnlDb250ZXh0KSBzZXQ7CiAJCX0K QEAgLTUyNSw3ICs1MjUsNyBAQCBBbGxvY1NldENvbnRleHRDcmVhdGVJbnRlcm5hbChNZW1vcnlD b250ZXh0IHBhcmVudCwKIAkJCQkJCXBhcmVudCwKIAkJCQkJCW5hbWUpOwogCi0JKChNZW1vcnlD b250ZXh0KSBzZXQpLT5tZW1fYWxsb2NhdGVkID0gZmlyc3RCbG9ja1NpemU7CisJTWVtb3J5Q29u dGV4dFVwZGF0ZUFsbG9jKChNZW1vcnlDb250ZXh0KSBzZXQsIGZpcnN0QmxvY2tTaXplKTsKIAog CXJldHVybiAoTWVtb3J5Q29udGV4dCkgc2V0OwogfQpAQCAtNTg5LDcgKzU4OSw3IEBAIEFsbG9j U2V0UmVzZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCQllbHNlCiAJCXsKIAkJCS8qIE5vcm1h bCBjYXNlLCByZWxlYXNlIHRoZSBibG9jayAqLwotCQkJY29udGV4dC0+bWVtX2FsbG9jYXRlZCAt PSBibG9jay0+ZW5kcHRyIC0gKChjaGFyICopIGJsb2NrKTsKKwkJCU1lbW9yeUNvbnRleHRVcGRh dGVBbGxvYyhjb250ZXh0LCAtKGJsb2NrLT5lbmRwdHIgLSAoKGNoYXIgKikgYmxvY2spKSk7CiAK ICNpZmRlZiBDTE9CQkVSX0ZSRUVEX01FTU9SWQogCQkJd2lwZV9tZW0oYmxvY2ssIGJsb2NrLT5m cmVlcHRyIC0gKChjaGFyICopIGJsb2NrKSk7CkBAIC02OTYsNyArNjk2LDcgQEAgQWxsb2NTZXRE ZWxldGUoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCQlBbGxvY0Jsb2NrCW5leHQgPSBibG9jay0+ bmV4dDsKIAogCQlpZiAoIUlzS2VlcGVyQmxvY2soc2V0LCBibG9jaykpCi0JCQljb250ZXh0LT5t ZW1fYWxsb2NhdGVkIC09IGJsb2NrLT5lbmRwdHIgLSAoKGNoYXIgKikgYmxvY2spOworCQkJTWVt b3J5Q29udGV4dFVwZGF0ZUFsbG9jKGNvbnRleHQsIC0oYmxvY2stPmVuZHB0ciAtICgoY2hhciAq KSBibG9jaykpKTsKIAogI2lmZGVmIENMT0JCRVJfRlJFRURfTUVNT1JZCiAJCXdpcGVfbWVtKGJs b2NrLCBibG9jay0+ZnJlZXB0ciAtICgoY2hhciAqKSBibG9jaykpOwpAQCAtNzU4LDcgKzc1OCw3 IEBAIEFsbG9jU2V0QWxsb2NMYXJnZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwg aW50IGZsYWdzKQogCS8qIE1ha2UgYSB2Y2h1bmsgY292ZXJpbmcgdGhlIG5ldyBibG9jaydzIGhl YWRlciAqLwogCVZBTEdSSU5EX01FTVBPT0xfQUxMT0Moc2V0LCBibG9jaywgQUxMT0NfQkxPQ0tI RFJTWik7CiAKLQljb250ZXh0LT5tZW1fYWxsb2NhdGVkICs9IGJsa3NpemU7CisJTWVtb3J5Q29u dGV4dFVwZGF0ZUFsbG9jKGNvbnRleHQsIGJsa3NpemUpOwogCiAJYmxvY2stPmFzZXQgPSBzZXQ7 CiAJYmxvY2stPmZyZWVwdHIgPSBibG9jay0+ZW5kcHRyID0gKChjaGFyICopIGJsb2NrKSArIGJs a3NpemU7CkBAIC05NjcsNyArOTY3LDcgQEAgQWxsb2NTZXRBbGxvY0Zyb21OZXdCbG9jayhNZW1v cnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzLAogCS8qIE1ha2UgYSB2Y2h1 bmsgY292ZXJpbmcgdGhlIG5ldyBibG9jaydzIGhlYWRlciAqLwogCVZBTEdSSU5EX01FTVBPT0xf QUxMT0Moc2V0LCBibG9jaywgQUxMT0NfQkxPQ0tIRFJTWik7CiAKLQljb250ZXh0LT5tZW1fYWxs b2NhdGVkICs9IGJsa3NpemU7CisJTWVtb3J5Q29udGV4dFVwZGF0ZUFsbG9jKGNvbnRleHQsIGJs a3NpemUpOwogCiAJYmxvY2stPmFzZXQgPSBzZXQ7CiAJYmxvY2stPmZyZWVwdHIgPSAoKGNoYXIg KikgYmxvY2spICsgQUxMT0NfQkxPQ0tIRFJTWjsKQEAgLTExNDQsNyArMTE0NCw3IEBAIEFsbG9j U2V0RnJlZSh2b2lkICpwb2ludGVyKQogCQlpZiAoYmxvY2stPm5leHQpCiAJCQlibG9jay0+bmV4 dC0+cHJldiA9IGJsb2NrLT5wcmV2OwogCi0JCXNldC0+aGVhZGVyLm1lbV9hbGxvY2F0ZWQgLT0g YmxvY2stPmVuZHB0ciAtICgoY2hhciAqKSBibG9jayk7CisJCU1lbW9yeUNvbnRleHRVcGRhdGVB bGxvYygmc2V0LT5oZWFkZXIsIC0oYmxvY2stPmVuZHB0ciAtICgoY2hhciAqKSBibG9jaykpKTsK IAogI2lmZGVmIENMT0JCRVJfRlJFRURfTUVNT1JZCiAJCXdpcGVfbWVtKGJsb2NrLCBibG9jay0+ ZnJlZXB0ciAtICgoY2hhciAqKSBibG9jaykpOwpAQCAtMTMwNyw5ICsxMzA3LDggQEAgQWxsb2NT ZXRSZWFsbG9jKHZvaWQgKnBvaW50ZXIsIFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCQlWQUxHUklO RF9NRU1QT09MX0NIQU5HRShzZXQsIGJsb2NrLCBuZXdibG9jaywgQUxMT0NfQkxPQ0tIRFJTWik7 CiAJCWJsb2NrID0gbmV3YmxvY2s7CiAKLQkJLyogdXBkYXRlZCBzZXBhcmF0ZWx5LCBub3QgdG8g dW5kZXJmbG93IHdoZW4gKG9sZGJsa3NpemUgPiBibGtzaXplKSAqLwotCQlzZXQtPmhlYWRlci5t ZW1fYWxsb2NhdGVkIC09IG9sZGJsa3NpemU7Ci0JCXNldC0+aGVhZGVyLm1lbV9hbGxvY2F0ZWQg Kz0gYmxrc2l6ZTsKKwkJTWVtb3J5Q29udGV4dFVwZGF0ZUFsbG9jKCZzZXQtPmhlYWRlciwKKwkJ CQkJCQkJIChzc2l6ZV90KSBibGtzaXplIC0gKHNzaXplX3QpIG9sZGJsa3NpemUpOwogCiAJCWJs b2NrLT5mcmVlcHRyID0gYmxvY2stPmVuZHB0ciA9ICgoY2hhciAqKSBibG9jaykgKyBibGtzaXpl OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2J1bXAuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvYnVtcC5jCmluZGV4IGJmYjVhMTE0MTQ3Li4xZGViNzNmNDUxYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9idW1wLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9idW1wLmMKQEAgLTIzNSw3ICsyMzUsNyBAQCBCdW1wQ29udGV4dENyZWF0ZShN ZW1vcnlDb250ZXh0IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBtaW5Db250ZXh0U2l6 ZSwKIAlNZW1vcnlDb250ZXh0Q3JlYXRlKChNZW1vcnlDb250ZXh0KSBzZXQsIFRfQnVtcENvbnRl eHQsIE1DVFhfQlVNUF9JRCwKIAkJCQkJCXBhcmVudCwgbmFtZSk7CiAKLQkoKE1lbW9yeUNvbnRl eHQpIHNldCktPm1lbV9hbGxvY2F0ZWQgPSBhbGxvY1NpemU7CisJTWVtb3J5Q29udGV4dFVwZGF0 ZUFsbG9jKChNZW1vcnlDb250ZXh0KSBzZXQsIGFsbG9jU2l6ZSk7CiAKIAlyZXR1cm4gKE1lbW9y eUNvbnRleHQpIHNldDsKIH0KQEAgLTM0MSw3ICszNDEsNyBAQCBCdW1wQWxsb2NMYXJnZShNZW1v cnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCS8qIE1ha2UgYSB2Y2h1 bmsgY292ZXJpbmcgdGhlIG5ldyBibG9jaydzIGhlYWRlciAqLwogCVZBTEdSSU5EX01FTVBPT0xf QUxMT0Moc2V0LCBibG9jaywgQnVtcF9CTE9DS0hEUlNaKTsKIAotCWNvbnRleHQtPm1lbV9hbGxv Y2F0ZWQgKz0gYmxrc2l6ZTsKKwlNZW1vcnlDb250ZXh0VXBkYXRlQWxsb2MoY29udGV4dCwgYmxr c2l6ZSk7CiAKIAkvKiB0aGUgYmxvY2sgaXMgY29tcGxldGVseSBmdWxsICovCiAJYmxvY2stPmZy ZWVwdHIgPSBibG9jay0+ZW5kcHRyID0gKChjaGFyICopIGJsb2NrKSArIGJsa3NpemU7CkBAIC00 ODEsNyArNDgxLDcgQEAgQnVtcEFsbG9jRnJvbU5ld0Jsb2NrKE1lbW9yeUNvbnRleHQgY29udGV4 dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MsCiAJLyogTWFrZSBhIHZjaHVuayBjb3ZlcmluZyB0aGUg bmV3IGJsb2NrJ3MgaGVhZGVyICovCiAJVkFMR1JJTkRfTUVNUE9PTF9BTExPQyhzZXQsIGJsb2Nr LCBCdW1wX0JMT0NLSERSU1opOwogCi0JY29udGV4dC0+bWVtX2FsbG9jYXRlZCArPSBibGtzaXpl OworCU1lbW9yeUNvbnRleHRVcGRhdGVBbGxvYyhjb250ZXh0LCBibGtzaXplKTsKIAogCS8qIGlu aXRpYWxpemUgdGhlIG5ldyBibG9jayAqLwogCUJ1bXBCbG9ja0luaXQoc2V0LCBibG9jaywgYmxr c2l6ZSk7CkBAIC02MjYsNyArNjI2LDcgQEAgQnVtcEJsb2NrRnJlZShCdW1wQ29udGV4dCAqc2V0 LCBCdW1wQmxvY2sgKmJsb2NrKQogCS8qIHJlbGVhc2UgdGhlIGJsb2NrIGZyb20gdGhlIGxpc3Qg b2YgYmxvY2tzICovCiAJZGxpc3RfZGVsZXRlKCZibG9jay0+bm9kZSk7CiAKLQkoKE1lbW9yeUNv bnRleHQpIHNldCktPm1lbV9hbGxvY2F0ZWQgLT0gKChjaGFyICopIGJsb2NrLT5lbmRwdHIgLSAo Y2hhciAqKSBibG9jayk7CisJTWVtb3J5Q29udGV4dFVwZGF0ZUFsbG9jKChNZW1vcnlDb250ZXh0 KSBzZXQsIC0oKGNoYXIgKikgYmxvY2stPmVuZHB0ciAtIChjaGFyICopIGJsb2NrKSk7CiAKICNp ZmRlZiBDTE9CQkVSX0ZSRUVEX01FTU9SWQogCXdpcGVfbWVtKGJsb2NrLCAoKGNoYXIgKikgYmxv Y2stPmVuZHB0ciAtIChjaGFyICopIGJsb2NrKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9tbWdyL2dlbmVyYXRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJhdGlv bi5jCmluZGV4IDYwOWM5YmRjOWE2Li5kZGNkMjVjMWU5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9n ZW5lcmF0aW9uLmMKQEAgLTM4OCw3ICszODgsNyBAQCBHZW5lcmF0aW9uQWxsb2NMYXJnZShNZW1v cnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzKQogCS8qIE1ha2UgYSB2Y2h1 bmsgY292ZXJpbmcgdGhlIG5ldyBibG9jaydzIGhlYWRlciAqLwogCVZBTEdSSU5EX01FTVBPT0xf QUxMT0Moc2V0LCBibG9jaywgR2VuZXJhdGlvbl9CTE9DS0hEUlNaKTsKIAotCWNvbnRleHQtPm1l bV9hbGxvY2F0ZWQgKz0gYmxrc2l6ZTsKKwlNZW1vcnlDb250ZXh0VXBkYXRlQWxsb2MoY29udGV4 dCwgYmxrc2l6ZSk7CiAKIAkvKiBibG9jayB3aXRoIGEgc2luZ2xlICh1c2VkKSBjaHVuayAqLwog CWJsb2NrLT5jb250ZXh0ID0gc2V0OwpAQCAtNTEzLDcgKzUxMyw3IEBAIEdlbmVyYXRpb25BbGxv Y0Zyb21OZXdCbG9jayhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdz LAogCS8qIE1ha2UgYSB2Y2h1bmsgY292ZXJpbmcgdGhlIG5ldyBibG9jaydzIGhlYWRlciAqLwog CVZBTEdSSU5EX01FTVBPT0xfQUxMT0Moc2V0LCBibG9jaywgR2VuZXJhdGlvbl9CTE9DS0hEUlNa KTsKIAotCWNvbnRleHQtPm1lbV9hbGxvY2F0ZWQgKz0gYmxrc2l6ZTsKKwlNZW1vcnlDb250ZXh0 VXBkYXRlQWxsb2MoY29udGV4dCwgYmxrc2l6ZSk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBuZXcg YmxvY2sgKi8KIAlHZW5lcmF0aW9uQmxvY2tJbml0KHNldCwgYmxvY2ssIGJsa3NpemUpOwpAQCAt Njk3LDcgKzY5Nyw3IEBAIEdlbmVyYXRpb25CbG9ja0ZyZWUoR2VuZXJhdGlvbkNvbnRleHQgKnNl dCwgR2VuZXJhdGlvbkJsb2NrICpibG9jaykKIAkvKiByZWxlYXNlIHRoZSBibG9jayBmcm9tIHRo ZSBsaXN0IG9mIGJsb2NrcyAqLwogCWRsaXN0X2RlbGV0ZSgmYmxvY2stPm5vZGUpOwogCi0JKChN ZW1vcnlDb250ZXh0KSBzZXQpLT5tZW1fYWxsb2NhdGVkIC09IGJsb2NrLT5ibGtzaXplOworCU1l bW9yeUNvbnRleHRVcGRhdGVBbGxvYygoTWVtb3J5Q29udGV4dCkgc2V0LCAtKChzc2l6ZV90KSBi bG9jay0+Ymxrc2l6ZSkpOwogCiAjaWZkZWYgQ0xPQkJFUl9GUkVFRF9NRU1PUlkKIAl3aXBlX21l bShibG9jaywgYmxvY2stPmJsa3NpemUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bW1nci9zbGFiLmMgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3NsYWIuYwppbmRleCBkZDFkYjk1 NjZkMS4uZjI3ZDk2ODNkYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xh Yi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3Ivc2xhYi5jCkBAIC00NjEsNyArNDYxLDcg QEAgU2xhYlJlc2V0KE1lbW9yeUNvbnRleHQgY29udGV4dCkKIAkJVkFMR1JJTkRfTUVNUE9PTF9G UkVFKHNsYWIsIGJsb2NrKTsKIAogCQlmcmVlKGJsb2NrKTsKLQkJY29udGV4dC0+bWVtX2FsbG9j YXRlZCAtPSBzbGFiLT5ibG9ja1NpemU7CisJCU1lbW9yeUNvbnRleHRVcGRhdGVBbGxvYyhjb250 ZXh0LCAtKChzc2l6ZV90KSBzbGFiLT5ibG9ja1NpemUpKTsKIAl9CiAKIAkvKiB3YWxrIG92ZXIg YmxvY2tsaXN0IGFuZCBmcmVlIHRoZSBibG9ja3MgKi8KQEAgLTQ4MSw3ICs0ODEsNyBAQCBTbGFi UmVzZXQoTWVtb3J5Q29udGV4dCBjb250ZXh0KQogCQkJVkFMR1JJTkRfTUVNUE9PTF9GUkVFKHNs YWIsIGJsb2NrKTsKIAogCQkJZnJlZShibG9jayk7Ci0JCQljb250ZXh0LT5tZW1fYWxsb2NhdGVk IC09IHNsYWItPmJsb2NrU2l6ZTsKKwkJCU1lbW9yeUNvbnRleHRVcGRhdGVBbGxvYyhjb250ZXh0 LCAtKChzc2l6ZV90KSBzbGFiLT5ibG9ja1NpemUpKTsKIAkJfQogCX0KIApAQCAtNTk3LDcgKzU5 Nyw3IEBAIFNsYWJBbGxvY0Zyb21OZXdCbG9jayhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUg c2l6ZSwgaW50IGZsYWdzKQogCQlWQUxHUklORF9NRU1QT09MX0FMTE9DKHNsYWIsIGJsb2NrLCBT bGFiX0JMT0NLSERSU1opOwogCiAJCWJsb2NrLT5zbGFiID0gc2xhYjsKLQkJY29udGV4dC0+bWVt X2FsbG9jYXRlZCArPSBzbGFiLT5ibG9ja1NpemU7CisJCU1lbW9yeUNvbnRleHRVcGRhdGVBbGxv Yyhjb250ZXh0LCBzbGFiLT5ibG9ja1NpemUpOwogCiAJCS8qIHVzZSB0aGUgZmlyc3QgY2h1bmsg aW4gdGhlIG5ldyBibG9jayAqLwogCQljaHVuayA9IFNsYWJCbG9ja0dldENodW5rKHNsYWIsIGJs b2NrLCAwKTsKQEAgLTgzNiw3ICs4MzYsNyBAQCBTbGFiRnJlZSh2b2lkICpwb2ludGVyKQogCQkJ VkFMR1JJTkRfTUVNUE9PTF9GUkVFKHNsYWIsIGJsb2NrKTsKIAogCQkJZnJlZShibG9jayk7Ci0J CQlzbGFiLT5oZWFkZXIubWVtX2FsbG9jYXRlZCAtPSBzbGFiLT5ibG9ja1NpemU7CisJCQlNZW1v cnlDb250ZXh0VXBkYXRlQWxsb2MoJnNsYWItPmhlYWRlciwgLSgoc3NpemVfdCkgc2xhYi0+Ymxv Y2tTaXplKSk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVt dXRpbHNfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzX2ludGVybmFsLmgK aW5kZXggNDc1ZTkxYjMzNmIuLjhmNzkzZjNjNzgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9tZW11dGlsc19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxz X2ludGVybmFsLmgKQEAgLTE1Nyw2ICsxNTcsMTggQEAgZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4 dENyZWF0ZShNZW1vcnlDb250ZXh0IG5vZGUsCiAJCQkJCQkJCU1lbW9yeUNvbnRleHQgcGFyZW50 LAogCQkJCQkJCQljb25zdCBjaGFyICpuYW1lKTsKIAorLyoKKyAqIE1lbW9yeUNvbnRleHRVcGRh dGVBbGxvYygpCisgKgorICogVXBkYXRlIGFsbG9jYXRpb24gdG90YWwuCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZAorTWVtb3J5Q29udGV4dFVwZGF0ZUFsbG9jKE1lbW9yeUNvbnRleHQgY29udGV4 dCwgc3NpemVfdCBzaXplKQoreworCUFzc2VydChzaXplID49IDAgfHwgLXNpemUgPD0gY29udGV4 dC0+bWVtX2FsbG9jYXRlZCk7CisJY29udGV4dC0+bWVtX2FsbG9jYXRlZCArPSBzaXplOworfQor CiBleHRlcm4gdm9pZCAqTWVtb3J5Q29udGV4dEFsbG9jYXRpb25GYWlsdXJlKE1lbW9yeUNvbnRl eHQgY29udGV4dCwgU2l6ZSBzaXplLAogCQkJCQkJCQkJCQlpbnQgZmxhZ3MpOwogCi0tIAoyLjQz LjAKCg== --=-3PAvSoWO1KLQ3b7DMHKq Content-Disposition: attachment; filename="v4-0002-Memory-Pools.patch" Content-Type: text/x-patch; name="v4-0002-Memory-Pools.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA1NTc2NmZjMDM1NGUyNTYyMWQ5MjJiYjU4OGEyNDgxOTZkMTI0MDUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDQgTWF5IDIwMjYgMTQ6MjQ6NDAgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0IDIvM10gTWVt b3J5IFBvb2xzLgoKQSBtZW1vcnkgY29udGV4dCBjYW4gaGF2ZSBhIG1lbW9yeSBwb29sLCB3aGlj aCB0cmFja3MgdGhlIG1lbW9yeSBmb3IKdGhhdCBjb250ZXh0IGFzIHdlbGwgYXMgYWxsIHN1YmNv bnRleHRzIGluIGEgc2luZ2xlIHRvdGFsLCBhbmQgYWxzbwpob2xkcyBhbiAodW5lbmZvcmNlZCkg bGltaXQuIE1lbW9yeSBwb29scyBhcmUgYXV0b21hdGljYWxseSBpbmhlcml0ZWQKYnkgY2hpbGQg Y29udGV4dHMuCgpNZW1vcnkgUG9vbHMgc29sdmUgdHdvIHByb2JsZW1zOgoKRmlyc3QsIHRoZSBw cmV2aW91cyBpbXBsZW1lbnRhdGlvbiBpbiBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKCkKcmVj dXJzaXZlbHkgd2Fsa2VkIHRocm91Z2ggc3ViY29udGV4dHMgdG8gdG90YWwgdGhlIG1lbV9hbGxv Y2F0ZWQKZmllbGRzLiBGb3IgaGFzaCBhZ2dyZWdhdGVzIHRoYXQgdXNlZCBhIGNoaWxkIG1lbW9y eSBjb250ZXh0IGZvciBlYWNoCmdyb3VwLCBpdCB3YXMgdG9vIHNsb3cuIE5vdywgaXQganVzdCBy ZWFkcyB0aGUgc2luZ2xlIHRvdGFsLgoKU2Vjb25kLCB3aXRoIHRoZSBibG9jayBzaXplIGRvdWJs aW5nIGJlaGF2aW9yLCBpdCB3YXMgbGlrZWx5IHRoYXQgYQpzaW5nbGUgc21hbGwgY2h1bmsgYWxs b2NhdGlvbiBjb3VsZCBjYXVzZSBhIGJsb2NrIGFsbG9jYXRpb24gdGhhdApvdmVyd2hlbG1lZCBh IHNtYWxsIHZhbHVlIG9mIHdvcmtfbWVtLiBIYXNoIEFnZ3JlZ2F0aW9uIHByb3RlY3RlZAphZ2Fp bnN0IHRoaXMgYnkgY29uc3RyYWluaW5nIG1heEJsb2NrU2l6ZSBmb3Iga25vd24gY29udGV4dHMs IGJ1dCBub3QKdGhlaXIgc3ViY29udGV4dHMuIE5vdywgc3ViY29udGV4dHMgY29uc3RyYWluIHRo ZSBibG9jayBzaXplIHVzaW5nIHRoZQppbmhlcml0ZWQgbWVtb3J5IHBvb2wncyBsaW1pdC4KClN1 Z2dlc3RlZC1ieTogRGF2aWQgUm93bGV5IDxkZ3Jvd2xleW1sQGdtYWlsLmNvbT4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8zNTc5MjM5LjE3NzUxNTE0OThAc3NzLnBnaC5wYS51cwot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvYXNldC5jICAgICAgICAgfCAgIDggKy0KIHNyYy9i YWNrZW5kL3V0aWxzL21tZ3IvYnVtcC5jICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21tZ3IvZ2VuZXJhdGlvbi5jICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3Iv bWN4dC5jICAgICAgICAgfCAxMTAgKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNs dWRlL25vZGVzL21lbW5vZGVzLmggICAgICAgICAgfCAgMTYgKysrKwogc3JjL2luY2x1ZGUvdXRp bHMvbWVtdXRpbHMuaCAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9tZW11dGls c19pbnRlcm5hbC5oIHwgIDc2ICsrKysrKysrKysrKysrKysrLQogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICB8ICAgMSArCiA4IGZpbGVzIGNoYW5nZWQsIDIxOCBpbnNlcnRp b25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvYXNldC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9hc2V0LmMKaW5kZXggM2RkZWYyNmEz ZDMuLjg5ODFjMTI4NjcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2FzZXQuYwpAQCAtODY3LDYgKzg2Nyw3IEBA IEFsbG9jU2V0QWxsb2NGcm9tTmV3QmxvY2soTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNp emUsIGludCBmbGFncywKIAlTaXplCQlibGtzaXplOwogCVNpemUJCXJlcXVpcmVkX3NpemU7CiAJ U2l6ZQkJY2h1bmtfc2l6ZTsKKwlTaXplCQlibG9ja1NpemVMaW1pdDsKIAogCS8qIGR1ZSB0byB0 aGUga2VlcGVyIGJsb2NrIHNldC0+YmxvY2tzIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKi8KIAlB c3NlcnQoc2V0LT5ibG9ja3MgIT0gTlVMTCk7CkBAIC05MzEsOCArOTMyLDExIEBAIEFsbG9jU2V0 QWxsb2NGcm9tTmV3QmxvY2soTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBm bGFncywKIAkgKi8KIAlibGtzaXplID0gc2V0LT5uZXh0QmxvY2tTaXplOwogCXNldC0+bmV4dEJs b2NrU2l6ZSA8PD0gMTsKLQlpZiAoc2V0LT5uZXh0QmxvY2tTaXplID4gc2V0LT5tYXhCbG9ja1Np emUpCi0JCXNldC0+bmV4dEJsb2NrU2l6ZSA9IHNldC0+bWF4QmxvY2tTaXplOworCisJYmxvY2tT aXplTGltaXQgPSBNZW1vcnlDb250ZXh0QmxvY2tTaXplTGltaXQoY29udGV4dCwgc2V0LT5pbml0 QmxvY2tTaXplLAorCQkJCQkJCQkJCQkJIHNldC0+bWF4QmxvY2tTaXplKTsKKwlpZiAoc2V0LT5u ZXh0QmxvY2tTaXplID4gYmxvY2tTaXplTGltaXQpCisJCXNldC0+bmV4dEJsb2NrU2l6ZSA9IGJs b2NrU2l6ZUxpbWl0OwogCiAJLyogQ2hvb3NlIHRoZSBhY3R1YWwgY2h1bmsgc2l6ZSB0byBhbGxv Y2F0ZSAqLwogCWNodW5rX3NpemUgPSBHZXRDaHVua1NpemVGcm9tRnJlZUxpc3RJZHgoZmlkeCk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2J1bXAuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvYnVtcC5jCmluZGV4IDFkZWI3M2Y0NTFhLi4xNTRlYmRlYmQxMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9idW1wLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9idW1wLmMKQEAgLTQ1NywxNSArNDU3LDE4IEBAIEJ1bXBBbGxvY0Zyb21OZXdCbG9j ayhNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwgaW50IGZsYWdzLAogCUJ1bXBCbG9j ayAgKmJsb2NrOwogCVNpemUJCWJsa3NpemU7CiAJU2l6ZQkJcmVxdWlyZWRfc2l6ZTsKKwlTaXpl CQlibG9ja1NpemVMaW1pdDsKIAogCS8qCiAJICogVGhlIGZpcnN0IHN1Y2ggYmxvY2sgaGFzIHNp emUgaW5pdEJsb2NrU2l6ZSwgYW5kIHdlIGRvdWJsZSB0aGUgc3BhY2UgaW4KIAkgKiBlYWNoIHN1 Y2NlZWRpbmcgYmxvY2ssIGJ1dCBub3QgbW9yZSB0aGFuIG1heEJsb2NrU2l6ZS4KIAkgKi8KIAli bGtzaXplID0gc2V0LT5uZXh0QmxvY2tTaXplOworCWJsb2NrU2l6ZUxpbWl0ID0gTWVtb3J5Q29u dGV4dEJsb2NrU2l6ZUxpbWl0KGNvbnRleHQsIHNldC0+aW5pdEJsb2NrU2l6ZSwKKwkJCQkJCQkJ CQkJCSBzZXQtPm1heEJsb2NrU2l6ZSk7CiAJc2V0LT5uZXh0QmxvY2tTaXplIDw8PSAxOwotCWlm IChzZXQtPm5leHRCbG9ja1NpemUgPiBzZXQtPm1heEJsb2NrU2l6ZSkKLQkJc2V0LT5uZXh0Qmxv Y2tTaXplID0gc2V0LT5tYXhCbG9ja1NpemU7CisJaWYgKHNldC0+bmV4dEJsb2NrU2l6ZSA+IGJs b2NrU2l6ZUxpbWl0KQorCQlzZXQtPm5leHRCbG9ja1NpemUgPSBibG9ja1NpemVMaW1pdDsKIAog CS8qIHdlJ2xsIG5lZWQgc3BhY2UgZm9yIHRoZSBjaHVuaywgY2h1bmsgaGRyIGFuZCBibG9jayBo ZHIgKi8KIAlyZXF1aXJlZF9zaXplID0gY2h1bmtfc2l6ZSArIEJ1bXBfQ0hVTktIRFJTWiArIEJ1 bXBfQkxPQ0tIRFJTWjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvZ2VuZXJh dGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9nZW5lcmF0aW9uLmMKaW5kZXggZGRjZDI1 YzFlOWQuLmNhZGUzYWUzZmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dl bmVyYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL2dlbmVyYXRpb24uYwpAQCAt NDg4LDE1ICs0ODgsMTggQEAgR2VuZXJhdGlvbkFsbG9jRnJvbU5ld0Jsb2NrKE1lbW9yeUNvbnRl eHQgY29udGV4dCwgU2l6ZSBzaXplLCBpbnQgZmxhZ3MsCiAJR2VuZXJhdGlvbkJsb2NrICpibG9j azsKIAlTaXplCQlibGtzaXplOwogCVNpemUJCXJlcXVpcmVkX3NpemU7CisJU2l6ZQkJYmxvY2tT aXplTGltaXQ7CiAKIAkvKgogCSAqIFRoZSBmaXJzdCBzdWNoIGJsb2NrIGhhcyBzaXplIGluaXRC bG9ja1NpemUsIGFuZCB3ZSBkb3VibGUgdGhlIHNwYWNlIGluCiAJICogZWFjaCBzdWNjZWVkaW5n IGJsb2NrLCBidXQgbm90IG1vcmUgdGhhbiBtYXhCbG9ja1NpemUuCiAJICovCiAJYmxrc2l6ZSA9 IHNldC0+bmV4dEJsb2NrU2l6ZTsKKwlibG9ja1NpemVMaW1pdCA9IE1lbW9yeUNvbnRleHRCbG9j a1NpemVMaW1pdChjb250ZXh0LCBzZXQtPmluaXRCbG9ja1NpemUsCisJCQkJCQkJCQkJCQkgc2V0 LT5tYXhCbG9ja1NpemUpOwogCXNldC0+bmV4dEJsb2NrU2l6ZSA8PD0gMTsKLQlpZiAoc2V0LT5u ZXh0QmxvY2tTaXplID4gc2V0LT5tYXhCbG9ja1NpemUpCi0JCXNldC0+bmV4dEJsb2NrU2l6ZSA9 IHNldC0+bWF4QmxvY2tTaXplOworCWlmIChzZXQtPm5leHRCbG9ja1NpemUgPiBibG9ja1NpemVM aW1pdCkKKwkJc2V0LT5uZXh0QmxvY2tTaXplID0gYmxvY2tTaXplTGltaXQ7CiAKIAkvKiB3ZSds bCBuZWVkIHNwYWNlIGZvciB0aGUgY2h1bmssIGNodW5rIGhkciBhbmQgYmxvY2sgaGRyICovCiAJ cmVxdWlyZWRfc2l6ZSA9IGNodW5rX3NpemUgKyBHZW5lcmF0aW9uX0NIVU5LSERSU1ogKyBHZW5l cmF0aW9uX0JMT0NLSERSU1o7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21j eHQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCmluZGV4IDA3M2JkYjM1ZDJhLi40 NzIxMjM2MTJmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKQEAgLTY2NCw2ICs2NjQsODYgQEAgTWVt b3J5Q29udGV4dFNldElkZW50aWZpZXIoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFy ICppZCkKIAljb250ZXh0LT5pZGVudCA9IGlkOwogfQogCisvKgorICogQWRkIGEgbWVtb3J5IHBv b2wgdG8gYW4gZXhpc3RpbmcgY29udGV4dC4gSXQgbWF5IGFscmVhZHkgYmUgYSBtZW1iZXIgb2Yg YW4KKyAqIG91dGVyIHBvb2wgb3duZWQgYnkgYW4gYW5jZXN0b3IsIGJ1dCBpdCBtYXkgbm90IGFs cmVhZHkgb3duIGl0cyBtZW1vcnkKKyAqIHBvb2wuCisgKgorICogQ3VycmVudGx5LCB0aGUgY29u dGV4dCBtdXN0IGhhdmUgbm8gY2hpbGQgY29udGV4dHMsIGJ1dCB0aGF0IHJlc3RyaWN0aW9uCisg KiBjb3VsZCBiZSBsaWZ0ZWQgaWYgbmVjZXNzYXJ5LgorICovCitNZW1vcnlQb29sICoKK01lbW9y eUNvbnRleHRDcmVhdGVQb29sKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBsaW1pdCkKK3sK KwlNZW1vcnlQb29sICpwb29sID0gJmNvbnRleHQtPnBvb2w7CisKKwlBc3NlcnQoTWVtb3J5Q29u dGV4dElzVmFsaWQoY29udGV4dCkpOworCUFzc2VydChsaW1pdCA+IDApOworCUFzc2VydChjb250 ZXh0LT5maXJzdGNoaWxkID09IE5VTEwpOworCUFzc2VydCghTWVtb3J5Q29udGV4dE93bnNQb29s KGNvbnRleHQpKTsKKworCS8qIG91dGVyIG1heSBhbHJlYWR5IGJlIHNldCAqLworCisJcG9vbC0+ bGltaXQgPSBsaW1pdDsKKwlwb29sLT5hbGxvY2F0ZWQgPSBjb250ZXh0LT5tZW1fYWxsb2NhdGVk OworCisJcmV0dXJuIHBvb2w7Cit9CisKKy8qIGhlbHBlciBmb3IgTWVtb3J5Q29udGV4dFNldFBh cmVudCgpICovCitzdGF0aWMgdm9pZAorTWVtb3J5Q29udGV4dFRyYW5zZmVyUG9vbChNZW1vcnlD b250ZXh0IGNvbnRleHQsIE1lbW9yeUNvbnRleHQgbmV3X3BhcmVudCkKK3sKKwlNZW1vcnlQb29s ICpvbGRfb3V0ZXJfcG9vbCA9IGNvbnRleHQtPnBvb2wub3V0ZXI7CisJTWVtb3J5UG9vbCAqbmV3 X291dGVyX3Bvb2wgPSBOVUxMOworCVNpemUJCXN1YnRyZWVfbWVtOworCisJaWYgKG5ld19wYXJl bnQpCisJCW5ld19vdXRlcl9wb29sID0gTWVtb3J5Q29udGV4dEdldFBvb2wobmV3X3BhcmVudCk7 CisKKwlpZiAoIW9sZF9vdXRlcl9wb29sICYmICFuZXdfb3V0ZXJfcG9vbCkKKwkJcmV0dXJuOwor CisJaWYgKG9sZF9vdXRlcl9wb29sID09IG5ld19vdXRlcl9wb29sKQorCQlyZXR1cm47CisKKwkv KgorCSAqIElmIHRoZSBjb250ZXh0J3MgcG9vbCBpcyBpbmhlcml0ZWQgZnJvbSBzb21lIGFuY2Vz dG9yIGNvbnRleHQsIHdlIG5lZWQKKwkgKiB0byBjYWxjdWxhdGUgdGhlIHRvdGFsIGZvciB0aGlz IHN1YnRyZWUuIElmIGl0J3Mgb3duZWQsIHdlIGNhbiBqdXN0IHVzZQorCSAqIHRoZSBwb29sJ3Mg dG90YWwuCisJICovCisJaWYgKE1lbW9yeUNvbnRleHRPd25zUG9vbChjb250ZXh0KSkKKwkJc3Vi dHJlZV9tZW0gPSBjb250ZXh0LT5wb29sLmFsbG9jYXRlZDsKKwllbHNlCisJCXN1YnRyZWVfbWVt ID0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChjb250ZXh0LCB0cnVlKTsKKworCS8qIHN1YnRy YWN0IGZyb20gb2xkIHN1YnRyZWUgKi8KKwlmb3IgKE1lbW9yeVBvb2wgKnBvb2wgPSBvbGRfb3V0 ZXJfcG9vbDsgcG9vbCAhPSBOVUxMOyBwb29sID0gcG9vbC0+b3V0ZXIpCisJCXBvb2wtPmFsbG9j YXRlZCAtPSBzdWJ0cmVlX21lbTsKKworCS8qIGFkZCB0byBuZXcgc3VidHJlZSAqLworCWZvciAo TWVtb3J5UG9vbCAqcG9vbCA9IG5ld19vdXRlcl9wb29sOyBwb29sICE9IE5VTEw7IHBvb2wgPSBw b29sLT5vdXRlcikKKwkJcG9vbC0+YWxsb2NhdGVkICs9IHN1YnRyZWVfbWVtOworCisJLyoKKwkg KiBJZiBpdCdzIG5vdCB0aGUgb3duZXIgb2YgaXRzIHBvb2wsIHN1YmNvbnRleHRzIGNvdWxkIHJl ZmVyIHRvIHBvb2xzCisJICogb3duZWQgYnkgdGhlIGNvbnRleHQncyBvbGQgYW5jZXN0b3JzLiBT ZWFyY2ggc3VidHJlZSBmb3IgcmVmZXJlbmNlcyB0bworCSAqIG9sZF9vdXRlcl9wb29sIGFuZCBy ZXBsYWNlIHdpdGggbmV3X291dGVyX3Bvb2wuIE5COiBvbGRfb3V0ZXJfcG9vbCBvcgorCSAqIG5l d19vdXRlcl9wb29sIG1pZ2h0IGJlIE5VTEwgaGVyZS4KKwkgKi8KKwlpZiAoIU1lbW9yeUNvbnRl eHRPd25zUG9vbChjb250ZXh0KSkKKwl7CisJCWZvciAoTWVtb3J5Q29udGV4dCBjeHQgPSBjb250 ZXh0LT5maXJzdGNoaWxkOyBjeHQgIT0gTlVMTDsKKwkJCSBjeHQgPSBNZW1vcnlDb250ZXh0VHJh dmVyc2VOZXh0KGN4dCwgY29udGV4dCkpCisJCXsKKwkJCWlmIChjeHQtPnBvb2wub3V0ZXIgPT0g b2xkX291dGVyX3Bvb2wpCisJCQkJY3h0LT5wb29sLm91dGVyID0gbmV3X291dGVyX3Bvb2w7CisJ CX0KKwl9CisKKwljb250ZXh0LT5wb29sLm91dGVyID0gbmV3X291dGVyX3Bvb2w7Cit9CisKIC8q CiAgKiBNZW1vcnlDb250ZXh0U2V0UGFyZW50CiAgKgkJQ2hhbmdlIGEgY29udGV4dCB0byBiZWxv bmcgdG8gYSBuZXcgcGFyZW50IChvciBubyBwYXJlbnQpLgpAQCAtNjkyLDYgKzc3MiwxMiBAQCBN ZW1vcnlDb250ZXh0U2V0UGFyZW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgTWVtb3J5Q29udGV4 dCBuZXdfcGFyZW50KQogCWlmIChuZXdfcGFyZW50ID09IGNvbnRleHQtPnBhcmVudCkKIAkJcmV0 dXJuOwogCisJLyoKKwkgKiBUaGlzIG11c3QgaGFwcGVuIGhlcmUgd2hpbGUgd2Ugc3RpbGwgaGF2 ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKwkgKiBleGlzdGluZyBhbmNlc3Rvci4KKwkgKi8KKwlN ZW1vcnlDb250ZXh0VHJhbnNmZXJQb29sKGNvbnRleHQsIG5ld19wYXJlbnQpOworCiAJLyogRGVs aW5rIGZyb20gZXhpc3RpbmcgcGFyZW50LCBpZiBhbnkgKi8KIAlpZiAoY29udGV4dC0+cGFyZW50 KQogCXsKQEAgLTcyNiw2ICs4MTIsMTAgQEAgTWVtb3J5Q29udGV4dFNldFBhcmVudChNZW1vcnlD b250ZXh0IGNvbnRleHQsIE1lbW9yeUNvbnRleHQgbmV3X3BhcmVudCkKIAkJY29udGV4dC0+cHJl dmNoaWxkID0gTlVMTDsKIAkJY29udGV4dC0+bmV4dGNoaWxkID0gTlVMTDsKIAl9CisKKyNpZmRl ZiBNRU1PUllfQ09OVEVYVF9DSEVDS0lORworCU1lbW9yeUNvbnRleHRDaGVjayhjb250ZXh0KTsK KyNlbmRpZgogfQogCiAvKgpAQCAtMTA5MCwxOCArMTE4MCwzMCBAQCBNZW1vcnlDb250ZXh0U3Rh dHNQcmludChNZW1vcnlDb250ZXh0IGNvbnRleHQsIHZvaWQgKnBhc3N0aHJ1LAogCQkJCQkJCQkg bGV2ZWwsIG5hbWUsIHN0YXRzX3N0cmluZywgdHJ1bmNhdGVkX2lkZW50KSkpOwogfQogCisjaWZk ZWYgTUVNT1JZX0NPTlRFWFRfQ0hFQ0tJTkcKKworc3RhdGljIHZvaWQKK01lbW9yeUNvbnRleHRD aGVja1Bvb2woTWVtb3J5Q29udGV4dCBjb250ZXh0KQoreworCWlmIChNZW1vcnlDb250ZXh0T3du c1Bvb2woY29udGV4dCkpCisJCUFzc2VydChjb250ZXh0LT5wb29sLmFsbG9jYXRlZCA9PSBNZW1v cnlDb250ZXh0TWVtQWxsb2NhdGVkKGNvbnRleHQsIHRydWUpKTsKKworCWlmIChjb250ZXh0LT5w YXJlbnQpCisJCUFzc2VydChjb250ZXh0LT5wb29sLm91dGVyID09IE1lbW9yeUNvbnRleHRHZXRQ b29sKGNvbnRleHQtPnBhcmVudCkpOworfQorCiAvKgogICogTWVtb3J5Q29udGV4dENoZWNrCiAg KgkJQ2hlY2sgYWxsIGNodW5rcyBpbiB0aGUgbmFtZWQgY29udGV4dCBhbmQgaXRzIGNoaWxkcmVu LgogICoKICAqIFRoaXMgaXMganVzdCBhIGRlYnVnZ2luZyB1dGlsaXR5LCBzbyBpdCdzIG5vdCBm YW5jeS4KICAqLwotI2lmZGVmIE1FTU9SWV9DT05URVhUX0NIRUNLSU5HCiB2b2lkCiBNZW1vcnlD b250ZXh0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KQogewogCUFzc2VydChNZW1vcnlDb250 ZXh0SXNWYWxpZChjb250ZXh0KSk7CiAJY29udGV4dC0+bWV0aG9kcy0+Y2hlY2soY29udGV4dCk7 CisJTWVtb3J5Q29udGV4dENoZWNrUG9vbChjb250ZXh0KTsKIAogCWZvciAoTWVtb3J5Q29udGV4 dCBjdXJyID0gY29udGV4dC0+Zmlyc3RjaGlsZDsKIAkJIGN1cnIgIT0gTlVMTDsKQEAgLTExMDks OCArMTIxMSwxMCBAQCBNZW1vcnlDb250ZXh0Q2hlY2soTWVtb3J5Q29udGV4dCBjb250ZXh0KQog CXsKIAkJQXNzZXJ0KE1lbW9yeUNvbnRleHRJc1ZhbGlkKGN1cnIpKTsKIAkJY3Vyci0+bWV0aG9k cy0+Y2hlY2soY3Vycik7CisJCU1lbW9yeUNvbnRleHRDaGVja1Bvb2woY3Vycik7CiAJfQogfQor CiAjZW5kaWYKIAogLyoKQEAgLTExNjYsNiArMTI3MCw5IEBAIE1lbW9yeUNvbnRleHRDcmVhdGUo TWVtb3J5Q29udGV4dCBub2RlLAogCW5vZGUtPnBhcmVudCA9IHBhcmVudDsKIAlub2RlLT5maXJz dGNoaWxkID0gTlVMTDsKIAlub2RlLT5tZW1fYWxsb2NhdGVkID0gMDsKKwlub2RlLT5wb29sLmxp bWl0ID0gMDsKKwlub2RlLT5wb29sLmFsbG9jYXRlZCA9IDA7CisJbm9kZS0+cG9vbC5vdXRlciA9 IE5VTEw7CiAJbm9kZS0+cHJldmNoaWxkID0gTlVMTDsKIAlub2RlLT5uYW1lID0gbmFtZTsKIAlu b2RlLT5pZGVudCA9IE5VTEw7CkBAIC0xMTgwLDYgKzEyODcsNyBAQCBNZW1vcnlDb250ZXh0Q3Jl YXRlKE1lbW9yeUNvbnRleHQgbm9kZSwKIAkJcGFyZW50LT5maXJzdGNoaWxkID0gbm9kZTsKIAkJ LyogaW5oZXJpdCBhbGxvd0luQ3JpdFNlY3Rpb24gZmxhZyBmcm9tIHBhcmVudCAqLwogCQlub2Rl LT5hbGxvd0luQ3JpdFNlY3Rpb24gPSBwYXJlbnQtPmFsbG93SW5Dcml0U2VjdGlvbjsKKwkJbm9k ZS0+cG9vbC5vdXRlciA9IE1lbW9yeUNvbnRleHRHZXRQb29sKHBhcmVudCk7CiAJfQogCWVsc2UK IAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tZW1ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWVtbm9kZXMuaAppbmRleCA0YjI0Nzc4ZmUxZS4uOGMzYmM3YjdkMzAgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL21lbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvbWVtbm9kZXMuaApAQCAtMTE0LDYgKzExNCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBNZW1vcnlD b250ZXh0TWV0aG9kcwogfSBNZW1vcnlDb250ZXh0TWV0aG9kczsKIAogCisvKgorICogTWVtb3J5 IFBvb2xzIGFjY291bnQgZm9yIG1lbW9yeSB1c2FnZS4KKyAqCisgKiBJZiBsaW1pdCA+IDAsIHRo ZW4gdGhpcyBwb29sIGlzIG93bmVkIGJ5IHRoZSBjb250YWluaW5nIGNvbnRleHQsIGFuZAorICog J2FsbG9jYXRlZCcgaXMgdmFsaWQuIElmIGxpbWl0ID09IDAsIHRoZSBwb29sIHdhcyBpbmhlcml0 ZWQgZnJvbSB0aGUgcGFyZW50CisgKiBjb250ZXh0LCBhbmQgJ2FsbG9jYXRlZCcgaXMgaW52YWxp ZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTWVtb3J5UG9vbAoreworCVNpemUJCWxpbWl0OwkJCS8q IGxpbWl0IChub3QgZW5mb3JjZWQpICovCisJU2l6ZQkJYWxsb2NhdGVkOwkJLyogYWxsb2NhdGlv biB0b3RhbCBmb3Igc3VidHJlZSAqLworCXN0cnVjdCBNZW1vcnlQb29sICpvdXRlcjsJLyogb3V0 ZXIgY29udGFpbmluZyBwb29sICovCit9IE1lbW9yeVBvb2w7CisKKwogdHlwZWRlZiBzdHJ1Y3Qg TWVtb3J5Q29udGV4dERhdGEKIHsKIAlwZ19ub2RlX2F0dHIoYWJzdHJhY3QpCQkvKiB0aGVyZSBh cmUgbm8gbm9kZXMgb2YgdGhpcyB0eXBlICovCkBAIC0xMjMsNiArMTM4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgTWVtb3J5Q29udGV4dERhdGEKIAlib29sCQlpc1Jlc2V0OwkJLyogVCA9IG5vIHNwYWNl IGFsbG9jYXRlZCBzaW5jZSBsYXN0IHJlc2V0ICovCiAJYm9vbAkJYWxsb3dJbkNyaXRTZWN0aW9u OyAvKiBhbGxvdyBwYWxsb2MgaW4gY3JpdGljYWwgc2VjdGlvbiAqLwogCVNpemUJCW1lbV9hbGxv Y2F0ZWQ7CS8qIHRyYWNrIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoaXMgY29udGV4dCAqLworCU1l bW9yeVBvb2wJcG9vbDsJCQkvKiBhY2NvdW50aW5nLCBpZiBlbmFibGVkICovCiAJY29uc3QgTWVt b3J5Q29udGV4dE1ldGhvZHMgKm1ldGhvZHM7CS8qIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgKi8K IAlNZW1vcnlDb250ZXh0IHBhcmVudDsJCS8qIE5VTEwgaWYgbm8gcGFyZW50ICh0b3BsZXZlbCBj b250ZXh0KSAqLwogCU1lbW9yeUNvbnRleHQgZmlyc3RjaGlsZDsJLyogaGVhZCBvZiBsaW5rZWQg bGlzdCBvZiBjaGlsZHJlbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRp bHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmgKaW5kZXggMTFhYjE3MTdhMTYuLmU1 MzE4NzZiYTY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmgKQEAgLTg2LDYgKzg2LDcgQEAgZXh0ZXJuIGJv b2wgTWVtb3J5Q29udGV4dElzRW1wdHkoTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiBT aXplIE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBib29s IHJlY3Vyc2UpOwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dE1lbUNvbnN1bWVkKE1lbW9yeUNv bnRleHQgY29udGV4dCwKIAkJCQkJCQkJCSBNZW1vcnlDb250ZXh0Q291bnRlcnMgKmNvbnN1bWVk KTsKK2V4dGVybiBNZW1vcnlQb29sICpNZW1vcnlDb250ZXh0Q3JlYXRlUG9vbChNZW1vcnlDb250 ZXh0IG93bmVyLCBTaXplIGxpbWl0KTsKIGV4dGVybiB2b2lkIE1lbW9yeUNvbnRleHRTdGF0cyhN ZW1vcnlDb250ZXh0IGNvbnRleHQpOwogZXh0ZXJuIHZvaWQgTWVtb3J5Q29udGV4dFN0YXRzRGV0 YWlsKE1lbW9yeUNvbnRleHQgY29udGV4dCwKIAkJCQkJCQkJCSBpbnQgbWF4X2xldmVsLCBpbnQg bWF4X2NoaWxkcmVuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHNfaW50 ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzX2ludGVybmFsLmgKaW5kZXggOGY3 OTNmM2M3ODEuLjhjYWNkOGFiYjhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tZW11 dGlsc19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzX2ludGVybmFs LmgKQEAgLTE3LDYgKzE3LDcgQEAKICNkZWZpbmUgTUVNVVRJTFNfSU5URVJOQUxfSAogCiAjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAK IC8qIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIE1lbW9yeUNvbnRleHQgQVBJIGZvciBB bGxvY1NldCBjb250ZXh0LiAqLwogZXh0ZXJuIHZvaWQgKkFsbG9jU2V0QWxsb2MoTWVtb3J5Q29u dGV4dCBjb250ZXh0LCBTaXplIHNpemUsIGludCBmbGFncyk7CkBAIC0xNTcsMTYgKzE1OCw4OSBA QCBleHRlcm4gdm9pZCBNZW1vcnlDb250ZXh0Q3JlYXRlKE1lbW9yeUNvbnRleHQgbm9kZSwKIAkJ CQkJCQkJTWVtb3J5Q29udGV4dCBwYXJlbnQsCiAJCQkJCQkJCWNvbnN0IGNoYXIgKm5hbWUpOwog CitzdGF0aWMgaW5saW5lIGJvb2wKK01lbW9yeVBvb2xJc1ZhbGlkKE1lbW9yeVBvb2wgKnBvb2wp Cit7CisJaWYgKHBvb2wtPmxpbWl0ID4gMCkKKwkJcmV0dXJuIHRydWU7CisKKwlBc3NlcnQocG9v bC0+YWxsb2NhdGVkID09IDApOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBi b29sCitNZW1vcnlDb250ZXh0T3duc1Bvb2woTWVtb3J5Q29udGV4dCBjb250ZXh0KQoreworCXJl dHVybiBNZW1vcnlQb29sSXNWYWxpZCgmY29udGV4dC0+cG9vbCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgTWVtb3J5UG9vbCAqCitNZW1vcnlQb29sT3V0ZXIoTWVtb3J5UG9vbCAqcG9vbCkKK3sKKwlB c3NlcnQocG9vbC0+b3V0ZXIgPT0gTlVMTCB8fCBNZW1vcnlQb29sSXNWYWxpZChwb29sLT5vdXRl cikpOworCXJldHVybiBwb29sLT5vdXRlcjsKK30KKworLyogZ2V0IG93bmVkIG9yIGluaGVyaXRl ZCBwb29sIGZvciBtZW1vcnkgY29udGV4dCwgb3IgTlVMTCAqLworc3RhdGljIGlubGluZSBNZW1v cnlQb29sICoKK01lbW9yeUNvbnRleHRHZXRQb29sKE1lbW9yeUNvbnRleHQgY29udGV4dCkKK3sK KwlNZW1vcnlQb29sICpwb29sOworCisJaWYgKE1lbW9yeUNvbnRleHRPd25zUG9vbChjb250ZXh0 KSkKKwkJcG9vbCA9ICZjb250ZXh0LT5wb29sOworCWVsc2UKKwkJcG9vbCA9IGNvbnRleHQtPnBv b2wub3V0ZXI7CisKKwlBc3NlcnQocG9vbCA9PSBOVUxMIHx8IE1lbW9yeVBvb2xJc1ZhbGlkKHBv b2wpKTsKKwlyZXR1cm4gcG9vbDsKK30KKworLyoKKyAqIElmIHRoZSBjb250ZXh0IGlzIHBhcnQg b2YgYSBtZW1vcnkgcG9vbCwgY2FsY3VsYXRlIGEgcmVhc29uYWJsZSBtYXggYmxvY2sKKyAqIHNp emUgZ2l2ZW4gdGhlIG1lbW9yeSBwb29sIGxpbWl0LiBUaGlzIGF2b2lkcyBhIGNhc2Ugd2hlcmUg YSBzbWFsbCBjaHVuaworICogcmVxdWVzdCBjYXVzZXMgYSBsYXJnZSBibG9jayBhbGxvY2F0aW9u IHRoYXQgb3ZlcndoZWxtcyB0aGUgbGltaXQuCisgKiBDYWxjdWxhdGVkIGR5bmFtaWNhbGx5IGJl Y2F1c2UgdGhlIGxpbWl0IGNvdWxkIGNoYW5nZSwgZS5nLiBkdXJpbmcKKyAqIE1lbW9yeUNvbnRl eHRTZXRQYXJlbnQoKS4KKyAqLworc3RhdGljIGlubGluZSBTaXplCitNZW1vcnlDb250ZXh0Qmxv Y2tTaXplTGltaXQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBTaXplIG1pbiwgU2l6ZSBtYXgpCit7 CisJTWVtb3J5UG9vbCAqcG9vbCA9IE1lbW9yeUNvbnRleHRHZXRQb29sKGNvbnRleHQpOworCVNp emUJCW1heEJsb2NrU2l6ZTsKKworCWlmIChwb29sICE9IE5VTEwpCisJeworCQkvKiByZWFzb25h YmxlIHZhbHVlIGNob3NlbiBhcyAxLzE2dGggb2YgdGhlIGxpbWl0ICovCisJCW1heEJsb2NrU2l6 ZSA9IHBnX3ByZXZwb3dlcjJfc2l6ZV90KHBvb2wtPmxpbWl0IC8gMTYpOworCisJCW1heEJsb2Nr U2l6ZSA9IE1pbihtYXhCbG9ja1NpemUsIG1heCk7CisJCW1heEJsb2NrU2l6ZSA9IE1heChtYXhC bG9ja1NpemUsIG1pbik7CisJfQorCWVsc2UKKwkJbWF4QmxvY2tTaXplID0gbWF4OworCisJcmV0 dXJuIG1heEJsb2NrU2l6ZTsKK30KKwogLyoKICAqIE1lbW9yeUNvbnRleHRVcGRhdGVBbGxvYygp CiAgKgotICogVXBkYXRlIGFsbG9jYXRpb24gdG90YWwuCisgKiBVcGRhdGUgYWxsb2NhdGlvbiB0 b3RhbCBmb3IgY29udGV4dCBhbmQgcG9vbChzKS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBN ZW1vcnlDb250ZXh0VXBkYXRlQWxsb2MoTWVtb3J5Q29udGV4dCBjb250ZXh0LCBzc2l6ZV90IHNp emUpCiB7CiAJQXNzZXJ0KHNpemUgPj0gMCB8fCAtc2l6ZSA8PSBjb250ZXh0LT5tZW1fYWxsb2Nh dGVkKTsKIAljb250ZXh0LT5tZW1fYWxsb2NhdGVkICs9IHNpemU7CisKKwlmb3IgKE1lbW9yeVBv b2wgKnBvb2wgPSBNZW1vcnlDb250ZXh0R2V0UG9vbChjb250ZXh0KTsKKwkJIHBvb2wgIT0gTlVM TDsKKwkJIHBvb2wgPSBNZW1vcnlQb29sT3V0ZXIocG9vbCkpCisJeworCQlBc3NlcnQoc2l6ZSA+ PSAwIHx8IC1zaXplIDw9IHBvb2wtPmFsbG9jYXRlZCk7CisJCXBvb2wtPmFsbG9jYXRlZCArPSBz aXplOworCX0KIH0KIAogZXh0ZXJuIHZvaWQgKk1lbW9yeUNvbnRleHRBbGxvY2F0aW9uRmFpbHVy ZShNZW1vcnlDb250ZXh0IGNvbnRleHQsIFNpemUgc2l6ZSwKZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggMGFiZGIyZDM3ZTIuLjlmZTJiNzk5NDc2IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTc1NCw2ICsxNzU0LDcgQEAgTWVtb3J5Q29udGV4dERhdGEKIE1lbW9yeUNvbnRl eHRJZAogTWVtb3J5Q29udGV4dE1ldGhvZElECiBNZW1vcnlDb250ZXh0TWV0aG9kcworTWVtb3J5 UG9vbAogTWVtb3J5U3RhdHNQcmludEZ1bmMKIE1lcmdlQWN0aW9uCiBNZXJnZUFjdGlvblN0YXRl Ci0tIAoyLjQzLjAKCg== --=-3PAvSoWO1KLQ3b7DMHKq Content-Disposition: attachment; filename="v4-0003-Update-Hash-Aggregation-to-use-memory-pools.patch" Content-Type: text/x-patch; name="v4-0003-Update-Hash-Aggregation-to-use-memory-pools.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiYWYwZTdiMjgxMTEzMzdjNmI5ZjEzOGRkZWE3YzJlZjEzN2ZkOTMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDQgTWF5IDIwMjYgMTQ6Mjk6MzUgLTA3MDAKU3ViamVjdDogW1BBVENIIHY0IDMvM10gVXBk YXRlIEhhc2ggQWdncmVnYXRpb24gdG8gdXNlIG1lbW9yeSBwb29scy4KClRoaXMgcmV2ZXJ0cyBj b21taXQgNTBhMzhmNjUxNzdlYTc4NThiYzk3ZjcxYmEwNzU3YmEwNGMxYzE2Nywgd2hpY2ggaXMK bm8gbG9uZ2VyIG5lZWRlZC4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyB8 IDY5ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQWdnLmMgICB8IDM3ICsrKysrLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oICB8ICAxIC0KIDMgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwg ODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0 aWxzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYwppbmRleCAxZWI2YjlmMWY0 MC4uNGI4ZDFjOTAwYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGls cy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCkBAIC0yMzQsMTMgKzIz NCwyMSBAQCBGcmVlRXhlY3V0b3JTdGF0ZShFU3RhdGUgKmVzdGF0ZSkKIAlNZW1vcnlDb250ZXh0 RGVsZXRlKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKIH0KIAotLyoKLSAqIEludGVybmFsIGltcGxl bWVudGF0aW9uIGZvciBDcmVhdGVFeHByQ29udGV4dCgpIGFuZCBDcmVhdGVXb3JrRXhwckNvbnRl eHQoKQotICogdGhhdCBhbGxvd3MgY29udHJvbCBvdmVyIHRoZSBBbGxvY1NldCBwYXJhbWV0ZXJz LgorLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCUNyZWF0ZUV4cHJDb250ZXh0CisgKgorICoJCUNy ZWF0ZSBhIGNvbnRleHQgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbiB3aXRoaW4gYW4gRVN0YXRl LgorICoKKyAqIEFuIGV4ZWN1dG9yIHJ1biBtYXkgcmVxdWlyZSBtdWx0aXBsZSBFeHByQ29udGV4 dHMgKHdlIHVzdWFsbHkgbWFrZSBvbmUKKyAqIGZvciBlYWNoIFBsYW4gbm9kZSwgYW5kIGEgc2Vw YXJhdGUgb25lIGZvciBwZXItb3V0cHV0LXR1cGxlIHByb2Nlc3NpbmcKKyAqIHN1Y2ggYXMgY29u c3RyYWludCBjaGVja2luZykuICBFYWNoIEV4cHJDb250ZXh0IGhhcyBpdHMgb3duICJwZXItdHVw bGUiCisgKiBtZW1vcnkgY29udGV4dC4KKyAqCisgKiBOb3RlIHdlIG1ha2Ugbm8gYXNzdW1wdGlv biBhYm91dCB0aGUgY2FsbGVyJ3MgbWVtb3J5IGNvbnRleHQuCisgKiAtLS0tLS0tLS0tLS0tLS0t CiAgKi8KLXN0YXRpYyBFeHByQ29udGV4dCAqCi1DcmVhdGVFeHByQ29udGV4dEludGVybmFsKEVT dGF0ZSAqZXN0YXRlLCBTaXplIG1pbkNvbnRleHRTaXplLAotCQkJCQkJICBTaXplIGluaXRCbG9j a1NpemUsIFNpemUgbWF4QmxvY2tTaXplKQorRXhwckNvbnRleHQgKgorQ3JlYXRlRXhwckNvbnRl eHQoRVN0YXRlICplc3RhdGUpCiB7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKQEAgLTI2Myw5ICsyNzEsNyBAQCBDcmVhdGVFeHByQ29udGV4dElu dGVybmFsKEVTdGF0ZSAqZXN0YXRlLCBTaXplIG1pbkNvbnRleHRTaXplLAogCWVjb250ZXh0LT5l Y3h0X3Blcl90dXBsZV9tZW1vcnkgPQogCQlBbGxvY1NldENvbnRleHRDcmVhdGUoZXN0YXRlLT5l c19xdWVyeV9jeHQsCiAJCQkJCQkJICAiRXhwckNvbnRleHQiLAotCQkJCQkJCSAgbWluQ29udGV4 dFNpemUsCi0JCQkJCQkJICBpbml0QmxvY2tTaXplLAotCQkJCQkJCSAgbWF4QmxvY2tTaXplKTsK KwkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwogCiAJZWNvbnRleHQtPmVjeHRfcGFy YW1fZXhlY192YWxzID0gZXN0YXRlLT5lc19wYXJhbV9leGVjX3ZhbHM7CiAJZWNvbnRleHQtPmVj eHRfcGFyYW1fbGlzdF9pbmZvID0gZXN0YXRlLT5lc19wYXJhbV9saXN0X2luZm87CkBAIC0yOTUs NTEgKzMwMSw2IEBAIENyZWF0ZUV4cHJDb250ZXh0SW50ZXJuYWwoRVN0YXRlICplc3RhdGUsIFNp emUgbWluQ29udGV4dFNpemUsCiAJcmV0dXJuIGVjb250ZXh0OwogfQogCi0vKiAtLS0tLS0tLS0t LS0tLS0tCi0gKgkJQ3JlYXRlRXhwckNvbnRleHQKLSAqCi0gKgkJQ3JlYXRlIGEgY29udGV4dCBm b3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpdGhpbiBhbiBFU3RhdGUuCi0gKgotICogQW4gZXhl Y3V0b3IgcnVuIG1heSByZXF1aXJlIG11bHRpcGxlIEV4cHJDb250ZXh0cyAod2UgdXN1YWxseSBt YWtlIG9uZQotICogZm9yIGVhY2ggUGxhbiBub2RlLCBhbmQgYSBzZXBhcmF0ZSBvbmUgZm9yIHBl ci1vdXRwdXQtdHVwbGUgcHJvY2Vzc2luZwotICogc3VjaCBhcyBjb25zdHJhaW50IGNoZWNraW5n KS4gIEVhY2ggRXhwckNvbnRleHQgaGFzIGl0cyBvd24gInBlci10dXBsZSIKLSAqIG1lbW9yeSBj b250ZXh0LgotICoKLSAqIE5vdGUgd2UgbWFrZSBubyBhc3N1bXB0aW9uIGFib3V0IHRoZSBjYWxs ZXIncyBtZW1vcnkgY29udGV4dC4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotRXhwckNvbnRl eHQgKgotQ3JlYXRlRXhwckNvbnRleHQoRVN0YXRlICplc3RhdGUpCi17Ci0JcmV0dXJuIENyZWF0 ZUV4cHJDb250ZXh0SW50ZXJuYWwoZXN0YXRlLCBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKLX0K LQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJQ3JlYXRlV29ya0V4cHJDb250ZXh0Ci0gKgot ICogTGlrZSBDcmVhdGVFeHByQ29udGV4dCwgYnV0IHNwZWNpZmllcyB0aGUgQWxsb2NTZXQgc2l6 ZXMgdG8gYmUgcmVhc29uYWJsZQotICogaW4gcHJvcG9ydGlvbiB0byB3b3JrX21lbS4gSWYgdGhl IG1heGltdW0gYmxvY2sgYWxsb2NhdGlvbiBzaXplIGlzIHRvbwotICogbGFyZ2UsIGl0J3MgZWFz eSB0byBza2lwIHJpZ2h0IHBhc3Qgd29ya19tZW0gd2l0aCBhIHNpbmdsZSBhbGxvY2F0aW9uLgot ICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1FeHByQ29udGV4dCAqCi1DcmVhdGVXb3JrRXhwckNv bnRleHQoRVN0YXRlICplc3RhdGUpCi17Ci0JU2l6ZQkJbWF4QmxvY2tTaXplOwotCi0JbWF4Qmxv Y2tTaXplID0gcGdfcHJldnBvd2VyMl9zaXplX3Qod29ya19tZW0gKiAoU2l6ZSkgMTAyNCAvIDE2 KTsKLQotCS8qIEJ1dCBubyBiaWdnZXIgdGhhbiBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUgKi8K LQltYXhCbG9ja1NpemUgPSBNaW4obWF4QmxvY2tTaXplLCBBTExPQ1NFVF9ERUZBVUxUX01BWFNJ WkUpOwotCi0JLyogYW5kIG5vIHNtYWxsZXIgdGhhbiBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpF ICovCi0JbWF4QmxvY2tTaXplID0gTWF4KG1heEJsb2NrU2l6ZSwgQUxMT0NTRVRfREVGQVVMVF9J TklUU0laRSk7Ci0KLQlyZXR1cm4gQ3JlYXRlRXhwckNvbnRleHRJbnRlcm5hbChlc3RhdGUsIEFM TE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKLQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX0lOSVRT SVpFLCBtYXhCbG9ja1NpemUpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJQ3JlYXRl U3RhbmRhbG9uZUV4cHJDb250ZXh0CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCmluZGV4IDkyNWNh YWRkMmNlLi4wMTMzNGQ2MDEyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwpAQCAtMTg2NiwxMiAr MTg2Niw5IEBAIHN0YXRpYyB2b2lkCiBoYXNoX2FnZ19jaGVja19saW1pdHMoQWdnU3RhdGUgKmFn Z3N0YXRlKQogewogCXVpbnQ2NAkJbmdyb3VwcyA9IGFnZ3N0YXRlLT5oYXNoX25ncm91cHNfY3Vy cmVudDsKLQlTaXplCQltZXRhX21lbSA9IE1lbW9yeUNvbnRleHRNZW1BbGxvY2F0ZWQoYWdnc3Rh dGUtPmhhc2hfbWV0YWN4dCwKLQkJCQkJCQkJCQkJCQkgdHJ1ZSk7Ci0JU2l6ZQkJZW50cnlfbWVt ID0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChhZ2dzdGF0ZS0+aGFzaF90dXBsZXNjeHQsCi0J CQkJCQkJCQkJCQkJICB0cnVlKTsKLQlTaXplCQl0dmFsX21lbSA9IE1lbW9yeUNvbnRleHRNZW1B bGxvY2F0ZWQoYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnksCi0J CQkJCQkJCQkJCQkJIHRydWUpOworCVNpemUJCW1ldGFfbWVtID0gTWVtb3J5Q29udGV4dEdldFBv b2woYWdnc3RhdGUtPmhhc2hfbWV0YWN4dCktPmFsbG9jYXRlZDsKKwlTaXplCQllbnRyeV9tZW0g PSBNZW1vcnlDb250ZXh0R2V0UG9vbChhZ2dzdGF0ZS0+aGFzaF90dXBsZXNjeHQpLT5hbGxvY2F0 ZWQ7CisJU2l6ZQkJdHZhbF9tZW0gPSBNZW1vcnlDb250ZXh0R2V0UG9vbChhZ2dzdGF0ZS0+aGFz aGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9yeSktPmFsbG9jYXRlZDsKIAlTaXplCQl0b3Rh bF9tZW0gPSBtZXRhX21lbSArIGVudHJ5X21lbSArIHR2YWxfbWVtOwogCWJvb2wJCWRvX3NwaWxs ID0gZmFsc2U7CiAKQEAgLTE5OTgsMTMgKzE5OTUsMTMgQEAgaGFzaF9hZ2dfdXBkYXRlX21ldHJp Y3MoQWdnU3RhdGUgKmFnZ3N0YXRlLCBib29sIGZyb21fdGFwZSwgaW50IG5wYXJ0aXRpb25zKQog c3RhdGljIHZvaWQKIGhhc2hfY3JlYXRlX21lbW9yeShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiB7Ci0J U2l6ZQkJbWF4QmxvY2tTaXplID0gQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFOwotCiAJLyoKIAkg KiBUaGUgaGFzaGNvbnRleHQncyBwZXItdHVwbGUgbWVtb3J5IHdpbGwgYmUgdXNlZCBmb3IgYnly ZWYgdHJhbnNpdGlvbgogCSAqIHZhbHVlcyBhbmQgcmV0dXJuZWQgYnkgQWdnQ2hlY2tDYWxsQ29u dGV4dCgpLgogCSAqLwotCWFnZ3N0YXRlLT5oYXNoY29udGV4dCA9IENyZWF0ZVdvcmtFeHByQ29u dGV4dChhZ2dzdGF0ZS0+c3MucHMuc3RhdGUpOworCWFnZ3N0YXRlLT5oYXNoY29udGV4dCA9IENy ZWF0ZUV4cHJDb250ZXh0KGFnZ3N0YXRlLT5zcy5wcy5zdGF0ZSk7CisJTWVtb3J5Q29udGV4dENy ZWF0ZVBvb2woYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnksCisJ CQkJCQkJd29ya19tZW0gKiAoU2l6ZSkgMTAyNCk7CiAKIAkvKgogCSAqIFRoZSBtZXRhIGNvbnRl eHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnVja2V0IGFycmF5IG9mCkBAIC0yMDE3LDYgKzIwMTQs NyBAQCBoYXNoX2NyZWF0ZV9tZW1vcnkoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCWFnZ3N0YXRlLT5o YXNoX21ldGFjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoYWdnc3RhdGUtPnNzLnBzLnN0YXRl LT5lc19xdWVyeV9jeHQsCiAJCQkJCQkJCQkJCQkgICAiSGFzaEFnZyBtZXRhIGNvbnRleHQiLAog CQkJCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJTWVtb3J5Q29udGV4dENy ZWF0ZVBvb2woYWdnc3RhdGUtPmhhc2hfbWV0YWN4dCwgd29ya19tZW0gKiAoU2l6ZSkgMTAyNCk7 CiAKIAkvKgogCSAqIFRoZSBoYXNoIGVudHJpZXMgdGhlbXNlbHZlcywgd2hpY2ggaW5jbHVkZSB0 aGUgZ3JvdXBpbmcga2V5CkBAIC0yMDI1LDI5ICsyMDIzLDEyIEBAIGhhc2hfY3JlYXRlX21lbW9y eShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJICogZW50aXJlIGhhc2ggdGFibGUgaXMgcmVzZXQuIFRo ZSBidW1wIGFsbG9jYXRvciBpcyBmYXN0ZXIgZm9yCiAJICogYWxsb2NhdGlvbnMgYW5kIGF2b2lk cyB3YXN0aW5nIHNwYWNlIG9uIHRoZSBjaHVuayBoZWFkZXIgb3IKIAkgKiBwb3dlci1vZi10d28g YWxsb2NhdGlvbnMuCi0JICoKLQkgKiBMaWtlIENyZWF0ZVdvcmtFeHByQ29udGV4dCgpLCB1c2Ug c21hbGxlciBzaXppbmdzIGZvciBzbWFsbGVyIHdvcmtfbWVtLAotCSAqIHRvIGF2b2lkIGxhcmdl IGp1bXBzIGluIG1lbW9yeSB1c2FnZS4KLQkgKi8KLQotCS8qCi0JICogTGlrZSBDcmVhdGVXb3Jr RXhwckNvbnRleHQoKSwgdXNlIHNtYWxsZXIgc2l6aW5ncyBmb3Igc21hbGxlciB3b3JrX21lbSwK LQkgKiB0byBhdm9pZCBsYXJnZSBqdW1wcyBpbiBtZW1vcnkgdXNhZ2UuCiAJICovCi0JbWF4Qmxv Y2tTaXplID0gcGdfcHJldnBvd2VyMl9zaXplX3Qod29ya19tZW0gKiAoU2l6ZSkgMTAyNCAvIDE2 KTsKLQotCS8qIEJ1dCBubyBiaWdnZXIgdGhhbiBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUgKi8K LQltYXhCbG9ja1NpemUgPSBNaW4obWF4QmxvY2tTaXplLCBBTExPQ1NFVF9ERUZBVUxUX01BWFNJ WkUpOwotCi0JLyogYW5kIG5vIHNtYWxsZXIgdGhhbiBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpF ICovCi0JbWF4QmxvY2tTaXplID0gTWF4KG1heEJsb2NrU2l6ZSwgQUxMT0NTRVRfREVGQVVMVF9J TklUU0laRSk7CiAKIAlhZ2dzdGF0ZS0+aGFzaF90dXBsZXNjeHQgPSBCdW1wQ29udGV4dENyZWF0 ZShhZ2dzdGF0ZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2N4dCwKIAkJCQkJCQkJCQkJCSAiSGFz aEFnZyBoYXNoZWQgdHVwbGVzIiwKLQkJCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX01JTlNJ WkUsCi0JCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKLQkJCQkJCQkJCQkJ CSBtYXhCbG9ja1NpemUpOwotCisJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisJTWVtb3J5Q29udGV4dENyZWF0ZVBvb2woYWdnc3RhdGUtPmhhc2hfdHVwbGVzY3h0LCB3b3Jr X21lbSAqIChTaXplKSAxMDI0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4 IDMzYmJkYmZlZmZiLi4xZTcyZmJlZjZmOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC02 NTMsNyArNjUzLDYgQEAgZXh0ZXJuIHZvaWQgZW5kX3R1cF9vdXRwdXQoVHVwT3V0cHV0U3RhdGUg KnRzdGF0ZSk7CiBleHRlcm4gRVN0YXRlICpDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpOwogZXh0 ZXJuIHZvaWQgRnJlZUV4ZWN1dG9yU3RhdGUoRVN0YXRlICplc3RhdGUpOwogZXh0ZXJuIEV4cHJD b250ZXh0ICpDcmVhdGVFeHByQ29udGV4dChFU3RhdGUgKmVzdGF0ZSk7Ci1leHRlcm4gRXhwckNv bnRleHQgKkNyZWF0ZVdvcmtFeHByQ29udGV4dChFU3RhdGUgKmVzdGF0ZSk7CiBleHRlcm4gRXhw ckNvbnRleHQgKkNyZWF0ZVN0YW5kYWxvbmVFeHByQ29udGV4dCh2b2lkKTsKIGV4dGVybiB2b2lk IEZyZWVFeHByQ29udGV4dChFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgaXNDb21taXQpOwog ZXh0ZXJuIHZvaWQgUmVTY2FuRXhwckNvbnRleHQoRXhwckNvbnRleHQgKmVjb250ZXh0KTsKLS0g CjIuNDMuMAoK --=-3PAvSoWO1KLQ3b7DMHKq--