<?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>89908</bug_id>
          
          <creation_ts>2012-06-25 14:18:55 -0700</creation_ts>
          <short_desc>[chromium] ScrollbarLayerChromium should support painting forward-track and back-track in different styles.</short_desc>
          <delta_ts>2012-06-27 14:25:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="W. James MacLean">wjmaclean</reporter>
          <assigned_to name="W. James MacLean">wjmaclean</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656851</commentid>
    <comment_count>0</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-25 14:18:55 -0700</bug_when>
    <thetext>[chromium] ScrollbarLayerChromium should support painting forward-track and back-track in different styles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656857</commentid>
    <comment_count>1</comment_count>
      <attachid>149357</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-25 14:24:24 -0700</bug_when>
    <thetext>Created attachment 149357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656863</commentid>
    <comment_count>2</comment_count>
      <attachid>149357</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-25 14:26:58 -0700</bug_when>
    <thetext>Comment on attachment 149357
Patch

Not for review yet, still working on tests. I have some questions though:

1) Is it worth modifying it to just use a single background part if the forward- and back- styles are the same?

2) Is it worth trying to collect the two background parts into an &quot;array of parts&quot;? I&apos;m assuming &apos;no&apos;, but I am flexible on this.

Let me know if the overall approach looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656881</commentid>
    <comment_count>3</comment_count>
      <attachid>149357</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-25 14:42:02 -0700</bug_when>
    <thetext>Comment on attachment 149357
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:161
&gt; +    ScrollbarPart m_part;

bikeshed: m_trackPart

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:86
&gt; +    IntRect backTrackRect(IntPoint(), m_scrollbar.orientation() == HorizontalScrollbar ? IntSize(thumbRect.x(), thumbRect.height()) : IntSize(thumbRect.width(), thumbRect.y()));

Use theme-&gt;splitTrackRect for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656890</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-25 14:48:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 149357 [details])
&gt; Not for review yet, still working on tests. I have some questions though:
&gt; 
&gt; 1) Is it worth modifying it to just use a single background part if the forward- and back- styles are the same?

I think it might be, just to save on painting and uploading the scrollbar on any frame where you scroll.  As far as I can tell, only render theme scrollbars are capable of this (so far), so you could just set a bool on the layer based on isCustomScrollbar.

&gt; 2) Is it worth trying to collect the two background parts into an &quot;array of parts&quot;? I&apos;m assuming &apos;no&apos;, but I am flexible on this.

I don&apos;t think there needs to be an array of parts until we support being able to draw enabled/disabled/hovered parts on the compositor thread.  I think that&apos;s the point where it goes from 2-3 parts to an array of parts in different states.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657786</commentid>
    <comment_count>5</comment_count>
      <attachid>149573</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 11:33:42 -0700</bug_when>
    <thetext>Created attachment 149573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657792</commentid>
    <comment_count>6</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 11:38:20 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 149357 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149357&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ScrollbarLayerChromium.cpp:161
&gt; &gt; +    ScrollbarPart m_part;
&gt; 
&gt; bikeshed: m_trackPart

Sure!
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:86
&gt; &gt; +    IntRect backTrackRect(IntPoint(), m_scrollbar.orientation() == HorizontalScrollbar ? IntSize(thumbRect.x(), thumbRect.height()) : IntSize(thumbRect.width(), thumbRect.y()));
&gt; 
&gt; Use theme-&gt;splitTrackRect for this.

Done. I got rid of the call to theme-&gt;thumbRect since it calls splitRect anyways, although this required tweaking the thumbRect offset calculation.

(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 149357 [details] [details])
&gt; &gt; Not for review yet, still working on tests. I have some questions though:
&gt; &gt; 
&gt; &gt; 1) Is it worth modifying it to just use a single background part if the forward- and back- styles are the same?
&gt; 
&gt; I think it might be, just to save on painting and uploading the scrollbar on any frame where you scroll.  As far as I can tell, only render theme scrollbars are capable of this (so far), so you could just set a bool on the layer based on isCustomScrollbar.

Done. I didn&apos;t create any extra state, rather we only create/paint the second texture if isCustomScrollBar() returns true, and then the presence or lack of foreTrackTextureId determines how we go about appending quads.

&gt; &gt; 2) Is it worth trying to collect the two background parts into an &quot;array of parts&quot;? I&apos;m assuming &apos;no&apos;, but I am flexible on this.
&gt; 
&gt; I don&apos;t think there needs to be an array of parts until we support being able to draw enabled/disabled/hovered parts on the compositor thread.  I think that&apos;s the point where it goes from 2-3 parts to an array of parts in different states.

SGTM.

Question: are we doing layout tests for gpu-scrollbars, or should I come up with a unit test? The cl passes existing unit tests and (I think) doesn&apos;t trigger any layout test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657828</commentid>
    <comment_count>7</comment_count>
      <attachid>149573</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-26 12:13:17 -0700</bug_when>
    <thetext>Comment on attachment 149573
Patch

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

No, there aren&apos;t existing good tests for this.  This path is hit in compositing tests, but (I think) only by mock scrollbars.

If you could add a pixel layout test with themed scrollbars and a different back/forward track rect for this, that&apos;d be great.  You&apos;ll need to explicitly turn off mock scrollbars in the test.  You could probably just put it in platform/chromium/compositing/scrollbars or something.

Other than that, looks great.  Thanks!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:38
&gt; +#include &lt;stdio.h&gt;
&gt; +

Debugging code?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt; +    IntRect thumbRect, backTrackRect, foreTrackRect;
&gt; +    theme-&gt;splitTrack(&amp;m_scrollbar, boundsRect, backTrackRect, thumbRect, foreTrackRect);
&gt; +    if (m_scrollbar.orientation() == VerticalScrollbar)
&gt; +        thumbRect.move(0, theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonStartPart, true).size().height());
&gt; +    else
&gt; +        thumbRect.move(theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonStartPart, true).size().width(), 0);
&gt;  
&gt; -    IntRect thumbRect = theme-&gt;thumbRect(&amp;m_scrollbar);
&gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());

Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657870</commentid>
    <comment_count>8</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 12:49:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 149573 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149573&amp;action=review
&gt; 
&gt; No, there aren&apos;t existing good tests for this.  This path is hit in compositing tests, but (I think) only by mock scrollbars.
&gt; 
&gt; If you could add a pixel layout test with themed scrollbars and a different back/forward track rect for this, that&apos;d be great.  You&apos;ll need to explicitly turn off mock scrollbars in the test.  You could probably just put it in platform/chromium/compositing/scrollbars or something.
&gt; 
&gt; Other than that, looks great.  Thanks!

Will do this and upload, probably early tomorrow.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:38
&gt; &gt; +#include &lt;stdio.h&gt;
&gt; &gt; +
&gt; 
&gt; Debugging code?

Ooops! (blushes)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt; &gt; +    IntRect thumbRect, backTrackRect, foreTrackRect;
&gt; &gt; +    theme-&gt;splitTrack(&amp;m_scrollbar, boundsRect, backTrackRect, thumbRect, foreTrackRect);
&gt; &gt; +    if (m_scrollbar.orientation() == VerticalScrollbar)
&gt; &gt; +        thumbRect.move(0, theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonStartPart, true).size().height());
&gt; &gt; +    else
&gt; &gt; +        thumbRect.move(theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonStartPart, true).size().width(), 0);
&gt; &gt;  
&gt; &gt; -    IntRect thumbRect = theme-&gt;thumbRect(&amp;m_scrollbar);
&gt; &gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());
&gt; 
&gt; Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?

I was a bit surprised by this too.

It seems to calculate the thumbRect position as an offset from the track, but *exclusive* from the forward/backward buttons. Calling splitTrack this way is a bit different from calling it through thumbRect(), since the latter only passes the tracRect to splitTrack, whereas we are passing in the entire bounds rect (since we are bundling the buttons and the track into the texture). I found that if I called splitTrack with theme-&gt;trackRect() instead of bounds, I had to then manually append rects for the buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657876</commentid>
    <comment_count>9</comment_count>
      <attachid>149573</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-26 12:53:07 -0700</bug_when>
    <thetext>Comment on attachment 149573
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt;&gt;&gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());
&gt;&gt; 
&gt;&gt; Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?
&gt; 
&gt; I was a bit surprised by this too.
&gt; 
&gt; It seems to calculate the thumbRect position as an offset from the track, but *exclusive* from the forward/backward buttons. Calling splitTrack this way is a bit different from calling it through thumbRect(), since the latter only passes the tracRect to splitTrack, whereas we are passing in the entire bounds rect (since we are bundling the buttons and the track into the texture). I found that if I called splitTrack with theme-&gt;trackRect() instead of bounds, I had to then manually append rects for the buttons.

Oh! That&apos;s the problem exactly.  splitTrack should take a trackRect, not a boundsRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657884</commentid>
    <comment_count>10</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 12:56:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 149573 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149573&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt; &gt;&gt;&gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());
&gt; &gt;&gt; 
&gt; &gt;&gt; Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?
&gt; &gt; 
&gt; &gt; I was a bit surprised by this too.
&gt; &gt; 
&gt; &gt; It seems to calculate the thumbRect position as an offset from the track, but *exclusive* from the forward/backward buttons. Calling splitTrack this way is a bit different from calling it through thumbRect(), since the latter only passes the tracRect to splitTrack, whereas we are passing in the entire bounds rect (since we are bundling the buttons and the track into the texture). I found that if I called splitTrack with theme-&gt;trackRect() instead of bounds, I had to then manually append rects for the buttons.
&gt; 
&gt; Oh! That&apos;s the problem exactly.  splitTrack should take a trackRect, not a boundsRect.

OK, so I&apos;ll go with manually appending the button rects so as to pass a trackRect (although splitTrack() does seem to modify the trackRect internally to get it right). We&apos;ll still need to offset for the thumbRect though to align it with our bounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657895</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-26 13:04:07 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 149573 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149573&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt; &gt; &gt;&gt;&gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?
&gt; &gt; &gt; 
&gt; &gt; &gt; I was a bit surprised by this too.
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems to calculate the thumbRect position as an offset from the track, but *exclusive* from the forward/backward buttons. Calling splitTrack this way is a bit different from calling it through thumbRect(), since the latter only passes the tracRect to splitTrack, whereas we are passing in the entire bounds rect (since we are bundling the buttons and the track into the texture). I found that if I called splitTrack with theme-&gt;trackRect() instead of bounds, I had to then manually append rects for the buttons.
&gt; &gt; 
&gt; &gt; Oh! That&apos;s the problem exactly.  splitTrack should take a trackRect, not a boundsRect.
&gt; 
&gt; OK, so I&apos;ll go with manually appending the button rects so as to pass a trackRect (although splitTrack() does seem to modify the trackRect internally to get it right). We&apos;ll still need to offset for the thumbRect though to align it with our bounds.

By trackRect, I was trying to say that it&apos;d be better to use ScrollbarThemeComposite::trackRect(ScrollbarThemeClient*) like thumbRect() does rather than trying to manually construct this rect.

Button placement can be overridden by scrollbars, so it&apos;s not really safe to use their geometry to reposition other parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657924</commentid>
    <comment_count>12</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 13:30:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (From update of attachment 149573 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149573&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:-64
&gt; &gt; &gt; &gt;&gt;&gt; -    thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y());
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; Why do you need to move the thumbRect like this here? Shouldn&apos;t it be positioned properly with respect to the track?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I was a bit surprised by this too.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It seems to calculate the thumbRect position as an offset from the track, but *exclusive* from the forward/backward buttons. Calling splitTrack this way is a bit different from calling it through thumbRect(), since the latter only passes the tracRect to splitTrack, whereas we are passing in the entire bounds rect (since we are bundling the buttons and the track into the texture). I found that if I called splitTrack with theme-&gt;trackRect() instead of bounds, I had to then manually append rects for the buttons.
&gt; &gt; &gt; 
&gt; &gt; &gt; Oh! That&apos;s the problem exactly.  splitTrack should take a trackRect, not a boundsRect.
&gt; &gt; 
&gt; &gt; OK, so I&apos;ll go with manually appending the button rects so as to pass a trackRect (although splitTrack() does seem to modify the trackRect internally to get it right). We&apos;ll still need to offset for the thumbRect though to align it with our bounds.
&gt; 
&gt; By trackRect, I was trying to say that it&apos;d be better to use ScrollbarThemeComposite::trackRect(ScrollbarThemeClient*) like thumbRect() does rather than trying to manually construct this rect.

Yes, this is what I was describing above. It still seems to ignore the buttons when positioning the thumbRect.

&gt; Button placement can be overridden by scrollbars, so it&apos;s not really safe to use their geometry to reposition other parts.

Hmm, OK. Let me take a look and see what I can learn about this. But everything lives within the content bounds I assume ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658018</commentid>
    <comment_count>13</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 14:55:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; 
&gt; Button placement can be overridden by scrollbars, so it&apos;s not really safe to use their geometry to reposition other parts.

Is there a concise reference to tell me which parts can go where? I know how to do this now, once I can map the right parts to the right names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658031</commentid>
    <comment_count>14</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-26 15:14:14 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; 
&gt; &gt; Button placement can be overridden by scrollbars, so it&apos;s not really safe to use their geometry to reposition other parts.
&gt; 
&gt; Is there a concise reference to tell me which parts can go where? I know how to do this now, once I can map the right parts to the right names.

Got it I think ... new patch in the AM ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658709</commentid>
    <comment_count>15</comment_count>
      <attachid>149773</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-27 10:53:58 -0700</bug_when>
    <thetext>Created attachment 149773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658711</commentid>
    <comment_count>16</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-27 10:55:39 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=149773) [details]
&gt; Patch

OK ... we now have a layout test, and (I think) a more rational way of handling the buttons. My mild bout of insanity regarding thumb positioning seems also to have passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658752</commentid>
    <comment_count>17</comment_count>
      <attachid>149773</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-27 11:51:34 -0700</bug_when>
    <thetext>Comment on attachment 149773
Patch

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

So close.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp:99
&gt; +        // Assumes backTrackRect, ForwardButtonStartPart and BackButtonStartPart form a connected, rectangular region.
&gt; +        backTrackRect.unite(theme-&gt;forwardButtonRect(&amp;m_scrollbar, ForwardButtonStartPart));
&gt; +        backTrackRect.unite(theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonStartPart));
&gt; +        if (!backTrackRect.isEmpty())
&gt; +            quadList.append(CCTextureDrawQuad::create(sharedQuadState, backTrackRect, m_backTrackTextureId, premultipledAlpha, toUVRect(backTrackRect, boundsRect), flipped));
&gt; +
&gt; +        foreTrackRect.unite(theme-&gt;forwardButtonRect(&amp;m_scrollbar, ForwardButtonEndPart));
&gt; +        foreTrackRect.unite(theme-&gt;backButtonRect(&amp;m_scrollbar, BackButtonEndPart));
&gt; +        if (!foreTrackRect.isEmpty())
&gt; +            quadList.append(CCTextureDrawQuad::create(sharedQuadState, foreTrackRect, m_foreTrackTextureId, premultipledAlpha, toUVRect(foreTrackRect, boundsRect), flipped));

I still don&apos;t like the button assumptions.  Is there some way to get rid of them?

backTrack and foreTrack contain the entire content rect.  What about appending foreTrack with the foreTrackRect (as here), but then appending the backTrack quad using boundsRect (as you do in the else case)? In other words, make the forward track quad just represent the forward track part and make the backward track quad represent the background, the buttons and the back track rect?

&gt; LayoutTests/platform/chromium/compositing/scrollbars/custom-composited-different-track-parts.html:68
&gt; +&lt;h2&gt;Composited Custom Scrollbars with Different Coloured Track Parts&lt;/h2&gt;
&gt; +If this test succeeds, the track part before the thumb will be purple, and the track part after
&gt; +the thumb will be green. All four button rects will have different colours.

No text in pixel tests please, since it makes them have cross-platform results.  You can make this a comment in the html if you want to explain what it&apos;s supposed to look like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658765</commentid>
    <comment_count>18</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-27 12:03:17 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 149773 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149773&amp;action=review
&gt; 
&gt; So close.  :)
&gt; 


&gt; I still don&apos;t like the button assumptions.  Is there some way to get rid of them?
&gt; 
&gt; backTrack and foreTrack contain the entire content rect.  What about appending foreTrack with the foreTrackRect (as here), but then appending the backTrack quad using boundsRect (as you do in the else case)? In other words, make the forward track quad just represent the forward track part and make the backward track quad represent the background, the buttons and the back track rect?

Sure, this can be done (there will be a little bit of overdraw, but otherwise this will work).
 
&gt; &gt; LayoutTests/platform/chromium/compositing/scrollbars/custom-composited-different-track-parts.html:68
&gt; &gt; +&lt;h2&gt;Composited Custom Scrollbars with Different Coloured Track Parts&lt;/h2&gt;
&gt; &gt; +If this test succeeds, the track part before the thumb will be purple, and the track part after
&gt; &gt; +the thumb will be green. All four button rects will have different colours.
&gt; 
&gt; No text in pixel tests please, since it makes them have cross-platform results.  You can make this a comment in the html if you want to explain what it&apos;s supposed to look like.

Will remove text asap ... will look kind of bare, but I can live with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658782</commentid>
    <comment_count>19</comment_count>
      <attachid>149785</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-06-27 12:34:07 -0700</bug_when>
    <thetext>Created attachment 149785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658800</commentid>
    <comment_count>20</comment_count>
      <attachid>149785</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-27 12:54:40 -0700</bug_when>
    <thetext>Comment on attachment 149785
Patch

R=me.  Thanks for all the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658874</commentid>
    <comment_count>21</comment_count>
      <attachid>149785</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 14:25:12 -0700</bug_when>
    <thetext>Comment on attachment 149785
Patch

Clearing flags on attachment: 149785

Committed r121371: &lt;http://trac.webkit.org/changeset/121371&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658875</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 14:25:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149357</attachid>
            <date>2012-06-25 14:24:24 -0700</date>
            <delta_ts>2012-06-26 11:33:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89908-20120625172422.patch</filename>
            <type>text/plain</type>
            <size>13404</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBjMTUwZjY2NDg0ZGQw
ZWQzZjg4YThhNzNjOTQyZDYwNWUwZWE3ZC4uNjVmZjdmMDYyZTMxYzE4NDBlZjI1ZjM4YzAxOTJh
YTQyYzk2NjNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA2LTI1ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gc2hvdWxkIHN1cHBvcnQgcGFpbnRpbmcgZm9yd2Fy
ZC10cmFjayBhbmQgYmFjay10cmFjayBpbiBkaWZmZXJlbnQgc3R5bGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBUQkQuCisKKyAgICAgICAg
QWRkcyBzdXBwb3J0IGZvciBhY2NlbGVyYXRlZCBkcmF3aW5nIChpbXBsIHRocmVhZCkgb2Ygc2Ny
b2xsYmFycyB3aXRoIGRpZmZlcmVudCBzdHlsZXMgZm9yIHRoZQorICAgICAgICBmb3J3YXJkLXRy
YWNrIGFuZCBiYWNrLXRyYWNrIHBhcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6OlNjcm9sbGJhckJhY2tncm91bmRQYWludGVy
KToKKyAgICAgICAgKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjp1cGRhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGJhckxheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhckxheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpzZXRCYWNrVHJhY2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldEZvcmVUcmFja1RleHR1cmVJZCk6CisgICAgICAgIChD
Q1Njcm9sbGJhckxheWVySW1wbCk6CisKIDIwMTItMDYtMjUgIEFsZXhhbmRlciBQYXZsb3YgIDxh
cGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBD
YW5ub3QgdmlzdWFsbHkgc2V0IGNhcmV0IGJlZm9yZSB0aGUgZmlyc3QgQ1NTIHByb3BlcnR5IG5h
bWUgY2hhcmFjdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDVlMjNlOTM0NTJkYmZjMDI0NmMyMjJlNjFmZGJmMDBmNjlkZDVkNzAuLjEzYTgzNzExYmIwNzI3
NmMzYjYwYmQ4NzVmZjgyMWE2N2E2ZWE2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwCkBAIC03NiwxMCArNzYsMTUgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIAogICAgIHNjcm9sbGJh
ckxheWVyLT5zZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUobV9zY3JvbGxiYXJPdmVybGF5U3R5bGUp
OwogCi0gICAgaWYgKG1fYmFja2dyb3VuZCAmJiBtX2JhY2tncm91bmQtPnRleHR1cmUoKS0+aXNS
ZXNlcnZlZCgpKQotICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0QmFja2dyb3VuZFRleHR1cmVJ
ZChtX2JhY2tncm91bmQtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIGlmIChtX2JhY2tU
cmFjayAmJiBtX2JhY2tUcmFjay0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHNj
cm9sbGJhckxheWVyLT5zZXRCYWNrVHJhY2tUZXh0dXJlSWQobV9iYWNrVHJhY2stPnRleHR1cmUo
KS0+dGV4dHVyZUlkKCkpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldEJh
Y2tncm91bmRUZXh0dXJlSWQoMCk7CisgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRCYWNrVHJh
Y2tUZXh0dXJlSWQoMCk7CisKKyAgICBpZiAobV9mb3JlVHJhY2sgJiYgbV9mb3JlVHJhY2stPnRl
eHR1cmUoKS0+aXNSZXNlcnZlZCgpKQorICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0Rm9yZVRy
YWNrVGV4dHVyZUlkKG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICBl
bHNlCisgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRGb3JlVHJhY2tUZXh0dXJlSWQoMCk7CiAK
ICAgICBpZiAobV90aHVtYiAmJiBtX3RodW1iLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkKICAg
ICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFRodW1iVGV4dHVyZUlkKG1fdGh1bWItPnRleHR1cmUo
KS0+dGV4dHVyZUlkKCkpOwpAQCAtMTA2LDkgKzExMSw5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiBjbGFzcyBTY3Jv
bGxiYXJCYWNrZ3JvdW5kUGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyPiBj
cmVhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUqIHRoZW1lKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGJhckJhY2tncm91bmRQ
YWludGVyPiBjcmVhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUqIHRoZW1lLCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKHNjcm9sbGJh
ciwgdGhlbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxiYXJCYWNrZ3Jv
dW5kUGFpbnRlcihzY3JvbGxiYXIsIHRoZW1lLCBwYXJ0KSk7CiAgICAgfQogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBJbnRSZWN0JikgT1ZFUlJJREUKQEAgLTEzOCwyNiArMTQzLDIyIEBAIHB1YmxpYzoKICAgICAg
ICAgbV90aGVtZS0+cGFpbnRUcmFja0JhY2tncm91bmQoJmNvbnRleHQsIG1fc2Nyb2xsYmFyLCB0
cmFja1BhaW50UmVjdCk7CiAKICAgICAgICAgYm9vbCB0aHVtYlByZXNlbnQgPSBtX3RoZW1lLT5o
YXNUaHVtYihtX3Njcm9sbGJhcik7Ci0gICAgICAgIGlmICh0aHVtYlByZXNlbnQpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGVyZSdzIG5vICJwYWludCB0aGUgd2hvbGUgdHJhY2siIHBhcnQu
IERyYXdpbmcgYm90aCB0aGUKLSAgICAgICAgICAgIC8vIEJhY2tUcmFja1BhcnQgYW5kIHRoZSBG
b3J3YXJkVHJhY2tQYXJ0IGluIHRoZWlyIHNwbGl0VHJhY2sgcmVjdHMKLSAgICAgICAgICAgIC8v
IGVuZHMgdXAgbGVhdmluZyBhIGRpc3RpbmN0aXZlIGxpbmUuIFBhaW50aW5nIG9uZSBwYXJ0IGFz
IHRoZQotICAgICAgICAgICAgLy8gZW50aXJlIHRyYWNrIGFwcGVhcnMgdG8gYmUgaWRlbnRpY2Fs
IHRvIHBhaW50aW5nIGJvdGggYW5kCi0gICAgICAgICAgICAvLyBjb3ZlcmluZyB1cCB0aGUgc3Bs
aXQgYmV0d2VlbiB0aGVtIHdpdGggdGhlIHRodW1iLgotICAgICAgICAgICAgbV90aGVtZS0+cGFp
bnRUcmFja1BpZWNlKCZjb250ZXh0LCBtX3Njcm9sbGJhciwgdHJhY2tQYWludFJlY3QsIEJhY2tU
cmFja1BhcnQpOwotICAgICAgICB9CisgICAgICAgIGlmICh0aHVtYlByZXNlbnQpCisgICAgICAg
ICAgICBtX3RoZW1lLT5wYWludFRyYWNrUGllY2UoJmNvbnRleHQsIG1fc2Nyb2xsYmFyLCB0cmFj
a1BhaW50UmVjdCwgbV9wYXJ0KTsKIAogICAgICAgICBtX3RoZW1lLT5wYWludFRpY2ttYXJrcygm
Y29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKICAgICB9CiBwcml2YXRlOgot
ICAgIFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0aGVtZSkKKyAgICBTY3JvbGxiYXJCYWNr
Z3JvdW5kUGFpbnRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZSogdGhlbWUsIFNjcm9sbGJhclBhcnQgcGFydCkKICAgICAgICAgOiBtX3Nj
cm9sbGJhcihzY3JvbGxiYXIpCiAgICAgICAgICwgbV90aGVtZSh0aGVtZSkKKyAgICAgICAgLCBt
X3BhcnQocGFydCkKICAgICB7CiAgICAgfQogCiAgICAgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIG1f
c2Nyb2xsYmFyOwogICAgIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiBtX3RoZW1lOworICAgIFNj
cm9sbGJhclBhcnQgbV9wYXJ0OwogfTsKIAogY2xhc3MgU2Nyb2xsYmFyVGh1bWJQYWludGVyIDog
cHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKQEAgLTE5Myw4ICsxOTQsOCBAQCBwcml2YXRl
Ogogdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJU
cmVlSG9zdCogaG9zdCkKIHsKICAgICBpZiAoIWhvc3QgfHwgaG9zdCAhPSBsYXllclRyZWVIb3N0
KCkpIHsKLSAgICAgICAgbV9iYWNrZ3JvdW5kVXBkYXRlci5jbGVhcigpOwotICAgICAgICBtX2Jh
Y2tncm91bmQuY2xlYXIoKTsKKyAgICAgICAgbV9iYWNrVHJhY2tVcGRhdGVyLmNsZWFyKCk7Cisg
ICAgICAgIG1fYmFja1RyYWNrLmNsZWFyKCk7CiAgICAgICAgIG1fdGh1bWJVcGRhdGVyLmNsZWFy
KCk7CiAgICAgICAgIG1fdGh1bWIuY2xlYXIoKTsKICAgICB9CkBAIC0yMDcsMTAgKzIwOCwxNiBA
QCB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVk
ZWQoKQogICAgIGJvb2wgdXNlTWFwU3ViSW1hZ2UgPSBsYXllclRyZWVIb3N0KCktPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1YjsKICAgICBtX3RleHR1cmVGb3JtYXQgPSBs
YXllclRyZWVIb3N0KCktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZv
cm1hdDsKIAotICAgIGlmICghbV9iYWNrZ3JvdW5kVXBkYXRlcikKLSAgICAgICAgbV9iYWNrZ3Jv
dW5kVXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShTY3Jv
bGxiYXJCYWNrZ3JvdW5kUGFpbnRlcjo6Y3JlYXRlKG1fc2Nyb2xsYmFyLmdldCgpLCB0aGVtZSgp
KSwgdXNlTWFwU3ViSW1hZ2UpOwotICAgIGlmICghbV9iYWNrZ3JvdW5kKQotICAgICAgICBtX2Jh
Y2tncm91bmQgPSBtX2JhY2tncm91bmRVcGRhdGVyLT5jcmVhdGVUZXh0dXJlKGxheWVyVHJlZUhv
c3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKKyAgICBpZiAoIW1fYmFja1RyYWNrVXBk
YXRlcikKKyAgICAgICAgbV9iYWNrVHJhY2tVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6Y3JlYXRlKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpjcmVhdGUobV9z
Y3JvbGxiYXIuZ2V0KCksIHRoZW1lKCksIEJhY2tUcmFja1BhcnQpLCB1c2VNYXBTdWJJbWFnZSk7
CisgICAgaWYgKCFtX2JhY2tUcmFjaykKKyAgICAgICAgbV9iYWNrVHJhY2sgPSBtX2JhY2tUcmFj
a1VwZGF0ZXItPmNyZWF0ZVRleHR1cmUobGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkpOworCisgICAgaWYgKCFtX2ZvcmVUcmFja1VwZGF0ZXIpCisgICAgICAgIG1fZm9y
ZVRyYWNrVXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShT
Y3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcjo6Y3JlYXRlKG1fc2Nyb2xsYmFyLmdldCgpLCB0aGVt
ZSgpLCBGb3J3YXJkVHJhY2tQYXJ0KSwgdXNlTWFwU3ViSW1hZ2UpOworICAgIGlmICghbV9mb3Jl
VHJhY2spCisgICAgICAgIG1fZm9yZVRyYWNrID0gbV9iYWNrVHJhY2tVcGRhdGVyLT5jcmVhdGVU
ZXh0dXJlKGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKKwogCiAg
ICAgaWYgKCFtX3RodW1iVXBkYXRlcikKICAgICAgICAgbV90aHVtYlVwZGF0ZXIgPSBCaXRtYXBD
YW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Nyb2xsYmFyVGh1bWJQYWludGVyOjpj
cmVhdGUobV9zY3JvbGxiYXIuZ2V0KCksIHRoZW1lKCkpLCB1c2VNYXBTdWJJbWFnZSk7CkBAIC0y
NTMsNyArMjYwLDggQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0
dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb24KIAogICAgIEludFBvaW50IHNj
cm9sbGJhck9yaWdpbihtX3Njcm9sbGJhci0+eCgpLCBtX3Njcm9sbGJhci0+eSgpKTsKICAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KHNjcm9sbGJhck9yaWdpbiwgY29udGVudEJvdW5kcygpKTsKLSAg
ICB1cGRhdGVQYXJ0KG1fYmFja2dyb3VuZFVwZGF0ZXIuZ2V0KCksIG1fYmFja2dyb3VuZC5nZXQo
KSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOworICAgIHVwZGF0ZVBhcnQobV9iYWNrVHJhY2tVcGRh
dGVyLmdldCgpLCBtX2JhY2tUcmFjay5nZXQoKSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOworICAg
IHVwZGF0ZVBhcnQobV9mb3JlVHJhY2tVcGRhdGVyLmdldCgpLCBtX2ZvcmVUcmFjay5nZXQoKSwg
Y29udGVudFJlY3QsIHVwZGF0ZXIpOwogCiAgICAgLy8gQ29uc2lkZXIgdGhlIHRodW1iIHRvIGJl
IGF0IHRoZSBvcmlnaW4gd2hlbiBwYWludGluZy4KICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IElu
dFJlY3QoSW50UG9pbnQoKSwgdGhlbWUoKS0+dGh1bWJSZWN0KG1fc2Nyb2xsYmFyLmdldCgpKS5z
aXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGFmMjIxNWJk
MGE3Y2YyNDllNzQxZGI2NGM0MDIyOGQ2YzRjM2FiZjkuLjAwYTM5MmE1NjMzNzMyMGU5NTUzYTE2
OWM4ZDQ3YjdhNTBhYzA1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgK
QEAgLTY2LDExICs2NiwxMyBAQCBwcml2YXRlOgogCiAgICAgR0MzRGVudW0gbV90ZXh0dXJlRm9y
bWF0OwogCi0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fYmFja2dyb3VuZFVwZGF0
ZXI7CisgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fYmFja1RyYWNrVXBkYXRlcjsK
KyAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9mb3JlVHJhY2tVcGRhdGVyOwogICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RodW1iVXBkYXRlcjsKIAogICAgIC8vIEFs
bCB0aGUgcGFydHMgb2YgdGhlIHNjcm9sbGJhciBleGNlcHQgdGhlIHRodW1iCi0gICAgT3duUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fYmFja2dyb3VuZDsKKyAgICBPd25QdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV9iYWNrVHJhY2s7CisgICAgT3duUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fZm9yZVRyYWNrOwogICAgIE93blB0cjxMYXll
clRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBtX3RodW1iOwogCiAgICAgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxi
YXJMYXllckltcGwuY3BwCmluZGV4IGEyMmVmNWQyNjY3OWFkYmI1ZWJiMjZlZWJkNDQwZGM5NWQy
NDdjOTYuLmQzYzQyM2FiNTIwZWRhOGNjYjJkNTBhNTAwYzA5MTc0MWNhZTFjNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xs
YmFyTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAKQEAgLTM0LDYgKzM0LDggQEAKICNp
bmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVh
ZC5oIgogCisjaW5jbHVkZSA8c3RkaW8uaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNz
T3duUHRyPENDU2Nyb2xsYmFyTGF5ZXJJbXBsPiBDQ1Njcm9sbGJhckxheWVySW1wbDo6Y3JlYXRl
KGludCBpZCkKQEAgLTQ1LDExICs0NywyMSBAQCBDQ1Njcm9sbGJhckxheWVySW1wbDo6Q0NTY3Jv
bGxiYXJMYXllckltcGwoaW50IGlkKQogICAgIDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3Nj
cm9sbExheWVyKDApCiAgICAgLCBtX3Njcm9sbGJhcih0aGlzKQotICAgICwgbV9iYWNrZ3JvdW5k
VGV4dHVyZUlkKDApCisgICAgLCBtX2JhY2tUcmFja1RleHR1cmVJZCgwKQogICAgICwgbV90aHVt
YlRleHR1cmVJZCgwKQogewogfQogCituYW1lc3BhY2UgeworCitGbG9hdFJlY3QgdG9VVlJlY3Qo
Y29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50UmVjdCYgYm91bmRzKQoreworICAgIHJldHVybiBG
bG9hdFJlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIueCgpKSAvIGJvdW5kcy53aWR0aCgpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oci55KCkpIC8gYm91bmRzLmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIud2lkdGgoKSkgLyBib3VuZHMud2lkdGgoKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHIuaGVpZ2h0KCkpIC8gYm91bmRzLmhlaWdodCgpKTsKK30KKworfQor
CiB2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBib29sJikK
IHsKICAgICBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSogdGhlbWUgPSBzdGF0aWNfY2FzdDxTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZSo+KFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpKTsKQEAgLTU3LDIy
ICs2OSwzMSBAQCB2b2lkIENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRD
dWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YQogICAgICAgICByZXR1cm47CiAKICAg
ICBib29sIHByZW11bHRpcGxlZEFscGhhID0gZmFsc2U7Ci0gICAgRmxvYXRSZWN0IHV2UmVjdCgw
LCAwLCAxLCAxKTsKICAgICBib29sIGZsaXBwZWQgPSBmYWxzZTsKKyAgICBJbnRSZWN0IGJvdW5k
c1JlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKIAogICAgIEludFJlY3QgdGh1bWJS
ZWN0ID0gdGhlbWUtPnRodW1iUmVjdCgmbV9zY3JvbGxiYXIpOwogICAgIHRodW1iUmVjdC5tb3Zl
KC1tX3Njcm9sbGJhci54KCksIC1tX3Njcm9sbGJhci55KCkpOwogICAgIGlmIChtX3RodW1iVGV4
dHVyZUlkICYmIHRoZW1lLT5oYXNUaHVtYigmbV9zY3JvbGxiYXIpICYmICF0aHVtYlJlY3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxDQ1RleHR1cmVEcmF3UXVhZD4gcXVhZCA9IENDVGV4
dHVyZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aHVtYlJlY3QsIG1fdGh1bWJU
ZXh0dXJlSWQsIHByZW11bHRpcGxlZEFscGhhLCB1dlJlY3QsIGZsaXBwZWQpOworICAgICAgICBP
d25QdHI8Q0NUZXh0dXJlRHJhd1F1YWQ+IHF1YWQgPSBDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRl
KHNoYXJlZFF1YWRTdGF0ZSwgdGh1bWJSZWN0LCBtX3RodW1iVGV4dHVyZUlkLCBwcmVtdWx0aXBs
ZWRBbHBoYSwgRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCBmbGlwcGVkKTsKICAgICAgICAgcXVhZC0+
c2V0TmVlZHNCbGVuZGluZygpOwogICAgICAgICBxdWFkTGlzdC5hcHBlbmQocXVhZC5yZWxlYXNl
KCkpOwogICAgIH0KIAotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZUlkKQorICAgIGlmICgh
bV9iYWNrVHJhY2tUZXh0dXJlSWQgfHwgIW1fZm9yZVRyYWNrVGV4dHVyZUlkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbnRSZWN0IGJhY2tncm91bmRSZWN0KEludFBvaW50KCksIGNvbnRlbnRC
b3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDVGV4dHVyZURyYXdRdWFkOjpjcmVhdGUo
c2hhcmVkUXVhZFN0YXRlLCBiYWNrZ3JvdW5kUmVjdCwgbV9iYWNrZ3JvdW5kVGV4dHVyZUlkLCBw
cmVtdWx0aXBsZWRBbHBoYSwgdXZSZWN0LCBmbGlwcGVkKSk7CisgICAgSW50UmVjdCBiYWNrVHJh
Y2tSZWN0KEludFBvaW50KCksIG1fc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IEludFNpemUodGh1bWJSZWN0LngoKSwgdGh1bWJSZWN0LmhlaWdodCgpKSA6
IEludFNpemUodGh1bWJSZWN0LndpZHRoKCksIHRodW1iUmVjdC55KCkpKTsKKyAgICBpZiAoIWJh
Y2tUcmFja1JlY3QuaXNFbXB0eSgpKQorICAgICAgICBxdWFkTGlzdC5hcHBlbmQoQ0NUZXh0dXJl
RHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGJhY2tUcmFja1JlY3QsIG1fYmFja1Ry
YWNrVGV4dHVyZUlkLCBwcmVtdWx0aXBsZWRBbHBoYSwgdG9VVlJlY3QoYmFja1RyYWNrUmVjdCwg
Ym91bmRzUmVjdCksIGZsaXBwZWQpKTsKKworICAgIEludFJlY3QgZm9yZVRyYWNrUmVjdChJbnRQ
b2ludCh0aHVtYlJlY3QueCgpLCB0aHVtYlJlY3QueSgpKSwgSW50U2l6ZSgpKTsKKyAgICBpZiAo
bV9zY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAg
ICBmb3JlVHJhY2tSZWN0LnNldFNpemUoSW50U2l6ZShjb250ZW50Qm91bmRzKCkud2lkdGgoKSAt
IGJhY2tUcmFja1JlY3Qud2lkdGgoKSwgY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7CisgICAg
ZWxzZQorICAgICAgICBmb3JlVHJhY2tSZWN0LnNldFNpemUoSW50U2l6ZSh0aHVtYlJlY3Qud2lk
dGgoKSwgY29udGVudEJvdW5kcygpLmhlaWdodCgpIC0gYmFja1RyYWNrUmVjdC5oZWlnaHQoKSkp
OworICAgIGlmICghZm9yZVRyYWNrUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHF1YWRMaXN0LmFw
cGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgZm9yZVRyYWNr
UmVjdCwgbV9mb3JlVHJhY2tUZXh0dXJlSWQsIHByZW11bHRpcGxlZEFscGhhLCB0b1VWUmVjdChm
b3JlVHJhY2tSZWN0LCBib3VuZHNSZWN0KSwgZmxpcHBlZCkpOwogfQogCiBpbnQgQ0NTY3JvbGxi
YXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp4KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5oCmluZGV4IDk4ZDU1MzQ0NjRiMzk3OTViZTA2YjhkMzBlNTllMzc2MzIz
ZmIzMDcuLjQ3YzY3NjkzYmZmMWIzZWUxZmVkMTFhZjJkNTVjMmI2ODZjNzE4YTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xs
YmFyTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaApAQCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVuYWJs
ZWQ7IH0KIAotICAgIHZvaWQgc2V0QmFja2dyb3VuZFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBt
X2JhY2tncm91bmRUZXh0dXJlSWQgPSBpZDsgfQorICAgIHZvaWQgc2V0QmFja1RyYWNrVGV4dHVy
ZUlkKHVuc2lnbmVkIGlkKSB7IG1fYmFja1RyYWNrVGV4dHVyZUlkID0gaWQ7IH0KKyAgICB2b2lk
IHNldEZvcmVUcmFja1RleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX2ZvcmVUcmFja1RleHR1cmVJ
ZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRUaHVtYlRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3Ro
dW1iVGV4dHVyZUlkID0gaWQ7IH0KIAogICAgIENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXI7IH0KQEAgLTEyNCw3ICsxMjUsOCBAQCBwcml2YXRl
OgogICAgIH07CiAgICAgQ0NTY3JvbGxiYXIgbV9zY3JvbGxiYXI7CiAKLSAgICB1bnNpZ25lZCBt
X2JhY2tncm91bmRUZXh0dXJlSWQ7CisgICAgdW5zaWduZWQgbV9iYWNrVHJhY2tUZXh0dXJlSWQ7
CisgICAgdW5zaWduZWQgbV9mb3JlVHJhY2tUZXh0dXJlSWQ7CiAgICAgdW5zaWduZWQgbV90aHVt
YlRleHR1cmVJZDsKIAogICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBtX3Njcm9sbGJhck92ZXJs
YXlTdHlsZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149573</attachid>
            <date>2012-06-26 11:33:42 -0700</date>
            <delta_ts>2012-06-27 10:53:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89908-20120626143341.patch</filename>
            <type>text/plain</type>
            <size>13783</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBjMTUwZjY2NDg0ZGQw
ZWQzZjg4YThhNzNjOTQyZDYwNWUwZWE3ZC4uZTE4NjUwNjc0YTQwNDQxNzA2OTUzYzU4YjhhNzkz
OWZiODM3MGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA2LTI2ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gc2hvdWxkIHN1cHBvcnQgcGFpbnRpbmcgZm9yd2Fy
ZC10cmFjayBhbmQgYmFjay10cmFjayBpbiBkaWZmZXJlbnQgc3R5bGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBUQkQuCisKKyAgICAgICAg
QWRkcyBzdXBwb3J0IGZvciBhY2NlbGVyYXRlZCBkcmF3aW5nIChpbXBsIHRocmVhZCkgb2Ygc2Ny
b2xsYmFycyB3aXRoIGRpZmZlcmVudCBzdHlsZXMgZm9yIHRoZQorICAgICAgICBmb3J3YXJkLXRy
YWNrIGFuZCBiYWNrLXRyYWNrIHBhcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6OlNjcm9sbGJhckJhY2tncm91bmRQYWludGVy
KToKKyAgICAgICAgKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjp1cGRhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGJhckxheWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9sbGJhckxheWVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5
ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xs
YmFyTGF5ZXJJbXBsOjpzZXRCYWNrVHJhY2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldEZvcmVUcmFja1RleHR1cmVJZCk6CisgICAgICAgIChD
Q1Njcm9sbGJhckxheWVySW1wbCk6CisKIDIwMTItMDYtMjUgIEFsZXhhbmRlciBQYXZsb3YgIDxh
cGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbU3R5bGVzXSBD
YW5ub3QgdmlzdWFsbHkgc2V0IGNhcmV0IGJlZm9yZSB0aGUgZmlyc3QgQ1NTIHByb3BlcnR5IG5h
bWUgY2hhcmFjdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDVlMjNlOTM0NTJkYmZjMDI0NmMyMjJlNjFmZGJmMDBmNjlkZDVkNzAuLjhmYzRjNzg0MjFlYTk5
ODk0NzgyZWZmMzIwZmE2NTY4MDMzNWE2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVy
Q2hyb21pdW0uY3BwCkBAIC03NiwxMCArNzYsMTUgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9t
aXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIAogICAgIHNjcm9sbGJh
ckxheWVyLT5zZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUobV9zY3JvbGxiYXJPdmVybGF5U3R5bGUp
OwogCi0gICAgaWYgKG1fYmFja2dyb3VuZCAmJiBtX2JhY2tncm91bmQtPnRleHR1cmUoKS0+aXNS
ZXNlcnZlZCgpKQotICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0QmFja2dyb3VuZFRleHR1cmVJ
ZChtX2JhY2tncm91bmQtPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOworICAgIGlmIChtX2JhY2tU
cmFjayAmJiBtX2JhY2tUcmFjay0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHNj
cm9sbGJhckxheWVyLT5zZXRCYWNrVHJhY2tUZXh0dXJlSWQobV9iYWNrVHJhY2stPnRleHR1cmUo
KS0+dGV4dHVyZUlkKCkpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldEJh
Y2tncm91bmRUZXh0dXJlSWQoMCk7CisgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRCYWNrVHJh
Y2tUZXh0dXJlSWQoMCk7CisKKyAgICBpZiAobV9mb3JlVHJhY2sgJiYgbV9mb3JlVHJhY2stPnRl
eHR1cmUoKS0+aXNSZXNlcnZlZCgpKQorICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0Rm9yZVRy
YWNrVGV4dHVyZUlkKG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICBl
bHNlCisgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRGb3JlVHJhY2tUZXh0dXJlSWQoMCk7CiAK
ICAgICBpZiAobV90aHVtYiAmJiBtX3RodW1iLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkKICAg
ICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFRodW1iVGV4dHVyZUlkKG1fdGh1bWItPnRleHR1cmUo
KS0+dGV4dHVyZUlkKCkpOwpAQCAtMTA2LDkgKzExMSw5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiBjbGFzcyBTY3Jv
bGxiYXJCYWNrZ3JvdW5kUGFpbnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyPiBj
cmVhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUqIHRoZW1lKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGJhckJhY2tncm91bmRQ
YWludGVyPiBjcmVhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUqIHRoZW1lLCBTY3JvbGxiYXJQYXJ0IHRyYWNrUGFydCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIoc2Ny
b2xsYmFyLCB0aGVtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGJhckJh
Y2tncm91bmRQYWludGVyKHNjcm9sbGJhciwgdGhlbWUsIHRyYWNrUGFydCkpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgSW50UmVjdCYpIE9WRVJSSURFCkBAIC0xMzgsMjYgKzE0MywyMiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdGhlbWUtPnBhaW50VHJhY2tCYWNrZ3JvdW5kKCZjb250ZXh0LCBtX3Nj
cm9sbGJhciwgdHJhY2tQYWludFJlY3QpOwogCiAgICAgICAgIGJvb2wgdGh1bWJQcmVzZW50ID0g
bV90aGVtZS0+aGFzVGh1bWIobV9zY3JvbGxiYXIpOwotICAgICAgICBpZiAodGh1bWJQcmVzZW50
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUncyBubyAicGFpbnQgdGhlIHdob2xlIHRy
YWNrIiBwYXJ0LiBEcmF3aW5nIGJvdGggdGhlCi0gICAgICAgICAgICAvLyBCYWNrVHJhY2tQYXJ0
IGFuZCB0aGUgRm9yd2FyZFRyYWNrUGFydCBpbiB0aGVpciBzcGxpdFRyYWNrIHJlY3RzCi0gICAg
ICAgICAgICAvLyBlbmRzIHVwIGxlYXZpbmcgYSBkaXN0aW5jdGl2ZSBsaW5lLiBQYWludGluZyBv
bmUgcGFydCBhcyB0aGUKLSAgICAgICAgICAgIC8vIGVudGlyZSB0cmFjayBhcHBlYXJzIHRvIGJl
IGlkZW50aWNhbCB0byBwYWludGluZyBib3RoIGFuZAotICAgICAgICAgICAgLy8gY292ZXJpbmcg
dXAgdGhlIHNwbGl0IGJldHdlZW4gdGhlbSB3aXRoIHRoZSB0aHVtYi4KLSAgICAgICAgICAgIG1f
dGhlbWUtPnBhaW50VHJhY2tQaWVjZSgmY29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRS
ZWN0LCBCYWNrVHJhY2tQYXJ0KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGh1bWJQcmVzZW50
KQorICAgICAgICAgICAgbV90aGVtZS0+cGFpbnRUcmFja1BpZWNlKCZjb250ZXh0LCBtX3Njcm9s
bGJhciwgdHJhY2tQYWludFJlY3QsIG1fdHJhY2tQYXJ0KTsKIAogICAgICAgICBtX3RoZW1lLT5w
YWludFRpY2ttYXJrcygmY29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKICAg
ICB9CiBwcml2YXRlOgotICAgIFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0aGVtZSkKKyAg
ICBTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xs
YmFyLCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSogdGhlbWUsIFNjcm9sbGJhclBhcnQgdHJhY2tQ
YXJ0KQogICAgICAgICA6IG1fc2Nyb2xsYmFyKHNjcm9sbGJhcikKICAgICAgICAgLCBtX3RoZW1l
KHRoZW1lKQorICAgICAgICAsIG1fdHJhY2tQYXJ0KHRyYWNrUGFydCkKICAgICB7CiAgICAgfQog
CiAgICAgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIG1fc2Nyb2xsYmFyOwogICAgIFNjcm9sbGJhclRo
ZW1lQ29tcG9zaXRlKiBtX3RoZW1lOworICAgIFNjcm9sbGJhclBhcnQgbV90cmFja1BhcnQ7CiB9
OwogCiBjbGFzcyBTY3JvbGxiYXJUaHVtYlBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hy
b21pdW0gewpAQCAtMTkzLDggKzE5NCw4IEBAIHByaXZhdGU6CiB2b2lkIFNjcm9sbGJhckxheWVy
Q2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogICAg
IGlmICghaG9zdCB8fCBob3N0ICE9IGxheWVyVHJlZUhvc3QoKSkgewotICAgICAgICBtX2JhY2tn
cm91bmRVcGRhdGVyLmNsZWFyKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZC5jbGVhcigpOworICAg
ICAgICBtX2JhY2tUcmFja1VwZGF0ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9iYWNrVHJhY2suY2xl
YXIoKTsKICAgICAgICAgbV90aHVtYlVwZGF0ZXIuY2xlYXIoKTsKICAgICAgICAgbV90aHVtYi5j
bGVhcigpOwogICAgIH0KQEAgLTIwNywxMCArMjA4LDE5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCiAgICAgYm9vbCB1c2VNYXBT
dWJJbWFnZSA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVz
aW5nTWFwU3ViOwogICAgIG1fdGV4dHVyZUZvcm1hdCA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogCi0gICAgaWYgKCFtX2Jh
Y2tncm91bmRVcGRhdGVyKQotICAgICAgICBtX2JhY2tncm91bmRVcGRhdGVyID0gQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVy
OjpjcmVhdGUobV9zY3JvbGxiYXIuZ2V0KCksIHRoZW1lKCkpLCB1c2VNYXBTdWJJbWFnZSk7Ci0g
ICAgaWYgKCFtX2JhY2tncm91bmQpCi0gICAgICAgIG1fYmFja2dyb3VuZCA9IG1fYmFja2dyb3Vu
ZFVwZGF0ZXItPmNyZWF0ZVRleHR1cmUobGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkpOworICAgIGlmICghbV9iYWNrVHJhY2tVcGRhdGVyKQorICAgICAgICBtX2JhY2tU
cmFja1VwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Ny
b2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6OmNyZWF0ZShtX3Njcm9sbGJhci5nZXQoKSwgdGhlbWUo
KSwgQmFja1RyYWNrUGFydCksIHVzZU1hcFN1YkltYWdlKTsKKyAgICBpZiAoIW1fYmFja1RyYWNr
KQorICAgICAgICBtX2JhY2tUcmFjayA9IG1fYmFja1RyYWNrVXBkYXRlci0+Y3JlYXRlVGV4dHVy
ZShsYXllclRyZWVIb3N0KCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSk7CisKKyAgICAvLyBP
bmx5IGNyZWF0ZSB0d28tcGFydCB0cmFjayBpZiB3ZSB0aGluayB0aGUgdHdvIHBhcnRzIGNvdWxk
IGJlIGRpZmZlcmVudCBpbiBhcHBlYXJhbmNlLgorICAgIGlmIChtX3Njcm9sbGJhci0+aXNDdXN0
b21TY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIW1fZm9yZVRyYWNrVXBkYXRlcikKKyAgICAg
ICAgICAgIG1fZm9yZVRyYWNrVXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0
ZXI6OmNyZWF0ZShTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcjo6Y3JlYXRlKG1fc2Nyb2xsYmFy
LmdldCgpLCB0aGVtZSgpLCBGb3J3YXJkVHJhY2tQYXJ0KSwgdXNlTWFwU3ViSW1hZ2UpOworICAg
ICAgICBpZiAoIW1fZm9yZVRyYWNrKQorICAgICAgICAgICAgbV9mb3JlVHJhY2sgPSBtX2JhY2tU
cmFja1VwZGF0ZXItPmNyZWF0ZVRleHR1cmUobGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCkpOworICAgIH0KKwogCiAgICAgaWYgKCFtX3RodW1iVXBkYXRlcikKICAgICAg
ICAgbV90aHVtYlVwZGF0ZXIgPSBCaXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVh
dGUoU2Nyb2xsYmFyVGh1bWJQYWludGVyOjpjcmVhdGUobV9zY3JvbGxiYXIuZ2V0KCksIHRoZW1l
KCkpLCB1c2VNYXBTdWJJbWFnZSk7CkBAIC0yNTMsNyArMjYzLDkgQEAgdm9pZCBTY3JvbGxiYXJM
YXllckNocm9taXVtOjp1cGRhdGUoQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgQ0NP
Y2NsdXNpb24KIAogICAgIEludFBvaW50IHNjcm9sbGJhck9yaWdpbihtX3Njcm9sbGJhci0+eCgp
LCBtX3Njcm9sbGJhci0+eSgpKTsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KHNjcm9sbGJhck9y
aWdpbiwgY29udGVudEJvdW5kcygpKTsKLSAgICB1cGRhdGVQYXJ0KG1fYmFja2dyb3VuZFVwZGF0
ZXIuZ2V0KCksIG1fYmFja2dyb3VuZC5nZXQoKSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOworICAg
IHVwZGF0ZVBhcnQobV9iYWNrVHJhY2tVcGRhdGVyLmdldCgpLCBtX2JhY2tUcmFjay5nZXQoKSwg
Y29udGVudFJlY3QsIHVwZGF0ZXIpOworICAgIGlmIChtX2ZvcmVUcmFjayAmJiBtX2ZvcmVUcmFj
a1VwZGF0ZXIpCisgICAgICAgIHVwZGF0ZVBhcnQobV9mb3JlVHJhY2tVcGRhdGVyLmdldCgpLCBt
X2ZvcmVUcmFjay5nZXQoKSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOwogCiAgICAgLy8gQ29uc2lk
ZXIgdGhlIHRodW1iIHRvIGJlIGF0IHRoZSBvcmlnaW4gd2hlbiBwYWludGluZy4KICAgICBJbnRS
ZWN0IHRodW1iUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgdGhlbWUoKS0+dGh1bWJSZWN0KG1f
c2Nyb2xsYmFyLmdldCgpKS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IGFmMjIxNWJkMGE3Y2YyNDllNzQxZGI2NGM0MDIyOGQ2YzRjM2FiZjkuLjAwYTM5
MmE1NjMzNzMyMGU5NTUzYTE2OWM4ZDQ3YjdhNTBhYzA1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxi
YXJMYXllckNocm9taXVtLmgKQEAgLTY2LDExICs2NiwxMyBAQCBwcml2YXRlOgogCiAgICAgR0Mz
RGVudW0gbV90ZXh0dXJlRm9ybWF0OwogCi0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+
IG1fYmFja2dyb3VuZFVwZGF0ZXI7CisgICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1f
YmFja1RyYWNrVXBkYXRlcjsKKyAgICBSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9mb3Jl
VHJhY2tVcGRhdGVyOwogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RodW1iVXBk
YXRlcjsKIAogICAgIC8vIEFsbCB0aGUgcGFydHMgb2YgdGhlIHNjcm9sbGJhciBleGNlcHQgdGhl
IHRodW1iCi0gICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fYmFja2dy
b3VuZDsKKyAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV9iYWNrVHJh
Y2s7CisgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fZm9yZVRyYWNr
OwogICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyOjpUZXh0dXJlPiBtX3RodW1iOwogCiAg
ICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3Jv
bGxiYXJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwCmluZGV4IGEyMmVmNWQyNjY3OWFkYmI1
ZWJiMjZlZWJkNDQwZGM5NWQyNDdjOTYuLjA1NWQxZGUyZDc2MDBkZjY0MjdhNDEyMjFlMWY5ZTY3
YTBiZWNjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAKQEAg
LTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKICNpbmNsdWRlICJj
Yy9DQ1RleHR1cmVEcmF3UXVhZC5oIgogCisjaW5jbHVkZSA8c3RkaW8uaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzT3duUHRyPENDU2Nyb2xsYmFyTGF5ZXJJbXBsPiBDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Y3JlYXRlKGludCBpZCkKQEAgLTQ1LDExICs0NywyMyBAQCBDQ1Njcm9sbGJh
ckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllckltcGwoaW50IGlkKQogICAgIDogQ0NMYXllcklt
cGwoaWQpCiAgICAgLCBtX3Njcm9sbExheWVyKDApCiAgICAgLCBtX3Njcm9sbGJhcih0aGlzKQot
ICAgICwgbV9iYWNrZ3JvdW5kVGV4dHVyZUlkKDApCisgICAgLCBtX2JhY2tUcmFja1RleHR1cmVJ
ZCgwKQorICAgICwgbV9mb3JlVHJhY2tUZXh0dXJlSWQoMCkKICAgICAsIG1fdGh1bWJUZXh0dXJl
SWQoMCkKIHsKIH0KIAorbmFtZXNwYWNlIHsKKworRmxvYXRSZWN0IHRvVVZSZWN0KGNvbnN0IElu
dFJlY3QmIHIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKK3sKKyAgICBBU1NFUlQoYm91bmRzLmNv
bnRhaW5zKHIpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0PihyLngo
KSkgLyBib3VuZHMud2lkdGgoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIueSgpKSAvIGJvdW5kcy5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyLndpZHRo
KCkpIC8gYm91bmRzLndpZHRoKCksIHN0YXRpY19jYXN0PGZsb2F0PihyLmhlaWdodCgpKSAvIGJv
dW5kcy5oZWlnaHQoKSk7Cit9CisKK30KKwogdm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6YXBw
ZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
IHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpCiB7CiAgICAgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUq
IHRoZW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUqPihTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKSk7CkBAIC01NywyMiArNzEsMzcgQEAgdm9pZCBDQ1Njcm9sbGJhckxheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRR
dWEKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBwcmVtdWx0aXBsZWRBbHBoYSA9IGZhbHNl
OwotICAgIEZsb2F0UmVjdCB1dlJlY3QoMCwgMCwgMSwgMSk7CiAgICAgYm9vbCBmbGlwcGVkID0g
ZmFsc2U7CisgICAgRmxvYXRSZWN0IHV2UmVjdCgwLCAwLCAxLCAxKTsKKyAgICBJbnRSZWN0IGJv
dW5kc1JlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKKworICAgIEludFJlY3QgdGh1
bWJSZWN0LCBiYWNrVHJhY2tSZWN0LCBmb3JlVHJhY2tSZWN0OworICAgIHRoZW1lLT5zcGxpdFRy
YWNrKCZtX3Njcm9sbGJhciwgYm91bmRzUmVjdCwgYmFja1RyYWNrUmVjdCwgdGh1bWJSZWN0LCBm
b3JlVHJhY2tSZWN0KTsKKyAgICBpZiAobV9zY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikKKyAgICAgICAgdGh1bWJSZWN0Lm1vdmUoMCwgdGhlbWUtPmJhY2tCdXR0
b25SZWN0KCZtX3Njcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFydCwgdHJ1ZSkuc2l6ZSgpLmhl
aWdodCgpKTsKKyAgICBlbHNlCisgICAgICAgIHRodW1iUmVjdC5tb3ZlKHRoZW1lLT5iYWNrQnV0
dG9uUmVjdCgmbV9zY3JvbGxiYXIsIEJhY2tCdXR0b25TdGFydFBhcnQsIHRydWUpLnNpemUoKS53
aWR0aCgpLCAwKTsKIAotICAgIEludFJlY3QgdGh1bWJSZWN0ID0gdGhlbWUtPnRodW1iUmVjdCgm
bV9zY3JvbGxiYXIpOwotICAgIHRodW1iUmVjdC5tb3ZlKC1tX3Njcm9sbGJhci54KCksIC1tX3Nj
cm9sbGJhci55KCkpOwogICAgIGlmIChtX3RodW1iVGV4dHVyZUlkICYmIHRoZW1lLT5oYXNUaHVt
YigmbV9zY3JvbGxiYXIpICYmICF0aHVtYlJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIE93blB0
cjxDQ1RleHR1cmVEcmF3UXVhZD4gcXVhZCA9IENDVGV4dHVyZURyYXdRdWFkOjpjcmVhdGUoc2hh
cmVkUXVhZFN0YXRlLCB0aHVtYlJlY3QsIG1fdGh1bWJUZXh0dXJlSWQsIHByZW11bHRpcGxlZEFs
cGhhLCB1dlJlY3QsIGZsaXBwZWQpOwogICAgICAgICBxdWFkLT5zZXROZWVkc0JsZW5kaW5nKCk7
CiAgICAgICAgIHF1YWRMaXN0LmFwcGVuZChxdWFkLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAg
aWYgKCFtX2JhY2tncm91bmRUZXh0dXJlSWQpCisgICAgaWYgKCFtX2JhY2tUcmFja1RleHR1cmVJ
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBiYWNrZ3JvdW5kUmVjdChJbnRQb2lu
dCgpLCBjb250ZW50Qm91bmRzKCkpOwotICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RleHR1cmVEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgYmFja2dyb3VuZFJlY3QsIG1fYmFja2dyb3Vu
ZFRleHR1cmVJZCwgcHJlbXVsdGlwbGVkQWxwaGEsIHV2UmVjdCwgZmxpcHBlZCkpOworICAgIC8v
IFdlIG9ubHkgcGFpbnQgdGhlIHRyYWNrIGluIHR3byBwYXJ0cyBpZiB3ZSB3ZXJlIGdpdmVuIGEg
dGV4dHVyZSBmb3IgdGhlIGZvcndhcmQgdHJhY2sgcGFydC4KKyAgICBpZiAobV9mb3JlVHJhY2tU
ZXh0dXJlSWQpIHsKKyAgICAgICAgaWYgKCFiYWNrVHJhY2tSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHF1YWRMaXN0LmFwcGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgYmFja1RyYWNrUmVjdCwgbV9iYWNrVHJhY2tUZXh0dXJlSWQsIHByZW11bHRpcGxl
ZEFscGhhLCB0b1VWUmVjdChiYWNrVHJhY2tSZWN0LCBib3VuZHNSZWN0KSwgZmxpcHBlZCkpOwor
CisgICAgICAgIGlmICghZm9yZVRyYWNrUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBxdWFk
TGlzdC5hcHBlbmQoQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGZv
cmVUcmFja1JlY3QsIG1fZm9yZVRyYWNrVGV4dHVyZUlkLCBwcmVtdWx0aXBsZWRBbHBoYSwgdG9V
VlJlY3QoZm9yZVRyYWNrUmVjdCwgYm91bmRzUmVjdCksIGZsaXBwZWQpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWJvdW5kc1JlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcXVhZExp
c3QuYXBwZW5kKENDVGV4dHVyZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBib3Vu
ZHNSZWN0LCBtX2JhY2tUcmFja1RleHR1cmVJZCwgcHJlbXVsdGlwbGVkQWxwaGEsIHV2UmVjdCwg
ZmxpcHBlZCkpOworICAgIH0KIH0KIAogaW50IENDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpDQ1Njcm9s
bGJhcjo6eCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaAppbmRl
eCA5OGQ1NTM0NDY0YjM5Nzk1YmUwNmI4ZDMwZTU5ZTM3NjMyM2ZiMzA3Li40N2M2NzY5M2JmZjFi
M2VlMWZlZDExYWYyZDU1YzJiNjg2YzcxOGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFy
TGF5ZXJJbXBsLmgKQEAgLTU0LDcgKzU0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZWQgPSBlbmFibGVkOyB9CiAKLSAgICB2b2lkIHNl
dEJhY2tncm91bmRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV9iYWNrZ3JvdW5kVGV4dHVyZUlk
ID0gaWQ7IH0KKyAgICB2b2lkIHNldEJhY2tUcmFja1RleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBt
X2JhY2tUcmFja1RleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRGb3JlVHJhY2tUZXh0dXJl
SWQodW5zaWduZWQgaWQpIHsgbV9mb3JlVHJhY2tUZXh0dXJlSWQgPSBpZDsgfQogICAgIHZvaWQg
c2V0VGh1bWJUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90aHVtYlRleHR1cmVJZCA9IGlkOyB9
CiAKICAgICBDQ0xheWVySW1wbCogc2Nyb2xsTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bExheWVyOyB9CkBAIC0xMjQsNyArMTI1LDggQEAgcHJpdmF0ZToKICAgICB9OwogICAgIENDU2Ny
b2xsYmFyIG1fc2Nyb2xsYmFyOwogCi0gICAgdW5zaWduZWQgbV9iYWNrZ3JvdW5kVGV4dHVyZUlk
OworICAgIHVuc2lnbmVkIG1fYmFja1RyYWNrVGV4dHVyZUlkOworICAgIHVuc2lnbmVkIG1fZm9y
ZVRyYWNrVGV4dHVyZUlkOwogICAgIHVuc2lnbmVkIG1fdGh1bWJUZXh0dXJlSWQ7CiAKICAgICBT
Y3JvbGxiYXJPdmVybGF5U3R5bGUgbV9zY3JvbGxiYXJPdmVybGF5U3R5bGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149773</attachid>
            <date>2012-06-27 10:53:58 -0700</date>
            <delta_ts>2012-06-27 12:34:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89908-20120627135357.patch</filename>
            <type>text/plain</type>
            <size>36391</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhkNTQwNGVhMmFhN2Qz
NTI0MDg0MDYzMzc2ODM2ODFiY2JiNzJjMy4uZGIzODRiMjVlMGZkODk2ZGUxZjgzZjlhYjZhNDRl
OTkzNDZhNTI2ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA2LTI3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gc2hvdWxkIHN1cHBvcnQgcGFpbnRpbmcgZm9yd2Fy
ZC10cmFjayBhbmQgYmFjay10cmFjayBpbiBkaWZmZXJlbnQgc3R5bGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFj
ay1wYXJ0cy5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
QmFja2dyb3VuZFBhaW50ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJC
YWNrZ3JvdW5kUGFpbnRlcjo6U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIpOgorICAgICAgICAo
U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OmFwcGVu
ZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9s
bGJhckxheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6
OnNldEJhY2tUcmFja1RleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Njcm9sbGJhckxh
eWVySW1wbDo6c2V0Rm9yZVRyYWNrVGV4dHVyZUlkKToKKyAgICAgICAgKENDU2Nyb2xsYmFyTGF5
ZXJJbXBsKToKKwogMjAxMi0wNi0yNiAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIExheWVyIGNocm9taXVtIHNob3VsZCBuZWVkIGEgcmVk
cmF3IGFmdGVyIGdldHRpbmcgaXRzIGZpcnN0IG5vbi1lbXB0eSBib3VuZHMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDVlMjNlOTM0NTJkYmZjMDI0NmMyMjJl
NjFmZGJmMDBmNjlkZDVkNzAuLjFlMWQxZjMwMjBlMmY4NzllMWFmZjk2MzdhNDMzMmZhOWM2YTE3
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uY3BwCkBAIC03NiwxMCAr
NzYsMTUgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKIAogICAgIHNjcm9sbGJhckxheWVyLT5zZXRTY3JvbGxiYXJPdmVy
bGF5U3R5bGUobV9zY3JvbGxiYXJPdmVybGF5U3R5bGUpOwogCi0gICAgaWYgKG1fYmFja2dyb3Vu
ZCAmJiBtX2JhY2tncm91bmQtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKQotICAgICAgICBzY3Jv
bGxiYXJMYXllci0+c2V0QmFja2dyb3VuZFRleHR1cmVJZChtX2JhY2tncm91bmQtPnRleHR1cmUo
KS0+dGV4dHVyZUlkKCkpOworICAgIGlmIChtX2JhY2tUcmFjayAmJiBtX2JhY2tUcmFjay0+dGV4
dHVyZSgpLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRCYWNrVHJh
Y2tUZXh0dXJlSWQobV9iYWNrVHJhY2stPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwogICAgIGVs
c2UKLSAgICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldEJhY2tncm91bmRUZXh0dXJlSWQoMCk7Cisg
ICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRCYWNrVHJhY2tUZXh0dXJlSWQoMCk7CisKKyAgICBp
ZiAobV9mb3JlVHJhY2sgJiYgbV9mb3JlVHJhY2stPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKQor
ICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0Rm9yZVRyYWNrVGV4dHVyZUlkKG1fZm9yZVRyYWNr
LT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbGJhckxh
eWVyLT5zZXRGb3JlVHJhY2tUZXh0dXJlSWQoMCk7CiAKICAgICBpZiAobV90aHVtYiAmJiBtX3Ro
dW1iLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkKICAgICAgICAgc2Nyb2xsYmFyTGF5ZXItPnNl
dFRodW1iVGV4dHVyZUlkKG1fdGh1bWItPnRleHR1cmUoKS0+dGV4dHVyZUlkKCkpOwpAQCAtMTA2
LDkgKzExMSw5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCogbGF5ZXIpCiBjbGFzcyBTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlciA6
IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyPiBjcmVhdGUoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUqIHRoZW1lKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyPiBjcmVhdGUoU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUqIHRoZW1lLCBT
Y3JvbGxiYXJQYXJ0IHRyYWNrUGFydCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIoc2Nyb2xsYmFyLCB0aGVtZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyKHNjcm9sbGJh
ciwgdGhlbWUsIHRyYWNrUGFydCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChT
a0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgSW50UmVjdCYpIE9W
RVJSSURFCkBAIC0xMzgsMjYgKzE0MywyMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGhlbWUtPnBh
aW50VHJhY2tCYWNrZ3JvdW5kKCZjb250ZXh0LCBtX3Njcm9sbGJhciwgdHJhY2tQYWludFJlY3Qp
OwogCiAgICAgICAgIGJvb2wgdGh1bWJQcmVzZW50ID0gbV90aGVtZS0+aGFzVGh1bWIobV9zY3Jv
bGxiYXIpOwotICAgICAgICBpZiAodGh1bWJQcmVzZW50KSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogVGhlcmUncyBubyAicGFpbnQgdGhlIHdob2xlIHRyYWNrIiBwYXJ0LiBEcmF3aW5nIGJvdGgg
dGhlCi0gICAgICAgICAgICAvLyBCYWNrVHJhY2tQYXJ0IGFuZCB0aGUgRm9yd2FyZFRyYWNrUGFy
dCBpbiB0aGVpciBzcGxpdFRyYWNrIHJlY3RzCi0gICAgICAgICAgICAvLyBlbmRzIHVwIGxlYXZp
bmcgYSBkaXN0aW5jdGl2ZSBsaW5lLiBQYWludGluZyBvbmUgcGFydCBhcyB0aGUKLSAgICAgICAg
ICAgIC8vIGVudGlyZSB0cmFjayBhcHBlYXJzIHRvIGJlIGlkZW50aWNhbCB0byBwYWludGluZyBi
b3RoIGFuZAotICAgICAgICAgICAgLy8gY292ZXJpbmcgdXAgdGhlIHNwbGl0IGJldHdlZW4gdGhl
bSB3aXRoIHRoZSB0aHVtYi4KLSAgICAgICAgICAgIG1fdGhlbWUtPnBhaW50VHJhY2tQaWVjZSgm
Y29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0LCBCYWNrVHJhY2tQYXJ0KTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAodGh1bWJQcmVzZW50KQorICAgICAgICAgICAgbV90aGVtZS0+
cGFpbnRUcmFja1BpZWNlKCZjb250ZXh0LCBtX3Njcm9sbGJhciwgdHJhY2tQYWludFJlY3QsIG1f
dHJhY2tQYXJ0KTsKIAogICAgICAgICBtX3RoZW1lLT5wYWludFRpY2ttYXJrcygmY29udGV4dCwg
bV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKICAgICB9CiBwcml2YXRlOgotICAgIFNjcm9s
bGJhckJhY2tncm91bmRQYWludGVyKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0aGVtZSkKKyAgICBTY3JvbGxiYXJCYWNrZ3JvdW5kUGFp
bnRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZSogdGhlbWUsIFNjcm9sbGJhclBhcnQgdHJhY2tQYXJ0KQogICAgICAgICA6IG1fc2Nyb2xs
YmFyKHNjcm9sbGJhcikKICAgICAgICAgLCBtX3RoZW1lKHRoZW1lKQorICAgICAgICAsIG1fdHJh
Y2tQYXJ0KHRyYWNrUGFydCkKICAgICB7CiAgICAgfQogCiAgICAgU2Nyb2xsYmFyVGhlbWVDbGll
bnQqIG1fc2Nyb2xsYmFyOwogICAgIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiBtX3RoZW1lOwor
ICAgIFNjcm9sbGJhclBhcnQgbV90cmFja1BhcnQ7CiB9OwogCiBjbGFzcyBTY3JvbGxiYXJUaHVt
YlBhaW50ZXIgOiBwdWJsaWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewpAQCAtMTkzLDggKzE5NCw4
IEBAIHByaXZhdGU6CiB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhv
c3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogICAgIGlmICghaG9zdCB8fCBob3N0ICE9IGxh
eWVyVHJlZUhvc3QoKSkgewotICAgICAgICBtX2JhY2tncm91bmRVcGRhdGVyLmNsZWFyKCk7Ci0g
ICAgICAgIG1fYmFja2dyb3VuZC5jbGVhcigpOworICAgICAgICBtX2JhY2tUcmFja1VwZGF0ZXIu
Y2xlYXIoKTsKKyAgICAgICAgbV9iYWNrVHJhY2suY2xlYXIoKTsKICAgICAgICAgbV90aHVtYlVw
ZGF0ZXIuY2xlYXIoKTsKICAgICAgICAgbV90aHVtYi5jbGVhcigpOwogICAgIH0KQEAgLTIwNywx
MCArMjA4LDE5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXJJZk5lZWRlZCgpCiAgICAgYm9vbCB1c2VNYXBTdWJJbWFnZSA9IGxheWVyVHJlZUhvc3Qo
KS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViOwogICAgIG1fdGV4dHVy
ZUZvcm1hdCA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJl
c3RUZXh0dXJlRm9ybWF0OwogCi0gICAgaWYgKCFtX2JhY2tncm91bmRVcGRhdGVyKQotICAgICAg
ICBtX2JhY2tncm91bmRVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
Y3JlYXRlKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpjcmVhdGUobV9zY3JvbGxiYXIuZ2V0
KCksIHRoZW1lKCkpLCB1c2VNYXBTdWJJbWFnZSk7Ci0gICAgaWYgKCFtX2JhY2tncm91bmQpCi0g
ICAgICAgIG1fYmFja2dyb3VuZCA9IG1fYmFja2dyb3VuZFVwZGF0ZXItPmNyZWF0ZVRleHR1cmUo
bGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpOworICAgIGlmICghbV9i
YWNrVHJhY2tVcGRhdGVyKQorICAgICAgICBtX2JhY2tUcmFja1VwZGF0ZXIgPSBCaXRtYXBDYW52
YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6
OmNyZWF0ZShtX3Njcm9sbGJhci5nZXQoKSwgdGhlbWUoKSwgQmFja1RyYWNrUGFydCksIHVzZU1h
cFN1YkltYWdlKTsKKyAgICBpZiAoIW1fYmFja1RyYWNrKQorICAgICAgICBtX2JhY2tUcmFjayA9
IG1fYmFja1RyYWNrVXBkYXRlci0+Y3JlYXRlVGV4dHVyZShsYXllclRyZWVIb3N0KCktPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKSk7CisKKyAgICAvLyBPbmx5IGNyZWF0ZSB0d28tcGFydCB0cmFj
ayBpZiB3ZSB0aGluayB0aGUgdHdvIHBhcnRzIGNvdWxkIGJlIGRpZmZlcmVudCBpbiBhcHBlYXJh
bmNlLgorICAgIGlmIChtX3Njcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkgeworICAgICAg
ICBpZiAoIW1fZm9yZVRyYWNrVXBkYXRlcikKKyAgICAgICAgICAgIG1fZm9yZVRyYWNrVXBkYXRl
ciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShTY3JvbGxiYXJCYWNr
Z3JvdW5kUGFpbnRlcjo6Y3JlYXRlKG1fc2Nyb2xsYmFyLmdldCgpLCB0aGVtZSgpLCBGb3J3YXJk
VHJhY2tQYXJ0KSwgdXNlTWFwU3ViSW1hZ2UpOworICAgICAgICBpZiAoIW1fZm9yZVRyYWNrKQor
ICAgICAgICAgICAgbV9mb3JlVHJhY2sgPSBtX2ZvcmVUcmFja1VwZGF0ZXItPmNyZWF0ZVRleHR1
cmUobGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpOworICAgIH0KKwog
CiAgICAgaWYgKCFtX3RodW1iVXBkYXRlcikKICAgICAgICAgbV90aHVtYlVwZGF0ZXIgPSBCaXRt
YXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Nyb2xsYmFyVGh1bWJQYWludGVy
OjpjcmVhdGUobV9zY3JvbGxiYXIuZ2V0KCksIHRoZW1lKCkpLCB1c2VNYXBTdWJJbWFnZSk7CkBA
IC0yNTMsNyArMjYzLDkgQEAgdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjp1cGRhdGUoQ0NU
ZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgQ0NPY2NsdXNpb24KIAogICAgIEludFBvaW50
IHNjcm9sbGJhck9yaWdpbihtX3Njcm9sbGJhci0+eCgpLCBtX3Njcm9sbGJhci0+eSgpKTsKICAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0KHNjcm9sbGJhck9yaWdpbiwgY29udGVudEJvdW5kcygpKTsK
LSAgICB1cGRhdGVQYXJ0KG1fYmFja2dyb3VuZFVwZGF0ZXIuZ2V0KCksIG1fYmFja2dyb3VuZC5n
ZXQoKSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOworICAgIHVwZGF0ZVBhcnQobV9iYWNrVHJhY2tV
cGRhdGVyLmdldCgpLCBtX2JhY2tUcmFjay5nZXQoKSwgY29udGVudFJlY3QsIHVwZGF0ZXIpOwor
ICAgIGlmIChtX2ZvcmVUcmFjayAmJiBtX2ZvcmVUcmFja1VwZGF0ZXIpCisgICAgICAgIHVwZGF0
ZVBhcnQobV9mb3JlVHJhY2tVcGRhdGVyLmdldCgpLCBtX2ZvcmVUcmFjay5nZXQoKSwgY29udGVu
dFJlY3QsIHVwZGF0ZXIpOwogCiAgICAgLy8gQ29uc2lkZXIgdGhlIHRodW1iIHRvIGJlIGF0IHRo
ZSBvcmlnaW4gd2hlbiBwYWludGluZy4KICAgICBJbnRSZWN0IHRodW1iUmVjdCA9IEludFJlY3Qo
SW50UG9pbnQoKSwgdGhlbWUoKS0+dGh1bWJSZWN0KG1fc2Nyb2xsYmFyLmdldCgpKS5zaXplKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGFmMjIxNWJkMGE3Y2Yy
NDllNzQxZGI2NGM0MDIyOGQ2YzRjM2FiZjkuLjAwYTM5MmE1NjMzNzMyMGU5NTUzYTE2OWM4ZDQ3
YjdhNTBhYzA1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKQEAgLTY2
LDExICs2NiwxMyBAQCBwcml2YXRlOgogCiAgICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0Owog
Ci0gICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fYmFja2dyb3VuZFVwZGF0ZXI7Cisg
ICAgUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fYmFja1RyYWNrVXBkYXRlcjsKKyAgICBS
ZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9mb3JlVHJhY2tVcGRhdGVyOwogICAgIFJlZlB0
cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RodW1iVXBkYXRlcjsKIAogICAgIC8vIEFsbCB0aGUg
cGFydHMgb2YgdGhlIHNjcm9sbGJhciBleGNlcHQgdGhlIHRodW1iCi0gICAgT3duUHRyPExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fYmFja2dyb3VuZDsKKyAgICBPd25QdHI8TGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6VGV4dHVyZT4gbV9iYWNrVHJhY2s7CisgICAgT3duUHRyPExheWVyVGV4
dHVyZVVwZGF0ZXI6OlRleHR1cmU+IG1fZm9yZVRyYWNrOwogICAgIE93blB0cjxMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlPiBtX3RodW1iOwogCiAgICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXll
ckltcGwuY3BwCmluZGV4IGEyMmVmNWQyNjY3OWFkYmI1ZWJiMjZlZWJkNDQwZGM5NWQyNDdjOTYu
LmM4NGM4NDAxYTRkODlhZDlkNTcyYjVlMjA4OWVmNDU2YmM3MjAxMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5jcHAKQEAgLTQ1LDExICs0NSwyMyBAQCBDQ1Njcm9s
bGJhckxheWVySW1wbDo6Q0NTY3JvbGxiYXJMYXllckltcGwoaW50IGlkKQogICAgIDogQ0NMYXll
ckltcGwoaWQpCiAgICAgLCBtX3Njcm9sbExheWVyKDApCiAgICAgLCBtX3Njcm9sbGJhcih0aGlz
KQotICAgICwgbV9iYWNrZ3JvdW5kVGV4dHVyZUlkKDApCisgICAgLCBtX2JhY2tUcmFja1RleHR1
cmVJZCgwKQorICAgICwgbV9mb3JlVHJhY2tUZXh0dXJlSWQoMCkKICAgICAsIG1fdGh1bWJUZXh0
dXJlSWQoMCkKIHsKIH0KIAorbmFtZXNwYWNlIHsKKworRmxvYXRSZWN0IHRvVVZSZWN0KGNvbnN0
IEludFJlY3QmIHIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKK3sKKyAgICBBU1NFUlQoYm91bmRz
LmNvbnRhaW5zKHIpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0Pihy
LngoKSkgLyBib3VuZHMud2lkdGgoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIueSgpKSAvIGJvdW5k
cy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyLndp
ZHRoKCkpIC8gYm91bmRzLndpZHRoKCksIHN0YXRpY19jYXN0PGZsb2F0PihyLmhlaWdodCgpKSAv
IGJvdW5kcy5oZWlnaHQoKSk7Cit9CisKK30KKwogdm9pZCBDQ1Njcm9sbGJhckxheWVySW1wbDo6
YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCYpCiB7CiAgICAgU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGUqIHRoZW1lID0gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUqPihTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKSk7CkBAIC01NywyMiArNjksMzggQEAgdm9pZCBDQ1Njcm9sbGJhckxh
eWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFy
ZWRRdWEKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBwcmVtdWx0aXBsZWRBbHBoYSA9IGZh
bHNlOwotICAgIEZsb2F0UmVjdCB1dlJlY3QoMCwgMCwgMSwgMSk7CiAgICAgYm9vbCBmbGlwcGVk
ID0gZmFsc2U7CisgICAgRmxvYXRSZWN0IHV2UmVjdCgwLCAwLCAxLCAxKTsKKyAgICBJbnRSZWN0
IGJvdW5kc1JlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKKworICAgIEludFJlY3Qg
dGh1bWJSZWN0LCBiYWNrVHJhY2tSZWN0LCBmb3JlVHJhY2tSZWN0OworICAgIHRoZW1lLT5zcGxp
dFRyYWNrKCZtX3Njcm9sbGJhciwgdGhlbWUtPnRyYWNrUmVjdCgmbV9zY3JvbGxiYXIpLCBiYWNr
VHJhY2tSZWN0LCB0aHVtYlJlY3QsIGZvcmVUcmFja1JlY3QpOwogCi0gICAgSW50UmVjdCB0aHVt
YlJlY3QgPSB0aGVtZS0+dGh1bWJSZWN0KCZtX3Njcm9sbGJhcik7Ci0gICAgdGh1bWJSZWN0Lm1v
dmUoLW1fc2Nyb2xsYmFyLngoKSwgLW1fc2Nyb2xsYmFyLnkoKSk7CiAgICAgaWYgKG1fdGh1bWJU
ZXh0dXJlSWQgJiYgdGhlbWUtPmhhc1RodW1iKCZtX3Njcm9sbGJhcikgJiYgIXRodW1iUmVjdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgT3duUHRyPENDVGV4dHVyZURyYXdRdWFkPiBxdWFkID0gQ0NU
ZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHRodW1iUmVjdCwgbV90aHVt
YlRleHR1cmVJZCwgcHJlbXVsdGlwbGVkQWxwaGEsIHV2UmVjdCwgZmxpcHBlZCk7CiAgICAgICAg
IHF1YWQtPnNldE5lZWRzQmxlbmRpbmcoKTsKICAgICAgICAgcXVhZExpc3QuYXBwZW5kKHF1YWQu
cmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmVJZCkKKyAg
ICBpZiAoIW1fYmFja1RyYWNrVGV4dHVyZUlkKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRS
ZWN0IGJhY2tncm91bmRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAgcXVh
ZExpc3QuYXBwZW5kKENDVGV4dHVyZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBi
YWNrZ3JvdW5kUmVjdCwgbV9iYWNrZ3JvdW5kVGV4dHVyZUlkLCBwcmVtdWx0aXBsZWRBbHBoYSwg
dXZSZWN0LCBmbGlwcGVkKSk7CisgICAgLy8gV2Ugb25seSBwYWludCB0aGUgdHJhY2sgaW4gdHdv
IHBhcnRzIGlmIHdlIHdlcmUgZ2l2ZW4gYSB0ZXh0dXJlIGZvciB0aGUgZm9yd2FyZCB0cmFjayBw
YXJ0LgorICAgIGlmIChtX2ZvcmVUcmFja1RleHR1cmVJZCkgeworICAgICAgICAvLyBBc3N1bWVz
IGJhY2tUcmFja1JlY3QsIEZvcndhcmRCdXR0b25TdGFydFBhcnQgYW5kIEJhY2tCdXR0b25TdGFy
dFBhcnQgZm9ybSBhIGNvbm5lY3RlZCwgcmVjdGFuZ3VsYXIgcmVnaW9uLgorICAgICAgICBiYWNr
VHJhY2tSZWN0LnVuaXRlKHRoZW1lLT5mb3J3YXJkQnV0dG9uUmVjdCgmbV9zY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25TdGFydFBhcnQpKTsKKyAgICAgICAgYmFja1RyYWNrUmVjdC51bml0ZSh0aGVt
ZS0+YmFja0J1dHRvblJlY3QoJm1fc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7Cisg
ICAgICAgIGlmICghYmFja1RyYWNrUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBxdWFkTGlz
dC5hcHBlbmQoQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGJhY2tU
cmFja1JlY3QsIG1fYmFja1RyYWNrVGV4dHVyZUlkLCBwcmVtdWx0aXBsZWRBbHBoYSwgdG9VVlJl
Y3QoYmFja1RyYWNrUmVjdCwgYm91bmRzUmVjdCksIGZsaXBwZWQpKTsKKworICAgICAgICBmb3Jl
VHJhY2tSZWN0LnVuaXRlKHRoZW1lLT5mb3J3YXJkQnV0dG9uUmVjdCgmbV9zY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25FbmRQYXJ0KSk7CisgICAgICAgIGZvcmVUcmFja1JlY3QudW5pdGUodGhlbWUt
PmJhY2tCdXR0b25SZWN0KCZtX3Njcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQpKTsKKyAgICAg
ICAgaWYgKCFmb3JlVHJhY2tSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHF1YWRMaXN0LmFw
cGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgZm9yZVRyYWNr
UmVjdCwgbV9mb3JlVHJhY2tUZXh0dXJlSWQsIHByZW11bHRpcGxlZEFscGhhLCB0b1VWUmVjdChm
b3JlVHJhY2tSZWN0LCBib3VuZHNSZWN0KSwgZmxpcHBlZCkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghYm91bmRzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBxdWFkTGlzdC5hcHBl
bmQoQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGJvdW5kc1JlY3Qs
IG1fYmFja1RyYWNrVGV4dHVyZUlkLCBwcmVtdWx0aXBsZWRBbHBoYSwgdXZSZWN0LCBmbGlwcGVk
KSk7CisgICAgfQogfQogCiBpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp4
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCmluZGV4IDk4ZDU1
MzQ0NjRiMzk3OTViZTA2YjhkMzBlNTllMzc2MzIzZmIzMDcuLjQ3YzY3NjkzYmZmMWIzZWUxZmVk
MTFhZjJkNTVjMmI2ODZjNzE4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllcklt
cGwuaApAQCAtNTQsNyArNTQsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEVuYWJsZWQoYm9v
bCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVuYWJsZWQ7IH0KIAotICAgIHZvaWQgc2V0QmFja2dy
b3VuZFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX2JhY2tncm91bmRUZXh0dXJlSWQgPSBpZDsg
fQorICAgIHZvaWQgc2V0QmFja1RyYWNrVGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fYmFja1Ry
YWNrVGV4dHVyZUlkID0gaWQ7IH0KKyAgICB2b2lkIHNldEZvcmVUcmFja1RleHR1cmVJZCh1bnNp
Z25lZCBpZCkgeyBtX2ZvcmVUcmFja1RleHR1cmVJZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRUaHVt
YlRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RodW1iVGV4dHVyZUlkID0gaWQ7IH0KIAogICAg
IENDTGF5ZXJJbXBsKiBzY3JvbGxMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXI7
IH0KQEAgLTEyNCw3ICsxMjUsOCBAQCBwcml2YXRlOgogICAgIH07CiAgICAgQ0NTY3JvbGxiYXIg
bV9zY3JvbGxiYXI7CiAKLSAgICB1bnNpZ25lZCBtX2JhY2tncm91bmRUZXh0dXJlSWQ7CisgICAg
dW5zaWduZWQgbV9iYWNrVHJhY2tUZXh0dXJlSWQ7CisgICAgdW5zaWduZWQgbV9mb3JlVHJhY2tU
ZXh0dXJlSWQ7CiAgICAgdW5zaWduZWQgbV90aHVtYlRleHR1cmVJZDsKIAogICAgIFNjcm9sbGJh
ck92ZXJsYXlTdHlsZSBtX3Njcm9sbGJhck92ZXJsYXlTdHlsZTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4NjFkNjFiOTUx
NTM2ZWZjZDUxMjA2MjJhZmYxOTdmZjc5ZGEzNTQzLi5jYTcyZmZjYjUyZTNjZDVhMzNlMmUxODJh
YzEwMjRhNzkzMDUyZDRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMDYtMjcgIFcuIEph
bWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bSBzaG91bGQgc3VwcG9ydCBwYWludGluZyBmb3J3YXJk
LXRyYWNrIGFuZCBiYWNrLXRyYWNrIGluIGRpZmZlcmVudCBzdHlsZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTkwOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgc3VwcG9ydCBmb3IgYWNjZWxl
cmF0ZWQgZHJhd2luZyAoaW1wbCB0aHJlYWQpIG9mIHNjcm9sbGJhcnMgd2l0aCBkaWZmZXJlbnQg
c3R5bGVzIGZvciB0aGUKKyAgICAgICAgZm9yd2FyZC10cmFjayBhbmQgYmFjay10cmFjayBwYXJ0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9sbGJhcnMv
Y3VzdG9tLWNvbXBvc2l0ZWQtZGlmZmVyZW50LXRyYWNrLXBhcnRzLWV4cGVjdGVkLnBuZzogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9j
dXN0b20tY29tcG9zaXRlZC1kaWZmZXJlbnQtdHJhY2stcGFydHMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1
c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFjay1wYXJ0cy5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wNi0yNiAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gTWFyayBhIGxheW91dCB0ZXN0IGFzIGZhaWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9sbGJhcnMvY3VzdG9tLWNvbXBvc2l0
ZWQtZGlmZmVyZW50LXRyYWNrLXBhcnRzLWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9sbGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQtZGlm
ZmVyZW50LXRyYWNrLXBhcnRzLWV4cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGQ4ZmZmMzk5NDli
ZGYwZDhiNWI5NDdjYzYzZDRhOWNmZmI1MjRmCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzk3
Ngp6Y21lSHYyVCtzaXheNTVeNmNLRW9SOVAlI050WUhuaVZDKVhEN3wrSFJlRGI+NnFQMWo+NCpm
Ul9nLXYoZkhXaCQKek57M0xTZ2MxbmNIKjI0PiYpI1M2YjcjKUliNyMoLSswR2hXQjF5amdgQGk+
bnBaND9Pb3tCUjRRST98ITFjTHQ3CnomRmw5TzI8cjApIX50I0UxTXJuSXJfYj1mQUQzS2lYdUZ0
TVModz40eVZAYTRFUmRKUSNWJClxVEFCeldFcz5KSwp6Tk9LN1phWndReU5udDZaaGBDOUhtaEMx
MmFVT0ImYGMtdzBndkRXUmVHUUZJYHp4Km84SVVIfEZKSGVBUmlrSmYKejtaYzRvI059QEIjcD5l
KmNhO2czcyg7IVEmNH14Uz12PS1tR1Y9WGZZZ0JLRy1nNjIwUCtofG9JdSthPnVpcExrCno8WX4m
JnE1Z1Y+cDUyWSZXYWtZakhlO15tJCh1SFlaS2pFKHlAb2M2XmZMdGNvZG1Oa0YlJkhMIT08MXBn
K3IqXwp6NEQlQ2xYKUskcChxYWgyPE08ZWtjWHpRcloxQCN6b0YpeipMTGVVNW9Id1JJQWteRlR5
ckxzeDQpVmhiOCkmdVIKel9tP0xNO1ApKEN7azZ7TWZBYU9sWUZjPk57MyQ5cjFtZW8mMTVFSUh3
K0F5OXtOWCNebmdzdSh8Q15CTW9PP0IpCnp3YDlTRktXPSlTQzxxXn4qSkltaStzbkZrNjI5QFY9
fDZuaFg+UTZ8eyFzYj1gK2hJQEYpVDBUPzA8Wn56aDNaewp6ZC1DN2VyQ35OSUxMZXZSdE9DWlRE
VT59fEdkbnJpWG4mOHF6ZE5JbEViVGYhX1ZGMjBQPG93bU1xailgLTVpMGkKekdhY3tIYjdPe3lu
aSpNeyZTWF5Pd205KFpqcCgmJipLIyMmakUjKzVULU51PEpDUDkpX1BhaSl1dmtKZzt4WHhhCnpD
JCotVVRHIVVmIzE0QFZgfDZkal5ZcGppO05UITtwfmkqPWMzRj1DQDY5RlohXmJrMHNqQGM5PiZk
dyhEYUlvOwp6bypOOVBJSTtJSmlUZmwlZWpZTH16YWdKMlctfkcwb3FhOWZuQ0N1dV5ZaUQ9OVNL
c0FObEVnUy0oSFhJP2BAdHEKemFSUH1Fekk1cjVweXU5Y3RCfFdhMyp2RHJlO2xyUl5ERzskZkJe
ZXQoPVNXSSlxYGJyKWVmVXx1VTt7ZFEoSWJFCnpVWXowKUdeKjM1P1J1NFFqfll3REMtM2NUKjRM
QmZ2elAwM0AoVEM5aEk1bGlMX1EmKmUyYWIzbmQzN0FPezFXRQp6PnAxWlpTWDVJKCF4NjVjcU1g
JVQpRHstaio0RjBjbGhKJXlfUGZvTlVOIXBwMk45VmZnQ2N7KE10VylFaEEmQHkKeioxTUR5cFFH
WD5MZkI8YHJufDwrI3xzSnkqNE5ocVdEallxdUJ9bHZDTC1lZ1BJSnxrbjcmWEB7LVplWW8tKF9e
Cnpae09+NlVBTUhmeW0jLUY7cj5TJiZUcD9US1o3JTBvQDBGfEN0JkJ+Jm9gbkVDdEotd2UqRE5G
YHxHaFV3Vz99SQp6dFB5NUFBU3wyWEchcylPZUEycHFzYFAhS0FuWmcyZGo1TypvZyFoQVBrIVUk
cm5QJTdjIzwrUlBFYUIyPD5gXmUKejB0UXRqWntJND9JeGczNE4+QDRiP3pPeVJHPT1NYWM5YEN9
Q3I3OCl2TXR+XkpCaXE5I0w4SigkLUszVS1TQHRDCno/O2Q9KUZfYislSGtOMFRfMmtMJXNWVTts
PXpkKjZMOHJAU0lxd1lATFFtVzAmdUtTO20/QypwPiU1NThySCF4Ugp6PDdLUldgfmo7QjxuV3JV
VWFyZXQpdHZIUHMoaVJTUXJtZEFhcGRJNWxMNSFoalphTUF2b3h9c0JZOWVOVz9OY1kKel9nNz08
VTFtRSFUOSphezJJbEomSEBhTX5gKGVEWXNCQUNJJTtXNFgtekZgY3YqRVFxJVNIRiUjUzF0Q2Ap
ZG1PCnorfUxCc2tDKVlwbCkjPDdZfVI9Mjs2WDlGMFduRip0dVg5djhZVldyP2JRZiZwWnd2JjYp
YmtZZD14V0NeejhtdAp6PXsmPlh5PlF2Y1hwfjduX2lscFpXaEFuOVlqekh3VmRPYSNvaDBXP0I5
VX0rZCpINUJSOCtMSSteKVNFJkYke1EKek5RS3g+Njt+KDhIRT8zS1FWRHZzIzIhN3g9TyYqNjUq
NHN9dTtGVElZS3FUYzFMeD5mbEkzJGQ8Um0wfERvKjF3CnpSUUpjOEYkOVowen1AWGFpVyV5PmM9
X0ArM01HZiNeVT5DUiZHOzYoemhffSNrcigjISZCTFM8aWZuUlQ+eiUzQgp6UiExKTRZdFBQMSYz
WkliRGVWNkd0ZCh6PURDTFl9ZTUpTUJhcD0kP3VWOz1Fam07O2ZyPjhtT2VKVHY5LVNYSC0KekVj
fHRqQ2hYbWskPD5rUW8/KDtIYT1YRUBpPlNSMDF6RHZxNGdzVW1sMHdzbHFkXlRLdXpBXjlgN0l9
b2EoKCpyCnpYKV42JGRxUzdAKT99cFdkUW9nX0VNZCo1PFlHSkQhKjghMGV9M30rX1Urcih1USQx
X2R3NWh9WnVATGMjY0V+fgp6LVJwTUBHJk1DJU9qN0dLaDNhPlVNcFIqRUZwTnx3ZzxmfVJyYnpv
Tk9HYl5CWkU8dGhhZjZ9QjReT0M5SXFAPj8Kek9IdHk9cD17eGEzaj9LaDlCPkxJKktnZGd1KFkl
dkQ3bSVRUzdnIXBeSzstbiliTm9iTX5aT1EwKl5RRDUkVEI7CnpnQnNiSSYyaX4+VnlvbD5NdDcl
P2lxRDZ1LUVIRDczY1kmMGwtfDxmeVIqXmtuPChwZkExfiVQXk5QezVKd2RBSQp6cW40NUgxKURQ
YVZQMmNQP0c5fDVuPz41O0FQNEUySjg+LUVZViNQZllkYU03aFh4MXImVSQheEg4d1dGV3o1P30K
ekxgRmd2V0VfWHVrSGJ3KFBGfXgkVHwyaTJqX2c7PSY3VkppRHY7T2xLfCp6dVJyZEF1I2tGTyhf
IXM1PiRrPmdvCnotQFZhT1ZuM2ApZCpiWmIqTzhIRlh4JkA0VWY3TjtGRk9vRyZ3V2tneXBGS1NW
WSY2ZSQ9eThgSjA4b2dHZF9NWAp6T201QCMoQ14mYipMcUgkS0soVjBoU1RSQlk9KTxQdChTKFZZ
KlN5YWhsamA2b3BTN2ZKMUE3Tl9+IXQ2WFd3SFkKemJzbkNjMD1ndyVGLSY8MXNxJj1SdzQkUCM4
aHlNTklubXZodj5yfVJ4d2tlTEdFcjtCcGc7NURjPklRfihTdjd8Cnp5K2pqbipYZUtQZTJGZSQz
VlJqJCkrcWVOeVJYbWwxcUI2Vj5vZWs7SFFmejAxZnpUeyt9ejQ/PURNP0ViMUVsNwp6VyY5Wko/
ZD9VUDJ6dWheP19ZQEZHNzhUVG8hVDBGI15PV1gxQF9nODU7fm1AKHN8I1pIcTI5QCZXbG92MHto
QXgKemw2fTM2akV1UGFZTDEpZW4peVVYcX1SOWRVJUojeHkhPkBBSj9RMDJMeXc+U0MlQmM9M0J+
ViY+dm9vOGJSTjA4CnptdXZIVEB4clckOylqRkhQe2hje2NyUTF9cmVJNGo+Kko4YXVFYGxpbXhW
cUBMUW4yc3hrSWwqXkdVQFZJTndWewp6bHw/eTViWWRnNWxoMXQ/SkNzfiFHXm84Z05Pdi1LSGtV
XldPZ0BLbURfNk1eJTNLTE9KNEBCN0p1LTNyYjYrKFEKektPajF2aXdgfGMkQSglc0lUWiFQUGZr
dkxlVlVQeCFFZCN7S1JPO09XVFl1d3dmfTIlSFIyRmktZChHYWsodD5ZCnpNb3NHfmE/fVReSGFW
YD1iIW9nSXNPWnQrZlZrUDBJPTk4Um9aZS03SClyUTslP0AjR0FMZWYzQ0ZFOXRFYE47awp6T25k
WHteQXA/PTVmU29SVzdOSj5hS0M/fV5VQ1VFbGAqTHlxVEgjYyg/PkNhcWViV2FlaTRjNk5QQiVh
ZERwTGgKemlNVmhsTW5HQDZoNlcjPUUmWVRsPCVDVEk2YCE9VUY0SlQjTjFwQlleMEUrfW1wNTcw
ZV4xcjNeIUEtUTdGUzIyCnokSCZrNWAxcnNIWEpLYU1TPHx0IW9TdGxzdj8qfHg4LVleelVoKUtV
PEk5I0tic242QT5kZUU9Xiglb0leeyUmUQp6ZUA7KEoqYlM3Xz8tQkQ/bUJ9fWRvU2Q5R29rR3s4
O0MhMUhkQlc7QUg7PVBSZV5vQEk9Tl9vYWk5MWJ4Z3trZl4KelRxUTBrKzJfZkM8Sk5MTEt6KVV+
PU1pO0pVIWZUY0ZDTT9JVSV2ez18TG9zZERER0hhMTwrdHx3TFUyLUlhIUV+Cnp5dEExZmJhbFM+
KWwkdGB5TEhHJSk1MDFVdUsrYSZhTGdEQDBjeTBubzBDK3c7MjU8aW53cXtmdG59UytCYTxSKQp6
ZWsjJFhqX3huTGcqR04hYkNAU1RSPT83eiFHKHs8OEpSZDhxTDh6KXZMZUJHTEJWblN5M1h1Q1gq
VTEqOy1ENTIKemxhT0lmZU8qaiE/OUE8dmg8U1RNbEU9RUZyMEV4MG8jIXVKZ2V4IUJaak5OUDMx
KWQ4cCNHNEhgKzFsQHNHJGZaCnooPjU7UyhnV1BBPktVY0FuVH0rKzlqdDw7I3tUUmJ2Y0NaTjso
RHkxKlI3dkA+b1NxKzwtVClCeyVWb0tARkdgJgp6Q2ZEXj9LP0MjRDdDdDZZWTM0KnpTVnl0fnd5
KGhDKTF5VDYtMWxAZThsOWU9UFEkP0F2czV7PTkoSyVRd1ZCN18Kej5ifW48ditxdCRndUM9aU1y
VzY5NHB6R19gX25OdWhIKkwhNmh+SVp0RT5nRVlZeEFFa2J6VDR3OWVAPXFTPypnCnpDa2czNSE3
IVYxVUFseit7X1lsaD01MTl+UDhiUUZ7T0pzYT9oTG94UTd7elFnZyF5cClGUjhObWd1NGEmJGEy
Tgp6UG9KWGt4SCZ6OGRkelVjcDNOaDtWMWIjJms7Z2BNYjh+WXIpPXclUHFAZllnRThgYXhFdn43
Tk1Jemw+VisxfTIKekdTb3d7aD5EN2FFS1okamdkITV1dWxQbUN1Wk4/Y1BKODBpc1dqeClfRG5M
ZHZRPF5EQXBkZ1JjdVpWZW1QNTh5CnpENFVjQnolQz9HJU1rck1JR0E1Unp9NUdkOyZiVHYwKXtu
UGZZX2pKbkg2RUFzPnokeiM1UWQ4LTtxZTN6Y2dCXwp6cHtaJCFXbXRXOER7PyplX1UrcX57eE99
TW9sclVISU5aRXlOZ2Yre1VhJGBKaGZjTHlFP0dxU08/NFcmaGlGb28KelQ3Q3tgS0xrQllUVVIk
T0QoZChBZCFke1BCVWB1VkpMR3FBK1EhYHBKJlExUkg/QkZBUlApWVFjKiNwai0mJHxVCnpOYjtJ
cm9vYT08MHUjZ0dgQDNmTjNzSXU2X3UlbCo1VlROa0AoeHFsK3FlMmBtMjF5djVnezdmK3BpQkJT
WGZLfQp6MCgrYTVDZ1ZDazNBOzh1LTIpODsoMWchUTE5Umc7blBDN2FCcUN2RWFkQn5DTGUlKWY8
TCshTnooPH0rRWBeUGoKemdIY2dZWUgzUUktcm5XNXtqMEVQOVVVRntPSnxSQiRWJUd1QEJgfWpA
WmtnSCUoPWdwOEYwMD9VI2Y3TnNIdiZaCnpFd3ZfJmNyVldwO3BfbU9GYlUoM2xhLVpLUjgqWDlQ
dDtSV0dhMXN0VkRAMFU0amVjREg0alY2KlJLVDd3RTlpNwp6Z0M5VUZDTmt3eWdWM2MqPU0qcUN2
OVZlXjg7ZT9iYGVATmEta0J4eXhJQkp6MnR6aEsqTyFAT1kqS1ZJPCNVTWgKei1MMk44NTtpQHl6
czVjJFdBYGRpdHVKNGBnd3h8NjdecylxKTAzLUx6dUxtKj5GS0V3VjRoWEE9SmVoOT1GUDl1Cnpa
U2xSaWRPUWxAdC1aYk9VIUlAdi1kTVFvUiQ8ZWQqViVjR2Zndm4yR3hIZUBnTFBiKSRCSFFAWEVK
bUpzSHRqNgp6cnh9X1AyJHBQc3QldTFMOXJXfUBJNkF9IWYkVlVmZW8+JklzRihqbjxYU2FJR0J3
d1UzUGorUUwtJVI1XjhtQzQKejhRS0c4bWtUfEpLIWBuQkJGYTZFS2E0RCtNaik2UzVCLSVge3hq
WlpWQHBNN0x5b1EhaU4wJVgkWlQ4bTw7KSZJCnplb05TOVhfd2h3QUUrNjhwZTdwezh1QXp4REQr
M3B0RTlkamlecmtoZi0ycFk0Vjl5amBJTExHeVMyaEQ8NXJAWgp6aUB7KV5tRj0lM0BCN1VFY249
clpXNFNgR0RydT5kdzhYRXFqTEBAfFJZKztFQjNQYWBHOE9EP2wtSGoqZWZuRUcKenZTVG14Ul4t
S1ZTWHAwXk9QaWFUcCY8bmRsYmN8bFZhd1IlZUpCTXJUSTs+Wnh4ZHV9Km1BamtlPGI/SkJBaW1W
CnpDNGhjdGo8ZndDQiYyfVotQ0ZCVmFNMEIkUFZIZmpaKlh+K25QfitKMUJpYS09RlFocSZYITZf
alNXR302WFdBPgp6IXVzSXRzSGhMQ3lWcFplYzV+WHc/RXJFJnVzejRiUjBoWnIoRXI1NHImZSg9
YUxVfTVNXnFBfXlXMEAjU3U0eDUKemg/SyVaSWRDWXF3emd7RXpEcDFScGx6Pz9SWVN4WjhJST5O
QSg3P0VvV0FQJmc+WEc+YXBINmc0OVFaPyg9Wm18CnprcSR8fiFoRSlWYVZ2K2FPQkl8R3dUejA2
S0VlZ25CSD1RNyYldDUyaU5wSV9OcztCWFQ8KG5eYlhHfTslYTJTbwp6S0Z1N2YhTHI1RllrP1A0
bFk5cDQlMDBjamotTTRpZkJDV19UJHk7RT5yOHYxT0BSajRkYnB9SU5DNDJUb2JkKykKejB8UF82
bSVJQlcqUj1xampzQXlPZnR2bS1gPUpOfmZCQzFHaHRvNE5ufWxBVzNsfHpKaSU0e3c7QFN0NTJM
PClZCnpZeyRSNlA8IyUxJVpjNlhZSE1xfCNpTjw2VlJefW4yTno4cm5BVDlqZUNwSSVtb24hT0Uq
T1luWlZURyslN0JTSgp6ZkJOKHRrSSRCQTgoPUZYLUc2byZgM2YhWiRePiFjbigme1RFQGJnJk9m
NylyTGJJbGtnNG1jTyYqP1hoQTB4UUYKejBCTTJkRytSQDY/MCVsUTFZQDRpRz0tck5RdlZZfSg7
KStJdXRLbXtlVkZnYmpiQXhEU1c7Mn5iRWE5X3hrR01+CnptVFNhazRZZlQxR3R+Yz94Nl5YdjM8
dnE1QlRxUjJuc0VWTytgNzZ0cF8qVGNQP2pPZU9HYEB9WFU8JGBDR19TYQp6bXdHR1E8SEtLdjRv
eEB0YFQ0O1AhRj8+VD96VWM/WT0tWCpsPm94Q05saV5uQ1grYG9KOVpPJmBwWUk9WipSY0wKek1u
Kj11eTFFKkBId15VZWEoI2ozJDtacDwkR0FELW91Nmo4NW5EUj5tWXppe2xSXlVIIzk1KHFkWDJE
KVI/T1c0CnpvbjJneUZ6MmxjQXszdm11Q0NWYVA2QEZ+eUE8Zj0wKSgqWCQjSFolbiYpaGgwR0o2
ZzZ8THA5dT5qSjZPe3AmSQp6RF5Pb3ZLMGRwdWZwVWtAKk8kJHBtJkhsZ3Y5UGkySFl4ME5IS1dX
NTNrdz8hOURvUkh8M0lYS2NlMTxfZWJfJGEKeip1P0pTY1p4XmxoZ2p+cmNqZ3JBaG9jT05eej1B
ZmJhWnFyJXN2PXVSVVJ2RWFwKj1xelF6JFlseEJYaT0pK0opCnopUUhESzIoUisySW59N3xyb3J8
LXojU0gtKCEtWHorZCF2anhpfk9lS1l7eElSZF8oI204S2xfXnl2WkwlSnAzTgp6P2E1UU0zc1h+
NXJWTmRQWi19bGpoRkcjSUdtcmkwNkRQUmhlWWJ1RncoR0l7WFIwVFgpZ0M5Ri05bnthbmQ8bTcK
eilIKjhYOVMlTHc3OztLK2VSKSY/aVFONDReWWh8QnNrMzhPUnN4UE51P3lAYlNDZz1lKntzZ1Yk
JF9LUCpRZWItCnpIV2gwbXV+R2JZdFc1bTBxTXlJTjZwTkNsPVFkMCZlQDJIfHFOY3JsOXN5N0ZT
WlBkUEM1RXRYbFJ8WHxVam9oUQp6PlloY3BaWjRxTTk8ZkZFSTh5Uz95TFozJEZNeWA5U20oUjVv
X2pZcmhEfWF1aiMkNGx5YlAhNSl2SChNdXtHcTQKeiFFQ21xJGVEVjhAWGRpUlo+KXVkY201PChi
WjItfWxZV1FeaD5BWHRjbnpDTCo4QihoIT9NbkpAfSQlSms0d0pkCnphNmd5RnpsNmt6K2d5eklo
MVN9eEgtRFQ+QDtuWGpZODlRZGROdCRUSk9oPShfYV44UV5SYUUzdEooUT01I29Cfgp6X1ItPUxy
Tzd+RjN+IT58fEdfMDt3VmVkQkYoSDhzZyRHUHZaaWRCVFlYY2BJJjlsM0N7VW5feHBYMU97UWNe
KGsKemZxMTN7YXlXP3Yhe01YaEBHeW9tayo5aFAhNGc4NUZ7RzJKaks3Sjl0aXE1eHFaa3p2VzhZ
VkJtM0YwRCVWPHRACnphQ0pgTSFpNmI3QHpnWk9iRWZLZ0B7TEF1Q3t9V01FZ2lHcTQ7KyUqPSha
RFVXXkQteVIyPVRieyhmSEdwbld4fQp6aHRNJmxCdmlZOC1Ae3tUY1lEcCokO3M1eilWbExDYmle
Tn1IZD87b01hOUs3IWpAJEo4QDxkdzlrNHNgWjA2PG0KeiF7I1dzVyh6S1BgOHEpZm1wbl9wX3gx
SGZzPiQrMj1UI0BGJSVvTDN4czZwKytNI2R6R202fGkhai0zQWBQU2hxCnpFMzJOYUYwVVVnMHxU
PlMzMUEwY3AlKlMoeiYtUzVkfE9lbTErdlhxNSVhSVg9UzFoNzZjTD9nI2ZCYlZAYmoyfAp6cEpE
ekoxX1pPQkV6fUtHenlTdVA7JldBQ3N0bmt6WW00cmBKTHx6PG4raFctWX16UGNrMnttZSt3SCFh
IXxwfDYKek9IMX5KK0MjJmBRKCtrQGlBNEBNRyN+XjI+YiVCcTxnQGtIblgmb3JreGY5aV5AcSRt
bEhgZ3ktYD0zcGBMKGVUCno7fTJiXnlDSTt4K3g3eUhGSkVNUTIhV2R6cz5rakooNmEmKntHT3s8
NCohan5rTk9za3ltbHd2dkJ+b3JPR3Jvbgp6TzdHQkxXQzUrOFNCVn1HcVd8bztjS3RxaSsxSk8l
an1iYzNCMmNWfW5IaStYci1SIT1vLXE5dTc4WmMtJVdZM2EKendycG0xRlJ7OyYqdE5wTCErOFVe
Q3ZWVmxlSlFvKzRlc1U1SD5rRTg/ZWwwLVpTeUxxPGYqbUhQUV5hQWBhNVJWCnptTH4remg/IU1k
dDJwe3dUVSsjQG5kSHZZUzk2bFN6UD9RJXRnK0cyWEhKfGJHO2ZadVhwUU1GP3tjdElhOWA0bwp6
X0M2PjFYYmVXJW8haHI1eT92bUQ/alhZYzFTb21wSGEmTEBRQyh0b3BadHo2JGdSSUJGVy1iNDxq
KTlBMiY0fXUKekQ9UkFzdkdJT2d3alJXJEQhYndyYWxFI3MjezRIeEc3WDhje25zdD84ITZYYVR1
UyZDTXJzRWVvPV5XOXB9WVNVCnpnVEI0Xm1ra1lpaCNQJmEmVjA4P01efjVoPEFHYGpuXlh+dVpL
eERfa2hDMVFfbGR0OWkkeEBBN2g4dC1Yc2tuKAp6Z0p4JkE3O3A+YFZneCgtPUArakZWMWRzSjNq
QlZyX1JsRWg3fVhuTW5jVWwoR21pWEc0eWVZbjRGflRlIXJvJkQKemNockxHQEAyTEJwKnI3Y2Z8
Mi14OVMjPmshUmYhRGJEaGh2PHF2bVZvVkltWDZgeFpDQjFIX1FqdnU8JlhtZyRaCnooN2skd1RO
c1NyaXY5MXM4a0deR1k5bW5wMnNpSEQ0YzZEPUcwNm5vdCo4SlhBWCghUiY8bEt4WXA7UjNGUkAh
bwp6QihpcGBUfUh4NDlmMnQ1PlpJPDBeKj8rMSlRPUdhTHJOcF5YTWBSYygtOCRhc3FiWEN2aXt1
bGBwaWNGMmUjS3sKejcrNTg4ViR2Y3lJd013QXprJHZRc0RhPGxzd2J5a1ZRKzsmTCtJcTNsKyE9
KHVGZFl6JENSdFdISkl3dWRYPzdECnoqfGtKbiFud0NseFoxfFRLM1FGIz81c0BHSWBpUGMxQjsq
T3Y0JjB9emNWQUZjcD9+MEw2S3dAKVgoZzlDI3U4Ngp6KzRQV1QwP3RMbzFkWk9ZbEtwN0NxNEAk
OShERGhPRnh9Q2tJODsxTiFHJW42e2paNHtZVWRhT0xvRFlKSEJDKGsKejVVWXpIY0p2cTxCT1lh
RSM9RERUe1hUallMXz4hO0B5JF9lSj4mUWo4amI9cWRiaUB6d3QtK284OyExQFpwbHAkCnpjY2lw
dzlaQm5HNmgyc3BeYlV1VVc+TEx5IXswfE10cHYxbCg0ZTdNZlBTPzAtVUFoN294Q30hQl8ldSZB
X05mMQp6YE13VD9XcFNAalNrQGtQWn5OZzRjZktacmxla0tQcXslP1dvVCtwS1VebERJXklYPi1K
XkJUam1XWmZtWWlwfnMKenZvakRFNXh7Z0gpNT9nNztgPER6QUFfdUVRMVIjfDAwNVp1blQpPyh5
eDYjWHlRKE1eaGtsVHVBfEMxazw4OStxCno0KjdPV1JNYzAjWXBKUUpAY0UhelFTTig0TkZzbCV4
fWwqeCthU09+UDw4REYpVExBPVlAVUxeI09iQFBXXkEwWQp6ZHpxS193ITtTSzJMcz5JO2dBQj1q
Ujw0R0RvK3skVHArNFM1ezQ/KlJ3a09WNk9KUnFTVkFWOTN0WFZvUEFUcWcKek9AdyljYDAocms3
cWluSGtreXphUiNzTlI7OVhsP3dlSFU5X0ZrQD8kdCtCM09JKkdJJTl7Zm8qOU9KMDMjZENiCnpE
eWwrNnhSKn5II1V+JkAySG5ZZmVIUH4xaUlYUXErP1IjYHAhNCRCc31GTnptQStPeypWRl9LQXxO
ZVkxczRpZgp6N1p3ZDJqemlTKTg/JXYqbnZNPjc2d3tyaDBjZDx9VmBGMXc8KCNuYjJWbEx+YG5S
K3N7c0xJdzJwYncyRSlKRigKelJYVX1rOUlgYTs8NGJtVGNMN05zSShRSXArSTN9Ul8/SFg2fDJf
JGx1VEdzJDw/aG1yOFFUdGw7JjY0VGJgWlAjCnowfExBfUpVfUFfeDh4cWExVitYVnlodXFZTmRh
cjwwTiU9RmhtbzNKemFDfEc1NVZxZjhHMnEyNjYkQytvWGlNagp6c1RBUXhTZ35jRERYQFBiPGI0
PXskaD1VdWExS2x9YDlIbjh8QmdAZW1sdUVfKW9SKzwpUlkwTEVDV2JlMUVuX0cKejV1NkFfciFk
SEI4b0lod21UZkYjV2ZjREMoVzR2N3F4KnBoeUN5SjxwY1FffVI3LTxfSzV5Q15jQGRRcldLUllC
CnpAOWtBPXpjWVlTNyl9PWJsSV80ZURNKEs3YFRwTVdLMV91Mj94cHA9OFpjVWUwdGlJS2Qre1Y4
WiNRPiRXRylzQQp6Nl5veGhuKnM7cTBRb0R4b0glcGxqQ0QwUWc1XjwlKiRkZHYtQzVFNmBXMjZe
bncwemRgPHBkfHFIZiglPmpSJioKejs/UXN1NmB6Y1o5QDlYWFVBOSh8eWV9elElVyRzMEkzcXRs
enVUSWdqKmNSVj1IJmNmSj9qdnx0WFErWnhBV3g1CnpsZkF0P1FjJj5ia2FOZEt0Iz9SPmclb0hl
Rnc1WEh6I1FtPVZWQlZocjFXKndDMkVSSFY5ckhSP2RzcmFLLVIrSAp6YUM8LS16cVBreHBqbV53
WT1rOGZka3d1JnF3YD4kZDNuTkExZExrKT9Hb3R5UF5HaVE2dEpUOCEqUkdkY1ZEb00KemUhcUI7
TC1MVV43JT9PY0BJS2tsb3liWiR1SnpVJWZQR19RR2pPOygwT3RVSXoldXxAV0Q4YDhOclBXa3VV
XiZCCnooU2RkSXMzY2d5MmNYZ0swfE5zWUthR3k9MUIlP0oxJldeIU1GdEUyY3FrY2N1aFhZYW5i
cGhxVzx5aGhxaUNfWQp6R3pfVEchNXhIN1hhYX1wdGlaT2R2PnUrczsxQlg2fE5OeihQIUhaOGFk
OGtTRSQjTDc2Xy1+cmhuJnxnQEl8UE8KenJaNyhFcHcpRklhSWJeaWF8cEV7U2tGU3V4ZmpWeTZt
NX02T3M3d1NpdFApeDVUezNsYyZ3REtPVnpxLT1TQlomCnp0cG44dU5DSz1ZWCgrPEtBYztObEdC
JWRqPXZAJX03QnJlczt3ZT94TFlLTWtARTJ4NzQtPT8jcHB2dmxrMj83fQp6Z0lBcWhkMT83JChG
fW5nVj9SXkAkb2wjNz1iKStiPnk+QDsrPTFtKmooRjxwND8lK3pZOD9mWmxgUVk7a3BWe1kKenFx
cEcpYkgwRTc0bXkkYjxreFdFYEorez9IamY/XnRabDN3N2h2QXIrT2hAaFEmNnpJd2U9MmRfP3RJ
VW9+eDYoCnpednN9MFNSPm95d0EtN2NFTHgmcU5ZUVp0OGpWOWJFTG5aI158dHhgP3VGMFNsQj42
R3gxQCMxbGZYM192QFklRwp6RHFqYTxKSys2X1Blaz1mOXA2bEhVWSprdnwwSmA/emg/biU+LTUh
bEkkeW98dT5fNEA1Nm07RlVtfGhUKjRBNDUKejFwZ0dZNml4fS0qTm1TYDN0PlNUdnxaX1VuMDJo
Vy11ZUBLNH1mKSFgYkA3NHJ2Tk8jXnR9bTZZdHEhNSZNZDY0CnoyOGFsMzhGPX4jM0BkUUdia0BM
cllJKFppVG1hWDZjYyY3I288LWB6andGZzdSVWJMaSUjJSMlcyhgS0JSd3IrOQp6ZVZPZV92eXIk
MnlUb1R6QSNAQFJWX2NRaXdNUWA4a0NTdjkybU52aFdQSkEjJmtVbl8ze1kmeHlMYXp1WXhoeG4K
ejdZQjZ0VHhVc2tZcGpySmxCXlVMUzFPIy17UTVsLTlRdnNNJl87KSNQKGEyNjhVKl96NFltX2Ql
dUJDLWhZR3pWCnptZXVoUTlEWFpXbUpUXmUpQndwJSRxKVE5bmRnNkM5c3V9UT5uaXBMN3VkQDwp
bnBFXkdaLTAjOVkkbiNQI2BHdwp6MEExSzIwWF9lKntmUEI8V2paR19pVG5eQz8xQmJXTHRBN2Bf
WkUkJE5UaWRuWXU3YWM3alN4TWdLJWh+K35IRkkKekZrIyRQNll7RC1qMEdDbjFAaiFYNlI1Y3JV
fWJQVmZ1RG1UUH44NnhPdWpkNy1xMVRzNk15XlRrM2FiTXZLIzV7CnpoWWAtUHVfYzZ1SjVJUDgz
fTRkblIybGpEQHk4N1kqUkNeJnAmQ20pJWolSmVDeGBpKU99OXNYYHVxOTRPSFVXSwp6OH5DOVg5
fSNnOSV2dSlKcmklUWshQVlnOHstLX1NYXlJcStyTHN8WiF0Q2Eqbn1wY31iJi1PQntRNkg4SEJg
I0wKenpVcihHQG8hZUsySWAoV2NXJEdAOUdYdk9EK2RSTWhUQns4MEZsck9VX1c3ZlZ0bCRDPX4k
QSsrSDg0TXxKOzRvCnpVYzR1UnhNczBJYiRpJE8+fW4mdGJDSlo0SmIxPygwYH55fihxRjtHcCVS
dWleMzNBMVgoM0dGYEF4R3E0JHNMRwp6K3B7Mj1ueGt9ZWJ3fSViJC1CRVRmKEU+TSVlQ0E8PEpM
RGVsN3ZtM3FJZnBRcjxzezRoODxgZXdPJkxwUztkRWsKekZ1bF84Rl53anl0KzF6SD5jSHNxeW16
az90ZHw3IXhYYEFPYD9RNSVyOXg2KmhlWE9Wc1A1QHsjckVEd0VeKG9eCnpGN1Y0Mk5gZ1IweDh4
NkRWUE8lR2A/TT1fOE9aP3cwVGUzKmlpTTdlfEI7OVZJVGVgQkFnNFJtbXlOfGkycXsxbwp6MC1P
Jk81SlExSCVyZipaSCgzNno1fUw/cDNKNHRWMkZ3K3g+UiFJWmhqdiZNO0hnfTIpNlNuQ24rUXtn
NSNRaCYKekJoN2JYJFM3fU5JbzJzakVjbVRZc0EpKnMrWDh4SjN0d0tHMHZaZno1YWNNXz5PPkYt
WEkqTWJ3eHFQd2Zzeit0CnpWSTl6Xj8lc3RhUUhuI3VFYnlYK2JgNWNaNUxQNjNwZzlRdTZJLUpC
Vjl0UmpFQ0skQWE9WipuMWdkcD8tS0JPNAp6RU58aX0xQD1LakxYKHxwamRmcT4+JDtVYj1XJi0w
bnpBUGxNXk9HUTNKQyNOPmxiVnZDSzZwcmpQTSpGVVNJSG8Keik+WFdCNTBxIVBJSzRqPU1ua1pj
Y3BrKGdDZGp6azB9S0xuckB5fm4hbjw7QFl8eEpwbUpaI28xd152TDM+LUNSCnp7NiVIJkxlM1lG
Y3ItfVVGdGtDeGdqfFNyeHFWYCE0eSgtZS1wKEAyJmteOH40dDNrcCRvbE96QFVNak08Zj1MXgp6
LVEzPk01Km1FNStGbCRlO2oqd2NhNyRycCE2WDdYV1RlbmNgTzF+WVl0ZEFYXjxGJDhWP3pYdG48
KVlzT2VabEUKenM5b1Jyej1eNXpTUSFULSZBV3J7JX1lQ0MweGclX1pwckU8JFFWLX5sbUxyfnc/
cHh2biNePml0VTZOdzJSMXRhCno5U1UtR0ZGQyRKbjZzK0skLXorQDZqRjBeVG1jQ1VRMkMre3lC
e01RTXNVNGs3fSV4RnJRMUohUVokPFpRRlUmcAp6dk4pfV9GWUhTK3t0fTI4enkwPjlJVlU4OWhN
cHhWRE1fI3UrR1JhPnVYaV5JcTxNNnlBeSEkZzRfU2RCUn40b2sKej00RUNJbFZ8KUtFZjhheFBP
VVdqVzsjTCV6P0BjXkkycXthaHJ4UFghKz9JWHp9ZzFgaF9ZfUM3fVB1ZXcoN2E1CnpEUyY2el4r
R2V3JFNmeTApRiRDSkxtWkE+JlB6OzAjMGhSQkBQRFZlPEUhNldxYkB6ckE1c0luQVROeHN7Yyt3
bgp6SXdxej9yZHBoKVNWRSNxSHk3P29rXmE0VkRkcHc7WTlVKHI4dzdgeyk5cmxoOz0qfnk1SlJf
VndUfnlBNis7YXwKemtHcHlFYDVNTStiMTY0Z1ZQYD9+Jit+PERyUXt+YEA4NXJtKjFkQSZpbD04
fm48ZyRBSCpxO1BJNWJyTChiIXt0CnpLcHI8blc2NksxSVI0Tno0bHh1UkokKkVEcE9kcFFHNE81
JUtXOWl0aTA/IVFHVTFxcFlVS08oQDFkeGppZWd5fgp6PURkNk40c2hKcHFQWk5xX0JUTXFANWRB
dTdZODBeeDJ7VEskdjBmPTlqIVJNQHpBVWs2QmYpempWTzw+S0EzYVoKekU3QlcwOXc9NlNNI3hh
KT1IeClNZmwtbDcjX2R+T2RVZj48Ql5MczA2bEJJRFR0SkhhOFI2VjJnMXI/Qzx4MG1qCnppNHxh
SzE7R1JHdWh6WUxXQThZKno1ckFPemVQdHx5OD9nKWdeZUJGaC1YRCFFXl9GOWRteyl1Z3ZwdGly
bHV4Mwp6RjIhcnR7MjhIJE14bUdSQCRwNFFNdU5saXlJITBvclRkNlROVnQqSz1QMF5BS2ZlIVBW
MUdzbSo+WU9TJWc7ejcKeiQ4RFMrMWx9XnNVe0wxK0NyMyhEKUVTNWU8Zk91ZCNzKlklbVphaFJm
UiVOMEVHTjI7SUVvRWA2dDc/SDFfSXQlCnoxRzc8cmdrOVg5JEY4ZXpaRG1FTChEYTZoaUhXdUtK
Y3R1aEVPRzR2KCtMUj5US1Z6Kkt8TFR8TkBaPmcqZyZ+QAp6dX0pd05qQjI2RHIqU05GQ35lZEly
bmQqX0NvaTJudCZJc1EzanxfJVVnbFZ3ditvQkdrKWgoTS00O2I4Z29rZ18KenRea2JLZj54em5A
QnRJJXI0V1pSZlNVIVBEX0FNZXgxaDkxdVdUaWRfTkptOUBpQzUkamBIJkk/ISZISGtmUT9QCnoy
ZDApN3M8cGo2XnlTT2RfNFZOQSYkVWFmcWl4WjtYbFZ9b1o0QDR9eVZCSTJDPERGQTRUZlQodj9+
Yn5nYk1ydAp6IzJXbExOZ1d6SShXU15wU3E/bC0weipTbmxlZjNgQ2c0O0IxcUZWN1B7YDFAMk5G
dnZiKD9sdXprVUtPK2FVMGQKenZpQyEpMkxMRDJBNEk7JSMkRjlLOT5tS3w+KFkoKz9tTDJzWTI5
VENKazAjcz1TUyUoRj1RYGFLWiV7KEJ9ISpyCnpeZSN8ZldpSihyVmI3KFV8MThIdCo7bGRaN3cx
Jn4xY1E0d2RFc1RlSWB3e3Y3VUR8VSM2bnVBdHlwSSl0eShWeAp6akxkZ2FhXmdkTStUZXl8KlU8
b1lKQ2E4PWhJQHpBeX5yYnM3KmwlUmNxUykpSUA8fXM/UXtsXyFabVMwNWtTITIKenJZYEBFeGgt
NWd0X2BXVTZOPEtqV3gwVW84PXI9d0VxcDZLSzZ+JXZQT09qd0FJWUd+PCRiSXtKVFUyYWQwI0lt
Cnp6QUlOZylPZkMwa0Q0c0BZWDBtfT4rVkt2dmVGPWt2JCViPm9VeVU3O05XOEB7UUE/Q0U8aH1o
S2ErU1I2Jkc1dAp6Ym53dDJmUnxHSjI2QlMhXm9CMmEhNGFfT090fWhQbjlBTHwzRjA9SUZwTEZj
YT54VWB2ZU1RSj4hQHtqJVBmcnYKej1LXzF1Vn56WHckTEhxV3F2SCZQZU17O0I5PWJmRW5YcXl2
QTsxMGJrUypPMGpia2wxLU9YWnReWDUlPjU4IzhACnopdjBOVEpzNygpZzVkKypidVRhemglMlJm
Yko8U04tKXhXSyFYeXFOSiVuLTlHTEdZWllsayZOSHR3MFopfUhRVwp6SCY7PiR4VHt0QUNVS3h0
cXZFPT8qM0x5ejI9IXlIQTZLWWo4Y1lrZGBKcnYyMDM+UGlnSyt8cmxUUnpwWEsjQ0UKej5LWl59
SD9uM0peaXNkVHpANDJQNVF2UU9gMl9fcnFgMz9qMW00OD89KHNyUjtedSFjKGErTFlLN2d3U0wy
bjFqCno5SX1BaSt9IU1USGpfVGY2N20yJXp8aldHVTFybTN8TUJTfDUoZnd7R3ZMaXA+Y1glXytv
OSZLTkZ4ckBKO29nLQp6YDx0QDd7ZzkraVdLMnY/eHF9aFJZKWFabU04Yj9nO3VNbFNpfTd0eWty
US0+d3M8N04oV0FPVzx9VjclMGMxaTgKelc3UjVjeGkpNWdidj9YSzcyak0yaU9yJi1gPUs4I3Vr
RUI0QnM7T149QXMhP1JPKjJrU2Q0dm0wIX04bHtqaGhDCnpaMU14bnlZZll0RVlQYG1mNFNaZihi
O0UzZV91JlMzRyNncTE9PWtIQzJyTzJFc1FaPkJoJGJmMFpXal43VWA0fQp6cEZAWFpXQDVzPGR3
MS10dTw+d31ZWV8lKVFQQCR+d2g9ZnI1UHE+T3ROUTB0OSkkO1VqYVp1P0AyZVo1X3dUU18KeiVg
U3g3ck91cmRSMXlYNjRPPDxaZWp3VGE3e3lTTF8lSHg4WkVkS1ZIKSZ+VVVrVXNKMm5sOFNxODw5
VG0/eXsjCno/X0tid1YoeStlJHtSWkUlKHBpVylZVklUd3BXMnp2ZEJvbTh2dk95R2N6TmE4QkIy
cjRed0pCYVMrRXtxSTBVJgp6dypLXm5qRUtSeCsjVmE3Zm9GNGJKZ05iSmZNJXdxP0RgNW1qKmNx
RyVrUk45JGhhK1pzdmM5V0tVQyRsNDx7YEMKejM3YHNrRj1LUmAxWCM1b0M4T2lxVzs/a2NERlVQ
KGcqUD1iZ1p4fTdUMzFhaW9QYj4tST45ZzRkajR7b1VLUTBoCnpmSzRVeiZNK350QVo0ODxaLVFw
RkM9KWRXSG16QVktPU9xcGJ1QWNYYTApaC1oNmdjV1VgY3MtTGRuNmpqK29scgp6XzBjKklHWGcz
U059bnloRjFxYXREbGlNSjNwSGVEbkI+ZHp4N2ZwaXIqK29uPk96TGo2Zk9IOXsrKUU7I0c8KmYK
elFobUxEMk4hZUFfYUkqJmVSYWEmaTVodllrP0tRUmlyVD4oZlNKSzg7PHhjNzhPYXpEI0skNE5e
PDY5JWg5JnF5CnpRU3tjb1g2aX54KUpMOVZxdkpxWlNmbEUqJWA4WHk5KDdxPXUmPVU8X0NgdjN0
eUA3VGNBPnZtSEJvdj5fN3FUbAp6MDI2Vj9LYkwkaihhKCk4P0R3QyQyTFgoYEdKc2M7TUohJGgk
JXFKPU1ibnc/cj4maWtqdGlmPXVafWNFXlktKj8Kei1eKHRJVU1jXk9JZjkpKXE8cGtGT19kRVgx
SzRFJTBNT1dBbHBIeUZiZkQ3dHB9RzBIayg5Jk9DNGsmZUNFVHJHCnpnIWQzQUBCPmR6RVFwQVU4
XzNvWXM7el57NVB+N3Z3PjsyWENiJV5HaG5TZVVWUWZvVm85a1d6M3A9fi0qYXM+ZAp6MEhyVkdX
I2JFX2dzT2B+YTJDcWY9eEolZWhlc357RStNZklmKmNXIVUmanUte2A8eEx4TTx3JVZIYX1FNitf
WkUKelJ9ZnIoTlF0LXl7ZzIqSXtEM0JQWkw8T0cmJCY0JStyOSNAak1naD5sOFNZNiE3aXU3Z09Z
cVZiaGMrPF8pSzlmCnpBWXdgOV4kYGJ7SXIkOHFDV0xyRko1b3VLLUNpc29qVW1HS0xqPW1nI047
T2hiPnRoYE5lQkdIZlh9aCpkZk5ifQp6OTVUZmQ2QkdXN3B1eiRiUSt5Nm9aZjF+MGRBNFE1NiMl
Z2NfKWcheD42Y24ten1XJCo2U0Y8ViVtcVBYOU9GMnMKenlKci0/VWpFWTkyI0hsUCM1RG8mSXBI
WVE/cClqT0ZuUTNTZXo3YTkyfjUzcDc0Vz0+RHBfcHRCaFNjUjc2Vzx4CnpEaitsTXdtZjI+cXde
KnFWZCh0Pjl4bEhqU0k4TkZEVWg1ekR6aldPVllQJHt7RDJZSztPP1QpbktFcyQzdUJrRAp6dFdQ
RTFmNllPdCh4eDI3V1h4KWZOWWIkKXsoWmgzJDh8bTlBQkBvWFEmdXZVZz1mRWtxJCgjVDJpNite
JW8yMkQKenc+Nm1nKEZ+UkhYQDVKYzJAcUg2QT48cEBsMGYyc3lle1pKUUJrTE5ZVSNMYDFvZFla
N2w7MmM9THk4V0xYT3pvCnphKlUkbCg7KXxuK3lneUdZfWd5Zk9IPVNVR2xodClFZjB0PGZPaVRD
VzF6cVBvWVhacDMoKngmSVNLKDUwP3s0QAp6VmdhUVh7MiZJeElOKz48VHNEOyUkKmF8ZnFuVXMk
Zm5zIVhiNW1FMyVFKSpLPXtge0FZfjZUOUlndmhGa0EjR1QKem0+SGc9OWw5S1BvJTA8Yj11KHJ9
UCQlWm5nMWRUI2ptX3dARzwtKjBkZn4hc2AzRUlSSEN9bjk2fmQ+REItNGNTCnp1d1VTbSlEWnhN
OHpOd0BtXnNkP2BAOThaV2A1ezRyPGt0dFdSTTdtZW5fVzV1eVdzRUppMnE9TzlYO3lMVFdnMwp6
ej9zd30pbm57eVRgYl9qJnk3ZlZRVzskciNFM3dRMSZtUmsjYmVVN3xONE9ucG4rMCZhMGI0QXpp
Jm9+TF95QD0Kem4hZ1d9Z307WHEzZGZYWHM/dnwwNlM9Tmx4YHAmZTRYJSMtZH1ARGw3R209Njx4
WlUqZXxPKzxtNCpXKzUtYSp6CnojeXV9MVYrTjlyIU9gRnVMPXRlIXdseW5fdGJrSn0wMiZZXjlD
eVBWNkJzIUcrIXYmYmMzRXJnZmZRSWFueiU5eAp6ISNOdz8mQjxsczBEXjVJK3YpVSs7OXd1SGly
fm13PyVFSWhzYVU4fHBpNyUzN1ooPTx6Rj5mOWh7TXZIekhISHAKejVfanhHVFEtK2BSPGYoX1dn
UnhsNSMjV2tkaVhTTmdVPFV8P0A8S0hBJGdpUnt4QnBqJGpIY0N5Zl9XIVJCeWdmCnpGOUFZV3du
cnNJTF9+aGJYR2psKHpsUipjPmxnPndvbSFoWE8+SiVNYz08I2pPZXNePSMkRVNedlpSKWRnU1ZQ
Wgp6RyU3U3A2Pjw9clRWVCplTG93ODJ1QEhgRzs+MUd5TlNgK1JePW5FPDJrejNMIS1yd205XzR4
JjZhKzA2NFRzSUoKeikoaTQpRSVifGdRdm5NNXlLOWZCc0tGX0tUO29DdXFIYiRFMm9NOUB7Z0FW
bE88eyUkOXZ9UXU2VmNeb0JGN3NfCnoqIUQzKGorbH0wN2NmR0MtTVRXZGhgZUE2P1V6U1pjNCV9
SXlTS1pvTGheKm9uaFhRZ1I1WFUyOUBvO349LTNZIQp6Nm1sOU1nUkdeYnE8fnU1N2tyKHpAWD0z
MlNqfn1CN2laMDRLcVpfVWdMQlQ/YHA8QXZLcXx5bnBoaFVWZ2g3PmgKemp9TCQqWGdqZCtjRDtH
U1BZPTxSSWdBUWNGYUNIUiRAbStuOyhMJmRIakBALVdrdVFwWHNRUE12RFhrekJId0xICnpiOHg7
V0RKX3NGbHJ6Xj1zRXtNUWxRdVM2Rl9eaWNHZTI4ITs2clg2aHY3I1Q2cUZgKEpfQnVTTnglcVBl
aF9vWgp6KjM5KXwxT1Y0RmNvJiFlMVJ4PlAxKHBOcldtQ1ZqbVhzN1F3amU3OWEyI1RFcGFKa3Ym
a21MXmdOZyE4MWExS1kKelA9WG9lMiRvZms4KFNjSXdGaU5MdyZ2ei1jKlheQDdDKldSQklrRTgw
WGFEWDJXSyRmYmpwJHdRT1FvP193VjA3CnplQyV3MntqanQkeCRqcz8lU1pKfU5rUEcjZX4/VHQl
WWR7WElTNXg7VnBJYW01dz4/PiFGSm1XYl9TRk5GO3EyZAp6R1c8VjBmV2w5TSMlSDg4UDtreSln
X3w3UChLPlF9QGszekVGI0hKPDZPYnJ9ejcxK0Qld2Y8aWAxbn1DN0ohVS0KeitXVHtoVjImK1NG
VXZibS0tWCNQREBxaTFzb1VDK3QxYz1DNEdtMmopeUpuOWRrdXZveytRLT5iPChDdj4zWktOCnpy
JWtgPEBWMzBYKy1JKkVDPUNTcWFjSX4lM0dBMXRrZzVweWRmTSVZZktebE5YbTFKezE1OUNJayZa
KXkjUkItTwp6LWU8ZExGT3h0OzBzbkEpTUt5cXxXUkB5RSpNO3k4Y0NAUHtII2F1fSNTMH1scz9T
Km9ZWTJ1MHdRYCgxODNDYk8Kel5GQnpuOFAjfD0haWJuVjJyZlpBbjJhYnFOU2Z3XytMWWByVEch
VGcwbiFiQiR9JiFKIyZnYilkVlMlQGJTRzkyCnpMVUg5SWwhVDFEK3JuIWNTWitKSExxVHhxQWM0
KlRYKVF7Q3UoN3UmZGxJVUQ4JEVaTWIpdzdCQ0Y/YlpLZDxWaQp6ZnJSdlMyMG56Q1Y5ME9Bd05P
SUtBamlRRjFAKVB0U0BHSEpSZHs9Tl5mXzRSJmRzN2IhWVA/KGlDN1pJaVBvZG4KenFOeU11JDs4
Q2U7Jms9dTZadGFVWFdeMFpja2JNb1Q1UWYrZT16WTthLWUkSipkSClWZmBiUVdDe1crQlZxenwl
CnpiLW8oezYjRW4mYzB1OGpmSkFgVkJMTUN1ejYzMGkxYytzS0VvOEF9OE9yfUhLMSRjM21ePV9H
aHtJN2I0PEhqYwp6aWltVD1nR2JQSWNNUX1rdz18TXNAPUQmWHMkWjVucz09fU94N1MzNT1XZ0p8
REtLUnFadnRXKzd2LUEzIU87YEsKemc2Xi12bzZUQVAybG1tZ3Y4JmBKSVB9TF5DQkRAS0ArTUQh
Tj0xZVpaRTxwUStraSgqaCFVJS11bFpZaEd4VSNYCnotQDBgUm8rZlpDPFljQlg4eUhiYnBGMnUo
QEwqSkl0anM5Kmp9JUFKJiMhTyE/U0Jjd2U2X0BCd1Y/XkQ3Q25IaAp6UXNHcXlDX15mdk10PEpo
U195UTVSZXYpUzlgWWB4XzB1WCRxamU5cG45OUhiVEtffWNiSTFsODB9dTJkSXhFQ3AKektKSkZE
NEB9Z280Wng4PEJiLWpKdyZjQ18zPEAkamVIeHhpUVpuMlomVyY9OXFffStlNjNXOTtVKkozMDd0
MXA8CnpYVGpyUElDNytHQUMoV1gwVThiNllxfSVaTk1HTSlYLUo5LXRrVkYpMCM1ViRfYWs7NDtk
WCZLQmtTP1k3I1BwVwp6P09RPWkwdypDOHhWa3p5cWU+QyVGPlhwQVBKaz5ZXnY1NEpaezM9TXtz
Q1dSQmNgRl9LcWRsYEdEUm9YU1R0dngKenJPKEQzTzlzXmdFV0MjfFpadHBga2w1aVB2U2RKOGgj
YHw4NURXdF51Ni1xM25QWUNhZEsxMSQ5TDFgREBkMkB2CnpxQVlNbS0wXzhfJT4rUipMQzA0Ujx+
VF9vb1ROSkZfVzxPLUcmSTA3Nz9hPn03bT93QD9kIT1LJFB0Z3YrZHFQIwp6ay0kUyFsIXlwcXpG
KXNTJVhKK2Q3TCU4cT1xaV53d2N6YiRWWnpTTktKa2c9NGFYdDtndVZVO0k1ISNgbmgyfXcKekVI
XiVZY2twVSZIRyRIQkxrcV5uakJERn4oe2NMenh8LWUxYV5nZ0lNOHRVSntwQld7PzR6K09KN29F
ZEtDX31ICnpFNXh7KzwkNUV7PERCeVBlVjZVK2pwfmcqOUB4JnkxOHR3czIxRXJ+P05TdiUoNmo5
Izd1UUdGSU4lRUdhNUI1Qwp6N3JWMjJEYXBaaW9HQVFYdjY5NkQzSElRJGhRYz4kKFhCfnxpUkA/
Mk93Ry1tZ0ZLRlBIP0l6UXNHNHkrUWRORnMKelo0R1owODNJZjVfVlN2Wm9WMUU3MUVEeShKMSMh
bnJhbWk9ellabE9GRiFJa05PYEpuZHdVeCtFc3pmKTdyfUQ2Cno8b0MrbVJPKEchJFVnd0t4Oz5I
JiZ1NHRvKmxkWVFUfHVhJnh3RXpfUFdmdX5kX314T3JAcVhjTVRZRlR7NClyIwp6cXVzUkheeXwt
KiFaO09AQXxwajEmQl9IUGQ7PXRfIzkmazhaRDxnUEFJYjZpJnk8dXlTVUA0KjYqQVZaXj5UJkUK
ek9IJkhUVER9VHlaTjxBTWhqWU4jNzY0VG1vfUt2b25IeXFoRnA/V3BRNG5haGBwUG5VI31BfChg
ZnFMZmxxWCg0Cnp2PDNaSjYjOVJnWlQ9cjxkaWByanxHSUppfDUmdkRnSFAre1plJFl6YWoxeSRh
ez5QS2tVUFhxe2B9RGF8RFJhQAp6fEFXdWZ8TW5+bTV4aWp2QSZedzkzKVcpT05CPnBHdW8/Z1RB
RW9lcm41cH19SXlCJEZPIVctfHE+PUttU2JKfTYKemVfV3llKX5WdypMazxnX2ExSGpGVWF2JlJZ
V1pEJHs7YHl3I188PjE9Pk8lOV4wO2QpJnA7UU11ODwoZk1WQX5ICnpEM2YoZFpyZHNgbHJgakFh
JXVVekghWHRZT3pRIyEqO3c4dlhkTns8cTRHSiphMDAmVSYkeE90clk7PyZFRm4leAp6ZmB6amoz
UFJOc3M+JjJLJUNrIX57aDB4SkRlZnAydTdSd0UlTWRmcXRDIVhxP3A+KlBgWDRfNXIwfUF2eVc9
c34KejIoSWpFKjdVI21tIVZKbWNeRTJ7KHFEb2didis2cSQ7Iz9tM0htPCVXQkU2TFYzYGpvS1Yj
JWtQKnpYKnM1OyVCCnpVbjxYPko7ZnV8eVkldHB2O2hVMjwtTzBnKE8md3JxPDFYUUNsITd+JGAh
TWRXVzF7NF5BNGNBWl8kY3xfPi1TWApjYUpxWSg/YisxM0hHO0pDQERqd1c4IUZmSDZwZiQkRlZP
clZrXmxlegoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRl
ZC1kaWZmZXJlbnQtdHJhY2stcGFydHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRlZC1kaWZm
ZXJlbnQtdHJhY2stcGFydHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjY2IxYWEwNzEwNmFl
Mjk4YjY3NTM5ZDJmZTVmMzBhYWFmOGVhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3Np
dGVkLWRpZmZlcmVudC10cmFjay1wYXJ0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitD
b21wb3NpdGVkIEN1c3RvbSBTY3JvbGxiYXJzIHdpdGggRGlmZmVyZW50IENvbG91cmVkIFRyYWNr
IFBhcnRzCisKK0lmIHRoaXMgdGVzdCBzdWNjZWVkcywgdGhlIHRyYWNrIHBhcnQgYmVmb3JlIHRo
ZSB0aHVtYiB3aWxsIGJlIHB1cnBsZSwgYW5kIHRoZSB0cmFjayBwYXJ0IGFmdGVyIHRoZSB0aHVt
YiB3aWxsIGJlIGdyZWVuLiBBbGwgZm91ciBidXR0b24gcmVjdHMgd2lsbCBoYXZlIGRpZmZlcmVu
dCBjb2xvdXJzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vY29t
cG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRlZC1kaWZmZXJlbnQtdHJhY2stcGFy
dHMuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9s
bGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQtZGlmZmVyZW50LXRyYWNrLXBhcnRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODQ5MWU5ZjYyOTU2YjJiODUyMGRkNWEzYTBkNzYwM2YwYzhhMjRhMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9s
bGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQtZGlmZmVyZW50LXRyYWNrLXBhcnRzLmh0bWwKQEAgLTAs
MCArMSw3MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Db21wb3NpdGVkIFNjcm9sbGJhcnM6
IGRpZmZlcmVudCB0cmFjayBwYXJ0IGNvbG91cnMuPC90aXRsZT4KKzxzdHlsZT4KKzo6LXdlYmtp
dC1zY3JvbGxiYXIgeworICAgIHdpZHRoOiAxNXB4OworICAgIGhlaWdodDogMTVweDsKK30KKzo6
LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uOnZlcnRpY2FsOnN0YXJ0IHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7CisgICAgYm9yZGVyOiAxcHggZGFzaGVkIGJsdWU7Cit9Cis6Oi13ZWJraXQt
c2Nyb2xsYmFyLWJ1dHRvbjp2ZXJ0aWNhbDplbmQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJs
dWU7CisgICAgYm9yZGVyOiAxcHggZGFzaGVkIHJlZDsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXIt
dHJhY2stcGllY2U6c3RhcnQgeworICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZTsKK30KKzo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2U6ZW5kIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbjsKK30gCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjpzdGFydDpkZWNyZW1lbnQs
Cis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjplbmQ6aW5jcmVtZW50IHsKKyAgICBkaXNwbGF5
OiBibG9jazsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgeworICAgIGhlaWdodDogMjBw
eDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9Cis6Oi13ZWJraXQtc2Nyb2xsYmFy
LWJ1dHRvbjpob3Jpem9udGFsOnN0YXJ0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjeWFuOwor
ICAgIGJvcmRlcjogMXB4IGRhc2hlZCBicm93bjsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0
dG9uOmhvcml6b250YWw6ZW5kIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBicm93bjsKKyAgICBi
b3JkZXI6IDFweCBkYXNoZWQgY3lhbjsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorICBpZiAod2lu
ZG93LmludGVybmFscykgeworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0TW9ja1Nj
cm9sbGJhcnNFbmFibGVkKGZhbHNlKTsKKyAgfQorICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICB3aW5kb3cudGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgd2luZG93LnRlc3RS
dW5uZXIuZHVtcEFzVGV4dCh0cnVlKTsgLy8gVGhpcyBpcyBvbmx5IHVzZWZ1bCBhcyBhIHBpeGVs
IHRlc3QuCisgIH0KKworICBmdW5jdGlvbiBkb1Rlc3QoKQorICB7CisgICAgd2luZG93LnNjcm9s
bFRvKDQwMCwzMDApOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKKyAgICAgIH0KKyAgICB9LCAwKTsKKyAgfQorCisgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgZG9UZXN0LCBmYWxzZSk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBzdHlsZT0id2lkdGg6IDE2MDBweDsgaGVpZ2h0OiAxMDAwcHg7IC13ZWJraXQtdHJh
bnNmb3JtOiB0cmFuc2xhdGVaKDApOyI+Cis8L2Rpdj4KKzxkaXYgc3R5bGU9InBvc2l0aW9uIDog
YWJzb2x1dGU7IGxlZnQgOiA0NTA7IHRvcCA6IDM1MDsiPgorPGgyPkNvbXBvc2l0ZWQgQ3VzdG9t
IFNjcm9sbGJhcnMgd2l0aCBEaWZmZXJlbnQgQ29sb3VyZWQgVHJhY2sgUGFydHM8L2gyPgorSWYg
dGhpcyB0ZXN0IHN1Y2NlZWRzLCB0aGUgdHJhY2sgcGFydCBiZWZvcmUgdGhlIHRodW1iIHdpbGwg
YmUgcHVycGxlLCBhbmQgdGhlIHRyYWNrIHBhcnQgYWZ0ZXIKK3RoZSB0aHVtYiB3aWxsIGJlIGdy
ZWVuLiBBbGwgZm91ciBidXR0b24gcmVjdHMgd2lsbCBoYXZlIGRpZmZlcmVudCBjb2xvdXJzLgor
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149785</attachid>
            <date>2012-06-27 12:34:07 -0700</date>
            <delta_ts>2012-06-27 14:25:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89908-20120627153407.patch</filename>
            <type>text/plain</type>
            <size>18911</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMzU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzI4NzEzZWZlZjZhYTkx
Mzc1OWRmMWI2YzVmZmEwZDI0Njk3MzNjZS4uZDczZTg3MzUwMTkyYTEyOTI2NjRhYzgzMzBiYzIy
NTAzMjVmOTA2ZSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA2LTI3ICBXLiBK
YW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNjcm9sbGJhckxheWVyQ2hyb21pdW0gc2hvdWxkIHN1cHBvcnQgcGFpbnRpbmcgZm9yd2Fy
ZC10cmFjayBhbmQgYmFjay10cmFjayBpbiBkaWZmZXJlbnQgc3R5bGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk5MDgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFj
ay1wYXJ0cy5odG1sCisKKyAgICAgICAgQWRkcyBzdXBwb3J0IGZvciBhY2NlbGVyYXRlZCBkcmF3
aW5nIChpbXBsIHRocmVhZCkgb2Ygc2Nyb2xsYmFycyB3aXRoIGRpZmZlcmVudCBzdHlsZXMgZm9y
IHRoZQorICAgICAgICBmb3J3YXJkLXRyYWNrIGFuZCBiYWNrLXRyYWNrIHBhcnRzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJMYXllckNocm9taXVtOjpwdXNoUHJvcGVy
dGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXI6OlNj
cm9sbGJhckJhY2tncm91bmRQYWludGVyKToKKyAgICAgICAgKFNjcm9sbGJhckJhY2tncm91bmRQ
YWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckxheWVyQ2hyb21pdW06OnNldExh
eWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJMYXllckNocm9taXVtOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFNjcm9sbGJhckxheWVy
Q2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Ny
b2xsYmFyTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJ
bXBsOjpDQ1Njcm9sbGJhckxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsOjpzZXRCYWNrVHJhY2tUZXh0dXJl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTY3JvbGxiYXJMYXllckltcGw6OnNldEZvcmVUcmFj
a1RleHR1cmVJZCk6CisgICAgICAgIChDQ1Njcm9sbGJhckxheWVySW1wbCk6CisKIDIwMTItMDYt
MjcgIEFuZHJlaSBPbmVhICA8b25lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNd
Q2hhbmdlIGRpc3BsYXkgdmFsdWVzIHRoYXQgYWxsb3cgcmVnaW9ucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmNwcAppbmRleCA1ZTIzZTkzNDUyZGJmYzAyNDZjMjIyZTYxZmRi
ZjAwZjY5ZGQ1ZDcwLi4xZTFkMWYzMDIwZTJmODc5ZTFhZmY5NjM3YTQzMzJmYTljNmExNzllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY3Jv
bGxiYXJMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmNwcApAQCAtNzYsMTAgKzc2LDE1
IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCogbGF5ZXIpCiAKICAgICBzY3JvbGxiYXJMYXllci0+c2V0U2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKTsKIAotICAgIGlmIChtX2JhY2tncm91bmQgJiYg
bV9iYWNrZ3JvdW5kLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgc2Nyb2xsYmFy
TGF5ZXItPnNldEJhY2tncm91bmRUZXh0dXJlSWQobV9iYWNrZ3JvdW5kLT50ZXh0dXJlKCktPnRl
eHR1cmVJZCgpKTsKKyAgICBpZiAobV9iYWNrVHJhY2sgJiYgbV9iYWNrVHJhY2stPnRleHR1cmUo
KS0+aXNSZXNlcnZlZCgpKQorICAgICAgICBzY3JvbGxiYXJMYXllci0+c2V0QmFja1RyYWNrVGV4
dHVyZUlkKG1fYmFja1RyYWNrLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKICAgICBlbHNlCi0g
ICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRCYWNrZ3JvdW5kVGV4dHVyZUlkKDApOworICAgICAg
ICBzY3JvbGxiYXJMYXllci0+c2V0QmFja1RyYWNrVGV4dHVyZUlkKDApOworCisgICAgaWYgKG1f
Zm9yZVRyYWNrICYmIG1fZm9yZVRyYWNrLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkKKyAgICAg
ICAgc2Nyb2xsYmFyTGF5ZXItPnNldEZvcmVUcmFja1RleHR1cmVJZChtX2ZvcmVUcmFjay0+dGV4
dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXJMYXllci0+
c2V0Rm9yZVRyYWNrVGV4dHVyZUlkKDApOwogCiAgICAgaWYgKG1fdGh1bWIgJiYgbV90aHVtYi0+
dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpCiAgICAgICAgIHNjcm9sbGJhckxheWVyLT5zZXRUaHVt
YlRleHR1cmVJZChtX3RodW1iLT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKQEAgLTEwNiw5ICsx
MTEsOSBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQogY2xhc3MgU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIgOiBwdWJs
aWMgTGF5ZXJQYWludGVyQ2hyb21pdW0gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9s
bGJhckJhY2tncm91bmRQYWludGVyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxT
Y3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcj4gY3JlYXRlKFNjcm9sbGJhclRoZW1lQ2xpZW50KiBz
Y3JvbGxiYXIsIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0aGVtZSkKKyAgICBzdGF0aWMgUGFz
c093blB0cjxTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcj4gY3JlYXRlKFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0aGVtZSwgU2Nyb2xs
YmFyUGFydCB0cmFja1BhcnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNj
cm9sbGJhckJhY2tncm91bmRQYWludGVyKHNjcm9sbGJhciwgdGhlbWUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcihzY3JvbGxiYXIsIHRo
ZW1lLCB0cmFja1BhcnQpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoU2tDYW52
YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIEludFJlY3QmKSBPVkVSUklE
RQpAQCAtMTM4LDI2ICsxNDMsMjIgQEAgcHVibGljOgogICAgICAgICBtX3RoZW1lLT5wYWludFRy
YWNrQmFja2dyb3VuZCgmY29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKIAog
ICAgICAgICBib29sIHRodW1iUHJlc2VudCA9IG1fdGhlbWUtPmhhc1RodW1iKG1fc2Nyb2xsYmFy
KTsKLSAgICAgICAgaWYgKHRodW1iUHJlc2VudCkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZXJlJ3Mgbm8gInBhaW50IHRoZSB3aG9sZSB0cmFjayIgcGFydC4gRHJhd2luZyBib3RoIHRoZQot
ICAgICAgICAgICAgLy8gQmFja1RyYWNrUGFydCBhbmQgdGhlIEZvcndhcmRUcmFja1BhcnQgaW4g
dGhlaXIgc3BsaXRUcmFjayByZWN0cwotICAgICAgICAgICAgLy8gZW5kcyB1cCBsZWF2aW5nIGEg
ZGlzdGluY3RpdmUgbGluZS4gUGFpbnRpbmcgb25lIHBhcnQgYXMgdGhlCi0gICAgICAgICAgICAv
LyBlbnRpcmUgdHJhY2sgYXBwZWFycyB0byBiZSBpZGVudGljYWwgdG8gcGFpbnRpbmcgYm90aCBh
bmQKLSAgICAgICAgICAgIC8vIGNvdmVyaW5nIHVwIHRoZSBzcGxpdCBiZXR3ZWVuIHRoZW0gd2l0
aCB0aGUgdGh1bWIuCi0gICAgICAgICAgICBtX3RoZW1lLT5wYWludFRyYWNrUGllY2UoJmNvbnRl
eHQsIG1fc2Nyb2xsYmFyLCB0cmFja1BhaW50UmVjdCwgQmFja1RyYWNrUGFydCk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKHRodW1iUHJlc2VudCkKKyAgICAgICAgICAgIG1fdGhlbWUtPnBhaW50
VHJhY2tQaWVjZSgmY29udGV4dCwgbV9zY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0LCBtX3RyYWNr
UGFydCk7CiAKICAgICAgICAgbV90aGVtZS0+cGFpbnRUaWNrbWFya3MoJmNvbnRleHQsIG1fc2Ny
b2xsYmFyLCB0cmFja1BhaW50UmVjdCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBTY3JvbGxiYXJC
YWNrZ3JvdW5kUGFpbnRlcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZSogdGhlbWUpCisgICAgU2Nyb2xsYmFyQmFja2dyb3VuZFBhaW50ZXIo
U2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUq
IHRoZW1lLCBTY3JvbGxiYXJQYXJ0IHRyYWNrUGFydCkKICAgICAgICAgOiBtX3Njcm9sbGJhcihz
Y3JvbGxiYXIpCiAgICAgICAgICwgbV90aGVtZSh0aGVtZSkKKyAgICAgICAgLCBtX3RyYWNrUGFy
dCh0cmFja1BhcnQpCiAgICAgewogICAgIH0KIAogICAgIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBt
X3Njcm9sbGJhcjsKICAgICBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSogbV90aGVtZTsKKyAgICBT
Y3JvbGxiYXJQYXJ0IG1fdHJhY2tQYXJ0OwogfTsKIAogY2xhc3MgU2Nyb2xsYmFyVGh1bWJQYWlu
dGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKQEAgLTE5Myw4ICsxOTQsOCBAQCBw
cml2YXRlOgogdm9pZCBTY3JvbGxiYXJMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKICAgICBpZiAoIWhvc3QgfHwgaG9zdCAhPSBsYXllclRy
ZWVIb3N0KCkpIHsKLSAgICAgICAgbV9iYWNrZ3JvdW5kVXBkYXRlci5jbGVhcigpOwotICAgICAg
ICBtX2JhY2tncm91bmQuY2xlYXIoKTsKKyAgICAgICAgbV9iYWNrVHJhY2tVcGRhdGVyLmNsZWFy
KCk7CisgICAgICAgIG1fYmFja1RyYWNrLmNsZWFyKCk7CiAgICAgICAgIG1fdGh1bWJVcGRhdGVy
LmNsZWFyKCk7CiAgICAgICAgIG1fdGh1bWIuY2xlYXIoKTsKICAgICB9CkBAIC0yMDcsMTAgKzIw
OCwxOSBAQCB2b2lkIFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVy
SWZOZWVkZWQoKQogICAgIGJvb2wgdXNlTWFwU3ViSW1hZ2UgPSBsYXllclRyZWVIb3N0KCktPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1YjsKICAgICBtX3RleHR1cmVGb3Jt
YXQgPSBsYXllclRyZWVIb3N0KCktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4
dHVyZUZvcm1hdDsKIAotICAgIGlmICghbV9iYWNrZ3JvdW5kVXBkYXRlcikKLSAgICAgICAgbV9i
YWNrZ3JvdW5kVXBkYXRlciA9IEJpdG1hcENhbnZhc0xheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShTY3JvbGxiYXJCYWNrZ3JvdW5kUGFpbnRlcjo6Y3JlYXRlKG1fc2Nyb2xsYmFyLmdldCgpLCB0
aGVtZSgpKSwgdXNlTWFwU3ViSW1hZ2UpOwotICAgIGlmICghbV9iYWNrZ3JvdW5kKQotICAgICAg
ICBtX2JhY2tncm91bmQgPSBtX2JhY2tncm91bmRVcGRhdGVyLT5jcmVhdGVUZXh0dXJlKGxheWVy
VHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKKyAgICBpZiAoIW1fYmFja1Ry
YWNrVXBkYXRlcikKKyAgICAgICAgbV9iYWNrVHJhY2tVcGRhdGVyID0gQml0bWFwQ2FudmFzTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFNjcm9sbGJhckJhY2tncm91bmRQYWludGVyOjpjcmVh
dGUobV9zY3JvbGxiYXIuZ2V0KCksIHRoZW1lKCksIEJhY2tUcmFja1BhcnQpLCB1c2VNYXBTdWJJ
bWFnZSk7CisgICAgaWYgKCFtX2JhY2tUcmFjaykKKyAgICAgICAgbV9iYWNrVHJhY2sgPSBtX2Jh
Y2tUcmFja1VwZGF0ZXItPmNyZWF0ZVRleHR1cmUobGF5ZXJUcmVlSG9zdCgpLT5jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCkpOworCisgICAgLy8gT25seSBjcmVhdGUgdHdvLXBhcnQgdHJhY2sgaWYg
d2UgdGhpbmsgdGhlIHR3byBwYXJ0cyBjb3VsZCBiZSBkaWZmZXJlbnQgaW4gYXBwZWFyYW5jZS4K
KyAgICBpZiAobV9zY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgaWYg
KCFtX2ZvcmVUcmFja1VwZGF0ZXIpCisgICAgICAgICAgICBtX2ZvcmVUcmFja1VwZGF0ZXIgPSBC
aXRtYXBDYW52YXNMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoU2Nyb2xsYmFyQmFja2dyb3Vu
ZFBhaW50ZXI6OmNyZWF0ZShtX3Njcm9sbGJhci5nZXQoKSwgdGhlbWUoKSwgRm9yd2FyZFRyYWNr
UGFydCksIHVzZU1hcFN1YkltYWdlKTsKKyAgICAgICAgaWYgKCFtX2ZvcmVUcmFjaykKKyAgICAg
ICAgICAgIG1fZm9yZVRyYWNrID0gbV9mb3JlVHJhY2tVcGRhdGVyLT5jcmVhdGVUZXh0dXJlKGxh
eWVyVHJlZUhvc3QoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKKyAgICB9CisKIAogICAg
IGlmICghbV90aHVtYlVwZGF0ZXIpCiAgICAgICAgIG1fdGh1bWJVcGRhdGVyID0gQml0bWFwQ2Fu
dmFzTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKFNjcm9sbGJhclRodW1iUGFpbnRlcjo6Y3Jl
YXRlKG1fc2Nyb2xsYmFyLmdldCgpLCB0aGVtZSgpKSwgdXNlTWFwU3ViSW1hZ2UpOwpAQCAtMjUz
LDcgKzI2Myw5IEBAIHZvaWQgU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKENDVGV4dHVy
ZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2NjbHVzaW9uCiAKICAgICBJbnRQb2ludCBzY3Jv
bGxiYXJPcmlnaW4obV9zY3JvbGxiYXItPngoKSwgbV9zY3JvbGxiYXItPnkoKSk7CiAgICAgSW50
UmVjdCBjb250ZW50UmVjdChzY3JvbGxiYXJPcmlnaW4sIGNvbnRlbnRCb3VuZHMoKSk7Ci0gICAg
dXBkYXRlUGFydChtX2JhY2tncm91bmRVcGRhdGVyLmdldCgpLCBtX2JhY2tncm91bmQuZ2V0KCks
IGNvbnRlbnRSZWN0LCB1cGRhdGVyKTsKKyAgICB1cGRhdGVQYXJ0KG1fYmFja1RyYWNrVXBkYXRl
ci5nZXQoKSwgbV9iYWNrVHJhY2suZ2V0KCksIGNvbnRlbnRSZWN0LCB1cGRhdGVyKTsKKyAgICBp
ZiAobV9mb3JlVHJhY2sgJiYgbV9mb3JlVHJhY2tVcGRhdGVyKQorICAgICAgICB1cGRhdGVQYXJ0
KG1fZm9yZVRyYWNrVXBkYXRlci5nZXQoKSwgbV9mb3JlVHJhY2suZ2V0KCksIGNvbnRlbnRSZWN0
LCB1cGRhdGVyKTsKIAogICAgIC8vIENvbnNpZGVyIHRoZSB0aHVtYiB0byBiZSBhdCB0aGUgb3Jp
Z2luIHdoZW4gcGFpbnRpbmcuCiAgICAgSW50UmVjdCB0aHVtYlJlY3QgPSBJbnRSZWN0KEludFBv
aW50KCksIHRoZW1lKCktPnRodW1iUmVjdChtX3Njcm9sbGJhci5nZXQoKSkuc2l6ZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Njcm9s
bGJhckxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1Njcm9sbGJhckxheWVyQ2hyb21pdW0uaAppbmRleCBhZjIyMTViZDBhN2NmMjQ5ZTc0
MWRiNjRjNDAyMjhkNmM0YzNhYmY5Li4wMGEzOTJhNTYzMzczMjBlOTU1M2ExNjljOGQ0N2I3YTUw
YWMwNTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TY3JvbGxiYXJMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bS5oCkBAIC02NiwxMSAr
NjYsMTMgQEAgcHJpdmF0ZToKIAogICAgIEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKIAotICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX2JhY2tncm91bmRVcGRhdGVyOworICAgIFJl
ZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX2JhY2tUcmFja1VwZGF0ZXI7CisgICAgUmVmUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fZm9yZVRyYWNrVXBkYXRlcjsKICAgICBSZWZQdHI8TGF5
ZXJUZXh0dXJlVXBkYXRlcj4gbV90aHVtYlVwZGF0ZXI7CiAKICAgICAvLyBBbGwgdGhlIHBhcnRz
IG9mIHRoZSBzY3JvbGxiYXIgZXhjZXB0IHRoZSB0aHVtYgotICAgIE93blB0cjxMYXllclRleHR1
cmVVcGRhdGVyOjpUZXh0dXJlPiBtX2JhY2tncm91bmQ7CisgICAgT3duUHRyPExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRleHR1cmU+IG1fYmFja1RyYWNrOworICAgIE93blB0cjxMYXllclRleHR1cmVV
cGRhdGVyOjpUZXh0dXJlPiBtX2ZvcmVUcmFjazsKICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VGV4dHVyZT4gbV90aHVtYjsKIAogICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBtX3Nj
cm9sbGJhck92ZXJsYXlTdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xsYmFyTGF5ZXJJbXBs
LmNwcAppbmRleCBhMjJlZjVkMjY2NzlhZGJiNWViYjI2ZWViZDQ0MGRjOTVkMjQ3Yzk2Li5mMzhm
YmRhMDFmNjZlMzgwNjFkMTA2ZmJjMGJjMWMwNDM2MjgwMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTY3JvbGxiYXJMYXllckltcGwuY3BwCkBAIC00NSwxMSArNDUsMjMgQEAgQ0NTY3JvbGxiYXJM
YXllckltcGw6OkNDU2Nyb2xsYmFyTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBs
KGlkKQogICAgICwgbV9zY3JvbGxMYXllcigwKQogICAgICwgbV9zY3JvbGxiYXIodGhpcykKLSAg
ICAsIG1fYmFja2dyb3VuZFRleHR1cmVJZCgwKQorICAgICwgbV9iYWNrVHJhY2tUZXh0dXJlSWQo
MCkKKyAgICAsIG1fZm9yZVRyYWNrVGV4dHVyZUlkKDApCiAgICAgLCBtX3RodW1iVGV4dHVyZUlk
KDApCiB7CiB9CiAKK25hbWVzcGFjZSB7CisKK0Zsb2F0UmVjdCB0b1VWUmVjdChjb25zdCBJbnRS
ZWN0JiByLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpCit7CisgICAgQVNTRVJUKGJvdW5kcy5jb250
YWlucyhyKSk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChzdGF0aWNfY2FzdDxmbG9hdD4oci54KCkp
IC8gYm91bmRzLndpZHRoKCksIHN0YXRpY19jYXN0PGZsb2F0PihyLnkoKSkgLyBib3VuZHMuaGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oci53aWR0aCgp
KSAvIGJvdW5kcy53aWR0aCgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oci5oZWlnaHQoKSkgLyBib3Vu
ZHMuaGVpZ2h0KCkpOworfQorCit9CisKIHZvaWQgQ0NTY3JvbGxiYXJMYXllckltcGw6OmFwcGVu
ZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUsIGJvb2wmKQogewogICAgIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKiB0
aGVtZSA9IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKj4oU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkpOwpAQCAtNTcsMjQgKzY5LDMzIEBAIHZvaWQgQ0NTY3JvbGxiYXJMYXllcklt
cGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
CiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgcHJlbXVsdGlwbGVkQWxwaGEgPSBmYWxzZTsK
LSAgICBGbG9hdFJlY3QgdXZSZWN0KDAsIDAsIDEsIDEpOwogICAgIGJvb2wgZmxpcHBlZCA9IGZh
bHNlOworICAgIEZsb2F0UmVjdCB1dlJlY3QoMCwgMCwgMSwgMSk7CisgICAgSW50UmVjdCBib3Vu
ZHNSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CisKKyAgICBJbnRSZWN0IHRodW1i
UmVjdCwgYmFja1RyYWNrUmVjdCwgZm9yZVRyYWNrUmVjdDsKKyAgICB0aGVtZS0+c3BsaXRUcmFj
aygmbV9zY3JvbGxiYXIsIHRoZW1lLT50cmFja1JlY3QoJm1fc2Nyb2xsYmFyKSwgYmFja1RyYWNr
UmVjdCwgdGh1bWJSZWN0LCBmb3JlVHJhY2tSZWN0KTsKIAotICAgIEludFJlY3QgdGh1bWJSZWN0
ID0gdGhlbWUtPnRodW1iUmVjdCgmbV9zY3JvbGxiYXIpOwotICAgIHRodW1iUmVjdC5tb3ZlKC1t
X3Njcm9sbGJhci54KCksIC1tX3Njcm9sbGJhci55KCkpOwogICAgIGlmIChtX3RodW1iVGV4dHVy
ZUlkICYmIHRoZW1lLT5oYXNUaHVtYigmbV9zY3JvbGxiYXIpICYmICF0aHVtYlJlY3QuaXNFbXB0
eSgpKSB7CiAgICAgICAgIE93blB0cjxDQ1RleHR1cmVEcmF3UXVhZD4gcXVhZCA9IENDVGV4dHVy
ZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCB0aHVtYlJlY3QsIG1fdGh1bWJUZXh0
dXJlSWQsIHByZW11bHRpcGxlZEFscGhhLCB1dlJlY3QsIGZsaXBwZWQpOwogICAgICAgICBxdWFk
LT5zZXROZWVkc0JsZW5kaW5nKCk7CiAgICAgICAgIHF1YWRMaXN0LmFwcGVuZChxdWFkLnJlbGVh
c2UoKSk7CiAgICAgfQogCi0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlSWQpCisgICAgaWYg
KCFtX2JhY2tUcmFja1RleHR1cmVJZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBi
YWNrZ3JvdW5kUmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOwotICAgIHF1YWRMaXN0
LmFwcGVuZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgYmFja2dy
b3VuZFJlY3QsIG1fYmFja2dyb3VuZFRleHR1cmVJZCwgcHJlbXVsdGlwbGVkQWxwaGEsIHV2UmVj
dCwgZmxpcHBlZCkpOworICAgIC8vIFdlIG9ubHkgcGFpbnQgdGhlIHRyYWNrIGluIHR3byBwYXJ0
cyBpZiB3ZSB3ZXJlIGdpdmVuIGEgdGV4dHVyZSBmb3IgdGhlIGZvcndhcmQgdHJhY2sgcGFydC4K
KyAgICBpZiAobV9mb3JlVHJhY2tUZXh0dXJlSWQgJiYgIWZvcmVUcmFja1JlY3QuaXNFbXB0eSgp
KQorICAgICAgICBxdWFkTGlzdC5hcHBlbmQoQ0NUZXh0dXJlRHJhd1F1YWQ6OmNyZWF0ZShzaGFy
ZWRRdWFkU3RhdGUsIGZvcmVUcmFja1JlY3QsIG1fZm9yZVRyYWNrVGV4dHVyZUlkLCBwcmVtdWx0
aXBsZWRBbHBoYSwgdG9VVlJlY3QoZm9yZVRyYWNrUmVjdCwgYm91bmRzUmVjdCksIGZsaXBwZWQp
KTsKKworICAgIC8vIE9yZGVyIG1hdHRlcnMgaGVyZTogc2luY2UgdGhlIGJhY2sgdHJhY2sgdGV4
dHVyZSBpcyBiZWluZyBkcmF3biB0byB0aGUgZW50aXJlIGNvbnRlbnRzIHJlY3QsIHdlIG11c3Qg
YXBwZW5kIGl0IGFmdGVyIHRoZSB0aHVtYiBhbmQKKyAgICAvLyBmb3JlIHRyYWNrIHF1YWRzLiBU
aGUgYmFjayB0cmFjayB0ZXh0dXJlIGNvbnRhaW5zIChhbmQgZGlzcGxheXMpIHRoZSBidXR0b25z
LgorICAgIGlmICghYm91bmRzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHF1YWRMaXN0LmFwcGVu
ZChDQ1RleHR1cmVEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgYm91bmRzUmVjdCwg
bV9iYWNrVHJhY2tUZXh0dXJlSWQsIHByZW11bHRpcGxlZEFscGhhLCB1dlJlY3QsIGZsaXBwZWQp
KTsKIH0KIAorCiBpbnQgQ0NTY3JvbGxiYXJMYXllckltcGw6OkNDU2Nyb2xsYmFyOjp4KCkgY29u
c3QKIHsKICAgICByZXR1cm4gZnJhbWVSZWN0KCkueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxiYXJMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2Nyb2xs
YmFyTGF5ZXJJbXBsLmgKaW5kZXggOThkNTUzNDQ2NGIzOTc5NWJlMDZiOGQzMGU1OWUzNzYzMjNm
YjMwNy4uNDdjNjc2OTNiZmYxYjNlZTFmZWQxMWFmMmQ1NWMyYjY4NmM3MThhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTY3JvbGxi
YXJMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oCkBAIC01NCw3ICs1NCw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9lbmFibGVkID0gZW5hYmxl
ZDsgfQogCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kVGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1f
YmFja2dyb3VuZFRleHR1cmVJZCA9IGlkOyB9CisgICAgdm9pZCBzZXRCYWNrVHJhY2tUZXh0dXJl
SWQodW5zaWduZWQgaWQpIHsgbV9iYWNrVHJhY2tUZXh0dXJlSWQgPSBpZDsgfQorICAgIHZvaWQg
c2V0Rm9yZVRyYWNrVGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fZm9yZVRyYWNrVGV4dHVyZUlk
ID0gaWQ7IH0KICAgICB2b2lkIHNldFRodW1iVGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGh1
bWJUZXh0dXJlSWQgPSBpZDsgfQogCiAgICAgQ0NMYXllckltcGwqIHNjcm9sbExheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxMYXllcjsgfQpAQCAtMTI0LDcgKzEyNSw4IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICBDQ1Njcm9sbGJhciBtX3Njcm9sbGJhcjsKIAotICAgIHVuc2lnbmVkIG1f
YmFja2dyb3VuZFRleHR1cmVJZDsKKyAgICB1bnNpZ25lZCBtX2JhY2tUcmFja1RleHR1cmVJZDsK
KyAgICB1bnNpZ25lZCBtX2ZvcmVUcmFja1RleHR1cmVJZDsKICAgICB1bnNpZ25lZCBtX3RodW1i
VGV4dHVyZUlkOwogCiAgICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIG1fc2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDE3NjQ3YjMzNTJlZTlmOTVjM2U4MmMxYTk3ODJiOGE1ZWViMDU4ZTEu
LjRmNjYyYTA5YzAxNDZhNGU0NTJmNTg0ZmJlYzdmNGZlODExNmMyMmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMi0wNi0yNyAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBTY3JvbGxiYXJMYXllckNocm9taXVtIHNob3Vs
ZCBzdXBwb3J0IHBhaW50aW5nIGZvcndhcmQtdHJhY2sgYW5kIGJhY2stdHJhY2sgaW4gZGlmZmVy
ZW50IHN0eWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg5OTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkcyBzdXBwb3J0IGZvciBhY2NlbGVyYXRlZCBkcmF3aW5nIChpbXBsIHRocmVhZCkgb2Yg
c2Nyb2xsYmFycyB3aXRoIGRpZmZlcmVudCBzdHlsZXMgZm9yIHRoZQorICAgICAgICBmb3J3YXJk
LXRyYWNrIGFuZCBiYWNrLXRyYWNrIHBhcnRzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRlZC1kaWZmZXJlbnQtdHJh
Y2stcGFydHMtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFj
ay1wYXJ0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L2NvbXBvc2l0aW5nL3Njcm9sbGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQtZGlmZmVyZW50LXRyYWNr
LXBhcnRzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA2LTI3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZWJhc2VsaW5lIHN2Zy90ZXh0L3NjYWxl
ZC1mb250LnN2ZyBhbmQgc3ZnL3RleHQvc2NhbGluZy1mb250LXdpdGgtZ2VvbWV0cmljLXByZWNp
c2lvbi5odG1sIGNhdXNlZCBieSByMTIxMzQzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRlZC1k
aWZmZXJlbnQtdHJhY2stcGFydHMtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vY29tcG9zaXRpbmcvc2Nyb2xsYmFycy9jdXN0b20tY29tcG9zaXRlZC1kaWZmZXJl
bnQtdHJhY2stcGFydHMtZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxYzJlMTRlMGYyYjZjM2U0
OWM2YjRjMGU5MTg2OGI3ZTI0M2Q2ODQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDMyMDAKemNt
ZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/
b1RuMUFeCnpnQ3Z1cjZ5cWNWZ0glSWZPUzd+VE9MTWJTXkpEfCNHe2ZaTilUQVlmcEpmO3JjIVdH
JTk3OEpSeXVJcmZxfiQ1JQp6NU9eeFZIMihWSyQ/eE5Hekowbm9AIUp5ZCQraWJwRy1gOypoSTJv
aCg+V3RCaTckVzhzK1A+MmpmQE5yUiVCTEgKejg9Qj4+VXZ+Q0tQVWBRcShhYTEjSGE/czE+JTta
UilMVDhmLWBeSHRJRkt0NCFOOU93X1Qxe2U3fGpnfjNgdERmCnozPF8jTWhUbSp8NCF4YTAzNSpP
IVNpfjN7ZTFNRU8mcU5kJTQkTU8xKjQjOF5JSDJAZkAhRnApemlscEMjbXFidwp6VmZDSmdWTXBa
ZCU8WEBZd3NTQmQlIUNfMDJwSFI5dEN7NnptdERSVXtvcXZaQHtRbGI3PE5SZDBmUztBX3VQY0gK
ekdZdm44b15mYVZrcCZWbFktRDgrNUZUWD14akArWF9MajZvK0FaSmdkfCswe2ZraUdQdktqdVYz
K3BnNiVzOVpyCnooN3tQbCN0b0JXNSFMKCo0QWIrWT5RLV8+dmwyV3tqV1VvK245PE19NEdsPExH
bnhgY1FeRWtHZ2wqYVIzPTl3MAp6WE95TUs8VFE7fGAoKEMjSFVlOXAte2NxPV56TkRMe2Q7SDYq
Ml8wKWM1Vjg1WiFJSWtwTzlqWSs4P2o/N0AxOXUKelpoPHRkM1R7MnpeWGtNQFNpMkx7Rzw+ay1Y
VWxfMCtOPztHPCQrODtLXy1TWnAzcXpZPChgfnclZ21zJk5qfllVCnp8TCpnfll4JT9HKSZJUzx8
SlVETnlYcnNJKWM/UEVZWEFRflV6aCVWY0ZMeEF8TWghSjEpPENDLW0tcGglNFRvdAp6I2ZkKj1o
RUpRUGNxaGx+SHxNb0spOEY1RmFyZX1wYDN3eH00KTVNJHhufU8pUTtEKiYmbjFCXmdCeTIwRE9x
cDcKejMtcnkrUHJIa3MtI2MhNjVaWSRBYXJaaiFhZ2d9Pz4oPm8rZkJtQE4mY0JuSFZVMEo/amRQ
Njd7Z1RqRyZjV0NhCnp7azVqdlVSUWckSndKYz8tcCM9SnpoTHBYKjxOIzxLXn5jLSNLTXF3PD8q
TkI3SllyRjxtUD5eKUU8QDxmNiM0bgp6LXhuYW9ATDwqKF91elV0eG9gZnY/ZjMwQGxPRU5zbyZK
O21edyhMfHtkSFh2Zm41cClQZ2cmZWJ4c0xRMDR8TDcKQWZkQnZpCgpsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3Np
dGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFjay1wYXJ0cy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9jb21wb3NpdGluZy9z
Y3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFjay1wYXJ0cy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGIxMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2JkZWQwOGJk
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBv
c2l0aW5nL3Njcm9sbGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQtZGlmZmVyZW50LXRyYWNrLXBhcnRz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL3Njcm9sbGJhcnMvY3VzdG9tLWNvbXBvc2l0ZWQt
ZGlmZmVyZW50LXRyYWNrLXBhcnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFj
ay1wYXJ0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3Mzg1ZDk4OGEwNDI4NTA4YWUyZWVjNjg2OGM5OTA1
MmFhZDE3MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9jb21wb3NpdGluZy9zY3JvbGxiYXJzL2N1c3RvbS1jb21wb3NpdGVkLWRpZmZlcmVudC10cmFj
ay1wYXJ0cy5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Q29t
cG9zaXRlZCBTY3JvbGxiYXJzOiBkaWZmZXJlbnQgdHJhY2sgcGFydCBjb2xvdXJzLjwvdGl0bGU+
Cis8c3R5bGU+Cis6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKKyAgICB3aWR0aDogMTVweDsKKyAgICBo
ZWlnaHQ6IDE1cHg7Cit9Cis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjp2ZXJ0aWNhbDpzdGFy
dCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgIGJvcmRlcjogMXB4IGRhc2hlZCBi
bHVlOworfQorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246dmVydGljYWw6ZW5kIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZWQ7Cit9Cis6
Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOnN0YXJ0IHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBwdXJwbGU7Cit9Cis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlOmVuZCB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47Cit9IAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0
b246c3RhcnQ6ZGVjcmVtZW50LAorOjotd2Via2l0LXNjcm9sbGJhci1idXR0b246ZW5kOmluY3Jl
bWVudCB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9Cis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1i
IHsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworfQor
Ojotd2Via2l0LXNjcm9sbGJhci1idXR0b246aG9yaXpvbnRhbDpzdGFydCB7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogY3lhbjsKKyAgICBib3JkZXI6IDFweCBkYXNoZWQgYnJvd247Cit9Cis6Oi13
ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbjpob3Jpem9udGFsOmVuZCB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogYnJvd247CisgICAgYm9yZGVyOiAxcHggZGFzaGVkIGN5YW47Cit9Cis8L3N0eWxlPgor
PHNjcmlwdD4KKyAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICB3aW5kb3cuaW50ZXJuYWxz
LnNldHRpbmdzLnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChmYWxzZSk7CisgIH0KKyAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgd2luZG93LnRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQodHJ1ZSk7IC8vIFRoaXMgaXMgb25s
eSB1c2VmdWwgYXMgYSBwaXhlbCB0ZXN0LgorICB9CisKKyAgZnVuY3Rpb24gZG9UZXN0KCkKKyAg
eworICAgIHdpbmRvdy5zY3JvbGxUbyg0MDAsMzAwKTsKKyAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB3aW5k
b3cudGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICB9CisgICAgfSwgMCk7CisgIH0KKwor
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGRvVGVzdCwgZmFsc2UpOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgc3R5bGU9IndpZHRoOiAxNjAwcHg7IGhlaWdodDog
MTAwMHB4OyAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsiPgorPC9kaXY+Cis8ZGl2
IHN0eWxlPSJwb3NpdGlvbiA6IGFic29sdXRlOyBsZWZ0IDogNDUwOyB0b3AgOiAzNTA7IHdpZHRo
IDogMjAwcHg7IGhlaWdodCA6IDEwMHB4OyBib3JkZXItc3R5bGUgOiBzb2xpZDsgYm9yZGVyLWNv
bG9yIDogZ3JlZW47IGJvcmRlci13aWR0aCA6IDJweCI+Cis8IS0tLQorPGgyPkNvbXBvc2l0ZWQg
Q3VzdG9tIFNjcm9sbGJhcnMgd2l0aCBEaWZmZXJlbnQgQ29sb3VyZWQgVHJhY2sgUGFydHM8L2gy
PgorSWYgdGhpcyB0ZXN0IHN1Y2NlZWRzLCB0aGUgdHJhY2sgcGFydCBiZWZvcmUgdGhlIHRodW1i
IHdpbGwgYmUgcHVycGxlLCBhbmQgdGhlIHRyYWNrIHBhcnQgYWZ0ZXIKK3RoZSB0aHVtYiB3aWxs
IGJlIGdyZWVuLiBBbGwgZm91ciBidXR0b24gcmVjdHMgd2lsbCBoYXZlIGRpZmZlcmVudCBjb2xv
dXJzLgorCitUaGUgZGl2IGJvcmRlciBzaG91bGQgYmUgaW4gdGhlIHRvcC1sZWZ0IGFyZWEgb2Yg
dGhlIHdpbmRvdy4KKy0tLT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>