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 1vwUDN-009rcH-22 for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Feb 2026 23:59:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vwUDK-00Bic4-2B for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Feb 2026 23:59:14 +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 1vwUDK-00Bibu-0N for pgsql-hackers@lists.postgresql.org; Sat, 28 Feb 2026 23:59:14 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vwUDG-00000001rJA-14lU for pgsql-hackers@lists.postgresql.org; Sat, 28 Feb 2026 23:59:12 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-899d6b7b073so22376286d6.2 for ; Sat, 28 Feb 2026 15:59:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772323150; cv=none; d=google.com; s=arc-20240605; b=FzrOlttt4L7dfXgAYpf6j3mEXQRtlVn9/XxdgfwU7vJGqTIa1XTiQsG+/keeh4sX0M ZxjT3R4S532QQ6ldnrMVliFqe0oWMFjvmGBygMsSEd+Cq1ublbDz+9jBbu5E+GEMBBwe EyBWYEq2w1pSfkb9PJiOUKRmsm+AxfyhreHRvUBTwB3P/SHSqN7AS4AShEfZYda4y7RG KKqF3ixkizRx7hrmG4ryBgkk7HVc66dwtvX+2OwsW249YF+a4VGL0cu//A7JOXgmJti3 J9Hoa/ZzfH54jKwbLHrLXixmo21VAte3+EMA9K0HaL8TtBj7LfMv9q+ORGFH4nicjIye RZRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=mxeIUuYSGd1GIp8SE7u8DLEaH4Ou5F8XcXh3R3rlltI=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=ZUstjaWjQeoXBBBxw8NOkxG+C+F3njolguzEZHB09R3iCDOLo61QPiC/7O+KV0sBU3 DYS8vcfFGBv1DXIDlWWzFliKrd1h4LLDMtDgGkcwaKIE2Eu5bKAH9ym64GvtxisD6Ot3 bigH4Auj7hD09JbGp+VFzHTighY1RKZpPVuSQ3pNBqU7/5HF+qJ0lPTyX8HqnLcEixjr j83UhZVJcsd6hg3X/6jTGw4/QX+c+rnU40RzCCe1V7y27Oe8cNuIeuXY2OwOTAPQMUBZ /XGhiA5O9hRDHadsCD4/WesibiqM4wGilfmCaspmPlXoM7+5F278Fe58Iy74QHCXTceV ljpA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fittl.com; s=google; t=1772323150; x=1772927950; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=mxeIUuYSGd1GIp8SE7u8DLEaH4Ou5F8XcXh3R3rlltI=; b=mSgYE9d6eCEtJ8kK1LrALxVmQmDXe2o8EPisdv7ko1d+q0KWld3MhwJe1lTTkBdzZd kHaT2q4VHtloWgKPzwbCafkhBZdUVBxYT19FegHv7RuHJqYXEUnzCMJayH+KSMQ2wchf K0vcfRGrfTTyHDGOD+3oPQJwQKoM+ivAVAjwY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772323150; x=1772927950; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=mxeIUuYSGd1GIp8SE7u8DLEaH4Ou5F8XcXh3R3rlltI=; b=CDcd3995fRafXIb2mgnrqDu/Yge9jARXcT7o0Vfr96vo62ulutEyO5Wk+uYNhdo1Jz Hs5NHhxXLo5zr+P5OIpMJvpAwYLjDg97qxuF3gKQdlt4lawIAbfA+9k4SJ0E8oDeqiu0 RRdUa9o3Y+PJblL6Rg4JSOKk9P9EH8r5LRhQ84No3Wh+AuWJAdZ53uL9cGE1hiwSz7sB 82BiDTgywjT7bjwfrryjLjiGvwxxIEXnly5cSSx7MFzhKBRWKXvSrzIhm4tmK6iZQci4 1gn1iWXn5XLnE1l04i3N7tWPIkdEQN1RkDJx9vGXacMXHtlabdAjoYNny3r+hJK/27AK phDA== X-Gm-Message-State: AOJu0Ywei/vq7IJ6wyM5kvc15C4u0bVGP4MB6jWGHReIYRqHtg026T3v fyyJnYuNjMwHBldHjbod5WZm2xs4YkaJxJapLVqpS+0UXlG54BNoo052kIJciYwNjwZh9Alc7/Q UGsiNkq0e+mz5BLgi/rpQjNosMkhPqv4UpOJMJEHPxLm2qMOodC9XRYL/ X-Gm-Gg: ATEYQzwkL2yYc58N6SCjfdBEA9E23KA/qJFQDY8zsV9NSg1PZRgvzEHsIiZkpKakPrC B148Fvpo7BSN+72yJuvtjBgKAL3uIXgUTBDesqDkX0x3hcCO/e89wNbbwhBgWDtQrJukUU3bLdw dZCgMmqtvuKGHlIFeYQ8KGCFFyvevUBOGCfPuCTx4vigVm2A74r1NKk4kVrjjRur+N86IqS2SGO cVTYv0RS6xX0QqajbhrFBVNrk+RM5MbXIIAsrtSGuCHiPtfVUTlN/3XEMBKqUT+L+GAMT+1BVHk IY6WBdHUPwYH8m3U7aOPg30Cop5u9c4PJKVmTmBd X-Received: by 2002:a05:6214:76a:b0:888:3056:dc9e with SMTP id 6a1803df08f44-899d1e2bc3amr116222716d6.43.1772323150457; Sat, 28 Feb 2026 15:59:10 -0800 (PST) MIME-Version: 1.0 From: Lukas Fittl Date: Sat, 28 Feb 2026 15:58:34 -0800 X-Gm-Features: AaiRm50ddsxdPdPYmviyUNtJ0xiAuV2mSz58exyXpntW_BESU8EYPY3TJiLPhHs Message-ID: Subject: pg_buffercache: Add per-relation summary stats To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d01944064beb237d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d01944064beb237d Content-Type: text/plain; charset="UTF-8" Hi, See attached a patch that implements a new function, pg_buffercache_relation_stats(), which returns per-relfilenode statistics on the number of buffers, how many are dirtied/pinned, and their avg usage count. This can be used in monitoring scripts to know which relations are kept in shared buffers, to understand performance issues better that occur due to relations getting evicted from the cache. In our own monitoring tool (pganalyze) we've offered a functionality like this based on the existing pg_buffercache() function for a bit over a year now [0], and people have found this very valuable - but it doesn't work for larger database servers. Specifically, performing a query that gets this information can be prohibitively expensive when using large shared_buffers, and even on the default 128MB shared buffers there is a measurable difference: postgres=# WITH pg_buffercache_relation_stats AS ( SELECT relfilenode, reltablespace, reldatabase, relforknumber, COUNT(*) AS buffers, COUNT(*) FILTER (WHERE isdirty) AS buffers_dirty, COUNT(*) FILTER (WHERE pinning_backends > 0) AS buffers_pinned, AVG(usagecount) AS usagecount_avg FROM pg_buffercache WHERE reldatabase IS NOT NULL GROUP BY 1, 2, 3, 4 ) SELECT * FROM pg_buffercache_relation_stats WHERE relfilenode = 2659; relfilenode | reltablespace | reldatabase | relforknumber | buffers | buffers_dirty | buffers_pinned | usagecount_avg -------------+---------------+-------------+---------------+---------+---------------+----------------+-------------------- 2659 | 1663 | 5 | 0 | 8 | 0 | 0 | 5.0000000000000000 2659 | 1663 | 1 | 0 | 7 | 0 | 0 | 5.0000000000000000 2659 | 1663 | 229553 | 0 | 7 | 0 | 0 | 5.0000000000000000 (3 rows) Time: 20.991 ms postgres=# SELECT * FROM pg_buffercache_relation_stats() WHERE relfilenode = 2659; relfilenode | reltablespace | reldatabase | relforknumber | buffers | buffers_dirty | buffers_pinned | usagecount_avg -------------+---------------+-------------+---------------+---------+---------------+----------------+---------------- 2659 | 1663 | 1 | 0 | 7 | 0 | 0 | 5 2659 | 1663 | 229553 | 0 | 7 | 0 | 0 | 5 2659 | 1663 | 5 | 0 | 8 | 0 | 0 | 5 (3 rows) Time: 2.912 ms With the new function this gets done before putting the data in the tuplestore used for the set-returning function. Thanks, Lukas [0]: https://pganalyze.com/blog/tracking-postgres-buffer-cache-statistics -- Lukas Fittl --000000000000d01944064beb237d Content-Type: application/octet-stream; name="v1-0001-pg_buffercache-Add-pg_buffercache_relation_stats-.patch" Content-Disposition: attachment; filename="v1-0001-pg_buffercache-Add-pg_buffercache_relation_stats-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm6ze3zx0 RnJvbSA1ZTVhOTdkZmQyODBiMzFjMWNjMmU2ZjA0ZjVlZmQ2YjUwYTg5NWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpEYXRlOiBT YXQsIDI4IEZlYiAyMDI2IDE1OjMzOjU2IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MV0gcGdfYnVm ZmVyY2FjaGU6IEFkZCBwZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cygpCiBmdW5jdGlvbgoK VGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFnZ3JlZ2F0aW9uIG9mIGJ1ZmZlciBjb250ZW50cywg Z3JvdXBlZCBvbiBhCnBlci1yZWxmaWxlbm9kZSBiYXNpcy4gVGhpcyBpcyBvZnRlbiB1c2VmdWwg dG8gdW5kZXJzdGFuZCB3aGljaCB0YWJsZXMKb3IgaW5kZXhlcyBhcmUgY3VycmVudGx5IGluIGNh Y2hlLCBhbmQgY2FuIHNob3cgY2FjaGUgZGlzcnVwdGlvbnMgZHVlCnRvIHF1ZXJ5IGFjdGl2aXR5 IHdoZW4gc2FtcGxlZCBvdmVyIHRpbWUuIFRoZSBleGlzdGluZyBwZ19idWZmZXJjYWNoZSgpCmZ1 bmN0aW9uIGNhbiBiZSB1dGlsaXplZCBmb3IgdGhpcyBieSBncm91cGluZyB0aGUgcmVzdWx0LCBi dXQgZHVlIHRvCnRoZSBhbW91bnQgb2YgYnVmZmVyIGVudHJpZXMgKG9uZSBwZXIgcGFnZSkgdGhp cyBjYW4gYmUgcHJvaGliaXRpdmVseQpleHBlbnNpdmUgb24gbGFyZ2UgbWFjaGluZXMuIEV2ZW4g b24gYSBzbWFsbCBzaGFyZWQgYnVmZmVycyAoMTI4TUIpIHRoZQpuZXcgZnVuY3Rpb24gaXMgMTB4 IGZhc3Rlci4gU2ltaWxhciB0byB0aGUgZXhpc3Rpbmcgc3VtbWFyeSBmdW5jdGlvbnMKdGhpcyBu ZXcgZnVuY3Rpb24gZG9lcyBub3QgaG9sZCBhIGxvY2sgd2hpbHN0IGdhdGhlcmluZyBpdHMgc3Rh dGlzdGljcy4KCkF1dGhvcjogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQg Ynk6CkRpc2N1c3Npb246Ci0tLQogY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZSAgICAg ICAgICAgICAgIHwgICAzICstCiAuLi4vZXhwZWN0ZWQvcGdfYnVmZmVyY2FjaGUub3V0ICAgICAg ICAgICAgICAgfCAgMTQgKysKIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQgICAg ICAgICAgICB8ICAgMSArCiAuLi4vcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbCAgICAgICAg ICAgICAgfCAgMjAgKysrCiBjb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLmNv bnRyb2wgfCAgIDIgKy0KIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGVfcGFn ZXMuYyB8IDEzNCArKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvc3Fs L3BnX2J1ZmZlcmNhY2hlLnNxbCB8ICAgNCArCiBkb2Mvc3JjL3NnbWwvcGdidWZmZXJjYWNoZS5z Z21sICAgICAgICAgICAgICAgfCAxMzAgKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQs IDMwOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUtLTEuNy0tMS44LnNxbAoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvTWFrZWZpbGUgYi9jb250cmliL3BnX2J1ZmZl cmNhY2hlL01ha2VmaWxlCmluZGV4IDBlNjE4ZjY2YWVjLi43ZmQ1Y2RmYzQzZCAxMDA2NDQKLS0t IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9NYWtlZmlsZQorKysgYi9jb250cmliL3BnX2J1ZmZl cmNhY2hlL01ha2VmaWxlCkBAIC05LDcgKzksOCBAQCBFWFRFTlNJT04gPSBwZ19idWZmZXJjYWNo ZQogREFUQSA9IHBnX2J1ZmZlcmNhY2hlLS0xLjIuc3FsIHBnX2J1ZmZlcmNhY2hlLS0xLjItLTEu My5zcWwgXAogCXBnX2J1ZmZlcmNhY2hlLS0xLjEtLTEuMi5zcWwgcGdfYnVmZmVyY2FjaGUtLTEu MC0tMS4xLnNxbCBcCiAJcGdfYnVmZmVyY2FjaGUtLTEuMy0tMS40LnNxbCBwZ19idWZmZXJjYWNo ZS0tMS40LS0xLjUuc3FsIFwKLQlwZ19idWZmZXJjYWNoZS0tMS41LS0xLjYuc3FsIHBnX2J1ZmZl cmNhY2hlLS0xLjYtLTEuNy5zcWwKKwlwZ19idWZmZXJjYWNoZS0tMS41LS0xLjYuc3FsIHBnX2J1 ZmZlcmNhY2hlLS0xLjYtLTEuNy5zcWwgXAorCXBnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwK IFBHRklMRURFU0MgPSAicGdfYnVmZmVyY2FjaGUgLSBtb25pdG9yaW5nIG9mIHNoYXJlZCBidWZm ZXIgY2FjaGUgaW4gcmVhbC10aW1lIgogCiBSRUdSRVNTID0gcGdfYnVmZmVyY2FjaGUgcGdfYnVm ZmVyY2FjaGVfbnVtYQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9leHBlY3Rl ZC9wZ19idWZmZXJjYWNoZS5vdXQgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL2V4cGVjdGVkL3Bn X2J1ZmZlcmNhY2hlLm91dAppbmRleCA4ODZkZWE3NzBmNi4uY2I1NTA3YTBkOTIgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvZXhwZWN0ZWQvcGdfYnVmZmVyY2FjaGUub3V0Cisr KyBiL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvZXhwZWN0ZWQvcGdfYnVmZmVyY2FjaGUub3V0CkBA IC0zMyw2ICszMywxMiBAQCBTRUxFQ1QgY291bnQoKikgPiAwIEZST00gcGdfYnVmZmVyY2FjaGVf dXNhZ2VfY291bnRzKCkgV0hFUkUgYnVmZmVycyA+PSAwOwogIHQKICgxIHJvdykKIAorU0VMRUNU IGNvdW50KCopID4gMCBGUk9NIHBnX2J1ZmZlcmNhY2hlX3JlbGF0aW9uX3N0YXRzKCkgV0hFUkUg YnVmZmVycyA+PSAwOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwogLS0g Q2hlY2sgdGhhdCB0aGUgZnVuY3Rpb25zIC8gdmlld3MgY2FuJ3QgYmUgYWNjZXNzZWQgYnkgZGVm YXVsdC4gVG8gYXZvaWQKIC0tIGhhdmluZyB0byBjcmVhdGUgYSBkZWRpY2F0ZWQgdXNlciwgdXNl IHRoZSBwZ19kYXRhYmFzZV9vd25lciBwc2V1ZG8tcm9sZS4KIFNFVCBST0xFIHBnX2RhdGFiYXNl X293bmVyOwpAQCAtNDYsNiArNTIsOCBAQCBTRUxFQ1QgKiBGUk9NIHBnX2J1ZmZlcmNhY2hlX3N1 bW1hcnkoKTsKIEVSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQgZm9yIGZ1bmN0aW9uIHBnX2J1ZmZl cmNhY2hlX3N1bW1hcnkKIFNFTEVDVCAqIEZST00gcGdfYnVmZmVyY2FjaGVfdXNhZ2VfY291bnRz KCk7CiBFUlJPUjogIHBlcm1pc3Npb24gZGVuaWVkIGZvciBmdW5jdGlvbiBwZ19idWZmZXJjYWNo ZV91c2FnZV9jb3VudHMKK1NFTEVDVCAqIEZST00gcGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3Rh dHMoKTsKK0VSUk9SOiAgcGVybWlzc2lvbiBkZW5pZWQgZm9yIGZ1bmN0aW9uIHBnX2J1ZmZlcmNh Y2hlX3JlbGF0aW9uX3N0YXRzCiBSRVNFVCByb2xlOwogLS0gQ2hlY2sgdGhhdCBwZ19tb25pdG9y IGlzIGFsbG93ZWQgdG8gcXVlcnkgdmlldyAvIGZ1bmN0aW9uCiBTRVQgUk9MRSBwZ19tb25pdG9y OwpAQCAtNzMsNiArODEsMTIgQEAgU0VMRUNUIGNvdW50KCopID4gMCBGUk9NIHBnX2J1ZmZlcmNh Y2hlX3VzYWdlX2NvdW50cygpOwogIHQKICgxIHJvdykKIAorU0VMRUNUIGNvdW50KCopID4gMCBG Uk9NIHBnX2J1ZmZlcmNhY2hlX3JlbGF0aW9uX3N0YXRzKCk7CisgP2NvbHVtbj8gCistLS0tLS0t LS0tCisgdAorKDEgcm93KQorCiBSRVNFVCByb2xlOwogLS0tLS0tCiAtLS0tIFRlc3QgcGdfYnVm ZmVyY2FjaGVfZXZpY3QqIGFuZCBwZ19idWZmZXJjYWNoZV9tYXJrX2RpcnR5KiBmdW5jdGlvbnMK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYnVmZmVyY2FjaGUvbWVzb24uYnVpbGQgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkCmluZGV4IGU2ODEyMDVhYmIyLi4zNjE2MjhiOGJl YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9tZXNvbi5idWlsZAorKysgYi9j b250cmliL3BnX2J1ZmZlcmNhY2hlL21lc29uLmJ1aWxkCkBAIC0yNSw2ICsyNSw3IEBAIGluc3Rh bGxfZGF0YSgKICAgJ3BnX2J1ZmZlcmNhY2hlLS0xLjQtLTEuNS5zcWwnLAogICAncGdfYnVmZmVy Y2FjaGUtLTEuNS0tMS42LnNxbCcsCiAgICdwZ19idWZmZXJjYWNoZS0tMS42LS0xLjcuc3FsJywK KyAgJ3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwnLAogICAncGdfYnVmZmVyY2FjaGUuY29u dHJvbCcsCiAgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCiApCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwgYi9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlLS0xLjctLTEuOC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk2MTlkMWMzZTg1Ci0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS0tMS43LS0xLjguc3FsCkBA IC0wLDAgKzEsMjAgQEAKKy8qIGNvbnRyaWIvcGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUt LTEuNy0tMS44LnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBw c3FsLCByYXRoZXIgdGhhbiB2aWEgQUxURVIgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVY VEVOU0lPTiBwZ19idWZmZXJjYWNoZSBVUERBVEUgVE8gJzEuOCciIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMo CisgICAgT1VUIHJlbGZpbGVub2RlIG9pZCwKKyAgICBPVVQgcmVsdGFibGVzcGFjZSBvaWQsCisg ICAgT1VUIHJlbGRhdGFiYXNlIG9pZCwKKyAgICBPVVQgcmVsZm9ya251bWJlciBpbnQyLAorICAg IE9VVCBidWZmZXJzIGludDQsCisgICAgT1VUIGJ1ZmZlcnNfZGlydHkgaW50NCwKKyAgICBPVVQg YnVmZmVyc19waW5uZWQgaW50NCwKKyAgICBPVVQgdXNhZ2Vjb3VudF9hdmcgZmxvYXQ4KQorUkVU VVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfYnVmZmVyY2FjaGVf cmVsYXRpb25fc3RhdHMnCitMQU5HVUFHRSBDIFBBUkFMTEVMIFNBRkU7CisKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMoKSBGUk9NIFBVQkxJQzsK K0dSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMo KSBUTyBwZ19tb25pdG9yOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19i dWZmZXJjYWNoZS5jb250cm9sIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNo ZS5jb250cm9sCmluZGV4IDExNDk5NTUwOTQ1Li5kMmZhOGJhNTNiYSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19idWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZS5jb250cm9sCisrKyBiL2NvbnRyaWIv cGdfYnVmZmVyY2FjaGUvcGdfYnVmZmVyY2FjaGUuY29udHJvbApAQCAtMSw1ICsxLDUgQEAKICMg cGdfYnVmZmVyY2FjaGUgZXh0ZW5zaW9uCiBjb21tZW50ID0gJ2V4YW1pbmUgdGhlIHNoYXJlZCBi dWZmZXIgY2FjaGUnCi1kZWZhdWx0X3ZlcnNpb24gPSAnMS43JworZGVmYXVsdF92ZXJzaW9uID0g JzEuOCcKIG1vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3BnX2J1ZmZlcmNhY2hlJwogcmVsb2Nh dGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZl cmNhY2hlX3BhZ2VzLmMgYi9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3Bh Z2VzLmMKaW5kZXggODliODY4NTUyNDMuLmIxNmE0MjFjYjc3IDEwMDY0NAotLS0gYS9jb250cmli L3BnX2J1ZmZlcmNhY2hlL3BnX2J1ZmZlcmNhY2hlX3BhZ2VzLmMKKysrIGIvY29udHJpYi9wZ19i dWZmZXJjYWNoZS9wZ19idWZmZXJjYWNoZV9wYWdlcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5j bHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIApAQCAtMjIsNiArMjMsNyBAQAogI2RlZmluZSBO VU1fQlVGRkVSQ0FDSEVfUEFHRVNfRUxFTQk5CiAjZGVmaW5lIE5VTV9CVUZGRVJDQUNIRV9TVU1N QVJZX0VMRU0gNQogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfVVNBR0VfQ09VTlRTX0VMRU0gNAor I2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfUkVMQVRJT05fU1RBVFNfRUxFTSA4CiAjZGVmaW5lIE5V TV9CVUZGRVJDQUNIRV9FVklDVF9FTEVNIDIKICNkZWZpbmUgTlVNX0JVRkZFUkNBQ0hFX0VWSUNU X1JFTEFUSU9OX0VMRU0gMwogI2RlZmluZSBOVU1fQlVGRkVSQ0FDSEVfRVZJQ1RfQUxMX0VMRU0g MwpAQCAtMTA3LDggKzEwOSwzMyBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hl X2V2aWN0X2FsbCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX2J1ZmZlcmNhY2hlX21hcmtfZGly dHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9tYXJrX2RpcnR5X3JlbGF0 aW9uKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfYnVmZmVyY2FjaGVfbWFya19kaXJ0eV9hbGwp OworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cyk7CiAK IAorLyoKKyAqIEhhc2gga2V5IGZvciBwZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cyDigJQg Z3JvdXBzIGJ5IHJlbGF0aW9uIGlkZW50aXR5LgorICovCit0eXBlZGVmIHN0cnVjdAoreworCVJl bEZpbGVOdW1iZXIgcmVsZmlsZW51bWJlcjsKKwlPaWQJCQlyZWx0YWJsZXNwYWNlOworCU9pZAkJ CXJlbGRhdGFiYXNlOworCUZvcmtOdW1iZXIJZm9ya251bTsKK30gQnVmZmVyUmVsU3RhdHNLZXk7 CisKKy8qCisgKiBIYXNoIGVudHJ5IGZvciBwZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cyDi gJQgYWNjdW11bGF0ZXMgcGVyLXJlbGF0aW9uCisgKiBidWZmZXIgc3RhdGlzdGljcy4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QKK3sKKwlCdWZmZXJSZWxTdGF0c0tleSBrZXk7CQkvKiBtdXN0IGJlIGZp cnN0ICovCisJaW50MzIJCWJ1ZmZlcnM7CisJaW50MzIJCWJ1ZmZlcnNfZGlydHk7CisJaW50MzIJ CWJ1ZmZlcnNfcGlubmVkOworCWludDY0CQl1c2FnZWNvdW50X3RvdGFsOworfSBCdWZmZXJSZWxT dGF0c0VudHJ5OworCiAvKiBPbmx5IG5lZWQgdG8gdG91Y2ggbWVtb3J5IG9uY2UgcGVyIGJhY2tl bmQgcHJvY2VzcyBsaWZldGltZSAqLwogc3RhdGljIGJvb2wgZmlyc3ROdW1hVG91Y2ggPSB0cnVl OwogCkBAIC05NTgsMyArOTg1LDExMCBAQCBwZ19idWZmZXJjYWNoZV9tYXJrX2RpcnR5X2FsbChQ R19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0RBVFVNKHJlc3VsdCk7CiB9CisKKy8qCisg KiBwZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cworICoKKyAqIFByb2R1Y2VzIGEgc2V0IG9m IHJvd3MgdGhhdCBzdW1tYXJpemUgYnVmZmVyIGNhY2hlIHVzYWdlIHBlciByZWxhdGlvbi1mb3Jr CisgKiBjb21iaW5hdGlvbi4gVGhpcyBlbmFibGVzIG1vbml0b3Jpbmcgc2NyaXB0cyB0byBvbmx5 IGdldCB0aGUgc3VtbWFyeSBzdGF0cywKKyAqIGluc3RlYWQgb2YgYWNjdW11bGF0aW5nIGluIGEg cXVlcnkgd2l0aCB0aGUgZnVsbCBidWZmZXIgaW5mb3JtYXRpb24uCisgKi8KK0RhdHVtCitwZ19i dWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNl dEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlI VEFCCSAgICpyZWxzdGF0c19oYXNoOworCUhBU0hDVEwJCWhhc2hfY3RsOworCUhBU0hfU0VRX1NU QVRVUyBoYXNoX3NlcTsKKwlCdWZmZXJSZWxTdGF0c0VudHJ5ICplbnRyeTsKKwlEYXR1bQkJdmFs dWVzW05VTV9CVUZGRVJDQUNIRV9SRUxBVElPTl9TVEFUU19FTEVNXTsKKwlib29sCQludWxsc1tO VU1fQlVGRkVSQ0FDSEVfUkVMQVRJT05fU1RBVFNfRUxFTV0gPSB7MH07CisKKwlJbml0TWF0ZXJp YWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBDcmVhdGUgYSBoYXNoIHRhYmxlIHRvIGFnZ3Jl Z2F0ZSBzdGF0cyBieSByZWxhdGlvbi1mb3JrICovCisJaGFzaF9jdGwua2V5c2l6ZSA9IHNpemVv ZihCdWZmZXJSZWxTdGF0c0tleSk7CisJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKEJ1ZmZl clJlbFN0YXRzRW50cnkpOworCWhhc2hfY3RsLmhjeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsK KworCXJlbHN0YXRzX2hhc2ggPSBoYXNoX2NyZWF0ZSgicGdfYnVmZmVyY2FjaGUgcmVsYXRpb24g c3RhdHMiLAorCQkJCQkJCQkxMjgsCisJCQkJCQkJCSZoYXNoX2N0bCwKKwkJCQkJCQkJSEFTSF9F TEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09OVEVYVCk7CisKKwkvKiBTaW5nbGUgcGFzcyBvdmVy IGFsbCBidWZmZXJzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOQnVmZmVyczsgaSsrKQorCXsK KwkJQnVmZmVyRGVzYyAqYnVmSGRyOworCQl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwkJQnVmZmVyUmVs U3RhdHNLZXkga2V5OworCQlib29sCQlmb3VuZDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OworCisJCS8qCisJCSAqIFJlYWQgYnVmZmVyIHN0YXRlIHdpdGhvdXQgbG9ja2luZywgc2FtZSBh cyBwZ19idWZmZXJjYWNoZV9zdW1tYXJ5CisJCSAqIGFuZCBwZ19idWZmZXJjYWNoZV91c2FnZV9j b3VudHMuICBMb2NraW5nIHdvdWxkbid0IHByb3ZpZGUgYQorCQkgKiBtZWFuaW5nZnVsbHkgbW9y ZSBjb25zaXN0ZW50IHJlc3VsdCBzaW5jZSBidWZmZXJzIGNhbiBjaGFuZ2Ugc3RhdGUKKwkJICog aW1tZWRpYXRlbHkgYWZ0ZXIgd2UgcmVsZWFzZSB0aGUgbG9jay4KKwkJICovCisJCWJ1ZkhkciA9 IEdldEJ1ZmZlckRlc2NyaXB0b3IoaSk7CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2 NCgmYnVmSGRyLT5zdGF0ZSk7CisKKwkJLyogU2tpcCB1bnVzZWQvaW52YWxpZCBidWZmZXJzICov CisJCWlmICghKGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEKSkKKwkJCWNvbnRpbnVlOworCisJCWtleS5y ZWxmaWxlbnVtYmVyID0gQnVmVGFnR2V0UmVsTnVtYmVyKCZidWZIZHItPnRhZyk7CisJCWtleS5y ZWx0YWJsZXNwYWNlID0gYnVmSGRyLT50YWcuc3BjT2lkOworCQlrZXkucmVsZGF0YWJhc2UgPSBi dWZIZHItPnRhZy5kYk9pZDsKKwkJa2V5LmZvcmtudW0gPSBCdWZUYWdHZXRGb3JrTnVtKCZidWZI ZHItPnRhZyk7CisKKwkJZW50cnkgPSAoQnVmZmVyUmVsU3RhdHNFbnRyeSAqKSBoYXNoX3NlYXJj aChyZWxzdGF0c19oYXNoLAorCQkJCQkJCQkJCQkJCSZrZXksCisJCQkJCQkJCQkJCQkJSEFTSF9F TlRFUiwKKwkJCQkJCQkJCQkJCQkmZm91bmQpOworCisJCWlmICghZm91bmQpCisJCXsKKwkJCWVu dHJ5LT5idWZmZXJzID0gMDsKKwkJCWVudHJ5LT5idWZmZXJzX2RpcnR5ID0gMDsKKwkJCWVudHJ5 LT5idWZmZXJzX3Bpbm5lZCA9IDA7CisJCQllbnRyeS0+dXNhZ2Vjb3VudF90b3RhbCA9IDA7CisJ CX0KKworCQllbnRyeS0+YnVmZmVycysrOworCQllbnRyeS0+dXNhZ2Vjb3VudF90b3RhbCArPSBC VUZfU1RBVEVfR0VUX1VTQUdFQ09VTlQoYnVmX3N0YXRlKTsKKworCQlpZiAoYnVmX3N0YXRlICYg Qk1fRElSVFkpCisJCQllbnRyeS0+YnVmZmVyc19kaXJ0eSsrOworCisJCWlmIChCVUZfU1RBVEVf R0VUX1JFRkNPVU5UKGJ1Zl9zdGF0ZSkgPiAwKQorCQkJZW50cnktPmJ1ZmZlcnNfcGlubmVkKys7 CisJfQorCisJLyogRW1pdCBvbmUgcm93IHBlciBoYXNoIGVudHJ5ICovCisJaGFzaF9zZXFfaW5p dCgmaGFzaF9zZXEsIHJlbHN0YXRzX2hhc2gpOworCXdoaWxlICgoZW50cnkgPSAoQnVmZmVyUmVs U3RhdHNFbnRyeSAqKSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0gTlVMTCkKKwl7CisJ CWlmIChlbnRyeS0+YnVmZmVycyA9PSAwKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBdID0g T2JqZWN0SWRHZXREYXR1bShlbnRyeS0+a2V5LnJlbGZpbGVudW1iZXIpOworCQl2YWx1ZXNbMV0g PSBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5rZXkucmVsdGFibGVzcGFjZSk7CisJCXZhbHVlc1sy XSA9IE9iamVjdElkR2V0RGF0dW0oZW50cnktPmtleS5yZWxkYXRhYmFzZSk7CisJCXZhbHVlc1sz XSA9IEludDE2R2V0RGF0dW0oZW50cnktPmtleS5mb3JrbnVtKTsKKwkJdmFsdWVzWzRdID0gSW50 MzJHZXREYXR1bShlbnRyeS0+YnVmZmVycyk7CisJCXZhbHVlc1s1XSA9IEludDMyR2V0RGF0dW0o ZW50cnktPmJ1ZmZlcnNfZGlydHkpOworCQl2YWx1ZXNbNl0gPSBJbnQzMkdldERhdHVtKGVudHJ5 LT5idWZmZXJzX3Bpbm5lZCk7CisJCXZhbHVlc1s3XSA9IEZsb2F0OEdldERhdHVtKChkb3VibGUp IGVudHJ5LT51c2FnZWNvdW50X3RvdGFsIC8KKwkJCQkJCQkJICAgZW50cnktPmJ1ZmZlcnMpOwor CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCWhhc2hfZGVzdHJveShyZWxzdGF0 c19oYXNoKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2J1ZmZlcmNhY2hlL3NxbC9wZ19idWZmZXJjYWNoZS5zcWwgYi9jb250cmliL3BnX2J1ZmZlcmNh Y2hlL3NxbC9wZ19idWZmZXJjYWNoZS5zcWwKaW5kZXggMTI3ZDYwNDkwNWMuLmVhNTk1MDg1NWQy IDEwMDY0NAotLS0gYS9jb250cmliL3BnX2J1ZmZlcmNhY2hlL3NxbC9wZ19idWZmZXJjYWNoZS5z cWwKKysrIGIvY29udHJpYi9wZ19idWZmZXJjYWNoZS9zcWwvcGdfYnVmZmVyY2FjaGUuc3FsCkBA IC0xOCw2ICsxOCw4IEBAIGZyb20gcGdfYnVmZmVyY2FjaGVfc3VtbWFyeSgpOwogCiBTRUxFQ1Qg Y291bnQoKikgPiAwIEZST00gcGdfYnVmZmVyY2FjaGVfdXNhZ2VfY291bnRzKCkgV0hFUkUgYnVm ZmVycyA+PSAwOwogCitTRUxFQ1QgY291bnQoKikgPiAwIEZST00gcGdfYnVmZmVyY2FjaGVfcmVs YXRpb25fc3RhdHMoKSBXSEVSRSBidWZmZXJzID49IDA7CisKIC0tIENoZWNrIHRoYXQgdGhlIGZ1 bmN0aW9ucyAvIHZpZXdzIGNhbid0IGJlIGFjY2Vzc2VkIGJ5IGRlZmF1bHQuIFRvIGF2b2lkCiAt LSBoYXZpbmcgdG8gY3JlYXRlIGEgZGVkaWNhdGVkIHVzZXIsIHVzZSB0aGUgcGdfZGF0YWJhc2Vf b3duZXIgcHNldWRvLXJvbGUuCiBTRVQgUk9MRSBwZ19kYXRhYmFzZV9vd25lcjsKQEAgLTI2LDYg KzI4LDcgQEAgU0VMRUNUICogRlJPTSBwZ19idWZmZXJjYWNoZV9vc19wYWdlczsKIFNFTEVDVCAq IEZST00gcGdfYnVmZmVyY2FjaGVfcGFnZXMoKSBBUyBwICh3cm9uZyBpbnQpOwogU0VMRUNUICog RlJPTSBwZ19idWZmZXJjYWNoZV9zdW1tYXJ5KCk7CiBTRUxFQ1QgKiBGUk9NIHBnX2J1ZmZlcmNh Y2hlX3VzYWdlX2NvdW50cygpOworU0VMRUNUICogRlJPTSBwZ19idWZmZXJjYWNoZV9yZWxhdGlv bl9zdGF0cygpOwogUkVTRVQgcm9sZTsKIAogLS0gQ2hlY2sgdGhhdCBwZ19tb25pdG9yIGlzIGFs bG93ZWQgdG8gcXVlcnkgdmlldyAvIGZ1bmN0aW9uCkBAIC0zNCw2ICszNyw3IEBAIFNFTEVDVCBj b3VudCgqKSA+IDAgRlJPTSBwZ19idWZmZXJjYWNoZTsKIFNFTEVDVCBjb3VudCgqKSA+IDAgRlJP TSBwZ19idWZmZXJjYWNoZV9vc19wYWdlczsKIFNFTEVDVCBidWZmZXJzX3VzZWQgKyBidWZmZXJz X3VudXNlZCA+IDAgRlJPTSBwZ19idWZmZXJjYWNoZV9zdW1tYXJ5KCk7CiBTRUxFQ1QgY291bnQo KikgPiAwIEZST00gcGdfYnVmZmVyY2FjaGVfdXNhZ2VfY291bnRzKCk7CitTRUxFQ1QgY291bnQo KikgPiAwIEZST00gcGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMoKTsKIFJFU0VUIHJvbGU7 CiAKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BnYnVmZmVyY2FjaGUuc2dtbCBiL2RvYy9z cmMvc2dtbC9wZ2J1ZmZlcmNhY2hlLnNnbWwKaW5kZXggMWU5YWVlMTAyNzUuLjkyMWJhOWI1MzA2 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGdidWZmZXJjYWNoZS5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9wZ2J1ZmZlcmNhY2hlLnNnbWwKQEAgLTMxLDYgKzMxLDEwIEBACiAgIDxwcmltYXJ5 PnBnX2J1ZmZlcmNhY2hlX3VzYWdlX2NvdW50czwvcHJpbWFyeT4KICA8L2luZGV4dGVybT4KIAor IDxpbmRleHRlcm0+CisgIDxwcmltYXJ5PnBnX2J1ZmZlcmNhY2hlX3JlbGF0aW9uX3N0YXRzPC9w cmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCiAgPGluZGV4dGVybT4KICAgPHByaW1hcnk+cGdfYnVm ZmVyY2FjaGVfZXZpY3Q8L3ByaW1hcnk+CiAgPC9pbmRleHRlcm0+CkBAIC02Myw2ICs2Nyw3IEBA CiAgIDxzdHJ1Y3RuYW1lPnBnX2J1ZmZlcmNhY2hlX251bWE8L3N0cnVjdG5hbWU+IHZpZXdzKSwg dGhlCiAgIDxmdW5jdGlvbj5wZ19idWZmZXJjYWNoZV9zdW1tYXJ5KCk8L2Z1bmN0aW9uPiBmdW5j dGlvbiwgdGhlCiAgIDxmdW5jdGlvbj5wZ19idWZmZXJjYWNoZV91c2FnZV9jb3VudHMoKTwvZnVu Y3Rpb24+IGZ1bmN0aW9uLCB0aGUKKyAgPGZ1bmN0aW9uPnBnX2J1ZmZlcmNhY2hlX3JlbGF0aW9u X3N0YXRzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgdGhlCiAgIDxmdW5jdGlvbj5wZ19idWZmZXJj YWNoZV9ldmljdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHRoZQogICA8ZnVuY3Rpb24+cGdfYnVm ZmVyY2FjaGVfZXZpY3RfcmVsYXRpb24oKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCB0aGUKICAgPGZ1 bmN0aW9uPnBnX2J1ZmZlcmNhY2hlX2V2aWN0X2FsbCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHRo ZQpAQCAtMTAyLDYgKzEwNywxMiBAQAogICBjb3VudC4KICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAg VGhlIDxmdW5jdGlvbj5wZ19idWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cygpPC9mdW5jdGlvbj4g ZnVuY3Rpb24gcmV0dXJucyBhCisgIHNldCBvZiByb3dzIHN1bW1hcml6aW5nIGJ1ZmZlciBjYWNo ZSB1c2FnZSBhZ2dyZWdhdGVkIGJ5IHJlbGF0aW9uIGFuZCBmb3JrCisgIG51bWJlci4KKyA8L3Bh cmE+CisKICA8cGFyYT4KICAgQnkgZGVmYXVsdCwgdXNlIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMg aXMgcmVzdHJpY3RlZCB0byBzdXBlcnVzZXJzIGFuZCByb2xlcwogICB3aXRoIHByaXZpbGVnZXMg b2YgdGhlIDxsaXRlcmFsPnBnX21vbml0b3I8L2xpdGVyYWw+IHJvbGUuIEFjY2VzcyBtYXkgYmUK QEAgLTU2NCw2ICs1NzUsMTI1IEBACiAgIDwvcGFyYT4KICA8L3NlY3QyPgogCisgPHNlY3QyIGlk PSJwZ2J1ZmZlcmNhY2hlLXJlbGF0aW9uLXN0YXRzIj4KKyAgPHRpdGxlPlRoZSA8ZnVuY3Rpb24+ cGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMoKTwvZnVuY3Rpb24+IEZ1bmN0aW9uPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIFRoZSBkZWZpbml0aW9ucyBvZiB0aGUgY29sdW1ucyBleHBvc2Vk IGJ5IHRoZSBmdW5jdGlvbiBhcmUgc2hvd24gaW4KKyAgIDx4cmVmIGxpbmtlbmQ9InBnYnVmZmVy Y2FjaGVfcmVsYXRpb25fc3RhdHMtY29sdW1ucyIvPi4KKyAgPC9wYXJhPgorCisgIDx0YWJsZSBp ZD0icGdidWZmZXJjYWNoZV9yZWxhdGlvbl9zdGF0cy1jb2x1bW5zIj4KKyAgIDx0aXRsZT48ZnVu Y3Rpb24+cGdfYnVmZmVyY2FjaGVfcmVsYXRpb25fc3RhdHMoKTwvZnVuY3Rpb24+IE91dHB1dCBD b2x1bW5zPC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8 cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICBDb2x1bW4gVHlwZQorICAgICAgPC9wYXJhPgor ICAgICAgPHBhcmE+CisgICAgICAgRGVzY3JpcHRpb24KKyAgICAgIDwvcGFyYT48L2VudHJ5Pgor ICAgICA8L3Jvdz4KKyAgICA8L3RoZWFkPgorCisgICAgPHRib2R5PgorICAgICA8cm93PgorICAg ICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9k ZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+cmVsZmlsZW5vZGU8L3N0cnVjdGZpZWxk PiA8dHlwZT5vaWQ8L3R5cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0 YWxvZy1wZy1jbGFzcyI+PHN0cnVjdG5hbWU+cGdfY2xhc3M8L3N0cnVjdG5hbWU+PC9saW5rPi48 c3RydWN0ZmllbGQ+cmVsZmlsZW5vZGU8L3N0cnVjdGZpZWxkPikKKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIEZpbGVub2RlIG51bWJlciBvZiB0aGUgcmVsYXRpb24KKyAgICAg IDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5 IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9u Ij4KKyAgICAgICA8c3RydWN0ZmllbGQ+cmVsdGFibGVzcGFjZTwvc3RydWN0ZmllbGQ+IDx0eXBl Pm9pZDwvdHlwZT4KKyAgICAgICAocmVmZXJlbmNlcyA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBn LXRhYmxlc3BhY2UiPjxzdHJ1Y3RuYW1lPnBnX3RhYmxlc3BhY2U8L3N0cnVjdG5hbWU+PC9saW5r Pi48c3RydWN0ZmllbGQ+b2lkPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8 cGFyYT4KKyAgICAgICBUYWJsZXNwYWNlIE9JRCBvZiB0aGUgcmVsYXRpb24KKyAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9 ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAg ICAgICA8c3RydWN0ZmllbGQ+cmVsZGF0YWJhc2U8L3N0cnVjdGZpZWxkPiA8dHlwZT5vaWQ8L3R5 cGU+CisgICAgICAgKHJlZmVyZW5jZXMgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1kYXRhYmFz ZSI+PHN0cnVjdG5hbWU+cGdfZGF0YWJhc2U8L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0Zmll bGQ+b2lkPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAg ICBEYXRhYmFzZSBPSUQgb2YgdGhlIHJlbGF0aW9uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxl X2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZp ZWxkPnJlbGZvcmtudW1iZXI8L3N0cnVjdGZpZWxkPiA8dHlwZT5zbWFsbGludDwvdHlwZT4KKyAg ICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIEZvcmsgbnVtYmVyIHdpdGhpbiB0aGUg cmVsYXRpb247ICBzZWUKKyAgICAgICA8ZmlsZW5hbWU+Y29tbW9uL3JlbHBhdGguaDwvZmlsZW5h bWU+CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAg ICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5f ZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPmJ1ZmZlcnM8L3N0cnVjdGZpZWxkPiA8 dHlwZT5pbnQ0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTnVt YmVyIG9mIGJ1ZmZlcnMgZm9yIHRoZSByZWxhdGlvbgorICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJs ZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3Rm aWVsZD5idWZmZXJzX2RpcnR5PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50NDwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIE51bWJlciBvZiBkaXJ0eSBidWZmZXJzIGZv ciB0aGUgcmVsYXRpb24KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJv bGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+YnVmZmVyc19waW5u ZWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAg PHBhcmE+CisgICAgICAgTnVtYmVyIG9mIHBpbm5lZCBidWZmZXJzIGZvciB0aGUgcmVsYXRpb24K KyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAg PGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZp bml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+dXNhZ2Vjb3VudF9hdmc8L3N0cnVjdGZpZWxk PiA8dHlwZT5mbG9hdDg8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAg ICBBdmVyYWdlIHVzYWdlIGNvdW50IG9mIHRoZSByZWxhdGlvbidzIGJ1ZmZlcnMKKyAgICAgIDwv cGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+Cisg IDwvdGFibGU+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPnBnX2J1ZmZlcmNhY2hlX3Jl bGF0aW9uX3N0YXRzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiByZXR1cm5zIGEKKyAgIHNldCBvZiBy b3dzIHN1bW1hcml6aW5nIHRoZSBzdGF0ZSBvZiBhbGwgc2hhcmVkIGJ1ZmZlcnMsIGFnZ3JlZ2F0 ZWQgYnkKKyAgIHJlbGF0aW9uIGFuZCBmb3JrIG51bWJlci4gIFNpbWlsYXIgYW5kIG1vcmUgZGV0 YWlsZWQgaW5mb3JtYXRpb24gaXMKKyAgIHByb3ZpZGVkIGJ5IHRoZSA8c3RydWN0bmFtZT5wZ19i dWZmZXJjYWNoZTwvc3RydWN0bmFtZT4gdmlldywgYnV0CisgICA8ZnVuY3Rpb24+cGdfYnVmZmVy Y2FjaGVfcmVsYXRpb25fc3RhdHMoKTwvZnVuY3Rpb24+IGlzIHNpZ25pZmljYW50bHkKKyAgIGNo ZWFwZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExpa2UgdGhlIDxzdHJ1Y3RuYW1lPnBn X2J1ZmZlcmNhY2hlPC9zdHJ1Y3RuYW1lPiB2aWV3LAorICAgPGZ1bmN0aW9uPnBnX2J1ZmZlcmNh Y2hlX3JlbGF0aW9uX3N0YXRzKCk8L2Z1bmN0aW9uPiBkb2VzIG5vdCBhY3F1aXJlIGJ1ZmZlcgor ICAgbWFuYWdlciBsb2Nrcy4gVGhlcmVmb3JlIGNvbmN1cnJlbnQgYWN0aXZpdHkgY2FuIGxlYWQg dG8gbWlub3IgaW5hY2N1cmFjaWVzCisgICBpbiB0aGUgcmVzdWx0LgorICA8L3BhcmE+CisgPC9z ZWN0Mj4KKwogIDxzZWN0MiBpZD0icGdidWZmZXJjYWNoZS1wZy1idWZmZXJjYWNoZS1ldmljdCI+ CiAgIDx0aXRsZT5UaGUgPGZ1bmN0aW9uPnBnX2J1ZmZlcmNhY2hlX2V2aWN0KCk8L2Z1bmN0aW9u PiBGdW5jdGlvbjwvdGl0bGU+CiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA3N2UzYzA0MTQ0ZS4uMTlhODdmNzAyZWUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC0zNTcsNiArMzU3LDggQEAgQnVmZmVySGVhcFR1cGxlVGFibGVTbG90CiBCdWZmZXJMb2NrTW9k ZQogQnVmZmVyTG9va3VwRW50CiBCdWZmZXJNYW5hZ2VyUmVsYXRpb24KK0J1ZmZlclJlbFN0YXRz RW50cnkKK0J1ZmZlclJlbFN0YXRzS2V5CiBCdWZmZXJTdHJhdGVneUNvbnRyb2wKIEJ1ZmZlclRh ZwogQnVmZmVyVXNhZ2UKLS0gCjIuNDcuMQoK --000000000000d01944064beb237d--