<?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>22666</bug_id>
          
          <creation_ts>2008-12-04 16:58:07 -0800</creation_ts>
          <short_desc>Clean up data structures used when collecting URLs of subresources for webarchives</short_desc>
          <delta_ts>2008-12-07 15:20:54 -0800</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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>11850</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101416</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-04 16:58:07 -0800</bug_when>
    <thetext>*SUMMARY
When creating a webarchive from WebCore::LegacyWebArchive::create(), HashSet&lt;String&gt;, Vector&lt;KURL&gt; and Vector&lt;String&gt; were all used to store a list of URLs for resources found in the document.  Instead use a single ListHashSet&lt;KURL&gt; to store the list and resolve the relative URLs as they&apos;re added.

A patch for this was attached to Bug 11850 (see Attachment #25753), but had some issues dealing with empty KURL objects.

See also Bug 11850 Comment #4 for Darin Adler&apos;s feedback on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101532</commentid>
    <comment_count>1</comment_count>
      <attachid>25780</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-05 11:54:34 -0800</bug_when>
    <thetext>Created attachment 25780
Patch v1

Proposed patch.

See Bug 11850 Comment #4 for comments on a previous version of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101549</commentid>
    <comment_count>2</comment_count>
      <attachid>25780</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-05 13:18:50 -0800</bug_when>
    <thetext>Comment on attachment 25780
Patch v1

&gt; -    virtual void addSubresourceURLStrings(HashSet&lt;String&gt;&amp;, const String&amp; baseURL) const;
&gt; +    virtual void getSubresourceStyleURLs(ListHashSet&lt;KURL&gt;&amp;, const KURL&amp; baseURL) const;

&gt; -    virtual void addSubresourceURLStrings(HashSet&lt;String&gt;&amp;, const String&amp; baseURL) const { }
&gt; +    virtual void getSubresourceStyleURLs(ListHashSet&lt;KURL&gt;&amp;, const KURL&amp; baseURL) const { }

It seems that if a function is named &quot;get&quot; then it can assume it starts with an empty set and either add to it or replace the set with a whole new one or whatever. But if its job is only to add URLs to an existing set, then it should be named &quot;add&quot;. Which kind of functions are these?

&gt; +            ListHashSet&lt;KURL&gt;::iterator kurlIteratorEnd = subresourceURLs.end();
&gt; +            for (ListHashSet&lt;KURL&gt;::iterator kurlIterator = subresourceURLs.begin(); kurlIterator != kurlIteratorEnd; ++kurlIterator) {

I don&apos;t think it&apos;s good to use &quot;kurl&quot; in this name. Later we&apos;ll rename it. Maybe subresourceIterator, or it, or iter?

&gt; +inline void addSubresourceURLForLegacyWebArchive(ListHashSet&lt;KURL&gt;&amp; urls, const KURL&amp; url)

It might be cleaner and inspire less need to include LegacyWebArchive.h if you make this a static member function of the same class that defines the function that has to accumulate the URLs. But I also think it&apos;s OK as-is.

I think it&apos;s a little strange that this function mentions LegacyWebArchive in its name, but functions like getSubresourceStyleURLs don&apos;t. They work as a team.

&gt; +    addSubresourceURLForLegacyWebArchive(urls, document()-&gt;completeURL(href()));

You also might want a helper that does the completeURL work. Are you sure you got this right, calling completeURL in all the cases where it&apos;s needed and none of the cases where it&apos;s already done?

r=me as-is despite the comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101609</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-05 17:24:55 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 25780 [review])
&gt; &gt; -    virtual void addSubresourceURLStrings(HashSet&lt;String&gt;&amp;, const String&amp; baseURL) const;
&gt; &gt; +    virtual void getSubresourceStyleURLs(ListHashSet&lt;KURL&gt;&amp;, const KURL&amp; baseURL) const;
&gt; &gt; -    virtual void addSubresourceURLStrings(HashSet&lt;String&gt;&amp;, const String&amp; baseURL) const { }
&gt; &gt; +    virtual void getSubresourceStyleURLs(ListHashSet&lt;KURL&gt;&amp;, const KURL&amp; baseURL) const { }
&gt; 
&gt; It seems that if a function is named &quot;get&quot; then it can assume it starts with an
&gt; empty set and either add to it or replace the set with a whole new one or
&gt; whatever. But if its job is only to add URLs to an existing set, then it should
&gt; be named &quot;add&quot;. Which kind of functions are these?

They&apos;re all methods that add to the list.  I&apos;ll change them back from get...() to add...().

Technically, they could be all add() methods since each one adds URLs to the list, but I suppose we want to make Node::getSubresourceURLs() stand out since we want people to call it instead.

&gt; &gt; +            ListHashSet&lt;KURL&gt;::iterator kurlIteratorEnd = subresourceURLs.end();
&gt; &gt; +            for (ListHashSet&lt;KURL&gt;::iterator kurlIterator = subresourceURLs.begin(); kurlIterator != kurlIteratorEnd; ++kurlIterator) {
&gt; 
&gt; I don&apos;t think it&apos;s good to use &quot;kurl&quot; in this name. Later we&apos;ll rename it.
&gt; Maybe subresourceIterator, or it, or iter?

There was already an &quot;it&quot; iterator in scope.  I considered &quot;it2&quot;, but preferred something more descriptive.  Maybe &quot;listIt&quot; or &quot;listIter&quot; or &quot;listIterator&quot;.  Would &quot;jt&quot; be too subtle?  :)

I think I&apos;ll just go with &quot;it2&quot;.

&gt; &gt; +inline void addSubresourceURLForLegacyWebArchive(ListHashSet&lt;KURL&gt;&amp; urls, const KURL&amp; url)
&gt; 
&gt; It might be cleaner and inspire less need to include LegacyWebArchive.h if you
&gt; make this a static member function of the same class that defines the function
&gt; that has to accumulate the URLs. But I also think it&apos;s OK as-is.

Put it into WebCore::Node?  I&apos;ll look at doing that.

&gt; I think it&apos;s a little strange that this function mentions LegacyWebArchive in
&gt; its name, but functions like getSubresourceStyleURLs don&apos;t. They work as a
&gt; team.
&gt; 
&gt; &gt; +    addSubresourceURLForLegacyWebArchive(urls, document()-&gt;completeURL(href()));

I&apos;ll take out the &quot;ForLegacyWebArchive&quot; part.

&gt; You also might want a helper that does the completeURL work. Are you sure you
&gt; got this right, calling completeURL in all the cases where it&apos;s needed and none
&gt; of the cases where it&apos;s already done?

I&apos;ll look through all the new cases by hand.  There were only a dozen or two of them.

Note that the old code did this for every single URL returned from getSubresourceAttributeStrings(), so it was doing much more work than it needed to.  (I was basing the need to use document-&gt;completeURL() on whether the method returned a String versus a KURL.  Will do more research as noted above before landing this.)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101613</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-05 17:38:40 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I think I&apos;ll just go with &quot;it2&quot;.

No, &quot;iter&quot; and &quot;iterEnd&quot;.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101634</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-06 02:58:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 25780 [review] [review])
&gt; &gt; &gt; +inline void addSubresourceURLForLegacyWebArchive(ListHashSet&lt;KURL&gt;&amp; urls, const KURL&amp; url)
&gt; &gt; 
&gt; &gt; It might be cleaner and inspire less need to include LegacyWebArchive.h if you
&gt; &gt; make this a static member function of the same class that defines the function
&gt; &gt; that has to accumulate the URLs. But I also think it&apos;s OK as-is.
&gt; 
&gt; Put it into WebCore::Node?  I&apos;ll look at doing that.

Note that the style subsystem will also be adding KURL objects to a ListHashSet&lt;KURL&gt; soon, so I can&apos;t make it a static member of WebCore::Node.  (Moving the method to Node.h does make it available without #including LegacyWebArchive.h everywhere, though.)

&gt; &gt; You also might want a helper that does the completeURL work. Are you sure you
&gt; &gt; got this right, calling completeURL in all the cases where it&apos;s needed and none
&gt; &gt; of the cases where it&apos;s already done?
&gt; 
&gt; I&apos;ll look through all the new cases by hand.  There were only a dozen or two of
&gt; them.

After reviewing the changes, I don&apos;t think we can guarantee anything when a method (like href() in StyleSheet or the SVG elements) returns a String instead of a KURL.  We should convert such methods to return a KURL object if we want that guarantee.

At worst, Document::completeURL() might be called on a fully-qualified URL and thus have no effect.  I believe the existing code in ToT WebKit does a LOT more double-processing of fully-qualified URLs than the new code will.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101645</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-06 03:55:17 -0800</bug_when>
    <thetext>$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/css/CSSStyleSheet.cpp
	M	WebCore/css/CSSStyleSheet.h
	M	WebCore/css/StyleSheet.h
	M	WebCore/dom/Node.cpp
	M	WebCore/dom/Node.h
	M	WebCore/dom/ProcessingInstruction.cpp
	M	WebCore/dom/ProcessingInstruction.h
	M	WebCore/html/HTMLBodyElement.cpp
	M	WebCore/html/HTMLBodyElement.h
	M	WebCore/html/HTMLEmbedElement.cpp
	M	WebCore/html/HTMLEmbedElement.h
	M	WebCore/html/HTMLImageElement.cpp
	M	WebCore/html/HTMLImageElement.h
	M	WebCore/html/HTMLInputElement.cpp
	M	WebCore/html/HTMLInputElement.h
	M	WebCore/html/HTMLLinkElement.cpp
	M	WebCore/html/HTMLLinkElement.h
	M	WebCore/html/HTMLObjectElement.cpp
	M	WebCore/html/HTMLObjectElement.h
	M	WebCore/html/HTMLParamElement.cpp
	M	WebCore/html/HTMLParamElement.h
	M	WebCore/html/HTMLScriptElement.cpp
	M	WebCore/html/HTMLScriptElement.h
	M	WebCore/html/HTMLStyleElement.cpp
	M	WebCore/html/HTMLStyleElement.h
	M	WebCore/html/HTMLTableCellElement.cpp
	M	WebCore/html/HTMLTableCellElement.h
	M	WebCore/html/HTMLTableElement.cpp
	M	WebCore/html/HTMLTableElement.h
	M	WebCore/loader/archive/cf/LegacyWebArchive.cpp
	M	WebCore/svg/SVGCursorElement.cpp
	M	WebCore/svg/SVGCursorElement.h
	M	WebCore/svg/SVGFEImageElement.cpp
	M	WebCore/svg/SVGFEImageElement.h
	M	WebCore/svg/SVGImageElement.cpp
	M	WebCore/svg/SVGImageElement.h
	M	WebCore/svg/SVGScriptElement.cpp
	M	WebCore/svg/SVGScriptElement.h
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/DOM/WebDOMOperations.mm
Committed r39065

http://trac.webkit.org/changeset/39065

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101656</commentid>
    <comment_count>7</comment_count>
    <who name="Bernhard Rosenkraenzer">bero</who>
    <bug_when>2008-12-06 05:53:15 -0800</bug_when>
    <thetext>This commit introduces bug 22711</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101660</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-06 09:17:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This commit introduces bug 22711

Build fix:

$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/svg/SVGFEImageElement.cpp
Committed r39067

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101763</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-07 15:20:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; After reviewing the changes, I don&apos;t think we can guarantee anything when a
&gt; method (like href() in StyleSheet or the SVG elements) returns a String instead
&gt; of a KURL.  We should convert such methods to return a KURL object if we want
&gt; that guarantee.

Your choice seems OK, but I&apos;m not sure your logic above is exactly right.

Many of those functions are part of the public DOM interface to those objects, so they have to return a String unless we teach the bindings generation machinery to turn a KURL back into a String. The functions might be guaranteed to return a String that&apos;s already a complete URL, though, and I could imagine us writing code that&apos;s aware of that even if the type system isn&apos;t how we communicate the guarantee.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25780</attachid>
            <date>2008-12-05 11:54:34 -0800</date>
            <delta_ts>2008-12-05 13:18:50 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-22666-v1.diff</filename>
            <type>text/plain</type>
            <size>47160</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">Y29tbWl0IGNmZThmOWZlOWYxYzhiNzM5NmU4ZGY1MjZiMDgwNjdjNjg4OThhYjMKQXV0aG9yOiBE
YXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0ZTogICBUaHUgRGVjIDQgMDc6NDQ6
MzMgMjAwOCAtMDgwMAoKICAgICAgICAgICAgQnVnIDIyNjY2OiBDbGVhbiB1cCBkYXRhIHN0cnVj
dHVyZXMgdXNlZCB3aGVuIGNvbGxlY3RpbmcgVVJMcyBvZiBzdWJyZXNvdXJjZXMgZm9yIHdlYmFy
Y2hpdmVzCiAgICAKICAgICAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjY2Nj4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KICAgIAogICAgV2ViQ29yZToKICAgIAogICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgd2Vi
YXJjaGl2ZSBmcm9tIFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgpLAogICAgICAg
ICAgICBIYXNoU2V0PFN0cmluZz4sIFZlY3RvcjxLVVJMPiBhbmQgVmVjdG9yPFN0cmluZz4gd2Vy
ZSBhbGwgdXNlZCB0bwogICAgICAgICAgICBzdG9yZSBhIGxpc3Qgb2YgVVJMcyBmb3IgcmVzb3Vy
Y2VzIGZvdW5kIGluIHRoZSBkb2N1bWVudC4gIEluc3RlYWQKICAgICAgICAgICAgdXNlIGEgc2lu
Z2xlIExpc3RIYXNoU2V0PEtVUkw+IHRvIHN0b3JlIHRoZSBsaXN0IGFuZCByZXNvbHZlIHRoZQog
ICAgICAgICAgICByZWxhdGl2ZSBVUkxzIGFzIHRoZXkncmUgYWRkZWQuICBXZSB1c2UgYSBuZXcg
aW5saW5lIG1ldGhvZCBjYWxsZWQKICAgICAgICAgICAgV2ViQ29yZTo6YWRkU3VicmVzb3VyY2VV
UkxGb3JMZWdhY3lXZWJBcmNoaXZlKCkgdG8gYWRkIEtVUkwgb2JqZWN0cwogICAgICAgICAgICB0
byB0aGUgTGlzdEhhc2hTZXQgdG8gcHJldmVudCAibnVsbCIgS1VSTCBvYmplY3RzIGZyb20gY3Jh
c2hpbmcgaW4KICAgICAgICAgICAgdGhlIEtVUkwgaGFzaGluZyBmdW5jdGlvbi4KICAgIAogICAg
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IENoYW5nZWQgZXhwb3J0IG9mCiAgICAgICAgICAg
IFdlYkNvcmU6Ok5vZGU6OmdldFN1YnJlc291cmNlVVJMcygpIHRvIHRha2UgYSBMaXN0SGFzaFNl
dDxLVVJMPgogICAgICAgICAgICBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgVmVjdG9yPEtVUkw+Lgog
ICAgCiAgICAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYXJr
ZWQgS1VSTEhhc2guaCBhcyBhIHByaXZhdGUKICAgICAgICAgICAgaGVhZGVyIGZvciB1c2UgaW4g
V2ViS2l0LgogICAgCiAgICAgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgogICAgICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Z2V0U3VicmVzb3VyY2VTdHlsZVVSTHMpOiBS
ZW5hbWVkIGZyb20KICAgICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkxTdHJpbmdzKCkuICBDaGFu
Z2VkIHRvIHVzZSBMaXN0SGFzaFNldDxLVVJMPgogICAgICAgICAgICBpbnN0ZWFkIG9mIEhhc2hT
ZXQ8U3RyaW5nPi4gIENsZWFuZWQgdXAgY29kZS4KICAgICAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
aGVldC5oOgogICAgICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Z2V0U3VicmVzb3Vy
Y2VTdHlsZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKiBjc3MvU3R5bGVTaGVldC5oOgogICAg
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldDo6Z2V0U3VicmVzb3VyY2VTdHlsZVVSTHMpOiBE
aXR0by4KICAgIAogICAgICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKICAgICAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmdldFN1YnJlc291cmNlVVJMcyk6IENoYW5nZWQgdG8gdXNlCiAgICAgICAgICAg
IExpc3RIYXNoU2V0PEtVUkw+IGluc3RlYWQgb2YgVmVjdG9yPEtVUkw+LiAgQ2xlYW5lZCB1cCBj
b2RlLgogICAgICAgICAgICAqIGRvbS9Ob2RlLmg6CiAgICAgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpnZXRTdWJyZXNvdXJjZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IFJlbmFtZWQgZnJvbQogICAgICAgICAgICBn
ZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoKS4gIENoYW5nZWQgdG8gdXNlIExpc3RIYXNo
U2V0PEtVUkw+CiAgICAgICAgICAgIGluc3RlYWQgb2YgVmVjdG9yPFN0cmluZz4uCiAgICAKICAg
ICAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKICAgICAgICAgICAgKFdl
YkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KToKICAgICAgICAgICAgUmVuYW1lZCBmcm9tIGdldFN1YnJlc291cmNlQXR0cmlidXRlU3RyaW5n
cygpLiAgQ2hhbmdlZCB0byB1c2UKICAgICAgICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4gaW5zdGVh
ZCBvZiBWZWN0b3I8U3RyaW5nPi4gIFVzZQogICAgICAgICAgICBXZWJDb3JlOjphZGRTdWJyZXNv
dXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUoKSB0byBhZGQgbmV3IEtVUkwKICAgICAgICAgICAg
b2JqZWN0cy4KICAgICAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6IERpdHRv
LgogICAgICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKICAgICAgICAgICAgKFdl
YkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0
dG8uCiAgICAgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuaDogRGl0dG8uCiAgICAgICAg
ICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbWJlZEVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgogICAg
ICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5oOiBEaXR0by4KICAgICAgICAgICAgKiBo
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0dG8uCiAgICAgICAgICAg
ICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6IERpdHRvLgogICAgICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuaDogRGl0dG8uCiAgICAgICAgICAgICogaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpnZXRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKiBodG1sL0hUTUxMaW5r
RWxlbWVudC5oOiBEaXR0by4KICAgICAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cDoKICAgICAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpnZXRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVt
ZW50Lmg6IERpdHRvLgogICAgICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHA6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJp
YnV0ZVVSTHMpOiBEaXR0by4KICAgICAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVsZW1lbnQuaDog
RGl0dG8uCiAgICAgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CiAgICAgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKTogRGl0dG8uCiAgICAgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOiBEaXR0
by4KICAgICAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgogICAgICAgICAgICAo
V2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTog
RGl0dG8uCiAgICAgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6IERpdHRvLgogICAg
ICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwOgogICAgICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6
IERpdHRvLgogICAgICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaDogRGl0dG8u
CiAgICAgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKICAgICAgICAgICAgKFdl
YkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERp
dHRvLgogICAgICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5oOiBEaXR0by4KICAgIAog
ICAgICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgogICAg
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKTogQ2hhbmdlZCBmcm9t
IHVzaW5nCiAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0byBMaXN0SGFzaFNldDxLVVJMPiBm
b3IgdHJhY2tpbmcgdW5pcXVlCiAgICAgICAgICAgIHN1YnJlc291cmNlcy4gIENoYW5nZWQgZnJv
bSB1c2luZyBWZWN0b3I8S1VSTD4gdG8gTGlzdEhhc2hTZXQ8S1VSTD4KICAgICAgICAgICAgd2hl
biBjYWxsaW5nIFdlYkNvcmU6Ok5vZGU6OmdldFN1YnJlc291cmNlVVJMcygpLgogICAgICAgICAg
ICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaDoKICAgICAgICAgICAgKFdl
YkNvcmU6OmFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSk6IEFkZGVkLiAgU2Fm
ZWx5IGFkZHMKICAgICAgICAgICAgbmV3IEtVUkwgb2JqZWN0cyB0byBhIExpc3RIYXNoU2V0PEtV
Ukw+IG9iamVjdC4gIEEgIm51bGwiIEtVUkwKICAgICAgICAgICAgb2JqZWN0IHdpbGwgY2F1c2Ug
dGhlIGhhc2ggZnVuY3Rpb24gdG8gY3Jhc2ggc2luY2UgaXQgY29udGFpbnMgYQogICAgICAgICAg
ICBudWxsIFN0cmluZ0ltcGwuCiAgICAKICAgICAgICAgICAgKiBzdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjpnZXRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMpOiBSZW5hbWVkCiAgICAgICAgICAgIGZyb20gZ2V0U3VicmVzb3Vy
Y2VBdHRyaWJ1dGVTdHJpbmdzKCkuICBDaGFuZ2VkIHRvIHVzZQogICAgICAgICAgICBMaXN0SGFz
aFNldDxLVVJMPiBpbnN0ZWFkIG9mIFZlY3RvcjxTdHJpbmc+LiAgVXNlCiAgICAgICAgICAgIFdl
YkNvcmU6OmFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSgpIHRvIGFkZCBuZXcg
S1VSTAogICAgICAgICAgICBvYmplY3RzLgogICAgICAgICAgICAqIHN2Zy9TVkdDdXJzb3JFbGVt
ZW50Lmg6IERpdHRvLgogICAgICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CiAg
ICAgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRy
aWJ1dGVVUkxzKTogRGl0dG8uCiAgICAgICAgICAgICogc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50Lmg6
IERpdHRvLgogICAgICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgogICAgICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMp
OiBEaXR0by4KICAgICAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVtZW50Lmg6IERpdHRvLgogICAg
ICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6
OlNWR1NjcmlwdEVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgog
ICAgICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6IERpdHRvLgogICAgCiAgICBXZWJL
aXQvbWFjOgogICAgCiAgICAgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CiAgICAg
ICAgICAgICgtW0RPTU5vZGUgX3N1YnJlc291cmNlVVJMc10pOiBDaGFuZ2VkIGZyb20gdXNpbmcg
VmVjdG9yPEtVUkw+IHRvCiAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+IHdoZW4gY2FsbGlu
ZyBXZWJDb3JlOjpOb2RlOjpnZXRTdWJyZXNvdXJjZVVSTHMoKS4KCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM4ZmU3YzIuLmQ0MWU0MDAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTE0IEBACisyMDA4LTEyLTA1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQnVnIDIyNjY2OiBDbGVhbiB1cCBkYXRhIHN0cnVjdHVyZXMgdXNl
ZCB3aGVuIGNvbGxlY3RpbmcgVVJMcyBvZiBzdWJyZXNvdXJjZXMgZm9yIHdlYmFyY2hpdmVzCisK
KyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY2Nj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGNy
ZWF0aW5nIGEgd2ViYXJjaGl2ZSBmcm9tIFdlYkNvcmU6OkxlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0
ZSgpLAorICAgICAgICBIYXNoU2V0PFN0cmluZz4sIFZlY3RvcjxLVVJMPiBhbmQgVmVjdG9yPFN0
cmluZz4gd2VyZSBhbGwgdXNlZCB0bworICAgICAgICBzdG9yZSBhIGxpc3Qgb2YgVVJMcyBmb3Ig
cmVzb3VyY2VzIGZvdW5kIGluIHRoZSBkb2N1bWVudC4gIEluc3RlYWQKKyAgICAgICAgdXNlIGEg
c2luZ2xlIExpc3RIYXNoU2V0PEtVUkw+IHRvIHN0b3JlIHRoZSBsaXN0IGFuZCByZXNvbHZlIHRo
ZQorICAgICAgICByZWxhdGl2ZSBVUkxzIGFzIHRoZXkncmUgYWRkZWQuICBXZSB1c2UgYSBuZXcg
aW5saW5lIG1ldGhvZCBjYWxsZWQKKyAgICAgICAgV2ViQ29yZTo6YWRkU3VicmVzb3VyY2VVUkxG
b3JMZWdhY3lXZWJBcmNoaXZlKCkgdG8gYWRkIEtVUkwgb2JqZWN0cworICAgICAgICB0byB0aGUg
TGlzdEhhc2hTZXQgdG8gcHJldmVudCAibnVsbCIgS1VSTCBvYmplY3RzIGZyb20gY3Jhc2hpbmcg
aW4KKyAgICAgICAgdGhlIEtVUkwgaGFzaGluZyBmdW5jdGlvbi4KKworICAgICAgICAqIFdlYkNv
cmUuYmFzZS5leHA6IENoYW5nZWQgZXhwb3J0IG9mCisgICAgICAgIFdlYkNvcmU6Ok5vZGU6Omdl
dFN1YnJlc291cmNlVVJMcygpIHRvIHRha2UgYSBMaXN0SGFzaFNldDxLVVJMPgorICAgICAgICBh
cmd1bWVudCBpbnN0ZWFkIG9mIGEgVmVjdG9yPEtVUkw+LgorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYXJrZWQgS1VSTEhhc2guaCBhcyBhIHByaXZhdGUK
KyAgICAgICAgaGVhZGVyIGZvciB1c2UgaW4gV2ViS2l0LgorCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Z2V0U3VicmVz
b3VyY2VTdHlsZVVSTHMpOiBSZW5hbWVkIGZyb20KKyAgICAgICAgYWRkU3VicmVzb3VyY2VVUkxT
dHJpbmdzKCkuICBDaGFuZ2VkIHRvIHVzZSBMaXN0SGFzaFNldDxLVVJMPgorICAgICAgICBpbnN0
ZWFkIG9mIEhhc2hTZXQ8U3RyaW5nPi4gIENsZWFuZWQgdXAgY29kZS4KKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Z2V0U3Vi
cmVzb3VyY2VTdHlsZVVSTHMpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldDo6Z2V0U3VicmVzb3VyY2VTdHlsZVVSTHMpOiBE
aXR0by4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmdldFN1YnJlc291cmNlVVJMcyk6IENoYW5nZWQgdG8gdXNlCisgICAgICAgIExpc3RIYXNoU2V0
PEtVUkw+IGluc3RlYWQgb2YgVmVjdG9yPEtVUkw+LiAgQ2xlYW5lZCB1cCBjb2RlLgorICAgICAg
ICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRTdWJyZXNvdXJjZVVS
THMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmdldFN1YnJlc291cmNlQXR0cmli
dXRlVVJMcyk6IFJlbmFtZWQgZnJvbQorICAgICAgICBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0
cmluZ3MoKS4gIENoYW5nZWQgdG8gdXNlIExpc3RIYXNoU2V0PEtVUkw+CisgICAgICAgIGluc3Rl
YWQgb2YgVmVjdG9yPFN0cmluZz4uCisKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0U3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgUmVuYW1lZCBmcm9tIGdldFN1YnJlc291
cmNlQXR0cmlidXRlU3RyaW5ncygpLiAgQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgTGlzdEhhc2hT
ZXQ8S1VSTD4gaW5zdGVhZCBvZiBWZWN0b3I8U3RyaW5nPi4gIFVzZQorICAgICAgICBXZWJDb3Jl
OjphZGRTdWJyZXNvdXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUoKSB0byBhZGQgbmV3IEtVUkwK
KyAgICAgICAgb2JqZWN0cy4KKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0
dG8uCisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICog
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVs
ZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgorICAgICAgICAqIGh0
bWwvSFRNTEVtYmVkRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6Z2V0U3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDogRGl0dG8uCisg
ICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOiBEaXR0by4KKyAgICAg
ICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpn
ZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxP
YmplY3RFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHMpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVsZW1lbnQuaDog
RGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTog
RGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOiBEaXR0by4KKyAgICAg
ICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0
eWxlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0dG8uCisgICAgICAg
ICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRh
YmxlQ2VsbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVGFibGVF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmdldFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxl
bWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKTog
Q2hhbmdlZCBmcm9tIHVzaW5nCisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0byBMaXN0SGFzaFNl
dDxLVVJMPiBmb3IgdHJhY2tpbmcgdW5pcXVlCisgICAgICAgIHN1YnJlc291cmNlcy4gIENoYW5n
ZWQgZnJvbSB1c2luZyBWZWN0b3I8S1VSTD4gdG8gTGlzdEhhc2hTZXQ8S1VSTD4KKyAgICAgICAg
d2hlbiBjYWxsaW5nIFdlYkNvcmU6Ok5vZGU6OmdldFN1YnJlc291cmNlVVJMcygpLgorICAgICAg
ICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OmFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSk6IEFkZGVkLiAgU2FmZWx5
IGFkZHMKKyAgICAgICAgbmV3IEtVUkwgb2JqZWN0cyB0byBhIExpc3RIYXNoU2V0PEtVUkw+IG9i
amVjdC4gIEEgIm51bGwiIEtVUkwKKyAgICAgICAgb2JqZWN0IHdpbGwgY2F1c2UgdGhlIGhhc2gg
ZnVuY3Rpb24gdG8gY3Jhc2ggc2luY2UgaXQgY29udGFpbnMgYQorICAgICAgICBudWxsIFN0cmlu
Z0ltcGwuCisKKyAgICAgICAgKiBzdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOiBS
ZW5hbWVkCisgICAgICAgIGZyb20gZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKCkuICBD
aGFuZ2VkIHRvIHVzZQorICAgICAgICBMaXN0SGFzaFNldDxLVVJMPiBpbnN0ZWFkIG9mIFZlY3Rv
cjxTdHJpbmc+LiAgVXNlCisgICAgICAgIFdlYkNvcmU6OmFkZFN1YnJlc291cmNlVVJMRm9yTGVn
YWN5V2ViQXJjaGl2ZSgpIHRvIGFkZCBuZXcgS1VSTAorICAgICAgICBvYmplY3RzLgorICAgICAg
ICAqIHN2Zy9TVkdDdXJzb3JFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6Z2V0
U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMpOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVtZW50Lmg6IERpdHRvLgor
ICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NjcmlwdEVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6IERpdHRvLgorICAg
ICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6IERpdHRvLgorCiAyMDA4LTEyLTAzICBKdXN0
aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQmV0aCBEYWtpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCBhOWUyODU4Li42MGM1NDkwIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhw
CkBAIC03OTYsNyArNzk2LDcgQEAgX19aTks3V2ViQ29yZTRLVVJMNGhvc3RFdgogX19aTks3V2Vi
Q29yZTRLVVJMNHBhdGhFdgogX19aTks3V2ViQ29yZTRLVVJMY3ZQNU5TVVJMRXYKIF9fWk5LN1dl
YkNvcmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8KLV9fWk5LN1dlYkNvcmU0Tm9kZTE4Z2V0
U3VicmVzb3VyY2VVUkxzRVJOM1dURjZWZWN0b3JJTlNfNEtVUkxFTG0wRUVFCitfX1pOSzdXZWJD
b3JlNE5vZGUxOGdldFN1YnJlc291cmNlVVJMc0VSTjNXVEYxMUxpc3RIYXNoU2V0SU5TXzRLVVJM
RU5TXzhLVVJMSGFzaEVFRQogX19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRleEV2CiBfX1pOSzdX
ZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgogX19aTks3V2ViQ29yZTRQYWdlMzRpbkxvd1F1YWxp
dHlJbWFnZUludGVycG9sYXRpb25Nb2RlRXYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggN2UyZGU0YS4uN2EyOTc4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwMTQsNyArNDAxNCw3IEBACiAJCUJDQjc3MzYx
MEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCNzczNUUwQzE3ODUzRDAwMTMy
QkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgKi87IH07CiAJCUJDQjc3MzYyMEMxNzg1
M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjc3MzVGMEMxNzg1M0QwMDEzMkJBNCAvKiBK
U05vZGVGaWx0ZXJDb25kaXRpb24uaCAqLzsgfTsKIAkJQkNCNzczNjMwQzE3ODUzRDAwMTMyQkE0
IC8qIEpTTm9kZUZpbHRlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0I3NzM2MDBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVy
Q3VzdG9tLmNwcCAqLzsgfTsKLQkJQkNCRDIxQUIwRTQxN0FENDAwQTA3MEYyIC8qIEtVUkxIYXNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JEMjFB
QTBFNDE3QUQ0MDBBMDcwRjIgLyogS1VSTEhhc2guaCAqLzsgfTsKKwkJQkNCRDIxQUIwRTQxN0FE
NDAwQTA3MEYyIC8qIEtVUkxIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0JEMjFBQTBFNDE3QUQ0MDBBMDcwRjIgLyogS1VSTEhhc2guaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0JGQjUzQzBE
Q0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JGQjUzQTBEQ0QyOUNGMDAxOUIzRTUgLyog
SlNET01XaW5kb3dTaGVsbC5jcHAgKi87IH07CiAJCUJDQkZCNTNEMERDRDI5Q0YwMDE5QjNFNSAv
KiBKU0RPTVdpbmRvd1NoZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0JGQjUzQjBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQzQz
ODc4MEU4ODZDQzcwMDUzM0RENSAvKiBKU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNDM4NzcwRTg4NkND
NzAwNTMzREQ1IC8qIEpTSFRNTElucHV0RWxlbWVudEN1c3RvbS5jcHAgKi87IH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuY3BwCmluZGV4IGZmZDA5NjIuLmE5NTAyMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMZWdhY3lXZWJB
cmNoaXZlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
OTgsMTEgKzE5OSwxMSBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkK
ICAgICAgICAgZG9jdW1lbnRUb1VwZGF0ZS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogfQogCi12
b2lkIENTU1N0eWxlU2hlZXQ6OmFkZFN1YnJlc291cmNlVVJMU3RyaW5ncyhIYXNoU2V0PFN0cmlu
Zz4mIHVybHMsIGNvbnN0IFN0cmluZyYgYmFzZSkgY29uc3QKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6
Z2V0U3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IEtV
UkwmIGJhc2UpIGNvbnN0CiB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiwgS1VSTD4gQ1NTU3R5bGVTaGVldE1hcDsKICAgICBDU1NTdHlsZVNoZWV0TWFwIHN0eWxl
U2hlZXRNYXA7Ci0gICAgc3R5bGVTaGVldE1hcC5hZGQoY29uc3RfY2FzdDxDU1NTdHlsZVNoZWV0
Kj4odGhpcyksIEtVUkwoYmFzZSkpOworICAgIHN0eWxlU2hlZXRNYXAuYWRkKGNvbnN0X2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHRoaXMpLCBiYXNlKTsKIAogICAgIHdoaWxlKHN0eWxlU2hlZXRNYXAu
c2l6ZSgpID4gMCkgewogICAgICAgICBDU1NTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBpdCA9IHN0
eWxlU2hlZXRNYXAuYmVnaW4oKTsKQEAgLTIyNCw4ICsyMjUsOCBAQCB2b2lkIENTU1N0eWxlU2hl
ZXQ6OmFkZFN1YnJlc291cmNlVVJMU3RyaW5ncyhIYXNoU2V0PFN0cmluZz4mIHVybHMsIGNvbnN0
IFN0cmluZwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBjb25zdCBL
VVJMIGZ1bGxVUkwoYmFzZVVSTCwgaW1wb3J0UnVsZS0+aHJlZigpKTsKLSAgICAgICAgICAgIGlm
ICghdXJscy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIHVy
bHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKCF1cmxzLmNvbnRhaW5z
KGZ1bGxVUkwpKSB7CisgICAgICAgICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkxGb3JMZWdhY3lX
ZWJBcmNoaXZlKHVybHMsIGZ1bGxVUkwpOwogICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRNYXAu
YWRkKHJ1bGVTaGVldCwgZnVsbFVSTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaAppbmRleCA0ZTgyYTUwLi42MzY4OTQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCkBAIC04Nyw3
ICs4Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbG9hZENvbXBsZXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9hZENvbXBsZXRlZDsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNv
dXJjZVVSTFN0cmluZ3MoSGFzaFNldDxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mLCBjb25zdCBLVVJMJiBiYXNlVVJMKSBjb25zdDsKICAgICAKICAgICB2b2lkIHNl
dFN0cmljdFBhcnNpbmcoYm9vbCBiKSB7IG1fc3RyaWN0UGFyc2luZyA9IGI7IH0KICAgICBib29s
IHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaCBiL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXQuaAppbmRleCA5Mzg0ZmM4Li45ZjFiMTIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0LmgKKysrIGIvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5oCkBAIC0yMSw5ICsyMSwxMCBA
QAogI2lmbmRlZiBTdHlsZVNoZWV0X2gKICNkZWZpbmUgU3R5bGVTaGVldF9oCiAKLSNpbmNsdWRl
ICJTdHlsZUxpc3QuaCIKKyNpbmNsdWRlICJLVVJMSGFzaC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJTdHlsZUxpc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291
cmNlVVJMU3RyaW5ncyhIYXNoU2V0PFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwpIGNv
bnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYsIGNvbnN0IEtVUkwmIGJhc2VVUkwpIGNvbnN0IHsgfQogCiAgICAgdmlydHVh
bCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gdHJ1ZSkgPSAw
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDU3MmM4Y2UuLmVjMzJlZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xOTExLDE4ICsxOTExLDkgQEAgYm9v
bCBOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0eSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKFZlY3RvcjxLVVJMPiYgdXJscykgY29u
c3QKK3ZvaWQgTm9kZTo6Z2V0U3VicmVzb3VyY2VVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxz
KSBjb25zdAogewotICAgIFZlY3RvcjxTdHJpbmc+IHN1YnJlc291cmNlU3RyaW5nczsKLSAgICBn
ZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3Moc3VicmVzb3VyY2VTdHJpbmdzKTsKLSAgICAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3VicmVzb3VyY2VTdHJpbmdzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIFN0cmluZyYgc3VicmVzb3VyY2VTdHJpbmcoc3VicmVzb3VyY2VTdHJp
bmdzW2ldKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBJcyBwYXJzZVVSTCBhcHByb3By
aWF0ZSBoZXJlPwotICAgICAgICBpZiAoc3VicmVzb3VyY2VTdHJpbmcubGVuZ3RoKCkpCi0gICAg
ICAgICAgICB1cmxzLmFwcGVuZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChzdWJy
ZXNvdXJjZVN0cmluZykpKTsKLSAgICB9CisgICAgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KHVybHMpOwogfQogCiAvLyAtLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZS5o
IGIvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDQ5ZjE4NTkuLmE4YjJiZTUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTI1LDEwICsy
NSwxMSBAQAogI2RlZmluZSBOb2RlX2gKIAogI2luY2x1ZGUgIkRvY1B0ci5oIgorI2luY2x1ZGUg
IktVUkxIYXNoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUcmVl
U2hhcmVkLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC00Miw3ICs0Myw2IEBAIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBJ
bnRSZWN0OwotY2xhc3MgS1VSTDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOU1Jlc29s
dmVyOwogY2xhc3MgTmFtZWRBdHRyTWFwOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJJKCkgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBnZXRTdWJy
ZXNvdXJjZVVSTHMoVmVjdG9yPEtVUkw+JikgY29uc3Q7CisgICAgdm9pZCBnZXRTdWJyZXNvdXJj
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBh
bGwgYWN0dWFsbHkgcmV0dXJuIGEgbm9kZSwgYnV0IHRoaXMgaXMgb25seSBpbXBvcnRhbnQgZm9y
IGxhbmd1YWdlIGJpbmRpbmdzLAogICAgIC8vIHdoaWNoIHdpbGwgYWxyZWFkeSBrbm93IGFuZCBo
b2xkIGEgcmVmIG9uIHRoZSByaWdodCBub2RlIHRvIHJldHVybi4gUmV0dXJuaW5nIGJvb2wgYWxs
b3dzCkBAIC00OTMsNyArNDkzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxs
TW92ZVRvTmV3T3duZXJEb2N1bWVudCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9O
ZXdPd25lckRvY3VtZW50KCkgeyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291
cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgfQorICAgIHZpcnR1
YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBj
b25zdCB7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCk7CiAgICAgCiAg
ICAgYm9vbCBoYXNSYXJlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGE7IH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgYi9XZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCmluZGV4IGIzMDgyYzcuLmU5MzliYzIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlhT
TFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIgLy8gZm9yIHBhcnNlQXR0
cmlidXRlcygpCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBAIC0yMzksMTIgKzI0MCwxMiBAQCBp
bnQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjptYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fZGF0YS5sZW5ndGgoKSk7CiB9CiAKLXZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9y
PFN0cmluZz4mIHVybHMpIGNvbnN0Cit2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0U3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewog
ICAgIGlmICghc2hlZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICB1cmxzLmFw
cGVuZChzaGVldCgpLT5ocmVmKCkpOworICAgIAorICAgIGFkZFN1YnJlc291cmNlVVJMRm9yTGVn
YWN5V2ViQXJjaGl2ZSh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzaGVldCgpLT5ocmVm
KCkpKTsKIH0KIAogdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIGIv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKaW5kZXggZTE2ZjcwMC4uOThkMGQw
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKKysrIGIv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNYU0woKSBjb25zdCB7IHJldHVybiBtX2lzWFNMOyB9CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9y
PFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZVN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzaGVldCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCmluZGV4IGRhY2EwZjYuLjIxZWEyNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lRWxlbWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjk2LDkgKzI5Nyw5
IEBAIGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFdpZHRoKCkgY29uc3QKICAgICByZXR1cm4g
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDA7ICAgIAogfQogCi12b2lkIEhUTUxCb2R5
RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1
cmxzKSBjb25zdAordm9pZCBIVE1MQm9keUVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKIHsKLSAgICB1cmxzLmFwcGVuZChi
YWNrZ3JvdW5kKCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSh1
cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChiYWNrZ3JvdW5kKCkpKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hU
TUxCb2R5RWxlbWVudC5oCmluZGV4IDAwNWNiYjUuLjI3ODk4NjYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVt
ZW50LmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIGludCBzY3JvbGxIZWlnaHQoKSBj
b25zdDsKICAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYpIGNvbnN0OwogICAgIAogcHJvdGVjdGVkOgogICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbV9saW5rRGVjbDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MRW1iZWRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApp
bmRleCAyYjAyMWZlLi4yNGU5ZWI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC0yNDcsOSArMjQ4
LDkgQEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTEVtYmVk
RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1
cmxzKSBjb25zdAordm9pZCBIVE1MRW1iZWRFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAgdXJscy5hcHBlbmQo
c3JjKCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSh1cmxzLCBk
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChzcmMoKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuaAppbmRleCBmZDBmZWFkLi41NTRlODZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEVtYmVkRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291
cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBib29sIG1fbmVlZFdpZGdldFVwZGF0ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcAppbmRleCA2MmQxMzQxLi43NjUyZGI0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC00MjksMTAgKzQzMCwxMCBAQCBib29sIEhUTUxJbWFnZUVs
ZW1lbnQ6OmNvbXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZUxvYWRlci5pbWFnZUNv
bXBsZXRlKCk7CiB9CiAKLXZvaWQgSFRNTEltYWdlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRy
aWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVy
bHMpIGNvbnN0CiB7Ci0gICAgdXJscy5hcHBlbmQoc3JjKCkuc3RyaW5nKCkpOwotICAgIHVybHMu
YXBwZW5kKHVzZU1hcCgpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hp
dmUodXJscywgc3JjKCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2
ZSh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1c2VNYXAoKSkpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuaAppbmRleCBhN2E2YzYyLi44MGE4YmM5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhdmVGaXJl
ZExvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VMb2FkZXIuaGF2ZUZpcmVkTG9hZEV2
ZW50KCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmlu
Z3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgSFRNTEltYWdlTG9hZGVyIG1faW1hZ2VMb2FkZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggYjlhN2M1MS4uYmI2MTI2MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xNjYwLDkgKzE2NjEsOSBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQogICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKIH0KICAgICAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1
dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMp
IGNvbnN0CiB7Ci0gICAgdXJscy5hcHBlbmQoc3JjKCkuc3RyaW5nKCkpOyAgCisgICAgYWRkU3Vi
cmVzb3VyY2VVUkxGb3JMZWdhY3lXZWJBcmNoaXZlKHVybHMsIHNyYygpKTsKIH0KIAogYm9vbCBI
VE1MSW5wdXRFbGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmgKaW5kZXggYjNlYjFiYi4uNzlkYzBhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0y
MDAsNyArMjAwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkQmVj
b21lQWN0aXZlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVT
dHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogICAgIAogICAg
IHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAppbmRleCBhNzE0NzVmLi5kOTY4NTRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTGVnYWN5
V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVl
cnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0zODAsMjggKzM4MSwyMyBAQCB2
b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHNl
dEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6
Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25z
dAoteyAgICAKK3ZvaWQgSFRNTExpbmtFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0Cit7CiAgICAgaWYgKG1faXNJY29uKSB7
Ci0gICAgICAgIHVybHMuYXBwZW5kKGhyZWYoKS5zdHJpbmcoKSk7CisgICAgICAgIGFkZFN1YnJl
c291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSh1cmxzLCBocmVmKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIGlmICghbV9pc1N0eWxlU2hlZXQpCiAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCisgICAgCiAgICAgLy8gQXBwZW5kIHRoZSBVUkwgb2YgdGhpcyBsaW5rIGVs
ZW1lbnQuCi0gICAgdXJscy5hcHBlbmQoaHJlZigpLnN0cmluZygpKTsKKyAgICBhZGRTdWJyZXNv
dXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUodXJscywgaHJlZigpKTsKICAgICAKICAgICAvLyBX
YWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUgbGlua2VkLXRvIHN0eWxlc2hlZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHN0eWxlVVJMczsKICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29u
c3RfY2FzdDxIVE1MTGlua0VsZW1lbnQqPih0aGlzKS0+c2hlZXQoKTsKICAgICBpZiAoc3R5bGVT
aGVldCkKLSAgICAgICAgc3R5bGVTaGVldC0+YWRkU3VicmVzb3VyY2VVUkxTdHJpbmdzKHN0eWxl
VVJMcywgaHJlZigpKTsKLSAgICAKLSAgICBIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9
IHN0eWxlVVJMcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaSA9
IHN0eWxlVVJMcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICB1cmxzLmFwcGVuZCgq
aSk7CisgICAgICAgIHN0eWxlU2hlZXQtPmdldFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGhy
ZWYoKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAppbmRleCAxN2Q2MzY1Li5kYzFlZTAz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgKKysrIGIvV2ViQ29y
ZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24sIGJv
b2wmIGRuc1ByZWZldGNoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJp
YnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKICAg
ICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0
ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IDk0MGQw
YjQuLjZhNjg2OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUxv
YWRlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkxlZ2FjeVdlYkFyY2hp
dmUuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1h
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCkBAIC00MzYsMTEgKzQzNywxMSBA
QCBib29sIEhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBsZXQoKSBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6Z2V0U3VicmVzb3Vy
Y2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiB1cmxzKSBjb25zdAogewotICAgIHVybHMuYXBwZW5kKGRhdGEoKS5zdHJpbmcoKSk7Cisg
ICAgYWRkU3VicmVzb3VyY2VVUkxGb3JMZWdhY3lXZWJBcmNoaXZlKHVybHMsIGRhdGEoKSk7CiAg
ICAgaWYgKHVzZU1hcCgpLnN0YXJ0c1dpdGgoIiMiKSkKLSAgICAgICAgdXJscy5hcHBlbmQodXNl
TWFwKCkpOworICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUodXJs
cywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlTWFwKCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuaAppbmRleCA4NTljNzNmLi5iYTQwZDVlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuaApAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNK
YXZhQXBwbGV0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRy
aWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdl
dFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHAKaW5kZXggMGM5ZDU5My4uYTliMGY1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxQYXJhbUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMZWdhY3lXZWJBcmNoaXZlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtOTgsMTQgKzk5LDE0IEBAIHZvaWQgSFRNTFBhcmFtRWxlbWVudDo6
c2V0VmFsdWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0QXR0cmlidXRlKHZhbHVl
dHlwZUF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MUGFyYW1FbGVtZW50OjpnZXRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mIHVybHMpIGNvbnN0Cit2b2lkIEhU
TUxQYXJhbUVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykgY29uc3QKIHsKICAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG5hbWUoKSwg
ImRhdGEiKSAmJgogICAgICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSgpLCAibW92aWUiKSAm
JgogICAgICAgICAhZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSgpLCAic3JjIikpCiAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgdXJscy5hcHBlbmQodmFsdWUoKSk7CisgICAgCisgICAgYWRk
U3VicmVzb3VyY2VVUkxGb3JMZWdhY3lXZWJBcmNoaXZlKHVybHMsIGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHZhbHVlKCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQ
YXJhbUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgKaW5kZXggNWUz
MWFlZC4uYzZlOTJkZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oCkBAIC01NSw3ICs1NSw3IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgdmFsdWVUeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1
ZVR5cGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VB
dHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0Owog
CiAgcHJvdGVjdGVkOgogICAgIEF0b21pY1N0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcAppbmRleCBjZTMzNGQ3Li41ZmE0MzE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0xODYsOSArMTg3LDkgQEAgU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250
ZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLnNjcmlwdENvbnRlbnQoKTsKIH0KIAotdm9p
ZCBIVE1MU2NyaXB0RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3Rv
cjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6Z2V0U3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewotICAg
IHVybHMuYXBwZW5kKHNyYygpLnN0cmluZygpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTEZvckxl
Z2FjeVdlYkFyY2hpdmUodXJscywgc3JjKCkpOwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgK
aW5kZXggYWE1YjdkOS4uYWYzY2M0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgKQEAgLTc0
LDcgKzc0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hhcnNldCgp
IGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0
cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDdmYjAxMmYuLjFjY2YyOWMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TFN0eWxlRWxlbWVudC5jcHAKQEAgLTEzNCwxNiArMTM0LDExIEBAIHZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6c2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcgJnZhbHVlKQogICAgIHNldEF0dHJpYnV0
ZSh0eXBlQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmdldFN1YnJl
c291cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYgdXJscykgY29uc3QKK3ZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PEtVUkw+JiB1cmxzKSBjb25zdAogeyAgICAKLSAgICBIYXNoU2V0PFN0cmluZz4gc3R5bGVVUkxz
OwogICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9jYXN0PEhUTUxTdHlsZUVsZW1l
bnQqPih0aGlzKS0+c2hlZXQoKTsKICAgICBpZiAoc3R5bGVTaGVldCkKLSAgICAgICAgc3R5bGVT
aGVldC0+YWRkU3VicmVzb3VyY2VVUkxTdHJpbmdzKHN0eWxlVVJMcywgb3duZXJEb2N1bWVudCgp
LT5iYXNlVVJMKCkpOwotICAgIAotICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgZW5kID0g
c3R5bGVVUkxzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBpID0g
c3R5bGVVUkxzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIHVybHMuYXBwZW5kKCpp
KTsKKyAgICAgICAgc3R5bGVTaGVldC0+Z2V0U3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgb3du
ZXJEb2N1bWVudCgpLT5iYXNlVVJMKCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaApp
bmRleCAzOWU4Njg5Li5iMTVkNTVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKQEAgLTY0LDcg
KzY0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldExvYWRpbmcoYm9vbCBsb2Fk
aW5nKSB7IG1fbG9hZGluZyA9IGxvYWRpbmc7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9tZWRpYTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlQ2VsbEVsZW1lbnQuY3BwCmluZGV4IGM2MjNjOTQuLjBjYjBiZTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNlbGxFbGVtZW50LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFi
bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgogCiB1c2luZyBzdGQ6Om1heDsKQEAgLTI2MSw5ICsyNjIsOSBAQCB2
b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQog
ICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+
JiB1cmxzKSBjb25zdAordm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewotICAgIHVybHMu
YXBwZW5kKGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyKS5zdHJpbmcoKSk7
CisgICAgYWRkU3VicmVzb3VyY2VVUkxGb3JMZWdhY3lXZWJBcmNoaXZlKHVybHMsIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyKSkp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCmluZGV4IDZhYzRiMjkuLjQz
ZjZjMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5oCkBAIC0xMDIsNyArMTAyLDcg
QEAgcHVibGljOgogICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0V2lkdGgo
Y29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1
dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiBwcm90
ZWN0ZWQ6CiAgICAgaW50IF9yb3c7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKaW5kZXggNmM2
MTZiMS4uYmQwMDE1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TFRhYmxlUm93RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmgi
CisjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogCkBAIC03NDcsOSArNzQ4LDkgQEAgdm9pZCBIVE1MVGFibGVF
bGVtZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQogICAgIHNldEF0dHJpYnV0ZSh3
aWR0aEF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpnZXRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mIHVybHMpIGNvbnN0Cit2b2lkIEhU
TUxUYWJsZUVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYgdXJscykgY29uc3QKIHsKLSAgICB1cmxzLmFwcGVuZChnZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjpiYWNrZ3JvdW5kQXR0cikuc3RyaW5nKCkpOworICAgIGFkZFN1YnJlc291cmNlVVJMRm9y
TGVnYWN5V2ViQXJjaGl2ZSh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cikpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVt
ZW50LmgKaW5kZXggYWNlZDc5ZS4uYjMwNmQzMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCkBA
IC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkU2hhcmVkQ2VsbERlY2xzKFZl
Y3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7CiAgICAgdm9pZCBhZGRTaGFyZWRH
cm91cERlY2xzKGJvb2wgcm93cywgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4m
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVj
dG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRy
aWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGRTaGFyZWRDZWxsQm9yZGVyc0RlY2woVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKj4mKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5jcHAgYi9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUu
Y3BwCmluZGV4IDczOWU0OGEuLjFmYTc5YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkZy
YW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJLVVJMSGFzaC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCkBAIC00ODksNyArNDg5LDcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBtYXJrdXBTdHJpbmcKIAogICAgIFZl
Y3RvcjxQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+ID4gc3ViZnJhbWVBcmNoaXZlczsKICAg
ICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4gc3VicmVzb3VyY2VzOwotICAg
IEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVTdWJyZXNvdXJjZXM7CisgICAgSGFzaFNldDxLVVJMPiB1
bmlxdWVTdWJyZXNvdXJjZXM7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXQg
PSBub2Rlcy5iZWdpbigpOwogICAgIFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG5vZGVz
LmVuZCgpOwpAQCAtNTA5LDI1ICs1MDksMjcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBtYXJrdXBTdHJpbmcKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gYXJj
aGl2ZSBzdWJmcmFtZSAlcyIsIGNoaWxkRnJhbWUtPnRyZWUoKS0+bmFtZSgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPEtVUkw+
IHN1YnJlc291cmNlVVJMczsKKyAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+IHN1YnJlc291
cmNlVVJMczsKICAgICAgICAgICAgICgqaXQpLT5nZXRTdWJyZXNvdXJjZVVSTHMoc3VicmVzb3Vy
Y2VVUkxzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1YnJlc291cmNlVVJMcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWJyZXNvdXJjZXMuY29udGFpbnMoc3VicmVz
b3VyY2VVUkxzW2ldLnN0cmluZygpKSkKKyAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+Ojpp
dGVyYXRvciBrdXJsSXRlcmF0b3JFbmQgPSBzdWJyZXNvdXJjZVVSTHMuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKExpc3RIYXNoU2V0PEtVUkw+OjppdGVyYXRvciBrdXJsSXRlcmF0b3IgPSBzdWJy
ZXNvdXJjZVVSTHMuYmVnaW4oKTsga3VybEl0ZXJhdG9yICE9IGt1cmxJdGVyYXRvckVuZDsgKytr
dXJsSXRlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBzdWJyZXNvdXJjZVVS
TCA9ICprdXJsSXRlcmF0b3I7CisgICAgICAgICAgICAgICAgaWYgKHVuaXF1ZVN1YnJlc291cmNl
cy5jb250YWlucyhzdWJyZXNvdXJjZVVSTCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICAgICAgdW5pcXVlU3VicmVzb3VyY2VzLmFkZChzdWJyZXNvdXJjZVVS
THNbaV0uc3RyaW5nKCkpOworICAgICAgICAgICAgICAgIHVuaXF1ZVN1YnJlc291cmNlcy5hZGQo
c3VicmVzb3VyY2VVUkwpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gcmVzb3VyY2UgPSBkb2N1bWVudExvYWRlci0+c3VicmVzb3VyY2Uoc3VicmVzb3VyY2VVUkxz
W2ldKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9
IGRvY3VtZW50TG9hZGVyLT5zdWJyZXNvdXJjZShzdWJyZXNvdXJjZVVSTCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlcy5h
cHBlbmQocmVzb3VyY2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UgKmNh
Y2hlZFJlc291cmNlID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoc3VicmVzb3VyY2VVUkxzW2ld
KTsKKyAgICAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSAqY2FjaGVkUmVzb3VyY2UgPSBjYWNo
ZSgpLT5yZXNvdXJjZUZvclVSTChzdWJyZXNvdXJjZVVSTCk7CiAgICAgICAgICAgICAgICAgaWYg
KGNhY2hlZFJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gQXJjaGl2
ZVJlc291cmNlOjpjcmVhdGUoY2FjaGVkUmVzb3VyY2UtPmRhdGEoKSwgc3VicmVzb3VyY2VVUkxz
W2ldLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoY2FjaGVkUmVzb3VyY2UtPmRhdGEoKSwg
c3VicmVzb3VyY2VVUkwsIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNv
dXJjZXMuYXBwZW5kKHJlc291cmNlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTUzNSw3ICs1MzcsNyBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hp
dmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG1hcmt1cFN0cmluZwog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgZG8g
c29tZXRoaW5nIGJldHRlciB0aGFuIHNwZXcgdG8gY29uc29sZSBoZXJlCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYXJjaGl2ZSBzdWJyZXNvdXJjZSBmb3IgJXMiLCBzdWJy
ZXNvdXJjZVVSTHNbaV0uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gYXJjaGl2ZSBzdWJyZXNvdXJjZSBmb3IgJXMiLCBzdWJyZXNv
dXJjZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2Vi
QXJjaGl2ZS5oIGIvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgK
aW5kZXggNzBmYWJhNS4uZWNmYWI3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9M
ZWdhY3lXZWJBcmNoaXZlLmgKQEAgLTMwLDcgKzMwLDggQEAKICNkZWZpbmUgTGVnYWN5V2ViQXJj
aGl2ZV9oCiAKICNpbmNsdWRlICJBcmNoaXZlLmgiCi0KKyNpbmNsdWRlICJLVVJMSGFzaC5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDYgKzYzLDEzIEBAIHByaXZhdGU6CiBSZXNv
dXJjZVJlc3BvbnNlIGNyZWF0ZVJlc291cmNlUmVzcG9uc2VGcm9tTWFjQXJjaGl2ZWREYXRhKENG
RGF0YVJlZik7CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm9wZXJ0eUxpc3REYXRhRnJvbVJlc291
cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCitpbmxpbmUgdm9pZCBhZGRT
dWJyZXNvdXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMs
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm47CisgICAgdXJscy5hZGQodXJsKTsKK30KKwogfQogCiAjZW5kaWYgLy8gQXJjaGl2ZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9T
VkdDdXJzb3JFbGVtZW50LmNwcAppbmRleCAxNjFhMDYxLi44MmZjOGQ4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdDdXJz
b3JFbGVtZW50LmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgIlNWR0N1cnNvckVsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgogCkBAIC04OSw5ICs5MSw5IEBAIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICB9
CiB9CiAKLXZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJp
bmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpn
ZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0
CiB7Ci0gICAgdXJscy5hcHBlbmQoaHJlZigpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTEZvckxl
Z2FjeVdlYkFyY2hpdmUodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZigpKSk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaCBiL1dlYkNv
cmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAppbmRleCBkOGQ3ZWJhLi5hNjY4YmNiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZH
Q3Vyc29yRWxlbWVudC5oCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRl
U3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAK
aW5kZXggZTE5ZWU3OC4uYmEyZWU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9jTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJMZWdhY3lXZWJBcmNoaXZl
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC0xMDMsOSArMTA0LDkgQEAgYm9vbCBT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGQoRmlsdGVyQnVpbGRlciogYnVpbGRlcikKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRy
aWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBTVkdGRUltYWdl
RWxlbWVudDo6Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1
cmxzKSBjb25zdAogewotICAgIHVybHMuYXBwZW5kKGhyZWYoKSk7CisgICAgYWRkU3VicmVzb3Vy
Y2VVUkxGb3JMZWdhY3lXZWJBcmNoaXZlKHVybHMsIGhyZWYoKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5oCmluZGV4IGRjODhjMGEuLjg4YzA2YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5n
PiYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAgICAgICAgIGJvb2wgYnVpbGQoRmlsdGVy
QnVpbGRlciopOwogCiAgICAgcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKaW5kZXgg
ZDdkYWViYy4uOTAyNDFhOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCisjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR0ltYWdlLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5n
dGguaCIKQEAgLTE1NCw5ICsxNTUsOSBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBTVkdJbWFnZUVs
ZW1lbnQ6OmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIFhMaW5r
TmFtZXM6OmhyZWZBdHRyOwogfQogCi12b2lkIFNWR0ltYWdlRWxlbWVudDo6Z2V0U3VicmVzb3Vy
Y2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBTVkdJ
bWFnZUVsZW1lbnQ6OmdldFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJM
PiYgdXJscykgY29uc3QKIHsKLSAgICB1cmxzLmFwcGVuZChocmVmKCkpOworICAgIGFkZFN1YnJl
c291cmNlVVJMRm9yTGVnYWN5V2ViQXJjaGl2ZSh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChocmVmKCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVt
ZW50LmggYi9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAppbmRleCBiZGRmZGRkLi4wMzcz
YWM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAorKysgYi9XZWJD
b3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgCiAgICAgICAgIHZpcnR1YWwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7ICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJp
bmc+JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCBib29sIGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdTY3Jp
cHRFbGVtZW50LmNwcAppbmRleCAzYzNhN2EzLi4xOTBjOTdkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVt
ZW50LmNwcApAQCAtMjUsNyArMjUsOSBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZH
U2NyaXB0RWxlbWVudC5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0NCw5ICsxNDYsOSBAQCBTdHJpbmcg
U1ZHU2NyaXB0RWxlbWVudDo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0
YS5zY3JpcHRDaGFyc2V0KCk7CiB9CiAKLXZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6Z2V0U3VicmVz
b3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JiB1cmxzKSBjb25zdAordm9pZCBT
VkdTY3JpcHRFbGVtZW50OjpnZXRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8
S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAgdXJscy5hcHBlbmQoaHJlZigpKTsKKyAgICBhZGRT
dWJyZXNvdXJjZVVSTEZvckxlZ2FjeVdlYkFyY2hpdmUodXJscywgZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoaHJlZigpKSk7CiB9CiAKIGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGF2ZUxvYWRlZFJl
cXVpcmVkUmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1l
bnQuaCBiL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAppbmRleCAwNDc1ODgxLi4zZWZj
OThlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3Q7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRlU3RyaW5ncyhW
ZWN0b3I8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiB0aGlzOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBi
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDMzZmUzOTEuLjBhNmE2N2IgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMDgtMTItMDUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWcgMjI2NjY6IENsZWFuIHVwIGRhdGEgc3RydWN0dXJlcyB1c2VkIHdoZW4g
Y29sbGVjdGluZyBVUkxzIG9mIHN1YnJlc291cmNlcyBmb3Igd2ViYXJjaGl2ZXMKKworICAgICAg
ICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjY2PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL1dlYkRPTU9w
ZXJhdGlvbnMubW06CisgICAgICAgICgtW0RPTU5vZGUgX3N1YnJlc291cmNlVVJMc10pOiBDaGFu
Z2VkIGZyb20gdXNpbmcgVmVjdG9yPEtVUkw+IHRvCisgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+
IHdoZW4gY2FsbGluZyBXZWJDb3JlOjpOb2RlOjpnZXRTdWJyZXNvdXJjZVVSTHMoKS4KKwogMjAw
OC0xMi0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0RPTS9XZWJE
T01PcGVyYXRpb25zLm1tIGIvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQppbmRl
eCA1ZWY5MmYxLi44ZjVmYzAzIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tCisrKyBiL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KQEAgLTY3
LDE1ICs2NywxNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLSAoTlNBcnJheSAqKV9z
dWJyZXNvdXJjZVVSTHMKIHsKLSAgICBWZWN0b3I8S1VSTD4gdXJsczsKKyAgICBMaXN0SGFzaFNl
dDxLVVJMPiB1cmxzOwogICAgIFtzZWxmIF9ub2RlXS0+Z2V0U3VicmVzb3VyY2VVUkxzKHVybHMp
OwogICAgIGlmICghdXJscy5zaXplKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBOU011
dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dXJs
cy5zaXplKCldOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgKytp
KQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihOU1VSTCAqKXVybHNbaV1dOwotICAgICAgICAK
KyAgICBMaXN0SGFzaFNldDxLVVJMPjo6aXRlcmF0b3IgZW5kID0gdXJscy5lbmQoKTsKKyAgICBm
b3IgKExpc3RIYXNoU2V0PEtVUkw+OjppdGVyYXRvciBpdCA9IHVybHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihOU1VSTCAqKSppdF07CisKICAg
ICByZXR1cm4gYXJyYXk7CiB9CiAK
</data>
<flag name="review"
          id="12068"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>