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.94.2) (envelope-from ) id 1rrz0h-0041eH-9L for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 11:42:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rrz0g-000wIH-BG for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 11:42:30 +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.94.2) (envelope-from ) id 1rrz0f-000wI9-PQ for pgsql-hackers@lists.postgresql.org; Wed, 03 Apr 2024 11:42:30 +0000 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rrz0c-000Lhg-JX for pgsql-hackers@lists.postgresql.org; Wed, 03 Apr 2024 11:42:28 +0000 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2d4a8bddc21so87327791fa.0 for ; Wed, 03 Apr 2024 04:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712144545; x=1712749345; 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=Ngb6RIL33870TG8RoINKgjObQj5XpFbuOfveHHf6yBU=; b=dxHbMvKnigPK+0kUEZ54cXHHpqNfAmyFi9FugEqClBtMFUWfmYgppouL1qmMj6YSV8 KKiDpg3GjLEu54o6s4lV5GsAOp+zQYqY4UNPpED/JKZzimdq+U44VQaRNlokhL/DxwLQ QUrJJXuF83NTfxqQJ5AXIrg/rWx7d7adROtOWbXUwper+IodY/ToxNUT9JYIWPbb5/yi CJIyvSbYmSWAUnpvNEdY/6MbYms3vkKVEvEsGaoCL/WazUrIeygWeHGT+WFvRfLkheh0 7ZF3tOKVxYtEMabK3eJCE7gI5C6wV/By1tOuOIprnQ5hagyytb1Jf8Zyu/ujfMvgOo7O BRWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712144545; x=1712749345; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Ngb6RIL33870TG8RoINKgjObQj5XpFbuOfveHHf6yBU=; b=UMyChg707u52aHACvyk0u18cwWlvtNINjikSqqFZ4BII8DsliPeJ6cwZVsyZ/JSqcj QQ4IhKaxdVxNeolsq06g4VUWMcqEwA9w7sH+bDHrBWyjuGgQaWb+61fbBTE2W+xvurh9 xwFXBEzIMzyslRRpufPRZKlRxQUt4BTV63JC9XNGgyXoDqC/nDQR2OFsF6l1AcEUxw+K 0hJ4WW01oc6/O6K1FJ5iqfzomMWy81y4NUUckX1aSFP5CoZwJ48jOCUhCWgJUgkgB/5v TLMV1agA0tVmeHfd67ylVnj5883k4Y5AZRz0XSLCr+0Qm0nLfyz4T7qfPw1ttuYiJZKO UIsw== X-Forwarded-Encrypted: i=1; AJvYcCWQULjqbGh14aog74t+XPEb3BDDipMA7h1coGDHuk4lGbqjQvPVwOMD4jDtCMpjjCgHI0Kt8f2kbfQdN28NDheirwL6FTe7SrTYv+7YAb8O0OjL X-Gm-Message-State: AOJu0YxTSl8YLWc+gyALOyIyK/WbGD1CBcuHS8OoV78dGGmX7aTDpbx0 zPXXf+FkK9mmti50ciCdV8MAqkFiRJHMQt5oJ9YIcKy4Y3N/7YUUZ4oYwLAr6biOp1lJ8jzFNYr Qb/1nUWxeN2DfgIboWhr//xgmFrVlXrXptAA= X-Google-Smtp-Source: AGHT+IFtI5XdA6lEwr1awhmS/bvgae5cURK3RnMVNkel85fxgeDN8P27daRbX0LI8G2W+3/WQHi51dX0rOSLTe/2qx4= X-Received: by 2002:a05:651c:54b:b0:2d4:a22e:d3b3 with SMTP id q11-20020a05651c054b00b002d4a22ed3b3mr10337253ljp.11.1712144544567; Wed, 03 Apr 2024 04:42:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Wed, 3 Apr 2024 17:12:12 +0530 Message-ID: Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation To: Bertrand Drouvot Cc: shveta malik , Masahiko Sawada , Amit Kapila , Nathan Bossart , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000006231e606152fb796" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006231e606152fb796 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 3, 2024 at 12:20=E2=80=AFPM Bertrand Drouvot wrote: > > > Please find the attached v31 patches implementing the above idea: > > Some comments related to v31-0001: > > =3D=3D=3D testing the behavior > > T1 =3D=3D=3D > > > - synced slots get their on inactive_since just like any other slot > > It behaves as described. > > T2 =3D=3D=3D > > > - synced slots inactive_since is set to current timestamp after the > > standby gets promoted to help inactive_since interpret correctly just > > like any other slot. > > It behaves as described. Thanks for testing. > CR1 =3D=3D=3D > > + inactive_since value will get updated > + after every synchronization > > indicates the last synchronization time? (I think that after every synchr= onization > could lead to confusion). Done. > CR2 =3D=3D=3D > > + /* > + * Set the time since the slot has become inactiv= e after shutting > + * down slot sync machinery. This helps correctly= interpret the > + * time if the standby gets promoted without a re= start. > + */ > > It looks to me that this comment is not at the right place because there = is > nothing after the comment that indicates that we shutdown the "slot sync = machinery". > > Maybe a better place is before the function definition and mention that t= his is > currently called when we shutdown the "slot sync machinery"? Done. > CR3 =3D=3D=3D > > + * We get the current time beforehand and only on= ce to avoid > + * system calls overhead while holding the lock. > > s/avoid system calls overhead while holding the lock/avoid system calls w= hile holding the spinlock/? Done. > CR4 =3D=3D=3D > > + * Set the time since the slot has become inactive. We get the cu= rrent > + * time beforehand to avoid system call overhead while holding th= e lock > > Same. Done. > CR5 =3D=3D=3D > > + # Check that the captured time is sane > + if (defined $reference_time) > + { > > s/Check that the captured time is sane/Check that the inactive_since is s= ane/? > > Sorry if some of those comments could have been done while I did review v= 29-0001. Done. On Wed, Apr 3, 2024 at 2:58=E2=80=AFPM shveta malik wrote: > > Thanks for the patches, please find few comments: > > v31-001: > > 1) > system-views.sgml: > value will get updated after every synchronization from the > corresponding remote slot on the primary. > > --This is confusing. It will be good to rephrase it. Done as per Bertrand's suggestion. > 2) > update_synced_slots_inactive_since() > > --May be, we should mention in the header that this function is called > only during promotion. Done as per Bertrand's suggestion. > 3) 040_standby_failover_slots_sync.pl: > We capture inactive_since_on_primary when we do this for the first time a= t #175 > ALTER SUBSCRIPTION regress_mysub1 DISABLE" > > But we again recreate the sub and disable it at line #280. > Do you think we shall get inactive_since_on_primary again here, to be > compared with inactive_since_on_new_primary later? Hm. Done that. Recapturing both slot_creation_time_on_primary and inactive_since_on_primary before and after CREATE SUBSCRIPTION creates the slot again on the primary/publisher. On Wed, Apr 3, 2024 at 3:32=E2=80=AFPM Amit Kapila wrote: > > > CR2 =3D=3D=3D > > > > + /* > > + * Set the time since the slot has become inact= ive after shutting > > + * down slot sync machinery. This helps correct= ly interpret the > > + * time if the standby gets promoted without a = restart. > > + */ > > > > It looks to me that this comment is not at the right place because ther= e is > > nothing after the comment that indicates that we shutdown the "slot syn= c machinery". > > > > Maybe a better place is before the function definition and mention that= this is > > currently called when we shutdown the "slot sync machinery"? > > > Won't it be better to have an assert for SlotSyncCtx->pid? IIRC, we > have some existing issues where we don't ensure that no one is running > sync API before shutdown is complete but I think we can deal with that > separately and here we can still have an Assert. That can work to ensure the slot sync worker isn't running as SlotSyncCtx->pid gets updated only for the slot sync worker. I added this assertion for now. We need to ensure (in a separate patch and thread) there is no backend acquiring it and performing sync while the slot sync worker is shutting down. Otherwise, some of the slots can get resynced and some are not while we are shutting down the slot sync worker as part of the standby promotion which might leave the slots in an inconsistent state. > > CR3 =3D=3D=3D > > > > + * We get the current time beforehand and only = once to avoid > > + * system calls overhead while holding the lock= . > > > > s/avoid system calls overhead while holding the lock/avoid system calls= while holding the spinlock/? > > > Is it valid to say that there is overhead of this call while holding > spinlock? Because I don't think at the time of promotion we expect any > other concurrent slot activity. The first reason seems good enough. No slot activity but why GetCurrentTimestamp needs to be called every time in a loop. > One other observation: > --- a/src/backend/replication/slot.c > +++ b/src/backend/replication/slot.c > @@ -42,6 +42,7 @@ > #include "access/transam.h" > #include "access/xlog_internal.h" > #include "access/xlogrecovery.h" > +#include "access/xlogutils.h" > > Is there a reason for this inclusion? I don't see any change which > should need this one. Not anymore. It was earlier needed for using the InRecovery flag in the then approach. On Wed, Apr 3, 2024 at 4:19=E2=80=AFPM Amit Kapila wrote: > > > 3) 040_standby_failover_slots_sync.pl: > > We capture inactive_since_on_primary when we do this for the first time= at #175 > > ALTER SUBSCRIPTION regress_mysub1 DISABLE" > > > > But we again recreate the sub and disable it at line #280. > > Do you think we shall get inactive_since_on_primary again here, to be > > compared with inactive_since_on_new_primary later? > > > > I think so. Modified this to recapture the times before and after the slot gets recreat= ed. > Few additional comments on tests: > 1. > +is( $standby1->safe_psql( > + 'postgres', > + "SELECT '$inactive_since_on_primary'::timestamptz < > '$inactive_since_on_standby'::timestamptz AND > + '$inactive_since_on_standby'::timestamptz < '$slot_sync_time'::timestam= ptz;" > > Shall we do <=3D check as we are doing in the main function > get_slot_inactive_since_value as the time duration is less so it can > be the same as well? Similarly, please check other tests. I get you. If the tests are so fast that losing a bit of precision might cause tests to fail. So, I'v added equality check for all the tests. > 2. > +=3Ditem $node->get_slot_inactive_since_value(self, slot_name, reference_= time) > + > +Get inactive_since column value for a given replication slot validating = it > +against optional reference time. > + > +=3Dcut > + > +sub get_slot_inactive_since_value > > I see that all callers validate against reference time. It is better > to name it validate_slot_inactive_since rather than using get_* as the > main purpose is to validate the passed value. Existing callers yes. Also, I've removed the reference time as an optional parameter. Per an offlist chat with Amit, I've added the following note in synchronize_one_slot: @@ -584,6 +585,11 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid) * overwriting 'invalidated' flag to remote_slot's value. See * InvalidatePossiblyObsoleteSlot() where it invalidates slot dire= ctly * if the slot is not acquired by other processes. + * + * XXX: If it ever turns out that slot acquire/release is costly f= or + * cases when none of the slot property is changed then we can do = a + * pre-check to ensure that at least one of the slot property is + * changed before acquiring the slot. */ ReplicationSlotAcquire(remote_slot->name, true); Please find the attached v32-0001 patch with the above review comments addressed. I'm working on review comments for 0002. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000006231e606152fb796 Content-Type: application/octet-stream; name="v32-0001-Allow-synced-slots-to-have-their-own-inactive_si.patch" Content-Disposition: attachment; filename="v32-0001-Allow-synced-slots-to-have-their-own-inactive_si.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lujqn5av0 RnJvbSA2MzIzMGFhYjkxZDU0NDdhMzg0YTVjOWQxNzIzNjc1ZjNiMGFjNGRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBBcHIgMjAyNCAxMTo0MDoxMSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjMyXSBBbGxvdyBzeW5jZWQgc2xvdHMgdG8gaGF2ZSB0aGVpciBv d24gaW5hY3RpdmVfc2luY2UuCgpUaGUgc2xvdCdzIGluYWN0aXZlX3NpbmNlIGlzbid0IGN1cnJl bnRseSBtYWludGFpbmVkIGZvcgpzeW5jZWQgc2xvdHMgb24gdGhlIHN0YW5kYnkuIFRoZSBjb21t aXQgYTExZjMzMGI1NSBwcmV2ZW50cwp1cGRhdGluZyBpbmFjdGl2ZV9zaW5jZSB3aXRoIFJlY292 ZXJ5SW5Qcm9ncmVzcygpIGNoZWNrIGluClJlc3RvcmVTbG90RnJvbURpc2soKS4gQnV0LCB0aGUg aXNzdWUgaXMgdGhhdApSZWNvdmVyeUluUHJvZ3Jlc3MoKSBhbHdheXMgcmV0dXJucyB0cnVlIGlu ClJlc3RvcmVTbG90RnJvbURpc2soKSBhcyAneGxvZ2N0bC0+U2hhcmVkUmVjb3ZlcnlTdGF0ZScg aXMKYWx3YXlzICdSRUNPVkVSWV9TVEFURV9DUkFTSCcgYXQgdGhhdCB0aW1lLiBCZWNhdXNlIG9m IHRoaXMsCmluYWN0aXZlX3NpbmNlIGlzIGFsd2F5cyBOVUxMIG9uIGEgcHJvbW90ZWQgc3RhbmRi eSBmb3IgYWxsCnN5bmNlZCBzbG90cyBldmVuIGFmdGVyIHNlcnZlciByZXN0YXJ0LgoKQWJvdmUg aXNzdWUgbGVkIHVzIHRvIGEgcXVlc3Rpb24gYXMgdG8gd2h5IHdlIGNhbid0IGp1c3QgbGV0CnN0 YW5kYnkgbWFpbnRhaW4gaXRzIG93biBpbmFjdGl2ZV9zaW5jZSBmb3Igc3luY2VkIHNsb3RzLiBU aGlzIGlzCmNvbnNpc3RlbnQgd2l0aCBhbnkgcmVndWxhciBzbG90cyBhbmQgYWxzbyBpbmRpY2F0 ZXMgdGhlIGxhc3QKc3luY2hyb25pemF0aW9uIHRpbWUgb2YgdGhlIHNsb3QuIFRoaXMgYXBwcm9h Y2ggc2ltcGxpZmllcyB0aGluZ3MKd2hlbiBjb21wYXJlZCB0byBqdXN0IGNvcHlpbmcgaW5hY3Rp dmVfc2luY2UgcmVjZWl2ZWQgZnJvbSB0aGUKcmVtb3RlIHNsb3Qgb24gdGhlIHByaW1hcnkgKGZv ciBpbnN0YW5jZSwgdGhlcmUgY2FuIGV4aXN0cyBjbG9jawpkcmlmdCBiZXR3ZWVuIHByaW1hcnkg YW5kIHN0YW5kYnkgc28ganVzdCBjb3B5aW5nIGluYWN0aXZlX3NpbmNlCmZyb20gdGhlIHByaW1h cnkgc2xvdCB0byB0aGUgc3RhbmRieSBzeW5jIHNsb3QgbWF5IG5vdCByZXByZXNlbnQKdGhlIGNv cnJlY3QgdmFsdWUpLgoKVGhpcyBjb21taXQgZG9lcyB0d28gdGhpbmdzOgoxKSBNYWludGFpbnMg aW5hY3RpdmVfc2luY2UgZm9yIHN5bmMgc2xvdHMgd2hlbmV2ZXIgdGhlIHNsb3QgaXMKcmVsZWFz ZWQganVzdCBsaWtlIGFueSBvdGhlciByZWd1bGFyIHNsb3QuCgoyKSBFbnN1cmVzIHRoZSB2YWx1 ZSBpcyBzZXQgdG8gY3VycmVudCB0aW1lc3RhbXAgZHVyaW5nIHRoZQpzaHV0ZG93biBvZiBzbG90 IHN5bmMgbWFjaGluZXJ5IHRvIGhlbHAgY29ycmVjdGx5IGludGVycHJldCB0aGUKdGltZSBpZiB0 aGUgc3RhbmRieSBnZXRzIHByb21vdGVkIHdpdGhvdXQgYSByZXN0YXJ0LgoKQXV0aG9yOiBCaGFy YXRoIFJ1cGlyZWRkeQpSZXZpZXdlZC1ieTogQmVydHJhbmQgRHJvdXZvdCwgQW1pdCBLYXBpbGEs IFNodmV0YSBNYWxpawpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNz YWdlLWlkL0NBTGoyQUNXTGN0b2lILXBTalduRXBSNTRxNERFRDZyd19CUkptNXBDeDg2X1kwMU1v USU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sICAg ICAgICAgICAgICAgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Ns b3RzeW5jLmMgICAgfCA1MSArKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Nsb3QuYyAgICAgICAgICAgICAgICB8IDIyICsrKy0tLS0KIHNyYy90ZXN0L3BlcmwvUG9zdGdy ZVNRTC9UZXN0L0NsdXN0ZXIucG0gICAgICB8IDMxICsrKysrKysrKysKIHNyYy90ZXN0L3JlY292 ZXJ5L3QvMDE5X3JlcGxzbG90X2xpbWl0LnBsICAgICB8IDMwICsrLS0tLS0tLQogLi4uL3QvMDQw X3N0YW5kYnlfZmFpbG92ZXJfc2xvdHNfc3luYy5wbCAgICAgIHwgNjIgKysrKysrKysrKysrKysr KysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxNjIgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9z Z21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDNjOGRjYThjYTMuLjdlZDYxNzE3MGYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv c3lzdGVtLXZpZXdzLnNnbWwKQEAgLTI1MzAsNiArMjUzMCwxMyBAQCBTRUxFQ1QgKiBGUk9NIHBn X2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAgICAgIDxwYXJhPgog ICAgICAgICBUaGUgdGltZSBzaW5jZSB0aGUgc2xvdCBoYXMgYmVjb21lIGluYWN0aXZlLgogICAg ICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBpZiB0aGUgc2xvdCBpcyBjdXJyZW50bHkgYmVp bmcgdXNlZC4KKyAgICAgICAgTm90ZSB0aGF0IGZvciBzbG90cyBvbiB0aGUgc3RhbmRieSB0aGF0 IGFyZSBiZWluZyBzeW5jZWQgZnJvbSBhCisgICAgICAgIHByaW1hcnkgc2VydmVyICh3aG9zZSA8 c3RydWN0ZmllbGQ+c3luY2VkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMKKyAgICAgICAgPGxpdGVy YWw+dHJ1ZTwvbGl0ZXJhbD4pLCB0aGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPmluYWN0aXZlX3Np bmNlPC9zdHJ1Y3RmaWVsZD4gaW5kaWNhdGVzIHRoZSBsYXN0CisgICAgICAgIHN5bmNocm9uaXph dGlvbiAoc2VlCisgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxvZ2ljYWxkZWNvZGluZy1yZXBsaWNh dGlvbi1zbG90cy1zeW5jaHJvbml6YXRpb24iLz4pCisgICAgICAgIHRpbWUuCiAgICAgICA8L3Bh cmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvc2xvdHN5bmMuYwppbmRleCA5YWM4NDdiNzgwLi43NTViZjQwYTlhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0xNTAsNiArMTUwLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUmVtb3RlU2xvdAogfSBSZW1vdGVTbG90OwogCiBzdGF0aWMgdm9pZCBzbG90 c3luY19mYWlsdXJlX2NhbGxiYWNrKGludCBjb2RlLCBEYXR1bSBhcmcpOworc3RhdGljIHZvaWQg dXBkYXRlX3N5bmNlZF9zbG90c19pbmFjdGl2ZV9zaW5jZSh2b2lkKTsKIAogLyoKICAqIElmIG5l Y2Vzc2FyeSwgdXBkYXRlIHRoZSBsb2NhbCBzeW5jZWQgc2xvdCdzIG1ldGFkYXRhIGJhc2VkIG9u IHRoZSBkYXRhCkBAIC01ODQsNiArNTg1LDExIEBAIHN5bmNocm9uaXplX29uZV9zbG90KFJlbW90 ZVNsb3QgKnJlbW90ZV9zbG90LCBPaWQgcmVtb3RlX2RiaWQpCiAJCSAqIG92ZXJ3cml0aW5nICdp bnZhbGlkYXRlZCcgZmxhZyB0byByZW1vdGVfc2xvdCdzIHZhbHVlLiBTZWUKIAkJICogSW52YWxp ZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KCkgd2hlcmUgaXQgaW52YWxpZGF0ZXMgc2xvdCBkaXJl Y3RseQogCQkgKiBpZiB0aGUgc2xvdCBpcyBub3QgYWNxdWlyZWQgYnkgb3RoZXIgcHJvY2Vzc2Vz LgorCQkgKgorCQkgKiBYWFg6IElmIGl0IGV2ZXIgdHVybnMgb3V0IHRoYXQgc2xvdCBhY3F1aXJl L3JlbGVhc2UgaXMgY29zdGx5IGZvcgorCQkgKiBjYXNlcyB3aGVuIG5vbmUgb2YgdGhlIHNsb3Qg cHJvcGVydHkgaXMgY2hhbmdlZCB0aGVuIHdlIGNhbiBkbyBhCisJCSAqIHByZS1jaGVjayB0byBl bnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIHNsb3QgcHJvcGVydHkgaXMKKwkJICogY2hh bmdlZCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBzbG90LgogCQkgKi8KIAkJUmVwbGljYXRpb25TbG90 QWNxdWlyZShyZW1vdGVfc2xvdC0+bmFtZSwgdHJ1ZSk7CiAKQEAgLTEzNTUsNiArMTM2MSw0OCBA QCBSZXBsU2xvdFN5bmNXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0 dXBfZGF0YV9sZW4pCiAJQXNzZXJ0KGZhbHNlKTsKIH0KIAorLyoKKyAqIFVwZGF0ZSB0aGUgaW5h Y3RpdmVfc2luY2UgcHJvcGVydHkgZm9yIHN5bmNlZCBzbG90cy4KKyAqCisgKiBOb3RlIHRoYXQg dGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgY2FsbGVkIHdoZW4gd2Ugc2h1dGRvd24gdGhlIHNs b3Qgc3luYworICogbWFjaGluZXJ5LiBUaGlzIGhlbHBzIGNvcnJlY3RseSBpbnRlcnByZXQgdGhl IGluYWN0aXZlX3NpbmNlIGlmIHRoZSBzdGFuZGJ5CisgKiBnZXRzIHByb21vdGVkIHdpdGhvdXQg YSByZXN0YXJ0LgorICovCitzdGF0aWMgdm9pZAordXBkYXRlX3N5bmNlZF9zbG90c19pbmFjdGl2 ZV9zaW5jZSh2b2lkKQoreworCVRpbWVzdGFtcFR6IG5vdyA9IDA7CisKKwkvKiBUaGUgc2xvdCBz eW5jIHdvcmtlciBtdXN0bid0IGJlIHJ1bm5pbmcgYnkgbm93ICovCisJQXNzZXJ0KFNsb3RTeW5j Q3R4LT5waWQgPT0gSW52YWxpZFBpZCk7CisKKwlMV0xvY2tBY3F1aXJlKFJlcGxpY2F0aW9uU2xv dENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfcmVw bGljYXRpb25fc2xvdHM7IGkrKykKKwl7CisJCVJlcGxpY2F0aW9uU2xvdCAqcyA9ICZSZXBsaWNh dGlvblNsb3RDdGwtPnJlcGxpY2F0aW9uX3Nsb3RzW2ldOworCisJCS8qIENoZWNrIGlmIGl0IGlz IGEgc3luY2hyb25pemVkIHNsb3QgKi8KKwkJaWYgKHMtPmluX3VzZSAmJiBzLT5kYXRhLnN5bmNl ZCkKKwkJeworCQkJQXNzZXJ0KFNsb3RJc0xvZ2ljYWwocykpOworCisJCQkvKgorCQkJICogV2Ug Z2V0IHRoZSBjdXJyZW50IHRpbWUgYmVmb3JlaGFuZCBhbmQgb25seSBvbmNlIHRvIGF2b2lkCisJ CQkgKiBzeXN0ZW0gY2FsbHMgd2hpbGUgaG9sZGluZyB0aGUgc3BpbmxvY2suCisJCQkgKi8KKwkJ CWlmIChub3cgPT0gMCkKKwkJCQlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkJCVNw aW5Mb2NrQWNxdWlyZSgmcy0+bXV0ZXgpOworCQkJcy0+aW5hY3RpdmVfc2luY2UgPSBub3c7CisJ CQlTcGluTG9ja1JlbGVhc2UoJnMtPm11dGV4KTsKKwkJfQorCX0KKworCUxXTG9ja1JlbGVhc2Uo UmVwbGljYXRpb25TbG90Q29udHJvbExvY2spOworfQorCiAvKgogICogU2h1dCBkb3duIHRoZSBz bG90IHN5bmMgd29ya2VyLgogICovCkBAIC0xMzY4LDYgKzE0MTYsNyBAQCBTaHV0RG93blNsb3RT eW5jKHZvaWQpCiAJaWYgKFNsb3RTeW5jQ3R4LT5waWQgPT0gSW52YWxpZFBpZCkKIAl7CiAJCVNw aW5Mb2NrUmVsZWFzZSgmU2xvdFN5bmNDdHgtPm11dGV4KTsKKwkJdXBkYXRlX3N5bmNlZF9zbG90 c19pbmFjdGl2ZV9zaW5jZSgpOwogCQlyZXR1cm47CiAJfQogCVNwaW5Mb2NrUmVsZWFzZSgmU2xv dFN5bmNDdHgtPm11dGV4KTsKQEAgLTE0MDAsNiArMTQ0OSw4IEBAIFNodXREb3duU2xvdFN5bmMo dm9pZCkKIAl9CiAKIAlTcGluTG9ja1JlbGVhc2UoJlNsb3RTeW5jQ3R4LT5tdXRleCk7CisKKwl1 cGRhdGVfc3luY2VkX3Nsb3RzX2luYWN0aXZlX3NpbmNlKCk7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9zbG90LmMKaW5kZXggZDc3OGMwYjkyMS4uM2JkZGFhZTAyMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Ns b3QuYwpAQCAtNjkwLDEzICs2OTAsMTAgQEAgUmVwbGljYXRpb25TbG90UmVsZWFzZSh2b2lkKQog CX0KIAogCS8qCi0JICogU2V0IHRoZSBsYXN0IGluYWN0aXZlIHRpbWUgYWZ0ZXIgbWFya2luZyB0 aGUgc2xvdCBpbmFjdGl2ZS4gV2UgZG9uJ3QKLQkgKiBzZXQgaXQgZm9yIHRoZSBzbG90cyBjdXJy ZW50bHkgYmVpbmcgc3luY2VkIGZyb20gdGhlIHByaW1hcnkgdG8gdGhlCi0JICogc3RhbmRieSBi ZWNhdXNlIHN1Y2ggc2xvdHMgYXJlIHR5cGljYWxseSBpbmFjdGl2ZSBhcyBkZWNvZGluZyBpcyBu b3QKLQkgKiBhbGxvd2VkIG9uIHRob3NlLgorCSAqIFNldCB0aGUgdGltZSBzaW5jZSB0aGUgc2xv dCBoYXMgYmVjb21lIGluYWN0aXZlLiBXZSBnZXQgdGhlIGN1cnJlbnQKKwkgKiB0aW1lIGJlZm9y ZWhhbmQgdG8gYXZvaWQgc3lzdGVtIGNhbGwgd2hpbGUgaG9sZGluZyB0aGUgc3BpbmxvY2suCiAJ ICovCi0JaWYgKCEoUmVjb3ZlcnlJblByb2dyZXNzKCkgJiYgc2xvdC0+ZGF0YS5zeW5jZWQpKQot CQlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOwogCiAJaWYgKHNsb3QtPmRhdGEucGVyc2lzdGVuY3kgPT0gUlNfUEVSU0lTVEVOVCkKIAl7 CkBAIC0yMzY5LDE2ICsyMzY2LDExIEBAIFJlc3RvcmVTbG90RnJvbURpc2soY29uc3QgY2hhciAq bmFtZSkKIAkJc2xvdC0+YWN0aXZlX3BpZCA9IDA7CiAKIAkJLyoKLQkJICogV2Ugc2V0IHRoZSBs YXN0IGluYWN0aXZlIHRpbWUgYWZ0ZXIgbG9hZGluZyB0aGUgc2xvdCBmcm9tIHRoZSBkaXNrCi0J CSAqIGludG8gbWVtb3J5LiBXaG9ldmVyIGFjcXVpcmVzIHRoZSBzbG90IGkuZS4gbWFrZXMgdGhl IHNsb3QgYWN0aXZlCi0JCSAqIHdpbGwgcmVzZXQgaXQuIFdlIGRvbid0IHNldCBpdCBmb3IgdGhl IHNsb3RzIGN1cnJlbnRseSBiZWluZyBzeW5jZWQKLQkJICogZnJvbSB0aGUgcHJpbWFyeSB0byB0 aGUgc3RhbmRieSBiZWNhdXNlIHN1Y2ggc2xvdHMgYXJlIHR5cGljYWxseQotCQkgKiBpbmFjdGl2 ZSBhcyBkZWNvZGluZyBpcyBub3QgYWxsb3dlZCBvbiB0aG9zZS4KKwkJICogU2V0IHRoZSB0aW1l IHNpbmNlIHRoZSBzbG90IGhhcyBiZWNvbWUgaW5hY3RpdmUgYWZ0ZXIgbG9hZGluZyB0aGUKKwkJ ICogc2xvdCBmcm9tIHRoZSBkaXNrIGludG8gbWVtb3J5LiBXaG9ldmVyIGFjcXVpcmVzIHRoZSBz bG90IGkuZS4KKwkJICogbWFrZXMgdGhlIHNsb3QgYWN0aXZlIHdpbGwgcmVzZXQgaXQuCiAJCSAq LwotCQlpZiAoIShSZWNvdmVyeUluUHJvZ3Jlc3MoKSAmJiBzbG90LT5kYXRhLnN5bmNlZCkpCi0J CQlzbG90LT5pbmFjdGl2ZV9zaW5jZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQkJZWxzZQot CQkJc2xvdC0+aW5hY3RpdmVfc2luY2UgPSAwOworCQlzbG90LT5pbmFjdGl2ZV9zaW5jZSA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKIAogCQlyZXN0b3JlZCA9IHRydWU7CiAJCWJyZWFrOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbSBiL3NyYy90 ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0KaW5kZXggYjA4Mjk2NjA1Yy4uZDY4 ZGI2YTZmOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rl ci5wbQorKysgYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCkBAIC0z Mjc2LDYgKzMyNzYsMzcgQEAgc3ViIGNyZWF0ZV9sb2dpY2FsX3Nsb3Rfb25fc3RhbmRieQogCiA9 cG9kCiAKKz1pdGVtICRub2RlLT52YWxpZGF0ZV9zbG90X2luYWN0aXZlX3NpbmNlKHNlbGYsIHNs b3RfbmFtZSwgcmVmZXJlbmNlX3RpbWUpCisKK1ZhbGlkYXRlIGluYWN0aXZlX3NpbmNlIHZhbHVl IG9mIGEgZ2l2ZW4gcmVwbGljYXRpb24gc2xvdCBhZ2FpbnN0IHRoZSByZWZlcmVuY2UKK3RpbWUg YW5kIHJldHVybiBpdC4KKworPWN1dAorCitzdWIgdmFsaWRhdGVfc2xvdF9pbmFjdGl2ZV9zaW5j ZQoreworCW15ICgkc2VsZiwgJHNsb3RfbmFtZSwgJHJlZmVyZW5jZV90aW1lKSA9IEBfOworCW15 ICRuYW1lID0gJHNlbGYtPm5hbWU7CisKKwlteSAkaW5hY3RpdmVfc2luY2UgPSAkc2VsZi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCXFxKFNFTEVDVCBpbmFjdGl2ZV9zaW5jZSBGUk9NIHBnX3Jl cGxpY2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScgQU5EIGlu YWN0aXZlX3NpbmNlIElTIE5PVCBOVUxMOykKKwkJKTsKKworCSMgQ2hlY2sgdGhhdCB0aGUgaW5h Y3RpdmVfc2luY2UgaXMgc2FuZQorCWlzKCRzZWxmLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ cXFbU0VMRUNUICckaW5hY3RpdmVfc2luY2UnOjp0aW1lc3RhbXB0eiA+IHRvX3RpbWVzdGFtcCgw KSBBTkQKKwkJCQknJGluYWN0aXZlX3NpbmNlJzo6dGltZXN0YW1wdHogPj0gJyRyZWZlcmVuY2Vf dGltZSc6OnRpbWVzdGFtcHR6O10KKwkJKSwKKwkJJ3QnLAorCQkibGFzdCBpbmFjdGl2ZSB0aW1l IGZvciBzbG90ICRzbG90X25hbWUgaXMgdmFsaWQgb24gbm9kZSAkbmFtZSIpCisJCW9yIGRpZSAi Y291bGQgbm90IHZhbGlkYXRlIGNhcHR1cmVkIGluYWN0aXZlX3NpbmNlIGZvciBzbG90ICRzbG90 X25hbWUiOworCisJcmV0dXJuICRpbmFjdGl2ZV9zaW5jZTsKK30KKworPXBvZAorCiA9aXRlbSAk bm9kZS0+YWR2YW5jZV93YWwobnVtKQogCiBBZHZhbmNlIFdBTCBvZiBub2RlIGJ5IGdpdmVuIG51 bWJlciBvZiBzZWdtZW50cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE5X3Jl cGxzbG90X2xpbWl0LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQu cGwKaW5kZXggM2I5YTMwNmE4Yi4uNzEyMTQxYTMzYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVj b3ZlcnkvdC8wMTlfcmVwbHNsb3RfbGltaXQucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w MTlfcmVwbHNsb3RfbGltaXQucGwKQEAgLTQ0Myw3ICs0NDMsNyBAQCAkcHJpbWFyeTQtPnNhZmVf cHNxbCgKICMgR2V0IGluYWN0aXZlX3NpbmNlIHZhbHVlIGFmdGVyIHRoZSBzbG90J3MgY3JlYXRp b24uIE5vdGUgdGhhdCB0aGUgc2xvdCBpcwogIyBzdGlsbCBpbmFjdGl2ZSB0aWxsIGl0J3MgdXNl ZCBieSB0aGUgc3RhbmRieSBiZWxvdy4KIG15ICRpbmFjdGl2ZV9zaW5jZSA9Ci0JY2FwdHVyZV9h bmRfdmFsaWRhdGVfc2xvdF9pbmFjdGl2ZV9zaW5jZSgkcHJpbWFyeTQsICRzYjRfc2xvdCwgJHNs b3RfY3JlYXRpb25fdGltZSk7CisJJHByaW1hcnk0LT52YWxpZGF0ZV9zbG90X2luYWN0aXZlX3Np bmNlKCRzYjRfc2xvdCwgJHNsb3RfY3JlYXRpb25fdGltZSk7CiAKICRzdGFuZGJ5NC0+c3RhcnQ7 CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQCAkcHJpbWFyeTQtPnJlc3RhcnQ7CiAKIGlzKCAkcHJpbWFy eTQtPnNhZmVfcHNxbCgKIAkJJ3Bvc3RncmVzJywKLQkJcXFbU0VMRUNUIGluYWN0aXZlX3NpbmNl ID4gJyRpbmFjdGl2ZV9zaW5jZSc6OnRpbWVzdGFtcHR6IEZST00gcGdfcmVwbGljYXRpb25fc2xv dHMgV0hFUkUgc2xvdF9uYW1lID0gJyRzYjRfc2xvdCcgQU5EIGluYWN0aXZlX3NpbmNlIElTIE5P VCBOVUxMO10KKwkJcXFbU0VMRUNUIGluYWN0aXZlX3NpbmNlID49ICckaW5hY3RpdmVfc2luY2Un Ojp0aW1lc3RhbXB0eiBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3RfbmFtZSA9 ICckc2I0X3Nsb3QnIEFORCBpbmFjdGl2ZV9zaW5jZSBJUyBOT1QgTlVMTDtdCiAJKSwKIAkndCcs CiAJJ2xhc3QgaW5hY3RpdmUgdGltZSBmb3IgYW4gaW5hY3RpdmUgcGh5c2ljYWwgc2xvdCBpcyB1 cGRhdGVkIGNvcnJlY3RseScpOwpAQCAtNTAyLDcgKzUwMiw3IEBAICRwdWJsaXNoZXI0LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKICMgR2V0IGluYWN0aXZlX3NpbmNlIHZhbHVlIGFmdGVyIHRoZSBz bG90J3MgY3JlYXRpb24uIE5vdGUgdGhhdCB0aGUgc2xvdCBpcwogIyBzdGlsbCBpbmFjdGl2ZSB0 aWxsIGl0J3MgdXNlZCBieSB0aGUgc3Vic2NyaWJlciBiZWxvdy4KICRpbmFjdGl2ZV9zaW5jZSA9 Ci0JY2FwdHVyZV9hbmRfdmFsaWRhdGVfc2xvdF9pbmFjdGl2ZV9zaW5jZSgkcHVibGlzaGVyNCwg JGxzdWI0X3Nsb3QsICRzbG90X2NyZWF0aW9uX3RpbWUpOworCSRwdWJsaXNoZXI0LT52YWxpZGF0 ZV9zbG90X2luYWN0aXZlX3NpbmNlKCRsc3ViNF9zbG90LCAkc2xvdF9jcmVhdGlvbl90aW1lKTsK IAogJHN1YnNjcmliZXI0LT5zdGFydDsKICRzdWJzY3JpYmVyNC0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCkBAIC01MjksNyArNTI5LDcgQEAgJHB1Ymxpc2hlcjQtPnJlc3RhcnQ7CiAKIGlzKCAkcHVi bGlzaGVyNC0+c2FmZV9wc3FsKAogCQkncG9zdGdyZXMnLAotCQlxcVtTRUxFQ1QgaW5hY3RpdmVf c2luY2UgPiAnJGluYWN0aXZlX3NpbmNlJzo6dGltZXN0YW1wdHogRlJPTSBwZ19yZXBsaWNhdGlv bl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnJGxzdWI0X3Nsb3QnIEFORCBpbmFjdGl2ZV9zaW5j ZSBJUyBOT1QgTlVMTDtdCisJCXFxW1NFTEVDVCBpbmFjdGl2ZV9zaW5jZSA+PSAnJGluYWN0aXZl X3NpbmNlJzo6dGltZXN0YW1wdHogRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90 X25hbWUgPSAnJGxzdWI0X3Nsb3QnIEFORCBpbmFjdGl2ZV9zaW5jZSBJUyBOT1QgTlVMTDtdCiAJ KSwKIAkndCcsCiAJJ2xhc3QgaW5hY3RpdmUgdGltZSBmb3IgYW4gaW5hY3RpdmUgbG9naWNhbCBz bG90IGlzIHVwZGF0ZWQgY29ycmVjdGx5Jyk7CkBAIC01NDAsMjYgKzU0MCw0IEBAIGlzKCAkcHVi bGlzaGVyNC0+c2FmZV9wc3FsKAogJHB1Ymxpc2hlcjQtPnN0b3A7CiAkc3Vic2NyaWJlcjQtPnN0 b3A7CiAKLSMgQ2FwdHVyZSBhbmQgdmFsaWRhdGUgaW5hY3RpdmVfc2luY2Ugb2YgYSBnaXZlbiBz bG90Lgotc3ViIGNhcHR1cmVfYW5kX3ZhbGlkYXRlX3Nsb3RfaW5hY3RpdmVfc2luY2UKLXsKLQlt eSAoJG5vZGUsICRzbG90X25hbWUsICRzbG90X2NyZWF0aW9uX3RpbWUpID0gQF87Ci0KLQlteSAk aW5hY3RpdmVfc2luY2UgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JCXFxKFNFTEVD VCBpbmFjdGl2ZV9zaW5jZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzCi0JCQlXSEVSRSBzbG90 X25hbWUgPSAnJHNsb3RfbmFtZScgQU5EIGluYWN0aXZlX3NpbmNlIElTIE5PVCBOVUxMOykKLQkJ KTsKLQotCSMgQ2hlY2sgdGhhdCB0aGUgY2FwdHVyZWQgdGltZSBpcyBzYW5lCi0JaXMoICRub2Rl LT5zYWZlX3BzcWwoCi0JCQkncG9zdGdyZXMnLAotCQkJcXFbU0VMRUNUICckaW5hY3RpdmVfc2lu Y2UnOjp0aW1lc3RhbXB0eiA+IHRvX3RpbWVzdGFtcCgwKSBBTkQKLQkJCQknJGluYWN0aXZlX3Np bmNlJzo6dGltZXN0YW1wdHogPj0gJyRzbG90X2NyZWF0aW9uX3RpbWUnOjp0aW1lc3RhbXB0ejtd Ci0JCSksCi0JCSd0JywKLQkJImxhc3QgaW5hY3RpdmUgdGltZSBmb3IgYW4gYWN0aXZlIHNsb3Qg JHNsb3RfbmFtZSBpcyBzYW5lIik7Ci0KLQlyZXR1cm4gJGluYWN0aXZlX3NpbmNlOwotfQotCiBk b25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQwX3N0YW5k YnlfZmFpbG92ZXJfc2xvdHNfc3luYy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQwX3N0YW5k YnlfZmFpbG92ZXJfc2xvdHNfc3luYy5wbAppbmRleCA4NjllM2QyZTkxLi5hOGJlOGFjN2ZjIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA0MF9zdGFuZGJ5X2ZhaWxvdmVyX3Nsb3Rz X3N5bmMucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDBfc3RhbmRieV9mYWlsb3Zlcl9z bG90c19zeW5jLnBsCkBAIC0zNSw2ICszNSwxMyBAQCBteSAkc3Vic2NyaWJlcjEgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXIxJyk7CiAkc3Vic2NyaWJlcjEtPmlu aXQ7CiAkc3Vic2NyaWJlcjEtPnN0YXJ0OwogCisjIENhcHR1cmUgdGhlIHRpbWUgYmVmb3JlIHRo ZSBsb2dpY2FsIGZhaWxvdmVyIHNsb3QgaXMgY3JlYXRlZCBvbiB0aGUKKyMgcHJpbWFyeS4gV2Ug bGF0ZXIgY2FsbCB0aGlzIHB1Ymxpc2hlciBhcyBwcmltYXJ5IGFueXdheS4KK215ICRzbG90X2Ny ZWF0aW9uX3RpbWVfb25fcHJpbWFyeSA9ICRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcVsKKyAgICBTRUxFQ1QgY3VycmVudF90aW1lc3RhbXA7CitdKTsKKwogIyBDcmVhdGUg YSBzbG90IG9uIHRoZSBwdWJsaXNoZXIgd2l0aCBmYWlsb3ZlciBkaXNhYmxlZAogJHB1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVf bG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdsc3ViMV9zbG90JywgJ3Bnb3V0cHV0JywgZmFsc2Us IGZhbHNlLCBmYWxzZSk7IgpAQCAtMTc0LDYgKzE4MSwxMSBAQCAkcHJpbWFyeS0+cG9sbF9xdWVy eV91bnRpbCgKIAkiU0VMRUNUIENPVU5UKCopIEZST00gcGdfY2F0YWxvZy5wZ19yZXBsaWNhdGlv bl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnbHN1YjFfc2xvdCcgQU5EIGFjdGl2ZSA9ICdmJyIs CiAJMSk7CiAKKyMgQ2FwdHVyZSB0aGUgaW5hY3RpdmVfc2luY2Ugb2YgdGhlIHNsb3QgZnJvbSB0 aGUgcHJpbWFyeS4gTm90ZSB0aGF0IHRoZSBzbG90CisjIGlzIG5vdCB5ZXQgYWN0aXZlLgorbXkg JGluYWN0aXZlX3NpbmNlX29uX3ByaW1hcnkgPQorCSRwcmltYXJ5LT52YWxpZGF0ZV9zbG90X2lu YWN0aXZlX3NpbmNlKCdsc3ViMV9zbG90JywgJHNsb3RfY3JlYXRpb25fdGltZV9vbl9wcmltYXJ5 KTsKKwogIyBXYWl0IGZvciB0aGUgc3RhbmRieSB0byBjYXRjaCB1cCBzbyB0aGF0IHRoZSBzdGFu ZGJ5IGlzIG5vdCBsYWdnaW5nIGJlaGluZAogIyB0aGUgc3Vic2NyaWJlci4KICRwcmltYXJ5LT53 YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEpOwpAQCAtMTgxLDYgKzE5MywxMSBAQCAk cHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsKICMgU3luY2hyb25p emUgdGhlIHByaW1hcnkgc2VydmVyIHNsb3RzIHRvIHRoZSBzdGFuZGJ5LgogJHN0YW5kYnkxLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBwZ19zeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKCk7 Iik7CiAKK215ICRzbG90X3N5bmNfdGltZSA9ICRzdGFuZGJ5MS0+c2FmZV9wc3FsKAorCSdwb3N0 Z3JlcycsIHFxWworICAgIFNFTEVDVCBjdXJyZW50X3RpbWVzdGFtcDsKK10pOworCiAjIENvbmZp cm0gdGhhdCB0aGUgbG9naWNhbCBmYWlsb3ZlciBzbG90cyBhcmUgY3JlYXRlZCBvbiB0aGUgc3Rh bmRieSBhbmQgYXJlCiAjIGZsYWdnZWQgYXMgJ3N5bmNlZCcKIGlzKCAkc3RhbmRieTEtPnNhZmVf cHNxbCgKQEAgLTE5MCw2ICsyMDcsMTkgQEAgaXMoICRzdGFuZGJ5MS0+c2FmZV9wc3FsKAogCSJ0 IiwKIAknbG9naWNhbCBzbG90cyBoYXZlIHN5bmNlZCBhcyB0cnVlIG9uIHN0YW5kYnknKTsKIAor IyBDYXB0dXJlIHRoZSBpbmFjdGl2ZV9zaW5jZSBvZiB0aGUgc3luY2VkIHNsb3Qgb24gdGhlIHN0 YW5kYnkKK215ICRpbmFjdGl2ZV9zaW5jZV9vbl9zdGFuZGJ5ID0KKwkkc3RhbmRieTEtPnZhbGlk YXRlX3Nsb3RfaW5hY3RpdmVfc2luY2UoJ2xzdWIxX3Nsb3QnLCAkc2xvdF9jcmVhdGlvbl90aW1l X29uX3ByaW1hcnkpOworCisjIFN5bmNlZCBzbG90IG9uIHRoZSBzdGFuZGJ5IG11c3QgZ2V0IGl0 cyBvd24gaW5hY3RpdmVfc2luY2UuCitpcyggJHN0YW5kYnkxLT5zYWZlX3BzcWwoCisJCSdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgJyRpbmFjdGl2ZV9zaW5jZV9vbl9wcmltYXJ5Jzo6dGltZXN0YW1w dHogPD0gJyRpbmFjdGl2ZV9zaW5jZV9vbl9zdGFuZGJ5Jzo6dGltZXN0YW1wdHogQU5ECisJCQkn JGluYWN0aXZlX3NpbmNlX29uX3N0YW5kYnknOjp0aW1lc3RhbXB0eiA8PSAnJHNsb3Rfc3luY190 aW1lJzo6dGltZXN0YW1wdHo7IgorCSksCisJInQiLAorCSdzeW5jaHJvbml6ZWQgc2xvdCBoYXMg Z290IGl0cyBvd24gaW5hY3RpdmVfc2luY2UnKTsKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVGVzdCB0aGF0IHRoZSBzeW5jaHJvbml6ZWQg c2xvdCB3aWxsIGJlIGRyb3BwZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlCiAjIHNsb3Qg b24gdGhlIHByaW1hcnkgc2VydmVyIGhhcyBiZWVuIGRyb3BwZWQuCkBAIC0yMzcsNiArMjY3LDEz IEBAIGlzKCAkc3RhbmRieTEtPnNhZmVfcHNxbCgKICRzdGFuZGJ5MS0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsICdtYXhfc2xvdF93YWxfa2VlcF9zaXplID0gLTEnKTsKICRzdGFuZGJ5 MS0+cmVsb2FkOwogCisjIENhcHR1cmUgdGhlIHRpbWUgYmVmb3JlIHRoZSBsb2dpY2FsIGZhaWxv dmVyIHNsb3QgaXMgY3JlYXRlZCBvbiB0aGUgcHJpbWFyeS4KKyMgTm90ZSB0aGF0IHRoZSBzdWJz Y3JpcHRpb24gY3JlYXRlcyB0aGUgc2xvdCBhZ2FpbiBvbiB0aGUgcHJpbWFyeS4KKyRzbG90X2Ny ZWF0aW9uX3RpbWVfb25fcHJpbWFyeSA9ICRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxcVsKKyAgICBTRUxFQ1QgY3VycmVudF90aW1lc3RhbXA7CitdKTsKKwogIyBUbyBlbnN1 cmUgdGhhdCByZXN0YXJ0X2xzbiBoYXMgbW92ZWQgdG8gYSByZWNlbnQgV0FMIHBvc2l0aW9uLCB3 ZSByZS1jcmVhdGUKICMgdGhlIHN1YnNjcmlwdGlvbiBhbmQgdGhlIGxvZ2ljYWwgc2xvdC4KICRz dWJzY3JpYmVyMS0+c2FmZV9wc3FsKApAQCAtMjU3LDYgKzI5NCwxMSBAQCAkcHJpbWFyeS0+cG9s bF9xdWVyeV91bnRpbCgKIAkiU0VMRUNUIENPVU5UKCopIEZST00gcGdfY2F0YWxvZy5wZ19yZXBs aWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25hbWUgPSAnbHN1YjFfc2xvdCcgQU5EIGFjdGl2ZSA9 ICdmJyIsCiAJMSk7CiAKKyMgQ2FwdHVyZSB0aGUgaW5hY3RpdmVfc2luY2Ugb2YgdGhlIHNsb3Qg ZnJvbSB0aGUgcHJpbWFyeS4gTm90ZSB0aGF0IHRoZSBzbG90CisjIGlzIG5vdCB5ZXQgYWN0aXZl IGJ1dCBoYXMgYmVlbiBkcm9wcGVkIGFuZCByZWNyZWF0ZWQuCiskaW5hY3RpdmVfc2luY2Vfb25f cHJpbWFyeSA9CisJJHByaW1hcnktPnZhbGlkYXRlX3Nsb3RfaW5hY3RpdmVfc2luY2UoJ2xzdWIx X3Nsb3QnLCAkc2xvdF9jcmVhdGlvbl90aW1lX29uX3ByaW1hcnkpOworCiAjIFdhaXQgZm9yIHRo ZSBzdGFuZGJ5IHRvIGNhdGNoIHVwIHNvIHRoYXQgdGhlIHN0YW5kYnkgaXMgbm90IGxhZ2dpbmcg YmVoaW5kCiAjIHRoZSBzdWJzY3JpYmVyLgogJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRj aHVwKCRzdGFuZGJ5MSk7CkBAIC04MDgsOCArODUwLDI4IEBAICRwcmltYXJ5LT5yZWxvYWQ7CiAk c3RhbmRieTEtPnN0YXJ0OwogJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFu ZGJ5MSk7CiAKKyMgQ2FwdHVyZSB0aGUgdGltZSBiZWZvcmUgdGhlIHN0YW5kYnkgaXMgcHJvbW90 ZWQKK215ICRwcm9tb3Rpb25fdGltZV9vbl9wcmltYXJ5ID0gJHN0YW5kYnkxLT5zYWZlX3BzcWwo CisJJ3Bvc3RncmVzJywgcXFbCisgICAgU0VMRUNUIGN1cnJlbnRfdGltZXN0YW1wOworXSk7CisK ICRzdGFuZGJ5MS0+cHJvbW90ZTsKIAorIyBDYXB0dXJlIHRoZSBpbmFjdGl2ZV9zaW5jZSBvZiB0 aGUgc3luY2VkIHNsb3QgYWZ0ZXIgdGhlIHByb21vdGlvbi4KKyMgRXhwZWN0YXRpb24gaGVyZSBp cyB0aGF0IHRoZSBzbG90IGdldHMgaXRzIG93biBpbmFjdGl2ZV9zaW5jZSBhcyBwYXJ0IG9mIHRo ZQorIyBwcm9tb3Rpb24uIFdlIGRvIHRoaXMgY2hlY2sgYmVmb3JlIHRoZSBzbG90IGlzIGVuYWJs ZWQgb24gdGhlIG5ldyBwcmltYXJ5CisjIGJlbG93LCBvdGhlcndpc2UgdGhlIHNsb3QgZ2V0cyBh Y3RpdmUgc2V0dGluZyBpbmFjdGl2ZV9zaW5jZSB0byBOVUxMLgorbXkgJGluYWN0aXZlX3NpbmNl X29uX25ld19wcmltYXJ5ID0KKwkkc3RhbmRieTEtPnZhbGlkYXRlX3Nsb3RfaW5hY3RpdmVfc2lu Y2UoJ2xzdWIxX3Nsb3QnLCAkcHJvbW90aW9uX3RpbWVfb25fcHJpbWFyeSk7CisKK2lzKCAkc3Rh bmRieTEtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCAnJGluYWN0aXZlX3Np bmNlX29uX25ld19wcmltYXJ5Jzo6dGltZXN0YW1wdHogPj0gJyRpbmFjdGl2ZV9zaW5jZV9vbl9w cmltYXJ5Jzo6dGltZXN0YW1wdHoiCisJKSwKKwkidCIsCisJJ3N5bmNocm9uaXplZCBzbG90IGhh cyBnb3QgaXRzIG93biBpbmFjdGl2ZV9zaW5jZSBvbiB0aGUgbmV3IHByaW1hcnkgYWZ0ZXIgcHJv bW90aW9uJyk7CisKICMgVXBkYXRlIHN1YnNjcmlwdGlvbiB3aXRoIHRoZSBuZXcgcHJpbWFyeSdz IGNvbm5lY3Rpb24gaW5mbwogbXkgJHN0YW5kYnkxX2Nvbm5pbmZvID0gJHN0YW5kYnkxLT5jb25u c3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOwogJHN1YnNjcmliZXIxLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLS0gCjIuMzQuMQoK --0000000000006231e606152fb796--