<?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>81930</bug_id>
          
          <creation_ts>2012-03-22 09:52:15 -0700</creation_ts>
          <short_desc>Web Inspector: split nodes and containment edges into two different arrays</short_desc>
          <delta_ts>2012-03-26 03:16:08 -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>
          
          <blocked>81927</blocked>
    
    <blocked>82175</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</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>585402</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-22 09:52:15 -0700</bug_when>
    <thetext>We are planning to send nodes and edges in separate arrays from the backend. This is the first step on the way to the new format: we convert current representation to the new one so that we can incrementally switch heap profiler to the new format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585442</commentid>
    <comment_count>1</comment_count>
      <attachid>133290</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-22 10:26:26 -0700</bug_when>
    <thetext>Created attachment 133290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585443</commentid>
    <comment_count>2</comment_count>
      <attachid>133291</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-22 10:27:33 -0700</bug_when>
    <thetext>Created attachment 133291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585594</commentid>
    <comment_count>3</comment_count>
      <attachid>133291</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-03-22 12:35:43 -0700</bug_when>
    <thetext>Comment on attachment 133291
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:811
&gt; +        while (true) {
&gt; +            if (index &gt;= this._nodes.length)
&gt; +                break;

while (index &lt; this._nodes.length)

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:813
&gt; +            var edgesCount = this._nodes[index + this._edgesCountOffset];

please extract this._edgesCountOffset as a local const.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:815
&gt; +            if (edgesCount &gt; 1)
&gt; +                totalEdgeCount += edgesCount;

I&apos;m not understand the this magic if - statement.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:816
&gt; +            index += this._firstEdgeOffset + edgesCount * edgeFieldCount;

please use nodeFieldCount instead of this._firstEdgeOffset

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:820
&gt; +        this._containmentEdges = new Int32Array(totalEdgeCount * this._edgeFieldsCount);

this._edgeFieldsCount -&gt; edgeFieldsCount

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:836
&gt; +        while (true) {
&gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; +                break;

while (srcIndex &lt; this._nodes.length)

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:837
&gt; +            var srcNodeTypeIndex = srcIndex + this._nodeTypeOffset;

If this is necessary from performance point of view please introduce const for this._nodeTypeOffset value. Otherwise please remove such const from the other places.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:839
&gt; +            var edgesCount = this._nodes[srcIndex + this._edgesCountOffset];

ditto for this._edgesCountOffset

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:841
&gt; +            for (var i = 0; i &lt; nodeFieldCount; i++)
&gt; +                this._onlyNodes[dstIndex++] = this._nodes[srcIndex++];

I&apos;m not sure but it could be faster to use set function here
this._onlyNodes.set(this._nodes.subarray(srcIndex, nodeFieldCount), dstIndex);

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:850
&gt; +        while (true) {
&gt; +            if (newNodeIndex &gt;= this._onlyNodes.length)
&gt; +                break;

it can be &apos;for&apos; cycle

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:851
&gt; +            var dominatorIndex = this._onlyNodes[newNodeIndex + this._dominatorOffset]

const for this._dominatorOffset

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:853
&gt; +            var newDominatoIndex = this._nodes[dominatorIndex + this._nodeTypeOffset];
&gt; +            this._onlyNodes[newNodeIndex + this._dominatorOffset] = newDominatoIndex;

this._onlyNodes[newNodeIndex + this._dominatorOffset] = this._nodes[dominatorIndex + this._nodeTypeOffset];
const for nodeTypeOffset and dominatorOffset
nit: missed r symbol in newDominatoIndex

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:863
&gt; +        while (true) {
&gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; +                break;

ditto

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:864
&gt; +            var srcNodeTypeIndex = srcIndex + this._nodeTypeOffset;

const nodeTypeOffset?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:881
&gt; +        while (true) {
&gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; +                break;

a variable for length, etc.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:892
&gt; +                this._retainingNodes[firstUnusedRetainerSlot] = srcNodeNewIndex;
&gt; +                this._retainingNodes[firstUnusedRetainerSlot + 1] = this._retainingNodes[destinationNewIndex];
&gt; +                this._retainingNodes[destinationNewIndex] = firstUnusedRetainerSlot;
&gt; +                firstUnusedRetainerSlot += 2;

I think this is an overhead. It could be enough to have an array of offsets and array of newEdgeIndexes.
These two arrays can be joined into one but I see no reasons for this.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:907
&gt; +        while (true) {
&gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; +                break;

ditto

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:913
&gt; +            var edgesCount = this._nodes[srcIndex + this._edgesCountOffset];

const

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:914
&gt; +            srcIndex += this._firstEdgeOffset;

const

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:916
&gt; +            for (var i = 0; i &lt; edgesCount * this._edgeFieldsCount; i++) {

for (var i = 0, l = edgesCount * this._edgeFieldsCount; i &lt; l; i++)

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:925
&gt; +            for (var i = 0; i &lt; edgesCount * this._edgeFieldsCount; i++) {
&gt; +                this._containmentEdges[edgeArrayIndex++] = this._nodes[srcIndex++];
&gt; +            }
&gt; +
&gt; +            // Translate destination node indexes for the copied edges.
&gt; +            for (var destinationIndex = firstEdgeIndex + this._edgeToNodeOffset; destinationIndex &lt; edgeArrayIndex; destinationIndex += this._edgeFieldsCount) {
&gt; +                var oldDestinationNodeIndex = this._containmentEdges[destinationIndex];
&gt; +                var newDestinationNodeIndex = this._nodes[oldDestinationNodeIndex + this._nodeTypeOffset];
&gt; +                this._containmentEdges[destinationIndex] = newDestinationNodeIndex;
&gt; +            }

looks weird. please join these cycles together

&gt; Source/WebCore/inspector/front-end/HeapSnapshotProxy.js:96
&gt; +    this._worker = /*typeof InspectorTest === &quot;undefined&quot; ? new WebInspector.HeapSnapshotRealWorker() :*/ new WebInspector.HeapSnapshotFakeWorker();

wrong change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587496</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-25 23:52:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 133291 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133291&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:811
&gt; &gt; +        while (true) {
&gt; &gt; +            if (index &gt;= this._nodes.length)
&gt; &gt; +                break;
&gt; 
&gt; while (index &lt; this._nodes.length)
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:813
&gt; &gt; +            var edgesCount = this._nodes[index + this._edgesCountOffset];
&gt; 
&gt; please extract this._edgesCountOffset as a local const.
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:815
&gt; &gt; +            if (edgesCount &gt; 1)
&gt; &gt; +                totalEdgeCount += edgesCount;
&gt; 
&gt; I&apos;m not understand the this magic if - statement.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:816
&gt; &gt; +            index += this._firstEdgeOffset + edgesCount * edgeFieldCount;
&gt; 
&gt; please use nodeFieldCount instead of this._firstEdgeOffset
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:820
&gt; &gt; +        this._containmentEdges = new Int32Array(totalEdgeCount * this._edgeFieldsCount);
&gt; 
&gt; this._edgeFieldsCount -&gt; edgeFieldsCount
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:836
&gt; &gt; +        while (true) {
&gt; &gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; &gt; +                break;
&gt; 
&gt; while (srcIndex &lt; this._nodes.length)
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:837
&gt; &gt; +            var srcNodeTypeIndex = srcIndex + this._nodeTypeOffset;
&gt; 
&gt; If this is necessary from performance point of view please introduce const for this._nodeTypeOffset value. Otherwise please remove such const from the other places.
&gt; 
Done. It doesn&apos;t give any noticeable performance gain so I&apos;ve removed the consts.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:839
&gt; &gt; +            var edgesCount = this._nodes[srcIndex + this._edgesCountOffset];
&gt; 
&gt; ditto for this._edgesCountOffset
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:841
&gt; &gt; +            for (var i = 0; i &lt; nodeFieldCount; i++)
&gt; &gt; +                this._onlyNodes[dstIndex++] = this._nodes[srcIndex++];
&gt; 
&gt; I&apos;m not sure but it could be faster to use set function here
&gt; this._onlyNodes.set(this._nodes.subarray(srcIndex, nodeFieldCount), dstIndex);
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:850
&gt; &gt; +        while (true) {
&gt; &gt; +            if (newNodeIndex &gt;= this._onlyNodes.length)
&gt; &gt; +                break;
&gt; 
&gt; it can be &apos;for&apos; cycle
Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:851
&gt; &gt; +            var dominatorIndex = this._onlyNodes[newNodeIndex + this._dominatorOffset]
&gt; 
&gt; const for this._dominatorOffset
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:853
&gt; &gt; +            var newDominatoIndex = this._nodes[dominatorIndex + this._nodeTypeOffset];
&gt; &gt; +            this._onlyNodes[newNodeIndex + this._dominatorOffset] = newDominatoIndex;
&gt; 
&gt; this._onlyNodes[newNodeIndex + this._dominatorOffset] = this._nodes[dominatorIndex + this._nodeTypeOffset];
&gt; const for nodeTypeOffset and dominatorOffset
&gt; nit: missed r symbol in newDominatoIndex
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:863
&gt; &gt; +        while (true) {
&gt; &gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; &gt; +                break;
&gt; 
&gt; ditto
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:864
&gt; &gt; +            var srcNodeTypeIndex = srcIndex + this._nodeTypeOffset;
&gt; 
&gt; const nodeTypeOffset?
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:881
&gt; &gt; +        while (true) {
&gt; &gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; &gt; +                break;
&gt; 
&gt; a variable for length, etc.
&gt; 
Why? There is no performance gain in this case.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:892
&gt; &gt; +                this._retainingNodes[firstUnusedRetainerSlot] = srcNodeNewIndex;
&gt; &gt; +                this._retainingNodes[firstUnusedRetainerSlot + 1] = this._retainingNodes[destinationNewIndex];
&gt; &gt; +                this._retainingNodes[destinationNewIndex] = firstUnusedRetainerSlot;
&gt; &gt; +                firstUnusedRetainerSlot += 2;
&gt; 
&gt; I think this is an overhead. It could be enough to have an array of offsets and array of newEdgeIndexes.
&gt; These two arrays can be joined into one but I see no reasons for this.
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:907
&gt; &gt; +        while (true) {
&gt; &gt; +            if (srcIndex &gt;= this._nodes.length)
&gt; &gt; +                break;
&gt; 
&gt; ditto
Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:913
&gt; &gt; +            var edgesCount = this._nodes[srcIndex + this._edgesCountOffset];
&gt; 
&gt; const
Const wouldn&apos;t add any performance gain, so I&apos;d leave it this way.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:914
&gt; &gt; +            srcIndex += this._firstEdgeOffset;
&gt; 
&gt; const
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:916
&gt; &gt; +            for (var i = 0; i &lt; edgesCount * this._edgeFieldsCount; i++) {
&gt; 
&gt; for (var i = 0, l = edgesCount * this._edgeFieldsCount; i &lt; l; i++)
&gt; 
It wouldn&apos;t make any difference in terms of performance but would add additional characters, I&apos;d leave it as is.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:925
&gt; &gt; +            for (var i = 0; i &lt; edgesCount * this._edgeFieldsCount; i++) {
&gt; &gt; +                this._containmentEdges[edgeArrayIndex++] = this._nodes[srcIndex++];
&gt; &gt; +            }
&gt; &gt; +
&gt; &gt; +            // Translate destination node indexes for the copied edges.
&gt; &gt; +            for (var destinationIndex = firstEdgeIndex + this._edgeToNodeOffset; destinationIndex &lt; edgeArrayIndex; destinationIndex += this._edgeFieldsCount) {
&gt; &gt; +                var oldDestinationNodeIndex = this._containmentEdges[destinationIndex];
&gt; &gt; +                var newDestinationNodeIndex = this._nodes[oldDestinationNodeIndex + this._nodeTypeOffset];
&gt; &gt; +                this._containmentEdges[destinationIndex] = newDestinationNodeIndex;
&gt; &gt; +            }
&gt; 
&gt; looks weird. please join these cycles together
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshotProxy.js:96
&gt; &gt; +    this._worker = /*typeof InspectorTest === &quot;undefined&quot; ? new WebInspector.HeapSnapshotRealWorker() :*/ new WebInspector.HeapSnapshotFakeWorker();
&gt; 
&gt; wrong change
Reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587498</commentid>
    <comment_count>5</comment_count>
      <attachid>133736</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-25 23:54:01 -0700</bug_when>
    <thetext>Created attachment 133736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587519</commentid>
    <comment_count>6</comment_count>
      <attachid>133736</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-03-26 00:59:05 -0700</bug_when>
    <thetext>Comment on attachment 133736
Patch

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

please resort functions&apos; bodies in order of invocations.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:812
&gt; +        this._onlyNodes = new Uint32Array((nodeCount + 1) * this._nodeFieldCount);

Unnecessary +1

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:816
&gt; +        this._retainingNodes = new Uint32Array(totalEdgeCount);
&gt; +        // Index of the first retainer in the _retainingNodes array. Addressed by retained node index.
&gt; +        this._firstRetainerIndex = new Uint32Array(nodeCount);
&gt; +        this._containmentEdges = new Uint32Array(totalEdgeCount * this._edgeFieldsCount);

I&apos;d move allocations to the corresponding builders.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:841
&gt; +        for (var newNodeIndex = 0; newNodeIndex &lt; this._onlyNodes.length; newNodeIndex += this._nodeFieldCount) {
&gt; +            var dominatorIndex = this._onlyNodes[newNodeIndex + this._dominatorOffset]

for (var newNodeDominatorIndex = this._dominatorOffset; newNodeDominatorIndex &lt; this._onlyNodes.length; newNodeDominatorIndex += this._nodeFieldCount) {
    var dominatorIndex = this._onlyNodes[newNodeDominatorIndex];

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:843
&gt; +            this._onlyNodes[newNodeIndex + this._dominatorOffset] = newDominatorIndex;

this._onlyNodes[newNodeDominatorIndex] = newDominatorIndex;

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:862
&gt; +        for (var edgeDestinationIndex = this._edgeToNodeOffset; edgeDestinationIndex &lt; this._containmentEdges.length; edgeDestinationIndex += this._edgeFieldsCount)
&gt; +            ++this._firstRetainerIndex[edgeDestinationIndex];

wrong code.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:871
&gt; +        var nextNodeFirstEdgeIndex =  srcNodeIndex + this._edgesCountOffset;

unnecessary srcNodeIndex
Style: unnecessary space symbol

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:877
&gt; +            var nextNodeFirstEdgeIndex  = nextNodeIndex &lt; this._onlyNodes.length
&gt; +                                        ? this._onlyNodes[nextNodeIndex + this._edgesCountOffset]
&gt; +                                        : this._containmentEdges.length;

simpler version? : var nextNodeFirstEdgeIndex = this._onlyNodes[nextNodeIndex + this._edgesCountOffset] || this._containmentEdges.length</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587532</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-26 01:37:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 133736 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133736&amp;action=review
&gt; 
&gt; please resort functions&apos; bodies in order of invocations.
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:812
&gt; &gt; +        this._onlyNodes = new Uint32Array((nodeCount + 1) * this._nodeFieldCount);
&gt; 
&gt; Unnecessary +1
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:816
&gt; &gt; +        this._retainingNodes = new Uint32Array(totalEdgeCount);
&gt; &gt; +        // Index of the first retainer in the _retainingNodes array. Addressed by retained node index.
&gt; &gt; +        this._firstRetainerIndex = new Uint32Array(nodeCount);
&gt; &gt; +        this._containmentEdges = new Uint32Array(totalEdgeCount * this._edgeFieldsCount);
&gt; 
&gt; I&apos;d move allocations to the corresponding builders.
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:841
&gt; &gt; +        for (var newNodeIndex = 0; newNodeIndex &lt; this._onlyNodes.length; newNodeIndex += this._nodeFieldCount) {
&gt; &gt; +            var dominatorIndex = this._onlyNodes[newNodeIndex + this._dominatorOffset]
&gt; 
&gt; for (var newNodeDominatorIndex = this._dominatorOffset; newNodeDominatorIndex &lt; this._onlyNodes.length; newNodeDominatorIndex += this._nodeFieldCount) {
&gt;     var dominatorIndex = this._onlyNodes[newNodeDominatorIndex];
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:843
&gt; &gt; +            this._onlyNodes[newNodeIndex + this._dominatorOffset] = newDominatorIndex;
&gt; 
&gt; this._onlyNodes[newNodeDominatorIndex] = newDominatorIndex;
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:862
&gt; &gt; +        for (var edgeDestinationIndex = this._edgeToNodeOffset; edgeDestinationIndex &lt; this._containmentEdges.length; edgeDestinationIndex += this._edgeFieldsCount)
&gt; &gt; +            ++this._firstRetainerIndex[edgeDestinationIndex];
&gt; 
&gt; wrong code.
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:871
&gt; &gt; +        var nextNodeFirstEdgeIndex =  srcNodeIndex + this._edgesCountOffset;
&gt; 
&gt; unnecessary srcNodeIndex
&gt; Style: unnecessary space symbol
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:877
&gt; &gt; +            var nextNodeFirstEdgeIndex  = nextNodeIndex &lt; this._onlyNodes.length
&gt; &gt; +                                        ? this._onlyNodes[nextNodeIndex + this._edgesCountOffset]
&gt; &gt; +                                        : this._containmentEdges.length;
&gt; 
&gt; simpler version? : var nextNodeFirstEdgeIndex = this._onlyNodes[nextNodeIndex + this._edgesCountOffset] || this._containmentEdges.length
No. It would be wrong because this._onlyNodes[nextNodeIndex + this._edgesCountOffset] may contain 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587533</commentid>
    <comment_count>8</comment_count>
      <attachid>133748</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-26 01:38:18 -0700</bug_when>
    <thetext>Created attachment 133748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587554</commentid>
    <comment_count>9</comment_count>
      <attachid>133748</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-03-26 02:27:17 -0700</bug_when>
    <thetext>Comment on attachment 133748
Patch

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

lgtm with nits

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:861
&gt; +                    var oldDestinationNodeIndex = this._containmentEdges[edgeArrayIndex];
&gt; +                    var newDestinationNodeIndex = this._nodes[oldDestinationNodeIndex + this._nodeTypeOffset];

nit: oldToNodeIndex, newToNodeIndex

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:876
&gt; +        for (var edgeDestinationIndex = this._edgeToNodeOffset; edgeDestinationIndex &lt; this._containmentEdges.length; edgeDestinationIndex += this._edgeFieldsCount)

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587566</commentid>
    <comment_count>10</comment_count>
      <attachid>133759</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-26 03:05:17 -0700</bug_when>
    <thetext>Created attachment 133759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587570</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-26 03:07:16 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 133748 [details])
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:861
&gt; &gt; +                    var oldDestinationNodeIndex = this._containmentEdges[edgeArrayIndex];
&gt; &gt; +                    var newDestinationNodeIndex = this._nodes[oldDestinationNodeIndex + this._nodeTypeOffset];
&gt; 
&gt; nit: oldToNodeIndex, newToNodeIndex
&gt; 
Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:876
&gt; &gt; +        for (var edgeDestinationIndex = this._edgeToNodeOffset; edgeDestinationIndex &lt; this._containmentEdges.length; edgeDestinationIndex += this._edgeFieldsCount)
&gt; 
&gt; ditto
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587573</commentid>
    <comment_count>12</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-26 03:16:08 -0700</bug_when>
    <thetext>Committed r112071: &lt;http://trac.webkit.org/changeset/112071&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133290</attachid>
            <date>2012-03-22 10:26:26 -0700</date>
            <delta_ts>2012-03-22 10:27:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81930-20120322212624.patch</filename>
            <type>text/plain</type>
            <size>9498</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM0YzNhOWFlOTE4ZmJj
YzQxNTQxOGZmZDNjODgwYjRmOTg1ZDU5My4uNGI1M2U2MjdiOGVkZGM2NjJhZGU1ZTgyZGQ5ZTQy
ZGJjNTYxZmYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IG5vZGVzIGFuZCBjb250YWlubWVudCBlZGdlcyBpbnRvIHR3byBkaWZmZXJlbnQg
YXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTkzMAorCisgICAgICAgIEV4dHJhY3QgaGVhcCBwcm9maWxlIG5vZGVzIGFuZCBlZGdlcyBpbnRv
IHR3byBzZXBhcmF0ZSBhcnJheXMuIFRoaXMKKyAgICAgICAgd2F5IHdlIHdpbGwgaGF2ZSBhIGNv
bnRpbnVvdXMgYXJyYXkgb2YgdGhlIGhlYXAgZ3JhcGggbm9kZXMgYW5kIGNhbgorICAgICAgICBh
dmlvZCBhZGRpdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBub2RlIGluZGV4IGFuZCBpdHMgcG9zaXRp
b24gaW4gdGhlCisgICAgICAgIGhlYXAgc25hcHNob3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9p
bml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWls
ZENvbnRpbnVvdXNOb2RlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dC5wcm90b3R5cGUuX2NyZWF0ZU9ubHlOb2Rlc0FycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9yZXN0b3JlTm9kZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNB
cnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY3Jl
YXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFdvcmtlcik6CisKIDIwMTItMDMtMjIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTE2ODguCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Lmpz
CmluZGV4IDlkNzg0OTcxNDBmODc4MWI5MWM4M2I2N2YzYmVmN2YzZjU3NWViYWMuLjdmNTNmMjQy
ZDRhMTRkNzAyMDEwMDA5NTFiMGU2Njg0ZGI0NmMzYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC02MTIsMTEgKzYxMiw2
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJ
ZE9mZnNldF07CiAgICAgfSwKIAotICAgIGdldCBpbnN0YW5jZXNDb3VudCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUluc3RhbmNlc0NvdW50T2Zmc2V0XTsKLSAgICB9LAotCiAgICAgZ2V0IGlzSGlkZGVuKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9u
b2RlSGlkZGVuVHlwZTsKQEAgLTc2NCw3ICs3NTksNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLmZp
ZWxkcy5pbmRleE9mKCJ0eXBlIik7CiAgICAgICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gbWV0
YS5maWVsZHMuaW5kZXhPZigibmFtZSIpOwogICAgICAgICB0aGlzLl9ub2RlSWRPZmZzZXQgPSBt
ZXRhLmZpZWxkcy5pbmRleE9mKCJpZCIpOwotICAgICAgICB0aGlzLl9ub2RlSW5zdGFuY2VzQ291
bnRPZmZzZXQgPSB0aGlzLl9ub2RlSWRPZmZzZXQ7CiAgICAgICAgIHRoaXMuX25vZGVTZWxmU2l6
ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInNlbGZfc2l6ZSIpOwogICAgICAgICB0aGlz
Ll9ub2RlUmV0YWluZWRTaXplT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigicmV0YWluZWRf
c2l6ZSIpOwogICAgICAgICB0aGlzLl9kb21pbmF0b3JPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRl
eE9mKCJkb21pbmF0b3IiKTsKQEAgLTgwMSw2ICs3OTUsMTM2IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9idWlsZERvbWluYXRlZE5vZGVz
KCk7CiAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZsYWdzKCk7CiAgICAgICAgIHRoaXMuX2NhbGN1
bGF0ZU9iamVjdFRvV2luZG93RGlzdGFuY2UoKTsKKyAgICAgICAgdGhpcy5fYnVpbGRDb250aW51
b3VzTm9kZUFycmF5KCk7CisgICAgfSwKKworICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnN0IG5vZGVGaWVsZENvdW50ID0gdGhpcy5f
Zmlyc3RFZGdlT2Zmc2V0OworICAgICAgICBjb25zdCBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2Vk
Z2VGaWVsZHNDb3VudDsKKworICAgICAgICAvLyBFc3RpbWF0ZSBudW1iZXIgb2Ygbm9kZXMuCisg
ICAgICAgIHZhciB0b3RhbEVkZ2VDb3VudCA9IDA7CisgICAgICAgIHZhciBub2RlQ291bnQgPSAw
OworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX25vZGVzLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrbm9kZUNvdW50OworICAgICAg
ICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdOworICAgICAgICAgICAgaWYgKGVkZ2VzQ291bnQgPiAxKQorICAgICAgICAgICAg
ICAgIHRvdGFsRWRnZUNvdW50ICs9IGVkZ2VzQ291bnQ7CisgICAgICAgICAgICBpbmRleCArPSB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogZWRnZUZpZWxkQ291bnQ7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fb25seU5vZGVzID0gbmV3IEludDMyQXJyYXkoKG5vZGVDb3Vu
dCArIDEpICogbm9kZUZpZWxkQ291bnQpOworICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2RlcyA9
IG5ldyBJbnQzMkFycmF5KG5vZGVDb3VudCArIDIgKiB0b3RhbEVkZ2VDb3VudCk7CisgICAgICAg
IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcgSW50MzJBcnJheSh0b3RhbEVkZ2VDb3VudCAq
IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCk7CisKKyAgICAgICAgdGhpcy5fY3JlYXRlT25seU5vZGVz
QXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KCk7Cisg
ICAgICAgIHRoaXMuX2NyZWF0ZVJldGFpbm1lbnRFZGdlc0FycmF5KG5vZGVDb3VudCk7CisgICAg
ICAgIHRoaXMuX3Jlc3RvcmVOb2RlVHlwZXMoKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU9ubHlO
b2Rlc0FycmF5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zdCBub2RlRmllbGRDb3Vu
dCA9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgLy8gQ29weSBub2RlcyB0byB0aGVp
ciBvd24gYXJyYXkuCisgICAgICAgIHZhciBkc3RJbmRleCA9IDA7CisgICAgICAgIHZhciBzcmNJ
bmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICBpZiAoc3JjSW5kZXggPj0gdGhpcy5fbm9kZXMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIHNyY05vZGVUeXBlSW5kZXggPSBzcmNJbmRleCAr
IHRoaXMuX25vZGVUeXBlT2Zmc2V0OworICAgICAgICAgICAgdmFyIGN1cnJlbnREc3RJbmRleCA9
IGRzdEluZGV4OworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tzcmNJ
bmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBub2RlRmllbGRDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHRoaXMuX29ubHlO
b2Rlc1tkc3RJbmRleCsrXSA9IHRoaXMuX25vZGVzW3NyY0luZGV4KytdOworICAgICAgICAgICAg
Ly8gV3JpdGUgbmV3IG5vZGUgaW5kZXggaW50byB0aGUgdHlwZSBmaWVsZC4KKyAgICAgICAgICAg
IHRoaXMuX25vZGVzW3NyY05vZGVUeXBlSW5kZXhdID0gY3VycmVudERzdEluZGV4OworICAgICAg
ICAgICAgc3JjSW5kZXggKz0gZWRnZXNDb3VudCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICAvLyBUcmFuc2xhdGUgZG9taW5hdG9yIGluZGV4ZXMuCisgICAgICAg
IHZhciBuZXdOb2RlSW5kZXggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgaWYgKG5ld05vZGVJbmRleCA+PSB0aGlzLl9vbmx5Tm9kZXMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fb25s
eU5vZGVzW25ld05vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF0KKyAgICAgICAgICAg
IHZhciBuZXdEb21pbmF0b0luZGV4ID0gdGhpcy5fbm9kZXNbZG9taW5hdG9ySW5kZXggKyB0aGlz
Ll9ub2RlVHlwZU9mZnNldF07CisgICAgICAgICAgICB0aGlzLl9vbmx5Tm9kZXNbbmV3Tm9kZUlu
ZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0XSA9IG5ld0RvbWluYXRvSW5kZXg7CisgICAgICAg
ICAgICBuZXdOb2RlSW5kZXggKz0gbm9kZUZpZWxkQ291bnQ7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgX3Jlc3RvcmVOb2RlVHlwZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBz
cmNJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBpZiAoc3JjSW5kZXggPj0gdGhpcy5fbm9kZXMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIHNyY05vZGVUeXBlSW5kZXggPSBzcmNJbmRl
eCArIHRoaXMuX25vZGVUeXBlT2Zmc2V0OworICAgICAgICAgICAgdmFyIG5ld05vZGVJbmRleCA9
IHRoaXMuX25vZGVzW3NyY05vZGVUeXBlSW5kZXhdOworICAgICAgICAgICAgdGhpcy5fbm9kZXNb
c3JjTm9kZVR5cGVJbmRleF0gPSB0aGlzLl9vbmx5Tm9kZXNbbmV3Tm9kZUluZGV4ICsgdGhpcy5f
bm9kZVR5cGVPZmZzZXRdOworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rl
c1tzcmNJbmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgc3JjSW5k
ZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZXNDb3VudCAqIHRoaXMuX2VkZ2VGaWVs
ZHNDb3VudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfY3JlYXRlUmV0YWlubWVudEVkZ2Vz
QXJyYXk6IGZ1bmN0aW9uKG5vZGVDb3VudCkKKyAgICB7CisgICAgICAgIC8vIENhbGNsdWxhdGUg
cmV0YWluZXJzIGxpc3RzLgorICAgICAgICB2YXIgZHN0SW5kZXggPSAwOworICAgICAgICB2YXIg
c3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB2YXIgc3JjTm9kZU5ld0lu
ZGV4ID0gMDsKKyAgICAgICAgdmFyIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ID0gbm9kZUNvdW50
OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHNyY0luZGV4ID49IHRo
aXMuX25vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZh
ciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zm
c2V0XTsKKworICAgICAgICAgICAgc3JjSW5kZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0Owor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlc0NvdW50OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZGVzdGluYXRpb25PbGRJbmRleCA9IHRoaXMuX25vZGVzW3NyY0luZGV4
ICsgdGhpcy5fZWRnZVRvTm9kZU9mZnNldF07CisgICAgICAgICAgICAgICAgdmFyIGRlc3RpbmF0
aW9uTmV3SW5kZXggPSB0aGlzLl9ub2Rlc1tkZXN0aW5hdGlvbk9sZEluZGV4ICsgdGhpcy5fbm9k
ZVR5cGVPZmZzZXRdOworCisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXNbZmly
c3RVbnVzZWRSZXRhaW5lclNsb3RdID0gc3JjTm9kZU5ld0luZGV4OworICAgICAgICAgICAgICAg
IHRoaXMuX3JldGFpbmluZ05vZGVzW2ZpcnN0VW51c2VkUmV0YWluZXJTbG90ICsgMV0gPSB0aGlz
Ll9yZXRhaW5pbmdOb2Rlc1tkZXN0aW5hdGlvbk5ld0luZGV4XTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9yZXRhaW5pbmdOb2Rlc1tkZXN0aW5hdGlvbk5ld0luZGV4XSA9IGZpcnN0VW51c2VkUmV0
YWluZXJTbG90OworICAgICAgICAgICAgICAgIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ICs9IDI7
CisKKyAgICAgICAgICAgICAgICBzcmNJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICArK3NyY05vZGVOZXdJbmRleDsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBfY3JlYXRlQ29udGFpbm1lbnRFZGdlc0FycmF5OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICAvLyBDb3B5IGVkZ2VzIHRvIHRoZWlyIG93biBhcnJheS4KKyAgICAgICAg
dmFyIGVkZ2VBcnJheUluZGV4ID0gMDsKKyAgICAgICAgdmFyIHNyY0luZGV4ID0gdGhpcy5fcm9v
dE5vZGVJbmRleDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChzcmNJ
bmRleCA+PSB0aGlzLl9ub2Rlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB2YXIgc3JjTm9kZU5ld0luZGV4ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlz
Ll9ub2RlVHlwZU9mZnNldF07CisgICAgICAgICAgICAvLyBTZXQgaW5kZXggb2YgZmlyc3Qgb3V0
Z29pbmcgZWdkZSBpbiB0aGUgX2NvbnRhaW5tZW50RWRnZXMgYXJyYXkuCisgICAgICAgICAgICB0
aGlzLl9vbmx5Tm9kZXNbc3JjTm9kZU5ld0luZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF0g
PSBlZGdlQXJyYXlJbmRleDsKKworICAgICAgICAgICAgLy8gTm93IGNvcHkgYWxsIGVkZ2UgaW5m
b3JtYXRpb24uCisgICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW3NyY0lu
ZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07CisgICAgICAgICAgICBzcmNJbmRleCArPSB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXggPSBl
ZGdlQXJyYXlJbmRleDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXNDb3Vu
dCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
Y29udGFpbm1lbnRFZGdlc1tlZGdlQXJyYXlJbmRleCsrXSA9IHRoaXMuX25vZGVzW3NyY0luZGV4
KytdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUcmFuc2xhdGUgZGVzdGluYXRp
b24gbm9kZSBpbmRleGVzIGZvciB0aGUgY29waWVkIGVkZ2VzLgorICAgICAgICAgICAgZm9yICh2
YXIgZGVzdGluYXRpb25JbmRleCA9IGZpcnN0RWRnZUluZGV4ICsgdGhpcy5fZWRnZVRvTm9kZU9m
ZnNldDsgZGVzdGluYXRpb25JbmRleCA8IGVkZ2VBcnJheUluZGV4OyBkZXN0aW5hdGlvbkluZGV4
ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgeworICAgICAgICAgICAgICAgIHZhciBvbGREZXN0
aW5hdGlvbk5vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZGVzdGluYXRpb25JbmRl
eF07CisgICAgICAgICAgICAgICAgdmFyIG5ld0Rlc3RpbmF0aW9uTm9kZUluZGV4ID0gdGhpcy5f
bm9kZXNbb2xkRGVzdGluYXRpb25Ob2RlSW5kZXggKyB0aGlzLl9ub2RlVHlwZU9mZnNldF07Cisg
ICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbm1lbnRFZGdlc1tkZXN0aW5hdGlvbkluZGV4XSA9
IG5ld0Rlc3RpbmF0aW9uTm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
fSwKIAogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCmluZGV4IDRjMWUyNDAx
N2NhZjc5NGQ5ZWE2N2I0MjY3M2Y2MTQwN2E4ZTNhZGQuLjUwZWI3Yjg4YzM4OTI3YTA0MzliZjFh
YTMwNTQ3NmJiMmEwMTM4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcwpAQCAtOTMsNyArOTMsNyBAQCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2NhbGxi
YWNrcyA9IFtdOwogICAgIHRoaXMuX3ByZXZpb3VzQ2FsbGJhY2tzID0gW107CiAgICAgLy8gVGhl
cmUgaXMgbm8gc3VwcG9ydCBmb3Igd29ya2VycyBpbiBDaHJvbWl1bSBEUlQuCi0gICAgdGhpcy5f
d29ya2VyID0gdHlwZW9mIEluc3BlY3RvclRlc3QgPT09ICJ1bmRlZmluZWQiID8gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZWFsV29ya2VyKCkgOiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEZha2VXb3JrZXIoKTsKKyAgICB0aGlzLl93b3JrZXIgPSAvKnR5cGVvZiBJbnNwZWN0
b3JUZXN0ID09PSAidW5kZWZpbmVkIiA/IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVh
bFdvcmtlcigpIDoqLyBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZha2VXb3JrZXIoKTsK
ICAgICB0aGlzLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHRoaXMuX21lc3Nh
Z2VSZWNlaXZlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133291</attachid>
            <date>2012-03-22 10:27:33 -0700</date>
            <delta_ts>2012-03-25 23:53:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81930-20120322212731.patch</filename>
            <type>text/plain</type>
            <size>9420</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM0YzNhOWFlOTE4ZmJj
YzQxNTQxOGZmZDNjODgwYjRmOTg1ZDU5My4uNGI1M2U2MjdiOGVkZGM2NjJhZGU1ZTgyZGQ5ZTQy
ZGJjNTYxZmYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IG5vZGVzIGFuZCBjb250YWlubWVudCBlZGdlcyBpbnRvIHR3byBkaWZmZXJlbnQg
YXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTkzMAorCisgICAgICAgIEV4dHJhY3QgaGVhcCBwcm9maWxlIG5vZGVzIGFuZCBlZGdlcyBpbnRv
IHR3byBzZXBhcmF0ZSBhcnJheXMuIFRoaXMKKyAgICAgICAgd2F5IHdlIHdpbGwgaGF2ZSBhIGNv
bnRpbnVvdXMgYXJyYXkgb2YgdGhlIGhlYXAgZ3JhcGggbm9kZXMgYW5kIGNhbgorICAgICAgICBh
dmlvZCBhZGRpdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBub2RlIGluZGV4IGFuZCBpdHMgcG9zaXRp
b24gaW4gdGhlCisgICAgICAgIGhlYXAgc25hcHNob3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9p
bml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWls
ZENvbnRpbnVvdXNOb2RlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dC5wcm90b3R5cGUuX2NyZWF0ZU9ubHlOb2Rlc0FycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9yZXN0b3JlTm9kZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNB
cnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY3Jl
YXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFdvcmtlcik6CisKIDIwMTItMDMtMjIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTE2ODguCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Lmpz
CmluZGV4IDlkNzg0OTcxNDBmODc4MWI5MWM4M2I2N2YzYmVmN2YzZjU3NWViYWMuLjMyZWRlNzY4
MjZmM2ZjYTQ3MTg4MzFkZWE0OWRmNTFkZjIyZDhmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC02MTIsMTEgKzYxMiw2
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJ
ZE9mZnNldF07CiAgICAgfSwKIAotICAgIGdldCBpbnN0YW5jZXNDb3VudCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUluc3RhbmNlc0NvdW50T2Zmc2V0XTsKLSAgICB9LAotCiAgICAgZ2V0IGlzSGlkZGVuKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9u
b2RlSGlkZGVuVHlwZTsKQEAgLTc2NCw3ICs3NTksNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLmZp
ZWxkcy5pbmRleE9mKCJ0eXBlIik7CiAgICAgICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gbWV0
YS5maWVsZHMuaW5kZXhPZigibmFtZSIpOwogICAgICAgICB0aGlzLl9ub2RlSWRPZmZzZXQgPSBt
ZXRhLmZpZWxkcy5pbmRleE9mKCJpZCIpOwotICAgICAgICB0aGlzLl9ub2RlSW5zdGFuY2VzQ291
bnRPZmZzZXQgPSB0aGlzLl9ub2RlSWRPZmZzZXQ7CiAgICAgICAgIHRoaXMuX25vZGVTZWxmU2l6
ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInNlbGZfc2l6ZSIpOwogICAgICAgICB0aGlz
Ll9ub2RlUmV0YWluZWRTaXplT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigicmV0YWluZWRf
c2l6ZSIpOwogICAgICAgICB0aGlzLl9kb21pbmF0b3JPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRl
eE9mKCJkb21pbmF0b3IiKTsKQEAgLTgwMyw2ICs3OTcsMTM1IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dp
bmRvd0Rpc3RhbmNlKCk7CiAgICAgfSwKIAorICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnN0IG5vZGVGaWVsZENvdW50ID0gdGhpcy5f
Zmlyc3RFZGdlT2Zmc2V0OworICAgICAgICBjb25zdCBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2Vk
Z2VGaWVsZHNDb3VudDsKKworICAgICAgICAvLyBFc3RpbWF0ZSBudW1iZXIgb2Ygbm9kZXMuCisg
ICAgICAgIHZhciB0b3RhbEVkZ2VDb3VudCA9IDA7CisgICAgICAgIHZhciBub2RlQ291bnQgPSAw
OworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX25vZGVzLmxlbmd0aCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICsrbm9kZUNvdW50OworICAgICAg
ICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdOworICAgICAgICAgICAgaWYgKGVkZ2VzQ291bnQgPiAxKQorICAgICAgICAgICAg
ICAgIHRvdGFsRWRnZUNvdW50ICs9IGVkZ2VzQ291bnQ7CisgICAgICAgICAgICBpbmRleCArPSB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogZWRnZUZpZWxkQ291bnQ7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fb25seU5vZGVzID0gbmV3IEludDMyQXJyYXkoKG5vZGVDb3Vu
dCArIDEpICogbm9kZUZpZWxkQ291bnQpOworICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2RlcyA9
IG5ldyBJbnQzMkFycmF5KG5vZGVDb3VudCArIDIgKiB0b3RhbEVkZ2VDb3VudCk7CisgICAgICAg
IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcgSW50MzJBcnJheSh0b3RhbEVkZ2VDb3VudCAq
IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCk7CisKKyAgICAgICAgdGhpcy5fY3JlYXRlT25seU5vZGVz
QXJyYXkoKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KCk7Cisg
ICAgICAgIHRoaXMuX2NyZWF0ZVJldGFpbm1lbnRFZGdlc0FycmF5KG5vZGVDb3VudCk7CisgICAg
ICAgIHRoaXMuX3Jlc3RvcmVOb2RlVHlwZXMoKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU9ubHlO
b2Rlc0FycmF5OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zdCBub2RlRmllbGRDb3Vu
dCA9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgLy8gQ29weSBub2RlcyB0byB0aGVp
ciBvd24gYXJyYXkuCisgICAgICAgIHZhciBkc3RJbmRleCA9IDA7CisgICAgICAgIHZhciBzcmNJ
bmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICBpZiAoc3JjSW5kZXggPj0gdGhpcy5fbm9kZXMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIHNyY05vZGVUeXBlSW5kZXggPSBzcmNJbmRleCAr
IHRoaXMuX25vZGVUeXBlT2Zmc2V0OworICAgICAgICAgICAgdmFyIGN1cnJlbnREc3RJbmRleCA9
IGRzdEluZGV4OworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tzcmNJ
bmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBub2RlRmllbGRDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHRoaXMuX29ubHlO
b2Rlc1tkc3RJbmRleCsrXSA9IHRoaXMuX25vZGVzW3NyY0luZGV4KytdOworICAgICAgICAgICAg
Ly8gV3JpdGUgbmV3IG5vZGUgaW5kZXggaW50byB0aGUgdHlwZSBmaWVsZC4KKyAgICAgICAgICAg
IHRoaXMuX25vZGVzW3NyY05vZGVUeXBlSW5kZXhdID0gY3VycmVudERzdEluZGV4OworICAgICAg
ICAgICAgc3JjSW5kZXggKz0gZWRnZXNDb3VudCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICAvLyBUcmFuc2xhdGUgZG9taW5hdG9yIGluZGV4ZXMuCisgICAgICAg
IHZhciBuZXdOb2RlSW5kZXggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgaWYgKG5ld05vZGVJbmRleCA+PSB0aGlzLl9vbmx5Tm9kZXMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fb25s
eU5vZGVzW25ld05vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF0KKyAgICAgICAgICAg
IHZhciBuZXdEb21pbmF0b0luZGV4ID0gdGhpcy5fbm9kZXNbZG9taW5hdG9ySW5kZXggKyB0aGlz
Ll9ub2RlVHlwZU9mZnNldF07CisgICAgICAgICAgICB0aGlzLl9vbmx5Tm9kZXNbbmV3Tm9kZUlu
ZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0XSA9IG5ld0RvbWluYXRvSW5kZXg7CisgICAgICAg
ICAgICBuZXdOb2RlSW5kZXggKz0gbm9kZUZpZWxkQ291bnQ7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgX3Jlc3RvcmVOb2RlVHlwZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBz
cmNJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBpZiAoc3JjSW5kZXggPj0gdGhpcy5fbm9kZXMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIHNyY05vZGVUeXBlSW5kZXggPSBzcmNJbmRl
eCArIHRoaXMuX25vZGVUeXBlT2Zmc2V0OworICAgICAgICAgICAgdmFyIG5ld05vZGVJbmRleCA9
IHRoaXMuX25vZGVzW3NyY05vZGVUeXBlSW5kZXhdOworICAgICAgICAgICAgdGhpcy5fbm9kZXNb
c3JjTm9kZVR5cGVJbmRleF0gPSB0aGlzLl9vbmx5Tm9kZXNbbmV3Tm9kZUluZGV4ICsgdGhpcy5f
bm9kZVR5cGVPZmZzZXRdOworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rl
c1tzcmNJbmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgc3JjSW5k
ZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZXNDb3VudCAqIHRoaXMuX2VkZ2VGaWVs
ZHNDb3VudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfY3JlYXRlUmV0YWlubWVudEVkZ2Vz
QXJyYXk6IGZ1bmN0aW9uKG5vZGVDb3VudCkKKyAgICB7CisgICAgICAgIC8vIENhbGNsdWxhdGUg
cmV0YWluZXJzIGxpc3RzLgorICAgICAgICB2YXIgZHN0SW5kZXggPSAwOworICAgICAgICB2YXIg
c3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB2YXIgc3JjTm9kZU5ld0lu
ZGV4ID0gMDsKKyAgICAgICAgdmFyIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ID0gbm9kZUNvdW50
OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKHNyY0luZGV4ID49IHRo
aXMuX25vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZh
ciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zm
c2V0XTsKKworICAgICAgICAgICAgc3JjSW5kZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0Owor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlc0NvdW50OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgZGVzdGluYXRpb25PbGRJbmRleCA9IHRoaXMuX25vZGVzW3NyY0luZGV4
ICsgdGhpcy5fZWRnZVRvTm9kZU9mZnNldF07CisgICAgICAgICAgICAgICAgdmFyIGRlc3RpbmF0
aW9uTmV3SW5kZXggPSB0aGlzLl9ub2Rlc1tkZXN0aW5hdGlvbk9sZEluZGV4ICsgdGhpcy5fbm9k
ZVR5cGVPZmZzZXRdOworCisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXNbZmly
c3RVbnVzZWRSZXRhaW5lclNsb3RdID0gc3JjTm9kZU5ld0luZGV4OworICAgICAgICAgICAgICAg
IHRoaXMuX3JldGFpbmluZ05vZGVzW2ZpcnN0VW51c2VkUmV0YWluZXJTbG90ICsgMV0gPSB0aGlz
Ll9yZXRhaW5pbmdOb2Rlc1tkZXN0aW5hdGlvbk5ld0luZGV4XTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9yZXRhaW5pbmdOb2Rlc1tkZXN0aW5hdGlvbk5ld0luZGV4XSA9IGZpcnN0VW51c2VkUmV0
YWluZXJTbG90OworICAgICAgICAgICAgICAgIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ICs9IDI7
CisKKyAgICAgICAgICAgICAgICBzcmNJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICArK3NyY05vZGVOZXdJbmRleDsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBfY3JlYXRlQ29udGFpbm1lbnRFZGdlc0FycmF5OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICAvLyBDb3B5IGVkZ2VzIHRvIHRoZWlyIG93biBhcnJheS4KKyAgICAgICAg
dmFyIGVkZ2VBcnJheUluZGV4ID0gMDsKKyAgICAgICAgdmFyIHNyY0luZGV4ID0gdGhpcy5fcm9v
dE5vZGVJbmRleDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChzcmNJ
bmRleCA+PSB0aGlzLl9ub2Rlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB2YXIgc3JjTm9kZU5ld0luZGV4ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlz
Ll9ub2RlVHlwZU9mZnNldF07CisgICAgICAgICAgICAvLyBTZXQgaW5kZXggb2YgZmlyc3Qgb3V0
Z29pbmcgZWdkZSBpbiB0aGUgX2NvbnRhaW5tZW50RWRnZXMgYXJyYXkuCisgICAgICAgICAgICB0
aGlzLl9vbmx5Tm9kZXNbc3JjTm9kZU5ld0luZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF0g
PSBlZGdlQXJyYXlJbmRleDsKKworICAgICAgICAgICAgLy8gTm93IGNvcHkgYWxsIGVkZ2UgaW5m
b3JtYXRpb24uCisgICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW3NyY0lu
ZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07CisgICAgICAgICAgICBzcmNJbmRleCArPSB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXggPSBl
ZGdlQXJyYXlJbmRleDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXNDb3Vu
dCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
Y29udGFpbm1lbnRFZGdlc1tlZGdlQXJyYXlJbmRleCsrXSA9IHRoaXMuX25vZGVzW3NyY0luZGV4
KytdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUcmFuc2xhdGUgZGVzdGluYXRp
b24gbm9kZSBpbmRleGVzIGZvciB0aGUgY29waWVkIGVkZ2VzLgorICAgICAgICAgICAgZm9yICh2
YXIgZGVzdGluYXRpb25JbmRleCA9IGZpcnN0RWRnZUluZGV4ICsgdGhpcy5fZWRnZVRvTm9kZU9m
ZnNldDsgZGVzdGluYXRpb25JbmRleCA8IGVkZ2VBcnJheUluZGV4OyBkZXN0aW5hdGlvbkluZGV4
ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgeworICAgICAgICAgICAgICAgIHZhciBvbGREZXN0
aW5hdGlvbk5vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZGVzdGluYXRpb25JbmRl
eF07CisgICAgICAgICAgICAgICAgdmFyIG5ld0Rlc3RpbmF0aW9uTm9kZUluZGV4ID0gdGhpcy5f
bm9kZXNbb2xkRGVzdGluYXRpb25Ob2RlSW5kZXggKyB0aGlzLl9ub2RlVHlwZU9mZnNldF07Cisg
ICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbm1lbnRFZGdlc1tkZXN0aW5hdGlvbkluZGV4XSA9
IG5ld0Rlc3RpbmF0aW9uTm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSwKKwogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9ub2RlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90UHJveHkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzCmluZGV4IDRjMWUyNDAxN2NhZjc5NGQ5ZWE2N2I0MjY3M2Y2
MTQwN2E4ZTNhZGQuLjUwZWI3Yjg4YzM4OTI3YTA0MzliZjFhYTMwNTQ3NmJiMmEwMTM4YjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
UHJveHkuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25h
cHNob3RQcm94eS5qcwpAQCAtOTMsNyArOTMsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
V29ya2VyID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdOwogICAgIHRoaXMu
X3ByZXZpb3VzQ2FsbGJhY2tzID0gW107CiAgICAgLy8gVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3Ig
d29ya2VycyBpbiBDaHJvbWl1bSBEUlQuCi0gICAgdGhpcy5fd29ya2VyID0gdHlwZW9mIEluc3Bl
Y3RvclRlc3QgPT09ICJ1bmRlZmluZWQiID8gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RS
ZWFsV29ya2VyKCkgOiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZha2VXb3JrZXIoKTsK
KyAgICB0aGlzLl93b3JrZXIgPSAvKnR5cGVvZiBJbnNwZWN0b3JUZXN0ID09PSAidW5kZWZpbmVk
IiA/IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVhbFdvcmtlcigpIDoqLyBuZXcgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZha2VXb3JrZXIoKTsKICAgICB0aGlzLl93b3JrZXIuYWRk
RXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHRoaXMuX21lc3NhZ2VSZWNlaXZlZC5iaW5kKHRoaXMp
LCBmYWxzZSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133736</attachid>
            <date>2012-03-25 23:54:01 -0700</date>
            <delta_ts>2012-03-26 01:38:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81930-20120326105359.patch</filename>
            <type>text/plain</type>
            <size>9237</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZkNTkzNWMwMGEzNjMw
NmYxMDlkMzg2Y2Y5Mjc1OTc4YmUxNGM1OS4uODJjMTZmY2Y5YjE0MDkwMDBlODI3MmE5ZjNjYzE2
ZjI3MjZlMDg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IG5vZGVzIGFuZCBjb250YWlubWVudCBlZGdlcyBpbnRvIHR3byBkaWZmZXJlbnQg
YXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTkzMAorCisgICAgICAgIEV4dHJhY3QgaGVhcCBwcm9maWxlIG5vZGVzIGFuZCBlZGdlcyBpbnRv
IHR3byBzZXBhcmF0ZSBhcnJheXMuIFRoaXMKKyAgICAgICAgd2F5IHdlIHdpbGwgaGF2ZSBhIGNv
bnRpbnVvdXMgYXJyYXkgb2YgdGhlIGhlYXAgZ3JhcGggbm9kZXMgYW5kIGNhbgorICAgICAgICBh
dmlvZCBhZGRpdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBub2RlIGluZGV4IGFuZCBpdHMgcG9zaXRp
b24gaW4gdGhlCisgICAgICAgIGhlYXAgc25hcHNob3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9p
bml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWls
ZENvbnRpbnVvdXNOb2RlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dC5wcm90b3R5cGUuX2NyZWF0ZU9ubHlOb2Rlc0FycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9yZXN0b3JlTm9kZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNB
cnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY3Jl
YXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFdvcmtlcik6CisKIDIwMTItMDMtMjUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIERvbid0IHVzZSBDU1NSdWxlTGlzdCBmb3IgY2hpbGQgcnVsZSBvd25lcnNo
aXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3QuanMKaW5kZXggOWQ3ODQ5NzE0MGY4NzgxYjkxYzgzYjY3ZjNiZWY3ZjNmNTc1ZWJhYy4uYzc2
YjliZTBiOTdkMDk4MzI2NDgwOWI1NWRlZDNlYjI0MDU1MjIxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTYxMiwxMSAr
NjEyLDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUlkT2Zmc2V0XTsKICAgICB9LAogCi0gICAgZ2V0IGluc3RhbmNlc0NvdW50KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBz
aG90Ll9ub2RlSW5zdGFuY2VzQ291bnRPZmZzZXRdOwotICAgIH0sCi0KICAgICBnZXQgaXNIaWRk
ZW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNo
b3QuX25vZGVIaWRkZW5UeXBlOwpAQCAtNzY0LDEyICs3NTksMTIgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX25vZGVUeXBlT2Zmc2V0ID0g
bWV0YS5maWVsZHMuaW5kZXhPZigidHlwZSIpOwogICAgICAgICB0aGlzLl9ub2RlTmFtZU9mZnNl
dCA9IG1ldGEuZmllbGRzLmluZGV4T2YoIm5hbWUiKTsKICAgICAgICAgdGhpcy5fbm9kZUlkT2Zm
c2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigiaWQiKTsKLSAgICAgICAgdGhpcy5fbm9kZUluc3Rh
bmNlc0NvdW50T2Zmc2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OwogICAgICAgICB0aGlzLl9ub2Rl
U2VsZlNpemVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJzZWxmX3NpemUiKTsKICAgICAg
ICAgdGhpcy5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInJl
dGFpbmVkX3NpemUiKTsKICAgICAgICAgdGhpcy5fZG9taW5hdG9yT2Zmc2V0ID0gbWV0YS5maWVs
ZHMuaW5kZXhPZigiZG9taW5hdG9yIik7CiAgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQg
PSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIpOwogICAgICAgICB0aGlzLl9m
aXJzdEVkZ2VPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbiIpOworICAgICAg
ICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKICAgICAgICAg
dGhpcy5fbm9kZVR5cGVzID0gbWV0YS50eXBlc1t0aGlzLl9ub2RlVHlwZU9mZnNldF07CiAgICAg
ICAgIHRoaXMuX25vZGVIaWRkZW5UeXBlID0gdGhpcy5fbm9kZVR5cGVzLmluZGV4T2YoImhpZGRl
biIpOwogICAgICAgICB0aGlzLl9ub2RlT2JqZWN0VHlwZSA9IHRoaXMuX25vZGVUeXBlcy5pbmRl
eE9mKCJvYmplY3QiKTsKQEAgLTgwMyw2ICs3OTgsMTIxIEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRv
d0Rpc3RhbmNlKCk7CiAgICAgfSwKIAorICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEVzdGltYXRlIG51bWJlciBvZiBub2Rlcy4KKyAg
ICAgICAgdmFyIHRvdGFsRWRnZUNvdW50ID0gMDsKKyAgICAgICAgdmFyIG5vZGVDb3VudCA9IDA7
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gdGhpcy5fcm9vdE5vZGVJbmRleDsgaW5kZXggPCB0
aGlzLl9ub2Rlcy5sZW5ndGg7ICkgeworICAgICAgICAgICAgKytub2RlQ291bnQ7CisgICAgICAg
ICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW2luZGV4ICsgdGhpcy5fZWRnZXNDb3Vu
dE9mZnNldF07CisgICAgICAgICAgICB0b3RhbEVkZ2VDb3VudCArPSBlZGdlc0NvdW50OworICAg
ICAgICAgICAgaW5kZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZXNDb3VudCAqIHRo
aXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9vbmx5Tm9kZXMg
PSBuZXcgVWludDMyQXJyYXkoKG5vZGVDb3VudCArIDEpICogdGhpcy5fbm9kZUZpZWxkQ291bnQp
OworICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2RlcyA9IG5ldyBVaW50MzJBcnJheSh0b3RhbEVk
Z2VDb3VudCk7CisgICAgICAgIC8vIEluZGV4IG9mIHRoZSBmaXJzdCByZXRhaW5lciBpbiB0aGUg
X3JldGFpbmluZ05vZGVzIGFycmF5LiBBZGRyZXNzZWQgYnkgcmV0YWluZWQgbm9kZSBpbmRleC4K
KyAgICAgICAgdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVD
b3VudCk7CisgICAgICAgIHRoaXMuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcgVWludDMyQXJyYXko
dG90YWxFZGdlQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQpOworCisgICAgICAgIHRoaXMu
X2NyZWF0ZU9ubHlOb2Rlc0FycmF5KCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZUNvbnRhaW5tZW50
RWRnZXNBcnJheSgpOworICAgICAgICB0aGlzLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNBcnJheShu
b2RlQ291bnQpOworICAgICAgICB0aGlzLl9yZXN0b3JlTm9kZVR5cGVzKCk7CisgICAgfSwKKwor
ICAgIF9jcmVhdGVPbmx5Tm9kZXNBcnJheTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8g
Q29weSBub2RlcyB0byB0aGVpciBvd24gYXJyYXkuCisgICAgICAgIHZhciBkc3RJbmRleCA9IDA7
CisgICAgICAgIHZhciBzcmNJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdo
aWxlIChzcmNJbmRleCA8IHRoaXMuX25vZGVzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHNy
Y05vZGVUeXBlSW5kZXggPSBzcmNJbmRleCArIHRoaXMuX25vZGVUeXBlT2Zmc2V0OworICAgICAg
ICAgICAgdmFyIGN1cnJlbnREc3RJbmRleCA9IGRzdEluZGV4OworICAgICAgICAgICAgdmFyIGVk
Z2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRd
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub2RlRmllbGRDb3VudDsg
aSsrKQorICAgICAgICAgICAgICAgIHRoaXMuX29ubHlOb2Rlc1tkc3RJbmRleCsrXSA9IHRoaXMu
X25vZGVzW3NyY0luZGV4KytdOworICAgICAgICAgICAgLy8gV3JpdGUgbmV3IG5vZGUgaW5kZXgg
aW50byB0aGUgdHlwZSBmaWVsZC4KKyAgICAgICAgICAgIHRoaXMuX25vZGVzW3NyY05vZGVUeXBl
SW5kZXhdID0gY3VycmVudERzdEluZGV4OworICAgICAgICAgICAgc3JjSW5kZXggKz0gZWRnZXND
b3VudCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAgfQorICAgICAgICAvLyBUcmFu
c2xhdGUgZG9taW5hdG9yIGluZGV4ZXMuCisgICAgICAgIGZvciAodmFyIG5ld05vZGVJbmRleCA9
IDA7IG5ld05vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGg7IG5ld05vZGVJbmRleCAr
PSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4
ID0gdGhpcy5fb25seU5vZGVzW25ld05vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF0K
KyAgICAgICAgICAgIHZhciBuZXdEb21pbmF0b3JJbmRleCA9IHRoaXMuX25vZGVzW2RvbWluYXRv
ckluZGV4ICsgdGhpcy5fbm9kZVR5cGVPZmZzZXRdOworICAgICAgICAgICAgdGhpcy5fb25seU5v
ZGVzW25ld05vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF0gPSBuZXdEb21pbmF0b3JJ
bmRleDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfcmVzdG9yZU5vZGVUeXBlczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIHNyY0luZGV4ID0gdGhpcy5fcm9vdE5vZGVJbmRleDsK
KyAgICAgICAgd2hpbGUgKHNyY0luZGV4IDwgdGhpcy5fbm9kZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICB2YXIgc3JjTm9kZVR5cGVJbmRleCA9IHNyY0luZGV4ICsgdGhpcy5fbm9kZVR5cGVPZmZz
ZXQ7CisgICAgICAgICAgICB2YXIgbmV3Tm9kZUluZGV4ID0gdGhpcy5fbm9kZXNbc3JjTm9kZVR5
cGVJbmRleF07CisgICAgICAgICAgICB0aGlzLl9ub2Rlc1tzcmNOb2RlVHlwZUluZGV4XSA9IHRo
aXMuX29ubHlOb2Rlc1tuZXdOb2RlSW5kZXggKyB0aGlzLl9ub2RlVHlwZU9mZnNldF07CisgICAg
ICAgICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW3NyY0luZGV4ICsgdGhpcy5fZWRn
ZXNDb3VudE9mZnNldF07CisgICAgICAgICAgICBzcmNJbmRleCArPSB0aGlzLl9maXJzdEVkZ2VP
ZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICB9Cisg
ICAgfSwKKworICAgIF9jcmVhdGVSZXRhaW5tZW50RWRnZXNBcnJheTogZnVuY3Rpb24obm9kZUNv
dW50KQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgZWRnZURlc3RpbmF0aW9uSW5kZXggPSB0aGlz
Ll9lZGdlVG9Ob2RlT2Zmc2V0OyBlZGdlRGVzdGluYXRpb25JbmRleCA8IHRoaXMuX2NvbnRhaW5t
ZW50RWRnZXMubGVuZ3RoOyBlZGdlRGVzdGluYXRpb25JbmRleCArPSB0aGlzLl9lZGdlRmllbGRz
Q291bnQpCisgICAgICAgICAgICArK3RoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFtlZGdlRGVzdGlu
YXRpb25JbmRleF07CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBmaXJzdFVudXNlZFJldGFpbmVy
U2xvdCA9IDA7IGkgPCB0aGlzLl9maXJzdFJldGFpbmVySW5kZXgubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIHZhciByZXRhaW5lcnNDb3VudCA9IHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFtp
XTsKKyAgICAgICAgICAgIHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFtpXSA9IGZpcnN0VW51c2Vk
UmV0YWluZXJTbG90OworICAgICAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXNbZmlyc3RVbnVz
ZWRSZXRhaW5lclNsb3RdID0gcmV0YWluZXJzQ291bnQ7CisgICAgICAgICAgICBmaXJzdFVudXNl
ZFJldGFpbmVyU2xvdCArPSByZXRhaW5lcnNDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBzcmNOb2RlSW5kZXggPSAwOworICAgICAgICB2YXIgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleCA9
ICBzcmNOb2RlSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0OworICAgICAgICB3aGlsZSAo
c3JjTm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFy
IGZpcnN0RWRnZUluZGV4ID0gbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsKKyAgICAgICAgICAgIHZh
ciBuZXh0Tm9kZUluZGV4ID0gc3JjTm9kZUluZGV4ICsgdGhpcy5fbm9kZUZpZWxkQ291bnQ7Cisg
ICAgICAgICAgICB2YXIgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleCAgPSBuZXh0Tm9kZUluZGV4IDwg
dGhpcy5fb25seU5vZGVzLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gdGhpcy5fb25seU5vZGVzW25leHROb2RlSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50
T2Zmc2V0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5f
Y29udGFpbm1lbnRFZGdlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBlZGdlSW5kZXgg
PSBmaXJzdEVkZ2VJbmRleDsgZWRnZUluZGV4IDwgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsgZWRn
ZUluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgeworICAgICAgICAgICAgICAgIHZhciB0
b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgdGhpcy5fZWRn
ZVRvTm9kZU9mZnNldF07CisgICAgICAgICAgICAgICAgdmFyIGZpcnN0UmV0YWluZXJTbG90SW5k
ZXggPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXhdOworICAgICAgICAgICAg
ICAgIHZhciBuZXh0VW51c2VkUmV0YWluZXJTbG90SW5kZXggPSBmaXJzdFJldGFpbmVyU2xvdElu
ZGV4ICsgKC0tdGhpcy5fcmV0YWluaW5nTm9kZXNbZmlyc3RSZXRhaW5lclNsb3RJbmRleF0pOwor
ICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmluZ05vZGVzW25leHRVbnVzZWRSZXRhaW5lclNs
b3RJbmRleF0gPSBzcmNOb2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNO
b2RlSW5kZXggPSBuZXh0Tm9kZUluZGV4OworICAgICAgICB9CisgICAgfSwKKworICAgIF9jcmVh
dGVDb250YWlubWVudEVkZ2VzQXJyYXk6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIENv
cHkgZWRnZXMgdG8gdGhlaXIgb3duIGFycmF5LgorICAgICAgICB2YXIgZWRnZUFycmF5SW5kZXgg
PSAwOworICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAg
ICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZh
ciBzcmNOb2RlTmV3SW5kZXggPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCArIHRoaXMuX25vZGVUeXBl
T2Zmc2V0XTsKKyAgICAgICAgICAgIC8vIFNldCBpbmRleCBvZiBmaXJzdCBvdXRnb2luZyBlZ2Rl
IGluIHRoZSBfY29udGFpbm1lbnRFZGdlcyBhcnJheS4KKyAgICAgICAgICAgIHRoaXMuX29ubHlO
b2Rlc1tzcmNOb2RlTmV3SW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XSA9IGVkZ2VBcnJh
eUluZGV4OworCisgICAgICAgICAgICAvLyBOb3cgY29weSBhbGwgZWRnZSBpbmZvcm1hdGlvbi4K
KyAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlz
Ll9lZGdlc0NvdW50T2Zmc2V0XTsKKyAgICAgICAgICAgIHNyY0luZGV4ICs9IHRoaXMuX2ZpcnN0
RWRnZU9mZnNldDsKKyAgICAgICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gc3JjSW5kZXggKyBl
ZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICAgICAgd2hpbGUgKHNy
Y0luZGV4IDwgbmV4dE5vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5t
ZW50RWRnZXNbZWRnZUFycmF5SW5kZXhdID0gdGhpcy5fbm9kZXNbc3JjSW5kZXhdOworICAgICAg
ICAgICAgICAgIC8vIFRyYW5zbGF0ZSBkZXN0aW5hdGlvbiBub2RlIGluZGV4ZXMgZm9yIHRoZSBj
b3BpZWQgZWRnZXMuCisgICAgICAgICAgICAgICAgaWYgKGVkZ2VBcnJheUluZGV4ICUgdGhpcy5f
ZWRnZUZpZWxkc0NvdW50ID09PSB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBvbGREZXN0aW5hdGlvbk5vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50
RWRnZXNbZWRnZUFycmF5SW5kZXhdOworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RGVzdGlu
YXRpb25Ob2RlSW5kZXggPSB0aGlzLl9ub2Rlc1tvbGREZXN0aW5hdGlvbk5vZGVJbmRleCArIHRo
aXMuX25vZGVUeXBlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbm1l
bnRFZGdlc1tlZGdlQXJyYXlJbmRleF0gPSBuZXdEZXN0aW5hdGlvbk5vZGVJbmRleDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytlZGdlQXJyYXlJbmRleDsKKyAgICAgICAg
ICAgICAgICArK3NyY0luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwog
ICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rl
czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133748</attachid>
            <date>2012-03-26 01:38:18 -0700</date>
            <delta_ts>2012-03-26 03:05:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81930-20120326123816.patch</filename>
            <type>text/plain</type>
            <size>9269</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZkNTkzNWMwMGEzNjMw
NmYxMDlkMzg2Y2Y5Mjc1OTc4YmUxNGM1OS4uODJjMTZmY2Y5YjE0MDkwMDBlODI3MmE5ZjNjYzE2
ZjI3MjZlMDg2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IG5vZGVzIGFuZCBjb250YWlubWVudCBlZGdlcyBpbnRvIHR3byBkaWZmZXJlbnQg
YXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTkzMAorCisgICAgICAgIEV4dHJhY3QgaGVhcCBwcm9maWxlIG5vZGVzIGFuZCBlZGdlcyBpbnRv
IHR3byBzZXBhcmF0ZSBhcnJheXMuIFRoaXMKKyAgICAgICAgd2F5IHdlIHdpbGwgaGF2ZSBhIGNv
bnRpbnVvdXMgYXJyYXkgb2YgdGhlIGhlYXAgZ3JhcGggbm9kZXMgYW5kIGNhbgorICAgICAgICBh
dmlvZCBhZGRpdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBub2RlIGluZGV4IGFuZCBpdHMgcG9zaXRp
b24gaW4gdGhlCisgICAgICAgIGhlYXAgc25hcHNob3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9p
bml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWls
ZENvbnRpbnVvdXNOb2RlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dC5wcm90b3R5cGUuX2NyZWF0ZU9ubHlOb2Rlc0FycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9yZXN0b3JlTm9kZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNB
cnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY3Jl
YXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFdvcmtlcik6CisKIDIwMTItMDMtMjUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIERvbid0IHVzZSBDU1NSdWxlTGlzdCBmb3IgY2hpbGQgcnVsZSBvd25lcnNo
aXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3QuanMKaW5kZXggOWQ3ODQ5NzE0MGY4NzgxYjkxYzgzYjY3ZjNiZWY3ZjNmNTc1ZWJhYy4uMTgy
YzlmZGVlOWMyODk1NWM1MWRjZGFjNWNkNzNiMDQzYmExN2ZlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTYxMiwxMSAr
NjEyLDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUlkT2Zmc2V0XTsKICAgICB9LAogCi0gICAgZ2V0IGluc3RhbmNlc0NvdW50KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBz
aG90Ll9ub2RlSW5zdGFuY2VzQ291bnRPZmZzZXRdOwotICAgIH0sCi0KICAgICBnZXQgaXNIaWRk
ZW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNo
b3QuX25vZGVIaWRkZW5UeXBlOwpAQCAtNzY0LDEyICs3NTksMTIgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX25vZGVUeXBlT2Zmc2V0ID0g
bWV0YS5maWVsZHMuaW5kZXhPZigidHlwZSIpOwogICAgICAgICB0aGlzLl9ub2RlTmFtZU9mZnNl
dCA9IG1ldGEuZmllbGRzLmluZGV4T2YoIm5hbWUiKTsKICAgICAgICAgdGhpcy5fbm9kZUlkT2Zm
c2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigiaWQiKTsKLSAgICAgICAgdGhpcy5fbm9kZUluc3Rh
bmNlc0NvdW50T2Zmc2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OwogICAgICAgICB0aGlzLl9ub2Rl
U2VsZlNpemVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJzZWxmX3NpemUiKTsKICAgICAg
ICAgdGhpcy5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInJl
dGFpbmVkX3NpemUiKTsKICAgICAgICAgdGhpcy5fZG9taW5hdG9yT2Zmc2V0ID0gbWV0YS5maWVs
ZHMuaW5kZXhPZigiZG9taW5hdG9yIik7CiAgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQg
PSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIpOwogICAgICAgICB0aGlzLl9m
aXJzdEVkZ2VPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbiIpOworICAgICAg
ICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKICAgICAgICAg
dGhpcy5fbm9kZVR5cGVzID0gbWV0YS50eXBlc1t0aGlzLl9ub2RlVHlwZU9mZnNldF07CiAgICAg
ICAgIHRoaXMuX25vZGVIaWRkZW5UeXBlID0gdGhpcy5fbm9kZVR5cGVzLmluZGV4T2YoImhpZGRl
biIpOwogICAgICAgICB0aGlzLl9ub2RlT2JqZWN0VHlwZSA9IHRoaXMuX25vZGVUeXBlcy5pbmRl
eE9mKCJvYmplY3QiKTsKQEAgLTgwMyw2ICs3OTgsMTIwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRv
d0Rpc3RhbmNlKCk7CiAgICAgfSwKIAorICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEVzdGltYXRlIG51bWJlciBvZiBub2Rlcy4KKyAg
ICAgICAgdmFyIHRvdGFsRWRnZUNvdW50ID0gMDsKKyAgICAgICAgdmFyIHRvdGFsTm9kZUNvdW50
ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OyBpbmRl
eCA8IHRoaXMuX25vZGVzLmxlbmd0aDsgKSB7CisgICAgICAgICAgICArK3RvdGFsTm9kZUNvdW50
OworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpbmRleCArIHRoaXMu
X2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgdG90YWxFZGdlQ291bnQgKz0gZWRnZXND
b3VudDsKKyAgICAgICAgICAgIGluZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2Vz
Q291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
Y3JlYXRlT25seU5vZGVzQXJyYXkodG90YWxOb2RlQ291bnQpOworICAgICAgICB0aGlzLl9jcmVh
dGVDb250YWlubWVudEVkZ2VzQXJyYXkodG90YWxOb2RlQ291bnQpOworICAgICAgICB0aGlzLl9j
cmVhdGVSZXRhaW5tZW50RWRnZXNBcnJheSh0b3RhbEVkZ2VDb3VudCk7CisgICAgICAgIHRoaXMu
X3Jlc3RvcmVOb2RlVHlwZXMoKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU9ubHlOb2Rlc0FycmF5
OiBmdW5jdGlvbih0b3RhbE5vZGVDb3VudCkKKyAgICB7CisgICAgICAgIC8vIENvcHkgbm9kZXMg
dG8gdGhlaXIgb3duIGFycmF5LgorICAgICAgICB0aGlzLl9vbmx5Tm9kZXMgPSBuZXcgVWludDMy
QXJyYXkodG90YWxOb2RlQ291bnQgKiB0aGlzLl9ub2RlRmllbGRDb3VudCk7CisgICAgICAgIHZh
ciBkc3RJbmRleCA9IDA7CisgICAgICAgIHZhciBzcmNJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5k
ZXg7CisgICAgICAgIHdoaWxlIChzcmNJbmRleCA8IHRoaXMuX25vZGVzLmxlbmd0aCkgeworICAg
ICAgICAgICAgdmFyIHNyY05vZGVUeXBlSW5kZXggPSBzcmNJbmRleCArIHRoaXMuX25vZGVUeXBl
T2Zmc2V0OworICAgICAgICAgICAgdmFyIGN1cnJlbnREc3RJbmRleCA9IGRzdEluZGV4OworICAg
ICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCArIHRoaXMuX2Vk
Z2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9u
b2RlRmllbGRDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHRoaXMuX29ubHlOb2Rlc1tkc3RJ
bmRleCsrXSA9IHRoaXMuX25vZGVzW3NyY0luZGV4KytdOworICAgICAgICAgICAgLy8gV3JpdGUg
bmV3IG5vZGUgaW5kZXggaW50byB0aGUgdHlwZSBmaWVsZC4KKyAgICAgICAgICAgIHRoaXMuX25v
ZGVzW3NyY05vZGVUeXBlSW5kZXhdID0gY3VycmVudERzdEluZGV4OworICAgICAgICAgICAgc3Jj
SW5kZXggKz0gZWRnZXNDb3VudCAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAgfQor
ICAgICAgICAvLyBUcmFuc2xhdGUgZG9taW5hdG9yIGluZGV4ZXMuCisgICAgICAgIGZvciAodmFy
IGRvbWluYXRvclNsb3RJbmRleCA9IHRoaXMuX2RvbWluYXRvck9mZnNldDsgZG9taW5hdG9yU2xv
dEluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aDsgZG9taW5hdG9yU2xvdEluZGV4ICs9IHRo
aXMuX25vZGVGaWVsZENvdW50KSB7CisgICAgICAgICAgICB2YXIgZG9taW5hdG9ySW5kZXggPSB0
aGlzLl9vbmx5Tm9kZXNbZG9taW5hdG9yU2xvdEluZGV4XTsKKyAgICAgICAgICAgIHRoaXMuX29u
bHlOb2Rlc1tkb21pbmF0b3JTbG90SW5kZXhdID0gdGhpcy5fbm9kZXNbZG9taW5hdG9ySW5kZXgg
KyB0aGlzLl9ub2RlVHlwZU9mZnNldF07CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NyZWF0
ZUNvbnRhaW5tZW50RWRnZXNBcnJheTogZnVuY3Rpb24odG90YWxFZGdlQ291bnQpCisgICAgewor
ICAgICAgICAvLyBDb3B5IGVkZ2VzIHRvIHRoZWlyIG93biBhcnJheS4KKyAgICAgICAgdGhpcy5f
Y29udGFpbm1lbnRFZGdlcyA9IG5ldyBVaW50MzJBcnJheSh0b3RhbEVkZ2VDb3VudCAqIHRoaXMu
X2VkZ2VGaWVsZHNDb3VudCk7CisgICAgICAgIHZhciBlZGdlQXJyYXlJbmRleCA9IDA7CisgICAg
ICAgIHZhciBzcmNJbmRleCA9IHRoaXMuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgIHdoaWxlIChz
cmNJbmRleCA8IHRoaXMuX25vZGVzLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHNyY05vZGVO
ZXdJbmRleCA9IHRoaXMuX25vZGVzW3NyY0luZGV4ICsgdGhpcy5fbm9kZVR5cGVPZmZzZXRdOwor
ICAgICAgICAgICAgLy8gU2V0IGluZGV4IG9mIGZpcnN0IG91dGdvaW5nIGVnZGUgaW4gdGhlIF9j
b250YWlubWVudEVkZ2VzIGFycmF5LgorICAgICAgICAgICAgdGhpcy5fb25seU5vZGVzW3NyY05v
ZGVOZXdJbmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdID0gZWRnZUFycmF5SW5kZXg7CisK
KyAgICAgICAgICAgIC8vIE5vdyBjb3B5IGFsbCBlZGdlIGluZm9ybWF0aW9uLgorICAgICAgICAg
ICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdOworICAgICAgICAgICAgc3JjSW5kZXggKz0gdGhpcy5fZmlyc3RFZGdlT2Zmc2V0
OworICAgICAgICAgICAgdmFyIG5leHROb2RlSW5kZXggPSBzcmNJbmRleCArIGVkZ2VzQ291bnQg
KiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCBu
ZXh0Tm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbm1lbnRFZGdlc1tl
ZGdlQXJyYXlJbmRleF0gPSB0aGlzLl9ub2Rlc1tzcmNJbmRleF07CisgICAgICAgICAgICAgICAg
Ly8gVHJhbnNsYXRlIGRlc3RpbmF0aW9uIG5vZGUgaW5kZXhlcyBmb3IgdGhlIGNvcGllZCBlZGdl
cy4KKyAgICAgICAgICAgICAgICBpZiAoZWRnZUFycmF5SW5kZXggJSB0aGlzLl9lZGdlRmllbGRz
Q291bnQgPT09IHRoaXMuX2VkZ2VUb05vZGVPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG9sZERlc3RpbmF0aW9uTm9kZUluZGV4ID0gdGhpcy5fY29udGFpbm1lbnRFZGdlc1tlZGdl
QXJyYXlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdEZXN0aW5hdGlvbk5vZGVJ
bmRleCA9IHRoaXMuX25vZGVzW29sZERlc3RpbmF0aW9uTm9kZUluZGV4ICsgdGhpcy5fbm9kZVR5
cGVPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250YWlubWVudEVkZ2VzW2Vk
Z2VBcnJheUluZGV4XSA9IG5ld0Rlc3RpbmF0aW9uTm9kZUluZGV4OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICArK2VkZ2VBcnJheUluZGV4OworICAgICAgICAgICAgICAgICsr
c3JjSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NyZWF0
ZVJldGFpbm1lbnRFZGdlc0FycmF5OiBmdW5jdGlvbih0b3RhbEVkZ2VDb3VudCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3JldGFpbmluZ05vZGVzID0gbmV3IFVpbnQzMkFycmF5KHRvdGFsRWRnZUNv
dW50KTsKKyAgICAgICAgLy8gSW5kZXggb2YgdGhlIGZpcnN0IHJldGFpbmVyIGluIHRoZSBfcmV0
YWluaW5nTm9kZXMgYXJyYXkuIEFkZHJlc3NlZCBieSByZXRhaW5lZCBub2RlIGluZGV4LgorICAg
ICAgICB0aGlzLl9maXJzdFJldGFpbmVySW5kZXggPSBuZXcgVWludDMyQXJyYXkodG90YWxOb2Rl
Q291bnQpOworCisgICAgICAgIGZvciAodmFyIGVkZ2VEZXN0aW5hdGlvbkluZGV4ID0gdGhpcy5f
ZWRnZVRvTm9kZU9mZnNldDsgZWRnZURlc3RpbmF0aW9uSW5kZXggPCB0aGlzLl9jb250YWlubWVu
dEVkZ2VzLmxlbmd0aDsgZWRnZURlc3RpbmF0aW9uSW5kZXggKz0gdGhpcy5fZWRnZUZpZWxkc0Nv
dW50KQorICAgICAgICAgICAgKyt0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdGhpcy5fY29udGFp
bm1lbnRFZGdlc1tlZGdlRGVzdGluYXRpb25JbmRleF1dOworICAgICAgICBmb3IgKHZhciBpID0g
MCwgZmlyc3RVbnVzZWRSZXRhaW5lclNsb3QgPSAwOyBpIDwgdGhpcy5fZmlyc3RSZXRhaW5lcklu
ZGV4Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgcmV0YWluZXJzQ291bnQgPSB0aGlz
Ll9maXJzdFJldGFpbmVySW5kZXhbaV07CisgICAgICAgICAgICB0aGlzLl9maXJzdFJldGFpbmVy
SW5kZXhbaV0gPSBmaXJzdFVudXNlZFJldGFpbmVyU2xvdDsKKyAgICAgICAgICAgIHRoaXMuX3Jl
dGFpbmluZ05vZGVzW2ZpcnN0VW51c2VkUmV0YWluZXJTbG90XSA9IHJldGFpbmVyc0NvdW50Owor
ICAgICAgICAgICAgZmlyc3RVbnVzZWRSZXRhaW5lclNsb3QgKz0gcmV0YWluZXJzQ291bnQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgc3JjTm9kZUluZGV4ID0gMDsKKyAgICAgICAgdmFyIG5l
eHROb2RlRmlyc3RFZGdlSW5kZXggPSB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0OworICAgICAgICB3
aGlsZSAoc3JjTm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aCkgeworICAgICAgICAg
ICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsKKyAgICAgICAg
ICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gc3JjTm9kZUluZGV4ICsgdGhpcy5fbm9kZUZpZWxkQ291
bnQ7CisgICAgICAgICAgICB2YXIgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleCA9IG5leHROb2RlSW5k
ZXggPCB0aGlzLl9vbmx5Tm9kZXMubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IHRoaXMuX29ubHlOb2Rlc1tuZXh0Tm9kZUluZGV4ICsgdGhpcy5fZWRnZXND
b3VudE9mZnNldF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhp
cy5fY29udGFpbm1lbnRFZGdlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBlZGdlSW5k
ZXggPSBmaXJzdEVkZ2VJbmRleDsgZWRnZUluZGV4IDwgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsg
ZWRnZUluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgeworICAgICAgICAgICAgICAgIHZh
ciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgdGhpcy5f
ZWRnZVRvTm9kZU9mZnNldF07CisgICAgICAgICAgICAgICAgdmFyIGZpcnN0UmV0YWluZXJTbG90
SW5kZXggPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXhdOworICAgICAgICAg
ICAgICAgIHZhciBuZXh0VW51c2VkUmV0YWluZXJTbG90SW5kZXggPSBmaXJzdFJldGFpbmVyU2xv
dEluZGV4ICsgKC0tdGhpcy5fcmV0YWluaW5nTm9kZXNbZmlyc3RSZXRhaW5lclNsb3RJbmRleF0p
OworICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmluZ05vZGVzW25leHRVbnVzZWRSZXRhaW5l
clNsb3RJbmRleF0gPSBzcmNOb2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
cmNOb2RlSW5kZXggPSBuZXh0Tm9kZUluZGV4OworICAgICAgICB9CisgICAgfSwKKworICAgIF9y
ZXN0b3JlTm9kZVR5cGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc3JjSW5kZXgg
PSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9u
b2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBzcmNOb2RlVHlwZUluZGV4ID0gc3JjSW5k
ZXggKyB0aGlzLl9ub2RlVHlwZU9mZnNldDsKKyAgICAgICAgICAgIHZhciBuZXdOb2RlSW5kZXgg
PSB0aGlzLl9ub2Rlc1tzcmNOb2RlVHlwZUluZGV4XTsKKyAgICAgICAgICAgIHRoaXMuX25vZGVz
W3NyY05vZGVUeXBlSW5kZXhdID0gdGhpcy5fb25seU5vZGVzW25ld05vZGVJbmRleCArIHRoaXMu
X25vZGVUeXBlT2Zmc2V0XTsKKyAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9k
ZXNbc3JjSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XTsKKyAgICAgICAgICAgIHNyY0lu
ZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmll
bGRzQ291bnQ7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgZGlzcG9zZTogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133759</attachid>
            <date>2012-03-26 03:05:17 -0700</date>
            <delta_ts>2012-03-26 03:13:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81930-20120326140516.patch</filename>
            <type>text/plain</type>
            <size>9210</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ3MWEzYWM5Yzk5Y2M5
ZGRjODc3ZTExMmM1OTM0NGE5NThhMDdlMC4uMTI5MmJiMWQwYTcxNjRmZDhkYWYzN2FkZDkzNTQ1
MThhMTg2ZjFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIyICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNwbGl0IG5vZGVzIGFuZCBjb250YWlubWVudCBlZGdlcyBpbnRvIHR3byBkaWZmZXJlbnQg
YXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTkzMAorCisgICAgICAgIEV4dHJhY3QgaGVhcCBwcm9maWxlIG5vZGVzIGFuZCBlZGdlcyBpbnRv
IHR3byBzZXBhcmF0ZSBhcnJheXMuIFRoaXMKKyAgICAgICAgd2F5IHdlIHdpbGwgaGF2ZSBhIGNv
bnRpbnVvdXMgYXJyYXkgb2YgdGhlIGhlYXAgZ3JhcGggbm9kZXMgYW5kIGNhbgorICAgICAgICBh
dmlvZCBhZGRpdGlvbmFsIG1hcHBpbmcgYmV0d2VlbiBub2RlIGluZGV4IGFuZCBpdHMgcG9zaXRp
b24gaW4gdGhlCisgICAgICAgIGhlYXAgc25hcHNob3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9p
bml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWls
ZENvbnRpbnVvdXNOb2RlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dC5wcm90b3R5cGUuX2NyZWF0ZU9ubHlOb2Rlc0FycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9yZXN0b3JlTm9kZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNB
cnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY3Jl
YXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFdvcmtlcik6CisKIDIwMTItMDMtMjYgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcGxhY2UgaW5kZXhPZignYSB0ZXh0
JykgPT09IDAgd2l0aCBSZWdFeHAgYmVjYXVzZSBpdCBpcyBtdWNoIGZhc3Rlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKaW5kZXgg
YjM4YjhhOGI5N2IxMTAwNTViZDY2OTRhYzgxM2M5MWJiOTdmZjU4ZS4uOTFhZWMxNWU1N2VhNjNl
NjE0Njg0ZWVhMDMyZmIyY2MwODFkOTBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTYxMiwxMSArNjEyLDYgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
dGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9kZUlkT2Zmc2V0
XTsKICAgICB9LAogCi0gICAgZ2V0IGluc3RhbmNlc0NvdW50KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9ub2Rlc1t0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSW5z
dGFuY2VzQ291bnRPZmZzZXRdOwotICAgIH0sCi0KICAgICBnZXQgaXNIaWRkZW4oKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRk
ZW5UeXBlOwpAQCAtNzY2LDEyICs3NjEsMTIgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX25vZGVUeXBlT2Zmc2V0ID0gbWV0YS5maWVsZHMu
aW5kZXhPZigidHlwZSIpOwogICAgICAgICB0aGlzLl9ub2RlTmFtZU9mZnNldCA9IG1ldGEuZmll
bGRzLmluZGV4T2YoIm5hbWUiKTsKICAgICAgICAgdGhpcy5fbm9kZUlkT2Zmc2V0ID0gbWV0YS5m
aWVsZHMuaW5kZXhPZigiaWQiKTsKLSAgICAgICAgdGhpcy5fbm9kZUluc3RhbmNlc0NvdW50T2Zm
c2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OwogICAgICAgICB0aGlzLl9ub2RlU2VsZlNpemVPZmZz
ZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJzZWxmX3NpemUiKTsKICAgICAgICAgdGhpcy5fbm9k
ZVJldGFpbmVkU2l6ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInJldGFpbmVkX3NpemUi
KTsKICAgICAgICAgdGhpcy5fZG9taW5hdG9yT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigi
ZG9taW5hdG9yIik7CiAgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQgPSBtZXRhLmZpZWxk
cy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIpOwogICAgICAgICB0aGlzLl9maXJzdEVkZ2VPZmZz
ZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbiIpOworICAgICAgICB0aGlzLl9ub2Rl
RmllbGRDb3VudCA9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldDsKICAgICAgICAgdGhpcy5fbm9kZVR5
cGVzID0gbWV0YS50eXBlc1t0aGlzLl9ub2RlVHlwZU9mZnNldF07CiAgICAgICAgIHRoaXMuX25v
ZGVIaWRkZW5UeXBlID0gdGhpcy5fbm9kZVR5cGVzLmluZGV4T2YoImhpZGRlbiIpOwogICAgICAg
ICB0aGlzLl9ub2RlT2JqZWN0VHlwZSA9IHRoaXMuX25vZGVUeXBlcy5pbmRleE9mKCJvYmplY3Qi
KTsKQEAgLTgwNSw2ICs4MDAsMTE5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRvd0Rpc3RhbmNlKCk7
CiAgICAgfSwKIAorICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIC8vIEVzdGltYXRlIG51bWJlciBvZiBub2Rlcy4KKyAgICAgICAgdmFyIHRv
dGFsRWRnZUNvdW50ID0gMDsKKyAgICAgICAgdmFyIHRvdGFsTm9kZUNvdW50ID0gMDsKKyAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OyBpbmRleCA8IHRoaXMuX25v
ZGVzLmxlbmd0aDsgKSB7CisgICAgICAgICAgICArK3RvdGFsTm9kZUNvdW50OworICAgICAgICAg
ICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpbmRleCArIHRoaXMuX2VkZ2VzQ291bnRP
ZmZzZXRdOworICAgICAgICAgICAgdG90YWxFZGdlQ291bnQgKz0gZWRnZXNDb3VudDsKKyAgICAg
ICAgICAgIGluZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291bnQgKiB0aGlz
Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3JlYXRlT25seU5v
ZGVzQXJyYXkodG90YWxOb2RlQ291bnQpOworICAgICAgICB0aGlzLl9jcmVhdGVDb250YWlubWVu
dEVkZ2VzQXJyYXkodG90YWxFZGdlQ291bnQpOworICAgICAgICB0aGlzLl9jcmVhdGVSZXRhaW5t
ZW50RWRnZXNBcnJheSh0b3RhbE5vZGVDb3VudCwgdG90YWxFZGdlQ291bnQpOworICAgICAgICB0
aGlzLl9yZXN0b3JlTm9kZVR5cGVzKCk7CisgICAgfSwKKworICAgIF9jcmVhdGVPbmx5Tm9kZXNB
cnJheTogZnVuY3Rpb24odG90YWxOb2RlQ291bnQpCisgICAgeworICAgICAgICAvLyBDb3B5IG5v
ZGVzIHRvIHRoZWlyIG93biBhcnJheS4KKyAgICAgICAgdGhpcy5fb25seU5vZGVzID0gbmV3IFVp
bnQzMkFycmF5KHRvdGFsTm9kZUNvdW50ICogdGhpcy5fbm9kZUZpZWxkQ291bnQpOworICAgICAg
ICB2YXIgZHN0SW5kZXggPSAwOworICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9k
ZUluZGV4OworICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIHZhciBzcmNOb2RlVHlwZUluZGV4ID0gc3JjSW5kZXggKyB0aGlzLl9ub2Rl
VHlwZU9mZnNldDsKKyAgICAgICAgICAgIHZhciBjdXJyZW50RHN0SW5kZXggPSBkc3RJbmRleDsK
KyAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlz
Ll9lZGdlc0NvdW50T2Zmc2V0XTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5fbm9kZUZpZWxkQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICB0aGlzLl9vbmx5Tm9kZXNb
ZHN0SW5kZXgrK10gPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCsrXTsKKyAgICAgICAgICAgIC8vIFdy
aXRlIG5ldyBub2RlIGluZGV4IGludG8gdGhlIHR5cGUgZmllbGQuCisgICAgICAgICAgICB0aGlz
Ll9ub2Rlc1tzcmNOb2RlVHlwZUluZGV4XSA9IGN1cnJlbnREc3RJbmRleDsKKyAgICAgICAgICAg
IHNyY0luZGV4ICs9IGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAg
IH0KKyAgICAgICAgLy8gVHJhbnNsYXRlIGRvbWluYXRvciBpbmRleGVzLgorICAgICAgICBmb3Ig
KHZhciBkb21pbmF0b3JTbG90SW5kZXggPSB0aGlzLl9kb21pbmF0b3JPZmZzZXQ7IGRvbWluYXRv
clNsb3RJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGg7IGRvbWluYXRvclNsb3RJbmRleCAr
PSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4
ID0gdGhpcy5fb25seU5vZGVzW2RvbWluYXRvclNsb3RJbmRleF07CisgICAgICAgICAgICB0aGlz
Ll9vbmx5Tm9kZXNbZG9taW5hdG9yU2xvdEluZGV4XSA9IHRoaXMuX25vZGVzW2RvbWluYXRvcklu
ZGV4ICsgdGhpcy5fbm9kZVR5cGVPZmZzZXRdOworICAgICAgICB9CisgICAgfSwKKworICAgIF9j
cmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXk6IGZ1bmN0aW9uKHRvdGFsRWRnZUNvdW50KQorICAg
IHsKKyAgICAgICAgLy8gQ29weSBlZGdlcyB0byB0aGVpciBvd24gYXJyYXkuCisgICAgICAgIHRo
aXMuX2NvbnRhaW5tZW50RWRnZXMgPSBuZXcgVWludDMyQXJyYXkodG90YWxFZGdlQ291bnQgKiB0
aGlzLl9lZGdlRmllbGRzQ291bnQpOworICAgICAgICB2YXIgZWRnZUFycmF5SW5kZXggPSAwOwor
ICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OworICAgICAgICB3aGls
ZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBzcmNO
b2RlTmV3SW5kZXggPSB0aGlzLl9ub2Rlc1tzcmNJbmRleCArIHRoaXMuX25vZGVUeXBlT2Zmc2V0
XTsKKyAgICAgICAgICAgIC8vIFNldCBpbmRleCBvZiBmaXJzdCBvdXRnb2luZyBlZ2RlIGluIHRo
ZSBfY29udGFpbm1lbnRFZGdlcyBhcnJheS4KKyAgICAgICAgICAgIHRoaXMuX29ubHlOb2Rlc1tz
cmNOb2RlTmV3SW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XSA9IGVkZ2VBcnJheUluZGV4
OworCisgICAgICAgICAgICAvLyBOb3cgY29weSBhbGwgZWRnZSBpbmZvcm1hdGlvbi4KKyAgICAg
ICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlzLl9lZGdl
c0NvdW50T2Zmc2V0XTsKKyAgICAgICAgICAgIHNyY0luZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9m
ZnNldDsKKyAgICAgICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gc3JjSW5kZXggKyBlZGdlc0Nv
dW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICAgICAgd2hpbGUgKHNyY0luZGV4
IDwgbmV4dE5vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5tZW50RWRn
ZXNbZWRnZUFycmF5SW5kZXhdID0gdGhpcy5fbm9kZXNbc3JjSW5kZXhdOworICAgICAgICAgICAg
ICAgIC8vIFRyYW5zbGF0ZSBkZXN0aW5hdGlvbiBub2RlIGluZGV4ZXMgZm9yIHRoZSBjb3BpZWQg
ZWRnZXMuCisgICAgICAgICAgICAgICAgaWYgKGVkZ2VBcnJheUluZGV4ICUgdGhpcy5fZWRnZUZp
ZWxkc0NvdW50ID09PSB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZUFycmF5SW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250YWlubWVudEVkZ2VzW2VkZ2VBcnJh
eUluZGV4XSA9IHRoaXMuX25vZGVzW3RvTm9kZUluZGV4ICsgdGhpcy5fbm9kZVR5cGVPZmZzZXRd
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2VkZ2VBcnJheUluZGV4Owor
ICAgICAgICAgICAgICAgICsrc3JjSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgX2NyZWF0ZVJldGFpbm1lbnRFZGdlc0FycmF5OiBmdW5jdGlvbih0b3RhbE5v
ZGVDb3VudCwgdG90YWxFZGdlQ291bnQpCisgICAgeworICAgICAgICB0aGlzLl9yZXRhaW5pbmdO
b2RlcyA9IG5ldyBVaW50MzJBcnJheSh0b3RhbEVkZ2VDb3VudCk7CisgICAgICAgIC8vIEluZGV4
IG9mIHRoZSBmaXJzdCByZXRhaW5lciBpbiB0aGUgX3JldGFpbmluZ05vZGVzIGFycmF5LiBBZGRy
ZXNzZWQgYnkgcmV0YWluZWQgbm9kZSBpbmRleC4KKyAgICAgICAgdGhpcy5fZmlyc3RSZXRhaW5l
ckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KHRvdGFsTm9kZUNvdW50KTsKKworICAgICAgICBmb3Ig
KHZhciB0b05vZGVJbmRleCA9IHRoaXMuX2VkZ2VUb05vZGVPZmZzZXQ7IHRvTm9kZUluZGV4IDwg
dGhpcy5fY29udGFpbm1lbnRFZGdlcy5sZW5ndGg7IHRvTm9kZUluZGV4ICs9IHRoaXMuX2VkZ2VG
aWVsZHNDb3VudCkKKyAgICAgICAgICAgICsrdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4W3RoaXMu
X2NvbnRhaW5tZW50RWRnZXNbdG9Ob2RlSW5kZXhdXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGZpcnN0VW51c2VkUmV0YWluZXJTbG90ID0gMDsgaSA8IHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRl
eC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHJldGFpbmVyc0NvdW50ID0gdGhpcy5f
Zmlyc3RSZXRhaW5lckluZGV4W2ldOworICAgICAgICAgICAgdGhpcy5fZmlyc3RSZXRhaW5lcklu
ZGV4W2ldID0gZmlyc3RVbnVzZWRSZXRhaW5lclNsb3Q7CisgICAgICAgICAgICB0aGlzLl9yZXRh
aW5pbmdOb2Rlc1tmaXJzdFVudXNlZFJldGFpbmVyU2xvdF0gPSByZXRhaW5lcnNDb3VudDsKKyAg
ICAgICAgICAgIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ICs9IHJldGFpbmVyc0NvdW50OworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHNyY05vZGVJbmRleCA9IDA7CisgICAgICAgIHZhciBuZXh0
Tm9kZUZpcnN0RWRnZUluZGV4ID0gdGhpcy5fZWRnZXNDb3VudE9mZnNldDsKKyAgICAgICAgd2hp
bGUgKHNyY05vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHZhciBmaXJzdEVkZ2VJbmRleCA9IG5leHROb2RlRmlyc3RFZGdlSW5kZXg7CisgICAgICAgICAg
ICB2YXIgbmV4dE5vZGVJbmRleCA9IHNyY05vZGVJbmRleCArIHRoaXMuX25vZGVGaWVsZENvdW50
OworICAgICAgICAgICAgdmFyIG5leHROb2RlRmlyc3RFZGdlSW5kZXggPSBuZXh0Tm9kZUluZGV4
IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyB0aGlzLl9vbmx5Tm9kZXNbbmV4dE5vZGVJbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMu
X2NvbnRhaW5tZW50RWRnZXMubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgZWRnZUluZGV4
ID0gZmlyc3RFZGdlSW5kZXg7IGVkZ2VJbmRleCA8IG5leHROb2RlRmlyc3RFZGdlSW5kZXg7IGVk
Z2VJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQpIHsKKyAgICAgICAgICAgICAgICB2YXIg
dG9Ob2RlSW5kZXggPSB0aGlzLl9jb250YWlubWVudEVkZ2VzW2VkZ2VJbmRleCArIHRoaXMuX2Vk
Z2VUb05vZGVPZmZzZXRdOworICAgICAgICAgICAgICAgIHZhciBmaXJzdFJldGFpbmVyU2xvdElu
ZGV4ID0gdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4W3RvTm9kZUluZGV4XTsKKyAgICAgICAgICAg
ICAgICB2YXIgbmV4dFVudXNlZFJldGFpbmVyU2xvdEluZGV4ID0gZmlyc3RSZXRhaW5lclNsb3RJ
bmRleCArICgtLXRoaXMuX3JldGFpbmluZ05vZGVzW2ZpcnN0UmV0YWluZXJTbG90SW5kZXhdKTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2Rlc1tuZXh0VW51c2VkUmV0YWluZXJT
bG90SW5kZXhdID0gc3JjTm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Jj
Tm9kZUluZGV4ID0gbmV4dE5vZGVJbmRleDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfcmVz
dG9yZU5vZGVUeXBlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNyY0luZGV4ID0g
dGhpcy5fcm9vdE5vZGVJbmRleDsKKyAgICAgICAgd2hpbGUgKHNyY0luZGV4IDwgdGhpcy5fbm9k
ZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgc3JjTm9kZVR5cGVJbmRleCA9IHNyY0luZGV4
ICsgdGhpcy5fbm9kZVR5cGVPZmZzZXQ7CisgICAgICAgICAgICB2YXIgbmV3Tm9kZUluZGV4ID0g
dGhpcy5fbm9kZXNbc3JjTm9kZVR5cGVJbmRleF07CisgICAgICAgICAgICB0aGlzLl9ub2Rlc1tz
cmNOb2RlVHlwZUluZGV4XSA9IHRoaXMuX29ubHlOb2Rlc1tuZXdOb2RlSW5kZXggKyB0aGlzLl9u
b2RlVHlwZU9mZnNldF07CisgICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVz
W3NyY0luZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07CisgICAgICAgICAgICBzcmNJbmRl
eCArPSB0aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxk
c0NvdW50OworICAgICAgICB9CisgICAgfSwKKwogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlczsK
</data>
<flag name="review"
          id="137840"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>