<?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>162335</bug_id>
          
          <creation_ts>2016-09-21 05:15:13 -0700</creation_ts>
          <short_desc>Refactor ContentSecurityPolicy::allow* methods</short_desc>
          <delta_ts>2016-09-22 01:48:31 -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 Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232041</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-21 05:15:13 -0700</bug_when>
    <thetext>These methods take a bool to override allow decision.
It might be better to not call this method if the override boolean is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232044</commentid>
    <comment_count>1</comment_count>
      <attachid>289445</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-21 05:27:16 -0700</bug_when>
    <thetext>Created attachment 289445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232059</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-21 06:57:59 -0700</bug_when>
    <thetext>This is a follow-up of bug 162144 refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232139</commentid>
    <comment_count>3</comment_count>
      <attachid>289445</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-21 11:48:16 -0700</bug_when>
    <thetext>Comment on attachment 289445
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        This patch updates the callers of allow* methods to check for the parameter before making the call.

While that change makes sense and is cleaner and more efficient, it does make it clear that policy is spread around in all the different call sites in the code; because of that we may need “why” comments at each call site explaining why this is a good policy.

&gt; Source/WebCore/Modules/fetch/FetchLoader.cpp:90
&gt; +    if (!context.shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !context.contentSecurityPolicy()-&gt;allowConnectToSource(fetchRequest.url())) {

Pretty ugly to call context.contentSecurityPolicy()-&gt; both here and in the code above. Might be nicer to put a reference into local variable with a single word name instead.

&gt; Source/WebCore/Modules/websockets/WebSocket.cpp:250
&gt; +    if (!scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowConnectToSource(m_url)) {

Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be nicer to put a reference into local variable with a single word name instead.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2007
&gt; +    if (!isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url)) {

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

One way to do that would be to make a different function with a name that says something about bypassing content security policy that is an inline that just calls isInUserAgentShadowTree. Then the comment about the reason could go in that one function rather than at every call site.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:6368
&gt; +        if (!trackElement.isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url))

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:778
&gt; +    if (this-&gt;isInUserAgentShadowTree())

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

Also, after refactoring, we no longer need &quot;this-&gt;&quot; here. It was here before because of the name conflict with a local variable and now there is no conflict.

&gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:793
&gt;      String declaredMimeType = document().isPluginDocument() &amp;&amp; document().ownerElement() ?

Type of this doesn’t need to be String, causing a bit of reference count churn. Since this is an attribute value it could just be const AtomicString&amp;, and I think it can can be written as auto&amp;.

&gt; Source/WebCore/html/HTMLTrackElement.cpp:219
&gt; +    if (!isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url)) {

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

&gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:225
&gt; +    if (!isAllowedByContentSecurityPolicy(request.url(), redirectResponse.isNull() ? ContentSecurityPolicy::RedirectResponseReceived::No : ContentSecurityPolicy::RedirectResponseReceived::Yes)) {

See my comment in another bug about our enum vs. bool strategy for ideas on how to keep this good going forward.

&gt; Source/WebCore/loader/PolicyChecker.cpp:58
&gt; +    if (ownerElement-&gt;isInUserAgentShadowTree())

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

&gt; Source/WebCore/loader/SubframeLoader.cpp:251
&gt; +        if (!element.isInUserAgentShadowTree()

Unclear why isInUserAgentShadowTree is a reason to bypass the security policy; already was unclear but it’s even more obvious now. Needs a why comment.

&gt; Source/WebCore/workers/WorkerGlobalScope.cpp:234
&gt;          bool shouldBypassMainWorldContentSecurityPolicy = scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy();
&gt; -        if (!scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowScriptFromSource(url, shouldBypassMainWorldContentSecurityPolicy)) {
&gt; +        if (!shouldBypassMainWorldContentSecurityPolicy &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowScriptFromSource(url)) {

Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be nicer to put a reference into local variable with a single word name instead.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:504
&gt; +    if (!scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowConnectToSource(m_url)) {

Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be nicer to put a reference into local variable with a single word name instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232338</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-22 00:25:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 289445 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289445&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        This patch updates the callers of allow* methods to check for the parameter before making the call.
&gt; 
&gt; While that change makes sense and is cleaner and more efficient, it does
&gt; make it clear that policy is spread around in all the different call sites
&gt; in the code; because of that we may need “why” comments at each call site
&gt; explaining why this is a good policy.

There is https://fetch.spec.whatwg.org/#concept-request-destination that relates CSP with clients.
Basically a fetch request has a destination, which relates to a specific CSP.
Fetch users (img e.g.) specify that destination in the HTTML spec and do not ned to talk about CSP.

If we were to introduce this destination, a single place (CachedResourceLoader) could do those checks.
We could do that progressively although some code paths are pretty long currently.

Also, currently we fail early which might be expected by some code paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232353</commentid>
    <comment_count>5</comment_count>
      <attachid>289534</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-22 00:57:31 -0700</bug_when>
    <thetext>Created attachment 289534
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232355</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-22 01:02:12 -0700</bug_when>
    <thetext>Thanks for the review.

&gt; &gt; Source/WebCore/Modules/fetch/FetchLoader.cpp:90
&gt; &gt; +    if (!context.shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !context.contentSecurityPolicy()-&gt;allowConnectToSource(fetchRequest.url())) {
&gt; 
&gt; Pretty ugly to call context.contentSecurityPolicy()-&gt; both here and in the
&gt; code above. Might be nicer to put a reference into local variable with a
&gt; single word name instead.

Done

&gt; &gt; Source/WebCore/Modules/websockets/WebSocket.cpp:250
&gt; &gt; +    if (!scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowConnectToSource(m_url)) {
&gt; 
&gt; Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be
&gt; nicer to put a reference into local variable with a single word name instead.

Done

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2007
&gt; &gt; +    if (!isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url)) {
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.

My understanding is that a user agent shadow tree (or any built-in element) should behave the same no matter the embedding document CSP.

&gt; One way to do that would be to make a different function with a name that
&gt; says something about bypassing content security policy that is an inline
&gt; that just calls isInUserAgentShadowTree. Then the comment about the reason
&gt; could go in that one function rather than at every call site.

Done

&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:6368
&gt; &gt; +        if (!trackElement.isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url))
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.

Done

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:778
&gt; &gt; +    if (this-&gt;isInUserAgentShadowTree())
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.

Done

&gt; Also, after refactoring, we no longer need &quot;this-&gt;&quot; here. It was here before
&gt; because of the name conflict with a local variable and now there is no
&gt; conflict.

Done

&gt; &gt; Source/WebCore/html/HTMLPlugInImageElement.cpp:793
&gt; &gt;      String declaredMimeType = document().isPluginDocument() &amp;&amp; document().ownerElement() ?
&gt; 
&gt; Type of this doesn’t need to be String, causing a bit of reference count
&gt; churn. Since this is an attribute value it could just be const
&gt; AtomicString&amp;, and I think it can can be written as auto&amp;.

Done

&gt; &gt; Source/WebCore/html/HTMLTrackElement.cpp:219
&gt; &gt; +    if (!isInUserAgentShadowTree() &amp;&amp; !document().contentSecurityPolicy()-&gt;allowMediaFromSource(url)) {
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.
&gt; 
&gt; &gt; Source/WebCore/loader/DocumentThreadableLoader.cpp:225
&gt; &gt; +    if (!isAllowedByContentSecurityPolicy(request.url(), redirectResponse.isNull() ? ContentSecurityPolicy::RedirectResponseReceived::No : ContentSecurityPolicy::RedirectResponseReceived::Yes)) {
&gt; 
&gt; See my comment in another bug about our enum vs. bool strategy for ideas on
&gt; how to keep this good going forward.

OK

&gt; &gt; Source/WebCore/loader/PolicyChecker.cpp:58
&gt; &gt; +    if (ownerElement-&gt;isInUserAgentShadowTree())
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.

Done

&gt; &gt; Source/WebCore/loader/SubframeLoader.cpp:251
&gt; &gt; +        if (!element.isInUserAgentShadowTree()
&gt; 
&gt; Unclear why isInUserAgentShadowTree is a reason to bypass the security
&gt; policy; already was unclear but it’s even more obvious now. Needs a why
&gt; comment.

Done

&gt; &gt; Source/WebCore/workers/WorkerGlobalScope.cpp:234
&gt; &gt;          bool shouldBypassMainWorldContentSecurityPolicy = scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy();
&gt; &gt; -        if (!scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowScriptFromSource(url, shouldBypassMainWorldContentSecurityPolicy)) {
&gt; &gt; +        if (!shouldBypassMainWorldContentSecurityPolicy &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowScriptFromSource(url)) {
&gt; 
&gt; Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be
&gt; nicer to put a reference into local variable with a single word name instead.

Done

&gt; &gt; Source/WebCore/xml/XMLHttpRequest.cpp:504
&gt; &gt; +    if (!scriptExecutionContext()-&gt;shouldBypassMainWorldContentSecurityPolicy() &amp;&amp; !scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;allowConnectToSource(m_url)) {
&gt; 
&gt; Pretty ugly to call scriptExecutionContext()-&gt; multiple times. Might be
&gt; nicer to put a reference into local variable with a single word name instead.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232365</commentid>
    <comment_count>7</comment_count>
      <attachid>289534</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-22 01:30:52 -0700</bug_when>
    <thetext>Comment on attachment 289534
Patch for landing

Clearing flags on attachment: 289534

Committed r206254: &lt;http://trac.webkit.org/changeset/206254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232366</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-22 01:30:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232374</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-22 01:48:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Comment on attachment 289445 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=289445&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; &gt; +        This patch updates the callers of allow* methods to check for the parameter before making the call.
&gt; &gt; 
&gt; &gt; While that change makes sense and is cleaner and more efficient, it does
&gt; &gt; make it clear that policy is spread around in all the different call sites
&gt; &gt; in the code; because of that we may need “why” comments at each call site
&gt; &gt; explaining why this is a good policy.
&gt; 
&gt; There is https://fetch.spec.whatwg.org/#concept-request-destination that
&gt; relates CSP with clients.
&gt; Basically a fetch request has a destination, which relates to a specific CSP.
&gt; Fetch users (img e.g.) specify that destination in the HTTML spec and do not
&gt; ned to talk about CSP.
&gt; 
&gt; If we were to introduce this destination, a single place
&gt; (CachedResourceLoader) could do those checks.

Hmm, some policies require to be done at specific places in the code: https://w3c.github.io/webappsec-csp/2/#directive-connect-src</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289445</attachid>
            <date>2016-09-21 05:27:16 -0700</date>
            <delta_ts>2016-09-22 00:57:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162335-20160921142425.patch</filename>
            <type>text/plain</type>
            <size>40876</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzRlMDY2YTg4NDE2N2M3
OGZiMDRiOTZiYTVkYWUwZmJjYmU1NGU2Mi4uZjllMTIxMjQ4NDU1MDZiZmNkMzlhZjM4MDAzNDBj
YWQwMGUwZGJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY3IEBACiAyMDE2LTA5LTIxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBSZWZhY3RvciBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmFsbG93KiBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IuCisKKyAgICAgICAg
UmVtb3ZpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgQ29udGVudFNlY3VyaXR5UG9saWN5Ojph
bGxvdyogbWV0aG9kcy4KKyAgICAgICAgV2hlbiB0cnVlLCB0aGlzIHBhcmFtZXRlciBtYWtlcyB0
aGUgbWV0aG9kcyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBj
YWxsZXJzIG9mIGFsbG93KiBtZXRob2RzIHRvIGNoZWNrIGZvciB0aGUgcGFyYW1ldGVyIGJlZm9y
ZSBtYWtpbmcgdGhlIGNhbGwuCisKKyAgICAgICAgTWFkZSBzb21lIHJlZmFjdG9yaW5nIHRvIHNo
YXJlIG1vcmUgY29kZSBiZXR3ZWVuIHRoZSB2YXJpb3VzIGFsbG93KiBtZXRob2RzLgorCisgICAg
ICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaExvYWRlcjo6c3RhcnQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAg
KiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6aXNTYWZlVG9Mb2FkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6Om91dE9mQmFuZFRyYWNrU291cmNlcyk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmFsbG93ZWRUb0xvYWRQbHVnaW5Db250ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUcmFj
a0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6Y2FuTG9h
ZFVSTCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OnJlZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0lmRm9ybUFj
dGlvbkFsbG93ZWRCeUNTUCk6CisgICAgICAgICogbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAg
ICAgICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJm
cmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlTG9hZGVyOjphbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAq
IHBhZ2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNy
ZWF0ZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDaGls
ZEZyYW1lRnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmFsbG93UmVzb3VyY2VGcm9tU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dDaGlsZENvbnRleHRGcm9tU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTY3JpcHRGcm9tU291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dJbWFnZUZyb21Tb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1N0eWxl
RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93Rm9udEZyb21Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5OjphbGxvd01lZGlhRnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmFsbG93Q29ubmVjdFRvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dGb3JtQWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaDoKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29y
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V29ya2VyOjpyZXNvbHZlVVJMKToK
KyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKiB4bWwvWE1M
SHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmluaXRT
ZW5kKToKKworMjAxNi0wOS0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisK
ICAgICAgICAgW0ZldGNoXSBBbGlnbiBBY2NlcHQgaGVhZGVyIGRlZmF1bHQgdmFsdWVzIHdpdGgg
ZmV0Y2ggc3BlYwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMjYwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5j
cHAKaW5kZXggZDJlM2NiOGRmNTdiNTFhMzljZDkzOWNlNzRhZTYyZmQxOTk3NDMxMy4uZjY3M2Jk
NzllY2M0YTJiOTE0MGMyYzhiM2JjZTQ1NmYzNmI4NDUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBGZXRj
aExvYWRlcjo6c3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmV0
Y2hSZXF1ZXN0JiByZXEKICAgICBBU1NFUlQoY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7CiAgICAgY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJl
UmVxdWVzdElmTmVlZGVkKGZldGNoUmVxdWVzdCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJbnNl
Y3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKIAotICAgIGlmICghY29udGV4dC5jb250ZW50U2VjdXJp
dHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UoZmV0Y2hSZXF1ZXN0LnVybCgpLCBjb250
ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpKSkgeworICAg
IGlmICghY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ko
KSAmJiAhY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3Vy
Y2UoZmV0Y2hSZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBtX2NsaWVudC5kaWRGYWlsKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGFlZWEyN2ZiMDUxN2RlNTJiYTU1YmNiZmFiZDA2NWJk
ZGUzZDUwZjQuLmY4MTRkNjZlMTE0YjYyMjQzMzQ0NmNjNTU5MjZmYzI3ZjcyM2UwYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0y
NDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2UKICAgICB9CiAKICAgICAvLyBG
SVhNRTogQ29udmVydCB0aGlzIHRvIGNoZWNrIHRoZSBpc29sYXRlZCB3b3JsZCdzIENvbnRlbnQg
U2VjdXJpdHkgUG9saWN5IG9uY2Ugd2Via2l0Lm9yZy9iLzEwNDUyMCBpcyBzb2x2ZWQuCi0gICAg
aWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5h
bGxvd0Nvbm5lY3RUb1NvdXJjZShtX3VybCwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zaG91
bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSkpIHsKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3Vy
aXR5UG9saWN5KCkgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNlKG1fdXJsKSkgewogICAgICAgICBtX3N0YXRl
ID0gQ0xPU0VEOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB0aHJvd2luZyBh
biBleGNlcHRpb24/CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRl
eCBjMzM3OWNkZWJlOWRhMDUwYTk3ZTg5ZDEzNWM5NTkxYTI1ZWJhNDUwLi45YTgyZGMyZTE3OWU0
ZmM1OTU4NjNiMDUxY2U1ZTdjNmUwOGVjNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKQEAgLTIwMDQsNyArMjAwNCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6aXNTYWZlVG9Mb2FkVVJMKGNvbnN0IFVSTCYgdXJsLCBJbnZhbGlkVVJMQWN0aW9uIGFjdGlv
bklmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWRvY3VtZW50KCku
Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgaXNJblVz
ZXJBZ2VudFNoYWRvd1RyZWUoKSkpIHsKKyAgICBpZiAoIWlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KCkgJiYgIWRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9t
U291cmNlKHVybCkpIHsKICAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6aXNT
YWZlVG9Mb2FkVVJMKCVwKSAtICVzIC0+IHJlamVjdGVkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9s
aWN5IiwgdGhpcywgdXJsRm9yTG9nZ2luZ01lZGlhKHVybCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC02MzY0LDggKzYzNjQsOCBAQCBWZWN0b3I8UmVm
UHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gSFRNTE1lZGlhRWxlbWVudDo6b3V0T2ZCYW5kVHJhY2tT
b3VyY2VzKCkKICAgICAgICAgVVJMIHVybCA9IHRyYWNrRWxlbWVudC5nZXROb25FbXB0eVVSTEF0
dHJpYnV0ZShzcmNBdHRyKTsKICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZG9jdW1lbnQoKS5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+YWxsb3dNZWRpYUZyb21Tb3VyY2UodXJsLCB0cmFja0VsZW1lbnQuaXNJ
blVzZXJBZ2VudFNoYWRvd1RyZWUoKSkpCisKKyAgICAgICAgaWYgKCF0cmFja0VsZW1lbnQuaXNJ
blVzZXJBZ2VudFNoYWRvd1RyZWUoKSAmJiAhZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+YWxsb3dNZWRpYUZyb21Tb3VyY2UodXJsKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIGF1dG8mIHRyYWNrID0gKnRyYWNrRWxlbWVudC50cmFjaygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggMWNiYzNlNTJj
ZGM5MGNmYjQ0Nzk1NGM4MzI2N2YyNmJjNzdmMDc5ZS4uODQyYTI4NDhmODYxNjg1OWQwYWVlMThl
NDU2YmI2MDFkMzIzMDFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwCkBAIC03NzUsNiArNzc1LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50JiBldmVudCkKIAogYm9vbCBIVE1MUGx1
Z0luSW1hZ2VFbGVtZW50OjphbGxvd2VkVG9Mb2FkUGx1Z2luQ29udGVudChjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsKKyAgICBpZiAodGhpcy0+aXNJ
blVzZXJBZ2VudFNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBVUkwg
Y29tcGxldGVkVVJMOwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkKICAgICAgICAgY29tcGxldGVk
VVJMID0gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmwpOwpAQCAtNzg0LDEwICs3ODcsMTIgQEAg
Ym9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjphbGxvd2VkVG9Mb2FkUGx1Z2luQ29udGVudChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QKIAogICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeS51cGdy
YWRlSW5zZWN1cmVSZXF1ZXN0SWZOZWVkZWQoY29tcGxldGVkVVJMLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6Okluc2VjdXJlUmVxdWVzdFR5cGU6OkxvYWQpOwogCisgICAgaWYgKCFjb250ZW50U2Vj
dXJpdHlQb2xpY3kuYWxsb3dPYmplY3RGcm9tU291cmNlKGNvbXBsZXRlZFVSTCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIFN0cmluZyBkZWNsYXJlZE1pbWVUeXBlID0gZG9jdW1lbnQo
KS5pc1BsdWdpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSA/CiAgICAg
ICAgIGRvY3VtZW50KCkub3duZXJFbGVtZW50KCktPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oSFRNTE5hbWVzOjp0eXBlQXR0cikgOiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6dHlwZUF0dHIpOwotICAgIGJvb2wgaXNJblVzZXJBZ2VudFNoYWRvd1Ry
ZWUgPSB0aGlzLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpOwotICAgIHJldHVybiBjb250ZW50
U2VjdXJpdHlQb2xpY3kuYWxsb3dPYmplY3RGcm9tU291cmNlKGNvbXBsZXRlZFVSTCwgaXNJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpICYmIGNvbnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd1BsdWdpblR5
cGUobWltZVR5cGUsIGRlY2xhcmVkTWltZVR5cGUsIGNvbXBsZXRlZFVSTCwgaXNJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpOworICAgIHJldHVybiBjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dQbHVn
aW5UeXBlKG1pbWVUeXBlLCBkZWNsYXJlZE1pbWVUeXBlLCBjb21wbGV0ZWRVUkwpOwogfQogCiBi
b29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlcXVlc3RPYmplY3QoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVHJhY2tFbGVtZW50LmNwcAppbmRleCAzYzYzMTY2MzU3NDllYjM3MzFhNGNhYzJiZmUz
ZTlhMGZlYzdmNWJhLi5kYTQ4NGViMmU0NWNlMWMzMTc1ZmUxZjY1ZmU4OGI5Mjc5MTAyYTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTIxNiwxMSArMjE2
LDExIEBAIGJvb2wgSFRNTFRyYWNrRWxlbWVudDo6Y2FuTG9hZFVSTChjb25zdCBVUkwmIHVybCkK
ICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFkb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd01lZGlhRnJvbVNvdXJj
ZSh1cmwsIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpKSB7CisgICAgaWYgKCFpc0luVXNlckFn
ZW50U2hhZG93VHJlZSgpICYmICFkb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5h
bGxvd01lZGlhRnJvbVNvdXJjZSh1cmwpKSB7CiAgICAgICAgIExPRyhNZWRpYSwgIkhUTUxUcmFj
a0VsZW1lbnQ6OmNhbkxvYWRVUkwoJXMpIC0+IHJlamVjdGVkIGJ5IENvbnRlbnQgU2VjdXJpdHkg
UG9saWN5IiwgdXJsRm9yTG9nZ2luZ1RyYWNrKHVybCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZGlzcGF0Y2hCZWZvcmVM
b2FkRXZlbnQodXJsLnN0cmluZygpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRleCBkNDI1MWMzYTRiNDUxNDhhZWQ2
NmY3NWYzMjNiYzc3YTEwZDY4MGY0Li41ZGRlNmUwMWVhN2E5NDRkMDJhNWEyOWJkYTRjYjEzMDc4
OGM2MzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgotI2luY2x1ZGUgIkNvbnRlbnRTZWN1
cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oIgogI2lu
Y2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIgogI2luY2x1ZGUgIkNyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKQEAgLTk4LDcgKzk3LDcgQEAgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQmIGRvY3VtZW50
LCBUaHJlYWRhYmwKICAgICAvLyBSZWZlcnJlciBhbmQgT3JpZ2luIGhlYWRlcnMgc2hvdWxkIGJl
IHNldCBhZnRlciB0aGUgcHJlZmxpZ2h0IGlmIGFueS4KICAgICBBU1NFUlQoIXJlcXVlc3QuaGFz
SFRUUFJlZmVycmVyKCkgJiYgIXJlcXVlc3QuaGFzSFRUUE9yaWdpbigpKTsKIAotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9s
aWN5KHJlcXVlc3QudXJsKCkpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihpc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShyZXF1ZXN0LnVybCgpLCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pKTsKIAogICAgIG1f
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gKG1fb3B0aW9ucy5jcmVkZW50aWFscyA9PSBGZXRj
aE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlIHx8IChtX29wdGlvbnMuY3JlZGVudGlhbHMg
PT0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6U2FtZU9yaWdpbiAmJiBtX3NhbWVPcmlnaW5S
ZXF1ZXN0KSkgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRl
bnRpYWxzOwogCkBAIC0yMjMsNyArMjIyLDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBSZXNvdXIKICAg
ICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKIAogICAg
IFJlZjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAg
IGlmICghaXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kocmVxdWVzdC51cmwoKSwgIXJl
ZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpKSB7CisgICAgaWYgKCFpc0FsbG93ZWRCeUNvbnRlbnRT
ZWN1cml0eVBvbGljeShyZXF1ZXN0LnVybCgpLCByZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpID8g
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vIDogQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6OlllcykpIHsKICAg
ICAgICAgcmVwb3J0Q29udGVudFNlY3VyaXR5UG9saWN5RXJyb3IoKm1fY2xpZW50LCByZWRpcmVj
dFJlc3BvbnNlLnVybCgpKTsKICAgICAgICAgY2xlYXJSZXNvdXJjZSgpOwogICAgICAgICByZXR1
cm47CkBAIC00MTcsNyArNDE2LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFNlY3VyaXR5Q2gKICAgICAvLyBy
ZXF1ZXN0ZWQuIEFsc28gY29tcGFyaW5nIHRoZSByZXF1ZXN0IGFuZCByZXNwb25zZSBVUkxzIGFz
IHN0cmluZ3Mgd2lsbCBmYWlsIGlmIHRoZSByZXF1ZXN0VVJMIHN0aWxsIGhhcyBpdHMgY3JlZGVu
dGlhbHMuCiAgICAgYm9vbCBkaWRSZWRpcmVjdCA9IHJlcXVlc3RVUkwgIT0gcmVzcG9uc2UudXJs
KCk7CiAgICAgaWYgKGRpZFJlZGlyZWN0KSB7Ci0gICAgICAgIGlmICghaXNBbGxvd2VkQnlDb250
ZW50U2VjdXJpdHlQb2xpY3kocmVzcG9uc2UudXJsKCksIGRpZFJlZGlyZWN0KSkgeworICAgICAg
ICBpZiAoIWlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5KHJlc3BvbnNlLnVybCgpLCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6WWVzKSkgewog
ICAgICAgICAgICAgcmVwb3J0Q29udGVudFNlY3VyaXR5UG9saWN5RXJyb3IoKm1fY2xpZW50LCBy
ZXF1ZXN0VVJMKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDQ4LDIwICs0
NDcsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFNlY3VyaXR5Q2gKICAgICBkaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIsIDAuMCk7CiB9CiAKLWJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0Fs
bG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBVUkwmIHVybCwgYm9vbCBkaWRSZWRp
cmVjdCkKK2Jvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRCeUNvbnRlbnRT
ZWN1cml0eVBvbGljeShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKQogewotICAgIGJv
b2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZTsKLSAgICBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVj
ZWl2ZWQgPSBkaWRSZWRpcmVjdCA/IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkOjpZZXMgOiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZDo6Tm87Ci0KICAgICBzd2l0Y2ggKG1fb3B0aW9ucy5jb250ZW50U2VjdXJpdHlQ
b2xpY3lFbmZvcmNlbWVudCkgewogICAgIGNhc2UgQ29udGVudFNlY3VyaXR5UG9saWN5RW5mb3Jj
ZW1lbnQ6OkRvTm90RW5mb3JjZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb250
ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudDo6RW5mb3JjZUNoaWxkU3JjRGlyZWN0aXZlOgot
ICAgICAgICByZXR1cm4gY29udGVudFNlY3VyaXR5UG9saWN5KCkuYWxsb3dDaGlsZENvbnRleHRG
cm9tU291cmNlKHVybCwgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIHJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZCk7CisgICAgICAgIHJldHVybiBjb250ZW50U2VjdXJpdHlQb2xpY3koKS5h
bGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQp
OwogICAgIGNhc2UgQ29udGVudFNlY3VyaXR5UG9saWN5RW5mb3JjZW1lbnQ6OkVuZm9yY2VDb25u
ZWN0U3JjRGlyZWN0aXZlOgotICAgICAgICByZXR1cm4gY29udGVudFNlY3VyaXR5UG9saWN5KCku
YWxsb3dDb25uZWN0VG9Tb3VyY2UodXJsLCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwg
cmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKTsKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRTZWN1cml0
eVBvbGljeSgpLmFsbG93Q29ubmVjdFRvU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkKTsKICAgICBjYXNlIENvbnRlbnRTZWN1cml0eVBvbGljeUVuZm9yY2VtZW50OjpFbmZvcmNl
U2NyaXB0U3JjRGlyZWN0aXZlOgotICAgICAgICByZXR1cm4gY29udGVudFNlY3VyaXR5UG9saWN5
KCkuYWxsb3dTY3JpcHRGcm9tU291cmNlKHVybCwgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xp
Y3ksIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCk7CisgICAgICAgIHJldHVybiBjb250ZW50U2Vj
dXJpdHlQb2xpY3koKS5hbGxvd1NjcmlwdEZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmgKaW5kZXggNzg4ZjUyYzJhOTEzYjI1NGMyNWE4NGM0Mjk0ODIwNTRmY2IxNDJiNy4uNzA2
YWUwMjZjOWEwMDZhYTBkOTFlMjI2YmJhNTc0MTg1OWRmNDA0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaApAQCAtMzEsNiArMzEsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgog
I2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtOTQsNyArOTUs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBsb2FkUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmJiwgU2VjdXJpdHlDaGVja1BvbGljeSk7CiAgICAgICAgIGJvb2wgaXNBbGxv
d2VkUmVkaXJlY3QoY29uc3QgVVJMJik7Ci0gICAgICAgIGJvb2wgaXNBbGxvd2VkQnlDb250ZW50
U2VjdXJpdHlQb2xpY3koY29uc3QgVVJMJiwgYm9vbCBkaWRSZWRpcmVjdCA9IGZhbHNlKTsKKyAg
ICAgICAgYm9vbCBpc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBVUkwmLCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCk7CiAKICAgICAg
ICAgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0KCkgY29uc3QgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDBjZGI0YjBjNDNmYmI3ZDdiYjAwNzdiMjA2M2Y4MjUy
N2I4N2JkNmEuLjUxZTc5ZTBlNjExMTI4MjE1MDliZGY4NTk1OGFjZmE5YWFiY2JhYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtOTQyLDcgKzk0Miw3IEBAIGJvb2wg
RnJhbWVMb2FkZXI6OmNoZWNrSWZGb3JtQWN0aW9uQWxsb3dlZEJ5Q1NQKGNvbnN0IFVSTCYgdXJs
LCBib29sIGRpZFJlY2VpdmVSCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byByZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSA/IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMgOiBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm87Ci0gICAgcmV0dXJu
IG1fZnJhbWUuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Rm9ybUFj
dGlvbih1cmwsIGZhbHNlIC8qIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ICovLCByZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQpOworICAgIHJldHVybiBtX2ZyYW1lLmRvY3VtZW50KCktPmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0Zvcm1BY3Rpb24odXJsLCByZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQpOwogfQogCiBGcmFtZSogRnJhbWVMb2FkZXI6Om9wZW5lcigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAKaW5kZXggMjljNjUwNzc3ODAzZGM5NzZiZGUz
MjYzMDc0MTk4NTQwYWQ5YzA0OS4uNDdkNDJjMzg4MWUxM2FjYzViNmVhN2Y2MDU0MjBiOTI2ODM4
MTY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BvbGljeUNoZWNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Qb2xpY3lDaGVja2VyLmNwcApAQCAtNTUsMTAg
KzU1LDEzIEBAIHN0YXRpYyBib29sIGlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5KGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBFbGVtZW50KiBvd25lCiB7CiAgICAgaWYgKCFvd25lckVsZW1l
bnQpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChvd25lckVsZW1lbnQtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgYXV0byByZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSA/IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMgOiBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm87CiAgICAgaWYgKGlz
PEhUTUxQbHVnSW5FbGVtZW50Pihvd25lckVsZW1lbnQpKQotICAgICAgICByZXR1cm4gb3duZXJF
bGVtZW50LT5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd09iamVjdEZy
b21Tb3VyY2UodXJsLCBvd25lckVsZW1lbnQtPmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCksIHJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCk7Ci0gICAgcmV0dXJuIG93bmVyRWxlbWVudC0+ZG9jdW1l
bnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZSh1
cmwsIG93bmVyRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSwgcmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkKTsKKyAgICAgICAgcmV0dXJuIG93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS5j
b250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dPYmplY3RGcm9tU291cmNlKHVybCwgcmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkKTsKKyAgICByZXR1cm4gb3duZXJFbGVtZW50LT5kb2N1bWVudCgp
LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKHVybCwg
cmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKTsKIH0KIAogUG9saWN5Q2hlY2tlcjo6UG9saWN5Q2hl
Y2tlcihGcmFtZSYgZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3Vi
ZnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAppbmRleCA0YTdlNTU4OTc1YTFmMjg1NGI2ZWNiNTNlOWFiYmIyYTY1MWY5OTBiLi44ZTBlZWRh
MzZhNzUzNDQyNWEwZGZkOWExNDA5NmEyYjRmN2EyM2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAKQEAgLTI0OCw5ICsyNDgsOCBAQCBQYXNzUmVmUHRyPFdpZGdl
dD4gU3ViZnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgSAogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgY2hhciBqYXZhQXBwbGV0TWltZVR5
cGVbXSA9ICJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IjsKLSAgICAgICAgYm9vbCBpc0luVXNl
ckFnZW50U2hhZG93VHJlZSA9IGVsZW1lbnQuaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKTsKLSAg
ICAgICAgaWYgKCFlbGVtZW50LmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFs
bG93T2JqZWN0RnJvbVNvdXJjZShjb2RlQmFzZVVSTCwgaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUp
Ci0gICAgICAgICAgICB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd1BsdWdpblR5cGUoamF2YUFwcGxldE1pbWVUeXBlLCBqYXZhQXBwbGV0TWltZVR5
cGUsIGNvZGVCYXNlVVJMLCBpc0luVXNlckFnZW50U2hhZG93VHJlZSkpCisgICAgICAgIGlmICgh
ZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpCisgICAgICAgICAgICAmJiAoIWVsZW1l
bnQuZG9jdW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dPYmplY3RGcm9tU291
cmNlKGNvZGVCYXNlVVJMKSB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBv
bGljeSgpLT5hbGxvd1BsdWdpblR5cGUoamF2YUFwcGxldE1pbWVUeXBlLCBqYXZhQXBwbGV0TWlt
ZVR5cGUsIGNvZGVCYXNlVVJMKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwCmluZGV4IDAxN2E2MTg0OTdjMDFlOTk0NzgwNjAyODNiZWU1NDU4ZDFlNGIyMjYu
LmE5NGNiYzEyYzViNDc4NDUyMTgyMDA0MDZhMDRkYWZiNmQzNjE5YzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAt
Mzk5LDMwICszOTksMzAgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6YWxsb3dlZEJ5Q29u
dGVudFNlY3VyaXR5UG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHQKICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgogI2VuZGlmCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6U2NyaXB0OgotICAgICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd1NjcmlwdEZyb21Tb3VyY2UodXJsLCBmYWxzZSwgcmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3ko
KS0+YWxsb3dTY3JpcHRGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250
ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTdHlsZUZyb21Tb3VyY2UodXJsLCBmYWxzZSwgcmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTdHlsZUZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgogICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIGlmICghbV9kb2N1bWVudC0+
Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW1hZ2VGcm9tU291cmNlKHVybCwgZmFsc2Us
IHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW1hZ2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdG
b250UmVzb3VyY2U6CiAjZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3Vy
Y2U6Ci0gICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFs
bG93Rm9udEZyb21Tb3VyY2UodXJsLCBmYWxzZSwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkK
KyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dG
b250RnJvbVNvdXJjZSh1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
Ok1lZGlhUmVzb3VyY2U6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgogI2VuZGlmCi0gICAgICAgIGlmICghbV9kb2N1
bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwg
ZmFsc2UsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVu
dC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgcmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRTb3VyY2UuY3BwCmluZGV4IGQxMzgyMDVjMjcyMDk2MDZiNWZmYzcwNjhiYTg1
MmVlNTNhYzYyMTcuLjQ0MmJiOWJlMDNjZmJmZTk4ZmE5NDc1OGMzNGEyMzZkY2JjODc3YmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCkBAIC03Miw3ICs3Miw3IEBAIFJlZlB0cjxF
dmVudFNvdXJjZT4gRXZlbnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBTCiAgICAgfQogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBj
aGVjayB0aGUgaXNvbGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdl
YmtpdC5vcmcvYi8xMDQ1MjAgaXMgc29sdmVkLgotICAgIGlmICghY29udGV4dC5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UoZnVsbFVSTCwgY29udGV4dC5zaG91
bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSkpIHsKKyAgICBpZiAoIWNv
bnRleHQuc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCkgJiYgIWNv
bnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNlKGZ1bGxV
UkwpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB0aHJvd2luZyBhbiBleGNl
cHRpb24/CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCmluZGV4IGFiYTY0OTM0NzI0ZmE5OTAzMTliYzkxODdkZTQxODdiOTMwMjYyNGQuLmM4NTY5
Y2NlYjJjYWU4NmI2MjE0YmM0N2NkNzhmN2ZlYzk0MWM1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcApAQCAtNDUxLDI1ICs0NTEs
OCBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dQbHVnaW5UeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eQogICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93
KFdURk1vdmUoaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JQbHVnaW5UeXBlLCB0eXBlLCB0eXBl
QXR0cmlidXRlKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U2NyaXB0
RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBv
bGljeSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkg
Y29uc3QKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd09iamVjdEZyb21Tb3VyY2Uo
Y29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQpIGNvbnN0CiB7Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNo
b3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci0gICAgVGV4dFBvc2l0aW9uIHNv
dXJjZVBvc2l0aW9uKFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRp
bmFsTnVtYmVyKCkpOwotICAgIGF1dG8gaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUgPSBbJl0gKGNv
bnN0IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUpIHsK
LSAgICAgICAgU3RyaW5nIGNvbnNvbGVNZXNzYWdlID0gY29uc29sZU1lc3NhZ2VGb3JWaW9sYXRp
b24oQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYywgdmlvbGF0
ZWREaXJlY3RpdmUsIHVybCwgIlJlZnVzZWQgdG8gbG9hZCIpOwotICAgICAgICByZXBvcnRWaW9s
YXRpb24oQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYywgdmlv
bGF0ZWREaXJlY3RpdmUsIHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291cmNlUG9z
aXRpb24pOwotICAgIH07Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5k
bGVWaW9sYXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
Ojp2aW9sYXRlZERpcmVjdGl2ZUZvclNjcmlwdCwgdXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2
ZWQgPT0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMpOwotfQotCi1ib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29s
IG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQg
cmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSBjb25zdAotewotICAgIGlmIChvdmVycmlkZUNvbnRl
bnRTZWN1cml0eVBvbGljeSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKFNjaGVtZVJl
Z2lzdHJ5OjpzY2hlbWVTaG91bGRCeXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsLnByb3Rv
Y29sKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAvLyBBcyBwZXIgc2VjdGlvbiBvYmpl
Y3Qtc3JjIG9mIHRoZSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZlbCAzIHNwZWMuLCA8aHR0
cDovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWNzcD4gKEVkaXRvcidzIERyYWZ0LCAyOSBGZWJy
dWFyeSAyMDE2KSwKQEAgLTQ4NCwxMCArNDY3LDggQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmFsbG93T2JqZWN0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUMK
ICAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0
aXZlKSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0
aXZlRm9yT2JqZWN0U291cmNlLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQ6OlllcywgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZTo6U2hvdWxkQWxsb3dFbXB0eVVSTElmU291cmNlTGlzdElzTm90Tm9uZTo6WWVz
KTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q2hpbGRGcmFtZUZyb21T
b3VyY2UoY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ks
IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0
Citib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZShj
b25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kp
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hv
dWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgU3RyaW5nIHNvdXJjZVVSTDsKQEAgLTUwMCw4NSArNDgxLDUxIEBA
IGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNv
bnN0IFVSTCYgdXJsLCBib29sIG92ZXJyCiAgICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RG
TW92ZShoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvckZyYW1lLCB1cmwsIHJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CiB9CiAKLWJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIFJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0Citib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmws
IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQsIGNvbnN0
IGNoYXIqIG5hbWUsIFJlc291cmNlUHJlZGljYXRlIHJlc291cmNlUHJlZGljYXRlKSBjb25zdAog
ewotICAgIGlmIChvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzY2hlbWVTaG91bGRCeXBhc3NDb250ZW50
U2VjdXJpdHlQb2xpY3kodXJsLnByb3RvY29sKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBTdHJpbmcgc291cmNlVVJMOwogICAgIFRleHRQb3NpdGlvbiBzb3VyY2VQb3NpdGlvbihXVEY6
Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIFdURjo6T3JkaW5hbE51bWJlcigpKTsKICAg
ICBhdXRvIGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlID0gWyZdIChjb25zdCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmUmIHZpb2xhdGVkRGlyZWN0aXZlKSB7Ci0gICAgICAgIFN0cmluZyBj
b25zb2xlTWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlRm9yVmlvbGF0aW9uKENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYywgdmlvbGF0ZWREaXJlY3RpdmUsIHVybCwg
IlJlZnVzZWQgdG8gbG9hZCIpOwotICAgICAgICByZXBvcnRWaW9sYXRpb24oQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmNoaWxkU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJs
LCBjb25zb2xlTWVzc2FnZSwgc291cmNlVVJMLCBzb3VyY2VQb3NpdGlvbik7CisgICAgICAgIFN0
cmluZyBjb25zb2xlTWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlRm9yVmlvbGF0aW9uKG5hbWUsIHZp
b2xhdGVkRGlyZWN0aXZlLCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKKyAgICAgICAgcmVwb3J0
VmlvbGF0aW9uKG5hbWUsIHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsIGNvbnNvbGVNZXNzYWdlLCBz
b3VyY2VVUkwsIHNvdXJjZVBvc2l0aW9uKTsKICAgICB9OwotICAgIHJldHVybiBhbGxQb2xpY2ll
c0FsbG93KFdURk1vdmUoaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JDaGlsZENvbnRleHQsIHVy
bCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6
WWVzKTsKKyAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVk
RGlyZWN0aXZlKSwgcmVzb3VyY2VQcmVkaWNhdGUsIHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6WWVzKTsKIH0KIAotYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29s
IG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQg
cmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSBjb25zdAorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmFsbG93Q2hpbGRDb250ZXh0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKIHsKLSAgICBp
ZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5
UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5n
IHNvdXJjZVVSTDsKLSAgICBUZXh0UG9zaXRpb24gc291cmNlUG9zaXRpb24oV1RGOjpPcmRpbmFs
TnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAgYXV0byBo
YW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSkgewotICAgICAgICBTdHJpbmcgY29uc29sZU1l
c3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZvclZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6aW1nU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJsLCAiUmVmdXNlZCB0
byBsb2FkIik7Ci0gICAgICAgIHJlcG9ydFZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6aW1nU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJsLCBjb25zb2xlTWVz
c2FnZSwgc291cmNlVVJMLCBzb3VyY2VQb3NpdGlvbik7Ci0gICAgfTsKLSAgICByZXR1cm4gYWxs
UG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlKSwgJkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9ySW1hZ2UsIHVy
bCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6
WWVzKTsKKyAgICByZXR1cm4gYWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJl
c3BvbnNlUmVjZWl2ZWQsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGls
ZFNyYywgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0
aXZlRm9yQ2hpbGRDb250ZXh0KTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93U3R5bGVGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkKSBjb25zdAorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U2NyaXB0RnJv
bVNvdXJjZShjb25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0
UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3kpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6
c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBUZXh0UG9z
aXRpb24gc291cmNlUG9zaXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBX
VEY6Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAgYXV0byBoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9
IFsmXSAoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVj
dGl2ZSkgewotICAgICAgICBTdHJpbmcgY29uc29sZU1lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZv
clZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMs
IHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVw
b3J0VmlvbGF0aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNy
YywgdmlvbGF0ZWREaXJlY3RpdmUsIHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291
cmNlUG9zaXRpb24pOwotICAgIH07Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92
ZShoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvclN0eWxlLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CisgICAgcmV0dXJuIGFs
bG93UmVzb3VyY2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjLCAmQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JTY3JpcHQpOwogfQog
Ci1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dGb250RnJvbVNvdXJjZShjb25zdCBV
UkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgUmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKK2Jvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjphbGxvd0ltYWdlRnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgUmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKIHsK
LSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNl
Y3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
U3RyaW5nIHNvdXJjZVVSTDsKLSAgICBUZXh0UG9zaXRpb24gc291cmNlUG9zaXRpb24oV1RGOjpP
cmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAg
YXV0byBoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSkgewotICAgICAgICBTdHJpbmcgY29u
c29sZU1lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZvclZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYywgdmlvbGF0ZWREaXJlY3RpdmUsIHVybCwgIlJl
ZnVzZWQgdG8gbG9hZCIpOwotICAgICAgICByZXBvcnRWaW9sYXRpb24oQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvbnRTcmMsIHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsIGNv
bnNvbGVNZXNzYWdlLCBzb3VyY2VVUkwsIHNvdXJjZVBvc2l0aW9uKTsKLSAgICB9OwotICAgIHJl
dHVybiBhbGxQb2xpY2llc0FsbG93KFdURk1vdmUoaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAm
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JG
b250LCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVj
ZWl2ZWQ6Olllcyk7CisgICAgcmV0dXJuIGFsbG93UmVzb3VyY2VGcm9tU291cmNlKHVybCwgcmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1l
czo6aW1nU3JjLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWRE
aXJlY3RpdmVGb3JJbWFnZSk7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
d01lZGlhRnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1
cml0eVBvbGljeSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNl
aXZlZCkgY29uc3QKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1N0eWxlRnJvbVNv
dXJjZShjb25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQ
b2xpY3kpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2No
ZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBUZXh0UG9zaXRp
b24gc291cmNlUG9zaXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBXVEY6
Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAgYXV0byBoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9IFsm
XSAoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2
ZSkgewotICAgICAgICBTdHJpbmcgY29uc29sZU1lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZvclZp
b2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWVkaWFTcmMsIHZp
b2xhdGVkRGlyZWN0aXZlLCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVwb3J0
VmlvbGF0aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNyYywg
dmlvbGF0ZWREaXJlY3RpdmUsIHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291cmNl
UG9zaXRpb24pOwotICAgIH07Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZSho
YW5kbGVWaW9sYXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvck1lZGlhLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNl
aXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CisgICAgcmV0dXJuIGFsbG93
UmVzb3VyY2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMsICZDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvclN0eWxlKTsKIH0KIAotYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0IFVSTCYg
dXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSBjb25zdAorYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmFsbG93Rm9udEZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0
UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFsbG93UmVzb3VyY2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYywgJkNvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yRm9udCk7
Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd01lZGlhRnJvbVNvdXJjZShj
b25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UodXJs
LCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjptZWRpYVNyYywgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZp
b2xhdGVkRGlyZWN0aXZlRm9yTWVkaWEpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dDb25uZWN0VG9Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0CiB7Ci0gICAgaWYgKG92ZXJy
aWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAo
U2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1
cmwucHJvdG9jb2woKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFN0cmluZyBzb3VyY2VV
Ukw7CkBAIC01OTAsMTkgKzUzNyw5IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
d0Nvbm5lY3RUb1NvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvCiAgICAgcmV0
dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSksICZD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvckNv
bm5lY3RTb3VyY2UsIHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZDo6WWVzKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93Rm9ybUFjdGlvbihjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0
eVBvbGljeSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCkgY29uc3QKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0Zvcm1BY3Rpb24oY29u
c3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVj
ZWl2ZWQpIGNvbnN0CiB7Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3Vs
ZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci0gICAgVGV4dFBvc2l0aW9uIHNvdXJj
ZVBvc2l0aW9uKFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRpbmFs
TnVtYmVyKCkpOwotICAgIGF1dG8gaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUgPSBbJl0gKGNvbnN0
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUpIHsKLSAg
ICAgICAgU3RyaW5nIGNvbnNvbGVNZXNzYWdlID0gY29uc29sZU1lc3NhZ2VGb3JWaW9sYXRpb24o
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24sIHZpb2xhdGVk
RGlyZWN0aXZlLCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVwb3J0VmlvbGF0
aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3JtQWN0aW9uLCB2aW9s
YXRlZERpcmVjdGl2ZSwgdXJsLCBjb25zb2xlTWVzc2FnZSwgc291cmNlVVJMLCBzb3VyY2VQb3Np
dGlvbik7Ci0gICAgfTsKLSAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRs
ZVZpb2xhdGVkRGlyZWN0aXZlKSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OnZpb2xhdGVkRGlyZWN0aXZlRm9yRm9ybUFjdGlvbiwgdXJsLCByZWRpcmVjdFJlc3BvbnNlUmVj
ZWl2ZWQgPT0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMpOworICAgIHJldHVybiBhbGxv
d1Jlc291cmNlRnJvbVNvdXJjZSh1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24sICZDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvckZvcm1BY3Rpb24pOwog
fQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYg
dXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAppbmRleCBlOTE3ZDY3
MWRhNWQ1MTA3Y2E2OWExNzAyZWEzZmY1ZTM5ZWNlNzYzLi4zZmRjZDE2MDk5ODk0YzAwOWQ1YWJj
NmNjMzkwNTQ3MzY3ZDRhNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3kuaApAQCAtOTgsMTcgKzk4LDE4IEBAIHB1YmxpYzoKICAgICBib29s
IGFsbG93RnJhbWVBbmNlc3RvcnMoY29uc3QgRnJhbWUmLCBjb25zdCBVUkwmLCBib29sIG92ZXJy
aWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OwogCiAgICAgZW51bSBjbGFz
cyBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgeyBObywgWWVzIH07Ci0gICAgYm9vbCBhbGxvd1Nj
cmlwdEZyb21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQ6Ok5vKSBjb25zdDsKLSAgICBib29sIGFsbG93Q2hpbGRGcmFtZUZyb21Tb3VyY2Uo
Y29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBj
b25zdDsKLSAgICBib29sIGFsbG93Q2hpbGRDb250ZXh0RnJvbVNvdXJjZShjb25zdCBVUkwmLCBi
b29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwotICAgIGJv
b2wgYWxsb3dJbWFnZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSA9IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsKLSAgICBib29sIGFsbG93U3R5bGVGcm9tU291
cmNlKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxz
ZSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpO
bykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYsIGJvb2wg
b3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgUmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7Ci0gICAgYm9vbCBh
bGxvd01lZGlhRnJvbVNvdXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gZmFsc2UsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVz
cG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwotICAgIGJvb2wgYWxsb3dDb25uZWN0VG9Tb3VyY2Uo
Y29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBj
b25zdDsKLSAgICBib29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBib29sIG92ZXJyaWRl
Q29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9
IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwotCi0gICAgYm9vbCBhbGxvd09i
amVjdEZyb21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBv
bGljeSA9IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQ6Ok5vKSBjb25zdDsKKyAgICBib29sIGFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25z
dCBVUkwmLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2
ZWQ6Ok5vKSBjb25zdDsKKyAgICBib29sIGFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYs
IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8p
IGNvbnN0OworICAgIGJvb2wgYWxsb3dTdHlsZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7
CisgICAgYm9vbCBhbGxvd0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OworICAgIGJv
b2wgYWxsb3dNZWRpYUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisKKyAgICBib29sIGFs
bG93Q2hpbGRGcmFtZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisgICAgYm9vbCBhbGxv
d0NoaWxkQ29udGV4dEZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisgICAgYm9vbCBhbGxv
d0Nvbm5lY3RUb1NvdXJjZShjb25zdCBVUkwmLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsKKyAgICBib29sIGFsbG93Rm9ybUFj
dGlvbihjb25zdCBVUkwmLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsKKworICAgIGJvb2wgYWxsb3dPYmplY3RGcm9tU291cmNl
KGNvbnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VS
ZWNlaXZlZDo6Tm8pIGNvbnN0OwogICAgIGJvb2wgYWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYsIGJv
b2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2
b2lkIHNldE92ZXJyaWRlQWxsb3dJbmxpbmVTdHlsZShib29sKTsKQEAgLTE4OCw2ICsxODksOSBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZSwgdHlwZW5hbWUuLi4g
QXJncz4KICAgICBib29sIGFsbFBvbGljaWVzQWxsb3coVmlvbGF0ZWREaXJlY3RpdmVDYWxsYmFj
ayYmLCBQcmVkaWNhdGUmJiwgQXJncyYmLi4uKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAK
KyAgICB1c2luZyBSZXNvdXJjZVByZWRpY2F0ZSA9IGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZSAqKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiopKGNvbnN0
IFVSTCAmLCBib29sKSBjb25zdDsKKyAgICBib29sIGFsbG93UmVzb3VyY2VGcm9tU291cmNlKGNv
bnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCwgY29uc3QgY2hhciosIFJlc291cmNl
UHJlZGljYXRlKSBjb25zdDsKKwogICAgIHVzaW5nIEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25s
eVBvbGljaWVzUGFpciA9IHN0ZDo6cGFpcjxib29sLCBib29sPjsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQcmVkaWNhdGU+IEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciBm
aW5kSGFzaE9mQ29udGVudEluUG9saWNpZXMoUHJlZGljYXRlJiYsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+KSBjb25z
dCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvQWJzdHJhY3RXb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdv
cmtlci5jcHAKaW5kZXggMWY5ZjI3NGYwZTI0ZjY3YjYzYzI1ZmU4ZmQzMTk5NWU1MWQ4YTQyOC4u
NDkwZDJkN2Y3YzdhY2Y1NDA5MjRlOGJlMTQ1NjEwMTQwOWY0OWMxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgVVJMIEFic3Ry
YWN0V29ya2VyOjpyZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnQKICAgICB9CiAKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0NoaWxkQ29udGV4dEZyb21T
b3VyY2Uoc2NyaXB0VVJMLCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3kpKSB7CisgICAgaWYgKCFzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3kgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkt
PmFsbG93Q2hpbGRDb250ZXh0RnJvbVNvdXJjZShzY3JpcHRVUkwpKSB7CiAgICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gVVJMKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCA5N2FhMWNmYjJiZjcwZTZm
MzE5N2Y4ZGExOWNkNzNlMDAzOTAzZmQ4Li5lYzNlYTBlMDY1N2FiY2NiMDUzNTEzZTI2NjQ5YWEz
OWU4NDBkY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
LmNwcApAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNj
cmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlvbkNvZGUmCiAgICAgZm9y
IChhdXRvJiB1cmwgOiBjb21wbGV0ZWRVUkxzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0
IHRoaXMgdG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xp
Y3kgb25jZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlzIHNvbHZlZC4KICAgICAgICAgYm9vbCBzaG91
bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpOwot
ICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9s
aWN5KCktPmFsbG93U2NyaXB0RnJvbVNvdXJjZSh1cmwsIHNob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeSkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3kgJiYgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29u
dGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U2NyaXB0RnJvbVNvdXJjZSh1cmwpKSB7CiAgICAg
ICAgICAgICBlYyA9IE5FVFdPUktfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA1ZDFmM2ZhM2EzY2Y2MzQ2
OWM3MzY4Yzk0OTlmYzQ3NDhjZTFmZTIxLi4zYWE2ZjM1NmM3Y2MzYTVhZWM0ZWRiOGE3Zjg2MjA5
ZjkwODM5OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTUwMSw3
ICs1MDEsNyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0Ojppbml0U2VuZChFeGNlcHRpb25Db2RlJiBl
YykKICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMg
dG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25j
ZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlzIHNvbHZlZC4KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNl
KG1fdXJsLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeSgpKSkgeworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25u
ZWN0VG9Tb3VyY2UobV91cmwpKSB7CiAgICAgICAgIGlmIChtX2FzeW5jKSB7CiAgICAgICAgICAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiAgICAgICAgICAgICBtX3RpbWVvdXRUaW1lci5z
dG9wKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289534</attachid>
            <date>2016-09-22 00:57:31 -0700</date>
            <delta_ts>2016-09-22 01:30:52 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-162335-20160922095440.patch</filename>
            <type>text/plain</type>
            <size>49063</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZhNjQ4OGUzOGY2NDk2
MDQzMWZjMzllNTNmYmEwZDdkZWZkMzk0NS4uYzY1ZmRhZjNmZmE5OGRjMmUyMzYzNmE5NDNiZDli
NTc3ZGYzMDY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTA5LTIxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmFsbG93KiBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzMzUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IuCisKKyAgICAgICAgUmVt
b3ZpbmcgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
dyogbWV0aG9kcy4KKyAgICAgICAgV2hlbiB0cnVlLCB0aGlzIHBhcmFtZXRlciBtYWtlcyB0aGUg
bWV0aG9kcyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBjYWxs
ZXJzIG9mIGFsbG93KiBtZXRob2RzIHRvIGNoZWNrIGZvciB0aGUgcGFyYW1ldGVyIGJlZm9yZSBt
YWtpbmcgdGhlIGNhbGwuCisKKyAgICAgICAgTWFkZSBzb21lIHJlZmFjdG9yaW5nIHRvIHNoYXJl
IG1vcmUgY29kZSBiZXR3ZWVuIHRoZSB2YXJpb3VzIGFsbG93KiBtZXRob2RzLgorCisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aExvYWRlcjo6c3RhcnQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6aXNTYWZlVG9Mb2FkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6Om91dE9mQmFuZFRyYWNrU291cmNlcyk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OmFsbG93ZWRUb0xvYWRQbHVnaW5Db250ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUcmFja0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6Y2FuTG9hZFVS
TCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJl
ZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5KToKKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0lmRm9ybUFjdGlv
bkFsbG93ZWRCeUNTUCk6CisgICAgICAgICogbG9hZGVyL1BvbGljeUNoZWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAg
ICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFt
ZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlTG9hZGVyOjphbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAqIHBh
Z2UvRXZlbnRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNyZWF0
ZSk6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDaGlsZEZy
YW1lRnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmFsbG93UmVzb3VyY2VGcm9tU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeTo6YWxsb3dDaGlsZENvbnRleHRGcm9tU291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTY3JpcHRGcm9tU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dJbWFnZUZyb21Tb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1N0eWxlRnJv
bVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93
Rm9udEZyb21Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
OjphbGxvd01lZGlhRnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmFsbG93Q29ubmVjdFRvU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dGb3JtQWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuaDoKKyAgICAgICAgKiB3b3JrZXJzL0Fic3RyYWN0V29ya2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V29ya2VyOjpyZXNvbHZlVVJMKToKKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKToKKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmluaXRTZW5k
KToKKwogMjAxNi0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBzZXJpYWxpemF0aW9uIG9mIGJnc291bmQsIGtleWdlbiBhbmQgdHJhY2sgZWxlbWVu
dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKaW5kZXgg
ZDJlM2NiOGRmNTdiNTFhMzljZDkzOWNlNzRhZTYyZmQxOTk3NDMxMy4uNjcxYTk3NTU0ZWU2NDQ2
NDA1Y2QwYzJmYzRmNDQ1N2Y4YTk4OGYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaExvYWRlci5jcHAKQEAgLTg1LDkgKzg1LDExIEBAIHZvaWQgRmV0Y2hMb2FkZXI6
OnN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZldGNoUmVxdWVz
dCYgcmVxCiAgICAgUmVzb3VyY2VSZXF1ZXN0IGZldGNoUmVxdWVzdCA9IHJlcXVlc3QuaW50ZXJu
YWxSZXF1ZXN0KCk7CiAKICAgICBBU1NFUlQoY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3ko
KSk7Ci0gICAgY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+dXBncmFkZUluc2VjdXJl
UmVxdWVzdElmTmVlZGVkKGZldGNoUmVxdWVzdCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJbnNl
Y3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKKyAgICBhdXRvJiBjb250ZW50U2VjdXJpdHlQb2xpY3kg
PSAqY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKTsKIAotICAgIGlmICghY29udGV4dC5j
b250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UoZmV0Y2hSZXF1ZXN0
LnVybCgpLCBjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGlj
eSgpKSkgeworICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeS51cGdyYWRlSW5zZWN1cmVSZXF1ZXN0
SWZOZWVkZWQoZmV0Y2hSZXF1ZXN0LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVx
dWVzdFR5cGU6OkxvYWQpOworCisgICAgaWYgKCFjb250ZXh0LnNob3VsZEJ5cGFzc01haW5Xb3Js
ZENvbnRlbnRTZWN1cml0eVBvbGljeSgpICYmICFjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dD
b25uZWN0VG9Tb3VyY2UoZmV0Y2hSZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBtX2NsaWVudC5k
aWRGYWlsKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGFlZWEyN2ZiMDUxN2RlNTJiYTU1
YmNiZmFiZDA2NWJkZGUzZDUwZjQuLjAyNDk1YmU0ZTRjMTM2MGUxNDQ4ZjJkZmRkM2E1ZDE3ZGE5
NTFjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuY3BwCkBAIC0yMTcsMzcgKzIxNyw0MyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZQogICAg
IExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIGNvbm5lY3QoKSB1cmw9JyVzJyIsIHRoaXMsIHVy
bC51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IFVSTChVUkwoKSwgdXJsKTsKIAorICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGF1dG8mIGNvbnRleHQgPSAqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworCiAgICAgaWYgKCFtX3VybC5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIkludmFsaWQgdXJsIGZvciBXZWJTb2Nr
ZXQgIiArIG1fdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKKyAgICAgICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgIkludmFsaWQgdXJsIGZvciBXZWJTb2NrZXQgIiArIG1fdXJsLnN0cmluZ0NlbnRl
ckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFt
X3VybC5wcm90b2NvbElzKCJ3cyIpICYmICFtX3VybC5wcm90b2NvbElzKCJ3c3MiKSkgewotICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV3JvbmcgdXJsIHNjaGVtZSBmb3IgV2Vi
U29ja2V0ICIgKyBtX3VybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsICJXcm9uZyB1cmwgc2NoZW1lIGZvciBXZWJTb2NrZXQgIiArIG1fdXJsLnN0
cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKICAgICAgICAgbV9zdGF0ZSA9IENMT1NF
RDsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChtX3VybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkgewotICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNz
YWdlTGV2ZWw6OkVycm9yLCAiVVJMIGhhcyBmcmFnbWVudCBjb21wb25lbnQgIiArIG1fdXJsLnN0
cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpKTsKKyAgICAgICAgY29udGV4dC5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIlVSTCBo
YXMgZnJhZ21lbnQgY29tcG9uZW50ICIgKyBtX3VybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgoKSk7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPnVwZ3JhZGVJbnNlY3VyZVJlcXVlc3RJZk5l
ZWRlZChtX3VybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpJbnNlY3VyZVJlcXVlc3RUeXBlOjpM
b2FkKTsKLSAgICAKKyAgICBBU1NFUlQoY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7
CisgICAgYXV0byYgY29udGVudFNlY3VyaXR5UG9saWN5ID0gKmNvbnRleHQuY29udGVudFNlY3Vy
aXR5UG9saWN5KCk7CisKKyAgICBjb250ZW50U2VjdXJpdHlQb2xpY3kudXBncmFkZUluc2VjdXJl
UmVxdWVzdElmTmVlZGVkKG1fdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okluc2VjdXJlUmVx
dWVzdFR5cGU6OkxvYWQpOworCiAgICAgaWYgKCFwb3J0QWxsb3dlZChtX3VybCkpIHsKLSAgICAg
ICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIldlYlNvY2tldCBwb3J0ICIgKyBTdHJpbmc6
Om51bWJlcihtX3VybC5wb3J0KCkpICsgIiBibG9ja2VkIik7CisgICAgICAgIGNvbnRleHQuYWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJX
ZWJTb2NrZXQgcG9ydCAiICsgU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSArICIgYmxvY2tl
ZCIpOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMg
dG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25j
ZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlzIHNvbHZlZC4KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNl
KG1fdXJsLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNob3VsZEJ5cGFzc01haW5Xb3JsZENv
bnRlbnRTZWN1cml0eVBvbGljeSgpKSkgeworICAgIGlmICghY29udGV4dC5zaG91bGRCeXBhc3NN
YWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGVudFNlY3VyaXR5UG9saWN5
LmFsbG93Q29ubmVjdFRvU291cmNlKG1fdXJsKSkgewogICAgICAgICBtX3N0YXRlID0gQ0xPU0VE
OwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB0aHJvd2luZyBhbiBleGNlcHRp
b24/CkBAIC0yNTUsNyArMjYxLDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2UKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvKiBwcm92aWRlciA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+c29ja2V0UHJvdmlkZXIoKSkKKyAgICBpZiAoYXV0byogcHJvdmlkZXIgPSBj
b250ZXh0LnNvY2tldFByb3ZpZGVyKCkpCiAgICAgICAgIG1fY2hhbm5lbCA9IFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKnRoaXMs
ICpwcm92aWRlcik7CiAKICAgICAvLyBFdmVyeSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNob3Vs
ZCBoYXZlIGEgU29ja2V0UHJvdmlkZXIuCkBAIC0yNzAsNyArMjc2LDcgQEAgdm9pZCBXZWJTb2Nr
ZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90
b2NvbHMsIEV4Y2UKICAgICAvLyBjb21wbHkgd2l0aCBXZWJTb2NrZXQgQVBJIHNwZWNpZmljYXRp
b24sIGJ1dCBpdCBzZWVtcyB0byBiZSB0aGUgb25seSByZWFzb25hYmxlIHdheSB0byBoYW5kbGUg
dGhpcyBjb25mbGljdC4KICAgICBmb3IgKGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CiAg
ICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sU3RyaW5nKHByb3RvY29sKSkgewotICAgICAgICAg
ICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIldyb25nIHByb3RvY29sIGZvciBXZWJTb2Nr
ZXQgJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOworICAgICAgICAg
ICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgIldyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyIgKyBlbmNvZGVQcm90
b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOwogICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NF
RDsKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI3OSwxNSArMjg1LDE1IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlCiAgICAgSGFzaFNldDxT
dHJpbmc+IHZpc2l0ZWQ7CiAgICAgZm9yIChhdXRvJiBwcm90b2NvbCA6IHByb3RvY29scykgewog
ICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5pc05ld0VudHJ5KSB7Ci0gICAgICAg
ICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHByb3RvY29scyBjb250
YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsgIici
KTsKKyAgICAgICAgICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXZWJTb2NrZXQgcHJvdG9jb2xzIGNvbnRhaW4gZHVw
bGljYXRlczogJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOwogICAg
ICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChpczxEb2N1
bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwor
ICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogICAgICAgICBpZiAoIWRvY3VtZW50
LmZyYW1lKCktPmxvYWRlcigpLm1peGVkQ29udGVudENoZWNrZXIoKS5jYW5SdW5JbnNlY3VyZUNv
bnRlbnQoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgbV91cmwpKSB7CiAgICAgICAgICAgICAv
LyBCYWxhbmNlZCBieSB0aGUgY2FsbCB0byBBY3RpdmVET01PYmplY3Q6OnVuc2V0UGVuZGluZ0Fj
dGl2aXR5KCkgaW4gV2ViU29ja2V0OjpzdG9wKCkuCiAgICAgICAgICAgICBBY3RpdmVET01PYmpl
Y3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCmluZGV4IDk1OGU1ZjQ2ZWJmYjcxYjdiYjE4YmVmZDFjNmY3MmE4NDhhNzA3
N2UuLjY5NzMwYTc5NzJiMTdiOWRjZTk3ZTMxZTFiMjJkYjQ0NmI0NDJkNDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTk4OSw2ICsxOTg5LDE2IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3VlKFRleHRUcmFjayosIFRleHRU
cmFja0N1ZSYgY3VlKQogCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBib29sIGlzQWxsb3dlZFRv
TG9hZE1lZGlhVVJMKEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBi
b29sIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQoreworICAgIC8vIEVsZW1lbnRzIGluIHVzZXIg
YWdlbnQgc2hvdyB0cmVlIHNob3VsZCBsb2FkIHdoYXRldmVyIHRoZSBlbWJlZGRpbmcgZG9jdW1l
bnQgcG9saWN5IGlzLgorICAgIGlmIChpc0luVXNlckFnZW50U2hhZG93VHJlZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpKTsKKyAgICByZXR1cm4gZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd01lZGlhRnJvbVNvdXJjZSh1cmwpOworfQorCiBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmlzU2FmZVRvTG9hZFVSTChjb25zdCBVUkwmIHVybCwgSW52YWxpZFVSTEFj
dGlvbiBhY3Rpb25JZkludmFsaWQpCiB7CiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7CkBAIC0y
MDA0LDcgKzIwMTQsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzU2FmZVRvTG9hZFVSTChj
b25zdCBVUkwmIHVybCwgSW52YWxpZFVSTEFjdGlvbiBhY3Rpb25JZgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFkb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGlj
eSgpLT5hbGxvd01lZGlhRnJvbVNvdXJjZSh1cmwsIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkp
KSB7CisgICAgaWYgKCFpc0FsbG93ZWRUb0xvYWRNZWRpYVVSTCgqdGhpcywgdXJsLCBpc0luVXNl
ckFnZW50U2hhZG93VHJlZSgpKSkgewogICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVt
ZW50Ojppc1NhZmVUb0xvYWRVUkwoJXApIC0gJXMgLT4gcmVqZWN0ZWQgYnkgQ29udGVudCBTZWN1
cml0eSBQb2xpY3kiLCB0aGlzLCB1cmxGb3JMb2dnaW5nTWVkaWEodXJsKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTYzNjQsOCArNjM3NCw4IEBAIFZl
Y3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBIVE1MTWVkaWFFbGVtZW50OjpvdXRPZkJh
bmRUcmFja1NvdXJjZXMoKQogICAgICAgICBVUkwgdXJsID0gdHJhY2tFbGVtZW50LmdldE5vbkVt
cHR5VVJMQXR0cmlidXRlKHNyY0F0dHIpOwogICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFkb2N1bWVudCgpLmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd01lZGlhRnJvbVNvdXJjZSh1cmwsIHRyYWNrRWxl
bWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKSkKKworICAgICAgICBpZiAoIWlzQWxsb3dl
ZFRvTG9hZE1lZGlhVVJMKCp0aGlzLCB1cmwsIHRyYWNrRWxlbWVudC5pc0luVXNlckFnZW50U2hh
ZG93VHJlZSgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8mIHRyYWNr
ID0gKnRyYWNrRWxlbWVudC50cmFjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAKaW5kZXggMWNiYzNlNTJjZGM5MGNmYjQ0Nzk1NGM4MzI2N2Yy
NmJjNzdmMDc5ZS4uMjcxMzY4ZTVlYjM0ZDgwODNiZGY3MTgzZjRlYTg0Y2JiYmI1ZjkzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCkBAIC03
NzUsNiArNzc1LDEwIEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCYgZXZlbnQpCiAKIGJvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6YWxs
b3dlZFRvTG9hZFBsdWdpbkNvbnRlbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0CiB7CisgICAgLy8gRWxlbWVudHMgaW4gdXNlciBhZ2VudCBzaG93IHRy
ZWUgc2hvdWxkIGxvYWQgd2hhdGV2ZXIgdGhlIGVtYmVkZGluZyBkb2N1bWVudCBwb2xpY3kgaXMu
CisgICAgaWYgKGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCiAgICAgVVJMIGNvbXBsZXRlZFVSTDsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCiAgICAg
ICAgIGNvbXBsZXRlZFVSTCA9IGRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsKTsKQEAgLTc4NCwx
MCArNzg4LDEyIEBAIGJvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6YWxsb3dlZFRvTG9hZFBs
dWdpbkNvbnRlbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0CiAKICAgICBjb250ZW50U2VjdXJp
dHlQb2xpY3kudXBncmFkZUluc2VjdXJlUmVxdWVzdElmTmVlZGVkKGNvbXBsZXRlZFVSTCwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpJbnNlY3VyZVJlcXVlc3RUeXBlOjpMb2FkKTsKIAotICAgIFN0
cmluZyBkZWNsYXJlZE1pbWVUeXBlID0gZG9jdW1lbnQoKS5pc1BsdWdpbkRvY3VtZW50KCkgJiYg
ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSA/CisgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xp
Y3kuYWxsb3dPYmplY3RGcm9tU291cmNlKGNvbXBsZXRlZFVSTCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8mIGRlY2xhcmVkTWltZVR5cGUgPSBkb2N1bWVudCgpLmlzUGx1Z2lu
RG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLm93bmVyRWxlbWVudCgpID8KICAgICAgICAgZG9jdW1l
bnQoKS5vd25lckVsZW1lbnQoKS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6OnR5cGVBdHRyKSA6IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5h
bWVzOjp0eXBlQXR0cik7Ci0gICAgYm9vbCBpc0luVXNlckFnZW50U2hhZG93VHJlZSA9IHRoaXMt
PmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRTZWN1cml0eVBv
bGljeS5hbGxvd09iamVjdEZyb21Tb3VyY2UoY29tcGxldGVkVVJMLCBpc0luVXNlckFnZW50U2hh
ZG93VHJlZSkgJiYgY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93UGx1Z2luVHlwZShtaW1lVHlw
ZSwgZGVjbGFyZWRNaW1lVHlwZSwgY29tcGxldGVkVVJMLCBpc0luVXNlckFnZW50U2hhZG93VHJl
ZSk7CisgICAgcmV0dXJuIGNvbnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd1BsdWdpblR5cGUobWlt
ZVR5cGUsIGRlY2xhcmVkTWltZVR5cGUsIGNvbXBsZXRlZFVSTCk7CiB9CiAKIGJvb2wgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6cmVxdWVzdE9iamVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFj
a0VsZW1lbnQuY3BwCmluZGV4IDNjNjMxNjYzNTc0OWViMzczMWE0Y2FjMmJmZTNlOWEwZmVjN2Y1
YmEuLmZkYzkxZmRiMTk0NzhlZmEwYThhNzBkNzdlYTE1ODMzOTM4OWI5YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMjE2LDExICsyMTYsMTMgQEAgYm9v
bCBIVE1MVHJhY2tFbGVtZW50OjpjYW5Mb2FkVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIGlmICh1
cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRvY3VtZW50
KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgaXNJ
blVzZXJBZ2VudFNoYWRvd1RyZWUoKSkpIHsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS5jb250ZW50
U2VjdXJpdHlQb2xpY3koKSk7CisgICAgLy8gRWxlbWVudHMgaW4gdXNlciBhZ2VudCBzaG93IHRy
ZWUgc2hvdWxkIGxvYWQgd2hhdGV2ZXIgdGhlIGVtYmVkZGluZyBkb2N1bWVudCBwb2xpY3kgaXMu
CisgICAgaWYgKCFpc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFkb2N1bWVudCgpLmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd01lZGlhRnJvbVNvdXJjZSh1cmwpKSB7CiAgICAgICAg
IExPRyhNZWRpYSwgIkhUTUxUcmFja0VsZW1lbnQ6OmNhbkxvYWRVUkwoJXMpIC0+IHJlamVjdGVk
IGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IiwgdXJsRm9yTG9nZ2luZ1RyYWNrKHVybCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBy
ZXR1cm4gZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsLnN0cmluZygpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRl
eCBkNDI1MWMzYTRiNDUxNDhhZWQ2NmY3NWYzMjNiYzc3YTEwZDY4MGY0Li41ZGRlNmUwMWVhN2E5
NDRkMDJhNWEyOWJkYTRjYjEzMDc4OGM2MzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIgot
I2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbC5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tlci5o
IgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKQEAgLTk4LDcg
Kzk3LDcgQEAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIoRG9jdW1lbnQmIGRvY3VtZW50LCBUaHJlYWRhYmwKICAgICAvLyBSZWZlcnJlciBhbmQgT3Jp
Z2luIGhlYWRlcnMgc2hvdWxkIGJlIHNldCBhZnRlciB0aGUgcHJlZmxpZ2h0IGlmIGFueS4KICAg
ICBBU1NFUlQoIXJlcXVlc3QuaGFzSFRUUFJlZmVycmVyKCkgJiYgIXJlcXVlc3QuaGFzSFRUUE9y
aWdpbigpKTsKIAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQWxsb3dl
ZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5KHJlcXVlc3QudXJsKCkpKTsKKyAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShy
ZXF1ZXN0LnVybCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNl
aXZlZDo6Tm8pKTsKIAogICAgIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gKG1fb3B0aW9u
cy5jcmVkZW50aWFscyA9PSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOjpJbmNsdWRlIHx8ICht
X29wdGlvbnMuY3JlZGVudGlhbHMgPT0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczo6U2FtZU9y
aWdpbiAmJiBtX3NhbWVPcmlnaW5SZXF1ZXN0KSkgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDog
RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogCkBAIC0yMjMsNyArMjIyLDcgQEAgdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlLCBSZXNvdXIKICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9
PSBtX3Jlc291cmNlKTsKIAogICAgIFJlZjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3Rl
Y3RlZFRoaXMoKnRoaXMpOwotICAgIGlmICghaXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xp
Y3kocmVxdWVzdC51cmwoKSwgIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpKSB7CisgICAgaWYg
KCFpc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShyZXF1ZXN0LnVybCgpLCByZWRpcmVj
dFJlc3BvbnNlLmlzTnVsbCgpID8gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQ6Ok5vIDogQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQ6OlllcykpIHsKICAgICAgICAgcmVwb3J0Q29udGVudFNlY3VyaXR5UG9saWN5RXJy
b3IoKm1fY2xpZW50LCByZWRpcmVjdFJlc3BvbnNlLnVybCgpKTsKICAgICAgICAgY2xlYXJSZXNv
dXJjZSgpOwogICAgICAgICByZXR1cm47CkBAIC00MTcsNyArNDE2LDcgQEAgdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2gKICAgICAvLyByZXF1ZXN0ZWQuIEFsc28gY29tcGFyaW5nIHRoZSByZXF1ZXN0
IGFuZCByZXNwb25zZSBVUkxzIGFzIHN0cmluZ3Mgd2lsbCBmYWlsIGlmIHRoZSByZXF1ZXN0VVJM
IHN0aWxsIGhhcyBpdHMgY3JlZGVudGlhbHMuCiAgICAgYm9vbCBkaWRSZWRpcmVjdCA9IHJlcXVl
c3RVUkwgIT0gcmVzcG9uc2UudXJsKCk7CiAgICAgaWYgKGRpZFJlZGlyZWN0KSB7Ci0gICAgICAg
IGlmICghaXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kocmVzcG9uc2UudXJsKCksIGRp
ZFJlZGlyZWN0KSkgeworICAgICAgICBpZiAoIWlzQWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9s
aWN5KHJlc3BvbnNlLnVybCgpLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZDo6WWVzKSkgewogICAgICAgICAgICAgcmVwb3J0Q29udGVudFNlY3VyaXR5UG9s
aWN5RXJyb3IoKm1fY2xpZW50LCByZXF1ZXN0VVJMKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtNDQ4LDIwICs0NDcsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFNlY3VyaXR5Q2gKICAg
ICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIsIDAuMCk7CiB9CiAKLWJvb2wgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBV
UkwmIHVybCwgYm9vbCBkaWRSZWRpcmVjdCkKK2Jvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojppc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBVUkwmIHVybCwgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25z
ZVJlY2VpdmVkKQogewotICAgIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBm
YWxzZTsKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWRpcmVjdCA/IENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMgOiBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm87Ci0KICAgICBzd2l0Y2ggKG1fb3B0
aW9ucy5jb250ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudCkgewogICAgIGNhc2UgQ29udGVu
dFNlY3VyaXR5UG9saWN5RW5mb3JjZW1lbnQ6OkRvTm90RW5mb3JjZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgY2FzZSBDb250ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudDo6RW5mb3Jj
ZUNoaWxkU3JjRGlyZWN0aXZlOgotICAgICAgICByZXR1cm4gY29udGVudFNlY3VyaXR5UG9saWN5
KCkuYWxsb3dDaGlsZENvbnRleHRGcm9tU291cmNlKHVybCwgb3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3ksIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCk7CisgICAgICAgIHJldHVybiBjb250
ZW50U2VjdXJpdHlQb2xpY3koKS5hbGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2UodXJsLCByZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQpOwogICAgIGNhc2UgQ29udGVudFNlY3VyaXR5UG9saWN5RW5m
b3JjZW1lbnQ6OkVuZm9yY2VDb25uZWN0U3JjRGlyZWN0aXZlOgotICAgICAgICByZXR1cm4gY29u
dGVudFNlY3VyaXR5UG9saWN5KCkuYWxsb3dDb25uZWN0VG9Tb3VyY2UodXJsLCBvdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeSwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKTsKKyAgICAgICAg
cmV0dXJuIGNvbnRlbnRTZWN1cml0eVBvbGljeSgpLmFsbG93Q29ubmVjdFRvU291cmNlKHVybCwg
cmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKTsKICAgICBjYXNlIENvbnRlbnRTZWN1cml0eVBvbGlj
eUVuZm9yY2VtZW50OjpFbmZvcmNlU2NyaXB0U3JjRGlyZWN0aXZlOgotICAgICAgICByZXR1cm4g
Y29udGVudFNlY3VyaXR5UG9saWN5KCkuYWxsb3dTY3JpcHRGcm9tU291cmNlKHVybCwgb3ZlcnJp
ZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCk7CisgICAg
ICAgIHJldHVybiBjb250ZW50U2VjdXJpdHlQb2xpY3koKS5hbGxvd1NjcmlwdEZyb21Tb3VyY2Uo
dXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKaW5kZXggNzg4ZjUyYzJhOTEzYjI1NGMyNWE4NGM0
Mjk0ODIwNTRmY2IxNDJiNy4uNzA2YWUwMjZjOWEwMDZhYTBkOTFlMjI2YmJhNTc0MTg1OWRmNDA0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXIuaApAQCAtMzEsNiArMzEsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnRl
bnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0Q2hlY2tl
ci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgpAQCAtOTQsNyArOTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCBsb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiwgU2VjdXJpdHlDaGVja1BvbGljeSk7
CiAgICAgICAgIGJvb2wgaXNBbGxvd2VkUmVkaXJlY3QoY29uc3QgVVJMJik7Ci0gICAgICAgIGJv
b2wgaXNBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3QgVVJMJiwgYm9vbCBkaWRS
ZWRpcmVjdCA9IGZhbHNlKTsKKyAgICAgICAgYm9vbCBpc0FsbG93ZWRCeUNvbnRlbnRTZWN1cml0
eVBvbGljeShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCk7CiAKICAgICAgICAgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0KCkgY29uc3QgZmlu
YWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDBjZGI0YjBjNDNm
YmI3ZDdiYjAwNzdiMjA2M2Y4MjUyN2I4N2JkNmEuLjUxZTc5ZTBlNjExMTI4MjE1MDliZGY4NTk1
OGFjZmE5YWFiY2JhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAt
OTQyLDcgKzk0Miw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNoZWNrSWZGb3JtQWN0aW9uQWxsb3dl
ZEJ5Q1NQKGNvbnN0IFVSTCYgdXJsLCBib29sIGRpZFJlY2VpdmVSCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgYXV0byByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZlUmVk
aXJlY3RSZXNwb25zZSA/IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkOjpZZXMgOiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNl
aXZlZDo6Tm87Ci0gICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93Rm9ybUFjdGlvbih1cmwsIGZhbHNlIC8qIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5ICovLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOworICAgIHJldHVybiBt
X2ZyYW1lLmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0Zvcm1BY3Rp
b24odXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOwogfQogCiBGcmFtZSogRnJhbWVMb2Fk
ZXI6Om9wZW5lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUG9saWN5Q2hlY2tlci5jcHAKaW5kZXgg
MjljNjUwNzc3ODAzZGM5NzZiZGUzMjYzMDc0MTk4NTQwYWQ5YzA0OS4uMTIzNmFhMjNlZGU1OWRl
NjM3OWU5NGZkODM2ZmUyNTg5MDExMzc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1BvbGljeUNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Qb2xpY3lD
aGVja2VyLmNwcApAQCAtNTUsMTAgKzU1LDE2IEBAIHN0YXRpYyBib29sIGlzQWxsb3dlZEJ5Q29u
dGVudFNlY3VyaXR5UG9saWN5KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBFbGVtZW50KiBvd25lCiB7
CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEVs
ZW1lbnRzIGluIHVzZXIgYWdlbnQgc2hvdyB0cmVlIHNob3VsZCBsb2FkIHdoYXRldmVyIHRoZSBl
bWJlZGRpbmcgZG9jdW1lbnQgcG9saWN5IGlzLgorICAgIGlmIChvd25lckVsZW1lbnQtPmlzSW5V
c2VyQWdlbnRTaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgYXV0byBy
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSA/IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpZZXMgOiBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm87CisKKyAgICBB
U1NFUlQob3duZXJFbGVtZW50LT5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsK
ICAgICBpZiAoaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KG93bmVyRWxlbWVudCkpCi0gICAgICAgIHJl
dHVybiBvd25lckVsZW1lbnQtPmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFs
bG93T2JqZWN0RnJvbVNvdXJjZSh1cmwsIG93bmVyRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRv
d1RyZWUoKSwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKTsKLSAgICByZXR1cm4gb3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0NoaWxkRnJhbWVG
cm9tU291cmNlKHVybCwgb3duZXJFbGVtZW50LT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpLCBy
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOworICAgICAgICByZXR1cm4gb3duZXJFbGVtZW50LT5k
b2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd09iamVjdEZyb21Tb3VyY2Uo
dXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOworICAgIHJldHVybiBvd25lckVsZW1lbnQt
PmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q2hpbGRGcmFtZUZyb21T
b3VyY2UodXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpOwogfQogCiBQb2xpY3lDaGVja2Vy
OjpQb2xpY3lDaGVja2VyKEZyYW1lJiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwCmluZGV4IDRhN2U1NTg5NzVhMWYyODU0YjZlY2I1M2U5YWJiYjJhNjUxZjk5
MGIuLmMwODYwODA2NTQzMDM2ZTlhMmM4ZTEwMmI0Y2Q0ZGY3ODRjYzJhYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcApAQCAtMjQ4LDkgKzI0OCwxMSBAQCBQYXNz
UmVmUHRyPFdpZGdldD4gU3ViZnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgSAogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgY2hhciBqYXZh
QXBwbGV0TWltZVR5cGVbXSA9ICJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IjsKLSAgICAgICAg
Ym9vbCBpc0luVXNlckFnZW50U2hhZG93VHJlZSA9IGVsZW1lbnQuaXNJblVzZXJBZ2VudFNoYWRv
d1RyZWUoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50LmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93T2JqZWN0RnJvbVNvdXJjZShjb2RlQmFzZVVSTCwgaXNJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUpCi0gICAgICAgICAgICB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRT
ZWN1cml0eVBvbGljeSgpLT5hbGxvd1BsdWdpblR5cGUoamF2YUFwcGxldE1pbWVUeXBlLCBqYXZh
QXBwbGV0TWltZVR5cGUsIGNvZGVCYXNlVVJMLCBpc0luVXNlckFnZW50U2hhZG93VHJlZSkpCisg
ICAgICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkp
OworICAgICAgICBhdXRvJiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSAqZWxlbWVudC5kb2N1bWVu
dCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpOworICAgICAgICAvLyBFbGVtZW50cyBpbiB1c2Vy
IGFnZW50IHNob3cgdHJlZSBzaG91bGQgbG9hZCB3aGF0ZXZlciB0aGUgZW1iZWRkaW5nIGRvY3Vt
ZW50IHBvbGljeSBpcy4KKyAgICAgICAgaWYgKCFlbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dU
cmVlKCkKKyAgICAgICAgICAgICYmICghY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93T2JqZWN0
RnJvbVNvdXJjZShjb2RlQmFzZVVSTCkgfHwgIWNvbnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd1Bs
dWdpblR5cGUoamF2YUFwcGxldE1pbWVUeXBlLCBqYXZhQXBwbGV0TWltZVR5cGUsIGNvZGVCYXNl
VVJMKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4
IDAxN2E2MTg0OTdjMDFlOTk0NzgwNjAyODNiZWU1NDU4ZDFlNGIyMjYuLmE5NGNiYzEyYzViNDc4
NDUyMTgyMDA0MDZhMDRkYWZiNmQzNjE5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcApAQCAtMzk5LDMwICszOTksMzAg
QEAgYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6YWxsb3dlZEJ5Q29udGVudFNlY3VyaXR5UG9s
aWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHQKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xT
dHlsZVNoZWV0OgogI2VuZGlmCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAg
ICAgICBpZiAoIW1fZG9jdW1lbnQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1Njcmlw
dEZyb21Tb3VyY2UodXJsLCBmYWxzZSwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAg
ICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRG
cm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NT
U3R5bGVTaGVldDoKLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+YWxsb3dTdHlsZUZyb21Tb3VyY2UodXJsLCBmYWxzZSwgcmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3ko
KS0+YWxsb3dTdHlsZUZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5
UG9saWN5KCktPmFsbG93SW1hZ2VGcm9tU291cmNlKHVybCwgZmFsc2UsIHJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9s
aWN5KCktPmFsbG93SW1hZ2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVk
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxF
KFNWR19GT05UUykKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250UmVzb3VyY2U6CiAj
ZW5kaWYKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIGlm
ICghbV9kb2N1bWVudC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Rm9udEZyb21Tb3Vy
Y2UodXJsLCBmYWxzZSwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSkKKyAgICAgICAgaWYgKCFt
X2RvY3VtZW50LT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dGb250RnJvbVNvdXJjZSh1
cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1lZGlhUmVzb3VyY2U6
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRU
cmFja1Jlc291cmNlOgogI2VuZGlmCi0gICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNl
Y3VyaXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgZmFsc2UsIHJlZGlyZWN0
UmVzcG9uc2VSZWNlaXZlZCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudC0+Y29udGVudFNlY3Vy
aXR5UG9saWN5KCktPmFsbG93TWVkaWFGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuY3BwCmluZGV4IGQxMzgyMDVjMjcyMDk2MDZiNWZmYzcwNjhiYTg1MmVlNTNhYzYyMTcuLjQ0
MmJiOWJlMDNjZmJmZTk4ZmE5NDc1OGMzNGEyMzZkY2JjODc3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwCkBAIC03Miw3ICs3Miw3IEBAIFJlZlB0cjxFdmVudFNvdXJjZT4gRXZl
bnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBT
CiAgICAgfQogCiAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBjaGVjayB0aGUgaXNvbGF0
ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdlYmtpdC5vcmcvYi8xMDQ1
MjAgaXMgc29sdmVkLgotICAgIGlmICghY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+
YWxsb3dDb25uZWN0VG9Tb3VyY2UoZnVsbFVSTCwgY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSkpIHsKKyAgICBpZiAoIWNvbnRleHQuc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KCkgJiYgIWNvbnRleHQuY29udGVudFNl
Y3VyaXR5UG9saWN5KCktPmFsbG93Q29ubmVjdFRvU291cmNlKGZ1bGxVUkwpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB0aHJvd2luZyBhbiBleGNlcHRpb24/CiAgICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IGFiYTY0
OTM0NzI0ZmE5OTAzMTliYzkxODdkZTQxODdiOTMwMjYyNGQuLmM4NTY5Y2NlYjJjYWU4NmI2MjE0
YmM0N2NkNzhmN2ZlYzk0MWM1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5LmNwcApAQCAtNDUxLDI1ICs0NTEsOCBAQCBib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dQbHVnaW5UeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiB0eQogICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KFdURk1vdmUoaGFuZGxl
VmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
dmlvbGF0ZWREaXJlY3RpdmVGb3JQbHVnaW5UeXBlLCB0eXBlLCB0eXBlQXR0cmlidXRlKTsKIH0K
IAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25z
dCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKK2Jvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjphbGxvd09iamVjdEZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmws
IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0
CiB7Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRl
bnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIFN0cmluZyBzb3VyY2VVUkw7Ci0gICAgVGV4dFBvc2l0aW9uIHNvdXJjZVBvc2l0aW9uKFdU
Rjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRpbmFsTnVtYmVyKCkpOwot
ICAgIGF1dG8gaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUgPSBbJl0gKGNvbnN0IENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUpIHsKLSAgICAgICAgU3RyaW5n
IGNvbnNvbGVNZXNzYWdlID0gY29uc29sZU1lc3NhZ2VGb3JWaW9sYXRpb24oQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYywgdmlvbGF0ZWREaXJlY3RpdmUsIHVy
bCwgIlJlZnVzZWQgdG8gbG9hZCIpOwotICAgICAgICByZXBvcnRWaW9sYXRpb24oQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OnNjcmlwdFNyYywgdmlvbGF0ZWREaXJlY3RpdmUs
IHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291cmNlUG9zaXRpb24pOwotICAgIH07
Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5kbGVWaW9sYXRlZERpcmVj
dGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVj
dGl2ZUZvclNjcmlwdCwgdXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPT0gUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkOjpZZXMpOwotfQotCi1ib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
YWxsb3dPYmplY3RGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVu
dFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25z
ZVJlY2VpdmVkKSBjb25zdAotewotICAgIGlmIChvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzY2hlbWVT
aG91bGRCeXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsLnByb3RvY29sKCkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAvLyBBcyBwZXIgc2VjdGlvbiBvYmplY3Qtc3JjIG9mIHRoZSBD
b250ZW50IFNlY3VyaXR5IFBvbGljeSBMZXZlbCAzIHNwZWMuLCA8aHR0cDovL3czYy5naXRodWIu
aW8vd2ViYXBwc2VjLWNzcD4gKEVkaXRvcidzIERyYWZ0LCAyOSBGZWJydWFyeSAyMDE2KSwKQEAg
LTQ4NCwxMCArNDY3LDggQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93T2JqZWN0
RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUMKICAgICByZXR1cm4gYWxs
UG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlKSwgJkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yT2JqZWN0U291
cmNlLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVj
ZWl2ZWQ6OlllcywgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZTo6U2hv
dWxkQWxsb3dFbXB0eVVSTElmU291cmNlTGlzdElzTm90Tm9uZTo6WWVzKTsKIH0KIAotYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q2hpbGRGcmFtZUZyb21Tb3VyY2UoY29uc3QgVVJM
JiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0Citib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwg
UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QK
IHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAgIHJldHVy
biB0cnVlOwogICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVu
dFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgU3RyaW5nIHNvdXJjZVVSTDsKQEAgLTUwMCw4NSArNDgxLDUxIEBAIGJvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBi
b29sIG92ZXJyCiAgICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5kbGVWaW9s
YXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9s
YXRlZERpcmVjdGl2ZUZvckZyYW1lLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5OjphbGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIGJvb2wg
b3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCBy
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0Citib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQsIGNvbnN0IGNoYXIqIG5hbWUsIFJl
c291cmNlUHJlZGljYXRlIHJlc291cmNlUHJlZGljYXRlKSBjb25zdAogewotICAgIGlmIChvdmVy
cmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYg
KFNjaGVtZVJlZ2lzdHJ5OjpzY2hlbWVTaG91bGRCeXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3ko
dXJsLnByb3RvY29sKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBTdHJpbmcgc291cmNl
VVJMOwogICAgIFRleHRQb3NpdGlvbiBzb3VyY2VQb3NpdGlvbihXVEY6Ok9yZGluYWxOdW1iZXI6
OmJlZm9yZUZpcnN0KCksIFdURjo6T3JkaW5hbE51bWJlcigpKTsKICAgICBhdXRvIGhhbmRsZVZp
b2xhdGVkRGlyZWN0aXZlID0gWyZdIChjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmUmIHZpb2xhdGVkRGlyZWN0aXZlKSB7Ci0gICAgICAgIFN0cmluZyBjb25zb2xlTWVzc2FnZSA9
IGNvbnNvbGVNZXNzYWdlRm9yVmlvbGF0aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZU5hbWVzOjpjaGlsZFNyYywgdmlvbGF0ZWREaXJlY3RpdmUsIHVybCwgIlJlZnVzZWQgdG8gbG9h
ZCIpOwotICAgICAgICByZXBvcnRWaW9sYXRpb24oQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTmFtZXM6OmNoaWxkU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJsLCBjb25zb2xlTWVzc2Fn
ZSwgc291cmNlVVJMLCBzb3VyY2VQb3NpdGlvbik7CisgICAgICAgIFN0cmluZyBjb25zb2xlTWVz
c2FnZSA9IGNvbnNvbGVNZXNzYWdlRm9yVmlvbGF0aW9uKG5hbWUsIHZpb2xhdGVkRGlyZWN0aXZl
LCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKKyAgICAgICAgcmVwb3J0VmlvbGF0aW9uKG5hbWUs
IHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsIGNvbnNvbGVNZXNzYWdlLCBzb3VyY2VVUkwsIHNvdXJj
ZVBvc2l0aW9uKTsKICAgICB9OwotICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KFdURk1vdmUo
aGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JDaGlsZENvbnRleHQsIHVybCwgcmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6WWVzKTsKKyAgICByZXR1
cm4gYWxsUG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlKSwgcmVz
b3VyY2VQcmVkaWNhdGUsIHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID09IFJlZGlyZWN0
UmVzcG9uc2VSZWNlaXZlZDo6WWVzKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVu
dFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25z
ZVJlY2VpdmVkKSBjb25zdAorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q2hpbGRD
b250ZXh0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVk
IHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChTY2hlbWVS
ZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90
b2NvbCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAg
ICBUZXh0UG9zaXRpb24gc291cmNlUG9zaXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVG
aXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAgYXV0byBoYW5kbGVWaW9sYXRlZERp
cmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlJiB2aW9s
YXRlZERpcmVjdGl2ZSkgewotICAgICAgICBTdHJpbmcgY29uc29sZU1lc3NhZ2UgPSBjb25zb2xl
TWVzc2FnZUZvclZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
aW1nU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJsLCAiUmVmdXNlZCB0byBsb2FkIik7Ci0gICAg
ICAgIHJlcG9ydFZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6
aW1nU3JjLCB2aW9sYXRlZERpcmVjdGl2ZSwgdXJsLCBjb25zb2xlTWVzc2FnZSwgc291cmNlVVJM
LCBzb3VyY2VQb3NpdGlvbik7Ci0gICAgfTsKLSAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhX
VEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlKSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9ySW1hZ2UsIHVybCwgcmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6WWVzKTsKKyAgICByZXR1
cm4gYWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpjaGlsZFNyYywgJkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yQ2hpbGRDb250
ZXh0KTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U3R5bGVGcm9tU291
cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkKSBjb25zdAor
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25zdCBV
UkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlw
YXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBUZXh0UG9zaXRpb24gc291cmNlUG9z
aXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1i
ZXIoKSk7Ci0gICAgYXV0byBoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSkgewotICAgICAg
ICBTdHJpbmcgY29uc29sZU1lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZvclZpb2xhdGlvbihDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6c3R5bGVTcmMsIHZpb2xhdGVkRGlyZWN0
aXZlLCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVwb3J0VmlvbGF0aW9uKENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpzdHlsZVNyYywgdmlvbGF0ZWREaXJl
Y3RpdmUsIHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291cmNlUG9zaXRpb24pOwot
ICAgIH07Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5kbGVWaW9sYXRl
ZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRl
ZERpcmVjdGl2ZUZvclN0eWxlLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRp
cmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CisgICAgcmV0dXJuIGFsbG93UmVzb3VyY2VGcm9t
U291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVOYW1lczo6c2NyaXB0U3JjLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JTY3JpcHQpOwogfQogCi1ib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dGb250RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBv
dmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5
OjphbGxvd0ltYWdlRnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgUmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKIHsKLSAgICBpZiAob3ZlcnJp
ZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChT
Y2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVy
bC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVS
TDsKLSAgICBUZXh0UG9zaXRpb24gc291cmNlUG9zaXRpb24oV1RGOjpPcmRpbmFsTnVtYmVyOjpi
ZWZvcmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXIoKSk7Ci0gICAgYXV0byBoYW5kbGVWaW9s
YXRlZERpcmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
JiB2aW9sYXRlZERpcmVjdGl2ZSkgewotICAgICAgICBTdHJpbmcgY29uc29sZU1lc3NhZ2UgPSBj
b25zb2xlTWVzc2FnZUZvclZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVO
YW1lczo6Zm9udFNyYywgdmlvbGF0ZWREaXJlY3RpdmUsIHVybCwgIlJlZnVzZWQgdG8gbG9hZCIp
OwotICAgICAgICByZXBvcnRWaW9sYXRpb24oQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TmFtZXM6OmZvbnRTcmMsIHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsIGNvbnNvbGVNZXNzYWdlLCBz
b3VyY2VVUkwsIHNvdXJjZVBvc2l0aW9uKTsKLSAgICB9OwotICAgIHJldHVybiBhbGxQb2xpY2ll
c0FsbG93KFdURk1vdmUoaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JGb250LCB1cmwsIHJlZGly
ZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7Cisg
ICAgcmV0dXJuIGFsbG93UmVzb3VyY2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJl
Y2VpdmVkLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6aW1nU3JjLCAmQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JJbWFn
ZSk7CiB9CiAKLWJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd01lZGlhRnJvbVNvdXJj
ZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgUmVk
aXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKK2Jv
b2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1N0eWxlRnJvbVNvdXJjZShjb25zdCBVUkwm
IHVybCwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkg
Y29uc3QKIHsKLSAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNz
Q29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLSAgICBUZXh0UG9zaXRpb24gc291cmNlUG9zaXRp
b24oV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBXVEY6Ok9yZGluYWxOdW1iZXIo
KSk7Ci0gICAgYXV0byBoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSA9IFsmXSAoY29uc3QgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlJiB2aW9sYXRlZERpcmVjdGl2ZSkgewotICAgICAgICBT
dHJpbmcgY29uc29sZU1lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZUZvclZpb2xhdGlvbihDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6bWVkaWFTcmMsIHZpb2xhdGVkRGlyZWN0aXZl
LCB1cmwsICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVwb3J0VmlvbGF0aW9uKENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNyYywgdmlvbGF0ZWREaXJlY3Rp
dmUsIHVybCwgY29uc29sZU1lc3NhZ2UsIHNvdXJjZVVSTCwgc291cmNlUG9zaXRpb24pOwotICAg
IH07Ci0gICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coV1RGTW92ZShoYW5kbGVWaW9sYXRlZERp
cmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERp
cmVjdGl2ZUZvck1lZGlhLCB1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9PSBSZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQ6Olllcyk7CisgICAgcmV0dXJuIGFsbG93UmVzb3VyY2VGcm9tU291
cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVOYW1lczo6c3R5bGVTcmMsICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvclN0eWxlKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJy
aWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgcmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkKSBjb25zdAorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bG93Rm9udEZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFsbG93UmVz
b3VyY2VGcm9tU291cmNlKHVybCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6Zm9udFNyYywgJkNvbnRlbnRTZWN1cml0eVBvbGlj
eURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yRm9udCk7Cit9CisKK2Jvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjphbGxvd01lZGlhRnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwg
UmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWxsb3dSZXNvdXJjZUZyb21Tb3VyY2UodXJsLCByZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjptZWRpYVNy
YywgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZl
Rm9yTWVkaWEpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDb25uZWN0
VG9Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0CiB7Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoU2NoZW1lUmVnaXN0cnk6
OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01OTAsMTkg
KzUzNyw5IEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0Nvbm5lY3RUb1NvdXJj
ZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvCiAgICAgcmV0dXJuIGFsbFBvbGljaWVz
QWxsb3coV1RGTW92ZShoYW5kbGVWaW9sYXRlZERpcmVjdGl2ZSksICZDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvckNvbm5lY3RTb3VyY2UsIHVy
bCwgcmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID09IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6
WWVzKTsKIH0KIAotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Rm9ybUFjdGlvbihj
b25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgUmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCkgY29uc3QKK2Jvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0Zvcm1BY3Rpb24oY29uc3QgVVJMJiB1cmwsIFJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQpIGNvbnN0CiB7
Ci0gICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRT
ZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IFN0cmluZyBzb3VyY2VVUkw7Ci0gICAgVGV4dFBvc2l0aW9uIHNvdXJjZVBvc2l0aW9uKFdURjo6
T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRpbmFsTnVtYmVyKCkpOwotICAg
IGF1dG8gaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUgPSBbJl0gKGNvbnN0IENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUpIHsKLSAgICAgICAgU3RyaW5nIGNv
bnNvbGVNZXNzYWdlID0gY29uc29sZU1lc3NhZ2VGb3JWaW9sYXRpb24oQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24sIHZpb2xhdGVkRGlyZWN0aXZlLCB1cmws
ICJSZWZ1c2VkIHRvIGxvYWQiKTsKLSAgICAgICAgcmVwb3J0VmlvbGF0aW9uKENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZU5hbWVzOjpmb3JtQWN0aW9uLCB2aW9sYXRlZERpcmVjdGl2ZSwg
dXJsLCBjb25zb2xlTWVzc2FnZSwgc291cmNlVVJMLCBzb3VyY2VQb3NpdGlvbik7Ci0gICAgfTsK
LSAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhXVEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0
aXZlKSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0
aXZlRm9yRm9ybUFjdGlvbiwgdXJsLCByZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPT0gUmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkOjpZZXMpOworICAgIHJldHVybiBhbGxvd1Jlc291cmNlRnJvbVNv
dXJjZSh1cmwsIHJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTmFtZXM6OmZvcm1BY3Rpb24sICZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0Ojp2aW9sYXRlZERpcmVjdGl2ZUZvckZvcm1BY3Rpb24pOwogfQogCiBib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJy
aWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAppbmRleCBlOTE3ZDY3MWRhNWQ1MTA3Y2E2OWEx
NzAyZWEzZmY1ZTM5ZWNlNzYzLi4zZmRjZDE2MDk5ODk0YzAwOWQ1YWJjNmNjMzkwNTQ3MzY3ZDRh
NjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuaApAQCAtOTgsMTcgKzk4LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93RnJhbWVBbmNl
c3RvcnMoY29uc3QgRnJhbWUmLCBjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0OwogCiAgICAgZW51bSBjbGFzcyBSZWRpcmVjdFJlc3Bv
bnNlUmVjZWl2ZWQgeyBObywgWWVzIH07Ci0gICAgYm9vbCBhbGxvd1NjcmlwdEZyb21Tb3VyY2Uo
Y29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBj
b25zdDsKLSAgICBib29sIGFsbG93Q2hpbGRGcmFtZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgYm9v
bCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsKLSAgICBib29s
IGFsbG93Q2hpbGRDb250ZXh0RnJvbVNvdXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwotICAgIGJvb2wgYWxsb3dJbWFnZUZy
b21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9
IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2
ZWQ6Ok5vKSBjb25zdDsKLSAgICBib29sIGFsbG93U3R5bGVGcm9tU291cmNlKGNvbnN0IFVSTCYs
IGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgUmVkaXJlY3RSZXNw
b25zZVJlY2VpdmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7Ci0gICAg
Ym9vbCBhbGxvd0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJl
Y3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd01lZGlhRnJvbVNv
dXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFs
c2UsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6
Tm8pIGNvbnN0OwotICAgIGJvb2wgYWxsb3dDb25uZWN0VG9Tb3VyY2UoY29uc3QgVVJMJiwgYm9v
bCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsKLSAgICBib29s
IGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5
UG9saWN5ID0gZmFsc2UsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwotCi0gICAgYm9vbCBhbGxvd09iamVjdEZyb21Tb3VyY2Uo
Y29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBS
ZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBj
b25zdDsKKyAgICBib29sIGFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25zdCBVUkwmLCBSZWRpcmVj
dFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5vKSBjb25zdDsK
KyAgICBib29sIGFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9u
c2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OworICAgIGJv
b2wgYWxsb3dTdHlsZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2Vp
dmVkID0gUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisgICAgYm9vbCBhbGxv
d0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OworICAgIGJvb2wgYWxsb3dNZWRpYUZy
b21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisKKyAgICBib29sIGFsbG93Q2hpbGRGcmFtZUZy
b21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0NoaWxkQ29udGV4dEZy
b21Tb3VyY2UoY29uc3QgVVJMJiwgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkID0gUmVkaXJlY3RS
ZXNwb25zZVJlY2VpdmVkOjpObykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0Nvbm5lY3RUb1NvdXJj
ZShjb25zdCBVUkwmLCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNl
UmVjZWl2ZWQ6Ok5vKSBjb25zdDsKKyAgICBib29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwm
LCBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQgPSBSZWRpcmVjdFJlc3BvbnNlUmVjZWl2ZWQ6Ok5v
KSBjb25zdDsKKworICAgIGJvb2wgYWxsb3dPYmplY3RGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJl
ZGlyZWN0UmVzcG9uc2VSZWNlaXZlZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNv
bnN0OwogICAgIGJvb2wgYWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2b2lkIHNldE92ZXJyaWRl
QWxsb3dJbmxpbmVTdHlsZShib29sKTsKQEAgLTE4OCw2ICsxODksOSBAQCBwcml2YXRlOgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICBib29s
IGFsbFBvbGljaWVzQWxsb3coVmlvbGF0ZWREaXJlY3RpdmVDYWxsYmFjayYmLCBQcmVkaWNhdGUm
JiwgQXJncyYmLi4uKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAKKyAgICB1c2luZyBSZXNv
dXJjZVByZWRpY2F0ZSA9IGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSAqKENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiopKGNvbnN0IFVSTCAmLCBib29sKSBj
b25zdDsKKyAgICBib29sIGFsbG93UmVzb3VyY2VGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJlZGly
ZWN0UmVzcG9uc2VSZWNlaXZlZCwgY29uc3QgY2hhciosIFJlc291cmNlUHJlZGljYXRlKSBjb25z
dDsKKwogICAgIHVzaW5nIEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciA9
IHN0ZDo6cGFpcjxib29sLCBib29sPjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+
IEhhc2hJbkVuZm9yY2VkQW5kUmVwb3J0T25seVBvbGljaWVzUGFpciBmaW5kSGFzaE9mQ29udGVu
dEluUG9saWNpZXMoUHJlZGljYXRlJiYsIGNvbnN0IFN0cmluZyYgY29udGVudCwgT3B0aW9uU2V0
PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+KSBjb25zdCBXQVJOX1VOVVNFRF9S
RVRVUk47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKaW5kZXgg
MWY5ZjI3NGYwZTI0ZjY3YjYzYzI1ZmU4ZmQzMTk5NWU1MWQ4YTQyOC4uNDkwZDJkN2Y3YzdhY2Y1
NDA5MjRlOGJlMTQ1NjEwMTQwOWY0OWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgVVJMIEFic3RyYWN0V29ya2VyOjpyZXNv
bHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnQK
ICAgICB9CiAKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRl
bnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2Uoc2NyaXB0VVJM
LCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpKSB7CisgICAgaWYg
KCFzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kgJiYgIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93Q2hpbGRDb250
ZXh0RnJvbVNvdXJjZShzY3JpcHRVUkwpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwog
ICAgICAgICByZXR1cm4gVVJMKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmNwcAppbmRleCA5N2FhMWNmYjJiZjcwZTZmMzE5N2Y4ZGExOWNkNzNl
MDAzOTAzZmQ4Li5jMWIzZGY3MWFhMTA4NjJjNGJlNTc5NTgxODUyYzFiNDljNTQzMjMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMjE2LDEx
ICsyMTYsMTQgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6Y2xlYXJJbnRlcnZhbChpbnQgdGlt
ZW91dElkKQogCiB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB1cmxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQoY29udGVudFNlY3VyaXR5UG9saWN5
KCkpOworCisgICAgYXV0byYgY29udGV4dCA9ICpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgZWMgPSAwOwogICAgIFZlY3RvcjxVUkw+IGNvbXBsZXRlZFVSTHM7CiAgICAgZm9yIChhdXRv
JiBlbnRyeSA6IHVybHMpIHsKLSAgICAgICAgVVJMIHVybCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+Y29tcGxldGVVUkwoZW50cnkpOworICAgICAgICBVUkwgdXJsID0gY29udGV4dC5jb21w
bGV0ZVVSTChlbnRyeSk7CiAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgewogICAgICAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMwLDE0ICsyMzMs
MTQgQEAgdm9pZCBXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgdXJscywgRXhjZXB0aW9uQ29kZSYKIAogICAgIGZvciAoYXV0byYgdXJsIDogY29t
cGxldGVkVVJMcykgewogICAgICAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGNoZWNrIHRo
ZSBpc29sYXRlZCB3b3JsZCdzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IG9uY2Ugd2Via2l0Lm9y
Zy9iLzEwNDUyMCBpcyBzb2x2ZWQuCi0gICAgICAgIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxk
Q29udGVudFNlY3VyaXR5UG9saWN5ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zaG91bGRC
eXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKTsKLSAgICAgICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1Njcmlw
dEZyb21Tb3VyY2UodXJsLCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3kpKSB7CisgICAgICAgIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5
UG9saWN5ID0gY29udGV4dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xp
Y3koKTsKKyAgICAgICAgaWYgKCFzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQ
b2xpY3kgJiYgIWNvbnRleHQuY29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93U2NyaXB0RnJv
bVNvdXJjZSh1cmwpKSB7CiAgICAgICAgICAgICBlYyA9IE5FVFdPUktfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgUmVmPFdvcmtlclNjcmlwdExvYWRlcj4g
c2NyaXB0TG9hZGVyID0gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUoKTsKLSAgICAgICAgc2Ny
aXB0TG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHVy
bCwgRmV0Y2hPcHRpb25zOjpNb2RlOjpOb0NvcnMsIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRl
bnRTZWN1cml0eVBvbGljeSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUVuZm9yY2VtZW50OjpEb05v
dEVuZm9yY2UgOiBDb250ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudDo6RW5mb3JjZVNjcmlw
dFNyY0RpcmVjdGl2ZSk7CisgICAgICAgIHNjcmlwdExvYWRlci0+bG9hZFN5bmNocm9ub3VzbHko
JmNvbnRleHQsIHVybCwgRmV0Y2hPcHRpb25zOjpNb2RlOjpOb0NvcnMsIHNob3VsZEJ5cGFzc01h
aW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUVuZm9y
Y2VtZW50OjpEb05vdEVuZm9yY2UgOiBDb250ZW50U2VjdXJpdHlQb2xpY3lFbmZvcmNlbWVudDo6
RW5mb3JjZVNjcmlwdFNyY0RpcmVjdGl2ZSk7CiAKICAgICAgICAgLy8gSWYgdGhlIGZldGNoaW5n
IGF0dGVtcHQgZmFpbGVkLCB0aHJvdyBhIE5FVFdPUktfRVJSIGV4Y2VwdGlvbiBhbmQgYWJvcnQg
YWxsIHRoZXNlIHN0ZXBzLgogICAgICAgICBpZiAoc2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkgewpA
QCAtMjQ1LDcgKzI0OCw3IEBAIHZvaWQgV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNj
cmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc2NyaXB0TG9hZGVyLT5pZGVu
dGlmaWVyKCksIHNjcmlwdExvYWRlci0+c2NyaXB0KCkpOworICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKCZjb250ZXh0LCBzY3JpcHRMb2FkZXItPmlkZW50
aWZpZXIoKSwgc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7CiAKICAgICAgICAgTmFrZWRQdHI8SlND
OjpFeGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICAgICAgbV9zY3JpcHQtPmV2YWx1YXRlKFNjcmlw
dFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc2NyaXB0TG9hZGVyLT5yZXNwb25z
ZVVSTCgpKSwgZXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmlu
ZGV4IDVkMWYzZmEzYTNjZjYzNDY5YzczNjhjOTQ5OWZjNDc0OGNlMWZlMjEuLjc3MjY2YTE0OGYz
YzI5NWJhYmNmY2EzMTkxNjMxZTNmZTNkYmE5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcApAQCAtNDk0LDYgKzQ5NCw4IEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OmluaXRT
ZW5kKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBhdXRvJiBjb250ZXh0ID0gKnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKwogICAgIGlmIChtX3N0YXRlICE9IE9QRU5FRCB8fCBtX3NlbmRG
bGFnKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTUwMSw3ICs1MDMsNyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0Ojppbml0U2VuZChF
eGNlcHRpb25Db2RlJiBlYykKICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKIAogICAgIC8vIEZJWE1F
OiBDb252ZXJ0IHRoaXMgdG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1
cml0eSBQb2xpY3kgb25jZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlzIHNvbHZlZC4KLSAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93
Q29ubmVjdFRvU291cmNlKG1fdXJsLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNob3VsZEJ5
cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSgpKSkgeworICAgIGlmICghY29udGV4
dC5zaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGV4
dC5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UobV91cmwpKSB7
CiAgICAgICAgIGlmIChtX2FzeW5jKSB7CiAgICAgICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CiAgICAgICAgICAgICBtX3RpbWVvdXRUaW1lci5zdG9wKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>