<?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>22747</bug_id>
          
          <creation_ts>2008-12-08 18:02:51 -0800</creation_ts>
          <short_desc>unbounded growth in the cache due to resource overhead</short_desc>
          <delta_ts>2008-12-22 14:39:37 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>22969</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephanie Lewis">slewis</reporter>
          <assigned_to name="Stephanie Lewis">slewis</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101909</commentid>
    <comment_count>0</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-08 18:02:51 -0800</bug_when>
    <thetext>When running the stress test the WebCore cache shows unbounded growth.   This was discovered to be due to the average size of a resource in the cache becoming &lt; 1KB.  At which point the requests and response headers as well as other overhead (4KB) become prohibitive.

Fix by accounting for the overhead size when calculating how full the cache is.  Next steps are to pare down the size of the overhead and to limit the average size of a resource in the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101914</commentid>
    <comment_count>1</comment_count>
      <attachid>25867</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-08 19:01:00 -0800</bug_when>
    <thetext>Created attachment 25867
Patch to add minimum resource size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101917</commentid>
    <comment_count>2</comment_count>
      <attachid>25868</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-08 19:20:30 -0800</bug_when>
    <thetext>Created attachment 25868
patch to set minimum resource size in cache

clean patch this time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101931</commentid>
    <comment_count>3</comment_count>
      <attachid>25868</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-08 21:40:06 -0800</bug_when>
    <thetext>Comment on attachment 25868
patch to set minimum resource size in cache

&gt; +unsigned CachedResource::overheadSize() {
The { needs to go on the next line.

&gt; +   
&gt; +    // FIXME: Find some programmatic lighweight way to calculate response size, and size of the different CachedResource classes.  
&gt; +    // This is a rough estimate of resource overhead based on stats collected from the stress test.
&gt; +    return (sizeof(CachedResource) + 192 +  // average size of m_url.
&gt; +           896 * 2 +                        // average size of ResourceResponse.  Doubled to account for the WebCore copy and the WebKit copy. 
&gt; +                                            // Mostly due to the Header Map and URL.
&gt; +           896 +                            // CFNetwork overhead from reading and parsing the headers.
&gt; +           256 * 2 +                        // Overhead from ResourceRequest, doubled to account for WebCore copy and WebKit copy. 
&gt; +                                            // Mostly due to the URL and Header Map.
&gt; +           148);                            // Round up to 4.0KB.

As discussed, let&apos;s at least programatically get the sizes for the URL and the ResourceResponse and only apply a multiplier as a last resort.  Also, have you filed bugs on the 2 copies of the ResourceResponse and ResourceRequest (WebCore/WebKit)?  If so, please put a note in the source with the bug number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102204</commentid>
    <comment_count>4</comment_count>
      <attachid>25939</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-10 22:15:31 -0800</bug_when>
    <thetext>Created attachment 25939
new patch that calculates some sizes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102301</commentid>
    <comment_count>5</comment_count>
      <attachid>25939</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-11 16:59:39 -0800</bug_when>
    <thetext>Comment on attachment 25939
new patch that calculates some sizes

&gt; -    int delta = resource-&gt;size();
&gt; +    int delta = resource-&gt;size() + resource-&gt;overheadSize();

I think it would be better for size() to automatically add in overheadSize(), just like it adds in decodedSize(). Then, all these client calls can stay the same.

&gt; +    // The object must now be moved to a different queue, since its size may have changed.
&gt; +    // We have to remove explicitly before updating the size, so that we find the correct previous
&gt; +    // queue.
&gt; +    int delta = sizeof(CachedResourceClient*)*m_clients.capacity();

A bunch of sites like this one need a space around the &quot;*&quot;.

Because the overhead calculation is an estimate anyway, and it relies on a bunch of assumptions, like the fact that we keep around a ResourceRequest for every resource, and two copies, and the average size of ResourceRequest, this seems like a lot of complexity just to come up with a paradoxically exact estimate. I think it would be a lot simpler, and still solve our bug, if we went with your original approach of a 4K estimate across the board.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102303</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-11 17:00:56 -0800</bug_when>
    <thetext>... If we make substantial improvements to our resource metadata overhead, we can lower the estimate based on testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102889</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-18 09:21:01 -0800</bug_when>
    <thetext>I am curious: where do we hold on to the ResourceRequest instance? It&apos;s accounted for, but I can&apos;t seem to find where it&apos;s being held.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102892</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-18 09:34:29 -0800</bug_when>
    <thetext>&gt; I am curious: where do we hold on to the ResourceRequest instance? It&apos;s
&gt; accounted for, but I can&apos;t seem to find where it&apos;s being held.

Stephanie is researching that. It may be a leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102903</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-18 09:53:58 -0800</bug_when>
    <thetext>I am also working on a &quot;death-by-papercuts&quot; test that consistently reproduces this issue (not sure if it&apos;ll work, but will mention anyway).

By the way, we don&apos;t need to account for an extra ResourceResponse copy in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102909</commentid>
    <comment_count>10</comment_count>
      <attachid>26124</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-18 10:52:18 -0800</bug_when>
    <thetext>Created attachment 26124
Death by a Million Papercuts Test

Here&apos;s the test I came up with. I uploaded it as a zip, as I couldn&apos;t find a good spot for it in the tree.

Essentially, it injects a batch of tiny image elements (spacer gif) with unique URLs into the document, then overwrites them with another batch and so on. And so on. And so on.

Based on my quick look, the ToT WebKit&apos;s memory usage quickly gets out of control (viewed on Intel Mac only). Same problem with Chromium.

Firefox just gives up on trying to loading the images after a while.

Surprisingly, IE7 is the one that handles the test the best, with minimal memory growth.

Yikes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102916</commentid>
    <comment_count>11</comment_count>
      <attachid>26127</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-18 12:39:58 -0800</bug_when>
    <thetext>Created attachment 26127
Death by a Million Papercuts Test v2

I updated the test to eliminate potential side-effects of using innerHTML by only creating one set of image elements and then updating their src with unique URLs.

The test still demonstrates the problem, which is good. Or bad? I can never tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102957</commentid>
    <comment_count>12</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-18 20:16:50 -0800</bug_when>
    <thetext>So I looked at the what this test was consuming memory wise.  As expected the biggest problem was the number and size of resource requests.  If you run with either the debug menu or the developer menu open the Web Inspector creates a copy of each of the requests and as more and more resources are requested this becomes really large very quickly.  

Even if you don&apos;t have the inspector overhead this test still shows unbounded growth, again because of the resource requests.  According to Anders the lifetime of a Resource Request is tied to the ResourceLoader and is likely to stick around as long as the document sticks around.  If Anders is correct, then even though the cache is correctly throwing away resources, the requests are still around because the document is, and hence the growth.  

The good news is that if you close the window and empty the cache all of the Resource Request objects go away, so they are not leaking.  The bad news is that (contrary to previous belief) a dead cached resource should not be keeping the resource request.  We need to figure out what is keeping those objects around.  

The biggest two pieces of the Resource Request being kept around is from WebCore::KURL::operator NSURL*() const and -[NSURLRequest initWithURL:] so it seems like something in CF, Webkit, or Safari is keeping the object around</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103016</commentid>
    <comment_count>13</comment_count>
      <attachid>26153</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-19 13:10:44 -0800</bug_when>
    <thetext>Created attachment 26153
Death by a Million Papercuts Test v3

Sorry for spamming this bug. I updated the test a little bit.

This time, I removed any possible side-effects of loading being interrupted by another batch: all images must report back with &quot;load&quot; event fired before new batch of cuts is made.

The problem is still present, though it now takes somewhat longer to get there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103224</commentid>
    <comment_count>14</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-12-22 14:39:37 -0800</bug_when>
    <thetext>Closing since original issue has been resolved.  
See bug 22929 for more discussion of the ResourceRequest issue</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25867</attachid>
            <date>2008-12-08 19:01:00 -0800</date>
            <delta_ts>2008-12-08 19:19:17 -0800</delta_ts>
            <desc>Patch to add minimum resource size</desc>
            <filename>CachePatchFinal</filename>
            <type>text/plain</type>
            <size>24046</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzkxMjApCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDgyLDYgKzIwODIsNyBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAxQzkw
NTE0MzBCQTlFOEE3MDA4MUU5RDAgLyogSmF2YVNjcmlwdENvcmUueGNjb25maWcgKi87CiAJCQli
dWlsZFNldHRpbmdzID0gewogCQkJCUlOU1RBTExfUEFUSCA9ICIkKEJVSUxUX1BST0RVQ1RTX0RJ
UikiOworCQkJCU9USEVSX0NGTEFHU19SZWxlYXNlX25vcm1hbCA9ICIiOwogCQkJfTsKIAkJCW5h
bWUgPSBEZWJ1ZzsKIAkJfTsKQEAgLTIwOTAsNiArMjA5MSw3IEBACiAJCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2NyaXB0Q29y
ZS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJSU5TVEFMTF9QQVRIID0g
IiQoQlVJTFRfUFJPRFVDVFNfRElSKSI7CisJCQkJT1RIRVJfQ0ZMQUdTX1JlbGVhc2Vfbm9ybWFs
ID0gIiI7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7CiAJCX07CkBAIC0yMTAxLDYgKzIxMDMs
NyBAQAogCQkJCQlub3JtYWwsCiAJCQkJCWRlYnVnLAogCQkJCSk7CisJCQkJT1RIRVJfQ0ZMQUdT
X1JlbGVhc2Vfbm9ybWFsID0gIiI7CiAJCQkJU0VDVE9SREVSX0ZMQUdTID0gKAogCQkJCQkiLXNl
Y3RvcmRlciIsCiAJCQkJCV9fVEVYVCwKQEAgLTIyNDAsNiArMjI0Myw3IEBACiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDFDOTA1MTQzMEJBOUU4QTcwMDgxRTlEMCAvKiBKYXZhU2Ny
aXB0Q29yZS54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJSU5TVEFMTF9Q
QVRIID0gIiQoQlVJTFRfUFJPRFVDVFNfRElSKSI7CisJCQkJT1RIRVJfQ0ZMQUdTX1JlbGVhc2Vf
bm9ybWFsID0gIiI7CiAJCQl9OwogCQkJbmFtZSA9IFByb2ZpbGluZzsKIAkJfTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDM5MTIwKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsMTIgKzI4MiwxOSBA
QCBleHRlcm4gIkMiIGNvbnN0IGludCBqc2NvcmVfZmFzdG1hbGxvY19pCiAjaWYgUExBVEZPUk0o
REFSV0lOKQogI2luY2x1ZGUgIk1hbGxvY1pvbmVTdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KK2V4dGVybiAiQyIgeworI2luY2x1ZGUgPFN5c3RlbS9zdGFja19sb2dnaW5nLmg+
Cit9CiAjZW5kaWYKIAogI2lmbmRlZiBQUkl1UwogI2RlZmluZSBQUkl1UyAienUiCiAjZW5kaWYK
IAorI2lmbmRlZiBQUkl1NjQKKyNkZWZpbmUgUFJJdTY0ICJsbHUiCisjZW5kaWYKKwogLy8gQ2Fs
bGluZyBwdGhyZWFkX2dldHNwZWNpZmljIHRocm91Z2ggYSBnbG9iYWwgZnVuY3Rpb24gcG9pbnRl
ciBpcyBmYXN0ZXIgdGhhbiBhIG5vcm1hbAogLy8gY2FsbCB0byB0aGUgZnVuY3Rpb24gb24gTWFj
IE9TIFgsIGFuZCBpdCdzIHVzZWQgaW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZS4gU28gd2UK
IC8vIHVzZSBhIGZ1bmN0aW9uIHBvaW50ZXIuIEJ1dCB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IGZh
c3RlciBvbiBvdGhlciBwbGF0Zm9ybXMsIGFuZCB3ZSBoYWQKQEAgLTMxMSw3ICszMTgsNiBAQCBz
dGF0aWMgdm9pZCogKCpwdGhyZWFkX2dldHNwZWNpZmljX2Z1bmN0CiAgIERFRklORV9WQVJJQUJM
RShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQogCiBuYW1lc3BhY2UgV1RGIHsKLQogI2Rl
ZmluZSBtYWxsb2MgZmFzdE1hbGxvYwogI2RlZmluZSBjYWxsb2MgZmFzdENhbGxvYwogI2RlZmlu
ZSBmcmVlIGZhc3RGcmVlCkBAIC0zMjEsOSArMzI3LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogI2Rl
ZmluZSBDSEVDS19DT05ESVRJT04gQVNTRVJUCiAKICNpZiBQTEFURk9STShEQVJXSU4pCisKIGNs
YXNzIFRDTWFsbG9jX1BhZ2VIZWFwOwogY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGU7CiBjbGFz
cyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkOworY2xhc3MgVENNYWxsb2NfUHJpbnRl
cjsKKwordHlwZWRlZiB2b2lkICh0Y21hbGxvY19sb2dnZXJfdCkodWludDMyX3QgdHlwZV9mbGFn
cywgdWludHB0cl90IHpvbmVfcHRyLCB1aW50cHRyX3Qgc2l6ZSwgdWludHB0cl90IHB0cl9hcmcs
IHVpbnRwdHJfdCByZXR1cm5fdmFsLCB1aW50MzJfdCBudW1faG90X3RvX3NraXApOwordGNtYWxs
b2NfbG9nZ2VyX3QgKnRjbWFsbG9jX2xvZ2dlcjsgCisjZGVmaW5lIE1BTExPQ19MT0dfVFlQRV9B
TExPQ0FURSBzdGFja19sb2dnaW5nX3R5cGVfYWxsb2MKKyNkZWZpbmUgTUFMTE9DX0xPR19UWVBF
X0RFQUxMT0NBVEUgc3RhY2tfbG9nZ2luZ190eXBlX2RlYWxsb2MKKyNkZWZpbmUgTUFMTE9DX0xP
R19UWVBFX0NMRUFSRUQgc3RhY2tfbG9nZ2luZ19mbGFnX2NsZWFyZWQKIAogY2xhc3MgRmFzdE1h
bGxvY1pvbmUgewogcHVibGljOgpAQCAtNzcxLDcgKzc4NSw4IEBAIHN0YXRpYyB2b2lkIEluaXRT
aXplQ2xhc3NlcygpIHsKICAgICBudW1fb2JqZWN0c190b19tb3ZlW2NsXSA9IE51bU1vdmVTaXpl
KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKTsKICAgfQogCi0jaWZuZGVmIFdURl9DSEFOR0VTCisvLyNp
Zm5kZWYgV1RGX0NIQU5HRVMKKyNpZm5kZWYgTkRFQlVHCiAgIGlmIChmYWxzZSkgewogICAgIC8v
IER1bXAgY2xhc3Mgc2l6ZXMgYW5kIG1heGltdW0gZXh0ZXJuYWwgd2FzdGFnZSBwZXIgc2l6ZSBj
bGFzcwogICAgIGZvciAoc2l6ZV90IGNsID0gMTsgY2wgIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
QEAgLTc4Niw5ICs4MDEsMTEgQEAgc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2VzKCkgewogICAg
ICAgICAgICAgICBpbnQoY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQpLAogICAgICAg
ICAgICAgICBtYXhfd2FzdGUgKiAxMDAuMCAvIGFsbG9jX3NpemUKICAgICAgICAgICAgICAgKTsK
KwogICAgIH0KICAgfQogI2VuZGlmCisvLyNlbmRpZgogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC04NjUsNiArODgyLDI1IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKICAgaW50IGlu
dXNlKCkgY29uc3QgeyByZXR1cm4gaW51c2VfOyB9CiB9OwogCisvLyBQcmludCBpbnRvIGJ1ZmZl
cgorY2xhc3MgVENNYWxsb2NfUHJpbnRlciB7CisgcHJpdmF0ZToKKyAgY2hhciogYnVmXzsgICAg
ICAgICAgIC8vIFdoZXJlIHNob3VsZCB3ZSB3cml0ZSBuZXh0CisgIGludCAgIGxlZnRfOyAgICAg
ICAgICAvLyBTcGFjZSBsZWZ0IGluIGJ1ZmZlciAoaW5jbHVkaW5nIHNwYWNlIGZvciBcMCkKKwor
IHB1YmxpYzoKKyAgLy8gUkVRVUlSRVM6ICJsZW5ndGggPiAwIgorICBUQ01hbGxvY19QcmludGVy
KGNoYXIqIGJ1ZiwgaW50IGxlbmd0aCkgOiBidWZfKGJ1ZiksIGxlZnRfKGxlbmd0aCkgeworICAg
IGJ1ZlswXSA9ICdcMCc7CisgIH0KKworICB2b2lkIHByaW50Zihjb25zdCBjaGFyKiBmb3JtYXQs
IC4uLikKKyNpZmRlZiBIQVZFX19fQVRUUklCVVRFX18KKyAgICBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKQorI2VuZGlmCis7Cit9OworCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBTcGFuIC0gYSBjb250aWd1b3VzIHJ1biBvZiBwYWdlcwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtOTc5LDYgKzEwMTUsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IERMTF9Jc0VtcHR5KGNvCiAgIHJldHVybiBsaXN0LT5uZXh0ID09IGxpc3Q7CiB9CiAKKy8vI2lm
bmRlZiBXVEZfQ0hBTkdFUwogc3RhdGljIGludCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3Qp
IHsKICAgaW50IHJlc3VsdCA9IDA7CiAgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0g
bGlzdDsgcyA9IHMtPm5leHQpIHsKQEAgLTk4Niw2ICsxMDIzLDggQEAgc3RhdGljIGludCBETExf
TGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QpIAogICB9CiAgIHJldHVybiByZXN1bHQ7CiB9CisvLyNl
bmRpZgorCiAKICNpZiAwIC8qIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudCAtLSBjYXVzZXMgY29t
cGlsZXIgd2FybmluZ3MgaWYgbm90IHVzZWQgKi8KIHN0YXRpYyB2b2lkIERMTF9QcmludChjb25z
dCBjaGFyKiBsYWJlbCwgY29uc3QgU3BhbiogbGlzdCkgewpAQCAtMTA5Niw5ICsxMTM1LDExIEBA
IGNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwIHsKICNlbmRpZgogCiAgIC8vIER1bXAgc3RhdGUgdG8g
c3RkZXJyCi0jaWZuZGVmIFdURl9DSEFOR0VTCisvLyNpZm5kZWYgV1RGX0NIQU5HRVMKKy8vI2lm
bmRlZiBOREVCVUcKICAgdm9pZCBEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91dCk7Ci0jZW5kaWYK
Ky8vI2VuZGlmCisvLyNlbmRpZgogCiAgIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWxsb2Nh
dGVkIGZyb20gc3lzdGVtCiAgIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRlcygpIGNvbnN0IHsg
cmV0dXJuIHN5c3RlbV9ieXRlc187IH0KQEAgLTE0MzgsNiArMTQ3OSw3IEBAIHZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OkluY3JlbWVudGFsU2NhdmUKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
TWF4UGFnZXMrMTsgaSsrKSB7CiAgICAgaWYgKGluZGV4ID4ga01heFBhZ2VzKSBpbmRleCA9IDA7
CiAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKGluZGV4ID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDog
JmZyZWVfW2luZGV4XTsKKy8vICAgIHdoaWxlICghRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwp
KSB7CiAgICAgaWYgKCFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCkpIHsKICAgICAgIC8vIFJl
bGVhc2UgdGhlIGxhc3Qgc3BhbiBvbiB0aGUgbm9ybWFsIHBvcnRpb24gb2YgdGhpcyBsaXN0CiAg
ICAgICBTcGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OwpAQCAtMTQ0OSw3ICsxNDkxLDcgQEAg
dm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZQogI2VuZGlmCiAgICAgICBE
TExfUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKIAotICAgICAgc2NhdmVuZ2VfY291bnRl
cl8gPSBzdGQ6Om1heDxzaXplX3Q+KDY0VUwsIHN0ZDo6bWluPHNpemVfdD4oa0RlZmF1bHRSZWxl
YXNlRGVsYXksIGtEZWZhdWx0UmVsZWFzZURlbGF5IC0gKGZyZWVfcGFnZXNfIC8ga0RlZmF1bHRS
ZWxlYXNlRGVsYXkpKSk7CisgICAgICBzY2F2ZW5nZV9jb3VudGVyXyA9IHN0ZDo6bWF4PHNpemVf
dD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1bHRS
ZWxlYXNlRGVsYXkgLSAoZnJlZV9wYWdlc18gLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsgLy8x
NlVMOwogCiAgICAgICBpZiAoaW5kZXggPT0ga01heFBhZ2VzICYmICFETExfSXNFbXB0eSgmc2xp
c3QtPm5vcm1hbCkpCiAgICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGluZGV4IC0gMTsKQEAgLTE0
OTEsMTQgKzE1MzMsMTQgQEAgc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1cm5lZEJ5dGVz
KAogfQogI2VuZGlmCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKKy8vI2lmbmRlZiBXVEZfQ0hBTkdF
Uwogc3RhdGljIGRvdWJsZSBQYWdlc1RvTUIodWludDY0X3QgcGFnZXMpIHsKICAgcmV0dXJuIChw
YWdlcyA8PCBrUGFnZVNoaWZ0KSAvIDEwNDg1NzYuMDsKIH0KIAogdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6RHVtcChUQ01hbGxvY19QcmludGVyKiBvdXQpIHsKICAgaW50IG5vbmVtcHR5X3NpemVz
ID0gMDsKLSAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgeworICBmb3IgKHVu
c2lnbmVkIGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7CiAgICAgaWYgKCFETExfSXNF
bXB0eSgmZnJlZV9bc10ubm9ybWFsKSB8fCAhRExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVybmVk
KSkgewogICAgICAgbm9uZW1wdHlfc2l6ZXMrKzsKICAgICB9CkBAIC0xNTA5LDcgKzE1NTEsNyBA
QCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByCiAgIG91dC0+cHJpbnRm
KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwog
ICB1aW50NjRfdCB0b3RhbF9ub3JtYWwgPSAwOwogICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9
IDA7Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgZm9yICh1bnNp
Z25lZCBpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewogICAgIGNvbnN0IGludCBuX2xl
bmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLm5vcm1hbCk7CiAgICAgY29uc3QgaW50IHJfbGVu
Z3RoID0gRExMX0xlbmd0aCgmZnJlZV9bc10ucmV0dXJuZWQpOwogICAgIGlmIChuX2xlbmd0aCAr
IHJfbGVuZ3RoID4gMCkgewpAQCAtMTU1Niw3ICsxNTk4LDcgQEAgdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6RHVtcChUQ01hbGxvY19QcgogICAgICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdlcyks
CiAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwogfQotI2VuZGlmCisv
LyNlbmRpZgogCiBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVhcChMZW5ndGggbikgewog
ICBBU1NFUlQoa01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYyk7CkBAIC0yMzg2LDcgKzI0Mjgs
NyBAQCBpbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuCiAgICAgbGlzdC0+
Y2xlYXJfbG93d2F0ZXJtYXJrKCk7CiAgIH0KIAotICAvL2ludDY0IGZpbmlzaCA9IEN5Y2xlQ2xv
Y2s6Ok5vdygpOworICAvL3VpbnQ2NF90IGZpbmlzaCA9IEN5Y2xlQ2xvY2s6Ok5vdygpOwogICAv
L0N5Y2xlVGltZXIgY3Q7CiAgIC8vTUVTU0FHRSgiR0M6ICUuMGYgbnNcbiIsIGN0LkN5Y2xlc1Rv
VXNlYyhmaW5pc2gtc3RhcnQpKjEwMDAuMCk7CiB9CkBAIC0yNDYyLDYgKzI1MDQsMjAgQEAgdm9p
ZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIAogICAgIHBhZ2VoZWFwLT5pbml0
KCk7CiAgICAgcGhpbml0ZWQgPSAxOwogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIFBMQVRG
T1JNKERBUldJTikKKworICAgIC8vY29waWVkIGZyb20gbWFsbG9jLmMKKyAgICB0Y21hbGxvY19s
b2dnZXIgPSBOVUxMOworICAgICAgCisgICAgY29uc3QgY2hhciAgKmZsYWc7CisgICAgZmxhZyA9
IGdldGVudigiTWFsbG9jU3RhY2tMb2dnaW5nIik7CisgICAgaWYgKCFmbGFnKSB7CisgICAgICAg
IGZsYWcgPSBnZXRlbnYoIk1hbGxvY1N0YWNrTG9nZ2luZ05vQ29tcGFjdCIpOworICAgIH0KKyAg
ICAgCisgICAgaWYgKFVOTElLRUxZKGZsYWcgIT0gTlVMTCkpIHsKKyAgICAgICAgdGNtYWxsb2Nf
bG9nZ2VyID0gX19kaXNrX3N0YWNrX2xvZ2dpbmdfbG9nX3N0YWNrOworICAgIH0KKwogICAgIEZh
c3RNYWxsb2Nab25lOjppbml0KCk7CiAjZW5kaWYKICAgfQpAQCAtMjY3NSwxNCArMjczMSwxNSBA
QCBzdHJ1Y3QgVENNYWxsb2NTdGF0cyB7CiAgIHVpbnQ2NF90IG1ldGFkYXRhX2J5dGVzOyAgICAg
IC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1ldGFkYXRhCiB9OwogCi0jaWZuZGVmIFdURl9DSEFOR0VT
CisjaWZuZGVmIE5ERUJVRworLy8jaWZuZGVmIFdURl9DSEFOR0VTCiAvLyBHZXQgc3RhdHMgaW50
byAiciIuICBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NfY291bnQgIT0g
TlVMTAogc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIsIHVpbnQ2NF90
KiBjbGFzc19jb3VudCkgewogICByLT5jZW50cmFsX2J5dGVzID0gMDsKICAgci0+dHJhbnNmZXJf
Ynl0ZXMgPSAwOwotICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
LSAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAg
Y29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xlbmd0aCgpOworICBm
b3IgKHVuc2lnbmVkIGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7Cisg
ICAgY29uc3QgdW5zaWduZWQgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xl
bmd0aCgpOwogICAgIHItPmNlbnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5
dGVTaXplRm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKICAgICByLT50cmFuc2Zlcl9ieXRlcyArPQog
ICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjX2xl
bmd0aDsKQEAgLTI3MTAsOSArMjc2NywxMiBAQCBzdGF0aWMgdm9pZCBFeHRyYWN0U3RhdHMoVENN
YWxsb2NTdGF0cyogCiAgICAgci0+cGFnZWhlYXBfYnl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVz
KCk7CiAgIH0KIH0KKy8vI2VuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBXVEZfQ0hBTkdFUworLy8j
aWZuZGVmIFdURl9DSEFOR0VTCisKKyNpZm5kZWYgTkRFQlVHCiAvLyBXUklURSBzdGF0cyB0byAi
b3V0Igogc3RhdGljIHZvaWQgRHVtcFN0YXRzKFRDTWFsbG9jX1ByaW50ZXIqIG91dCwgaW50IGxl
dmVsKSB7CiAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CkBAIC0yNzIyLDcgKzI3ODIsNyBAQCBzdGF0
aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlciogCiAgIGlmIChsZXZlbCA+PSAyKSB7
CiAgICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLVxuIik7CiAgICAgdWludDY0X3QgY3VtdWxhdGl2ZSA9IDA7Ci0gICAgZm9yIChp
bnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7CiAgICAgICBpZiAoY2xhc3NfY291
bnRbY2xdID4gMCkgewogICAgICAgICB1aW50NjRfdCBjbGFzc19ieXRlcyA9IGNsYXNzX2NvdW50
W2NsXSAqIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwogICAgICAgICBjdW11bGF0aXZlICs9IGNsYXNz
X2J5dGVzOwpAQCAtMjc2Niw3ICsyODI2LDggQEAgc3RhdGljIHZvaWQgRHVtcFN0YXRzKFRDTWFs
bG9jX1ByaW50ZXIqIAogICAgICAgICAgICAgICB1aW50NjRfdCh0aHJlYWRoZWFwX2FsbG9jYXRv
ci5pbnVzZSgpKSwKICAgICAgICAgICAgICAgc3RhdHMubWV0YWRhdGFfYnl0ZXMpOwogfQotCisj
ZW5kaWYKKyNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgdm9pZCBQcmludFN0YXRzKGludCBsZXZlbCkg
ewogICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAxNiA8PCAxMDsKICAgY2hhciogYnVmZmVyID0g
bmV3IGNoYXJba0J1ZmZlclNpemVdOwpAQCAtMjc3NSw3ICsyODM2LDkgQEAgc3RhdGljIHZvaWQg
UHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKICAgd3JpdGUoU1RERVJSX0ZJTEVOTywgYnVmZmVyLCBz
dHJsZW4oYnVmZmVyKSk7CiAgIGRlbGV0ZVtdIGJ1ZmZlcjsKIH0KKyNlbmRpZgogCisjaWZuZGVm
IFdURl9DSEFOR0VTIC8vKioqCiBzdGF0aWMgdm9pZCoqIER1bXBTdGFja1RyYWNlcygpIHsKICAg
Ly8gQ291bnQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZAogICBpbnQgbmVlZGVkX3Nsb3RzID0gMDsK
QEAgLTI5NDUsNyArMzAwOCw4IEBAIGNsYXNzIFRDTWFsbG9jR3VhcmQgewogI2VuZGlmCiAgIH0K
IAotI2lmbmRlZiBXVEZfQ0hBTkdFUworLy8jaWZuZGVmIFdURl9DSEFOR0VTCisjaWZuZGVmIE5E
RUJVRwogICB+VENNYWxsb2NHdWFyZCgpIHsKICAgICBjb25zdCBjaGFyKiBlbnYgPSBnZXRlbnYo
Ik1BTExPQ1NUQVRTIik7CiAgICAgaWYgKGVudiAhPSBOVUxMKSB7CkBAIC0yOTU4LDYgKzMwMjIs
NyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJkIHsKICNlbmRpZgogICB9CiAjZW5kaWYKKy8vI2VuZGlm
CiB9OwogCiAjaWZuZGVmIFdURl9DSEFOR0VTCkBAIC0zMjMyLDEyICszMjk3LDE2IEBAIHZvaWQq
IG1hbGxvYyhzaXplX3QpOwogCiB2b2lkKiBmYXN0TWFsbG9jKHNpemVfdCBzaXplKQogewotICAg
IHJldHVybiBtYWxsb2M8dHJ1ZT4oc2l6ZSk7CisgICAgdm9pZCogcHRyID0gbWFsbG9jPHRydWU+
KHNpemUpOworICAgIGlmIChVTkxJS0VMWSh0Y21hbGxvY19sb2dnZXIgIT0gMCkpIHRjbWFsbG9j
X2xvZ2dlcihNQUxMT0NfTE9HX1RZUEVfQUxMT0NBVEUgLCAwLCAodWludHB0cl90KXNpemUsIDAs
ICh1aW50cHRyX3QpcHRyLCAwKTsKKyAgICByZXR1cm4gcHRyOwogfQogCiB2b2lkKiB0cnlGYXN0
TWFsbG9jKHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBtYWxsb2M8ZmFsc2U+KHNpemUpOwor
ICAgIHZvaWQqIHB0ciA9IG1hbGxvYzxmYWxzZT4oc2l6ZSk7CisgICAgaWYgKFVOTElLRUxZKHRj
bWFsbG9jX2xvZ2dlciAhPSAwKSkgdGNtYWxsb2NfbG9nZ2VyKE1BTExPQ19MT0dfVFlQRV9BTExP
Q0FURSAsIDAsICh1aW50cHRyX3Qpc2l6ZSwgMCwgKHVpbnRwdHJfdClwdHIsIDApOworICAgIHJl
dHVybiBwdHI7CiB9CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgpAQCAtMzI1OCw2
ICszMzI3LDcgQEAgdm9pZCBmcmVlKHZvaWQqIHB0cikgewogI2lmbmRlZiBXVEZfQ0hBTkdFUwog
ICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHB0cik7CiAjZW5kaWYKKyAgaWYgKFVOTElL
RUxZKHRjbWFsbG9jX2xvZ2dlciAhPSAwKSkgdGNtYWxsb2NfbG9nZ2VyKE1BTExPQ19MT0dfVFlQ
RV9ERUFMTE9DQVRFLCAwLCAodWludHB0cl90KXB0ciwgMCwgMCwgMCk7CiAgIGRvX2ZyZWUocHRy
KTsKIH0KIApAQCAtMzI2OSwxMiArMzMzOSwxNiBAQCB2b2lkKiBjYWxsb2Moc2l6ZV90LCBzaXpl
X3QpOwogCiB2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKQogewot
ICAgIHJldHVybiBjYWxsb2M8dHJ1ZT4obiwgZWxlbV9zaXplKTsKKyAgICB2b2lkKiBwdHIgPSBj
YWxsb2M8dHJ1ZT4obiwgZWxlbV9zaXplKTsKKyAgICBpZiAoVU5MSUtFTFkodGNtYWxsb2NfbG9n
Z2VyICE9IDApKSB0Y21hbGxvY19sb2dnZXIoTUFMTE9DX0xPR19UWVBFX0FMTE9DQVRFIHwgTUFM
TE9DX0xPR19UWVBFX0NMRUFSRUQgLCAwLCAodWludHB0cl90KShuICogZWxlbV9zaXplKSwgMCwg
KHVpbnRwdHJfdClwdHIsIDApOworICAgIHJldHVybiBwdHI7CiB9CiAKIHZvaWQqIHRyeUZhc3RD
YWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCiB7Ci0gICAgcmV0dXJuIGNhbGxvYzxm
YWxzZT4obiwgZWxlbV9zaXplKTsKKyAgICB2b2lkKiBwdHIgPSBjYWxsb2M8ZmFsc2U+KG4sIGVs
ZW1fc2l6ZSk7CisgICAgaWYgKFVOTElLRUxZKHRjbWFsbG9jX2xvZ2dlciAhPSAwKSkgdGNtYWxs
b2NfbG9nZ2VyKE1BTExPQ19MT0dfVFlQRV9BTExPQ0FURSB8IE1BTExPQ19MT0dfVFlQRV9DTEVB
UkVEICwgMCwgKHVpbnRwdHJfdCkobiAqIGVsZW1fc2l6ZSksIDAsICh1aW50cHRyX3QpcHRyLCAw
KTsKKyAgICByZXR1cm4gcHRyOwogfQogCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4K
QEAgLTMzMTUsMTIgKzMzODksMTYgQEAgdm9pZCogcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKIAog
dm9pZCogZmFzdFJlYWxsb2Modm9pZCogb2xkX3B0ciwgc2l6ZV90IG5ld19zaXplKQogewotICAg
IHJldHVybiByZWFsbG9jPHRydWU+KG9sZF9wdHIsIG5ld19zaXplKTsKKyAgICB2b2lkKiBuZXdf
cHRyID0gcmVhbGxvYzx0cnVlPihvbGRfcHRyLCBuZXdfc2l6ZSk7CisgICAgaWYgKFVOTElLRUxZ
KHRjbWFsbG9jX2xvZ2dlciAhPSAwKSkgdGNtYWxsb2NfbG9nZ2VyKE1BTExPQ19MT0dfVFlQRV9B
TExPQ0FURSB8IE1BTExPQ19MT0dfVFlQRV9ERUFMTE9DQVRFICwgMCwgKHVpbnRwdHJfdClvbGRf
cHRyLCAodWludHB0cl90KW5ld19zaXplLCAodWludHB0cl90KW5ld19wdHIsIDApOworICAgIHJl
dHVybiBuZXdfcHRyOwogfQogCiB2b2lkKiB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBz
aXplX3QgbmV3X3NpemUpCiB7Ci0gICAgcmV0dXJuIHJlYWxsb2M8ZmFsc2U+KG9sZF9wdHIsIG5l
d19zaXplKTsKKyAgICB2b2lkKiBuZXdfcHRyID0gIHJlYWxsb2M8ZmFsc2U+KG9sZF9wdHIsIG5l
d19zaXplKTsKKyAgICBpZiAoVU5MSUtFTFkodGNtYWxsb2NfbG9nZ2VyICE9IDApKSB0Y21hbGxv
Y19sb2dnZXIoTUFMTE9DX0xPR19UWVBFX0FMTE9DQVRFIHwgTUFMTE9DX0xPR19UWVBFX0RFQUxM
T0NBVEUgLCAwLCAodWludHB0cl90KW9sZF9wdHIsICh1aW50cHRyX3QpbmV3X3NpemUsICh1aW50
cHRyX3QpbmV3X3B0ciwgMCk7CisgICAgcmV0dXJuIG5ld19wdHI7CiB9CiAKIHRlbXBsYXRlIDxi
b29sIGNyYXNoT25GYWlsdXJlPgpAQCAtMzgyMCw3ICszODk4LDYgQEAgdm9pZCByZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnkoKQogICAgICAgICB0aHJlYWRDYWNoZS0+U2NhdmVuZ2UoKTsKICAg
ICAgICAgdGhyZWFkQ2FjaGUtPlNjYXZlbmdlKCk7CiAgICAgfQotCiAgICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7CiAgICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsK
IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAzOTEyMCkKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiArMjkzLDggQEAK
ICNkZWZpbmUgSEFWRV9SRUFETElORSAxCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAjZGVmaW5lIEhBVkVfRFRSQUNFIDEK
KyNkZWZpbmUgSEFWRV9NQURWX0RPTlRORUVEIDEKKyNkZWZpbmUgSEFWRV9NQURWX0ZSRUUgMQog
I2VuZGlmCiAjZW5kaWYKIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1RDU3lzdGVtQWxsb2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcAko
cmV2aXNpb24gMzkxMjApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVENTeXN0ZW1BbGxvYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4NSw3ICszODUsOSBAQCB2b2lkIFRDTWFsbG9jX1N5c3RlbVJl
bGVhc2Uodm9pZCogc3RhcnQsCiB7CiAgIFVOVVNFRF9QQVJBTShzdGFydCk7CiAgIFVOVVNFRF9Q
QVJBTShsZW5ndGgpOwotI2lmIEhBVkUoTUFEVl9ET05UTkVFRCkKKyAgLy9wcmludGYoICJSZWxl
YXNlZDogJWx1XG4iLCAodW5zaWduZWQgbG9uZyBpbnQpbGVuZ3RoKTsKKy8vI2lmIEhBVkUoTUFE
Vl9ET05UTkVFRCkKKyNpZiBIQVZFKE1BRFZfRlJFRSkKICAgaWYgKEZMQUdTX21hbGxvY19kZXZt
ZW1fc3RhcnQpIHsKICAgICAvLyBJdCdzIG5vdCBzYWZlIHRvIHVzZSBNQURWX0RPTlRORUVEIGlm
IHdlJ3ZlIGJlZW4gbWFwcGluZwogICAgIC8vIC9kZXYvbWVtIGZvciBoZWFwIG1lbW9yeQpAQCAt
NDEyLDcgKzQxNCw4IEBAIHZvaWQgVENNYWxsb2NfU3lzdGVtUmVsZWFzZSh2b2lkKiBzdGFydCwK
ICAgICAvLyBOb3RlIC0tIGlnbm9yaW5nIG1vc3QgcmV0dXJuIGNvZGVzLCBiZWNhdXNlIGlmIHRo
aXMgZmFpbHMgaXQKICAgICAvLyBkb2Vzbid0IG1hdHRlci4uLgogICAgIHdoaWxlIChtYWR2aXNl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld19zdGFydCksIG5ld19lbmQgLSBuZXdfc3RhcnQs
Ci0gICAgICAgICAgICAgICAgICAgTUFEVl9ET05UTkVFRCkgPT0gLTEgJiYKKyAvLyAgICAgICAg
ICAgICAgICAgIE1BRFZfRE9OVE5FRUQpID09IC0xICYmCisgICAgICAgICAgICAgICAgICAgICBN
QURWX0ZSRUUpID09IC0xICYmCiAgICAgICAgICAgIGVycm5vID09IEVBR0FJTikgewogICAgICAg
Ly8gTk9QCiAgICAgfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5MTIwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAwOC0xMi0wOCAgU3RlcGhhbmllIExld2lz
ICA8c2xld2lzQGFwcGxlLmNvbWU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWNjb3VudCBmb3IgdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIGFuZCBy
ZXF1ZXN0IGhlYWRlcnMgYXMgd2VsbCBhcyBvdGhlciBvdmVyaGVhZAorICAgICAgICB3aGVuIGNh
bGN1bGF0aW5nIHRoZSBzaXplIGEgcmVzb3VyY2UgdGFrZXMgdXAgaW4gdGhlIGNhY2hlLiAgSGFs
dHMgdW5ib3VuZGVkIAorICAgICAgICBncm93dGggaW4gdGhlIGNhY2hlLiAgUmVkdWNlZCBzdHJl
c3MgdGVzdCBtZW1vcnkgaGlnaCB3YXRlciBtYXJrcyBieSA+IDUwJS4KKworICAgICAgICAqIGxv
YWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmV2YWxpZGF0aW9uU3Vj
Y2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpldmljdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6bHJ1TGlzdEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVzb3Vy
Y2VBY2Nlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6YWRkVG9MaXZlUmVzb3VyY2Vz
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpUeXBlU3RhdGlzdGljOjphZGRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6ZHVtcExSVUxpc3RzKToKKyAgICAgICAgKiBs
b2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6Om92ZXJoZWFkU2l6ZSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6CisK
IDIwMDgtMTEtMjYgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9u
IDM5MTIwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTksNyArMjE5LDcgQEAgdm9pZCBDYWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZAog
ICAgIHJlc291cmNlLT5zZXRJbkNhY2hlKHRydWUpOwogICAgIHJlc291cmNlLT5zZXRFeHBpcmF0
aW9uRGF0ZShyZXNwb25zZS5leHBpcmF0aW9uRGF0ZSgpKTsKICAgICBpbnNlcnRJbkxSVUxpc3Qo
cmVzb3VyY2UpOwotICAgIGludCBkZWx0YSA9IHJlc291cmNlLT5zaXplKCk7CisgICAgaW50IGRl
bHRhID0gcmVzb3VyY2UtPnNpemUoKSArIHJlc291cmNlLT5vdmVyaGVhZFNpemUoKTsKICAgICBp
ZiAocmVzb3VyY2UtPmRlY29kZWRTaXplKCkgJiYgcmVzb3VyY2UtPmhhc0NsaWVudHMoKSkKICAg
ICAgICAgaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QocmVzb3VyY2UpOwogICAgIGlm
IChkZWx0YSkKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIENhY2hlOjpldmljdChDYWNoZWRSZXNv
dXJjZSogcmVzb3VyCiAgICAgICAgICAgICAoKml0ciktPnJlbW92ZUNhY2hlZFJlc291cmNlKHJl
c291cmNlKTsKIAogICAgICAgICAvLyBTdWJ0cmFjdCBmcm9tIG91ciBzaXplIHRvdGFscy4KLSAg
ICAgICAgaW50IGRlbHRhID0gLXN0YXRpY19jYXN0PGludD4ocmVzb3VyY2UtPnNpemUoKSk7Cisg
ICAgICAgIGludCBkZWx0YSA9IC1zdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlLT5zaXplKCkgKyBy
ZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOwogICAgICAgICBpZiAoZGVsdGEpCiAgICAgICAgICAg
ICBhZGp1c3RTaXplKHJlc291cmNlLT5oYXNDbGllbnRzKCksIGRlbHRhKTsKICAgICB9IGVsc2UK
QEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZhc3RMb2cyKHVuc2ln
bmVkCiBDYWNoZTo6TFJVTGlzdCogQ2FjaGU6OmxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQogewogICAgIHVuc2lnbmVkIGFjY2Vzc0NvdW50ID0gbWF4KHJlc291cmNlLT5hY2Nl
c3NDb3VudCgpLCAxVSk7Ci0gICAgdW5zaWduZWQgcXVldWVJbmRleCA9IGZhc3RMb2cyKHJlc291
cmNlLT5zaXplKCkgLyBhY2Nlc3NDb3VudCk7CisgICAgdW5zaWduZWQgcXVldWVJbmRleCA9IGZh
c3RMb2cyKChyZXNvdXJjZS0+c2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKSAvIGFj
Y2Vzc0NvdW50KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgcmVzb3VyY2UtPm1fbHJ1SW5kZXggPSBx
dWV1ZUluZGV4OwogI2VuZGlmCkBAIC01NDksNiArNTQ5LDEwIEBAIHZvaWQgQ2FjaGU6OnJlc291
cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3UKICAgICAvLyB0aGUgcXVldWUgd2lsbCBwb3NzaWJseSBj
aGFuZ2UuCiAgICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3VyY2UpOwogICAgIAorICAgIC8vIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHJlc291cmNlIGhhcyBiZWVuIGFjY2Vzc2VkLCBh
ZGp1c3QgdGhlIHNpemUgb2YgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIGl0cyBpbml0aWFsIHNp
emUuCisgICAgaWYgKCFyZXNvdXJjZS0+YWNjZXNzQ291bnQoKSkKKyAgICAgICAgYWRqdXN0U2l6
ZShyZXNvdXJjZS0+aGFzQ2xpZW50cygpLCByZXNvdXJjZS0+c2l6ZSgpICsgcmVzb3VyY2UtPm92
ZXJoZWFkU2l6ZSgpKTsKKyAgICAKICAgICAvLyBBZGQgdG8gb3VyIGFjY2VzcyBjb3VudC4KICAg
ICByZXNvdXJjZS0+aW5jcmVhc2VBY2Nlc3NDb3VudCgpOwogICAgIApAQCAtNjI1LDE0ICs2Mjks
MTQgQEAgdm9pZCBDYWNoZTo6aW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlcwogCiB2b2lkIENh
Y2hlOjphZGRUb0xpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsK
LSAgICBtX2xpdmVTaXplICs9IHJlc291cmNlLT5zaXplKCk7Ci0gICAgbV9kZWFkU2l6ZSAtPSBy
ZXNvdXJjZS0+c2l6ZSgpOworICAgIG1fZGVhZFNpemUgLT0gKHJlc291cmNlLT5zaXplKCkgKyBy
ZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOworICAgIG1fbGl2ZVNpemUgKz0gKHJlc291cmNlLT5z
aXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOwogfQogCiB2b2lkIENhY2hlOjpyZW1v
dmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogewotICAg
IG1fbGl2ZVNpemUgLT0gcmVzb3VyY2UtPnNpemUoKTsKLSAgICBtX2RlYWRTaXplICs9IHJlc291
cmNlLT5zaXplKCk7CisgICAgbV9saXZlU2l6ZSAtPSAocmVzb3VyY2UtPnNpemUoKSArIHJlc291
cmNlLT5vdmVyaGVhZFNpemUoKSk7CisgICAgbV9kZWFkU2l6ZSArPSAocmVzb3VyY2UtPnNpemUo
KSArIHJlc291cmNlLT5vdmVyaGVhZFNpemUoKSk7CiB9CiAKIHZvaWQgQ2FjaGU6OmFkanVzdFNp
emUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCkBAIC02NTAsMTAgKzY1NCwxMCBAQCB2b2lkIENhY2hl
OjpUeXBlU3RhdGlzdGljOjphZGRSZXNvdXJjZShDCiB7CiAgICAgYm9vbCBwdXJnZWQgPSBvLT53
YXNQdXJnZWQoKTsKICAgICBib29sIHB1cmdlYWJsZSA9IG8tPmlzUHVyZ2VhYmxlKCkgJiYgIXB1
cmdlZDsgCi0gICAgaW50IHBhZ2VTaXplID0gKG8tPmVuY29kZWRTaXplKCkgKyA0MDk1KSAmIH40
MDk1OworICAgIGludCBwYWdlU2l6ZSA9IChvLT5lbmNvZGVkU2l6ZSgpICsgby0+b3ZlcmhlYWRT
aXplKCkgKyA0MDk1KSAmIH40MDk1OwogICAgIGNvdW50Kys7Ci0gICAgc2l6ZSArPSBwdXJnZWQg
PyAwIDogby0+c2l6ZSgpOyAKLSAgICBsaXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5z
aXplKCkgOiAwOworICAgIHNpemUgKz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKSArIG8tPm92ZXJo
ZWFkU2l6ZSgpOyAKKyAgICBsaXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkg
KyBvLT5vdmVyaGVhZFNpemUoKSA6IDA7CiAgICAgZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNp
emUoKTsKICAgICBwdXJnZWFibGVTaXplICs9IHB1cmdlYWJsZSA/IHBhZ2VTaXplIDogMDsKICAg
ICBwdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKQEAgLTczNiw3ICs3NDAsNyBA
QCB2b2lkIENhY2hlOjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2CiAgICAgICAgIHdoaWxl
IChjdXJyZW50KSB7CiAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQt
Pm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKICAgICAgICAgICAgIGlmIChpbmNsdWRlTGl2ZSB8
fCAhY3VycmVudC0+aGFzQ2xpZW50cygpKQotICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZL
LCAlLjFmSywgJXVBLCAlZFIpOyAiLCBjdXJyZW50LT5kZWNvZGVkU2l6ZSgpIC8gMTAyNC4wZiwg
Y3VycmVudC0+ZW5jb2RlZFNpemUoKSAvIDEwMjQuMGYsIGN1cnJlbnQtPmFjY2Vzc0NvdW50KCks
IGN1cnJlbnQtPmhhc0NsaWVudHMoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIoJS4xZkss
ICUuMWZLLCAldUEsICVkUik7ICIsIGN1cnJlbnQtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBmLCAo
Y3VycmVudC0+ZW5jb2RlZFNpemUoKSArIGN1cnJlbnQtPm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQu
MGYsIGN1cnJlbnQtPmFjY2Vzc0NvdW50KCksIGN1cnJlbnQtPmhhc0NsaWVudHMoKSk7CiAgICAg
ICAgICAgICBjdXJyZW50ID0gcHJldjsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDM5MTIwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzQsNCArMzc0LDE3IEBAIGJvb2wg
Q2FjaGVkUmVzb3VyY2U6Ondhc1B1cmdlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHVyZ2VhYmxl
RGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPndhc1B1cmdlZCgpOwogfQogCit1bnNpZ25lZCBDYWNo
ZWRSZXNvdXJjZTo6b3ZlcmhlYWRTaXplKCkgeworICAgCisgICAgLy8gRklYTUU6IEZpbmQgc29t
ZSBwcm9ncmFtbWF0aWMgbGlnaHdlaWdodCB3YXkgdG8gY2FsY3VsYXRlIHJlc3BvbnNlIHNpemUs
IGFuZCBzaXplIG9mIHRoZSBkaWZmZXJlbnQgQ2FjaGVkUmVzb3VyY2UgY2xhc3Nlcy4gIAorICAg
IC8vIFRoaXMgaXMgYSByb3VnaCBlc3RpbWF0ZSBvZiByZXNvdXJjZSBvdmVyaGVhZCBiYXNlZCBv
biBzdGF0cyBjb2xsZWN0ZWQgZnJvbSB0aGUgc3RyZXNzIHRlc3QuCisgICAgcmV0dXJuIChzaXpl
b2YoQ2FjaGVkUmVzb3VyY2UpICsgMTkyICsgIC8vIGF2ZXJhZ2Ugc2l6ZSBvZiBtX3VybC4KKyAg
ICAgICAgICAgODk2ICogMiArICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZlcmFnZSBzaXpl
IG9mIFJlc291cmNlUmVzcG9uc2UuICBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBXZWJDb3Jl
IGNvcHkgYW5kIHRoZSBXZWJLaXQgY29weS4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1vc3RseSBkdWUgdG8gdGhlIEhlYWRlciBNYXAgYW5kIFVSTC4K
KyAgICAgICAgICAgODk2ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0ZOZXR3b3Jr
IG92ZXJoZWFkIGZyb20gcmVhZGluZyBhbmQgcGFyc2luZyB0aGUgaGVhZGVycy4KKyAgICAgICAg
ICAgMjU2ICogMiArICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcmhlYWQgZnJvbSBSZXNv
dXJjZVJlcXVlc3QsIGRvdWJsZWQgdG8gYWNjb3VudCBmb3IgV2ViQ29yZSBjb3B5IGFuZCBXZWJL
aXQgY29weS4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE1vc3RseSBkdWUgdG8gdGhlIFVSTCBhbmQgSGVhZGVyIE1hcC4KKyAgICAgICAgICAgMTQ4KTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAgdG8gNC4wS0IuCit9CisKIH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMzkxMjApCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBlbmNvZGVkU2l6
ZSgpICsgZGVjb2RlZFNpemUoKTsgfQogICAgIHVuc2lnbmVkIGVuY29kZWRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmNvZGVkU2l6ZTsgfQogICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQorICAgIHVuc2lnbmVkIG92ZXJoZWFkU2l6ZSgp
OwogICAgIAogICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9
CiAgICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wgYikgeyBtX2xvYWRpbmcgPSBiOyB9CkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMzkxMjApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQyNCw3ICs0NDI0LDcgQEAgc3RhdGljIFdl
YkZyYW1lVmlldyAqY29udGFpbmluZ0ZyYW1lVmlldwogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbFBy
aW1hcnlXZWJCcm93c2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBh
Z2VzKQogICAgICAgICAvLyAoUmVzZWFyY2ggaW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBwYWdlIGRy
b3BzIHN1YnN0YW50aWFsbHkgYWZ0ZXIgMyBwYWdlcy4pCi0gICAgICAgIGlmIChtZW1TaXplID49
IDIwNDgpCisgICAgICAgIC8qaWYgKG1lbVNpemUgPj0gMjA0OCkKICAgICAgICAgICAgIHBhZ2VD
YWNoZUNhcGFjaXR5ID0gNTsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0KQogICAg
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSA0OwpAQCAtNDQzMiwxNCArNDQzMiwxNCBAQCBz
dGF0aWMgV2ViRnJhbWVWaWV3ICpjb250YWluaW5nRnJhbWVWaWV3CiAgICAgICAgICAgICBwYWdl
Q2FjaGVDYXBhY2l0eSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQogICAg
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOwotICAgICAgICBlbHNlCisgICAgICAgIGVs
c2UqLwogICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAxOwogCiAgICAgICAgIC8vIE9i
amVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAgICAgICAgLy8gKFRlc3RpbmcgaW5k
aWNhdGVzIHRoYXQgdmFsdWUgLyBNQiBkZXBlbmRzIGhlYXZpbHkgb24gY29udGVudCBhbmQKICAg
ICAgICAgLy8gYnJvd3NpbmcgcGF0dGVybi4gRXZlbiBncm93dGggYWJvdmUgMTI4TUIgY2FuIGhh
dmUgc3Vic3RhbnRpYWwgCiAgICAgICAgIC8vIHZhbHVlIC8gTUIgZm9yIHNvbWUgY29udGVudCAv
IGJyb3dzaW5nIHBhdHRlcm5zLikKLSAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0OCkKKyAgICAg
ICAgLyppZiAobWVtU2l6ZSA+PSAyMDQ4KQogICAgICAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5
ID0gMjU2ICogMTAyNCAqIDEwMjQ7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMTUzNikK
ICAgICAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSA9IDE3MiAqIDEwMjQgKiAxMDI0OwpAQCAt
NDQ0NywyNyArNDQ0NywyNyBAQCBzdGF0aWMgV2ViRnJhbWVWaWV3ICpjb250YWluaW5nRnJhbWVW
aWV3CiAgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAxMjggKiAxMDI0ICogMTAyNDsK
ICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSA1MTIpCiAgICAgICAgICAgICBjYWNoZVRvdGFs
Q2FwYWNpdHkgPSA2NCAqIDEwMjQgKiAxMDI0OwotICAgICAgICBlbHNlIGlmIChtZW1TaXplID49
IDI1NikKKyAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpKi8KICAgICAgICAgICAgIGNh
Y2hlVG90YWxDYXBhY2l0eSA9IDMyICogMTAyNCAqIDEwMjQ7IAogCi0gICAgICAgIGNhY2hlTWlu
RGVhZENhcGFjaXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gNDsKKyAgICAgICAgY2FjaGVNaW5E
ZWFkQ2FwYWNpdHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyAyOwogICAgICAgICBjYWNoZU1heERl
YWRDYXBhY2l0eSA9IGNhY2hlVG90YWxDYXBhY2l0eSAvIDI7CiAKICAgICAgICAgLy8gVGhpcyBj
b2RlIGlzIGhlcmUgdG8gYXZvaWQgYSBQTFQgcmVncmVzc2lvbi4gV2UgY2FuIHJlbW92ZSBpdCBp
ZiB3ZQogICAgICAgICAvLyBjYW4gcHJvdmUgdGhhdCB0aGUgb3ZlcmFsbCBzeXN0ZW0gZ2FpbiB3
b3VsZCBqdXN0aWZ5IHRoZSByZWdyZXNzaW9uLgotICAgICAgICBjYWNoZU1heERlYWRDYXBhY2l0
eSA9IG1heCgyNHUsIGNhY2hlTWF4RGVhZENhcGFjaXR5KTsKKyAgICAgICAgLy9jYWNoZU1heERl
YWRDYXBhY2l0eSA9IG1heCgyNHUsIGNhY2hlTWF4RGVhZENhcGFjaXR5KTsKIAogICAgICAgICBk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gNjA7CiAKICAgICAgICAgLy8gRm91bmRh
dGlvbiBtZW1vcnkgY2FjaGUgY2FwYWNpdHkgKGluIGJ5dGVzKQogICAgICAgICAvLyAoVGhlc2Ug
dmFsdWVzIGFyZSBzbWFsbCBiZWNhdXNlIFdlYkNvcmUgZG9lcyBtb3N0IGNhY2hpbmcgaXRzZWxm
LikKLSAgICAgICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKKyAgICAgICAgLyppZiAobWVtU2l6ZSA+
PSAxMDI0KQogICAgICAgICAgICAgbnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gNCAqIDEwMjQg
KiAxMDI0OwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKICAgICAgICAgICAgIG5z
dXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDIgKiAxMDI0ICogMTAyNDsKICAgICAgICAgZWxzZSBp
ZiAobWVtU2l6ZSA+PSAyNTYpCiAgICAgICAgICAgICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkg
PSAxICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSovCiAgICAgICAg
ICAgICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAgICAgIDUxMiAqIDEwMjQ7IAogCiAgICAg
ICAgIC8vIEZvdW5kYXRpb24gZGlzayBjYWNoZSBjYXBhY2l0eSAoaW4gYnl0ZXMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25868</attachid>
            <date>2008-12-08 19:20:30 -0800</date>
            <delta_ts>2008-12-10 22:15:51 -0800</delta_ts>
            <desc>patch to set minimum resource size in cache</desc>
            <filename>CachePatchFinal</filename>
            <type>text/plain</type>
            <size>6779</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5MTIw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDgtMTIt
MDggIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb21lPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFjY291bnQgZm9yIHRoZSBzaXplIG9m
IHRoZSByZXNwb25zZSBhbmQgcmVxdWVzdCBoZWFkZXJzIGFzIHdlbGwgYXMgb3RoZXIgb3Zlcmhl
YWQKKyAgICAgICAgd2hlbiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBhIHJlc291cmNlIHRha2VzIHVw
IGluIHRoZSBjYWNoZS4gIEhhbHRzIHVuYm91bmRlZCAKKyAgICAgICAgZ3Jvd3RoIGluIHRoZSBj
YWNoZS4gIFJlZHVjZWQgc3RyZXNzIHRlc3QgbWVtb3J5IGhpZ2ggd2F0ZXIgbWFya3MgYnkgPiA1
MCUuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6ZXZp
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmxydUxpc3RGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGU6OnJlc291cmNlQWNjZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6
OmFkZFRvTGl2ZVJlc291cmNlc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92
ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6VHlwZVN0
YXRpc3RpYzo6YWRkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmR1bXBMUlVM
aXN0cyk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpvdmVyaGVhZFNpemUpOgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRSZXNvdXJjZS5oOgorCiAyMDA4LTExLTI2ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4
OiBsb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZS5jcHAJKHJldmlz
aW9uIDM5MTIwKQorKysgbG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcg
KzIxOSw3IEBAIHZvaWQgQ2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWQKICAgICBy
ZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVlKTsKICAgICByZXNvdXJjZS0+c2V0RXhwaXJhdGlvbkRh
dGUocmVzcG9uc2UuZXhwaXJhdGlvbkRhdGUoKSk7CiAgICAgaW5zZXJ0SW5MUlVMaXN0KHJlc291
cmNlKTsKLSAgICBpbnQgZGVsdGEgPSByZXNvdXJjZS0+c2l6ZSgpOworICAgIGludCBkZWx0YSA9
IHJlc291cmNlLT5zaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCk7CiAgICAgaWYgKHJl
c291cmNlLT5kZWNvZGVkU2l6ZSgpICYmIHJlc291cmNlLT5oYXNDbGllbnRzKCkpCiAgICAgICAg
IGluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKICAgICBpZiAoZGVs
dGEpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBDYWNoZTo6ZXZpY3QoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cgogICAgICAgICAgICAgKCppdHIpLT5yZW1vdmVDYWNoZWRSZXNvdXJjZShyZXNvdXJj
ZSk7CiAKICAgICAgICAgLy8gU3VidHJhY3QgZnJvbSBvdXIgc2l6ZSB0b3RhbHMuCi0gICAgICAg
IGludCBkZWx0YSA9IC1zdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlLT5zaXplKCkpOworICAgICAg
ICBpbnQgZGVsdGEgPSAtc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZS0+c2l6ZSgpICsgcmVzb3Vy
Y2UtPm92ZXJoZWFkU2l6ZSgpKTsKICAgICAgICAgaWYgKGRlbHRhKQogICAgICAgICAgICAgYWRq
dXN0U2l6ZShyZXNvdXJjZS0+aGFzQ2xpZW50cygpLCBkZWx0YSk7CiAgICAgfSBlbHNlCkBAIC00
NTMsNyArNDUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBmYXN0TG9nMih1bnNpZ25lZAog
Q2FjaGU6OkxSVUxpc3QqIENhY2hlOjpscnVMaXN0Rm9yKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSkKIHsKICAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCA9IG1heChyZXNvdXJjZS0+YWNjZXNzQ291
bnQoKSwgMVUpOwotICAgIHVuc2lnbmVkIHF1ZXVlSW5kZXggPSBmYXN0TG9nMihyZXNvdXJjZS0+
c2l6ZSgpIC8gYWNjZXNzQ291bnQpOworICAgIHVuc2lnbmVkIHF1ZXVlSW5kZXggPSBmYXN0TG9n
MigocmVzb3VyY2UtPnNpemUoKSArIHJlc291cmNlLT5vdmVyaGVhZFNpemUoKSkgLyBhY2Nlc3ND
b3VudCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlc291cmNlLT5tX2xydUluZGV4ID0gcXVldWVJ
bmRleDsKICNlbmRpZgpAQCAtNTQ5LDYgKzU0OSwxMCBAQCB2b2lkIENhY2hlOjpyZXNvdXJjZUFj
Y2Vzc2VkKENhY2hlZFJlc291CiAgICAgLy8gdGhlIHF1ZXVlIHdpbGwgcG9zc2libHkgY2hhbmdl
LgogICAgIHJlbW92ZUZyb21MUlVMaXN0KHJlc291cmNlKTsKICAgICAKKyAgICAvLyBJZiB0aGlz
IGlzIHRoZSBmaXJzdCB0aW1lIHRoZSByZXNvdXJjZSBoYXMgYmVlbiBhY2Nlc3NlZCwgYWRqdXN0
IHRoZSBzaXplIG9mIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciBpdHMgaW5pdGlhbCBzaXplLgor
ICAgIGlmICghcmVzb3VyY2UtPmFjY2Vzc0NvdW50KCkpCisgICAgICAgIGFkanVzdFNpemUocmVz
b3VyY2UtPmhhc0NsaWVudHMoKSwgcmVzb3VyY2UtPnNpemUoKSArIHJlc291cmNlLT5vdmVyaGVh
ZFNpemUoKSk7CisgICAgCiAgICAgLy8gQWRkIHRvIG91ciBhY2Nlc3MgY291bnQuCiAgICAgcmVz
b3VyY2UtPmluY3JlYXNlQWNjZXNzQ291bnQoKTsKICAgICAKQEAgLTYyNSwxNCArNjI5LDE0IEBA
IHZvaWQgQ2FjaGU6Omluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXMKIAogdm9pZCBDYWNoZTo6
YWRkVG9MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAg
bV9saXZlU2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgpOwotICAgIG1fZGVhZFNpemUgLT0gcmVzb3Vy
Y2UtPnNpemUoKTsKKyAgICBtX2RlYWRTaXplIC09IChyZXNvdXJjZS0+c2l6ZSgpICsgcmVzb3Vy
Y2UtPm92ZXJoZWFkU2l6ZSgpKTsKKyAgICBtX2xpdmVTaXplICs9IChyZXNvdXJjZS0+c2l6ZSgp
ICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKTsKIH0KIAogdm9pZCBDYWNoZTo6cmVtb3ZlRnJv
bUxpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKLSAgICBtX2xp
dmVTaXplIC09IHJlc291cmNlLT5zaXplKCk7Ci0gICAgbV9kZWFkU2l6ZSArPSByZXNvdXJjZS0+
c2l6ZSgpOworICAgIG1fbGl2ZVNpemUgLT0gKHJlc291cmNlLT5zaXplKCkgKyByZXNvdXJjZS0+
b3ZlcmhlYWRTaXplKCkpOworICAgIG1fZGVhZFNpemUgKz0gKHJlc291cmNlLT5zaXplKCkgKyBy
ZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOwogfQogCiB2b2lkIENhY2hlOjphZGp1c3RTaXplKGJv
b2wgbGl2ZSwgaW50IGRlbHRhKQpAQCAtNjUwLDEwICs2NTQsMTAgQEAgdm9pZCBDYWNoZTo6VHlw
ZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UoQwogewogICAgIGJvb2wgcHVyZ2VkID0gby0+d2FzUHVy
Z2VkKCk7CiAgICAgYm9vbCBwdXJnZWFibGUgPSBvLT5pc1B1cmdlYWJsZSgpICYmICFwdXJnZWQ7
IAotICAgIGludCBwYWdlU2l6ZSA9IChvLT5lbmNvZGVkU2l6ZSgpICsgNDA5NSkgJiB+NDA5NTsK
KyAgICBpbnQgcGFnZVNpemUgPSAoby0+ZW5jb2RlZFNpemUoKSArIG8tPm92ZXJoZWFkU2l6ZSgp
ICsgNDA5NSkgJiB+NDA5NTsKICAgICBjb3VudCsrOwotICAgIHNpemUgKz0gcHVyZ2VkID8gMCA6
IG8tPnNpemUoKTsgCi0gICAgbGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgp
IDogMDsKKyAgICBzaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCkgKyBvLT5vdmVyaGVhZFNp
emUoKTsgCisgICAgbGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpICsgby0+
b3ZlcmhlYWRTaXplKCkgOiAwOwogICAgIGRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7
CiAgICAgcHVyZ2VhYmxlU2l6ZSArPSBwdXJnZWFibGUgPyBwYWdlU2l6ZSA6IDA7CiAgICAgcHVy
Z2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CkBAIC03MzYsNyArNzQwLDcgQEAgdm9p
ZCBDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdgogICAgICAgICB3aGlsZSAoY3Vy
cmVudCkgewogICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3By
ZXZJbkFsbFJlc291cmNlc0xpc3Q7CiAgICAgICAgICAgICBpZiAoaW5jbHVkZUxpdmUgfHwgIWN1
cnJlbnQtPmhhc0NsaWVudHMoKSkKLSAgICAgICAgICAgICAgICBwcmludGYoIiglLjFmSywgJS4x
ZkssICV1QSwgJWRSKTsgIiwgY3VycmVudC0+ZGVjb2RlZFNpemUoKSAvIDEwMjQuMGYsIGN1cnJl
bnQtPmVuY29kZWRTaXplKCkgLyAxMDI0LjBmLCBjdXJyZW50LT5hY2Nlc3NDb3VudCgpLCBjdXJy
ZW50LT5oYXNDbGllbnRzKCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFm
SywgJXVBLCAlZFIpOyAiLCBjdXJyZW50LT5kZWNvZGVkU2l6ZSgpIC8gMTAyNC4wZiwgKGN1cnJl
bnQtPmVuY29kZWRTaXplKCkgKyBjdXJyZW50LT5vdmVyaGVhZFNpemUoKSkgLyAxMDI0LjBmLCBj
dXJyZW50LT5hY2Nlc3NDb3VudCgpLCBjdXJyZW50LT5oYXNDbGllbnRzKCkpOwogICAgICAgICAg
ICAgY3VycmVudCA9IHByZXY7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBsb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJl
dmlzaW9uIDM5MTIwKQorKysgbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzc0LDQgKzM3NCwxNyBAQCBib29sIENhY2hlZFJlc291cmNlOjp3YXNQdXJnZWQoKSBj
b25zdAogICAgIHJldHVybiBtX3B1cmdlYWJsZURhdGEgJiYgbV9wdXJnZWFibGVEYXRhLT53YXNQ
dXJnZWQoKTsKIH0KIAordW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6ZSgpIHsK
KyAgIAorICAgIC8vIEZJWE1FOiBGaW5kIHNvbWUgcHJvZ3JhbW1hdGljIGxpZ2h3ZWlnaHQgd2F5
IHRvIGNhbGN1bGF0ZSByZXNwb25zZSBzaXplLCBhbmQgc2l6ZSBvZiB0aGUgZGlmZmVyZW50IENh
Y2hlZFJlc291cmNlIGNsYXNzZXMuICAKKyAgICAvLyBUaGlzIGlzIGEgcm91Z2ggZXN0aW1hdGUg
b2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29sbGVjdGVkIGZyb20gdGhlIHN0
cmVzcyB0ZXN0LgorICAgIHJldHVybiAoc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIDE5MiArICAv
LyBhdmVyYWdlIHNpemUgb2YgbV91cmwuCisgICAgICAgICAgIDg5NiAqIDIgKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGF2ZXJhZ2Ugc2l6ZSBvZiBSZXNvdXJjZVJlc3BvbnNlLiAgRG91Ymxl
ZCB0byBhY2NvdW50IGZvciB0aGUgV2ViQ29yZSBjb3B5IGFuZCB0aGUgV2ViS2l0IGNvcHkuIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3N0bHkgZHVl
IHRvIHRoZSBIZWFkZXIgTWFwIGFuZCBVUkwuCisgICAgICAgICAgIDg5NiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENGTmV0d29yayBvdmVyaGVhZCBmcm9tIHJlYWRpbmcgYW5kIHBh
cnNpbmcgdGhlIGhlYWRlcnMuCisgICAgICAgICAgIDI1NiAqIDIgKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVkIHRvIGFjY291
bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgV2ViS2l0IGNvcHkuIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3N0bHkgZHVlIHRvIHRoZSBVUkwgYW5kIEhl
YWRlciBNYXAuCisgICAgICAgICAgIDE0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJvdW5kIHVwIHRvIDQuMEtCLgorfQorCiB9CkluZGV4OiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMzkxMjAp
CisrKyBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEw
Nyw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gZW5jb2Rl
ZFNpemUoKSArIGRlY29kZWRTaXplKCk7IH0KICAgICB1bnNpZ25lZCBlbmNvZGVkU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2RlZFNpemU7IH0KICAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KKyAgICB1bnNpZ25lZCBvdmVyaGVhZFNp
emUoKTsKICAgICAKICAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbG9hZGlu
ZzsgfQogICAgIHZvaWQgc2V0TG9hZGluZyhib29sIGIpIHsgbV9sb2FkaW5nID0gYjsgfQo=
</data>
<flag name="review"
          id="12134"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25939</attachid>
            <date>2008-12-10 22:15:31 -0800</date>
            <delta_ts>2008-12-11 16:59:39 -0800</delta_ts>
            <desc>new patch that calculates some sizes</desc>
            <filename>cachePatchwithCalc</filename>
            <type>text/plain</type>
            <size>16659</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5MTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDgtMTIt
MTAgIFN0ZXBoYW5pZSBMZXdzICA8c2xld2lzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKwkKKwlBY2NvdW50IGZvciB0aGUgc2l6ZSBvZiB0aGUgcmVz
cG9uc2UgYW5kIHJlcXVlc3QgaGVhZGVycyBhcyB3ZWxsIGFzIG90aGVyIG92ZXJoZWFkCisgICAg
ICAgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHNpemUgYSByZXNvdXJjZSB0YWtlcyB1cCBpbiB0aGUg
Y2FjaGUuICBIYWx0cyB1bmJvdW5kZWQgCisgICAgICAgIGdyb3d0aCBpbiB0aGUgY2FjaGUuICBS
ZWR1Y2VkIHN0cmVzcyB0ZXN0IG1lbW9yeSBoaWdoIHdhdGVyIG1hcmtzIGJ5ID4gNTAlLgorCisg
ICAgICAgICogbG9hZGVyL0NhY2hlLmNwcDogdXNlIG92ZXJoZWFkIHNpemUgd2hlbiBjYWxjdWxh
dGluZyByZXNvdXJjZSBzaXplCisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmV2YWxpZGF0aW9u
U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpldmljdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6bHJ1TGlzdEZvcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVt
b3ZlRnJvbUxSVUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlc291cmNlQWNjZXNz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmFkZFRvTGl2ZVJlc291cmNlc1NpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZTo6YWRqdXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6VHlwZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGU6OmR1bXBMUlVMaXN0cyk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDog
cmUtaW5zZXJ0IGludG8gY29ycmVjdCBMUlUgbGlzdHMgd2hlbgorICAgICAgICAgICAgICBvdmVy
aGVhZCBzaXplIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnNldFJlc3Bv
bnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjphZGRDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Y2FsY3VsYXRlT3ZlcmhlYWRT
aXplKTogY2FsY3VsYXRlIG92ZXJoZWFkIHNpemUKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVz
b3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpvdmVyaGVhZFNpemUp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOiBj
YWxjdWxhdGUgaW5pdGlhbCByZXNwb25zZSBzaXplCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6Y2FsY3VsYXRlUmVzcG9uc2VTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6b3JpZ2luYWxSZXNwb25zZVNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OlJlc291cmNlUmVzcG9uc2VCYXNlKToKKwogMjAwOC0x
Mi0xMCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9iaWxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbCBhbmQgR2VvcmdlIFN0YWlr
b3MuCkluZGV4OiBsb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZS5j
cHAJKHJldmlzaW9uIDM5MTg0KQorKysgbG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE5LDcgKzIxOSw3IEBAIHZvaWQgQ2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNo
ZWQKICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVlKTsKICAgICByZXNvdXJjZS0+c2V0RXhw
aXJhdGlvbkRhdGUocmVzcG9uc2UuZXhwaXJhdGlvbkRhdGUoKSk7CiAgICAgaW5zZXJ0SW5MUlVM
aXN0KHJlc291cmNlKTsKLSAgICBpbnQgZGVsdGEgPSByZXNvdXJjZS0+c2l6ZSgpOworICAgIGlu
dCBkZWx0YSA9IHJlc291cmNlLT5zaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCk7CiAg
ICAgaWYgKHJlc291cmNlLT5kZWNvZGVkU2l6ZSgpICYmIHJlc291cmNlLT5oYXNDbGllbnRzKCkp
CiAgICAgICAgIGluc2VydEluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKICAg
ICBpZiAoZGVsdGEpCkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBDYWNoZTo6ZXZpY3QoQ2FjaGVk
UmVzb3VyY2UqIHJlc291cgogICAgICAgICAgICAgKCppdHIpLT5yZW1vdmVDYWNoZWRSZXNvdXJj
ZShyZXNvdXJjZSk7CiAKICAgICAgICAgLy8gU3VidHJhY3QgZnJvbSBvdXIgc2l6ZSB0b3RhbHMu
Ci0gICAgICAgIGludCBkZWx0YSA9IC1zdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlLT5zaXplKCkp
OworICAgICAgICBpbnQgZGVsdGEgPSAtc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZS0+c2l6ZSgp
ICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKTsKICAgICAgICAgaWYgKGRlbHRhKQogICAgICAg
ICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS0+aGFzQ2xpZW50cygpLCBkZWx0YSk7CiAgICAgfSBl
bHNlCkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBmYXN0TG9nMih1
bnNpZ25lZAogQ2FjaGU6OkxSVUxpc3QqIENhY2hlOjpscnVMaXN0Rm9yKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSkKIHsKICAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCA9IG1heChyZXNvdXJjZS0+
YWNjZXNzQ291bnQoKSwgMVUpOwotICAgIHVuc2lnbmVkIHF1ZXVlSW5kZXggPSBmYXN0TG9nMihy
ZXNvdXJjZS0+c2l6ZSgpIC8gYWNjZXNzQ291bnQpOworICAgIHVuc2lnbmVkIHF1ZXVlSW5kZXgg
PSBmYXN0TG9nMigocmVzb3VyY2UtPnNpemUoKSArIHJlc291cmNlLT5vdmVyaGVhZFNpemUoKSkg
LyBhY2Nlc3NDb3VudCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlc291cmNlLT5tX2xydUluZGV4
ID0gcXVldWVJbmRleDsKICNlbmRpZgpAQCAtNDY1LDggKzQ2NSwxMyBAQCBDYWNoZTo6TFJVTGlz
dCogQ2FjaGU6OmxydUxpc3RGb3IoQ2FjaGVkCiB2b2lkIENhY2hlOjpyZW1vdmVGcm9tTFJVTGlz
dChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAgICAgLy8gSWYgd2UndmUgbmV2ZXIgYmVl
biBhY2Nlc3NlZCwgdGhlbiB3ZSdyZSBicmFuZCBuZXcgYW5kIG5vdCBpbiBhbnkgbGlzdC4KLSAg
ICBpZiAocmVzb3VyY2UtPmFjY2Vzc0NvdW50KCkgPT0gMCkKKyAgICBpZiAocmVzb3VyY2UtPmFj
Y2Vzc0NvdW50KCkgPT0gMCkgeyAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBTZXQgaW5p
dGlhbCBscnVJbmRleAorICAgICAgICBscnVMaXN0Rm9yKHJlc291cmNlKTsKKyNlbmRpZgogICAg
ICAgICByZXR1cm47CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHVuc2lnbmVkIG9sZExp
c3RJbmRleCA9IHJlc291cmNlLT5tX2xydUluZGV4OwpAQCAtNTQ5LDYgKzU1NCwxMCBAQCB2b2lk
IENhY2hlOjpyZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291CiAgICAgLy8gdGhlIHF1ZXVlIHdp
bGwgcG9zc2libHkgY2hhbmdlLgogICAgIHJlbW92ZUZyb21MUlVMaXN0KHJlc291cmNlKTsKICAg
ICAKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSByZXNvdXJjZSBoYXMgYmVl
biBhY2Nlc3NlZCwgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSBjYWNoZSB0byBhY2NvdW50IGZvciBp
dHMgaW5pdGlhbCBzaXplLgorICAgIGlmICghcmVzb3VyY2UtPmFjY2Vzc0NvdW50KCkpCisgICAg
ICAgIGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgcmVzb3VyY2UtPnNpemUoKSAr
IHJlc291cmNlLT5vdmVyaGVhZFNpemUoKSk7CisgICAgCiAgICAgLy8gQWRkIHRvIG91ciBhY2Nl
c3MgY291bnQuCiAgICAgcmVzb3VyY2UtPmluY3JlYXNlQWNjZXNzQ291bnQoKTsKICAgICAKQEAg
LTYyNSwxNCArNjM0LDE0IEBAIHZvaWQgQ2FjaGU6Omluc2VydEluTGl2ZURlY29kZWRSZXNvdXJj
ZXMKIAogdm9pZCBDYWNoZTo6YWRkVG9MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UpCiB7Ci0gICAgbV9saXZlU2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgpOwotICAgIG1f
ZGVhZFNpemUgLT0gcmVzb3VyY2UtPnNpemUoKTsKKyAgICBtX2RlYWRTaXplIC09IChyZXNvdXJj
ZS0+c2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKTsKKyAgICBtX2xpdmVTaXplICs9
IChyZXNvdXJjZS0+c2l6ZSgpICsgcmVzb3VyY2UtPm92ZXJoZWFkU2l6ZSgpKTsKIH0KIAogdm9p
ZCBDYWNoZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkKIHsKLSAgICBtX2xpdmVTaXplIC09IHJlc291cmNlLT5zaXplKCk7Ci0gICAgbV9kZWFk
U2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgpOworICAgIG1fbGl2ZVNpemUgLT0gKHJlc291cmNlLT5z
aXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOworICAgIG1fZGVhZFNpemUgKz0gKHJl
c291cmNlLT5zaXplKCkgKyByZXNvdXJjZS0+b3ZlcmhlYWRTaXplKCkpOwogfQogCiB2b2lkIENh
Y2hlOjphZGp1c3RTaXplKGJvb2wgbGl2ZSwgaW50IGRlbHRhKQpAQCAtNjUwLDEwICs2NTksMTAg
QEAgdm9pZCBDYWNoZTo6VHlwZVN0YXRpc3RpYzo6YWRkUmVzb3VyY2UoQwogewogICAgIGJvb2wg
cHVyZ2VkID0gby0+d2FzUHVyZ2VkKCk7CiAgICAgYm9vbCBwdXJnZWFibGUgPSBvLT5pc1B1cmdl
YWJsZSgpICYmICFwdXJnZWQ7IAotICAgIGludCBwYWdlU2l6ZSA9IChvLT5lbmNvZGVkU2l6ZSgp
ICsgNDA5NSkgJiB+NDA5NTsKKyAgICBpbnQgcGFnZVNpemUgPSAoby0+ZW5jb2RlZFNpemUoKSAr
IG8tPm92ZXJoZWFkU2l6ZSgpICsgNDA5NSkgJiB+NDA5NTsKICAgICBjb3VudCsrOwotICAgIHNp
emUgKz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKTsgCi0gICAgbGl2ZVNpemUgKz0gby0+aGFzQ2xp
ZW50cygpID8gby0+c2l6ZSgpIDogMDsKKyAgICBzaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXpl
KCkgKyBvLT5vdmVyaGVhZFNpemUoKTsgCisgICAgbGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygp
ID8gby0+c2l6ZSgpICsgby0+b3ZlcmhlYWRTaXplKCkgOiAwOwogICAgIGRlY29kZWRTaXplICs9
IG8tPmRlY29kZWRTaXplKCk7CiAgICAgcHVyZ2VhYmxlU2l6ZSArPSBwdXJnZWFibGUgPyBwYWdl
U2l6ZSA6IDA7CiAgICAgcHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CkBAIC03
MzYsNyArNzQ1LDcgQEAgdm9pZCBDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdgog
ICAgICAgICB3aGlsZSAoY3VycmVudCkgewogICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHBy
ZXYgPSBjdXJyZW50LT5tX3ByZXZJbkFsbFJlc291cmNlc0xpc3Q7CiAgICAgICAgICAgICBpZiAo
aW5jbHVkZUxpdmUgfHwgIWN1cnJlbnQtPmhhc0NsaWVudHMoKSkKLSAgICAgICAgICAgICAgICBw
cmludGYoIiglLjFmSywgJS4xZkssICV1QSwgJWRSKTsgIiwgY3VycmVudC0+ZGVjb2RlZFNpemUo
KSAvIDEwMjQuMGYsIGN1cnJlbnQtPmVuY29kZWRTaXplKCkgLyAxMDI0LjBmLCBjdXJyZW50LT5h
Y2Nlc3NDb3VudCgpLCBjdXJyZW50LT5oYXNDbGllbnRzKCkpOworICAgICAgICAgICAgICAgIHBy
aW50ZigiKCUuMWZLLCAlLjFmSywgJXVBLCAlZFIpOyAiLCBjdXJyZW50LT5kZWNvZGVkU2l6ZSgp
IC8gMTAyNC4wZiwgKGN1cnJlbnQtPmVuY29kZWRTaXplKCkgKyBjdXJyZW50LT5vdmVyaGVhZFNp
emUoKSkgLyAxMDI0LjBmLCBjdXJyZW50LT5hY2Nlc3NDb3VudCgpLCBjdXJyZW50LT5oYXNDbGll
bnRzKCkpOwogICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNo
ZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDM5MTg0KQorKysgbG9hZGVyL0NhY2hlZFJlc291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkUmVzb3VyY2UoY29uc3QgU3RyCiAgICAgbV9scnVJbmRleCA9IDA7CiAjZW5kaWYKICAgICBt
X2Vycm9yT2NjdXJyZWQgPSBmYWxzZTsKKyAgICAKKyAgICBjYWxjdWxhdGVPdmVyaGVhZFNpemUo
KTsKIH0KIAogQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCkBAIC0xMjYsNiArMTI4
LDI3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKGNvbnN0IFIKIHsKICAgICBt
X3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgbV9leHBpcmF0aW9uRGF0ZSA9IHJlc3BvbnNlLmV4
cGlyYXRpb25EYXRlKCk7CisgICAgCisgICAgLy8gVGhlIG9iamVjdCBtdXN0IG5vdyBiZSBtb3Zl
ZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4K
KyAgICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBsaWNpdGx5IGJlZm9yZSB1cGRhdGluZyB0aGUg
c2l6ZSwgc28gdGhhdCB3ZSBmaW5kIHRoZSBjb3JyZWN0IHByZXZpb3VzCisgICAgLy8gcXVldWUu
CisgICAgaW50IGRlbHRhID0gbV9yZXNwb25zZS5pbml0aWFsUmVzcG9uc2VTaXplKCk7CisgICAg
aWYgKGluQ2FjaGUoKSkKKyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlRnJvbUxSVUxpc3QodGhpcyk7
CisgICAgCisgICAgLy8gdXBkYXRlIHRoZSBvYmplY3Qgc2l6ZXMKKyAgICBtX3Jlc3BvbnNlLmNh
bGN1bGF0ZVJlc3BvbnNlU2l6ZSgpOworICAgIGNhbGN1bGF0ZU92ZXJoZWFkU2l6ZSgpOworICAg
IAorICAgIGRlbHRhID0gbV9yZXNwb25zZS5pbml0aWFsUmVzcG9uc2VTaXplKCkgLSBkZWx0YTsK
KyAgICBpZiAoaW5DYWNoZSgpKSB7IAorICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5l
dyBMUlUgbGlzdC4KKyAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MUlVMaXN0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90YWxzLgorICAgICAg
ICBpZihkZWx0YSkKKyAgICAgICAgICAgIGNhY2hlKCktPmFkanVzdFNpemUoaGFzQ2xpZW50cygp
LCBkZWx0YSk7CisgICAgfQogfQogCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJl
cXVlc3QqIHJlcXVlc3QpCkBAIC0xNDksMTUgKzE3Miw1OSBAQCB2b2lkIENhY2hlZFJlc291cmNl
OjphZGRDbGllbnQoQ2FjaGVkUmVzCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcHJlbG9h
ZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkOwogICAgIH0KKyAgICAKICAgICBpZiAoIWhhc0Ns
aWVudHMoKSAmJiBpbkNhY2hlKCkpCiAgICAgICAgIGNhY2hlKCktPmFkZFRvTGl2ZVJlc291cmNl
c1NpemUodGhpcyk7CisgICAgCisgICAgLy8gVGhlIG9iamVjdCBtdXN0IG5vdyBiZSBtb3ZlZCB0
byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgbWF5IGhhdmUgY2hhbmdlZC4KKyAg
ICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBsaWNpdGx5IGJlZm9yZSB1cGRhdGluZyB0aGUgc2l6
ZSwgc28gdGhhdCB3ZSBmaW5kIHRoZSBjb3JyZWN0IHByZXZpb3VzCisgICAgLy8gcXVldWUuCisg
ICAgaW50IGRlbHRhID0gc2l6ZW9mKENhY2hlZFJlc291cmNlQ2xpZW50KikqbV9jbGllbnRzLmNh
cGFjaXR5KCk7CisgICAgaWYgKGluQ2FjaGUoKSkKKyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlRnJv
bUxSVUxpc3QodGhpcyk7CisgICAgCiAgICAgbV9jbGllbnRzLmFkZChjKTsKKworICAgIC8vIHJl
Y2FsY3VsYXRlIG92ZXJoZWFkIHNpemUgc2luY2UgbV9jbGllbnRzIG1heSBoYXZlIGNoYW5nZWQK
KyAgICBjYWxjdWxhdGVPdmVyaGVhZFNpemUoKTsKKyAgICBkZWx0YSA9IChzaXplb2YoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqKSptX2NsaWVudHMuY2FwYWNpdHkoKSkgLSBkZWx0YTsKKyAgICAKKyAg
ICBpZiAoaW5DYWNoZSgpKSB7IAorICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBM
UlUgbGlzdC4KKyAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MUlVMaXN0KHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90YWxzLgorICAgICAgICBp
ZihkZWx0YSkKKyAgICAgICAgICAgIGNhY2hlKCktPmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBk
ZWx0YSk7CisgICAgfQogfQogCiB2b2lkIENhY2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgKmMpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhj
KSk7CisgICAgICAgIAorICAgIC8vIFRoZSBvYmplY3QgbXVzdCBub3cgYmUgbW92ZWQgdG8gYSBk
aWZmZXJlbnQgcXVldWUsIHNpbmNlIGl0cyBzaXplIG1heSBoYXZlIGNoYW5nZWQuCisgICAgLy8g
V2UgaGF2ZSB0byByZW1vdmUgZXhwbGljaXRseSBiZWZvcmUgdXBkYXRpbmcgdGhlIHNpemUsIHNv
IHRoYXQgd2UgZmluZCB0aGUgY29ycmVjdCBwcmV2aW91cworICAgIC8vIHF1ZXVlLgorICAgIGlu
dCBkZWx0YSA9IHNpemVvZihDYWNoZWRSZXNvdXJjZUNsaWVudCopKm1fY2xpZW50cy5jYXBhY2l0
eSgpOworICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MUlVM
aXN0KHRoaXMpOworICAgIAogICAgIG1fY2xpZW50cy5yZW1vdmUoYyk7CisgICAgCisgICAgLy8g
cmVjYWxjdWxhdGUgb3ZlcmhlYWQgc2l6ZSBzaW5jZSBtX2NsaWVudHMgaGFzIGNoYW5nZWQKKyAg
ICBkZWx0YSA9IChzaXplb2YoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKSptX2NsaWVudHMuY2FwYWNp
dHkoKSkgLSBkZWx0YTsKKyAgICBjYWxjdWxhdGVPdmVyaGVhZFNpemUoKTsKKyAgICAKKyAgICBp
ZiAoaW5DYWNoZSgpKSB7IAorICAgICAgICAvLyBOb3cgaW5zZXJ0IGludG8gdGhlIG5ldyBMUlUg
bGlzdC4KKyAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MUlVMaXN0KHRoaXMpOworICAgICAgICAK
KyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90YWxzLgorICAgICAgICBpZihk
ZWx0YSkKKyAgICAgICAgICAgIGNhY2hlKCktPmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBkZWx0
YSk7CisgICAgfQorICAgIAogICAgIGlmIChjYW5EZWxldGUoKSAmJiAhaW5DYWNoZSgpKQogICAg
ICAgICBkZWxldGUgdGhpczsKICAgICBlbHNlIGlmICghaGFzQ2xpZW50cygpICYmIGluQ2FjaGUo
KSkgewpAQCAtMjkyLDggKzM1OSwyOSBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGll
bnRzVG9SZXZhCiAgICAgICAgICAgICAtLWNvdW50OwogICAgICAgICB9CiAgICAgfQorICAgIAor
ICAgIC8vIFRoZSBvYmplY3QgbXVzdCBub3cgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUs
IHNpbmNlIGl0cyBzaXplIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgLy8gV2UgaGF2ZSB0byByZW1v
dmUgZXhwbGljaXRseSBiZWZvcmUgdXBkYXRpbmcgbV9kZWNvZGVkU2l6ZSwgc28gdGhhdCB3ZSBm
aW5kIHRoZSBjb3JyZWN0IHByZXZpb3VzCisgICAgLy8gcXVldWUuCisgICAgaW50IGRlbHRhID0g
KHNpemVvZihDYWNoZWRSZXNvdXJjZUNsaWVudCopKm1fY2xpZW50cy5jYXBhY2l0eSgpKTsKKyAg
ICBpZiAoaW5DYWNoZSgpKQorICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTFJVTGlzdCh0aGlz
KTsKKyAgICAKICAgICAvLyBFcXVpdmFsZW50IG9mIGNhbGxpbmcgcmVtb3ZlQ2xpZW50KCkgZm9y
IGFsbCBjbGllbnRzCiAgICAgbV9jbGllbnRzLmNsZWFyKCk7CisgICAgICAgIAorICAgIC8vIHJl
Y2FsY3VsYXRlIG92ZXJoZWFkIHNpemUgc2luY2UgbV9jbGllbnRzIGhhcyBjaGFuZ2VkCisgICAg
Y2FsY3VsYXRlT3ZlcmhlYWRTaXplKCk7CisgICAgZGVsdGEgPSAoc2l6ZW9mKENhY2hlZFJlc291
cmNlQ2xpZW50KikqbV9jbGllbnRzLmNhcGFjaXR5KCkpIC0gZGVsdGE7CisgICAgCisgICAgaWYg
KGluQ2FjaGUoKSkgeyAKKyAgICAgICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcgTFJVIGxp
c3QuCisgICAgICAgIGNhY2hlKCktPmluc2VydEluTFJVTGlzdCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUncyBzaXplIHRvdGFscy4KKyAgICAgICAgaWYoZGVs
dGEpCisgICAgICAgICAgICBjYWNoZSgpLT5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEp
OworICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBtb3ZlQ291bnQgPSBjbGllbnRzVG9Nb3ZlLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgbW92ZUNvdW50OyArK24pCkBAIC0z
NzQsNCArNDYyLDEyIEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Ondhc1B1cmdlZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fcHVyZ2VhYmxlRGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPndhc1B1cmdlZCgp
OwogfQogCit2b2lkIENhY2hlZFJlc291cmNlOjpjYWxjdWxhdGVPdmVyaGVhZFNpemUoKSB7Cisg
ICAgbV9vdmVyaGVhZFNpemUgPSAoc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIAorICAgICAgICAo
IW1fdXJsLmlzTnVsbCgpID8gbV91cmwubGVuZ3RoKCkqc2l6ZW9mKFVDaGFyKSA6IDAgKSArCisg
ICAgICAgIG1fY2xpZW50cy5jYXBhY2l0eSgpKnNpemVvZihDYWNoZWRSZXNvdXJjZUNsaWVudCop
ICsKKyAgICAgICAgbV9yZXNwb25zZS5pbml0aWFsUmVzcG9uc2VTaXplKCkgKyAKKyAgICAgICAg
MjU2ICogMik7ICAvLyBhdmcuIG92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVk
IHRvIGFjY291bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgQ0YgY29weS4gIE1vc3RseSBkdWUgdG8g
dGhlIFVSTCBhbmQgSGVhZGVyIE1hcC4KK30KKwogfQpJbmRleDogbG9hZGVyL0NhY2hlZFJlc291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDM5
MTg0KQorKysgbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2
ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVu
Y29kZWRTaXplKCkgKyBkZWNvZGVkU2l6ZSgpOyB9CiAgICAgdW5zaWduZWQgZW5jb2RlZFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2VuY29kZWRTaXplOyB9CiAgICAgdW5zaWduZWQgZGVjb2RlZFNp
emUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9CisgICAgdW5zaWduZWQgb3Zlcmhl
YWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vdmVyaGVhZFNpemU7IH0KICAgICAKICAgICBib29s
IGlzTG9hZGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbG9hZGluZzsgfQogICAgIHZvaWQgc2V0TG9h
ZGluZyhib29sIGIpIHsgbV9sb2FkaW5nID0gYjsgfQpAQCAtMTk3LDkgKzE5OCwxMSBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwogICAg
IHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogICAgIHZvaWQgc2V0RXhwaXJhdGlv
bkRhdGUodGltZV90IGV4cGlyYXRpb25EYXRlKSB7IG1fZXhwaXJhdGlvbkRhdGUgPSBleHBpcmF0
aW9uRGF0ZTsgfQorICAgIHZvaWQgY2FsY3VsYXRlT3ZlcmhlYWRTaXplKCk7CiAKICAgICB1bnNp
Z25lZCBtX2VuY29kZWRTaXplOwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7CisgICAgdW5z
aWduZWQgbV9vdmVyaGVhZFNpemU7CiAgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKICAgICB1
bnNpZ25lZCBtX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0OwogICAgIGRvdWJsZSBtX2xhc3RE
ZWNvZGVkQWNjZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJhc2ggZ3VhcmQiIGluIHRoZSBjYWNo
ZQpJbmRleDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHJldmlz
aW9uIDM5MTg0KQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNyw2ICszMDcsNDYgQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6Y29tcGFyZShjb25zdAogICAgIHJldHVybiBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9y
bUNvbXBhcmUoYSwgYik7CiB9CiAKKwordm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FsY3Vs
YXRlUmVzcG9uc2VTaXplKCkgCit7CisgICAgLy8gSW4gb3JkZXIgdG8gc2ltcGxpZnkgY2FsbGJh
Y2tzIHRvIHRoZSBjYWNoZWQgcmVzb3VyY2Ugb25seSBjYWxjdWxhdGUgc2l6ZSB3aGVuIGhlYWRl
cnMgYXJlIGZpcnN0IHJlY2VpdmVkLgorICAgIC8vIEZJWE1FOiB1cGRhdGUgcmVzcG9uc2Ugc2l6
ZSB3aGVuIGFueSBtZW1iZXIgY2hhbmdlcywgYW5kIHRoZW4gdXBkYXRlIHRoZSBjYWNoZWQgcmVz
b3VyY2UuCisgICAgaWYobV9pbml0aWFsUmVzcG9uc2VTaXplKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgbV9pbml0aWFsUmVzcG9uc2VTaXplID0gc2l6ZW9mKFJlc291cmNlUmVzcG9uc2Up
OworICAgIAorICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGhlYWRlck5vdEZvdW5k
ID0gbV9odHRwSGVhZGVyRmllbGRzLmVuZCgpOworICAgIGZvcihIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gbV9odHRwSGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ZXIgIT0gaGVh
ZGVyTm90Rm91bmQ7ICsraXRlcikKKyAgICAgICAgbV9pbml0aWFsUmVzcG9uc2VTaXplICs9IGl0
ZXItPmZpcnN0Lmxlbmd0aCgpKnNpemVvZihVQ2hhcikgKyBpdGVyLT5zZWNvbmQubGVuZ3RoKCkq
c2l6ZW9mKFVDaGFyKTsKKyAgICBtX2luaXRpYWxSZXNwb25zZVNpemUgKz0gbV9odHRwSGVhZGVy
RmllbGRzLmNhcGFjaXR5KCkqc2l6ZW9mKFN0cmluZyk7CisgICAgICAgICAgICAKKyAgICBDYWNo
ZUNvbnRyb2xEaXJlY3RpdmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGNhY2hlQ29udHJvbE5vdEZvdW5k
ID0gbV9jYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXAuZW5kKCk7CisgICAgZm9yKENhY2hlQ29udHJv
bERpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fY2FjaGVDb250cm9sRGlyZWN0
aXZlTWFwLmJlZ2luKCk7IGl0ZXIgIT0gY2FjaGVDb250cm9sTm90Rm91bmQ7ICsraXRlcikgewor
ICAgICAgICBtX2luaXRpYWxSZXNwb25zZVNpemUgKz0gaXRlci0+Zmlyc3QubGVuZ3RoKCkqc2l6
ZW9mKFVDaGFyKTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBzZXRO
b3RGb3VuZCA9IGl0ZXItPnNlY29uZC5lbmQoKTsKKyAgICAgICAgZm9yKEhhc2hTZXQ8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3Igc2V0SXRlciA9IGl0ZXItPnNlY29uZC5iZWdpbigpOyBzZXRJdGVy
ICE9IHNldE5vdEZvdW5kOyArK2l0ZXIpCisgICAgICAgICAgICBtX2luaXRpYWxSZXNwb25zZVNp
emUgKz0gc2V0SXRlci0+bGVuZ3RoKCkqc2l6ZW9mKFVDaGFyKTsKKyAgICB9CisgICAgbV9pbml0
aWFsUmVzcG9uc2VTaXplICs9IG1fY2FjaGVDb250cm9sRGlyZWN0aXZlTWFwLmNhcGFjaXR5KCkq
c2l6ZW9mKEhhc2hDb3VudGVkU2V0PFN0cmluZz4pOworCisgICAgCisgICAgUHJhZ21hRGlyZWN0
aXZlTWFwOjpjb25zdF9pdGVyYXRvciBwcmFnbWFOb3RGb3VuZCA9IG1fcHJhZ21hRGlyZWN0aXZl
TWFwLmVuZCgpOworICAgIGZvcihIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV9wcmFnbWFEaXJlY3RpdmVNYXAuYmVnaW4oKTsgaXRlciAhPSBwcmFnbWFOb3RGb3VuZDsgKytp
dGVyKQorICAgICAgICBtX2luaXRpYWxSZXNwb25zZVNpemUgKz0gaXRlci0+Zmlyc3QubGVuZ3Ro
KCkqc2l6ZW9mKFVDaGFyKSArIGl0ZXItPnNlY29uZC5sZW5ndGgoKSpzaXplb2YoVUNoYXIpOwor
ICAgIG1faW5pdGlhbFJlc3BvbnNlU2l6ZSArPSBtX3ByYWdtYURpcmVjdGl2ZU1hcC5jYXBhY2l0
eSgpKnNpemVvZihTdHJpbmcpOworICAgICAgICAKKyAgICBtX2luaXRpYWxSZXNwb25zZVNpemUg
Kz0gKCFtX3VybC5pc051bGwoKSA/IHNpemVvZihLVVJMKSArIG1fdXJsLnN0cmluZygpLmxlbmd0
aCgpKnNpemVvZihVQ2hhcikgOiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCFt
X21pbWVUeXBlLmlzTnVsbCgpID8gbV9taW1lVHlwZS5sZW5ndGgoKSpzaXplb2YoVUNoYXIpIDog
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5p
c051bGwoKSA/IG1fc3VnZ2VzdGVkRmlsZW5hbWUubGVuZ3RoKCkqc2l6ZW9mKFVDaGFyKSA6IDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoIW1fdGV4dEVuY29kaW5nTmFtZS5pc051
bGwoKSA/IG1fdGV4dEVuY29kaW5nTmFtZS5sZW5ndGgoKSpzaXplb2YoVUNoYXIpIDogMCkgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoIW1faHR0cFN0YXR1c1RleHQuaXNOdWxsKCkg
PyBtX2h0dHBTdGF0dXNUZXh0Lmxlbmd0aCgpKnNpemVvZihVQ2hhcikgOiAwKTsKKyAgICAgICAg
CisgICAgbV9pbml0aWFsUmVzcG9uc2VTaXplKj0yOyAvLyBEb3VibGUgdG8gYWNjb3VudCBmb3Ig
d2ViY29yZSBjb3B5IGFuZCB3ZWJraXQgY29weTsKKyAgICAKK30KKwogc3RhdGljIGJvb2wgaXND
YWNoZUhlYWRlclNlcGFyYXRvcihVQ2hhciBjKQogewogICAgIC8vIFNlZSBSRkMgMjYxNiwgU2Vj
dGlvbiAyLjIKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJl
dmlzaW9uIDM5MTg0KQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw5IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2VC
YXNlIHsKIAogICAgIHZvaWQgc2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QpOwogICAgIHRpbWVf
dCBsYXN0TW9kaWZpZWREYXRlKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBjYWxjdWxhdGVSZXNw
b25zZVNpemUoKTsKKyAgICBpbnQgaW5pdGlhbFJlc3BvbnNlU2l6ZSgpIHsgcmV0dXJuIG1faW5p
dGlhbFJlc3BvbnNlU2l6ZTsgfSAKIAogICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYik7CiAKQEAgLTkzLDYg
Kzk2LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2UgewogICAgICAgICAsIG1faXNOdWxs
KHRydWUpCiAgICAgICAgICwgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKGZhbHNlKQog
ICAgICAgICAsIG1faGF2ZVBhcnNlZFByYWdtYUhlYWRlcihmYWxzZSkKKyAgICAgICAgLCBtX2lu
aXRpYWxSZXNwb25zZVNpemUoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMDgsNiArMTEyLDcgQEAg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2UgewogICAgICAgICAsIG1faXNOdWxsKGZhbHNlKQog
ICAgICAgICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcihmYWxzZSkKICAgICAgICAg
LCBtX2hhdmVQYXJzZWRQcmFnbWFIZWFkZXIoZmFsc2UpCisgICAgICAgICwgbV9pbml0aWFsUmVz
cG9uc2VTaXplKDApCiAgICAgewogICAgIH0KIApAQCAtMTM0LDYgKzEzOSw3IEBAIGNsYXNzIFJl
c291cmNlUmVzcG9uc2VCYXNlIHsKICAgICBtdXRhYmxlIGJvb2wgbV9oYXZlUGFyc2VkUHJhZ21h
SGVhZGVyOjE7CiAgICAgbXV0YWJsZSBDYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXAgbV9jYWNoZUNv
bnRyb2xEaXJlY3RpdmVNYXA7CiAgICAgbXV0YWJsZSBQcmFnbWFEaXJlY3RpdmVNYXAgbV9wcmFn
bWFEaXJlY3RpdmVNYXA7CisgICAgdW5zaWduZWQgIG1faW5pdGlhbFJlc3BvbnNlU2l6ZTsKIH07
CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYSwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNv
bXBhcmUoYSwgYik7IH0K
</data>
<flag name="review"
          id="12186"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26124</attachid>
            <date>2008-12-18 10:52:18 -0800</date>
            <delta_ts>2008-12-18 12:39:58 -0800</delta_ts>
            <desc>Death by a Million Papercuts Test</desc>
            <filename>papercuts.zip</filename>
            <type>application/x-zip-compressed</type>
            <size>955</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">UEsDBBQAAAAIAAFVkjkYCGKVvwIAAGkHAAAKAAAAaW5kZXguaHRtbI1V3U/bMBB/R+J/OPKwpmqX
UvFG0k4wJm3SmJDoG+LBta+Nh2tnjkPpEP/7zlnafBSq+iGxz/fxu9+d7SR1KzU9PQEaSYpMTJOR
/21FudsorBb0LYdcLeEV5sYKtJcwzl4gN0oKWKfSYQwZE0Lq5SVcZC8xzBl/WlpTaPGZG2XIwKKI
4e30pIowaoZIcm5l5vyqGs/MAidzBxM4j9tyy/QSST4+P+9u5c5kGQqS1vLRCKSWTjIl/6KA+Ya0
mHVhv22asQwtL1wev4MCLUk7oTLG0c5wlSnmPJwH6CWeo9zySfB/N1rKxRcpJr0hjIfQ++TkCin4
KvOSC5IE0x48NgLWs0WhuZNGA7dI/u9Lf9+paqEUQ9g5aiTxWk+hg+5h/EgApYgPqFyQSu23pWnR
FVZ3DKLfRuqw1+s3VN+OyOSu4vmaOZ6GZS0P51PXHfNC+YYIgha8hbGh35dlr9AvgdItTQeDftsP
bL0MJu8w2wTSCvG2T0fl6OjsLWqB9is1WLiHSS4grFq3JqATjwK1tuqGjaTWlMHs9idMDpGscQ03
tBn228nBtsdbjgaDUtrRXEstzDrK0c2IKVO4sM5r6E9kpx32idg/fa8f5EUghOHFCrWLlui+KfTT
680PEQY7peCDXA4ZVypd01aJjq6rr9uBbKqy+rNlC4yPKWFwlaZRFMH9GtERKCVxQetG0zfv0dbV
mcyN2IDRyjAxCSqmg8a9mqTj6Q0yl/p78ApupVI+ibstEHoGxk31bDpLZQ4Ocwf4krIip7pwxlP0
DqR21oiC070PytCOWUCh5Z+iPNJ6U2lKh6s8SkZZ23O9gB0AKDv2EhK6bDRIMdkVi14oL2tYHXTo
uSico9yM5kryJ0+HyTwb9/SHH+4M7hSynKD+MnBrLJ4lo9LkQAwhnz2ouv08LBJOt9Xw/NMiGVUP
7D9QSwMEFAAAAAgAVUuSOcQzBqwmAAAAKgAAAAoAAABzcGFjZXIuZ2lmc/d0s7BMZGRgZGj4z3Dg
wAEGBgbFnyyMDECgAyKAMkCC0YjBGgBQSwECFAAUAAAACAABVZI5GAhilb8CAABpBwAACgAAAAAA
AAAAACAAAAAAAAAAaW5kZXguaHRtbFBLAQIUABQAAAAIAFVLkjnEMwasJgAAACoAAAAKAAAAAAAA
AAAAIAAAAOcCAABzcGFjZXIuZ2lmUEsFBgAAAAACAAIAcAAAADUDAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26127</attachid>
            <date>2008-12-18 12:39:58 -0800</date>
            <delta_ts>2008-12-19 13:10:44 -0800</delta_ts>
            <desc>Death by a Million Papercuts Test v2</desc>
            <filename>papercuts.zip</filename>
            <type>application/x-zip-compressed</type>
            <size>1004</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">UEsDBBQAAAAIAJlekjnK7m7C8AIAAIcIAAAKAAAAaW5kZXguaHRtbJVWX2/aMBB/r9TvcM3DEgRL
iqq+lMDUrpM2aZ0qlbeqD8Y+iNdgZ45Tyiq++85ZgCQwRi2B7bvz/fnd2Zc4sfN0dHoCNOIEmRjF
kZvWpNwuU6w29F8OOZ/BG0y0EWiuoJ+9Qq5TKWCRSIsDyJgQUs2u4CJ7HcCE8eeZ0YUSH7lONR0w
KAawOj2pLER1E3HOjcys21XjhRngdNzCEM4HTbphaoZE75+ft1m51VmGgqhbehSBVNJKlsrfKGCy
JClmbNDZYw0NHW2pzBhHM8Z5ljLrzD6CHzsspBh6f5l+D/o98D3IDV/TwpmcfiIR4l0Q74OVcyS7
88xRLp30yIenmvvb1bRQ3EqtgBskkw+lvq+UsECKHmwU1fx/2y6h5fBj/4l8lmJwQOTi/yKXJLI1
3ZA0aAujWgfCn1qqwPc7NdHVEcHeswwNL+wNszwJykwfDnlbFZgXqSsXz2u4N9UmcHxZVhJNMZRq
adntdpp6YK2lO9wDft2RholVfSM0L+aobDhD+yVFt7xZfhOBl1Wh5V4nlEqR1vHddxhWJo/GqcjE
O3F6PxaHI/GrqocuyE5INU/a/FbVOx79GnVP+/0VtDo29jl7xs+EYLDjq5xCUF3+bfCtEiWbDdYh
KBUu4JaYQaeZali/E40UdrsltSW5kEroRZijHVPYurDB2v+ee7taV2M33N136m2vKzD8d9FVIt5O
FAbfHfoW/uNvtcvJgQiqlLm3xRTYMre5MA2sveskCcMQHhaIFgymEqe09/ahGUeNxhJPtFiCVqlm
9HZX6Hq1rhMn/dEtAZO4LnENdzJNXRBrmHJqkv26eDYaJzIHi7kFfE1YkdscOOMJOgVSWaNFwakr
QqqJo6dQKPmrKK+qWlaS0uI8D+Moa2quYbFxAMpEXUFMt025BrTJL/VvR6udOqjQYVFYqxWhwVPJ
nx0cOnNoPNAM3+wZ3KfIcnL1h4Y7bfAsjsojB2wI+VI6tUmcc4uIa/gjhz9t4qj6/PgDUEsDBBQA
AAAIAFVLkjnEMwasJgAAACoAAAAKAAAAc3BhY2VyLmdpZnP3dLOwTGRkYGRo+M9w4MABBgYGxZ8s
jAxAoAMigDJAgtGIwRoAUEsBAhQAFAAAAAgAmV6SOcrubsLwAgAAhwgAAAoAAAAAAAAAAAAgAAAA
AAAAAGluZGV4Lmh0bWxQSwECFAAUAAAACABVS5I5xDMGrCYAAAAqAAAACgAAAAAAAAAAACAAAAAY
AwAAc3BhY2VyLmdpZlBLBQYAAAAAAgACAHAAAABmAwAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26153</attachid>
            <date>2008-12-19 13:10:44 -0800</date>
            <delta_ts>2008-12-19 13:10:44 -0800</delta_ts>
            <desc>Death by a Million Papercuts Test v3</desc>
            <filename>papercuts3.zip</filename>
            <type>application/x-zip-compressed</type>
            <size>1185</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">UEsDBBQAAAAIALpSkzm5/Z1DpQMAAHoNAAAKAAAAaW5kZXguaHRtbJ1XTW/bOBC9F+h/mOqwlmGv
HKPoHmLZRb8WLdAsAiS3ogeaHFtsZFJLUnG8bf77DhVZkW1WTizAsMh5fPPBxzGdZm6Vz16+AHrS
DJmo36uxdZscWxOPbwBytYSfMNdGoDmHcXEHVudSwDqTDicwZ/xmaXSpxJ9c55ogBsUE1lK47Bz+
Ku4mkKFcZq4e3L980XI82vecWm5k4fxM67llBjj5cDCFs8mhzZaco7UfOiALJvMu+5w5nnUBDFNL
JNv47CwYgtNFgYIsu7bRCKSSTrJc/ocC5htCMuPi/m8yRHMkPzQd2YWtBSvQ8NJZsgXIC8bRXOOq
yJnzGX6DXup3XYpp9GDsDWE8hF4E1vDtXLKUi7cEIdtrsv3h5AoptVXhZ9549KwH3/ei2R0tSsWd
1Aq4QXJ9VfF+Jp3GUgyhIdwr1c/dIewl8G38nXKQYnIE9vppsDcEewzlAG3QlUbtLUp+aKniXq+/
B79/RjEu6z1773UZV+I7UpIDwaItc6/mKDoIe6FN7DGyEjt9pQ/6ptfBoH/IB1u2wTSwWe3AKlcd
ScOjGhOpFFFcX3yFac1/UsHKQpxcsNMLIjQvV6hcskT3KUf/+n7zRcS9+sjAAGQ/sYYTY2/vyHgb
fdqHhuY6ZHZ/Sl1W7AY/UJ3jUPxdVVO4ho9kjPsBBYedhbvaodttk4PpbwsY1ZDoUEvQdMLjLFtk
B1nTNbuZPKyLphF0F0kD6qZImBCfbmnVV2kdKjRxlGsmomFT6fBuAtDq2JkSQ/T3Q/Cm53pGY7R5
ousFy+1zfXODz5cgPY/KPrHDUry1PI4LVi5gB9ytyJ2eNhi0jYE8kGrmZ0PCDBM2FmILx1pfRODX
L4JzD4W0urQ00Yd+wYJ0zZUrbA0GWN+jwvmupRJ6nVh013KFmrZhu5NDH+Jpu+kTfkLj2dZlWsmx
8yS0M4reZVmSJHC1RnRgMJe4oHHU1RjTUfsWS8PWfTuda7EBrfypnkZ114zaN+BsPPuIzGX+rvgO
LmSe+ywvt9ER27gNL2bXmbTg0DrAu4yV1lngjGfoCaRyRouSS7WEXJNFL6BU8t+y+nFUmxopHa5s
ko6KXeZWjk0AUJ3Tc0htwZS/Izb9epaO/NxsCFcPsl+UOfjNbYGbtnyw5m9SNooDvBf8HrgVVmfE
vtilc1qBVjyX/MbXWxe+3Ff0DV/cK7jMkVmqxT8aLrTBV+moWtLhQ8jbKrBGLj4smmw2228wDdJR
/Y/rf1BLAwQUAAAACABVS5I5xDMGrCYAAAAqAAAACgAAAHNwYWNlci5naWZz93SzsExkZGBkaPjP
cODAAQYGBsWfLIwMQKADIoAyQILRiMEaAFBLAQIUABQAAAAIALpSkzm5/Z1DpQMAAHoNAAAKAAAA
AAAAAAAAIAAAAAAAAABpbmRleC5odG1sUEsBAhQAFAAAAAgAVUuSOcQzBqwmAAAAKgAAAAoAAAAA
AAAAAAAgAAAAzQMAAHNwYWNlci5naWZQSwUGAAAAAAIAAgBwAAAAGwQAAAAA
</data>

          </attachment>
      

    </bug>

</bugzilla>