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 1vf6xa-004Ege-03 for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Jan 2026 01:43:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vf6wZ-00ChOh-33 for pgsql-hackers@arkaria.postgresql.org; Mon, 12 Jan 2026 01:42:08 +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 1vf6wZ-00ChL5-0a for pgsql-hackers@lists.postgresql.org; Mon, 12 Jan 2026 01:42:08 +0000 Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vf6wX-005dxx-0K for pgsql-hackers@lists.postgresql.org; Mon, 12 Jan 2026 01:42:07 +0000 Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-38320cd563aso27349841fa.0 for ; Sun, 11 Jan 2026 17:42:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768182118; x=1768786918; 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=AVdV3Lv9iFxcmsFUpPn8U+z5mOgV2rXszdEohhDI/Hk=; b=QJnS+3s+OneuYceIIeVR/R9Ni5Gd173LHulGN2/Mzks3LCUi6wmSdsLlQRXQ2HVSWo Xvd+0WpHzeBTpyY6nvir/KmTxCF7zpzawRK7nkQfweR8iFBsoqn+suuR+vncptngcOTC pFIFyVuyBjipMMLbt33mYuQsOGiVNhKJBj/btgnnI01ZIRamHcQxaGcPAg5bpA/PJ9E1 Oe83B2X0g3C5JcNQx+cqYGDYBI+gDUvHwQp9pNhIJFdV9PntG4mnPSnxobQVvLNgyzmF WNySsRDLdoFklQVnNPP2XxKi5r2G0yDX869t5w3MEFmgxyNxH0fhmyIo/uE1u6B5gq8s mhgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768182118; x=1768786918; 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=AVdV3Lv9iFxcmsFUpPn8U+z5mOgV2rXszdEohhDI/Hk=; b=Qy/qze/u/fVm6d2BczIkvzKWHt2tmZokp9RHS3Au7Y1t7UCf/drlzXGB2HcOYXa8vT aXhBa/fEktzOtVviTl7BOLs4t0tiDhy/Ck541YQ9sqfXhsb07bfO9VWew4G/AWh9iJGI fqooBgJohNPLDO9oVj11sL1kEimo5fhCvMOciphwzDtETHRsHQz25nfPwG32oRwRIahW ufPEN6VHCCDPe+NbHzhcoewOW3lOeycU6Gt8SX2USDybk9A5pQzFAzWlSorHr6FmpBwO AEOcaEaJ+raROQZ1rKPCd48L8D/KX6F81ytMEMp6lCoRbvKqu+ABQ5Skt4SPg6XRA4ee cgAA== X-Forwarded-Encrypted: i=1; AJvYcCXoxKFkRhPERCD15wmANVEgs1/AdjM3X76hgszkkz1IcbqlORpIL3njHFqhxTkSGyKjH6jlne/Zazdt9zHx@lists.postgresql.org X-Gm-Message-State: AOJu0YyQ1P31dKx0JmGJC2eUegp2VW9wo88ElrITH4PcrR3cVfb84mN2 3T3IJeo1x5bE7NZdoAgjfWocI03u3eht97TatyHbEoSigR7PmaYbTBFAC0l9M7dyZaU8mi0EKDN O2GlZs7KQ9nvYLw/1PbCQj8wsVQ/c0xE= X-Gm-Gg: AY/fxX7pIXLVJB7abeg6bnyiDImd0nYfmdEJrkB/La1gzFQzvzFNapYXfvcqjYCW+aI xHSTdCXi9NpvZdhvEIkUeIuFI9mC/opKxRrUxxyG0Bs5fP7EwV48gsPyPZUi+jR+suIpY0eBDla PmSNKkh7RTQOCLr6PKnRG7cuaFWli0nKmfZOYm6IzesdZDBVIdOkKig2l5I0VG9RM2TtNGyV3jV v+WPuw7tUlwkynq1NzZGHIw3++KyjqDFqneuSaKshl9CbBZiebgj/bD/4bnJRcZABooj5iHx+J3 T/RK2wA= X-Google-Smtp-Source: AGHT+IGx7iyrMbYLUBOssH+9284Ket59jApzWG7dNRBViBbJrxIknSu6QF2XjyvL/piJP5SAGQThIAhuLkUyuyVv5W8= X-Received: by 2002:a05:651c:3050:b0:383:1a86:ad0f with SMTP id 38308e7fff4ca-3831a86b0c5mr22422131fa.10.1768182117856; Sun, 11 Jan 2026 17:41:57 -0800 (PST) MIME-Version: 1.0 References: <202512291435.5edkf3hnichv@alvherre.pgsql> <26279DAC-5ADA-4E30-B866-5DED0EEC2BEF@gmail.com> In-Reply-To: From: Chao Li Date: Mon, 12 Jan 2026 09:41:45 +0800 X-Gm-Features: AZwV_QjaJQ69oV-19_UwrgcLralZyxRIVERdNmXm_qp6HAfTOxYqURMZdhmBOn8 Message-ID: Subject: Re: Refactor replication origin state reset helpers To: Masahiko Sawada Cc: Ashutosh Bapat , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Postgres hackers Content-Type: multipart/mixed; boundary="00000000000008922c064826fb10" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000008922c064826fb10 Content-Type: multipart/alternative; boundary="00000000000008922c064826fb0e" --00000000000008922c064826fb0e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Jan 10, 2026, at 06:08, Masahiko Sawada wrote: On Thu, Jan 8, 2026 at 10:50=E2=80=AFPM Chao Li wr= ote: On Jan 8, 2026, at 17:44, Ashutosh Bapat wrote: Hi Masahiko, Thanks for updating the patches. Here are some more comments. On Thu, Jan 8, 2026 at 7:17=E2=80=AFAM Masahiko Sawada wrote: On Wed, Jan 7, 2026 at 5:15=E2=80=AFPM Chao Li wro= te: I've made some cosmetic changes to both patches (comments and the commit messages). Please review them and let me know what you think. 0001 ------- +/* + * Clear session replication origin state. + * + * replorigin_session_origin is also cleared if clear_origin is set. + */ +void +replorigin_session_clear(bool clear_origin) +{ + replorigin_session_origin_lsn =3D InvalidXLogRecPtr; + replorigin_session_origin_timestamp =3D 0; + if (clear_origin) + replorigin_session_origin =3D InvalidRepOriginId; +} All the other replorigin_session_* functions deal with session_replication_state, but this function does not deal with it. I see that in the next patch this function has been renamed as replorigin_xact_clear() which seems more appropriate. Do you intend to squash these two patches when committing? Renamed the help function to the same name as in 0002. @@ -1482,8 +1493,8 @@ pg_replication_origin_xact_reset(PG_FUNCTION_ARGS) { replorigin_check_prerequisites(true, false); - replorigin_session_origin_lsn =3D InvalidXLogRecPtr; - replorigin_session_origin_timestamp =3D 0; + /* Clear only origin_lsn and origin_timestamp */ + replorigin_session_clear(false); The comment can explain why we are not clearing replorigin_session_origin here. Something like "This function is cancel the effects of pg_replication_origin_xact_setup(), which only sets origin_lsn and origin_timestamp, so we only clear those two fields here.". Updated the comment in 0001. Next comment does not apply to this patch, but the inconsistency I am speaking about becomes apparent now. This function resets the state setup by pg_replication_origin_xact_setup(), which checks for session_replication_state being non-NULL. So I expected pg_replication_origin_xact_reset() also to check for the same condition or at least Assert it. Why is it not doing so? Added the same check in 0002. 0002 ------- - replorigin =3D (replorigin_session_origin !=3D InvalidRepOriginId && - replorigin_session_origin !=3D DoNotReplicateId); + replorigin =3D (replorigin_xact_state.origin !=3D InvalidRepOriginId && + replorigin_xact_state.origin !=3D DoNotReplicateId); There's another small deduplication opportunity here. Define function replorigin_xact_origin_isvalid() to check these two conditions and use that function here and in other places like RecordTransactionCommitPrepared(). I would go as far as making the function static inline, and use it instead of replorigin variable, whose name is certainly misleading - it doesn't talk about transaction at all. With static inline there, optimizer may be able to eliminate the multiple function call overhead. Good point. Added replorigin_xact_origin_isvalid() in 0002 as you suggested= . /* * Record commit timestamp. The value comes from plain commit timestamp * if replorigin is not enabled, or replorigin already set a value for us - * in replorigin_session_origin_timestamp otherwise. + * in replorigin_xact_state.origin_timestamp otherwise. suggestion "Record commit timestamp. Use one in replorigin_xact_state if set, otherwise use plain commit timestamp.". This reads better and is closer to the code.". If you agree, please change other similar comments too. Agreed. Updated the comment in both places. @@ -5928,12 +5928,12 @@ XactLogCommitRecord(TimestampTz commit_time, } /* dump transaction origin information */ - if (replorigin_session_origin !=3D InvalidRepOriginId) + if (replorigin_xact_state.origin !=3D InvalidRepOriginId) { * Dump transaction origin information. We need this during recovery to * update the replication origin progress. */ - if (replorigin_session_origin !=3D InvalidRepOriginId) + if (replorigin_xact_state.origin !=3D InvalidRepOriginId) { /* followed by the record's origin, if any */ if ((curinsert_flags & XLOG_INCLUDE_ORIGIN) && - replorigin_session_origin !=3D InvalidRepOriginId) + replorigin_xact_state.origin !=3D InvalidRepOriginId) Not a change in this patch but the refactoring makes it more visible. What about the case of replorigin_session_origin =3D=3D DoNotReplicateId? Should there be a comment explaining why it's excluded here? Added a comment to the 3 places. replorigin_session_setup(originid, MyLogicalRepWorker->leader_pid); - replorigin_session_origin =3D originid; + replorigin_xact_state.origin =3D originid; replorigin_session_setup() is always followed by replorigin_xact_state.origin assignment. abort/commit handlers set the other two members. Do we want to create replorigin_xact_set_origin() and replorigin_xact_set_lsn_timestamp() functions to encapsulate these assignments? Those two will serve as counterparts to replorigin_xact_clear(). Or would that be an overkill? Actually, when I added the new structure, I had the idea of adding replorigin_xact_set_origin() and replorigin_xact_set_lsn_timestamp() as I saw a lot of duplicate code for the assignment. But I hesitated to do that because I worried people might consider that=E2=80=99s too much. Given you raised the same idea, let me add the helpers as static inline. We now have 3 static inline helpers, I guess we have no reason to leave replorigin_xact_clear() alone as external. So I made it static inline as well. * successfully and that we don't need to do so again. In combination with - * setting up replorigin_session_origin_lsn and replorigin_session_origin + * setting up replorigin_xact_state.origin_lsn and replorigin_xact_state.origin I think just replorigin_xact_state should suffice for the sake of brevity. Updated the comment to eliminate the duplication. static void on_exit_clear_state(int code, Datum arg) { - replorigin_session_clear(true); + replorigin_xact_clear(true); The prologue still states clear origin, but it should mention transaction state instead. } Good catch. Updated the header comment. All comments are addressed in v8. Thank you for updating the patch! The 0001 patch looks good to me. I have some comments on the 0002 patch: Thanks for the review. - replorigin =3D (replorigin_session_origin !=3D InvalidRepOriginId && - replorigin_session_origin !=3D DoNotReplicateId); + replorigin =3D replorigin_xact_origin_isvalid(); I'm not sure it's a good refactoring TBH. While it can remove some lines, we still need to check if replorigin_xact_state.origin !=3D InvalidRepOriginId at several places. For example, Datum pg_replication_origin_session_is_setup(PG_FUNCTION_ARGS) { replorigin_check_prerequisites(false, false); PG_RETURN_BOOL(replorigin_xact_state.origin !=3D InvalidRepOriginId); } and /* * Dump transaction origin information. We need this during recovery to * update the replication origin progress. * * Note that DoNotReplicateId is intentionally excluded here. */ if (replorigin_xact_state.origin !=3D InvalidRepOriginId) The readers might be confused why we cannot use replorigin_xact_origin_isvalid() here in spite of its function name, replorigin_xact_origin_isvalid, sounds quite suitable. The comment mentions the fact that DoNotReplicated is excluded but doesn't mention why. Also, even if we want this kind of change, it should be implemented in a separate patch because it's not related to the main idea of consolidating the replication origin global variables. Fair enough. Let me revert the change related to replorigin_xact_origin_isvalid. --- - * Record commit timestamp. The value comes from plain commit timestam= p - * if replorigin is not enabled, or replorigin already set a value for us - * in replorigin_session_origin_timestamp otherwise. + * Record commit timestamp. Use one in replorigin_xact_state if set, + * otherwise use plain commit timestamp. and - * Record commit timestamp. The value comes from plain commit - * timestamp if there's no replication origin; otherwise, the - * timestamp was already set in replorigin_session_origin_timestamp by - * replication. + * Record commit timestamp. Use one in replorigin_xact_state if set= , + * otherwise use plain commit timestamp. I think the previous comments are clearer, so I'm not sure we need to change these comments by this patch. Can we just change replorigin_session_origin_timestamp to replorigin_xact_state.origin_timestamp? Reverted to the old comments and updated the variable name in the comments. --- + if (session_replication_state =3D=3D NULL) + ereport(ERROR, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("no replication origin is configured"))); I'm not sure what the original author intended but given that pg_replication_origin_xact_reset() just clears the local state I'm not sure that we should strictly require the session_replication_state to be set up nor it improves the behavior. If we raise an error in that case, it might be more user-friendly but we can live even without it. Fair point. I reverted that. If we really want to add the check, let=E2=80= =99s do that in a separate thread. --- In origin.h: +/* + * Clear the per-transaction replication origin state. + * + * replorigin_session_origin is also cleared if clear_origin is set. + */ +static inline void +replorigin_xact_clear(bool clear_origin) +{ + replorigin_xact_state.origin_lsn =3D InvalidXLogRecPtr; + replorigin_xact_state.origin_timestamp =3D 0; + if (clear_origin) + replorigin_xact_state.origin =3D InvalidRepOriginId; +} Why does this function need to move to origin.h from origin.c? That=E2=80=99s because, per Ashutosh=E2=80=99s suggestion, I added two stat= ic inline helpers replorigin_xact_set_origin() and replorigin_xact_set_lsn_timestamp(), and I thought replorigin_xact_clear() should stay close with them. But looks like they don=E2=80=99t have to be inline as they are not on hot = paths. So I moved them all to origin.c and only extern them. PFA v9. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --00000000000008922c064826fb0e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
<= br id=3D"m_-8122428074073246736lineBreakAtBeginningOfMessage">
On Jan 10, 2026, at 06:08, Masahiko Sawada <sawada.mshk@gmail.com&g= t; wrote:

On Thu, Jan 8, 2026 at 10:50=E2=80=AFPM Chao Li <li.evan.chao@gmail.co= m> wrote:



On Jan 8, 2026, a= t 17:44, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote:

Hi Ma= sahiko,

Thanks for updating the patches. Here are some more comments= .

On Thu, Jan 8, 2026 at 7:17=E2=80=AFAM Masahiko Sawada <sawada.mshk@gmail.com> wrote:


On Wed, Jan 7, 2026 at 5:15=E2=80=AFPM Chao Li <= ;
li.evan.chao@g= mail.com> wrote:

I've made some cosmetic changes to both = patches (comments and the
commit messages). Please review them and let m= e know what you think.


0001
-------

+/*
+ * Clear s= ession replication origin state.
+ *
+ * replorigin_session_origin is= also cleared if clear_origin is set.
+ */
+void
+replorigin_sessi= on_clear(bool clear_origin)
+{
+ replorigin_session_origin_lsn =3D In= validXLogRecPtr;
+ replorigin_session_origin_timestamp =3D 0;
+ if (c= lear_origin)
+ replorigin_session_origin =3D InvalidRepOriginId;
+}
All the other replorigin_session_* functions deal with
session_rep= lication_state, but this function does not deal with it. I
see that in t= he next patch this function has been renamed as
replorigin_xact_clear() = which seems more appropriate. Do you intend to
squash these two patches = when committing?


Renamed the help function to the same name as i= n 0002.


@@ -1482,8 +1493,8 @@ pg_replication_origin_xact_reset(P= G_FUNCTION_ARGS)
{
replorigin_check_prerequisites(true, false);
- = replorigin_session_origin_lsn =3D InvalidXLogRecPtr;
- replorigin_sessio= n_origin_timestamp =3D 0;
+ /* Clear only origin_lsn and origin_timestam= p */
+ replorigin_session_clear(false);

The comment can explain w= hy we are not clearing
replorigin_session_origin here. Something like &q= uot;This function is
cancel the effects of pg_replication_origin_xact_se= tup(), which only
sets origin_lsn and origin_timestamp, so we only clear= those two
fields here.".


Updated the comment in 0001.

Next comment does not apply to this patch, but the inconsistency = I am
speaking about becomes apparent now. This function resets the state=
setup by pg_replication_origin_xact_setup(), which checks for
sessio= n_replication_state being non-NULL. So I expected
pg_replication_origin_= xact_reset() also to check for the same
condition or at least Assert it.= Why is it not doing so?


Added the same check in 0002.

0002
-------
- replorigin =3D (replorigin_session_origin !=3D Inval= idRepOriginId &&
- replorigin_session_origin !=3D DoNotReplicate= Id);
+ replorigin =3D (replorigin_xact_state.origin !=3D InvalidRepOrigi= nId &&
+ replorigin_xact_state.origin !=3D DoNotReplicateId);
There's another small deduplication opportunity here. Define funct= ion
replorigin_xact_origin_isvalid() to check these two conditions and u= se
that function here and in other places like
RecordTransactionCommi= tPrepared(). I would go as far as making the
function static inline, and= use it instead of replorigin variable,
whose name is certainly misleadi= ng - it doesn't talk about transaction
at all. With static inline th= ere, optimizer may be able to eliminate
the multiple function call overh= ead.


Good point. Added replorigin_xact_origin_isvalid() in 0002 = as you suggested.


/*
* Record commit timestamp. The value com= es from plain commit timestamp
* if replorigin is not enabled, or replor= igin already set a value for us
- * in replorigin_session_origin_timesta= mp otherwise.
+ * in replorigin_xact_state.origin_timestamp otherwise.
suggestion "Record commit timestamp. Use one in replorigin_xact_= state
if set, otherwise use plain commit timestamp.". This reads be= tter and
is closer to the code.". If you agree, please change other= similar
comments too.


Agreed. Updated the comment in both pl= aces.


@@ -5928,12 +5928,12 @@ XactLogCommitRecord(TimestampTz co= mmit_time,
}
/* dump transaction origin information */
- if (replo= rigin_session_origin !=3D InvalidRepOriginId)
+ if (replorigin_xact_stat= e.origin !=3D InvalidRepOriginId)
{

* Dump transaction origin inf= ormation. We need this during recovery to
* update the replication origi= n progress.
*/
- if (replorigin_session_origin !=3D InvalidRepOriginI= d)
+ if (replorigin_xact_state.origin !=3D InvalidRepOriginId)
{
<= br>/* followed by the record's origin, if any */
if ((curinsert_flag= s & XLOG_INCLUDE_ORIGIN) &&
- replorigin_session_origin !=3D= InvalidRepOriginId)
+ replorigin_xact_state.origin !=3D InvalidRepOrigi= nId)

Not a change in this patch but the refactoring makes it more vi= sible.
What about the case of replorigin_session_origin =3D=3D DoNotRepl= icateId?
Should there be a comment explaining why it's excluded here= ?


Added a comment to the 3 places.

replorigin_session_set= up(originid, MyLogicalRepWorker->leader_pid);
- replorigin_session_or= igin =3D originid;
+ replorigin_xact_state.origin =3D originid;

r= eplorigin_session_setup() is always followed by
replorigin_xact_state.or= igin assignment. abort/commit handlers set the
other two members. Do we = want to create replorigin_xact_set_origin()
and replorigin_xact_set_lsn_= timestamp() functions to encapsulate these
assignments? Those two will s= erve as counterparts to
replorigin_xact_clear(). Or would that be an ove= rkill?


Actually, when I added the new structure, I had the idea = of adding replorigin_xact_set_origin() and replorigin_xact_set_lsn_timestam= p() as I saw a lot of duplicate code for the assignment. But I hesitated to= do that because I worried people might consider that=E2=80=99s too much.
Given you raised the same idea, let me add the helpers as static inli= ne. We now have 3 static inline helpers, I guess we have no reason to leave= replorigin_xact_clear() alone as external. So I made it static inline as w= ell.


* successfully and that we don't need to do so again. I= n combination with
- * setting up replorigin_session_origin_lsn and repl= origin_session_origin
+ * setting up replorigin_xact_state.origin_lsn an= d replorigin_xact_state.origin

I think just replorigin_xact_state sh= ould suffice for the sake of brevity.


Updated the comment to eli= minate the duplication.


static void
on_exit_clear_state(int c= ode, Datum arg)
{
- replorigin_session_clear(true);
+ replorigin_x= act_clear(true);

The prologue still states clear origin, but it shou= ld mention
transaction state instead.
}


Good catch. Update= d the header comment.

All comments are addressed in v8.

Thank you for updating the patch!

The 0001 patch looks good = to me.

I have some comments on the 0002 patch:
=
Thanks for the review.

- =C2=A0=C2=A0replorigin =3D (replorigin_session_origin !=3D InvalidRepOr= iginId &&
- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0replorigin_session_origin !=3D= DoNotReplicateId);
+ =C2=A0=C2=A0replorigin =3D replorigin_xact_origin_= isvalid();

I'm not sure it's a good refactoring TBH. While i= t can remove some
lines, we still need to check if replorigin_xact_state= .origin !=3D
InvalidRepOriginId at several places. For example,

D= atum
pg_replication_origin_session_is_setup(PG_FUNCTION_ARGS)
{
= =C2=A0=C2=A0=C2=A0replorigin_check_prerequisites(false, false);

=C2= =A0=C2=A0=C2=A0PG_RETURN_BOOL(replorigin_xact_state.origin !=3D InvalidRepO= riginId);
}

and

=C2=A0=C2=A0=C2=A0/*
=C2=A0=C2=A0=C2=A0= =C2=A0* Dump transaction origin information. We need this during recovery t= o
=C2=A0=C2=A0=C2=A0=C2=A0* update the replication origin progress.
= =C2=A0=C2=A0=C2=A0=C2=A0*
=C2=A0=C2=A0=C2=A0=C2=A0* Note that DoNotRepli= cateId is intentionally excluded here.
=C2=A0=C2=A0=C2=A0=C2=A0*/
=C2= =A0=C2=A0=C2=A0if (replorigin_xact_state.origin !=3D InvalidRepOriginId)
The readers might be confused why we cannot use
replorigin_xact_ori= gin_isvalid() here in spite of its function name,
replorigin_xact_origin= _isvalid, sounds quite suitable. The comment
mentions the fact that DoNo= tReplicated is excluded but doesn't mention
why.

Also, even i= f we want this kind of change, it should be implemented in
a separate pa= tch because it's not related to the main idea of
consolidating the r= eplication origin global variables.

Fai= r enough. Let me revert the change related to replorigin_xact_origin_isvali= d.


---
- =C2=A0=C2=A0=C2=A0* Reco= rd commit timestamp.=C2=A0 The value comes from plain commit timestamp
-= =C2=A0=C2=A0=C2=A0* if replorigin is not enabled, or replorigin already se= t a value for us
- =C2=A0=C2=A0=C2=A0* in replorigin_session_origin_time= stamp otherwise.
+ =C2=A0=C2=A0=C2=A0* Record commit timestamp. Use one = in replorigin_xact_state if set,
+ =C2=A0=C2=A0=C2=A0* otherwise use pla= in commit timestamp.

and

- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0* Record commit timestamp.=C2=A0 The value comes from plain commit=
- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* timestamp if there's = no replication origin; otherwise, the
- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0* timestamp was already set in replorigin_session_origin_timest= amp by
- =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* replication.
+ = =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* Record commit timestamp. Use on= e in replorigin_xact_state if set,
+ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0* otherwise use plain commit timestamp.

I think the previou= s comments are clearer, so I'm not sure we need to
change these comm= ents by this patch. Can we just change
replorigin_session_origin_timesta= mp to
replorigin_xact_state.origin_timestamp?

<= /div>
Reverted to the old comments and updated the variable name in the= comments.


---
+ =C2=A0=C2=A0if (= session_replication_state =3D=3D NULL)
+ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0ereport(ERROR,
+ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUI= SITE_STATE),
+ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0errmsg("no replication origin is conf= igured")));

I'm not sure what the original author intended = but given that
pg_replication_origin_xact_reset() just clears the local = state I'm not
sure that we should strictly require the session_repli= cation_state to
be set up nor it improves the behavior. If we raise an e= rror in that
case, it might be more user-friendly but we can live even w= ithout it.


Fair point. I reverted t= hat. If we really want to add the check, let=E2=80=99s do that in a separat= e thread.

---
In origin.h:

+/*=
+ * Clear the per-transaction replication origin state.
+ *
+ * r= eplorigin_session_origin is also cleared if clear_origin is set.
+ */+static inline void
+replorigin_xact_clear(bool clear_origin)
+{
= + =C2=A0=C2=A0replorigin_xact_state.origin_lsn =3D InvalidXLogRecPtr;
+ = =C2=A0=C2=A0replorigin_xact_state.origin_timestamp =3D 0;
+ =C2=A0=C2=A0= if (clear_origin)
+ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0replorigin_xact_= state.origin =3D InvalidRepOriginId;
+}

Why does this function ne= ed to move to origin.h from origin.c?


That=E2=80=99s because, per Ashutosh=E2=80=99s suggestion, I added two s= tatic inline helpers=C2=A0replorigin_xact_set_origin() and=C2=A0replorigin_= xact_set_lsn_timestamp(), and I thought=C2=A0replorigin_xact_clear() should= stay close with them.

But looks like they don=E2= =80=99t have to be inline as they are not on hot paths. So I moved them all= to origin.c and only extern them.

PFA v9.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




--00000000000008922c064826fb0e-- --00000000000008922c064826fb10 Content-Type: application/octet-stream; name="v9-0001-Refactor-replication-origin-state-reset-helpers.patch" Content-Disposition: attachment; filename="v9-0001-Refactor-replication-origin-state-reset-helpers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkahys9c0 RnJvbSBjOTRjNjU5OGY4YjZhNWNhZDM3YTk2MzMxOWQzMTZmNGRlNTBlNzI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQ2hhbyBMaSAoRXZhbikiIDxsaWNAaGlnaGdvLmNvbT4KRGF0 ZTogV2VkLCAyNCBEZWMgMjAyNSAwOToxNzoyNyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjkgMS8y XSBSZWZhY3RvciByZXBsaWNhdGlvbiBvcmlnaW4gc3RhdGUgcmVzZXQgaGVscGVycy4KTUlNRS1W ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCkZhY3RvciBvdXQgY29tbW9uIGxvZ2ljIGZvciBj bGVhcmluZyByZXBsb3JpZ2luX3Nlc3Npb25fKiB2YXJpYWJsZXMKaW50byBhIGRlZGljYXRlZCBo ZWxwZXIgZnVuY3Rpb24sIHJlcGxvcmlnaW5feGFjdF9jbGVhcigpLgoKVGhpcyByZW1vdmVzIGR1 cGxpY2F0ZWQgYXNzaWdubWVudHMgb2YgdGhlc2UgdmFyaWFibGVzIGFjcm9zcyBtdWx0aXBsZQpj YWxsIHNpdGVzLCBhbmQgbWFrZXMgdGhlIGludGVuZGVkIHNjb3BlIG9mIGVhY2ggcmVzZXQgZXhw bGljaXQuCgpBdXRob3I6IENoYW8gTGkgPGxpY0BoaWdoZ28uY29tPgpSZXZpZXdlZC1ieTogTWFz YWhpa28gU2F3YWRhIDxzYXdhZGEubXNoa0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBc2h1dG9z aCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IMOBbHZh cm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vQ0FFb1d4Mj1wWXZmUnRoWEhUelNyT3NmNV9GZnlZNHpKeUs0elYydjRXPXlqVWlq MWNBQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9v cmlnaW4uYyAgICB8IDIxICsrKysrKysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyB8ICA0ICstLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgfCAxNCArKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3JpZ2luLmggICAgICAgICAgICB8ICAyICsrCiA0IGZpbGVzIGNoYW5nZWQs IDI1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDA0YmM3MDRhMzMyLi4wOTYxNjY0MTkwMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMjg3LDYgKzEyODcsMTkg QEAgcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhib29sIGZsdXNoKQogCXJldHVybiBy ZW1vdGVfbHNuOwogfQogCisvKgorICogQ2xlYXIgdGhlIHBlci10cmFuc2FjdGlvbiByZXBsaWNh dGlvbiBvcmlnaW4gc3RhdGUuCisgKgorICogcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiBpcyBh bHNvIGNsZWFyZWQgaWYgY2xlYXJfb3JpZ2luIGlzIHNldC4KKyAqLwordm9pZAorcmVwbG9yaWdp bl94YWN0X2NsZWFyKGJvb2wgY2xlYXJfb3JpZ2luKQoreworCXJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW5fbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSAwOworCWlmIChjbGVhcl9vcmlnaW4pCisJCXJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gPSBJbnZhbGlkUmVwT3JpZ2luSWQ7Cit9CiAKIAogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCkBAIC0xNDEyLDkgKzE0MjUsNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9y ZXNldChQR19GVU5DVElPTl9BUkdTKQogCiAJcmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KCk7CiAK LQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gSW52YWxpZFJlcE9yaWdpbklkOwotCXJlcGxv cmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7Ci0JcmVwbG9yaWdp bl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSAwOworCXJlcGxvcmlnaW5feGFjdF9jbGVhcih0 cnVlKTsKIAogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CkBAIC0xNDgyLDggKzE0OTMsOCBAQCBwZ19y ZXBsaWNhdGlvbl9vcmlnaW5feGFjdF9yZXNldChQR19GVU5DVElPTl9BUkdTKQogewogCXJlcGxv cmlnaW5fY2hlY2tfcHJlcmVxdWlzaXRlcyh0cnVlLCBmYWxzZSk7CiAKLQlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCXJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW5fdGltZXN0YW1wID0gMDsKKwkvKiBEbyBub3QgY2xlYXIgdGhlIHNlc3Npb24gb3Jp Z2luICovCisJcmVwbG9yaWdpbl94YWN0X2NsZWFyKGZhbHNlKTsKIAogCVBHX1JFVFVSTl9WT0lE KCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxl c3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRl eCA2N2U1NzUyMDM4Ni4uNzNhMGQyODM4Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC90YWJsZXN5bmMuYwpAQCAtMzIzLDkgKzMyMyw3IEBAIFByb2Nlc3NTeW5jaW5nVGFi bGVzRm9yU3luYyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQogCQkgKiBUaGlzIGlzIG5lZWRlZCB0 byBhbGxvdyB0aGUgb3JpZ2luIHRvIGJlIGRyb3BwZWQuCiAJCSAqLwogCQlyZXBsb3JpZ2luX3Nl c3Npb25fcmVzZXQoKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IEludmFsaWRSZXBP cmlnaW5JZDsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSAwOworCQlyZXBs b3JpZ2luX3hhY3RfY2xlYXIodHJ1ZSk7CiAKIAkJLyoKIAkJICogRHJvcCB0aGUgdGFibGVzeW5j J3Mgb3JpZ2luIHRyYWNraW5nIGlmIGV4aXN0cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IGFkMjgxZTcwNjliLi5jMWFjZWFiYmRmNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC02MjcsNyArNjI3LDcgQEAgc3RhdGlj IGlubGluZSB2b2lkIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKTsKIHN0YXRp YyBUcmFuc0FwcGx5QWN0aW9uIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNhY3Rp b25JZCB4aWQsCiAJCQkJCQkJCQkJCQkJIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8p OwogCi1zdGF0aWMgdm9pZCByZXBsb3JpZ2luX3Jlc2V0KGludCBjb2RlLCBEYXR1bSBhcmcpOwor c3RhdGljIHZvaWQgb25fZXhpdF9jbGVhcl9zdGF0ZShpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAog LyoKICAqIEZvcm0gdGhlIG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgpAQCAtNTU5 NCw3ICs1NTk0LDcgQEAgc3RhcnRfYXBwbHkoWExvZ1JlY1B0ciBvcmlnaW5fc3RhcnRwb3MpCiAJ CSAqIHRyYW5zYWN0aW9uIGxvc3MgYXMgdGhhdCB0cmFuc2FjdGlvbiB3b24ndCBiZSBzZW50IGFn YWluIGJ5IHRoZQogCQkgKiBzZXJ2ZXIuCiAJCSAqLwotCQlyZXBsb3JpZ2luX3Jlc2V0KDAsIChE YXR1bSkgMCk7CisJCXJlcGxvcmlnaW5feGFjdF9jbGVhcih0cnVlKTsKIAogCQlpZiAoTXlTdWJz Y3JpcHRpb24tPmRpc2FibGVvbmVycikKIAkJCURpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KCk7 CkBAIC01ODY1LDE4ICs1ODY1LDE2IEBAIEluaXRpYWxpemVMb2dSZXBXb3JrZXIodm9pZCkKIAkg KiByZXBsaWNhdGlvbiB3b3JrZXJzIHRoYXQgc2V0IHVwIG9yaWdpbnMgYW5kIGFwcGx5IHJlbW90 ZSB0cmFuc2FjdGlvbnMKIAkgKiBhcmUgcHJvdGVjdGVkLgogCSAqLwotCWJlZm9yZV9zaG1lbV9l eGl0KHJlcGxvcmlnaW5fcmVzZXQsIChEYXR1bSkgMCk7CisJYmVmb3JlX3NobWVtX2V4aXQob25f ZXhpdF9jbGVhcl9zdGF0ZSwgKERhdHVtKSAwKTsKIH0KIAogLyoKLSAqIFJlc2V0IHRoZSBvcmln aW4gc3RhdGUuCisgKiBDYWxsYmFjayBvbiBleGl0IHRvIHJlc2V0IHRoZSBvcmlnaW4gc3RhdGUu CiAgKi8KIHN0YXRpYyB2b2lkCi1yZXBsb3JpZ2luX3Jlc2V0KGludCBjb2RlLCBEYXR1bSBhcmcp Citvbl9leGl0X2NsZWFyX3N0YXRlKGludCBjb2RlLCBEYXR1bSBhcmcpCiB7Ci0JcmVwbG9yaWdp bl9zZXNzaW9uX29yaWdpbiA9IEludmFsaWRSZXBPcmlnaW5JZDsKLQlyZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW5fdGltZXN0YW1wID0gMDsKKwlyZXBsb3JpZ2luX3hhY3RfY2xlYXIodHJ1ZSk7CiB9CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oCmluZGV4IDFkYTc3MzYzOTU1Li4xZWFhYmFjZGUw MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgKQEAgLTY3LDYgKzY3LDggQEAgZXh0ZXJuIHZv aWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJl ZF9ieSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7CiBleHRl cm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wgZmx1c2gp OwogCitleHRlcm4gdm9pZCByZXBsb3JpZ2luX3hhY3RfY2xlYXIoYm9vbCBjbGVhcl9vcmlnaW4p OworCiAvKiBDaGVja3BvaW50L1N0YXJ0dXAgaW50ZWdyYXRpb24gKi8KIGV4dGVybiB2b2lkIENo ZWNrUG9pbnRSZXBsaWNhdGlvbk9yaWdpbih2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBSZXBs aWNhdGlvbk9yaWdpbih2b2lkKTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --00000000000008922c064826fb10 Content-Type: application/octet-stream; name="v9-0002-Consolidate-replication-origin-session-globals-in.patch" Content-Disposition: attachment; filename="v9-0002-Consolidate-replication-origin-session-globals-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkahys9i1 RnJvbSAzZTgzYTdlOTliN2U0ZDVhYmVkNjNkYWM3OTExMmI3OTdiMWQyYTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQ2hhbyBMaSAoRXZhbikiIDxsaWNAaGlnaGdvLmNvbT4KRGF0 ZTogVHVlLCAzMCBEZWMgMjAyNSAxMjo1NTozMSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjkgMi8y XSBDb25zb2xpZGF0ZSByZXBsaWNhdGlvbiBvcmlnaW4gc2Vzc2lvbiBnbG9iYWxzIGludG8gYQog c2luZ2xlIHN0cnVjdC4KTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWlu OyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMgY29t bWl0IG1vdmVzIHRoZSBzZXBhcmF0ZSBnbG9iYWwgdmFyaWFibGVzIGZvciByZXBsaWNhdGlvbiBv cmlnaW4Kc3RhdGUgaW50byBhIHNpbmdsZSBSZXBPcmlnaW5YYWN0U3RhdGUgc3RydWN0LiBUaGlz IGdyb3VwcyBsb2dpY2FsbHkKcmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGltcHJvdmVzIGNvZGUg cmVhZGFiaWxpdHkgYW5kIHNpbXBsaWZpZXMKc3RhdGUgbWFuYWdlbWVudCAoZS5nLiwgcmVzZXR0 aW5nIHRoZSBzdGF0ZSkgYnkgaGFuZGxpbmcgdGhlbSBhcyBhCnVuaXQuCgpBdXRob3I6IENoYW8g TGkgPGxpY0BoaWdoZ28uY29tPgpTdWdnZXN0ZWQtYnk6IMOBbHZhcm8gSGVycmVyYSA8YWx2aGVy cmVAa3VyaWxlbXUuZGUKUmV2aWV3ZWQtYnk6IE1hc2FoaWtvIFNhd2FkYSA8c2F3YWRhLm1zaGtA Z21haWwuY29tPgpSZXZpZXdlZC1ieTogQXNodXRvc2ggQmFwYXQgPGFzaHV0b3NoLmJhcGF0Lm9z c0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FFb1d4Mj1wWXZm UnRoWEhUelNyT3NmNV9GZnlZNHpKeUs0elYydjRXPXlqVWlqMWNBQG1haWwuZ21haWwuY29tCi0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyAgICAgICAgIHwgMzIgKysr KysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAgICAgICAg IHwgNDQgKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n aW5zZXJ0LmMgICAgICAgfCAxMiArKystLQogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlw YXJhbGxlbHdvcmtlci5jIHwgIDYgKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L29yaWdpbi5jICAgICAgfCA0NiArKysrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jICAgfCAgNCArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjggKysrKysrLS0tLS0KIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL29yaWdpbi5oICAgICAgICAgICAgICB8IDE1ICsrKystLQogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogOSBmaWxlcyBjaGFu Z2VkLCAxMTMgaW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3R3b3BoYXNlLmMKaW5kZXggZTUwYWJiMzMxY2MuLjMyOWM2YmJmM2M3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKQEAgLTExNTcsMTMgKzExNTcsMTMgQEAgRW5k UHJlcGFyZShHbG9iYWxUcmFuc2FjdGlvbiBneGFjdCkKIAlBc3NlcnQoaGRyLT5tYWdpYyA9PSBU V09QSEFTRV9NQUdJQyk7CiAJaGRyLT50b3RhbF9sZW4gPSByZWNvcmRzLnRvdGFsX2xlbiArIHNp emVvZihwZ19jcmMzMmMpOwogCi0JcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3Nlc3Npb25fb3Jp Z2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgotCQkJCSAgcmVwbG9yaWdpbl9zZXNzaW9uX29y aWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKKwlyZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5feGFj dF9zdGF0ZS5vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkICYmCisJCQkJICByZXBsb3JpZ2lu X3hhY3Rfc3RhdGUub3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOwogCiAJaWYgKHJlcGxvcmln aW4pCiAJewotCQloZHItPm9yaWdpbl9sc24gPSByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xz bjsKLQkJaGRyLT5vcmlnaW5fdGltZXN0YW1wID0gcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90 aW1lc3RhbXA7CisJCWhkci0+b3JpZ2luX2xzbiA9IHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmln aW5fbHNuOworCQloZHItPm9yaWdpbl90aW1lc3RhbXAgPSByZXBsb3JpZ2luX3hhY3Rfc3RhdGUu b3JpZ2luX3RpbWVzdGFtcDsKIAl9CiAKIAkvKgpAQCAtMTIxMSw3ICsxMjExLDcgQEAgRW5kUHJl cGFyZShHbG9iYWxUcmFuc2FjdGlvbiBneGFjdCkKIAlpZiAocmVwbG9yaWdpbikKIAl7CiAJCS8q IE1vdmUgTFNOcyBmb3J3YXJkIGZvciB0aGlzIHJlcGxpY2F0aW9uIG9yaWdpbiAqLwotCQlyZXBs b3JpZ2luX3Nlc3Npb25fYWR2YW5jZShyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiwKKwkJ cmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbl9s c24sCiAJCQkJCQkJCSAgIGd4YWN0LT5wcmVwYXJlX2VuZF9sc24pOwogCX0KIApAQCAtMjMzMCw4 ICsyMzMwLDggQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXRQcmVwYXJlZChUcmFuc2FjdGlvbklk IHhpZCwKIAkgKiBBcmUgd2UgdXNpbmcgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbnMgZmVhdHVyZT8g IE9yLCBpbiBvdGhlciB3b3JkcywgYXJlCiAJICogd2UgcmVwbGF5aW5nIHJlbW90ZSBhY3Rpb25z PwogCSAqLwotCXJlcGxvcmlnaW4gPSAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJbnZh bGlkUmVwT3JpZ2luSWQgJiYKLQkJCQkgIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gRG9O b3RSZXBsaWNhdGVJZCk7CisJcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3Jp Z2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAgcmVwbG9yaWdpbl94YWN0X3N0YXRl Lm9yaWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKIAogCS8qIExvYWQgdGhlIGluamVjdGlvbiBw b2ludCBiZWZvcmUgZW50ZXJpbmcgdGhlIGNyaXRpY2FsIHNlY3Rpb24gKi8KIAlJTkpFQ1RJT05f UE9JTlRfTE9BRCgiY29tbWl0LWFmdGVyLWRlbGF5LWNoZWNrcG9pbnQiKTsKQEAgLTIzNzYsMjMg KzIzNzYsMjMgQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXRQcmVwYXJlZChUcmFuc2FjdGlvbklk IHhpZCwKIAogCWlmIChyZXBsb3JpZ2luKQogCQkvKiBNb3ZlIExTTnMgZm9yd2FyZCBmb3IgdGhp cyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KLQkJcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVw bG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24sCisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNl KHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW5fbHNuLAogCQkJCQkJCQkgICBYYWN0TGFzdFJl Y0VuZCk7CiAKIAkvKgogCSAqIFJlY29yZCBjb21taXQgdGltZXN0YW1wLiAgVGhlIHZhbHVlIGNv bWVzIGZyb20gcGxhaW4gY29tbWl0IHRpbWVzdGFtcAogCSAqIGlmIHJlcGxvcmlnaW4gaXMgbm90 IGVuYWJsZWQsIG9yIHJlcGxvcmlnaW4gYWxyZWFkeSBzZXQgYSB2YWx1ZSBmb3IgdXMKLQkgKiBp biByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCBvdGhlcndpc2UuCisJICogaW4g cmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbl90aW1lc3RhbXAgb3RoZXJ3aXNlLgogCSAqCiAJ ICogV2UgZG9uJ3QgbmVlZCB0byBXQUwtbG9nIGFueXRoaW5nIGhlcmUsIGFzIHRoZSBjb21taXQg cmVjb3JkIHdyaXR0ZW4KIAkgKiBhYm92ZSBhbHJlYWR5IGNvbnRhaW5zIHRoZSBkYXRhLgogCSAq LwotCWlmICghcmVwbG9yaWdpbiB8fCByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFt cCA9PSAwKQotCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdHRz OworCWlmICghcmVwbG9yaWdpbiB8fCByZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX3RpbWVz dGFtcCA9PSAwKQorCQlyZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX3RpbWVzdGFtcCA9IGNv bW1pdHRzOwogCiAJVHJhbnNhY3Rpb25UcmVlU2V0Q29tbWl0VHNEYXRhKHhpZCwgbmNoaWxkcmVu LCBjaGlsZHJlbiwKLQkJCQkJCQkJICAgcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3Rh bXAsCi0JCQkJCQkJCSAgIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4pOworCQkJCQkJCQkgICBy ZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX3RpbWVzdGFtcCwKKwkJCQkJCQkJICAgcmVwbG9y aWdpbl94YWN0X3N0YXRlLm9yaWdpbik7CiAKIAkvKgogCSAqIFdlIGRvbid0IGN1cnJlbnRseSB0 cnkgdG8gc2xlZXAgYmVmb3JlIGZsdXNoIGhlcmUgLi4uIG5vciBpcyB0aGVyZSBhbnkKQEAgLTI0 NDUsOCArMjQ0NSw4IEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnRQcmVwYXJlZChUcmFuc2FjdGlv bklkIHhpZCwKIAkgKiBBcmUgd2UgdXNpbmcgdGhlIHJlcGxpY2F0aW9uIG9yaWdpbnMgZmVhdHVy ZT8gIE9yLCBpbiBvdGhlciB3b3JkcywgYXJlCiAJICogd2UgcmVwbGF5aW5nIHJlbW90ZSBhY3Rp b25zPwogCSAqLwotCXJlcGxvcmlnaW4gPSAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJ bnZhbGlkUmVwT3JpZ2luSWQgJiYKLQkJCQkgIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0g RG9Ob3RSZXBsaWNhdGVJZCk7CisJcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3hhY3Rfc3RhdGUu b3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAgcmVwbG9yaWdpbl94YWN0X3N0 YXRlLm9yaWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKIAogCS8qCiAJICogQ2F0Y2ggdGhlIHNj ZW5hcmlvIHdoZXJlIHdlIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoCkBAIC0yNDcyLDcgKzI0NzIs NyBAQCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0UHJlcGFyZWQoVHJhbnNhY3Rpb25JZCB4aWQsCiAK IAlpZiAocmVwbG9yaWdpbikKIAkJLyogTW92ZSBMU05zIGZvcndhcmQgZm9yIHRoaXMgcmVwbGlj YXRpb24gb3JpZ2luICovCi0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKHJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW5fbHNuLAorCQlyZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5jZShyZXBsb3Jp Z2luX3hhY3Rfc3RhdGUub3JpZ2luX2xzbiwKIAkJCQkJCQkJICAgWGFjdExhc3RSZWNFbmQpOwog CiAJLyogQWx3YXlzIGZsdXNoLCBzaW5jZSB3ZSdyZSBhYm91dCB0byByZW1vdmUgdGhlIDJQQyBz dGF0ZSBmaWxlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5kZXggYzg1N2UyMzU1MmYu LmM1YzNmMjFjOWE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0xNDEzLDggKzE0 MTMsOCBAQCBSZWNvcmRUcmFuc2FjdGlvbkNvbW1pdCh2b2lkKQogCQkgKiBBcmUgd2UgdXNpbmcg dGhlIHJlcGxpY2F0aW9uIG9yaWdpbnMgZmVhdHVyZT8gIE9yLCBpbiBvdGhlciB3b3JkcywKIAkJ ICogYXJlIHdlIHJlcGxheWluZyByZW1vdGUgYWN0aW9ucz8KIAkJICovCi0JCXJlcGxvcmlnaW4g PSAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQgJiYKLQkJ CQkJICByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOworCQly ZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW4gIT0gSW52YWxpZFJlcE9y aWdpbklkICYmCisJCQkJCSAgcmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbiAhPSBEb05vdFJl cGxpY2F0ZUlkKTsKIAogCQkvKgogCQkgKiBNYXJrIG91cnNlbHZlcyBhcyB3aXRoaW4gb3VyICJj b21taXQgY3JpdGljYWwgc2VjdGlvbiIuICBUaGlzCkBAIC0xNDYyLDI1ICsxNDYyLDI1IEBAIFJl Y29yZFRyYW5zYWN0aW9uQ29tbWl0KHZvaWQpCiAKIAkJaWYgKHJlcGxvcmlnaW4pCiAJCQkvKiBN b3ZlIExTTnMgZm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KLQkJCXJlcGxv cmlnaW5fc2Vzc2lvbl9hZHZhbmNlKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuLAorCQkJ cmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbl9s c24sCiAJCQkJCQkJCQkgICBYYWN0TGFzdFJlY0VuZCk7CiAKIAkJLyoKIAkJICogUmVjb3JkIGNv bW1pdCB0aW1lc3RhbXAuICBUaGUgdmFsdWUgY29tZXMgZnJvbSBwbGFpbiBjb21taXQKIAkJICog dGltZXN0YW1wIGlmIHRoZXJlJ3Mgbm8gcmVwbGljYXRpb24gb3JpZ2luOyBvdGhlcndpc2UsIHRo ZQotCQkgKiB0aW1lc3RhbXAgd2FzIGFscmVhZHkgc2V0IGluIHJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW5fdGltZXN0YW1wIGJ5Ci0JCSAqIHJlcGxpY2F0aW9uLgorCQkgKiB0aW1lc3RhbXAgd2Fz IGFscmVhZHkgc2V0IGluIHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW5fdGltZXN0YW1wCisJ CSAqIGJ5IHJlcGxpY2F0aW9uLgogCQkgKgogCQkgKiBXZSBkb24ndCBuZWVkIHRvIFdBTC1sb2cg YW55dGhpbmcgaGVyZSwgYXMgdGhlIGNvbW1pdCByZWNvcmQKIAkJICogd3JpdHRlbiBhYm92ZSBh bHJlYWR5IGNvbnRhaW5zIHRoZSBkYXRhLgogCQkgKi8KIAotCQlpZiAoIXJlcGxvcmlnaW4gfHwg cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPT0gMCkKLQkJCXJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uU3RvcFRpbWVz dGFtcCgpOworCQlpZiAoIXJlcGxvcmlnaW4gfHwgcmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdp bl90aW1lc3RhbXAgPT0gMCkKKwkJCXJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW5fdGltZXN0 YW1wID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uU3RvcFRpbWVzdGFtcCgpOwogCiAJCVRyYW5zYWN0 aW9uVHJlZVNldENvbW1pdFRzRGF0YSh4aWQsIG5jaGlsZHJlbiwgY2hpbGRyZW4sCi0JCQkJCQkJ CQkgICByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCwKLQkJCQkJCQkJCSAgIHJl cGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4pOworCQkJCQkJCQkJICAgcmVwbG9yaWdpbl94YWN0X3N0 YXRlLm9yaWdpbl90aW1lc3RhbXAsCisJCQkJCQkJCQkgICByZXBsb3JpZ2luX3hhY3Rfc3RhdGUu b3JpZ2luKTsKIAl9CiAKIAkvKgpAQCAtMTgxMCw4ICsxODEwLDggQEAgUmVjb3JkVHJhbnNhY3Rp b25BYm9ydChib29sIGlzU3ViWGFjdCkKIAkgKiBBcmUgd2UgdXNpbmcgdGhlIHJlcGxpY2F0aW9u IG9yaWdpbnMgZmVhdHVyZT8gIE9yLCBpbiBvdGhlciB3b3JkcywgYXJlCiAJICogd2UgcmVwbGF5 aW5nIHJlbW90ZSBhY3Rpb25zPwogCSAqLwotCXJlcGxvcmlnaW4gPSAocmVwbG9yaWdpbl9zZXNz aW9uX29yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQgJiYKLQkJCQkgIHJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW4gIT0gRG9Ob3RSZXBsaWNhdGVJZCk7CisJcmVwbG9yaWdpbiA9IChyZXBsb3Jp Z2luX3hhY3Rfc3RhdGUub3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAgcmVw bG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKIAogCS8qIEZl dGNoIHRoZSBkYXRhIHdlIG5lZWQgZm9yIHRoZSBhYm9ydCByZWNvcmQgKi8KIAlucmVscyA9IHNt Z3JHZXRQZW5kaW5nRGVsZXRlcyhmYWxzZSwgJnJlbHMpOwpAQCAtMTgzOCw3ICsxODM4LDcgQEAg UmVjb3JkVHJhbnNhY3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkKIAogCWlmIChyZXBsb3JpZ2lu KQogCQkvKiBNb3ZlIExTTnMgZm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8K LQkJcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9s c24sCisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5v cmlnaW5fbHNuLAogCQkJCQkJCQkgICBYYWN0TGFzdFJlY0VuZCk7CiAKIAkvKgpAQCAtNTkyNywx MyArNTkyNywxNyBAQCBYYWN0TG9nQ29tbWl0UmVjb3JkKFRpbWVzdGFtcFR6IGNvbW1pdF90aW1l LAogCQkJeGxfeGluZm8ueGluZm8gfD0gWEFDVF9YSU5GT19IQVNfR0lEOwogCX0KIAotCS8qIGR1 bXAgdHJhbnNhY3Rpb24gb3JpZ2luIGluZm9ybWF0aW9uICovCi0JaWYgKHJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkKQorCS8qCisJICogRHVtcCB0cmFuc2Fj dGlvbiBvcmlnaW4gaW5mb3JtYXRpb24KKwkgKgorCSAqIE5vdGUgdGhhdCBEb05vdFJlcGxpY2F0 ZUlkIGlzIGludGVudGlvbmFsbHkgZXhjbHVkZWQgaGVyZS4KKwkgKi8KKwlpZiAocmVwbG9yaWdp bl94YWN0X3N0YXRlLm9yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQpCiAJewogCQl4bF94aW5m by54aW5mbyB8PSBYQUNUX1hJTkZPX0hBU19PUklHSU47CiAKLQkJeGxfb3JpZ2luLm9yaWdpbl9s c24gPSByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbjsKLQkJeGxfb3JpZ2luLm9yaWdpbl90 aW1lc3RhbXAgPSByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcDsKKwkJeGxfb3Jp Z2luLm9yaWdpbl9sc24gPSByZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX2xzbjsKKwkJeGxf b3JpZ2luLm9yaWdpbl90aW1lc3RhbXAgPSByZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX3Rp bWVzdGFtcDsKIAl9CiAKIAlpZiAoeGxfeGluZm8ueGluZm8gIT0gMCkKQEAgLTYwODAsMTMgKzYw ODQsMTUgQEAgWGFjdExvZ0Fib3J0UmVjb3JkKFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCiAJLyoK IAkgKiBEdW1wIHRyYW5zYWN0aW9uIG9yaWdpbiBpbmZvcm1hdGlvbi4gV2UgbmVlZCB0aGlzIGR1 cmluZyByZWNvdmVyeSB0bwogCSAqIHVwZGF0ZSB0aGUgcmVwbGljYXRpb24gb3JpZ2luIHByb2dy ZXNzLgorCSAqCisJICogTm90ZSB0aGF0IERvTm90UmVwbGljYXRlSWQgaXMgaW50ZW50aW9uYWxs eSBleGNsdWRlZCBoZXJlLgogCSAqLwotCWlmIChyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9 IEludmFsaWRSZXBPcmlnaW5JZCkKKwlpZiAocmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbiAh PSBJbnZhbGlkUmVwT3JpZ2luSWQpCiAJewogCQl4bF94aW5mby54aW5mbyB8PSBYQUNUX1hJTkZP X0hBU19PUklHSU47CiAKLQkJeGxfb3JpZ2luLm9yaWdpbl9sc24gPSByZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luX2xzbjsKLQkJeGxfb3JpZ2luLm9yaWdpbl90aW1lc3RhbXAgPSByZXBsb3JpZ2lu X3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcDsKKwkJeGxfb3JpZ2luLm9yaWdpbl9sc24gPSByZXBs b3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX2xzbjsKKwkJeGxfb3JpZ2luLm9yaWdpbl90aW1lc3Rh bXAgPSByZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luX3RpbWVzdGFtcDsKIAl9CiAKIAlpZiAo eGxfeGluZm8ueGluZm8gIT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQu YwppbmRleCA5MmM0OGU3NjhjMy4uNjQ1MzRlNDUyMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9naW5zZXJ0LmMKQEAgLTg1OSwxMyArODU5LDE3IEBAIFhMb2dSZWNvcmRBc3NlbWJs ZShSbWdySWQgcm1pZCwgdWludDggaW5mbywKIAkJc2NyYXRjaCArPSBzaXplb2YoQmxvY2tOdW1i ZXIpOwogCX0KIAotCS8qIGZvbGxvd2VkIGJ5IHRoZSByZWNvcmQncyBvcmlnaW4sIGlmIGFueSAq LworCS8qCisJICogZm9sbG93ZWQgYnkgdGhlIHJlY29yZCdzIG9yaWdpbiwgaWYgYW55CisJICoK KwkgKiBEb05vdFJlcGxpY2F0ZUlkIGlzIGludGVudGlvbmFsbHkgZXhjbHVkZWQgaGVyZQorCSAq LwogCWlmICgoY3VyaW5zZXJ0X2ZsYWdzICYgWExPR19JTkNMVURFX09SSUdJTikgJiYKLQkJcmVw bG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQpCisJCXJlcGxvcmln aW5feGFjdF9zdGF0ZS5vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkKQogCXsKIAkJKihzY3Jh dGNoKyspID0gKGNoYXIpIFhMUl9CTE9DS19JRF9PUklHSU47Ci0JCW1lbWNweShzY3JhdGNoLCAm cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiwgc2l6ZW9mKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmln aW4pKTsKLQkJc2NyYXRjaCArPSBzaXplb2YocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbik7CisJ CW1lbWNweShzY3JhdGNoLCAmcmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbiwgc2l6ZW9mKHJl cGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW4pKTsKKwkJc2NyYXRjaCArPSBzaXplb2YocmVwbG9y aWdpbl94YWN0X3N0YXRlLm9yaWdpbik7CiAJfQogCiAJLyogZm9sbG93ZWQgYnkgdG9wbGV2ZWwg WElELCBpZiBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiBwcmV2aW91cyByZWNvcmQgKi8KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtl ci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2Vy LmMKaW5kZXggNWViZDIzNTNmZWQuLjIzMmYwNDQ3YjMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpAQCAtOTYyLDcg Kzk2Miw3IEBAIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCSAqIG9y aWdpbiB3aGljaCB3YXMgYWxyZWFkeSBhY3F1aXJlZCBieSBpdHMgbGVhZGVyIHByb2Nlc3MuCiAJ ICovCiAJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCBNeUxvZ2ljYWxSZXBXb3Jr ZXItPmxlYWRlcl9waWQpOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsK KwlyZXBsb3JpZ2luX3hhY3Rfc2V0X29yaWdpbihvcmlnaW5pZCk7CiAJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAKIAkvKgpAQCAtMTQzMCw4ICsxNDMwLDggQEAgcGFfc3RyZWFtX2Fib3J0 KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEpCiAJICogVXBkYXRlIG9yaWdp biBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9u CiAJICogaW4gY2FzZSBvZiBjcmFzaC4KIAkgKi8KLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X2xzbiA9IGFib3J0X2RhdGEtPmFib3J0X2xzbjsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X3RpbWVzdGFtcCA9IGFib3J0X2RhdGEtPmFib3J0X3RpbWU7CisJcmVwbG9yaWdpbl94YWN0X3Nl dF9sc25fdGltZXN0YW1wKGFib3J0X2RhdGEtPmFib3J0X2xzbiwKKwkJCQkJCQkJCSAgYWJvcnRf ZGF0YS0+YWJvcnRfdGltZSk7CiAKIAkvKgogCSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNh bWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0b3BsZXZlbCB4YWN0LCBzbwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggMDk2MTY2NDE5MDMuLjFkY2MyMGIwMGRi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKQEAgLTE1OSwxMCAr MTU5LDEyIEBAIHR5cGVkZWYgc3RydWN0IFJlcGxpY2F0aW9uU3RhdGVDdGwKIAlSZXBsaWNhdGlv blN0YXRlIHN0YXRlc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBSZXBsaWNhdGlvblN0YXRl Q3RsOwogCi0vKiBleHRlcm5hbCB2YXJpYWJsZXMgKi8KLVJlcE9yaWdpbklkIHJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW4gPSBJbnZhbGlkUmVwT3JpZ2luSWQ7IC8qIGFzc3VtZWQgaWRlbnRpdHkg Ki8KLVhMb2dSZWNQdHIJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBJbnZhbGlkWExv Z1JlY1B0cjsKLVRpbWVzdGFtcFR6IHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1w ID0gMDsKKy8qIEdsb2JhbCB2YXJpYWJsZSBmb3IgcGVyLXRyYW5zYWN0aW9uIHJlcGxpY2F0aW9u IG9yaWdpbiBzdGF0ZSAqLworUmVwT3JpZ2luWGFjdFN0YXRlIHJlcGxvcmlnaW5feGFjdF9zdGF0 ZSA9IHsKKwkub3JpZ2luID0gSW52YWxpZFJlcE9yaWdpbklkLAkvKiBhc3N1bWVkIGlkZW50aXR5 ICovCisJLm9yaWdpbl9sc24gPSBJbnZhbGlkWExvZ1JlY1B0ciwKKwkub3JpZ2luX3RpbWVzdGFt cCA9IDAKK307CiAKIC8qCiAgKiBCYXNlIGFkZHJlc3MgaW50byBhIHNoYXJlZCBtZW1vcnkgYXJy YXkgb2YgcmVwbGljYXRpb24gc3RhdGVzIG9mIHNpemUKQEAgLTg5Niw3ICs4OTgsNyBAQCByZXBs b3JpZ2luX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAgKiBUZWxsIHRoZSByZXBsaWNh dGlvbiBvcmlnaW4gcHJvZ3Jlc3MgbWFjaGluZXJ5IHRoYXQgYSBjb21taXQgZnJvbSAnbm9kZScK ICAqIHRoYXQgb3JpZ2luYXRlZCBhdCB0aGUgTFNOIHJlbW90ZV9jb21taXQgb24gdGhlIHJlbW90 ZSBub2RlIHdhcyByZXBsYXllZAogICogc3VjY2Vzc2Z1bGx5IGFuZCB0aGF0IHdlIGRvbid0IG5l ZWQgdG8gZG8gc28gYWdhaW4uIEluIGNvbWJpbmF0aW9uIHdpdGgKLSAqIHNldHRpbmcgdXAgcmVw bG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gYW5kIHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4K KyAqIHNldHRpbmcgdXAgcmVwbG9yaWdpbl94YWN0X3N0YXRlIHsub3JpZ2luX2xzbiwgLm9yaWdp bl90aW1lc3RhbXB9CiAgKiB0aGF0IGVuc3VyZXMgd2Ugd29uJ3QgbG9zZSBrbm93bGVkZ2UgYWJv dXQgdGhhdCBhZnRlciBhIGNyYXNoIGlmIHRoZQogICogdHJhbnNhY3Rpb24gaGFkIGEgcGVyc2lz dGVudCBlZmZlY3QgKHRoaW5rIG9mIGFzeW5jaHJvbm91cyBjb21taXRzKS4KICAqCkBAIC0xMjg3 LDYgKzEyODksMjYgQEAgcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhib29sIGZsdXNo KQogCXJldHVybiByZW1vdGVfbHNuOwogfQogCisvKgorICogU2V0IHRoZSBwZXItdHJhbnNhY3Rp b24gcmVwbGljYXRpb24gb3JpZ2luIHN0YXRlLgorICovCit2b2lkCityZXBsb3JpZ2luX3hhY3Rf c2V0X29yaWdpbihSZXBPcmlnaW5JZCBvcmlnaW4pCit7CisJcmVwbG9yaWdpbl94YWN0X3N0YXRl Lm9yaWdpbiA9IG9yaWdpbjsKK30KKworLyoKKyAqIFNldCB0aGUgcGVyLXRyYW5zYWN0aW9uIHJl cGxpY2F0aW9uIG9yaWdpbiBMU04gYW5kIHRpbWVzdGFtcC4KKyAqLwordm9pZAorcmVwbG9yaWdp bl94YWN0X3NldF9sc25fdGltZXN0YW1wKFhMb2dSZWNQdHIgb3JpZ2luX2xzbiwKKwkJCQkJCQkJ ICBUaW1lc3RhbXBUeiBvcmlnaW5fdGltZXN0YW1wKQoreworCXJlcGxvcmlnaW5feGFjdF9zdGF0 ZS5vcmlnaW5fbHNuID0gb3JpZ2luX2xzbjsKKwlyZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2lu X3RpbWVzdGFtcCA9IG9yaWdpbl90aW1lc3RhbXA7Cit9CisKIC8qCiAgKiBDbGVhciB0aGUgcGVy LXRyYW5zYWN0aW9uIHJlcGxpY2F0aW9uIG9yaWdpbiBzdGF0ZS4KICAqCkBAIC0xMjk1LDEzICsx MzE3LDEyIEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoYm9vbCBmbHVzaCkKIHZv aWQKIHJlcGxvcmlnaW5feGFjdF9jbGVhcihib29sIGNsZWFyX29yaWdpbikKIHsKLQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCXJlcGxvcmlnaW5f c2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gMDsKKwlyZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3Jp Z2luX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCXJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmln aW5fdGltZXN0YW1wID0gMDsKIAlpZiAoY2xlYXJfb3JpZ2luKQotCQlyZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luID0gSW52YWxpZFJlcE9yaWdpbklkOworCQlyZXBsb3JpZ2luX3hhY3Rfc3RhdGUu b3JpZ2luID0gSW52YWxpZFJlcE9yaWdpbklkOwogfQogCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICogU1FMIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHJlcGxpY2F0aW9uIG9yaWdpbi4K ICAqCkBAIC0xNDA4LDcgKzE0MjksNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9z ZXR1cChQR19GVU5DVElPTl9BUkdTKQogCXBpZCA9IFBHX0dFVEFSR19JTlQzMigxKTsKIAlyZXBs b3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luLCBwaWQpOwogCi0JcmVwbG9yaWdpbl9zZXNzaW9u X29yaWdpbiA9IG9yaWdpbjsKKwlyZXBsb3JpZ2luX3hhY3Rfc2V0X29yaWdpbihvcmlnaW4pOwog CiAJcGZyZWUobmFtZSk7CiAKQEAgLTE0MzgsNyArMTQ1OSw3IEBAIHBnX3JlcGxpY2F0aW9uX29y aWdpbl9zZXNzaW9uX2lzX3NldHVwKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJcmVwbG9yaWdpbl9j aGVja19wcmVyZXF1aXNpdGVzKGZhbHNlLCBmYWxzZSk7CiAKLQlQR19SRVRVUk5fQk9PTChyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCk7CisJUEdfUkVUVVJO X0JPT0wocmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQp OwogfQogCiAKQEAgLTE0ODIsOCArMTUwMyw3IEBAIHBnX3JlcGxpY2F0aW9uX29yaWdpbl94YWN0 X3NldHVwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJIGVycm1zZygibm8gcmVwbGljYXRpb24gb3Jp Z2luIGlzIGNvbmZpZ3VyZWQiKSkpOwogCi0JcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24g PSBsb2NhdGlvbjsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IFBHX0dF VEFSR19USU1FU1RBTVBUWigxKTsKKwlyZXBsb3JpZ2luX3hhY3Rfc2V0X2xzbl90aW1lc3RhbXAo bG9jYXRpb24sIFBHX0dFVEFSR19USU1FU1RBTVBUWigxKSk7CiAKIAlQR19SRVRVUk5fVk9JRCgp OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXgg NzNhMGQyODM4Y2YuLmUzNDM3N2E1NTljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMKQEAgLTEzMTgsNyArMTMxOCw3IEBAIExvZ2ljYWxSZXBTeW5jVGFi bGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJCSAqLwogCQlvcmlnaW5pZCA9 IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1lLCBmYWxzZSk7CiAJCXJlcGxvcmlnaW5fc2Vz c2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBv cmlnaW5pZDsKKwkJcmVwbG9yaWdpbl94YWN0X3NldF9vcmlnaW4ob3JpZ2luaWQpOwogCQkqb3Jp Z2luX3N0YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAK IAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC0xNDA1LDcgKzE0MDUsNyBAQCBMb2dp Y2FsUmVwU3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCVVubG9j a1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CiAKIAlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwotCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKKwlyZXBsb3JpZ2luX3hhY3Rfc2V0X29yaWdp bihvcmlnaW5pZCk7CiAKIAkvKgogCSAqIElmIHRoZSB1c2VyIGRpZCBub3Qgb3B0IHRvIHJ1biBh cyB0aGUgb3duZXIgb2YgdGhlIHN1YnNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKaW5kZXggYzFhY2VhYmJkZjUuLmQ1ZTIzODU0MjUwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTEzMTgsOCArMTMxOCw3IEBAIGFw cGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgKnBy ZXBhcmVfZGF0YSkKIAkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0 cmVhbWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KIAkgKiBpbiBjYXNlIG9mIGNyYXNoLgogCSAq LwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gcHJlcGFyZV9kYXRhLT5lbmRfbHNu OwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gcHJlcGFyZV9kYXRhLT5w cmVwYXJlX3RpbWU7CisJcmVwbG9yaWdpbl94YWN0X3NldF9sc25fdGltZXN0YW1wKHByZXBhcmVf ZGF0YS0+ZW5kX2xzbiwgcHJlcGFyZV9kYXRhLT5wcmVwYXJlX3RpbWUpOwogCiAJUHJlcGFyZVRy YW5zYWN0aW9uQmxvY2soZ2lkKTsKIH0KQEAgLTE0MjEsOCArMTQyMCw3IEBAIGFwcGx5X2hhbmRs ZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUg c28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlvbgogCSAqIGlu IGNhc2Ugb2YgY3Jhc2guCiAJICovCi0JcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBw cmVwYXJlX2RhdGEuZW5kX2xzbjsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFt cCA9IHByZXBhcmVfZGF0YS5jb21taXRfdGltZTsKKwlyZXBsb3JpZ2luX3hhY3Rfc2V0X2xzbl90 aW1lc3RhbXAocHJlcGFyZV9kYXRhLmVuZF9sc24sIHByZXBhcmVfZGF0YS5jb21taXRfdGltZSk7 CiAKIAlGaW5pc2hQcmVwYXJlZFRyYW5zYWN0aW9uKGdpZCwgdHJ1ZSk7CiAJZW5kX3JlcGxpY2F0 aW9uX3N0ZXAoKTsKQEAgLTE0NzksOCArMTQ3Nyw4IEBAIGFwcGx5X2hhbmRsZV9yb2xsYmFja19w cmVwYXJlZChTdHJpbmdJbmZvIHMpCiAJCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2UgY2Fu IHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdAogCQkgKiBwb3NpdGlvbiBpbiBjYXNlIG9m IGNyYXNoLgogCQkgKi8KLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSByb2xsYmFj a19kYXRhLnJvbGxiYWNrX2VuZF9sc247Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGlt ZXN0YW1wID0gcm9sbGJhY2tfZGF0YS5yb2xsYmFja190aW1lOworCQlyZXBsb3JpZ2luX3hhY3Rf c2V0X2xzbl90aW1lc3RhbXAocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuLAorCQkJCQkJ CQkJCSAgcm9sbGJhY2tfZGF0YS5yb2xsYmFja190aW1lKTsKIAogCQkvKiBUaGVyZSBpcyBubyB0 cmFuc2FjdGlvbiB3aGVuIEFCT1JUL1JPTExCQUNLIFBSRVBBUkVEIGlzIGNhbGxlZCAqLwogCQli ZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CkBAIC0yNTI2LDggKzI1MjQsOCBAQCBhcHBseV9oYW5k bGVfY29tbWl0X2ludGVybmFsKExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkKIAkJ ICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBj b3JyZWN0CiAJCSAqIHBvc2l0aW9uIGluIGNhc2Ugb2YgY3Jhc2guCiAJCSAqLwotCQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IGNvbW1pdF9kYXRhLT5lbmRfbHNuOwotCQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdF9kYXRhLT5jb21taXR0aW1lOwor CQlyZXBsb3JpZ2luX3hhY3Rfc2V0X2xzbl90aW1lc3RhbXAoY29tbWl0X2RhdGEtPmVuZF9sc24s CisJCQkJCQkJCQkJICBjb21taXRfZGF0YS0+Y29tbWl0dGltZSk7CiAKIAkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CiAKQEAgLTI5NDAsNyArMjkzOCw3IEBAIGFwcGx5X2hhbmRsZV91cGRh dGVfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJICovCiAJCWlmIChHZXRU dXBsZVRyYW5zYWN0aW9uSW5mbyhsb2NhbHNsb3QsICZjb25mbGljdHR1cGxlLnhtaW4sCiAJCQkJ CQkJCQkmY29uZmxpY3R0dXBsZS5vcmlnaW4sICZjb25mbGljdHR1cGxlLnRzKSAmJgotCQkJY29u ZmxpY3R0dXBsZS5vcmlnaW4gIT0gcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbikKKwkJCWNvbmZs aWN0dHVwbGUub3JpZ2luICE9IHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW4pCiAJCXsKIAkJ CVR1cGxlVGFibGVTbG90ICpuZXdzbG90OwogCkBAIC0yOTgyLDcgKzI5ODAsNyBAQCBhcHBseV9o YW5kbGVfdXBkYXRlX2ludGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJCQkJ CQkgICAmY29uZmxpY3R0dXBsZS54bWluLAogCQkJCQkJCQkJICAgJmNvbmZsaWN0dHVwbGUub3Jp Z2luLAogCQkJCQkJCQkJICAgJmNvbmZsaWN0dHVwbGUudHMpICYmCi0JCQljb25mbGljdHR1cGxl Lm9yaWdpbiAhPSByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luKQorCQkJY29uZmxpY3R0dXBsZS5v cmlnaW4gIT0gcmVwbG9yaWdpbl94YWN0X3N0YXRlLm9yaWdpbikKIAkJCXR5cGUgPSBDVF9VUERB VEVfREVMRVRFRDsKIAkJZWxzZQogCQkJdHlwZSA9IENUX1VQREFURV9NSVNTSU5HOwpAQCAtMzEz NSw3ICszMTMzLDcgQEAgYXBwbHlfaGFuZGxlX2RlbGV0ZV9pbnRlcm5hbChBcHBseUV4ZWN1dGlv bkRhdGEgKmVkYXRhLAogCQkgKi8KIAkJaWYgKEdldFR1cGxlVHJhbnNhY3Rpb25JbmZvKGxvY2Fs c2xvdCwgJmNvbmZsaWN0dHVwbGUueG1pbiwKIAkJCQkJCQkJCSZjb25mbGljdHR1cGxlLm9yaWdp biwgJmNvbmZsaWN0dHVwbGUudHMpICYmCi0JCQljb25mbGljdHR1cGxlLm9yaWdpbiAhPSByZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luKQorCQkJY29uZmxpY3R0dXBsZS5vcmlnaW4gIT0gcmVwbG9y aWdpbl94YWN0X3N0YXRlLm9yaWdpbikKIAkJewogCQkJY29uZmxpY3R0dXBsZS5zbG90ID0gbG9j YWxzbG90OwogCQkJUmVwb3J0QXBwbHlDb25mbGljdChlc3RhdGUsIHJlbGluZm8sIExPRywgQ1Rf REVMRVRFX09SSUdJTl9ESUZGRVJTLApAQCAtMzQ3Nyw3ICszNDc1LDcgQEAgYXBwbHlfaGFuZGxl X3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJCQkJCQkJCQkJCSAg ICZjb25mbGljdHR1cGxlLnhtaW4sCiAJCQkJCQkJCQkJCQkgICAmY29uZmxpY3R0dXBsZS5vcmln aW4sCiAJCQkJCQkJCQkJCQkgICAmY29uZmxpY3R0dXBsZS50cykgJiYKLQkJCQkJCWNvbmZsaWN0 dHVwbGUub3JpZ2luICE9IHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4pCisJCQkJCQljb25mbGlj dHR1cGxlLm9yaWdpbiAhPSByZXBsb3JpZ2luX3hhY3Rfc3RhdGUub3JpZ2luKQogCQkJCQkJdHlw ZSA9IENUX1VQREFURV9ERUxFVEVEOwogCQkJCQllbHNlCiAJCQkJCQl0eXBlID0gQ1RfVVBEQVRF X01JU1NJTkc7CkBAIC0zNTAzLDcgKzM1MDEsNyBAQCBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGlu ZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJCWlmIChHZXRUdXBsZVRyYW5zYWN0aW9u SW5mbyhsb2NhbHNsb3QsICZjb25mbGljdHR1cGxlLnhtaW4sCiAJCQkJCQkJCQkJCSZjb25mbGlj dHR1cGxlLm9yaWdpbiwKIAkJCQkJCQkJCQkJJmNvbmZsaWN0dHVwbGUudHMpICYmCi0JCQkJCWNv bmZsaWN0dHVwbGUub3JpZ2luICE9IHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4pCisJCQkJCWNv bmZsaWN0dHVwbGUub3JpZ2luICE9IHJlcGxvcmlnaW5feGFjdF9zdGF0ZS5vcmlnaW4pCiAJCQkJ ewogCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdDsKIApAQCAtNTY1Miw3ICs1NjUwLDcgQEAg cnVuX2FwcGx5X3dvcmtlcih2b2lkKQogCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCW9y aWdpbmlkID0gcmVwbG9yaWdpbl9jcmVhdGUob3JpZ2lubmFtZSk7CiAJcmVwbG9yaWdpbl9zZXNz aW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3Jp Z2luaWQ7CisJcmVwbG9yaWdpbl94YWN0X3NldF9vcmlnaW4ob3JpZ2luaWQpOwogCW9yaWdpbl9z dGFydHBvcyA9IHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCkBAIC01ODY5LDcgKzU4NjcsNyBAQCBJbml0aWFsaXpl TG9nUmVwV29ya2VyKHZvaWQpCiB9CiAKIC8qCi0gKiBDYWxsYmFjayBvbiBleGl0IHRvIHJlc2V0 IHRoZSBvcmlnaW4gc3RhdGUuCisgKiBDYWxsYmFjayBvbiBleGl0IHRvIGNsZWFyIHRyYW5zYWN0 aW9uLWxldmVsIHJlcGxpY2F0aW9uIG9yaWdpbiBzdGF0ZS4KICAqLwogc3RhdGljIHZvaWQKIG9u X2V4aXRfY2xlYXJfc3RhdGUoaW50IGNvZGUsIERhdHVtIGFyZykKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3Jp Z2luLmgKaW5kZXggMWVhYWJhY2RlMDMuLmM5NTM3ODVmNmE0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaApAQCAtNDAsOSArNDAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfcmVwbG9yaWdpbl9k cm9wCiAgKi8KICNkZWZpbmUgTUFYX1JPTkFNRV9MRU4JNTEyCiAKLWV4dGVybiBQR0RMTElNUE9S VCBSZXBPcmlnaW5JZCByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luOwotZXh0ZXJuIFBHRExMSU1Q T1JUIFhMb2dSZWNQdHIgcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc247Ci1leHRlcm4gUEdE TExJTVBPUlQgVGltZXN0YW1wVHogcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXA7 Cit0eXBlZGVmIHN0cnVjdCBSZXBPcmlnaW5YYWN0U3RhdGUKK3sKKwlSZXBPcmlnaW5JZCBvcmln aW47CisJWExvZ1JlY1B0cglvcmlnaW5fbHNuOworCVRpbWVzdGFtcFR6IG9yaWdpbl90aW1lc3Rh bXA7Cit9IFJlcE9yaWdpblhhY3RTdGF0ZTsKKworZXh0ZXJuIFBHRExMSU1QT1JUIFJlcE9yaWdp blhhY3RTdGF0ZSByZXBsb3JpZ2luX3hhY3Rfc3RhdGU7CiAKIC8qIEdVQ3MgKi8KIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgbWF4X2FjdGl2ZV9yZXBsaWNhdGlvbl9vcmlnaW5zOwpAQCAtNjcsNiAr NzIsMTAgQEAgZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklk IG5vZGUsIGludCBhY3F1aXJlZF9ieSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25f cmVzZXQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3By b2dyZXNzKGJvb2wgZmx1c2gpOwogCisvKiBQZXItdHJhbnNhY3Rpb24gcmVwbGljYXRpb24gb3Jp Z2luIHN0YXRlIG1hbmlwdWxhdGlvbiAqLworZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl94YWN0X3Nl dF9vcmlnaW4oUmVwT3JpZ2luSWQgb3JpZ2luKTsKK2V4dGVybiB2b2lkIHJlcGxvcmlnaW5feGFj dF9zZXRfbHNuX3RpbWVzdGFtcChYTG9nUmVjUHRyIG9yaWdpbl9sc24sCisJCQkJCQkJCQkJCSAg VGltZXN0YW1wVHogb3JpZ2luX3RpbWVzdGFtcCk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3hh Y3RfY2xlYXIoYm9vbCBjbGVhcl9vcmlnaW4pOwogCiAvKiBDaGVja3BvaW50L1N0YXJ0dXAgaW50 ZWdyYXRpb24gKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMDllN2YxZDQyMGUuLjk0 YTFkYmVkNDY2IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjU2OSw2ICsyNTY5LDcg QEAgUmVvcmRlckJ1ZmZlclR1cGxlQ2lkS2V5CiBSZW9yZGVyQnVmZmVyVXBkYXRlUHJvZ3Jlc3NU eG5DQgogUmVvcmRlclR1cGxlCiBSZXBPcmlnaW5JZAorUmVwT3JpZ2luWGFjdFN0YXRlCiBSZXBh cmFtZXRlcml6ZUZvcmVpZ25QYXRoQnlDaGlsZF9mdW5jdGlvbgogUmVwbGFjZVZhcnNGcm9tVGFy Z2V0TGlzdF9jb250ZXh0CiBSZXBsYWNlVmFyc05vTWF0Y2hPcHRpb24KLS0gCjIuMzkuNSAoQXBw bGUgR2l0LTE1NCkKCg== --00000000000008922c064826fb10--