<?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>98224</bug_id>
          
          <creation_ts>2012-10-02 18:34:36 -0700</creation_ts>
          <short_desc>MarkupAccumulator should optimally handle 8 bit Strings</short_desc>
          <delta_ts>2012-10-09 12:55:40 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>733302</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-02 18:34:36 -0700</bug_when>
    <thetext>Currently MarkupAccumulator::appendNodeValue() and the related function appendCharactersReplacingEntities() only handle UChar* string data.  These should handle 8 bit string data as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733315</commentid>
    <comment_count>1</comment_count>
      <attachid>166798</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-02 18:54:21 -0700</bug_when>
    <thetext>Created attachment 166798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737174</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-08 16:12:18 -0700</bug_when>
    <thetext>Sorry, I meant rniwa, not abarth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737260</commentid>
    <comment_count>3</comment_count>
      <attachid>166798</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-08 17:27:15 -0700</bug_when>
    <thetext>Comment on attachment 166798
Patch

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

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:74
&gt; +            for (size_t m = 0; m &lt; WTF_ARRAY_LENGTH(entityMaps); ++m) {

Please don&apos;t use abbreviations like m.

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:98
&gt; +        const UChar* text = source.characters16() + offset;
&gt; +
&gt; +        size_t positionAfterLastEntity = 0;
&gt; +        for (size_t i = 0; i &lt; length; ++i) {
&gt; +            for (size_t m = 0; m &lt; WTF_ARRAY_LENGTH(entityMaps); ++m) {
&gt; +                if (text[i] == entityMaps[m].entity &amp;&amp; entityMaps[m].mask &amp; entityMask) {
&gt; +                    result.append(text + positionAfterLastEntity, i - positionAfterLastEntity);
&gt; +                    result.append(entityMaps[m].reference);
&gt; +                    positionAfterLastEntity = i + 1;
&gt; +                    break;
&gt; +                }
&gt;              }
&gt;          }
&gt; +        result.append(text + positionAfterLastEntity, length - positionAfterLastEntity);

It seems like we should be able to use a template to avoid code duplication here.

&gt; Source/WebCore/editing/markup.cpp:247
&gt; +        MarkupAccumulator::appendCharactersReplacingEntities(buffer, content, 0, content.length(), EntityMaskInPCDATA);

StyledMarkupAccumulator inherits from MarkupAccumulator so we shouldn&apos;t have to quality it.

&gt; Source/WebCore/editing/markup.cpp:994
&gt; -    appendCharactersReplacingEntities(markup, title.characters(), title.length(), EntityMaskInPCDATA);
&gt; +    MarkupAccumulator::appendCharactersReplacingEntities(markup, title, 0, title.length(), EntityMaskInPCDATA);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737820</commentid>
    <comment_count>4</comment_count>
      <attachid>167764</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-09 08:50:56 -0700</bug_when>
    <thetext>Created attachment 167764
Patch with some updates from reviewer&apos;s comments

(In reply to comment #3)
&gt; (From update of attachment 166798 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166798&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:74
&gt; &gt; +            for (size_t m = 0; m &lt; WTF_ARRAY_LENGTH(entityMaps); ++m) {
&gt; 
&gt; Please don&apos;t use abbreviations like m.

This was from the original code, but I changed &apos;m&apos; to &apos;entryIndex&apos;.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:98
&gt; &gt; +        const UChar* text = source.characters16() + offset;
&gt; &gt; +
&gt; &gt; +        size_t positionAfterLastEntity = 0;
&gt; &gt; +        for (size_t i = 0; i &lt; length; ++i) {
&gt; &gt; +            for (size_t m = 0; m &lt; WTF_ARRAY_LENGTH(entityMaps); ++m) {
&gt; &gt; +                if (text[i] == entityMaps[m].entity &amp;&amp; entityMaps[m].mask &amp; entityMask) {
&gt; &gt; +                    result.append(text + positionAfterLastEntity, i - positionAfterLastEntity);
&gt; &gt; +                    result.append(entityMaps[m].reference);
&gt; &gt; +                    positionAfterLastEntity = i + 1;
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; &gt;              }
&gt; &gt;          }
&gt; &gt; +        result.append(text + positionAfterLastEntity, length - positionAfterLastEntity);
&gt; 
&gt; It seems like we should be able to use a template to avoid code duplication here.

I thought about that with the original patch.  Given there are static variables in the method that are used in the loops, either the statics would need to be duplicated in the template or a pointer to the array along with it&apos;s size needs to be passed into the templated loop function.  Both of these options seemed less desirable to having the two loops.  If you think either of these would be more readable, I could be convinced.

&gt; &gt; Source/WebCore/editing/markup.cpp:247
&gt; &gt; +        MarkupAccumulator::appendCharactersReplacingEntities(buffer, content, 0, content.length(), EntityMaskInPCDATA);
&gt; 
&gt; StyledMarkupAccumulator inherits from MarkupAccumulator so we shouldn&apos;t have to quality it.

Removed the class name here.

&gt; &gt; Source/WebCore/editing/markup.cpp:994
&gt; &gt; -    appendCharactersReplacingEntities(markup, title.characters(), title.length(), EntityMaskInPCDATA);
&gt; &gt; +    MarkupAccumulator::appendCharactersReplacingEntities(markup, title, 0, title.length(), EntityMaskInPCDATA);
&gt; 
&gt; Ditto.

Can&apos;t remove the class name here as this isn&apos;t a member function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738067</commentid>
    <comment_count>5</comment_count>
      <attachid>167764</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 12:26:52 -0700</bug_when>
    <thetext>Comment on attachment 167764
Patch with some updates from reviewer&apos;s comments

Clearing flags on attachment: 167764

Committed r130795: &lt;http://trac.webkit.org/changeset/130795&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738069</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 12:26:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738073</commentid>
    <comment_count>7</comment_count>
      <attachid>167764</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-09 12:29:35 -0700</bug_when>
    <thetext>Comment on attachment 167764
Patch with some updates from reviewer&apos;s comments

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

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:70
&gt; +    if (source.is8Bit()) {
&gt; +        const LChar* text = source.characters8() + offset;

Is there some advantage to writing this function out twice instead of using a function template?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738088</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-10-09 12:46:11 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 167764 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167764&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:70
&gt; &gt; +    if (source.is8Bit()) {
&gt; &gt; +        const LChar* text = source.characters8() + offset;
&gt; 
&gt; Is there some advantage to writing this function out twice instead of using a function template?

See the response in comment #4 to Ryosuke&apos;s comment.  Templating this function is complicated by the function static variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738098</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-09 12:55:40 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 167764 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167764&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:70
&gt; &gt; +    if (source.is8Bit()) {
&gt; &gt; +        const LChar* text = source.characters8() + offset;
&gt; 
&gt; Is there some advantage to writing this function out twice instead of using a function template?

Static variables :( Let us know if you have an idea on how to share more code here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166798</attachid>
            <date>2012-10-02 18:54:21 -0700</date>
            <delta_ts>2012-10-09 08:50:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>98244.patch</filename>
            <type>text/plain</type>
            <size>7865</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEyLTEwLTAyICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9y
IHNob3VsZCBvcHRpbWFsbHkgaGFuZGxlIDggYml0IFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MjI0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMgdG8gdGFrZSBhIHN0cmluZywgb2Zmc2V0IGFuZCBsZW5ndGggYW5kIHBy
b2Nlc3MgOCBvciAxNiBiaXQKKyAgICAgICAgZGF0YSBhcyBhcHByb3ByaWF0ZS4gIEFsc28gbWFk
ZSBpdCBhIG1lbWJlciBmdW5jdGlvbiBvZiBNYXJrdXBBY2N1bXVsYXRvci4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGJlaGF2aW9yIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUpOgor
ICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKE1hcmt1cEFj
Y3VtdWxhdG9yKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjp1cmxUb01hcmt1cCk6CisKIDIwMTItMTAtMDIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBMb2NhbGVJQ1U6OmRhdGVGb3JtYXQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCShyZXZp
c2lvbiAxMzAxOTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXZvaWQgYXBwZW5kQ2hhcmFjdGVyc1Jl
cGxhY2luZ0VudGl0aWVzKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgVUNoYXIqIGNvbnRl
bnQsIHNpemVfdCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgc291cmNlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgU3RyaW5nLCBhbXBSZWZlcmVuY2UsIChBU0NJSUxpdGVyYWwoIiZhbXA7IikpKTsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgbHRSZWZlcmVuY2UsIChBU0NJ
SUxpdGVyYWwoIiZsdDsiKSkpOwpAQCAtNjEsMTggKzYxLDQyIEBAIHZvaWQgYXBwZW5kQ2hhcmFj
dGVyc1JlcGxhY2luZ0VudGl0aWVzKFMKICAgICAgICAgeyBub0JyZWFrU3BhY2UsIG5ic3BSZWZl
cmVuY2UsIEVudGl0eU5ic3AgfSwKICAgICB9OwogCi0gICAgc2l6ZV90IHBvc2l0aW9uQWZ0ZXJM
YXN0RW50aXR5ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IG0gPSAwOyBtIDwgV1RGX0FSUkFZX0xFTkdUSChlbnRpdHlN
YXBzKTsgKyttKSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudFtpXSA9PSBlbnRpdHlNYXBzW21d
LmVudGl0eSAmJiBlbnRpdHlNYXBzW21dLm1hc2sgJiBlbnRpdHlNYXNrKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjb250ZW50ICsgcG9zaXRpb25BZnRlckxhc3RFbnRpdHksIGkg
LSBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChlbnRpdHlNYXBzW21dLnJlZmVyZW5jZSk7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb25BZnRl
ckxhc3RFbnRpdHkgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBpZiAoIShv
ZmZzZXQgKyBsZW5ndGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQob2Zmc2V0ICsg
bGVuZ3RoIDw9IHNvdXJjZS5sZW5ndGgoKSk7CisKKyAgICBpZiAoc291cmNlLmlzOEJpdCgpKSB7
CisgICAgICAgIGNvbnN0IExDaGFyKiB0ZXh0ID0gc291cmNlLmNoYXJhY3RlcnM4KCkgKyBvZmZz
ZXQ7CisKKyAgICAgICAgc2l6ZV90IHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gMDsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZm9y
IChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK20pIHsK
KyAgICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PSBlbnRpdHlNYXBzW21dLmVudGl0eSAmJiBl
bnRpdHlNYXBzW21dLm1hc2sgJiBlbnRpdHlNYXNrKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQodGV4dCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBpIC0gcG9zaXRpb25B
ZnRlckxhc3RFbnRpdHkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudGl0
eU1hcHNbbV0ucmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BZnRlckxh
c3RFbnRpdHkgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
dGV4dCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBsZW5ndGggLSBwb3NpdGlvbkFmdGVyTGFz
dEVudGl0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIHRleHQgPSBzb3Vy
Y2UuY2hhcmFjdGVyczE2KCkgKyBvZmZzZXQ7CisKKyAgICAgICAgc2l6ZV90IHBvc2l0aW9uQWZ0
ZXJMYXN0RW50aXR5ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgbSA9IDA7IG0gPCBXVEZfQVJSQVlfTEVO
R1RIKGVudGl0eU1hcHMpOyArK20pIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PSBl
bnRpdHlNYXBzW21dLmVudGl0eSAmJiBlbnRpdHlNYXBzW21dLm1hc2sgJiBlbnRpdHlNYXNrKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dCArIHBvc2l0aW9uQWZ0ZXJM
YXN0RW50aXR5LCBpIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGVudGl0eU1hcHNbbV0ucmVmZXJlbmNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CisgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBs
ZW5ndGggLSBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSk7CiAgICAgfQotICAgIHJlc3VsdC5hcHBl
bmQoY29udGVudCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBsZW5ndGggLSBwb3NpdGlvbkFm
dGVyTGFzdEVudGl0eSk7CiB9CiAKIE1hcmt1cEFjY3VtdWxhdG9yOjpNYXJrdXBBY2N1bXVsYXRv
cihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyByZXNvbHZlVXJsc01ldGhvZCwg
Y29uc3QgUmFuZ2UqIHJhbmdlKQpAQCAtMTc0LDcgKzE5OCw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmNvbmNhdGVuYXRlTWFya3UKIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
QXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJp
YnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCkKIHsKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFj
aW5nRW50aXRpZXMocmVzdWx0LCBhdHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVu
Z3RoKCksCisgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKHJlc3VsdCwgYXR0
cmlidXRlLCAwLCBhdHRyaWJ1dGUubGVuZ3RoKCksCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8g
RW50aXR5TWFza0luSFRNTEF0dHJpYnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFs
dWUpOwogfQogCkBAIC0yMTAsMjIgKzIzNCwyMSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRRdW90ZWRVUkxBCiAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1
ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiBy
YW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewotICAgIFN0cmluZyBzdHIgPSBub2RlLT5u
b2RlVmFsdWUoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFyYWN0ZXJz
KCk7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICBjb25zdCBTdHJpbmcg
c3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyLmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKIAogICAgIGlmIChyYW5nZSkgewogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+ZW5kQ29udGFp
bmVyKGVjKSkKICAgICAgICAgICAgIGxlbmd0aCA9IHJhbmdlLT5lbmRPZmZzZXQoZWMpOwogICAg
ICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoZWMpKSB7Ci0gICAgICAgICAg
ICBzaXplX3Qgc3RhcnQgPSByYW5nZS0+c3RhcnRPZmZzZXQoZWMpOwotICAgICAgICAgICAgY2hh
cmFjdGVycyArPSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0
KGVjKTsKICAgICAgICAgICAgIGxlbmd0aCAtPSBzdGFydDsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhyZXN1bHQsIGNoYXJhY3RlcnMs
IGxlbmd0aCwgZW50aXR5TWFzayk7CisgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKHJlc3VsdCwgc3RyLCBzdGFydCwgbGVuZ3RoLCBlbnRpdHlNYXNrKTsKIH0KIAogYm9vbCBN
YXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50
KiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuaAkocmV2aXNpb24gMTMwMTkwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw4IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmlu
ZyYpOwogCisgICAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVz
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVudGl0
eU1hc2spOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhjb25z
dCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9
IDApOwpAQCAtMTE0LDkgKzExNiw2IEBAIHByaXZhdGU6CiAgICAgY29uc3QgRUFic29sdXRlVVJM
cyBtX3Jlc29sdmVVUkxzTWV0aG9kOwogfTsKIAotLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3Vs
ZCBiZSBpbnRlZ3JhdGVkIHdpdGggTWFya3VwQWNjdW11bGF0b3IuCi12b2lkIGFwcGVuZENoYXJh
Y3RlcnNSZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgVUNoYXIqLCBzaXpl
X3QsIEVudGl0eU1hc2spOwotCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAkocmV2aXNpb24gMTMwMTkwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgICAgICBjb25zdCBib29sIHVzZVJlbmRlcmVk
VGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHQpLCBz
ZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVkVGV4dCA/IHJl
bmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2UodGV4dCwgbV9y
YW5nZSk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwotICAgICAgICBhcHBlbmRDaGFy
YWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29u
dGVudC5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKKyAgICAgICAgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhidWZmZXIsIGNvbnRlbnQs
IDAsIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7CiAgICAgICAgIG91dC5h
cHBlbmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChidWZmZXIudG9TdHJpbmco
KSwgdGV4dCkpOwogICAgIH0KIApAQCAtOTkxLDcgKzk5MSw3IEBAIFN0cmluZyB1cmxUb01hcmt1
cChjb25zdCBLVVJMJiB1cmwsIGNvbnMKICAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7
CiAgICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOwogICAgIG1hcmt1cC5hcHBlbmQoIlwi
PiIpOwotICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJrdXAsIHRpdGxl
LmNoYXJhY3RlcnMoKSwgdGl0bGUubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7CisgICAg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJr
dXAsIHRpdGxlLCAwLCB0aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKICAgICBt
YXJrdXAuYXBwZW5kKCI8L2E+Iik7CiAgICAgcmV0dXJuIG1hcmt1cC50b1N0cmluZygpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167764</attachid>
            <date>2012-10-09 08:50:56 -0700</date>
            <delta_ts>2012-10-09 12:29:35 -0700</delta_ts>
            <desc>Patch with some updates from reviewer&apos;s comments</desc>
            <filename>98224-2.patch</filename>
            <type>text/plain</type>
            <size>7976</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEyLTEwLTA5ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9y
IHNob3VsZCBvcHRpbWFsbHkgaGFuZGxlIDggYml0IFN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4MjI0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlZCBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMgdG8gdGFrZSBhIHN0cmluZywgb2Zmc2V0IGFuZCBsZW5ndGggYW5kIHBy
b2Nlc3MgOCBvciAxNiBiaXQKKyAgICAgICAgZGF0YSBhcyBhcHByb3ByaWF0ZS4gIEFsc28gbWFk
ZSBpdCBhIG1lbWJlciBmdW5jdGlvbiBvZiBNYXJrdXBBY2N1bXVsYXRvci4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIGJlaGF2aW9yIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUpOgor
ICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKE1hcmt1cEFj
Y3VtdWxhdG9yKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjp1cmxUb01hcmt1cCk6CisKIDIwMTItMTAtMDkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGJ1aWxkIHdpdGggUXRNdWx0
aW1lZGlhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcAkocmV2aXNpb24gMTMwNzYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIGFwcGVuZENo
YXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFVD
aGFyKiBjb250ZW50LCBzaXplX3QgbGVuZ3RoLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3Ry
aW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYW1wUmVmZXJlbmNlLCAoQVNDSUlMaXRlcmFsKCIm
YW1wOyIpKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0UmVmZXJl
bmNlLCAoQVNDSUlMaXRlcmFsKCImbHQ7IikpKTsKQEAgLTYxLDE4ICs2MSw0MiBAQCB2b2lkIGFw
cGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhTCiAgICAgICAgIHsgbm9CcmVha1NwYWNl
LCBuYnNwUmVmZXJlbmNlLCBFbnRpdHlOYnNwIH0sCiAgICAgfTsKIAotICAgIHNpemVfdCBwb3Np
dGlvbkFmdGVyTGFzdEVudGl0eSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBmb3IgKHNpemVfdCBtID0gMDsgbSA8IFdURl9BUlJBWV9MRU5H
VEgoZW50aXR5TWFwcyk7ICsrbSkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRbaV0gPT0gZW50
aXR5TWFwc1ttXS5lbnRpdHkgJiYgZW50aXR5TWFwc1ttXS5tYXNrICYgZW50aXR5TWFzaykgewot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udGVudCArIHBvc2l0aW9uQWZ0ZXJMYXN0
RW50aXR5LCBpIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOwotICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoZW50aXR5TWFwc1ttXS5yZWZlcmVuY2UpOwotICAgICAgICAgICAgICAgIHBv
c2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgaWYgKCEob2Zmc2V0ICsgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG9mZnNldCArIGxlbmd0aCA8PSBzb3VyY2UubGVuZ3RoKCkpOworCisgICAgaWYgKHNvdXJjZS5p
czhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogdGV4dCA9IHNvdXJjZS5jaGFyYWN0ZXJz
OCgpICsgb2Zmc2V0OworCisgICAgICAgIHNpemVfdCBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSA9
IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGVudGl0eUluZGV4ID0gMDsgZW50aXR5SW5kZXggPCBXVEZfQVJS
QVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK2VudGl0eUluZGV4KSB7CisgICAgICAgICAgICAgICAg
aWYgKHRleHRbaV0gPT0gZW50aXR5TWFwc1tlbnRpdHlJbmRleF0uZW50aXR5ICYmIGVudGl0eU1h
cHNbZW50aXR5SW5kZXhdLm1hc2sgJiBlbnRpdHlNYXNrKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodGV4dCArIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5LCBpIC0gcG9zaXRp
b25BZnRlckxhc3RFbnRpdHkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVu
dGl0eU1hcHNbZW50aXR5SW5kZXhdLnJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRleHQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgbGVuZ3RoIC0gcG9z
aXRpb25BZnRlckxhc3RFbnRpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFVDaGFy
KiB0ZXh0ID0gc291cmNlLmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0OworCisgICAgICAgIHNpemVf
dCBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGVudGl0eUluZGV4
ID0gMDsgZW50aXR5SW5kZXggPCBXVEZfQVJSQVlfTEVOR1RIKGVudGl0eU1hcHMpOyArK2VudGl0
eUluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKHRleHRbaV0gPT0gZW50aXR5TWFwc1tlbnRp
dHlJbmRleF0uZW50aXR5ICYmIGVudGl0eU1hcHNbZW50aXR5SW5kZXhdLm1hc2sgJiBlbnRpdHlN
YXNrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dCArIHBvc2l0aW9u
QWZ0ZXJMYXN0RW50aXR5LCBpIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudGl0eU1hcHNbZW50aXR5SW5kZXhdLnJlZmVyZW5j
ZSk7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gaSArIDE7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5kKHRleHQgKyBwb3NpdGlvbkFm
dGVyTGFzdEVudGl0eSwgbGVuZ3RoIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOwogICAgIH0K
LSAgICByZXN1bHQuYXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgbGVu
Z3RoIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOwogfQogCiBNYXJrdXBBY2N1bXVsYXRvcjo6
TWFya3VwQWNjdW11bGF0b3IoVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVBYnNvbHV0ZVVSTHMgcmVz
b2x2ZVVybHNNZXRob2QsIGNvbnN0IFJhbmdlKiByYW5nZSkKQEAgLTE3NCw3ICsxOTgsNyBAQCB2
b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpjb25jYXRlbmF0ZU1hcmt1CiAKIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpCiB7Ci0gICAgYXBwZW5k
Q2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKHJlc3VsdCwgYXR0cmlidXRlLmNoYXJhY3RlcnMo
KSwgYXR0cmlidXRlLmxlbmd0aCgpLAorICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRp
dGllcyhyZXN1bHQsIGF0dHJpYnV0ZSwgMCwgYXR0cmlidXRlLmxlbmd0aCgpLAogICAgICAgICBk
b2N1bWVudElzSFRNTCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0eU1h
c2tJbkF0dHJpYnV0ZVZhbHVlKTsKIH0KIApAQCAtMjEwLDIyICsyMzQsMjEgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQQogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsKLSAgICBTdHJp
bmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBzdHIuY2hhcmFjdGVycygpOwotICAgIHNpemVfdCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7Cisg
ICAgY29uc3QgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0ci5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBzdGFydCA9IDA7CiAKICAgICBpZiAo
cmFuZ2UpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgaWYgKG5vZGUgPT0g
cmFuZ2UtPmVuZENvbnRhaW5lcihlYykpCiAgICAgICAgICAgICBsZW5ndGggPSByYW5nZS0+ZW5k
T2Zmc2V0KGVjKTsKICAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVj
KSkgewotICAgICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKTsK
LSAgICAgICAgICAgIGNoYXJhY3RlcnMgKz0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCA9IHJh
bmdlLT5zdGFydE9mZnNldChlYyk7CiAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVz
dWx0LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGVudGl0eU1hc2spOworICAgIGFwcGVuZENoYXJhY3Rl
cnNSZXBsYWNpbmdFbnRpdGllcyhyZXN1bHQsIHN0ciwgc3RhcnQsIGxlbmd0aCwgZW50aXR5TWFz
ayk7CiB9CiAKIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZEFkZE5hbWVzcGFjZUVsZW1l
bnQoY29uc3QgRWxlbWVudCogZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDEzMDc2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQs
OCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBlbmRDb21tZW50KFN0cmluZ0J1aWxk
ZXImLCBjb25zdCBTdHJpbmcmKTsKIAorICAgIHN0YXRpYyB2b2lkIGFwcGVuZENoYXJhY3RlcnNS
ZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQs
IHVuc2lnbmVkLCBFbnRpdHlNYXNrKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhOb2Rl
KiwgTmFtZXNwYWNlcyogPSAwKTsKQEAgLTExNCw5ICsxMTYsNiBAQCBwcml2YXRlOgogICAgIGNv
bnN0IEVBYnNvbHV0ZVVSTHMgbV9yZXNvbHZlVVJMc01ldGhvZDsKIH07CiAKLS8vIEZJWE1FOiBU
aGlzIG1ldGhvZCBzaG91bGQgYmUgaW50ZWdyYXRlZCB3aXRoIE1hcmt1cEFjY3VtdWxhdG9yLgot
dm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoU3RyaW5nQnVpbGRlciYsIGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBFbnRpdHlNYXNrKTsKLQogfQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDEzMDc2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBA
IHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQKICAgICAgICAgY29uc3Qg
Ym9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlv
bkluTm9kZSh0ZXh0KSwgc2VsZWN0VGFnKTsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSB1c2VS
ZW5kZXJlZFRleHQgPyByZW5kZXJlZFRleHQodGV4dCwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZv
clJhbmdlKHRleHQsIG1fcmFuZ2UpOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKLSAg
ICAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVudC5j
aGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7CisgICAg
ICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhidWZmZXIsIGNvbnRlbnQsIDAs
IGNvbnRlbnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7CiAgICAgICAgIG91dC5hcHBl
bmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChidWZmZXIudG9TdHJpbmcoKSwg
dGV4dCkpOwogICAgIH0KIApAQCAtOTkxLDcgKzk5MSw3IEBAIFN0cmluZyB1cmxUb01hcmt1cChj
b25zdCBLVVJMJiB1cmwsIGNvbnMKICAgICBtYXJrdXAuYXBwZW5kKCI8YSBocmVmPVwiIik7CiAg
ICAgbWFya3VwLmFwcGVuZCh1cmwuc3RyaW5nKCkpOwogICAgIG1hcmt1cC5hcHBlbmQoIlwiPiIp
OwotICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJrdXAsIHRpdGxlLmNo
YXJhY3RlcnMoKSwgdGl0bGUubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7CisgICAgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhtYXJrdXAs
IHRpdGxlLCAwLCB0aXRsZS5sZW5ndGgoKSwgRW50aXR5TWFza0luUENEQVRBKTsKICAgICBtYXJr
dXAuYXBwZW5kKCI8L2E+Iik7CiAgICAgcmV0dXJuIG1hcmt1cC50b1N0cmluZygpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>