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 1wN0JL-000Vat-04 for pgsql-bugs@arkaria.postgresql.org; Wed, 13 May 2026 03:31:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wN0JI-0071cD-1t for pgsql-bugs@arkaria.postgresql.org; Wed, 13 May 2026 03:31:00 +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 1wN0JH-0071c5-33 for pgsql-bugs@lists.postgresql.org; Wed, 13 May 2026 03:31:00 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wN0JE-00000000J5o-0QvI for pgsql-bugs@lists.postgresql.org; Wed, 13 May 2026 03:30:58 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-bcb5370bb0dso900292966b.1 for ; Tue, 12 May 2026 20:30:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778643054; cv=none; d=google.com; s=arc-20240605; b=RYKurRzttvJkXGx6l+qwdadvDZlYUOs4xMyGfcYALl9FoUoUhLzguj4/GJIvBIIVDC aOaU1cE8MnKk9tP5CWz3drzaUFljBtqClQPKVuFZgFyy8UMi5OJl85rEy7f6w3pis3yc bCNWFDq+gtNwUeSzM5CksszpHLqCk02u1fAUgJoQfY9ic6ZyTFF2lt6RYw2gGkQR7AJJ Wyc7sofTwfQnee8aHcsGQjctwpM/WFNp7w0TipEat8p26R4vn1U854yDkbg1oZkrgdAY 10NaFduIDtsiOax/ujQJ9hEyHtPYE9Dn8AFTrCmo/XUY9UdWgMjYuRMbO7nGS+JmxRSs MOoA== 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=LU6bAa0w2DvZ+Mjf7lt06muSvGE2sPFcW5o4UQ9dF5I=; fh=AScb96HsWHT50EJZIWQHngp/v1dycFvgfmGCQCZFATU=; b=P2zxJJ3l4cXe/0BdrqpTeM3M+trDFtwWHPBeSJQxiqkNzSnSaFNgkx+rtj7ZOcZxPV TSg77DTueRx+AJEcClBF1f1rERHvAyHRL+NsO9a8ozmI2nedXDiXx7L63Tqc+ygR7Jcs DpvahbqFeUKTtYBVwqq8uQ9DcP97Md2TNiCL16Ac3YmLL3X9b9c5u0UOjVz32BSeyNI7 iBTGlaNzx9DxKh4oc8v5AwBSWgKCarKjO+TFCdFBEFfuZh89rKgf51knEohafAopnPJe 2Tv4jVb4F26K4la4Z8hGTR1pKiCJPZ1RQI7nIoJko9C2UldE+8ctaXDz4kDIqhuDM8oO QJqQ==; 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=gmail.com; s=20251104; t=1778643054; x=1779247854; darn=lists.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=LU6bAa0w2DvZ+Mjf7lt06muSvGE2sPFcW5o4UQ9dF5I=; b=mBzBqthn4Uc6n7d9Ey3/D9DYIRpyFjxh3tWHqXe6P329aMxuzrnLvqJYrwYe9HLPQq uK9wTX7fQH2SNLLWW0fTCFBxUF4Orz07IW1eiY1Eg4P6ifuzYTsvDPjZ5uA2wYM8oXJ6 ydiEbUqO4Wz0PoSOs+PwB3u2l4CBlXctg1vxjGcSErvjzIThtN7/oeNK9sIdaDEtDxF/ 671f5CsPdNUvH0F6hbhQMcu3M0GO0k18UdgFtTQMM4He82P3BXdyYbSnmKbEIb93+Ufn qMBX6BsmC483zvDM3p7yvRzlF6u3XyP6qcrBz4bkXozQU1/Lf0Ey4yAZl4w5WjE+aTav MzMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778643054; x=1779247854; 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=LU6bAa0w2DvZ+Mjf7lt06muSvGE2sPFcW5o4UQ9dF5I=; b=Boh2OVQ19dq10Dh7K7pPJjJKrM2UU/L3VvB1xSR76Wrp5IS0Jy77iQ4lKgijIIhnLS GZPJH8dtxFT6TqTlF/Ms523ZTU6FSGZCUF56zItdu3PPGa2fchwqA+Iizf4SpaV0reO4 5gWjbqmuTppZIzVmtR5RFLFswVEf1H5JprdOMucGwJ09Vd+joC1brLXYcloSDzaf/2WT sKacL8NacTdxnKiy4AF9O4iKblrDNP3Y48kdNFvM+aqSo/GQCNHxjw2IjdwpeIzQ5rVV GLLfIVF63JSn5teVwcBSRkLxHP24RodMtVcNk/8Fa8nVGhr+w4rEWVXkmT8Lce6lC4gr H00A== X-Gm-Message-State: AOJu0Yz1ZAxgJhMzl1DY6PxSvUrGnQD+btnO77kvO/VNzMr0DYbOwXBl 8JTWYM0xFmB+iuUwxKSPqIhxz188SlFEXJzgoxHSBaPq3XbajZ1CsJluMMvUv4C/uxdVig5IGXF MG6lt1i4jc/5uh4RGPPvpPCJUJNWyWStcyO5dm8b7NX67 X-Gm-Gg: Acq92OHFdaevrs/rsE+WUJzNXYHEpc5Mx1QYf7guqNzVQbTjUZkKIpKKJxqbNVzEhVL RdDQ30Ax8L8mrhfqP7tgirKFXAvg9j4MlpoP39ocanKM+gT1xCSp43fCF898XKhtDZCnSKRVPfg ZIvOzaqBlHiTdYd0Xagn62iL7o7iQjmLDzbjP0DGZuH0CXuMDrx82vvIASuqm2wXi1WvOtWfUCL 3J0k0PcnCInvFfgGjxxoZoYX1DJIhMF1rQBGQIE7ebSNgt+C3m11+78dNG3pezJ8inJkrjGsX5e Rn95LrAV+IJ+KpeNEZ1EisPIn5MuYp/QIMf/mjCs+qH3usD9W1ctVi0XvLEIwW516dUHWNH/QHt S5/7Q7Yjh75N52VBtQgBIuPhxmh2Sa3ALcMiFsn0a X-Received: by 2002:a17:907:6d19:b0:bc6:502e:6d68 with SMTP id a640c23a62f3a-bd3c182dba5mr74545966b.40.1778643053669; Tue, 12 May 2026 20:30:53 -0700 (PDT) MIME-Version: 1.0 References: <19439-8f02018f9fc3a240@postgresql.org> In-Reply-To: From: Xuneng Zhou Date: Wed, 13 May 2026 11:30:41 +0800 X-Gm-Features: AVHnY4JX7Z0GKwye_kNKteztaehMIrpnSb55TmiFKgtYBjJU6AT1RYvD4oxnVv4 Message-ID: Subject: Re: BUG #19439: pg_stat_xact_user_tables stat not currect during the transaction To: klemen kobau Cc: pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000065b9f80651aa9b08" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000065b9f80651aa9b08 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > >> --- eager baseline sweep > >> The attached patch records the baseline eagerly at transaction > >> boundaries instead of lazily at counter-increment sites. > >> pgstat_set_pending_baselines() iterates the pgStatPending list and > >> snapshots each entry's current counts into an xact_baseline field via > >> struct assignment. It is called from AtEOXact_PgStat() (after folding > >> transactional counts and removing dropped entries) and from > >> PostPrepare_PgStat() (after relation cleanup), covering commit, abort, > >> and PREPARE TRANSACTION. The view accessors unconditionally subtract > >> the baseline. For entries created in the current transaction, > >> xact_baseline is zero-initialized, so the subtraction is a no-op. > >> > >> I don=E2=80=99t have a clear preference between the two approaches; bo= th are > >> presented for review. > >> > > It would be useful to verify the fix by manually applying the patch > and building the instance. Additionally, a few issues surfaced after > looking at it again, which I will update later. > Here is the updated version using eager baseline refresh, i.e. sweeping all backend-local pending pgstat entries at each top-level transaction boundary= . I tested the eager-baseline approach at both micro and macro levels. The results show the same cost shape in both cases: the patch cost scales with = the number of backend-local pending pgstat entries that must be swept at each top-level transaction boundary. The microbenchmark isolates the transaction-boundary cost. It first create= s a controlled number of pending pgstat entries in one backend, then times 1000= 0 tiny BEGIN/COMMIT boundaries in one simple-query message: BEGIN; COMMIT; BEGIN; COMMIT; ... The results below use matching -O0 --enable-debug --enable-cassert builds f= or both installs. pending entries unpatched us/xact patched us/xact patch del= ta -------------------------------------------------------------------------= -- 0 713.526 703.357 -10.169 100 740.954 754.298 +13.344 1000 1183.302 / 1177.393 1211.533 / 1213.089 about +32= us 5000 2978.008 / 2967.674 3236.365 / 3081.945 about +186 us median Machine: Mac mini, M4 Pro, 48GB mem This is intentionally hostile to eager sweeping: one backend accumulates ma= ny pending entries, then repeatedly crosses top-level transaction boundaries w= hile doing almost no useful work inside the transactions. The added cost is sma= ll at 100 pending entries, where noise matters, but becomes clear at 1000 and 500= 0 entries. In this debug/cassert build, the patch adds roughly 0.03-0.04 us = per pending entry per transaction in the 1000-5000 entry range. Absolute numbe= rs are inflated by the build profile, but the linear shape is the relevant sig= nal. The macro benchmark shows when that same boundary cost is visible in a more query-shaped workload: workload base tps patched tps change ------------------------------------------------------------------ 5000 tables, 1 row/table 11216 6231 -44% 1000 tables, 1000 rows/table 7683 7113 -7% 100 tables, 10000 rows/table 2152 2162 ~0% The latency breakdown explains the TPS pattern. For the 5000-table/1-row c= ase: base: avg_lat=3D0.089 ms, select_avg=3D0.051 ms patched: avg_lat=3D0.160 ms, select_avg=3D0.062 ms Machine: intel xeon server, 40 cores, 128GB mem The SELECT itself barely changes. Most of the regression appears outside t= he SELECT, where the patch does the baseline sweep at transaction end. This i= s the worst case for the eager design: the transaction does very little real = table work, but the backend has thousands of pending relation stats entries. As the number of pending entries drops, or as the query does more real scan work, the same fixed boundary cost is diluted. With 1000 tables and 1000 r= ows per table, the regression falls to about 7%. With 100 tables and 10000 row= s per table, the scan dominates and the sweep over about 100 pending entries is l= ost in noise. Taken together, the benchmarks confirm the expected implementation cost mod= el: eager baseline refresh cost ~=3D O(number of pending pgstat entries per b= ackend) Row count does not directly drive the cost; it only hides or exposes the fi= xed transaction-boundary work. These results suggest that the eager-sweeping approach has an unfavorable cost model for long-lived sessions that accumulate many pending stats entri= es and then execute small transactions. A lazy baseline appraoch, where each pending entry records the current transaction generation only when that entry is fi= rst touched, should avoid the transaction-boundary sweep and make the cost scal= e with the transaction's actual working set instead. However, it still suffers from the potential overhead of additional comparisons on hot paths, as well as incre= ased maintenance pain. --=20 Regards, Xuneng Zhou HighGo Software Co., Ltd. --00000000000065b9f80651aa9b08 Content-Type: application/octet-stream; name="v2-0001-Fix-pg_stat_xact_-views-leaking-across-xact-bound.patch" Content-Disposition: attachment; filename="v2-0001-Fix-pg_stat_xact_-views-leaking-across-xact-bound.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mp3gxfh20 RnJvbSA4ZmNhMDBjZWMzOGYyNDU5YmFlYTNmMTFhMDZkZjc5Yjk0NTcyMTg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog VHVlLCAxMiBNYXkgMjAyNiAxMTo1NTo0NCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEZpeCBw Z19zdGF0X3hhY3RfKiB2aWV3cyBsZWFraW5nIGFjcm9zcyB4YWN0IGJvdW5kYXJpZXMKCnBnU3Rh dFBlbmRpbmcgZW50cmllcyBjYW4gcGVyc2lzdCBhY3Jvc3MgdHJhbnNhY3Rpb24gYm91bmRhcmll cyB3aXRoaW4gYQpiYWNrZW5kLiAgVGhlIHBnX3N0YXRfeGFjdF8qIHZpZXcgYWNjZXNzb3JzIHJl YWQgcmF3IGFjY3VtdWxhdGVkCmNvdW50ZXJzIGZyb20gdGhlc2UgZW50cmllcywgc28gdGhleSBj YW4gcmVwb3J0IGFjdGl2aXR5IGZyb20gcHJpb3IKdHJhbnNhY3Rpb25zIGluc3RlYWQgb2YganVz dCB0aGUgY3VycmVudCBvbmUuCgpGaXggdGhpcyBieSByZWNvcmRpbmcgYSBiYXNlbGluZSBzbmFw c2hvdCBvZiBwZW5kaW5nIHJlbGF0aW9uIGFuZApmdW5jdGlvbiBjb3VudGVycyBhdCBlYWNoIHRv cC1sZXZlbCB0cmFuc2FjdGlvbiBib3VuZGFyeS4KcGdzdGF0X3NldF9wZW5kaW5nX2Jhc2VsaW5l cygpIHdhbGtzIHBnU3RhdFBlbmRpbmcgYXQgY29tbWl0LCBhYm9ydCwKYW5kIFBSRVBBUkUgVFJB TlNBQ1RJT04uICBWaWV3IGFjY2Vzc29ycyBzdWJ0cmFjdCB0aGUgc2F2ZWQgYmFzZWxpbmUKdG8g cHJvZHVjZSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbidzIGRlbHRhLgoKRW50cmllcyBmaXJzdCBj cmVhdGVkIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGtlZXAgYSB6ZXJvIGJhc2VsaW5lLApz byB0aGVpciBkZWx0YSBpcyB1bmNoYW5nZWQuCgpGb3IgZnVuY3Rpb24gc3RhdHMsIGFkZCBQZ1N0 YXRfRnVuY3Rpb25QZW5kaW5nIHRvIHBhaXIKUGdTdGF0X0Z1bmN0aW9uQ291bnRzIHdpdGggYSBi YXNlbGluZSBjb3B5LiAgZmluZF9mdW5jc3RhdF9lbnRyeSgpIG5vdwpyZXR1cm5zIGEgcGFsbG9j J2QgZGVsdGEsIG9yIE5VTEwgd2hlbiB0aGUgZnVuY3Rpb24gd2FzIG5vdCBjYWxsZWQgaW4KdGhl IGN1cnJlbnQgdHJhbnNhY3Rpb24uICBBZGQgdGhlIG5ldyB0eXBlZGVmIHRvIHBnaW5kZW50J3Mg dHlwZWRlZgpsaXN0LgoKQWRkIGEgdGVzdF9taXNjIFRBUCB0ZXN0IGNvdmVyaW5nIGNvdW50ZXIg aXNvbGF0aW9uIGFjcm9zcyBjb25zZWN1dGl2ZQp0cmFuc2FjdGlvbnMgaW4gYSBzaW5nbGUgc2lt cGxlLXF1ZXJ5IG1lc3NhZ2UuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0 LmMgICAgICAgICAgIHwgIDQyICsrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3Rh dF9mdW5jdGlvbi5jICB8ICA0MSArKystCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0 YXRfcmVsYXRpb24uYyAgfCAgMjAgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3Rh dF94YWN0LmMgICAgICB8ICAxNSArKwogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDE2ICsrCiBzcmMvaW5jbHVkZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwu aCAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVp bGQgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxM19wZ3N0YXRfeGFj dC5wbCAgICB8IDIxMSArKysrKysrKysrKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiA5IGZpbGVzIGNoYW5nZWQsIDMzOCBpbnNl cnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy90LzAxM19wZ3N0YXRfeGFjdC5wbAoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvcGdzdGF0LmMKaW5kZXggYjY3ZGE4OGM3ZGMuLmE0MTRhNDg4MzIwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hY3Rpdml0eS9wZ3N0YXQuYwpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyBjb25zdCBQZ1N0 YXRfS2luZEluZm8gcGdzdGF0X2tpbmRfYnVpbHRpbl9pbmZvc1tQR1NUQVRfS0lORF9CVUlMVElO X1NJWkVdCiAJCS5zaGFyZWRfc2l6ZSA9IHNpemVvZihQZ1N0YXRTaGFyZWRfRnVuY3Rpb24pLAog CQkuc2hhcmVkX2RhdGFfb2ZmID0gb2Zmc2V0b2YoUGdTdGF0U2hhcmVkX0Z1bmN0aW9uLCBzdGF0 cyksCiAJCS5zaGFyZWRfZGF0YV9sZW4gPSBzaXplb2YoKChQZ1N0YXRTaGFyZWRfRnVuY3Rpb24g KikgMCktPnN0YXRzKSwKLQkJLnBlbmRpbmdfc2l6ZSA9IHNpemVvZihQZ1N0YXRfRnVuY3Rpb25D b3VudHMpLAorCQkucGVuZGluZ19zaXplID0gc2l6ZW9mKFBnU3RhdF9GdW5jdGlvblBlbmRpbmcp LAogCiAJCS5mbHVzaF9wZW5kaW5nX2NiID0gcGdzdGF0X2Z1bmN0aW9uX2ZsdXNoX2NiLAogCQku cmVzZXRfdGltZXN0YW1wX2NiID0gcGdzdGF0X2Z1bmN0aW9uX3Jlc2V0X3RpbWVzdGFtcF9jYiwK QEAgLTEzNTcsNiArMTM1Nyw0NiBAQCBwZ3N0YXRfZmV0Y2hfcGVuZGluZ19lbnRyeShQZ1N0YXRf S2luZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCkKIAlyZXR1cm4gZW50cnlfcmVmOwog fQogCisvKgorICogU2V0IHhhY3QgYmFzZWxpbmVzIGZvciBhbGwgcGVuZGluZyByZWxhdGlvbiBh bmQgZnVuY3Rpb24gZW50cmllcy4KKyAqCisgKiBDYWxsZWQgYXQgdG9wLWxldmVsIHRyYW5zYWN0 aW9uIGNvbW1pdCwgYWJvcnQsIGFuZCBzdWNjZXNzZnVsIFBSRVBBUkUgdG8KKyAqIHJlY29yZCB0 aGUgY3VycmVudCBjb3VudGVyIHN0YXRlIGFzIHRoZSBiYXNlbGluZS4gIFRoZSBuZXh0IHRyYW5z YWN0aW9uIG9uCisgKiB0aGlzIGJhY2tlbmQgd2lsbCBjb21wdXRlIHhhY3Qtc2NvcGVkIGRlbHRh cyBieSBzdWJ0cmFjdGluZyB0aGlzIGJhc2VsaW5lLgorICoKKyAqIFRoaXMgc3dlZXBzIGFsbCB1 bmZsdXNoZWQgcGVuZGluZyBlbnRyaWVzLCBub3QganVzdCB0aG9zZSB0b3VjaGVkIGluIHRoZQor ICogY3VycmVudCB0cmFuc2FjdGlvbiwgYmVjYXVzZSBub250cmFuc2FjdGlvbmFsIGNvdW50ZXJz IChzY2FucywgYnVmZmVyIGhpdHMsCisgKiBldGMuKSBhY2N1bXVsYXRlIGluIHRoZSBwZW5kaW5n IGVudHJ5IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhCisgKiBQZ1N0YXRfVGFibGVYYWN0U3RhdHVz IHdhcyBjcmVhdGVkLgorICovCit2b2lkCitwZ3N0YXRfc2V0X3BlbmRpbmdfYmFzZWxpbmVzKHZv aWQpCit7CisJZGxpc3RfaXRlcglpdGVyOworCisJZGxpc3RfZm9yZWFjaChpdGVyLCAmcGdTdGF0 UGVuZGluZykKKwl7CisJCVBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmID0KKwkJCWRsaXN0X2Nv bnRhaW5lcihQZ1N0YXRfRW50cnlSZWYsIHBlbmRpbmdfbm9kZSwgaXRlci5jdXIpOworCQlQZ1N0 YXRfS2luZCBraW5kID0gZW50cnlfcmVmLT5zaGFyZWRfZW50cnktPmtleS5raW5kOworCisJCWlm IChraW5kID09IFBHU1RBVF9LSU5EX1JFTEFUSU9OKQorCQl7CisJCQlQZ1N0YXRfVGFibGVTdGF0 dXMgKnRhYnN0YXQgPQorCQkJCShQZ1N0YXRfVGFibGVTdGF0dXMgKikgZW50cnlfcmVmLT5wZW5k aW5nOworCisJCQl0YWJzdGF0LT54YWN0X2Jhc2VsaW5lID0gdGFic3RhdC0+Y291bnRzOworCQl9 CisJCWVsc2UgaWYgKGtpbmQgPT0gUEdTVEFUX0tJTkRfRlVOQ1RJT04pCisJCXsKKwkJCVBnU3Rh dF9GdW5jdGlvblBlbmRpbmcgKmZwZW5kaW5nID0KKwkJCQkoUGdTdGF0X0Z1bmN0aW9uUGVuZGlu ZyAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CisKKwkJCWZwZW5kaW5nLT54YWN0X2Jhc2VsaW5lID0g ZnBlbmRpbmctPmNvdW50czsKKwkJfQorCX0KK30KKwogdm9pZAogcGdzdGF0X2RlbGV0ZV9wZW5k aW5nX2VudHJ5KFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmKQogewpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2Z1bmN0aW9uLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfZnVuY3Rpb24uYwppbmRleCBkNDdkMDVlM2Q5Mi4uMDRiYmUy ZTdjYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5j dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5j CkBAIC0xMTksNyArMTE5LDcgQEAgcGdzdGF0X2luaXRfZnVuY3Rpb25fdXNhZ2UoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8sCiAJCX0KIAl9CiAKLQlwZW5kaW5nID0gZW50cnlfcmVmLT5wZW5kaW5n OworCXBlbmRpbmcgPSAmKChQZ1N0YXRfRnVuY3Rpb25QZW5kaW5nICopIGVudHJ5X3JlZi0+cGVu ZGluZyktPmNvdW50czsKIAogCWZjdS0+ZnMgPSBwZW5kaW5nOwogCkBAIC0xOTIsMTAgKzE5Miwx MiBAQCBwZ3N0YXRfZW5kX2Z1bmN0aW9uX3VzYWdlKFBnU3RhdF9GdW5jdGlvbkNhbGxVc2FnZSAq ZmN1LCBib29sIGZpbmFsaXplKQogYm9vbAogcGdzdGF0X2Z1bmN0aW9uX2ZsdXNoX2NiKFBnU3Rh dF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5vd2FpdCkKIHsKKwlQZ1N0YXRfRnVuY3Rpb25Q ZW5kaW5nICpmcGVuZGluZzsKIAlQZ1N0YXRfRnVuY3Rpb25Db3VudHMgKmxvY2FsZW50OwogCVBn U3RhdFNoYXJlZF9GdW5jdGlvbiAqc2hmdW5jZW50OwogCi0JbG9jYWxlbnQgPSAoUGdTdGF0X0Z1 bmN0aW9uQ291bnRzICopIGVudHJ5X3JlZi0+cGVuZGluZzsKKwlmcGVuZGluZyA9IChQZ1N0YXRf RnVuY3Rpb25QZW5kaW5nICopIGVudHJ5X3JlZi0+cGVuZGluZzsKKwlsb2NhbGVudCA9ICZmcGVu ZGluZy0+Y291bnRzOwogCXNoZnVuY2VudCA9IChQZ1N0YXRTaGFyZWRfRnVuY3Rpb24gKikgZW50 cnlfcmVmLT5zaGFyZWRfc3RhdHM7CiAKIAkvKiBsb2NhbGVudCBhbHdheXMgaGFzIG5vbi16ZXJv IGNvbnRlbnQgKi8KQEAgLTIyMywxOCArMjI1LDM5IEBAIHBnc3RhdF9mdW5jdGlvbl9yZXNldF90 aW1lc3RhbXBfY2IoUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLCBUaW1lc3RhbXBUeiB0cykK IC8qCiAgKiBmaW5kIGFueSBleGlzdGluZyBQZ1N0YXRfRnVuY3Rpb25Db3VudHMgZW50cnkgZm9y IHNwZWNpZmllZCBmdW5jdGlvbgogICoKLSAqIElmIG5vIGVudHJ5LCByZXR1cm4gTlVMTCwgZG9u J3QgY3JlYXRlIGEgbmV3IG9uZQorICogUmV0dXJucyBhIHBhbGxvYydkIGRlbHRhIHN0cnVjdCBz aG93aW5nIG9ubHkgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24ncworICogY29udHJpYnV0aW9uLCBv ciBOVUxMIGlmIHRoZSBmdW5jdGlvbiB3YXMgbm90IGNhbGxlZCBpbiB0aGlzIHRyYW5zYWN0aW9u LgogICovCiBQZ1N0YXRfRnVuY3Rpb25Db3VudHMgKgogZmluZF9mdW5jc3RhdF9lbnRyeShPaWQg ZnVuY19pZCkKIHsKIAlQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZjsKLQotCWVudHJ5X3JlZiA9 IHBnc3RhdF9mZXRjaF9wZW5kaW5nX2VudHJ5KFBHU1RBVF9LSU5EX0ZVTkNUSU9OLCBNeURhdGFi YXNlSWQsIGZ1bmNfaWQpOwotCi0JaWYgKGVudHJ5X3JlZikKLQkJcmV0dXJuIGVudHJ5X3JlZi0+ cGVuZGluZzsKLQlyZXR1cm4gTlVMTDsKKwlQZ1N0YXRfRnVuY3Rpb25QZW5kaW5nICpmcGVuZGlu ZzsKKwlQZ1N0YXRfRnVuY3Rpb25Db3VudHMgKnJlc3VsdDsKKwlQZ1N0YXRfQ291bnRlciBkZWx0 YV9jYWxsczsKKworCWVudHJ5X3JlZiA9IHBnc3RhdF9mZXRjaF9wZW5kaW5nX2VudHJ5KFBHU1RB VF9LSU5EX0ZVTkNUSU9OLAorCQkJCQkJCQkJCSAgIE15RGF0YWJhc2VJZCwgZnVuY19pZCk7CisJ aWYgKCFlbnRyeV9yZWYpCisJCXJldHVybiBOVUxMOworCisJZnBlbmRpbmcgPSAoUGdTdGF0X0Z1 bmN0aW9uUGVuZGluZyAqKSBlbnRyeV9yZWYtPnBlbmRpbmc7CisJZGVsdGFfY2FsbHMgPSBmcGVu ZGluZy0+Y291bnRzLm51bWNhbGxzIC0gZnBlbmRpbmctPnhhY3RfYmFzZWxpbmUubnVtY2FsbHM7 CisJaWYgKGRlbHRhX2NhbGxzID09IDApCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gcGFs bG9jKHNpemVvZihQZ1N0YXRfRnVuY3Rpb25Db3VudHMpKTsKKwlyZXN1bHQtPm51bWNhbGxzID0g ZGVsdGFfY2FsbHM7CisJSU5TVFJfVElNRV9TRVRfWkVSTyhyZXN1bHQtPnRvdGFsX3RpbWUpOwor CUlOU1RSX1RJTUVfQUNDVU1fRElGRihyZXN1bHQtPnRvdGFsX3RpbWUsCisJCQkJCQkgIGZwZW5k aW5nLT5jb3VudHMudG90YWxfdGltZSwKKwkJCQkJCSAgZnBlbmRpbmctPnhhY3RfYmFzZWxpbmUu dG90YWxfdGltZSk7CisJSU5TVFJfVElNRV9TRVRfWkVSTyhyZXN1bHQtPnNlbGZfdGltZSk7CisJ SU5TVFJfVElNRV9BQ0NVTV9ESUZGKHJlc3VsdC0+c2VsZl90aW1lLAorCQkJCQkJICBmcGVuZGlu Zy0+Y291bnRzLnNlbGZfdGltZSwKKwkJCQkJCSAgZnBlbmRpbmctPnhhY3RfYmFzZWxpbmUuc2Vs Zl90aW1lKTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdF9yZWxhdGlvbi5jCmluZGV4IGIyY2EyOGY4M2JhLi4wZGU2OWVmOGIx ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMKQEAg LTUwNSw2ICs1MDUsNyBAQCBmaW5kX3RhYnN0YXRfZW50cnkoT2lkIHJlbF9pZCkKIAlQZ1N0YXRf VGFibGVYYWN0U3RhdHVzICp0cmFuczsKIAlQZ1N0YXRfVGFibGVTdGF0dXMgKnRhYmVudHJ5ID0g TlVMTDsKIAlQZ1N0YXRfVGFibGVTdGF0dXMgKnRhYmxlc3RhdHVzID0gTlVMTDsKKwlQZ1N0YXRf VGFibGVDb3VudHMgKmJhc2VsaW5lOwogCiAJZW50cnlfcmVmID0gcGdzdGF0X2ZldGNoX3BlbmRp bmdfZW50cnkoUEdTVEFUX0tJTkRfUkVMQVRJT04sIE15RGF0YWJhc2VJZCwgcmVsX2lkKTsKIAlp ZiAoIWVudHJ5X3JlZikKQEAgLTUyNSw2ICs1MjYsMjUgQEAgZmluZF90YWJzdGF0X2VudHJ5KE9p ZCByZWxfaWQpCiAJICovCiAJdGFibGVzdGF0dXMtPnRyYW5zID0gTlVMTDsKIAorCS8qCisJICog U3VidHJhY3QgdGhlIHhhY3QgYmFzZWxpbmUgdG8gc2hvdyBvbmx5IHRoZSBjdXJyZW50IHRvcC1s ZXZlbAorCSAqIHRyYW5zYWN0aW9uJ3MgYWN0aXZpdHkuICBPbmx5IHN1YnRyYWN0IGNvdW50ZXJz IGV4cG9zZWQgdGhyb3VnaAorCSAqIHBnX3N0YXRfeGFjdF8qIHZpZXdzLiAgVGhlIHJlbWFpbmlu ZyBQZ1N0YXRfVGFibGVDb3VudHMgZmllbGRzIGFyZQorCSAqIGN1bXVsYXRpdmUgcmVsYXRpb24t bWFpbnRlbmFuY2Ugc3RhdGUsIG5vdCB4YWN0LXZpZXcgb3V0cHV0LgorCSAqLworCWJhc2VsaW5l ID0gJnRhYmVudHJ5LT54YWN0X2Jhc2VsaW5lOworCXRhYmxlc3RhdHVzLT5jb3VudHMubnVtc2Nh bnMgLT0gYmFzZWxpbmUtPm51bXNjYW5zOworCXRhYmxlc3RhdHVzLT5jb3VudHMudHVwbGVzX3Jl dHVybmVkIC09IGJhc2VsaW5lLT50dXBsZXNfcmV0dXJuZWQ7CisJdGFibGVzdGF0dXMtPmNvdW50 cy50dXBsZXNfZmV0Y2hlZCAtPSBiYXNlbGluZS0+dHVwbGVzX2ZldGNoZWQ7CisJdGFibGVzdGF0 dXMtPmNvdW50cy50dXBsZXNfaW5zZXJ0ZWQgLT0gYmFzZWxpbmUtPnR1cGxlc19pbnNlcnRlZDsK Kwl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc191cGRhdGVkIC09IGJhc2VsaW5lLT50dXBsZXNf dXBkYXRlZDsKKwl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19kZWxldGVkIC09IGJhc2VsaW5l LT50dXBsZXNfZGVsZXRlZDsKKwl0YWJsZXN0YXR1cy0+Y291bnRzLnR1cGxlc19ob3RfdXBkYXRl ZCAtPSBiYXNlbGluZS0+dHVwbGVzX2hvdF91cGRhdGVkOworCXRhYmxlc3RhdHVzLT5jb3VudHMu dHVwbGVzX25ld3BhZ2VfdXBkYXRlZCAtPQorCQliYXNlbGluZS0+dHVwbGVzX25ld3BhZ2VfdXBk YXRlZDsKKwl0YWJsZXN0YXR1cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkIC09IGJhc2VsaW5lLT5i bG9ja3NfZmV0Y2hlZDsKKwl0YWJsZXN0YXR1cy0+Y291bnRzLmJsb2Nrc19oaXQgLT0gYmFzZWxp bmUtPmJsb2Nrc19oaXQ7CisKIAkvKgogCSAqIExpdmUgc3VidHJhbnNhY3Rpb24gY291bnRzIGFy ZSBub3QgaW5jbHVkZWQgeWV0LiAgVGhpcyBpcyBub3QgYSBob3QKIAkgKiBjb2RlIHBhdGggc28g cmVjb25jaWxlIHR1cGxlc19pbnNlcnRlZCwgdHVwbGVzX3VwZGF0ZWQgYW5kCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfeGFjdC5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvcGdzdGF0X3hhY3QuYwppbmRleCA1ZTJkNjllNjI5Ny4uYWQ4YWU4OTEx MTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF94YWN0LmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3hhY3QuYwpAQCAtNTUsNiAr NTUsMTQgQEAgQXRFT1hhY3RfUGdTdGF0KGJvb2wgaXNDb21taXQsIGJvb2wgcGFyYWxsZWwpCiAJ fQogCXBnU3RhdFhhY3RTdGFjayA9IE5VTEw7CiAKKwkvKgorCSAqIFJlY29yZCBjdXJyZW50IGNv dW50ZXIgdmFsdWVzIGFzIHRoZSBiYXNlbGluZSBmb3IgdGhlIG5leHQgdHJhbnNhY3Rpb24uCisJ ICogVGhpcyBtdXN0IGJlIGFmdGVyIEF0RU9YYWN0X1BnU3RhdF9SZWxhdGlvbnMoKSwgd2hpY2gg Zm9sZHMKKwkgKiB0cmFuc2FjdGlvbmFsIGNvdW50cyBpbnRvIC0+Y291bnRzLCBhbmQgQXRFT1hh Y3RfUGdTdGF0X0Ryb3BwZWRTdGF0cygpLAorCSAqIHdoaWNoIHJlbW92ZXMgZHJvcHBlZCBlbnRy aWVzIGZyb20gcGdTdGF0UGVuZGluZy4KKwkgKi8KKwlwZ3N0YXRfc2V0X3BlbmRpbmdfYmFzZWxp bmVzKCk7CisKIAkvKiBNYWtlIHN1cmUgYW55IHN0YXRzIHNuYXBzaG90IGlzIHRocm93biBhd2F5 ICovCiAJcGdzdGF0X2NsZWFyX3NuYXBzaG90KCk7CiB9CkBAIC0yMjYsNiArMjM0LDEzIEBAIFBv c3RQcmVwYXJlX1BnU3RhdCh2b2lkKQogCX0KIAlwZ1N0YXRYYWN0U3RhY2sgPSBOVUxMOwogCisJ LyoKKwkgKiBSZWNvcmQgYmFzZWxpbmVzLCBzYW1lIGFzIGF0IGNvbW1pdC9hYm9ydC4gIEF0RU9Y YWN0X1BnU3RhdCgpIGlzIG5vdAorCSAqIGNhbGxlZCBkdXJpbmcgUFJFUEFSRSwgc28gd2l0aG91 dCB0aGlzLCBjb3VudGVycyBmcm9tIHRoZSBwcmVwYXJlZAorCSAqIHRyYW5zYWN0aW9uIHdvdWxk IGxlYWsgaW50byBsYXRlciB0cmFuc2FjdGlvbnMuCisJICovCisJcGdzdGF0X3NldF9wZW5kaW5n X2Jhc2VsaW5lcygpOworCiAJLyogTWFrZSBzdXJlIGFueSBzdGF0cyBzbmFwc2hvdCBpcyB0aHJv d24gYXdheSAqLwogCXBnc3RhdF9jbGVhcl9zbmFwc2hvdCgpOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCBkZmEyZTgzNzYz OC4uZGVjN2ZjZWM4ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC05MCw2ICs5MCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBQZ1N0 YXRfRnVuY3Rpb25Db3VudHMKIAlpbnN0cl90aW1lCXNlbGZfdGltZTsKIH0gUGdTdGF0X0Z1bmN0 aW9uQ291bnRzOwogCisvKiAtLS0tLS0tLS0tCisgKiBQZ1N0YXRfRnVuY3Rpb25QZW5kaW5nCUJh Y2tlbmQtbG9jYWwgcGVuZGluZyBzdGF0ZSBmb3IgZnVuY3Rpb24gc3RhdHMKKyAqCisgKiBXcmFw cyB0aGUgYWNjdW11bGF0ZWQgY291bnRzIHdpdGggYSBwZXItdHJhbnNhY3Rpb24gYmFzZWxpbmUg c28gdGhhdAorICogcGdfc3RhdF94YWN0X3VzZXJfZnVuY3Rpb25zIGNhbiByZXBvcnQgb25seSB0 aGUgY3VycmVudCB0cmFuc2FjdGlvbidzCisgKiBjb250cmlidXRpb24uICBUaGUgYmFzZWxpbmUg aXMgc2V0IGF0IGVhY2ggdG9wLWxldmVsIHRyYW5zYWN0aW9uIGJvdW5kYXJ5CisgKiBieSBwZ3N0 YXRfc2V0X3BlbmRpbmdfYmFzZWxpbmVzKCkuCisgKiAtLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYg c3RydWN0IFBnU3RhdF9GdW5jdGlvblBlbmRpbmcKK3sKKwlQZ1N0YXRfRnVuY3Rpb25Db3VudHMg Y291bnRzOwkvKiBhY2N1bXVsYXRlZCBjb3VudHMgKi8KKwlQZ1N0YXRfRnVuY3Rpb25Db3VudHMg eGFjdF9iYXNlbGluZTsJLyogc25hcHNob3QgYXQgeGFjdCBib3VuZGFyeSAqLworfQkJCVBnU3Rh dF9GdW5jdGlvblBlbmRpbmc7CisKIC8qCiAgKiBXb3JraW5nIHN0YXRlIG5lZWRlZCB0byBhY2N1 bXVsYXRlIHBlci1mdW5jdGlvbi1jYWxsIHRpbWluZyBzdGF0aXN0aWNzLgogICovCkBAIC0xODMs NiArMTk4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1RhYmxlU3RhdHVzCiAJYm9vbAkJc2hh cmVkOwkJCS8qIGlzIGl0IGEgc2hhcmVkIGNhdGFsb2c/ICovCiAJc3RydWN0IFBnU3RhdF9UYWJs ZVhhY3RTdGF0dXMgKnRyYW5zOwkvKiBsb3dlc3Qgc3VieGFjdCdzIGNvdW50cyAqLwogCVBnU3Rh dF9UYWJsZUNvdW50cyBjb3VudHM7CS8qIGV2ZW50IGNvdW50cyB0byBiZSBzZW50ICovCisJUGdT dGF0X1RhYmxlQ291bnRzIHhhY3RfYmFzZWxpbmU7CS8qIHNuYXBzaG90IGF0IHhhY3QgYm91bmRh cnkgKi8KIAlSZWxhdGlvbglyZWxhdGlvbjsJCS8qIHJlbCB0aGF0IGlzIHVzaW5nIHRoaXMgZW50 cnkgKi8KIH0gUGdTdGF0X1RhYmxlU3RhdHVzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5h bC5oCmluZGV4IGZlNDYzZmFhZjYzLi5mOGJiOGE0ZjIzMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0 X2ludGVybmFsLmgKQEAgLTY4NCw2ICs2ODQsNyBAQCBleHRlcm4gUGdTdGF0X0VudHJ5UmVmICpw Z3N0YXRfcHJlcF9wZW5kaW5nX2VudHJ5KFBnU3RhdF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwKIAkJ CQkJCQkJCQkJCSAgYm9vbCAqY3JlYXRlZF9lbnRyeSk7CiBleHRlcm4gUGdTdGF0X0VudHJ5UmVm ICpwZ3N0YXRfZmV0Y2hfcGVuZGluZ19lbnRyeShQZ1N0YXRfS2luZCBraW5kLAogCQkJCQkJCQkJ CQkJICAgT2lkIGRib2lkLCB1aW50NjQgb2JqaWQpOworZXh0ZXJuIHZvaWQgcGdzdGF0X3NldF9w ZW5kaW5nX2Jhc2VsaW5lcyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgKnBnc3RhdF9mZXRjaF9lbnRy eShQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCwKIAkJCQkJCQkJYm9v bCAqbWF5X2ZyZWUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVz b24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCAz NTZkODQ1NGIzOS4uM2JjNTYwMzRmYzAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9taXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29u LmJ1aWxkCkBAIC0yMSw2ICsyMSw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAxMF9pbmRleF9j b25jdXJyZW50bHlfdXBzZXJ0LnBsJywKICAgICAgICd0LzAxMV9sb2NrX3N0YXRzLnBsJywKICAg ICAgICd0LzAxMl9kZGx1dGlscy5wbCcsCisgICAgICAndC8wMTNfcGdzdGF0X3hhY3QucGwnLAog ICAgIF0sCiAgICAgIyBUaGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgY2x1c3Rlci13aWRlLCBzbyBk aXNhYmxlIGluc3RhbGxjaGVjawogICAgICdydW5uaW5nY2hlY2snOiBmYWxzZSwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEzX3Bnc3RhdF94YWN0LnBsIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTNfcGdzdGF0X3hhY3QucGwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAzYWQ4YmEyMTAxCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTNfcGdzdGF0X3hhY3QucGwKQEAgLTAs MCArMSwyMTEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCB0aGF0IHBnX3N0YXRfeGFjdF8qIHZpZXdzIHJl cG9ydCBvbmx5IGN1cnJlbnQtdHJhbnNhY3Rpb24gYWN0aXZpdHksCisjIG5vdCBhY2N1bXVsYXRl ZCBwZW5kaW5nIHN0YXRzIGZyb20gcHJpb3IgdHJhbnNhY3Rpb25zLgorIworIyBVc2UgcHNxbCAt YyBzbyBhbGwgc3RhdGVtZW50cyBpbiBhIGNvbW1hbmQgYXJlIHNlbnQgYXMgb25lIHNpbXBsZS1x dWVyeQorIyBtZXNzYWdlLiAgVGhhdCBwcmVzZXJ2ZXMgcGdTdGF0UGVuZGluZyBlbnRyaWVzIGFj cm9zcyBjb25zZWN1dGl2ZSB0b3AtbGV2ZWwKKyMgdHJhbnNhY3Rpb25zIGJ5IGF2b2lkaW5nIGEg UmVhZHlGb3JRdWVyeSBib3VuZGFyeSwgd2hlcmUgUG9zdGdyZXNNYWluKCkgbWF5CisjIGNhbGwg cGdzdGF0X3JlcG9ydF9zdGF0KCkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwg PT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInRyYWNrX2Z1bmN0aW9ucyA9ICdhbGwnIik7 Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJtYXhfcHJlcGFyZWRfdHJh bnNhY3Rpb25zID0gNSIpOworJG5vZGUtPnN0YXJ0OworCitteSAkZGJuYW1lID0gJ3Bvc3RncmVz JzsKKworJG5vZGUtPnNhZmVfcHNxbCgKKwkkZGJuYW1lLCBxeworCUNSRUFURSBUQUJMRSB0ZXN0 X3hhY3Rfc3RhdHMgKHggaW50KTsKKwlDUkVBVEUgRlVOQ1RJT04gdGVzdF94YWN0X3N0YXRzX2Z1 bmMoKSBSRVRVUk5TIHZvaWQKKwkJTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJCBCRUdJTiBOVUxMOyBF TkQ7ICQkOworfSk7CisKK3N1YiBwc3FsX2Nfc2VxdWVuY2VfbGlrZQoreworCWxvY2FsICRUZXN0 OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7CisKKwlteSAoJG5v ZGUsICRjb21tYW5kcywgJGV4cGVjdGVkX3N0ZG91dCwgJHRlc3RfbmFtZSkgPSBAXzsKKwlteSAo JHN0ZG91dCwgJHN0ZGVycik7CisJbXkgQGNtZCA9ICgKKwkJJG5vZGUtPmluc3RhbGxlZF9jb21t YW5kKCdwc3FsJyksCisJCSctLW5vLXBzcWxyYycsCisJCSctLW5vLWFsaWduJywKKwkJJy0tdHVw bGVzLW9ubHknLAorCQknLS1xdWlldCcsCisJCSctLXNldCcgPT4gJ09OX0VSUk9SX1NUT1A9MScs CisJCSctZCcgPT4gJG5vZGUtPmNvbm5zdHIoJGRibmFtZSkpOworCisJZm9yZWFjaCBteSAkY29t bWFuZCAoQHskY29tbWFuZHN9KQorCXsKKwkJcHVzaCBAY21kLCAnLWMnID0+ICRjb21tYW5kOwor CX0KKworCW15ICRyZXN1bHQgPSBJUEM6OlJ1bjo6cnVuIFxAY21kLCAnPicsIFwkc3Rkb3V0LCAn Mj4nLCBcJHN0ZGVycjsKKworCWlzKCRyZXN1bHQsIDEsICIkdGVzdF9uYW1lOiBleGl0IGNvZGUg MCIpOworCWlzKCRzdGRlcnIsICcnLCAiJHRlc3RfbmFtZTogbm8gc3RkZXJyIik7CisJbGlrZSgk c3Rkb3V0LCAkZXhwZWN0ZWRfc3Rkb3V0LCAiJHRlc3RfbmFtZTogbWF0Y2hlcyIpOworfQorCitz dWIgcHNxbF9jX2xpa2UKK3sKKwlsb2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6 QnVpbGRlcjo6TGV2ZWwgKyAxOworCisJbXkgKCRub2RlLCAkc3FsLCAkZXhwZWN0ZWRfc3Rkb3V0 LCAkdGVzdF9uYW1lKSA9IEBfOworCisJcHNxbF9jX3NlcXVlbmNlX2xpa2UoJG5vZGUsIFskc3Fs XSwgJGV4cGVjdGVkX3N0ZG91dCwgJHRlc3RfbmFtZSk7Cit9CisKK3BzcWxfY19saWtlKAorCSRu b2RlLAorCXF7QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF94YWN0X3N0YXRzIFZBTFVFUyAoMSk7 CisJQ09NTUlUOworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfeGFjdF9zdGF0cyBWQUxVRVMg KDIpOworCVNFTEVDVCAnbl90dXBfaW5zOicgfHwgbl90dXBfaW5zIEZST00gcGdfc3RhdF94YWN0 X3VzZXJfdGFibGVzCisJCVdIRVJFIHJlbG5hbWUgPSAndGVzdF94YWN0X3N0YXRzJzsKKwlDT01N SVQ7fSwKKwlxci9ebl90dXBfaW5zOjEkL20sCisJInRhYmxlIG5fdHVwX2lucyBzaG93cyBvbmx5 IGN1cnJlbnQgdHJhbnNhY3Rpb24ncyBpbnNlcnRzIik7CisKK3BzcWxfY19saWtlKAorCSRub2Rl LAorCXF7QkVHSU47CisJU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF94YWN0X3N0YXRzOworCUNP TU1JVDsKKwlCRUdJTjsKKwlTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3hhY3Rfc3RhdHM7CisJ U0VMRUNUICdzZXFfc2NhbjonIHx8IHNlcV9zY2FuIEZST00gcGdfc3RhdF94YWN0X3VzZXJfdGFi bGVzCisJCVdIRVJFIHJlbG5hbWUgPSAndGVzdF94YWN0X3N0YXRzJzsKKwlDT01NSVQ7fSwKKwlx ci9ec2VxX3NjYW46MSQvbSwKKwkidGFibGUgc2VxX3NjYW4gc2hvd3Mgb25seSBjdXJyZW50IHRy YW5zYWN0aW9uJ3Mgc2NhbnMiKTsKKworcHNxbF9jX2xpa2UoCisJJG5vZGUsCisJcXtCRUdJTjsK KwlTRUxFQ1QgdGVzdF94YWN0X3N0YXRzX2Z1bmMoKTsKKwlTRUxFQ1QgdGVzdF94YWN0X3N0YXRz X2Z1bmMoKTsKKwlDT01NSVQ7CisJQkVHSU47CisJU0VMRUNUIHRlc3RfeGFjdF9zdGF0c19mdW5j KCk7CisJU0VMRUNUICdjYWxsczonIHx8IGNhbGxzIEZST00gcGdfc3RhdF94YWN0X3VzZXJfZnVu Y3Rpb25zCisJCVdIRVJFIGZ1bmNuYW1lID0gJ3Rlc3RfeGFjdF9zdGF0c19mdW5jJzsKKwlDT01N SVQ7fSwKKwlxci9eY2FsbHM6MSQvbSwKKwkiZnVuY3Rpb24gY2FsbHMgc2hvd3Mgb25seSBjdXJy ZW50IHRyYW5zYWN0aW9uJ3MgY2FsbHMiKTsKKworcHNxbF9jX2xpa2UoCisJJG5vZGUsCisJcXtC RUdJTjsKKwlTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3hhY3Rfc3RhdHM7CisJUFJFUEFSRSBU UkFOU0FDVElPTiAndGVzdF9wcmVwJzsKKwlCRUdJTjsKKwlTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZXN0X3hhY3Rfc3RhdHM7CisJU0VMRUNUICdzZXFfc2NhbjonIHx8IHNlcV9zY2FuIEZST00gcGdf c3RhdF94YWN0X3VzZXJfdGFibGVzCisJCVdIRVJFIHJlbG5hbWUgPSAndGVzdF94YWN0X3N0YXRz JzsKKwlDT01NSVQ7fSwKKwlxci9ec2VxX3NjYW46MSQvbSwKKwkidGFibGUgc2VxX3NjYW4gZG9l cyBub3QgbGVhayBhY3Jvc3MgUFJFUEFSRSBib3VuZGFyeSIpOworCiskbm9kZS0+c2FmZV9wc3Fs KCRkYm5hbWUsIHF7Q09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXAnO30pOworCitwc3FsX2NfbGlr ZSgKKwkkbm9kZSwKKwlxe0JFR0lOOworCVNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfeGFjdF9z dGF0czsKKwlJTlNFUlQgSU5UTyB0ZXN0X3hhY3Rfc3RhdHMgVkFMVUVTICg5OSk7CisJQ09NTUlU OworCUJFR0lOOworCVNFTEVDVCAnc2VxX3NjYW46JyB8fCBzZXFfc2NhbiB8fCAnLG5fdHVwX2lu czonIHx8IG5fdHVwX2lucworCQlGUk9NIHBnX3N0YXRfeGFjdF91c2VyX3RhYmxlcworCQlXSEVS RSByZWxuYW1lID0gJ3Rlc3RfeGFjdF9zdGF0cyc7CisJQ09NTUlUO30sCisJcXIvXnNlcV9zY2Fu OjAsbl90dXBfaW5zOjAkL20sCisJInVudG91Y2hlZCByZWxhdGlvbiBlbnRyeSBzaG93cyB6ZXJv ZXMgaW4gY3VycmVudCB0cmFuc2FjdGlvbiIpOworCitwc3FsX2NfbGlrZSgKKwkkbm9kZSwKKwlx e0JFR0lOOworCVNFTEVDVCB0ZXN0X3hhY3Rfc3RhdHNfZnVuYygpOworCUNPTU1JVDsKKwlCRUdJ TjsKKwlTRUxFQ1QgJ2ZvdW5kOicgfHwgY291bnQoKikgRlJPTSBwZ19zdGF0X3hhY3RfdXNlcl9m dW5jdGlvbnMKKwkJV0hFUkUgZnVuY25hbWUgPSAndGVzdF94YWN0X3N0YXRzX2Z1bmMnOworCUNP TU1JVDt9LAorCXFyL15mb3VuZDowJC9tLAorCSJ1bmNhbGxlZCBmdW5jdGlvbiBpcyBub3Qgdmlz aWJsZSBpbiBwZ19zdGF0X3hhY3RfdXNlcl9mdW5jdGlvbnMiKTsKKworcHNxbF9jX2xpa2UoCisJ JG5vZGUsCisJcXtCRUdJTjsKKwlTRUxFQ1QgdGVzdF94YWN0X3N0YXRzX2Z1bmMoKTsKKwlTRUxF Q1QgdGVzdF94YWN0X3N0YXRzX2Z1bmMoKTsKKwlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X2Z1 bmNfcHJlcCc7CisJQkVHSU47CisJU0VMRUNUIHRlc3RfeGFjdF9zdGF0c19mdW5jKCk7CisJU0VM RUNUICdjYWxsczonIHx8IGNhbGxzIEZST00gcGdfc3RhdF94YWN0X3VzZXJfZnVuY3Rpb25zCisJ CVdIRVJFIGZ1bmNuYW1lID0gJ3Rlc3RfeGFjdF9zdGF0c19mdW5jJzsKKwlDT01NSVQ7fSwKKwlx ci9eY2FsbHM6MSQvbSwKKwkiZnVuY3Rpb24gY2FsbHMgZG8gbm90IGxlYWsgYWNyb3NzIFBSRVBB UkUgYm91bmRhcnkiKTsKKworJG5vZGUtPnNhZmVfcHNxbCgkZGJuYW1lLCBxe0NPTU1JVCBQUkVQ QVJFRCAndGVzdF9mdW5jX3ByZXAnO30pOworCitwc3FsX2Nfc2VxdWVuY2VfbGlrZSgKKwkkbm9k ZSwKKwlbCisJCXF7QkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfeGFjdF9zdGF0cyBWQUxVRVMg KDMwMCk7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfY29tbWl0X3ByZXAnOworCQlTRUxF Q1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7fSwKKwkJcXtDT01NSVQgUFJFUEFSRUQgJ3Rl c3RfY29tbWl0X3ByZXAnO30sCisJCXF7QkVHSU47CisJCVNFTEVDVCAnbl90dXBfaW5zOicgfHwg bl90dXBfaW5zIEZST00gcGdfc3RhdF94YWN0X3VzZXJfdGFibGVzCisJCQlXSEVSRSByZWxuYW1l ID0gJ3Rlc3RfeGFjdF9zdGF0cyc7CisJCUNPTU1JVDt9CisJXSwKKwlxci9ebl90dXBfaW5zOjAk L20sCisJInRhYmxlIG5fdHVwX2lucyBkb2VzIG5vdCBsZWFrIGFmdGVyIENPTU1JVCBQUkVQQVJF RCIpOworCitwc3FsX2Nfc2VxdWVuY2VfbGlrZSgKKwkkbm9kZSwKKwlbCisJCXF7QkVHSU47CisJ CUlOU0VSVCBJTlRPIHRlc3RfeGFjdF9zdGF0cyBWQUxVRVMgKDQwMCk7CisJCVBSRVBBUkUgVFJB TlNBQ1RJT04gJ3Rlc3Rfcm9sbGJhY2tfcHJlcCc7CisJCVNFTEVDVCBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTt9LAorCQlxe1JPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3JvbGxiYWNrX3ByZXAn O30sCisJCXF7QkVHSU47CisJCVNFTEVDVCAnbl90dXBfaW5zOicgfHwgbl90dXBfaW5zIEZST00g cGdfc3RhdF94YWN0X3VzZXJfdGFibGVzCisJCQlXSEVSRSByZWxuYW1lID0gJ3Rlc3RfeGFjdF9z dGF0cyc7CisJCUNPTU1JVDt9CisJXSwKKwlxci9ebl90dXBfaW5zOjAkL20sCisJInRhYmxlIG5f dHVwX2lucyBkb2VzIG5vdCBsZWFrIGFmdGVyIFJPTExCQUNLIFBSRVBBUkVEIik7CisKK2ZvciBt eSAkZ2lkICgKKwlxdyh0ZXN0X3ByZXAgdGVzdF9mdW5jX3ByZXAgdGVzdF9jb21taXRfcHJlcCB0 ZXN0X3JvbGxiYWNrX3ByZXApKQoreworCWV2YWwgeyAkbm9kZS0+c2FmZV9wc3FsKCRkYm5hbWUs ICJST0xMQkFDSyBQUkVQQVJFRCAnJGdpZCciKTsgfTsKK30KKworJG5vZGUtPnNhZmVfcHNxbCgK KwkkZGJuYW1lLCBxeworCURST1AgVEFCTEUgdGVzdF94YWN0X3N0YXRzOworCURST1AgRlVOQ1RJ T04gdGVzdF94YWN0X3N0YXRzX2Z1bmMoKTsKK30pOworCiskbm9kZS0+c3RvcDsKK2RvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwNjUzMmJmNzE1Mi4uZWJhNThk ODYwY2YgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMzMwLDYgKzIzMzAsNyBAQCBQ Z1N0YXRfRW50cnlSZWZIYXNoRW50cnkKIFBnU3RhdF9GZXRjaENvbnNpc3RlbmN5CiBQZ1N0YXRf RnVuY3Rpb25DYWxsVXNhZ2UKIFBnU3RhdF9GdW5jdGlvbkNvdW50cworUGdTdGF0X0Z1bmN0aW9u UGVuZGluZwogUGdTdGF0X0hhc2hLZXkKIFBnU3RhdF9JTwogUGdTdGF0X0tpbmRJbmZvCi0tIAoy LjUxLjAKCg== --00000000000065b9f80651aa9b08 Content-Type: text/x-sh; charset="US-ASCII"; name="pgstat_xact_macro_bench.sh" Content-Disposition: attachment; filename="pgstat_xact_macro_bench.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mp3gzhqy1 IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2V0IC1ldW8gcGlwZWZhaWwKCnVzYWdlKCkKewoJY2F0IDw8 J1VTQUdFJwpVc2FnZToKICBwZ3N0YXRfeGFjdF9tYWNyb19iZW5jaC5zaCBbb3B0aW9uc10KCk9w dGlvbnM6CiAgLS1wZy1iaW4gRElSICAgICAgICAgICAgICBSdW4gb25lIFBvc3RncmVTUUwgaW5z dGFsbC4KICAtLXBhdGNoZWQtcGctYmluIERJUiAgICAgIFJ1biBhbmQgbGFiZWwgdGhpcyBpbnN0 YWxsIGFzIHBhdGNoZWQuCiAgLS11bnBhdGNoZWQtcGctYmluIERJUiAgICBSdW4gYW5kIGxhYmVs IHRoaXMgaW5zdGFsbCBhcyB1bnBhdGNoZWQuCiAgLS10YWJsZXMgNTAwMCAgICAgICAgICAgICBO dW1iZXIgb2YgdGVuYW50IHRhYmxlcyB0byBjcmVhdGUuCiAgLS1yb3dzLXBlci10YWJsZSAxICAg ICAgICBSb3dzIGluc2VydGVkIGludG8gZWFjaCB0ZW5hbnQgdGFibGUuCiAgLS1jbGllbnRzIDEg ICAgICAgICAgICAgICBwZ2JlbmNoIGNsaWVudHMuIFVzZSAxIGZvciBvbmUgbG9uZy1saXZlZCBi YWNrZW5kLgogIC0tam9icyAxICAgICAgICAgICAgICAgICAgcGdiZW5jaCB3b3JrZXIgdGhyZWFk cy4KICAtLXRpbWUgNjAgICAgICAgICAgICAgICAgIE1lYXN1cmVkIHBnYmVuY2ggZHVyYXRpb24g aW4gc2Vjb25kcy4KICAtLXdhcm11cCAxMCAgICAgICAgICAgICAgIFdhcm11cCBkdXJhdGlvbiBp biBzZWNvbmRzLgogIC0tcG9ydC1iYXNlIDY1NDQwICAgICAgICAgRmlyc3QgdGVtcG9yYXJ5IHNl cnZlciBwb3J0LgogIC0ta2VlcCAgICAgICAgICAgICAgICAgICAgS2VlcCB0ZW1wb3JhcnkgY2x1 c3RlciBkaXJlY3Rvcmllcy4KCkVudmlyb25tZW50OgogIFBHX0JJTiAgICAgICAgICAgICAgICAg ICAgU2FtZSBhcyAtLXBnLWJpbi4KCkV4YW1wbGVzOgogIC4vcGdzdGF0X3hhY3RfbWFjcm9fYmVu Y2guc2ggLS1wZy1iaW4gLi9pbnN0L2JpbgoKICAuL3Bnc3RhdF94YWN0X21hY3JvX2JlbmNoLnNo IFwKICAgICAgLS11bnBhdGNoZWQtcGctYmluIC90bXAvcGctdW5wYXRjaGVkL2luc3QvYmluIFwK ICAgICAgLS1wYXRjaGVkLXBnLWJpbiAvdG1wL3BnLXBhdGNoZWQvaW5zdC9iaW4KCldoZW4gYm90 aCAtLXBhdGNoZWQtcGctYmluIGFuZCAtLXVucGF0Y2hlZC1wZy1iaW4gYXJlIHByb3ZpZGVkLCBy dW5zIGFyZQpleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgb3B0aW9ucyBhcHBlYXIg b24gdGhlIGNvbW1hbmQgbGluZS4gIFVzZQp0aGF0IHRvIGNoZWNrIGZvciBvcmRlciBiaWFzLgoK VGhpcyBiZW5jaG1hcmsgbW9kZWxzIGEgcmVhbGlzdGljIGJhZCBjYXNlIGZvciB0cmFuc2FjdGlv bi1ib3VuZGFyeSBwZ3N0YXQKd29yazogbWFueSB0ZW5hbnQgdGFibGVzLCBvbmUgbG9uZy1saXZl ZCBjb25uZWN0aW9uLCBtYW55IHNob3J0IHRyYW5zYWN0aW9ucywKYW5kIHBlbmRpbmcgc3RhdHMg ZW50cmllcyByZXRhaW5lZCBpbiB0aGUgYmFja2VuZCB3aGlsZSB0aGUgd29ya2xvYWQga2VlcHMK cnVubmluZy4gIFRoZSBwZ2JlbmNoIHNjcmlwdCBpczoKCiAgXHNldCBpZCByYW5kb20oMSwgTikK ICBCRUdJTjsKICBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZW5hbnRfOmlkOwogIENPTU1JVDsKVVNB R0UKfQoKcGdfYmluPSIke1BHX0JJTjotfSIKcGF0Y2hlZF9wZ19iaW49IiIKdW5wYXRjaGVkX3Bn X2Jpbj0iIgpydW5fbGFiZWxzPSgpCnJ1bl9iaW5zPSgpCnRhYmxlcz01MDAwCnJvd3NfcGVyX3Rh YmxlPTEKY2xpZW50cz0xCmpvYnM9MQpkdXJhdGlvbj02MAp3YXJtdXA9MTAKcG9ydF9iYXNlPTY1 NDQwCmtlZXA9MAoKd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCgljYXNlICIkMSIgaW4KCQktLXBn LWJpbikKCQkJcGdfYmluPSIkMiIKCQkJc2hpZnQgMgoJCQk7OwoJCS0tcGF0Y2hlZC1wZy1iaW4p CgkJCXBhdGNoZWRfcGdfYmluPSIkMiIKCQkJcnVuX2xhYmVscys9KCJwYXRjaGVkIikKCQkJcnVu X2JpbnMrPSgiJDIiKQoJCQlzaGlmdCAyCgkJCTs7CgkJLS11bnBhdGNoZWQtcGctYmluKQoJCQl1 bnBhdGNoZWRfcGdfYmluPSIkMiIKCQkJcnVuX2xhYmVscys9KCJ1bnBhdGNoZWQiKQoJCQlydW5f Ymlucys9KCIkMiIpCgkJCXNoaWZ0IDIKCQkJOzsKCQktLXRhYmxlcykKCQkJdGFibGVzPSIkMiIK CQkJc2hpZnQgMgoJCQk7OwoJCS0tcm93cy1wZXItdGFibGUpCgkJCXJvd3NfcGVyX3RhYmxlPSIk MiIKCQkJc2hpZnQgMgoJCQk7OwoJCS0tY2xpZW50cykKCQkJY2xpZW50cz0iJDIiCgkJCXNoaWZ0 IDIKCQkJOzsKCQktLWpvYnMpCgkJCWpvYnM9IiQyIgoJCQlzaGlmdCAyCgkJCTs7CgkJLS10aW1l KQoJCQlkdXJhdGlvbj0iJDIiCgkJCXNoaWZ0IDIKCQkJOzsKCQktLXdhcm11cCkKCQkJd2FybXVw PSIkMiIKCQkJc2hpZnQgMgoJCQk7OwoJCS0tcG9ydC1iYXNlKQoJCQlwb3J0X2Jhc2U9IiQyIgoJ CQlzaGlmdCAyCgkJCTs7CgkJLS1rZWVwKQoJCQlrZWVwPTEKCQkJc2hpZnQKCQkJOzsKCQktLWhl bHB8LWgpCgkJCXVzYWdlCgkJCWV4aXQgMAoJCQk7OwoJCSopCgkJCWVjaG8gInVua25vd24gb3B0 aW9uOiAkMSIgPiYyCgkJCXVzYWdlID4mMgoJCQlleGl0IDIKCQkJOzsKCWVzYWMKZG9uZQoKaWYg WyAtbiAiJHBnX2JpbiIgXTsgdGhlbgoJaWYgWyAtbiAiJHBhdGNoZWRfcGdfYmluIiBdIHx8IFsg LW4gIiR1bnBhdGNoZWRfcGdfYmluIiBdOyB0aGVuCgkJZWNobyAiLS1wZy1iaW4gY2Fubm90IGJl IGNvbWJpbmVkIHdpdGggLS1wYXRjaGVkLXBnLWJpbiBvciAtLXVucGF0Y2hlZC1wZy1iaW4iID4m MgoJCWV4aXQgMQoJZmkKCXJ1bl9sYWJlbHM9KCJidWlsZCIpCglydW5fYmlucz0oIiRwZ19iaW4i KQpmaQoKaWYgWyAiJHsjcnVuX2JpbnNbQF19IiAtZXEgMCBdOyB0aGVuCgllY2hvICJzZXQgUEdf QklOIG9yIHBhc3MgLS1wZy1iaW4vLS1wYXRjaGVkLXBnLWJpbi8tLXVucGF0Y2hlZC1wZy1iaW4i ID4mMgoJZXhpdCAxCmZpCgpmb3IgYmluIGluICIke3J1bl9iaW5zW0BdfSI7IGRvCglmb3IgcHJv ZyBpbiBwb3N0Z3JlcyBpbml0ZGIgcGdfY3RsIHBzcWwgcGdiZW5jaDsgZG8KCQlpZiBbICEgLXgg IiRiaW4vJHByb2ciIF07IHRoZW4KCQkJZWNobyAibWlzc2luZyBleGVjdXRhYmxlOiAkYmluLyRw cm9nIiA+JjIKCQkJZXhpdCAxCgkJZmkKCWRvbmUKZG9uZQoKcGdfdG9vbCgpCnsKCWxvY2FsIGJp bj0iJDEiCglsb2NhbCBwcm9nPSIkMiIKCWxvY2FsIGxpYmRpcgoKCXNoaWZ0IDIKCWxpYmRpcj0i JChjZCAiJGJpbi8uLi9saWIiIDI+L2Rldi9udWxsICYmIHB3ZCB8fCB0cnVlKSIKCWlmIFsgLXog IiRsaWJkaXIiIF07IHRoZW4KCQkiJGJpbi8kcHJvZyIgIiRAIgoJCXJldHVybgoJZmkKCWNhc2Ug IiQodW5hbWUgLXMpIiBpbgoJCURhcndpbikKCQkJRFlMRF9MSUJSQVJZX1BBVEg9IiRsaWJkaXIk e0RZTERfTElCUkFSWV9QQVRIOis6JERZTERfTElCUkFSWV9QQVRIfSIgXAoJCQkJIiRiaW4vJHBy b2ciICIkQCIKCQkJOzsKCQkqKQoJCQlMRF9MSUJSQVJZX1BBVEg9IiRsaWJkaXIke0xEX0xJQlJB UllfUEFUSDorOiRMRF9MSUJSQVJZX1BBVEh9IiBcCgkJCQkiJGJpbi8kcHJvZyIgIiRAIgoJCQk7 OwoJZXNhYwp9Cgp0bXBkaXJzPSgpCmRhdGFkaXJzPSgpCnBnX2JpbnM9KCkKY3JlYXRlZF90bXBk aXI9IiIKY3JlYXRlZF9zY3JpcHRfZmlsZT0iIgpjcmVhdGVkX2Nvbm5pbmZvPSIiCgpjbGVhbnVw KCkKewoJc2V0ICtlCglsb2NhbCBpCgoJZm9yIGkgaW4gIiR7IWRhdGFkaXJzW0BdfSI7IGRvCgkJ aWYgWyAtZCAiJHtkYXRhZGlyc1skaV19IiBdOyB0aGVuCgkJCXBnX3Rvb2wgIiR7cGdfYmluc1sk aV19IiBwZ19jdGwgLUQgIiR7ZGF0YWRpcnNbJGldfSIgLW0gZmFzdCAtdyBzdG9wIFwKCQkJCT4v ZGV2L251bGwgMj4mMQoJCWZpCglkb25lCgoJaWYgWyAiJGtlZXAiIC1lcSAwIF07IHRoZW4KCQlm b3IgaSBpbiAiJHshdG1wZGlyc1tAXX0iOyBkbwoJCQlybSAtcmYgIiR7dG1wZGlyc1skaV19IgoJ CWRvbmUKCWVsc2UKCQlmb3IgaSBpbiAiJHshdG1wZGlyc1tAXX0iOyBkbwoJCQllY2hvICJrZXB0 IHRlbXBvcmFyeSBkaXJlY3Rvcnk6ICR7dG1wZGlyc1skaV19IgoJCWRvbmUKCWZpCn0KdHJhcCBj bGVhbnVwIEVYSVQKdHJhcCAndHJhcCAtIEVYSVQ7IGNsZWFudXA7IGV4aXQgMTMwJyBJTlQKdHJh cCAndHJhcCAtIEVYSVQ7IGNsZWFudXA7IGV4aXQgMTQzJyBURVJNCgpjcmVhdGVfY2x1c3Rlcigp CnsKCWxvY2FsIGxhYmVsPSIkMSIKCWxvY2FsIGJpbj0iJDIiCglsb2NhbCBwb3J0PSIkMyIKCWxv Y2FsIHRtcGRpciBkYXRhZGlyIGxvZ2ZpbGUgc2V0dXBfc3FsIHNjcmlwdF9maWxlIGNvbm5pbmZv CgoJdG1wZGlyPSIkKG1rdGVtcCAtZCAiJHtUTVBESVI6LS90bXB9L3Bnc3RhdC14YWN0LW1hY3Jv LSR7bGFiZWx9LlhYWFhYWCIpIgoJZGF0YWRpcj0iJHRtcGRpci9kYXRhIgoJbG9nZmlsZT0iJHRt cGRpci9wb3N0Z3Jlcy5sb2ciCglzZXR1cF9zcWw9IiR0bXBkaXIvc2V0dXAuc3FsIgoJc2NyaXB0 X2ZpbGU9IiR0bXBkaXIvdGVuYW50LnNxbCIKCgl0bXBkaXJzKz0oIiR0bXBkaXIiKQoJZGF0YWRp cnMrPSgiJGRhdGFkaXIiKQoJcGdfYmlucys9KCIkYmluIikKCglwZ190b29sICIkYmluIiBpbml0 ZGIgLUQgIiRkYXRhZGlyIiAtLWF1dGggdHJ1c3QgLS1uby1zeW5jIC0tbm8taW5zdHJ1Y3Rpb25z IFwKCQktLWxjLW1lc3NhZ2VzPUMgPi9kZXYvbnVsbAoJY2F0ID4+IiRkYXRhZGlyL3Bvc3RncmVz cWwuY29uZiIgPDxFT0YKbGlzdGVuX2FkZHJlc3NlcyA9ICcnCnBvcnQgPSAkcG9ydAp1bml4X3Nv Y2tldF9kaXJlY3RvcmllcyA9ICckdG1wZGlyJwpmc3luYyA9IG9mZgpzeW5jaHJvbm91c19jb21t aXQgPSBvZmYKYXV0b3ZhY3V1bSA9IG9mZgp0cmFja19mdW5jdGlvbnMgPSAnbm9uZScKbWF4X3By ZXBhcmVkX3RyYW5zYWN0aW9ucyA9IDAKRU9GCglwZ190b29sICIkYmluIiBwZ19jdGwgLUQgIiRk YXRhZGlyIiAtbCAiJGxvZ2ZpbGUiIC13IHN0YXJ0ID4vZGV2L251bGwKCgl7CgkJZWNobyAiU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSB3YXJuaW5nOyIKCQllY2hvICJEUk9QIFNDSEVNQSBJRiBF WElTVFMgcGdzdGF0X3hhY3RfbWFjcm8gQ0FTQ0FERTsiCgkJZWNobyAiQ1JFQVRFIFNDSEVNQSBw Z3N0YXRfeGFjdF9tYWNybzsiCgkJZWNobyAiU0VUIHNlYXJjaF9wYXRoID0gcGdzdGF0X3hhY3Rf bWFjcm87IgoJCWZvciBpIGluICQoc2VxIDEgIiR0YWJsZXMiKTsgZG8KCQkJcHJpbnRmICJDUkVB VEUgVEFCTEUgdGVuYW50XyVkIChhIGludCk7XG4iICIkaSIKCQkJcHJpbnRmICJJTlNFUlQgSU5U TyB0ZW5hbnRfJWQgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAlZCk7XG4iIFwKCQkJCSIkaSIg IiRyb3dzX3Blcl90YWJsZSIKCQlkb25lCgl9ID4iJHNldHVwX3NxbCIKCglwZ190b29sICIkYmlu IiBwc3FsIC1YIC1xIC12IE9OX0VSUk9SX1NUT1A9MSBcCgkJLWggIiR0bXBkaXIiIC1wICIkcG9y dCIgLWQgcG9zdGdyZXMgLWYgIiRzZXR1cF9zcWwiID4vZGV2L251bGwKCgljYXQgPiIkc2NyaXB0 X2ZpbGUiIDw8RU9GClxcc2V0IGlkIHJhbmRvbSgxLCAkdGFibGVzKQpCRUdJTjsKU0VMRUNUIGNv dW50KCopIEZST00gcGdzdGF0X3hhY3RfbWFjcm8udGVuYW50XzppZDsKQ09NTUlUOwpFT0YKCglj b25uaW5mbz0iaG9zdD0kdG1wZGlyIHBvcnQ9JHBvcnQgZGJuYW1lPXBvc3RncmVzIgoJY3JlYXRl ZF90bXBkaXI9IiR0bXBkaXIiCgljcmVhdGVkX3NjcmlwdF9maWxlPSIkc2NyaXB0X2ZpbGUiCglj cmVhdGVkX2Nvbm5pbmZvPSIkY29ubmluZm8iCn0KCnJ1bl9wZ2JlbmNoKCkKewoJbG9jYWwgbGFi ZWw9IiQxIgoJbG9jYWwgYmluPSIkMiIKCWxvY2FsIGNvbm5pbmZvPSIkMyIKCWxvY2FsIHNjcmlw dF9maWxlPSIkNCIKCWxvY2FsIHNlY29uZHM9IiQ1IgoJbG9jYWwgb3V0X2ZpbGU9IiQ2IgoKCXBn X3Rvb2wgIiRiaW4iIHBnYmVuY2ggLW4gLXIgLU0gc2ltcGxlIC1jICIkY2xpZW50cyIgLWogIiRq b2JzIiAtVCAiJHNlY29uZHMiIFwKCQktZiAiJHNjcmlwdF9maWxlIiAiJGNvbm5pbmZvIiA+IiRv dXRfZmlsZSIKfQoKZXh0cmFjdF9tZXRyaWMoKQp7Cglsb2NhbCBmaWxlPSIkMSIKCWxvY2FsIHBh dHRlcm49IiQyIgoKCWF3ayAtdiBwYXQ9IiRwYXR0ZXJuIiAnCgkJJDAgfiBwYXQgewoJCQlmb3Ig KGkgPSAxOyBpIDw9IE5GOyBpKyspCgkJCXsKCQkJCWlmICgkaSB+IC9eWzAtOV0rKFsuXVswLTld Kyk/JC8pCgkJCQl7CgkJCQkJcHJpbnQgJGk7CgkJCQkJZXhpdDsKCQkJCX0KCQkJfQoJCX0KCScg IiRmaWxlIgp9CgpwcmludGYgInRhYmxlcz0lcyByb3dzX3Blcl90YWJsZT0lcyBjbGllbnRzPSVz IGpvYnM9JXMgd2FybXVwPSVzIHRpbWU9JXNcbiIgXAoJIiR0YWJsZXMiICIkcm93c19wZXJfdGFi bGUiICIkY2xpZW50cyIgIiRqb2JzIiAiJHdhcm11cCIgIiRkdXJhdGlvbiIKcHJpbnRmICIlLTEy cyAlMTJzICUxNHMgJTE0c1xuIiBcCgkibGFiZWwiICJ0cHMiICJhdmdfbGF0X21zIiAic2VsZWN0 X2F2Z19tcyIKCmZvciBpZHggaW4gIiR7IXJ1bl9iaW5zW0BdfSI7IGRvCglsYWJlbD0iJHtydW5f bGFiZWxzWyRpZHhdfSIKCWJpbj0iJHtydW5fYmluc1skaWR4XX0iCglwb3J0PSQoKHBvcnRfYmFz ZSArIGlkeCkpCgljcmVhdGVfY2x1c3RlciAiJGxhYmVsIiAiJGJpbiIgIiRwb3J0IgoJdG1wZGly PSIkY3JlYXRlZF90bXBkaXIiCglzY3JpcHRfZmlsZT0iJGNyZWF0ZWRfc2NyaXB0X2ZpbGUiCglj b25uaW5mbz0iJGNyZWF0ZWRfY29ubmluZm8iCgl3YXJtdXBfb3V0PSIkdG1wZGlyL3dhcm11cC5v dXQiCglydW5fb3V0PSIkdG1wZGlyL3BnYmVuY2gub3V0IgoKCWlmIFsgIiR3YXJtdXAiIC1ndCAw IF07IHRoZW4KCQlydW5fcGdiZW5jaCAiJGxhYmVsIiAiJGJpbiIgIiRjb25uaW5mbyIgIiRzY3Jp cHRfZmlsZSIgIiR3YXJtdXAiIFwKCQkJIiR3YXJtdXBfb3V0IgoJZmkKCglydW5fcGdiZW5jaCAi JGxhYmVsIiAiJGJpbiIgIiRjb25uaW5mbyIgIiRzY3JpcHRfZmlsZSIgIiRkdXJhdGlvbiIgXAoJ CSIkcnVuX291dCIKCgl0cHM9IiQoZXh0cmFjdF9tZXRyaWMgIiRydW5fb3V0IiAiXnRwcyA9Iiki CglhdmdfbGF0PSIkKGV4dHJhY3RfbWV0cmljICIkcnVuX291dCIgIl5sYXRlbmN5IGF2ZXJhZ2Ug PSIpIgoJc2VsZWN0X2F2Zz0iJChhd2sgJwoJCS9TRUxFQ1QgY291bnRcKFwqXCkgRlJPTSBwZ3N0 YXRfeGFjdF9tYWNyb1suXXRlbmFudF86aWQvIHsKCQkJcHJpbnQgJDE7CgkJCWV4aXQ7CgkJfQoJ JyAiJHJ1bl9vdXQiKSIKCglpZiBbIC16ICIkdHBzIiBdOyB0aGVuCgkJdHBzPSI/IgoJZmkKCWlm IFsgLXogIiRhdmdfbGF0IiBdOyB0aGVuCgkJYXZnX2xhdD0iPyIKCWZpCglpZiBbIC16ICIkc2Vs ZWN0X2F2ZyIgXTsgdGhlbgoJCXNlbGVjdF9hdmc9Ij8iCglmaQoKCXByaW50ZiAiJS0xMnMgJTEy cyAlMTRzICUxNHNcbiIgXAoJCSIkbGFiZWwiICIkdHBzIiAiJGF2Z19sYXQiICIkc2VsZWN0X2F2 ZyIKCglpZiBbICIka2VlcCIgLWVxIDEgXTsgdGhlbgoJCWVjaG8gInRlbXBvcmFyeSBkaXJlY3Rv cnkgZm9yICRsYWJlbDogJHRtcGRpciIKCQllY2hvICJwZ2JlbmNoIG91dHB1dCBmb3IgJGxhYmVs OiAkcnVuX291dCIKCWZpCmRvbmUK --00000000000065b9f80651aa9b08 Content-Type: text/x-sh; charset="US-ASCII"; name="pgstat_xact_micro_bench.sh" Content-Disposition: attachment; filename="pgstat_xact_micro_bench.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mp3hwjag2 IyEvdXNyL2Jpbi9lbnYgYmFzaAoKc2V0IC1ldW8gcGlwZWZhaWwKCnVzYWdlKCkKewoJY2F0IDw8 J1VTQUdFJwpVc2FnZToKICBwZ3N0YXRfeGFjdF9iYXNlbGluZV9iZW5jaC5zaCBbb3B0aW9uc10K Ck9wdGlvbnM6CiAgLS1jYXNlcyAiMCAxMCAxMDAgMTAwMCIgIFBlbmRpbmctZW50cnkgY291bnRz IHRvIHRlc3QuCiAgLS1tIDIwMDAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aW55IEJFR0lO L0NPTU1JVCB0cmFuc2FjdGlvbnMuCiAgLS1rZWVwICAgICAgICAgICAgICAgICAgIEtlZXAgdGhl IHRlbXBvcmFyeSBjbHVzdGVyIGRpcmVjdG9yeS4KICAtLXBnLWJpbiBESVIgICAgICAgICAgICAg RGlyZWN0b3J5IGNvbnRhaW5pbmcgcG9zdGdyZXMvaW5pdGRiL3BnX2N0bC9wc3FsL3BnX2NvbmZp Zy4KICAtLXBvcnQgUE9SVCAgICAgICAgICAgICAgUG9ydCBmb3IgdGhlIHRlbXBvcmFyeSBzZXJ2 ZXIuCgpFbnZpcm9ubWVudDoKICBQR19CSU4gICAgICAgICAgICAgICAgICAgU2FtZSBhcyAtLXBn LWJpbi4KICBDQyAgICAgICAgICAgICAgICAgICAgICAgQyBjb21waWxlciBmb3IgdGhlIHRpbnkg bGlicHEgUFFleGVjIGhlbHBlci4KClRoZSBiZW5jaG1hcmsgc3RhcnRzIGEgdGVtcG9yYXJ5IFBv c3RncmVTUUwgY2x1c3RlciwgY3JlYXRlcyB0aGUgbWF4aW11bQpudW1iZXIgb2YgdGVzdCB0YWJs ZXMgcmVxdWVzdGVkLCB0aGVuIHNlbmRzIGVhY2ggbWVhc3VyZWQgd29ya2xvYWQgYXMgb25lCnNp bXBsZS1xdWVyeSBtZXNzYWdlIHRocm91Z2ggbGlicHEuICBUaGF0IGlzIGludGVudGlvbmFsOiBw c3FsIC1mIHdvdWxkIHNwbGl0CnRoZSB3b3JrbG9hZCBpbnRvIG11bHRpcGxlIHByb3RvY29sIG1l c3NhZ2VzIGFuZCB3b3VsZCBub3QgcHJlc3N1cmUgdGhlCnBnU3RhdFBlbmRpbmctYWNyb3NzLXRy YW5zYWN0aW9uLWJvdW5kYXJpZXMgcGF0aCBpbiB0aGUgc2FtZSB3YXkuClVTQUdFCn0KCmNhc2Vz PSIwIDEwIDEwMCAxMDAwIgptPTIwMDAKa2VlcD0wCnBnX2Jpbj0iJHtQR19CSU46LX0iCnBvcnQ9 NjU0MzIKCndoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbwoJY2FzZSAiJDEiIGluCgkJLS1jYXNlcykK CQkJY2FzZXM9IiQyIgoJCQlzaGlmdCAyCgkJCTs7CgkJLS1tKQoJCQltPSIkMiIKCQkJc2hpZnQg MgoJCQk7OwoJCS0ta2VlcCkKCQkJa2VlcD0xCgkJCXNoaWZ0CgkJCTs7CgkJLS1wZy1iaW4pCgkJ CXBnX2Jpbj0iJDIiCgkJCXNoaWZ0IDIKCQkJOzsKCQktLXBvcnQpCgkJCXBvcnQ9IiQyIgoJCQlz aGlmdCAyCgkJCTs7CgkJLS1oZWxwfC1oKQoJCQl1c2FnZQoJCQlleGl0IDAKCQkJOzsKCQkqKQoJ CQllY2hvICJ1bmtub3duIG9wdGlvbjogJDEiID4mMgoJCQl1c2FnZSA+JjIKCQkJZXhpdCAyCgkJ CTs7Cgllc2FjCmRvbmUKCmlmIFsgLXogIiRwZ19iaW4iIF07IHRoZW4KCWVjaG8gInNldCBQR19C SU4gb3IgcGFzcyAtLXBnLWJpbiIgPiYyCglleGl0IDEKZmkKCmZvciBwcm9nIGluIHBvc3RncmVz IGluaXRkYiBwZ19jdGwgcHNxbCBwZ19jb25maWc7IGRvCglpZiBbICEgLXggIiRwZ19iaW4vJHBy b2ciIF07IHRoZW4KCQllY2hvICJtaXNzaW5nIGV4ZWN1dGFibGU6ICRwZ19iaW4vJHByb2ciID4m MgoJCWV4aXQgMQoJZmkKZG9uZQoKcGdfdG9vbCgpCnsKCWxvY2FsIHByb2c9IiQxIgoJbG9jYWwg bGliZGlyCgoJc2hpZnQKCWxpYmRpcj0iJChjZCAiJHBnX2Jpbi8uLi9saWIiIDI+L2Rldi9udWxs ICYmIHB3ZCB8fCB0cnVlKSIKCWlmIFsgLXogIiRsaWJkaXIiIF07IHRoZW4KCQkiJHBnX2Jpbi8k cHJvZyIgIiRAIgoJCXJldHVybgoJZmkKCWNhc2UgIiQodW5hbWUgLXMpIiBpbgoJCURhcndpbikK CQkJRFlMRF9MSUJSQVJZX1BBVEg9IiRsaWJkaXIke0RZTERfTElCUkFSWV9QQVRIOis6JERZTERf TElCUkFSWV9QQVRIfSIgXAoJCQkJIiRwZ19iaW4vJHByb2ciICIkQCIKCQkJOzsKCQkqKQoJCQlM RF9MSUJSQVJZX1BBVEg9IiRsaWJkaXIke0xEX0xJQlJBUllfUEFUSDorOiRMRF9MSUJSQVJZX1BB VEh9IiBcCgkJCQkiJHBnX2Jpbi8kcHJvZyIgIiRAIgoJCQk7OwoJZXNhYwp9CgptYXhfbj0iJChw cmludGYgJyVzXG4nICRjYXNlcyB8IHNvcnQgLW4gfCB0YWlsIC0xKSIKCnRtcGRpcj0iJChta3Rl bXAgLWQgIiR7VE1QRElSOi0vdG1wfS9wZ3N0YXQteGFjdC1iZW5jaC5YWFhYWFgiKSIKZGF0YWRp cj0iJHRtcGRpci9kYXRhIgpsb2dmaWxlPSIkdG1wZGlyL3Bvc3RncmVzLmxvZyIKaGVscGVyX3Ny Yz0iJHRtcGRpci9wcWV4ZWNfb25jZS5jIgpoZWxwZXI9IiR0bXBkaXIvcHFleGVjX29uY2UiCgpj bGVhbnVwKCkKewoJc2V0ICtlCglpZiBbIC1kICIkZGF0YWRpciIgXTsgdGhlbgoJCXBnX3Rvb2wg cGdfY3RsIC1EICIkZGF0YWRpciIgLW0gZmFzdCAtdyBzdG9wID4vZGV2L251bGwgMj4mMQoJZmkK CWlmIFsgIiRrZWVwIiAtZXEgMCBdOyB0aGVuCgkJcm0gLXJmICIkdG1wZGlyIgoJZWxzZQoJCWVj aG8gImtlcHQgdGVtcG9yYXJ5IGRpcmVjdG9yeTogJHRtcGRpciIKCWZpCn0KdHJhcCBjbGVhbnVw IEVYSVQKdHJhcCAndHJhcCAtIEVYSVQ7IGNsZWFudXA7IGV4aXQgMTMwJyBJTlQKdHJhcCAndHJh cCAtIEVYSVQ7IGNsZWFudXA7IGV4aXQgMTQzJyBURVJNCgpjYXQgPiIkaGVscGVyX3NyYyIgPDwn QycKI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGli Lmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpbmNsdWRlICJsaWJwcS1mZS5oIgoKc3RhdGljIGNo YXIgKgpyZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgbG9uZyAqbGVuX291dCkKewoJRklMRSAq ZiA9IGZvcGVuKHBhdGgsICJyYiIpOwoJbG9uZyBsZW47CgljaGFyICpidWY7CgoJaWYgKGYgPT0g TlVMTCkKCXsKCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiwgcGF0 aCwgc3RyZXJyb3IoZXJybm8pKTsKCQlleGl0KDIpOwoJfQoJaWYgKGZzZWVrKGYsIDAsIFNFRUtf RU5EKSAhPSAwKQoJewoJCXBlcnJvcigiZnNlZWsiKTsKCQlleGl0KDIpOwoJfQoJbGVuID0gZnRl bGwoZik7CglpZiAobGVuIDwgMCkKCXsKCQlwZXJyb3IoImZ0ZWxsIik7CgkJZXhpdCgyKTsKCX0K CXJld2luZChmKTsKCWJ1ZiA9IG1hbGxvYygoc2l6ZV90KSBsZW4gKyAxKTsKCWlmIChidWYgPT0g TlVMTCkKCXsKCQlwZXJyb3IoIm1hbGxvYyIpOwoJCWV4aXQoMik7Cgl9CglpZiAoZnJlYWQoYnVm LCAxLCAoc2l6ZV90KSBsZW4sIGYpICE9IChzaXplX3QpIGxlbikKCXsKCQlwZXJyb3IoImZyZWFk Iik7CgkJZXhpdCgyKTsKCX0KCWZjbG9zZShmKTsKCWJ1ZltsZW5dID0gJ1wwJzsKCSpsZW5fb3V0 ID0gbGVuOwoJcmV0dXJuIGJ1ZjsKfQoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7 Cgljb25zdCBjaGFyICpjb25uaW5mbzsKCWNvbnN0IGNoYXIgKnNxbF9wYXRoOwoJUEdjb25uICpj b25uOwoJUEdyZXN1bHQgKnJlczsKCWNoYXIgKnNxbDsKCWxvbmcgc3FsX2xlbjsKCglpZiAoYXJn YyAhPSAzKQoJewoJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIENPTk5JTkZPIFNRTEZJTEVc biIsIGFyZ3ZbMF0pOwoJCXJldHVybiAyOwoJfQoKCWNvbm5pbmZvID0gYXJndlsxXTsKCXNxbF9w YXRoID0gYXJndlsyXTsKCXNxbCA9IHJlYWRfZmlsZShzcWxfcGF0aCwgJnNxbF9sZW4pOwoKCWNv bm4gPSBQUWNvbm5lY3RkYihjb25uaW5mbyk7CglpZiAoUFFzdGF0dXMoY29ubikgIT0gQ09OTkVD VElPTl9PSykKCXsKCQlmcHJpbnRmKHN0ZGVyciwgImNvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIiwg UFFlcnJvck1lc3NhZ2UoY29ubikpOwoJCXJldHVybiAyOwoJfQoKCXJlcyA9IFBRZXhlYyhjb25u LCBzcWwpOwoKCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKCXsK CQlmcHJpbnRmKHN0ZGVyciwgInF1ZXJ5IGZhaWxlZDogJXNcbiIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pKTsKCQlQUWNsZWFyKHJlcyk7CgkJUFFmaW5pc2goY29ubik7CgkJZnJlZShzcWwpOwoJCXJl dHVybiAxOwoJfQoJaWYgKFBRbnR1cGxlcyhyZXMpICE9IDEgfHwgUFFuZmllbGRzKHJlcykgIT0g MSkKCXsKCQlmcHJpbnRmKHN0ZGVyciwgInF1ZXJ5IHJldHVybmVkICVkIHJvd3MgYW5kICVkIGNv bHVtbnMsIGV4cGVjdGVkIDF4MVxuIiwKCQkJCVBRbnR1cGxlcyhyZXMpLCBQUW5maWVsZHMocmVz KSk7CgkJUFFjbGVhcihyZXMpOwoJCVBRZmluaXNoKGNvbm4pOwoJCWZyZWUoc3FsKTsKCQlyZXR1 cm4gMTsKCX0KCglwcmludGYoIiVzXG4iLCBQUWdldHZhbHVlKHJlcywgMCwgMCkpOwoKCVBRY2xl YXIocmVzKTsKCVBRZmluaXNoKGNvbm4pOwoJZnJlZShzcWwpOwoJcmV0dXJuIDA7Cn0KQwoKaW5j bHVkZWRpcj0iJChwZ190b29sIHBnX2NvbmZpZyAtLWluY2x1ZGVkaXIpIgpsaWJkaXI9IiQocGdf dG9vbCBwZ19jb25maWcgLS1saWJkaXIpIgoiJHtDQzotY2N9IiAtTzIgLUkiJGluY2x1ZGVkaXIi IC1MIiRsaWJkaXIiIC1XbCwtcnBhdGgsIiRsaWJkaXIiIFwKCS1vICIkaGVscGVyIiAiJGhlbHBl cl9zcmMiIC1scHEKCnBnX3Rvb2wgaW5pdGRiIC1EICIkZGF0YWRpciIgLS1hdXRoIHRydXN0IC0t bm8tc3luYyAtLW5vLWluc3RydWN0aW9ucyBcCgktLWxjLW1lc3NhZ2VzPUMgPi9kZXYvbnVsbApj YXQgPj4iJGRhdGFkaXIvcG9zdGdyZXNxbC5jb25mIiA8PEVPRgpsaXN0ZW5fYWRkcmVzc2VzID0g JycKcG9ydCA9ICRwb3J0CnVuaXhfc29ja2V0X2RpcmVjdG9yaWVzID0gJyR0bXBkaXInCmZzeW5j ID0gb2ZmCmF1dG92YWN1dW0gPSBvZmYKdHJhY2tfZnVuY3Rpb25zID0gJ25vbmUnCm1heF9wcmVw YXJlZF90cmFuc2FjdGlvbnMgPSAwCkVPRgpwZ190b29sIHBnX2N0bCAtRCAiJGRhdGFkaXIiIC1s ICIkbG9nZmlsZSIgLXcgc3RhcnQgPi9kZXYvbnVsbAoKY29ubmluZm89Imhvc3Q9JHRtcGRpciBw b3J0PSRwb3J0IGRibmFtZT1wb3N0Z3JlcyIKCnNldHVwX3NxbD0iJHRtcGRpci9zZXR1cC5zcWwi CnsKCWVjaG8gIkRST1AgU0NIRU1BIElGIEVYSVNUUyBwZ3N0YXRfeGFjdF9iZW5jaCBDQVNDQURF OyIKCWVjaG8gIkNSRUFURSBTQ0hFTUEgcGdzdGF0X3hhY3RfYmVuY2g7IgoJZWNobyAiU0VUIHNl YXJjaF9wYXRoID0gcGdzdGF0X3hhY3RfYmVuY2g7IgoJZm9yIGkgaW4gJChzZXEgMSAiJG1heF9u Iik7IGRvCgkJcHJpbnRmICJDUkVBVEUgVEFCTEUgdF8lMDZkIChhIGludCk7XG4iICIkaSIKCQlw cmludGYgIklOU0VSVCBJTlRPIHRfJTA2ZCBWQUxVRVMgKDEpO1xuIiAiJGkiCglkb25lCn0gPiIk c2V0dXBfc3FsIgpwZ190b29sIHBzcWwgLVggLXEgLXYgT05fRVJST1JfU1RPUD0xIFwKCS1oICIk dG1wZGlyIiAtcCAiJHBvcnQiIC1kIHBvc3RncmVzIC1mICIkc2V0dXBfc3FsIiA+L2Rldi9udWxs CgpwcmludGYgInBnX2Jpbj0lc1xuIiAiJHBnX2JpbiIKcHJpbnRmICJ0bXBkaXI9JXNcbiIgIiR0 bXBkaXIiCnByaW50ZiAibT0lc1xuIiAiJG0iCnByaW50ZiAiJTEwcyAlMTJzICUxMnMgJTEyc1xu IiAicGVuZGluZ19uIiAieGFjdHNfbSIgInNlY29uZHMiICJ1c19wZXJfeGFjdCIKCmZvciBuIGlu ICRjYXNlczsgZG8KCXNxbF9maWxlPSIkdG1wZGlyL3J1bl8ke259LnNxbCIKCXsKCQllY2hvICJT RVQgc2VhcmNoX3BhdGggPSBwZ3N0YXRfeGFjdF9iZW5jaDsiCgkJZWNobyAiU0VUIHN0YXRzX2Zl dGNoX2NvbnNpc3RlbmN5ID0gbm9uZTsiCgkJZWNobyAiQ1JFQVRFIFRFTVAgVEFCTEUgYmVuY2hf dGltZXIgKHN0YXJ0ZWRfYXQgdGltZXN0YW1wdHopOyIKCQllY2hvICJCRUdJTjsiCgkJaWYgWyAi JG4iIC1lcSAwIF07IHRoZW4KCQkJZWNobyAiU0VMRUNUIDA7IgoJCWVsc2UKCQkJZm9yIGkgaW4g JChzZXEgMSAiJG4iKTsgZG8KCQkJCXByaW50ZiAiU0VMRUNUIGNvdW50KCopIEZST00gdF8lMDZk O1xuIiAiJGkiCgkJCWRvbmUKCQlmaQoJCWVjaG8gIkNPTU1JVDsiCgkJZWNobyAiSU5TRVJUIElO VE8gYmVuY2hfdGltZXIgVkFMVUVTIChjbG9ja190aW1lc3RhbXAoKSk7IgoJCWF3ayAtdiBtPSIk bSIgJ0JFR0lOIHsgZm9yIChpID0gMTsgaSA8PSBtOyBpKyspIHByaW50ICJCRUdJTjsgQ09NTUlU OyIgfScKCQllY2hvICJTRUxFQ1QgRVhUUkFDVChlcG9jaCBGUk9NIGNsb2NrX3RpbWVzdGFtcCgp IC0gc3RhcnRlZF9hdCk6OmZsb2F0OCIKCQllY2hvICJGUk9NIGJlbmNoX3RpbWVyOyIKCX0gPiIk c3FsX2ZpbGUiCgoJY2FzZSAiJCh1bmFtZSAtcykiIGluCgkJRGFyd2luKQoJCQlzZWNvbmRzPSIk KERZTERfTElCUkFSWV9QQVRIPSIkbGliZGlyJHtEWUxEX0xJQlJBUllfUEFUSDorOiREWUxEX0xJ QlJBUllfUEFUSH0iIFwKCQkJCSIkaGVscGVyIiAiJGNvbm5pbmZvIiAiJHNxbF9maWxlIikiCgkJ CTs7CgkJKikKCQkJc2Vjb25kcz0iJChMRF9MSUJSQVJZX1BBVEg9IiRsaWJkaXIke0xEX0xJQlJB UllfUEFUSDorOiRMRF9MSUJSQVJZX1BBVEh9IiBcCgkJCQkiJGhlbHBlciIgIiRjb25uaW5mbyIg IiRzcWxfZmlsZSIpIgoJCQk7OwoJZXNhYwoJdXNfcGVyX3hhY3Q9IiQoYXdrIC12IHM9IiRzZWNv bmRzIiAtdiBtPSIkbSIgJ0JFR0lOIHsgcHJpbnRmICIlLjNmIiwgKHMgKiAxMDAwMDAwLjApIC8g bSB9JykiCglwcmludGYgIiUxMHMgJTEycyAlMTJzICUxMnNcbiIgIiRuIiAiJG0iICIkc2Vjb25k cyIgIiR1c19wZXJfeGFjdCIKZG9uZQo= --00000000000065b9f80651aa9b08--