<?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>19663</bug_id>
          
          <creation_ts>2008-06-18 17:08:21 -0700</creation_ts>
          <short_desc>Image animation timers do not account for paint lag</short_desc>
          <delta_ts>2009-06-16 13:56:21 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14976</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>83803</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-18 17:08:21 -0700</bug_when>
    <thetext>BitmapImage.cpp handles image animation using a startAnimation() function, which sets a timer to call advanceAnimation() after the current frame has been visible for its desired delay time.  advanceAnimation() does NOT call startAnimation() again; instead, it expects the image drawing functions to call this back when the image actually draws.  This prevents images in background tabs from animating and eating CPU.

However, this produces a problem.  Consider an animation which tries to run at 16 FPS (= 62.5 ms per frame).  If the average latency between advanceAnimation() finishing and the drawing functions calling back to startAnimation() is 5 ms, then the actual time between successive frames becomes 67.5 ms, or 14.8 FPS.  While this is not a huge difference, for sites which sync sounds and images (e.g. ytmnd.com), this can lead to images getting slowly out of sync over time.

A bigger problem is what happens if for some reason the drawing lag spikes briefly (say, because the system load spikes).  If drawing takes 80 ms instead of 5 in one of these frames, users will see a noticeable hitch.

There are two possible solutions.  advanceAnimation() could call startAnimation() directly, which would be the most accurate method.  This would mean images would animate in all tabs, which means the aforementioned ytmnd.com tabs wouldn&apos;t get out of sync if users switched tabs and switched back, but also means the browser would potentially use more CPU.  I don&apos;t think this solution is a good idea without a lot of other motivation to change the current behavior.

The second solution is to simply subtract off the paint delay when setting the timer for the next call to advanceAnimation().  Except in cases where the paint delay exceeds the desired frame duration (rare), this makes the image&apos;s effective animation speed match its desired speed, modulo timer inaccuracy.  The actual onscreen periods for each frame would lag the &quot;real&quot; animation times by one paint delay interval, which is probably fine.

Patch to do this coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83805</commentid>
    <comment_count>1</comment_count>
      <attachid>21826</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-18 17:25:40 -0700</bug_when>
    <thetext>Created attachment 21826
patch v1

Patch to fix.  This does not account for timer inaccuracy, just paint latency.  We could probably account for timer inaccuracy too by changing the local variable to hold the system time at which we expected to get our next startAnimation() callback, and then using the difference in expected and actual times as the offset to the delay.  It&apos;s not clear to me whether that&apos;s a big deal.  I&apos;m happy to do it if it would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83806</commentid>
    <comment_count>2</comment_count>
      <attachid>21826</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-18 17:41:57 -0700</bug_when>
    <thetext>Comment on attachment 21826
patch v1

Meh, I&apos;m liking the patch that takes timer lag into account too more and more.  Let me whip that up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83808</commentid>
    <comment_count>3</comment_count>
      <attachid>21826</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-18 17:56:17 -0700</bug_when>
    <thetext>Comment on attachment 21826
patch v1

Do we want to skip frames too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83809</commentid>
    <comment_count>4</comment_count>
      <attachid>21827</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-18 18:04:41 -0700</bug_when>
    <thetext>Created attachment 21827
patch v2

This patch accounts for both paint lag and timer slop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83835</commentid>
    <comment_count>5</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-18 22:10:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 21826 [edit])
&gt; Do we want to skip frames too?

Maybe.  I have an idea on how I can do everything &quot;right&quot; without using CPU while the image is in the background tab or something.  Let me try tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84019</commentid>
    <comment_count>6</comment_count>
      <attachid>21864</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-20 17:16:19 -0700</bug_when>
    <thetext>Created attachment 21864
patch v3

New patch.

This not only accounts for paint and timer lag, but skips frames as needed, and in general deals with the case of &quot;hidden&quot; animated images.  Now you can switch tabs and switch back and the image will sync to the proper place.

There are four caveats with this patch:

(1) Because we keep adding small values as doubles to calculate the desired time for something to happen, I&apos;m concerned this can suffer from floating point roundoff error.  That said, the values are generally in the range of 0.05 or higher, and we should be able to add a lot of these for a long time before we find errors.  I think.  (My memory of how roundoff errors accumulate here is weak.)

(2) This may need a conditional for when we are _way_ late on an animation frame, in order to avoid doing excessive work when the user doesn&apos;t care.  If a user has a hidden animation for 14 hours, and switches back, we&apos;re going to iterate through 14 hours&apos; worth of frames.  Even though we&apos;re not doing any drawing or decoding in this process, it&apos;s still a lot of iterations.  Perhaps we can say that once the frame is 5 minutes late, the user doesn&apos;t care about resyncing.  That should be conservative and still fast enough to have no noticeable impact.

(3) In the case where we want to change immediately, I do it synchronously instead of setting a 0-wait timer.  This means the observers can get notified of a change synchronously here.  I don&apos;t know if this is problematic.

(3) I moved startAnimation() calls in the various backends so that in the case where we&apos;re skipping frames and need to immediately change the current frame, we get the right frame before grabbing its bits to draw.  This reduces a weird jumpy effect where you switch back to a tab and it draws the old frame and then immediately a new frame.  However, as with (3), this means image observers can get notified of the image changing, synchronously, before we actually draw the image.  Again, I don&apos;t know how problematic this is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84158</commentid>
    <comment_count>7</comment_count>
      <attachid>21864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 10:55:22 -0700</bug_when>
    <thetext>Comment on attachment 21864
patch v3

The approach looks good.

Needs a ChangeLog; I&apos;d have to say review- just because of that.

I&apos;m concerned, as you are, that the loop in BitmapImage::startAnimation can run for a long time. Is there any way for us to prevent pathologically slow case there?

+            nextFrame = (++nextFrame) % frameCount();

Modifying nextFrame on the right side and the left is not legal C, and can have undefined behavior depending on the compiler. The right side must say &quot;nextFrame + 1&quot; rather than &quot;++nextFrame&quot;.

review- just because of this ++nextFrame issue, but this looks about ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84166</commentid>
    <comment_count>8</comment_count>
      <attachid>21886</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-23 11:43:23 -0700</bug_when>
    <thetext>Created attachment 21886
patch v4

Yep, I noticed the missing ChangeLog about an hour ago, oops.

Here&apos;s a new version that fixes the ++nextFrame issue (nice catch!), and resets the timings if the frame is more than five minutes behind.

There is one other consideration with this patch, which is what images should do which take longer to initially load than they do to actually loop.  The current behavior, which matches the old behavior, is that the image only &quot;tries to keep up&quot; once it&apos;s fully loaded; before then, the early return in startAnimation() makes us ignore the frame load times.

I could change this to make the reference point for animation start be the very first draw of the image.  The effect would be that pages which want to sync images and other resources would get &quot;better&quot; behavior, but users would see a strange effect where the image would load, and then jump partway into its next animation cycle.  I think this is probably too weird and the current behavior is better, but comments welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84180</commentid>
    <comment_count>9</comment_count>
      <attachid>21886</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 13:26:41 -0700</bug_when>
    <thetext>Comment on attachment 21886
patch v4

+    double currentDuration = frameDurationAtIndex(m_currentFrame);
+    const double time = currentTime();

It&apos;s OK to use const to emphasize that a local variable won&apos;t be changed, but we rarely do that in WebKit code. It&apos;s a little strange to do it for &quot;time&quot; and not for &quot;currentDuration&quot; since neither is intended to change.

I suggest just leaving it out.

r=me as-is, although I&apos;d take out that const if I was landing the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84181</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-23 13:28:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; There is one other consideration with this patch, which is what images should
&gt; do which take longer to initially load than they do to actually loop.  The
&gt; current behavior, which matches the old behavior, is that the image only &quot;tries
&gt; to keep up&quot; once it&apos;s fully loaded; before then, the early return in
&gt; startAnimation() makes us ignore the frame load times.
&gt; 
&gt; I could change this to make the reference point for animation start be the very
&gt; first draw of the image.  The effect would be that pages which want to sync
&gt; images and other resources would get &quot;better&quot; behavior, but users would see a
&gt; strange effect where the image would load, and then jump partway into its next
&gt; animation cycle.  I think this is probably too weird and the current behavior
&gt; is better, but comments welcome.

I&apos;d like to know what Hyatt thinks.

For compatibility, one question is what other browsers do.

Since you can detect load time for an image due to the load event, I think the behavior in the patch is good.

For the future, we need to come up with a way to synchronize:

    - animated GIFs
    - SVG animation
    - CSS animation
    - &lt;video&gt;
    - &lt;audio&gt;

Some good default behavior perhaps, along with some new features to design synchronization points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84184</commentid>
    <comment_count>11</comment_count>
      <attachid>21886</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-06-23 13:45:58 -0700</bug_when>
    <thetext>Comment on attachment 21886
patch v4

+        // If we&apos;re more than five minutes behind, the user probably doesn&apos;t
+        // care about resyncing and we could burn a lot of time looping through
+        // frames below.  Just reset the timings.
+        if ((time - m_desiredFrameStartTime) &gt; (5 * 60))

Could you make the (5 * 60) into a defined constant (maybe put it up with some of the other constants), e.g., cAnimationResyncThreshold.

I like the move of startAnimation().  That makes draw() consistent with drawTiled().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84219</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-06-23 22:23:56 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 21886 [edit])
&gt; +    double currentDuration = frameDurationAtIndex(m_currentFrame);
&gt; +    const double time = currentTime();
&gt; 
&gt; It&apos;s OK to use const to emphasize that a local variable won&apos;t be changed, but
&gt; we rarely do that in WebKit code. It&apos;s a little strange to do it for &quot;time&quot; and
&gt; not for &quot;currentDuration&quot; since neither is intended to change.

Whoops.  My personal style is normally to use it all the time, but I also missed it on nextFrameStartTime.  Both of these are artifacts of my rewriting this code about 6 different ways in trying to make this most recent patch.  I&apos;ll make them all consistent in some way.

(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; There is one other consideration with this patch, which is what images should
&gt; &gt; do which take longer to initially load than they do to actually loop.
&gt;
&gt; For compatibility, one question is what other browsers do.

Other browsers follow the current behavior: animations will always restart at the beginning once fully loaded, not jump randomly into the middle of the animation.

Another downside of the &quot;sync to the original load start, not once loading finishes&quot; plan is that for animations with a finite loop count, users will potentially no longer see the animation loop the specified number of times.

&gt; Since you can detect load time for an image due to the load event, I think the
&gt; behavior in the patch is good.

Yes, it&apos;s a little harder for a naive web coder to use for synchronizing, but actually _easier_ for a good web programmer.  I think.

(In reply to comment #11)
&gt; Could you make the (5 * 60) into a defined constant (maybe put it up with some
&gt; of the other constants), e.g., cAnimationResyncThreshold.

Sure, will do.

&gt; I like the move of startAnimation().  That makes draw() consistent with
&gt; drawTiled().

Sorry, but what does &quot;the move of&quot; mean in this sentence?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87049</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-07-26 22:54:26 -0700</bug_when>
    <thetext>Peter, were you going to upload a new version of the patch to address the review comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87092</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-07-27 16:46:48 -0700</bug_when>
    <thetext>Yes, sorry; this got lost behind other stuff, I&apos;ll try and post a new version this week.  I think regarding the question of when the reference point for animation be, I should leave it like it is rather than making it be the very first draw of the image.  The effects of the other seem bad to me.

I never did figure out what &quot;the move of startAnimation()&quot; meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87909</commentid>
    <comment_count>15</comment_count>
      <attachid>22667</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-08-05 17:16:17 -0700</bug_when>
    <thetext>Created attachment 22667
patch v5

This fixes the couple of nits above and un-rots the patch.

My checkout is having some strange problems right now and I haven&apos;t been able to compile + test this version.  The changes over the last version are very tiny, so I don&apos;t think there should be any problem, but I suggest anyone landing this smoketest the build first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89093</commentid>
    <comment_count>16</comment_count>
      <attachid>22667</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 02:05:45 -0700</bug_when>
    <thetext>Comment on attachment 22667
patch v5

This is really for hyatt or darin to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89581</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 18:09:06 -0700</bug_when>
    <thetext>Hyatt, Darin, ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89586</commentid>
    <comment_count>18</comment_count>
      <attachid>22667</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-08-27 18:29:21 -0700</bug_when>
    <thetext>Comment on attachment 22667
patch v5

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90080</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-03 16:34:49 -0700</bug_when>
    <thetext>Landed in r36069.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92215</commentid>
    <comment_count>20</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-09-22 15:01:08 -0700</bug_when>
    <thetext>This patch was reverted in r36781 after causing too many problems.

Here&apos;s the list Hyatt and I came up with on IRC of what we want to see:
(1) The original patch here
(2) Fix animations not starting on CG (the patch on bug 20745)
(3) Fix images falsely considered to be &quot;animating&quot; (the patch on bug 20945)
(4) Fix perf regression by making resetAnimation() also reset the frame start time, so we don&apos;t &quot;catch up&quot; after a reset
(5) Fix excess CPU usage during &quot;catch up&quot; by throwing away only framebuffers, not all frame metadata, when discarding frames for &quot;large&quot; images (was already something of a problem, this patch just made it more obvious)
(6) Figure out why, at least on CG, the &quot;catch up&quot; code can fail: image observers seem to be notified but draw() isn&apos;t called again.  Try reproducing by loading http://castle104.com/images/spinner.gif and resizing the window a bit.
(7) Don&apos;t advance animations until the next frame is complete (prevents flash/flicker; this was already an issue)
(8) Animations that are only referenced by the bfcache should be paused

Hyatt says he knows how to do (8) and that it doesn&apos;t have to be fixed before landing.  I don&apos;t know how to address (6) and hope for his help there.  For the other issues, I can file some separate followup bugs and write new patches on this bug as appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92216</commentid>
    <comment_count>21</comment_count>
      <attachid>22667</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-09-22 15:01:42 -0700</bug_when>
    <thetext>Comment on attachment 22667
patch v5

Clearing r+ so no one lands this again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92609</commentid>
    <comment_count>22</comment_count>
      <attachid>23768</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-09-24 15:30:47 -0700</bug_when>
    <thetext>Created attachment 23768
WIP patch, solves (1) - (4)

This patch rolls up the patches for problems (1) - (4) (from this bug, the other linked bugs, and my own comments on IRC).  I&apos;ll start tackling some of the other problems on the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92818</commentid>
    <comment_count>23</comment_count>
      <attachid>23826</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-09-25 15:55:48 -0700</bug_when>
    <thetext>Created attachment 23826
WIP patch, solves (1) - (4), (6), (7)

This addresses (6) and (7).  The reason we weren&apos;t advancing when the catch-up code ran is because we&apos;d clear the dirty rect we&apos;d just set, and then no timer would be running and no rect would be dirty, so nothing would happen again.

While fixing this, I encountered another issue: on large images, such as http://img2.abload.de/img/almost_failedovs.gif , the decode time in the catch-up code can become significant, and cause us to continue to fall behind.  So my first attempt at a patch for (6) caused an infinite loop.  In this patch, we detect when our attempts to catch up have failed, and fall back to setting a zero-delay timeout, which is about as good as I can do.

This can&apos;t yet be checked in; (5) has to be solved, as with this patch as-is, CPU usage on big images like the one above is astronomical.  By the end of that GIF I&apos;m pegging one of my cores and still can&apos;t keep up, as opposed to the old code, which animates while only using about 40% of one core, max.  In addition to implementing (5), I&apos;d like to also not throw away the framebuffer for the current frame when we discard the other framebuffers; right now we throw it away and immediately redecode it.  Implementing both these ideas will hopefully result in minimal, if any, CPU hit from this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92965</commentid>
    <comment_count>24</comment_count>
      <attachid>23857</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-09-26 13:53:08 -0700</bug_when>
    <thetext>Created attachment 23857
patch for (1) - (7), v1

OK, this is ready for review.

The last WIP patch had some bugs that caused animations to erroneously skip frames and run too fast, oops.

With this patch, animated images use more CPU than on stock Safari 3.1 (though much less than in the previous WIP patch).  However, I think most of this extra CPU usage is due to animating at the correct speed, instead of noticeably slower.  For example, on http://img2.abload.de/img/almost_failedovs.gif on my machine, a loop now peaks (near the end) at about 33% CPU instead of 19%.  But the loop also runs in about 11.5 seconds versus 16.7 (not very precise hand timings, probably only accurate to about 0.3 seconds).  Thus we use about 3/2 the CPU to run in 2/3 the time.  So I don&apos;t think this patch is making things less efficient per frame than before, we&apos;re just running a much larger number of frames per second on images that take significant decoding time per-frame.

To check the accuracy versus IE (whose frame delay time limits we&apos;re imitating), try loading http://stevesfishingsupplies.com/AboutSteve/Turning_Lady.gif in IE and WebKit at roughly the same time, side-by-side, and watching over time for whether they stay in sync.  Without this patch, Safari falls behind fairly quickly, whereas with it the two stay pretty well locked together, including when we switch tabs for a while and switch back.

I think this can be checked in without solving (8), which I&apos;m still hoping for hyatt to do separately.  Incidentally, I also think the CG GIF decoder could use dramatically less CPU-- Firefox 3 manages to animate http://img2.abload.de/img/almost_failedovs.gif using an order of magnitude less CPU than Safari.  But that&apos;s someone else&apos;s problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93474</commentid>
    <comment_count>25</comment_count>
      <attachid>23857</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-30 17:31:07 -0700</bug_when>
    <thetext>Comment on attachment 23857
patch for (1) - (7), v1

Hyatt is the man you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95101</commentid>
    <comment_count>26</comment_count>
      <attachid>21886</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-12 16:48:21 -0700</bug_when>
    <thetext>Comment on attachment 21886
patch v4

Clear review on this old version of the patch so it won&apos;t show up in the &quot;reviewed and needs commit&quot; queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95239</commentid>
    <comment_count>27</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-10-13 18:49:50 -0700</bug_when>
    <thetext>Perf. results look fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95421</commentid>
    <comment_count>28</comment_count>
      <attachid>23857</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-15 11:46:35 -0700</bug_when>
    <thetext>Comment on attachment 23857
patch for (1) - (7), v1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95442</commentid>
    <comment_count>29</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2008-10-15 13:40:34 -0700</bug_when>
    <thetext>Committed in r37612.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104189</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-02 16:22:03 -0800</bug_when>
    <thetext>Caused bug 23082?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126281</commentid>
    <comment_count>31</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-16 13:56:21 -0700</bug_when>
    <thetext>*** Bug 14976 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21826</attachid>
            <date>2008-06-18 17:25:40 -0700</date>
            <delta_ts>2008-06-18 18:04:41 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4137</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDY1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMDYtMTggIFBldGVyIEthc3RpbmcgIDx6ZXJvZHB4QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjMKKyAgICAgICAgQWNj
b3VudCBmb3IgcGFpbnQgbGFnIHdoZW4gYW5pbWF0aW5nIGltYWdlcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Rh
cnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmFkdmFuY2VBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisKIDIw
MDgtMDYtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhIHNjcmlwdCBidWlsZCBwaGFzZSB0byByZW1vdmUgdGhlIFdlYktpdC5xcmMgZmlsZSBm
cm9tCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2
aXNpb24gMzQ2NTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkltYWdlT2JzZXJ2
ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDgsNiArNDks
NyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogCiAgICAgLCBtX2Zy
YW1lVGltZXIoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KDApCiAgICAgLCBtX3JlcGV0aXRp
b25zQ29tcGxldGUoMCkKKyAgICAsIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZSgwKQogICAgICwg
bV9pc1NvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2FuaW1hdGluZ0ltYWdlVHlwZSh0cnVlKQog
ICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkKQEAgLTIzMiw4ICsyMzQsMjEgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oKQogICAgIGlmICghbV9hbGxEYXRhUmVjZWl2
ZWQgJiYgbV9yZXBldGl0aW9uQ291bnQgPT0gY0FuaW1hdGlvbkxvb3BPbmNlICYmIG1fY3VycmVu
dEZyYW1lID49IChmcmFtZUNvdW50KCkgLSAxKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8g
Q2FsY3VsYXRlIGRlc2lyZWQgZGVsYXkuICBmcmFtZUR1cmF0aW9uQXRJbmRleCgpIHRlbGxzIHVz
IGhvdyBsb25nIHRoZQorICAgIC8vIGN1cnJlbnQgZnJhbWUgd2FudHMgdG8gYmUgdmlzaWJsZS4g
IFJlZHVjZSB0aGlzIGJ5IHRoZSBhbW91bnQgb2YgdGltZQorICAgIC8vIHdlJ3ZlIHNwZW50IGRy
YXdpbmcgc2luY2Ugd2UgYWR2YW5jZWQgdG8gdGhpcyBmcmFtZSwgc28gdGhhdCB0aGUKKyAgICAv
LyBhbmltYXRpb24gYXBwZWFycyB0byBydW4gYXQgdGhlIGNvcnJlY3QgZnJhbWVyYXRlIHJlZ2Fy
ZGxlc3Mgb2YgZHJhd2luZworICAgIC8vIGxhZy4gIChJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBk
cmF3aW5nIGxhZyBmb3IgdGhlIG5leHQgZnJhbWUgd2lsbCBiZQorICAgIC8vIHNpbWlsYXIsIGFu
ZCB0aHVzIHRoZSBmcmFtZSB3aWxsIGFjdHVhbGx5IGJlIHZpc2libGUgZm9yIGFsbW9zdCB0aGUg
ZXhhY3QKKyAgICAvLyBzYW1lIGFtb3VudCBvZiB0aW1lIGl0IHJlcXVlc3RzIHRvIGJlIHZpc2li
bGUuKQorICAgIGRvdWJsZSBkZWxheSA9IGZyYW1lRHVyYXRpb25BdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKKyAgICBpZiAobV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lICE9IDApCisgICAgICBkZWxh
eSAtPSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZSk7CisgICAgaWYg
KGRlbGF5IDwgMCkKKyAgICAgIGRlbGF5ID0gMDsKKwogICAgIG1fZnJhbWVUaW1lciA9IG5ldyBU
aW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsK
LSAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChmcmFtZUR1cmF0aW9uQXRJbmRleChtX2N1
cnJlbnRGcmFtZSkpOworICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0K
IAogdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCkBAIC0yOTksNyArMzE0LDExIEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXIKICAgICAvLyBXZSBkbyBu
b3QgYWR2YW5jZSB0aGUgYW5pbWF0aW9uIGV4cGxpY2l0bHkuICBXZSByZWx5IG9uIGEgc3Vic2Vx
dWVudCBkcmF3IG9mIHRoZSBpbWFnZQogICAgIC8vIHRvIGZvcmNlIGEgcmVxdWVzdCBmb3IgdGhl
IG5leHQgZnJhbWUgdmlhIHN0YXJ0QW5pbWF0aW9uKCkuICBUaGlzIGFsbG93cyBpbWFnZXMgdGhh
dCBtb3ZlIG9mZnNjcmVlbiB3aGlsZQogICAgIC8vIHNjcm9sbGluZyB0byBzdG9wIGFuaW1hdGlu
ZyAodGh1cyBzYXZpbmcgbWVtb3J5IGZyb20gYWRkaXRpb25hbCBkZWNvZGVkIGZyYW1lcyBhbmQK
LSAgICAvLyBDUFUgdGltZSBzcGVudCBkb2luZyB0aGUgZGVjb2RpbmcpLgorICAgIC8vIENQVSB0
aW1lIHNwZW50IGRvaW5nIHRoZSBkZWNvZGluZykuICBIb3dldmVyLCB0aGlzIGRyYXdpbmcgd2ls
bCB0YWtlIG5vbnplcm8gdGltZS4gIFNvLAorICAgIC8vIHNhdmUgdGhlIGN1cnJlbnQgdGltZSwg
c28gdGhhdCBpZiB3ZSBkbyB3YW50IHRvIGRyYXcgYW5vdGhlciBmcmFtZSwgd2UgY2FuIGRlbGF5
IGl0CisgICAgLy8gcmVsYXRpdmUgdG8gcmlnaHQgbm93LCByYXRoZXIgdGhhbiByZWxhdGl2ZSB0
byB3aGVuIHRoZSBkcmF3aW5nIGFjdHVhbGx5IGZpbmlzaGVzLiAgVGhpcworICAgIC8vIG1ha2Vz
IHRoZSBhbmltYXRpb24gc3BlZWQgbm90IHZhcnkgYmFzZWQgb24gb3VyIGRyYXdpbmcgbGFnLgor
ICAgIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZSA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDM0NjUy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODMsNiArMTgzLDcgQEAgcHJvdGVjdGVkOgogICAgIFRpbWVyPEJpdG1hcEltYWdl
PiogbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudDsgLy8gSG93IG1hbnkg
dG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBkby4KICAgICBpbnQgbV9yZXBldGl0aW9u
c0NvbXBsZXRlOyAgLy8gSG93IG1hbnkgcmVwZXRpdGlvbnMgd2UndmUgZmluaXNoZWQuCisgICAg
ZG91YmxlIG1fbGFzdEFuaW1hdGlvbkZyYW1lVGltZTsgIC8vIFRoZSBzeXN0ZW0gdGltZSBhdCB3
aGljaCB3ZSBmaW5pc2hlZCBhZHZhbmNpbmcgdGhlIGxhc3QgYW5pbWF0aW9uIGZyYW1lLgogCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIG11dGFibGUgUmV0YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFn
ZTsgLy8gQSBjYWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAwLiBPbmx5IGJ1aWx0IGxhemlseSBpZiBz
b21lb25lIGFjdHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21827</attachid>
            <date>2008-06-18 18:04:41 -0700</date>
            <delta_ts>2008-06-20 17:16:19 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3865</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDY1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMDYtMTggIFBldGVyIEthc3RpbmcgIDx6ZXJvZHB4QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjMKKyAgICAgICAgQWNj
b3VudCBmb3IgcGFpbnQgbGFnIHdoZW4gYW5pbWF0aW5nIGltYWdlcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Rh
cnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmFkdmFuY2VBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisKIDIw
MDgtMDYtMTggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhIHNjcmlwdCBidWlsZCBwaGFzZSB0byByZW1vdmUgdGhlIFdlYktpdC5xcmMgZmlsZSBm
cm9tCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2
aXNpb24gMzQ2NTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkltYWdlT2JzZXJ2
ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNDgsNiArNDks
NyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogCiAgICAgLCBtX2Zy
YW1lVGltZXIoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KDApCiAgICAgLCBtX3JlcGV0aXRp
b25zQ29tcGxldGUoMCkKKyAgICAsIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKDApCiAgICAgLCBt
X2lzU29saWRDb2xvcihmYWxzZSkKICAgICAsIG1fYW5pbWF0aW5nSW1hZ2VUeXBlKHRydWUpCiAg
ICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKGZhbHNlKQpAQCAtMjMyLDggKzIzNCwyOSBAQCB2b2lk
IEJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbigpCiAgICAgaWYgKCFtX2FsbERhdGFSZWNlaXZl
ZCAmJiBtX3JlcGV0aXRpb25Db3VudCA9PSBjQW5pbWF0aW9uTG9vcE9uY2UgJiYgbV9jdXJyZW50
RnJhbWUgPj0gKGZyYW1lQ291bnQoKSAtIDEpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBD
YWxjdWxhdGUgZGVzaXJlZCBkZWxheS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudFRp
bWUoKSBhbmQKKyAgICAvLyBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSB0ZWxscyB1cyBob3cgbGF0
ZSAob3IgZWFybHkpIHdlIGFyZSBpbiBoYXZpbmcKKyAgICAvLyBhbmltYXRlZCBhbmQgcGFpbnRl
ZCB0aGUgY3VycmVudCBmcmFtZSwgc28gYWRqdXN0IHRoZSBkZXNpcmVkIGRlbGF5LAorICAgIC8v
IGZyYW1lRHVyYXRpb25BdEluZGV4KCksIGJ5IHRoYXQgYW1vdW50IHRvIGtlZXAgdGhlIGVmZmVj
dGl2ZSBhbmltYXRpb24KKyAgICAvLyBzcGVlZCBtYXRjaGluZyB0aGUgZGVzaXJlZCBzcGVlZCBy
ZWdhcmRsZXNzIG9mIHRpbWVyIG9yIHBhaW50IGxhZy4KKyAgICBkb3VibGUgZGVsYXkgPSBmcmFt
ZUR1cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgZG91YmxlIHRpbWUgPSBjdXJy
ZW50VGltZSgpOworICAgIGlmIChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSAhPSAwKQorICAgICAg
ICBkZWxheSAtPSAodGltZSAtIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKTsKKyAgICAvLyBOT1RF
OiBXZSBjb3VsZCAiY2F0Y2ggdXAiIGFjcm9zcyBtdWx0aXBsZSBmcmFtZXMgYnkgc3dhcHBpbmcg
dGhlIHNldHRpbmcKKyAgICAvLyBvZiBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSBhYm92ZSB0aGlz
IGNvbmRpdGlvbmFsLCBidXQgdGhpcyBwcm9iYWJseQorICAgIC8vIGlzbid0IHdoYXQgd2Ugd2Fu
dDogaWYgYSB1c2VyIHN3aXRjaGVzIGF3YXkgZnJvbSB0aGlzIGFuaW1hdGlvbiB0bworICAgIC8v
IGFub3RoZXIgdGFiICh0aHVzIHN0b3BwaW5nIGl0KSwgdGhlbiBzd2l0Y2hlcyBiYWNrLCB0aGUg
YW5pbWF0aW9uIHdpbGwKKyAgICAvLyAiY2F0Y2ggdXAiIHdpdGggdGhlIGVudGlyZSB0aW1lIHRo
ZSB1c2VyIHdhcyBzd2l0Y2hlZCBhd2F5LCB3aGljaCB3aWxsCisgICAgLy8gbG9vayBjcmF6eS4g
IFdlIGNvdWxkIHNvbHZlIHRoaXMgYnkgc2ltcGx5IGFkdmFuY2luZyBkaXJlY3RseSBwYXN0IG1p
c3NlZAorICAgIC8vIGZyYW1lcywgd2hpY2ggYWxzbyBtYWtlcyBpbWFnZXMgYXBwZWFyIHRvIGhh
dmUgYW5pbWF0ZWQgd2hpbGUgaW4gaGlkZGVuCisgICAgLy8gdGFicywgYnV0IHRoaXMgc2ltcGxl
IGNvZGUgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2guCisgICAgaWYgKGRlbGF5IDwgMCkKKyAgICAg
ICAgZGVsYXkgPSAwOworICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gdGltZSArIGRlbGF5
OworCiAgICAgbV9mcmFtZVRpbWVyID0gbmV3IFRpbWVyPEJpdG1hcEltYWdlPih0aGlzLCAmQml0
bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24pOwotICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVT
aG90KGZyYW1lRHVyYXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKSk7CisgICAgbV9mcmFtZVRp
bWVyLT5zdGFydE9uZVNob3QoZGVsYXkpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5p
bWF0aW9uKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJl
dmlzaW9uIDM0NjUyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgcHJvdGVjdGVkOgogICAgIFRpbWVy
PEJpdG1hcEltYWdlPiogbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudDsg
Ly8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBkby4KICAgICBpbnQg
bV9yZXBldGl0aW9uc0NvbXBsZXRlOyAgLy8gSG93IG1hbnkgcmVwZXRpdGlvbnMgd2UndmUgZmlu
aXNoZWQuCisgICAgZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lOyAgLy8gVGhlIHN5c3Rl
bSB0aW1lIGF0IHdoaWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNhbGwgdG8gc3RhcnRBbmlt
YXRpb24oKS4KIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0lt
YWdlPiBtX25zSW1hZ2U7IC8vIEEgY2FjaGVkIE5TSW1hZ2Ugb2YgZnJhbWUgMC4gT25seSBidWls
dCBsYXppbHkgaWYgc29tZW9uZSBhY3R1YWxseSBxdWVyaWVzIGZvciBvbmUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21864</attachid>
            <date>2008-06-20 17:16:19 -0700</date>
            <delta_ts>2008-06-23 11:43:23 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10457</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lv
biAzNDcwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC00OCw2ICs0OSw3IEBA
IEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiAKICAgICAsIG1fZnJhbWVU
aW1lcigwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoMCkKICAgICAsIG1fcmVwZXRpdGlvbnND
b21wbGV0ZSgwKQorICAgICwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUoMCkKICAgICAsIG1faXNT
b2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpbmdJbWFnZVR5cGUodHJ1ZSkKICAgICAs
IG1fYW5pbWF0aW9uRmluaXNoZWQoZmFsc2UpCkBAIC0yMzIsOCArMjM0LDQ0IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKCkKICAgICBpZiAoIW1fYWxsRGF0YVJlY2VpdmVkICYm
IG1fcmVwZXRpdGlvbkNvdW50ID09IGNBbmltYXRpb25Mb29wT25jZSAmJiBtX2N1cnJlbnRGcmFt
ZSA+PSAoZnJhbWVDb3VudCgpIC0gMSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWVU
aW1lciA9IG5ldyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNl
QW5pbWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChmcmFtZUR1cmF0aW9u
QXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIC8vIERldGVybWluZSB0aW1lIGZvciBuZXh0
IGZyYW1lIHRvIHN0YXJ0LiAgQnkgaWdub3JpbmcgcGFpbnQgYW5kIHRpbWVyIGxhZworICAgIC8v
IGluIHRoaXMgY2FsY3VsYXRpb24sIHdlIG1ha2UgdGhlIGFuaW1hdGlvbiBhcHBlYXIgdG8gcnVu
IGF0IGl0cyBkZXNpcmVkCisgICAgLy8gcmF0ZSByZWdhcmRsZXNzIG9mIGhvdyBmYXN0IGl0J3Mg
YmVpbmcgcmVwYWludGVkLgorICAgIGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgY29uc3QgZG91YmxlIHRpbWUgPSBjdXJy
ZW50VGltZSgpOworICAgIGlmIChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9PSAwKQorICAgICAg
ICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVyYXRpb247CisgICAg
ZWxzZQorICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBjdXJyZW50RHVyYXRpb247
CisKKyAgICBpZiAodGltZSA8IG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKSB7CisgICAgICAgIC8v
IEhhdmVuJ3QgeWV0IHJlYWNoZWQgdGltZSBmb3IgbmV4dCBmcmFtZSB0byBzdGFydDsgZGVsYXkg
dW50aWwgdGhlbi4KKyAgICAgICAgbV9mcmFtZVRpbWVyID0gbmV3IFRpbWVyPEJpdG1hcEltYWdl
Pih0aGlzLCAmQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24pOworICAgICAgICBtX2ZyYW1l
VGltZXItPnN0YXJ0T25lU2hvdChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSAtIHRpbWUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBvciBwYXNzZWQgdGhl
IHRpbWUgZm9yIHRoZSBuZXh0IGZyYW1lIHRvIHN0YXJ0LgorICAgICAgICAvLyBTZWUgaWYgd2Un
dmUgYWxzbyBwYXNzZWQgdGhlIHRpbWUgZm9yIGZyYW1lcyBhZnRlciB0aGF0IHRvIHN0YXJ0LCBp
bgorICAgICAgICAvLyBjYXNlIHdlIG5lZWQgdG8gc2tpcCBzb21lIGZyYW1lcyBlbnRpcmVseS4K
KyAgICAgICAgc2l6ZV90IG5leHRGcmFtZSA9IChtX2N1cnJlbnRGcmFtZSArIDEpICUgZnJhbWVD
b3VudCgpOworICAgICAgICB3aGlsZSAobV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChu
ZXh0RnJhbWUpKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgd2Ugc2tpcCB0aGUgY3VycmVudCBm
cmFtZT8KKyAgICAgICAgICAgIGRvdWJsZSBuZXh0RnJhbWVTdGFydFRpbWUgPSBtX2Rlc2lyZWRG
cmFtZVN0YXJ0VGltZSArIGZyYW1lRHVyYXRpb25BdEluZGV4KG5leHRGcmFtZSk7CisgICAgICAg
ICAgICBpZiAodGltZSA8IG5leHRGcmFtZVN0YXJ0VGltZSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgLy8gWWVzOyBza2lwIG92ZXIgaXQgd2l0aG91dCBub3RpZnlpbmcg
b3VyIG9ic2VydmVycy4KKyAgICAgICAgICAgIGlmICghaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9u
KHRydWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZGVzaXJlZEZy
YW1lU3RhcnRUaW1lID0gbmV4dEZyYW1lU3RhcnRUaW1lOworICAgICAgICAgICAgbmV4dEZyYW1l
ID0gKCsrbmV4dEZyYW1lKSAlIGZyYW1lQ291bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IERyYXcgdGhlIG5leHQgZnJhbWUgaW1tZWRpYXRlbHkuICBOb3RlIHRoYXQgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUKKyAgICAgICAgLy8gbWF5IGJlIGluIHRoZSBwYXN0LCBtZWFuaW5nIHRoZSBu
ZXh0IHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHdlJ2xsCisgICAgICAgIC8vIGtpY2sgb2Zm
IHRoZSBuZXh0IGFkdmFuY2VtZW50IHNvb25lciB0aGFuIHRoaXMgZnJhbWUncyBkdXJhdGlvbiB3
b3VsZAorICAgICAgICAvLyBzdWdnZXN0LgorICAgICAgICBpbnRlcm5hbEFkdmFuY2VBbmltYXRp
b24oZmFsc2UpOworICAgIH0KIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigp
CkBAIC0yNTksMTMgKzI5NywxOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigp
CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXI8Qml0bWFwSW1hZ2U+
KiB0aW1lcikKIHsKKyAgICBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oZmFsc2UpOworfQorCiti
b29sIEJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oYm9vbCBza2lwcGluZ0Zy
YW1lcykKK3sKICAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24uCiAgICAgc3RvcEFuaW1hdGlvbigp
OwogICAgIAogICAgIC8vIFNlZSBpZiBhbnlvbmUgaXMgc3RpbGwgcGF5aW5nIGF0dGVudGlvbiB0
byB0aGlzIGFuaW1hdGlvbi4gIElmIG5vdCwgd2UgZG9uJ3QKICAgICAvLyBhZHZhbmNlIGFuZCB3
aWxsIHJlbWFpbiBzdXNwZW5kZWQgYXQgdGhlIGN1cnJlbnQgZnJhbWUgdW50aWwgdGhlIGFuaW1h
dGlvbiBpcyByZXN1bWVkLgotICAgIGlmIChpbWFnZU9ic2VydmVyKCktPnNob3VsZFBhdXNlQW5p
bWF0aW9uKHRoaXMpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFza2lwcGluZ0ZyYW1lcyAm
JiBpbWFnZU9ic2VydmVyKCktPnNob3VsZFBhdXNlQW5pbWF0aW9uKHRoaXMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBtX2N1cnJlbnRGcmFtZSsrOwogICAgIGlmIChtX2N1cnJlbnRG
cmFtZSA+PSBmcmFtZUNvdW50KCkpIHsKQEAgLTI3NiwxMiArMzE5LDMwIEBAIHZvaWQgQml0bWFw
SW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXIKICAgICAgICAgbV9yZXBldGl0aW9uQ291bnQg
PSBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQoKTsKICAgICAgICAgaWYgKG1fcmVwZXRpdGlvbkNv
dW50ICYmIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSA+PSBtX3JlcGV0aXRpb25Db3VudCkgewogICAg
ICAgICAgICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBtX2Rlc2ly
ZWRGcmFtZVN0YXJ0VGltZSA9IDA7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZS0tOwotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHNraXBwaW5nRnJhbWVzKSB7CisgICAg
ICAgICAgICAgICAgLy8gVWggb2guICBXZSB0cmllZCB0byBza2lwIHBhc3QgdGhlIGVuZCBvZiB0
aGUgYW5pbWF0aW9uLiAgV2UnZAorICAgICAgICAgICAgICAgIC8vIGJldHRlciBkcmF3IHRoaXMg
bGFzdCBmcmFtZS4KKyAgICAgICAgICAgICAgICBub3RpZnlPYnNlcnZlckFuZFRyaW1EZWNvZGVk
RGF0YSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0gMDsKICAgICB9CiAKKyAgICBpZiAoIXNraXBw
aW5nRnJhbWVzKQorICAgICAgICBub3RpZnlPYnNlcnZlckFuZFRyaW1EZWNvZGVkRGF0YSgpOwor
CisgICAgLy8gV2UgZG8gbm90IGFkdmFuY2UgdGhlIGFuaW1hdGlvbiBleHBsaWNpdGx5LiAgV2Ug
cmVseSBvbiBhIHN1YnNlcXVlbnQgZHJhdyBvZiB0aGUgaW1hZ2UKKyAgICAvLyB0byBmb3JjZSBh
IHJlcXVlc3QgZm9yIHRoZSBuZXh0IGZyYW1lIHZpYSBzdGFydEFuaW1hdGlvbigpLiAgVGhpcyBh
bGxvd3MgaW1hZ2VzIHRoYXQgbW92ZSBvZmZzY3JlZW4gd2hpbGUKKyAgICAvLyBzY3JvbGxpbmcg
dG8gc3RvcCBhbmltYXRpbmcgKHRodXMgc2F2aW5nIG1lbW9yeSBmcm9tIGFkZGl0aW9uYWwgZGVj
b2RlZCBmcmFtZXMgYW5kCisgICAgLy8gQ1BVIHRpbWUgc3BlbnQgZG9pbmcgdGhlIGRlY29kaW5n
KS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6bm90aWZ5T2JzZXJ2
ZXJBbmRUcmltRGVjb2RlZERhdGEoKQorewogICAgIC8vIE5vdGlmeSBvdXIgb2JzZXJ2ZXIgdGhh
dCB0aGUgYW5pbWF0aW9uIGhhcyBhZHZhbmNlZC4KICAgICBpbWFnZU9ic2VydmVyKCktPmFuaW1h
dGlvbkFkdmFuY2VkKHRoaXMpOwogCkBAIC0yOTUsMTEgKzM1Niw2IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXIKICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGRlY29k
ZSB0aGUgbmV4dCBmcmFtZS4KICAgICAgICAgZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
ICAgICB9Ci0gICAgCi0gICAgLy8gV2UgZG8gbm90IGFkdmFuY2UgdGhlIGFuaW1hdGlvbiBleHBs
aWNpdGx5LiAgV2UgcmVseSBvbiBhIHN1YnNlcXVlbnQgZHJhdyBvZiB0aGUgaW1hZ2UKLSAgICAv
LyB0byBmb3JjZSBhIHJlcXVlc3QgZm9yIHRoZSBuZXh0IGZyYW1lIHZpYSBzdGFydEFuaW1hdGlv
bigpLiAgVGhpcyBhbGxvd3MgaW1hZ2VzIHRoYXQgbW92ZSBvZmZzY3JlZW4gd2hpbGUKLSAgICAv
LyBzY3JvbGxpbmcgdG8gc3RvcCBhbmltYXRpbmcgKHRodXMgc2F2aW5nIG1lbW9yeSBmcm9tIGFk
ZGl0aW9uYWwgZGVjb2RlZCBmcmFtZXMgYW5kCi0gICAgLy8gQ1BVIHRpbWUgc3BlbnQgZG9pbmcg
dGhlIGRlY29kaW5nKS4KIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaAkocmV2aXNpb24gMzQ3MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsMTcgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgc2hvdWxkQW5pbWF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydEFu
aW1hdGlvbigpOwogICAgIHZvaWQgYWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJbWFnZT4q
KTsKLSAgICAKKworICAgIC8vIEZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVhbCB3b3JrIG9mIGFk
dmFuY2luZyB0aGUgYW5pbWF0aW9uLiAgV2hlbgorICAgIC8vIHNraXBwaW5nRnJhbWVzIGlzIHRy
dWUsIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBsb29wIHRyeWluZyB0byBza2lwIG92ZXIKKyAg
ICAvLyBhIGJ1bmNoIG9mIGFuaW1hdGlvbiBmcmFtZXMsIHNvIHdlIHNob3VsZCBub3QgZG8gdGhp
bmdzIGxpa2UgZGVjb2RlIGVhY2gKKyAgICAvLyBvbmUgb3Igbm90aWZ5IG91ciBvYnNlcnZlcnMu
CisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBhbmltYXRpb24gd2FzIGFkdmFuY2VkLgorICAg
IGJvb2wgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdGcmFtZXMpOworCisg
ICAgLy8gSGVscGVyIGZvciBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oKS4KKyAgICB2b2lkIG5v
dGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7CisKICAgICAvLyBIYW5kbGUgcGxhdGZv
cm0tc3BlY2lmaWMgZGF0YQogICAgIHZvaWQgaW5pdFBsYXRmb3JtRGF0YSgpOwogICAgIHZvaWQg
aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwpAQCAtMTgzLDYgKzE5Myw3IEBAIHByb3RlY3RlZDoK
ICAgICBUaW1lcjxCaXRtYXBJbWFnZT4qIG1fZnJhbWVUaW1lcjsKICAgICBpbnQgbV9yZXBldGl0
aW9uQ291bnQ7IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBzaG91bGQgZG8u
CiAgICAgaW50IG1fcmVwZXRpdGlvbnNDb21wbGV0ZTsgIC8vIEhvdyBtYW55IHJlcGV0aXRpb25z
IHdlJ3ZlIGZpbmlzaGVkLgorICAgIGRvdWJsZSBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZTsgIC8v
IFRoZSBzeXN0ZW0gdGltZSBhdCB3aGljaCB3ZSBob3BlIHRvIHNlZSB0aGUgbmV4dCBjYWxsIHRv
IHN0YXJ0QW5pbWF0aW9uKCkuCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgbXV0YWJsZSBSZXRh
aW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOyAvLyBBIGNhY2hlZCBOU0ltYWdlIG9mIGZyYW1lIDAu
IE9ubHkgYnVpbHQgbGF6aWx5IGlmIHNvbWVvbmUgYWN0dWFsbHkgcXVlcmllcyBmb3Igb25lLgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
CShyZXZpc2lvbiAzNDcwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNSBAQCBCaXRtYXBJbWFn
ZTo6Qml0bWFwSW1hZ2UoY2Fpcm9fc3VyZmFjZV90CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIEZsb2F0UmVjdCBzcmNS
ZWN0KHNyYyk7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsKKyAgICBzdGFydEFuaW1hdGlv
bigpOwogCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJl
bnRGcmFtZSk7CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKIAorICAgIEZsb2F0UmVjdCBzcmNS
ZWN0KHNyYyk7CisgICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsKKwogICAgIGlmIChtYXlGaWxs
V2l0aFNvbGlkQ29sb3IoKSkgewogICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwg
ZHN0UmVjdCwgc29saWRDb2xvcigpLCBvcCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEzMCw4ICsx
MzIsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICBj
YWlyb19yZXN0b3JlKGNyKTsKIAotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KICAgICBpZiAoaW1h
Z2VPYnNlcnZlcigpKQogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9u
IDM0NzA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw4IEBAIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6Omdl
dENHSW1hZ2VSZWYoKQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKKyAgICBzdGFydEFuaW1hdGlvbigp
OworCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7
CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBp
bWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKQEAgLTE3Myw4ICsxNzUsNiBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIAogICAgIGN0eHQtPnJlc3Rv
cmUoKTsKICAgICAKLSAgICBzdGFydEFuaW1hdGlvbigpOwotCiAgICAgaWYgKGltYWdlT2JzZXJ2
ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCShyZXZpc2lvbiAzNDcwNykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw2ICsxMDgsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZv
cm1EYXRhCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKKyAgICBzdGFydEFuaW1hdGlvbigpOwor
CiAgICAgUVBpeG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMSw4ICsxMzMsNiBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgcGFpbnRlci0+ZHJhd1BpeG1h
cChkc3QsICppbWFnZSwgc3JjKTsKIAogICAgIGN0eHQtPnJlc3RvcmUoKTsKLQotICAgIHN0YXJ0
QW5pbWF0aW9uKCk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlV3guY3BwCShyZXZpc2lvbiAzNDcwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDggQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHd4V2luZG93REMqIGNv
bnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICNlbmRpZgogCisgICAgc3RhcnRBbmlt
YXRpb24oKTsKKwogICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50
RnJhbWUpOwogICAgIGlmICghYml0bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwpAQCAtMTQxLDcgKzE0Myw2IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgYml0bWFwID0g
TlVMTDsKICAgICB9CiAgICAgY3R4dC0+cmVzdG9yZSgpOwotICAgIHN0YXJ0QW5pbWF0aW9uKCk7
CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQo=
</data>
<flag name="review"
          id="9601"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21886</attachid>
            <date>2008-06-23 11:43:23 -0700</date>
            <delta_ts>2008-10-12 16:48:21 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12225</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDcwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDgtMDYtMjAgIFBldGVyIEthc3RpbmcgIDx6ZXJvZHB4QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjMKKyAgICAgICAgQWNj
b3VudCBmb3IgcGFpbnQgYW5kIHRpbWVyIGxhZyB3aGVuIGFuaW1hdGluZyBpbWFnZXMuICBBbHNv
IHByZXRlbmQKKyAgICAgICAgdGhhdCBpbWFnZXMgd2hvc2UgYW5pbWF0aW9ucyB3ZXJlIHBhdXNl
ZCAoYnkgYmVjb21pbmcgaW52aXNpYmxlKQorICAgICAgICBjb250aW51ZWQgdG8gYW5pbWF0ZSwg
YnkgImNhdGNoaW5nIHVwIiB0byB0aGUgY29ycmVjdCBmcmFtZSB3aGVuIHRoZXkncmUKKyAgICAg
ICAgc2hvd24gYWdhaW4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6Om5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorCiAyMDA4LTA2LTIwICBKYW4g
TWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIEd0ayBidWls
ZCBmaXg6IEFkZCBmaWxlcyBtaXNzaW5nIGluIHRoZSBwcmV2aW91cyBmaXggKHIzNDcwNSkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAz
NDcwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC00OCw2ICs0OSw3IEBAIEJp
dG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiAKICAgICAsIG1fZnJhbWVUaW1l
cigwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoMCkKICAgICAsIG1fcmVwZXRpdGlvbnNDb21w
bGV0ZSgwKQorICAgICwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUoMCkKICAgICAsIG1faXNTb2xp
ZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpbmdJbWFnZVR5cGUodHJ1ZSkKICAgICAsIG1f
YW5pbWF0aW9uRmluaXNoZWQoZmFsc2UpCkBAIC0yMzIsOCArMjM0LDUwIEBAIHZvaWQgQml0bWFw
SW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKCkKICAgICBpZiAoIW1fYWxsRGF0YVJlY2VpdmVkICYmIG1f
cmVwZXRpdGlvbkNvdW50ID09IGNBbmltYXRpb25Mb29wT25jZSAmJiBtX2N1cnJlbnRGcmFtZSA+
PSAoZnJhbWVDb3VudCgpIC0gMSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJhbWVUaW1l
ciA9IG5ldyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5p
bWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChmcmFtZUR1cmF0aW9uQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIC8vIERldGVybWluZSB0aW1lIGZvciBuZXh0IGZy
YW1lIHRvIHN0YXJ0LiAgQnkgaWdub3JpbmcgcGFpbnQgYW5kIHRpbWVyIGxhZworICAgIC8vIGlu
IHRoaXMgY2FsY3VsYXRpb24sIHdlIG1ha2UgdGhlIGFuaW1hdGlvbiBhcHBlYXIgdG8gcnVuIGF0
IGl0cyBkZXNpcmVkCisgICAgLy8gcmF0ZSByZWdhcmRsZXNzIG9mIGhvdyBmYXN0IGl0J3MgYmVp
bmcgcmVwYWludGVkLgorICAgIGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0aW9u
QXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgY29uc3QgZG91YmxlIHRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgIGlmIChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9PSAwKSB7CisgICAgICAg
IG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gdGltZSArIGN1cnJlbnREdXJhdGlvbjsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBjdXJyZW50RHVyYXRp
b247CisgICAgICAgIC8vIElmIHdlJ3JlIG1vcmUgdGhhbiBmaXZlIG1pbnV0ZXMgYmVoaW5kLCB0
aGUgdXNlciBwcm9iYWJseSBkb2Vzbid0CisgICAgICAgIC8vIGNhcmUgYWJvdXQgcmVzeW5jaW5n
IGFuZCB3ZSBjb3VsZCBidXJuIGEgbG90IG9mIHRpbWUgbG9vcGluZyB0aHJvdWdoCisgICAgICAg
IC8vIGZyYW1lcyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCisgICAgICAgIGlmICgo
dGltZSAtIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKSA+ICg1ICogNjApKQorICAgICAgICAgICAg
bV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworICAgIH0K
KworICAgIGlmICh0aW1lIDwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUpIHsKKyAgICAgICAgLy8g
SGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aW1lIGZvciBuZXh0IGZyYW1lIHRvIHN0YXJ0OyBkZWxheSB1
bnRpbCB0aGVuLgorICAgICAgICBtX2ZyYW1lVGltZXIgPSBuZXcgVGltZXI8Qml0bWFwSW1hZ2U+
KHRoaXMsICZCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbik7CisgICAgICAgIG1fZnJhbWVU
aW1lci0+c3RhcnRPbmVTaG90KG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lIC0gdGltZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSByZWFjaGVkIG9yIHBhc3NlZCB0aGUg
dGltZSBmb3IgdGhlIG5leHQgZnJhbWUgdG8gc3RhcnQuCisgICAgICAgIC8vIFNlZSBpZiB3ZSd2
ZSBhbHNvIHBhc3NlZCB0aGUgdGltZSBmb3IgZnJhbWVzIGFmdGVyIHRoYXQgdG8gc3RhcnQsIGlu
CisgICAgICAgIC8vIGNhc2Ugd2UgbmVlZCB0byBza2lwIHNvbWUgZnJhbWVzIGVudGlyZWx5Lgor
ICAgICAgICBzaXplX3QgbmV4dEZyYW1lID0gKG1fY3VycmVudEZyYW1lICsgMSkgJSBmcmFtZUNv
dW50KCk7CisgICAgICAgIHdoaWxlIChtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KG5l
eHRGcmFtZSkpIHsKKyAgICAgICAgICAgIC8vIFNob3VsZCB3ZSBza2lwIHRoZSBjdXJyZW50IGZy
YW1lPworICAgICAgICAgICAgZG91YmxlIG5leHRGcmFtZVN0YXJ0VGltZSA9IG1fZGVzaXJlZEZy
YW1lU3RhcnRUaW1lICsgZnJhbWVEdXJhdGlvbkF0SW5kZXgobmV4dEZyYW1lKTsKKyAgICAgICAg
ICAgIGlmICh0aW1lIDwgbmV4dEZyYW1lU3RhcnRUaW1lKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAvLyBZZXM7IHNraXAgb3ZlciBpdCB3aXRob3V0IG5vdGlmeWluZyBv
dXIgb2JzZXJ2ZXJzLgorICAgICAgICAgICAgaWYgKCFpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24o
dHJ1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUgPSBuZXh0RnJhbWVTdGFydFRpbWU7CisgICAgICAgICAgICBuZXh0RnJhbWUg
PSAobmV4dEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBEcmF3IHRoZSBuZXh0IGZyYW1lIGltbWVkaWF0ZWx5LiAgTm90ZSB0aGF0IG1fZGVzaXJlZEZy
YW1lU3RhcnRUaW1lCisgICAgICAgIC8vIG1heSBiZSBpbiB0aGUgcGFzdCwgbWVhbmluZyB0aGUg
bmV4dCB0aW1lIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB3ZSdsbAorICAgICAgICAvLyBraWNrIG9m
ZiB0aGUgbmV4dCBhZHZhbmNlbWVudCBzb29uZXIgdGhhbiB0aGlzIGZyYW1lJ3MgZHVyYXRpb24g
d291bGQKKyAgICAgICAgLy8gc3VnZ2VzdC4KKyAgICAgICAgaW50ZXJuYWxBZHZhbmNlQW5pbWF0
aW9uKGZhbHNlKTsKKyAgICB9CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24o
KQpAQCAtMjU5LDEzICszMDMsMTggQEAgdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRpb24o
KQogCiB2b2lkIEJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKFRpbWVyPEJpdG1hcEltYWdl
PiogdGltZXIpCiB7CisgICAgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGZhbHNlKTsKK30KKwor
Ym9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdG
cmFtZXMpCit7CiAgICAgLy8gU3RvcCB0aGUgYW5pbWF0aW9uLgogICAgIHN0b3BBbmltYXRpb24o
KTsKICAgICAKICAgICAvLyBTZWUgaWYgYW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24g
dG8gdGhpcyBhbmltYXRpb24uICBJZiBub3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQg
d2lsbCByZW1haW4gc3VzcGVuZGVkIGF0IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmlt
YXRpb24gaXMgcmVzdW1lZC4KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQYXVzZUFu
aW1hdGlvbih0aGlzKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghc2tpcHBpbmdGcmFtZXMg
JiYgaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgbV9jdXJyZW50RnJhbWUrKzsKICAgICBpZiAobV9jdXJyZW50
RnJhbWUgPj0gZnJhbWVDb3VudCgpKSB7CkBAIC0yNzYsMTIgKzMyNSwzMCBAQCB2b2lkIEJpdG1h
cEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKFRpbWVyCiAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50
ID0gbV9zb3VyY2UucmVwZXRpdGlvbkNvdW50KCk7CiAgICAgICAgIGlmIChtX3JlcGV0aXRpb25D
b3VudCAmJiBtX3JlcGV0aXRpb25zQ29tcGxldGUgPj0gbV9yZXBldGl0aW9uQ291bnQpIHsKICAg
ICAgICAgICAgIG1fYW5pbWF0aW9uRmluaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgbV9kZXNp
cmVkRnJhbWVTdGFydFRpbWUgPSAwOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUtLTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChza2lwcGluZ0ZyYW1lcykgeworICAg
ICAgICAgICAgICAgIC8vIFVoIG9oLiAgV2UgdHJpZWQgdG8gc2tpcCBwYXN0IHRoZSBlbmQgb2Yg
dGhlIGFuaW1hdGlvbi4gIFdlJ2QKKyAgICAgICAgICAgICAgICAvLyBiZXR0ZXIgZHJhdyB0aGlz
IGxhc3QgZnJhbWUuCisgICAgICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2Rl
ZERhdGEoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CiAgICAgfQogCisgICAgaWYgKCFza2lw
cGluZ0ZyYW1lcykKKyAgICAgICAgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEoKTsK
KworICAgIC8vIFdlIGRvIG5vdCBhZHZhbmNlIHRoZSBhbmltYXRpb24gZXhwbGljaXRseS4gIFdl
IHJlbHkgb24gYSBzdWJzZXF1ZW50IGRyYXcgb2YgdGhlIGltYWdlCisgICAgLy8gdG8gZm9yY2Ug
YSByZXF1ZXN0IGZvciB0aGUgbmV4dCBmcmFtZSB2aWEgc3RhcnRBbmltYXRpb24oKS4gIFRoaXMg
YWxsb3dzIGltYWdlcyB0aGF0IG1vdmUgb2Zmc2NyZWVuIHdoaWxlCisgICAgLy8gc2Nyb2xsaW5n
IHRvIHN0b3AgYW5pbWF0aW5nICh0aHVzIHNhdmluZyBtZW1vcnkgZnJvbSBhZGRpdGlvbmFsIGRl
Y29kZWQgZnJhbWVzIGFuZAorICAgIC8vIENQVSB0aW1lIHNwZW50IGRvaW5nIHRoZSBkZWNvZGlu
ZykuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6Om5vdGlmeU9ic2Vy
dmVyQW5kVHJpbURlY29kZWREYXRhKCkKK3sKICAgICAvLyBOb3RpZnkgb3VyIG9ic2VydmVyIHRo
YXQgdGhlIGFuaW1hdGlvbiBoYXMgYWR2YW5jZWQuCiAgICAgaW1hZ2VPYnNlcnZlcigpLT5hbmlt
YXRpb25BZHZhbmNlZCh0aGlzKTsKIApAQCAtMjk1LDExICszNjIsNiBAQCB2b2lkIEJpdG1hcElt
YWdlOjphZHZhbmNlQW5pbWF0aW9uKFRpbWVyCiAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBkZWNv
ZGUgdGhlIG5leHQgZnJhbWUuCiAgICAgICAgIGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7
CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvIG5vdCBhZHZhbmNlIHRoZSBhbmltYXRpb24gZXhw
bGljaXRseS4gIFdlIHJlbHkgb24gYSBzdWJzZXF1ZW50IGRyYXcgb2YgdGhlIGltYWdlCi0gICAg
Ly8gdG8gZm9yY2UgYSByZXF1ZXN0IGZvciB0aGUgbmV4dCBmcmFtZSB2aWEgc3RhcnRBbmltYXRp
b24oKS4gIFRoaXMgYWxsb3dzIGltYWdlcyB0aGF0IG1vdmUgb2Zmc2NyZWVuIHdoaWxlCi0gICAg
Ly8gc2Nyb2xsaW5nIHRvIHN0b3AgYW5pbWF0aW5nICh0aHVzIHNhdmluZyBtZW1vcnkgZnJvbSBh
ZGRpdGlvbmFsIGRlY29kZWQgZnJhbWVzIGFuZAotICAgIC8vIENQVSB0aW1lIHNwZW50IGRvaW5n
IHRoZSBkZWNvZGluZykuCiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmgJKHJldmlzaW9uIDM0NzA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDE3IEBAIHByb3Rl
Y3RlZDoKICAgICBib29sIHNob3VsZEFuaW1hdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRB
bmltYXRpb24oKTsKICAgICB2b2lkIGFkdmFuY2VBbmltYXRpb24oVGltZXI8Qml0bWFwSW1hZ2U+
Kik7Ci0gICAgCisKKyAgICAvLyBGdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJlYWwgd29yayBvZiBh
ZHZhbmNpbmcgdGhlIGFuaW1hdGlvbi4gIFdoZW4KKyAgICAvLyBza2lwcGluZ0ZyYW1lcyBpcyB0
cnVlLCB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbG9vcCB0cnlpbmcgdG8gc2tpcCBvdmVyCisg
ICAgLy8gYSBidW5jaCBvZiBhbmltYXRpb24gZnJhbWVzLCBzbyB3ZSBzaG91bGQgbm90IGRvIHRo
aW5ncyBsaWtlIGRlY29kZSBlYWNoCisgICAgLy8gb25lIG9yIG5vdGlmeSBvdXIgb2JzZXJ2ZXJz
LgorICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgYW5pbWF0aW9uIHdhcyBhZHZhbmNlZC4KKyAg
ICBib29sIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbihib29sIHNraXBwaW5nRnJhbWVzKTsKKwor
ICAgIC8vIEhlbHBlciBmb3IgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKCkuCisgICAgdm9pZCBu
b3RpZnlPYnNlcnZlckFuZFRyaW1EZWNvZGVkRGF0YSgpOworCiAgICAgLy8gSGFuZGxlIHBsYXRm
b3JtLXNwZWNpZmljIGRhdGEKICAgICB2b2lkIGluaXRQbGF0Zm9ybURhdGEoKTsKICAgICB2b2lk
IGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsKQEAgLTE4Myw2ICsxOTMsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgVGltZXI8Qml0bWFwSW1hZ2U+KiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRp
dGlvbkNvdW50OyAvLyBIb3cgbWFueSB0b3RhbCBhbmltYXRpb24gbG9vcHMgd2Ugc2hvdWxkIGRv
LgogICAgIGludCBtX3JlcGV0aXRpb25zQ29tcGxldGU7ICAvLyBIb3cgbWFueSByZXBldGl0aW9u
cyB3ZSd2ZSBmaW5pc2hlZC4KKyAgICBkb3VibGUgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWU7ICAv
LyBUaGUgc3lzdGVtIHRpbWUgYXQgd2hpY2ggd2UgaG9wZSB0byBzZWUgdGhlIG5leHQgY2FsbCB0
byBzdGFydEFuaW1hdGlvbigpLgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG11dGFibGUgUmV0
YWluUHRyPE5TSW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBjYWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAw
LiBPbmx5IGJ1aWx0IGxhemlseSBpZiBzb21lb25lIGFjdHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNw
cAkocmV2aXNpb24gMzQ3MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMyArODIsMTUgQEAgQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2VfdAogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKLSAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChzcmMpOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0KGRzdCk7CisgICAgc3RhcnRBbmltYXRp
b24oKTsKIAogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CiAKKyAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChzcmMpOworICAgIEZsb2F0UmVjdCBkc3RSZWN0KGRzdCk7CisKICAgICBpZiAobWF5Rmls
bFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgb3ApOwogICAgICAgICByZXR1cm47CkBAIC0xMzAsOCAr
MTMyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAg
Y2Fpcm9fcmVzdG9yZShjcik7CiAKLSAgICBzdGFydEFuaW1hdGlvbigpOwotCiAgICAgaWYgKGlt
YWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lv
biAzNDcwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksOCBAQCBDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpn
ZXRDR0ltYWdlUmVmKCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CisgICAgc3RhcnRBbmltYXRpb24o
KTsKKwogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUp
OwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4g
aW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CkBAIC0xNzMsOCArMTc1LDYgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAKICAgICBjdHh0LT5yZXN0
b3JlKCk7CiAgICAgCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQogICAgIGlmIChpbWFnZU9ic2Vy
dmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAkocmV2aXNpb24gMzQ3MDcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDgsNiArMTA4LDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRm
b3JtRGF0YQogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CisgICAgc3RhcnRBbmltYXRpb24oKTsK
KwogICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xMzEsOCArMTMzLDYgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHBhaW50ZXItPmRyYXdQaXht
YXAoZHN0LCAqaW1hZ2UsIHNyYyk7CiAKICAgICBjdHh0LT5yZXN0b3JlKCk7Ci0KLSAgICBzdGFy
dEFuaW1hdGlvbigpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gMzQ3MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw4IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICB3eFdpbmRvd0RDKiBj
b250ZXh0ID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYKIAorICAgIHN0YXJ0QW5p
bWF0aW9uKCk7CisKICAgICB3eEJpdG1hcCogYml0bWFwID0gZnJhbWVBdEluZGV4KG1fY3VycmVu
dEZyYW1lKTsKICAgICBpZiAoIWJpdG1hcCkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKQEAgLTE0MSw3ICsxNDMsNiBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGJpdG1hcCA9
IE5VTEw7CiAgICAgfQogICAgIGN0eHQtPnJlc3RvcmUoKTsKLSAgICBzdGFydEFuaW1hdGlvbigp
OwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Is
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22667</attachid>
            <date>2008-08-05 17:16:17 -0700</date>
            <delta_ts>2008-09-24 15:30:47 -0700</delta_ts>
            <desc>patch v5</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>12642</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDM1NTgwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyOSBAQAorMjAwOC0wOC0wNSAgUGV0ZXIgS2FzdGluZyAgPHplcm9kcHhAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY2MworICAgICAgICBB
Y2NvdW50IGZvciBwYWludCBhbmQgdGltZXIgbGFnIHdoZW4gYW5pbWF0aW5nIGltYWdlcy4gIEFs
c28gcHJldGVuZAorICAgICAgICB0aGF0IGltYWdlcyB3aG9zZSBhbmltYXRpb25zIHdlcmUgcGF1
c2VkIChieSBiZWNvbWluZyBpbnZpc2libGUpCisgICAgICAgIGNvbnRpbnVlZCB0byBhbmltYXRl
LCBieSAiY2F0Y2hpbmcgdXAiIHRvIHRoZSBjb3JyZWN0IGZyYW1lIHdoZW4gdGhleSdyZQorICAg
ICAgICBzaG93biBhZ2Fpbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmludGVybmFsQWR2YW5jZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisKIDIwMDgtMDgtMDUgIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFBhcnNlIENTUyBBbmltYXRp
b25zLCBpbmNsdWRpbmcgdGhlIG5ldwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMzU1ODApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgpAQCAtNDEsNiArNDIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb25lIGZy
YW1lIGF0IGEgdGltZS4KIGNvbnN0IHVuc2lnbmVkIGNMYXJnZUFuaW1hdGlvbkN1dG9mZiA9IDUy
NDI4ODA7CiAKKy8vIFdoZW4gYW4gYW5pbWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFuIGZpdmUgbWlu
dXRlcyBvdXQgb2YgZGF0ZSwgZG9uJ3QgdHJ5IHRvCisvLyByZXN5bmMgb24gcmVwYWludCwgc28g
d2UgZG9uJ3Qgd2FzdGUgQ1BVIGN5Y2xlcyBvbiBhbiBlZGdlIGNhc2UgdGhlIHVzZXIKKy8vIGRv
ZXNuJ3QgY2FyZSBhYm91dC4KK2NvbnN0IGRvdWJsZSBjQW5pbWF0aW9uUmVzeW5jQ3V0b2ZmID0g
NSAqIDYwOworCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2
ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKICAgICAsIG1fY3VycmVudEZyYW1lKDApCkBAIC00
OCw2ICs1NCw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiAKICAg
ICAsIG1fZnJhbWVUaW1lcigwKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoMCkKICAgICAsIG1f
cmVwZXRpdGlvbnNDb21wbGV0ZSgwKQorICAgICwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUoMCkK
ICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpbmdJbWFnZVR5cGUo
dHJ1ZSkKICAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWQoZmFsc2UpCkBAIC0yMzIsOCArMjM5LDUw
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKCkKICAgICBpZiAoIW1fYWxsRGF0
YVJlY2VpdmVkICYmIG1fcmVwZXRpdGlvbkNvdW50ID09IGNBbmltYXRpb25Mb29wT25jZSAmJiBt
X2N1cnJlbnRGcmFtZSA+PSAoZnJhbWVDb3VudCgpIC0gMSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZnJhbWVUaW1lciA9IG5ldyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcElt
YWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChm
cmFtZUR1cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIC8vIERldGVybWluZSB0
aW1lIGZvciBuZXh0IGZyYW1lIHRvIHN0YXJ0LiAgQnkgaWdub3JpbmcgcGFpbnQgYW5kIHRpbWVy
IGxhZworICAgIC8vIGluIHRoaXMgY2FsY3VsYXRpb24sIHdlIG1ha2UgdGhlIGFuaW1hdGlvbiBh
cHBlYXIgdG8gcnVuIGF0IGl0cyBkZXNpcmVkCisgICAgLy8gcmF0ZSByZWdhcmRsZXNzIG9mIGhv
dyBmYXN0IGl0J3MgYmVpbmcgcmVwYWludGVkLgorICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RHVy
YXRpb24gPSBmcmFtZUR1cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgY29uc3Qg
ZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmIChtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSA9PSAwKSB7CisgICAgICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gdGltZSArIGN1
cnJlbnREdXJhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSArPSBjdXJyZW50RHVyYXRpb247CisgICAgICAgIC8vIElmIHdlJ3JlIHRvbyBmYXIgYmVo
aW5kLCB0aGUgdXNlciBwcm9iYWJseSBkb2Vzbid0IGNhcmUgYWJvdXQKKyAgICAgICAgLy8gcmVz
eW5jaW5nIGFuZCB3ZSBjb3VsZCBidXJuIGEgbG90IG9mIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZy
YW1lcworICAgICAgICAvLyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCisgICAgICAg
IGlmICgodGltZSAtIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKSA+IGNBbmltYXRpb25SZXN5bmND
dXRvZmYpCisgICAgICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJy
ZW50RHVyYXRpb247CisgICAgfQorCisgICAgaWYgKHRpbWUgPCBtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSkgeworICAgICAgICAvLyBIYXZlbid0IHlldCByZWFjaGVkIHRpbWUgZm9yIG5leHQgZnJh
bWUgdG8gc3RhcnQ7IGRlbGF5IHVudGlsIHRoZW4uCisgICAgICAgIG1fZnJhbWVUaW1lciA9IG5l
dyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9u
KTsKKyAgICAgICAgbV9mcmFtZVRpbWVyLT5zdGFydE9uZVNob3QobV9kZXNpcmVkRnJhbWVTdGFy
dFRpbWUgLSB0aW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJl
YWNoZWQgb3IgcGFzc2VkIHRoZSB0aW1lIGZvciB0aGUgbmV4dCBmcmFtZSB0byBzdGFydC4KKyAg
ICAgICAgLy8gU2VlIGlmIHdlJ3ZlIGFsc28gcGFzc2VkIHRoZSB0aW1lIGZvciBmcmFtZXMgYWZ0
ZXIgdGhhdCB0byBzdGFydCwgaW4KKyAgICAgICAgLy8gY2FzZSB3ZSBuZWVkIHRvIHNraXAgc29t
ZSBmcmFtZXMgZW50aXJlbHkuCisgICAgICAgIHNpemVfdCBuZXh0RnJhbWUgPSAobV9jdXJyZW50
RnJhbWUgKyAxKSAlIGZyYW1lQ291bnQoKTsKKyAgICAgICAgd2hpbGUgKG1fc291cmNlLmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgobmV4dEZyYW1lKSkgeworICAgICAgICAgICAgLy8gU2hvdWxkIHdl
IHNraXAgdGhlIGN1cnJlbnQgZnJhbWU/CisgICAgICAgICAgICBkb3VibGUgbmV4dEZyYW1lU3Rh
cnRUaW1lID0gbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKyBmcmFtZUR1cmF0aW9uQXRJbmRleChu
ZXh0RnJhbWUpOworICAgICAgICAgICAgaWYgKHRpbWUgPCBuZXh0RnJhbWVTdGFydFRpbWUpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIFllczsgc2tpcCBvdmVyIGl0
IHdpdGhvdXQgbm90aWZ5aW5nIG91ciBvYnNlcnZlcnMuCisgICAgICAgICAgICBpZiAoIWludGVy
bmFsQWR2YW5jZUFuaW1hdGlvbih0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IG5leHRGcmFtZVN0YXJ0VGltZTsKKyAg
ICAgICAgICAgIG5leHRGcmFtZSA9IChuZXh0RnJhbWUgKyAxKSAlIGZyYW1lQ291bnQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIG5leHQgZnJhbWUgaW1tZWRpYXRlbHkuICBO
b3RlIHRoYXQgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUKKyAgICAgICAgLy8gbWF5IGJlIGluIHRo
ZSBwYXN0LCBtZWFuaW5nIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHdlJ2xs
CisgICAgICAgIC8vIGtpY2sgb2ZmIHRoZSBuZXh0IGFkdmFuY2VtZW50IHNvb25lciB0aGFuIHRo
aXMgZnJhbWUncyBkdXJhdGlvbiB3b3VsZAorICAgICAgICAvLyBzdWdnZXN0LgorICAgICAgICBp
bnRlcm5hbEFkdmFuY2VBbmltYXRpb24oZmFsc2UpOworICAgIH0KIH0KIAogdm9pZCBCaXRtYXBJ
bWFnZTo6c3RvcEFuaW1hdGlvbigpCkBAIC0yNTksMTMgKzMwOCwxOCBAQCB2b2lkIEJpdG1hcElt
YWdlOjpyZXNldEFuaW1hdGlvbigpCiAKIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRp
b24oVGltZXI8Qml0bWFwSW1hZ2U+KiB0aW1lcikKIHsKKyAgICBpbnRlcm5hbEFkdmFuY2VBbmlt
YXRpb24oZmFsc2UpOworfQorCitib29sIEJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmlt
YXRpb24oYm9vbCBza2lwcGluZ0ZyYW1lcykKK3sKICAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24u
CiAgICAgc3RvcEFuaW1hdGlvbigpOwogICAgIAogICAgIC8vIFNlZSBpZiBhbnlvbmUgaXMgc3Rp
bGwgcGF5aW5nIGF0dGVudGlvbiB0byB0aGlzIGFuaW1hdGlvbi4gIElmIG5vdCwgd2UgZG9uJ3QK
ICAgICAvLyBhZHZhbmNlIGFuZCB3aWxsIHJlbWFpbiBzdXNwZW5kZWQgYXQgdGhlIGN1cnJlbnQg
ZnJhbWUgdW50aWwgdGhlIGFuaW1hdGlvbiBpcyByZXN1bWVkLgotICAgIGlmIChpbWFnZU9ic2Vy
dmVyKCktPnNob3VsZFBhdXNlQW5pbWF0aW9uKHRoaXMpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKCFza2lwcGluZ0ZyYW1lcyAmJiBpbWFnZU9ic2VydmVyKCktPnNob3VsZFBhdXNlQW5pbWF0
aW9uKHRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2N1cnJlbnRGcmFtZSsr
OwogICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+PSBmcmFtZUNvdW50KCkpIHsKQEAgLTI3NiwxMiAr
MzMwLDMwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXIKICAgICAg
ICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQoKTsKICAgICAg
ICAgaWYgKG1fcmVwZXRpdGlvbkNvdW50ICYmIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSA+PSBtX3Jl
cGV0aXRpb25Db3VudCkgewogICAgICAgICAgICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IHRydWU7
CisgICAgICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IDA7CiAgICAgICAgICAgICBt
X2N1cnJlbnRGcmFtZS0tOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHNr
aXBwaW5nRnJhbWVzKSB7CisgICAgICAgICAgICAgICAgLy8gVWggb2guICBXZSB0cmllZCB0byBz
a2lwIHBhc3QgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLiAgV2UnZAorICAgICAgICAgICAgICAg
IC8vIGJldHRlciBkcmF3IHRoaXMgbGFzdCBmcmFtZS4KKyAgICAgICAgICAgICAgICBub3RpZnlP
YnNlcnZlckFuZFRyaW1EZWNvZGVkRGF0YSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0gMDsKICAg
ICB9CiAKKyAgICBpZiAoIXNraXBwaW5nRnJhbWVzKQorICAgICAgICBub3RpZnlPYnNlcnZlckFu
ZFRyaW1EZWNvZGVkRGF0YSgpOworCisgICAgLy8gV2UgZG8gbm90IGFkdmFuY2UgdGhlIGFuaW1h
dGlvbiBleHBsaWNpdGx5LiAgV2UgcmVseSBvbiBhIHN1YnNlcXVlbnQgZHJhdyBvZiB0aGUgaW1h
Z2UKKyAgICAvLyB0byBmb3JjZSBhIHJlcXVlc3QgZm9yIHRoZSBuZXh0IGZyYW1lIHZpYSBzdGFy
dEFuaW1hdGlvbigpLiAgVGhpcyBhbGxvd3MgaW1hZ2VzIHRoYXQgbW92ZSBvZmZzY3JlZW4gd2hp
bGUKKyAgICAvLyBzY3JvbGxpbmcgdG8gc3RvcCBhbmltYXRpbmcgKHRodXMgc2F2aW5nIG1lbW9y
eSBmcm9tIGFkZGl0aW9uYWwgZGVjb2RlZCBmcmFtZXMgYW5kCisgICAgLy8gQ1BVIHRpbWUgc3Bl
bnQgZG9pbmcgdGhlIGRlY29kaW5nKS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCaXRt
YXBJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEoKQorewogICAgIC8vIE5v
dGlmeSBvdXIgb2JzZXJ2ZXIgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyBhZHZhbmNlZC4KICAgICBp
bWFnZU9ic2VydmVyKCktPmFuaW1hdGlvbkFkdmFuY2VkKHRoaXMpOwogCkBAIC0yOTUsMTEgKzM2
Nyw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXIKICAgICAgICAg
Ly8gR28gYWhlYWQgYW5kIGRlY29kZSB0aGUgbmV4dCBmcmFtZS4KICAgICAgICAgZnJhbWVBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICB9Ci0gICAgCi0gICAgLy8gV2UgZG8gbm90IGFkdmFu
Y2UgdGhlIGFuaW1hdGlvbiBleHBsaWNpdGx5LiAgV2UgcmVseSBvbiBhIHN1YnNlcXVlbnQgZHJh
dyBvZiB0aGUgaW1hZ2UKLSAgICAvLyB0byBmb3JjZSBhIHJlcXVlc3QgZm9yIHRoZSBuZXh0IGZy
YW1lIHZpYSBzdGFydEFuaW1hdGlvbigpLiAgVGhpcyBhbGxvd3MgaW1hZ2VzIHRoYXQgbW92ZSBv
ZmZzY3JlZW4gd2hpbGUKLSAgICAvLyBzY3JvbGxpbmcgdG8gc3RvcCBhbmltYXRpbmcgKHRodXMg
c2F2aW5nIG1lbW9yeSBmcm9tIGFkZGl0aW9uYWwgZGVjb2RlZCBmcmFtZXMgYW5kCi0gICAgLy8g
Q1BVIHRpbWUgc3BlbnQgZG9pbmcgdGhlIGRlY29kaW5nKS4KIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAzNTU4MCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTYzLDcgKzE2MywxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBzaG91bGRBbmltYXRlKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKCk7CiAgICAgdm9pZCBhZHZhbmNlQW5pbWF0
aW9uKFRpbWVyPEJpdG1hcEltYWdlPiopOwotICAgIAorCisgICAgLy8gRnVuY3Rpb24gdGhhdCBk
b2VzIHRoZSByZWFsIHdvcmsgb2YgYWR2YW5jaW5nIHRoZSBhbmltYXRpb24uICBXaGVuCisgICAg
Ly8gc2tpcHBpbmdGcmFtZXMgaXMgdHJ1ZSwgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGxvb3Ag
dHJ5aW5nIHRvIHNraXAgb3ZlcgorICAgIC8vIGEgYnVuY2ggb2YgYW5pbWF0aW9uIGZyYW1lcywg
c28gd2Ugc2hvdWxkIG5vdCBkbyB0aGluZ3MgbGlrZSBkZWNvZGUgZWFjaAorICAgIC8vIG9uZSBv
ciBub3RpZnkgb3VyIG9ic2VydmVycy4KKyAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGFuaW1h
dGlvbiB3YXMgYWR2YW5jZWQuCisgICAgYm9vbCBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oYm9v
bCBza2lwcGluZ0ZyYW1lcyk7CisKKyAgICAvLyBIZWxwZXIgZm9yIGludGVybmFsQWR2YW5jZUFu
aW1hdGlvbigpLgorICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEoKTsK
KwogICAgIC8vIEhhbmRsZSBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCiAgICAgdm9pZCBpbml0UGxh
dGZvcm1EYXRhKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CkBAIC0xODMs
NiArMTkzLDcgQEAgcHJvdGVjdGVkOgogICAgIFRpbWVyPEJpdG1hcEltYWdlPiogbV9mcmFtZVRp
bWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudDsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0
aW9uIGxvb3BzIHdlIHNob3VsZCBkby4KICAgICBpbnQgbV9yZXBldGl0aW9uc0NvbXBsZXRlOyAg
Ly8gSG93IG1hbnkgcmVwZXRpdGlvbnMgd2UndmUgZmluaXNoZWQuCisgICAgZG91YmxlIG1fZGVz
aXJlZEZyYW1lU3RhcnRUaW1lOyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0IHdoaWNoIHdlIGhvcGUg
dG8gc2VlIHRoZSBuZXh0IGNhbGwgdG8gc3RhcnRBbmltYXRpb24oKS4KIAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0ltYWdlPiBtX25zSW1hZ2U7IC8vIEEgY2Fj
aGVkIE5TSW1hZ2Ugb2YgZnJhbWUgMC4gT25seSBidWlsdCBsYXppbHkgaWYgc29tZW9uZSBhY3R1
YWxseSBxdWVyaWVzIGZvciBvbmUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQ2Fpcm8uY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMzU1ODApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MiwxMyArODIsMTUgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2VfdAog
CiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0
KGRzdCk7CisgICAgc3RhcnRBbmltYXRpb24oKTsKIAogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghaW1hZ2UpIC8vIElm
IGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1
cm47CiAKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOworICAgIEZsb2F0UmVjdCBkc3RSZWN0
KGRzdCk7CisKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmls
bFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgb3ApOwogICAg
ICAgICByZXR1cm47CkBAIC0xMzAsOCArMTMyLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIAogCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKLSAgICBzdGFydEFu
aW1hdGlvbigpOwotCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNl
cnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDM1NTgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw4IEBA
IENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQogCiB2b2lkIEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cCkKIHsKKyAgICBzdGFydEFuaW1hdGlvbigpOworCiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZy
YW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0
b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKQEAg
LTE5Myw4ICsxOTUsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAKICAgICBjdHh0LT5yZXN0b3JlKCk7CiAKLSAgICBzdGFydEFuaW1hdGlvbigpOwotCiAgICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJ
KHJldmlzaW9uIDM1NTgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeworICAgIHN0
YXJ0QW5pbWF0aW9uKCk7CisKICAgICBRUGl4bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDgg
KzEzMyw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBw
YWludGVyLT5kcmF3UGl4bWFwKGRzdCwgKmltYWdlLCBzcmMpOwogCiAgICAgY3R4dC0+cmVzdG9y
ZSgpOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gMzU1ODApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OCw2ICs5OCw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAK
ICAgICB3eFdpbmRvd0RDKiBjb250ZXh0ID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAjZW5k
aWYKIAorICAgIHN0YXJ0QW5pbWF0aW9uKCk7CisKICAgICB3eEJpdG1hcCogYml0bWFwID0gZnJh
bWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBpZiAoIWJpdG1hcCkgLy8gSWYgaXQncyB0
b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJldHVybjsKQEAg
LTE0MSw3ICsxNDMsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgICAgIGJpdG1hcCA9IE5VTEw7CiAgICAgfQogICAgIGN0eHQtPnJlc3RvcmUoKTsKLSAg
ICBzdGFydEFuaW1hdGlvbigpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23768</attachid>
            <date>2008-09-24 15:30:47 -0700</date>
            <delta_ts>2008-09-25 15:55:48 -0700</delta_ts>
            <desc>WIP patch, solves (1) - (4)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19024</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lv
biAzNjg3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC00MSwxNSArNDIsMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb25lIGZyYW1lIGF0IGEgdGltZS4KIGNvbnN0IHVu
c2lnbmVkIGNMYXJnZUFuaW1hdGlvbkN1dG9mZiA9IDUyNDI4ODA7CiAKKy8vIFdoZW4gYW4gYW5p
bWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFuIGZpdmUgbWludXRlcyBvdXQgb2YgZGF0ZSwgZG9uJ3Qg
dHJ5IHRvCisvLyByZXN5bmMgb24gcmVwYWludCwgc28gd2UgZG9uJ3Qgd2FzdGUgQ1BVIGN5Y2xl
cyBvbiBhbiBlZGdlIGNhc2UgdGhlIHVzZXIKKy8vIGRvZXNuJ3QgY2FyZSBhYm91dC4KK2NvbnN0
IGRvdWJsZSBjQW5pbWF0aW9uUmVzeW5jQ3V0b2ZmID0gNSAqIDYwOworCiBCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZl
cikKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9m
cmFtZVRpbWVyKDApCi0gICAgLCBtX3JlcGV0aXRpb25Db3VudCgwKQorICAgICwgbV9yZXBldGl0
aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhV
bmtub3duKQogICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCisgICAgLCBtX2Rlc2lyZWRG
cmFtZVN0YXJ0VGltZSgwKQogICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBtX2Fu
aW1hdGluZ0ltYWdlVHlwZSh0cnVlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkK
ICAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogICAgICwgbV9oYXZlU2l6ZShmYWxzZSkK
QEAgLTEwNiwxNiArMTEzLDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3Qg
aW5kZQogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNTRVJUKG1f
ZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKICAgICAKLSAgICBpZiAoIW1fZnJh
bWVzLnNpemUoKSAmJiBzaG91bGRBbmltYXRlKCkpIHsgICAgICAgICAgICAKLSAgICAgICAgLy8g
U25hZyB0aGUgcmVwZXRpdGlvbiBjb3VudC4gIE5vdGUgdGhhdCB0aGUgcmVwZXRpdGlvbiBjb3Vu
dCBtYXkgbm90IGJlCi0gICAgICAgIC8vIGFjY3VyYXRlIHlldCBmb3IgR0lGczsgaWYgd2UgaGF2
ZW4ndCBnb3R0ZW4gdGhlIGNvdW50IGZyb20gdGhlIHNvdXJjZQotICAgICAgICAvLyBpbWFnZSB5
ZXQsIGl0IHdpbGwgZGVmYXVsdCB0byBjQW5pbWF0aW9uTG9vcE9uY2UsIGFuZCB3ZSdsbCB0cnkg
YW5kCi0gICAgICAgIC8vIHJlYWQgaXQgYWdhaW4gb25jZSB0aGUgd2hvbGUgaW1hZ2UgaXMgZGVj
b2RlZC4KLSAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3NvdXJjZS5yZXBldGl0aW9uQ291
bnQoKTsKLSAgICAgICAgaWYgKG1fcmVwZXRpdGlvbkNvdW50ID09IGNBbmltYXRpb25Ob25lKQot
ICAgICAgICAgICAgbV9hbmltYXRpbmdJbWFnZVR5cGUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCiAg
ICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3Jv
dyhudW1GcmFtZXMpOwogCkBAIC0xMjMsNiArMTIwLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2Fj
aGVGcmFtZShzaXplX3QgaW5kZQogICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tp
bmRleF0ubV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAKKyAgICBtX2Zy
YW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChpbmRleCk7CiAgICAgaWYgKHNob3VsZEFuaW1hdGUoKSkKICAgICAgICAgbV9mcmFtZXNbaW5k
ZXhdLm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CiAg
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJ
bmRleChpbmRleCk7CkBAIC0yMDcsNiArMjA1LDE3IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcElt
YWdlOjpmcmFtZUF0SW5kZXgKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWU7CiB9
CiAKK2Jvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4
KQoreworICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWUpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOworCisgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7Cit9CisKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IGZyYW1lQ291
bnQoKSkKQEAgLTIyOSw5ICsyMzgsMjIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgocwogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKIH0KIAor
aW50IEJpdG1hcEltYWdlOjpyZXBldGl0aW9uQ291bnQoYm9vbCBpbWFnZUtub3duVG9CZUNvbXBs
ZXRlKQoreworICAgIGlmICgobV9yZXBldGl0aW9uQ291bnRTdGF0dXMgPT0gVW5rbm93bikgfHwg
KChtX3JlcGV0aXRpb25Db3VudFN0YXR1cyA9PSBVbmNlcnRhaW4pICYmIGltYWdlS25vd25Ub0Jl
Q29tcGxldGUpKSB7CisgICAgICAgIC8vIFNuYWcgdGhlIHJlcGV0aXRpb24gY291bnQuICBJZiB8
aW1hZ2VLbm93blRvQmVDb21wbGV0ZXwgaXMgZmFsc2UsIHRoZQorICAgICAgICAvLyByZXBldGl0
aW9uIGNvdW50IG1heSBub3QgYmUgYWNjdXJhdGUgeWV0IGZvciBHSUZzOyBpbiB0aGlzIGNhc2Ug
dGhlCisgICAgICAgIC8vIGRlY29kZXIgd2lsbCBkZWZhdWx0IHRvIGNBbmltYXRpb25Mb29wT25j
ZSwgYW5kIHdlJ2xsIHRyeSBhbmQgcmVhZAorICAgICAgICAvLyB0aGUgY291bnQgYWdhaW4gb25j
ZSB0aGUgd2hvbGUgaW1hZ2UgaXMgZGVjb2RlZC4KKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQg
PSBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQoKTsKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnRT
dGF0dXMgPSAoaW1hZ2VLbm93blRvQmVDb21wbGV0ZSB8fCBtX3JlcGV0aXRpb25Db3VudCA9PSBj
QW5pbWF0aW9uTm9uZSkgPyBDZXJ0YWluIDogVW5jZXJ0YWluOworICAgIH0KKyAgICByZXR1cm4g
bV9yZXBldGl0aW9uQ291bnQ7Cit9CisKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZEFuaW1hdGUo
KQogewotICAgIHJldHVybiAobV9hbmltYXRpbmdJbWFnZVR5cGUgJiYgIW1fYW5pbWF0aW9uRmlu
aXNoZWQgJiYgaW1hZ2VPYnNlcnZlcigpKTsKKyAgICByZXR1cm4gKHJlcGV0aXRpb25Db3VudChm
YWxzZSkgIT0gY0FuaW1hdGlvbk5vbmUgJiYgIW1fYW5pbWF0aW9uRmluaXNoZWQgJiYgaW1hZ2VP
YnNlcnZlcigpKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oKQpAQCAt
MjQwLDE4ICsyNjIsNjAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBEb24ndCBhZHZhbmNlIHRoZSBhbmltYXRpb24gdW50aWwg
dGhlIGN1cnJlbnQgZnJhbWUgaGFzIGNvbXBsZXRlbHkgbG9hZGVkLgotICAgIGlmICghbV9zb3Vy
Y2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCisgICAgaWYgKCFmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KG1fY3VycmVudEZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRG9uJ3QgYWR2YW5jZSBwYXN0IHRoZSBsYXN0IGZyYW1lIGlmIHdlIGhhdmVuJ3QgZGVj
b2RlZCB0aGUgd2hvbGUgaW1hZ2UKICAgICAvLyB5ZXQgYW5kIG91ciByZXBldGl0aW9uIGNvdW50
IGlzIHBvdGVudGlhbGx5IHVuc2V0LiAgVGhlIHJlcGV0aXRpb24gY291bnQKICAgICAvLyBpbiBh
IEdJRiBjYW4gcG90ZW50aWFsbHkgY29tZSBhZnRlciBhbGwgdGhlIHJlc3Qgb2YgdGhlIGltYWdl
IGRhdGEsIHNvCiAgICAgLy8gd2FpdCBvbiBpdC4KLSAgICBpZiAoIW1fYWxsRGF0YVJlY2VpdmVk
ICYmIG1fcmVwZXRpdGlvbkNvdW50ID09IGNBbmltYXRpb25Mb29wT25jZSAmJiBtX2N1cnJlbnRG
cmFtZSA+PSAoZnJhbWVDb3VudCgpIC0gMSkpCisgICAgaWYgKCFtX2FsbERhdGFSZWNlaXZlZCAm
JiByZXBldGl0aW9uQ291bnQoZmFsc2UpID09IGNBbmltYXRpb25Mb29wT25jZSAmJiBtX2N1cnJl
bnRGcmFtZSA+PSAoZnJhbWVDb3VudCgpIC0gMSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZnJhbWVUaW1lciA9IG5ldyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjph
ZHZhbmNlQW5pbWF0aW9uKTsKLSAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChmcmFtZUR1
cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpOworICAgIC8vIERldGVybWluZSB0aW1lIGZv
ciBuZXh0IGZyYW1lIHRvIHN0YXJ0LiAgQnkgaWdub3JpbmcgcGFpbnQgYW5kIHRpbWVyIGxhZwor
ICAgIC8vIGluIHRoaXMgY2FsY3VsYXRpb24sIHdlIG1ha2UgdGhlIGFuaW1hdGlvbiBhcHBlYXIg
dG8gcnVuIGF0IGl0cyBkZXNpcmVkCisgICAgLy8gcmF0ZSByZWdhcmRsZXNzIG9mIGhvdyBmYXN0
IGl0J3MgYmVpbmcgcmVwYWludGVkLgorICAgIGNvbnN0IGRvdWJsZSBjdXJyZW50RHVyYXRpb24g
PSBmcmFtZUR1cmF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgY29uc3QgZG91Ymxl
IHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlmIChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9
PSAwKSB7CisgICAgICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gdGltZSArIGN1cnJlbnRE
dXJhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSAr
PSBjdXJyZW50RHVyYXRpb247CisgICAgICAgIC8vIElmIHdlJ3JlIHRvbyBmYXIgYmVoaW5kLCB0
aGUgdXNlciBwcm9iYWJseSBkb2Vzbid0IGNhcmUgYWJvdXQKKyAgICAgICAgLy8gcmVzeW5jaW5n
IGFuZCB3ZSBjb3VsZCBidXJuIGEgbG90IG9mIHRpbWUgbG9vcGluZyB0aHJvdWdoIGZyYW1lcwor
ICAgICAgICAvLyBiZWxvdy4gIEp1c3QgcmVzZXQgdGhlIHRpbWluZ3MuCisgICAgICAgIGlmICgo
dGltZSAtIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lKSA+IGNBbmltYXRpb25SZXN5bmNDdXRvZmYp
CisgICAgICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVy
YXRpb247CisgICAgfQorCisgICAgaWYgKHRpbWUgPCBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSkg
eworICAgICAgICAvLyBIYXZlbid0IHlldCByZWFjaGVkIHRpbWUgZm9yIG5leHQgZnJhbWUgdG8g
c3RhcnQ7IGRlbGF5IHVudGlsIHRoZW4uCisgICAgICAgIG1fZnJhbWVUaW1lciA9IG5ldyBUaW1l
cjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKKyAg
ICAgICAgbV9mcmFtZVRpbWVyLT5zdGFydE9uZVNob3QobV9kZXNpcmVkRnJhbWVTdGFydFRpbWUg
LSB0aW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQg
b3IgcGFzc2VkIHRoZSB0aW1lIGZvciB0aGUgbmV4dCBmcmFtZSB0byBzdGFydC4KKyAgICAgICAg
Ly8gU2VlIGlmIHdlJ3ZlIGFsc28gcGFzc2VkIHRoZSB0aW1lIGZvciBmcmFtZXMgYWZ0ZXIgdGhh
dCB0byBzdGFydCwgaW4KKyAgICAgICAgLy8gY2FzZSB3ZSBuZWVkIHRvIHNraXAgc29tZSBmcmFt
ZXMgZW50aXJlbHkuCisgICAgICAgIHNpemVfdCBuZXh0RnJhbWUgPSAobV9jdXJyZW50RnJhbWUg
KyAxKSAlIGZyYW1lQ291bnQoKTsKKyAgICAgICAgd2hpbGUgKGZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgobmV4dEZyYW1lKSkgeworICAgICAgICAgICAgLy8gU2hvdWxkIHdlIHNraXAgdGhlIGN1cnJl
bnQgZnJhbWU/CisgICAgICAgICAgICBkb3VibGUgbmV4dEZyYW1lU3RhcnRUaW1lID0gbV9kZXNp
cmVkRnJhbWVTdGFydFRpbWUgKyBmcmFtZUR1cmF0aW9uQXRJbmRleChuZXh0RnJhbWUpOworICAg
ICAgICAgICAgaWYgKHRpbWUgPCBuZXh0RnJhbWVTdGFydFRpbWUpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIC8vIFllczsgc2tpcCBvdmVyIGl0IHdpdGhvdXQgbm90aWZ5
aW5nIG91ciBvYnNlcnZlcnMuCisgICAgICAgICAgICBpZiAoIWludGVybmFsQWR2YW5jZUFuaW1h
dGlvbih0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2Rlc2ly
ZWRGcmFtZVN0YXJ0VGltZSA9IG5leHRGcmFtZVN0YXJ0VGltZTsKKyAgICAgICAgICAgIG5leHRG
cmFtZSA9IChuZXh0RnJhbWUgKyAxKSAlIGZyYW1lQ291bnQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIERyYXcgdGhlIG5leHQgZnJhbWUgaW1tZWRpYXRlbHkuICBOb3RlIHRoYXQgbV9kZXNp
cmVkRnJhbWVTdGFydFRpbWUKKyAgICAgICAgLy8gbWF5IGJlIGluIHRoZSBwYXN0LCBtZWFuaW5n
IHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHdlJ2xsCisgICAgICAgIC8vIGtp
Y2sgb2ZmIHRoZSBuZXh0IGFkdmFuY2VtZW50IHNvb25lciB0aGFuIHRoaXMgZnJhbWUncyBkdXJh
dGlvbiB3b3VsZAorICAgICAgICAvLyBzdWdnZXN0LgorICAgICAgICBpbnRlcm5hbEFkdmFuY2VB
bmltYXRpb24oZmFsc2UpOworICAgIH0KIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1h
dGlvbigpCkBAIC0yNjcsNiArMzMxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRp
b24oKQogICAgIHN0b3BBbmltYXRpb24oKTsKICAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CiAgICAg
bV9yZXBldGl0aW9uc0NvbXBsZXRlID0gMDsKKyAgICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9
IDA7CiAgICAgbV9hbmltYXRpb25GaW5pc2hlZCA9IGZhbHNlOwogICAgIGludCBmcmFtZVNpemUg
PSBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7CiAgICAgCkBAIC0yNzcsMjkg
KzM0Miw1MSBAQCB2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCiAKIHZvaWQgQml0
bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24oVGltZXI8Qml0bWFwSW1hZ2U+KiB0aW1lcikKIHsK
KyAgICBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oZmFsc2UpOworfQorCitib29sIEJpdG1hcElt
YWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oYm9vbCBza2lwcGluZ0ZyYW1lcykKK3sKICAg
ICAvLyBTdG9wIHRoZSBhbmltYXRpb24uCiAgICAgc3RvcEFuaW1hdGlvbigpOwogICAgIAogICAg
IC8vIFNlZSBpZiBhbnlvbmUgaXMgc3RpbGwgcGF5aW5nIGF0dGVudGlvbiB0byB0aGlzIGFuaW1h
dGlvbi4gIElmIG5vdCwgd2UgZG9uJ3QKICAgICAvLyBhZHZhbmNlIGFuZCB3aWxsIHJlbWFpbiBz
dXNwZW5kZWQgYXQgdGhlIGN1cnJlbnQgZnJhbWUgdW50aWwgdGhlIGFuaW1hdGlvbiBpcyByZXN1
bWVkLgotICAgIGlmIChpbWFnZU9ic2VydmVyKCktPnNob3VsZFBhdXNlQW5pbWF0aW9uKHRoaXMp
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFza2lwcGluZ0ZyYW1lcyAmJiBpbWFnZU9ic2Vy
dmVyKCktPnNob3VsZFBhdXNlQW5pbWF0aW9uKHRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBtX2N1cnJlbnRGcmFtZSsrOwogICAgIGlmIChtX2N1cnJlbnRGcmFtZSA+PSBmcmFt
ZUNvdW50KCkpIHsKLSAgICAgICAgbV9yZXBldGl0aW9uc0NvbXBsZXRlICs9IDE7CisgICAgICAg
ICsrbV9yZXBldGl0aW9uc0NvbXBsZXRlOwogICAgICAgICAvLyBHZXQgdGhlIHJlcGV0aXRpb24g
Y291bnQgYWdhaW4uICBJZiB3ZSB3ZXJlbid0IGFibGUgdG8gZ2V0IGEKICAgICAgICAgLy8gcmVw
ZXRpdGlvbiBjb3VudCBiZWZvcmUsIHdlIHNob3VsZCBoYXZlIGRlY29kZWQgdGhlIHdob2xlIGlt
YWdlIGJ5CiAgICAgICAgIC8vIG5vdywgc28gaXQgc2hvdWxkIG5vdyBiZSBhdmFpbGFibGUuCi0g
ICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9zb3VyY2UucmVwZXRpdGlvbkNvdW50KCk7Ci0g
ICAgICAgIGlmIChtX3JlcGV0aXRpb25Db3VudCAmJiBtX3JlcGV0aXRpb25zQ29tcGxldGUgPj0g
bV9yZXBldGl0aW9uQ291bnQpIHsKKyAgICAgICAgaWYgKHJlcGV0aXRpb25Db3VudCh0cnVlKSAm
JiBtX3JlcGV0aXRpb25zQ29tcGxldGUgPj0gbV9yZXBldGl0aW9uQ291bnQpIHsKICAgICAgICAg
ICAgIG1fYW5pbWF0aW9uRmluaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUgPSAwOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUtLTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChza2lwcGluZ0ZyYW1lcykgeworICAgICAgICAg
ICAgICAgIC8vIFVoIG9oLiAgV2UgdHJpZWQgdG8gc2tpcCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFu
aW1hdGlvbi4gIFdlJ2QKKyAgICAgICAgICAgICAgICAvLyBiZXR0ZXIgZHJhdyB0aGlzIGxhc3Qg
ZnJhbWUuCisgICAgICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IDA7CiAgICAgfQogCisgICAgaWYgKCFza2lwcGluZ0Zy
YW1lcykKKyAgICAgICAgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEoKTsKKworICAg
IC8vIFdlIGRvIG5vdCBhZHZhbmNlIHRoZSBhbmltYXRpb24gZXhwbGljaXRseS4gIFdlIHJlbHkg
b24gYSBzdWJzZXF1ZW50IGRyYXcgb2YgdGhlIGltYWdlCisgICAgLy8gdG8gZm9yY2UgYSByZXF1
ZXN0IGZvciB0aGUgbmV4dCBmcmFtZSB2aWEgc3RhcnRBbmltYXRpb24oKS4gIFRoaXMgYWxsb3dz
IGltYWdlcyB0aGF0IG1vdmUgb2Zmc2NyZWVuIHdoaWxlCisgICAgLy8gc2Nyb2xsaW5nIHRvIHN0
b3AgYW5pbWF0aW5nICh0aHVzIHNhdmluZyBtZW1vcnkgZnJvbSBhZGRpdGlvbmFsIGRlY29kZWQg
ZnJhbWVzIGFuZAorICAgIC8vIENQVSB0aW1lIHNwZW50IGRvaW5nIHRoZSBkZWNvZGluZykuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6Om5vdGlmeU9ic2VydmVyQW5k
VHJpbURlY29kZWREYXRhKCkKK3sKICAgICAvLyBOb3RpZnkgb3VyIG9ic2VydmVyIHRoYXQgdGhl
IGFuaW1hdGlvbiBoYXMgYWR2YW5jZWQuCiAgICAgaW1hZ2VPYnNlcnZlcigpLT5hbmltYXRpb25B
ZHZhbmNlZCh0aGlzKTsKIApAQCAtMzEzLDExICs0MDAsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjph
ZHZhbmNlQW5pbWF0aW9uKFRpbWVyCiAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBkZWNvZGUgdGhl
IG5leHQgZnJhbWUuCiAgICAgICAgIGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAg
fQotICAgIAotICAgIC8vIFdlIGRvIG5vdCBhZHZhbmNlIHRoZSBhbmltYXRpb24gZXhwbGljaXRs
eS4gIFdlIHJlbHkgb24gYSBzdWJzZXF1ZW50IGRyYXcgb2YgdGhlIGltYWdlCi0gICAgLy8gdG8g
Zm9yY2UgYSByZXF1ZXN0IGZvciB0aGUgbmV4dCBmcmFtZSB2aWEgc3RhcnRBbmltYXRpb24oKS4g
IFRoaXMgYWxsb3dzIGltYWdlcyB0aGF0IG1vdmUgb2Zmc2NyZWVuIHdoaWxlCi0gICAgLy8gc2Ny
b2xsaW5nIHRvIHN0b3AgYW5pbWF0aW5nICh0aHVzIHNhdmluZyBtZW1vcnkgZnJvbSBhZGRpdGlv
bmFsIGRlY29kZWQgZnJhbWVzIGFuZAotICAgIC8vIENQVSB0aW1lIHNwZW50IGRvaW5nIHRoZSBk
ZWNvZGluZykuCiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgJKHJldmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBUaW1lcjsKIHN0cnVjdCBGcmFtZURhdGEgOiBOb25jb3B5YWJsZSB7CiAg
ICAgRnJhbWVEYXRhKCkKICAgICAgICAgOiBtX2ZyYW1lKDApCisgICAgICAgICwgbV9pc0NvbXBs
ZXRlKGZhbHNlKQogICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgLCBtX2hhc0FscGhh
KHRydWUpIAogICAgIHsKQEAgLTc5LDYgKzgwLDcgQEAgc3RydWN0IEZyYW1lRGF0YSA6IE5vbmNv
cHlhYmxlIHsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ZyYW1l
OworICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGZsb2F0IG1fZHVyYXRpb247CiAgICAgYm9v
bCBtX2hhc0FscGhhOwogfTsKQEAgLTEzNiw2ICsxMzgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSB7IHJldHVybiBm
cmFtZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CiAKIHByb3RlY3RlZDoKKyAgICBlbnVtIFJl
cGV0aXRpb25Db3VudFN0YXR1cyB7CisgICAgICBVbmtub3duLCAgICAvLyBXZSBoYXZlbid0IGNo
ZWNrZWQgdGhlIHNvdXJjZSdzIHJlcGV0aXRpb24gY291bnQuCisgICAgICBVbmNlcnRhaW4sICAv
LyBXZSBoYXZlIGEgcmVwZXRpdGlvbiBjb3VudCwgYnV0IGl0IG1pZ2h0IGJlIHdyb25nIChzb21l
IEdJRnMgaGF2ZSBhIGNvdW50IGFmdGVyIHRoZSBpbWFnZSBkYXRhLCBhbmQgd2lsbCByZXBvcnQg
Imxvb3Agb25jZSIgdW50aWwgYWxsIGRhdGEgaGFzIGJlZW4gZGVjb2RlZCkuCisgICAgICBDZXJ0
YWluLCAgICAvLyBUaGUgcmVwZXRpdGlvbiBjb3VudCBpcyBrbm93biB0byBiZSBjb3JyZWN0Lgor
ICAgIH07CisKICAgICBCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciwgSW1hZ2VPYnNlcnZlciog
PSAwKTsKICAgICBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwogCkBAIC0xNTAsNiAr
MTU4LDcgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRGcmFtZTsgfQogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAgICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCk7CisgICAgYm9vbCBmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCk7CiAgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
KTsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7IAogCkBAIC0xNjQsMTAg
KzE3MywyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKIAogICAg
IC8vIEFuaW1hdGlvbi4KKyAgICBpbnQgcmVwZXRpdGlvbkNvdW50KGJvb2wgaW1hZ2VLbm93blRv
QmVDb21wbGV0ZSk7ICAvLyB8aW1hZ2VLbm93blRvQmVDb21wbGV0ZXwgc2hvdWxkIGJlIHNldCBp
ZiB0aGUgY2FsbGVyIGtub3dzIHRoZSBlbnRpcmUgaW1hZ2UgaGFzIGJlZW4gZGVjb2RlZC4KICAg
ICBib29sIHNob3VsZEFuaW1hdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb24o
KTsKICAgICB2b2lkIGFkdmFuY2VBbmltYXRpb24oVGltZXI8Qml0bWFwSW1hZ2U+Kik7Ci0gICAg
CisKKyAgICAvLyBGdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHJlYWwgd29yayBvZiBhZHZhbmNpbmcg
dGhlIGFuaW1hdGlvbi4gIFdoZW4KKyAgICAvLyBza2lwcGluZ0ZyYW1lcyBpcyB0cnVlLCB3ZSdy
ZSBpbiB0aGUgbWlkZGxlIG9mIGEgbG9vcCB0cnlpbmcgdG8gc2tpcCBvdmVyCisgICAgLy8gYSBi
dW5jaCBvZiBhbmltYXRpb24gZnJhbWVzLCBzbyB3ZSBzaG91bGQgbm90IGRvIHRoaW5ncyBsaWtl
IGRlY29kZSBlYWNoCisgICAgLy8gb25lIG9yIG5vdGlmeSBvdXIgb2JzZXJ2ZXJzLgorICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGUgYW5pbWF0aW9uIHdhcyBhZHZhbmNlZC4KKyAgICBib29sIGlu
dGVybmFsQWR2YW5jZUFuaW1hdGlvbihib29sIHNraXBwaW5nRnJhbWVzKTsKKworICAgIC8vIEhl
bHBlciBmb3IgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKCkuCisgICAgdm9pZCBub3RpZnlPYnNl
cnZlckFuZFRyaW1EZWNvZGVkRGF0YSgpOworCiAgICAgLy8gSGFuZGxlIHBsYXRmb3JtLXNwZWNp
ZmljIGRhdGEKICAgICB2b2lkIGluaXRQbGF0Zm9ybURhdGEoKTsKICAgICB2b2lkIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKQEAgLTE4NSw4ICsyMDUsMTAgQEAgcHJvdGVjdGVkOgogICAgIFZl
Y3RvcjxGcmFtZURhdGE+IG1fZnJhbWVzOyAvLyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1l
cyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZlIHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4g
dGhlIGNhY2hlLgogICAgIAogICAgIFRpbWVyPEJpdG1hcEltYWdlPiogbV9mcmFtZVRpbWVyOwot
ICAgIGludCBtX3JlcGV0aXRpb25Db3VudDsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxv
b3BzIHdlIHNob3VsZCBkby4KKyAgICBpbnQgbV9yZXBldGl0aW9uQ291bnQ7IC8vIEhvdyBtYW55
IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBzaG91bGQgZG8uICBUaGlzIHdpbGwgYmUgY0FuaW1h
dGlvbk5vbmUgaWYgdGhpcyBpbWFnZSB0eXBlIGlzIGluY2FwYWJsZSBvZiBhbmltYXRpb24uCisg
ICAgUmVwZXRpdGlvbkNvdW50U3RhdHVzIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzOwogICAgIGlu
dCBtX3JlcGV0aXRpb25zQ29tcGxldGU7ICAvLyBIb3cgbWFueSByZXBldGl0aW9ucyB3ZSd2ZSBm
aW5pc2hlZC4KKyAgICBkb3VibGUgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWU7ICAvLyBUaGUgc3lz
dGVtIHRpbWUgYXQgd2hpY2ggd2UgaG9wZSB0byBzZWUgdGhlIG5leHQgY2FsbCB0byBzdGFydEFu
aW1hdGlvbigpLgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG11dGFibGUgUmV0YWluUHRyPE5T
SW1hZ2U+IG1fbnNJbWFnZTsgLy8gQSBjYWNoZWQgTlNJbWFnZSBvZiBmcmFtZSAwLiBPbmx5IGJ1
aWx0IGxhemlseSBpZiBzb21lb25lIGFjdHVhbGx5IHF1ZXJpZXMgZm9yIG9uZS4KQEAgLTE5Niw3
ICsyMTgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29sb3IgbV9zb2xpZENvbG9yOyAgLy8gSWYgd2Un
cmUgYSAxeDEgc29saWQgY29sb3IsIHRoaXMgaXMgdGhlIGNvbG9yIHRvIHVzZSB0byBmaWxsLgog
ICAgIGJvb2wgbV9pc1NvbGlkQ29sb3I7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgYSAxeDEg
c29saWQgaW1hZ2UuCiAKLSAgICBib29sIG1fYW5pbWF0aW5nSW1hZ2VUeXBlOyAgLy8gV2hldGhl
ciBvciBub3Qgd2UncmUgYW4gaW1hZ2UgdHlwZSB0aGF0IGlzIGNhcGFibGUgb2YgYW5pbWF0aW5n
IChHSUYpLgogICAgIGJvb2wgbV9hbmltYXRpb25GaW5pc2hlZDsgIC8vIFdoZXRoZXIgb3Igbm90
IHdlJ3ZlIGNvbXBsZXRlZCB0aGUgZW50aXJlIGFuaW1hdGlvbi4KIAogICAgIGJvb2wgbV9hbGxE
YXRhUmVjZWl2ZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSd2ZSByZWNlaXZlZCBhbGwgb3VyIGRh
dGEuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWly
by5jcHAJKHJldmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCB2b2lkIEZy
YW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShtX2ZyYW1lKTsKICAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1faXND
b21wbGV0ZSA9IGZhbHNlOwogICAgICAgICBtX2R1cmF0aW9uID0gMC47CiAgICAgICAgIG1faGFz
QWxwaGEgPSB0cnVlOwogICAgIH0KQEAgLTUzLDcgKzU0LDggQEAgQml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKGNhaXJvX3N1cmZhY2VfdAogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1f
ZnJhbWVzKDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50
KDApCisgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAgICAsIG1fcmVw
ZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCiAgICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUo
MCkKICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpbmdJbWFnZVR5
cGUoZmFsc2UpCkBAIC04MiwxMyArODQsMTUgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNh
aXJvX3N1cmZhY2VfdAogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKIHsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwotICAgIEZs
b2F0UmVjdCBkc3RSZWN0KGRzdCk7CisgICAgc3RhcnRBbmltYXRpb24oKTsKIAogICAgIGNhaXJv
X3N1cmZhY2VfdCogaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlm
ICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0
LgogICAgICAgICByZXR1cm47CiAKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOworICAgIEZs
b2F0UmVjdCBkc3RSZWN0KGRzdCk7CisKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkp
IHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdFJlY3QsIHNvbGlkQ29s
b3IoKSwgb3ApOwogICAgICAgICByZXR1cm47CkBAIC0xMzEsOCArMTM1LDYgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7
CiAKLSAgICBzdGFydEFuaW1hdGlvbigpOwotCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAg
ICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiAzNjg3MCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDYgKzUyLDcgQEAgdm9pZCBGcmFtZURhdGE6OmNsZWFyKCkKICAgICBpZiAobV9mcmFtZSkgewog
ICAgICAgICBDR0ltYWdlUmVsZWFzZShtX2ZyYW1lKTsKICAgICAgICAgbV9mcmFtZSA9IDA7Cisg
ICAgICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgICBtX2R1cmF0aW9uID0gMC4wZjsK
ICAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiAgICAgfQpAQCAtNjYsMTAgKzY3LDEwIEBAIEJp
dG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW0KICAgICAsIG1fY3VycmVudEZy
YW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCi0gICAgLCBt
X3JlcGV0aXRpb25Db3VudCgwKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5v
bmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQogICAgICwgbV9yZXBl
dGl0aW9uc0NvbXBsZXRlKDApCiAgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1f
YW5pbWF0aW5nSW1hZ2VUeXBlKGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZCh0cnVl
KQogICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQodHJ1ZSkKICAgICAsIG1faGF2ZVNpemUodHJ1ZSkK
QEAgLTEyOSw2ICsxMzAsOCBAQCBDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVm
KCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CisgICAgc3RhcnRBbmltYXRpb24oKTsKKwogICAgIENH
SW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICgh
aW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0Lgog
ICAgICAgICByZXR1cm47CkBAIC0xOTMsOCArMTk2LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgY3R4dC0+cmVzdG9yZSgpOwogCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLQogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2Jz
ZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcAkocmV2aXNpb24gMzY4NzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHZv
aWQgRnJhbWVEYXRhOjpjbGVhcigpCiB7CiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgbV9m
cmFtZSA9IDA7CisgICAgICAgIG1faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgICBtX2R1cmF0
aW9uID0gMC4wZjsKICAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiAgICAgfQpAQCAtMTA4LDYg
KzEwOSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQogeworICAgIHN0YXJ0QW5pbWF0aW9uKCk7CisKICAgICBRUGl4bWFw
KiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTMxLDggKzEzNCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBwYWludGVyLT5kcmF3UGl4bWFwKGRzdCwgKmltYWdl
LCBzcmMpOwogCiAgICAgY3R4dC0+cmVzdG9yZSgpOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsK
IH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5j
cHAJKHJldmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCB2b2lkIEZyYW1lRGF0YTo6
Y2xlYXIoKQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwogICAg
ICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgICAg
IG1fZHVyYXRpb24gPSAwLjsKICAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiAgICAgfQpAQCAt
OTgsNiArOTksOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAg
ICAgd3hXaW5kb3dEQyogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlm
CiAKKyAgICBzdGFydEFuaW1hdGlvbigpOworCiAgICAgd3hCaXRtYXAqIGJpdG1hcCA9IGZyYW1l
QXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFiaXRtYXApIC8vIElmIGl0J3MgdG9v
IGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CkBAIC0x
NDEsNyArMTQ0LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAog
ICAgICAgICBiaXRtYXAgPSBOVUxMOwogICAgIH0KICAgICBjdHh0LT5yZXN0b3JlKCk7Ci0gICAg
c3RhcnRBbmltYXRpb24oKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23826</attachid>
            <date>2008-09-25 15:55:48 -0700</date>
            <delta_ts>2008-09-26 13:53:08 -0700</delta_ts>
            <desc>WIP patch, solves (1) - (4), (6), (7)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21526</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHJldmlz
aW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbWFnZU9ic2VydmVy
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTQxLDE1ICs0Miwy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBvbmUgZnJhbWUgYXQgYSB0aW1lLgogY29uc3Qg
dW5zaWduZWQgY0xhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gNTI0Mjg4MDsKIAorLy8gV2hlbiBhbiBh
bmltYXRlZCBpbWFnZSBpcyBtb3JlIHRoYW4gZml2ZSBtaW51dGVzIG91dCBvZiBkYXRlLCBkb24n
dCB0cnkgdG8KKy8vIHJlc3luYyBvbiByZXBhaW50LCBzbyB3ZSBkb24ndCB3YXN0ZSBDUFUgY3lj
bGVzIG9uIGFuIGVkZ2UgY2FzZSB0aGUgdXNlcgorLy8gZG9lc24ndCBjYXJlIGFib3V0LgorY29u
c3QgZG91YmxlIGNBbmltYXRpb25SZXN5bmNDdXRvZmYgPSA1ICogNjA7CisKIEJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2Vy
dmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCiAgICAgLCBt
X2ZyYW1lVGltZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50KDApCisgICAgLCBtX3JlcGV0
aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAgICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVz
KFVua25vd24pCiAgICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUoMCkKKyAgICAsIG1fZGVzaXJl
ZEZyYW1lU3RhcnRUaW1lKDApCiAgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1f
YW5pbWF0aW5nSW1hZ2VUeXBlKHRydWUpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKGZhbHNl
KQogICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCiAgICAgLCBtX2hhdmVTaXplKGZhbHNl
KQpAQCAtMTA2LDE2ICsxMTMsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVf
dCBpbmRlCiAgICAgc2l6ZV90IG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBBU1NFUlQo
bV9kZWNvZGVkU2l6ZSA9PSAwIHx8IG51bUZyYW1lcyA+IDEpOwogICAgIAotICAgIGlmICghbV9m
cmFtZXMuc2l6ZSgpICYmIHNob3VsZEFuaW1hdGUoKSkgeyAgICAgICAgICAgIAotICAgICAgICAv
LyBTbmFnIHRoZSByZXBldGl0aW9uIGNvdW50LiAgTm90ZSB0aGF0IHRoZSByZXBldGl0aW9uIGNv
dW50IG1heSBub3QgYmUKLSAgICAgICAgLy8gYWNjdXJhdGUgeWV0IGZvciBHSUZzOyBpZiB3ZSBo
YXZlbid0IGdvdHRlbiB0aGUgY291bnQgZnJvbSB0aGUgc291cmNlCi0gICAgICAgIC8vIGltYWdl
IHlldCwgaXQgd2lsbCBkZWZhdWx0IHRvIGNBbmltYXRpb25Mb29wT25jZSwgYW5kIHdlJ2xsIHRy
eSBhbmQKLSAgICAgICAgLy8gcmVhZCBpdCBhZ2FpbiBvbmNlIHRoZSB3aG9sZSBpbWFnZSBpcyBk
ZWNvZGVkLgotICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fc291cmNlLnJlcGV0aXRpb25D
b3VudCgpOwotICAgICAgICBpZiAobV9yZXBldGl0aW9uQ291bnQgPT0gY0FuaW1hdGlvbk5vbmUp
Ci0gICAgICAgICAgICBtX2FuaW1hdGluZ0ltYWdlVHlwZSA9IGZhbHNlOwotICAgIH0KLSAgICAK
ICAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJhbWVzKQogICAgICAgICBtX2ZyYW1lcy5n
cm93KG51bUZyYW1lcyk7CiAKQEAgLTEyMyw2ICsxMjAsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKHNpemVfdCBpbmRlCiAgICAgaWYgKG51bUZyYW1lcyA9PSAxICYmIG1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lKQogICAgICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIAorICAgIG1f
ZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdElu
ZGV4KGluZGV4KTsKICAgICBpZiAoc2hvdWxkQW5pbWF0ZSgpKQogICAgICAgICBtX2ZyYW1lc1tp
bmRleF0ubV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsK
ICAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYSA9IG1fc291cmNlLmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KTsKQEAgLTIwNyw2ICsyMDUsMTcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFw
SW1hZ2U6OmZyYW1lQXRJbmRleAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsK
IH0KIAorYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpCit7CisgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCk7CisKKyAgICByZXR1cm4gbV9m
cmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKK30KKwogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVD
b3VudCgpKQpAQCAtMjI5LDkgKzIzOCwyMiBAQCBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0Fs
cGhhQXRJbmRleChzCiAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhOwogfQog
CitpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29t
cGxldGUpCit7CisgICAgaWYgKChtX3JlcGV0aXRpb25Db3VudFN0YXR1cyA9PSBVbmtub3duKSB8
fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzID09IFVuY2VydGFpbikgJiYgaW1hZ2VLbm93blRv
QmVDb21wbGV0ZSkpIHsKKyAgICAgICAgLy8gU25hZyB0aGUgcmVwZXRpdGlvbiBjb3VudC4gIElm
IHxpbWFnZUtub3duVG9CZUNvbXBsZXRlfCBpcyBmYWxzZSwgdGhlCisgICAgICAgIC8vIHJlcGV0
aXRpb24gY291bnQgbWF5IG5vdCBiZSBhY2N1cmF0ZSB5ZXQgZm9yIEdJRnM7IGluIHRoaXMgY2Fz
ZSB0aGUKKyAgICAgICAgLy8gZGVjb2RlciB3aWxsIGRlZmF1bHQgdG8gY0FuaW1hdGlvbkxvb3BP
bmNlLCBhbmQgd2UnbGwgdHJ5IGFuZCByZWFkCisgICAgICAgIC8vIHRoZSBjb3VudCBhZ2FpbiBv
bmNlIHRoZSB3aG9sZSBpbWFnZSBpcyBkZWNvZGVkLgorICAgICAgICBtX3JlcGV0aXRpb25Db3Vu
dCA9IG1fc291cmNlLnJlcGV0aXRpb25Db3VudCgpOworICAgICAgICBtX3JlcGV0aXRpb25Db3Vu
dFN0YXR1cyA9IChpbWFnZUtub3duVG9CZUNvbXBsZXRlIHx8IG1fcmVwZXRpdGlvbkNvdW50ID09
IGNBbmltYXRpb25Ob25lKSA/IENlcnRhaW4gOiBVbmNlcnRhaW47CisgICAgfQorICAgIHJldHVy
biBtX3JlcGV0aXRpb25Db3VudDsKK30KKwogYm9vbCBCaXRtYXBJbWFnZTo6c2hvdWxkQW5pbWF0
ZSgpCiB7Ci0gICAgcmV0dXJuIChtX2FuaW1hdGluZ0ltYWdlVHlwZSAmJiAhbV9hbmltYXRpb25G
aW5pc2hlZCAmJiBpbWFnZU9ic2VydmVyKCkpOworICAgIHJldHVybiAocmVwZXRpdGlvbkNvdW50
KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSAmJiAhbV9hbmltYXRpb25GaW5pc2hlZCAmJiBpbWFn
ZU9ic2VydmVyKCkpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbigpCkBA
IC0yMzksMTkgKzI2MSw5NiBAQCB2b2lkIEJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbigpCiAg
ICAgaWYgKG1fZnJhbWVUaW1lciB8fCAhc2hvdWxkQW5pbWF0ZSgpIHx8IGZyYW1lQ291bnQoKSA8
PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBEb24ndCBhZHZhbmNlIHRoZSBhbmltYXRp
b24gdW50aWwgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIGNvbXBsZXRlbHkgbG9hZGVkLgotICAgIGlm
ICghbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCisgICAg
Ly8gRGV0ZXJtaW5lIHRpbWUgZm9yIG5leHQgZnJhbWUgdG8gc3RhcnQuICBCeSBpZ25vcmluZyBw
YWludCBhbmQgdGltZXIgbGFnCisgICAgLy8gaW4gdGhpcyBjYWxjdWxhdGlvbiwgd2UgbWFrZSB0
aGUgYW5pbWF0aW9uIGFwcGVhciB0byBydW4gYXQgaXRzIGRlc2lyZWQKKyAgICAvLyByYXRlIHJl
Z2FyZGxlc3Mgb2YgaG93IGZhc3QgaXQncyBiZWluZyByZXBhaW50ZWQuCisgICAgY29uc3QgZG91
YmxlIGN1cnJlbnREdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKKyAgICBjb25zdCBkb3VibGUgdGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgaWYgKG1fZGVz
aXJlZEZyYW1lU3RhcnRUaW1lID09IDApIHsKKyAgICAgICAgbV9kZXNpcmVkRnJhbWVTdGFydFRp
bWUgPSB0aW1lICsgY3VycmVudER1cmF0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGVz
aXJlZEZyYW1lU3RhcnRUaW1lICs9IGN1cnJlbnREdXJhdGlvbjsKKyAgICAgICAgLy8gSWYgd2Un
cmUgdG9vIGZhciBiZWhpbmQsIHRoZSB1c2VyIHByb2JhYmx5IGRvZXNuJ3QgY2FyZSBhYm91dAor
ICAgICAgICAvLyByZXN5bmNpbmcgYW5kIHdlIGNvdWxkIGJ1cm4gYSBsb3Qgb2YgdGltZSBsb29w
aW5nIHRocm91Z2ggZnJhbWVzCisgICAgICAgIC8vIGJlbG93LiAgSnVzdCByZXNldCB0aGUgdGlt
aW5ncy4KKyAgICAgICAgaWYgKCh0aW1lIC0gbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUpID4gY0Fu
aW1hdGlvblJlc3luY0N1dG9mZikKKyAgICAgICAgICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1l
ID0gdGltZSArIGN1cnJlbnREdXJhdGlvbjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhZHZhbmNl
IHRoZSBhbmltYXRpb24gdG8gYW4gaW5jb21wbGV0ZSBmcmFtZS4KKyAgICBzaXplX3QgbmV4dEZy
YW1lID0gKG1fY3VycmVudEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCk7CisgICAgaWYgKCFmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KG5leHRGcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERvbid0IGFkdmFuY2UgcGFzdCB0aGUgbGFzdCBmcmFtZSBpZiB3ZSBoYXZlbid0IGRlY29kZWQg
dGhlIHdob2xlIGltYWdlCiAgICAgLy8geWV0IGFuZCBvdXIgcmVwZXRpdGlvbiBjb3VudCBpcyBw
b3RlbnRpYWxseSB1bnNldC4gIFRoZSByZXBldGl0aW9uIGNvdW50CiAgICAgLy8gaW4gYSBHSUYg
Y2FuIHBvdGVudGlhbGx5IGNvbWUgYWZ0ZXIgYWxsIHRoZSByZXN0IG9mIHRoZSBpbWFnZSBkYXRh
LCBzbwogICAgIC8vIHdhaXQgb24gaXQuCi0gICAgaWYgKCFtX2FsbERhdGFSZWNlaXZlZCAmJiBt
X3JlcGV0aXRpb25Db3VudCA9PSBjQW5pbWF0aW9uTG9vcE9uY2UgJiYgbV9jdXJyZW50RnJhbWUg
Pj0gKGZyYW1lQ291bnQoKSAtIDEpKQorICAgIGlmICghbV9hbGxEYXRhUmVjZWl2ZWQgJiYgcmVw
ZXRpdGlvbkNvdW50KGZhbHNlKSA9PSBjQW5pbWF0aW9uTG9vcE9uY2UgJiYgbV9jdXJyZW50RnJh
bWUgPj0gKGZyYW1lQ291bnQoKSAtIDEpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyYW1l
VGltZXIgPSBuZXcgVGltZXI8Qml0bWFwSW1hZ2U+KHRoaXMsICZCaXRtYXBJbWFnZTo6YWR2YW5j
ZUFuaW1hdGlvbik7Ci0gICAgbV9mcmFtZVRpbWVyLT5zdGFydE9uZVNob3QoZnJhbWVEdXJhdGlv
bkF0SW5kZXgobV9jdXJyZW50RnJhbWUpKTsKKyAgICAvLyBUaGUgaW1hZ2UgbWF5IGxvYWQgbW9y
ZSBzbG93bHkgdGhhbiBpdCdzIHN1cHBvc2VkIHRvIGFuaW1hdGUsIHNvIHRoYXQgYnkKKyAgICAv
LyB0aGUgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaXJzdCByZXBldGl0aW9uLCB3ZSdy
ZSB3ZWxsIGJlaGluZC4KKyAgICAvLyBDbGFtcCB0aGUgZGVzaXJlZCBmcmFtZSBzdGFydCB0aW1l
IGluIHRoaXMgY2FzZSwgc28gdGhhdCB3ZSBkb24ndCBza2lwCisgICAgLy8gZnJhbWVzIChvciB3
aG9sZSBpdGVyYXRpb25zKSB0cnlpbmcgdG8gImNhdGNoIHVwIi4gIFRoaXMgaXMgYSB0cmFkZW9m
ZjoKKyAgICAvLyBJdCBndWFyYW50ZWVzIHVzZXJzIHNlZSB0aGUgd2hvbGUgYW5pbWF0aW9uIHRo
ZSBzZWNvbmQgdGltZSB0aHJvdWdoIGFuZAorICAgIC8vIGRvbid0IG1pc3MgYW55IHJlcGV0aXRp
b25zLCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgb3RoZXIgYnJvd3NlcnMgZG87IG9uCisgICAgLy8g
dGhlIG90aGVyIGhhbmQsIGl0IG1ha2VzIGFuaW1hdGlvbnMgImxlc3MgYWNjdXJhdGUiIGZvciBw
YWdlcyB0aGF0IHRyeSB0bworICAgIC8vIHN5bmMgYW4gaW1hZ2UgYW5kIHNvbWUgb3RoZXIgcmVz
b3VyY2UgKGUuZy4gYXVkaW8pLCBlc3BlY2lhbGx5IGlmIHVzZXJzCisgICAgLy8gc3dpdGNoIHRh
YnMgKGFuZCB0aHVzIHN0b3AgZHJhd2luZyB0aGUgYW5pbWF0aW9uLCB3aGljaCB3aWxsIHBhdXNl
IGl0KQorICAgIC8vIGR1cmluZyB0aGF0IGluaXRpYWwgbG9vcCwgdGhlbiBzd2l0Y2ggYmFjayBs
YXRlci4KKyAgICBpZiAobmV4dEZyYW1lID09IDAgJiYgbV9yZXBldGl0aW9uc0NvbXBsZXRlID09
IDAgJiYgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgPCB0aW1lKQorICAgICAgbV9kZXNpcmVkRnJh
bWVTdGFydFRpbWUgPSB0aW1lOworCisgICAgaWYgKHRpbWUgPCBtX2Rlc2lyZWRGcmFtZVN0YXJ0
VGltZSkgeworICAgICAgICAvLyBIYXZlbid0IHlldCByZWFjaGVkIHRpbWUgZm9yIG5leHQgZnJh
bWUgdG8gc3RhcnQ7IGRlbGF5IHVudGlsIHRoZW4uCisgICAgICAgIG1fZnJhbWVUaW1lciA9IG5l
dyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywgJkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9u
KTsKKyAgICAgICAgbV9mcmFtZVRpbWVyLT5zdGFydE9uZVNob3QobV9kZXNpcmVkRnJhbWVTdGFy
dFRpbWUgLSB0aW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHJl
YWNoZWQgb3IgcGFzc2VkIHRoZSB0aW1lIGZvciB0aGUgbmV4dCBmcmFtZSB0byBzdGFydC4KKyAg
ICAgICAgLy8gU2VlIGlmIHdlJ3ZlIGFsc28gcGFzc2VkIHRoZSB0aW1lIGZvciBmcmFtZXMgYWZ0
ZXIgdGhhdCB0byBzdGFydCwgaW4KKyAgICAgICAgLy8gY2FzZSB3ZSBuZWVkIHRvIHNraXAgc29t
ZSBmcmFtZXMgZW50aXJlbHkuICBSZW1lbWJlciBub3QgdG8gYWR2YW5jZQorICAgICAgICAvLyB0
byBhbiBpbmNvbXBsZXRlIGZyYW1lLgorICAgICAgICBmb3IgKHNpemVfdCBmcmFtZUFmdGVyTmV4
dCA9IChuZXh0RnJhbWUgKyAxKSAlIGZyYW1lQ291bnQoKTsgZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChmcmFtZUFmdGVyTmV4dCk7IGZyYW1lQWZ0ZXJOZXh0ID0gKG5leHRGcmFtZSArIDEpICUgZnJh
bWVDb3VudCgpKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgd2Ugc2tpcCB0aGUgbmV4dCBmcmFt
ZT8KKyAgICAgICAgICAgIGRvdWJsZSBmcmFtZUFmdGVyTmV4dFN0YXJ0VGltZSA9IG1fZGVzaXJl
ZEZyYW1lU3RhcnRUaW1lICsgZnJhbWVEdXJhdGlvbkF0SW5kZXgobmV4dEZyYW1lKTsKKyAgICAg
ICAgICAgIGlmICh0aW1lIDwgZnJhbWVBZnRlck5leHRTdGFydFRpbWUpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIFllczsgc2tpcCBvdmVyIGl0IHdpdGhvdXQgbm90
aWZ5aW5nIG91ciBvYnNlcnZlcnMuCisgICAgICAgICAgICBpZiAoIWludGVybmFsQWR2YW5jZUFu
aW1hdGlvbih0cnVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2Rl
c2lyZWRGcmFtZVN0YXJ0VGltZSA9IGZyYW1lQWZ0ZXJOZXh0U3RhcnRUaW1lOworICAgICAgICAg
ICAgbmV4dEZyYW1lID0gZnJhbWVBZnRlck5leHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBE
cmF3IHRoZSBuZXh0IGZyYW1lIGltbWVkaWF0ZWx5LiAgTm90ZSB0aGF0IG1fZGVzaXJlZEZyYW1l
U3RhcnRUaW1lCisgICAgICAgIC8vIG1heSBiZSBpbiB0aGUgcGFzdCwgbWVhbmluZyB0aGUgbmV4
dCB0aW1lIHRocm91Z2ggdGhpcyBmdW5jdGlvbiB3ZSdsbAorICAgICAgICAvLyBraWNrIG9mZiB0
aGUgbmV4dCBhZHZhbmNlbWVudCBzb29uZXIgdGhhbiB0aGlzIGZyYW1lJ3MgZHVyYXRpb24gd291
bGQKKyAgICAgICAgLy8gc3VnZ2VzdC4KKyAgICAgICAgaWYgKGludGVybmFsQWR2YW5jZUFuaW1h
dGlvbihmYWxzZSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBpbWFnZSByZWdpb24gaGFzIGJlZW4g
bWFya2VkIGRpcnR5LCBidXQgb25jZSB3ZSByZXR1cm4gdG8gb3VyCisgICAgICAgICAgICAvLyBj
YWxsZXIsIGRyYXcoKSB3aWxsIGNsZWFyIGl0LCBhbmQgbm90aGluZyB3aWxsIGNhdXNlIHRoZQor
ICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHRvIGFkdmFuY2UgYWdhaW4uICBXZSBuZWVkIHRvIHN0
YXJ0IHRoZSB0aW1lciBmb3IgdGhlCisgICAgICAgICAgICAvLyBuZXh0IGZyYW1lIHJ1bm5pbmcs
IG9yIHRoZSBhbmltYXRpb24gY2FuIGhhbmcuICAoQ29tcGFyZSB0aGlzCisgICAgICAgICAgICAv
LyB3aXRoIHdoZW4gYWR2YW5jZUFuaW1hdGlvbigpIGlzIGNhbGxlZCwgYW5kIHRoZSByZWdpb24g
aXMgZGlydGllZAorICAgICAgICAgICAgLy8gd2hpbGUgZHJhdygpIGlzIG5vdCBpbiB0aGUgY2Fs
bHN0YWNrLCBtZWFuaW5nIGRyYXcoKSBnZXRzIGNhbGxlCisgICAgICAgICAgICAvLyB0byB1cGRh
dGUgdGhlIHJlZ2lvbiBhbmQgdGh1cyBzdGFydEFuaW1hdGlvbigpIGlzIHJlYWNoZWQgYWdhaW4u
KQorICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgPiBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGlt
ZSkgeworICAgICAgICAgICAgICAgIC8vIEZvciBsYXJnZSBpbWFnZXMgd2l0aCBzbG93IG9yIGhl
YXZpbHktbG9hZGVkIHN5c3RlbXMsCisgICAgICAgICAgICAgICAgLy8gdGhyb3dpbmcgYXdheSBk
YXRhIGFzIHdlIGdvIChzZWUgZGVzdHJveURlY29kZWREYXRhKCkpIG1lYW5zCisgICAgICAgICAg
ICAgICAgLy8gd2UgY2FuIHNwZW5kIHNvIG11Y2ggdGltZSByZS1kZWNvZGluZyBkYXRhIGFib3Zl
IHRoYXQgYnkgdGhlCisgICAgICAgICAgICAgICAgLy8gdGltZSB3ZSByZWFjaCBoZXJlIHdlJ3Jl
IGJlaGluZCBhZ2Fpbi4gIElmIHdlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyBzdGFydEFuaW1h
dGlvbigpLCB3ZSBjYW4gZ2V0IGludG8gaW5maW5pdGUgcmVjdXJzaW9uIHdoZXJlIHdlCisgICAg
ICAgICAgICAgICAgLy8ga2VlcCBmdXRpbGVseSB0cnlpbmcgdG8gY2F0Y2ggdXAuICBJbiB0aGlz
IHNpdHVhdGlvbiB0aGUgYmVzdAorICAgICAgICAgICAgICAgIC8vIHdlIGNhbiBkbyBpcyB0byBz
aW1wbHkgY2hhbmdlIGZyYW1lcyBhcyBmYXN0IGFzIHBvc3NpYmxlLCBzbworICAgICAgICAgICAg
ICAgIC8vIHNldCBhIHplcm8tZGVsYXkgdGltZXIgbm93IGFuZCBiYWlsIG91dC4KKyAgICAgICAg
ICAgICAgICBtX2ZyYW1lVGltZXIgPSBuZXcgVGltZXI8Qml0bWFwSW1hZ2U+KHRoaXMsICZCaXRt
YXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgbV9mcmFtZVRpbWVy
LT5zdGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dGFydEFuaW1hdGlvbigpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEJpdG1hcEltYWdl
OjpzdG9wQW5pbWF0aW9uKCkKQEAgLTI2Nyw2ICszNjYsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpy
ZXNldEFuaW1hdGlvbigpCiAgICAgc3RvcEFuaW1hdGlvbigpOwogICAgIG1fY3VycmVudEZyYW1l
ID0gMDsKICAgICBtX3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOworICAgIG1fZGVzaXJlZEZyYW1l
U3RhcnRUaW1lID0gMDsKICAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFsc2U7CiAgICAgaW50
IGZyYW1lU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKICAgICAK
QEAgLTI3NywyOSArMzc3LDUwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0aW9uKCkK
IAogdm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJbWFnZT4q
IHRpbWVyKQogeworICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbihmYWxzZSk7CisgICAgLy8g
QXQgdGhpcyBwb2ludCB0aGUgaW1hZ2UgcmVnaW9uIGhhcyBiZWVuIG1hcmtlZCBkaXJ0eSwgYW5k
IGlmIGl0J3MKKyAgICAvLyBvbnNjcmVlbiwgd2UnbGwgc29vbiBtYWtlIGEgY2FsbCB0byBkcmF3
KCksIHdoaWNoIHdpbGwgY2FsbAorICAgIC8vIHN0YXJ0QW5pbWF0aW9uKCkgYWdhaW4gdG8ga2Vl
cCB0aGUgYW5pbWF0aW9uIG1vdmluZy4KK30KKworYm9vbCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxB
ZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdGcmFtZXMpCit7CiAgICAgLy8gU3RvcCB0aGUg
YW5pbWF0aW9uLgogICAgIHN0b3BBbmltYXRpb24oKTsKICAgICAKICAgICAvLyBTZWUgaWYgYW55
b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24gdG8gdGhpcyBhbmltYXRpb24uICBJZiBub3Qs
IHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQgd2lsbCByZW1haW4gc3VzcGVuZGVkIGF0IHRo
ZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmltYXRpb24gaXMgcmVzdW1lZC4KLSAgICBpZiAo
aW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlzKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGlmICghc2tpcHBpbmdGcmFtZXMgJiYgaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQ
YXVzZUFuaW1hdGlvbih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9jdXJy
ZW50RnJhbWUrKzsKICAgICBpZiAobV9jdXJyZW50RnJhbWUgPj0gZnJhbWVDb3VudCgpKSB7Ci0g
ICAgICAgIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSArPSAxOworICAgICAgICArK21fcmVwZXRpdGlv
bnNDb21wbGV0ZTsKICAgICAgICAgLy8gR2V0IHRoZSByZXBldGl0aW9uIGNvdW50IGFnYWluLiAg
SWYgd2Ugd2VyZW4ndCBhYmxlIHRvIGdldCBhCiAgICAgICAgIC8vIHJlcGV0aXRpb24gY291bnQg
YmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBkZWNvZGVkIHRoZSB3aG9sZSBpbWFnZSBieQogICAgICAg
ICAvLyBub3csIHNvIGl0IHNob3VsZCBub3cgYmUgYXZhaWxhYmxlLgotICAgICAgICBtX3JlcGV0
aXRpb25Db3VudCA9IG1fc291cmNlLnJlcGV0aXRpb25Db3VudCgpOwotICAgICAgICBpZiAobV9y
ZXBldGl0aW9uQ291bnQgJiYgbV9yZXBldGl0aW9uc0NvbXBsZXRlID49IG1fcmVwZXRpdGlvbkNv
dW50KSB7CisgICAgICAgIGlmIChyZXBldGl0aW9uQ291bnQodHJ1ZSkgJiYgbV9yZXBldGl0aW9u
c0NvbXBsZXRlID49IG1fcmVwZXRpdGlvbkNvdW50KSB7CiAgICAgICAgICAgICBtX2FuaW1hdGlv
bkZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0g
MDsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lLS07Ci0gICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBpZiAoc2tpcHBpbmdGcmFtZXMpIHsKKyAgICAgICAgICAgICAgICAvLyBVaCBv
aC4gIFdlIHRyaWVkIHRvIHNraXAgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24uICBXZSdk
CisgICAgICAgICAgICAgICAgLy8gYmV0dGVyIGRyYXcgdGhpcyBsYXN0IGZyYW1lLgorICAgICAg
ICAgICAgICAgIG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgbV9jdXJy
ZW50RnJhbWUgPSAwOwogICAgIH0KIAorICAgIGlmICghc2tpcHBpbmdGcmFtZXMpCisgICAgICAg
IG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBCaXRtYXBJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEo
KQorewogICAgIC8vIE5vdGlmeSBvdXIgb2JzZXJ2ZXIgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyBh
ZHZhbmNlZC4KICAgICBpbWFnZU9ic2VydmVyKCktPmFuaW1hdGlvbkFkdmFuY2VkKHRoaXMpOwog
CkBAIC0zMTMsMTEgKzQzNCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmFkdmFuY2VBbmltYXRpb24o
VGltZXIKICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGRlY29kZSB0aGUgbmV4dCBmcmFtZS4KICAg
ICAgICAgZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICB9Ci0gICAgCi0gICAgLy8g
V2UgZG8gbm90IGFkdmFuY2UgdGhlIGFuaW1hdGlvbiBleHBsaWNpdGx5LiAgV2UgcmVseSBvbiBh
IHN1YnNlcXVlbnQgZHJhdyBvZiB0aGUgaW1hZ2UKLSAgICAvLyB0byBmb3JjZSBhIHJlcXVlc3Qg
Zm9yIHRoZSBuZXh0IGZyYW1lIHZpYSBzdGFydEFuaW1hdGlvbigpLiAgVGhpcyBhbGxvd3MgaW1h
Z2VzIHRoYXQgbW92ZSBvZmZzY3JlZW4gd2hpbGUKLSAgICAvLyBzY3JvbGxpbmcgdG8gc3RvcCBh
bmltYXRpbmcgKHRodXMgc2F2aW5nIG1lbW9yeSBmcm9tIGFkZGl0aW9uYWwgZGVjb2RlZCBmcmFt
ZXMgYW5kCi0gICAgLy8gQ1BVIHRpbWUgc3BlbnQgZG9pbmcgdGhlIGRlY29kaW5nKS4KIH0KIAog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lv
biAzNjg3MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
VGltZXI7CiBzdHJ1Y3QgRnJhbWVEYXRhIDogTm9uY29weWFibGUgewogICAgIEZyYW1lRGF0YSgp
CiAgICAgICAgIDogbV9mcmFtZSgwKQorICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAg
ICAgICAgLCBtX2R1cmF0aW9uKDApCiAgICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKSAKICAgICB7
CkBAIC03OSw2ICs4MCw3IEBAIHN0cnVjdCBGcmFtZURhdGEgOiBOb25jb3B5YWJsZSB7CiAgICAg
dm9pZCBjbGVhcigpOwogCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9mcmFtZTsKKyAgICBib29sIG1f
aXNDb21wbGV0ZTsKICAgICBmbG9hdCBtX2R1cmF0aW9uOwogICAgIGJvb2wgbV9oYXNBbHBoYTsK
IH07CkBAIC0xMzYsNiArMTM4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gZnJhbWVBdEluZGV4KGN1
cnJlbnRGcmFtZSgpKTsgfQogCiBwcm90ZWN0ZWQ6CisgICAgZW51bSBSZXBldGl0aW9uQ291bnRT
dGF0dXMgeworICAgICAgVW5rbm93biwgICAgLy8gV2UgaGF2ZW4ndCBjaGVja2VkIHRoZSBzb3Vy
Y2UncyByZXBldGl0aW9uIGNvdW50LgorICAgICAgVW5jZXJ0YWluLCAgLy8gV2UgaGF2ZSBhIHJl
cGV0aXRpb24gY291bnQsIGJ1dCBpdCBtaWdodCBiZSB3cm9uZyAoc29tZSBHSUZzIGhhdmUgYSBj
b3VudCBhZnRlciB0aGUgaW1hZ2UgZGF0YSwgYW5kIHdpbGwgcmVwb3J0ICJsb29wIG9uY2UiIHVu
dGlsIGFsbCBkYXRhIGhhcyBiZWVuIGRlY29kZWQpLgorICAgICAgQ2VydGFpbiwgICAgLy8gVGhl
IHJlcGV0aXRpb24gY291bnQgaXMga25vd24gdG8gYmUgY29ycmVjdC4KKyAgICB9OworCiAgICAg
Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAgICAgQml0
bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKIApAQCAtMTUwLDYgKzE1OCw3IEBAIHByb3Rl
Y3RlZDoKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
RnJhbWU7IH0KICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgIE5hdGl2ZUltYWdlUHRyIGZy
YW1lQXRJbmRleChzaXplX3QpOworICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXpl
X3QpOwogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOyAKIApAQCAtMTY0LDEwICsxNzMsMjEgQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAKICAgICAvLyBBbmltYXRpb24u
CisgICAgaW50IHJlcGV0aXRpb25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpOyAg
Ly8gfGltYWdlS25vd25Ub0JlQ29tcGxldGV8IHNob3VsZCBiZSBzZXQgaWYgdGhlIGNhbGxlciBr
bm93cyB0aGUgZW50aXJlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQuCiAgICAgYm9vbCBzaG91bGRB
bmltYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKCk7CiAgICAgdm9pZCBh
ZHZhbmNlQW5pbWF0aW9uKFRpbWVyPEJpdG1hcEltYWdlPiopOwotICAgIAorCisgICAgLy8gRnVu
Y3Rpb24gdGhhdCBkb2VzIHRoZSByZWFsIHdvcmsgb2YgYWR2YW5jaW5nIHRoZSBhbmltYXRpb24u
ICBXaGVuCisgICAgLy8gc2tpcHBpbmdGcmFtZXMgaXMgdHJ1ZSwgd2UncmUgaW4gdGhlIG1pZGRs
ZSBvZiBhIGxvb3AgdHJ5aW5nIHRvIHNraXAgb3ZlcgorICAgIC8vIGEgYnVuY2ggb2YgYW5pbWF0
aW9uIGZyYW1lcywgc28gd2Ugc2hvdWxkIG5vdCBkbyB0aGluZ3MgbGlrZSBkZWNvZGUgZWFjaAor
ICAgIC8vIG9uZSBvciBub3RpZnkgb3VyIG9ic2VydmVycy4KKyAgICAvLyBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGFuaW1hdGlvbiB3YXMgYWR2YW5jZWQuCisgICAgYm9vbCBpbnRlcm5hbEFkdmFuY2VB
bmltYXRpb24oYm9vbCBza2lwcGluZ0ZyYW1lcyk7CisKKyAgICAvLyBIZWxwZXIgZm9yIGludGVy
bmFsQWR2YW5jZUFuaW1hdGlvbigpLgorICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJBbmRUcmltRGVj
b2RlZERhdGEoKTsKKwogICAgIC8vIEhhbmRsZSBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCiAgICAg
dm9pZCBpbml0UGxhdGZvcm1EYXRhKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KCk7CkBAIC0xODUsOCArMjA1LDEwIEBAIHByb3RlY3RlZDoKICAgICBWZWN0b3I8RnJhbWVEYXRh
PiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1h
dGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KICAg
ICAKICAgICBUaW1lcjxCaXRtYXBJbWFnZT4qIG1fZnJhbWVUaW1lcjsKLSAgICBpbnQgbV9yZXBl
dGl0aW9uQ291bnQ7IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBzaG91bGQg
ZG8uCisgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50OyAvLyBIb3cgbWFueSB0b3RhbCBhbmltYXRp
b24gbG9vcHMgd2Ugc2hvdWxkIGRvLiAgVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRo
aXMgaW1hZ2UgdHlwZSBpcyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgorICAgIFJlcGV0aXRpb25D
b3VudFN0YXR1cyBtX3JlcGV0aXRpb25Db3VudFN0YXR1czsKICAgICBpbnQgbV9yZXBldGl0aW9u
c0NvbXBsZXRlOyAgLy8gSG93IG1hbnkgcmVwZXRpdGlvbnMgd2UndmUgZmluaXNoZWQuCisgICAg
ZG91YmxlIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lOyAgLy8gVGhlIHN5c3RlbSB0aW1lIGF0IHdo
aWNoIHdlIGhvcGUgdG8gc2VlIHRoZSBuZXh0IGNhbGwgdG8gc3RhcnRBbmltYXRpb24oKS4KIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0ltYWdlPiBtX25zSW1h
Z2U7IC8vIEEgY2FjaGVkIE5TSW1hZ2Ugb2YgZnJhbWUgMC4gT25seSBidWlsdCBsYXppbHkgaWYg
c29tZW9uZSBhY3R1YWxseSBxdWVyaWVzIGZvciBvbmUuCkBAIC0xOTYsNyArMjE4LDYgQEAgcHJv
dGVjdGVkOgogICAgIENvbG9yIG1fc29saWRDb2xvcjsgIC8vIElmIHdlJ3JlIGEgMXgxIHNvbGlk
IGNvbG9yLCB0aGlzIGlzIHRoZSBjb2xvciB0byB1c2UgdG8gZmlsbC4KICAgICBib29sIG1faXNT
b2xpZENvbG9yOyAgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGEgMXgxIHNvbGlkIGltYWdlLgog
Ci0gICAgYm9vbCBtX2FuaW1hdGluZ0ltYWdlVHlwZTsgIC8vIFdoZXRoZXIgb3Igbm90IHdlJ3Jl
IGFuIGltYWdlIHR5cGUgdGhhdCBpcyBjYXBhYmxlIG9mIGFuaW1hdGluZyAoR0lGKS4KICAgICBi
b29sIG1fYW5pbWF0aW9uRmluaXNoZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSd2ZSBjb21wbGV0
ZWQgdGhlIGVudGlyZSBhbmltYXRpb24uCiAKICAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOyAg
Ly8gV2hldGhlciBvciBub3Qgd2UndmUgcmVjZWl2ZWQgYWxsIG91ciBkYXRhLgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlz
aW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCB2b2lkIEZyYW1lRGF0YTo6Y2xl
YXIoKQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSht
X2ZyYW1lKTsKICAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1faXNDb21wbGV0ZSA9IGZh
bHNlOwogICAgICAgICBtX2R1cmF0aW9uID0gMC47CiAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVl
OwogICAgIH0KQEAgLTUzLDcgKzU0LDggQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNhaXJv
X3N1cmZhY2VfdAogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCiAg
ICAgLCBtX2ZyYW1lVGltZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50KDApCisgICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAgICAsIG1fcmVwZXRpdGlvbkNvdW50
U3RhdHVzKFVua25vd24pCiAgICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUoMCkKICAgICAsIG1f
aXNTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpbmdJbWFnZVR5cGUoZmFsc2UpCkBA
IC04MiwxMyArODQsMTUgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNhaXJvX3N1cmZhY2Vf
dAogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKIHsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwotICAgIEZsb2F0UmVjdCBkc3RS
ZWN0KGRzdCk7CisgICAgc3RhcnRBbmltYXRpb24oKTsKIAogICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghaW1hZ2UpIC8v
IElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICBy
ZXR1cm47CiAKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOworICAgIEZsb2F0UmVjdCBkc3RS
ZWN0KGRzdCk7CisKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdFJlY3QsIHNvbGlkQ29sb3IoKSwgb3ApOwog
ICAgICAgICByZXR1cm47CkBAIC0xMzEsOCArMTM1LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKLSAgICBzdGFy
dEFuaW1hdGlvbigpOwotCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUNHLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBA
QCB2b2lkIEZyYW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIENH
SW1hZ2VSZWxlYXNlKG1fZnJhbWUpOwogICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgbV9p
c0NvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgIG1fZHVyYXRpb24gPSAwLjBmOwogICAgICAgICBt
X2hhc0FscGhhID0gdHJ1ZTsKICAgICB9CkBAIC02NiwxMCArNjcsMTAgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAg
ICAsIG1fZnJhbWVzKDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlv
bkNvdW50KDApCisgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAgICAs
IG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCiAgICAgLCBtX3JlcGV0aXRpb25zQ29t
cGxldGUoMCkKICAgICAsIG1faXNTb2xpZENvbG9yKGZhbHNlKQotICAgICwgbV9hbmltYXRpbmdJ
bWFnZVR5cGUoZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKHRydWUpCiAgICAgLCBt
X2FsbERhdGFSZWNlaXZlZCh0cnVlKQogICAgICwgbV9oYXZlU2l6ZSh0cnVlKQpAQCAtMTI5LDYg
KzEzMCw4IEBAIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQogCiB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKIHsKKyAgICBzdGFydEFuaW1hdGlvbigpOworCiAgICAgQ0dJbWFnZVJlZiBp
bWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFpbWFnZSkgLy8g
SWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCiAgICAgICAgIHJl
dHVybjsKQEAgLTE5Myw4ICsxOTYsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogCiAKICAgICBjdHh0LT5yZXN0b3JlKCk7CiAKLSAgICBzdGFydEFuaW1hdGlvbigp
OwotCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5k
aWREcmF3KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VRdC5jcHAJKHJldmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCB2b2lkIEZyYW1l
RGF0YTo6Y2xlYXIoKQogewogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIG1fZnJhbWUgPSAw
OworICAgICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKICAgICAgICAgbV9kdXJhdGlvbiA9IDAu
MGY7CiAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOwogICAgIH0KQEAgLTEwOCw2ICsxMDksOCBA
QCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB2b2lkIEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKIHsKKyAgICBzdGFydEFuaW1hdGlvbigpOworCiAgICAgUVBpeG1hcCogaW1hZ2Ug
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzMSw4ICsxMzQsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogCiAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChkc3QsICppbWFnZSwgc3JjKTsK
IAogICAgIGN0eHQtPnJlc3RvcmUoKTsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAKIHZv
aWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHJl
dmlzaW9uIDM2ODcwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCB2b2lkIEZyYW1lRGF0YTo6Y2xlYXIo
KQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwogICAgICAgICBt
X2ZyYW1lID0gMDsKKyAgICAgICAgbV9pc0NvbXBsZXRlID0gZmFsc2U7CiAgICAgICAgIG1fZHVy
YXRpb24gPSAwLjsKICAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiAgICAgfQpAQCAtOTgsNiAr
OTksOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgd3hX
aW5kb3dEQyogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCiAKKyAg
ICBzdGFydEFuaW1hdGlvbigpOworCiAgICAgd3hCaXRtYXAqIGJpdG1hcCA9IGZyYW1lQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CiAgICAgaWYgKCFiaXRtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogICAgICAgICByZXR1cm47CkBAIC0xNDEsNyAr
MTQ0LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAg
ICBiaXRtYXAgPSBOVUxMOwogICAgIH0KICAgICBjdHh0LT5yZXN0b3JlKCk7Ci0gICAgc3RhcnRB
bmltYXRpb24oKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0
ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23857</attachid>
            <date>2008-09-26 13:53:08 -0700</date>
            <delta_ts>2008-10-15 11:46:35 -0700</delta_ts>
            <desc>patch for (1) - (7), v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30785</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjk2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMDgtMDktMjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY2MyAoU2Vjb25kIGF0
dGVtcHQpCisgICAgICAgIEFjY291bnQgZm9yIHBhaW50IGFuZCB0aW1lciBsYWcgd2hlbiBhbmlt
YXRpbmcgaW1hZ2VzLiAgQWxzbyBwcmV0ZW5kCisgICAgICAgIHRoYXQgaW1hZ2VzIHdob3NlIGFu
aW1hdGlvbnMgd2VyZSBwYXVzZWQgKGJ5IGJlY29taW5nIGludmlzaWJsZSkKKyAgICAgICAgY29u
dGludWVkIHRvIGFuaW1hdGUsIGJ5ICJjYXRjaGluZyB1cCIgdG8gdGhlIGNvcnJlY3QgZnJhbWUg
d2hlbiB0aGV5J3JlCisgICAgICAgIHNob3duIGFnYWluLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVj
b2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpzaG91bGRBbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6cmVzZXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmFkdmFu
Y2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFsQWR2
YW5jZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bm90aWZ5T2Jz
ZXJ2ZXJBbmRUcmltRGVjb2RlZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6
OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorCiAyMDA4LTA5LTI2
ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNDkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAzNjk2MCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCkBAIC00MSwxNSArNDIsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Ly8gb25lIGZyYW1lIGF0IGEgdGltZS4KIGNvbnN0IHVuc2lnbmVkIGNMYXJnZUFuaW1hdGlvbkN1
dG9mZiA9IDUyNDI4ODA7CiAKKy8vIFdoZW4gYW4gYW5pbWF0ZWQgaW1hZ2UgaXMgbW9yZSB0aGFu
IGZpdmUgbWludXRlcyBvdXQgb2YgZGF0ZSwgZG9uJ3QgdHJ5IHRvCisvLyByZXN5bmMgb24gcmVw
YWludCwgc28gd2UgZG9uJ3Qgd2FzdGUgQ1BVIGN5Y2xlcyBvbiBhbiBlZGdlIGNhc2UgdGhlIHVz
ZXIKKy8vIGRvZXNuJ3QgY2FyZSBhYm91dC4KK2NvbnN0IGRvdWJsZSBjQW5pbWF0aW9uUmVzeW5j
Q3V0b2ZmID0gNSAqIDYwOworCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKICAgICAsIG1fY3VycmVudEZyYW1l
KDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCi0gICAgLCBtX3Jl
cGV0aXRpb25Db3VudCgwKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUp
CisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQogICAgICwgbV9yZXBldGl0
aW9uc0NvbXBsZXRlKDApCisgICAgLCBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSgwKQogICAgICwg
bV9pc1NvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZ0ltYWdlVHlwZSh0cnVlKQog
ICAgICwgbV9hbmltYXRpb25GaW5pc2hlZChmYWxzZSkKICAgICAsIG1fYWxsRGF0YVJlY2VpdmVk
KGZhbHNlKQogICAgICwgbV9oYXZlU2l6ZShmYWxzZSkKQEAgLTY4LDE0ICs3NSwxNSBAQCBCaXRt
YXBJbWFnZTo6fkJpdG1hcEltYWdlKCkKICAgICBzdG9wQW5pbWF0aW9uKCk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsKQordm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwsIGJvb2wgcHJl
c2VydmVOZWFyYnlGcmFtZXMpCiB7CiAgICAgLy8gRGVzdHJveSB0aGUgY2FjaGVkIGltYWdlcyBh
bmQgcmVsZWFzZSB0aGVtLgogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkpIHsKICAgICAgICAgaW50
IHNpemVDaGFuZ2UgPSAwOwogICAgICAgICBpbnQgZnJhbWVTaXplID0gbV9zaXplLndpZHRoKCkg
KiBtX3NpemUuaGVpZ2h0KCkgKiA0OworICAgICAgICBjb25zdCBzaXplX3QgbmV4dEZyYW1lID0g
KHByZXNlcnZlTmVhcmJ5RnJhbWVzICYmIGZyYW1lQ291bnQoKSkgPyAoKG1fY3VycmVudEZyYW1l
ICsgMSkgJSBmcmFtZUNvdW50KCkpIDogMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5j
cmVtZW50YWwgPyBtX2ZyYW1lcy5zaXplKCkgLSAxIDogMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZXNbaV0ubV9mcmFtZSkgeworICAgICAgICAg
ICAgaWYgKG1fZnJhbWVzW2ldLm1fZnJhbWUgJiYgKCFwcmVzZXJ2ZU5lYXJieUZyYW1lcyB8fCAo
aSAhPSBtX2N1cnJlbnRGcmFtZSAmJiBpICE9IG5leHRGcmFtZSkpKSB7CiAgICAgICAgICAgICAg
ICAgc2l6ZUNoYW5nZSAtPSBmcmFtZVNpemU7CiAgICAgICAgICAgICAgICAgbV9mcmFtZXNbaV0u
Y2xlYXIoKTsKICAgICAgICAgICAgIH0KQEAgLTEwNiwxNiArMTE0LDYgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZQogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFt
ZUNvdW50KCk7CiAgICAgQVNTRVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAx
KTsKICAgICAKLSAgICBpZiAoIW1fZnJhbWVzLnNpemUoKSAmJiBzaG91bGRBbmltYXRlKCkpIHsg
ICAgICAgICAgICAKLSAgICAgICAgLy8gU25hZyB0aGUgcmVwZXRpdGlvbiBjb3VudC4gIE5vdGUg
dGhhdCB0aGUgcmVwZXRpdGlvbiBjb3VudCBtYXkgbm90IGJlCi0gICAgICAgIC8vIGFjY3VyYXRl
IHlldCBmb3IgR0lGczsgaWYgd2UgaGF2ZW4ndCBnb3R0ZW4gdGhlIGNvdW50IGZyb20gdGhlIHNv
dXJjZQotICAgICAgICAvLyBpbWFnZSB5ZXQsIGl0IHdpbGwgZGVmYXVsdCB0byBjQW5pbWF0aW9u
TG9vcE9uY2UsIGFuZCB3ZSdsbCB0cnkgYW5kCi0gICAgICAgIC8vIHJlYWQgaXQgYWdhaW4gb25j
ZSB0aGUgd2hvbGUgaW1hZ2UgaXMgZGVjb2RlZC4KLSAgICAgICAgbV9yZXBldGl0aW9uQ291bnQg
PSBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQoKTsKLSAgICAgICAgaWYgKG1fcmVwZXRpdGlvbkNv
dW50ID09IGNBbmltYXRpb25Ob25lKQotICAgICAgICAgICAgbV9hbmltYXRpbmdJbWFnZVR5cGUg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8IG51bUZyYW1l
cykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCkBAIC0xMjMsNyArMTIxLDkg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZQogICAgIGlmIChudW1G
cmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKICAgICAgICAgY2hlY2tGb3JT
b2xpZENvbG9yKCk7CiAKLSAgICBpZiAoc2hvdWxkQW5pbWF0ZSgpKQorICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CisgICAgbV9mcmFtZXNbaW5kZXhdLm1faXNDb21w
bGV0ZSA9IG1fc291cmNlLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOworICAgIGlmIChy
ZXBldGl0aW9uQ291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQogICAgICAgICBtX2ZyYW1l
c1tpbmRleF0ubV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4
KTsKICAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYSA9IG1fc291cmNlLmZyYW1lSGFzQWxw
aGFBdEluZGV4KGluZGV4KTsKIApAQCAtMjA3LDEyICsyMDcsMjMgQEAgTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleAogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9m
cmFtZTsKIH0KIAorYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXpl
X3QgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1l
c1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCisgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOworCisg
ICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGU7Cit9CisKIGZsb2F0IEJpdG1h
cEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGlu
ZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoaW5kZXgg
Pj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICBpZiAo
aW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRh
dGEpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOwogCiAgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX2R1cmF0aW9uOwpAQCAtMjIzLDM1ICsyMzQsMTIyIEBAIGJvb2wgQml0bWFwSW1hZ2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KHMKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkg
fHwgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5z
aXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKICAgICAgICAgY2FjaGVG
cmFtZShpbmRleCk7CiAKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CiB9
CiAKK2ludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KGJvb2wgaW1hZ2VLbm93blRvQmVD
b21wbGV0ZSkKK3sKKyAgICBpZiAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzID09IFVua25vd24p
IHx8ICgobV9yZXBldGl0aW9uQ291bnRTdGF0dXMgPT0gVW5jZXJ0YWluKSAmJiBpbWFnZUtub3du
VG9CZUNvbXBsZXRlKSkgeworICAgICAgICAvLyBTbmFnIHRoZSByZXBldGl0aW9uIGNvdW50LiAg
SWYgfGltYWdlS25vd25Ub0JlQ29tcGxldGV8IGlzIGZhbHNlLCB0aGUKKyAgICAgICAgLy8gcmVw
ZXRpdGlvbiBjb3VudCBtYXkgbm90IGJlIGFjY3VyYXRlIHlldCBmb3IgR0lGczsgaW4gdGhpcyBj
YXNlIHRoZQorICAgICAgICAvLyBkZWNvZGVyIHdpbGwgZGVmYXVsdCB0byBjQW5pbWF0aW9uTG9v
cE9uY2UsIGFuZCB3ZSdsbCB0cnkgYW5kIHJlYWQKKyAgICAgICAgLy8gdGhlIGNvdW50IGFnYWlu
IG9uY2UgdGhlIHdob2xlIGltYWdlIGlzIGRlY29kZWQuCisgICAgICAgIG1fcmVwZXRpdGlvbkNv
dW50ID0gbV9zb3VyY2UucmVwZXRpdGlvbkNvdW50KCk7CisgICAgICAgIG1fcmVwZXRpdGlvbkNv
dW50U3RhdHVzID0gKGltYWdlS25vd25Ub0JlQ29tcGxldGUgfHwgbV9yZXBldGl0aW9uQ291bnQg
PT0gY0FuaW1hdGlvbk5vbmUpID8gQ2VydGFpbiA6IFVuY2VydGFpbjsKKyAgICB9CisgICAgcmV0
dXJuIG1fcmVwZXRpdGlvbkNvdW50OworfQorCiBib29sIEJpdG1hcEltYWdlOjpzaG91bGRBbmlt
YXRlKCkKIHsKLSAgICByZXR1cm4gKG1fYW5pbWF0aW5nSW1hZ2VUeXBlICYmICFtX2FuaW1hdGlv
bkZpbmlzaGVkICYmIGltYWdlT2JzZXJ2ZXIoKSk7CisgICAgcmV0dXJuIChyZXBldGl0aW9uQ291
bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lICYmICFtX2FuaW1hdGlvbkZpbmlzaGVkICYmIGlt
YWdlT2JzZXJ2ZXIoKSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5
KQogewogICAgIGlmIChtX2ZyYW1lVGltZXIgfHwgIXNob3VsZEFuaW1hdGUoKSB8fCBmcmFtZUNv
dW50KCkgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRG9uJ3QgYWR2YW5jZSB0aGUg
YW5pbWF0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZyYW1lIGhhcyBjb21wbGV0ZWx5IGxvYWRlZC4K
LSAgICBpZiAoIW1fc291cmNlLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUp
KQorICAgIC8vIERldGVybWluZSB0aW1lIGZvciBuZXh0IGZyYW1lIHRvIHN0YXJ0LiAgQnkgaWdu
b3JpbmcgcGFpbnQgYW5kIHRpbWVyIGxhZworICAgIC8vIGluIHRoaXMgY2FsY3VsYXRpb24sIHdl
IG1ha2UgdGhlIGFuaW1hdGlvbiBhcHBlYXIgdG8gcnVuIGF0IGl0cyBkZXNpcmVkCisgICAgLy8g
cmF0ZSByZWdhcmRsZXNzIG9mIGhvdyBmYXN0IGl0J3MgYmVpbmcgcmVwYWludGVkLgorICAgIGNv
bnN0IGRvdWJsZSBjdXJyZW50RHVyYXRpb24gPSBmcmFtZUR1cmF0aW9uQXRJbmRleChtX2N1cnJl
bnRGcmFtZSk7CisgICAgY29uc3QgZG91YmxlIHRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGlm
IChtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSA9PSAwKSB7CisgICAgICAgIG1fZGVzaXJlZEZyYW1l
U3RhcnRUaW1lID0gdGltZSArIGN1cnJlbnREdXJhdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBjdXJyZW50RHVyYXRpb247CisgICAgICAgIC8v
IElmIHdlJ3JlIHRvbyBmYXIgYmVoaW5kLCB0aGUgdXNlciBwcm9iYWJseSBkb2Vzbid0IGNhcmUg
YWJvdXQKKyAgICAgICAgLy8gcmVzeW5jaW5nIGFuZCB3ZSBjb3VsZCBidXJuIGEgbG90IG9mIHRp
bWUgbG9vcGluZyB0aHJvdWdoIGZyYW1lcworICAgICAgICAvLyBiZWxvdy4gIEp1c3QgcmVzZXQg
dGhlIHRpbWluZ3MuCisgICAgICAgIGlmICgodGltZSAtIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1l
KSA+IGNBbmltYXRpb25SZXN5bmNDdXRvZmYpCisgICAgICAgICAgICBtX2Rlc2lyZWRGcmFtZVN0
YXJ0VGltZSA9IHRpbWUgKyBjdXJyZW50RHVyYXRpb247CisgICAgfQorCisgICAgLy8gRG9uJ3Qg
YWR2YW5jZSB0aGUgYW5pbWF0aW9uIHRvIGFuIGluY29tcGxldGUgZnJhbWUuCisgICAgc2l6ZV90
IG5leHRGcmFtZSA9IChtX2N1cnJlbnRGcmFtZSArIDEpICUgZnJhbWVDb3VudCgpOworICAgIGlm
ICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChuZXh0RnJhbWUpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBEb24ndCBhZHZhbmNlIHBhc3QgdGhlIGxhc3QgZnJhbWUgaWYgd2UgaGF2ZW4ndCBk
ZWNvZGVkIHRoZSB3aG9sZSBpbWFnZQogICAgIC8vIHlldCBhbmQgb3VyIHJlcGV0aXRpb24gY291
bnQgaXMgcG90ZW50aWFsbHkgdW5zZXQuICBUaGUgcmVwZXRpdGlvbiBjb3VudAogICAgIC8vIGlu
IGEgR0lGIGNhbiBwb3RlbnRpYWxseSBjb21lIGFmdGVyIGFsbCB0aGUgcmVzdCBvZiB0aGUgaW1h
Z2UgZGF0YSwgc28KICAgICAvLyB3YWl0IG9uIGl0LgotICAgIGlmICghbV9hbGxEYXRhUmVjZWl2
ZWQgJiYgbV9yZXBldGl0aW9uQ291bnQgPT0gY0FuaW1hdGlvbkxvb3BPbmNlICYmIG1fY3VycmVu
dEZyYW1lID49IChmcmFtZUNvdW50KCkgLSAxKSkKKyAgICBpZiAoIW1fYWxsRGF0YVJlY2VpdmVk
ICYmIHJlcGV0aXRpb25Db3VudChmYWxzZSkgPT0gY0FuaW1hdGlvbkxvb3BPbmNlICYmIG1fY3Vy
cmVudEZyYW1lID49IChmcmFtZUNvdW50KCkgLSAxKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9mcmFtZVRpbWVyID0gbmV3IFRpbWVyPEJpdG1hcEltYWdlPih0aGlzLCAmQml0bWFwSW1hZ2U6
OmFkdmFuY2VBbmltYXRpb24pOwotICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGZyYW1l
RHVyYXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKSk7CisgICAgLy8gVGhlIGltYWdlIG1heSBs
b2FkIG1vcmUgc2xvd2x5IHRoYW4gaXQncyBzdXBwb3NlZCB0byBhbmltYXRlLCBzbyB0aGF0IGJ5
CisgICAgLy8gdGhlIHRpbWUgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZmlyc3QgcmVwZXRpdGlv
biwgd2UncmUgd2VsbCBiZWhpbmQuCisgICAgLy8gQ2xhbXAgdGhlIGRlc2lyZWQgZnJhbWUgc3Rh
cnQgdGltZSBpbiB0aGlzIGNhc2UsIHNvIHRoYXQgd2UgZG9uJ3Qgc2tpcAorICAgIC8vIGZyYW1l
cyAob3Igd2hvbGUgaXRlcmF0aW9ucykgdHJ5aW5nIHRvICJjYXRjaCB1cCIuICBUaGlzIGlzIGEg
dHJhZGVvZmY6CisgICAgLy8gSXQgZ3VhcmFudGVlcyB1c2VycyBzZWUgdGhlIHdob2xlIGFuaW1h
dGlvbiB0aGUgc2Vjb25kIHRpbWUgdGhyb3VnaCBhbmQKKyAgICAvLyBkb24ndCBtaXNzIGFueSBy
ZXBldGl0aW9ucywgYW5kIGlzIGNsb3NlciB0byB3aGF0IG90aGVyIGJyb3dzZXJzIGRvOyBvbgor
ICAgIC8vIHRoZSBvdGhlciBoYW5kLCBpdCBtYWtlcyBhbmltYXRpb25zICJsZXNzIGFjY3VyYXRl
IiBmb3IgcGFnZXMgdGhhdCB0cnkgdG8KKyAgICAvLyBzeW5jIGFuIGltYWdlIGFuZCBzb21lIG90
aGVyIHJlc291cmNlIChlLmcuIGF1ZGlvKSwgZXNwZWNpYWxseSBpZiB1c2VycworICAgIC8vIHN3
aXRjaCB0YWJzIChhbmQgdGh1cyBzdG9wIGRyYXdpbmcgdGhlIGFuaW1hdGlvbiwgd2hpY2ggd2ls
bCBwYXVzZSBpdCkKKyAgICAvLyBkdXJpbmcgdGhhdCBpbml0aWFsIGxvb3AsIHRoZW4gc3dpdGNo
IGJhY2sgbGF0ZXIuCisgICAgaWYgKG5leHRGcmFtZSA9PSAwICYmIG1fcmVwZXRpdGlvbnNDb21w
bGV0ZSA9PSAwICYmIG1fZGVzaXJlZEZyYW1lU3RhcnRUaW1lIDwgdGltZSkKKyAgICAgIG1fZGVz
aXJlZEZyYW1lU3RhcnRUaW1lID0gdGltZTsKKworICAgIGlmICghY2F0Y2hVcElmTmVjZXNzYXJ5
IHx8IHRpbWUgPCBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSkgeworICAgICAgICAvLyBIYXZlbid0
IHlldCByZWFjaGVkIHRpbWUgZm9yIG5leHQgZnJhbWUgdG8gc3RhcnQ7IGRlbGF5IHVudGlsIHRo
ZW4uCisgICAgICAgIG1fZnJhbWVUaW1lciA9IG5ldyBUaW1lcjxCaXRtYXBJbWFnZT4odGhpcywg
JkJpdG1hcEltYWdlOjphZHZhbmNlQW5pbWF0aW9uKTsKKyAgICAgICAgbV9mcmFtZVRpbWVyLT5z
dGFydE9uZVNob3Qoc3RkOjptYXgobV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgLSB0aW1lLCAwLikp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBvciBwYXNz
ZWQgdGhlIHRpbWUgZm9yIHRoZSBuZXh0IGZyYW1lIHRvIHN0YXJ0LgorICAgICAgICAvLyBTZWUg
aWYgd2UndmUgYWxzbyBwYXNzZWQgdGhlIHRpbWUgZm9yIGZyYW1lcyBhZnRlciB0aGF0IHRvIHN0
YXJ0LCBpbgorICAgICAgICAvLyBjYXNlIHdlIG5lZWQgdG8gc2tpcCBzb21lIGZyYW1lcyBlbnRp
cmVseS4gIFJlbWVtYmVyIG5vdCB0byBhZHZhbmNlCisgICAgICAgIC8vIHRvIGFuIGluY29tcGxl
dGUgZnJhbWUuCisgICAgICAgIGZvciAoc2l6ZV90IGZyYW1lQWZ0ZXJOZXh0ID0gKG5leHRGcmFt
ZSArIDEpICUgZnJhbWVDb3VudCgpOyBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGZyYW1lQWZ0ZXJO
ZXh0KTsgZnJhbWVBZnRlck5leHQgPSAobmV4dEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCkpIHsK
KyAgICAgICAgICAgIC8vIFNob3VsZCB3ZSBza2lwIHRoZSBuZXh0IGZyYW1lPworICAgICAgICAg
ICAgZG91YmxlIGZyYW1lQWZ0ZXJOZXh0U3RhcnRUaW1lID0gbV9kZXNpcmVkRnJhbWVTdGFydFRp
bWUgKyBmcmFtZUR1cmF0aW9uQXRJbmRleChuZXh0RnJhbWUpOworICAgICAgICAgICAgaWYgKHRp
bWUgPCBmcmFtZUFmdGVyTmV4dFN0YXJ0VGltZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgLy8gWWVzOyBza2lwIG92ZXIgaXQgd2l0aG91dCBub3RpZnlpbmcgb3VyIG9i
c2VydmVycy4KKyAgICAgICAgICAgIGlmICghaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKHRydWUp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZGVzaXJlZEZyYW1lU3Rh
cnRUaW1lID0gZnJhbWVBZnRlck5leHRTdGFydFRpbWU7CisgICAgICAgICAgICBuZXh0RnJhbWUg
PSBmcmFtZUFmdGVyTmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIG5leHQg
ZnJhbWUgaW1tZWRpYXRlbHkuICBOb3RlIHRoYXQgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUKKyAg
ICAgICAgLy8gbWF5IGJlIGluIHRoZSBwYXN0LCBtZWFuaW5nIHRoZSBuZXh0IHRpbWUgdGhyb3Vn
aCB0aGlzIGZ1bmN0aW9uIHdlJ2xsCisgICAgICAgIC8vIGtpY2sgb2ZmIHRoZSBuZXh0IGFkdmFu
Y2VtZW50IHNvb25lciB0aGFuIHRoaXMgZnJhbWUncyBkdXJhdGlvbiB3b3VsZAorICAgICAgICAv
LyBzdWdnZXN0LgorICAgICAgICBpZiAoaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGZhbHNlKSkg
eworICAgICAgICAgICAgLy8gVGhlIGltYWdlIHJlZ2lvbiBoYXMgYmVlbiBtYXJrZWQgZGlydHks
IGJ1dCBvbmNlIHdlIHJldHVybiB0byBvdXIKKyAgICAgICAgICAgIC8vIGNhbGxlciwgZHJhdygp
IHdpbGwgY2xlYXIgaXQsIGFuZCBub3RoaW5nIHdpbGwgY2F1c2UgdGhlCisgICAgICAgICAgICAv
LyBhbmltYXRpb24gdG8gYWR2YW5jZSBhZ2Fpbi4gIFdlIG5lZWQgdG8gc3RhcnQgdGhlIHRpbWVy
IGZvciB0aGUKKyAgICAgICAgICAgIC8vIG5leHQgZnJhbWUgcnVubmluZywgb3IgdGhlIGFuaW1h
dGlvbiBjYW4gaGFuZy4gIChDb21wYXJlIHRoaXMKKyAgICAgICAgICAgIC8vIHdpdGggd2hlbiBh
ZHZhbmNlQW5pbWF0aW9uKCkgaXMgY2FsbGVkLCBhbmQgdGhlIHJlZ2lvbiBpcyBkaXJ0aWVkCisg
ICAgICAgICAgICAvLyB3aGlsZSBkcmF3KCkgaXMgbm90IGluIHRoZSBjYWxsc3RhY2ssIG1lYW5p
bmcgZHJhdygpIGdldHMgY2FsbGVkCisgICAgICAgICAgICAvLyB0byB1cGRhdGUgdGhlIHJlZ2lv
biBhbmQgdGh1cyBzdGFydEFuaW1hdGlvbigpIGlzIHJlYWNoZWQgYWdhaW4uKQorICAgICAgICAg
ICAgLy8gTk9URTogRm9yIGxhcmdlIGltYWdlcyB3aXRoIHNsb3cgb3IgaGVhdmlseS1sb2FkZWQg
c3lzdGVtcywKKyAgICAgICAgICAgIC8vIHRocm93aW5nIGF3YXkgZGF0YSBhcyB3ZSBnbyAoc2Vl
IGRlc3Ryb3lEZWNvZGVkRGF0YSgpKSBtZWFucyB3ZQorICAgICAgICAgICAgLy8gY2FuIHNwZW5k
IHNvIG11Y2ggdGltZSByZS1kZWNvZGluZyBkYXRhIGFib3ZlIHRoYXQgYnkgdGhlIHRpbWUgd2UK
KyAgICAgICAgICAgIC8vIHJlYWNoIGhlcmUgd2UncmUgYmVoaW5kIGFnYWluLiAgSWYgd2UgbGV0
IHN0YXJ0QW5pbWF0aW9uKCkgcnVuCisgICAgICAgICAgICAvLyB0aGUgY2F0Y2gtdXAgY29kZSBh
Z2Fpbiwgd2UgY2FuIGdldCBsb25nIGRlbGF5cyB3aXRob3V0IHBhaW50aW5nCisgICAgICAgICAg
ICAvLyBhcyB3ZSByYWNlIHRoZSB0aW1lciwgb3IgZXZlbiBpbmZpbml0ZSByZWN1cnNpb24uICBJ
biB0aGlzCisgICAgICAgICAgICAvLyBzaXR1YXRpb24gdGhlIGJlc3Qgd2UgY2FuIGRvIGlzIHRv
IHNpbXBseSBjaGFuZ2UgZnJhbWVzIGFzIGZhc3QKKyAgICAgICAgICAgIC8vIGFzIHBvc3NpYmxl
LCBzbyBmb3JjZSBzdGFydEFuaW1hdGlvbigpIHRvIHNldCBhIHplcm8tZGVsYXkgdGltZXIKKyAg
ICAgICAgICAgIC8vIGFuZCBiYWlsIG91dCBpZiB3ZSdyZSBub3QgY2F1Z2h0IHVwLgorICAgICAg
ICAgICAgc3RhcnRBbmltYXRpb24oZmFsc2UpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lk
IEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKQEAgLTI2Nyw2ICszNjUsNyBAQCB2b2lkIEJp
dG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCiAgICAgc3RvcEFuaW1hdGlvbigpOwogICAgIG1f
Y3VycmVudEZyYW1lID0gMDsKICAgICBtX3JlcGV0aXRpb25zQ29tcGxldGUgPSAwOworICAgIG1f
ZGVzaXJlZEZyYW1lU3RhcnRUaW1lID0gMDsKICAgICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gZmFs
c2U7CiAgICAgaW50IGZyYW1lU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgp
ICogNDsKICAgICAKQEAgLTI3Nyw0NyArMzc2LDYxIEBAIHZvaWQgQml0bWFwSW1hZ2U6OnJlc2V0
QW5pbWF0aW9uKCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6YWR2YW5jZUFuaW1hdGlvbihUaW1lcjxC
aXRtYXBJbWFnZT4qIHRpbWVyKQogeworICAgIGludGVybmFsQWR2YW5jZUFuaW1hdGlvbihmYWxz
ZSk7CisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaW1hZ2UgcmVnaW9uIGhhcyBiZWVuIG1hcmtl
ZCBkaXJ0eSwgYW5kIGlmIGl0J3MKKyAgICAvLyBvbnNjcmVlbiwgd2UnbGwgc29vbiBtYWtlIGEg
Y2FsbCB0byBkcmF3KCksIHdoaWNoIHdpbGwgY2FsbAorICAgIC8vIHN0YXJ0QW5pbWF0aW9uKCkg
YWdhaW4gdG8ga2VlcCB0aGUgYW5pbWF0aW9uIG1vdmluZy4KK30KKworYm9vbCBCaXRtYXBJbWFn
ZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdGcmFtZXMpCit7CiAgICAg
Ly8gU3RvcCB0aGUgYW5pbWF0aW9uLgogICAgIHN0b3BBbmltYXRpb24oKTsKICAgICAKICAgICAv
LyBTZWUgaWYgYW55b25lIGlzIHN0aWxsIHBheWluZyBhdHRlbnRpb24gdG8gdGhpcyBhbmltYXRp
b24uICBJZiBub3QsIHdlIGRvbid0CiAgICAgLy8gYWR2YW5jZSBhbmQgd2lsbCByZW1haW4gc3Vz
cGVuZGVkIGF0IHRoZSBjdXJyZW50IGZyYW1lIHVudGlsIHRoZSBhbmltYXRpb24gaXMgcmVzdW1l
ZC4KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpLT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlzKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmICghc2tpcHBpbmdGcmFtZXMgJiYgaW1hZ2VPYnNlcnZl
cigpLT5zaG91bGRQYXVzZUFuaW1hdGlvbih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgbV9jdXJyZW50RnJhbWUrKzsKICAgICBpZiAobV9jdXJyZW50RnJhbWUgPj0gZnJhbWVD
b3VudCgpKSB7Ci0gICAgICAgIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSArPSAxOworICAgICAgICAr
K21fcmVwZXRpdGlvbnNDb21wbGV0ZTsKICAgICAgICAgLy8gR2V0IHRoZSByZXBldGl0aW9uIGNv
dW50IGFnYWluLiAgSWYgd2Ugd2VyZW4ndCBhYmxlIHRvIGdldCBhCiAgICAgICAgIC8vIHJlcGV0
aXRpb24gY291bnQgYmVmb3JlLCB3ZSBzaG91bGQgaGF2ZSBkZWNvZGVkIHRoZSB3aG9sZSBpbWFn
ZSBieQogICAgICAgICAvLyBub3csIHNvIGl0IHNob3VsZCBub3cgYmUgYXZhaWxhYmxlLgotICAg
ICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fc291cmNlLnJlcGV0aXRpb25Db3VudCgpOwotICAg
ICAgICBpZiAobV9yZXBldGl0aW9uQ291bnQgJiYgbV9yZXBldGl0aW9uc0NvbXBsZXRlID49IG1f
cmVwZXRpdGlvbkNvdW50KSB7CisgICAgICAgIGlmIChyZXBldGl0aW9uQ291bnQodHJ1ZSkgJiYg
bV9yZXBldGl0aW9uc0NvbXBsZXRlID49IG1fcmVwZXRpdGlvbkNvdW50KSB7CiAgICAgICAgICAg
ICBtX2FuaW1hdGlvbkZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZGVzaXJlZEZyYW1l
U3RhcnRUaW1lID0gMDsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lLS07Ci0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoc2tpcHBpbmdGcmFtZXMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBVaCBvaC4gIFdlIHRyaWVkIHRvIHNraXAgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbmlt
YXRpb24uICBXZSdkCisgICAgICAgICAgICAgICAgLy8gYmV0dGVyIGRyYXcgdGhpcyBsYXN0IGZy
YW1lLgorICAgICAgICAgICAgICAgIG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgbV9jdXJyZW50RnJhbWUgPSAwOwogICAgIH0KIAorICAgIGlmICghc2tpcHBpbmdGcmFt
ZXMpCisgICAgICAgIG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6bm90aWZ5T2JzZXJ2ZXJBbmRUcmlt
RGVjb2RlZERhdGEoKQorewogICAgIC8vIE5vdGlmeSBvdXIgb2JzZXJ2ZXIgdGhhdCB0aGUgYW5p
bWF0aW9uIGhhcyBhZHZhbmNlZC4KICAgICBpbWFnZU9ic2VydmVyKCktPmFuaW1hdGlvbkFkdmFu
Y2VkKHRoaXMpOwogCi0gICAgLy8gRm9yIGxhcmdlIGFuaW1hdGVkIGltYWdlcywgZ28gYWhlYWQg
YW5kIHRocm93IGF3YXkgZnJhbWVzIGFzIHdlIGdvIHRvIHNhdmUKLSAgICAvLyBmb290cHJpbnQu
CisgICAgLy8gRm9yIGxhcmdlIGFuaW1hdGVkIGltYWdlcywgZ28gYWhlYWQgYW5kIHRocm93IGF3
YXkgZnJhbWVzIGFzIHdlIGdvIHRvCisgICAgLy8gc2F2ZSBmb290cHJpbnQuCiAgICAgaW50IGZy
YW1lU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKICAgICBpZiAo
ZnJhbWVDb3VudCgpICogZnJhbWVTaXplID4gY0xhcmdlQW5pbWF0aW9uQ3V0b2ZmKSB7Ci0gICAg
ICAgIC8vIERlc3Ryb3kgYWxsIG9mIG91ciBmcmFtZXMgYW5kIGp1c3QgcmVkZWNvZGUgZXZlcnkg
dGltZS4KLSAgICAgICAgZGVzdHJveURlY29kZWREYXRhKCk7Ci0KLSAgICAgICAgLy8gR28gYWhl
YWQgYW5kIGRlY29kZSB0aGUgbmV4dCBmcmFtZS4KLSAgICAgICAgZnJhbWVBdEluZGV4KG1fY3Vy
cmVudEZyYW1lKTsKKyAgICAgICAgLy8gRGVzdHJveSBhbGwgb2Ygb3VyIGZyYW1lcyBhbmQganVz
dCByZWRlY29kZSBldmVyeSB0aW1lLiAgV2Ugc2F2ZSB0aGUKKyAgICAgICAgLy8gY3VycmVudCBm
cmFtZSBzaW5jZSB3ZSdsbCBuZWVkIGl0IGluIGRyYXcoKSBhbnl3YXkuCisgICAgICAgIGRlc3Ry
b3lEZWNvZGVkRGF0YShmYWxzZSwgdHJ1ZSk7CiAgICAgfQotICAgIAotICAgIC8vIFdlIGRvIG5v
dCBhZHZhbmNlIHRoZSBhbmltYXRpb24gZXhwbGljaXRseS4gIFdlIHJlbHkgb24gYSBzdWJzZXF1
ZW50IGRyYXcgb2YgdGhlIGltYWdlCi0gICAgLy8gdG8gZm9yY2UgYSByZXF1ZXN0IGZvciB0aGUg
bmV4dCBmcmFtZSB2aWEgc3RhcnRBbmltYXRpb24oKS4gIFRoaXMgYWxsb3dzIGltYWdlcyB0aGF0
IG1vdmUgb2Zmc2NyZWVuIHdoaWxlCi0gICAgLy8gc2Nyb2xsaW5nIHRvIHN0b3AgYW5pbWF0aW5n
ICh0aHVzIHNhdmluZyBtZW1vcnkgZnJvbSBhZGRpdGlvbmFsIGRlY29kZWQgZnJhbWVzIGFuZAot
ICAgIC8vIENQVSB0aW1lIHNwZW50IGRvaW5nIHRoZSBkZWNvZGluZykuCiB9CiAKIH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHJldmlzaW9uIDM2OTYwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2Niw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIHN0
cnVjdCBGcmFtZURhdGEgOiBOb25jb3B5YWJsZSB7CiAgICAgRnJhbWVEYXRhKCkKICAgICAgICAg
OiBtX2ZyYW1lKDApCisgICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCisgICAgICAgICwg
bV9pc0NvbXBsZXRlKGZhbHNlKQogICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgLCBt
X2hhc0FscGhhKHRydWUpIAogICAgIHsKQEAgLTc5LDYgKzgxLDggQEAgc3RydWN0IEZyYW1lRGF0
YSA6IE5vbmNvcHlhYmxlIHsKICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBOYXRpdmVJbWFnZVB0
ciBtX2ZyYW1lOworICAgIGJvb2wgbV9oYXZlTWV0YWRhdGE7CisgICAgYm9vbCBtX2lzQ29tcGxl
dGU7CiAgICAgZmxvYXQgbV9kdXJhdGlvbjsKICAgICBib29sIG1faGFzQWxwaGE7CiB9OwpAQCAt
MTM2LDYgKzE0MCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIGZyYW1lQXRJbmRleChjdXJyZW50RnJh
bWUoKSk7IH0KIAogcHJvdGVjdGVkOgorICAgIGVudW0gUmVwZXRpdGlvbkNvdW50U3RhdHVzIHsK
KyAgICAgIFVua25vd24sICAgIC8vIFdlIGhhdmVuJ3QgY2hlY2tlZCB0aGUgc291cmNlJ3MgcmVw
ZXRpdGlvbiBjb3VudC4KKyAgICAgIFVuY2VydGFpbiwgIC8vIFdlIGhhdmUgYSByZXBldGl0aW9u
IGNvdW50LCBidXQgaXQgbWlnaHQgYmUgd3JvbmcgKHNvbWUgR0lGcyBoYXZlIGEgY291bnQgYWZ0
ZXIgdGhlIGltYWdlIGRhdGEsIGFuZCB3aWxsIHJlcG9ydCAibG9vcCBvbmNlIiB1bnRpbCBhbGwg
ZGF0YSBoYXMgYmVlbiBkZWNvZGVkKS4KKyAgICAgIENlcnRhaW4sICAgIC8vIFRoZSByZXBldGl0
aW9uIGNvdW50IGlzIGtub3duIHRvIGJlIGNvcnJlY3QuCisgICAgfTsKKwogICAgIEJpdG1hcElt
YWdlKE5hdGl2ZUltYWdlUHRyLCBJbWFnZU9ic2VydmVyKiA9IDApOwogICAgIEJpdG1hcEltYWdl
KEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKQEAgLTE1MCwyNCArMTYwLDQ1IEBAIHByb3RlY3RlZDoK
ICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7
IH0KICAgICBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJ
bmRleChzaXplX3QpOworICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOwog
ICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QpOyAKIAogICAgIC8vIERlY29kZXMgYW5kIGNhY2hlcyBhIGZy
YW1lLiBOZXZlciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4KICAgICB2b2lkIGNhY2hlRnJh
bWUoc2l6ZV90IGluZGV4KTsKIAotICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGFsbCBvdXIg
Y2FjaGVkIGRhdGEuICBJZiBhbiBpbWFnZSBpcyBsb2FkaW5nIGluY3JlbWVudGFsbHksIHdlIG9u
bHkKLSAgICAvLyBpbnZhbGlkYXRlIHRoZSBsYXN0IGNhY2hlZCBmcmFtZS4KLSAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSk7CisgICAg
Ly8gQ2FsbGVkIHRvIGludmFsaWRhdGUgYWxsIG91ciBjYWNoZWQgZGF0YS4gIElmIGFuIGltYWdl
IGlzIGxvYWRpbmcKKyAgICAvLyBpbmNyZW1lbnRhbGx5LCB3ZSBvbmx5IGludmFsaWRhdGUgdGhl
IGxhc3QgY2FjaGVkIGZyYW1lLiAgRm9yIGxhcmdlCisgICAgLy8gYW5pbWF0ZWQgaW1hZ2VzLCB3
aGVyZSB3ZSB0aHJvdyBhd2F5IHRoZSBkZWNvZGVkIGRhdGEgYWZ0ZXIgZXZlcnkgZnJhbWUsCisg
ICAgLy8gfHByZXNlcnZlTmVhcmJ5RnJhbWVzfCBjYW4gYmUgc2V0IHRvIHByZXNlcnZlIHRoZSBj
dXJyZW50IGZyYW1lJ3MgZGF0YQorICAgIC8vIGFuZCBlbGltaW5hdGUgc29tZSB1bm5lY2Vzc2Fy
eSBkdXBsaWNhdGVkIGRlY29kaW5nIHdvcmsuICBUaGlzIGFsc28KKyAgICAvLyBwcmVzZXJ2ZXMg
dGhlIG5leHQgZnJhbWUncyBkYXRhLCBpZiBhdmFpbGFibGUuICBJbiBtb3N0IGNhc2VzIHRoaXMg
aGFzIG5vCisgICAgLy8gZWZmZWN0OyBlaXRoZXIgdGhhdCBmcmFtZSBpc24ndCBkZWNvZGVkIHll
dCwgb3IgaXQncyBhbHJlYWR5IGJlZW4KKyAgICAvLyBkZXN0cm95ZWQgYnkgYSBwcmV2aW91cyBj
YWxsLiAgQnV0IHdoZW4gd2UgZmFsbCBiZWhpbmQgb24gdGhlIHZlcnkgZmlyc3QKKyAgICAvLyBh
bmltYXRpb24gbG9vcCBhbmQgc3RhcnRBbmltYXRpb24oKSBuZWVkcyB0byAiY2F0Y2ggdXAiIG9u
ZSBvciBtb3JlCisgICAgLy8gZnJhbWVzLCB0aGlzIGJyaWVmbHkgcHJlc2VydmVzIHNvbWUgb2Yg
dGhhdCBkZWNvZGluZyB3b3JrLCB0byBlYXNlIENQVQorICAgIC8vIGxvYWQgYW5kIG1ha2UgaXQg
bGVzcyBsaWtlbHkgdGhhdCB3ZSdsbCBrZWVwIGZhbGxpbmcgYmVoaW5kLgorICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlLCBib29sIHBy
ZXNlcnZlTmVhcmJ5RnJhbWVzID0gZmFsc2UpOwogCiAgICAgLy8gV2hldGhlciBvciBub3Qgc2l6
ZSBpcyBhdmFpbGFibGUgeWV0LiAgICAKICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogCiAg
ICAgLy8gQW5pbWF0aW9uLgorICAgIGludCByZXBldGl0aW9uQ291bnQoYm9vbCBpbWFnZUtub3du
VG9CZUNvbXBsZXRlKTsgIC8vIHxpbWFnZUtub3duVG9CZUNvbXBsZXRlfCBzaG91bGQgYmUgc2V0
IGlmIHRoZSBjYWxsZXIga25vd3MgdGhlIGVudGlyZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkLgog
ICAgIGJvb2wgc2hvdWxkQW5pbWF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlv
bigpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbihib29sIGNhdGNoVXBJZk5lY2Vz
c2FyeSA9IHRydWUpOwogICAgIHZvaWQgYWR2YW5jZUFuaW1hdGlvbihUaW1lcjxCaXRtYXBJbWFn
ZT4qKTsKLSAgICAKKworICAgIC8vIEZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVhbCB3b3JrIG9m
IGFkdmFuY2luZyB0aGUgYW5pbWF0aW9uLiAgV2hlbgorICAgIC8vIHNraXBwaW5nRnJhbWVzIGlz
IHRydWUsIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBsb29wIHRyeWluZyB0byBza2lwIG92ZXIK
KyAgICAvLyBhIGJ1bmNoIG9mIGFuaW1hdGlvbiBmcmFtZXMsIHNvIHdlIHNob3VsZCBub3QgZG8g
dGhpbmdzIGxpa2UgZGVjb2RlIGVhY2gKKyAgICAvLyBvbmUgb3Igbm90aWZ5IG91ciBvYnNlcnZl
cnMuCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBhbmltYXRpb24gd2FzIGFkdmFuY2VkLgor
ICAgIGJvb2wgaW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKGJvb2wgc2tpcHBpbmdGcmFtZXMpOwor
CisgICAgLy8gSGVscGVyIGZvciBpbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oKS4KKyAgICB2b2lk
IG5vdGlmeU9ic2VydmVyQW5kVHJpbURlY29kZWREYXRhKCk7CisKICAgICAvLyBIYW5kbGUgcGxh
dGZvcm0tc3BlY2lmaWMgZGF0YQogICAgIHZvaWQgaW5pdFBsYXRmb3JtRGF0YSgpOwogICAgIHZv
aWQgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwpAQCAtMTg1LDggKzIxNiwxMCBAQCBwcm90ZWN0
ZWQ6CiAgICAgVmVjdG9yPEZyYW1lRGF0YT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBj
YWNoZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBw
aW4gdGhlbSBpbiB0aGUgY2FjaGUuCiAgICAgCiAgICAgVGltZXI8Qml0bWFwSW1hZ2U+KiBtX2Zy
YW1lVGltZXI7Ci0gICAgaW50IG1fcmVwZXRpdGlvbkNvdW50OyAvLyBIb3cgbWFueSB0b3RhbCBh
bmltYXRpb24gbG9vcHMgd2Ugc2hvdWxkIGRvLgorICAgIGludCBtX3JlcGV0aXRpb25Db3VudDsg
Ly8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNob3VsZCBkby4gIFRoaXMgd2ls
bCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUgaXMgaW5jYXBhYmxlIG9mIGFu
aW1hdGlvbi4KKyAgICBSZXBldGl0aW9uQ291bnRTdGF0dXMgbV9yZXBldGl0aW9uQ291bnRTdGF0
dXM7CiAgICAgaW50IG1fcmVwZXRpdGlvbnNDb21wbGV0ZTsgIC8vIEhvdyBtYW55IHJlcGV0aXRp
b25zIHdlJ3ZlIGZpbmlzaGVkLgorICAgIGRvdWJsZSBtX2Rlc2lyZWRGcmFtZVN0YXJ0VGltZTsg
IC8vIFRoZSBzeXN0ZW0gdGltZSBhdCB3aGljaCB3ZSBob3BlIHRvIHNlZSB0aGUgbmV4dCBjYWxs
IHRvIHN0YXJ0QW5pbWF0aW9uKCkuCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgbXV0YWJsZSBS
ZXRhaW5QdHI8TlNJbWFnZT4gbV9uc0ltYWdlOyAvLyBBIGNhY2hlZCBOU0ltYWdlIG9mIGZyYW1l
IDAuIE9ubHkgYnVpbHQgbGF6aWx5IGlmIHNvbWVvbmUgYWN0dWFsbHkgcXVlcmllcyBmb3Igb25l
LgpAQCAtMTk2LDcgKzIyOSw2IEBAIHByb3RlY3RlZDoKICAgICBDb2xvciBtX3NvbGlkQ29sb3I7
ICAvLyBJZiB3ZSdyZSBhIDF4MSBzb2xpZCBjb2xvciwgdGhpcyBpcyB0aGUgY29sb3IgdG8gdXNl
IHRvIGZpbGwuCiAgICAgYm9vbCBtX2lzU29saWRDb2xvcjsgIC8vIFdoZXRoZXIgb3Igbm90IHdl
IGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KIAotICAgIGJvb2wgbV9hbmltYXRpbmdJbWFnZVR5cGU7
ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSdyZSBhbiBpbWFnZSB0eXBlIHRoYXQgaXMgY2FwYWJsZSBv
ZiBhbmltYXRpbmcgKEdJRikuCiAgICAgYm9vbCBtX2FuaW1hdGlvbkZpbmlzaGVkOyAgLy8gV2hl
dGhlciBvciBub3Qgd2UndmUgY29tcGxldGVkIHRoZSBlbnRpcmUgYW5pbWF0aW9uLgogCiAgICAg
Ym9vbCBtX2FsbERhdGFSZWNlaXZlZDsgIC8vIFdoZXRoZXIgb3Igbm90IHdlJ3ZlIHJlY2VpdmVk
IGFsbCBvdXIgZGF0YS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmgJKHJldmlzaW9uIDM2OTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAg
ICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQgZGF0YSB3
ZSBuZWVkIHRvIHdvcnJ5IGFib3V0Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0
YShib29sIGluY3JlbWVudGFsID0gZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlLCBib29sIHByZXNlcnZlTmVhcmJ5
RnJhbWVzID0gZmFsc2UpIHsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAKIHByb3RlY3RlZDoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgJKHJldmlzaW9uIDM2OTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpOwogICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZl
ZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERh
dGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UsIGJvb2wgcHJlc2VydmVOZWFy
YnlGcmFtZXMgPSBmYWxzZSkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUo
KSBjb25zdCA9IDA7CiAKICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEu
Z2V0KCk7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUNhaXJvLmNwcAkocmV2aXNpb24gMzY5NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw5IEBAIHZv
aWQgRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KG1fZnJhbWUpOwogICAgICAgICBtX2ZyYW1lID0gMDsKLSAgICAgICAg
bV9kdXJhdGlvbiA9IDAuOwotICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgLy8g
Tk9URTogV2UgcHVycG9zZWZ1bGx5IGRvbid0IHJlc2V0IG1ldGFkYXRhIGhlcmUsIHNvIHRoYXQg
ZXZlbiBpZiB3ZQorICAgICAgICAvLyB0aHJvdyBhd2F5IHByZXZpb3VzbHktZGVjb2RlZCBkYXRh
LCBhbmltYXRpb24gbG9vcHMgY2FuIHN0aWxsIGFjY2VzcworICAgICAgICAvLyBwcm9wZXJ0aWVz
IGxpa2UgZnJhbWUgZHVyYXRpb25zIHdpdGhvdXQgcmUtZGVjb2RpbmcuCiAgICAgfQogfQogCkBA
IC01Myw3ICs1NCw4IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3QK
ICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFt
ZVRpbWVyKDApCi0gICAgLCBtX3JlcGV0aXRpb25Db3VudCgwKQorICAgICwgbV9yZXBldGl0aW9u
Q291bnQoY0FuaW1hdGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtu
b3duKQogICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCiAgICAgLCBtX2lzU29saWRDb2xv
cihmYWxzZSkKICAgICAsIG1fYW5pbWF0aW5nSW1hZ2VUeXBlKGZhbHNlKQpAQCAtODIsMTMgKzg0
LDE1IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjYWlyb19zdXJmYWNlX3QKIAogdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0g
ICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKLSAgICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOwor
ICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKICAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gZnJh
bWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRv
byBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCisg
ICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOwor
CiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7CiAgICAgICAgIGZpbGxXaXRoU29s
aWRDb2xvcihjb250ZXh0LCBkc3RSZWN0LCBzb2xpZENvbG9yKCksIG9wKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTMxLDggKzEzNSw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKIAogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogCi0gICAgc3RhcnRBbmltYXRpb24o
KTsKLQogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+
ZGlkRHJhdyh0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUNHLmNwcAkocmV2aXNpb24gMzY5NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHZvaWQgRnJhbWVE
YXRhOjpjbGVhcigpCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgQ0dJbWFnZVJlbGVhc2Uo
bV9mcmFtZSk7CiAgICAgICAgIG1fZnJhbWUgPSAwOwotICAgICAgICBtX2R1cmF0aW9uID0gMC4w
ZjsKLSAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIC8vIE5PVEU6IFdlIHB1cnBv
c2VmdWxseSBkb24ndCByZXNldCBtZXRhZGF0YSBoZXJlLCBzbyB0aGF0IGV2ZW4gaWYgd2UKKyAg
ICAgICAgLy8gdGhyb3cgYXdheSBwcmV2aW91c2x5LWRlY29kZWQgZGF0YSwgYW5pbWF0aW9uIGxv
b3BzIGNhbiBzdGlsbCBhY2Nlc3MKKyAgICAgICAgLy8gcHJvcGVydGllcyBsaWtlIGZyYW1lIGR1
cmF0aW9ucyB3aXRob3V0IHJlLWRlY29kaW5nLgogICAgIH0KIH0KIApAQCAtNjYsMTAgKzY3LDEw
IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW0KICAgICAsIG1fY3Vy
cmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCi0g
ICAgLCBtX3JlcGV0aXRpb25Db3VudCgwKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1h
dGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQogICAgICwg
bV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCiAgICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAg
ICAsIG1fYW5pbWF0aW5nSW1hZ2VUeXBlKGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hl
ZCh0cnVlKQogICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQodHJ1ZSkKICAgICAsIG1faGF2ZVNpemUo
dHJ1ZSkKQEAgLTEyOSw2ICsxMzAsOCBAQCBDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CisgICAgc3RhcnRBbmltYXRpb24oKTsKKwog
ICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwogICAg
IGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2Ug
eWV0LgogICAgICAgICByZXR1cm47CkBAIC0xOTMsOCArMTk2LDYgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgY3R4dC0+cmVzdG9yZSgpOwogCi0gICAg
c3RhcnRBbmltYXRpb24oKTsKLQogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lvbiAzNjk2MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAv
LyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQg
d2lsbCBiZSB1bmFibGUKICAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlv
bnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9IGZhbHNlKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGluY3JlbWVudGFsID0gZmFsc2UsIGJvb2wg
cHJlc2VydmVOZWFyYnlGcmFtZXMgPSBmYWxzZSkgeyB9CiAgICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICAgICAgdmlydHVhbCBJ
bnRTaXplIHNpemUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcAkocmV2aXNpb24gMzY5NjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw5IEBAIHZvaWQgRnJh
bWVEYXRhOjpjbGVhcigpCiB7CiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgbV9mcmFtZSA9
IDA7Ci0gICAgICAgIG1fZHVyYXRpb24gPSAwLjBmOwotICAgICAgICBtX2hhc0FscGhhID0gdHJ1
ZTsKKyAgICAgICAgLy8gTk9URTogV2UgcHVycG9zZWZ1bGx5IGRvbid0IHJlc2V0IG1ldGFkYXRh
IGhlcmUsIHNvIHRoYXQgZXZlbiBpZiB3ZQorICAgICAgICAvLyB0aHJvdyBhd2F5IHByZXZpb3Vz
bHktZGVjb2RlZCBkYXRhLCBhbmltYXRpb24gbG9vcHMgY2FuIHN0aWxsIGFjY2VzcworICAgICAg
ICAvLyBwcm9wZXJ0aWVzIGxpa2UgZnJhbWUgZHVyYXRpb25zIHdpdGhvdXQgcmUtZGVjb2Rpbmcu
CiAgICAgfQogfQogCkBAIC0xMDgsNiArMTA5LDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxp
ZGF0ZVBsYXRmb3JtRGF0YQogdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CisgICAgc3RhcnRBbmlt
YXRpb24oKTsKKwogICAgIFFQaXhtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xMzEsOCArMTM0LDYg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHBhaW50ZXIt
PmRyYXdQaXhtYXAoZHN0LCAqaW1hZ2UsIHNyYyk7CiAKICAgICBjdHh0LT5yZXN0b3JlKCk7Ci0K
LSAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gMzY5NjApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1
Nyw5IEBAIHZvaWQgRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAg
ICAgZGVsZXRlIG1fZnJhbWU7CiAgICAgICAgIG1fZnJhbWUgPSAwOwotICAgICAgICBtX2R1cmF0
aW9uID0gMC47Ci0gICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICAvLyBOT1RFOiBX
ZSBwdXJwb3NlZnVsbHkgZG9uJ3QgcmVzZXQgbWV0YWRhdGEgaGVyZSwgc28gdGhhdCBldmVuIGlm
IHdlCisgICAgICAgIC8vIHRocm93IGF3YXkgcHJldmlvdXNseS1kZWNvZGVkIGRhdGEsIGFuaW1h
dGlvbiBsb29wcyBjYW4gc3RpbGwgYWNjZXNzCisgICAgICAgIC8vIHByb3BlcnRpZXMgbGlrZSBm
cmFtZSBkdXJhdGlvbnMgd2l0aG91dCByZS1kZWNvZGluZy4KICAgICB9CiB9CiAKQEAgLTk4LDYg
Kzk5LDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIHd4
V2luZG93REMqIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICNlbmRpZgogCisg
ICAgc3RhcnRBbmltYXRpb24oKTsKKwogICAgIHd4Qml0bWFwKiBiaXRtYXAgPSBmcmFtZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwogICAgIGlmICghYml0bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJs
eSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwpAQCAtMTQxLDcg
KzE0NCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAg
ICAgYml0bWFwID0gTlVMTDsKICAgICB9CiAgICAgY3R4dC0+cmVzdG9yZSgpOwotICAgIHN0YXJ0
QW5pbWF0aW9uKCk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3Np
dGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQpJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5oCShyZXZpc2lvbiAzNjk2MCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29k
ZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCiAgICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2Ug
dGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgaW5jcmVtZW50YWwgPSBmYWxzZSkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBpbmNyZW1lbnRhbCA9
IGZhbHNlLCBib29sIHByZXNlcnZlTmVhcmJ5RnJhbWVzID0gZmFsc2UpIHsgfQogICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAg
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4g
MDsgfQo=
</data>
<flag name="review"
          id="10747"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>