<?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>173682</bug_id>
          
          <creation_ts>2017-06-21 17:14:33 -0700</creation_ts>
          <short_desc>Make FrameLoadRequest a move-only type</short_desc>
          <delta_ts>2017-08-24 09:32:25 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321691</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-21 17:14:33 -0700</bug_when>
    <thetext>We should look to make FrameLoadRequest a move-only type as it is largely used as a convenience object for passing information around that is needed to perform a load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321699</commentid>
    <comment_count>1</comment_count>
      <attachid>313573</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-21 17:36:22 -0700</bug_when>
    <thetext>Created attachment 313573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321743</commentid>
    <comment_count>2</comment_count>
      <attachid>313573</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-21 20:18:59 -0700</bug_when>
    <thetext>Comment on attachment 313573
Patch

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

&gt; Source/WebCore/loader/FrameLoader.cpp:926
&gt; +    childFrame-&gt;loader().loadURL(WTFMove(frameLoadRequest), referer, FrameLoadType::RedirectWithLockedBackForwardList, 0, 0);

Will change 0 to nullptr for the last two arguments before landing.

&gt; Source/WebCore/loader/FrameLoader.cpp:1252
&gt; +        FrameLoadRequest newFrameLoadRequest = WTFMove(frameLoadRequest);

Will change this to use the move constructor before landing:

FrameLoadRequest newFrameLoadRequest { WTFMove(frameLoadRequest) };

(Note we do not need to explicitly define this local. I kept this local as I thought that it improves the readability of the code by making it more explicit that we are repurposes the FrameLoadRequest. Let me know if it is preferred to remove this local.)

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:661
&gt; +    Page* newPage = webPage-&gt;corePage()-&gt;chrome().createWindow(*m_frame-&gt;coreFrame(), WTFMove(frameLoadRequest), { }, navigationAction);

Will revert this change before landing. It is unnecessary to WTFMove() the FrameLoadRequest as Chrome::createWindow() takes a const FrameLoadRequest&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321883</commentid>
    <comment_count>3</comment_count>
      <attachid>313573</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 08:16:00 -0700</bug_when>
    <thetext>Comment on attachment 313573
Patch

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

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:1252
&gt;&gt; +        FrameLoadRequest newFrameLoadRequest = WTFMove(frameLoadRequest);
&gt; 
&gt; Will change this to use the move constructor before landing:
&gt; 
&gt; FrameLoadRequest newFrameLoadRequest { WTFMove(frameLoadRequest) };
&gt; 
&gt; (Note we do not need to explicitly define this local. I kept this local as I thought that it improves the readability of the code by making it more explicit that we are repurposes the FrameLoadRequest. Let me know if it is preferred to remove this local.)

Either way seems ok to me.  You removed a local variable in createWindow and removing it here seems consistent.

&gt; Source/WebKit/win/Plugins/PluginView.h:84
&gt; +            : m_frameLoadRequest { WTFMove(frameLoadRequest) }

Did WebKit style change to encourage using initializer lists in the member initializers?

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:661
&gt;&gt; +    Page* newPage = webPage-&gt;corePage()-&gt;chrome().createWindow(*m_frame-&gt;coreFrame(), WTFMove(frameLoadRequest), { }, navigationAction);
&gt; 
&gt; Will revert this change before landing. It is unnecessary to WTFMove() the FrameLoadRequest as Chrome::createWindow() takes a const FrameLoadRequest&amp;.

Why not just make Chrome::createWindow take a FrameLoadRequest&amp;&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322002</commentid>
    <comment_count>4</comment_count>
      <attachid>313573</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-22 12:15:26 -0700</bug_when>
    <thetext>Comment on attachment 313573
Patch

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

&gt;&gt; Source/WebKit/win/Plugins/PluginView.h:84
&gt;&gt; +            : m_frameLoadRequest { WTFMove(frameLoadRequest) }
&gt; 
&gt; Did WebKit style change to encourage using initializer lists in the member initializers?

This came up in Daniel’s last patch too.

We are always defining WebKit style live as a team. Some of us are preferring the brace syntax rather than the parentheses, specifically because the parentheses syntax silently allows certain type conversions that must be made explicit in the brace syntax. Because of that, I prefer braces almost any place we can use them, including here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322003</commentid>
    <comment_count>5</comment_count>
      <attachid>313573</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-22 12:17:08 -0700</bug_when>
    <thetext>Comment on attachment 313573
Patch

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

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:661
&gt;&gt;&gt; +    Page* newPage = webPage-&gt;corePage()-&gt;chrome().createWindow(*m_frame-&gt;coreFrame(), WTFMove(frameLoadRequest), { }, navigationAction);
&gt;&gt; 
&gt;&gt; Will revert this change before landing. It is unnecessary to WTFMove() the FrameLoadRequest as Chrome::createWindow() takes a const FrameLoadRequest&amp;.
&gt; 
&gt; Why not just make Chrome::createWindow take a FrameLoadRequest&amp;&amp;?

I think in general we wouldn’t want functions to take ownership of an object when they simply need to examine the object. Just as if something can take a const*, we want to use that instead of a non-const *.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322009</commentid>
    <comment_count>6</comment_count>
      <attachid>313573</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-22 12:34:42 -0700</bug_when>
    <thetext>Comment on attachment 313573
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:1252
&gt;&gt;&gt; +        FrameLoadRequest newFrameLoadRequest = WTFMove(frameLoadRequest);
&gt;&gt; 
&gt;&gt; Will change this to use the move constructor before landing:
&gt;&gt; 
&gt;&gt; FrameLoadRequest newFrameLoadRequest { WTFMove(frameLoadRequest) };
&gt;&gt; 
&gt;&gt; (Note we do not need to explicitly define this local. I kept this local as I thought that it improves the readability of the code by making it more explicit that we are repurposes the FrameLoadRequest. Let me know if it is preferred to remove this local.)
&gt; 
&gt; Either way seems ok to me.  You removed a local variable in createWindow and removing it here seems consistent.

Will remove it to make consistent with the code change in WebCore::createWindow().

&gt;&gt; Source/WebKit/win/Plugins/PluginView.h:84
&gt;&gt; +            : m_frameLoadRequest { WTFMove(frameLoadRequest) }
&gt; 
&gt; Did WebKit style change to encourage using initializer lists in the member initializers?

See bug #173564, comment 14. We should bring this up on webkit-dev for discussion.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:661
&gt;&gt;&gt; +    Page* newPage = webPage-&gt;corePage()-&gt;chrome().createWindow(*m_frame-&gt;coreFrame(), WTFMove(frameLoadRequest), { }, navigationAction);
&gt;&gt; 
&gt;&gt; Will revert this change before landing. It is unnecessary to WTFMove() the FrameLoadRequest as Chrome::createWindow() takes a const FrameLoadRequest&amp;.
&gt; 
&gt; Why not just make Chrome::createWindow take a FrameLoadRequest&amp;&amp;?

I was wavering on having Chrome::createWindow() take a FrameLoadRequest&amp;&amp; (and hence inadvertently kept the WTFMove() I added in this line). I chose not to change the prototype of Chrome::createWindow() and have it continue to take a cont FrameLoadRequest&amp; because this function does not perform an actual load and hence I do not see the need for it to take ownership of the FrameLoadRequest. Chrome::createWindow() passes the FrameLoadRequest, which represents the frame that requested the new window, to the embedding client should the embedding client wish to make use of this info when deciding whether to actually create the new window. It seems reasonable that the caller keeps ownership of the FrameLoadRequest in this case to do as they wish. For instance, when you use the context menu to open a hyperlink in a new window we ultimately call into &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/page/ContextMenuController.cpp?rev=218649#L186&gt; which uses the same FrameLoadRequest to ask the embedding client to create a new window and initiate a load in the new window if the embedding client created it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322019</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-06-22 12:45:22 -0700</bug_when>
    <thetext>Committed r218713: &lt;http://trac.webkit.org/changeset/218713&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322020</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-22 12:45:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/32930446&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340828</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-08-21 16:39:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 313573 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313573&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/win/Plugins/PluginView.h:84
&gt; &gt;&gt; +            : m_frameLoadRequest { WTFMove(frameLoadRequest) }
&gt; &gt; 
&gt; &gt; Did WebKit style change to encourage using initializer lists in the member initializers?
&gt; 
&gt; This came up in Daniel’s last patch too.
&gt; 
&gt; We are always defining WebKit style live as a team. Some of us are
&gt; preferring the brace syntax rather than the parentheses, specifically
&gt; because the parentheses syntax silently allows certain type conversions that
&gt; must be made explicit in the brace syntax. Because of that, I prefer braces
&gt; almost any place we can use them, including here.

If this is the policy, can we put it in the style guide?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342061</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-24 09:32:25 -0700</bug_when>
    <thetext>I’m not sure that “some of us” and “I prefer” justifies saying this is “the policy”, but I would support making it official if there is some consensus we should move this way.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313573</attachid>
            <date>2017-06-21 17:36:22 -0700</date>
            <delta_ts>2017-06-22 08:16:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173682-20170621173621.patch</filename>
            <type>text/plain</type>
            <size>49938</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk3OTM4NGY1MWUzYWM4
YTc1NmIzYzUyNjJlZWNmOWViMjYzYTE3OC4uYTQ0MmU2MTA5OTQ2MTNjOGY3OWU0YTBkMTdkNzll
MGU1YmMzN2YxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDE3LTA2LTIxICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBNYWtlIEZyYW1lTG9hZFJl
cXVlc3QgYSBtb3ZlLW9ubHkgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTczNjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQSBGcmFtZUxvYWRSZXF1ZXN0IGdyb3VwcyB0b2dldGhlciB0aGUgaW5m
b3JtYXRpb24gdG8gcGVyZm9ybSBhIGxvYWQgaW50byBhIHNpbmdsZSBvYmplY3QKKyAgICAgICAg
dGhhdCBpcyBtb3JlIG1hbmFnZWFibGUgdG8gcGFzcyBhcm91bmQgdGhhbiBpdHMgY29uc3RpdHVl
bnQgcGFydHMuIENvZGUgdGhhdCByZWNlaXZlcyBhCisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
aXMgZXhwZWN0ZWQgdG8gZXh0cmFjdCBvdXQgdGhlIGluZm9ybWF0aW9uIGl0IG5lZWRzIHRvIGNv
bXBsZXRlIGl0cyB0YXNrLgorICAgICAgICBBbmQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBy
ZS11c2UgdGhlIHNhbWUgRnJhbWVMb2FkUmVxdWVzdCBvYmplY3QgZm9yIG1vcmUgdGhhbiBvbmUK
KyAgICAgICAgbG9hZC4gVGhlcmVmb3JlLCBpdCBpcyBzdWZmaWNpZW50IHRvIG1ha2UgRnJhbWVM
b2FkUmVxdWVzdCBhIG1vdmUtb25seSB0eXBlLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6b3BlbkluTmV3VGFiKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VB
Z2VudDo6bmF2aWdhdGUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRSZXF1ZXN0Lmg6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpjaGFuZ2VMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
dXJsU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRv
Q2hpbGRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6bG9hZFBvc3RSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdpbmRvdyk6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL05hdmln
YXRpb25TY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdGlvblNjaGVkdWxl
cjo6c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Blbk5ld1dpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01X
aW5kb3c6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgICogcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VySW5wdXRCcmlkZ2U6OmxvYWRSZXF1ZXN0KToKKyAg
ICAgICAgKiByZXBsYXkvVXNlcklucHV0QnJpZGdlLmg6CisKKzIwMTctMDYtMjEgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCiAgICAgICAgIENoYW5nZSBGcmFtZUxvYWRSZXF1
ZXN0IGZyb20gYSBzdHJ1Y3QgdG8gYSBjbGFzcwogCiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
aXMgdW5kZXJ1dGlsaXppbmcgdGhlIHB1cnBvc2Ugb2YgYSBzdHJ1Y3QgLSBkZWZhdWx0IHZpc2li
aWxpdHkgb2YKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwppbmRleCA0MDk1OTAxMjdiYjk4NTRhNmY4NmJiNWEyNWU3
YzRkY2M2Yzk4YjkzLi5mZTFiNGZkZjU3N2ZiN2JkMDZjZjJiZGMwNjFmZWM2NTYzYjlhODI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9pb3MvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjEgQEAKIDIwMTctMDYtMjEgIERhbmllbCBCYXRl
cyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCisgICAgICAgIE1ha2UgRnJhbWVMb2FkUmVxdWVzdCBh
IG1vdmUtb25seSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzM2ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBIEZyYW1lTG9hZFJlcXVlc3QgZ3JvdXBzIHRvZ2V0aGVyIHRoZSBpbmZvcm1hdGlv
biB0byBwZXJmb3JtIGEgbG9hZCBpbnRvIGEgc2luZ2xlIG9iamVjdAorICAgICAgICB0aGF0IGlz
IG1vcmUgbWFuYWdlYWJsZSB0byBwYXNzIGFyb3VuZCB0aGFuIGl0cyBjb25zdGl0dWVudCBwYXJ0
cy4gQ29kZSB0aGF0IHJlY2VpdmVzIGEKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBpcyBleHBl
Y3RlZCB0byBleHRyYWN0IG91dCB0aGUgaW5mb3JtYXRpb24gaXQgbmVlZHMgdG8gY29tcGxldGUg
aXRzIHRhc2suCisgICAgICAgIEFuZCBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHJlLXVzZSB0
aGUgc2FtZSBGcmFtZUxvYWRSZXF1ZXN0IG9iamVjdCBmb3IgbW9yZSB0aGFuIG9uZQorICAgICAg
ICBsb2FkLiBUaGVyZWZvcmUsIGl0IGlzIHN1ZmZpY2llbnQgdG8gbWFrZSBGcmFtZUxvYWRSZXF1
ZXN0IGEgbW92ZS1vbmx5IHR5cGUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXdQbGFj
ZWhvbGRlci5tbToKKyAgICAgICAgKC1bV2ViUERGVmlld1BsYWNlaG9sZGVyIHNpbXVsYXRlQ2xp
Y2tPbkxpbmtUb1VSTDpdKToKKworMjAxNy0wNi0yMSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0Bh
cHBsZS5jb20+CisKICAgICAgICAgQ2xlYW51cCBGcmFtZUxvYWRSZXF1ZXN0CiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM1NjQKICAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzMyOTAzNTcwPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDNiZTVjNmVkZTJjYzc3
NjczMTFhM2YyOWY4Zjg5MzkyYTBlNzkzYTkuLjYxMGE3YzIxOTdlNzE3OThiNGVhYzRmNzBhYzI3
YTJkY2Q2YjFkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0wNi0y
MSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBGcmFt
ZUxvYWRSZXF1ZXN0IGEgbW92ZS1vbmx5IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzY4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEEgRnJhbWVMb2FkUmVxdWVzdCBncm91cHMgdG9nZXRoZXIg
dGhlIGluZm9ybWF0aW9uIHRvIHBlcmZvcm0gYSBsb2FkIGludG8gYSBzaW5nbGUgb2JqZWN0Cisg
ICAgICAgIHRoYXQgaXMgbW9yZSBtYW5hZ2VhYmxlIHRvIHBhc3MgYXJvdW5kIHRoYW4gaXRzIGNv
bnN0aXR1ZW50IHBhcnRzLiBDb2RlIHRoYXQgcmVjZWl2ZXMgYQorICAgICAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGlzIGV4cGVjdGVkIHRvIGV4dHJhY3Qgb3V0IHRoZSBpbmZvcm1hdGlvbiBpdCBuZWVk
cyB0byBjb21wbGV0ZSBpdHMgdGFzay4KKyAgICAgICAgQW5kIGl0IGRvZXMgbm90IG1ha2Ugc2Vu
c2UgdG8gcmUtdXNlIHRoZSBzYW1lIEZyYW1lTG9hZFJlcXVlc3Qgb2JqZWN0IGZvciBtb3JlIHRo
YW4gb25lCisgICAgICAgIGxvYWQuIFRoZXJlZm9yZSwgaXQgaXMgc3VmZmljaWVudCB0byBtYWtl
IEZyYW1lTG9hZFJlcXVlc3QgYSBtb3ZlLW9ubHkgdHlwZS4KKworICAgICAgICAqIFBsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciB3
ZWJQbHVnSW5Db250YWluZXJMb2FkUmVxdWVzdDppbkZyYW1lOl0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViUERGVmlldy5tbToKKyAgICAgICAgKC1bV2ViUERGVmlldyBQREZWaWV3V2lsbENsaWNr
T25MaW5rOndpdGhVUkw6XSk6CisKIDIwMTctMDYtMjEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgRFJUIGFsd2F5cyBsb2dzIHJBRiBzdXNwZW5z
aW9uIGRlYnVnZ2luZyBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTJlZDFiYTg4OTRkMGYwMmY5
NGRjOTJhYTMzYTU0ZjI0NTc4ODcyNy4uYWFiYjNhZTgwZWM0NTk3ZjEwNjg0ZTAyMzJlNzdkNGFi
ZWVkOWZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDE3LTA2LTIxICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAorICAgICAgICBNYWtlIEZyYW1lTG9h
ZFJlcXVlc3QgYSBtb3ZlLW9ubHkgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQSBGcmFtZUxvYWRSZXF1ZXN0IGdyb3VwcyB0b2dldGhlciB0aGUg
aW5mb3JtYXRpb24gdG8gcGVyZm9ybSBhIGxvYWQgaW50byBhIHNpbmdsZSBvYmplY3QKKyAgICAg
ICAgdGhhdCBpcyBtb3JlIG1hbmFnZWFibGUgdG8gcGFzcyBhcm91bmQgdGhhbiBpdHMgY29uc3Rp
dHVlbnQgcGFydHMuIENvZGUgdGhhdCByZWNlaXZlcyBhCisgICAgICAgIEZyYW1lTG9hZFJlcXVl
c3QgaXMgZXhwZWN0ZWQgdG8gZXh0cmFjdCBvdXQgdGhlIGluZm9ybWF0aW9uIGl0IG5lZWRzIHRv
IGNvbXBsZXRlIGl0cyB0YXNrLgorICAgICAgICBBbmQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0
byByZS11c2UgdGhlIHNhbWUgRnJhbWVMb2FkUmVxdWVzdCBvYmplY3QgZm9yIG1vcmUgdGhhbiBv
bmUKKyAgICAgICAgbG9hZC4gVGhlcmVmb3JlLCBpdCBpcyBzdWZmaWNpZW50IHRvIG1ha2UgRnJh
bWVMb2FkUmVxdWVzdCBhIG1vdmUtb25seSB0eXBlLgorCisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0
VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KToKKyAgICAgICAgKiBQbHVnaW5z
L1BsdWdpblZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJl
cXVlc3QpOgorCisyMDE3LTA2LTIxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
KwogICAgICAgICBDbGVhbnVwIEZyYW1lTG9hZFJlcXVlc3QKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzU2NAogICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzI5MDM1NzA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTZjOTQ0YTM5NGMwNDAyNDdlM2E1NWVjY2VhYTY4
MGVmNzljMjI3OS4uZjNhOWYxNThkNWIxZjIyN2ZkNzMwMzE3YTRiZDAzOTVhZWIyNmI2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA2LTIxICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEZyYW1lTG9hZFJlcXVlc3QgYSBtb3ZlLW9u
bHkgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTczNjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QSBGcmFtZUxvYWRSZXF1ZXN0IGdyb3VwcyB0b2dldGhlciB0aGUgaW5mb3JtYXRpb24gdG8gcGVy
Zm9ybSBhIGxvYWQgaW50byBhIHNpbmdsZSBvYmplY3QKKyAgICAgICAgdGhhdCBpcyBtb3JlIG1h
bmFnZWFibGUgdG8gcGFzcyBhcm91bmQgdGhhbiBpdHMgY29uc3RpdHVlbnQgcGFydHMuIENvZGUg
dGhhdCByZWNlaXZlcyBhCisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgaXMgZXhwZWN0ZWQgdG8g
ZXh0cmFjdCBvdXQgdGhlIGluZm9ybWF0aW9uIGl0IG5lZWRzIHRvIGNvbXBsZXRlIGl0cyB0YXNr
LgorICAgICAgICBBbmQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byByZS11c2UgdGhlIHNhbWUg
RnJhbWVMb2FkUmVxdWVzdCBvYmplY3QgZm9yIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgbG9hZC4g
VGhlcmVmb3JlLCBpdCBpcyBzdWZmaWNpZW50IHRvIG1ha2UgRnJhbWVMb2FkUmVxdWVzdCBhIG1v
dmUtb25seSB0eXBlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpVUkxSZXF1ZXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpVUkxSZXF1ZXN0OjpVUkxSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGVyZm9ybUZyYW1lTG9hZFVSTFJlcXVlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpsb2FkVVJMKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRlUGFnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3Rvcjo6b3BlbkluTmV3VGFiKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmxvYWRSZXF1ZXN0KToK
KwogMjAxNy0wNi0yMSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjE4NjA2KTogM0QgVG91Y2ggYWN0aW9uIG1lbnUgZm9yIGxp
bmtzIGlzIG1pc3NpbmcgaXRlbXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAppbmRleCAyOWRjYjFkMjZiM2Fk
NDcyZDg4NjgyNjU0NThjMjZhZDBjZGFhNTZjLi43MDYzZjdjN2JkNzgwZmJlNWIyOWY1NDRmYTg4
NDQ3MjYyNDA1YWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5n
JiB1cmwpCiAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgbWFpbkZyYW1l
LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCgpLCBBU0NJSUxp
dGVyYWwoIl9ibGFuayIpLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5v
LCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5l
d0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkTm90QWxsb3cgfTsKIAogICAgIGJvb2wgY3JlYXRlZDsKLSAgICBSZWZQdHI8RnJhbWU+
IGZyYW1lID0gV2ViQ29yZTo6Y3JlYXRlV2luZG93KG1haW5GcmFtZSwgbWFpbkZyYW1lLCBmcmFt
ZUxvYWRSZXF1ZXN0LCB7IH0sIGNyZWF0ZWQpOworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBX
ZWJDb3JlOjpjcmVhdGVXaW5kb3cobWFpbkZyYW1lLCBtYWluRnJhbWUsIFdURk1vdmUoZnJhbWVM
b2FkUmVxdWVzdCksIHsgfSwgY3JlYXRlZCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgLy8gRklYTUU6IFdoeSBk
byB3ZSBjb21wdXRlIHRoZSBhYnNvbHV0ZSBVUkwgd2l0aCByZXNwZWN0IHRvIHxmcmFtZXwgaW5z
dGVhZCBvZiB8bWFpbkZyYW1lfD8KICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0
IHsgZnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkgfTsKICAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QyIHsgbWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJfc2VsZiIpLCBMb2NrSGlz
dG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxs
b3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxv
dywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKLSAgICBm
cmFtZS0+bG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oZnJhbWVMb2FkUmVxdWVzdDIpOworICAgIGZy
YW1lLT5sb2FkZXIoKS5jaGFuZ2VMb2NhdGlvbihXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QyKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZs
b2F0IHgsIGZsb2F0IHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCmluZGV4IGNjM2JlM2Y0NmNlM2U0MTM5N2QxNTZlZmVjYTVhYTU1NDczM2Ux
NTQuLjZkODFmYTFlNGNmN2IwNjE3YmI2ZmQzMTk1ODVjODEzMjFkOWM0YTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00MjQsNyAr
NDI0LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB1cmwpCiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0
IHsgZnJhbWUuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSB9OwogICAgIEZyYW1lTG9hZFJl
cXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7IGZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksIHJlc291cmNlUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJfc2VsZiIpLCBMb2NrSGlzdG9yeTo6
Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZp
Z2F0aW9uVG9JbnZhbGlkVVJMOjpObywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBTaG91
bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdyB9OwotICAgIGZyYW1lLmxv
YWRlcigpLmNoYW5nZUxvY2F0aW9uKGZyYW1lTG9hZFJlcXVlc3QpOworICAgIGZyYW1lLmxvYWRl
cigpLmNoYW5nZUxvY2F0aW9uKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwogfQogCiBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JD
b29raWUoY29uc3QgQ29va2llJiBjb29raWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZFJlcXVlc3QuaAppbmRleCBmYmZjMjAxMzkwMmFhOGVkNjNmNzAzMTdjZTIxYTRhY2Q0NWQ3ZTZk
Li5kNGY4MjY0YTJlYzJhNjRkMGY4MjM2MmY1N2IyNDRlYzQ0N2M1Y2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRSZXF1ZXN0LmgKQEAgLTI5LDEyICsyOSwxNCBAQAogI2luY2x1
ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU3Vic3RpdHV0ZURhdGEuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKIAogY2xhc3MgRnJhbWVMb2FkUmVx
dWVzdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhbWVMb2FkUmVxdWVzdCkKIHB1Ymxp
YzoKICAgICBGcmFtZUxvYWRSZXF1ZXN0KFNlY3VyaXR5T3JpZ2luJiByZXF1ZXN0ZXIsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFt
ZSwgTG9ja0hpc3RvcnkgbG9ja0hpc3RvcnksIExvY2tCYWNrRm9yd2FyZExpc3QgbG9ja0JhY2tG
b3J3YXJkTGlzdCwgU2hvdWxkU2VuZFJlZmVycmVyIHNob3VsZFNlbmRSZWZlcnJlciwgQWxsb3dO
YXZpZ2F0aW9uVG9JbnZhbGlkVVJMIGFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCwgTmV3RnJh
bWVPcGVuZXJQb2xpY3kgbmV3RnJhbWVPcGVuZXJQb2xpY3ksIFNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSwgU2hvdWxkUmVwbGFjZURvY3Vt
ZW50SWZKYXZhU2NyaXB0VVJMIHNob3VsZFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCA9
IFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBkb3du
bG9hZEF0dHJpYnV0ZSA9IHsgfSkKICAgICAgICAgOiBtX3JlcXVlc3RlciB7IG1ha2VSZWYocmVx
dWVzdGVyKSB9CkBAIC01MiwyMiArNTQsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIFdFQkNPUkVf
RVhQT1JUIEZyYW1lTG9hZFJlcXVlc3QoRnJhbWUmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgPSBTdWJz
dGl0dXRlRGF0YSgpKTsKIAotICAgIEZyYW1lTG9hZFJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgb3RoZXIpCi0gICAgICAgIDogbV9yZXF1ZXN0ZXIgeyBvdGhlci5tX3JlcXVlc3Rlci5j
b3B5UmVmKCkgfQotICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0IHsgb3RoZXIubV9yZXNvdXJj
ZVJlcXVlc3QgfQotICAgICAgICAsIG1fZnJhbWVOYW1lIHsgb3RoZXIubV9mcmFtZU5hbWUgfQot
ICAgICAgICAsIG1fc3Vic3RpdHV0ZURhdGEgeyBvdGhlci5tX3N1YnN0aXR1dGVEYXRhIH0KLSAg
ICAgICAgLCBtX3Nob3VsZENoZWNrTmV3V2luZG93UG9saWN5IHsgb3RoZXIubV9zaG91bGRDaGVj
a05ld1dpbmRvd1BvbGljeSB9Ci0gICAgICAgICwgbV9sb2NrSGlzdG9yeSB7IG90aGVyLm1fbG9j
a0hpc3RvcnkgfQotICAgICAgICAsIG1fbG9ja0JhY2tGb3J3YXJkTGlzdCB7IG90aGVyLm1fbG9j
a0JhY2tGb3J3YXJkTGlzdCB9Ci0gICAgICAgICwgbV9zaG91bGRTZW5kUmVmZXJyZXIgeyBvdGhl
ci5tX3Nob3VsZFNlbmRSZWZlcnJlciB9Ci0gICAgICAgICwgbV9hbGxvd05hdmlnYXRpb25Ub0lu
dmFsaWRVUkwgeyBvdGhlci5tX2FsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCB9Ci0gICAgICAg
ICwgbV9uZXdGcmFtZU9wZW5lclBvbGljeSB7IG90aGVyLm1fbmV3RnJhbWVPcGVuZXJQb2xpY3kg
fQotICAgICAgICAsIG1fc2hvdWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMIHsgb3Ro
ZXIubV9zaG91bGRSZXBsYWNlRG9jdW1lbnRJZkphdmFTY3JpcHRVUkwgfQotICAgICAgICAsIG1f
c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSB7IG90aGVyLm1fc2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeSB9Ci0gICAgICAgICwgbV9kb3dubG9hZEF0dHJpYnV0ZSB7IG90aGVyLm1fZG93
bmxvYWRBdHRyaWJ1dGUgfQotICAgIHsKLSAgICB9CisgICAgRnJhbWVMb2FkUmVxdWVzdChGcmFt
ZUxvYWRSZXF1ZXN0JiYpID0gZGVmYXVsdDsKKyAgICBGcmFtZUxvYWRSZXF1ZXN0JiBvcGVyYXRv
cj0oRnJhbWVMb2FkUmVxdWVzdCYmKSA9IGRlZmF1bHQ7CiAKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVzdC5pc0VtcHR5KCk7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYjQxMDg5NGI5Njk3ZDgxYmFjYjQzYmU4NTVh
M2Y4YTIyZGQ0YzQ3Zi4uYzZmYmYzMzA4NDRlNzkzYjcwYWUyZDIzZGQxNTQ5NmY3MDMxNjM2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zNTQsOSArMzU0LDkgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICB9CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNoYW5nZUxvY2F0aW9uKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmIHJlcXVlc3QpCit2b2lkIEZyYW1lTG9hZGVyOjpjaGFuZ2VMb2NhdGlvbihGcmFtZUxvYWRS
ZXF1ZXN0JiYgcmVxdWVzdCkKIHsKLSAgICB1cmxTZWxlY3RlZChyZXF1ZXN0LCBudWxscHRyKTsK
KyAgICB1cmxTZWxlY3RlZChXVEZNb3ZlKHJlcXVlc3QpLCBudWxscHRyKTsKIH0KIAogdm9pZCBG
cmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGFz
c2VkVGFyZ2V0LCBFdmVudCogdHJpZ2dlcmluZ0V2ZW50LCBMb2NrSGlzdG9yeSBsb2NrSGlzdG9y
eSwgTG9ja0JhY2tGb3J3YXJkTGlzdCBsb2NrQmFja0ZvcndhcmRMaXN0LCBTaG91bGRTZW5kUmVm
ZXJyZXIgc2hvdWxkU2VuZFJlZmVycmVyLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5IHNo
b3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3ksIHN0ZDo6b3B0aW9uYWw8TmV3RnJhbWVPcGVuZXJQ
b2xpY3k+IG9wZW5lclBvbGljeSwgY29uc3QgQXRvbWljU3RyaW5nJiBkb3dubG9hZEF0dHJpYnV0
ZSkKQEAgLTM2NSwxMCArMzY1LDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGFzc2VkVGFyZ2V0LCBFdmVudCoKICAgICB1cmxT
ZWxlY3RlZChGcmFtZUxvYWRSZXF1ZXN0KG1fZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSwgUmVzb3VyY2VSZXF1ZXN0KHVybCksIHBhc3NlZFRhcmdldCwgbG9ja0hpc3RvcnksIGxv
Y2tCYWNrRm9yd2FyZExpc3QsIHNob3VsZFNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9J
bnZhbGlkVVJMOjpZZXMsIG5ld0ZyYW1lT3BlbmVyUG9saWN5LCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5LCBEb05vdFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCwgZG93bmxvYWRB
dHRyaWJ1dGUpLCB0cmlnZ2VyaW5nRXZlbnQpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cmxT
ZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBwYXNzZWRSZXF1ZXN0LCBFdmVudCogdHJp
Z2dlcmluZ0V2ZW50KQordm9pZCBGcmFtZUxvYWRlcjo6dXJsU2VsZWN0ZWQoRnJhbWVMb2FkUmVx
dWVzdCYmIGZyYW1lUmVxdWVzdCwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCkKIHsKICAgICBSZWY8
RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVl
c3QocGFzc2VkUmVxdWVzdCk7CiAKICAgICBpZiAobV9mcmFtZS5zY3JpcHQoKS5leGVjdXRlSWZK
YXZhU2NyaXB0VVJMKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgZnJhbWVS
ZXF1ZXN0LnNob3VsZFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVSTCgpKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzc5LDcgKzM3OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVybFNlbGVjdGVk
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHBhc3NlZFJlcXVlc3QsIEV2ZW50KiB0cmlnCiAgICAg
YWRkSFRUUE9yaWdpbklmTmVlZGVkKGZyYW1lUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgb3V0
Z29pbmdPcmlnaW4oKSk7CiAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQ
b2xpY3koKS0+dXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKGZyYW1lUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJbnNlY3VyZVJlcXVlc3RUeXBl
OjpOYXZpZ2F0aW9uKTsKIAotICAgIGxvYWRGcmFtZVJlcXVlc3QoZnJhbWVSZXF1ZXN0LCB0cmln
Z2VyaW5nRXZlbnQsIG51bGxwdHIpOworICAgIGxvYWRGcmFtZVJlcXVlc3QoV1RGTW92ZShmcmFt
ZVJlcXVlc3QpLCB0cmlnZ2VyaW5nRXZlbnQsIG51bGxwdHIpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyOjpzdWJtaXRGb3JtKFJlZjxGb3JtU3VibWlzc2lvbj4mJiBzdWJtaXNzaW9uKQpAQCAtOTI0
LDcgKzkyMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGCiAgICAgfQogCiAgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgbV9mcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLCB7IHVybCB9LCBBU0NJSUxpdGVyYWwoIl9zZWxmIiksIExvY2tIaXN0b3J5OjpO
bywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6WWVzLCBTaG91bGRTZW5kUmVmZXJyZXI6Ok1heWJlU2Vu
ZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVu
ZXJQb2xpY3k6OlN1cHByZXNzLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRO
b3RBbGxvdyB9OwotICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmxvYWRVUkwoZnJhbWVMb2FkUmVx
dWVzdCwgcmVmZXJlciwgRnJhbWVMb2FkVHlwZTo6UmVkaXJlY3RXaXRoTG9ja2VkQmFja0Zvcndh
cmRMaXN0LCAwLCAwKTsKKyAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5sb2FkVVJMKFdURk1vdmUo
ZnJhbWVMb2FkUmVxdWVzdCksIHJlZmVyZXIsIEZyYW1lTG9hZFR5cGU6OlJlZGlyZWN0V2l0aExv
Y2tlZEJhY2tGb3J3YXJkTGlzdCwgMCwgMCk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUp
IHx8IEVOQUJMRShNSFRNTCkKQEAgLTExNTcsNyArMTE1Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnNldHVwRm9yUmVwbGFjZSgpCiAgICAgZGV0YWNoQ2hpbGRyZW4oKTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlcjo6bG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0
LCBFdmVudCogZXZlbnQsIEZvcm1TdGF0ZSogZm9ybVN0YXRlKQordm9pZCBGcmFtZUxvYWRlcjo6
bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0JiYgcmVxdWVzdCwgRXZlbnQqIGV2ZW50
LCBGb3JtU3RhdGUqIGZvcm1TdGF0ZSkKIHsKICAgICAvLyBQcm90ZWN0IGZyYW1lIGZyb20gZ2V0
dGluZyBibG93biBhd2F5IGluc2lkZSBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBpbiBsb2FkV2l0
aERvY3VtZW50TG9hZGVyLgogICAgIGF1dG8gcHJvdGVjdEZyYW1lID0gbWFrZVJlZihtX2ZyYW1l
KTsKQEAgLTExODYsMTcgKzExODUsMTggQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEZyYW1lUmVx
dWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBFdmVudCogZXZlbnQKICAgICBl
bHNlCiAgICAgICAgIGxvYWRUeXBlID0gRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQ7CiAKKyAgICBT
dHJpbmcgZnJhbWVOYW1lID0gcmVxdWVzdC5mcmFtZU5hbWUoKTsKICAgICBpZiAocmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKQotICAgICAgICBsb2FkUG9z
dFJlcXVlc3QocmVxdWVzdCwgcmVmZXJyZXIsIGxvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRlKTsK
KyAgICAgICAgbG9hZFBvc3RSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCksIHJlZmVycmVyLCBsb2Fk
VHlwZSwgZXZlbnQsIGZvcm1TdGF0ZSk7CiAgICAgZWxzZQotICAgICAgICBsb2FkVVJMKHJlcXVl
c3QsIHJlZmVycmVyLCBsb2FkVHlwZSwgZXZlbnQsIGZvcm1TdGF0ZSk7CisgICAgICAgIGxvYWRV
UkwoV1RGTW92ZShyZXF1ZXN0KSwgcmVmZXJyZXIsIGxvYWRUeXBlLCBldmVudCwgZm9ybVN0YXRl
KTsKIAogICAgIC8vIEZJWE1FOiBJdCdzIHBvc3NpYmxlIHRoaXMgdGFyZ2V0RnJhbWUgd2lsbCBu
b3QgYmUgdGhlIHNhbWUgZnJhbWUgdGhhdCB3YXMgdGFyZ2V0ZWQgYnkgdGhlIGFjdHVhbAogICAg
IC8vIGxvYWQgaWYgZnJhbWUgbmFtZXMgaGF2ZSBjaGFuZ2VkLgogICAgIEZyYW1lKiBzb3VyY2VG
cmFtZSA9IGZvcm1TdGF0ZSA/IGZvcm1TdGF0ZS0+c291cmNlRG9jdW1lbnQoKS5mcmFtZSgpIDog
Jm1fZnJhbWU7CiAgICAgaWYgKCFzb3VyY2VGcmFtZSkKICAgICAgICAgc291cmNlRnJhbWUgPSAm
bV9mcmFtZTsKLSAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBzb3VyY2VGcmFtZS0+bG9hZGVyKCku
ZmluZEZyYW1lRm9yTmF2aWdhdGlvbihyZXF1ZXN0LmZyYW1lTmFtZSgpKTsKKyAgICBGcmFtZSog
dGFyZ2V0RnJhbWUgPSBzb3VyY2VGcmFtZS0+bG9hZGVyKCkuZmluZEZyYW1lRm9yTmF2aWdhdGlv
bihmcmFtZU5hbWUpOwogICAgIGlmICh0YXJnZXRGcmFtZSAmJiB0YXJnZXRGcmFtZSAhPSBzb3Vy
Y2VGcmFtZSkgewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IHRhcmdldEZyYW1lLT5wYWdlKCkp
CiAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS5mb2N1cygpOwpAQCAtMTIxNyw3ICsxMjE3LDcg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6aXNOYXZpZ2F0aW9uQWxsb3dlZCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID09IFBhZ2VEaXNtaXNzYWxU
eXBlOjpOb25lICYmIE5hdmlnYXRpb25EaXNhYmxlcjo6aXNOYXZpZ2F0aW9uQWxsb3dlZCgpOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZy
YW1lTG9hZFJlcXVlc3QsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIEZyYW1lTG9hZFR5cGUgbmV3
TG9hZFR5cGUsIEV2ZW50KiBldmVudCwgRm9ybVN0YXRlKiBmb3JtU3RhdGUpCit2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkVVJMKEZyYW1lTG9hZFJlcXVlc3QmJiBmcmFtZUxvYWRSZXF1ZXN0LCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCBGcmFtZUxvYWRUeXBlIG5ld0xvYWRUeXBlLCBFdmVudCogZXZl
bnQsIEZvcm1TdGF0ZSogZm9ybVN0YXRlKQogewogICAgIGlmIChtX2luU3RvcEFsbExvYWRlcnMp
CiAgICAgICAgIHJldHVybjsKQEAgLTEyNDksOSArMTI0OSw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmxvYWRVUkwoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgY29uc3Qg
U3RyaW5nCiAgICAgLy8gVGhlIHNlYXJjaCBmb3IgYSB0YXJnZXQgZnJhbWUgaXMgZG9uZSBlYXJs
aWVyIGluIHRoZSBjYXNlIG9mIGZvcm0gc3VibWlzc2lvbi4KICAgICBGcmFtZSogdGFyZ2V0RnJh
bWUgPSBpc0Zvcm1TdWJtaXNzaW9uID8gMCA6IGZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVO
YW1lKTsKICAgICBpZiAodGFyZ2V0RnJhbWUgJiYgdGFyZ2V0RnJhbWUgIT0gJm1fZnJhbWUpIHsK
LSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBuZXdGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJl
cXVlc3QpOworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IG5ld0ZyYW1lTG9hZFJlcXVlc3QgPSBX
VEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpOwogICAgICAgICBuZXdGcmFtZUxvYWRSZXF1ZXN0LnNl
dEZyYW1lTmFtZSgiX3NlbGYiKTsKLSAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLmxvYWRV
UkwobmV3RnJhbWVMb2FkUmVxdWVzdCwgcmVmZXJyZXIsIG5ld0xvYWRUeXBlLCBldmVudCwgZm9y
bVN0YXRlKTsKKyAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLmxvYWRVUkwoV1RGTW92ZShu
ZXdGcmFtZUxvYWRSZXF1ZXN0KSwgcmVmZXJyZXIsIG5ld0xvYWRUeXBlLCBldmVudCwgZm9ybVN0
YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMxNCwxMCArMTMxNCw4IEBAIFN1
YnN0aXR1dGVEYXRhIEZyYW1lTG9hZGVyOjpkZWZhdWx0U3Vic3RpdHV0ZURhdGFGb3JVUkwoY29u
c3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIFN1YnN0aXR1dGVEYXRhKFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKGVuY29kZWRTcmNkb2MuZGF0YSgpLCBlbmNvZGVkU3JjZG9jLmxlbmd0aCgpKSwgVVJMKCks
IHJlc3BvbnNlLCBTdWJzdGl0dXRlRGF0YTo6U2Vzc2lvbkhpc3RvcnlWaXNpYmlsaXR5OjpIaWRk
ZW4pOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IHBhc3NlZFJlcXVlc3QpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKEZyYW1lTG9hZFJlcXVlc3Qm
JiByZXF1ZXN0KQogewotICAgIEZyYW1lTG9hZFJlcXVlc3QgcmVxdWVzdChwYXNzZWRSZXF1ZXN0
KTsKLQogICAgIGlmIChtX2luU3RvcEFsbExvYWRlcnMpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTMyNiwxNCArMTMyNCwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIHBhc3NlZFJlcXVlc3QpCiAgICAgICAgIGlmIChmcmFtZSkgewogICAgICAgICAg
ICAgcmVxdWVzdC5zZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeShmYWxzZSk7CiAgICAgICAg
ICAgICBpZiAoJmZyYW1lLT5sb2FkZXIoKSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLmxvYWQocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLmxvYWQoV1RGTW92ZShyZXF1ZXN0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJlcXVlc3Quc2hvdWxkQ2hl
Y2tOZXdXaW5kb3dQb2xpY3koKSkgewotICAgICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbihy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBOYXZpZ2F0aW9uVHlwZTo6T3RoZXIsIHBhc3NlZFJl
cXVlc3Quc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSgpKTsKKyAgICAgICAgTmF2aWdhdGlv
bkFjdGlvbiBhY3Rpb24ocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgTmF2aWdhdGlvblR5cGU6
Ok90aGVyLCByZXF1ZXN0LnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKSk7CiAgICAgICAg
IHBvbGljeUNoZWNrZXIoKS5jaGVja05ld1dpbmRvd1BvbGljeShhY3Rpb24sIHJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCksIG51bGxwdHIsIHJlcXVlc3QuZnJhbWVOYW1lKCksIFt0aGlzXSAoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBGb3JtU3RhdGUqIGZvcm1TdGF0ZSwgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgYm9vbCBz
aG91bGRDb250aW51ZSkgewogICAgICAgICAgICAgY29udGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQ
b2xpY3kocmVxdWVzdCwgZm9ybVN0YXRlLCBmcmFtZU5hbWUsIGFjdGlvbiwgc2hvdWxkQ29udGlu
dWUsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFtZU9wZW5lclBvbGlj
eTo6U3VwcHJlc3MpOwogICAgICAgICB9KTsKQEAgLTI2OTMsNyArMjY5MSw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmFkZEhUVFBVcGdyYWRlSW5zZWN1cmVSZXF1ZXN0c0lmTmVlZGVkKFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzCiAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OlVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RzLCBBU0NJSUxpdGVyYWwoIjEiKSk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBl
LCBFdmVudCogZXZlbnQsIEZvcm1TdGF0ZSogZm9ybVN0YXRlKQordm9pZCBGcmFtZUxvYWRlcjo6
bG9hZFBvc3RSZXF1ZXN0KEZyYW1lTG9hZFJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBTdHJpbmcm
IHJlZmVycmVyLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlLCBFdmVudCogZXZlbnQsIEZvcm1TdGF0
ZSogZm9ybVN0YXRlKQogewogICAgIFN0cmluZyBmcmFtZU5hbWUgPSByZXF1ZXN0LmZyYW1lTmFt
ZSgpOwogICAgIExvY2tIaXN0b3J5IGxvY2tIaXN0b3J5ID0gcmVxdWVzdC5sb2NrSGlzdG9yeSgp
OwpAQCAtMzY2NCw3ICszNjYyLDcgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudDo6aGFzSFRNTFZp
ZXcoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8RnJhbWU+IGNyZWF0ZVdp
bmRvdyhGcmFtZSYgb3BlbmVyRnJhbWUsIEZyYW1lJiBsb29rdXBGcmFtZSwgY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2luZG93RmVhdHVyZXMmIGZlYXR1cmVzLCBib29s
JiBjcmVhdGVkKQorUmVmUHRyPEZyYW1lPiBjcmVhdGVXaW5kb3coRnJhbWUmIG9wZW5lckZyYW1l
LCBGcmFtZSYgbG9va3VwRnJhbWUsIEZyYW1lTG9hZFJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBX
aW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMsIGJvb2wmIGNyZWF0ZWQpCiB7CiAgICAgQVNTRVJUKCFm
ZWF0dXJlcy5kaWFsb2cgfHwgcmVxdWVzdC5mcmFtZU5hbWUoKS5pc0VtcHR5KCkpOwogCkBAIC0z
Njg4LDE5ICszNjg2LDE5IEBAIFJlZlB0cjxGcmFtZT4gY3JlYXRlV2luZG93KEZyYW1lJiBvcGVu
ZXJGcmFtZSwgRnJhbWUmIGxvb2t1cEZyYW1lLCBjb25zdCBGcmFtZUxvCiAgICAgfQogCiAgICAg
Ly8gRklYTUU6IFNldHRpbmcgdGhlIHJlZmVycmVyIHNob3VsZCBiZSB0aGUgY2FsbGVyJ3MgcmVz
cG9uc2liaWxpdHkuCi0gICAgRnJhbWVMb2FkUmVxdWVzdCByZXF1ZXN0V2l0aFJlZmVycmVyID0g
cmVxdWVzdDsKICAgICBTdHJpbmcgcmVmZXJyZXIgPSBTZWN1cml0eVBvbGljeTo6Z2VuZXJhdGVS
ZWZlcnJlckhlYWRlcihvcGVuZXJGcmFtZS5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCBy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpLCBvcGVuZXJGcmFtZS5sb2FkZXIoKS5vdXRn
b2luZ1JlZmVycmVyKCkpOwogICAgIGlmICghcmVmZXJyZXIuaXNFbXB0eSgpKQotICAgICAgICBy
ZXF1ZXN0V2l0aFJlZmVycmVyLnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBSZWZlcnJlcihyZWZl
cnJlcik7Ci0gICAgRnJhbWVMb2FkZXI6OmFkZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0V2l0
aFJlZmVycmVyLnJlc291cmNlUmVxdWVzdCgpLCBvcGVuZXJGcmFtZS5sb2FkZXIoKS5vdXRnb2lu
Z09yaWdpbigpKTsKLSAgICBGcmFtZUxvYWRlcjo6YWRkSFRUUFVwZ3JhZGVJbnNlY3VyZVJlcXVl
c3RzSWZOZWVkZWQocmVxdWVzdFdpdGhSZWZlcnJlci5yZXNvdXJjZVJlcXVlc3QoKSk7CisgICAg
ICAgIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsK
KyAgICBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCksIG9wZW5lckZyYW1lLmxvYWRlcigpLm91dGdvaW5nT3JpZ2luKCkpOworICAgIEZy
YW1lTG9hZGVyOjphZGRIVFRQVXBncmFkZUluc2VjdXJlUmVxdWVzdHNJZk5lZWRlZChyZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpKTsKIAogICAgIFBhZ2UqIG9sZFBhZ2UgPSBvcGVuZXJGcmFtZS5w
YWdlKCk7CiAgICAgaWYgKCFvbGRQYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eSA9IHNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3lUb0FwcGx5KG9wZW5lckZyYW1lLCByZXF1
ZXN0LnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3koKSk7Ci0gICAgUGFnZSogcGFnZSA9IG9s
ZFBhZ2UtPmNocm9tZSgpLmNyZWF0ZVdpbmRvdyhvcGVuZXJGcmFtZSwgcmVxdWVzdFdpdGhSZWZl
cnJlciwgZmVhdHVyZXMsIE5hdmlnYXRpb25BY3Rpb24ocmVxdWVzdFdpdGhSZWZlcnJlci5yZXNv
dXJjZVJlcXVlc3QoKSwgTmF2aWdhdGlvblR5cGU6Ok90aGVyLCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5KSk7CisgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24geyByZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLCBOYXZpZ2F0aW9uVHlwZTo6T3RoZXIsIHNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kgfTsKKyAgICBQYWdlKiBwYWdlID0gb2xkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2lu
ZG93KG9wZW5lckZyYW1lLCByZXF1ZXN0LCBmZWF0dXJlcywgYWN0aW9uKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCmluZGV4IDFkMDIwMjkzMTc2NjQxMThmZDQ1NDdhYWQ3M2ViYzBmYmFiZGY5NGQuLjZjYWNk
ZGFkOTliYjIzYzMwNjI5Yjc2YzkyN2FhYmQyNzkyOTBmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCkBAIC0xMDgsMTYgKzEwOCwxNiBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhN
RTogVGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgd2hpY2ggc3RhcnQgbG9hZHMuIFdlIGhhdmUgdG9v
IG1hbnkuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGcmFtZSopOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgbG9hZEZyYW1lUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgRXZlbnQq
LCBGb3JtU3RhdGUqKTsgLy8gQ2FsbGVkIGJ5IHN1Ym1pdEZvcm0sIGNhbGxzIGxvYWRQb3N0UmVx
dWVzdCBhbmQgbG9hZFVSTC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGxvYWRGcmFtZVJlcXVl
c3QoRnJhbWVMb2FkUmVxdWVzdCYmLCBFdmVudCosIEZvcm1TdGF0ZSopOyAvLyBDYWxsZWQgYnkg
c3VibWl0Rm9ybSwgY2FsbHMgbG9hZFBvc3RSZXF1ZXN0IGFuZCBsb2FkVVJMLgogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGxvYWQoRnJhbWVMb2FkUmVxdWVzdCYmKTsKIAogI2lmIEVOQUJMRShX
RUJfQVJDSElWRSkgfHwgRU5BQkxFKE1IVE1MKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbG9h
ZEFyY2hpdmUoUmVmPEFyY2hpdmU+JiYpOwogI2VuZGlmCiAgICAgdW5zaWduZWQgbG9uZyBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VS
ZXNwb25zZSYsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBkYXRhKTsKIAotICAgIHZvaWQgY2hhbmdl
TG9jYXRpb24oY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYpOworICAgIHZvaWQgY2hhbmdlTG9jYXRp
b24oRnJhbWVMb2FkUmVxdWVzdCYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVybFNlbGVj
dGVkKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBFdmVudCosIExvY2tIaXN0b3J5
LCBMb2NrQmFja0ZvcndhcmRMaXN0LCBTaG91bGRTZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3ksIHN0ZDo6b3B0aW9uYWw8TmV3RnJhbWVPcGVuZXJQb2xpY3k+ID0gc3Rk
OjpudWxsb3B0LCBjb25zdCBBdG9taWNTdHJpbmcmIGRvd25sb2FkQXR0cmlidXRlID0gbnVsbEF0
b20pOwogICAgIHZvaWQgc3VibWl0Rm9ybShSZWY8Rm9ybVN1Ym1pc3Npb24+JiYpOwogCkBAIC0z
NTMsMTUgKzM1MywxNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXNwYXRjaERpZENvbW1pdExv
YWQoc3RkOjpvcHRpb25hbDxIYXNJbnNlY3VyZUNvbnRlbnQ+IGluaXRpYWxIYXNJbnNlY3VyZUNv
bnRlbnQpOwogCi0gICAgdm9pZCB1cmxTZWxlY3RlZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jiwg
RXZlbnQqKTsKKyAgICB2b2lkIHVybFNlbGVjdGVkKEZyYW1lTG9hZFJlcXVlc3QmJiwgRXZlbnQq
KTsKIAogICAgIHZvaWQgbG9hZFdpdGhEb2N1bWVudExvYWRlcihEb2N1bWVudExvYWRlciosIEZy
YW1lTG9hZFR5cGUsIEZvcm1TdGF0ZSosIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCk7IC8v
IENhbGxzIGNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeQogICAgIHZvaWQgbG9hZChE
b2N1bWVudExvYWRlciopOyAvLyBDYWxscyBsb2FkV2l0aERvY3VtZW50TG9hZGVyCiAKICAgICB2
b2lkIGxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBOYXZpZ2F0aW9uQWN0aW9uJiwgTG9ja0hpc3RvcnksIEZyYW1lTG9hZFR5cGUsIEZvcm1TdGF0
ZSosIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCk7IC8vIENhbGxzIGxvYWRXaXRoRG9jdW1l
bnRMb2FkZXIKIAotICAgIHZvaWQgbG9hZFBvc3RSZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBGcmFtZUxvYWRUeXBlLCBFdmVudCosIEZvcm1T
dGF0ZSopOwotICAgIHZvaWQgbG9hZFVSTChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwgRnJhbWVMb2FkVHlwZSwgRXZlbnQqLCBGb3JtU3RhdGUqKTsKKyAg
ICB2b2lkIGxvYWRQb3N0UmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0JiYsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIsIEZyYW1lTG9hZFR5cGUsIEV2ZW50KiwgRm9ybVN0YXRlKik7CisgICAgdm9pZCBs
b2FkVVJMKEZyYW1lTG9hZFJlcXVlc3QmJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgRnJhbWVM
b2FkVHlwZSwgRXZlbnQqLCBGb3JtU3RhdGUqKTsKIAogICAgIGJvb2wgc2hvdWxkUmVsb2FkKGNv
bnN0IFVSTCYgY3VycmVudFVSTCwgY29uc3QgVVJMJiBkZXN0aW5hdGlvblVSTCk7CiAKQEAgLTQ2
OSw2ICs0NjksNiBAQCBwcml2YXRlOgogLy8KIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcgdGhp
cyBmdW5jdGlvbiBwYXJ0IG9mIGFuIGFwcHJvcHJpYXRlIGNsYXNzIChub3QgRnJhbWVMb2FkZXIp
CiAvLyBhbmQgbW92aW5nIGl0IHRvIGEgbW9yZSBhcHByb3ByaWF0ZSBsb2NhdGlvbi4KLVJlZlB0
cjxGcmFtZT4gY3JlYXRlV2luZG93KEZyYW1lJiBvcGVuZXJGcmFtZSwgRnJhbWUmIGxvb2t1cEZy
YW1lLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBib29s
JiBjcmVhdGVkKTsKK1JlZlB0cjxGcmFtZT4gY3JlYXRlV2luZG93KEZyYW1lJiBvcGVuZXJGcmFt
ZSwgRnJhbWUmIGxvb2t1cEZyYW1lLCBGcmFtZUxvYWRSZXF1ZXN0JiYsIGNvbnN0IFdpbmRvd0Zl
YXR1cmVzJiwgYm9vbCYgY3JlYXRlZCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNwcAppbmRleCBiZTc5MzI0
OWNmMTI3MDY2NDUyMzY5MzllNTk0YWIyYWJlMDY3YmQ1Li4zNjVjMGQ2NjYyOTM2ODIyMmViMGQy
N2QxM2JkZDRmOTY3ZWVhODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2
aWdhdGlvblNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmlnYXRp
b25TY2hlZHVsZXIuY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KG1fdXJsLCBtX3JlZmVycmVyLCBVc2VQcm90
b2NvbENhY2hlUG9saWN5KTsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3Qo
Km1fc2VjdXJpdHlPcmlnaW4sIHJlc291cmNlUmVxdWVzdCwgIl9zZWxmIiwgbG9ja0hpc3Rvcnko
KSwgbG9ja0JhY2tGb3J3YXJkTGlzdCgpLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0
aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgc2hvdWxk
T3BlbkV4dGVybmFsVVJMcygpKTsKIAotICAgICAgICBmcmFtZS5sb2FkZXIoKS5jaGFuZ2VMb2Nh
dGlvbihmcmFtZVJlcXVlc3QpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5jaGFuZ2VMb2NhdGlv
bihXVEZNb3ZlKGZyYW1lUmVxdWVzdCkpOwogICAgIH0KIAogICAgIHZvaWQgZGlkU3RhcnRUaW1l
cihGcmFtZSYgZnJhbWUsIFRpbWVyJiB0aW1lcikgb3ZlcnJpZGUKQEAgLTE4Myw3ICsxODMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QodXJsKCks
IHJlZmVycmVyKCksIHJlZnJlc2ggPyBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSA6IFVzZVByb3Rv
Y29sQ2FjaGVQb2xpY3kpOwogICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdCgq
c2VjdXJpdHlPcmlnaW4oKSwgcmVzb3VyY2VSZXF1ZXN0LCAiX3NlbGYiLCBsb2NrSGlzdG9yeSgp
LCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRp
b25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIHNob3VsZE9w
ZW5FeHRlcm5hbFVSTHMoKSk7CiAKLSAgICAgICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRp
b24oZnJhbWVSZXF1ZXN0KTsKKyAgICAgICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24o
V1RGTW92ZShmcmFtZVJlcXVlc3QpKTsKICAgICB9CiB9OwogCkBAIC0xOTgsNyArMTk4LDcgQEAg
cHVibGljOgogCiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QodXJsKCks
IHJlZmVycmVyKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpOwogICAgICAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGZyYW1lUmVxdWVzdCgqc2VjdXJpdHlPcmlnaW4oKSwgcmVzb3VyY2VSZXF1ZXN0LCAi
X3NlbGYiLCBsb2NrSGlzdG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJl
ZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBv
bGljeTo6QWxsb3csIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMoKSk7Ci0gICAgICAgIGZyYW1lLmxv
YWRlcigpLmNoYW5nZUxvY2F0aW9uKGZyYW1lUmVxdWVzdCk7CisgICAgICAgIGZyYW1lLmxvYWRl
cigpLmNoYW5nZUxvY2F0aW9uKFdURk1vdmUoZnJhbWVSZXF1ZXN0KSk7CiAgICAgfQogfTsKIApA
QCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVz
b3VyY2VSZXF1ZXN0KHVybCgpLCByZWZlcnJlcigpLCBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7
CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KCpzZWN1cml0eU9yaWdpbigp
LCByZXNvdXJjZVJlcXVlc3QsICJfc2VsZiIsIGxvY2tIaXN0b3J5KCksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QoKSwgTWF5YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6
WWVzLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIHNob3VsZE9wZW5FeHRlcm5hbFVSTHMo
KSk7Ci0gICAgICAgIGZyYW1lLmxvYWRlcigpLmNoYW5nZUxvY2F0aW9uKGZyYW1lUmVxdWVzdCk7
CisgICAgICAgIGZyYW1lLmxvYWRlcigpLmNoYW5nZUxvY2F0aW9uKFdURk1vdmUoZnJhbWVSZXF1
ZXN0KSk7CiAgICAgfQogfTsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsg
cmVxdWVzdGluZ0RvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIHsgfSwgeyB9LCBsb2NrSGlzdG9y
eSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmln
YXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBzaG91
bGRPcGVuRXh0ZXJuYWxVUkxzKCkgfTsKICAgICAgICAgbV9zdWJtaXNzaW9uLT5wb3B1bGF0ZUZy
YW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCk7Ci0gICAgICAgIGZyYW1lLmxvYWRlcigp
LmxvYWRGcmFtZVJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCwgbV9zdWJtaXNzaW9uLT5ldmVudCgp
LCAmbV9zdWJtaXNzaW9uLT5zdGF0ZSgpKTsKKyAgICAgICAgZnJhbWUubG9hZGVyKCkubG9hZEZy
YW1lUmVxdWVzdChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpLCBtX3N1Ym1pc3Npb24tPmV2ZW50
KCksICZtX3N1Ym1pc3Npb24tPnN0YXRlKCkpOwogICAgIH0KIAogICAgIHZvaWQgZGlkU3RhcnRU
aW1lcihGcmFtZSYgZnJhbWUsIFRpbWVyJiB0aW1lcikgb3ZlcnJpZGUKQEAgLTMxOCw3ICszMTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJlcXVlc3QobV9v
cmlnaW5Eb2N1bWVudC51cmwoKSwgZW1wdHlTdHJpbmcoKSwgUmVsb2FkSWdub3JpbmdDYWNoZURh
dGEpOwogICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QgeyBtX29yaWdp
bkRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIHJlc291cmNlUmVxdWVzdCwgeyB9LCBsb2NrSGlz
dG9yeSgpLCBsb2NrQmFja0ZvcndhcmRMaXN0KCksIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05h
dmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzKCkgfTsKICAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRT
dWJzdGl0dXRlRGF0YShyZXBsYWNlbWVudERhdGEpOwotICAgICAgICBmcmFtZS5sb2FkZXIoKS5s
b2FkKGZyYW1lTG9hZFJlcXVlc3QpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5sb2FkKFdURk1v
dmUoZnJhbWVMb2FkUmVxdWVzdCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTQxNiw3ICs0MTYs
NyBAQCB2b2lkIE5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoRG9j
dW1lbnQmIGluaXRpYXRpbmdEb2N1bWVudCwgUwogICAgIGlmICh1cmwuaGFzRnJhZ21lbnRJZGVu
dGlmaWVyKCkgJiYgZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihtX2ZyYW1lLmRvY3Vt
ZW50KCktPnVybCgpLCB1cmwpKSB7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJjZVJl
cXVlc3QgeyBtX2ZyYW1lLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIHJlZmVycmVyLCBV
c2VQcm90b2NvbENhY2hlUG9saWN5IH07CiAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVM
b2FkUmVxdWVzdCB7IHNlY3VyaXR5T3JpZ2luLCByZXNvdXJjZVJlcXVlc3QsIEFTQ0lJTGl0ZXJh
bCgiX3NlbGYiKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIE1heWJlU2VuZFJl
ZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6Ok5vLCBOZXdGcmFtZU9wZW5lclBv
bGljeTo6QWxsb3csIGluaXRpYXRpbmdEb2N1bWVudC5zaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5VG9Qcm9wYWdhdGUoKSB9OwotICAgICAgICBsb2FkZXIuY2hhbmdlTG9jYXRpb24oZnJhbWVM
b2FkUmVxdWVzdCk7CisgICAgICAgIGxvYWRlci5jaGFuZ2VMb2NhdGlvbihXVEZNb3ZlKGZyYW1l
TG9hZFJlcXVlc3QpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDRkOTllYTEyZTY0MGMzZWI1
ZjVjNzc4ZjUxZTIwODFhM2RlZGZiNWIuLmY1ZTkyY2FiYzcxNzA0OGZmYzdkMGFmZGZlMmMwM2Yw
ZWVhYjc0ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKQEAgLTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgdm9pZCBvcGVuTmV3V2luZG93KGNvbnN0
IFVSTCYgdXJsVG9Mb2FkLCBGcmFtZSYgZnJhbWUsIFNob3VsZE9wZW5FeHRlcm5hbAogICAgIGlm
ICghbmV3UGFnZSkKICAgICAgICAgcmV0dXJuOwogICAgIG5ld1BhZ2UtPmNocm9tZSgpLnNob3co
KTsKLSAgICBuZXdQYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkRnJhbWVSZXF1ZXN0KGZy
YW1lTG9hZFJlcXVlc3QsIG51bGxwdHIsIG51bGxwdHIpOworICAgIG5ld1BhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmxvYWRGcmFtZVJlcXVlc3QoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwg
bnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKICNpZiBQTEFURk9STShHVEspCkBAIC0zOTYsNyArMzk2
LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgaWYgKEZyYW1lKiB0YXJnZXRG
cmFtZSA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkudGFyZ2V0RnJhbWUoKSkgewogICAgICAg
ICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdCB7IG1fY29udGV4dC5oaXRUZXN0
UmVzdWx0KCkuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lLT5sb2FkZXIoKS5vdXRnb2luZ1JlZmVy
cmVyKCkgfTsKICAgICAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7
IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCByZXNvdXJjZVJlcXVlc3QsIHsg
fSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5YmVTZW5kUmVm
ZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFtZU9wZW5lclBv
bGljeTo6U3VwcHJlc3MsIHRhcmdldEZyYW1lLT5pc01haW5GcmFtZSgpID8gU2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cgOiBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5OjpTaG91bGROb3RBbGxvdyB9OwotICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigp
LmxvYWRGcmFtZVJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCwgbnVsbHB0ciwgbnVsbHB0cik7Cisg
ICAgICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCkubG9hZEZyYW1lUmVxdWVzdChXVEZNb3Zl
KGZyYW1lTG9hZFJlcXVlc3QpLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBvcGVuTmV3V2luZG93KG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuYWJzb2x1
dGVMaW5rVVJMKCksICpmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxk
QWxsb3cpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAy
MGIzMjAwNTJiODI4YTk5NTNlNWI1ZjUzMzUzNjZkNDFmNTY0MDM2Li5mOTFhZWQ2ZmFmMzhlMWI0
NTE5ZDYwOTI4ZmFiYWY5Y2RjNTU0NThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBA
IC0yMjA0LDcgKzIyMDQsNyBAQCBSZWZQdHI8RnJhbWU+IERPTVdpbmRvdzo6Y3JlYXRlV2luZG93
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbgogICAgIC8vIFdlIHBh
c3MgdGhlIG9wZW5lciBmcmFtZSBmb3IgdGhlIGxvb2t1cEZyYW1lIGluIGNhc2UgdGhlIGFjdGl2
ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbQogICAgIC8vIHRoZSBvcGVuZXIgZnJhbWUsIGFuZCB0
aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUgcmVsYXRpdmUgdG8gdGhlIG9wZW5lciBmcmFtZS4K
ICAgICBib29sIGNyZWF0ZWQ7Ci0gICAgUmVmUHRyPEZyYW1lPiBuZXdGcmFtZSA9IFdlYkNvcmU6
OmNyZWF0ZVdpbmRvdygqYWN0aXZlRnJhbWUsIG9wZW5lckZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0
LCB3aW5kb3dGZWF0dXJlcywgY3JlYXRlZCk7CisgICAgUmVmUHRyPEZyYW1lPiBuZXdGcmFtZSA9
IFdlYkNvcmU6OmNyZWF0ZVdpbmRvdygqYWN0aXZlRnJhbWUsIG9wZW5lckZyYW1lLCBXVEZNb3Zl
KGZyYW1lTG9hZFJlcXVlc3QpLCB3aW5kb3dGZWF0dXJlcywgY3JlYXRlZCk7CiAgICAgaWYgKCFu
ZXdGcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTIyMjEsNyArMjIyMSw3IEBA
IFJlZlB0cjxGcmFtZT4gRE9NV2luZG93OjpjcmVhdGVXaW5kb3coY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcsIGNvbnN0IEF0b21pY1N0cmluCiAgICAgaWYgKGNyZWF0ZWQpIHsKICAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdCB7IGNvbXBsZXRlZFVSTCwgcmVmZXJyZXIsIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kgfTsKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxv
YWRSZXF1ZXN0IHsgYWN0aXZlV2luZG93LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHJl
c291cmNlUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJfc2VsZiIpLCBMb2NrSGlzdG9yeTo6Tm8sIExv
Y2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9u
VG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgYWN0aXZlRG9j
dW1lbnQtPnNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3lUb1Byb3BhZ2F0ZSgpIH07Ci0gICAg
ICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS5jaGFuZ2VMb2NhdGlvbihmcmFtZUxvYWRSZXF1ZXN0KTsK
KyAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLmNoYW5nZUxvY2F0aW9uKFdURk1vdmUoZnJhbWVM
b2FkUmVxdWVzdCkpOwogICAgIH0gZWxzZSBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgTG9ja0hpc3RvcnkgbG9ja0hpc3RvcnkgPSBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSA/IExvY2tIaXN0b3J5OjpObyA6IExvY2tIaXN0b3J5OjpZZXM7CiAg
ICAgICAgIG5ld0ZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuc2NoZWR1bGVMb2NhdGlvbkNo
YW5nZSgqYWN0aXZlV2luZG93LmRvY3VtZW50KCksIGFjdGl2ZVdpbmRvdy5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLCBjb21wbGV0ZWRVUkwsIHJlZmVycmVyLCBsb2NrSGlzdG9yeSwgTG9j
a0JhY2tGb3J3YXJkTGlzdDo6Tm8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1VzZXJJbnB1dEJyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJp
ZGdlLmNwcAppbmRleCA3OTA3NmU2OTQ3Zjg4ZDYyOTE4OWQzM2ZmMjgyYjUxMGQ2MDE3MTYxLi43
NzJlZmMwMDEyNTZiNmYwNTUzNTkyODFiZmNhNWYxNmNkMjYwMTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcApAQCAtMjM3LDkgKzIzNyw5IEBAIGJvb2wgVXNl
cklucHV0QnJpZGdlOjpsb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHkoU2Nyb2xsTG9naWNhbERpcmVj
dGlvbiBkaXJlY3Rpb24sCiAgICAgcmV0dXJuIG1fcGFnZS5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHko
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbnVsbHB0cik7CiB9CiAKLXZvaWQgVXNlcklucHV0QnJp
ZGdlOjpsb2FkUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBJbnB1dFNv
dXJjZSkKK3ZvaWQgVXNlcklucHV0QnJpZGdlOjpsb2FkUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0
JiYgcmVxdWVzdCwgSW5wdXRTb3VyY2UpCiB7Ci0gICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRl
cigpLmxvYWQocmVxdWVzdCk7CisgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWQo
V1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKIHZvaWQgVXNlcklucHV0QnJpZGdlOjpyZWxvYWRGcmFt
ZShGcmFtZSogZnJhbWUsIE9wdGlvblNldDxSZWxvYWRPcHRpb24+IG9wdGlvbnMsIElucHV0U291
cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5oCmluZGV4IDI2ZjRhMzZk
NGQxNWI1ODM0Zjk3MjY4ZjdlNGQ1ZDA1ZWExZDAwMWUuLjJiMTYwMzFiMDFhNWI3MTBkNjNlZWRj
NTU4YzYwM2ZmZWYyMmYyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9Vc2Vy
SW5wdXRCcmlkZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdl
LmgKQEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIGJvb2wgbG9naWNhbFNjcm9sbFJlY3Vy
c2l2ZWx5KFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBJbnB1dFNv
dXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6VXNlcik7CiAKICAgICAvLyBOYXZpZ2F0aW9uIEFQ
SXMuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0JiwgSW5wdXRTb3VyY2Ugc291cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgbG9hZFJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdCYmLCBJbnB1dFNv
dXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbG9h
ZEZyYW1lKEZyYW1lKiwgT3B0aW9uU2V0PFJlbG9hZE9wdGlvbj4sIElucHV0U291cmNlID0gSW5w
dXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RvcExvYWRpbmdGcmFt
ZShGcmFtZSosIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHRyeUNsb3NlUGFnZShJbnB1dFNvdXJjZSBzb3VyY2UgPSBJbnB1
dFNvdXJjZTo6VXNlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dl
YlBERlZpZXdQbGFjZWhvbGRlci5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERG
Vmlld1BsYWNlaG9sZGVyLm1tCmluZGV4IGU4YzQ3ODM5YjI3NDcyYzBjMmIwZTU0OWU5MTAzM2Ew
YWQyNDc0ZGMuLjUyYjk2NWU5YmVmNzA4Y2E2OTY2MjBkNjNkZWE2NTZkMTY4MTlhNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERGVmlld1BsYWNlaG9sZGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERGVmlld1BsYWNlaG9sZGVyLm1t
CkBAIC00ODgsNyArNDg4LDcgQEAgLSAodm9pZClzaW11bGF0ZUNsaWNrT25MaW5rVG9VUkw6KE5T
VVJMICopVVJMCiAgICAgLy8gQ2FsbCB0byB0aGUgZnJhbWUgbG9hZGVyIGJlY2F1c2UgdGhpcyBp
cyB3aGVyZSBvdXIgc2VjdXJpdHkgY2hlY2tzIGFyZSBtYWRlLgogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW19kYXRhU291cmNlIHdlYkZyYW1lXSk7CiAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0IHsgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHsgVVJM
IH0sIHsgfSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5YmVT
ZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBOZXdGcmFtZU9w
ZW5lclBvbGljeTo6QWxsb3csIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5v
dEFsbG93IH07Ci0gICAgZnJhbWUtPmxvYWRlcigpLmxvYWRGcmFtZVJlcXVlc3QoZnJhbWVMb2Fk
UmVxdWVzdCwgZXZlbnQuZ2V0KCksIG51bGxwdHIpOworICAgIGZyYW1lLT5sb2FkZXIoKS5sb2Fk
RnJhbWVSZXF1ZXN0KFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCksIGV2ZW50LmdldCgpLCBudWxs
cHRyKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJQbHVnaW5Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5Db250cm9sbGVyLm1tCmluZGV4IGY3ZjQzNmZiMjY3YjAzMWJkNjYzM2MyOWZlNGRmYWRiMDgx
MjhkMmQuLjRmNzgwNzdhMTI5MjQ2YTBlNTVmN2Q3ZWMwMzU5NDkwYmE5NzVjMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KQEAgLTUw
MSw3ICs1MDEsNyBAQCAtICh2b2lkKXdlYlBsdWdJbkNvbnRhaW5lckxvYWRSZXF1ZXN0OihOU1VS
TFJlcXVlc3QgKilyZXF1ZXN0IGluRnJhbWU6KE5TU3RyaW5nCiAgICAgICAgIEZyYW1lTG9hZFJl
cXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpjb3JlKGZyYW1lKSwgcmVxdWVzdCwgU2hvdWxkT3Bl
bkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICAgICAgZnJhbWVMb2Fk
UmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKICAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5z
ZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKLSAgICAgICAgY29yZShmcmFtZSkt
PmxvYWRlcigpLmxvYWQoZnJhbWVMb2FkUmVxdWVzdCk7CisgICAgICAgIGNvcmUoZnJhbWUpLT5s
b2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZWaWV3Lm1tCmluZGV4IDI5ZTJiZjQ5YWUwMDVjNDQ2
MTE3OTMxNWNjNzA3OWFjYjZjZDM0YTMuLjcxNjA3MjBmMWJjODhkY2RhMTIzMGIwZDU0OTU5ZDEy
ZGYzNmZhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlZpZXcubW0KQEAgLTEw
MzksNyArMTAzOSw3IEBAIC0gKHZvaWQpUERGVmlld1dpbGxDbGlja09uTGluazooUERGVmlldyAq
KXNlbmRlciB3aXRoVVJMOihOU1VSTCAqKVVSTAogICAgIC8vIENhbGwgdG8gdGhlIGZyYW1lIGxv
YWRlciBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgb3VyIHNlY3VyaXR5IGNoZWNrcyBhcmUgbWFkZS4K
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtkYXRhU291cmNlIHdlYkZyYW1lXSk7CiAgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgZnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCksIHsgVVJMIH0sIHsgfSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0Zvcndh
cmRMaXN0OjpObywgTWF5YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVS
TDo6WWVzLCBOZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIFNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3k6OlNob3VsZE5vdEFsbG93IH07Ci0gICAgZnJhbWUtPmxvYWRlcigpLmxvYWRGcmFt
ZVJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCwgZXZlbnQuZ2V0KCksIG51bGxwdHIpOworICAgIGZy
YW1lLT5sb2FkZXIoKS5sb2FkRnJhbWVSZXF1ZXN0KFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCks
IGV2ZW50LmdldCgpLCBudWxscHRyKTsKIH0KIAogLSAodm9pZClQREZWaWV3T3BlblBERkluTmF0
aXZlQXBwbGljYXRpb246KFBERlZpZXcgKilzZW5kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCmluZGV4IGUzZmEwYmZkMmE0NGNmMzRhZjMzZWNmY2VhZmM4NWE3OGI4
MzVkZmYuLmJmNTJmYjUwOWQ3N2YyOThmMjk4Y2FjZDViNDEzODAwNGNjYmU1ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjU4LDcgKzI1OCw3IEBAIGJv
b2wgUGx1Z2luVmlldzo6c3RhcnQoKQogICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9h
ZFJlcXVlc3QgeyBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCB7
IH0sIHsgfSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgU2hvdWxk
U2VuZFJlZmVycmVyOjpNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlk
VVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKICAgICAgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOwotICAgICAgICBsb2FkKGZy
YW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICAgICAgbG9hZChXVEZNb3ZlKGZyYW1lTG9h
ZFJlcXVlc3QpLCBmYWxzZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0KiByZXF1ZXN0KQogICAgICAgICAg
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKm1fcGFyZW50RnJhbWUuZ2V0
KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgU2hvdWxk
T3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3cgfTsKICAgICAgICAgICAgIGZy
YW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFtZSk7CiAgICAgICAgICAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldFNob3VsZENoZWNrTmV3V2luZG93UG9saWN5KHRydWUpOwot
ICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkubG9hZChmcmFtZUxvYWRSZXF1ZXN0
KTsKKyAgICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWQoV1RGTW92ZShmcmFt
ZUxvYWRSZXF1ZXN0KSk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0v
NDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNo
ZWQgbG9hZGluZwogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkg
ewpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1ZXN0KHN0
ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQogICAgICAgICBtX3JlcXVlc3RU
aW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK05QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChGcmFtZUxv
YWRSZXF1ZXN0JiYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lk
KiBub3RpZnlEYXRhKQogewogICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOwogCkBAIC01MTYsNyArNTE2LDcgQEAg
TlBFcnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9h
ZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGkKICAgICB9IGVsc2UgaWYgKCFtX3BhcmVudEZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkRpc3BsYXkodXJsKSkKICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAKLSAgICBzY2hlZHVsZVJlcXVlc3Qoc3RkOjptYWtl
X3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9u
LCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsKKyAgICBzY2hlZHVsZVJlcXVlc3Qo
c3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3Qp
LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsKIAog
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIH0KQEAgLTUzOSw3ICs1MzksNyBAQCBOUEVycm9y
IFBsdWdpblZpZXc6OmdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdm9pZCogbm90aQogICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0SFRUUE1ldGhvZCgiR0VUIik7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCks
IHVybCkpOwogCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5
RGF0YSk7CisgICAgcmV0dXJuIGxvYWQoV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0KSwgdHJ1ZSwg
bm90aWZ5RGF0YSk7CiB9CiAKIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIE5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQogICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTCht
X3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwogCi0gICAgcmV0dXJu
IGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIHJldHVybiBsb2FkKFdURk1v
dmUoZnJhbWVMb2FkUmVxdWVzdCksIGZhbHNlLCBudWxscHRyKTsKIH0KIAogTlBFcnJvciBQbHVn
aW5WaWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlm
eURhdGEpCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBv
c3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbgogICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkcyhX
VEZNb3ZlKGhlYWRlckZpZWxkcykpOwogICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5n
dGgpKTsKIAotICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRp
b24sIG5vdGlmeURhdGEpOworICAgIHJldHVybiBsb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVz
dCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCA2NWJmNjEwYjQ3YjliNTM4Mzcx
M2E1OTA0MzEwZWMxYWIwNWU1MTJiLi5hN2Y2ZjliYWY1NTM4MTUxNDk0NTVlYTgwYmU5NjAyNDZk
MmZlMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtODAsMTIg
KzgwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsK
ICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCi0gICAgICAgICAgICA6
IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQotICAgICAgICAgICAgLCBtX25v
dGlmeURhdGEobm90aWZ5RGF0YSkKLSAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNl
bmROb3RpZmljYXRpb24pCi0gICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxk
QWxsb3dQb3B1cHMpIHsgfQotICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChGcmFt
ZUxvYWRSZXF1ZXN0JiYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2
b2lkKiBub3RpZnlEYXRhLCBib29sIHNob3VsZEFsbG93UG9wdXBzKQorICAgICAgICAgICAgOiBt
X2ZyYW1lTG9hZFJlcXVlc3QgeyBXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpIH0KKyAgICAgICAg
ICAgICwgbV9ub3RpZnlEYXRhIHsgbm90aWZ5RGF0YSB9CisgICAgICAgICAgICAsIG1fc2VuZE5v
dGlmaWNhdGlvbiB7IHNlbmROb3RpZmljYXRpb24gfQorICAgICAgICAgICAgLCBtX3Nob3VsZEFs
bG93UG9wdXBzIHsgc2hvdWxkQWxsb3dQb3B1cHMgfQorICAgICAgICB7CisgICAgICAgIH0KKwog
ICAgICAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9CiAgICAgICAgIHZvaWQqIG5vdGlmeURhdGEo
KSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KICAgICAgICAgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9CkBAIC0yMzksNyAr
MjQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJv
eSgpOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3
Kik7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QRXJyb3IgbG9h
ZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBsb2FkKEZyYW1lTG9hZFJlcXVlc3QmJiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKICAgICAgICAgTlBFcnJvciBo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKICAgICAgICAgTlBFcnJvciBoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IGU4ZTFlOGM2MGU5NzNjZTY5NzNjMDVhMWQ1OTJmOGRi
MjNhNTIxOTEuLjNiODY2ODcxYTI2Zjc2NGY3ZjU4NGIyMDgwMWMxZTg4MTBkMjhiZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAg
LTg2LDkgKzg2LDkgQEAgc3RhdGljIGNvbnN0IFNlY29uZHMgcGx1Z2luU25hcHNob3RUaW1lckRl
bGF5IHsgMTEwMF9tcyB9OwogCiBjbGFzcyBQbHVnaW5WaWV3OjpVUkxSZXF1ZXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8VVJMUmVxdWVzdD4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGx1Z2lu
Vmlldzo6VVJMUmVxdWVzdD4gY3JlYXRlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBhbGxvd1BvcHVwcykKKyAgICBzdGF0aWMgUmVmPFBs
dWdpblZpZXc6OlVSTFJlcXVlc3Q+IGNyZWF0ZSh1aW50NjRfdCByZXF1ZXN0SUQsIEZyYW1lTG9h
ZFJlcXVlc3QmJiByZXF1ZXN0LCBib29sIGFsbG93UG9wdXBzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVVJMUmVxdWVzdChyZXF1ZXN0SUQsIHJlcXVlc3QsIGFsbG93UG9w
dXBzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFJlcXVlc3QocmVxdWVzdElE
LCBXVEZNb3ZlKHJlcXVlc3QpLCBhbGxvd1BvcHVwcykpOwogICAgIH0KIAogICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdElEOyB9CkBAIC05NywxMCArOTcs
MTAgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dQb3B1cHMoKSBjb25zdCB7IHJldHVybiBtX2Fs
bG93UG9wdXBzOyB9CiAKIHByaXZhdGU6Ci0gICAgVVJMUmVxdWVzdCh1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgYWxsb3dQb3B1cHMpCi0g
ICAgICAgIDogbV9yZXF1ZXN0SUQocmVxdWVzdElEKQotICAgICAgICAsIG1fcmVxdWVzdChyZXF1
ZXN0KQotICAgICAgICAsIG1fYWxsb3dQb3B1cHMoYWxsb3dQb3B1cHMpCisgICAgVVJMUmVxdWVz
dCh1aW50NjRfdCByZXF1ZXN0SUQsIEZyYW1lTG9hZFJlcXVlc3QmJiByZXF1ZXN0LCBib29sIGFs
bG93UG9wdXBzKQorICAgICAgICA6IG1fcmVxdWVzdElEIHsgcmVxdWVzdElEIH0KKyAgICAgICAg
LCBtX3JlcXVlc3QgeyBXVEZNb3ZlKHJlcXVlc3QpIH0KKyAgICAgICAgLCBtX2FsbG93UG9wdXBz
IHsgYWxsb3dQb3B1cHMgfQogICAgIHsKICAgICB9CiAKQEAgLTEyMDIsNyArMTIwMiw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGVyZm9ybUZyYW1lTG9hZFVSTFJlcXVlc3QoVVJMUmVxdWVzdCogcmVx
dWVzdCkKICAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmZyYW1l
LCByZXF1ZXN0LT5yZXF1ZXN0KCksIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3Vs
ZE5vdEFsbG93IH07CiAgICAgICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHJlcXVl
c3QtPnRhcmdldCgpKTsKICAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRTaG91bGRDaGVja05l
d1dpbmRvd1BvbGljeSh0cnVlKTsKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVM
b2FkUmVxdWVzdCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVM
b2FkUmVxdWVzdCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBrbm93IHdoZXRoZXIg
dGhlIHdpbmRvdyB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgaGVyZSBzbyB3ZSBqdXN0IGFzc3Vt
ZSB0aGF0IGl0IHdvcmtlZC4KICAgICAgICAgLy8gSXQncyBiZXR0ZXIgdGhhbiBub3QgdGVsbGlu
ZyB0aGUgcGx1Zy1pbiBhbnl0aGluZy4KQEAgLTE0MDIsNyArMTQwMiw3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6bG9hZFVSTCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBj
b25zdCBTdHJpbmcmCiAgICAgaWYgKCFyZWZlcnJlci5pc0VtcHR5KCkpCiAgICAgICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsK
IAotICAgIG1fcGVuZGluZ1VSTFJlcXVlc3RzLmFwcGVuZChVUkxSZXF1ZXN0OjpjcmVhdGUocmVx
dWVzdElELCBmcmFtZUxvYWRSZXF1ZXN0LCBhbGxvd1BvcHVwcykpOworICAgIG1fcGVuZGluZ1VS
TFJlcXVlc3RzLmFwcGVuZChVUkxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdElELCBXVEZNb3ZlKGZy
YW1lTG9hZFJlcXVlc3QpLCBhbGxvd1BvcHVwcykpOwogICAgIG1fcGVuZGluZ1VSTFJlcXVlc3Rz
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAKaW5kZXggZGI5NGMzZjQ1ZThkOTlmNDI2ZTc2OGM4OTU1N2U2MjVlNDU3YTI3My4uMjc4
MzY5NmRlYjlkMjhmNDI0NzhlMzY5OTE3NTEwMTg3YTFkMWE0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAKQEAgLTY1OCw3ICs2NTgsNyBAQCBGcmFtZSogV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBuYXZp
Z2F0aQogCiAgICAgLy8gSnVzdCBjYWxsIHRocm91Z2ggdG8gdGhlIGNocm9tZSBjbGllbnQuCiAg
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgbV9mcmFtZS0+Y29yZUZyYW1l
KCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIG5hdmlnYXRpb25BY3Rpb24ucmVzb3Vy
Y2VSZXF1ZXN0KCksIHsgfSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpO
bywgTWF5YmVTZW5kUmVmZXJyZXIsIEFsbG93TmF2aWdhdGlvblRvSW52YWxpZFVSTDo6WWVzLCBO
ZXdGcmFtZU9wZW5lclBvbGljeTo6QWxsb3csIG5hdmlnYXRpb25BY3Rpb24uc2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeSgpIH07Ci0gICAgUGFnZSogbmV3UGFnZSA9IHdlYlBhZ2UtPmNvcmVQ
YWdlKCktPmNocm9tZSgpLmNyZWF0ZVdpbmRvdygqbV9mcmFtZS0+Y29yZUZyYW1lKCksIGZyYW1l
TG9hZFJlcXVlc3QsIHsgfSwgbmF2aWdhdGlvbkFjdGlvbik7CisgICAgUGFnZSogbmV3UGFnZSA9
IHdlYlBhZ2UtPmNvcmVQYWdlKCktPmNocm9tZSgpLmNyZWF0ZVdpbmRvdygqbV9mcmFtZS0+Y29y
ZUZyYW1lKCksIFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCksIHsgfSwgbmF2aWdhdGlvbkFjdGlv
bik7CiAgICAgaWYgKCFuZXdQYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAK
aW5kZXggZGMwN2QxMWI0MzBhZTYwZjViNjIyNGQ4NGZhMzM2NWVkYWM2NGRlNy4uYzAxNGRhNmI1
Y2VjNTMxNjJiZjBkNWVkMmVmMjY4MzBiMmI5YTY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIFdlYkluc3BlY3Rvcjo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQogICAgIGlmICghbmV3UGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbmV3UGFnZS0+bWFp
bkZyYW1lKCkubG9hZGVyKCkubG9hZChmcmFtZUxvYWRSZXF1ZXN0KTsKKyAgICBuZXdQYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwogfQog
CiB2b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYg
c2NyaXB0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IGRhMjJkOGVhZmIxMTc0ZjVlMDgxOTMwMzkyMGZiZjEzZTM2MTQ4MmMuLjc2MjcyY2My
NmQxNTdmOWJkZDJmMWM1ZWUxM2ZlOTI4NTQ1MTgwYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTEyMTksNyArMTIxOSw3IEBAIHZvaWQg
V2ViUGFnZTo6bG9hZFJlcXVlc3QoY29uc3QgTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJz
KQogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kgZXh0ZXJuYWxVUkxzUG9saWN5ID0g
c3RhdGljX2Nhc3Q8U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeT4obG9hZFBhcmFtZXRlcnMu
c2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5KGV4dGVybmFsVVJMc1BvbGljeSk7CiAKLSAgICBj
b3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5sb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0
KTsKKyAgICBjb3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5sb2FkUmVxdWVzdChXVEZNb3Zl
KGZyYW1lTG9hZFJlcXVlc3QpKTsKIAogICAgIEFTU0VSVCghbV9wZW5kaW5nTmF2aWdhdGlvbklE
KTsKIH0K
</data>
<flag name="review"
          id="334457"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>