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 1wQeqh-001kPN-1A for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 05:24:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQepe-00FG6N-0o for pgsql-hackers@arkaria.postgresql.org; Sat, 23 May 2026 05:23:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQepd-00FG6F-2q for pgsql-hackers@lists.postgresql.org; Sat, 23 May 2026 05:23:30 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQepc-00000000zvm-1CE5 for pgsql-hackers@lists.postgresql.org; Sat, 23 May 2026 05:23:30 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-8bb09239328so62195786d6.3 for ; Fri, 22 May 2026 22:23:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779513805; cv=none; d=google.com; s=arc-20240605; b=PS1i450EtJ+2gNH5wyqJj23jGjMmzPBog01FBsTEiaGi4STnjPgpOkAQVrFrHg4K5N 0m3fzNto+tgK7VwlV/dIq74pAzhM5ua9PirVXiyMiQOTQUKzwlyrmzksNFoUYg/VaCc8 pr1ofmRxzK3Xuket2IoOGXl5x9sN11aCq/Uu8rmAHULnhOYZPspehaZwBUhaIbPndFAU gF34v6yqBwjiEFqVOJwVijxJ3aR5eNHqef1XxI+4KeSIpBV5bGJozOo6zgakhTf+gZfQ 7X/4bzID+kPaLPHu4dSQLohbdTeygmUnj1hywyeoFRXhb54JvrhMUpwH1R7vL2G6cFw5 EXZg== 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=HIpYHkkvHt7zG/ZKBmGHwSXS/JiUN8ZiZYeRq/7hDeU=; fh=TqKTUQZrntLMIDoAOuFlb03QXI+PSWmfyNk7UWSl36E=; b=eQs9w3kSYipps78txBnP5pzT0SS0E7d1bp1Y5yTkdHlXB0PIh6VHJ77A5cRY+sI/O2 EOLysbYJqmlxBJsUmcL7lf7sINY4z/uAekqBUAcUsBxzHDKrBQLPi8gp1+jz3FSZmFYs wWnnO1D9GlcE0Ht7Iz0gwO1Eg4/gMv/R80KkLgvZVzTfb4twtrsNJkPeetAihuVMhJpU 2b2EtKMMdnBkB3/EqIb8pFyPmN+SMoiKM8zgNkdHrXoijfI6n+gW+L/I5eF9zgR3irw3 jHYyWLJypiXoIqUFhoIbhIoT2uqpb9JWumARdsmTD5xJCacv94o2FeuoXlohNyNpVe95 Bp/A==; 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=1779513805; x=1780118605; 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=HIpYHkkvHt7zG/ZKBmGHwSXS/JiUN8ZiZYeRq/7hDeU=; b=mEO9glDtjWBWCTcl7GqdavWRSN6Ek/9aGtwGGK6Z0umPWL65CWoRsNq084HGM+hFq2 wzs+V22wusUc1VS5btdoL86dNj3P6AcxYNFBc9wI70WQGQfG+Wipj5RYeaZ6ykBNKIne J6XzFchS7+xdMtKWTR6k8f6zkSS+WGKT8jb28AxQ9hUmAccyIwL7vQRJDMLEGhs+WxIi lryTviXMX8IYiYP0TqrCTFeLE8FnSV4oO731BIp3KngaslmQ45IRrIHi2vOCCpdQZknK ibCwmwTRYAbCLyYD7QI/D91t1QnD3OEVbRXQrm7o1vsckJE/aqh8YbUr+FUURxQgvuyo kxwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779513805; x=1780118605; 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=HIpYHkkvHt7zG/ZKBmGHwSXS/JiUN8ZiZYeRq/7hDeU=; b=Njr/Qf5Ij8k3dkb8QV71o7OfXtCEHRe86x5UfYln9zAs2ccJxTDXhebAP/0/Sa8ufb NOZgxC5yZ9ESMZ0e333fXx/yoWS07cUsEE3iT5S62Jzpy6IUuUoXPFsPe3FUVenSeKZk y74WhTJSGsQl7tYxQebNrZgdekS4Nyc0X1WWnejoV5yfLE8hYC3LHuUunexmIzraU+Nu R0bKRHKNMTNRqRtbWc6M7IeUTlEt4AdmyNU5v8YLhTN1kNKJKfOpz4DjFBFg1/eS7bep tukutwhqPy9+nNag9VWrarN4YUvt83E/RmOox24bfu9RLyGgv46auohHMKCrRIbKQ4lj DghA== X-Forwarded-Encrypted: i=1; AFNElJ/chUTqIr/EGIGzdMQSVFX+kcoppv04NJhN2ALVt7+OeQfa6pjesWuj5nFo9BE5aG2zNZYaJv1ox57KnN72@lists.postgresql.org X-Gm-Message-State: AOJu0YzEs9g8acN65ZlEFRsMbWIWCUx8r4kc6ma3TdV7t/3amcahvKM1 asldje2fEuFx2MrldqmsmYE2eK//forF4kYDHb8zn9xoW9dHjpgV4oHMq3lURhoFNHRwyLIDbTe qW9iVdXnPfA14AClSpZ79ajNX+YPI2Q== X-Gm-Gg: Acq92OFcG2pEXb229dC6lmH0DFBWvTKCAuS1GBHoHSPqtyzXn4NiUiK61ZcW2dQWs9K 0VRidoa40vyQ5Vj05zTK4F32K4VWpeg2tB/ihsZf4a44QIs4tROqbOTxHcYfezL1UjVWHHNbPLK 4N0+qYzhtQ7X9D0eJocZq7ftqPFkTb4nvyV5Y3j/7bBhWCQ5FtJmd7SNEjibVI6QPhs5ERhXa0Q IIm9RN9VA5RfgNvK1Pl3JugxppJUcIVRseHGSTQfd+AuHHlU3F2tA0v8Y63qXY02EZTtOmGCTVn NvInUv+cU/1DpUk2qyom0FnnS3o/h9mLrnS3Q6epU0jvkC93vA7mtQ== X-Received: by 2002:a05:6214:483:b0:8cc:6aa6:7044 with SMTP id 6a1803df08f44-8cc7b6a42bcmr110043176d6.51.1779513805434; Fri, 22 May 2026 22:23:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Shinya Kato Date: Sat, 23 May 2026 14:22:48 +0900 X-Gm-Features: AVHnY4LWAxUWw6OKhgQR5icg9Fnzghv89DUXbjbi_z_LrfK__fgIl5xrE42059I Message-ID: Subject: Re: Report oldest xmin source when autovacuum cannot remove tuples To: Japin Li Cc: wenhui qiu , Sami Imseih , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000003f0ca2065275583e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003f0ca2065275583e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, May 23, 2026 at 10:40=E2=80=AFAM Japin Li wro= te: > Thanks for updating the patch. LGTM. Just one nitpick. > > + int pid; /* backend pid (0= for slots) */ > > Per the code, the prepared transaction is also associated with a PID of z= ero. Thanks for the review! You're right, prepared transactions also have pid 0. Fixed the comment to mention that. Additionally, I forgot to update meson.build, which caused the tests to fail. I have fixed that in the attached patch. --=20 Best regards, Shinya Kato NTT OSS Center --0000000000003f0ca2065275583e Content-Type: application/octet-stream; name="v4-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Disposition: attachment; filename="v4-0001-Report-oldest-xmin-blocker-when-VACUUM-cannot-rem.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mphwjjdj0 RnJvbSA4MWJiNzdmODNmYWE1MzUwZDE2YTA2YmQ1NmU3NDhlMDIyMWU3NzI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGlueWEgS2F0byA8c2hpbnlhMTEua2F0b0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjIgTWF5IDIwMjYgMjE6MzU6MTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHY0 XSBSZXBvcnQgb2xkZXN0IHhtaW4gYmxvY2tlciB3aGVuIFZBQ1VVTSBjYW5ub3QgcmVtb3ZlCiB0 dXBsZXMKCldoZW4gVkFDVVVNIGVuY291bnRlcnMgcmVjZW50bHktZGVhZCB0dXBsZXMgdGhhdCBj YW5ub3QgYmUgcmVtb3ZlZCwKaXQgaXMgb2Z0ZW4gdW5jbGVhciB3aGF0IGlzIHByZXZlbnRpbmcg dGhlIHhpZCBob3Jpem9uIGZyb20gYWR2YW5jaW5nLgpUaGlzIHBhdGNoIGFkZHMgZGlhZ25vc3Rp YyBpbmZvcm1hdGlvbiB0byB0aGUgVkFDVVVNIFZFUkJPU0UgbG9nCm91dHB1dCBpZGVudGlmeWlu ZyB0aGUgYmxvY2tlciB0aGF0IGlzIGhvbGRpbmcgYmFjayBPbGRlc3RYbWluLgoKVGhlIG5ldyBH ZXRYaWRIb3Jpem9uQmxvY2tlcigpIGZ1bmN0aW9uIGluIHByb2NhcnJheS5jIHNlYXJjaGVzIGZv cgp0aGUgc291cmNlIG9mIHRoZSBob3Jpem9uOiBhY3RpdmUgdHJhbnNhY3Rpb25zLCBpZGxlLWlu LXRyYW5zYWN0aW9uCnNlc3Npb25zLCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMsIGhvdCBzdGFuZGJ5 IGZlZWRiYWNrIHZpYSB3YWxzZW5kZXJzLAphbmQgbG9naWNhbCByZXBsaWNhdGlvbiBzbG90cy4g IFdoZW4gcmVjZW50bHlfZGVhZF90dXBsZXMgPiAwLCBWQUNVVU0KVkVSQk9TRSBub3cgcmVwb3J0 cyB0aGUgaGlnaGVzdC1wcmlvcml0eSBibG9ja2VyIHdpdGggaWRlbnRpZnlpbmcKZGV0YWlscyAo cGlkLCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBHSUQsIHN0YW5kYnkgYXBwbGljYXRpb24gbmFtZSwg b3IKc2xvdCBuYW1lKS4KCkJlY2F1c2UgdGhlIGhvcml6b24gd2FzIGNvbXB1dGVkIGVhcmxpZXIs IHRoZSBvcmlnaW5hbCBibG9ja2VyIG1heQpoYXZlIGFscmVhZHkgY29tbWl0dGVkIGJ5IHRoZSB0 aW1lIHRoZSBjaGVjayBydW5zLiAgVGhlIHJlc3VsdCBpcwp0aGVyZWZvcmUgYmVzdC1lZmZvcnQ6 IGl0IG1heSByZXBvcnQgYSBkaWZmZXJlbnQgYmxvY2tlciBvciBub25lIGF0CmFsbC4KCkF1dGhv cjogU2hpbnlhIEthdG8gPHNoaW55YTExLmthdG9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogd2Vu aHVpIHFpdSA8cWl1d2VuaHVpZnhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRnVqaWkgTWFzYW8g PG1hc2FvLmZ1amlpQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFNhbWkgSW1zZWloIDxzYW1pbXNl aWhAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlsaXAgS3VtYXIgPGRpbGlwYmFsYXV0QGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEphcGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT3pFdXJTZ3ktZ0R0d0ZtRWJqNStSOVBMMF9HM3FZ QjZubnpKdE5TdHl1Zjg3VlNWZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgICAgICB8ICA1OSArKysrCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAyNjEgKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCAgICAgICAgICAgICAgIHwgIDQwICsrKwogc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAgIHwgICAzICstCiAuLi4vdGVz dF9taXNjL3QvMDE0X2xvZ192YWN1dW1fYmxvY2tlcnMucGwgICAgfCAzMTQgKysrKysrKysrKysr KysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAg IDIgKwogOCBmaWxlcyBjaGFuZ2VkLCA3MTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDE0X2xvZ192 YWN1dW1fYmxvY2tlcnMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXgg MzkzOTVhZWQwZDUuLmE4NDEyMjViYjRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6 eS5jCkBAIC0xNTEsNiArMTUxLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNp bmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJl YW0uaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGls cy9sc3lzY2FjaGUuaCIKQEAgLTEwNzQsNiArMTA3NSw2NCBAQCBoZWFwX3ZhY3V1bV9yZWwoUmVs YXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkJCQkJCQkgdmFjcmVsLT50 dXBsZXNfZGVsZXRlZCwKIAkJCQkJCQkgKGludDY0KSB2YWNyZWwtPm5ld19yZWxfdHVwbGVzLAog CQkJCQkJCSB2YWNyZWwtPnJlY2VudGx5X2RlYWRfdHVwbGVzKTsKKwkJCWlmICh2YWNyZWwtPnJl Y2VudGx5X2RlYWRfdHVwbGVzID4gMCkKKwkJCXsKKwkJCQlYaWRIb3Jpem9uQmxvY2tlciBibG9j a2VyOworCisJCQkJaWYgKEdldFhpZEhvcml6b25CbG9ja2VyKHZhY3JlbC0+Y3V0b2Zmcy5PbGRl c3RYbWluLCAmYmxvY2tlcikpCisJCQkJeworCQkJCQlzd2l0Y2ggKGJsb2NrZXIudHlwZSkKKwkJ CQkJeworCQkJCQkJY2FzZSBYSEJfQUNUSVZFX1RSQU5TQUNUSU9OOgorCQkJCQkJCWFwcGVuZFN0 cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJsb2NrZXI6IGFjdGl2 ZSB0cmFuc2FjdGlvbiAocGlkID0gJWQpXG4iKSwKKwkJCQkJCQkJCQkJIGJsb2NrZXIucGlkKTsK KwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgWEhCX0lETEVfSU5fVFJBTlNBQ1RJT046CisJCQkJ CQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLAorCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxv Y2tlcjogaWRsZSBpbiB0cmFuc2FjdGlvbiAocGlkID0gJWQpXG4iKSwKKwkJCQkJCQkJCQkJIGJs b2NrZXIucGlkKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgWEhCX1hNSU5fQUNUSVZFX1RS QU5TQUNUSU9OOgorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJIF8o Im9sZGVzdCB4bWluIGJsb2NrZXI6IGFjdGl2ZSB0cmFuc2FjdGlvbiBob2xkaW5nIHNuYXBzaG90 IChwaWQgPSAlZClcbiIpLAorCQkJCQkJCQkJCQkgYmxvY2tlci5waWQpOworCQkJCQkJCWJyZWFr OworCQkJCQkJY2FzZSBYSEJfWE1JTl9JRExFX0lOX1RSQU5TQUNUSU9OOgorCQkJCQkJCWFwcGVu ZFN0cmluZ0luZm8oJmJ1ZiwKKwkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJsb2NrZXI6IGlk bGUgaW4gdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hvdCAocGlkID0gJWQpXG4iKSwKKwkJCQkJ CQkJCQkJIGJsb2NrZXIucGlkKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgWEhCX1BSRVBB UkVEX1RSQU5TQUNUSU9OOgorCQkJCQkJCWlmIChibG9ja2VyLm5hbWVbMF0gIT0gJ1wwJykKKwkJ CQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLAorCQkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWlu IGJsb2NrZXI6IHByZXBhcmVkIHRyYW5zYWN0aW9uIChnaWQgPSAlcylcbiIpLAorCQkJCQkJCQkJ CQkJIGJsb2NrZXIubmFtZSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlhcHBlbmRTdHJpbmdJbmZv KCZidWYsCisJCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogcHJlcGFyZWQgdHJh bnNhY3Rpb25cbiIpKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgWEhCX0hPVF9TVEFOREJZ X0ZFRURCQUNLOgorCQkJCQkJCWlmIChibG9ja2VyLm5hbWVbMF0gIT0gJ1wwJykKKwkJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLAorCQkJCQkJCQkJCQkJIF8oIm9sZGVzdCB4bWluIGJsb2Nr ZXI6IGhvdCBzdGFuZGJ5IGZlZWRiYWNrIChzdGFuZGJ5IG5hbWUgPSAlcywgcGlkID0gJWQpXG4i KSwKKwkJCQkJCQkJCQkJCSBibG9ja2VyLm5hbWUsCisJCQkJCQkJCQkJCQkgYmxvY2tlci5waWQp OworCQkJCQkJCWVsc2UKKwkJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLAorCQkJCQkJCQkJ CQkJIF8oIm9sZGVzdCB4bWluIGJsb2NrZXI6IGhvdCBzdGFuZGJ5IGZlZWRiYWNrIChwaWQgPSAl ZClcbiIpLAorCQkJCQkJCQkJCQkJIGJsb2NrZXIucGlkKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJ CWNhc2UgWEhCX1JFUExJQ0FUSU9OX1NMT1Q6CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVm LAorCQkJCQkJCQkJCQkgXygib2xkZXN0IHhtaW4gYmxvY2tlcjogbG9naWNhbCByZXBsaWNhdGlv biBzbG90IChzbG90IG5hbWUgPSAlcylcbiIpLAorCQkJCQkJCQkJCQkgYmxvY2tlci5uYW1lKTsK KwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgWEhCX05PTkU6CisJCQkJCQkJYnJlYWs7CisJCQkJ CX0KKwkJCQl9CisJCQl9CiAJCQlpZiAodmFjcmVsLT5taXNzZWRfZGVhZF90dXBsZXMgPiAwKQog CQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwKIAkJCQkJCQkJIF8oInR1cGxlcyBtaXNzZWQ6ICUi IFBSSWQ2NCAiIGRlYWQgZnJvbSAldSBwYWdlcyBub3QgcmVtb3ZlZCBkdWUgdG8gY2xlYW51cCBs b2NrIGNvbnRlbnRpb25cbiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKaW5k ZXggMTAzNWU4YjNmYzcuLjY5ZDFkODJiMzQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3 b3BoYXNlLmMKQEAgLTI4MjIsNiArMjgyMiw0NSBAQCBMb29rdXBHWGFjdEJ5U3ViaWQoT2lkIHN1 YmlkKQogCXJldHVybiBmb3VuZDsKIH0KIAorLyoKKyAqIEdldFByZXBhcmVkVHJhbnNhY3Rpb25H aWQKKyAqCQlHZXQgdGhlIEdJRCBmb3IgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdpdGggdGhl IGdpdmVuIFhJRC4KKyAqCisgKiBSZXR1cm5zIHRydWUgd2hlbiBhIG1hdGNoaW5nIHByZXBhcmVk IHRyYW5zYWN0aW9uIGlzIGZvdW5kLiAgZ2lkIHdpbGwgYmUKKyAqIHNldCB0byBhbiBlbXB0eSBz dHJpbmcgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4KKyAqLworYm9vbAorR2V0UHJlcGFyZWRUcmFu c2FjdGlvbkdpZChUcmFuc2FjdGlvbklkIHhpZCwgY2hhciBnaWRbR0lEU0laRV0pCit7CisJYm9v bAkJZm91bmQgPSBmYWxzZTsKKworCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsK KworCWdpZFswXSA9ICdcMCc7CisKKwlpZiAobWF4X3ByZXBhcmVkX3hhY3RzID09IDAgfHwgVHdv UGhhc2VTdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlMV0xvY2tBY3F1aXJlKFR3 b1BoYXNlU3RhdGVMb2NrLCBMV19TSEFSRUQpOworCWZvciAoaW50IGkgPSAwOyBpIDwgVHdvUGhh c2VTdGF0ZS0+bnVtUHJlcFhhY3RzOyBpKyspCisJeworCQlHbG9iYWxUcmFuc2FjdGlvbiBneGFj dCA9IFR3b1BoYXNlU3RhdGUtPnByZXBYYWN0c1tpXTsKKworCQlpZiAoIWd4YWN0LT52YWxpZCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghVHJhbnNhY3Rpb25JZEVxdWFscyhYaWRGcm9tRnVsbFRy YW5zYWN0aW9uSWQoZ3hhY3QtPmZ4aWQpLCB4aWQpKQorCQkJY29udGludWU7CisKKwkJc3RybGNw eShnaWQsIGd4YWN0LT5naWQsIEdJRFNJWkUpOworCQlmb3VuZCA9IHRydWU7CisJCWJyZWFrOwor CX0KKwlMV0xvY2tSZWxlYXNlKFR3b1BoYXNlU3RhdGVMb2NrKTsKKworCXJldHVybiBmb3VuZDsK K30KKwogLyoKICAqIFR3b1BoYXNlR2V0T2xkZXN0WGlkSW5Db21taXQKICAqCQlSZXR1cm4gdGhl IG9sZGVzdCB0cmFuc2FjdGlvbiBJRCBmcm9tIHByZXBhcmVkIHRyYW5zYWN0aW9ucyB0aGF0IGFy ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCA5Mjk5YmNlYmJkYS4uZDgzNmQy NGQyNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC01OCwxMSArNTgsMTMg QEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgi CiAjaW5jbHVkZSAicG9ydC9wZ19sZmluZC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3Qu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJh eS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv c3Vic3lzdGVtcy5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2luY2x1ZGUgInV0aWxzL2Jh Y2tlbmRfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKQEAg LTE5OTksNiArMjAwMSwyNjUgQEAgR2V0UmVwbGljYXRpb25Ib3Jpem9ucyhUcmFuc2FjdGlvbklk ICp4bWluLCBUcmFuc2FjdGlvbklkICpjYXRhbG9nX3htaW4pCiAJKmNhdGFsb2dfeG1pbiA9IGhv cml6b25zLnNsb3RfY2F0YWxvZ194bWluOwogfQogCisvKgorICogRmV0Y2ggdGhlIHN0YW5kYnkn cyBhcHBsaWNhdGlvbl9uYW1lIGFzIHJlcG9ydGVkIGJ5IHRoZSB3YWxzZW5kZXIgYmFja2VuZC4K KyAqLworc3RhdGljIHZvaWQKK0dldFN0YW5kYnlBcHBuYW1lKGludCBwaWQsIGNoYXIgKm5hbWUs IFNpemUgbGVuKQoreworCWludAkJCW5iYWNrZW5kcyA9IHBnc3RhdF9mZXRjaF9zdGF0X251bWJh Y2tlbmRzKCk7CisKKwluYW1lWzBdID0gJ1wwJzsKKworCWZvciAoaW50IGkgPSAxOyBpIDw9IG5i YWNrZW5kczsgaSsrKQorCXsKKwkJTG9jYWxQZ0JhY2tlbmRTdGF0dXMgKmxvY2FsX2JlZW50cnk7 CisJCVBnQmFja2VuZFN0YXR1cyAqYmVlbnRyeTsKKworCQlsb2NhbF9iZWVudHJ5ID0gcGdzdGF0 X2dldF9sb2NhbF9iZWVudHJ5X2J5X2luZGV4KGkpOworCQlpZiAobG9jYWxfYmVlbnRyeSA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJYmVlbnRyeSA9ICZsb2NhbF9iZWVudHJ5LT5iYWNrZW5k U3RhdHVzOworCQlpZiAoYmVlbnRyeS0+c3RfcHJvY3BpZCAhPSBwaWQpCisJCQljb250aW51ZTsK KworCQlpZiAoYmVlbnRyeS0+c3RfYXBwbmFtZSAmJiBiZWVudHJ5LT5zdF9hcHBuYW1lWzBdICE9 ICdcMCcpCisJCQlzdHJsY3B5KG5hbWUsIGJlZW50cnktPnN0X2FwcG5hbWUsIGxlbik7CisJCXJl dHVybjsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gWGlkSG9yaXpvbkJsb2NrZXJUeXBlIGZvciBh IGJhY2tlbmQgd2hvc2UgeGlkIG1hdGNoZXMgdGhlIGhvcml6b24uCisgKi8KK3N0YXRpYyBpbmxp bmUgWGlkSG9yaXpvbkJsb2NrZXJUeXBlCitYaWRIb3Jpem9uQmxvY2tlclR5cGVGb3JCYWNrZW5k KGNvbnN0IFBHUFJPQyAqcHJvYykKK3sKKwlpZiAocHJvYy0+d2FpdF9ldmVudF9pbmZvID09IFdB SVRfRVZFTlRfQ0xJRU5UX1JFQUQpCisJCXJldHVybiBYSEJfSURMRV9JTl9UUkFOU0FDVElPTjsK KwlyZXR1cm4gWEhCX0FDVElWRV9UUkFOU0FDVElPTjsKK30KKworLyoKKyAqIFJldHVybiBYaWRI b3Jpem9uQmxvY2tlclR5cGUgZm9yIGEgYmFja2VuZCB3aG9zZSB4bWluIG1hdGNoZXMgdGhlIGhv cml6b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgWGlkSG9yaXpvbkJsb2NrZXJUeXBlCitYaWRIb3Jp em9uQmxvY2tlclR5cGVGb3JYbWluQmFja2VuZChjb25zdCBQR1BST0MgKnByb2MpCit7CisJaWYg KHByb2MtPndhaXRfZXZlbnRfaW5mbyA9PSBXQUlUX0VWRU5UX0NMSUVOVF9SRUFEKQorCQlyZXR1 cm4gWEhCX1hNSU5fSURMRV9JTl9UUkFOU0FDVElPTjsKKwlyZXR1cm4gWEhCX1hNSU5fQUNUSVZF X1RSQU5TQUNUSU9OOworfQorCisvKgorICogRmluZCB0aGUgYmxvY2tlcnMgdGhhdCBhcmUgaG9s ZGluZyBiYWNrIHRoZSBnaXZlbiB4aWQgaG9yaXpvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNl YXJjaGVzIGZvciB3aGF0IGlzIHByZXZlbnRpbmcgdGhlIGdpdmVuIGhvcml6b24gZnJvbSBiZWlu ZworICogYWR2YW5jZWQgdG8gYWxsb3cgcmVtb3ZhbCBvZiBkZWFkIHR1cGxlcy4gSXQgY2hlY2tz OgorICogMS4gQWN0aXZlIHRyYW5zYWN0aW9ucyAocnVubmluZyBzdGF0ZW1lbnRzKQorICogMi4g SWRsZS1pbi10cmFuc2FjdGlvbiBzZXNzaW9ucworICogMy4gUHJlcGFyZWQgdHJhbnNhY3Rpb25z CisgKiA0LiBIb3Qgc3RhbmRieSBmZWVkYmFjaworICogNS4gTG9naWNhbCByZXBsaWNhdGlvbiBz bG90cworICoKKyAqIEJlY2F1c2UgdGhlIGhvcml6b24gd2FzIGNvbXB1dGVkIGVhcmxpZXIsIHRo ZSBvcmlnaW5hbCBibG9ja2VyIG1heSBoYXZlCisgKiBhbHJlYWR5IGNvbW1pdHRlZCBieSB0aGUg dGltZSB0aGlzIGZ1bmN0aW9uIHJ1bnMuICBUaGUgcmVzdWx0IGlzIHRoZXJlZm9yZQorICogYmVz dC1lZmZvcnQ6IGl0IG1heSByZXR1cm4gYSBkaWZmZXJlbnQgYmxvY2tlciwgb3Igbm8gYmxvY2tl ciBhdCBhbGwuCisgKgorICogUmV0dXJucyBhIHBhbGxvYydkIGFycmF5IG9mIGJsb2NrZXJzIGFu ZCBzdG9yZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluCisgKiAqbmJsb2NrZXJzLiBUaGUgYXJy YXkgbWF5IGJlIGVtcHR5IGlmIG5vIGJsb2NrZXIgaXMgZm91bmQuCisgKgorICogTm90ZTogdGhl IHNhbWUgdW5kZXJseWluZyBjYXVzZSAoZS5nLiBhIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3Qg d2l0aAorICogaG90X3N0YW5kYnlfZmVlZGJhY2spIGNhbiBhcHBlYXIgYXMgYm90aCBhbiBYSEJf SE9UX1NUQU5EQllfRkVFREJBQ0sgZW50cnkKKyAqIChmcm9tIHRoZSB3YWxzZW5kZXIgUEdQUk9D KSBhbmQgYW4gWEhCX1JFUExJQ0FUSU9OX1NMT1QgZW50cnkgKGZyb20gdGhlCisgKiBzbG90J3Mg eG1pbikuICBDYWxsZXJzIHRoYXQgY29uc3VtZSBhbGwgZW50cmllcyBzaG91bGQgYmUgcHJlcGFy ZWQgZm9yIHN1Y2gKKyAqIGR1cGxpY2F0ZXMuCisgKi8KK3N0YXRpYyBYaWRIb3Jpem9uQmxvY2tl ciAqCitHZXRYaWRIb3Jpem9uQmxvY2tlcnMoVHJhbnNhY3Rpb25JZCBob3Jpem9uLCBpbnQgKm5i bG9ja2VycykKK3sKKwlQcm9jQXJyYXlTdHJ1Y3QgKmFycmF5UCA9IHByb2NBcnJheTsKKwlUcmFu c2FjdGlvbklkICpvdGhlcl94aWRzID0gUHJvY0dsb2JhbC0+eGlkczsKKwlYaWRIb3Jpem9uQmxv Y2tlciAqcmVzdWx0OworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQltYXhfYmxvY2tlcnM7CisK KwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoaG9yaXpvbikpOworCUFzc2VydChuYmxvY2tl cnMgIT0gTlVMTCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgZXZlcnkg UEdQUk9DIHBsdXMgYWxsIHJlcGxpY2F0aW9uIHNsb3RzLiBUaGlzCisJICogaXMgYSBnZW5lcm91 cyB1cHBlciBib3VuZCAodHlwaWNhbGx5IG9ubHkgMC0yIGVudHJpZXMgYXJlIHJldHVybmVkKSwK KwkgKiBidXQga2VlcHMgdGhlIGxvZ2ljIHNpbXBsZSBmb3IgYSBkaWFnbm9zdGljIGZ1bmN0aW9u IHRoYXQgcnVucworCSAqIGluZnJlcXVlbnRseS4KKwkgKi8KKwltYXhfYmxvY2tlcnMgPSBhcnJh eVAtPm1heFByb2NzICsgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOworCXJlc3VsdCA9IHBhbGxvYzBf YXJyYXkoWGlkSG9yaXpvbkJsb2NrZXIsIG1heF9ibG9ja2Vycyk7CisKKwlMV0xvY2tBY3F1aXJl KFByb2NBcnJheUxvY2ssIExXX1NIQVJFRCk7CisKKwlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4 IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKKwl7CisJCWludAkJCXBncHJvY25vID0gYXJy YXlQLT5wZ3Byb2Nub3NbaW5kZXhdOworCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdw cm9jbm9dOworCQlpbnQ4CQlzdGF0dXNGbGFncyA9IFByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW2lu ZGV4XTsKKwkJVHJhbnNhY3Rpb25JZCBwcm9jX3hpZDsKKwkJVHJhbnNhY3Rpb25JZCBwcm9jX3ht aW47CisJCVhpZEhvcml6b25CbG9ja2VyVHlwZSBjYW5kaWRhdGVfdHlwZSA9IFhIQl9OT05FOwor CQlpbnQJCQljYW5kaWRhdGVfcGlkID0gMDsKKwkJVHJhbnNhY3Rpb25JZCBjYW5kaWRhdGVfeGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisKKwkJLyoKKwkJICogU2tpcCBvdmVyIGJhY2tlbmRz IGVpdGhlciB2YWN1dW1pbmcgKHdoaWNoIGlzIG9rIHdpdGggcm93cyBiZWluZworCQkgKiByZW1v dmVkLCBhcyBsb25nIGFzIHBnX3N1YnRyYW5zIGlzIG5vdCB0cnVuY2F0ZWQpLCBkb2luZyBsb2dp Y2FsCisJCSAqIGRlY29kaW5nICh3aGljaCBtYW5hZ2VzIHhtaW4gc2VwYXJhdGVseSwgY2hlY2sg YmVsb3cpLCBvciBteXNlbGYuCisJCSAqLworCQlpZiAoc3RhdHVzRmxhZ3MgJiAoUFJPQ19JTl9W QUNVVU0gfCBQUk9DX0lOX0xPR0lDQUxfREVDT0RJTkcpIHx8CisJCQlwcm9jID09IE15UHJvYykK KwkJCWNvbnRpbnVlOworCisJCS8qIEZldGNoIHhpZCBqdXN0IG9uY2UgLSBzZWUgR2V0TmV3VHJh bnNhY3Rpb25JZCAqLworCQlwcm9jX3hpZCA9IFVJTlQzMl9BQ0NFU1NfT05DRShvdGhlcl94aWRz W2luZGV4XSk7CisJCXByb2NfeG1pbiA9IFVJTlQzMl9BQ0NFU1NfT05DRShwcm9jLT54bWluKTsK KworCQkvKiBDaGVjayBpZiB0aGlzIHByb2MncyB4aWQgbWF0Y2hlcyAqLworCQlpZiAoVHJhbnNh Y3Rpb25JZEVxdWFscyhwcm9jX3hpZCwgaG9yaXpvbikpCisJCXsKKwkJCWlmIChwcm9jLT5waWQg PT0gMCkKKwkJCXsKKwkJCQljYW5kaWRhdGVfdHlwZSA9IFhIQl9QUkVQQVJFRF9UUkFOU0FDVElP TjsKKwkJCQljYW5kaWRhdGVfcGlkID0gMDsKKwkJCQljYW5kaWRhdGVfeGlkID0gcHJvY194aWQ7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJY2FuZGlkYXRlX3R5cGUgPSBYaWRIb3Jpem9uQmxv Y2tlclR5cGVGb3JCYWNrZW5kKHByb2MpOworCQkJCWNhbmRpZGF0ZV9waWQgPSBwcm9jLT5waWQ7 CisJCQkJY2FuZGlkYXRlX3hpZCA9IHByb2NfeGlkOworCQkJfQorCQl9CisJCS8qIENoZWNrIGlm IHRoaXMgcHJvYydzIHhtaW4gbWF0Y2hlcyAqLworCQllbHNlIGlmIChUcmFuc2FjdGlvbklkRXF1 YWxzKHByb2NfeG1pbiwgaG9yaXpvbikpCisJCXsKKwkJCWlmIChzdGF0dXNGbGFncyAmIFBST0Nf QUZGRUNUU19BTExfSE9SSVpPTlMpCisJCQl7CisJCQkJY2FuZGlkYXRlX3R5cGUgPSBYSEJfSE9U X1NUQU5EQllfRkVFREJBQ0s7CisJCQkJY2FuZGlkYXRlX3BpZCA9IHByb2MtPnBpZDsKKwkJCQlj YW5kaWRhdGVfeGlkID0gcHJvY194bWluOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNhbmRp ZGF0ZV90eXBlID0gWGlkSG9yaXpvbkJsb2NrZXJUeXBlRm9yWG1pbkJhY2tlbmQocHJvYyk7CisJ CQkJY2FuZGlkYXRlX3BpZCA9IHByb2MtPnBpZDsKKwkJCQljYW5kaWRhdGVfeGlkID0gcHJvY194 bWluOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2UgZm91bmQgYSBjYW5kaWRhdGUsIHJl Y29yZCBpdC4gQ2FuZGlkYXRlcyBhcmUgY29sbGVjdGVkIGluCisJCSAqIFByb2NBcnJheSBvcmRl cjsgY2FsbGVycyBjYW4gcmVvcmRlciBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAoY2FuZGlkYXRl X3R5cGUgIT0gWEhCX05PTkUpCisJCXsKKwkJCVhpZEhvcml6b25CbG9ja2VyICpkc3Q7CisKKwkJ CWRzdCA9ICZyZXN1bHRbY291bnQrK107CisJCQlkc3QtPnR5cGUgPSBjYW5kaWRhdGVfdHlwZTsK KwkJCWRzdC0+cGlkID0gY2FuZGlkYXRlX3BpZDsKKwkJCWRzdC0+eGlkID0gY2FuZGlkYXRlX3hp ZDsKKwkJfQorCX0KKworCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7CisKKwkvKgorCSAq IE5vdyB0aGF0IFByb2NBcnJheUxvY2sgaXMgcmVsZWFzZWQsIGZldGNoIGFueSBleHRyYSBkZXRh aWxzIHdlIHdhbnQgdG8KKwkgKiBhdHRhY2ggdG8gYmxvY2tlcnMsIHN1Y2ggYXMgcHJlcGFyZWQg dHJhbnNhY3Rpb24gR0lEcyBhbmQgc3RhbmRieQorCSAqIGFwcGxpY2F0aW9uIG5hbWVzLgorCSAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwl7CisJCWlmIChyZXN1bHRbaV0u dHlwZSA9PSBYSEJfUFJFUEFSRURfVFJBTlNBQ1RJT04pCisJCQlHZXRQcmVwYXJlZFRyYW5zYWN0 aW9uR2lkKHJlc3VsdFtpXS54aWQsIHJlc3VsdFtpXS5uYW1lKTsKKwkJZWxzZSBpZiAocmVzdWx0 W2ldLnR5cGUgPT0gWEhCX0hPVF9TVEFOREJZX0ZFRURCQUNLKQorCQkJR2V0U3RhbmRieUFwcG5h bWUocmVzdWx0W2ldLnBpZCwgcmVzdWx0W2ldLm5hbWUsCisJCQkJCQkJICBzaXplb2YocmVzdWx0 W2ldLm5hbWUpKTsKKwl9CisKKwkvKgorCSAqIEFsc28gY2hlY2sgcmVwbGljYXRpb24gc2xvdHMu CisJICovCisJaWYgKG1heF9yZXBsaWNhdGlvbl9zbG90cyA+IDApCisJeworCQlMV0xvY2tBY3F1 aXJlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCisJCWZvciAoaW50 IGkgPSAwOyBpIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBpKyspCisJCXsKKwkJCVJlcGxpY2F0 aW9uU2xvdCAqcyA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Nsb3RzW2ldOwor CQkJVHJhbnNhY3Rpb25JZCBzbG90X3htaW47CisJCQlUcmFuc2FjdGlvbklkIHNsb3RfY2F0YWxv Z194bWluOworCisJCQlpZiAoIXMtPmluX3VzZSkKKwkJCQljb250aW51ZTsKKworCQkJU3Bpbkxv Y2tBY3F1aXJlKCZzLT5tdXRleCk7CisJCQlzbG90X3htaW4gPSBzLT5kYXRhLnhtaW47CisJCQlz bG90X2NhdGFsb2dfeG1pbiA9IHMtPmRhdGEuY2F0YWxvZ194bWluOworCQkJU3BpbkxvY2tSZWxl YXNlKCZzLT5tdXRleCk7CisKKwkJCWlmIChUcmFuc2FjdGlvbklkRXF1YWxzKHNsb3RfeG1pbiwg aG9yaXpvbikgfHwKKwkJCQlUcmFuc2FjdGlvbklkRXF1YWxzKHNsb3RfY2F0YWxvZ194bWluLCBo b3Jpem9uKSkKKwkJCXsKKwkJCQlYaWRIb3Jpem9uQmxvY2tlciAqZHN0OworCisJCQkJZHN0ID0g JnJlc3VsdFtjb3VudCsrXTsKKwkJCQlkc3QtPnR5cGUgPSBYSEJfUkVQTElDQVRJT05fU0xPVDsK KwkJCQlkc3QtPnBpZCA9IDA7CisJCQkJZHN0LT54aWQgPSBUcmFuc2FjdGlvbklkSXNWYWxpZChz bG90X3htaW4pID8KKwkJCQkJc2xvdF94bWluIDoKKwkJCQkJc2xvdF9jYXRhbG9nX3htaW47CisJ CQkJc3RybGNweShkc3QtPm5hbWUsIE5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgc2l6ZW9mKGRzdC0+ bmFtZSkpOworCQkJfQorCQl9CisKKwkJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RDb250 cm9sTG9jayk7CisJfQorCisJKm5ibG9ja2VycyA9IGNvdW50OworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qCisgKiBHZXQgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgYmxvY2tlciBob2xkaW5nIGJhY2sg dGhlIHhpZCBob3Jpem9uLgorICoKKyAqIFJldHVybnMgdHJ1ZSBhbmQgc3RvcmVzIHRoZSBibG9j a2VyIGluICpibG9ja2VyIGlmIGFueSBhcmUgZm91bmQuCisgKi8KK2Jvb2wKK0dldFhpZEhvcml6 b25CbG9ja2VyKFRyYW5zYWN0aW9uSWQgaG9yaXpvbiwgWGlkSG9yaXpvbkJsb2NrZXIgKmJsb2Nr ZXIpCit7CisJWGlkSG9yaXpvbkJsb2NrZXIgKmJsb2NrZXJzOworCVhpZEhvcml6b25CbG9ja2Vy ICpiZXN0ID0gTlVMTDsKKwlpbnQJCQluYmxvY2tlcnM7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25J ZElzVmFsaWQoaG9yaXpvbikpOworCUFzc2VydChibG9ja2VyICE9IE5VTEwpOworCisJYmxvY2tl cnMgPSBHZXRYaWRIb3Jpem9uQmxvY2tlcnMoaG9yaXpvbiwgJm5ibG9ja2Vycyk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBuYmxvY2tlcnM7IGkrKykKKwl7CisJCWlmIChiZXN0ID09IE5VTEwgfHwg YmxvY2tlcnNbaV0udHlwZSA8IGJlc3QtPnR5cGUpCisJCQliZXN0ID0gJmJsb2NrZXJzW2ldOwor CX0KKworCWlmIChiZXN0ICE9IE5VTEwpCisJCSpibG9ja2VyID0gKmJlc3Q7CisKKwlwZnJlZShi bG9ja2Vycyk7CisKKwlyZXR1cm4gKGJlc3QgIT0gTlVMTCk7Cit9CisKIC8qCiAgKiBHZXRNYXhT bmFwc2hvdFhpZENvdW50IC0tIGdldCBtYXggc2l6ZSBmb3Igc25hcHNob3QgWElEIGFycmF5CiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdHdvcGhhc2UuaAppbmRleCAxZDJmZjQyYzliNy4uZmM3Mjk0YTRlMjUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90d29waGFzZS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90d29waGFzZS5oCkBAIC03MCw2ICs3MCw3IEBAIGV4dGVybiB2b2lkIFR3b1BoYXNlVHJh bnNhY3Rpb25HaWQoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgY2hhciAqZ2lkX3JlcywK IAkJCQkJCQkJICAgaW50IHN6Z2lkKTsKIGV4dGVybiBib29sIExvb2t1cEdYYWN0QnlTdWJpZChP aWQgc3ViaWQpOwogCitleHRlcm4gYm9vbCBHZXRQcmVwYXJlZFRyYW5zYWN0aW9uR2lkKFRyYW5z YWN0aW9uSWQgeGlkLCBjaGFyIGdpZFtHSURTSVpFXSk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBU d29QaGFzZUdldE9sZGVzdFhpZEluQ29tbWl0KHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogVFdP UEhBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXggZWM4OWM0NDgyMjAuLmNiZGUz Yjk5NzIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKQEAgLTE0LDEwICsxNCw0NyBAQAogI2lm bmRlZiBQUk9DQVJSQVlfSAogI2RlZmluZSBQUk9DQVJSQVlfSAogCisjaW5jbHVkZSAiYWNjZXNz L3hhY3QuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0 YW5kYnkuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3Nu YXBzaG90LmgiCiAKKy8qCisgKiBUeXBlIG9mIGJsb2NrZXIgdGhhdCBpcyBob2xkaW5nIGJhY2sg dGhlIHhpZCBob3Jpem9uLgorICogTGlzdGVkIGluIHByaW9yaXR5IG9yZGVyIGZyb20gaGlnaGVz dCB0byBsb3dlc3QuICBCbG9ja2VycyB3aG9zZSB4aWQKKyAqIG1hdGNoZXMgdGhlIGhvcml6b24g KHRoZSByb290IGNhdXNlKSBhcmUgbGlzdGVkIGJlZm9yZSBibG9ja2VycyB3aG9zZQorICogeG1p biBtYXRjaGVzIChoZWxkIGJhY2sgYnkgdGhlIHJvb3QgY2F1c2UpLiAgV2l0aGluIGVhY2ggZ3Jv dXAsIGFjdGl2ZQorICogdHJhbnNhY3Rpb25zIGFyZSBsaXN0ZWQgZmlyc3QgYmVjYXVzZSB0aGV5 IGFyZSB0aGUgbW9zdCBhY3Rpb25hYmxlIGZvcgorICogdGhlIERCQSAodGhlIHJ1bm5pbmcgcXVl cnkgY2FuIGJlIGlkZW50aWZpZWQgYW5kIGNhbmNlbGxlZCkuCisgKi8KK3R5cGVkZWYgZW51bSBY aWRIb3Jpem9uQmxvY2tlclR5cGUKK3sKKwlYSEJfTk9ORSA9IDAsCisJLyogeGlkLW1hdGNoIHR5 cGVzIChob3Jpem9uID09IHByb2MncyB4aWQpICovCisJWEhCX0FDVElWRV9UUkFOU0FDVElPTiwJ CS8qIGJhY2tlbmQgcnVubmluZyBhIHN0YXRlbWVudCAqLworCVhIQl9JRExFX0lOX1RSQU5TQUNU SU9OLAkvKiBiYWNrZW5kIGlkbGUgaW4gdHJhbnNhY3Rpb24gKi8KKwlYSEJfUFJFUEFSRURfVFJB TlNBQ1RJT04sCS8qIHByZXBhcmVkICh0d28tcGhhc2UpIHRyYW5zYWN0aW9uICovCisJLyogeG1p bi1tYXRjaCB0eXBlcyAoaG9yaXpvbiA9PSBwcm9jJ3MgeG1pbiBvciBzbG90J3MgeG1pbikgKi8K KwlYSEJfWE1JTl9BQ1RJVkVfVFJBTlNBQ1RJT04sCS8qIGJhY2tlbmQgcnVubmluZyBhIHN0YXRl bWVudCAqLworCVhIQl9YTUlOX0lETEVfSU5fVFJBTlNBQ1RJT04sCS8qIGJhY2tlbmQgaWRsZSBp biB0cmFuc2FjdGlvbiAqLworCVhIQl9IT1RfU1RBTkRCWV9GRUVEQkFDSywJLyogd2Fsc2VuZGVy IHdpdGggaG90X3N0YW5kYnlfZmVlZGJhY2sgKi8KKwlYSEJfUkVQTElDQVRJT05fU0xPVCwJCS8q IGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCAqLworfSBYaWRIb3Jpem9uQmxvY2tlclR5cGU7CisK Ky8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIGJsb2NrZXIgdGhhdCBpcyBob2xkaW5nIGJhY2sg dGhlIHhpZCBob3Jpem9uLgorICovCit0eXBlZGVmIHN0cnVjdCBYaWRIb3Jpem9uQmxvY2tlcgor eworCVhpZEhvcml6b25CbG9ja2VyVHlwZSB0eXBlOworCVRyYW5zYWN0aW9uSWQgeGlkOwkJCS8q IHRoZSBibG9ja2luZyB4aWQveG1pbiAqLworCWludAkJCXBpZDsJCQkvKiBiYWNrZW5kIHBpZCAo MCBmb3IgcHJlcGFyZWQgeGFjdHMgYW5kCisJCQkJCQkJCSAqIHNsb3RzKSAqLworCS8qIGxhcmdl IGVub3VnaCBmb3IgcHJlcGFyZWQtdHhuIEdJRCBvciByZXBsaWNhdGlvbiBzbG90IG5hbWUgKi8K KwljaGFyCQluYW1lW01heChHSURTSVpFLCBOQU1FREFUQUxFTildOworfSBYaWRIb3Jpem9uQmxv Y2tlcjsKKwogCiBleHRlcm4gdm9pZCBQcm9jQXJyYXlBZGQoUEdQUk9DICpwcm9jKTsKIGV4dGVy biB2b2lkIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0 WGlkKTsKQEAgLTk4LDQgKzEzNSw3IEBAIGV4dGVybiB2b2lkIFByb2NBcnJheVNldFJlcGxpY2F0 aW9uU2xvdFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLAogZXh0ZXJuIHZvaWQgUHJvY0FycmF5R2V0 UmVwbGljYXRpb25TbG90WG1pbihUcmFuc2FjdGlvbklkICp4bWluLAogCQkJCQkJCQkJCQlUcmFu c2FjdGlvbklkICpjYXRhbG9nX3htaW4pOwogCitleHRlcm4gYm9vbCBHZXRYaWRIb3Jpem9uQmxv Y2tlcihUcmFuc2FjdGlvbklkIGhvcml6b24sCisJCQkJCQkJCSBYaWRIb3Jpem9uQmxvY2tlciAq YmxvY2tlcik7CisKICNlbmRpZgkJCQkJCQkvKiBQUk9DQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCA5NjllOTBiMzk2ZC4uNTA3YWM5MmZhM2IgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBAIC0yMSw3ICsyMSw4IEBAIHRl c3RzICs9IHsKICAgICAgICd0LzAxMF9pbmRleF9jb25jdXJyZW50bHlfdXBzZXJ0LnBsJywKICAg ICAgICd0LzAxMV9sb2NrX3N0YXRzLnBsJywKICAgICAgICd0LzAxMl9kZGx1dGlscy5wbCcsCi0g ICAgICAndC8wMTNfdGVtcF9vYmpfbXVsdGlzZXNzaW9uLnBsJywKKyAgICAgICd0LzAxMyB0ZW1w X29ial9tdWx0aXNlc3Npb24ucGwnLAorICAgICAgJ3QvMDE0X2xvZ192YWN1dW1fYmxvY2tlcnMu cGwnLAogICAgIF0sCiAgICAgIyBUaGUgaW5qZWN0aW9uIHBvaW50cyBhcmUgY2x1c3Rlci13aWRl LCBzbyBkaXNhYmxlIGluc3RhbGxjaGVjawogICAgICdydW5uaW5nY2hlY2snOiBmYWxzZSwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDE0X2xvZ192YWN1dW1fYmxv Y2tlcnMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxNF9sb2dfdmFjdXVtX2Js b2NrZXJzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZTI2ZjBm M2JlYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDE0 X2xvZ192YWN1dW1fYmxvY2tlcnMucGwKQEAgLTAsMCArMSwzMTQgQEAKKyMgQ29weXJpZ2h0IChj KSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIworIyBWYWxpZGF0 ZSB0aGF0IFZBQ1VVTSBsb2dzIGV4cGxhaW4gd2h5IGRlYWQgdHVwbGVzIGNvdWxkIG5vdCBiZSBy ZW1vdmVkLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKK3VzZSBUZXN0OjpNb3JlOworCisjIFNldCB1cCBhIGNsdXN0ZXIKK215ICRub2RlID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9kZS0+aW5pdChhbGxvd3Nf c3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsIHFbCittYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gNQorXSk7Ciskbm9kZS0+c3Rh cnQ7CisKKyMgQ3JlYXRlIHRoZSBob3Qgc3RhbmRieSB0ZXN0IHRhYmxlIGFuZCBwcmVwYXJlIGJh Y2t1cC9zdGFuZGJ5IGVhcmx5LCBiZWZvcmUKKyMgYW55IGJhY2tncm91bmQgcHNxbCBzZXNzaW9u cyBhcmUgc3RhcnRlZC4gIE9uIFdpbmRvd3MsIGJhY2tncm91bmQgcHNxbAorIyBzZXNzaW9ucyB0 aGF0IGFyZSB0ZXJtaW5hdGVkIGR1cmluZyBlYXJsaWVyIHRlc3RzIGNhbiBsZWF2ZSBmaWxlIGhh bmRsZXMKKyMgbGluZ2VyaW5nLCB3aGljaCBjYXVzZXMgcGdfY3RsIHN0YXJ0IGZvciB0aGUgc3Rh bmRieSB0byBmYWlsLiAgQnkgdGFraW5nCisjIHRoZSBiYWNrdXAgYW5kIGluaXRpYWxpemluZyB0 aGUgc3RhbmRieSBoZXJlLCB0aGUgc3RhbmRieSBzdGFydCBsYXRlciBvbmx5CisjIG5lZWRzIHRv IGxhdW5jaCBwZ19jdGwgYWZ0ZXIgYWxsIHRob3NlIHNlc3Npb25zIGhhdmUgYmVlbiBmdWxseSBj bGVhbmVkIHVwLgorJG5vZGUtPmJhY2t1cCgnb2xkZXN0eG1pbl9ob3RzdGFuZGJ5X2JrcCcpOwor bXkgJHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ29sZGVzdHhtaW5f c3RhbmRieScpOworJHN0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGUsICdvbGRlc3R4bWlu X2hvdHN0YW5kYnlfYmtwJywKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJHN0YW5kYnktPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxWworaG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgor d2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCA9IDEwMG1zCitdKTsKKworCisjCisjIEFjdGl2 ZSBzdGF0ZW1lbnQKKyMKK215ICRhY3RpdmVfdGFibGUgPSAnYmxvY2tlcl9hY3RpdmUnOworJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJMRSAkYWN0aXZlX3RhYmxl KGlkIGludCk7CitJTlNFUlQgSU5UTyAkYWN0aXZlX3RhYmxlIFZBTFVFUyAoMCk7CitdKTsKKwor bXkgJGJsb2NrZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJGJs b2NrZXJfcGlkID0gJGJsb2NrZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgp OycpOworY2hvbXAoJGJsb2NrZXJfcGlkKTsKKworIyBTdGFydCBhIGxvbmctcnVubmluZyBxdWVy eSBpbiB0aGUgYmFja2dyb3VuZCB0aGF0IGFjY2Vzc2VzIGEgdGFibGUKKyMgVGhpcyBlbnN1cmVz IHhtaW4gaXMgc2V0IChwZ19zbGVlcCBhbG9uZSBkb2Vzbid0IHJlcXVpcmUgYSBzbmFwc2hvdCkK KyRibG9ja2VyLT5xdWVyeV91bnRpbChxci8vLCBxcVsKK0JFR0lOOworU0VMRUNUICogRlJPTSAk YWN0aXZlX3RhYmxlLCBwZ19zbGVlcCg2MCk7CitdKTsKKworIyBXYWl0IGZvciB0aGUgYmxvY2tl ciB0byBoYXZlIHhtaW4gc2V0Ciskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBx cVsKK1NFTEVDVCBiYWNrZW5kX3htaW4gSVMgTk9UIE5VTEwKK0ZST00gcGdfc3RhdF9hY3Rpdml0 eQorV0hFUkUgcGlkID0gJGJsb2NrZXJfcGlkOworXSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRFTEVURSBGUk9NICRhY3RpdmVfdGFibGU7Iik7CisKK215ICRzdGRlcnIgPSAn JzsKKyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gKFZFUkJPU0UpICRhY3RpdmVfdGFi bGU7Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3Qg eG1pbiBibG9ja2VyOiBhY3RpdmUgdHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hvdCBcKHBpZCA9 ICRibG9ja2VyX3BpZFwpLywKKwknVkFDVVVNIFZFUkJPU0UgcmVwb3J0ZWQgYWN0aXZlIHRyYW5z YWN0aW9uIGhvbGRpbmcgc25hcHNob3QgYXMgb2xkZXN0IHhtaW4gYmxvY2tlcicpOworCisjIENs ZWFudXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1QgcGdfdGVybWlu YXRlX2JhY2tlbmQoJGJsb2NrZXJfcGlkKTsKK0RST1AgVEFCTEUgJGFjdGl2ZV90YWJsZTsKK10p OworCisKKyMKKyMgSWRsZSBpbiB0cmFuc2FjdGlvbgorIworbXkgJGlkbGVfdGFibGUgPSAnYmxv Y2tlcl9pZGxlJzsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCitDUkVBVEUgVEFC TEUgJGlkbGVfdGFibGUoaWQgaW50KTsKK0lOU0VSVCBJTlRPICRpZGxlX3RhYmxlIFZBTFVFUyAo MCk7CitdKTsKKworbXkgJGlkbGVfYmxvY2tlciA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bv c3RncmVzJyk7CitteSAkaWRsZV9ibG9ja2VyX3BpZCA9ICRpZGxlX2Jsb2NrZXItPnF1ZXJ5X3Nh ZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgpOycpOworY2hvbXAoJGlkbGVfYmxvY2tlcl9waWQp OworCisjIFNldCBpc29sYXRpb24gbGV2ZWwgdG8gUkVQRUFUQUJMRSBSRUFEIHRvIGVuc3VyZSB4 bWluIGlzIHNldAorJGlkbGVfYmxvY2tlci0+cXVlcnlfc2FmZShxcVsKK0JFR0lOOworU0VUIFRS QU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitTRUxFQ1QgKiBGUk9N ICRpZGxlX3RhYmxlOworXSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVU RSBGUk9NICRpZGxlX3RhYmxlOyIpOworCiskc3RkZXJyID0gJyc7Ciskbm9kZS0+cHNxbCgncG9z dGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkaWRsZV90YWJsZTsiLCBzdGRlcnIgPT4gXCRzdGRl cnIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL29sZGVzdCB4bWluIGJsb2NrZXI6IGlkbGUgaW4g dHJhbnNhY3Rpb24gaG9sZGluZyBzbmFwc2hvdCBcKHBpZCA9ICRpZGxlX2Jsb2NrZXJfcGlkXCkv LAorCSdWQUNVVU0gVkVSQk9TRSByZXBvcnRlZCBpZGxlIGluIHRyYW5zYWN0aW9uIGhvbGRpbmcg c25hcHNob3QgYXMgb2xkZXN0IHhtaW4gYmxvY2tlcicpOworCisjIENsZWFudXAKKyRpZGxlX2Js b2NrZXItPnF1aXQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFICRp ZGxlX3RhYmxlOyIpOworCisKKyMKKyMgU2VyaWFsaXphYmxlIHRyYW5zYWN0aW9uIChpZGxlIGlu IHRyYW5zYWN0aW9uKQorIworbXkgJHNlcmlhbGl6YWJsZV90YWJsZSA9ICdibG9ja2VyX3Nlcmlh bGl6YWJsZSc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRFIFRBQkxF ICRzZXJpYWxpemFibGVfdGFibGUoaWQgaW50KTsKK0lOU0VSVCBJTlRPICRzZXJpYWxpemFibGVf dGFibGUgVkFMVUVTICgwKTsKK10pOworCitteSAkc2VyX2Jsb2NrZXIgPSAkbm9kZS0+YmFja2dy b3VuZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJHNlcl9ibG9ja2VyX3BpZCA9ICRzZXJfYmxvY2tl ci0+cXVlcnlfc2FmZSgnU0VMRUNUIHBnX2JhY2tlbmRfcGlkKCk7Jyk7CitjaG9tcCgkc2VyX2Js b2NrZXJfcGlkKTsKKworJHNlcl9ibG9ja2VyLT5xdWVyeV9zYWZlKHFxWworQkVHSU47CitTRVQg VFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRTsKK1NFTEVDVCAqIEZST00g JHNlcmlhbGl6YWJsZV90YWJsZTsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJERUxFVEUgRlJPTSAkc2VyaWFsaXphYmxlX3RhYmxlOyIpOworCiskc3RkZXJyID0gJyc7Cisk bm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkc2VyaWFsaXphYmxlX3Rh YmxlOyIsIHN0ZGVyciA9PiBcJHN0ZGVycik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvb2xkZXN0 IHhtaW4gYmxvY2tlcjogaWRsZSBpbiB0cmFuc2FjdGlvbiBob2xkaW5nIHNuYXBzaG90IFwocGlk ID0gJHNlcl9ibG9ja2VyX3BpZFwpLywKKwknVkFDVVVNIFZFUkJPU0UgcmVwb3J0ZWQgc2VyaWFs aXphYmxlIHRyYW5zYWN0aW9uIGFzIG9sZGVzdCB4bWluIGJsb2NrZXInKTsKKworIyBDbGVhbnVw Ciskc2VyX2Jsb2NrZXItPnF1aXQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFICRzZXJpYWxpemFibGVfdGFibGU7Iik7CisKKworIworIyBQcmVmZXIgeGlkIG93bmVy IG92ZXIgeG1pbiBtYXRjaAorIworbXkgJHByZWZlcl90YWJsZSA9ICdibG9ja2VyX3ByZWZlcl94 aWRfb3duZXInOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK0NSRUFURSBUQUJM RSAkcHJlZmVyX3RhYmxlKGlkIGludCk7CitJTlNFUlQgSU5UTyAkcHJlZmVyX3RhYmxlIFZBTFVF UyAoMCk7CitdKTsKKworbXkgJHhpZF9vd25lciA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bv c3RncmVzJyk7CitteSAkeGlkX293bmVyX3BpZCA9ICR4aWRfb3duZXItPnF1ZXJ5X3NhZmUoJ1NF TEVDVCBwZ19iYWNrZW5kX3BpZCgpOycpOworY2hvbXAoJHhpZF9vd25lcl9waWQpOworCiskeGlk X293bmVyLT5xdWVyeV9zYWZlKHFxWworQkVHSU47CitTRUxFQ1QgcGdfY3VycmVudF94YWN0X2lk KCk7CitdKTsKKworJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgcXFbCitTRUxF Q1QgYmFja2VuZF94aWQgSVMgTk9UIE5VTEwKK0ZST00gcGdfc3RhdF9hY3Rpdml0eQorV0hFUkUg cGlkID0gJHhpZF9vd25lcl9waWQ7CitdKTsKKworbXkgJG93bmVyX3hpZCA9ICRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXFbCitTRUxFQ1QgYmFja2VuZF94aWQKK0ZST00gcGdfc3RhdF9h Y3Rpdml0eQorV0hFUkUgcGlkID0gJHhpZF9vd25lcl9waWQ7CitdKTsKK2Nob21wKCRvd25lcl94 aWQpOworCitteSAkeG1pbl9ob2xkZXIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jl cycpOworbXkgJHhtaW5faG9sZGVyX3BpZCA9ICR4bWluX2hvbGRlci0+cXVlcnlfc2FmZSgnU0VM RUNUIHBnX2JhY2tlbmRfcGlkKCk7Jyk7CitjaG9tcCgkeG1pbl9ob2xkZXJfcGlkKTsKKworIyBT dGFydCBhIGxvbmctcnVubmluZyBxdWVyeSB0aGF0IHdpbGwgdGFrZSBhIHNuYXBzaG90IGFmdGVy IHhpZF9vd25lciBiZWdpbnMKKyR4bWluX2hvbGRlci0+cXVlcnlfdW50aWwocXIvLywgcXFbCitC RUdJTjsKK1NFTEVDVCAqIEZST00gJHByZWZlcl90YWJsZSwgcGdfc2xlZXAoNjApOworXSk7CisK KyMgRW5zdXJlIHhtaW5faG9sZGVyJ3MgeG1pbiBpcyBoZWxkIGJhY2sgYnkgeGlkX293bmVyCisk bm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVDVCBiYWNrZW5kX3ht aW4gPSAnJG93bmVyX3hpZCc6OnhpZAorRlJPTSBwZ19zdGF0X2FjdGl2aXR5CitXSEVSRSBwaWQg PSAkeG1pbl9ob2xkZXJfcGlkOworXSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRFTEVURSBGUk9NICRwcmVmZXJfdGFibGU7Iik7CisKKyRzdGRlcnIgPSAnJzsKKyRub2RlLT5w c3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gKFZFUkJPU0UpICRwcmVmZXJfdGFibGU7Iiwgc3RkZXJy ID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3QgeG1pbiBibG9ja2Vy OiBpZGxlIGluIHRyYW5zYWN0aW9uIFwocGlkID0gJHhpZF9vd25lcl9waWRcKS8sCisJJ1ZBQ1VV TSBWRVJCT1NFIHByZWZlcnJlZCB4aWQgb3duZXIgb3ZlciB4bWluIG1hdGNoJyk7CisKKyMgQ2xl YW51cAorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcVsKK1NFTEVDVCBwZ190ZXJtaW5h dGVfYmFja2VuZCgkeG1pbl9ob2xkZXJfcGlkKTsKK1NFTEVDVCBwZ190ZXJtaW5hdGVfYmFja2Vu ZCgkeGlkX293bmVyX3BpZCk7CitEUk9QIFRBQkxFICRwcmVmZXJfdGFibGU7CitdKTsKKworCisj CisjIFByZXBhcmVkIHRyYW5zYWN0aW9uCisjCitteSAkcHJlcGFyZWRfdGFibGUgPSAnYmxvY2tl cl9wcmVwYXJlZCc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRFIFRB QkxFICRwcmVwYXJlZF90YWJsZShpZCBpbnQpOworSU5TRVJUIElOVE8gJHByZXBhcmVkX3RhYmxl IFZBTFVFUyAoMCk7CitCRUdJTjsKK1BSRVBBUkUgVFJBTlNBQ1RJT04gJ2d4X3ZhY3V1bV94bWlu JzsKK10pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSAkcHJl cGFyZWRfdGFibGU7Iik7CisKKyRzdGRlcnIgPSAnJzsKKyRub2RlLT5wc3FsKCdwb3N0Z3Jlcycs ICJWQUNVVU0gKFZFUkJPU0UpICRwcmVwYXJlZF90YWJsZTsiLCBzdGRlcnIgPT4gXCRzdGRlcnIp OworbGlrZSgKKwkkc3RkZXJyLAorCXFyL29sZGVzdCB4bWluIGJsb2NrZXI6IHByZXBhcmVkIHRy YW5zYWN0aW9uIFwoZ2lkID0gZ3hfdmFjdXVtX3htaW5cKS8sCisJJ1ZBQ1VVTSBWRVJCT1NFIHJl cG9ydGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGFzIG9sZGVzdCB4bWluIGJsb2NrZXInKTsKKwor IyBDbGVhbnVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworUk9MTEJBQ0sgUFJF UEFSRUQgJ2d4X3ZhY3V1bV94bWluJzsKK0RST1AgVEFCTEUgJHByZXBhcmVkX3RhYmxlOworXSk7 CisKKworIworIyBMb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3QKKyMKK215ICRzbG90X3RhYmxlID0g J2Jsb2NrZXJfc2xvdCc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRF IFRBQkxFICRzbG90X3RhYmxlKGlkIGludCk7CitTRUxFQ1QgcGdfY3JlYXRlX2xvZ2ljYWxfcmVw bGljYXRpb25fc2xvdCgnbG9naWNhbF9zbG90JywgJ3Rlc3RfZGVjb2RpbmcnKTsKK0RST1AgVEFC TEUgJHNsb3RfdGFibGU7CitdKTsKKworJHN0ZGVyciA9ICcnOworJG5vZGUtPnBzcWwoJ3Bvc3Rn cmVzJywgJ1ZBQ1VVTSAoVkVSQk9TRSkgcGdfY2xhc3M7Jywgc3RkZXJyID0+IFwkc3RkZXJyKTsK K2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3QgeG1pbiBibG9ja2VyOiBsb2dpY2FsIHJlcGxp Y2F0aW9uIHNsb3QgXChzbG90IG5hbWUgPSBsb2dpY2FsX3Nsb3RcKS8sCisJJ1ZBQ1VVTSBWRVJC T1NFIHJlcG9ydGVkIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBhcyBvbGRlc3QgeG1pbiBzb3Vy Y2UnKTsKKworIyBDbGVhbnVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworU0VM RUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgnbG9naWNhbF9zbG90Jyk7CitdKTsKKworCisj CisjIEhvdCBzdGFuZGJ5IGZlZWRiYWNrCisjCisjIFRoZSBzdGFuZGJ5IHdhcyBhbHJlYWR5IGlu aXRpYWxpemVkIGZyb20gYSBiYWNrdXAgdGFrZW4gYWJvdmUuICBTdGFydCBpdAorIyBub3csIGFm dGVyIGFsbCBiYWNrZ3JvdW5kIHBzcWwgc2Vzc2lvbnMgZnJvbSBlYXJsaWVyIHRlc3RzIGhhdmUg YmVlbiBmdWxseQorIyBjbGVhbmVkIHVwLgorbXkgJGhzX3RhYmxlID0gJ2Jsb2NrZXJfaG90c3Rh bmRieSc7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxWworQ1JFQVRFIFRBQkxFICRo c190YWJsZShpZCBpbnQpOworSU5TRVJUIElOVE8gJGhzX3RhYmxlIFZBTFVFUyAoMCk7CitdKTsK KworJHN0YW5kYnktPnN0YXJ0OworJG5vZGUtPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnksICdy ZXBsYXknLCAkbm9kZS0+bHNuKCdmbHVzaCcpKTsKKworbXkgJHN0YW5kYnlfcmVhZGVyID0gJHN0 YW5kYnktPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKK215ICRzdGFuZGJ5X3JlYWRlcl9w aWQgPSAkc3RhbmRieV9yZWFkZXItPnF1ZXJ5X3NhZmUoJ1NFTEVDVCBwZ19iYWNrZW5kX3BpZCgp OycpOworY2hvbXAoJHN0YW5kYnlfcmVhZGVyX3BpZCk7CisKKyRzdGFuZGJ5X3JlYWRlci0+cXVl cnlfdW50aWwocXIvLywgcXFbCitCRUdJTjsKK1NFTEVDVCAqIEZST00gJGhzX3RhYmxlLCBwZ19z bGVlcCg2MCk7CitdKTsKKworIyBXYWl0IGZvciBob3Qgc3RhbmRieSBmZWVkYmFjayB0byBiZSBz ZW50Ciskbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBxWworU0VMRUNUIGJhY2tl bmRfeG1pbiBJUyBOT1QgTlVMTAorRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCitXSEVSRSBhcHBs aWNhdGlvbl9uYW1lID0gJ29sZGVzdHhtaW5fc3RhbmRieSc7CitdKTsKKworbXkgJGhzX2Jsb2Nr ZXJfcGlkID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxWworU0VMRUNUIHBpZCBGUk9N IHBnX3N0YXRfcmVwbGljYXRpb24KK1dIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnb2xkZXN0eG1p bl9zdGFuZGJ5JzsKK10pOworY2hvbXAoJGhzX2Jsb2NrZXJfcGlkKTsKKworJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gJGhzX3RhYmxlOyIpOworCiskc3RkZXJyID0g Jyc7Ciskbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIChWRVJCT1NFKSAkaHNfdGFibGU7 Iiwgc3RkZXJyID0+IFwkc3RkZXJyKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9vbGRlc3QgeG1p biBibG9ja2VyOiBob3Qgc3RhbmRieSBmZWVkYmFjayBcKHN0YW5kYnkgbmFtZSA9IG9sZGVzdHht aW5fc3RhbmRieSwgcGlkID0gJGhzX2Jsb2NrZXJfcGlkXCkvLAorCSdWQUNVVU0gVkVSQk9TRSBy ZXBvcnRlZCBob3Qgc3RhbmRieSBmZWVkYmFjayBhcyBvbGRlc3QgeG1pbiBibG9ja2VyJyk7CisK KyMgQ2xlYW51cAorJHN0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3Rl cm1pbmF0ZV9iYWNrZW5kKCRzdGFuZGJ5X3JlYWRlcl9waWQpOyIpOworJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSAkaHNfdGFibGU7Iik7CisKKworJHN0YW5kYnktPnN0 b3A7Ciskbm9kZS0+c3RvcDsKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCA4Y2Y0MGM4NzA0My4uODNiODgwYjQyNmUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0zNTQ0LDYgKzM1NDQsOCBAQCBYYWN0TG9ja1RhYmxlV2FpdEluZm8KIFhpZEJvdW5k c1Zpb2xhdGlvbgogWGlkQ2FjaGVTdGF0dXMKIFhpZENvbW1pdFN0YXR1cworWGlkSG9yaXpvbkJs b2NrZXIKK1hpZEhvcml6b25CbG9ja2VyVHlwZQogWGlkU3RhdHVzCiBYbWxFeHByCiBYbWxFeHBy T3AKLS0gCjIuNDcuMwoK --0000000000003f0ca2065275583e--