<?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>107521</bug_id>
          
          <creation_ts>2013-01-22 01:29:23 -0800</creation_ts>
          <short_desc>Don&apos;t service animations on both the animation frame callback and animation timer at the same time</short_desc>
          <delta_ts>2022-08-14 14:07:09 -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>Animations</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107609</dependson>
    
    <dependson>108582</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>dstockwell</reporter>
          <assigned_to>dstockwell</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>graouts</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>812776</commentid>
    <comment_count>0</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 01:29:23 -0800</bug_when>
    <thetext>Don&apos;t service animations on both the animation frame callback and animation timer at the same time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812778</commentid>
    <comment_count>1</comment_count>
      <attachid>183926</attachid>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 01:30:02 -0800</bug_when>
    <thetext>Created attachment 183926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812800</commentid>
    <comment_count>2</comment_count>
      <attachid>183931</attachid>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 01:51:45 -0800</bug_when>
    <thetext>Created attachment 183931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812829</commentid>
    <comment_count>3</comment_count>
      <attachid>183931</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 02:26:29 -0800</bug_when>
    <thetext>Comment on attachment 183931
Patch

Attachment 183931 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16041503

New failing tests:
compositing/reflections/animation-inside-reflection.html
compositing/layer-creation/overlap-animation-clipping.html
fast/css-generated-content/pseudo-element-events.html
css3/filters/custom/custom-filter-transforms-animation.html
animations/3d/matrix-transform-type-animation.html
animations/animation-add-events-in-handler.html
animations/additive-transform-animations.html
animations/3d/replace-filling-transform.html
compositing/visible-rect/animated-from-none.html
compositing/repaint/become-overlay-composited-layer.html
css3/masking/clip-path-animation.html
css3/filters/composited-during-animation-layertree.html
animations/animation-border-overflow.html
compositing/animation/state-at-end-event-transform-layer.html
compositing/animation/animation-compositing.html
compositing/layer-creation/overlap-animation.html
animations/3d/change-transform-in-end-event.html
css3/filters/filter-animation-from-none-multi.html
css3/filters/filter-animation-from-none.html
css3/filters/filter-animation-from-none-multi-hw.html
css3/filters/custom/custom-filter-array-blending.html
fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html
css3/filters/filter-animation-from-none-hw.html
css3/filters/composited-during-animation.html
css3/filters/filter-animation-hw.html
compositing/geometry/partial-layout-update.html
compositing/visible-rect/animated.html
compositing/layer-creation/overlap-animation-container.html
compositing/layer-creation/animation-overlap-with-children.html
compositing/reflections/nested-reflection-animated.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812873</commentid>
    <comment_count>4</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 03:31:51 -0800</bug_when>
    <thetext>Servicing of animations in the animation frame callback was added in http://trac.webkit.org/changeset/107575, however I don&apos;t believe it ever worked as intended.

In the case of accelerated animations every animation frame callback requested another (see http://trac.webkit.org/browser/trunk/Source/WebCore/page/animation/AnimationController.cpp#L232).

In the case of software animations calls to updateAnimations(..) are triggered by both the animation timer and the animation frame callback.


I believe the failures we&apos;re seeing with my patch are because DumpRenderTree (at least for chromium, I will test mac tomorrow) doesn&apos;t generate frames unless requested (eg. testRunner.display())

By adding the following to the layout tests I can cause them to pass, however I&apos;m not sure whether it&apos;s appropriate to do so:

setInterval(function() { testRunner.display() }, 16);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812875</commentid>
    <comment_count>5</comment_count>
      <attachid>183931</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 03:37:47 -0800</bug_when>
    <thetext>Comment on attachment 183931
Patch

Attachment 183931 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16011798

New failing tests:
compositing/reflections/animation-inside-reflection.html
compositing/layer-creation/overlap-animation-clipping.html
animations/3d/matrix-transform-type-animation.html
animations/animation-direction.html
animations/3d/state-at-end-event-transform.html
animations/animation-add-events-in-handler.html
animations/additive-transform-animations.html
animations/3d/replace-filling-transform.html
compositing/repaint/become-overlay-composited-layer.html
animations/animation-border-overflow.html
animations/animation-direction-alternate-reverse.html
compositing/animation/state-at-end-event-transform-layer.html
animations/animation-direction-reverse-fill-mode.html
compositing/animation/animation-compositing.html
compositing/layer-creation/overlap-animation.html
animations/3d/change-transform-in-end-event.html
animations/animation-direction-reverse-hardware.html
animations/animation-direction-reverse-timing-functions.html
http/tests/eventsource/eventsource-cors-with-credentials.html
animations/3d/transform-perspective.html
animations/animation-drt-api-multiple-keyframes.html
animations/animation-direction-reverse-non-hardware.html
animations/animation-direction-normal.html
animations/3d/transform-origin-vs-functions.html
animations/animation-direction-reverse.html
compositing/geometry/partial-layout-update.html
animations/animation-direction-reverse-fill-mode-hardware.html
compositing/layer-creation/overlap-animation-container.html
animations/animation-direction-reverse-hardware-opacity.html
animations/animation-direction-reverse-timing-functions-hardware.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813228</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-01-22 11:07:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Servicing of animations in the animation frame callback was added in http://trac.webkit.org/changeset/107575, however I don&apos;t believe it ever worked as intended.
&gt; 
&gt; In the case of accelerated animations every animation frame callback requested another (see http://trac.webkit.org/browser/trunk/Source/WebCore/page/animation/AnimationController.cpp#L232).
&gt; 
&gt; In the case of software animations calls to updateAnimations(..) are triggered by both the animation timer and the animation frame callback.
&gt; 
&gt; 
&gt; I believe the failures we&apos;re seeing with my patch are because DumpRenderTree (at least for chromium, I will test mac tomorrow) doesn&apos;t generate frames unless requested (eg. testRunner.display())
&gt; 
&gt; By adding the following to the layout tests I can cause them to pass, however I&apos;m not sure whether it&apos;s appropriate to do so:
&gt; 
&gt; setInterval(function() { testRunner.display() }, 16);

I&apos;m still not sure from this comment what the actual bug is, and how you&apos;re trying to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813330</commentid>
    <comment_count>7</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 13:00:25 -0800</bug_when>
    <thetext>(In reply to comment #6)

Hi Simon,

Thanks for taking a look.

&gt; I&apos;m still not sure from this comment what the actual bug is,

The bug is that animation servicing is being triggered by both the animation frame callback and a timer inside AnimationController. http://trac.webkit.org/changeset/107575 (Use requestAnimationFrame callbacks to pump CSS animations) added the use of request animation frame, but didn’t modifiy the existing timing mechanism.

This manifests in several different ways:

In the case of software animations it results in a style recalc frequently being triggered twice per frame. (on each frame callback in addition to the 40hz animation timer)

In the case of an animation with a start delay it results in frames being generated even while we are still waiting for the start delay to elapse.

In the case of exclusive accelerated animations it results in constant scheduling of request animation frame while the accelerated animation is running -- results in unnecessary use of the main thread.

&gt; and how you&apos;re trying to fix it.

My attempted fix is to combine the scheduling logic between request animation frame and the animation timer so that:
 * if servicing of animations is required immediately we use request animation frame (only)
 * in any other case we use the animation timer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813332</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-22 13:02:48 -0800</bug_when>
    <thetext>Do CSS animation events fire with your patch on backgrounded tabs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813373</commentid>
    <comment_count>9</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 13:34:32 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Do CSS animation events fire with your patch on backgrounded tabs?

No, they do not. I can see how in the past the timer would have caused them to fire. I will look into addressing this.

However they also do not fire on background tabs in Chrome Canary or WebKit Nightly... any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813390</commentid>
    <comment_count>10</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 14:04:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
 
&gt; However they also do not fire on background tabs in Chrome Canary or WebKit Nightly... any ideas?

I bisected all the way to: Suspend CSS animations for background tabs
https://bugs.webkit.org/show_bug.cgi?id=106940</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813467</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-22 15:24:07 -0800</bug_when>
    <thetext>Sounds like that&apos;s deliberate behavior, then, so no need to worry about firing the CSS events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813608</commentid>
    <comment_count>12</comment_count>
      <attachid>183931</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 17:30:32 -0800</bug_when>
    <thetext>Comment on attachment 183931
Patch

Attachment 183931 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16033939

New failing tests:
compositing/reflections/animation-inside-reflection.html
compositing/layer-creation/overlap-animation-clipping.html
animations/3d/matrix-transform-type-animation.html
animations/3d/state-at-end-event-transform.html
animations/animation-add-events-in-handler.html
animations/additive-transform-animations.html
animations/3d/replace-filling-transform.html
compositing/visible-rect/animated-from-none.html
compositing/repaint/become-overlay-composited-layer.html
css3/filters/composited-during-animation-layertree.html
animations/animation-border-overflow.html
animations/animation-direction-alternate-reverse.html
compositing/animation/state-at-end-event-transform-layer.html
compositing/animation/animation-compositing.html
compositing/layer-creation/overlap-animation.html
animations/3d/transform-perspective.html
animations/animation-direction-normal.html
animations/3d/transform-origin-vs-functions.html
css3/filters/composited-during-animation.html
canvas/philip/tests/2d.text.draw.fontface.notinpage.html
compositing/geometry/partial-layout-update.html
compositing/visible-rect/animated.html
compositing/layer-creation/overlap-animation-container.html
compositing/layer-creation/animation-overlap-with-children.html
compositing/reflections/nested-reflection-animated.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813649</commentid>
    <comment_count>13</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-22 18:21:25 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Sounds like that&apos;s deliberate behavior, then, so no need to worry about firing the CSS events.

Any suggestions on what to do about the issue running under DumpRenderTree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820832</commentid>
    <comment_count>14</comment_count>
      <attachid>185628</attachid>
    <who name="">dstockwell</who>
    <bug_when>2013-01-30 17:02:59 -0800</bug_when>
    <thetext>Created attachment 185628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820838</commentid>
    <comment_count>15</comment_count>
    <who name="">dstockwell</who>
    <bug_when>2013-01-30 17:07:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=185628) [details]
&gt; Patch

Latest patch respects USE(REQUEST_ANIMATION_FRAME_TIMER) which I expect will resolve the mac failures. Also experimenting with not suspending animations on hidden pages and servicing animations at events.

Still expect failures on Chromium DRT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820994</commentid>
    <comment_count>16</comment_count>
      <attachid>185628</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 19:45:30 -0800</bug_when>
    <thetext>Comment on attachment 185628
Patch

Attachment 185628 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16260060

New failing tests:
compositing/reflections/animation-inside-reflection.html
compositing/layer-creation/overlap-animation-clipping.html
animations/3d/matrix-transform-type-animation.html
animations/animation-direction.html
animations/3d/state-at-end-event-transform.html
animations/animation-add-events-in-handler.html
animations/additive-transform-animations.html
animations/3d/replace-filling-transform.html
compositing/repaint/become-overlay-composited-layer.html
animations/animation-border-overflow.html
animations/animation-direction-alternate-reverse.html
compositing/animation/state-at-end-event-transform-layer.html
animations/animation-direction-reverse-fill-mode.html
compositing/animation/animation-compositing.html
compositing/layer-creation/overlap-animation.html
animations/3d/change-transform-in-end-event.html
animations/animation-direction-reverse-hardware.html
animations/animation-drt-api.html
animations/animation-direction-reverse-timing-functions.html
animations/3d/transform-perspective.html
animations/animation-drt-api-multiple-keyframes.html
animations/animation-direction-reverse-non-hardware.html
animations/animation-direction-normal.html
animations/3d/transform-origin-vs-functions.html
animations/animation-direction-reverse.html
compositing/geometry/partial-layout-update.html
animations/animation-direction-reverse-fill-mode-hardware.html
compositing/layer-creation/overlap-animation-container.html
animations/animation-direction-reverse-hardware-opacity.html
animations/animation-direction-reverse-timing-functions-hardware.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821079</commentid>
    <comment_count>17</comment_count>
      <attachid>185628</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-30 21:56:50 -0800</bug_when>
    <thetext>Comment on attachment 185628
Patch

Attachment 185628 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16253155

New failing tests:
fast/loader/image-in-page-cache.html
fast/history/timed-refresh-in-cached-frame.html
css3/filters/composited-during-animation-layertree.html
fast/frames/frame-dead-region.html
fast/loader/stateobjects/popstate-fires-with-page-cache.html
plugins/frameset-with-plugin-frame.html
fast/harness/user-preferred-language.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821162</commentid>
    <comment_count>18</comment_count>
      <attachid>185628</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-31 00:06:25 -0800</bug_when>
    <thetext>Comment on attachment 185628
Patch

Attachment 185628 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16273018

New failing tests:
fast/loader/image-in-page-cache.html
fast/history/timed-refresh-in-cached-frame.html
css3/filters/composited-during-animation-layertree.html
fast/frames/frame-dead-region.html
fast/harness/results.html
plugins/frameset-with-plugin-frame.html
fast/loader/stateobjects/pushstate-clears-forward-history.html
fast/harness/user-preferred-language.html
fast/dom/Geolocation/not-enough-arguments.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889011</commentid>
    <comment_count>19</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-04 16:58:11 -0700</bug_when>
    <thetext>This seems to have landed in Blink via following:

https://bugs.chromium.org/p/chromium/issues/detail?id=227161#c4

Is it something needed in Safari, there is no test case to verify on how this improve performance or web-compat but just wanted to share updated information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889051</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-08-04 21:09:47 -0700</bug_when>
    <thetext>We rewrote animation code enough that I highly doubt this patch is relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183926</attachid>
            <date>2013-01-22 01:30:02 -0800</date>
            <delta_ts>2013-01-22 01:51:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107521-20130122202656.patch</filename>
            <type>text/plain</type>
            <size>11059</size>
            <attacher>dstockwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM3YTJmYWIwYzUxOTFi
ZDM3NGFkMTE1ODBiNjY1OTk1YzIyNDgxMC4uZDljZjMxNGE2MDFiYmJjYTZjNTU4ODk3Nzc0YWZm
ZTEzNGFiODk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBEb3Vn
bGFzIFN0b2Nrd2VsbCAgPGRzdG9ja3dlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvbid0
IHNlcnZpY2UgYW5pbWF0aW9ucyBvbiBib3RoIHRoZSBhbmltYXRpb24gZnJhbWUgY2FsbGJhY2sg
YW5kIGFuaW1hdGlvbiB0aW1lciBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc1MjEKKworICAgICAgICBOb3QgcmVhZHkg
Zm9yIHJldmlldywgc3RpbGwgV0lQLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2NoZWR1bGVTZXJ2aWNlRm9yUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnNjaGVk
dWxlU2VydmljZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaDoKKyAgICAgICAgKEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKToKKwogMjAx
My0wMS0yMSAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
W1JlZmFjdG9yaW5nXSByZW5hbWUgU3R5bGVSdWxlQmxvY2sgLT4gU3R5bGVSdWxlR3JvdXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKaW5kZXggYzZkNWVlMmRmYTIwM2ExN2FiZTMzMmU5YTA0OWYxOTA3MzE5NDAwZC4uNWU1
OTM5MTc0ZTEwNTg1ZWRhZTBmNGZkMmUyOTAzNmVkYThhNjk0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTg1
LDEwICs4NSwxMCBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBhbmltYXRpb24tPnN1c3BlbmRlZCgpOwog
fQogCi1kb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMo
U2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQorZG91
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldE5lZWRz
U3R5bGVSZWNhbGMgY2FsbFNldE5lZWRzU3R5bGVSZWNhbGMvKiA9IERvTm90Q2FsbFNldE5lZWRz
U3R5bGVSZWNhbGMqLykKIHsKICAgICBkb3VibGUgdGltZVRvTmV4dFNlcnZpY2UgPSAtMTsKLSAg
ICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKKyAgICBib29sIHVwZGF0ZVN0eWxlTmVl
ZGVkID0gZmFsc2U7CiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKQEAgLTk4
LDExICs5OCwxMSBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFu
aW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAgICAgICAgICAgICBpZiAodCAh
PSAtMSAmJiAodCA8IHRpbWVUb05leHRTZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0x
KSkKICAgICAgICAgICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBp
ZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFu
Z2VkID09IENhbGxTZXRDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXROZWVk
c1N0eWxlUmVjYWxjID09IENhbGxTZXROZWVkc1N0eWxlUmVjYWxjKSB7CiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+
aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVk
U2V0Q2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0eWxlTmVlZGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTExMCwxMyArMTEwLDEzIEBAIGRvdWJsZSBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkLyoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjYWxsZWRTZXRDaGFuZ2VkKQor
ICAgIGlmICh1cGRhdGVTdHlsZU5lZWRlZCkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAgICAgcmV0dXJuIHRpbWVUb05leHRTZXJ2aWNlOwog
fQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1l
ckZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzY2hlZHVsZVNlcnZpY2VGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewogICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IDA7CiAKQEAgLTEyNCw0
NCArMTI0LDQ5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvblRpbWVyRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKCFjb21wQW5pbS0+
c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMoKSkKICAgICAgICAgdGltZVRv
TmV4dFNlcnZpY2UgPSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIAotICAgIGlmICht
X2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKG1fcHJldmlvdXNUaW1l
VG9OZXh0U2VydmljZSA8IHRpbWVUb05leHRTZXJ2aWNlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLQotICAgIG1fcHJldmlv
dXNUaW1lVG9OZXh0U2VydmljZSA9IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIG1fYW5pbWF0aW9u
VGltZXIuc3RhcnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlKTsKKyAgICBzY2hlZHVsZVNlcnZp
Y2UodGltZVRvTmV4dFNlcnZpY2UpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyogPSBE
b05vdENhbGxTZXRDaGFuZ2VkKi8pCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
Y2hlZHVsZVNlcnZpY2UoKQogewotICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0
ZUFuaW1hdGlvbnMoY2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gSWYgd2Ugd2FudCBzZXJ2aWNl
IGltbWVkaWF0ZWx5LCB3ZSBzdGFydCBhIHJlcGVhdGluZyB0aW1lciB0byByZWR1Y2UgdGhlIG92
ZXJoZWFkIG9mIHN0YXJ0aW5nCi0gICAgaWYgKCF0aW1lVG9OZXh0U2VydmljZSkgewotICAgICAg
ICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSB8fCBtX2FuaW1hdGlvblRpbWVyLnJl
cGVhdEludGVydmFsKCkgPT0gMCkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRS
ZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAgIGRvdWJsZSB0aW1lVG9OZXh0U2Vy
dmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMoRG9Ob3RDYWxsU2V0TmVlZHNTdHlsZVJlY2FsYyk7Cisg
ICAgc2NoZWR1bGVTZXJ2aWNlKHRpbWVUb05leHRTZXJ2aWNlKTsKK30KIAordm9pZCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6c2NoZWR1bGVTZXJ2aWNlKGRvdWJsZSB0aW1lVG9OZXh0U2Vy
dmljZSkKK3sKKyAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UpIHsKICAgICAgICAgbV9wcmV2aW91
c1RpbWVUb05leHRTZXJ2aWNlID0gdGltZVRvTmV4dFNlcnZpY2U7CisjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnZpZXcoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKKyNlbHNlCisgICAg
ICAgIC8vIFVzZSBhIHJlcGVhdGluZyB0aW1lciBzaW5jZSBpdCdzIGxpa2VseSB0aGF0IHRoZSBu
ZXh0IHRpbWUgdG8gc2VydmljZSB3aWxsCisgICAgICAgIC8vIGFsc28gYmUgMC4KKyAgICAgICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlID09IGNBbmltYXRpb25UaW1lckRlbGF5
CisgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpIHx8ICFtX2FuaW1hdGlv
blRpbWVyLnJlcGVhdEludGVydmFsKCkpIHsKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIu
c3RhcnRSZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworI2VuZGlmCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHNlcnZpY2UsIHdlIHdhbnQg
dG8gbWFrZSBzdXJlIHRoZSB0aW1lciBpcyBubyBsb25nZXIgcnVubmluZwogICAgIGlmICh0aW1l
VG9OZXh0U2VydmljZSA8IDApIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRvIHN0YXJ0IGEgb25lLXNo
b3QgdGltZXIgc28gd2UgZ2V0IGhlcmUgYWdhaW4KLSAgICBpZiAobV9hbmltYXRpb25UaW1lci5p
c0FjdGl2ZSgpKQorICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAg
ICAgaWYgKG1fcHJldmlvdXNUaW1lVG9OZXh0U2VydmljZSA8IHRpbWVUb05leHRTZXJ2aWNlKQor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAg
ICB9CiAgICAgbV9wcmV2aW91c1RpbWVUb05leHRTZXJ2aWNlID0gdGltZVRvTmV4dFNlcnZpY2U7
CiAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QodGltZVRvTmV4dFNlcnZpY2UpOwog
fQogCisKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikKIHsK
ICAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKQEAgLTIyNCwyOSArMjI5LDIyIEBAIHZv
aWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZE5vZGVDaGFuZ2VUb0Rpc3BhdGNoKFBh
c3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyKCk7CiB9CiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKQor
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2VydmljZUFuaW1hdGlvbnMoKQogewot
ICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENo
YW5nZWQpOworICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMo
Q2FsbFNldE5lZWRzU3R5bGVSZWNhbGMpOworICAgIHNjaGVkdWxlU2VydmljZSh0aW1lVG9OZXh0
U2VydmljZSk7CiAKLSAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgPj0gMCkKLSAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpLT5zY2hlZHVsZUFuaW1hdGlvbigpOworICAgIC8vIEZp
cmUgZXZlbnRzIHJpZ2h0IGF3YXksIHRvIGF2b2lkIGEgZmxhc2ggb2YgdW5hbmltYXRlZCBzdHls
ZSBhZnRlciBhbiBhbmltYXRpb24gY29tcGxldGVzLCBhbmQgYmVmb3JlCisgICAgLy8gdGhlICdl
bmQnIGV2ZW50IGZpcmVzLgorICAgIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwogfQotI2Vu
ZGlmCiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmly
ZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikKIHsKICAgICAvLyBNYWtlIHN1
cmUgYW5pbWF0aW9uVXBkYXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQg
ZXZlbiBpZiBubwogICAgIC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVy
YXRlZCBhbmltYXRpb25zKQogICAgIHNldEJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZShjQmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lTm90U2V0KTsKLQotICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVz
LCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFuZ2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5u
aW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8gYW4gaW1tZWRpYXRlCi0gICAgLy8gdXBkYXRlU3R5
bGVJZk5lZWRlZC4gIEl0IHdpbGwgdGhlbiBjYWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3Jt
YXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAg
Ly8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwgdG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVk
IHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0
aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Cisg
ICAgc2VydmljZUFuaW1hdGlvbnMoKTsKIH0KIAogYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3QKQEAgLTI5
OCw3ICsyOTYsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5p
bWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudAogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgc2NoZWR1bGVTZXJ2aWNlKCk7
CiB9CiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0zMTQsNyArMzEyLDcgQEAgdm9pZCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB1cGRhdGVBbmlt
YXRpb25UaW1lcigpOworICAgIHNjaGVkdWxlU2VydmljZSgpOwogfQogCiBib29sIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQpAQCAtNTMxLDExICs1MjksNyBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmlt
YXRpb25zKFJlbmRlck9iamVjdCogcmVuZAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYmxlbmRl
ZFN0eWxlID0gcmVuZGVyZXJBbmltYXRpb25zLT5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwg
bmV3U3R5bGUpOwogCiAgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKSB8fCBuZXdTdHlsZS0+YW5p
bWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAg
ICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVyZXIocmVuZGVyZXIpOwot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICAgICAgaWYgKEZyYW1lVmll
dyogdmlldyA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT52aWV3KCkpCi0gICAgICAgICAgICB2aWV3
LT5zY2hlZHVsZUFuaW1hdGlvbigpOwotI2VuZGlmCisgICAgICAgIG1fZGF0YS0+c2NoZWR1bGVT
ZXJ2aWNlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogICAgIH0KIAogICAgIGlmIChibGVuZGVkU3R5
bGUgIT0gbmV3U3R5bGUpIHsKQEAgLTU5Niw3ICs1OTAsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c2VydmljZUFuaW1hdGlvbnMoKQogewot
ICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxsYmFja0ZpcmVkKCk7CisgICAgbV9kYXRhLT5z
ZXJ2aWNlQW5pbWF0aW9ucygpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCmluZGV4
IDA3YWZiNzRkMGExMDNkMTRhNDg3ZjFmNjc3MjUyY2U2YzlkMzkyYjguLjc1YTY1NjUxMTNiM2E2
NDFmM2JiN2NmNzRjOWRhZDk1ZWFhNmEyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaApAQCAtNTAs
OSArNTAsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVy
U3R5bGU7CiAKLWVudW0gU2V0Q2hhbmdlZCB7Ci0gICAgRG9Ob3RDYWxsU2V0Q2hhbmdlZCA9IDAs
Ci0gICAgQ2FsbFNldENoYW5nZWQgPSAxCitlbnVtIFNldE5lZWRzU3R5bGVSZWNhbGMgeworICAg
IERvTm90Q2FsbFNldE5lZWRzU3R5bGVSZWNhbGMgPSAwLAorICAgIENhbGxTZXROZWVkc1N0eWxl
UmVjYWxjID0gMQogfTsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgewpAQCAt
NjIsOCArNjIsOCBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKCk7
CiAKICAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IGFuaW1hdGlvbiBuZWVk
cyB0byBiZSBzZXJ2aWNlZCwgb3IgLTEgaWYgdGhlcmUgYXJlIG5vbmUuCi0gICAgZG91YmxlIHVw
ZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENo
YW5nZWQpOwotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0
Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQpOworICAgIGRvdWJsZSB1cGRhdGVBbmltYXRp
b25zKFNldE5lZWRzU3R5bGVSZWNhbGMgY2FsbFNldE5lZWRzU3R5bGVSZWNhbGMgPSBEb05vdENh
bGxTZXROZWVkc1N0eWxlUmVjYWxjKTsKKyAgICB2b2lkIHNjaGVkdWxlU2VydmljZSgpOwogCiAg
ICAgUGFzc1JlZlB0cjxDb21wb3NpdGVBbmltYXRpb24+IGFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlv
bihSZW5kZXJPYmplY3QqKTsKICAgICBib29sIGNsZWFyKFJlbmRlck9iamVjdCopOwpAQCAtNzcs
OSArNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAg
dm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQotICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVDYWxsYmFja0ZpcmVkKCk7Ci0jZW5kaWYKKyAg
ICB2b2lkIHNlcnZpY2VBbmltYXRpb25zKCk7CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25z
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1
bWVudChEb2N1bWVudCopOwpAQCAtMTA2LDExICsxMDQsMTMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqKTsKIAotICAgIHZvaWQgdXBk
YXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHNj
aGVkdWxlU2VydmljZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCopOwogICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU+Kik7CiAKKyAgICB2b2lkIHNjaGVkdWxlU2VydmljZShkb3VibGUgdGltZVRvTmV4dFNl
cnZpY2UpOworCiAgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOwogICAgIHZvaWQgZmlyZUV2ZW50
c0FuZFVwZGF0ZVN0eWxlKCk7CiAgICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183931</attachid>
            <date>2013-01-22 01:51:45 -0800</date>
            <delta_ts>2013-01-30 17:02:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107521-20130122204839.patch</filename>
            <type>text/plain</type>
            <size>11029</size>
            <attacher>dstockwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM3YTJmYWIwYzUxOTFi
ZDM3NGFkMTE1ODBiNjY1OTk1YzIyNDgxMC4uZDljZjMxNGE2MDFiYmJjYTZjNTU4ODk3Nzc0YWZm
ZTEzNGFiODk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBEb3Vn
bGFzIFN0b2Nrd2VsbCAgPGRzdG9ja3dlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIERvbid0
IHNlcnZpY2UgYW5pbWF0aW9ucyBvbiBib3RoIHRoZSBhbmltYXRpb24gZnJhbWUgY2FsbGJhY2sg
YW5kIGFuaW1hdGlvbiB0aW1lciBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc1MjEKKworICAgICAgICBOb3QgcmVhZHkg
Zm9yIHJldmlldywgc3RpbGwgV0lQLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2NoZWR1bGVTZXJ2aWNlRm9yUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnNjaGVk
dWxlU2VydmljZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaDoKKyAgICAgICAgKEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKToKKwogMjAx
My0wMS0yMSAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
W1JlZmFjdG9yaW5nXSByZW5hbWUgU3R5bGVSdWxlQmxvY2sgLT4gU3R5bGVSdWxlR3JvdXAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKaW5kZXggYzZkNWVlMmRmYTIwM2ExN2FiZTMzMmU5YTA0OWYxOTA3MzE5NDAwZC4uZmE3
YmQyZmY1YzkxYTZmZGMxOGMzNGQxN2NkN2RmMWUyNzc0Zjg0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTg1
LDEwICs4NSwxMCBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiBhbmltYXRpb24tPnN1c3BlbmRlZCgpOwog
fQogCi1kb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMo
U2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQorZG91
YmxlIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldE5lZWRz
U3R5bGVSZWNhbGMgY2FsbFNldE5lZWRzU3R5bGVSZWNhbGMvKiA9IERvTm90Q2FsbFNldE5lZWRz
U3R5bGVSZWNhbGMqLykKIHsKICAgICBkb3VibGUgdGltZVRvTmV4dFNlcnZpY2UgPSAtMTsKLSAg
ICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKKyAgICBib29sIHVwZGF0ZVN0eWxlTmVl
ZGVkID0gZmFsc2U7CiAKICAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgZm9y
IChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKQEAgLTk4
LDExICs5OCwxMSBAQCBkb3VibGUgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFu
aW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qCiAgICAgICAgICAgICBpZiAodCAh
PSAtMSAmJiAodCA8IHRpbWVUb05leHRTZXJ2aWNlIHx8IHRpbWVUb05leHRTZXJ2aWNlID09IC0x
KSkKICAgICAgICAgICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9IHQ7CiAgICAgICAgICAgICBp
ZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFu
Z2VkID09IENhbGxTZXRDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXROZWVk
c1N0eWxlUmVjYWxjID09IENhbGxTZXROZWVkc1N0eWxlUmVjYWxjKSB7CiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+a2V5LT5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+
aW5QYWdlQ2FjaGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGVk
U2V0Q2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0eWxlTmVlZGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTExMCwxMyArMTEwLDEzIEBAIGRvdWJsZSBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkLyoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjYWxsZWRTZXRDaGFuZ2VkKQor
ICAgIGlmICh1cGRhdGVTdHlsZU5lZWRlZCkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAgICAgcmV0dXJuIHRpbWVUb05leHRTZXJ2aWNlOwog
fQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1l
ckZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzY2hlZHVsZVNlcnZpY2VGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewogICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IDA7CiAKQEAgLTEyNCw0
NCArMTI0LDQ5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvblRpbWVyRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByCiAgICAgaWYgKCFjb21wQW5pbS0+
c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMoKSkKICAgICAgICAgdGltZVRv
TmV4dFNlcnZpY2UgPSBjb21wQW5pbS0+dGltZVRvTmV4dFNlcnZpY2UoKTsKIAotICAgIGlmICht
X2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKG1fcHJldmlvdXNUaW1l
VG9OZXh0U2VydmljZSA8IHRpbWVUb05leHRTZXJ2aWNlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgIH0KLQotICAgIG1fcHJldmlv
dXNUaW1lVG9OZXh0U2VydmljZSA9IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIG1fYW5pbWF0aW9u
VGltZXIuc3RhcnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlKTsKKyAgICBzY2hlZHVsZVNlcnZp
Y2UodGltZVRvTmV4dFNlcnZpY2UpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyogPSBE
b05vdENhbGxTZXRDaGFuZ2VkKi8pCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
Y2hlZHVsZVNlcnZpY2UoKQogewotICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0
ZUFuaW1hdGlvbnMoY2FsbFNldENoYW5nZWQpOworICAgIGRvdWJsZSB0aW1lVG9OZXh0U2Vydmlj
ZSA9IHVwZGF0ZUFuaW1hdGlvbnMoRG9Ob3RDYWxsU2V0TmVlZHNTdHlsZVJlY2FsYyk7CisgICAg
c2NoZWR1bGVTZXJ2aWNlKHRpbWVUb05leHRTZXJ2aWNlKTsKK30KIAotICAgIC8vIElmIHdlIHdh
bnQgc2VydmljZSBpbW1lZGlhdGVseSwgd2Ugc3RhcnQgYSByZXBlYXRpbmcgdGltZXIgdG8gcmVk
dWNlIHRoZSBvdmVyaGVhZCBvZiBzdGFydGluZwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c2NoZWR1bGVTZXJ2aWNlKGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSkKK3sKICAgICBp
ZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7Ci0gICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5p
c0FjdGl2ZSgpIHx8IG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSA9PSAwKQotICAg
ICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJE
ZWxheSk7Ci0KICAgICAgICAgbV9wcmV2aW91c1RpbWVUb05leHRTZXJ2aWNlID0gdGltZVRvTmV4
dFNlcnZpY2U7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBp
ZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9hbmltYXRpb25U
aW1lci5zdG9wKCk7CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnZpZXcoKS0+c2NoZWR1
bGVBbmltYXRpb24oKTsKKyNlbHNlCisgICAgICAgIC8vIFVzZSBhIHJlcGVhdGluZyB0aW1lciBz
aW5jZSBpdCdzIGxpa2VseSB0aGF0IHRoZSBuZXh0IHRpbWUgdG8gc2VydmljZSB3aWxsCisgICAg
ICAgIC8vIGFsc28gYmUgMC4KKyAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHByb2JhYmx5
IGJlID09IGNBbmltYXRpb25UaW1lckRlbGF5CisgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpIHx8ICFtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkpIHsKKyAg
ICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVy
RGVsYXkpOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSBk
b24ndCBuZWVkIHNlcnZpY2UsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB0aW1lciBpcyBubyBs
b25nZXIgcnVubmluZwogICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSA8IDApIHsKICAgICAgICAg
aWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgICAgIG1fYW5pbWF0aW9u
VGltZXIuc3RvcCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gT3RoZXJ3aXNl
LCB3ZSB3YW50IHRvIHN0YXJ0IGEgb25lLXNob3QgdGltZXIgc28gd2UgZ2V0IGhlcmUgYWdhaW4K
LSAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgIGlmIChtX2FuaW1hdGlv
blRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKG1fcHJldmlvdXNUaW1lVG9OZXh0U2Vy
dmljZSA8IHRpbWVUb05leHRTZXJ2aWNlKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBt
X2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKKyAgICB9CiAgICAgbV9wcmV2aW91c1RpbWVUb05leHRT
ZXJ2aWNlID0gdGltZVRvTmV4dFNlcnZpY2U7CiAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9u
ZVNob3QodGltZVRvTmV4dFNlcnZpY2UpOwogfQogCisKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU+KikKIHsKICAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUo
KTsKQEAgLTIyNCwyOSArMjI5LDIyIEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZE5vZGVDaGFuZ2VUb0Rpc3BhdGNoKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICBzdGFy
dFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiB9CiAKLSNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmlt
YXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c2VydmljZUFuaW1hdGlvbnMoKQogewotICAgIGRvdWJsZSB0aW1lVG9OZXh0U2VydmljZSA9
IHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENoYW5nZWQpOworICAgIGRvdWJsZSB0aW1lVG9OZXh0
U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldE5lZWRzU3R5bGVSZWNhbGMpOworICAg
IHNjaGVkdWxlU2VydmljZSh0aW1lVG9OZXh0U2VydmljZSk7CiAKLSAgICBpZiAodGltZVRvTmV4
dFNlcnZpY2UgPj0gMCkKLSAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dmlldygpLT5zY2hl
ZHVsZUFuaW1hdGlvbigpOworICAgIC8vIEZpcmUgZXZlbnRzIHJpZ2h0IGF3YXksIHRvIGF2b2lk
IGEgZmxhc2ggb2YgdW5hbmltYXRlZCBzdHlsZSBhZnRlciBhbiBhbmltYXRpb24gY29tcGxldGVz
LCBhbmQgYmVmb3JlCisgICAgLy8gdGhlICdlbmQnIGV2ZW50IGZpcmVzLgorICAgIGZpcmVFdmVu
dHNBbmRVcGRhdGVTdHlsZSgpOwogfQotI2VuZGlmCiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU+KikKIHsKICAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9uVXBkYXRlVGltZSBpcyB1cGRh
dGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBubwogICAgIC8vIHN0eWxlQ2hhbmdl
IGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmltYXRpb25zKQogICAgIHNldEJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZShjQmVnaW5BbmltYXRpb25VcGRhdGVUaW1lTm90U2V0KTsKLQot
ICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFuZ2Vk
IG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8gYW4g
aW1tZWRpYXRlCi0gICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZC4gIEl0IHdpbGwgdGhlbiBjYWxs
IGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9uVGlt
ZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwgdG8g
YXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBjb21w
bGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAgZmly
ZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7CisgICAgc2VydmljZUFuaW1hdGlvbnMoKTsKIH0KIAog
Ym9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29s
IGlzUnVubmluZ05vdykgY29uc3QKQEAgLTI5OCw3ICsyOTYsNyBAQCB2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVy
KCk7CisgICAgc2NoZWR1bGVTZXJ2aWNlKCk7CiB9CiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQp
CkBAIC0zMTQsNyArMzEyLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVz
dW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIHNjaGVkdWxlU2Vy
dmljZSgpOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1h
dGlvbkF0VGltZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRv
dWJsZSB0KQpAQCAtNTMxLDExICs1MjksNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBBbmlt
YXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZAogICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gYmxlbmRlZFN0eWxlID0gcmVuZGVyZXJBbmltYXRpb25zLT5h
bmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwgbmV3U3R5bGUpOwogCiAgICAgaWYgKHJlbmRlcmVy
LT5wYXJlbnQoKSB8fCBuZXdTdHlsZS0+YW5pbWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRT
dHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAgICAgICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRp
bWVyRm9yUmVuZGVyZXIocmVuZGVyZXIpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT5kb2N1bWVudCgp
LT52aWV3KCkpCi0gICAgICAgICAgICB2aWV3LT5zY2hlZHVsZUFuaW1hdGlvbigpOwotI2VuZGlm
CisgICAgICAgIG1fZGF0YS0+c2NoZWR1bGVTZXJ2aWNlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwog
ICAgIH0KIAogICAgIGlmIChibGVuZGVkU3R5bGUgIT0gbmV3U3R5bGUpIHsKQEAgLTU5Niw3ICs1
OTAsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQogI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
cjo6c2VydmljZUFuaW1hdGlvbnMoKQogewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxs
YmFja0ZpcmVkKCk7CisgICAgbV9kYXRhLT5zZXJ2aWNlQW5pbWF0aW9ucygpOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oCmluZGV4IDA3YWZiNzRkMGExMDNkMTRhNDg3ZjFmNjc3MjUy
Y2U2YzlkMzkyYjguLjc1YTY1NjUxMTNiM2E2NDFmM2JiN2NmNzRjOWRhZDk1ZWFhNmEyNjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUuaApAQCAtNTAsOSArNTAsOSBAQCBjbGFzcyBOb2RlOwogY2xhc3Mg
UmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKLWVudW0gU2V0Q2hhbmdlZCB7Ci0g
ICAgRG9Ob3RDYWxsU2V0Q2hhbmdlZCA9IDAsCi0gICAgQ2FsbFNldENoYW5nZWQgPSAxCitlbnVt
IFNldE5lZWRzU3R5bGVSZWNhbGMgeworICAgIERvTm90Q2FsbFNldE5lZWRzU3R5bGVSZWNhbGMg
PSAwLAorICAgIENhbGxTZXROZWVkc1N0eWxlUmVjYWxjID0gMQogfTsKIAogY2xhc3MgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUgewpAQCAtNjIsOCArNjIsOCBAQCBwdWJsaWM6CiAgICAgfkFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKCk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIHVu
dGlsIHRoZSBuZXh0IGFuaW1hdGlvbiBuZWVkcyB0byBiZSBzZXJ2aWNlZCwgb3IgLTEgaWYgdGhl
cmUgYXJlIG5vbmUuCi0gICAgZG91YmxlIHVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxs
U2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQpOwotICAgIHZvaWQgdXBkYXRlQW5pbWF0
aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQp
OworICAgIGRvdWJsZSB1cGRhdGVBbmltYXRpb25zKFNldE5lZWRzU3R5bGVSZWNhbGMgY2FsbFNl
dE5lZWRzU3R5bGVSZWNhbGMgPSBEb05vdENhbGxTZXROZWVkc1N0eWxlUmVjYWxjKTsKKyAgICB2
b2lkIHNjaGVkdWxlU2VydmljZSgpOwogCiAgICAgUGFzc1JlZlB0cjxDb21wb3NpdGVBbmltYXRp
b24+IGFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJPYmplY3QqKTsKICAgICBib29sIGNs
ZWFyKFJlbmRlck9iamVjdCopOwpAQCAtNzcsOSArNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0jaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVD
YWxsYmFja0ZpcmVkKCk7Ci0jZW5kaWYKKyAgICB2b2lkIHNlcnZpY2VBbmltYXRpb25zKCk7CiAK
ICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKICAgICB2
b2lkIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwpAQCAtMTA2LDExICsx
MDQsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1h
dGlvbkJhc2UqKTsKIAotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihS
ZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHNjaGVkdWxlU2VydmljZUZvclJlbmRlcmVyKFJlbmRl
ck9iamVjdCopOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQo
VGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7CiAKKyAgICB2b2lkIHNjaGVkdWxl
U2VydmljZShkb3VibGUgdGltZVRvTmV4dFNlcnZpY2UpOworCiAgICAgdm9pZCBzdHlsZUF2YWls
YWJsZSgpOwogICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7CiAgICAgdm9pZCBz
dGFydFRpbWVSZXNwb25zZShkb3VibGUgdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185628</attachid>
            <date>2013-01-30 17:02:59 -0800</date>
            <delta_ts>2013-01-31 00:06:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107521-20130131115943.patch</filename>
            <type>text/plain</type>
            <size>17196</size>
            <attacher>dstockwell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTczYmU5ODNiNDRjNDI5
ZTAyNDBkOTg1MmI4OWJlZjNiNDIxM2IyNi4uMmM5ODcwMDhkZTlhODA4YWI5MTg3NmY0NDhhYWQ0
ZjdkMjlhMTcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM3IEBACiAyMDEzLTAxLTMwICBEb3Vn
bGFzIFN0b2Nrd2VsbCAgPGRzdG9ja3dlbGxAY2hyb21pdW0ub3JnPgogCisgICAgICAgIERvbid0
IHNlcnZpY2UgYW5pbWF0aW9ucyBvbiBib3RoIHRoZSBhbmltYXRpb24gZnJhbWUgY2FsbGJhY2sg
YW5kIGFuaW1hdGlvbiB0aW1lciBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc1MjEKKworICAgICAgICBOb3QgcmVhZHkg
Zm9yIHJldmlldywgc3RpbGwgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRWaXNpYmls
aXR5U3RhdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnNjaGVkdWxlU2VydmljZUZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzY2hlZHVsZVNlcnZpY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2Vydmlj
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnNGb3JE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZp
Y2VBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oOgorICAgICAgICAoQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUpOgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnRpbWVUb05leHRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoK
KyAgICAgICAgKENvbXBvc2l0ZUFuaW1hdGlvbik6CisKKzIwMTMtMDEtMzAgIERvdWdsYXMgU3Rv
Y2t3ZWxsICA8ZHN0b2Nrd2VsbEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmVtb3ZlIHVubmVj
ZXNzYXJ5IHNldEFuaW1hdGluZygpIG1ldGhvZAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDk1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGFlY2Jh
MzM5NjE2NTZhYzVjNDE1NTNiYmQzYjk3MjFhMGEyZGQyMTguLjA3NWY4Y2NkZmIyZmQ4Nzc1NGU4
NGE2ZTQzODlkZGMzZTZmMmNjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTE5MSwxMiArMTE5
MSwxMCBAQCB2b2lkIFBhZ2U6OnNldFZpc2liaWxpdHlTdGF0ZShQYWdlVmlzaWJpbGl0eVN0YXRl
IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYQogI2lmIEVOQUJMRShISURERU5fUEFHRV9E
T01fVElNRVJfVEhST1RUTElORykKICAgICAgICAgc2V0VGltZXJBbGlnbm1lbnRJbnRlcnZhbChT
ZXR0aW5nczo6aGlkZGVuUGFnZURPTVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKSk7CiAjZW5kaWYK
LSAgICAgICAgbWFpbkZyYW1lKCktPmFuaW1hdGlvbigpLT5zdXNwZW5kQW5pbWF0aW9ucygpOwog
ICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5H
KQogICAgICAgICBzZXRUaW1lckFsaWdubWVudEludGVydmFsKFNldHRpbmdzOjpkZWZhdWx0RE9N
VGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpKTsKICNlbmRpZgotICAgICAgICBtYWluRnJhbWUoKS0+
YW5pbWF0aW9uKCktPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiAjaWYgIUVOQUJMRShQQUdF
X1ZJU0lCSUxJVFlfQVBJKQogICAgIFVOVVNFRF9QQVJBTShpc0luaXRpYWxTdGF0ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCmluZGV4IGY5N2M5MmI2YWU4NTI2MzVjYTUwNjE4ZWU1YmI5ZjkwOTY0OWJlZjcuLjc2M2E1
MWEwMDgwY2U1MzkyMjQ0OWM2NDU2YmZlMzBhOThjOTM2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBzZXVk
b0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVHJhbnNpdGlv
bkV2ZW50LmgiCkBAIC04Nyw4MyArODgsMTA4IEBAIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmNsZWFyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgcmV0dXJuIGFuaW1hdGlv
bi0+c3VzcGVuZGVkKCk7CiB9CiAKLWRvdWJsZSBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkLyogPSBEb05vdENhbGxT
ZXRDaGFuZ2VkKi8pCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmlt
YXRpb25zKGRvdWJsZSYgdGltZVRvTmV4dFNlcnZpY2UsIGRvdWJsZSYgdGltZVRvTmV4dEV2ZW50
LCBTZXROZWVkc1N0eWxlUmVjYWxjIGNhbGxTZXROZWVkc1N0eWxlUmVjYWxjLyogPSBEb05vdENh
bGxTZXROZWVkc1N0eWxlUmVjYWxjKi8pCiB7Ci0gICAgZG91YmxlIHRpbWVUb05leHRTZXJ2aWNl
ID0gLTE7Ci0gICAgYm9vbCBjYWxsZWRTZXRDaGFuZ2VkID0gZmFsc2U7CisgICAgZG91YmxlIG1p
blRpbWVUb05leHRTZXJ2aWNlID0gLTE7CisgICAgZG91YmxlIG1pblRpbWVUb05leHRFdmVudCA9
IC0xOworICAgIGJvb2wgdXBkYXRlU3R5bGVOZWVkZWQgPSBmYWxzZTsKIAogICAgIFJlbmRlck9i
amVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
YW5pbWF0aW9uc0VuZDsgKytpdCkgewogICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQo
KSAmJiBjb21wQW5pbS0+aGFzQW5pbWF0aW9ucygpKSB7CiAgICAgICAgICAgICBkb3VibGUgdCA9
IGNvbXBBbmltLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAgICAgaWYgKHQgIT0gLTEg
JiYgKHQgPCB0aW1lVG9OZXh0U2VydmljZSB8fCB0aW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCi0g
ICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0OwotICAgICAgICAgICAgaWYgKCF0
aW1lVG9OZXh0U2VydmljZSkgewotICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCA9
PSBDYWxsU2V0Q2hhbmdlZCkgeworICAgICAgICAgICAgaWYgKHQgIT0gLTEgJiYgKHQgPCBtaW5U
aW1lVG9OZXh0U2VydmljZSB8fCBtaW5UaW1lVG9OZXh0U2VydmljZSA9PSAtMSkpCisgICAgICAg
ICAgICAgICAgbWluVGltZVRvTmV4dFNlcnZpY2UgPSB0OworICAgICAgICAgICAgZG91YmxlIG5l
eHRFdmVudCA9IGNvbXBBbmltLT50aW1lVG9OZXh0RXZlbnQoKTsKKyAgICAgICAgICAgIGlmIChu
ZXh0RXZlbnQgIT0gLTEgJiYgKG5leHRFdmVudCA8IG1pblRpbWVUb05leHRFdmVudCB8fCBtaW5U
aW1lVG9OZXh0RXZlbnQgPT0gLTEpKQorICAgICAgICAgICAgICAgIG1pblRpbWVUb05leHRFdmVu
dCA9IG5leHRFdmVudDsKKyAgICAgICAgICAgIGlmIChjYWxsU2V0TmVlZHNTdHlsZVJlY2FsYyA9
PSBDYWxsU2V0TmVlZHNTdHlsZVJlY2FsYykgeworICAgICAgICAgICAgICAgIGlmICghdCkgewog
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gaXQtPmtleS0+bm9kZSgpOwogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUt
PmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhbGxlZFNldENoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB1cGRh
dGVTdHlsZU5lZWRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFtaW5UaW1lVG9OZXh0U2VydmljZSAmJiAhbWluVGltZVRvTmV4dEV2
ZW50KQorICAgICAgICAgICAgICAgIC8vIGZvdW5kIHRoZSBtaW5pbXVtIHZhbHVlcyBhbmQgZG8g
bm90IG5lZWQgdG8gc2V0TmVlZHNTdHlsZVJlY2FsYworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNhbGxlZFNldENoYW5nZWQpCisgICAgaWYgKHVw
ZGF0ZVN0eWxlTmVlZGVkKQogICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CiAKLSAgICByZXR1cm4gdGltZVRvTmV4dFNlcnZpY2U7CisgICAgdGltZVRv
TmV4dFNlcnZpY2UgPSBtaW5UaW1lVG9OZXh0U2VydmljZTsKKyAgICB0aW1lVG9OZXh0RXZlbnQg
PSBtaW5UaW1lVG9OZXh0RXZlbnQ7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnNjaGVkdWxlU2VydmljZUZvclJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgZG91YmxlIHRpbWVUb05leHRT
ZXJ2aWNlID0gMDsKKyAgICBkb3VibGUgdGltZVRvTmV4dFNlcnZpY2UgPSAtMTsKKyAgICBkb3Vi
bGUgdGltZVRvTmV4dEV2ZW50ID0gLTE7CiAKICAgICBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9u
PiBjb21wQW5pbSA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVyZXIpOwotICAgIGlm
ICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5oYXNBbmltYXRpb25zKCkpCisg
ICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmhhc0FuaW1hdGlvbnMo
KSkgewogICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9IGNvbXBBbmltLT50aW1lVG9OZXh0U2Vy
dmljZSgpOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAg
ICBpZiAobV9wcmV2aW91c1RpbWVUb05leHRTZXJ2aWNlIDwgdGltZVRvTmV4dFNlcnZpY2UpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cisg
ICAgICAgIHRpbWVUb05leHRFdmVudCA9IGNvbXBBbmltLT50aW1lVG9OZXh0RXZlbnQoKTsKICAg
ICB9CiAKLSAgICBtX3ByZXZpb3VzVGltZVRvTmV4dFNlcnZpY2UgPSB0aW1lVG9OZXh0U2Vydmlj
ZTsKLSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVG9OZXh0U2VydmljZSk7
CisgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlID49IDApCisgICAgICAgIHNjaGVkdWxlU2Vydmlj
ZSh0aW1lVG9OZXh0U2VydmljZSwgdGltZVRvTmV4dEV2ZW50KTsKIH0KIAotdm9pZCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxs
U2V0Q2hhbmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQordm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6c2NoZWR1bGVTZXJ2aWNlKCkKIHsKLSAgICBkb3VibGUgdGltZVRvTmV4
dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFuZ2VkKTsKKyAgICBkb3VibGUg
dGltZVRvTmV4dFNlcnZpY2UgPSAtMTsKKyAgICBkb3VibGUgdGltZVRvTmV4dEV2ZW50ID0gLTE7
CisgICAgdXBkYXRlQW5pbWF0aW9ucyh0aW1lVG9OZXh0U2VydmljZSwgdGltZVRvTmV4dEV2ZW50
LCBEb05vdENhbGxTZXROZWVkc1N0eWxlUmVjYWxjKTsKKyAgICBzY2hlZHVsZVNlcnZpY2UodGlt
ZVRvTmV4dFNlcnZpY2UsIHRpbWVUb05leHRFdmVudCk7Cit9CiAKLSAgICAvLyBJZiB3ZSB3YW50
IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdlIHN0YXJ0IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVj
ZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRpbmcKLSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7
Ci0gICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpIHx8IG1fYW5pbWF0aW9u
VGltZXIucmVwZWF0SW50ZXJ2YWwoKSA9PSAwKQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1l
ci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Cit2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpzY2hlZHVsZVNlcnZpY2UoZG91YmxlIHRpbWVUb05leHRTZXJ2aWNl
LCBkb3VibGUgdGltZVRvTmV4dEV2ZW50KQoreworICAgIGJvb2wgdmlzaWJsZSA9IHRydWU7Cisj
aWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCisgICAgdmlzaWJsZSA9IG1fZnJhbWUtPnBh
Z2UoKS0+dmlzaWJpbGl0eVN0YXRlKCkgIT0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZUhp
ZGRlbjsKKyNlbmRpZgogCisgICAgaWYgKCF2aXNpYmxlKQorICAgICAgICB0aW1lVG9OZXh0U2Vy
dmljZSA9IHRpbWVUb05leHRFdmVudDsKKyAgICAKKyAgICBpZiAodmlzaWJsZSAmJiAhdGltZVRv
TmV4dFNlcnZpY2UpIHsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCisgICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnZpZXcoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKKyAgICAgICAgaWYgKG1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgp
OworICAgICAgICBtX3ByZXZpb3VzVGltZVRvTmV4dFNlcnZpY2UgPSB0aW1lVG9OZXh0U2Vydmlj
ZTsKKyNlbHNlCiAgICAgICAgIG1fcHJldmlvdXNUaW1lVG9OZXh0U2VydmljZSA9IHRpbWVUb05l
eHRTZXJ2aWNlOworICAgICAgICAvLyBVc2UgYSByZXBlYXRpbmcgdGltZXIgc2luY2UgaXQncyBs
aWtlbHkgdGhhdCB0aGUgbmV4dCB0aW1lIHRvIHNlcnZpY2Ugd2lsbAorICAgICAgICAvLyBhbHNv
IGJlIDAuCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSA9PSBjQW5p
bWF0aW9uVGltZXJEZWxheQorICAgICAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUo
KSB8fCAhbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpKQorICAgICAgICAgICAgbV9h
bmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7CisjZW5k
aWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2Vy
dmljZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5n
CiAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlIDwgMCkgewogICAgICAgICBpZiAobV9hbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8g
c3RhcnQgYSBvbmUtc2hvdCB0aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIGlmIChtX2Fu
aW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkgeworICAgICAgICBpZiAobV9wcmV2aW91c1RpbWVUb05leHRTZXJ2aWNlIDwgdGltZVRv
TmV4dFNlcnZpY2UpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fYW5pbWF0aW9uVGlt
ZXIuc3RvcCgpOworICAgIH0KICAgICBtX3ByZXZpb3VzVGltZVRvTmV4dFNlcnZpY2UgPSB0aW1l
VG9OZXh0U2VydmljZTsKICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVG9O
ZXh0U2VydmljZSk7CiB9CiAKKwogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBk
YXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4qKQogewogICAgIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwpAQCAtMjMxLDI5
ICsyNTcsMjQgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkTm9kZUNoYW5n
ZVRvRGlzcGF0Y2goUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgIHN0YXJ0VXBkYXRlU3R5bGVJ
Zk5lZWRlZERpc3BhdGNoZXIoKTsKIH0KIAotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2tGaXJlZCgpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzZXJ2aWNlQW5p
bWF0aW9ucygpCiB7Ci0gICAgZG91YmxlIHRpbWVUb05leHRTZXJ2aWNlID0gdXBkYXRlQW5pbWF0
aW9ucyhDYWxsU2V0Q2hhbmdlZCk7CisgICAgZG91YmxlIHRpbWVUb05leHRTZXJ2aWNlID0gLTE7
CisgICAgZG91YmxlIHRpbWVUb05leHRFdmVudCA9IC0xOworICAgIHVwZGF0ZUFuaW1hdGlvbnMo
dGltZVRvTmV4dFNlcnZpY2UsIHRpbWVUb05leHRFdmVudCwgQ2FsbFNldE5lZWRzU3R5bGVSZWNh
bGMpOworICAgIHNjaGVkdWxlU2VydmljZSh0aW1lVG9OZXh0U2VydmljZSwgdGltZVRvTmV4dEV2
ZW50KTsKIAotICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSA+PSAwKQotICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT52aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgLy8gRmlyZSBl
dmVudHMgcmlnaHQgYXdheSwgdG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFm
dGVyIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXMsIGFuZCBiZWZvcmUKKyAgICAvLyB0aGUgJ2VuZCcg
ZXZlbnQgZmlyZXMuCisgICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7CiB9Ci0jZW5kaWYK
IAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZChU
aW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qKQogewogICAgIC8vIE1ha2Ugc3VyZSBh
bmltYXRpb25VcGRhdGVUaW1lIGlzIHVwZGF0ZWQsIHNvIHRoYXQgaXQgaXMgY3VycmVudCBldmVu
IGlmIG5vCiAgICAgLy8gc3R5bGVDaGFuZ2UgaGFzIGhhcHBlbmVkIChlLmcuIGFjY2VsZXJhdGVk
IGFuaW1hdGlvbnMpCiAgICAgc2V0QmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKGNCZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWVOb3RTZXQpOwotCi0gICAgLy8gV2hlbiB0aGUgdGltZXIgZmlyZXMsIGFs
bCB3ZSBkbyBpcyBjYWxsIHNldENoYW5nZWQgb24gYWxsIERPTSBub2RlcyB3aXRoIHJ1bm5pbmcg
YW5pbWF0aW9ucyBhbmQgdGhlbiBkbyBhbiBpbW1lZGlhdGUKLSAgICAvLyB1cGRhdGVTdHlsZUlm
TmVlZGVkLiAgSXQgd2lsbCB0aGVuIGNhbGwgYmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlv
bi4KLSAgICB1cGRhdGVBbmltYXRpb25UaW1lcihDYWxsU2V0Q2hhbmdlZCk7Ci0KLSAgICAvLyBG
aXJlIGV2ZW50cyByaWdodCBhd2F5LCB0byBhdm9pZCBhIGZsYXNoIG9mIHVuYW5pbWF0ZWQgc3R5
bGUgYWZ0ZXIgYW4gYW5pbWF0aW9uIGNvbXBsZXRlcywgYW5kIGJlZm9yZQotICAgIC8vIHRoZSAn
ZW5kJyBldmVudCBmaXJlcy4KLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKKyAgICBz
ZXJ2aWNlQW5pbWF0aW9ucygpOwogfQogCiBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgaXNSdW5uaW5nTm93KSBjb25zdApAQCAtMzA1LDcg
KzMyNiw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRp
b25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKKyAgICBzY2hlZHVsZVNlcnZpY2UoKTsKIH0K
IAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTMyMSw3ICszNDIsNyBAQCB2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKCk7CisgICAgc2NoZWR1bGVTZXJ2aWNlKCk7CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIHQpCkBAIC01MzgsMTEgKzU1OSw3IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBibGVuZGVkU3R5
bGUgPSByZW5kZXJlckFuaW1hdGlvbnMtPmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdT
dHlsZSk7CiAKICAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpIHx8IG5ld1N0eWxlLT5hbmltYXRp
b25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAgICAg
IG1fZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJlcihyZW5kZXJlcik7Ci0jaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2
aWV3ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXctPnNj
aGVkdWxlQW5pbWF0aW9uKCk7Ci0jZW5kaWYKKyAgICAgICAgbV9kYXRhLT5zY2hlZHVsZVNlcnZp
Y2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgfQogCiAgICAgaWYgKGJsZW5kZWRTdHlsZSAh
PSBuZXdTdHlsZSkgewpAQCAtNjAzLDcgKzYyMCw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
cjo6cmVzdW1lQW5pbWF0aW9ucygpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQogdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXJ2aWNlQW5pbWF0aW9ucygpCiB7Ci0gICAg
bV9kYXRhLT5hbmltYXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKTsKKyAgICBtX2RhdGEtPnNlcnZp
Y2VBbmltYXRpb25zKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKaW5kZXggMDdh
ZmI3NGQwYTEwM2QxNGE0ODdmMWY2NzcyNTJjZTZjOWQzOTJiOC4uNjMxOTdlMTZhMzQzYjQ2YmY2
MzZjZGYzNGRmYjU4N2Y2NGViNjAyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCkBAIC01MCw5ICs1
MCw5IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJTdHls
ZTsKIAotZW51bSBTZXRDaGFuZ2VkIHsKLSAgICBEb05vdENhbGxTZXRDaGFuZ2VkID0gMCwKLSAg
ICBDYWxsU2V0Q2hhbmdlZCA9IDEKK2VudW0gU2V0TmVlZHNTdHlsZVJlY2FsYyB7CisgICAgRG9O
b3RDYWxsU2V0TmVlZHNTdHlsZVJlY2FsYyA9IDAsCisgICAgQ2FsbFNldE5lZWRzU3R5bGVSZWNh
bGMgPSAxCiB9OwogCiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7CkBAIC02MSw5
ICs2MSw4IEBAIHB1YmxpYzoKICAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSop
OwogICAgIH5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgpOwogCi0gICAgLy8gUmV0dXJucyB0
aGUgdGltZSB1bnRpbCB0aGUgbmV4dCBhbmltYXRpb24gbmVlZHMgdG8gYmUgc2VydmljZWQsIG9y
IC0xIGlmIHRoZXJlIGFyZSBub25lLgotICAgIGRvdWJsZSB1cGRhdGVBbmltYXRpb25zKFNldENo
YW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVw
ZGF0ZUFuaW1hdGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxT
ZXRDaGFuZ2VkKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlJiB0aW1lVG9OZXh0
U2VydmljZSwgZG91YmxlJiB0aW1lVG9OZXh0RXZlbnQsIFNldE5lZWRzU3R5bGVSZWNhbGMgY2Fs
bFNldE5lZWRzU3R5bGVSZWNhbGMgPSBEb05vdENhbGxTZXROZWVkc1N0eWxlUmVjYWxjKTsKKyAg
ICB2b2lkIHNjaGVkdWxlU2VydmljZSgpOwogCiAgICAgUGFzc1JlZlB0cjxDb21wb3NpdGVBbmlt
YXRpb24+IGFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihSZW5kZXJPYmplY3QqKTsKICAgICBib29s
IGNsZWFyKFJlbmRlck9iamVjdCopOwpAQCAtNzcsOSArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0j
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZvaWQgYW5pbWF0aW9uRnJh
bWVDYWxsYmFja0ZpcmVkKCk7Ci0jZW5kaWYKKyAgICB2b2lkIHNlcnZpY2VBbmltYXRpb25zKCk7
CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKICAg
ICB2b2lkIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwpAQCAtMTA2LDEx
ICsxMDMsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFu
aW1hdGlvbkJhc2UqKTsKIAotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXJGb3JSZW5kZXJl
cihSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHNjaGVkdWxlU2VydmljZUZvclJlbmRlcmVyKFJl
bmRlck9iamVjdCopOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmly
ZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7CiAKKyAgICB2b2lkIHNjaGVk
dWxlU2VydmljZShkb3VibGUgdGltZVRvTmV4dFNlcnZpY2UsIGRvdWJsZSB0aW1lVG9OZXh0RXZl
bnQpOworCiAgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpOwogICAgIHZvaWQgZmlyZUV2ZW50c0Fu
ZFVwZGF0ZVN0eWxlKCk7CiAgICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmNwcAppbmRleCA1M2Q5YzcxMGRiN2M2NzNkN2NlZDI4OWNjNjc2MzMzNGM0NTJjYWNhLi4yNGE1
YmRmZmZjNDQyNWQzMzhlNjc4ZDcxZDRkZTcxMzlmYWZmYjY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTM1OCw2
ICszNTgsNDUgQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2Uo
KSBjb25zdAogICAgIHJldHVybiBtaW5UOwogfQogCitkb3VibGUgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp0aW1lVG9OZXh0RXZlbnQoKSBjb25zdAoreworICAgIC8vIFJldHVybnMgdGhlIHRpbWUgYXQg
d2hpY2ggbmV4dCBzZXJ2aWNlIHRvIHRyaWdnZXIgZXZlbnRzaXMgcmVxdWlyZWQuIC0xIG1lYW5z
IG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMgCisgICAgLy8gc2VydmljZSBpcyByZXF1
aXJlZCBub3csIGFuZCA+IDAgbWVhbnMgc2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vj
b25kcyBpbiB0aGUgZnV0dXJlLgorICAgIGRvdWJsZSBtaW5UID0gLTE7CisgICAgCisgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CisgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgICAgIGRvdWJsZSB0ID0gLTE7CisgICAgICAgICAgICBib29sIGlz
TG9vcGluZzsKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uKQorICAgICAgICAgICAgICAgIHRy
YW5zaXRpb24tPmdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOworICAgICAgICAgICAg
aWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCisgICAgICAgICAgICAgICAgbWluVCA9IHQ7Cisg
ICAgICAgICAgICBpZiAoIW1pblQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBB
bmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9u
ID0gaXQtPnZhbHVlLmdldCgpOworICAgICAgICAgICAgZG91YmxlIHQgPSAtMTsKKyAgICAgICAg
ICAgIGJvb2wgaXNMb29waW5nOworICAgICAgICAgICAgaWYgKGFuaW1hdGlvbikKKyAgICAgICAg
ICAgICAgICBhbmltYXRpb24tPmdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOworICAg
ICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCisgICAgICAgICAgICAgICAgbWlu
VCA9IHQ7CisgICAgICAgICAgICBpZiAoIW1pblQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWluVDsKK30KKwogUGFzc1JlZlB0cjxL
ZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAogewogICAgIFJlZlB0cjxLZXlmcmFt
ZUFuaW1hdGlvbj4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uaAppbmRleCBjOTUwNDhlMDNlOWE5ZmFhMzVlMjZjZTYxYzY5
OWFlOTM4N2IyMWI4Li5lNzZhMGVkZjg2ODY4MWI1ZGU2MWIxZWNjOTdhMTllNzk3ZTc5ZTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uaApAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gZ2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwogCiAgICAgZG91YmxlIHRpbWVUb05leHRTZXJ2
aWNlKCkgY29uc3Q7CisgICAgZG91YmxlIHRpbWVUb05leHRFdmVudCgpIGNvbnN0OwogICAgIAog
ICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBhbmltYXRpb25Db250cm9sbGVyKCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAK
</data>
<flag name="commit-queue"
          id="204798"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>