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 1wUgwp-001Msd-0U for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jun 2026 08:27: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 1wUgwn-000gK6-0L for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Jun 2026 08:27:33 +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 1wUgwm-000gJw-1l for pgsql-hackers@lists.postgresql.org; Wed, 03 Jun 2026 08:27:32 +0000 Received: from mail-ot1-x32a.google.com ([2607:f8b0:4864:20::32a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wUgwk-00000000sju-2NE4 for pgsql-hackers@lists.postgresql.org; Wed, 03 Jun 2026 08:27:31 +0000 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-7e6e9408e30so398658a34.2 for ; Wed, 03 Jun 2026 01:27:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780475250; cv=none; d=google.com; s=arc-20240605; b=hcfEJRPHhulb0hHeGWA+Vz2QC67+2t59KMTSbErEixkLI+Fj6Oub8W/eaWHwgi2OK6 MEEqfmUCDAeEfAUbwcgS9AZ0EMjj4A7ypFJkHguD+B8JeKb+edk8hlU3Le2mI80vCumg Xl0XJb75OMdn35AZ+IInZQPDoIYksNffekN5FSTkS4iinWCPM6xBZS0nIW8xMC7zuaVa tvtpBWdFddZezejNPQpYygfslrpQtOnNZh2nRowT/pXxf1GW9btZsR53/yLmZlkIwOAX RQhZfXNS3xblx2tupShKBgzMGZSCbrnjKl8yBB8BH7ykcG7C+RwPHM/wGYjdvdF8ttkP 470g== 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=nmDtC+TieB6DuOJiQie89QlWC0dgiV9YxF5Woucmx0s=; fh=Sh3iFrWebY3mdxvP/bs6pSWC+Nmsx+i1s/0sYh4bgcU=; b=SIem91qxDOb3nNSRTp8ix29INjB2GCUr8zpZD3c8sQQ5JvHOBdm49C2E7JNqiR6H+D PaHTv6D6tfr9pwVhOU5ILA0xPP44rg43r7hMWSRhpWmsgCFOpaZ0C86IB37vvwV2Fa3b nen/KXhctjtp/jfpUH+6PqwiKMAXqbYiWliTMEq6SWsT83y6l/y4OUAt9c6CmnP8ps6M E1q2HiRXz/PQ72/T2wyUkI2BvjYr5yAUU5ZWnW7D+UUvPlTv7y0s2Lh0bYCvl3LVYcYP 9arx6q2lUcYJ+6IGjwXd+rbrS/r4Tk5mA/qfXqIrvZQWmiq4cNxWvWXhk4qCv9CDPsG6 Z8sg==; 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=1780475250; x=1781080050; 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=nmDtC+TieB6DuOJiQie89QlWC0dgiV9YxF5Woucmx0s=; b=JnCWeCICgkBp5z2dEAVwIAWze+kFYtL1XATRSWlPeKqOLqsG9ASLwrmGJmR+3yCQbV 07ZbkInF89IvLtVMLt3apTc2lJZas1BCvdoM2dIdJrLYw7ogT96MsobU2qQfFk8j5urw XyTNmbMyVwT6uyKHC5J6UD1lnoxgWqD/lFpY1r08qFoSp7sSOWkKGqFhi1+ZSCtVf2Rs 11y7bQwGpqH10irXufF8Hf4C9Ph1BoUbHP21BbXA+/hbzO9Uv66W70gOGNLculBvGZYw up4rByfYGhYuKSx0UJbQZ9vO6Ox9AUzTPBmBV6HKF6VmaD1nemGPH1OSaBpI7NdmUw6g oAlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780475250; x=1781080050; 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=nmDtC+TieB6DuOJiQie89QlWC0dgiV9YxF5Woucmx0s=; b=DH378uwk0wKDcLUorWNnw6B8ZivZwrrAIQoxbyydGX3z+k8+77Q3I3dRqHFrAr2kjB h4tXEWUzQ38F6CFKpmbATKcgXuktENNSg+CQbFJj6n/FlqtHtygF7DYLbd8T6gjiwcVA H2XeHxIFTITAC52nHTdtNj7XNUzbprN2o0IZE3nNUoC1qMCnB1JtTUF/OaHzyS2uvUdR rrt+dxnhmZkn33O3JOZemvaMW5wQZCpOI3kUctvQkBKoOjmI4jgEt0heZJ9Q1OtaGUgJ NrztW53efUr5Frwvm+MM/o3BebaYBiM7qXTwy3RUvXv24z6khVC37Mktb5ACDwS+BjZy fnLA== X-Forwarded-Encrypted: i=1; AFNElJ8L0AEv7tN3UkWf7pu2MxuFX8QtDiFdbFh0n4wCF5pFeuyOI0SFgB494Mk8lZChD3DwQZKxll8rTUkLJBEb@lists.postgresql.org X-Gm-Message-State: AOJu0YzR+1usCcTks5yoiMg8+aS+UGM9EXNv8RilDxN/ef3LxBxMsuAC OC9eJH0eA19G0Y40ywghHjpkonc38Dl8j9xyHzgS6w2H90zmF1Xv5pev61+jW0lUAdv6SIYzNCG bXiJvgbRwHOwG5omf3PG//hvHVLXSOIk= X-Gm-Gg: Acq92OEJ2dmwXZDF0qZZ/gVYb3jcOmIZB8BLrwHpNHarGZF52RNO2hk0+tTbkjTX1xH lg+RhRwvLjMItMPBfyxLayti3esfyfcXen2WI+NyP5g0W3tiswLbAmsD23czicI/TteXKsy1dx9 IU2rZbzf6ZLI1pY9qYILd9bF+gdJfSU1Fe2sErpJgcaXI64oUu3R1pdCl6hyxFdE1Fn59VG6+zy f381H9vYLHd1OsbL8X94JTXvLGkbT8SPYURhkZMYTxajROCaN+cfdDPBUCYvQnsTlbNxfmfJxyv H/4D1bgpXogybi5lkOTHV3uvEzEQnkvyQI4PffGBdt6NHUZC6VA= X-Received: by 2002:a4a:d190:0:b0:69d:f864:d35b with SMTP id 006d021491bc7-69e47ec51e0mr1063030eaf.23.1780475249830; Wed, 03 Jun 2026 01:27:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: JoongHyuk Shin Date: Wed, 3 Jun 2026 17:27:17 +0900 X-Gm-Features: AVHnY4Kxy0S9wq0uVzwRXHD7m42i5UsLN1ln9OskkpZBJDfIHzmqqmYtDai9tZE Message-ID: Subject: Re: [PATCH] Prevent repeated deadlock-check signals in standby buffer pin waits To: Michael Paquier Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Fujii Masao , "pgsql-hackers@lists.postgresql.org" , Vitaly Davydov , zsolt.parragi@percona.com, tanswis42@gmail.com Content-Type: multipart/mixed; boundary="000000000000cc593b065355329f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cc593b065355329f Content-Type: multipart/alternative; boundary="000000000000cc5939065355329d" --000000000000cc5939065355329d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the reviews. v3 attached. * Emit "recovery still waiting" inside the function. It now fires at deadlock_timeout instead of max_standby_streaming_delay (Ilmar). * Pass waitStart and &logged_recovery_conflict from the caller; the in-function branch reuses the same gate. * An early-return alternative reopens a race in the SetStartupBufferPinWaitBufId(-1) gap; the lock path has no equivalent because its caller is structured differently. * Covered by src/test/recovery/t/054_bufferpin_conflict_log_timing.pl (FAIL on v2, PASS on v3). -- JH Shin On Fri, May 29, 2026 at 3:31=E2=80=AFPM Michael Paquier wrote: > On Fri, May 22, 2026 at 05:41:03PM +0900, JoongHyuk Shin wrote: > > This patch addresses the opposite, > > deadlock_timeout does fire, but LockBufferForCleanup loops back and > re-arms > > it, so the signal repeats once per second. > > Right. I don't really see why this should be backpatched. One > argument would be more consistency of this area of the code across all > the stable branches, but the argument is kind of moot as this does not > fix a problem, just improves a bit what we have. > -- > Michael > --000000000000cc5939065355329d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for the reviews.

v3 attached.

* Emit = "recovery still waiting" inside the function.
It now fires at= deadlock_timeout instead of max_standby_streaming_delay (Ilmar).

* = Pass waitStart and &logged_recovery_conflict from the caller;
=C2=A0= the in-function branch reuses the same gate.

* An early-return alte= rnative reopens a race in the
=C2=A0 SetStartupBufferPinWaitBufId(-1) ga= p; the lock path has
=C2=A0 no equivalent because its caller is structur= ed differently.

* Covered by src/test/recovery/t/054_bufferpin_conflict_log_timing.pl
=C2=A0 (FAIL on v2, PASS on v3).

--
JH Shin

On Fri, May 29, 2026 at 3:31=E2=80=AFPM Michael Paquier <michael@paquier.xyz> wrote:
On Fri, May 22, 2026 at = 05:41:03PM +0900, JoongHyuk Shin wrote:
> This patch addresses the opposite,
> deadlock_timeout does fire, but LockBufferForCleanup loops back and re= -arms
> it, so the signal repeats once per second.

Right.=C2=A0 I don't really see why this should be backpatched.=C2=A0 O= ne
argument would be more consistency of this area of the code across all
the stable branches, but the argument is kind of moot as this does not
fix a problem, just improves a bit what we have.
--
Michael
--000000000000cc5939065355329d-- --000000000000cc593b065355329f Content-Type: application/octet-stream; name="v3-0001-Prevent-repeated-deadlock-check-signals-in-standb.patch" Content-Disposition: attachment; filename="v3-0001-Prevent-repeated-deadlock-check-signals-in-standb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpxsyk2g0 RnJvbSAyMDk5NWQzNTk0Zjk4NzBjZWE3MTgyY2Y4NmNlZDE4M2ZlMmNkMTk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb29uZ0h5dWsgU2hpbiA8c2poOTEwODA1QGdtYWlsLmNvbT4K RGF0ZTogU3VuLCAzMSBNYXkgMjAyNiAyMjozNjozNCArMDkwMApTdWJqZWN0OiBbUEFUQ0hdIFBy ZXZlbnQgcmVwZWF0ZWQgZGVhZGxvY2stY2hlY2sgc2lnbmFscyBpbiBzdGFuZGJ5IGJ1ZmZlciBw aW4KIHdhaXRzCgpXaGVuIGEgc3RhcnR1cCBwcm9jZXNzIGluIGhvdCBzdGFuZGJ5IHdhaXRzIG9u IGEgYnVmZmVyIHBpbiBoZWxkIGJ5CmJhY2tlbmRzIGFuZCBkZWFkbG9ja190aW1lb3V0IGZpcmVz LCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oKQpzZW50IGEgZGVhZGxvY2st Y2hlY2sgc2lnbmFsIHRvIGFsbCBiYWNrZW5kcyBhbmQgdGhlbiByZXR1cm5lZCB0byBpdHMKY2Fs bGVyIChMb2NrQnVmZmVyRm9yQ2xlYW51cCkuICBUaGUgY2FsbGVyIGxvb3BlZCBiYWNrIGFuZCBy ZS1hcm1lZCB0aGUKZGVhZGxvY2tfdGltZW91dCwgc28gdGhlIHNpZ25hbCB3YXMgcmUtYnJvYWRj YXN0IGV2ZXJ5IGRlYWRsb2NrX3RpbWVvdXQKaW50ZXJ2YWwgdW50aWwgdGhlIGJ1ZmZlciB3YXMg dW5waW5uZWQgb3IgbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5IHdhcwpyZWFjaGVkLiAgQ29t bWl0IDg5MDBiNWE5ZDU5YSAoMjAyMSkgZml4ZWQgdGhlIHNhbWUgcGF0dGVybiBpbiB0aGUKcGFy YWxsZWwgbG9jayBwYXRoIGJ1dCBsZWZ0IGFuIFhYWCBjb21tZW50IGluIHRoZSBidWZmZXIgcGlu IHBhdGggbm90aW5nCnRoZSBzYW1lIGlzc3VlIGhhZCBub3QgYmVlbiBhZGRyZXNzZWQuCgpBZnRl ciBzZW5kaW5nIHRoZSBkZWFkbG9jay1jaGVjayBzaWduYWwsIHdhaXQgaW5zaWRlIHRoaXMgZnVu Y3Rpb24gZm9yClVucGluQnVmZmVyKCkgdG8gd2FrZSB1cyB1cC4gIFRoaXMgbWFrZXMgdGhlIHNp Z25hbCBmaXJlIG9uY2UgcGVyCmJ1ZmZlci1waW4gd2FpdCBpbnN0ZWFkIG9mIG9uY2UgcGVyIGRl YWRsb2NrX3RpbWVvdXQgaW50ZXJ2YWwuCgpCZWNhdXNlIGNvbnRyb2wgbm8gbG9uZ2VyIHJldHVy bnMgdG8gdGhlIGNhbGxlciBiZXR3ZWVuIHRoZSBzaWduYWwgYW5kCnRoZSB1bnBpbiwgdGhlIGNh bGxlcidzIGxvb3AtdG9wICJyZWNvdmVyeSBzdGlsbCB3YWl0aW5nIiBsb2cgZW1pc3Npb24KKGJ1 Zm1nci5jKSB3b3VsZCBvdGhlcndpc2UgYmUgc2tpcHBlZC4gIEVtaXQgdGhhdCBsb2cgbWVzc2Fn ZSBpbnNpZGUgdGhlCmZ1bmN0aW9uIGluc3RlYWQsIHVzaW5nIHRoZSBjYWxsZXIncyB3YWl0U3Rh cnQgYW5kIGxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdApzdGF0ZSBwYXNzZWQgYnkgcmVmZXJlbmNl LiAgVGhpcyBrZWVwcyB0aGUgdXNlci12aXNpYmxlIGxvZyB0aW1pbmcgYXQKZGVhZGxvY2tfdGlt ZW91dCAodHlwaWNhbGx5IDEwMG1zKSByYXRoZXIgdGhhbiBsZXR0aW5nIGl0IHNsaXAgdG8KbWF4 X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5LgoKVGhlIGxvY2sgcGF0aCdzIGxvZ2dpbmdfY29uZmxp Y3QgZWFybHktcmV0dXJuIHBhdHRlcm4gd2FzIGNvbnNpZGVyZWQgYnV0Cm5vdCBhZG9wdGVkIGhl cmUuICBUaGUgZGVhZGxvY2stY2hlY2sgc2lnbmFsIGhhbmRsZXIgbWF0Y2hlcyBhZ2FpbnN0IHRo ZQpidWZpZCBwdWJsaXNoZWQgYnkgU2V0U3RhcnR1cEJ1ZmZlclBpbldhaXRCdWZJZCgpLCBhbmQg TG9ja0J1ZmZlckZvckNsZWFudXAKdW5wdWJsaXNoZXMgYmV0d2VlbiBjYWxsZXIgaXRlcmF0aW9u cy4gIEFuIGVhcmx5LXJldHVybiBmaXggd291bGQgcmVvcGVuCmEgcmFjZSBpbiB0aGF0IHVucHVi bGlzaC9yZS1wdWJsaXNoIGdhcCB3aGVyZSBhIGJhY2tlbmQgd2l0aCBhIGRlZmVycmVkCnNpZ25h bCBoYW5kbGVyIHNlZXMgYnVmaWQgPCAwIGFuZCBuby1vcHMuICBUaGUgbG9jayBwYXRoIGhhcyBu byBzdWNoCnB1Ymxpc2gvdW5wdWJsaXNoIHN0ZXAgYmVjYXVzZSBjb25mbGljdGluZyBiYWNrZW5k cyBhcmUgaWRlbnRpZmllZApkaXJlY3RseSBmcm9tIHRoZSBsb2NrIHRhYmxlLCBzbyB0aGUgZWFy bHktcmV0dXJuIHBhdHRlcm4gaXMgc2FmZSB0aGVyZS4KClRoZSBsb2ctdGltaW5nIGZpeCBpcyBj b3ZlcmVkIGJ5CnNyYy90ZXN0L3JlY292ZXJ5L3QvMDU0X2J1ZmZlcnBpbl9jb25mbGljdF9sb2df dGltaW5nLnBsLCB3aGljaCBhc3NlcnRzCnRoZSAic3RpbGwgd2FpdGluZyIgbG9nIGFwcGVhcnMg d2VsbCBiZWZvcmUgbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5LgpUaGUgcmVwZWF0ZWQtc2ln bmFsIGJlaGF2aW9yIGlzIHZlcmlmaWVkIG1hbnVhbGx5IHZpYSBzdHJhY2Ugb24gdGhlCnN0YXJ0 dXAgcHJvY2Vzcy4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAg ICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyAgICAgICAg ICAgICB8ICA3MyArKysrKysrKy0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaCAgICAg ICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAg ICAgICAgICAgICB8ICAgMSArCiAuLi4vdC8wNTRfYnVmZmVycGluX2NvbmZsaWN0X2xvZ190aW1p bmcucGwgICAgfCAxMzAgKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDE5OCBp bnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWNvdmVyeS90LzA1NF9idWZmZXJwaW5fY29uZmxpY3RfbG9nX3RpbWluZy5wbAoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggY2MzOThkYjEyNGQuLjViMTg0Zjk5MTAzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNjc4OSw3ICs2Nzg5LDggQEAgTG9j a0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIAkJCS8qIFB1Ymxpc2ggdGhlIGJ1Zmlk IHRoYXQgU3RhcnR1cCBwcm9jZXNzIHdhaXRzIG9uICovCiAJCQlTZXRTdGFydHVwQnVmZmVyUGlu V2FpdEJ1ZklkKGJ1ZmZlciAtIDEpOwogCQkJLyogU2V0IGFsYXJtIGFuZCB0aGVuIHdhaXQgdG8g YmUgc2lnbmFsZWQgYnkgVW5waW5CdWZmZXIoKSAqLwotCQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxp Y3RXaXRoQnVmZmVyUGluKCk7CisJCQlSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQ aW4od2FpdFN0YXJ0LAorCQkJCQkJCQkJCQkJICZsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpOwog CQkJLyogUmVzZXQgdGhlIHB1Ymxpc2hlZCBidWZpZCAqLwogCQkJU2V0U3RhcnR1cEJ1ZmZlclBp bldhaXRCdWZJZCgtMSk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwppbmRleCBkZTkw OTJmZGY1Yi4uZDNkYzI2ZWZkN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTc5 MCwxMyArNzkwLDI2IEBAIGNsZWFudXA6CiAgKiBEZWFkbG9ja3MgYXJlIGV4dHJlbWVseSByYXJl LCBhbmQgcmVsYXRpdmVseSBleHBlbnNpdmUgdG8gY2hlY2sgZm9yLAogICogc28gd2UgZG9uJ3Qg ZG8gYSBkZWFkbG9jayBjaGVjayByaWdodCBhd2F5IC4uLiBvbmx5IGlmIHdlIGhhdmUgaGFkIHRv IHdhaXQKICAqIGF0IGxlYXN0IGRlYWRsb2NrX3RpbWVvdXQuCisgKgorICogUGFyYW1ldGVycyB3 YWl0U3RhcnQgYW5kIGxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCBhcmUgZm9yd2FyZGVkIGZyb20g dGhlCisgKiBjYWxsZXIgKExvY2tCdWZmZXJGb3JDbGVhbnVwKSBzbyB0aGF0LCB3aGVuIHRoaXMg ZnVuY3Rpb24gZW1pdHMgdGhlCisgKiAicmVjb3Zlcnkgc3RpbGwgd2FpdGluZyIgbG9nIGFmdGVy IHRoZSBkZWFkbG9jay1jaGVjayBzaWduYWwsIGl0IHVzZXMgdGhlCisgKiBjYWxsZXIncyB3YWl0 LXN0YXJ0IHRpbWVzdGFtcCBhbmQgZ2F0ZS4gIFdoZW4gbG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dh aXRzCisgKiBpcyBkaXNhYmxlZCwgd2FpdFN0YXJ0IGlzIDAgYW5kIHRoZSBpbi1mdW5jdGlvbiBl bWlzc2lvbiBpcyBza2lwcGVkLgorICogbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0IG11c3QgYmUg YSB2YWxpZCAobm9uLU5VTEwpIHBvaW50ZXI7IHRoZSBmdW5jdGlvbgorICogc2V0cyAqbG9nZ2Vk X3JlY292ZXJ5X2NvbmZsaWN0IHRvIHRydWUgYWZ0ZXIgZW1pc3Npb24gc28gdGhhdCBuZWl0aGVy IHRoZQorICogY2FsbGVyJ3MgbG9vcC10b3AgYnJhbmNoIG5vciBhIGxhdGVyIGVudHJ5IHJlLWVt aXRzIHRoZSBzYW1lIGNvbmZsaWN0LgorICogVGhlIGNhbGxlcidzICJ3YWl0aW5nIiBwcy1kaXNw bGF5IHN1ZmZpeCByZW1haW5zIGFjdGl2ZSBhY3Jvc3MgdGhlIHNlY29uZAorICogUHJvY1dhaXRG b3JTaWduYWwgdW50aWwgVW5waW5CdWZmZXIoKSB3YWtlcyB1cyB1cC4KICAqLwogdm9pZAotUmVz b2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZvaWQpCitSZXNvbHZlUmVjb3ZlcnlD b25mbGljdFdpdGhCdWZmZXJQaW4oVGltZXN0YW1wVHogd2FpdFN0YXJ0LAorCQkJCQkJCQkJIGJv b2wgKmxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCkKIHsKIAlUaW1lc3RhbXBUeiBsdGltZTsKIAog CUFzc2VydChJbkhvdFN0YW5kYnkpOworCUFzc2VydChsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3Qg IT0gTlVMTCk7CiAKIAlsdGltZSA9IEdldFN0YW5kYnlMaW1pdFRpbWUoKTsKIApAQCAtODE4LDYg KzgzMSw3IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbih2b2lkKQogCiAJ CWlmIChsdGltZSAhPSAwKQogCQl7CisJCQlnb3Rfc3RhbmRieV9kZWxheV90aW1lb3V0ID0gZmFs c2U7CiAJCQl0aW1lb3V0c1tjbnRdLmlkID0gU1RBTkRCWV9USU1FT1VUOwogCQkJdGltZW91dHNb Y250XS50eXBlID0gVE1QQVJBTV9BVDsKIAkJCXRpbWVvdXRzW2NudF0uZmluX3RpbWUgPSBsdGlt ZTsKQEAgLTg1MSwxNyArODY1LDU2IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZl clBpbih2b2lkKQogCQkvKgogCQkgKiBTZW5kIG91dCBhIHJlcXVlc3QgZm9yIGhvdC1zdGFuZGJ5 IGJhY2tlbmRzIHRvIGNoZWNrIHRoZW1zZWx2ZXMgZm9yCiAJCSAqIGRlYWRsb2Nrcy4KLQkJICoK LQkJICogWFhYIFRoZSBzdWJzZXF1ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZl clBpbigpIHdpbGwgd2FpdAotCQkgKiB0byBiZSBzaWduYWxlZCBieSBVbnBpbkJ1ZmZlcigpIGFn YWluIGFuZCBzZW5kIGEgcmVxdWVzdCBmb3IKLQkJICogZGVhZGxvY2tzIGNoZWNrIGlmIGRlYWRs b2NrX3RpbWVvdXQgaGFwcGVucy4gVGhpcyBjYXVzZXMgdGhlCi0JCSAqIHJlcXVlc3QgdG8gY29u dGludWUgdG8gYmUgc2VudCBldmVyeSBkZWFkbG9ja190aW1lb3V0IHVudGlsIHRoZQotCQkgKiBi dWZmZXIgaXMgdW5waW5uZWQgb3IgbHRpbWUgaXMgcmVhY2hlZC4gVGhpcyB3b3VsZCBpbmNyZWFz ZSB0aGUKLQkJICogd29ya2xvYWQgaW4gdGhlIHN0YXJ0dXAgcHJvY2VzcyBhbmQgYmFja2VuZHMu IEluIHByYWN0aWNlIGl0IG1heQotCQkgKiBub3QgYmUgc28gaGFybWZ1bCBiZWNhdXNlIHRoZSBw ZXJpb2QgdGhhdCB0aGUgYnVmZmVyIGlzIGtlcHQgcGlubmVkCi0JCSAqIGlzIGJhc2ljYWxseSBu byBzbyBsb25nLiBCdXQgd2Ugc2hvdWxkIGZpeCB0aGlzPwogCQkgKi8KIAkJU2VuZFJlY292ZXJ5 Q29uZmxpY3RXaXRoQnVmZmVyUGluKFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTl9ERUFETE9D Syk7CisKKwkJLyoKKwkJICogRW1pdCB0aGUgInN0aWxsIHdhaXRpbmciIGxvZyBoZXJlLCBiZWNh dXNlIHRoZSBzZWNvbmQKKwkJICogUHJvY1dhaXRGb3JTaWduYWwoKSBiZWxvdyBrZWVwcyBjb250 cm9sIGluc2lkZSB0aGlzIGZ1bmN0aW9uIHVudGlsCisJCSAqIHRoZSBidWZmZXIgaXMgdW5waW5u ZWQsIHNvIHRoZSBjYWxsZXIncyBsb29wLXRvcCBsb2cgZW1pc3Npb24gd291bGQKKwkJICogb3Ro ZXJ3aXNlIGJlIHNraXBwZWQuICBUaGUgY2FsbGVyIHBhc3NlcyBpdHMgb3duIHdhaXRTdGFydCBh bmQKKwkJICogbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0IHNvIHRoZSBlbWlzc2lvbiBzZW1hbnRp Y3MgbWF0Y2ggd2hhdCB0aGUKKwkJICogY2FsbGVyIHdvdWxkIGhhdmUgcHJvZHVjZWQgb24gaXRz IG5leHQgaXRlcmF0aW9uLgorCQkgKgorCQkgKiBUaGUgY2FsbGVyJ3MgbG9vcC10b3AgYnJhbmNo IGFkZGl0aW9uYWxseSBndWFyZHMgb24KKwkJICogVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMo d2FpdFN0YXJ0LCBub3csIERlYWRsb2NrVGltZW91dCkgYmVmb3JlCisJCSAqIGxvZ2dpbmcuICBU aGF0IGV4dHJhIGd1YXJkIGlzIHJlZHVuZGFudCBoZXJlOiB3ZSBqdXN0IHdva2UgZnJvbQorCQkg KiBTVEFOREJZX0RFQURMT0NLX1RJTUVPVVQsIHNvIERlYWRsb2NrVGltZW91dCBoYXMgZWxhcHNl ZCBzaW5jZQorCQkgKiB3YWl0U3RhcnQgYnkgY29uc3RydWN0aW9uLiAgVGhlIGNhbGxlci1zaWRl IHdhaXRTdGFydCAhPSAwIGNoZWNrCisJCSAqIGlzIGEgc2hvcnRoYW5kIGZvciBsb2dfcmVjb3Zl cnlfY29uZmxpY3Rfd2FpdHM9b24gKHRoZSBjYWxsZXIKKwkJICogc2V0cyB3YWl0U3RhcnQgb25s eSB3aGVuIHRoYXQgR1VDIGlzIHRydWUpLCBzbyB0aGlzIGJyYW5jaAorCQkgKiBzdGF5cyBhIG5v LW9wIHdoZW4gY29uZmxpY3Qtd2FpdCBsb2dnaW5nIGlzIGRpc2FibGVkLgorCQkgKi8KKwkJaWYg KHdhaXRTdGFydCAhPSAwICYmICEqbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KQorCQl7CisJCQlM b2dSZWNvdmVyeUNvbmZsaWN0KFJFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTiwKKwkJCQkJCQkJ d2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCU5VTEwsIHRydWUpOwor CQkJKmxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBX YWl0IGhlcmUgdG8gYmUgc2lnbmFsZWQgYnkgVW5waW5CdWZmZXIoKSwgdG8gcHJldmVudCB0aGUK KwkJICogc3Vic2VxdWVudCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oKSBj YWxsIChmcm9tIHRoZQorCQkgKiBjYWxsZXIncyBsb29wKSBmcm9tIGZpcmluZyBhbm90aGVyIGRl YWRsb2NrX3RpbWVvdXQgYW5kIHJlLXNlbmRpbmcKKwkJICogdGhlIGRlYWRsb2NrLWNoZWNrIHNp Z25hbC4gIFdpdGhvdXQgdGhpcywgdGhlIHNpZ25hbCB3b3VsZCBiZSBzZW50CisJCSAqIGV2ZXJ5 IGRlYWRsb2NrX3RpbWVvdXQgaW50ZXJ2YWwgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZCBv cgorCQkgKiBsdGltZSBpcyByZWFjaGVkLgorCQkgKgorCQkgKiBUaGUgc2FtZSB3YWtldXAgYXNz dW1wdGlvbiBhcyB0aGUgZmlyc3Qgd2FpdCBhYm92ZSBhcHBsaWVzOiBvbmx5CisJCSAqIFVucGlu QnVmZmVyKCkgYW5kIFNUQU5EQllfVElNRU9VVCAoaWYgYXJtZWQpIGNhbiB3YWtlIHVzIGhlcmUK KwkJICogKFNUQU5EQllfREVBRExPQ0tfVElNRU9VVCB3YXMgb25lLXNob3QgYW5kIGhhcyBhbHJl YWR5IGZpcmVkKS4KKwkJICoKKwkJICogSWYgU1RBTkRCWV9USU1FT1VUIGZpcmVzIGR1cmluZyB0 aGlzIHdhaXQsIGNvbnRyb2wgcmV0dXJucyB0byB0aGUKKwkJICogY2FsbGVyIChMb2NrQnVmZmVy Rm9yQ2xlYW51cCksIHdoaWNoIHJlLWVudGVycyB0aGlzIGZ1bmN0aW9uIG9uCisJCSAqIGl0cyBu ZXh0IGl0ZXJhdGlvbjsgdGhlIEdldEN1cnJlbnRUaW1lc3RhbXAoKSA+PSBsdGltZSBmYXN0LXBh dGgKKwkJICogYXQgdGhlIHRvcCB0aGVuIHNlbmRzIHRoZSBjYW5jZWwgc2lnbmFsLiAgV2UgaW50 ZW50aW9uYWxseSBkbyBub3QKKwkJICogY2hlY2sgZ290X3N0YW5kYnlfZGVsYXlfdGltZW91dCBo ZXJlIGJlY2F1c2UgdGhlIGNhbmNlbCBpcyBvbmUKKwkJICogY2FsbGVyLWxvb3AgaXRlcmF0aW9u IGF3YXksIGFuZCBhZGRpbmcgdGhlIGNoZWNrIHdvdWxkIGR1cGxpY2F0ZQorCQkgKiBsb2dpYyB3 aXRoIHRoZSBmYXN0LXBhdGggYnJhbmNoLgorCQkgKi8KKwkJZ290X3N0YW5kYnlfZGVhZGxvY2tf dGltZW91dCA9IGZhbHNlOworCQlQcm9jV2FpdEZvclNpZ25hbChXQUlUX0VWRU5UX0JVRkZFUl9D TEVBTlVQKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFu ZGJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaAppbmRleCA2YTMxNGM2OTNjZC4u NmFhMGM5YWMyYmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oCkBAIC03OSw3ICs3OSw4IEBAIGV4dGVy biB2b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFRhYmxlc3BhY2UoT2lkIHRzaWQpOwog ZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRiaWQp OwogCiBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhMb2NrKExPQ0tUQUcg bG9ja3RhZywgYm9vbCBsb2dnaW5nX2NvbmZsaWN0KTsKLWV4dGVybiB2b2lkIFJlc29sdmVSZWNv dmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbih2b2lkKTsKK2V4dGVybiB2b2lkIFJlc29sdmVSZWNv dmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbihUaW1lc3RhbXBUeiB3YWl0U3RhcnQsCisJCQkJCQkJ CQkJCQkgYm9vbCAqbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KTsKIGV4dGVybiB2b2lkIENoZWNr UmVjb3ZlcnlDb25mbGljdERlYWRsb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieURlYWRM b2NrSGFuZGxlcih2b2lkKTsKIGV4dGVybiB2b2lkIFN0YW5kYnlUaW1lb3V0SGFuZGxlcih2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qv cmVjb3ZlcnkvbWVzb24uYnVpbGQKaW5kZXggOWViOGVkMTE0MjUuLjY0ZDA1ZDUwNDFjIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9yZWNv dmVyeS9tZXNvbi5idWlsZApAQCAtNjIsNiArNjIsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8w NTFfZWZmZWN0aXZlX3dhbF9sZXZlbC5wbCcsCiAgICAgICAndC8wNTJfY2hlY2twb2ludF9zZWdt ZW50X21pc3NpbmcucGwnLAogICAgICAgJ3QvMDUzX3N0YW5kYnlfbG9naW5fZXZlbnRfdHJpZ2dl ci5wbCcsCisgICAgICAndC8wNTRfYnVmZmVycGluX2NvbmZsaWN0X2xvZ190aW1pbmcucGwnLAog ICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1NF9idWZm ZXJwaW5fY29uZmxpY3RfbG9nX3RpbWluZy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDU0X2J1 ZmZlcnBpbl9jb25mbGljdF9sb2dfdGltaW5nLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi41NzBlNTEwOGIzNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDU0X2J1ZmZlcnBpbl9jb25mbGljdF9sb2dfdGltaW5nLnBsCkBAIC0wLDAgKzEs MTMwIEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKworIyBWZXJpZnkgdGhhdCAicmVjb3Zlcnkgc3RpbGwgd2FpdGluZyIgaXMgbG9n Z2VkIGFmdGVyIGRlYWRsb2NrX3RpbWVvdXQKKyMgZHVyaW5nIGEgYnVmZmVyIHBpbiByZWNvdmVy eSBjb25mbGljdCwgcmF0aGVyIHRoYW4gb25seSBhdAorIyBtYXhfc3RhbmRieV9zdHJlYW1pbmdf ZGVsYXkuCisjCisjIFRoaXMgZ3VhcmRzIGFnYWluc3QgYSByZWdyZXNzaW9uIHdoZXJlIHRoZSBz dGFydHVwIHByb2Nlc3Mgd2FpdHMgdGhlCisjIGZ1bGwgbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2Rl bGF5IGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIGNhbGxlciwgd2hpY2gKKyMgZGVsYXlzIHRoZSBj b25mbGljdCBsb2cgZW1pdHRlZCBmcm9tIExvY2tCdWZmZXJGb3JDbGVhbnVwKCkuCisjCisjIFJl cG9ydGVkIGJ5IElsbWFyIFl1bnVzb3Ygb24gdGhlIHYyIHRocmVhZCBvZiAiU3RhbmRieSBkZWFk bG9jayBjaGVjaworIyByZXBlYXRzIHNpZ25hbCBldmVyeSBkZWFkbG9ja190aW1lb3V0Ii4KKwor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKKworbXkgJG5vZGVfcHJpbWFyeSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGVfcHJpbWFy eS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworCisjIElsbWFyJ3MgcmVwb3J0ZWQgZW52 aXJvbm1lbnQ6IHNob3J0IGRlYWRsb2NrX3RpbWVvdXQsIGxvbmcgc3RyZWFtaW5nCisjIGRlbGF5 LCBjb25mbGljdC13YWl0IGxvZ2dpbmcgZW5hYmxlZC4KKyRub2RlX3ByaW1hcnktPmFwcGVuZF9j b25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcVsKK2xvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0 cyA9IG9uCitkZWFkbG9ja190aW1lb3V0ID0gMTAwbXMKK21heF9zdGFuZGJ5X3N0cmVhbWluZ19k ZWxheSA9IDVzCitdKTsKKyRub2RlX3ByaW1hcnktPnN0YXJ0OworCitteSAkYmFja3VwX25hbWUg PSAnYnBfYmFja3VwJzsKKyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCitt eSAkbm9kZV9zdGFuZGJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5 Jyk7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnksICRiYWNr dXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+c3RhcnQ7CisK K215ICR0ZXN0X2RiID0gJ2JwX2RiJzsKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIERBVEFCQVNFICR0ZXN0X2RiIik7CisKK215ICR0YWJsZSA9ICdicF90YWJs ZSc7Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoCisJJHRlc3RfZGIsIHFxWworQ1JFQVRFIFRB QkxFICR0YWJsZSAoYSBpbnQsIGIgaW50KTsKK0lOU0VSVCBJTlRPICR0YWJsZSBTRUxFQ1QgMCwg MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMCk7CitdKTsKKworIyBDcmVhdGUgZGVhZCB0dXBs ZXMgdGhhdCBWQUNVVU0gRlJFRVpFIHdpbGwgcHJ1bmU7IHRoaXMgaXMgd2hhdAorIyB0cmlnZ2Vy cyB0aGUgYnVmZmVyIHBpbiByZWNvdmVyeSBjb25mbGljdCBvbiB0aGUgc3RhbmRieS4KKyRub2Rl X3ByaW1hcnktPnNhZmVfcHNxbCgKKwkkdGVzdF9kYiwgcXFbCitCRUdJTjsKK0lOU0VSVCBJTlRP ICR0YWJsZSBWQUxVRVMgKDEsIDApOworUk9MTEJBQ0s7CitCRUdJTjsgTE9DSyAkdGFibGU7IENP TU1JVDsKK10pOworJG5vZGVfcHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJG5vZGVf c3RhbmRieSk7CisKK215ICRwc3FsX3N0YW5kYnkgPQorICAkbm9kZV9zdGFuZGJ5LT5iYWNrZ3Jv dW5kX3BzcWwoJHRlc3RfZGIsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CisKK215ICRjdXJzb3IgPSAn YnBfY3Vyc29yJzsKK215ICRyZXMgPSAkcHNxbF9zdGFuZGJ5LT5xdWVyeV9zYWZlKAorCXFxWwor QkVHSU47CitERUNMQVJFICRjdXJzb3IgQ1VSU09SIEZPUiBTRUxFQ1QgYiBGUk9NICR0YWJsZTsK K0ZFVENIIEZPUldBUkQgRlJPTSAkY3Vyc29yOworXSk7CitsaWtlKCRyZXMsIHFyL14wJC9tLCAn c3RhbmRieSBjdXJzb3IgcGlucyBidWZmZXInKTsKKworbXkgJGxvZ19sb2NhdGlvbiA9IC1zICRu b2RlX3N0YW5kYnktPmxvZ2ZpbGU7CisKKyMgVHJpZ2dlciB0aGUgY29uZmxpY3QuCiskbm9kZV9w cmltYXJ5LT5zYWZlX3BzcWwoJHRlc3RfZGIsICJWQUNVVU0gRlJFRVpFICR0YWJsZTsiKTsKKwor IyBXYWl0IGZvciB0aGUgInN0aWxsIHdhaXRpbmciIGxvZy4gQm91bmQgdGhlIHdhaXQgYmVsb3cK KyMgbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5ICg1cykgc28gYSByZWdyZXNzaW9uIHdoZXJl IHRoZSBsb2cgb25seQorIyBhcHBlYXJzIGF0IHRoZSBzdHJlYW1pbmctZGVsYXkgYm91bmRhcnkg ZmFpbHMgZmFzdC4KK215ICRkZWFkbGluZSA9IHRpbWUoKSArIDc7CitteSAkZm91bmQgPSAwOwor bXkgJGVsYXBzZWRfbXM7Cit3aGlsZSAodGltZSgpIDwgJGRlYWRsaW5lKQoreworCW15ICRsb2cg PSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c2x1cnBfZmlsZSgkbm9kZV9zdGFuZGJ5LT5sb2dm aWxlLAorCQkkbG9nX2xvY2F0aW9uKTsKKwlpZiAoJGxvZyA9fiAvcmVjb3Zlcnkgc3RpbGwgd2Fp dGluZyBhZnRlciAoXGQrKVwuKFxkKykgbXM6IC4qYnVmZmVyIHBpbi8pCisJeworCQkkZWxhcHNl ZF9tcyA9ICQxICsgMDsKKwkJJGZvdW5kID0gMTsKKwkJbGFzdDsKKwl9CisJdXNsZWVwKDUwXzAw MCk7ICAgICMgNTBtcyBwb2xsCit9CisKK29rKCRmb3VuZCwKKwkiYnVmZmVyIHBpbiBjb25mbGlj dCAnc3RpbGwgd2FpdGluZycgbG9nIGFwcGVhcnMgYmVmb3JlICIKKwkgIC4gIm1heF9zdGFuZGJ5 X3N0cmVhbWluZ19kZWxheSIpOworCitpZiAoJGZvdW5kKQoreworCSMgVGhlIGxvZyBzaG91bGQg YXBwZWFyIGNsb3NlIHRvIGRlYWRsb2NrX3RpbWVvdXQgKDEwMG1zKSwgbm90CisJIyBhbnl3aGVy ZSBuZWFyIG1heF9zdGFuZGJ5X3N0cmVhbWluZ19kZWxheSAoNTAwMG1zKS4gIFRoZSB2MgorCSMg cmVncmVzc2lvbiBtYW5pZmVzdHMgYXMgdGhlIGxvZyBhcHBlYXJpbmcgYXQgYXBwcm94aW1hdGVs eSA1MDAxbXMuCisJIyBVc2UgYSA0MDAwbXMgdXBwZXIgYm91bmQ6IHRpZ2h0IGVub3VnaCB0byBj YXRjaCB0aGUgcmVncmVzc2lvbgorCSMgKHdoaWNoIGZpcmVzIGF0IDUwMDFtcykgYnV0IGxvb3Nl IGVub3VnaCB0byBhYnNvcmIgc2NoZWR1bGluZworCSMgbm9pc2Ugb24gc2xvdyBidWlsZGZhcm0g YW5pbWFscyAodmFsZ3JpbmQsIENMT0JCRVJfQ0FDSEVfQUxXQVlTLAorCSMgQVNhbiwgZXRjLikg d2hlcmUgdGhlIHR5cGljYWwtY2FzZSBsYXRlbmN5IG9mIH4xMDBtcyBjYW4gZ3JvdworCSMgMTB4 LgorCWNtcF9vaygkZWxhcHNlZF9tcywgJzwnLCA0MDAwLAorCQkiJ3N0aWxsIHdhaXRpbmcnIGVs YXBzZWQgKCRlbGFwc2VkX21zIG1zKSBpcyBuZWFyICIKKwkJICAuICJkZWFkbG9ja190aW1lb3V0 LCBub3QgbWF4X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5Iik7Cit9CisKKyRwc3FsX3N0YW5kYnkt PnJlY29ubmVjdF9hbmRfY2xlYXIoKTsKKworIyBUaGUgc3RhbmRieSBzZXNzaW9uIHdhcyB0ZXJt aW5hdGVkIGJ5IHRoZSBjb25mbGljdCBjYW5jZWwuICBXYWl0IGZvcgorIyByZXBsYXkgdG8gY2F0 Y2ggdXAgYmVmb3JlIHN0b3BwaW5nIHRoZSBjbHVzdGVyLCBtaXJyb3JpbmcgdGhlIHBhdHRlcm4K KyMgaW4gdC8wMzFfcmVjb3ZlcnlfY29uZmxpY3QucGw7IHdpdGhvdXQgdGhpcywgc2h1dGRvd24g Y2FuIHJhY2UgdGhlCisjIEZBVEFMIG1lc3NhZ2UgYW5kIGxlYXZlIHRoZSB0ZXN0IG91dHB1dCBm bGFreSBvbiBzbG93IGJ1aWxkZmFybQorIyBhbmltYWxzLgorJG5vZGVfcHJpbWFyeS0+d2FpdF9m b3JfcmVwbGF5X2NhdGNodXAoJG5vZGVfc3RhbmRieSk7CisKKyRub2RlX3N0YW5kYnktPnN0b3A7 Ciskbm9kZV9wcmltYXJ5LT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTIuMAoK --000000000000cc593b065355329f--