<?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>39704</bug_id>
          
          <creation_ts>2010-05-25 17:54:00 -0700</creation_ts>
          <short_desc>readPixels with negative width/height should generate INVALID_VALUE and return</short_desc>
          <delta_ts>2010-06-11 08:03:52 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kbr</cc>
    
    <cc>levin</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230541</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-25 17:54:00 -0700</bug_when>
    <thetext>Currently readPixels will crash if width/height are negative.  Instead, INVALID_VALUE should be generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230543</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-25 17:58:27 -0700</bug_when>
    <thetext>Also, with very large width/height and WebGL*Array creation failure, a INVALID_VALUE error will generate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230556</commentid>
    <comment_count>2</comment_count>
      <attachid>57063</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-25 19:20:04 -0700</bug_when>
    <thetext>Created attachment 57063
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230887</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-26 14:15:37 -0700</bug_when>
    <thetext>What bug is this new line fixing?

 1707     memset(data, 0, totalBytes);

And does the layout test cover that? (If not, can it be added?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230905</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-26 14:34:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; What bug is this new line fixing?
&gt; 
&gt;  1707     memset(data, 0, totalBytes);
&gt; 
&gt; And does the layout test cover that? (If not, can it be added?)

This is not a bug fix.  For safety reason, we clear the buffer so users will not get access to content they should not.  According to GLES spec, for the un-covered portion of the memory, their content is un-defined.  I don&apos;t think we should write a definitive test against something undefined, because whatever the content is, it should not be &quot;incorrect&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230917</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-26 14:40:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; What bug is this new line fixing?
&gt; &gt; 
&gt; &gt;  1707     memset(data, 0, totalBytes);
&gt; &gt; 
&gt; &gt; And does the layout test cover that? (If not, can it be added?)
&gt; 
&gt; This is not a bug fix.  For safety reason, we clear the buffer so users will not get access to content they should not.  According to GLES spec, for the un-covered portion of the memory, their content is un-defined.  I don&apos;t think we should write a definitive test against something undefined, because whatever the content is, it should not be &quot;incorrect&quot;.

Should it be set to something (like -10 for example) that is less likely to make users rely on undefined behavior?

0 tends to make things just work (that maybe shouldn&apos;t) and thus hide problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230918</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-26 14:41:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; What bug is this new line fixing?
&gt; &gt; 
&gt; &gt;  1707     memset(data, 0, totalBytes);
&gt; &gt; 
&gt; &gt; And does the layout test cover that? (If not, can it be added?)
&gt; 
&gt; This is not a bug fix.  For safety reason, we clear the buffer so users will not get access to content they should not.  According to GLES spec, for the un-covered portion of the memory, their content is un-defined.  I don&apos;t think we should write a definitive test against something undefined, because whatever the content is, it should not be &quot;incorrect&quot;.


There should be a test, otherwise there&apos;s nothing to verify that the data is safe -- if some other implementation decides to produces something other than a zero-filled buffer they can add platform specific expected results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230934</commentid>
    <comment_count>7</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-26 14:51:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; What bug is this new line fixing?
&gt; &gt; &gt; 
&gt; &gt; &gt;  1707     memset(data, 0, totalBytes);
&gt; &gt; &gt; 
&gt; &gt; &gt; And does the layout test cover that? (If not, can it be added?)
&gt; &gt; 
&gt; &gt; This is not a bug fix.  For safety reason, we clear the buffer so users will not get access to content they should not.  According to GLES spec, for the un-covered portion of the memory, their content is un-defined.  I don&apos;t think we should write a definitive test against something undefined, because whatever the content is, it should not be &quot;incorrect&quot;.
&gt; 
&gt; Should it be set to something (like -10 for example) that is less likely to make users rely on undefined behavior?
&gt; 
&gt; 0 tends to make things just work (that maybe shouldn&apos;t) and thus hide problems.

Good point.  I&apos;ll double check WebGL spec, if it doesn&apos;t have extra constraints about buffers initialized to 0, I&apos;ll use an odd number instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230935</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-26 14:51:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; What bug is this new line fixing?
&gt; &gt; &gt; 
&gt; &gt; &gt;  1707     memset(data, 0, totalBytes);
&gt; &gt; &gt; 
&gt; &gt; &gt; And does the layout test cover that? (If not, can it be added?)
&gt; &gt; 
&gt; &gt; This is not a bug fix.  For safety reason, we clear the buffer so users will not get access to content they should not.  According to GLES spec, for the un-covered portion of the memory, their content is un-defined.  I don&apos;t think we should write a definitive test against something undefined, because whatever the content is, it should not be &quot;incorrect&quot;.
&gt; 
&gt; 
&gt; There should be a test, otherwise there&apos;s nothing to verify that the data is safe -- if some other implementation decides to produces something other than a zero-filled buffer they can add platform specific expected results.

Ok, will add a case then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230951</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-26 15:07:44 -0700</bug_when>
    <thetext>ReadPixels signature will change.  This patch becomes invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236562</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-10 15:24:25 -0700</bug_when>
    <thetext>Due to https://bugs.webkit.org/show_bug.cgi?id=40322, negative width/height will no longer cause crash, but still, we need to deal with it correctly, i.e., generate INVALID_VALUE and return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236563</commentid>
    <comment_count>11</comment_count>
      <attachid>58418</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-10 15:28:01 -0700</bug_when>
    <thetext>Created attachment 58418
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236599</commentid>
    <comment_count>12</comment_count>
      <attachid>58418</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-10 17:30:58 -0700</bug_when>
    <thetext>Comment on attachment 58418
patch

WebCore/html/canvas/WebGLRenderingContext.cpp:1673
 +      }
Let&apos;s put this check right after the NULL check for the &quot;pixels&quot; argument tomorrow to try to follow the request for prioritization of error returns from Mozilla:
https://www.khronos.org/webgl/public-mailing-list/archives/1006/msg00040.html


LayoutTests/fast/canvas/webgl/read-pixels.html:184
 +          return;
Should presumably say:

} else if (!array.length) {
    shouldBe(&quot;gl.getError()&quot;, &quot;gl.NO_ERROR&quot;);
    return;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236608</commentid>
    <comment_count>13</comment_count>
      <attachid>58426</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-10 17:50:57 -0700</bug_when>
    <thetext>Created attachment 58426
revised patch: responding to kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236611</commentid>
    <comment_count>14</comment_count>
      <attachid>58426</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-10 17:55:24 -0700</bug_when>
    <thetext>Comment on attachment 58426
revised patch: responding to kbr&apos;s review

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236671</commentid>
    <comment_count>15</comment_count>
      <attachid>58426</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-10 21:34:21 -0700</bug_when>
    <thetext>Comment on attachment 58426
revised patch: responding to kbr&apos;s review

Make it so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236827</commentid>
    <comment_count>16</comment_count>
      <attachid>58426</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-11 08:03:46 -0700</bug_when>
    <thetext>Comment on attachment 58426
revised patch: responding to kbr&apos;s review

Clearing flags on attachment: 58426

Committed r61019: &lt;http://trac.webkit.org/changeset/61019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236828</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-11 08:03:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57063</attachid>
            <date>2010-05-25 19:20:04 -0700</date>
            <delta_ts>2010-06-10 15:28:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pixel.patch</filename>
            <type>text/plain</type>
            <size>11329</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDIwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDUtMjUgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZWFkUGl4
ZWxzIG11c3Qgbm90IGNyYXNoIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTcwNAorCisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6IEhhbmRsZSBuZWdhdGl2ZSB3aWR0
aC9oZWlnaHQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6
IENoYW5nZSB3aWR0aC9oZWlnaHQgdHlwZSBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gbG9uZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOiBEaXR0by4KKwog
MjAxMC0wNS0yNCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYwMjA0KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQy
LDcgKzE2NDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNlCiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCBs
b25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgdHlwZSkKIHsKICAgICAvLyBWYWxpZGF0ZSBlbnVtcy4KICAgICB1bnNpZ25lZCBsb25nIGNv
bXBvbmVudHNQZXJQaXhlbCA9IDA7CkBAIC0xNjc5LDYgKzE2NzksMTAgQEAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IFdlYkdMUmVuZGVyaQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICAvLyBDYWxjdWxhdGUg
YXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4K
ICAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyUm93ID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0
ZXNQZXJDb21wb25lbnQgKiB3aWR0aDsKICAgICB1bnNpZ25lZCBsb25nIHBhZGRpbmcgPSAwOwpA
QCAtMTY5NSw3ICsxNjk5LDEyIEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBXZWJHTFJl
bmRlcmkKICAgICAgICAgYXJyYXkgPSBVaW50OEFycmF5OjpjcmVhdGUobnVtKTsKICAgICBlbHNl
CiAgICAgICAgIGFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShudW0pOworICAgIGlmICghYXJy
YXkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB2b2lk
KiBkYXRhID0gYXJyYXktPmJhc2VBZGRyZXNzKCk7CisgICAgbWVtc2V0KGRhdGEsIDAsIHRvdGFs
Qnl0ZXMpOwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEpOwogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgaXMgZml4ZWQsIGkuZS4s
CkBAIC0xNzAzLDggKzE3MTIsOCBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gV2ViR0xS
ZW5kZXJpCiAgICAgaWYgKChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBIHx8IGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYSkgewogICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxz
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGxvbmcgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKKyAg
ICAgICAgICAgIGZvciAobG9uZyBpeSA9IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7CisgICAgICAg
ICAgICAgICAgZm9yIChsb25nIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgewogICAgICAgICAg
ICAgICAgICAgICBwaXhlbHNbY29tcG9uZW50c1BlclBpeGVsIC0gMV0gPSAyNTU7CiAgICAgICAg
ICAgICAgICAgICAgIHBpeGVscyArPSBjb21wb25lbnRzUGVyUGl4ZWw7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
CShyZXZpc2lvbiA2MDIwNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBjbGFzcyBXZWJLaXRD
U1NNYXRyaXg7CiAgICAgICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwg
bG9uZyBwYXJhbSk7CiAgICAgICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBk
b3VibGUgdW5pdHMpOwogICAgICAgICAKLSAgICAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBl
KTsKKyAgICAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCk7CiAgICAgICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkocmV2aXNpb24gNjAyMDQpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTU5NSw3ICs1OTUsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIHZvaWQgICAgICAgICBwaXhl
bFN0b3JlaShpbiB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbiBsb25nIHBhcmFtKTsKICAgICAgICAg
dm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoaW4gZG91YmxlIGZhY3RvciwgaW4gZG91YmxlIHVu
aXRzKTsKIAotICAgICAgICBBcnJheUJ1ZmZlclZpZXcgcmVhZFBpeGVscyhpbiBsb25nIHgsIGlu
IGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQs
IGluIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCBpbiB1bnNpZ25lZCBsb25nIHR5cGUpOworICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcgcmVhZFBpeGVscyhpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9u
ZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQsIGluIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCBpbiB1bnNp
Z25lZCBsb25nIHR5cGUpOwogICAgICAgICAKICAgICAgICAgdm9pZCAgICAgICAgIHJlbGVhc2VT
aGFkZXJDb21waWxlcigpOwogICAgICAgICB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFn
ZShpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjAyMDQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNS0yNSAgWmhlbnlhbyBNbyAgPHptb0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IHJlYWRQaXhlbHMgbXVzdCBub3QgY3Jhc2ggd2l0aCBuZWdhdGl2ZSB3aWR0aC9oZWlnaHQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NzA0CisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQ6IFRlc3Qg
cmVhZFBpeGVscyB3aXRoIG5lZ2F0aXZlLzAgd2lkdGgvaGVpZ2h0LgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWw6IERpdHRvLgorCiAyMDEwLTA1LTI1ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBw
aXhlbCBleHBlY3RhdGlvbnMgY2hhbmdlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MDIw
NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwzNCBAQCBQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQogUEFT
UyAyNTUsMTAyLDAsMjU1IGlzIG5vbi1udWxsLgogUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9y
CitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tf
QUxJR05NRU5UID0gMiwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBh
cnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwg
d2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMg
ZXhwZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAwLCBoZWln
aHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitU
ZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAtMSwgaGVpZ2h0ID0gMQorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5W
QUxJRF9WQUxVRQorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDIsIHdpZHRoID0gMSwgaGVpZ2h0
ID0gLTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLklOVkFMSURfVkFMVUUKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0
aCA9IDAsIGhlaWdodCA9IC0xCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX1ZBTFVFCitUZXN0aW5nIFBBQ0tfQUxJR05N
RU5UID0gOCwgd2lkdGggPSAtMSwgaGVpZ2h0ID0gLTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUKIFRlc3Rp
bmcgdGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbgogVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgogUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCkBAIC0yMDEsNiArMjI5LDM0IEBAIFBBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgogUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCiBQQVNT
IDI1NSwxMDIsMCwwIGlzIG5vbi1udWxsLgogUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCitU
ZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tfQUxJ
R05NRU5UID0gMiwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJh
eS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lk
dGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhw
ZWN0ZWRTaXplCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAwLCBoZWlnaHQg
PSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitUZXN0
aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAtMSwgaGVpZ2h0ID0gMQorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJ
RF9WQUxVRQorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDIsIHdpZHRoID0gMSwgaGVpZ2h0ID0g
LTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLklOVkFMSURfVkFMVUUKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9
IDAsIGhlaWdodCA9IC0xCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX1ZBTFVFCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5U
ID0gOCwgd2lkdGggPSAtMSwgaGVpZ2h0ID0gLTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy5odG1sCShyZXZpc2lvbiA2MDIw
NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE2MCw2ICsxNjAsMTAgQEAgZnVuY3Rpb24gcnVuVGVzdEl0ZXJhdGlv
bihmb3JtYXQsIHR5cGUsIAogICAgIGdsLnBpeGVsU3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5ULCBw
YWNrQWxpZ25tZW50KTsKICAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJP
UiIpOwogICAgIGFycmF5ID0gZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUpOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
aG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX1ZBTFVFIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1Ii
KTsKICAgICB2YXIgYnl0ZXNQZXJQaXhlbCA9IGNhbGN1bGF0ZVBpeGVsQnl0ZXMoZm9ybWF0LCB0
eXBlKTsKICAgICB2YXIgcGFkZGluZyA9IGNhbGN1bGF0ZVBhZGRpbmdCeXRlcyhieXRlc1BlclBp
eGVsLCBwYWNrQWxpZ25tZW50LCB3aWR0aCk7CkBAIC0xNzQsNiArMTc4LDggQEAgZnVuY3Rpb24g
cnVuVGVzdEl0ZXJhdGlvbihmb3JtYXQsIHR5cGUsIAogICAgIGlmIChpc1Nob3J0KQogICAgICAg
ICBleHBlY3RlZFNpemUgLz0gMjsKICAgICBzaG91bGRCZSgiYXJyYXkubGVuZ3RoIiwgImV4cGVj
dGVkU2l6ZSIpOworICAgIGlmICghYXJyYXkubGVuZ3RoKQorICAgICAgICByZXR1cm47CiAgICAg
Ly8gQ2hlY2sgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3Qgcm93LgogICAgIHZhciBieXRlc1Bl
clJvdyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbCArIHBhZGRpbmc7CiAgICAgdmFyIHBvcyA9IGJ5
dGVzUGVyUm93ICogKGhlaWdodCAtIDEpICsgKHdpZHRoIC0gMSkgKiBieXRlc1BlclBpeGVsOwpA
QCAtMjI1LDYgKzIzMSwxNCBAQCBydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVE
X0JZCiBydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDYsIDIp
OwogcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA3LCAyKTsK
IHJ1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgOCwgMik7City
dW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDEsIDAsIDApOworcnVu
VGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAyLCAwLCAwKTsKK3J1blRl
c3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgMCwgMCk7CitydW5UZXN0
SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDAsIDApOworcnVuVGVzdEl0
ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAxLCAtMSwgMSk7CitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDIsIDEsIC0xKTsKK3J1blRlc3RJdGVy
YXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgMCwgLTEpOworcnVuVGVzdEl0ZXJh
dGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCAtMSwgLTEpOwogCiBkZWJ1ZygiVGVz
dGluZyB0aGUgb3RoZXIgc3VwcG9ydGVkIGZvcm1hdC90eXBlIGNvbWJpbmF0aW9uIik7CiBydW5U
ZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDEsIDEsIDIpOwpAQCAtMjQzLDYg
KzI1NywxNCBAQCBydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsCiBydW5U
ZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDYsIDIpOwogcnVuVGVzdEl0
ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA3LCAyKTsKIHJ1blRlc3RJdGVyYXRp
b24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgOCwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBp
eGVsRm9ybWF0LCBwaXhlbFR5cGUsIDEsIDAsIDApOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZv
cm1hdCwgcGl4ZWxUeXBlLCAyLCAwLCAwKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQs
IHBpeGVsVHlwZSwgNCwgMCwgMCk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhl
bFR5cGUsIDgsIDAsIDApOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBl
LCAxLCAtMSwgMSk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDIs
IDEsIC0xKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgMCwg
LTEpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCAtMSwgLTEp
OwogCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58418</attachid>
            <date>2010-06-10 15:28:01 -0700</date>
            <delta_ts>2010-06-10 17:50:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>readpixels.patch</filename>
            <type>text/plain</type>
            <size>9954</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDk3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZWFkUGl4
ZWxzIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0IHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX1ZB
TFVFIGFuZCByZXR1cm4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NzA0CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwOiBEZWFsIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0LgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDogQ2hhbmdlIHdpZHRoL2hlaWdodCB0eXBlIGZy
b20gdW5zaWduZWQgbG9uZyB0byBsb25nLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5pZGw6IERpdHRvLgorCiAyMDEwLTA2LTEwICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gNjA5NzEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjQsOSArMTY2NCwxMyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNlCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwg
bG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCiB7Ci0gICAgLy8gVmFs
aWRhdGUgZW51bXMuCisgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgdW5zaWduZWQgbG9uZyBjb21wb25lbnRzUGVyUGl4ZWwgPSAwOwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CkBA
IC0xNzM0LDggKzE3MzgsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVs
cyhsCiAgICAgaWYgKChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBIHx8IGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKS5hbHBoYSkgewogICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvbmcgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgewotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbG9uZyBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKKyAgICAg
ICAgICAgIGZvciAobG9uZyBpeSA9IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7CisgICAgICAgICAg
ICAgICAgZm9yIChsb25nIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgewogICAgICAgICAgICAg
ICAgICAgICBwaXhlbHNbY29tcG9uZW50c1BlclBpeGVsIC0gMV0gPSAyNTU7CiAgICAgICAgICAg
ICAgICAgICAgIHBpeGVscyArPSBjb21wb25lbnRzUGVyUGl4ZWw7CiAgICAgICAgICAgICAgICAg
fQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiA2MDk3MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw5ICsxODEsNyBAQCBjbGFzcyBXZWJLaXRDU1NN
YXRyaXg7CiAgICAgICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9u
Q29kZSYpOwogICAgICAgICB2b2lkIHBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxv
bmcgcGFyYW0pOwogICAgICAgICB2b2lkIHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91
YmxlIHVuaXRzKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
KTsKLSAgICAgICAgCisgICAgICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgbG9u
ZyB3aWR0aCwgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKICAgICAgICAgdm9pZCByZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKTsKICAgICAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgICAgIHZvaWQgc2FtcGxlQ292ZXJh
Z2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiA2MDk3MSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNTk1LDcgKzU5NSw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCAgICAgICAgIHBp
eGVsU3RvcmVpKGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGluIGxvbmcgcGFyYW0pOwogICAgICAg
ICB2b2lkICAgICAgICAgcG9seWdvbk9mZnNldChpbiBkb3VibGUgZmFjdG9yLCBpbiBkb3VibGUg
dW5pdHMpOwogCi0gICAgICAgIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKGluIGxvbmcgeCwgaW4g
bG9uZyB5LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwg
aW4gdW5zaWduZWQgbG9uZyBmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4gQXJyYXlC
dWZmZXJWaWV3IHBpeGVscyk7CisgICAgICAgIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKGluIGxv
bmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gdW5zaWdu
ZWQgbG9uZyBmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4gQXJyYXlCdWZmZXJWaWV3
IHBpeGVscyk7CiAgICAgICAgIAogICAgICAgICB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNv
bXBpbGVyKCk7CiAgICAgICAgIHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKGluIHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBpbiB1
bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MDk3OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmVhZFBp
eGVscyB3aXRoIG5lZ2F0aXZlIHdpZHRoL2hlaWdodCBzaG91bGQgZ2VuZXJhdGUgSU5WQUxJRF9W
QUxVRSBhbmQgcmV0dXJuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zOTcwNAorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMt
ZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlcyBmb3Igbm9uLXBvc2l0aXZlIHdpZHRoL2hlaWdo
dC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy5odG1sOiBEaXR0by4K
KwogMjAxMC0wNi0xMCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2MDk3MSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
YWQtcGl4ZWxzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMjYgQEAg
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKIFBBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KIFBBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMCwg
aGVpZ2h0ID0gMAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitUZXN0aW5nIFBB
Q0tfQUxJR05NRU5UID0gMiwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDAs
IGhlaWdodCA9IDAKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMAorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAt
MSwgaGVpZ2h0ID0gMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9
IDIsIHdpZHRoID0gMSwgaGVpZ2h0ID0gLTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUKK1Rlc3RpbmcgUEFD
S19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDAsIGhlaWdodCA9IC0xCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX1ZBTFVF
CitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAtMSwgaGVpZ2h0ID0gLTEKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
LklOVkFMSURfVkFMVUUKIFRlc3RpbmcgdGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBj
b21iaW5hdGlvbgogVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwgaGVpZ2h0
ID0gMgogUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCkBAIC0xNjksNiArMTg5LDI2
IEBAIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCiBQQVNTIDI1NSwxMDIsMCwwIGlzIG5vbi1udWxsLgogUEFTUyBwaXhl
bCBpcyBleHBlY3RlZENvbG9yCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAw
LCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1Rlc3Rpbmcg
UEFDS19BTElHTk1FTlQgPSAyLCB3aWR0aCA9IDAsIGhlaWdodCA9IDAKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0g
MCwgaGVpZ2h0ID0gMAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitUZXN0aW5n
IFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAxLCB3aWR0aCA9
IC0xLCBoZWlnaHQgPSAxCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX1ZBTFVFCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5U
ID0gMiwgd2lkdGggPSAxLCBoZWlnaHQgPSAtMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQorVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gLTEKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFM
VUUKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IC0xLCBoZWlnaHQgPSAtMQor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuSU5WQUxJRF9WQUxVRQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVs
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQt
cGl4ZWxzLmh0bWwJKHJldmlzaW9uIDYwOTcxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVhZC1waXhlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDExICsxNzAsMTgg
QEAgZnVuY3Rpb24gcnVuVGVzdEl0ZXJhdGlvbihmb3JtYXQsIHR5cGUsIAogICAgIH0KICAgICBp
ZiAoaXNTaG9ydCkKICAgICAgICAgc2l6ZSAvPSAyOworICAgIGlmIChzaXplIDwgMCkKKyAgICAg
ICAgc2l6ZSA9IDA7CiAgICAgaWYgKHR5cGUgPT0gZ2wuVU5TSUdORURfQllURSkKICAgICAgICAg
YXJyYXkgPSBuZXcgVWludDhBcnJheShzaXplKTsKICAgICBlbHNlCiAgICAgICAgIGFycmF5ID0g
bmV3IFVpbnQxNkFycmF5KHNpemUpOwogICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheSk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKSB7CisgICAgICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLklOVkFMSURfVkFM
VUUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoIWFycmF5Lmxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuOwogICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9S
Iik7CiAgICAgLy8gQ2hlY2sgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3Qgcm93LgogICAgIHZh
ciBieXRlc1BlclJvdyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbCArIHBhZGRpbmc7CkBAIC0yMjcs
NiArMjM0LDE0IEBAIHJ1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQlkKIHJ1
blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgNiwgMik7CiBydW5U
ZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDcsIDIpOwogcnVuVGVz
dEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA4LCAyKTsKK3J1blRlc3RJ
dGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgMSwgMCwgMCk7CitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDIsIDAsIDApOworcnVuVGVzdEl0ZXJh
dGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCAwLCAwKTsKK3J1blRlc3RJdGVyYXRp
b24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgMCwgMCk7CitydW5UZXN0SXRlcmF0aW9u
KGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDEsIC0xLCAxKTsKK3J1blRlc3RJdGVyYXRpb24o
Z2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgMiwgMSwgLTEpOworcnVuVGVzdEl0ZXJhdGlvbihn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCAwLCAtMSk7CitydW5UZXN0SXRlcmF0aW9uKGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIC0xLCAtMSk7CiAKIGRlYnVnKCJUZXN0aW5nIHRo
ZSBvdGhlciBzdXBwb3J0ZWQgZm9ybWF0L3R5cGUgY29tYmluYXRpb24iKTsKIHJ1blRlc3RJdGVy
YXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgMSwgMSwgMik7CkBAIC0yNDUsNiArMjYwLDE0
IEBAIHJ1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwKIHJ1blRlc3RJdGVy
YXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgNiwgMik7CiBydW5UZXN0SXRlcmF0aW9u
KHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDcsIDIpOwogcnVuVGVzdEl0ZXJhdGlvbihwaXhl
bEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA4LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3Jt
YXQsIHBpeGVsVHlwZSwgMSwgMCwgMCk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBw
aXhlbFR5cGUsIDIsIDAsIDApOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxU
eXBlLCA0LCAwLCAwKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwg
OCwgMCwgMCk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDEsIC0x
LCAxKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgMiwgMSwgLTEp
OworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0LCAwLCAtMSk7City
dW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIC0xLCAtMSk7CiAKIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58426</attachid>
            <date>2010-06-10 17:50:57 -0700</date>
            <delta_ts>2010-06-11 08:03:45 -0700</delta_ts>
            <desc>revised patch: responding to kbr&apos;s review</desc>
            <filename>readpixels.patch</filename>
            <type>text/plain</type>
            <size>10817</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDk3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZWFkUGl4
ZWxzIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0IHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX1ZB
TFVFIGFuZCByZXR1cm4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM5NzA0CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwOiBEZWFsIHdpdGggbmVnYXRpdmUgd2lkdGgvaGVpZ2h0LgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDogQ2hhbmdlIHdpZHRoL2hlaWdodCB0eXBlIGZy
b20gdW5zaWduZWQgbG9uZyB0byBsb25nLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5pZGw6IERpdHRvLgorCiAyMDEwLTA2LTEwICBEYXZpZCBIeWF0dCAgPGh5
YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gNjA5NzEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjQsOSArMTY2NCw5IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2UKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsb25n
IHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVu
c2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4LCBs
b25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKIHsKLSAgICAvLyBWYWxp
ZGF0ZSBlbnVtcy4KKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgogICAgIHVuc2ln
bmVkIGxvbmcgY29tcG9uZW50c1BlclBpeGVsID0gMDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgpAQCAtMTcwMSw2ICsxNzAxLDEwIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwKICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghKChm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSkgfHwgKGZvcm1hdCA9PSBtX2ltcGxlbWVudGF0aW9uQ29sb3JS
ZWFkRm9ybWF0ICYmIHR5cGUgPT0gbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZFR5cGUpKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKQEAgLTE3MzQsOCArMTczOCw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwKICAgICBpZiAoKGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7
CiAgICAgICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpeSA9
IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b25nIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgeworICAgICAgICAgICAgZm9yIChsb25nIGl5
ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxvbmcgaXgg
PSAwOyBpeCA8IHdpZHRoOyArK2l4KSB7CiAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1tjb21w
b25lbnRzUGVyUGl4ZWwgLSAxXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzICs9
IGNvbXBvbmVudHNQZXJQaXhlbDsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYwOTcxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTgxLDkgKzE4MSw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgdm9p
ZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZv
aWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7CiAgICAgICAg
IHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOwotICAgICAg
ICAKLSAgICAgICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpOwotICAgICAgICAKKyAgICAg
ICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdo
dCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJW
aWV3KiBwaXhlbHMpOwogICAgICAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogICAg
ICAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKICAgICAgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJv
b2wgaW52ZXJ0KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5pZGwJKHJldmlzaW9uIDYwOTcxKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01OTUsNyArNTk1LDcgQEAg
bW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoaW4gdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW4gbG9uZyBwYXJhbSk7CiAgICAgICAgIHZvaWQgICAgICAgICBwb2x5
Z29uT2Zmc2V0KGluIGRvdWJsZSBmYWN0b3IsIGluIGRvdWJsZSB1bml0cyk7CiAKLSAgICAgICAg
dm9pZCAgICAgICAgIHJlYWRQaXhlbHMoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25nIGZv
cm1hdCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlLCBpbiBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIHJlYWRQaXhlbHMoaW4gbG9uZyB4LCBpbiBsb25nIHksIGlu
IGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25nIGZvcm1hdCwgaW4g
dW5zaWduZWQgbG9uZyB0eXBlLCBpbiBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICAgICAg
dm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQs
IGluIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwOTc4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTAtMDYtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZWFkUGl4ZWxzIHdpdGggbmVnYXRpdmUg
d2lkdGgvaGVpZ2h0IHNob3VsZCBnZW5lcmF0ZSBJTlZBTElEX1ZBTFVFIGFuZCByZXR1cm4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NzA0CisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQ6IEFkZCB0
ZXN0IGNhc2VzIGZvciBub24tcG9zaXRpdmUgd2lkdGgvaGVpZ2h0LgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWw6IERpdHRvLgorCiAyMDEwLTA2LTEwICBSb2Jl
cnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3JlYWQtcGl4ZWxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYwOTcx
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCwzMCBAQCBQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyAy
NTUsMTAyLDAsMjU1IGlzIG5vbi1udWxsLgogUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCitU
ZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDIsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMAor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDAsIGhlaWdo
dCA9IDAKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAw
LCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdp
ZHRoID0gLTEsIGhlaWdodCA9IDEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUKK1Rlc3RpbmcgUEFDS19BTElH
Tk1FTlQgPSAyLCB3aWR0aCA9IDEsIGhlaWdodCA9IC0xCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZBTElEX1ZBTFVFCitUZXN0
aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAtMQorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJ
RF9WQUxVRQorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gLTEsIGhlaWdodCA9
IC0xCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5JTlZBTElEX1ZBTFVFCiBUZXN0aW5nIHRoZSBvdGhlciBzdXBwb3J0ZWQgZm9ybWF0
L3R5cGUgY29tYmluYXRpb24KIFRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAxLCB3aWR0aCA9IDEs
IGhlaWdodCA9IDIKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgpAQCAtMTY5LDYg
KzE5MywzMCBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KIFBB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMAorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1Rlc3RpbmcgUEFDS19BTElHTk1FTlQg
PSAyLCB3aWR0aCA9IDAsIGhlaWdodCA9IDAKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitUZXN0aW5nIFBBQ0tfQUxJ
R05NRU5UID0gNCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMAorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1Rl
c3RpbmcgUEFDS19BTElHTk1FTlQgPSAxLCB3aWR0aCA9IC0xLCBoZWlnaHQgPSAxCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5JTlZB
TElEX1ZBTFVFCitUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMiwgd2lkdGggPSAxLCBoZWlnaHQg
PSAtMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRo
ID0gMCwgaGVpZ2h0ID0gLTEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfVkFMVUUKK1Rlc3RpbmcgUEFDS19BTElHTk1F
TlQgPSA4LCB3aWR0aCA9IC0xLCBoZWlnaHQgPSAtMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwJKHJldmlzaW9uIDYw
OTcxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMjEgQEAgZnVuY3Rpb24gcnVuVGVzdEl0ZXJh
dGlvbihmb3JtYXQsIHR5cGUsIAogICAgIH0KICAgICBpZiAoaXNTaG9ydCkKICAgICAgICAgc2l6
ZSAvPSAyOworICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgc2l6ZSA9IDA7CiAgICAgaWYgKHR5
cGUgPT0gZ2wuVU5TSUdORURfQllURSkKICAgICAgICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShz
aXplKTsKICAgICBlbHNlCiAgICAgICAgIGFycmF5ID0gbmV3IFVpbnQxNkFycmF5KHNpemUpOwog
ICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJh
eSk7Ci0gICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICAgICAgc2hvdWxkQmUoImdsLmdldEVy
cm9yKCkiLCAiZ2wuSU5WQUxJRF9WQUxVRSIpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNl
IHsKKyAgICAgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAg
ICAgICAgaWYgKCFhcnJheS5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogICAg
IC8vIENoZWNrIHRoZSBsYXN0IHBpeGVsIG9mIHRoZSBsYXN0IHJvdy4KICAgICB2YXIgYnl0ZXNQ
ZXJSb3cgPSB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWwgKyBwYWRkaW5nOwogICAgIHZhciBwb3MgPSBi
eXRlc1BlclJvdyAqIChoZWlnaHQgLSAxKSArICh3aWR0aCAtIDEpICogYnl0ZXNQZXJQaXhlbDsK
QEAgLTIyNyw2ICsyMzYsMTQgQEAgcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWQogcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA2LCAy
KTsKIHJ1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgNywgMik7
CiBydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDgsIDIpOwor
cnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAxLCAwLCAwKTsKK3J1
blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgMiwgMCwgMCk7CitydW5U
ZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDAsIDApOworcnVuVGVz
dEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCAwLCAwKTsKK3J1blRlc3RJ
dGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgMSwgLTEsIDEpOworcnVuVGVzdEl0
ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAyLCAxLCAtMSk7CitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDAsIC0xKTsKK3J1blRlc3RJdGVy
YXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgLTEsIC0xKTsKIAogZGVidWcoIlRl
c3RpbmcgdGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbiIpOwogcnVu
VGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCAxLCAxLCAyKTsKQEAgLTI0NSw2
ICsyNjIsMTQgQEAgcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLAogcnVu
VGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA2LCAyKTsKIHJ1blRlc3RJ
dGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgNywgMik7CiBydW5UZXN0SXRlcmF0
aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDgsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihw
aXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCAxLCAwLCAwKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxG
b3JtYXQsIHBpeGVsVHlwZSwgMiwgMCwgMCk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0
LCBwaXhlbFR5cGUsIDQsIDAsIDApOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4
ZWxUeXBlLCA4LCAwLCAwKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlw
ZSwgMSwgLTEsIDEpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCAy
LCAxLCAtMSk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDQsIDAs
IC0xKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgLTEsIC0x
KTsKIAogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>