<?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>79820</bug_id>
          
          <creation_ts>2012-02-28 11:56:01 -0800</creation_ts>
          <short_desc>[BlackBerry] Implement features for find-in-page</short_desc>
          <delta_ts>2012-03-01 22:10:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Chen">andchen</reporter>
          <assigned_to name="Andy Chen">andchen</assigned_to>
          <cc>mifenton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566941</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 11:56:01 -0800</bug_when>
    <thetext>- Make it be able to search text around the whole page instead of single frame.
- Make it be able to start new search from active selection and last active match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566965</commentid>
    <comment_count>1</comment_count>
      <attachid>129306</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 12:25:28 -0800</bug_when>
    <thetext>Created attachment 129306
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566967</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 12:28:16 -0800</bug_when>
    <thetext>Attachment 129306 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/blackberry/Api/WebPage.cpp&apos;,...&quot; exit_code: 1
Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.h:25:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566975</commentid>
    <comment_count>3</comment_count>
      <attachid>129308</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 12:34:11 -0800</bug_when>
    <thetext>Created attachment 129308
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567042</commentid>
    <comment_count>4</comment_count>
      <attachid>129321</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 13:39:25 -0800</bug_when>
    <thetext>Created attachment 129321
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567053</commentid>
    <comment_count>5</comment_count>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-28 13:47:59 -0800</bug_when>
    <thetext>All namespace usages of WebCore:: should be removed from the .cpp&apos;s that have using namespace WebCore.

// TODO should be replaced by // FIXME:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567123</commentid>
    <comment_count>6</comment_count>
      <attachid>129334</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 14:48:40 -0800</bug_when>
    <thetext>Created attachment 129334
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567129</commentid>
    <comment_count>7</comment_count>
      <attachid>129334</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 14:57:24 -0800</bug_when>
    <thetext>Comment on attachment 129334
patch

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

&gt; Source/WebKit/blackberry/Api/WebPage.cpp:5588
&gt; +void WebPagePrivate::frameUnloaded(const WebCore::Frame* frame)

Forgot to remove WebCore::</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567130</commentid>
    <comment_count>8</comment_count>
      <attachid>129335</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-28 14:58:12 -0800</bug_when>
    <thetext>Created attachment 129335
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567330</commentid>
    <comment_count>9</comment_count>
      <attachid>129335</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-28 19:28:14 -0800</bug_when>
    <thetext>Comment on attachment 129335
patch

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

Some questions, mainly:

Maybe you could add a ActiveSearchData class to centralize m_activeSearch{String,MatchFrame,MatchCount} in a follow up?

&gt; Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp:406
&gt; +Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag)

I am not a fan of this name &apos;incrementFrame&apos;, but I do not have a better suggestion.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:62
&gt; +    if (m_activeMatch &amp;&amp; !m_activeMatch.get()-&gt;boundaryPointsValid())

you can call m_activeMatch-&gt; directly without the .get().

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:69
&gt; +        m_activeMatchCount = m_webPage-&gt;m_page-&gt;markAllMatchesForText(text, CaseInsensitive, true, TextMatchMarkerLimit);

add a /* whatIsThisBoolFor */-like comment here.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:75
&gt; +        setMarkerActive(m_activeMatch, false);

Ditto

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:95
&gt; +        | StartInSelection;

do you need the StartInSelection bit, if you just cleared any possible selection in the block above?

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:108
&gt; +        m_currentActiveMatchFrame = DOMSupport::incrementFrame(m_currentActiveMatchFrame, forward, true);
&gt; +        if (findAndMarkText(text, m_activeMatch.get(), findOptions))
&gt; +            return true;
&gt; +    } while (m_currentActiveMatchFrame &amp;&amp; startFrame != m_currentActiveMatchFrame);

I think it could be &quot;better&quot; here to actually pass the Frame* you want to search text at, instead of the setting a class member m_currentActiveMatchFrame, and use it from findAndMarkText. 

That is how I would do it, but if you feel strong about how it is now, that is fine with me.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:125
&gt; +        &amp;&amp; m_activeSearchString == text.substring(0, m_activeSearchString.length()))

prefix only? or sufix or a substring in general?

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:147
&gt; -void InPageSearchManager::setMarkerActive(WebCore::Range* range, bool active)
&gt; +void InPageSearchManager::setMarkerActive(PassRefPtr&lt;Range&gt; range, bool active)

I think you want Range* here. You are not passing any ownership, right?

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:164
&gt; +        if (frame == m_webPage-&gt;mainFrame()) // Don&apos;t need to unmark and notify client because the page will be destroyed.

if it is the mainframe, do we need to do any of the above anyways?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567581</commentid>
    <comment_count>10</comment_count>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-29 07:07:36 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 129335 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:95
&gt; &gt; +        | StartInSelection;
&gt; 
&gt; do you need the StartInSelection bit, if you just cleared any possible selection in the block above?

Correct, it&apos;s only needed in the cases with a selection.  No real harm in setting it though if the Range provided is empty.

&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:108
&gt; &gt; +        m_currentActiveMatchFrame = DOMSupport::incrementFrame(m_currentActiveMatchFrame, forward, true);
&gt; &gt; +        if (findAndMarkText(text, m_activeMatch.get(), findOptions))
&gt; &gt; +            return true;
&gt; &gt; +    } while (m_currentActiveMatchFrame &amp;&amp; startFrame != m_currentActiveMatchFrame);
&gt; 
&gt; I think it could be &quot;better&quot; here to actually pass the Frame* you want to search text at, instead of the setting a class member m_currentActiveMatchFrame, and use it from findAndMarkText. 
&gt; 
&gt; That is how I would do it, but if you feel strong about how it is now, that is fine with me.
&gt; 

Would that allow the removal of m_currentActiveMatchFrame entirely?  If so that is preferred.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:125
&gt; &gt; +        &amp;&amp; m_activeSearchString == text.substring(0, m_activeSearchString.length()))
&gt; 
&gt; prefix only? or sufix or a substring in general?
&gt; 

Prefix only, this case is when adding an additional character to a non-matched string.  No match is possible.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:164
&gt; &gt; +        if (frame == m_webPage-&gt;mainFrame()) // Don&apos;t need to unmark and notify client because the page will be destroyed.
&gt; 
&gt; if it is the mainframe, do we need to do any of the above anyways?

Yes, we aren&apos;t unloading the instance so on page navigation we need to clear the cached objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567587</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-29 07:10:41 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review

&gt; Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp:407
&gt; +{

Agreed, this was pulled from Page.cpp though so I&apos;m in favor of keeping it but we should include a comment as to the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567597</commentid>
    <comment_count>12</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-29 07:18:00 -0800</bug_when>
    <thetext>
&gt; &gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:164
&gt; &gt; &gt; +        if (frame == m_webPage-&gt;mainFrame()) // Don&apos;t need to unmark and notify client because the page will be destroyed.
&gt; &gt; 
&gt; &gt; if it is the mainframe, do we need to do any of the above anyways?
&gt;
&gt; Yes, we aren&apos;t unloading the instance so on page navigation we need to clear the cached objects.

I mean, if the frame being unloaded is the main frame, it are in page shutdown process, because Page holds the same Frame reference cross page load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567599</commentid>
    <comment_count>13</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 07:19:39 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 129335 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review
&gt; 
&gt; Some questions, mainly:
&gt; 
&gt; Maybe you could add a ActiveSearchData class to centralize m_activeSearch{String,MatchFrame,MatchCount} in a follow up?
&gt; 
If we have a ActiveSearchData class for those info, there will be only one instance of it in InPageSearchManager. I don&apos;t see the point of adding it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567604</commentid>
    <comment_count>14</comment_count>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-29 07:21:07 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Yes, we aren&apos;t unloading the instance so on page navigation we need to clear the cached objects.
&gt; 
&gt; I mean, if the frame being unloaded is the main frame, it are in page shutdown process, because Page holds the same Frame reference cross page load.

WebPage* is not destroyed when the main frame is unloaded, so this object lives on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567609</commentid>
    <comment_count>15</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 07:26:37 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 129335 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review
&gt; 

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:108
&gt; &gt; &gt; +        m_currentActiveMatchFrame = DOMSupport::incrementFrame(m_currentActiveMatchFrame, forward, true);
&gt; &gt; &gt; +        if (findAndMarkText(text, m_activeMatch.get(), findOptions))
&gt; &gt; &gt; +            return true;
&gt; &gt; &gt; +    } while (m_currentActiveMatchFrame &amp;&amp; startFrame != m_currentActiveMatchFrame);
&gt; &gt; 
&gt; &gt; I think it could be &quot;better&quot; here to actually pass the Frame* you want to search text at, instead of the setting a class member m_currentActiveMatchFrame, and use it from findAndMarkText. 
&gt; &gt; 
&gt; &gt; That is how I would do it, but if you feel strong about how it is now, that is fine with me.
&gt; &gt; 
&gt; 
&gt; Would that allow the removal of m_currentActiveMatchFrame entirely?  If so that is preferred.
&gt; 

(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 129335 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:108
&gt; &gt; &gt; +        m_currentActiveMatchFrame = DOMSupport::incrementFrame(m_currentActiveMatchFrame, forward, true);
&gt; &gt; &gt; +        if (findAndMarkText(text, m_activeMatch.get(), findOptions))
&gt; &gt; &gt; +            return true;
&gt; &gt; &gt; +    } while (m_currentActiveMatchFrame &amp;&amp; startFrame != m_currentActiveMatchFrame);
&gt; &gt; 
&gt; &gt; I think it could be &quot;better&quot; here to actually pass the Frame* you want to search text at, instead of the setting a class member m_currentActiveMatchFrame, and use it from findAndMarkText. 
&gt; &gt; 
&gt; &gt; That is how I would do it, but if you feel strong about how it is now, that is fine with me.
&gt; &gt; 
&gt; 
&gt; Would that allow the removal of m_currentActiveMatchFrame entirely?  If so that is preferred.
&gt; 

I don&apos;t think m_currentActiveMatchFrame could be removed entirely. For this function, it could be called by passing in the pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567749</commentid>
    <comment_count>16</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 11:07:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 129335 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:147
&gt; &gt; -void InPageSearchManager::setMarkerActive(WebCore::Range* range, bool active)
&gt; &gt; +void InPageSearchManager::setMarkerActive(PassRefPtr&lt;Range&gt; range, bool active)
&gt; 
&gt; I think you want Range* here. You are not passing any ownership, right?
&gt; 

Yes, I just need Range* here but I want make ranger.get() to be inside of the function and if I use RefPtr, it does not pass check-webkit-style.

Should I just use raw pointer instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567752</commentid>
    <comment_count>17</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 11:09:18 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 129335 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129335&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:147
&gt; &gt; &gt; -void InPageSearchManager::setMarkerActive(WebCore::Range* range, bool active)
&gt; &gt; &gt; +void InPageSearchManager::setMarkerActive(PassRefPtr&lt;Range&gt; range, bool active)
&gt; &gt; 
&gt; &gt; I think you want Range* here. You are not passing any ownership, right?
&gt; &gt; 
&gt; 
&gt; Yes, I just need Range* here but I want make ranger.get() to be inside of the function and if I use RefPtr, it does not pass check-webkit-style.
&gt; 
&gt; Should I just use raw pointer instead?

I mean use raw pointer for m_activeMatch. It is RefPtr&lt;Range&gt; now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567878</commentid>
    <comment_count>18</comment_count>
      <attachid>129506</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 13:34:23 -0800</bug_when>
    <thetext>Created attachment 129506
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567892</commentid>
    <comment_count>19</comment_count>
      <attachid>129506</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-29 13:51:28 -0800</bug_when>
    <thetext>Comment on attachment 129506
patch

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

&gt; Source/WebKit/blackberry/WebCoreSupport/FrameLoaderClientBlackBerry.cpp:794
&gt;  void FrameLoaderClientBlackBerry::dispatchWillClose()
&gt;  {
&gt; -    m_webPagePrivate-&gt;m_inputHandler-&gt;frameUnloaded(m_frame);
&gt; +    m_webPagePrivate-&gt;frameUnloaded(m_frame);
&gt;  }

maybe you should also update FrameLoaderClientBB::detachedFromParent2()?

&gt; Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp:412
&gt; +// This function is copied from WebCore/page/Page.cpp.
&gt; +Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag)
&gt; +{
&gt; +    return forward
&gt; +        ? curr-&gt;tree()-&gt;traverseNextWithWrap(wrapFlag)
&gt; +        : curr-&gt;tree()-&gt;traversePreviousWithWrap(wrapFlag);
&gt; +}

I would rather make it local in PageFindManage till someone needs it.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.h:25
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

unneeded now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567893</commentid>
    <comment_count>20</comment_count>
      <attachid>129506</attachid>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-29 13:53:13 -0800</bug_when>
    <thetext>Comment on attachment 129506
patch

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

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:98
&gt; +        currentActiveMatchFrame = m_activeMatch ? m_activeMatch-&gt;ownerDocument()-&gt;frame() : m_webPage-&gt;focusedOrMainFrame();

Why not initialize the variable with this logic?  Or make it. 
Frame* currentActiveMatchFrame = !selection.isNone() &amp;&amp; m_activeMatch ? m_activeMatch-&gt;ownerDocument()-&gt;frame() : m_webPage-&gt;focusedOrMainFrame();

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:100
&gt; +    Frame* startFrame = currentActiveMatchFrame;

Move this above the Do loop.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:124
&gt; +        &amp;&amp; m_activeSearchString.length()

Should we include a check to make sure that text.length() is greater than m_activeSearchString.length() to avoid the substring?  Or us text.startsWith()

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:158
&gt; +    Frame* currentActiveMatchFrame = !m_activeMatch ? 0 : m_activeMatch-&gt;ownerDocument()-&gt;frame();

if (!m_activeMatch)
    return;

Would be beneficial here.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:159
&gt; +    if (currentActiveMatchFrame == frame || m_webPage-&gt;mainFrame() == frame) {

Why is the mainframe special cased?  If the mainFrame is unloaded so are the subframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567900</commentid>
    <comment_count>21</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 14:00:21 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 129506 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129506&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebCoreSupport/FrameLoaderClientBlackBerry.cpp:794
&gt; &gt;  void FrameLoaderClientBlackBerry::dispatchWillClose()
&gt; &gt;  {
&gt; &gt; -    m_webPagePrivate-&gt;m_inputHandler-&gt;frameUnloaded(m_frame);
&gt; &gt; +    m_webPagePrivate-&gt;frameUnloaded(m_frame);
&gt; &gt;  }
&gt; 
&gt; maybe you should also update FrameLoaderClientBB::detachedFromParent2()?
Will do.

&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/DOMSupport.cpp:412
&gt; &gt; +// This function is copied from WebCore/page/Page.cpp.
&gt; &gt; +Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag)
&gt; &gt; +{
&gt; &gt; +    return forward
&gt; &gt; +        ? curr-&gt;tree()-&gt;traverseNextWithWrap(wrapFlag)
&gt; &gt; +        : curr-&gt;tree()-&gt;traversePreviousWithWrap(wrapFlag);
&gt; &gt; +}
&gt; 
&gt; I would rather make it local in PageFindManage till someone needs it.
It was there until Mike suggested to move over.

&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.h:25
&gt; &gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; 
&gt; unneeded now?

Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567915</commentid>
    <comment_count>22</comment_count>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 14:09:54 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 129506 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129506&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:98
&gt; &gt; +        currentActiveMatchFrame = m_activeMatch ? m_activeMatch-&gt;ownerDocument()-&gt;frame() : m_webPage-&gt;focusedOrMainFrame();
&gt; 
&gt; Why not initialize the variable with this logic?  Or make it. 
&gt; Frame* currentActiveMatchFrame = !selection.isNone() &amp;&amp; m_activeMatch ? m_activeMatch-&gt;ownerDocument()-&gt;frame() : m_webPage-&gt;focusedOrMainFrame();
&gt; 
I&apos;ll change the logic.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:100
&gt; &gt; +    Frame* startFrame = currentActiveMatchFrame;
&gt; 
&gt; Move this above the Do loop.
Will do.
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:124
&gt; &gt; +        &amp;&amp; m_activeSearchString.length()
&gt; 
&gt; Should we include a check to make sure that text.length() is greater than m_activeSearchString.length() to avoid the substring?  Or us text.startsWith()
&gt; 
I&apos;ll check.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:158
&gt; &gt; +    Frame* currentActiveMatchFrame = !m_activeMatch ? 0 : m_activeMatch-&gt;ownerDocument()-&gt;frame();
&gt; 
&gt; if (!m_activeMatch)
&gt;     return;
&gt; 
&gt; Would be beneficial here.
&gt; 
If m_activeMatch==0, we don&apos;t need to clear other values?

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:159
&gt; &gt; +    if (currentActiveMatchFrame == frame || m_webPage-&gt;mainFrame() == frame) {
&gt; 
&gt; Why is the mainframe special cased?  If the mainFrame is unloaded so are the subframes.

In both cases we need to clear those values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567923</commentid>
    <comment_count>23</comment_count>
      <attachid>129506</attachid>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-02-29 14:13:36 -0800</bug_when>
    <thetext>Comment on attachment 129506
patch

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

&gt;&gt;&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:158
&gt;&gt;&gt; +    Frame* currentActiveMatchFrame = !m_activeMatch ? 0 : m_activeMatch-&gt;ownerDocument()-&gt;frame();
&gt;&gt; 
&gt;&gt; if (!m_activeMatch)
&gt;&gt;     return;
&gt;&gt; 
&gt;&gt; Would be beneficial here.
&gt; 
&gt; If m_activeMatch==0, we don&apos;t need to clear other values?

If currentActiveMatchFrame == 0 you don&apos;t go into the block.

&gt;&gt;&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:159
&gt;&gt;&gt; +    if (currentActiveMatchFrame == frame || m_webPage-&gt;mainFrame() == frame) {
&gt;&gt; 
&gt;&gt; Why is the mainframe special cased?  If the mainFrame is unloaded so are the subframes.
&gt; 
&gt; In both cases we need to clear those values.

So it&apos;s really that if there is no activeMatch you need to reset m_activeSearchString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567991</commentid>
    <comment_count>24</comment_count>
      <attachid>129528</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 15:15:27 -0800</bug_when>
    <thetext>Created attachment 129528
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567992</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 15:18:29 -0800</bug_when>
    <thetext>Attachment 129528 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/blackberry/Api/WebPage.cpp&apos;,...&quot; exit_code: 1
Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:157:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568000</commentid>
    <comment_count>26</comment_count>
      <attachid>129534</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 15:23:52 -0800</bug_when>
    <thetext>Created attachment 129534
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568017</commentid>
    <comment_count>27</comment_count>
      <attachid>129538</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-02-29 15:37:36 -0800</bug_when>
    <thetext>Created attachment 129538
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568027</commentid>
    <comment_count>28</comment_count>
      <attachid>129538</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-29 15:43:02 -0800</bug_when>
    <thetext>Comment on attachment 129538
patch

Mike, please cq+ if you do not have any further requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568565</commentid>
    <comment_count>29</comment_count>
      <attachid>129538</attachid>
    <who name="Mike Fenton">mifenton</who>
    <bug_when>2012-03-01 04:51:14 -0800</bug_when>
    <thetext>Comment on attachment 129538
patch

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

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:103
&gt; +        if (findAndMarkText(text, m_activeMatch.get(), currentActiveMatchFrame, findOptions))

m_activeMatch is always null in the case, why not pass 0 explicitly?

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:162
&gt; +    Frame* currentActiveMatchFrame = !m_activeMatch ? 0 : m_activeMatch-&gt;ownerDocument()-&gt;frame();

Remove this check against !m_activeMatch, it was just checked with an early return.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.cpp:163
&gt; +    if (currentActiveMatchFrame == frame || m_webPage-&gt;mainFrame() == frame) {

The extra check inside the early return removed the need for m_webPage-&gt;mainFrame() == frame

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.h:47
&gt;      void setMarkerActive(WebCore::Range*, bool active);

active parameter should not be included.

&gt; Source/WebKit/blackberry/WebKitSupport/InPageSearchManager.h:49
&gt; +    bool shouldSearchForText(const String&amp; text);

text parameter should not be included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568654</commentid>
    <comment_count>30</comment_count>
      <attachid>129703</attachid>
    <who name="Andy Chen">andchen</who>
    <bug_when>2012-03-01 07:38:55 -0800</bug_when>
    <thetext>Created attachment 129703
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568655</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 07:41:45 -0800</bug_when>
    <thetext>Attachment 129703 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;La...&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h&quot;
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 192 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569250</commentid>
    <comment_count>32</comment_count>
      <attachid>129703</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 22:10:48 -0800</bug_when>
    <thetext>Comment on attachment 129703
patch

Clearing flags on attachment: 129703

Committed r109506: &lt;http://trac.webkit.org/changeset/109506&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569251</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 22:10:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129306</attachid>
            <date>2012-02-28 12:25:28 -0800</date>
            <delta_ts>2012-02-28 12:33:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15599</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSBhMWRkNDZhNmFiNDk4YmJkZjkxNGE1NjM2M2FiYWY4ODAwMmZmMWMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA3ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTA4ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTIgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU3IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGM4NGY5YTIuLjRmN2Y0MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRI
YW5kbGVyLT5mcmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXIt
PmZyYW1lVW5sb2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xk
aW5nLgogICAgIHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQq
KTsKIAorICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAg
ICAgc3RhdGljIFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0
b3JPclNlbGZJZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JT
ZWxmSWZGaXhlZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggNTRiMDA1Mi4uMTYzZjEzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjggIEFuZHkgQ2hlbiAg
PGFuZGNoZW5AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1
cmVzIGZvciBmaW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3
aG9sZSBwYWdlIGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUg
YWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBh
Y3RpdmUgbWF0Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRv
bi4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQ
YWdlX3AuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0
LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50
RnJhbWUpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4
dFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFn
ZXI6OnNob3VsZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0
aXZlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6
ZnJhbWVVbmxvYWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjggIE1pa2Ug
RmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gUmVtb3Zl
IHVudXNlZCBmb2N1c2VkTm9kZUNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIENocm9tZSBj
bGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4
IGFmZGRkNTEuLjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwCkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsK
LSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2Zy
YW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3Io
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5k
ZXggNTNmZDg3OC4uNjNkNjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTMgQEAgVmlz
aWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCitGcmFtZSog
aW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykK
K3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVBy
ZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2Vi
S2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5o
CkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlk
UG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZy
YW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOwor
CiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdl
U2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uYjFkZDMyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2Vh
cmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpJblBhZ2VTZWFyY2hNYW5hZ2VyKFdlYlBhZ2VQ
cml2YXRlKiBwYWdlKQogICAgIDogbV93ZWJQYWdlKHBhZ2UpCiAgICAgLCBtX2FjdGl2ZU1hdGNo
KDApCisgICAgLCBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKDApCiB7CiB9CiAKQEAgLTUxLDQy
ICs1MywxMjAgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
KyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gTmVlZCB0byB2YWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2FzZSBv
ZiBhbnkgbm9kZSBvZiBpdCBiZWluZyByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoCisgICAgaWYg
KG1fYWN0aXZlTWF0Y2ggJiYgIW1fYWN0aXZlTWF0Y2guZ2V0KCktPmJvdW5kYXJ5UG9pbnRzVmFs
aWQoKSkKKyAgICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHNlYXJjaFN0YXJ0aW5nUG9pbnQobV9hY3RpdmVNYXRjaCk7CisgICAgaWYgKG1fYWN0
aXZlU2VhcmNoU3RyaW5nICE9IHRleHQpIHsgLy8gbmV3IHNlYXJjaAogICAgICAgICBtX2FjdGl2
ZVNlYXJjaFN0cmluZyA9IHRleHQ7CisgICAgICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtB
bGxUZXh0TWF0Y2hlcygpOwogICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQgPSBtX3dlYlBhZ2Ut
Pm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQsIFdlYkNvcmU6OkNhc2VJbnNlbnNp
dGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwotICAgIH0gZWxzZQotICAgICAgICBz
ZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwgZmFsc2UpOworICAgICAgICBpZiAo
IW1fYWN0aXZlTWF0Y2hDb3VudCkgeworICAgICAgICAgICAgY2xlYXJUZXh0TWF0Y2hlcygpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gc2Vh
cmNoIHNhbWUgc3RyaW5nIGZvciBuZXh0IG9jY3VycmVuY2UKKyAgICAgICAgc2V0TWFya2VyQWN0
aXZlKG1fYWN0aXZlTWF0Y2gsIGZhbHNlKTsKKyAgICAgICAgLy8gU2VhcmNoaW5nIGZvciBzYW1l
IHRleHQgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiBsYXN0IG1hdGNoCisgICAgICAgIGlm
IChtX2FjdGl2ZU1hdGNoKSB7CisgICAgICAgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAg
ICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRTdGFydChzZWFyY2hTdGFydGluZ1BvaW50LT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWFyY2hT
dGFydGluZ1BvaW50LT5zZXRFbmQoc2VhcmNoU3RhcnRpbmdQb2ludC0+c3RhcnRQb3NpdGlvbigp
KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSWYgdGhlcmUgaXMgYW55IGFjdGl2ZSBzZWxlY3Rp
b24sIHNlYXJjaCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGl0CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkp
IHsKKyAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludCA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCku
Z2V0KCk7CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBtX3dlYlBhZ2UtPmZv
Y3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKKyAgICB9CiAKICAgICBjb25zdCBGaW5kT3B0aW9u
cyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykKICAgICAg
ICAgfCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJv
dW5kOyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAg
ICAgICAgfCBXZWJDb3JlOjpTdGFydEluU2VsZWN0aW9uOwogCi0gICAgLy8gVE9ETyBTdGFydElu
U2VsZWN0aW9uCisgICAgaWYgKCFtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKQorICAgICAgICBt
X2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKIAotICAgIG1fYWN0aXZlTWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5lZGl0b3Io
KS0+ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgp
LCBmaW5kT3B0aW9ucyk7Ci0gICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCks
IHRydWUpOworICAgIEZyYW1lKiBzdGFydEZyYW1lID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZTsKKyAgICBpZiAoZmluZEFuZE1hcmtUZXh0KHRleHQsIHNlYXJjaFN0YXJ0aW5nUG9pbnQuZ2V0
KCksIGZpbmRPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkbyB7CisgICAg
ICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBET01TdXBwb3J0OjppbmNyZW1lbnRGcmFt
ZShtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lLCBmb3J3YXJkLCB0cnVlKTsKKyAgICAgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBmaW5kT3B0aW9ucykp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IHdoaWxlIChtX2N1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lICYmIHN0YXJ0RnJhbWUgIT0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSk7CisK
KyAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAgLy8gU29tZSBpbmNvbnNpc3RlbmN5IG9jY3Vy
cmVkIGluIGRvbSBhbmQgcGFnZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzaG91bGRTZWFyY2hGb3JU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAodGV4dCA9PSBtX2FjdGl2ZVNlYXJj
aFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1fYWN0aXZlTWF0Y2hDb3VudDsKKworICAgIC8vIElm
IHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5nIGlzIHByZWZpeCBvZiBuZXcgc2VhcmNoIHN0cmlu
ZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYgdGhlIHByZXZpb3VzIG9uZSBoYXMgemVybyByZXN1
bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFy
Y2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPT0gdGV4
dC5zdWJzdHJpbmcoMCwgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSW5QYWdlU2VhcmNoTWFu
YWdlcjo6ZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6UmFuZ2Uq
IHJhbmdlLCBjb25zdCBGaW5kT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX2FjdGl2ZU1hdGNo
ID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmdBbmRTY3Jv
bGxUb1Zpc2libGUodGV4dCwgcmFuZ2UsIG9wdGlvbnMpOworICAgIGlmIChtX2FjdGl2ZU1hdGNo
KSB7CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLCB0cnVlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1f
cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAg
ICBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hN
YW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2
ZSkKK3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFBhc3NSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKLSAgICBpZiAoIXJhbmdlKQor
ICAgIGlmICghcmFuZ2UgfHwgIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpCiAgICAgICAgIHJl
dHVybjsKLSAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV9jdXJyZW50QWN0
aXZlTWF0Y2hGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJu
OwotICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLCBhY3RpdmUpOwor
ICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLmdldCgpLCBhY3RpdmUp
OworfQorCit2b2lkIEluUGFnZVNlYXJjaE1hbmFnZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1l
ID09IGZyYW1lKSB7CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAwOworICAg
ICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSBT
dHJpbmcoKTsKKyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gMDsKKyAgICAgICAgaWYgKGZy
YW1lID09IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpIC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGFu
ZCBub3RpZnkgY2xpZW50IGJlY2F1c2UgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4
dE1hdGNoZXMoKTsKKyAgICAgICAgLy8gVE9ETyBub3RpZnkgY2xpZW50CisgICAgfQogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBh
Z2VTZWFyY2hNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKaW5kZXggMWY2YmJiNS4uMDA5MzQ3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFn
ZVNlYXJjaE1hbmFnZXIuaApAQCAtMTksMTIgKzE5LDE2IEBACiAjaWZuZGVmIEluUGFnZVNlYXJj
aE1hbmFnZXJfaAogI2RlZmluZSBJblBhZ2VTZWFyY2hNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIkZp
bmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisvLyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsK
K2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiB9CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKQEAg
LTM5LDE1ICs0MywxOSBAQCBwdWJsaWM6CiAgICAgfkluUGFnZVNlYXJjaE1hbmFnZXIoKTsKIAog
ICAgIGJvb2wgZmluZE5leHRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGZvcndhcmQp
OworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiBwcml2
YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0TWF0Y2hlcygpOwotICAgIHZvaWQgc2V0TWFya2VyQWN0
aXZlKFdlYkNvcmU6OlJhbmdlKiwgYm9vbCBhY3RpdmUpOworICAgIHZvaWQgc2V0TWFya2VyQWN0
aXZlKFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+LCBib29sIGFjdGl2ZSk7CisgICAgYm9vbCBm
aW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSosIGNvbnN0
IFdlYkNvcmU6OkZpbmRPcHRpb25zJik7CisgICAgYm9vbCBzaG91bGRTZWFyY2hGb3JUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9hY3RpdmVNYXRjaDsKICAgICBTdHJpbmcgbV9hY3Rp
dmVTZWFyY2hTdHJpbmc7CiAgICAgaW50IG1fYWN0aXZlTWF0Y2hDb3VudDsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3Bw
CmluZGV4IGM2YWViNDkuLjE1MmRmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcApAQCAtNzEwLDcgKzcxMCw3
IEBAIHZvaWQgSW5wdXRIYW5kbGVyOjplbnN1cmVGb2N1c0VsZW1lbnRWaXNpYmxlKGJvb2wgY2Vu
dGVySW5WaWV3KQogICAgICAgICBlbnN1cmVGb2N1c1RleHRFbGVtZW50VmlzaWJsZShjZW50ZXJJ
blZpZXcgPyBDZW50ZXJBbHdheXMgOiBDZW50ZXJJZk5lZWRlZCk7CiB9CiAKLXZvaWQgSW5wdXRI
YW5kbGVyOjpmcmFtZVVubG9hZGVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5wdXRIYW5kbGVyOjpm
cmFtZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWlzQWN0aXZlVGV4
dEVkaXQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaAppbmRleCAxYjY0YTc4Li4wZjRjZGQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1
dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9J
bnB1dEhhbmRsZXIuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2RlRm9j
dXNlZChXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6Tm9kZSopOwogICAgIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCgpOwotICAgIHZvaWQgZnJh
bWVVbmxvYWRlZChXZWJDb3JlOjpGcmFtZSopOworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25z
dCBXZWJDb3JlOjpGcmFtZSopOwogCiAgICAgYm9vbCBoYW5kbGVLZXlib2FyZElucHV0KGNvbnN0
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50JiwgYm9vbCBjaGFuZ2VJc1BhcnRP
ZkNvbXBvc2l0aW9uID0gZmFsc2UpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129308</attachid>
            <date>2012-02-28 12:34:11 -0800</date>
            <delta_ts>2012-02-28 13:38:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15572</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSBjNGQ2Mjk0YWQ1ZThmYTNkOWI1YzU1OGU1ZjI2M2YyZjkzN2QxY2RjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA3ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTA4ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTEgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU2IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGM4NGY5YTIuLjRmN2Y0MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRI
YW5kbGVyLT5mcmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXIt
PmZyYW1lVW5sb2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xk
aW5nLgogICAgIHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQq
KTsKIAorICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAg
ICAgc3RhdGljIFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0
b3JPclNlbGZJZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JT
ZWxmSWZGaXhlZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggNTRiMDA1Mi4uMTYzZjEzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjggIEFuZHkgQ2hlbiAg
PGFuZGNoZW5AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1
cmVzIGZvciBmaW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3
aG9sZSBwYWdlIGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUg
YWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBh
Y3RpdmUgbWF0Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRv
bi4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQ
YWdlX3AuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0
LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50
RnJhbWUpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4
dFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFn
ZXI6OnNob3VsZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0
aXZlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6
ZnJhbWVVbmxvYWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjggIE1pa2Ug
RmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gUmVtb3Zl
IHVudXNlZCBmb2N1c2VkTm9kZUNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIENocm9tZSBj
bGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4
IGFmZGRkNTEuLjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwCkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsK
LSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2Zy
YW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3Io
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5k
ZXggNTNmZDg3OC4uNjNkNjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTMgQEAgVmlz
aWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCitGcmFtZSog
aW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykK
K3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVBy
ZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2Vi
S2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5o
CkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlk
UG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZy
YW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOwor
CiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdl
U2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uYjFkZDMyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2Vh
cmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpJblBhZ2VTZWFyY2hNYW5hZ2VyKFdlYlBhZ2VQ
cml2YXRlKiBwYWdlKQogICAgIDogbV93ZWJQYWdlKHBhZ2UpCiAgICAgLCBtX2FjdGl2ZU1hdGNo
KDApCisgICAgLCBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKDApCiB7CiB9CiAKQEAgLTUxLDQy
ICs1MywxMjAgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
KyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gTmVlZCB0byB2YWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2FzZSBv
ZiBhbnkgbm9kZSBvZiBpdCBiZWluZyByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoCisgICAgaWYg
KG1fYWN0aXZlTWF0Y2ggJiYgIW1fYWN0aXZlTWF0Y2guZ2V0KCktPmJvdW5kYXJ5UG9pbnRzVmFs
aWQoKSkKKyAgICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHNlYXJjaFN0YXJ0aW5nUG9pbnQobV9hY3RpdmVNYXRjaCk7CisgICAgaWYgKG1fYWN0
aXZlU2VhcmNoU3RyaW5nICE9IHRleHQpIHsgLy8gbmV3IHNlYXJjaAogICAgICAgICBtX2FjdGl2
ZVNlYXJjaFN0cmluZyA9IHRleHQ7CisgICAgICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtB
bGxUZXh0TWF0Y2hlcygpOwogICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQgPSBtX3dlYlBhZ2Ut
Pm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQsIFdlYkNvcmU6OkNhc2VJbnNlbnNp
dGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwotICAgIH0gZWxzZQotICAgICAgICBz
ZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwgZmFsc2UpOworICAgICAgICBpZiAo
IW1fYWN0aXZlTWF0Y2hDb3VudCkgeworICAgICAgICAgICAgY2xlYXJUZXh0TWF0Y2hlcygpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gc2Vh
cmNoIHNhbWUgc3RyaW5nIGZvciBuZXh0IG9jY3VycmVuY2UKKyAgICAgICAgc2V0TWFya2VyQWN0
aXZlKG1fYWN0aXZlTWF0Y2gsIGZhbHNlKTsKKyAgICAgICAgLy8gU2VhcmNoaW5nIGZvciBzYW1l
IHRleHQgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiBsYXN0IG1hdGNoCisgICAgICAgIGlm
IChtX2FjdGl2ZU1hdGNoKSB7CisgICAgICAgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAg
ICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRTdGFydChzZWFyY2hTdGFydGluZ1BvaW50LT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWFyY2hT
dGFydGluZ1BvaW50LT5zZXRFbmQoc2VhcmNoU3RhcnRpbmdQb2ludC0+c3RhcnRQb3NpdGlvbigp
KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSWYgdGhlcmUgaXMgYW55IGFjdGl2ZSBzZWxlY3Rp
b24sIHNlYXJjaCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGl0CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkp
IHsKKyAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludCA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCku
Z2V0KCk7CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBtX3dlYlBhZ2UtPmZv
Y3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKKyAgICB9CiAKICAgICBjb25zdCBGaW5kT3B0aW9u
cyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykKICAgICAg
ICAgfCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJv
dW5kOyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAg
ICAgICAgfCBXZWJDb3JlOjpTdGFydEluU2VsZWN0aW9uOwogCi0gICAgLy8gVE9ETyBTdGFydElu
U2VsZWN0aW9uCisgICAgaWYgKCFtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKQorICAgICAgICBt
X2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKIAotICAgIG1fYWN0aXZlTWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5lZGl0b3Io
KS0+ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgp
LCBmaW5kT3B0aW9ucyk7Ci0gICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCks
IHRydWUpOworICAgIEZyYW1lKiBzdGFydEZyYW1lID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZTsKKyAgICBpZiAoZmluZEFuZE1hcmtUZXh0KHRleHQsIHNlYXJjaFN0YXJ0aW5nUG9pbnQuZ2V0
KCksIGZpbmRPcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkbyB7CisgICAg
ICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBET01TdXBwb3J0OjppbmNyZW1lbnRGcmFt
ZShtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lLCBmb3J3YXJkLCB0cnVlKTsKKyAgICAgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBmaW5kT3B0aW9ucykp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IHdoaWxlIChtX2N1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lICYmIHN0YXJ0RnJhbWUgIT0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSk7CisK
KyAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAgLy8gU29tZSBpbmNvbnNpc3RlbmN5IG9jY3Vy
cmVkIGluIGRvbSBhbmQgcGFnZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzaG91bGRTZWFyY2hGb3JU
ZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAodGV4dCA9PSBtX2FjdGl2ZVNlYXJj
aFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1fYWN0aXZlTWF0Y2hDb3VudDsKKworICAgIC8vIElm
IHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5nIGlzIHByZWZpeCBvZiBuZXcgc2VhcmNoIHN0cmlu
ZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYgdGhlIHByZXZpb3VzIG9uZSBoYXMgemVybyByZXN1
bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFy
Y2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPT0gdGV4
dC5zdWJzdHJpbmcoMCwgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSW5QYWdlU2VhcmNoTWFu
YWdlcjo6ZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6UmFuZ2Uq
IHJhbmdlLCBjb25zdCBGaW5kT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX2FjdGl2ZU1hdGNo
ID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmdBbmRTY3Jv
bGxUb1Zpc2libGUodGV4dCwgcmFuZ2UsIG9wdGlvbnMpOworICAgIGlmIChtX2FjdGl2ZU1hdGNo
KSB7CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLCB0cnVlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1f
cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAg
ICBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hN
YW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2
ZSkKK3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFBhc3NSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKLSAgICBpZiAoIXJhbmdlKQor
ICAgIGlmICghcmFuZ2UgfHwgIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpCiAgICAgICAgIHJl
dHVybjsKLSAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV9jdXJyZW50QWN0
aXZlTWF0Y2hGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJu
OwotICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLCBhY3RpdmUpOwor
ICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLmdldCgpLCBhY3RpdmUp
OworfQorCit2b2lkIEluUGFnZVNlYXJjaE1hbmFnZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1l
ID09IGZyYW1lKSB7CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAwOworICAg
ICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSBT
dHJpbmcoKTsKKyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gMDsKKyAgICAgICAgaWYgKGZy
YW1lID09IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpIC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGFu
ZCBub3RpZnkgY2xpZW50IGJlY2F1c2UgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4
dE1hdGNoZXMoKTsKKyAgICAgICAgLy8gVE9ETyBub3RpZnkgY2xpZW50CisgICAgfQogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBh
Z2VTZWFyY2hNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKaW5kZXggMWY2YmJiNS4uM2E5M2VlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFn
ZVNlYXJjaE1hbmFnZXIuaApAQCAtMTksMTIgKzE5LDE1IEBACiAjaWZuZGVmIEluUGFnZVNlYXJj
aE1hbmFnZXJfaAogI2RlZmluZSBJblBhZ2VTZWFyY2hNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIkZp
bmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiB9
CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKQEAgLTM5LDE1ICs0MiwxOSBAQCBwdWJsaWM6CiAg
ICAgfkluUGFnZVNlYXJjaE1hbmFnZXIoKTsKIAogICAgIGJvb2wgZmluZE5leHRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIGZvcndhcmQpOworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChj
b25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0TWF0
Y2hlcygpOwotICAgIHZvaWQgc2V0TWFya2VyQWN0aXZlKFdlYkNvcmU6OlJhbmdlKiwgYm9vbCBh
Y3RpdmUpOworICAgIHZvaWQgc2V0TWFya2VyQWN0aXZlKFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+LCBib29sIGFjdGl2ZSk7CisgICAgYm9vbCBmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSosIGNvbnN0IFdlYkNvcmU6OkZpbmRPcHRpb25zJik7Cisg
ICAgYm9vbCBzaG91bGRTZWFyY2hGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICBX
ZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9h
Y3RpdmVNYXRjaDsKICAgICBTdHJpbmcgbV9hY3RpdmVTZWFyY2hTdHJpbmc7CiAgICAgaW50IG1f
YWN0aXZlTWF0Y2hDb3VudDsKKyAgICBXZWJDb3JlOjpGcmFtZSogbV9jdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCmluZGV4IGM2YWViNDkuLjE1MmRmOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5w
dXRIYW5kbGVyLmNwcApAQCAtNzEwLDcgKzcxMCw3IEBAIHZvaWQgSW5wdXRIYW5kbGVyOjplbnN1
cmVGb2N1c0VsZW1lbnRWaXNpYmxlKGJvb2wgY2VudGVySW5WaWV3KQogICAgICAgICBlbnN1cmVG
b2N1c1RleHRFbGVtZW50VmlzaWJsZShjZW50ZXJJblZpZXcgPyBDZW50ZXJBbHdheXMgOiBDZW50
ZXJJZk5lZWRlZCk7CiB9CiAKLXZvaWQgSW5wdXRIYW5kbGVyOjpmcmFtZVVubG9hZGVkKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgSW5wdXRIYW5kbGVyOjpmcmFtZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBm
cmFtZSkKIHsKICAgICBpZiAoIWlzQWN0aXZlVGV4dEVkaXQoKSkKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhh
bmRsZXIuaAppbmRleCAxYjY0YTc4Li4wZjRjZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaApAQCAtNjAsNyArNjAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2RlRm9jdXNlZChXZWJDb3JlOjpOb2RlKik7CiAgICAg
dm9pZCBub2RlVGV4dENoYW5nZWQoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwogICAgIHZvaWQgc2Vs
ZWN0aW9uQ2hhbmdlZCgpOwotICAgIHZvaWQgZnJhbWVVbmxvYWRlZChXZWJDb3JlOjpGcmFtZSop
OworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiAgICAg
Ym9vbCBoYW5kbGVLZXlib2FyZElucHV0KGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXli
b2FyZEV2ZW50JiwgYm9vbCBjaGFuZ2VJc1BhcnRPZkNvbXBvc2l0aW9uID0gZmFsc2UpOwogCi0t
IAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129321</attachid>
            <date>2012-02-28 13:39:25 -0800</date>
            <delta_ts>2012-02-28 14:48:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15545</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSA4YmQ5YzQ3NjRiYjg1ZGE4MWVjYjFkOTkzODczN2JhZGM4M2UxZWU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA3ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTA4ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTEgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU2IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGM4NGY5YTIuLjRmN2Y0MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRI
YW5kbGVyLT5mcmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXIt
PmZyYW1lVW5sb2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xk
aW5nLgogICAgIHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQq
KTsKIAorICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAg
ICAgc3RhdGljIFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0
b3JPclNlbGZJZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JT
ZWxmSWZGaXhlZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggNTRiMDA1Mi4uMTYzZjEzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjggIEFuZHkgQ2hlbiAg
PGFuZGNoZW5AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1
cmVzIGZvciBmaW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3
aG9sZSBwYWdlIGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUg
YWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBh
Y3RpdmUgbWF0Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRv
bi4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQ
YWdlX3AuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0
LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50
RnJhbWUpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4
dFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFn
ZXI6OnNob3VsZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0
aXZlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6
ZnJhbWVVbmxvYWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjggIE1pa2Ug
RmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gUmVtb3Zl
IHVudXNlZCBmb2N1c2VkTm9kZUNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIENocm9tZSBj
bGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4
IGFmZGRkNTEuLjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwCkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsK
LSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2Zy
YW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3Io
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5k
ZXggNTNmZDg3OC4uNjNkNjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTMgQEAgVmlz
aWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCitGcmFtZSog
aW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykK
K3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVBy
ZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2Vi
S2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5o
CkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlk
UG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZy
YW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOwor
CiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdl
U2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uYWZjNDY1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2Vh
cmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpJblBhZ2VTZWFyY2hNYW5hZ2VyKFdlYlBhZ2VQ
cml2YXRlKiBwYWdlKQogICAgIDogbV93ZWJQYWdlKHBhZ2UpCiAgICAgLCBtX2FjdGl2ZU1hdGNo
KDApCisgICAgLCBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKDApCiB7CiB9CiAKQEAgLTUxLDQy
ICs1MywxMjAgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
ICAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgdGhlIHJhbmdlIGluIGNhc2UgYW55IG5vZGUg
aGFzIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IHNlYXJjaC4KKyAgICBpZiAobV9hY3RpdmVNYXRj
aCAmJiAhbV9hY3RpdmVNYXRjaC5nZXQoKS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKQorICAgICAg
ICBtX2FjdGl2ZU1hdGNoID0gMDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VhcmNo
U3RhcnRpbmdQb2ludChtX2FjdGl2ZU1hdGNoKTsKKyAgICBpZiAobV9hY3RpdmVTZWFyY2hTdHJp
bmcgIT0gdGV4dCkgeyAvLyBTdGFydCBhIG5ldyBzZWFyY2guCisgICAgICAgIG1fYWN0aXZlU2Vh
cmNoU3RyaW5nID0gdGV4dDsKKyAgICAgICAgbV93ZWJQYWdlLT5tX3BhZ2UtPnVubWFya0FsbFRl
eHRNYXRjaGVzKCk7CiAgICAgICAgIG1fYWN0aXZlTWF0Y2hDb3VudCA9IG1fd2ViUGFnZS0+bV9w
YWdlLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQodGV4dCwgV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZl
LCB0cnVlLCBUZXh0TWF0Y2hNYXJrZXJMaW1pdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldE1h
cmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLmdldCgpLCBmYWxzZSk7CisgICAgICAgIGlmICghbV9h
Y3RpdmVNYXRjaENvdW50KSB7CisgICAgICAgICAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBTZWFyY2gg
c2FtZSBzdHJpbmcgZm9yIG5leHQgb2NjdXJyZW5jZS4KKyAgICAgICAgc2V0TWFya2VyQWN0aXZl
KG1fYWN0aXZlTWF0Y2gsIGZhbHNlKTsKKyAgICAgICAgLy8gU2VhcmNoaW5nIGZvciBzYW1lIHN0
cmluZyBzaG91bGQgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIGxhc3QgbWF0Y2guCisgICAgICAgIGlm
IChtX2FjdGl2ZU1hdGNoKSB7CisgICAgICAgICAgICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAg
ICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRTdGFydChzZWFyY2hTdGFydGluZ1BvaW50LT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZWFyY2hT
dGFydGluZ1BvaW50LT5zZXRFbmQoc2VhcmNoU3RhcnRpbmdQb2ludC0+c3RhcnRQb3NpdGlvbigp
KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSWYgdGhlcmUgaXMgYW55IGFjdGl2ZSBzZWxlY3Rp
b24sIG5ldyBzZWFyY2ggc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyBvZiBpdC4KKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc05v
bmUoKSkgeworICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50ID0gc2VsZWN0aW9uLmZpcnN0UmFu
Z2UoKS5nZXQoKTsKKyAgICAgICAgbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IG1fd2ViUGFn
ZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgICAgIG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigpOworICAgIH0KIAogICAgIGNvbnN0IEZpbmRP
cHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndhcmQgPyAwIDogV2ViQ29yZTo6QmFja3dhcmRzKQog
ICAgICAgICB8IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZQotICAgICAgICB8IFdlYkNvcmU6Oldy
YXBBcm91bmQ7IC8vIFRPRE8gc2hvdWxkIHdyYXAgYXJvdW5kIGluIHBhZ2UsIG5vdCBpbiBmcmFt
ZQorICAgICAgICB8IFdlYkNvcmU6OlN0YXJ0SW5TZWxlY3Rpb247CisKKyAgICBpZiAoIW1fY3Vy
cmVudEFjdGl2ZU1hdGNoRnJhbWUpCisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUg
PSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgLy8gVE9ETyBTdGFydElu
U2VsZWN0aW9uCisgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBtX2N1cnJlbnRBY3RpdmVNYXRjaEZy
YW1lOworICAgIGlmIChmaW5kQW5kTWFya1RleHQodGV4dCwgc2VhcmNoU3RhcnRpbmdQb2ludC5n
ZXQoKSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYWN0aXZl
TWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5lZGl0b3IoKS0+ZmluZFN0cmluZ0FuZFNj
cm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBmaW5kT3B0aW9ucyk7Ci0g
ICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCksIHRydWUpOworICAgIGRvIHsK
KyAgICAgICAgbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3JlbWVu
dEZyYW1lKG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUsIGZvcndhcmQsIHRydWUpOworICAgICAg
ICBpZiAoZmluZEFuZE1hcmtUZXh0KHRleHQsIG1fYWN0aXZlTWF0Y2guZ2V0KCksIGZpbmRPcHRp
b25zKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gd2hpbGUgKG1fY3VycmVudEFj
dGl2ZU1hdGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1l
KTsKKworICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzaG91
bGRTZWFyY2hGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAodGV4dCA9PSBt
X2FjdGl2ZVNlYXJjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1fYWN0aXZlTWF0Y2hDb3VudDsK
KworICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5nIGlzIHByZWZpeCBvZiBuZXcg
c2VhcmNoIHN0cmluZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYgdGhlIHByZXZpb3VzIG9uZSBo
YXMgemVybyByZXN1bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQKKyAgICAgICAgJiYg
bV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFyY2hT
dHJpbmcgPT0gdGV4dC5zdWJzdHJpbmcoMCwgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSW5Q
YWdlU2VhcmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgV2Vi
Q29yZTo6UmFuZ2UqIHJhbmdlLCBjb25zdCBGaW5kT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBt
X2FjdGl2ZU1hdGNoID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZWRpdG9yKCktPmZpbmRT
dHJpbmdBbmRTY3JvbGxUb1Zpc2libGUodGV4dCwgcmFuZ2UsIG9wdGlvbnMpOworICAgIGlmICht
X2FjdGl2ZU1hdGNoKSB7CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLCB0
cnVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwogdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBt
X3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1h
dGNoID0gMDsKKyAgICBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gMDsKIH0KIAotdm9pZCBJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdl
LCBib29sIGFjdGl2ZSkKK3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZl
KFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKLSAgICBp
ZiAoIXJhbmdlKQorICAgIGlmICghcmFuZ2UgfHwgIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUp
CiAgICAgICAgIHJldHVybjsKLSAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0g
bV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAg
ICAgICAgcmV0dXJuOwotICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdl
LCBhY3RpdmUpOworICAgIGRvYy0+bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLmdl
dCgpLCBhY3RpdmUpOworfQorCit2b2lkIEluUGFnZVNlYXJjaE1hbmFnZXI6OmZyYW1lVW5sb2Fk
ZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIGlmIChtX2N1cnJlbnRBY3Rp
dmVNYXRjaEZyYW1lID09IGZyYW1lKSB7CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJh
bWUgPSAwOworICAgICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICAgICAgbV9hY3RpdmVTZWFy
Y2hTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gMDsKKyAg
ICAgICAgaWYgKGZyYW1lID09IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpIC8vIERvbid0IG5lZWQg
dG8gdW5tYXJrIGFuZCBub3RpZnkgY2xpZW50IGJlY2F1c2UgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0
cm95ZWQuCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV93ZWJQYWdlLT5tX3BhZ2Ut
PnVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgICAgIC8vIFRPRE8gV2UgbmVlZCB0byBub3Rp
ZnkgY2xpZW50IGhlcmUuCisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKaW5k
ZXggMWY2YmJiNS4uM2E5M2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaApAQCAtMTksMTIg
KzE5LDE1IEBACiAjaWZuZGVmIEluUGFnZVNlYXJjaE1hbmFnZXJfaAogI2RlZmluZSBJblBhZ2VT
ZWFyY2hNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV1RG
U3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5n
ZTsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiB9CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
QEAgLTM5LDE1ICs0MiwxOSBAQCBwdWJsaWM6CiAgICAgfkluUGFnZVNlYXJjaE1hbmFnZXIoKTsK
IAogICAgIGJvb2wgZmluZE5leHRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGZvcndh
cmQpOworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiBw
cml2YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0TWF0Y2hlcygpOwotICAgIHZvaWQgc2V0TWFya2Vy
QWN0aXZlKFdlYkNvcmU6OlJhbmdlKiwgYm9vbCBhY3RpdmUpOworICAgIHZvaWQgc2V0TWFya2Vy
QWN0aXZlKFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+LCBib29sIGFjdGl2ZSk7CisgICAgYm9v
bCBmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSosIGNv
bnN0IFdlYkNvcmU6OkZpbmRPcHRpb25zJik7CisgICAgYm9vbCBzaG91bGRTZWFyY2hGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9hY3RpdmVNYXRjaDsKICAgICBTdHJpbmcgbV9h
Y3RpdmVTZWFyY2hTdHJpbmc7CiAgICAgaW50IG1fYWN0aXZlTWF0Y2hDb3VudDsKKyAgICBXZWJD
b3JlOjpGcmFtZSogbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIu
Y3BwCmluZGV4IGM2YWViNDkuLjE1MmRmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcApAQCAtNzEwLDcgKzcx
MCw3IEBAIHZvaWQgSW5wdXRIYW5kbGVyOjplbnN1cmVGb2N1c0VsZW1lbnRWaXNpYmxlKGJvb2wg
Y2VudGVySW5WaWV3KQogICAgICAgICBlbnN1cmVGb2N1c1RleHRFbGVtZW50VmlzaWJsZShjZW50
ZXJJblZpZXcgPyBDZW50ZXJBbHdheXMgOiBDZW50ZXJJZk5lZWRlZCk7CiB9CiAKLXZvaWQgSW5w
dXRIYW5kbGVyOjpmcmFtZVVubG9hZGVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5wdXRIYW5kbGVy
OjpmcmFtZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWlzQWN0aXZl
VGV4dEVkaXQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaAppbmRleCAxYjY0YTc4Li4wZjRj
ZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9J
bnB1dEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JbnB1dEhhbmRsZXIuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2Rl
Rm9jdXNlZChXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZWQoY29uc3Qg
V2ViQ29yZTo6Tm9kZSopOwogICAgIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCgpOwotICAgIHZvaWQg
ZnJhbWVVbmxvYWRlZChXZWJDb3JlOjpGcmFtZSopOworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChj
b25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiAgICAgYm9vbCBoYW5kbGVLZXlib2FyZElucHV0KGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50JiwgYm9vbCBjaGFuZ2VJc1Bh
cnRPZkNvbXBvc2l0aW9uID0gZmFsc2UpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129334</attachid>
            <date>2012-02-28 14:48:40 -0800</date>
            <delta_ts>2012-02-28 14:58:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15685</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSAyYzM1Mjg2NGJjMjRjY2YwOTI5NTQxNTZiN2NjNDg3Y2VmMjIzYzE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA3ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTE0ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTEgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGM4NGY5YTIuLjRmN2Y0MGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRI
YW5kbGVyLT5mcmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXIt
PmZyYW1lVW5sb2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQ2xlYW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xk
aW5nLgogICAgIHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQq
KTsKIAorICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAg
ICAgc3RhdGljIFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0
b3JPclNlbGZJZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JT
ZWxmSWZGaXhlZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggNTRiMDA1Mi4uMTYzZjEzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjggIEFuZHkgQ2hlbiAg
PGFuZGNoZW5AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1
cmVzIGZvciBmaW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3
aG9sZSBwYWdlIGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUg
YWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBh
Y3RpdmUgbWF0Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRv
bi4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQ
YWdlX3AuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
OjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0
LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50
RnJhbWUpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4
dFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFn
ZXI6OnNob3VsZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0
aXZlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6
ZnJhbWVVbmxvYWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjggIE1pa2Ug
RmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gUmVtb3Zl
IHVudXNlZCBmb2N1c2VkTm9kZUNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIENocm9tZSBj
bGllbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4
IGFmZGRkNTEuLjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuY3BwCkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsK
LSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2Zy
YW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3Io
RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5k
ZXggNTNmZDg3OC4uNjNkNjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTMgQEAgVmlz
aWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChj
b25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCitGcmFtZSog
aW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykK
K3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVBy
ZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2Vi
S2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5o
CkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlk
UG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZy
YW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOwor
CiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdl
U2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uMmQ3ZDY0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2Vh
cmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpJblBhZ2VTZWFyY2hNYW5hZ2VyKFdlYlBhZ2VQ
cml2YXRlKiBwYWdlKQogICAgIDogbV93ZWJQYWdlKHBhZ2UpCiAgICAgLCBtX2FjdGl2ZU1hdGNo
KDApCisgICAgLCBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKDApCiB7CiB9CiAKQEAgLTUxLDQy
ICs1MywxMjAgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
ICAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OwotICAgICAgICBtX2FjdGl2ZU1h
dGNoQ291bnQgPSBtX3dlYlBhZ2UtPm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQs
IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwot
ICAgIH0gZWxzZQotICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwg
ZmFsc2UpOwotCi0gICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBjb25zdCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3
YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykKLSAgICAgICAgfCBXZWJDb3JlOjpDYXNlSW5z
ZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJvdW5kOyAvLyBUT0RPIHNob3VsZCB3
cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmFu
Z2UgaW4gY2FzZSBhbnkgbm9kZSBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoLgor
ICAgIGlmIChtX2FjdGl2ZU1hdGNoICYmICFtX2FjdGl2ZU1hdGNoLmdldCgpLT5ib3VuZGFyeVBv
aW50c1ZhbGlkKCkpCisgICAgICAgIG1fYWN0aXZlTWF0Y2ggPSAwOwogCi0gICAgLy8gVE9ETyBT
dGFydEluU2VsZWN0aW9uCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hTdGFydGluZ1BvaW50KG1f
YWN0aXZlTWF0Y2gpOworICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7IC8v
IFN0YXJ0IGEgbmV3IHNlYXJjaC4KKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0
OworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKKyAg
ICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gbV93ZWJQYWdlLT5tX3BhZ2UtPm1hcmtBbGxNYXRj
aGVzRm9yVGV4dCh0ZXh0LCBDYXNlSW5zZW5zaXRpdmUsIHRydWUsIFRleHRNYXRjaE1hcmtlckxp
bWl0KTsKKyAgICAgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpIHsKKyAgICAgICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7IC8vIFNlYXJjaCBzYW1lIHN0cmluZyBmb3IgbmV4dCBvY2N1cnJlbmNlLgor
ICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaCwgZmFsc2UpOworICAgICAgICAv
LyBTZWFyY2hpbmcgZm9yIHNhbWUgc3RyaW5nIHNob3VsZCBzdGFydCBmcm9tIHRoZSBlbmQgb2Yg
bGFzdCBtYXRjaC4KKyAgICAgICAgaWYgKG1fYWN0aXZlTWF0Y2gpIHsKKyAgICAgICAgICAgIGlm
IChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnNldFN0YXJ0
KHNlYXJjaFN0YXJ0aW5nUG9pbnQtPmVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnNldEVuZChzZWFyY2hTdGFydGlu
Z1BvaW50LT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYg
dGhlcmUgaXMgYW55IGFjdGl2ZSBzZWxlY3Rpb24sIG5ldyBzZWFyY2ggc2hvdWxkIHN0YXJ0IGZy
b20gdGhlIGJlZ2lubmluZyBvZiBpdC4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICBzZWFyY2hTdGFydGlu
Z1BvaW50ID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKTsKKyAgICAgICAgbV9jdXJyZW50
QWN0aXZlTWF0Y2hGcmFtZSA9IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
ICAgIG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigp
OworICAgIH0KIAotICAgIG1fYWN0aXZlTWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5l
ZGl0b3IoKS0+ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2FjdGl2ZU1hdGNo
LmdldCgpLCBmaW5kT3B0aW9ucyk7Ci0gICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2gu
Z2V0KCksIHRydWUpOworICAgIGNvbnN0IEZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndh
cmQgPyAwIDogQmFja3dhcmRzKQorICAgICAgICB8IENhc2VJbnNlbnNpdGl2ZQorICAgICAgICB8
IFN0YXJ0SW5TZWxlY3Rpb247CisKKyAgICBpZiAoIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUp
CisgICAgICAgIG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBtX3dlYlBhZ2UtPmZvY3VzZWRP
ck1haW5GcmFtZSgpOworCisgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBtX2N1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lOworICAgIGlmIChmaW5kQW5kTWFya1RleHQodGV4dCwgc2VhcmNoU3RhcnRpbmdQ
b2ludC5nZXQoKSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRv
IHsKKyAgICAgICAgbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3Jl
bWVudEZyYW1lKG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUsIGZvcndhcmQsIHRydWUpOworICAg
ICAgICBpZiAoZmluZEFuZE1hcmtUZXh0KHRleHQsIG1fYWN0aXZlTWF0Y2guZ2V0KCksIGZpbmRP
cHRpb25zKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gd2hpbGUgKG1fY3VycmVu
dEFjdGl2ZU1hdGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBtX2N1cnJlbnRBY3RpdmVNYXRjaEZy
YW1lKTsKKworICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpz
aG91bGRTZWFyY2hGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAodGV4dCA9
PSBtX2FjdGl2ZVNlYXJjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1fYWN0aXZlTWF0Y2hDb3Vu
dDsKKworICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5nIGlzIHByZWZpeCBvZiBu
ZXcgc2VhcmNoIHN0cmluZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYgdGhlIHByZXZpb3VzIG9u
ZSBoYXMgemVybyByZXN1bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQKKyAgICAgICAg
JiYgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFy
Y2hTdHJpbmcgPT0gdGV4dC5zdWJzdHJpbmcoMCwgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3Ro
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wg
SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwg
UmFuZ2UqIHJhbmdlLCBjb25zdCBGaW5kT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX2FjdGl2
ZU1hdGNoID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmdB
bmRTY3JvbGxUb1Zpc2libGUodGV4dCwgcmFuZ2UsIG9wdGlvbnMpOworICAgIGlmIChtX2FjdGl2
ZU1hdGNoKSB7CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLCB0cnVlKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9p
ZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBtX3dlYlBh
Z2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1hdGNoID0g
MDsKKyAgICBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gMDsKIH0KIAotdm9pZCBJblBhZ2VT
ZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29s
IGFjdGl2ZSkKK3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFBhc3NS
ZWZQdHI8UmFuZ2U+IHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKLSAgICBpZiAoIXJhbmdlKQorICAg
IGlmICghcmFuZ2UgfHwgIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKLSAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+
bWFya2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLCBhY3RpdmUpOworICAgIGRvYy0+bWFy
a2VycygpLT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLmdldCgpLCBhY3RpdmUpOworfQorCit2b2lk
IEluUGFnZVNlYXJjaE1hbmFnZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQor
eworICAgIGlmIChtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID09IGZyYW1lKSB7CisgICAgICAg
IG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAwOworICAgICAgICBtX2FjdGl2ZU1hdGNoID0g
MDsKKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgbV9h
Y3RpdmVNYXRjaENvdW50ID0gMDsKKyAgICAgICAgaWYgKGZyYW1lID09IG1fd2ViUGFnZS0+bWFp
bkZyYW1lKCkpIC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGFuZCBub3RpZnkgY2xpZW50IGJlY2F1
c2UgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQuCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV93ZWJQYWdlLT5tX3BhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIG5vdGlmeSBjbGllbnQgaGVyZS4KKyAgICB9CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFn
ZVNlYXJjaE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaAppbmRleCAxZjZiYmI1Li4zYTkzZWU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdl
U2VhcmNoTWFuYWdlci5oCkBAIC0xOSwxMiArMTksMTUgQEAKICNpZm5kZWYgSW5QYWdlU2VhcmNo
TWFuYWdlcl9oCiAjZGVmaW5lIEluUGFnZVNlYXJjaE1hbmFnZXJfaAogCisjaW5jbHVkZSAiRmlu
ZE9wdGlvbnMuaCIKICNpbmNsdWRlICJXVEZTdHJpbmcuaCIKIAotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdlOworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIH0K
IAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpAQCAtMzksMTUgKzQyLDE5IEBAIHB1YmxpYzoKICAg
ICB+SW5QYWdlU2VhcmNoTWFuYWdlcigpOwogCiAgICAgYm9vbCBmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCk7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNv
bnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRNYXRj
aGVzKCk7Ci0gICAgdm9pZCBzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqLCBib29sIGFj
dGl2ZSk7CisgICAgdm9pZCBzZXRNYXJrZXJBY3RpdmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4sIGJvb2wgYWN0aXZlKTsKKyAgICBib29sIGZpbmRBbmRNYXJrVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIFdlYkNvcmU6OlJhbmdlKiwgY29uc3QgV2ViQ29yZTo6RmluZE9wdGlvbnMmKTsKKyAg
ICBib29sIHNob3VsZFNlYXJjaEZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogICAgIFdl
YlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2Fj
dGl2ZU1hdGNoOwogICAgIFN0cmluZyBtX2FjdGl2ZVNlYXJjaFN0cmluZzsKICAgICBpbnQgbV9h
Y3RpdmVNYXRjaENvdW50OworICAgIFdlYkNvcmU6OkZyYW1lKiBtX2N1cnJlbnRBY3RpdmVNYXRj
aEZyYW1lOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKaW5kZXggYzZhZWI0OS4uMTUyZGY5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1
dEhhbmRsZXIuY3BwCkBAIC03MTAsNyArNzEwLDcgQEAgdm9pZCBJbnB1dEhhbmRsZXI6OmVuc3Vy
ZUZvY3VzRWxlbWVudFZpc2libGUoYm9vbCBjZW50ZXJJblZpZXcpCiAgICAgICAgIGVuc3VyZUZv
Y3VzVGV4dEVsZW1lbnRWaXNpYmxlKGNlbnRlckluVmlldyA/IENlbnRlckFsd2F5cyA6IENlbnRl
cklmTmVlZGVkKTsKIH0KIAotdm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoRnJhbWUq
IGZyYW1lKQordm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZy
YW1lKQogewogICAgIGlmICghaXNBY3RpdmVUZXh0RWRpdCgpKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFu
ZGxlci5oCmluZGV4IDFiNjRhNzguLjBmNGNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCkBAIC02MCw3ICs2MCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVGb2N1c2VkKFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2
b2lkIG5vZGVUZXh0Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkKCk7Ci0gICAgdm9pZCBmcmFtZVVubG9hZGVkKFdlYkNvcmU6OkZyYW1lKik7
CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKICAgICBi
b29sIGhhbmRsZUtleWJvYXJkSW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJv
YXJkRXZlbnQmLCBib29sIGNoYW5nZUlzUGFydE9mQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAKLS0g
CjEuNy41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129335</attachid>
            <date>2012-02-28 14:58:12 -0800</date>
            <delta_ts>2012-02-29 13:33:55 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15676</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSA1YTkyMjVjNWViMjAxYTExNDkzNzI2YzljOGQ2NDJkODhlNDMxNTFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA3ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTE0ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTEgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGM4NGY5YTIuLjI1OGYxN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRIYW5kbGVyLT5m
cmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXItPmZyYW1lVW5s
b2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgLy8gQ2xl
YW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xkaW5nLgogICAg
IHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQqKTsKIAorICAg
IHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAgICAgc3RhdGlj
IFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJ
ZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMgV2ViQ29yZTo6
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxmSWZGaXhl
ZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9D
aGFuZ2VMb2cKaW5kZXggNTRiMDA1Mi4uMTYzZjEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjggIEFuZHkgQ2hlbiAgPGFuZGNoZW5A
cmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1cmVzIGZvciBm
aW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3aG9sZSBwYWdl
IGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBz
dGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0
Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRvbi4KKworICAg
ICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQYWdlX3AuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRj
aFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmNwcDoKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50RnJhbWUpOgor
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAqIFdlYktpdFN1
cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNob3Vs
ZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFy
Y2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVVbmxv
YWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmg6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIFdl
YktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjggIE1pa2UgRmVudG9uICA8
bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gUmVtb3ZlIHVudXNlZCBm
b2N1c2VkTm9kZUNoYW5nZSBub3RpZmljYXRpb25zIGZyb20gdGhlIENocm9tZSBjbGllbnQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4IGFmZGRkNTEu
LjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3Bw
CkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsKLSAgICBtX3dl
YlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2ZyYW1lKTsKKyAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5kZXggNTNmZDg3
OC4uNjNkNjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTMgQEAgVmlzaWJsZVNlbGVj
dGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChjb25zdCBWaXNp
YmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCitGcmFtZSogaW5jcmVtZW50
RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykKK3sKKyAgICBy
ZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdy
YXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0
aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8v
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oCkBAIC03OCw2
ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlkUG9pbnQgPSBX
ZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZp
c2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZyYW1lKFdlYkNv
cmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOworCiB9IC8vIERP
TVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFu
YWdlci5jcHAKaW5kZXggYWUwNDAyMS4uMmQ3ZDY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdl
ci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
blBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFZGl0b3IuaCIKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpJblBhZ2VTZWFyY2hNYW5hZ2VyKFdlYlBhZ2VQcml2YXRlKiBw
YWdlKQogICAgIDogbV93ZWJQYWdlKHBhZ2UpCiAgICAgLCBtX2FjdGl2ZU1hdGNoKDApCisgICAg
LCBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKDApCiB7CiB9CiAKQEAgLTUxLDQyICs1MywxMjAg
QEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNsZWFyVGV4dE1h
dGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsKICAgICAgICAg
bV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OwotICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQg
PSBtX3dlYlBhZ2UtPm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQsIFdlYkNvcmU6
OkNhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwotICAgIH0gZWxz
ZQotICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwgZmFsc2UpOwot
Ci0gICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAKLSAgICBjb25zdCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6
IFdlYkNvcmU6OkJhY2t3YXJkcykKLSAgICAgICAgfCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUK
LSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJvdW5kOyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3Vu
ZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2Fz
ZSBhbnkgbm9kZSBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoLgorICAgIGlmICht
X2FjdGl2ZU1hdGNoICYmICFtX2FjdGl2ZU1hdGNoLmdldCgpLT5ib3VuZGFyeVBvaW50c1ZhbGlk
KCkpCisgICAgICAgIG1fYWN0aXZlTWF0Y2ggPSAwOwogCi0gICAgLy8gVE9ETyBTdGFydEluU2Vs
ZWN0aW9uCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hTdGFydGluZ1BvaW50KG1fYWN0aXZlTWF0
Y2gpOworICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7IC8vIFN0YXJ0IGEg
bmV3IHNlYXJjaC4KKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OworICAgICAg
ICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKKyAgICAgICAgbV9h
Y3RpdmVNYXRjaENvdW50ID0gbV93ZWJQYWdlLT5tX3BhZ2UtPm1hcmtBbGxNYXRjaGVzRm9yVGV4
dCh0ZXh0LCBDYXNlSW5zZW5zaXRpdmUsIHRydWUsIFRleHRNYXRjaE1hcmtlckxpbWl0KTsKKyAg
ICAgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpIHsKKyAgICAgICAgICAgIGNsZWFyVGV4dE1h
dGNoZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7IC8vIFNlYXJjaCBzYW1lIHN0cmluZyBmb3IgbmV4dCBvY2N1cnJlbmNlLgorICAgICAgICBz
ZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaCwgZmFsc2UpOworICAgICAgICAvLyBTZWFyY2hp
bmcgZm9yIHNhbWUgc3RyaW5nIHNob3VsZCBzdGFydCBmcm9tIHRoZSBlbmQgb2YgbGFzdCBtYXRj
aC4KKyAgICAgICAgaWYgKG1fYWN0aXZlTWF0Y2gpIHsKKyAgICAgICAgICAgIGlmIChmb3J3YXJk
KQorICAgICAgICAgICAgICAgIHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnNldFN0YXJ0KHNlYXJjaFN0
YXJ0aW5nUG9pbnQtPmVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnNldEVuZChzZWFyY2hTdGFydGluZ1BvaW50LT5z
dGFydFBvc2l0aW9uKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMg
YW55IGFjdGl2ZSBzZWxlY3Rpb24sIG5ldyBzZWFyY2ggc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGJl
Z2lubmluZyBvZiBpdC4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fd2ViUGFn
ZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBp
ZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50ID0g
c2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKTsKKyAgICAgICAgbV9jdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZSA9IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgICAgIG1fd2Vi
UGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigpOworICAgIH0K
IAotICAgIG1fYWN0aXZlTWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5lZGl0b3IoKS0+
ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBm
aW5kT3B0aW9ucyk7Ci0gICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCksIHRy
dWUpOworICAgIGNvbnN0IEZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndhcmQgPyAwIDog
QmFja3dhcmRzKQorICAgICAgICB8IENhc2VJbnNlbnNpdGl2ZQorICAgICAgICB8IFN0YXJ0SW5T
ZWxlY3Rpb247CisKKyAgICBpZiAoIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpCisgICAgICAg
IG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFt
ZSgpOworCisgICAgRnJhbWUqIHN0YXJ0RnJhbWUgPSBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1l
OworICAgIGlmIChmaW5kQW5kTWFya1RleHQodGV4dCwgc2VhcmNoU3RhcnRpbmdQb2ludC5nZXQo
KSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRvIHsKKyAgICAg
ICAgbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3JlbWVudEZyYW1l
KG1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUsIGZvcndhcmQsIHRydWUpOworICAgICAgICBpZiAo
ZmluZEFuZE1hcmtUZXh0KHRleHQsIG1fYWN0aXZlTWF0Y2guZ2V0KCksIGZpbmRPcHRpb25zKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gd2hpbGUgKG1fY3VycmVudEFjdGl2ZU1h
dGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lKTsKKwor
ICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzaG91bGRTZWFy
Y2hGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAodGV4dCA9PSBtX2FjdGl2
ZVNlYXJjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1fYWN0aXZlTWF0Y2hDb3VudDsKKworICAg
IC8vIElmIHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5nIGlzIHByZWZpeCBvZiBuZXcgc2VhcmNo
IHN0cmluZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYgdGhlIHByZXZpb3VzIG9uZSBoYXMgemVy
byByZXN1bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQKKyAgICAgICAgJiYgbV9hY3Rp
dmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFyY2hTdHJpbmcg
PT0gdGV4dC5zdWJzdHJpbmcoMCwgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSW5QYWdlU2Vh
cmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgUmFuZ2UqIHJh
bmdlLCBjb25zdCBGaW5kT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX2FjdGl2ZU1hdGNoID0g
bV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmdBbmRTY3JvbGxU
b1Zpc2libGUodGV4dCwgcmFuZ2UsIG9wdGlvbnMpOworICAgIGlmIChtX2FjdGl2ZU1hdGNoKSB7
CisgICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLCB0cnVlKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBhZ2VT
ZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1fcGFn
ZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICBt
X2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hNYW5h
Z2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkK
K3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlLCBib29sIGFjdGl2ZSkKIHsKLSAgICBpZiAoIXJhbmdlKQorICAgIGlmICghcmFu
Z2UgfHwgIW1fY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBX
ZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KTsKKyAgICBEb2N1bWVudCogZG9jID0gbV9jdXJyZW50QWN0aXZlTWF0Y2hGcmFtZS0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+bWFya2Vycygp
LT5zZXRNYXJrZXJzQWN0aXZlKHJhbmdlLCBhY3RpdmUpOworICAgIGRvYy0+bWFya2VycygpLT5z
ZXRNYXJrZXJzQWN0aXZlKHJhbmdlLmdldCgpLCBhY3RpdmUpOworfQorCit2b2lkIEluUGFnZVNl
YXJjaE1hbmFnZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIGlm
IChtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID09IGZyYW1lKSB7CisgICAgICAgIG1fY3VycmVu
dEFjdGl2ZU1hdGNoRnJhbWUgPSAwOworICAgICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKKyAgICAg
ICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgbV9hY3RpdmVNYXRj
aENvdW50ID0gMDsKKyAgICAgICAgaWYgKGZyYW1lID09IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkp
IC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGFuZCBub3RpZnkgY2xpZW50IGJlY2F1c2UgdGhlIHBh
Z2Ugd2lsbCBiZSBkZXN0cm95ZWQuCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV93
ZWJQYWdlLT5tX3BhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIG5vdGlmeSBjbGllbnQgaGVyZS4KKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNl
YXJjaE1hbmFnZXIuaAppbmRleCAxZjZiYmI1Li4zYTkzZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFu
YWdlci5oCkBAIC0xOSwxMiArMTksMTUgQEAKICNpZm5kZWYgSW5QYWdlU2VhcmNoTWFuYWdlcl9o
CiAjZGVmaW5lIEluUGFnZVNlYXJjaE1hbmFnZXJfaAogCisjaW5jbHVkZSAiRmluZE9wdGlvbnMu
aCIKICNpbmNsdWRlICJXVEZTdHJpbmcuaCIKIAotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBG
cmFtZTsKIGNsYXNzIFJhbmdlOworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIH0KIAogbmFtZXNw
YWNlIEJsYWNrQmVycnkgewpAQCAtMzksMTUgKzQyLDE5IEBAIHB1YmxpYzoKICAgICB+SW5QYWdl
U2VhcmNoTWFuYWdlcigpOwogCiAgICAgYm9vbCBmaW5kTmV4dFN0cmluZyhjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgZm9yd2FyZCk7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNv
cmU6OkZyYW1lKik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRNYXRjaGVzKCk7Ci0g
ICAgdm9pZCBzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqLCBib29sIGFjdGl2ZSk7Cisg
ICAgdm9pZCBzZXRNYXJrZXJBY3RpdmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4sIGJvb2wg
YWN0aXZlKTsKKyAgICBib29sIGZpbmRBbmRNYXJrVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFdl
YkNvcmU6OlJhbmdlKiwgY29uc3QgV2ViQ29yZTo6RmluZE9wdGlvbnMmKTsKKyAgICBib29sIHNo
b3VsZFNlYXJjaEZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogICAgIFdlYlBhZ2VQcml2
YXRlKiBtX3dlYlBhZ2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2FjdGl2ZU1hdGNo
OwogICAgIFN0cmluZyBtX2FjdGl2ZVNlYXJjaFN0cmluZzsKICAgICBpbnQgbV9hY3RpdmVNYXRj
aENvdW50OworICAgIFdlYkNvcmU6OkZyYW1lKiBtX2N1cnJlbnRBY3RpdmVNYXRjaEZyYW1lOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5wdXRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0lucHV0SGFuZGxlci5jcHAKaW5kZXggYzZhZWI0OS4uMTUyZGY5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIu
Y3BwCkBAIC03MTAsNyArNzEwLDcgQEAgdm9pZCBJbnB1dEhhbmRsZXI6OmVuc3VyZUZvY3VzRWxl
bWVudFZpc2libGUoYm9vbCBjZW50ZXJJblZpZXcpCiAgICAgICAgIGVuc3VyZUZvY3VzVGV4dEVs
ZW1lbnRWaXNpYmxlKGNlbnRlckluVmlldyA/IENlbnRlckFsd2F5cyA6IENlbnRlcklmTmVlZGVk
KTsKIH0KIAotdm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoRnJhbWUqIGZyYW1lKQor
dm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQogewog
ICAgIGlmICghaXNBY3RpdmVUZXh0RWRpdCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCmlu
ZGV4IDFiNjRhNzguLjBmNGNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIG5vZGVGb2N1c2VkKFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2b2lkIG5vZGVU
ZXh0Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBzZWxlY3Rpb25DaGFu
Z2VkKCk7Ci0gICAgdm9pZCBmcmFtZVVubG9hZGVkKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdm9p
ZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKICAgICBib29sIGhhbmRs
ZUtleWJvYXJkSW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQm
LCBib29sIGNoYW5nZUlzUGFydE9mQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAKLS0gCjEuNy41LjQK
Cg==
</data>
<flag name="review"
          id="132004"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
    <flag name="commit-queue"
          id="132005"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129506</attachid>
            <date>2012-02-29 13:34:23 -0800</date>
            <delta_ts>2012-02-29 15:15:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15311</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSA0NWFiNDA5YzBiNjc0Y2QzYTQzNDQ0NDRjMDY2ODM3MmY1YTgxOGM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMSArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA4ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTA5ICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgIDggKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTUzIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IDljOGQxN2MuLjZhMjE5YmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRIYW5kbGVyLT5m
cmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXItPmZyYW1lVW5s
b2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgLy8gQ2xl
YW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xkaW5nLgogICAg
IHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQqKTsKIAorICAg
IHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAgICAgc3RhdGlj
IFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJ
ZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMgV2ViQ29yZTo6
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxmSWZGaXhl
ZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9D
aGFuZ2VMb2cKaW5kZXggNzBhOTc2ZC4uNDI4YTUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDItMjkgIEFuZHkgQ2hlbiAgPGFuZGNoZW5A
cmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1cmVzIGZvciBm
aW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3aG9sZSBwYWdl
IGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBz
dGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0
Y2guCisKKyAgICAgICAgSW50ZXJuYWxseSByZXZpZXdlZCBieSBNaWtlIEZlbnRvbi4KKworICAg
ICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFwaS9XZWJQYWdlX3AuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRj
aFdpbGxDbG9zZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmNwcDoKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVtZW50RnJhbWUpOgor
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oOgorICAgICAgICAqIFdlYktpdFN1
cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0U3RyaW5nKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2hvdWxkU2VhcmNoRm9yVGV4dCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmRB
bmRNYXJrVGV4dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1h
bmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UGFnZVNlYXJjaE1hbmFnZXI6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5wdXRIYW5kbGVyOjpm
cmFtZVVubG9hZGVkKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oOgor
CiAyMDEyLTAyLTI5ICBNYXggRmVpbCAgPG1mZWlsQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNr
QmVycnldIEFkZCBzdXBwb3J0IGZvciBGTEFDIGF1ZGlvIGFuZCBPR0cvVm9yYmlzIGF1ZGlvCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4IGFmZGRkNTEu
LjllMDg3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3Bw
CkBAIC03OTAsNyArNzkwLDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwKIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKCkKIHsKLSAgICBtX3dl
YlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChtX2ZyYW1lKTsKKyAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwogfQogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5kZXggNTNmZDg3
OC4uMTE2NDVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRE9NU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKQEAgLTQwMyw2ICs0MDMsMTQgQEAgVmlzaWJsZVNlbGVj
dGlvbiB2aXNpYmxlU2VsZWN0aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChjb25zdCBWaXNp
YmxlU2VsZWN0aW8KICAgICByZXR1cm4gc2VsZWN0aW9uOwogfQogCisvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNvcGllZCBmcm9tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcC4KK0ZyYW1lKiBpbmNyZW1lbnRG
cmFtZShGcmFtZSogY3VyciwgYm9vbCBmb3J3YXJkLCBib29sIHdyYXBGbGFnKQoreworICAgIHJl
dHVybiBmb3J3YXJkCisgICAgICAgID8gY3Vyci0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3Jh
cCh3cmFwRmxhZykKKyAgICAgICAgOiBjdXJyLT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRo
V3JhcCh3cmFwRmxhZyk7Cit9CisKIH0gLy8gRE9NU3VwcG9ydAogfSAvLyBXZWJLaXQKIH0gLy8g
QmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRE9NU3VwcG9ydC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvRE9NU3VwcG9ydC5oCmluZGV4IDFmNTg1OWQuLjdiODRlMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgKQEAgLTc4LDYg
Kzc4LDggQEAgc3RhdGljIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IEludmFsaWRQb2ludCA9IFdl
YkNvcmU6OkludFBvaW50KC0xLCAtMSk7CiAKIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gdmlz
aWJsZVNlbGVjdGlvbkZvckNsb3Nlc3RBY3R1YWxXb3JkU3RhcnQoY29uc3QgV2ViQ29yZTo6Vmlz
aWJsZVNlbGVjdGlvbiYpOwogCitXZWJDb3JlOjpGcmFtZSogaW5jcmVtZW50RnJhbWUoV2ViQ29y
ZTo6RnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZyk7CisKIH0gLy8gRE9N
U3VwcG9ydAogfSAvLyBXZWJLaXQKIH0gLy8gQmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5h
Z2VyLmNwcAppbmRleCBhZTA0MDIxLi5jMmI1ZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2Vy
LmNwcApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklu
UGFnZVNlYXJjaE1hbmFnZXIuaCIKIAorI2luY2x1ZGUgIkRPTVN1cHBvcnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVkaXRvci5oIgpAQCAtNTEsNDMgKzUyLDEyMSBAQCBib29sIEluUGFnZVNlYXJjaE1h
bmFnZXI6OmZpbmROZXh0U3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBmb3J3YXJkKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKG1fYWN0aXZlU2VhcmNoU3Ry
aW5nICE9IHRleHQpIHsKLSAgICAgICAgY2xlYXJUZXh0TWF0Y2hlcygpOworICAgIGlmICghc2hv
dWxkU2VhcmNoRm9yVGV4dCh0ZXh0KSkgewogICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0cmluZyA9
IHRleHQ7Ci0gICAgICAgIG1fYWN0aXZlTWF0Y2hDb3VudCA9IG1fd2ViUGFnZS0+bV9wYWdlLT5t
YXJrQWxsTWF0Y2hlc0ZvclRleHQodGV4dCwgV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlLCB0cnVl
LCBUZXh0TWF0Y2hNYXJrZXJMaW1pdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldE1hcmtlckFj
dGl2ZShtX2FjdGl2ZU1hdGNoLmdldCgpLCBmYWxzZSk7Ci0KLSAgICBpZiAoIW1fYWN0aXZlTWF0
Y2hDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGNvbnN0IEZpbmRP
cHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndhcmQgPyAwIDogV2ViQ29yZTo6QmFja3dhcmRzKQot
ICAgICAgICB8IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZQotICAgICAgICB8IFdlYkNvcmU6Oldy
YXBBcm91bmQ7IC8vIFRPRE8gc2hvdWxkIHdyYXAgYXJvdW5kIGluIHBhZ2UsIG5vdCBpbiBmcmFt
ZQorICAgIC8vIFZhbGlkYXRlIHRoZSByYW5nZSBpbiBjYXNlIGFueSBub2RlIGhhcyBiZWVuIHJl
bW92ZWQgc2luY2UgbGFzdCBzZWFyY2guCisgICAgaWYgKG1fYWN0aXZlTWF0Y2ggJiYgIW1fYWN0
aXZlTWF0Y2gtPmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSkKKyAgICAgICAgbV9hY3RpdmVNYXRjaCA9
IDA7CiAKLSAgICAvLyBUT0RPIFN0YXJ0SW5TZWxlY3Rpb24KKyAgICBSZWZQdHI8UmFuZ2U+IHNl
YXJjaFN0YXJ0aW5nUG9pbnQobV9hY3RpdmVNYXRjaCk7CisgICAgaWYgKG1fYWN0aXZlU2VhcmNo
U3RyaW5nICE9IHRleHQpIHsgLy8gU3RhcnQgYSBuZXcgc2VhcmNoLgorICAgICAgICBtX2FjdGl2
ZVNlYXJjaFN0cmluZyA9IHRleHQ7CisgICAgICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtB
bGxUZXh0TWF0Y2hlcygpOworICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQgPSBtX3dlYlBhZ2Ut
Pm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQsIENhc2VJbnNlbnNpdGl2ZSwgdHJ1
ZSAvKiBzaG91bGRIaWdobGlnaHQgKi8sIFRleHRNYXRjaE1hcmtlckxpbWl0KTsKKyAgICAgICAg
aWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpIHsKKyAgICAgICAgICAgIGNsZWFyVGV4dE1hdGNoZXMo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8v
IFNlYXJjaCBzYW1lIHN0cmluZyBmb3IgbmV4dCBvY2N1cnJlbmNlLgorICAgICAgICBzZXRNYXJr
ZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwgZmFsc2UgLyogYWN0aXZlICovKTsKKyAgICAg
ICAgLy8gU2VhcmNoaW5nIGZvciBzYW1lIHN0cmluZyBzaG91bGQgc3RhcnQgZnJvbSB0aGUgZW5k
IG9mIGxhc3QgbWF0Y2guCisgICAgICAgIGlmIChtX2FjdGl2ZU1hdGNoKSB7CisgICAgICAgICAg
ICBpZiAoZm9yd2FyZCkKKyAgICAgICAgICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRT
dGFydChzZWFyY2hTdGFydGluZ1BvaW50LT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRFbmQoc2VhcmNoU3Rh
cnRpbmdQb2ludC0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEZy
YW1lKiBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IDA7CisgICAgLy8gSWYgdGhlcmUgaXMgYW55
IGFjdGl2ZSBzZWxlY3Rpb24sIG5ldyBzZWFyY2ggc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGJlZ2lu
bmluZyBvZiBpdC4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fd2ViUGFnZS0+
Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
IXNlbGVjdGlvbi5pc05vbmUoKSkgeworICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50ID0gc2Vs
ZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKTsKKyAgICAgICAgY3VycmVudEFjdGl2ZU1hdGNoRnJh
bWUgPSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgICAgICBtX3dlYlBhZ2Ut
PmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKKyAgICB9CiAKLSAg
ICBtX2FjdGl2ZU1hdGNoID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+ZWRpdG9yKCktPmZpbmRT
dHJpbmdBbmRTY3JvbGxUb1Zpc2libGUodGV4dCwgbV9hY3RpdmVNYXRjaC5nZXQoKSwgZmluZE9w
dGlvbnMpOwotICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLmdldCgpLCB0cnVlKTsK
KyAgICBjb25zdCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IEJhY2t3
YXJkcykKKyAgICAgICAgfCBDYXNlSW5zZW5zaXRpdmUKKyAgICAgICAgfCBTdGFydEluU2VsZWN0
aW9uOworCisgICAgaWYgKCFjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSkKKyAgICAgICAgY3VycmVu
dEFjdGl2ZU1hdGNoRnJhbWUgPSBtX2FjdGl2ZU1hdGNoID8gbV9hY3RpdmVNYXRjaC0+b3duZXJE
b2N1bWVudCgpLT5mcmFtZSgpIDogbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKwor
ICAgIEZyYW1lKiBzdGFydEZyYW1lID0gY3VycmVudEFjdGl2ZU1hdGNoRnJhbWU7CisgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBzZWFyY2hTdGFydGluZ1BvaW50LmdldCgpLCBjdXJyZW50
QWN0aXZlTWF0Y2hGcmFtZSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGRvIHsKKyAgICAgICAgY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBET01TdXBwb3J0Ojpp
bmNyZW1lbnRGcmFtZShjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSwgZm9yd2FyZCwgdHJ1ZSAvKiB3
cmFwRmxhZyAqLyk7CisgICAgICAgIGlmIChmaW5kQW5kTWFya1RleHQodGV4dCwgbV9hY3RpdmVN
YXRjaC5nZXQoKSwgY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUsIGZpbmRPcHRpb25zKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gd2hpbGUgKGN1cnJlbnRBY3RpdmVNYXRjaEZyYW1l
ICYmIHN0YXJ0RnJhbWUgIT0gY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUpOworCisgICAgY2xlYXJU
ZXh0TWF0Y2hlcygpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQogCitib29sIEluUGFnZVNlYXJjaE1hbmFnZXI6OnNob3VsZFNlYXJjaEZvclRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGlmICh0ZXh0ID09IG1fYWN0aXZlU2VhcmNoU3Ry
aW5nKQorICAgICAgICByZXR1cm4gbV9hY3RpdmVNYXRjaENvdW50OworCisgICAgLy8gSWYgdGhl
IHByZXZpb3VzIHNlYXJjaCBzdHJpbmcgaXMgcHJlZml4IG9mIG5ldyBzZWFyY2ggc3RyaW5nLAor
ICAgIC8vIGRvbid0IHNlYXJjaCBpZiB0aGUgcHJldmlvdXMgb25lIGhhcyB6ZXJvIHJlc3VsdC4K
KyAgICBpZiAoIW1fYWN0aXZlTWF0Y2hDb3VudAorICAgICAgICAmJiBtX2FjdGl2ZVNlYXJjaFN0
cmluZy5sZW5ndGgoKQorICAgICAgICAmJiBtX2FjdGl2ZVNlYXJjaFN0cmluZyA9PSB0ZXh0LnN1
YnN0cmluZygwLCBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEZyYW1l
KiBmcmFtZSwgY29uc3QgRmluZE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9hY3RpdmVNYXRj
aCA9IGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBy
YW5nZSwgb3B0aW9ucyk7CisgICAgaWYgKG1fYWN0aXZlTWF0Y2gpIHsKKyAgICAgICAgc2V0TWFy
a2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCksIHRydWUgLyogYWN0aXZlICovKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1f
cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKIH0K
IAotdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFu
Z2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKK3ZvaWQgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFy
a2VyQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2MgPSBtX3dlYlBhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2MgPSBtX2FjdGl2ZU1h
dGNoLT5vd25lckRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2MpCiAgICAgICAgIHJldHVybjsKICAg
ICBkb2MtPm1hcmtlcnMoKS0+c2V0TWFya2Vyc0FjdGl2ZShyYW5nZSwgYWN0aXZlKTsKIH0KIAor
dm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmcmFtZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBGcmFtZSogY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAhbV9hY3RpdmVNYXRj
aCA/IDAgOiBtX2FjdGl2ZU1hdGNoLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYg
KGN1cnJlbnRBY3RpdmVNYXRjaEZyYW1lID09IGZyYW1lIHx8IG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCkgPT0gZnJhbWUpIHsKKyAgICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisgICAgICAgIG1fYWN0
aXZlU2VhcmNoU3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAgIG1fYWN0aXZlTWF0Y2hDb3VudCA9
IDA7CisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG5vdGlmeSBjbGllbnQgaGVyZS4KKwor
ICAgICAgICBpZiAoZnJhbWUgPT0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKSkgLy8gRG9uJ3QgbmVl
ZCB0byB1bm1hcmsgYmVjYXVzZSB0aGUgcGFnZSB3aWxsIGJlIGRlc3Ryb3llZC4KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV93ZWJQYWdlLT5tX3BhZ2UtPnVubWFya0FsbFRleHRNYXRj
aGVzKCk7CisgICAgfQorfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKaW5kZXggMWY2
YmJiNS4uYzdiNzBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaApAQCAtMTksMTIgKzE5LDE1
IEBACiAjaWZuZGVmIEluUGFnZVNlYXJjaE1hbmFnZXJfaAogI2RlZmluZSBJblBhZ2VTZWFyY2hN
YW5hZ2VyX2gKIAorI2luY2x1ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5n
LmgiCiAKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7CiBjbGFzcyBSYW5nZTsKK2Ns
YXNzIFZpc2libGVTZWxlY3Rpb247CiB9CiAKIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKQEAgLTM5
LDEwICs0MiwxMyBAQCBwdWJsaWM6CiAgICAgfkluUGFnZVNlYXJjaE1hbmFnZXIoKTsKIAogICAg
IGJvb2wgZmluZE5leHRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGZvcndhcmQpOwor
ICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOwogCiBwcml2YXRl
OgogICAgIHZvaWQgY2xlYXJUZXh0TWF0Y2hlcygpOwogICAgIHZvaWQgc2V0TWFya2VyQWN0aXZl
KFdlYkNvcmU6OlJhbmdlKiwgYm9vbCBhY3RpdmUpOworICAgIGJvb2wgZmluZEFuZE1hcmtUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgV2ViQ29yZTo6UmFuZ2UqLCBXZWJDb3JlOjpGcmFtZSosIGNv
bnN0IFdlYkNvcmU6OkZpbmRPcHRpb25zJik7CisgICAgYm9vbCBzaG91bGRTZWFyY2hGb3JUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOwog
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9hY3RpdmVNYXRjaDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCmlu
ZGV4IGM2YWViNDkuLjE1MmRmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcApAQCAtNzEwLDcgKzcxMCw3IEBA
IHZvaWQgSW5wdXRIYW5kbGVyOjplbnN1cmVGb2N1c0VsZW1lbnRWaXNpYmxlKGJvb2wgY2VudGVy
SW5WaWV3KQogICAgICAgICBlbnN1cmVGb2N1c1RleHRFbGVtZW50VmlzaWJsZShjZW50ZXJJblZp
ZXcgPyBDZW50ZXJBbHdheXMgOiBDZW50ZXJJZk5lZWRlZCk7CiB9CiAKLXZvaWQgSW5wdXRIYW5k
bGVyOjpmcmFtZVVubG9hZGVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5wdXRIYW5kbGVyOjpmcmFt
ZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWlzQWN0aXZlVGV4dEVk
aXQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaAppbmRleCAxYjY0YTc4Li4wZjRjZGQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhh
bmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1
dEhhbmRsZXIuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBub2RlRm9jdXNl
ZChXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZWQoY29uc3QgV2ViQ29y
ZTo6Tm9kZSopOwogICAgIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCgpOwotICAgIHZvaWQgZnJhbWVV
bmxvYWRlZChXZWJDb3JlOjpGcmFtZSopOworICAgIHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBX
ZWJDb3JlOjpGcmFtZSopOwogCiAgICAgYm9vbCBoYW5kbGVLZXlib2FyZElucHV0KGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpLZXlib2FyZEV2ZW50JiwgYm9vbCBjaGFuZ2VJc1BhcnRPZkNv
bXBvc2l0aW9uID0gZmFsc2UpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129528</attachid>
            <date>2012-02-29 15:15:27 -0800</date>
            <delta_ts>2012-02-29 15:21:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15891</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSBlNTM2ZTRiNzM3YmYwYmY5ODllOTZjNjc2YjM5YjkyZGU4YTJlY2M3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzNSArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgNCArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA4ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTEzICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgIDggKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5wdXRIYW5kbGVyLmNwcCAgICAgIHwgICAgMiArLQogLi4uL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggfCAgICAyICstCiAxMCBmaWxlcyBjaGFu
Z2VkLCAxNjEgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggOWM4ZDE3Yy4uNmEyMTliZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC01NTg1LDUgKzU1ODUsMTEgQEAg
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0TmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCiAgICAg
bV9uZWVkVG91Y2hFdmVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZnJh
bWVVbmxvYWRlZChjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgbV9pbnB1dEhhbmRsZXItPmZy
YW1lVW5sb2FkZWQoZnJhbWUpOworICAgIG1faW5QYWdlU2VhcmNoTWFuYWdlci0+ZnJhbWVVbmxv
YWRlZChmcmFtZSk7Cit9CisKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCmluZGV4IGQ2ZDE5OWYuLjRkMjhmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaApAQCAtMzkyLDYgKzM5Miw4IEBAIHB1YmxpYzoKICAgICAvLyBDbGVh
biB1cCBhbnkgZG9jdW1lbnQgcmVsYXRlZCBkYXRhIHdlIG1pZ2h0IGJlIGhvbGRpbmcuCiAgICAg
dm9pZCBjbGVhckRvY3VtZW50RGF0YShjb25zdCBXZWJDb3JlOjpEb2N1bWVudCopOwogCisgICAg
dm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CisKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklm
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogICAgIHN0YXRpYyBXZWJDb3JlOjpS
ZW5kZXJMYXllciogZW5jbG9zaW5nRml4ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVk
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZwppbmRleCA3MGE5NzZkLi5lNzAxMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMi0yOSAgQW5keSBDaGVuICA8YW5kY2hlbkBy
aW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgZmVhdHVyZXMgZm9yIGZp
bmQtaW4tcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzZWFyY2ggdGV4dCBhcm91bmQgdGhlIHdob2xlIHBhZ2Ug
aW5zdGVhZCBvZiBzaW5nbGUgZnJhbWUuCisgICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHN0
YXJ0IG5ldyBzZWFyY2ggZnJvbSBhY3RpdmUgc2VsZWN0aW9uIGFuZCBsYXN0IGFjdGl2ZSBtYXRj
aC4KKworICAgICAgICBJbnRlcm5hbGx5IHJldmlld2VkIGJ5IE1pa2UgRmVudG9uLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2aW9yLgor
CisKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlBhZ2VQcml2YXRlOjpmcmFtZVVubG9hZGVkKToKKyAgICAgICAgKiBBcGkvV2ViUGFn
ZV9wLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6
ZGlzcGF0Y2hXaWxsQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5OjpkZXRhY2hlZEZyb21QYXJlbnQyKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0RPTVN1cHBvcnQuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpET01TdXBwb3J0
OjppbmNyZW1lbnRGcmFtZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZmluZE5leHRTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpz
aG91bGRTZWFyY2hGb3JUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdl
U2VhcmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVVbmxvYWRlZCk6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmg6CisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjkgIE1heCBGZWlsICA8bWZlaWxAcmltLmNv
bT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIHN1cHBvcnQgZm9yIEZMQUMgYXVkaW8gYW5k
IE9HRy9Wb3JiaXMgYXVkaW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJy
eS5jcHAKaW5kZXggYWZkZGQ1MS4uZWM3YmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTc5MCw3ICs3OTAsNyBAQCBPYmplY3RDb250ZW50VHlw
ZSBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtV
UkwmIHVybAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxs
Q2xvc2UoKQogewotICAgIG1fd2ViUGFnZVByaXZhdGUtPm1faW5wdXRIYW5kbGVyLT5mcmFtZVVu
bG9hZGVkKG1fZnJhbWUpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPmZyYW1lVW5sb2FkZWQobV9m
cmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpzZXRNYWluRG9j
dW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpA
QCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkZXRh
Y2hlZEZyb21QYXJlbnQyKCkKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+Y2xlYXJEb2N1bWVudERhdGEobV9mcmFtZS0+ZG9jdW1lbnQoKSk7
CiAKLSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZCht
X2ZyYW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwog
ICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ub3RpZnlGcmFtZURldGFjaGVkKG1fZnJh
bWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9ET01TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0RPTVN1cHBvcnQuY3BwCmluZGV4IDUzZmQ4NzguLjExNjQ1ZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwCkBA
IC00MDMsNiArNDAzLDE0IEBAIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbkZvckNs
b3Nlc3RBY3R1YWxXb3JkU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgcmV0dXJuIHNl
bGVjdGlvbjsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBXZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAuCitGcmFtZSogaW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9y
d2FyZCwgYm9vbCB3cmFwRmxhZykKK3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1
cnItPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vy
ci0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8v
IERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4
NTlkLi43Yjg0ZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9ET01TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvRE9NU3VwcG9ydC5oCkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCBJbnZhbGlkUG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwog
CiBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0
dWFsV29yZFN0YXJ0KGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29y
ZTo6RnJhbWUqIGluY3JlbWVudEZyYW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndh
cmQsIGJvb2wgd3JhcEZsYWcpOworCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8v
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uZmM4
MzA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNp
bmNsdWRlICJET01TdXBwb3J0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTUxLDQz
ICs1MiwxMjUgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
ICAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OwotICAgICAgICBtX2FjdGl2ZU1h
dGNoQ291bnQgPSBtX3dlYlBhZ2UtPm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQs
IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwot
ICAgIH0gZWxzZQotICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwg
ZmFsc2UpOwotCi0gICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2FzZSBhbnkgbm9k
ZSBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoLgorICAgIGlmIChtX2FjdGl2ZU1h
dGNoICYmICFtX2FjdGl2ZU1hdGNoLT5ib3VuZGFyeVBvaW50c1ZhbGlkKCkpCisgICAgICAgIG1f
YWN0aXZlTWF0Y2ggPSAwOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hTdGFydGluZ1BvaW50
KG1fYWN0aXZlTWF0Y2gpOworICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7
IC8vIFN0YXJ0IGEgbmV3IHNlYXJjaC4KKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0
ZXh0OworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsK
KyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gbV93ZWJQYWdlLT5tX3BhZ2UtPm1hcmtBbGxN
YXRjaGVzRm9yVGV4dCh0ZXh0LCBDYXNlSW5zZW5zaXRpdmUsIHRydWUgLyogc2hvdWxkSGlnaGxp
Z2h0ICovLCBUZXh0TWF0Y2hNYXJrZXJMaW1pdCk7CisgICAgICAgIGlmICghbV9hY3RpdmVNYXRj
aENvdW50KSB7CisgICAgICAgICAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBTZWFyY2ggc2FtZSBzdHJp
bmcgZm9yIG5leHQgb2NjdXJyZW5jZS4KKyAgICAgICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZl
TWF0Y2guZ2V0KCksIGZhbHNlIC8qIGFjdGl2ZSAqLyk7CisgICAgICAgIC8vIFNlYXJjaGluZyBm
b3Igc2FtZSBzdHJpbmcgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiBsYXN0IG1hdGNoLgor
ICAgICAgICBpZiAobV9hY3RpdmVNYXRjaCkgeworICAgICAgICAgICAgaWYgKGZvcndhcmQpCisg
ICAgICAgICAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0U3RhcnQoc2VhcmNoU3RhcnRp
bmdQb2ludC0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0RW5kKHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBjb25zdCBGaW5kT3B0aW9ucyBm
aW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykKLSAgICAgICAg
fCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJvdW5k
OyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAgICAv
LyBJZiB0aGVyZSBpcyBhbnkgYWN0aXZlIHNlbGVjdGlvbiwgbmV3IHNlYXJjaCBzaG91bGQgc3Rh
cnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGl0LgorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgICAgIHNlYXJjaFN0
YXJ0aW5nUG9pbnQgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpOworICAgICAgICBtX3dl
YlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKKyAgICB9
CisKKyAgICBGcmFtZSogY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBzZWxlY3Rpb24uaXNOb25l
KCkgJiYgbV9hY3RpdmVNYXRjaCA/IG1fYWN0aXZlTWF0Y2gtPm93bmVyRG9jdW1lbnQoKS0+ZnJh
bWUoKSA6IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBjb25zdCBGaW5k
T3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IEJhY2t3YXJkcykKKyAgICAgICAg
fCBDYXNlSW5zZW5zaXRpdmUKKyAgICAgICAgfCBTdGFydEluU2VsZWN0aW9uOworCisgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBzZWFyY2hTdGFydGluZ1BvaW50LmdldCgpLCBjdXJyZW50
QWN0aXZlTWF0Y2hGcmFtZSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIC8vIFRPRE8gU3RhcnRJblNlbGVjdGlvbgorICAgIEZyYW1lKiBzdGFydEZyYW1lID0gY3Vy
cmVudEFjdGl2ZU1hdGNoRnJhbWU7CisgICAgZG8geworICAgICAgICBjdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3JlbWVudEZyYW1lKGN1cnJlbnRBY3RpdmVNYXRjaEZy
YW1lLCBmb3J3YXJkLCB0cnVlIC8qIHdyYXBGbGFnICovKTsKKyAgICAgICAgaWYgKGZpbmRBbmRN
YXJrVGV4dCh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBjdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZSwgZmluZE9wdGlvbnMpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB3aGlsZSAo
Y3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBjdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZSk7CiAKLSAgICBtX2FjdGl2ZU1hdGNoID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
ZWRpdG9yKCktPmZpbmRTdHJpbmdBbmRTY3JvbGxUb1Zpc2libGUodGV4dCwgbV9hY3RpdmVNYXRj
aC5nZXQoKSwgZmluZE9wdGlvbnMpOwotICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNo
LmdldCgpLCB0cnVlKTsKKyAgICBjbGVhclRleHRNYXRjaGVzKCk7CiAKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5QYWdlU2VhcmNoTWFu
YWdlcjo6c2hvdWxkU2VhcmNoRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYg
KHRleHQgPT0gbV9hY3RpdmVTZWFyY2hTdHJpbmcpCisgICAgICAgIHJldHVybiBtX2FjdGl2ZU1h
dGNoQ291bnQ7CisKKyAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VhcmNoIHN0cmluZyBpcyBwcmVm
aXggb2YgbmV3IHNlYXJjaCBzdHJpbmcsCisgICAgLy8gZG9uJ3Qgc2VhcmNoIGlmIHRoZSBwcmV2
aW91cyBvbmUgaGFzIHplcm8gcmVzdWx0LgorICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50Cisg
ICAgICAgICYmIG1fYWN0aXZlU2VhcmNoU3RyaW5nLmxlbmd0aCgpCisgICAgICAgICYmIHRleHQu
bGVuZ3RoKCkgPiBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgoKQorICAgICAgICAmJiBtX2Fj
dGl2ZVNlYXJjaFN0cmluZyA9PSB0ZXh0LnN1YnN0cmluZygwLCBtX2FjdGl2ZVNlYXJjaFN0cmlu
Zy5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSwgY29uc3QgRmluZE9wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgbV9hY3RpdmVNYXRjaCA9IGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmlu
Z0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCByYW5nZSwgb3B0aW9ucyk7CisgICAgaWYgKG1fYWN0
aXZlTWF0Y2gpIHsKKyAgICAgICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCks
IHRydWUgLyogYWN0aXZlICovKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRj
aGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsK
ICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpz
ZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKK3ZvaWQg
SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBh
Y3RpdmUpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBkb2MgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAg
IERvY3VtZW50KiBkb2MgPSBtX2FjdGl2ZU1hdGNoLT5vd25lckRvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2MpCiAgICAgICAgIHJldHVybjsKICAgICBkb2MtPm1hcmtlcnMoKS0+c2V0TWFya2Vyc0Fj
dGl2ZShyYW5nZSwgYWN0aXZlKTsKIH0KIAordm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmcmFt
ZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fYWN0aXZlTWF0Y2gp
IHsKKyAgICAgICAgaWYgKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUgJiYgbV9hY3Rp
dmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkgIT0gMCkKKyAgICAgICAgICAgIG1fYWN0aXZlU2VhcmNo
U3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFtZSog
Y3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAhbV9hY3RpdmVNYXRjaCA/IDAgOiBtX2FjdGl2ZU1h
dGNoLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKGN1cnJlbnRBY3RpdmVNYXRj
aEZyYW1lID09IGZyYW1lIHx8IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUpIHsKKyAg
ICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisgICAgICAgIG1fYWN0aXZlU2VhcmNoU3RyaW5nID0g
U3RyaW5nKCk7CisgICAgICAgIG1fYWN0aXZlTWF0Y2hDb3VudCA9IDA7CisgICAgICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIG5vdGlmeSBjbGllbnQgaGVyZS4KKworICAgICAgICBpZiAoZnJhbWUg
PT0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKSkgLy8gRG9uJ3QgbmVlZCB0byB1bm1hcmsgYmVjYXVz
ZSB0aGUgcGFnZSB3aWxsIGJlIGRlc3Ryb3llZC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV93ZWJQYWdlLT5tX3BhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgfQorfQor
CiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKaW5kZXggMWY2YmJiNS4uY2ZkZmQ0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2Vh
cmNoTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaApAQCAtMTksMTIgKzE5LDEzIEBACiAjaWZuZGVmIEluUGFn
ZVNlYXJjaE1hbmFnZXJfaAogI2RlZmluZSBJblBhZ2VTZWFyY2hNYW5hZ2VyX2gKIAorI2luY2x1
ZGUgIkZpbmRPcHRpb25zLmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOwogY2xhc3Mg
UmFuZ2U7CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogfQogCiBuYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CkBAIC0zOSwxMCArNDAsMTMgQEAgcHVibGljOgogICAgIH5JblBhZ2VTZWFyY2hNYW5hZ2Vy
KCk7CiAKICAgICBib29sIGZpbmROZXh0U3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBm
b3J3YXJkKTsKKyAgICB2b2lkIGZyYW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqKTsK
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4dE1hdGNoZXMoKTsKICAgICB2b2lkIHNldE1h
cmtlckFjdGl2ZShXZWJDb3JlOjpSYW5nZSosIGJvb2wgYWN0aXZlKTsKKyAgICBib29sIGZpbmRB
bmRNYXJrVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6
RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpGaW5kT3B0aW9ucyYpOworICAgIGJvb2wgc2hvdWxkU2Vh
cmNoRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwogCiAgICAgV2ViUGFnZVByaXZhdGUqIG1f
d2ViUGFnZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1fYWN0aXZlTWF0Y2g7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5k
bGVyLmNwcAppbmRleCBjNmFlYjQ5Li4xNTJkZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKQEAgLTcxMCw3
ICs3MTAsNyBAQCB2b2lkIElucHV0SGFuZGxlcjo6ZW5zdXJlRm9jdXNFbGVtZW50VmlzaWJsZShi
b29sIGNlbnRlckluVmlldykKICAgICAgICAgZW5zdXJlRm9jdXNUZXh0RWxlbWVudFZpc2libGUo
Y2VudGVySW5WaWV3ID8gQ2VudGVyQWx3YXlzIDogQ2VudGVySWZOZWVkZWQpOwogfQogCi12b2lk
IElucHV0SGFuZGxlcjo6ZnJhbWVVbmxvYWRlZChGcmFtZSogZnJhbWUpCit2b2lkIElucHV0SGFu
ZGxlcjo6ZnJhbWVVbmxvYWRlZChjb25zdCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFpc0Fj
dGl2ZVRleHRFZGl0KCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmgKaW5kZXggMWI2NGE3OC4u
MGY0Y2RkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5wdXRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5wdXRIYW5kbGVyLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
bm9kZUZvY3VzZWQoV2ViQ29yZTo6Tm9kZSopOwogICAgIHZvaWQgbm9kZVRleHRDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICB2
b2lkIGZyYW1lVW5sb2FkZWQoV2ViQ29yZTo6RnJhbWUqKTsKKyAgICB2b2lkIGZyYW1lVW5sb2Fk
ZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqKTsKIAogICAgIGJvb2wgaGFuZGxlS2V5Ym9hcmRJbnB1
dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6S2V5Ym9hcmRFdmVudCYsIGJvb2wgY2hhbmdl
SXNQYXJ0T2ZDb21wb3NpdGlvbiA9IGZhbHNlKTsKIAotLSAKMS43LjUuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129534</attachid>
            <date>2012-02-29 15:23:52 -0800</date>
            <delta_ts>2012-02-29 15:37:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15886</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSAyZWZmMTllNDJmODdkMGYwMTI5Mzc3ZTEwYzFmMzFmOGI2ZDUxNWYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzNSArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgNCArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA4ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTEzICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgIDggKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5wdXRIYW5kbGVyLmNwcCAgICAgIHwgICAgMiArLQogLi4uL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggfCAgICAyICstCiAxMCBmaWxlcyBjaGFu
Z2VkLCAxNjEgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggOWM4ZDE3Yy4uNmEyMTliZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC01NTg1LDUgKzU1ODUsMTEgQEAg
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0TmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCiAgICAg
bV9uZWVkVG91Y2hFdmVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZnJh
bWVVbmxvYWRlZChjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgbV9pbnB1dEhhbmRsZXItPmZy
YW1lVW5sb2FkZWQoZnJhbWUpOworICAgIG1faW5QYWdlU2VhcmNoTWFuYWdlci0+ZnJhbWVVbmxv
YWRlZChmcmFtZSk7Cit9CisKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCmluZGV4IGQ2ZDE5OWYuLjRkMjhmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaApAQCAtMzkyLDYgKzM5Miw4IEBAIHB1YmxpYzoKICAgICAvLyBDbGVh
biB1cCBhbnkgZG9jdW1lbnQgcmVsYXRlZCBkYXRhIHdlIG1pZ2h0IGJlIGhvbGRpbmcuCiAgICAg
dm9pZCBjbGVhckRvY3VtZW50RGF0YShjb25zdCBXZWJDb3JlOjpEb2N1bWVudCopOwogCisgICAg
dm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CisKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklm
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogICAgIHN0YXRpYyBXZWJDb3JlOjpS
ZW5kZXJMYXllciogZW5jbG9zaW5nRml4ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVk
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZwppbmRleCA3MGE5NzZkLi5lNzAxMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wMi0yOSAgQW5keSBDaGVuICA8YW5kY2hlbkBy
aW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgZmVhdHVyZXMgZm9yIGZp
bmQtaW4tcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzZWFyY2ggdGV4dCBhcm91bmQgdGhlIHdob2xlIHBhZ2Ug
aW5zdGVhZCBvZiBzaW5nbGUgZnJhbWUuCisgICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHN0
YXJ0IG5ldyBzZWFyY2ggZnJvbSBhY3RpdmUgc2VsZWN0aW9uIGFuZCBsYXN0IGFjdGl2ZSBtYXRj
aC4KKworICAgICAgICBJbnRlcm5hbGx5IHJldmlld2VkIGJ5IE1pa2UgRmVudG9uLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2aW9yLgor
CisKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlBhZ2VQcml2YXRlOjpmcmFtZVVubG9hZGVkKToKKyAgICAgICAgKiBBcGkvV2ViUGFn
ZV9wLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6
ZGlzcGF0Y2hXaWxsQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5OjpkZXRhY2hlZEZyb21QYXJlbnQyKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0RPTVN1cHBvcnQuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpET01TdXBwb3J0
OjppbmNyZW1lbnRGcmFtZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZmluZE5leHRTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpz
aG91bGRTZWFyY2hGb3JUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdl
U2VhcmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVVbmxvYWRlZCk6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmg6CisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjkgIE1heCBGZWlsICA8bWZlaWxAcmltLmNv
bT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIHN1cHBvcnQgZm9yIEZMQUMgYXVkaW8gYW5k
IE9HRy9Wb3JiaXMgYXVkaW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJy
eS5jcHAKaW5kZXggYWZkZGQ1MS4uZWM3YmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTc5MCw3ICs3OTAsNyBAQCBPYmplY3RDb250ZW50VHlw
ZSBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtV
UkwmIHVybAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hXaWxs
Q2xvc2UoKQogewotICAgIG1fd2ViUGFnZVByaXZhdGUtPm1faW5wdXRIYW5kbGVyLT5mcmFtZVVu
bG9hZGVkKG1fZnJhbWUpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPmZyYW1lVW5sb2FkZWQobV9m
cmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpzZXRNYWluRG9j
dW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpA
QCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkZXRh
Y2hlZEZyb21QYXJlbnQyKCkKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAg
bV93ZWJQYWdlUHJpdmF0ZS0+Y2xlYXJEb2N1bWVudERhdGEobV9mcmFtZS0+ZG9jdW1lbnQoKSk7
CiAKLSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZCht
X2ZyYW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOwog
ICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ub3RpZnlGcmFtZURldGFjaGVkKG1fZnJh
bWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9ET01TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0RPTVN1cHBvcnQuY3BwCmluZGV4IDUzZmQ4NzguLjExNjQ1ZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwCkBA
IC00MDMsNiArNDAzLDE0IEBAIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbkZvckNs
b3Nlc3RBY3R1YWxXb3JkU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgcmV0dXJuIHNl
bGVjdGlvbjsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBXZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAuCitGcmFtZSogaW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9y
d2FyZCwgYm9vbCB3cmFwRmxhZykKK3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAgICAgICA/IGN1
cnItPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAgICAgIDogY3Vy
ci0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOworfQorCiB9IC8v
IERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAppbmRleCAxZjU4
NTlkLi43Yjg0ZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9ET01TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvRE9NU3VwcG9ydC5oCkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCBJbnZhbGlkUG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwog
CiBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JDbG9zZXN0QWN0
dWFsV29yZFN0YXJ0KGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKIAorV2ViQ29y
ZTo6RnJhbWUqIGluY3JlbWVudEZyYW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBib29sIGZvcndh
cmQsIGJvb2wgd3JhcEZsYWcpOworCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8v
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUwNDAyMS4uMDJh
MjJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAKKyNp
bmNsdWRlICJET01TdXBwb3J0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTUxLDQz
ICs1MiwxMjUgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0gICAgICAgIGNs
ZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQodGV4dCkpIHsK
ICAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OwotICAgICAgICBtX2FjdGl2ZU1h
dGNoQ291bnQgPSBtX3dlYlBhZ2UtPm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQs
IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2VyTGltaXQpOwot
ICAgIH0gZWxzZQotICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRjaC5nZXQoKSwg
ZmFsc2UpOwotCi0gICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2FzZSBhbnkgbm9k
ZSBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoLgorICAgIGlmIChtX2FjdGl2ZU1h
dGNoICYmICFtX2FjdGl2ZU1hdGNoLT5ib3VuZGFyeVBvaW50c1ZhbGlkKCkpCisgICAgICAgIG1f
YWN0aXZlTWF0Y2ggPSAwOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hTdGFydGluZ1BvaW50
KG1fYWN0aXZlTWF0Y2gpOworICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7
IC8vIFN0YXJ0IGEgbmV3IHNlYXJjaC4KKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0
ZXh0OworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsK
KyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gbV93ZWJQYWdlLT5tX3BhZ2UtPm1hcmtBbGxN
YXRjaGVzRm9yVGV4dCh0ZXh0LCBDYXNlSW5zZW5zaXRpdmUsIHRydWUgLyogc2hvdWxkSGlnaGxp
Z2h0ICovLCBUZXh0TWF0Y2hNYXJrZXJMaW1pdCk7CisgICAgICAgIGlmICghbV9hY3RpdmVNYXRj
aENvdW50KSB7CisgICAgICAgICAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBTZWFyY2ggc2FtZSBzdHJp
bmcgZm9yIG5leHQgb2NjdXJyZW5jZS4KKyAgICAgICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZl
TWF0Y2guZ2V0KCksIGZhbHNlIC8qIGFjdGl2ZSAqLyk7CisgICAgICAgIC8vIFNlYXJjaGluZyBm
b3Igc2FtZSBzdHJpbmcgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiBsYXN0IG1hdGNoLgor
ICAgICAgICBpZiAobV9hY3RpdmVNYXRjaCkgeworICAgICAgICAgICAgaWYgKGZvcndhcmQpCisg
ICAgICAgICAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0U3RhcnQoc2VhcmNoU3RhcnRp
bmdQb2ludC0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0RW5kKHNlYXJjaFN0YXJ0aW5nUG9pbnQtPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBjb25zdCBGaW5kT3B0aW9ucyBm
aW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykKLSAgICAgICAg
fCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpXcmFwQXJvdW5k
OyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJhbWUKKyAgICAv
LyBJZiB0aGVyZSBpcyBhbnkgYWN0aXZlIHNlbGVjdGlvbiwgbmV3IHNlYXJjaCBzaG91bGQgc3Rh
cnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGl0LgorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgICAgIHNlYXJjaFN0
YXJ0aW5nUG9pbnQgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpOworICAgICAgICBtX3dl
YlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKKyAgICB9
CisKKyAgICBGcmFtZSogY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBzZWxlY3Rpb24uaXNOb25l
KCkgJiYgbV9hY3RpdmVNYXRjaCA/IG1fYWN0aXZlTWF0Y2gtPm93bmVyRG9jdW1lbnQoKS0+ZnJh
bWUoKSA6IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBjb25zdCBGaW5k
T3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IEJhY2t3YXJkcykKKyAgICAgICAg
fCBDYXNlSW5zZW5zaXRpdmUKKyAgICAgICAgfCBTdGFydEluU2VsZWN0aW9uOworCisgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBzZWFyY2hTdGFydGluZ1BvaW50LmdldCgpLCBjdXJyZW50
QWN0aXZlTWF0Y2hGcmFtZSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIC8vIFRPRE8gU3RhcnRJblNlbGVjdGlvbgorICAgIEZyYW1lKiBzdGFydEZyYW1lID0gY3Vy
cmVudEFjdGl2ZU1hdGNoRnJhbWU7CisgICAgZG8geworICAgICAgICBjdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3JlbWVudEZyYW1lKGN1cnJlbnRBY3RpdmVNYXRjaEZy
YW1lLCBmb3J3YXJkLCB0cnVlIC8qIHdyYXBGbGFnICovKTsKKyAgICAgICAgaWYgKGZpbmRBbmRN
YXJrVGV4dCh0ZXh0LCBtX2FjdGl2ZU1hdGNoLmdldCgpLCBjdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZSwgZmluZE9wdGlvbnMpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB3aGlsZSAo
Y3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBjdXJyZW50QWN0aXZlTWF0
Y2hGcmFtZSk7CiAKLSAgICBtX2FjdGl2ZU1hdGNoID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
ZWRpdG9yKCktPmZpbmRTdHJpbmdBbmRTY3JvbGxUb1Zpc2libGUodGV4dCwgbV9hY3RpdmVNYXRj
aC5nZXQoKSwgZmluZE9wdGlvbnMpOwotICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNo
LmdldCgpLCB0cnVlKTsKKyAgICBjbGVhclRleHRNYXRjaGVzKCk7CiAKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5QYWdlU2VhcmNoTWFu
YWdlcjo6c2hvdWxkU2VhcmNoRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYg
KHRleHQgPT0gbV9hY3RpdmVTZWFyY2hTdHJpbmcpCisgICAgICAgIHJldHVybiBtX2FjdGl2ZU1h
dGNoQ291bnQ7CisKKyAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VhcmNoIHN0cmluZyBpcyBwcmVm
aXggb2YgbmV3IHNlYXJjaCBzdHJpbmcsCisgICAgLy8gZG9uJ3Qgc2VhcmNoIGlmIHRoZSBwcmV2
aW91cyBvbmUgaGFzIHplcm8gcmVzdWx0LgorICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50Cisg
ICAgICAgICYmIG1fYWN0aXZlU2VhcmNoU3RyaW5nLmxlbmd0aCgpCisgICAgICAgICYmIHRleHQu
bGVuZ3RoKCkgPiBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgoKQorICAgICAgICAmJiBtX2Fj
dGl2ZVNlYXJjaFN0cmluZyA9PSB0ZXh0LnN1YnN0cmluZygwLCBtX2FjdGl2ZVNlYXJjaFN0cmlu
Zy5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBSYW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSwgY29uc3QgRmluZE9wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgbV9hY3RpdmVNYXRjaCA9IGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmlu
Z0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCByYW5nZSwgb3B0aW9ucyk7CisgICAgaWYgKG1fYWN0
aXZlTWF0Y2gpIHsKKyAgICAgICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCks
IHRydWUgLyogYWN0aXZlICovKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRj
aGVzKCkKIHsKICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsK
ICAgICBtX2FjdGl2ZU1hdGNoID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpz
ZXRNYXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKK3ZvaWQg
SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBh
Y3RpdmUpCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBkb2MgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAg
IERvY3VtZW50KiBkb2MgPSBtX2FjdGl2ZU1hdGNoLT5vd25lckRvY3VtZW50KCk7CiAgICAgaWYg
KCFkb2MpCiAgICAgICAgIHJldHVybjsKICAgICBkb2MtPm1hcmtlcnMoKS0+c2V0TWFya2Vyc0Fj
dGl2ZShyYW5nZSwgYWN0aXZlKTsKIH0KIAordm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmcmFt
ZVVubG9hZGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fYWN0aXZlTWF0Y2gp
IHsKKyAgICAgICAgaWYgKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUgJiYgbV9hY3Rp
dmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0cmlu
ZyA9IFN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhbWUqIGN1cnJl
bnRBY3RpdmVNYXRjaEZyYW1lID0gIW1fYWN0aXZlTWF0Y2ggPyAwIDogbV9hY3RpdmVNYXRjaC0+
b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmIChjdXJyZW50QWN0aXZlTWF0Y2hGcmFt
ZSA9PSBmcmFtZSB8fCBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpID09IGZyYW1lKSB7CisgICAgICAg
IG1fYWN0aXZlTWF0Y2ggPSAwOworICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0cmluZyA9IFN0cmlu
ZygpOworICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQgPSAwOworICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBub3RpZnkgY2xpZW50IGhlcmUuCisKKyAgICAgICAgaWYgKGZyYW1lID09IG1f
d2ViUGFnZS0+bWFpbkZyYW1lKCkpIC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGJlY2F1c2UgdGhl
IHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
d2ViUGFnZS0+bV9wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOworICAgIH0KK30KKwogfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5Q
YWdlU2VhcmNoTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oCmluZGV4IDFmNmJiYjUuLmNmZGZkNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBh
Z2VTZWFyY2hNYW5hZ2VyLmgKQEAgLTE5LDEyICsxOSwxMyBAQAogI2lmbmRlZiBJblBhZ2VTZWFy
Y2hNYW5hZ2VyX2gKICNkZWZpbmUgSW5QYWdlU2VhcmNoTWFuYWdlcl9oCiAKKyNpbmNsdWRlICJG
aW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIldURlN0cmluZy5oIgogCi0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsKIGNsYXNzIFJhbmdl
OworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIH0KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewpA
QCAtMzksMTAgKzQwLDEzIEBAIHB1YmxpYzoKICAgICB+SW5QYWdlU2VhcmNoTWFuYWdlcigpOwog
CiAgICAgYm9vbCBmaW5kTmV4dFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2Fy
ZCk7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRNYXRjaGVzKCk7CiAgICAgdm9pZCBzZXRNYXJrZXJB
Y3RpdmUoV2ViQ29yZTo6UmFuZ2UqLCBib29sIGFjdGl2ZSk7CisgICAgYm9vbCBmaW5kQW5kTWFy
a1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV2ViQ29yZTo6RmluZE9wdGlvbnMmKTsKKyAgICBib29sIHNob3VsZFNlYXJjaEZv
clRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBh
Z2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2FjdGl2ZU1hdGNoOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5j
cHAKaW5kZXggYzZhZWI0OS4uMTUyZGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCkBAIC03MTAsNyArNzEw
LDcgQEAgdm9pZCBJbnB1dEhhbmRsZXI6OmVuc3VyZUZvY3VzRWxlbWVudFZpc2libGUoYm9vbCBj
ZW50ZXJJblZpZXcpCiAgICAgICAgIGVuc3VyZUZvY3VzVGV4dEVsZW1lbnRWaXNpYmxlKGNlbnRl
ckluVmlldyA/IENlbnRlckFsd2F5cyA6IENlbnRlcklmTmVlZGVkKTsKIH0KIAotdm9pZCBJbnB1
dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoRnJhbWUqIGZyYW1lKQordm9pZCBJbnB1dEhhbmRsZXI6
OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghaXNBY3RpdmVU
ZXh0RWRpdCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCmluZGV4IDFiNjRhNzguLjBmNGNk
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lu
cHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0lucHV0SGFuZGxlci5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVG
b2N1c2VkKFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAgdm9pZCBm
cmFtZVVubG9hZGVkKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNv
bnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKICAgICBib29sIGhhbmRsZUtleWJvYXJkSW5wdXQoY29u
c3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQmLCBib29sIGNoYW5nZUlzUGFy
dE9mQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129538</attachid>
            <date>2012-02-29 15:37:36 -0800</date>
            <delta_ts>2012-03-01 07:39:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15835</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSA2MDYwODFlMTIzNzhmOWQzNDU1ODc5N2EyNjE2NjA2ZDJlMzM4OGMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMiArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgNCArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA4ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTEyICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgIDggKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5wdXRIYW5kbGVyLmNwcCAgICAgIHwgICAgMiArLQogLi4uL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmggfCAgICAyICstCiAxMCBmaWxlcyBjaGFu
Z2VkLCAxNTcgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggOWM4ZDE3Yy4uNmEyMTliZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC01NTg1LDUgKzU1ODUsMTEgQEAg
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0TmVlZFRvdWNoRXZlbnRzKGJvb2wgdmFsdWUpCiAgICAg
bV9uZWVkVG91Y2hFdmVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZnJh
bWVVbmxvYWRlZChjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgbV9pbnB1dEhhbmRsZXItPmZy
YW1lVW5sb2FkZWQoZnJhbWUpOworICAgIG1faW5QYWdlU2VhcmNoTWFuYWdlci0+ZnJhbWVVbmxv
YWRlZChmcmFtZSk7Cit9CisKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCmluZGV4IGQ2ZDE5OWYuLjRkMjhmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlX3AuaApAQCAtMzkyLDYgKzM5Miw4IEBAIHB1YmxpYzoKICAgICAvLyBDbGVh
biB1cCBhbnkgZG9jdW1lbnQgcmVsYXRlZCBkYXRhIHdlIG1pZ2h0IGJlIGhvbGRpbmcuCiAgICAg
dm9pZCBjbGVhckRvY3VtZW50RGF0YShjb25zdCBXZWJDb3JlOjpEb2N1bWVudCopOwogCisgICAg
dm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CisKICAgICBzdGF0aWMg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklm
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogICAgIHN0YXRpYyBXZWJDb3JlOjpS
ZW5kZXJMYXllciogZW5jbG9zaW5nRml4ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVk
UG9zaXRpb25lZChXZWJDb3JlOjpSZW5kZXJMYXllciopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZwppbmRleCA3MGE5NzZkLi43NWI3ZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMi0wMi0yOSAgQW5keSBDaGVuICA8YW5kY2hlbkBy
aW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgZmVhdHVyZXMgZm9yIGZp
bmQtaW4tcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzk4MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzZWFyY2ggdGV4dCBhcm91bmQgdGhlIHdob2xlIHBhZ2Ug
aW5zdGVhZCBvZiBzaW5nbGUgZnJhbWUuCisgICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHN0
YXJ0IG5ldyBzZWFyY2ggZnJvbSBhY3RpdmUgc2VsZWN0aW9uIGFuZCBsYXN0IGFjdGl2ZSBtYXRj
aC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBi
ZWhhdmlvci4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIEFw
aS9XZWJQYWdlX3AuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFj
a0JlcnJ5OjpkaXNwYXRjaFdpbGxDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEJsYWNrQmVycnk6OmRldGFjaGVkRnJvbVBhcmVudDIpOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRE9NU3VwcG9ydC5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkRP
TVN1cHBvcnQ6OmluY3JlbWVudEZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0RPTVN1
cHBvcnQuaDoKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3Bw
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5k
TmV4dFN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1h
bmFnZXI6OnNob3VsZFNlYXJjaEZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmcmFtZVVubG9h
ZGVkKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OklucHV0SGFuZGxlcjo6ZnJhbWVVbmxvYWRlZCk6CisgICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKKwogMjAxMi0wMi0yOSAgTWF4IEZlaWwgIDxtZmVp
bEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBBZGQgc3VwcG9ydCBmb3IgRkxBQyBh
dWRpbyBhbmQgT0dHL1ZvcmJpcyBhdWRpbwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRC
bGFja0JlcnJ5LmNwcAppbmRleCBhZmRkZDUxLi5lYzdiZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcApAQCAtNzkwLDcgKzc5MCw3IEBAIE9iamVjdENv
bnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6b2JqZWN0Q29udGVudFR5cGUo
Y29uc3QgS1VSTCYgdXJsCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNw
YXRjaFdpbGxDbG9zZSgpCiB7Ci0gICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9pbnB1dEhhbmRsZXIt
PmZyYW1lVW5sb2FkZWQobV9mcmFtZSk7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+ZnJhbWVVbmxv
YWRlZChtX2ZyYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OnNl
dE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCkBAIC05MjYsNyArOTI2LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVy
cnk6OmRldGFjaGVkRnJvbVBhcmVudDIoKQogICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQog
ICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5jbGVhckRvY3VtZW50RGF0YShtX2ZyYW1lLT5kb2N1
bWVudCgpKTsKIAotICAgIG1fd2ViUGFnZVByaXZhdGUtPm1faW5wdXRIYW5kbGVyLT5mcmFtZVVu
bG9hZGVkKG1fZnJhbWUpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPmZyYW1lVW5sb2FkZWQobV9m
cmFtZSk7CiAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQtPm5vdGlmeUZyYW1lRGV0YWNo
ZWQobV9mcmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAKaW5kZXggNTNmZDg3OC4uMTE2NDVkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9y
dC5jcHAKQEAgLTQwMyw2ICs0MDMsMTQgQEAgVmlzaWJsZVNlbGVjdGlvbiB2aXNpYmxlU2VsZWN0
aW9uRm9yQ2xvc2VzdEFjdHVhbFdvcmRTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBy
ZXR1cm4gc2VsZWN0aW9uOwogfQogCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tIFdl
YkNvcmUvcGFnZS9QYWdlLmNwcC4KK0ZyYW1lKiBpbmNyZW1lbnRGcmFtZShGcmFtZSogY3Vyciwg
Ym9vbCBmb3J3YXJkLCBib29sIHdyYXBGbGFnKQoreworICAgIHJldHVybiBmb3J3YXJkCisgICAg
ICAgID8gY3Vyci0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwRmxhZykKKyAgICAg
ICAgOiBjdXJyLT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwRmxhZyk7Cit9
CisKIH0gLy8gRE9NU3VwcG9ydAogfSAvLyBXZWJLaXQKIH0gLy8gQmxhY2tCZXJyeQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5o
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oCmlu
ZGV4IDFmNTg1OWQuLjdiODRlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgKQEAgLTc4LDYgKzc4LDggQEAgc3RhdGljIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50IEludmFsaWRQb2ludCA9IFdlYkNvcmU6OkludFBvaW50KC0x
LCAtMSk7CiAKIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbkZvckNs
b3Nlc3RBY3R1YWxXb3JkU3RhcnQoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOwog
CitXZWJDb3JlOjpGcmFtZSogaW5jcmVtZW50RnJhbWUoV2ViQ29yZTo6RnJhbWUqIGN1cnIsIGJv
b2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZyk7CisKIH0gLy8gRE9NU3VwcG9ydAogfSAvLyBXZWJL
aXQKIH0gLy8gQmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcAppbmRleCBhZTA0
MDIxLi4xZmYxY2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNwcApAQCAtMTksNiArMTks
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluUGFnZVNlYXJjaE1hbmFnZXIu
aCIKIAorI2luY2x1ZGUgIkRPTVN1cHBvcnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpA
QCAtNTEsNDMgKzUyLDEyNCBAQCBib29sIEluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBmb3J3YXJkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKG1fYWN0aXZlU2VhcmNoU3RyaW5nICE9IHRleHQpIHsKLSAg
ICAgICAgY2xlYXJUZXh0TWF0Y2hlcygpOworICAgIGlmICghc2hvdWxkU2VhcmNoRm9yVGV4dCh0
ZXh0KSkgewogICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0cmluZyA9IHRleHQ7Ci0gICAgICAgIG1f
YWN0aXZlTWF0Y2hDb3VudCA9IG1fd2ViUGFnZS0+bV9wYWdlLT5tYXJrQWxsTWF0Y2hlc0ZvclRl
eHQodGV4dCwgV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlLCB0cnVlLCBUZXh0TWF0Y2hNYXJrZXJM
aW1pdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNo
LmdldCgpLCBmYWxzZSk7Ci0KLSAgICBpZiAoIW1fYWN0aXZlTWF0Y2hDb3VudCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHRoZSByYW5nZSBpbiBjYXNl
IGFueSBub2RlIGhhcyBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBzZWFyY2guCisgICAgaWYgKG1f
YWN0aXZlTWF0Y2ggJiYgIW1fYWN0aXZlTWF0Y2gtPmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSkKKyAg
ICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFN0YXJ0
aW5nUG9pbnQobV9hY3RpdmVNYXRjaCk7CisgICAgaWYgKG1fYWN0aXZlU2VhcmNoU3RyaW5nICE9
IHRleHQpIHsgLy8gU3RhcnQgYSBuZXcgc2VhcmNoLgorICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0
cmluZyA9IHRleHQ7CisgICAgICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtBbGxUZXh0TWF0
Y2hlcygpOworICAgICAgICBtX2FjdGl2ZU1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPm1fcGFnZS0+
bWFya0FsbE1hdGNoZXNGb3JUZXh0KHRleHQsIENhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSAvKiBzaG91
bGRIaWdobGlnaHQgKi8sIFRleHRNYXRjaE1hcmtlckxpbWl0KTsKKyAgICAgICAgaWYgKCFtX2Fj
dGl2ZU1hdGNoQ291bnQpIHsKKyAgICAgICAgICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIFNlYXJjaCBz
YW1lIHN0cmluZyBmb3IgbmV4dCBvY2N1cnJlbmNlLgorICAgICAgICBzZXRNYXJrZXJBY3RpdmUo
bV9hY3RpdmVNYXRjaC5nZXQoKSwgZmFsc2UgLyogYWN0aXZlICovKTsKKyAgICAgICAgLy8gU2Vh
cmNoaW5nIGZvciBzYW1lIHN0cmluZyBzaG91bGQgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIGxhc3Qg
bWF0Y2guCisgICAgICAgIGlmIChtX2FjdGl2ZU1hdGNoKSB7CisgICAgICAgICAgICBpZiAoZm9y
d2FyZCkKKyAgICAgICAgICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRTdGFydChzZWFy
Y2hTdGFydGluZ1BvaW50LT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzZWFyY2hTdGFydGluZ1BvaW50LT5zZXRFbmQoc2VhcmNoU3RhcnRpbmdQb2lu
dC0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGNvbnN0IEZpbmRP
cHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndhcmQgPyAwIDogV2ViQ29yZTo6QmFja3dhcmRzKQot
ICAgICAgICB8IFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZQotICAgICAgICB8IFdlYkNvcmU6Oldy
YXBBcm91bmQ7IC8vIFRPRE8gc2hvdWxkIHdyYXAgYXJvdW5kIGluIHBhZ2UsIG5vdCBpbiBmcmFt
ZQorICAgIC8vIElmIHRoZXJlIGlzIGFueSBhY3RpdmUgc2VsZWN0aW9uLCBuZXcgc2VhcmNoIHNo
b3VsZCBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgaXQuCisgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKKyAgICAgICAg
c2VhcmNoU3RhcnRpbmdQb2ludCA9IHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCk7CisgICAg
ICAgIG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigpLT5jbGVhcigp
OworICAgIH0KKworICAgIEZyYW1lKiBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9IHNlbGVjdGlv
bi5pc05vbmUoKSAmJiBtX2FjdGl2ZU1hdGNoID8gbV9hY3RpdmVNYXRjaC0+b3duZXJEb2N1bWVu
dCgpLT5mcmFtZSgpIDogbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAgIGNv
bnN0IEZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gKGZvcndhcmQgPyAwIDogQmFja3dhcmRzKQor
ICAgICAgICB8IENhc2VJbnNlbnNpdGl2ZQorICAgICAgICB8IFN0YXJ0SW5TZWxlY3Rpb247CisK
KyAgICBpZiAoZmluZEFuZE1hcmtUZXh0KHRleHQsIHNlYXJjaFN0YXJ0aW5nUG9pbnQuZ2V0KCks
IGN1cnJlbnRBY3RpdmVNYXRjaEZyYW1lLCBmaW5kT3B0aW9ucykpCisgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgLy8gVE9ETyBTdGFydEluU2VsZWN0aW9uCisgICAgRnJhbWUqIHN0YXJ0RnJh
bWUgPSBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZTsKKyAgICBkbyB7CisgICAgICAgIGN1cnJlbnRB
Y3RpdmVNYXRjaEZyYW1lID0gRE9NU3VwcG9ydDo6aW5jcmVtZW50RnJhbWUoY3VycmVudEFjdGl2
ZU1hdGNoRnJhbWUsIGZvcndhcmQsIHRydWUgLyogd3JhcEZsYWcgKi8pOworICAgICAgICBpZiAo
ZmluZEFuZE1hcmtUZXh0KHRleHQsIG1fYWN0aXZlTWF0Y2guZ2V0KCksIGN1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lLCBmaW5kT3B0aW9ucykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IHdoaWxlIChjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSAmJiBzdGFydEZyYW1lICE9IGN1cnJlbnRB
Y3RpdmVNYXRjaEZyYW1lKTsKIAotICAgIG1fYWN0aXZlTWF0Y2ggPSBtX3dlYlBhZ2UtPm1haW5G
cmFtZSgpLT5lZGl0b3IoKS0+ZmluZFN0cmluZ0FuZFNjcm9sbFRvVmlzaWJsZSh0ZXh0LCBtX2Fj
dGl2ZU1hdGNoLmdldCgpLCBmaW5kT3B0aW9ucyk7Ci0gICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0
aXZlTWF0Y2guZ2V0KCksIHRydWUpOworICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKIAorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJblBhZ2VT
ZWFyY2hNYW5hZ2VyOjpzaG91bGRTZWFyY2hGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sK
KyAgICBpZiAodGV4dCA9PSBtX2FjdGl2ZVNlYXJjaFN0cmluZykKKyAgICAgICAgcmV0dXJuIG1f
YWN0aXZlTWF0Y2hDb3VudDsKKworICAgIC8vIElmIHRoZSBwcmV2aW91cyBzZWFyY2ggc3RyaW5n
IGlzIHByZWZpeCBvZiBuZXcgc2VhcmNoIHN0cmluZywKKyAgICAvLyBkb24ndCBzZWFyY2ggaWYg
dGhlIHByZXZpb3VzIG9uZSBoYXMgemVybyByZXN1bHQuCisgICAgaWYgKCFtX2FjdGl2ZU1hdGNo
Q291bnQKKyAgICAgICAgJiYgbV9hY3RpdmVTZWFyY2hTdHJpbmcubGVuZ3RoKCkKKyAgICAgICAg
JiYgdGV4dC5sZW5ndGgoKSA+IG1fYWN0aXZlU2VhcmNoU3RyaW5nLmxlbmd0aCgpCisgICAgICAg
ICYmIG1fYWN0aXZlU2VhcmNoU3RyaW5nID09IHRleHQuc3Vic3RyaW5nKDAsIG1fYWN0aXZlU2Vh
cmNoU3RyaW5nLmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIEluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmRBbmRNYXJrVGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBGaW5kT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX2FjdGl2ZU1hdGNoID0gZnJhbWUtPmVkaXRvcigpLT5m
aW5kU3RyaW5nQW5kU2Nyb2xsVG9WaXNpYmxlKHRleHQsIHJhbmdlLCBvcHRpb25zKTsKKyAgICBp
ZiAobV9hY3RpdmVNYXRjaCkgeworICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRj
aC5nZXQoKSwgdHJ1ZSAvKiBhY3RpdmUgKi8pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFy
VGV4dE1hdGNoZXMoKQogewogICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtBbGxUZXh0TWF0
Y2hlcygpOwogICAgIG1fYWN0aXZlTWF0Y2ggPSAwOwogfQogCi12b2lkIEluUGFnZVNlYXJjaE1h
bmFnZXI6OnNldE1hcmtlckFjdGl2ZShXZWJDb3JlOjpSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZl
KQordm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJBY3RpdmUoUmFuZ2UqIHJhbmdl
LCBib29sIGFjdGl2ZSkKIHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGRvYyA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50
KCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IG1fYWN0aXZlTWF0Y2gtPm93bmVyRG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJuOwogICAgIGRvYy0+bWFya2VycygpLT5zZXRN
YXJrZXJzQWN0aXZlKHJhbmdlLCBhY3RpdmUpOwogfQogCit2b2lkIEluUGFnZVNlYXJjaE1hbmFn
ZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghbV9hY3Rp
dmVNYXRjaCkgeworICAgICAgICBpZiAobV93ZWJQYWdlLT5tYWluRnJhbWUoKSA9PSBmcmFtZSAm
JiBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYWN0aXZlU2Vh
cmNoU3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGcmFt
ZSogY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSAhbV9hY3RpdmVNYXRjaCA/IDAgOiBtX2FjdGl2
ZU1hdGNoLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKGN1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lID09IGZyYW1lIHx8IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUpIHsK
KyAgICAgICAgbV9hY3RpdmVNYXRjaCA9IDA7CisgICAgICAgIG1fYWN0aXZlU2VhcmNoU3RyaW5n
ID0gU3RyaW5nKCk7CisgICAgICAgIG1fYWN0aXZlTWF0Y2hDb3VudCA9IDA7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIG5vdGlmeSBjbGllbnQgaGVyZS4KKyAgICAgICAgaWYgKGZyYW1l
ID09IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpIC8vIERvbid0IG5lZWQgdG8gdW5tYXJrIGJlY2F1
c2UgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fd2ViUGFnZS0+bV9wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOworICAgIH0KK30K
KwogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oCmluZGV4IDFmNmJiYjUuLmNmZGZkNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNl
YXJjaE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmgKQEAgLTE5LDEyICsxOSwxMyBAQAogI2lmbmRlZiBJblBh
Z2VTZWFyY2hNYW5hZ2VyX2gKICNkZWZpbmUgSW5QYWdlU2VhcmNoTWFuYWdlcl9oCiAKKyNpbmNs
dWRlICJGaW5kT3B0aW9ucy5oIgogI2luY2x1ZGUgIldURlN0cmluZy5oIgogCi0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsKIGNsYXNz
IFJhbmdlOworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIH0KIAogbmFtZXNwYWNlIEJsYWNrQmVy
cnkgewpAQCAtMzksMTAgKzQwLDEzIEBAIHB1YmxpYzoKICAgICB+SW5QYWdlU2VhcmNoTWFuYWdl
cigpOwogCiAgICAgYm9vbCBmaW5kTmV4dFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wg
Zm9yd2FyZCk7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7
CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRleHRNYXRjaGVzKCk7CiAgICAgdm9pZCBzZXRN
YXJrZXJBY3RpdmUoV2ViQ29yZTo6UmFuZ2UqLCBib29sIGFjdGl2ZSk7CisgICAgYm9vbCBmaW5k
QW5kTWFya1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBXZWJDb3JlOjpSYW5nZSosIFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6RmluZE9wdGlvbnMmKTsKKyAgICBib29sIHNob3VsZFNl
YXJjaEZvclRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogICAgIFdlYlBhZ2VQcml2YXRlKiBt
X3dlYlBhZ2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX2FjdGl2ZU1hdGNoOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFu
ZGxlci5jcHAKaW5kZXggYzZhZWI0OS4uMTUyZGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwCkBAIC03MTAs
NyArNzEwLDcgQEAgdm9pZCBJbnB1dEhhbmRsZXI6OmVuc3VyZUZvY3VzRWxlbWVudFZpc2libGUo
Ym9vbCBjZW50ZXJJblZpZXcpCiAgICAgICAgIGVuc3VyZUZvY3VzVGV4dEVsZW1lbnRWaXNpYmxl
KGNlbnRlckluVmlldyA/IENlbnRlckFsd2F5cyA6IENlbnRlcklmTmVlZGVkKTsKIH0KIAotdm9p
ZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoRnJhbWUqIGZyYW1lKQordm9pZCBJbnB1dEhh
bmRsZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghaXNB
Y3RpdmVUZXh0RWRpdCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCmluZGV4IDFiNjRhNzgu
LjBmNGNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0lucHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IG5vZGVGb2N1c2VkKFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlZChj
b25zdCBXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAg
dm9pZCBmcmFtZVVubG9hZGVkKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdm9pZCBmcmFtZVVubG9h
ZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKICAgICBib29sIGhhbmRsZUtleWJvYXJkSW5w
dXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OktleWJvYXJkRXZlbnQmLCBib29sIGNoYW5n
ZUlzUGFydE9mQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="132273"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
    <flag name="commit-queue"
          id="132274"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129703</attachid>
            <date>2012-03-01 07:38:55 -0800</date>
            <delta_ts>2012-03-01 22:10:48 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-02-28-Andy-Chen-andchen-rim.com.patch</filename>
            <type>text/plain</type>
            <size>15802</size>
            <attacher name="Andy Chen">andchen</attacher>
            
              <data encoding="base64">RnJvbSBlODIxMTc3OTIwNmRlNGMwNWRmMDdmMTQ0ZDg3NjEyZDc1YWY4YzhkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IENoZW4gPGFuZGNoZW5AcmltLmNvbT4KRGF0ZTogVHVl
LCAyOCBGZWIgMjAxMiAxMzozOToxNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDItMjgg
IEFuZHkgQ2hlbiAgPGFuZGNoZW5AcmltLmNvbT4KCiAgICAgICAgSW1wbGVtZW50IGZlYXR1cmVz
IGZvciBJblBhZ2VTZWFyY2hNYW5hZ2VyOgogICAgICAgIC0gTWFrZSBpdCBiZSBhYmxlIHRvIHNl
YXJjaCB0ZXh0IGFyb3VuZCB0aGUgd2hvbGUgcGFnZSBpbnN0ZWFkIG9mIHNpbmdsZSBmcmFtZS4K
ICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBzdGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZl
IHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0Y2guCgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZnJhbWVVbmxvYWRlZCk6CiAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CiAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEJsYWNrQmVycnkuY3BwOgogICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnk6OmRpc3BhdGNoV2lsbENsb3NlKToKICAgICAgICAqIFdlYktpdFN1cHBvcnQvRE9NU3Vw
cG9ydC5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RE9NU3VwcG9ydDo6aW5jcmVt
ZW50RnJhbWUpOgogICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0Lmg6CiAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OkluUGFnZVNlYXJjaE1hbmFnZXIpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmZpbmROZXh0
U3RyaW5nKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hNYW5hZ2Vy
OjpzaG91bGRTZWFyY2hGb3JUZXh0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBh
Z2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OmNsZWFyVGV4dE1hdGNoZXMpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUGFnZVNlYXJjaE1hbmFnZXI6OnNldE1hcmtlckFjdGl2ZSk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVV
bmxvYWRlZCk6CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuaDoK
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgogICAgICAgICogV2Vi
S2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuaDoKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlX3AuaCAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwgICAzMiArKysrKysKIC4uLi9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIHwgICAgNCArLQogLi4u
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5jcHAgfCAgICA4ICsr
CiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmggICB8ICAg
IDIgKwogLi4uL1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAgICAgICAgICAg
fCAgMTEyICsrKysrKysrKysrKysrKysrLS0tCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUGFnZVNlYXJjaE1hbmFnZXIuaCB8ICAgMTAgKystCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0lucHV0SGFuZGxlci5jcHAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oIHwgICAgMiArLQogMTAgZmlsZXMgY2hh
bmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IDljOGQxN2MuLjZhMjE5YmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcApAQCAtNTU4NSw1ICs1NTg1LDExIEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldE5lZWRUb3VjaEV2ZW50cyhib29sIHZhbHVlKQogICAg
IG1fbmVlZFRvdWNoRXZlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OmZy
YW1lVW5sb2FkZWQoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIG1faW5wdXRIYW5kbGVyLT5m
cmFtZVVubG9hZGVkKGZyYW1lKTsKKyAgICBtX2luUGFnZVNlYXJjaE1hbmFnZXItPmZyYW1lVW5s
b2FkZWQoZnJhbWUpOworfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlX3AuaAppbmRleCBkNmQxOTlmLi40ZDI4ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViUGFnZV9wLmgKQEAgLTM5Miw2ICszOTIsOCBAQCBwdWJsaWM6CiAgICAgLy8gQ2xl
YW4gdXAgYW55IGRvY3VtZW50IHJlbGF0ZWQgZGF0YSB3ZSBtaWdodCBiZSBob2xkaW5nLgogICAg
IHZvaWQgY2xlYXJEb2N1bWVudERhdGEoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQqKTsKIAorICAg
IHZvaWQgZnJhbWVVbmxvYWRlZChjb25zdCBXZWJDb3JlOjpGcmFtZSopOworCiAgICAgc3RhdGlj
IFdlYkNvcmU6OlJlbmRlckxheWVyKiBlbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJ
ZlBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKICAgICBzdGF0aWMgV2ViQ29yZTo6
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxmSWZGaXhl
ZFBvc2l0aW9uZWQoV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9D
aGFuZ2VMb2cKaW5kZXggNzBhOTc2ZC4uNzViN2YyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTItMDItMjkgIEFuZHkgQ2hlbiAgPGFuZGNoZW5A
cmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IGZlYXR1cmVzIGZvciBm
aW5kLWluLXBhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5ODIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSBNYWtlIGl0IGJlIGFibGUgdG8gc2VhcmNoIHRleHQgYXJvdW5kIHRoZSB3aG9sZSBwYWdl
IGluc3RlYWQgb2Ygc2luZ2xlIGZyYW1lLgorICAgICAgICAtIE1ha2UgaXQgYmUgYWJsZSB0byBz
dGFydCBuZXcgc2VhcmNoIGZyb20gYWN0aXZlIHNlbGVjdGlvbiBhbmQgbGFzdCBhY3RpdmUgbWF0
Y2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2Ug
YmVoYXZpb3IuCisKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpmcmFtZVVubG9hZGVkKToKKyAgICAgICAgKiBB
cGkvV2ViUGFnZV9wLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Qmxh
Y2tCZXJyeTo6ZGlzcGF0Y2hXaWxsQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRCbGFja0JlcnJ5OjpkZXRhY2hlZEZyb21QYXJlbnQyKToKKyAgICAgICAgKiBXZWJL
aXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpE
T01TdXBwb3J0OjppbmNyZW1lbnRGcmFtZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9ET01T
dXBwb3J0Lmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6Zmlu
ZE5leHRTdHJpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblBhZ2VTZWFyY2hN
YW5hZ2VyOjpzaG91bGRTZWFyY2hGb3JUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZmluZEFuZE1hcmtUZXh0KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5QYWdlU2VhcmNoTWFuYWdlcjo6ZnJhbWVVbmxv
YWRlZCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hNYW5hZ2VyLmg6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQpOgorICAgICAgICAqIFdl
YktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmg6CisKIDIwMTItMDItMjkgIE1heCBGZWlsICA8bWZl
aWxAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIHN1cHBvcnQgZm9yIEZMQUMg
YXVkaW8gYW5kIE9HRy9Wb3JiaXMgYXVkaW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeS5jcHAKaW5kZXggYWZkZGQ1MS4uZWM3YmVlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tC
ZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKQEAgLTc5MCw3ICs3OTAsNyBAQCBPYmplY3RD
b250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6Om9iamVjdENvbnRlbnRUeXBl
KGNvbnN0IEtVUkwmIHVybAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlz
cGF0Y2hXaWxsQ2xvc2UoKQogewotICAgIG1fd2ViUGFnZVByaXZhdGUtPm1faW5wdXRIYW5kbGVy
LT5mcmFtZVVubG9hZGVkKG1fZnJhbWUpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPmZyYW1lVW5s
b2FkZWQobV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Ojpz
ZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5OjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkK
ICAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+Y2xlYXJEb2N1bWVudERhdGEobV9mcmFtZS0+ZG9j
dW1lbnQoKSk7CiAKLSAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2lucHV0SGFuZGxlci0+ZnJhbWVV
bmxvYWRlZChtX2ZyYW1lKTsKKyAgICBtX3dlYlBhZ2VQcml2YXRlLT5mcmFtZVVubG9hZGVkKG1f
ZnJhbWUpOwogICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ub3RpZnlGcmFtZURldGFj
aGVkKG1fZnJhbWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuY3BwCmluZGV4IDUzZmQ4NzguLjExNjQ1ZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBv
cnQuY3BwCkBAIC00MDMsNiArNDAzLDE0IEBAIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVj
dGlvbkZvckNsb3Nlc3RBY3R1YWxXb3JkU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAg
cmV0dXJuIHNlbGVjdGlvbjsKIH0KIAorLy8gVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBX
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAuCitGcmFtZSogaW5jcmVtZW50RnJhbWUoRnJhbWUqIGN1cnIs
IGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykKK3sKKyAgICByZXR1cm4gZm9yd2FyZAorICAg
ICAgICA/IGN1cnItPnRyZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCisgICAg
ICAgIDogY3Vyci0+dHJlZSgpLT50cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpOwor
fQorCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2ViS2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQu
aCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0RPTVN1cHBvcnQuaApp
bmRleCAxZjU4NTlkLi43Yjg0ZTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9ET01TdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvRE9NU3VwcG9ydC5oCkBAIC03OCw2ICs3OCw4IEBAIHN0YXRpYyBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCBJbnZhbGlkUG9pbnQgPSBXZWJDb3JlOjpJbnRQb2ludCgt
MSwgLTEpOwogCiBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JD
bG9zZXN0QWN0dWFsV29yZFN0YXJ0KGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsK
IAorV2ViQ29yZTo6RnJhbWUqIGluY3JlbWVudEZyYW1lKFdlYkNvcmU6OkZyYW1lKiBjdXJyLCBi
b29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpOworCiB9IC8vIERPTVN1cHBvcnQKIH0gLy8gV2Vi
S2l0CiB9IC8vIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKaW5kZXggYWUw
NDAyMS4uMDljZmQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5jcHAKQEAgLTE5LDYgKzE5
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2Vy
LmgiCiAKKyNpbmNsdWRlICJET01TdXBwb3J0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIK
QEAgLTUxLDQzICs1MiwxMjQgQEAgYm9vbCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kTmV4dFN0
cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgZm9yd2FyZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAhPSB0ZXh0KSB7Ci0g
ICAgICAgIGNsZWFyVGV4dE1hdGNoZXMoKTsKKyAgICBpZiAoIXNob3VsZFNlYXJjaEZvclRleHQo
dGV4dCkpIHsKICAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSB0ZXh0OwotICAgICAgICBt
X2FjdGl2ZU1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPm1fcGFnZS0+bWFya0FsbE1hdGNoZXNGb3JU
ZXh0KHRleHQsIFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSwgdHJ1ZSwgVGV4dE1hdGNoTWFya2Vy
TGltaXQpOwotICAgIH0gZWxzZQotICAgICAgICBzZXRNYXJrZXJBY3RpdmUobV9hY3RpdmVNYXRj
aC5nZXQoKSwgZmFsc2UpOwotCi0gICAgaWYgKCFtX2FjdGl2ZU1hdGNoQ291bnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUgcmFuZ2UgaW4gY2Fz
ZSBhbnkgbm9kZSBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3Qgc2VhcmNoLgorICAgIGlmICht
X2FjdGl2ZU1hdGNoICYmICFtX2FjdGl2ZU1hdGNoLT5ib3VuZGFyeVBvaW50c1ZhbGlkKCkpCisg
ICAgICAgIG1fYWN0aXZlTWF0Y2ggPSAwOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hTdGFy
dGluZ1BvaW50KG1fYWN0aXZlTWF0Y2gpOworICAgIGlmIChtX2FjdGl2ZVNlYXJjaFN0cmluZyAh
PSB0ZXh0KSB7IC8vIFN0YXJ0IGEgbmV3IHNlYXJjaC4KKyAgICAgICAgbV9hY3RpdmVTZWFyY2hT
dHJpbmcgPSB0ZXh0OworICAgICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1h
dGNoZXMoKTsKKyAgICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gbV93ZWJQYWdlLT5tX3BhZ2Ut
Pm1hcmtBbGxNYXRjaGVzRm9yVGV4dCh0ZXh0LCBDYXNlSW5zZW5zaXRpdmUsIHRydWUgLyogc2hv
dWxkSGlnaGxpZ2h0ICovLCBUZXh0TWF0Y2hNYXJrZXJMaW1pdCk7CisgICAgICAgIGlmICghbV9h
Y3RpdmVNYXRjaENvdW50KSB7CisgICAgICAgICAgICBjbGVhclRleHRNYXRjaGVzKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBTZWFyY2gg
c2FtZSBzdHJpbmcgZm9yIG5leHQgb2NjdXJyZW5jZS4KKyAgICAgICAgc2V0TWFya2VyQWN0aXZl
KG1fYWN0aXZlTWF0Y2guZ2V0KCksIGZhbHNlIC8qIGFjdGl2ZSAqLyk7CisgICAgICAgIC8vIFNl
YXJjaGluZyBmb3Igc2FtZSBzdHJpbmcgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiBsYXN0
IG1hdGNoLgorICAgICAgICBpZiAobV9hY3RpdmVNYXRjaCkgeworICAgICAgICAgICAgaWYgKGZv
cndhcmQpCisgICAgICAgICAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0U3RhcnQoc2Vh
cmNoU3RhcnRpbmdQb2ludC0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgc2VhcmNoU3RhcnRpbmdQb2ludC0+c2V0RW5kKHNlYXJjaFN0YXJ0aW5nUG9p
bnQtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBjb25zdCBGaW5k
T3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IFdlYkNvcmU6OkJhY2t3YXJkcykK
LSAgICAgICAgfCBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUKLSAgICAgICAgfCBXZWJDb3JlOjpX
cmFwQXJvdW5kOyAvLyBUT0RPIHNob3VsZCB3cmFwIGFyb3VuZCBpbiBwYWdlLCBub3QgaW4gZnJh
bWUKKyAgICAvLyBJZiB0aGVyZSBpcyBhbnkgYWN0aXZlIHNlbGVjdGlvbiwgbmV3IHNlYXJjaCBz
aG91bGQgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGl0LgorICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CisgICAgICAg
IHNlYXJjaFN0YXJ0aW5nUG9pbnQgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpOworICAg
ICAgICBtX3dlYlBhZ2UtPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+Y2xlYXIo
KTsKKyAgICB9CisKKyAgICBGcmFtZSogY3VycmVudEFjdGl2ZU1hdGNoRnJhbWUgPSBzZWxlY3Rp
b24uaXNOb25lKCkgJiYgbV9hY3RpdmVNYXRjaCA/IG1fYWN0aXZlTWF0Y2gtPm93bmVyRG9jdW1l
bnQoKS0+ZnJhbWUoKSA6IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisKKyAgICBj
b25zdCBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IChmb3J3YXJkID8gMCA6IEJhY2t3YXJkcykK
KyAgICAgICAgfCBDYXNlSW5zZW5zaXRpdmUKKyAgICAgICAgfCBTdGFydEluU2VsZWN0aW9uOwor
CisgICAgaWYgKGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCBzZWFyY2hTdGFydGluZ1BvaW50LmdldCgp
LCBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSwgZmluZE9wdGlvbnMpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIC8vIFRPRE8gU3RhcnRJblNlbGVjdGlvbgorICAgIEZyYW1lKiBzdGFydEZy
YW1lID0gY3VycmVudEFjdGl2ZU1hdGNoRnJhbWU7CisgICAgZG8geworICAgICAgICBjdXJyZW50
QWN0aXZlTWF0Y2hGcmFtZSA9IERPTVN1cHBvcnQ6OmluY3JlbWVudEZyYW1lKGN1cnJlbnRBY3Rp
dmVNYXRjaEZyYW1lLCBmb3J3YXJkLCB0cnVlIC8qIHdyYXBGbGFnICovKTsKKyAgICAgICAgaWYg
KGZpbmRBbmRNYXJrVGV4dCh0ZXh0LCAwLCBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSwgZmluZE9w
dGlvbnMpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB3aGlsZSAoY3VycmVudEFj
dGl2ZU1hdGNoRnJhbWUgJiYgc3RhcnRGcmFtZSAhPSBjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSk7
CiAKLSAgICBtX2FjdGl2ZU1hdGNoID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+ZWRpdG9yKCkt
PmZpbmRTdHJpbmdBbmRTY3JvbGxUb1Zpc2libGUodGV4dCwgbV9hY3RpdmVNYXRjaC5nZXQoKSwg
ZmluZE9wdGlvbnMpOwotICAgIHNldE1hcmtlckFjdGl2ZShtX2FjdGl2ZU1hdGNoLmdldCgpLCB0
cnVlKTsKKyAgICBjbGVhclRleHRNYXRjaGVzKCk7CiAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5QYWdlU2VhcmNoTWFuYWdlcjo6c2hv
dWxkU2VhcmNoRm9yVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKHRleHQgPT0g
bV9hY3RpdmVTZWFyY2hTdHJpbmcpCisgICAgICAgIHJldHVybiBtX2FjdGl2ZU1hdGNoQ291bnQ7
CisKKyAgICAvLyBJZiB0aGUgcHJldmlvdXMgc2VhcmNoIHN0cmluZyBpcyBwcmVmaXggb2YgbmV3
IHNlYXJjaCBzdHJpbmcsCisgICAgLy8gZG9uJ3Qgc2VhcmNoIGlmIHRoZSBwcmV2aW91cyBvbmUg
aGFzIHplcm8gcmVzdWx0LgorICAgIGlmICghbV9hY3RpdmVNYXRjaENvdW50CisgICAgICAgICYm
IG1fYWN0aXZlU2VhcmNoU3RyaW5nLmxlbmd0aCgpCisgICAgICAgICYmIHRleHQubGVuZ3RoKCkg
PiBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgoKQorICAgICAgICAmJiBtX2FjdGl2ZVNlYXJj
aFN0cmluZyA9PSB0ZXh0LnN1YnN0cmluZygwLCBtX2FjdGl2ZVNlYXJjaFN0cmluZy5sZW5ndGgo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBJ
blBhZ2VTZWFyY2hNYW5hZ2VyOjpmaW5kQW5kTWFya1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBS
YW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSwgY29uc3QgRmluZE9wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9hY3RpdmVNYXRjaCA9IGZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZ0FuZFNjcm9s
bFRvVmlzaWJsZSh0ZXh0LCByYW5nZSwgb3B0aW9ucyk7CisgICAgaWYgKG1fYWN0aXZlTWF0Y2gp
IHsKKyAgICAgICAgc2V0TWFya2VyQWN0aXZlKG1fYWN0aXZlTWF0Y2guZ2V0KCksIHRydWUgLyog
YWN0aXZlICovKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKwogdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpjbGVhclRleHRNYXRjaGVzKCkKIHsK
ICAgICBtX3dlYlBhZ2UtPm1fcGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBtX2Fj
dGl2ZU1hdGNoID0gMDsKIH0KIAotdm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpzZXRNYXJrZXJB
Y3RpdmUoV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2ZSkKK3ZvaWQgSW5QYWdlU2Vh
cmNoTWFuYWdlcjo6c2V0TWFya2VyQWN0aXZlKFJhbmdlKiByYW5nZSwgYm9vbCBhY3RpdmUpCiB7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkNvcmU6OkRvY3VtZW50
KiBkb2MgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50
KiBkb2MgPSBtX2FjdGl2ZU1hdGNoLT5vd25lckRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2MpCiAg
ICAgICAgIHJldHVybjsKICAgICBkb2MtPm1hcmtlcnMoKS0+c2V0TWFya2Vyc0FjdGl2ZShyYW5n
ZSwgYWN0aXZlKTsKIH0KIAordm9pZCBJblBhZ2VTZWFyY2hNYW5hZ2VyOjpmcmFtZVVubG9hZGVk
KGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fYWN0aXZlTWF0Y2gpIHsKKyAgICAg
ICAgaWYgKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUgJiYgbV9hY3RpdmVTZWFyY2hT
dHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBtX2FjdGl2ZVNlYXJjaFN0cmluZyA9IFN0cmlu
ZygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRnJhbWUqIGN1cnJlbnRBY3RpdmVN
YXRjaEZyYW1lID0gbV9hY3RpdmVNYXRjaC0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IGlmIChjdXJyZW50QWN0aXZlTWF0Y2hGcmFtZSA9PSBmcmFtZSkgeworICAgICAgICBtX2FjdGl2
ZU1hdGNoID0gMDsKKyAgICAgICAgbV9hY3RpdmVTZWFyY2hTdHJpbmcgPSBTdHJpbmcoKTsKKyAg
ICAgICAgbV9hY3RpdmVNYXRjaENvdW50ID0gMDsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gbm90aWZ5IGNsaWVudCBoZXJlLgorICAgICAgICBpZiAoZnJhbWUgPT0gbV93ZWJQYWdlLT5t
YWluRnJhbWUoKSkgLy8gRG9uJ3QgbmVlZCB0byB1bm1hcmsgYmVjYXVzZSB0aGUgcGFnZSB3aWxs
IGJlIGRlc3Ryb3llZC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93ZWJQYWdlLT5t
X3BhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CisgICAgfQorfQorCiB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VTZWFyY2hN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblBhZ2VT
ZWFyY2hNYW5hZ2VyLmgKaW5kZXggMWY2YmJiNS4uNGIwNTYyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1h
bmFnZXIuaApAQCAtMTksMTIgKzE5LDEzIEBACiAjaWZuZGVmIEluUGFnZVNlYXJjaE1hbmFnZXJf
aAogI2RlZmluZSBJblBhZ2VTZWFyY2hNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIkZpbmRPcHRpb25z
LmgiCiAjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOwogY2xhc3MgUmFuZ2U7CitjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogfQogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBAIC0zOSwxMCAr
NDAsMTMgQEAgcHVibGljOgogICAgIH5JblBhZ2VTZWFyY2hNYW5hZ2VyKCk7CiAKICAgICBib29s
IGZpbmROZXh0U3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBmb3J3YXJkKTsKKyAgICB2
b2lkIGZyYW1lVW5sb2FkZWQoY29uc3QgV2ViQ29yZTo6RnJhbWUqKTsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGNsZWFyVGV4dE1hdGNoZXMoKTsKLSAgICB2b2lkIHNldE1hcmtlckFjdGl2ZShXZWJD
b3JlOjpSYW5nZSosIGJvb2wgYWN0aXZlKTsKKyAgICB2b2lkIHNldE1hcmtlckFjdGl2ZShXZWJD
b3JlOjpSYW5nZSosIGJvb2wpOworICAgIGJvb2wgZmluZEFuZE1hcmtUZXh0KGNvbnN0IFN0cmlu
ZyYsIFdlYkNvcmU6OlJhbmdlKiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpGaW5k
T3B0aW9ucyYpOworICAgIGJvb2wgc2hvdWxkU2VhcmNoRm9yVGV4dChjb25zdCBTdHJpbmcmKTsK
IAogICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiBtX2FjdGl2ZU1hdGNoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKaW5kZXggYzZhZWI0OS4uMTUyZGY5NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9J
bnB1dEhhbmRsZXIuY3BwCkBAIC03MTAsNyArNzEwLDcgQEAgdm9pZCBJbnB1dEhhbmRsZXI6OmVu
c3VyZUZvY3VzRWxlbWVudFZpc2libGUoYm9vbCBjZW50ZXJJblZpZXcpCiAgICAgICAgIGVuc3Vy
ZUZvY3VzVGV4dEVsZW1lbnRWaXNpYmxlKGNlbnRlckluVmlldyA/IENlbnRlckFsd2F5cyA6IENl
bnRlcklmTmVlZGVkKTsKIH0KIAotdm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoRnJh
bWUqIGZyYW1lKQordm9pZCBJbnB1dEhhbmRsZXI6OmZyYW1lVW5sb2FkZWQoY29uc3QgRnJhbWUq
IGZyYW1lKQogewogICAgIGlmICghaXNBY3RpdmVUZXh0RWRpdCgpKQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0
SGFuZGxlci5oCmluZGV4IDFiNjRhNzguLjBmNGNkZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5oCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vZGVGb2N1c2VkKFdlYkNvcmU6Ok5vZGUqKTsKICAg
ICB2b2lkIG5vZGVUZXh0Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkKCk7Ci0gICAgdm9pZCBmcmFtZVVubG9hZGVkKFdlYkNvcmU6OkZyYW1l
Kik7CisgICAgdm9pZCBmcmFtZVVubG9hZGVkKGNvbnN0IFdlYkNvcmU6OkZyYW1lKik7CiAKICAg
ICBib29sIGhhbmRsZUtleWJvYXJkSW5wdXQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06Oktl
eWJvYXJkRXZlbnQmLCBib29sIGNoYW5nZUlzUGFydE9mQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAK
LS0gCjEuNy41LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>