<?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>123443</bug_id>
          
          <creation_ts>2013-10-29 06:22:59 -0700</creation_ts>
          <short_desc>Simplifying MediaStream and MediStreamDescriptor creation</short_desc>
          <delta_ts>2013-11-13 13:56:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>123473</dependson>
          <blocked>123477</blocked>
    
    <blocked>124288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago de Barros Lacerda">thiago.lacerda</reporter>
          <assigned_to name="Thiago de Barros Lacerda">thiago.lacerda</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>tommyw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>944406</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 06:22:59 -0700</bug_when>
    <thetext>The internal process of creating a MediaStream and MediaStreamDescriptor was quite confusing and spread. We can take advantage of the platform implementation of MediaStreamTrack (aka MediaStreamTrackPrivate) and simplify the whole process.
A new constructor that receives vectors of MediaStreamTrackPrivate objects were added, then the check if a source already exists or if the tracks are all ended are now made in MediaStreamDescriptor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944407</commentid>
    <comment_count>1</comment_count>
      <attachid>215383</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 06:27:38 -0700</bug_when>
    <thetext>Created attachment 215383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944583</commentid>
    <comment_count>2</comment_count>
      <attachid>215419</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 13:50:16 -0700</bug_when>
    <thetext>Created attachment 215419
Fixing old patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944621</commentid>
    <comment_count>3</comment_count>
      <attachid>215419</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-29 14:44:46 -0700</bug_when>
    <thetext>Comment on attachment 215419
Fixing old patch

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

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:134
&gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
&gt; +    // If tracks were provided and no one was added to the MediaStreamDescriptor&apos;s tracks, this means
&gt; +    // that the tracks were all ended
&gt; +    if (providedTracksSize &gt; 0 &amp;&amp; !tracksSize)
&gt; +        m_ended = true;

This can be simplified by adding an early return when &quot;!m_audioPrivateTracks.size() &amp;&amp; !m_videoPrivateTracks.size()&quot;

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:137
&gt; +void MediaStreamDescriptor::addTrackAndSource(PassRefPtr&lt;MediaStreamSource&gt; source, PassRefPtr&lt;MediaStreamTrackPrivate&gt; track)

It looks like source is always the same as track-&gt;source(), so you can just pass the track.

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:95
&gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;

I don&apos;t think this typedef is helpful, it requires someone not familiar with the code to search out the definition to figure out what it means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944623</commentid>
    <comment_count>4</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 14:48:20 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 215419 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215419&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:134
&gt; &gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; &gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
&gt; &gt; +    // If tracks were provided and no one was added to the MediaStreamDescriptor&apos;s tracks, this means
&gt; &gt; +    // that the tracks were all ended
&gt; &gt; +    if (providedTracksSize &gt; 0 &amp;&amp; !tracksSize)
&gt; &gt; +        m_ended = true;
&gt; 
&gt; This can be simplified by adding an early return when &quot;!m_audioPrivateTracks.size() &amp;&amp; !m_videoPrivateTracks.size()&quot;

Makes sense.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:137
&gt; &gt; +void MediaStreamDescriptor::addTrackAndSource(PassRefPtr&lt;MediaStreamSource&gt; source, PassRefPtr&lt;MediaStreamTrackPrivate&gt; track)
&gt; 
&gt; It looks like source is always the same as track-&gt;source(), so you can just pass the track.

Good catch :)

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:95
&gt; &gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;
&gt; 
&gt; I don&apos;t think this typedef is helpful, it requires someone not familiar with the code to search out the definition to figure out what it means.

I just followed the same approach as in MediaStreamSource, which defines MediaStreamSourceVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944631</commentid>
    <comment_count>5</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 15:01:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 215419 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215419&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:134
&gt; &gt; &gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; &gt; &gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
&gt; &gt; &gt; +    // If tracks were provided and no one was added to the MediaStreamDescriptor&apos;s tracks, this means
&gt; &gt; &gt; +    // that the tracks were all ended
&gt; &gt; &gt; +    if (providedTracksSize &gt; 0 &amp;&amp; !tracksSize)
&gt; &gt; &gt; +        m_ended = true;
&gt; &gt; 
&gt; &gt; This can be simplified by adding an early return when &quot;!m_audioPrivateTracks.size() &amp;&amp; !m_videoPrivateTracks.size()&quot;
&gt; 
&gt; Makes sense.

No, we can&apos;t do that because there can be two reasons why privatetracks are empty: MediaStream was created with no tracks or sources or all tracks were ended.
So, early returning may miss the second and do not set the m_ended attribute

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:137
&gt; &gt; &gt; +void MediaStreamDescriptor::addTrackAndSource(PassRefPtr&lt;MediaStreamSource&gt; source, PassRefPtr&lt;MediaStreamTrackPrivate&gt; track)
&gt; &gt; 
&gt; &gt; It looks like source is always the same as track-&gt;source(), so you can just pass the track.
&gt; 
&gt; Good catch :)
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:95
&gt; &gt; &gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;
&gt; &gt; 
&gt; &gt; I don&apos;t think this typedef is helpful, it requires someone not familiar with the code to search out the definition to figure out what it means.
&gt; 
&gt; I just followed the same approach as in MediaStreamSource, which defines MediaStreamSourceVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944640</commentid>
    <comment_count>6</comment_count>
      <attachid>215437</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-29 15:12:50 -0700</bug_when>
    <thetext>Created attachment 215437
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944946</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 09:57:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:95
&gt; &gt; &gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;
&gt; &gt; 
&gt; &gt; I don&apos;t think this typedef is helpful, it requires someone not familiar with the code to search out the definition to figure out what it means.
&gt; 
&gt; I just followed the same approach as in MediaStreamSource, which defines MediaStreamSourceVector.

We inherited that from the initial implementation, but that isn&apos;t necessarily a reason to keep it. 

Defining a typedef for a complex type can be useful, eg. it can help someone who doesn&apos;t know the code understand what it is used for, but I don&apos;t thinks &quot;MediaStreamTrackPrivateVector&quot; is any easier to understand than &quot;Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt;&quot;, and I think it actually makes it slightly harder to understand the code because you have to hunt down the typedef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944948</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 09:58:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:95
&gt; &gt; &gt; &gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think this typedef is helpful, it requires someone not familiar with the code to search out the definition to figure out what it means.
&gt; &gt; 
&gt; &gt; I just followed the same approach as in MediaStreamSource, which defines MediaStreamSourceVector.
&gt; 
&gt; We inherited that from the initial implementation, but that isn&apos;t necessarily a reason to keep it. 
&gt; 
&gt; Defining a typedef for a complex type can be useful, eg. it can help someone who doesn&apos;t know the code understand what it is used for, but I don&apos;t thinks &quot;MediaStreamTrackPrivateVector&quot; is any easier to understand than &quot;Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt;&quot;, and I think it actually makes it slightly harder to understand the code because you have to hunt down the typedef.

FWIW, I think we should remove MediaStreamSourceVector and its cousins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944979</commentid>
    <comment_count>9</comment_count>
      <attachid>215437</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 10:29:09 -0700</bug_when>
    <thetext>Comment on attachment 215437
Updated patch

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

This is close, but I think it is worth one more round.

&gt; Source/WebCore/ChangeLog:34
&gt; +        * Modules/mediastream/MediaStream.cpp:
&gt; +        (WebCore::MediaStream::create):
&gt; +        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
&gt; +        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
&gt; +        * platform/mediastream/MediaStreamDescriptor.cpp:
&gt; +        (WebCore::MediaStreamDescriptor::create):
&gt; +        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
&gt; +        (WebCore::MediaStreamDescriptor::addTrackAndSource):
&gt; +        (WebCore::MediaStreamDescriptor::haveSourceWithId):
&gt; +        (WebCore::MediaStreamDescriptor::addTrack):
&gt; +        (WebCore::MediaStreamDescriptor::removeTrack):
&gt; +        * platform/mediastream/MediaStreamDescriptor.h:
&gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
&gt; +        (WebCore::MediaStreamDescriptor::audioTracks):
&gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
&gt; +        (WebCore::MediaStreamDescriptor::videoTracks):
&gt; +        * platform/mediastream/MediaStreamTrackPrivate.h:
&gt; +        * platform/mock/MockMediaStreamCenter.cpp:
&gt; +        (WebCore::MockMediaStreamCenter::createMediaStream):

Nit: comments please.

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:57
&gt; +        audioTracks.append(MediaStreamTrackPrivate::create(stream-&gt;m_audioTracks[i]-&gt;source()));

Why are you adding the track&apos;s *source* to the array of *tracks*? Does this even compile?

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:60
&gt; +        videoTracks.append(MediaStreamTrackPrivate::create(stream-&gt;m_videoTracks[i]-&gt;source()));

Ditto.

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:77
&gt; +    return MediaStream::create(context, MediaStreamDescriptor::create(audioTracks, videoTracks));

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:45
&gt; +PassRefPtr&lt;MediaStreamDescriptor&gt; MediaStreamDescriptor::create(const MediaStreamSourceVector&amp; audioSources, const MediaStreamSourceVector&amp; videoSources)

Nit: You can return RefPtr here. PassRefPtrs aren&apos;t needed since Anders added move-semantics to the RefPtr class.

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:50
&gt; +PassRefPtr&lt;MediaStreamDescriptor&gt; MediaStreamDescriptor::create(const MediaStreamTrackPrivateVector&amp; audioPrivateTracks, const MediaStreamTrackPrivateVector&amp; videoPrivateTracks)

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:121
&gt; +    for (size_t i = 0; i &lt; audioSources.size(); i++)
&gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(audioSources[i]));
&gt; +
&gt; +    for (size_t i = 0; i &lt; videoSources.size(); i++)
&gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(videoSources[i]));
&gt; +}

Does m_ended need to be set if all sources have ended (readyState == Ended)?

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:136
&gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();

I don&apos;t think these local variables are necessary.

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:163
&gt; +    for (size_t i = 0; i &lt; sourceVector.size(); ++i) {
&gt; +        if (id == sourceVector[i]-&gt;id())
&gt; +            return true;
&gt;      }
&gt; +
&gt; +    return false;

Can you use sourceVector.find() here?

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.h:59
&gt; +    static PassRefPtr&lt;MediaStreamDescriptor&gt; create(const MediaStreamSourceVector&amp; audioSources, const MediaStreamSourceVector&amp; videoSources);
&gt; +    static PassRefPtr&lt;MediaStreamDescriptor&gt; create(const MediaStreamTrackPrivateVector&amp; audioPrivateTracks, const MediaStreamTrackPrivateVector&amp; videoPrivateTracks);

Nit: You can return RefPtr here. PassRefPtrs aren&apos;t needed since Anders added move-semantics to the RefPtr class.

&gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:119
&gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;

This is unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945060</commentid>
    <comment_count>10</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-30 11:20:55 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 215437 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215437&amp;action=review
&gt; 
&gt; This is close, but I think it is worth one more round.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:34
&gt; &gt; +        * Modules/mediastream/MediaStream.cpp:
&gt; &gt; +        (WebCore::MediaStream::create):
&gt; &gt; +        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
&gt; &gt; +        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
&gt; &gt; +        * platform/mediastream/MediaStreamDescriptor.cpp:
&gt; &gt; +        (WebCore::MediaStreamDescriptor::create):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::addTrackAndSource):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::haveSourceWithId):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::addTrack):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::removeTrack):
&gt; &gt; +        * platform/mediastream/MediaStreamDescriptor.h:
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::audioTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
&gt; &gt; +        (WebCore::MediaStreamDescriptor::videoTracks):
&gt; &gt; +        * platform/mediastream/MediaStreamTrackPrivate.h:
&gt; &gt; +        * platform/mock/MockMediaStreamCenter.cpp:
&gt; &gt; +        (WebCore::MockMediaStreamCenter::createMediaStream):
&gt; 
&gt; Nit: comments please.

OK.

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:57
&gt; &gt; +        audioTracks.append(MediaStreamTrackPrivate::create(stream-&gt;m_audioTracks[i]-&gt;source()));
&gt; 
&gt; Why are you adding the track&apos;s *source* to the array of *tracks*? Does this even compile?

No no, I&apos;m creating a MediaStreamTrackPrivate with the given source and adding it to the tracks.

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:60
&gt; &gt; +        videoTracks.append(MediaStreamTrackPrivate::create(stream-&gt;m_videoTracks[i]-&gt;source()));
&gt; 
&gt; Ditto.

Ditto.

&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:77
&gt; &gt; +    return MediaStream::create(context, MediaStreamDescriptor::create(audioTracks, videoTracks));
&gt; 
&gt; Ditto.

Here I&apos;m creating a MediaStreamDescriptor with the track vectors and passing it to the MediaStream::create method.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:45
&gt; &gt; +PassRefPtr&lt;MediaStreamDescriptor&gt; MediaStreamDescriptor::create(const MediaStreamSourceVector&amp; audioSources, const MediaStreamSourceVector&amp; videoSources)
&gt; 
&gt; Nit: You can return RefPtr here. PassRefPtrs aren&apos;t needed since Anders added move-semantics to the RefPtr class.

OK.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:50
&gt; &gt; +PassRefPtr&lt;MediaStreamDescriptor&gt; MediaStreamDescriptor::create(const MediaStreamTrackPrivateVector&amp; audioPrivateTracks, const MediaStreamTrackPrivateVector&amp; videoPrivateTracks)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:121
&gt; &gt; +    for (size_t i = 0; i &lt; audioSources.size(); i++)
&gt; &gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(audioSources[i]));
&gt; &gt; +
&gt; &gt; +    for (size_t i = 0; i &lt; videoSources.size(); i++)
&gt; &gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(videoSources[i]));
&gt; &gt; +}
&gt; 
&gt; Does m_ended need to be set if all sources have ended (readyState == Ended)?

First I thought to put this behaviour here too, since we create tracks for the passed sources. But, since the spec only states for tracks that are passed to the constructor I left it that way. Maybe we can put this here too. What do you think?

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:136
&gt; &gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; &gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
&gt; 
&gt; I don&apos;t think these local variables are necessary.

I just put them to improve code readability, otherwise the if condition would be too long: if ((audioPrivateTracks.size() + videoPrivateTracks.size()) &gt; 0 &amp;&amp;  !(m_audioPrivateTracks.size() + m_videoPrivateTracks.size()))

What do you think?

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:163
&gt; &gt; +    for (size_t i = 0; i &lt; sourceVector.size(); ++i) {
&gt; &gt; +        if (id == sourceVector[i]-&gt;id())
&gt; &gt; +            return true;
&gt; &gt;      }
&gt; &gt; +
&gt; &gt; +    return false;
&gt; 
&gt; Can you use sourceVector.find() here?

I could use that, but I don&apos;t if that would be safe enough, unless it is guaranteed that would never happen sources of the same id in different objects.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.h:59
&gt; &gt; +    static PassRefPtr&lt;MediaStreamDescriptor&gt; create(const MediaStreamSourceVector&amp; audioSources, const MediaStreamSourceVector&amp; videoSources);
&gt; &gt; +    static PassRefPtr&lt;MediaStreamDescriptor&gt; create(const MediaStreamTrackPrivateVector&amp; audioPrivateTracks, const MediaStreamTrackPrivateVector&amp; videoPrivateTracks);
&gt; 
&gt; Nit: You can return RefPtr here. PassRefPtrs aren&apos;t needed since Anders added move-semantics to the RefPtr class.

OK.

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:119
&gt; &gt; +typedef Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt; MediaStreamTrackPrivateVector;
&gt; 
&gt; This is unnecessary.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945112</commentid>
    <comment_count>11</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-30 12:12:43 -0700</bug_when>
    <thetext>Changing MediaStreamDescriptor::create return to RefPtr will lead to some other modifications in MediaStream and whoever depends on them, and the code will be with half RefPtr and half PassRefPtr, which, in my opinion, will be very messy and confusing. I think this kind of modification must be done in a patch that changes all PassRefPtr to RefPtr of a given class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945121</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 12:35:32 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Changing MediaStreamDescriptor::create return to RefPtr will lead to some other modifications in MediaStream and whoever depends on them, and the code will be with half RefPtr and half PassRefPtr, which, in my opinion, will be very messy and confusing. I think this kind of modification must be done in a patch that changes all PassRefPtr to RefPtr of a given class.

That seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945183</commentid>
    <comment_count>13</comment_count>
      <attachid>215563</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-30 14:23:28 -0700</bug_when>
    <thetext>Created attachment 215563
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945227</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 16:36:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 215437 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215437&amp;action=review
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:57
&gt; &gt; &gt; +        audioTracks.append(MediaStreamTrackPrivate::create(stream-&gt;m_audioTracks[i]-&gt;source()));
&gt; &gt; 
&gt; &gt; Why are you adding the track&apos;s *source* to the array of *tracks*? Does this even compile?
&gt; 
&gt; No no, I&apos;m creating a MediaStreamTrackPrivate with the given source and adding it to the tracks.
&gt; 
  Oops, you certainly are!

  I don&apos;t think creating new tracks is correct though, should&apos;t you just add the track as-it?

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:50
&gt; &gt; &gt; +PassRefPtr&lt;MediaStreamDescriptor&gt; MediaStreamDescriptor::create(const MediaStreamTrackPrivateVector&amp; audioPrivateTracks, const MediaStreamTrackPrivateVector&amp; videoPrivateTracks)
&gt; &gt; 
&gt; &gt; Ditto.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:121
&gt; &gt; &gt; +    for (size_t i = 0; i &lt; audioSources.size(); i++)
&gt; &gt; &gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(audioSources[i]));
&gt; &gt; &gt; +
&gt; &gt; &gt; +    for (size_t i = 0; i &lt; videoSources.size(); i++)
&gt; &gt; &gt; +        addTrackAndSource(MediaStreamTrackPrivate::create(videoSources[i]));
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Does m_ended need to be set if all sources have ended (readyState == Ended)?
&gt; 
&gt; First I thought to put this behaviour here too, since we create tracks for the passed sources. But, since the spec only states for tracks that are passed to the constructor I left it that way. Maybe we can put this here too. What do you think?
&gt; 
  I think it is a good idea because a stream has ended when all of its tracks have ended.


&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:136
&gt; &gt; &gt; +    unsigned providedTracksSize = audioPrivateTracks.size() + videoPrivateTracks.size();
&gt; &gt; &gt; +    unsigned tracksSize = m_audioPrivateTracks.size() + m_videoPrivateTracks.size();
&gt; &gt; 
&gt; &gt; I don&apos;t think these local variables are necessary.
&gt; 
&gt; I just put them to improve code readability, otherwise the if condition would be too long: if ((audioPrivateTracks.size() + videoPrivateTracks.size()) &gt; 0 &amp;&amp;  !(m_audioPrivateTracks.size() + m_videoPrivateTracks.size()))
&gt; 
&gt; What do you think?
&gt; 

  Your call.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp:163
&gt; &gt; &gt; +    for (size_t i = 0; i &lt; sourceVector.size(); ++i) {
&gt; &gt; &gt; +        if (id == sourceVector[i]-&gt;id())
&gt; &gt; &gt; +            return true;
&gt; &gt; &gt;      }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    return false;
&gt; &gt; 
&gt; &gt; Can you use sourceVector.find() here?
&gt; 
&gt; I could use that, but I don&apos;t if that would be safe enough, unless it is guaranteed that would never happen sources of the same id in different objects.
&gt; 

  It is an error if two sources have the same ID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945241</commentid>
    <comment_count>15</comment_count>
      <attachid>215576</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-30 16:57:32 -0700</bug_when>
    <thetext>Created attachment 215576
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945267</commentid>
    <comment_count>16</comment_count>
      <attachid>215583</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-10-30 17:34:12 -0700</bug_when>
    <thetext>Created attachment 215583
Final patch (I hope)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945273</commentid>
    <comment_count>17</comment_count>
      <attachid>215583</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-10-30 17:48:05 -0700</bug_when>
    <thetext>Comment on attachment 215583
Final patch (I hope)

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

&gt; Source/WebCore/platform/mediastream/MediaStreamDescriptor.h:59
&gt; +    static PassRefPtr&lt;MediaStreamDescriptor&gt; create(const Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt;&amp; audioPrivateTracks, const Vector&lt;RefPtr&lt;MediaStreamTrackPrivate&gt;&gt;&amp; videoPrivateTracks);

Nit: I think this can be made private, for now at least. This can be done in a follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945283</commentid>
    <comment_count>18</comment_count>
      <attachid>215583</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-30 18:13:34 -0700</bug_when>
    <thetext>Comment on attachment 215583
Final patch (I hope)

Clearing flags on attachment: 215583

Committed r158337: &lt;http://trac.webkit.org/changeset/158337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945284</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-30 18:13:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215383</attachid>
            <date>2013-10-29 06:27:38 -0700</date>
            <delta_ts>2013-10-29 13:50:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123443-20131029102737.patch</filename>
            <type>text/plain</type>
            <size>17904</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY5NWI3MDk0NjYwM2Zi
NzRlNDA4YTI4MDFmNDk1OTE5ZDczNTg4Yy4uNDE5YjljNDRhN2EzMDcxMzA1Njc3YzJlYzk0Nzk2
ODlhNDc0MGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEwLTI5ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpIGFuZAorICAgICAg
ICBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sgaWYgYQorICAgICAgICBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3Jp
cHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFt
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFRyYWNrQW5kU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6aGF2ZVNvdXJjZVdpdGhJZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6cmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpudW1iZXJPZkF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6YXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6dmlkZW9UcmFja3MpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU3Ry
ZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjkgIEppbndvbyBTb25n
ICA8amlud29vNy5zb25nQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJlLWVuYWJsZSBzaW1wbGUg
bGluZSBsYXlvdXQgZm9yIEVGTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCA0MzkwZTdiMWYyZGIxZDg2NzkyODg3M2E2OTgx
ODVlNjBjY2E2MDc1Li4zZTQyMWJkNTEzMzJkYmJmM2VhMzQwZGRkMDljYjRjM2E3MTQ2YTQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcApAQCAtNDEsNjggKzQxLDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGJvb2wgY29udGFpbnNTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZVZlY3Rv
ciwgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNvdXJjZVZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoc291cmNlLT5pZCgp
ID09IHNvdXJjZVZlY3RvcltpXS0+aWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3NUcmFjayhNZWRp
YVN0cmVhbVRyYWNrKiB0cmFjaywgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZVZlY3Rv
cikKLXsKLSAgICBpZiAodHJhY2stPmVuZGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1l
ZGlhU3RyZWFtU291cmNlKiBzb3VyY2UgPSB0cmFjay0+c291cmNlKCk7Ci0gICAgaWYgKCFjb250
YWluc1NvdXJjZShzb3VyY2VWZWN0b3IsIHNvdXJjZSkpCi0gICAgICAgIHNvdXJjZVZlY3Rvci5h
cHBlbmQoc291cmNlKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IGNyZWF0
ZUZyb21Tb3VyY2VWZWN0b3JzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFt
U291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpCi17Ci0gICAgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpFbmRlZEF0Q3JlYXRpb25GbGFnIGZsYWcgPSBlbmRlZCA/IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6SXNFbmRlZCA6IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6SXNOb3RFbmRl
ZDsKLSAgICBSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBkZXNjcmlwdG9yID0gTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIGZsYWcp
OwotICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIGRlc2NyaXB0b3IucmVs
ZWFzZSgpKTsKLX0KLQogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciB2aWRl
b1NvdXJjZXM7Ci0KLSAgICByZXR1cm4gY3JlYXRlRnJvbVNvdXJjZVZlY3RvcnMoY29udGV4dCwg
YXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIGZhbHNlKTsKKyAgICByZXR1cm4gTWVkaWFTdHJl
YW06OmNyZWF0ZShjb250ZXh0LCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShNZWRpYVN0
cmVhbVNvdXJjZVZlY3RvcigpLCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvcigpKSk7CiB9CiAKIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKQogewogICAg
IEFTU0VSVChzdHJlYW0pOwogCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3Vy
Y2VzOwotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKKyAgICBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciBhdWRpb1RyYWNrczsKKyAgICBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZVZlY3RvciB2aWRlb1RyYWNrczsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RyZWFtLT5tX2F1ZGlvVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICBwcm9jZXNzVHJh
Y2soc3RyZWFtLT5tX2F1ZGlvVHJhY2tzW2ldLmdldCgpLCBhdWRpb1NvdXJjZXMpOworICAgICAg
ICBhdWRpb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzdHJl
YW0tPm1fYXVkaW9UcmFja3NbaV0tPnNvdXJjZSgpKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0cmVhbS0+bV92aWRlb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvY2Vz
c1RyYWNrKHN0cmVhbS0+bV92aWRlb1RyYWNrc1tpXS5nZXQoKSwgdmlkZW9Tb3VyY2VzKTsKKyAg
ICAgICAgdmlkZW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUo
c3RyZWFtLT5tX3ZpZGVvVHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogCi0gICAgcmV0dXJuIGNyZWF0
ZUZyb21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBz
dHJlYW0tPmVuZGVkKCkpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQs
IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNrcykp
OwogfQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tWZWN0b3Im
IHRyYWNrcykKIHsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0g
ICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlVmVjdG9yIGF1ZGlvVHJhY2tzOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlVmVjdG9yIHZpZGVvVHJhY2tzOwogCi0gICAgYm9vbCBhbGxFbmRlZCA9IHRydWU7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYWxs
RW5kZWQgJj0gdHJhY2tzW2ldLT5lbmRlZCgpOwotICAgICAgICBwcm9jZXNzVHJhY2sodHJhY2tz
W2ldLmdldCgpLCB0cmFja3NbaV0tPmtpbmQoKSA9PSAiYXVkaW8iID8gYXVkaW9Tb3VyY2VzIDog
dmlkZW9Tb3VyY2VzKTsKKyAgICAgICAgaWYgKHRyYWNrc1tpXS0+a2luZCgpID09ICJhdWRpbyIp
CisgICAgICAgICAgICBhdWRpb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
OmNyZWF0ZSh0cmFja3NbaV0tPnNvdXJjZSgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZpZGVvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHRyYWNr
c1tpXS0+c291cmNlKCkpKTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlRnJvbVNvdXJjZVZl
Y3RvcnMoY29udGV4dCwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIGFsbEVuZGVkKTsKKyAg
ICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LCBNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OmNyZWF0ZShhdWRpb1RyYWNrcywgdmlkZW9UcmFja3MpKTsKIH0KIAogUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gc3RyZWFtRGVzY3JpcHRv
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IGE0YjMyZjUxMjIz
NTdlMDczNDFiZGE0MDBjMWQ3MDExYWJiODhhNDYuLmE2NGRhNTM0MzU0Nzk3M2QzZmMxOTYyYzM2
NTdiY2M2ZDY1NjRhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApA
QCAtNTEsNyArNTEsNyBAQCBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpNZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCogYwogICAgIG1fc291cmNlID0g
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y3JlYXRlKCk7CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2VW
ZWN0b3IgYXVkaW9Tb3VyY2VzOwogICAgIGF1ZGlvU291cmNlcy5hcHBlbmQobV9zb3VyY2UpOwot
ICAgIG1fc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpJc05vdEVu
ZGVkKSk7CisgICAgbV9zdHJlYW0gPSBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9T
b3VyY2VzLCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvcigpKSk7CiAKICAgICBtX3NvdXJjZS0+c2V0
QXVkaW9Gb3JtYXQobnVtYmVyT2ZDaGFubmVscywgY29udGV4dC0+c2FtcGxlUmF0ZSgpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKaW5kZXggODJjYjNmNDE0MGRlNjI3NTUwNzUyZTc1M2Zk
ZTgwY2VlYWNlYzRkNy4uYWE5Y2Y4ZDEzMTFiZGZmNTE1ZTk1MTdjMmM1N2Q3ZDA0MjQzM2EyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCkBAIC0zNiwxNyArMzYsMjAgQEAKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVy
LmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gTWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpjcmVhdGUoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcywgRW5kZWRBdENyZWF0aW9u
RmxhZyBmbGFnKQorUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1Nv
dXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpLCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgZmxhZyA9PSBJc0Vu
ZGVkKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY3Jl
YXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwor
fQorCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpjcmVhdGUoY29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIGF1ZGlvUHJp
dmF0ZVRyYWNrcywgY29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIHZpZGVvUHJp
dmF0ZVRyYWNrcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvUHJpdmF0ZVRyYWNrcywgdmlk
ZW9Qcml2YXRlVHJhY2tzKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRT
b3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQpAQCAtOTgsMjEgKzEw
MSw2MCBAQCB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlUmVtb3RlU291cmNlKE1l
ZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCiAgICAgICAgIHJlbW92ZVNvdXJjZShzb3VyY2UpOwog
fQogCi1NZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBT
dHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVuZGVkKQor
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5n
JiBpZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3Qg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykKICAgICA6IG1fY2xpZW50KDAp
CiAgICAgLCBtX2lkKGlkKQotICAgICwgbV9lbmRlZChlbmRlZCkKKyAgICAsIG1fZW5kZWQoZmFs
c2UpCiB7CiAgICAgQVNTRVJUKG1faWQubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXVkaW9Tb3VyY2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1fYXVkaW9TdHJlYW1T
b3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZXNbaV0pOwotICAgICAgICBtX2F1ZGlvVHJhY2tEZXNj
cmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJj
ZXNbaV0pKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMu
c2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5kU291cmNlKGF1ZGlvU291cmNlc1tpXSwg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXNbaV0pKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9Tb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAg
ICBhZGRUcmFja0FuZFNvdXJjZSh2aWRlb1NvdXJjZXNbaV0sIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjcmVhdGUodmlkZW9Tb3VyY2VzW2ldKSk7Cit9CisKK01lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlVmVjdG9yJiBhdWRpb1ByaXZhdGVUcmFja3MsIGNvbnN0IE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlVmVjdG9yJiB2aWRlb1ByaXZhdGVUcmFja3MpCisgICAgOiBtX2NsaWVu
dCgwKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fZW5kZWQoZmFsc2UpCit7CisgICAgQVNTRVJU
KG1faWQubGVuZ3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Qcml2YXRl
VHJhY2tzLnNpemUoKTsgaSsrKQorICAgICAgICBhZGRUcmFja0FuZFNvdXJjZShhdWRpb1ByaXZh
dGVUcmFja3NbaV0tPnNvdXJjZSgpLCBhdWRpb1ByaXZhdGVUcmFja3NbaV0pOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyBpKyspCisgICAg
ICAgIGFkZFRyYWNrQW5kU291cmNlKHZpZGVvUHJpdmF0ZVRyYWNrc1tpXS0+c291cmNlKCksIHZp
ZGVvUHJpdmF0ZVRyYWNrc1tpXSk7CisKKyAgICB1bnNpZ25lZCBwcm92aWRlZFRyYWNrc1NpemUg
PSBhdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpICsgdmlkZW9Qcml2YXRlVHJhY2tzLnNpemUoKTsK
KyAgICB1bnNpZ25lZCB0cmFja3NTaXplID0gbV9hdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpICsg
bV92aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOworICAgIC8vIElmIHRyYWNrcyB3ZXJlIHByb3Zp
ZGVkIGFuZCBubyBvbmUgd2FzIGFkZGVkIHRvIHRoZSBNZWRpYVN0cmVhbURlc2NyaXB0b3IncyB0
cmFja3MsIHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSB0cmFja3Mgd2VyZSBhbGwgZW5kZWQK
KyAgICBpZiAocHJvdmlkZWRUcmFja3NTaXplID4gMCAmJiAhdHJhY2tzU2l6ZSkKKyAgICAgICAg
bV9lbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFj
a0FuZFNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UsIFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQoreworICAgIGlmICh0cmFjay0+ZW5k
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRl
b1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBw
ZW5kKHZpZGVvU291cmNlc1tpXSk7Ci0gICAgICAgIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzLmFw
cGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVvU291cmNlc1tpXSkpOwor
ICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yJiB0cmFja1ZlY3RvciA9IHNvdXJjZS0+
dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9Qcml2YXRlVHJhY2tz
IDogbV92aWRlb1ByaXZhdGVUcmFja3M7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNv
dXJjZVZlY3RvciA9IHNvdXJjZS0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/
IG1fYXVkaW9TdHJlYW1Tb3VyY2VzIDogbV92aWRlb1N0cmVhbVNvdXJjZXM7CisKKyAgICB0cmFj
a1ZlY3Rvci5hcHBlbmQodHJhY2spOworICAgIGlmICghaGF2ZVNvdXJjZVdpdGhJZChzb3VyY2Ut
PmlkKCksIHNvdXJjZVZlY3RvcikpCisgICAgICAgIHNvdXJjZVZlY3Rvci5hcHBlbmQoc291cmNl
KTsKK30KKworYm9vbCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmhhdmVTb3VyY2VXaXRoSWQoY29u
c3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZVZlY3Rv
cikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZVZlY3Rvci5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoaWQgPT0gc291cmNlVmVjdG9yW2ldLT5pZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6c2V0RW5kZWQoKQpAQCAtMTI1LDcgKzE2Nyw3IEBAIHZvaWQg
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpzZXRFbmRlZCgpCiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjphZGRUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFj
aykKIHsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNr
cyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1Ry
YWNrRGVzY3JpcHRvcnMgOiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0g
TWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1ByaXZhdGVUcmFja3MgOiBtX3ZpZGVv
UHJpdmF0ZVRyYWNrczsKIAogICAgIHNpemVfdCBwb3MgPSB0cmFja3MuZmluZCh0cmFjayk7CiAg
ICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKQEAgLTEzNiw3ICsxNzgsNyBAQCB2b2lkIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4gdHJhY2spCiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVUcmFjayhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjaykKIHsKLSAgICBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0g
TWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMgOiBtX3Zp
ZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1
ZGlvID8gbV9hdWRpb1ByaXZhdGVUcmFja3MgOiBtX3ZpZGVvUHJpdmF0ZVRyYWNrczsKIAogICAg
IHNpemVfdCBwb3MgPSB0cmFja3MuZmluZCh0cmFjayk7CiAgICAgaWYgKHBvcyA9PSBub3RGb3Vu
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKaW5kZXggNWUxNGZhNzYwZmQ5ZmY2NzcyZWY2MjU3ZDZm
ZDY1YjM1ZDYxZjE2My4uZGI5OTBlMDg1MTMzMGZlOWZkZDQ5MTQyMzA1ZTA3Y2E4NDY1MDQ4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtU291cmNlLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgorI2luY2x1
ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTU0LDkgKzU1LDggQEAgcHVibGljOgog
CiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IHsKIHB1YmxpYzoKLSAgICBlbnVtIEVuZGVkQXRDcmVhdGlvbkZsYWcg
eyBJc05vdEVuZGVkLCBJc0VuZGVkIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVk
aW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBF
bmRlZEF0Q3JlYXRpb25GbGFnKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURl
c2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3Vy
Y2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdmlkZW9Qcml2YXRlVHJhY2tzKTsKIAogICAgIHZp
cnR1YWwgfk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgfQogCkBAIC03MSwxMSArNzEsMTEgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9Tb3VyY2VzKCkgY29uc3QgeyByZXR1
cm4gbV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6ZSgpOyB9CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2Uq
IHZpZGVvU291cmNlcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVh
bVNvdXJjZXNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJh
Y2tzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuc2l6ZSgpOyB9Ci0g
ICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9yc1tpbmRleF0uZ2V0KCk7IH0KKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1By
aXZhdGVUcmFja3Muc2l6ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlv
VHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvUHJpdmF0ZVRyYWNr
c1tpbmRleF0uZ2V0KCk7IH0KIAotICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBj
b25zdCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9ycy5zaXplKCk7IH0KLSAgICBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzW2luZGV4XS5nZXQoKTsgfQorICAgIHVuc2ln
bmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvUHJpdmF0ZVRy
YWNrcy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3Mo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Qcml2YXRlVHJhY2tzW2luZGV4
XS5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNv
dXJjZT4pOwogICAgIHZvaWQgcmVtb3ZlU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+KTsKQEAgLTkwLDE1ICs5MCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUcmFjayhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CiAKIHByaXZhdGU6Ci0gICAgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2
aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25z
dCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2Vz
LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGVWZWN0b3ImIGF1ZGlvUHJpdmF0ZVRyYWNrcywgY29uc3QgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGVWZWN0b3ImIHZpZGVvUHJpdmF0ZVRyYWNrcyk7CisKKyAgICB2b2lkIGFkZFRyYWNr
QW5kU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+LCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPik7CisgICAgYm9vbCBoYXZlU291cmNlV2l0aElkKGNvbnN0IFN0
cmluZyYsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJik7CiAKICAgICBNZWRpYVN0cmVh
bURlc2NyaXB0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX2lkOwotICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX2F1ZGlvU3RyZWFtU291cmNlczsKLSAgICBW
ZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gbV92aWRlb1N0cmVhbVNvdXJjZXM7Cisg
ICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgbV9hdWRpb1N0cmVhbVNvdXJjZXM7CisgICAgTWVk
aWFTdHJlYW1Tb3VyY2VWZWN0b3IgbV92aWRlb1N0cmVhbVNvdXJjZXM7CiAKLSAgICBWZWN0b3I8
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnM7
Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fdmlkZW9UcmFj
a0Rlc2NyaXB0b3JzOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yIG1fYXVkaW9Q
cml2YXRlVHJhY2tzOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yIG1fdmlkZW9Q
cml2YXRlVHJhY2tzOwogICAgIGJvb2wgbV9lbmRlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZS5oCmluZGV4IGEwOTA5NTg1NmM3ZjU5NzNjZDMzZjU2OTI5MzZkZTBhNmZmMjBjNGIuLjk3
Yzg0MzllOTdlZjY4OWE4MTQ3MmU1YzgzMzc5YmNhZmU1MDE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuaApAQCAtOTIsNiArOTIsOCBAQCBwcml2YXRlOgogICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKIH07CiAKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yOwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFN
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJl
YW1DZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJl
YW1DZW50ZXIuY3BwCmluZGV4IDhmOTdiNjFlNWZhMzM3NTE1MGEyMGJjZTA1YTVkNWE4NmUyMzI4
MzQuLmMxOTQ2NzgwNzMxYzRlNzM0YjY0YzY4NzI3NTJkYzZmNjljYTI3NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5j
cHAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRl
TWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBNZWRpYVN0cmVhbURl
c2NyaXB0b3I6OklzTm90RW5kZWQpKTsKKyAgICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwog
fQogCiBib29sIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJj
ZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+IHBycENs
aWVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215419</attachid>
            <date>2013-10-29 13:50:16 -0700</date>
            <delta_ts>2013-10-29 15:12:45 -0700</delta_ts>
            <desc>Fixing old patch</desc>
            <filename>bug-123443-20131029175015.patch</filename>
            <type>text/plain</type>
            <size>17928</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZkMmIxM2ZjZDU2ZmRl
ODk3MzYxZWI3MzVmYzJjN2VjMDVjNzJlYy4uM2E0NGQyNGE1MzZmOTk3YjU4ZjgxZmUwOGJjMTEz
NTdiMDFjNWNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEwLTI5ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpCisgICAgICAgIGFu
ZCBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgaWYgYSBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3Jp
cHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFt
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFRyYWNrQW5kU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6aGF2ZVNvdXJjZVdpdGhJZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6cmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpudW1iZXJPZkF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6YXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6dmlkZW9UcmFja3MpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU3Ry
ZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjkgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgU2ltcGxlTGluZUxheW91dDo6
TGF5b3V0IGEgdmFyaWFibGUgc2l6ZSBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKaW5kZXggNDM5MGU3YjFmMmRiMWQ4Njc5
Mjg4NzNhNjk4MTg1ZTYwY2NhNjA3NS4uM2U0MjFiZDUxMzMyZGJiZjNlYTM0MGRkZDA5Y2I0YzNh
NzE0NmE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbS5jcHAKQEAgLTQxLDY4ICs0MSw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zU291cmNlKE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBz
b3VyY2VWZWN0b3IsIE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCi17Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzb3VyY2VWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHNv
dXJjZS0+aWQoKSA9PSBzb3VyY2VWZWN0b3JbaV0tPmlkKCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNz
VHJhY2soTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBz
b3VyY2VWZWN0b3IpCi17Ci0gICAgaWYgKHRyYWNrLT5lbmRlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlID0gdHJhY2stPnNvdXJjZSgpOwotICAg
IGlmICghY29udGFpbnNTb3VyY2Uoc291cmNlVmVjdG9yLCBzb3VyY2UpKQotICAgICAgICBzb3Vy
Y2VWZWN0b3IuYXBwZW5kKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVuZGVkKQotewotICAg
IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6RW5kZWRBdENyZWF0aW9uRmxhZyBmbGFnID0gZW5kZWQg
PyBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzRW5kZWQgOiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6
OklzTm90RW5kZWQ7Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gZGVzY3JpcHRv
ciA9IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzLCBmbGFnKTsKLSAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LCBkZXNj
cmlwdG9yLnJlbGVhc2UoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3Ry
ZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBNZWRp
YVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VW
ZWN0b3IgdmlkZW9Tb3VyY2VzOwotCi0gICAgcmV0dXJuIGNyZWF0ZUZyb21Tb3VyY2VWZWN0b3Jz
KGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBmYWxzZSk7CisgICAgcmV0dXJu
IE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVh
dGUoTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSwgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSkp
OwogfQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVh
bSkKIHsKICAgICBBU1NFUlQoc3RyZWFtKTsKIAotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9y
IGF1ZGlvU291cmNlczsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciB2aWRlb1NvdXJjZXM7
CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3IgYXVkaW9UcmFja3M7CisgICAgTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3IgdmlkZW9UcmFja3M7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0cmVhbS0+bV9hdWRpb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cHJvY2Vzc1RyYWNrKHN0cmVhbS0+bV9hdWRpb1RyYWNrc1tpXS5nZXQoKSwgYXVkaW9Tb3VyY2Vz
KTsKKyAgICAgICAgYXVkaW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpj
cmVhdGUoc3RyZWFtLT5tX2F1ZGlvVHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdHJlYW0tPm1fdmlkZW9UcmFja3Muc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHByb2Nlc3NUcmFjayhzdHJlYW0tPm1fdmlkZW9UcmFja3NbaV0uZ2V0KCksIHZpZGVvU291
cmNlcyk7CisgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6Y3JlYXRlKHN0cmVhbS0+bV92aWRlb1RyYWNrc1tpXS0+c291cmNlKCkpKTsKIAotICAgIHJl
dHVybiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJjZXMsIHZpZGVv
U291cmNlcywgc3RyZWFtLT5lbmRlZCgpKTsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0
ZShjb250ZXh0LCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1RyYWNrcywgdmlk
ZW9UcmFja3MpKTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBNZWRpYVN0cmVhbVRy
YWNrVmVjdG9yJiB0cmFja3MpCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9T
b3VyY2VzOwotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKKyAgICBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciBhdWRpb1RyYWNrczsKKyAgICBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZVZlY3RvciB2aWRlb1RyYWNrczsKIAotICAgIGJvb2wgYWxsRW5kZWQgPSB0
cnVlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGFsbEVuZGVkICY9IHRyYWNrc1tpXS0+ZW5kZWQoKTsKLSAgICAgICAgcHJvY2Vzc1Ry
YWNrKHRyYWNrc1tpXS5nZXQoKSwgdHJhY2tzW2ldLT5raW5kKCkgPT0gImF1ZGlvIiA/IGF1ZGlv
U291cmNlcyA6IHZpZGVvU291cmNlcyk7CisgICAgICAgIGlmICh0cmFja3NbaV0tPmtpbmQoKSA9
PSAiYXVkaW8iKQorICAgICAgICAgICAgYXVkaW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlOjpjcmVhdGUodHJhY2tzW2ldLT5zb3VyY2UoKSkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNy
ZWF0ZSh0cmFja3NbaV0tPnNvdXJjZSgpKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZy
b21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBhbGxF
bmRlZCk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzKSk7CiB9CiAKIFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVh
bURlc2NyaXB0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCBh
NGIzMmY1MTIyMzU3ZTA3MzQxYmRhNDAwYzFkNzAxMWFiYjg4YTQ2Li5hNjRkYTUzNDM1NDc5NzNk
M2ZjMTk2MmMzNjU3YmNjNmQ2NTY0YTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGMKICAgICBt
X3NvdXJjZSA9IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNyZWF0ZSgpOwogICAgIE1lZGlhU3Ry
ZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1f
c291cmNlKTsKLSAgICBtX3N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRp
b1NvdXJjZXMsIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yKCksIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6SXNOb3RFbmRlZCkpOworICAgIG1fc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250
ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3Jl
YXRlKGF1ZGlvU291cmNlcywgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSkpOwogCiAgICAgbV9z
b3VyY2UtPnNldEF1ZGlvRm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIGNvbnRleHQtPnNhbXBsZVJh
dGUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCmluZGV4IDgyY2IzZjQxNDBkZTYyNzU1
MDc1MmU3NTNmZGU4MGNlZWFjZWM0ZDcuLjMxYTk1MDM1MjNmZTNmY2JhNGE0ZTQ2ZTc4Nzg5NjNl
OGM3YjgxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtMzYsMTcgKzM2LDIwIEBA
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAKICNpbmNsdWRlICJNZWRpYVN0
cmVhbUNlbnRlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAi
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1Nv
dXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIEVuZGVk
QXRDcmVhdGlvbkZsYWcgZmxhZykKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3Rv
ciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3Vy
Y2VzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIGZs
YWcgPT0gSXNFbmRlZCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1Nv
dXJjZXMpKTsKK30KKworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9y
JiBhdWRpb1ByaXZhdGVUcmFja3MsIGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9y
JiB2aWRlb1ByaXZhdGVUcmFja3MpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0
cmVhbURlc2NyaXB0b3IoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBhdWRpb1ByaXZhdGVU
cmFja3MsIHZpZGVvUHJpdmF0ZVRyYWNrcykpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6YWRkU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKQEAg
LTk4LDIxICsxMDEsNjAgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVJlbW90
ZVNvdXJjZShNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQogICAgICAgICByZW1vdmVTb3VyY2Uo
c291cmNlKTsKIH0KIAotTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0
b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlv
U291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcywgYm9v
bCBlbmRlZCkKK01lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNv
bnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJj
ZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpCiAgICAgOiBt
X2NsaWVudCgwKQogICAgICwgbV9pZChpZCkKLSAgICAsIG1fZW5kZWQoZW5kZWQpCisgICAgLCBt
X2VuZGVkKGZhbHNlKQogewogICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBtX2F1
ZGlvU3RyZWFtU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2VzW2ldKTsKLSAgICAgICAgbV9hdWRp
b1RyYWNrRGVzY3JpcHRvcnMuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUo
YXVkaW9Tb3VyY2VzW2ldKSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVk
aW9Tb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAgICBhZGRUcmFja0FuZFNvdXJjZShhdWRpb1Nv
dXJjZXNbaV0sIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzW2ld
KSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkr
KykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2UodmlkZW9Tb3VyY2VzW2ldLCBNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVvU291cmNlc1tpXSkpOworfQorCitNZWRpYVN0cmVh
bURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25z
dCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25z
dCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdmlkZW9Qcml2YXRlVHJhY2tzKQorICAg
IDogbV9jbGllbnQoMCkKKyAgICAsIG1faWQoaWQpCisgICAgLCBtX2VuZGVkKGZhbHNlKQorewor
ICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1
ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2Uo
YXVkaW9Qcml2YXRlVHJhY2tzW2ldLT5zb3VyY2UoKSwgYXVkaW9Qcml2YXRlVHJhY2tzW2ldKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9Qcml2YXRlVHJhY2tzLnNpemUoKTsg
aSsrKQorICAgICAgICBhZGRUcmFja0FuZFNvdXJjZSh2aWRlb1ByaXZhdGVUcmFja3NbaV0tPnNv
dXJjZSgpLCB2aWRlb1ByaXZhdGVUcmFja3NbaV0pOworCisgICAgdW5zaWduZWQgcHJvdmlkZWRU
cmFja3NTaXplID0gYXVkaW9Qcml2YXRlVHJhY2tzLnNpemUoKSArIHZpZGVvUHJpdmF0ZVRyYWNr
cy5zaXplKCk7CisgICAgdW5zaWduZWQgdHJhY2tzU2l6ZSA9IG1fYXVkaW9Qcml2YXRlVHJhY2tz
LnNpemUoKSArIG1fdmlkZW9Qcml2YXRlVHJhY2tzLnNpemUoKTsKKyAgICAvLyBJZiB0cmFja3Mg
d2VyZSBwcm92aWRlZCBhbmQgbm8gb25lIHdhcyBhZGRlZCB0byB0aGUgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yJ3MgdHJhY2tzLCB0aGlzIG1lYW5zCisgICAgLy8gdGhhdCB0aGUgdHJhY2tzIHdlcmUg
YWxsIGVuZGVkCisgICAgaWYgKHByb3ZpZGVkVHJhY2tzU2l6ZSA+IDAgJiYgIXRyYWNrc1NpemUp
CisgICAgICAgIG1fZW5kZWQgPSB0cnVlOworfQorCit2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6YWRkVHJhY2tBbmRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNl
LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjaykKK3sKKyAgICBpZiAo
dHJhY2stPmVuZGVkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmlkZW9Tb3VyY2VzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIG1fdmlkZW9TdHJlYW1T
b3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZXNbaV0pOwotICAgICAgICBtX3ZpZGVvVHJhY2tEZXNj
cmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSh2aWRlb1NvdXJj
ZXNbaV0pKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdHJhY2tWZWN0b3Ig
PSBzb3VyY2UtPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvUHJp
dmF0ZVRyYWNrcyA6IG1fdmlkZW9Qcml2YXRlVHJhY2tzOworICAgIE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiBzb3VyY2VWZWN0b3IgPSBzb3VyY2UtPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6QXVkaW8gPyBtX2F1ZGlvU3RyZWFtU291cmNlcyA6IG1fdmlkZW9TdHJlYW1Tb3VyY2VzOwor
CisgICAgdHJhY2tWZWN0b3IuYXBwZW5kKHRyYWNrKTsKKyAgICBpZiAoIWhhdmVTb3VyY2VXaXRo
SWQoc291cmNlLT5pZCgpLCBzb3VyY2VWZWN0b3IpKQorICAgICAgICBzb3VyY2VWZWN0b3IuYXBw
ZW5kKHNvdXJjZSk7Cit9CisKK2Jvb2wgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpoYXZlU291cmNl
V2l0aElkKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBz
b3VyY2VWZWN0b3IpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VWZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlkID09IHNvdXJjZVZlY3RvcltpXS0+aWQoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnNldEVuZGVkKCkKQEAgLTEyNSwxOCArMTY3
LDIwIEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpzZXRFbmRlZCgpCiAKIHZvaWQgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPiB0cmFjaykKIHsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlv
ID8gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMgOiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAg
ICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNr
LT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1ByaXZhdGVUcmFj
a3MgOiBtX3ZpZGVvUHJpdmF0ZVRyYWNrczsKIAogICAgIHNpemVfdCBwb3MgPSB0cmFja3MuZmlu
ZCh0cmFjayk7CiAgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdHJhY2tzLmFwcGVuZCh0cmFjayk7CisgICAgaWYgKHRyYWNrLT5zb3VyY2UoKSkKKyAgICAg
ICAgYWRkU291cmNlKHRyYWNrLT5zb3VyY2UoKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpyZW1vdmVUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0
cmFjaykKIHsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRy
YWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRp
b1RyYWNrRGVzY3JpcHRvcnMgOiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkg
PT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1ByaXZhdGVUcmFja3MgOiBtX3Zp
ZGVvUHJpdmF0ZVRyYWNrczsKIAogICAgIHNpemVfdCBwb3MgPSB0cmFja3MuZmluZCh0cmFjayk7
CiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKaW5kZXggNWUx
NGZhNzYwZmQ5ZmY2NzcyZWY2MjU3ZDZmZDY1YjM1ZDYxZjE2My4uZGI5OTBlMDg1MTMzMGZlOWZk
ZDQ5MTQyMzA1ZTA3Y2E4NDY1MDQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgKQEAgLTM2LDYg
KzM2LDcgQEAKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW1UcmFjay5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTU0LDkgKzU1LDggQEAgcHVibGljOgogCiBjbGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3IgOiBw
dWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHsKIHB1YmxpYzoKLSAgICBl
bnVtIEVuZGVkQXRDcmVhdGlvbkZsYWcgeyBJc05vdEVuZGVkLCBJc0VuZGVkIH07Ci0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBFbmRlZEF0Q3JlYXRpb25GbGFnKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVh
bVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3Rv
ciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgYXVkaW9Q
cml2YXRlVHJhY2tzLCBjb25zdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdmlkZW9Q
cml2YXRlVHJhY2tzKTsKIAogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsg
fQogCkBAIC03MSwxMSArNzEsMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mVmlk
ZW9Tb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6ZSgpOyB9
CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHZpZGVvU291cmNlcyh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNvdXJjZXNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1
bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RyYWNr
RGVzY3JpcHRvcnMuc2l6ZSgpOyB9Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlv
VHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvVHJhY2tEZXNjcmlw
dG9yc1tpbmRleF0uZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tzKCkg
Y29uc3QgeyByZXR1cm4gbV9hdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyB9CisgICAgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2F1ZGlvUHJpdmF0ZVRyYWNrc1tpbmRleF0uZ2V0KCk7IH0KIAotICAgIHVuc2lnbmVk
IG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNjcmlw
dG9ycy5zaXplKCk7IH0KLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3Mo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzW2lu
ZGV4XS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7
IHJldHVybiBtX3ZpZGVvUHJpdmF0ZVRyYWNrcy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlkZW9Qcml2YXRlVHJhY2tzW2luZGV4XS5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRTb3VyY2Uo
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogICAgIHZvaWQgcmVtb3ZlU291cmNlKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKQEAgLTkwLDE1ICs5MCwxOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZW1vdmVUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Pik7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYg
aWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpOworICAgIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYg
dmlkZW9Tb3VyY2VzKTsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBp
ZCwgY29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIGF1ZGlvUHJpdmF0ZVRyYWNr
cywgY29uc3QgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIHZpZGVvUHJpdmF0ZVRyYWNr
cyk7CisKKyAgICB2b2lkIGFkZFRyYWNrQW5kU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1T
b3VyY2U+LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CisgICAgYm9vbCBo
YXZlU291cmNlV2l0aElkKGNvbnN0IFN0cmluZyYsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVj
dG9yJik7CiAKICAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3JDbGllbnQqIG1fY2xpZW50OwogICAg
IFN0cmluZyBtX2lkOwotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX2F1
ZGlvU3RyZWFtU291cmNlczsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4g
bV92aWRlb1N0cmVhbVNvdXJjZXM7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgbV9hdWRp
b1N0cmVhbVNvdXJjZXM7CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgbV92aWRlb1N0cmVh
bVNvdXJjZXM7CiAKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4g
bV9hdWRpb1RyYWNrRGVzY3JpcHRvcnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4+IG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzOworICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlVmVjdG9yIG1fYXVkaW9Qcml2YXRlVHJhY2tzOworICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlVmVjdG9yIG1fdmlkZW9Qcml2YXRlVHJhY2tzOwogICAgIGJvb2wgbV9lbmRlZDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCmluZGV4IGEwOTA5NTg1NmM3ZjU5NzNjZDMz
ZjU2OTI5MzZkZTBhNmZmMjBjNGIuLjk3Yzg0MzllOTdlZjY4OWE4MTQ3MmU1YzgzMzc5YmNhZmU1
MDE4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaApAQCAtOTIsNiArOTIsOCBAQCBwcml2
YXRlOgogICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlQ2xpZW50KiBtX2NsaWVudDsKIH07CiAK
K3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlVmVjdG9yOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCmluZGV4IDhmOTdiNjFlNWZhMzM3
NTE1MGEyMGJjZTA1YTVkNWE4NmUyMzI4MzQuLmMxOTQ2NzgwNzMxYzRlNzM0YjY0YzY4NzI3NTJk
YzZmNjljYTI3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a01lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIE1vY2tN
ZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bUNyZWF0aW9uQ2xpZQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGNsaWVudC0+ZGlkQ3Jl
YXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlk
ZW9Tb3VyY2VzLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKKyAgICBjbGll
bnQtPmRpZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1Nv
dXJjZXMsIHZpZGVvU291cmNlcykpOwogfQogCiBib29sIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6
Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291
cmNlc1JlcXVlc3RDbGllbnQ+IHBycENsaWVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215437</attachid>
            <date>2013-10-29 15:12:50 -0700</date>
            <delta_ts>2013-10-30 14:23:23 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-123443-20131029191249.patch</filename>
            <type>text/plain</type>
            <size>17897</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQwNjA2YTM0ZTQxZGUx
ZWU4OGRhMGRjYmRmNDc0MzIwMzc0NDU5OS4uNGM2YThhN2U4MGY4N2UzZDE2NzZjMjAzNTQ0Zjk2
NzNkZjIzNjAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTEwLTI5ICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpCisgICAgICAgIGFu
ZCBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgaWYgYSBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3Jp
cHRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFt
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFRyYWNrQW5kU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6aGF2ZVNvdXJjZVdpdGhJZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6cmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpudW1iZXJPZkF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6YXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6dmlkZW9UcmFja3MpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU3Ry
ZWFtQ2VudGVyOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIwMTMtMTAtMjkgIEplciBOb2JsZSAg
PGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV0gW01hY10gRW5hYmxlIE1lZGlh
U291cmNlIG9uIHRoZSBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbS5jcHAKaW5kZXggMGVkYjg3MmU2ODUxNjc2MDRmZjJjOWY2YzFmZmNh
NzQyNmI0Mzk0NS4uNDY4OWMyM2RlNjA2MzRkNzA4MzM2OTc3MWQzYThlZWFhOGIzNDE3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5j
cHAKQEAgLTQxLDY4ICs0MSw0MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBi
b29sIGNvbnRhaW5zU291cmNlKE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3Is
IE1lZGlhU3RyZWFtU291cmNlKiBzb3VyY2UpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzb3VyY2VWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHNvdXJjZS0+aWQoKSA9
PSBzb3VyY2VWZWN0b3JbaV0tPmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzVHJhY2soTWVkaWFT
dHJlYW1UcmFjayogdHJhY2ssIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3Ip
Ci17Ci0gICAgaWYgKHRyYWNrLT5lbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRp
YVN0cmVhbVNvdXJjZSogc291cmNlID0gdHJhY2stPnNvdXJjZSgpOwotICAgIGlmICghY29udGFp
bnNTb3VyY2Uoc291cmNlVmVjdG9yLCBzb3VyY2UpKQotICAgICAgICBzb3VyY2VWZWN0b3IuYXBw
ZW5kKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGVG
cm9tU291cmNlVmVjdG9ycyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVuZGVkKQotewotICAgIE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6RW5kZWRBdENyZWF0aW9uRmxhZyBmbGFnID0gZW5kZWQgPyBNZWRpYVN0cmVh
bURlc2NyaXB0b3I6OklzRW5kZWQgOiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQ7
Ci0gICAgUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBmbGFnKTsK
LSAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LCBkZXNjcmlwdG9yLnJlbGVh
c2UoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9T
b3VyY2VzOwotCi0gICAgcmV0dXJuIGNyZWF0ZUZyb21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1
ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBmYWxzZSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFt
OjpjcmVhdGUoY29udGV4dCwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3IoKSwgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSkpOwogfQogCiBQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKIHsKICAgICBB
U1NFUlQoc3RyZWFtKTsKIAotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNl
czsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciB2aWRlb1NvdXJjZXM7CisgICAgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGVWZWN0b3IgYXVkaW9UcmFja3M7CisgICAgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGVWZWN0b3IgdmlkZW9UcmFja3M7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN0cmVhbS0+bV9hdWRpb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvY2Vzc1RyYWNr
KHN0cmVhbS0+bV9hdWRpb1RyYWNrc1tpXS5nZXQoKSwgYXVkaW9Tb3VyY2VzKTsKKyAgICAgICAg
YXVkaW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoc3RyZWFt
LT5tX2F1ZGlvVHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdHJlYW0tPm1fdmlkZW9UcmFja3Muc2l6ZSgpOyArK2kpCi0gICAgICAgIHByb2Nlc3NU
cmFjayhzdHJlYW0tPm1fdmlkZW9UcmFja3NbaV0uZ2V0KCksIHZpZGVvU291cmNlcyk7CisgICAg
ICAgIHZpZGVvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHN0
cmVhbS0+bV92aWRlb1RyYWNrc1tpXS0+c291cmNlKCkpKTsKIAotICAgIHJldHVybiBjcmVhdGVG
cm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgc3Ry
ZWFtLT5lbmRlZCgpKTsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LCBN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1RyYWNrcywgdmlkZW9UcmFja3MpKTsK
IH0KIAogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBNZWRpYVN0cmVhbVRyYWNrVmVjdG9yJiB0
cmFja3MpCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzOwotICAg
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKKyAgICBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZVZlY3RvciBhdWRpb1RyYWNrczsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZVZlY3RvciB2aWRlb1RyYWNrczsKIAotICAgIGJvb2wgYWxsRW5kZWQgPSB0cnVlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGFsbEVu
ZGVkICY9IHRyYWNrc1tpXS0+ZW5kZWQoKTsKLSAgICAgICAgcHJvY2Vzc1RyYWNrKHRyYWNrc1tp
XS5nZXQoKSwgdHJhY2tzW2ldLT5raW5kKCkgPT0gImF1ZGlvIiA/IGF1ZGlvU291cmNlcyA6IHZp
ZGVvU291cmNlcyk7CisgICAgICAgIGlmICh0cmFja3NbaV0tPmtpbmQoKSA9PSAiYXVkaW8iKQor
ICAgICAgICAgICAgYXVkaW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpj
cmVhdGUodHJhY2tzW2ldLT5zb3VyY2UoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2
aWRlb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSh0cmFja3Nb
aV0tPnNvdXJjZSgpKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZyb21Tb3VyY2VWZWN0
b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBhbGxFbmRlZCk7CisgICAg
cmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgTWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpjcmVhdGUoYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzKSk7CiB9CiAKIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IHN0cmVhbURlc2NyaXB0b3Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCBhNGIzMmY1MTIyMzU3
ZTA3MzQxYmRhNDAwYzFkNzAxMWFiYjg4YTQ2Li5hNjRkYTUzNDM1NDc5NzNkM2ZjMTk2MmMzNjU3
YmNjNmQ2NTY0YTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAg
LTUxLDcgKzUxLDcgQEAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGMKICAgICBtX3NvdXJjZSA9IE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNyZWF0ZSgpOwogICAgIE1lZGlhU3RyZWFtU291cmNlVmVj
dG9yIGF1ZGlvU291cmNlczsKICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1fc291cmNlKTsKLSAg
ICBtX3N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yKCksIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6SXNOb3RFbmRl
ZCkpOworICAgIG1fc3RyZWFtID0gTWVkaWFTdHJlYW06OmNyZWF0ZShjb250ZXh0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291
cmNlcywgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSkpOwogCiAgICAgbV9zb3VyY2UtPnNldEF1
ZGlvRm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
RGVzY3JpcHRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuY3BwCmluZGV4IDBkY2JhMzMwNzZiZmFjYTkzZjY5OWU4YTNlYTFk
ODlhNjYwN2QzMTcuLmFiNjY2NTJlOGUwZmU1YWI0Mjg3MGY0N2QwOTZkODNlM2EzZjI5ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
RGVzY3JpcHRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApAQCAtMzYsMTcgKzM2LDIwIEBACiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5o
IgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6
Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIEVuZGVkQXRDcmVhdGlvbkZs
YWcgZmxhZykKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBNZWRpYVN0cmVhbURl
c2NyaXB0b3I6OmNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3Vy
Y2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIGZsYWcgPT0gSXNFbmRl
ZCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKK30K
KworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yJiBhdWRpb1ByaXZh
dGVUcmFja3MsIGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9yJiB2aWRlb1ByaXZh
dGVUcmFja3MpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbURlc2NyaXB0
b3IoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBhdWRpb1ByaXZhdGVUcmFja3MsIHZpZGVv
UHJpdmF0ZVRyYWNrcykpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YWRkU291
cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKQEAgLTEwNCwyMyArMTA3
LDYwIEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVSZW1vdGVTb3VyY2UoTWVk
aWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKICAgICAgICAgcmVtb3ZlU291cmNlKHNvdXJjZSk7CiB9
CiAKLU1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0
cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpCitN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcm
IGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQogICAgIDogbV9jbGllbnQoMCkK
ICAgICAsIG1faWQoaWQpCi0gICAgLCBtX2VuZGVkKGVuZGVkKQorICAgICwgbV9lbmRlZChmYWxz
ZSkKIHsKICAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtU291cmNlPiBzb3VyY2UgPSBhdWRpb1NvdXJjZXNbaV07Ci0gICAgICAgIG1fYXVkaW9TdHJl
YW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgICAgICBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9y
cy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKLSAgICB9
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspCisg
ICAgICAgIGFkZFRyYWNrQW5kU291cmNlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUo
YXVkaW9Tb3VyY2VzW2ldKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291
cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2UoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OmNyZWF0ZSh2aWRlb1NvdXJjZXNbaV0pKTsKK30KKworTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIGF1ZGlvUHJpdmF0ZVRyYWNrcywgY29uc3Qg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGVWZWN0b3ImIHZpZGVvUHJpdmF0ZVRyYWNrcykKKyAgICA6
IG1fY2xpZW50KDApCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9lbmRlZChmYWxzZSkKK3sKKyAg
ICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRp
b1ByaXZhdGVUcmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5kU291cmNlKGF1
ZGlvUHJpdmF0ZVRyYWNrc1tpXSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVv
UHJpdmF0ZVRyYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2Uodmlk
ZW9Qcml2YXRlVHJhY2tzW2ldKTsKKworICAgIHVuc2lnbmVkIHByb3ZpZGVkVHJhY2tzU2l6ZSA9
IGF1ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCkgKyB2aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOwor
ICAgIHVuc2lnbmVkIHRyYWNrc1NpemUgPSBtX2F1ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCkgKyBt
X3ZpZGVvUHJpdmF0ZVRyYWNrcy5zaXplKCk7CisgICAgLy8gSWYgdHJhY2tzIHdlcmUgcHJvdmlk
ZWQgYW5kIG5vIG9uZSB3YXMgYWRkZWQgdG8gdGhlIE1lZGlhU3RyZWFtRGVzY3JpcHRvcidzIHRy
YWNrcywgdGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhlIHRyYWNrcyB3ZXJlIGFsbCBlbmRlZAor
ICAgIGlmIChwcm92aWRlZFRyYWNrc1NpemUgPiAwICYmICF0cmFja3NTaXplKQorICAgICAgICBt
X2VuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFRyYWNr
QW5kU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQorewor
ICAgIGlmICh0cmFjay0+ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSB2aWRlb1NvdXJjZXNbaV07Ci0gICAgICAgIG1f
dmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgICAgICBtX3ZpZGVvVHJhY2tE
ZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2Up
KTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdHJhY2tWZWN0b3IgPSB0cmFj
ay0+c291cmNlKCktPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlv
UHJpdmF0ZVRyYWNrcyA6IG1fdmlkZW9Qcml2YXRlVHJhY2tzOworICAgIE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3IgPSB0cmFjay0+c291cmNlKCktPnR5cGUoKSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvU3RyZWFtU291cmNlcyA6IG1fdmlkZW9TdHJl
YW1Tb3VyY2VzOworCisgICAgdHJhY2tWZWN0b3IuYXBwZW5kKHRyYWNrKTsKKyAgICBpZiAoIWhh
dmVTb3VyY2VXaXRoSWQodHJhY2stPnNvdXJjZSgpLT5pZCgpLCBzb3VyY2VWZWN0b3IpKQorICAg
ICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKHRyYWNrLT5zb3VyY2UoKSk7Cit9CisKK2Jvb2wgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpoYXZlU291cmNlV2l0aElkKGNvbnN0IFN0cmluZyYgaWQsIGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3IpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzb3VyY2VWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGlkID09IHNvdXJjZVZlY3RvcltpXS0+aWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OnNldEVuZGVkKCkKQEAgLTEzMywxOCArMTczLDIwIEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yOjpzZXRFbmRlZCgpCiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFj
ayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjaykKIHsKLSAgICBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBl
KCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMg
OiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3Vy
Y2U6OkF1ZGlvID8gbV9hdWRpb1ByaXZhdGVUcmFja3MgOiBtX3ZpZGVvUHJpdmF0ZVRyYWNrczsK
IAogICAgIHNpemVfdCBwb3MgPSB0cmFja3MuZmluZCh0cmFjayk7CiAgICAgaWYgKHBvcyAhPSBu
b3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdHJhY2tzLmFwcGVuZCh0cmFjayk7Cisg
ICAgaWYgKHRyYWNrLT5zb3VyY2UoKSkKKyAgICAgICAgYWRkU291cmNlKHRyYWNrLT5zb3VyY2Uo
KSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVUcmFjayhQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjaykKIHsKLSAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVk
aWFTdHJlYW1Tb3VyY2U6OkF1ZGlvID8gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMgOiBtX3ZpZGVv
VHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlv
ID8gbV9hdWRpb1ByaXZhdGVUcmFja3MgOiBtX3ZpZGVvUHJpdmF0ZVRyYWNrczsKIAogICAgIHNp
emVfdCBwb3MgPSB0cmFja3MuZmluZCh0cmFjayk7CiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmgKaW5kZXggNWUxNGZhNzYwZmQ5ZmY2NzcyZWY2MjU3ZDZmZDY1
YjM1ZDYxZjE2My4uYjk5OTBjYWEwNzQ5YTEwZDE2Mzc1MmQ1OTgwZTA0ODhkYjczMzZjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1EZXNjcmlwdG9yLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtU291cmNlLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgorI2luY2x1ZGUg
Ik1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTU0LDkgKzU1LDggQEAgcHVibGljOgogCiBj
bGFzcyBNZWRpYVN0cmVhbURlc2NyaXB0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVh
bURlc2NyaXB0b3I+IHsKIHB1YmxpYzoKLSAgICBlbnVtIEVuZGVkQXRDcmVhdGlvbkZsYWcgeyBJ
c05vdEVuZGVkLCBJc0VuZGVkIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9T
b3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBFbmRl
ZEF0Q3JlYXRpb25GbGFnKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2Vz
LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZVZlY3RvciYgdmlkZW9Qcml2YXRlVHJhY2tzKTsKIAogICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgfQogCkBAIC03MSwxMSArNzEsMTEgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9Tb3VyY2VzKCkgY29uc3QgeyByZXR1cm4g
bV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6ZSgpOyB9CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHZp
ZGVvU291cmNlcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNv
dXJjZXNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tz
KCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuc2l6ZSgpOyB9Ci0gICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9yc1tpbmRleF0uZ2V0KCk7IH0KKyAgICB1
bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1ByaXZh
dGVUcmFja3Muc2l6ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJh
Y2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvUHJpdmF0ZVRyYWNrc1tp
bmRleF0uZ2V0KCk7IH0KIAotICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9ycy5zaXplKCk7IH0KLSAgICBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzW2luZGV4XS5nZXQoKTsgfQorICAgIHVuc2lnbmVk
IG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvUHJpdmF0ZVRyYWNr
cy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Qcml2YXRlVHJhY2tzW2luZGV4XS5n
ZXQoKTsgfQogCiAgICAgdm9pZCBhZGRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJj
ZT4pOwogICAgIHZvaWQgcmVtb3ZlU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
KTsKQEAgLTkwLDE1ICs5MCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUcmFjayhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRl
b1NvdXJjZXMsIGJvb2wgZW5kZWQpOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBT
dHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBNZWRpYVN0
cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGVWZWN0b3ImIGF1ZGlvUHJpdmF0ZVRyYWNrcywgY29uc3QgTWVkaWFTdHJlYW1UcmFja1By
aXZhdGVWZWN0b3ImIHZpZGVvUHJpdmF0ZVRyYWNrcyk7CisKKyAgICB2b2lkIGFkZFRyYWNrQW5k
U291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+KTsKKyAgICBib29sIGhh
dmVTb3VyY2VXaXRoSWQoY29uc3QgU3RyaW5nJiwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0
b3ImKTsKIAogICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvckNsaWVudCogbV9jbGllbnQ7CiAgICAg
U3RyaW5nIG1faWQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+IG1fYXVk
aW9TdHJlYW1Tb3VyY2VzOwotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBt
X3ZpZGVvU3RyZWFtU291cmNlczsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBtX2F1ZGlv
U3RyZWFtU291cmNlczsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBtX3ZpZGVvU3RyZWFt
U291cmNlczsKIAotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBt
X2F1ZGlvVHJhY2tEZXNjcmlwdG9yczsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPj4gbV92aWRlb1RyYWNrRGVzY3JpcHRvcnM7CisgICAgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGVWZWN0b3IgbV9hdWRpb1ByaXZhdGVUcmFja3M7CisgICAgTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGVWZWN0b3IgbV92aWRlb1ByaXZhdGVUcmFja3M7CiAgICAgYm9vbCBtX2VuZGVkOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgKaW5kZXggYThjNWIwYmQ2ODZkYjU2NDEzZmI5
M2IzMzc3OTIyNGVkODNhYzUyYi4uNzBmMzMxMDA2NmJhNTAyMjEyYjliYzFhMDNiNzcyZjQ1YzY3
NmI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCkBAIC0xMTYsNiArMTE2LDggQEAgcHJp
dmF0ZToKICAgICBib29sIG1faWdub3JlTXV0YXRpb25zOwogfTsKIAordHlwZWRlZiBWZWN0b3I8
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGVW
ZWN0b3I7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tN
ZWRpYVN0cmVhbUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tN
ZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggOTA3ZGM1MjUxYjQyOTNmZDMwNjY3OWJjZGQ3MmY2
NTUyYTNmNmFkYS4uNzBiZDVkYWZmNzAwNGUwZWFhNjQ0OWNhN2ZkNjJhNWExN2VmNmY0OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFt
Q2VudGVyLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgTW9ja01lZGlhU3RyZWFtQ2VudGVy
OjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllCiAg
ICAgICAgIHZpZGVvU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKICAgICB9
CiAgICAgCi0gICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6SXNOb3RFbmRlZCkpOworICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3RyZWFt
RGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKSk7CiB9CiAKIGJv
b2wgTW9ja01lZGlhU3RyZWFtQ2VudGVyOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4gcHJwQ2xpZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215563</attachid>
            <date>2013-10-30 14:23:28 -0700</date>
            <delta_ts>2013-10-30 16:57:27 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-123443-20131030182327.patch</filename>
            <type>text/plain</type>
            <size>18863</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTI1MmU5NGJkZjJiMzY0
YTVkNDczMTk4YzYxZGYzZjk3ZDMyMjMxNi4uYjFiMDE0Nzc2Njk2NjVmZDEwYTlmMzllMzdkNWY4
ODFkZWRkNGJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTEwLTMwICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpCisgICAgICAgIGFu
ZCBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgaWYgYSBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgdmFyaWFibGVz
IGluIG9uZSBjcmVhdGUgbWV0aG9kIGFuZCB1c2luZyBuZXcKKyAgICAgICAgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpjcmVhdGUgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlIG9iamVjdHMgYXMgcGFyYW1ldGVyLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUpOiBSZW1vdmVkIHBhc3NpbmcgZmxhZyB0bworICAgICAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3IgY3JlYXRlLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKTogUmVtb3ZlZCBFbmRlZEF0Q3JlYXRpb25GbGFnIHBhcmFt
ZXRlciwgYmVjYXVzZSB0aGlzIGlzIGJlaW5nCisgICAgICAgIGhhbmRsZWQgaW5zaWRlIGNvbnN0
cnVjdG9yIGJ5IGFuYWx5emluZyB0aGUgdHJhY2tzIG9yIHNvdXJjZXMgcGFzc2VkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3Ip
OiBBZGRpbmcgbmV3IGNvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mCisgICAgICAg
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIGFzIHBhcmFtdGVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFRyYWNrQW5kU291cmNlKTogSGVscGVyIG1ldGhv
ZCB0byBzdG9yZSBib3RoIHRyYWNrIGFuZCBzb3VyY2UgaW4gdGhlIG9iamVjdC4KKworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpoYXZlU291cmNlV2l0aElkKTogSGVs
cGVyIG1ldGhvZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIHNvdXJjZSBpbiB0aGUgc291cmNlCisg
ICAgICAgIHZlY3RvciB0aGF0IGhhcyB0aGUgZ2l2ZW4gaWQuCisKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YWRkVHJhY2spOiBDaGFuZ2VkIHRvIHN0b3JlIHRoZSB0
cmFjaydzIHNvdXJjZSBpbiB0aGUgb2JqZWN0LgorCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbURlc2NyaXB0b3I6OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6bnVtYmVyT2ZBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6OmF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6bnVtYmVyT2ZWaWRlb1RyYWNrcyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnZpZGVvVHJhY2tzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrTWVkaWFTdHJlYW1DZW50ZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKTogUmVtb3ZpbmcgZmxhZyB0
aGF0IGlzIGJlaW5nIHBhc3NlZCB0bworICAgICAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IncyBj
cmVhdGUgbWV0aG9kLgorCiAyMDEzLTEwLTMwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGJ1aWxkIGZpeDsgZ2l2ZSBNZWRpYUVuZ2lu
ZVN1cHBvcnRQYXJhbWV0ZXJzIHN0cnVjdCBhIGRlZmF1bHQgY29uc3RydWN0b3IuCkBAIC0xNDcs
NyArMTkzLDYgQEAKICAgICAgICAgKiBwbGF0Zm9ybS9lZmwvTUlNRVR5cGVSZWdpc3RyeUVmbC5j
cHA6CiAgICAgICAgICogcGxhdGZvcm0vbWFjL01JTUVUeXBlUmVnaXN0cnlNYWMubW06CiAKLQog
MjAxMy0xMC0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
SURCQ3Vyc29yQmFja2VuZExldmVsREIgc2hvdWxkIGJlIG1hZGUgY3Jvc3MtcGxhdGZvcm0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAK
aW5kZXggMGVkYjg3MmU2ODUxNjc2MDRmZjJjOWY2YzFmZmNhNzQyNmI0Mzk0NS4uNzU0YjRkN2Ew
MzY0NjJkZjBkYWRiODhjZWM4YzEzMWU1MGI2MTFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTQxLDY4ICs0MSw0MCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zU291cmNlKE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3IsIE1lZGlhU3RyZWFtU291cmNlKiBz
b3VyY2UpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VWZWN0b3Iuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKHNvdXJjZS0+aWQoKSA9PSBzb3VyY2VWZWN0b3JbaV0tPmlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzVHJhY2soTWVkaWFTdHJlYW1UcmFjayogdHJhY2ssIE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0b3IpCi17Ci0gICAgaWYgKHRyYWNrLT5l
bmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNl
ID0gdHJhY2stPnNvdXJjZSgpOwotICAgIGlmICghY29udGFpbnNTb3VyY2Uoc291cmNlVmVjdG9y
LCBzb3VyY2UpKQotICAgICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKHNvdXJjZSk7Ci19Ci0KLXN0
YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3Rv
ciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3Vy
Y2VzLCBib29sIGVuZGVkKQotewotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6RW5kZWRBdENy
ZWF0aW9uRmxhZyBmbGFnID0gZW5kZWQgPyBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzRW5kZWQg
OiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQ7Ci0gICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcj4gZGVzY3JpcHRvciA9IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRl
KGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBmbGFnKTsKLSAgICByZXR1cm4gTWVkaWFTdHJl
YW06OmNyZWF0ZShjb250ZXh0LCBkZXNjcmlwdG9yLnJlbGVhc2UoKSk7Ci19Ci0KIFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7
Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOwotCi0gICAgcmV0dXJu
IGNyZWF0ZUZyb21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzLCBmYWxzZSk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSwgTWVk
aWFTdHJlYW1Tb3VyY2VWZWN0b3IoKSkpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBN
ZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkKIHsKICAgICBBU1NFUlQoc3RyZWFtKTsKIAotICAg
IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKLSAgICBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciB2aWRlb1NvdXJjZXM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4+IGF1ZGlvVHJhY2tzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+PiB2aWRlb1RyYWNrczsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RyZWFtLT5tX2F1ZGlvVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAgICBwcm9jZXNzVHJhY2so
c3RyZWFtLT5tX2F1ZGlvVHJhY2tzW2ldLmdldCgpLCBhdWRpb1NvdXJjZXMpOworICAgICAgICBh
dWRpb1RyYWNrcy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzdHJlYW0t
Pm1fYXVkaW9UcmFja3NbaV0tPnNvdXJjZSgpKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0cmVhbS0+bV92aWRlb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvY2Vzc1Ry
YWNrKHN0cmVhbS0+bV92aWRlb1RyYWNrc1tpXS5nZXQoKSwgdmlkZW9Tb3VyY2VzKTsKKyAgICAg
ICAgdmlkZW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoc3Ry
ZWFtLT5tX3ZpZGVvVHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZy
b21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBzdHJl
YW0tPmVuZGVkKCkpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNrcykpOwog
fQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tWZWN0b3ImIHRy
YWNrcykKIHsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBhdWRpb1RyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gdmlkZW9UcmFja3M7CiAKLSAgICBib29sIGFsbEVu
ZGVkID0gdHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYWNrcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBhbGxFbmRlZCAmPSB0cmFja3NbaV0tPmVuZGVkKCk7Ci0gICAgICAgIHBy
b2Nlc3NUcmFjayh0cmFja3NbaV0uZ2V0KCksIHRyYWNrc1tpXS0+a2luZCgpID09ICJhdWRpbyIg
PyBhdWRpb1NvdXJjZXMgOiB2aWRlb1NvdXJjZXMpOworICAgICAgICBpZiAodHJhY2tzW2ldLT5r
aW5kKCkgPT0gImF1ZGlvIikKKyAgICAgICAgICAgIGF1ZGlvVHJhY2tzLmFwcGVuZChNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHRyYWNrc1tpXS0+c291cmNlKCkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdmlkZW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjcmVhdGUodHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogICAgIH0KIAotICAgIHJldHVybiBj
cmVhdGVGcm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNl
cywgYWxsRW5kZWQpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNrcykpOwog
fQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9y
PiBzdHJlYW1EZXNjcmlwdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAK
aW5kZXggYTRiMzJmNTEyMjM1N2UwNzM0MWJkYTQwMGMxZDcwMTFhYmI4OGE0Ni4uYTY0ZGE1MzQz
NTQ3OTczZDNmYzE5NjJjMzY1N2JjYzZkNjU2NGE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwCkBAIC01MSw3ICs1MSw3IEBAIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBj
CiAgICAgbV9zb3VyY2UgPSBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOjpjcmVhdGUoKTsKICAgICBN
ZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7CiAgICAgYXVkaW9Tb3VyY2VzLmFw
cGVuZChtX3NvdXJjZSk7Ci0gICAgbV9zdHJlYW0gPSBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRl
eHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVh
dGUoYXVkaW9Tb3VyY2VzLCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvcigpLCBNZWRpYVN0cmVhbURl
c2NyaXB0b3I6OklzTm90RW5kZWQpKTsKKyAgICBtX3N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVh
dGUoY29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yKCkpKTsKIAog
ICAgIG1fc291cmNlLT5zZXRBdWRpb0Zvcm1hdChudW1iZXJPZkNoYW5uZWxzLCBjb250ZXh0LT5z
YW1wbGVSYXRlKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcAppbmRleCAwZGNiYTMzMDc2
YmZhY2E5M2Y2OTllOGEzZWExZDg5YTY2MDdkMzE3Li40NTkzNjFhMWIyYTBiNTBjYTFkOTkyYTIw
M2RlMDZlYzQ2ZDZjNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKQEAgLTM2LDE3ICsz
NiwyMCBAQAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtRGVzY3JpcHRvci5oIgogCiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW1DZW50ZXIuaCIKLSNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiVVVJRC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYg
YXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2Vz
LCBFbmRlZEF0Q3JlYXRpb25GbGFnIGZsYWcpCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoY29uc3QgTWVkaWFTdHJlYW1Tb3Vy
Y2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZp
ZGVvU291cmNlcykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvU291cmNlcywgdmlkZW9Tb3Vy
Y2VzLCBmbGFnID09IElzRW5kZWQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvU291cmNlcywg
dmlkZW9Tb3VyY2VzKSk7Cit9CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBN
ZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPj4mIGF1ZGlvUHJpdmF0ZVRyYWNrcywgY29uc3QgVmVjdG9yPFJlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiB2aWRlb1ByaXZhdGVUcmFja3MpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpLCBhdWRpb1ByaXZhdGVUcmFja3MsIHZpZGVvUHJpdmF0ZVRyYWNrcykpOwog
fQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YWRkU291cmNlKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKQEAgLTEwNCwyMyArMTA3LDY3IEBAIHZvaWQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVSZW1vdGVTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqIHNv
dXJjZSkKICAgICAgICAgcmVtb3ZlU291cmNlKHNvdXJjZSk7CiB9CiAKLU1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJvb2wgZW5kZWQpCitNZWRpYVN0cmVhbURlc2NyaXB0
b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0
cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZl
Y3RvciYgdmlkZW9Tb3VyY2VzKQogICAgIDogbV9jbGllbnQoMCkKICAgICAsIG1faWQoaWQpCi0g
ICAgLCBtX2VuZGVkKGVuZGVkKQorICAgICwgbV9lbmRlZChmYWxzZSkKIHsKICAgICBBU1NFUlQo
bV9pZC5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2Ug
PSBhdWRpb1NvdXJjZXNbaV07Ci0gICAgICAgIG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChz
b3VyY2UpOwotICAgICAgICBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKLSAgICB9CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5k
U291cmNlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzW2ldKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkrKykK
KyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2UoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0
ZSh2aWRlb1NvdXJjZXNbaV0pKTsKKworICAgIHVuc2lnbmVkIHByb3ZpZGVkU291cmNlc1NpemUg
PSBhdWRpb1NvdXJjZXMuc2l6ZSgpICsgdmlkZW9Tb3VyY2VzLnNpemUoKTsKKyAgICB1bnNpZ25l
ZCB0cmFja3NTaXplID0gbV9hdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpICsgbV92aWRlb1ByaXZh
dGVUcmFja3Muc2l6ZSgpOworICAgIC8vIElmIHNvdXJjZXMgd2VyZSBwcm92aWRlZCBhbmQgbm8g
dHJhY2sgd2FzIGFkZGVkIHRvIHRoZSBNZWRpYVN0cmVhbURlc2NyaXB0b3IncyB0cmFja3MsIHRo
aXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSB0cmFja3Mgd2VyZSBhbGwgZW5kZWQKKyAgICBpZiAo
cHJvdmlkZWRTb3VyY2VzU2l6ZSA+IDAgJiYgIXRyYWNrc1NpemUpCisgICAgICAgIG1fZW5kZWQg
PSB0cnVlOworfQogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSB2
aWRlb1NvdXJjZXNbaV07Ci0gICAgICAgIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3Vy
Y2UpOwotICAgICAgICBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2UpKTsKK01lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHZpZGVvUHJpdmF0ZVRyYWNrcykK
KyAgICA6IG1fY2xpZW50KDApCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9lbmRlZChmYWxzZSkK
K3sKKyAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5kU291
cmNlKGF1ZGlvUHJpdmF0ZVRyYWNrc1tpXSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZpZGVvUHJpdmF0ZVRyYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3Vy
Y2UodmlkZW9Qcml2YXRlVHJhY2tzW2ldKTsKKworICAgIHVuc2lnbmVkIHByb3ZpZGVkVHJhY2tz
U2l6ZSA9IGF1ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCkgKyB2aWRlb1ByaXZhdGVUcmFja3Muc2l6
ZSgpOworICAgIHVuc2lnbmVkIHRyYWNrc1NpemUgPSBtX2F1ZGlvUHJpdmF0ZVRyYWNrcy5zaXpl
KCkgKyBtX3ZpZGVvUHJpdmF0ZVRyYWNrcy5zaXplKCk7CisgICAgLy8gSWYgdHJhY2tzIHdlcmUg
cHJvdmlkZWQgYW5kIG5vIG9uZSB3YXMgYWRkZWQgdG8gdGhlIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cidzIHRyYWNrcywgdGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhlIHRyYWNrcyB3ZXJlIGFsbCBl
bmRlZAorICAgIGlmIChwcm92aWRlZFRyYWNrc1NpemUgPiAwICYmICF0cmFja3NTaXplKQorICAg
ICAgICBtX2VuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFk
ZFRyYWNrQW5kU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNr
KQoreworICAgIGlmICh0cmFjay0+ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiB0cmFja1ZlY3RvciA9IHRyYWNr
LT5zb3VyY2UoKS0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9Q
cml2YXRlVHJhY2tzIDogbV92aWRlb1ByaXZhdGVUcmFja3M7CisgICAgTWVkaWFTdHJlYW1Tb3Vy
Y2VWZWN0b3ImIHNvdXJjZVZlY3RvciA9IHRyYWNrLT5zb3VyY2UoKS0+dHlwZSgpID09IE1lZGlh
U3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9TdHJlYW1Tb3VyY2VzIDogbV92aWRlb1N0cmVh
bVNvdXJjZXM7CisKKyAgICB0cmFja1ZlY3Rvci5hcHBlbmQodHJhY2spOworICAgIGlmICghaGF2
ZVNvdXJjZVdpdGhJZCh0cmFjay0+c291cmNlKCktPmlkKCksIHNvdXJjZVZlY3RvcikpCisgICAg
ICAgIHNvdXJjZVZlY3Rvci5hcHBlbmQodHJhY2stPnNvdXJjZSgpKTsKK30KKworYm9vbCBNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmhhdmVTb3VyY2VXaXRoSWQoY29uc3QgU3RyaW5nJiBpZCwgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHNvdXJjZVZlY3RvcikKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNvdXJjZVZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
aWQgPT0gc291cmNlVmVjdG9yW2ldLT5pZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRv
cjo6c2V0RW5kZWQoKQpAQCAtMTMzLDE4ICsxODAsMjAgQEAgdm9pZCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OnNldEVuZGVkKCkKIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFRyYWNr
KFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQogewotICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUo
KSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycyA6
IG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJj
ZTo6QXVkaW8gPyBtX2F1ZGlvUHJpdmF0ZVRyYWNrcyA6IG1fdmlkZW9Qcml2YXRlVHJhY2tzOwog
CiAgICAgc2l6ZV90IHBvcyA9IHRyYWNrcy5maW5kKHRyYWNrKTsKICAgICBpZiAocG9zICE9IG5v
dEZvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICB0cmFja3MuYXBwZW5kKHRyYWNrKTsKKyAg
ICBpZiAodHJhY2stPnNvdXJjZSgpKQorICAgICAgICBhZGRTb3VyY2UodHJhY2stPnNvdXJjZSgp
KTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVRyYWNrKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQogewotICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUoKSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9ycyA6IG1fdmlkZW9U
cmFja0Rlc2NyaXB0b3JzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8g
PyBtX2F1ZGlvUHJpdmF0ZVRyYWNrcyA6IG1fdmlkZW9Qcml2YXRlVHJhY2tzOwogCiAgICAgc2l6
ZV90IHBvcyA9IHRyYWNrcy5maW5kKHRyYWNrKTsKICAgICBpZiAocG9zID09IG5vdEZvdW5kKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1EZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuaAppbmRleCA1ZTE0ZmE3NjBmZDlmZjY3NzJlZjYyNTdkNmZkNjVi
MzVkNjFmMTYzLi5mMGEyYzIzNjIzMjJmOWVkZDlmNTA3YjEyYjFiY2JlMzA3NWIyZGQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURl
c2NyaXB0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbURlc2NyaXB0b3IuaApAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Tb3VyY2UuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCisjaW5jbHVkZSAi
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTQsOSArNTUsOCBAQCBwdWJsaWM6CiAKIGNs
YXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvciA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFt
RGVzY3JpcHRvcj4gewogcHVibGljOgotICAgIGVudW0gRW5kZWRBdENyZWF0aW9uRmxhZyB7IElz
Tm90RW5kZWQsIElzRW5kZWQgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
RGVzY3JpcHRvcj4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1Nv
dXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIEVuZGVk
QXRDcmVhdGlvbkZsYWcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcj4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMs
IGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25z
dCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHZpZGVvUHJpdmF0ZVRy
YWNrcyk7CiAKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbURlc2NyaXB0b3IoKSB7IH0KIApAQCAt
NzEsMTEgKzcxLDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvU291cmNl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzLnNpemUoKTsgfQogICAgIE1l
ZGlhU3RyZWFtU291cmNlKiB2aWRlb1NvdXJjZXModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQoKTsgfQogCi0gICAgdW5zaWduZWQg
bnVtYmVyT2ZBdWRpb1RyYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UcmFja0Rlc2NyaXB0
b3JzLnNpemUoKTsgfQotICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBhdWRpb1RyYWNrcyh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnNbaW5k
ZXhdLmdldCgpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBdWRpb1RyYWNrcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXVkaW9Qcml2YXRlVHJhY2tzLnNpemUoKTsgfQorICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlKiBhdWRpb1RyYWNrcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9h
dWRpb1ByaXZhdGVUcmFja3NbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZlZpZGVvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1RyYWNrRGVzY3JpcHRvcnMuc2l6
ZSgpOyB9Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHZpZGVvVHJhY2tzKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yc1tpbmRleF0uZ2V0
KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4g
bV92aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUqIHZpZGVvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvUHJp
dmF0ZVRyYWNrc1tpbmRleF0uZ2V0KCk7IH0KIAogICAgIHZvaWQgYWRkU291cmNlKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKICAgICB2b2lkIHJlbW92ZVNvdXJjZShQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPik7CkBAIC05MCwxNSArOTAsMTkgQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4pOwogCiBw
cml2YXRlOgotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIGlkLCBjb25z
dCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVh
bVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVuZGVkKTsKKyAgICBNZWRpYVN0cmVh
bURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0
b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291
cmNlcyk7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVkaW9Qcml2YXRlVHJh
Y2tzLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHZpZGVv
UHJpdmF0ZVRyYWNrcyk7CisKKyAgICB2b2lkIGFkZFRyYWNrQW5kU291cmNlKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+KTsKKyAgICBib29sIGhhdmVTb3VyY2VXaXRoSWQoY29u
c3QgU3RyaW5nJiwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImKTsKIAogICAgIE1lZGlh
U3RyZWFtRGVzY3JpcHRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgU3RyaW5nIG1faWQ7Ci0gICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+IG1fYXVkaW9TdHJlYW1Tb3VyY2VzOwot
ICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX3ZpZGVvU3RyZWFtU291cmNl
czsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBtX2F1ZGlvU3RyZWFtU291cmNlczsKKyAg
ICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBtX3ZpZGVvU3RyZWFtU291cmNlczsKIAotICAgIFZl
Y3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBtX2F1ZGlvVHJhY2tEZXNjcmlw
dG9yczsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV92aWRl
b1RyYWNrRGVzY3JpcHRvcnM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4+IG1fYXVkaW9Qcml2YXRlVHJhY2tzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+PiBtX3ZpZGVvUHJpdmF0ZVRyYWNrczsKICAgICBib29sIG1fZW5kZWQ7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YVN0cmVhbUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YVN0cmVhbUNlbnRlci5jcHAKaW5kZXggOTA3ZGM1MjUxYjQyOTNmZDMwNjY3OWJjZGQ3MmY2NTUy
YTNmNmFkYS4uNzBiZDVkYWZmNzAwNGUwZWFhNjQ0OWNhN2ZkNjJhNWExN2VmNmY0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2Vu
dGVyLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgTW9ja01lZGlhU3RyZWFtQ2VudGVyOjpj
cmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllCiAgICAg
ICAgIHZpZGVvU291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgY2xpZW50LT5kaWRDcmVhdGVTdHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpj
cmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMsIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6
SXNOb3RFbmRlZCkpOworICAgIGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKSk7CiB9CiAKIGJvb2wg
TW9ja01lZGlhU3RyZWFtQ2VudGVyOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4gcHJwQ2xpZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215576</attachid>
            <date>2013-10-30 16:57:32 -0700</date>
            <delta_ts>2013-10-30 17:34:06 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-123443-20131030205731.patch</filename>
            <type>text/plain</type>
            <size>19168</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU4NTAzZGM4NTNiYjNm
ODQ3YzM1NGIxNTlkOGRlZTg4ZmViNTEzMy4uMGU2MzM2YzYwNWIwYWI5ODhkMzU0OGU2MDkyOWQx
MTQ1Yjk0NzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTEwLTMwICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpCisgICAgICAgIGFu
ZCBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgaWYgYSBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgdmFyaWFibGVz
IGluIG9uZSBjcmVhdGUgbWV0aG9kIGFuZCB1c2luZyBuZXcKKyAgICAgICAgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpjcmVhdGUgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlIG9iamVjdHMgYXMgcGFyYW1ldGVyLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUpOiBSZW1vdmVkIHBhc3NpbmcgZmxhZyB0bworICAgICAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3IgY3JlYXRlLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKTogUmVtb3ZlZCBFbmRlZEF0Q3JlYXRpb25GbGFnIHBhcmFt
ZXRlciwgYmVjYXVzZSB0aGlzIGlzIGJlaW5nCisgICAgICAgIGhhbmRsZWQgaW5zaWRlIGNvbnN0
cnVjdG9yIGJ5IGFuYWx5emluZyB0aGUgdHJhY2tzIG9yIHNvdXJjZXMgcGFzc2VkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3Ip
OiBBZGRpbmcgbmV3IGNvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mCisgICAgICAg
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIGFzIHBhcmFtdGVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmFkZFRyYWNrQW5kU291cmNlKTogSGVscGVyIG1ldGhv
ZCB0byBzdG9yZSBib3RoIHRyYWNrIGFuZCBzb3VyY2UgaW4gdGhlIG9iamVjdC4KKworICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFjayk6IENoYW5nZWQgdG8g
c3RvcmUgdGhlIHRyYWNrJ3Mgc291cmNlIGluIHRoZSBvYmplY3QuCisKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZkF1ZGlvVHJhY2tzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YXVkaW9UcmFja3MpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6dmlkZW9UcmFja3MpOgorICAg
ICAgICAqIHBsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBSZW1v
dmluZyBmbGFnIHRoYXQgaXMgYmVpbmcgcGFzc2VkIHRvCisgICAgICAgIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcidzIGNyZWF0ZSBtZXRob2QuCisKIDIwMTMtMTAtMzAgIEFuZHJlYXMgS2xpbmcgIDxh
a2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFRha2UgbGluZSBib3hlcyBvdXQgb2YgdGhlIGFy
ZW5hLgpAQCAtMjc1LDcgKzMxOCw2IEBACiAgICAgICAgICogcGxhdGZvcm0vZWZsL01JTUVUeXBl
UmVnaXN0cnlFZmwuY3BwOgogICAgICAgICAqIHBsYXRmb3JtL21hYy9NSU1FVHlwZVJlZ2lzdHJ5
TWFjLm1tOgogCi0KIDIwMTMtMTAtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIElEQkN1cnNvckJhY2tlbmRMZXZlbERCIHNob3VsZCBiZSBtYWRlIGNyb3Nz
LXBsYXRmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW0uY3BwCmluZGV4IDBlZGI4NzJlNjg1MTY3NjA0ZmYyYzlmNmMxZmZjYTc0MjZiNDM5
NDUuLjA5NzUzMTcxYWE1ZGE2Yjk2MzJkN2U4ZjAyNDNhZmQ5NzUxMGFjZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC00
MSw2OCArNDEsNDAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBjb250
YWluc1NvdXJjZShNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlVmVjdG9yLCBNZWRpYVN0
cmVhbVNvdXJjZSogc291cmNlKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNl
VmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzb3VyY2UtPmlkKCkgPT0gc291cmNl
VmVjdG9yW2ldLT5pZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc1RyYWNrKE1lZGlhU3RyZWFtVHJh
Y2sqIHRyYWNrLCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgc291cmNlVmVjdG9yKQotewotICAg
IGlmICh0cmFjay0+ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVkaWFTdHJlYW1T
b3VyY2UqIHNvdXJjZSA9IHRyYWNrLT5zb3VyY2UoKTsKLSAgICBpZiAoIWNvbnRhaW5zU291cmNl
KHNvdXJjZVZlY3Rvciwgc291cmNlKSkKLSAgICAgICAgc291cmNlVmVjdG9yLmFwcGVuZChzb3Vy
Y2UpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gY3JlYXRlRnJvbVNvdXJj
ZVZlY3RvcnMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0
b3ImIHZpZGVvU291cmNlcywgYm9vbCBlbmRlZCkKLXsKLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0
b3I6OkVuZGVkQXRDcmVhdGlvbkZsYWcgZmxhZyA9IGVuZGVkID8gTWVkaWFTdHJlYW1EZXNjcmlw
dG9yOjpJc0VuZGVkIDogTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkOwotICAgIFJl
ZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IGRlc2NyaXB0b3IgPSBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgZmxhZyk7Ci0gICAgcmV0
dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgZGVzY3JpcHRvci5yZWxlYXNlKCkpOwot
fQotCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Ig
YXVkaW9Tb3VyY2VzOwotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsK
LQotICAgIHJldHVybiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJj
ZXMsIHZpZGVvU291cmNlcywgZmFsc2UpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRl
KGNvbnRleHQsIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yKCksIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yKCkpKTsKIH0KIAogUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pCiB7CiAgICAgQVNTRVJUKHN0
cmVhbSk7CiAKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBhdWRpb1RyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gdmlkZW9UcmFja3M7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0cmVhbS0+bV9hdWRpb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cHJvY2Vzc1RyYWNrKHN0cmVhbS0+bV9hdWRpb1RyYWNrc1tpXS5nZXQoKSwgYXVkaW9Tb3VyY2Vz
KTsKKyAgICAgICAgYXVkaW9UcmFja3MuYXBwZW5kKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpj
cmVhdGUoc3RyZWFtLT5tX2F1ZGlvVHJhY2tzW2ldLT5zb3VyY2UoKSkpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdHJlYW0tPm1fdmlkZW9UcmFja3Muc2l6ZSgpOyArK2kpCi0gICAg
ICAgIHByb2Nlc3NUcmFjayhzdHJlYW0tPm1fdmlkZW9UcmFja3NbaV0uZ2V0KCksIHZpZGVvU291
cmNlcyk7CisgICAgICAgIHZpZGVvVHJhY2tzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZTo6Y3JlYXRlKHN0cmVhbS0+bV92aWRlb1RyYWNrc1tpXS0+c291cmNlKCkpKTsKIAotICAgIHJl
dHVybiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJjZXMsIHZpZGVv
U291cmNlcywgc3RyZWFtLT5lbmRlZCgpKTsKKyAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0
ZShjb250ZXh0LCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1RyYWNrcywgdmlk
ZW9UcmFja3MpKTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBNZWRpYVN0cmVhbVRy
YWNrVmVjdG9yJiB0cmFja3MpCiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9T
b3VyY2VzOwotICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKKyAgICBW
ZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gYXVkaW9UcmFja3M7CisgICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IHZpZGVvVHJhY2tzOwogCi0g
ICAgYm9vbCBhbGxFbmRlZCA9IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFj
a3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYWxsRW5kZWQgJj0gdHJhY2tzW2ldLT5lbmRlZCgp
OwotICAgICAgICBwcm9jZXNzVHJhY2sodHJhY2tzW2ldLmdldCgpLCB0cmFja3NbaV0tPmtpbmQo
KSA9PSAiYXVkaW8iID8gYXVkaW9Tb3VyY2VzIDogdmlkZW9Tb3VyY2VzKTsKKyAgICAgICAgaWYg
KHRyYWNrc1tpXS0+a2luZCgpID09ICJhdWRpbyIpCisgICAgICAgICAgICBhdWRpb1RyYWNrcy5h
cHBlbmQoJnRyYWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnRyYWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOwogICAg
IH0KIAotICAgIHJldHVybiBjcmVhdGVGcm9tU291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1Nv
dXJjZXMsIHZpZGVvU291cmNlcywgYWxsRW5kZWQpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6
Y3JlYXRlKGNvbnRleHQsIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvVHJhY2tz
LCB2aWRlb1RyYWNrcykpOwogfQogCiBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVh
bTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1EZXNjcmlwdG9yPiBzdHJlYW1EZXNjcmlwdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAppbmRleCAyMjY0
ZGM5MjNiZTVhMTA4YTkxN2M0YjBmOWEzMTYwNzQ0YzYyMmRkLi4xYWVmNzU1MTk1ZTY2YjNiZmIz
ZmQxZmY0ZjgyNDYyMzNjNWIzMzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaApAQCAtOTAsNiArOTAsNyBAQCBwdWJs
aWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihvdmVyY29uc3RyYWluZWQp
OwogCiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJp
dmF0ZVRyYWNrLT5zb3VyY2UoKTsgfQorICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBwcml2
YXRlVHJhY2soKSB7IHJldHVybiBtX3ByaXZhdGVUcmFjay5nZXQoKTsgfQogCiAgICAgYm9vbCBl
bmRlZCgpIGNvbnN0OwogCkBAIC0xMDcsNyArMTA4LDYgQEAgcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IE1lZGlhU3RyZWFtVHJhY2soTWVkaWFTdHJlYW1UcmFjayopOwogICAgIE1lZGlhU3RyZWFt
VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwg
Y29uc3QgRGljdGlvbmFyeSopOwogCi0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHByaXZh
dGVUcmFjaygpIHsgcmV0dXJuIG1fcHJpdmF0ZVRyYWNrLmdldCgpOyB9CiAgICAgdm9pZCBzZXRT
b3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4pOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKaW5kZXggYTRiMzJmNTEyMjM1N2UwNzM0MWJk
YTQwMGMxZDcwMTFhYmI4OGE0Ni4uYTY0ZGE1MzQzNTQ3OTczZDNmYzE5NjJjMzY1N2JjYzZkNjU2
NGE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC01MSw3ICs1
MSw3IEBAIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBjCiAgICAgbV9zb3VyY2UgPSBNZWRpYVN0cmVh
bUF1ZGlvU291cmNlOjpjcmVhdGUoKTsKICAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRp
b1NvdXJjZXM7CiAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChtX3NvdXJjZSk7Ci0gICAgbV9zdHJl
YW0gPSBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCBNZWRpYVN0cmVh
bVNvdXJjZVZlY3RvcigpLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5kZWQpKTsKKyAg
ICBtX3N0cmVhbSA9IE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yKCkpKTsKIAogICAgIG1fc291cmNlLT5zZXRBdWRpb0Zvcm1h
dChudW1iZXJPZkNoYW5uZWxzLCBjb250ZXh0LT5zYW1wbGVSYXRlKCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yLmNwcAppbmRleCAwZGNiYTMzMDc2YmZhY2E5M2Y2OTllOGEzZWExZDg5YTY2MDdk
MzE3Li44NDg2NDFiZTFlOWY0ZDUxMDNiYzgxY2M5ZmU5MWFmMGM5MTM4Y2EzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5jcHAKQEAgLTM2LDE3ICszNiwyMCBAQAogI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvci5oIgogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKLSNpbmNs
dWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmgiCiAjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0
cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBFbmRlZEF0Q3JlYXRpb25GbGFnIGZsYWcp
CitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gTWVkaWFTdHJlYW1EZXNjcmlwdG9y
OjpjcmVhdGUoY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29u
c3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcykKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCksIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBmbGFnID09IElzRW5kZWQpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjcmVhdGVDYW5vbmlj
YWxVVUlEU3RyaW5nKCksIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0
ZShjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIGF1ZGlvUHJp
dmF0ZVRyYWNrcywgY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+
JiB2aWRlb1ByaXZhdGVUcmFja3MpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0
cmVhbURlc2NyaXB0b3IoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBhdWRpb1ByaXZhdGVU
cmFja3MsIHZpZGVvUHJpdmF0ZVRyYWNrcykpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtRGVzY3Jp
cHRvcjo6YWRkU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSkKQEAg
LTEwNCwyMyArMTA3LDU3IEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpyZW1vdmVSZW1v
dGVTb3VyY2UoTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSkKICAgICAgICAgcmVtb3ZlU291cmNl
KHNvdXJjZSk7CiB9CiAKLU1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlw
dG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRp
b1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMsIGJv
b2wgZW5kZWQpCitNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihj
b25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3Vy
Y2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQogICAgIDog
bV9jbGllbnQoMCkKICAgICAsIG1faWQoaWQpCi0gICAgLCBtX2VuZGVkKGVuZGVkKQorICAgICwg
bV9lbmRlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUmVm
UHRyPE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSBhdWRpb1NvdXJjZXNbaV07Ci0gICAgICAg
IG1fYXVkaW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgICAgICBtX2F1ZGlvVHJh
Y2tEZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3Vy
Y2UpKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1NvdXJjZXMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5kU291cmNlKE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjcmVhdGUoYXVkaW9Tb3VyY2VzW2ldKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2tBbmRTb3VyY2Uo
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZSh2aWRlb1NvdXJjZXNbaV0pKTsKKworICAg
IHVuc2lnbmVkIHByb3ZpZGVkU291cmNlc1NpemUgPSBhdWRpb1NvdXJjZXMuc2l6ZSgpICsgdmlk
ZW9Tb3VyY2VzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB0cmFja3NTaXplID0gbV9hdWRpb1ByaXZh
dGVUcmFja3Muc2l6ZSgpICsgbV92aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOworICAgIC8vIElm
IHNvdXJjZXMgd2VyZSBwcm92aWRlZCBhbmQgbm8gdHJhY2sgd2FzIGFkZGVkIHRvIHRoZSBNZWRp
YVN0cmVhbURlc2NyaXB0b3IncyB0cmFja3MsIHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSB0
cmFja3Mgd2VyZSBhbGwgZW5kZWQKKyAgICBpZiAocHJvdmlkZWRTb3VyY2VzU2l6ZSA+IDAgJiYg
IXRyYWNrc1NpemUpCisgICAgICAgIG1fZW5kZWQgPSB0cnVlOworfQogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRy
PE1lZGlhU3RyZWFtU291cmNlPiBzb3VyY2UgPSB2aWRlb1NvdXJjZXNbaV07Ci0gICAgICAgIG1f
dmlkZW9TdHJlYW1Tb3VyY2VzLmFwcGVuZChzb3VyY2UpOwotICAgICAgICBtX3ZpZGVvVHJhY2tE
ZXNjcmlwdG9ycy5hcHBlbmQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShzb3VyY2Up
KTsKLSAgICB9CitNZWRpYVN0cmVhbURlc2NyaXB0b3I6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcihj
b25zdCBTdHJpbmcmIGlkLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPj4mIGF1ZGlvUHJpdmF0ZVRyYWNrcywgY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4+JiB2aWRlb1ByaXZhdGVUcmFja3MpCisgICAgOiBtX2NsaWVudCgwKQor
ICAgICwgbV9pZChpZCkKKyAgICAsIG1fZW5kZWQoZmFsc2UpCit7CisgICAgQVNTRVJUKG1faWQu
bGVuZ3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Qcml2YXRlVHJhY2tz
LnNpemUoKTsgaSsrKQorICAgICAgICBhZGRUcmFja0FuZFNvdXJjZShhdWRpb1ByaXZhdGVUcmFj
a3NbaV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb1ByaXZhdGVUcmFja3Mu
c2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrQW5kU291cmNlKHZpZGVvUHJpdmF0ZVRyYWNr
c1tpXSk7CisKKyAgICB1bnNpZ25lZCBwcm92aWRlZFRyYWNrc1NpemUgPSBhdWRpb1ByaXZhdGVU
cmFja3Muc2l6ZSgpICsgdmlkZW9Qcml2YXRlVHJhY2tzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB0
cmFja3NTaXplID0gbV9hdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpICsgbV92aWRlb1ByaXZhdGVU
cmFja3Muc2l6ZSgpOworICAgIC8vIElmIHRyYWNrcyB3ZXJlIHByb3ZpZGVkIGFuZCBubyBvbmUg
d2FzIGFkZGVkIHRvIHRoZSBNZWRpYVN0cmVhbURlc2NyaXB0b3IncyB0cmFja3MsIHRoaXMgbWVh
bnMKKyAgICAvLyB0aGF0IHRoZSB0cmFja3Mgd2VyZSBhbGwgZW5kZWQKKyAgICBpZiAocHJvdmlk
ZWRUcmFja3NTaXplID4gMCAmJiAhdHJhY2tzU2l6ZSkKKyAgICAgICAgbV9lbmRlZCA9IHRydWU7
Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFja0FuZFNvdXJjZShQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2st
PmVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+PiYgdHJhY2tWZWN0b3IgPSB0cmFjay0+c291cmNlKCktPnR5cGUoKSA9
PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvUHJpdmF0ZVRyYWNrcyA6IG1fdmlk
ZW9Qcml2YXRlVHJhY2tzOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBzb3VyY2VWZWN0
b3IgPSB0cmFjay0+c291cmNlKCktPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8g
PyBtX2F1ZGlvU3RyZWFtU291cmNlcyA6IG1fdmlkZW9TdHJlYW1Tb3VyY2VzOworCisgICAgdHJh
Y2tWZWN0b3IuYXBwZW5kKHRyYWNrKTsKKyAgICBpZiAoIXNvdXJjZVZlY3Rvci5jb250YWlucyh0
cmFjay0+c291cmNlKCkpKQorICAgICAgICBzb3VyY2VWZWN0b3IuYXBwZW5kKHRyYWNrLT5zb3Vy
Y2UoKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpzZXRFbmRlZCgpCkBAIC0x
MzMsMTggKzE3MCwyMCBAQCB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6c2V0RW5kZWQoKQog
CiB2b2lkIE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YWRkVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4gdHJhY2spCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4+JiB0cmFja3MgPSB0cmFjay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291
cmNlOjpBdWRpbyA/IG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzIDogbV92aWRlb1RyYWNrRGVzY3Jp
cHRvcnM7CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiB0cmFj
a3MgPSB0cmFjay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9Q
cml2YXRlVHJhY2tzIDogbV92aWRlb1ByaXZhdGVUcmFja3M7CiAKICAgICBzaXplX3QgcG9zID0g
dHJhY2tzLmZpbmQodHJhY2spOwogICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHRyYWNrcy5hcHBlbmQodHJhY2spOworICAgIGlmICh0cmFjay0+c291cmNl
KCkpCisgICAgICAgIGFkZFNvdXJjZSh0cmFjay0+c291cmNlKCkpOwogfQogCiB2b2lkIE1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZT4gdHJhY2spCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4+JiB0cmFja3MgPSB0cmFjay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRp
byA/IG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzIDogbV92aWRlb1RyYWNrRGVzY3JpcHRvcnM7Cisg
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiB0cmFja3MgPSB0cmFj
ay0+dHlwZSgpID09IE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbyA/IG1fYXVkaW9Qcml2YXRlVHJh
Y2tzIDogbV92aWRlb1ByaXZhdGVUcmFja3M7CiAKICAgICBzaXplX3QgcG9zID0gdHJhY2tzLmZp
bmQodHJhY2spOwogICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5o
CmluZGV4IDVlMTRmYTc2MGZkOWZmNjc3MmVmNjI1N2Q2ZmQ2NWIzNWQ2MWYxNjMuLmYyMzg1ZDFi
NTRkMzE0NjYzYTc2NTc5ZWJkYmE2MmFmNWMwNGVhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5o
CkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2suaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC01NCw5ICs1NSw4IEBAIHB1YmxpYzoKIAogY2xhc3MgTWVkaWFTdHJlYW1EZXNj
cmlwdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiB7CiBwdWJs
aWM6Ci0gICAgZW51bSBFbmRlZEF0Q3JlYXRpb25GbGFnIHsgSXNOb3RFbmRlZCwgSXNFbmRlZCB9
OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBjcmVhdGUo
Y29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFT
dHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcywgRW5kZWRBdENyZWF0aW9uRmxhZyk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPiBjcmVhdGUoY29uc3Qg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPiBjcmVhdGUoY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4+JiBhdWRpb1ByaXZhdGVUcmFja3MsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdmlkZW9Qcml2YXRlVHJhY2tzKTsKIAogICAgIHZpcnR1
YWwgfk1lZGlhU3RyZWFtRGVzY3JpcHRvcigpIHsgfQogCkBAIC03MSwxMSArNzEsMTEgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9Tb3VyY2VzKCkgY29uc3QgeyByZXR1cm4g
bV92aWRlb1N0cmVhbVNvdXJjZXMuc2l6ZSgpOyB9CiAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHZp
ZGVvU291cmNlcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1N0cmVhbVNv
dXJjZXNbaW5kZXhdLmdldCgpOyB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tz
KCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMuc2l6ZSgpOyB9Ci0gICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2F1ZGlvVHJhY2tEZXNjcmlwdG9yc1tpbmRleF0uZ2V0KCk7IH0KKyAgICB1
bnNpZ25lZCBudW1iZXJPZkF1ZGlvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1ByaXZh
dGVUcmFja3Muc2l6ZSgpOyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIGF1ZGlvVHJh
Y2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F1ZGlvUHJpdmF0ZVRyYWNrc1tp
bmRleF0uZ2V0KCk7IH0KIAotICAgIHVuc2lnbmVkIG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9ycy5zaXplKCk7IH0KLSAgICBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzW2luZGV4XS5nZXQoKTsgfQorICAgIHVuc2lnbmVk
IG51bWJlck9mVmlkZW9UcmFja3MoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvUHJpdmF0ZVRyYWNr
cy5zaXplKCk7IH0KKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSogdmlkZW9UcmFja3ModW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9Qcml2YXRlVHJhY2tzW2luZGV4XS5n
ZXQoKTsgfQogCiAgICAgdm9pZCBhZGRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJj
ZT4pOwogICAgIHZvaWQgcmVtb3ZlU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
KTsKQEAgLTkwLDE1ICs5MCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUcmFjayhQYXNz
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPik7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRl
b1NvdXJjZXMsIGJvb2wgZW5kZWQpOworICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjb25zdCBT
dHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBj
b25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzKTsKKyAgICBNZWRpYVN0
cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZT4+JiBhdWRpb1ByaXZhdGVUcmFja3MsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdmlkZW9Qcml2YXRlVHJhY2tzKTsKKwor
ICAgIHZvaWQgYWRkVHJhY2tBbmRTb3VyY2UoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4pOwogCiAgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yQ2xpZW50KiBtX2NsaWVudDsKICAg
ICBTdHJpbmcgbV9pZDsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gbV9h
dWRpb1N0cmVhbVNvdXJjZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4+
IG1fdmlkZW9TdHJlYW1Tb3VyY2VzOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIG1fYXVk
aW9TdHJlYW1Tb3VyY2VzOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIG1fdmlkZW9TdHJl
YW1Tb3VyY2VzOwogCi0gICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+
IG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzOwotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+PiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9yczsKKyAgICBWZWN0b3I8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV9hdWRpb1ByaXZhdGVUcmFja3M7CisgICAgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fdmlkZW9Qcml2YXRlVHJhY2tz
OwogICAgIGJvb2wgbV9lbmRlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcAppbmRleCA5MDdkYzUyNTFiNDI5
M2ZkMzA2Njc5YmNkZDcyZjY1NTJhM2Y2YWRhLi43MGJkNWRhZmY3MDA0ZTBlYWE2NDQ5Y2E3ZmQ2
MmE1YTE3ZWY2ZjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tNZWRpYVN0cmVhbUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrTWVkaWFTdHJlYW1DZW50ZXIuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBNb2Nr
TWVkaWFTdHJlYW1DZW50ZXI6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1DcmVhdGlvbkNsaWUKICAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5y
ZWxlYXNlKCkpOwogICAgIH0KICAgICAKLSAgICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRp
YVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkKSk7CisgICAgY2xpZW50LT5kaWRDcmVhdGVT
dHJlYW0oTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9Tb3VyY2VzLCB2aWRlb1Nv
dXJjZXMpKTsKIH0KIAogYm9vbCBNb2NrTWVkaWFTdHJlYW1DZW50ZXI6OmdldE1lZGlhU3RyZWFt
VHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xp
ZW50PiBwcnBDbGllbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215583</attachid>
            <date>2013-10-30 17:34:12 -0700</date>
            <delta_ts>2013-10-30 18:13:34 -0700</delta_ts>
            <desc>Final patch (I hope)</desc>
            <filename>bug-123443-20131030213410.patch</filename>
            <type>text/plain</type>
            <size>18114</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY3YThiY2I3YmQzMmU3
NjgyNTRiMzExNDcxYTczNjQ4YmExOTllZi4uYWNkNmY1NmM3YmRiZWZiNjczMDRmOTBmYjZlODUx
MGI3Nzc4MTI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTEwLTMwICBUaGlh
Z28gZGUgQmFycm9zIExhY2VyZGEgIDx0aGlhZ28ubGFjZXJkYUBvcGVuYm9zc2Eub3JnPgorCisg
ICAgICAgIFNpbXBsaWZ5aW5nIE1lZGlhU3RyZWFtIGFuZCBNZWRpU3RyZWFtRGVzY3JpcHRvciBj
cmVhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIGludGVybmFsIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBNZWRpYVN0cmVhbSBhbmQgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yIHdhcyBxdWl0ZSBjb25mdXNpbmcgYW5kIHNwcmVhZC4KKyAgICAgICAg
V2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiBN
ZWRpYVN0cmVhbVRyYWNrIChha2EgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUpCisgICAgICAgIGFu
ZCBzaW1wbGlmeSB0aGUgd2hvbGUgcHJvY2Vzcy4KKyAgICAgICAgQSBuZXcgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB2ZWN0b3JzIG9mIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIG9iamVjdHMg
d2VyZSBhZGRlZCwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgaWYgYSBzb3VyY2UgYWxyZWFkeSBl
eGlzdHMgb3IgaWYgdGhlIHRyYWNrcyBhcmUgYWxsIGVuZGVkIGFyZSBub3cgbWFkZSBpbiBNZWRp
YVN0cmVhbURlc2NyaXB0b3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW06OmNyZWF0ZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgdmFyaWFibGVz
IGluIG9uZSBjcmVhdGUgbWV0aG9kIGFuZCB1c2luZyBuZXcKKyAgICAgICAgTWVkaWFTdHJlYW1E
ZXNjcmlwdG9yOjpjcmVhdGUgbWV0aG9kIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mIE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlIG9iamVjdHMgYXMgcGFyYW1ldGVyLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUpOiBSZW1vdmVkIHBhc3NpbmcgZmxhZyB0bworICAgICAgICBNZWRp
YVN0cmVhbURlc2NyaXB0b3IgY3JlYXRlLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKTogUmVtb3ZlZCBFbmRlZEF0Q3JlYXRpb25GbGFnIHBhcmFt
ZXRlciwgYmVjYXVzZSB0aGlzIGlzIGJlaW5nCisgICAgICAgIGhhbmRsZWQgaW5zaWRlIGNvbnN0
cnVjdG9yIGJ5IGFuYWx5emluZyB0aGUgdHJhY2tzIG9yIHNvdXJjZXMgcGFzc2VkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3Ip
OiBBZGRpbmcgbmV3IGNvbnN0cnVjdG9yIHRoYXQgcmVjZWl2ZXMgdmVjdG9yIG9mCisgICAgICAg
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlIGFzIHBhcmFtZXRlci4KKworICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFjayk6IENoYW5nZWQgdG8gc3RvcmUgdGhl
IHRyYWNrJ3Mgc291cmNlIGluIHRoZSBvYmplY3QuCisKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U3RyZWFtRGVzY3JpcHRvcjo6cmVtb3ZlVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
dHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZkF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6YXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpudW1iZXJPZlZpZGVvVHJhY2tzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6dmlkZW9UcmFja3MpOgorICAgICAgICAqIHBs
YXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVkaWFTdHJlYW0pOiBSZW1vdmluZyBmbGFn
IHRoYXQgaXMgYmVpbmcgcGFzc2VkIHRvCisgICAgICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcidz
IGNyZWF0ZSBtZXRob2QuCisKIDIwMTMtMTAtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGNvZGUgZm9yIE1hYyBMaW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IDBlZGI4
NzJlNjg1MTY3NjA0ZmYyYzlmNmMxZmZjYTc0MjZiNDM5NDUuLjlhNjhhMWU5ZGM2NTM0MDliNWRk
MDRjNDM1MjRiNDZiZGM1YTE1NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCkBAIC00MSw2OCArNDEsNDAgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBjb250YWluc1NvdXJjZShNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgc291cmNlVmVjdG9yLCBNZWRpYVN0cmVhbVNvdXJjZSogc291cmNlKQotewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlVmVjdG9yLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChzb3VyY2UtPmlkKCkgPT0gc291cmNlVmVjdG9yW2ldLT5pZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IHZvaWQgcHJvY2Vzc1RyYWNrKE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNrLCBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciYgc291cmNlVmVjdG9yKQotewotICAgIGlmICh0cmFjay0+ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9IHRyYWNrLT5z
b3VyY2UoKTsKLSAgICBpZiAoIWNvbnRhaW5zU291cmNlKHNvdXJjZVZlY3Rvciwgc291cmNlKSkK
LSAgICAgICAgc291cmNlVmVjdG9yLmFwcGVuZChzb3VyY2UpOwotfQotCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbT4gY3JlYXRlRnJvbVNvdXJjZVZlY3RvcnMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291
cmNlcywgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcywgYm9vbCBl
bmRlZCkKLXsKLSAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OkVuZGVkQXRDcmVhdGlvbkZsYWcg
ZmxhZyA9IGVuZGVkID8gTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpJc0VuZGVkIDogTWVkaWFTdHJl
YW1EZXNjcmlwdG9yOjpJc05vdEVuZGVkOwotICAgIFJlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0
b3I+IGRlc2NyaXB0b3IgPSBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJj
ZXMsIHZpZGVvU291cmNlcywgZmxhZyk7Ci0gICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUo
Y29udGV4dCwgZGVzY3JpcHRvci5yZWxlYXNlKCkpOwotfQotCiBQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzOwotICAgIE1lZGlh
U3RyZWFtU291cmNlVmVjdG9yIHZpZGVvU291cmNlczsKLQotICAgIHJldHVybiBjcmVhdGVGcm9t
U291cmNlVmVjdG9ycyhjb250ZXh0LCBhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcywgZmFsc2Up
OworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIE1lZGlhU3RyZWFtRGVz
Y3JpcHRvcjo6Y3JlYXRlKE1lZGlhU3RyZWFtU291cmNlVmVjdG9yKCksIE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yKCkpKTsKIH0KIAogUGFzc1JlZlB0cjxNZWRpYVN0cmVhbT4gTWVkaWFTdHJlYW06
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtPiBzdHJlYW0pCiB7CiAgICAgQVNTRVJUKHN0cmVhbSk7CiAKLSAgICBNZWRpYVN0cmVh
bVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3Ig
dmlkZW9Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
PiBhdWRpb1RyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Pj4gdmlkZW9UcmFja3M7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmVhbS0+bV9h
dWRpb1RyYWNrcy5zaXplKCk7ICsraSkKLSAgICAgICAgcHJvY2Vzc1RyYWNrKHN0cmVhbS0+bV9h
dWRpb1RyYWNrc1tpXS5nZXQoKSwgYXVkaW9Tb3VyY2VzKTsKKyAgICAgICAgYXVkaW9UcmFja3Mu
YXBwZW5kKCZzdHJlYW0tPm1fYXVkaW9UcmFja3NbaV0tPnByaXZhdGVUcmFjaygpKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyZWFtLT5tX3ZpZGVvVHJhY2tzLnNpemUoKTsgKytp
KQotICAgICAgICBwcm9jZXNzVHJhY2soc3RyZWFtLT5tX3ZpZGVvVHJhY2tzW2ldLmdldCgpLCB2
aWRlb1NvdXJjZXMpOworICAgICAgICB2aWRlb1RyYWNrcy5hcHBlbmQoJnN0cmVhbS0+bV92aWRl
b1RyYWNrc1tpXS0+cHJpdmF0ZVRyYWNrKCkpOwogCi0gICAgcmV0dXJuIGNyZWF0ZUZyb21Tb3Vy
Y2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBzdHJlYW0tPmVu
ZGVkKCkpOworICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQsIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvVHJhY2tzLCB2aWRlb1RyYWNrcykpOwogfQogCiBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtPiBNZWRpYVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IE1lZGlhU3RyZWFtVHJhY2tWZWN0b3ImIHRyYWNrcykK
IHsKLSAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1NvdXJjZXM7Ci0gICAgTWVkaWFT
dHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+PiBhdWRpb1RyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlPj4gdmlkZW9UcmFja3M7CiAKLSAgICBib29sIGFsbEVuZGVkID0g
dHJ1ZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYWNrcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBhbGxFbmRlZCAmPSB0cmFja3NbaV0tPmVuZGVkKCk7Ci0gICAgICAgIHByb2Nlc3NU
cmFjayh0cmFja3NbaV0uZ2V0KCksIHRyYWNrc1tpXS0+a2luZCgpID09ICJhdWRpbyIgPyBhdWRp
b1NvdXJjZXMgOiB2aWRlb1NvdXJjZXMpOworICAgICAgICBpZiAodHJhY2tzW2ldLT5raW5kKCkg
PT0gImF1ZGlvIikKKyAgICAgICAgICAgIGF1ZGlvVHJhY2tzLmFwcGVuZCgmdHJhY2tzW2ldLT5w
cml2YXRlVHJhY2soKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZpZGVvVHJhY2tzLmFw
cGVuZCgmdHJhY2tzW2ldLT5wcml2YXRlVHJhY2soKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNy
ZWF0ZUZyb21Tb3VyY2VWZWN0b3JzKGNvbnRleHQsIGF1ZGlvU291cmNlcywgdmlkZW9Tb3VyY2Vz
LCBhbGxFbmRlZCk7CisgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoY29udGV4dCwgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpjcmVhdGUoYXVkaW9UcmFja3MsIHZpZGVvVHJhY2tzKSk7CiB9
CiAKIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW0+IE1lZGlhU3RyZWFtOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+
IHN0cmVhbURlc2NyaXB0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5oCmluZGV4IDIyNjRkYzkyM2JlNWExMDhhOTE3YzRi
MGY5YTMxNjA3NDRjNjIyZGQuLjFhZWY3NTUxOTVlNjZiM2JmYjNmZDFmZjRmODI0NjIzM2M1YjMz
NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1UcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFjay5oCkBAIC05MCw2ICs5MCw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKG92ZXJjb25zdHJhaW5lZCk7CiAKICAgICBNZWRpYVN0cmVh
bVNvdXJjZSogc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlVHJhY2stPnNvdXJjZSgp
OyB9CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHByaXZhdGVUcmFjaygpIHsgcmV0dXJu
IG1fcHJpdmF0ZVRyYWNrLmdldCgpOyB9CiAKICAgICBib29sIGVuZGVkKCkgY29uc3Q7CiAKQEAg
LTEwNyw3ICsxMDgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTWVkaWFTdHJlYW1UcmFj
ayhNZWRpYVN0cmVhbVRyYWNrKik7CiAgICAgTWVkaWFTdHJlYW1UcmFjayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmLCBjb25zdCBEaWN0aW9uYXJ5Kik7
CiAKLSAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgcHJpdmF0ZVRyYWNrKCkgeyByZXR1cm4g
bV9wcml2YXRlVHJhY2suZ2V0KCk7IH0KICAgICB2b2lkIHNldFNvdXJjZShQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAppbmRleCBhNGIzMmY1MTIyMzU3ZTA3MzQxYmRhNDAwYzFkNzAxMWFiYjg4YTQ2
Li5hNjRkYTUzNDM1NDc5NzNkM2ZjMTk2MmMzNjU3YmNjNmQ2NTY0YTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgTWVkaWFTdHJlYW1B
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRp
b0NvbnRleHQqIGMKICAgICBtX3NvdXJjZSA9IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNyZWF0
ZSgpOwogICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKICAgICBhdWRp
b1NvdXJjZXMuYXBwZW5kKG1fc291cmNlKTsKLSAgICBtX3N0cmVhbSA9IE1lZGlhU3RyZWFtOjpj
cmVhdGUoY29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBNZWRpYVN0cmVhbURlc2Ny
aXB0b3I6OmNyZWF0ZShhdWRpb1NvdXJjZXMsIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yKCksIE1l
ZGlhU3RyZWFtRGVzY3JpcHRvcjo6SXNOb3RFbmRlZCkpOworICAgIG1fc3RyZWFtID0gTWVkaWFT
dHJlYW06OmNyZWF0ZShjb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIE1lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1ZGlvU291cmNlcywgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0
b3IoKSkpOwogCiAgICAgbV9zb3VyY2UtPnNldEF1ZGlvRm9ybWF0KG51bWJlck9mQ2hhbm5lbHMs
IGNvbnRleHQtPnNhbXBsZVJhdGUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuY3BwCmluZGV4
IDBkY2JhMzMwNzZiZmFjYTkzZjY5OWU4YTNlYTFkODlhNjYwN2QzMTcuLmQ2YWM2NDJhMDdhZTU4
NTEzNzYzNzZmZjA2ODdiMDQ1YzIwZWZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtRGVzY3JpcHRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmNwcApA
QCAtMzYsMTcgKzM2LDIwIEBACiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCiAK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlci5oIgotI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291
cmNlLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJV
VUlELmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2Ny
aXB0b3I+IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291
cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2
aWRlb1NvdXJjZXMsIEVuZGVkQXRDcmVhdGlvbkZsYWcgZmxhZykKK1Bhc3NSZWZQdHI8TWVkaWFT
dHJlYW1EZXNjcmlwdG9yPiBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OmNyZWF0ZShjb25zdCBNZWRp
YVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3VyY2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciYgdmlkZW9Tb3VyY2VzKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFT
dHJlYW1EZXNjcmlwdG9yKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgYXVkaW9Tb3VyY2Vz
LCB2aWRlb1NvdXJjZXMsIGZsYWcgPT0gSXNFbmRlZCkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgYXVk
aW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpKTsKK30KKworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURl
c2NyaXB0b3I+IE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHZpZGVvUHJpdmF0ZVRyYWNr
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtRGVzY3JpcHRvcihjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGF1ZGlvUHJpdmF0ZVRyYWNrcywgdmlkZW9Qcml2YXRl
VHJhY2tzKSk7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRTb3VyY2UoUGFz
c1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gc291cmNlKQpAQCAtMTA0LDIzICsxMDcsNDQgQEAg
dm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnJlbW92ZVJlbW90ZVNvdXJjZShNZWRpYVN0cmVh
bVNvdXJjZSogc291cmNlKQogICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlKTsKIH0KIAotTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOjpNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBp
ZCwgY29uc3QgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVk
aWFTdHJlYW1Tb3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcywgYm9vbCBlbmRlZCkKK01lZGlhU3Ry
ZWFtRGVzY3JpcHRvcjo6TWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNv
bnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3Ry
ZWFtU291cmNlVmVjdG9yJiB2aWRlb1NvdXJjZXMpCiAgICAgOiBtX2NsaWVudCgwKQogICAgICwg
bV9pZChpZCkKLSAgICAsIG1fZW5kZWQoZW5kZWQpCisgICAgLCBtX2VuZGVkKGZhbHNlKQogewog
ICAgIEFTU0VSVChtX2lkLmxlbmd0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1
ZGlvU291cmNlcy5zaXplKCk7IGkrKykgewotICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U+IHNvdXJjZSA9IGF1ZGlvU291cmNlc1tpXTsKLSAgICAgICAgbV9hdWRpb1N0cmVhbVNvdXJj
ZXMuYXBwZW5kKHNvdXJjZSk7Ci0gICAgICAgIG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzLmFwcGVu
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwotICAgIH0KKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvU291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAg
YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZShhdWRpb1NvdXJjZXNbaV0p
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9Tb3VyY2VzLnNpemUoKTsgaSsr
KQorICAgICAgICBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKHZpZGVv
U291cmNlc1tpXSkpOworCisgICAgdW5zaWduZWQgcHJvdmlkZWRTb3VyY2VzU2l6ZSA9IGF1ZGlv
U291cmNlcy5zaXplKCkgKyB2aWRlb1NvdXJjZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRyYWNr
c1NpemUgPSBtX2F1ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCkgKyBtX3ZpZGVvUHJpdmF0ZVRyYWNr
cy5zaXplKCk7CisgICAgLy8gSWYgc291cmNlcyB3ZXJlIHByb3ZpZGVkIGFuZCBubyB0cmFjayB3
YXMgYWRkZWQgdG8gdGhlIE1lZGlhU3RyZWFtRGVzY3JpcHRvcidzIHRyYWNrcywgdGhpcyBtZWFu
cworICAgIC8vIHRoYXQgdGhlIHRyYWNrcyB3ZXJlIGFsbCBlbmRlZAorICAgIGlmIChwcm92aWRl
ZFNvdXJjZXNTaXplID4gMCAmJiAhdHJhY2tzU2l6ZSkKKyAgICAgICAgbV9lbmRlZCA9IHRydWU7
Cit9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5zaXplKCk7IGkr
KykgewotICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHNvdXJjZSA9IHZpZGVvU291
cmNlc1tpXTsKLSAgICAgICAgbV92aWRlb1N0cmVhbVNvdXJjZXMuYXBwZW5kKHNvdXJjZSk7Ci0g
ICAgICAgIG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzLmFwcGVuZChNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZTo6Y3JlYXRlKHNvdXJjZSkpOwotICAgIH0KK01lZGlhU3RyZWFtRGVzY3JpcHRvcjo6TWVk
aWFTdHJlYW1EZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4mIHZpZGVvUHJpdmF0ZVRyYWNrcykK
KyAgICA6IG1fY2xpZW50KDApCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9lbmRlZChmYWxzZSkK
K3sKKyAgICBBU1NFUlQobV9pZC5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhdWRpb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyBpKyspCisgICAgICAgIGFkZFRyYWNrKGF1ZGlv
UHJpdmF0ZVRyYWNrc1tpXSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvUHJp
dmF0ZVRyYWNrcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkVHJhY2sodmlkZW9Qcml2YXRlVHJh
Y2tzW2ldKTsKKworICAgIHVuc2lnbmVkIHByb3ZpZGVkVHJhY2tzU2l6ZSA9IGF1ZGlvUHJpdmF0
ZVRyYWNrcy5zaXplKCkgKyB2aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOworICAgIHVuc2lnbmVk
IHRyYWNrc1NpemUgPSBtX2F1ZGlvUHJpdmF0ZVRyYWNrcy5zaXplKCkgKyBtX3ZpZGVvUHJpdmF0
ZVRyYWNrcy5zaXplKCk7CisgICAgLy8gSWYgdHJhY2tzIHdlcmUgcHJvdmlkZWQgYW5kIG5vIG9u
ZSB3YXMgYWRkZWQgdG8gdGhlIE1lZGlhU3RyZWFtRGVzY3JpcHRvcidzIHRyYWNrcywgdGhpcyBt
ZWFucworICAgIC8vIHRoYXQgdGhlIHRyYWNrcyB3ZXJlIGFsbCBlbmRlZAorICAgIGlmIChwcm92
aWRlZFRyYWNrc1NpemUgPiAwICYmICF0cmFja3NTaXplKQorICAgICAgICBtX2VuZGVkID0gdHJ1
ZTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OnNldEVuZGVkKCkKQEAgLTEzMywx
OCArMTU3LDIzIEBAIHZvaWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjpzZXRFbmRlZCgpCiAKIHZv
aWQgTWVkaWFTdHJlYW1EZXNjcmlwdG9yOjphZGRUcmFjayhQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiB0cmFjaykKIHsKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPj4mIHRyYWNrcyA9IHRyYWNrLT50eXBlKCkgPT0gTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvID8gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnMgOiBtX3ZpZGVvVHJhY2tEZXNjcmlwdG9y
czsKKyAgICBpZiAodHJhY2stPmVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUo
KSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvUHJpdmF0ZVRyYWNrcyA6IG1f
dmlkZW9Qcml2YXRlVHJhY2tzOwogCiAgICAgc2l6ZV90IHBvcyA9IHRyYWNrcy5maW5kKHRyYWNr
KTsKICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICB0cmFj
a3MuYXBwZW5kKHRyYWNrKTsKKyAgICBpZiAodHJhY2stPnNvdXJjZSgpKQorICAgICAgICBhZGRT
b3VyY2UodHJhY2stPnNvdXJjZSgpKTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6
OnJlbW92ZVRyYWNrKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+IHRyYWNrKQog
ewotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0g
dHJhY2stPnR5cGUoKSA9PSBNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvVHJhY2tE
ZXNjcmlwdG9ycyA6IG1fdmlkZW9UcmFja0Rlc2NyaXB0b3JzOworICAgIFZlY3RvcjxSZWZQdHI8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgdHJhY2tzID0gdHJhY2stPnR5cGUoKSA9PSBNZWRp
YVN0cmVhbVNvdXJjZTo6QXVkaW8gPyBtX2F1ZGlvUHJpdmF0ZVRyYWNrcyA6IG1fdmlkZW9Qcml2
YXRlVHJhY2tzOwogCiAgICAgc2l6ZV90IHBvcyA9IHRyYWNrcy5maW5kKHRyYWNrKTsKICAgICBp
ZiAocG9zID09IG5vdEZvdW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaAppbmRleCA1ZTE0ZmE3NjBm
ZDlmZjY3NzJlZjYyNTdkNmZkNjViMzVkNjFmMTYzLi42ZjMwYWE0N2RmMmE5YTBiNGYyMWQwNGFm
NGE2NjQ3ZTVhMTI2OTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbURlc2NyaXB0b3IuaApAQCAtMzYsNiArMzYsNyBA
QAogCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVh
bVRyYWNrLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTQsOSAr
NTUsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIE1lZGlhU3RyZWFtRGVzY3JpcHRvciA6IHB1YmxpYyBS
ZWZDb3VudGVkPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gewogcHVibGljOgotICAgIGVudW0gRW5k
ZWRBdENyZWF0aW9uRmxhZyB7IElzTm90RW5kZWQsIElzRW5kZWQgfTsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFt
U291cmNlVmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9y
JiB2aWRlb1NvdXJjZXMsIEVuZGVkQXRDcmVhdGlvbkZsYWcpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4gY3JlYXRlKGNvbnN0IE1lZGlhU3RyZWFtU291cmNl
VmVjdG9yJiBhdWRpb1NvdXJjZXMsIGNvbnN0IE1lZGlhU3RyZWFtU291cmNlVmVjdG9yJiB2aWRl
b1NvdXJjZXMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtRGVzY3JpcHRvcj4g
Y3JlYXRlKGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiYgYXVk
aW9Qcml2YXRlVHJhY2tzLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPj4mIHZpZGVvUHJpdmF0ZVRyYWNrcyk7CiAKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVhbURl
c2NyaXB0b3IoKSB7IH0KIApAQCAtNzEsMTEgKzcxLDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBudW1iZXJPZlZpZGVvU291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3Vy
Y2VzLnNpemUoKTsgfQogICAgIE1lZGlhU3RyZWFtU291cmNlKiB2aWRlb1NvdXJjZXModW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TdHJlYW1Tb3VyY2VzW2luZGV4XS5nZXQo
KTsgfQogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBdWRpb1RyYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXVkaW9UcmFja0Rlc2NyaXB0b3JzLnNpemUoKTsgfQotICAgIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlKiBhdWRpb1RyYWNrcyh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdWRp
b1RyYWNrRGVzY3JpcHRvcnNbaW5kZXhdLmdldCgpOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZB
dWRpb1RyYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9Qcml2YXRlVHJhY2tzLnNpemUoKTsg
fQorICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKiBhdWRpb1RyYWNrcyh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9hdWRpb1ByaXZhdGVUcmFja3NbaW5kZXhdLmdldCgpOyB9CiAK
LSAgICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV92aWRl
b1RyYWNrRGVzY3JpcHRvcnMuc2l6ZSgpOyB9Ci0gICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUq
IHZpZGVvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvVHJhY2tE
ZXNjcmlwdG9yc1tpbmRleF0uZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZpZGVvVHJh
Y2tzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1ByaXZhdGVUcmFja3Muc2l6ZSgpOyB9CisgICAg
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUqIHZpZGVvVHJhY2tzKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZpZGVvUHJpdmF0ZVRyYWNrc1tpbmRleF0uZ2V0KCk7IH0KIAogICAgIHZv
aWQgYWRkU291cmNlKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+KTsKICAgICB2b2lkIHJl
bW92ZVNvdXJjZShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPik7CkBAIC05MCwxNSArOTAs
MTYgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlVHJhY2soUGFzc1JlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4pOwogCiBwcml2YXRlOgotICAgIE1lZGlhU3RyZWFtRGVzY3JpcHRvcihj
b25zdCBTdHJpbmcmIGlkLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgYXVkaW9Tb3Vy
Y2VzLCBjb25zdCBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciYgdmlkZW9Tb3VyY2VzLCBib29sIGVu
ZGVkKTsKKyAgICBNZWRpYVN0cmVhbURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3ImIGF1ZGlvU291cmNlcywgY29uc3QgTWVkaWFTdHJlYW1T
b3VyY2VWZWN0b3ImIHZpZGVvU291cmNlcyk7CisgICAgTWVkaWFTdHJlYW1EZXNjcmlwdG9yKGNv
bnN0IFN0cmluZyYgaWQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+PiYgYXVkaW9Qcml2YXRlVHJhY2tzLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPj4mIHZpZGVvUHJpdmF0ZVRyYWNrcyk7CiAKICAgICBNZWRpYVN0cmVhbURl
c2NyaXB0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX2lkOwotICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+PiBtX2F1ZGlvU3RyZWFtU291cmNlczsKLSAgICBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPj4gbV92aWRlb1N0cmVhbVNvdXJjZXM7CisgICAg
TWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgbV9hdWRpb1N0cmVhbVNvdXJjZXM7CisgICAgTWVkaWFT
dHJlYW1Tb3VyY2VWZWN0b3IgbV92aWRlb1N0cmVhbVNvdXJjZXM7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV9hdWRpb1RyYWNrRGVzY3JpcHRvcnM7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fdmlkZW9UcmFja0Rl
c2NyaXB0b3JzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBt
X2F1ZGlvUHJpdmF0ZVRyYWNrczsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlPj4gbV92aWRlb1ByaXZhdGVUcmFja3M7CiAgICAgYm9vbCBtX2VuZGVkOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1D
ZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFTdHJlYW1D
ZW50ZXIuY3BwCmluZGV4IDkwN2RjNTI1MWI0MjkzZmQzMDY2NzliY2RkNzJmNjU1MmEzZjZhZGEu
LjcwYmQ1ZGFmZjcwMDRlMGVhYTY0NDljYTdmZDYyYTVhMTdlZjZmNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYVN0cmVhbUNlbnRlci5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIE1vY2tNZWRpYVN0cmVhbUNlbnRlcjo6Y3JlYXRlTWVk
aWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZQogICAgICAgICB2aWRl
b1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIAotICAg
IGNsaWVudC0+ZGlkQ3JlYXRlU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvcjo6Y3JlYXRlKGF1
ZGlvU291cmNlcywgdmlkZW9Tb3VyY2VzLCBNZWRpYVN0cmVhbURlc2NyaXB0b3I6OklzTm90RW5k
ZWQpKTsKKyAgICBjbGllbnQtPmRpZENyZWF0ZVN0cmVhbShNZWRpYVN0cmVhbURlc2NyaXB0b3I6
OmNyZWF0ZShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcykpOwogfQogCiBib29sIE1vY2tNZWRp
YVN0cmVhbUNlbnRlcjo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMoUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQ+IHBycENsaWVudCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>