<?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>57969</bug_id>
          
          <creation_ts>2011-04-06 12:15:23 -0700</creation_ts>
          <short_desc>Add web audio support to DumpRenderTree (mac port)</short_desc>
          <delta_ts>2011-04-07 10:02:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>57977</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>kbr</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380713</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 12:15:23 -0700</bug_when>
    <thetext>Add web audio support to DumpRenderTree (mac port)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380715</commentid>
    <comment_count>1</comment_count>
      <attachid>88485</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 12:18:04 -0700</bug_when>
    <thetext>Created attachment 88485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380720</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 12:24:35 -0700</bug_when>
    <thetext>The web audio API is in need of comprehensive layout tests.  The approach taken is for each test to render a short amount of audio (1 to 10 seconds) and compare with a reference .wav file.

This patch adds a new &quot;setEncodedAudioData()&quot; method to the LayoutTestController.  The JS in the test will encode the generated audio result as WAVE file data, then base64 encode it as a string to be passed in to setEncodedAudioData();

This patch currently is only for the mac port, but other ports will follow (chromium next).

I&apos;ll put up another patch illustrating an actual layout test using this new system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380782</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 13:44:39 -0700</bug_when>
    <thetext>Here&apos;s a patch for my first layout test to use the new setEncodedAudioData() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380784</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 13:45:19 -0700</bug_when>
    <thetext>Sorry, and the URL for that patch is:

https://bugs.webkit.org/show_bug.cgi?id=57977</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380809</commentid>
    <comment_count>5</comment_count>
      <attachid>88485</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 14:03:56 -0700</bug_when>
    <thetext>Comment on attachment 88485
Patch

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

I think it&apos;s OK to put the layout test and the changes to DRT in the same patch.

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:948
&gt; +        if (gLayoutTestController-&gt;dumpAsAudio()) {

How big is the -expected.txt?  How horrible would it be to just console.log (or append to a div) the base64 data in the test?  The main benefit would be not having to introduce dumpAsAudio() or remember to call it.  You could also have setEncodedAudioData() write the base64 data via printf (we do this for other delegates like the editing delegate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380810</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 14:04:29 -0700</bug_when>
    <thetext>BTW, I think the general approach (setEncodedAudioData()) is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380813</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-04-06 14:08:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 88485 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88485&amp;action=review
&gt; 
&gt; I think it&apos;s OK to put the layout test and the changes to DRT in the same patch.
&gt; 
&gt; &gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:948
&gt; &gt; +        if (gLayoutTestController-&gt;dumpAsAudio()) {
&gt; 
&gt; How big is the -expected.txt?  How horrible would it be to just console.log (or append to a div) the base64 data in the test?  The main benefit would be not having to introduce dumpAsAudio() or remember to call it.  You could also have setEncodedAudioData() write the base64 data via printf (we do this for other delegates like the editing delegate).

I think the main downside of printing the audio as base64 text is that it makes it harder to actually do something with it if we get a diff.

My thinking with the separate file was that NRWT could de-base64 it and save it as wav files which can be played directly to compare with the reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380826</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 14:13:59 -0700</bug_when>
    <thetext>The interesting thing is that the expected result will not be *text* but will be a WAVE file.  This will be similar to the approach we take for our pixel tests.  That way people can actually hear the expected and generated results which is very useful when trying to debug problems in the audio code.  Also, re-baselining will be less error prone since the new results can be audibly compared against the old.

I think it&apos;s best to have setEncodedAudioData() in DRT so that the &apos;audio/wav&apos; mime-type can be written in the header.  That way run-webkit-tests can do the right thing (knows to decode64 and compare against a reference .wav file...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380827</commentid>
    <comment_count>9</comment_count>
      <attachid>88485</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-04-06 14:17:05 -0700</bug_when>
    <thetext>Comment on attachment 88485
Patch

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

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:950
&gt; +            resultMimeType = @&quot;audio/wav&quot;;

I suppose if we were being really picky we&apos;d mark this with a Content-Transfer-Encoding header as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380832</commentid>
    <comment_count>10</comment_count>
      <attachid>88511</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 14:23:22 -0700</bug_when>
    <thetext>Created attachment 88511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380848</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 14:39:02 -0700</bug_when>
    <thetext>From discussion on IRC, the expected result would be test-name-expected.wav and we would have to update ORWT/NRWT to know about these.

Dirk said he plans on adding this to NRWT.

I feel that we shouldn&apos;t keep adding tests that only get run by Chromium (like reftests).  This means that either we add this support to ORWT too or we wait on adding audio tests until everyone has switched to NRWT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380856</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 14:42:50 -0700</bug_when>
    <thetext>*** Bug 57977 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380872</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:02:04 -0700</bug_when>
    <thetext>Tony, agreed about not adding a bunch of audio tests until it all works on ORWT, but I&apos;d still to make some forward progress by getting this patch in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380879</commentid>
    <comment_count>14</comment_count>
      <attachid>88523</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:07:23 -0700</bug_when>
    <thetext>Created attachment 88523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380880</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:08:19 -0700</bug_when>
    <thetext>Latest patch includes:

Content-Transfer-Encoding: base64

in the header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380888</commentid>
    <comment_count>16</comment_count>
      <attachid>88523</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-06 15:14:59 -0700</bug_when>
    <thetext>Comment on attachment 88523
Patch

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

Sorry, I misunderstood that this required changes to NRWT/ORWT.  Can you re-upload without the test?

&gt; Tools/DumpRenderTree/LayoutTestController.h:271
&gt; +    void setEncodedAudioData(std::string encodedAudioData) { m_encodedAudioData = encodedAudioData; }

const std::string&amp;

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:739
&gt; +    const char* encodedAudioData = gLayoutTestController-&gt;encodedAudioData().c_str();

I think in ObjC we put the * next to the variable name.  This file seems like a mix of both styles.

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:741
&gt; +    NSData *data = [NSData dataWithBytes:encodedAudioData length:strlen(encodedAudioData)];

If encodedAudioData has null bytes in it, won&apos;t strlen give the wrong value?  Should we use gLayoutTestController-&gt;encodedAudioData().length() instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380912</commentid>
    <comment_count>17</comment_count>
      <attachid>88523</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:35:06 -0700</bug_when>
    <thetext>Comment on attachment 88523
Patch

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

&gt;&gt; Tools/DumpRenderTree/LayoutTestController.h:271
&gt;&gt; +    void setEncodedAudioData(std::string encodedAudioData) { m_encodedAudioData = encodedAudioData; }
&gt; 
&gt; const std::string&amp;

FIXED

&gt;&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:739
&gt;&gt; +    const char* encodedAudioData = gLayoutTestController-&gt;encodedAudioData().c_str();
&gt; 
&gt; I think in ObjC we put the * next to the variable name.  This file seems like a mix of both styles.

FIXED

&gt;&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:741
&gt;&gt; +    NSData *data = [NSData dataWithBytes:encodedAudioData length:strlen(encodedAudioData)];
&gt; 
&gt; If encodedAudioData has null bytes in it, won&apos;t strlen give the wrong value?  Should we use gLayoutTestController-&gt;encodedAudioData().length() instead?

because it&apos;s base64 data that shouldn&apos;t be a problem.  However, your approach seems better anyway - so fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380913</commentid>
    <comment_count>18</comment_count>
      <attachid>88533</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:36:49 -0700</bug_when>
    <thetext>Created attachment 88533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380916</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-06 15:37:41 -0700</bug_when>
    <thetext>latest patch addresses comments and removes the actual layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381005</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-04-06 17:49:40 -0700</bug_when>
    <thetext>We need one minor change to make NRWT happy .. we should be sending a Content-Length: header as well  as the Content-Type and Content-Transfer-Encoding headers when we are dumping the audio.

Here&apos;s a diff:


layout_tests $ git diff f887b1
diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree
index 914fc10..1f485af 100644
--- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm
+++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm
@@ -971,9 +971,11 @@ void dump()
 
         printf(&quot;Content-Type: %s\n&quot;, [resultMimeType UTF8String]);
 
-        if (gLayoutTestController-&gt;dumpAsAudio())
-            printf(&quot;Content-Transfer-Encoding: base64\n&quot;);            
-        
+        if (gLayoutTestController-&gt;dumpAsAudio()) {
+            printf(&quot;Content-Transfer-Encoding: base64\n&quot;);
+            printf(&quot;Content-Length: %ld\n&quot;, [resultData length]);
+        }
+      
         if (resultData) {
             fwrite([resultData bytes], 1, [resultData length], stdout);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381028</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-04-06 18:19:32 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; +            printf(&quot;Content-Length: %ld\n&quot;, [resultData length]);

Actually, this should be a %lu. We should really be printing two &apos;\n&apos;s here, so that there&apos;s a blank line between the headers and the data, but it doesn&apos;t look like DRT does this for image data, so for consistency it should probably just be one here as well.

Note that the patch to NRWT in bug 57987 has been tested against this patch (with the content-length header added) and verified to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381108</commentid>
    <comment_count>22</comment_count>
      <attachid>88533</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 20:55:36 -0700</bug_when>
    <thetext>Comment on attachment 88533
Patch

Clearing flags on attachment: 88533

Committed r83138: &lt;http://trac.webkit.org/changeset/83138&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381109</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 20:55:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381438</commentid>
    <comment_count>24</comment_count>
      <attachid>88523</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-07 10:02:08 -0700</bug_when>
    <thetext>Comment on attachment 88523
Patch

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

&gt; LayoutTests/webaudio/audio-testing.js:7
&gt; +function encode64(input) {

Before I forget, base64 encoding is a built in function in javascript: btoa.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88485</attachid>
            <date>2011-04-06 12:18:04 -0700</date>
            <delta_ts>2011-04-06 14:23:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57969-20110406121803.patch</filename>
            <type>text/plain</type>
            <size>7039</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzMDgwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDQtMDYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Vi
IGF1ZGlvIHN1cHBvcnQgdG8gRHVtcFJlbmRlclRyZWUgKG1hYyBwb3J0KQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5NjkKKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChzZXRFbmNvZGVk
QXVkaW9EYXRhQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRp
Y0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNBdWRpbyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RHVtcEFzQXVkaW8pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGR1bXBBdWRpbyk6CisgICAgICAg
IChkdW1wKToKKwogMjAxMS0wNC0wNiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODI5NjMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiAgICAgOiBtX2R1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQog
ICAgICwgbV9kdW1wQXNQREYoZmFsc2UpCiAgICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCiAgICAg
LCBtX2R1bXBCYWNrRm9yd2FyZExpc3QoZmFsc2UpCkBAIC0zMTUsNiArMzE2LDI1IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG8KICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEVuY29kZWRB
dWRpb0RhdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2RlZEF1ZGlvRGF0
YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgCisgICAgc2l6ZV90IG1heExl
bmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbmNvZGVkQXVkaW9EYXRh
LmdldCgpKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlbmNvZGVkQXVkaW9EYXRhQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhlbmNvZGVkQXVkaW9EYXRhLmdldCgpLCBlbmNvZGVkQXVkaW9EYXRhQnVmZmVy
LmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEVuY29kZWRBdWRpb0RhdGEo
ZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlci5nZXQoKSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEFz
QXVkaW8odHJ1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0T25zY3JlZW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0yMjIxLDYgKzIyNDEsNyBAQCBKU1N0YXRpY0Z1bmN0aW9u
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCBzZXRBbHdheXNBY2NlcHRDb29raWVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSIsIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJz
ZXRFbmNvZGVkQXVkaW9EYXRhIiwgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCBzZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0QXV0aGVudGljYXRpb25V
c2VybmFtZSIsIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsIHNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODI5NjMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpOwogCisgICAgYm9vbCBkdW1wQXNBdWRpbygp
IGNvbnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0KKyAgICB2b2lkIHNldER1bXBBc0F1ZGlv
KGJvb2wgZHVtcEFzQXVkaW8pIHsgbV9kdW1wQXNBdWRpbyA9IGR1bXBBc0F1ZGlvOyB9CisgICAg
CiAgICAgYm9vbCBkdW1wQXNQREYoKSBjb25zdCB7IHJldHVybiBtX2R1bXBBc1BERjsgfQogICAg
IHZvaWQgc2V0RHVtcEFzUERGKGJvb2wgZHVtcEFzUERGKSB7IG1fZHVtcEFzUERGID0gZHVtcEFz
UERGOyB9CiAKQEAgLTI2Myw2ICsyNjYsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGVzdFBhdGhPclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQog
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWRQaXhlbEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVk
QXVkaW9EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9p
ZCBzZXRFbmNvZGVkQXVkaW9EYXRhKHN0ZDo6c3RyaW5nIGVuY29kZWRBdWRpb0RhdGEpIHsgbV9l
bmNvZGVkQXVkaW9EYXRhID0gZW5jb2RlZEF1ZGlvRGF0YTsgfQogICAgIAogICAgIGJvb2wgcGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CiAgICAgYm9vbCBwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKTsKQEAgLTMzNCw2ICszNDAsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxs
b3cpOwogCiAgICAgYm9vbCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3M7
CisgICAgYm9vbCBtX2R1bXBBc0F1ZGlvOwogICAgIGJvb2wgbV9kdW1wQXNQREY7CiAgICAgYm9v
bCBtX2R1bXBBc1RleHQ7CiAgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkBAIC0zODMs
NiArMzkwLDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxT
ZW5kUmVxdWVzdENsZWFySGVhZGVyczsKICAgICAKKyAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRp
b0RhdGE7CisgICAgCiAgICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNr
dG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKICAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDgyOTYzKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
MzQsNiArNzM0LDE0IEBAIHN0YXRpYyBOU0ludGVnZXIgY29tcGFyZUhpc3RvcnlJdGVtcyhpZCAK
ICAgICByZXR1cm4gW1tpdGVtMSB0YXJnZXRdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6W2l0ZW0y
IHRhcmdldF1dOwogfQogCitzdGF0aWMgTlNEYXRhICpkdW1wQXVkaW8oKQoreworICAgIGNvbnN0
IGNoYXIqIGVuY29kZWRBdWRpb0RhdGEgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmVuY29kZWRB
dWRpb0RhdGEoKS5jX3N0cigpOworICAgIAorICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczplbmNvZGVkQXVkaW9EYXRhIGxlbmd0aDpzdHJsZW4oZW5jb2RlZEF1ZGlvRGF0
YSldOworICAgIHJldHVybiBkYXRhOworfQorCiBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0o
V2ViSGlzdG9yeUl0ZW0gKml0ZW0sIGludCBpbmRlbnQsIEJPT0wgY3VycmVudCkKIHsKICAgICBp
bnQgc3RhcnQgPSAwOwpAQCAtOTM3LDcgKzk0NSwxMCBAQCB2b2lkIGR1bXAoKQogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4
dCgpKSB7CisgICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc0F1ZGlvKCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdERhdGEgPSBkdW1wQXVkaW8oKTsKKyAgICAgICAgICAgIHJl
c3VsdE1pbWVUeXBlID0gQCJhdWRpby93YXYiOworICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CiAgICAgICAgICAgICByZXN1bHRTdHJpbmcg
PSBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wQXNQREYoKSkgewogICAgICAgICAgICAgcmVzdWx0RGF0YSA9
IGR1bXBGcmFtZUFzUERGKG1haW5GcmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88511</attachid>
            <date>2011-04-06 14:23:22 -0700</date>
            <delta_ts>2011-04-06 15:07:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57969-20110406142321.patch</filename>
            <type>text/plain</type>
            <size>13080</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzMDgwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDQtMDYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Vi
IGF1ZGlvIHN1cHBvcnQgdG8gRHVtcFJlbmRlclRyZWUgKG1hYyBwb3J0KQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5NjkKKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChzZXRFbmNvZGVk
QXVkaW9EYXRhQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRp
Y0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNBdWRpbyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RHVtcEFzQXVkaW8pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGR1bXBBdWRpbyk6CisgICAgICAg
IChkdW1wKToKKwogMjAxMS0wNC0wNiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODI5NjMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiAgICAgOiBtX2R1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQog
ICAgICwgbV9kdW1wQXNQREYoZmFsc2UpCiAgICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCiAgICAg
LCBtX2R1bXBCYWNrRm9yd2FyZExpc3QoZmFsc2UpCkBAIC0zMTUsNiArMzE2LDI1IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG8KICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEVuY29kZWRB
dWRpb0RhdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2RlZEF1ZGlvRGF0
YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgCisgICAgc2l6ZV90IG1heExl
bmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbmNvZGVkQXVkaW9EYXRh
LmdldCgpKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlbmNvZGVkQXVkaW9EYXRhQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhlbmNvZGVkQXVkaW9EYXRhLmdldCgpLCBlbmNvZGVkQXVkaW9EYXRhQnVmZmVy
LmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEVuY29kZWRBdWRpb0RhdGEo
ZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlci5nZXQoKSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEFz
QXVkaW8odHJ1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0T25zY3JlZW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0yMjIxLDYgKzIyNDEsNyBAQCBKU1N0YXRpY0Z1bmN0aW9u
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCBzZXRBbHdheXNBY2NlcHRDb29raWVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSIsIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJz
ZXRFbmNvZGVkQXVkaW9EYXRhIiwgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCBzZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0QXV0aGVudGljYXRpb25V
c2VybmFtZSIsIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsIHNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODI5NjMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpOwogCisgICAgYm9vbCBkdW1wQXNBdWRpbygp
IGNvbnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0KKyAgICB2b2lkIHNldER1bXBBc0F1ZGlv
KGJvb2wgZHVtcEFzQXVkaW8pIHsgbV9kdW1wQXNBdWRpbyA9IGR1bXBBc0F1ZGlvOyB9CisgICAg
CiAgICAgYm9vbCBkdW1wQXNQREYoKSBjb25zdCB7IHJldHVybiBtX2R1bXBBc1BERjsgfQogICAg
IHZvaWQgc2V0RHVtcEFzUERGKGJvb2wgZHVtcEFzUERGKSB7IG1fZHVtcEFzUERGID0gZHVtcEFz
UERGOyB9CiAKQEAgLTI2Myw2ICsyNjYsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGVzdFBhdGhPclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQog
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWRQaXhlbEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVk
QXVkaW9EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9p
ZCBzZXRFbmNvZGVkQXVkaW9EYXRhKHN0ZDo6c3RyaW5nIGVuY29kZWRBdWRpb0RhdGEpIHsgbV9l
bmNvZGVkQXVkaW9EYXRhID0gZW5jb2RlZEF1ZGlvRGF0YTsgfQogICAgIAogICAgIGJvb2wgcGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CiAgICAgYm9vbCBwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKTsKQEAgLTMzNCw2ICszNDAsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxs
b3cpOwogCiAgICAgYm9vbCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3M7
CisgICAgYm9vbCBtX2R1bXBBc0F1ZGlvOwogICAgIGJvb2wgbV9kdW1wQXNQREY7CiAgICAgYm9v
bCBtX2R1bXBBc1RleHQ7CiAgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkBAIC0zODMs
NiArMzkwLDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxT
ZW5kUmVxdWVzdENsZWFySGVhZGVyczsKICAgICAKKyAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRp
b0RhdGE7CisgICAgCiAgICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNr
dG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKICAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDgyOTYzKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
MzQsNiArNzM0LDE0IEBAIHN0YXRpYyBOU0ludGVnZXIgY29tcGFyZUhpc3RvcnlJdGVtcyhpZCAK
ICAgICByZXR1cm4gW1tpdGVtMSB0YXJnZXRdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6W2l0ZW0y
IHRhcmdldF1dOwogfQogCitzdGF0aWMgTlNEYXRhICpkdW1wQXVkaW8oKQoreworICAgIGNvbnN0
IGNoYXIqIGVuY29kZWRBdWRpb0RhdGEgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmVuY29kZWRB
dWRpb0RhdGEoKS5jX3N0cigpOworICAgIAorICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczplbmNvZGVkQXVkaW9EYXRhIGxlbmd0aDpzdHJsZW4oZW5jb2RlZEF1ZGlvRGF0
YSldOworICAgIHJldHVybiBkYXRhOworfQorCiBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0o
V2ViSGlzdG9yeUl0ZW0gKml0ZW0sIGludCBpbmRlbnQsIEJPT0wgY3VycmVudCkKIHsKICAgICBp
bnQgc3RhcnQgPSAwOwpAQCAtOTM3LDcgKzk0NSwxMCBAQCB2b2lkIGR1bXAoKQogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4
dCgpKSB7CisgICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc0F1ZGlvKCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdERhdGEgPSBkdW1wQXVkaW8oKTsKKyAgICAgICAgICAgIHJl
c3VsdE1pbWVUeXBlID0gQCJhdWRpby93YXYiOworICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CiAgICAgICAgICAgICByZXN1bHRTdHJpbmcg
PSBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wQXNQREYoKSkgewogICAgICAgICAgICAgcmVzdWx0RGF0YSA9
IGR1bXBGcmFtZUFzUERGKG1haW5GcmFtZSk7CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJhdWRpby9h
dWRpby10ZXN0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
LXRlc3RpbmcuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpby10
ZXN0aW5nLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOSBAQAordmFyIGtleVN0ciA9ICJB
QkNERUZHSElKS0xNTk9QIiArCisgICAgICAgICAgICAgIlFSU1RVVldYWVphYmNkZWYiICsKKyAg
ICAgICAgICAgICAiZ2hpamtsbW5vcHFyc3R1diIgKworICAgICAgICAgICAgICJ3eHl6MDEyMzQ1
Njc4OSsvIiArCisgICAgICAgICAgICAgIj0iOworCitmdW5jdGlvbiBlbmNvZGU2NChpbnB1dCkg
eworICAgdmFyIG91dHB1dCA9ICIiOworICAgdmFyIGNocjEsIGNocjIsIGNocjMgPSAiIjsKKyAg
IHZhciBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0ID0gIiI7CisgICB2YXIgaSA9IDA7CisKKyAgIGRv
IHsKKyAgICAgIGNocjEgPSBpbnB1dFtpKytdOworICAgICAgY2hyMiA9IGlucHV0W2krK107Cisg
ICAgICBjaHIzID0gaW5wdXRbaSsrXTsKKworICAgICAgZW5jMSA9IGNocjEgPj4gMjsKKyAgICAg
IGVuYzIgPSAoKGNocjEgJiAzKSA8PCA0KSB8IChjaHIyID4+IDQpOworICAgICAgZW5jMyA9ICgo
Y2hyMiAmIDE1KSA8PCAyKSB8IChjaHIzID4+IDYpOworICAgICAgZW5jNCA9IGNocjMgJiA2MzsK
KworICAgICAgaWYgKGlzTmFOKGNocjIpKSB7CisgICAgICAgICBlbmMzID0gZW5jNCA9IDY0Owor
ICAgICAgfSBlbHNlIGlmIChpc05hTihjaHIzKSkgeworICAgICAgICAgZW5jNCA9IDY0OworICAg
ICAgfQorCisgICAgICBvdXRwdXQgPSBvdXRwdXQgKworICAgICAgICAga2V5U3RyLmNoYXJBdChl
bmMxKSArCisgICAgICAgICBrZXlTdHIuY2hhckF0KGVuYzIpICsKKyAgICAgICAgIGtleVN0ci5j
aGFyQXQoZW5jMykgKworICAgICAgICAga2V5U3RyLmNoYXJBdChlbmM0KTsKKyAgICAgIGNocjEg
PSBjaHIyID0gY2hyMyA9ICIiOworICAgICAgZW5jMSA9IGVuYzIgPSBlbmMzID0gZW5jNCA9ICIi
OworICAgfSB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCk7CisKKyAgIHJldHVybiBvdXRwdXQ7Cit9
CisKK2Z1bmN0aW9uIHdyaXRlU3RyaW5nKHMsIGEsIG9mZnNldCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcy5sZW5ndGg7ICsraSkgeworICAgICAgICBhW29mZnNldCArIGldID0gcy5jaGFy
Q29kZUF0KGkpOworICAgIH0KK30KKworZnVuY3Rpb24gd3JpdGVJbnQxNihuLCBhLCBvZmZzZXQp
IHsKKyAgICBuID0gcGFyc2VJbnQobik7CisgICAgdmFyIGIxID0gbiAmIDI1NTsKKyAgICB2YXIg
YjIgPSAobiA+PiA4KSAmIDI1NTsKKworICAgIGFbb2Zmc2V0ICsgMF0gPSBiMTsKKyAgICBhW29m
ZnNldCArIDFdID0gYjI7Cit9CisKK2Z1bmN0aW9uIHdyaXRlSW50MzIobiwgYSwgb2Zmc2V0KSB7
CisgICAgbiA9IHBhcnNlSW50KG4pOworICAgIHZhciBiMSA9IG4gJiAyNTU7CisgICAgdmFyIGIy
ID0gKG4gPj4gOCkgJiAyNTU7CisgICAgdmFyIGIzID0gKG4gPj4gMTYpICYgMjU1OworICAgIHZh
ciBiNCA9IChuID4+IDI0KSAmIDI1NTsKKworICAgIGFbb2Zmc2V0ICsgMF0gPSBiMTsKKyAgICBh
W29mZnNldCArIDFdID0gYjI7CisgICAgYVtvZmZzZXQgKyAyXSA9IGIzOworICAgIGFbb2Zmc2V0
ICsgM10gPSBiNDsKK30KKworZnVuY3Rpb24gd3JpdGVBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlciwg
YSwgb2Zmc2V0KSB7CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGJ1
ZmZlckwgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICB2YXIgYnVmZmVyUiA9
IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworICAgIAorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgKytpKSB7CisgICAgICAgIC8vIFdyaXRlIGxlZnQgYW5kIHJpZ2h0CisgICAgICAg
IAorICAgICAgICB2YXIgc2FtcGxlTCA9IGJ1ZmZlckxbaV0gKiAzMjc2OC4wOworICAgICAgICB2
YXIgc2FtcGxlUiA9IGJ1ZmZlclJbaV0gKiAzMjc2OC4wOworCisgICAgICAgIC8vIENsaXAgbGVm
dCBhbmQgcmlnaHQgc2FtcGxlcyB0byB0aGUgbGltaXRhdGlvbnMgb2YgMTYtYml0LgorICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzIHRoZW4gd2UnbGwgZ2V0IG5hc3R5IHdyYXAtYXJvdW5k
IGRpc3RvcnRpb24uCisgICAgICAgIGlmIChzYW1wbGVMIDwgLTMyNzY4KQorICAgICAgICAgICAg
c2FtcGxlTCA9IC0zMjc2ODsKKyAgICAgICAgaWYgKHNhbXBsZUwgPiAzMjc2NykKKyAgICAgICAg
ICAgIHNhbXBsZUwgPSAzMjc2NzsKKyAgICAgICAgaWYgKHNhbXBsZVIgPCAtMzI3NjgpCisgICAg
ICAgICAgICBzYW1wbGVSID0gLTMyNzY4OworICAgICAgICBpZiAoc2FtcGxlUiA+IDMyNzY3KQor
ICAgICAgICAgICAgc2FtcGxlUiA9IDMyNzY3OworICAgICAgICAgICAgCisgICAgICAgIHdyaXRl
SW50MTYoc2FtcGxlTCwgYSwgb2Zmc2V0KTsKKyAgICAgICAgd3JpdGVJbnQxNihzYW1wbGVSLCBh
LCBvZmZzZXQgKyAyKTsKKyAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgfQorfQorCitmdW5jdGlv
biBjcmVhdGVXYXZlRmlsZURhdGEoYXVkaW9CdWZmZXIpIHsKKyAgICB2YXIgZnJhbWVMZW5ndGgg
PSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIG51bWJlck9mQ2hhbm5lbHMgPSBhdWRpb0J1
ZmZlci5udW1iZXJPZkNoYW5uZWxzOworICAgIHZhciBzYW1wbGVSYXRlID0gYXVkaW9CdWZmZXIu
c2FtcGxlUmF0ZTsKKyAgICB2YXIgYml0c1BlclNhbXBsZSA9IDE2OworICAgIHZhciBieXRlUmF0
ZSA9IHNhbXBsZVJhdGUgKiBudW1iZXJPZkNoYW5uZWxzICogYml0c1BlclNhbXBsZS84OworICAg
IHZhciBibG9ja0FsaWduID0gbnVtYmVyT2ZDaGFubmVscyAqIGJpdHNQZXJTYW1wbGUvODsKKyAg
ICB2YXIgd2F2RGF0YUJ5dGVMZW5ndGggPSBmcmFtZUxlbmd0aCAqIG51bWJlck9mQ2hhbm5lbHMg
KiAyOyAvLyAxNi1iaXQgYXVkaW8KKyAgICB2YXIgaGVhZGVyQnl0ZUxlbmd0aCA9IDQ0OworICAg
IHZhciB0b3RhbExlbmd0aCA9IGhlYWRlckJ5dGVMZW5ndGggKyB3YXZEYXRhQnl0ZUxlbmd0aDsK
KworICAgIHZhciB3YXZlRmlsZURhdGEgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7Cisg
ICAgCisgICAgdmFyIHN1YkNodW5rMVNpemUgPSAxNjsgLy8gZm9yIGxpbmVhciBQQ00KKyAgICB2
YXIgc3ViQ2h1bmsyU2l6ZSA9IHdhdkRhdGFCeXRlTGVuZ3RoOworICAgIHZhciBjaHVua1NpemUg
PSA0ICsgKDggKyBzdWJDaHVuazFTaXplKSArICg4ICsgc3ViQ2h1bmsyU2l6ZSk7CisKKyAgICB3
cml0ZVN0cmluZygiUklGRiIsIHdhdmVGaWxlRGF0YSwgMCk7CisgICAgd3JpdGVJbnQzMihjaHVu
a1NpemUsIHdhdmVGaWxlRGF0YSwgNCk7CisgICAgd3JpdGVTdHJpbmcoIldBVkUiLCB3YXZlRmls
ZURhdGEsIDgpOworICAgIHdyaXRlU3RyaW5nKCJmbXQgIiwgd2F2ZUZpbGVEYXRhLCAxMik7Cisg
ICAgCisgICAgd3JpdGVJbnQzMihzdWJDaHVuazFTaXplLCB3YXZlRmlsZURhdGEsIDE2KTsgICAg
ICAvLyBTdWJDaHVuazFTaXplICg0KQorICAgIHdyaXRlSW50MTYoMSwgd2F2ZUZpbGVEYXRhLCAy
MCk7ICAgICAgICAgICAgICAgICAgLy8gQXVkaW9Gb3JtYXQgKDIpCisgICAgd3JpdGVJbnQxNihu
dW1iZXJPZkNoYW5uZWxzLCB3YXZlRmlsZURhdGEsIDIyKTsgICAvLyBOdW1DaGFubmVscyAoMikK
KyAgICB3cml0ZUludDMyKHNhbXBsZVJhdGUsIHdhdmVGaWxlRGF0YSwgMjQpOyAgICAgICAgIC8v
IFNhbXBsZVJhdGUgKDQpCisgICAgd3JpdGVJbnQzMihieXRlUmF0ZSwgd2F2ZUZpbGVEYXRhLCAy
OCk7ICAgICAgICAgICAvLyBCeXRlUmF0ZSAoNCkKKyAgICB3cml0ZUludDE2KGJsb2NrQWxpZ24s
IHdhdmVGaWxlRGF0YSwgMzIpOyAgICAgICAgIC8vIEJsb2NrQWxpZ24gKDIpCisgICAgd3JpdGVJ
bnQzMihiaXRzUGVyU2FtcGxlLCB3YXZlRmlsZURhdGEsIDM0KTsgICAgICAvLyBCaXRzUGVyU2Ft
cGxlICg0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgd3JpdGVTdHJpbmcoImRhdGEiLCB3YXZlRmlsZURhdGEsIDM2KTsgICAgICAg
ICAgICAKKyAgICB3cml0ZUludDMyKHN1YkNodW5rMlNpemUsIHdhdmVGaWxlRGF0YSwgNDApOyAg
ICAgIC8vIFN1YkNodW5rMlNpemUgKDQpCisgICAgCisgICAgLy8gV3JpdGUgYWN0dWFsIGF1ZGlv
IGRhdGEgc3RhcnRpbmcgYXQgb2Zmc2V0IDQ0LgorICAgIHdyaXRlQXVkaW9CdWZmZXIoYXVkaW9C
dWZmZXIsIHdhdmVGaWxlRGF0YSwgNDQpOworICAgIAorICAgIHJldHVybiB3YXZlRmlsZURhdGE7
Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVuY29kZWRBdWRpb0RhdGEoYXVkaW9CdWZmZXIpIHsKKyAg
ICB2YXIgd2F2ZUZpbGVEYXRhID0gY3JlYXRlV2F2ZUZpbGVEYXRhKGF1ZGlvQnVmZmVyKTsKKyAg
ICByZXR1cm4gZW5jb2RlNjQod2F2ZUZpbGVEYXRhKTsKK30KSW5kZXg6IExheW91dFRlc3RzL3dl
YmF1ZGlvL3Rlc3QtYmFzaWMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJhdWRp
by90ZXN0LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93ZWJhdWRpby90
ZXN0LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzwhLS0KK1RoaXMg
aXMgYSB2ZXJ5IGJhc2ljIHRlc3QgdG8gbWFrZSBzdXJlIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dEVuY29kZWRBdWRpb0RhdGEoKSB3b3JrcyBjb3JyZWN0bHkuCitJdCBnZW5lcmF0ZXMgYSA0IHNl
Y29uZHMgbG9uZyBzdGVyZW8gcmVzdWx0IEA0NC4xS0h6CitUaGUgbGVmdCBjaGFubmVsIHdpbGwg
YmUgYSA4ODBIeiB0b25lLCB3aGlsZSB0aGUgcmlnaHQgd2lsbCBiZSA0NDBIei4KKy0tPgorCis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYXVkaW8t
dGVzdGluZy5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisKK3dpbmRvdy5vbmxvYWQgPSBpbml0
OworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisKK2Z1bmN0aW9uIGdlbmVyYXRlU2luV2F2
ZShhdWRpb0J1ZmZlcikgeworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAgIHZh
ciBjaGFubmVsTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworICAgIHZhciBjaGFu
bmVsUiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworICAgIHZhciBzYW1wbGVSYXRl
ID0gYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTsKKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG47ICsraSkgeworICAgICAgICBjaGFubmVsTFtpXSA9IE1hdGguc2luKDg4MC4wICogMi4wKk1h
dGguUEkgKiBpIC8gc2FtcGxlUmF0ZSk7CisgICAgICAgIGNoYW5uZWxSW2ldID0gTWF0aC5zaW4o
NDQwLjAgKiAyLjAqTWF0aC5QSSAqIGkgLyBzYW1wbGVSYXRlKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGluaXQoKSB7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KCk7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMiwg
NCAqIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOworICAgIAorICAgIGdlbmVyYXRlU2luV2F2ZShh
dWRpb0J1ZmZlcik7CisKKyAgICB2YXIgZW5jb2RlZEF1ZGlvRGF0YSA9IGNyZWF0ZUVuY29kZWRB
dWRpb0RhdGEoYXVkaW9CdWZmZXIpOworCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0RW5j
b2RlZEF1ZGlvRGF0YShlbmNvZGVkQXVkaW9EYXRhKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88523</attachid>
            <date>2011-04-06 15:07:23 -0700</date>
            <delta_ts>2011-04-07 10:02:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57969-20110406150721.patch</filename>
            <type>text/plain</type>
            <size>13419</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzMDgwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDQtMDYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Vi
IGF1ZGlvIHN1cHBvcnQgdG8gRHVtcFJlbmRlclRyZWUgKG1hYyBwb3J0KQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5NjkKKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChzZXRFbmNvZGVk
QXVkaW9EYXRhQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRp
Y0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNBdWRpbyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RHVtcEFzQXVkaW8pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGR1bXBBdWRpbyk6CisgICAgICAg
IChkdW1wKToKKwogMjAxMS0wNC0wNiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODI5NjMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiAgICAgOiBtX2R1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQog
ICAgICwgbV9kdW1wQXNQREYoZmFsc2UpCiAgICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCiAgICAg
LCBtX2R1bXBCYWNrRm9yd2FyZExpc3QoZmFsc2UpCkBAIC0zMTUsNiArMzE2LDI1IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG8KICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEVuY29kZWRB
dWRpb0RhdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2RlZEF1ZGlvRGF0
YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgCisgICAgc2l6ZV90IG1heExl
bmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbmNvZGVkQXVkaW9EYXRh
LmdldCgpKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlbmNvZGVkQXVkaW9EYXRhQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhlbmNvZGVkQXVkaW9EYXRhLmdldCgpLCBlbmNvZGVkQXVkaW9EYXRhQnVmZmVy
LmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEVuY29kZWRBdWRpb0RhdGEo
ZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlci5nZXQoKSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEFz
QXVkaW8odHJ1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0T25zY3JlZW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0yMjIxLDYgKzIyNDEsNyBAQCBKU1N0YXRpY0Z1bmN0aW9u
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCBzZXRBbHdheXNBY2NlcHRDb29raWVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSIsIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJz
ZXRFbmNvZGVkQXVkaW9EYXRhIiwgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCBzZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0QXV0aGVudGljYXRpb25V
c2VybmFtZSIsIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsIHNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODI5NjMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpOwogCisgICAgYm9vbCBkdW1wQXNBdWRpbygp
IGNvbnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0KKyAgICB2b2lkIHNldER1bXBBc0F1ZGlv
KGJvb2wgZHVtcEFzQXVkaW8pIHsgbV9kdW1wQXNBdWRpbyA9IGR1bXBBc0F1ZGlvOyB9CisgICAg
CiAgICAgYm9vbCBkdW1wQXNQREYoKSBjb25zdCB7IHJldHVybiBtX2R1bXBBc1BERjsgfQogICAg
IHZvaWQgc2V0RHVtcEFzUERGKGJvb2wgZHVtcEFzUERGKSB7IG1fZHVtcEFzUERGID0gZHVtcEFz
UERGOyB9CiAKQEAgLTI2Myw2ICsyNjYsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGVzdFBhdGhPclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQog
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWRQaXhlbEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVk
QXVkaW9EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9p
ZCBzZXRFbmNvZGVkQXVkaW9EYXRhKHN0ZDo6c3RyaW5nIGVuY29kZWRBdWRpb0RhdGEpIHsgbV9l
bmNvZGVkQXVkaW9EYXRhID0gZW5jb2RlZEF1ZGlvRGF0YTsgfQogICAgIAogICAgIGJvb2wgcGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CiAgICAgYm9vbCBwYXVzZVRy
YW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBk
b3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKTsKQEAgLTMzNCw2ICszNDAsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxs
b3cpOwogCiAgICAgYm9vbCBtX2R1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3M7
CisgICAgYm9vbCBtX2R1bXBBc0F1ZGlvOwogICAgIGJvb2wgbV9kdW1wQXNQREY7CiAgICAgYm9v
bCBtX2R1bXBBc1RleHQ7CiAgICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkBAIC0zODMs
NiArMzkwLDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX3dpbGxT
ZW5kUmVxdWVzdENsZWFySGVhZGVyczsKICAgICAKKyAgICAvLyBiYXNlNjQgZW5jb2RlZCBXQVYg
YXVkaW8gZGF0YSBpcyBzdG9yZWQgaGVyZS4KKyAgICBzdGQ6OnN0cmluZyBtX2VuY29kZWRBdWRp
b0RhdGE7CisgICAgCiAgICAgLy8gb3JpZ2lucyB3aGljaCBoYXZlIGJlZW4gZ3JhbnRlZCBkZXNr
dG9wIG5vdGlmaWNhdGlvbiBhY2Nlc3MKICAgICBzdGQ6OnZlY3RvcjxKU1N0cmluZ1JlZj4gbV9k
ZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdpbnM7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlzaW9uIDgyOTYzKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
MzQsNiArNzM0LDE0IEBAIHN0YXRpYyBOU0ludGVnZXIgY29tcGFyZUhpc3RvcnlJdGVtcyhpZCAK
ICAgICByZXR1cm4gW1tpdGVtMSB0YXJnZXRdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6W2l0ZW0y
IHRhcmdldF1dOwogfQogCitzdGF0aWMgTlNEYXRhICpkdW1wQXVkaW8oKQoreworICAgIGNvbnN0
IGNoYXIqIGVuY29kZWRBdWRpb0RhdGEgPSBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmVuY29kZWRB
dWRpb0RhdGEoKS5jX3N0cigpOworICAgIAorICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0
YVdpdGhCeXRlczplbmNvZGVkQXVkaW9EYXRhIGxlbmd0aDpzdHJsZW4oZW5jb2RlZEF1ZGlvRGF0
YSldOworICAgIHJldHVybiBkYXRhOworfQorCiBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0o
V2ViSGlzdG9yeUl0ZW0gKml0ZW0sIGludCBpbmRlbnQsIEJPT0wgY3VycmVudCkKIHsKICAgICBp
bnQgc3RhcnQgPSAwOwpAQCAtOTM3LDcgKzk0NSwxMCBAQCB2b2lkIGR1bXAoKQogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgICAgICAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4
dCgpKSB7CisgICAgICAgIGlmIChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc0F1ZGlvKCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdERhdGEgPSBkdW1wQXVkaW8oKTsKKyAgICAgICAgICAgIHJl
c3VsdE1pbWVUeXBlID0gQCJhdWRpby93YXYiOworICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CiAgICAgICAgICAgICByZXN1bHRTdHJpbmcg
PSBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wQXNQREYoKSkgewogICAgICAgICAgICAgcmVzdWx0RGF0YSA9
IGR1bXBGcmFtZUFzUERGKG1haW5GcmFtZSk7CkBAIC05NjAsNiArOTcxLDkgQEAgdm9pZCBkdW1w
KCkKIAogICAgICAgICBwcmludGYoIkNvbnRlbnQtVHlwZTogJXNcbiIsIFtyZXN1bHRNaW1lVHlw
ZSBVVEY4U3RyaW5nXSk7CiAKKyAgICAgICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cEFzQXVkaW8oKSkKKyAgICAgICAgICAgIHByaW50ZigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu
ZzogYmFzZTY0XG4iKTsgICAgICAgICAgICAKKyAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHRE
YXRhKSB7CiAgICAgICAgICAgICBmd3JpdGUoW3Jlc3VsdERhdGEgYnl0ZXNdLCAxLCBbcmVzdWx0
RGF0YSBsZW5ndGhdLCBzdGRvdXQpOwogCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
by10ZXN0aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvLXRl
c3RpbmcuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpby10ZXN0
aW5nLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOSBAQAordmFyIGtleVN0ciA9ICJBQkNE
RUZHSElKS0xNTk9QIiArCisgICAgICAgICAgICAgIlFSU1RVVldYWVphYmNkZWYiICsKKyAgICAg
ICAgICAgICAiZ2hpamtsbW5vcHFyc3R1diIgKworICAgICAgICAgICAgICJ3eHl6MDEyMzQ1Njc4
OSsvIiArCisgICAgICAgICAgICAgIj0iOworCitmdW5jdGlvbiBlbmNvZGU2NChpbnB1dCkgewor
ICAgdmFyIG91dHB1dCA9ICIiOworICAgdmFyIGNocjEsIGNocjIsIGNocjMgPSAiIjsKKyAgIHZh
ciBlbmMxLCBlbmMyLCBlbmMzLCBlbmM0ID0gIiI7CisgICB2YXIgaSA9IDA7CisKKyAgIGRvIHsK
KyAgICAgIGNocjEgPSBpbnB1dFtpKytdOworICAgICAgY2hyMiA9IGlucHV0W2krK107CisgICAg
ICBjaHIzID0gaW5wdXRbaSsrXTsKKworICAgICAgZW5jMSA9IGNocjEgPj4gMjsKKyAgICAgIGVu
YzIgPSAoKGNocjEgJiAzKSA8PCA0KSB8IChjaHIyID4+IDQpOworICAgICAgZW5jMyA9ICgoY2hy
MiAmIDE1KSA8PCAyKSB8IChjaHIzID4+IDYpOworICAgICAgZW5jNCA9IGNocjMgJiA2MzsKKwor
ICAgICAgaWYgKGlzTmFOKGNocjIpKSB7CisgICAgICAgICBlbmMzID0gZW5jNCA9IDY0OworICAg
ICAgfSBlbHNlIGlmIChpc05hTihjaHIzKSkgeworICAgICAgICAgZW5jNCA9IDY0OworICAgICAg
fQorCisgICAgICBvdXRwdXQgPSBvdXRwdXQgKworICAgICAgICAga2V5U3RyLmNoYXJBdChlbmMx
KSArCisgICAgICAgICBrZXlTdHIuY2hhckF0KGVuYzIpICsKKyAgICAgICAgIGtleVN0ci5jaGFy
QXQoZW5jMykgKworICAgICAgICAga2V5U3RyLmNoYXJBdChlbmM0KTsKKyAgICAgIGNocjEgPSBj
aHIyID0gY2hyMyA9ICIiOworICAgICAgZW5jMSA9IGVuYzIgPSBlbmMzID0gZW5jNCA9ICIiOwor
ICAgfSB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCk7CisKKyAgIHJldHVybiBvdXRwdXQ7Cit9CisK
K2Z1bmN0aW9uIHdyaXRlU3RyaW5nKHMsIGEsIG9mZnNldCkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcy5sZW5ndGg7ICsraSkgeworICAgICAgICBhW29mZnNldCArIGldID0gcy5jaGFyQ29k
ZUF0KGkpOworICAgIH0KK30KKworZnVuY3Rpb24gd3JpdGVJbnQxNihuLCBhLCBvZmZzZXQpIHsK
KyAgICBuID0gcGFyc2VJbnQobik7CisgICAgdmFyIGIxID0gbiAmIDI1NTsKKyAgICB2YXIgYjIg
PSAobiA+PiA4KSAmIDI1NTsKKworICAgIGFbb2Zmc2V0ICsgMF0gPSBiMTsKKyAgICBhW29mZnNl
dCArIDFdID0gYjI7Cit9CisKK2Z1bmN0aW9uIHdyaXRlSW50MzIobiwgYSwgb2Zmc2V0KSB7Cisg
ICAgbiA9IHBhcnNlSW50KG4pOworICAgIHZhciBiMSA9IG4gJiAyNTU7CisgICAgdmFyIGIyID0g
KG4gPj4gOCkgJiAyNTU7CisgICAgdmFyIGIzID0gKG4gPj4gMTYpICYgMjU1OworICAgIHZhciBi
NCA9IChuID4+IDI0KSAmIDI1NTsKKworICAgIGFbb2Zmc2V0ICsgMF0gPSBiMTsKKyAgICBhW29m
ZnNldCArIDFdID0gYjI7CisgICAgYVtvZmZzZXQgKyAyXSA9IGIzOworICAgIGFbb2Zmc2V0ICsg
M10gPSBiNDsKK30KKworZnVuY3Rpb24gd3JpdGVBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlciwgYSwg
b2Zmc2V0KSB7CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGJ1ZmZl
ckwgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICB2YXIgYnVmZmVyUiA9IGF1
ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworICAgIAorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbjsgKytpKSB7CisgICAgICAgIC8vIFdyaXRlIGxlZnQgYW5kIHJpZ2h0CisgICAgICAgIAor
ICAgICAgICB2YXIgc2FtcGxlTCA9IGJ1ZmZlckxbaV0gKiAzMjc2OC4wOworICAgICAgICB2YXIg
c2FtcGxlUiA9IGJ1ZmZlclJbaV0gKiAzMjc2OC4wOworCisgICAgICAgIC8vIENsaXAgbGVmdCBh
bmQgcmlnaHQgc2FtcGxlcyB0byB0aGUgbGltaXRhdGlvbnMgb2YgMTYtYml0LgorICAgICAgICAv
LyBJZiB3ZSBkb24ndCBkbyB0aGlzIHRoZW4gd2UnbGwgZ2V0IG5hc3R5IHdyYXAtYXJvdW5kIGRp
c3RvcnRpb24uCisgICAgICAgIGlmIChzYW1wbGVMIDwgLTMyNzY4KQorICAgICAgICAgICAgc2Ft
cGxlTCA9IC0zMjc2ODsKKyAgICAgICAgaWYgKHNhbXBsZUwgPiAzMjc2NykKKyAgICAgICAgICAg
IHNhbXBsZUwgPSAzMjc2NzsKKyAgICAgICAgaWYgKHNhbXBsZVIgPCAtMzI3NjgpCisgICAgICAg
ICAgICBzYW1wbGVSID0gLTMyNzY4OworICAgICAgICBpZiAoc2FtcGxlUiA+IDMyNzY3KQorICAg
ICAgICAgICAgc2FtcGxlUiA9IDMyNzY3OworICAgICAgICAgICAgCisgICAgICAgIHdyaXRlSW50
MTYoc2FtcGxlTCwgYSwgb2Zmc2V0KTsKKyAgICAgICAgd3JpdGVJbnQxNihzYW1wbGVSLCBhLCBv
ZmZzZXQgKyAyKTsKKyAgICAgICAgb2Zmc2V0ICs9IDQ7CisgICAgfQorfQorCitmdW5jdGlvbiBj
cmVhdGVXYXZlRmlsZURhdGEoYXVkaW9CdWZmZXIpIHsKKyAgICB2YXIgZnJhbWVMZW5ndGggPSBh
dWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIG51bWJlck9mQ2hhbm5lbHMgPSBhdWRpb0J1ZmZl
ci5udW1iZXJPZkNoYW5uZWxzOworICAgIHZhciBzYW1wbGVSYXRlID0gYXVkaW9CdWZmZXIuc2Ft
cGxlUmF0ZTsKKyAgICB2YXIgYml0c1BlclNhbXBsZSA9IDE2OworICAgIHZhciBieXRlUmF0ZSA9
IHNhbXBsZVJhdGUgKiBudW1iZXJPZkNoYW5uZWxzICogYml0c1BlclNhbXBsZS84OworICAgIHZh
ciBibG9ja0FsaWduID0gbnVtYmVyT2ZDaGFubmVscyAqIGJpdHNQZXJTYW1wbGUvODsKKyAgICB2
YXIgd2F2RGF0YUJ5dGVMZW5ndGggPSBmcmFtZUxlbmd0aCAqIG51bWJlck9mQ2hhbm5lbHMgKiAy
OyAvLyAxNi1iaXQgYXVkaW8KKyAgICB2YXIgaGVhZGVyQnl0ZUxlbmd0aCA9IDQ0OworICAgIHZh
ciB0b3RhbExlbmd0aCA9IGhlYWRlckJ5dGVMZW5ndGggKyB3YXZEYXRhQnl0ZUxlbmd0aDsKKwor
ICAgIHZhciB3YXZlRmlsZURhdGEgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7CisgICAg
CisgICAgdmFyIHN1YkNodW5rMVNpemUgPSAxNjsgLy8gZm9yIGxpbmVhciBQQ00KKyAgICB2YXIg
c3ViQ2h1bmsyU2l6ZSA9IHdhdkRhdGFCeXRlTGVuZ3RoOworICAgIHZhciBjaHVua1NpemUgPSA0
ICsgKDggKyBzdWJDaHVuazFTaXplKSArICg4ICsgc3ViQ2h1bmsyU2l6ZSk7CisKKyAgICB3cml0
ZVN0cmluZygiUklGRiIsIHdhdmVGaWxlRGF0YSwgMCk7CisgICAgd3JpdGVJbnQzMihjaHVua1Np
emUsIHdhdmVGaWxlRGF0YSwgNCk7CisgICAgd3JpdGVTdHJpbmcoIldBVkUiLCB3YXZlRmlsZURh
dGEsIDgpOworICAgIHdyaXRlU3RyaW5nKCJmbXQgIiwgd2F2ZUZpbGVEYXRhLCAxMik7CisgICAg
CisgICAgd3JpdGVJbnQzMihzdWJDaHVuazFTaXplLCB3YXZlRmlsZURhdGEsIDE2KTsgICAgICAv
LyBTdWJDaHVuazFTaXplICg0KQorICAgIHdyaXRlSW50MTYoMSwgd2F2ZUZpbGVEYXRhLCAyMCk7
ICAgICAgICAgICAgICAgICAgLy8gQXVkaW9Gb3JtYXQgKDIpCisgICAgd3JpdGVJbnQxNihudW1i
ZXJPZkNoYW5uZWxzLCB3YXZlRmlsZURhdGEsIDIyKTsgICAvLyBOdW1DaGFubmVscyAoMikKKyAg
ICB3cml0ZUludDMyKHNhbXBsZVJhdGUsIHdhdmVGaWxlRGF0YSwgMjQpOyAgICAgICAgIC8vIFNh
bXBsZVJhdGUgKDQpCisgICAgd3JpdGVJbnQzMihieXRlUmF0ZSwgd2F2ZUZpbGVEYXRhLCAyOCk7
ICAgICAgICAgICAvLyBCeXRlUmF0ZSAoNCkKKyAgICB3cml0ZUludDE2KGJsb2NrQWxpZ24sIHdh
dmVGaWxlRGF0YSwgMzIpOyAgICAgICAgIC8vIEJsb2NrQWxpZ24gKDIpCisgICAgd3JpdGVJbnQz
MihiaXRzUGVyU2FtcGxlLCB3YXZlRmlsZURhdGEsIDM0KTsgICAgICAvLyBCaXRzUGVyU2FtcGxl
ICg0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgd3JpdGVTdHJpbmcoImRhdGEiLCB3YXZlRmlsZURhdGEsIDM2KTsgICAgICAgICAg
ICAKKyAgICB3cml0ZUludDMyKHN1YkNodW5rMlNpemUsIHdhdmVGaWxlRGF0YSwgNDApOyAgICAg
IC8vIFN1YkNodW5rMlNpemUgKDQpCisgICAgCisgICAgLy8gV3JpdGUgYWN0dWFsIGF1ZGlvIGRh
dGEgc3RhcnRpbmcgYXQgb2Zmc2V0IDQ0LgorICAgIHdyaXRlQXVkaW9CdWZmZXIoYXVkaW9CdWZm
ZXIsIHdhdmVGaWxlRGF0YSwgNDQpOworICAgIAorICAgIHJldHVybiB3YXZlRmlsZURhdGE7Cit9
CisKK2Z1bmN0aW9uIGNyZWF0ZUVuY29kZWRBdWRpb0RhdGEoYXVkaW9CdWZmZXIpIHsKKyAgICB2
YXIgd2F2ZUZpbGVEYXRhID0gY3JlYXRlV2F2ZUZpbGVEYXRhKGF1ZGlvQnVmZmVyKTsKKyAgICBy
ZXR1cm4gZW5jb2RlNjQod2F2ZUZpbGVEYXRhKTsKK30KSW5kZXg6IExheW91dFRlc3RzL3dlYmF1
ZGlvL3Rlc3QtYmFzaWMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJhdWRpby90
ZXN0LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93ZWJhdWRpby90ZXN0
LWJhc2ljLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzwhLS0KK1RoaXMgaXMg
YSB2ZXJ5IGJhc2ljIHRlc3QgdG8gbWFrZSBzdXJlIGxheW91dFRlc3RDb250cm9sbGVyLnNldEVu
Y29kZWRBdWRpb0RhdGEoKSB3b3JrcyBjb3JyZWN0bHkuCitJdCBnZW5lcmF0ZXMgYSA0IHNlY29u
ZHMgbG9uZyBzdGVyZW8gcmVzdWx0IEA0NC4xS0h6CitUaGUgbGVmdCBjaGFubmVsIHdpbGwgYmUg
YSA4ODBIeiB0b25lLCB3aGlsZSB0aGUgcmlnaHQgd2lsbCBiZSA0NDBIei4KKy0tPgorCis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYXVkaW8tdGVz
dGluZy5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisKK3dpbmRvdy5vbmxvYWQgPSBpbml0Owor
Cit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisKK2Z1bmN0aW9uIGdlbmVyYXRlU2luV2F2ZShh
dWRpb0J1ZmZlcikgeworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBj
aGFubmVsTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworICAgIHZhciBjaGFubmVs
UiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworICAgIHZhciBzYW1wbGVSYXRlID0g
YXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTsKKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47
ICsraSkgeworICAgICAgICBjaGFubmVsTFtpXSA9IE1hdGguc2luKDg4MC4wICogMi4wKk1hdGgu
UEkgKiBpIC8gc2FtcGxlUmF0ZSk7CisgICAgICAgIGNoYW5uZWxSW2ldID0gTWF0aC5zaW4oNDQw
LjAgKiAyLjAqTWF0aC5QSSAqIGkgLyBzYW1wbGVSYXRlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9u
IGluaXQoKSB7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250
ZXh0KCk7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMiwgNCAq
IHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOworICAgIAorICAgIGdlbmVyYXRlU2luV2F2ZShhdWRp
b0J1ZmZlcik7CisKKyAgICB2YXIgZW5jb2RlZEF1ZGlvRGF0YSA9IGNyZWF0ZUVuY29kZWRBdWRp
b0RhdGEoYXVkaW9CdWZmZXIpOworCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0RW5jb2Rl
ZEF1ZGlvRGF0YShlbmNvZGVkQXVkaW9EYXRhKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88533</attachid>
            <date>2011-04-06 15:36:49 -0700</date>
            <delta_ts>2011-04-06 20:55:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57969-20110406153648.patch</filename>
            <type>text/plain</type>
            <size>7411</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzMDgwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDQtMDYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgd2Vi
IGF1ZGlvIHN1cHBvcnQgdG8gRHVtcFJlbmRlclRyZWUgKG1hYyBwb3J0KQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5NjkKKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChzZXRFbmNvZGVk
QXVkaW9EYXRhQ2FsbGJhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRp
Y0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQXNBdWRpbyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RHVtcEFzQXVkaW8pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEVuY29kZWRBdWRpb0RhdGEpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGR1bXBBdWRpbyk6CisgICAgICAg
IChkdW1wKToKKwogMjAxMS0wNC0wNiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODI5NjMp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBz
dGQ6OnN0cmluZyYgZXhwZWN0ZWRQaXhlbEhhc2gpCiAgICAgOiBtX2R1bXBBcHBsaWNhdGlvbkNh
Y2hlRGVsZWdhdGVDYWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2R1bXBBc0F1ZGlvKGZhbHNlKQog
ICAgICwgbV9kdW1wQXNQREYoZmFsc2UpCiAgICAgLCBtX2R1bXBBc1RleHQoZmFsc2UpCiAgICAg
LCBtX2R1bXBCYWNrRm9yd2FyZExpc3QoZmFsc2UpCkBAIC0zMTUsNiArMzE2LDI1IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldENsb3NlUmVtYWluaW5nV2luZG8KICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldEVuY29kZWRB
dWRpb0RhdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW5jb2RlZEF1ZGlvRGF0
YShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgCisgICAgc2l6ZV90IG1heExl
bmd0aCA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShlbmNvZGVkQXVkaW9EYXRh
LmdldCgpKTsKKyAgICBPd25BcnJheVB0cjxjaGFyPiBlbmNvZGVkQXVkaW9EYXRhQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgY2hhclttYXhMZW5ndGggKyAxXSk7CisgICAgSlNTdHJpbmdHZXRV
VEY4Q1N0cmluZyhlbmNvZGVkQXVkaW9EYXRhLmdldCgpLCBlbmNvZGVkQXVkaW9EYXRhQnVmZmVy
LmdldCgpLCBtYXhMZW5ndGggKyAxKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldEVuY29kZWRBdWRpb0RhdGEo
ZW5jb2RlZEF1ZGlvRGF0YUJ1ZmZlci5nZXQoKSk7CisgICAgY29udHJvbGxlci0+c2V0RHVtcEFz
QXVkaW8odHJ1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiB0ZXN0T25zY3JlZW5DYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRy
b2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0yMjIxLDYgKzIyNDEsNyBAQCBKU1N0YXRpY0Z1bmN0aW9u
KiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldEFsd2F5c0FjY2VwdENvb2tp
ZXMiLCBzZXRBbHdheXNBY2NlcHRDb29raWVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSIsIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEiLCBzZXRB
cHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJz
ZXRFbmNvZGVkQXVkaW9EYXRhIiwgc2V0RW5jb2RlZEF1ZGlvRGF0YUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgInNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiLCBzZXRBdXRoZW50aWNhdGlv
blBhc3N3b3JkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0QXV0aGVudGljYXRpb25V
c2VybmFtZSIsIHNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsIHNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODI5NjMpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NiArMTM0LDkgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgaWQpOwogCisgICAgYm9vbCBkdW1wQXNBdWRpbygp
IGNvbnN0IHsgcmV0dXJuIG1fZHVtcEFzQXVkaW87IH0KKyAgICB2b2lkIHNldER1bXBBc0F1ZGlv
KGJvb2wgZHVtcEFzQXVkaW8pIHsgbV9kdW1wQXNBdWRpbyA9IGR1bXBBc0F1ZGlvOyB9CisgICAg
CiAgICAgYm9vbCBkdW1wQXNQREYoKSBjb25zdCB7IHJldHVybiBtX2R1bXBBc1BERjsgfQogICAg
IHZvaWQgc2V0RHVtcEFzUERGKGJvb2wgZHVtcEFzUERGKSB7IG1fZHVtcEFzUERGID0gZHVtcEFz
UERGOyB9CiAKQEAgLTI2Myw2ICsyNjYsOSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgdGVzdFBhdGhPclVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFBhdGhPclVSTDsgfQog
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhwZWN0ZWRQaXhlbEhhc2g7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVk
QXVkaW9EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkQXVkaW9EYXRhOyB9CisgICAgdm9p
ZCBzZXRFbmNvZGVkQXVkaW9EYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkQXVkaW9EYXRh
KSB7IG1fZW5jb2RlZEF1ZGlvRGF0YSA9IGVuY29kZWRBdWRpb0RhdGE7IH0KICAgICAKICAgICBi
b29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpOwogICAgIGJvb2wg
cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCk7CkBAIC0zMzQsNiArMzQw
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihi
b29sIGFsbG93KTsKIAogICAgIGJvb2wgbV9kdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2Fs
bGJhY2tzOworICAgIGJvb2wgbV9kdW1wQXNBdWRpbzsKICAgICBib29sIG1fZHVtcEFzUERGOwog
ICAgIGJvb2wgbV9kdW1wQXNUZXh0OwogICAgIGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0OwpA
QCAtMzgzLDYgKzM5MCw5IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4g
bV93aWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlcnM7CiAgICAgCisgICAgLy8gYmFzZTY0IGVuY29k
ZWQgV0FWIGF1ZGlvIGRhdGEgaXMgc3RvcmVkIGhlcmUuCisgICAgc3RkOjpzdHJpbmcgbV9lbmNv
ZGVkQXVkaW9EYXRhOworICAgIAogICAgIC8vIG9yaWdpbnMgd2hpY2ggaGF2ZSBiZWVuIGdyYW50
ZWQgZGVza3RvcCBub3RpZmljYXRpb24gYWNjZXNzCiAgICAgc3RkOjp2ZWN0b3I8SlNTdHJpbmdS
ZWY+IG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zOwogCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiA4Mjk2MykKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNzM0LDYgKzczNCwxNCBAQCBzdGF0aWMgTlNJbnRlZ2VyIGNvbXBhcmVIaXN0b3J5SXRl
bXMoaWQgCiAgICAgcmV0dXJuIFtbaXRlbTEgdGFyZ2V0XSBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
OltpdGVtMiB0YXJnZXRdXTsKIH0KIAorc3RhdGljIE5TRGF0YSAqZHVtcEF1ZGlvKCkKK3sKKyAg
ICBjb25zdCBjaGFyICplbmNvZGVkQXVkaW9EYXRhID0gZ0xheW91dFRlc3RDb250cm9sbGVyLT5l
bmNvZGVkQXVkaW9EYXRhKCkuY19zdHIoKTsKKyAgICAKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6ZW5jb2RlZEF1ZGlvRGF0YSBsZW5ndGg6Z0xheW91dFRlc3RDb250
cm9sbGVyLT5lbmNvZGVkQXVkaW9EYXRhKCkubGVuZ3RoKCldOworICAgIHJldHVybiBkYXRhOwor
fQorCiBzdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0oV2ViSGlzdG9yeUl0ZW0gKml0ZW0sIGlu
dCBpbmRlbnQsIEJPT0wgY3VycmVudCkKIHsKICAgICBpbnQgc3RhcnQgPSAwOwpAQCAtOTM3LDcg
Kzk0NSwxMCBAQCB2b2lkIGR1bXAoKQogICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXREdW1wQXNUZXh0KHRydWUpOwogICAgICAgICAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5zZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4dCgpKSB7CisgICAgICAgIGlmIChnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc0F1ZGlvKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdERh
dGEgPSBkdW1wQXVkaW8oKTsKKyAgICAgICAgICAgIHJlc3VsdE1pbWVUeXBlID0gQCJhdWRpby93
YXYiOworICAgICAgICB9IGVsc2UgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzVGV4
dCgpKSB7CiAgICAgICAgICAgICByZXN1bHRTdHJpbmcgPSBkdW1wRnJhbWVzQXNUZXh0KG1haW5G
cmFtZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wQXNQ
REYoKSkgewogICAgICAgICAgICAgcmVzdWx0RGF0YSA9IGR1bXBGcmFtZUFzUERGKG1haW5GcmFt
ZSk7CkBAIC05NjAsNiArOTcxLDkgQEAgdm9pZCBkdW1wKCkKIAogICAgICAgICBwcmludGYoIkNv
bnRlbnQtVHlwZTogJXNcbiIsIFtyZXN1bHRNaW1lVHlwZSBVVEY4U3RyaW5nXSk7CiAKKyAgICAg
ICAgaWYgKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEFzQXVkaW8oKSkKKyAgICAgICAgICAg
IHByaW50ZigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4iKTsgICAgICAgICAg
ICAKKyAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHREYXRhKSB7CiAgICAgICAgICAgICBmd3Jp
dGUoW3Jlc3VsdERhdGEgYnl0ZXNdLCAxLCBbcmVzdWx0RGF0YSBsZW5ndGhdLCBzdGRvdXQpOwog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>