<?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>29601</bug_id>
          
          <creation_ts>2009-09-21 10:53:40 -0700</creation_ts>
          <short_desc>Slow mouse wheel scrolling fails in message list in Yahoo! Mail</short_desc>
          <delta_ts>2010-09-02 17:41:51 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://mail.yahoo.com/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35566</dependson>
    
    <dependson>45155</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>adele</cc>
    
    <cc>aestes</cc>
    
    <cc>arv</cc>
    
    <cc>avi</cc>
    
    <cc>bdakin</cc>
    
    <cc>bweinstein</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>natevw</cc>
    
    <cc>pkasting</cc>
    
    <cc>pkchan+bugzilla=webkit</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>148740</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-09-21 10:53:40 -0700</bug_when>
    <thetext>* SUMMARY
Scrolling slowly with the mouse wheel (using a wired Apple Mighty Mouse) in the message list in Yahoo! Mail fails on Safari and WebKit nightly builds.  Works in Firefox 3.5.3.

* STEPS TO REPRODUCE
1. Log into Yahoo! Mail.
2. Position mouse over list of messages (assuming you have enough to scroll).
3. Use the mouse wheel to scroll messages up or down.

* RESULTS
Scrolling slowly produces no mouse movement.  You must move the mouse wheel rapidly to get any effect.

* REGRESSION:
Unknown.  Only tested with Safari 4.0.3 in SnowLeopard10B504 (10.6.1).

* NOTES
Works fine in Firefox 3.5.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148742</commentid>
    <comment_count>1</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-09-21 10:55:49 -0700</bug_when>
    <thetext>Is this only with the mighty mouse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148743</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-09-21 10:59:31 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Is this only with the mighty mouse?

I haven&apos;t tested with any other mice...because I don&apos;t own any others.  Also, I&apos;ve only tested this on Mac OS X 10.6.1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169730</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-08 11:02:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/7453254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180455</commentid>
    <comment_count>4</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-01-13 16:20:35 -0800</bug_when>
    <thetext>I can reproduce with two fingered scrolling too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182555</commentid>
    <comment_count>5</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-01-19 17:25:26 -0800</bug_when>
    <thetext>Yahoo is checking for a wheelDelta greater or equal to 120 before scrolling.  IE only produces wheelDeltas in increments on 120, so I&apos;m sure that&apos;s why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192319</commentid>
    <comment_count>6</comment_count>
      <attachid>49177</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-02-21 16:12:08 -0800</bug_when>
    <thetext>Created attachment 49177
Test case for mousewheel events

A simple test case; displays the wheelDelta value emitted by the mousewheel/DOMMouseScroll event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192321</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-02-21 16:24:56 -0800</bug_when>
    <thetext>Here are the increments in which several browsers produce mousewheel events:

Chrome 5/IE 8: 120
Safari 4: 3
Firefox 3.6: 1 (Firefox also inverts the sign on the number)
Opera 10: 40

It&apos;s a bit of a mess.  Since Yahoo mail is filtering out wheel events with deltas less than 120, and IE/Chrome produce events in that increment, it sounds like Safari should match that behavior to maximize compatibility.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192586</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-02-22 13:16:42 -0800</bug_when>
    <thetext>Safari&apos;s current behavior is due to http://trac.webkit.org/browser/trunk/WebCore/platform/mac/WheelEventMac.mm?rev=41746.

This generates fractional wheel ticks on continuous input devices, but since the deltas are not cumulative over a single scrolling session, a slow but continuous scrolling motion will never generate a full wheel tick.  The solution is to set pixels scrolled equal to wheel ticks (this matches Chrome&apos;s behavior on continuous devices).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198506</commentid>
    <comment_count>9</comment_count>
      <attachid>50476</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-03-10 23:51:20 -0800</bug_when>
    <thetext>Created attachment 50476
Patch with test cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198508</commentid>
    <comment_count>10</comment_count>
      <attachid>50477</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-03-10 23:55:48 -0800</bug_when>
    <thetext>Created attachment 50477
Patch with test cases (v2)

A tab character snuck into the last patch causing check-webkit-style to fail.  Oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198510</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-10 23:59:30 -0800</bug_when>
    <thetext>Attachment 50476 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199720</commentid>
    <comment_count>12</comment_count>
      <attachid>50719</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-03-15 10:55:04 -0700</bug_when>
    <thetext>Created attachment 50719
Patch without WKSI binaries</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199723</commentid>
    <comment_count>13</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-03-15 10:58:39 -0700</bug_when>
    <thetext>I removed the WKSI binaries from the patch to reduce its size.  They will be committed along with this patch when it is r+&apos;d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199731</commentid>
    <comment_count>14</comment_count>
      <attachid>50719</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2010-03-15 11:47:57 -0700</bug_when>
    <thetext>Comment on attachment 50719
Patch without WKSI binaries

Now that there&apos;s no gigantic binary slogging down my poor remote network connection, I find that I can review this simple change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199806</commentid>
    <comment_count>15</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-03-15 13:33:34 -0700</bug_when>
    <thetext>Committed revision 56012.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236553</commentid>
    <comment_count>16</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-10 15:05:10 -0700</bug_when>
    <thetext>Reopening now that this has been backed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236555</commentid>
    <comment_count>17</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-10 15:08:14 -0700</bug_when>
    <thetext>My take on this is that we should evangelize Yahoo to fix this, since what we&apos;re generating is not wrong.  If we are unable to get them to fix it, then we could consider a clamp of fractional lines to 1 or some kind of accumulation strategy, but really Yahoo should just fix their site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236622</commentid>
    <comment_count>18</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-10 18:16:58 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; My take on this is that we should evangelize Yahoo to fix this, since what we&apos;re generating is not wrong.

After much investigation, I believe the backed-out behavior was somewhat more correct than the current behavior, but both are wrong.

The backed-out behavior, which matches Chrome/Mac, produced a wheel delta of 120 when a standard wheel mouse (e.g. Logitech) was wheel-scrolled by 1 tick.  This is the &quot;correct&quot; wheel delta by the standard of matching IE&apos;s default behavior (when users haven&apos;t modified the &quot;lines per wheel tick&quot; setting), which has long been the goal for DOM wheel events.  Safari 4/the current behavior, by contrast, generates a delta of 3, which is very wrong.

The complexity arises when scrolling more rapidly, as OS X applies acceleration to the values reported.  wheelDelta is supposed to represent the physical distance traveled by the mouse wheel _without_ acceleration.  Thus, three ticks should == 360, no matter how fast or slow they arrive.  Chrome and both Safari behavior variants don&apos;t do this; the wheelDelta values are accelerated, meaning that in the Chrome/backed-out-Safari behavior the delta quickly becomes ludicrously large, while in the Safari 4/current-trunk behavior, the deltas rise to around 100-150, which is still too small.

The desired behavior should be that wheelDelta uses non-accelerated values and is scaled as roughly &quot;120 * number of physical wheel ticks&quot;, but the amount the scrollable region scrolls (and I believe the event &quot;delta&quot;) _are_ accelerated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236636</commentid>
    <comment_count>19</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-10 18:49:00 -0700</bug_when>
    <thetext>In short, I think the desired behavior would be something akin to this (haven&apos;t tested it):

CGEventRef cgEvent = [event CGEvent];
// The wheelDelta values here probably need scaling so one tick = 120, the scale value depends
// on where this code lives and what the API calls below return.  The critical bit is that these
// values will not be accelerated.
result.wheelDeltaY = CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventDeltaAxis1);
result.wheelDeltaX = CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventDeltaAxis2);
if (CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventIsContinuous)) {
    result.deltaY = CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventPointDeltaAxis1);
    result.deltaX = CGEventGetIntegerValueField(cgEvent, kCGScrollWheelEventPointDeltaAxis2);
} else {
    result.deltaX = [event deltaX] * Scrollbar::pixelsPerLineStep();
    result.deltaY = [event deltaY] * Scrollbar::pixelsPerLineStep();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236731</commentid>
    <comment_count>20</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2010-06-11 01:42:49 -0700</bug_when>
    <thetext>(In reply to comment #19)

For reference, what Chrome does can be seen in http://trac.webkit.org/browser/trunk/WebKit/chromium/src/mac/WebInputEventFactory.mm . (BTW, I wrote that code, so direct questions to me.)

We use unaccelerated scroll data only for non-continuous devices. For continuous devices we&apos;re forced to use accelerated scroll data due to limitations of the scroll API.

The previous version of Safari used a private WK function. I don&apos;t know how that worked. You&apos;re welcome to the code that I wrote if you want it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236741</commentid>
    <comment_count>21</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 02:16:03 -0700</bug_when>
    <thetext>Can you clarify why you believe wheelDelta should not be accelerated for continuous events?  I would think you&apos;d want to match the platform behavior, which is to accelerate...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236744</commentid>
    <comment_count>22</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 02:21:24 -0700</bug_when>
    <thetext>The whole point of continuous events is acceleration is it not, so just ignoring that doesn&apos;t seem right to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236745</commentid>
    <comment_count>23</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 02:24:12 -0700</bug_when>
    <thetext>Also, we need to distinguish between the platform wheeling and what is reported to the DOM.  I&apos;d expect platform wheel events to match the OS behavior, since those events might be used internally to implement stuff like overflow:auto mouse wheeling.

If the DOM needs to report something different we can patch it there, but removing acceleration from continuous wheel events at the platform event level doesn&apos;t seem right to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236850</commentid>
    <comment_count>24</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2010-06-11 08:51:34 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Can you clarify why you believe wheelDelta should not be accelerated for continuous events?  I would think you&apos;d want to match the platform behavior, which is to accelerate...

I was told that&apos;s what the spec said the data should be. That&apos;s how I coded the non-continuous devices, and only made the continuous devices accelerated due to API limitations.

Was I misinformed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236894</commentid>
    <comment_count>25</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 10:36:06 -0700</bug_when>
    <thetext>Do we only use the wheel ticks x and y field in the platform event for DOM events?  If so, then having them be non-accelerated (assuming that&apos;s what the spec says) seems fine.  We just need to make sure that those values are only used by the DOM and not when processing the wheel event internally, since we don&apos;t want to break overflow:auto mouse wheeling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236896</commentid>
    <comment_count>26</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-06-11 10:39:18 -0700</bug_when>
    <thetext>Can someone point me to what spec indicates that the value has to correspond directly to the physical movement of the mouse (and can&apos;t be accelerated)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237072</commentid>
    <comment_count>27</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-06-11 15:25:02 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Can someone point me to what spec indicates that the value has to correspond directly to the physical movement of the mouse (and can&apos;t be accelerated)?

From &lt;http://www.w3.org/TR/DOM-Level-3-Events/#events-Events-MouseWheelEvent-wheelDelta&gt;:

&quot;The distance the wheel has rotated around the y-axis. Because this is a legacy event type, the units or number of these units in wheelDelta are implementation-specific.&quot;

A strict interpretation of that first sentence would say that acceleration should be ignored, but it sounds like this was written with traditional wheel mice in mind, not continuous scrolling devices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237089</commentid>
    <comment_count>28</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-11 15:41:53 -0700</bug_when>
    <thetext>Note, however, that the DOM3 WheelEvent is not the same event as the existing &quot;mousewheel&quot;.

But yes, hyatt and I sort of concluded over IRC that ideally we&apos;d expose both types of values, and we&apos;d put the unaccelerated ones in wheelDelta (with the others on a new property), but we&apos;re not actually sure we can get bug-free unaccelerated values from the underlying APIs.  Someone needs to write a test app to definitively document how some of these APIs behave.

Also, if someone could tell the DOM3 folks that their wheel event really needs to understand acceleration (e.g. by providing both accelerated and unaccelerated values), that&apos;d be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237096</commentid>
    <comment_count>29</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-06-11 15:47:52 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; My take on this is that we should evangelize Yahoo to fix this, since what we&apos;re generating is not wrong.  If we are unable to get them to fix it, then we could consider a clamp of fractional lines to 1 or some kind of accumulation strategy, but really Yahoo should just fix their site.

After some consideration, I agree with Hyatt&apos;s take here.  This patch made continuous scrolling too fast on sites designed to work with Safari 4&apos;s behavior, and developer attempts to compensate for this by dividing out the extra multiplication make non-continuous scrolling too slow.  This is a no-win situation.

To fix this, I&apos;m a fan of one of these two solutions:

1) Revert to Safari 4&apos;s behavior with continuous devices (perhaps without acceleration?), then fix the bug with non-continuous devices (where a wheel tick emits a wheelDelta of 3 instead of 120).  Evangelize sites that drop wheelDeltas less than 120.  Sites designed to take advantage of fine-grained scrolling will continue to work.

2) Accumulate fractional wheelDeltas and emit them each time they cross the 120 boundary.  Also implement DOM Level 3 WheelEvent [1] and evangelize that event to developers who need access to fine-grained scrolling deltas.  Sites that depend on wheelEvents in increments of 120 continue to work without changes, and developers can access fine-grained events using new API.

I think I might be partial to #2, since it fixes the original Yahoo! bug without requiring evangelization and gives us a reason to implement more of the DOM Level 3 Events spec.

[1] http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237097</commentid>
    <comment_count>30</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-06-11 15:49:29 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Note, however, that the DOM3 WheelEvent is not the same event as the existing &quot;mousewheel&quot;.

I was quoting from the MouseWheelEvent section, not the WheelEvent section.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237100</commentid>
    <comment_count>31</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2010-06-11 15:51:40 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Someone needs to write a test app to definitively document how some of these APIs behave.

Someone meaning Apple, or someone meaning anyone? Because that&apos;s exactly what I did. I wrote a test app, and the documentation I wrote that lives in WebKit/chromium/src/mac/WebInputEventFactory.mm remains the most complete documentation of scrolling events that I know of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237108</commentid>
    <comment_count>32</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-11 16:08:58 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #28)
&gt; &gt; Someone needs to write a test app to definitively document how some of these APIs behave.
&gt; 
&gt; Someone meaning Apple, or someone meaning anyone? Because that&apos;s exactly what I did. I wrote a test app, and the documentation I wrote that lives in WebKit/chromium/src/mac/WebInputEventFactory.mm remains the most complete documentation of scrolling events that I know of.

Can you post that app somewhere?  hyatt and I have both read your comments, but the app would still be very useful.

Also, in the end we should make Chromium and Safari converge on the events they&apos;re sending.  This is not currently true (with the revert).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238495</commentid>
    <comment_count>33</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2010-06-15 12:12:32 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Can you post that app somewhere?  hyatt and I have both read your comments, but the app would still be very useful.

Sure thing. It&apos;s the simplest thing you can imagine, but it works well. It&apos;s at http://homepage.mac.com/avidrissman/archives/scrollbug.zip ; download it, compile it, run it, and scroll with as many mouse devices as you can steal from coworkers&apos; desks.
 
&gt; Also, in the end we should make Chromium and Safari converge on the events they&apos;re sending.  This is not currently true (with the revert).

Absolutely. First we need to decide what they should be (accelerated vs non-accelerated, etc), and then we need to wean Safari off the SPI. I&apos;m pretty sure that the equivalent data is available via the route we take, at least for 10.5 and greater. (The SPI is likely still needed for the Tiger builds.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238499</commentid>
    <comment_count>34</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-06-15 12:20:16 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; First we need to decide what they should be (accelerated vs non-accelerated, etc)

Here is some text from a thread I wrote to the folks defining Pepper (the next-gen replacement for NPAPI).  Their wheel event is basically a passthrough of the relevant PlatformWheelEvent, so this applies to WebKit too.  hyatt et al., what do you think of this idea, assuming we can actually get the appropriate unaccelerated values from OS X?:

***

Recommendations:

* Explicitly say that m_wheelTicks{X,Y} is an unaccelerated value that represents how far the wheel has physically rotated, or the equivalent scrolling gesture has moved, since the last event.  (The gesture bit is for trackpads on the Mac, which send wheel events for two-finger scrolls.)  Specify that for mice without detents, or with exceptionally closely spaced detents (e.g. a Mighty Mouse), the value should be comparable to the value generated by a &quot;normal&quot; mouse wheel moved the semantically-equivalent distance.  (In other words, a single Mighty Mouse tick should reported as a small fraction of a Logitech MX5xx tick.)  Specify the base unit as one of the following two options: &quot;1.0&quot;, for one physical tick on a normal mouse, or &quot;120&quot;, to be directly compatible with the DOM mousewheel wheelDelta value.

* Explicitly say that m_delta{X,Y} is a possibly-accelerated value that represents the actual scroll distance requested by this event.  Say that the units are given by the m_granularity field.

The result of this would be that, on a standard Windows system with a typical mouse, moving one tick down would generate an event that looks like:

{
  m_deltaX: 0;
  m_deltaY: -3;
  m_wheelTicksX: 0;
  m_wheelTicksY: 1 [or 120];
  m_granularity: ScrollByLineWheelEvent;
  ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239490</commentid>
    <comment_count>35</comment_count>
    <who name="Nathan Vander Wilt">natevw</who>
    <bug_when>2010-06-17 11:19:32 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #17)
&gt; &gt; My take on this is that we should evangelize Yahoo to fix this, since what we&apos;re generating is not wrong.  If we are unable to get them to fix it, then we could consider a clamp of fractional lines to 1 or some kind of accumulation strategy, but really Yahoo should just fix their site.
&gt; 
&gt; After some consideration, I agree with Hyatt&apos;s take here.  This patch made continuous scrolling too fast on sites designed to work with Safari 4&apos;s behavior, and developer attempts to compensate for this by dividing out the extra multiplication make non-continuous scrolling too slow.  This is a no-win situation.
&gt; 
&gt; To fix this, I&apos;m a fan of one of these two solutions:
&gt; 
&gt; 1) Revert to Safari 4&apos;s behavior with continuous devices (perhaps without acceleration?), then fix the bug with non-continuous devices (where a wheel tick emits a wheelDelta of 3 instead of 120).  Evangelize sites that drop wheelDeltas less than 120.  Sites designed to take advantage of fine-grained scrolling will continue to work.
&gt; 
&gt; 2) Accumulate fractional wheelDeltas and emit them each time they cross the 120 boundary.  Also implement DOM Level 3 WheelEvent [1] and evangelize that event to developers who need access to fine-grained scrolling deltas.  Sites that depend on wheelEvents in increments of 120 continue to work without changes, and developers can access fine-grained events using new API.
&gt; 
&gt; I think I might be partial to #2, since it fixes the original Yahoo! bug without requiring evangelization and gives us a reason to implement more of the DOM Level 3 Events spec.
&gt; 
&gt; [1] http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents

I&apos;d prefer Option 1 as the immediate fix, as it would fix both fine-grained continuous events and discrete clicks until the new API can be implemented. Long term, I can see the merit in Option 2 but there are issues with the new standard as well (deltaMode will be a major pain for clients even if its per-axis contradiction is worked out).

I am obviously biased, but I&apos;d love to see the magnitudes fixed a.s.a.p. for sites that are trying use them to full potential, rather than waiting for a workaround for code that shoots itself in the foot by explicitly ignoring fine-grained events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244808</commentid>
    <comment_count>36</comment_count>
      <attachid>60125</attachid>
    <who name="Nathan Vander Wilt">natevw</who>
    <bug_when>2010-06-30 09:30:55 -0700</bug_when>
    <thetext>Created attachment 60125
Shows wrong magnitude of continuous scrolling in recent WebKit builds.

The attached testcase will need some massaging to work in IE, but shows the problem. Scrolling down so &quot;Line 4.&quot; is at the top of the page yields a deltaSum of -7200 (!). Interpreted according to MSDN documentation (http://msdn.microsoft.com/en-us/library/ms536951(VS.85).aspx) this would mean -60 &quot;increments&quot; (which IIRC are 3-line chunks each) and over seven thousand pixels according to Quirksmode&apos;s interpretation (http://www.quirksmode.org/dom/w3c_events.html, grep wheelDelta) of that property. Basically, the wheelDelta values are 60 times what they should be.

On Safari 4, the deltaSum ends up at -120 as expected when scrolling down to &quot;Line 4&quot;, although quite helpfully the sum can be reached gradually when the mouse has smooth scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244846</commentid>
    <comment_count>37</comment_count>
    <who name="Nathan Vander Wilt">natevw</who>
    <bug_when>2010-06-30 11:04:02 -0700</bug_when>
    <thetext>Ah, sorry I missed that the specific large scroll delta issue was being tracked at https://bugs.webkit.org/show_bug.cgi?id=40441 and has already been reverted in the nightlies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244847</commentid>
    <comment_count>38</comment_count>
    <who name="Nathan Vander Wilt">natevw</who>
    <bug_when>2010-06-30 11:06:02 -0700</bug_when>
    <thetext>Ah, sorry I missed that the specific large scroll delta issue was being tracked at https://bugs.webkit.org/show_bug.cgi?id=40441 and has already been reverted in the nightlies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271167</commentid>
    <comment_count>39</comment_count>
      <attachid>50719</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 11:33:24 -0700</bug_when>
    <thetext>Comment on attachment 50719
Patch without WKSI binaries

Clearing the review flag from this since we landed it and then rolled it out. It’s showing up in my “patches that need to be committed” query.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>49177</attachid>
            <date>2010-02-21 16:12:08 -0800</date>
            <delta_ts>2010-02-21 16:12:08 -0800</delta_ts>
            <desc>Test case for mousewheel events</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>1352</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgICA8aGVhZD4KICAgICAgICA8dGl0bGU+RE9NTW91c2VTY3JvbGwgRXZlbnQgVGVz
dDwvdGl0bGU+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgZnVuY3Rpb24gYWRkTW91c2V3
aGVlbEV2ZW50TGlzdGVuZXIoZWxlbWVudElkLCBjYWxsYmFjaykKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50
SWQpOwogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkKICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CgogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cikgewogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3
aGVlbCcsIGNhbGxiYWNrLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIGNhbGxiYWNrLCBmYWxzZSk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50V2hlZWxE
ZWx0YShlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBlLndoZWVs
RGVsdGEgPyBlLndoZWVsRGVsdGEgOiAoZS5kZXRhaWwgPyBlLmRldGFpbCA6IG51bGwpOwogICAg
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3doZWVsRGVsdGFTcGFuJykuaW5u
ZXJIVE1MID0gZGVsdGE7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
d2hlZWxEZWx0YTEyMFNwYW4nKS5pbm5lckhUTUwgPSBkZWx0YSA/IGRlbHRhLzEyMCA6IG51bGw7
CiAgICAgICAgICAgIH0KICAgICAgICA8L3NjcmlwdD4KICAgIDwvaGVhZD4KICAgIDxib2R5IG9u
bG9hZD0iYWRkTW91c2V3aGVlbEV2ZW50TGlzdGVuZXIoJ3Njcm9sbERpdicsIHByaW50V2hlZWxE
ZWx0YSk7Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDo0MDBweDsgaGVpZ2h0OjEwMHB4OyBi
b3JkZXItd2lkdGg6MXB4OyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci1jb2xvcjpibGFjazsi
IGlkPSJzY3JvbGxEaXYiPgogICAgICAgICAgICBTY3JvbGwgaGVyZS4KICAgICAgICA8L2Rpdj4K
ICAgICAgICA8YnI+CiAgICAgICAgPGRpdiBpZD0id2hlZWxEZWx0YURpdiI+CiAgICAgICAgICAg
IHdoZWVsRGVsdGE6IDxzcGFuIGlkPSJ3aGVlbERlbHRhU3BhbiI+PC9zcGFuPjxicj4KICAgICAg
ICAgICAgd2hlZWxEZWx0YS8xMjA6IDxzcGFuIGlkPSJ3aGVlbERlbHRhMTIwU3BhbiI+PC9zcGFu
PgogICAgICAgIDwvZGl2PgogICAgPC9ib2R5Pgo8L2h0bWw+CgoKCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50476</attachid>
            <date>2010-03-10 23:51:20 -0800</date>
            <delta_ts>2010-03-10 23:55:48 -0800</delta_ts>
            <desc>Patch with test cases</desc>
            <filename>29601.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50477</attachid>
            <date>2010-03-10 23:55:48 -0800</date>
            <delta_ts>2010-03-15 10:55:04 -0700</delta_ts>
            <desc>Patch with test cases (v2)</desc>
            <filename>29601.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50719</attachid>
            <date>2010-03-15 10:55:04 -0700</date>
            <delta_ts>2010-08-29 11:33:24 -0700</delta_ts>
            <desc>Patch without WKSI binaries</desc>
            <filename>29601.patch</filename>
            <type>text/plain</type>
            <size>26520</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjAwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMtMTUgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvciBj
b250aW51b3VzIHNjcm9sbGluZyBkZXZpY2VzIG9uIHRoZSBNYWMgKHRyYWNrcGFkcyBhbmQgTWln
aHR5L01hZ2ljCisgICAgICAgIE1pY2UpLCBzZXQgdGhlIG51bWJlciBvZiB3aGVlbCB0aWNrcyBl
cXVhbCB0byB0aGUgYXRvbWljIGluY3JlbWVudCBvZgorICAgICAgICB0aGUgZGV2aWNlOiBhIHBp
eGVsLiAgVGhpcyBlbnN1cmVzIHRoYXQgYW55IHNjcm9sbGluZyBhY3Rpb24gd2lsbAorICAgICAg
ICBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgd2hlZWwgdGljaywgcmVnYXJkbGVzcyBvZiB0aGUgc3Bl
ZWQvbGVuZ3RoIG9mCisgICAgICAgIHRoZSBnZXN0dXJlLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTYwMQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNzQ1MzI1ND4KKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvY29udGludW91cy1wbGF0
Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1pbi1zY3JvbGxpbmctZGl2Lmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg6IE1vZGlmeSBtZXRo
b2Qgc2lnbmF0dXJlLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLm1tOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2hlZWxFdmVudE1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50
KTogQ2FsbCBpbnRvCisgICAgICAgIFdlYktpdFN5c3RlbUludGVyZmFjZSB0byBkZXRlcm1pbmUg
Ym90aCB3aGVlbFRpY2tzWC9ZIGFuZCBkZWx0YVgvWS4KKyAgICAgICAgV0tTSSB3aWxsIHF1ZXJ5
IHRoZSBldmVudCBzeXN0ZW0gZm9yIG51bWJlciBvZiB3aGVlbCB0aWNrcyBhbmQKKyAgICAgICAg
cGl4ZWxzL2xpbmVzIHNjcm9sbGVkIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHlwZS4KKwogMjAxMC0w
My0xNSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDU2MDAxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTE2LDcgKzExNiw3IEBAIGV4dGVybiBBVFNVRm9udElEICgqd2tHZXRO
U0ZvbnRBVFNVRm9udEkKIGV4dGVybiBkb3VibGUgKCp3a0dldE5TVVJMUmVzcG9uc2VDYWxjdWxh
dGVkRXhwaXJhdGlvbikoTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UpOwogZXh0ZXJuIE5TRGF0ZSAq
KCp3a0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNw
b25zZSk7CiBleHRlcm4gQk9PTCAoKndrR2V0TlNVUkxSZXNwb25zZU11c3RSZXZhbGlkYXRlKShO
U1VSTFJlc3BvbnNlICpyZXNwb25zZSk7Ci1leHRlcm4gdm9pZCAoKndrR2V0V2hlZWxFdmVudERl
bHRhcykoTlNFdmVudCosIGZsb2F0KiBkZWx0YVgsIGZsb2F0KiBkZWx0YVksIEJPT0wqIGNvbnRp
bnVvdXMpOworZXh0ZXJuIHZvaWQgKCp3a0dldFdoZWVsRXZlbnREZWx0YXMpKE5TRXZlbnQqLCBm
bG9hdCogZGVsdGFYLCBmbG9hdCogZGVsdGFZLCBmbG9hdCogd2hlZWxUaWNrc1gsIGZsb2F0KiB3
aGVlbFRpY2tzWSwgQk9PTCogY29udGludW91cyk7CiBleHRlcm4gQk9PTCAoKndrSGl0VGVzdE1l
ZGlhVUlQYXJ0KShpbnQgcGFydCwgaW50IHRoZW1lU3R5bGUsIENHUmVjdCBib3VuZHMsIENHUG9p
bnQgcG9pbnQpOwogZXh0ZXJuIHZvaWQgKCp3a01lYXN1cmVNZWRpYVVJUGFydCkoaW50IHBhcnQs
IGludCB0aGVtZVN0eWxlLCBDR1JlY3QgKmJvdW5kcywgQ0dTaXplICpuYXR1cmFsU2l6ZSk7CiBl
eHRlcm4gQk9PTCAoKndrTWVkaWFDb250cm9sbGVyVGhlbWVBdmFpbGFibGUpKGludCB0aGVtZVN0
eWxlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5tbQkocmV2aXNpb24gNTYwMDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBD
b21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MSw3ICs1MSw3IEBAIE5TU3RyaW5nKiAoKndrR2V0TUlNRVR5cGVGb3JF
eHRlbnNpb24pKE4KIE5TVGltZUludGVydmFsICgqd2tHZXROU1VSTFJlc3BvbnNlQ2FsY3VsYXRl
ZEV4cGlyYXRpb24pKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlKTsKIE5TRGF0ZSAqKCp3a0dldE5T
VVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKShOU1VSTFJlc3BvbnNlICpyZXNwb25zZSk7CiBC
T09MICgqd2tHZXROU1VSTFJlc3BvbnNlTXVzdFJldmFsaWRhdGUpKE5TVVJMUmVzcG9uc2UgKnJl
c3BvbnNlKTsKLXZvaWQgKCp3a0dldFdoZWVsRXZlbnREZWx0YXMpKE5TRXZlbnQqLCBmbG9hdCog
ZGVsdGFYLCBmbG9hdCogZGVsdGFZLCBCT09MKiBjb250aW51b3VzKTsKK3ZvaWQgKCp3a0dldFdo
ZWVsRXZlbnREZWx0YXMpKE5TRXZlbnQqLCBmbG9hdCogZGVsdGFYLCBmbG9hdCogZGVsdGFZLCBm
bG9hdCogd2hlZWxUaWNrc1gsIGZsb2F0KiB3aGVlbFRpY2tzWSwgQk9PTCogY29udGludW91cyk7
CiB2b2lkICgqd2tQb3B1cE1lbnUpKE5TTWVudSosIE5TUG9pbnQgbG9jYXRpb24sIGZsb2F0IHdp
ZHRoLCBOU1ZpZXcqLCBpbnQgc2VsZWN0ZWRJdGVtLCBOU0ZvbnQqKTsKIHVuc2lnbmVkICgqd2tR
VEluY2x1ZGVPbmx5TW9kZXJuTWVkaWFGaWxlVHlwZXMpKHZvaWQpOwogaW50ICgqd2tRVE1vdmll
RGF0YVJhdGUpKFFUTW92aWUqKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1doZWVsRXZl
bnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2hlZWxFdmVudE1h
Yy5tbQkocmV2aXNpb24gNTYwMDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaGVlbEV2ZW50
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDMsMTMgKzQzLDkgQEAgUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoTgog
ICAgICwgbV9tZXRhS2V5KFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29tbWFuZEtleU1hc2sp
CiB7CiAgICAgQk9PTCBjb250aW51b3VzOwotICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVu
dCwgJm1fZGVsdGFYLCAmbV9kZWx0YVksICZjb250aW51b3VzKTsKLSAgICBpZiAoY29udGludW91
cykgewotICAgICAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVggLyBzdGF0aWNfY2FzdDxmbG9h
dD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKLSAgICAgICAgbV93aGVlbFRpY2tz
WSA9IG1fZGVsdGFZIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFY
OwotICAgICAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7CisgICAgd2tHZXRXaGVlbEV2ZW50
RGVsdGFzKGV2ZW50LCAmbV9kZWx0YVgsICZtX2RlbHRhWSwgJm1fd2hlZWxUaWNrc1gsICZtX3do
ZWVsVGlja3NZLCAmY29udGludW91cyk7CisKKyAgICBpZiAoIWNvbnRpbnVvdXMpIHsKICAgICAg
ICAgbV9kZWx0YVggKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSk7CiAgICAgICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwogICAgIH0KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NjAwNCkK
KysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDMtMTUgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgY2FsbCB0byBXS0dl
dFdoZWVsRXZlbnREZWx0YXMoKSB0byBtYXRjaCBuZXcgbWV0aG9kIHNpZ25hdHVyZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2MDEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzc0NTMyNTQ+CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkR5bmFt
aWNTY3JvbGxCYXJzVmlldy5tbToKKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3
IHNjcm9sbFdoZWVsOl0pOgorCiAyMDEwLTAzLTE1ICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5A
YXBwbGUuY29tPgogCiAgICAgICAgIE1ldGhvZCBuYW1lIGFuZCBwYXJhbWV0ZXIgbmFtZSBtaXN0
YWtlcyBmcm9tIHJlY2VudCBTUEkgYWRkaXRpb24KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tbQkocmV2aXNpb24gNTYwMDEpCisrKyBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zODYsOCArMzg2LDEwIEBAIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZl
bnQgKilldmVudAogewogICAgIGZsb2F0IGRlbHRhWDsKICAgICBmbG9hdCBkZWx0YVk7CisgICAg
ZmxvYXQgd2hlZWxUaWNrc1g7CisgICAgZmxvYXQgd2hlZWxUaWNrc1k7CiAgICAgQk9PTCBpc0Nv
bnRpbnVvdXM7Ci0gICAgV0tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmZGVsdGFYLCAmZGVs
dGFZLCAmaXNDb250aW51b3VzKTsKKyAgICBXS0dldFdoZWVsRXZlbnREZWx0YXMoZXZlbnQsICZk
ZWx0YVgsICZkZWx0YVksICZ3aGVlbFRpY2tzWCwgJndoZWVsVGlja3NZLCAmaXNDb250aW51b3Vz
KTsKIAogICAgIEJPT0wgaXNMYXRjaGluZ0V2ZW50ID0gV0tJc0xhdGNoaW5nV2hlZWxFdmVudChl
dmVudCk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU2MDAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTAtMDMtMTUgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZXNlIHRlc3RzIHZlcmlmeSB0aGF0IHNjcm9sbHdoZWVsIGV2ZW50
cyAoYm90aCBjb250aW51b3VzIGFuZAorICAgICAgICBub24tY29udGludW91cykgZ2VuZXJhdGUg
dGhlIGV4cGVjdGVkIHBpeGVsIGRlbHRhcyBpbiBzY3JvbGxhYmxlCisgICAgICAgIHJlZ2lvbnMs
IGFuZCBhbHNvIGdlbmVyYXRlIERPTSBtb3VzZXdoZWVsIGV2ZW50cyB3aXRoIGV4cGVjdGVkCisg
ICAgICAgIHdoZWVsRGVsdGEgdmFsdWVzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTYwMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzQ1MzI1
ND4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2NvbnRpbnVvdXMtcGxhdGZvcm0td2hlZWxldmVu
dC1pbi1zY3JvbGxpbmctZGl2LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9l
dmVudHMvY29udGludW91cy1wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1pbi1z
Y3JvbGxpbmctZGl2LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMv
cGxhdGZvcm0td2hlZWxldmVudC1pbi1zY3JvbGxpbmctZGl2Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi1leHBlY3RlZC50eHQ6
IFJlYmFzZWQKKyAgICAgICAgZXhwZWN0ZWQgcmVzdWx0cyBkdWUgdG8gY2hhbmdlIGluIHRlc3Qg
b3V0cHV0IGZvcm1hdHRpbmcuCisgICAgICAgICogZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi1z
Y3JvbGxpbmctZGl2Lmh0bWw6IE1vZGlmaWVkIHRvIHVzZSBjb21tb24KKyAgICAgICAganMgbG9n
Z2luZyBhbmQgYXNzZXJ0aW9uIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tp
cHBlZDogRFJUIHN1cHBvcnQgbmVlZGVkIGJ5IHRlc3RzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAg
ICAgICAgaW4gR1RLIHBvcnQuICBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2MDAzLgorICAgICAgICAqIHBsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkOiBEUlQg
c3VwcG9ydCBuZWVkZWQgYnkgdGVzdHMgbm90IHBvc3NpYmxlCisgICAgICAgIHRvIGltcGxlbWVu
dCBpbiBUaWdlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOiBEUlQgc3VwcG9ydCBm
b3IgdGVzdHMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBRdAorICAgICAgICBwb3J0LiAgU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjAwNC4KKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vU2tpcHBlZDogRFJUIHN1cHBvcnQgZm9yIHRlc3RzIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQgaW4KKyAgICAgICAgV2luZG93cyBwb3J0LiAgU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjAwMi4KKwogMjAxMC0wMy0xNSAgVG9ueSBDaGFuZyAgPHRv
bnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY29udGludW91cy1wbGF0Zm9ybS13aGVlbGV2ZW50
LWluLXNjcm9sbGluZy1kaXYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2NvbnRpbnVvdXMtcGxhdGZvcm0td2hlZWxldmVudC1pbi1zY3JvbGxpbmct
ZGl2LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2NvbnRpbnVvdXMtcGxhdGZvcm0td2hlZWxldmVudC1pbi1zY3JvbGxpbmctZGl2LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitQQVNTIGV2ZW50LndoZWVsRGVsdGFZ
IGlzIHdpbmRvdy5leHBlY3RlZFNjcm9sbFRvcCotMTIwCitQQVNTIGV2ZW50LndoZWVsRGVsdGFY
IGlzIHdpbmRvdy5leHBlY3RlZFNjcm9sbExlZnQqLTEyMAorUEFTUyBldmVudC53aGVlbERlbHRh
IGlzIHdpbmRvdy5leHBlY3RlZFNjcm9sbFRvcCotMTIwCitQQVNTIGRpdi5zY3JvbGxUb3AgaXMg
d2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wCitQQVNTIGRpdi5zY3JvbGxMZWZ0IGlzIHdpbmRvdy5l
eHBlY3RlZFNjcm9sbExlZnQKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY29udGlu
dW91cy1wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jb250aW51b3VzLXBsYXRmb3JtLXdoZWVsZXZl
bnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvY29udGludW91cy1wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorPGh0bWw+CisgICAgPGhlYWQ+Cisg
ICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICB2YXIg
ZXhwZWN0ZWRTY3JvbGxUb3AgPSAyMDA7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWRTY3JvbGxM
ZWZ0ID0gMTAwOworICAgICAgICAgICAgdmFyIGV2ZW50OworICAgICAgICAgICAgdmFyIGRpdjsK
KworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gZGlzcGF0Y2hXaGVlbEV2ZW50KCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgb3ZlcmZsb3dFbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm92ZXJmbG93Iik7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJmbG93
RWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNld2hlZWwiLCBtb3VzZXdoZWVsSGFuZGxlciwgZmFsc2UpOworCisgICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAsIDExMCk7CisgICAgICAgICAgICAgICAgICAgIGV2
ZW50U2VuZGVyLmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KC13aW5kb3cuZXhwZWN0ZWRTY3JvbGxM
ZWZ0LCAtd2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBzZXRUaW1lb3V0KCdjaGVja09mZnNldHMoKTsnLCAxMDApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja09mZnNldHMoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdmVy
ZmxvdyIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJkaXYuc2Nyb2xsVG9wIiwgIndpbmRv
dy5leHBlY3RlZFNjcm9sbFRvcCIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJkaXYuc2Ny
b2xsTGVmdCIsICJ3aW5kb3cuZXhwZWN0ZWRTY3JvbGxMZWZ0Iik7CisKKyAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmdW5jdGlvbiBtb3VzZXdoZWVsSGFuZGxlcihlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGV2ZW50ID0gZTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgi
ZXZlbnQud2hlZWxEZWx0YVkiLCAid2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wKi0xMjAiKTsKKyAg
ICAgICAgICAgICAgICBzaG91bGRCZSgiZXZlbnQud2hlZWxEZWx0YVgiLCAid2luZG93LmV4cGVj
dGVkU2Nyb2xsTGVmdCotMTIwIik7CisKKyAgICAgICAgICAgICAgICBpZiAoZS53aGVlbERlbHRh
WSkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoImV2ZW50LndoZWVsRGVsdGEiLCAid2lu
ZG93LmV4cGVjdGVkU2Nyb2xsVG9wKi0xMjAiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNob3VsZEJlKCJldmVudC53aGVlbERlbHRhIiwgIndpbmRvdy5leHBl
Y3RlZFNjcm9sbExlZnQqLTEyMCIpOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4K
KyAgICA8L2hlYWQ+CisKKyAgICA8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0ic2V0VGlt
ZW91dCgnZGlzcGF0Y2hXaGVlbEV2ZW50KCk7JywgMTAwKSI+CisgICAgICAgIDxkaXYgaWQ9Im92
ZXJmbG93IiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBibGFjaztvdmVyZmxvdzphdXRvO2hlaWdo
dDoyMDBweDt3aWR0aDoyMDBweDsiPgorICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3Vu
ZC1jb2xvcjpyZWQ7aGVpZ2h0OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+CisgICAgICAgICAg
ICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdodDoyMDBweDt3aWR0aDo0
MDBweDsiPjwvZGl2PgorICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpy
ZWQ7aGVpZ2h0OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAg
ICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGlu
Zy1kaXYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3BsYXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LWlu
LXNjcm9sbGluZy1kaXYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAK
K1BBU1MgZXZlbnQud2hlZWxEZWx0YVkgaXMgd2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wKi0xMjAK
K1BBU1MgZXZlbnQud2hlZWxEZWx0YVggaXMgd2luZG93LmV4cGVjdGVkU2Nyb2xsTGVmdCotMTIw
CitQQVNTIGV2ZW50LndoZWVsRGVsdGEgaXMgd2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wKi0xMjAK
K1BBU1MgZGl2LnNjcm9sbFRvcCBpcyB3aW5kb3cuZXhwZWN0ZWRTY3JvbGxUb3Aqd2luZG93LnBp
eGVsc1BlcldoZWVsVGljaworUEFTUyBkaXYuc2Nyb2xsTGVmdCBpcyB3aW5kb3cuZXhwZWN0ZWRT
Y3JvbGxMZWZ0KndpbmRvdy5waXhlbHNQZXJXaGVlbFRpY2sKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1pbi1zY3JvbGxpbmctZGl2Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1p
bi1zY3JvbGxpbmctZGl2Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MSBAQAorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KyAgICAgICAgPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWRTY3JvbGxU
b3AgPSA1OworICAgICAgICAgICAgdmFyIGV4cGVjdGVkU2Nyb2xsTGVmdCA9IDM7CisgICAgICAg
ICAgICB2YXIgcGl4ZWxzUGVyV2hlZWxUaWNrID0gNDA7CisgICAgICAgICAgICB2YXIgZXZlbnQ7
CisgICAgICAgICAgICB2YXIgZGl2OworCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gZGlzcGF0Y2hXaGVlbEV2ZW50KCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgb3ZlcmZsb3dFbGVtZW50ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm92ZXJmbG93Iik7CisgICAgICAgICAgICAgICAgaWYgKG92
ZXJmbG93RWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLCBtb3VzZXdoZWVsSGFuZGxlciwgZmFsc2UpOworCisg
ICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAgICAgICAg
ICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAsIDExMCk7CisgICAgICAgICAgICAgICAg
ICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnkoLXdpbmRvdy5leHBlY3RlZFNjcm9sbExlZnQs
IC13aW5kb3cuZXhwZWN0ZWRTY3JvbGxUb3ApOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHNldFRpbWVvdXQoJ2NoZWNrT2Zmc2V0cygpOycsIDEwMCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrT2Zmc2V0cygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm92ZXJmbG93
Iik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoImRpdi5zY3JvbGxUb3AiLCAid2luZG93LmV4
cGVjdGVkU2Nyb2xsVG9wKndpbmRvdy5waXhlbHNQZXJXaGVlbFRpY2siKTsKKyAgICAgICAgICAg
ICAgICBzaG91bGRCZSgiZGl2LnNjcm9sbExlZnQiLCAid2luZG93LmV4cGVjdGVkU2Nyb2xsTGVm
dCp3aW5kb3cucGl4ZWxzUGVyV2hlZWxUaWNrIik7CisKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICB3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmdW5jdGlvbiBtb3VzZXdoZWVsSGFuZGxlcihlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGV2ZW50ID0gZTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZSgiZXZlbnQud2hl
ZWxEZWx0YVkiLCAid2luZG93LmV4cGVjdGVkU2Nyb2xsVG9wKi0xMjAiKTsKKyAgICAgICAgICAg
ICAgICBzaG91bGRCZSgiZXZlbnQud2hlZWxEZWx0YVgiLCAid2luZG93LmV4cGVjdGVkU2Nyb2xs
TGVmdCotMTIwIik7CisKKyAgICAgICAgICAgICAgICBpZiAoZS53aGVlbERlbHRhWSkKKyAgICAg
ICAgICAgICAgICAgICAgc2hvdWxkQmUoImV2ZW50LndoZWVsRGVsdGEiLCAid2luZG93LmV4cGVj
dGVkU2Nyb2xsVG9wKi0xMjAiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNob3VsZEJlKCJldmVudC53aGVlbERlbHRhIiwgIndpbmRvdy5leHBlY3RlZFNjcm9s
bExlZnQqLTEyMCIpOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hl
YWQ+CisKKyAgICA8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0ic2V0VGltZW91dCgnZGlz
cGF0Y2hXaGVlbEV2ZW50KCk7JywgMTAwKSI+CisgICAgICAgIDxkaXYgaWQ9Im92ZXJmbG93IiBz
dHlsZT0iYm9yZGVyOjJweCBzb2xpZCBibGFjaztvdmVyZmxvdzphdXRvO2hlaWdodDoyMDBweDt3
aWR0aDoyMDBweDsiPgorICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpy
ZWQ7aGVpZ2h0OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+CisgICAgICAgICAgICA8ZGl2IHN0
eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdodDoyMDBweDt3aWR0aDo0MDBweDsiPjwv
ZGl2PgorICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZWQ7aGVpZ2h0
OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy93aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4tc2Ny
b2xsaW5nLWRpdi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU2MDAxKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvd2hlZWxldmVudC1pbi1zY3JvbGxpbmctZGl2LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKLXNjcm9sbFRvcD0yMDAgKHNob3VsZCBiZSAyMDAp
OiBQQVNTCi1zY3JvbGxMZWZ0PTEwMCAoc2hvdWxkIGJlIDEwMCk6IFBBU1MKLXdoZWVsRGVsdGFZ
PS0yNDAwMCAoc2hvdWxkIGJlIC0yNDAwMCk6IFBBU1MKLXdoZWVsRGVsdGFYPS0xMjAwMCAoc2hv
dWxkIGJlIC0xMjAwMCk6IFBBU1MKLXdoZWVsRGVsdGE9LTI0MDAwIChzaG91bGQgYmUgLTI0MDAw
KTogUEFTUworUEFTUyBldmVudC53aGVlbERlbHRhWSBpcyB3aW5kb3cuZXhwZWN0ZWRTY3JvbGxU
b3AqLTEyMAorUEFTUyBldmVudC53aGVlbERlbHRhWCBpcyB3aW5kb3cuZXhwZWN0ZWRTY3JvbGxM
ZWZ0Ki0xMjAKK1BBU1MgZXZlbnQud2hlZWxEZWx0YSBpcyB3aW5kb3cuZXhwZWN0ZWRTY3JvbGxU
b3AqLTEyMAorUEFTUyBkaXYuc2Nyb2xsVG9wIGlzIHdpbmRvdy5leHBlY3RlZFNjcm9sbFRvcAor
UEFTUyBkaXYuc2Nyb2xsTGVmdCBpcyB3aW5kb3cuZXhwZWN0ZWRTY3JvbGxMZWZ0CiAKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsZXZlbnQtaW4tc2Ny
b2xsaW5nLWRpdi5odG1sCShyZXZpc2lvbiA1NjAwMSkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3doZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDg0ICsxLDYwIEBACi08aGVhZD4KLSAgICA8c2NyaXB0PgotICAgICAgICB2YXIgZXhwZWN0ZWRT
Y3JvbGxUb3AgPSAyMDA7Ci0gICAgICAgIHZhciBleHBlY3RlZFNjcm9sbExlZnQgPSAxMDA7Ci0K
LSAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gZGlzcGF0Y2hXaGVlbEV2ZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG92ZXJm
bG93RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdmVyZmxvdyIpOwotICAgICAg
ICAgICAgaWYgKG92ZXJmbG93RWxlbWVudCkgewotICAgICAgICAgICAgICAgIG92ZXJmbG93RWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgbW91c2V3aGVlbEhhbmRsZXIsIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICB2YXIgd2hlZWxFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2
ZW50KCJXaGVlbEV2ZW50Iik7Ci0gICAgICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQpIHsKKzxo
dG1sPgorICAgIDxoZWFkPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CisgICAgICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0
PgorICAgICAgICAgICAgdmFyIGV4cGVjdGVkU2Nyb2xsVG9wID0gMjAwOworICAgICAgICAgICAg
dmFyIGV4cGVjdGVkU2Nyb2xsTGVmdCA9IDEwMDsKKyAgICAgICAgICAgIHZhciBldmVudDsKKyAg
ICAgICAgICAgIHZhciBkaXY7CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCisgICAgICAgICAgICBmdW5jdGlvbiBkaXNwYXRjaFdoZWVsRXZlbnQoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBvdmVyZmxvd0VsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgib3ZlcmZsb3ciKTsKKyAgICAgICAgICAgICAgICBpZiAob3ZlcmZs
b3dFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93RWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgbW91c2V3aGVlbEhhbmRsZXIsIGZhbHNlKTsKKworICAg
ICAgICAgICAgICAgICAgICB2YXIgd2hlZWxFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJX
aGVlbEV2ZW50Iik7CiAgICAgICAgICAgICAgICAgICAgIHdoZWVsRXZlbnQuaW5pdFdlYktpdFdo
ZWVsRXZlbnQoLXdpbmRvdy5leHBlY3RlZFNjcm9sbExlZnQsIC13aW5kb3cuZXhwZWN0ZWRTY3Jv
bGxUb3AsIHdpbmRvdywgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd0VsZW1lbnQuZGlzcGF0Y2hFdmVudCh3aGVlbEV2
ZW50KTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCdj
aGVja09mZnNldHMoKTsnLCAxMDApOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXRU
aW1lb3V0KCdwcmludFNjcm9sbE9mZnNldHMoKTsnLCAxMDApOwotICAgICAgICB9CisgICAgICAg
ICAgICBmdW5jdGlvbiBjaGVja09mZnNldHMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdmVyZmxvdyIpOworICAgICAgICAg
ICAgICAgIHNob3VsZEJlKCJkaXYuc2Nyb2xsVG9wIiwgIndpbmRvdy5leHBlY3RlZFNjcm9sbFRv
cCIpOworICAgICAgICAgICAgICAgIHNob3VsZEJlKCJkaXYuc2Nyb2xsTGVmdCIsICJ3aW5kb3cu
ZXhwZWN0ZWRTY3JvbGxMZWZ0Iik7CiAKLSAgICAgICAgZnVuY3Rpb24gcGFzc0ZhaWxTdHJpbmco
cCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGNvbG9yID0gcD8iZ3JlZW4iOiJyZWQiOwot
ICAgICAgICAgICAgdmFyIHRleHQgPSBwPyJQQVNTIjoiRkFJTCI7Ci0gICAgICAgICAgICByZXR1
cm4gIjxzcGFuIHN0eWxlPSdjb2xvcjoiK2NvbG9yKyInPiIrdGV4dCsiPC9zcGFuPiI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwcmludFNjcm9sbE9mZnNldHMoKQotICAgICAgICB7
Ci0gICAgICAgICAgICB2YXIgY29uc29sZURpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJv
ZmZzZXRDb25zb2xlIik7Ci0gICAgICAgICAgICB2YXIgb3ZlcmZsb3dEaXYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgib3ZlcmZsb3ciKTsKLSAgICAgICAgICAgIGlmIChjb25zb2xlRGl2ICYm
IG92ZXJmbG93RGl2KSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5lckhUTUwgPSAi
IjsKLQotICAgICAgICAgICAgICAgIGNvbnNvbGVEaXYuaW5uZXJIVE1MICs9ICJzY3JvbGxUb3A9
IiArIG92ZXJmbG93RGl2LnNjcm9sbFRvcCArICIgKHNob3VsZCBiZSAiICsgd2luZG93LmV4cGVj
dGVkU2Nyb2xsVG9wICsgIik6ICI7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5lckhU
TUwgKz0gcGFzc0ZhaWxTdHJpbmcob3ZlcmZsb3dEaXYuc2Nyb2xsVG9wID09IHdpbmRvdy5leHBl
Y3RlZFNjcm9sbFRvcCk7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5lckhUTUwgKz0g
Ijxicj4iCi0KLSAgICAgICAgICAgICAgICBjb25zb2xlRGl2LmlubmVySFRNTCArPSAic2Nyb2xs
TGVmdD0iICsgb3ZlcmZsb3dEaXYuc2Nyb2xsTGVmdCArICIgKHNob3VsZCBiZSAiICsgd2luZG93
LmV4cGVjdGVkU2Nyb2xsTGVmdCArICIpOiAiOwotICAgICAgICAgICAgICAgIGNvbnNvbGVEaXYu
aW5uZXJIVE1MICs9IHBhc3NGYWlsU3RyaW5nKG92ZXJmbG93RGl2LnNjcm9sbExlZnQgPT0gd2lu
ZG93LmV4cGVjdGVkU2Nyb2xsTGVmdCk7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5l
ckhUTUwgKz0gIjxicj4iCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbW91
c2V3aGVlbEhhbmRsZXIoZSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGNvbnNvbGVEaXYg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW91c2V3aGVlbENvbnNvbGUiKTsKLSAgICAgICAg
ICAgIGlmIChjb25zb2xlRGl2KSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5lckhU
TUwgPSAiIjsKLQotICAgICAgICAgICAgICAgIGNvbnNvbGVEaXYuaW5uZXJIVE1MICs9ICJ3aGVl
bERlbHRhWT0iICsgZS53aGVlbERlbHRhWSArICIgKHNob3VsZCBiZSAiICsgd2luZG93LmV4cGVj
dGVkU2Nyb2xsVG9wKi0xMjAgKyAiKTogIjsKLSAgICAgICAgICAgICAgICBjb25zb2xlRGl2Lmlu
bmVySFRNTCArPSBwYXNzRmFpbFN0cmluZyhlLndoZWVsRGVsdGFZID09IHdpbmRvdy5leHBlY3Rl
ZFNjcm9sbFRvcCotMTIwKTsKLSAgICAgICAgICAgICAgICBjb25zb2xlRGl2LmlubmVySFRNTCAr
PSAiPGJyPiIKLQotICAgICAgICAgICAgICAgIGNvbnNvbGVEaXYuaW5uZXJIVE1MICs9ICJ3aGVl
bERlbHRhWD0iICsgZS53aGVlbERlbHRhWCArICIgKHNob3VsZCBiZSAiICsgd2luZG93LmV4cGVj
dGVkU2Nyb2xsTGVmdCotMTIwICsgIik6ICI7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5p
bm5lckhUTUwgKz0gcGFzc0ZhaWxTdHJpbmcoZS53aGVlbERlbHRhWCA9PSB3aW5kb3cuZXhwZWN0
ZWRTY3JvbGxMZWZ0Ki0xMjApOwotICAgICAgICAgICAgICAgIGNvbnNvbGVEaXYuaW5uZXJIVE1M
ICs9ICI8YnI+IgotCi0gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkU2Nyb2xsID0gZS53aGVl
bERlbHRhWT93aW5kb3cuZXhwZWN0ZWRTY3JvbGxUb3A6d2luZG93LmV4cGVjdGVkU2Nyb2xsTGVm
dDsKLSAgICAgICAgICAgICAgICBjb25zb2xlRGl2LmlubmVySFRNTCArPSAid2hlZWxEZWx0YT0i
ICsgZS53aGVlbERlbHRhICsgIiAoc2hvdWxkIGJlICIgKyBleHBlY3RlZFNjcm9sbCotMTIwICsg
Iik6ICI7Ci0gICAgICAgICAgICAgICAgY29uc29sZURpdi5pbm5lckhUTUwgKz0gcGFzc0ZhaWxT
dHJpbmcoZS53aGVlbERlbHRhID09IGV4cGVjdGVkU2Nyb2xsKi0xMjApOwotICAgICAgICAgICAg
ICAgIGNvbnNvbGVEaXYuaW5uZXJIVE1MICs9ICI8YnI+IgorICAgICAgICAgICAgZnVuY3Rpb24g
bW91c2V3aGVlbEhhbmRsZXIoZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBldmVu
dCA9IGU7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUoImV2ZW50LndoZWVsRGVsdGFZIiwgIndp
bmRvdy5leHBlY3RlZFNjcm9sbFRvcCotMTIwIik7CisgICAgICAgICAgICAgICAgc2hvdWxkQmUo
ImV2ZW50LndoZWVsRGVsdGFYIiwgIndpbmRvdy5leHBlY3RlZFNjcm9sbExlZnQqLTEyMCIpOwor
CisgICAgICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVkpCisgICAgICAgICAgICAgICAgICAg
IHNob3VsZEJlKCJldmVudC53aGVlbERlbHRhIiwgIndpbmRvdy5leHBlY3RlZFNjcm9sbFRvcCot
MTIwIik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzaG91bGRC
ZSgiZXZlbnQud2hlZWxEZWx0YSIsICJ3aW5kb3cuZXhwZWN0ZWRTY3JvbGxMZWZ0Ki0xMjAiKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9k
eSBzdHlsZT0ibWFyZ2luOjAiIG9ubG9hZD0ic2V0VGltZW91dCgnZGlzcGF0Y2hXaGVlbEV2ZW50
KCk7JywgMTAwKSI+Ci0gICAgPGRpdiBpZD0ib3ZlcmZsb3ciIHN0eWxlPSJib3JkZXI6MnB4IHNv
bGlkIGJsYWNrO292ZXJmbG93OmF1dG87aGVpZ2h0OjIwMHB4O3dpZHRoOjIwMHB4OyI+Ci0gICAg
ICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmVkO2hlaWdodDoyMDBweDt3aWR0aDo0
MDBweDsiPjwvZGl2PgotICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmdyZWVu
O2hlaWdodDoyMDBweDt3aWR0aDo0MDBweDsiPjwvZGl2PgotICAgICAgICA8ZGl2IHN0eWxlPSJi
YWNrZ3JvdW5kLWNvbG9yOnJlZDtoZWlnaHQ6MjAwcHg7d2lkdGg6NDAwcHg7Ij48L2Rpdj4KLSAg
ICA8L2Rpdj4KLSAgICA8ZGl2IGlkPSJvZmZzZXRDb25zb2xlIj48c3BhbiBzdHlsZT0iY29sb3I6
cmVkIj5GQUlMPC9zcGFuPjwvZGl2PgotICAgIDxkaXYgaWQ9Im1vdXNld2hlZWxDb25zb2xlIj48
c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5GQUlMPC9zcGFuPjwvZGl2PgotPC9ib2R5PgorICAgICAg
ICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisKKyAgICA8Ym9keSBzdHlsZT0ibWFyZ2luOjAiIG9u
bG9hZD0ic2V0VGltZW91dCgnZGlzcGF0Y2hXaGVlbEV2ZW50KCk7JywgMTAwKSI+CisgICAgICAg
IDxkaXYgaWQ9Im92ZXJmbG93IiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBibGFjaztvdmVyZmxv
dzphdXRvO2hlaWdodDoyMDBweDt3aWR0aDoyMDBweDsiPgorICAgICAgICAgICAgPGRpdiBzdHls
ZT0iYmFja2dyb3VuZC1jb2xvcjpyZWQ7aGVpZ2h0OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+
CisgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdodDoy
MDBweDt3aWR0aDo0MDBweDsiPjwvZGl2PgorICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dy
b3VuZC1jb2xvcjpyZWQ7aGVpZ2h0OjIwMHB4O3dpZHRoOjQwMHB4OyI+PC9kaXY+CisgICAgICAg
IDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNTYwMDEpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTgx
OCw4ICs1ODE4LDExIEBAIGZhc3QvZXZlbnRzL3pvb20tZGJsY2xpY2suaHRtbAogIyBGb3Igc29t
ZSByZWFzb24gY3Jhc2hlcyB3aGVuIHJ1biB3aXRoIGFsbCB0ZXN0cy4gUGFzc2VzIGluZGl2aWR1
YWxseS4KIGZhc3QvZm9ybXMvbXVsdGlwbGUtZm9ybS1zdWJtaXNzaW9uLXByb3RlY3Rpb24tbW91
c2UuaHRtbAogCi0jIG1vdXNlU2Nyb2xsQnkoKSBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRo
ZSBHVEsgRXZlbnRTZW5kZXIgQVBJLgorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzYwMDMKKyMgbW91c2VTY3JvbGxCeSgpIGFuZCBjb250aW51b3VzTW91c2VTY3Jv
bGxCeSgpIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBHVEsgRXZlbnRTZW5kZXIgQVBJ
LgogZmFzdC9ldmVudHMvcmVtb3ZlLWNoaWxkLW9uc2Nyb2xsLmh0bWwKK2Zhc3QvZXZlbnRzL3Bs
YXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCitmYXN0L2V2ZW50cy9jb250
aW51b3VzLXBsYXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCiAKICMgcmVu
ZGVyVGhlbWUgaXMgbm90IHJlYWR5IHRvIGRyYXcgcHJvZ3Jlc3MgZWxlbWVudAogZmFzdC9kb20v
SFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50Lmh0bWwKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCShyZXZpc2lvbiA1NjAwMSkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCAr
MTIwLDEwIEBAIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcmVmZXJlci5odG1sCiAjIFRoaXMgdGVz
dCBmYWlscyBvbiBUaWdlciwgYW5kIHdoZW4gaXQgZmFpbHMsIGl0IGR1bXBzIGRpZmZlcmVudCBy
ZXN1bHRzIGVhY2ggdGltZS4KIGphdmEvbGMzL0phdmFBcnJheS9Ub1N0cmluZy0wMDEuaHRtbAog
Ci0jIFdlIGNhbid0IGltcGxlbWVudCBtb3VzZVNjcm9sbEJ5KCkgaW4gVGlnZXIgZHVlIHRvIHRo
ZSBsYWNrIG9mIENHRXZlbnRDcmVhdGVTY3JvbGxXaGVlbEV2ZW50KCkuCisjIFdlIGNhbid0IGlt
cGxlbWVudCBtb3VzZVNjcm9sbEJ5KCkgb3IgY29udGludW91c01vdXNlU2Nyb2xsQnkoKSBpbiBU
aWdlciBkdWUgdG8gdGhlIGxhY2sgb2YgQ0dFdmVudENyZWF0ZVNjcm9sbFdoZWVsRXZlbnQoKS4K
IGZhc3QvZXZlbnRzL3JlbW92ZS1jaGlsZC1vbnNjcm9sbC5odG1sCitmYXN0L2V2ZW50cy9wbGF0
Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRtbAorZmFzdC9ldmVudHMvY29udGlu
dW91cy1wbGF0Zm9ybS13aGVlbGV2ZW50LWluLXNjcm9sbGluZy1kaXYuaHRtbAogCiAjIEludGVy
bWl0dGVudGx5IHRpbWVzIG91dCBvbiBUaWdlciBib3QuCiAjIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjAzOQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCShy
ZXZpc2lvbiA1NjAwMSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHdvcmtp
bmcgY29weSkKQEAgLTUwOTYsOCArNTA5NiwxMSBAQCBodHRwL3Rlc3RzL2Nvb2tpZXMvdGhpcmQt
cGFydHktY29va2llLXJlCiAjIEZvciBzb21lIHJlYXNvbiBjcmFzaGVzIHdoZW4gcnVuIHdpdGgg
YWxsIHRlc3RzLiBQYXNzZXMgaW5kaXZpZHVhbGx5LgogZmFzdC9mb3Jtcy9tdWx0aXBsZS1mb3Jt
LXN1Ym1pc3Npb24tcHJvdGVjdGlvbi1tb3VzZS5odG1sCiAKLSMgbW91c2VTY3JvbGxCeSgpIGlz
IG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIFF0IEV2ZW50U2VuZGVyIEFQSS4KKyMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MDA0CisjIG1vdXNlU2Nyb2xsQnko
KSBhbmQgY29udGludW91c01vdXNlU2Nyb2xsQnkoKSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCBp
biB0aGUgUXQgRXZlbnRTZW5kZXIgQVBJLgogZmFzdC9ldmVudHMvcmVtb3ZlLWNoaWxkLW9uc2Ny
b2xsLmh0bWwKK2Zhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRp
di5odG1sCitmYXN0L2V2ZW50cy9jb250aW51b3VzLXBsYXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Ny
b2xsaW5nLWRpdi5odG1sCiAKICMgSXQgZmFpbHMgaW4gRFJULCBidXQgcGFzc2VzIGluIFF0TGF1
bmNoZXIKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1OTIxCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNpb24gNTU4ODUpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNzkwLDggKzc5MCwx
MSBAQCBtZWRpYS92aWRlby1wcmVsb2FkLmh0bWwKICMgRm9yIHNvbWUgcmVhc29uIGNyYXNoZXMg
d2hlbiBydW4gd2l0aCBhbGwgdGVzdHMuIFBhc3NlcyBpbmRpdmlkdWFsbHkuCiBmYXN0L2Zvcm1z
L211bHRpcGxlLWZvcm0tc3VibWlzc2lvbi1wcm90ZWN0aW9uLW1vdXNlLmh0bWwKIAotIyBtb3Vz
ZVNjcm9sbEJ5KCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB0aGUgV2luZG93cyBFdmVudFNl
bmRlciBBUEkuCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjAw
MgorIyBtb3VzZVNjcm9sbEJ5KCkgYW5kIGNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KCkgYXJlIG5v
dCB5ZXQgaW1wbGVtZW50ZWQgaW4gdGhlIFdpbmRvd3MgRXZlbnRTZW5kZXIgQVBJLgogZmFzdC9l
dmVudHMvcmVtb3ZlLWNoaWxkLW9uc2Nyb2xsLmh0bWwKK2Zhc3QvZXZlbnRzL3BsYXRmb3JtLXdo
ZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCitmYXN0L2V2ZW50cy9jb250aW51b3VzLXBs
YXRmb3JtLXdoZWVsZXZlbnQtaW4tc2Nyb2xsaW5nLWRpdi5odG1sCiAKICMgV2luZG93cyBwb3J0
IGRvZXNuJ3QgeWV0IHN1cHBvcnQgcmVuZGVyaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBldmVu
IHRob3VnaCB0aGVyZSdzIGEgZm9udCBhdmFpbGFibGUuCiBmYXN0L3RleHQvaW50ZXJuYXRpb25h
bC9wbGFuZTIuaHRtbCAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>60125</attachid>
            <date>2010-06-30 09:30:55 -0700</date>
            <delta_ts>2010-06-30 09:30:55 -0700</delta_ts>
            <desc>Shows wrong magnitude of continuous scrolling in recent WebKit builds.</desc>
            <filename>test_wheel.html</filename>
            <type>text/html</type>
            <size>462</size>
            <attacher name="Nathan Vander Wilt">natevw</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8dGl0bGU+VGVzdGluZyBTYWZhcmkgNSBtb3VzZSB3aGVlbCBldmVudHM8
L3RpdGxlPgo8c2NyaXB0PgoJdmFyIGRlbHRhU3VtID0gMDsKCWRvY3VtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNld2hlZWwiLCBmdW5jdGlvbiAoZSkgewoJCQkJCQkJCSAgZGVsdGFTdW0gKz0g
ZS53aGVlbERlbHRhWTsKCQkJCQkJCQkgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYmciKS5p
bm5lclRleHQgPSBkZWx0YVN1bS50b1N0cmluZygpOwoJCQkJCQkJICB9KTsKPC9zY3JpcHQ+Cjwv
aGVhZD4KPGJvZHk+CkxpbmUgMS48YnIvPgpMaW5lIDIuPGJyLz4KTGluZSAzLjxici8+CkxpbmUg
NC48YnIvPgpMaW5lIDUuPGJyLz4KTGluZSA2Ljxici8+CkRlYnVnOiA8c3BhbiBpZD0iZGJnIj4t
PC9zcGFuPgoKCjxkaXYgc3R5bGU9ImhlaWdodDogNTAwMDAwMHB4Ij48L2Rpdj4KPC9ib2R5Pgo8
L2h0bWw+
</data>

          </attachment>
      

    </bug>

</bugzilla>