<?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>79167</bug_id>
          
          <creation_ts>2012-02-21 17:10:15 -0800</creation_ts>
          <short_desc>Expose a setting to exempt media playback from user gesture requirement after a user gesture is initiated on loading/playing a media</short_desc>
          <delta_ts>2012-02-27 11:59:26 -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>
          
          <blocked>66687</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Min Qin">qinmin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>561394</commentid>
    <comment_count>0</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-21 17:10:15 -0800</bug_when>
    <thetext>Expose a setting to exempt media playback from user gesture requirement after a user gesture is initiated on loading/playing a media</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561409</commentid>
    <comment_count>1</comment_count>
      <attachid>128092</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-21 17:26:51 -0800</bug_when>
    <thetext>Created attachment 128092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561514</commentid>
    <comment_count>2</comment_count>
      <attachid>128092</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 19:44:43 -0800</bug_when>
    <thetext>Comment on attachment 128092
Patch

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

You seem to be missing the changes to Source/WebKit/chromium/public, which is presumably useful to you.

&gt; ChangeLog:1
&gt; +2012-02-21  Min Qin  &lt;qinmin@google.com&gt;

This isn&apos;t the right ChangeLog file.  These comments should be in Source/WebCore/ChangeLog.  I wonder how you came to edit this file...  ./Tools/Scripts/prepare-ChangeLog should have edited the right file.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:261
&gt; +    if (document-&gt;settings() &amp;&amp; document-&gt;settings()-&gt;exemptUserGestureForPlaybackAfterInitiated())
&gt; +        m_userGestureExemptedForPlaybackAfterInitiated = true;
&gt; +    else
&gt; +        m_userGestureExemptedForPlaybackAfterInitiated = false;
&gt; +        

Why not just:

m_userGestureExemptedForPlaybackAfterInitiated = document-&gt;settings() &amp;&amp; document-&gt;settings()-&gt;exemptUserGestureForPlaybackAfterInitiated();

?

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2077
&gt; -    if (userGestureRequiredForRateChange() &amp;&amp; !ScriptController::processingUserGesture())
&gt; +    if (userGestureRequiredForRateChange() &amp;&amp; !ScriptController::processingUserGesture() &amp;&amp; !m_userGestureExempted)

Should userGestureRequiredForRateChange() read m_userGestureExempted rather than use reading it directly?

&gt; Source/WebCore/html/HTMLMediaElement.h:596
&gt; +    bool m_userGestureExemptedForPlaybackAfterInitiated: 1;
&gt; +    bool m_userGestureExempted: 1;

m_userGestureExemptedForPlaybackAfterInitiated doesn&apos;t seem to be initialized in the constructor.

I&apos;m not in love with these variable names.  Maybe....

m_userGestureExemptedForPlaybackAfterInitiated -&gt; m_shouldSkipUserGestureChecksAfterFirstUserGesture
m_userGestureExempted -&gt; m_skipUserGestureChecks

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561541</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-02-21 20:23:24 -0800</bug_when>
    <thetext>What&apos;s the use case here? I thought we lifted the restriction once we got a user gesture anyway. Or is this for loading subsequent media?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561552</commentid>
    <comment_count>4</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-21 20:38:51 -0800</bug_when>
    <thetext>No, we do not lift the restriction in HTMLMediaElement. 
So if I build chrome with requireUserGestureForMediaPlayback settings on, I have to manually click on the play and pause button to play and pause the media, even if the media is loaded through user gesture.
There is no place we called removeBehaviorRestriction() in chromium.
  
(In reply to comment #3)
&gt; What&apos;s the use case here? I thought we lifted the restriction once we got a user gesture anyway. Or is this for loading subsequent media?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561601</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-21 21:58:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; No, we do not lift the restriction in HTMLMediaElement. 
&gt; So if I build chrome with requireUserGestureForMediaPlayback settings on, I have to manually click on the play and pause button to play and pause the media, even if the media is loaded through user gesture.
&gt; There is no place we called removeBehaviorRestriction() in chromium.
&gt; 
I think we should just clear m_restrictions if loading or playback is initiated by a user gesture. I would suggest adding a function like this:

    void HTMLMediaElement::userRequestsMediaLoading()
    {
        // The user is requesting data loading and/or playback, so remove the &quot;only change playback in response
        // to a user gesture&quot; restriction on this movie.
        m_restrictions = NoRestrictions;
    }
    
 and then this:

    if (ScriptController::processingUserGesture())
        userRequestsMediaLoading();

to play() and load(), and you won&apos;t need any of the rest of your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561604</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-21 22:02:21 -0800</bug_when>
    <thetext>&gt; (In reply to comment #4)
&gt; to play() and load(), and you won&apos;t need any of the rest of your patch.

You will, however, still need to write a layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561605</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-21 22:04:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think we should just clear m_restrictions if loading or playback is initiated by a user gesture.

What about RequirePageConsentToLoadMediaRestriction?  Should be more discriminating about which restrictions we clear?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561609</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-21 22:06:47 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; I think we should just clear m_restrictions if loading or playback is initiated by a user gesture.
&gt; 
&gt; What about RequirePageConsentToLoadMediaRestriction?  Should be more discriminating about which restrictions we clear?

I don&apos;t think so, because calling play() when nothing is loaded implicitly calls load().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561612</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-21 22:14:37 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; I think we should just clear m_restrictions if loading or playback is initiated by a user gesture.
&gt; &gt; 
&gt; &gt; What about RequirePageConsentToLoadMediaRestriction?  Should be more discriminating about which restrictions we clear?
&gt; 
&gt; I don&apos;t think so, because calling play() when nothing is loaded implicitly calls load().

And RequireUserGestureForFullscreenRestriction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561617</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-21 22:23:18 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; I think we should just clear m_restrictions if loading or playback is initiated by a user gesture.
&gt; &gt; &gt; 
&gt; &gt; &gt; What about RequirePageConsentToLoadMediaRestriction?  Should be more discriminating about which restrictions we clear?
&gt; &gt; 
&gt; &gt; I don&apos;t think so, because calling play() when nothing is loaded implicitly calls load().
&gt; 
&gt; And RequireUserGestureForFullscreenRestriction?

Yes. The user is explicitly requesting playback and loading, so I think all restriction should be relaxed. This what we do on iOS FWIW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561661</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-21 23:25:59 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; &gt; I think we should just clear m_restrictions if loading or playback is initiated by a user gesture.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; What about RequirePageConsentToLoadMediaRestriction?  Should be more discriminating about which restrictions we clear?
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think so, because calling play() when nothing is loaded implicitly calls load().
&gt; &gt; 
&gt; &gt; And RequireUserGestureForFullscreenRestriction?
&gt; 
&gt; Yes. The user is explicitly requesting playback and loading, so I think all restriction should be relaxed. This what we do on iOS FWIW.

Wouldn&apos;t this break the intended behavior for ports who set only RequireUserGestureForFullscreenRestriction?  (Not that there necessarily are any, but...)  I&apos;m just saying that this change could introduce all kinds of unintended side-effects, not just for the current set of restrictions, but especially if any are added in the future.

Plus, isn&apos;t it a bit weird that, with this change, causing a load with a user gesture will clear the full screen restriction, but actually clicking a full screen button won&apos;t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561930</commentid>
    <comment_count>12</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-22 06:36:05 -0800</bug_when>
    <thetext>Maybe we should single out fullscreen restriction?
Another question is that autoplay seems to be an exception against the requireUserGestureForMediaPlayerback. Should we also put a check into the autoplay() function to to return false when the restriction is set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562711</commentid>
    <comment_count>13</comment_count>
      <attachid>128371</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-22 19:30:09 -0800</bug_when>
    <thetext>Created attachment 128371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562716</commentid>
    <comment_count>14</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-22 19:36:11 -0800</bug_when>
    <thetext>Uploaded a new patch according to Eric&apos;s suggestion. 
When user gesture is involved in loading/playing a video, I think remove RequireUserGestureForFullscreenRestriction is reasonable. 
There are some sites that will call enterfullscreen when I hit the play button, (Youtube and vimeo mobile sites, for example). However, when the media finishes, if they call exitfullscreen then it never works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563127</commentid>
    <comment_count>15</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-23 08:28:39 -0800</bug_when>
    <thetext>This change definitely needs a layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563606</commentid>
    <comment_count>16</comment_count>
      <attachid>128583</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-23 16:00:51 -0800</bug_when>
    <thetext>Created attachment 128583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563621</commentid>
    <comment_count>17</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-23 16:05:14 -0800</bug_when>
    <thetext>Ok, layout test added.
Since we don&apos;t have any layout test for userGestureRequiredForRateChange before, this one should change that situation :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563958</commentid>
    <comment_count>18</comment_count>
      <attachid>128583</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 22:59:55 -0800</bug_when>
    <thetext>Comment on attachment 128583
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4057
&gt; +void HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture()
&gt; +{
&gt; +    m_restrictions = NoRestrictions;
&gt; +}

I&apos;m trying to understand whether we&apos;re removing too many restrictions here.  I need to re-read the bug thread.

&gt; Source/WebCore/html/HTMLMediaElement.h:479
&gt; +    // Remove behavior restrictions after user requested load/play

I would skip this comment.  It&apos;s pretty redundant with the name of the method.

&gt; LayoutTests/media/video-play-require-user-gesture.html:10
&gt; +            if (window.internals) 
&gt; +	        window.internals.setMediaPlaybackRequiresUserGesture(document, true);

Looks like there&apos;s some problem with you indent here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563961</commentid>
    <comment_count>19</comment_count>
      <attachid>128583</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 23:01:59 -0800</bug_when>
    <thetext>Comment on attachment 128583
Patch

Ok, this feels like we&apos;re being slightly aggressive in removing these restrictions, but it sounds like folks on the thread are in agreement that this is the right thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564370</commentid>
    <comment_count>20</comment_count>
      <attachid>128745</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-24 09:17:30 -0800</bug_when>
    <thetext>Created attachment 128745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564371</commentid>
    <comment_count>21</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-24 09:18:46 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 128583 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128583&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:4057
&gt; &gt; +void HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture()
&gt; &gt; +{
&gt; &gt; +    m_restrictions = NoRestrictions;
&gt; &gt; +}
&gt; 
&gt; I&apos;m trying to understand whether we&apos;re removing too many restrictions here.  I need to re-read the bug thread.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:479
&gt; &gt; +    // Remove behavior restrictions after user requested load/play
&gt; 
&gt; I would skip this comment.  It&apos;s pretty redundant with the name of the method.

Done, comments removed.

&gt; 
&gt; &gt; LayoutTests/media/video-play-require-user-gesture.html:10
&gt; &gt; +            if (window.internals) 
&gt; &gt; +	        window.internals.setMediaPlaybackRequiresUserGesture(document, true);
&gt; 
&gt; Looks like there&apos;s some problem with you indent here.

Removed the offending tab and fixed the indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564405</commentid>
    <comment_count>22</comment_count>
      <attachid>128745</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-24 09:57:52 -0800</bug_when>
    <thetext>Comment on attachment 128745
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564509</commentid>
    <comment_count>23</comment_count>
      <attachid>128745</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 11:35:43 -0800</bug_when>
    <thetext>Comment on attachment 128745
Patch

Clearing flags on attachment: 128745

Committed r108831: &lt;http://trac.webkit.org/changeset/108831&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564511</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 11:35:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565787</commentid>
    <comment_count>25</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 10:24:22 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; All reviewed patches have been landed.  Closing bug.

It seems this patch made the media tests on GTK (at least) very flaky. They seem to timeout on first pass and pass fine on second pass. Any hint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565803</commentid>
    <comment_count>26</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-27 10:41:43 -0800</bug_when>
    <thetext>Which test is timing out? Is that the test in this change or tests already exists in WebKit?
It looks to me there were no media tests that used eventSender to emulate user gesture before this change is submitted. All the other media tests should support video.load(), and video.play() without any user interaction. So I doubt whether this change will have any impact on other media tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565841</commentid>
    <comment_count>27</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-27 11:20:47 -0800</bug_when>
    <thetext>Sorry, I made a mistake in my previous comment.
There are some tests that are using eventSender. But this change should not affect them.
Here is a list of media tests that rely on eventSender:

These tests do not click the play button, so nothing should happen after user gesture:
audio-delete-while-slider-thumb-clicked.html.
controls-drag-timebar.html
controls-right-click-on-timebar.html
video-volume-slider.html
video-mouse-focus.html
crash-closing-page-with-media-as-plugin-fallback.html
context-menu-actions.html
audio-delete-while-step-button-clicked.html
media-fullscreen-inline.html
media-fullscreen-not-in-document.html

These tests clicks on the play button, however, they just check whether the media is not paused afterwards:
video-controls-transformed.html
video-controls-visible-audio-only.html
video-controls-zoomed.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565857</commentid>
    <comment_count>28</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 11:37:02 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Sorry, I made a mistake in my previous comment.
&gt; There are some tests that are using eventSender. But this change should not affect them.
&gt; Here is a list of media tests that rely on eventSender:
&gt; 
&gt; These tests do not click the play button, so nothing should happen after user gesture:
&gt; audio-delete-while-slider-thumb-clicked.html.
&gt; controls-drag-timebar.html
&gt; controls-right-click-on-timebar.html
&gt; video-volume-slider.html
&gt; video-mouse-focus.html
&gt; crash-closing-page-with-media-as-plugin-fallback.html
&gt; context-menu-actions.html
&gt; audio-delete-while-step-button-clicked.html
&gt; media-fullscreen-inline.html
&gt; media-fullscreen-not-in-document.html
&gt; 
&gt; These tests clicks on the play button, however, they just check whether the media is not paused afterwards:
&gt; video-controls-transformed.html
&gt; video-controls-visible-audio-only.html
&gt; video-controls-zoomed.html

You can see the list of flaky tests there:
http://build.webkit.org/results/GTK%20Linux%2064-bit%20Release/r109009%20(18855)/results.html

I wonder, though. Could the new test affect the test environment so that the tests executed after it run differently? That would explain the flakiness.
For instance I see the new test does:

window.internals.setMediaPlaybackRequiresUserGesture(document, true);

but doesn&apos;t seem to revert that before ending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565869</commentid>
    <comment_count>29</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2012-02-27 11:59:26 -0800</bug_when>
    <thetext>Good catch, could be possibly related if the tests are within the same window.

created a fix here: https://bugs.webkit.org/show_bug.cgi?id=79690</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128092</attachid>
            <date>2012-02-21 17:26:51 -0800</date>
            <delta_ts>2012-02-22 19:30:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79167-20120221172650.patch</filename>
            <type>text/plain</type>
            <size>19474</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwODQx
NikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAy
LTIxICBNaW4gUWluICA8cWlubWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgV2Vi
UHJlZmVyZW5jZSBmb3IgZXhlbXB0aW5nIHVzZXIgZ2VzdHVyZSBmb3IgbWVkaWEgcGxheWJhY2sg
YWZ0ZXIgdXNlciBnZXN0dXJlIGlzIGluaXRpYXRlZAorCisgICAgICAgIEN1cnJlbnQgcHJlZmVy
ZW5jZSBzZXR0aW5ncyBvbiByZXF1aXJpbmcgdXNlciBnZXN0dXJlIGZvciBwbGF5YmFjayBoYXZl
IHRvbyBtYW55IGxpbWl0cy4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGFmdGVyIGNsaWNraW5nIHRo
ZSBwbGF5IGJ1dHRvbiB0byBwbGF5IGEgdmlkZW8sIGphdmFzY3JpcHQgY2FsbHMgdG8KKyAgICAg
ICAgdmlkZW8ucGF1c2UoKSB3aWxsIG5vdCB3b3JrLiBPbiBtb2JpbGUgZGV2aWNlcywgd2Ugd2lz
aCB0aGVzZSBqYXZhc2NyaXB0IGNhbGxzIHRvCisgICAgICAgIHN0aWxsIHdvcmssIGFmdGVyIGFu
IGluaXRpYWwgdXNlciBnZXN0dXJlIGlzIGludm9sdmVkIGluIGxvYWRpbmcvcGxheWluZy9wYXVz
aW5nIHRoZSBtZWRpYS4KKworICAgICAgICBNZWRpYSBwbGF5YmFjayB3aXRoIG9yIHdpdGhvdXQg
dXNlciBnZXN0dXJlIGhhdmUgYWxyZWFkeSBiZWVuIHRlc3RlZC4gVGhpcyBjaGFuZ2UganVzdCBl
eHBvc2VzCisgICAgICAgIGEgc2V0dGluZyB0byBleGVtcHQgdXNlciBnZXN0dXJlIGFmdGVyIHRo
ZSBmaXJzdCBvbmUuIFNvIG5vIG5ldyB0ZXN0IGlzIGluY2x1ZGVkLgorICAgICAgICBJZiB0aGUg
Y3VycmVudCB1c2VyIGdlc3R1cmUgcmVxdWlyZW1lbnQgc2V0dGluZyBmb3IgbWVkaWEgcGxheWJh
Y2sgYWxzbyBhc3N1bWUgYSBzaW1pbGFyIGJlaGF2aW9yCisgICAgICAgIGFzIHByb3Bvc2VkIGlu
IHRoaXMgY2hhbmdlLCBJIHdpbGwgYmUgZ2xhZCB0byBjb21iaW5lIHRoaXMgc2V0dGluZyB3aXRo
IHRoZSBjdXJyZW50IG9uZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHA6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
Lmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHA6Cisg
ICAgICAgICogLi4vLi4vU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oOgorICAgICAgICAq
IC4uLy4uL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
Lmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlcy5tbToKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKiAuLi8uLi9Tb3VyY2UvV2ViS2l0L3dpbi9JbnRl
cmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsOgorICAgICAgICAqIC4uLy4uL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIC4uLy4u
L1NvdXJjZS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKiAuLi8uLi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIC4uLy4uL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogLi4vLi4vU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAqIC4uLy4u
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgor
ICAgICAgICAqIC4uLy4uL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKwogMjAxMi0wMi0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBwZXJmLW8tbWF0aWM6IEV4dHJhY3QgbG9naWMgdG8gZ2VuZXJhdGUgSlNPTiByZXNw
b25zZXMgYXMgY2xhc3NlcyB0byB1bml0IHRlc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTA4NDA4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw3
IEBAIEhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQoY29uc3QKICAgICAsIG1fY29t
cGxldGVseUxvYWRlZChmYWxzZSkKICAgICAsIG1faGF2ZVByZXBhcmVkVG9QbGF5KGZhbHNlKQog
ICAgICwgbV9wYXJzaW5nSW5Qcm9ncmVzcyhjcmVhdGVkQnlQYXJzZXIpCisgICAgLCBtX3VzZXJH
ZXN0dXJlRXhlbXB0ZWQoZmFsc2UpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgICwgbV90
cmFja3NBcmVSZWFkeSh0cnVlKQogICAgICwgbV9oYXZlVmlzaWJsZVRleHRUcmFjayhmYWxzZSkK
QEAgLTI1Miw2ICsyNTMsMTIgQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChj
b25zdAogICAgIAogICAgIGlmIChkb2N1bWVudC0+c2V0dGluZ3MoKSAmJiBkb2N1bWVudC0+c2V0
dGluZ3MoKS0+bWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSkKICAgICAgICAgYWRk
QmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JSYXRlQ2hhbmdlUmVzdHJp
Y3Rpb24pOworICAgIAorICAgIGlmIChkb2N1bWVudC0+c2V0dGluZ3MoKSAmJiBkb2N1bWVudC0+
c2V0dGluZ3MoKS0+ZXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKCkp
CisgICAgICAgIG1fdXNlckdlc3R1cmVFeGVtcHRlZEZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQg
PSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV91c2VyR2VzdHVyZUV4ZW1wdGVkRm9yUGxheWJh
Y2tBZnRlckluaXRpYXRlZCA9IGZhbHNlOworICAgICAgICAKIAogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCiAgICAgbV9tZWRpYVNvdXJjZVVSTC5zZXRQcm90b2NvbChtZWRpYVNvdXJjZVVSTFBy
b3RvY29sKTsKQEAgLTYxMyw2ICs2MjAsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQo
RXhjZXB0aW9uQ29kCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgZWxzZSB7
CiAgICAgICAgIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUgPSBTY3JpcHRDb250cm9sbGVy
Ojpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgaWYgKG1fdXNlckdlc3R1cmVFeGVt
cHRlZEZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQpCisgICAgICAgICAgICBtX3VzZXJHZXN0dXJl
RXhlbXB0ZWQgfD0gbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2VzdHVyZTsKICAgICAgICAgcHJlcGFy
ZUZvckxvYWQoKTsKICAgICAgICAgbG9hZEludGVybmFsKCk7CiAgICAgfQpAQCAtMjA2NSw4ICsy
MDc0LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAgICAgTE9HKE1lZGlh
LCAiSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpIik7CiAKLSAgICBpZiAodXNlckdlc3R1cmVSZXF1
aXJlZEZvclJhdGVDaGFuZ2UoKSAmJiAhU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkpCisgICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JSYXRlQ2hhbmdlKCkgJiYg
IVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpICYmICFtX3VzZXJHZXN0
dXJlRXhlbXB0ZWQpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAobV91c2VyR2VzdHVyZUV4ZW1w
dGVkRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZCkKKyAgICAgICAgbV91c2VyR2VzdHVyZUV4ZW1w
dGVkIHw9IFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogCiAgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoc2V0
dGluZ3MgJiYgc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgJiYgbV9kaXNwYXRj
aGluZ0NhblBsYXlFdmVudCAmJiAhbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2VzdHVyZSkgewpAQCAt
MjExNyw4ICsyMTI4LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2UoKQogewogICAg
IExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlKCkiKTsKIAotICAgIGlmICh1c2Vy
R2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5nZSgpICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICBpZiAodXNlckdlc3R1cmVSZXF1aXJlZEZvclJhdGVD
aGFuZ2UoKSAmJiAhU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgJiYg
IW1fdXNlckdlc3R1cmVFeGVtcHRlZCkKICAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3VzZXJH
ZXN0dXJlRXhlbXB0ZWRGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKQorICAgICAgICBtX3VzZXJH
ZXN0dXJlRXhlbXB0ZWQgfD0gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCk7CiAKICAgICBwYXVzZUludGVybmFsKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTA4NDA4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Miw2ICs1OTIsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1faGF2
ZVByZXBhcmVkVG9QbGF5IDogMTsKICAgICBib29sIG1fcGFyc2luZ0luUHJvZ3Jlc3MgOiAxOwor
ICAgIGJvb2wgbV91c2VyR2VzdHVyZUV4ZW1wdGVkRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZDog
MTsKKyAgICBib29sIG1fdXNlckdlc3R1cmVFeGVtcHRlZDogMTsKIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBib29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDEwODQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDcgQEAgU2V0dGluZ3M6
OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX3VzZUhpeGllNzZXZWJTb2NrZXRQcm90b2Nv
bCh0cnVlKQogI2VuZGlmCiAgICAgLCBtX21lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJl
KGZhbHNlKQorICAgICwgbV9leGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0
ZWQoZmFsc2UpCiAgICAgLCBtX21lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUodHJ1ZSkKICAgICAs
IG1fcGFzc3dvcmRFY2hvRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc3VwcHJlc3NJbmNyZW1lbnRh
bFJlbmRlcmluZyhmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDEw
ODQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDc3LDYgKzQ3Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRN
ZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShib29sIGZsYWcpIHsgbV9tZWRpYVBsYXli
YWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9IGZsYWc7IH07CiAgICAgICAgIGJvb2wgbWVkaWFQbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUGxheWJhY2tS
ZXF1aXJlc1VzZXJHZXN0dXJlOyB9CiAKKyAgICAgICAgdm9pZCBzZXRFeGVtcHRVc2VyR2VzdHVy
ZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQoYm9vbCBmbGFnKSB7IG1fZXhlbXB0VXNlckdlc3R1
cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkID0gZmxhZzsgfTsKKyAgICAgICAgYm9vbCBleGVt
cHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2V4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZDsgfQorCiAgICAgICAg
IHZvaWQgc2V0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZShib29sIGZsYWcpIHsgbV9tZWRpYVBs
YXliYWNrQWxsb3dzSW5saW5lID0gZmxhZzsgfTsKICAgICAgICAgYm9vbCBtZWRpYVBsYXliYWNr
QWxsb3dzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVBsYXliYWNrQWxsb3dzSW5saW5l
OyB9CiAKQEAgLTY2NCw2ICs2NjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgbV91c2VIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2wgOiAxOwogI2VuZGlmCiAgICAgICAgIGJv
b2wgbV9tZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA6IDE7CisgICAgICAgIGJvb2wg
bV9leGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQgOiAxOwogICAgICAg
ICBib29sIG1fbWVkaWFQbGF5YmFja0FsbG93c0lubGluZSA6IDE7CiAgICAgICAgIGJvb2wgbV9w
YXNzd29yZEVjaG9FbmFibGVkIDogMTsKICAgICAgICAgYm9vbCBtX3N1cHByZXNzSW5jcmVtZW50
YWxSZW5kZXJpbmcgOiAxOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXNTdG9yZS5oCShyZXZpc2lvbiAxMDg0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogICAgIG1hY3JvKEFWRm91bmRhdGlvbkVuYWJsZWQsIGlzQVZGb3Vu
ZGF0aW9uRW5hYmxlZCwgQm9vbCwgYm9vbCwgREVGQVVMVF9XRUJLSVRfQVZGT1VOREFUSU9OX0VO
QUJMRUQpIFwKICAgICBtYWNybyhIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkLCBoaXhp
ZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIG1h
Y3JvKE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlLCBtZWRpYVBsYXliYWNrUmVxdWly
ZXNVc2VyR2VzdHVyZSwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhFeGVtcHRVc2Vy
R2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQsIGV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxh
eWJhY2tBZnRlckluaXRpYXRlZCwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKICAgICBtYWNybyhNZWRp
YVBsYXliYWNrQWxsb3dzSW5saW5lLCBtZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lLCBCb29sLCBi
b29sLCB0cnVlKSBcCiAgICAgbWFjcm8oSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQsIGluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFjcm8oU2hvd3NUb29s
VGlwT3ZlclRydW5jYXRlZFRleHQsIHNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRUZXh0LCBCb29s
LCBib29sLCBmYWxzZSkgXApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMTA4NDA4KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MjgsNiArNjI4LDE2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhUGxheWJhY2tSZXF1aXIK
ICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFQbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUoKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0RXhlbXB0VXNlckdlc3R1
cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZmxhZykKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRFeGVtcHRV
c2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQoZmxhZyk7Cit9CisKK2Jvb2wgV0tQ
cmVmZXJlbmNlc0dldEV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5leGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQo
KTsKK30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZShX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7CiAgICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZShmbGFnKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAxMDg0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYg
KzE1MSwxMCBAQCBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0SGl4aWU3NldlCiBXS19F
WFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKTsKIFdLX0VYUE9S
VCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2Uu
CitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5
YmFja0FmdGVySW5pdGlhdGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZmxhZyk7CitXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RXhlbXB0VXNlckdlc3R1cmVG
b3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYp
OworCiAvLyBEZWZhdWx0cyB0byB0cnVlLgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBmbGFnKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYVBsYXli
YWNrQWxsb3dzSW5saW5lKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpOwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNp
b24gMTA4NDA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODg5LDYgKzE4ODksNyBAQCB2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0dGluZ3MtPnNldENTU1JlZ2lvbnNFbmFi
bGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Y3NzUmVnaW9u
c0VuYWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRXZWJHTEVuYWJsZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp3ZWJHTEVuYWJsZWRLZXkoKSkpOwog
ICAgIHNldHRpbmdzLT5zZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlS2V5KCkpKTsKKyAgICBzZXR0aW5ncy0+c2V0RXhlbXB0VXNlckdlc3R1cmVG
b3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6ZXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkS2V5
KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZShzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Om1lZGlhUGxheWJhY2tBbGxvd3NJ
bmxpbmVLZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoc3Rv
cmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojptb2NrU2Nyb2xsYmFyc0Vu
YWJsZWRLZXkoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VLZXlzUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHJldmlzaW9uIDEwODQwOCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw2ICsxMTIsNyBAQAogI2RlZmluZSBXZWJLaXRBVkZvdW5kYXRpb25FbmFi
bGVkS2V5IEAiV2ViS2l0QVZGb3VuZGF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SGl4aWU3
NldlYlNvY2tldFByb3RvY29sRW5hYmxlZEtleSBAIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90
b2NvbEVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlUHJlZmVyZW5jZUtleSBAIldlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJl
IgorI2RlZmluZSBXZWJLaXRFeGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0
ZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVy
SW5pdGlhdGVkIgogI2RlZmluZSBXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lUHJlZmVy
ZW5jZUtleSBAIldlYktpdE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUiCiAjZGVmaW5lIFdlYktp
dE1vY2tTY3JvbGxiYXJzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFNob3VsZERpc3BsYXlTdWJ0aXRsZXNQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0U2hvdWxkRGlzcGxheVN1YnRpdGxlcyIKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gMTA4NDA4KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzg3LDYgKzM4Nyw3IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdEFWRm91bmRhdGlvbkVuYWJsZWRLZXksCiAgICAg
ICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpOT10sICBXZWJLaXRIaXhpZTc2V2ViU29ja2V0
UHJvdG9jb2xFbmFibGVkS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCAgIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlUHJlZmVyZW5jZUtleSwK
KyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRFeGVtcHRVc2Vy
R2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgIFdlYktpdE1lZGlhUGxheWJhY2tBbGxvd3NJ
bmxpbmVQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCAgIFdlYktpdFdlYkF1ZGlvRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpOT10sICAgV2ViS2l0U3VwcHJlc3NJbmNyZW1lbnRhbFJlbmRlcmlu
Z0tleSwKQEAgLTE1NTEsNiArMTU1MiwxNiBAQCAtICh2b2lkKXNldE1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRN
ZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZVByZWZlcmVuY2VLZXldOwogfQogCistIChC
T09MKWV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZAoreworICAgIHJl
dHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxh
eWJhY2tBZnRlckluaXRpYXRlZFByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldEV4ZW1w
dFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZDooQk9PTClmbGFnCit7CisgICAg
W3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRFeGVtcHRVc2VyR2VzdHVyZUZv
clBsYXliYWNrQWZ0ZXJJbml0aWF0ZWRQcmVmZXJlbmNlS2V5XTsKK30KKwogLSAoQk9PTCltZWRp
YVBsYXliYWNrQWxsb3dzSW5saW5lCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JL
ZXk6V2ViS2l0TWVkaWFQbGF5YmFja0FsbG93c0lubGluZVByZWZlcmVuY2VLZXldOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5o
CShyZXZpc2lvbiAxMDg0MDgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDkgQEAgQGludGVy
ZmFjZSBXZWJQcmVmZXJlbmNlcyAoV2ViUHJpdmF0ZSkKIC0gKHZvaWQpc2V0TWVkaWFQbGF5YmFj
a1JlcXVpcmVzVXNlckdlc3R1cmU6KEJPT0wpZmxhZzsKIC0gKEJPT0wpbWVkaWFQbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmU7CiAKKy0gKHZvaWQpc2V0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5
YmFja0FmdGVySW5pdGlhdGVkOihCT09MKWZsYWc7CistIChCT09MKWV4ZW1wdFVzZXJHZXN0dXJl
Rm9yUGxheWJhY2tBZnRlckluaXRpYXRlZDsKKwogLSAodm9pZClzZXRNZWRpYVBsYXliYWNrQWxs
b3dzSW5saW5lOihCT09MKWZsYWc7CiAtIChCT09MKW1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDEwODQw
OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTUwNiw2ICsxNTA2LDcgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQ
cmVmZXJlbgogICAgIHNldHRpbmdzLT5zZXRVc2VIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2woW3By
ZWZlcmVuY2VzIGlzSGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZF0pOwogI2VuZGlmCiAg
ICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKFtwcmVmZXJl
bmNlcyBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZV0pOworICAgIHNldHRpbmdzLT5z
ZXRFeGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWQoW3ByZWZlcmVuY2Vz
IGV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZF0pOwogICAgIHNldHRp
bmdzLT5zZXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lKFtwcmVmZXJlbmNlcyBtZWRpYVBsYXli
YWNrQWxsb3dzSW5saW5lXSk7CiAgICAgc2V0dGluZ3MtPnNldFN1cHByZXNzSW5jcmVtZW50YWxS
ZW5kZXJpbmcoW3ByZWZlcmVuY2VzIHN1cHByZXNzSW5jcmVtZW50YWxSZW5kZXJpbmddKTsKICAg
ICBzZXR0aW5ncy0+c2V0QmFja3NwYWNlS2V5TmF2aWdhdGlvbkVuYWJsZWQoW3ByZWZlcmVuY2Vz
IGJhY2tzcGFjZUtleU5hdmlnYXRpb25FbmFibGVkXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAkocmV2aXNpb24gMTA4NDA4KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1OSw2ICsxNTksOCBAQAogCiAjZGVmaW5lIFdlYktpdE1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlUHJlZmVyZW5jZUtleSAiV2ViS2l0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNl
ckdlc3R1cmUiCiAKKyNkZWZpbmUgV2ViS2l0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0Fm
dGVySW5pdGlhdGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5
YmFja0FmdGVySW5pdGlhdGVkIgorCiAjZGVmaW5lIFdlYktpdE1lZGlhUGxheWJhY2tBbGxvd3NJ
bmxpbmVQcmVmZXJlbmNlS2V5ICJXZWJLaXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lIgogCiAj
ZGVmaW5lIFdlYktpdEFWRm91bmRhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRBVkZv
dW5kYXRpb25FbmFibGVkIgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcAko
cmV2aXNpb24gMTA4NDA4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6
aW5pdGlhbGl6ZURlZmF1bHRTZQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBD
RlNUUihXZWJLaXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0TWVkaWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmVQcmVmZXJlbmNlS2V5
KSwga0NGQm9vbGVhbkZhbHNlKTsKKyAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkUHJl
ZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUo
ZGVmYXVsdHMsIENGU1RSKFdlYktpdE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmVQcmVmZXJlbmNl
S2V5KSwga0NGQm9vbGVhblRydWUpOwogCiAgICAgZGVmYXVsdFNldHRpbmdzID0gZGVmYXVsdHM7
CkBAIC05OTAsNiArOTkxLDIwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViUHJlZmVy
ZW5jZXMKICAgICByZXR1cm4gU19PSzsKIH0KIAorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJQcmVmZXJlbmNlczo6c2V0RXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlh
dGVkKAorICAgIC8qIFtpbl0gKi8gQk9PTCBlbmFibGVkKQoreworICAgIHNldEJvb2xWYWx1ZShD
RlNUUihXZWJLaXRFeGVtcHRVc2VyR2VzdHVyZUZvclBsYXliYWNrQWZ0ZXJJbml0aWF0ZWRQcmVm
ZXJlbmNlS2V5KSwgZW5hYmxlZCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViUHJlZmVyZW5jZXM6OmV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJh
Y2tBZnRlckluaXRpYXRlZCgKKyAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIGVuYWJsZWQp
Cit7CisgICAgKmVuYWJsZWQgPSBib29sVmFsdWVGb3JLZXkoQ0ZTVFIoV2ViS2l0RXhlbXB0VXNl
ckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkUHJlZmVyZW5jZUtleSkpOworICAgIHJl
dHVybiBTX09LOworfQorCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlByZWZlcmVuY2Vz
OjpzZXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lKAogICAgIC8qIFtpbl0gKi8gQk9PTCBlbmFi
bGVkKQogewpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5oCShyZXZpc2lvbiAxMDg0
MDgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NjIsNiArNDYyLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShCT09MKik7CiAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldE1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlKEJPT0wpOwogCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIGV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZChCT09MKik7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEV4ZW1wdFVzZXJHZXN0dXJl
Rm9yUGxheWJhY2tBZnRlckluaXRpYXRlZChCT09MKTsKKwogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBtZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lKEJPT0wqKTsKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0TWVkaWFQbGF5YmFja0FsbG93c0lu
bGluZShCT09MKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDEwODQwOCkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTM0
LDYgKzQ5MzQsMTEgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZQog
ICAgICAgICByZXR1cm4gaHI7CiAgICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlKGVuYWJsZWQpOwogCisgICAgaHIgPSBwcmVmc1ByaXZhdGUtPmV4ZW1wdFVz
ZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZCgmZW5hYmxlZCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKyAgICBzZXR0aW5ncy0+c2V0RXhlbXB0VXNl
ckdlc3R1cmVGb3JQbGF5YmFja0FmdGVySW5pdGlhdGVkKGVuYWJsZWQpOworCiAgICAgaHIgPSBw
cmVmc1ByaXZhdGUtPm1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoJmVuYWJsZWQpOwogICAgIGlm
IChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwJKHJl
dmlzaW9uIDEwODQwOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0ludGVyZmFjZXMvSVdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsOSBAQCBpbnRl
cmZhY2UgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZSA6IElVbmtuCiAgICAgSFJFU1VMVCBzZXRNZWRp
YVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShbaW5dIEJPT0wpOwogICAgIEhSRVNVTFQgbWVk
aWFQbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoW291dCwgcmV0dmFsXSBCT09MKik7CiAKKyAg
ICBIUkVTVUxUIHNldEV4ZW1wdFVzZXJHZXN0dXJlRm9yUGxheWJhY2tBZnRlckluaXRpYXRlZChb
aW5dIEJPT0wpOworICAgIEhSRVNVTFQgZXhlbXB0VXNlckdlc3R1cmVGb3JQbGF5YmFja0FmdGVy
SW5pdGlhdGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOworCiAgICAgSFJFU1VMVCBzZXRNZWRpYVBs
YXliYWNrQWxsb3dzSW5saW5lKFtpbl0gQk9PTCk7CiAgICAgSFJFU1VMVCBtZWRpYVBsYXliYWNr
QWxsb3dzSW5saW5lKFtvdXQsIHJldHZhbF0gQk9PTCopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128371</attachid>
            <date>2012-02-22 19:30:09 -0800</date>
            <delta_ts>2012-02-23 16:00:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79167-20120222193008.patch</filename>
            <type>text/plain</type>
            <size>3108</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJiZWY1YmVjOTZhZTg0
NzNlYjQ1NWE2ZDMyZDhmZGE5NDU1MmQ2Mi4uNzIzMzVlYzIwNjExMDNmNGIxNDZhMTE5ZDZiZmU4
ZjFlYjM2MjY3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAyLTIyICBNaW4g
UWluICA8cWlubWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgYmVoYXZp
b3IgcmVzdHJpY3Rpb24gYWZ0ZXIgdXNlciBnZXN0dXJlIGlzIGluaXRpYXRlZCBvbiBsb2FkaW5n
L3BsYXlpbmcgYSBtZWRpYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzkxNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHRlc3RzIGFzIGl0IG9ubHkg
Y2hhbmdlcyBob3cgc2V0dGluZ3Mgc2hvdWxkIHdvcmsuCisKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9h
ZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yc1Jlc3RyaWN0aW9uc0Fm
dGVyRmlyc3RVc2VyR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxNZWRpYUVsZW1lbnQpOgorCiAyMDEy
LTAyLTIyICBBbmRyZWFzIEtsaW5nICA8YXdlc29tZWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBNYWtlIHBhcnNpbmcgY29sb3IgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMgZG8gbGVzcyBwb2lu
dGxlc3Mgd29yay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4
IDJlYjJhOWJmZGY4M2I5YWQyOWZkNDRhYmIxMWIxZDVmYmRlZGQ4MjAuLjg2ODM2YmRiMGE4OWMy
YmRmYWFjYjgwZWFiZGNiOGQ0YjU1NzA5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcApAQCAtNjEzLDYgKzYxMyw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
bG9hZChFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
ICAgICBlbHNlIHsKICAgICAgICAgbV9sb2FkSW5pdGlhdGVkQnlVc2VyR2VzdHVyZSA9IFNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICBpZiAobV9sb2Fk
SW5pdGlhdGVkQnlVc2VyR2VzdHVyZSkKKyAgICAgICAgICAgIHJlbW92ZUJlaGF2aW9yc1Jlc3Ry
aWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSgpOwogICAgICAgICBwcmVwYXJlRm9yTG9hZCgp
OwogICAgICAgICBsb2FkSW50ZXJuYWwoKTsKICAgICB9CkBAIC0yMDY3LDYgKzIwNjksOCBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXkoKQogCiAgICAgaWYgKHVzZXJHZXN0dXJlUmVxdWly
ZWRGb3JSYXRlQ2hhbmdlKCkgJiYgIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKQorICAgICAgICByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNB
ZnRlckZpcnN0VXNlckdlc3R1cmUoKTsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3Vt
ZW50KCktPnNldHRpbmdzKCk7CiAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5uZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcygpICYmIG1fZGlzcGF0Y2hpbmdDYW5QbGF5RXZlbnQgJiYgIW1fbG9h
ZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUpIHsKQEAgLTQwNDcsNSArNDA1MSwxMCBAQCBTdHJpbmcg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZWZlcnJlcigpIGNvbnN0CiAgICAgcmV0dXJu
IFNlY3VyaXR5UG9saWN5OjpnZW5lcmF0ZVJlZmVycmVySGVhZGVyKGRvY3VtZW50KCktPnJlZmVy
cmVyUG9saWN5KCksIG1fY3VycmVudFNyYywgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCkpOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yc1Jlc3Ry
aWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSgpCit7CisgICAgbV9yZXN0cmljdGlvbnMgPSBO
b1Jlc3RyaWN0aW9uczsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCmluZGV4IDQwNGI1YTRmYzA2ODdkNzRmZTI5N2ZkNDM2M2I1NDQxOTljYTM3NGMu
LjU2MjVlMjc3NjE3ZGYyMWI0NDJlNzQwMGE1ZDFlNTA2NzZlODM2NmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC00NzYsNiArNDc2LDkgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgY2hhbmdlTmV0d29ya1N0YXRlRnJvbUxvYWRpbmdUb0lkbGUoKTsKIAorICAgIC8v
IFJlbW92ZSBiZWhhdmlvciByZXN0cmljdGlvbnMgYWZ0ZXIgdXNlciByZXF1ZXN0ZWQgbG9hZC9w
bGF5CisgICAgdm9pZCByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdl
c3R1cmUoKTsKKwogI2lmIEVOQUJMRShNSUNST0RBVEEpCiAgICAgdmlydHVhbCBTdHJpbmcgaXRl
bVZhbHVlVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtVmFsdWVUZXh0KGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128583</attachid>
            <date>2012-02-23 16:00:51 -0800</date>
            <delta_ts>2012-02-24 09:17:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79167-20120223160050.patch</filename>
            <type>text/plain</type>
            <size>10778</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJiZWY1YmVjOTZhZTg0
NzNlYjQ1NWE2ZDMyZDhmZGE5NDU1MmQ2Mi4uODYwNDk4NzBlYjM5YjhjYmNhNTU1NjRhZTViNWFh
MWJjYjI5Y2QzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAyLTIzICBNaW4g
UWluICA8cWlubWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgc2V0dGluZyB0byBl
eGVtcHQgbWVkaWEgcGxheWJhY2sgZnJvbSB1c2VyIGdlc3R1cmUgcmVxdWlyZW1lbnQgYWZ0ZXIg
YSB1c2VyIGdlc3R1cmUgaXMgaW5pdGlhdGVkIG9uIGxvYWRpbmcvcGxheWluZyBhIG1lZGlhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG1lZGlh
L3ZpZGVvLXBsYXktcmVxdWlyZS11c2VyLWdlc3R1cmUuaHRtbAorCisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlv
bnNBZnRlckZpcnN0VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMp
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMi0yMiAgQW5kcmVh
cyBLbGluZyAgPGF3ZXNvbWVrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBwYXJzaW5n
IGNvbG9yIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzIGRvIGxlc3MgcG9pbnRsZXNzIHdvcmsuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAyZWIyYTliZmRmODNi
OWFkMjlmZDQ0YWJiMTFiMWQ1ZmJkZWRkODIwLi44NjgzNmJkYjBhODljMmJkZmFhY2I4MGVhYmRj
YjhkNGI1NTcwOTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
QEAgLTYxMyw2ICs2MTMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQoRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgZWxzZSB7CiAg
ICAgICAgIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUgPSBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgaWYgKG1fbG9hZEluaXRpYXRlZEJ5VXNl
ckdlc3R1cmUpCisgICAgICAgICAgICByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZp
cnN0VXNlckdlc3R1cmUoKTsKICAgICAgICAgcHJlcGFyZUZvckxvYWQoKTsKICAgICAgICAgbG9h
ZEludGVybmFsKCk7CiAgICAgfQpAQCAtMjA2Nyw2ICsyMDY5LDggQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5KCkKIAogICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5n
ZSgpICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgcmVtb3ZlQmVoYXZpb3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJH
ZXN0dXJlKCk7CiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5n
cygpOwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKSAmJiBtX2Rpc3BhdGNoaW5nQ2FuUGxheUV2ZW50ICYmICFtX2xvYWRJbml0aWF0ZWRCeVVz
ZXJHZXN0dXJlKSB7CkBAIC00MDQ3LDUgKzQwNTEsMTAgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyUmVmZXJyZXIoKSBjb25zdAogICAgIHJldHVybiBTZWN1cml0eVBvbGlj
eTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihkb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCBt
X2N1cnJlbnRTcmMsIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKTsKIH0KIAor
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZp
cnN0VXNlckdlc3R1cmUoKQoreworICAgIG1fcmVzdHJpY3Rpb25zID0gTm9SZXN0cmljdGlvbnM7
Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRl
eCA0MDRiNWE0ZmMwNjg3ZDc0ZmUyOTdmZDQzNjNiNTQ0MTk5Y2EzNzRjLi41NjI1ZTI3NzYxN2Rm
MjFiNDQyZTc0MDBhNWQxZTUwNjc2ZTgzNjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaApAQCAtNDc2LDYgKzQ3Niw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoYW5n
ZU5ldHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAKKyAgICAvLyBSZW1vdmUgYmVoYXZp
b3IgcmVzdHJpY3Rpb25zIGFmdGVyIHVzZXIgcmVxdWVzdGVkIGxvYWQvcGxheQorICAgIHZvaWQg
cmVtb3ZlQmVoYXZpb3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKCk7CisKICNp
ZiBFTkFCTEUoTUlDUk9EQVRBKQogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1WYWx1ZVRleHQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbVZhbHVlVGV4dChjb25zdCBTdHJpbmcmLCBF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggODRl
OWNmNzU0MDk0OWY4ZDdlMTJiNWRkZmEwYzc4MjEyZDRiZjJhOC4uYzExYTAzODA5ZWNmYTQ2OGE2
ZjcxN2I3YjYzZWRkZjBjMjY1MGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtNTQxLDYgKzU0MSwxNiBAQCBpbnQgSW50ZXJuYWxzOjpsYXN0U3BlbGxDaGVja1Byb2Nl
c3NlZFNlcXVlbmNlKERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZQogICAgIHJldHVy
biBjaGVja2VyLT5sYXN0UHJvY2Vzc2VkU2VxdWVuY2UoKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6
OnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8
ICFkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRvY3VtZW50LT5zZXR0aW5ncygpLT5z
ZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShlbmFibGVkKTsKK30KKwogVmVjdG9y
PFN0cmluZz4gSW50ZXJuYWxzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gV2ViQ29yZTo6dXNlclByZWZlcnJlZExhbmd1YWdlcygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKaW5kZXggZWEyZjhiOGFmMmMxMWNjZmMwYTZjZWY5Y2NhOGU2ZjQ0ZDA1
YzU2ZC4uYzViZTM4ZWFiYmUzZjNlMjBmYWQ3M2JkMzQ5ZjRiNzdlNzk4MDllMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xMDYsNiArMTA2LDggQEAgcHVibGljOgogICAgIGlu
dCBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBpbnQgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShEb2N1bWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICAKKyAgICB2b2lkIHNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKERvY3VtZW50KiwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CisKICAg
ICBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBiYTc2ZDQ4NmRkZTg5NzExMjg4ZmIw
NDkzYzEzNzRiYjgxNmM4MmNhLi45ZDhkOGIyMmQ2N2QzNDZlZWZhYTU2OGRjMTkwMGVhMmFmYzYw
NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC04MSw2ICs4MSw4IEBA
IG1vZHVsZSB3aW5kb3cgewogICAgICAgICBsb25nIGxhc3RTcGVsbENoZWNrUmVxdWVzdFNlcXVl
bmNlKGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IGxvbmcgbGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5jZShpbiBEb2N1bWVudCBkb2N1bWVu
dCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogCisgICAgICAgIHZvaWQgc2V0TWVkaWFQbGF5YmFj
a1JlcXVpcmVzVXNlckdlc3R1cmUoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIGJvb2xlYW4gZW5h
YmxlZCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKICNpZiBkZWZpbmVkKEVOQUJMRV9WSURFT19U
UkFDSykgJiYgRU5BQkxFX1ZJREVPX1RSQUNLCiAgICAgICAgIHZvaWQgc2V0U2hvdWxkRGlzcGxh
eVRyYWNrS2luZChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gRE9NU3RyaW5nIGtpbmQsIGluIGJv
b2xlYW4gZW5hYmxlZCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBib29sZWFuIHNo
b3VsZERpc3BsYXlUcmFja0tpbmQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyB0
cmFja0tpbmQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwZWRlN2Q0ZmY3NDE5N2U5
YTNjZjQzMjZiMTRiOTk2MjA5ODBlMjVhLi45MmQ5NTQxYTgxNDQxOWFkZTI1NDg4OTA0ZTliYzk2
NWE2ZjkzOTZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDItMjMgIE1pbiBRaW4gIDxx
aW5taW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBFeHBvc2UgYSBzZXR0aW5nIHRvIGV4ZW1wdCBt
ZWRpYSBwbGF5YmFjayBmcm9tIHVzZXIgZ2VzdHVyZSByZXF1aXJlbWVudCBhZnRlciBhIHVzZXIg
Z2VzdHVyZSBpcyBpbml0aWF0ZWQgb24gbG9hZGluZy9wbGF5aW5nIGEgbWVkaWEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MTY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtZWRpYS92aWRlby1wbGF5
LXJlcXVpcmUtdXNlci1nZXN0dXJlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVk
aWEvdmlkZW8tcGxheS1yZXF1aXJlLXVzZXItZ2VzdHVyZS5odG1sOiBBZGRlZC4KKwogMjAxMi0w
Mi0yMiAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuIFJlYmFzZWxpbmUgbW9yZSBzdmcgdGVzdHMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS92aWRlby1wbGF5LXJlcXVpcmUtdXNlci1nZXN0
dXJlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL3ZpZGVvLXBsYXktcmVxdWlyZS11
c2VyLWdlc3R1cmUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjOTQ1OGJjZWFhMjExMDk2MGIy
MjQ0MGM2OTY3YWVkMzU2NTgwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRp
YS92aWRlby1wbGF5LXJlcXVpcmUtdXNlci1nZXN0dXJlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE3IEBACitUZXN0IHRoYXQgdmlkZW8gcGxheSgpLCBwYXVzZSgpIGFuZCB3ZWJraXRFbnRlckZ1
bGxTY3JlZW4oKSBzaG91bGQgbm90IHdvcmsgdW5sZXNzIGEgdXNlciBjbGlja2VkIG9uIHRoZSBw
bGF5IGJ1dHRvbi4KKworRVZFTlQoY2FucGxheXRocm91Z2gpCisKKyogTm8gdXNlciBnZXN0dXJl
IGluaXRpYXRlZAorUlVOKHZpZGVvLnBsYXkoKSkKK1RFU1QodmlkZW8ud2Via2l0RW50ZXJGdWxs
U2NyZWVuKCkpIFRIUk9XUyhET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpIE9LCitFWFBF
Q1RFRCAodmlkZW8ucGF1c2VkID09ICd0cnVlJykgT0sKKworKiBVc2VyIGdlc3R1cmUgaW5pdGlh
dGVkCitFVkVOVChwbGF5aW5nKQorUlVOKHZpZGVvLnBhdXNlKCkpCitFVkVOVChwYXVzZSkKK0VY
UEVDVEVEICh2aWRlby5wYXVzZWQgPT0gJ3RydWUnKSBPSworUlVOKHZpZGVvLndlYmtpdEVudGVy
RnVsbFNjcmVlbigpKQorRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVk
aWEvdmlkZW8tcGxheS1yZXF1aXJlLXVzZXItZ2VzdHVyZS5odG1sIGIvTGF5b3V0VGVzdHMvbWVk
aWEvdmlkZW8tcGxheS1yZXF1aXJlLXVzZXItZ2VzdHVyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1MmY2
YjJlYTcwOGU4N2NiZWVjYjZlYWQ4NmNmZmEzYmQ3YjlkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9tZWRpYS92aWRlby1wbGF5LXJlcXVpcmUtdXNlci1nZXN0dXJlLmh0bWwKQEAg
LTAsMCArMSw4MyBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDx0aXRsZT5UZXN0IHRo
YXQgdmlkZW8gcGxheSwgcGF1c2UgYW5kIGVudGVyZnVsbHNjcmVlbiBkb2VzIG5vdCB3b3JrIHVu
bGVzcyBhIHVzZXIgZ2VzdHVyZSBpcyBpbnZvbHZlZCBpbiBwbGF5aW5nIGEgdmlkZW88L3RpdGxl
PgorICAgICAgICA8c2NyaXB0IHNyYz1tZWRpYS1jb250cm9scy5qcz48L3NjcmlwdD4KKyAgICAg
ICAgPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBz
cmM9dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAg
IHZhciB1c2VyR2VzdHVyZUluaXRpYXRlZCA9IDA7CisgICAgICAgICAgICBpZiAod2luZG93Lmlu
dGVybmFscykgCisJICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldE1lZGlhUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKGRvY3VtZW50LCB0cnVlKTsKKworICAgICAgICAgICAgZnVuY3Rpb24g
Y2xpY2soKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZXZlbnRT
ZW5kZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXlDb29yZHM7CisgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF5Q29vcmRzID0gbWVk
aWFDb250cm9sc0J1dHRvbkNvb3JkaW5hdGVzKHZpZGVvLCAicGxheS1idXR0b24iKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmYWlsVGVzdChleGNlcHRpb24uZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHZhciB4ID0gcGxheUNvb3Jkc1swXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBwbGF5
Q29vcmRzWzFdOworICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHVz
ZXJHZXN0dXJlSW5pdGlhdGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIu
bW91c2VNb3ZlVG8oeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
RG93bigpOworICAgICAgICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBwbGF5
aW5nKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodXNlckdlc3R1cmVJbml0
aWF0ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsVGVzdCgiU2hvdWxkIG5vdCBw
bGF5IHdpdGhvdXQgdXNlciBnZXN0dXJlLiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1bigidmlkZW8ucGF1c2UoKSIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gcGF1c2UoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ucGF1c2VkIiwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgLy8gTm93IHZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigp
IHNob3VsZCBubyBsb25nZXIgdGhyb3cgYW55IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICAv
LyBIb3dldmVyLCB0aGUgdmlkZW8gZWxlbWVudCBtYXkgbm90IGFsd2F5cyBlbnRlciBmdWxsc2Ny
ZWVuLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAvLyBjaHJvbWl1bSB1c2VzIGZ1bGxz
Y3JlZW4gQVBJIHdoaWNoIHN0aWxsIHJlcXVpcmVzIHVzZXIgZ2VzdHVyZQorICAgICAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bigidmlkZW8ud2Via2l0RW50ZXJGdWxs
U2NyZWVuKCkiKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKGV4KSB7CisgICAgICAgICAgICAg
ICAgICAgIGZhaWxUZXN0KCJ2aWRlby53ZWJraXRFbnRlckZ1bGxTY3JlZW4oKSBzdGlsbCByZXF1
aXJlcyB1c2VyIGdlc3R1cmUuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVuZFRlc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gY2FucGxh
eXRocm91Z2goKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgi
Iik7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIqIE5vIHVzZXIgZ2VzdHVyZSBpbml0
aWF0ZWQiKTsKKyAgICAgICAgICAgICAgICBydW4oInZpZGVvLnBsYXkoKSIpOworICAgICAgICAg
ICAgICAgIHRlc3RFeGNlcHRpb24oInZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigpIiwgIkRP
TUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidmlkZW8ucGF1c2VkIiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRl
KCIiKTsKKworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiKiBVc2VyIGdlc3R1cmUgaW5p
dGlhdGVkIik7CisgICAgICAgICAgICAgICAgY2xpY2soKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZnVuY3Rpb24gc3RhcnQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICBmaW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnY2Fu
cGxheXRocm91Z2gnLCBjYW5wbGF5dGhyb3VnaCk7CisgICAgICAgICAgICAgICAgIHdhaXRGb3JF
dmVudCgncGxheWluZycsIHBsYXlpbmcpOworICAgICAgICAgICAgICAgICB3YWl0Rm9yRXZlbnQo
J3BhdXNlJywgcGF1c2UpOworICAgICAgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFG
aWxlKCJ2aWRlbyIsICJjb250ZW50L3Rlc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9z
Y3JpcHQ+CisgICAgPC9oZWFkPgorCisgICAgPGJvZHkgb25sb2FkPSJzdGFydCgpIj4KKyAgICA8
cD5UZXN0IHRoYXQgdmlkZW8gcGxheSgpLCBwYXVzZSgpIGFuZCB3ZWJraXRFbnRlckZ1bGxTY3Jl
ZW4oKSBzaG91bGQgbm90IHdvcmsgdW5sZXNzIGEgdXNlciBjbGlja2VkIG9uIHRoZSBwbGF5IGJ1
dHRvbi48L3A+CisgICAgPHZpZGVvIGNvbnRyb2xzPjwvdmlkZW8+CisgICAgPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128745</attachid>
            <date>2012-02-24 09:17:30 -0800</date>
            <delta_ts>2012-02-24 11:35:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79167-20120224091729.patch</filename>
            <type>text/plain</type>
            <size>10717</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJiZWY1YmVjOTZhZTg0
NzNlYjQ1NWE2ZDMyZDhmZGE5NDU1MmQ2Mi4uODYwNDk4NzBlYjM5YjhjYmNhNTU1NjRhZTViNWFh
MWJjYjI5Y2QzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAyLTIzICBNaW4g
UWluICA8cWlubWluQGdvb2dsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgc2V0dGluZyB0byBl
eGVtcHQgbWVkaWEgcGxheWJhY2sgZnJvbSB1c2VyIGdlc3R1cmUgcmVxdWlyZW1lbnQgYWZ0ZXIg
YSB1c2VyIGdlc3R1cmUgaXMgaW5pdGlhdGVkIG9uIGxvYWRpbmcvcGxheWluZyBhIG1lZGlhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE2NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG1lZGlh
L3ZpZGVvLXBsYXktcmVxdWlyZS11c2VyLWdlc3R1cmUuaHRtbAorCisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlv
bnNBZnRlckZpcnN0VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChIVE1MTWVkaWFFbGVtZW50KToKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAgICAgIChJbnRlcm5hbHMp
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxMi0wMi0yMiAgQW5kcmVh
cyBLbGluZyAgPGF3ZXNvbWVrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBwYXJzaW5n
IGNvbG9yIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzIGRvIGxlc3MgcG9pbnRsZXNzIHdvcmsuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAyZWIyYTliZmRmODNi
OWFkMjlmZDQ0YWJiMTFiMWQ1ZmJkZWRkODIwLi44NjgzNmJkYjBhODljMmJkZmFhY2I4MGVhYmRj
YjhkNGI1NTcwOTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
QEAgLTYxMyw2ICs2MTMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQoRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgZWxzZSB7CiAg
ICAgICAgIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUgPSBTY3JpcHRDb250cm9sbGVyOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgaWYgKG1fbG9hZEluaXRpYXRlZEJ5VXNl
ckdlc3R1cmUpCisgICAgICAgICAgICByZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZp
cnN0VXNlckdlc3R1cmUoKTsKICAgICAgICAgcHJlcGFyZUZvckxvYWQoKTsKICAgICAgICAgbG9h
ZEludGVybmFsKCk7CiAgICAgfQpAQCAtMjA2Nyw2ICsyMDY5LDggQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwbGF5KCkKIAogICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yUmF0ZUNoYW5n
ZSgpICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIGlmIChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgcmVtb3ZlQmVoYXZpb3JzUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJH
ZXN0dXJlKCk7CiAKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5n
cygpOwogICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKSAmJiBtX2Rpc3BhdGNoaW5nQ2FuUGxheUV2ZW50ICYmICFtX2xvYWRJbml0aWF0ZWRCeVVz
ZXJHZXN0dXJlKSB7CkBAIC00MDQ3LDUgKzQwNTEsMTAgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyUmVmZXJyZXIoKSBjb25zdAogICAgIHJldHVybiBTZWN1cml0eVBvbGlj
eTo6Z2VuZXJhdGVSZWZlcnJlckhlYWRlcihkb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpLCBt
X2N1cnJlbnRTcmMsIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKTsKIH0KIAor
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVCZWhhdmlvcnNSZXN0cmljdGlvbnNBZnRlckZp
cnN0VXNlckdlc3R1cmUoKQoreworICAgIG1fcmVzdHJpY3Rpb25zID0gTm9SZXN0cmljdGlvbnM7
Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRl
eCA0MDRiNWE0ZmMwNjg3ZDc0ZmUyOTdmZDQzNjNiNTQ0MTk5Y2EzNzRjLi40MDE2MWY2OGZlNmRi
MTcyNzE3ZjA5MDNjOTllMzUwYzI4NDFhMzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaApAQCAtNDc2LDYgKzQ3Niw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoYW5n
ZU5ldHdvcmtTdGF0ZUZyb21Mb2FkaW5nVG9JZGxlKCk7CiAKKyAgICB2b2lkIHJlbW92ZUJlaGF2
aW9yc1Jlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSgpOworCiAjaWYgRU5BQkxFKE1J
Q1JPREFUQSkKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVmFsdWVUZXh0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHNldEl0ZW1WYWx1ZVRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDg0ZTljZjc1NDA5NDlm
OGQ3ZTEyYjVkZGZhMGM3ODIxMmQ0YmYyYTguLmMxMWEwMzgwOWVjZmE0NjhhNmY3MTdiN2I2M2Vk
ZGYwYzI2NTBmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTU0MSw2
ICs1NDEsMTYgQEAgaW50IEludGVybmFsczo6bGFzdFNwZWxsQ2hlY2tQcm9jZXNzZWRTZXF1ZW5j
ZShEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUKICAgICByZXR1cm4gY2hlY2tlci0+
bGFzdFByb2Nlc3NlZFNlcXVlbmNlKCk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYVBs
YXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgZW5hYmxl
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PnNldHRpbmdzKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBkb2N1bWVudC0+c2V0dGluZ3MoKS0+c2V0TWVkaWFQbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoZW5hYmxlZCk7Cit9CisKIFZlY3RvcjxTdHJpbmc+IElu
dGVybmFsczo6dXNlclByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdl
YkNvcmU6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oCmluZGV4IGVhMmY4YjhhZjJjMTFjY2ZjMGE2Y2VmOWNjYThlNmY0NGQwNWM1NmQuLmM1YmUz
OGVhYmJlM2YzZTIwZmFkNzNiZDM0OWY0Yjc3ZTc5ODA5ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaApAQCAtMTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAgICBpbnQgbGFzdFNwZWxs
Q2hlY2tSZXF1ZXN0U2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgaW50
IGxhc3RTcGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgCisgICAgdm9pZCBzZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShE
b2N1bWVudCosIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgVmVjdG9yPFN0
cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0OwogICAgIHZvaWQgc2V0VXNlclBy
ZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwKaW5kZXggYmE3NmQ0ODZkZGU4OTcxMTI4OGZiMDQ5M2MxMzc0YmI4
MTZjODJjYS4uOWQ4ZDhiMjJkNjdkMzQ2ZWVmYWE1NjhkYzE5MDBlYTJhZmM2MDZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtODEsNiArODEsOCBAQCBtb2R1bGUgd2lu
ZG93IHsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1JlcXVlc3RTZXF1ZW5jZShpbiBEb2N1
bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBsb25nIGxhc3RT
cGVsbENoZWNrUHJvY2Vzc2VkU2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAo
RE9NRXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lkIHNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBib29sZWFuIGVuYWJsZWQpIHJhaXNl
cyhET01FeGNlcHRpb24pOworCiAjaWYgZGVmaW5lZChFTkFCTEVfVklERU9fVFJBQ0spICYmIEVO
QUJMRV9WSURFT19UUkFDSwogICAgICAgICB2b2lkIHNldFNob3VsZERpc3BsYXlUcmFja0tpbmQo
aW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyBraW5kLCBpbiBib29sZWFuIGVuYWJs
ZWQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgYm9vbGVhbiBzaG91bGREaXNwbGF5
VHJhY2tLaW5kKGluIERvY3VtZW50IGRvY3VtZW50LCBpbiBET01TdHJpbmcgdHJhY2tLaW5kKSBy
YWlzZXMgKERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGVkZTdkNGZmNzQxOTdlOWEzY2Y0MzI2YjE0
Yjk5NjIwOTgwZTI1YS4uOTJkOTU0MWE4MTQ0MTlhZGUyNTQ4ODkwNGU5YmM5NjVhNmY5Mzk2ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAyLTIzICBNaW4gUWluICA8cWlubWluQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgc2V0dGluZyB0byBleGVtcHQgbWVkaWEgcGxheWJh
Y2sgZnJvbSB1c2VyIGdlc3R1cmUgcmVxdWlyZW1lbnQgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUgaXMg
aW5pdGlhdGVkIG9uIGxvYWRpbmcvcGxheWluZyBhIG1lZGlhCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTE2NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvdmlkZW8tcGxheS1yZXF1aXJlLXVz
ZXItZ2VzdHVyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL3ZpZGVvLXBs
YXktcmVxdWlyZS11c2VyLWdlc3R1cmUuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMjIgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLiBSZWJhc2VsaW5lIG1vcmUgc3ZnIHRlc3RzLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tcGxheS1yZXF1aXJlLXVzZXItZ2VzdHVyZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS92aWRlby1wbGF5LXJlcXVpcmUtdXNlci1nZXN0dXJl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzk0NThiY2VhYTIxMTA5NjBiMjI0NDBjNjk2N2Fl
ZDM1NjU4MGVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tcGxh
eS1yZXF1aXJlLXVzZXItZ2VzdHVyZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNyBAQAorVGVz
dCB0aGF0IHZpZGVvIHBsYXkoKSwgcGF1c2UoKSBhbmQgd2Via2l0RW50ZXJGdWxsU2NyZWVuKCkg
c2hvdWxkIG5vdCB3b3JrIHVubGVzcyBhIHVzZXIgY2xpY2tlZCBvbiB0aGUgcGxheSBidXR0b24u
CisKK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorCisqIE5vIHVzZXIgZ2VzdHVyZSBpbml0aWF0ZWQK
K1JVTih2aWRlby5wbGF5KCkpCitURVNUKHZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigpKSBU
SFJPV1MoRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKSBPSworRVhQRUNURUQgKHZpZGVv
LnBhdXNlZCA9PSAndHJ1ZScpIE9LCisKKyogVXNlciBnZXN0dXJlIGluaXRpYXRlZAorRVZFTlQo
cGxheWluZykKK1JVTih2aWRlby5wYXVzZSgpKQorRVZFTlQocGF1c2UpCitFWFBFQ1RFRCAodmlk
ZW8ucGF1c2VkID09ICd0cnVlJykgT0sKK1JVTih2aWRlby53ZWJraXRFbnRlckZ1bGxTY3JlZW4o
KSkKK0VORCBPRiBURVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL3ZpZGVvLXBs
YXktcmVxdWlyZS11c2VyLWdlc3R1cmUuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL3ZpZGVvLXBs
YXktcmVxdWlyZS11c2VyLWdlc3R1cmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGZmNjZiMGQxZjJmNDY0
YTQzMTFiNmUyZjI5ZDY2ZTllYmUzYzRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
bWVkaWEvdmlkZW8tcGxheS1yZXF1aXJlLXVzZXItZ2VzdHVyZS5odG1sCkBAIC0wLDAgKzEsODMg
QEAKKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8dGl0bGU+VGVzdCB0aGF0IHZpZGVvIHBs
YXksIHBhdXNlIGFuZCBlbnRlcmZ1bGxzY3JlZW4gZG9lcyBub3Qgd29yayB1bmxlc3MgYSB1c2Vy
IGdlc3R1cmUgaXMgaW52b2x2ZWQgaW4gcGxheWluZyBhIHZpZGVvPC90aXRsZT4KKyAgICAgICAg
PHNjcmlwdCBzcmM9bWVkaWEtY29udHJvbHMuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPW1lZGlhLWZpbGUuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPXZpZGVvLXRl
c3QuanM+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICB2YXIgdXNlckdl
c3R1cmVJbml0aWF0ZWQgPSAwOworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIAor
ICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0TWVkaWFQbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUoZG9jdW1lbnQsIHRydWUpOworCisgICAgICAgICAgICBmdW5jdGlvbiBjbGlj
aygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRl
cikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGxheUNvb3JkczsKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlDb29yZHMgPSBtZWRpYUNv
bnRyb2xzQnV0dG9uQ29vcmRpbmF0ZXModmlkZW8sICJwbGF5LWJ1dHRvbiIpOworICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZhaWxUZXN0KGV4Y2VwdGlvbi5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFy
IHggPSBwbGF5Q29vcmRzWzBdOworICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBsYXlDb29y
ZHNbMV07CisgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdXNlckdl
c3R1cmVJbml0aWF0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyh4LCB5KTsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3du
KCk7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHBsYXlpbmco
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh1c2VyR2VzdHVyZUluaXRpYXRl
ZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCJTaG91bGQgbm90IHBsYXkg
d2l0aG91dCB1c2VyIGdlc3R1cmUuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcnVuKCJ2aWRlby5wYXVzZSgpIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBwYXVzZSgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5wYXVzZWQiLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAvLyBOb3cgdmlkZW8ud2Via2l0RW50ZXJGdWxsU2NyZWVuKCkgc2hv
dWxkIG5vIGxvbmdlciB0aHJvdyBhbnkgZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgIC8vIEhv
d2V2ZXIsIHRoZSB2aWRlbyBlbGVtZW50IG1heSBub3QgYWx3YXlzIGVudGVyIGZ1bGxzY3JlZW4u
IEZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgIC8vIGNocm9taXVtIHVzZXMgZnVsbHNjcmVl
biBBUEkgd2hpY2ggc3RpbGwgcmVxdWlyZXMgdXNlciBnZXN0dXJlCisgICAgICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcnVuKCJ2aWRlby53ZWJraXRFbnRlckZ1bGxTY3Jl
ZW4oKSIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmFpbFRlc3QoInZpZGVvLndlYmtpdEVudGVyRnVsbFNjcmVlbigpIHN0aWxsIHJlcXVpcmVz
IHVzZXIgZ2VzdHVyZS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5k
VGVzdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBjYW5wbGF5dGhy
b3VnaCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsK
KyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiogTm8gdXNlciBnZXN0dXJlIGluaXRpYXRl
ZCIpOworICAgICAgICAgICAgICAgIHJ1bigidmlkZW8ucGxheSgpIik7CisgICAgICAgICAgICAg
ICAgdGVzdEV4Y2VwdGlvbigidmlkZW8ud2Via2l0RW50ZXJGdWxsU2NyZWVuKCkiLCAiRE9NRXhj
ZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSIik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ2aWRlby5wYXVzZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIp
OworCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIqIFVzZXIgZ2VzdHVyZSBpbml0aWF0
ZWQiKTsKKyAgICAgICAgICAgICAgICBjbGljaygpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmdW5jdGlvbiBzdGFydCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGZp
bmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5
dGhyb3VnaCcsIGNhbnBsYXl0aHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50
KCdwbGF5aW5nJywgcGxheWluZyk7CisgICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgncGF1
c2UnLCBwYXVzZSk7CisgICAgICAgICAgICAgICAgIHZpZGVvLnNyYyA9IGZpbmRNZWRpYUZpbGUo
InZpZGVvIiwgImNvbnRlbnQvdGVzdCIpOworICAgICAgICAgICAgfQorICAgICAgICA8L3Njcmlw
dD4KKyAgICA8L2hlYWQ+CisKKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0KCkiPgorICAgIDxwPlRl
c3QgdGhhdCB2aWRlbyBwbGF5KCksIHBhdXNlKCkgYW5kIHdlYmtpdEVudGVyRnVsbFNjcmVlbigp
IHNob3VsZCBub3Qgd29yayB1bmxlc3MgYSB1c2VyIGNsaWNrZWQgb24gdGhlIHBsYXkgYnV0dG9u
LjwvcD4KKyAgICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4KKyAgICA8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>