<?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>24812</bug_id>
          
          <creation_ts>2009-03-25 13:02:53 -0700</creation_ts>
          <short_desc>Add custom V8 bindings for HTMLDocument</short_desc>
          <delta_ts>2009-03-28 09:24:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mike Belshe">mbelshe</reporter>
          <assigned_to name="Mike Belshe">mbelshe</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>115200</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-25 13:02:53 -0700</bug_when>
    <thetext>Add custom bindings for HTMLDocument in v8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115205</commentid>
    <comment_count>1</comment_count>
      <attachid>28943</attachid>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-25 13:08:26 -0700</bug_when>
    <thetext>Created attachment 28943
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115321</commentid>
    <comment_count>2</comment_count>
      <attachid>28943</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-26 07:28:50 -0700</bug_when>
    <thetext>Comment on attachment 28943
patch

Looks good, except for:

Add bug URL in ChangeLog. I usually put it two line-breaks after Reviewed by ...

&gt; +CALLBACK_FUNC_DECL(HTMLDocumentOpen) {

Brace on new line.

&gt; +            if (context.IsEmpty()) return v8::Undefined();

return on new line.

&gt; +            if (!function-&gt;IsFunction()) {
&gt; +                V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, &quot;open is not a function&quot;);
&gt; +                return v8::Undefined();
&gt; +            }

use throwError helper from V8Proxy.h

&gt; +    RefPtr&lt;HTMLCollection&gt; v = WTF::getPtr(imp-&gt;all());
&gt; +    return V8Proxy::ToV8Object(V8ClassIndex::HTMLCOLLECTION, WTF::getPtr(v));

v -&gt; collection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115335</commentid>
    <comment_count>3</comment_count>
      <attachid>28970</attachid>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-26 08:48:44 -0700</bug_when>
    <thetext>Created attachment 28970
patch w/ Dimitri&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115341</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-26 10:02:39 -0700</bug_when>
    <thetext>Drive by comments.

&gt; changelog
Needs a link to the bug in the changelog.

&gt; V8HTMLDocumentCustom.cpp
Copyright: Use 2007, 2008, 2009 instead of range.

&gt; static String WriteHelperGetString(const v8::Arguments&amp; args) {
Lowercase the first letter of the function (camelCase).

&gt; For WriteHelperGetString, HTMLDocumentWrite, and HTMLDocumentWriteln
The braces need to be moved to the next line.

&gt; str += ToWebCoreString(args[i]);
Use toWebCoreString (in V8Binding.h)


&gt; HTMLDocument* imp = V8Proxy::DOMWrapperToNode&lt;HTMLDocument&gt;(args.Holder());
Use whole words for variables.  imp -&gt; document?


&gt;                 V8Proxy::throwError(&quot;open is not a function&quot;);
&gt;                return v8::Undefined();
Use throwError (from V8Proxy.h)


&gt; v8::Local&lt;v8::Value&gt;* params = new v8::Local&lt;v8::Value&gt;[args.Length()];
Consider using OwnArrayPtr (from wtf/OwnArrayPtr.h)

&gt; for (int i = 0; i &lt; args.Length(); i++)
Consider ++i (as you did above).  Consistency is nice. 



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115383</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-26 13:05:44 -0700</bug_when>
    <thetext>LGTM once David&apos;s comments are addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115393</commentid>
    <comment_count>6</comment_count>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-26 13:38:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; V8HTMLDocumentCustom.cpp
&gt; Copyright: Use 2007, 2008, 2009 instead of range.

This kind of stuff isn&apos;t worth nitting.  Not changing.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115396</commentid>
    <comment_count>7</comment_count>
      <attachid>28978</attachid>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-26 13:39:16 -0700</bug_when>
    <thetext>Created attachment 28978
more nitties</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115428</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-26 14:40:53 -0700</bug_when>
    <thetext>&gt; &gt; &gt; V8HTMLDocumentCustom.cpp
&gt; &gt; Copyright: Use 2007, 2008, 2009 instead of range.
&gt; This kind of stuff isn&apos;t worth nitting.  Not changing.

I think it took more time to write that comment that it would have to fix the issue :(

This is one of those things that WebKit reviews have commented on a few times.  For example, see https://bugs.webkit.org/show_bug.cgi?id=23797 which has comments from Darin Alder about this very issue.

Also the ChangeLog doesn&apos;t have a link to this bug.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115666</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-28 09:19:13 -0700</bug_when>
    <thetext>Still no bug URL in ChangeLog, and for all functions, the opening brace should begin on a new line. But no need to keep nitting this -- I&apos;l fix up and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115668</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-28 09:24:28 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/42070.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28943</attachid>
            <date>2009-03-25 13:08:26 -0700</date>
            <delta_ts>2009-03-26 13:39:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug24812.patch</filename>
            <type>text/plain</type>
            <size>8282</size>
            <attacher name="Mike Belshe">mbelshe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOSBAQAorMjAwOS0wMy0yNCAgTWlrZSBCZWxzaGUgIDxtaWtlQGJlbHNoZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIEFkZCBWOCBj
dXN0b20gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVudAorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAorCiAyMDA5LTAzLTI0ICBBZGFtIExhbmdsZXkgIDxhZ2xA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1M
SUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K05BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50KQoreworICAgIC8vIE9ubHkgaGFu
ZGxlIGRvY3VtZW50LmFsbC4gIEluc2VydCB0aGUgbWFya2VyIG9iamVjdCBpbnRvIHRoZQorICAg
IC8vIHNoYWRvdyBpbnRlcm5hbCBmaWVsZCB0byBzaWduYWwgdGhhdCBkb2N1bWVudC5hbGwgaXMg
bm8gbG9uZ2VyCisgICAgLy8gc2hhZG93ZWQuCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0
cmluZyhuYW1lKTsKKyAgICBpZiAoa2V5ICE9ICJhbGwiKQorICAgICAgICByZXR1cm4gZGVsZXRp
b25Ob3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgQVNTRVJUKGluZm8uSG9sZGVyKCkt
PkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9jdW1lbnRJbnRlcm5hbEZpZWxkQ291bnQp
OworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1hcmtlciA9IGluZm8uSG9sZGVyKCktPkdldElu
dGVybmFsRmllbGQoa0hUTUxEb2N1bWVudE1hcmtlckluZGV4KTsKKyAgICBpbmZvLkhvbGRlcigp
LT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgbWFya2VyKTsKKyAg
ICByZXR1cm4gdjg6OlRydWUoKTsKK30KKworTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxEb2N1
bWVudCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuTmFtZWRQcm9wZXJ0eUdl
dHRlciIpOworICAgIEF0b21pY1N0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7CisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGRvY3VtZW50LmFsbC4gIElmIHRoZSB2YWx1ZSBpbiB0
aGUgc2hhZG93CisgICAgLy8gaW50ZXJuYWwgZmllbGQgaXMgbm90IHRoZSBtYXJrZXIgb2JqZWN0
LCB0aGVuIGRvY3VtZW50LmFsbCBoYXMKKyAgICAvLyBiZWVuIHRlbXBvcmFyaWx5IHNoYWRvd2Vk
IGFuZCB3ZSByZXR1cm4gdGhlIHZhbHVlLgorICAgIGlmIChrZXkgPT0gImFsbCIpIHsKKyAgICAg
ICAgQVNTRVJUKGluZm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9j
dW1lbnRJbnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBt
YXJrZXIgPSBpbmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRNYXJr
ZXJJbmRleCk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gaW5mby5Ib2xk
ZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5kZXgpOworICAgICAg
ICBpZiAobWFya2VyICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIEhUTUxEb2N1bWVudCogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTm9kZTxIVE1M
RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOworCisgICAgLy8gRmFzdCBjYXNlIGZvciBuYW1lZCBl
bGVtZW50cyB0aGF0IGFyZSBub3QgdGhlcmUuCisgICAgaWYgKCFpbXAtPmhhc05hbWVkSXRlbShr
ZXkuaW1wbCgpKSAmJiAhaW1wLT5oYXNFeHRyYU5hbWVkSXRlbShrZXkuaW1wbCgpKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworCisgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBpdGVtcyA9IGltcC0+ZG9jdW1lbnROYW1lZEl0ZW1zKGtleSk7CisgICAgaWYgKCFp
dGVtcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OworCisgICAgaWYgKGl0ZW1zLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBpdGVtcy0+Zmlyc3RJdGVtKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IDA7CisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBz
dGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCisg
ICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKKworICAgICAgICByZXR1cm4gVjhQcm94eTo6Tm9k
ZVRvVjhPYmplY3Qobm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworfQorCisvLyBI
VE1MRG9jdW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDb25jYXRlbmF0ZXMgImFyZ3MiIHRvIGEgc3RyaW5n
LiBJZiBhcmdzIGlzIGVtcHR5LCByZXR1cm5zIGVtcHR5IHN0cmluZy4KKy8vIEZpcmVmb3gvU2Fm
YXJpL0lFIHN1cHBvcnQgbm9uLXN0YW5kYXJkIGFyZ3VtZW50cyB0byBkb2N1bWVudC53cml0ZSwg
ZXg6CisvLyAgIGRvY3VtZW50LndyaXRlKCJhIiwgImIiLCAiYyIpIC0tPiBkb2N1bWVudC53cml0
ZSgiYWJjIikKKy8vICAgZG9jdW1lbnQud3JpdGUoKSAtLT4gZG9jdW1lbnQud3JpdGUoIiIpCitz
dGF0aWMgU3RyaW5nIFdyaXRlSGVscGVyR2V0U3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpIHsKKyAgICBTdHJpbmcgc3RyID0gIiI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdz
Lkxlbmd0aCgpOyArK2kpCisgICAgICAgIHN0ciArPSBUb1dlYkNvcmVTdHJpbmcoYXJnc1tpXSk7
CisgICAgcmV0dXJuIHN0cjsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdy
aXRlKSB7CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50LndyaXRlKCkiKTsKKyAgICBI
VE1MRG9jdW1lbnQqIGltcCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50
PihhcmdzLkhvbGRlcigpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUFj
dGl2ZUZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBpbXAtPndyaXRlKFdyaXRlSGVs
cGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdyaXRlbG4p
IHsKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQud3JpdGVsbigpIik7CisgICAgSFRN
TERvY3VtZW50KiBpbXAgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4o
YXJncy5Ib2xkZXIoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVBY3Rp
dmVGcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgaW1wLT53cml0ZWxuKFdyaXRlSGVs
cGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudE9wZW4pIHsK
KyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQub3BlbigpIik7CisgICAgSFRNTERvY3Vt
ZW50KiBpbXAgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5I
b2xkZXIoKSk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKSkgeworICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGds
b2JhbCBvYmplY3QgZm9yIHRoZSBmcmFtZS4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQoZnJhbWUpOworICAgICAgICAgICAg
Ly8gQmFpbCBvdXQgaWYgd2UgY2Fubm90IGdldCB0aGUgY29udGV4dC4KKyAgICAgICAgICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7Cisg
ICAgICAgICAgICAvLyBHZXQgdGhlIG9wZW4gcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3Qu
CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBmdW5jdGlvbiA9IGdsb2JhbC0+R2V0
KHY4OjpTdHJpbmc6Ok5ldygib3BlbiIpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBvcGVuIHBy
b3BlcnR5IGlzIG5vdCBhIGZ1bmN0aW9uIHRocm93IGEgdHlwZSBlcnJvci4KKyAgICAgICAgICAg
IGlmICghZnVuY3Rpb24tPklzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIFY4UHJveHk6
OlRocm93RXJyb3IoVjhQcm94eTo6VFlQRV9FUlJPUiwgIm9wZW4gaXMgbm90IGEgZnVuY3Rpb24i
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gV3JhcCB1cCB0aGUgYXJndW1lbnRzIGFuZCBjYWxsIHRoZSBmdW5j
dGlvbi4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+KiBwYXJhbXMgPSBuZXcgdjg6
OkxvY2FsPHY4OjpWYWx1ZT5bYXJncy5MZW5ndGgoKV07CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFyZ3MuTGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSBhcmdzW2ldOworCisgICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKGZyYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm94eSk7CisKKyAgICAgICAgICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5LT5DYWxsRnVuY3Rpb24odjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj46OkNhc3QoZnVuY3Rpb24pLCBnbG9iYWwsIGFyZ3MuTGVuZ3RoKCksIHBh
cmFtcyk7CisgICAgICAgICAgICBkZWxldGVbXSBwYXJhbXM7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6
cmV0cmlldmVBY3RpdmVGcmFtZSgpOworICAgIGltcC0+b3BlbihmcmFtZS0+ZG9jdW1lbnQoKSk7
CisgICAgLy8gUmV0dXJuIHRoZSBkb2N1bWVudC4KKyAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
K30KKworQUNDRVNTT1JfR0VUVEVSKEhUTUxEb2N1bWVudEFsbCkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5IVE1MRG9jdW1lbnQuYWxsLl9nZXQiKTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAg
IEhUTUxEb2N1bWVudCogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1l
bnQ+KGhvbGRlcik7CisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB2ID0gV1RGOjpnZXRQdHIo
aW1wLT5hbGwoKSk7CisgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpIVE1MQ09MTEVDVElPTiwgV1RGOjpnZXRQdHIodikpOworfQorCitBQ0NFU1NPUl9TRVRURVIo
SFRNTERvY3VtZW50QWxsKQoreworICAgIElOQ19TVEFUUygiRE9NLkhUTUxEb2N1bWVudC5hbGwu
X3NldCIpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIo
KTsKKyAgICBBU1NFUlQoaW5mby5Ib2xkZXIoKS0+SW50ZXJuYWxGaWVsZENvdW50KCkgPT0ga0hU
TUxEb2N1bWVudEludGVybmFsRmllbGRDb3VudCk7CisgICAgaW5mby5Ib2xkZXIoKS0+U2V0SW50
ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5kZXgsIHZhbHVlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="14314"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28970</attachid>
            <date>2009-03-26 08:48:44 -0700</date>
            <delta_ts>2009-03-26 13:39:16 -0700</delta_ts>
            <desc>patch w/ Dimitri&apos;s comments</desc>
            <filename>bug24812.patch</filename>
            <type>text/plain</type>
            <size>8293</size>
            <attacher name="Mike Belshe">mbelshe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOSBAQAorMjAwOS0wMy0yNCAgTWlrZSBCZWxzaGUgIDxtaWtlQGJlbHNoZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIEFkZCBWOCBj
dXN0b20gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVudAorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAorCiAyMDA5LTAzLTI0ICBBZGFtIExhbmdsZXkgIDxhZ2xA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1M
SUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K05BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50KQoreworICAgIC8vIE9ubHkgaGFu
ZGxlIGRvY3VtZW50LmFsbC4gIEluc2VydCB0aGUgbWFya2VyIG9iamVjdCBpbnRvIHRoZQorICAg
IC8vIHNoYWRvdyBpbnRlcm5hbCBmaWVsZCB0byBzaWduYWwgdGhhdCBkb2N1bWVudC5hbGwgaXMg
bm8gbG9uZ2VyCisgICAgLy8gc2hhZG93ZWQuCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0
cmluZyhuYW1lKTsKKyAgICBpZiAoa2V5ICE9ICJhbGwiKQorICAgICAgICByZXR1cm4gZGVsZXRp
b25Ob3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgQVNTRVJUKGluZm8uSG9sZGVyKCkt
PkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9jdW1lbnRJbnRlcm5hbEZpZWxkQ291bnQp
OworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1hcmtlciA9IGluZm8uSG9sZGVyKCktPkdldElu
dGVybmFsRmllbGQoa0hUTUxEb2N1bWVudE1hcmtlckluZGV4KTsKKyAgICBpbmZvLkhvbGRlcigp
LT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgbWFya2VyKTsKKyAg
ICByZXR1cm4gdjg6OlRydWUoKTsKK30KKworTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxEb2N1
bWVudCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuTmFtZWRQcm9wZXJ0eUdl
dHRlciIpOworICAgIEF0b21pY1N0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7CisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGRvY3VtZW50LmFsbC4gIElmIHRoZSB2YWx1ZSBpbiB0
aGUgc2hhZG93CisgICAgLy8gaW50ZXJuYWwgZmllbGQgaXMgbm90IHRoZSBtYXJrZXIgb2JqZWN0
LCB0aGVuIGRvY3VtZW50LmFsbCBoYXMKKyAgICAvLyBiZWVuIHRlbXBvcmFyaWx5IHNoYWRvd2Vk
IGFuZCB3ZSByZXR1cm4gdGhlIHZhbHVlLgorICAgIGlmIChrZXkgPT0gImFsbCIpIHsKKyAgICAg
ICAgQVNTRVJUKGluZm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9j
dW1lbnRJbnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBt
YXJrZXIgPSBpbmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRNYXJr
ZXJJbmRleCk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gaW5mby5Ib2xk
ZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5kZXgpOworICAgICAg
ICBpZiAobWFya2VyICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIEhUTUxEb2N1bWVudCogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTm9kZTxIVE1M
RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOworCisgICAgLy8gRmFzdCBjYXNlIGZvciBuYW1lZCBl
bGVtZW50cyB0aGF0IGFyZSBub3QgdGhlcmUuCisgICAgaWYgKCFpbXAtPmhhc05hbWVkSXRlbShr
ZXkuaW1wbCgpKSAmJiAhaW1wLT5oYXNFeHRyYU5hbWVkSXRlbShrZXkuaW1wbCgpKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworCisgICAgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBpdGVtcyA9IGltcC0+ZG9jdW1lbnROYW1lZEl0ZW1zKGtleSk7CisgICAgaWYgKCFp
dGVtcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OworCisgICAgaWYgKGl0ZW1zLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBpdGVtcy0+Zmlyc3RJdGVtKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IDA7CisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBz
dGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCisg
ICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJ
TkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKKworICAgICAgICByZXR1cm4gVjhQcm94eTo6Tm9k
ZVRvVjhPYmplY3Qobm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworfQorCisvLyBI
VE1MRG9jdW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBDb25jYXRlbmF0ZXMgImFyZ3MiIHRvIGEgc3RyaW5n
LiBJZiBhcmdzIGlzIGVtcHR5LCByZXR1cm5zIGVtcHR5IHN0cmluZy4KKy8vIEZpcmVmb3gvU2Fm
YXJpL0lFIHN1cHBvcnQgbm9uLXN0YW5kYXJkIGFyZ3VtZW50cyB0byBkb2N1bWVudC53cml0ZSwg
ZXg6CisvLyAgIGRvY3VtZW50LndyaXRlKCJhIiwgImIiLCAiYyIpIC0tPiBkb2N1bWVudC53cml0
ZSgiYWJjIikKKy8vICAgZG9jdW1lbnQud3JpdGUoKSAtLT4gZG9jdW1lbnQud3JpdGUoIiIpCitz
dGF0aWMgU3RyaW5nIFdyaXRlSGVscGVyR2V0U3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpIHsKKyAgICBTdHJpbmcgc3RyID0gIiI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdz
Lkxlbmd0aCgpOyArK2kpCisgICAgICAgIHN0ciArPSBUb1dlYkNvcmVTdHJpbmcoYXJnc1tpXSk7
CisgICAgcmV0dXJuIHN0cjsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdy
aXRlKSB7CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50LndyaXRlKCkiKTsKKyAgICBI
VE1MRG9jdW1lbnQqIGltcCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50
PihhcmdzLkhvbGRlcigpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUFj
dGl2ZUZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBpbXAtPndyaXRlKFdyaXRlSGVs
cGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdyaXRlbG4p
IHsKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQud3JpdGVsbigpIik7CisgICAgSFRN
TERvY3VtZW50KiBpbXAgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4o
YXJncy5Ib2xkZXIoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVBY3Rp
dmVGcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgaW1wLT53cml0ZWxuKFdyaXRlSGVs
cGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudE9wZW4pCit7
CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50Lm9wZW4oKSIpOworICAgIEhUTUxEb2N1
bWVudCogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CisgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgIC8vIEZldGNoIHRoZSBn
bG9iYWwgb2JqZWN0IGZvciB0aGUgZnJhbWUuCisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBWOFByb3h5OjpHZXRDb250ZXh0KGZyYW1lKTsKKyAgICAgICAgICAg
IC8vIEJhaWwgb3V0IGlmIHdlIGNhbm5vdCBnZXQgdGhlIGNvbnRleHQuCisgICAgICAgICAgICBp
ZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0
LT5HbG9iYWwoKTsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgb3BlbiBwcm9wZXJ0eSBvZiB0aGUg
Z2xvYmFsIG9iamVjdC4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZ1bmN0aW9u
ID0gZ2xvYmFsLT5HZXQodjg6OlN0cmluZzo6TmV3KCJvcGVuIikpOworICAgICAgICAgICAgLy8g
SWYgdGhlIG9wZW4gcHJvcGVydHkgaXMgbm90IGEgZnVuY3Rpb24gdGhyb3cgYSB0eXBlIGVycm9y
LgorICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgICAg
ICAgICAgVjhQcm94eTo6dGhyb3dFcnJvcigib3BlbiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBXcmFwIHVwIHRoZSBhcmd1bWVudHMgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uLgor
ICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4qIHBhcmFtcyA9IG5ldyB2ODo6TG9jYWw8
djg6OlZhbHVlPlthcmdzLkxlbmd0aCgpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgYXJncy5MZW5ndGgoKTsgaSsrKQorICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGFyZ3Nb
aV07CisKKyAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJh
bWUpOworICAgICAgICAgICAgQVNTRVJUKHByb3h5KTsKKworICAgICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gcmVzdWx0ID0gcHJveHktPkNhbGxGdW5jdGlvbih2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uPjo6Q2FzdChmdW5jdGlvbiksIGdsb2JhbCwgYXJncy5MZW5ndGgoKSwgcGFyYW1zKTsK
KyAgICAgICAgICAgIGRlbGV0ZVtdIHBhcmFtczsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2
ZUFjdGl2ZUZyYW1lKCk7CisgICAgaW1wLT5vcGVuKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAv
LyBSZXR1cm4gdGhlIGRvY3VtZW50LgorICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworfQorCitB
Q0NFU1NPUl9HRVRURVIoSFRNTERvY3VtZW50QWxsKQoreworICAgIElOQ19TVEFUUygiRE9NLkhU
TUxEb2N1bWVudC5hbGwuX2dldCIpOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgSFRNTERv
Y3VtZW50KiBpbXAgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oaG9s
ZGVyKTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBXVEY6OmdldFB0
cihpbXAtPmFsbCgpKTsKKyAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OkhUTUxDT0xMRUNUSU9OLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSk7Cit9CisKK0FDQ0VT
U09SX1NFVFRFUihIVE1MRG9jdW1lbnRBbGwpCit7CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERv
Y3VtZW50LmFsbC5fc2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBp
bmZvLkhvbGRlcigpOworICAgIEFTU0VSVChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZpZWxkQ291
bnQoKSA9PSBrSFRNTERvY3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICBpbmZvLkhvbGRl
cigpLT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgdmFsdWUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28978</attachid>
            <date>2009-03-26 13:39:16 -0700</date>
            <delta_ts>2009-03-28 09:19:29 -0700</delta_ts>
            <desc>more nitties</desc>
            <filename>bug24812.patch</filename>
            <type>text/plain</type>
            <size>8413</size>
            <attacher name="Mike Belshe">mbelshe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOSBAQAorMjAwOS0wMy0yNCAgTWlrZSBCZWxzaGUgIDxtaWtlQGJlbHNoZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIEFkZCBWOCBj
dXN0b20gYmluZGluZ3MgZm9yIEhUTUxEb2N1bWVudCAoQnVnIDI0ODEyKQorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAorCiAyMDA5LTAzLTI0ICBBZGFtIExh
bmdsZXkgIDxhZ2xAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNo
ZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIVE1MRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCisj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK05BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50KQoreworICAg
IC8vIE9ubHkgaGFuZGxlIGRvY3VtZW50LmFsbC4gIEluc2VydCB0aGUgbWFya2VyIG9iamVjdCBp
bnRvIHRoZQorICAgIC8vIHNoYWRvdyBpbnRlcm5hbCBmaWVsZCB0byBzaWduYWwgdGhhdCBkb2N1
bWVudC5hbGwgaXMgbm8gbG9uZ2VyCisgICAgLy8gc2hhZG93ZWQuCisgICAgU3RyaW5nIGtleSA9
IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBpZiAoa2V5ICE9ICJhbGwiKQorICAgICAgICBy
ZXR1cm4gZGVsZXRpb25Ob3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgQVNTRVJUKGlu
Zm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9jdW1lbnRJbnRlcm5h
bEZpZWxkQ291bnQpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1hcmtlciA9IGluZm8uSG9s
ZGVyKCktPkdldEludGVybmFsRmllbGQoa0hUTUxEb2N1bWVudE1hcmtlckluZGV4KTsKKyAgICBp
bmZvLkhvbGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwg
bWFya2VyKTsKKyAgICByZXR1cm4gdjg6OlRydWUoKTsKK30KKworTkFNRURfUFJPUEVSVFlfR0VU
VEVSKEhUTUxEb2N1bWVudCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuTmFt
ZWRQcm9wZXJ0eUdldHRlciIpOworICAgIEF0b21pY1N0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJp
bmcobmFtZSk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGRvY3VtZW50LmFsbC4gIElmIHRo
ZSB2YWx1ZSBpbiB0aGUgc2hhZG93CisgICAgLy8gaW50ZXJuYWwgZmllbGQgaXMgbm90IHRoZSBt
YXJrZXIgb2JqZWN0LCB0aGVuIGRvY3VtZW50LmFsbCBoYXMKKyAgICAvLyBiZWVuIHRlbXBvcmFy
aWx5IHNoYWRvd2VkIGFuZCB3ZSByZXR1cm4gdGhlIHZhbHVlLgorICAgIGlmIChrZXkgPT0gImFs
bCIpIHsKKyAgICAgICAgQVNTRVJUKGluZm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgp
ID09IGtIVE1MRG9jdW1lbnRJbnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBtYXJrZXIgPSBpbmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKGtIVE1M
RG9jdW1lbnRNYXJrZXJJbmRleCk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
ID0gaW5mby5Ib2xkZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5k
ZXgpOworICAgICAgICBpZiAobWFya2VyICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6
RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOworCisgICAgLy8g
RmFzdCBjYXNlIGZvciBuYW1lZCBlbGVtZW50cyB0aGF0IGFyZSBub3QgdGhlcmUuCisgICAgaWYg
KCFodG1sRG9jdW1lbnQtPmhhc05hbWVkSXRlbShrZXkuaW1wbCgpKSAmJiAhaHRtbERvY3VtZW50
LT5oYXNFeHRyYU5hbWVkSXRlbShrZXkuaW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOworCisgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpdGVtcyA9IGh0
bWxEb2N1bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW1zKGtleSk7CisgICAgaWYgKCFpdGVtcy0+bGVu
Z3RoKCkpCisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAg
aWYgKGl0ZW1zLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtcy0+
Zmlyc3RJdGVtKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IDA7CisgICAgICAgIGlmIChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBzdGF0aWNfY2Fz
dDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJh
bWUtPmRvbVdpbmRvdygpKTsKKworICAgICAgICByZXR1cm4gVjhQcm94eTo6Tm9kZVRvVjhPYmpl
Y3Qobm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworfQorCisvLyBIVE1MRG9jdW1l
bnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisvLyBDb25jYXRlbmF0ZXMgImFyZ3MiIHRvIGEgc3RyaW5nLiBJZiBhcmdz
IGlzIGVtcHR5LCByZXR1cm5zIGVtcHR5IHN0cmluZy4KKy8vIEZpcmVmb3gvU2FmYXJpL0lFIHN1
cHBvcnQgbm9uLXN0YW5kYXJkIGFyZ3VtZW50cyB0byBkb2N1bWVudC53cml0ZSwgZXg6CisvLyAg
IGRvY3VtZW50LndyaXRlKCJhIiwgImIiLCAiYyIpIC0tPiBkb2N1bWVudC53cml0ZSgiYWJjIikK
Ky8vICAgZG9jdW1lbnQud3JpdGUoKSAtLT4gZG9jdW1lbnQud3JpdGUoIiIpCitzdGF0aWMgU3Ry
aW5nIHdyaXRlSGVscGVyR2V0U3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsKKyAg
ICBTdHJpbmcgc3RyID0gIiI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLkxlbmd0aCgp
OyArK2kpCisgICAgICAgIHN0ciArPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1tpXSk7CisgICAgcmV0
dXJuIHN0cjsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdyaXRlKSB7Cisg
ICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50LndyaXRlKCkiKTsKKyAgICBIVE1MRG9jdW1l
bnQqIGh0bWxEb2N1bWVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50
PihhcmdzLkhvbGRlcigpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUFj
dGl2ZUZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBodG1sRG9jdW1lbnQtPndyaXRl
KHdyaXRlSGVscGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVu
dFdyaXRlbG4pIHsKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQud3JpdGVsbigpIik7
CisgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9O
b2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgRnJhbWUqIGZyYW1lID0gVjhQ
cm94eTo6cmV0cmlldmVBY3RpdmVGcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgaHRt
bERvY3VtZW50LT53cml0ZWxuKHdyaXRlSGVscGVyR2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9j
dW1lbnQoKSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVO
Q19ERUNMKEhUTUxEb2N1bWVudE9wZW4pCit7CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3Vt
ZW50Lm9wZW4oKSIpOworICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6
RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworCisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBodG1sRG9j
dW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgIC8vIEZldGNoIHRoZSBnbG9iYWwgb2JqZWN0
IGZvciB0aGUgZnJhbWUuCisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5OjpHZXRDb250ZXh0KGZyYW1lKTsKKyAgICAgICAgICAgIC8vIEJhaWwgb3V0
IGlmIHdlIGNhbm5vdCBnZXQgdGhlIGNvbnRleHQuCisgICAgICAgICAgICBpZiAoY29udGV4dC5J
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsK
KyAgICAgICAgICAgIC8vIEdldCB0aGUgb3BlbiBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVj
dC4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZ1bmN0aW9uID0gZ2xvYmFsLT5H
ZXQodjg6OlN0cmluZzo6TmV3KCJvcGVuIikpOworICAgICAgICAgICAgLy8gSWYgdGhlIG9wZW4g
cHJvcGVydHkgaXMgbm90IGEgZnVuY3Rpb24gdGhyb3cgYSB0eXBlIGVycm9yLgorICAgICAgICAg
ICAgaWYgKCFmdW5jdGlvbi0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcigib3BlbiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICAgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXcmFwIHVwIHRo
ZSBhcmd1bWVudHMgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4qIHBhcmFtcyA9IG5ldyB2ODo6TG9jYWw8djg6OlZhbHVlPlthcmdzLkxlbmd0
aCgpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5MZW5ndGgoKTsgaSsr
KQorICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGFyZ3NbaV07CisKKyAgICAgICAgICAgIFY4
UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOworICAgICAgICAgICAgQVNT
RVJUKHByb3h5KTsKKworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0g
cHJveHktPkNhbGxGdW5jdGlvbih2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChmdW5jdGlv
biksIGdsb2JhbCwgYXJncy5MZW5ndGgoKSwgcGFyYW1zKTsKKyAgICAgICAgICAgIGRlbGV0ZVtd
IHBhcmFtczsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7CisgICAg
aHRtbERvY3VtZW50LT5vcGVuKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAvLyBSZXR1cm4gdGhl
IGRvY3VtZW50LgorICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworfQorCitBQ0NFU1NPUl9HRVRU
RVIoSFRNTERvY3VtZW50QWxsKQoreworICAgIElOQ19TVEFUUygiRE9NLkhUTUxEb2N1bWVudC5h
bGwuX2dldCIpOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgSFRNTERvY3VtZW50KiBodG1s
RG9jdW1lbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oaG9sZGVy
KTsKKyAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBXVEY6OmdldFB0ciho
dG1sRG9jdW1lbnQtPmFsbCgpKTsKKyAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSk7Cit9CisK
K0FDQ0VTU09SX1NFVFRFUihIVE1MRG9jdW1lbnRBbGwpCit7CisgICAgSU5DX1NUQVRTKCJET00u
SFRNTERvY3VtZW50LmFsbC5fc2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBpbmZvLkhvbGRlcigpOworICAgIEFTU0VSVChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZp
ZWxkQ291bnQoKSA9PSBrSFRNTERvY3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICBpbmZv
LkhvbGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgdmFs
dWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="14337"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>