<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>188614</bug_id>
          
          <creation_ts>2018-08-15 13:24:17 -0700</creation_ts>
          <short_desc>Templatize CallbackMap, making it possible to have strict CallbackID subtypes</short_desc>
          <delta_ts>2021-11-01 12:50:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1450426</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-08-15 13:24:17 -0700</bug_when>
    <thetext>Templatize CallbackMap, making it possible to have strict CallbackID subtypes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450427</commentid>
    <comment_count>1</comment_count>
      <attachid>347201</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-08-15 13:24:53 -0700</bug_when>
    <thetext>Created attachment 347201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451261</commentid>
    <comment_count>2</comment_count>
      <attachid>347201</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-08-17 16:03:59 -0700</bug_when>
    <thetext>Comment on attachment 347201
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=347201&amp;action=review

&gt; Source/WebKit/Shared/CookieManagerCallbackID.h:32
&gt; +using CookieManagerCallbackID = WebKit::CallbackID;

Ideally we&apos;ll have a whole bunch of these.  Could we put them all in the same file?
Could we make CallbackID a template?

enum class CallbackIDType {
CookieManager,
DrawingArea,
...
}

template&lt;CallbackIDType&gt;
class CallbackID
...

&gt; Source/WebKit/UIProcess/WebCookieManagerProxy.h:58
&gt; -
&gt; +    

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1451309</commentid>
    <comment_count>3</comment_count>
      <attachid>347201</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-08-17 17:58:19 -0700</bug_when>
    <thetext>Comment on attachment 347201
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=347201&amp;action=review

&gt; Source/WebKit/ChangeLog:11
&gt; +        e.g. DrawingAreaProxy&apos;s CallbackMap vs. WebPageProxy&apos;s.

How are you going to make different CallbackIDs? Are you going to inherit classes from CallbackID? Or are you going to make CallbackID a template?  Because having these definitions 

using CookieManagerCallbackID = WebKit::CallbackID;
using DrawingAreaCallbackID = WebKit::CallbackID;

does not make CookieManagerCallbackID and DrawingAreaCallbackID different. They are just aliases for WebKit::CallbackID.

&gt; Source/WebKit/Shared/OptionalCallbackID.h:35
&gt; +template &lt;typename CallbackIDType&gt;
&gt;  class OptionalCallbackID {

Maybe you want to make CallbackID the default type of CallbackIDType:

template &lt;typename CallbackIDType = CallbackID&gt;
class OptionalCallbackID {

So you can say

OptionalCallbackID(m_callbacks.put(...));

Instead of 

OptionalCallbackID&lt;CallbackID&gt;(m_callbacks.put(...));

I know this is unrelated. But I think it will make sense if we make OptionalCallbackID a super class of CallbackID. They share most of the logic but CallbackID is just stricter than OptionalCallbackID.

&gt; Source/WebKit/Shared/OptionalCallbackID.h:39
&gt; -    ALWAYS_INLINE explicit OptionalCallbackID(const CallbackID&amp; otherID)
&gt; +    ALWAYS_INLINE explicit OptionalCallbackID(const CallbackIDType&amp; otherID)

This constructor looks weird to me. If we make OptionalCallbackID a super class of all the CallbackID classes then this can be replaced by the copy constructor. In fact you can delete it and rely on the compiler to generate it for you.

But if you want the constructor to be that way and you are assuming that the input is a sub class of CallbackID, then I would suggest adding this assert:

static_assert(std::is_base_of&lt;CallbackID, CallbackIDType&gt;::value, &quot;The input should be a sub class of CallbackID&quot;);

&gt; Source/WebKit/UIProcess/GenericCallback.h:170
&gt; +template&lt;typename CallbackIDType&gt;
&gt;  class CallbackMap {

default typename:

template&lt;typename CallbackIDType = CallbackID&gt;
class CallbackMap {

&gt; Source/WebKit/UIProcess/GenericCallback.h:172
&gt;      CallbackID put(Ref&lt;CallbackBase&gt;&amp;&amp; callback)

Do we need to change this to return CallbackIDType?

&gt; Source/WebKit/UIProcess/GenericCallback.h:193
&gt; -    CallbackID put(Function&lt;void(T...)&gt;&amp;&amp; function, const ProcessThrottler::BackgroundActivityToken&amp; activityToken)
&gt; +    CallbackIDType put(Function&lt;void(T...)&gt;&amp;&amp; function, const ProcessThrottler::BackgroundActivityToken&amp; activityToken)

This is getting more confusing. This is a template function which takes a callback function with a pack parameter typename. The callback creates a super class of CallbackBase. We are fine with any type of callback but we want the return type to be CallbackIDType.

&gt; Source/WebKit/UIProcess/GenericCallback.h:200
&gt; -    RefPtr&lt;T&gt; take(CallbackID callbackID)
&gt; +    RefPtr&lt;T&gt; take(CallbackIDType callbackID)

Ditto. This is a template function which takes the type of the return value but the input is the template class type. So it seems we are now stricter with the input parameter but we cast the output as the caller wants.

&gt; Source/WebKit/UIProcess/WebCookieManagerProxy.h:112
&gt; +    void didGetHostnamesWithCookies(const Vector&lt;String&gt;&amp;, WebKit::CookieManagerCallbackID);
&gt; +    void didGetHTTPCookieAcceptPolicy(uint32_t policy, WebKit::CookieManagerCallbackID);

Do we need to have the namespace WebKit before CookieManagerCallbackID? I think CookieManagerCallbackID is in WebKit namespace.

&gt; Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:508
&gt; -    m_pendingCallbackIDs.append(static_cast&lt;RemoteLayerTreeTransaction::TransactionCallbackID&gt;(callbackID));
&gt; +    m_pendingCallbackIDs.append(callbackID);

This casting could be removed without your patch. I wonder why we added it in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1458178</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-10 12:24:46 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #3)
&gt; Comment on attachment 347201 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=347201&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; +        e.g. DrawingAreaProxy&apos;s CallbackMap vs. WebPageProxy&apos;s.
&gt; 
&gt; How are you going to make different CallbackIDs? Are you going to inherit
&gt; classes from CallbackID? Or are you going to make CallbackID a template? 
&gt; Because having these definitions 
&gt; 
&gt; using CookieManagerCallbackID = WebKit::CallbackID;
&gt; using DrawingAreaCallbackID = WebKit::CallbackID;
&gt; 
&gt; does not make CookieManagerCallbackID and DrawingAreaCallbackID different.
&gt; They are just aliases for WebKit::CallbackID.

Alex&apos;s suggestion fixes this.

&gt; Maybe you want to make CallbackID the default type of CallbackIDType:
&gt; 
&gt; template &lt;typename CallbackIDType = CallbackID&gt;
&gt; class OptionalCallbackID {
&gt; 
&gt; So you can say
&gt; 
&gt; OptionalCallbackID(m_callbacks.put(...));
&gt; 
&gt; Instead of 
&gt; 
&gt; OptionalCallbackID&lt;CallbackID&gt;(m_callbacks.put(...));

I don&apos;t want that, I want you to suffer just as much if you choose not to create your own type as if you do. Don&apos;t want the bad thing to be easier!

&gt; I know this is unrelated. But I think it will make sense if we make
&gt; OptionalCallbackID a super class of CallbackID. They share most of the logic
&gt; but CallbackID is just stricter than OptionalCallbackID.
&gt; 
&gt; &gt; Source/WebKit/Shared/OptionalCallbackID.h:39
&gt; &gt; -    ALWAYS_INLINE explicit OptionalCallbackID(const CallbackID&amp; otherID)
&gt; &gt; +    ALWAYS_INLINE explicit OptionalCallbackID(const CallbackIDType&amp; otherID)
&gt; 
&gt; This constructor looks weird to me. If we make OptionalCallbackID a super
&gt; class of all the CallbackID classes then this can be replaced by the copy
&gt; constructor. In fact you can delete it and rely on the compiler to generate
&gt; it for you.
&gt; 
&gt; But if you want the constructor to be that way and you are assuming that the
&gt; input is a sub class of CallbackID, then I would suggest adding this assert:
&gt; 
&gt; static_assert(std::is_base_of&lt;CallbackID, CallbackIDType&gt;::value, &quot;The input
&gt; should be a sub class of CallbackID&quot;);

Ehh? This just means &quot;construct me with one of the templatized type instead of any type&quot;. It doesn&apos;t necessarily HAVE to be one of the specific subtypes, because CallbackID is valid for folks who don&apos;t yet have their own type.

&gt; &gt; Source/WebKit/UIProcess/GenericCallback.h:170
&gt; &gt; +template&lt;typename CallbackIDType&gt;
&gt; &gt;  class CallbackMap {
&gt; 
&gt; default typename:

Ditto above.

&gt; template&lt;typename CallbackIDType = CallbackID&gt;
&gt; class CallbackMap {
&gt; 
&gt; &gt; Source/WebKit/UIProcess/GenericCallback.h:172
&gt; &gt;      CallbackID put(Ref&lt;CallbackBase&gt;&amp;&amp; callback)
&gt; 
&gt; Do we need to change this to return CallbackIDType?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/GenericCallback.h:193
&gt; &gt; -    CallbackID put(Function&lt;void(T...)&gt;&amp;&amp; function, const ProcessThrottler::BackgroundActivityToken&amp; activityToken)
&gt; &gt; +    CallbackIDType put(Function&lt;void(T...)&gt;&amp;&amp; function, const ProcessThrottler::BackgroundActivityToken&amp; activityToken)
&gt; 
&gt; This is getting more confusing. This is a template function which takes a
&gt; callback function with a pack parameter typename. The callback creates a
&gt; super class of CallbackBase. We are fine with any type of callback but we
&gt; want the return type to be CallbackIDType.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/GenericCallback.h:200
&gt; &gt; -    RefPtr&lt;T&gt; take(CallbackID callbackID)
&gt; &gt; +    RefPtr&lt;T&gt; take(CallbackIDType callbackID)
&gt; 
&gt; Ditto. This is a template function which takes the type of the return value
&gt; but the input is the template class type. So it seems we are now stricter
&gt; with the input parameter but we cast the output as the caller wants.

Right, this is just about strictening up the CallbackID types, not the callback functions themselves. That would be a different project.

&gt; &gt; Source/WebKit/UIProcess/WebCookieManagerProxy.h:112
&gt; &gt; +    void didGetHostnamesWithCookies(const Vector&lt;String&gt;&amp;, WebKit::CookieManagerCallbackID);
&gt; &gt; +    void didGetHTTPCookieAcceptPolicy(uint32_t policy, WebKit::CookieManagerCallbackID);
&gt; 
&gt; Do we need to have the namespace WebKit before CookieManagerCallbackID? I
&gt; think CookieManagerCallbackID is in WebKit namespace.

Likely not.

&gt; &gt; Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:508
&gt; &gt; -    m_pendingCallbackIDs.append(static_cast&lt;RemoteLayerTreeTransaction::TransactionCallbackID&gt;(callbackID));
&gt; &gt; +    m_pendingCallbackIDs.append(callbackID);
&gt; 
&gt; This casting could be removed without your patch. I wonder why we added it
&gt; in the first place.

Unknown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810801</commentid>
    <comment_count>5</comment_count>
      <attachid>347201</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-01 12:50:54 -0700</bug_when>
    <thetext>Comment on attachment 347201
Patch

This has been requesting review for more than one year.  If this is still needed, please rebase and re-request review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347201</attachid>
            <date>2018-08-15 13:24:53 -0700</date>
            <delta_ts>2021-11-01 12:50:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188614-20180815132453.patch</filename>
            <type>text/plain</type>
            <size>38493</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRlOTZhZjNkNTEwMmNkZjM5
YzNkYTM2Njk4ZDk3NWVkM2UxZDAxODMuLmM2MjdlMTI2YjJmMjNkY2MzODQ3YWQxNWE3YTJjMzgx
ZWJmMWRmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTgtMDgtMTUgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBDYWxs
YmFja01hcCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGhhdmUgc3RyaWN0IENhbGxiYWNrSUQgc3Vi
dHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
ODYxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
IG9yZGVyIHRvIG1ha2UgdGhpbmdzIG1vcmUgY2xlYXIgYW5kIHRvIG1ha2UgaXQgaGFyZGVyIHRv
IG1ha2UgbWlzdGFrZXMsCisgICAgICAgIG1ha2UgQ2FsbGJhY2tNYXAgdGFrZSBhIHRlbXBsYXRl
IHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB3aGljaCBDYWxsYmFja0lECisgICAgICAgIHN1YnR5
cGUgaXQgdmVuZHMgYW5kIGFjY2VwdHMuIFRoaXMgd2F5LCB3ZSBjYW4ndCBtaXggdXAgQ2FsbGJh
Y2tJRHMgZm9yCisgICAgICAgIGUuZy4gRHJhd2luZ0FyZWFQcm94eSdzIENhbGxiYWNrTWFwIHZz
LiBXZWJQYWdlUHJveHkncy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9HZW5lcmljQ2FsbGJhY2su
aDoKKyAgICAgICAgKFdlYktpdDo6Q2FsbGJhY2tNYXA6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6
OkNhbGxiYWNrTWFwOjp0YWtlKToKKyAgICAgICAgVGVtcGxhdGl6ZSBDYWxsYmFja01hcCBvbiB0
aGUgQ2FsbGJhY2tJRCBzdWJ0eXBlIHRoYXQgaXQgY3JlYXRlcyBhbmQgbWFuYWdlcy4KKworICAg
ICAgICAqIFNoYXJlZC9PcHRpb25hbENhbGxiYWNrSUQuaDoKKyAgICAgICAgKFdlYktpdDo6T3B0
aW9uYWxDYWxsYmFja0lEOjpPcHRpb25hbENhbGxiYWNrSUQpOgorICAgICAgICAoV2ViS2l0OjpP
cHRpb25hbENhbGxiYWNrSUQ6OmNhbGxiYWNrSUQpOgorICAgICAgICBUZW1wbGF0aXplIE9wdGlv
bmFsQ2FsbGJhY2tJRCBvbiB0aGUgaW5uZXIgQ2FsbGJhY2tJRCBzdWJ0eXBlIHRoYXQgaXQgb3du
cy4KKworICAgICAgICAqIFNoYXJlZC9DYWxsYmFja0lELmg6CisgICAgICAgIE1ha2UgQ2FsbGJh
Y2tJRCdzIGZyaWVuZHMgdGVtcGxhdGUtaGFwcHkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyOjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
b2tpZU1hbmFnZXJQcm94eTo6ZGlkR2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRpZFNldENvb2tpZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRpZEdldENvb2tpZXMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRpZERlbGV0ZUNvb2tpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk6OnNldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3kpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaDoKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvQ29va2llTWFuYWdlckNhbGxi
YWNrSUQuaDogQWRkZWQuCisgICAgICAgIEFkZCBDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCBhbmQg
YWRvcHQgaXQgdGhyb3VnaG91dCBjb29raWUgY29kZS4KKworICAgICAgICAqIFNoYXJlZC9EcmF3
aW5nQXJlYUluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpjYWxsYmFja0lEcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpzZXRDYWxsYmFja0lEcyk6CisgICAgICAgICogU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjphZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQpOgorICAgICAgICBBZGQgRHJhd2luZ0FyZWFD
YWxsYmFja0lEIGFuZCBhZG9wdCBpdCB0aHJvdWdob3V0IERyYXdpbmdBcmVhLgorICAgICAgICBH
ZXQgcmlkIG9mIHRoZSBuYXN0eSBhbmQgY29uZnVzaW5nIHN0YXRpY19jYXN0IGZyb20gQ2FsbGJh
Y2tJRCB0byBUcmFuc2FjdGlvbkNhbGxiYWNrSUQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRMb2FkRGVj
aXNpb25Gb3JJY29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpkaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorICAgICAgICBTcGVjaWZ5IHRoYXQgV2ViUGFnZShQcm94eSkgdXNlIHRo
ZSBDYWxsYmFja0lEIGJhc2UgY2xhc3MgZXhwbGljaXRseSBpbiBhIGZldyBwbGFjZXMuICAgIAor
CiAyMDE4LTA4LTEwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0NvY29hXSBXZWJLaXQ6OlBsYXRmb3JtUG9wdXBNZW51RGF0YSBzaG91bGQgdXNlIG1lbWJl
ciBpbml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDBiYjE0OWNhMTU1NTBlMWE5
YzhkM2U0NjlhYjI2Y2U2NDZiOGNiYTUuLmE3ZjFkYTY4ZjdiYTljNWFlODNlOGU2Mzg3NDRhZWE1
ZjdkNjQ1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKICAgICAgICAgV2ViQ29yZTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
KnN0b3JhZ2VTZXNzaW9uKTsKIH0KIAotdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBPcHRpb25hbENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViQ29va2llTWFuYWdlcjo6c2V0SFRUUENvb2tp
ZUFjY2VwdFBvbGljeShIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSwgT3B0aW9uYWxDYWxs
YmFja0lEPENvb2tpZU1hbmFnZXJDYWxsYmFja0lEPiBjYWxsYmFja0lEKQogewogICAgIHBsYXRm
b3JtU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuaAppbmRl
eCBkZTIyYzc5ZjhlOGQwZTJiODE3MjRmNjUxMTFhOWYxMGE1ZDIwMzY5Li40ZmZiMWRlZWFmMGVk
OWI3MjY5NzNjZjlmMTY1YzVmNWMwMDEwMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmgKQEAgLTI1LDcgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDYWxsYmFja0lELmgiCisjaW5jbHVk
ZSAiQ29va2llTWFuYWdlckNhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJIVFRQQ29va2llQWNjZXB0
UG9saWN5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NTdXBwbGVtZW50LmgiCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0gICAgdm9pZCBzZXRIVFRQQ29v
a2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3ksIE9wdGlvbmFsQ2FsbGJhY2tJ
RCk7CisgICAgdm9pZCBzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQ
b2xpY3ksIE9wdGlvbmFsQ2FsbGJhY2tJRDxDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRD4pOwogCiAj
aWYgVVNFKFNPVVApCiAgICAgdm9pZCBzZXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZShjb25zdCBT
dHJpbmcmIHN0b3JhZ2VQYXRoLCB1aW50MzJfdCBzdG9yYWdlVHlwZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVN
YW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IGUzZGU5ZDhjZmFiOWZkNWY2ZmI2OGEyYzA3MTAyNjJh
ODU1ZGM0NDguLjEyNTEwNTUyMjgwZmIzMjI4ZGNmYWQ1YmM5MjQyNTQ2ZWYwMDIwMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5h
Z2VyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0yNCwxOSArMjQsMTkgQEAKICAqLwog
IAogIG1lc3NhZ2VzIC0+IFdlYkNvb2tpZU1hbmFnZXIgewotICAgIHZvaWQgR2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKKyAgICB2b2lkIEdldEhvc3RuYW1lc1dpdGhDb29raWVzKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgV2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCBjYWxsYmFja0lE
KQogICAgIHZvaWQgRGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgU3RyaW5nIGhvc3RuYW1lKQogICAgIHZvaWQgRGVsZXRlQWxsQ29va2llcyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCiAKLSAgICB2b2lkIFNldENvb2tpZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDb29raWUgY29va2llLCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKLSAgICB2b2lkIFNldENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiBjb29raWVzLCBXZWJDb3JlOjpVUkwgdXJsLCBX
ZWJDb3JlOjpVUkwgbWFpbkRvY3VtZW50VVJMLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKLSAgICB2b2lkIEdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJL
aXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICB2b2lkIEdldENvb2tpZXMoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpVUkwgdXJsLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKLSAgICB2b2lkIERlbGV0ZUNvb2tpZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IHN0cnVjdCBXZWJDb3JlOjpDb29raWUgY29va2llLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKLSAgICB2b2lkIERlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgV2FsbFRpbWUgdGltZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCisgICAgdm9pZCBTZXRDb29raWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBzdHJ1Y3Qg
V2ViQ29yZTo6Q29va2llIGNvb2tpZSwgV2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCBj
YWxsYmFja0lEKQorICAgIHZvaWQgU2V0Q29va2llcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+IGNvb2tpZXMsIFdlYkNvcmU6OlVSTCB1cmwsIFdlYkNv
cmU6OlVSTCBtYWluRG9jdW1lbnRVUkwsIFdlYktpdDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKKyAgICB2b2lkIEdldEFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBXZWJLaXQ6OkNvb2tpZU1hbmFnZXJDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgdm9p
ZCBHZXRDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViQ29yZTo6VVJMIHVybCwg
V2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIHZvaWQgRGVs
ZXRlQ29va2llKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0IFdlYkNvcmU6OkNvb2tp
ZSBjb29raWUsIFdlYktpdDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAg
ICB2b2lkIERlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgV2FsbFRpbWUgdGltZSwgV2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogCi0gICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHVpbnQzMl90IHBv
bGljeSwgV2ViS2l0OjpPcHRpb25hbENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICB2b2lkIEdl
dEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisg
ICAgdm9pZCBTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHVpbnQzMl90IHBvbGljeSwgV2ViS2l0
OjpPcHRpb25hbENhbGxiYWNrSUQ8V2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRD4gY2Fs
bGJhY2tJRCkKKyAgICB2b2lkIEdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koV2ViS2l0OjpDb29r
aWVNYW5hZ2VyQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIAogICAgIHZvaWQgU3RhcnRPYnNl
cnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICB2b2lkIFN0
b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGE3ODJiYWFjOWQ0NWJiM2M5
ZDBiODk5MjYyMmZhYTYyNTJhYTE4NGQuLjM4MDBlNDJkZjU3YmExY2JkNjQ3MTM2MDAwNGNkYTJh
N2M5Nzg5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAt
MTk3LDYgKzE5Nyw4IEBAIGRlZiBmb3J3YXJkX2RlY2xhcmF0aW9uc19hbmRfaGVhZGVycyhyZWNl
aXZlcik6CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKKyAgICAgICAgJ1dlYktp
dDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQnLAorICAgICAgICAnV2ViS2l0OjpEcmF3aW5nQXJl
YUNhbGxiYWNrSUQnLAogICAgICAgICAnV2ViS2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVu
dGlmaWVyJywKICAgICBdKQogCkBAIC0zMTYsNiArMzE4LDcgQEAgZGVmIGNsYXNzX3RlbXBsYXRl
X2hlYWRlcnModGVtcGxhdGVfc3RyaW5nKToKICAgICAgICAgJ09wdGlvblNldCc6IHsnaGVhZGVy
cyc6IFsnPHd0Zi9PcHRpb25TZXQuaD4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMnOiBbJyJB
cmd1bWVudENvZGVycy5oIiddfSwKICAgICAgICAgJ1ZlY3Rvcic6IHsnaGVhZGVycyc6IFsnPHd0
Zi9WZWN0b3IuaD4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMnOiBbJyJBcmd1bWVudENvZGVy
cy5oIiddfSwKICAgICAgICAgJ3N0ZDo6cGFpcic6IHsnaGVhZGVycyc6IFsnPHV0aWxpdHk+J10s
ICdhcmd1bWVudF9jb2Rlcl9oZWFkZXJzJzogWyciQXJndW1lbnRDb2RlcnMuaCInXX0sCisgICAg
ICAgICdXZWJLaXQ6Ok9wdGlvbmFsQ2FsbGJhY2tJRCc6IHsnaGVhZGVycyc6IFsnIk9wdGlvbmFs
Q2FsbGJhY2tJRC5oIiddLCAnYXJndW1lbnRfY29kZXJfaGVhZGVycyc6IFsnIk9wdGlvbmFsQ2Fs
bGJhY2tJRC5oIiddfSwKICAgICB9CiAKICAgICBtYXRjaCA9IHJlLm1hdGNoKCcoP1A8dGVtcGxh
dGVfbmFtZT4uKz8pPCg/UDxwYXJhbWV0ZXJfc3RyaW5nPi4rKT4nLCB0ZW1wbGF0ZV9zdHJpbmcp
CkBAIC00MTksNiArNDIyLDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAg
ICdXZWJDb3JlOjpTZWxlY3Rpb25SZWN0JzogWyciRWRpdG9yU3RhdGUuaCInXSwKICAgICAgICAg
J1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJzogWyciRHJhd2luZ0FyZWFJbmZvLmgiJ10s
CiAgICAgICAgICdXZWJLaXQ6OkJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZSc6IFsnIlNlc3Npb25T
dGF0ZS5oIiddLAorICAgICAgICAnV2ViS2l0OjpEcmF3aW5nQXJlYUNhbGxiYWNrSUQnOiBbJyJE
cmF3aW5nQXJlYUluZm8uaCInXSwKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nTW9kZSc6
IFsnIkxheWVyVHJlZUNvbnRleHQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6UGFnZVN0YXRlJzog
WyciU2Vzc2lvblN0YXRlLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6
IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9DYWxs
YmFja0lELmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9DYWxsYmFja0lELmgKaW5kZXggOGYxOGQ0
ZGNmNzcwY2I5MDFhOTlmNjNhOWFmNTVhNDZmNmM1Y2VlMy4uYzc5YWJkMWY4NzAwOTJhYjI1ZDAz
MGM5NzgzYzI1MWMxNGM1ZjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ2Fs
bGJhY2tJRC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NhbGxiYWNrSUQuaApAQCAtOTIs
OSArOTIsOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobmV3SUQgIT0gSGFzaFRyYWl0czx1
aW50NjRfdD46OmVtcHR5VmFsdWUoKSk7CiAgICAgfQogCi0gICAgZnJpZW5kIGNsYXNzIENhbGxi
YWNrTWFwOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDYWxsYmFja1R5cGU+IGZyaWVuZCBjbGFz
cyBTcGVjaWZpY0NhbGxiYWNrTWFwOwotICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbENhbGxiYWNr
SUQ7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxiYWNrSURUeXBlPiBmcmllbmQgY2xhc3Mg
Q2FsbGJhY2tNYXA7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxiYWNrSURUeXBlPiBmcmll
bmQgY2xhc3MgT3B0aW9uYWxDYWxsYmFja0lEOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpDYWxs
YmFja0lESGFzaDsKICAgICBmcmllbmQgSGFzaFRyYWl0czxXZWJLaXQ6OkNhbGxiYWNrSUQ+Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29raWVNYW5hZ2VyQ2FsbGJhY2tJ
RC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29va2llTWFuYWdlckNhbGxiYWNrSUQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NTdmNmQ1MzY0YmRlN2VjYjc0ODM2YjNhNTlkODY3ZDBjNjU3MDI0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29va2llTWFuYWdlckNhbGxiYWNrSUQu
aApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDYWxsYmFja0lELmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBDb29raWVNYW5h
Z2VyQ2FsbGJhY2tJRCA9IFdlYktpdDo6Q2FsbGJhY2tJRDsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCmluZGV4IDI5YmJmZmM2M2M0
OWE3ZjU2ZDIyMTZjMjYxMjdkMDczYzQ3OWVlODIuLjRmMDRjNWM4NmM1OWU1MmVhZWE2OWU1Njg0
M2RlODBkZGVkNzgxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdB
cmVhSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0RyYXdpbmdBcmVhSW5mby5oCkBA
IC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ2FsbGJhY2tJRC5o
IgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogZW51bSBEcmF3aW5nQXJlYVR5cGUgewpAQCAtNDIs
NSArNDQsNyBAQCBlbnVtIHsKICAgICBBY3Rpdml0eVN0YXRlQ2hhbmdlQXN5bmNocm9ub3VzID0g
MAogfTsKIHR5cGVkZWYgdWludDY0X3QgQWN0aXZpdHlTdGF0ZUNoYW5nZUlEOworICAgIAordXNp
bmcgRHJhd2luZ0FyZWFDYWxsYmFja0lEID0gV2ViS2l0OjpDYWxsYmFja0lEOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL09wdGlvbmFs
Q2FsbGJhY2tJRC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvT3B0aW9uYWxDYWxsYmFja0lELmgK
aW5kZXggNzk0ZTcyZTBjZTY1ZDYyZDZlMGFmYjYzYmYwZWMyNThkOTQzZGE5MS4uNzFkOWYyZDkz
MDc3MmI5MjFkZTVmMDNhYjA4YTk4OTQ1Y2U1YzU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvT3B0aW9uYWxDYWxsYmFja0lELmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
T3B0aW9uYWxDYWxsYmFja0lELmgKQEAgLTMxLDExICszMSwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIENhbGxiYWNrSURUeXBlPgogY2xhc3MgT3B0aW9u
YWxDYWxsYmFja0lEIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBPcHRpb25hbENhbGxiYWNrSUQo
KSB7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgZXhwbGljaXQgT3B0aW9uYWxDYWxsYmFja0lEKGNv
bnN0IENhbGxiYWNrSUQmIG90aGVySUQpCisgICAgQUxXQVlTX0lOTElORSBleHBsaWNpdCBPcHRp
b25hbENhbGxiYWNrSUQoY29uc3QgQ2FsbGJhY2tJRFR5cGUmIG90aGVySUQpCiAgICAgICAgIDog
bV9pZChvdGhlcklELm1faWQpCiAgICAgewogICAgIH0KQEAgLTQ3LDEwICs0OCwxMCBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdWludDY0X3QgdG9JbnRlZ2VyKCkgeyByZXR1cm4gbV9pZDsgfQot
ICAgIENhbGxiYWNrSUQgY2FsbGJhY2tJRCgpCisgICAgQ2FsbGJhY2tJRFR5cGUgY2FsbGJhY2tJ
RCgpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChDYWxsYmFja0lEOjppc1ZhbGlkQ2Fs
bGJhY2tJRChtX2lkKSk7Ci0gICAgICAgIHJldHVybiBDYWxsYmFja0lEKG1faWQpOworICAgICAg
ICByZXR1cm4gQ2FsbGJhY2tJRFR5cGUobV9pZCk7CiAgICAgfQogCiAgICAgb3BlcmF0b3IgYm9v
bCgpIHsgcmV0dXJuIG1faWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKaW5k
ZXggM2U1NmY1MGE4MWEyZGY5Y2IxMmI1MDg0YTUxNTM1M2Q1MzEyMWNhNi4uOTQwNDcxOTM4NjA2
ZWY5Y2Y1YTY3OTAzNTQyMjg4YWExZGQ4MjUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uLmgKQEAgLTI2NSw5ICsyNjUsOCBAQCBwdWJsaWM6CiAgICAgQWN0aXZpdHlTdGF0ZUNo
YW5nZUlEIGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZpdHlT
dGF0ZUNoYW5nZUlEOyB9CiAgICAgdm9pZCBzZXRBY3Rpdml0eVN0YXRlQ2hhbmdlSUQoQWN0aXZp
dHlTdGF0ZUNoYW5nZUlEIGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCkgeyBtX2FjdGl2aXR5U3RhdGVD
aGFuZ2VJRCA9IGFjdGl2aXR5U3RhdGVDaGFuZ2VJRDsgfQogCi0gICAgdHlwZWRlZiBDYWxsYmFj
a0lEIFRyYW5zYWN0aW9uQ2FsbGJhY2tJRDsKLSAgICBjb25zdCBWZWN0b3I8VHJhbnNhY3Rpb25D
YWxsYmFja0lEPiYgY2FsbGJhY2tJRHMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrSURzOyB9
Ci0gICAgdm9pZCBzZXRDYWxsYmFja0lEcyhWZWN0b3I8VHJhbnNhY3Rpb25DYWxsYmFja0lEPiYm
IGNhbGxiYWNrSURzKSB7IG1fY2FsbGJhY2tJRHMgPSBXVEZNb3ZlKGNhbGxiYWNrSURzKTsgfQor
ICAgIGNvbnN0IFZlY3RvcjxEcmF3aW5nQXJlYUNhbGxiYWNrSUQ+JiBjYWxsYmFja0lEcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tJRHM7IH0KKyAgICB2b2lkIHNldENhbGxiYWNrSURzKFZl
Y3RvcjxEcmF3aW5nQXJlYUNhbGxiYWNrSUQ+JiYgY2FsbGJhY2tJRHMpIHsgbV9jYWxsYmFja0lE
cyA9IFdURk1vdmUoY2FsbGJhY2tJRHMpOyB9CiAKICAgICBXZWJDb3JlOjpMYXlvdXRNaWxlc3Rv
bmVzIG5ld2x5UmVhY2hlZExheW91dE1pbGVzdG9uZXMoKSBjb25zdCB7IHJldHVybiBtX25ld2x5
UmVhY2hlZExheW91dE1pbGVzdG9uZXM7IH0KICAgICB2b2lkIHNldE5ld2x5UmVhY2hlZExheW91
dE1pbGVzdG9uZXMoV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKSB7IG1fbmV3
bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcyA9IG1pbGVzdG9uZXM7IH0KQEAgLTI4OSw3ICsyODgs
NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQ+IG1fdmlkZW9MYXllcklEc1BlbmRpbmdGdWxsc2NyZWVuOwogICAgIFZlY3RvcjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG1fbGF5ZXJJRHNXaXRoTmV3
bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZTsKIAotICAgIFZlY3RvcjxUcmFuc2FjdGlvbkNhbGxi
YWNrSUQ+IG1fY2FsbGJhY2tJRHM7CisgICAgVmVjdG9yPERyYXdpbmdBcmVhQ2FsbGJhY2tJRD4g
bV9jYWxsYmFja0lEczsKIAogICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24ubW0KaW5kZXggNGI4ZDU5ZDI1MDhlMmUxM2FmNjA0ZGVlNzQ1ZTViM2Y4ZGZm
ZmQxOS4uZGY0YWI2NDBmMWFiNGFlZjU2NmEwOTc2MjQ4NmI1Y2UyNmYyMTY2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQpAQCAtNjc4LDcgKzY3OCw3IEBAIGJvb2wgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFJl
bW90ZUxheWVyVHJlZVRyCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9pc0luU3Rh
YmxlU3RhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+PiBjYWxsYmFja0lEczsKKyAgICBzdGQ6Om9wdGlv
bmFsPFZlY3RvcjxEcmF3aW5nQXJlYUNhbGxiYWNrSUQ+PiBjYWxsYmFja0lEczsKICAgICBkZWNv
ZGVyID4+IGNhbGxiYWNrSURzOwogICAgIGlmICghY2FsbGJhY2tJRHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0dlbmVyaWNDYWxs
YmFjay5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2VuZXJpY0NhbGxiYWNrLmgKaW5kZXgg
ZWY1ZjhkZWQxYzY0YmY3NTRmMWI3NjVmZDMxNGZjNDQxMWZmOGIzNy4uZTQzZmQwZjJlNDZmNWIx
NWMxMTM4MWNiMTNlYjFkYzU5ZDFjZDRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvR2VuZXJpY0NhbGxiYWNrLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvR2Vu
ZXJpY0NhbGxiYWNrLmgKQEAgLTE2Niw2ICsxNjYsNyBAQCB2b2lkIGludmFsaWRhdGVDYWxsYmFj
a01hcChIYXNoTWFwPHVpbnQ2NF90LCBUPiYgY2FsbGJhY2tNYXAsIENhbGxiYWNrQmFzZTo6RXJy
bwogICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZShlcnJvcik7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIENhbGxiYWNrSURUeXBlPgogY2xhc3MgQ2FsbGJhY2tNYXAgewogcHVibGljOgogICAg
IENhbGxiYWNrSUQgcHV0KFJlZjxDYWxsYmFja0Jhc2U+JiYgY2FsbGJhY2spCkBAIC0xODksMTQg
KzE5MCwxNCBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
Ci0gICAgQ2FsbGJhY2tJRCBwdXQoRnVuY3Rpb248dm9pZChULi4uKT4mJiBmdW5jdGlvbiwgY29u
c3QgUHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4mIGFjdGl2aXR5VG9r
ZW4pCisgICAgQ2FsbGJhY2tJRFR5cGUgcHV0KEZ1bmN0aW9uPHZvaWQoVC4uLik+JiYgZnVuY3Rp
b24sIGNvbnN0IFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eVRva2VuJiBhY3Rp
dml0eVRva2VuKQogICAgIHsKICAgICAgICAgYXV0byBjYWxsYmFjayA9IEdlbmVyaWNDYWxsYmFj
a1R5cGU8c2l6ZW9mLi4uKFQpLCBULi4uPjo6dHlwZTo6Y3JlYXRlKFdURk1vdmUoZnVuY3Rpb24p
LCBhY3Rpdml0eVRva2VuKTsKICAgICAgICAgcmV0dXJuIHB1dChXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBSZWZQdHI8VD4gdGFrZShDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCisgICAgUmVmUHRyPFQ+IHRha2UoQ2FsbGJhY2tJRFR5cGUgY2Fs
bGJhY2tJRCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxiYWNrSUQuaXNWYWxp
ZCgpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMjA0
LDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFiYXNlKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGJhc2UubGVha1JlZigpLT5h
czxUPigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGJhc2UubGVha1JlZigpLT50ZW1wbGF0
ZSBhczxUPigpKTsKICAgICB9CiAKICAgICB2b2lkIGludmFsaWRhdGUoQ2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eS5oCmluZGV4IDM3YThkNzcxY2ZiY2M2Mjc0ZDYxMGUzMDIyMThjZGE4ZWMwYWEyOGMuLjNkOTYz
MWU5M2M0NDQwMWU3ODE0ZTdkNjc2YzFhN2IxMmJjYjBlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaApAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZh
dGU6CiAgICAgdWludDY0X3QgbV90cmFuc2FjdGlvbklERm9yVW5oaWRpbmdDb250ZW50IHsgMCB9
OwogICAgIEFjdGl2aXR5U3RhdGVDaGFuZ2VJRCBtX2FjdGl2aXR5U3RhdGVDaGFuZ2VJRCB7IEFj
dGl2aXR5U3RhdGVDaGFuZ2VBc3luY2hyb25vdXMgfTsKIAotICAgIENhbGxiYWNrTWFwIG1fY2Fs
bGJhY2tzOworICAgIENhbGxiYWNrTWFwPERyYXdpbmdBcmVhQ2FsbGJhY2tJRD4gbV9jYWxsYmFj
a3M7CiAKICAgICBSZXRhaW5QdHI8V0tPbmVTaG90RGlzcGxheUxpbmtIYW5kbGVyPiBtX2Rpc3Bs
YXlMaW5rSGFuZGxlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5LmNwcAppbmRleCAwNmZmMDZlYThlMmY5YmI0ODdmNDMwYTFiZWQ5Y2Ux
NjVhMjk1MDgzLi5mYzFjNTMxNjFlYWM1MmEwNDI5NTM1YTI2MmI3OTVlMjI4YTg2OTg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5jcHAK
QEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBGdQogICAgIHByb2Nlc3NQ
b29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhzZXNzaW9uSUQsIGNhbGxiYWNrSUQpKTsKIH0KIAot
dm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRpZEdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQordm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRpZEdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMsIENvb2tpZU1hbmFnZXJDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2U8
QXJyYXlDYWxsYmFjaz4oY2FsbGJhY2tJRCk7CiAgICAgaWYgKCFjYWxsYmFjaykgewpAQCAtMTcw
LDE3ICsxNzAsMTcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldENvb2tpZXMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBVUkwmIHVybCwKICAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0
Q29va2llcyhzZXNzaW9uSUQsIHVybCwgY2FsbGJhY2tJRCkpOwogfQogCi12b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGlkU2V0Q29va2llcyhXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKK3ZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkaWRTZXRDb29raWVzKENvb2tpZU1hbmFn
ZXJDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgbV9jYWxsYmFja3MudGFrZTxWb2lkQ2Fs
bGJhY2s+KGNhbGxiYWNrSUQpLT5wZXJmb3JtQ2FsbGJhY2soKTsKIH0KIAotdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmRpZEdldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tp
ZXMsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJDb29raWVNYW5hZ2Vy
UHJveHk6OmRpZEdldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIENvb2tp
ZU1hbmFnZXJDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgbV9jYWxsYmFja3MudGFrZTxH
ZXRDb29raWVzQ2FsbGJhY2s+KGNhbGxiYWNrSUQpLT5wZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJu
VmFsdWUoY29va2llcyk7CiB9CiAKLXZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpkaWREZWxl
dGVDb29raWVzKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJDb29raWVN
YW5hZ2VyUHJveHk6OmRpZERlbGV0ZUNvb2tpZXMoQ29va2llTWFuYWdlckNhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKIHsKICAgICBtX2NhbGxiYWNrcy50YWtlPFZvaWRDYWxsYmFjaz4oY2FsbGJhY2tJ
RCktPnBlcmZvcm1DYWxsYmFjaygpOwogfQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklE
LCBIVFRQQ29va2llCiAjZW5kaWYKIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tz
LnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBwcm9jZXNzUG9vbCgpLT5lbnN1cmVOZXR3
b3JrUHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAg
IHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSwgT3B0aW9uYWxDYWxs
YmFja0lEKGNhbGxiYWNrSUQpKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kocG9saWN5LCBPcHRpb25hbENhbGxiYWNrSUQ8Q29va2llTWFuYWdlckNhbGxiYWNrSUQ+
KGNhbGxiYWNrSUQpKSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KFBBTDo6U2Vzc2lvbklELCBGdW5jdGlvbjx2b2lkIChIVFRQQ29v
a2llQWNjZXB0UG9saWN5LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApp
bmRleCBlMzMxNjdhODk1MGMxNjhmMDFjMDMyY2ViOWU1ZjhmOTgxZTUxMzgwLi4yZjdkYjgyNTg1
NjQ0Mzg2MmNiYzc3MWIxYjM5MGIxNmM1YmJiMzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJDb29raWVNYW5hZ2Vy
Q2FsbGJhY2tJRC5oIgogI2luY2x1ZGUgIkdlbmVyaWNDYWxsYmFjay5oIgogI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRTdXBwbGVtZW50LmgiCkBAIC01
NCw3ICs1NSw3IEBAIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIHR5cGVkZWYgR2VuZXJpY0NhbGxi
YWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8
SFRUUENvb2tpZUFjY2VwdFBvbGljeT4gSFRUUENvb2tpZUFjY2VwdFBvbGljeUNhbGxiYWNrOwog
dHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mPiBH
ZXRDb29raWVzQ2FsbGJhY2s7Ci0KKyAgICAKIGNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQcm94eSA6
IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvb2tpZU1hbmFnZXI+
LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwpA
QCAtMTA3LDEzICsxMDgsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKIAotICAgIHZvaWQgZGlkR2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBXZWJLaXQ6OkNhbGxiYWNrSUQpOwotICAg
IHZvaWQgZGlkR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh1aW50MzJfdCBwb2xpY3ksIFdlYktp
dDo6Q2FsbGJhY2tJRCk7CisgICAgdm9pZCBkaWRHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYsIFdlYktpdDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQpOworICAg
IHZvaWQgZGlkR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh1aW50MzJfdCBwb2xpY3ksIFdlYktp
dDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQpOwogCi0gICAgdm9pZCBkaWRTZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KFdlYktpdDo6Q2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBkaWRTZXRDb29raWVz
KFdlYktpdDo6Q2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBkaWRHZXRDb29raWVzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29raWU+JiwgV2ViS2l0OjpDYWxsYmFja0lEKTsKLSAgICB2b2lkIGRpZERl
bGV0ZUNvb2tpZXMoV2ViS2l0OjpDYWxsYmFja0lEKTsKKyAgICB2b2lkIGRpZFNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3koV2ViS2l0OjpDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRCk7CisgICAgdm9p
ZCBkaWRTZXRDb29raWVzKFdlYktpdDo6Q29va2llTWFuYWdlckNhbGxiYWNrSUQpOworICAgIHZv
aWQgZGlkR2V0Q29va2llcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29va2llPiYsIFdlYktpdDo6
Q29va2llTWFuYWdlckNhbGxiYWNrSUQpOworICAgIHZvaWQgZGlkRGVsZXRlQ29va2llcyhXZWJL
aXQ6OkNvb2tpZU1hbmFnZXJDYWxsYmFja0lEKTsKIAogICAgIHZvaWQgY29va2llc0RpZENoYW5n
ZShQQUw6OlNlc3Npb25JRCk7CiAKQEAgLTEzMSw3ICsxMzIsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSk7
CiAjZW5kaWYKIAotICAgIENhbGxiYWNrTWFwIG1fY2FsbGJhY2tzOworICAgIENhbGxiYWNrTWFw
PENvb2tpZU1hbmFnZXJDYWxsYmFja0lEPiBtX2NhbGxiYWNrczsKIAogICAgIEhhc2hNYXA8UEFM
OjpTZXNzaW9uSUQsIFdURjo6RnVuY3Rpb248dm9pZCAoKT4+IG1fbGVnYWN5Q29va2llT2JzZXJ2
ZXJzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIEhhc2hTZXQ8T2JzZXJ2ZXIqPj4gbV9j
b29raWVPYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApp
bmRleCA3YTZmMjc1MzJmNjAzMzkxNGQ3ODNjMDY0OTJlOWRmN2MyZWM5MWEwLi5mNTZjYWEzYjMz
M2M2NThkM2NjYTkxMmNjMDY2MDhlYmE3ZWM1MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKQEAgLTc2MDMsNyArNzYwMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uKGNvbnN0IFdlYkNvcmU6OkxpbmtJY29uJiBpY29uLCBD
YWxsYmFjCiAgICAgICAgIH0KIAogICAgICAgICBib29sIGRlY2lzaW9uID0gKGJvb2wpY2FsbGJh
Y2tGdW5jdGlvbjsKLSAgICAgICAgYXV0byBuZXdDYWxsYmFja0lkZW50aWZpZXIgPSBkZWNpc2lv
biA/IE9wdGlvbmFsQ2FsbGJhY2tJRChtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigp
KSkgOiBPcHRpb25hbENhbGxiYWNrSUQoKTsKKyAgICAgICAgYXV0byBuZXdDYWxsYmFja0lkZW50
aWZpZXIgPSBkZWNpc2lvbiA/IE9wdGlvbmFsQ2FsbGJhY2tJRDxDYWxsYmFja0lEPihtX2NhbGxi
YWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKSkgOiBPcHRpb25hbENhbGxiYWNrSUQ8Q2FsbGJh
Y2tJRD4oKTsKIAogICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRp
ZEdldExvYWREZWNpc2lvbkZvckljb24oZGVjaXNpb24sIGxvYWRJZGVudGlmaWVyLCBuZXdDYWxs
YmFja0lkZW50aWZpZXIpLCBtX3BhZ2VJRCk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IDZhNWIyNTlmY2FlYTZkODkyOGYwOTg4OWM3OTgwNDVlYjEw
ZDg4MTUuLjFmNDcwMmIwZDYyM2M3MzQ5NWYwYzgzY2FiYzYyMTZjOWZjYTdiOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xOTE1LDcgKzE5MTUsNyBAQCBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDcmVkZW50aWFsc01lc3NlbmdlclByb3h5PiBt
X2NyZWRlbnRpYWxzTWVzc2VuZ2VyOwogI2VuZGlmCiAKLSAgICBDYWxsYmFja01hcCBtX2NhbGxi
YWNrczsKKyAgICBDYWxsYmFja01hcDxDYWxsYmFja0lEPiBtX2NhbGxiYWNrczsKICAgICBIYXNo
U2V0PENhbGxiYWNrSUQ+IG1fbG9hZERlcGVuZGVudFN0cmluZ0NhbGxiYWNrSURzOwogCiAgICAg
SGFzaFNldDxXZWJFZGl0Q29tbWFuZFByb3h5Kj4gbV9lZGl0Q29tbWFuZFNldDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGU0YTQ0NDc5MGI5NzEwMDU1ZmRkNjkxYWI4ZDg5
Njg1ZWVhNTc5NzcuLjUyMjA1OTM3OWMxYjNjMTVlZWY2NjNhYmU2MzZlN2UzNzVmOTZkYmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaApAQCAtNzMsNyArNzMsNyBAQCBwcml2YXRl
OgogICAgIC8vIFRoZSBsYXN0IG1pbmltdW0gbGF5b3V0IHNpemUgd2Ugc2VudCB0byB0aGUgd2Vi
IHByb2Nlc3MuCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xhc3RTZW50Vmlld0xheW91dFNpemU7
CiAKLSAgICBDYWxsYmFja01hcCBtX2NhbGxiYWNrczsKKyAgICBDYWxsYmFja01hcDxEcmF3aW5n
QXJlYUNhbGxiYWNrSUQ+IG1fY2FsbGJhY2tzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA4NjVhZGE5MzU1NmNmMzQzZmVhNzUxMWJkODg3NTdiN2VjMGUzNzc0Li42YWNhNTMwMWJlOWM5
YjE4ZDIwMzFjNTUxNTYyNGRlNzQ0YmQ0NTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY5MCw2ICs2OTAsNyBAQAogCQkyREExRTRG
RTE4QzAyQjZBMDBEQkM5MjkgLyogV0tMZWdhY3lQREZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREExRTRGQzE4QzAyQjZBMDBEQkM5MjkgLyog
V0tMZWdhY3lQREZWaWV3LmggKi87IH07CiAJCTJEQTFFNEZGMThDMDJCNkEwMERCQzkyOSAvKiBX
S0xlZ2FjeVBERlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyREExRTRGRDE4QzAyQjZBMDBEQkM5MjkgLyogV0tMZWdhY3lQREZWaWV3Lm1tICov
OyB9OwogCQkyREE2NzMxQTIwQzc1NEIxMDAzQ0I0MDEgLyogRHluYW1pY1ZpZXdwb3J0U2l6ZVVw
ZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRB
NjczMTkyMEM3NTRCMTAwM0NCNDAxIC8qIER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUuaCAqLzsg
fTsKKwkJMkRBODU3OTMyMTI0QkU2NTAwMTI0NUY2IC8qIENvb2tpZU1hbmFnZXJDYWxsYmFja0lE
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREE4NTc5
MjIxMjRCRTY1MDAxMjQ1RjYgLyogQ29va2llTWFuYWdlckNhbGxiYWNrSUQuaCAqLzsgfTsKIAkJ
MkRBOTQ0OUUxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRJT1MubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREE5NDQ5NzE4
ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElPUy5tbSAqLzsgfTsKIAkJ
MkRBOTQ0OUYxODg0RTRGMDAwRUQ4NkRCIC8qIE5hdGl2ZVdlYlRvdWNoRXZlbnRJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREE5NDQ5ODE4ODRF
NEYwMDBFRDg2REIgLyogTmF0aXZlV2ViVG91Y2hFdmVudElPUy5tbSAqLzsgfTsKIAkJMkRBOTQ0
QTAxODg0RTRGMDAwRUQ4NkRCIC8qIFdlYklPU0V2ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0OTkxODg0RTRGMDAwRUQ4NkRC
IC8qIFdlYklPU0V2ZW50RmFjdG9yeS5oICovOyB9OwpAQCAtMzE2Niw2ICszMTY3LDcgQEAKIAkJ
MkRBMUU0RkQxOEMwMkI2QTAwREJDOTI5IC8qIFdLTGVnYWN5UERGVmlldy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLTGVnYWN5UERGVmlldy5tbTsgcGF0aCA9
IGlvcy9XS0xlZ2FjeVBERlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
QTY3MzE5MjBDNzU0QjEwMDNDQjQwMSAvKiBEeW5hbWljVmlld3BvcnRTaXplVXBkYXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IER5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUu
aDsgcGF0aCA9IGlvcy9EeW5hbWljVmlld3BvcnRTaXplVXBkYXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJEQTdGRENCMThGODg2MjUwMDhEREVEMCAvKiBGaW5kSW5kaWNhdG9y
T3ZlcmxheUNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaW5kSW5kaWNhdG9yT3ZlcmxheUNs
aWVudElPUy5oOyBwYXRoID0gaW9zL0ZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEQTg1NzkyMjEyNEJFNjUwMDEyNDVGNiAvKiBD
b29raWVNYW5hZ2VyQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb29raWVNYW5hZ2VyQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyREE5NDQ5NzE4ODRFNEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnRJT1MubW07IHBhdGggPSBpb3MvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBOTQ0OTgxODg0RTRGMDAwRUQ4NkRCIC8q
IE5hdGl2ZVdlYlRvdWNoRXZlbnRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBOYXRpdmVXZWJUb3VjaEV2ZW50SU9TLm1tOyBwYXRoID0gaW9zL05hdGl2ZVdl
YlRvdWNoRXZlbnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQTk0NDk5
MTg4NEU0RjAwMEVEODZEQiAvKiBXZWJJT1NFdmVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViSU9TRXZlbnRGYWN0b3J5Lmg7IHBhdGggPSBpb3MvV2ViSU9T
RXZlbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mzg3LDYgKzUz
ODksNyBAQAogCQkJCTI5MEY0MjcxMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NTdXBw
bGVtZW50LmggKi8sCiAJCQkJNTEwNkQ3QkYxOEJEQkU3MzAwMEFCMTY2IC8qIENvbnRleHRNZW51
Q29udGV4dERhdGEuY3BwICovLAogCQkJCTUxMDZEN0MwMThCREJFNzMwMDBBQjE2NiAvKiBDb250
ZXh0TWVudUNvbnRleHREYXRhLmggKi8sCisJCQkJMkRBODU3OTIyMTI0QkU2NTAwMTI0NUY2IC8q
IENvb2tpZU1hbmFnZXJDYWxsYmFja0lELmggKi8sCiAJCQkJOTlGNjQyRDIxRkFCRTM3ODAwOTYy
MUU5IC8qIENvb3JkaW5hdGVTeXN0ZW0uaCAqLywKIAkJCQlDNTE3Mzg4MDEyREY4RjRGMDBFRTNG
NDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLywKIAkJCQkwRkI2NTkyMjEyMDhCNERCMDA0
NDgxNkMgLyogRHJhd2luZ0FyZWFJbmZvLmggKi8sCkBAIC05MTAxLDYgKzkxMDQsNyBAQAogCQkJ
CTM3QzRFOUY2MTMxQzZFN0UwMDI5QkQ1QSAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDMyREFCMTBGNDM3RDEwMDU4QzE1QSAvKiBDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTA2RDdDNDE4QkRCRTczMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMkRBODU3OTMyMTI0QkU2NTAwMTI0NUY2IC8qIENvb2tpZU1h
bmFnZXJDYWxsYmFja0lELmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTFBMEJEMzFBNDhFNkM2MDA1
NEVGNzQgLyogQ29yZVBERlNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDMjFDQUUxRTk5NEMw
QzAwMjlENUY5IC8qIENvcmVQcmVkaWN0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODc4
QjYxNTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4
IDQ4ZTllNTYwNjkyYzkxMGJhNGZiMzY1ZjE3ODcxMGU3YjM3NjJiMmIuLjlhMzI5OTRmYTVlOWU3
Mjk1MDc1Zjk1NzYxMGY2MDZmMTNmMWExMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtMTgyLDcgKzE4Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3Jl
OjpGbG9hdFBvaW50IG9yaWdpbikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zaWVu
dFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbikgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJ
RCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRUcmFuc2Fj
dGlvbkNhbGxiYWNrSUQoRHJhd2luZ0FyZWFDYWxsYmFja0lEKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0o
R1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRP
VykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEubWVzc2FnZXMuaW4KaW5kZXggZGJmYjI5NDUyMjZjZjllYTQyOTIyN2RiODcwZTE5M2I5
NDVmZmNhMC4uNTAwMTc4NjFhZDczMzQ0YzYyNzJiMmNjOWY0M2IxNWQ2ZDE5NDFlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KQEAgLTM3LDcgKzM3LDcgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgewog
ICAgIEFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3QgbGF5ZXJJRCwgU3RyaW5n
IGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCiAgICAgQWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRFbmQodWludDY0X3QgbGF5ZXJJRCwgU3RyaW5nIGtleSkKICAgICAKLSAgICBBZGRUcmFuc2Fj
dGlvbkNhbGxiYWNrSUQoV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgQWRkVHJh
bnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6RHJhd2luZ0FyZWFDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oR1RL
KSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgK
aW5kZXggZmFmMTZhYTEwN2QzMmYzZWUzYzYwZjE5OTgyOGViNjc4MGUxZDY1Ni4uNDZjNTg4ZGY5
YzNiYmE5ODczMzMwYmI4YmYyZGU5YTdiMzM3ZGMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTY3LDcgKzY3LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHko
KSBvdmVycmlkZTsKICAgICB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKENhbGxiYWNrSUQpIG92ZXJyaWRlOworICAgIHZv
aWQgYWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKERyYXdpbmdBcmVhQ2FsbGJhY2tJRCkgb3ZlcnJp
ZGU7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRl
OwogICAgIHZvaWQgd2lsbERlc3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6RGlz
cGxheVJlZnJlc2hNb25pdG9yKik7CkBAIC0xNjIsNyArMTYyLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoU2V0PFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcio+KiBtX2Rpc3BsYXlS
ZWZyZXNoTW9uaXRvcnNUb05vdGlmeSB7IG51bGxwdHIgfTsKIAogICAgIHVpbnQ2NF90IG1fY3Vy
cmVudFRyYW5zYWN0aW9uSUQgeyAwIH07Ci0gICAgVmVjdG9yPFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOworICAg
IFZlY3RvcjxEcmF3aW5nQXJlYUNhbGxiYWNrSUQ+IG1fcGVuZGluZ0NhbGxiYWNrSURzOwogICAg
IEFjdGl2aXR5U3RhdGVDaGFuZ2VJRCBtX2FjdGl2aXR5U3RhdGVDaGFuZ2VJRCB7IEFjdGl2aXR5
U3RhdGVDaGFuZ2VBc3luY2hyb25vdXMgfTsKIAogICAgIFdlYkNvcmU6OkxheW91dE1pbGVzdG9u
ZXMgbV9wZW5kaW5nTmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcyB7IDAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCBm
ZTU4MjZjZjY1ODgwN2YxZmIwM2RiMzUzYTZlNGQ1MTA1ZThkZDY3Li4zMzVhYjA2MzcxY2ExMjll
ZTQyMTJmNjA4YTM2ZDczOTdhZmEyOGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC00OTksMTMgKzQ5OSwxMyBAQCB2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKEFjdGl2
aXR5U3RhdGU6OkZsYWdzLCBBYwogICAgIH0KIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6YWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
K3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJ
RChEcmF3aW5nQXJlYUNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICAvLyBBc3N1bWUgdGhh
dCBpZiBzb21lb25lIGlzIGxpc3RlbmluZyBmb3IgdGhpcyB0cmFuc2FjdGlvbidzIGNvbXBsZXRp
b24sIHRoYXQgdGhleSB3YW50IGl0IHRvCiAgICAgLy8gYmUgYSAiY29tcGxldGUiIHBhaW50IChp
bmNsdWRpbmcgaW1hZ2VzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgYXN5bmNocm9ub3VzbHkgZGVj
b2RpbmcpLgogICAgIG1fbmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQYWludCA9IHRydWU7CiAKLSAg
ICBtX3BlbmRpbmdDYWxsYmFja0lEcy5hcHBlbmQoc3RhdGljX2Nhc3Q8UmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uQ2FsbGJhY2tJRD4oY2FsbGJhY2tJRCkpOworICAgIG1f
cGVuZGluZ0NhbGxiYWNrSURzLmFwcGVuZChjYWxsYmFja0lEKTsKICAgICBzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJGbHVzaCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IGQ2Yjk2NTU2ODY2ZDk4NTYwYjBiMmVmNGUzZGE4NWU1NTcz
OTMzZWEuLmYwZjQzMjM2NzI4YTMzMzcxMGY5NzVmMmZlYzVjMjI4MDAzMGE2NWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01OTQ0LDcgKzU5
NDQsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpZExvc2VQb2ludGVyTG9jaygpCiB9CiAjZW5kaWYKIAot
dm9pZCBXZWJQYWdlOjpkaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGJvb2wgZGVjaXNpb24sIENh
bGxiYWNrSUQgbG9hZElkZW50aWZpZXIsIE9wdGlvbmFsQ2FsbGJhY2tJRCBuZXdDYWxsYmFja0lE
KQordm9pZCBXZWJQYWdlOjpkaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGJvb2wgZGVjaXNpb24s
IENhbGxiYWNrSUQgbG9hZElkZW50aWZpZXIsIE9wdGlvbmFsQ2FsbGJhY2tJRDxDYWxsYmFja0lE
PiBuZXdDYWxsYmFja0lEKQogewogICAgIGlmIChhdXRvKiBkb2N1bWVudExvYWRlciA9IGNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGRv
Y3VtZW50TG9hZGVyLT5kaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRlY2lzaW9uLCBsb2FkSWRl
bnRpZmllci50b0ludGVnZXIoKSwgbmV3Q2FsbGJhY2tJRC50b0ludGVnZXIoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNDA4YWRkZDA4ZTNjMjk4
Mjk2MjUyNzQ3ODljOWViNTkxMTcxNDUxZS4uYTdlNGFkYmJiMzUzNTk0NTkyYWIzNWMyMmI3Y2My
ZjE1ZTg0MTI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJM
b2NrKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgZGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihib29s
IGRlY2lzaW9uLCBDYWxsYmFja0lEIGxvYWRJZGVudGlmaWVyLCBPcHRpb25hbENhbGxiYWNrSUQp
OworICAgIHZvaWQgZGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihib29sIGRlY2lzaW9uLCBDYWxs
YmFja0lEIGxvYWRJZGVudGlmaWVyLCBPcHRpb25hbENhbGxiYWNrSUQ8Q2FsbGJhY2tJRD4pOwog
ICAgIHZvaWQgc2V0VXNlSWNvbkxvYWRpbmdDbGllbnQoYm9vbCk7CiAKICNpZiBFTkFCTEUoREFU
QV9JTlRFUkFDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDFjNDRkNzdlNjUyNGQ2MzY2MjNlNDI0NmYyNTZh
NTcxNmIxYzAzNzkuLjE0NzAxOWVlOTQ4MTUxNGRlYzM4NzRjZDgxYjkxODhhZDRmOGNjOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgpAQCAtNDgzLDcgKzQ4Myw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVj
ZWl2ZXIgewogCiAgICAgU2V0VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbih1aW50MzJfdCBk
aXJlY3Rpb24pCiAKLSAgICBEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGJvb2wgZGVjaXNpb24s
IFdlYktpdDo6Q2FsbGJhY2tJRCBsb2FkSWRlbnRpZmllciwgV2ViS2l0OjpPcHRpb25hbENhbGxi
YWNrSUQgbmV3Q2FsbGJhY2tJRCkKKyAgICBEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGJvb2wg
ZGVjaXNpb24sIFdlYktpdDo6Q2FsbGJhY2tJRCBsb2FkSWRlbnRpZmllciwgV2ViS2l0OjpPcHRp
b25hbENhbGxiYWNrSUQ8V2ViS2l0OjpDYWxsYmFja0lEPiBuZXdDYWxsYmFja0lEKQogICAgIFNl
dFVzZUljb25Mb2FkaW5nQ2xpZW50KGJvb2wgdXNlSWNvbkxvYWRpbmdDbGllbnQpCiAKICNpZiBF
TkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKaW5k
ZXggYWNjMGI3N2EwMDg5NWY2YjEzM2U4ZTBjZTY1ODY1ZmJhZTBhZWJmZi4uOTI3OWIxZWViMThh
ZGMyZDVmNzg5MjJhMzAzYWExZmNiZTMwZTI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
Q29sb3JTcGFjZShjb25zdCBDb2xvclNwYWNlRGF0YSYpIG92ZXJyaWRlOwogICAgIHZvaWQgYWRk
RmVuY2UoY29uc3QgV1RGOjpNYWNoU2VuZFJpZ2h0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFk
ZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChDYWxsYmFja0lEKSBvdmVycmlkZTsKKyAgICB2b2lkIGFk
ZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChEcmF3aW5nQXJlYUNhbGxiYWNrSUQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudChib29sKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgYXR0YWNoRHJhd2luZ0FyZWEoKSBvdmVycmlkZTsKQEAgLTE2Myw3ICsxNjMs
NyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXN0RG9jdW1lbnRTaXplRm9y
U2NhbGVUb0ZpdDsKIAogICAgIFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMgbV9wZW5kaW5nTmV3
bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcyB7IDAgfTsKLSAgICBWZWN0b3I8Q2FsbGJhY2tJRD4g
bV9wZW5kaW5nQ2FsbGJhY2tJRHM7CisgICAgVmVjdG9yPERyYXdpbmdBcmVhQ2FsbGJhY2tJRD4g
bV9wZW5kaW5nQ2FsbGJhY2tJRHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQppbmRleCA1YTgwZmFmODE1YTIxNjVk
YzBhNzU3YTk4YTMzZWY3YTBiYTA5NWU0Li42ODA1YjkwNThlNWZiZjE3YzE3ZTAwZjkxNDRlODY2
YjVmNDZhZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBA
IC00MDcsNyArNDA3LDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6c2Vu
ZFBlbmRpbmdOZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzKCkKICAgICBtX3BlbmRpbmdOZXds
eVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzID0gMDsKIH0KIAotdm9pZCBUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYTo6YWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OmFkZFRyYW5zYWN0aW9u
Q2FsbGJhY2tJRChEcmF3aW5nQXJlYUNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBtX3Bl
bmRpbmdDYWxsYmFja0lEcy5hcHBlbmQoY2FsbGJhY2tJRCk7CiAgICAgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2goKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>