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 1w6nbl-004fDR-03 for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Mar 2026 10:43:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6nbj-00G8FR-0g for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Mar 2026 10:43:03 +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 1w6nbi-00G8FI-1u for pgsql-hackers@lists.postgresql.org; Sun, 29 Mar 2026 10:43:03 +0000 Received: from mail-qv1-xf30.google.com ([2607:f8b0:4864:20::f30]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6nbf-00000001d9z-3L5d for pgsql-hackers@postgresql.org; Sun, 29 Mar 2026 10:43:01 +0000 Received: by mail-qv1-xf30.google.com with SMTP id 6a1803df08f44-89fc4147f2eso13770656d6.3 for ; Sun, 29 Mar 2026 03:42:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774780979; cv=none; d=google.com; s=arc-20240605; b=c2kiRfc0zkxuErdsL+48CREXL6SvWxMD8TxrHMFMsusfy0aCjpk1N5kc9ihauN7uFb FA6Dlt7mhFAdjrvwM/dx0FQXkoFu6CRQKQTgnTPhe4QluogI0R0/7d9voOKP8Rui+dyi v4qgHoj5lVB/nhc34NuuyE74jaP3TStVt0GvX/Vv/fzql4kSCykU+ZKX+XQIT996f9e3 cOkmLmXYACDECJyaoA8i2j86kCDMZsTs+AUBVqQCAnHi6X7mpHISha6wG+yxTRD5ya4g F41WYXbzhHCwRJu5Cy9me2VSmHzhxeHL4kx+5mOPsVQFzRah7TwAGKzgwn1TRohO8ncB jOPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=5+CqweJorkcyRQt0xV9MhX58SNcWN5CxhC5wrFmr0hs=; fh=0/wyjNxbaM86xJL8FRS+Jf9vLW4EQzuojvu9a/yKpiM=; b=aoexzI8MYUx3JueteDSYbCklZD2F1yYH4TJ0vpTU6XL41rC+/XiWXIpukh6r7MXQQy Rj7njrSvT4q+WYNZiw+voJdmTLDDyKWX9L/925NdDVainZXYIP+knafP+CIvMnd8EWo6 x8wwGM33fb0V2scd5AG6KV3M16ggtCwukiVYDLOfnA0wARAlneJQ3UDPznNInc/BJDVv KrZX2s0jx+iZ14FpywSStnYpmo/f+Tg8+Pa708E46msrb+C/EFXahA1ZABEcfXdhE2M5 7mcdbKrDOvsrtmbvqERedjp2nLspqL8qxfb++JzI1ZjZ4tVDRkQqEZXWoPrTelkxUcvL 6Zow==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774780979; x=1775385779; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5+CqweJorkcyRQt0xV9MhX58SNcWN5CxhC5wrFmr0hs=; b=XvXaVT2ZDpPSbPYE03PQiCkpo8aI0TKGlzz2k60nCb4Y6xotmyneB+0T8MVs6l+VSQ 7zf25icaKmXgD2P5dxpx064fTEsAfJePrv/ngLl2Uz6TOkLGTkJxciLLiYsJdZ3fl+fg BstH5TN24xvttitsiL6Hdc52kiEWg5231FmRUseqRYJzkGtEYf8l8uQsaGPLEzZHYLYr nQITcBY8yx6kJ2knLKvQGMxvxDSy8gYoLXcaGf3f1b3SsoFAqGkf4GlBpHHXFy81BoYK 9cs3JQ90VdG9/UZ+JnHcSZKwxR6ekz8MkwybYt+iX5djEMRa2xxLuu0fCB64ciKJI1YD hWdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774780979; x=1775385779; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5+CqweJorkcyRQt0xV9MhX58SNcWN5CxhC5wrFmr0hs=; b=Pk2GZ9RRU6ObMnBJsduNUQUxBXxUHmMGB52h3GCJgt26K0fGpAIUTSqa8k2FLruSlZ Z1nnXtRx5F0f8utwMfzLyA4S5xQKzCC/5r2WPAwA1hnCLu5jTJNcXNdzfFuBrD3rRMob mrv8FognqK04vSRALzAG4KhHVhAr+nSyra24Ap+12/6FfP+t2cd5EC8uqGtVfvvSHfNn 7aKuKLbqw80M460A/DEOxRQ/fhGS/LLhUosgQVKP5HuWBpdMZyWUlYrcXgLwOBXbAzTl 1u4bpx+fsNzJAEwfyWGfF/Nr66+RGjoK9E8ryJmfvDXArEHnd4iyCTuSjMwfR2iIkD2C WB1A== X-Forwarded-Encrypted: i=1; AJvYcCUFOX1VIZ0urAJsSUOfrG3MK03e2xFc26KbV3LPsv72hiKJMeCf4Q249XhBI0f0fUX6OHzoRZ4eIYgcQwet@postgresql.org X-Gm-Message-State: AOJu0Ywm+TxPSyf1X+37M3vjfmUFs5UCVc78IdB14UjrX1Xmt5tixNjI 8CxVIIz/k8DsBOqeMpCvrZDrhF1yfovFMxHy3ja/7UHZT0eX9780JPdl+QkLU0dge1tHQxIgk5r 73CdcLBKzaxDwC3ijQm/XcMgwIZzSJ1kzqIx7 X-Gm-Gg: ATEYQzx9oWgBZJiCGxKEPmEZ5Yv9V1G18g9gh3LXlKg0AwRCtTLlqTrAX7gkbEZToS+ GDQVgnfnmRFsOa7D7TxTUjHXomTANqaKT0Q1UfHcmNdQA845eoOtpWMmKFfF8DW89XIUdLAPflG 4otYl94445x4OI5qJXXl9ZqRoxymf6Typ3VEGW/N9r0sVtNAjRVu+NNb/t6R9b7kMA12JDSTeEy GzgR6VJ1esnAPZwVVSw3Bh5WBOwiAakyqd9MnpTfd4rtBS0zVAo46hct6t4HU+teHtbJ9EFqX3c upmQ26OvrGPmfHeoZ1ee1Nx5e0J0TzKJSeCJztjTZw== X-Received: by 2002:ad4:5cac:0:b0:89c:bf90:e4ea with SMTP id 6a1803df08f44-89ce8ed3a46mr117603676d6.34.1774780978907; Sun, 29 Mar 2026 03:42:58 -0700 (PDT) MIME-Version: 1.0 References: <20250422181006.dd6f9d1d81299f5b2ad55e1a@sraoss.co.jp> <20250624170533.3caeec7d6034cd5ddf4f00d2@sraoss.co.jp> <20250801002830.143b25971fb9594b89d96aee@sraoss.co.jp> <20250808122125.e9eaff938f8c83556f337e50@sraoss.co.jp> <20250820141028.dc06e0d1d787ce1151f69ed6@sraoss.co.jp> <20250902163341.c174d0e83eedfc54d68b8e9c@sraoss.co.jp> <20251231194455.5975fda68ed8e941e4afb805@sraoss.co.jp> <20260324195727.43416b69c71b5f63eed3b4bc@sraoss.co.jp> <20260325130127.7bc85919861f494ce7c332a5@sraoss.co.jp> <20260327000931.d2303c198c7c9445e90aeab7@sraoss.co.jp> <20260327021807.3ae563de0a288086b98755fb@sraoss.co.jp> <20260327143511.d84a76decfcbd6b80bdf56ed@sraoss.co.jp> <20260327164359.ee19c1e71c80163517a1051e@sraoss.co.jp> In-Reply-To: <20260327164359.ee19c1e71c80163517a1051e@sraoss.co.jp> From: Dean Rasheed Date: Sun, 29 Mar 2026 11:42:47 +0100 X-Gm-Features: AQROBzCcLkeh76FsV9jOGozVHbdywGtpfkqypT-W3iAQ1mmyb-4eBH2es7KAUdc Message-ID: Subject: Re: Allow to collect statistics on virtual generated columns To: Yugo Nagata Cc: Andres Freund , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000cdf7bd064e276543" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cdf7bd064e276543 Content-Type: text/plain; charset="UTF-8" On Fri, 27 Mar 2026 at 07:44, Yugo Nagata wrote: > > Sorry, I forgot to update the test along with the previous fix. > I've attached a revised patch including the updated test. > I did some more testing of this (things like dependencies, permission checks in the selectivity functions, and dump/restore), and everything worked as expected. The code changes look good. It's nice that it worked out to be quite a small, neat patch, and I think it's more-or-less ready for commit, though I did find a few minor issues: I noted that ALTER TABLE ... SET STATISTICS doesn't work for a virtual generated column. I think that's OK, because we don't have statistics by default on such columns, and ALTER STATISTICS ... SET STATISTICS can be used instead if extended statistics are added. We could perhaps relax that restriction in a future patch, but I don't think it's necessary right now. However, I do think it's worth documenting the limitation, so I'm attaching an update doing that. In create_statistics.sgml, there were a number of other things that needed updating. Please check the attached updates. I found another comment in CreateStatistics() that needed updating, and some indentation needed fixing. In the regression tests, I reduced the size of the new test table -- given the recent discussion around how long the tests take to run, we don't want to make that worse. I also added a couple more simple tests, just to confirm that univariate statistics work correctly, and also fixed the test statistics "virtual_gen_stats_single_without_less_than", which was built on the wrong column. If you're happy with those changes, I'll push this. Regards, Dean --000000000000cdf7bd064e276543 Content-Type: text/x-patch; charset="US-ASCII"; name="v12-0001-Add-support-for-extended-statistics-on-virtual-g.patch" Content-Disposition: attachment; filename="v12-0001-Add-support-for-extended-statistics-on-virtual-g.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnbmhgec0 RnJvbSA1M2Y5MzNlM2FkZTBmZDJhNzZmYjM5OTk0OWM0YmEzOTAyMDExM2JlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdWdvIE5hZ2F0YSA8bmFnYXRhQHNyYW9zcy5jby5qcD4KRGF0 ZTogRnJpLCAxOCBKdWwgMjAyNSAwOTo1ODo1NiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEyXSBB ZGQgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcyBvbiB2aXJ0dWFsIGdlbmVyYXRlZAog Y29sdW1ucy4KClRoaXMgYWxsb3dzIGJvdGggdW5pdmFyaWF0ZSBhbmQgbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MgdG8gYmUgYnVpbHQgb24KdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBhbmQgZXhw cmVzc2lvbnMgdGhhdCByZWZlciB0byB2aXJ0dWFsCmdlbmVyYXRlZCBjb2x1bW5zLiBUaGUgcmVz dHJpY3Rpb24gZGlzYWxsb3dpbmcgZXh0ZW5kZWQgc3RhdGlzdGljcyBvbgphIHNpbmdsZSBjb2x1 bW4gaXMgbGlmdGVkIGluIHRoZSBjYXNlIG9mIGEgc2luZ2xlIHZpcnR1YWwgZ2VuZXJhdGVkCmNv bHVtbiwgc2luY2UgaXQgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBleHByZXNzaW9uLgoKSW4gdGhl IGNhdGFsb2dzLCByZWZlcmVuY2VzIHRvIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIHN0 b3JlZAphcy1pcy4gVGhleSBhcmUgZXhwYW5kZWQgYXQgQU5BTFlaRSB0aW1lIHRvIGJ1aWxkIHRo ZSBzdGF0aXN0aWNzLCBhbmQKYXQgcGxhbm5pbmcgdGltZSB0byBhbGxvdyB0aGUgb3B0aW1pemVy IHRvIG1ha2UgdXNlIG9mIHRoZSBzdGF0aXN0aWNzLgpUaGlzIGFsbG93cyB0aGUgc3RhdGlzdGlj cyB0byBiZSBjb3JyZWN0bHkgcmVidWlsdCB1c2luZyBBTkFMWVpFLCBpZiBhCmNvbHVtbidzIGdl bmVyYXRpb24gZXhwcmVzc2lvbiBpcyBhbHRlcmVkICh3aGljaCBjYXVzZXMgYW55IGV4aXN0aW5n CnN0YXRpc3RpY3MgZGF0YSB0byBiZSBkZWxldGVkKS4KCkF1dGhvcjogWXVnbyBOYWdhdGEgPG5h Z2F0YUBzcmFvc3MuY28uanA+ClJldmlld2VkLWJ5OiBEZWFuIFJhc2hlZWQgPGRlYW4uYS5yYXNo ZWVkQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8yMDI1MDQyMjE4 MTAwNi5kZDZmOWQxZDgxMjk5ZjViMmFkNTVlMWFAc3Jhb3NzLmNvLmpwCi0tLQogZG9jL3NyYy9z Z21sL3JlZi9hbHRlcl90YWJsZS5zZ21sICAgICAgIHwgIDEyICsrLQogZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sIHwgIDMwICsrKystLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3N0YXRzY21kcy5jICAgICAgICB8IDEwMSArKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNy Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgNSArKwogc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIHwgIDE1ICsrKy0KIHNyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCB8ICA4OSArKysrKysrKysrKysrKysrLS0tLS0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwgICAgICB8ICA1MiArKysrKysrKy0tLS0K IDcgZmlsZXMgY2hhbmdlZCwgMjEyIGluc2VydGlvbnMoKyksIDkyIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWx0ZXJfdGFibGUuc2dtbAppbmRleCA4NTkxYTZiNTAxNC4uNDUzMzk1YzVjNzMgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKQEAgLTIxNyw3ICsyMTcsOCBAQCBXSVRIICggTU9E VUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBs YWNlYWJsZT4sIFJFTQogICAgICAgc28gcnVubmluZyA8bGluayBsaW5rZW5kPSJzcWwtYW5hbHl6 ZSI+PGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD48L2xpbms+CiAgICAgICBvbiB0aGUgdGFibGUg YWZ0ZXJ3YXJkcyBpcyByZWNvbW1lbmRlZC4KICAgICAgIEZvciBhIHZpcnR1YWwgZ2VuZXJhdGVk IGNvbHVtbiwgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4KLSAgICAgIGlzIG5vdCBuZWNlc3Nh cnkgYmVjYXVzZSBzdWNoIGNvbHVtbnMgbmV2ZXIgaGF2ZSBzdGF0aXN0aWNzLgorICAgICAgaXMg bm90IG5lY2Vzc2FyeSB1bmxlc3MgZXh0ZW5kZWQgc3RhdGlzdGljcyBhcmUgZGVmaW5lZCBvbiBp dCwKKyAgICAgIHNpbmNlIHN1Y2ggY29sdW1ucyBkbyBub3QgaGF2ZSBzdGF0aXN0aWNzIGJ5IGRl ZmF1bHQuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+ CkBAIC0yODksNyArMjkwLDggQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgIDxsaW5r IGxpbmtlbmQ9InNxbC1hbmFseXplIj48Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPjwvbGluaz4K ICAgICAgIG9uIHRoZSB0YWJsZSBhZnRlcndhcmRzIGlzIHJlY29tbWVuZGVkLgogICAgICAgRm9y IGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uLCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPgot ICAgICAgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHN1Y2ggY29sdW1ucyBuZXZlciBoYXZlIHN0 YXRpc3RpY3MuCisgICAgICBpcyBub3QgbmVjZXNzYXJ5IHVubGVzcyBleHRlbmRlZCBzdGF0aXN0 aWNzIGFyZSBkZWZpbmVkIG9uIGl0LAorICAgICAgc2luY2Ugc3VjaCBjb2x1bW5zIGRvIG5vdCBo YXZlIHN0YXRpc3RpY3MgYnkgZGVmYXVsdC4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+ CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTM2OCw2ICszNzAsMTIgQEAgV0lUSCAoIE1PRFVMVVMg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFi bGU+LCBSRU0KICAgICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcXVl cnkgcGxhbm5lciwgcmVmZXIgdG8KICAgICAgIDx4cmVmIGxpbmtlbmQ9InBsYW5uZXItc3RhdHMi Lz4uCiAgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBUaGlzIGZvcm0gaXMgbm90IHN1 cHBvcnRlZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCBzaW5jZSBzdWNoCisgICAgICBj b2x1bW5zIGRvIG5vdCBoYXZlIHN0YXRpc3RpY3MgYnkgZGVmYXVsdC4gIElmIGV4dGVuZGVkIHN0 YXRpc3RpY3MgYXJlCisgICAgICBkZWZpbmVkIG9uIHN1Y2ggY29sdW1ucywgdGhlIHN0YXRpc3Rp Y3MtZ2F0aGVyaW5nIHRhcmdldCBtYXkgYmUgc2V0IG9uCisgICAgICB0aGUgZXh0ZW5kZWQgc3Rh dGlzdGljcyBvYmplY3QgdXNpbmcgPHhyZWYgbGlua2VuZD0ic3FsLWFsdGVyc3RhdGlzdGljcyIv Pi4KKyAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgIDxsaXRlcmFsPlNFVCBTVEFUSVNU SUNTPC9saXRlcmFsPiBhY3F1aXJlcyBhCiAgICAgICA8bGl0ZXJhbD5TSEFSRSBVUERBVEUgRVhD TFVTSVZFPC9saXRlcmFsPiBsb2NrLgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5z Z21sCmluZGV4IGQ2YjI1ZWQyYzliLi42NzhlZmUxZWI0MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3N0YXRpc3RpY3Muc2dtbApAQCAtMjIsNyArMjIsNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICA8cmVmc3lub3BzaXNkaXY+CiA8c3lub3BzaXM+CiBDUkVBVEUgU1RBVElTVElDUyBb IFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdGF0aXN0 aWNzX25hbWU8L3JlcGxhY2VhYmxlPiBdCi0gICAgT04gKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkKKyAgICBPTiB7IDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IHwgKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgfQogICAg IEZST00gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2Vh YmxlPgogCiBDUkVBVEUgU1RBVElTVElDUyBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdGF0aXN0aWNzX25hbWU8L3JlcGxhY2VhYmxlPiBdCkBAIC00 NSw3ICs0NSw4IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN0YXRpc3RpY3NfCiAKICAgPHBhcmE+CiAgICBUaGUg PGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IGNvbW1hbmQgaGFzIHR3byBiYXNp YyBmb3Jtcy4gVGhlCi0gICBmaXJzdCBmb3JtIGFsbG93cyB1bml2YXJpYXRlIHN0YXRpc3RpY3Mg Zm9yIGEgc2luZ2xlIGV4cHJlc3Npb24gdG8gYmUKKyAgIGZpcnN0IGZvcm0gYWxsb3dzIHVuaXZh cmlhdGUgc3RhdGlzdGljcyBmb3IgYSBzaW5nbGUgZXhwcmVzc2lvbgorICAgb3IgdmlydHVhbCBn ZW5lcmF0ZWQgY29sdW1uIHRvIGJlCiAgICBjb2xsZWN0ZWQsIHByb3ZpZGluZyBiZW5lZml0cyBz aW1pbGFyIHRvIGFuIGV4cHJlc3Npb24gaW5kZXggd2l0aG91dCB0aGUKICAgIG92ZXJoZWFkIG9m IGluZGV4IG1haW50ZW5hbmNlLiAgVGhpcyBmb3JtIGRvZXMgbm90IGFsbG93IHRoZSBzdGF0aXN0 aWNzCiAgICBraW5kIHRvIGJlIHNwZWNpZmllZCwgc2luY2UgdGhlIHZhcmlvdXMgc3RhdGlzdGlj cyBraW5kcyByZWZlciBvbmx5IHRvCkBAIC01Myw3ICs1NCw3IEBAIENSRUFURSBTVEFUSVNUSUNT IFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN0YXRp c3RpY3NfCiAgICBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyBvbiBtdWx0aXBsZSBjb2x1bW5zIGFu ZC9vciBleHByZXNzaW9ucyB0byBiZQogICAgY29sbGVjdGVkLCBvcHRpb25hbGx5IHNwZWNpZnlp bmcgd2hpY2ggc3RhdGlzdGljcyBraW5kcyB0byBpbmNsdWRlLiAgVGhpcwogICAgZm9ybSB3aWxs IGFsc28gYXV0b21hdGljYWxseSBjYXVzZSB1bml2YXJpYXRlIHN0YXRpc3RpY3MgdG8gYmUgY29s bGVjdGVkIG9uCi0gICBhbnkgZXhwcmVzc2lvbnMgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCisgICBh bnkgZXhwcmVzc2lvbnMgYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaW5jbHVkZWQgaW4g dGhlIGxpc3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEwOSw3ICsxMTAsOCBAQCBDUkVB VEUgU1RBVElTVElDUyBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5zdGF0aXN0aWNzXwogICAgICAgSWYgdGhpcyBjbGF1c2UgaXMgb21pdHRlZCwgYWxs IHN1cHBvcnRlZCBzdGF0aXN0aWNzIGtpbmRzIGFyZQogICAgICAgaW5jbHVkZWQgaW4gdGhlIHN0 YXRpc3RpY3Mgb2JqZWN0LiBVbml2YXJpYXRlIGV4cHJlc3Npb24gc3RhdGlzdGljcyBhcmUKICAg ICAgIGJ1aWx0IGF1dG9tYXRpY2FsbHkgaWYgdGhlIHN0YXRpc3RpY3MgZGVmaW5pdGlvbiBpbmNs dWRlcyBhbnkgY29tcGxleAotICAgICAgZXhwcmVzc2lvbnMgcmF0aGVyIHRoYW4ganVzdCBzaW1w bGUgY29sdW1uIHJlZmVyZW5jZXMuCisgICAgICBleHByZXNzaW9ucyBvciByZWZlcmVuY2VzIHRv IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMKKyAgICAgIHJhdGhlciB0aGFuIGp1c3Qgc2ltcGxl IGNvbHVtbiByZWZlcmVuY2VzLgogICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8eHJl ZiBsaW5rZW5kPSJwbGFubmVyLXN0YXRzLWV4dGVuZGVkIi8+CiAgICAgICBhbmQgPHhyZWYgbGlu a2VuZD0ibXVsdGl2YXJpYXRlLXN0YXRpc3RpY3MtZXhhbXBsZXMiLz4uCiAgICAgIDwvcGFyYT4K QEAgLTEyMSw5ICsxMjMsMTYgQEAgQ1JFQVRFIFNUQVRJU1RJQ1MgWyBbIElGIE5PVCBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3RhdGlzdGljc18KICAgICA8bGlzdGl0 ZW0+CiAgICAgIDxwYXJhPgogICAgICAgVGhlIG5hbWUgb2YgYSB0YWJsZSBjb2x1bW4gdG8gYmUg Y292ZXJlZCBieSB0aGUgY29tcHV0ZWQgc3RhdGlzdGljcy4KLSAgICAgIFRoaXMgaXMgb25seSBh bGxvd2VkIHdoZW4gYnVpbGRpbmcgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MuICBBdCBsZWFzdAot ICAgICAgdHdvIGNvbHVtbiBuYW1lcyBvciBleHByZXNzaW9ucyBtdXN0IGJlIHNwZWNpZmllZCwg YW5kIHRoZWlyIG9yZGVyIGlzCi0gICAgICBub3Qgc2lnbmlmaWNhbnQuCisgICAgICBUaGlzIG1h eSBiZSB1c2VkIHRvIGJ1aWxkIHVuaXZhcmlhdGUgc3RhdGlzdGljcyBvbiBhIHNpbmdsZSB2aXJ0 dWFsCisgICAgICBnZW5lcmF0ZWQgY29sdW1uLCBvciBhcyBwYXJ0IG9mIGEgbGlzdCBvZiBtdWx0 aXBsZSBjb2x1bW5zIChzdG9yZWQgb3IKKyAgICAgIHZpcnR1YWwpIGFuZC9vciBleHByZXNzaW9u cyB0byBidWlsZCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4gIEluIHRoZQorICAgICAgbGF0dGVy IGNhc2UsIHNlcGFyYXRlIHVuaXZhcmlhdGUgc3RhdGlzdGljcyBhcmUgYnVpbHQgYXV0b21hdGlj YWxseSBmb3IKKyAgICAgIGVhY2ggZXhwcmVzc2lvbiBhbmQgdmlydHVhbCBnZW5lcmF0ZWQgY29s dW1uIGluIHRoZSBsaXN0LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgRGVmaW5p bmcgZXh0ZW5kZWQgc3RhdGlzdGljcyBvbiBhIHNpbmdsZSA8ZW1waGFzaXM+c3RvcmVkPC9lbXBo YXNpcz4KKyAgICAgIGNvbHVtbiBpcyBub3Qgc3VwcG9ydGVkIG9yIG5lY2Vzc2FyeSwgYmVjYXVz ZSBzdGF0aXN0aWNzIGFyZSBidWlsdAorICAgICAgYXV0b21hdGljYWxseSBvbiBzdWNoIGNvbHVt bnMuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CkBA IC0xMzYsNyArMTQ1LDggQEAgQ1JFQVRFIFNUQVRJU1RJQ1MgWyBbIElGIE5PVCBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3RhdGlzdGljc18KICAgICAgIHVzZWQgdG8g YnVpbGQgdW5pdmFyaWF0ZSBzdGF0aXN0aWNzIG9uIGEgc2luZ2xlIGV4cHJlc3Npb24sIG9yIGFz IHBhcnQKICAgICAgIG9mIGEgbGlzdCBvZiBtdWx0aXBsZSBjb2x1bW4gbmFtZXMgYW5kL29yIGV4 cHJlc3Npb25zIHRvIGJ1aWxkCiAgICAgICBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4gIEluIHRo ZSBsYXR0ZXIgY2FzZSwgc2VwYXJhdGUgdW5pdmFyaWF0ZQotICAgICAgc3RhdGlzdGljcyBhcmUg YnVpbHQgYXV0b21hdGljYWxseSBmb3IgZWFjaCBleHByZXNzaW9uIGluIHRoZSBsaXN0LgorICAg ICAgc3RhdGlzdGljcyBhcmUgYnVpbHQgYXV0b21hdGljYWxseSBmb3IgZWFjaCBleHByZXNzaW9u IGFuZCB2aXJ0dWFsCisgICAgICBnZW5lcmF0ZWQgY29sdW1uIGluIHRoZSBsaXN0LgogICAgICA8 L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMTY5LDcgKzE3 OSw5IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnN0YXRpc3RpY3NfCiAgICBFeHByZXNzaW9uIHN0YXRpc3RpY3Mg YXJlIHBlci1leHByZXNzaW9uIGFuZCBhcmUgc2ltaWxhciB0byBjcmVhdGluZyBhbgogICAgaW5k ZXggb24gdGhlIGV4cHJlc3Npb24sIGV4Y2VwdCB0aGF0IHRoZXkgYXZvaWQgdGhlIG92ZXJoZWFk IG9mIGluZGV4CiAgICBtYWludGVuYW5jZS4gRXhwcmVzc2lvbiBzdGF0aXN0aWNzIGFyZSBidWls dCBhdXRvbWF0aWNhbGx5IGZvciBlYWNoCi0gICBleHByZXNzaW9uIGluIHRoZSBzdGF0aXN0aWNz IG9iamVjdCBkZWZpbml0aW9uLgorICAgZXhwcmVzc2lvbiBpbiB0aGUgc3RhdGlzdGljcyBvYmpl Y3QgZGVmaW5pdGlvbi4gIEV4dGVuZGVkIHN0YXRpc3RpY3Mgb24KKyAgIGEgdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1uIGJlaGF2ZSB0aGUgc2FtZSBhcyBleHByZXNzaW9uIHN0YXRpc3RpY3Mgb24g dGhlCisgICBjb2x1bW4ncyBnZW5lcmF0aW9uIGV4cHJlc3Npb24uCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKaW5kZXggYzFkYTc5ZjM2YmEuLjc2NTM5NWI0 YjZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1 ZGUgImNvbW1hbmRzL2NvbW1lbnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgi CiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgiCkBAIC0yMzIsNyArMjMzLDggQEAg Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQsIGJvb2wgY2hlY2tfcmlnaHRz KQogCSAqIENvbnZlcnQgdGhlIGV4cHJlc3Npb24gbGlzdCB0byBhIHNpbXBsZSBhcnJheSBvZiBh dHRudW1zLCBidXQgYWxzbyBrZWVwCiAJICogYSBsaXN0IG9mIG1vcmUgY29tcGxleCBleHByZXNz aW9ucy4gIFdoaWxlIGF0IGl0LCBlbmZvcmNlIHNvbWUKIAkgKiBjb25zdHJhaW50cyAtIHdlIGRv bid0IGFsbG93IGV4dGVuZGVkIHN0YXRpc3RpY3Mgb24gc3lzdGVtIGF0dHJpYnV0ZXMsCi0JICog YW5kIHdlIHJlcXVpcmUgdGhlIGRhdGEgdHlwZSB0byBoYXZlIGEgbGVzcy10aGFuIG9wZXJhdG9y LgorCSAqIGFuZCB3ZSByZXF1aXJlIHRoZSBkYXRhIHR5cGUgdG8gaGF2ZSBhIGxlc3MtdGhhbiBv cGVyYXRvciwgaWYgd2UncmUKKwkgKiBidWlsZGluZyBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcy4K IAkgKgogCSAqIFRoZXJlIGFyZSBtYW55IHdheXMgdG8gIm1hc2siIGEgc2ltcGxlIGF0dHJpYnV0 ZSByZWZlcmVuY2UgYXMgYW4KIAkgKiBleHByZXNzaW9uLCBmb3IgZXhhbXBsZSAiKGErMCkiIGV0 Yy4gV2UgY2FuJ3QgcG9zc2libHkgZGV0ZWN0IGFsbCBvZgpAQCAtMjY4LDIyICsyNzAsMzggQEAg Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQsIGJvb2wgY2hlY2tfcmlnaHRz KQogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkJ IGVycm1zZygic3RhdGlzdGljcyBjcmVhdGlvbiBvbiBzeXN0ZW0gY29sdW1ucyBpcyBub3Qgc3Vw cG9ydGVkIikpKTsKIAotCQkJLyogRGlzYWxsb3cgdXNlIG9mIHZpcnR1YWwgZ2VuZXJhdGVkIGNv bHVtbnMgaW4gZXh0ZW5kZWQgc3RhdHMgKi8KLQkJCWlmIChhdHRGb3JtLT5hdHRnZW5lcmF0ZWQg PT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCQkgZXJybXNn KCJzdGF0aXN0aWNzIGNyZWF0aW9uIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaXMgbm90 IHN1cHBvcnRlZCIpKSk7Ci0KLQkJCS8qIERpc2FsbG93IGRhdGEgdHlwZXMgd2l0aG91dCBhIGxl c3MtdGhhbiBvcGVyYXRvciAqLwotCQkJdHlwZSA9IGxvb2t1cF90eXBlX2NhY2hlKGF0dEZvcm0t PmF0dHR5cGlkLCBUWVBFQ0FDSEVfTFRfT1BSKTsKLQkJCWlmICh0eXBlLT5sdF9vcHIgPT0gSW52 YWxpZE9pZCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBjYW5ub3Qg YmUgdXNlZCBpbiBzdGF0aXN0aWNzIGJlY2F1c2UgaXRzIHR5cGUgJXMgaGFzIG5vIGRlZmF1bHQg YnRyZWUgb3BlcmF0b3IgY2xhc3MiLAotCQkJCQkJCQlhdHRuYW1lLCBmb3JtYXRfdHlwZV9iZShh dHRGb3JtLT5hdHR0eXBpZCkpKSk7CisJCQkvKgorCQkJICogRGlzYWxsb3cgZGF0YSB0eXBlcyB3 aXRob3V0IGEgbGVzcy10aGFuIG9wZXJhdG9yIGluCisJCQkgKiBtdWx0aXZhcmlhdGUgc3RhdGlz dGljcy4KKwkJCSAqLworCQkJaWYgKGxpc3RfbGVuZ3RoKHN0bXQtPmV4cHJzKSA+IDEpCisJCQl7 CisJCQkJdHlwZSA9IGxvb2t1cF90eXBlX2NhY2hlKGF0dEZvcm0tPmF0dHR5cGlkLCBUWVBFQ0FD SEVfTFRfT1BSKTsKKwkJCQlpZiAodHlwZS0+bHRfb3ByID09IEludmFsaWRPaWQpCisJCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJCQkJCSBlcnJtc2coImNvbHVtbiBcIiVzXCIgY2Fubm90IGJlIHVzZWQgaW4gbXVs dGl2YXJpYXRlIHN0YXRpc3RpY3MgYmVjYXVzZSBpdHMgdHlwZSAlcyBoYXMgbm8gZGVmYXVsdCBi dHJlZSBvcGVyYXRvciBjbGFzcyIsCisJCQkJCQkJCQlhdHRuYW1lLCBmb3JtYXRfdHlwZV9iZShh dHRGb3JtLT5hdHR0eXBpZCkpKSk7CisJCQl9CiAKLQkJCWF0dG51bXNbbmF0dG51bXNdID0gYXR0 Rm9ybS0+YXR0bnVtOwotCQkJbmF0dG51bXMrKzsKKwkJCS8qIFRyZWF0IHZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbnMgYXMgZXhwcmVzc2lvbnMgKi8KKwkJCWlmIChhdHRGb3JtLT5hdHRnZW5lcmF0 ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJeworCQkJCU5vZGUJICAgKmV4 cHI7CisKKwkJCQlleHByID0gKE5vZGUgKikgbWFrZVZhcigxLAorCQkJCQkJCQkJCWF0dEZvcm0t PmF0dG51bSwKKwkJCQkJCQkJCQlhdHRGb3JtLT5hdHR0eXBpZCwKKwkJCQkJCQkJCQlhdHRGb3Jt LT5hdHR0eXBtb2QsCisJCQkJCQkJCQkJYXR0Rm9ybS0+YXR0Y29sbGF0aW9uLAorCQkJCQkJCQkJ CTApOworCQkJCXN0eGV4cHJzID0gbGFwcGVuZChzdHhleHBycywgZXhwcik7CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJYXR0bnVtc1tuYXR0bnVtc10gPSBhdHRGb3JtLT5hdHRudW07CisJCQkJ bmF0dG51bXMrKzsKKwkJCX0KIAkJCVJlbGVhc2VTeXNDYWNoZShhdHR0dXBsZSk7CiAJCX0KIAkJ ZWxzZSBpZiAoSXNBKHNlbGVtLT5leHByLCBWYXIpKSAvKiBjb2x1bW4gcmVmZXJlbmNlIGluIHBh cmVucyAqLwpAQCAtMjk3LDIyICszMTUsMzAgQEAgQ3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0 c1N0bXQgKnN0bXQsIGJvb2wgY2hlY2tfcmlnaHRzKQogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkJIGVycm1zZygic3RhdGlzdGljcyBjcmVhdGlv biBvbiBzeXN0ZW0gY29sdW1ucyBpcyBub3Qgc3VwcG9ydGVkIikpKTsKIAotCQkJLyogRGlzYWxs b3cgdXNlIG9mIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaW4gZXh0ZW5kZWQgc3RhdHMgKi8K LQkJCWlmIChnZXRfYXR0Z2VuZXJhdGVkKHJlbGlkLCB2YXItPnZhcmF0dG5vKSA9PSBBVFRSSUJV VEVfR0VORVJBVEVEX1ZJUlRVQUwpCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJCSBlcnJtc2coInN0YXRpc3Rp Y3MgY3JlYXRpb24gb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpcyBub3Qgc3VwcG9ydGVk IikpKTsKLQotCQkJLyogRGlzYWxsb3cgZGF0YSB0eXBlcyB3aXRob3V0IGEgbGVzcy10aGFuIG9w ZXJhdG9yICovCi0JCQl0eXBlID0gbG9va3VwX3R5cGVfY2FjaGUodmFyLT52YXJ0eXBlLCBUWVBF Q0FDSEVfTFRfT1BSKTsKLQkJCWlmICh0eXBlLT5sdF9vcHIgPT0gSW52YWxpZE9pZCkKLQkJCQll cmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAotCQkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBjYW5ub3QgYmUgdXNlZCBpbiBzdGF0 aXN0aWNzIGJlY2F1c2UgaXRzIHR5cGUgJXMgaGFzIG5vIGRlZmF1bHQgYnRyZWUgb3BlcmF0b3Ig Y2xhc3MiLAotCQkJCQkJCQlnZXRfYXR0bmFtZShyZWxpZCwgdmFyLT52YXJhdHRubywgZmFsc2Up LCBmb3JtYXRfdHlwZV9iZSh2YXItPnZhcnR5cGUpKSkpOworCQkJLyoKKwkJCSAqIERpc2FsbG93 IGRhdGEgdHlwZXMgd2l0aG91dCBhIGxlc3MtdGhhbiBvcGVyYXRvciBpbgorCQkJICogbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3MuCisJCQkgKi8KKwkJCWlmIChsaXN0X2xlbmd0aChzdG10LT5leHBy cykgPiAxKQorCQkJeworCQkJCXR5cGUgPSBsb29rdXBfdHlwZV9jYWNoZSh2YXItPnZhcnR5cGUs IFRZUEVDQUNIRV9MVF9PUFIpOworCQkJCWlmICh0eXBlLT5sdF9vcHIgPT0gSW52YWxpZE9pZCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCisJCQkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBjYW5ub3QgYmUgdXNl ZCBpbiBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyBiZWNhdXNlIGl0cyB0eXBlICVzIGhhcyBubyBk ZWZhdWx0IGJ0cmVlIG9wZXJhdG9yIGNsYXNzIiwKKwkJCQkJCQkJCWdldF9hdHRuYW1lKHJlbGlk LCB2YXItPnZhcmF0dG5vLCBmYWxzZSksIGZvcm1hdF90eXBlX2JlKHZhci0+dmFydHlwZSkpKSk7 CisJCQl9CiAKLQkJCWF0dG51bXNbbmF0dG51bXNdID0gdmFyLT52YXJhdHRubzsKLQkJCW5hdHRu dW1zKys7CisJCQkvKiBUcmVhdCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFzIGV4cHJlc3Np b25zICovCisJCQlpZiAoZ2V0X2F0dGdlbmVyYXRlZChyZWxpZCwgdmFyLT52YXJhdHRubykgPT0g QVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJeworCQkJCXN0eGV4cHJzID0gbGFwcGVu ZChzdHhleHBycywgKE5vZGUgKikgdmFyKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlhdHRu dW1zW25hdHRudW1zXSA9IHZhci0+dmFyYXR0bm87CisJCQkJbmF0dG51bXMrKzsKKwkJCX0KIAkJ fQogCQllbHNlCQkJCQkvKiBleHByZXNzaW9uICovCiAJCXsKQEAgLTMzNiwyMCArMzYyLDExIEBA IENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10LCBib29sIGNoZWNrX3JpZ2h0 cykKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCiAJCQkJCQkJIGVycm1zZygic3RhdGlzdGljcyBjcmVhdGlvbiBvbiBz eXN0ZW0gY29sdW1ucyBpcyBub3Qgc3VwcG9ydGVkIikpKTsKLQotCQkJCS8qIERpc2FsbG93IHVz ZSBvZiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGluIGV4dGVuZGVkIHN0YXRzICovCi0JCQkJ aWYgKGdldF9hdHRnZW5lcmF0ZWQocmVsaWQsIGF0dG51bSkgPT0gQVRUUklCVVRFX0dFTkVSQVRF RF9WSVJUVUFMKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJCQkgZXJybXNnKCJzdGF0aXN0aWNzIGNyZWF0 aW9uIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaXMgbm90IHN1cHBvcnRlZCIpKSk7CiAJ CQl9CiAKIAkJCS8qCi0JCQkgKiBEaXNhbGxvdyBkYXRhIHR5cGVzIHdpdGhvdXQgYSBsZXNzLXRo YW4gb3BlcmF0b3IuCi0JCQkgKgotCQkJICogV2UgaWdub3JlIHRoaXMgZm9yIHN0YXRpc3RpY3Mg b24gYSBzaW5nbGUgZXhwcmVzc2lvbiwgaW4gd2hpY2gKLQkJCSAqIGNhc2Ugd2UnbGwgYnVpbGQg dGhlIHJlZ3VsYXIgc3RhdGlzdGljcyBvbmx5IChhbmQgdGhhdCBjb2RlIGNhbgotCQkJICogZGVh bCB3aXRoIHN1Y2ggZGF0YSB0eXBlcykuCisJCQkgKiBEaXNhbGxvdyBkYXRhIHR5cGVzIHdpdGhv dXQgYSBsZXNzLXRoYW4gb3BlcmF0b3IgaW4KKwkJCSAqIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNz LgogCQkJICovCiAJCQlpZiAobGlzdF9sZW5ndGgoc3RtdC0+ZXhwcnMpID4gMSkKIAkJCXsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBiMmZiZDZhMDgyYi4uOGI3YzlhOWYy ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTE3OTIsNiArMTc5Miwx MSBAQCBnZXRfcmVsYXRpb25fc3RhdGlzdGljcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCWV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsK IAkJCQlwZnJlZShleHByc1N0cmluZyk7CiAKKwkJCQkvKgorCQkJCSAqIEV4cGFuZCB2aXJ0dWFs IGdlbmVyYXRlZCBjb2x1bW5zIGluIHRoZSBleHByZXNzaW9ucy4KKwkJCQkgKi8KKwkJCQlleHBy cyA9IChMaXN0ICopIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9leHByKChOb2RlICopIGV4 cHJzLCByZWxhdGlvbiwgMSk7CisKIAkJCQkvKgogCQkJCSAqIE1vZGlmeSB0aGUgY29waWVzIHdl IG9idGFpbiBmcm9tIHRoZSByZWxjYWNoZSB0byBoYXZlIHRoZQogCQkJCSAqIGNvcnJlY3QgdmFy bm8gZm9yIHRoZSBwYXJlbnQgcmVsYXRpb24sIHNvIHRoYXQgdGhleSBtYXRjaApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jIGIvc3JjL2JhY2tlbmQv c3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCmluZGV4IDMzNGM2NDk4NTgxLi45MjI1YTE2OGE4 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHMuYwpAQCAtMzIsNiArMzIs NyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jl d3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRl cm5hbC5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mvc3RhdGlzdGljcy5oIgogI2luY2x1ZGUgInV0 aWxzL2FjbC5oIgpAQCAtNzMsNyArNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0RXh0RW50cnkK IH0gU3RhdEV4dEVudHJ5OwogCiAKLXN0YXRpYyBMaXN0ICpmZXRjaF9zdGF0ZW50cmllc19mb3Jf cmVsYXRpb24oUmVsYXRpb24gcGdfc3RhdGV4dCwgT2lkIHJlbGlkKTsKK3N0YXRpYyBMaXN0ICpm ZXRjaF9zdGF0ZW50cmllc19mb3JfcmVsYXRpb24oUmVsYXRpb24gcGdfc3RhdGV4dCwgUmVsYXRp b24gcmVsKTsKIHN0YXRpYyBWYWNBdHRyU3RhdHMgKipsb29rdXBfdmFyX2F0dHJfc3RhdHMoQml0 bWFwc2V0ICphdHRycywgTGlzdCAqZXhwcnMsCiAJCQkJCQkJCQkJCWludCBudmFjYXR0cywgVmFj QXR0clN0YXRzICoqdmFjYXR0cyk7CiBzdGF0aWMgdm9pZCBzdGF0ZXh0X3N0b3JlKE9pZCBzdGF0 T2lkLCBib29sIGluaCwKQEAgLTEyNSw3ICsxMjYsNyBAQCBCdWlsZFJlbGF0aW9uRXh0U3RhdGlz dGljcyhSZWxhdGlvbiBvbmVyZWwsIGJvb2wgaW5oLCBkb3VibGUgdG90YWxyb3dzLAogCiAJLyog dGhlIGxpc3Qgb2Ygc3RhdHMgaGFzIHRvIGJlIGFsbG9jYXRlZCBvdXRzaWRlIHRoZSBtZW1vcnkg Y29udGV4dCAqLwogCXBnX3N0ZXh0ID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlvbklk LCBSb3dFeGNsdXNpdmVMb2NrKTsKLQlzdGF0c2xpc3QgPSBmZXRjaF9zdGF0ZW50cmllc19mb3Jf cmVsYXRpb24ocGdfc3RleHQsIFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSk7CisJc3RhdHNsaXN0 ID0gZmV0Y2hfc3RhdGVudHJpZXNfZm9yX3JlbGF0aW9uKHBnX3N0ZXh0LCBvbmVyZWwpOwogCiAJ LyogbWVtb3J5IGNvbnRleHQgZm9yIGJ1aWxkaW5nIGVhY2ggc3RhdGlzdGljcyBvYmplY3QgKi8K IAljeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCkBAIC0y NzksNyArMjgwLDcgQEAgQ29tcHV0ZUV4dFN0YXRpc3RpY3NSb3dzKFJlbGF0aW9uIG9uZXJlbCwK IAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3h0KTsKIAogCXBnX3N0ZXh0ID0gdGFi bGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKLQlsc3Rh dHMgPSBmZXRjaF9zdGF0ZW50cmllc19mb3JfcmVsYXRpb24ocGdfc3RleHQsIFJlbGF0aW9uR2V0 UmVsaWQob25lcmVsKSk7CisJbHN0YXRzID0gZmV0Y2hfc3RhdGVudHJpZXNfZm9yX3JlbGF0aW9u KHBnX3N0ZXh0LCBvbmVyZWwpOwogCiAJZm9yZWFjaChsYywgbHN0YXRzKQogCXsKQEAgLTQxNiwx MiArNDE3LDEzIEBAIHN0YXRleHRfaXNfa2luZF9idWlsdChIZWFwVHVwbGUgaHR1cCwgY2hhciB0 eXBlKQogICogUmV0dXJuIGEgbGlzdCAob2YgU3RhdEV4dEVudHJ5KSBvZiBzdGF0aXN0aWNzIG9i amVjdHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi4KICAqLwogc3RhdGljIExpc3QgKgotZmV0Y2hf c3RhdGVudHJpZXNfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHBnX3N0YXRleHQsIE9pZCByZWxpZCkK K2ZldGNoX3N0YXRlbnRyaWVzX2Zvcl9yZWxhdGlvbihSZWxhdGlvbiBwZ19zdGF0ZXh0LCBSZWxh dGlvbiByZWwpCiB7CiAJU3lzU2NhbkRlc2Mgc2NhbjsKIAlTY2FuS2V5RGF0YSBza2V5OwogCUhl YXBUdXBsZQlodHVwOwogCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlPaWQJCQlyZWxpZCA9IFJl bGF0aW9uR2V0UmVsaWQocmVsKTsKIAogCS8qCiAJICogUHJlcGFyZSB0byBzY2FuIHBnX3N0YXRp c3RpY19leHQgZm9yIGVudHJpZXMgaGF2aW5nIHN0eHJlbGlkID0gdGhpcwpAQCAtNDkxLDYgKzQ5 MywxMSBAQCBmZXRjaF9zdGF0ZW50cmllc19mb3JfcmVsYXRpb24oUmVsYXRpb24gcGdfc3RhdGV4 dCwgT2lkIHJlbGlkKQogCiAJCQlwZnJlZShleHByc1N0cmluZyk7CiAKKwkJCS8qCisJCQkgKiBF eHBhbmQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpbiB0aGUgZXhwcmVzc2lvbnMuCisJCQkg Ki8KKwkJCWV4cHJzID0gKExpc3QgKikgZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2luX2V4cHIo KE5vZGUgKikgZXhwcnMsIHJlbCwgMSk7CisKIAkJCS8qCiAJCQkgKiBSdW4gdGhlIGV4cHJlc3Np b25zIHRocm91Z2ggZXZhbF9jb25zdF9leHByZXNzaW9ucy4gVGhpcyBpcyBub3QKIAkJCSAqIGp1 c3QgYW4gb3B0aW1pemF0aW9uLCBidXQgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSBwbGFubmVy CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKaW5kZXggYjY0MzFkMWVlOTUu LjhiMGY5NmEyZDJlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz X2V4dC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0CkBA IC0yNSw3ICsyNSw3IEBAIGJlZ2luCiBlbmQ7CiAkJDsKIC0tIFZlcmlmeSBmYWlsdXJlcwotQ1JF QVRFIFRBQkxFIGV4dF9zdGF0c190ZXN0ICh4IHRleHQsIHkgaW50LCB6IGludCk7CitDUkVBVEUg VEFCTEUgZXh0X3N0YXRzX3Rlc3QgKHggdGV4dCwgeSBpbnQsIHogaW50LCB3IHhpZCk7CiBDUkVB VEUgU1RBVElTVElDUyB0c3Q7CiBFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICI7Igog TElORSAxOiBDUkVBVEUgU1RBVElTVElDUyB0c3Q7CkBAIC04NCwzMCArODQsMTkgQEAgQ1JFQVRF IFNUQVRJU1RJQ1MgdHN0IE9OICh4LCB5KSBGUk9NIGV4dF9zdGF0c190ZXN0OyAtLSB0dXBsZSBl eHByZXNzaW9uCiBFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIsIgogTElORSAxOiBD UkVBVEUgU1RBVElTVElDUyB0c3QgT04gKHgsIHkpIEZST00gZXh0X3N0YXRzX3Rlc3Q7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLURST1AgVEFCTEUgZXh0X3N0YXRzX3Rl c3Q7Ci0tLSBzdGF0aXN0aWNzIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBub3QgYWxsb3dl ZAotQ1JFQVRFIFRBQkxFIGV4dF9zdGF0c190ZXN0MSAoeCBpbnQsIHkgaW50LCB6IGludCBHRU5F UkFURUQgQUxXQVlTIEFTICh4K3kpIFZJUlRVQUwsIHcgeGlkKTsKLUNSRUFURSBTVEFUSVNUSUNT IHRzdCBvbiB6IGZyb20gZXh0X3N0YXRzX3Rlc3QxOwotRVJST1I6ICBzdGF0aXN0aWNzIGNyZWF0 aW9uIG9uIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaXMgbm90IHN1cHBvcnRlZAotQ1JFQVRF IFNUQVRJU1RJQ1MgdHN0IG9uICh6KSBmcm9tIGV4dF9zdGF0c190ZXN0MTsKLUVSUk9SOiAgc3Rh dGlzdGljcyBjcmVhdGlvbiBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGlzIG5vdCBzdXBw b3J0ZWQKLUNSRUFURSBTVEFUSVNUSUNTIHRzdCBvbiAoeisxKSBmcm9tIGV4dF9zdGF0c190ZXN0 MTsKLUVSUk9SOiAgc3RhdGlzdGljcyBjcmVhdGlvbiBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW5zIGlzIG5vdCBzdXBwb3J0ZWQKLUNSRUFURSBTVEFUSVNUSUNTIHRzdCAobmRpc3RpbmN0KSBP TiB6IGZyb20gZXh0X3N0YXRzX3Rlc3QxOwotRVJST1I6ICBzdGF0aXN0aWNzIGNyZWF0aW9uIG9u IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaXMgbm90IHN1cHBvcnRlZAogLS0gc3RhdGlzdGlj cyBvbiBzeXN0ZW0gY29sdW1uIG5vdCBhbGxvd2VkCi1DUkVBVEUgU1RBVElTVElDUyB0c3Qgb24g dGFibGVvaWQgZnJvbSBleHRfc3RhdHNfdGVzdDE7CitDUkVBVEUgU1RBVElTVElDUyB0c3Qgb24g dGFibGVvaWQgZnJvbSBleHRfc3RhdHNfdGVzdDsKIEVSUk9SOiAgc3RhdGlzdGljcyBjcmVhdGlv biBvbiBzeXN0ZW0gY29sdW1ucyBpcyBub3Qgc3VwcG9ydGVkCi1DUkVBVEUgU1RBVElTVElDUyB0 c3Qgb24gKHRhYmxlb2lkKSBmcm9tIGV4dF9zdGF0c190ZXN0MTsKK0NSRUFURSBTVEFUSVNUSUNT IHRzdCBvbiAodGFibGVvaWQpIGZyb20gZXh0X3N0YXRzX3Rlc3Q7CiBFUlJPUjogIHN0YXRpc3Rp Y3MgY3JlYXRpb24gb24gc3lzdGVtIGNvbHVtbnMgaXMgbm90IHN1cHBvcnRlZAotQ1JFQVRFIFNU QVRJU1RJQ1MgdHN0IG9uICh0YWJsZW9pZDo6aW50KzEpIGZyb20gZXh0X3N0YXRzX3Rlc3QxOwor Q1JFQVRFIFNUQVRJU1RJQ1MgdHN0IG9uICh0YWJsZW9pZDo6aW50KzEpIGZyb20gZXh0X3N0YXRz X3Rlc3Q7CiBFUlJPUjogIHN0YXRpc3RpY3MgY3JlYXRpb24gb24gc3lzdGVtIGNvbHVtbnMgaXMg bm90IHN1cHBvcnRlZAotQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0IChuZGlzdGluY3QpIE9OIHhtaW4g ZnJvbSBleHRfc3RhdHNfdGVzdDE7CitDUkVBVEUgU1RBVElTVElDUyB0c3QgKG5kaXN0aW5jdCkg T04geG1pbiBmcm9tIGV4dF9zdGF0c190ZXN0OwogRVJST1I6ICBzdGF0aXN0aWNzIGNyZWF0aW9u IG9uIHN5c3RlbSBjb2x1bW5zIGlzIG5vdCBzdXBwb3J0ZWQKLS0tIHN0YXRpc3RpY3Mgd2l0aG91 dCBhIGxlc3MtdGhhbiBvcGVyYXRvciBub3Qgc3VwcG9ydGVkCi1DUkVBVEUgU1RBVElTVElDUyB0 c3QgKG5kaXN0aW5jdCkgT04gdyBmcm9tIGV4dF9zdGF0c190ZXN0MTsKLUVSUk9SOiAgY29sdW1u ICJ3IiBjYW5ub3QgYmUgdXNlZCBpbiBzdGF0aXN0aWNzIGJlY2F1c2UgaXRzIHR5cGUgeGlkIGhh cyBubyBkZWZhdWx0IGJ0cmVlIG9wZXJhdG9yIGNsYXNzCi1EUk9QIFRBQkxFIGV4dF9zdGF0c190 ZXN0MTsKKy0tIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzIHdpdGhvdXQgYSBsZXNzLXRoYW4gb3Bl cmF0b3Igbm90IHN1cHBvcnRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0IChuZGlzdGluY3QpIE9O IHgsIHcgZnJvbSBleHRfc3RhdHNfdGVzdDsKK0VSUk9SOiAgY29sdW1uICJ3IiBjYW5ub3QgYmUg dXNlZCBpbiBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyBiZWNhdXNlIGl0cyB0eXBlIHhpZCBoYXMg bm8gZGVmYXVsdCBidHJlZSBvcGVyYXRvciBjbGFzcworRFJPUCBUQUJMRSBleHRfc3RhdHNfdGVz dDsKIC0tIEVuc3VyZSBzdGF0cyBhcmUgZHJvcHBlZCBzYW5lbHksIGFuZCB0ZXN0IElGIE5PVCBF WElTVFMgd2hpbGUgYXQgaXQKIENSRUFURSBUQUJMRSBhYjEgKGEgSU5URUdFUiwgYiBJTlRFR0VS LCBjIElOVEVHRVIpOwogQ1JFQVRFIFNUQVRJU1RJQ1MgSUYgTk9UIEVYSVNUUyBhYjFfYV9iX3N0 YXRzIE9OIGEsIGIgRlJPTSBhYjE7CkBAIC0zMTUzLDYgKzMxNDIsNjYgQEAgU0VMRUNUIGMwIEZS T00gT05MWSBleHByX3N0YXRzX2luY29tcGF0aWJsZV90ZXN0IFdIRVJFCiAoMCByb3dzKQogCiBE Uk9QIFRBQkxFIGV4cHJfc3RhdHNfaW5jb21wYXRpYmxlX3Rlc3Q7CistLSBtdWx0aXZhcmlhdGUg c3RhdGlzdGljcyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCitDUkVBVEUgVEFCTEUgdmly dHVhbF9nZW5fc3RhdHMgKGEgaW50LCBiIGludCwgYyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAo MiphKSwgZCBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYStiKSwgdyB4aWQgR0VORVJBVEVEIEFM V0FZUyBBUyAoYTo6dGV4dDo6eGlkKSk7CitJTlNFUlQgSU5UTyB2aXJ0dWFsX2dlbl9zdGF0cyBT RUxFQ1QgbW9kKGksMTApLCBtb2QoaSwxMCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIHMo aSk7CitBTkFMWVpFIHZpcnR1YWxfZ2VuX3N0YXRzOworU0VMRUNUICogRlJPTSBjaGVja19lc3Rp bWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0cyBXSEVSRSBjID0gMCBB TkQgKDMqYikgPSAwJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0t LS0KKyAgICAgICAgIDEgfCAgICAgMTAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBjaGVja19l c3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0cyBXSEVSRSBkID0g MCBBTkQgKGQtMiphKSA9IDAnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSst LS0tLS0tLQorICAgICAgICAgMSB8ICAgICAxMAorKDEgcm93KQorCitDUkVBVEUgU1RBVElTVElD UyB2aXJ0dWFsX2dlbl9zdGF0c18xIChtY3YpIE9OIGMsICgzKmIpLCBkLCAoZC0yKmEpIEZST00g dmlydHVhbF9nZW5fc3RhdHM7CitBTkFMWVpFIHZpcnR1YWxfZ2VuX3N0YXRzOworU0VMRUNUICog RlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0 cyBXSEVSRSBjID0gMCBBTkQgKDMqYikgPSAwJyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0t LS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAgMTAgfCAgICAgMTAKKygxIHJvdykKKworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9z dGF0cyBXSEVSRSBkID0gMCBBTkQgKGQtMiphKSA9IDAnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwg CistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAxMCB8ICAgICAxMAorKDEgcm93KQorCist LSB1bml2YXJpYXRlIHN0YXRpc3RpY3Mgb24gaW5kaXZpZHVhbCB2aXJ0dWFsIGdlbmVyYXRlZCBj b2x1bW5zCitEUk9QIFNUQVRJU1RJQ1MgdmlydHVhbF9nZW5fc3RhdHNfMTsKK1NFTEVDVCAqIEZS T00gY2hlY2tfZXN0aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gdmlydHVhbF9nZW5fc3RhdHMg V0hFUkUgYyA9IDAnKTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0t LQorICAgICAgICAgMSB8ICAgICAxMAorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGNoZWNrX2Vz dGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIHZpcnR1YWxfZ2VuX3N0YXRzIFdIRVJFIHcgPSAw Jyk7CisgZXN0aW1hdGVkIHwgYWN0dWFsIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0KKyAgICAgICAg IDEgfCAgICAgMTAKKygxIHJvdykKKworQ1JFQVRFIFNUQVRJU1RJQ1MgdmlydHVhbF9nZW5fc3Rh dHNfc2luZ2xlIE9OIGMgRlJPTSB2aXJ0dWFsX2dlbl9zdGF0czsKK0NSRUFURSBTVEFUSVNUSUNT IHZpcnR1YWxfZ2VuX3N0YXRzX3NpbmdsZV93aXRob3V0X2xlc3NfdGhhbiBPTiB3IEZST00gdmly dHVhbF9nZW5fc3RhdHM7CitBTkFMWVpFIHZpcnR1YWxfZ2VuX3N0YXRzOworU0VMRUNUICogRlJP TSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0cyBX SEVSRSBjID0gMCcpOworIGVzdGltYXRlZCB8IGFjdHVhbCAKKy0tLS0tLS0tLS0tKy0tLS0tLS0t CisgICAgICAgIDEwIHwgICAgIDEwCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0 aW1hdGVkX3Jvd3MoJ1NFTEVDVCAqIEZST00gdmlydHVhbF9nZW5fc3RhdHMgV0hFUkUgdyA9IDAn KTsKKyBlc3RpbWF0ZWQgfCBhY3R1YWwgCistLS0tLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAx MCB8ICAgICAxMAorKDEgcm93KQorCitEUk9QIFRBQkxFIHZpcnR1YWxfZ2VuX3N0YXRzOwogLS0g UGVybWlzc2lvbiB0ZXN0cy4gVXNlcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHNlZSBzcGVjaWZp YyBkYXRhIHZhbHVlcyBpbgogLS0gdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3MsIGlmIHRoZXkgbGFj ayBwZXJtaXNzaW9uIHRvIHNlZSB0aG9zZSB2YWx1ZXMgaW4KIC0tIHRoZSB1bmRlcmx5aW5nIHRh YmxlLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKaW5kZXggOWRjY2UzNDQwYzguLjcyNjAy ZTFlOTk1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKQEAgLTI4LDcgKzI4LDcgQEAg ZW5kOwogJCQ7CiAKIC0tIFZlcmlmeSBmYWlsdXJlcwotQ1JFQVRFIFRBQkxFIGV4dF9zdGF0c190 ZXN0ICh4IHRleHQsIHkgaW50LCB6IGludCk7CitDUkVBVEUgVEFCTEUgZXh0X3N0YXRzX3Rlc3Qg KHggdGV4dCwgeSBpbnQsIHogaW50LCB3IHhpZCk7CiBDUkVBVEUgU1RBVElTVElDUyB0c3Q7CiBD UkVBVEUgU1RBVElTVElDUyB0c3QgT04gYSwgYjsKIENSRUFURSBTVEFUSVNUSUNTIHRzdCBGUk9N IHNvbWV0YWI7CkBAIC01NiwyMSArNTYsMTQgQEAgRFJPUCBGVU5DVElPTiB0ZnRlc3Q7CiBDUkVB VEUgU1RBVElTVElDUyB0c3QgT04gKHkpIEZST00gZXh0X3N0YXRzX3Rlc3Q7IC0tIHNpbmdsZSBj b2x1bW4gcmVmZXJlbmNlCiBDUkVBVEUgU1RBVElTVElDUyB0c3QgT04geSArIHogRlJPTSBleHRf c3RhdHNfdGVzdDsgLS0gbWlzc2luZyBwYXJlbnRoZXNlcwogQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0 IE9OICh4LCB5KSBGUk9NIGV4dF9zdGF0c190ZXN0OyAtLSB0dXBsZSBleHByZXNzaW9uCi1EUk9Q IFRBQkxFIGV4dF9zdGF0c190ZXN0OwotLS0gc3RhdGlzdGljcyBvbiB2aXJ0dWFsIGdlbmVyYXRl ZCBjb2x1bW4gbm90IGFsbG93ZWQKLUNSRUFURSBUQUJMRSBleHRfc3RhdHNfdGVzdDEgKHggaW50 LCB5IGludCwgeiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoeCt5KSBWSVJUVUFMLCB3IHhpZCk7 Ci1DUkVBVEUgU1RBVElTVElDUyB0c3Qgb24geiBmcm9tIGV4dF9zdGF0c190ZXN0MTsKLUNSRUFU RSBTVEFUSVNUSUNTIHRzdCBvbiAoeikgZnJvbSBleHRfc3RhdHNfdGVzdDE7Ci1DUkVBVEUgU1RB VElTVElDUyB0c3Qgb24gKHorMSkgZnJvbSBleHRfc3RhdHNfdGVzdDE7Ci1DUkVBVEUgU1RBVElT VElDUyB0c3QgKG5kaXN0aW5jdCkgT04geiBmcm9tIGV4dF9zdGF0c190ZXN0MTsKIC0tIHN0YXRp c3RpY3Mgb24gc3lzdGVtIGNvbHVtbiBub3QgYWxsb3dlZAotQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0 IG9uIHRhYmxlb2lkIGZyb20gZXh0X3N0YXRzX3Rlc3QxOwotQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0 IG9uICh0YWJsZW9pZCkgZnJvbSBleHRfc3RhdHNfdGVzdDE7Ci1DUkVBVEUgU1RBVElTVElDUyB0 c3Qgb24gKHRhYmxlb2lkOjppbnQrMSkgZnJvbSBleHRfc3RhdHNfdGVzdDE7Ci1DUkVBVEUgU1RB VElTVElDUyB0c3QgKG5kaXN0aW5jdCkgT04geG1pbiBmcm9tIGV4dF9zdGF0c190ZXN0MTsKLS0t IHN0YXRpc3RpY3Mgd2l0aG91dCBhIGxlc3MtdGhhbiBvcGVyYXRvciBub3Qgc3VwcG9ydGVkCi1D UkVBVEUgU1RBVElTVElDUyB0c3QgKG5kaXN0aW5jdCkgT04gdyBmcm9tIGV4dF9zdGF0c190ZXN0 MTsKLURST1AgVEFCTEUgZXh0X3N0YXRzX3Rlc3QxOworQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0IG9u IHRhYmxlb2lkIGZyb20gZXh0X3N0YXRzX3Rlc3Q7CitDUkVBVEUgU1RBVElTVElDUyB0c3Qgb24g KHRhYmxlb2lkKSBmcm9tIGV4dF9zdGF0c190ZXN0OworQ1JFQVRFIFNUQVRJU1RJQ1MgdHN0IG9u ICh0YWJsZW9pZDo6aW50KzEpIGZyb20gZXh0X3N0YXRzX3Rlc3Q7CitDUkVBVEUgU1RBVElTVElD UyB0c3QgKG5kaXN0aW5jdCkgT04geG1pbiBmcm9tIGV4dF9zdGF0c190ZXN0OworLS0gbXVsdGl2 YXJpYXRlIHN0YXRpc3RpY3Mgd2l0aG91dCBhIGxlc3MtdGhhbiBvcGVyYXRvciBub3Qgc3VwcG9y dGVkCitDUkVBVEUgU1RBVElTVElDUyB0c3QgKG5kaXN0aW5jdCkgT04geCwgdyBmcm9tIGV4dF9z dGF0c190ZXN0OworRFJPUCBUQUJMRSBleHRfc3RhdHNfdGVzdDsKIAogLS0gRW5zdXJlIHN0YXRz IGFyZSBkcm9wcGVkIHNhbmVseSwgYW5kIHRlc3QgSUYgTk9UIEVYSVNUUyB3aGlsZSBhdCBpdAog Q1JFQVRFIFRBQkxFIGFiMSAoYSBJTlRFR0VSLCBiIElOVEVHRVIsIGMgSU5URUdFUik7CkBAIC0x NTg0LDYgKzE1NzcsMzUgQEAgU0VMRUNUIGMwIEZST00gT05MWSBleHByX3N0YXRzX2luY29tcGF0 aWJsZV90ZXN0IFdIRVJFCiAKIERST1AgVEFCTEUgZXhwcl9zdGF0c19pbmNvbXBhdGlibGVfdGVz dDsKIAorLS0gbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3Mgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29s dW1ucworQ1JFQVRFIFRBQkxFIHZpcnR1YWxfZ2VuX3N0YXRzIChhIGludCwgYiBpbnQsIGMgaW50 IEdFTkVSQVRFRCBBTFdBWVMgQVMgKDIqYSksIGQgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGEr YiksIHcgeGlkIEdFTkVSQVRFRCBBTFdBWVMgQVMgKGE6OnRleHQ6OnhpZCkpOworSU5TRVJUIElO VE8gdmlydHVhbF9nZW5fc3RhdHMgU0VMRUNUIG1vZChpLDEwKSwgbW9kKGksMTApIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwKSBzKGkpOworQU5BTFlaRSB2aXJ0dWFsX2dlbl9zdGF0czsKKwor U0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFs X2dlbl9zdGF0cyBXSEVSRSBjID0gMCBBTkQgKDMqYikgPSAwJyk7CitTRUxFQ1QgKiBGUk9NIGNo ZWNrX2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIHZpcnR1YWxfZ2VuX3N0YXRzIFdIRVJF IGQgPSAwIEFORCAoZC0yKmEpID0gMCcpOworCitDUkVBVEUgU1RBVElTVElDUyB2aXJ0dWFsX2dl bl9zdGF0c18xIChtY3YpIE9OIGMsICgzKmIpLCBkLCAoZC0yKmEpIEZST00gdmlydHVhbF9nZW5f c3RhdHM7CitBTkFMWVpFIHZpcnR1YWxfZ2VuX3N0YXRzOworCitTRUxFQ1QgKiBGUk9NIGNoZWNr X2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIHZpcnR1YWxfZ2VuX3N0YXRzIFdIRVJFIGMg PSAwIEFORCAoMypiKSA9IDAnKTsKK1NFTEVDVCAqIEZST00gY2hlY2tfZXN0aW1hdGVkX3Jvd3Mo J1NFTEVDVCAqIEZST00gdmlydHVhbF9nZW5fc3RhdHMgV0hFUkUgZCA9IDAgQU5EIChkLTIqYSkg PSAwJyk7CisKKy0tIHVuaXZhcmlhdGUgc3RhdGlzdGljcyBvbiBpbmRpdmlkdWFsIHZpcnR1YWwg Z2VuZXJhdGVkIGNvbHVtbnMKK0RST1AgU1RBVElTVElDUyB2aXJ0dWFsX2dlbl9zdGF0c18xOwor CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRlZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIHZpcnR1 YWxfZ2VuX3N0YXRzIFdIRVJFIGMgPSAwJyk7CitTRUxFQ1QgKiBGUk9NIGNoZWNrX2VzdGltYXRl ZF9yb3dzKCdTRUxFQ1QgKiBGUk9NIHZpcnR1YWxfZ2VuX3N0YXRzIFdIRVJFIHcgPSAwJyk7CisK K0NSRUFURSBTVEFUSVNUSUNTIHZpcnR1YWxfZ2VuX3N0YXRzX3NpbmdsZSBPTiBjIEZST00gdmly dHVhbF9nZW5fc3RhdHM7CitDUkVBVEUgU1RBVElTVElDUyB2aXJ0dWFsX2dlbl9zdGF0c19zaW5n bGVfd2l0aG91dF9sZXNzX3RoYW4gT04gdyBGUk9NIHZpcnR1YWxfZ2VuX3N0YXRzOworQU5BTFla RSB2aXJ0dWFsX2dlbl9zdGF0czsKKworU0VMRUNUICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93 cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9zdGF0cyBXSEVSRSBjID0gMCcpOworU0VMRUNU ICogRlJPTSBjaGVja19lc3RpbWF0ZWRfcm93cygnU0VMRUNUICogRlJPTSB2aXJ0dWFsX2dlbl9z dGF0cyBXSEVSRSB3ID0gMCcpOworCitEUk9QIFRBQkxFIHZpcnR1YWxfZ2VuX3N0YXRzOworCiAt LSBQZXJtaXNzaW9uIHRlc3RzLiBVc2VycyBzaG91bGQgbm90IGJlIGFibGUgdG8gc2VlIHNwZWNp ZmljIGRhdGEgdmFsdWVzIGluCiAtLSB0aGUgZXh0ZW5kZWQgc3RhdGlzdGljcywgaWYgdGhleSBs YWNrIHBlcm1pc3Npb24gdG8gc2VlIHRob3NlIHZhbHVlcyBpbgogLS0gdGhlIHVuZGVybHlpbmcg dGFibGUuCi0tIAoyLjUxLjAKCg== --000000000000cdf7bd064e276543--