<?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>37443</bug_id>
          
          <creation_ts>2010-04-12 02:25:48 -0700</creation_ts>
          <short_desc>CSSStyleSelector should pass through origin information when determined if link visited</short_desc>
          <delta_ts>2022-07-11 17:10:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>0</everconfirmed>
          <reporter name="Daniel Clifford">danno</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>jorlow</cc>
    
    <cc>jwhitecm115</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>211579</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 02:25:48 -0700</bug_when>
    <thetext>For very privacy aware users, a SafeHistory-like options should be available for WebKit, i.e. it should be possible to make sure that links are only shown as visited if they have already been visited from a link embedded in a page with the same origin. In order to do this, WebKit, specifically in CSSStyleSelector, needs to provide additional information to the hash function used to compute a URL&apos;s hash in the visited history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211607</commentid>
    <comment_count>1</comment_count>
      <attachid>53163</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 08:10:16 -0700</bug_when>
    <thetext>Created attachment 53163
Pass through origin information about embedding page to be used for SafeHistory-style visited link display</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211614</commentid>
    <comment_count>2</comment_count>
      <attachid>53167</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 08:25:20 -0700</bug_when>
    <thetext>Created attachment 53167
Fix broken comment still left in previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211615</commentid>
    <comment_count>3</comment_count>
      <attachid>53168</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 08:26:12 -0700</bug_when>
    <thetext>Created attachment 53168
Actually mark the patch attachment as a patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211616</commentid>
    <comment_count>4</comment_count>
      <attachid>53163</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-04-12 08:28:53 -0700</bug_when>
    <thetext>Comment on attachment 53163
Pass through origin information about embedding page to be used for SafeHistory-style visited link display

If you want something reviewed, set the r? flag.  If you want it landed if it&apos;s good, set the commit-queue? flag.

There are probably better reviewers than me.  Here are some drive by comments, though.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 49b8d1f..18a9231 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,32 @@
&gt; +2010-04-12  Daniel Clifford  &lt;danno@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +		Pass origin information to the hash function used to compute a

Don&apos;t use tabs.  Follow the following style:

&quot;&quot;&quot;
subject
bug url

longer
description
here
&quot;&quot;&quot;&quot;

&gt; +		the hash for a visited url so that it&apos;s possible to implement
&gt; +		a SafeHistory-like policy for only displaying links as visited
&gt; +		if they are embedded in a page with the same-origin.
&gt; +
&gt; +		https://bugs.webkit.org/show_bug.cgi?id=37443
&gt; +
&gt; +        * platform/chromium/ChromiumBridge.h:
&gt; +        * platform/chromium/LinkHashChromium.cpp:
&gt; +        (WebCore::visitedLinkHash):
&gt; +        * platform/LinkHash.cpp:
&gt; +        (WebCore::visitedLinkHash):
&gt; +        * platform/LinkHash.h:
&gt; +        * platform/chromium/ChromiumBridge.h:
&gt; +        * platform/chromium/LinkHashChromium.cpp:
&gt; +        (WebCore::visitedLinkHash):
&gt; +        * page/PageGroup.cpp:
&gt; +        (WebCore::PageGroup::addVisitedLink):
&gt; +        * dom/Document.cpp:
&gt; +        (WebCore::Document::safeHistoryOrigin):
&gt; +        * dom/Document.h:
&gt; +        * css/CSSStyleSelector.cpp:
&gt; +        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState):
&gt; +        (WebCore::CSSStyleSelector::SelectorChecker::visitedStateChanged):
&gt; +
&gt;  2010-03-30  Dumitru Daniliuc  &lt;dumi@chromium.org&gt;
&gt;  
&gt;          Reviewed by Dimitri Glazkov.
&gt; diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp
&gt; index 1ed4eda..2c529c5 100644
&gt; --- a/WebCore/css/CSSStyleSelector.cpp
&gt; +++ b/WebCore/css/CSSStyleSelector.cpp
&gt; @@ -900,11 +900,11 @@ PseudoState CSSStyleSelector::SelectorChecker::checkPseudoState(Element* element
&gt;      if (iface)
&gt;          return iface-&gt;historyContains(QString(reinterpret_cast&lt;QChar*&gt;(url.data()), url.size())) ? PseudoVisited : PseudoLink;
&gt;  
&gt; -    LinkHash hash = visitedLinkHash(url.data(), url.size());
&gt; +    LinkHash hash = visitedLinkHash(document, url.data(), url.size());
&gt;      if (!hash)
&gt;          return PseudoLink;
&gt;  #else
&gt; -    LinkHash hash = visitedLinkHash(m_document-&gt;baseURL(), *attr);
&gt; +    LinkHash hash = visitedLinkHash(m_document, *attr);

Don&apos;t you mean 

&gt;      if (!hash)
&gt;          return PseudoLink;
&gt;  #endif
&gt; @@ -6106,7 +6106,7 @@ void CSSStyleSelector::SelectorChecker::visitedStateChanged(LinkHash visitedHash
&gt;          return;
&gt;      for (Node* node = m_document; node; node = node-&gt;traverseNextNode()) {
&gt;          const AtomicString* attr = linkAttribute(node);
&gt; -        if (attr &amp;&amp; visitedLinkHash(m_document-&gt;baseURL(), *attr) == visitedHash)
&gt; +        if (attr &amp;&amp; visitedLinkHash(m_document, *attr) == visitedHash)
&gt;              node-&gt;setNeedsStyleRecalc();
&gt;      }
&gt;  }
&gt; diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
&gt; index acabb2c..e2afa7d 100644
&gt; --- a/WebCore/dom/Document.cpp
&gt; +++ b/WebCore/dom/Document.cpp
&gt; @@ -1997,6 +1997,11 @@ void Document::setBaseElementURL(const KURL&amp; baseElementURL)
&gt;      updateBaseURL();
&gt;  }
&gt;  
&gt; +String Document::safeHistoryOrigin() const
&gt; +{
&gt; +  return securityOrigin()-&gt;toString(); 

If all this does is toString() then you probably shoudln&apos;t make your own function unless you have a really good reason.

Also, are you OK with this being &quot;null&quot; in some cases (like embedded sandboxed iframes)?  I doubt it.

&gt; +}
&gt; +  
&gt;  void Document::updateBaseURL()
&gt;  {
&gt;      // DOM 3 Core: When the Document supports the feature &quot;HTML&quot; [DOM Level 2 HTML], the base URI is computed using
&gt; diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
&gt; index e92237a..05bda78 100644
&gt; --- a/WebCore/dom/Document.h
&gt; +++ b/WebCore/dom/Document.h
&gt; @@ -513,6 +513,8 @@ public:
&gt;      // Setting the BaseElementURL will change the baseURL.
&gt;      void setBaseElementURL(const KURL&amp;);
&gt;  
&gt; +    String safeHistoryOrigin() const;
&gt; +  
&gt;      const String&amp; baseTarget() const { return m_baseTarget; }
&gt;      // Setting the BaseElementTarget will change the baseTarget.
&gt;      void setBaseElementTarget(const String&amp; baseTarget) { m_baseTarget = baseTarget; }
&gt; diff --git a/WebCore/page/PageGroup.cpp b/WebCore/page/PageGroup.cpp
&gt; index f6c746d..f42d945 100644
&gt; --- a/WebCore/page/PageGroup.cpp
&gt; +++ b/WebCore/page/PageGroup.cpp
&gt; @@ -151,14 +151,14 @@ void PageGroup::addVisitedLink(const KURL&amp; url)
&gt;      if (!shouldTrackVisitedLinks)
&gt;          return;
&gt;      ASSERT(!url.isEmpty());
&gt; -    addVisitedLink(visitedLinkHash(url.string().characters(), url.string().length()));
&gt; +    addVisitedLink(visitedLinkHash(NULL, url.string().characters(), url.string().length()));

s/NULL/0/

&gt;  }
&gt;  
&gt;  void PageGroup::addVisitedLink(const UChar* characters, size_t length)
&gt;  {
&gt;      if (!shouldTrackVisitedLinks)
&gt;          return;
&gt; -    addVisitedLink(visitedLinkHash(characters, length));
&gt; +    addVisitedLink(visitedLinkHash(NULL, characters, length));

s/NULL/0/

&gt;  }
&gt;  
&gt;  void PageGroup::removeVisitedLinks()
&gt; diff --git a/WebCore/platform/LinkHash.cpp b/WebCore/platform/LinkHash.cpp
&gt; index c399aa2..3ddf071 100644
&gt; --- a/WebCore/platform/LinkHash.cpp
&gt; +++ b/WebCore/platform/LinkHash.cpp
&gt; @@ -147,7 +147,7 @@ static inline bool needsTrailingSlash(const UChar* characters, unsigned length)
&gt;      return pos == length;
&gt;  }
&gt;  
&gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length)
&gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned length)
&gt;  {
&gt;    return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url, length));
&gt;  }
&gt; @@ -208,14 +208,14 @@ void visitedURL(const KURL&amp; base, const AtomicString&amp; attributeURL, Vector&lt;UChar
&gt;      return;
&gt;  }
&gt;  
&gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt; +LinkHash visitedLinkHash(const Document* document, const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt;  {
&gt;      Vector&lt;UChar, 512&gt; url;
&gt;      visitedURL(base, attributeURL, url);
&gt;      if (url.isEmpty())
&gt;          return 0;
&gt;  
&gt; -    return visitedLinkHash(url.data(), url.size());
&gt; +    return visitedLinkHash(document, url.data(), url.size());
&gt;  }
&gt;  
&gt;  }  // namespace WebCore
&gt; diff --git a/WebCore/platform/LinkHash.h b/WebCore/platform/LinkHash.h
&gt; index 2756654..543353a 100644
&gt; --- a/WebCore/platform/LinkHash.h
&gt; +++ b/WebCore/platform/LinkHash.h
&gt; @@ -30,6 +30,7 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; +class Document;
&gt;  class AtomicString;
&gt;  class KURL;
&gt;  
&gt; @@ -54,13 +55,13 @@ struct LinkHashHash {
&gt;  };
&gt;  
&gt;  // Returns the has of the string that will be used for visited link coloring.
&gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length);
&gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned urlLength);

Do not put a variable name when it&apos;s obvious (like document).

&gt;  
&gt;  // Resolves the potentially relative URL &quot;attributeURL&quot; relative to the given
&gt;  // base URL, and returns the hash of the string that will be used for visited
&gt;  // link coloring. It will return the special value of 0 if attributeURL does not
&gt;  // look like a relative URL.
&gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL);
&gt; +LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL);

Ditto.

&gt;  
&gt;  // Resolves the potentially relative URL &quot;attributeURL&quot; relative to the given
&gt;  // base URL, and returns the hash of the string that will be used for visited.
&gt; diff --git a/WebCore/platform/chromium/ChromiumBridge.h b/WebCore/platform/chromium/ChromiumBridge.h
&gt; index e582241..e40992b 100644
&gt; --- a/WebCore/platform/chromium/ChromiumBridge.h
&gt; +++ b/WebCore/platform/chromium/ChromiumBridge.h
&gt; @@ -222,8 +222,9 @@ namespace WebCore {
&gt;          static void traceEventEnd(const char* name, void* id, const char* extra);
&gt;  
&gt;          // Visited links ------------------------------------------------------
&gt; -        static LinkHash visitedLinkHash(const UChar* url, unsigned length);
&gt; -        static LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL);
&gt; +        static LinkHash visitedCanonicalizedLinkHash(const Document* document, const char* canonicalizedURL, unsigned canonicalizedURLLength);
&gt; +        static LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned urlLength);
&gt; +        static LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL);

ditto * 3

&gt;          static bool isLinkVisited(LinkHash);
&gt;  
&gt;          // Widget -------------------------------------------------------------
&gt; diff --git a/WebCore/platform/chromium/LinkHashChromium.cpp b/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; index 9cb93ea..9a001bc 100644
&gt; --- a/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; +++ b/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; @@ -35,14 +35,14 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length)
&gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned length)
&gt;  {
&gt; -    return ChromiumBridge::visitedLinkHash(url, length);
&gt; +    return ChromiumBridge::visitedLinkHash(document, url, length);
&gt;  }
&gt;  
&gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt; +LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL)
&gt;  {
&gt; -    return ChromiumBridge::visitedLinkHash(base, attributeURL);
&gt; +    return ChromiumBridge::visitedLinkHash(document, attributeURL);
&gt;  }
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index e387f72..a67c6d1 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,20 @@
&gt; +2010-04-12  Daniel Clifford  &lt;danno@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +		Pass origin information to the hash function used to compute a
&gt; +		the hash for a visited url so that it&apos;s possible to implement
&gt; +		a SafeHistory-like policy for only displaying links as visited
&gt; +		if they are embedded in a page with the same-origin.
&gt; +
&gt; +		https://bugs.webkit.org/show_bug.cgi?id=37443
&gt; +
&gt; +        * src/ChromiumBridge.cpp:
&gt; +        (WebCore::ChromiumBridge::visitedCanonicalizedLinkHash):
&gt; +        (WebCore::ChromiumBridge::visitedLinkHash):
&gt; +        * public/WebKitClient.h:
&gt; +        (WebKit::WebKitClient::visitedLinkHash):
&gt; +
&gt;  2010-04-07  Pavel Feldman  &lt;pfeldman@chromium.org&gt;
&gt;  
&gt;          Reviewed by Yury Semikhatsky.
&gt; diff --git a/WebKit/chromium/public/WebKitClient.h b/WebKit/chromium/public/WebKitClient.h
&gt; index b2aaf2e..1375147 100644
&gt; --- a/WebKit/chromium/public/WebKitClient.h
&gt; +++ b/WebKit/chromium/public/WebKitClient.h
&gt; @@ -123,7 +123,12 @@ public:
&gt;      // link coloring.
&gt;      virtual unsigned long long visitedLinkHash(
&gt;          const char* canonicalURL, size_t length) { return 0; }
&gt; -
&gt; +  
&gt; +    // Returns the hash for the given canonicalized URL for use in visited
&gt; +    // link coloring.
&gt; +    virtual unsigned long long visitedLinkHash(
&gt; +        const char* canonicalURL, size_t canonicalURLLength, const char* origin, size_t originLength) { return visitedLinkHash(canonicalURL, canonicalURLLength); }

Don&apos;t wrap.  If anything, put the definition of the function on subsequent lines.

&gt; +  
&gt;      // Returns whether the given link hash is in the user&apos;s history.  The
&gt;      // hash must have been generated by calling VisitedLinkHash().
&gt;      virtual bool isLinkVisited(unsigned long long linkHash) { return false; }
&gt; @@ -253,7 +258,6 @@ public:
&gt;      // Disable/Enable sudden termination.
&gt;      virtual void suddenTerminationChanged(bool enabled) { }
&gt;  
&gt; -
&gt;      // System --------------------------------------------------------------
&gt;  
&gt;      // Returns a value such as &quot;en-US&quot;.
&gt; diff --git a/WebKit/chromium/src/ChromiumBridge.cpp b/WebKit/chromium/src/ChromiumBridge.cpp
&gt; index cffd166..45bfcc5 100644
&gt; --- a/WebKit/chromium/src/ChromiumBridge.cpp
&gt; +++ b/WebKit/chromium/src/ChromiumBridge.cpp
&gt; @@ -632,24 +632,41 @@ void ChromiumBridge::traceEventEnd(const char* name, void* id, const char* extra
&gt;  
&gt;  // Visited Links --------------------------------------------------------------
&gt;  
&gt; -LinkHash ChromiumBridge::visitedLinkHash(const UChar* url, unsigned length)
&gt; +LinkHash ChromiumBridge::visitedCanonicalizedLinkHash(const Document* document, const char* canonicalizedURL, unsigned canonicalizedURLLength)

Do we REALLY need to pass in char* and unsigned (which should be size_t, right?) params here?  Unless this is the common case and there&apos;s no other way, passing in KURLs seems much safer.

&gt; +{
&gt; +    const char* originData = NULL;

= 0;

&gt; +    int originLength = 0;
&gt; +    WebCString str;
&gt; +    if (document != NULL )

if (!document)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211618</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-04-12 08:36:32 -0700</bug_when>
    <thetext>What is the purpose of this patch? Is it at all desirable now that bug 24300 has been fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211629</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 09:02:14 -0700</bug_when>
    <thetext>Yes, it is desirable to have this extra information. My understanding of dhyatt&apos;s patch is that it does effectively prevents a whole class of programatic (JavaScript) attacks, but it isn&apos;t bulletproof. As long as links are visibly colored in a way that doesn&apos;t strictly honor same origin, then there social engineering attacks that are still possible. phishing.evil.com could create a page with links to the 20 most popular banking sites, where the unvisited color is the page background and the visited color is blue, all of this with some displayed text that is unrelated to banking that seems to be for some other purpose. You only see the link of the URL that is also in your  history, that&apos;s the one you click on, at which point evil.com know&apos;s which bank you use.

Admittedly, these are attacks are probably less effective to do on a large-scale. However a same-origin policy like SafeHistory still provides extra protection for users who are willing to sacrifice a bit of usability for privacy. The idea would be that it is off by default but can be activated as a preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211639</commentid>
    <comment_count>7</comment_count>
      <attachid>53172</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-12 09:24:32 -0700</bug_when>
    <thetext>Created attachment 53172
Fix some of the style nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211914</commentid>
    <comment_count>8</comment_count>
      <attachid>53239</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-13 05:39:35 -0700</bug_when>
    <thetext>Created attachment 53239
merge with latest version and incorporate jorlow&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211940</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-13 07:20:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 53163 [details])
&gt; If you want something reviewed, set the r? flag.  If you want it landed if it&apos;s
&gt; good, set the commit-queue? flag.
&gt; 
&gt; There are probably better reviewers than me.  Here are some drive by comments,
&gt; though.
&gt; 
&gt; &gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; &gt; index 49b8d1f..18a9231 100644
&gt; &gt; --- a/WebCore/ChangeLog
&gt; &gt; +++ b/WebCore/ChangeLog
&gt; &gt; @@ -1,3 +1,32 @@
&gt; &gt; +2010-04-12  Daniel Clifford  &lt;danno@google.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +		Pass origin information to the hash function used to compute a
&gt; 
&gt; Don&apos;t use tabs.  Follow the following style:
&gt; 
&gt; &quot;&quot;&quot;
&gt; subject
&gt; bug url
&gt; 
&gt; longer
&gt; description
&gt; here
&gt; &quot;&quot;&quot;&quot;

Done

&gt; 
&gt; &gt; +		the hash for a visited url so that it&apos;s possible to implement
&gt; &gt; +		a SafeHistory-like policy for only displaying links as visited
&gt; &gt; +		if they are embedded in a page with the same-origin.
&gt; &gt; +
&gt; &gt; +		https://bugs.webkit.org/show_bug.cgi?id=37443
&gt; &gt; +
&gt; &gt; +        * platform/chromium/ChromiumBridge.h:
&gt; &gt; +        * platform/chromium/LinkHashChromium.cpp:
&gt; &gt; +        (WebCore::visitedLinkHash):
&gt; &gt; +        * platform/LinkHash.cpp:
&gt; &gt; +        (WebCore::visitedLinkHash):
&gt; &gt; +        * platform/LinkHash.h:
&gt; &gt; +        * platform/chromium/ChromiumBridge.h:
&gt; &gt; +        * platform/chromium/LinkHashChromium.cpp:
&gt; &gt; +        (WebCore::visitedLinkHash):
&gt; &gt; +        * page/PageGroup.cpp:
&gt; &gt; +        (WebCore::PageGroup::addVisitedLink):
&gt; &gt; +        * dom/Document.cpp:
&gt; &gt; +        (WebCore::Document::safeHistoryOrigin):
&gt; &gt; +        * dom/Document.h:
&gt; &gt; +        * css/CSSStyleSelector.cpp:
&gt; &gt; +        (WebCore::CSSStyleSelector::SelectorChecker::checkPseudoState):
&gt; &gt; +        (WebCore::CSSStyleSelector::SelectorChecker::visitedStateChanged):
&gt; &gt; +
&gt; &gt;  2010-03-30  Dumitru Daniliuc  &lt;dumi@chromium.org&gt;
&gt; &gt;  
&gt; &gt;          Reviewed by Dimitri Glazkov.
&gt; &gt; diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp
&gt; &gt; index 1ed4eda..2c529c5 100644
&gt; &gt; --- a/WebCore/css/CSSStyleSelector.cpp
&gt; &gt; +++ b/WebCore/css/CSSStyleSelector.cpp
&gt; &gt; @@ -900,11 +900,11 @@ PseudoState CSSStyleSelector::SelectorChecker::checkPseudoState(Element* element
&gt; &gt;      if (iface)
&gt; &gt;          return iface-&gt;historyContains(QString(reinterpret_cast&lt;QChar*&gt;(url.data()), url.size())) ? PseudoVisited : PseudoLink;
&gt; &gt;  
&gt; &gt; -    LinkHash hash = visitedLinkHash(url.data(), url.size());
&gt; &gt; +    LinkHash hash = visitedLinkHash(document, url.data(), url.size());
&gt; &gt;      if (!hash)
&gt; &gt;          return PseudoLink;
&gt; &gt;  #else
&gt; &gt; -    LinkHash hash = visitedLinkHash(m_document-&gt;baseURL(), *attr);
&gt; &gt; +    LinkHash hash = visitedLinkHash(m_document, *attr);
&gt; 
&gt; Don&apos;t you mean 

I think you meant that I use m_document for both calls, Done.

&gt; 
&gt; &gt;      if (!hash)
&gt; &gt;          return PseudoLink;
&gt; &gt;  #endif
&gt; &gt; @@ -6106,7 +6106,7 @@ void CSSStyleSelector::SelectorChecker::visitedStateChanged(LinkHash visitedHash
&gt; &gt;          return;
&gt; &gt;      for (Node* node = m_document; node; node = node-&gt;traverseNextNode()) {
&gt; &gt;          const AtomicString* attr = linkAttribute(node);
&gt; &gt; -        if (attr &amp;&amp; visitedLinkHash(m_document-&gt;baseURL(), *attr) == visitedHash)
&gt; &gt; +        if (attr &amp;&amp; visitedLinkHash(m_document, *attr) == visitedHash)
&gt; &gt;              node-&gt;setNeedsStyleRecalc();
&gt; &gt;      }
&gt; &gt;  }
&gt; &gt; diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
&gt; &gt; index acabb2c..e2afa7d 100644
&gt; &gt; --- a/WebCore/dom/Document.cpp
&gt; &gt; +++ b/WebCore/dom/Document.cpp
&gt; &gt; @@ -1997,6 +1997,11 @@ void Document::setBaseElementURL(const KURL&amp; baseElementURL)
&gt; &gt;      updateBaseURL();
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +String Document::safeHistoryOrigin() const
&gt; &gt; +{
&gt; &gt; +  return securityOrigin()-&gt;toString(); 
&gt; 
&gt; If all this does is toString() then you probably shoudln&apos;t make your own
&gt; function unless you have a really good reason.
&gt; 
&gt; Also, are you OK with this being &quot;null&quot; in some cases (like embedded sandboxed
&gt; iframes)?  I doubt it.

I removed the extra function.

I think &quot;null&quot; is actually ok. the patch simply passes the null origin string through to the link hasher, and the null will ensure the link&apos;s hash is unique WRT all other origins. on the link hash builder side, all URLs with null referrers are not added to the safe history hash, so they will never be marked as visited if safe history is active. 

&gt; 
&gt; &gt; +}
&gt; &gt; +  
&gt; &gt;  void Document::updateBaseURL()
&gt; &gt;  {
&gt; &gt;      // DOM 3 Core: When the Document supports the feature &quot;HTML&quot; [DOM Level 2 HTML], the base URI is computed using
&gt; &gt; diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
&gt; &gt; index e92237a..05bda78 100644
&gt; &gt; --- a/WebCore/dom/Document.h
&gt; &gt; +++ b/WebCore/dom/Document.h
&gt; &gt; @@ -513,6 +513,8 @@ public:
&gt; &gt;      // Setting the BaseElementURL will change the baseURL.
&gt; &gt;      void setBaseElementURL(const KURL&amp;);
&gt; &gt;  
&gt; &gt; +    String safeHistoryOrigin() const;
&gt; &gt; +  
&gt; &gt;      const String&amp; baseTarget() const { return m_baseTarget; }
&gt; &gt;      // Setting the BaseElementTarget will change the baseTarget.
&gt; &gt;      void setBaseElementTarget(const String&amp; baseTarget) { m_baseTarget = baseTarget; }
&gt; &gt; diff --git a/WebCore/page/PageGroup.cpp b/WebCore/page/PageGroup.cpp
&gt; &gt; index f6c746d..f42d945 100644
&gt; &gt; --- a/WebCore/page/PageGroup.cpp
&gt; &gt; +++ b/WebCore/page/PageGroup.cpp
&gt; &gt; @@ -151,14 +151,14 @@ void PageGroup::addVisitedLink(const KURL&amp; url)
&gt; &gt;      if (!shouldTrackVisitedLinks)
&gt; &gt;          return;
&gt; &gt;      ASSERT(!url.isEmpty());
&gt; &gt; -    addVisitedLink(visitedLinkHash(url.string().characters(), url.string().length()));
&gt; &gt; +    addVisitedLink(visitedLinkHash(NULL, url.string().characters(), url.string().length()));
&gt; 
&gt; s/NULL/0/
Done.

&gt; 
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  void PageGroup::addVisitedLink(const UChar* characters, size_t length)
&gt; &gt;  {
&gt; &gt;      if (!shouldTrackVisitedLinks)
&gt; &gt;          return;
&gt; &gt; -    addVisitedLink(visitedLinkHash(characters, length));
&gt; &gt; +    addVisitedLink(visitedLinkHash(NULL, characters, length));
&gt; 
&gt; s/NULL/0/
Done.

&gt; 
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  void PageGroup::removeVisitedLinks()
&gt; &gt; diff --git a/WebCore/platform/LinkHash.cpp b/WebCore/platform/LinkHash.cpp
&gt; &gt; index c399aa2..3ddf071 100644
&gt; &gt; --- a/WebCore/platform/LinkHash.cpp
&gt; &gt; +++ b/WebCore/platform/LinkHash.cpp
&gt; &gt; @@ -147,7 +147,7 @@ static inline bool needsTrailingSlash(const UChar* characters, unsigned length)
&gt; &gt;      return pos == length;
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length)
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned length)
&gt; &gt;  {
&gt; &gt;    return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url, length));
&gt; &gt;  }
&gt; &gt; @@ -208,14 +208,14 @@ void visitedURL(const KURL&amp; base, const AtomicString&amp; attributeURL, Vector&lt;UChar
&gt; &gt;      return;
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt; &gt;  {
&gt; &gt;      Vector&lt;UChar, 512&gt; url;
&gt; &gt;      visitedURL(base, attributeURL, url);
&gt; &gt;      if (url.isEmpty())
&gt; &gt;          return 0;
&gt; &gt;  
&gt; &gt; -    return visitedLinkHash(url.data(), url.size());
&gt; &gt; +    return visitedLinkHash(document, url.data(), url.size());
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  }  // namespace WebCore
&gt; &gt; diff --git a/WebCore/platform/LinkHash.h b/WebCore/platform/LinkHash.h
&gt; &gt; index 2756654..543353a 100644
&gt; &gt; --- a/WebCore/platform/LinkHash.h
&gt; &gt; +++ b/WebCore/platform/LinkHash.h
&gt; &gt; @@ -30,6 +30,7 @@
&gt; &gt;  
&gt; &gt;  namespace WebCore {
&gt; &gt;  
&gt; &gt; +class Document;
&gt; &gt;  class AtomicString;
&gt; &gt;  class KURL;
&gt; &gt;  
&gt; &gt; @@ -54,13 +55,13 @@ struct LinkHashHash {
&gt; &gt;  };
&gt; &gt;  
&gt; &gt;  // Returns the has of the string that will be used for visited link coloring.
&gt; &gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length);
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned urlLength);
&gt; 
&gt; Do not put a variable name when it&apos;s obvious (like document).
Done.

&gt; 
&gt; &gt;  
&gt; &gt;  // Resolves the potentially relative URL &quot;attributeURL&quot; relative to the given
&gt; &gt;  // base URL, and returns the hash of the string that will be used for visited
&gt; &gt;  // link coloring. It will return the special value of 0 if attributeURL does not
&gt; &gt;  // look like a relative URL.
&gt; &gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL);
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL);
&gt; 
&gt; Ditto.
Done.

&gt; 
&gt; &gt;  
&gt; &gt;  // Resolves the potentially relative URL &quot;attributeURL&quot; relative to the given
&gt; &gt;  // base URL, and returns the hash of the string that will be used for visited.
&gt; &gt; diff --git a/WebCore/platform/chromium/ChromiumBridge.h b/WebCore/platform/chromium/ChromiumBridge.h
&gt; &gt; index e582241..e40992b 100644
&gt; &gt; --- a/WebCore/platform/chromium/ChromiumBridge.h
&gt; &gt; +++ b/WebCore/platform/chromium/ChromiumBridge.h
&gt; &gt; @@ -222,8 +222,9 @@ namespace WebCore {
&gt; &gt;          static void traceEventEnd(const char* name, void* id, const char* extra);
&gt; &gt;  
&gt; &gt;          // Visited links ------------------------------------------------------
&gt; &gt; -        static LinkHash visitedLinkHash(const UChar* url, unsigned length);
&gt; &gt; -        static LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL);
&gt; &gt; +        static LinkHash visitedCanonicalizedLinkHash(const Document* document, const char* canonicalizedURL, unsigned canonicalizedURLLength);
&gt; &gt; +        static LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned urlLength);
&gt; &gt; +        static LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL);
&gt; 
&gt; ditto * 3
Done.

&gt; 
&gt; &gt;          static bool isLinkVisited(LinkHash);
&gt; &gt;  
&gt; &gt;          // Widget -------------------------------------------------------------
&gt; &gt; diff --git a/WebCore/platform/chromium/LinkHashChromium.cpp b/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; &gt; index 9cb93ea..9a001bc 100644
&gt; &gt; --- a/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; &gt; +++ b/WebCore/platform/chromium/LinkHashChromium.cpp
&gt; &gt; @@ -35,14 +35,14 @@
&gt; &gt;  
&gt; &gt;  namespace WebCore {
&gt; &gt;  
&gt; &gt; -LinkHash visitedLinkHash(const UChar* url, unsigned length)
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const UChar* url, unsigned length)
&gt; &gt;  {
&gt; &gt; -    return ChromiumBridge::visitedLinkHash(url, length);
&gt; &gt; +    return ChromiumBridge::visitedLinkHash(document, url, length);
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; -LinkHash visitedLinkHash(const KURL&amp; base, const AtomicString&amp; attributeURL)
&gt; &gt; +LinkHash visitedLinkHash(const Document* document, const AtomicString&amp; attributeURL)
&gt; &gt;  {
&gt; &gt; -    return ChromiumBridge::visitedLinkHash(base, attributeURL);
&gt; &gt; +    return ChromiumBridge::visitedLinkHash(document, attributeURL);
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  } // namespace WebCore
&gt; &gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; &gt; index e387f72..a67c6d1 100644
&gt; &gt; --- a/WebKit/chromium/ChangeLog
&gt; &gt; +++ b/WebKit/chromium/ChangeLog
&gt; &gt; @@ -1,3 +1,20 @@
&gt; &gt; +2010-04-12  Daniel Clifford  &lt;danno@google.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +		Pass origin information to the hash function used to compute a
&gt; &gt; +		the hash for a visited url so that it&apos;s possible to implement
&gt; &gt; +		a SafeHistory-like policy for only displaying links as visited
&gt; &gt; +		if they are embedded in a page with the same-origin.
&gt; &gt; +
&gt; &gt; +		https://bugs.webkit.org/show_bug.cgi?id=37443
&gt; &gt; +
&gt; &gt; +        * src/ChromiumBridge.cpp:
&gt; &gt; +        (WebCore::ChromiumBridge::visitedCanonicalizedLinkHash):
&gt; &gt; +        (WebCore::ChromiumBridge::visitedLinkHash):
&gt; &gt; +        * public/WebKitClient.h:
&gt; &gt; +        (WebKit::WebKitClient::visitedLinkHash):
&gt; &gt; +
&gt; &gt;  2010-04-07  Pavel Feldman  &lt;pfeldman@chromium.org&gt;
&gt; &gt;  
&gt; &gt;          Reviewed by Yury Semikhatsky.
&gt; &gt; diff --git a/WebKit/chromium/public/WebKitClient.h b/WebKit/chromium/public/WebKitClient.h
&gt; &gt; index b2aaf2e..1375147 100644
&gt; &gt; --- a/WebKit/chromium/public/WebKitClient.h
&gt; &gt; +++ b/WebKit/chromium/public/WebKitClient.h
&gt; &gt; @@ -123,7 +123,12 @@ public:
&gt; &gt;      // link coloring.
&gt; &gt;      virtual unsigned long long visitedLinkHash(
&gt; &gt;          const char* canonicalURL, size_t length) { return 0; }
&gt; &gt; -
&gt; &gt; +  
&gt; &gt; +    // Returns the hash for the given canonicalized URL for use in visited
&gt; &gt; +    // link coloring.
&gt; &gt; +    virtual unsigned long long visitedLinkHash(
&gt; &gt; +        const char* canonicalURL, size_t canonicalURLLength, const char* origin, size_t originLength) { return visitedLinkHash(canonicalURL, canonicalURLLength); }
&gt; 
&gt; Don&apos;t wrap.  If anything, put the definition of the function on subsequent
&gt; lines.
Done.

&gt; 
&gt; &gt; +  
&gt; &gt;      // Returns whether the given link hash is in the user&apos;s history.  The
&gt; &gt;      // hash must have been generated by calling VisitedLinkHash().
&gt; &gt;      virtual bool isLinkVisited(unsigned long long linkHash) { return false; }
&gt; &gt; @@ -253,7 +258,6 @@ public:
&gt; &gt;      // Disable/Enable sudden termination.
&gt; &gt;      virtual void suddenTerminationChanged(bool enabled) { }
&gt; &gt;  
&gt; &gt; -
&gt; &gt;      // System --------------------------------------------------------------
&gt; &gt;  
&gt; &gt;      // Returns a value such as &quot;en-US&quot;.
&gt; &gt; diff --git a/WebKit/chromium/src/ChromiumBridge.cpp b/WebKit/chromium/src/ChromiumBridge.cpp
&gt; &gt; index cffd166..45bfcc5 100644
&gt; &gt; --- a/WebKit/chromium/src/ChromiumBridge.cpp
&gt; &gt; +++ b/WebKit/chromium/src/ChromiumBridge.cpp
&gt; &gt; @@ -632,24 +632,41 @@ void ChromiumBridge::traceEventEnd(const char* name, void* id, const char* extra
&gt; &gt;  
&gt; &gt;  // Visited Links --------------------------------------------------------------
&gt; &gt;  
&gt; &gt; -LinkHash ChromiumBridge::visitedLinkHash(const UChar* url, unsigned length)
&gt; &gt; +LinkHash ChromiumBridge::visitedCanonicalizedLinkHash(const Document* document, const char* canonicalizedURL, unsigned canonicalizedURLLength)
&gt; 
&gt; Do we REALLY need to pass in char* and unsigned (which should be size_t,
&gt; right?) params here?  Unless this is the common case and there&apos;s no other way,
&gt; passing in KURLs seems much safer.
I am following the style of the existing visitedXXX functions, and I don&apos;t see an easy way to make these calls KURL based without needlessly complicating the code. There is no KURL available and one would have to be constructed explicitly, only to extract the character buffers again when passing them through to Chromium, which expects buffers. 

&gt; 
&gt; &gt; +{
&gt; &gt; +    const char* originData = NULL;
&gt; 
&gt; = 0;
Done.

&gt; 
&gt; &gt; +    int originLength = 0;
&gt; &gt; +    WebCString str;
&gt; &gt; +    if (document != NULL )
&gt; 
&gt; if (!document)
Done: if (document)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211942</commentid>
    <comment_count>10</comment_count>
      <attachid>53248</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-13 07:21:59 -0700</bug_when>
    <thetext>Created attachment 53248
Incorporate more review feedback, fix remaining style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211947</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-13 07:34:34 -0700</bug_when>
    <thetext>Attachment 53248 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1590497</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211954</commentid>
    <comment_count>12</comment_count>
      <attachid>53252</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-13 08:03:50 -0700</bug_when>
    <thetext>Created attachment 53252
fix qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211955</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-13 08:13:36 -0700</bug_when>
    <thetext>Attachment 53252 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1717042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211960</commentid>
    <comment_count>14</comment_count>
      <attachid>53254</attachid>
    <who name="Daniel Clifford">danno</who>
    <bug_when>2010-04-13 08:24:07 -0700</bug_when>
    <thetext>Created attachment 53254
fix another problem with the qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211961</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-13 08:27:53 -0700</bug_when>
    <thetext>Attachment 53252 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1692174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212029</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-04-13 11:47:21 -0700</bug_when>
    <thetext>Just to make it clear, my comments were just drive-by ones....I&apos;m not going to r+ or r- this because it&apos;s more of a policy decision of &quot;do we want this&quot; at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212033</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-13 11:53:38 -0700</bug_when>
    <thetext>Is this necessary with hyatt&apos;s recent visited link work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212035</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-13 11:55:02 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Is this necessary with hyatt&apos;s recent visited link work?

Never mind, didn&apos;t read the all the comments.  This seems like overkill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212375</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-04-14 09:25:22 -0700</bug_when>
    <thetext>Instead of passing a Document*, I think it would be better to pass a SecurityOrigin*.  At the WebKit API level, you would then pass a WebSecurityOrigin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240464</commentid>
    <comment_count>20</comment_count>
      <attachid>53254</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-20 10:32:31 -0700</bug_when>
    <thetext>Comment on attachment 53254
fix another problem with the qt build

Let&apos;s stick with dhyatt&apos;s approach for now.  If we decide late that it&apos;s insufficient, we can revisit this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53163</attachid>
            <date>2010-04-12 08:10:16 -0700</date>
            <delta_ts>2010-04-12 09:24:32 -0700</delta_ts>
            <desc>Pass through origin information about embedding page to be used for SafeHistory-style visited link display</desc>
            <filename>SHWB.patch</filename>
            <type>text/plain</type>
            <size>13480</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uMThhOTIzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworCQlQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1
c2VkIHRvIGNvbXB1dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0
J3MgcG9zc2libGUgdG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9y
IG9ubHkgZGlzcGxheWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVk
IGluIGEgcGFnZSB3aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRMaW5r
SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNo
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrUHNl
dWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggMWVkNGVkYS4uMmM1MjljNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTkwMCwxMSArOTAwLDExIEBAIFBzZXVkb1N0
YXRlIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tQc2V1ZG9TdGF0ZShF
bGVtZW50KiBlbGVtZW50CiAgICAgaWYgKGlmYWNlKQogICAgICAgICByZXR1cm4gaWZhY2UtPmhp
c3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgp
KSwgdXJsLnNpemUoKSkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiAKLSAgICBMaW5r
SGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAg
IExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQsIHVybC5kYXRhKCksIHVy
bC5zaXplKCkpOwogICAgIGlmICghaGFzaCkKICAgICAgICAgcmV0dXJuIFBzZXVkb0xpbms7CiAj
ZWxzZQotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFz
ZVVSTCgpLCAqYXR0cik7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2Rv
Y3VtZW50LCAqYXR0cik7CiAgICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gUHNldWRvTGlu
azsKICNlbmRpZgpAQCAtNjEwNiw3ICs2MTA2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gK
ICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAgICAgICAgaWYgKGF0dHIgJiYg
dmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09IHZpc2l0ZWRI
YXNoKQorICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0
dHIpID09IHZpc2l0ZWRIYXNoKQogICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhY2FiYjJjLi5lMmFmYTdkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0xOTk3LDYgKzE5OTcsMTEgQEAgdm9pZCBEb2N1bWVudDo6c2V0QmFzZUVsZW1lbnRVUkwo
Y29uc3QgS1VSTCYgYmFzZUVsZW1lbnRVUkwpCiAgICAgdXBkYXRlQmFzZVVSTCgpOwogfQogCitT
dHJpbmcgRG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3QKK3sKKyAgcmV0dXJuIHNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7IAorfQorICAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0
ZUJhc2VVUkwoKQogewogICAgIC8vIERPTSAzIENvcmU6IFdoZW4gdGhlIERvY3VtZW50IHN1cHBv
cnRzIHRoZSBmZWF0dXJlICJIVE1MIiBbRE9NIExldmVsIDIgSFRNTF0sIHRoZSBiYXNlIFVSSSBp
cyBjb21wdXRlZCB1c2luZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZTkyMjM3YS4uMDViZGE3OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC01
MTMsNiArNTEzLDggQEAgcHVibGljOgogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VVJM
IHdpbGwgY2hhbmdlIHRoZSBiYXNlVVJMLgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRVUkwoY29u
c3QgS1VSTCYpOwogCisgICAgU3RyaW5nIHNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3Q7CisgIAog
ICAgIGNvbnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdl
dDsgfQogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VGFyZ2V0IHdpbGwgY2hhbmdlIHRo
ZSBiYXNlVGFyZ2V0LgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRUYXJnZXQoY29uc3QgU3RyaW5n
JiBiYXNlVGFyZ2V0KSB7IG1fYmFzZVRhcmdldCA9IGJhc2VUYXJnZXQ7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
aW5kZXggZjZjNzQ2ZC4uZjQyZDk0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTE1MSwxNCArMTUxLDE0
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCiAgICAg
aWYgKCFzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VS
VCghdXJsLmlzRW1wdHkoKSk7Ci0gICAgYWRkVmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKHVy
bC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIHVybC5zdHJpbmcoKS5sZW5ndGgoKSkpOworICAgIGFk
ZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaChOVUxMLCB1cmwuc3RyaW5nKCkuY2hhcmFjdGVy
cygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmFkZFZp
c2l0ZWRMaW5rKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAg
IGlmICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgYWRk
VmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKE5VTEwsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwog
fQogCiB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVmlzaXRlZExpbmtzKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5j
cHAKaW5kZXggYzM5OWFhMi4uM2RkZjA3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIHBvcyA9PSBsZW5n
dGg7CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgIHJldHVybiBB
bHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCh1
cmwsIGxlbmd0aCkpOwogfQpAQCAtMjA4LDE0ICsyMDgsMTQgQEAgdm9pZCB2aXNpdGVkVVJMKGNv
bnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBWZWN0b3I8
VUNoYXIKICAgICByZXR1cm47CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBL
VVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK0xpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIGJhc2Us
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIFZlY3RvcjxVQ2hhciwg
NTEyPiB1cmw7CiAgICAgdmlzaXRlZFVSTChiYXNlLCBhdHRyaWJ1dGVVUkwsIHVybCk7CiAgICAg
aWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHZpc2l0
ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICByZXR1cm4gdmlzaXRlZExp
bmtIYXNoKGRvY3VtZW50LCB1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaCBi
L1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAppbmRleCAyNzU2NjU0Li41NDMzNTNhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9MaW5rSGFzaC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBLVVJMOwogCkBAIC01
NCwxMyArNTUsMTMgQEAgc3RydWN0IExpbmtIYXNoSGFzaCB7CiB9OwogCiAvLyBSZXR1cm5zIHRo
ZSBoYXMgb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5rIGNv
bG9yaW5nLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2ln
bmVkIGxlbmd0aCk7CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOwogCiAvLyBSZXNv
bHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZl
IHRvIHRoZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBz
dHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKIC8vIGxpbmsgY29sb3JpbmcuIEl0
IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJMIGRvZXMg
bm90CiAvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hh
c2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwor
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogCiAvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFs
bHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgogLy8g
YmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJl
IHVzZWQgZm9yIHZpc2l0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmgKaW5kZXggZTU4MjI0MS4uZTQwOTkyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1CcmlkZ2UuaApAQCAtMjIyLDggKzIyMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2
b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwogCiAgICAgICAgIC8vIFZpc2l0ZWQgbGlua3Mg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFz
aChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7Cisg
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWdu
ZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCk7CisgICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1
bnNpZ25lZCB1cmxMZW5ndGgpOworICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVVUkwpOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVkKExpbmtIYXNoKTsKIAog
ICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlu
a0hhc2hDaHJvbWl1bS5jcHAKaW5kZXggOWNiOTNlYS4uOWEwMDFiYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKHVybCwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChkb2N1
bWVudCwgdXJsLCBsZW5ndGgpOwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3Qg
S1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRM
aW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCBhdHRyaWJ1dGVVUkwpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlMzg3ZjcyLi5hNjdjNmQxIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZmb3JkICA8ZGFubm9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCQlQ
YXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNvbXB1
dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0J3MgcG9zc2libGUg
dG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9yIG9ubHkgZGlzcGxh
eWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVkIGluIGEgcGFnZSB3
aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKToK
KyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dENsaWVudDo6dmlzaXRlZExpbmtIYXNoKToKKwogMjAxMC0wNC0wNyAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKaW5kZXggYjJhYWYyZS4u
MTM3NTE0NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCkBAIC0xMjMsNyAr
MTIzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBsaW5rIGNvbG9yaW5nLgogICAgIHZpcnR1YWwgdW5z
aWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5rSGFzaCgKICAgICAgICAgY29uc3QgY2hhciogY2Fu
b25pY2FsVVJMLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiAwOyB9Ci0KKyAgCisgICAgLy8gUmV0
dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4g
dmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgdmlzaXRlZExpbmtIYXNoKAorICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkws
IHNpemVfdCBjYW5vbmljYWxVUkxMZW5ndGgsIGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9y
aWdpbkxlbmd0aCkgeyByZXR1cm4gdmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25p
Y2FsVVJMTGVuZ3RoKTsgfQorICAKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGxp
bmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhpc3RvcnkuICBUaGUKICAgICAvLyBoYXNoIG11c3Qg
aGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxsaW5nIFZpc2l0ZWRMaW5rSGFzaCgpLgogICAgIHZp
cnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKHVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rSGFzaCkgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTI1Myw3ICsyNTgsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzYWJs
ZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJt
aW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKSB7IH0KIAotCiAgICAgLy8gU3lzdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKICAgICAvLyBSZXR1cm5zIGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMiLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCBjZmZkMTY2Li40NWJmY2M1IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAtNjMyLDI0ICs2MzIsNDEgQEAgdm9pZCBD
aHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwg
Y29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rSGFzaCBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVk
IGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkQ2Fub25pY2FsaXplZExp
bmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXpl
ZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFy
KiBvcmlnaW5EYXRhID0gTlVMTDsKKyAgICBpbnQgb3JpZ2luTGVuZ3RoID0gMDsKKyAgICBXZWJD
U3RyaW5nIHN0cjsKKyAgICBpZiAoZG9jdW1lbnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBz
dHIgPSBkb2N1bWVudC0+c2FmZUhpc3RvcnlPcmlnaW4oKS51dGY4KCk7CisgICAgICAgIG9yaWdp
bkRhdGEgPSBzdHIuZGF0YSgpOworICAgICAgICBvcmlnaW5MZW5ndGggPSBzdHIubGVuZ3RoKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goY2Fu
b25pY2FsaXplZFVSTCwgY2Fub25pY2FsaXplZFVSTExlbmd0aCwgb3JpZ2luRGF0YSwgb3JpZ2lu
TGVuZ3RoKTsKK30KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKICAgICB1
cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxfdXRpbDo6Q2Fub25pY2FsaXpl
KHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJuIDA7ICAv
LyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworICAKKyAg
ICByZXR1cm4gdmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChkb2N1bWVudCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZp
c2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAorTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwg
YW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwogICAgIC8vIHRoZSBlbWJlZGRlci4gV2Ug
Y291bGQgY3JlYXRlIGEgR1VSTCBvYmplY3QgZnJvbSB0aGUgYmFzZSBhbmQgcmVzb2x2ZQogICAg
IC8vIHRoZSByZWxhdGl2ZSBVUkwgdGhhdCB3YXksIGJ1dCBjYWxsaW5nIHRoZSBsb3dlci1sZXZl
bCBmdW5jdGlvbnMKLSAgICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9jYXRp
b24gaW4gbW9zdCBjYXNlcy4KKyAgICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFs
bG9jYXRpb24gaW4gbW9zdCBjYXNlZnJhbWUuaHMuCiAgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91
dHB1dDwyMDQ4PiBidWZmZXI7CiAgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOworICAgIGNv
bnN0IEtVUkwmIGJhc2UgPSBkb2N1bWVudC0+YmFzZVVSTCgpOwogCiAjaWYgVVNFKEdPT0dMRVVS
TCkKICAgICBjb25zdCBDU3RyaW5nJiBjc3RyID0gYmFzZS51dGY4U3RyaW5nKCk7CkBAIC02NzIs
NyArNjg5LDcgQEAgTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25z
dCBLVVJMJiBiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVVUkwubGVuZ3RoKCksIDAsICZidWZmZXIsICZwYXJzZWQpKQogICAgICAgICByZXR1cm4gMDsg
IC8vIEludmFsaWQgcmVzb2x2ZWQgVVJMLgogCi0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52
aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICByZXR1
cm4gdmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChkb2N1bWVudCwgYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLmxlbmd0aCgpKTsKIH0KIAogYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRl
ZChMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2gpCg==
</data>
<flag name="review"
          id="36811"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53167</attachid>
            <date>2010-04-12 08:25:20 -0700</date>
            <delta_ts>2010-04-12 08:26:12 -0700</delta_ts>
            <desc>Fix broken comment still left in previous patch</desc>
            <filename>SHWK2.patch</filename>
            <type>application/octet-stream</type>
            <size>13338</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uMThhOTIzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworCQlQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1
c2VkIHRvIGNvbXB1dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0
J3MgcG9zc2libGUgdG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9y
IG9ubHkgZGlzcGxheWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVk
IGluIGEgcGFnZSB3aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRMaW5r
SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNo
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrUHNl
dWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggMWVkNGVkYS4uMmM1MjljNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTkwMCwxMSArOTAwLDExIEBAIFBzZXVkb1N0
YXRlIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tQc2V1ZG9TdGF0ZShF
bGVtZW50KiBlbGVtZW50CiAgICAgaWYgKGlmYWNlKQogICAgICAgICByZXR1cm4gaWZhY2UtPmhp
c3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgp
KSwgdXJsLnNpemUoKSkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiAKLSAgICBMaW5r
SGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAg
IExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQsIHVybC5kYXRhKCksIHVy
bC5zaXplKCkpOwogICAgIGlmICghaGFzaCkKICAgICAgICAgcmV0dXJuIFBzZXVkb0xpbms7CiAj
ZWxzZQotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFz
ZVVSTCgpLCAqYXR0cik7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2Rv
Y3VtZW50LCAqYXR0cik7CiAgICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gUHNldWRvTGlu
azsKICNlbmRpZgpAQCAtNjEwNiw3ICs2MTA2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gK
ICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAgICAgICAgaWYgKGF0dHIgJiYg
dmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09IHZpc2l0ZWRI
YXNoKQorICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0
dHIpID09IHZpc2l0ZWRIYXNoKQogICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhY2FiYjJjLi5lMmFmYTdkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0xOTk3LDYgKzE5OTcsMTEgQEAgdm9pZCBEb2N1bWVudDo6c2V0QmFzZUVsZW1lbnRVUkwo
Y29uc3QgS1VSTCYgYmFzZUVsZW1lbnRVUkwpCiAgICAgdXBkYXRlQmFzZVVSTCgpOwogfQogCitT
dHJpbmcgRG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3QKK3sKKyAgcmV0dXJuIHNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7IAorfQorICAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0
ZUJhc2VVUkwoKQogewogICAgIC8vIERPTSAzIENvcmU6IFdoZW4gdGhlIERvY3VtZW50IHN1cHBv
cnRzIHRoZSBmZWF0dXJlICJIVE1MIiBbRE9NIExldmVsIDIgSFRNTF0sIHRoZSBiYXNlIFVSSSBp
cyBjb21wdXRlZCB1c2luZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZTkyMjM3YS4uMDViZGE3OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC01
MTMsNiArNTEzLDggQEAgcHVibGljOgogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VVJM
IHdpbGwgY2hhbmdlIHRoZSBiYXNlVVJMLgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRVUkwoY29u
c3QgS1VSTCYpOwogCisgICAgU3RyaW5nIHNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3Q7CisgIAog
ICAgIGNvbnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdl
dDsgfQogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VGFyZ2V0IHdpbGwgY2hhbmdlIHRo
ZSBiYXNlVGFyZ2V0LgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRUYXJnZXQoY29uc3QgU3RyaW5n
JiBiYXNlVGFyZ2V0KSB7IG1fYmFzZVRhcmdldCA9IGJhc2VUYXJnZXQ7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
aW5kZXggZjZjNzQ2ZC4uZjQyZDk0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTE1MSwxNCArMTUxLDE0
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCiAgICAg
aWYgKCFzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VS
VCghdXJsLmlzRW1wdHkoKSk7Ci0gICAgYWRkVmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKHVy
bC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIHVybC5zdHJpbmcoKS5sZW5ndGgoKSkpOworICAgIGFk
ZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaChOVUxMLCB1cmwuc3RyaW5nKCkuY2hhcmFjdGVy
cygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmFkZFZp
c2l0ZWRMaW5rKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAg
IGlmICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgYWRk
VmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKE5VTEwsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwog
fQogCiB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVmlzaXRlZExpbmtzKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5j
cHAKaW5kZXggYzM5OWFhMi4uM2RkZjA3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIHBvcyA9PSBsZW5n
dGg7CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgIHJldHVybiBB
bHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCh1
cmwsIGxlbmd0aCkpOwogfQpAQCAtMjA4LDE0ICsyMDgsMTQgQEAgdm9pZCB2aXNpdGVkVVJMKGNv
bnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBWZWN0b3I8
VUNoYXIKICAgICByZXR1cm47CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBL
VVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK0xpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIGJhc2Us
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIFZlY3RvcjxVQ2hhciwg
NTEyPiB1cmw7CiAgICAgdmlzaXRlZFVSTChiYXNlLCBhdHRyaWJ1dGVVUkwsIHVybCk7CiAgICAg
aWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHZpc2l0
ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICByZXR1cm4gdmlzaXRlZExp
bmtIYXNoKGRvY3VtZW50LCB1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaCBi
L1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAppbmRleCAyNzU2NjU0Li41NDMzNTNhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9MaW5rSGFzaC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBLVVJMOwogCkBAIC01
NCwxMyArNTUsMTMgQEAgc3RydWN0IExpbmtIYXNoSGFzaCB7CiB9OwogCiAvLyBSZXR1cm5zIHRo
ZSBoYXMgb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5rIGNv
bG9yaW5nLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2ln
bmVkIGxlbmd0aCk7CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOwogCiAvLyBSZXNv
bHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZl
IHRvIHRoZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBz
dHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKIC8vIGxpbmsgY29sb3JpbmcuIEl0
IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJMIGRvZXMg
bm90CiAvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hh
c2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwor
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogCiAvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFs
bHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgogLy8g
YmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJl
IHVzZWQgZm9yIHZpc2l0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmgKaW5kZXggZTU4MjI0MS4uZTQwOTkyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1CcmlkZ2UuaApAQCAtMjIyLDggKzIyMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2
b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwogCiAgICAgICAgIC8vIFZpc2l0ZWQgbGlua3Mg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFz
aChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7Cisg
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWdu
ZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCk7CisgICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1
bnNpZ25lZCB1cmxMZW5ndGgpOworICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVVUkwpOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVkKExpbmtIYXNoKTsKIAog
ICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlu
a0hhc2hDaHJvbWl1bS5jcHAKaW5kZXggOWNiOTNlYS4uOWEwMDFiYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKHVybCwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChkb2N1
bWVudCwgdXJsLCBsZW5ndGgpOwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3Qg
S1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRM
aW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCBhdHRyaWJ1dGVVUkwpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlMzg3ZjcyLi5hNjdjNmQxIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZmb3JkICA8ZGFubm9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCQlQ
YXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNvbXB1
dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0J3MgcG9zc2libGUg
dG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9yIG9ubHkgZGlzcGxh
eWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVkIGluIGEgcGFnZSB3
aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKToK
KyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dENsaWVudDo6dmlzaXRlZExpbmtIYXNoKToKKwogMjAxMC0wNC0wNyAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKaW5kZXggYjJhYWYyZS4u
MTM3NTE0NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCkBAIC0xMjMsNyAr
MTIzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBsaW5rIGNvbG9yaW5nLgogICAgIHZpcnR1YWwgdW5z
aWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5rSGFzaCgKICAgICAgICAgY29uc3QgY2hhciogY2Fu
b25pY2FsVVJMLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiAwOyB9Ci0KKyAgCisgICAgLy8gUmV0
dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4g
dmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgdmlzaXRlZExpbmtIYXNoKAorICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkws
IHNpemVfdCBjYW5vbmljYWxVUkxMZW5ndGgsIGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9y
aWdpbkxlbmd0aCkgeyByZXR1cm4gdmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25p
Y2FsVVJMTGVuZ3RoKTsgfQorICAKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGxp
bmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhpc3RvcnkuICBUaGUKICAgICAvLyBoYXNoIG11c3Qg
aGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxsaW5nIFZpc2l0ZWRMaW5rSGFzaCgpLgogICAgIHZp
cnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKHVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rSGFzaCkgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTI1Myw3ICsyNTgsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzYWJs
ZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJt
aW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKSB7IH0KIAotCiAgICAgLy8gU3lzdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKICAgICAvLyBSZXR1cm5zIGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMiLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCBjZmZkMTY2Li4wNTZiMGUzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAtNjMyLDE2ICs2MzIsMzIgQEAgdm9pZCBD
aHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwg
Y29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rSGFzaCBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVk
IGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkQ2Fub25pY2FsaXplZExp
bmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXpl
ZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFy
KiBvcmlnaW5EYXRhID0gTlVMTDsKKyAgICBpbnQgb3JpZ2luTGVuZ3RoID0gMDsKKyAgICBXZWJD
U3RyaW5nIHN0cjsKKyAgICBpZiAoZG9jdW1lbnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBz
dHIgPSBkb2N1bWVudC0+c2FmZUhpc3RvcnlPcmlnaW4oKS51dGY4KCk7CisgICAgICAgIG9yaWdp
bkRhdGEgPSBzdHIuZGF0YSgpOworICAgICAgICBvcmlnaW5MZW5ndGggPSBzdHIubGVuZ3RoKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goY2Fu
b25pY2FsaXplZFVSTCwgY2Fub25pY2FsaXplZFVSTExlbmd0aCwgb3JpZ2luRGF0YSwgb3JpZ2lu
TGVuZ3RoKTsKK30KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKICAgICB1
cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxfdXRpbDo6Q2Fub25pY2FsaXpl
KHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJuIDA7ICAv
LyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworICAKKyAg
ICByZXR1cm4gdmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChkb2N1bWVudCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZp
c2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAorTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwg
YW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwpAQCAtNjUwLDYgKzY2Niw3IEBAIExpbmtI
YXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKICAg
ICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9jYXRpb24gaW4gbW9zdCBjYXNl
cy4KICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKICAgICB1cmxf
cGFyc2U6OlBhcnNlZCBwYXJzZWQ7CisgICAgY29uc3QgS1VSTCYgYmFzZSA9IGRvY3VtZW50LT5i
YXNlVVJMKCk7CiAKICNpZiBVU0UoR09PR0xFVVJMKQogICAgIGNvbnN0IENTdHJpbmcmIGNzdHIg
PSBiYXNlLnV0ZjhTdHJpbmcoKTsKQEAgLTY3Miw3ICs2ODksNyBAQCBMaW5rSGFzaCBDaHJvbWl1
bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwg
JnBhcnNlZCkpCiAgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCiAK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgp
LCBidWZmZXIubGVuZ3RoKCkpOworICAgIHJldHVybiB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtI
YXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCiBib29s
IENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53168</attachid>
            <date>2010-04-12 08:26:12 -0700</date>
            <delta_ts>2010-04-12 09:24:32 -0700</delta_ts>
            <desc>Actually mark the patch attachment as a patch</desc>
            <filename>SHWK2.patch</filename>
            <type>text/plain</type>
            <size>13338</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uMThhOTIzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworCQlQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1
c2VkIHRvIGNvbXB1dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0
J3MgcG9zc2libGUgdG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9y
IG9ubHkgZGlzcGxheWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVk
IGluIGEgcGFnZSB3aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAg
ICAqIHBsYXRmb3JtL0xpbmtIYXNoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRMaW5r
SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNo
KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
R3JvdXA6OmFkZFZpc2l0ZWRMaW5rKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrUHNl
dWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToKKwogMjAxMC0wMy0zMCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkg
R2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggMWVkNGVkYS4uMmM1MjljNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTkwMCwxMSArOTAwLDExIEBAIFBzZXVkb1N0
YXRlIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tQc2V1ZG9TdGF0ZShF
bGVtZW50KiBlbGVtZW50CiAgICAgaWYgKGlmYWNlKQogICAgICAgICByZXR1cm4gaWZhY2UtPmhp
c3RvcnlDb250YWlucyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPih1cmwuZGF0YSgp
KSwgdXJsLnNpemUoKSkpID8gUHNldWRvVmlzaXRlZCA6IFBzZXVkb0xpbms7CiAKLSAgICBMaW5r
SGFzaCBoYXNoID0gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAg
IExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQsIHVybC5kYXRhKCksIHVy
bC5zaXplKCkpOwogICAgIGlmICghaGFzaCkKICAgICAgICAgcmV0dXJuIFBzZXVkb0xpbms7CiAj
ZWxzZQotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFz
ZVVSTCgpLCAqYXR0cik7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2Rv
Y3VtZW50LCAqYXR0cik7CiAgICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1cm4gUHNldWRvTGlu
azsKICNlbmRpZgpAQCAtNjEwNiw3ICs2MTA2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gK
ICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nKiBhdHRyID0gbGlua0F0dHJpYnV0ZShub2RlKTsKLSAgICAgICAgaWYgKGF0dHIgJiYg
dmlzaXRlZExpbmtIYXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpID09IHZpc2l0ZWRI
YXNoKQorICAgICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0
dHIpID09IHZpc2l0ZWRIYXNoKQogICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhY2FiYjJjLi5lMmFmYTdkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0xOTk3LDYgKzE5OTcsMTEgQEAgdm9pZCBEb2N1bWVudDo6c2V0QmFzZUVsZW1lbnRVUkwo
Y29uc3QgS1VSTCYgYmFzZUVsZW1lbnRVUkwpCiAgICAgdXBkYXRlQmFzZVVSTCgpOwogfQogCitT
dHJpbmcgRG9jdW1lbnQ6OnNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3QKK3sKKyAgcmV0dXJuIHNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7IAorfQorICAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0
ZUJhc2VVUkwoKQogewogICAgIC8vIERPTSAzIENvcmU6IFdoZW4gdGhlIERvY3VtZW50IHN1cHBv
cnRzIHRoZSBmZWF0dXJlICJIVE1MIiBbRE9NIExldmVsIDIgSFRNTF0sIHRoZSBiYXNlIFVSSSBp
cyBjb21wdXRlZCB1c2luZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggZTkyMjM3YS4uMDViZGE3OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC01
MTMsNiArNTEzLDggQEAgcHVibGljOgogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VVJM
IHdpbGwgY2hhbmdlIHRoZSBiYXNlVVJMLgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRVUkwoY29u
c3QgS1VSTCYpOwogCisgICAgU3RyaW5nIHNhZmVIaXN0b3J5T3JpZ2luKCkgY29uc3Q7CisgIAog
ICAgIGNvbnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdl
dDsgfQogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VGFyZ2V0IHdpbGwgY2hhbmdlIHRo
ZSBiYXNlVGFyZ2V0LgogICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRUYXJnZXQoY29uc3QgU3RyaW5n
JiBiYXNlVGFyZ2V0KSB7IG1fYmFzZVRhcmdldCA9IGJhc2VUYXJnZXQ7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
aW5kZXggZjZjNzQ2ZC4uZjQyZDk0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKQEAgLTE1MSwxNCArMTUxLDE0
IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayhjb25zdCBLVVJMJiB1cmwpCiAgICAg
aWYgKCFzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VS
VCghdXJsLmlzRW1wdHkoKSk7Ci0gICAgYWRkVmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKHVy
bC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIHVybC5zdHJpbmcoKS5sZW5ndGgoKSkpOworICAgIGFk
ZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaChOVUxMLCB1cmwuc3RyaW5nKCkuY2hhcmFjdGVy
cygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmFkZFZp
c2l0ZWRMaW5rKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAg
IGlmICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgYWRk
VmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKE5VTEwsIGNoYXJhY3RlcnMsIGxlbmd0aCkpOwog
fQogCiB2b2lkIFBhZ2VHcm91cDo6cmVtb3ZlVmlzaXRlZExpbmtzKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5j
cHAKaW5kZXggYzM5OWFhMi4uM2RkZjA3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9M
aW5rSGFzaC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIHBvcyA9PSBsZW5n
dGg7CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgIHJldHVybiBB
bHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCh1
cmwsIGxlbmd0aCkpOwogfQpAQCAtMjA4LDE0ICsyMDgsMTQgQEAgdm9pZCB2aXNpdGVkVVJMKGNv
bnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMLCBWZWN0b3I8
VUNoYXIKICAgICByZXR1cm47CiB9CiAKLUxpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBL
VVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKK0xpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIGJhc2Us
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIFZlY3RvcjxVQ2hhciwg
NTEyPiB1cmw7CiAgICAgdmlzaXRlZFVSTChiYXNlLCBhdHRyaWJ1dGVVUkwsIHVybCk7CiAgICAg
aWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHZpc2l0
ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICByZXR1cm4gdmlzaXRlZExp
bmtIYXNoKGRvY3VtZW50LCB1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaCBi
L1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAppbmRleCAyNzU2NjU0Li41NDMzNTNhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9MaW5rSGFzaC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBLVVJMOwogCkBAIC01
NCwxMyArNTUsMTMgQEAgc3RydWN0IExpbmtIYXNoSGFzaCB7CiB9OwogCiAvLyBSZXR1cm5zIHRo
ZSBoYXMgb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5rIGNv
bG9yaW5nLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2ln
bmVkIGxlbmd0aCk7CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOwogCiAvLyBSZXNv
bHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZl
IHRvIHRoZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBz
dHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKIC8vIGxpbmsgY29sb3JpbmcuIEl0
IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJMIGRvZXMg
bm90CiAvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hh
c2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwor
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogCiAvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFs
bHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgogLy8g
YmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJl
IHVzZWQgZm9yIHZpc2l0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJp
ZGdlLmgKaW5kZXggZTU4MjI0MS4uZTQwOTkyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1CcmlkZ2UuaApAQCAtMjIyLDggKzIyMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2
b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwogCiAgICAgICAgIC8vIFZpc2l0ZWQgbGlua3Mg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFz
aChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7Cisg
ICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWdu
ZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCk7CisgICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBVQ2hhciogdXJsLCB1
bnNpZ25lZCB1cmxMZW5ndGgpOworICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVVUkwpOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVkKExpbmtIYXNoKTsKIAog
ICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlu
a0hhc2hDaHJvbWl1bS5jcHAKaW5kZXggOWNiOTNlYS4uOWEwMDFiYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKHVybCwg
bGVuZ3RoKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChkb2N1
bWVudCwgdXJsLCBsZW5ndGgpOwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3Qg
S1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRM
aW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCBhdHRyaWJ1dGVVUkwpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlMzg3ZjcyLi5hNjdjNmQxIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZmb3JkICA8ZGFubm9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCQlQ
YXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNvbXB1
dGUgYQorCQl0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybCBzbyB0aGF0IGl0J3MgcG9zc2libGUg
dG8gaW1wbGVtZW50CisJCWEgU2FmZUhpc3RvcnktbGlrZSBwb2xpY3kgZm9yIG9ubHkgZGlzcGxh
eWluZyBsaW5rcyBhcyB2aXNpdGVkCisJCWlmIHRoZXkgYXJlIGVtYmVkZGVkIGluIGEgcGFnZSB3
aXRoIHRoZSBzYW1lLW9yaWdpbi4KKworCQlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzc0NDMKKworICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKToK
KyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYktp
dENsaWVudDo6dmlzaXRlZExpbmtIYXNoKToKKwogMjAxMC0wNC0wNyAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKaW5kZXggYjJhYWYyZS4u
MTM3NTE0NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCkBAIC0xMjMsNyAr
MTIzLDEyIEBAIHB1YmxpYzoKICAgICAvLyBsaW5rIGNvbG9yaW5nLgogICAgIHZpcnR1YWwgdW5z
aWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5rSGFzaCgKICAgICAgICAgY29uc3QgY2hhciogY2Fu
b25pY2FsVVJMLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiAwOyB9Ci0KKyAgCisgICAgLy8gUmV0
dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4g
dmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgdmlzaXRlZExpbmtIYXNoKAorICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkws
IHNpemVfdCBjYW5vbmljYWxVUkxMZW5ndGgsIGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9y
aWdpbkxlbmd0aCkgeyByZXR1cm4gdmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25p
Y2FsVVJMTGVuZ3RoKTsgfQorICAKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGxp
bmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhpc3RvcnkuICBUaGUKICAgICAvLyBoYXNoIG11c3Qg
aGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxsaW5nIFZpc2l0ZWRMaW5rSGFzaCgpLgogICAgIHZp
cnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKHVuc2lnbmVkIGxvbmcgbG9uZyBsaW5rSGFzaCkgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTI1Myw3ICsyNTgsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzYWJs
ZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJt
aW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKSB7IH0KIAotCiAgICAgLy8gU3lzdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKICAgICAvLyBSZXR1cm5zIGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMiLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCBjZmZkMTY2Li4wNTZiMGUzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAtNjMyLDE2ICs2MzIsMzIgQEAgdm9pZCBD
aHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwg
Y29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rSGFzaCBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVk
IGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkQ2Fub25pY2FsaXplZExp
bmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXpl
ZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFy
KiBvcmlnaW5EYXRhID0gTlVMTDsKKyAgICBpbnQgb3JpZ2luTGVuZ3RoID0gMDsKKyAgICBXZWJD
U3RyaW5nIHN0cjsKKyAgICBpZiAoZG9jdW1lbnQgIT0gTlVMTCApCisgICAgeworICAgICAgICBz
dHIgPSBkb2N1bWVudC0+c2FmZUhpc3RvcnlPcmlnaW4oKS51dGY4KCk7CisgICAgICAgIG9yaWdp
bkRhdGEgPSBzdHIuZGF0YSgpOworICAgICAgICBvcmlnaW5MZW5ndGggPSBzdHIubGVuZ3RoKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goY2Fu
b25pY2FsaXplZFVSTCwgY2Fub25pY2FsaXplZFVSTExlbmd0aCwgb3JpZ2luRGF0YSwgb3JpZ2lu
TGVuZ3RoKTsKK30KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKICAgICB1
cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxfdXRpbDo6Q2Fub25pY2FsaXpl
KHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJuIDA7ICAv
LyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworICAKKyAg
ICByZXR1cm4gdmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChkb2N1bWVudCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZp
c2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAorTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwg
YW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwpAQCAtNjUwLDYgKzY2Niw3IEBAIExpbmtI
YXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKICAg
ICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9jYXRpb24gaW4gbW9zdCBjYXNl
cy4KICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKICAgICB1cmxf
cGFyc2U6OlBhcnNlZCBwYXJzZWQ7CisgICAgY29uc3QgS1VSTCYgYmFzZSA9IGRvY3VtZW50LT5i
YXNlVVJMKCk7CiAKICNpZiBVU0UoR09PR0xFVVJMKQogICAgIGNvbnN0IENTdHJpbmcmIGNzdHIg
PSBiYXNlLnV0ZjhTdHJpbmcoKTsKQEAgLTY3Miw3ICs2ODksNyBAQCBMaW5rSGFzaCBDaHJvbWl1
bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwg
JnBhcnNlZCkpCiAgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCiAK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgp
LCBidWZmZXIubGVuZ3RoKCkpOworICAgIHJldHVybiB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtI
YXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCiBib29s
IENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53172</attachid>
            <date>2010-04-12 09:24:32 -0700</date>
            <delta_ts>2010-04-13 05:39:35 -0700</delta_ts>
            <desc>Fix some of the style nits</desc>
            <filename>sh3.patch</filename>
            <type>text/plain</type>
            <size>13414</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDliOGQxZi4uNzc0MTY4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMiAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5j
dGlvbiB1c2VkIHRvIGNvbXB1dGUgYSB0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NDQzCisKKyAgICAg
ICAgUGFzcyBvcmlnaW4gaW5mb3JtYXRpb24gdGhyb3VnaCB0byB0aGUgVVJMIGhhc2ggc28gaXQn
cyBwb3NzaWJsZSB0bworICAgICAgICBpbXBsZW1lbnQgYSBTYWZlSGlzdG9yeS1saWtlIHBvbGlj
eSBmb3Igb25seSBkaXNwbGF5aW5nIGxpbmtzIGFzCisgICAgICAgIHZpc2l0ZWQgaWYgdGhleSBh
cmUgZW1iZWRkZWQgaW4gYSBwYWdlIHdpdGggdGhlIHNhbWUtb3JpZ2luLgorCisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRM
aW5rSGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmspOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2FmZUhpc3RvcnlPcmln
aW4pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tQc2V1ZG9TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgorCiAyMDEwLTAz
LTMwICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCAx
ZWQ0ZWRhLi4yYzUyOWM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtOTAwLDExICs5
MDAsMTEgQEAgUHNldWRvU3RhdGUgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpj
aGVja1BzZXVkb1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQKICAgICBpZiAoaWZhY2UpCiAgICAgICAg
IHJldHVybiBpZmFjZS0+aGlzdG9yeUNvbnRhaW5zKFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxR
Q2hhcio+KHVybC5kYXRhKCkpLCB1cmwuc2l6ZSgpKSkgPyBQc2V1ZG9WaXNpdGVkIDogUHNldWRv
TGluazsKIAotICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwg
dXJsLnNpemUoKSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChkb2N1bWVu
dCwgdXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CiAgICAgaWYgKCFoYXNoKQogICAgICAgICByZXR1
cm4gUHNldWRvTGluazsKICNlbHNlCi0gICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFz
aChtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKTsKKyAgICBMaW5rSGFzaCBoYXNoID0gdmlz
aXRlZExpbmtIYXNoKG1fZG9jdW1lbnQsICphdHRyKTsKICAgICBpZiAoIWhhc2gpCiAgICAgICAg
IHJldHVybiBQc2V1ZG9MaW5rOwogI2VuZGlmCkBAIC02MTA2LDcgKzYxMDYsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5r
SGFzaCB2aXNpdGVkSGFzaAogICAgICAgICByZXR1cm47CiAgICAgZm9yIChOb2RlKiBub2RlID0g
bV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKG5vZGUpOwotICAg
ICAgICBpZiAoYXR0ciAmJiB2aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudC0+YmFzZVVSTCgpLCAq
YXR0cikgPT0gdmlzaXRlZEhhc2gpCisgICAgICAgIGlmIChhdHRyICYmIHZpc2l0ZWRMaW5rSGFz
aChtX2RvY3VtZW50LCAqYXR0cikgPT0gdmlzaXRlZEhhc2gpCiAgICAgICAgICAgICBub2RlLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGFjYWJiMmMuLmUy
YWZhN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTE5OTcsNiArMTk5NywxMSBAQCB2b2lkIERvY3VtZW50Ojpz
ZXRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCkKICAgICB1cGRhdGVC
YXNlVVJMKCk7CiB9CiAKK1N0cmluZyBEb2N1bWVudDo6c2FmZUhpc3RvcnlPcmlnaW4oKSBjb25z
dAoreworICByZXR1cm4gc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsgCit9CisgIAogdm9p
ZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiB7CiAgICAgLy8gRE9NIDMgQ29yZTogV2hlbiB0
aGUgRG9jdW1lbnQgc3VwcG9ydHMgdGhlIGZlYXR1cmUgIkhUTUwiIFtET00gTGV2ZWwgMiBIVE1M
XSwgdGhlIGJhc2UgVVJJIGlzIGNvbXB1dGVkIHVzaW5nCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBlOTIyMzdhLi4wNWJk
YTc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKQEAgLTUxMyw2ICs1MTMsOCBAQCBwdWJsaWM6CiAgICAgLy8gU2V0dGluZyB0
aGUgQmFzZUVsZW1lbnRVUkwgd2lsbCBjaGFuZ2UgdGhlIGJhc2VVUkwuCiAgICAgdm9pZCBzZXRC
YXNlRWxlbWVudFVSTChjb25zdCBLVVJMJik7CiAKKyAgICBTdHJpbmcgc2FmZUhpc3RvcnlPcmln
aW4oKSBjb25zdDsKKyAgCiAgICAgY29uc3QgU3RyaW5nJiBiYXNlVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iYXNlVGFyZ2V0OyB9CiAgICAgLy8gU2V0dGluZyB0aGUgQmFzZUVsZW1lbnRUYXJn
ZXQgd2lsbCBjaGFuZ2UgdGhlIGJhc2VUYXJnZXQuCiAgICAgdm9pZCBzZXRCYXNlRWxlbWVudFRh
cmdldChjb25zdCBTdHJpbmcmIGJhc2VUYXJnZXQpIHsgbV9iYXNlVGFyZ2V0ID0gYmFzZVRhcmdl
dDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcAppbmRleCBmNmM3NDZkLi5mZjkxNjQyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApA
QCAtMTUxLDE0ICsxNTEsMTQgQEAgdm9pZCBQYWdlR3JvdXA6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0
IEtVUkwmIHVybCkKICAgICBpZiAoIXNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICBhZGRWaXNpdGVkTGluayh2
aXNpdGVkTGlua0hhc2godXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSwgdXJsLnN0cmluZygpLmxl
bmd0aCgpKSk7CisgICAgYWRkVmlzaXRlZExpbmsodmlzaXRlZExpbmtIYXNoKDAsIHVybC5zdHJp
bmcoKS5jaGFyYWN0ZXJzKCksIHVybC5zdHJpbmcoKS5sZW5ndGgoKSkpOwogfQogCiB2b2lkIFBh
Z2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCiB7CiAgICAgaWYgKCFzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKICAgICAgICAgcmV0
dXJuOwotICAgIGFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaChjaGFyYWN0ZXJzLCBsZW5n
dGgpKTsKKyAgICBhZGRWaXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goMCwgY2hhcmFjdGVycywg
bGVuZ3RoKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjpyZW1vdmVWaXNpdGVkTGlua3MoKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L0xpbmtIYXNoLmNwcAppbmRleCBjMzk5YWEyLi4zZGRmMDcxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL0xpbmtIYXNoLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNw
cApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1RyYWlsaW5nU2xh
c2goY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICByZXR1cm4g
cG9zID09IGxlbmd0aDsKIH0KIAotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFy
KiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
ICAgcmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0ltcGw6OmNv
bXB1dGVIYXNoKHVybCwgbGVuZ3RoKSk7CiB9CkBAIC0yMDgsMTQgKzIwOCwxNCBAQCB2b2lkIHZp
c2l0ZWRVUkwoY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwsIFZlY3RvcjxVQ2hhcgogICAgIHJldHVybjsKIH0KIAotTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQor
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgVmVj
dG9yPFVDaGFyLCA1MTI+IHVybDsKICAgICB2aXNpdGVkVVJMKGJhc2UsIGF0dHJpYnV0ZVVSTCwg
dXJsKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gdmlzaXRlZExpbmtIYXNoKHVybC5kYXRhKCksIHVybC5zaXplKCkpOworICAgIHJldHVy
biB2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQsIHVybC5kYXRhKCksIHVybC5zaXplKCkpOwogfQog
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9M
aW5rSGFzaC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCmluZGV4IDI3NTY2NTQuLmE3
ZDViOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIEtV
Ukw7CiAKQEAgLTU0LDEzICs1NSwxMyBAQCBzdHJ1Y3QgTGlua0hhc2hIYXNoIHsKIH07CiAKIC8v
IFJldHVybnMgdGhlIGhhcyBvZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNp
dGVkIGxpbmsgY29sb3JpbmcuCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIq
IHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBE
b2N1bWVudCosIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIHVybExlbmd0aCk7CiAKIC8vIFJl
c29sdmVzIHRoZSBwb3RlbnRpYWxseSByZWxhdGl2ZSBVUkwgImF0dHJpYnV0ZVVSTCIgcmVsYXRp
dmUgdG8gdGhlIGdpdmVuCiAvLyBiYXNlIFVSTCwgYW5kIHJldHVybnMgdGhlIGhhc2ggb2YgdGhl
IHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZAogLy8gbGluayBjb2xvcmluZy4g
SXQgd2lsbCByZXR1cm4gdGhlIHNwZWNpYWwgdmFsdWUgb2YgMCBpZiBhdHRyaWJ1dGVVUkwgZG9l
cyBub3QKIC8vIGxvb2sgbGlrZSBhIHJlbGF0aXZlIFVSTC4KLUxpbmtIYXNoIHZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7
CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqLCBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVVSTCk7CiAKIC8vIFJlc29sdmVzIHRoZSBwb3RlbnRpYWxseSByZWxh
dGl2ZSBVUkwgImF0dHJpYnV0ZVVSTCIgcmVsYXRpdmUgdG8gdGhlIGdpdmVuCiAvLyBiYXNlIFVS
TCwgYW5kIHJldHVybnMgdGhlIGhhc2ggb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBm
b3IgdmlzaXRlZC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1CcmlkZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaApp
bmRleCBlNTgyMjQxLi44YmRiN2JlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtQnJpZGdlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bUJyaWRnZS5oCkBAIC0yMjIsOCArMjIyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlk
LCBjb25zdCBjaGFyKiBleHRyYSk7CiAKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
c3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0
IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKKyAgICAgICAg
c3RhdGljIExpbmtIYXNoIHZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2goY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBjaGFyKiBjYW5vbmljYWxpemVkVVJMLCB1bnNpZ25lZCBjYW5vbmljYWxpemVk
VVJMTGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25z
dCBEb2N1bWVudCosIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIHVybExlbmd0aCk7CisgICAg
ICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7CiAgICAgICAgIHN0YXRpYyBib29sIGlzTGlu
a1Zpc2l0ZWQoTGlua0hhc2gpOwogCiAgICAgICAgIC8vIFdpZGdldCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcAppbmRleCA5Y2I5M2VhLi45
YTAwMWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hy
b21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1
bS5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCitM
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBV
Q2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdl
Ojp2aXNpdGVkTGlua0hhc2godXJsLCBsZW5ndGgpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRn
ZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCB1cmwsIGxlbmd0aCk7CiB9CiAKLUxpbmtIYXNo
IHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVVSTCkKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewotICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGJhc2UsIGF0dHJpYnV0ZVVSTCk7CisgICAg
cmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQsIGF0dHJpYnV0
ZVVSTCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGUzODdm
NzIuLmYyZGUxYzAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA0LTEyICBE
YW5pZWwgQ2xpZmZvcmQgIDxkYW5ub0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRo
ZSBoYXNoIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQg
dXJsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0
NDMKKworICAgICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwg
aGFzaCBzbyBpdCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5
LWxpa2UgcG9saWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRl
ZCBpZiB0aGV5IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisK
KyAgICAgICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OnZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcHVibGlj
L1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRDbGllbnQ6OnZpc2l0ZWRM
aW5rSGFzaCk6CisKIDIwMTAtMDQtMDcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IGIyYWFmMmUuLmMwMzc0MjcgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtMTIzLDcgKzEyMywxMSBAQCBwdWJsaWM6
CiAgICAgLy8gbGluayBjb2xvcmluZy4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB2
aXNpdGVkTGlua0hhc2goCiAgICAgICAgIGNvbnN0IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90
IGxlbmd0aCkgeyByZXR1cm4gMDsgfQotCisgIAorICAgIC8vIFJldHVybnMgdGhlIGhhc2ggZm9y
IHRoZSBnaXZlbiBjYW5vbmljYWxpemVkIFVSTCBmb3IgdXNlIGluIHZpc2l0ZWQKKyAgICAvLyBs
aW5rIGNvbG9yaW5nLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5r
SGFzaChjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNpemVfdCBjYW5vbmljYWxVUkxMZW5ndGgs
IGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9yaWdpbkxlbmd0aCkgeyByZXR1cm4gdmlzaXRl
ZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25pY2FsVVJMTGVuZ3RoKTsgfQorICAKICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhp
c3RvcnkuICBUaGUKICAgICAvLyBoYXNoIG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxs
aW5nIFZpc2l0ZWRMaW5rSGFzaCgpLgogICAgIHZpcnR1YWwgYm9vbCBpc0xpbmtWaXNpdGVkKHVu
c2lnbmVkIGxvbmcgbG9uZyBsaW5rSGFzaCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI1Myw3ICsy
NTcsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGlzYWJsZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9u
LgogICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVk
KSB7IH0KIAotCiAgICAgLy8gU3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm5zIGEgdmFsdWUg
c3VjaCBhcyAiZW4tVVMiLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1
bUJyaWRnZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRl
eCBjZmZkMTY2Li4xOTBkNmJkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
aXVtQnJpZGdlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNw
cApAQCAtNjMyLDE2ICs2MzIsMzIgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVu
ZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlz
aXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtI
YXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVt
QnJpZGdlOjp2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXpl
ZFVSTExlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBvcmlnaW5EYXRhID0gMDsKKyAgICBpbnQg
b3JpZ2luTGVuZ3RoID0gMDsKKyAgICBXZWJDU3RyaW5nIHN0cjsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgIHsKKyAgICAgICAgc3RyID0gZG9jdW1lbnQtPnNhZmVIaXN0b3J5T3JpZ2luKCkudXRm
OCgpOworICAgICAgICBvcmlnaW5EYXRhID0gc3RyLmRhdGEoKTsKKyAgICAgICAgb3JpZ2luTGVu
Z3RoID0gc3RyLmxlbmd0aCgpOworICAgIH0KKworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
dmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbGl6ZWRVUkwsIGNhbm9uaWNhbGl6ZWRVUkxMZW5ndGgs
IG9yaWdpbkRhdGEsIG9yaWdpbkxlbmd0aCk7Cit9CisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdl
Ojp2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBVQ2hhciog
dXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwy
MDQ4PiBidWZmZXI7CiAgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwogICAgIGlmICghdXJs
X3V0aWw6OkNhbm9uaWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkpCiAg
ICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZpc2l0ZWQuCi0gICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVy
Lmxlbmd0aCgpKTsKKyAgCisgICAgcmV0dXJuIHZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2go
ZG9jdW1lbnQsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKLUxpbmtIYXNo
IENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKK0xpbmtI
YXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKICAgICAvLyBSZXNvbHZlIHRoZSByZWxhdGl2ZSBV
UkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNzIHRoZSBhYnNvbHV0ZSBVUkwgdXAgdG8KQEAgLTY1
MCw2ICs2NjYsNyBAQCBMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNv
bnN0IEtVUkwmIGJhc2UsCiAgICAgLy8gZGlyZWN0bHkgc2F2ZXMgdXMgdGhlIHN0cmluZyBhbGxv
Y2F0aW9uIGluIG1vc3QgY2FzZXMuCiAgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4
PiBidWZmZXI7CiAgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOworICAgIGNvbnN0IEtVUkwm
IGJhc2UgPSBkb2N1bWVudC0+YmFzZVVSTCgpOwogCiAjaWYgVVNFKEdPT0dMRVVSTCkKICAgICBj
b25zdCBDU3RyaW5nJiBjc3RyID0gYmFzZS51dGY4U3RyaW5nKCk7CkBAIC02NzIsNyArNjg5LDcg
QEAgTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBi
YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVVUkwubGVu
Z3RoKCksIDAsICZidWZmZXIsICZwYXJzZWQpKQogICAgICAgICByZXR1cm4gMDsgIC8vIEludmFs
aWQgcmVzb2x2ZWQgVVJMLgogCi0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlu
a0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gdmlzaXRl
ZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChkb2N1bWVudCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxl
bmd0aCgpKTsKIH0KIAogYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53239</attachid>
            <date>2010-04-13 05:39:35 -0700</date>
            <delta_ts>2010-04-13 07:21:59 -0700</delta_ts>
            <desc>merge with latest version and incorporate jorlow&apos;s feedback</desc>
            <filename>wksh6.patch</filename>
            <type>text/plain</type>
            <size>12401</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTllYTljOS4uYTgzNWVjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMyAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRoZSBoYXNoIGZ1
bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQgdXJsLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAg
ICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwgaGFzaCBzbyBp
dCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5LWxpa2UgcG9s
aWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRlZCBpZiB0aGV5
IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzYWZlSGlzdG9yeU9y
aWdpbik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja1BzZXVkb1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisKIDIwMTAt
MDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIFF0IGJ1aWxkIGZpeDogYWRkIG5ldyAuaWRsIGZpbGVzIHRvIFdlYkNvcmUu
cHJpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM5M2NiNDkuLjhiYTBlNDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04OTUsMTEgKzg5NSwxMSBAQCBFSW5zaWRlTGluayBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVt
ZW50KiBlbGVtZQogICAgIGlmIChpZmFjZSkKICAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5
Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVy
bC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKIAot
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUo
KSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LCB1cmwu
ZGF0YSgpLCB1cmwuc2l6ZSgpKTsKICAgICBpZiAoIWhhc2gpCiAgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwogI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtI
YXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOworICAgIExpbmtIYXNoIGhhc2ggPSB2
aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0dHIpOwogICAgIGlmICghaGFzaCkKICAgICAg
ICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZW5kaWYKQEAgLTYxMzMsNyArNjEzMyw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUo
bm9kZSk7Ci0gICAgICAgIGlmIChhdHRyICYmIHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5i
YXNlVVJMKCksICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKKyAgICAgICAgaWYgKGF0dHIgJiYgdmlz
aXRlZExpbmtIYXNoKG1fZG9jdW1lbnQsICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKICAgICAgICAg
ICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmlu
ZGV4IGY2Yzc0NmQuLmZmOTE2NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC0xNTEsMTQgKzE1MSwxNCBA
QCB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYgdXJsKQogICAgIGlm
ICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IXVybC5pc0VtcHR5KCkpOwotICAgIGFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCh1cmwu
c3RyaW5nKCkuY2hhcmFjdGVycygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKKyAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goMCwgdXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSwg
dXJsLnN0cmluZygpLmxlbmd0aCgpKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVk
TGluayhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAo
IXNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVmlzaXRl
ZExpbmsodmlzaXRlZExpbmtIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgIGFkZFZpc2l0
ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCgwLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAogdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVZpc2l0ZWRMaW5rcygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4
IDBiZDU4OWMuLjFlZWMzYWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2gu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCkBAIC0xNDcsNyArMTQ3LDcg
QEAgc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOwogfQog
Ci1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNo
YXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZv
aWREZWxldGVkVmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLCBsZW5ndGgpKTsKIH0K
QEAgLTIxMywxNCArMjEzLDE0IEBAIHZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyCiAgICAgcmV0dXJu
OwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkKIHsKICAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOwogICAgIHZp
c2l0ZWRVUkwoYmFzZSwgYXR0cmlidXRlVVJMLCB1cmwpOwogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2godXJsLmRh
dGEoKSwgdXJsLnNpemUoKSk7CisgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCwg
dXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L0xpbmtIYXNoLmgKaW5kZXggMjc1NjY1NC4uYTdkNWI5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9MaW5rSGFzaC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaApAQCAt
MzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgQXRvbWljU3RyaW5nOwogY2xhc3MgS1VSTDsKIApAQCAtNTQsMTMgKzU1LDEzIEBAIHN0
cnVjdCBMaW5rSGFzaEhhc2ggewogfTsKIAogLy8gUmV0dXJucyB0aGUgaGFzIG9mIHRoZSBzdHJp
bmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KLUxpbmtIYXNo
IHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOworTGlu
a0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgdXJsTGVuZ3RoKTsKIAogLy8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0
aXZlIFVSTCAiYXR0cmlidXRlVVJMIiByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KIC8vIGJhc2UgVVJM
LCBhbmQgcmV0dXJucyB0aGUgaGFzaCBvZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZv
ciB2aXNpdGVkCiAvLyBsaW5rIGNvbG9yaW5nLiBJdCB3aWxsIHJldHVybiB0aGUgc3BlY2lhbCB2
YWx1ZSBvZiAwIGlmIGF0dHJpYnV0ZVVSTCBkb2VzIG5vdAogLy8gbG9vayBsaWtlIGEgcmVsYXRp
dmUgVVJMLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChj
b25zdCBEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKIAogLy8g
UmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0cmlidXRlVVJMIiByZWxh
dGl2ZSB0byB0aGUgZ2l2ZW4KIC8vIGJhc2UgVVJMLCBhbmQgcmV0dXJucyB0aGUgaGFzaCBvZiB0
aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IGU1ODIyNDEuLjhiZGI3YmUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAgLTIyMiw4ICsyMjIs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHRyYWNlRXZlbnRF
bmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKTsKIAogICAg
ICAgICAvLyBWaXNpdGVkIGxpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBM
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpOworICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZENhbm9u
aWNhbGl6ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCosIGNvbnN0IGNoYXIqIGNhbm9uaWNhbGl6
ZWRVUkwsIHVuc2lnbmVkIGNhbm9uaWNhbGl6ZWRVUkxMZW5ndGgpOworICAgICAgICBzdGF0aWMg
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNoYXIqIHVy
bCwgdW5zaWduZWQgdXJsTGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRM
aW5rSGFzaChjb25zdCBEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJM
KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNMaW5rVmlzaXRlZChMaW5rSGFzaCk7CiAKICAgICAg
ICAgLy8gV2lkZ2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
TGlua0hhc2hDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNo
Q2hyb21pdW0uY3BwCmluZGV4IDljYjkzZWEuLjlhMDAxYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVD
aGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCh1cmwsIGxlbmd0
aCk7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQs
IHVybCwgbGVuZ3RoKTsKIH0KIAotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwm
IGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQorTGlua0hhc2ggdmlzaXRl
ZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVVUkwpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hh
c2goYmFzZSwgYXR0cmlidXRlVVJMKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0
ZWRMaW5rSGFzaChkb2N1bWVudCwgYXR0cmlidXRlVVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGJlMjEwNi4uMGVlZmIxNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDQtMTMgIERhbmllbCBDbGlmZm9yZCAgPGRhbm5vQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNv
bXB1dGUgYSB0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NDQzCisKKyAgICAgICAgUGFzcyBvcmlnaW4g
aW5mb3JtYXRpb24gdGhyb3VnaCB0byB0aGUgVVJMIGhhc2ggc28gaXQncyBwb3NzaWJsZSB0bwor
ICAgICAgICBpbXBsZW1lbnQgYSBTYWZlSGlzdG9yeS1saWtlIHBvbGljeSBmb3Igb25seSBkaXNw
bGF5aW5nIGxpbmtzIGFzCisgICAgICAgIHZpc2l0ZWQgaWYgdGhleSBhcmUgZW1iZWRkZWQgaW4g
YSBwYWdlIHdpdGggdGhlIHNhbWUtb3JpZ2luLgorCisgICAgICAgICogc3JjL0Nocm9taXVtQnJp
ZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjp2aXNpdGVkQ2Fub25p
Y2FsaXplZExpbmtIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjp2aXNp
dGVkTGlua0hhc2gpOgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRDbGllbnQuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0Q2xpZW50Ojp2aXNpdGVkTGlua0hhc2gpOgorCiAyMDEwLTA0LTEzICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBDaHJvbWl1bSBidWlsZCBmaXg6IHBpbiB0byBhIG5ld2VyIFY4IHJldmlzaW9uICg0Mzg2
KS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IDg4ZjJmYzIuLjM4NTVj
MmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtMTE1LDggKzExNSwx
MSBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBoYXNoIGZvciB0aGUgZ2l2ZW4gY2Fu
b25pY2FsaXplZCBVUkwgZm9yIHVzZSBpbiB2aXNpdGVkCiAgICAgLy8gbGluayBjb2xvcmluZy4K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB2aXNpdGVkTGlua0hhc2goCi0gICAgICAg
IGNvbnN0IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBjaGFy
KiBjYW5vbmljYWxVUkwsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJl
dHVybnMgdGhlIGhhc2ggZm9yIHRoZSBnaXZlbiBjYW5vbmljYWxpemVkIFVSTCBmb3IgdXNlIGlu
IHZpc2l0ZWQKKyAgICAvLyBsaW5rIGNvbG9yaW5nLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNpemVfdCBj
YW5vbmljYWxVUkxMZW5ndGgsIGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9yaWdpbkxlbmd0
aCkgeyByZXR1cm4gdmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25pY2FsVVJMTGVu
Z3RoKTsgfQogCiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rIGhhc2ggaXMg
aW4gdGhlIHVzZXIncyBoaXN0b3J5LiAgVGhlCiAgICAgLy8gaGFzaCBtdXN0IGhhdmUgYmVlbiBn
ZW5lcmF0ZWQgYnkgY2FsbGluZyBWaXNpdGVkTGlua0hhc2goKS4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWl1bUJyaWRnZS5jcHAKaW5kZXggY2ZmZDE2Ni4uZDExMTcxYSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKQEAgLTYzMiwxNiArNjMyLDM2IEBAIHZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0
IGNoYXIqIGV4dHJhCiAKIC8vIFZpc2l0ZWQgTGlua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTGlua0hhc2ggQ2hyb21p
dW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5n
dGgpCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFz
aChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbGl6ZWRVUkws
IHVuc2lnbmVkIGNhbm9uaWNhbGl6ZWRVUkxMZW5ndGgpCit7CisgICAgY29uc3QgY2hhciogb3Jp
Z2luRGF0YSA9IDA7CisgICAgaW50IG9yaWdpbkxlbmd0aCA9IDA7CisgICAgV2ViQ1N0cmluZyBz
dHI7CisgICAgaWYgKGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgICAgICBpZiAob3JpZ2luKQor
ICAgICAgICB7CisgICAgICAgICAgICBzdHIgPSBvcmlnaW4tPnRvU3RyaW5nKCkudXRmOCgpOwor
ICAgICAgICAgICAgb3JpZ2luRGF0YSA9IHN0ci5kYXRhKCk7CisgICAgICAgICAgICBvcmlnaW5M
ZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChjYW5vbmljYWxpemVkVVJMLCBjYW5vbmljYWxp
emVkVVJMTGVuZ3RoLCBvcmlnaW5EYXRhLCBvcmlnaW5MZW5ndGgpOworfQorCitMaW5rSGFzaCBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHVybF9jYW5vbjo6UmF3
Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsK
ICAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5ndGgsIDAsICZidWZmZXIs
ICZwYXJzZWQpKQogICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgVVJMcyBhcmUgdW52aXNp
dGVkLgotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgIAorICAgIHJldHVybiB2aXNpdGVkQ2Fub25pY2Fs
aXplZExpbmtIYXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwog
fQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwm
IGJhc2UsCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgLy8gUmVzb2x2ZSB0
aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0aGUgYWJzb2x1dGUgVVJM
IHVwIHRvCkBAIC02NTAsNiArNjcwLDcgQEAgTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0
ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAogICAgIC8vIGRpcmVjdGx5IHNhdmVzIHVzIHRo
ZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIHVybF9jYW5vbjo6UmF3Q2Fu
b25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKKyAg
ICBjb25zdCBLVVJMJiBiYXNlID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKIAogI2lmIFVTRShHT09H
TEVVUkwpCiAgICAgY29uc3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRmOFN0cmluZygpOwpAQCAt
NjcyLDcgKzY5Myw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2go
Y29uc3QgS1VSTCYgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJu
IDA7ICAvLyBJbnZhbGlkIHJlc29sdmVkIFVSTC4KIAotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgICAg
cmV0dXJuIHZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2goZG9jdW1lbnQsIGJ1ZmZlci5kYXRh
KCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzTGlua1Zp
c2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53248</attachid>
            <date>2010-04-13 07:21:59 -0700</date>
            <delta_ts>2010-04-13 08:03:50 -0700</delta_ts>
            <desc>Incorporate more review feedback, fix remaining style issues</desc>
            <filename>wksh7.patch</filename>
            <type>text/plain</type>
            <size>12387</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTllYTljOS4uYTgzNWVjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMyAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRoZSBoYXNoIGZ1
bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQgdXJsLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAg
ICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwgaGFzaCBzbyBp
dCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5LWxpa2UgcG9s
aWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRlZCBpZiB0aGV5
IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzYWZlSGlzdG9yeU9y
aWdpbik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja1BzZXVkb1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisKIDIwMTAt
MDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIFF0IGJ1aWxkIGZpeDogYWRkIG5ldyAuaWRsIGZpbGVzIHRvIFdlYkNvcmUu
cHJpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM5M2NiNDkuLjhiYTBlNDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04OTUsMTEgKzg5NSwxMSBAQCBFSW5zaWRlTGluayBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVt
ZW50KiBlbGVtZQogICAgIGlmIChpZmFjZSkKICAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5
Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVy
bC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKIAot
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUo
KSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LCB1cmwu
ZGF0YSgpLCB1cmwuc2l6ZSgpKTsKICAgICBpZiAoIWhhc2gpCiAgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwogI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtI
YXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOworICAgIExpbmtIYXNoIGhhc2ggPSB2
aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0dHIpOwogICAgIGlmICghaGFzaCkKICAgICAg
ICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZW5kaWYKQEAgLTYxMzMsNyArNjEzMyw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUo
bm9kZSk7Ci0gICAgICAgIGlmIChhdHRyICYmIHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5i
YXNlVVJMKCksICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKKyAgICAgICAgaWYgKGF0dHIgJiYgdmlz
aXRlZExpbmtIYXNoKG1fZG9jdW1lbnQsICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKICAgICAgICAg
ICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmlu
ZGV4IGY2Yzc0NmQuLmZmOTE2NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC0xNTEsMTQgKzE1MSwxNCBA
QCB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYgdXJsKQogICAgIGlm
ICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IXVybC5pc0VtcHR5KCkpOwotICAgIGFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCh1cmwu
c3RyaW5nKCkuY2hhcmFjdGVycygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKKyAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goMCwgdXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSwg
dXJsLnN0cmluZygpLmxlbmd0aCgpKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVk
TGluayhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAo
IXNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVmlzaXRl
ZExpbmsodmlzaXRlZExpbmtIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgIGFkZFZpc2l0
ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCgwLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAogdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVZpc2l0ZWRMaW5rcygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4
IDBiZDU4OWMuLjFlZWMzYWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2gu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCkBAIC0xNDcsNyArMTQ3LDcg
QEAgc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOwogfQog
Ci1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNo
YXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZv
aWREZWxldGVkVmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLCBsZW5ndGgpKTsKIH0K
QEAgLTIxMywxNCArMjEzLDE0IEBAIHZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyCiAgICAgcmV0dXJu
OwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVVSTCkKIHsKICAgICBWZWN0b3I8VUNoYXIsIDUxMj4gdXJsOwogICAgIHZp
c2l0ZWRVUkwoYmFzZSwgYXR0cmlidXRlVVJMLCB1cmwpOwogICAgIGlmICh1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiB2aXNpdGVkTGlua0hhc2godXJsLmRh
dGEoKSwgdXJsLnNpemUoKSk7CisgICAgcmV0dXJuIHZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCwg
dXJsLmRhdGEoKSwgdXJsLnNpemUoKSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L0xpbmtIYXNoLmgKaW5kZXggMjc1NjY1NC4uYTdkNWI5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9MaW5rSGFzaC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaApAQCAt
MzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgQXRvbWljU3RyaW5nOwogY2xhc3MgS1VSTDsKIApAQCAtNTQsMTMgKzU1LDEzIEBAIHN0
cnVjdCBMaW5rSGFzaEhhc2ggewogfTsKIAogLy8gUmV0dXJucyB0aGUgaGFzIG9mIHRoZSBzdHJp
bmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQgbGluayBjb2xvcmluZy4KLUxpbmtIYXNo
IHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOworTGlu
a0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgdXJsTGVuZ3RoKTsKIAogLy8gUmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0
aXZlIFVSTCAiYXR0cmlidXRlVVJMIiByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4KIC8vIGJhc2UgVVJM
LCBhbmQgcmV0dXJucyB0aGUgaGFzaCBvZiB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZv
ciB2aXNpdGVkCiAvLyBsaW5rIGNvbG9yaW5nLiBJdCB3aWxsIHJldHVybiB0aGUgc3BlY2lhbCB2
YWx1ZSBvZiAwIGlmIGF0dHJpYnV0ZVVSTCBkb2VzIG5vdAogLy8gbG9vayBsaWtlIGEgcmVsYXRp
dmUgVVJMLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChj
b25zdCBEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKIAogLy8g
UmVzb2x2ZXMgdGhlIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCAiYXR0cmlidXRlVVJMIiByZWxh
dGl2ZSB0byB0aGUgZ2l2ZW4KIC8vIGJhc2UgVVJMLCBhbmQgcmV0dXJucyB0aGUgaGFzaCBvZiB0
aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB2aXNpdGVkLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IGU1ODIyNDEuLjhiZGI3YmUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAgLTIyMiw4ICsyMjIs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHRyYWNlRXZlbnRF
bmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKTsKIAogICAg
ICAgICAvLyBWaXNpdGVkIGxpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBM
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpOworICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZENhbm9u
aWNhbGl6ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCosIGNvbnN0IGNoYXIqIGNhbm9uaWNhbGl6
ZWRVUkwsIHVuc2lnbmVkIGNhbm9uaWNhbGl6ZWRVUkxMZW5ndGgpOworICAgICAgICBzdGF0aWMg
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNoYXIqIHVy
bCwgdW5zaWduZWQgdXJsTGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRM
aW5rSGFzaChjb25zdCBEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJM
KTsKICAgICAgICAgc3RhdGljIGJvb2wgaXNMaW5rVmlzaXRlZChMaW5rSGFzaCk7CiAKICAgICAg
ICAgLy8gV2lkZ2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
TGlua0hhc2hDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNo
Q2hyb21pdW0uY3BwCmluZGV4IDljYjkzZWEuLjlhMDAxYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVD
aGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCh1cmwsIGxlbmd0
aCk7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goZG9jdW1lbnQs
IHVybCwgbGVuZ3RoKTsKIH0KIAotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwm
IGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQorTGlua0hhc2ggdmlzaXRl
ZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVVUkwpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hh
c2goYmFzZSwgYXR0cmlidXRlVVJMKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0
ZWRMaW5rSGFzaChkb2N1bWVudCwgYXR0cmlidXRlVVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGJlMjEwNi4uMGVlZmIxNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDQtMTMgIERhbmllbCBDbGlmZm9yZCAgPGRhbm5vQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0byB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIHRvIGNv
bXB1dGUgYSB0aGUgaGFzaCBmb3IgYSB2aXNpdGVkIHVybC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NDQzCisKKyAgICAgICAgUGFzcyBvcmlnaW4g
aW5mb3JtYXRpb24gdGhyb3VnaCB0byB0aGUgVVJMIGhhc2ggc28gaXQncyBwb3NzaWJsZSB0bwor
ICAgICAgICBpbXBsZW1lbnQgYSBTYWZlSGlzdG9yeS1saWtlIHBvbGljeSBmb3Igb25seSBkaXNw
bGF5aW5nIGxpbmtzIGFzCisgICAgICAgIHZpc2l0ZWQgaWYgdGhleSBhcmUgZW1iZWRkZWQgaW4g
YSBwYWdlIHdpdGggdGhlIHNhbWUtb3JpZ2luLgorCisgICAgICAgICogc3JjL0Nocm9taXVtQnJp
ZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjp2aXNpdGVkQ2Fub25p
Y2FsaXplZExpbmtIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjp2aXNp
dGVkTGlua0hhc2gpOgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRDbGllbnQuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0Q2xpZW50Ojp2aXNpdGVkTGlua0hhc2gpOgorCiAyMDEwLTA0LTEzICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBDaHJvbWl1bSBidWlsZCBmaXg6IHBpbiB0byBhIG5ld2VyIFY4IHJldmlzaW9uICg0Mzg2
KS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IDg4ZjJmYzIuLjM4NTVj
MmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtMTE1LDggKzExNSwx
MSBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSBoYXNoIGZvciB0aGUgZ2l2ZW4gY2Fu
b25pY2FsaXplZCBVUkwgZm9yIHVzZSBpbiB2aXNpdGVkCiAgICAgLy8gbGluayBjb2xvcmluZy4K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB2aXNpdGVkTGlua0hhc2goCi0gICAgICAg
IGNvbnN0IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBjaGFy
KiBjYW5vbmljYWxVUkwsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJl
dHVybnMgdGhlIGhhc2ggZm9yIHRoZSBnaXZlbiBjYW5vbmljYWxpemVkIFVSTCBmb3IgdXNlIGlu
IHZpc2l0ZWQKKyAgICAvLyBsaW5rIGNvbG9yaW5nLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNpemVfdCBj
YW5vbmljYWxVUkxMZW5ndGgsIGNvbnN0IGNoYXIqIG9yaWdpbiwgc2l6ZV90IG9yaWdpbkxlbmd0
aCkgeyByZXR1cm4gdmlzaXRlZExpbmtIYXNoKGNhbm9uaWNhbFVSTCwgY2Fub25pY2FsVVJMTGVu
Z3RoKTsgfQogCiAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rIGhhc2ggaXMg
aW4gdGhlIHVzZXIncyBoaXN0b3J5LiAgVGhlCiAgICAgLy8gaGFzaCBtdXN0IGhhdmUgYmVlbiBn
ZW5lcmF0ZWQgYnkgY2FsbGluZyBWaXNpdGVkTGlua0hhc2goKS4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWl1bUJyaWRnZS5jcHAKaW5kZXggY2ZmZDE2Ni4uMGFhMjVlOSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKQEAgLTYzMiwxNiArNjMyLDM0IEBAIHZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0
IGNoYXIqIGV4dHJhCiAKIC8vIFZpc2l0ZWQgTGlua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTGlua0hhc2ggQ2hyb21p
dW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5n
dGgpCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFz
aChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IGNoYXIqIGNhbm9uaWNhbGl6ZWRVUkws
IHVuc2lnbmVkIGNhbm9uaWNhbGl6ZWRVUkxMZW5ndGgpCit7CisgICAgY29uc3QgY2hhciogb3Jp
Z2luRGF0YSA9IDA7CisgICAgaW50IG9yaWdpbkxlbmd0aCA9IDA7CisgICAgV2ViQ1N0cmluZyBz
dHI7CisgICAgaWYgKGRvY3VtZW50KSB7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4g
PSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICAgICAgaWYgKG9yaWdpbikgeworICAg
ICAgICAgICAgc3RyID0gb3JpZ2luLT50b1N0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgICAgIG9y
aWdpbkRhdGEgPSBzdHIuZGF0YSgpOworICAgICAgICAgICAgb3JpZ2luTGVuZ3RoID0gc3RyLmxl
bmd0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52
aXNpdGVkTGlua0hhc2goY2Fub25pY2FsaXplZFVSTCwgY2Fub25pY2FsaXplZFVSTExlbmd0aCwg
b3JpZ2luRGF0YSwgb3JpZ2luTGVuZ3RoKTsKK30KKworTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFVDaGFyKiB1
cmwsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIw
NDg+IGJ1ZmZlcjsKICAgICB1cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxf
dXRpbDo6Q2Fub25pY2FsaXplKHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAg
ICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIu
bGVuZ3RoKCkpOworICAKKyAgICByZXR1cm4gdmlzaXRlZENhbm9uaWNhbGl6ZWRMaW5rSGFzaChk
b2N1bWVudCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAotTGlua0hhc2gg
Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAorTGlua0hh
c2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVS
TCB1c2luZyBnb29nbGV1cmwgYW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwpAQCAtNjUw
LDYgKzY2OCw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29u
c3QgS1VSTCYgYmFzZSwKICAgICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9j
YXRpb24gaW4gbW9zdCBjYXNlcy4KICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+
IGJ1ZmZlcjsKICAgICB1cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CisgICAgY29uc3QgS1VSTCYg
YmFzZSA9IGRvY3VtZW50LT5iYXNlVVJMKCk7CiAKICNpZiBVU0UoR09PR0xFVVJMKQogICAgIGNv
bnN0IENTdHJpbmcmIGNzdHIgPSBiYXNlLnV0ZjhTdHJpbmcoKTsKQEAgLTY3Miw3ICs2OTEsNyBA
QCBMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJh
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5n
dGgoKSwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkpCiAgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxp
ZCByZXNvbHZlZCBVUkwuCiAKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5r
SGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworICAgIHJldHVybiB2aXNpdGVk
Q2Fub25pY2FsaXplZExpbmtIYXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZmZXIubGVu
Z3RoKCkpOwogfQogCiBib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNo
IHZpc2l0ZWRMaW5rSGFzaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53252</attachid>
            <date>2010-04-13 08:03:50 -0700</date>
            <delta_ts>2010-04-13 08:24:07 -0700</delta_ts>
            <desc>fix qt build</desc>
            <filename>wksh8.patch</filename>
            <type>text/plain</type>
            <size>12416</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTllYTljOS4uYTgzNWVjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMyAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRoZSBoYXNoIGZ1
bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQgdXJsLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAg
ICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwgaGFzaCBzbyBp
dCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5LWxpa2UgcG9s
aWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRlZCBpZiB0aGV5
IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzYWZlSGlzdG9yeU9y
aWdpbik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja1BzZXVkb1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisKIDIwMTAt
MDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIFF0IGJ1aWxkIGZpeDogYWRkIG5ldyAuaWRsIGZpbGVzIHRvIFdlYkNvcmUu
cHJpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM5M2NiNDkuLjhiYTBlNDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04OTUsMTEgKzg5NSwxMSBAQCBFSW5zaWRlTGluayBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVt
ZW50KiBlbGVtZQogICAgIGlmIChpZmFjZSkKICAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5
Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVy
bC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKIAot
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUo
KSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LCB1cmwu
ZGF0YSgpLCB1cmwuc2l6ZSgpKTsKICAgICBpZiAoIWhhc2gpCiAgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwogI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtI
YXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOworICAgIExpbmtIYXNoIGhhc2ggPSB2
aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0dHIpOwogICAgIGlmICghaGFzaCkKICAgICAg
ICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZW5kaWYKQEAgLTYxMzMsNyArNjEzMyw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUo
bm9kZSk7Ci0gICAgICAgIGlmIChhdHRyICYmIHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5i
YXNlVVJMKCksICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKKyAgICAgICAgaWYgKGF0dHIgJiYgdmlz
aXRlZExpbmtIYXNoKG1fZG9jdW1lbnQsICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKICAgICAgICAg
ICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmlu
ZGV4IGY2Yzc0NmQuLmZmOTE2NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC0xNTEsMTQgKzE1MSwxNCBA
QCB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYgdXJsKQogICAgIGlm
ICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IXVybC5pc0VtcHR5KCkpOwotICAgIGFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCh1cmwu
c3RyaW5nKCkuY2hhcmFjdGVycygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKKyAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goMCwgdXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSwg
dXJsLnN0cmluZygpLmxlbmd0aCgpKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVk
TGluayhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAo
IXNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVmlzaXRl
ZExpbmsodmlzaXRlZExpbmtIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgIGFkZFZpc2l0
ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCgwLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAogdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVZpc2l0ZWRMaW5rcygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4
IDBiZDU4OWMuLjEyZDMwMmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2gu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCkBAIC0xNDcsNyArMTQ3LDcg
QEAgc3RhdGljIGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOwogfQog
Ci1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVu
Z3RoKQorTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNo
YXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZv
aWREZWxldGVkVmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLCBsZW5ndGgpKTsKIH0K
QEAgLTIxMywxNCArMjEzLDE2IEBAIHZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyCiAgICAgcmV0dXJu
OwogfQogCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkK
IHsKKyAgICBjb25zdCBLVVJMJiBiYXNlID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKwogICAgIFZl
Y3RvcjxVQ2hhciwgNTEyPiB1cmw7CiAgICAgdmlzaXRlZFVSTChiYXNlLCBhdHRyaWJ1dGVVUkws
IHVybCk7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIHZpc2l0ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICByZXR1
cm4gdmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCB1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKIH0K
IAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
TGlua0hhc2guaCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAppbmRleCAyNzU2NjU0Li5h
N2Q1YjllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBL
VVJMOwogCkBAIC01NCwxMyArNTUsMTMgQEAgc3RydWN0IExpbmtIYXNoSGFzaCB7CiB9OwogCiAv
LyBSZXR1cm5zIHRoZSBoYXMgb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3Igdmlz
aXRlZCBsaW5rIGNvbG9yaW5nLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFy
KiB1cmwsIHVuc2lnbmVkIGxlbmd0aCk7CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOwogCiAvLyBS
ZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0
aXZlIHRvIHRoZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRo
ZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKIC8vIGxpbmsgY29sb3Jpbmcu
IEl0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJMIGRv
ZXMgbm90CiAvLyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5rSGFzaCB2aXNpdGVkTGlu
a0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwp
OworTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogCiAvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVs
YXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgogLy8gYmFzZSBV
UkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQg
Zm9yIHZpc2l0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtQnJpZGdlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgK
aW5kZXggZTU4MjI0MS4uOGJkYjdiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bUJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1CcmlkZ2UuaApAQCAtMjIyLDggKzIyMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBp
ZCwgY29uc3QgY2hhciogZXh0cmEpOwogCiAgICAgICAgIC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAg
IHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25z
dCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7CisgICAgICAg
IHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXpl
ZFVSTExlbmd0aCk7CisgICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgRG9jdW1lbnQqLCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOworICAg
ICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0xp
bmtWaXNpdGVkKExpbmtIYXNoKTsKIAogICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKaW5kZXggOWNiOTNlYS4u
OWEwMDFiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENo
cm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21p
dW0uY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaW5r
SGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQor
TGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
VUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRn
ZTo6dmlzaXRlZExpbmtIYXNoKHVybCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCwgdXJsLCBsZW5ndGgpOwogfQogCi1MaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4g
Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAg
IHJldHVybiBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCBhdHRyaWJ1
dGVVUkwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwYmUy
MTA2Li4wZWVmYjE0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0xMyAg
RGFuaWVsIENsaWZmb3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRv
IHRoZSBoYXNoIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0
ZWQgdXJsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzc0NDMKKworICAgICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBV
UkwgaGFzaCBzbyBpdCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0
b3J5LWxpa2UgcG9saWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlz
aXRlZCBpZiB0aGV5IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4u
CisKKyAgICAgICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcHVi
bGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRDbGllbnQ6OnZpc2l0
ZWRMaW5rSGFzaCk6CisKIDIwMTAtMDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGJ1aWxkIGZpeDogcGlu
IHRvIGEgbmV3ZXIgVjggcmV2aXNpb24gKDQzODYpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0
Q2xpZW50LmgKaW5kZXggODhmMmZjMi4uMzg1NWMyYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdENsaWVudC5oCkBAIC0xMTUsOCArMTE1LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVy
bnMgdGhlIGhhc2ggZm9yIHRoZSBnaXZlbiBjYW5vbmljYWxpemVkIFVSTCBmb3IgdXNlIGluIHZp
c2l0ZWQKICAgICAvLyBsaW5rIGNvbG9yaW5nLgotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBs
b25nIHZpc2l0ZWRMaW5rSGFzaCgKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25pY2FsVVJMLCBz
aXplX3QgbGVuZ3RoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgdmlzaXRlZExpbmtIYXNoKGNvbnN0IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGxlbmd0
aCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVu
IGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4gdmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3Jp
bmcuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdmlzaXRlZExpbmtIYXNoKGNvbnN0
IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGNhbm9uaWNhbFVSTExlbmd0aCwgY29uc3QgY2hh
ciogb3JpZ2luLCBzaXplX3Qgb3JpZ2luTGVuZ3RoKSB7IHJldHVybiB2aXNpdGVkTGlua0hhc2go
Y2Fub25pY2FsVVJMLCBjYW5vbmljYWxVUkxMZW5ndGgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlIGdpdmVuIGxpbmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhpc3RvcnkuICBUaGUK
ICAgICAvLyBoYXNoIG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxsaW5nIFZpc2l0ZWRM
aW5rSGFzaCgpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRn
ZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCBjZmZk
MTY2Li4wYWEyNWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJp
ZGdlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAt
NjMyLDE2ICs2MzIsMzQgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25z
dCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlzaXRlZCBM
aW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNv
bnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVtQnJpZGdl
Ojp2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExl
bmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBvcmlnaW5EYXRhID0gMDsKKyAgICBpbnQgb3JpZ2lu
TGVuZ3RoID0gMDsKKyAgICBXZWJDU3RyaW5nIHN0cjsKKyAgICBpZiAoZG9jdW1lbnQpIHsKKyAg
ICAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigp
OworICAgICAgICBpZiAob3JpZ2luKSB7CisgICAgICAgICAgICBzdHIgPSBvcmlnaW4tPnRvU3Ry
aW5nKCkudXRmOCgpOworICAgICAgICAgICAgb3JpZ2luRGF0YSA9IHN0ci5kYXRhKCk7CisgICAg
ICAgICAgICBvcmlnaW5MZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChjYW5vbmljYWxpemVk
VVJMLCBjYW5vbmljYWxpemVkVVJMTGVuZ3RoLCBvcmlnaW5EYXRhLCBvcmlnaW5MZW5ndGgpOwor
fQorCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6
UGFyc2VkIHBhcnNlZDsKICAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5n
dGgsIDAsICZidWZmZXIsICZwYXJzZWQpKQogICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQg
VVJMcyBhcmUgdW52aXNpdGVkLgotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExp
bmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgIAorICAgIHJldHVybiB2
aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZm
ZXIubGVuZ3RoKCkpOwogfQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtI
YXNoKGNvbnN0IEtVUkwmIGJhc2UsCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExp
bmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAg
ICAgLy8gUmVzb2x2ZSB0aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0
aGUgYWJzb2x1dGUgVVJMIHVwIHRvCkBAIC02NTAsNiArNjY4LDcgQEAgTGlua0hhc2ggQ2hyb21p
dW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAogICAgIC8vIGRpcmVj
dGx5IHNhdmVzIHVzIHRoZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIHVy
bF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFy
c2VkIHBhcnNlZDsKKyAgICBjb25zdCBLVVJMJiBiYXNlID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsK
IAogI2lmIFVTRShHT09HTEVVUkwpCiAgICAgY29uc3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRm
OFN0cmluZygpOwpAQCAtNjcyLDcgKzY5MSw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2
aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkK
ICAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVkIFVSTC4KIAotICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5s
ZW5ndGgoKSk7CisgICAgcmV0dXJuIHZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2goZG9jdW1l
bnQsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKIGJvb2wgQ2hyb21pdW1C
cmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53254</attachid>
            <date>2010-04-13 08:24:07 -0700</date>
            <delta_ts>2010-06-20 10:32:31 -0700</delta_ts>
            <desc>fix another problem with the qt build</desc>
            <filename>wksh9.patch</filename>
            <type>text/plain</type>
            <size>12578</size>
            <attacher name="Daniel Clifford">danno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTllYTljOS4uYTgzNWVjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0xMyAgRGFuaWVsIENsaWZm
b3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRoZSBoYXNoIGZ1
bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQgdXJsLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKworICAg
ICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwgaGFzaCBzbyBp
dCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5LWxpa2UgcG9s
aWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRlZCBpZiB0aGV5
IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmlzaXRl
ZExpbmtIYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW5rSGFzaC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL0xpbmtIYXNoLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGFnZS9QYWdlR3JvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzYWZlSGlzdG9yeU9y
aWdpbik6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja1BzZXVkb1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisKIDIwMTAt
MDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIFF0IGJ1aWxkIGZpeDogYWRkIG5ldyAuaWRsIGZpbGVzIHRvIFdlYkNvcmUu
cHJpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDM5M2NiNDkuLjhiYTBlNDYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC04OTUsMTEgKzg5NSwxMSBAQCBFSW5zaWRlTGluayBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVt
ZW50KiBlbGVtZQogICAgIGlmIChpZmFjZSkKICAgICAgICAgcmV0dXJuIGlmYWNlLT5oaXN0b3J5
Q29udGFpbnMoUVN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4odXJsLmRhdGEoKSksIHVy
bC5zaXplKCkpKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDogSW5zaWRlVW52aXNpdGVkTGluazsKIAot
ICAgIExpbmtIYXNoIGhhc2ggPSB2aXNpdGVkTGlua0hhc2godXJsLmRhdGEoKSwgdXJsLnNpemUo
KSk7CisgICAgTGlua0hhc2ggaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LCB1cmwu
ZGF0YSgpLCB1cmwuc2l6ZSgpKTsKICAgICBpZiAoIWhhc2gpCiAgICAgICAgIHJldHVybiBJbnNp
ZGVVbnZpc2l0ZWRMaW5rOwogI2Vsc2UKLSAgICBMaW5rSGFzaCBoYXNoID0gdmlzaXRlZExpbmtI
YXNoKG1fZG9jdW1lbnQtPmJhc2VVUkwoKSwgKmF0dHIpOworICAgIExpbmtIYXNoIGhhc2ggPSB2
aXNpdGVkTGlua0hhc2gobV9kb2N1bWVudCwgKmF0dHIpOwogICAgIGlmICghaGFzaCkKICAgICAg
ICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7CiAjZW5kaWYKQEAgLTYxMzMsNyArNjEzMyw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUo
bm9kZSk7Ci0gICAgICAgIGlmIChhdHRyICYmIHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5i
YXNlVVJMKCksICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKKyAgICAgICAgaWYgKGF0dHIgJiYgdmlz
aXRlZExpbmtIYXNoKG1fZG9jdW1lbnQsICphdHRyKSA9PSB2aXNpdGVkSGFzaCkKICAgICAgICAg
ICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmlu
ZGV4IGY2Yzc0NmQuLmZmOTE2NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAu
Y3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC0xNTEsMTQgKzE1MSwxNCBA
QCB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmsoY29uc3QgS1VSTCYgdXJsKQogICAgIGlm
ICghc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
IXVybC5pc0VtcHR5KCkpOwotICAgIGFkZFZpc2l0ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCh1cmwu
c3RyaW5nKCkuY2hhcmFjdGVycygpLCB1cmwuc3RyaW5nKCkubGVuZ3RoKCkpKTsKKyAgICBhZGRW
aXNpdGVkTGluayh2aXNpdGVkTGlua0hhc2goMCwgdXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSwg
dXJsLnN0cmluZygpLmxlbmd0aCgpKSk7CiB9CiAKIHZvaWQgUGFnZUdyb3VwOjphZGRWaXNpdGVk
TGluayhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAo
IXNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVmlzaXRl
ZExpbmsodmlzaXRlZExpbmtIYXNoKGNoYXJhY3RlcnMsIGxlbmd0aCkpOworICAgIGFkZFZpc2l0
ZWRMaW5rKHZpc2l0ZWRMaW5rSGFzaCgwLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAogdm9p
ZCBQYWdlR3JvdXA6OnJlbW92ZVZpc2l0ZWRMaW5rcygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL0xpbmtIYXNoLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4
IDBiZDU4OWMuLmY3NzUzNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2gu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xNDcsNyArMTQ4LDcgQEAgc3RhdGlj
IGlubGluZSBib29sIG5lZWRzVHJhaWxpbmdTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQogICAgIHJldHVybiBwb3MgPT0gbGVuZ3RoOwogfQogCi1MaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlu
a0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgVUNoYXIqIHVybCwg
dW5zaWduZWQgbGVuZ3RoKQogewogICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZvaWREZWxldGVk
VmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLCBsZW5ndGgpKTsKIH0KQEAgLTIxMywx
NCArMjE0LDE2IEBAIHZvaWQgdmlzaXRlZFVSTChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCwgVmVjdG9yPFVDaGFyCiAgICAgcmV0dXJuOwogfQogCi1M
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVVUkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKKyAgICBj
b25zdCBLVVJMJiBiYXNlID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKwogICAgIFZlY3RvcjxVQ2hh
ciwgNTEyPiB1cmw7CiAgICAgdmlzaXRlZFVSTChiYXNlLCBhdHRyaWJ1dGVVUkwsIHVybCk7CiAg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHZp
c2l0ZWRMaW5rSGFzaCh1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKKyAgICByZXR1cm4gdmlzaXRl
ZExpbmtIYXNoKGRvY3VtZW50LCB1cmwuZGF0YSgpLCB1cmwuc2l6ZSgpKTsKIH0KIAogfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2gu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guaAppbmRleCAyNzU2NjU0Li5hN2Q1YjllIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9MaW5rSGFzaC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBLVVJMOwogCkBA
IC01NCwxMyArNTUsMTMgQEAgc3RydWN0IExpbmtIYXNoSGFzaCB7CiB9OwogCiAvLyBSZXR1cm5z
IHRoZSBoYXMgb2YgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdmlzaXRlZCBsaW5r
IGNvbG9yaW5nLgotTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVu
c2lnbmVkIGxlbmd0aCk7CitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOwogCiAvLyBSZXNvbHZlcyB0
aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJMICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRo
ZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCByZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcg
dGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0ZWQKIC8vIGxpbmsgY29sb3JpbmcuIEl0IHdpbGwg
cmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlIG9mIDAgaWYgYXR0cmlidXRlVVJMIGRvZXMgbm90CiAv
LyBsb29rIGxpa2UgYSByZWxhdGl2ZSBVUkwuCi1MaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29u
c3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOworTGlua0hh
c2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBh
dHRyaWJ1dGVVUkwpOwogCiAvLyBSZXNvbHZlcyB0aGUgcG90ZW50aWFsbHkgcmVsYXRpdmUgVVJM
ICJhdHRyaWJ1dGVVUkwiIHJlbGF0aXZlIHRvIHRoZSBnaXZlbgogLy8gYmFzZSBVUkwsIGFuZCBy
ZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHZpc2l0
ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKaW5kZXggZTU4
MjI0MS4uOGJkYjdiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bUJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaApAQCAtMjIyLDggKzIyMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3Qg
Y2hhciogZXh0cmEpOwogCiAgICAgICAgIC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBM
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7CisgICAgICAgIHN0YXRpYyBM
aW5rSGFzaCB2aXNpdGVkQ2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgY2hhciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExlbmd0
aCk7CisgICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCB1cmxMZW5ndGgpOworICAgICAgICBzdGF0
aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVVUkwpOwogICAgICAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVk
KExpbmtIYXNoKTsKIAogICAgICAgICAvLyBXaWRnZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKaW5kZXggOWNiOTNlYS4uOWEwMDFiYyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCkBA
IC0zNSwxNCArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2gg
dmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVUNoYXIqIHVy
bCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6dmlzaXRl
ZExpbmtIYXNoKHVybCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0
ZWRMaW5rSGFzaChkb2N1bWVudCwgdXJsLCBsZW5ndGgpOwogfQogCi1MaW5rSGFzaCB2aXNpdGVk
TGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwpCitMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1C
cmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGRvY3VtZW50LCBhdHRyaWJ1dGVVUkwpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwYmUyMTA2Li4wZWVm
YjE0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0xMyAgRGFuaWVsIENs
aWZmb3JkICA8ZGFubm9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBhc3Mgb3JpZ2luIGluZm9ybWF0aW9uIHRvIHRoZSBoYXNo
IGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSBhIHRoZSBoYXNoIGZvciBhIHZpc2l0ZWQgdXJsLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc0NDMKKwor
ICAgICAgICBQYXNzIG9yaWdpbiBpbmZvcm1hdGlvbiB0aHJvdWdoIHRvIHRoZSBVUkwgaGFzaCBz
byBpdCdzIHBvc3NpYmxlIHRvCisgICAgICAgIGltcGxlbWVudCBhIFNhZmVIaXN0b3J5LWxpa2Ug
cG9saWN5IGZvciBvbmx5IGRpc3BsYXlpbmcgbGlua3MgYXMKKyAgICAgICAgdmlzaXRlZCBpZiB0
aGV5IGFyZSBlbWJlZGRlZCBpbiBhIHBhZ2Ugd2l0aCB0aGUgc2FtZS1vcmlnaW4uCisKKyAgICAg
ICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1C
cmlkZ2U6OnZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcHVibGljL1dlYktp
dENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRDbGllbnQ6OnZpc2l0ZWRMaW5rSGFz
aCk6CisKIDIwMTAtMDQtMTMgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGJ1aWxkIGZpeDogcGluIHRvIGEgbmV3
ZXIgVjggcmV2aXNpb24gKDQzODYpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgK
aW5kZXggODhmMmZjMi4uMzg1NWMyYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVu
dC5oCkBAIC0xMTUsOCArMTE1LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdGhlIGhh
c2ggZm9yIHRoZSBnaXZlbiBjYW5vbmljYWxpemVkIFVSTCBmb3IgdXNlIGluIHZpc2l0ZWQKICAg
ICAvLyBsaW5rIGNvbG9yaW5nLgotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHZpc2l0
ZWRMaW5rSGFzaCgKLSAgICAgICAgY29uc3QgY2hhciogY2Fub25pY2FsVVJMLCBzaXplX3QgbGVu
Z3RoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdmlzaXRl
ZExpbmtIYXNoKGNvbnN0IGNoYXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGxlbmd0aCkgeyByZXR1
cm4gMDsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNh
bGl6ZWQgVVJMIGZvciB1c2UgaW4gdmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdmlzaXRlZExpbmtIYXNoKGNvbnN0IGNoYXIqIGNh
bm9uaWNhbFVSTCwgc2l6ZV90IGNhbm9uaWNhbFVSTExlbmd0aCwgY29uc3QgY2hhciogb3JpZ2lu
LCBzaXplX3Qgb3JpZ2luTGVuZ3RoKSB7IHJldHVybiB2aXNpdGVkTGlua0hhc2goY2Fub25pY2Fs
VVJMLCBjYW5vbmljYWxVUkxMZW5ndGgpOyB9CiAKICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhl
IGdpdmVuIGxpbmsgaGFzaCBpcyBpbiB0aGUgdXNlcidzIGhpc3RvcnkuICBUaGUKICAgICAvLyBo
YXNoIG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBjYWxsaW5nIFZpc2l0ZWRMaW5rSGFzaCgp
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCBjZmZkMTY2Li4wYWEy
NWU5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAtNjMyLDE2ICs2
MzIsMzQgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBu
YW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEKIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFy
KiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVk
Q2Fub25pY2FsaXplZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgY2hh
ciogY2Fub25pY2FsaXplZFVSTCwgdW5zaWduZWQgY2Fub25pY2FsaXplZFVSTExlbmd0aCkKK3sK
KyAgICBjb25zdCBjaGFyKiBvcmlnaW5EYXRhID0gMDsKKyAgICBpbnQgb3JpZ2luTGVuZ3RoID0g
MDsKKyAgICBXZWJDU3RyaW5nIHN0cjsKKyAgICBpZiAoZG9jdW1lbnQpIHsKKyAgICAgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgICAg
ICBpZiAob3JpZ2luKSB7CisgICAgICAgICAgICBzdHIgPSBvcmlnaW4tPnRvU3RyaW5nKCkudXRm
OCgpOworICAgICAgICAgICAgb3JpZ2luRGF0YSA9IHN0ci5kYXRhKCk7CisgICAgICAgICAgICBv
cmlnaW5MZW5ndGggPSBzdHIubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChjYW5vbmljYWxpemVkVVJMLCBjYW5v
bmljYWxpemVkVVJMTGVuZ3RoLCBvcmlnaW5EYXRhLCBvcmlnaW5MZW5ndGgpOworfQorCitMaW5r
SGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHVybF9jYW5v
bjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFyc2VkIHBh
cnNlZDsKICAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5ndGgsIDAsICZi
dWZmZXIsICZwYXJzZWQpKQogICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgVVJMcyBhcmUg
dW52aXNpdGVkLgotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1
ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgIAorICAgIHJldHVybiB2aXNpdGVkQ2Fu
b25pY2FsaXplZExpbmtIYXNoKGRvY3VtZW50LCBidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3Ro
KCkpOwogfQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0
IEtVUkwmIGJhc2UsCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7CiAgICAgLy8gUmVz
b2x2ZSB0aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0aGUgYWJzb2x1
dGUgVVJMIHVwIHRvCkBAIC02NTAsNiArNjY4LDcgQEAgTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAogICAgIC8vIGRpcmVjdGx5IHNhdmVz
IHVzIHRoZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIHVybF9jYW5vbjo6
UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNl
ZDsKKyAgICBjb25zdCBLVVJMJiBiYXNlID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKIAogI2lmIFVT
RShHT09HTEVVUkwpCiAgICAgY29uc3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRmOFN0cmluZygp
OwpAQCAtNjcyLDcgKzY5MSw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlu
a0hhc2goY29uc3QgS1VSTCYgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAg
cmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVkIFVSTC4KIAotICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIHZpc2l0ZWRDYW5vbmljYWxpemVkTGlua0hhc2goZG9jdW1lbnQsIGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKIGJvb2wgQ2hyb21pdW1CcmlkZ2U6Omlz
TGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQo=
</data>
<flag name="review"
          id="36922"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>