<?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>31253</bug_id>
          
          <creation_ts>2009-11-09 05:15:54 -0800</creation_ts>
          <short_desc>Unbounded memory growth when adding and removing images</short_desc>
          <delta_ts>2026-03-03 12:31:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Flament David">flament.david</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>avner.moshkovitz</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>chenzx</cc>
    
    <cc>jschoi</cc>
    
    <cc>kevin.gadd+bugzilla</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>maryannearvizovou14</cc>
    
    <cc>mihnea</cc>
    
    <cc>nham</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pierre.fritsch.work</cc>
    
    <cc>rreno</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>thomas</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zcrendel</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161546</commentid>
    <comment_count>0</comment_count>
      <attachid>42748</attachid>
    <who name="Flament David">flament.david</who>
    <bug_when>2009-11-09 05:15:54 -0800</bug_when>
    <thetext>Created attachment 42748
bug_memoryLeak.html

Hi,

I use a test page that will continuously consume memory until there&apos;s no free memory.
I looked into the test page&apos;s source, the javascript code is doing such a process:

1) create an image with &quot;new Image()&quot;;
2) set the image.src to one of the 12 test pictures;
3) append the image to document container;
4) continue the loop from 1)

This piece of test code consume more and more memory until there&apos;s no free memory.
So, I think, Garbage collector management failed.

Have you an idea ? Bug already exist ?
Exemple of page using in attachement.

Thank&apos;s for your help ...

Thank</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161690</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-09 11:59:30 -0800</bug_when>
    <thetext>I do see unbounded memory growth, and the memory isn&apos;t released even after closing the page.

Tested with a local debug build of r50532 on Mac OS X 10.5.8 (so, it&apos;s cross-platform).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161974</commentid>
    <comment_count>2</comment_count>
      <attachid>42748</attachid>
    <who name="Flament David">flament.david</who>
    <bug_when>2009-11-10 00:31:36 -0800</bug_when>
    <thetext>Comment on attachment 42748
bug_memoryLeak.html

&lt;html&gt;
  &lt;head&gt;

   &lt;script language=&quot;javascript&quot;&gt;

      var containerNode, compteur=0, lastImg, timer, dist=45, number=0;

      function init(){
	var img = new Image();
	img.src = &quot;./resources/&quot;+compteur+&quot;.jpg&quot;;
	lastImg = img;
	containerNode = document.getElementById(&quot;imgContainer&quot;);
	containerNode.appendChild(img);
      }

      function start_loop(){
	  timer = window.setInterval(function(){
	    rLaunch();
	  },1);
      }

      function stop_loop(){
	  clearInterval(timer);
      }

      function rLaunch(){
	document.getElementById(&quot;imgContainer&quot;).innerHTML = &quot;&quot;;
	lastImg=null;
	dist = dist+1;
	number = number+1;
	var img = new Image();
	compteur = (compteur==12) ? 0 : compteur+1; 
	img.src = &quot;./resources/&quot;+compteur+&quot;.jpg?dist=&quot;+dist;
	lastImg = img;
	
	containerNode.appendChild(img);
	document.getElementById(&quot;textContainer&quot;).innerHTML = &quot;Images loaded : &quot;+ number;
     }

    function clean(){
      document.getElementById(&quot;imgContainer&quot;).innerHTML = &quot;&quot;;
      number = 0;
      clearInterval(timer);
	  
	  // add by DFL
	while(containerNode.hasChildNodes()) {
	containerNode.removeChild(containerNode.lastChild) ;
	}
	
	 // Remove element nodes and prevent memory leaks
	 jQuery(this).children().remove();
	 // Remove any remaining nodes
	 while (this.firstChild)
	 this.removeChild(this.firstChild);	
	 
	 containerNode.clear();
	 containerNode.empty();	  
	  
     }

  &lt;/script&gt;

  &lt;style type=&quot;text/css&quot;&gt;

    img{
      left:45px;
      top:45px;
      position:absolute;
    }

    .opacity img{
	opacity:0.5;
     }

    div.controls{
      position:absolute;
      bottom:20px;
      left:45px;

    }

    div.textContainer{
      position:absolute;
      top: 150px;
      left: 400px;
    }


  &lt;/style&gt;


  &lt;/head&gt;
  &lt;body onload=&quot;init()&quot;&gt;
    &lt;div id=&quot;controls&quot; class=&quot;controls&quot;&gt;
	&lt;a href=&quot;#&quot; onclick=&quot;javascript:start_loop()&quot;&gt;Start_loop&lt;/a&gt;
	&lt;a href=&quot;#&quot; onclick=&quot;javascript:stop_loop()&quot;&gt;Stop_loop&lt;/a&gt;
    &lt;/div&gt;
    &lt;div id=&quot;imgContainer&quot;&gt;&lt;/div&gt;
    &lt;div id=&quot;textContainer&quot; class=&quot;textContainer&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248167</commentid>
    <comment_count>3</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2010-07-08 06:33:00 -0700</bug_when>
    <thetext>Hi,

I have seen the same behavior while trying to add/remove several images into DOM tree. After some time spent in debugging, i have noticed that DocLoader is keeping references to CachedResources in its member m_documentResources. The type of m_documentResources is typedef HashMap&lt;String, CachedResourceHandle&lt;CachedResource&gt; &gt; and it was introduced with changelists 39725 and 39304(bug 17998). When an image is removed from DOM, DocLoader is still keeping a reference to it even when the resource is purged from cache. It is true that when DocLoader is destroyed, the CachedResources from m_documentResources are removed since their reference count is dropping to 0.

Using a similar test as the one already posted in the bug (adding/removing a lot of images) both WebKit nightly and Safari 5 have their memory grow to 1GB on Mac/Win after 1 day of running. Chrome does not have this problem, Firefox 3.6.6 does not have this problem, IE 8 also does not have this problem.

I was wondering if the DocLoader still keeping a reference to all CachedResources could be the cause for this memory growth. I was experimenting a small patch with DocLoader keeping a weak reference to its CachedResources, so that these resources get the chance to be deleted when they are removed from cache. 

I also saw that there is another bug logged to an issue that may be related to this one: https://bugs.webkit.org/show_bug.cgi?id=23372 Repeatedly overwriting img.src can cause memory exhaustion.

Could someone comment on this?

Regards,
Mihnea Ovidenie</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248213</commentid>
    <comment_count>4</comment_count>
      <attachid>60885</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2010-07-08 08:16:50 -0700</bug_when>
    <thetext>Created attachment 60885
Simple patch, possible solution to improve memory consumption

Here is a simple patch that implements the idea of DocLoader keeping a weak reference to its CachedResources. When this resources are removed from cache, they are also deleted since DocLoader will not keep a reference to them. Taking into account the complexity of such issue, it would be great if somebody with expertise could take a look and share an opinion about this patch.

Regards,
Mihnea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248301</commentid>
    <comment_count>5</comment_count>
      <attachid>60885</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-08 10:20:18 -0700</bug_when>
    <thetext>Comment on attachment 60885
Simple patch, possible solution to improve memory consumption

I didn&apos;t look at the patch, but I assume that it implements what the above comment describes.

The reason for m_documentResources existence is so that we could provide a list of resources to clients via -[WebDataSource subresources], store them in Web archives, and show them in Web Inspector. Thus, removing items just because the resource data is no longer cached is inappropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248761</commentid>
    <comment_count>6</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2010-07-08 23:22:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 60885 [details])
&gt; I didn&apos;t look at the patch, but I assume that it implements what the above comment describes.
&gt; 
&gt; The reason for m_documentResources existence is so that we could provide a list of resources to clients via -[WebDataSource subresources], store them in Web archives, and show them in Web Inspector. Thus, removing items just because the resource data is no longer cached is inappropriate.

Thanks a lot for your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308228</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-11 15:48:07 -0800</bug_when>
    <thetext>See also: bug 39628.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323520</commentid>
    <comment_count>8</comment_count>
    <who name="Kevin Gadd">kevin.gadd+bugzilla</who>
    <bug_when>2010-12-16 16:57:36 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 60885 [details])
&gt; I didn&apos;t look at the patch, but I assume that it implements what the above comment describes.
&gt; 
&gt; The reason for m_documentResources existence is so that we could provide a list of resources to clients via -[WebDataSource subresources], store them in Web archives, and show them in Web Inspector. Thus, removing items just because the resource data is no longer cached is inappropriate.

I have recently discovered that this bug makes an application I&apos;m building unusable on any modern WebKit-based browser, as it exhausts available memory within minutes. I&apos;ve yet to find a workaround, so I decided to come see if perhaps I could at least submit a patch that fixes the bug and hope that it makes its way to devices like the iPhone in a reasonable amount of time.

Am I interpreting your statement correctly that you believe that this memory leak is intended behavior and should be preserved simply to keep Web Inspector&apos;s current behavior? I understand the desire to have web inspector offer a list of all resources ever loaded by a page, but doing it in this way breaks a large set of web development use cases. This seems an extreme cost to pay merely to get a feature of questionable value within Web Inspector. At the very least, this unbounded memory consumption should only be triggered when resource tracking has been explicitly requested by the user.

Is there a way that this bug can be fixed and still meet your functionality requirements for Web Inspector? If you can describe the requirements for an acceptable fix, I can attempt to create that fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323538</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-16 17:37:00 -0800</bug_when>
    <thetext>Note that Web Inspector was not the only client that I mentioned as needing access to document resources. Anyway, I don&apos;t think that anyone will argue that secondary functionality (like Activity window or web archives) should prevent web content from working.

It may be just fine to remove resources from m_documentResources when all elements using them are known to have been removed from the document, and won&apos;t come back from a detached tree. It&apos;s not very easy though, as external resources can also be referenced by style rules, so counting only elements isn&apos;t sufficient.

There is some surprising code in CachedResourceLoader today. The attached patch implies that CachedResourceLoader holds a strong reference to document resources - but why does this class have a removeCachedResource() method called from CachedResource destructor then?

It&apos;s not obvious that all bugs with memory growth when adding and removing images are the same internally. There may be loader problems, but there may also be JavaScript garbage collection problems. Unless you&apos;re 100% sure that you are seeing an identical issue, it may be best to file a separate bug - even if it&apos;s found to be a duplicate later, that&apos;s much better than discussing two issues in one bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917424</commentid>
    <comment_count>10</comment_count>
    <who name="Chen Zhixiang">chenzx</who>
    <bug_when>2013-08-14 22:43:20 -0700</bug_when>
    <thetext>The patch doesn&apos;t work for our WinCE port which is based on a 2012/8 nearby WebKit.

Test code doesn&apos;t add/remove &lt;img&gt; nodes, but just keep changing &lt;img&gt;&apos;s src attribute to load different images.

The debug output says: &quot;LEAK: 85 CachedResource&quot;, which is the all image resources.

Also, the newest Chrome 28 and Firefox 23 also both have this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917436</commentid>
    <comment_count>11</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-08-14 23:39:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; The patch doesn&apos;t work for our WinCE port which is based on a 2012/8 nearby WebKit.
&gt; 
&gt; Test code doesn&apos;t add/remove &lt;img&gt; nodes, but just keep changing &lt;img&gt;&apos;s src attribute to load different images.
&gt; 
&gt; The debug output says: &quot;LEAK: 85 CachedResource&quot;, which is the all image resources.
&gt; 
&gt; Also, the newest Chrome 28 and Firefox 23 also both have this problem.

Well, you can always propose a new patch/approach if the problem still persist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969691</commentid>
    <comment_count>12</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2014-01-19 21:45:53 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; The patch doesn&apos;t work for our WinCE port which is based on a 2012/8 nearby WebKit.
&gt; &gt; 
&gt; &gt; Test code doesn&apos;t add/remove &lt;img&gt; nodes, but just keep changing &lt;img&gt;&apos;s src attribute to load different images.
&gt; &gt; 
&gt; &gt; The debug output says: &quot;LEAK: 85 CachedResource&quot;, which is the all image resources.
&gt; &gt; 
&gt; &gt; Also, the newest Chrome 28 and Firefox 23 also both have this problem.
&gt; 
&gt; Well, you can always propose a new patch/approach if the problem still persist.

I think http://trac.webkit.org/changeset/92143 fixed some part of this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069772</commentid>
    <comment_count>13</comment_count>
      <attachid>42748</attachid>
    <who name="Makivelli">onekey247</who>
    <bug_when>2015-02-16 23:02:39 -0800</bug_when>
    <thetext>Comment on attachment 42748
bug_memoryLeak.html

&gt;&lt;html&gt;
&gt;  &lt;head&gt;
&gt;
&gt;   &lt;script language=&quot;javascript&quot;&gt;
&gt;
&gt;      var containerNode, compteur=0, lastImg, timer, dist=45, number=0;
&gt;      var activateGfx = false;
&gt;      var activateOpacity = false;
&gt;
&gt;      function init(){
&gt;	var img = new Image();
&gt;	img.src = &quot;./resources/&quot;+compteur+&quot;.jpg&quot;;
&gt;	lastImg = img;
&gt;	containerNode = document.getElementById(&quot;imgContainer&quot;);
&gt;	containerNode.appendChild(img);
&gt;      }
&gt;
&gt;      function start(){
&gt;	  timer = window.setInterval(function(){
&gt;	    rLaunch();
&gt;	  },1);
&gt;      }
&gt;
&gt;      function stop(){
&gt;	  clearInterval(timer);
&gt;      }
&gt;
&gt;      function rLaunch(){
&gt;	document.getElementById(&quot;imgContainer&quot;).innerHTML = &quot;&quot;;
&gt;	//lastImg.style.right=dist+&quot;px&quot;;
&gt;	lastImg=null;
&gt;	dist = dist+1;
&gt;	number = number+1;
&gt;	//lastImg.style.left=&quot;auto&quot;;
&gt;	var img = new Image();
&gt;	compteur = (compteur==12) ? 0 : compteur+1; 
&gt;	var str = activateGfx ? &quot;|com.motorola.gfxmem=true&quot;:&quot;&quot;;
&gt;	img.src = &quot;./resources/&quot;+compteur+&quot;.jpg?dist=&quot;+dist+str;
&gt;	lastImg = img;
&gt;	
&gt;	containerNode.appendChild(img);
&gt;	var desc = activateOpacity ? &quot; opacity activated&quot; :  &quot;&quot;;
&gt;	document.getElementById(&quot;textContainer&quot;).innerHTML = &quot;NbImages chargees : &quot;+ number + desc;
&gt;     }
&gt;
&gt;    function clean(){
&gt;      document.getElementById(&quot;imgContainer&quot;).innerHTML = &quot;&quot;;
&gt;      number = 0;
&gt;      clearInterval(timer);
&gt;	  
&gt;	  // add by DFL
&gt;	while(containerNode.hasChildNodes()) {
&gt;	containerNode.removeChild(containerNode.lastChild) ;
&gt;	}
&gt;	
&gt;	 // Remove element nodes and prevent memory leaks
&gt;	 jQuery(this).children().remove();
&gt;	 // Remove any remaining nodes
&gt;	 while (this.firstChild)
&gt;	 this.removeChild(this.firstChild);	
&gt;	 
&gt;	 containerNode.clear();
&gt;	 containerNode.empty();	  
&gt;	  
&gt;     }
&gt;
&gt;    function activOpacity(){
&gt;	 activateOpacity = !activateOpacity;
&gt;	  if(activateOpacity) {
&gt;	      document.getElementById(&quot;imgContainer&quot;).className = &quot;opacity&quot;;
&gt;	      document.getElementById(&quot;isOpacityActivated&quot;).innerHTML = &quot;(on)&quot;;		
&gt;	  } else {
&gt;	      document.getElementById(&quot;imgContainer&quot;).className = &quot;&quot;;
&gt;	      document.getElementById(&quot;isOpacityActivated&quot;).innerHTML = &quot;(off)&quot;;		
&gt;	  }
&gt;
&gt;	clean();
&gt;    }
&gt;  &lt;/script&gt;
&gt;
&gt;  &lt;style type=&quot;text/css&quot;&gt;
&gt;
&gt;    img{
&gt;      left:45px;
&gt;      top:45px;
&gt;      position:absolute;
&gt;     /* opacity:0.5;*/
&gt;    }
&gt;
&gt;    .opacity img{
&gt;	opacity:0.5;
&gt;     }
&gt;
&gt;    div.controls{
&gt;      position:absolute;
&gt;      bottom:20px;
&gt;      left:45px;
&gt;
&gt;    }
&gt;
&gt;    div.textContainer{
&gt;      position:absolute;
&gt;      top: 150px;
&gt;      left: 400px;
&gt;    }
&gt;
&gt;
&gt;  &lt;/style&gt;
&gt;
&gt;
&gt;  &lt;/head&gt;
&gt;  &lt;body onload=&quot;init()&quot;&gt;
&gt;    &lt;div id=&quot;controls&quot; class=&quot;controls&quot;&gt;
&gt;	&lt;a href=&quot;#&quot; onclick=&quot;javascript:start()&quot;&gt;Start&lt;/a&gt;
&gt;	&lt;a href=&quot;#&quot; onclick=&quot;javascript:stop()&quot;&gt;Stop&lt;/a&gt;
&gt;	&lt;a href=&quot;#&quot; onclick=&quot;javascript:activOpacity()&quot;&gt;Opacity &lt;span id=&quot;isOpacityActivated&quot;&gt;(Off)&lt;/span&gt;&lt;/a&gt;
&gt;    &lt;/div&gt;
&gt;    &lt;div id=&quot;imgContainer&quot;&gt;&lt;/div&gt;
&gt;    &lt;div id=&quot;textContainer&quot; class=&quot;textContainer&quot;&gt;&lt;/div&gt;
&gt;  &lt;/body&gt;
&gt;&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443312</commentid>
    <comment_count>14</comment_count>
    <who name="Pierre Fritsch">pierre.fritsch.work</who>
    <bug_when>2018-07-19 00:47:17 -0700</bug_when>
    <thetext>For others battling with the memory increase in Safari when changing an image src, there&apos;s a work around until this bug is fixed: 

Store the image binary data in a `Blob` object, `createObjectURL` to represent this blob, and assign this URL as the `Image.src`. Finally, `revokeObjectURL` before switching to the next image.

See also https://stackoverflow.com/a/38624675/4769344

Note that this method assumes the usage of Data URIs. If you need to read existing image files, you would have to load the images on some server and to pass them to the browser as data URIs in order to avoid the creation of `Image` objects in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842144</commentid>
    <comment_count>15</comment_count>
    <who name="Avner">avner.moshkovitz</who>
    <bug_when>2022-02-15 22:51:24 -0800</bug_when>
    <thetext>It seems like this is still a problem.
In my case I read a blob from a local file, by extracting a zip entry from a zip file, without the use of an &quot;Image&quot; object.
A blob is then created from the array, and managed with createObjectURL, and revokeObjectURL.
But memory leak still happens on browsers in iOS, so I assume this is a bug in Webkit.
The problem is described in 
https://stackoverflow.com/questions/71122643/webapp-fails-in-ios-when-using-revokeobjecturl
and
https://developer.apple.com/forums/thread/700639
and an online example that demonstrates the problem is in
https://jsfiddle.net/avnerm/vfgkdenp/18/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842658</commentid>
    <comment_count>16</comment_count>
    <who name="Avner">avner.moshkovitz</who>
    <bug_when>2022-02-16 19:26:29 -0800</bug_when>
    <thetext>I simplified the problem (which happens on iOS):
- replaced reading-from-zip with reading-from-external-url
- mimicked the reading of blob by artificially using createObjectURL, and revokeObjectURL.
The problem is described and demonstrated in: https://stackoverflow.com/questions/71151958/memory-leak-in-ios-when-loading-images-from-external-url-and-using-createobjectu</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2186642</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-03-03 11:54:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/171647422&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2186661</commentid>
    <comment_count>18</comment_count>
    <who name="Ryan Reno">rreno</who>
    <bug_when>2026-03-03 12:30:59 -0800</bug_when>
    <thetext>The original issue no longer reproduces. I ran over 32k loops and while I did see memory use spike as high as 800MB (going to be highly dependent on image choice) it would frequently drop down while the loop was running. After stopping the loop the memory footprint would drop back down below 100MB.

If there&apos;s an issue with memory leaks as they relate to blob URLs please file a new issue. But I don&apos;t think such an elaborate workaround is necessary as of at least Safari 26.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42748</attachid>
            <date>2009-11-09 05:15:54 -0800</date>
            <delta_ts>2009-11-10 00:31:36 -0800</delta_ts>
            <desc>bug_memoryLeak.html</desc>
            <filename>Unbounded_memory_growth.html</filename>
            <type>text/html</type>
            <size>2830</size>
            <attacher name="Flament David">flament.david</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CgogICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KCiAgICAg
IHZhciBjb250YWluZXJOb2RlLCBjb21wdGV1cj0wLCBsYXN0SW1nLCB0aW1lciwgZGlzdD00NSwg
bnVtYmVyPTA7CiAgICAgIHZhciBhY3RpdmF0ZUdmeCA9IGZhbHNlOwogICAgICB2YXIgYWN0aXZh
dGVPcGFjaXR5ID0gZmFsc2U7CgogICAgICBmdW5jdGlvbiBpbml0KCl7Cgl2YXIgaW1nID0gbmV3
IEltYWdlKCk7CglpbWcuc3JjID0gIi4vcmVzb3VyY2VzLyIrY29tcHRldXIrIi5qcGciOwoJbGFz
dEltZyA9IGltZzsKCWNvbnRhaW5lck5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1n
Q29udGFpbmVyIik7Cgljb250YWluZXJOb2RlLmFwcGVuZENoaWxkKGltZyk7CiAgICAgIH0KCiAg
ICAgIGZ1bmN0aW9uIHN0YXJ0KCl7CgkgIHRpbWVyID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0
aW9uKCl7CgkgICAgckxhdW5jaCgpOwoJICB9LDEpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBz
dG9wKCl7CgkgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBy
TGF1bmNoKCl7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nQ29udGFpbmVyIikuaW5uZXJI
VE1MID0gIiI7CgkvL2xhc3RJbWcuc3R5bGUucmlnaHQ9ZGlzdCsicHgiOwoJbGFzdEltZz1udWxs
OwoJZGlzdCA9IGRpc3QrMTsKCW51bWJlciA9IG51bWJlcisxOwoJLy9sYXN0SW1nLnN0eWxlLmxl
ZnQ9ImF1dG8iOwoJdmFyIGltZyA9IG5ldyBJbWFnZSgpOwoJY29tcHRldXIgPSAoY29tcHRldXI9
PTEyKSA/IDAgOiBjb21wdGV1cisxOyAKCXZhciBzdHIgPSBhY3RpdmF0ZUdmeCA/ICJ8Y29tLm1v
dG9yb2xhLmdmeG1lbT10cnVlIjoiIjsKCWltZy5zcmMgPSAiLi9yZXNvdXJjZXMvIitjb21wdGV1
cisiLmpwZz9kaXN0PSIrZGlzdCtzdHI7CglsYXN0SW1nID0gaW1nOwoJCgljb250YWluZXJOb2Rl
LmFwcGVuZENoaWxkKGltZyk7Cgl2YXIgZGVzYyA9IGFjdGl2YXRlT3BhY2l0eSA/ICIgb3BhY2l0
eSBhY3RpdmF0ZWQiIDogICIiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRDb250YWlu
ZXIiKS5pbm5lckhUTUwgPSAiTmJJbWFnZXMgY2hhcmdlZXMgOiAiKyBudW1iZXIgKyBkZXNjOwog
ICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbigpewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaW1nQ29udGFpbmVyIikuaW5uZXJIVE1MID0gIiI7CiAgICAgIG51bWJlciA9IDA7CiAgICAg
IGNsZWFySW50ZXJ2YWwodGltZXIpOwoJICAKCSAgLy8gYWRkIGJ5IERGTAoJd2hpbGUoY29udGFp
bmVyTm9kZS5oYXNDaGlsZE5vZGVzKCkpIHsKCWNvbnRhaW5lck5vZGUucmVtb3ZlQ2hpbGQoY29u
dGFpbmVyTm9kZS5sYXN0Q2hpbGQpIDsKCX0KCQoJIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFu
ZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwoJIGpRdWVyeSh0aGlzKS5jaGlsZHJlbigpLnJlbW92ZSgp
OwoJIC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCgkgd2hpbGUgKHRoaXMuZmlyc3RDaGls
ZCkKCSB0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCk7CQoJIAoJIGNvbnRhaW5lck5v
ZGUuY2xlYXIoKTsKCSBjb250YWluZXJOb2RlLmVtcHR5KCk7CSAgCgkgIAogICAgIH0KCiAgICBm
dW5jdGlvbiBhY3Rpdk9wYWNpdHkoKXsKCSBhY3RpdmF0ZU9wYWNpdHkgPSAhYWN0aXZhdGVPcGFj
aXR5OwoJICBpZihhY3RpdmF0ZU9wYWNpdHkpIHsKCSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJpbWdDb250YWluZXIiKS5jbGFzc05hbWUgPSAib3BhY2l0eSI7CgkgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaXNPcGFjaXR5QWN0aXZhdGVkIikuaW5uZXJIVE1MID0gIihvbiki
OwkJCgkgIH0gZWxzZSB7CgkgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nQ29udGFp
bmVyIikuY2xhc3NOYW1lID0gIiI7CgkgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaXNP
cGFjaXR5QWN0aXZhdGVkIikuaW5uZXJIVE1MID0gIihvZmYpIjsJCQoJICB9CgoJY2xlYW4oKTsK
ICAgIH0KICA8L3NjcmlwdD4KCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCiAgICBpbWd7CiAg
ICAgIGxlZnQ6NDVweDsKICAgICAgdG9wOjQ1cHg7CiAgICAgIHBvc2l0aW9uOmFic29sdXRlOwog
ICAgIC8qIG9wYWNpdHk6MC41OyovCiAgICB9CgogICAgLm9wYWNpdHkgaW1newoJb3BhY2l0eTow
LjU7CiAgICAgfQoKICAgIGRpdi5jb250cm9sc3sKICAgICAgcG9zaXRpb246YWJzb2x1dGU7CiAg
ICAgIGJvdHRvbToyMHB4OwogICAgICBsZWZ0OjQ1cHg7CgogICAgfQoKICAgIGRpdi50ZXh0Q29u
dGFpbmVyewogICAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgICAgdG9wOiAxNTBweDsKICAgICAg
bGVmdDogNDAwcHg7CiAgICB9CgoKICA8L3N0eWxlPgoKCiAgPC9oZWFkPgogIDxib2R5IG9ubG9h
ZD0iaW5pdCgpIj4KICAgIDxkaXYgaWQ9ImNvbnRyb2xzIiBjbGFzcz0iY29udHJvbHMiPgoJPGEg
aHJlZj0iIyIgb25jbGljaz0iamF2YXNjcmlwdDpzdGFydCgpIj5TdGFydDwvYT4KCTxhIGhyZWY9
IiMiIG9uY2xpY2s9ImphdmFzY3JpcHQ6c3RvcCgpIj5TdG9wPC9hPgoJPGEgaHJlZj0iIyIgb25j
bGljaz0iamF2YXNjcmlwdDphY3Rpdk9wYWNpdHkoKSI+T3BhY2l0eSA8c3BhbiBpZD0iaXNPcGFj
aXR5QWN0aXZhdGVkIj4oT2ZmKTwvc3Bhbj48L2E+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9Imlt
Z0NvbnRhaW5lciI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ0ZXh0Q29udGFpbmVyIiBjbGFzcz0idGV4
dENvbnRhaW5lciI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60885</attachid>
            <date>2010-07-08 08:16:50 -0700</date>
            <delta_ts>2010-07-08 10:20:18 -0700</delta_ts>
            <desc>Simple patch, possible solution to improve memory consumption</desc>
            <filename>patch_31253.txt</filename>
            <type>text/plain</type>
            <size>13524</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDctMDggIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9i
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RG9jTG9hZGVyIGtlZXBzIHdlYWsgcmVmZXJlbmNlZCB0byBDYWNoZWRSZXNvdXJjZXMuIFRoaXMg
d2F5LCB3aGVuIHRoZSByZXNvdXJjZXMgYXJlIHJlbW92ZWQgZnJvbSBjYWNoZSwgdGhleSBhcmUg
ZGVsZXRlZCwKKyAgICAgICAgdGh1cyBhbGxvd2luZyBmb3IgYSBzbWFsbGVyIG1lbW9yeSBjb25z
dW1wdGlvbi4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzEyNTMKKworICAgICAgICBObyBuZXcgdGVzdHMgYWRkZWQsIGZ1bmN0aW9uYWxpdHkgaXMg
Y292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpyZWdpc3RlckhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dW5yZWdpc3RlckhhbmRsZSk6Cisg
ICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAgICogbG9hZGVyL0NhY2hl
ZFJlc291cmNlSGFuZGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2U6On5DYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjppc1dlYWtSZWZlcmVuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpzZXRJc1dlYWtSZWZl
cmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGU6OkNhY2hlZFJl
c291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlSGFuZGxlOjpn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGU6Om9wZXJhdG9yLT4p
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VIYW5kbGU6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUhhbmRsZTo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChXZWJDb3JlOjo6OkNhY2hlZFJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKiBsb2FkZXIvRG9j
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY0xvYWRlcjo6fkRvY0xvYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2NMb2FkZXI6OnNldEF1dG9Mb2FkSW1hZ2VzKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpnZXRTdWJyZXNvdXJjZXMpOgorCiAyMDEwLTA3
LTA4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZp
c2lvbiA2Mjc4NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksNiArOTksMTMgQEAgQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJj
ZSgpCiAKICAgICBpZiAobV9kb2NMb2FkZXIpCiAgICAgICAgIG1fZG9jTG9hZGVyLT5yZW1vdmVD
YWNoZWRSZXNvdXJjZSh0aGlzKTsKKyAgICAKKyAgICAvLyByZW1vdmUgYWxsIHRoZSB3ZWFrIHJl
ZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QgYXMgd2UgZ28gZGVhZAorICAgIEhhc2hTZXQ8Q2FjaGVk
UmVzb3VyY2VIYW5kbGVCYXNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fd2Vha0hhbmRsZXNUb0ludmFs
aWRhdGUuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+
OjppdGVyYXRvciBpdCA9IG1fd2Vha0hhbmRsZXNUb0ludmFsaWRhdGUuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaGFuZGxlID0g
Kml0OworICAgICAgICBoYW5kbGUtPm1fcmVzb3VyY2UgPSAwOworICAgIH0KIH0KICAgICAKIHZv
aWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGJvb2wgaW5jcmVt
ZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKQpAQCAtNTA5LDUgKzUxNiwzOSBAQCB1bnNpZ25lZCBDYWNoZWRSZXNv
dXJjZTo6b3ZlcmhlYWRTaXplKCkgCiAgICAgICAgICAgICAgIDM4NDsgICAgICAgICAgICAgICAg
ICAgIC8vIGF2ZXJhZ2Ugc2l6ZSBvZiBtX2NsaWVudHMgaGFzaCBtYXAKICAgICAqLwogfQorICAg
IAordm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlKiBoKQoreworICAgIC8vIHRoZSBvbmx5IGRpZmZlcmVjZW4gYmV0d2VlbiB0aGlzIG1l
dGhvZCBhbmQgdGhlIFdlYktpdCByZWdpc3RlckhhbmRsZSBpbXBsZW1lbnRhdGlvbgorICAgIC8v
IGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgd2Vha1JlZmVyZW5jZSBib29sZWFuIG5lZWRlZCBmb3Ig
RG9jTG9hZGVycyB0aGF0IHNob3VsZAorICAgIC8vIG5vdCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
aXMgb2JqZWN0CisgICAgY29uc3QgYm9vbCB3ZWFrUmVmZXJlbmNlID0gaC0+aXNXZWFrUmVmZXJl
bmNlKCk7CisgICAgICAgIAorICAgIGlmICghd2Vha1JlZmVyZW5jZSkgCisgICAgICAgICsrbV9o
YW5kbGVDb3VudDsKKyAgICBlbHNlCisgICAgICAgIG1fd2Vha0hhbmRsZXNUb0ludmFsaWRhdGUu
YWRkKGgpOworICAgICAgICAKKyAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkgCisgICAg
ICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5hZGQoaCk7IAorfQorICAgIAordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6dW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCit7
CisgICAgY29uc3QgYm9vbCB3ZWFrUmVmZXJlbmNlID0gaC0+aXNXZWFrUmVmZXJlbmNlKCk7Cisg
ICAgICAgIAorICAgIGlmICghd2Vha1JlZmVyZW5jZSkgeyAKKyAgICAgICAgQVNTRVJUKG1faGFu
ZGxlQ291bnQgPiAwKTsgCisgICAgICAgIC0tbV9oYW5kbGVDb3VudDsgCisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV93ZWFrSGFuZGxlc1RvSW52YWxpZGF0ZS5yZW1vdmUoaCk7CisgICAgfQorICAg
ICAgICAKKyAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkgCisgICAgICAgIG1faGFuZGxl
c1RvUmV2YWxpZGF0ZS5yZW1vdmUoaCk7IAorICAgICAgICAKKyAgICBpZiAoIW1faGFuZGxlQ291
bnQgJiYgIXdlYWtSZWZlcmVuY2UpIAorICAgICAgICBkZWxldGVJZlBvc3NpYmxlKCk7IAorfQog
CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDYyNzg3KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDggKzE4
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluY3JlYXNlUHJlbG9hZENvdW50KCkgeyArK21fcHJl
bG9hZENvdW50OyB9CiAgICAgdm9pZCBkZWNyZWFzZVByZWxvYWRDb3VudCgpIHsgQVNTRVJUKG1f
cHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRDb3VudDsgfQogICAgIAotICAgIHZvaWQgcmVnaXN0
ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKSB7ICsrbV9oYW5kbGVDb3VudDsg
aWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5hZGQoaCk7
IH0KLSAgICB2b2lkIHVucmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBo
KSB7IEFTU0VSVChtX2hhbmRsZUNvdW50ID4gMCk7IC0tbV9oYW5kbGVDb3VudDsgaWYgKG1fcmVz
b3VyY2VUb1JldmFsaWRhdGUpIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5yZW1vdmUoaCk7IGlmICgh
bV9oYW5kbGVDb3VudCkgZGVsZXRlSWZQb3NzaWJsZSgpOyB9CisgICAgdm9pZCByZWdpc3Rlckhh
bmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOworICAgIHZvaWQgdW5yZWdpc3Rlckhh
bmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwogICAgIAogICAgIGJvb2wgY2FuVXNl
Q2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKICAgICBib29sIG11c3RSZXZhbGlkYXRlKENhY2hlUG9s
aWN5KSBjb25zdDsKQEAgLTI3Niw2ICsyNzYsOSBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlc2Ug
aGFuZGxlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZSBpbiBjYXNlIHdlIGdldCAzMDQgcmVzcG9uc2UuCiAgICAgSGFzaFNldDxD
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPiBtX2hhbmRsZXNUb1JldmFsaWRhdGU7CisgICAgCisg
ICAgLy8gS2VlcCBhIGxpc3Qgb2Ygd2VhayBoYW5kbGVzIHRvIHRoaXMgcmVzb3VyY2UKKyAgICBI
YXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1fd2Vha0hhbmRsZXNUb0ludmFsaWRh
dGU7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmgJKHJl
dmlzaW9uIDYyNzg3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IH5DYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKSB7IGlmIChtX3Jlc291cmNlKSBtX3Jlc291cmNl
LT51bnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9CisgICAgICAgIH5DYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2UoKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIGlmIChtX3Jlc291cmNlKSAKKyAgICAg
ICAgICAgICAgICBtX3Jlc291cmNlLT51bnJlZ2lzdGVySGFuZGxlKHRoaXMpOyAKKyAgICAgICAg
ICAgIG1fcmVzb3VyY2UgPSAwOyAKKyAgICAgICAgfQogICAgICAgICBDYWNoZWRSZXNvdXJjZSog
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZTsgfQogICAgICAgICAKICAgICAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQpAQCAtNDMsNDUgKzQ4
LDgwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRC
b29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlOjptX3Jlc291cmNlIDogMDsgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2UoKSA6IG1fcmVzb3VyY2UoMCkge30KLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKiByZXMpIHsgbV9yZXNvdXJjZSA9IHJl
czsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9Ci0g
ICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2UmIG8pIDogbV9yZXNvdXJjZShvLm1fcmVzb3VyY2UpIHsgaWYgKG1fcmVzb3VyY2UpIG1f
cmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9CisgICAgICAgIENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZShib29sIGlzV2Vha1JlZmVyZW5jZSkgCisgICAgICAgIDogbV9yZXNvdXJjZSgw
KQorICAgICAgICAsIG1faXNXZWFrUmVmZXJlbmNlKGlzV2Vha1JlZmVyZW5jZSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uo
Q2FjaGVkUmVzb3VyY2UqIHJlcywgYm9vbCBpc1dlYWtSZWZlcmVuY2UpIAorICAgICAgICA6IG1f
aXNXZWFrUmVmZXJlbmNlKGlzV2Vha1JlZmVyZW5jZSkgCisgICAgICAgIHsgCisgICAgICAgICAg
ICBtX3Jlc291cmNlID0gcmVzOyAKKyAgICAgICAgICAgIGlmIChtX3Jlc291cmNlKSAKKyAgICAg
ICAgICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsgCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2UmIG8pIDogbV9yZXNvdXJjZShvLm1fcmVzb3VyY2UpIAorICAgICAg
ICAsIG1faXNXZWFrUmVmZXJlbmNlKG8ubV9pc1dlYWtSZWZlcmVuY2UpIAorICAgICAgICB7IAor
ICAgICAgICAgICAgaWYgKG1fcmVzb3VyY2UpIAorICAgICAgICAgICAgICAgIG1fcmVzb3VyY2Ut
PnJlZ2lzdGVySGFuZGxlKHRoaXMpOyAKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0UmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICAgICAgCisgICAgICAgIGJvb2wgaXNXZWFrUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYWtSZWZlcmVuY2U7IH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2V0SXNXZWFrUmVmZXJlbmNlKGJvb2wgd2Vha1JlZmVyZW5jZSkgeyBtX2lz
V2Vha1JlZmVyZW5jZSA9IHdlYWtSZWZlcmVuY2U7IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVk
UmVzb3VyY2VIYW5kbGVCYXNlJikgeyByZXR1cm4gKnRoaXM7IH0gCiAgICAgICAgIAogICAgICAg
ICBmcmllbmQgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IG1fcmVzb3VyY2U7Ci0gICAgfTsKICAgICAgICAgCi0gICAgdGVtcGxhdGUgPGNsYXNzIFI+IGNs
YXNzIENhY2hlZFJlc291cmNlSGFuZGxlIDogcHVibGljIENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZSB7Ci0gICAgcHVibGljOiAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUoKSB7IH0KLSAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUoUiogcmVzKTsKLSAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUoY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIG8pIDogQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlKG8pIHsgfQotCi0gICAgICAgIFIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Uio+KENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTo6Z2V0KCkpOyB9Ci0g
ICAgICAgIFIqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgICAgICAg
ICAgICAgCi0gICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oUiogcmVzKSB7
IHNldFJlc291cmNlKHJlcyk7IHJldHVybiAqdGhpczsgfSAKLSAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgbykgeyBzZXRS
ZXNvdXJjZShvLmdldCgpKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG8pIGNvbnN0IHsgcmV0dXJuIGdldCgp
ID09IG8uZ2V0KCk7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENhY2hlZFJlc291
cmNlSGFuZGxlQmFzZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgIT0gby5nZXQoKTsgfQorICAg
ICAgICBib29sIG1faXNXZWFrUmVmZXJlbmNlOwogICAgIH07CisgICAgICAKKyAKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgUiwgYm9vbCBJU19XRUFLX1JFRkVSRU5DRSA9IGZhbHNlPiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUhhbmRsZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UgeworcHVi
bGljOiAKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSgpIDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVC
YXNlKElTX1dFQUtfUkVGRVJFTkNFKSB7IH0KKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiBy
ZXMpOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlKGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxl
PFI+JiBvKSA6IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShvKSB7IH0KKyAgICAKK1IqIGdldCgp
IGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Uio+KENhY2hlZFJlc291cmNlSGFuZGxl
QmFzZTo6Z2V0KCkpOyB9CitSKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
IAotICAgIC8vIERvbid0IGlubGluZSBmb3Igd2luc2N3IGNvbXBpbGVyIHRvIHByZXZlbnQgdGhl
IGNvbXBpbGVyIGFnZ3Jlc3NpdmVseSByZXNvbHZpbmcKLSAgICAvLyB0aGUgYmFzZSBjbGFzcyBv
ZiBSKiB3aGVuIENhY2hlZFJlc291cmNlSGFuZGxlcjxUPihSKikgaXMgaW5saW5lZC4gIFRoZSBi
dWcgaXMKLSAgICAvLyByZXBvcnRlZCBhdDogaHR0cHM6Ly94ZGFidWcwMDEuZXh0Lm5va2lhLmNv
bS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTgxMi4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4K
K0NhY2hlZFJlc291cmNlSGFuZGxlJiBvcGVyYXRvcj0oUiogcmVzKSAKK3sgCisgICAgQVNTRVJU
KCFpc1dlYWtSZWZlcmVuY2UoKSk7IAorICAgIHNldFJlc291cmNlKHJlcyk7IAorICAgIHJldHVy
biAqdGhpczsgCit9IAorQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9yPShjb25zdCBDYWNo
ZWRSZXNvdXJjZUhhbmRsZSYgbykgCit7IAorICAgIHNldElzV2Vha1JlZmVyZW5jZShvLmlzV2Vh
a1JlZmVyZW5jZSgpKTsgCisgICAgc2V0UmVzb3VyY2Uoby5nZXQoKSk7IAorICAgIHJldHVybiAq
dGhpczsgCit9Citib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNl
JiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSA9PSBvLmdldCgpOyB9Citib29sIG9wZXJhdG9yIT0o
Y29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSAh
PSBvLmdldCgpOyB9Cit9OworCisvLyBEb24ndCBpbmxpbmUgZm9yIHdpbnNjdyBjb21waWxlciB0
byBwcmV2ZW50IHRoZSBjb21waWxlciBhZ2dyZXNzaXZlbHkgcmVzb2x2aW5nCisvLyB0aGUgYmFz
ZSBjbGFzcyBvZiBSKiB3aGVuIENhY2hlZFJlc291cmNlSGFuZGxlcjxUPihSKikgaXMgaW5saW5l
ZC4gIFRoZSBidWcgaXMKKy8vIHJlcG9ydGVkIGF0OiBodHRwczovL3hkYWJ1ZzAwMS5leHQubm9r
aWEuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD05ODEyLgordGVtcGxhdGUgPGNsYXNzIFIs
IGJvb2wgSVNfV0VBS19SRUZFUkVOQ0U+CiAjaWYgIUNPTVBJTEVSKFdJTlNDVykKLSAgICBpbmxp
bmUKK2lubGluZQogI2VuZGlmCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj46OkNhY2hlZFJl
c291cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UocmVzKSAKLSAg
ICB7Ci0gICAgfQorQ2FjaGVkUmVzb3VyY2VIYW5kbGU8UiwgSVNfV0VBS19SRUZFUkVOQ0U+OjpD
YWNoZWRSZXNvdXJjZUhhbmRsZShSKiByZXMpIDogQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKHJl
cywgSVNfV0VBS19SRUZFUkVOQ0UpIAoreworfQorCiAgICAgCiAgICAgdGVtcGxhdGUgPGNsYXNz
IFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Uj4mIGgsIGNvbnN0IFJSKiByZXMpIAogICAgIHsgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHJl
dmlzaW9uIDYyNzg3KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsOCBAQCBEb2NMb2FkZXI6On5Eb2NMb2FkZXIoKQogICAgIGNsZWFy
UHJlbG9hZHMoKTsKICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC0+c2V0RG9jTG9hZGVyKDApOworICAgICAgICBpZiAoaXQtPnNl
Y29uZC5nZXQoKSkKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvY0xvYWRlcigwKTsKICAg
ICBtX2NhY2hlLT5yZW1vdmVEb2NMb2FkZXIodGhpcyk7CiAKICAgICAvLyBNYWtlIHN1cmUgbm8g
cmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhpcyBEb2NMb2FkZXIKQEAgLTI0Nyw3ICsyNDgsOCBA
QCBDYWNoZWRSZXNvdXJjZSogRG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyCiAgICAgICAgIERvY3Vt
ZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKGZ1
bGxVUkwuc3RyaW5nKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvY0xvYWRlcigw
KTsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQtPnNldERvY0xvYWRlcigwKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJj
ZXMucmVtb3ZlKGl0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwNCw2ICszMDYsOSBAQCB2b2lk
IERvY0xvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9vbCBlCiAgICAgRG9jdW1lbnRSZXNvdXJj
ZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKTsKICAgICBmb3Ig
KERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKICAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0g
Q2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAgICAgIENhY2hlZEltYWdl
KiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxjb25zdCBDYWNo
ZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5oCShyZXZpc2lvbiA2Mjc4
NykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw5IEBAIHB1YmxpYzoKIAogICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHVybCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlcy5nZXQo
dXJsKS5nZXQoKTsgfQogICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJl
c291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiA+IERvY3VtZW50UmVzb3VyY2VNYXA7CisgICAg
Ly8ga2VlcCBvbmx5IHdlYWsgcmVmZXJlbmNlcyB0byBDYWNoZWQgUmVzb3VyY2UgZnJvbSBEb2NM
b2FkZXIKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZSwgdHJ1ZT4gPiBEb2N1bWVudFJlc291cmNlTWFwOworICAgIAogICAgIGNv
bnN0IERvY3VtZW50UmVzb3VyY2VNYXAmIGFsbENhY2hlZFJlc291cmNlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXM7IH0KIAogICAgIGJvb2wgYXV0b0xvYWRJbWFnZXMoKSBj
b25zdCB7IHJldHVybiBtX2F1dG9Mb2FkSW1hZ2VzOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCShyZXZpc2lvbiA2Mjc4NykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYgKzQ5OCw5IEBAIHZvaWQgRG9jdW1lbnRM
b2FkZXI6OmdldFN1YnJlc291cmNlcyhWZWMKICAgICBjb25zdCBEb2NMb2FkZXI6OkRvY3VtZW50
UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5kb2NMb2FkZXIoKS0+YWxsQ2Fj
aGVkUmVzb3VyY2VzKCk7CiAgICAgRG9jTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEb2NMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyB0aGUgaGFuZGxlIG1pZ2h0IGJl
IGludmFsaWRhdGUsIGFzIGRvYyBsb2FkZXIga2VlcHMgb25seSB3ZWFrIHJlZmVyZW5jZXMKKyAg
ICAgICAgaWYgKCFpdC0+c2Vjb25kLmdldCgpKQorICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YnJlc291cmNlID0gdGhpcy0+c3VicmVzb3Vy
Y2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSk7CiAgICAgICAgIGlm
IChzdWJyZXNvdXJjZSkKICAgICAgICAgICAgIHN1YnJlc291cmNlcy5hcHBlbmQoc3VicmVzb3Vy
Y2UucmVsZWFzZSgpKTsK
</data>
<flag name="review"
          id="48698"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>