<?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>40002</bug_id>
          
          <creation_ts>2010-06-01 08:48:01 -0700</creation_ts>
          <short_desc>Need Geolocation LayoutTest to test case where permission has neither been granted nor denied</short_desc>
          <delta_ts>2010-08-25 06:18:20 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>42811</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>232772</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-01 08:48:01 -0700</bug_when>
    <thetext>We need a Geolocation LayoutTest to test the case where a position is available but the embedder has not yet either granted or denied permission. In this case, no callback should be made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232783</commentid>
    <comment_count>1</comment_count>
      <attachid>57553</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-01 09:42:46 -0700</bug_when>
    <thetext>Created attachment 57553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232839</commentid>
    <comment_count>2</comment_count>
      <attachid>57553</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-01 10:51:57 -0700</bug_when>
    <thetext>Comment on attachment 57553
Patch

I guess I&apos;m missing something, but I don&apos;t see how this test can work. All LayoutTestController::setGeolocationPermission() does is set a member variable, how does this result in async callback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234868</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-07 08:33:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57553 [details])
&gt; I guess I&apos;m missing something, but I don&apos;t see how this test can work.
Sorry, I was testing with the Android LayoutTestController, which isn&apos;t upstream, and forgot to update the common LayoutTestController. Updating patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234870</commentid>
    <comment_count>4</comment_count>
      <attachid>58033</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-07 08:35:13 -0700</bug_when>
    <thetext>Created attachment 58033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234878</commentid>
    <comment_count>5</comment_count>
      <attachid>58033</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-07 08:56:38 -0700</bug_when>
    <thetext>Comment on attachment 58033
Patch

+        assert(m_pendingGeolocationPermissionListener == nil);

Should be &quot;ASSERT(!m_pendingGeolocationPermissionListener)&quot;.

+    if (m_pendingGeolocationPermissionListener == nil)

Should be &quot;if (!m_pendingGeolocationPermissionListener)&quot;.

+    if (allow)
+        [m_pendingGeolocationPermissionListener allow];
+    else
+        [m_pendingGeolocationPermissionListener deny];
+
+    [m_pendingGeolocationPermissionListener release];
+    m_pendingGeolocationPermissionListener = nil;

This calls out from DRT code, so UIDelegate may be released in the meanwhile. I&apos;d use a local variable for the listener.

+    if (!_timer)
+        _timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(timerFired) userInfo:0 repeats:NO];

I don&apos;t understand this change. Ideally, the allow/deny callback should be completely asynchronous (and not dispatched from setGeolocationPermission() directly), but this change doesn&apos;t give us that. Is this what you refer to as &quot;minor fix&quot; in the ChangeLog?

+- (void)setGeolocationPermission:(bool)allow

It&apos;s somewhat confusing to have a function with such a generic name in UI delegate. Something like &quot;setMockGeolocationOErmission&quot; can help avoid the confusion.

+    // FIXME: Implement for Geolocation layout tests.

Does the new test need to be skipped on Gtk?

I think that this could use another review round, especially if you decide to implement true asynchronicity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234913</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-07 10:19:38 -0700</bug_when>
    <thetext>Thanks for the review Alexey.

&gt; This calls out from DRT code, so UIDelegate may be released in the meanwhile.
&gt; I&apos;d use a local variable for the listener.
I&apos;m not sure I understand. When would the UI delegate be released while script is still running?

&gt; +    if (!_timer)
&gt; +        _timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(timerFired) userInfo:0 repeats:NO];
&gt; 
&gt; I don&apos;t understand this change. Ideally, the allow/deny callback should be
&gt; completely asynchronous (and not dispatched from setGeolocationPermission()
&gt; directly), but this change doesn&apos;t give us that. Is this what you refer to as
&gt; &quot;minor fix&quot; in the ChangeLog?
This change is the &quot;minor fix&quot;. Previously, the MockGeolocationProvider didn&apos;t trigger a position update to the WebView when it registered - only when a new mock position was set. It relied on the fact that the WebView was registered synchronously along with the call to set the mock position. So by the time the MockGeolocationProvider&apos;s timer fired, the Webview was registered and it would be sent the position. Now that the permission is granted asynchronously, the WebView is also added asynchronously (Geolocation does not call startUpdating() until permission is granted). So there&apos;s a race condition and the timer may fire before the WebView is registered. This change makes sure that the WebView gets the position when it registers.

I think the above change is independent of whether the allow/deny callback is completely asynchronous. Is there a particular need for it to be completely asynchronous?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235294</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-08 09:58:28 -0700</bug_when>
    <thetext>&gt; &gt; This calls out from DRT code, so UIDelegate may be released in the meanwhile.
&gt; &gt; I&apos;d use a local variable for the listener.
&gt; I&apos;m not sure I understand. When would the UI delegate be released while script is still running?

I haven&apos;t looked into the details, maybe WebKit can navigate away from the current page during this callback. It&apos;s always best not to rely on behavior of delegate calls made into different projects.

&gt; I think the above change is independent of whether the allow/deny callback is completely 
&gt; asynchronous. Is there a particular need for it to be completely asynchronous?

Nothing particular I can think of, just matching &quot;real life&quot; code path better.

&gt; This change is the &quot;minor fix&quot;.

OK. It would be nice to say a few words about this in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256660</commentid>
    <comment_count>8</comment_count>
      <attachid>62699</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-07-27 09:48:03 -0700</bug_when>
    <thetext>Created attachment 62699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258759</commentid>
    <comment_count>9</comment_count>
      <attachid>62699</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-08-02 02:46:55 -0700</bug_when>
    <thetext>Comment on attachment 62699
Patch

+    [[[mainFrame webView] UIDelegate] didSetGeolocationPermission];

I&apos;d still prefer this to be called didSetMockGeolocationPermission (same for a few other names, of course) . It&apos;s hard to understand the various permissions here, so being specific helps.

+    HashSet&lt;id&lt;WebGeolocationPolicyListener&gt; &gt; m_pendingGeolocationPermissionListeners;

This code is fine in the short run, but HashSet isn&apos;t a great data structure to keep Objective-C objects in. Specifically, we&apos;ll get problems if we try to run DumpRenderTree in garbage collected mode.  NSMutableSet is the easiest way to make the code more clean.

r=me, but please consider addressing these comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258946</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-02 10:12:11 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; NSMutableSet is the easiest way to make the code more clean.

Or perhaps NSMapTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259505</commentid>
    <comment_count>11</comment_count>
      <attachid>63340</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-03 09:28:15 -0700</bug_when>
    <thetext>Created attachment 63340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259528</commentid>
    <comment_count>12</comment_count>
      <attachid>63340</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-08-03 10:28:58 -0700</bug_when>
    <thetext>Comment on attachment 63340
Patch

+#import &lt;Foundation/NSSet.h&gt;

This isn&apos;t needed, please don&apos;t add this line.

+    if (m_pendingGeolocationPermissionListeners != nil &amp;&amp; !m_timer)

We don&apos;t compare to null, so this can be just (m_pendingGeolocationPermissionListeners &amp;&amp; !m_timer)

+        if (!m_pendingGeolocationPermissionListeners)
+            m_pendingGeolocationPermissionListeners = [[NSMutableSet set] retain];

I see that m_pendingGeolocationPermissionListeners is released in timerFired, but shouldn&apos;t it be also released in dealloc method - in case the timer doesn&apos;t get a chance to fire?

+    NSEnumerator* enumerator = [m_pendingGeolocationPermissionListeners objectEnumerator];

Should we be iterating a copy? It seems that a client might add listeners when handling allow/deny.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259540</commentid>
    <comment_count>13</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-03 10:47:50 -0700</bug_when>
    <thetext>&gt; This isn&apos;t needed, please don&apos;t add this line.
Will fix

&gt; We don&apos;t compare to null, so this can be just (m_pendingGeolocationPermissionListeners &amp;&amp; !m_timer)
Will fix

&gt; I see that m_pendingGeolocationPermissionListeners is released in timerFired, but shouldn&apos;t it be also released in dealloc method - in case the timer doesn&apos;t get a chance to fire?
Yes, will fix

&gt; Should we be iterating a copy? It seems that a client might add listeners when handling allow/deny.
No, because listeners are only added before permission has been set. But when the timer fires, the permission must have already been set, as in the assertion above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259550</commentid>
    <comment_count>14</comment_count>
      <attachid>63353</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-03 10:56:31 -0700</bug_when>
    <thetext>Created attachment 63353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259551</commentid>
    <comment_count>15</comment_count>
      <attachid>63353</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-03 10:57:15 -0700</bug_when>
    <thetext>Comment on attachment 63353
Patch

New patch to check build on EWS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259632</commentid>
    <comment_count>16</comment_count>
      <attachid>63353</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-03 12:44:25 -0700</bug_when>
    <thetext>Comment on attachment 63353
Patch

Minor changes only since Alexey&apos;s r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259963</commentid>
    <comment_count>17</comment_count>
      <attachid>63353</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-04 04:10:49 -0700</bug_when>
    <thetext>Comment on attachment 63353
Patch

Giving up on commit queue, which seems to be having problems. Will land manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259965</commentid>
    <comment_count>18</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-04 04:15:54 -0700</bug_when>
    <thetext>Landed manually as http://trac.webkit.org/changeset/64639

Closing as resolved fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259968</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 04:32:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64639 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259971</commentid>
    <comment_count>20</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-04 04:39:53 -0700</bug_when>
    <thetext>&gt; http://trac.webkit.org/changeset/64639 might have broken Qt Linux Release
Added new tests to Qt skipped list with http://trac.webkit.org/changeset/64640</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269125</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-25 03:01:22 -0700</bug_when>
    <thetext>&lt;cherry-pick-for-backport: r64639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269126</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-25 03:01:35 -0700</bug_when>
    <thetext>&lt;cherry-pick-for-backport: r64640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269204</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-25 06:18:20 -0700</bug_when>
    <thetext>Revision r64639 cherry-picked into qtwebkit-2.1 with commit 741b9a8007571c1a8907f4de91f7dd9f6b3c345e
Revision r64640 cherry-picked into qtwebkit-2.1 with commit 51fa56069c38a406e86170dd764d6ce90d6d1a5a
found f81dde5b7304f9389b876c60ba5843774e3e7a02</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57553</attachid>
            <date>2010-06-01 09:42:46 -0700</date>
            <delta_ts>2010-06-07 08:35:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40002-20100601174244.patch</filename>
            <type>text/plain</type>
            <size>6317</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYwNDgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDYtMDEgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5lZWQgR2VvbG9jYXRpb24gTGF5b3V0VGVzdCB0byB0ZXN0IGNhc2Ugd2hl
cmUgcGVybWlzc2lvbiBoYXMgbmVpdGhlciBiZWVuIGdyYW50ZWQgbm9yIGRlbmllZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwMDIKKworICAgICAg
ICBUaGVzZSB0ZXN0cyB0ZXN0IHRoYXQgd2hlbiBhIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgbm8g
Y2FsbGJhY2tzIGFyZQorICAgICAgICBtYWRlIHVudGlsIHRoZSBwZXJtaXNzaW9uIGlzIHNldC4K
KworICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxv
d2VkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1k
ZW5pZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0
LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRlbmll
ZC5qczogQWRkZWQuCisKIDIwMTAtMDYtMDEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxs
b3dlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgdGhh
dCB3aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQg
dW50aWwgcGVybWlzc2lvbiBpcyBhbGxvd2VkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lv
bi1hbGxvd2VkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2Vk
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9u
LWFsbG93ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVk
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgdGhhdCB3
aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQgdW50
aWwgcGVybWlzc2lvbiBpcyBkZW5pZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGVycm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BBU1MgZXJyb3Iu
bWVzc2FnZSBpcyAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9k
b20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1k
ZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0
aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Nj
cmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJt
aXNzaW9uLWFsbG93ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHdoZW4g
YSBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB1bnRpbCBw
ZXJtaXNzaW9uIGlzIGFsbG93ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOworCitmdW5jdGlvbiBhbGxvd1Blcm1pc3Npb24o
KSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKHRydWUpOworfQorCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBv
c2l0aW9uKGZ1bmN0aW9uKCkgeworICAgIGlmIChwZXJtaXNzaW9uU2V0KSB7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RGYWlsZWQoJ1N1
Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxiYWNrIGludm9r
ZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKK3dpbmRvdy5zZXRU
aW1lb3V0KGFsbG93UGVybWlzc2lvbiwgMTAwKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRl
bmllZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9z
Y3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9kZWxheWVkLXBl
cm1pc3Npb24tZGVuaWVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitkZXNjcmlw
dGlvbigiVGVzdHMgdGhhdCB3aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFj
a3MgYXJlIGludm9rZWQgdW50aWwgcGVybWlzc2lvbiBpcyBkZW5pZWQuIik7CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
LnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOworCitmdW5j
dGlvbiBkZW55UGVybWlzc2lvbigpIHsKKyAgICBwZXJtaXNzaW9uU2V0ID0gdHJ1ZTsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZmFsc2UpOworfQorCit2YXIgZXJyb3I7Citu
YXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKCkgeworICAg
IHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30sIGZ1bmN0aW9uKGUpIHsKKyAgICBpZiAocGVybWlzc2lvblNl
dCkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5jb2RlJywg
J2Vycm9yLlBFUk1JU1NJT05fREVOSUVEJyk7CisgICAgICAgIHNob3VsZEJlKCdlcnJvci5tZXNz
YWdlJywgJyJVc2VyIGRlbmllZCBHZW9sb2NhdGlvbiInKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzdEZhaWxlZCgnRXJyb3IgY2FsbGJh
Y2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOword2lu
ZG93LnNldFRpbWVvdXQoZGVueVBlcm1pc3Npb24sIDEwMCk7CisKK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58033</attachid>
            <date>2010-06-07 08:35:13 -0700</date>
            <delta_ts>2010-07-27 09:47:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40002-20100607163511.patch</filename>
            <type>text/plain</type>
            <size>15717</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYwNzg1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDYtMDcgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZHMgR2VvbG9jYXRpb24gTGF5b3V0VGVzdHMgZm9yIHRoZSBjYXNlIHdo
ZXJlIHBlcm1pc3Npb24gaXMgbm90IGdyYW50ZWQgb3IgZGVuaWVkIGltbWVkaWF0ZWx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDAwMgorCisgICAg
ICAgIFRoZSBjb2RlIGluIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oKSB3YXMgbW92ZWQgdG8gc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKCkKKyAg
ICAgICAgdG8gYWxsb3cgZWFjaCBwb3J0IHRvIHByb3ZpZGUgaXRzIG93ZW4gaW1wbGVtZW50YXRp
b24gb2Ygc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKCkuIEZvciB0aGUgTWFjIHBvcnQsCisgICAg
ICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigpIG5vdGlmaWVzIHRoZSBVSURlbGVnYXRlIG9m
IHRoZSBuZXcgcGVybWlzc2lvbiwgc28gaXQgY2FuIGNhbGwgYmFjayB0byBXZWJDb3JlCisgICAg
ICAgIGlmIGEgcGVybWlzc2lvbiByZXF1ZXN0IGlzIGluIHByb2dyZXNzIGFuZCB3YWl0aW5nIGZv
ciBhIHJlc3BvbnNlLiBBIG1pbm9yIGZpeCB0byB0aGUgTWFjIE1vY2tHZW9sb2NhdGlvblByb3Zp
ZGVyCisgICAgICAgIHdhcyBhbHNvIHJlcXVpcmVkLiBGb3Igb3RoZXIgcG9ydHMsIHRoZSBtZXRo
b2QgaXMgbm90IGltcGxlbWVudGVkLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tOgorICAgICAgICAoLVtNb2NrR2VvbG9jYXRpb25Q
cm92aWRlciByZWdpc3RlcldlYlZpZXc6XSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5t
bToKKyAgICAgICAgKC1bVUlEZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0
aW9uUmVxdWVzdEZyb21PcmlnaW46ZnJhbWU6bGlzdGVuZXI6XSk6CisgICAgICAgICgtW1VJRGVs
ZWdhdGUgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uOl0pOgorICAgICAgICAoLVtVSURlbGVnYXRl
IGRlYWxsb2NdKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENv
bnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKToKKwogMjAxMC0wNi0wNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnpp
bW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRl
eDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjcsNyArMTcyNyw3
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXQKICAgICBub3RpZnlE
b25lKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sIGFsbG93KQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9pc0dlb2xvY2F0aW9u
UGVybWlzc2lvblNldCA9IHRydWU7CiAgICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBhbGxv
dzsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhWaWV3SGVpZ2h0OwogCiBw
cml2YXRlOgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxs
b3cpOworCiAgICAgYm9vbCBtX2R1bXBBc1BERjsKICAgICBib29sIG1fZHVtcEFzVGV4dDsKICAg
ICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAko
cmV2aXNpb24gNjA3NjEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDEyIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMu
CisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKwogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGZsYWcpCiB7
CiAgICAgLy8gRklYTUU6IGltcGxlbWVudApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNp
b24gNjA3NjEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQg
IkVkaXRpbmdEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIuaCIK
ICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCisjaW1wb3J0ICJVSURlbGVnYXRlLmgiCiAjaW1w
b3J0ICJXb3JrUXVldWUuaCIKICNpbXBvcnQgIldvcmtRdWV1ZUl0ZW0uaCIKICNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgpAQCAtMzEzLDYgKzMxNCwxMiBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgW1tNb2NrR2VvbG9jYXRpb25Qcm92aWRl
ciBzaGFyZWRdIHNldEVycm9yOmVycm9yXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgc2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKKyAgICBbW1ttYWluRnJhbWUgd2ViVmlld10g
VUlEZWxlZ2F0ZV0gc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uOmFsbG93XTsKK30KKwogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25EYXRh
YmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgPHJkYXI6Ly9wcm9ibGVt
LzY0ODAxMDg+CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xv
Y2F0aW9uUHJvdmlkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tCShyZXZpc2lvbiA2MDc2MSkKKysrIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQCAtICh2b2lkKXNldEVycm9yOihOU0Vycm9y
ICopZXJyb3IKIC0gKHZvaWQpcmVnaXN0ZXJXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldwogewog
ICAgIF9yZWdpc3RlcmVkVmlld3MuYWRkKHdlYlZpZXcpOworCisgICAgaWYgKCFfdGltZXIpCisg
ICAgICAgIF90aW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDow
IHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0aW1lckZpcmVkKSB1c2VySW5mbzowIHJl
cGVhdHM6Tk9dOwogfQogCiAtICh2b2lkKXVucmVnaXN0ZXJXZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5o
CShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURl
bGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxNiBAQAogICovCiAgCiAjaW1w
b3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYlVJRGVsZWdhdGVQcml2YXRlLmg+CiAKIEBpbnRlcmZhY2UgVUlE
ZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKIAogQHByaXZhdGUKICAgICBOU1JlY3QgbV9mcmFtZTsKKyAg
ICBpZDxXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyPiBtX3BlbmRpbmdHZW9sb2NhdGlvblBl
cm1pc3Npb25MaXN0ZW5lcjsKIH0KIAorLSAodm9pZClzZXRHZW9sb2NhdGlvblBlcm1pc3Npb246
KGJvb2wpYWxsb3c7CisKIEBlbmQKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiA2MDc2MSkKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2
IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViSFRNTFZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViU2VjdXJpdHlPcmlnaW5Q
cml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4K
ICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xNTcsMTMgKzE1NiwzMiBAQCAtICh2b2lk
KXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2V0U3RhCiAKIC0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdp
bjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lICopZnJhbWUgbGlz
dGVuZXI6KGlkPFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXI+KWxpc3RlbmVyCiB7Ci0gICAg
Ly8gRklYTUU6IElmIG1vY2sgcGVybWlzc2lvbiBpc24ndCBzZXQgeWV0LCB3ZSBzaG91bGQgc2Vu
ZCB0aGUgcmVzcG9uc2UgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKGdMYXlvdXRUZXN0Q29udHJv
bGxlci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmdlb2xvY2F0aW9uUGVybWlzc2lvbigpKQorICAgIGlmICghZ0xheW91dFRlc3RDb250cm9s
bGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKSB7CisgICAgICAgIGFzc2VydChtX3Bl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lciA9PSBuaWwpOworICAgICAgICBtX3Bl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lciA9IFtsaXN0ZW5lciByZXRhaW5dOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCiAgICAgICAgIFtsaXN0ZW5lciBhbGxvd107CiAgICAg
ZWxzZQogICAgICAgICBbbGlzdGVuZXIgZGVueV07CiB9CiAKKy0gKHZvaWQpc2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uOihib29sKWFsbG93Cit7CisgICAgaWYgKG1fcGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvbkxpc3RlbmVyID09IG5pbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGFs
bG93KQorICAgICAgICBbbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXIgYWxs
b3ddOworICAgIGVsc2UKKyAgICAgICAgW21fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxp
c3RlbmVyIGRlbnldOworCisgICAgW21fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3Rl
bmVyIHJlbGVhc2VdOworICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVy
ID0gbmlsOworfQorCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2hvdWxkSGFs
dFBsdWdpbjooRE9NTm9kZSAqKXBsdWdpbk5vZGUKIHsKICAgICByZXR1cm4gTk87CkBAIC0xNzQs
NiArMTkyLDkgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgW2RyYWdnaW5nSW5mbyByZWxlYXNlXTsK
ICAgICBkcmFnZ2luZ0luZm8gPSBuaWw7CiAKKyAgICBbbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJt
aXNzaW9uTGlzdGVuZXIgcmVsZWFzZV07CisgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNz
aW9uTGlzdGVuZXIgPSBuaWw7CisKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNjA3NjEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjYsNiArMzY2LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9s
b2MKICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MjY0LgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oYm9vbCBhbGxvdykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2Nh
dGlvbiBsYXlvdXQgdGVzdHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFs
bG93KTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5h
YmxlZChib29sIGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gU2VlIGFsc28gPHJkYXI6
Ly9wcm9ibGVtLzY0ODAxMDg+CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9M
YXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gNjA3NjEp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4MywxMiBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFibGVkKQogewog
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNzg1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAt
MDYtMDcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgR2VvbG9jYXRpb24gTGF5
b3V0VGVzdHMgZm9yIHRoZSBjYXNlIHdoZXJlIHBlcm1pc3Npb24gaXMgbm90IGdyYW50ZWQgb3Ig
ZGVuaWVkIGltbWVkaWF0ZWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDAwMgorCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXll
ZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVk
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanM6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9kZWxheWVk
LXBlcm1pc3Npb24tZGVuaWVkLmpzOiBBZGRlZC4KKwogMjAxMC0wNi0wNyAgUm9iZXJ0IEhvZ2Fu
ICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9k
ZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwIEBACitUZXN0cyB0aGF0IHdoZW4gYSBwb3NpdGlvbiBpcyBhdmFpbGFi
bGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB1bnRpbCBwZXJtaXNzaW9uIGlzIGFsbG93ZWQu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFN1Y2Nlc3MgY2FsbGJhY2sg
aW52b2tlZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlz
c2lvbi1hbGxvd2VkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxv
d2VkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNz
aW9uLWFsbG93ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRp
b24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVu
aWVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgdGhh
dCB3aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQg
dW50aWwgcGVybWlzc2lvbiBpcyBkZW5pZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIGVycm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BBU1MgZXJy
b3IubWVzc2FnZSBpcyAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lv
bi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9u
L3NjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1w
ZXJtaXNzaW9uLWFsbG93ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHdo
ZW4gYSBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB1bnRp
bCBwZXJtaXNzaW9uIGlzIGFsbG93ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOworCitmdW5jdGlvbiBhbGxvd1Blcm1pc3Np
b24oKSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKHRydWUpOworfQorCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVu
dFBvc2l0aW9uKGZ1bmN0aW9uKCkgeworICAgIGlmIChwZXJtaXNzaW9uU2V0KSB7CisgICAgICAg
IHRlc3RQYXNzZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCcpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0RmFpbGVkKCdTdWNjZXNz
IGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZva2VkIHVu
ZXhwZWN0ZWRseScpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cit3aW5kb3cuc2V0VGltZW91
dChhbGxvd1Blcm1pc3Npb24sIDEwMCk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
K3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0
LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNz
aW9uLWRlbmllZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorZGVzY3JpcHRpb24o
IlRlc3RzIHRoYXQgd2hlbiBhIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgbm8gY2FsbGJhY2tzIGFy
ZSBpbnZva2VkIHVudGlsIHBlcm1pc3Npb24gaXMgZGVuaWVkLiIpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKworZnVuY3Rpb24g
ZGVueVBlcm1pc3Npb24oKSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGZhbHNlKTsKK30KKwordmFyIGVycm9yOworbmF2aWdh
dG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbigpIHsKKyAgICB0ZXN0
RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbihlKSB7CisgICAgaWYgKHBlcm1pc3Npb25TZXQpIHsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuY29kZScsICdlcnJv
ci5QRVJNSVNTSU9OX0RFTklFRCcpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IubWVzc2FnZScs
ICciVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxiYWNrIGlu
dm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKK3dpbmRvdy5z
ZXRUaW1lb3V0KGRlbnlQZXJtaXNzaW9uLCAxMDApOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62699</attachid>
            <date>2010-07-27 09:48:03 -0700</date>
            <delta_ts>2010-08-03 09:28:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40002-20100727174800.patch</filename>
            <type>text/plain</type>
            <size>16956</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY0MTIzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDYtMDcgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZHMgR2VvbG9jYXRpb24gTGF5b3V0VGVzdHMgZm9yIHRoZSBjYXNlIHdo
ZXJlIHBlcm1pc3Npb24gaXMgbm90IGdyYW50ZWQgb3IgZGVuaWVkIGltbWVkaWF0ZWx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDAwMgorCisgICAg
ICAgIFRoZSBjb2RlIGluIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1p
c3Npb24oKSB3YXMgbW92ZWQgdG8KKyAgICAgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29t
bW9uKCkgdG8gYWxsb3cgZWFjaCBwb3J0IHRvIHByb3ZpZGUgaXRzIG93bgorICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBvZiBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oKS4KKworICAgICAgICBGb3Ig
dGhlIE1hYyBwb3J0LCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oKSBub3RpZmllcyB0aGUgVUlE
ZWxlZ2F0ZSBvZiB0aGUKKyAgICAgICAgbmV3IHBlcm1pc3Npb24sIHNvIGl0IGNhbiBjYWxsIGJh
Y2sgdG8gV2ViQ29yZSBpZiBwZXJtaXNzaW9uIHJlcXVlc3RzIGFyZSBpbgorICAgICAgICBwcm9n
cmVzcyBhbmQgYXJlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuIEEgbWlub3IgZml4IHRvIHRoZSBN
YWMKKyAgICAgICAgTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIgd2FzIGFsc28gcmVxdWlyZWQgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIG1vY2sgcHJvdmlkZXIKKyAgICAgICAgY2FsbHMgYmFjayB0byBX
ZWJDb3JlIHdoZW4gaXQgaXMgZmlyc3Qgc3RhcnRlZC4KKworICAgICAgICBGb3Igb3RoZXIgcG9y
dHMsIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oKSBpcyBu
b3QKKyAgICAgICAgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIubW06CisgICAgICAgICgtW01vY2tHZW9sb2NhdGlv
blByb3ZpZGVyIHJlZ2lzdGVyV2ViVmlldzpdKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvVUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRl
Lm1tOgorICAgICAgICAoLVtVSURlbGVnYXRlIHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpmcmFtZTpsaXN0ZW5lcjpdKToKKyAgICAgICAgKC1bVUlE
ZWxlZ2F0ZSBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb246XSk6CisgICAgICAgICgtW1VJRGVsZWdh
dGUgZGVhbGxvY10pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29u
dHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24pOgorCiAyMDEwLTA3LTI1ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhl
c2gua3Vsa2FybmlAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNjQxMjMpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MTksNyAr
MTkxOSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXQKICAgICBu
b3RpZnlEb25lKCk7CiB9CiAKLXZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbihib29sIGFsbG93KQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCA9IHRydWU7CiAgICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24g
PSBhbGxvdzsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjQxMjMpCisrKyBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiAr
Mjg2LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlcihjb25z
dCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVk
UGl4ZWxIYXNoKTsKIAorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJv
b2wgYWxsb3cpOworCiAgICAgYm9vbCBtX2R1bXBBc1BERjsKICAgICBib29sIG1fZHVtcEFzVGV4
dDsKICAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3Rr
LmNwcAkocmV2aXNpb24gNjQxMjMpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNiArNDU0
LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgogfQogCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBh
bGxvdykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQg
dGVzdHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKwog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGZs
YWcpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gNjQxMjMpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bXBvcnQgIkVkaXRpbmdEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiTW9ja0dlb2xvY2F0aW9uUHJvdmlk
ZXIuaCIKICNpbXBvcnQgIlBvbGljeURlbGVnYXRlLmgiCisjaW1wb3J0ICJVSURlbGVnYXRlLmgi
CiAjaW1wb3J0ICJXb3JrUXVldWUuaCIKICNpbXBvcnQgIldvcmtRdWV1ZUl0ZW0uaCIKICNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgpAQCAtMzM1LDYgKzMzNiwxMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgW1tNb2NrR2VvbG9jYXRpb25Q
cm92aWRlciBzaGFyZWRdIHNldEVycm9yOmVycm9yXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKKyAgICBbW1ttYWluRnJhbWUgd2Vi
Vmlld10gVUlEZWxlZ2F0ZV0gZGlkU2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uXTsKK30KKwogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGljb25E
YXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgPHJkYXI6Ly9wcm9i
bGVtLzY0ODAxMDg+CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dl
b2xvY2F0aW9uUHJvdmlkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL01vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tCShyZXZpc2lvbiA2NDEyMykKKysr
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5t
bQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQCAtICh2b2lkKXNldEVycm9yOihOU0Vy
cm9yICopZXJyb3IKIC0gKHZvaWQpcmVnaXN0ZXJXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldwog
ewogICAgIF9yZWdpc3RlcmVkVmlld3MuYWRkKHdlYlZpZXcpOworCisgICAgaWYgKCFfdGltZXIp
CisgICAgICAgIF90aW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZh
bDowIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih0aW1lckZpcmVkKSB1c2VySW5mbzow
IHJlcGVhdHM6Tk9dOwogfQogCiAtICh2b2lkKXVucmVnaXN0ZXJXZWJWaWV3OihXZWJWaWV3ICop
d2ViVmlldwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0
ZS5oCShyZXZpc2lvbiA2NDEyMykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxOCBAQAogICovCiAgCiAj
aW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dlYlVJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYv
SGFzaFNldC5oPgogCiBAaW50ZXJmYWNlIFVJRGVsZWdhdGUgOiBOU09iamVjdCB7CiAKIEBwcml2
YXRlCiAgICAgTlNSZWN0IG1fZnJhbWU7CisgICAgSGFzaFNldDxpZDxXZWJHZW9sb2NhdGlvblBv
bGljeUxpc3RlbmVyPiA+IG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVyczsK
KyAgICBOU1RpbWVyICptX3RpbWVyOwogfQogCistICh2b2lkKWRpZFNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbjsKKwogQGVuZApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJ
RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDY0MTIzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MSwxMyArMTcxLDM4
IEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzZXRTdGEKIAogLSAodm9pZCl3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVl
c3RGcm9tT3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdpbiBmcmFtZTooV2ViRnJhbWUg
KilmcmFtZSBsaXN0ZW5lcjooaWQ8V2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lcj4pbGlzdGVu
ZXIKIHsKLSAgICAvLyBGSVhNRTogSWYgbW9jayBwZXJtaXNzaW9uIGlzbid0IHNldCB5ZXQsIHdl
IHNob3VsZCBzZW5kIHRoZSByZXNwb25zZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgaWYgKCFnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpIHsKKyAgICAgICAg
bV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzLmFkZChbbGlzdGVuZXIgcmV0
YWluXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ0xheW91dFRlc3RDb250
cm9sbGVyLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKICAgICAgICAgW2xpc3RlbmVyIGFsbG93
XTsKICAgICBlbHNlCiAgICAgICAgIFtsaXN0ZW5lciBkZW55XTsKIH0KIAorLSAodm9pZClkaWRT
ZXRHZW9sb2NhdGlvblBlcm1pc3Npb24KK3sKKyAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9s
bGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKTsKKyAgICBpZiAoIW1fcGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycy5pc0VtcHR5KCkgJiYgIW1fdGltZXIpCisgICAg
ICAgIG1fdGltZXIgPSBbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6MCB0
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IodGltZXJGaXJlZCkgdXNlckluZm86MCByZXBl
YXRzOk5PXTsKK30KKworLSAodm9pZCl0aW1lckZpcmVkCit7CisgICAgQVNTRVJUKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSk7CisgICAgbV90aW1l
ciA9IDA7CisgICAgZm9yIChIYXNoU2V0PGlkPFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXI+
ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5l
cnMuYmVnaW4oKTsgaXRlciAhPSBtX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5l
cnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5n
ZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKKyAgICAgICAgICAgIFsqaXRlciBhbGxvd107CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFsqaXRlciBkZW55XTsKKyAgICAgICAgWyppdGVyIHJlbGVh
c2VdOworICAgIH0KKyAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMu
Y2xlYXIoKTsKK30KKwogLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHNob3VsZEhh
bHRQbHVnaW46KERPTU5vZGUgKilwbHVnaW5Ob2RlCiB7CiAgICAgcmV0dXJuIE5POwpAQCAtMTk0
LDYgKzIxOSw5IEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIFtkcmFnZ2luZ0luZm8gcmVsZWFzZV07
CiAgICAgZHJhZ2dpbmdJbmZvID0gbmlsOwogCisgICAgZm9yIChIYXNoU2V0PGlkPFdlYkdlb2xv
Y2F0aW9uUG9saWN5TGlzdGVuZXI+ID46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BlbmRpbmdHZW9sb2Nh
dGlvblBlcm1pc3Npb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXRlciAhPSBtX3BlbmRpbmdHZW9sb2Nh
dGlvblBlcm1pc3Npb25MaXN0ZW5lcnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgWyppdGVyIHJl
bGVhc2VdOworCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHAJKHJldmlzaW9uIDY0MTIzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4
NywxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wg
YWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0
IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9CisK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBp
Y29uRGF0YWJhc2VFbmFibGVkKQogewogICAgIC8vIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS82
NDgwMTA4PgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENv
bnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDY0MTIzKQorKysgV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Myw2ICsyODMsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0dlb2xvYwogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgyNjQuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24oYWxsb3cpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29u
RGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhN
RTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDEyMykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA2LTA3ICBTdGV2
ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIEdlb2xvY2F0aW9uIExheW91dFRlc3RzIGZv
ciB0aGUgY2FzZSB3aGVyZSBwZXJtaXNzaW9uIGlzIG5vdCBncmFudGVkIG9yIGRlbmllZCBpbW1l
ZGlhdGVseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDAwMDIKKworICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lv
bi1hbGxvd2VkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9j
YXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlz
c2lvbi1kZW5pZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24v
c2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9u
LWRlbmllZC5qczogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IEFkZGVk
IG5ldyB0ZXN0cyB0byBHVEsgc2tpcHBlZCBsaXN0cworCiAyMDEwLTA3LTI3ICBBbnRvbiBNdWhp
biAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1p
c3Npb24tYWxsb3dlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXll
ZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitUZXN0cyB0aGF0IHdoZW4gYSBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIG5vIGNhbGxi
YWNrcyBhcmUgaW52b2tlZCB1bnRpbCBwZXJtaXNzaW9uIGlzIGFsbG93ZWQuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFN1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2Vk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1w
ZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgdGhhdCB3aGVuIGEgcG9z
aXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQgdW50aWwgcGVybWlz
c2lvbiBpcyBkZW5pZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVy
cm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BBU1MgZXJyb3IubWVzc2FnZSBp
cyAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5
ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0
cy9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFs
bG93ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHdoZW4gYSBwb3NpdGlv
biBpcyBhdmFpbGFibGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB1bnRpbCBwZXJtaXNzaW9u
IGlzIGFsbG93ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKDUx
LjQ3OCwgLTAuMTY2LCAxMDApOworCitmdW5jdGlvbiBhbGxvd1Blcm1pc3Npb24oKSB7CisgICAg
cGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KHRydWUpOworfQorCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1
bmN0aW9uKCkgeworICAgIGlmIChwZXJtaXNzaW9uU2V0KSB7CisgICAgICAgIHRlc3RQYXNzZWQo
J1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCcpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGlu
dm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScp
OworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cit3aW5kb3cuc2V0VGltZW91dChhbGxvd1Blcm1p
c3Npb24sIDEwMCk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dpbmRvdy5zdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5
ZWQtcGVybWlzc2lvbi1kZW5pZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQg
d2hlbiBhIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2VkIHVu
dGlsIHBlcm1pc3Npb24gaXMgZGVuaWVkLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKworZnVuY3Rpb24gZGVueVBlcm1pc3Np
b24oKSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKGZhbHNlKTsKK30KKwordmFyIGVycm9yOworbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbigpIHsKKyAgICB0ZXN0RmFpbGVkKCdTdWNj
ZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9LCBmdW5jdGlvbihlKSB7CisgICAgaWYgKHBlcm1pc3Npb25TZXQpIHsKKyAgICAgICAgZXJy
b3IgPSBlOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuY29kZScsICdlcnJvci5QRVJNSVNTSU9O
X0RFTklFRCcpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IubWVzc2FnZScsICciVXNlciBkZW5p
ZWQgR2VvbG9jYXRpb24iJyk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxiYWNrIGludm9rZWQgdW5leHBl
Y3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKK3dpbmRvdy5zZXRUaW1lb3V0KGRl
bnlQZXJtaXNzaW9uLCAxMDApOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit3aW5k
b3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCShyZXZpc2lvbiA2NDEyMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDk3LDYgKzEwOTcsOCBAQCBmYXN0L2RvbS9EZXZpY2VPcmll
bnRhdGlvbi9jcmVhdGUtZXZlbnQuCiBmYXN0L2RvbS9EZXZpY2VPcmllbnRhdGlvbi9vcHRpb25h
bC1ldmVudC1wcm9wZXJ0aWVzLmh0bWwKIGZhc3QvZG9tL0RldmljZU9yaWVudGF0aW9uL3dpbmRv
dy1wcm9wZXJ0eS5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay1leGNlcHRpb24u
aHRtbAorZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRt
bAorZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCiBm
YXN0L2RvbS9HZW9sb2NhdGlvbi9lcnJvci5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tdWx0
aXBsZS1yZXF1ZXN0cy5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9wZXJtaXNzaW9uLWRlbmll
ZC1hbHJlYWR5LWNsZWFyLXdhdGNoLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63340</attachid>
            <date>2010-08-03 09:28:15 -0700</date>
            <delta_ts>2010-08-03 10:56:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40002-20100803172812.patch</filename>
            <type>text/plain</type>
            <size>16917</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDgtMDIgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3Vy
eWFrb3YuCisKKyAgICAgICAgQWRkcyBHZW9sb2NhdGlvbiBMYXlvdXRUZXN0cyBmb3IgdGhlIGNh
c2Ugd2hlcmUgcGVybWlzc2lvbiBpcyBub3QgZ3JhbnRlZCBvciBkZW5pZWQgaW1tZWRpYXRlbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAyCisK
KyAgICAgICAgVGhlIGNvZGUgaW4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbigpIHdhcyBtb3ZlZCB0bworICAgICAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24oKSB0byBhbGxvdyBlYWNoIHBvcnQgdG8gcHJvdmlkZSBpdHMgb3duCisgICAgICAg
IGltcGxlbWVudGF0aW9uIG9mIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigpLgorCisgICAgICAg
IEZvciB0aGUgTWFjIHBvcnQsIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigpIG5vdGlmaWVzIHRo
ZSBVSURlbGVnYXRlIG9mIHRoZQorICAgICAgICBuZXcgcGVybWlzc2lvbiwgc28gaXQgY2FuIGNh
bGwgYmFjayB0byBXZWJDb3JlIGlmIHBlcm1pc3Npb24gcmVxdWVzdHMgYXJlIGluCisgICAgICAg
IHByb2dyZXNzIGFuZCBhcmUgd2FpdGluZyBmb3IgYSByZXNwb25zZS4gQSBtaW5vciBmaXggdG8g
dGhlIE1hYworICAgICAgICBNb2NrR2VvbG9jYXRpb25Qcm92aWRlciB3YXMgYWxzbyByZXF1aXJl
ZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbW9jayBwcm92aWRlcgorICAgICAgICBjYWxscyBiYWNr
IHRvIFdlYkNvcmUgd2hlbiBpdCBpcyBmaXJzdCBzdGFydGVkLgorCisgICAgICAgIEZvciBvdGhl
ciBwb3J0cywgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigp
IGlzIG5vdAorICAgICAgICBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbToKKyAgICAgICAgKC1bTW9ja0dlb2xv
Y2F0aW9uUHJvdmlkZXIgcmVnaXN0ZXJXZWJWaWV3Ol0pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9VSURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVs
ZWdhdGUubW06CisgICAgICAgICgtW1VJRGVsZWdhdGUgd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOmZyYW1lOmxpc3RlbmVyOl0pOgorICAgICAgICAo
LVtVSURlbGVnYXRlIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbjpdKToKKyAgICAgICAgKC1bVUlE
ZWxlZ2F0ZSBkZWFsbG9jXSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRl
c3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisKIDIwMTAtMDgtMDIgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQx
LDcgKzE5NDEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0CiAg
ICAgbm90aWZ5RG9uZSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQogewogICAgIG1faXNH
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwogICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNz
aW9uID0gYWxsb3c7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3
LDYgKzI4Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIo
Y29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBl
Y3RlZFBpeGVsSGFzaCk7CiAKKyAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1v
bihib29sIGFsbG93KTsKKwogICAgIGJvb2wgbV9kdW1wQXNQREY7CiAgICAgYm9vbCBtX2R1bXBB
c1RleHQ7CiAgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkluZGV4OiBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDYg
KzQ2MiwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0K
IAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9
CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9v
bCBmbGFnKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0JKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVUlEZWxlZ2F0
ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVtLmgiCiAj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTM0Miw2ICszNDMsMTIgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwogICAgIFtbTW9ja0dlb2xvY2F0
aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAg
IHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgW1tbbWFpbkZyYW1l
IHdlYlZpZXddIFVJRGVsZWdhdGVdIGRpZFNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb25dOwor
fQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRh
cjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIubW0JKHJldmlzaW9uIDY0
NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIC0gKHZvaWQpc2V0RXJy
b3I6KE5TRXJyb3IgKillcnJvcgogLSAodm9pZClyZWdpc3RlcldlYlZpZXc6KFdlYlZpZXcgKil3
ZWJWaWV3CiB7CiAgICAgX3JlZ2lzdGVyZWRWaWV3cy5hZGQod2ViVmlldyk7CisKKyAgICBpZiAo
IV90aW1lcikKKyAgICAgICAgX3RpbWVyID0gW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGlt
ZUludGVydmFsOjAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRpbWVyRmlyZWQpIHVz
ZXJJbmZvOjAgcmVwZWF0czpOT107CiB9CiAKIC0gKHZvaWQpdW5yZWdpc3RlcldlYlZpZXc6KFdl
YlZpZXcgKil3ZWJWaWV3CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlE
ZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmgJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDE5IEBACiAg
Ki8KICAKICNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TU2V0
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViVUlEZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CiAKIEBpbnRl
cmZhY2UgVUlEZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKIAogQHByaXZhdGUKICAgICBOU1JlY3QgbV9m
cmFtZTsKKyAgICBOU011dGFibGVTZXQgKm1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxp
c3RlbmVyczsKKyAgICBOU1RpbWVyICptX3RpbWVyOwogfQogCistICh2b2lkKWRpZFNldE1vY2tH
ZW9sb2NhdGlvblBlcm1pc3Npb247CisKIEBlbmQKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiA2NDU0NykKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsMTMgKzE3MSw0MyBAQCAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2V0U3Rh
CiAKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yR2Vv
bG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4gZnJh
bWU6KFdlYkZyYW1lICopZnJhbWUgbGlzdGVuZXI6KGlkPFdlYkdlb2xvY2F0aW9uUG9saWN5TGlz
dGVuZXI+KWxpc3RlbmVyCiB7Ci0gICAgLy8gRklYTUU6IElmIG1vY2sgcGVybWlzc2lvbiBpc24n
dCBzZXQgeWV0LCB3ZSBzaG91bGQgc2VuZCB0aGUgcmVzcG9uc2UgYXN5bmNocm9ub3VzbHkuCi0g
ICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQo
KSAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlb2xvY2F0aW9uUGVybWlzc2lvbigpKQorICAg
IGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgp
KSB7CisgICAgICAgIGlmICghbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJz
KQorICAgICAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzID0g
W1tOU011dGFibGVTZXQgc2V0XSByZXRhaW5dOworICAgICAgICBbbV9wZW5kaW5nR2VvbG9jYXRp
b25QZXJtaXNzaW9uTGlzdGVuZXJzIGFkZE9iamVjdDpsaXN0ZW5lcl07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW9sb2NhdGlvblBl
cm1pc3Npb24oKSkKICAgICAgICAgW2xpc3RlbmVyIGFsbG93XTsKICAgICBlbHNlCiAgICAgICAg
IFtsaXN0ZW5lciBkZW55XTsKIH0KIAorLSAodm9pZClkaWRTZXRNb2NrR2VvbG9jYXRpb25QZXJt
aXNzaW9uCit7CisgICAgQVNTRVJUKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+aXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQoKSk7CisgICAgaWYgKG1fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
bkxpc3RlbmVycyAhPSBuaWwgJiYgIW1fdGltZXIpCisgICAgICAgIG1fdGltZXIgPSBbTlNUaW1l
ciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6MCB0YXJnZXQ6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3IodGltZXJGaXJlZCkgdXNlckluZm86MCByZXBlYXRzOk5PXTsKK30KKworLSAodm9p
ZCl0aW1lckZpcmVkCit7CisgICAgQVNTRVJUKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+aXNHZW9s
b2NhdGlvblBlcm1pc3Npb25TZXQoKSk7CisgICAgbV90aW1lciA9IDA7CisgICAgTlNFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0gW21fcGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvbkxpc3RlbmVy
cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBpZDxXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVy
PiBsaXN0ZW5lcjsKKyAgICB3aGlsZSAoKGxpc3RlbmVyID0gW2VudW1lcmF0b3IgbmV4dE9iamVj
dF0pKSB7CisgICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlb2xvY2F0aW9uUGVy
bWlzc2lvbigpKQorICAgICAgICAgICAgW2xpc3RlbmVyIGFsbG93XTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgW2xpc3RlbmVyIGRlbnldOworICAgIH0KKyAgICBbbV9wZW5kaW5nR2VvbG9j
YXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzIHJlbW92ZUFsbE9iamVjdHNdOworICAgIFttX3BlbmRp
bmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgcmVsZWFzZV07CisgICAgbV9wZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzID0gbmlsOworfQorCiAtIChCT09MKXdlYlZp
ZXc6KFdlYlZpZXcgKilzZW5kZXIgc2hvdWxkSGFsdFBsdWdpbjooRE9NTm9kZSAqKXBsdWdpbk5v
ZGUKIHsKICAgICByZXR1cm4gTk87CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9u
IDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5MywxMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0KIAordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9CisKIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBpY29uRGF0YWJhc2VFbmFi
bGVkKQogewogICAgIC8vIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS82NDgwMTA4PgpJbmRleDog
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENv
bnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
OSw2ICsyODksMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwog
ICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQu
CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lv
bihib29sIGFsbG93KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9u
IGxheW91dCB0ZXN0cy4KKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cp
OworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVk
KGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2NDU0NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA4LTAyICBTdGV2ZSBCbG9jayAgPHN0ZXZl
YmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgorCisgICAgICAgIEFkZHMgR2VvbG9jYXRpb24gTGF5b3V0VGVzdHMgZm9yIHRoZSBjYXNl
IHdoZXJlIHBlcm1pc3Npb24gaXMgbm90IGdyYW50ZWQgb3IgZGVuaWVkIGltbWVkaWF0ZWx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDAwMgorCisg
ICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxh
eWVkLXBlcm1pc3Npb24tYWxsb3dlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmll
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVz
dHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDogQWRkZWQgbmV3IHRlc3Rz
IHRvIEdUSyBza2lwcGVkIGxpc3RzCisKIDIwMTAtMDgtMDMgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBDaHJvbWl1bSB0ZXN0
IGV4cGVjdGF0aW9ucyB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2Nh
dGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFs
bG93ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
R2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitUZXN0cyB0aGF0IHdoZW4gYSBwb3NpdGlvbiBpcyBh
dmFpbGFibGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB1bnRpbCBwZXJtaXNzaW9uIGlzIGFs
bG93ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFN1Y2Nlc3MgY2Fs
bGJhY2sgaW52b2tlZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQt
cGVybWlzc2lvbi1hbGxvd2VkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lv
bi1hbGxvd2VkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGVsYXllZC1w
ZXJtaXNzaW9uLWFsbG93ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRl
bmllZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Np
b24tZGVuaWVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVz
dHMgdGhhdCB3aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGlu
dm9rZWQgdW50aWwgcGVybWlzc2lvbiBpcyBkZW5pZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGVycm9yLmNvZGUgaXMgZXJyb3IuUEVSTUlTU0lPTl9ERU5JRUQKK1BB
U1MgZXJyb3IubWVzc2FnZSBpcyAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVy
bWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3NjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVs
YXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93
ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0
aGF0IHdoZW4gYSBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIG5vIGNhbGxiYWNrcyBhcmUgaW52b2tl
ZCB1bnRpbCBwZXJtaXNzaW9uIGlzIGFsbG93ZWQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOworCitmdW5jdGlvbiBhbGxvd1Bl
cm1pc3Npb24oKSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKHRydWUpOworfQorCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKCkgeworICAgIGlmIChwZXJtaXNzaW9uU2V0KSB7Cisg
ICAgICAgIHRlc3RQYXNzZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCcpOworICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0RmFpbGVkKCdT
dWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0
KCk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZv
a2VkIHVuZXhwZWN0ZWRseScpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cit3aW5kb3cuc2V0
VGltZW91dChhbGxvd1Blcm1pc3Npb24sIDEwMCk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1k
ZW5pZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
c2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1w
ZXJtaXNzaW9uLWRlbmllZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorZGVzY3Jp
cHRpb24oIlRlc3RzIHRoYXQgd2hlbiBhIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgbm8gY2FsbGJh
Y2tzIGFyZSBpbnZva2VkIHVudGlsIHBlcm1pc3Npb24gaXMgZGVuaWVkLiIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
ci5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKworZnVu
Y3Rpb24gZGVueVBlcm1pc3Npb24oKSB7CisgICAgcGVybWlzc2lvblNldCA9IHRydWU7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGZhbHNlKTsKK30KKwordmFyIGVycm9yOwor
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbigpIHsKKyAg
ICB0ZXN0RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7Cisg
ICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbihlKSB7CisgICAgaWYgKHBlcm1pc3Npb25T
ZXQpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgICAgICBzaG91bGRCZSgnZXJyb3IuY29kZScs
ICdlcnJvci5QRVJNSVNTSU9OX0RFTklFRCcpOworICAgICAgICBzaG91bGRCZSgnZXJyb3IubWVz
c2FnZScsICciVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iJyk7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxi
YWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKK3dp
bmRvdy5zZXRUaW1lb3V0KGRlbnlQZXJtaXNzaW9uLCAxMDApOworCit3aW5kb3cuanNUZXN0SXNB
c3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA2NDU0NykKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3LDYgKzEwODcsOCBAQCBm
YXN0L2RvbS9EZXZpY2VPcmllbnRhdGlvbi9jcmVhdGUtZXZlbnQuCiBmYXN0L2RvbS9EZXZpY2VP
cmllbnRhdGlvbi9vcHRpb25hbC1ldmVudC1wcm9wZXJ0aWVzLmh0bWwKIGZhc3QvZG9tL0Rldmlj
ZU9yaWVudGF0aW9uL3dpbmRvdy1wcm9wZXJ0eS5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9j
YWxsYmFjay1leGNlcHRpb24uaHRtbAorZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJt
aXNzaW9uLWFsbG93ZWQuaHRtbAorZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNz
aW9uLWRlbmllZC5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9lcnJvci5odG1sCiBmYXN0L2Rv
bS9HZW9sb2NhdGlvbi9tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCiBmYXN0L2RvbS9HZW9sb2NhdGlv
bi9wZXJtaXNzaW9uLWRlbmllZC1hbHJlYWR5LWNsZWFyLXdhdGNoLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63353</attachid>
            <date>2010-08-03 10:56:31 -0700</date>
            <delta_ts>2010-08-04 04:10:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40002-20100803185629.patch</filename>
            <type>text/plain</type>
            <size>16969</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDgtMDIgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3Vy
eWFrb3YuCisKKyAgICAgICAgQWRkcyBHZW9sb2NhdGlvbiBMYXlvdXRUZXN0cyBmb3IgdGhlIGNh
c2Ugd2hlcmUgcGVybWlzc2lvbiBpcyBub3QgZ3JhbnRlZCBvciBkZW5pZWQgaW1tZWRpYXRlbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMDAyCisK
KyAgICAgICAgVGhlIGNvZGUgaW4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbigpIHdhcyBtb3ZlZCB0bworICAgICAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24oKSB0byBhbGxvdyBlYWNoIHBvcnQgdG8gcHJvdmlkZSBpdHMgb3duCisgICAgICAg
IGltcGxlbWVudGF0aW9uIG9mIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigpLgorCisgICAgICAg
IEZvciB0aGUgTWFjIHBvcnQsIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigpIG5vdGlmaWVzIHRo
ZSBVSURlbGVnYXRlIG9mIHRoZQorICAgICAgICBuZXcgcGVybWlzc2lvbiwgc28gaXQgY2FuIGNh
bGwgYmFjayB0byBXZWJDb3JlIGlmIHBlcm1pc3Npb24gcmVxdWVzdHMgYXJlIGluCisgICAgICAg
IHByb2dyZXNzIGFuZCBhcmUgd2FpdGluZyBmb3IgYSByZXNwb25zZS4gQSBtaW5vciBmaXggdG8g
dGhlIE1hYworICAgICAgICBNb2NrR2VvbG9jYXRpb25Qcm92aWRlciB3YXMgYWxzbyByZXF1aXJl
ZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbW9jayBwcm92aWRlcgorICAgICAgICBjYWxscyBiYWNr
IHRvIFdlYkNvcmUgd2hlbiBpdCBpcyBmaXJzdCBzdGFydGVkLgorCisgICAgICAgIEZvciBvdGhl
ciBwb3J0cywgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbigp
IGlzIG5vdAorICAgICAgICBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbToKKyAgICAgICAgKC1bTW9ja0dlb2xv
Y2F0aW9uUHJvdmlkZXIgcmVnaXN0ZXJXZWJWaWV3Ol0pOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9VSURlbGVnYXRlLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVs
ZWdhdGUubW06CisgICAgICAgICgtW1VJRGVsZWdhdGUgd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOmZyYW1lOmxpc3RlbmVyOl0pOgorICAgICAgICAo
LVtVSURlbGVnYXRlIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbjpdKToKKyAgICAgICAgKC1bVUlE
ZWxlZ2F0ZSBkZWFsbG9jXSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRl
c3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisKIDIwMTAtMDgtMDIgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQx
LDcgKzE5NDEsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0CiAg
ICAgbm90aWZ5RG9uZSgpOwogfQogCi12b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KQogewogICAgIG1faXNH
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwogICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNz
aW9uID0gYWxsb3c7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3
LDYgKzI4Nyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIo
Y29uc3Qgc3RkOjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBl
Y3RlZFBpeGVsSGFzaCk7CiAKKyAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1v
bihib29sIGFsbG93KTsKKwogICAgIGJvb2wgbV9kdW1wQXNQREY7CiAgICAgYm9vbCBtX2R1bXBB
c1RleHQ7CiAgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkluZGV4OiBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDYg
KzQ2MiwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KIH0K
IAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJv
b2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5
b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9
CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9v
bCBmbGFnKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0JKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW1wb3J0ICJFZGl0aW5nRGVsZWdhdGUuaCIKICNpbXBvcnQgIk1vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLmgiCiAjaW1wb3J0ICJQb2xpY3lEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVUlEZWxlZ2F0
ZS5oIgogI2ltcG9ydCAiV29ya1F1ZXVlLmgiCiAjaW1wb3J0ICJXb3JrUXVldWVJdGVtLmgiCiAj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTM0Miw2ICszNDMsMTIgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwogICAgIFtbTW9ja0dlb2xvY2F0
aW9uUHJvdmlkZXIgc2hhcmVkXSBzZXRFcnJvcjplcnJvcl07CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAg
IHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgW1tbbWFpbkZyYW1l
IHdlYlZpZXddIFVJRGVsZWdhdGVdIGRpZFNldE1vY2tHZW9sb2NhdGlvblBlcm1pc3Npb25dOwor
fQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCA8cmRh
cjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9Nb2NrR2VvbG9jYXRpb25Qcm92aWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIubW0JKHJldmlzaW9uIDY0
NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL01vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIC0gKHZvaWQpc2V0RXJy
b3I6KE5TRXJyb3IgKillcnJvcgogLSAodm9pZClyZWdpc3RlcldlYlZpZXc6KFdlYlZpZXcgKil3
ZWJWaWV3CiB7CiAgICAgX3JlZ2lzdGVyZWRWaWV3cy5hZGQod2ViVmlldyk7CisKKyAgICBpZiAo
IV90aW1lcikKKyAgICAgICAgX3RpbWVyID0gW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGlt
ZUludGVydmFsOjAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHRpbWVyRmlyZWQpIHVz
ZXJJbmZvOjAgcmVwZWF0czpOT107CiB9CiAKIC0gKHZvaWQpdW5yZWdpc3RlcldlYlZpZXc6KFdl
YlZpZXcgKil3ZWJWaWV3CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlE
ZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLmgJKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTAgQEAgQGlu
dGVyZmFjZSBVSURlbGVnYXRlIDogTlNPYmplY3QgewogCiBAcHJpdmF0ZQogICAgIE5TUmVjdCBt
X2ZyYW1lOworICAgIE5TTXV0YWJsZVNldCAqbV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9u
TGlzdGVuZXJzOworICAgIE5TVGltZXIgKm1fdGltZXI7CiB9CiAKKy0gKHZvaWQpZGlkU2V0TW9j
a0dlb2xvY2F0aW9uUGVybWlzc2lvbjsKKwogQGVuZApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDY0NTQ3KQorKysgV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE3MSwxMyArMTcxLDQzIEBAIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzZXRT
dGEKIAogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JH
ZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdpbiBm
cmFtZTooV2ViRnJhbWUgKilmcmFtZSBsaXN0ZW5lcjooaWQ8V2ViR2VvbG9jYXRpb25Qb2xpY3lM
aXN0ZW5lcj4pbGlzdGVuZXIKIHsKLSAgICAvLyBGSVhNRTogSWYgbW9jayBwZXJtaXNzaW9uIGlz
bid0IHNldCB5ZXQsIHdlIHNob3VsZCBzZW5kIHRoZSByZXNwb25zZSBhc3luY2hyb25vdXNseS4K
LSAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNl
dCgpICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisg
ICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0
KCkpIHsKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5l
cnMpCisgICAgICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMg
PSBbW05TTXV0YWJsZVNldCBzZXRdIHJldGFpbl07CisgICAgICAgIFttX3BlbmRpbmdHZW9sb2Nh
dGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgYWRkT2JqZWN0Omxpc3RlbmVyXTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlb2xvY2F0aW9u
UGVybWlzc2lvbigpKQogICAgICAgICBbbGlzdGVuZXIgYWxsb3ddOwogICAgIGVsc2UKICAgICAg
ICAgW2xpc3RlbmVyIGRlbnldOwogfQogCistICh2b2lkKWRpZFNldE1vY2tHZW9sb2NhdGlvblBl
cm1pc3Npb24KK3sKKyAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5pc0dlb2xvY2F0
aW9uUGVybWlzc2lvblNldCgpKTsKKyAgICBpZiAobV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNz
aW9uTGlzdGVuZXJzICYmICFtX3RpbWVyKQorICAgICAgICBtX3RpbWVyID0gW05TVGltZXIgc2No
ZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOjAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKHRpbWVyRmlyZWQpIHVzZXJJbmZvOjAgcmVwZWF0czpOT107Cit9CisKKy0gKHZvaWQpdGlt
ZXJGaXJlZAoreworICAgIEFTU0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmlzR2VvbG9jYXRp
b25QZXJtaXNzaW9uU2V0KCkpOworICAgIG1fdGltZXIgPSAwOworICAgIE5TRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IFttX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgb2Jq
ZWN0RW51bWVyYXRvcl07CisgICAgaWQ8V2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lcj4gbGlz
dGVuZXI7CisgICAgd2hpbGUgKChsaXN0ZW5lciA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSkg
eworICAgICAgICBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW9sb2NhdGlvblBlcm1pc3Np
b24oKSkKKyAgICAgICAgICAgIFtsaXN0ZW5lciBhbGxvd107CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFtsaXN0ZW5lciBkZW55XTsKKyAgICB9CisgICAgW21fcGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvbkxpc3RlbmVycyByZW1vdmVBbGxPYmplY3RzXTsKKyAgICBbbV9wZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzIHJlbGVhc2VdOworICAgIG1fcGVuZGluZ0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkxpc3RlbmVycyA9IG5pbDsKK30KKwogLSAoQk9PTCl3ZWJWaWV3OihX
ZWJWaWV3ICopc2VuZGVyIHNob3VsZEhhbHRQbHVnaW46KERPTU5vZGUgKilwbHVnaW5Ob2RlCiB7
CiAgICAgcmV0dXJuIE5POwpAQCAtMTkzLDYgKzIyMyw4IEBAIC0gKHZvaWQpZGVhbGxvYwogewog
ICAgIFtkcmFnZ2luZ0luZm8gcmVsZWFzZV07CiAgICAgZHJhZ2dpbmdJbmZvID0gbmlsOworICAg
IFttX3BlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25MaXN0ZW5lcnMgcmVsZWFzZV07CisgICAg
bV9wZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uTGlzdGVuZXJzID0gbmlsOwogCiAgICAgW3N1
cGVyIGRlYWxsb2NdOwogfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xh
eW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiA2NDU0
NykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxl
cldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsMTIgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvYwogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICBzZXRHZW9s
b2NhdGlvblBlcm1pc3Npb25Db21tb24oYWxsb3cpOworfQorCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgaWNvbkRhdGFiYXNlRW5hYmxlZCkK
IHsKICAgICAvLyBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vNjQ4MDEwOD4KSW5kZXg6IFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9s
bGVyV3guY3BwCShyZXZpc2lvbiA2NDU0NykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiAr
Mjg5LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2MKICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgogfQog
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9v
bCBhbGxvdykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlv
dXQgdGVzdHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30K
Kwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZChib29s
IGljb25EYXRhYmFzZUVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjQ1NDcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOC0wMiAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2Nr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4K
KworICAgICAgICBBZGRzIEdlb2xvY2F0aW9uIExheW91dFRlc3RzIGZvciB0aGUgY2FzZSB3aGVy
ZSBwZXJtaXNzaW9uIGlzIG5vdCBncmFudGVkIG9yIGRlbmllZCBpbW1lZGlhdGVseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAwMDIKKworICAgICAg
ICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1w
ZXJtaXNzaW9uLWFsbG93ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9j
YXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2Rl
bGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5qczogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IEFkZGVkIG5ldyB0ZXN0cyB0byBH
VEsgc2tpcHBlZCBsaXN0cworCiAyMDEwLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gQ2hyb21pdW0gdGVzdCBleHBl
Y3RhdGlvbnMgdXBkYXRlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2Vk
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgdGhhdCB3aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxh
YmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQgdW50aWwgcGVybWlzc2lvbiBpcyBhbGxvd2Vk
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBTdWNjZXNzIGNhbGxiYWNr
IGludm9rZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1p
c3Npb24tYWxsb3dlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxs
b3dlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlz
c2lvbi1hbGxvd2VkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0
aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRl
bmllZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIHRo
YXQgd2hlbiBhIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgbm8gY2FsbGJhY2tzIGFyZSBpbnZva2Vk
IHVudGlsIHBlcm1pc3Npb24gaXMgZGVuaWVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBlcnJvci5jb2RlIGlzIGVycm9yLlBFUk1JU1NJT05fREVOSUVECitQQVNTIGVy
cm9yLm1lc3NhZ2UgaXMgIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5pZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Np
b24tZGVuaWVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9s
b2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9zY3JpcHQtdGVzdHMvZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQt
cGVybWlzc2lvbi1hbGxvd2VkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB3
aGVuIGEgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCBubyBjYWxsYmFja3MgYXJlIGludm9rZWQgdW50
aWwgcGVybWlzc2lvbiBpcyBhbGxvd2VkLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKworZnVuY3Rpb24gYWxsb3dQZXJtaXNz
aW9uKCkgeworICAgIHBlcm1pc3Npb25TZXQgPSB0cnVlOworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbih0cnVlKTsKK30KKworbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihmdW5jdGlvbigpIHsKKyAgICBpZiAocGVybWlzc2lvblNldCkgeworICAgICAg
ICB0ZXN0UGFzc2VkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQnKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzdEZhaWxlZCgnU3VjY2Vz
cyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgIGZpbmlzaEpTVGVzdCgpOwor
fSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdEZhaWxlZCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1
bmV4cGVjdGVkbHknKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOword2luZG93LnNldFRpbWVv
dXQoYWxsb3dQZXJtaXNzaW9uLCAxMDApOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVk
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Njcmlw
dC10ZXN0cy9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtcGVybWlz
c2lvbi1kZW5pZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKK2Rlc2NyaXB0aW9u
KCJUZXN0cyB0aGF0IHdoZW4gYSBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIG5vIGNhbGxiYWNrcyBh
cmUgaW52b2tlZCB1bnRpbCBwZXJtaXNzaW9uIGlzIGRlbmllZC4iKTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oNTEuNDc4LCAtMC4xNjYsIDEwMCk7CisKK2Z1bmN0aW9u
IGRlbnlQZXJtaXNzaW9uKCkgeworICAgIHBlcm1pc3Npb25TZXQgPSB0cnVlOworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7Cit9CisKK3ZhciBlcnJvcjsKK25hdmln
YXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24oKSB7CisgICAgdGVz
dEZhaWxlZCgnU3VjY2VzcyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgIGZp
bmlzaEpTVGVzdCgpOworfSwgZnVuY3Rpb24oZSkgeworICAgIGlmIChwZXJtaXNzaW9uU2V0KSB7
CisgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnZXJy
b3IuUEVSTUlTU0lPTl9ERU5JRUQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2Vycm9yLm1lc3NhZ2Un
LCAnIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIicpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBp
bnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cit3aW5kb3cu
c2V0VGltZW91dChkZW55UGVybWlzc2lvbiwgMTAwKTsKKword2luZG93LmpzVGVzdElzQXN5bmMg
PSB0cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNjQ1NDcpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTA4Nyw2ICsxMDg3LDggQEAgZmFzdC9k
b20vRGV2aWNlT3JpZW50YXRpb24vY3JlYXRlLWV2ZW50LgogZmFzdC9kb20vRGV2aWNlT3JpZW50
YXRpb24vb3B0aW9uYWwtZXZlbnQtcHJvcGVydGllcy5odG1sCiBmYXN0L2RvbS9EZXZpY2VPcmll
bnRhdGlvbi93aW5kb3ctcHJvcGVydHkuaHRtbAogZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJh
Y2stZXhjZXB0aW9uLmh0bWwKK2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lv
bi1hbGxvd2VkLmh0bWwKK2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1k
ZW5pZWQuaHRtbAogZmFzdC9kb20vR2VvbG9jYXRpb24vZXJyb3IuaHRtbAogZmFzdC9kb20vR2Vv
bG9jYXRpb24vbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAogZmFzdC9kb20vR2VvbG9jYXRpb24vcGVy
bWlzc2lvbi1kZW5pZWQtYWxyZWFkeS1jbGVhci13YXRjaC5odG1sCg==
</data>
<flag name="review"
          id="51688"
          type_id="1"
          status="+"
          setter="steveblock"
    />
    <flag name="commit-queue"
          id="51707"
          type_id="3"
          status="-"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>