<?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>20690</bug_id>
          
          <creation_ts>2008-09-06 12:49:06 -0700</creation_ts>
          <short_desc>Support for DNS prefetch</short_desc>
          <delta_ts>2009-06-14 15:34:33 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Collin Jackson">collinj</reporter>
          <assigned_to name="Collin Jackson">collinj</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jar</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mbelshe</cc>
    
    <cc>mrowe</cc>
    
    <cc>opendarwin</cc>
    
    <cc>sam</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90372</commentid>
    <comment_count>0</comment_count>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-06 12:49:06 -0700</bug_when>
    <thetext>DNS prefetching speculatively resolves host names in hyperlinks.  Once a host name has been resolved, if the user does navigate to that URL, the DNS lookup will already be in the local cache, reducing DNS resolution time.  This is already implemented in Chromium, but it would be better if we could merge the WebCore part of it into the WebKit repository so that other WebKit clients can use it as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90374</commentid>
    <comment_count>1</comment_count>
      <attachid>23220</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-06 12:54:17 -0700</bug_when>
    <thetext>Created attachment 23220
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90376</commentid>
    <comment_count>2</comment_count>
      <attachid>23220</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-09-06 14:50:16 -0700</bug_when>
    <thetext>Comment on attachment 23220
Proposed patch

Looks generally good except for the code changes to Document::visitedLinkHash(). That code needs better place though so r-.

Could this be tested with HTTP layout test (at least for code coverage)?

+        If ENABLE(DNS_PREFETCH) is true, notify the FrameLoaderClient 
+        about hyperlinks and &lt;link rel=&quot;dns-prefetch&quot;&gt; tags that are
+        encountered so that it can speculatively resolve hostnames.

I would prefer not to have a feature define for this. Having it enabled on platforms that don&apos;t support it looks harmless and avoiding configuration proliferation is a good thing.
 
+#if ENABLE(DNS_PREFETCH)
+#include &quot;FrameLoaderClient.h&quot;
+#endif

No need to make this conditional.

 void Document::updateFocusAppearanceSoon()
@@ -4188,6 +4202,18 @@ unsigned Document::visitedLinkHash(const
 
     bool hasColonSlashSlash = containsColonSlashSlash(characters, length);
 
+#if ENABLE(DNS_PREFETCH)
+    String prefetchHost;
+    if (hasColonSlashSlash) {
+        KURL parsedURL(attributeURL, m_baseURL);
+        prefetchHost = parsedURL.host();
+    } else
+        prefetchHost = m_baseURL.host();
+
+    if (frame() &amp;&amp; (m_isDNSPrefetchEnabled || prefetchHost == m_securityOrigin-&gt;host()))
+        frame()-&gt;loader()-&gt;client()-&gt;prefetchDNS(prefetchHost);
+#endif

This function is for calculating a hash and this kind of code is inappropriate here. Please find the right place to put this code. Would simply putting it to HTMLAnchorElement::parseMappedAttribute() work?

+void Document::initDNSPrefetchEnabled()
+{

Maybe just call it initDNSPrefetch()?

+    m_haveExplicitlyDisabledDNSPrefetch = false;
+    m_isDNSPrefetchEnabled = (securityOrigin()-&gt;protocol() == &quot;http&quot;);

No need for parenthesis here.

+    // Inherit DNS prefetch opt-out from parent frame    
+    if (Document* parent = parentDocument())
+        if (!parent-&gt;isDNSPrefetchEnabled())
+            m_isDNSPrefetchEnabled = false;

Outer if needs curly brackets according to the coding style.

+void Document::setDNSPrefetchControl(const String&amp; dnsPrefetchControl)
+{

This is not really a setter, how about parseDNSPrefetchControlHeader() or something?

+    if (equalIgnoringCase(dnsPrefetchControl, &quot;on&quot;) &amp;&amp; 
+        !m_haveExplicitlyDisabledDNSPrefetch) {

can be single line

+        m_isDNSPrefetchEnabled = true;
+        return;
+    }
+
+    m_isDNSPrefetchEnabled = false;
+    m_haveExplicitlyDisabledDNSPrefetch = true;
+}
+#endif
+

+    void setDNSPrefetchControl(const WebCore::String&amp;);

No need for WebCore:: prefix.

@@ -111,6 +111,7 @@ protected:
     bool m_alternate;
     bool m_isStyleSheet;
     bool m_isIcon;
+    bool m_isDnsPrefetch;
     bool m_createdByParser;
 };

m_isDNSPrefetch to match coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91227</commentid>
    <comment_count>3</comment_count>
      <attachid>23445</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-15 12:57:04 -0700</bug_when>
    <thetext>Created attachment 23445
Updated patch with comments from Antti

(In reply to comment #2)
&gt; Could this be tested with HTTP layout test (at least for code coverage)?

Good idea. I&apos;ve added one. 

&gt; +        If ENABLE(DNS_PREFETCH) is true, notify the FrameLoaderClient 
&gt; +        about hyperlinks and &lt;link rel=&quot;dns-prefetch&quot;&gt; tags that are
&gt; +        encountered so that it can speculatively resolve hostnames.
&gt; 
&gt; I would prefer not to have a feature define for this. Having it enabled on
&gt; platforms that don&apos;t support it looks harmless and avoiding configuration
&gt; proliferation is a good thing.

Ok. I&apos;ve removed the feature define.

&gt; +#if ENABLE(DNS_PREFETCH)
&gt; +#include &quot;FrameLoaderClient.h&quot;
&gt; +#endif
&gt; 
&gt; No need to make this conditional.

Ok. This include isn&apos;t used in Document.cpp any more, so I just removed it.

&gt;  void Document::updateFocusAppearanceSoon()
&gt; @@ -4188,6 +4202,18 @@ unsigned Document::visitedLinkHash(const
&gt; 
&gt;      bool hasColonSlashSlash = containsColonSlashSlash(characters, length);
&gt; 
&gt; +#if ENABLE(DNS_PREFETCH)
&gt; +    String prefetchHost;
&gt; +    if (hasColonSlashSlash) {
&gt; +        KURL parsedURL(attributeURL, m_baseURL);
&gt; +        prefetchHost = parsedURL.host();
&gt; +    } else
&gt; +        prefetchHost = m_baseURL.host();
&gt; +
&gt; +    if (frame() &amp;&amp; (m_isDNSPrefetchEnabled || prefetchHost ==
&gt; m_securityOrigin-&gt;host()))
&gt; +        frame()-&gt;loader()-&gt;client()-&gt;prefetchDNS(prefetchHost);
&gt; +#endif
&gt; 
&gt; This function is for calculating a hash and this kind of code is inappropriate
&gt; here. Please find the right place to put this code. Would simply putting it to
&gt; HTMLAnchorElement::parseMappedAttribute() work?

Ok, I moved it.

&gt; +void Document::initDNSPrefetchEnabled()
&gt; +{
&gt; 
&gt; Maybe just call it initDNSPrefetch()?

Ok. I renamed it to initDNSPrefetch().

&gt; +    m_haveExplicitlyDisabledDNSPrefetch = false;
&gt; +    m_isDNSPrefetchEnabled = (securityOrigin()-&gt;protocol() == &quot;http&quot;);
&gt; 
&gt; No need for parenthesis here.

Fixed.

&gt; +    // Inherit DNS prefetch opt-out from parent frame    
&gt; +    if (Document* parent = parentDocument())
&gt; +        if (!parent-&gt;isDNSPrefetchEnabled())
&gt; +            m_isDNSPrefetchEnabled = false;
&gt; 
&gt; Outer if needs curly brackets according to the coding style.

Fixed.

&gt; +void Document::setDNSPrefetchControl(const String&amp; dnsPrefetchControl)
&gt; +{
&gt; 
&gt; This is not really a setter, how about parseDNSPrefetchControlHeader() or
&gt; something?

Ok. I&apos;ve renamed it to parseDNSPrefetchControlHeader().

&gt; +    if (equalIgnoringCase(dnsPrefetchControl, &quot;on&quot;) &amp;&amp; 
&gt; +        !m_haveExplicitlyDisabledDNSPrefetch) {
&gt; 
&gt; can be single line

Fixed.

&gt; +        m_isDNSPrefetchEnabled = true;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    m_isDNSPrefetchEnabled = false;
&gt; +    m_haveExplicitlyDisabledDNSPrefetch = true;
&gt; +}
&gt; +#endif
&gt; +
&gt; 
&gt; +    void setDNSPrefetchControl(const WebCore::String&amp;);
&gt; 
&gt; No need for WebCore:: prefix.

Fixed.

&gt; @@ -111,6 +111,7 @@ protected:
&gt;      bool m_alternate;
&gt;      bool m_isStyleSheet;
&gt;      bool m_isIcon;
&gt; +    bool m_isDnsPrefetch;
&gt;      bool m_createdByParser;
&gt;  };
&gt; 
&gt; m_isDNSPrefetch to match coding style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91324</commentid>
    <comment_count>4</comment_count>
    <who name="Jeff Johnson">opendarwin</who>
    <bug_when>2008-09-15 23:24:50 -0700</bug_when>
    <thetext>I hope there will be a thorough analysis of the security, privacy, and performance implications of this before it&apos;s implemented. A few thoughts/questions:

1) I&apos;m reading a page with a discussion of DNS cache poisoning, and the page contains, as an example, a link to a domain whose authoritative DNS server has been poisoned. Any problems there?

2) I&apos;m reading a local html that contains links. Will that cause network access?

3) I innocently navigate to a page that happens to have a link to a porn web site. Perhaps it&apos;s a page of search results, or it&apos;s a link in some web advertising. Now my ISP has a record of me asking their DNS servers to resolve a porn web site&apos;s domain.

4) I navigate to a page with a very large number of links from different domains, e.g., a page of search results. Will that cause hundreds of DNS requests?

Admittedly, I don&apos;t know much about DNS prefetching, so maybe I&apos;m misunderstanding the whole process, but I think these are the concerns people would have.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91409</commentid>
    <comment_count>5</comment_count>
      <attachid>23479</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-16 11:56:46 -0700</bug_when>
    <thetext>Created attachment 23479
Updated patch with improved layout test

I changed the layout test to remove some redundant cases and replace them with different ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91471</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-09-17 00:11:50 -0700</bug_when>
    <thetext>I don&apos;t understand the addition of FrameLoaderClient::didParseAnchor(). Why not figure out the domain in WebCore and just invoke prefetchDNS() for links too like the first patch revision did?

Not really important for the first version but do you think the WebCore should track which domains have already been prefetched for the current document? It needs to be done in some level of the stack anyway and doing it early might be faster. 

As a minimal limiting measure it could avoid making prefetch callbacks for the domain of the current document (like simple relative URLs) since that is very likely already cached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91473</commentid>
    <comment_count>7</comment_count>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-17 00:52:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I don&apos;t understand the addition of FrameLoaderClient::didParseAnchor(). Why not
&gt; figure out the domain in WebCore and just invoke prefetchDNS() for links too
&gt; like the first patch revision did?

The reason why I did it this way is that there is a &quot;poor man&apos;s completeURL&quot; in Document.cpp (lines 4080-4232) that tries to extract various features of hyperlinks that are encountered while parsing the page without calling the KURL constructor. According to a comment, it&apos;s &quot;faster and less memory consumption&quot; to do it this way. If we call the KURL constuctor for every hyperlink to figure out the domain we&apos;d probably want to delete the &quot;poor man&apos;s completeURL&quot; since it&apos;s no longer providing any performance benefit; the URL has already been fully parsed. By passing the anchor&apos;s href and document off to the WebKit client we can let the client parse out the hostname on a separate thread if necessary. Also, clients that choose not to support DNS prefetch won&apos;t need to call the KURL constructor at all.

&gt; Not really important for the first version but do you think the WebCore should
&gt; track which domains have already been prefetched for the current document? It
&gt; needs to be done in some level of the stack anyway and doing it early might be
&gt; faster. 

The client may be running multiple instances of WebCore, and thus has a more complete picture of what&apos;s going on. I think that&apos;s a better place to prune duplicates.

&gt; As a minimal limiting measure it could avoid making prefetch callbacks for the
&gt; domain of the current document (like simple relative URLs) since that is very
&gt; likely already cached.

It would be easy to implement this policy using the FrameLoaderClient API provided. However, many servers use short DNS TTLs so it turns out that re-warming the current domain when a new hyperlink is created can often be helpful. Different clients may have different network stacks and thus may have different desired prefetch behavior, so I think it&apos;s ok to leave rate limiting up to the client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91476</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-09-17 02:46:22 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I don&apos;t understand the addition of FrameLoaderClient::didParseAnchor(). Why not
&gt; &gt; figure out the domain in WebCore and just invoke prefetchDNS() for links too
&gt; &gt; like the first patch revision did?
&gt; 
&gt; The reason why I did it this way is that there is a &quot;poor man&apos;s completeURL&quot; in
&gt; Document.cpp (lines 4080-4232) that tries to extract various features of
&gt; hyperlinks that are encountered while parsing the page without calling the KURL
&gt; constructor. According to a comment, it&apos;s &quot;faster and less memory consumption&quot;
&gt; to do it this way. If we call the KURL constuctor for every hyperlink to figure
&gt; out the domain we&apos;d probably want to delete the &quot;poor man&apos;s completeURL&quot; since
&gt; it&apos;s no longer providing any performance benefit; the URL has already been
&gt; fully parsed. By passing the anchor&apos;s href and document off to the WebKit
&gt; client we can let the client parse out the hostname on a separate thread if
&gt; necessary. Also, clients that choose not to support DNS prefetch won&apos;t need to
&gt; call the KURL constructor at all.

I don&apos;t think it is good to have two callbacks that do essentially the same thing. Also didParseAnchor() tells nothing about what should be implemented there where as prefetchDNS() is a good name.

Document::visitedLinkHash() is a hash function used by style selection and can get invoked interactively and frequently. It does not need full URL parsing either. In contrast link attribute parsing is done (mostly) only once during document parsing.

I think relative link URLs (or actually anything that does not start with http:// or https://) can be ignored since the domain is the same as the current document&apos;s. That would help cutting out many links on many pages. At some level you will need to parse the URL enough to figure out the domain anyway. KURL isn&apos;t optimal but it has not turned out to be significant bottleneck so far either, I wouldn&apos;t worry too much about that. Faster implementations are of course welcome.

It is generally good to push as much logic as possible to WebCore level where it can be shared between implementations.

&gt; &gt; Not really important for the first version but do you think the WebCore should
&gt; &gt; track which domains have already been prefetched for the current document? It
&gt; &gt; needs to be done in some level of the stack anyway and doing it early might be
&gt; &gt; faster. 
&gt; 
&gt; The client may be running multiple instances of WebCore, and thus has a more
&gt; complete picture of what&apos;s going on. I think that&apos;s a better place to prune
&gt; duplicates.

Wouldn&apos;t it be even more important in that case to cut down unnecessary ipc traffic? Pruning duplicates here does not prevent pruning them more later. In any case, this can wait.

&gt; It would be easy to implement this policy using the FrameLoaderClient API
&gt; provided. However, many servers use short DNS TTLs so it turns out that
&gt; re-warming the current domain when a new hyperlink is created can often be
&gt; helpful. Different clients may have different network stacks and thus may have
&gt; different desired prefetch behavior, so I think it&apos;s ok to leave rate limiting
&gt; up to the client.

Right, but with current code the prefetching is anyway only invoked when the document is first parsed (at which point the current document domain is certainly in cache). Short TTL would expire all prefetched DSNs on the current page. In any case it is not necessary to make the prefetch call repeatedly for the current domain for every relative link in the document, once should be enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91500</commentid>
    <comment_count>9</comment_count>
      <attachid>23504</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-17 11:08:59 -0700</bug_when>
    <thetext>Created attachment 23504
Updated patch more comments from Antti

(In reply to comment #8)
&gt; I don&apos;t think it is good to have two callbacks that do essentially the same
&gt; thing. Also didParseAnchor() tells nothing about what should be implemented
&gt; there where as prefetchDNS() is a good name.

Ok, I got rid of didParseAnchor.

&gt; I think relative link URLs (or actually anything that does not start with
&gt; http:// or https://) can be ignored since the domain is the same as the current
&gt; document&apos;s. That would help cutting out many links on many pages. 

Ok, I&apos;ve implemented this suggestion. I also added a check for scheme-relative URLs (starting with &quot;//&quot;), since they are used heavily on certain sites (e.g. Slashdot).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91511</commentid>
    <comment_count>10</comment_count>
      <attachid>23504</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-09-17 12:51:37 -0700</bug_when>
    <thetext>Comment on attachment 23504
Updated patch more comments from Antti

Looks good, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91569</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-17 19:42:38 -0700</bug_when>
    <thetext>Why is the prefetching proper handled at the FrameLoaderClient level?  This pushes the actual prefetching into WebKit when it should really live in WebCore.   The policy of whether to prefetch a given URL could still be left up to FrameLoaderClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91594</commentid>
    <comment_count>12</comment_count>
      <attachid>23504</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-18 01:18:39 -0700</bug_when>
    <thetext>Comment on attachment 23504
Updated patch more comments from Antti

Clearing the review flag while I work on this some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91615</commentid>
    <comment_count>13</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-18 03:55:04 -0700</bug_when>
    <thetext>Added Stephanie to Cc as this should probably be run through the who range of page loading perf tests before getting landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91658</commentid>
    <comment_count>14</comment_count>
      <attachid>23534</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-18 11:57:00 -0700</bug_when>
    <thetext>Created attachment 23534
Updated patch with comments from Mark Rowe

Here&apos;s a new version that puts the responsibility of prefetching in WebCore. Mark, can you please take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91661</commentid>
    <comment_count>15</comment_count>
      <attachid>23534</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-18 12:36:44 -0700</bug_when>
    <thetext>Comment on attachment 23534
Updated patch with comments from Mark Rowe

 281             if (value.startsWith(&quot;http:&quot;) || value.startsWith(&quot;https:&quot;) || value.startsWith(&quot;//&quot;)) {
 282                 prefetchDNS(document()-&gt;completeURL(value).host());
 283             }

You have an unnecessary set of braces around this if statement.

There&apos;s no need for a separate DNSMac.cpp and DNSCFNet.cpp -- both Mac and Windows will probably use CFHost for prefetching.

The header guard on DNS.h is named DNSPrefetch_h, which doesn&apos;t match the file name.

You&apos;ll also need to stub out prefetchDNS for other platforms in order to not break Qt, Gtk and wx builds.  Adding to their TemporaryLinkStubs.cpp file is probably the right approach for those ports.

Unless I&apos;m not understanding the test, it doesn&apos;t appear to actually test whether DNS prefetching has worked nor whether parsing the relevant headers and attributes were parsed, only that it does not crash while parsing.  The output from DRT could be a little clearer about this as it currently says &quot;Browsers MAY do a DNS prefetch on the following links:&quot; then doesn&apos;t list any links.  There are also coding style issues in the JavaScript, such as braces around one-line if statements.

r=me if you address these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91662</commentid>
    <comment_count>16</comment_count>
      <attachid>23534</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-18 12:39:30 -0700</bug_when>
    <thetext>Comment on attachment 23534
Updated patch with comments from Mark Rowe

+            if (value.startsWith(&quot;http:&quot;) || value.startsWith(&quot;https:&quot;) || value.startsWith(&quot;//&quot;)) {

The protocolIs function (it&apos;s in KURL.h, but it works on a String) should be used for these types of checks. It&apos;s efficient and does a case-folding comparison.

Unless there&apos;s a reason to not use it here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91672</commentid>
    <comment_count>17</comment_count>
      <attachid>23538</attachid>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-18 14:28:33 -0700</bug_when>
    <thetext>Created attachment 23538
Updated patch with more comments from Mark Rowe

Stephanie, could you please run the page loading performance tests on this version of the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91712</commentid>
    <comment_count>18</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-09-18 19:01:36 -0700</bug_when>
    <thetext>PLT numbers are good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91736</commentid>
    <comment_count>19</comment_count>
    <who name="Collin Jackson">collinj</who>
    <bug_when>2008-09-19 00:07:02 -0700</bug_when>
    <thetext>Landed in r36650 (with some minor fixes in r36654 and r36658).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23220</attachid>
            <date>2008-09-06 12:54:17 -0700</date>
            <delta_ts>2008-09-15 12:57:04 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>11040</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjEzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDgtMDktMDYgIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2OTAKKyAgICAgICAg
CisgICAgICAgIElmIEVOQUJMRShETlNfUFJFRkVUQ0gpIGlzIHRydWUsIG5vdGlmeSB0aGUgRnJh
bWVMb2FkZXJDbGllbnQgCisgICAgICAgIGFib3V0IGh5cGVybGlua3MgYW5kIDxsaW5rIHJlbD0i
ZG5zLXByZWZldGNoIj4gdGFncyB0aGF0IGFyZQorICAgICAgICBlbmNvdW50ZXJlZCBzbyB0aGF0
IGl0IGNhbiBzcGVjdWxhdGl2ZWx5IHJlc29sdmUgaG9zdG5hbWVzLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdik6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c2V0U2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
aW5pdEROU1ByZWZldGNoRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
RE5TUHJlZmV0Y2hDb250cm9sKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojppc0ROU1ByZWZldGNoRW5hYmxlZCk6CisgICAgICAgICogaHRt
bC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
OjpIVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6
OnRva2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVu
dDo6cHJvY2Vzcyk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2Fu
bmVyOjpwcm9jZXNzQXR0cmlidXRlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJlZ2luKToKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpw
cmVmZXRjaEROUyk6CisKIDIwMDgtMDktMDYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gMzYxMzApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOSw2ICsxMzksMTAgQEAKICNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQuaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKEROU19QUkVGRVRDSCkKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC0zNDksNiArMzUzLDkgQEAgRG9jdW1lbnQ6
OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgIG1fb3Zlck1pbmltdW1MYXlvdXRU
aHJlc2hvbGQgPSBmYWxzZTsKICAgICAKICAgICBpbml0U2VjdXJpdHlDb250ZXh0KCk7CisjaWYg
RU5BQkxFKEROU19QUkVGRVRDSCkKKyAgICBpbml0RE5TUHJlZmV0Y2hFbmFibGVkKCk7CisjZW5k
aWYKIAogICAgIHN0YXRpYyBpbnQgZG9jSUQgPSAwOwogICAgIG1fZG9jSUQgPSBkb2NJRCsrOwpA
QCAtMTk1MCw2ICsxOTU3LDEwIEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29u
c3QgU3QKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXMpLT5zZXRD
b29raWUoY29udGVudCk7CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwg
ImNvbnRlbnQtbGFuZ3VhZ2UiKSkKICAgICAgICAgc2V0Q29udGVudExhbmd1YWdlKGNvbnRlbnQp
OworI2lmIEVOQUJMRShETlNfUFJFRkVUQ0gpCisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZXF1aXYsICJ4LWRucy1wcmVmZXRjaC1jb250cm9sIikpCisgICAgICAgIHNldEROU1ByZWZl
dGNoQ29udHJvbChjb250ZW50KTsKKyNlbmRpZgogfQogCiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzIERvY3VtZW50OjpwcmVwYXJlTW91c2VFdmVudChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgSW50UG9pbnQmIGRvY3VtZW50UG9pbnQsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpCkBAIC00MDE5LDYgKzQwMzAsOSBAQCB2b2lkIERvY3VtZW50Ojppbml0
U2VjdXJpdHlDb250ZXh0KCkKIHZvaWQgRG9jdW1lbnQ6OnNldFNlY3VyaXR5T3JpZ2luKFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBtX3NlY3VyaXR5T3JpZ2luID0gc2Vj
dXJpdHlPcmlnaW47CisjaWYgRU5BQkxFKEROU19QUkVGRVRDSCkKKyAgICBpbml0RE5TUHJlZmV0
Y2hFbmFibGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlRm9jdXNBcHBl
YXJhbmNlU29vbigpCkBAIC00MTg4LDYgKzQyMDIsMTggQEAgdW5zaWduZWQgRG9jdW1lbnQ6OnZp
c2l0ZWRMaW5rSGFzaChjb25zdAogCiAgICAgYm9vbCBoYXNDb2xvblNsYXNoU2xhc2ggPSBjb250
YWluc0NvbG9uU2xhc2hTbGFzaChjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCisjaWYgRU5BQkxFKERO
U19QUkVGRVRDSCkKKyAgICBTdHJpbmcgcHJlZmV0Y2hIb3N0OworICAgIGlmIChoYXNDb2xvblNs
YXNoU2xhc2gpIHsKKyAgICAgICAgS1VSTCBwYXJzZWRVUkwoYXR0cmlidXRlVVJMLCBtX2Jhc2VV
UkwpOworICAgICAgICBwcmVmZXRjaEhvc3QgPSBwYXJzZWRVUkwuaG9zdCgpOworICAgIH0gZWxz
ZQorICAgICAgICBwcmVmZXRjaEhvc3QgPSBtX2Jhc2VVUkwuaG9zdCgpOworCisgICAgaWYgKGZy
YW1lKCkgJiYgKG1faXNETlNQcmVmZXRjaEVuYWJsZWQgfHwgcHJlZmV0Y2hIb3N0ID09IG1fc2Vj
dXJpdHlPcmlnaW4tPmhvc3QoKSkpCisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KS0+cHJlZmV0Y2hETlMocHJlZmV0Y2hIb3N0KTsKKyNlbmRpZgorCiAgICAgaWYgKGhhc0NvbG9u
U2xhc2hTbGFzaCAmJiAhbmVlZHNUcmFpbGluZ1NsYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpCiAg
ICAgICAgIHJldHVybiBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShhdHRyaWJ1dGVV
Ukwuc3RyaW5nKCkuaW1wbCgpLT5oYXNoKCkpOwogCkBAIC00MzA1LDQgKzQzMzEsMjkgQEAgSFRN
TENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YQogICAgIHJldHVybiByZXN1bHQu
Z2V0KCk7CiB9CiAKKyNpZiBFTkFCTEUoRE5TX1BSRUZFVENIKQordm9pZCBEb2N1bWVudDo6aW5p
dEROU1ByZWZldGNoRW5hYmxlZCgpCit7CisgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5T
UHJlZmV0Y2ggPSBmYWxzZTsKKyAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0gKHNlY3VyaXR5
T3JpZ2luKCktPnByb3RvY29sKCkgPT0gImh0dHAiKTsKKworICAgIC8vIEluaGVyaXQgRE5TIHBy
ZWZldGNoIG9wdC1vdXQgZnJvbSBwYXJlbnQgZnJhbWUgICAgCisgICAgaWYgKERvY3VtZW50KiBw
YXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKQorICAgICAgICBpZiAoIXBhcmVudC0+aXNETlNQcmVm
ZXRjaEVuYWJsZWQoKSkKKyAgICAgICAgICAgIG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSBmYWxz
ZTsKK30KKwordm9pZCBEb2N1bWVudDo6c2V0RE5TUHJlZmV0Y2hDb250cm9sKGNvbnN0IFN0cmlu
ZyYgZG5zUHJlZmV0Y2hDb250cm9sKQoreworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkbnNQ
cmVmZXRjaENvbnRyb2wsICJvbiIpICYmIAorICAgICAgICAhbV9oYXZlRXhwbGljaXRseURpc2Fi
bGVkRE5TUHJlZmV0Y2gpIHsKKyAgICAgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IHRydWU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0g
ZmFsc2U7CisgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJlZmV0Y2ggPSB0cnVlOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24g
MzYxMzApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjIs
NiArNzYyLDEyIEBAIHB1YmxpYzoKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGdldENT
U0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0NhbnZh
c0VsZW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAKKyNpZiBFTkFCTEUoRE5TX1BSRUZF
VENIKQorICAgIGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RE5TUHJlZmV0Y2hFbmFibGVkOyB9CisgICAgdm9pZCBpbml0RE5TUHJlZmV0Y2hFbmFibGVkKCk7
CisgICAgdm9pZCBzZXRETlNQcmVmZXRjaENvbnRyb2woY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgYm9vbCBpc1hIVE1M
KTsKIApAQCAtODY2LDYgKzg3MiwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VzRmlyc3RM
ZXR0ZXJSdWxlczsKICAgICBib29sIG1fZ290b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVzaGVldHNM
b2FkOwogCisjaWYgRU5BQkxFKEROU19QUkVGRVRDSCkKKyAgICBib29sIG1faXNETlNQcmVmZXRj
aEVuYWJsZWQ7CisgICAgYm9vbCBtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaDsK
KyNlbmRpZgorCiAgICAgU3RyaW5nIG1fdGl0bGU7CiAgICAgYm9vbCBtX3RpdGxlU2V0RXhwbGlj
aXRseTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzYxMzApCisrKyBXZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBIVE1MTGlua0Vs
ZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChEb2N1bWVuCiAgICAgLCBtX2FsdGVybmF0ZShmYWxzZSkK
ICAgICAsIG1faXNTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV9pc0ljb24oZmFsc2UpCisgICAg
LCBtX2lzRG5zUHJlZmV0Y2goZmFsc2UpCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkK
IHsKIH0KQEAgLTEwNyw3ICsxMDgsNyBAQCBTdHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNo
ZWV0KCkgY29uCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikg
ewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVT
aGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29uKTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1
dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbiwg
bV9pc0Ruc1ByZWZldGNoKTsKICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGhyZWZBdHRyKSB7CiAgICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpLnN0cmluZygpOwpAQCAtMTI3LDE1ICsx
MjgsMTggQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0K
IH0KIAotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgcmVsLCBib29sJiBzdHlsZVNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wm
IGljb24pCit2b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nJiByZWwsIGJvb2wmIHN0eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9v
bCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpCiB7CiAgICAgc3R5bGVTaGVldCA9IGZhbHNlOwog
ICAgIGljb24gPSBmYWxzZTsgCiAgICAgYWx0ZXJuYXRlID0gZmFsc2U7OworICAgIGRuc1ByZWZl
dGNoID0gZmFsc2U7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQi
KSkKICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UocmVsLCAiaWNvbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInNob3J0Y3V0IGlj
b24iKSkKICAgICAgICAgaWNvbiA9IHRydWU7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UocmVsLCAiZG5zLXByZWZldGNoIikpCisgICAgICAgIGRuc1ByZWZldGNoID0gdHJ1ZTsKICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJhbHRlcm5hdGUgc3R5bGVzaGVldCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikpIHsKICAg
ICAgICAgc3R5bGVTaGVldCA9IHRydWU7CiAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CkBAIC0x
NjksNiArMTczLDEyIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICBpZiAo
bV9pc0ljb24gJiYgIW1fdXJsLmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0SWNv
blVSTChtX3VybCwgdHlwZSk7CiAKKyNpZiBFTkFCTEUoRE5TX1BSRUZFVENIKQorICAgIGlmICht
X2lzRG5zUHJlZmV0Y2ggJiYgIW1fdXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgp
KSB7CisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+cHJl
ZmV0Y2hEbnMobV91cmwuaG9zdCgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFN0eWxlc2hl
ZXQKICAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQgd291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggPGxp
bmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNwZWNpZmllZCBtZWFu
aW5nLiAtZHdoCiAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYmIG1faXNTdHlsZVNoZWV0
ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJl
dmlzaW9uIDM2MTMwKQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VS
TEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICAKLSAgICBzdGF0aWMgdm9pZCB0b2tl
bml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNo
ZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24pOworICAgIHN0YXRpYyB2b2lkIHRva2Vu
aXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hl
ZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3Ry
aW5nPiYpIGNvbnN0OwogCkBAIC0xMTEsNiArMTExLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
bV9hbHRlcm5hdGU7CiAgICAgYm9vbCBtX2lzU3R5bGVTaGVldDsKICAgICBib29sIG1faXNJY29u
OworICAgIGJvb2wgbV9pc0Ruc1ByZWZldGNoOwogICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7
CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9uIDM2MTMwKQorKysg
V2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAwLDgg
KzcwMCw5IEBAIHZvaWQgUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQogICAgICAg
ICAgICAgYm9vbCBzdHlsZVNoZWV0ID0gZmFsc2U7CiAgICAgICAgICAgICBib29sIGFsdGVybmF0
ZSA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7Ci0gICAgICAgICAgICBI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBh
bHRlcm5hdGUsIGljb24pOwotICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5bGVT
aGVldCAmJiAhYWx0ZXJuYXRlICYmICFpY29uOworICAgICAgICAgICAgYm9vbCBkbnNQcmVmZXRj
aCA9IGZhbHNlOworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJp
YnV0ZSh2YWx1ZSwgc3R5bGVTaGVldCwgYWx0ZXJuYXRlLCBpY29uLCBkbnNQcmVmZXRjaCk7Cisg
ICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5hdGUg
JiYgIWljb24gJiYgIWRuc1ByZWZldGNoOwogICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSA9
PSBjaGFyc2V0QXR0cikKICAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM2MTMwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTIsNiArOTUyLDE0IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCwKICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKICAgICBkb2N1bWVudC0+ZG9jTG9hZGVyKCkt
PnNldEF1dG9Mb2FkSW1hZ2VzKHNldHRpbmdzICYmIHNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkoKSk7CiAKKyNpZiBFTkFCTEUoRE5TX1BSRUZFVENIKQorICAgIGlmIChtX2RvY3Vt
ZW50TG9hZGVyKSB7CisgICAgICAgIFN0cmluZyBkbnNQcmVmZXRjaENvbnRyb2wgPSBtX2RvY3Vt
ZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiWC1ETlMtUHJlZmV0Y2gtQ29u
dHJvbCIpOworICAgICAgICBpZiAoIWRuc1ByZWZldGNoQ29udHJvbC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBkb2N1bWVudC0+c2V0RE5TUHJlZmV0Y2hDb250cm9sKGRuc1ByZWZldGNoQ29udHJv
bCk7CisgICAgfQorI2VuZGlmCisKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAg
ICBLVVJMIHVzZXJTdHlsZVNoZWV0ID0gc2V0dGluZ3MgPyBzZXR0aW5ncy0+dXNlclN0eWxlU2hl
ZXRMb2NhdGlvbigpIDogS1VSTCgpOwogICAgIGlmICghdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgp
KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAzNjEzMCkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
MCw2ICsyMDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0ID0gMDsgLy8gIk5hdmlnYXRpb24iIGhl
cmUgbWVhbnMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHBhZ2UgdG8gYW5vdGhlciB0aGF0IGVuZHMg
dXAgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0LgogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbiA9IHRydWUpID0gMDsK
KworI2lmIEVOQUJMRShETlNfUFJFRkVUQ0gpCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aEROUyhjb25zdCBTdHJpbmcmIGhvc3QpID0gMDsKKyNlbmRpZgogICAgICAgICAKICNpZiBQTEFU
Rk9STShNQUMpCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkK
</data>
<flag name="review"
          id="10341"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23445</attachid>
            <date>2008-09-15 12:57:04 -0700</date>
            <delta_ts>2008-09-16 11:56:46 -0700</delta_ts>
            <desc>Updated patch with comments from Antti</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>30098</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDgtMDktMTUgIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC5odG1sCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisgICAgICAg
IAorICAgICAgICBOb3RpZnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IGFib3V0IGh5cGVybGlua3Mg
YW5kIAorICAgICAgICA8bGluayByZWw9ImRucy1wcmVmZXRjaCI+IHRhZ3MgdGhhdCBhcmUgZW5j
b3VudGVyZWQgc28gdGhhdCBpdCAKKyAgICAgICAgY2FuIHNwZWN1bGF0aXZlbHkgcmVzb2x2ZSBo
b3N0bmFtZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5p
dEROU1ByZWZldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYXJzZUROU1ByZWZl
dGNoQ29udHJvbEhlYWRlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aXNETlNQcmVmZXRjaEVuYWJsZWQpOgorICAgICAgICAqIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvUHJlbG9hZFNj
YW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRy
aWJ1dGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBhcnNlQW5jaG9yKToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJl
Z2luKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKwogMjAwOC0wOS0x
NSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtODY1LDYgKzg2NSw3IEBAIF9fWk5L
N1dlYkNvcmU5U2VsZWN0aW9uMjNpc0NvbnRlbnRSaWNobHkKIF9fWk5LN1dlYkNvcmU5U2VsZWN0
aW9uN3RvUmFuZ2VFdgogX19aTks3V2ViQ29yZTlUaW1lckJhc2U4aXNBY3RpdmVFdgogX19aVFZO
N1dlYkNvcmUxMkNocm9tZUNsaWVudEUKK19fWk43V2ViQ29yZTIwTG9nTm90WWV0SW1wbGVtZW50
ZWRFCiBfZmlsZW5hbWVCeUZpeGluZ0lsbGVnYWxDaGFyYWN0ZXJzCiBfaGFzQ2FzZUluc2Vuc2l0
aXZlU3Vic3RyaW5nCiBfaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4CkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzY0NDcpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MzM3MCw2ICszMzcwLDcgQEAKIAkJQjJDQjkyNjIwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0Vs
ZW1lbnRJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyQ0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2Uu
bW0gKi87IH07CiAJCUIyQ0I5MjYzMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkNCOTI1RjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
ICovOyB9OwogCQlCMkNCOTI2NDBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1t
ICovOyB9OworCQlCMkNDOTFGMTBFN0UxMzQ3MDBGOTlEQkMgLyogTm90SW1wbGVtZW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0M5MUYwMEU3
RTEzNDcwMEY5OURCQyAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyQ0NFQzQ3MEM2Q0E5RjEwMDZBNTQyNCAvKiBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuY3BwICovOyB9OwogCQlCMkNDRUM0ODBDNkNBOUYxMDA2QTU0MjQg
LyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5oICovOyB9OwogCQlCMkQzRkM4QTBDMjIxMkNCMDBDRjM2MTgg
LyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRDNGQzg5MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1Ry
YW5zZm9ybUxpc3RDdXN0b20uY3BwICovOyB9OwpAQCAtNzgwNyw2ICs3ODA4LDcgQEAKIAkJQjJD
QjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2Uu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3
OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERP
TVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyQ0M5MUYwMEU3RTEzNDcwMEY5OURCQyAvKiBOb3RJbXBsZW1lbnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RJbXBsZW1lbnRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkNDRUM0NTBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkQzRkM4OTBDMjIxMkNC
MDBDRjM2MTggLyogSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI4NTEsNiArMTI4NTMsNyBAQAogCQkJCUE4MjM5
REZGMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dnaW5nLmggKi8sCiAJCQkJQkM3NzJDNEMwQzRFQjMw
NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovLAogCQkJCUJDNzcyQzREMEM0RUIz
MDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggKi8sCisJCQkJQjJDQzkxRjAwRTdFMTM0
NzAwRjk5REJDIC8qIE5vdEltcGxlbWVudGVkLmggKi8sCiAJCQkJNEIyNzA4QzUwQUYxOUVFNDAw
NjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLywKIAkJCQk5MzVDNDc2NjA5QUM0RDQzMDBBNkFBQjQg
LyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJOTMyODcxQkYwQjIwREVCNzAwNDkw
MzVBIC8qIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmggKi8sCkBAIC0xNTU5MCw2ICsxNTU5Myw3
IEBACiAJCQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRo
ZW1lTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3RjU2MDBBQjY5ODQgLyog
U2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyQ0M5MUYxMEU3RTEzNDcwMEY5
OURCQyAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAzNjQ0NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUxLDYgKzM1MSw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGJv
b2wgaXMKICAgICBtX292ZXJNaW5pbXVtTGF5b3V0VGhyZXNob2xkID0gZmFsc2U7CiAgICAgCiAg
ICAgaW5pdFNlY3VyaXR5Q29udGV4dCgpOworICAgIGluaXRETlNQcmVmZXRjaCgpOwogCiAgICAg
c3RhdGljIGludCBkb2NJRCA9IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CkBAIC0xOTUyLDYg
KzE5NTMsOCBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KGNvbnN0IFN0CiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPih0aGlzKS0+c2V0Q29va2llKGNvbnRl
bnQpOwogICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJjb250ZW50LWxh
bmd1YWdlIikpCiAgICAgICAgIHNldENvbnRlbnRMYW5ndWFnZShjb250ZW50KTsKKyAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgIngtZG5zLXByZWZldGNoLWNvbnRyb2wiKSkK
KyAgICAgICAgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29udGVudCk7CiB9CiAKIE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgRG9jdW1lbnQ6OnByZXBhcmVNb3VzZUV2ZW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJbnRQb2ludCYgZG9jdW1lbnRQb2lu
dCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKQEAgLTQwMjUsNiArNDAyOCw3IEBA
IHZvaWQgRG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQoKQogdm9pZCBEb2N1bWVudDo6c2V0
U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIG1f
c2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKKyAgICBpbml0RE5TUHJlZmV0Y2goKTsK
IH0KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlU29vbigpCkBAIC00MzEx
LDQgKzQzMTUsMjcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRDU1NDYW52YQog
ICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OmluaXRETlNQcmVm
ZXRjaCgpCit7CisgICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJlZmV0Y2ggPSBmYWxz
ZTsKKyAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0gc2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9j
b2woKSA9PSAiaHR0cCI7CisKKyAgICAvLyBJbmhlcml0IEROUyBwcmVmZXRjaCBvcHQtb3V0IGZy
b20gcGFyZW50IGZyYW1lICAgIAorICAgIGlmIChEb2N1bWVudCogcGFyZW50ID0gcGFyZW50RG9j
dW1lbnQoKSkgeworICAgICAgICBpZiAoIXBhcmVudC0+aXNETlNQcmVmZXRjaEVuYWJsZWQoKSkK
KyAgICAgICAgICAgIG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisK
K3ZvaWQgRG9jdW1lbnQ6OnBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnN0IFN0cmlu
ZyYgZG5zUHJlZmV0Y2hDb250cm9sKQoreworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkbnNQ
cmVmZXRjaENvbnRyb2wsICJvbiIpICYmICFtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVm
ZXRjaCkgeworICAgICAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSBmYWxzZTsKKyAg
ICBtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IHRydWU7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzY0NDcpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjIsNiArNzYyLDEwIEBAIHB1Ymxp
YzoKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGdldENTU0NhbnZhc0NvbnRleHQoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0NhbnZhc0VsZW1lbnQoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKICAgICAKKyAgICBib29sIGlzRE5TUHJlZmV0Y2hFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0ROU1ByZWZldGNoRW5hYmxlZDsgfQorICAgIHZvaWQgaW5pdEROU1ByZWZl
dGNoKCk7CisgICAgdm9pZCBwYXJzZUROU1ByZWZldGNoQ29udHJvbEhlYWRlcihjb25zdCBTdHJp
bmcmKTsKKwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgYm9vbCBpc1hIVE1MKTsK
IApAQCAtODY2LDYgKzg3MCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNGaXJzdExldHRl
clJ1bGVzOwogICAgIGJvb2wgbV9nb3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xvYWQ7
CiAKKyAgICBib29sIG1faXNETlNQcmVmZXRjaEVuYWJsZWQ7CisgICAgYm9vbCBtX2hhdmVFeHBs
aWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaDsKKwogICAgIFN0cmluZyBtX3RpdGxlOwogICAgIGJv
b2wgbV90aXRsZVNldEV4cGxpY2l0bHk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGl0bGVFbGVt
ZW50OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ0NykK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTI3NCw2ICsyNzUsOCBAQCB2b2lkIEhU
TUxBbmNob3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIHNldElzTGluayghYXR0
ci0+aXNOdWxsKCkpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKICAgICAgICAg
ICAgIHNldENoYW5nZWQoKTsKKyAgICAgICAgaWYgKGlzTGluaygpICYmIGRvY3VtZW50KCktPmZy
YW1lKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpZFBhcnNlQW5jaG9yKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyIHx8CiAgICAgICAgICAgICAgYXR0ci0+bmFt
ZSgpID09IHRpdGxlQXR0ciB8fAogICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSByZWxBdHRy
KSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzY0NDcpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVk
aWFMaXN0LmgiCkBAIC00OCw2ICs0OSw3IEBAIEhUTUxMaW5rRWxlbWVudDo6SFRNTExpbmtFbGVt
ZW50KERvY3VtZW4KICAgICAsIG1fYWx0ZXJuYXRlKGZhbHNlKQogICAgICwgbV9pc1N0eWxlU2hl
ZXQoZmFsc2UpCiAgICAgLCBtX2lzSWNvbihmYWxzZSkKKyAgICAsIG1faXNETlNQcmVmZXRjaChm
YWxzZSkKICAgICAsIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQogewogfQpAQCAtMTA3LDcgKzEw
OSw3IEBAIFN0eWxlU2hlZXQqIEhUTUxMaW5rRWxlbWVudDo6c2hlZXQoKSBjb24KIHZvaWQgSFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7Ci0gICAgICAgIHRva2VuaXpl
UmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCksIG1faXNTdHlsZVNoZWV0LCBtX2FsdGVybmF0ZSwg
bV9pc0ljb24pOworICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpLCBt
X2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29uLCBtX2lzRE5TUHJlZmV0Y2gpOwog
ICAgICAgICBwcm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0
dHIpIHsKICAgICAgICAgbV91cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChh
dHRyLT52YWx1ZSgpKSkuc3RyaW5nKCk7CkBAIC0xMjcsMTUgKzEyOSwxOCBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5r
RWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwsIGJv
b2wmIHN0eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbikKK3ZvaWQgSFRNTExp
bmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCwg
Ym9vbCYgc3R5bGVTaGVldCwgYm9vbCYgYWx0ZXJuYXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQ
cmVmZXRjaCkKIHsKICAgICBzdHlsZVNoZWV0ID0gZmFsc2U7CiAgICAgaWNvbiA9IGZhbHNlOyAK
ICAgICBhbHRlcm5hdGUgPSBmYWxzZTsKKyAgICBkbnNQcmVmZXRjaCA9IGZhbHNlOwogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzdHlsZXNoZWV0IikpCiAgICAgICAgIHN0eWxlU2hl
ZXQgPSB0cnVlOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgImljb24iKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzaG9ydGN1dCBpY29uIikpCiAgICAgICAgIGljb24g
PSB0cnVlOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgImRucy1wcmVmZXRj
aCIpKQorICAgICAgICBkbnNQcmVmZXRjaCA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UocmVsLCAiYWx0ZXJuYXRlIHN0eWxlc2hlZXQiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShyZWwsICJzdHlsZXNoZWV0IGFsdGVybmF0ZSIpKSB7CiAgICAgICAgIHN0eWxlU2hlZXQgPSB0
cnVlOwogICAgICAgICBhbHRlcm5hdGUgPSB0cnVlOwpAQCAtMTY5LDYgKzE3NCw5IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICBpZiAobV9pc0ljb24gJiYgIW1fdXJsLmlz
RW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0SWNvblVSTChtX3VybCwgdHlwZSk7CiAK
KyAgICBpZiAobV9pc0ROU1ByZWZldGNoICYmICFtX3VybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5wcmVmZXRjaEROUyhLVVJMKG1fdXJsKS5ob3N0KCkpOworCiAgICAgLy8gU3R5bGVzaGVl
dAogICAgIC8vIFRoaXMgd2FzIGJ1Z2d5IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGlu
ayByZWw9ImFsdGVybmF0ZSI+LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5p
bmcuIC1kd2gKICAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IDIgJiYgbV9pc1N0eWxlU2hlZXQg
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2
aXNpb24gMzY0NDcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogICAgIAotICAgIHN0YXRpYyB2b2lkIHRva2Vu
aXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hl
ZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbik7CisgICAgc3RhdGljIHZvaWQgdG9rZW5p
emVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgYm9vbCYgc3R5bGVzaGVl
dCwgYm9vbCYgYWx0ZXJuYXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJp
bmc+JikgY29uc3Q7CiAKQEAgLTExMSw2ICsxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBt
X2FsdGVybmF0ZTsKICAgICBib29sIG1faXNTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9pc0ljb247
CisgICAgYm9vbCBtX2lzRE5TUHJlZmV0Y2g7CiAgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAkocmV2aXNpb24gMzY0NDcpCisrKyBX
ZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsOCAr
NzAwLDkgQEAgdm9pZCBQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCiAgICAgICAg
ICAgICBib29sIHN0eWxlU2hlZXQgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2wgYWx0ZXJuYXRl
ID0gZmFsc2U7CiAgICAgICAgICAgICBib29sIGljb24gPSBmYWxzZTsKLSAgICAgICAgICAgIEhU
TUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFs
dGVybmF0ZSwgaWNvbik7Ci0gICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNo
ZWV0ICYmICFhbHRlcm5hdGUgJiYgIWljb247CisgICAgICAgICAgICBib29sIGRuc1ByZWZldGNo
ID0gZmFsc2U7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmli
dXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBhbHRlcm5hdGUsIGljb24sIGRuc1ByZWZldGNoKTsKKyAg
ICAgICAgICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVybmF0ZSAm
JiAhaWNvbiAmJiAhZG5zUHJlZmV0Y2g7CiAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlID09
IGNoYXJzZXRBdHRyKQogICAgICAgICAgICAgbV9jaGFyc2V0ID0gdmFsdWU7CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDM2NDQ3KQorKysgV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw2ICsyNjEsOSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlz
dGVuKSB7fQogCisgICAgdmlydHVhbCB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9z
dCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VBbmNob3IoY29uc3QgU3RyaW5nJiBocmVm
LCBjb25zdCBEb2N1bWVudCopIHt9CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVhbCBO
U0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgTlNDYWNoZWRVUkxSZXNwb25zZSogcmVzcG9uc2UpIGNv
bnN0IHsgcmV0dXJuIHJlc3BvbnNlOyB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHJldmlzaW9uIDM2NDQ3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NTIsNiArOTUyLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmJlZ2lu
KGNvbnN0IEtVUkwmIHVybCwKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0
dGluZ3MoKTsKICAgICBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKHNl
dHRpbmdzICYmIHNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CiAKKyAgICBp
ZiAobV9kb2N1bWVudExvYWRlcikgeworICAgICAgICBTdHJpbmcgZG5zUHJlZmV0Y2hDb250cm9s
ID0gbV9kb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIlgtRE5TLVBy
ZWZldGNoLUNvbnRyb2wiKTsKKyAgICAgICAgaWYgKCFkbnNQcmVmZXRjaENvbnRyb2wuaXNFbXB0
eSgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPnBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVy
KGRuc1ByZWZldGNoQ29udHJvbCk7CisgICAgfQorCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlM
RVNIRUVUCiAgICAgS1VSTCB1c2VyU3R5bGVTaGVldCA9IHNldHRpbmdzID8gc2V0dGluZ3MtPnVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oKSA6IEtVUkwoKTsKICAgICBpZiAoIXVzZXJTdHlsZVNoZWV0
LmlzRW1wdHkoKSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
MzY0NDcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENhY2hlZFBhZ2U7CisgICAgY2xhc3Mg
RG9jdW1lbnQ7CiAgICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiAgICAgY2xhc3MgRWxlbWVudDsK
ICAgICBjbGFzcyBGb3JtU3RhdGU7CkBAIC0yMDAsNiArMjAxLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNv
bnN0ID0gMDsgLy8gIk5hdmlnYXRpb24iIGhlcmUgbWVhbnMgYSB0cmFuc2l0aW9uIGZyb20gb25l
IHBhZ2UgdG8gYW5vdGhlciB0aGF0IGVuZHMgdXAgaW4gdGhlIGJhY2svZm9yd2FyZCBsaXN0Lgog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlv
bihib29sIGxpc3RlbiA9IHRydWUpID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0
Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50KikgPSAwOwogICAg
ICAgICAKICNpZiBQTEFURk9STShNQUMpCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5k
ZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdl
TG9nCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDktMTUgIENvbGxpbiBKYWNrc29uICA8Y29sbGlu
akB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY5MAorCisg
ICAgICAgIEFkZCBtZXRob2RzIGZvciBETlMgcHJlZmV0Y2ggdG8gRnJhbWVMb2FkZXJDbGllbnQu
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpwcmVmZXRjaEROUyk6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQYXJzZUFuY2hvcik6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaDoKKwogMjAwOC0wOS0xMyAgQWRy
aWVuIE5hZGVyICA8Y2FtYXJhZGV0dXhAZ21haWwuY29tPgogCiAgICAgICAgIEd0ayBidWlsZCBm
aXgsIG5vdCByZXZpZXdlZC4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODksNiArMzg5LDE2IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9y
SWNvbk4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpwcmVmZXRjaEROUyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhvc3QpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlkUGFyc2VBbmNob3Io
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBocmVmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudCopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0
TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKQogewogICAgIC8vIHRoaXMgaXMgb25seSBpbnRl
cmVzdGluZyBvbmNlIHdlIHByb3ZpZGUgYW4gZXh0ZXJuYWwgQVBJIGZvciB0aGUgRE9NCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5o
CShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw5IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmlj
YXRpb24oYm9vbCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0
cmluZyYgaG9zdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZUFuY2hvcihjb25zdCBT
dHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50Kik7CisKICAgICAgICAgdmlydHVhbCBXZWJDb3Jl
OjpPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBXZWJDb3JlOjpLVVJM
JiB1cmwsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOwpJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDM2NDQ3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOC0wOS0xNSAgQ29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRkIG1l
dGhvZHMgZm9yIEROUyBwcmVmZXRjaCB0byBGcmFtZUxvYWRlckNsaWVudC4KKyAgICAgICAgCQor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisKIDIwMDgtMDktMTIg
IEpvaG4gU3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgPHJk
YXI6Ly9wcm9ibGVtLzYxMTA5NDE+IENsaWNraW5nIHRoZSBwcmludCBidXR0b24gaW4gUERGIGNv
bnRlbnQgZG9lcyBub3RoaW5nCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTkwLDYgKzE5MCw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJ
Y29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuKTsKIAorICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aEROUyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhvc3QpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZUFuY2hvcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhyZWYsIGNvbnN0IFdlYkNvcmU6OkRv
Y3VtZW50Kik7CisKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogICAgIHZpcnR1YWwgam9i
amVjdCBqYXZhQXBwbGV0KE5TVmlldyopOwogI2VuZGlmCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDM2NDQ3
KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJO
U1VSTEV4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50
ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CkBAIC0xNDc5LDYg
KzE0ODAsMTYgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJYwogICAg
IFtbbV93ZWJGcmFtZS5nZXQoKSB3ZWJWaWV3XSBfcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9u
Omxpc3Rlbl07CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKGNv
bnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQYXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNv
bnN0IERvY3VtZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3QKIHsKICAg
ICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBbW21fd2ViRnJhbWUuZ2V0KCkgd2ViVmll
d10gcHJlZmVyZW5jZXNdOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwOC0wOS0xNSAgQ29sbGlu
IEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50
dGkgS29pdmlzdG8uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRkIG1ldGhvZHMgZm9yIEROUyBwcmVmZXRjaCB0byBG
cmFtZUxvYWRlckNsaWVudC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6cHJl
ZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlkUGFy
c2VBbmNob3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
aDoKKwogMjAwOC0wOS0xNSAgVG9yIEFybmUgVmVzdGLDuCAgPHRhdmVzdGJvQHRyb2xsdGVjaC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAzNjQ0NykK
KysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQzLDYgKzY0MywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OnJlZ2lzdGVyRm9ySWNvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0OjpwcmVmZXRjaEROUyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhvc3QpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpk
aWRQYXJzZUFuY2hvcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhyZWYsIGNvbnN0IFdlYkNvcmU6
OkRvY3VtZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJs
KQogewogICAgIFFXZWJIaXN0b3J5SW50ZXJmYWNlICpoaXN0b3J5ID0gUVdlYkhpc3RvcnlJbnRl
cmZhY2U6OmRlZmF1bHRJbnRlcmZhY2UoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMzY0NDcpCisrKyBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTksNiArMTk5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCk7CiAKKyAgICAgICAgdmlydHVh
bCB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRQYXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50Kik7
CisKICAgICAgICAgUVN0cmluZyBjaG9vc2VGaWxlKGNvbnN0IFFTdHJpbmcmIG9sZEZpbGUpOwog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjQ0NykKKysrIFdlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDktMTUgIENvbGxp
biBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDY5MAorCisgICAgICAgIEFkZCBtZXRob2RzIGZvciBETlMgcHJlZmV0Y2ggdG8g
RnJhbWVMb2FkZXJDbGllbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cHJlZmV0Y2hE
TlMpOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBhcnNlQW5jaG9yKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorCiAyMDA4LTA5
LTEzICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBTY3JvbGxi
YXJUaGVtZSB0byB0aGUgYnVpbGQuCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMzY0NDcpCisrKyBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJF
bGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0hpc3RvcnlJdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luUGFja2Fn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luVmlldy5oPgpAQCAtNzIwLDYgKzcyMSwxNiBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUCiAgICAgbV9wbHVnaW5W
aWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdldCk7CiB9CiAKK3ZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRQYXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50KikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBXZWJIaXN0b3J5KiBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6d2ViSGlzdG9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2ViRnJhbWUgIT0gbV93ZWJGcmFt
ZS0+d2ViVmlldygpLT50b3BMZXZlbEZyYW1lKCkpCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAzNjQ0NykKKysr
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OldpZGdldCogY3JlYXRlUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpF
bGVtZW50KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJp
bmc+JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBjb25zdCBXZWJDb3JlOjpTdHJp
bmcmLCBib29sIGxvYWRNYW51YWxseSk7CiAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRv
UGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3QpOworICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50Kik7CisKIHByb3Rl
Y3RlZDoKICAgICBXZWJGcmFtZUxvYWRlckNsaWVudChXZWJGcmFtZSopOwogICAgIH5XZWJGcmFt
ZUxvYWRlckNsaWVudCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzY0NDcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0wOS0xNSAg
Q29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIEROUyBwcmVmZXRjaCBj
b250cm9sLgorCisgICAgICAgICogaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9s
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVm
ZXRjaC1jb250cm9sLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy9yZXNv
dXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwOiBBZGRlZC4KKwogMjAwOC0wOS0xNSAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llai4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gt
Y29udHJvbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGhpcyBpcyBhIHRlc3Qgb2YgRE5T
IHByZWZldGNoIGNvbnRyb2wuIEl0J3MgY29uc2lkZXJlZCBhIHBhc3MgaWYgaXQgZG9lc24ndCBj
cmFzaC4gSXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIG1hbnVhbCB0ZXN0IG9mIEROUyBwcmVmZXRj
aCB1c2luZyBhIG5ldHdvcmtpbmcgbW9uaXRvcmluZyB0b29sLgorQnJvd3NlcnMgTUFZIGRvIGEg
RE5TIHByZWZldGNoIG9uIHRoZSBmb2xsb3dpbmcgbGlua3M6CisKKyAgICAgICAgICAgICAgCitC
cm93c2VycyBTSE9VTEQgTk9UIGRvIGEgRE5TIGxvb2t1cCBmb3IgdGhlIGZvbGxvd2luZyBsaW5r
cyB1bnRpbCB0aGV5IGFyZSBjbGlja2VkOgorCisgICAgICAgICAgCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gt
Y29udHJvbC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACis8aHRtbD4KKzxzdHls
ZT4KK2lmcmFtZQoreyAKKyAgICBoZWlnaHQ6IDYwcHg7CisgICAgd2lkdGg6IDIwMHB4OworfQor
PC9zdHlsZT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorICAg
IGZ1bmN0aW9uIGVtaXRGcmFtZVdpdGhDb250ZW50cyhjb250ZW50cykgeworICAgICAgICBkb2N1
bWVudC53cml0ZSgiPGlmcmFtZSBzcmM9XCJkYXRhOnRleHQvaHRtbCwiICsgY29udGVudHMgKyAi
XCI+PC9pZnJhbWU+Iik7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFJhbmRvbUhvc3QoKSB7Cisg
ICAgICAgIHJldHVybiAid3d3LiIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAw
MDAwMCkgKyAiLmludmFsaWQiOworICAgIH0KKyAgICBmdW5jdGlvbiBlbWl0RnJhbWVGb3JTY2hl
bWUoc2NoZW1lKSB7CisgICAgICAgIHZhciBob3N0ID0gZ2V0UmFuZG9tSG9zdCgpOworICAgICAg
ICB2YXIgYW5jaG9yID0gIjxhIGhyZWY9JyIgKyBzY2hlbWUgKyAiOi8vIiArIGhvc3QgKyAiJz4i
ICsgaG9zdCArICI8L2E+IjsKKyAgICAgICAgZW1pdEZyYW1lV2l0aENvbnRlbnRzKGFuY2hvcik7
CisgICAgfQorICAgIGZ1bmN0aW9uIGVtaXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKGRuc1By
ZWZldGNoQ29udHJvbCkgeworICAgICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhvc3QoKTsKKyAg
ICAgICAgdmFyIGNvbnRlbnRzID0gIjxsaW5rIHJlbD0nZG5zLXByZWZldGNoJyBocmVmPScvLyIg
KyBob3N0ICsgIic+IiArIGhvc3Q7CisgICAgICAgIGlmIChkbnNQcmVmZXRjaENvbnRyb2wpIHsK
KyAgICAgICAgICAgIGNvbnRlbnRzID0gIjxtZXRhIGh0dHAtZXF1aXY9J3gtZG5zLXByZWZldGNo
LWNvbnRyb2wnIGNvbnRlbnQ9JyIgKyBkbnNQcmVmZXRjaENvbnRyb2wgKyAiJz4iICsgY29udGVu
dHM7CisgICAgICAgIH0KKyAgICAgICAgZW1pdEZyYW1lV2l0aENvbnRlbnRzKGNvbnRlbnRzKTsK
KyAgICB9Cis8L3NjcmlwdD4KKzxib2R5PgorVGhpcyBpcyBhIHRlc3Qgb2YgRE5TIHByZWZldGNo
IGNvbnRyb2wuIEl0J3MgY29uc2lkZXJlZCBhIHBhc3MgaWYgaXQgZG9lc24ndCBjcmFzaC4gSXQg
Y2FuIGFsc28gYmUgdXNlZCBhcyAKK2EgbWFudWFsIHRlc3Qgb2YgRE5TIHByZWZldGNoIHVzaW5n
IGEgbmV0d29ya2luZyBtb25pdG9yaW5nIHRvb2wuCisKKzxwPkJyb3dzZXJzIE1BWSBkbyBhIERO
UyBwcmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxpbmtzOjwvcD4KKworPGRpdj4KKyAgPHNjcmlw
dD5lbWl0RnJhbWVGb3JNYW51YWxETlNQcmVmZXRjaCgpPC9zY3JpcHQ+CisgIDxzY3JpcHQ+ZW1p
dEZyYW1lRm9yTWFudWFsRE5TUHJlZmV0Y2goIm9mZiIpPC9zY3JpcHQ+CisgIDxzY3JpcHQ+ZW1p
dEZyYW1lRm9yU2NoZW1lKCJodHRwIik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JT
Y2hlbWUoImh0dHBzIik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JTY2hlbWUoImZ0
cCIpPC9zY3JpcHQ+CisgIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRy
b2wucGhwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gt
Y29udHJvbC5waHA/dmFsdWU9b24iPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2Vz
L2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1mb28iPjwvaWZyYW1lPgorICA8aWZyYW1l
IHNyYz0iZGF0YTp0ZXh0L2h0bWwsPGlmcmFtZSBzcmM9J2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9t
aXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAnPjwvaWZyYW1lPiI+PC9pZnJh
bWU+Cis8L2Rpdj4KKworPHAgc3R5bGU9J2NsZWFyOiBsZWZ0Jz5Ccm93c2VycyBTSE9VTEQgTk9U
IGRvIGEgRE5TIGxvb2t1cCBmb3IgdGhlIGZvbGxvd2luZyBsaW5rcyB1bnRpbCB0aGV5IGFyZSBj
bGlja2VkOjwvcD4KKworPGRpdj4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0
Y2gtY29udHJvbC5waHA/dmFsdWU9b2ZmIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9InJlc291
cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9Zm9vIj48L2lmcmFtZT4KKyAgPGlm
cmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAiPjwvaWZyYW1lPgor
ICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1v
ZmYiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250
cm9sLnBocD92YWx1ZT1mb28iPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0
bWwsPG1ldGEgaHR0cC1lcXVpdj0neC1kbnMtcHJlZmV0Y2gtY29udHJvbCcgdmFsdWU9J29mZic+
PGlmcmFtZSBzcmM9J2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9taXNjL3Jlc291cmNlcy9kbnMtcHJl
ZmV0Y2gtY29udHJvbC5waHAnPjwvaWZyYW1lPiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJk
YXRhOnRleHQvaHRtbCw8bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRjaC1jb250cm9sJyB2
YWx1ZT0nb24nPjxpZnJhbWUgc3JjPSdodHRwczovLzEyNy4wLjAuMTo4NDQzL21pc2MvcmVzb3Vy
Y2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocCc+PC9pZnJhbWU+Ij48L2lmcmFtZT4KKzwvZGl2
PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mv
cmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5z
LXByZWZldGNoLWNvbnRyb2wucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8P3Bo
cAorICBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0gJ29mZicpCisgICAgaGVhZGVyKCdYLUROUy1QcmVm
ZXRjaC1Db250cm9sOiBvZmYnKTsKKyAgZWxzZSBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0gJ29uJykK
KyAgICBoZWFkZXIoJ1gtRE5TLVByZWZldGNoLUNvbnRyb2w6IG9uJyk7CisgIGVsc2UgaWYgKCRf
R0VUWyd2YWx1ZSddID09ICdmb28nKQorICAgIGhlYWRlcignWC1ETlMtUHJlZmV0Y2gtQ29udHJv
bDogZm9vJyk7CisKKyRmYWtlX2RvbWFpbiA9ICJ3d3cuIiAuIHJhbmQoKSAuICIuaW52YWxpZCI7
Cis/PgorPGh0bWw+Cis8Ym9keT4KKzxhIGhyZWY9J2h0dHA6Ly88P3BocCBlY2hvICRmYWtlX2Rv
bWFpbiA/Pi8nPjw/cGhwIGVjaG8gJGZha2VfZG9tYWluID8+PC9hPgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23479</attachid>
            <date>2008-09-16 11:56:46 -0700</date>
            <delta_ts>2008-09-17 11:08:59 -0700</delta_ts>
            <desc>Updated patch with improved layout test</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>30153</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjUxNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDgtMDktMTUgIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC5odG1sCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisgICAgICAg
IAorICAgICAgICBOb3RpZnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IGFib3V0IGh5cGVybGlua3Mg
YW5kIAorICAgICAgICA8bGluayByZWw9ImRucy1wcmVmZXRjaCI+IHRhZ3MgdGhhdCBhcmUgZW5j
b3VudGVyZWQgc28gdGhhdCBpdCAKKyAgICAgICAgY2FuIHNwZWN1bGF0aXZlbHkgcmVzb2x2ZSBo
b3N0bmFtZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5p
dEROU1ByZWZldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYXJzZUROU1ByZWZl
dGNoQ29udHJvbEhlYWRlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aXNETlNQcmVmZXRjaEVuYWJsZWQpOgorICAgICAgICAqIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvUHJlbG9hZFNj
YW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRy
aWJ1dGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKToKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBhcnNlQW5jaG9yKToKKyAgICAgICAgKiBs
b2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJl
Z2luKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKwogMjAwOC0wOS0x
NiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTg2NSw2ICs4NjUsNyBAQCBfX1pO
SzdXZWJDb3JlOVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5CiBfX1pOSzdXZWJDb3JlOVNlbGVj
dGlvbjd0b1JhbmdlRXYKIF9fWk5LN1dlYkNvcmU5VGltZXJCYXNlOGlzQWN0aXZlRXYKIF9fWlRW
TjdXZWJDb3JlMTJDaHJvbWVDbGllbnRFCitfX1pON1dlYkNvcmUyMExvZ05vdFlldEltcGxlbWVu
dGVkRQogX2ZpbGVuYW1lQnlGaXhpbmdJbGxlZ2FsQ2hhcmFjdGVycwogX2hhc0Nhc2VJbnNlbnNp
dGl2ZVN1YnN0cmluZwogX2hhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM2NTE3KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMzNzIsNiArMzM3Miw3IEBACiAJCUIyQ0I5MjYyMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdF
bGVtZW50SW5zdGFuY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkNCOTI1RTBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNl
Lm1tICovOyB9OwogCQlCMkNCOTI2MzBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudElu
c3RhbmNlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJDQjkyNUYwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3Qu
aCAqLzsgfTsKIAkJQjJDQjkyNjQwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0
YW5jZUxpc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkNCOTI2MDBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5t
bSAqLzsgfTsKKwkJQjJDQzkxRjEwRTdFMTM0NzAwRjk5REJDIC8qIE5vdEltcGxlbWVudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDOTFGMDBF
N0UxMzQ3MDBGOTlEQkMgLyogTm90SW1wbGVtZW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkNDRUM0NzBDNkNBOUYxMDA2QTU0MjQgLyog
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQ0VDNDUwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcCAqLzsgfTsKIAkJQjJDQ0VDNDgwQzZDQTlGMTAwNkE1NDI0
IC8qIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuaCAqLzsgfTsKIAkJQjJEM0ZDOEEwQzIyMTJDQjAwQ0YzNjE4
IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQzRkM4OTBDMjIxMkNCMDBDRjM2MTggLyogSlNTVkdU
cmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcCAqLzsgfTsKQEAgLTc4MTEsNiArNzgxMiw3IEBACiAJCUIy
Q0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI1RjBCNUJEQTAyMDA5QkFB
NzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkNCOTI2MDBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudElu
c3RhbmNlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
T01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCMkNDOTFGMDBFN0UxMzQ3MDBGOTlEQkMgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDQ0VDNDUwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRlclNWR1ZpZXdw
b3J0Q29udGFpbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQ0NFQzQ2MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJEM0ZDODkwQzIyMTJD
QjAwQ0YzNjE4IC8qIEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9tLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyODU1LDYgKzEyODU3LDcgQEAKIAkJCQlBODIz
OURGRjA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oICovLAogCQkJCUJDNzcyQzRDMEM0RUIz
MDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmNwcCAqLywKIAkJCQlCQzc3MkM0RDBDNEVC
MzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oICovLAorCQkJCUIyQ0M5MUYwMEU3RTEz
NDcwMEY5OURCQyAvKiBOb3RJbXBsZW1lbnRlZC5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQw
MDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8sCiAJCQkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0
IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTkzMjg3MUJGMEIyMERFQjcwMDQ5
MDM1QSAvKiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oICovLApAQCAtMTU1OTcsNiArMTU2MDAs
NyBAQAogCQkJCUJDOUJDNjRFMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDOEI4NTNFMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJU
aGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8q
IFNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkNDOTFGMTBFN0UxMzQ3MDBG
OTlEQkMgLyogTm90SW1wbGVtZW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMzY1MTcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MSw2ICszNTEsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBi
b29sIGlzCiAgICAgbV9vdmVyTWluaW11bUxheW91dFRocmVzaG9sZCA9IGZhbHNlOwogICAgIAog
ICAgIGluaXRTZWN1cml0eUNvbnRleHQoKTsKKyAgICBpbml0RE5TUHJlZmV0Y2goKTsKIAogICAg
IHN0YXRpYyBpbnQgZG9jSUQgPSAwOwogICAgIG1fZG9jSUQgPSBkb2NJRCsrOwpAQCAtMTk1Miw2
ICsxOTUzLDggQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0h0dHBFcXVpdihjb25zdCBTdAogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4odGhpcyktPnNldENvb2tpZShjb250
ZW50KTsKICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC1s
YW5ndWFnZSIpKQogICAgICAgICBzZXRDb250ZW50TGFuZ3VhZ2UoY29udGVudCk7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXF1aXYsICJ4LWRucy1wcmVmZXRjaC1jb250cm9sIikp
CisgICAgICAgIHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnRlbnQpOwogfQogCiBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIERvY3VtZW50OjpwcmVwYXJlTW91c2VFdmVudChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSW50UG9pbnQmIGRvY3VtZW50UG9p
bnQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCkBAIC00MDMwLDYgKzQwMzMsNyBA
QCB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKIHZvaWQgRG9jdW1lbnQ6OnNl
dFNlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBt
X3NlY3VyaXR5T3JpZ2luID0gc2VjdXJpdHlPcmlnaW47CisgICAgaW5pdEROU1ByZWZldGNoKCk7
CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZVNvb24oKQpAQCAtNDMx
Niw0ICs0MzIwLDI3IEBAIEhUTUxDYW52YXNFbGVtZW50KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmEK
ICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwogfQogCit2b2lkIERvY3VtZW50Ojppbml0RE5TUHJl
ZmV0Y2goKQoreworICAgIG1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZldGNoID0gZmFs
c2U7CisgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IHNlY3VyaXR5T3JpZ2luKCktPnByb3Rv
Y29sKCkgPT0gImh0dHAiOworCisgICAgLy8gSW5oZXJpdCBETlMgcHJlZmV0Y2ggb3B0LW91dCBm
cm9tIHBhcmVudCBmcmFtZSAgICAKKyAgICBpZiAoRG9jdW1lbnQqIHBhcmVudCA9IHBhcmVudERv
Y3VtZW50KCkpIHsKKyAgICAgICAgaWYgKCFwYXJlbnQtPmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkp
CisgICAgICAgICAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0gZmFsc2U7CisgICAgfQorfQor
Cit2b2lkIERvY3VtZW50OjpwYXJzZUROU1ByZWZldGNoQ29udHJvbEhlYWRlcihjb25zdCBTdHJp
bmcmIGRuc1ByZWZldGNoQ29udHJvbCkKK3sKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZG5z
UHJlZmV0Y2hDb250cm9sLCAib24iKSAmJiAhbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJl
ZmV0Y2gpIHsKKyAgICAgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IHRydWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkID0gZmFsc2U7Cisg
ICAgbV9oYXZlRXhwbGljaXRseURpc2FibGVkRE5TUHJlZmV0Y2ggPSB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDM2NTE3KQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYyLDYgKzc2MiwxMCBAQCBwdWJs
aWM6CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBnZXRDU1NDYW52YXNDb250ZXh0KGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBnZXRDU1NDYW52YXNFbGVtZW50KGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgCisgICAgYm9vbCBpc0ROU1ByZWZldGNoRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNETlNQcmVmZXRjaEVuYWJsZWQ7IH0KKyAgICB2b2lkIGluaXRETlNQcmVm
ZXRjaCgpOworICAgIHZvaWQgcGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3Ry
aW5nJik7CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGJvb2wgaXNYSFRNTCk7
CiAKQEAgLTg2Niw2ICs4NzAsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VzRmlyc3RMZXR0
ZXJSdWxlczsKICAgICBib29sIG1fZ290b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVzaGVldHNMb2Fk
OwogCisgICAgYm9vbCBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkOworICAgIGJvb2wgbV9oYXZlRXhw
bGljaXRseURpc2FibGVkRE5TUHJlZmV0Y2g7CisKICAgICBTdHJpbmcgbV90aXRsZTsKICAgICBi
b29sIG1fdGl0bGVTZXRFeHBsaWNpdGx5OwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3RpdGxlRWxl
bWVudDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gMzY1MTcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCkBAIC0yNzQsNiArMjc1LDggQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBzZXRJc0xpbmsoIWF0
dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKHdhc0xpbmsgIT0gaXNMaW5rKCkpCiAgICAgICAg
ICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICAgIGlmIChpc0xpbmsoKSAmJiBkb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5kaWRQYXJzZUFuY2hvcihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0ciB8fAogICAgICAgICAgICAgIGF0dHItPm5h
bWUoKSA9PSB0aXRsZUF0dHIgfHwKICAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gcmVsQXR0
cikgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDM2NTE3KQorKysg
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1l
ZGlhTGlzdC5oIgpAQCAtNDgsNiArNDksNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxl
bWVudChEb2N1bWVuCiAgICAgLCBtX2FsdGVybmF0ZShmYWxzZSkKICAgICAsIG1faXNTdHlsZVNo
ZWV0KGZhbHNlKQogICAgICwgbV9pc0ljb24oZmFsc2UpCisgICAgLCBtX2lzRE5TUHJlZmV0Y2go
ZmFsc2UpCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKIHsKIH0KQEAgLTEwNyw3ICsx
MDksNyBAQCBTdHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkgY29uCiB2b2lkIEhU
TUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6
ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUs
IG1faXNJY29uKTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwg
bV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbiwgbV9pc0ROU1ByZWZldGNoKTsK
ICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZB
dHRyKSB7CiAgICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwo
YXR0ci0+dmFsdWUoKSkpLnN0cmluZygpOwpAQCAtMTI3LDE1ICsxMjksMTggQEAgdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0KIH0KIAotdm9pZCBIVE1MTGlu
a0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsLCBi
b29sJiBzdHlsZVNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24pCit2b2lkIEhUTUxM
aW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWws
IGJvb2wmIHN0eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5z
UHJlZmV0Y2gpCiB7CiAgICAgc3R5bGVTaGVldCA9IGZhbHNlOwogICAgIGljb24gPSBmYWxzZTsg
CiAgICAgYWx0ZXJuYXRlID0gZmFsc2U7CisgICAgZG5zUHJlZmV0Y2ggPSBmYWxzZTsKICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAic3R5bGVzaGVldCIpKQogICAgICAgICBzdHlsZVNo
ZWV0ID0gdHJ1ZTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJpY29uIikg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAic2hvcnRjdXQgaWNvbiIpKQogICAgICAgICBpY29u
ID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJkbnMtcHJlZmV0
Y2giKSkKKyAgICAgICAgZG5zUHJlZmV0Y2ggPSB0cnVlOwogICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHJlbCwgImFsdGVybmF0ZSBzdHlsZXNoZWV0IikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UocmVsLCAic3R5bGVzaGVldCBhbHRlcm5hdGUiKSkgewogICAgICAgICBzdHlsZVNoZWV0ID0g
dHJ1ZTsKICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKQEAgLTE2OSw2ICsxNzQsOSBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgaWYgKG1faXNJY29uICYmICFtX3VybC5p
c0VtcHR5KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnNldEljb25VUkwobV91cmwsIHR5cGUpOwog
CisgICAgaWYgKG1faXNETlNQcmVmZXRjaCAmJiAhbV91cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5jbGll
bnQoKS0+cHJlZmV0Y2hETlMoS1VSTChtX3VybCkuaG9zdCgpKTsKKwogICAgIC8vIFN0eWxlc2hl
ZXQKICAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQgd291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggPGxp
bmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNwZWNpZmllZCBtZWFu
aW5nLiAtZHdoCiAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYmIG1faXNTdHlsZVNoZWV0
ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJl
dmlzaW9uIDM2NTE3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VS
TEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICAKLSAgICBzdGF0aWMgdm9pZCB0b2tl
bml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNo
ZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24pOworICAgIHN0YXRpYyB2b2lkIHRva2Vu
aXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hl
ZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3Ry
aW5nPiYpIGNvbnN0OwogCkBAIC0xMTEsNiArMTExLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wg
bV9hbHRlcm5hdGU7CiAgICAgYm9vbCBtX2lzU3R5bGVTaGVldDsKICAgICBib29sIG1faXNJY29u
OworICAgIGJvb2wgbV9pc0ROU1ByZWZldGNoOwogICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7
CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9uIDM2NTE3KQorKysg
V2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAwLDgg
KzcwMCw5IEBAIHZvaWQgUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQogICAgICAg
ICAgICAgYm9vbCBzdHlsZVNoZWV0ID0gZmFsc2U7CiAgICAgICAgICAgICBib29sIGFsdGVybmF0
ZSA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7Ci0gICAgICAgICAgICBI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBh
bHRlcm5hdGUsIGljb24pOwotICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5bGVT
aGVldCAmJiAhYWx0ZXJuYXRlICYmICFpY29uOworICAgICAgICAgICAgYm9vbCBkbnNQcmVmZXRj
aCA9IGZhbHNlOworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJp
YnV0ZSh2YWx1ZSwgc3R5bGVTaGVldCwgYWx0ZXJuYXRlLCBpY29uLCBkbnNQcmVmZXRjaCk7Cisg
ICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5hdGUg
JiYgIWljb24gJiYgIWRuc1ByZWZldGNoOwogICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSA9
PSBjaGFyc2V0QXR0cikKICAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAzNjUxNykKKysrIFdlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxp
c3Rlbikge30KIAorICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhv
c3QpIHt9CisgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlQW5jaG9yKGNvbnN0IFN0cmluZyYgaHJl
ZiwgY29uc3QgRG9jdW1lbnQqKSB7fQorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwg
TlNDYWNoZWRVUkxSZXNwb25zZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBj
b25zdCB7IHJldHVybiByZXNwb25zZTsgfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCShyZXZpc2lvbiAzNjUxNykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1MiwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpiZWdp
bihjb25zdCBLVVJMJiB1cmwsCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNl
dHRpbmdzKCk7CiAgICAgZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5zZXRBdXRvTG9hZEltYWdlcyhz
ZXR0aW5ncyAmJiBzZXR0aW5ncy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkpOwogCisgICAg
aWYgKG1fZG9jdW1lbnRMb2FkZXIpIHsKKyAgICAgICAgU3RyaW5nIGRuc1ByZWZldGNoQ29udHJv
bCA9IG1fZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKCJYLUROUy1Q
cmVmZXRjaC1Db250cm9sIik7CisgICAgICAgIGlmICghZG5zUHJlZmV0Y2hDb250cm9sLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5wYXJzZUROU1ByZWZldGNoQ29udHJvbEhlYWRl
cihkbnNQcmVmZXRjaENvbnRyb2wpOworICAgIH0KKwogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZ
TEVTSEVFVAogICAgIEtVUkwgdXNlclN0eWxlU2hlZXQgPSBzZXR0aW5ncyA/IHNldHRpbmdzLT51
c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgOiBLVVJMKCk7CiAgICAgaWYgKCF1c2VyU3R5bGVTaGVl
dC5pc0VtcHR5KCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDM2NTE3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRQYWdlOworICAgIGNsYXNz
IERvY3VtZW50OwogICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEVsZW1lbnQ7
CiAgICAgY2xhc3MgRm9ybVN0YXRlOwpAQCAtMjAwLDYgKzIwMSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBj
b25zdCA9IDA7IC8vICJOYXZpZ2F0aW9uIiBoZXJlIG1lYW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9u
ZSBwYWdlIHRvIGFub3RoZXIgdGhhdCBlbmRzIHVwIGluIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4K
ICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRp
b24oYm9vbCBsaXN0ZW4gPSB0cnVlKSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZWZl
dGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UGFyc2VBbmNob3IoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBEb2N1bWVudCopID0gMDsKICAg
ICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCklu
ZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5n
ZUxvZwkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA4LTA5LTE1ICBDb2xsaW4gSmFja3NvbiAgPGNvbGxp
bmpAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2OTAKKwor
ICAgICAgICBBZGQgbWV0aG9kcyBmb3IgRE5TIHByZWZldGNoIHRvIEZyYW1lTG9hZGVyQ2xpZW50
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6cHJlZmV0Y2hETlMpOgorICAgICAg
ICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlkUGFyc2VBbmNob3IpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmg6CisKIDIwMDgtMDktMTMgIEFk
cmllbiBOYWRlciAgPGNhbWFyYWRldHV4QGdtYWlsLmNvbT4KIAogICAgICAgICBHdGsgYnVpbGQg
Zml4LCBub3QgcmV2aWV3ZWQuCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg5LDYgKzM4OSwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWdpc3RlckZv
ckljb25OCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6cHJlZmV0Y2hETlMoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBob3N0KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBhcnNlQW5jaG9y
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgaHJlZiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNl
dE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKIHsKICAgICAvLyB0aGlzIGlzIG9ubHkgaW50
ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFsIEFQSSBmb3IgdGhlIERPTQpJbmRl
eDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
aAkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOSBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZp
Y2F0aW9uKGJvb2wpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBT
dHJpbmcmIGhvc3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VBbmNob3IoY29uc3Qg
U3RyaW5nJiBocmVmLCBjb25zdCBEb2N1bWVudCopOworCiAgICAgICAgIHZpcnR1YWwgV2ViQ29y
ZTo6T2JqZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgV2ViQ29yZTo6S1VS
TCYgdXJsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKTsKSW5kZXg6IFdlYktpdC9t
YWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lv
biAzNjUxNykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMDgtMDktMTUgIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY5MAorCisgICAgICAgIEFkZCBt
ZXRob2RzIGZvciBETlMgcHJlZmV0Y2ggdG8gRnJhbWVMb2FkZXJDbGllbnQuCisgICAgICAgIAkK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorCiAyMDA4LTA5LTE2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5MCw2ICsxOTAsOSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
Rm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3Rlbik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHJl
ZmV0Y2hETlMoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBob3N0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUGFyc2VBbmNob3IoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBocmVmLCBjb25zdCBXZWJDb3Jl
OjpEb2N1bWVudCopOworCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKICAgICB2aXJ0dWFs
IGpvYmplY3QgamF2YUFwcGxldChOU1ZpZXcqKTsKICNlbmRpZgpJbmRleDogV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAz
NjUxNykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvTG9h
ZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxh
dGZvcm1TdHJpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgpAQCAtMTQ3
OSw2ICsxNDgwLDE2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWMK
ICAgICBbW21fd2ViRnJhbWUuZ2V0KCkgd2ViVmlld10gX3JlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbjpsaXN0ZW5dOwogfQogCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpwcmVmZXRjaERO
Uyhjb25zdCBTdHJpbmcmIGhvc3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkUGFyc2VBbmNob3IoY29uc3QgU3RyaW5nJiBocmVm
LCBjb25zdCBEb2N1bWVudCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0CiB7
CiAgICAgV2ViUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gW1ttX3dlYkZyYW1lLmdldCgpIHdl
YlZpZXddIHByZWZlcmVuY2VzXTsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDktMTUgIENv
bGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDY5MAorCisgICAgICAgIEFkZCBtZXRob2RzIGZvciBETlMgcHJlZmV0Y2gg
dG8gRnJhbWVMb2FkZXJDbGllbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6
OnByZWZldGNoRE5TKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRp
ZFBhcnNlQW5jaG9yKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0Lmg6CisKIDIwMDgtMDktMTUgIEVsaSBGaWRsZXIgIDxlbGlAc3RhaWtvcy5uZXQ+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAzNjUxNykKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQzLDYgKzY0MywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZ2lzdGVy
Rm9ySWNvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpwcmVmZXRjaEROUyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhvc3QpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaWRQYXJzZUFu
Y2hvcihjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGhyZWYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsKQogewogICAg
IFFXZWJIaXN0b3J5SW50ZXJmYWNlICpoaXN0b3J5ID0gUVdlYkhpc3RvcnlJbnRlcmZhY2U6OmRl
ZmF1bHRJbnRlcmZhY2UoKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMzY1MTcpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQ
YXJzZUFuY2hvcihjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IERvY3VtZW50Kik7CisKICAgICAg
ICAgUVN0cmluZyBjaG9vc2VGaWxlKGNvbnN0IFFTdHJpbmcmIG9sZEZpbGUpOwogCiAgICAgcHJp
dmF0ZToKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjUxNykKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDktMTUgIENvbGxpbiBKYWNrc29u
ICA8Y29sbGluakB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZp
c3RvLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDY5MAorCisgICAgICAgIEFkZCBtZXRob2RzIGZvciBETlMgcHJlZmV0Y2ggdG8gRnJhbWVMb2Fk
ZXJDbGllbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cHJlZmV0Y2hETlMpOgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBhcnNlQW5jaG9yKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oOgorCiAyMDA4LTA5LTE1ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIsIEJldGggRGFraW4KSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAzNjUxNykKKysrIFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSGlzdG9yeUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5QYWNr
YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CkBAIC03MjAsNiArNzIxLDE2
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVQKICAgICBtX3BsdWdp
blZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAordm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpZFBhcnNlQW5jaG9yKGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgRG9jdW1lbnQqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIFdlYkhpc3RvcnkqIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojp3ZWJIaXN0b3J5KCkgY29uc3QKIHsKICAgICBpZiAobV93ZWJGcmFtZSAhPSBtX3dlYkZy
YW1lLT53ZWJWaWV3KCktPnRvcExldmVsRnJhbWUoKSkKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDM2NTE3KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6V2lkZ2V0KiBjcmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6
OkVsZW1lbnQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0
cmluZz4mLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiYsIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYsIGJvb2wgbG9hZE1hbnVhbGx5KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRh
VG9QbHVnaW4oV2ViQ29yZTo6V2lkZ2V0KiBwbHVnaW5XaWRnZXQpOwogCisgICAgdmlydHVhbCB2
b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFBhcnNlQW5jaG9yKGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgRG9jdW1lbnQqKTsKKwogcHJv
dGVjdGVkOgogICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KFdlYkZyYW1lKik7CiAgICAgfldlYkZy
YW1lTG9hZGVyQ2xpZW50KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjUxNykKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA4LTA5LTE1
ICBDb2xsaW4gSmFja3NvbiAgPGNvbGxpbmpAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2OTAKKworICAgICAgICBBZGQgdGVzdCBmb3IgRE5TIHByZWZldGNo
IGNvbnRyb2wuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRy
b2wtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL21pc2MvZG5zLXBy
ZWZldGNoLWNvbnRyb2wuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9taXNjL3Jl
c291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA6IEFkZGVkLgorCiAyMDA4LTA5LTE2ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNo
LWNvbnRyb2wtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1RoaXMgaXMgYSB0ZXN0IG9mIERO
UyBwcmVmZXRjaCBjb250cm9sLiBJdCdzIGNvbnNpZGVyZWQgYSBwYXNzIGlmIGl0IGRvZXNuJ3Qg
Y3Jhc2guIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBtYW51YWwgdGVzdCBvZiBETlMgcHJlZmV0
Y2ggdXNpbmcgYSBuZXR3b3JraW5nIG1vbml0b3JpbmcgdG9vbC4KK0Jyb3dzZXJzIE1BWSBkbyBh
IEROUyBwcmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxpbmtzOgorCisgICAgICAgICAgICAgIAor
QnJvd3NlcnMgU0hPVUxEIE5PVCBkbyBhIEROUyBsb29rdXAgZm9yIHRoZSBmb2xsb3dpbmcgbGlu
a3MgdW50aWwgdGhleSBhcmUgY2xpY2tlZDoKKworICAgICAgICAgIApJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNo
LWNvbnRyb2wuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorPGh0bWw+Cis8c3R5
bGU+CitpZnJhbWUKK3sgCisgICAgaGVpZ2h0OiA2MHB4OworICAgIHdpZHRoOiAyMDBweDsKK30K
Kzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAg
ICBmdW5jdGlvbiBlbWl0RnJhbWVXaXRoQ29udGVudHMoY29udGVudHMpIHsKKyAgICAgICAgZG9j
dW1lbnQud3JpdGUoIjxpZnJhbWUgc3JjPVwiZGF0YTp0ZXh0L2h0bWwsIiArIGNvbnRlbnRzICsg
IlwiPjwvaWZyYW1lPiIpOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRSYW5kb21Ib3N0KCkgewor
ICAgICAgICByZXR1cm4gInd3dy4iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAw
MDAwMDApICsgIi5pbnZhbGlkIjsKKyAgICB9CisgICAgZnVuY3Rpb24gZW1pdEZyYW1lRm9yU2No
ZW1lKHNjaGVtZSkgeworICAgICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhvc3QoKTsKKyAgICAg
ICAgdmFyIGFuY2hvciA9ICI8YSBocmVmPSciICsgc2NoZW1lICsgIjovLyIgKyBob3N0ICsgIic+
IiArIGhvc3QgKyAiPC9hPiI7CisgICAgICAgIGVtaXRGcmFtZVdpdGhDb250ZW50cyhhbmNob3Ip
OworICAgIH0KKyAgICBmdW5jdGlvbiBlbWl0RnJhbWVGb3JNYW51YWxETlNQcmVmZXRjaChkbnNQ
cmVmZXRjaENvbnRyb2wpIHsKKyAgICAgICAgdmFyIGhvc3QgPSBnZXRSYW5kb21Ib3N0KCk7Cisg
ICAgICAgIHZhciBjb250ZW50cyA9ICI8bGluayByZWw9J2Rucy1wcmVmZXRjaCcgaHJlZj0nLy8i
ICsgaG9zdCArICInPiIgKyBob3N0OworICAgICAgICBpZiAoZG5zUHJlZmV0Y2hDb250cm9sKSB7
CisgICAgICAgICAgICBjb250ZW50cyA9ICI8bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRj
aC1jb250cm9sJyBjb250ZW50PSciICsgZG5zUHJlZmV0Y2hDb250cm9sICsgIic+IiArIGNvbnRl
bnRzOworICAgICAgICB9CisgICAgICAgIGVtaXRGcmFtZVdpdGhDb250ZW50cyhjb250ZW50cyk7
CisgICAgfQorPC9zY3JpcHQ+Cis8Ym9keT4KK1RoaXMgaXMgYSB0ZXN0IG9mIEROUyBwcmVmZXRj
aCBjb250cm9sLiBJdCdzIGNvbnNpZGVyZWQgYSBwYXNzIGlmIGl0IGRvZXNuJ3QgY3Jhc2guIEl0
IGNhbiBhbHNvIGJlIHVzZWQgYXMgCithIG1hbnVhbCB0ZXN0IG9mIEROUyBwcmVmZXRjaCB1c2lu
ZyBhIG5ldHdvcmtpbmcgbW9uaXRvcmluZyB0b29sLgorCis8cD5Ccm93c2VycyBNQVkgZG8gYSBE
TlMgcHJlZmV0Y2ggb24gdGhlIGZvbGxvd2luZyBsaW5rczo8L3A+CisKKzxkaXY+CisgIDxzY3Jp
cHQ+ZW1pdEZyYW1lRm9yTWFudWFsRE5TUHJlZmV0Y2goKTwvc2NyaXB0PgorICA8c2NyaXB0PmVt
aXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKCJvZmYiKTwvc2NyaXB0PgorICA8c2NyaXB0PmVt
aXRGcmFtZUZvclNjaGVtZSgiaHR0cCIpPC9zY3JpcHQ+CisgIDxzY3JpcHQ+ZW1pdEZyYW1lRm9y
U2NoZW1lKCJodHRwcyIpPC9zY3JpcHQ+CisgIDxzY3JpcHQ+ZW1pdEZyYW1lRm9yU2NoZW1lKCJm
dHAiKTwvc2NyaXB0PgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250
cm9sLnBocCI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZG5zLXByZWZldGNo
LWNvbnRyb2wucGhwP3ZhbHVlPW9uIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9Imh0dHBzOi8v
MTI3LjAuMC4xOjg0NDMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwP3Zh
bHVlPW9uIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLDxpZnJhbWUg
c3JjPSdodHRwOi8vMTI3LjAuMC4xOjgwMDAvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNv
bnRyb2wucGhwJz48L2lmcmFtZT4iPjwvaWZyYW1lPgorPC9kaXY+CisKKzxwIHN0eWxlPSdjbGVh
cjogbGVmdCc+QnJvd3NlcnMgU0hPVUxEIE5PVCBkbyBhIEROUyBsb29rdXAgZm9yIHRoZSBmb2xs
b3dpbmcgbGlua3MgdW50aWwgdGhleSBhcmUgY2xpY2tlZDo8L3A+CisKKzxkaXY+CisgIDxpZnJh
bWUgc3JjPSJyZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwP3ZhbHVlPW9mZiI+PC9p
ZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhw
P3ZhbHVlPWZvbyI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwczovLzEyNy4wLjAuMTo4
NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocCI+PC9pZnJhbWU+Cisg
IDxpZnJhbWUgc3JjPSJodHRwczovLzEyNy4wLjAuMTo4NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1w
cmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1vZmYiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0i
aHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJv
bC5waHA/dmFsdWU9Zm9vIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1s
LDxtZXRhIGh0dHAtZXF1aXY9J3gtZG5zLXByZWZldGNoLWNvbnRyb2wnIHZhbHVlPSdvZmYnPjxp
ZnJhbWUgc3JjPSdodHRwOi8vMTI3LjAuMC4xOjgwMDAvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZl
dGNoLWNvbnRyb2wucGhwJz48L2lmcmFtZT4iPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0iZGF0
YTp0ZXh0L2h0bWwsPG1ldGEgaHR0cC1lcXVpdj0neC1kbnMtcHJlZmV0Y2gtY29udHJvbCcgdmFs
dWU9J29uJz48aWZyYW1lIHNyYz0naHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9taXNjL3Jlc291cmNl
cy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAnPjwvaWZyYW1lPiI+PC9pZnJhbWU+Cis8L2Rpdj4K
KworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jl
c291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Rucy1w
cmVmZXRjaC1jb250cm9sLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPD9waHAK
KyAgaWYgKCRfR0VUWyd2YWx1ZSddID09ICdvZmYnKQorICAgIGhlYWRlcignWC1ETlMtUHJlZmV0
Y2gtQ29udHJvbDogb2ZmJyk7CisgIGVsc2UgaWYgKCRfR0VUWyd2YWx1ZSddID09ICdvbicpCisg
ICAgaGVhZGVyKCdYLUROUy1QcmVmZXRjaC1Db250cm9sOiBvbicpOworICBlbHNlIGlmICgkX0dF
VFsndmFsdWUnXSA9PSAnZm9vJykKKyAgICBoZWFkZXIoJ1gtRE5TLVByZWZldGNoLUNvbnRyb2w6
IGZvbycpOworCiskZmFrZV9kb21haW4gPSAid3d3LiIgLiByYW5kKCkgLiAiLmludmFsaWQiOwor
Pz4KKzxodG1sPgorPGJvZHk+Cis8YSBocmVmPSdodHRwOi8vPD9waHAgZWNobyAkZmFrZV9kb21h
aW4gPz4vJz48P3BocCBlY2hvICRmYWtlX2RvbWFpbiA/PjwvYT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23504</attachid>
            <date>2008-09-17 11:08:59 -0700</date>
            <delta_ts>2008-09-18 11:57:00 -0700</delta_ts>
            <desc>Updated patch more comments from Antti</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>29102</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjU0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDgtMDktMTcgIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC5odG1sCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisgICAgICAg
IAorICAgICAgICBOb3RpZnkgdGhlIEZyYW1lTG9hZGVyQ2xpZW50IGFib3V0IGh5cGVybGlua3Mg
YW5kIAorICAgICAgICA8bGluayByZWw9ImRucy1wcmVmZXRjaCI+IHRhZ3MgdGhhdCBhcmUgZW5j
b3VudGVyZWQgc28gdGhhdCBpdCAKKyAgICAgICAgY2FuIHNwZWN1bGF0aXZlbHkgcmVzb2x2ZSBo
b3N0bmFtZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5p
dEROU1ByZWZldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwYXJzZUROU1ByZWZl
dGNoQ29udHJvbEhlYWRlcik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aXNETlNQcmVmZXRjaEVuYWJsZWQpOgorICAgICAgICAqIGh0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvUHJlbG9hZFNj
YW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRy
aWJ1dGUpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKToKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJlZ2lu
KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKwogMjAwOC0wOS0xNyAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM2NTQyKQorKysgV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNiArODY1LDcgQEAgX19a
Tks3V2ViQ29yZTlTZWxlY3Rpb24yM2lzQ29udGVudFJpY2hseQogX19aTks3V2ViQ29yZTlTZWxl
Y3Rpb243dG9SYW5nZUV2CiBfX1pOSzdXZWJDb3JlOVRpbWVyQmFzZThpc0FjdGl2ZUV2CiBfX1pU
Vk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50RQorX19aTjdXZWJDb3JlMjBMb2dOb3RZZXRJbXBsZW1l
bnRlZEUKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5z
aXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNjU0MikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzcxLDYgKzMzNzEsNyBAQAogCQlCMkNCOTI2MjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZH
RWxlbWVudEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5j
ZS5tbSAqLzsgfTsKIAkJQjJDQjkyNjMwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0
LmggKi87IH07CiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3Qu
bW0gKi87IH07CisJCUIyQ0M5MUYxMEU3RTEzNDcwMEY5OURCQyAvKiBOb3RJbXBsZW1lbnRlZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQzkxRjAw
RTdFMTM0NzAwRjk5REJDIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJDQ0VDNDcwQzZDQTlGMTAwNkE1NDI0IC8q
IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5jcHAgKi87IH07CiAJCUIyQ0NFQzQ4MEM2Q0E5RjEwMDZBNTQy
NCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQ0VDNDYwQzZDQTlGMTAwNkE1NDI0IC8qIFJlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmggKi87IH07CiAJCUIyRDNGQzhBMEMyMjEyQ0IwMENGMzYx
OCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEM0ZDODkwQzIyMTJDQjAwQ0YzNjE4IC8qIEpTU1ZH
VHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAgKi87IH07CkBAIC03ODExLDYgKzc4MTIsNyBAQAogCQlC
MkNCOTI1RTBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5j
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJDQjkyNUYwQjVCREEwMjAwOUJB
QTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQjJDQzkxRjAwRTdFMTM0NzAwRjk5REJDIC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQ0NFQzQ1MEM2Q0E5RjEwMDZBNTQyNCAvKiBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkNDRUM0NjBDNkNBOUYxMDA2QTU0MjQgLyogUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRDNGQzg5MEMyMjEy
Q0IwMENGMzYxOCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjg1NSw2ICsxMjg1Nyw3IEBACiAJCQkJQTgy
MzlERkYwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuaCAqLywKIAkJCQlCQzc3MkM0QzBDNEVC
MzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5jcHAgKi8sCiAJCQkJQkM3NzJDNEQwQzRF
QjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLywKKwkJCQlCMkNDOTFGMDBFN0Ux
MzQ3MDBGOTlEQkMgLyogTm90SW1wbGVtZW50ZWQuaCAqLywKIAkJCQk0QjI3MDhDNTBBRjE5RUU0
MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oICovLAogCQkJCTkzNUM0NzY2MDlBQzRENDMwMEE2QUFC
NCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQk5MzI4NzFCRjBCMjBERUI3MDA0
OTAzNUEgLyogUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCAqLywKQEAgLTE1NTk3LDYgKzE1NjAw
LDcgQEAKIAkJCQlCQzhCODUzRTBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAvKiBTY3JvbGxi
YXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4NEIxNDEwRTgwQTE2RDAwODQxRDZEIC8q
IFNjcm9sbGJhck1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJDQzkxRjEwRTdFMTM0NzAwRjk5
REJDIC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDM2NTQyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTEsNiArMzUxLDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9v
bCBpcwogICAgIG1fb3Zlck1pbmltdW1MYXlvdXRUaHJlc2hvbGQgPSBmYWxzZTsKICAgICAKICAg
ICBpbml0U2VjdXJpdHlDb250ZXh0KCk7CisgICAgaW5pdEROU1ByZWZldGNoKCk7CiAKICAgICBz
dGF0aWMgaW50IGRvY0lEID0gMDsKICAgICBtX2RvY0lEID0gZG9jSUQrKzsKQEAgLTE5NTIsNiAr
MTk1Myw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29uc3QgU3QKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KHRoaXMpLT5zZXRDb29raWUoY29udGVu
dCk7CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtbGFu
Z3VhZ2UiKSkKICAgICAgICAgc2V0Q29udGVudExhbmd1YWdlKGNvbnRlbnQpOworICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAieC1kbnMtcHJlZmV0Y2gtY29udHJvbCIpKQor
ICAgICAgICBwYXJzZUROU1ByZWZldGNoQ29udHJvbEhlYWRlcihjb250ZW50KTsKIH0KIAogTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBEb2N1bWVudDo6cHJlcGFyZU1vdXNlRXZlbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEludFBvaW50JiBkb2N1bWVudFBvaW50
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQpAQCAtNDAzMCw2ICs0MDMzLDcgQEAg
dm9pZCBEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiB2b2lkIERvY3VtZW50OjpzZXRT
ZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgbV9z
ZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOworICAgIGluaXRETlNQcmVmZXRjaCgpOwog
fQogCiB2b2lkIERvY3VtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKCkKQEAgLTQzMTYs
NCArNDMyMCwyNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0NhbnZhCiAg
ICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKIH0KIAordm9pZCBEb2N1bWVudDo6aW5pdEROU1ByZWZl
dGNoKCkKK3sKKyAgICBtX2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IGZhbHNl
OworICAgIG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSBzZWN1cml0eU9yaWdpbigpLT5wcm90b2Nv
bCgpID09ICJodHRwIjsKKworICAgIC8vIEluaGVyaXQgRE5TIHByZWZldGNoIG9wdC1vdXQgZnJv
bSBwYXJlbnQgZnJhbWUgICAgCisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1
bWVudCgpKSB7CisgICAgICAgIGlmICghcGFyZW50LT5pc0ROU1ByZWZldGNoRW5hYmxlZCgpKQor
ICAgICAgICAgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5n
JiBkbnNQcmVmZXRjaENvbnRyb2wpCit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRuc1By
ZWZldGNoQ29udHJvbCwgIm9uIikgJiYgIW1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZl
dGNoKSB7CisgICAgICAgIG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAg
IG1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZldGNoID0gdHJ1ZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNjU0MikKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2Miw2ICs3NjIsMTAgQEAgcHVibGlj
OgogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJp
bmcmIG5hbWUpOwogICAgIAorICAgIGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkOyB9CisgICAgdm9pZCBpbml0RE5TUHJlZmV0
Y2goKTsKKyAgICB2b2lkIHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnN0IFN0cmlu
ZyYpOworCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwog
CkBAIC04NjYsNiArODcwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVy
UnVsZXM7CiAgICAgYm9vbCBtX2dvdG9BbmNob3JOZWVkZWRBZnRlclN0eWxlc2hlZXRzTG9hZDsK
IAorICAgIGJvb2wgbV9pc0ROU1ByZWZldGNoRW5hYmxlZDsKKyAgICBib29sIG1faGF2ZUV4cGxp
Y2l0bHlEaXNhYmxlZEROU1ByZWZldGNoOworCiAgICAgU3RyaW5nIG1fdGl0bGU7CiAgICAgYm9v
bCBtX3RpdGxlU2V0RXhwbGljaXRseTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1l
bnQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDM2NTQyKQor
KysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgpAQCAtMjc0LDYgKzI3NSwxMyBAQCB2b2lkIEhU
TUxBbmNob3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgIHNldElzTGluayghYXR0
ci0+aXNOdWxsKCkpOwogICAgICAgICBpZiAod2FzTGluayAhPSBpc0xpbmsoKSkKICAgICAgICAg
ICAgIHNldENoYW5nZWQoKTsKKyAgICAgICAgaWYgKGlzTGluaygpICYmIGRvY3VtZW50KCktPmZy
YW1lKCkgJiYgZG9jdW1lbnQoKS0+aXNETlNQcmVmZXRjaEVuYWJsZWQoKSkgeworICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5z
dGFydHNXaXRoKCJodHRwOiIpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoImh0dHBzOiIpIHx8IHZhbHVl
LnN0YXJ0c1dpdGgoIi8vIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaG9zdCA9IGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKS5ob3N0KCk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5wcmVmZXRjaEROUyhob3N0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyIHx8CiAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciB8fAogICAg
ICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtF
bGVtZW50LmNwcAkocmV2aXNpb24gMzY1NDIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBAIC00OCw2ICs0OSw3
IEBAIEhUTUxMaW5rRWxlbWVudDo6SFRNTExpbmtFbGVtZW50KERvY3VtZW4KICAgICAsIG1fYWx0
ZXJuYXRlKGZhbHNlKQogICAgICwgbV9pc1N0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX2lzSWNv
bihmYWxzZSkKKyAgICAsIG1faXNETlNQcmVmZXRjaChmYWxzZSkKICAgICAsIG1fY3JlYXRlZEJ5
UGFyc2VyKGZhbHNlKQogewogfQpAQCAtMTA3LDcgKzEwOSw3IEBAIFN0eWxlU2hlZXQqIEhUTUxM
aW5rRWxlbWVudDo6c2hlZXQoKSBjb24KIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSByZWxBdHRyKSB7Ci0gICAgICAgIHRva2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVl
KCksIG1faXNTdHlsZVNoZWV0LCBtX2FsdGVybmF0ZSwgbV9pc0ljb24pOworICAgICAgICB0b2tl
bml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5h
dGUsIG1faXNJY29uLCBtX2lzRE5TUHJlZmV0Y2gpOwogICAgICAgICBwcm9jZXNzKCk7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKICAgICAgICAgbV91cmwgPSBk
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1ZSgpKSkuc3RyaW5nKCk7
CkBAIC0xMjcsMTUgKzEyOSwxOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1CiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwsIGJvb2wmIHN0eWxlU2hlZXQsIGJvb2wmIGFs
dGVybmF0ZSwgYm9vbCYgaWNvbikKK3ZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0
dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCwgYm9vbCYgc3R5bGVTaGVldCwgYm9vbCYg
YWx0ZXJuYXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCkKIHsKICAgICBzdHlsZVNo
ZWV0ID0gZmFsc2U7CiAgICAgaWNvbiA9IGZhbHNlOyAKICAgICBhbHRlcm5hdGUgPSBmYWxzZTsK
KyAgICBkbnNQcmVmZXRjaCA9IGZhbHNlOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWws
ICJzdHlsZXNoZWV0IikpCiAgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwogICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgImljb24iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShyZWws
ICJzaG9ydGN1dCBpY29uIikpCiAgICAgICAgIGljb24gPSB0cnVlOworICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHJlbCwgImRucy1wcmVmZXRjaCIpKQorICAgICAgICBkbnNQcmVmZXRj
aCA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiYWx0ZXJuYXRl
IHN0eWxlc2hlZXQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzdHlsZXNoZWV0IGFsdGVy
bmF0ZSIpKSB7CiAgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwogICAgICAgICBhbHRlcm5hdGUg
PSB0cnVlOwpAQCAtMTY5LDYgKzE3NCw5IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNz
KCkKICAgICBpZiAobV9pc0ljb24gJiYgIW1fdXJsLmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1l
bnQoKS0+c2V0SWNvblVSTChtX3VybCwgdHlwZSk7CiAKKyAgICBpZiAobV9pc0ROU1ByZWZldGNo
ICYmICFtX3VybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5wcmVmZXRjaEROUyhLVVJMKG1f
dXJsKS5ob3N0KCkpOworCiAgICAgLy8gU3R5bGVzaGVldAogICAgIC8vIFRoaXMgd2FzIGJ1Z2d5
IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9ImFsdGVybmF0ZSI+LCB3aGlj
aCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1kd2gKICAgICBpZiAobV9kaXNh
YmxlZFN0YXRlICE9IDIgJiYgbV9pc1N0eWxlU2hlZXQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkg
ewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24gMzY1NDIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNv
bnN0OwogICAgIAotICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9v
bCYgaWNvbik7CisgICAgc3RhdGljIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgYm9vbCYgc3R5bGVzaGVldCwgYm9vbCYgYWx0ZXJuYXRlLCBib29s
JiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVz
b3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKQEAgLTExMSw2
ICsxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2FsdGVybmF0ZTsKICAgICBib29sIG1f
aXNTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9pc0ljb247CisgICAgYm9vbCBtX2lzRE5TUHJlZmV0
Y2g7CiAgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9QcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ByZWxvYWRT
Y2FubmVyLmNwcAkocmV2aXNpb24gMzY1NDIpCisrKyBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5u
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsOCArNzAwLDkgQEAgdm9pZCBQcmVsb2FkU2Nh
bm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCiAgICAgICAgICAgICBib29sIHN0eWxlU2hlZXQgPSBm
YWxzZTsKICAgICAgICAgICAgIGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7CiAgICAgICAgICAgICBi
b29sIGljb24gPSBmYWxzZTsKLSAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVS
ZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFsdGVybmF0ZSwgaWNvbik7Ci0gICAgICAg
ICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5hdGUgJiYgIWlj
b247CisgICAgICAgICAgICBib29sIGRuc1ByZWZldGNoID0gZmFsc2U7CisgICAgICAgICAgICBI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBh
bHRlcm5hdGUsIGljb24sIGRuc1ByZWZldGNoKTsKKyAgICAgICAgICAgIG1fbGlua0lzU3R5bGVT
aGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVybmF0ZSAmJiAhaWNvbiAmJiAhZG5zUHJlZmV0Y2g7
CiAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlID09IGNoYXJzZXRBdHRyKQogICAgICAgICAg
ICAgbV9jaGFyc2V0ID0gdmFsdWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJl
dmlzaW9uIDM2NTQyKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2MSw2ICsyNjEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuKSB7fQogCisgICAgdmlydHVhbCB2
b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCkge30KKwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICB2aXJ0dWFsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHdpbGxDYWNoZVJlc3BvbnNlKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBOU0NhY2hlZFVSTFJlc3Bv
bnNlKiByZXNwb25zZSkgY29uc3QgeyByZXR1cm4gcmVzcG9uc2U7IH0KICNlbmRpZgpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMzY1NDIpCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIsMTIgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6YmVnaW4oY29uc3QgS1VSTCYgdXJsLAogICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwogICAgIGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+c2V0
QXV0b0xvYWRJbWFnZXMoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseSgpKTsKIAorICAgIGlmIChtX2RvY3VtZW50TG9hZGVyKSB7CisgICAgICAgIFN0cmluZyBk
bnNQcmVmZXRjaENvbnRyb2wgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZCgiWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCIpOworICAgICAgICBpZiAoIWRuc1ByZWZl
dGNoQ29udHJvbC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+cGFyc2VETlNQcmVm
ZXRjaENvbnRyb2xIZWFkZXIoZG5zUHJlZmV0Y2hDb250cm9sKTsKKyAgICB9CisKICNpZiBGUkFN
RV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBLVVJMIHVzZXJTdHlsZVNoZWV0ID0gc2V0dGlu
Z3MgPyBzZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIDogS1VSTCgpOwogICAgIGlm
ICghdXNlclN0eWxlU2hlZXQuaXNFbXB0eSgpKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNs
aWVudC5oCShyZXZpc2lvbiAzNjU0MikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29u
c3QgPSAwOyAvLyAiTmF2aWdhdGlvbiIgaGVyZSBtZWFucyBhIHRyYW5zaXRpb24gZnJvbSBvbmUg
cGFnZSB0byBhbm90aGVyIHRoYXQgZW5kcyB1cCBpbiB0aGUgYmFjay9mb3J3YXJkIGxpc3QuCiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9u
KGJvb2wgbGlzdGVuID0gdHJ1ZSkgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aEROUyhjb25zdCBTdHJpbmcmIGhvc3QpID0gMDsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFD
KQogI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMzY1NDIpCisr
KyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDA4LTA5LTE3ICBDb2xsaW4gSmFja3NvbiAgPGNvbGxpbmpAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2OTAKKworICAgICAgICBBZGQgbWV0aG9kcyBmb3Ig
RE5TIHByZWZldGNoIHRvIEZyYW1lTG9hZGVyQ2xpZW50LgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRlckNsaWVudDo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmg6CisKIDIwMDgtMDktMTYgIEFscCBUb2tlciAgPGFscEBudWFudGku
Y29tPgogCiAgICAgICAgIFN1Z2dlc3RlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlz
aW9uIDM2NTQyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OSw2ICszODksMTEgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6cmVnaXN0ZXJGb3JJY29uTgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgaG9zdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpCiB7CiAgICAgLy8gdGhpcyBp
cyBvbmx5IGludGVyZXN0aW5nIG9uY2Ugd2UgcHJvdmlkZSBhbiBleHRlcm5hbCBBUEkgZm9yIHRo
ZSBET00KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmgJKHJldmlzaW9uIDM2NTQyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDgg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9y
SWNvbk5vdGlmaWNhdGlvbihib29sKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hE
TlMoY29uc3QgU3RyaW5nJiBob3N0KTsKKwogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6Ok9iamVj
dENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzY1NDIp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDA4LTA5LTE3ICBDb2xsaW4gSmFja3NvbiAgPGNvbGxpbmpAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2OTAKKworICAgICAgICBBZGQgbWV0aG9kcyBm
b3IgRE5TIHByZWZldGNoIHRvIEZyYW1lTG9hZGVyQ2xpZW50LgorICAgICAgICAJCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKwogMjAwOC0wOS0xNiAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENh
bWVyb24gWndhcmljaC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDM2NTQyKQorKysgV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAs
NiArMTkwLDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25O
b3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pOwogCisgICAgdmlydHVhbCB2b2lkIHByZWZldGNoRE5T
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgaG9zdCk7CisKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJ
REdFKQogICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyopOwogI2VuZGlmCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0JKHJldmlzaW9uIDM2NTQyKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9NSU1F
VHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZUVycm9yLmg+CkBAIC0xNDc5LDYgKzE0ODAsMTEgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6cmVnaXN0ZXJGb3JJYwogICAgIFtbbV93ZWJGcmFtZS5nZXQoKSB3ZWJWaWV3XSBfcmVnaXN0
ZXJGb3JJY29uTm90aWZpY2F0aW9uOmxpc3Rlbl07CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3JtRmlyc3RO
YXZpZ2F0aW9uKCkgY29uc3QKIHsKICAgICBXZWJQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBb
W21fd2ViRnJhbWUuZ2V0KCkgd2ViVmlld10gcHJlZmVyZW5jZXNdOwpJbmRleDogV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAz
NjU0MikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOC0wOS0xNyAgQ29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRkIG1ldGhv
ZHMgZm9yIEROUyBwcmVmZXRjaCB0byBGcmFtZUxvYWRlckNsaWVudC4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKwogMjAwOC0wOS0xNiAgQWxwIFRva2VyICA8YWxw
QG51YW50aS5jb20+CiAKICAgICAgICAgUHJvc3BlY3RpdmUgUXQgYnVpbGQgZml4LiBTY3JvbGxC
YXIuaCAtPiBTY3JvbGxiYXIuaApJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMzY1NDIpCisrKyBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0Myw2ICs2NDMsMTEgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpyZWdpc3RlckZvcklj
bwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
cHJlZmV0Y2hETlMoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBob3N0KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6dXBkYXRlR2xvYmFsSGlz
dG9yeShjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwpCiB7CiAgICAgUVdlYkhpc3RvcnlJbnRlcmZh
Y2UgKmhpc3RvcnkgPSBRV2ViSGlzdG9yeUludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFjZSgpOwpJ
bmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5o
CShyZXZpc2lvbiAzNjU0MikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbihib29sKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3Ry
aW5nJiBob3N0KTsKKwogICAgICAgICBRU3RyaW5nIGNob29zZUZpbGUoY29uc3QgUVN0cmluZyYg
b2xkRmlsZSk7CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NTQyKQorKysgV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0w
OS0xNyAgQ29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRkIG1ldGhvZHMgZm9yIEROUyBw
cmVmZXRjaCB0byBGcmFtZUxvYWRlckNsaWVudC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpwcmVmZXRjaEROUyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuaDoKKwogMjAwOC0wOS0xNiAgQWxwIFRva2VyICA8YWxwQG51YW50aS5jb20+CiAKICAg
ICAgICAgU3VnZ2VzdGVkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMzY1NDIp
CisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZy
YW1lT3duZXJFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1
Z2luUGFja2FnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luVmlldy5oPgpAQCAtNzIwLDYg
KzcyMSwxMSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUCiAgICAg
bV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdldCk7CiB9
CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYg
aG9zdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBXZWJIaXN0b3J5KiBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6d2ViSGlzdG9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fd2ViRnJhbWUg
IT0gbV93ZWJGcmFtZS0+d2ViVmlldygpLT50b3BMZXZlbEZyYW1lKCkpCkluZGV4OiBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biAzNjU0MikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OldpZGdldCogY3JlYXRlUGx1Z2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBXZWJDb3JlOjpFbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSk7CiAgICAgdmlydHVhbCB2b2lkIHJl
ZGlyZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KTsKIAorICAg
IHZpcnR1YWwgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3QpOworCiBwcm90ZWN0
ZWQ6CiAgICAgV2ViRnJhbWVMb2FkZXJDbGllbnQoV2ViRnJhbWUqKTsKICAgICB+V2ViRnJhbWVM
b2FkZXJDbGllbnQoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NTQyKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDktMTcgIENv
bGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDY5MAorCisgICAgICAgIEFkZCB0ZXN0IGZvciBETlMgcHJlZmV0Y2ggY29u
dHJvbC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0
Y2gtY29udHJvbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL21pc2MvcmVzb3Vy
Y2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocDogQWRkZWQuCisKIDIwMDgtMDktMTYgIENhbWVy
b24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mv
ZG5zLXByZWZldGNoLWNvbnRyb2wtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNv
bnRyb2wtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1RoaXMgaXMg
YSB0ZXN0IG9mIEROUyBwcmVmZXRjaCBjb250cm9sLiBJdCdzIGNvbnNpZGVyZWQgYSBwYXNzIGlm
IGl0IGRvZXNuJ3QgY3Jhc2guIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBtYW51YWwgdGVzdCBv
ZiBETlMgcHJlZmV0Y2ggdXNpbmcgYSBuZXR3b3JraW5nIG1vbml0b3JpbmcgdG9vbC4KK0Jyb3dz
ZXJzIE1BWSBkbyBhIEROUyBwcmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxpbmtzOgorCisgICAg
ICAgICAgICAgIAorQnJvd3NlcnMgU0hPVUxEIE5PVCBkbyBhIEROUyBsb29rdXAgZm9yIHRoZSBm
b2xsb3dpbmcgbGlua3MgdW50aWwgdGhleSBhcmUgY2xpY2tlZDoKKworICAgICAgICAgIApJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1j
b250cm9sLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2Mv
ZG5zLXByZWZldGNoLWNvbnRyb2wuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAor
PGh0bWw+Cis8c3R5bGU+CitpZnJhbWUKK3sgCisgICAgaGVpZ2h0OiA2MHB4OworICAgIHdpZHRo
OiAyMDBweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIH0KKyAgICBmdW5jdGlvbiBlbWl0RnJhbWVXaXRoQ29udGVudHMoY29udGVudHMpIHsK
KyAgICAgICAgZG9jdW1lbnQud3JpdGUoIjxpZnJhbWUgc3JjPVwiZGF0YTp0ZXh0L2h0bWwsIiAr
IGNvbnRlbnRzICsgIlwiPjwvaWZyYW1lPiIpOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRSYW5k
b21Ib3N0KCkgeworICAgICAgICByZXR1cm4gInd3dy4iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRv
bSgpICogMTAwMDAwMDAwMDApICsgIi5pbnZhbGlkIjsKKyAgICB9CisgICAgZnVuY3Rpb24gZW1p
dEZyYW1lRm9yU2NoZW1lKHNjaGVtZSkgeworICAgICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhv
c3QoKTsKKyAgICAgICAgdmFyIGNvbnRlbnRzID0gIjxtZXRhIGh0dHAtZXF1aXY9J3gtZG5zLXBy
ZWZldGNoLWNvbnRyb2wnIGNvbnRlbnQ9J29uJz4iOworICAgICAgICBjb250ZW50cyArPSAiPGEg
aHJlZj0nIiArIHNjaGVtZSArICIvLyIgKyBob3N0ICsgIic+IiArIGhvc3QgKyAiPC9hPiI7Cisg
ICAgICAgIGVtaXRGcmFtZVdpdGhDb250ZW50cyhjb250ZW50cyk7CisgICAgfQorICAgIGZ1bmN0
aW9uIGVtaXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKGRuc1ByZWZldGNoQ29udHJvbCkgewor
ICAgICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhvc3QoKTsKKyAgICAgICAgdmFyIGNvbnRlbnRz
ID0gIiI7CisgICAgICAgIGlmIChkbnNQcmVmZXRjaENvbnRyb2wpIHsKKyAgICAgICAgICAgIGNv
bnRlbnRzICs9ICI8bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRjaC1jb250cm9sJyBjb250
ZW50PSciICsgZG5zUHJlZmV0Y2hDb250cm9sICsgIic+IjsKKyAgICAgICAgfQorICAgICAgICBj
b250ZW50cyArPSAiPGxpbmsgcmVsPSdkbnMtcHJlZmV0Y2gnIGhyZWY9Jy8vIiArIGhvc3QgKyAi
Jz4iICsgaG9zdDsKKyAgICAgICAgZW1pdEZyYW1lV2l0aENvbnRlbnRzKGNvbnRlbnRzKTsKKyAg
ICB9Cis8L3NjcmlwdD4KKzxib2R5PgorVGhpcyBpcyBhIHRlc3Qgb2YgRE5TIHByZWZldGNoIGNv
bnRyb2wuIEl0J3MgY29uc2lkZXJlZCBhIHBhc3MgaWYgaXQgZG9lc24ndCBjcmFzaC4gSXQgY2Fu
IGFsc28gYmUgdXNlZCBhcyAKK2EgbWFudWFsIHRlc3Qgb2YgRE5TIHByZWZldGNoIHVzaW5nIGEg
bmV0d29ya2luZyBtb25pdG9yaW5nIHRvb2wuCisKKzxwPkJyb3dzZXJzIE1BWSBkbyBhIEROUyBw
cmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxpbmtzOjwvcD4KKworPGRpdj4KKyAgPHNjcmlwdD5l
bWl0RnJhbWVGb3JNYW51YWxETlNQcmVmZXRjaCgib24iKTwvc2NyaXB0PgorICA8c2NyaXB0PmVt
aXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKCJvZmYiKTwvc2NyaXB0PgorICA8c2NyaXB0PmVt
aXRGcmFtZUZvclNjaGVtZSgiaHR0cDoiKTwvc2NyaXB0PgorICA8c2NyaXB0PmVtaXRGcmFtZUZv
clNjaGVtZSgiaHR0cHM6Iik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JTY2hlbWUo
ImZ0cDoiKTwvc2NyaXB0PgorICA8c2NyaXB0PmVtaXRGcmFtZUZvclNjaGVtZSgiIik8L3Njcmlw
dD4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAiPjwv
aWZyYW1lPgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBo
cD92YWx1ZT1vbiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwczovLzEyNy4wLjAuMTo4
NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1vbiI+PC9p
ZnJhbWU+Cis8L2Rpdj4KKworPHAgc3R5bGU9J2NsZWFyOiBsZWZ0Jz5Ccm93c2VycyBTSE9VTEQg
Tk9UIGRvIGEgRE5TIGxvb2t1cCBmb3IgdGhlIGZvbGxvd2luZyBsaW5rcyB1bnRpbCB0aGV5IGFy
ZSBjbGlja2VkOjwvcD4KKworPGRpdj4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJl
ZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9b2ZmIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9InJl
c291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9Zm9vIj48L2lmcmFtZT4KKyAg
PGlmcmFtZSBzcmM9Imh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvbWlzYy9yZXNvdXJjZXMvZG5zLXBy
ZWZldGNoLWNvbnRyb2wucGhwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9Imh0dHBzOi8vMTI3
LjAuMC4xOjg0NDMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwP3ZhbHVl
PW9mZiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwczovLzEyNy4wLjAuMTo4NDQzL21p
c2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1mb28iPjwvaWZyYW1l
PgorICA8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0bWwsPG1ldGEgaHR0cC1lcXVpdj0neC1kbnMt
cHJlZmV0Y2gtY29udHJvbCcgdmFsdWU9J29mZic+PGlmcmFtZSBzcmM9J2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAnPjwvaWZyYW1l
PiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCw8bWV0YSBodHRwLWVx
dWl2PSd4LWRucy1wcmVmZXRjaC1jb250cm9sJyB2YWx1ZT0nb24nPjxpZnJhbWUgc3JjPSdodHRw
czovLzEyNy4wLjAuMTo4NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBo
cCc+PC9pZnJhbWU+Ij48L2lmcmFtZT4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250
cm9sLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3Vy
Y2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8P3BocAorICBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0g
J29mZicpCisgICAgaGVhZGVyKCdYLUROUy1QcmVmZXRjaC1Db250cm9sOiBvZmYnKTsKKyAgZWxz
ZSBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0gJ29uJykKKyAgICBoZWFkZXIoJ1gtRE5TLVByZWZldGNo
LUNvbnRyb2w6IG9uJyk7CisgIGVsc2UgaWYgKCRfR0VUWyd2YWx1ZSddID09ICdmb28nKQorICAg
IGhlYWRlcignWC1ETlMtUHJlZmV0Y2gtQ29udHJvbDogZm9vJyk7CisKKyRmYWtlX2RvbWFpbiA9
ICJ3d3cuIiAuIHJhbmQoKSAuICIuaW52YWxpZCI7Cis/PgorPGh0bWw+Cis8Ym9keT4KKzxhIGhy
ZWY9J2h0dHA6Ly88P3BocCBlY2hvICRmYWtlX2RvbWFpbiA/Pi8nPjw/cGhwIGVjaG8gJGZha2Vf
ZG9tYWluID8+PC9hPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23534</attachid>
            <date>2008-09-18 11:57:00 -0700</date>
            <delta_ts>2008-09-18 14:28:33 -0700</delta_ts>
            <desc>Updated patch with comments from Mark Rowe</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>26948</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMDktMTggIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvIGFuZCBNYXJrIFJv
d2UuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9s
Lmh0bWwKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA2OTAKKworICAgICAgICBJbnZva2UgV2ViQ29yZTo6cHJlZmV0Y2hETlMoKSBvbiBob3N0IG5h
bWVzIHRoYXQgYXBwZWFyIGluCisgICAgICAgIGluIHRoZSBocmVmIG9mIGh5cGVybGlua3MgYW5k
IDxsaW5rIHJlbD0iZG5zLXByZWZldGNoIj4uIFRoaXMgCisgICAgICAgIGNhbiBiZSB1c2VkIHRv
IGltcGxlbWVudCBETlMgcHJlZmV0Y2hpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBF
cXVpdik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2VjdXJpdHlPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRETlNQcmVmZXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzRE5TUHJl
ZmV0Y2hFbmFibGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlByZWxvYWRTY2FubmVyOjpwcm9jZXNzQXR0cmlidXRlKToKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJlZ2luKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0ROUy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpw
cmVmZXRjaEROUyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRE5TTWFjLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpwcmVmZXRjaEROUyk6CisKIDIwMDgtMDktMTggIEtl
dmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWNjaWRl
bnRhbGx5IGNoZWNrZWQgaW4gY29kZS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gMzY2MTYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NTg4LDYgKzU1ODgsMjYgQEAKIAkJCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxETlNDRk5ldC5jcHAiDQorCQkJCQkJ
Pg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xX
aW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQkJCT4NCisJCQkJ
CQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCS8+DQor
CQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJ
CQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQorCQkJCQkJCT4NCisJCQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJ
CQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGNmXFJlc291cmNlUmVxdWVzdENGTmV0LmgiDQogCQkJCQkJPg0KIAkJCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAzNjYxNikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgwLDYgKzMzODAsOCBAQAogCQlC
MkVCREM5QzBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVCREM5QTBBRjc3RTM0
MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi87IH07CiAJCUIyRUJEQzlEMEFG
NzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVCREM5QjBBRjc3RTM0MDBBRTRBNjggLyog
U1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovOyB9OwogCQlCMkVEOTc3MTBCMUY1NUNFMDAyNTdEMEYg
LyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4
dENHLmNwcCAqLzsgfTsKKwkJQjJGMzRGOTgwRTgyRDM5RTAwRjYyN0NEIC8qIEROU01hYy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkYzNEY5NzBF
ODJEMzlFMDBGNjI3Q0QgLyogRE5TTWFjLmNwcCAqLzsgfTsKKwkJQjJGMzRGOUEwRTgyRDNBRjAw
RjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJGMzRGOTkwRTgyRDNBRjAwRjYyN0NEIC8qIEROUy5oICovOyB9OwogCQlCMkZBM0Qz
NjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRkEzQzRFMEFCNzVBNkUw
MDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwICovOyB9OwogCQlCMkZBM0Qz
NzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkZBM0M0RjBBQjc1QTZFMDAw
RTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmggKi87IH07CiAJCUIyRkEzRDM4MEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGQTNDNTAwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHQW5pbWF0ZWRBbmdsZS5jcHAgKi87IH07CkBAIC03ODU2LDYgKzc4NTgsOCBAQAogCQlC
MkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRUJEQzlCMEFGNzdFMzQwMEFFNEE2OCAv
KiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdSZW5kZXJUcmVlQXNUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
RUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0Q0cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkYzNEY5NzBFODJEMzlFMDBGNjI3Q0QgLyogRE5T
TWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEROU01hYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyRjM0Rjk5MEU4MkQzQUYwMEY2MjdDRCAv
KiBETlMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE5TLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRkEzQzRFMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyRkEzQzRGMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVDb2xvckVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkZBM0M1MDBBQjc1QTZF
MDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZEFuZ2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1NWR0FuaW1hdGVkQW5nbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTI0Nyw2ICs5MjUxLDcgQEAKIAkJCQk5MzRGNzEzOTBENUE2RjEwMDAw
MThENjkgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlLmggKi8sCiAJCQkJNTE0Qzc2NTgw
Q0U5MjNBMTAwN0VGM0NEIC8qIENyZWRlbnRpYWwuY3BwICovLAogCQkJCTUxNEM3NjU5MENFOTIz
QTEwMDdFRjNDRCAvKiBDcmVkZW50aWFsLmggKi8sCisJCQkJQjJGMzRGOTkwRTgyRDNBRjAwRjYy
N0NEIC8qIEROUy5oICovLAogCQkJCTUxNEM3NjVBMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0
YS5jcHAgKi8sCiAJCQkJNTE0Qzc2NUIwQ0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmggKi8s
CiAJCQkJNTE0Qzc2NUMwQ0U5MjNBMTAwN0VGM0NEIC8qIEhUVFBIZWFkZXJNYXAuaCAqLywKQEAg
LTkyNzQsNiArOTI3OSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTkzNEY3MTQzMEQ1QTZGNTMwMDAxOEQ2OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5o
ICovLAorCQkJCUIyRjM0Rjk3MEU4MkQzOUUwMEY2MjdDRCAvKiBETlNNYWMuY3BwICovLAogCQkJ
CTkzNEY3MTQxMEQ1QTZGNDQwMDAxOEQ2OSAvKiBSZXNvdXJjZUVycm9yLmggKi8sCiAJCQkJNTE0
Qzc2NDIwQ0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLmggKi8sCiAJCQkJNTE0
Qzc2NDMwQ0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tICovLApAQCAtMTU3
MjMsNiArMTU3MjksNyBAQAogCQkJCUJDNUVCN0Y4MEU4MUYwNTcwMEIyNTk2NSAvKiBNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCODBCMEU4MUYxMTIw
MEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjgxMDBFODFGMkNFMDBCMjU5NjUgLyogU3R5bGVUcmFuc2Zvcm1EYXRhLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCMkYzNEY5QTBFODJEM0FGMDBGNjI3Q0QgLyogRE5TLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE3NTQyLDYgKzE3NTQ5LDcgQEAKIAkJCQlCQzVFQjdGNzBFODFGMDU3MDBCMjU5NjUgLyog
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCODBB
MEU4MUYxMTIwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNUVCODBGMEU4MUYyQ0UwMEIyNTk2NSAvKiBTdHlsZVRyYW5zZm9ybURhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjJGMzRGOTgwRTgyRDM5RTAwRjYyN0NEIC8qIEROU01hYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM2NjE2KQorKysgV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNiArMzUxLDcgQEAg
RG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgIG1fb3Zlck1pbmlt
dW1MYXlvdXRUaHJlc2hvbGQgPSBmYWxzZTsKICAgICAKICAgICBpbml0U2VjdXJpdHlDb250ZXh0
KCk7CisgICAgaW5pdEROU1ByZWZldGNoKCk7CiAKICAgICBzdGF0aWMgaW50IGRvY0lEID0gMDsK
ICAgICBtX2RvY0lEID0gZG9jSUQrKzsKQEAgLTE5NTIsNiArMTk1Myw4IEBAIHZvaWQgRG9jdW1l
bnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29uc3QgU3QKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhU
TUxEb2N1bWVudCo+KHRoaXMpLT5zZXRDb29raWUoY29udGVudCk7CiAgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtbGFuZ3VhZ2UiKSkKICAgICAgICAgc2V0
Q29udGVudExhbmd1YWdlKGNvbnRlbnQpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGVxdWl2LCAieC1kbnMtcHJlZmV0Y2gtY29udHJvbCIpKQorICAgICAgICBwYXJzZUROU1ByZWZl
dGNoQ29udHJvbEhlYWRlcihjb250ZW50KTsKIH0KIAogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyBEb2N1bWVudDo6cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IEludFBvaW50JiBkb2N1bWVudFBvaW50LCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2ZW50KQpAQCAtNDAzMCw2ICs0MDMzLDcgQEAgdm9pZCBEb2N1bWVudDo6aW5pdFNl
Y3VyaXR5Q29udGV4dCgpCiB2b2lkIERvY3VtZW50OjpzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgbV9zZWN1cml0eU9yaWdpbiA9IHNlY3Vy
aXR5T3JpZ2luOworICAgIGluaXRETlNQcmVmZXRjaCgpOwogfQogCiB2b2lkIERvY3VtZW50Ojp1
cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKCkKQEAgLTQzMTYsNCArNDMyMCwyNyBAQCBIVE1MQ2Fu
dmFzRWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0NhbnZhCiAgICAgcmV0dXJuIHJlc3VsdC5nZXQo
KTsKIH0KIAordm9pZCBEb2N1bWVudDo6aW5pdEROU1ByZWZldGNoKCkKK3sKKyAgICBtX2hhdmVF
eHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IGZhbHNlOworICAgIG1faXNETlNQcmVmZXRj
aEVuYWJsZWQgPSBzZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpID09ICJodHRwIjsKKworICAg
IC8vIEluaGVyaXQgRE5TIHByZWZldGNoIG9wdC1vdXQgZnJvbSBwYXJlbnQgZnJhbWUgICAgCisg
ICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAgICAgIGlm
ICghcGFyZW50LT5pc0ROU1ByZWZldGNoRW5hYmxlZCgpKQorICAgICAgICAgICAgbV9pc0ROU1By
ZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudDo6cGFyc2VE
TlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJiBkbnNQcmVmZXRjaENvbnRyb2wp
Cit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRuc1ByZWZldGNoQ29udHJvbCwgIm9uIikg
JiYgIW1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZldGNoKSB7CisgICAgICAgIG1faXNE
TlNQcmVmZXRjaEVuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAgIG1faGF2ZUV4cGxpY2l0bHlEaXNh
YmxlZEROU1ByZWZldGNoID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAzNjYxNikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc2Miw2ICs3NjIsMTAgQEAgcHVibGljOgogICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBIVE1MQ2FudmFzRWxl
bWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIAorICAg
IGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRE5TUHJlZmV0
Y2hFbmFibGVkOyB9CisgICAgdm9pZCBpbml0RE5TUHJlZmV0Y2goKTsKKyAgICB2b2lkIHBhcnNl
RE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnN0IFN0cmluZyYpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC04NjYsNiArODcwLDkgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7CiAgICAgYm9vbCBtX2dv
dG9BbmNob3JOZWVkZWRBZnRlclN0eWxlc2hlZXRzTG9hZDsKIAorICAgIGJvb2wgbV9pc0ROU1By
ZWZldGNoRW5hYmxlZDsKKyAgICBib29sIG1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZl
dGNoOworCiAgICAgU3RyaW5nIG1fdGl0bGU7CiAgICAgYm9vbCBtX3RpdGxlU2V0RXhwbGljaXRs
eTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDM2NjE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxB
bmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE0IEBACiAjaW5j
bHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2lu
Y2x1ZGUgIkROUy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTI3NCw2ICsyNzYs
MTIgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBz
ZXRJc0xpbmsoIWF0dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKHdhc0xpbmsgIT0gaXNMaW5r
KCkpCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICAgIGlmIChpc0xpbmsoKSAmJiBk
b2N1bWVudCgpLT5pc0ROU1ByZWZldGNoRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBTdHJpbmcg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgo
Imh0dHA6IikgfHwgdmFsdWUuc3RhcnRzV2l0aCgiaHR0cHM6IikgfHwgdmFsdWUuc3RhcnRzV2l0
aCgiLy8iKSkgeworICAgICAgICAgICAgICAgIHByZWZldGNoRE5TKGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHZhbHVlKS5ob3N0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIgfHwKICAgICAgICAgICAgICBhdHRyLT5u
YW1lKCkgPT0gdGl0bGVBdHRyIHx8CiAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHJlbEF0
dHIpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjYxNikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTIgQEAKIAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNhY2hlZENT
U1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJETlMuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lVHJlZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgpAQCAtNDgsNiArNTAsNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChEb2N1
bWVuCiAgICAgLCBtX2FsdGVybmF0ZShmYWxzZSkKICAgICAsIG1faXNTdHlsZVNoZWV0KGZhbHNl
KQogICAgICwgbV9pc0ljb24oZmFsc2UpCisgICAgLCBtX2lzRE5TUHJlZmV0Y2goZmFsc2UpCiAg
ICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKIHsKIH0KQEAgLTEwNyw3ICsxMTAsNyBAQCBT
dHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkgY29uCiB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJp
YnV0ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29u
KTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxl
U2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbiwgbV9pc0ROU1ByZWZldGNoKTsKICAgICAgICAg
cHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyKSB7CiAg
ICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFs
dWUoKSkpLnN0cmluZygpOwpAQCAtMTI3LDE1ICsxMzAsMTggQEAgdm9pZCBIVE1MTGlua0VsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0KIH0KIAotdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsLCBib29sJiBzdHls
ZVNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24pCit2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwsIGJvb2wmIHN0
eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gp
CiB7CiAgICAgc3R5bGVTaGVldCA9IGZhbHNlOwogICAgIGljb24gPSBmYWxzZTsgCiAgICAgYWx0
ZXJuYXRlID0gZmFsc2U7CisgICAgZG5zUHJlZmV0Y2ggPSBmYWxzZTsKICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UocmVsLCAic3R5bGVzaGVldCIpKQogICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1
ZTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJpY29uIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UocmVsLCAic2hvcnRjdXQgaWNvbiIpKQogICAgICAgICBpY29uID0gdHJ1ZTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJkbnMtcHJlZmV0Y2giKSkKKyAg
ICAgICAgZG5zUHJlZmV0Y2ggPSB0cnVlOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHJlbCwgImFsdGVybmF0ZSBzdHlsZXNoZWV0IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAi
c3R5bGVzaGVldCBhbHRlcm5hdGUiKSkgewogICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1ZTsKICAg
ICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKQEAgLTE2OSw2ICsxNzUsOSBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6cHJvY2VzcygpCiAgICAgaWYgKG1faXNJY29uICYmICFtX3VybC5pc0VtcHR5KCkp
CiAgICAgICAgIGRvY3VtZW50KCktPnNldEljb25VUkwobV91cmwsIHR5cGUpOwogCisgICAgaWYg
KG1faXNETlNQcmVmZXRjaCAmJiAhbV91cmwuaXNFbXB0eSgpKQorICAgICAgICBwcmVmZXRjaERO
UyhLVVJMKG1fdXJsKS5ob3N0KCkpOworCiAgICAgLy8gU3R5bGVzaGVldAogICAgIC8vIFRoaXMg
d2FzIGJ1Z2d5IGFuZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9ImFsdGVybmF0
ZSI+LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1kd2gKICAgICBp
ZiAobV9kaXNhYmxlZFN0YXRlICE9IDIgJiYgbV9pc1N0eWxlU2hlZXQgJiYgZG9jdW1lbnQoKS0+
ZnJhbWUoKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24gMzY2MTYpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZSopIGNvbnN0OwogICAgIAotICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVy
bmF0ZSwgYm9vbCYgaWNvbik7CisgICAgc3RhdGljIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgYm9vbCYgc3R5bGVzaGVldCwgYm9vbCYgYWx0ZXJu
YXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CiAK
QEAgLTExMSw2ICsxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2FsdGVybmF0ZTsKICAg
ICBib29sIG1faXNTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9pc0ljb247CisgICAgYm9vbCBtX2lz
RE5TUHJlZmV0Y2g7CiAgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNlcjsKIH07CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L1ByZWxvYWRTY2FubmVyLmNwcAkocmV2aXNpb24gMzY2MTYpCisrKyBXZWJDb3JlL2h0bWwvUHJl
bG9hZFNjYW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsOCArNzAwLDkgQEAgdm9pZCBQ
cmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCiAgICAgICAgICAgICBib29sIHN0eWxl
U2hlZXQgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7CiAgICAg
ICAgICAgICBib29sIGljb24gPSBmYWxzZTsKLSAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudDo6
dG9rZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFsdGVybmF0ZSwgaWNvbik7
Ci0gICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5h
dGUgJiYgIWljb247CisgICAgICAgICAgICBib29sIGRuc1ByZWZldGNoID0gZmFsc2U7CisgICAg
ICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHls
ZVNoZWV0LCBhbHRlcm5hdGUsIGljb24sIGRuc1ByZWZldGNoKTsKKyAgICAgICAgICAgIG1fbGlu
a0lzU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVybmF0ZSAmJiAhaWNvbiAmJiAhZG5z
UHJlZmV0Y2g7CiAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlID09IGNoYXJzZXRBdHRyKQog
ICAgICAgICAgICAgbV9jaGFyc2V0ID0gdmFsdWU7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkocmV2aXNpb24gMzY2MTYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
YmVnaW4oY29uc3QgS1VSTCYgdXJsLAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
LT5zZXR0aW5ncygpOwogICAgIGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+c2V0QXV0b0xvYWRJbWFn
ZXMoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKIAor
ICAgIGlmIChtX2RvY3VtZW50TG9hZGVyKSB7CisgICAgICAgIFN0cmluZyBkbnNQcmVmZXRjaENv
bnRyb2wgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiWC1E
TlMtUHJlZmV0Y2gtQ29udHJvbCIpOworICAgICAgICBpZiAoIWRuc1ByZWZldGNoQ29udHJvbC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+cGFyc2VETlNQcmVmZXRjaENvbnRyb2xI
ZWFkZXIoZG5zUHJlZmV0Y2hDb250cm9sKTsKKyAgICB9CisKICNpZiBGUkFNRV9MT0FEU19VU0VS
X1NUWUxFU0hFRVQKICAgICBLVVJMIHVzZXJTdHlsZVNoZWV0ID0gc2V0dGluZ3MgPyBzZXR0aW5n
cy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIDogS1VSTCgpOwogICAgIGlmICghdXNlclN0eWxl
U2hlZXQuaXNFbXB0eSgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROUy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlMuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsaW4gSmFja3NvbiAgPGNvbGxp
bmpAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBETlNQcmVmZXRjaF9oCisjZGVmaW5l
IEROU1ByZWZldGNoX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RyaW5n
OworCisgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK30KKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkROUy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9ETlNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRE5TTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRE5TTWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsaW4gSmFja3NvbiAgPGNvbGxp
bmpAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJETlMuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjE2KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MDgtMDktMTggIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvIGFuZCBNYXJrIFJvd2UuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjkwCisKKyAgICAgICAgQWRk
IHRlc3QgZm9yIEROUyBwcmVmZXRjaCBjb250cm9sLgorCisgICAgICAgICogaHR0cC90ZXN0cy9t
aXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9sLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwOiBB
ZGRlZC4KKwogMjAwOC0wOS0xOCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvZG5z
LXByZWZldGNoLWNvbnRyb2wtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcg
QEAKK1RoaXMgaXMgYSB0ZXN0IG9mIEROUyBwcmVmZXRjaCBjb250cm9sLiBJdCdzIGNvbnNpZGVy
ZWQgYSBwYXNzIGlmIGl0IGRvZXNuJ3QgY3Jhc2guIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBt
YW51YWwgdGVzdCBvZiBETlMgcHJlZmV0Y2ggdXNpbmcgYSBuZXR3b3JraW5nIG1vbml0b3Jpbmcg
dG9vbC4KK0Jyb3dzZXJzIE1BWSBkbyBhIEROUyBwcmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxp
bmtzOgorCisgICAgICAgICAgICAgIAorQnJvd3NlcnMgU0hPVUxEIE5PVCBkbyBhIEROUyBsb29r
dXAgZm9yIHRoZSBmb2xsb3dpbmcgbGlua3MgdW50aWwgdGhleSBhcmUgY2xpY2tlZDoKKworICAg
ICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1j
b250cm9sLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Ru
cy1wcmVmZXRjaC1jb250cm9sLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NiBAQAorPGh0bWw+Cis8c3R5bGU+CitpZnJhbWUKK3sgCisgICAgaGVpZ2h0OiA2MHB4
OworICAgIHdpZHRoOiAyMDBweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIH0KKyAgICBmdW5jdGlvbiBlbWl0RnJhbWVXaXRoQ29udGVudHMo
Y29udGVudHMpIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIjxpZnJhbWUgc3JjPVwiZGF0YTp0
ZXh0L2h0bWwsIiArIGNvbnRlbnRzICsgIlwiPjwvaWZyYW1lPiIpOworICAgIH0KKyAgICBmdW5j
dGlvbiBnZXRSYW5kb21Ib3N0KCkgeworICAgICAgICByZXR1cm4gInd3dy4iICsgTWF0aC5mbG9v
cihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApICsgIi5pbnZhbGlkIjsKKyAgICB9CisgICAg
ZnVuY3Rpb24gZW1pdEZyYW1lRm9yU2NoZW1lKHNjaGVtZSkgeworICAgICAgICB2YXIgaG9zdCA9
IGdldFJhbmRvbUhvc3QoKTsKKyAgICAgICAgdmFyIGNvbnRlbnRzID0gIjxtZXRhIGh0dHAtZXF1
aXY9J3gtZG5zLXByZWZldGNoLWNvbnRyb2wnIGNvbnRlbnQ9J29uJz4iOworICAgICAgICBjb250
ZW50cyArPSAiPGEgaHJlZj0nIiArIHNjaGVtZSArICIvLyIgKyBob3N0ICsgIic+IiArIGhvc3Qg
KyAiPC9hPiI7CisgICAgICAgIGVtaXRGcmFtZVdpdGhDb250ZW50cyhjb250ZW50cyk7CisgICAg
fQorICAgIGZ1bmN0aW9uIGVtaXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKGRuc1ByZWZldGNo
Q29udHJvbCkgeworICAgICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhvc3QoKTsKKyAgICAgICAg
dmFyIGNvbnRlbnRzID0gIiI7CisgICAgICAgIGlmIChkbnNQcmVmZXRjaENvbnRyb2wpIHsKKyAg
ICAgICAgICAgIGNvbnRlbnRzICs9ICI8bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRjaC1j
b250cm9sJyBjb250ZW50PSciICsgZG5zUHJlZmV0Y2hDb250cm9sICsgIic+IjsKKyAgICAgICAg
fQorICAgICAgICBjb250ZW50cyArPSAiPGxpbmsgcmVsPSdkbnMtcHJlZmV0Y2gnIGhyZWY9Jy8v
IiArIGhvc3QgKyAiJz4iICsgaG9zdDsKKyAgICAgICAgZW1pdEZyYW1lV2l0aENvbnRlbnRzKGNv
bnRlbnRzKTsKKyAgICB9Cis8L3NjcmlwdD4KKzxib2R5PgorVGhpcyBpcyBhIHRlc3Qgb2YgRE5T
IHByZWZldGNoIGNvbnRyb2wuIEl0J3MgY29uc2lkZXJlZCBhIHBhc3MgaWYgaXQgZG9lc24ndCBj
cmFzaC4gSXQgY2FuIGFsc28gYmUgdXNlZCBhcyAKK2EgbWFudWFsIHRlc3Qgb2YgRE5TIHByZWZl
dGNoIHVzaW5nIGEgbmV0d29ya2luZyBtb25pdG9yaW5nIHRvb2wuCisKKzxwPkJyb3dzZXJzIE1B
WSBkbyBhIEROUyBwcmVmZXRjaCBvbiB0aGUgZm9sbG93aW5nIGxpbmtzOjwvcD4KKworPGRpdj4K
KyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JNYW51YWxETlNQcmVmZXRjaCgib24iKTwvc2NyaXB0Pgor
ICA8c2NyaXB0PmVtaXRGcmFtZUZvck1hbnVhbEROU1ByZWZldGNoKCJvZmYiKTwvc2NyaXB0Pgor
ICA8c2NyaXB0PmVtaXRGcmFtZUZvclNjaGVtZSgiaHR0cDoiKTwvc2NyaXB0PgorICA8c2NyaXB0
PmVtaXRGcmFtZUZvclNjaGVtZSgiaHR0cHM6Iik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJh
bWVGb3JTY2hlbWUoImZ0cDoiKTwvc2NyaXB0PgorICA8c2NyaXB0PmVtaXRGcmFtZUZvclNjaGVt
ZSgiIik8L3NjcmlwdD4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29u
dHJvbC5waHAiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRj
aC1jb250cm9sLnBocD92YWx1ZT1vbiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwczov
LzEyNy4wLjAuMTo4NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92
YWx1ZT1vbiI+PC9pZnJhbWU+Cis8L2Rpdj4KKworPHAgc3R5bGU9J2NsZWFyOiBsZWZ0Jz5Ccm93
c2VycyBTSE9VTEQgTk9UIGRvIGEgRE5TIGxvb2t1cCBmb3IgdGhlIGZvbGxvd2luZyBsaW5rcyB1
bnRpbCB0aGV5IGFyZSBjbGlja2VkOjwvcD4KKworPGRpdj4KKyAgPGlmcmFtZSBzcmM9InJlc291
cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9b2ZmIj48L2lmcmFtZT4KKyAgPGlm
cmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9Zm9vIj48
L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9Imh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvbWlzYy9yZXNv
dXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwIj48L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9
Imh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRy
b2wucGhwP3ZhbHVlPW9mZiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJodHRwczovLzEyNy4w
LjAuMTo4NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1m
b28iPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0iZGF0YTp0ZXh0L2h0bWwsPG1ldGEgaHR0cC1l
cXVpdj0neC1kbnMtcHJlZmV0Y2gtY29udHJvbCcgdmFsdWU9J29mZic+PGlmcmFtZSBzcmM9J2h0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5w
aHAnPjwvaWZyYW1lPiI+PC9pZnJhbWU+CisgIDxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCw8
bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRjaC1jb250cm9sJyB2YWx1ZT0nb24nPjxpZnJh
bWUgc3JjPSdodHRwczovLzEyNy4wLjAuMTo4NDQzL21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRj
aC1jb250cm9sLnBocCc+PC9pZnJhbWU+Ij48L2lmcmFtZT4KKzwvZGl2PgorCis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Rucy1w
cmVmZXRjaC1jb250cm9sLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRy
b2wucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8P3BocAorICBpZiAoJF9HRVRb
J3ZhbHVlJ10gPT0gJ29mZicpCisgICAgaGVhZGVyKCdYLUROUy1QcmVmZXRjaC1Db250cm9sOiBv
ZmYnKTsKKyAgZWxzZSBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0gJ29uJykKKyAgICBoZWFkZXIoJ1gt
RE5TLVByZWZldGNoLUNvbnRyb2w6IG9uJyk7CisgIGVsc2UgaWYgKCRfR0VUWyd2YWx1ZSddID09
ICdmb28nKQorICAgIGhlYWRlcignWC1ETlMtUHJlZmV0Y2gtQ29udHJvbDogZm9vJyk7CisKKyRm
YWtlX2RvbWFpbiA9ICJ3d3cuIiAuIHJhbmQoKSAuICIuaW52YWxpZCI7Cis/PgorPGh0bWw+Cis8
Ym9keT4KKzxhIGhyZWY9J2h0dHA6Ly88P3BocCBlY2hvICRmYWtlX2RvbWFpbiA/Pi8nPjw/cGhw
IGVjaG8gJGZha2VfZG9tYWluID8+PC9hPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="10534"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23538</attachid>
            <date>2008-09-18 14:28:33 -0700</date>
            <delta_ts>2008-09-18 14:28:33 -0700</delta_ts>
            <desc>Updated patch with more comments from Mark Rowe</desc>
            <filename>dns-prefetch.patch</filename>
            <type>text/plain</type>
            <size>27670</size>
            <attacher name="Collin Jackson">collinj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjYyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDgtMDktMTggIENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvIGFuZCBNYXJrIFJv
d2UuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250cm9s
Lmh0bWwKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA2OTAKKworICAgICAgICBJbnZva2UgV2ViQ29yZTo6cHJlZmV0Y2hETlMoKSBvbiBob3N0IG5h
bWVzIHRoYXQgYXBwZWFyIGluCisgICAgICAgIGluIHRoZSBocmVmIG9mIGh5cGVybGlua3MgYW5k
IDxsaW5rIHJlbD0iZG5zLXByZWZldGNoIj4uIFRoaXMgCisgICAgICAgIGNhbiBiZSB1c2VkIHRv
IGltcGxlbWVudCBETlMgcHJlZmV0Y2hpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0h0dHBF
cXVpdik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2VjdXJpdHlPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRETlNQcmVmZXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzRE5TUHJl
ZmV0Y2hFbmFibGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL1ByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlByZWxvYWRTY2FubmVyOjpwcm9jZXNzQXR0cmlidXRlKToKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmJlZ2luKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnByZWZldGNoRE5TKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0ROUy5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpwcmVmZXRjaEROUyk6CisgICAgICAgICogcGxhdGZvcm0v
cXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZWZldGNoRE5T
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorCiAyMDA4LTA5LTE4ICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHRoZSBjb25jZXB0IG9mIHN1cHByZXNzaW9u
IGludmFsaWRhdGlvbiBvbiBXaWRnZXRzIHRvIFNjcm9sbGJhcgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAzNjYyMSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1ODgsNiArNTU4OCwy
NiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxG
aWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGNmXEROU0NGTmV0
LmNwcCINCisJCQkJCQk+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9
IkRlYnVnX0NhaXJvfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIN
CisJCQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCINCiAJCQkJ
CQk+DQogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM2NjIxKQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzODAsNiAr
MzM4MCw4IEBACiAJCUIyRUJEQzlDMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
RUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLzsgfTsK
IAkJQjJFQkRDOUQwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVBc1RleHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRUJEQzlCMEFGNzdF
MzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi87IH07CiAJCUIyRUQ5NzcxMEIx
RjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyog
R3JhcGhpY3NDb250ZXh0Q0cuY3BwICovOyB9OworCQlCMkYzNEZFNjBFODJGODE0MDBGNjI3Q0Qg
LyogRE5TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkYzNEZFNTBFODJGODE0MDBGNjI3Q0QgLyogRE5TLmggKi87IH07CisJCUIyRjM0RkU5MEU4MkY4
MjcwMEY2MjdDRCAvKiBETlNDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMkYzNEZFODBFODJGODI3MDBGNjI3Q0QgLyogRE5TQ0ZOZXQuY3Bw
ICovOyB9OwogCQlCMkZBM0QzNjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyRkEzQzRFMEFCNzVBNkUwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3Bw
ICovOyB9OwogCQlCMkZBM0QzNzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkZBM0M0RjBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmggKi87
IH07CiAJCUIyRkEzRDM4MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkQW5nbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJGQTNDNTAw
QUI3NUE2RTAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWRBbmdsZS5jcHAgKi87IH07CkBAIC03ODc0
LDYgKzc4NzYsOCBAQAogCQlCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRUJEQzlC
MEFGNzdFMzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5kZXJUcmVlQXNUZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0NvbnRl
eHRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkYzNEZFNTBFODJG
ODE0MDBGNjI3Q0QgLyogRE5TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERO
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkYzNEZFODBFODJGODI3MDBGNjI3
Q0QgLyogRE5TQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RE5TQ0ZOZXQuY3BwOyBwYXRoID0gY2YvRE5TQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkZBM0M0RTBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0Fu
aW1hdGVDb2xvckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkZB
M0M0RjBBQjc1QTZFMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlQ29sb3JFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJGQTNDNTAwQUI3NUE2RTAwMEU1QUM0IC8q
IEpTU1ZHQW5pbWF0ZWRBbmdsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTVkdBbmltYXRlZEFuZ2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTkyNzgsMTEgKzkyODIsMTMgQEAKIAkJNjU2Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5l
dHdvcmsgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUIy
RjM0RkU3MEU4MkY4MTcwMEY2MjdDRCAvKiBjZiAqLywKIAkJCQk2NTZCODRFNzBBRUExREFFMDBB
MDk1QjQgLyogbWFjICovLAogCQkJCTkzNEY3MTM3MEQ1QTZFRkYwMDAxOEQ2OSAvKiBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUJhc2UuY3BwICovLAogCQkJCTkzNEY3MTM5MEQ1QTZGMTAwMDAxOEQ2
OSAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCAqLywKIAkJCQk1MTRDNzY1ODBDRTky
M0ExMDA3RUYzQ0QgLyogQ3JlZGVudGlhbC5jcHAgKi8sCiAJCQkJNTE0Qzc2NTkwQ0U5MjNBMTAw
N0VGM0NEIC8qIENyZWRlbnRpYWwuaCAqLywKKwkJCQlCMkYzNEZFNTBFODJGODE0MDBGNjI3Q0Qg
LyogRE5TLmggKi8sCiAJCQkJNTE0Qzc2NUEwQ0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmNw
cCAqLywKIAkJCQk1MTRDNzY1QjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCAqLywKIAkJ
CQk1MTRDNzY1QzBDRTkyM0ExMDA3RUYzQ0QgLyogSFRUUEhlYWRlck1hcC5oICovLApAQCAtMTI1
NjcsNiArMTI1NzMsMTQgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQlCMkYzNEZFNzBFODJGODE3MDBGNjI3Q0QgLyogY2YgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUIyRjM0RkU4MEU4MkY4MjcwMEY2
MjdDRCAvKiBETlNDRk5ldC5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGNmOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQkMxQTM3OTAwOTdDNkY5NzAwMTlGM0Q4IC8qIGJp
bmRpbmdzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE1
Nzg3LDYgKzE1ODAxLDcgQEAKIAkJCQlCQzVFQkEwRDBFODIzQTFDMDBCMjU5NjUgLyogQW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQkExMTBFODIzRTQ3MDBCMjU5NjUgLyogS2V5
ZnJhbWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzIyNzFEQTBFODI0MDczMDBFN0Y5NzUg
LyogQW5pbWF0aW9uTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJGMzRGRTYwRTgyRjgxNDAw
RjYyN0NEIC8qIEROUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzYxNCw2ICsxNzYyOSw3IEBACiAJ
CQkJQkM1RUJBMEMwRTgyM0ExQzAwQjI1OTY1IC8qIEFuaW1hdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzVFQkExMDBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMjI3MUQ5MEU4MjQwNzMwMEU3Rjk3NSAvKiBBbmltYXRpb25MaXN0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRjM0RkU5MEU4MkY4MjcwMEY2MjdDRCAvKiBETlND
Rk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM2NjIxKQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNiArMzUx
LDcgQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogICAgIG1fb3Zl
ck1pbmltdW1MYXlvdXRUaHJlc2hvbGQgPSBmYWxzZTsKICAgICAKICAgICBpbml0U2VjdXJpdHlD
b250ZXh0KCk7CisgICAgaW5pdEROU1ByZWZldGNoKCk7CiAKICAgICBzdGF0aWMgaW50IGRvY0lE
ID0gMDsKICAgICBtX2RvY0lEID0gZG9jSUQrKzsKQEAgLTE5NTIsNiArMTk1Myw4IEBAIHZvaWQg
RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYoY29uc3QgU3QKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudCo+KHRoaXMpLT5zZXRDb29raWUoY29udGVudCk7CiAgICAgfSBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtbGFuZ3VhZ2UiKSkKICAgICAg
ICAgc2V0Q29udGVudExhbmd1YWdlKGNvbnRlbnQpOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGVxdWl2LCAieC1kbnMtcHJlZmV0Y2gtY29udHJvbCIpKQorICAgICAgICBwYXJzZURO
U1ByZWZldGNoQ29udHJvbEhlYWRlcihjb250ZW50KTsKIH0KIAogTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyBEb2N1bWVudDo6cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IEludFBvaW50JiBkb2N1bWVudFBvaW50LCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIGV2ZW50KQpAQCAtNDAzMCw2ICs0MDMzLDcgQEAgdm9pZCBEb2N1bWVudDo6
aW5pdFNlY3VyaXR5Q29udGV4dCgpCiB2b2lkIERvY3VtZW50OjpzZXRTZWN1cml0eU9yaWdpbihT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgbV9zZWN1cml0eU9yaWdpbiA9
IHNlY3VyaXR5T3JpZ2luOworICAgIGluaXRETlNQcmVmZXRjaCgpOwogfQogCiB2b2lkIERvY3Vt
ZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKCkKQEAgLTQzMTYsNCArNDMyMCwyNyBAQCBI
VE1MQ2FudmFzRWxlbWVudCogRG9jdW1lbnQ6OmdldENTU0NhbnZhCiAgICAgcmV0dXJuIHJlc3Vs
dC5nZXQoKTsKIH0KIAordm9pZCBEb2N1bWVudDo6aW5pdEROU1ByZWZldGNoKCkKK3sKKyAgICBt
X2hhdmVFeHBsaWNpdGx5RGlzYWJsZWRETlNQcmVmZXRjaCA9IGZhbHNlOworICAgIG1faXNETlNQ
cmVmZXRjaEVuYWJsZWQgPSBzZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpID09ICJodHRwIjsK
KworICAgIC8vIEluaGVyaXQgRE5TIHByZWZldGNoIG9wdC1vdXQgZnJvbSBwYXJlbnQgZnJhbWUg
ICAgCisgICAgaWYgKERvY3VtZW50KiBwYXJlbnQgPSBwYXJlbnREb2N1bWVudCgpKSB7CisgICAg
ICAgIGlmICghcGFyZW50LT5pc0ROU1ByZWZldGNoRW5hYmxlZCgpKQorICAgICAgICAgICAgbV9p
c0ROU1ByZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudDo6
cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoY29uc3QgU3RyaW5nJiBkbnNQcmVmZXRjaENv
bnRyb2wpCit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRuc1ByZWZldGNoQ29udHJvbCwg
Im9uIikgJiYgIW1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZEROU1ByZWZldGNoKSB7CisgICAgICAg
IG1faXNETlNQcmVmZXRjaEVuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9pc0ROU1ByZWZldGNoRW5hYmxlZCA9IGZhbHNlOworICAgIG1faGF2ZUV4cGxpY2l0
bHlEaXNhYmxlZEROU1ByZWZldGNoID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzNjYyMSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2Miw2ICs3NjIsMTAgQEAgcHVibGljOgogICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBIVE1MQ2Fu
dmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IAorICAgIGJvb2wgaXNETlNQcmVmZXRjaEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRE5T
UHJlZmV0Y2hFbmFibGVkOyB9CisgICAgdm9pZCBpbml0RE5TUHJlZmV0Y2goKTsKKyAgICB2b2lk
IHBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGNvbnN0IFN0cmluZyYpOworCiBwcm90ZWN0
ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBib29sIGlzWEhUTUwpOwogCkBAIC04NjYsNiArODcw
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXM7CiAgICAgYm9v
bCBtX2dvdG9BbmNob3JOZWVkZWRBZnRlclN0eWxlc2hlZXRzTG9hZDsKIAorICAgIGJvb2wgbV9p
c0ROU1ByZWZldGNoRW5hYmxlZDsKKyAgICBib29sIG1faGF2ZUV4cGxpY2l0bHlEaXNhYmxlZERO
U1ByZWZldGNoOworCiAgICAgU3RyaW5nIG1fdGl0bGU7CiAgICAgYm9vbCBtX3RpdGxlU2V0RXhw
bGljaXRseTsKICAgICBSZWZQdHI8RWxlbWVudD4gbV90aXRsZUVsZW1lbnQ7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDM2NjIxKQorKysgV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDE0IEBA
CiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkNTU0hlbHBlci5o
IgorI2luY2x1ZGUgIkROUy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTI3NCw2
ICsyNzYsMTEgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAg
ICAgICBzZXRJc0xpbmsoIWF0dHItPmlzTnVsbCgpKTsKICAgICAgICAgaWYgKHdhc0xpbmsgIT0g
aXNMaW5rKCkpCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICAgIGlmIChpc0xpbmso
KSAmJiBkb2N1bWVudCgpLT5pc0ROU1ByZWZldGNoRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICAgICAgaWYgKHByb3RvY29sSXMo
dmFsdWUsICJodHRwIikgfHwgcHJvdG9jb2xJcyh2YWx1ZSwgImh0dHBzIikgfHwgdmFsdWUuc3Rh
cnRzV2l0aCgiLy8iKSkKKyAgICAgICAgICAgICAgICBwcmVmZXRjaEROUyhkb2N1bWVudCgpLT5j
b21wbGV0ZVVSTCh2YWx1ZSkuaG9zdCgpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG5hbWVBdHRyIHx8CiAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IHRp
dGxlQXR0ciB8fAogICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzY2MjEpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBA
CiAKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiRE5TLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKQEAgLTQ4LDYg
KzUwLDcgQEAgSFRNTExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQoRG9jdW1lbgogICAgICwg
bV9hbHRlcm5hdGUoZmFsc2UpCiAgICAgLCBtX2lzU3R5bGVTaGVldChmYWxzZSkKICAgICAsIG1f
aXNJY29uKGZhbHNlKQorICAgICwgbV9pc0ROU1ByZWZldGNoKGZhbHNlKQogICAgICwgbV9jcmVh
dGVkQnlQYXJzZXIoZmFsc2UpCiB7CiB9CkBAIC0xMDcsNyArMTEwLDcgQEAgU3R5bGVTaGVldCog
SFRNTExpbmtFbGVtZW50OjpzaGVldCgpIGNvbgogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHJlbEF0dHIpIHsKLSAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+
dmFsdWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbik7CisgICAgICAg
IHRva2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCksIG1faXNTdHlsZVNoZWV0LCBtX2Fs
dGVybmF0ZSwgbV9pc0ljb24sIG1faXNETlNQcmVmZXRjaCk7CiAgICAgICAgIHByb2Nlc3MoKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3Vy
bCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJp
bmcoKTsKQEAgLTEyNywxNSArMTMwLDE4IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnUKICAgICB9CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJl
bEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCwgYm9vbCYgc3R5bGVTaGVldCwgYm9v
bCYgYWx0ZXJuYXRlLCBib29sJiBpY29uKQordm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXpl
UmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsLCBib29sJiBzdHlsZVNoZWV0LCBi
b29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24sIGJvb2wmIGRuc1ByZWZldGNoKQogewogICAgIHN0
eWxlU2hlZXQgPSBmYWxzZTsKICAgICBpY29uID0gZmFsc2U7IAogICAgIGFsdGVybmF0ZSA9IGZh
bHNlOworICAgIGRuc1ByZWZldGNoID0gZmFsc2U7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHJlbCwgInN0eWxlc2hlZXQiKSkKICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CiAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiaWNvbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KHJlbCwgInNob3J0Y3V0IGljb24iKSkKICAgICAgICAgaWNvbiA9IHRydWU7CisgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiZG5zLXByZWZldGNoIikpCisgICAgICAgIGRuc1By
ZWZldGNoID0gdHJ1ZTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJhbHRl
cm5hdGUgc3R5bGVzaGVldCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQg
YWx0ZXJuYXRlIikpIHsKICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CiAgICAgICAgIGFsdGVy
bmF0ZSA9IHRydWU7CkBAIC0xNjksNiArMTc1LDkgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBy
b2Nlc3MoKQogICAgIGlmIChtX2lzSWNvbiAmJiAhbV91cmwuaXNFbXB0eSgpKQogICAgICAgICBk
b2N1bWVudCgpLT5zZXRJY29uVVJMKG1fdXJsLCB0eXBlKTsKIAorICAgIGlmIChtX2lzRE5TUHJl
ZmV0Y2ggJiYgIW1fdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcHJlZmV0Y2hETlMoS1VSTChtX3Vy
bCkuaG9zdCgpKTsKKwogICAgIC8vIFN0eWxlc2hlZXQKICAgICAvLyBUaGlzIHdhcyBidWdneSBh
bmQgd291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2gg
aGFzIGEgZGlmZmVyZW50IHNwZWNpZmllZCBtZWFuaW5nLiAtZHdoCiAgICAgaWYgKG1fZGlzYWJs
ZWRTdGF0ZSAhPSAyICYmIG1faXNTdHlsZVNoZWV0ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpIHsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDM2NjIxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25z
dDsKICAgICAKLSAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wm
IGljb24pOworICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYg
aWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291
cmNlQXR0cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogCkBAIC0xMTEsNiAr
MTExLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9hbHRlcm5hdGU7CiAgICAgYm9vbCBtX2lz
U3R5bGVTaGVldDsKICAgICBib29sIG1faXNJY29uOworICAgIGJvb2wgbV9pc0ROU1ByZWZldGNo
OwogICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwv
UHJlbG9hZFNjYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nh
bm5lci5jcHAJKHJldmlzaW9uIDM2NjIxKQorKysgV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAwLDggKzcwMCw5IEBAIHZvaWQgUHJlbG9hZFNjYW5u
ZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQogICAgICAgICAgICAgYm9vbCBzdHlsZVNoZWV0ID0gZmFs
c2U7CiAgICAgICAgICAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwogICAgICAgICAgICAgYm9v
bCBpY29uID0gZmFsc2U7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVs
QXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBhbHRlcm5hdGUsIGljb24pOwotICAgICAgICAg
ICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5bGVTaGVldCAmJiAhYWx0ZXJuYXRlICYmICFpY29u
OworICAgICAgICAgICAgYm9vbCBkbnNQcmVmZXRjaCA9IGZhbHNlOworICAgICAgICAgICAgSFRN
TExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZSh2YWx1ZSwgc3R5bGVTaGVldCwgYWx0
ZXJuYXRlLCBpY29uLCBkbnNQcmVmZXRjaCk7CisgICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hl
ZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5hdGUgJiYgIWljb24gJiYgIWRuc1ByZWZldGNoOwog
ICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSBjaGFyc2V0QXR0cikKICAgICAgICAgICAg
IG1fY2hhcnNldCA9IHZhbHVlOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDM2NjIxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NTIsNiArOTUyLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0
IEtVUkwmIHVybCwKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3Mo
KTsKICAgICBkb2N1bWVudC0+ZG9jTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKHNldHRpbmdz
ICYmIHNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CiAKKyAgICBpZiAobV9k
b2N1bWVudExvYWRlcikgeworICAgICAgICBTdHJpbmcgZG5zUHJlZmV0Y2hDb250cm9sID0gbV9k
b2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIlgtRE5TLVByZWZldGNo
LUNvbnRyb2wiKTsKKyAgICAgICAgaWYgKCFkbnNQcmVmZXRjaENvbnRyb2wuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgZG9jdW1lbnQtPnBhcnNlRE5TUHJlZmV0Y2hDb250cm9sSGVhZGVyKGRuc1By
ZWZldGNoQ29udHJvbCk7CisgICAgfQorCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVU
CiAgICAgS1VSTCB1c2VyU3R5bGVTaGVldCA9IHNldHRpbmdzID8gc2V0dGluZ3MtPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oKSA6IEtVUkwoKTsKICAgICBpZiAoIXVzZXJTdHlsZVNoZWV0LmlzRW1w
dHkoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAkocmV2aXNpb24gMzY2MjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRE5TLmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuaCIKQEAgLTcxLDUgKzcyLDcgQEAgU3RyaW5nIEtVUkw6OmZpbGVT
eXN0ZW1QYXRoKCkgY29uc3QgeyBubwogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ETlMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRE5TLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RE5TX2gKKyNkZWZpbmUgRE5TX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
U3RyaW5nOworCisgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsK
K30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxpbiBKYWNrc29uICA8Y29sbGluakB3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkROUy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHByZWZldGNoRE5TKGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24g
MzY2MjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJETlMuaCIKICNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKQEAgLTExMiw2ICsxMTMsOCBAQCBmbG9hdCB1c2VySWRsZVRpbWUoKSB7IG5vdEltcGxlbWVu
dGVkKCk7CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdp
dGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9CiAKK3ZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CisKIH0KIAogLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDM2NjIxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCiAjaW5j
bHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRE5TLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKQEAgLTE4Myw0ICsxODQsNyBAQCBjb25z
dCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKSB7CiBTdHJpbmcgS1VSTDo6ZmlsZVN5
c3RlbVBhdGgoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQog
CiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVu
dHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQor
Cit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQorCiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjYyMSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA4LTA5LTE4ICBDb2xs
aW4gSmFja3NvbiAgPGNvbGxpbmpAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0byBhbmQgTWFyayBSb3dlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY5MAorCisgICAgICAgIEFkZCB0ZXN0IGZvciBETlMg
cHJlZmV0Y2ggY29udHJvbC4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0
Y2gtY29udHJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbWlz
Yy9kbnMtcHJlZmV0Y2gtY29udHJvbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocDogQWRkZWQuCisKIDIwMDgt
MDktMTggIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Ru
cy1wcmVmZXRjaC1jb250cm9sLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL21pc2MvZG5zLXByZWZldGNoLWNvbnRyb2wtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Rucy1wcmVmZXRjaC1jb250
cm9sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUaGlzIGlzIGEg
dGVzdCBvZiBETlMgcHJlZmV0Y2ggY29udHJvbC4gSXQncyBjb25zaWRlcmVkIGEgcGFzcyBpZiBp
dCBkb2Vzbid0IGNyYXNoLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgbWFudWFsIHRlc3Qgb2Yg
RE5TIHByZWZldGNoIHVzaW5nIGEgbmV0d29ya2luZyBtb25pdG9yaW5nIHRvb2wuCitCcm93c2Vy
cyBNQVkgZG8gYSBETlMgcHJlZmV0Y2ggb24gdGhlIGZvbGxvd2luZyBsaW5rczoKKworICAgICAg
ICAgICAgICAKK0Jyb3dzZXJzIFNIT1VMRCBOT1QgZG8gYSBETlMgbG9va3VwIGZvciB0aGUgZm9s
bG93aW5nIGxpbmtzIHVudGlsIHRoZXkgYXJlIGNsaWNrZWQ6CisKKyAgICAgICAgICAKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29udHJvbC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9kbnMtcHJlZmV0Y2gtY29u
dHJvbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL2Ru
cy1wcmVmZXRjaC1jb250cm9sLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKzxo
dG1sPgorPHN0eWxlPgorICAgIGlmcmFtZQorICAgIHsgCisgICAgICAgIGhlaWdodDogNjBweDsK
KyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgIH0KKzwvc3R5bGU+Cis8c2NyaXB0PgorICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBmdW5jdGlvbiBlbWl0RnJhbWVXaXRoQ29udGVudHMoY29u
dGVudHMpIAorICAgIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIjxpZnJhbWUgc3JjPVwiZGF0
YTp0ZXh0L2h0bWwsIiArIGNvbnRlbnRzICsgIlwiPjwvaWZyYW1lPiIpOworICAgIH0KKyAgICBm
dW5jdGlvbiBnZXRSYW5kb21Ib3N0KCkgCisgICAgeworICAgICAgICByZXR1cm4gInd3dy4iICsg
TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApICsgIi5pbnZhbGlkIjsKKyAg
ICB9CisgICAgZnVuY3Rpb24gZW1pdEZyYW1lRm9yU2NoZW1lKHNjaGVtZSkgCisgICAgeworICAg
ICAgICB2YXIgaG9zdCA9IGdldFJhbmRvbUhvc3QoKTsKKyAgICAgICAgdmFyIGNvbnRlbnRzID0g
IjxtZXRhIGh0dHAtZXF1aXY9J3gtZG5zLXByZWZldGNoLWNvbnRyb2wnIGNvbnRlbnQ9J29uJz4i
OworICAgICAgICBjb250ZW50cyArPSAiPGEgaHJlZj0nIiArIHNjaGVtZSArICIvLyIgKyBob3N0
ICsgIic+IiArIGhvc3QgKyAiPC9hPiI7CisgICAgICAgIGVtaXRGcmFtZVdpdGhDb250ZW50cyhj
b250ZW50cyk7CisgICAgfQorICAgIGZ1bmN0aW9uIGVtaXRGcmFtZUZvck1hbnVhbEROU1ByZWZl
dGNoKGRuc1ByZWZldGNoQ29udHJvbCkgCisgICAgeworICAgICAgICB2YXIgaG9zdCA9IGdldFJh
bmRvbUhvc3QoKTsKKyAgICAgICAgdmFyIGNvbnRlbnRzID0gIiI7CisgICAgICAgIGlmIChkbnNQ
cmVmZXRjaENvbnRyb2wpCisgICAgICAgICAgICBjb250ZW50cyArPSAiPG1ldGEgaHR0cC1lcXVp
dj0neC1kbnMtcHJlZmV0Y2gtY29udHJvbCcgY29udGVudD0nIiArIGRuc1ByZWZldGNoQ29udHJv
bCArICInPiI7CisgICAgICAgIGNvbnRlbnRzICs9ICI8bGluayByZWw9J2Rucy1wcmVmZXRjaCcg
aHJlZj0nLy8iICsgaG9zdCArICInPiIgKyBob3N0OworICAgICAgICBlbWl0RnJhbWVXaXRoQ29u
dGVudHMoY29udGVudHMpOworICAgIH0KKzwvc2NyaXB0PgorPGJvZHk+Cis8cD5UaGlzIGlzIGEg
dGVzdCBvZiBETlMgcHJlZmV0Y2ggY29udHJvbC4gSXQncyBjb25zaWRlcmVkIGEgcGFzcyBpZiBp
dCBkb2Vzbid0IGNyYXNoLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIAorYSBtYW51YWwgdGVzdCBv
ZiBETlMgcHJlZmV0Y2ggdXNpbmcgYSBuZXR3b3JraW5nIG1vbml0b3JpbmcgdG9vbC48L3A+CisK
KzxwPlRoZSBmb2xsb3dpbmcgZnJhbWVzIGNvbnRhaW4gbGlua3MgdGhhdCBhcmUgZXhwZWN0ZWQg
dG8gdHJpZ2dlciBhIEROUyBwcmVmZXRjaC48L3A+CisKKzxkaXY+CisgIDxzY3JpcHQ+ZW1pdEZy
YW1lRm9yTWFudWFsRE5TUHJlZmV0Y2goIm9uIik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJh
bWVGb3JNYW51YWxETlNQcmVmZXRjaCgib2ZmIik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJh
bWVGb3JTY2hlbWUoImh0dHA6Iik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JTY2hl
bWUoImh0dHBzOiIpPC9zY3JpcHQ+CisgIDxzY3JpcHQ+ZW1pdEZyYW1lRm9yU2NoZW1lKCJmdHA6
Iik8L3NjcmlwdD4KKyAgPHNjcmlwdD5lbWl0RnJhbWVGb3JTY2hlbWUoIiIpPC9zY3JpcHQ+Cisg
IDxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwIj48L2lmcmFt
ZT4KKyAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFs
dWU9b24iPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0iaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9t
aXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9b24iPjwvaWZyYW1l
PgorPC9kaXY+CisKKzxwIHN0eWxlPSdjbGVhcjogbGVmdCc+VGhlIGZvbGxvd2luZyBmcmFtZXMg
Y29udGFpbiBsaW5rcyB0aGF0IGFyZSBub3QgZXhwZWN0ZWQgdG8gY2F1c2UgYSBETlMgcHJlZmV0
Y2guPC9wPgorCis8ZGl2PgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1j
b250cm9sLnBocD92YWx1ZT1vZmYiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0icmVzb3VyY2Vz
L2Rucy1wcmVmZXRjaC1jb250cm9sLnBocD92YWx1ZT1mb28iPjwvaWZyYW1lPgorICA8aWZyYW1l
IHNyYz0iaHR0cHM6Ly8xMjcuMC4wLjE6ODQ0My9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gt
Y29udHJvbC5waHAiPjwvaWZyYW1lPgorICA8aWZyYW1lIHNyYz0iaHR0cHM6Ly8xMjcuMC4wLjE6
ODQ0My9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHA/dmFsdWU9b2ZmIj48
L2lmcmFtZT4KKyAgPGlmcmFtZSBzcmM9Imh0dHBzOi8vMTI3LjAuMC4xOjg0NDMvbWlzYy9yZXNv
dXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwP3ZhbHVlPWZvbyI+PC9pZnJhbWU+CisgIDxp
ZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRtbCw8bWV0YSBodHRwLWVxdWl2PSd4LWRucy1wcmVmZXRj
aC1jb250cm9sJyB2YWx1ZT0nb2ZmJz48aWZyYW1lIHNyYz0naHR0cDovLzEyNy4wLjAuMTo4MDAw
L21pc2MvcmVzb3VyY2VzL2Rucy1wcmVmZXRjaC1jb250cm9sLnBocCc+PC9pZnJhbWU+Ij48L2lm
cmFtZT4KKyAgPGlmcmFtZSBzcmM9ImRhdGE6dGV4dC9odG1sLDxtZXRhIGh0dHAtZXF1aXY9J3gt
ZG5zLXByZWZldGNoLWNvbnRyb2wnIHZhbHVlPSdvbic+PGlmcmFtZSBzcmM9J2h0dHBzOi8vMTI3
LjAuMC4xOjg0NDMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhwJz48L2lm
cmFtZT4iPjwvaWZyYW1lPgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5zLXByZWZldGNoLWNvbnRyb2wucGhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvZG5z
LXByZWZldGNoLWNvbnRyb2wucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9taXNjL3Jlc291cmNlcy9kbnMtcHJlZmV0Y2gtY29udHJvbC5waHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTUgQEAKKzw/cGhwCisgIGlmICgkX0dFVFsndmFsdWUnXSA9PSAnb2ZmJykK
KyAgICBoZWFkZXIoJ1gtRE5TLVByZWZldGNoLUNvbnRyb2w6IG9mZicpOworICBlbHNlIGlmICgk
X0dFVFsndmFsdWUnXSA9PSAnb24nKQorICAgIGhlYWRlcignWC1ETlMtUHJlZmV0Y2gtQ29udHJv
bDogb24nKTsKKyAgZWxzZSBpZiAoJF9HRVRbJ3ZhbHVlJ10gPT0gJ2ZvbycpCisgICAgaGVhZGVy
KCdYLUROUy1QcmVmZXRjaC1Db250cm9sOiBmb28nKTsKKworJGZha2VfZG9tYWluID0gInd3dy4i
IC4gcmFuZCgpIC4gIi5pbnZhbGlkIjsKKz8+Cis8aHRtbD4KKzxib2R5PgorPGEgaHJlZj0naHR0
cDovLzw/cGhwIGVjaG8gJGZha2VfZG9tYWluID8+Lyc+PD9waHAgZWNobyAkZmFrZV9kb21haW4g
Pz48L2E+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>