<?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>12988</bug_id>
          
          <creation_ts>2007-03-06 14:08:51 -0800</creation_ts>
          <short_desc>First element (in document order) is not returned when other duplicate ID-ed elements were created first</short_desc>
          <delta_ts>2007-10-17 20:38:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alice Liu">alice.barraclough</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20339</commentid>
    <comment_count>0</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2007-03-06 14:08:51 -0800</bug_when>
    <thetext>Filing this bug on behalf of Maciej...

It seems like we don&apos;t always return the first element in document order with a given id when there are duplicate ids and getElementById is used. I thought this worked, and I&apos;m pretty sure we mean it to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20340</commentid>
    <comment_count>1</comment_count>
      <attachid>13493</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2007-03-06 14:09:40 -0800</bug_when>
    <thetext>Created attachment 13493
testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20341</commentid>
    <comment_count>2</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2007-03-06 14:11:34 -0800</bug_when>
    <thetext>Now speaking on my own behalf:

Not a regression. Shipping Safari 2.0.4 results are 0, the last element in document order but the first one created.  Same results on TOT WebKit rt now.  Firefox and Opera return 4, the first element in document order but the last one created.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1435</commentid>
    <comment_count>3</comment_count>
      <attachid>16125</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-08-26 09:59:54 -0700</bug_when>
    <thetext>Created attachment 16125
first attempt

I reworked the testcase into this patch. I think there is a performance penalty when having duplicate ids, but I think duplicate ids are rare in the first place.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076</commentid>
    <comment_count>4</comment_count>
      <attachid>16125</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-31 18:32:14 -0700</bug_when>
    <thetext>Comment on attachment 16125
first attempt

Good fix. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-09-01 01:15:34 -0700</bug_when>
    <thetext>Landed in r25341.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 20:38:32 -0700</bug_when>
    <thetext>This change seems to have broken the layout test use-instanceRoot-modifications.svg -- for some reason the value returned from getElementById is no longer correct. We may need to roll the fix out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 20:45:15 -0700</bug_when>
    <thetext>Maciej showed me that Rob already has a cut at a patch to fix the regression: &lt;http://paste.lisp.org/display/47065&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 20:46:36 -0700</bug_when>
    <thetext>Rob, I think that the comment in the patch needs a little improvement. It says something that doesn&apos;t really match what the code does. I understand why the code does what it does (we only can be sure the element is the first if there are no duplicates), but I&apos;m not sure other readers would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 21:24:21 -0700</bug_when>
    <thetext>I also don&apos;t think the patch is correct. I&apos;m taking a crack at this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 21:50:53 -0700</bug_when>
    <thetext>Reopening this because the fix caused a regression. I have a new fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034</commentid>
    <comment_count>11</comment_count>
      <attachid>16125</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 21:59:17 -0700</bug_when>
    <thetext>Comment on attachment 16125
first attempt

Turns out this was incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033</commentid>
    <comment_count>12</comment_count>
      <attachid>16178</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-01 22:00:08 -0700</bug_when>
    <thetext>Created attachment 16178
second attempt; tested with SVG test case as well as Rob&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031</commentid>
    <comment_count>13</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-09-01 22:15:52 -0700</bug_when>
    <thetext>I think Darin&apos;s version of the patch will increase memory use in the common case where there aren&apos;t any duplicates, or at least most elements with IDs don&apos;t have duplicates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028</commentid>
    <comment_count>14</comment_count>
      <attachid>16179</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-09-02 02:04:02 -0700</bug_when>
    <thetext>Created attachment 16179
More complete patch

Firsr of all, apologies for missing the fact that two svg tests broke, I kind of assumed some svg tests were broken because of other things. Second, I&apos;d like to get it fixes asap so we can move on :)
This patch is basically the lisppaste snippet plus Darin&apos;s comments taken into account. I worded half of it myself but also took one sentence from Darin&apos;s patch. Note that the new patch does not alter removeElementById, that was a mistake in my first patch pointed out by Maciej. I have a slight tendency towards my patch since it is close to the original code, but again the main thing IMHO is too resolve the problem soon :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018</commentid>
    <comment_count>15</comment_count>
      <attachid>16179</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 07:51:37 -0700</bug_when>
    <thetext>Comment on attachment 16179
More complete patch

This patch no longer applies, because I rolled out your original fix. So you need a new patch that works without first applying your old patch (a combination of both).

But your patch also has what I consider a memory leak.

If you write a loop that adds two elements with an id, then calls getElementById on that id, then removes both elements, in a loop, with your patch the m_duplicateIds set will keep getting bigger and bigger, because the code leaks a duplicate id in that case. I think we don&apos;t want that behavior.

I think my approach is better even though the patch is bigger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015</commentid>
    <comment_count>16</comment_count>
      <attachid>16178</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 07:52:00 -0700</bug_when>
    <thetext>Comment on attachment 16178
second attempt; tested with SVG test case as well as Rob&apos;s

I&apos;ve got a new slightly better version of this patch coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016</commentid>
    <comment_count>17</comment_count>
      <attachid>16180</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 07:58:02 -0700</bug_when>
    <thetext>Created attachment 16180
improved patch; one less hash lookup in the &quot;add&quot; function than the previous</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 08:01:30 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 16179 [edit])
&gt; This patch no longer applies, because I rolled out your original fix. So you
&gt; need a new patch that works without first applying your old patch (a
&gt; combination of both).

Oops, my mistake. The patch applies just fine.

But my other comment stands. We will leak duplicate ids in that case. My patch is better -- more efficient and doesn&apos;t have that leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014</commentid>
    <comment_count>19</comment_count>
      <attachid>16179</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 08:05:16 -0700</bug_when>
    <thetext>Comment on attachment 16179
More complete patch

I&apos;m not sure that the leak issue really justifies a review-. I set this to review- because I thought the patch didn&apos;t apply, which was my mistake.

But I still think my patch is a better fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010</commentid>
    <comment_count>20</comment_count>
      <attachid>16181</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-02 09:34:09 -0700</bug_when>
    <thetext>Created attachment 16181
corrected version of previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957</commentid>
    <comment_count>21</comment_count>
      <attachid>16193</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-09-04 05:27:00 -0700</bug_when>
    <thetext>Created attachment 16193
alternate patch: a fixed version of Rob&apos;s patch

This patch would use about 8k more memory on a page with 1000 ids, none of which were duplicates. (On the other hand, the current approach would use 2k more if every other one was a duplicate). This isn&apos;t very much memory in the grand scheme of things I guess, but the duplicate case is supposed to be rare so I think it&apos;s ok to use a few extra hash lookups to save a bit of memory.

Thinking about it, I don&apos;t see how Rob&apos;s patch would leak a duplicate Id in the situation described. The two adds would leave the duplicate ID count at 1, with a cleared cache, the getElementById call would leave it alone but restore the cache, and the two removes would reduce it by 1. But I think a sequence of add/add/remove/remove would underflow the duplicate count, since it would be increased once but reduced twice.

Here&apos;s what I think is a fixed version of Rob&apos;s patch, in case it is of interest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-04 08:48:40 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; This patch would use about 8k more memory on a page with 1000 ids, none of
&gt; which were duplicates.

I assume you&apos;re saying 8k because there&apos;d be 1000 hash table entries, each that is 4 bytes larger for 4k, and then roughly 1000 more empty hash table entries, each that is 4 bytes larger for another 4k.

&gt; (On the other hand, the current approach would use 2k more if every other one was a duplicate).

My calculations say that this would be the same 8k as above. A counted set hash table entry for each duplicate is 8 bytes per duplicate. So if we have 500 duplicates with 8 bytes each, that&apos;s 4k for the used hash table entries and 4k for the empty ones.

As you say, though, my scheme is less efficient for pages with lots of non-duplicated ids.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944</commentid>
    <comment_count>23</comment_count>
      <attachid>16193</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-04 08:50:59 -0700</bug_when>
    <thetext>Comment on attachment 16193
alternate patch: a fixed version of Rob&apos;s patch

This looks good. But there&apos;s a way to write addElementById with fewer hash table lookups. I&apos;ll make a new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946</commentid>
    <comment_count>24</comment_count>
      <attachid>16197</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-09-04 09:12:27 -0700</bug_when>
    <thetext>Created attachment 16197
newer version of Rob&apos;s patch, improved a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57400</commentid>
    <comment_count>25</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-09-29 19:34:35 -0700</bug_when>
    <thetext>please land on feature-branch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57401</commentid>
    <comment_count>26</comment_count>
      <attachid>16197</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-29 19:36:05 -0700</bug_when>
    <thetext>Comment on attachment 16197
newer version of Rob&apos;s patch, improved a bit more

Somehow, duplicate-ids-document-order.html got put in the patch twice, and duplicate-ids-document-order-expected.txt is missing.

+    // excluding the one referenced in m_elementsById, if any. This means it one less than the total count

Typo: it one -&gt; it is one

+    div = document.createElement (&apos;div&apos;);

There&apos;s an extra space before the open parenthesis.

r- until the test results are added, then I&apos;ll r+ for feature-branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58755</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-17 19:56:04 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 16197 [edit])
&gt; Somehow, duplicate-ids-document-order.html got put in the patch twice

Strange, the patch applied just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58760</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-17 20:36:21 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 16197 [edit])
&gt; Somehow, duplicate-ids-document-order.html got put in the patch twice, and
&gt; duplicate-ids-document-order-expected.txt is missing.

That&apos;s because duplicate-ids-document-order.html is being re-added to the tree and duplicate-ids-document-order-expected.txt is already checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58761</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-17 20:38:35 -0700</bug_when>
    <thetext>Committed revision 26732.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>13493</attachid>
            <date>2007-03-06 14:09:40 -0800</date>
            <delta_ts>2007-03-06 14:09:40 -0800</delta_ts>
            <desc>testcase</desc>
            <filename>id.html</filename>
            <type>text/html</type>
            <size>360</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">PGJvZHk+CjxkaXYgaWQ9ImZvbyI+dGV4dDwvZGl2Pgo8c2NyaXB0Pgp2YXIgZGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpOwpmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgewog
ICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICBzcGFuLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGkpKTsKICAgIHNwYW4uc2V0QXR0cmli
dXRlKCJpZCIsICJiYXIiKTsKICAgIGRpdi5pbnNlcnRCZWZvcmUoc3BhbiwgZGl2LmZpcnN0Q2hp
bGQpOwp9CgphbGVydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFyIikuaW5uZXJIVE1MKTsK
PC9zY3JpcHQ+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16125</attachid>
            <date>2007-08-26 09:59:54 -0700</date>
            <delta_ts>2007-09-01 22:00:08 -0700</delta_ts>
            <desc>first attempt</desc>
            <filename>12988.diff</filename>
            <type>text/plain</type>
            <size>4640</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTI1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDctMDgtMjYgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQg
KGluIGRvY3VtZW50IG9yZGVyKSBpcyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUg
SUQtZWQgZWxlbWVudHMgd2VyZSBjcmVhdGVkIGZpcnN0CisKKyAgICAgICAgUmVzZXQgdGhlIGVs
ZW1lbnQgaWQgY2FjaGUgd2hlbiBpZCdzIGFyZSBhZGRlZCBvciByZW1vdmVkIGFuZCB0aGVyZQor
ICAgICAgICBhcmUgZHVwbGljYXRlcyBmb3IgdGhhdCBpZC4KKworICAgICAgICBUZXN0OiBmYXN0
L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwKKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZEVsZW1lbnRCeUlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVFbGVtZW50QnlJZCk6CisKIDIwMDctMDgtMjQgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZS4K
SW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI1MjUxKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDMsNyArNzAzLDYgQEAgRWxlbWVudCAqRG9jdW1lbnQ6
OmdldEVsZW1lbnRCeUlkKGNvbnN0IAogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGlkQXR0cikgPT0gZWxlbWVudElkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZHVw
bGljYXRlSWRzLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgICAgICB9CkBAIC04MDUsMTYg
KzgwNCwyMCBAQCB2b2lkIERvY3VtZW50OjphZGRFbGVtZW50QnlJZChjb25zdCBBdG9tCiB7CiAg
ICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkKICAgICAg
ICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwotICAgIGVs
c2UKKyAgICBlbHNlIHsKICAgICAgICAgbV9kdXBsaWNhdGVJZHMuYWRkKGVsZW1lbnRJZC5pbXBs
KCkpOworICAgICAgICBtX2VsZW1lbnRzQnlJZC5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7Cisg
ICAgfQogfQogCiB2b2lkIERvY3VtZW50OjpyZW1vdmVFbGVtZW50QnlJZChjb25zdCBBdG9taWNT
dHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAobV9lbGVtZW50
c0J5SWQuZ2V0KGVsZW1lbnRJZC5pbXBsKCkpID09IGVsZW1lbnQpCiAgICAgICAgIG1fZWxlbWVu
dHNCeUlkLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKLSAgICBlbHNlCisgICAgZWxzZSB7CiAg
ICAgICAgIG1fZHVwbGljYXRlSWRzLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKKyAgICAgICAg
bV9lbGVtZW50c0J5SWQucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIH0KIH0KIAogRWxl
bWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSkg
Y29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjU0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMDgtMjYgIFJvYiBCdWlzICA8
YnVpc0BrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RjYXNlIGZvcjoKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI5ODgKKyAgICAgICAgRmlyc3QgZWxlbWVudCAoaW4gZG9jdW1lbnQgb3Jk
ZXIpIGlzIG5vdCByZXR1cm5lZCB3aGVuIG90aGVyIGR1cGxpY2F0ZSBJRC1lZCBlbGVtZW50cyB3
ZXJlIGNyZWF0ZWQgZmlyc3QKKworICAgICAgICAqIGZhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9j
dW1lbnQtb3JkZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9kdXBs
aWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWw6IEFkZGVkLgorCiAyMDA3LTA4LTI1ICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChmaXhlcyBsYXlvdXQgdGVzdHMpLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vZHVw
bGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRv
Y3VtZW50LW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitU
aGlzIHRlc3RzIHRoYXQgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBp
biBkb2N1bWVudCBvcmRlciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBpZHMuIEJ1ZyAxMjk4OC4K
K1N1Y2Nlc3MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1l
bnQtb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNh
dGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZGVidWco
c3RyKSB7CisgICAgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cik7CisgICAgZGVi
dWdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVidWdEaXYnKTsKKyAgICBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50ICgnZGl2Jyk7CisgICAgZGl2LmFwcGVuZENoaWxkKHRleHQp
OworICAgIGRlYnVnRGl2LmFwcGVuZENoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeyAKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAgICB2YXIgZGl2ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsg
aSsrKSB7CisgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGkpKTsK
KyAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoImlkIiwgImJhciIpOworICAgICAgICBkaXYuaW5z
ZXJ0QmVmb3JlKHNwYW4sIGRpdi5maXJzdENoaWxkKTsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImJhciIpLmlubmVySFRNTCA9PSA0KQorICAgICAgICBkZWJ1Zygi
U3VjY2VzcyIpOworICAgIGVsc2UKKyAgICAgICAgZGVidWcoIkZhaWx1cmUiKTsKK30KKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorVGhpcyB0ZXN0cyB0aGF0
IGdldEVsZW1lbnRCeUlkIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gZG9jdW1lbnQgb3Jk
ZXIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgaWRzLiBCdWcgMTI5ODguCis8ZGl2IHN0eWxlPSJk
aXNwbGF5Om5vbmUiIGlkPSJmb28iPnRleHQ8L2Rpdj4KKzxkaXYgaWQ9J2RlYnVnRGl2Jz4KKzwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="6773"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16178</attachid>
            <date>2007-09-01 22:00:08 -0700</date>
            <delta_ts>2007-09-02 07:58:02 -0700</delta_ts>
            <desc>second attempt; tested with SVG test case as well as Rob&apos;s</desc>
            <filename>GetElementByIdPatch.txt</filename>
            <type>text/plain</type>
            <size>8784</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDctMDktMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbmV3
IGZpeCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5ODgKKyAg
ICAgICAgICBGaXJzdCBlbGVtZW50IChpbiBkb2N1bWVudCBvcmRlcikgaXMgbm90IHJldHVybmVk
IHdoZW4gb3RoZXIKKyAgICAgICAgICBkdXBsaWNhdGUgSUQtZWQgZWxlbWVudHMgd2VyZSBjcmVh
dGVkIGZpcnN0CisKKyAgICAgICAgUGFzc2VzIHRoZSBuZXcgdGVzdCBSb2IgYWRkZWQgYW5kIGFs
c28gdGhlIG9sZCBTVkcgdGVzdC4KKyAgICAgICAgQnV0IHdlIGNvdWxkIHVzZSBzb21lIGFkZGl0
aW9uYWwgdGVzdCBjYXNlcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBSZXBsYWNlZCBt
X2VsZW1lbnRzQnlJZCBhbmQgbV9kdXBsaWNhdGVJZHMgd2l0aCBhIHNpbmdsZSBIYXNoTWFwCisg
ICAgICAgIHRoYXQgdHJhY2tzIGJvdGggaG93IG1hbnkgdGltZXMgZWFjaCBpZCBvY2N1cnMgaW4g
dGhlIGRvY3VtZW50IGFuZCBhbHNvIHRoZSBmaXJzdAorICAgICAgICBlbGVtZW50IGluIGRvY3Vt
ZW50IG9yZGVyIHdpdGggdGhhdCBpZCwgYnV0IG9ubHkgaWYgd2UgaGFwcGVuIHRvIGtub3cgd2hh
dCBpdCBpcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKTogUmV3cm90ZSB0byB1c2UgdGhlIG5ldyBoYXNoIG1h
cC4gV2Ugbm93IHNlYXJjaAorICAgICAgICBmb3IgdGhlIGVsZW1lbnQgd2hlbmV2ZXIgd2UgZG9u
J3Qga25vdyB3aGljaCB0aGUgZmlyc3QgZWxlbWVudCBpcy4gVGhlIG9sZCBjb2RlCisgICAgICAg
IG9ubHkgc2VhcmNoZWQgd2hlbiB0aGVyZSB3YXMgc3RpbGwgYSBkdXBsaWNhdGUsIGJ1dCB0aGlz
IG5ldyBjb2RlIGNhbiBhbHNvIGVuZCB1cAorICAgICAgICBzZWFyY2hpbmcgd2hlbiB0aGVyZSB3
ZXJlIHByZXZpb3VzbHkgZHVwbGljYXRlcyBhbmQgbm93IHdlJ3JlIGJhY2sgdG8gYSBzaW5nbGUg
ZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRFbGVtZW50QnlJZCk6IFJl
d3JvdGUuIFRoZSBuZXcgY29kZSBidW1wcyB0aGUgY291bnQgYW5kIGNsZWFycworICAgICAgICB0
aGUgY2FjaGVkIGZpcnN0IGVsZW1lbnQgaWYgd2UgYWRkIGEgbmV3IGVsZW1lbnQsIHNpbmNlIHRo
ZSBuZXcgb25lIGNvdWxkIGJlIHRoZQorICAgICAgICBmaXJzdC4gV2hlbiBhZGRpbmcgdGhlIGVs
ZW1lbnQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBzZXQgdGhlIGNvdW50IHRvIDEgYW5kIHdlCisg
ICAgICAgIGNhY2hlIHRoZSBlbGVtZW50IHNpbmNlIGl0J3Mga25vd24gdG8gYmUgdGhlIGZpcnN0
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKTogUmV3cm90
ZS4gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBlbGVtZW50LAorICAgICAgICB0aGVuIHdlIGNhbiBy
ZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcC4gSWYgd2UgcmVtb3ZlZCBhbm90aGVyIGVsZW1l
bnQsIHRoZW4gd2UKKyAgICAgICAganVzdCBuZWVkIHRvIGNoZWNrIGlmIHdodCB3ZSByZW1vdmVk
IHdhcyB0aGUgZmlyc3QuIElmIHNvLCB3ZSBzZXQgdGhlIGNhY2hlZCB2YWx1ZQorICAgICAgICB0
byAwIHRvIGZvcmNlIGdldEVsZW1lbnRCeUlkIHRvIGRvIGEgbmV3IHNlYXJjaC4KKwogMjAwNy0w
OS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xsZWQg
b3V0IGZpeCBmb3IgYnVnIDEyOTg4IGJlY2F1c2UgaXQgYnJva2UgZ2V0RWxlbWVudEJ5SWQgaW4g
YSBsYXlvdXQgdGVzdApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUzNDYpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNyArNjkwLDMwIEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICByZXR1cm4gY3JlYXRl
RWxlbWVudChxTmFtZSwgZmFsc2UsIGVjKTsKIH0KIAotRWxlbWVudCAqRG9jdW1lbnQ6OmdldEVs
ZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAorRWxlbWVudCog
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBj
b25zdAogewogICAgIGlmIChlbGVtZW50SWQubGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBFbGVtZW50ICplbGVtZW50ID0gbV9lbGVtZW50c0J5SWQuZ2V0KGVsZW1lbnRJ
ZC5pbXBsKCkpOwotICAgIGlmIChlbGVtZW50KQorICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIENhY2hlZEVsZW1lbnRzRm9ySWQ+OjppdGVyYXRvciBpdCA9IG1fZWxlbWVudHNCeUlkLmZp
bmQoZWxlbWVudElkLmltcGwoKSk7CisgICAgaWYgKGl0ID09IG1fZWxlbWVudHNCeUlkLmVuZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChpdC0+c2Vjb25kLmNvdW50ID4gMCk7
CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBpdC0+c2Vjb25kLmZpcnN0RWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgIAotICAgIGlmIChtX2R1cGxpY2F0ZUlkcy5j
b250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgewotICAgICAgICBmb3IgKE5vZGUgKm4gPSB0cmF2
ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAg
ICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gZWxlbWVudElk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZHVwbGljYXRlSWRzLnJlbW92ZShlbGVtZW50SWQu
aW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJ
ZC5pbXBsKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
LSAgICAgICAgICAgICAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoZXJlJ3MgYXQgbGVhc3Qgb25l
IG5vZGUgd2l0aCB0aGlzIGlkLCBidXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBmaXJzdCBvbmUg
aXMuCisgICAgZm9yIChOb2RlKiBuID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuICE9IDA7IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkg
eworICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
KTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShpZEF0dHIpID09IGVsZW1lbnRJZCkgeworICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQu
Zmlyc3RFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODA0LDE4ICs4MDcsNDMgQEAgRWxlbWVudCogRG9j
dW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQoaW50IAogCiB2b2lkIERvY3VtZW50OjphZGRFbGVtZW50
QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBpZiAoIW1fZWxlbWVudHNCeUlkLmNvbnRhaW5zKGVsZW1lbnRJZC5pbXBsKCkpKQotICAg
ICAgICBtX2VsZW1lbnRzQnlJZC5zZXQoZWxlbWVudElkLmltcGwoKSwgZWxlbWVudCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2R1cGxpY2F0ZUlkcy5hZGQoZWxlbWVudElkLmltcGwoKSk7CisgICAg
SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ2FjaGVkRWxlbWVudHNGb3JJZD46Oml0ZXJhdG9y
IGl0ID0gbV9lbGVtZW50c0J5SWQuZmluZChlbGVtZW50SWQuaW1wbCgpKTsKKyAgICBpZiAoaXQg
IT0gbV9lbGVtZW50c0J5SWQuZW5kKCkpIHsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNhY2hl
ZCBmaXJzdCBlbGVtZW50LCB0aGUgbmV3IGVsZW1lbnQgbWlnaHQgYmUgZWFybGllciBpbiB0aGUg
ZG9jdW1lbnQuCisgICAgICAgIC8vIFNldHRpbmcgZmlyc3RFbGVtZW50IHRvIDAgbWFrZXMgZ2V0
RWxlbWVudEJ5SWQgc2VhcmNoIHRoZSBuZXh0IHRpbWUgaXQncyBjYWxsZWQuCisgICAgICAgIEFT
U0VSVChpdC0+c2Vjb25kLmNvdW50ID4gMCk7CisgICAgICAgICsraXQtPnNlY29uZC5jb3VudDsK
KyAgICAgICAgaXQtPnNlY29uZC5maXJzdEVsZW1lbnQgPSAwOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhpcyBpcyBrbm93biB0byBiZSB0aGUgb25seSBlbGVtZW50IHdpdGgg
dGhpcyBpZCwgc28gd2UgY2FuIGNhY2hlIGl0IGFzIGZpcnN0RWxlbWVudC4KKyAgICBDYWNoZWRF
bGVtZW50c0ZvcklkIGNhY2hlOworICAgIGNhY2hlLmNvdW50ID0gMTsKKyAgICBjYWNoZS5maXJz
dEVsZW1lbnQgPSBlbGVtZW50OworICAgIG1fZWxlbWVudHNCeUlkLmFkZChlbGVtZW50SWQuaW1w
bCgpLCBjYWNoZSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0
IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICht
X2VsZW1lbnRzQnlJZC5nZXQoZWxlbWVudElkLmltcGwoKSkgPT0gZWxlbWVudCkKLSAgICAgICAg
bV9lbGVtZW50c0J5SWQucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9kdXBsaWNhdGVJZHMucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIENhY2hlZEVsZW1lbnRzRm9ySWQ+OjppdGVyYXRvciBpdCA9IG1f
ZWxlbWVudHNCeUlkLmZpbmQoZWxlbWVudElkLmltcGwoKSk7CisgICAgaWYgKGl0ID09IG1fZWxl
bWVudHNCeUlkLmVuZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGl0LT5zZWNvbmQuY291bnQgPiAwKTsKKyAg
ICBpZiAoLS1pdC0+c2Vjb25kLmNvdW50ID09IDApIHsKKyAgICAgICAgLy8gVGhpcyB3YXMgdGhl
IGxhc3QgZWxlbWVudCB3aXRoIHRoaXMgaWQsIHNvIHJlbW92ZSB0aGUgaWQgZnJvbSB0aGUgbWFw
IGVudGlyZWx5LgorICAgICAgICBtX2VsZW1lbnRzQnlJZC5yZW1vdmUoaXQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGl0LT5zZWNvbmQuZmlyc3RFbGVtZW50ID09IGVsZW1l
bnQpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIGVsZW1lbnRzIHdpdGggdGhpcyBpZCwg
YnV0IHdlIHJlbW92ZWQgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgLy8gU2V0dGluZyBmaXJzdEVs
ZW1lbnQgdG8gMCBtYWtlcyBnZXRFbGVtZW50QnlJZCBzZWFyY2ggdGhlIG5leHQgdGltZSBpdCdz
IGNhbGxlZC4KKyAgICAgICAgaXQtPnNlY29uZC5maXJzdEVsZW1lbnQgPSAwOworICAgIH0KIH0K
IAogRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcm
IGtleSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUzNDUpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NjIsOCArODYxLDExIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKIAotICAgIG11dGFi
bGUgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVudCo+IG1fZWxlbWVudHNCeUlkOwot
ICAgIG11dGFibGUgSGFzaENvdW50ZWRTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IG1fZHVwbGljYXRl
SWRzOworICAgIHN0cnVjdCBDYWNoZWRFbGVtZW50c0ZvcklkIHsKKyAgICAgICAgaW50IGNvdW50
OworICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQ7CisgICAgfTsKKyAgICBtdXRhYmxlIEhh
c2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENhY2hlZEVsZW1lbnRzRm9ySWQ+IG1fZWxlbWVudHNC
eUlkOwogICAgIAogICAgIG11dGFibGUgSGFzaE1hcDxTdHJpbmdJbXBsKiwgRWxlbWVudCosIENh
c2VJbnNlbnNpdGl2ZUhhc2g8U3RyaW5nSW1wbCo+ID4gbV9lbGVtZW50c0J5QWNjZXNzS2V5Owog
ICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzNDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwNy0wOS0wMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSByZS1hZGRlZCB0aGUgdGVzdCBjYXNlIGZvciAxMjk4OCBub3cgdGhhdCBp
dCdzIHJlLWZpeGVkCisKKyAgICAgICAgKiBmYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50
LW9yZGVyLmh0bWw6IFJlLWFkZGVkIHRoaXMgZmlsZS4KKwogMjAwNy0wOS0wMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xsZWQgb3V0IHRoZSB0ZXN0IGNh
c2UgZm9yIDEyOTg4IHVudGlsIHdlIHJlLWZpeCBpdApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9k
b20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRtbAkocmV2aXNp
b24gMjUzNDUpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1l
bnQtb3JkZXIuaHRtbDoyNTM0NSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1p
ZHMtZG9jdW1lbnQtb3JkZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRlYnVnKHN0cikgeworICAgIHRleHQg
PSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpOworICAgIGRlYnVnRGl2ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2RlYnVnRGl2Jyk7CisgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCAoJ2RpdicpOworICAgIGRpdi5hcHBlbmRDaGlsZCh0ZXh0KTsKKyAgICBkZWJ1Z0Rpdi5h
cHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsgCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICB9CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJmb28iKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICB2
YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpKSk7CisgICAgICAgIHNwYW4uc2V0
QXR0cmlidXRlKCJpZCIsICJiYXIiKTsKKyAgICAgICAgZGl2Lmluc2VydEJlZm9yZShzcGFuLCBk
aXYuZmlyc3RDaGlsZCk7CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJiYXIiKS5pbm5lckhUTUwgPT0gNCkKKyAgICAgICAgZGVidWcoIlN1Y2Nlc3MiKTsKKyAgICBl
bHNlCisgICAgICAgIGRlYnVnKCJGYWlsdXJlIik7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KK1RoaXMgdGVzdHMgdGhhdCBnZXRFbGVtZW50QnlJZCBy
ZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IGluIGRvY3VtZW50IG9yZGVyIHdoZW4gdGhlcmUgYXJl
IG11bHRpcGxlIGlkcy4gQnVnIDEyOTg4LgorPGRpdiBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0i
Zm9vIj50ZXh0PC9kaXY+Cis8ZGl2IGlkPSdkZWJ1Z0Rpdic+Cis8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16179</attachid>
            <date>2007-09-02 02:04:02 -0700</date>
            <delta_ts>2007-09-04 09:12:27 -0700</delta_ts>
            <desc>More complete patch</desc>
            <filename>12988-2.diff</filename>
            <type>text/plain</type>
            <size>4536</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDctMDktMDIgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQg
KGluIGRvY3VtZW50IG9yZGVyKSBpcyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUg
SUQtZWQgZWxlbWVudHMgd2VyZSBjcmVhdGVkIGZpcnN0CisKKyAgICAgICAgUmVzZXQgdGhlIGVs
ZW1lbnQgaWQgY2FjaGUgd2hlbiBpZCdzIGFyZSBhZGRlZCBhbmQgdGhlcmUgYXJlIGR1cGxpY2F0
ZXMgZm9yIHRoYXQgaWQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50QnlJZCk6CisKIDIwMDctMDktMDEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gcm9sbGVkIG91dCBmaXggZm9yIGJ1ZyAxMjk4OCBi
ZWNhdXNlIGl0IGJyb2tlIGdldEVsZW1lbnRCeUlkIGluIGEgbGF5b3V0IHRlc3QKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDI1MzQ2KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTgsMTMgKzY5OCwxMyBAQCBFbGVtZW50ICpEb2N1bWVudDo6Z2V0RWxl
bWVudEJ5SWQoY29uc3QgCiAgICAgRWxlbWVudCAqZWxlbWVudCA9IG1fZWxlbWVudHNCeUlkLmdl
dChlbGVtZW50SWQuaW1wbCgpKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgICAgIAorCisgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBu
b2RlIHdpdGggdGhpcyBpZCwgYnV0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUgZmlyc3Qgb25lIGlz
LgogICAgIGlmIChtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgewog
ICAgICAgICBmb3IgKE5vZGUgKm4gPSB0cmF2ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGlkQXR0cikgPT0gZWxlbWVudElkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZHVw
bGljYXRlSWRzLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1lbnQpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgICAgICB9CkBAIC04MDQsMTAg
KzgwNCwxNiBAQCBFbGVtZW50KiBEb2N1bWVudDo6ZWxlbWVudEZyb21Qb2ludChpbnQgCiAKIHZv
aWQgRG9jdW1lbnQ6OmFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElk
LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghbV9lbGVtZW50c0J5SWQuY29udGFpbnMo
ZWxlbWVudElkLmltcGwoKSkpCisgICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlucyhlbGVt
ZW50SWQuaW1wbCgpKSAmJgorICAgICAgICAhbV9kdXBsaWNhdGVJZHMuY29udGFpbnMoZWxlbWVu
dElkLmltcGwoKSkpIAorICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgg
dGhpcyBpZCwgY2FjaGUgaXQuCiAgICAgICAgIG1fZWxlbWVudHNCeUlkLnNldChlbGVtZW50SWQu
aW1wbCgpLCBlbGVtZW50KTsKLSAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoZXJl
IGFyZSBtdWx0aXBsZSBlbGVtZW50cyB3aXRoIHRoaXMgaWQuIFJlbW92ZSB0aGUgbV9lbGVtZW50
c0J5SWQgY2FjaGUKKyAgICAgICAgLy8gZm9yIHRoaXMgaWQgc28gZ2V0RWxlbWVudEJ5SWQgc2Vh
cmNoZXMgZm9yIGl0IG5leHQgdGltZSBpdCBpcyBjYWxsZWQuCiAgICAgICAgIG1fZHVwbGljYXRl
SWRzLmFkZChlbGVtZW50SWQuaW1wbCgpKTsKKyAgICAgICAgbV9lbGVtZW50c0J5SWQucmVtb3Zl
KGVsZW1lbnRJZC5pbXBsKCkpOworICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlRWxl
bWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnQqIGVsZW1lbnQp
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNTM0NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA3LTA5LTAyICBSb2IgQnVpcyAgPGJ1aXNA
a2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0Y2FzZSBmb3I6CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQgKGluIGRvY3VtZW50IG9yZGVyKSBp
cyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUgSUQtZWQgZWxlbWVudHMgd2VyZSBj
cmVhdGVkIGZpcnN0CisKKyAgICAgICAgKiBmYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50
LW9yZGVyLmh0bWw6IEFkZGVkLgorCiAyMDA3LTA5LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAtIHJvbGxlZCBvdXQgdGhlIHRlc3QgY2FzZSBmb3IgMTI5ODgg
dW50aWwgd2UgcmUtZml4IGl0CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUt
aWRzLWRvY3VtZW50LW9yZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0
aW9uIGRlYnVnKHN0cikgeworICAgIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIp
OworICAgIGRlYnVnRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlYnVnRGl2Jyk7Cisg
ICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAoJ2RpdicpOworICAgIGRpdi5hcHBlbmRD
aGlsZCh0ZXh0KTsKKyAgICBkZWJ1Z0Rpdi5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsgCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisgICAgdmFy
IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDU7ICsraSkgeworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShpKSk7CisgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCJpZCIsICJiYXIiKTsKKyAgICAg
ICAgZGl2Lmluc2VydEJlZm9yZShzcGFuLCBkaXYuZmlyc3RDaGlsZCk7CisgICAgfQorCisgICAg
aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiYXIiKS5pbm5lckhUTUwgPT0gNCkKKyAgICAg
ICAgZGVidWcoIlN1Y2Nlc3MiKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCJGYWlsdXJlIik7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KK1RoaXMg
dGVzdHMgdGhhdCBnZXRFbGVtZW50QnlJZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IGluIGRv
Y3VtZW50IG9yZGVyIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGlkcy4gQnVnIDEyOTg4LgorPGRp
diBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0iZm9vIj50ZXh0PC9kaXY+Cis8ZGl2IGlkPSdkZWJ1
Z0Rpdic+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="6798"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16180</attachid>
            <date>2007-09-02 07:58:02 -0700</date>
            <delta_ts>2007-09-02 09:34:09 -0700</delta_ts>
            <desc>improved patch; one less hash lookup in the &quot;add&quot; function than the previous</desc>
            <filename>GetElementByIdPatch.txt</filename>
            <type>text/plain</type>
            <size>10456</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDctMDktMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbmV3
IGZpeCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5ODgKKyAg
ICAgICAgICBGaXJzdCBlbGVtZW50IChpbiBkb2N1bWVudCBvcmRlcikgaXMgbm90IHJldHVybmVk
IHdoZW4gb3RoZXIKKyAgICAgICAgICBkdXBsaWNhdGUgSUQtZWQgZWxlbWVudHMgd2VyZSBjcmVh
dGVkIGZpcnN0CisKKyAgICAgICAgUGFzc2VzIHRoZSBuZXcgdGVzdCBSb2IgYWRkZWQgYW5kIGFs
c28gdGhlIG9sZCBTVkcgdGVzdC4KKyAgICAgICAgQnV0IHdlIGNvdWxkIHVzZSBzb21lIGFkZGl0
aW9uYWwgdGVzdCBjYXNlcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBSZXBsYWNlZCBt
X2VsZW1lbnRzQnlJZCBhbmQgbV9kdXBsaWNhdGVJZHMgd2l0aCBhIHNpbmdsZSBIYXNoTWFwCisg
ICAgICAgIHRoYXQgdHJhY2tzIGJvdGggaG93IG1hbnkgdGltZXMgZWFjaCBpZCBvY2N1cnMgaW4g
dGhlIGRvY3VtZW50IGFuZCBhbHNvIHRoZSBmaXJzdAorICAgICAgICBlbGVtZW50IGluIGRvY3Vt
ZW50IG9yZGVyIHdpdGggdGhhdCBpZCwgYnV0IG9ubHkgaWYgd2UgaGFwcGVuIHRvIGtub3cgd2hh
dCBpdCBpcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKTogUmV3cm90ZSB0byB1c2UgdGhlIG5ldyBoYXNoIG1h
cC4gV2Ugbm93IHNlYXJjaAorICAgICAgICBmb3IgdGhlIGVsZW1lbnQgd2hlbmV2ZXIgd2UgZG9u
J3Qga25vdyB3aGljaCB0aGUgZmlyc3QgZWxlbWVudCBpcy4gVGhlIG9sZCBjb2RlCisgICAgICAg
IG9ubHkgc2VhcmNoZWQgd2hlbiB0aGVyZSB3YXMgc3RpbGwgYSBkdXBsaWNhdGUsIGJ1dCB0aGlz
IG5ldyBjb2RlIGNhbiBhbHNvIGVuZCB1cAorICAgICAgICBzZWFyY2hpbmcgd2hlbiB0aGVyZSB3
ZXJlIHByZXZpb3VzbHkgZHVwbGljYXRlcyBhbmQgbm93IHdlJ3JlIGJhY2sgdG8gYSBzaW5nbGUg
ZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRFbGVtZW50QnlJZCk6IFJl
d3JvdGUuIFRoZSBuZXcgY29kZSBidW1wcyB0aGUgY291bnQgYW5kIGNsZWFycworICAgICAgICB0
aGUgY2FjaGVkIGZpcnN0IGVsZW1lbnQgaWYgd2UgYWRkIGEgbmV3IGVsZW1lbnQsIHNpbmNlIHRo
ZSBuZXcgb25lIGNvdWxkIGJlIHRoZQorICAgICAgICBmaXJzdC4gV2hlbiBhZGRpbmcgdGhlIGVs
ZW1lbnQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBzZXQgdGhlIGNvdW50IHRvIDEgYW5kIHdlCisg
ICAgICAgIGNhY2hlIHRoZSBlbGVtZW50IHNpbmNlIGl0J3Mga25vd24gdG8gYmUgdGhlIGZpcnN0
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKTogUmV3cm90
ZS4gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBlbGVtZW50LAorICAgICAgICB0aGVuIHdlIGNhbiBy
ZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcC4gSWYgd2UgcmVtb3ZlZCBhbm90aGVyIGVsZW1l
bnQsIHRoZW4gd2UKKyAgICAgICAganVzdCBuZWVkIHRvIGNoZWNrIGlmIHdodCB3ZSByZW1vdmVk
IHdhcyB0aGUgZmlyc3QuIElmIHNvLCB3ZSBzZXQgdGhlIGNhY2hlZCB2YWx1ZQorICAgICAgICB0
byAwIHRvIGZvcmNlIGdldEVsZW1lbnRCeUlkIHRvIGRvIGEgbmV3IHNlYXJjaC4KKwogMjAwNy0w
OS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xsZWQg
b3V0IGZpeCBmb3IgYnVnIDEyOTg4IGJlY2F1c2UgaXQgYnJva2UgZ2V0RWxlbWVudEJ5SWQgaW4g
YSBsYXlvdXQgdGVzdApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUzNDYpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNyArNjkwLDMwIEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICByZXR1cm4gY3JlYXRl
RWxlbWVudChxTmFtZSwgZmFsc2UsIGVjKTsKIH0KIAotRWxlbWVudCAqRG9jdW1lbnQ6OmdldEVs
ZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAorRWxlbWVudCog
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBj
b25zdAogewogICAgIGlmIChlbGVtZW50SWQubGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBFbGVtZW50ICplbGVtZW50ID0gbV9lbGVtZW50c0J5SWQuZ2V0KGVsZW1lbnRJ
ZC5pbXBsKCkpOwotICAgIGlmIChlbGVtZW50KQorICAgIEVsZW1lbnRzQnlJZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2VsZW1lbnRzQnlJZC5maW5kKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIGlmIChp
dCA9PSBtX2VsZW1lbnRzQnlJZC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NF
UlQoaXQtPnNlY29uZC5jb3VudCA+IDApOworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gaXQt
PnNlY29uZC5maXJzdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICAK
LSAgICBpZiAobV9kdXBsaWNhdGVJZHMuY29udGFpbnMoZWxlbWVudElkLmltcGwoKSkpIHsKLSAg
ICAgICAgZm9yIChOb2RlICpuID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuICE9IDA7IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwot
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShpZEF0dHIpID09IGVsZW1lbnRJZCkgewotICAgICAgICAgICAgICAgICAgICBtX2R1cGxp
Y2F0ZUlkcy5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZWxlbWVudHNCeUlkLnNldChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgfQorCisgICAgLy8gV2Ug
a25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHdpdGggdGhpcyBpZCwgYnV0IHdlIGRvbid0
IGtub3cgd2hhdCB0aGUgZmlyc3Qgb25lIGlzLgorICAgIGZvciAoTm9kZSogbiA9IHRyYXZlcnNl
TmV4dE5vZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
SUQoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBlbGVtZW50SWQpIHsKKyAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLmZpcnN0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTgwNCwx
OCArODA3LDQ1IEBAIEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBvaW50KGludCAKIAog
dm9pZCBEb2N1bWVudDo6YWRkRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50
SWQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlu
cyhlbGVtZW50SWQuaW1wbCgpKSkKLSAgICAgICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJ
ZC5pbXBsKCksIGVsZW1lbnQpOwotICAgIGVsc2UKLSAgICAgICAgbV9kdXBsaWNhdGVJZHMuYWRk
KGVsZW1lbnRJZC5pbXBsKCkpOworICAgIC8vIElmIHRoaXMgaXMgdGhlIG9ubHkgZWxlbWVudCB3
aXRoIHRoaXMgaWQsIHdlIHdpbGwgY2FjaGUgaXQgYXMgZmlyc3RFbGVtZW50LgorICAgIENhY2hl
ZEVsZW1lbnQgY2FjaGU7CisgICAgY2FjaGUuY291bnQgPSAxOworICAgIGNhY2hlLmZpcnN0RWxl
bWVudCA9IGVsZW1lbnQ7CisKKyAgICBwYWlyPEVsZW1lbnRzQnlJZE1hcDo6aXRlcmF0b3IsIGJv
b2w+IGFkZFJlc3VsdCA9IG1fZWxlbWVudHNCeUlkLmFkZChlbGVtZW50SWQuaW1wbCgpLCBjYWNo
ZSk7CisKKyAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgQVNTRVJUKGFkZFJl
c3VsdC5maXJzdC0+c2Vjb25kLmNvdW50ID09IDEpOworICAgICAgICBBU1NFUlQoYWRkUmVzdWx0
LmZpcnN0LT5zZWNvbmQuZmlyc3RFbGVtZW50ID09IGVsZW1lbnQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIElmIHdlIGhhdmUgYSBjYWNoZWQgZmlyc3QgZWxlbWVudCwgdGhlIG5ldyBlbGVt
ZW50IG1pZ2h0IGJlIGVhcmxpZXIgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAvLyBTZXR0aW5n
IGZpcnN0RWxlbWVudCB0byAwIG1ha2VzIGdldEVsZW1lbnRCeUlkIHNlYXJjaCB0aGUgbmV4dCB0
aW1lIGl0J3MgY2FsbGVkLgorICAgICAgICBBU1NFUlQoYWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQu
Y291bnQgPiAwKTsKKyAgICAgICAgKythZGRSZXN1bHQuZmlyc3QtPnNlY29uZC5jb3VudDsKKyAg
ICAgICAgYWRkUmVzdWx0LmZpcnN0LT5zZWNvbmQuZmlyc3RFbGVtZW50ID0gMDsKKyAgICB9CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYg
ZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChtX2VsZW1lbnRzQnlJZC5n
ZXQoZWxlbWVudElkLmltcGwoKSkgPT0gZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50c0J5SWQu
cmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9kdXBsaWNhdGVJ
ZHMucmVtb3ZlKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIEVsZW1lbnRzQnlJZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2VsZW1lbnRzQnlJZC5maW5kKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIGlmIChp
dCA9PSBtX2VsZW1lbnRzQnlJZC5lbmQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChpdC0+c2Vjb25kLmNvdW50
ID4gMCk7CisgICAgaWYgKC0taXQtPnNlY29uZC5jb3VudCA9PSAwKSB7CisgICAgICAgIC8vIFRo
aXMgd2FzIHRoZSBsYXN0IGVsZW1lbnQgd2l0aCB0aGlzIGlkLCBzbyByZW1vdmUgdGhlIGlkIGZy
b20gdGhlIG1hcCBlbnRpcmVseS4KKyAgICAgICAgbV9lbGVtZW50c0J5SWQucmVtb3ZlKGl0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpdC0+c2Vjb25kLmZpcnN0RWxlbWVu
dCA9PSBlbGVtZW50KSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBlbGVtZW50cyB3aXRo
IHRoaXMgaWQsIGJ1dCB3ZSByZW1vdmVkIHRoZSBmaXJzdCBvbmUuCisgICAgICAgIC8vIFNldHRp
bmcgZmlyc3RFbGVtZW50IHRvIDAgbWFrZXMgZ2V0RWxlbWVudEJ5SWQgc2VhcmNoIHRoZSBuZXh0
IHRpbWUgaXQncyBjYWxsZWQuCisgICAgICAgIGl0LT5zZWNvbmQuZmlyc3RFbGVtZW50ID0gMDsK
KyAgICB9CiB9CiAKIEVsZW1lbnQqIERvY3VtZW50OjpnZXRFbGVtZW50QnlBY2Nlc3NLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIGNvbnN0CkBAIC0zMzk2LDExICszNDI2LDExIEBAIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojpkb2MKIAogSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rp
b25JbmZvKiBEb2N1bWVudDo6bmFtZUNvbGxlY3Rpb25JbmZvKEhUTUxDb2xsZWN0aW9uOjpUeXBl
IHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8qPiYgbWFwID0gbV9uYW1lQ29sbGVj
dGlvbkluZm9bdHlwZSAtIEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29sbGVjdGlvblR5cGVzXTsK
KyAgICBDb2xsZWN0aW9uSW5mb0J5TmFtZU1hcCYgbWFwID0gbV9uYW1lQ29sbGVjdGlvbkluZm9b
dHlwZSAtIEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVkQ29sbGVjdGlvblR5cGVzXTsKICAgICAKICAg
ICBBdG9taWNTdHJpbmcgYXRvbWljTmFtZShuYW1lKTsKICAgICAKLSAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZ0ltcGwqLCBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8qPjo6aXRlcmF0b3Ig
aXRlciA9IG1hcC5maW5kKGF0b21pY05hbWUuaW1wbCgpKTsKKyAgICBDb2xsZWN0aW9uSW5mb0J5
TmFtZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5maW5kKGF0b21pY05hbWUuaW1wbCgpKTsKICAg
ICBpZiAoaXRlciA9PSBtYXAuZW5kKCkpCiAgICAgICAgIGl0ZXIgPSBtYXAuYWRkKGF0b21pY05h
bWUuaW1wbCgpLCBuZXcgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKS5maXJzdDsKICAg
ICAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUzNDUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC04NjIsMTAgKzg2MSwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIFJl
ZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKLSAgICBtdXRhYmxlIEhhc2hN
YXA8QXRvbWljU3RyaW5nSW1wbCosIEVsZW1lbnQqPiBtX2VsZW1lbnRzQnlJZDsKLSAgICBtdXRh
YmxlIEhhc2hDb3VudGVkU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBtX2R1cGxpY2F0ZUlkczsKLSAg
ICAKLSAgICBtdXRhYmxlIEhhc2hNYXA8U3RyaW5nSW1wbCosIEVsZW1lbnQqLCBDYXNlSW5zZW5z
aXRpdmVIYXNoPFN0cmluZ0ltcGwqPiA+IG1fZWxlbWVudHNCeUFjY2Vzc0tleTsKKyAgICBzdHJ1
Y3QgQ2FjaGVkRWxlbWVudCB7CisgICAgICAgIGludCBjb3VudDsKKyAgICAgICAgRWxlbWVudCog
Zmlyc3RFbGVtZW50OworICAgIH07CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBDYWNoZWRFbGVtZW50PiBFbGVtZW50c0J5SWRNYXA7CisgICAgbXV0YWJsZSBFbGVtZW50
c0J5SWRNYXAgbV9lbGVtZW50c0J5SWQ7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1w
bCosIEVsZW1lbnQqLCBDYXNlSW5zZW5zaXRpdmVIYXNoPFN0cmluZ0ltcGwqPiA+IEVsZW1lbnRz
QnlBY2Nlc3NLZXlNYXA7CisgICAgbXV0YWJsZSBFbGVtZW50c0J5QWNjZXNzS2V5TWFwIG1fZWxl
bWVudHNCeUFjY2Vzc0tleTsKICAgICAKICAgICBJbmhlcml0ZWRCb29sIG1fZGVzaWduTW9kZTsK
ICAgICAKQEAgLTg3NCw3ICs4NzgsOCBAQCBwcml2YXRlOgogICAgIEhUTUxGb3JtRWxlbWVudDo6
Q2hlY2tlZFJhZGlvQnV0dG9ucyBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7CiAgICAgCiAgICAgSFRN
TENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1fY29sbGVjdGlvbkluZm9bSFRNTENvbGxlY3Rp
b246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXNdOwotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyo+IG1fbmFtZUNvbGxlY3Rpb25JbmZv
W0hUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uVHlwZXMgLSBIVE1MQ29sbGVjdGlvbjo6VW5uYW1l
ZENvbGxlY3Rpb25UeXBlc107CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8qPiBDb2xsZWN0aW9uSW5mb0J5TmFtZU1h
cDsKKyAgICBDb2xsZWN0aW9uSW5mb0J5TmFtZU1hcCBtX25hbWVDb2xsZWN0aW9uSW5mb1tIVE1M
Q29sbGVjdGlvbjo6Q29sbGVjdGlvblR5cGVzIC0gSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xs
ZWN0aW9uVHlwZXNdOwogCiAjaWYgRU5BQkxFKFhQQVRIKQogICAgIFJlZlB0cjxYUGF0aEV2YWx1
YXRvcj4gbV94cGF0aEV2YWx1YXRvcjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MzQ2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDct
MDktMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmUtYWRkZWQgdGhlIHRlc3QgY2FzZSBm
b3IgMTI5ODggbm93IHRoYXQgaXQncyByZS1maXhlZAorCisgICAgICAgICogZmFzdC9kb20vZHVw
bGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sOiBSZS1hZGRlZCB0aGlzIGZpbGUuCisKIDIw
MDctMDktMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gcm9s
bGVkIG91dCB0aGUgdGVzdCBjYXNlIGZvciAxMjk4OCB1bnRpbCB3ZSByZS1maXggaXQKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50
LW9yZGVyLmh0bWwJKHJldmlzaW9uIDI1MzQ1KQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9k
dXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWw6MjUzNDUpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkZWJ1
ZyhzdHIpIHsKKyAgICB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyKTsKKyAgICBk
ZWJ1Z0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWJ1Z0RpdicpOworICAgIGRpdiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgKCdkaXYnKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQodGV4
dCk7CisgICAgZGVidWdEaXYuYXBwZW5kQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7IAorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorICAgIHZhciBkaXYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1
OyBpKyspIHsKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSkp
OworICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFyIik7CisgICAgICAgIGRpdi5p
bnNlcnRCZWZvcmUoc3BhbiwgZGl2LmZpcnN0Q2hpbGQpOworICAgIH0KKworICAgIGlmIChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYmFyIikuaW5uZXJIVE1MID09IDQpCisgICAgICAgIGRlYnVn
KCJTdWNjZXNzIik7CisgICAgZWxzZQorICAgICAgICBkZWJ1ZygiRmFpbHVyZSIpOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUaGlzIHRlc3RzIHRo
YXQgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiBkb2N1bWVudCBv
cmRlciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBpZHMuIEJ1ZyAxMjk4OC4KKzxkaXYgc3R5bGU9
ImRpc3BsYXk6bm9uZSIgaWQ9ImZvbyI+dGV4dDwvZGl2PgorPGRpdiBpZD0nZGVidWdEaXYnPgor
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16181</attachid>
            <date>2007-09-02 09:34:09 -0700</date>
            <delta_ts>2007-09-04 09:12:27 -0700</delta_ts>
            <desc>corrected version of previous patch</desc>
            <filename>GetElementByIdPatch.txt</filename>
            <type>text/plain</type>
            <size>10455</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDctMDktMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbmV3
IGZpeCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5ODgKKyAg
ICAgICAgICBGaXJzdCBlbGVtZW50IChpbiBkb2N1bWVudCBvcmRlcikgaXMgbm90IHJldHVybmVk
IHdoZW4gb3RoZXIKKyAgICAgICAgICBkdXBsaWNhdGUgSUQtZWQgZWxlbWVudHMgd2VyZSBjcmVh
dGVkIGZpcnN0CisKKyAgICAgICAgUGFzc2VzIHRoZSBuZXcgdGVzdCBSb2IgYWRkZWQgYW5kIGFs
c28gdGhlIG9sZCBTVkcgdGVzdC4KKyAgICAgICAgQnV0IHdlIGNvdWxkIHVzZSBzb21lIGFkZGl0
aW9uYWwgdGVzdCBjYXNlcy4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBSZXBsYWNlZCBt
X2VsZW1lbnRzQnlJZCBhbmQgbV9kdXBsaWNhdGVJZHMgd2l0aCBhIHNpbmdsZSBIYXNoTWFwCisg
ICAgICAgIHRoYXQgdHJhY2tzIGJvdGggaG93IG1hbnkgdGltZXMgZWFjaCBpZCBvY2N1cnMgaW4g
dGhlIGRvY3VtZW50IGFuZCBhbHNvIHRoZSBmaXJzdAorICAgICAgICBlbGVtZW50IGluIGRvY3Vt
ZW50IG9yZGVyIHdpdGggdGhhdCBpZCwgYnV0IG9ubHkgaWYgd2UgaGFwcGVuIHRvIGtub3cgd2hh
dCBpdCBpcy4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKTogUmV3cm90ZSB0byB1c2UgdGhlIG5ldyBoYXNoIG1h
cC4gV2Ugbm93IHNlYXJjaAorICAgICAgICBmb3IgdGhlIGVsZW1lbnQgd2hlbmV2ZXIgd2UgZG9u
J3Qga25vdyB3aGljaCB0aGUgZmlyc3QgZWxlbWVudCBpcy4gVGhlIG9sZCBjb2RlCisgICAgICAg
IG9ubHkgc2VhcmNoZWQgd2hlbiB0aGVyZSB3YXMgc3RpbGwgYSBkdXBsaWNhdGUsIGJ1dCB0aGlz
IG5ldyBjb2RlIGNhbiBhbHNvIGVuZCB1cAorICAgICAgICBzZWFyY2hpbmcgd2hlbiB0aGVyZSB3
ZXJlIHByZXZpb3VzbHkgZHVwbGljYXRlcyBhbmQgbm93IHdlJ3JlIGJhY2sgdG8gYSBzaW5nbGUg
ZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGRFbGVtZW50QnlJZCk6IFJl
d3JvdGUuIFRoZSBuZXcgY29kZSBidW1wcyB0aGUgY291bnQgYW5kIGNsZWFycworICAgICAgICB0
aGUgY2FjaGVkIGZpcnN0IGVsZW1lbnQgaWYgd2UgYWRkIGEgbmV3IGVsZW1lbnQsIHNpbmNlIHRo
ZSBuZXcgb25lIGNvdWxkIGJlIHRoZQorICAgICAgICBmaXJzdC4gV2hlbiBhZGRpbmcgdGhlIGVs
ZW1lbnQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBzZXQgdGhlIGNvdW50IHRvIDEgYW5kIHdlCisg
ICAgICAgIGNhY2hlIHRoZSBlbGVtZW50IHNpbmNlIGl0J3Mga25vd24gdG8gYmUgdGhlIGZpcnN0
LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUVsZW1lbnRCeUlkKTogUmV3cm90
ZS4gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBlbGVtZW50LAorICAgICAgICB0aGVuIHdlIGNhbiBy
ZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIG1hcC4gSWYgd2UgcmVtb3ZlZCBhbm90aGVyIGVsZW1l
bnQsIHRoZW4gd2UKKyAgICAgICAganVzdCBuZWVkIHRvIGNoZWNrIGlmIHdodCB3ZSByZW1vdmVk
IHdhcyB0aGUgZmlyc3QuIElmIHNvLCB3ZSBzZXQgdGhlIGNhY2hlZCB2YWx1ZQorICAgICAgICB0
byAwIHRvIGZvcmNlIGdldEVsZW1lbnRCeUlkIHRvIGRvIGEgbmV3IHNlYXJjaC4KKwogMjAwNy0w
OS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xsZWQg
b3V0IGZpeCBmb3IgYnVnIDEyOTg4IGJlY2F1c2UgaXQgYnJva2UgZ2V0RWxlbWVudEJ5SWQgaW4g
YSBsYXlvdXQgdGVzdApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUzNDYpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCwyNyArNjkwLDMwIEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICByZXR1cm4gY3JlYXRl
RWxlbWVudChxTmFtZSwgZmFsc2UsIGVjKTsKIH0KIAotRWxlbWVudCAqRG9jdW1lbnQ6OmdldEVs
ZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAorRWxlbWVudCog
RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBj
b25zdAogewogICAgIGlmIChlbGVtZW50SWQubGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBFbGVtZW50ICplbGVtZW50ID0gbV9lbGVtZW50c0J5SWQuZ2V0KGVsZW1lbnRJ
ZC5pbXBsKCkpOwotICAgIGlmIChlbGVtZW50KQorICAgIEVsZW1lbnRzQnlJZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2VsZW1lbnRzQnlJZC5maW5kKGVsZW1lbnRJZC5pbXBsKCkpOworICAgIGlmIChp
dCA9PSBtX2VsZW1lbnRzQnlJZC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NF
UlQoaXQtPnNlY29uZC5jb3VudCA+IDApOworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gaXQt
PnNlY29uZC5maXJzdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICAK
LSAgICBpZiAobV9kdXBsaWNhdGVJZHMuY29udGFpbnMoZWxlbWVudElkLmltcGwoKSkpIHsKLSAg
ICAgICAgZm9yIChOb2RlICpuID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuICE9IDA7IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwot
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShpZEF0dHIpID09IGVsZW1lbnRJZCkgewotICAgICAgICAgICAgICAgICAgICBtX2R1cGxp
Y2F0ZUlkcy5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
ZWxlbWVudHNCeUlkLnNldChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgfQorCisgICAgLy8gV2Ug
a25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHdpdGggdGhpcyBpZCwgYnV0IHdlIGRvbid0
IGtub3cgd2hhdCB0aGUgZmlyc3Qgb25lIGlzLgorICAgIGZvciAoTm9kZSogbiA9IHRyYXZlcnNl
TmV4dE5vZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFz
SUQoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBlbGVtZW50SWQpIHsKKyAg
ICAgICAgICAgICAgICBpdC0+c2Vjb25kLmZpcnN0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTgwNCwx
OCArODA3LDQ1IEBAIEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBvaW50KGludCAKIAog
dm9pZCBEb2N1bWVudDo6YWRkRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50
SWQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlu
cyhlbGVtZW50SWQuaW1wbCgpKSkKLSAgICAgICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJ
ZC5pbXBsKCksIGVsZW1lbnQpOwotICAgIGVsc2UKLSAgICAgICAgbV9kdXBsaWNhdGVJZHMuYWRk
KGVsZW1lbnRJZC5pbXBsKCkpOworICAgIC8vIElmIHRoaXMgaXMgdGhlIG9ubHkgZWxlbWVudCB3
aXRoIHRoaXMgaWQsIHdlIHdpbGwgY2FjaGUgaXQgYXMgZmlyc3RFbGVtZW50LgorICAgIENhY2hl
ZEVsZW1lbnQgY2FjaGU7CisgICAgY2FjaGUuY291bnQgPSAxOworICAgIGNhY2hlLmZpcnN0RWxl
bWVudCA9IGVsZW1lbnQ7CisKKyAgICBwYWlyPEVsZW1lbnRzQnlJZE1hcDo6aXRlcmF0b3IsIGJv
b2w+IGFkZFJlc3VsdCA9IG1fZWxlbWVudHNCeUlkLmFkZChlbGVtZW50SWQuaW1wbCgpLCBjYWNo
ZSk7CisKKyAgICBpZiAoYWRkUmVzdWx0LnNlY29uZCkgeworICAgICAgICBBU1NFUlQoYWRkUmVz
dWx0LmZpcnN0LT5zZWNvbmQuY291bnQgPT0gMSk7CisgICAgICAgIEFTU0VSVChhZGRSZXN1bHQu
Zmlyc3QtPnNlY29uZC5maXJzdEVsZW1lbnQgPT0gZWxlbWVudCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNhY2hlZCBmaXJzdCBlbGVtZW50LCB0aGUgbmV3IGVsZW1l
bnQgbWlnaHQgYmUgZWFybGllciBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC8vIFNldHRpbmcg
Zmlyc3RFbGVtZW50IHRvIDAgbWFrZXMgZ2V0RWxlbWVudEJ5SWQgc2VhcmNoIHRoZSBuZXh0IHRp
bWUgaXQncyBjYWxsZWQuCisgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuZmlyc3QtPnNlY29uZC5j
b3VudCA+IDApOworICAgICAgICArK2FkZFJlc3VsdC5maXJzdC0+c2Vjb25kLmNvdW50OworICAg
ICAgICBhZGRSZXN1bHQuZmlyc3QtPnNlY29uZC5maXJzdEVsZW1lbnQgPSAwOworICAgIH0KIH0K
IAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBl
bGVtZW50SWQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKG1fZWxlbWVudHNCeUlkLmdl
dChlbGVtZW50SWQuaW1wbCgpKSA9PSBlbGVtZW50KQotICAgICAgICBtX2VsZW1lbnRzQnlJZC5y
ZW1vdmUoZWxlbWVudElkLmltcGwoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2R1cGxpY2F0ZUlk
cy5yZW1vdmUoZWxlbWVudElkLmltcGwoKSk7CisgICAgRWxlbWVudHNCeUlkTWFwOjppdGVyYXRv
ciBpdCA9IG1fZWxlbWVudHNCeUlkLmZpbmQoZWxlbWVudElkLmltcGwoKSk7CisgICAgaWYgKGl0
ID09IG1fZWxlbWVudHNCeUlkLmVuZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGl0LT5zZWNvbmQuY291bnQg
PiAwKTsKKyAgICBpZiAoLS1pdC0+c2Vjb25kLmNvdW50ID09IDApIHsKKyAgICAgICAgLy8gVGhp
cyB3YXMgdGhlIGxhc3QgZWxlbWVudCB3aXRoIHRoaXMgaWQsIHNvIHJlbW92ZSB0aGUgaWQgZnJv
bSB0aGUgbWFwIGVudGlyZWx5LgorICAgICAgICBtX2VsZW1lbnRzQnlJZC5yZW1vdmUoaXQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGl0LT5zZWNvbmQuZmlyc3RFbGVtZW50
ID09IGVsZW1lbnQpIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIGVsZW1lbnRzIHdpdGgg
dGhpcyBpZCwgYnV0IHdlIHJlbW92ZWQgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgLy8gU2V0dGlu
ZyBmaXJzdEVsZW1lbnQgdG8gMCBtYWtlcyBnZXRFbGVtZW50QnlJZCBzZWFyY2ggdGhlIG5leHQg
dGltZSBpdCdzIGNhbGxlZC4KKyAgICAgICAgaXQtPnNlY29uZC5maXJzdEVsZW1lbnQgPSAwOwor
ICAgIH0KIH0KIAogRWxlbWVudCogRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25z
dCBTdHJpbmcmIGtleSkgY29uc3QKQEAgLTMzOTYsMTEgKzM0MjYsMTEgQEAgUGFzc1JlZlB0cjxI
VE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvYwogCiBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlv
bkluZm8qIERvY3VtZW50OjpuYW1lQ29sbGVjdGlvbkluZm8oSFRNTENvbGxlY3Rpb246OlR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyo+JiBtYXAgPSBtX25hbWVDb2xsZWN0
aW9uSW5mb1t0eXBlIC0gSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXNdOwor
ICAgIENvbGxlY3Rpb25JbmZvQnlOYW1lTWFwJiBtYXAgPSBtX25hbWVDb2xsZWN0aW9uSW5mb1t0
eXBlIC0gSFRNTENvbGxlY3Rpb246OlVubmFtZWRDb2xsZWN0aW9uVHlwZXNdOwogICAgIAogICAg
IEF0b21pY1N0cmluZyBhdG9taWNOYW1lKG5hbWUpOwogICAgIAotICAgIEhhc2hNYXA8QXRvbWlj
U3RyaW5nSW1wbCosIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyo+OjppdGVyYXRvciBp
dGVyID0gbWFwLmZpbmQoYXRvbWljTmFtZS5pbXBsKCkpOworICAgIENvbGxlY3Rpb25JbmZvQnlO
YW1lTWFwOjppdGVyYXRvciBpdGVyID0gbWFwLmZpbmQoYXRvbWljTmFtZS5pbXBsKCkpOwogICAg
IGlmIChpdGVyID09IG1hcC5lbmQoKSkKICAgICAgICAgaXRlciA9IG1hcC5hZGQoYXRvbWljTmFt
ZS5pbXBsKCksIG5ldyBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8pLmZpcnN0OwogICAg
IApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNTM0NSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTg2MiwxMCArODYxLDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmVm
UHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKIAotICAgIG11dGFibGUgSGFzaE1h
cDxBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVudCo+IG1fZWxlbWVudHNCeUlkOwotICAgIG11dGFi
bGUgSGFzaENvdW50ZWRTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IG1fZHVwbGljYXRlSWRzOwotICAg
IAotICAgIG11dGFibGUgSGFzaE1hcDxTdHJpbmdJbXBsKiwgRWxlbWVudCosIENhc2VJbnNlbnNp
dGl2ZUhhc2g8U3RyaW5nSW1wbCo+ID4gbV9lbGVtZW50c0J5QWNjZXNzS2V5OworICAgIHN0cnVj
dCBDYWNoZWRFbGVtZW50IHsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBFbGVtZW50KiBm
aXJzdEVsZW1lbnQ7CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIENhY2hlZEVsZW1lbnQ+IEVsZW1lbnRzQnlJZE1hcDsKKyAgICBtdXRhYmxlIEVsZW1lbnRz
QnlJZE1hcCBtX2VsZW1lbnRzQnlJZDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBs
KiwgRWxlbWVudCosIENhc2VJbnNlbnNpdGl2ZUhhc2g8U3RyaW5nSW1wbCo+ID4gRWxlbWVudHNC
eUFjY2Vzc0tleU1hcDsKKyAgICBtdXRhYmxlIEVsZW1lbnRzQnlBY2Nlc3NLZXlNYXAgbV9lbGVt
ZW50c0J5QWNjZXNzS2V5OwogICAgIAogICAgIEluaGVyaXRlZEJvb2wgbV9kZXNpZ25Nb2RlOwog
ICAgIApAQCAtODc0LDcgKzg3OCw4IEBAIHByaXZhdGU6CiAgICAgSFRNTEZvcm1FbGVtZW50OjpD
aGVja2VkUmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsKICAgICAKICAgICBIVE1M
Q29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8gbV9jb2xsZWN0aW9uSW5mb1tIVE1MQ29sbGVjdGlv
bjo6VW5uYW1lZENvbGxlY3Rpb25UeXBlc107Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvKj4gbV9uYW1lQ29sbGVjdGlvbkluZm9b
SFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25UeXBlcyAtIEhUTUxDb2xsZWN0aW9uOjpVbm5hbWVk
Q29sbGVjdGlvblR5cGVzXTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyo+IENvbGxlY3Rpb25JbmZvQnlOYW1lTWFw
OworICAgIENvbGxlY3Rpb25JbmZvQnlOYW1lTWFwIG1fbmFtZUNvbGxlY3Rpb25JbmZvW0hUTUxD
b2xsZWN0aW9uOjpDb2xsZWN0aW9uVHlwZXMgLSBIVE1MQ29sbGVjdGlvbjo6VW5uYW1lZENvbGxl
Y3Rpb25UeXBlc107CiAKICNpZiBFTkFCTEUoWFBBVEgpCiAgICAgUmVmUHRyPFhQYXRoRXZhbHVh
dG9yPiBtX3hwYXRoRXZhbHVhdG9yOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzNDYpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwNy0w
OS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZS1hZGRlZCB0aGUgdGVzdCBjYXNlIGZv
ciAxMjk4OCBub3cgdGhhdCBpdCdzIHJlLWZpeGVkCisKKyAgICAgICAgKiBmYXN0L2RvbS9kdXBs
aWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWw6IFJlLWFkZGVkIHRoaXMgZmlsZS4KKwogMjAw
Ny0wOS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xs
ZWQgb3V0IHRoZSB0ZXN0IGNhc2UgZm9yIDEyOTg4IHVudGlsIHdlIHJlLWZpeCBpdApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQt
b3JkZXIuaHRtbAkocmV2aXNpb24gMjUzNDUpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1
cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRtbDoyNTM0NSkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRlYnVn
KHN0cikgeworICAgIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpOworICAgIGRl
YnVnRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlYnVnRGl2Jyk7CisgICAgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAoJ2RpdicpOworICAgIGRpdi5hcHBlbmRDaGlsZCh0ZXh0
KTsKKyAgICBkZWJ1Z0Rpdi5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBydW5UZXN0
KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsgCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisgICAgdmFyIGRpdiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7
IGkrKykgeworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpKSk7
CisgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCJpZCIsICJiYXIiKTsKKyAgICAgICAgZGl2Lmlu
c2VydEJlZm9yZShzcGFuLCBkaXYuZmlyc3RDaGlsZCk7CisgICAgfQorCisgICAgaWYgKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJiYXIiKS5pbm5lckhUTUwgPT0gNCkKKyAgICAgICAgZGVidWco
IlN1Y2Nlc3MiKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCJGYWlsdXJlIik7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KK1RoaXMgdGVzdHMgdGhh
dCBnZXRFbGVtZW50QnlJZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IGluIGRvY3VtZW50IG9y
ZGVyIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGlkcy4gQnVnIDEyOTg4LgorPGRpdiBzdHlsZT0i
ZGlzcGxheTpub25lIiBpZD0iZm9vIj50ZXh0PC9kaXY+Cis8ZGl2IGlkPSdkZWJ1Z0Rpdic+Cis8
L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16193</attachid>
            <date>2007-09-04 05:27:00 -0700</date>
            <delta_ts>2007-09-04 09:12:27 -0700</delta_ts>
            <desc>alternate patch: a fixed version of Rob&apos;s patch</desc>
            <filename>12988-mjs.patch.txt</filename>
            <type>text/plain</type>
            <size>6445</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDctMDktMDQgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQg
KGluIGRvY3VtZW50IG9yZGVyKSBpcyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUg
SUQtZWQgZWxlbWVudHMgd2VyZSBjcmVhdGVkIGZpcnN0CisKKyAgICAgICAgUmVzZXQgdGhlIGVs
ZW1lbnQgaWQgY2FjaGUgd2hlbiBpZCdzIGFyZSBhZGRlZCBhbmQgdGhlcmUgYXJlIGR1cGxpY2F0
ZXMgZm9yIHRoYXQgaWQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjphZGRFbGVtZW50QnlJZCk6CisKIDIwMDctMDktMDMgIERhdmlkIEhhcnJpc29uICA8
aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtldmluIERlY2tlci4K
SW5kZXg6IFdlYkNvcmUvTGF5b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVu
dC1vcmRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvTGF5b3V0VGVzdHMvZmFzdC9kb20v
ZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
ZnVuY3Rpb24gZGVidWcoc3RyKSB7CisgICAgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHN0cik7CisgICAgZGVidWdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVidWdEaXYn
KTsKKyAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50ICgnZGl2Jyk7CisgICAgZGl2LmFw
cGVuZENoaWxkKHRleHQpOworICAgIGRlYnVnRGl2LmFwcGVuZENoaWxkKGRpdik7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eyAKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAg
ICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGkpKTsKKyAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoImlkIiwgImJhciIpOwor
ICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKHNwYW4sIGRpdi5maXJzdENoaWxkKTsKKyAgICB9CisK
KyAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhciIpLmlubmVySFRNTCA9PSA0KQor
ICAgICAgICBkZWJ1ZygiU3VjY2VzcyIpOworICAgIGVsc2UKKyAgICAgICAgZGVidWcoIkZhaWx1
cmUiKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgor
VGhpcyB0ZXN0cyB0aGF0IGdldEVsZW1lbnRCeUlkIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQg
aW4gZG9jdW1lbnQgb3JkZXIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgaWRzLiBCdWcgMTI5ODgu
Cis8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmUiIGlkPSJmb28iPnRleHQ8L2Rpdj4KKzxkaXYgaWQ9
J2RlYnVnRGl2Jz4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gMjUzNTEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5OCw3ICs2OTgsOCBAQCBFbGVtZW50ICpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29u
c3QgCiAgICAgRWxlbWVudCAqZWxlbWVudCA9IG1fZWxlbWVudHNCeUlkLmdldChlbGVtZW50SWQu
aW1wbCgpKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAg
ICAgIAorCisgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHdpdGggdGhp
cyBpZCwgYnV0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUgZmlyc3Qgb25lIGlzLgogICAgIGlmICht
X2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgewogICAgICAgICBmb3Ig
KE5vZGUgKm4gPSB0cmF2ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewpAQCAtODA0
LDEwICs4MDUsMjEgQEAgRWxlbWVudCogRG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQoaW50IAog
CiB2b2lkIERvY3VtZW50OjphZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1l
bnRJZCwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudHNCeUlkLmNvbnRh
aW5zKGVsZW1lbnRJZC5pbXBsKCkpKQorICAgIGlmICghbV9lbGVtZW50c0J5SWQuY29udGFpbnMo
ZWxlbWVudElkLmltcGwoKSkgJiYKKyAgICAgICAgIW1fZHVwbGljYXRlSWRzLmNvbnRhaW5zKGVs
ZW1lbnRJZC5pbXBsKCkpKSAKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCB3
aXRoIHRoaXMgaWQsIGNhY2hlIGl0LgogICAgICAgICBtX2VsZW1lbnRzQnlJZC5zZXQoZWxlbWVu
dElkLmltcGwoKSwgZWxlbWVudCk7Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICAvLyBU
aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMgd2l0aCB0aGlzIGlkLiBSZW1vdmUgdGhlIG1fZWxl
bWVudHNCeUlkIGNhY2hlCisgICAgICAgIC8vIGZvciB0aGlzIGlkIHNvIGdldEVsZW1lbnRCeUlk
IHNlYXJjaGVzIGZvciBpdCBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLgogICAgICAgICBtX2R1cGxp
Y2F0ZUlkcy5hZGQoZWxlbWVudElkLmltcGwoKSk7CisgICAgICAgIAorICAgICAgICBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBFbGVtZW50Kj46Oml0ZXJhdG9yIGNhY2hlZEl0ZW0gPSBtX2Vs
ZW1lbnRzQnlJZC5maW5kKGVsZW1lbnRJZC5pbXBsKCkpOworICAgICAgICBpZiAoY2FjaGVkSXRl
bSAhPSBtX2VsZW1lbnRzQnlJZC5lbmQoKSkgeworICAgICAgICAgICAgbV9kdXBsaWNhdGVJZHMu
YWRkKGVsZW1lbnRJZC5pbXBsKCkpOworICAgICAgICAgICAgbV9lbGVtZW50c0J5SWQucmVtb3Zl
KGVsZW1lbnRJZC5pbXBsKCkpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIERvY3VtZW50
OjpyZW1vdmVFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVu
dCogZWxlbWVudCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUzNTEpCisrKyBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwogCisgICAgLy8g
d2UgbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IG1fZHVwbGljYXRlSWRzIGlzIHRoZSBjb3Vu
dCBvZiBhbGwgZWxlbWVudHMgd2l0aCBhIGdpdmVuIElECisgICAgLy8gZXhjbHVkaW5nIHRoZSBv
bmUgcmVmZXJlbmNlZCBpbiBtX2VsZW1lbnRzQnlJZCwgaWYgYW55LiBUaGlzIG1lYW5zIGl0IG9u
ZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGNvdW50CisgICAgLy8gd2hlbiB0aGUgZmlyc3Qgbm9kZSB3
aXRoIGEgZ2l2ZW4gSUQgaXMgY2FjaGVkLCBvdGhlcndpc2UgdGhlIHNhbWUgYXMgdGhlIHRvdGFs
IGNvdW50LgogICAgIG11dGFibGUgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVudCo+
IG1fZWxlbWVudHNCeUlkOwogICAgIG11dGFibGUgSGFzaENvdW50ZWRTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+IG1fZHVwbGljYXRlSWRzOwogICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUzNTEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAwNy0wOS0wNCAgUm9iIEJ1aXMgIDxidWlzQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGNhc2UgZm9yOgorICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk4OAorICAgICAgICBGaXJzdCBl
bGVtZW50IChpbiBkb2N1bWVudCBvcmRlcikgaXMgbm90IHJldHVybmVkIHdoZW4gb3RoZXIgZHVw
bGljYXRlIElELWVkIGVsZW1lbnRzIHdlcmUgY3JlYXRlZCBmaXJzdAorCisgICAgICAgICogZmFz
dC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sOiBBZGRlZC4KKwogMjAwNy0w
OS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSByb2xsZWQg
b3V0IHRoZSB0ZXN0IGNhc2UgZm9yIDEyOTg4IHVudGlsIHdlIHJlLWZpeCBpdApJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3Jk
ZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1p
ZHMtZG9jdW1lbnQtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkZWJ1ZyhzdHIpIHsKKyAgICB0ZXh0ID0g
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyKTsKKyAgICBkZWJ1Z0RpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdkZWJ1Z0RpdicpOworICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQgKCdkaXYnKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQodGV4dCk7CisgICAgZGVidWdEaXYuYXBw
ZW5kQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7IAorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgfQorICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiZm9vIik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHNwYW4uYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSkpOworICAgICAgICBzcGFuLnNldEF0
dHJpYnV0ZSgiaWQiLCAiYmFyIik7CisgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoc3BhbiwgZGl2
LmZpcnN0Q2hpbGQpOworICAgIH0KKworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
YmFyIikuaW5uZXJIVE1MID09IDQpCisgICAgICAgIGRlYnVnKCJTdWNjZXNzIik7CisgICAgZWxz
ZQorICAgICAgICBkZWJ1ZygiRmFpbHVyZSIpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUaGlzIHRlc3RzIHRoYXQgZ2V0RWxlbWVudEJ5SWQgcmV0
dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiBkb2N1bWVudCBvcmRlciB3aGVuIHRoZXJlIGFyZSBt
dWx0aXBsZSBpZHMuIEJ1ZyAxMjk4OC4KKzxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9ImZv
byI+dGV4dDwvZGl2PgorPGRpdiBpZD0nZGVidWdEaXYnPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16197</attachid>
            <date>2007-09-04 09:12:27 -0700</date>
            <delta_ts>2007-09-29 19:36:05 -0700</delta_ts>
            <desc>newer version of Rob&apos;s patch, improved a bit more</desc>
            <filename>12988-darin.patch.txt</filename>
            <type>text/plain</type>
            <size>7587</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDctMDktMDQgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQg
KGluIGRvY3VtZW50IG9yZGVyKSBpcyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUg
SUQtZWQgZWxlbWVudHMgd2VyZSBjcmVhdGVkIGZpcnN0CisKKyAgICAgICAgUmVzZXQgdGhlIGVs
ZW1lbnQgaWQgY2FjaGUgd2hlbiBhbiBpZCBpcyBhZGRlZCBhbmQgdGhlcmUgaXMgYSBkdXBsaWNh
dGUgZm9yIHRoYXQgaWQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OmFkZEVsZW1lbnRCeUlkKToKKwogMjAwNy0wOS0wNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
LgpJbmRleDogV2ViQ29yZS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3Vt
ZW50LW9yZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL0xheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBkZWJ1ZyhzdHIpIHsKKyAgICB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoc3RyKTsKKyAgICBkZWJ1Z0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWJ1Z0Rp
dicpOworICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgKCdkaXYnKTsKKyAgICBkaXYu
YXBwZW5kQ2hpbGQodGV4dCk7CisgICAgZGVidWdEaXYuYXBwZW5kQ2hpbGQoZGl2KTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7IAorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQor
ICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9vIik7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoaSkpOworICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgiaWQiLCAiYmFyIik7
CisgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoc3BhbiwgZGl2LmZpcnN0Q2hpbGQpOworICAgIH0K
KworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmFyIikuaW5uZXJIVE1MID09IDQp
CisgICAgICAgIGRlYnVnKCJTdWNjZXNzIik7CisgICAgZWxzZQorICAgICAgICBkZWJ1ZygiRmFp
bHVyZSIpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
CitUaGlzIHRlc3RzIHRoYXQgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVu
dCBpbiBkb2N1bWVudCBvcmRlciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBpZHMuIEJ1ZyAxMjk4
OC4KKzxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9ImZvbyI+dGV4dDwvZGl2PgorPGRpdiBp
ZD0nZGVidWdEaXYnPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJDb3JlL0xheW91dFRlc3RzL2Zhc3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQt
b3JkZXIuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDI1MzUzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OTgsOCArNjk4LDkgQEAgRWxlbWVudCAqRG9jdW1lbnQ6OmdldEVsZW1lbnRCeUlkKGNvbnN0IAog
ICAgIEVsZW1lbnQgKmVsZW1lbnQgPSBtX2VsZW1lbnRzQnlJZC5nZXQoZWxlbWVudElkLmltcGwo
KSk7CiAgICAgaWYgKGVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICAK
KwogICAgIGlmIChtX2R1cGxpY2F0ZUlkcy5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgewor
ICAgICAgICAvLyBXZSBrbm93IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIG5vZGUgd2l0aCB0aGlzIGlk
LCBidXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBmaXJzdCBvbmUgaXMuCiAgICAgICAgIGZvciAo
Tm9kZSAqbiA9IHRyYXZlcnNlTmV4dE5vZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKQEAgLTcxMCw2ICs3
MTEsNyBAQCBFbGVtZW50ICpEb2N1bWVudDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTgwNCwxMCArODA2LDI4IEBA
IEVsZW1lbnQqIERvY3VtZW50OjplbGVtZW50RnJvbVBvaW50KGludCAKIAogdm9pZCBEb2N1bWVu
dDo6YWRkRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnQq
IGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlucyhlbGVtZW50SWQu
aW1wbCgpKSkKLSAgICAgICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVs
ZW1lbnQpOwotICAgIGVsc2UKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEVsZW1lbnQqPjo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgaWYgKCFtX2R1cGxpY2F0ZUlkcy5j
b250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgeworICAgICAgICAvLyBGYXN0IHBhdGguIFRoZSBJ
RCBpcyBub3QgYWxyZWFkeSBpbiBtX2R1cGxpY2F0ZUlkcywgc28gd2UgYXNzdW1lIHRoYXQgaXQn
cworICAgICAgICAvLyBhbHNvIG5vdCBhbHJlYWR5IGluIG1fZWxlbWVudHNCeUlkIGFuZCBkbyBh
biBhZGQuIElmIHRoYXQgYWRkIHN1Y2NlZWRzLCB3ZSdyZSBkb25lLgorICAgICAgICBwYWlyPGl0
ZXJhdG9yLCBib29sPiBhZGRSZXN1bHQgPSBtX2VsZW1lbnRzQnlJZC5hZGQoZWxlbWVudElkLmlt
cGwoKSwgZWxlbWVudCk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuc2Vjb25kKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAvLyBUaGUgYWRkIGZhaWxlZCwgc28gdGhpcyBJRCB3YXMgYWxy
ZWFkeSBjYWNoZWQgaW4gbV9lbGVtZW50c0J5SWQuCisgICAgICAgIC8vIFRoZXJlIGFyZSBtdWx0
aXBsZSBlbGVtZW50cyB3aXRoIHRoaXMgSUQuIFJlbW92ZSB0aGUgbV9lbGVtZW50c0J5SWQKKyAg
ICAgICAgLy8gY2FjaGUgZm9yIHRoaXMgSUQgc28gZ2V0RWxlbWVudEJ5SWQgc2VhcmNoZXMgZm9y
IGl0IG5leHQgdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAgIG1fZWxlbWVudHNCeUlkLnJlbW92
ZShhZGRSZXN1bHQuZmlyc3QpOwogICAgICAgICBtX2R1cGxpY2F0ZUlkcy5hZGQoZWxlbWVudElk
LmltcGwoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGVs
ZW1lbnRzIHdpdGggdGhpcyBJRC4gSWYgaXQgZXhpc3RzLCByZW1vdmUgdGhlIG1fZWxlbWVudHNC
eUlkCisgICAgICAgIC8vIGNhY2hlIGZvciB0aGlzIElEIHNvIGdldEVsZW1lbnRCeUlkIHNlYXJj
aGVzIGZvciBpdCBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLgorICAgICAgICBpdGVyYXRvciBjYWNo
ZWRJdGVtID0gbV9lbGVtZW50c0J5SWQuZmluZChlbGVtZW50SWQuaW1wbCgpKTsKKyAgICAgICAg
aWYgKGNhY2hlZEl0ZW0gIT0gbV9lbGVtZW50c0J5SWQuZW5kKCkpIHsKKyAgICAgICAgICAgIG1f
ZWxlbWVudHNCeUlkLnJlbW92ZShjYWNoZWRJdGVtKTsKKyAgICAgICAgICAgIG1fZHVwbGljYXRl
SWRzLmFkZChlbGVtZW50SWQuaW1wbCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2R1cGxp
Y2F0ZUlkcy5hZGQoZWxlbWVudElkLmltcGwoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92
ZUVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVt
ZW50KQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNTM1MykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw2ICs4NjIsOSBAQCBwcml2YXRlOgogICAgIAogICAg
IFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKKyAgICAvLyBXZSBtYWlu
dGFpbiB0aGUgaW52YXJpYW50IHRoYXQgbV9kdXBsaWNhdGVJZHMgaXMgdGhlIGNvdW50IG9mIGFs
bCBlbGVtZW50cyB3aXRoIGEgZ2l2ZW4gSUQKKyAgICAvLyBleGNsdWRpbmcgdGhlIG9uZSByZWZl
cmVuY2VkIGluIG1fZWxlbWVudHNCeUlkLCBpZiBhbnkuIFRoaXMgbWVhbnMgaXQgb25lIGxlc3Mg
dGhhbiB0aGUgdG90YWwgY291bnQKKyAgICAvLyB3aGVuIHRoZSBmaXJzdCBub2RlIHdpdGggYSBn
aXZlbiBJRCBpcyBjYWNoZWQsIG90aGVyd2lzZSB0aGUgc2FtZSBhcyB0aGUgdG90YWwgY291bnQu
CiAgICAgbXV0YWJsZSBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFbGVtZW50Kj4gbV9lbGVt
ZW50c0J5SWQ7CiAgICAgbXV0YWJsZSBIYXNoQ291bnRlZFNldDxBdG9taWNTdHJpbmdJbXBsKj4g
bV9kdXBsaWNhdGVJZHM7CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTM1MykKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA3LTA5
LTA0ICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0Y2FzZSBmb3I6CisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTg4CisgICAgICAgIEZpcnN0IGVsZW1lbnQg
KGluIGRvY3VtZW50IG9yZGVyKSBpcyBub3QgcmV0dXJuZWQgd2hlbiBvdGhlciBkdXBsaWNhdGUg
SUQtZWQgZWxlbWVudHMgd2VyZSBjcmVhdGVkIGZpcnN0CisKKyAgICAgICAgKiBmYXN0L2RvbS9k
dXBsaWNhdGUtaWRzLWRvY3VtZW50LW9yZGVyLmh0bWw6IEFkZGVkLgorCiAyMDA3LTA5LTA0ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YWNpZWouCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9kdXBsaWNhdGUtaWRzLWRvY3VtZW50
LW9yZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZHVwbGljYXRl
LWlkcy1kb2N1bWVudC1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vZHVwbGljYXRlLWlkcy1kb2N1bWVudC1vcmRlci5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRlYnVnKHN0
cikgeworICAgIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpOworICAgIGRlYnVn
RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlYnVnRGl2Jyk7CisgICAgZGl2ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCAoJ2RpdicpOworICAgIGRpdi5hcHBlbmRDaGlsZCh0ZXh0KTsK
KyAgICBkZWJ1Z0Rpdi5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsgCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsr
aSkgeworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpKSk7Cisg
ICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCJpZCIsICJiYXIiKTsKKyAgICAgICAgZGl2Lmluc2Vy
dEJlZm9yZShzcGFuLCBkaXYuZmlyc3RDaGlsZCk7CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJiYXIiKS5pbm5lckhUTUwgPT0gNCkKKyAgICAgICAgZGVidWcoIlN1
Y2Nlc3MiKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCJGYWlsdXJlIik7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KK1RoaXMgdGVzdHMgdGhhdCBn
ZXRFbGVtZW50QnlJZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IGluIGRvY3VtZW50IG9yZGVy
IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGlkcy4gQnVnIDEyOTg4LgorPGRpdiBzdHlsZT0iZGlz
cGxheTpub25lIiBpZD0iZm9vIj50ZXh0PC9kaXY+Cis8ZGl2IGlkPSdkZWJ1Z0Rpdic+Cis8L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvZG9tL2R1cGxpY2F0ZS1pZHMtZG9jdW1lbnQtb3JkZXIuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoK
</data>
<flag name="review"
          id="6806"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>