<?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>82325</bug_id>
          
          <creation_ts>2012-03-27 05:03:21 -0700</creation_ts>
          <short_desc>Web Inspector: Speed up heap profiler snapshot parsing</short_desc>
          <delta_ts>2012-03-27 08:15: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>Web Inspector (Deprecated)</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>0</everconfirmed>
          <reporter name="Alexei Filippov">alph</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>588784</commentid>
    <comment_count>0</comment_count>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2012-03-27 05:03:21 -0700</bug_when>
    <thetext>It can be made faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588786</commentid>
    <comment_count>1</comment_count>
      <attachid>134031</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2012-03-27 05:05:28 -0700</bug_when>
    <thetext>Created attachment 134031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588826</commentid>
    <comment_count>2</comment_count>
      <attachid>134031</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-03-27 06:38:11 -0700</bug_when>
    <thetext>Comment on attachment 134031
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1231
&gt; +        for (var i = 1, l = nodes.length; i &lt; l; ++count) {

rootNodeIndex?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1238
&gt; +        for (var i = 1, l = nodes.length; i &lt; l; ++count) {

ditto

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1282
&gt; +        var indexArray = this._dominatedIndex = new Int32Array(nodeCount + 1);

Uint32Array

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1291
&gt; +        var dominatedNodes = this._dominatedNodes = new Int32Array(nodeCount + 1);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588837</commentid>
    <comment_count>3</comment_count>
      <attachid>134031</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-27 06:51:26 -0700</bug_when>
    <thetext>Comment on attachment 134031
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1227
&gt; +        var edgesCountOffset = this._edgesCountOffset;

We can just inline these as there is no performance gain.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1272
&gt; +        var nodeIndexes = this.nodeIndexes;

Consider inlining these as well.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1282
&gt; +        var indexArray = this._dominatedIndex = new Int32Array(nodeCount + 1);

Int32Array -&gt; Uint32Array

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1291
&gt; +        var dominatedNodes = this._dominatedNodes = new Int32Array(nodeCount + 1);

Int32Array -&gt; Uint32Array, length of the dominatedNodes array should be equal to sum of all indexArrat values at this point, not nodeCount+1

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1389
&gt; +        var flags = this._flags;

Please inline these.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1403
&gt; +            edge._edges = node.rawEdges;

Why not take node.edges? Could you at least introduce a public setter on the edge?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588861</commentid>
    <comment_count>4</comment_count>
      <attachid>134031</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2012-03-27 07:25:25 -0700</bug_when>
    <thetext>Comment on attachment 134031
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1227
&gt;&gt; +        var edgesCountOffset = this._edgesCountOffset;
&gt; 
&gt; We can just inline these as there is no performance gain.

done

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1231
&gt;&gt; +        for (var i = 1, l = nodes.length; i &lt; l; ++count) {
&gt; 
&gt; rootNodeIndex?

done

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1238
&gt;&gt; +        for (var i = 1, l = nodes.length; i &lt; l; ++count) {
&gt; 
&gt; ditto

done

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1272
&gt;&gt; +        var nodeIndexes = this.nodeIndexes;
&gt; 
&gt; Consider inlining these as well.

done

&gt;&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1291
&gt;&gt;&gt; +        var dominatedNodes = this._dominatedNodes = new Int32Array(nodeCount + 1);
&gt;&gt; 
&gt;&gt; ditto
&gt; 
&gt; Int32Array -&gt; Uint32Array, length of the dominatedNodes array should be equal to sum of all indexArrat values at this point, not nodeCount+1

it is nodeCount - 1, as each node except for root has one dominator.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1389
&gt;&gt; +        var flags = this._flags;
&gt; 
&gt; Please inline these.

done

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:1403
&gt;&gt; +            edge._edges = node.rawEdges;
&gt; 
&gt; Why not take node.edges? Could you at least introduce a public setter on the edge?

node.edges is an iterator which I&apos;d like to avoid. Don&apos;t wanna introduce a setter, we don&apos;t have them for nodeIndex and edgeIndex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588863</commentid>
    <comment_count>5</comment_count>
      <attachid>134056</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2012-03-27 07:27:26 -0700</bug_when>
    <thetext>Created attachment 134056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588911</commentid>
    <comment_count>6</comment_count>
      <attachid>134056</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-27 08:15:30 -0700</bug_when>
    <thetext>Comment on attachment 134056
Patch

Clearing flags on attachment: 134056

Committed r112271: &lt;http://trac.webkit.org/changeset/112271&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588913</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-27 08:15:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134031</attachid>
            <date>2012-03-27 05:05:28 -0700</date>
            <delta_ts>2012-03-27 07:27:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82325-20120327160526.patch</filename>
            <type>text/plain</type>
            <size>9837</size>
            <attacher name="Alexei Filippov">alph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODAyOGVhYzBmMmE3Y2Qy
ZjA2YWRjZDY4YTNjYmRhNTdhOTg4ZDM3Mi4uYTg0ZGM4NDc0MDVmNDQ0ZTY3OGQzOTJkM2FiYmRi
YzEwMWYzMTQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTI3ICBBbGV4
ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTcGVlZCB1cCBzbmFwc2hvdCBwYXJzaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIzMjUKKworICAgICAgICBSZXBsYWNpbmcgdGhlIGl0
ZXJhdG9ycyB3aXRoIHJhdyBub2Rlcy9lZGdlcyBhY2Nlc3Mgc3BlZWRzIHVwCisgICAgICAgIHNv
bWUgcGhhc2VzIHBoYXNzZXMgdXAgdG8gMTAgdGltZXMsIHRha2luZyBkb3duIHRoZSB3aG9sZSBp
bml0CisgICAgICAgIHRpbWUgdG8gbGVzcyB0aGFuIDYgc2VjLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZS5fYnVpbGROb2RlSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuX2J1aWxkRG9taW5hdGVkTm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX21hcmtRdWVyaWFibGVIZWFwT2JqZWN0cyk6CisKIDIwMTIt
MDMtMjcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAg
ICAgICAgSW5jcmVhc2UgY29kZSBzaGFyaW5nIGJldHdlZW4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uIGFuZCBDU1NQcm9wZXJ0eUxvbmdoYW5kLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwppbmRleCBkNWMzOWVlNTRjNjA2NjJl
YjA2MGZlNDJjYmQyZjg2NDhmNmNkOTk1Li44MjJhOGExZWE4MzllM2Q4MDk2ZjhiNzc4YzVlYmI4
YWEzNjdmYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdC5qcwpAQCAtMTAzMiw0MSArMTAzMiw2IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gYWdncmVnYXRlczsKICAgICB9
LAogCi0gICAgX2J1aWxkUmV2ZXJzZUluZGV4OiBmdW5jdGlvbihpbmRleEFycmF5TmFtZSwgYmFj
a1JlZnNBcnJheU5hbWUsIGluZGV4Q2FsbGJhY2ssIGRhdGFDYWxsYmFjaykKLSAgICB7Ci0gICAg
ICAgIC8vIEJ1aWxkcyB1cCB0d28gYXJyYXlzOgotICAgICAgICAvLyAgLSAiYmFja1JlZnNBcnJh
eSIgaXMgYSBjb250aW51b3VzIGFycmF5LCB3aGVyZSBlYWNoIG5vZGUgb3ducyBhbgotICAgICAg
ICAvLyAgICBpbnRlcnZhbCAoY2FuIGJlIGVtcHR5KSB3aXRoIGNvcnJlc3BvbmRpbmcgYmFjayBy
ZWZlcmVuY2VzLgotICAgICAgICAvLyAgLSAiaW5kZXhBcnJheSIgaXMgYW4gYXJyYXkgb2YgaW5k
ZXhlcyBpbiB0aGUgImJhY2tSZWZzQXJyYXkiCi0gICAgICAgIC8vICAgIHdpdGggdGhlIHNhbWUg
cG9zaXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4LgotICAgICAgICB2YXIgaW5kZXhBcnJheSA9
IHRoaXNbaW5kZXhBcnJheU5hbWVdID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuX25vZGVJbmRleC5s
ZW5ndGgpOwotICAgICAgICB2YXIgbm9kZUluZGV4ZXMgPSB0aGlzLm5vZGVJbmRleGVzOwotICAg
ICAgICB2YXIgbm9kZUNvdW50ID0gdGhpcy5ub2RlQ291bnQ7Ci0gICAgICAgIHZhciBub2RlID0g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMsIG5vZGVJbmRleGVzWzBdKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgewotICAgICAgICAg
ICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXhlc1tpXTsKLSAgICAgICAgICAgIGluZGV4Q2Fs
bGJhY2sobm9kZSwgZnVuY3Rpb24gKHBvc2l0aW9uKSB7ICsraW5kZXhBcnJheVtwb3NpdGlvbl07
IH0pOwotICAgICAgICB9Ci0gICAgICAgIHZhciBiYWNrUmVmc0NvdW50ID0gMDsKLSAgICAgICAg
Zm9yIChpID0gMCwgbCA9IGluZGV4QXJyYXkubGVuZ3RoOyBpIDwgbDsgKytpKQotICAgICAgICAg
ICAgYmFja1JlZnNDb3VudCArPSBpbmRleEFycmF5W2ldOwotICAgICAgICB2YXIgYmFja1JlZnNB
cnJheSA9IHRoaXNbYmFja1JlZnNBcnJheU5hbWVdID0gbmV3IFVpbnQzMkFycmF5KGJhY2tSZWZz
Q291bnQgKyAxKTsKLSAgICAgICAgLy8gUHV0IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2ggYmFj
a1JlZnNBcnJheSBzbGljZSB0aGUgY291bnQgb2YgZW50cmllcwotICAgICAgICAvLyB0aGF0IHdp
bGwgYmUgZmlsbGVkLgotICAgICAgICB2YXIgYmFja1JlZnNQb3NpdGlvbiA9IDA7Ci0gICAgICAg
IGZvciAoaSA9IDAsIGwgPSBpbmRleEFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAg
ICAgICAgYmFja1JlZnNDb3VudCA9IGJhY2tSZWZzQXJyYXlbYmFja1JlZnNQb3NpdGlvbl0gPSBp
bmRleEFycmF5W2ldOwotICAgICAgICAgICAgaW5kZXhBcnJheVtpXSA9IGJhY2tSZWZzUG9zaXRp
b247Ci0gICAgICAgICAgICBiYWNrUmVmc1Bvc2l0aW9uICs9IGJhY2tSZWZzQ291bnQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgewotICAg
ICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXhlc1tpXTsKLSAgICAgICAgICAgIGRh
dGFDYWxsYmFjayhub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChiYWNr
UmVmSW5kZXgpIHsgcmV0dXJuIGJhY2tSZWZJbmRleCArICgtLWJhY2tSZWZzQXJyYXlbYmFja1Jl
ZkluZGV4XSk7IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGJhY2tSZWZJ
bmRleCwgZGVzdEluZGV4KSB7IGJhY2tSZWZzQXJyYXlbYmFja1JlZkluZGV4XSA9IGRlc3RJbmRl
eDsgfSk7Ci0gICAgICAgIH0KLSAgICB9LAotCiAgICAgX2J1aWxkUmV0YWluZXJzOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgbm9kZUluZGV4ZXMgPSB0aGlzLm5vZGVJbmRleGVzOwpA
QCAtMTI1OCwxNCArMTIyMywyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZSA9IHsKIAogICAgIF9idWlsZE5vZGVJbmRleDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAg
dmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7CisgICAgICAgIHZhciBlZGdlc0NvdW50T2Zmc2V0ID0g
dGhpcy5fZWRnZXNDb3VudE9mZnNldDsKKyAgICAgICAgdmFyIGZpcnN0RWRnZU9mZnNldCA9IHRo
aXMuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgdmFyIGVkZ2VGaWVsZHNDb3VudCA9IHRoaXMu
X2VkZ2VGaWVsZHNDb3VudDsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKLSAgICAgICAgZm9yICh2
YXIgbm9kZXNJdGVyID0gdGhpcy5fYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVz
SXRlci5uZXh0KCksICsrY291bnQpOworICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGVz
Lmxlbmd0aDsgaSA8IGw7ICsrY291bnQpIHsKKyAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0g
bm9kZXNbaSArIGVkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgaSArPSBmaXJzdEVkZ2VP
ZmZzZXQgKyBlZGdlc0NvdW50ICogZWRnZUZpZWxkc0NvdW50OworICAgICAgICB9CiAgICAgICAg
IHZhciBub2RlSW5kZXggPSBuZXcgVWludDMyQXJyYXkoY291bnQgKyAxKTsKICAgICAgICAgdmFy
IG5vZGVQb3NpdGlvbiA9IHt9OwogICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAodmFy
IG5vZGVzSXRlciA9IHRoaXMuX2FsbE5vZGVzOyBub2Rlc0l0ZXIuaGFzTmV4dCgpOyBub2Rlc0l0
ZXIubmV4dCgpLCArK2NvdW50KSB7Ci0gICAgICAgICAgICBub2RlSW5kZXhbY291bnRdID0gbm9k
ZXNJdGVyLmluZGV4OwotICAgICAgICAgICAgbm9kZVBvc2l0aW9uW25vZGVzSXRlci5pbmRleF0g
PSBjb3VudDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBs
OyArK2NvdW50KSB7CisgICAgICAgICAgICBub2RlSW5kZXhbY291bnRdID0gaTsKKyAgICAgICAg
ICAgIG5vZGVQb3NpdGlvbltpXSA9IGNvdW50OworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQg
PSBub2Rlc1tpICsgZWRnZXNDb3VudE9mZnNldF07CisgICAgICAgICAgICBpICs9IGZpcnN0RWRn
ZU9mZnNldCArIGVkZ2VzQ291bnQgKiBlZGdlRmllbGRzQ291bnQ7CiAgICAgICAgIH0KICAgICAg
ICAgbm9kZUluZGV4W2NvdW50XSA9IHRoaXMuX25vZGVzLmxlbmd0aDsKICAgICAgICAgbm9kZVBv
c2l0aW9uW3RoaXMuX25vZGVzLmxlbmd0aF0gPSBjb3VudDsKQEAgLTEyOTUsMjMgKzEyNjksNDQg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAKICAgICBfYnVpbGRE
b21pbmF0ZWROb2RlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fYnVpbGRSZXZl
cnNlSW5kZXgoCi0gICAgICAgICAgICAiX2RvbWluYXRlZEluZGV4IiwKLSAgICAgICAgICAgICJf
ZG9taW5hdGVkTm9kZXMiLAotICAgICAgICAgICAgKGZ1bmN0aW9uIChub2RlLCBjYWxsYmFjaykK
LSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHZhciBkb21pbmF0b3JJbmRleCA9IG5v
ZGUuZG9taW5hdG9ySW5kZXg7Ci0gICAgICAgICAgICAgICAgIGlmIChkb21pbmF0b3JJbmRleCAh
PT0gbm9kZS5ub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9u
b2RlUG9zaXRpb25bZG9taW5hdG9ySW5kZXhdKTsKLSAgICAgICAgICAgICB9KS5iaW5kKHRoaXMp
LAotICAgICAgICAgICAgKGZ1bmN0aW9uIChub2RlLCBpbmRleENhbGxiYWNrLCBkYXRhQ2FsbGJh
Y2spCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB2YXIgZG9taW5hdG9ySW5kZXgg
PSBub2RlLmRvbWluYXRvckluZGV4OwotICAgICAgICAgICAgICAgICBpZiAoZG9taW5hdG9ySW5k
ZXggIT09IG5vZGUubm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICB2YXIgZG9taW5h
dGVkSW5kZXggPSB0aGlzLl9nZXREb21pbmF0ZWRJbmRleChkb21pbmF0b3JJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICBkYXRhQ2FsbGJhY2soaW5kZXhDYWxsYmFjayhkb21pbmF0ZWRJbmRl
eCksIG5vZGUubm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0p
LmJpbmQodGhpcykpOworICAgICAgICB2YXIgbm9kZUluZGV4ZXMgPSB0aGlzLm5vZGVJbmRleGVz
OworICAgICAgICB2YXIgbm9kZVBvc2l0aW9ucyA9IHRoaXMuX25vZGVQb3NpdGlvbjsKKyAgICAg
ICAgdmFyIG5vZGVDb3VudCA9IHRoaXMubm9kZUNvdW50OworICAgICAgICB2YXIgbm9kZXMgPSB0
aGlzLl9ub2RlczsKKworICAgICAgICAvLyBCdWlsZHMgdXAgdHdvIGFycmF5czoKKyAgICAgICAg
Ly8gIC0gImRvbWluYXRlZE5vZGVzIiBpcyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2gg
bm9kZSBvd25zIGFuCisgICAgICAgIC8vICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGgg
Y29ycmVzcG9uZGluZyBkb21pbmF0ZWQgbm9kZXMuCisgICAgICAgIC8vICAtICJpbmRleEFycmF5
IiBpcyBhbiBhcnJheSBvZiBpbmRleGVzIGluIHRoZSAiZG9taW5hdGVkTm9kZXMiCisgICAgICAg
IC8vICAgIHdpdGggdGhlIHNhbWUgcG9zaXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4LgorICAg
ICAgICB2YXIgaW5kZXhBcnJheSA9IHRoaXMuX2RvbWluYXRlZEluZGV4ID0gbmV3IEludDMyQXJy
YXkobm9kZUNvdW50ICsgMSk7CisgICAgICAgIHZhciBkb21pbmF0b3JPZmZzZXQgPSB0aGlzLl9k
b21pbmF0b3JPZmZzZXQ7CisgICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgcmV0YWluZXJz
IGZvciBlYWNoIG5vZGUKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IG5vZGVJbmRleGVzW2ldOworICAgICAg
ICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gbm9kZXNbbm9kZUluZGV4ICsgZG9taW5hdG9yT2Zm
c2V0XTsKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT09IGRvbWluYXRvckluZGV4KSBjb250
aW51ZTsKKyAgICAgICAgICAgICsraW5kZXhBcnJheVtub2RlUG9zaXRpb25zW2RvbWluYXRvcklu
ZGV4XV07CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRvbWluYXRlZE5vZGVzID0gdGhpcy5fZG9t
aW5hdGVkTm9kZXMgPSBuZXcgSW50MzJBcnJheShub2RlQ291bnQgKyAxKTsKKyAgICAgICAgLy8g
UHV0IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2ggZG9taW5hdGVkTm9kZXMgc2xpY2UgdGhlIGNv
dW50IG9mIGVudHJpZXMKKyAgICAgICAgLy8gdGhhdCB3aWxsIGJlIGZpbGxlZC4KKyAgICAgICAg
dmFyIGRvbWluYXRlZFBvc2l0aW9uID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSBub2Rl
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRlZENvdW50ID0gZG9taW5hdGVk
Tm9kZXNbZG9taW5hdGVkUG9zaXRpb25dID0gaW5kZXhBcnJheVtpXTsKKyAgICAgICAgICAgIGlu
ZGV4QXJyYXlbaV0gPSBkb21pbmF0ZWRQb3NpdGlvbjsKKyAgICAgICAgICAgIGRvbWluYXRlZFBv
c2l0aW9uICs9IGRvbWluYXRlZENvdW50OworICAgICAgICB9CisgICAgICAgIC8vIEZpbGwgdXAg
dGhlIGRvbWluYXRlZE5vZGVzIGFycmF5IHdpdGggaW5kZXhlcyBvZiBkb21pbmF0ZWQgbm9kZXMu
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgIHZhciBub2RlSW5kZXggPSBub2RlSW5kZXhlc1tpXTsKKyAgICAgICAgICAgIHZhciBkb21p
bmF0b3JJbmRleCA9IG5vZGVzW25vZGVJbmRleCArIGRvbWluYXRvck9mZnNldF07CisgICAgICAg
ICAgICBpZiAobm9kZUluZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7CisgICAgICAg
ICAgICB2YXIgZG9taW5hdG9yUG9zID0gbm9kZVBvc2l0aW9uc1tkb21pbmF0b3JJbmRleF07Cisg
ICAgICAgICAgICB2YXIgZG9taW5hdGVkUmVmSW5kZXggPSBpbmRleEFycmF5W2RvbWluYXRvclBv
c107CisgICAgICAgICAgICBkb21pbmF0ZWRSZWZJbmRleCArPSAoLS1kb21pbmF0ZWROb2Rlc1tk
b21pbmF0ZWRSZWZJbmRleF0pOworICAgICAgICAgICAgZG9taW5hdGVkTm9kZXNbZG9taW5hdGVk
UmVmSW5kZXhdID0gbm9kZUluZGV4OworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9nZXREb21p
bmF0ZWRJbmRleDogZnVuY3Rpb24obm9kZUluZGV4KQpAQCAtMTM4NiwyNyArMTM4MSwzOSBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxpc3Qg
PSBbXTsKICAgICAgICAgZm9yICh2YXIgaXRlciA9IHRoaXMucm9vdE5vZGUuZWRnZXM7IGl0ZXIu
aGFzTmV4dCgpOyBpdGVyLm5leHQoKSkgewogICAgICAgICAgICAgaWYgKGl0ZXIuZWRnZS5ub2Rl
LmlzV2luZG93KQotICAgICAgICAgICAgICAgIGxpc3QucHVzaChpdGVyLmVkZ2Uubm9kZSk7Cisg
ICAgICAgICAgICAgICAgbGlzdC5wdXNoKGl0ZXIuZWRnZS5ub2RlLm5vZGVJbmRleCk7CiAgICAg
ICAgIH0KIAorICAgICAgICB2YXIgZWRnZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZSh0aGlzKTsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdE5vZGUodGhpcyk7CisgICAgICAgIHZhciBmbGFncyA9IHRoaXMuX2ZsYWdzOworICAgICAg
ICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKKyAgICAgICAgdmFyIGVkZ2VzQ291bnRPZmZzZXQg
PSB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0OworICAgICAgICB2YXIgZmlyc3RFZGdlT2Zmc2V0ID0g
dGhpcy5fZmlyc3RFZGdlT2Zmc2V0OworICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50ID0gdGhp
cy5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICB2YXIgZWRnZVRvTm9kZU9mZnNldCA9IHRoaXMu
X2VkZ2VUb05vZGVPZmZzZXQ7CiAgICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0aCkgewotICAgICAg
ICAgICAgdmFyIG5vZGUgPSBsaXN0LnBvcCgpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2ZsYWdz
W25vZGUubm9kZUluZGV4XSAmIGZsYWcpCisgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbGlz
dC5wb3AoKTsKKyAgICAgICAgICAgIGlmIChmbGFnc1tub2RlSW5kZXhdICYgZmxhZykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHRoaXMuX2ZsYWdzW25vZGUubm9kZUlu
ZGV4XSB8PSBmbGFnOwotICAgICAgICAgICAgZm9yICh2YXIgaXRlciA9IG5vZGUuZWRnZXM7IGl0
ZXIuaGFzTmV4dCgpOyBpdGVyLm5leHQoKSkgewotICAgICAgICAgICAgICAgIHZhciBlZGdlID0g
aXRlci5lZGdlOwotICAgICAgICAgICAgICAgIHZhciBub2RlID0gZWRnZS5ub2RlOwotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9mbGFnc1tub2RlLm5vZGVJbmRleF0gJiBmbGFnKQorICAgICAg
ICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICBmbGFnc1tub2Rl
SW5kZXhdIHw9IGZsYWc7CisgICAgICAgICAgICB2YXIgZWRnZXNPZmZzZXQgPSBub2RlSW5kZXgg
KyBmaXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IG5vZGVzW25v
ZGVJbmRleCArIGVkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgZWRnZS5fZWRnZXMgPSBu
b2RlLnJhd0VkZ2VzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlc0NvdW50
OyArK2opIHsKKyAgICAgICAgICAgICAgICBlZGdlLmVkZ2VJbmRleCA9IGogKiBlZGdlRmllbGRz
Q291bnQ7CisgICAgICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IG5vZGVzW2VkZ2VzT2Zmc2V0
ICsgZWRnZS5lZGdlSW5kZXggKyBlZGdlVG9Ob2RlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmxhZ3Nbbm9kZUluZGV4XSAmIGZsYWcpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGlmIChlZGdlLmlzSGlkZGVuIHx8IGVkZ2UuaXNJbnZpc2libGUp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChlZGdl
LmlzSW50ZXJuYWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIHZhciBuYW1lID0gZWRnZS5uYW1lOwogICAgICAgICAgICAgICAgIGlmICghbmFtZSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGVkZ2UuaXNJ
bnRlcm5hbCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
bGlzdC5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGxpc3QucHVzaChub2RlSW5kZXgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134056</attachid>
            <date>2012-03-27 07:27:26 -0700</date>
            <delta_ts>2012-03-27 08:15:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82325-20120327182724.patch</filename>
            <type>text/plain</type>
            <size>10358</size>
            <attacher name="Alexei Filippov">alph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFhMTI0ZDM1ZDdmNzU0
YWFlNTA0Y2U0M2U0NzJiYTM5ZjU4YWZlNy4uOTU2MmFlOTI0MjNiMTBmZDM2YzRmNmEzN2ZlZjQw
MGRhMGY2NTlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTI3ICBBbGV4
ZWkgRmlsaXBwb3YgIDxhbGV4ZWlmQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBTcGVlZCB1cCBzbmFwc2hvdCBwYXJzaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIzMjUKKworICAgICAgICBSZXBsYWNpbmcgdGhlIGl0
ZXJhdG9ycyB3aXRoIHJhdyBub2Rlcy9lZGdlcyBhY2Nlc3Mgc3BlZWRzIHVwCisgICAgICAgIHNv
bWUgcGhhc2VzIHBoYXNzZXMgdXAgdG8gMTAgdGltZXMsIHRha2luZyBkb3duIHRoZSB3aG9sZSBp
bml0CisgICAgICAgIHRpbWUgdG8gbGVzcyB0aGFuIDYgc2VjLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZS5fYnVpbGROb2RlSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUuX2J1aWxkRG9taW5hdGVkTm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX21hcmtRdWVyaWFibGVIZWFwT2JqZWN0cyk6CisKIDIwMTIt
MDMtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBEb2N1bWVudDo6bWFwcGVkRWxlbWVudFNoZWV0KCkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IGQ1YzM5ZWU1NGM2MDY2
MmViMDYwZmU0MmNiZDJmODY0OGY2Y2Q5OTUuLjZjZDhmYzZiMDI1ZmEzOTUzYzhhODRhYTFiMDYy
MmY5YzhlMzI0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzCkBAIC0xMDMyLDQxICsxMDMyLDYgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVzOwogICAg
IH0sCiAKLSAgICBfYnVpbGRSZXZlcnNlSW5kZXg6IGZ1bmN0aW9uKGluZGV4QXJyYXlOYW1lLCBi
YWNrUmVmc0FycmF5TmFtZSwgaW5kZXhDYWxsYmFjaywgZGF0YUNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgLy8gQnVpbGRzIHVwIHR3byBhcnJheXM6Ci0gICAgICAgIC8vICAtICJiYWNrUmVmc0Fy
cmF5IiBpcyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2ggbm9kZSBvd25zIGFuCi0gICAg
ICAgIC8vICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGggY29ycmVzcG9uZGluZyBiYWNr
IHJlZmVyZW5jZXMuCi0gICAgICAgIC8vICAtICJpbmRleEFycmF5IiBpcyBhbiBhcnJheSBvZiBp
bmRleGVzIGluIHRoZSAiYmFja1JlZnNBcnJheSIKLSAgICAgICAgLy8gICAgd2l0aCB0aGUgc2Ft
ZSBwb3NpdGlvbnMgYXMgaW4gdGhlIF9ub2RlSW5kZXguCi0gICAgICAgIHZhciBpbmRleEFycmF5
ID0gdGhpc1tpbmRleEFycmF5TmFtZV0gPSBuZXcgVWludDMyQXJyYXkodGhpcy5fbm9kZUluZGV4
Lmxlbmd0aCk7Ci0gICAgICAgIHZhciBub2RlSW5kZXhlcyA9IHRoaXMubm9kZUluZGV4ZXM7Ci0g
ICAgICAgIHZhciBub2RlQ291bnQgPSB0aGlzLm5vZGVDb3VudDsKLSAgICAgICAgdmFyIG5vZGUg
PSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcywgbm9kZUluZGV4ZXNbMF0p
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7Ci0gICAgICAg
ICAgICBub2RlLm5vZGVJbmRleCA9IG5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgaW5kZXhD
YWxsYmFjayhub2RlLCBmdW5jdGlvbiAocG9zaXRpb24pIHsgKytpbmRleEFycmF5W3Bvc2l0aW9u
XTsgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGJhY2tSZWZzQ291bnQgPSAwOwotICAgICAg
ICBmb3IgKGkgPSAwLCBsID0gaW5kZXhBcnJheS5sZW5ndGg7IGkgPCBsOyArK2kpCi0gICAgICAg
ICAgICBiYWNrUmVmc0NvdW50ICs9IGluZGV4QXJyYXlbaV07Ci0gICAgICAgIHZhciBiYWNrUmVm
c0FycmF5ID0gdGhpc1tiYWNrUmVmc0FycmF5TmFtZV0gPSBuZXcgVWludDMyQXJyYXkoYmFja1Jl
ZnNDb3VudCArIDEpOwotICAgICAgICAvLyBQdXQgaW4gdGhlIGZpcnN0IHNsb3Qgb2YgZWFjaCBi
YWNrUmVmc0FycmF5IHNsaWNlIHRoZSBjb3VudCBvZiBlbnRyaWVzCi0gICAgICAgIC8vIHRoYXQg
d2lsbCBiZSBmaWxsZWQuCi0gICAgICAgIHZhciBiYWNrUmVmc1Bvc2l0aW9uID0gMDsKLSAgICAg
ICAgZm9yIChpID0gMCwgbCA9IGluZGV4QXJyYXkubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAg
ICAgICAgICBiYWNrUmVmc0NvdW50ID0gYmFja1JlZnNBcnJheVtiYWNrUmVmc1Bvc2l0aW9uXSA9
IGluZGV4QXJyYXlbaV07Ci0gICAgICAgICAgICBpbmRleEFycmF5W2ldID0gYmFja1JlZnNQb3Np
dGlvbjsKLSAgICAgICAgICAgIGJhY2tSZWZzUG9zaXRpb24gKz0gYmFja1JlZnNDb3VudDsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7Ci0g
ICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IG5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAg
ZGF0YUNhbGxiYWNrKG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGJh
Y2tSZWZJbmRleCkgeyByZXR1cm4gYmFja1JlZkluZGV4ICsgKC0tYmFja1JlZnNBcnJheVtiYWNr
UmVmSW5kZXhdKTsgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoYmFja1Jl
ZkluZGV4LCBkZXN0SW5kZXgpIHsgYmFja1JlZnNBcnJheVtiYWNrUmVmSW5kZXhdID0gZGVzdElu
ZGV4OyB9KTsKLSAgICAgICAgfQotICAgIH0sCi0KICAgICBfYnVpbGRSZXRhaW5lcnM6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBub2RlSW5kZXhlcyA9IHRoaXMubm9kZUluZGV4ZXM7
CkBAIC0xMDc5LDcgKzEwNDQsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgLy8gICAgaW50ZXJ2YWwgKGNhbiBiZSBlbXB0eSkgd2l0aCBjb3JyZXNw
b25kaW5nIGJhY2sgcmVmZXJlbmNlcy4KICAgICAgICAgLy8gIC0gImluZGV4QXJyYXkiIGlzIGFu
IGFycmF5IG9mIGluZGV4ZXMgaW4gdGhlICJiYWNrUmVmc0FycmF5IgogICAgICAgICAvLyAgICB3
aXRoIHRoZSBzYW1lIHBvc2l0aW9ucyBhcyBpbiB0aGUgX25vZGVJbmRleC4KLSAgICAgICAgdmFy
IGluZGV4QXJyYXkgPSB0aGlzLl9yZXRhaW5lckluZGV4ID0gbmV3IEludDMyQXJyYXkobm9kZUNv
dW50ICsgMSk7CisgICAgICAgIHZhciBpbmRleEFycmF5ID0gdGhpcy5fcmV0YWluZXJJbmRleCA9
IG5ldyBVaW50MzJBcnJheShub2RlQ291bnQgKyAxKTsKICAgICAgICAgdmFyIGVkZ2VzQ291bnRP
ZmZzZXQgPSB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0OwogICAgICAgICB2YXIgZmlyc3RFZGdlT2Zm
c2V0ID0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0OwogICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50
ID0gdGhpcy5fZWRnZUZpZWxkc0NvdW50OwpAQCAtMTA5Niw3ICsxMDYxLDcgQEAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICsraW5kZXhBcnJh
eVtub2RlUG9zaXRpb25zW3RhcmdldE5vZGVJbmRleF1dOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHZhciBiYWNrUmVmc0FycmF5ID0gdGhpcy5fcmV0YWluZXJzID0gbmV3IElu
dDMyQXJyYXkoYmFja1JlZnNDb3VudCk7CisgICAgICAgIHZhciBiYWNrUmVmc0FycmF5ID0gdGhp
cy5fcmV0YWluZXJzID0gbmV3IFVpbnQzMkFycmF5KGJhY2tSZWZzQ291bnQpOwogICAgICAgICAv
LyBQdXQgaW4gdGhlIGZpcnN0IHNsb3Qgb2YgZWFjaCBiYWNrUmVmc0FycmF5IHNsaWNlIHRoZSBj
b3VudCBvZiBlbnRyaWVzCiAgICAgICAgIC8vIHRoYXQgd2lsbCBiZSBmaWxsZWQuCiAgICAgICAg
IHZhciBiYWNrUmVmc1Bvc2l0aW9uID0gMDsKQEAgLTEyNTksMTMgKzEyMjQsMTggQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgX2J1aWxkTm9kZUluZGV4OiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgY291bnQgPSAwOwotICAgICAgICBmb3IgKHZh
ciBub2Rlc0l0ZXIgPSB0aGlzLl9hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05leHQoKTsgbm9kZXNJ
dGVyLm5leHQoKSwgKytjb3VudCk7CisgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9yb290Tm9k
ZUluZGV4LCBsID0gdGhpcy5fbm9kZXMubGVuZ3RoOyBpIDwgbDsgKytjb3VudCkgeworICAgICAg
ICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpICsgdGhpcy5fZWRnZXNDb3VudE9m
ZnNldF07CisgICAgICAgICAgICBpICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291
bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgIH0KICAgICAgICAgdmFyIG5vZGVJ
bmRleCA9IG5ldyBVaW50MzJBcnJheShjb3VudCArIDEpOwogICAgICAgICB2YXIgbm9kZVBvc2l0
aW9uID0ge307CiAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgZm9yICh2YXIgbm9kZXNJdGVy
ID0gdGhpcy5fYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0KCks
ICsrY291bnQpIHsKLSAgICAgICAgICAgIG5vZGVJbmRleFtjb3VudF0gPSBub2Rlc0l0ZXIuaW5k
ZXg7Ci0gICAgICAgICAgICBub2RlUG9zaXRpb25bbm9kZXNJdGVyLmluZGV4XSA9IGNvdW50Owor
ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fcm9vdE5vZGVJbmRleCwgbCA9IHRoaXMuX25vZGVz
Lmxlbmd0aDsgaSA8IGw7ICsrY291bnQpIHsKKyAgICAgICAgICAgIG5vZGVJbmRleFtjb3VudF0g
PSBpOworICAgICAgICAgICAgbm9kZVBvc2l0aW9uW2ldID0gY291bnQ7CisgICAgICAgICAgICB2
YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW2kgKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XTsK
KyAgICAgICAgICAgIGkgKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZXNDb3VudCAqIHRo
aXMuX2VkZ2VGaWVsZHNDb3VudDsKICAgICAgICAgfQogICAgICAgICBub2RlSW5kZXhbY291bnRd
ID0gdGhpcy5fbm9kZXMubGVuZ3RoOwogICAgICAgICBub2RlUG9zaXRpb25bdGhpcy5fbm9kZXMu
bGVuZ3RoXSA9IGNvdW50OwpAQCAtMTI5NSwyMyArMTI2NSwzOSBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZSA9IHsKIAogICAgIF9idWlsZERvbWluYXRlZE5vZGVzOiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9idWlsZFJldmVyc2VJbmRleCgKLSAgICAgICAg
ICAgICJfZG9taW5hdGVkSW5kZXgiLAotICAgICAgICAgICAgIl9kb21pbmF0ZWROb2RlcyIsCi0g
ICAgICAgICAgICAoZnVuY3Rpb24gKG5vZGUsIGNhbGxiYWNrKQotICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gbm9kZS5kb21pbmF0b3JJbmRleDsK
LSAgICAgICAgICAgICAgICAgaWYgKGRvbWluYXRvckluZGV4ICE9PSBub2RlLm5vZGVJbmRleCkK
LSAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX25vZGVQb3NpdGlvbltkb21pbmF0
b3JJbmRleF0pOwotICAgICAgICAgICAgIH0pLmJpbmQodGhpcyksCi0gICAgICAgICAgICAoZnVu
Y3Rpb24gKG5vZGUsIGluZGV4Q2FsbGJhY2ssIGRhdGFDYWxsYmFjaykKLSAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgIHZhciBkb21pbmF0b3JJbmRleCA9IG5vZGUuZG9taW5hdG9ySW5k
ZXg7Ci0gICAgICAgICAgICAgICAgIGlmIChkb21pbmF0b3JJbmRleCAhPT0gbm9kZS5ub2RlSW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgIHZhciBkb21pbmF0ZWRJbmRleCA9IHRoaXMuX2dl
dERvbWluYXRlZEluZGV4KGRvbWluYXRvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgIGRh
dGFDYWxsYmFjayhpbmRleENhbGxiYWNrKGRvbWluYXRlZEluZGV4KSwgbm9kZS5ub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7CisgICAg
ICAgIHZhciBub2RlQ291bnQgPSB0aGlzLm5vZGVDb3VudDsKKyAgICAgICAgLy8gQnVpbGRzIHVw
IHR3byBhcnJheXM6CisgICAgICAgIC8vICAtICJkb21pbmF0ZWROb2RlcyIgaXMgYSBjb250aW51
b3VzIGFycmF5LCB3aGVyZSBlYWNoIG5vZGUgb3ducyBhbgorICAgICAgICAvLyAgICBpbnRlcnZh
bCAoY2FuIGJlIGVtcHR5KSB3aXRoIGNvcnJlc3BvbmRpbmcgZG9taW5hdGVkIG5vZGVzLgorICAg
ICAgICAvLyAgLSAiaW5kZXhBcnJheSIgaXMgYW4gYXJyYXkgb2YgaW5kZXhlcyBpbiB0aGUgImRv
bWluYXRlZE5vZGVzIgorICAgICAgICAvLyAgICB3aXRoIHRoZSBzYW1lIHBvc2l0aW9ucyBhcyBp
biB0aGUgX25vZGVJbmRleC4KKyAgICAgICAgdmFyIGluZGV4QXJyYXkgPSB0aGlzLl9kb21pbmF0
ZWRJbmRleCA9IG5ldyBVaW50MzJBcnJheShub2RlQ291bnQgKyAxKTsKKyAgICAgICAgLy8gQ291
bnQgdGhlIG51bWJlciBvZiByZXRhaW5lcnMgZm9yIGVhY2ggbm9kZQorICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICB2YXIgbm9kZUluZGV4
ID0gdGhpcy5ub2RlSW5kZXhlc1tpXTsKKyAgICAgICAgICAgIHZhciBkb21pbmF0b3JJbmRleCA9
IHRoaXMuX25vZGVzW25vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF07CisgICAgICAg
ICAgICBpZiAobm9kZUluZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7CisgICAgICAg
ICAgICArK2luZGV4QXJyYXlbdGhpcy5fbm9kZVBvc2l0aW9uW2RvbWluYXRvckluZGV4XV07Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGRvbWluYXRlZE5vZGVzID0gdGhpcy5fZG9taW5hdGVkTm9k
ZXMgPSBuZXcgVWludDMyQXJyYXkobm9kZUNvdW50IC0gMSk7CisgICAgICAgIC8vIFB1dCBpbiB0
aGUgZmlyc3Qgc2xvdCBvZiBlYWNoIGRvbWluYXRlZE5vZGVzIHNsaWNlIHRoZSBjb3VudCBvZiBl
bnRyaWVzCisgICAgICAgIC8vIHRoYXQgd2lsbCBiZSBmaWxsZWQuCisgICAgICAgIHZhciBkb21p
bmF0ZWRQb3NpdGlvbiA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbm9kZUNvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciBkb21pbmF0ZWRDb3VudCA9IGRvbWluYXRlZE5vZGVzW2Rv
bWluYXRlZFBvc2l0aW9uXSA9IGluZGV4QXJyYXlbaV07CisgICAgICAgICAgICBpbmRleEFycmF5
W2ldID0gZG9taW5hdGVkUG9zaXRpb247CisgICAgICAgICAgICBkb21pbmF0ZWRQb3NpdGlvbiAr
PSBkb21pbmF0ZWRDb3VudDsKKyAgICAgICAgfQorICAgICAgICAvLyBGaWxsIHVwIHRoZSBkb21p
bmF0ZWROb2RlcyBhcnJheSB3aXRoIGluZGV4ZXMgb2YgZG9taW5hdGVkIG5vZGVzLgorICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
bm9kZUluZGV4ID0gdGhpcy5ub2RlSW5kZXhlc1tpXTsKKyAgICAgICAgICAgIHZhciBkb21pbmF0
b3JJbmRleCA9IHRoaXMuX25vZGVzW25vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF07
CisgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7
CisgICAgICAgICAgICB2YXIgZG9taW5hdG9yUG9zID0gdGhpcy5fbm9kZVBvc2l0aW9uW2RvbWlu
YXRvckluZGV4XTsKKyAgICAgICAgICAgIHZhciBkb21pbmF0ZWRSZWZJbmRleCA9IGluZGV4QXJy
YXlbZG9taW5hdG9yUG9zXTsKKyAgICAgICAgICAgIGRvbWluYXRlZFJlZkluZGV4ICs9ICgtLWRv
bWluYXRlZE5vZGVzW2RvbWluYXRlZFJlZkluZGV4XSk7CisgICAgICAgICAgICBkb21pbmF0ZWRO
b2Rlc1tkb21pbmF0ZWRSZWZJbmRleF0gPSBub2RlSW5kZXg7CisgICAgICAgIH0KICAgICB9LAog
CiAgICAgX2dldERvbWluYXRlZEluZGV4OiBmdW5jdGlvbihub2RlSW5kZXgpCkBAIC0xMzg2LDI3
ICsxMzcyLDMzIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAg
ICAgICB2YXIgbGlzdCA9IFtdOwogICAgICAgICBmb3IgKHZhciBpdGVyID0gdGhpcy5yb290Tm9k
ZS5lZGdlczsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAgICBpZiAo
aXRlci5lZGdlLm5vZGUuaXNXaW5kb3cpCi0gICAgICAgICAgICAgICAgbGlzdC5wdXNoKGl0ZXIu
ZWRnZS5ub2RlKTsKKyAgICAgICAgICAgICAgICBsaXN0LnB1c2goaXRlci5lZGdlLm5vZGUubm9k
ZUluZGV4KTsKICAgICAgICAgfQogCisgICAgICAgIHZhciBlZGdlID0gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RFZGdlKHRoaXMpOworICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzKTsKICAgICAgICAgd2hpbGUgKGxpc3QubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IGxpc3QucG9wKCk7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5fZmxhZ3Nbbm9kZS5ub2RlSW5kZXhdICYgZmxhZykKKyAgICAgICAgICAgIHZhciBub2Rl
SW5kZXggPSBsaXN0LnBvcCgpOworICAgICAgICAgICAgaWYgKHRoaXMuX2ZsYWdzW25vZGVJbmRl
eF0gJiBmbGFnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhpcy5f
ZmxhZ3Nbbm9kZS5ub2RlSW5kZXhdIHw9IGZsYWc7Ci0gICAgICAgICAgICBmb3IgKHZhciBpdGVy
ID0gbm9kZS5lZGdlczsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGVkZ2UgPSBpdGVyLmVkZ2U7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBl
ZGdlLm5vZGU7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZsYWdzW25vZGUubm9kZUluZGV4
XSAmIGZsYWcpCisgICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAg
ICAgICAgIHRoaXMuX2ZsYWdzW25vZGVJbmRleF0gfD0gZmxhZzsKKyAgICAgICAgICAgIHZhciBl
ZGdlc09mZnNldCA9IG5vZGVJbmRleCArIHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAg
ICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZWRnZXND
b3VudE9mZnNldF07CisgICAgICAgICAgICBlZGdlLl9lZGdlcyA9IG5vZGUucmF3RWRnZXM7Cisg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzQ291bnQ7ICsraikgeworICAgICAg
ICAgICAgICAgIGVkZ2UuZWRnZUluZGV4ID0gaiAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAg
ICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gdGhpcy5fbm9kZXNbZWRnZXNPZmZzZXQgKyBl
ZGdlLmVkZ2VJbmRleCArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXRdOworICAgICAgICAgICAgICAg
IGlmICh0aGlzLl9mbGFnc1tub2RlSW5kZXhdICYgZmxhZykKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKGVkZ2UuaXNIaWRkZW4gfHwgZWRnZS5pc0lu
dmlzaWJsZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
aWYgKGVkZ2UuaXNJbnRlcm5hbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgdmFyIG5hbWUgPSBlZGdlLm5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKCFu
YW1lKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
ZWRnZS5pc0ludGVybmFsKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBsaXN0LnB1c2gobm9kZSk7CisgICAgICAgICAgICAgICAgbGlzdC5wdXNoKG5vZGVJ
bmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>